ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1jbGFzcy1iYWNrbGlnaHQgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtY2xhc3MtYmFja2xpZ2h0CmluZGV4IDRkNjM3ZTEuLjcwMzAyZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1jbGFzcy1iYWNrbGlnaHQKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWNsYXNzLWJhY2tsaWdodApAQCAtMzQsMyArMzQsMjMgQEAKIERlc2NyaXB0aW9uOgogCQlNYXhpbXVtIGJyaWdodG5lc3MgZm9yIDxiYWNrbGlnaHQ+LgogVXNlcnM6CQlIQUwKKworV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L3R5cGUKK0RhdGU6CQlTZXB0ZW1iZXIgMjAxMAorS2VybmVsVmVyc2lvbjoJMi42LjM3CitDb250YWN0OglNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPgorRGVzY3JpcHRpb246CisJCVRoZSB0eXBlIG9mIGludGVyZmFjZSBjb250cm9sbGVkIGJ5IDxiYWNrbGlnaHQ+LgorCQkiZmlybXdhcmUiOiBUaGUgZHJpdmVyIHVzZXMgYSBzdGFuZGFyZCBmaXJtd2FyZSBpbnRlcmZhY2UKKwkJInBsYXRmb3JtIjogVGhlIGRyaXZlciB1c2VzIGEgcGxhdGZvcm0tc3BlY2lmaWMgaW50ZXJmYWNlCisJCSJyYXciOiBUaGUgZHJpdmVyIGNvbnRyb2xzIGhhcmR3YXJlIHJlZ2lzdGVycyBkaXJlY3RseQorCisJCUluIHRoZSBnZW5lcmFsIGNhc2UsIHdoZW4gbXVsdGlwbGUgYmFja2xpZ2h0CisJCWludGVyZmFjZXMgYXJlIGF2YWlsYWJsZSBmb3IgYSBzaW5nbGUgZGV2aWNlLCBmaXJtd2FyZQorCQljb250cm9sIHNob3VsZCBiZSBwcmVmZXJyZWQgdG8gcGxhdGZvcm0gY29udHJvbCBzaG91bGQKKwkJYmUgcHJlZmVycmVkIHRvIHJhdyBjb250cm9sLiBVc2luZyBhIGZpcm13YXJlCisJCWludGVyZmFjZSByZWR1Y2VzIHRoZSBwcm9iYWJpbGl0eSBvZiBjb25mdXNpb24gd2l0aAorCQl0aGUgaGFyZHdhcmUgYW5kIHRoZSBPUyBpbmRlcGVuZGVudGx5IHVwZGF0aW5nIHRoZQorCQliYWNrbGlnaHQgc3RhdGUuIFBsYXRmb3JtIGludGVyZmFjZXMgYXJlIG1vc3RseSBhCisJCWhvbGRvdmVyIGZyb20gcHJlLXN0YW5kYXJkaXNhdGlvbiBvZiBmaXJtd2FyZQorCQlpbnRlcmZhY2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1zcGVhci1wY2llLWdhZGdldCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtc3BlYXItcGNpZS1nYWRnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1OTg4MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtc3BlYXItcGNpZS1nYWRnZXQKQEAgLTAsMCArMSwzMSBAQAorV2hhdDoJCS9jb25maWcvcGNpZS1nYWRnZXQKK0RhdGU6CQlGZWIgMjAxMQorS2VybmVsVmVyc2lvbjoJMi42LjM3CitDb250YWN0OglQcmF0eXVzaCBBbmFuZCA8cHJhdHl1c2guYW5hbmRAc3QuY29tPgorRGVzY3JpcHRpb246CisKKwlJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgc2VsZWN0ZWQgZHVhbCBtb2RlIFBDSWUgY29udHJvbGxlcgorCWFzIGRldmljZSBhbmQgdGhlbiBwcm9ncmFtIGl0cyB2YXJpb3VzIHJlZ2lzdGVycyB0byBjb25maWd1cmUgaXQKKwlhcyBhIHBhcnRpY3VsYXIgZGV2aWNlIHR5cGUuCisJVGhpcyBpbnRlcmZhY2VzIGNhbiBiZSB1c2VkIHRvIHNob3cgc3BlYXIncyBQQ0llIGRldmljZSBjYXBhYmlsaXR5LgorCisJTm9kZXMgYXJlIG9ubHkgdmlzaWJsZSB3aGVuIGNvbmZpZ2ZzIGlzIG1vdW50ZWQuIFRvIG1vdW50IGNvbmZpZ2ZzCisJaW4gL2NvbmZpZyBkaXJlY3RvcnkgdXNlOgorCSMgbW91bnQgLXQgY29uZmlnZnMgbm9uZSAvY29uZmlnLworCisJRm9yIG50aCBQQ0llIERldmljZSBDb250cm9sbGVyCisJL2NvbmZpZy9wY2llLWdhZGdldC5uLworCQlsaW5rIC4uLiB1c2VkIHRvIGVuYWJsZSBsdHNzbSBhbmQgcmVhZCBpdHMgc3RhdHVzLgorCQlpbnRfdHlwZSAuLi51c2VkIHRvIGNvbmZpZ3VyZSBhbmQgcmVhZCB0eXBlIG9mIHN1cHBvcnRlZAorCQkJaW50ZXJydXB0CisJCW5vX29mX21zaSAuLi4gdXNlZCB0byBjb25maWd1cmUgbnVtYmVyIG9mIE1TSSB2ZWN0b3IgbmVlZGVkIGFuZAorCQkJdG8gcmVhZCBubyBvZiBNU0kgZ3JhbnRlZC4KKwkJaW50YSAuLi4gd3JpdGUgMSB0byBhc3NlcnQgSU5UQSBhbmQgMCB0byBkZS1hc3NlcnQuCisJCXNlbmRfbXNpIC4uLiB3cml0ZSBNU0kgdmVjdG9yIHRvIGJlIHNlbnQuCisJCXZlbmRvcl9pZCAuLi4gdXNlZCB0byB3cml0ZSBhbmQgcmVhZCB2ZW5kb3IgaWQgKGhleCkKKwkJZGV2aWNlX2lkIC4uLiB1c2VkIHRvIHdyaXRlIGFuZCByZWFkIGRldmljZSBpZCAoaGV4KQorCQliYXIwX3NpemUgLi4uIHVzZWQgdG8gd3JpdGUgYW5kIHJlYWQgYmFyMF9zaXplCisJCWJhcjBfYWRkcmVzcyAuLi4gdXNlZCB0byB3cml0ZSBhbmQgcmVhZCBiYXIwIG1hcHBlZCBhcmVhIGluIGhleC4KKwkJYmFyMF9yd19vZmZzZXQgLi4uIHVzZWQgdG8gd3JpdGUgYW5kIHJlYWQgb2Zmc2V0IG9mIGJhcjAgd2hlcmUKKwkJCWJhcjBfZGF0YSB3aWxsIGJlIHdyaXR0ZW4gb3IgcmVhZC4KKwkJYmFyMF9kYXRhIC4uLiB1c2VkIHRvIHdyaXRlIGFuZCByZWFkIGRhdGEgYXQgYmFyMF9yd19vZmZzZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3BzdG9yZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvcHN0b3JlCmluZGV4IGYxZmIyYTAuLmRkZjQ1MWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvcHN0b3JlCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvcHN0b3JlCkBAIC0xLDYgKzEsNiBAQAogV2hlcmU6CQkvZGV2L3BzdG9yZS8uLi4KLURhdGU6CQlKYW51YXJ5IDIwMTEKLUtlcm5lbCBWZXJzaW9uOiAyLjYuMzgKK0RhdGU6CQlNYXJjaCAyMDExCitLZXJuZWwgVmVyc2lvbjogMi42LjM5CiBDb250YWN0Ogl0b255Lmx1Y2tAaW50ZWwuY29tCiBEZXNjcmlwdGlvbjoJR2VuZXJpYyBpbnRlcmZhY2UgdG8gcGxhdGZvcm0gZGVwZW5kZW50IHBlcnNpc3RlbnQgc3RvcmFnZS4KIApAQCAtMTEsNyArMTEsNyBAQAogCQlvZiB0aGUgY29uc29sZSBsb2cgaXMgY2FwdHVyZWQsIGJ1dCBvdGhlciBpbnRlcmVzdGluZwogCQlkYXRhIGNhbiBhbHNvIGJlIHNhdmVkLgogCi0JCSMgbW91bnQgLXQgcHN0b3JlIC0gL2Rldi9wc3RvcmUKKwkJIyBtb3VudCAtdCBwc3RvcmUgLW8ga21zZ19ieXRlcz04MDAwIC0gL2Rldi9wc3RvcmUKIAogCQkkIGxzIC1sIC9kZXYvcHN0b3JlCiAJCXRvdGFsIDAKQEAgLTMzLDMgKzMzLDkgQEAKIAkJd2lsbCBiZSBzYXZlZCBlbHNld2hlcmUgYW5kIGVyYXNlZCBmcm9tIHBlcnNpc3RlbnQgc3RvcmUKIAkJc29vbiBhZnRlciBib290IHRvIGZyZWUgdXAgc3BhY2UgcmVhZHkgZm9yIHRoZSBuZXh0CiAJCWNhdGFzdHJvcGhlLgorCisJCVRoZSAna21zZ19ieXRlcycgbW91bnQgb3B0aW9uIGNoYW5nZXMgdGhlIHRhcmdldCBhbW91bnQgb2YKKwkJZGF0YSBzYXZlZCBvbiBlYWNoIG9vcHMvcGFuaWMuIFBzdG9yZSBzYXZlcyAocG9zc2libHkKKwkJbXVsdGlwbGUpIGZpbGVzIGJhc2VkIG9uIHRoZSByZWNvcmQgc2l6ZSBvZiB0aGUgdW5kZXJseWluZworCQlwZXJzaXN0ZW50IHN0b3JhZ2UgdW50aWwgYXQgbGVhc3QgdGhpcyBhbW91bnQgaXMgcmVhY2hlZC4KKwkJRGVmYXVsdCBpcyAxMCBLYnl0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKaW5kZXggZjk3OWQ4Mi4uMzZiZjQ1NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaQpAQCAtMTQ1LDkgKzE0NSwxMSBAQAogQ29udGFjdDoJTmFyZW5kcmEgSyA8bmFyZW5kcmFfa0BkZWxsLmNvbT4sIGxpbnV4LWJ1Z3NAZGVsbC5jb20KIERlc2NyaXB0aW9uOgogCQlSZWFkaW5nIHRoaXMgYXR0cmlidXRlIHdpbGwgcHJvdmlkZSB0aGUgZmlybXdhcmUKLQkJZ2l2ZW4gbmFtZShTTUJJT1MgdHlwZSA0MSBzdHJpbmcpIG9mIHRoZSBQQ0kgZGV2aWNlLgotCQlUaGUgYXR0cmlidXRlIHdpbGwgYmUgY3JlYXRlZCBvbmx5IGlmIHRoZSBmaXJtd2FyZQotCQloYXMgZ2l2ZW4gYSBuYW1lIHRvIHRoZSBQQ0kgZGV2aWNlLgorCQlnaXZlbiBuYW1lIChTTUJJT1MgdHlwZSA0MSBzdHJpbmcgb3IgQUNQSSBfRFNNIHN0cmluZykgb2YKKwkJdGhlIFBDSSBkZXZpY2UuCVRoZSBhdHRyaWJ1dGUgd2lsbCBiZSBjcmVhdGVkIG9ubHkKKwkJaWYgdGhlIGZpcm13YXJlCWhhcyBnaXZlbiBhIG5hbWUgdG8gdGhlIFBDSSBkZXZpY2UuCisJCUFDUEkgX0RTTSBzdHJpbmcgbmFtZSB3aWxsIGJlIGdpdmVuIHByaW9yaXR5IGlmIHRoZQorCQlzeXN0ZW0gZmlybXdhcmUgcHJvdmlkZXMgU01CSU9TIHR5cGUgNDEgc3RyaW5nIGFsc28uCiBVc2VyczoKIAkJVXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBpbnRlcmVzdGVkIGluIGtub3dpbmcgdGhlCiAJCWZpcm13YXJlIGFzc2lnbmVkIG5hbWUgb2YgdGhlIFBDSSBkZXZpY2UuCkBAIC0xNTcsMTIgKzE1OSwyNyBAQAogQ29udGFjdDoJTmFyZW5kcmEgSyA8bmFyZW5kcmFfa0BkZWxsLmNvbT4sIGxpbnV4LWJ1Z3NAZGVsbC5jb20KIERlc2NyaXB0aW9uOgogCQlSZWFkaW5nIHRoaXMgYXR0cmlidXRlIHdpbGwgcHJvdmlkZSB0aGUgZmlybXdhcmUKLQkJZ2l2ZW4gaW5zdGFuY2UoU01CSU9TIHR5cGUgNDEgZGV2aWNlIHR5cGUgaW5zdGFuY2UpCi0JCW9mIHRoZSBQQ0kgZGV2aWNlLiBUaGUgYXR0cmlidXRlIHdpbGwgYmUgY3JlYXRlZAotCQlvbmx5IGlmIHRoZSBmaXJtd2FyZSBoYXMgZ2l2ZW4gYSBkZXZpY2UgdHlwZSBpbnN0YW5jZQotCQl0byB0aGUgUENJIGRldmljZS4KKwkJZ2l2ZW4gaW5zdGFuY2UgKFNNQklPUyB0eXBlIDQxIGRldmljZSB0eXBlIGluc3RhbmNlKSBvZiB0aGUKKwkJUENJIGRldmljZS4gVGhlIGF0dHJpYnV0ZSB3aWxsIGJlIGNyZWF0ZWQgb25seSBpZiB0aGUgZmlybXdhcmUKKwkJaGFzIGdpdmVuIGFuIGluc3RhbmNlIG51bWJlciB0byB0aGUgUENJIGRldmljZS4KIFVzZXJzOgogCQlVc2Vyc3BhY2UgYXBwbGljYXRpb25zIGludGVyZXN0ZWQgaW4ga25vd2luZyB0aGUKIAkJZmlybXdhcmUgYXNzaWduZWQgZGV2aWNlIHR5cGUgaW5zdGFuY2Ugb2YgdGhlIFBDSQogCQlkZXZpY2UgdGhhdCBjYW4gaGVscCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmaXJtd2FyZQogCQlpbnRlbmRlZCBvcmRlciBvZiB0aGUgUENJIGRldmljZS4KKworV2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9hY3BpX2luZGV4CitEYXRlOgkJSnVseSAyMDEwCitDb250YWN0OglOYXJlbmRyYSBLIDxuYXJlbmRyYV9rQGRlbGwuY29tPiwgbGludXgtYnVnc0BkZWxsLmNvbQorRGVzY3JpcHRpb246CisJCVJlYWRpbmcgdGhpcyBhdHRyaWJ1dGUgd2lsbCBwcm92aWRlIHRoZSBmaXJtd2FyZQorCQlnaXZlbiBpbnN0YW5jZSAoQUNQSSBfRFNNIGluc3RhbmNlIG51bWJlcikgb2YgdGhlIFBDSSBkZXZpY2UuCisJCVRoZSBhdHRyaWJ1dGUgd2lsbCBiZSBjcmVhdGVkIG9ubHkgaWYgdGhlIGZpcm13YXJlIGhhcyBnaXZlbgorCQlhbiBpbnN0YW5jZSBudW1iZXIgdG8gdGhlIFBDSSBkZXZpY2UuIEFDUEkgX0RTTSBpbnN0YW5jZSBudW1iZXIKKwkJd2lsbCBiZSBnaXZlbiBwcmlvcml0eSBpZiB0aGUgc3lzdGVtIGZpcm13YXJlIHByb3ZpZGVzIFNNQklPUworCQl0eXBlIDQxIGRldmljZSB0eXBlIGluc3RhbmNlIGFsc28uCitVc2VyczoKKwkJVXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBpbnRlcmVzdGVkIGluIGtub3dpbmcgdGhlCisJCWZpcm13YXJlIGFzc2lnbmVkIGluc3RhbmNlIG51bWJlciBvZiB0aGUgUENJCisJCWRldmljZSB0aGF0IGNhbiBoZWxwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZpcm13YXJlCisJCWludGVuZGVkIG9yZGVyIG9mIHRoZSBQQ0kgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcmJkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcmJkCmluZGV4IDkwYTg3ZTIuLmZhNzJjY2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXJiZAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1yYmQKQEAgLTEsNiArMSw2IEBACiBXaGF0OgkJL3N5cy9idXMvcmJkLwogRGF0ZToJCU5vdmVtYmVyIDIwMTAKLUNvbnRhY3Q6CVllaHVkYSBTYWRlaCA8eWVodWRhQGhxLm5ld2RyZWFtLm5ldD4sCitDb250YWN0OglZZWh1ZGEgU2FkZWggPHllaHVkYUBuZXdkcmVhbS5uZXQ+LAogCQlTYWdlIFdlaWwgPHNhZ2VAbmV3ZHJlYW0ubmV0PgogRGVzY3JpcHRpb246CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1tbWMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtbW1jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNTBhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtbW1jCkBAIC0wLDAgKzEsMjEgQEAKK1doYXQ6CQkvc3lzL2RldmljZXMvLi4uL21tY19ob3N0L21tY1gvbW1jWDpYWFhYL2VuaGFuY2VkX2FyZWFfb2Zmc2V0CitEYXRlOgkJSmFudWFyeSAyMDExCitDb250YWN0OglDaHVhbnhpYW8gRG9uZyA8Y2h1YW54aWFvLmRvbmdAaW50ZWwuY29tPgorRGVzY3JpcHRpb246CisJCUVuaGFuY2VkIGFyZWEgaXMgYSBuZXcgZmVhdHVyZSBkZWZpbmVkIGluIGVNTUM0LjQgc3RhbmRhcmQuCisJCWVNTUM0LjQgb3IgbGF0ZXIgY2FyZCBjYW4gc3VwcG9ydCBzdWNoIGZlYXR1cmUuIFRoaXMga2luZCBvZgorCQlhcmVhIGNhbiBoZWxwIHRvIGltcHJvdmUgdGhlIGNhcmQgcGVyZm9ybWFuY2UuIElmIHRoZSBmZWF0dXJlCisJCWlzIGVuYWJsZWQsIHRoaXMgYXR0cmlidXRlIHdpbGwgaW5kaWNhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YKKwkJZW5oYW5jZWQgZGF0YSBhcmVhLiBJZiBub3QsIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgLUVJTlZBTC4KKwkJVW5pdCBCeXRlLiBGb3JtYXQgZGVjaW1hbC4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy8uLi4vbW1jX2hvc3QvbW1jWC9tbWNYOlhYWFgvZW5oYW5jZWRfYXJlYV9zaXplCitEYXRlOgkJSmFudWFyeSAyMDExCitDb250YWN0OglDaHVhbnhpYW8gRG9uZyA8Y2h1YW54aWFvLmRvbmdAaW50ZWwuY29tPgorRGVzY3JpcHRpb246CisJCUVuaGFuY2VkIGFyZWEgaXMgYSBuZXcgZmVhdHVyZSBkZWZpbmVkIGluIGVNTUM0LjQgc3RhbmRhcmQuCisJCWVNTUM0LjQgb3IgbGF0ZXIgY2FyZCBjYW4gc3VwcG9ydCBzdWNoIGZlYXR1cmUuIFRoaXMga2luZCBvZgorCQlhcmVhIGNhbiBoZWxwIHRvIGltcHJvdmUgdGhlIGNhcmQgcGVyZm9ybWFuY2UuIElmIHRoZSBmZWF0dXJlCisJCWlzIGVuYWJsZWQsIHRoaXMgYXR0cmlidXRlIHdpbGwgaW5kaWNhdGUgdGhlIHNpemUgb2YgZW5oYW5jZWQKKwkJZGF0YSBhcmVhLiBJZiBub3QsIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgLUVJTlZBTC4KKwkJVW5pdCBLQnl0ZS4gRm9ybWF0IGRlY2ltYWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0OTBlMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZApAQCAtMCwwICsxLDEwIEBACitXaGF0OgkJRm9yIFVTQiBkZXZpY2VzCTogL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L3JlcG9ydF9kZXNjcmlwdG9yCisJCUZvciBCVCBkZXZpY2VzCTogL3N5cy9jbGFzcy9ibHVldG9vdGgvaGNpPGFkZHI+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4vcmVwb3J0X2Rlc2NyaXB0b3IKKwkJU3ltbGluawkJOiAvc3lzL2NsYXNzL2hpZHJhdy9oaWRyYXc8bnVtPi9kZXZpY2UvcmVwb3J0X2Rlc2NyaXB0b3IKK0RhdGU6CQlKYW4gMjAxMQorS2VybmVsVmVyc2lvbjoJMi4wLjM5CitDb250YWN0OglBbGFuIE90dCA8YWxhbkBzaWduYWwxMS51cz4KK0Rlc2NyaXB0aW9uOglXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIHRoZSBkZXZpY2UncyByYXcgYmluYXJ5IEhJRAorCQlyZXBvcnQgZGVzY3JpcHRvci4KKwkJVGhpcyBmaWxlIGNhbm5vdCBiZSB3cml0dGVuLgorVXNlcnM6CQlISURBUEkgbGlicmFyeSAoaHR0cDovL3d3dy5zaWduYWwxMS51cy9vc3MvaGlkYXBpKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1hcnZvIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1hcnZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTI4MWIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1hcnZvCkBAIC0wLDAgKzEsNTMgQEAKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4vYXJ2by9yb2NjYXRhcnZvPG1pbm9yPi9hY3R1YWxfcHJvZmlsZQorRGF0ZToJCUphbnVhciAyMDExCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHJhbmdlcyBmcm9tIDEtNS4KKwkJV2hlbiByZWFkLCB0aGlzIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGFjdHVhbAorCQlwcm9maWxlIHdoaWNoIGlzIGFsc28gdGhlIHByb2ZpbGUgdGhhdCdzIGFjdGl2ZSBvbiBkZXZpY2Ugc3RhcnR1cC4KKwkJV2hlbiB3cml0dGVuIHRoaXMgYXR0cmlidXRlIGFjdGl2YXRlcyB0aGUgc2VsZWN0ZWQgcHJvZmlsZQorCQlpbW1lZGlhdGVseS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9hcnZvL3JvY2NhdGFydm88bWlub3I+L2J1dHRvbgorRGF0ZToJCUphbnVhciAyMDExCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBrZXlib2FyZCBjYW4gc3RvcmUgc2hvcnQgbWFjcm9zIHdpdGggY29uc2lzdCBvZiAxIGJ1dHRvbiB3aXRoCisJCXNldmVyYWwgbW9kaWZpZXIga2V5cyBpbnRlcm5hbGx5LgorCQlXaGVuIHdyaXR0ZW4sIHRoaXMgZmlsZSBsZXRzIG9uZSBzZXQgdGhlIHNlcXVlbmNlIGZvciBhIHNwZWNpZmljCisJCWJ1dHRvbiBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLiBCdXR0b24gYW5kIHByb2ZpbGUgbnVtYmVycyBhcmUKKwkJaW5jbHVkZWQgaW4gd3JpdHRlbiBkYXRhLiBUaGUgZGF0YSBoYXMgdG8gYmUgMjQgYnl0ZXMgbG9uZy4KKwkJVGhpcyBmaWxlIGlzIHdyaXRlb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9hcnZvL3JvY2NhdGFydm88bWlub3I+L2luZm8KK0RhdGU6CQlKYW51YXIgMjAxMQorQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0Rlc2NyaXB0aW9uOglXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIHNvbWUgaW5mbyBhYm91dCB0aGUgZGV2aWNlIGxpa2UgdGhlCisJCWluc3RhbGxlZCBmaXJtd2FyZSB2ZXJzaW9uLgorCQlUaGUgc2l6ZSBvZiB0aGUgZGF0YSBpcyA4IGJ5dGVzIGluIHNpemUuCisJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9hcnZvL3JvY2NhdGFydm88bWlub3I+L2tleV9tYXNrCitEYXRlOgkJSmFudWFyIDIwMTEKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJVGhlIGtleWJvYXJkIGxldHMgdGhlIHVzZXIgZGVhY3RpdmF0ZSA1IGNlcnRhaW4ga2V5cyBsaWtlIHRoZQorCQl3aW5kb3dzIGFuZCBhcHBsaWNhdGlvbiBrZXlzLCB0byBwcm90ZWN0IHRoZSB1c2VyIGZyb20gdGhlIG91dGNvbWUKKwkJb2YgYWNjaWRlbnRhbGx5IHByZXNzaW5nIHRoZW0uCisJCVRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGhhcyBiaXRzIDAtNCBzZXQgZGVwZW5kaW5nCisJCW9uIHRoZSBzdGF0ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBrZXkuCisJCVdoZW4gcmVhZCwgdGhpcyBmaWxlIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1dHRvbnMuCisJCVdoZW4gd3JpdHRlbiwgdGhlIGdpdmVuIGJ1dHRvbnMgYXJlIGFjdGl2YXRlZC9kZWFjdGl2YXRlZAorCQlpbW1lZGlhdGVseS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9hcnZvL3JvY2NhdGFydm88bWlub3I+L21vZGVfa2V5CitEYXRlOgkJSmFudWFyIDIwMTEKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJVGhlIGtleWJvYXJkIGhhcyBhIGNvbmRlbnNlZCBsYXlvdXQgd2l0aG91dCBudW0tbG9jayBrZXkuCisJCUluc3RlYWQgaXQgdXNlcyBhIG1vZGUta2V5IHdoaWNoIGFjdGl2YXRlcyBhIGdhbWluZyBtb2RlIHdoZXJlCisJCXRoZSBhc3NpZ25tZW50IG9mIHRoZSBudW1iZXIgYmxvY2sgY2hhbmdlcy4KKwkJVGhlIGludGVnZXIgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgcmFuZ2VzIGZyb20gMCAoT0ZGKSB0byAxIChPTikuCisJCVdoZW4gcmVhZCwgdGhpcyBmaWxlIHJldHVybnMgdGhlIGFjdHVhbCBzdGF0ZSBvZiB0aGUga2V5LgorCQlXaGVuIHdyaXR0ZW4sIHRoZSBrZXkgaXMgYWN0aXZhdGVkL2RlYWN0aXZhdGVkIGltbWVkaWF0ZWx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lCmluZGV4IDY5OGI4MDguLmI0YzRmMTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmUKQEAgLTE2LDEyICsxNiwxNCBAQAogCQk2ICAgICAzMjAwCiAKIAkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAogCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmUvcm9jY2F0a29uZTxtaW5vcj4vYWN0dWFsX3Byb2ZpbGUKIERhdGU6CQlNYXJjaCAyMDEwCiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVdoZW4gcmVhZCwgdGhpcyBmaWxlIHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgYWN0dWFsIHByb2ZpbGUuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lL3JvY2NhdGtvbmU8bWlub3I+L2Zpcm13YXJlX3ZlcnNpb24KIERhdGU6CQlNYXJjaCAyMDEwCkBAIC0zMiw2ICszNCw3IEBACiAJCW51bWJlciB0aGUgZGVjaW1hbCBwb2ludCBoYXMgdG8gYmUgc2hpZnRlZCAyIHBvc2l0aW9ucyB0byB0aGUKIAkJbGVmdC4gRS5nLiBhIHJldHVybmVkIHZhbHVlIG9mIDEzOCBtZWFucyAxLjM4CiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lL3JvY2NhdGtvbmU8bWlub3I+L3Byb2ZpbGVbMS01XQogRGF0ZToJCU1hcmNoIDIwMTAKQEAgLTQ3LDYgKzUwLDcgQEAKIAkJVGhlIG1vdXNlIHdpbGwgcmVqZWN0IGludmFsaWQgZGF0YSwgd2hlcmVhcyB0aGUgcHJvZmlsZSBudW1iZXIKIAkJc3RvcmVkIGluIHRoZSBwcm9maWxlIGRvZXNuJ3QgbmVlZCB0byBmaXQgdGhlIG51bWJlciBvZiB0aGUKIAkJc3RvcmUuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CiAKIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZS9yb2NjYXRrb25lPG1pbm9yPi9zZXR0aW5ncwogRGF0ZToJCU1hcmNoIDIwMTAKQEAgLTU3LDYgKzYxLDcgQEAKIAkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgbGV0cyB3cml0ZSBzZXR0aW5ncyBiYWNrIHRvIHRoZSBtb3VzZS4KIAkJVGhlIGRhdGEgaGFzIHRvIGJlIDM2IGJ5dGVzIGxvbmcuIFRoZSBtb3VzZSB3aWxsIHJlamVjdCBpbnZhbGlkCiAJCWRhdGEuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CiAKIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZS9yb2NjYXRrb25lPG1pbm9yPi9zdGFydHVwX3Byb2ZpbGUKIERhdGU6CQlNYXJjaCAyMDEwCkBAIC02Niw2ICs3MSw3IEBACiAgICAgICAgICAgICAgICAgdGhhdCdzIGFjdGl2ZSB3aGVuIHRoZSBtb3VzZSBpcyBwb3dlcmVkIG9uLgogCQlXaGVuIHdyaXR0ZW4sIHRoaXMgZmlsZSBzZXRzIHRoZSBudW1iZXIgb2YgdGhlIHN0YXJ0dXAgcHJvZmlsZQogCQlhbmQgdGhlIG1vdXNlIGFjdGl2YXRlcyB0aGlzIHByb2ZpbGUgaW1tZWRpYXRlbHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CiAKIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZS9yb2NjYXRrb25lPG1pbm9yPi90Y3UKIERhdGU6CQlNYXJjaCAyMDEwCkBAIC03Nyw2ICs4Myw3IEBACiAJCVdyaXRpbmcgMCBpbiB0aGlzIGZpbGUgd2lsbCBzd2l0Y2ggdGhlIFRDVSBvZmYuCiAJCVdyaXRpbmcgMSBpbiB0aGlzIGZpbGUgd2lsbCBzdGFydCB0aGUgY2FsaWJyYXRpb24gd2hpY2ggdGFrZXMKIAkJYXJvdW5kIDYgc2Vjb25kcyB0byBjb21wbGV0ZSBhbmQgYWN0aXZhdGVzIHRoZSBUQ1UuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CiAKIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZS9yb2NjYXRrb25lPG1pbm9yPi93ZWlnaHQKIERhdGU6CQlNYXJjaCAyMDEwCkBAIC05NiwzICsxMDMsNCBAQAogCQk0ICAgICAyMGcKIAogCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmVwbHVzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lcGx1cwppbmRleCAwZjlmMzBlLi4wMGVmY2VkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmVwbHVzCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZXBsdXMKQEAgLTQsNiArNCw3IEBACiBEZXNjcmlwdGlvbjoJV2hlbiByZWFkLCB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBhY3R1YWwgcHJvZmlsZSBpbgogCQlyYW5nZSAwLTQuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vZmlybXdhcmVfdmVyc2lvbgogRGF0ZToJCU9jdG9iZXIgMjAxMApAQCAtMTQsNiArMTUsNyBAQAogCQludW1iZXIgdGhlIGRlY2ltYWwgcG9pbnQgaGFzIHRvIGJlIHNoaWZ0ZWQgMiBwb3NpdGlvbnMgdG8gdGhlCiAJCWxlZnQuIEUuZy4gYSByZXR1cm5lZCB2YWx1ZSBvZiAxMjEgbWVhbnMgMS4yMQogCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CiAKIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZXBsdXMvcm9jY2F0a29uZXBsdXM8bWlub3I+L21hY3JvCiBEYXRlOgkJT2N0b2JlciAyMDEwCkBAIC0yNCw2ICsyNiw3IEBACiAJCWJ1dHRvbiBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLiBCdXR0b24gYW5kIHByb2ZpbGUgbnVtYmVycyBhcmUKIAkJaW5jbHVkZWQgaW4gd3JpdHRlbiBkYXRhLiBUaGUgZGF0YSBoYXMgdG8gYmUgMjA4MiBieXRlcyBsb25nLgogCQlUaGlzIGZpbGUgaXMgd3JpdGVvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAogCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi9wcm9maWxlX2J1dHRvbnMKIERhdGU6CQlBdWd1c3QgMjAxMApAQCAtMzcsNiArNDAsNyBAQAogCQlXaGljaCBwcm9maWxlIHRvIHdyaXRlIGlzIGRldGVybWluZWQgYnkgdGhlIHByb2ZpbGUgbnVtYmVyCiAJCWNvbnRhaW5lZCBpbiB0aGUgZGF0YS4KIAkJVGhpcyBmaWxlIGlzIHdyaXRlb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vcHJvZmlsZVsxLTVdX2J1dHRvbnMKIERhdGU6CQlBdWd1c3QgMjAxMApAQCAtNDcsNiArNTEsNyBAQAogCQlXaGVuIHJlYWQsIHRoZXNlIGZpbGVzIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlIGJ1dHRvbnMuCiAJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDc3IGJ5dGVzIGluIHNpemUuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vcHJvZmlsZV9zZXR0aW5ncwogRGF0ZToJCU9jdG9iZXIgMjAxMApAQCAtNjEsNiArNjYsNyBAQAogCQlXaGljaCBwcm9maWxlIHRvIHdyaXRlIGlzIGRldGVybWluZWQgYnkgdGhlIHByb2ZpbGUgbnVtYmVyCiAJCWNvbnRhaW5lZCBpbiB0aGUgZGF0YS4KIAkJVGhpcyBmaWxlIGlzIHdyaXRlb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vcHJvZmlsZVsxLTVdX3NldHRpbmdzCiBEYXRlOgkJQXVndXN0IDIwMTAKQEAgLTcyLDYgKzc4LDcgQEAKIAkJV2hlbiByZWFkLCB0aGVzZSBmaWxlcyByZXR1cm4gdGhlIHJlc3BlY3RpdmUgcHJvZmlsZSBzZXR0aW5ncy4KIAkJVGhlIHJldHVybmVkIGRhdGEgaXMgNDMgYnl0ZXMgaW4gc2l6ZS4KIAkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAogCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi9zZW5zb3IKIERhdGU6CQlPY3RvYmVyIDIwMTAKQEAgLTgwLDYgKzg3LDcgQEAKIAkJY2FuIGJlIGFjdGl2YXRlZC9kZWFjdGl2YXRlZCBhbmQgdGhlIGxpZnQtb2ZmIGRpc3RhbmNlIGNhbiBiZQogCQlzZXQuIFRoZSBkYXRhIGhhcyB0byBiZSA2IGJ5dGVzIGxvbmcuCiAJCVRoaXMgZmlsZSBpcyB3cml0ZW9ubHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CiAKIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZXBsdXMvcm9jY2F0a29uZXBsdXM8bWlub3I+L3N0YXJ0dXBfcHJvZmlsZQogRGF0ZToJCU9jdG9iZXIgMjAxMApAQCAtODksNiArOTcsNyBAQAogICAgICAgICAgICAgICAgIHRoYXQncyBhY3RpdmUgd2hlbiB0aGUgbW91c2UgaXMgcG93ZXJlZCBvbi4KIAkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgc2V0cyB0aGUgbnVtYmVyIG9mIHRoZSBzdGFydHVwIHByb2ZpbGUKIAkJYW5kIHRoZSBtb3VzZSBhY3RpdmF0ZXMgdGhpcyBwcm9maWxlIGltbWVkaWF0ZWx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAogCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi90Y3UKIERhdGU6CQlPY3RvYmVyIDIwMTAKQEAgLTk3LDYgKzEwNiw3IEBACiAJCWNhbiBiZSBpbml0aWF0ZWQvY2FuY2VsbGVkLgogCQlUaGUgZGF0YSBoYXMgdG8gYmUgMyBieXRlcyBsb25nLgogCQlUaGlzIGZpbGUgaXMgd3JpdGVvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAogCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi90Y3VfaW1hZ2UKIERhdGU6CQlPY3RvYmVyIDIwMTAKQEAgLTEwNiwzICsxMTYsNCBAQAogCQljYWxpYnJhdGlvbiBwcm9jZXNzIGluaXRpYXRlZCB3aXRoIHRjdS4KIAkJVGhlIHJldHVybmVkIGRhdGEgaXMgMTAyOCBieXRlcyBpbiBzaXplLgogCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvdmFwbHVzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb3ZhcGx1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGZhMTZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb3ZhcGx1cwpAQCAtMCwwICsxLDEwMCBAQAorV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb3ZhcGx1cy9yb2NjYXRrb3ZhcGx1czxtaW5vcj4vYWN0dWFsX2NwaQorRGF0ZToJCUphbnVhcnkgMjAxMQorQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0Rlc2NyaXB0aW9uOglUaGUgaW50ZWdlciB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSByYW5nZXMgZnJvbSAxLTQuCisJCVdoZW4gcmVhZCwgdGhpcyBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBhY3RpdmUKKwkJY3BpIGxldmVsLgorCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va292YXBsdXMvcm9jY2F0a292YXBsdXM8bWlub3I+L2FjdHVhbF9wcm9maWxlCitEYXRlOgkJSmFudWFyeSAyMDExCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHJhbmdlcyBmcm9tIDAtNC4KKwkJV2hlbiByZWFkLCB0aGlzIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGFjdGl2ZQorCQlwcm9maWxlLgorCQlXaGVuIHdyaXR0ZW4sIHRoZSBtb3VzZSBhY3RpdmF0ZXMgdGhpcyBwcm9maWxlIGltbWVkaWF0ZWx5LgorCQlUaGUgcHJvZmlsZSB0aGF0J3MgYWN0aXZlIHdoZW4gcG93ZXJlZCBkb3duIGlzIHRoZSBzYW1lIHRoYXQncworCQlhY3RpdmUgd2hlbiB0aGUgbW91c2UgaXMgcG93ZXJlZCBvbi4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb3ZhcGx1cy9yb2NjYXRrb3ZhcGx1czxtaW5vcj4vYWN0dWFsX3NlbnNpdGl2aXR5X3gKK0RhdGU6CQlKYW51YXJ5IDIwMTEKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJVGhlIGludGVnZXIgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgcmFuZ2VzIGZyb20gMS0xMC4KKwkJV2hlbiByZWFkLCB0aGlzIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGFjdHVhbAorCQlzZW5zaXRpdml0eSBpbiB4IGRpcmVjdGlvbi4KKwkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAorCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvdmFwbHVzL3JvY2NhdGtvdmFwbHVzPG1pbm9yPi9hY3R1YWxfc2Vuc2l0aXZpdHlfeQorRGF0ZToJCUphbnVhcnkgMjAxMQorQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0Rlc2NyaXB0aW9uOglUaGUgaW50ZWdlciB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSByYW5nZXMgZnJvbSAxLTEwLgorCQlXaGVuIHJlYWQsIHRoaXMgYXR0cmlidXRlIHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgYWN0dWFsCisJCXNlbnNpdGl2aXR5IGluIHkgZGlyZWN0aW9uLgorCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va292YXBsdXMvcm9jY2F0a292YXBsdXM8bWlub3I+L2Zpcm13YXJlX3ZlcnNpb24KK0RhdGU6CQlKYW51YXJ5IDIwMTEKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJV2hlbiByZWFkLCB0aGlzIGZpbGUgcmV0dXJucyB0aGUgcmF3IGludGVnZXIgdmVyc2lvbiBudW1iZXIgb2YgdGhlCisJCWZpcm13YXJlIHJlcG9ydGVkIGJ5IHRoZSBtb3VzZS4gVXNpbmcgdGhlIGludGVnZXIgdmFsdWUgZWFzZXMKKwkJZnVydGhlciB1c2FnZSBpbiBvdGhlciBwcm9ncmFtcy4gVG8gcmVjZWl2ZSB0aGUgcmVhbCB2ZXJzaW9uCisJCW51bWJlciB0aGUgZGVjaW1hbCBwb2ludCBoYXMgdG8gYmUgc2hpZnRlZCAyIHBvc2l0aW9ucyB0byB0aGUKKwkJbGVmdC4gRS5nLiBhIHJldHVybmVkIHZhbHVlIG9mIDEyMSBtZWFucyAxLjIxCisJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb3ZhcGx1cy9yb2NjYXRrb3ZhcGx1czxtaW5vcj4vcHJvZmlsZV9idXR0b25zCitEYXRlOgkJSmFudWFyeSAyMDExCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCisJCXByZXNzIG9mIGEgYnV0dG9uLiBBIHByb2ZpbGUgaXMgc3BsaXQgaW4gc2V0dGluZ3MgYW5kIGJ1dHRvbnMuCisJCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbnMgYWJvdXQgYnV0dG9uIGxheW91dC4KKwkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgbGV0cyBvbmUgd3JpdGUgdGhlIHJlc3BlY3RpdmUgcHJvZmlsZQorCQlidXR0b25zIGJhY2sgdG8gdGhlIG1vdXNlLiBUaGUgZGF0YSBoYXMgdG8gYmUgMjMgYnl0ZXMgbG9uZy4KKwkJVGhlIG1vdXNlIHdpbGwgcmVqZWN0IGludmFsaWQgZGF0YS4KKwkJV2hpY2ggcHJvZmlsZSB0byB3cml0ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwcm9maWxlIG51bWJlcgorCQljb250YWluZWQgaW4gdGhlIGRhdGEuCisJCVRoaXMgZmlsZSBpcyB3cml0ZW9ubHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va292YXBsdXMvcm9jY2F0a292YXBsdXM8bWlub3I+L3Byb2ZpbGVbMS01XV9idXR0b25zCitEYXRlOgkJSmFudWFyeSAyMDExCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCisJCXByZXNzIG9mIGEgYnV0dG9uLiBBIHByb2ZpbGUgaXMgc3BsaXQgaW4gc2V0dGluZ3MgYW5kIGJ1dHRvbnMuCisJCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbnMgYWJvdXQgYnV0dG9uIGxheW91dC4KKwkJV2hlbiByZWFkLCB0aGVzZSBmaWxlcyByZXR1cm4gdGhlIHJlc3BlY3RpdmUgcHJvZmlsZSBidXR0b25zLgorCQlUaGUgcmV0dXJuZWQgZGF0YSBpcyAyMyBieXRlcyBpbiBzaXplLgorCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va292YXBsdXMvcm9jY2F0a292YXBsdXM8bWlub3I+L3Byb2ZpbGVfc2V0dGluZ3MKK0RhdGU6CQlKYW51YXJ5IDIwMTEKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKKwkJcHJlc3Mgb2YgYSBidXR0b24uIEEgcHJvZmlsZSBpcyBzcGxpdCBpbiBzZXR0aW5ncyBhbmQgYnV0dG9ucy4KKwkJcHJvZmlsZV9zZXR0aW5ncyBob2xkcyBpbmZvcm1hdGlvbnMgbGlrZSByZXNvbHV0aW9uLCBzZW5zaXRpdml0eQorCQlhbmQgbGlnaHQgZWZmZWN0cy4KKwkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgbGV0cyBvbmUgd3JpdGUgdGhlIHJlc3BlY3RpdmUgcHJvZmlsZQorCQlzZXR0aW5ncyBiYWNrIHRvIHRoZSBtb3VzZS4gVGhlIGRhdGEgaGFzIHRvIGJlIDE2IGJ5dGVzIGxvbmcuCisJCVRoZSBtb3VzZSB3aWxsIHJlamVjdCBpbnZhbGlkIGRhdGEuCisJCVdoaWNoIHByb2ZpbGUgdG8gd3JpdGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcHJvZmlsZSBudW1iZXIKKwkJY29udGFpbmVkIGluIHRoZSBkYXRhLgorCQlUaGlzIGZpbGUgaXMgd3JpdGVvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAorCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvdmFwbHVzL3JvY2NhdGtvdmFwbHVzPG1pbm9yPi9wcm9maWxlWzEtNV1fc2V0dGluZ3MKK0RhdGU6CQlKYW51YXJ5IDIwMTEKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKKwkJcHJlc3Mgb2YgYSBidXR0b24uIEEgcHJvZmlsZSBpcyBzcGxpdCBpbiBzZXR0aW5ncyBhbmQgYnV0dG9ucy4KKwkJcHJvZmlsZV9zZXR0aW5ncyBob2xkcyBpbmZvcm1hdGlvbnMgbGlrZSByZXNvbHV0aW9uLCBzZW5zaXRpdml0eQorCQlhbmQgbGlnaHQgZWZmZWN0cy4KKwkJV2hlbiByZWFkLCB0aGVzZSBmaWxlcyByZXR1cm4gdGhlIHJlc3BlY3RpdmUgcHJvZmlsZSBzZXR0aW5ncy4KKwkJVGhlIHJldHVybmVkIGRhdGEgaXMgMTYgYnl0ZXMgaW4gc2l6ZS4KKwkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1weXJhIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1weXJhCmluZGV4IDFjMzdiODIuLjVmYWI3MWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQtcHlyYQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LXB5cmEKQEAgLTEzLDYgKzEzLDcgQEAKIAkJNCAgICAgMTYwMAogCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L2FjdHVhbF9wcm9maWxlCiBEYXRlOgkJQXVndXN0IDIwMTAKQEAgLTIwLDYgKzIxLDcgQEAKIERlc2NyaXB0aW9uOglXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGFjdHVhbCBwcm9maWxlIGluCiAJCXJhbmdlIDAtNC4KIAkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAogCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L3B5cmEvcm9jY2F0cHlyYTxtaW5vcj4vZmlybXdhcmVfdmVyc2lvbgogRGF0ZToJCUF1Z3VzdCAyMDEwCkBAIC0zMCw2ICszMiw3IEBACiAJCW51bWJlciB0aGUgZGVjaW1hbCBwb2ludCBoYXMgdG8gYmUgc2hpZnRlZCAyIHBvc2l0aW9ucyB0byB0aGUKIAkJbGVmdC4gRS5nLiBhIHJldHVybmVkIHZhbHVlIG9mIDEzOCBtZWFucyAxLjM4CiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L3Byb2ZpbGVfc2V0dGluZ3MKIERhdGU6CQlBdWd1c3QgMjAxMApAQCAtNDQsNiArNDcsNyBAQAogCQlXaGljaCBwcm9maWxlIHRvIHdyaXRlIGlzIGRldGVybWluZWQgYnkgdGhlIHByb2ZpbGUgbnVtYmVyCiAJCWNvbnRhaW5lZCBpbiB0aGUgZGF0YS4KIAkJVGhpcyBmaWxlIGlzIHdyaXRlb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L3Byb2ZpbGVbMS01XV9zZXR0aW5ncwogRGF0ZToJCUF1Z3VzdCAyMDEwCkBAIC01NSw2ICs1OSw3IEBACiAJCVdoZW4gcmVhZCwgdGhlc2UgZmlsZXMgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHByb2ZpbGUgc2V0dGluZ3MuCiAJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDEzIGJ5dGVzIGluIHNpemUuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L3Byb2ZpbGVfYnV0dG9ucwogRGF0ZToJCUF1Z3VzdCAyMDEwCkBAIC02OCw2ICs3Myw3IEBACiAJCVdoaWNoIHByb2ZpbGUgdG8gd3JpdGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcHJvZmlsZSBudW1iZXIKIAkJY29udGFpbmVkIGluIHRoZSBkYXRhLgogCQlUaGlzIGZpbGUgaXMgd3JpdGVvbmx5LgorVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAogCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L3B5cmEvcm9jY2F0cHlyYTxtaW5vcj4vcHJvZmlsZVsxLTVdX2J1dHRvbnMKIERhdGU6CQlBdWd1c3QgMjAxMApAQCAtNzgsNiArODQsNyBAQAogCQlXaGVuIHJlYWQsIHRoZXNlIGZpbGVzIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlIGJ1dHRvbnMuCiAJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDE5IGJ5dGVzIGluIHNpemUuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L3N0YXJ0dXBfcHJvZmlsZQogRGF0ZToJCUF1Z3VzdCAyMDEwCkBAIC04Niw2ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgV2hlbiByZWFkLCB0aGlzIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHByb2ZpbGUKICAgICAgICAgICAgICAgICB0aGF0J3MgYWN0aXZlIHdoZW4gdGhlIG1vdXNlIGlzIHBvd2VyZWQgb24uCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KK1VzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L3NldHRpbmdzCiBEYXRlOgkJQXVndXN0IDIwMTAKQEAgLTk2LDMgKzEwNCw0IEBACiAJCVdoZW4gd3JpdHRlbiwgdGhpcyBmaWxlIGxldHMgd3JpdGUgc2V0dGluZ3MgYmFjayB0byB0aGUgbW91c2UuCiAJCVRoZSBkYXRhIGhhcyB0byBiZSAzIGJ5dGVzIGxvbmcuIFRoZSBtb3VzZSB3aWxsIHJlamVjdCBpbnZhbGlkCiAJCWRhdGEuCitVc2VyczoJCWh0dHA6Ly9yb2NjYXQuc291cmNlZm9yZ2UubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZzLXBzdG9yZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZnMtcHN0b3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTY1OWQ4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZnMtcHN0b3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1XaGF0OgkJL3N5cy9mcy9wc3RvcmUva21zZ19ieXRlcwotRGF0ZToJCUphbnVhcnkgMjAxMQotS2VybmVsIFZlcnNpb246IDIuNi4zOAotQ29udGFjdDoJIlRvbnkgTHVjayIgPHRvbnkubHVja0BpbnRlbC5jb20+Ci1EZXNjcmlwdGlvbjoKLQkJQ29udHJvbHMgYW1vdW50IG9mIGNvbnNvbGUgbG9nIHRoYXQgd2lsbCBiZSBzYXZlZAotCQl0byBwZXJzaXN0ZW50IHN0b3JlIG9uIG9vcHMvcGFuaWMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMgYi9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKaW5kZXggNGZiODhmMS4uNWY0ODI4YTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQ2hhbmdlcworKysgYi9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKQEAgLTM1LDcgKzM1LDcgQEAKIG8gIG1vZHVsZS1pbml0LXRvb2xzICAgICAgMC45LjEwICAgICAgICAgICAgICAgICAgIyBkZXBtb2QgLVYKIG8gIGUyZnNwcm9ncyAgICAgICAgICAgICAgMS40MS40ICAgICAgICAgICAgICAgICAgIyBlMmZzY2sgLVYKIG8gIGpmc3V0aWxzICAgICAgICAgICAgICAgMS4xLjMgICAgICAgICAgICAgICAgICAgIyBmc2NrLmpmcyAtVgotbyAgcmVpc2VyZnNwcm9ncyAgICAgICAgICAzLjYuMyAgICAgICAgICAgICAgICAgICAjIHJlaXNlcmZzY2sgLVYgMj4mMXxncmVwIHJlaXNlcmZzcHJvZ3MKK28gIHJlaXNlcmZzcHJvZ3MgICAgICAgICAgMy42LjMgICAgICAgICAgICAgICAgICAgIyByZWlzZXJmc2NrIC1WCiBvICB4ZnNwcm9ncyAgICAgICAgICAgICAgIDIuNi4wICAgICAgICAgICAgICAgICAgICMgeGZzX2RiIC1WCiBvICBzcXVhc2hmcy10b29scyAgICAgICAgIDQuMCAgICAgICAgICAgICAgICAgICAgICMgbWtzcXVhc2hmcyAtdmVyc2lvbgogbyAgYnRyZnMtcHJvZ3MgICAgICAgICAgICAwLjE4ICAgICAgICAgICAgICAgICAgICAjIGJ0cmZzY2sKQEAgLTQ2LDkgKzQ2LDkgQEAKIG8gIG5mcy11dGlscyAgICAgICAgICAgICAgMS4wLjUgICAgICAgICAgICAgICAgICAgIyBzaG93bW91bnQgLS12ZXJzaW9uCiBvICBwcm9jcHMgICAgICAgICAgICAgICAgIDMuMi4wICAgICAgICAgICAgICAgICAgICMgcHMgLS12ZXJzaW9uCiBvICBvcHJvZmlsZSAgICAgICAgICAgICAgIDAuOSAgICAgICAgICAgICAgICAgICAgICMgb3Byb2ZpbGVkIC0tdmVyc2lvbgotbyAgdWRldiAgICAgICAgICAgICAgICAgICAwODEgICAgICAgICAgICAgICAgICAgICAjIHVkZXZpbmZvIC1WCi1vICBncnViICAgICAgICAgICAgICAgICAgIDAuOTMgICAgICAgICAgICAgICAgICAgICMgZ3J1YiAtLXZlcnNpb24KLW8gIG1jZWxvZwkJICAwLjYKK28gIHVkZXYgICAgICAgICAgICAgICAgICAgMDgxICAgICAgICAgICAgICAgICAgICAgIyB1ZGV2ZCAtLXZlcnNpb24KK28gIGdydWIgICAgICAgICAgICAgICAgICAgMC45MyAgICAgICAgICAgICAgICAgICAgIyBncnViIC0tdmVyc2lvbiB8fCBncnViLWluc3RhbGwgLS12ZXJzaW9uCitvICBtY2Vsb2cgICAgICAgICAgICAgICAgIDAuNiAgICAgICAgICAgICAgICAgICAgICMgbWNlbG9nIC0tdmVyc2lvbgogbyAgaXB0YWJsZXMgICAgICAgICAgICAgICAxLjQuMiAgICAgICAgICAgICAgICAgICAjIGlwdGFibGVzIC1WCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZSBiL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKaW5kZXggMWNkMzQ3OC4uNThiMGJmOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCkBAIC0xNjgsNiArMTY4LDEzIEBACiBpZiAoY29uZGl0aW9uKQogCWFjdGlvbigpOwogCithbmQKKworaWYgKGNvbmRpdGlvbikKKwlkb190aGlzKCk7CitlbHNlCisJZG9fdGhhdCgpOworCiBUaGlzIGRvZXMgbm90IGFwcGx5IGlmIG9uZSBicmFuY2ggb2YgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgYSBzaW5nbGUKIHN0YXRlbWVudC4gVXNlIGJyYWNlcyBpbiBib3RoIGJyYW5jaGVzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQKaW5kZXggNWQwZDU2OS4uOThhMzA4MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dApAQCAtNjkzLDcgKzY5Myw3IEBACiAgLSB2aWEgdGhlIEMgbGlicmFyeSBsaWJjZ3JvdXAuCiAgICAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJjZy8pCiAgLSB2aWEgdGhlIHB5dGhvbiBhcHBsaWNhdGlvbiBjc2V0LgotICAgKGh0dHA6Ly9kZXZlbG9wZXIubm92ZWxsLmNvbS93aWtpL2luZGV4LnBocC9DcHVzZXQpCisgICAoaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2NwdXNldC8pCiAKIFRoZSBzY2hlZF9zZXRhZmZpbml0eSBjYWxscyBjYW4gYWxzbyBiZSBkb25lIGF0IHRoZSBzaGVsbCBwcm9tcHQgdXNpbmcKIFNHSSdzIHJ1bm9uIG9yIFJvYmVydCBMb3ZlJ3MgdGFza3NldC4gIFRoZSBtYmluZCBhbmQgc2V0X21lbXBvbGljeQpAQCAtNzI1LDEzICs3MjUsMTQgQEAKIAogSW4gdGhpcyBkaXJlY3RvcnkgeW91IGNhbiBmaW5kIHNldmVyYWwgZmlsZXM6CiAjIGxzCi1jcHVzZXQuY3B1X2V4Y2x1c2l2ZSAgICAgICBjcHVzZXQubWVtb3J5X3NwcmVhZF9zbGFiCi1jcHVzZXQuY3B1cyAgICAgICAgICAgICAgICBjcHVzZXQubWVtcwotY3B1c2V0Lm1lbV9leGNsdXNpdmUgICAgICAgY3B1c2V0LnNjaGVkX2xvYWRfYmFsYW5jZQotY3B1c2V0Lm1lbV9oYXJkd2FsbCAgICAgICAgY3B1c2V0LnNjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbAotY3B1c2V0Lm1lbW9yeV9taWdyYXRlICAgICAgbm90aWZ5X29uX3JlbGVhc2UKLWNwdXNldC5tZW1vcnlfcHJlc3N1cmUgICAgIHRhc2tzCi1jcHVzZXQubWVtb3J5X3NwcmVhZF9wYWdlCitjZ3JvdXAuY2xvbmVfY2hpbGRyZW4gIGNwdXNldC5tZW1vcnlfcHJlc3N1cmUKK2Nncm91cC5ldmVudF9jb250cm9sICAgY3B1c2V0Lm1lbW9yeV9zcHJlYWRfcGFnZQorY2dyb3VwLnByb2NzICAgICAgICAgICBjcHVzZXQubWVtb3J5X3NwcmVhZF9zbGFiCitjcHVzZXQuY3B1X2V4Y2x1c2l2ZSAgIGNwdXNldC5tZW1zCitjcHVzZXQuY3B1cyAgICAgICAgICAgIGNwdXNldC5zY2hlZF9sb2FkX2JhbGFuY2UKK2NwdXNldC5tZW1fZXhjbHVzaXZlICAgY3B1c2V0LnNjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbAorY3B1c2V0Lm1lbV9oYXJkd2FsbCAgICBub3RpZnlfb25fcmVsZWFzZQorY3B1c2V0Lm1lbW9yeV9taWdyYXRlICB0YXNrcwogCiBSZWFkaW5nIHRoZW0gd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhpcyBjcHVzZXQ6CiB0aGUgQ1BVcyBhbmQgTWVtb3J5IE5vZGVzIGl0IGNhbiB1c2UsIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgdXNpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKaW5kZXggNzc4MTg1Ny4uYjZlZDYxYzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CkBAIC00ODUsOCArNDg1LDkgQEAKIAogIyBlY2hvIDAgPiBtZW1vcnkudXNlX2hpZXJhcmNoeQogCi1OT1RFMTogRW5hYmxpbmcvZGlzYWJsaW5nIHdpbGwgZmFpbCBpZiB0aGUgY2dyb3VwIGFscmVhZHkgaGFzIG90aGVyCi0gICAgICAgY2dyb3VwcyBjcmVhdGVkIGJlbG93IGl0LgorTk9URTE6IEVuYWJsaW5nL2Rpc2FibGluZyB3aWxsIGZhaWwgaWYgZWl0aGVyIHRoZSBjZ3JvdXAgYWxyZWFkeSBoYXMgb3RoZXIKKyAgICAgICBjZ3JvdXBzIGNyZWF0ZWQgYmVsb3cgaXQsIG9yIGlmIHRoZSBwYXJlbnQgY2dyb3VwIGhhcyB1c2VfaGllcmFyY2h5CisgICAgICAgZW5hYmxlZC4KIAogTk9URTI6IFdoZW4gcGFuaWNfb25fb29tIGlzIHNldCB0byAiMiIsIHRoZSB3aG9sZSBzeXN0ZW0gd2lsbCBwYW5pYyBpbgogICAgICAgIGNhc2Ugb2YgYW4gT09NIGV2ZW50IGluIGFueSBjZ3JvdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tY3J5cHQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLWNyeXB0LnR4dAppbmRleCA1OTI5M2FjLi42YjVjNDJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tY3J5cHQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1jcnlwdC50eHQKQEAgLTQxLDcgKzQxLDcgQEAKID09PT09PT09PT09PT09PQogTFVLUyAoTGludXggVW5pZmllZCBLZXkgU2V0dXApIGlzIG5vdyB0aGUgcHJlZmVycmVkIHdheSB0byBzZXQgdXAgZGlzawogZW5jcnlwdGlvbiB3aXRoIGRtLWNyeXB0IHVzaW5nIHRoZSAnY3J5cHRzZXR1cCcgdXRpbGl0eSwgc2VlCi1odHRwOi8vY2xlbWVucy5lbmRvcnBoaW4ub3JnL2NyeXB0b2dyYXBoeQoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0c2V0dXAvCiAKIFtbCiAjIS9iaW4vc2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9od21vbi9hZHMxMDE1LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9od21vbi9hZHMxMDE1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThhNTA3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2h3bW9uL2FkczEwMTUudHh0CkBAIC0wLDAgKzEsNzMgQEAKK0FEUzEwMTUgKEkyQykKKworVGhpcyBkZXZpY2UgaXMgYSAxMi1iaXQgQS1EIGNvbnZlcnRlciB3aXRoIDQgaW5wdXRzLgorCitUaGUgaW5wdXRzIGNhbiBiZSB1c2VkIHNpbmdsZSBlbmRlZCBvciBpbiBjZXJ0YWluIGRpZmZlcmVudGlhbCBjb21iaW5hdGlvbnMuCisKK0ZvciBjb25maWd1cmF0aW9uIGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYXJlIG1hcHBlZCB0byA4IGNoYW5uZWxzOgorICAwOiBWb2x0YWdlIG92ZXIgQUlOMCBhbmQgQUlOMS4KKyAgMTogVm9sdGFnZSBvdmVyIEFJTjAgYW5kIEFJTjMuCisgIDI6IFZvbHRhZ2Ugb3ZlciBBSU4xIGFuZCBBSU4zLgorICAzOiBWb2x0YWdlIG92ZXIgQUlOMiBhbmQgQUlOMy4KKyAgNDogVm9sdGFnZSBvdmVyIEFJTjAgYW5kIEdORC4KKyAgNTogVm9sdGFnZSBvdmVyIEFJTjEgYW5kIEdORC4KKyAgNjogVm9sdGFnZSBvdmVyIEFJTjIgYW5kIEdORC4KKyAgNzogVm9sdGFnZSBvdmVyIEFJTjMgYW5kIEdORC4KKworRWFjaCBjaGFubmVsIGNhbiBiZSBjb25maWd1cmVkIGluZGl2aWR1YWxseToKKyAtIHBnYSBpcyB0aGUgcHJvZ3JhbW1hYmxlIGdhaW4gYW1wbGlmaWVyICh2YWx1ZXMgYXJlIGZ1bGwgc2NhbGUpCisgICAgMDogKy8tIDYuMTQ0IFYKKyAgICAxOiArLy0gNC4wOTYgVgorICAgIDI6ICsvLSAyLjA0OCBWIChkZWZhdWx0KQorICAgIDM6ICsvLSAxLjAyNCBWCisgICAgNDogKy8tIDAuNTEyIFYKKyAgICA1OiArLy0gMC4yNTYgVgorIC0gZGF0YV9yYXRlIGluIHNhbXBsZXMgcGVyIHNlY29uZAorICAgIDA6IDEyOAorICAgIDE6IDI1MAorICAgIDI6IDQ5MAorICAgIDM6IDkyMAorICAgIDQ6IDE2MDAgKGRlZmF1bHQpCisgICAgNTogMjQwMAorICAgIDY6IDMzMDAKKworMSkgVGhlIC9hZHMxMDE1IG5vZGUKKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgICAtIGNvbXBhdGlibGUgOiBtdXN0IGJlICJ0aSxhZHMxMDE1IgorICAgLSByZWcgOiBJMkMgYnVzIGFkZHJlc3Mgb2YgdGhlIGRldmljZQorICAgLSAjYWRkcmVzcy1jZWxscyA6IG11c3QgYmUgPDE+CisgICAtICNzaXplLWNlbGxzIDogbXVzdCBiZSA8MD4KKworICBUaGUgbm9kZSBjb250YWlucyBjaGlsZCBub2RlcyBmb3IgZWFjaCBjaGFubmVsIHRoYXQgdGhlIHBsYXRmb3JtIHVzZXMuCisKKyAgRXhhbXBsZSBBRFMxMDE1IG5vZGU6CisKKyAgICBhZHMxMDE1QDQ5IHsKKwkgICAgY29tcGF0aWJsZSA9ICJ0aSxhZHMxMDE1IjsKKwkgICAgcmVnID0gPDB4NDk+OworCSAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkgICAgI3NpemUtY2VsbHMgPSA8MD47CisKKwkgICAgWyBjaGlsZCBub2RlIGRlZmluaXRpb25zLi4uIF0KKyAgICB9CisKKzIpIGNoYW5uZWwgbm9kZXMKKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgICAtIHJlZyA6IHRoZSBjaGFubmVsIG51bWJlcgorCisgIE9wdGlvbmFsIHByb3BlcnRpZXM6CisKKyAgIC0gdGksZ2FpbiA6IHRoZSBwcm9ncmFtbWFibGUgZ2FpbiBhbXBsaWZpZXIgc2V0dGluZworICAgLSB0aSxkYXRhcmF0ZSA6IHRoZSBjb252ZXJ0ZXIgZGF0YSByYXRlCisKKyAgRXhhbXBsZSBBRFMxMDE1IGNoYW5uZWwgbm9kZToKKworICAgIGNoYW5uZWxANCB7CisJICAgIHJlZyA9IDw0PjsKKwkgICAgdGksZ2FpbiA9IDwzPjsKKwkgICAgdGksZGF0YXJhdGUgPSA8NT47CisgICAgfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLXNwaS1zbG90LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLXNwaS1zbG90LnR4dAppbmRleCBjMzlhYzI4Li44OWEwMDg0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1zcGktc2xvdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtc3BpLXNsb3QudHh0CkBAIC03LDggKzcsMTMgQEAKIC0gdm9sdGFnZS1yYW5nZXMgOiB0d28gY2VsbHMgYXJlIHJlcXVpcmVkLCBmaXJzdCBjZWxsIHNwZWNpZmllcyBtaW5pbXVtCiAgIHNsb3Qgdm9sdGFnZSAobVYpLCBzZWNvbmQgY2VsbCBzcGVjaWZpZXMgbWF4aW11bSBzbG90IHZvbHRhZ2UgKG1WKS4KICAgU2V2ZXJhbCByYW5nZXMgY291bGQgYmUgc3BlY2lmaWVkLgotLSBncGlvcyA6IChvcHRpb25hbCkgbWF5IHNwZWNpZnkgR1BJT3MgaW4gdGhpcyBvcmRlcjogQ2FyZC1EZXRlY3QgR1BJTywKKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gZ3Bpb3MgOiBtYXkgc3BlY2lmeSBHUElPcyBpbiB0aGlzIG9yZGVyOiBDYXJkLURldGVjdCBHUElPLAogICBXcml0ZS1Qcm90ZWN0IEdQSU8uCistIGludGVycnVwdHMgOiB0aGUgaW50ZXJydXB0IG9mIGEgY2FyZCBkZXRlY3QgaW50ZXJydXB0LgorLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgogCiBFeGFtcGxlOgogCkBAIC0yMCw0ICsyNSw2IEBACiAJCQkgJnFlX3Bpb19kIDE1IDA+OwogCQl2b2x0YWdlLXJhbmdlcyA9IDwzMzAwIDMzMDA+OwogCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CisJCWludGVycnVwdHMgPSA8NDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvb3Blbi1waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL29wZW4tcGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDlhOTAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL29wZW4tcGljLnR4dApAQCAtMCwwICsxLDk4IEBACisqIE9wZW4gUElDIEJpbmRpbmcKKworVGhpcyBiaW5kaW5nIHNwZWNpZmllcyB3aGF0IHByb3BlcnRpZXMgbXVzdCBiZSBhdmFpbGFibGUgaW4gdGhlIGRldmljZSB0cmVlCityZXByZXNlbnRhdGlvbiBvZiBhbiBPcGVuIFBJQyBjb21wbGlhbnQgaW50ZXJydXB0IGNvbnRyb2xsZXIuICBUaGlzIGJpbmRpbmcgaXMKK2Jhc2VkIG9uIHRoZSBiaW5kaW5nIGRlZmluZWQgZm9yIE9wZW4gUElDIGluIFsxXSBhbmQgaXMgYSBzdXBlcnNldCBvZiB0aGF0CitiaW5kaW5nLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgIE5PVEU6IE1hbnkgb2YgdGhlc2UgZGVzY3JpcHRpb25zIHdlcmUgcGFyYXBocmFzZWQgaGVyZSBmcm9tIFsxXSB0byBhaWQKKyAgICAgICAgcmVhZGFiaWxpdHkuCisKKyAgICAtIGNvbXBhdGlibGU6IFNwZWNpZmllcyB0aGUgY29tcGF0aWJpbGl0eSBsaXN0IGZvciB0aGUgUElDLiAgVGhlIHR5cGUKKyAgICAgIHNoYWxsIGJlIDxzdHJpbmc+IGFuZCB0aGUgdmFsdWUgc2hhbGwgaW5jbHVkZSAib3Blbi1waWMiLgorCisgICAgLSByZWc6IFNwZWNpZmllcyB0aGUgYmFzZSBwaHlzaWNhbCBhZGRyZXNzKHMpIGFuZCBzaXplKHMpIG9mIHRoaXMKKyAgICAgIFBJQydzIGFkZHJlc3NhYmxlIHJlZ2lzdGVyIHNwYWNlLiAgVGhlIHR5cGUgc2hhbGwgYmUgPHByb3AtZW5jb2RlZC1hcnJheT4uCisKKyAgICAtIGludGVycnVwdC1jb250cm9sbGVyOiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBwcm9wZXJ0eSBpZGVudGlmaWVzIHRoZSBub2RlCisgICAgICBhcyBhbiBPcGVuIFBJQy4gIE5vIHByb3BlcnR5IHZhbHVlIHNoYWxsIGJlIGRlZmluZWQuCisKKyAgICAtICNpbnRlcnJ1cHQtY2VsbHM6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0byBlbmNvZGUgYW4KKyAgICAgIGludGVycnVwdCBzb3VyY2UuICBUaGUgdHlwZSBzaGFsbCBiZSBhIDx1MzI+IGFuZCB0aGUgdmFsdWUgc2hhbGwgYmUgMi4KKworICAgIC0gI2FkZHJlc3MtY2VsbHM6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0byBlbmNvZGUgYW4KKyAgICAgIGFkZHJlc3MuICBUaGUgdHlwZSBzaGFsbCBiZSA8dTMyPiBhbmQgdGhlIHZhbHVlIHNoYWxsIGJlIDAuICBBcyBzdWNoLAorICAgICAgJ2ludGVycnVwdC1tYXAnIG5vZGVzIGRvIG5vdCBoYXZlIHRvIHNwZWNpZnkgYSBwYXJlbnQgdW5pdCBhZGRyZXNzLgorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorCisgICAgLSBwaWMtbm8tcmVzZXQ6IFRoZSBwcmVzZW5jZSBvZiB0aGlzIHByb3BlcnR5IGluZGljYXRlcyB0aGF0IHRoZSBQSUMKKyAgICAgIHNoYWxsIG5vdCBiZSByZXNldCBkdXJpbmcgcnVudGltZSBpbml0aWFsaXphdGlvbi4gIE5vIHByb3BlcnR5IHZhbHVlIHNoYWxsCisgICAgICBiZSBkZWZpbmVkLiAgVGhlIHByZXNlbmNlIG9mIHRoaXMgcHJvcGVydHkgYWxzbyBtYW5kYXRlcyB0aGF0IGFueQorICAgICAgaW5pdGlhbGl6YXRpb24gcmVsYXRlZCB0byBpbnRlcnJ1cHQgc291cmNlcyBzaGFsbCBiZSBsaW1pdGVkIHRvIHNvdXJjZXMKKyAgICAgIGV4cGxpY2l0bHkgcmVmZXJlbmNlZCBpbiB0aGUgZGV2aWNlIHRyZWUuCisKKyogSW50ZXJydXB0IFNwZWNpZmllciBEZWZpbml0aW9uCisKKyAgSW50ZXJydXB0IHNwZWNpZmllcnMgY29uc2lzdHMgb2YgMiBjZWxscyBlbmNvZGVkIGFzCisgIGZvbGxvd3M6CisKKyAgICAtIDwxc3QtY2VsbD46IFRoZSBpbnRlcnJ1cHQtbnVtYmVyIHRoYXQgaWRlbnRpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZS4KKworICAgIC0gPDJuZC1jZWxsPjogVGhlIGxldmVsLXNlbnNlIGluZm9ybWF0aW9uLCBlbmNvZGVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDAgPSBsb3ctdG8taGlnaCBlZGdlIHRyaWdnZXJlZAorICAgICAgICAgICAgICAgICAgICAxID0gYWN0aXZlIGxvdyBsZXZlbC1zZW5zaXRpdmUKKyAgICAgICAgICAgICAgICAgICAgMiA9IGFjdGl2ZSBoaWdoIGxldmVsLXNlbnNpdGl2ZQorICAgICAgICAgICAgICAgICAgICAzID0gaGlnaC10by1sb3cgZWRnZSB0cmlnZ2VyZWQKKworKiBFeGFtcGxlcworCitFeGFtcGxlIDE6CisKKwkvKgorCSAqIEFuIE9wZW4gUElDIGludGVycnVwdCBjb250cm9sbGVyCisJICovCisJbXBpYzogcGljQDQwMDAwIHsKKwkJLy8gVGhpcyBpcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlciBub2RlLgorCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKworCQkvLyBObyBhZGRyZXNzIGNlbGxzIHNvIHRoYXQgJ2ludGVycnVwdC1tYXAnIG5vZGVzIHdoaWNoIHJlZmVyZW5jZQorCQkvLyB0aGlzIE9wZW4gUElDIG5vZGUgZG8gbm90IG5lZWQgYSBwYXJlbnQgYWRkcmVzcyBzcGVjaWZpZXIuCisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCisJCS8vIFR3byBjZWxscyB0byBlbmNvZGUgaW50ZXJydXB0IHNvdXJjZXMuCisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisKKwkJLy8gT2Zmc2V0IGFkZHJlc3Mgb2YgMHg0MDAwMCBhbmQgc2l6ZSBvZiAweDQwMDAwLgorCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKworCQkvLyBDb21wYXRpYmxlIHdpdGggT3BlbiBQSUMuCisJCWNvbXBhdGlibGUgPSAib3Blbi1waWMiOworCisJCS8vIFRoZSBQSUMgc2hhbGwgbm90IGJlIHJlc2V0LgorCQlwaWMtbm8tcmVzZXQ7CisJfTsKKworRXhhbXBsZSAyOgorCisJLyoKKwkgKiBBbiBpbnRlcnJ1cHQgZ2VuZXJhdGluZyBkZXZpY2UgdGhhdCBpcyB3aXJlZCB0byBhbiBPcGVuIFBJQy4KKwkgKi8KKwlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCS8vIEludGVycnVwdCBzb3VyY2UgJzQyJyB0aGF0IGlzIGFjdGl2ZSBoaWdoIGxldmVsLXNlbnNpdGl2ZS4KKwkJLy8gTm90ZSB0aGF0IHRoZXJlIGFyZSBvbmx5IHR3byBjZWxscyBhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdAorCQkvLyBwYXJlbnQncyAnI2ludGVycnVwdC1jZWxscycgcHJvcGVydHkuCisJCWludGVycnVwdHMgPSA8NDIgMj47CisKKwkJLy8gVGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQgdGhpcyBkZXZpY2UgaXMgd2lyZWQgdG8uCisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCX07CisKKyogUmVmZXJlbmNlcworCitbMV0gUG93ZXIub3JnIChUTSkgU3RhbmRhcmQgZm9yIEVtYmVkZGVkIFBvd2VyIEFyY2hpdGVjdHVyZSAoVE0pIFBsYXRmb3JtCisgICAgUmVxdWlyZW1lbnRzIChlUEFQUiksIFZlcnNpb24gMS4wLCBKdWx5IDIwMDguCisgICAgKGh0dHA6Ly93d3cucG93ZXIub3JnL3Jlc291cmNlcy9kb3dubG9hZHMvUG93ZXJfZVBBUFJfQVBQUk9WRURfdjEuMC5wZGYpCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jYWNoZV9zcmFtLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jYWNoZV9zcmFtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODE5NTVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NhY2hlX3NyYW0udHh0CkBAIC0wLDAgKzEsMjAgQEAKKyogRnJlZXNjYWxlIFBRMyBhbmQgUW9ySVEgYmFzZWQgQ2FjaGUgU1JBTQorCitGcmVlc2NhbGUncyBtcGM4NXh4IGFuZCBzb21lIFFvcklRIHBsYXRmb3JtcyBwcm92aWRlIGFuCitvcHRpb24gb2YgY29uZmlndXJpbmcgYSBwYXJ0IG9mIChvciBmdWxsKSBjYWNoZSBtZW1vcnkKK2FzIFNSQU0uIFRoaXMgY2FjaGUgU1JBTSByZXByZXNlbnRhdGlvbiBpbiB0aGUgZGV2aWNlCit0cmVlIHNob3VsZCBiZSBkb25lIGFzIHVuZGVyOi0KKworUmVxdWlyZWQgcHJvcGVydGllczoKKworLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJmc2wscDIwMjAtY2FjaGUtc3JhbSIKKy0gZnNsLGNhY2hlLXNyYW0tY3Rsci1oYW5kbGUgOiBwb2ludHMgdG8gdGhlIEwyIGNvbnRyb2xsZXIKKy0gcmVnIDogb2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIGNhY2hlLXNyYW0uCisKK0V4YW1wbGU6CisKK2NhY2hlLXNyYW1AZmZmMDAwMDAgeworCWZzbCxjYWNoZS1zcmFtLWN0bHItaGFuZGxlID0gPCZMMj47CisJcmVnID0gPDAgMHhmZmYwMDAwMCAwIDB4MTAwMDA+OworCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWNhY2hlLXNyYW0iOworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dAppbmRleCA3MWUzOWNmLi44YWExMGY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0CkBAIC0xLDQyICsxLDIxMSBAQAotKiBPcGVuUElDIGFuZCBpdHMgaW50ZXJydXB0IG51bWJlcnMgb24gRnJlZXNjYWxlJ3MgZTUwMC9lNjAwIGNvcmVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ZyZWVzY2FsZSBNUElDIEludGVycnVwdCBDb250cm9sbGVyIE5vZGUKK0NvcHlyaWdodCAoQykgMjAxMCwyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgT3BlblBJQyBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHNwZWNpZnkgd2hpY2ggaW50ZXJydXB0IHNvdXJjZSBoYXMgdG8KLWJlY29tZSB3aGljaCBpbnRlcnJ1cHQgbnVtYmVyLiBUaGlzIGlzIHVwIHRvIHRoZSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbgotb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyLiBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IGV2ZXJ5Ci1pbnRlcnJ1cHQgc291cmNlIGhhcyB0byBoYXZlIGFuIHVuaXF1ZSBpbnRlcnJ1cHQgbnVtYmVyIC8gdmVjdG9yIG51bWJlci4KLVRvIGFjY29tcGxpc2ggdGhpcyB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhc3NpZ25zIHRoZSBudW1iZXIgemVybyB0bwotdGhlIGZpcnN0IHNvdXJjZSwgdGhlIG51bWJlciBvbmUgdG8gdGhlIHNlY29uZCBzb3VyY2UgYW5kIHNvIG9uIHVudGlsCi1hbGwgaW50ZXJydXB0IHNvdXJjZXMgaGF2ZSB0aGVpciB1bmlxdWUgbnVtYmVyLgotVXN1YWxseSB0aGUgYXNzaWduZWQgdmVjdG9yIG51bWJlciBlcXVhbHMgdGhlIGludGVycnVwdCBudW1iZXIgbWVudGlvbmVkCi1pbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYSBnaXZlbiBjb3JlIC8gQ1BVLiBUaGlzIGlzIGhvd2V2ZXIgbm90IHRydWUKLWZvciB0aGUgZTUwMCBjb3JlcyAoTVBDODVYWCBDUFVzKSB3aGVyZSB0aGUgZG9jdW1lbnRhdGlvbiBkaXN0aW5ndWlzaGVzCi1iZXR3ZWVuIGludGVybmFsIGFuZCBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyBhbmQgc3RhcnRzIGNvdW50aW5nIGF0Ci16ZXJvIGZvciBib3RoIG9mIHRoZW0uCitUaGUgRnJlZXNjYWxlIE1QSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgZm91bmQgb24gYWxsIFBvd2VyUVVJQ0MKK2FuZCBRb3JJUSBwcm9jZXNzb3JzIGFuZCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIE9wZW4gUElDLiAgVGhlCitub3RhYmxlIGRpZmZlcmVuY2UgZnJvbSBPcGVuIFBJQyBiaW5kaW5nIGlzIHRoZSBhZGRpdGlvbiBvZiAyCithZGRpdGlvbmFsIGNlbGxzIGluIHRoZSBpbnRlcnJ1cHQgc3BlY2lmaWVyIGRlZmluaW5nIGludGVycnVwdCB0eXBlCitpbmZvcm1hdGlvbi4KIAotU28gd2hhdCB0byB3cml0ZSBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZSBYIG9yIGludGVybmFsIGludGVycnVwdAotc291cmNlIFkgaW50byB0aGUgZGV2aWNlIHRyZWU/IEhlcmUgaXMgYW4gZXhhbXBsZToKK1BST1BFUlRJRVMKIAotVGhlIG1lbW9yeSBtYXAgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbiB0aGUgTVBDODU0NFswXSBzaG93cywKLXRoYXQgdGhlIGZpcnN0IGludGVycnVwdCBzb3VyY2Ugc3RhcnRzIGF0IDB4NV8wMDAwIChQSUMgUmVnaXN0ZXIgQWRkcmVzcwotTWFwLUludGVycnVwdCBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMpLiBUaGlzIHNvdXJjZSBiZWNvbWVzIHRoZQotbnVtYmVyIHplcm8gdGhlcmVmb3JlOgotIEV4dGVybmFsIGludGVycnVwdCAwID0gaW50ZXJydXB0IG51bWJlciAwCi0gRXh0ZXJuYWwgaW50ZXJydXB0IDEgPSBpbnRlcnJ1cHQgbnVtYmVyIDEKLSBFeHRlcm5hbCBpbnRlcnJ1cHQgMiA9IGludGVycnVwdCBudW1iZXIgMgotIC4uLgotRXZlcnkgaW50ZXJydXB0IG51bWJlciBhbGxvY2F0ZXMgMHgyMCBieXRlcyByZWdpc3RlciBzcGFjZS4gU28gdG8gZ2V0Ci1pdHMgbnVtYmVyIGl0IGlzIHN1ZmZpY2llbnQgdG8gc2hpZnQgdGhlIGxvd2VyIDE2Yml0cyB0byByaWdodCBieSBmaXZlLgotU28gZm9yIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgMTAgd2UgaGF2ZToKLSAgMHgwMTQwID4+IDUgPSAxMAorICAtIGNvbXBhdGlibGUKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHN0cmluZz4KKyAgICAgIERlZmluaXRpb246IFNoYWxsIGluY2x1ZGUgImZzbCxtcGljIi4gIEZyZWVzY2FsZSBNUElDCisgICAgICAgICAgY29udHJvbGxlcnMgY29tcGF0aWJsZSB3aXRoIHRoaXMgYmluZGluZyBoYXZlIEJsb2NrCisgICAgICAgICAgUmV2aXNpb24gUmVnaXN0ZXJzIEJSUjEgYW5kIEJSUjIgYXQgb2Zmc2V0IDB4MCBhbmQKKyAgICAgICAgICAweDEwIGluIHRoZSBNUElDLgogCi1BZnRlciB0aGUgZXh0ZXJuYWwgc291cmNlcywgdGhlIGludGVybmFsIHNvdXJjZXMgZm9sbG93LiBUaGUgaW4gY29yZSBJMkMKLWNvbnRyb2xsZXIgb24gdGhlIE1QQzg1NDQgZm9yIGluc3RhbmNlIGhhcyB0aGUgaW50ZXJuYWwgc291cmNlIG51bWJlcgotMjcuIE9vIG9idGFpbiBpdHMgaW50ZXJydXB0IG51bWJlciB3ZSB0YWtlIHRoZSBsb3dlciAxNmJpdHMgb2YgaXRzIG1lbW9yeQotYWRkcmVzcyAoMHg1XzA1NjApIGFuZCBzaGlmdCBpdCByaWdodDoKLSAweDA1NjAgPj4gNSA9IDQzCisgIC0gcmVnCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisgICAgICBEZWZpbml0aW9uOiBBIHN0YW5kYXJkIHByb3BlcnR5LiAgU3BlY2lmaWVzIHRoZSBwaHlzaWNhbAorICAgICAgICAgIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBkZXZpY2UncyByZWdpc3RlcnMgd2l0aGluIHRoZQorICAgICAgICAgIENDU1IgYWRkcmVzcyBzcGFjZS4KIAotVGhlcmVmb3JlIHRoZSBJMkMgZGV2aWNlIG5vZGUgZm9yIHRoZSBNUEM4NTQ0IENQVSBoYXMgdG8gaGF2ZSB0aGUKLWludGVycnVwdCBudW1iZXIgNDMgc3BlY2lmaWVkIGluIHRoZSBkZXZpY2UgdHJlZS4KKyAgLSBpbnRlcnJ1cHQtY29udHJvbGxlcgorICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8ZW1wdHk+CisgICAgICBEZWZpbml0aW9uOiBTcGVjaWZpZXMgdGhhdCB0aGlzIG5vZGUgaXMgYW4gaW50ZXJydXB0CisgICAgICAgICAgY29udHJvbGxlcgogCi1bMF0gTVBDODU0NEUgUG93ZXJRVUlDQ1RNIElJSSwgSW50ZWdyYXRlZCBIb3N0IFByb2Nlc3NvciBGYW1pbHkgUmVmZXJlbmNlIE1hbnVhbAotICAgIE1QQzg1NDRFUk0gUmV2LiAxIDEwLzIwMDcKKyAgLSAjaW50ZXJydXB0LWNlbGxzCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDx1MzI+CisgICAgICBEZWZpbml0aW9uOiBTaGFsbCBiZSAyIG9yIDQuICBBIHZhbHVlIG9mIDIgbWVhbnMgdGhhdCBpbnRlcnJ1cHQKKyAgICAgICAgICBzcGVjaWZpZXJzIGRvIG5vdCBjb250YWluIHRoZSBpbnRlcnJ1cHQtdHlwZSBvciB0eXBlLXNwZWNpZmljCisgICAgICAgICAgaW5mb3JtYXRpb24gY2VsbHMuCisKKyAgLSAjYWRkcmVzcy1jZWxscworICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8dTMyPgorICAgICAgRGVmaW5pdGlvbjogU2hhbGwgYmUgMC4KKworICAtIHBpYy1uby1yZXNldAorICAgICAgVXNhZ2U6IG9wdGlvbmFsCisgICAgICBWYWx1ZSB0eXBlOiA8ZW1wdHk+CisgICAgICBEZWZpbml0aW9uOiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhhdCB0aGUKKyAgICAgICAgICBNUElDIG11c3Qgbm90IGJlIHJlc2V0IGJ5IHRoZSBjbGllbnQgcHJvZ3JhbSwgYW5kIHRoYXQKKyAgICAgICAgICB0aGUgYm9vdCBwcm9ncmFtIGhhcyBpbml0aWFsaXplZCBhbGwgaW50ZXJydXB0IHNvdXJjZQorICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHRvIGEgc2FuZSBzdGF0ZS0tIG1hc2tlZCBvcgorICAgICAgICAgIGRpcmVjdGVkIGF0IG90aGVyIGNvcmVzLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNsaWVudAorICAgICAgICAgIHByb2dyYW0gd2lsbCBub3QgcmVjZWl2ZSBpbnRlcnJ1cHRzIGZvciBzb3VyY2VzIG5vdCBiZWxvbmdpbmcKKyAgICAgICAgICB0byB0aGUgY2xpZW50LiAgVGhlIHByZXNlbmNlIG9mIHRoaXMgcHJvcGVydHkgYWxzbyBtYW5kYXRlcworICAgICAgICAgIHRoYXQgYW55IGluaXRpYWxpemF0aW9uIHJlbGF0ZWQgdG8gaW50ZXJydXB0IHNvdXJjZXMgc2hhbGwKKyAgICAgICAgICBiZSBsaW1pdGVkIHRvIHNvdXJjZXMgZXhwbGljaXRseSByZWZlcmVuY2VkIGluIHRoZSBkZXZpY2UgdHJlZS4KKyAgICAgICAKK0lOVEVSUlVQVCBTUEVDSUZJRVIgREVGSU5JVElPTgorCisgIEludGVycnVwdCBzcGVjaWZpZXJzIGNvbnNpc3RzIG9mIDQgY2VsbHMgZW5jb2RlZCBhcworICBmb2xsb3dzOgorCisgICA8MXN0LWNlbGw+ICAgaW50ZXJydXB0LW51bWJlcgorCisgICAgICAgICAgICAgICAgSWRlbnRpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZS4gIFRoZSBtZWFuaW5nCisgICAgICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQuCisKKyAgICAgICAgICAgICAgICBOb3RlOiBJZiB0aGUgaW50ZXJydXB0LXR5cGUgY2VsbCBpcyB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICAoaS5lLiAjaW50ZXJydXB0LWNlbGxzID0gMiksIHRoaXMgY2VsbAorICAgICAgICAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCB0aGUgc2FtZSBhcyBmb3IKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHQtdHlwZSAwLS0gaS5lLiBhbiBleHRlcm5hbCBvcgorICAgICAgICAgICAgICAgIG5vcm1hbCBTb0MgZGV2aWNlIGludGVycnVwdC4KKworICAgPDJuZC1jZWxsPiAgIGxldmVsLXNlbnNlIGluZm9ybWF0aW9uLCBlbmNvZGVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDAgPSBsb3ctdG8taGlnaCBlZGdlIHRyaWdnZXJlZAorICAgICAgICAgICAgICAgICAgICAxID0gYWN0aXZlIGxvdyBsZXZlbC1zZW5zaXRpdmUKKyAgICAgICAgICAgICAgICAgICAgMiA9IGFjdGl2ZSBoaWdoIGxldmVsLXNlbnNpdGl2ZQorICAgICAgICAgICAgICAgICAgICAzID0gaGlnaC10by1sb3cgZWRnZSB0cmlnZ2VyZWQKKworICAgPDNyZC1jZWxsPiAgIGludGVycnVwdC10eXBlCisKKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICAgICAgICAgICAgICAgIDAgPSBleHRlcm5hbCBvciBub3JtYWwgU29DIGRldmljZSBpbnRlcnJ1cHQKKworICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQtbnVtYmVyIGNlbGwgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICB0aGUgU29DIGRldmljZSBpbnRlcnJ1cHQgbnVtYmVyLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgdHlwZS1zcGVjaWZpYyBjZWxsIGlzIHVuZGVmaW5lZC4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC1udW1iZXIgaXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgIE1QSUMgYSBibG9jayBvZiByZWdpc3RlcnMgcmVmZXJyZWQgdG8gYXMKKyAgICAgICAgICAgICAgICAgICAgICB0aGUgIkludGVycnVwdCBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMiLgorICAgICAgICAgICAgICAgICAgICAgIEVhY2ggc291cmNlIGhhcyAzMi1ieXRlcyBvZiByZWdpc3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yL3ByaW9yaXR5IGFuZCBkZXN0aW5hdGlvbikgaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi4gICBTbyBpbnRlcnJ1cHQgMCBpcyBhdCBvZmZzZXQgMHgwLAorICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAxIGlzIGF0IG9mZnNldCAweDIwLCBhbmQgc28gb24uCisKKyAgICAgICAgICAgICAgICAgIDEgPSBlcnJvciBpbnRlcnJ1cHQKKworICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQtbnVtYmVyIGNlbGwgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICB0aGUgU29DIGRldmljZSBpbnRlcnJ1cHQgbnVtYmVyIGZvcgorICAgICAgICAgICAgICAgICAgICAgIHRoZSBlcnJvciBpbnRlcnJ1cHQuICBUaGUgdHlwZS1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgIGNlbGwgaWRlbnRpZmllcyB0aGUgc3BlY2lmaWMgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgbnVtYmVyLgorCisgICAgICAgICAgICAgICAgICAyID0gTVBJQyBpbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0IChJUEkpCisKKyAgICAgICAgICAgICAgICAgICAgICBUaGUgaW50ZXJydXB0LW51bWJlciBjZWxsIGlkZW50aWZpZXMKKyAgICAgICAgICAgICAgICAgICAgICB0aGUgTVBJQyBJUEkgbnVtYmVyLiAgVGhlIHR5cGUtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICBjZWxsIGlzIHVuZGVmaW5lZC4KKworICAgICAgICAgICAgICAgICAgMyA9IE1QSUMgdGltZXIgaW50ZXJydXB0CisKKyAgICAgICAgICAgICAgICAgICAgICBUaGUgaW50ZXJydXB0LW51bWJlciBjZWxsIGlkZW50aWZpZXMKKyAgICAgICAgICAgICAgICAgICAgICB0aGUgTVBJQyB0aW1lciBudW1iZXIuICBUaGUgdHlwZS1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgIGNlbGwgaXMgdW5kZWZpbmVkLgorCisgICA8NHRoLWNlbGw+ICAgdHlwZS1zcGVjaWZpYyBpbmZvcm1hdGlvbgorCisgICAgICAgICAgICAgICAgVGhlIHR5cGUtc3BlY2lmaWMgY2VsbCBpcyBlbmNvZGVkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgICAgICAgLSBGb3IgaW50ZXJydXB0LXR5cGUgMSAoZXJyb3IgaW50ZXJydXB0KSwKKyAgICAgICAgICAgICAgICAgICB0aGUgdHlwZS1zcGVjaWZpYyBjZWxsIGNvbnRhaW5zIHRoZQorICAgICAgICAgICAgICAgICAgIGJpdCBudW1iZXIgb2YgdGhlIGVycm9yIGludGVycnVwdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICBFcnJvciBJbnRlcnJ1cHQgU3VtbWFyeSBSZWdpc3Rlci4KKworRVhBTVBMRSAxCisJLyoKKwkgKiBtcGljIGludGVycnVwdCBjb250cm9sbGVyIHdpdGggNCBjZWxscyBwZXIgc3BlY2lmaWVyCisJICovCisJbXBpYzogcGljQDQwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDQ+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJfTsKKworRVhBTVBMRSAyCisJLyoKKwkgKiBUaGUgTVBDODU0NCBJMkMgY29udHJvbGxlciBub2RlIGhhcyBhbiBpbnRlcm5hbAorCSAqIGludGVycnVwdCBudW1iZXIgb2YgMjcuICBBcyBwZXIgdGhlIHJlZmVyZW5jZSBtYW51YWwKKwkgKiB0aGlzIGNvcnJlc3BvbmRzIHRvIGludGVycnVwdCBzb3VyY2UgY29uZmlndXJhdGlvbgorCSAqIHJlZ2lzdGVycyBhdCAweDVfMDU2MC4KKwkgKgorCSAqIFRoZSBpbnRlcnJ1cHQgc291cmNlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGJlZ2luCisJICogYXQgMHg1XzAwMDAuCisJICoKKwkgKiBUbyBjb21wdXRlIHRoZSBpbnRlcnJ1cHQgc3BlY2lmaWVyIGludGVycnVwdCBudW1iZXIKKyAgICAgICAgICoKKwkgKiAgICAgICAweDU2MCA+PiA1ID0gNDMKKwkgKgorCSAqIFRoZSBpbnRlcnJ1cHQgc291cmNlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGJlZ2luCisJICogYXQgMHg1XzAwMDAsIGFuZCBzbyB0aGUgaTJjIHZlY3Rvci9wcmlvcml0eSByZWdpc3RlcnMKKwkgKiBhcmUgYXQgMHg1XzA1NjAuCisJICovCisJaTJjQDMwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNlbGwtaW5kZXggPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJZGZzcnI7CisJfTsKKworCitFWEFNUExFIDMKKwkvKgorCSAqICBEZWZpbml0aW9uIG9mIGEgbm9kZSBkZWZpbmluZyB0aGUgNAorCSAqICBNUElDIElQSSBpbnRlcnJ1cHRzLiAgTm90ZSB0aGUgaW50ZXJydXB0CisJICogIHR5cGUgb2YgMi4KKwkgKi8KKwlpcGlANDEwYTAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGljLWlwaSI7CisJCXJlZyA9IDwweDQwMDQwIDB4MTA+OworCQlpbnRlcnJ1cHRzID0gPDAgMCAyIDAKKwkJICAgICAgICAgICAgICAxIDAgMiAwCisJCSAgICAgICAgICAgICAgMiAwIDIgMAorCQkgICAgICAgICAgICAgIDMgMCAyIDA+OworCX07CisKK0VYQU1QTEUgNAorCS8qCisJICogIERlZmluaXRpb24gb2YgYSBub2RlIGRlZmluaW5nIHRoZSBNUElDCisJICogIGdsb2JhbCB0aW1lcnMuICBOb3RlIHRoZSBpbnRlcnJ1cHQKKwkgKiAgdHlwZSBvZiAzLgorCSAqLworCXRpbWVyMDogdGltZXJANDExMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGljLWdsb2JhbC10aW1lciI7CisJCXJlZyA9IDwweDQxMTAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDAgMyAwCisJCSAgICAgICAgICAgICAgMSAwIDMgMAorCQkgICAgICAgICAgICAgIDIgMCAzIDAKKwkJICAgICAgICAgICAgICAzIDAgMyAwPjsKKwl9OworCitFWEFNUExFIDUKKwkvKgorCSAqIERlZmluaXRpb24gb2YgYW4gZXJyb3IgaW50ZXJydXB0IChpbnRlcnVwdCB0eXBlIDEpLgorCSAqIFNvQyBpbnRlcnJ1cHQgbnVtYmVyIGlzIDE2IGFuZCB0aGUgc3BlY2lmaWMgZXJyb3IKKyAgICAgICAgICogaW50ZXJydXB0IGJpdCBpbiB0aGUgZXJyb3IgaW50ZXJydXB0IHN1bW1hcnkgcmVnaXN0ZXIKKwkgKiBpcyAyMy4KKwkgKi8KKwltZW1vcnktY29udHJvbGxlckA4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDQwODAtbWVtb3J5LWNvbnRyb2xsZXIiOworCQlyZWcgPSA8MHg4MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTYgMiAxIDIzPjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21zaS1waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21zaS1waWMudHh0CmluZGV4IGJjYzMwYmEuLjcwNTU4YzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tc2ktcGljLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXNpLXBpYy50eHQKQEAgLTUsMTQgKzUsMjEgQEAKICAgZmlyc3QgaXMgImZzbCxDSElQLW1zaSIsIHdoZXJlIENISVAgaXMgdGhlIHByb2Nlc3NvcihtcGM4NjEwLCBtcGM4NTcyLAogICBldGMuKSBhbmQgdGhlIHNlY29uZCBpcyAiZnNsLG1waWMtbXNpIiBvciAiZnNsLGlwaWMtbXNpIiBkZXBlbmRpbmcgb24KICAgdGhlIHBhcmVudCB0eXBlLgorCiAtIHJlZyA6IHNob3VsZCBjb250YWluIHRoZSBhZGRyZXNzIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBzaGFyZWQgbWVzc2FnZQogICBpbnRlcnJ1cHQgcmVnaXN0ZXIgc2V0LgorCiAtIG1zaS1hdmFpbGFibGUtcmFuZ2VzOiB1c2UgPHN0YXJ0IGNvdW50PiBzdHlsZSBzZWN0aW9uIHRvIGRlZmluZSB3aGljaAogICBtc2kgaW50ZXJydXB0IGNhbiBiZSB1c2VkIGluIHRoZSAyNTYgbXNpIGludGVycnVwdHMuIFRoaXMgcHJvcGVydHkgaXMKICAgb3B0aW9uYWwsIHdpdGhvdXQgdGhpcywgYWxsIHRoZSAyNTYgTVNJIGludGVycnVwdHMgY2FuIGJlIHVzZWQuCisgIEVhY2ggYXZhaWxhYmxlIHJhbmdlIG11c3QgYmVnaW4gYW5kIGVuZCBvbiBhIG11bHRpcGxlIG9mIDMyIChpLmUuCisgIG5vIHNwbGl0dGluZyBhbiBpbmRpdmlkdWFsIE1TSSByZWdpc3RlciBvciB0aGUgYXNzb2NpYXRlZCBQSUMgaW50ZXJydXB0KS4KKwogLSBpbnRlcnJ1cHRzIDogZWFjaCBvbmUgb2YgdGhlIGludGVycnVwdHMgaGVyZSBpcyBvbmUgZW50cnkgcGVyIDMyIE1TSXMsCiAgIGFuZCByb3V0ZWQgdG8gdGhlIGhvc3QgaW50ZXJydXB0IGNvbnRyb2xsZXIuIHRoZSBpbnRlcnJ1cHRzIHNob3VsZAotICBiZSBzZXQgYXMgZWRnZSBzZW5zaXRpdmUuCisgIGJlIHNldCBhcyBlZGdlIHNlbnNpdGl2ZS4gIElmIG1zaS1hdmFpbGFibGUtcmFuZ2VzIGlzIHByZXNlbnQsIG9ubHkKKyAgdGhlIGludGVycnVwdHMgdGhhdCBjb3JyZXNwb25kIHRvIGF2YWlsYWJsZSByYW5nZXMgc2hhbGwgYmUgcHJlc2VudC4KKwogLSBpbnRlcnJ1cHQtcGFyZW50OiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyCiAgIHRoYXQgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuIGZvciA4M3h4IGNwdSwgdGhlIGludGVycnVwdHMKICAgYXJlIHJvdXRlZCB0byBJUElDLCBhbmQgZm9yIDg1eHgvODZ4eCBjcHUgdGhlIGludGVycnVwdHMgYXJlIHJvdXRlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGlfYWx0ZXJhLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpX2FsdGVyYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhMzc1OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpX2FsdGVyYS50eHQKQEAgLTAsMCArMSw0IEBACitBbHRlcmEgU1BJCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIkFMVFIsc3BpLTEuMCIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaV9vY190aW55LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpX29jX3RpbnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NWMwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaV9vY190aW55LnR4dApAQCAtMCwwICsxLDEyIEBACitPcGVuQ29yZXMgdGlueSBTUEkKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAib3BlbmNvcmVzLHRpbnktc3BpLXJ0bHN2bjIiLgorLSBncGlvcyA6IHNob3VsZCBzcGVjaWZ5IEdQSU9zIHVzZWQgZm9yIGNoaXBzZWxlY3QuCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBjbG9jay1mcmVxdWVuY3kgOiBpbnB1dCBjbG9jayBmcmVxdWVuY3kgdG8gdGhlIGNvcmUuCistIGJhdWQtd2lkdGg6IHdpZHRoLCBpbiBiaXRzLCBvZiB0aGUgcHJvZ3JhbW1hYmxlIGRpdmlkZXIgdXNlZCB0byBzY2FsZQorCXRoZSBpbnB1dCBjbG9jayB0byBTQ0xLLgorCitUaGUgY2xvY2stZnJlcXVlbmN5IGFuZCBiYXVkLXdpZHRoIHByb3BlcnRpZXMgYXJlIG5lZWRlZCBvbmx5IGlmIHRoZSBkaXZpZGVyCitpcyBwcm9ncmFtbWFibGUuIFRoZXkgYXJlIG5vdCBuZWVkZWQgaWYgdGhlIGRpdmlkZXIgaXMgZml4ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggZjQ4N2M2OS4uODk1MzMwOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNTg1LDE2ICs1ODUsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CWkyY19hZGFwdGVyLmlkCi1XaGVuOglKdW5lIDIwMTEKLVdoeToJVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBJMkMgZGV2aWNlIGRyaXZlcnMgc2hvdWxkbid0IGNoYW5nZSB0aGVpcgotCWJlaGF2aW9yIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIEkyQyBhZGFwdGVyLiBJbnN0ZWFkLCB0aGUgSTJDCi0JYWRhcHRlciBkcml2ZXIgc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBJMkMgZGV2aWNlcyBhbmQgcHJvdmlkZSB0aGUKLQluZWVkZWQgcGxhdGZvcm0tc3BlY2lmaWMgaW5mb3JtYXRpb24uCi1XaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmtbcXVldWVdKCkKIFdoZW46CTIuNi4zOQogCkBAIC02NDUsMyArNjM1LDEyIEBACiBGaWxlczoJaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWRkcnR5cGUuaAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CWkyY19kcml2ZXIuYXR0YWNoX2FkYXB0ZXIKKwlpMmNfZHJpdmVyLmRldGFjaF9hZGFwdGVyCitXaGVuOglTZXB0ZW1iZXIgMjAxMQorV2h5OglUaGVzZSBsZWdhY3kgY2FsbGJhY2tzIHNob3VsZCBubyBsb25nZXIgYmUgdXNlZCBhcyBpMmMtY29yZSBvZmZlcnMKKwlhIHZhcmlldHkgb2YgcHJlZmVyYWJsZSBhbHRlcm5hdGl2ZSB3YXlzIHRvIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzLgorV2hvOglKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWRmcy50eHQKaW5kZXggOWU4ODExZi4uNTk0OTc2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZGZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2FkZnMudHh0CkBAIC05LDYgKzksOSBAQAogCQl3aWxsIGJlIG5ubi4gIERlZmF1bHQgMDcwMC4KICAgb3RobWFzaz1ubm4JVGhlIHBlcm1pc3Npb24gbWFzayBmb3IgQURGUyAnb3RoZXInIHBlcm1pc3Npb25zCiAJCXdpbGwgYmUgbm5uLiAgRGVmYXVsdCAwMDc3LgorICBmdHN1ZmZpeD1uCVdoZW4gZnRzdWZmaXg9MCwgbm8gZmlsZSB0eXBlIHN1ZmZpeCB3aWxsIGJlIGFwcGxpZWQuCisJCVdoZW4gZnRzdWZmaXg9MSwgYSBoZXhhZGVjaW1hbCBzdWZmaXggY29ycmVzcG9uZGluZyB0bworCQl0aGUgUklTQyBPUyBmaWxlIHR5cGUgd2lsbCBiZSBhZGRlZC4gIERlZmF1bHQgMC4KIAogTWFwcGluZyBvZiBBREZTIHBlcm1pc3Npb25zIHRvIExpbnV4IHBlcm1pc3Npb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU1LDMgKzU4LDE4IEBACiAKICAgWW91IGNhbiB0aGVyZWZvcmUgdGFpbG9yIHRoZSBwZXJtaXNzaW9uIHRyYW5zbGF0aW9uIHRvIHdoYXRldmVyIHlvdQogICBkZXNpcmUgdGhlIHBlcm1pc3Npb25zIHNob3VsZCBiZSB1bmRlciBMaW51eC4KKworUklTQyBPUyBmaWxlIHR5cGUgc3VmZml4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBSSVNDIE9TIGZpbGUgdHlwZXMgYXJlIHN0b3JlZCBpbiBiaXRzIDE5Li44IG9mIHRoZSBmaWxlIGxvYWQgYWRkcmVzcy4KKworICBUbyBlbmFibGUgbm9uLVJJU0MgT1Mgc3lzdGVtcyB0byBiZSB1c2VkIHRvIHN0b3JlIGZpbGVzIHdpdGhvdXQgbG9zaW5nCisgIGZpbGUgdHlwZSBpbmZvcm1hdGlvbiwgYSBmaWxlIG5hbWluZyBjb252ZW50aW9uIHdhcyBkZXZpc2VkIChpbml0aWFsbHkKKyAgZm9yIHVzZSB3aXRoIE5GUykgc3VjaCB0aGF0IGEgaGV4YWRlY2ltYWwgc3VmZml4IG9mIHRoZSBmb3JtICx4eXoKKyAgZGVub3RlZCB0aGUgZmlsZSB0eXBlOiBlLmcuIEJhc2ljRmlsZSxmZmIgaXMgYSBCQVNJQyAoMHhmZmIpIGZpbGUuICBUaGlzCisgIG5hbWluZyBjb252ZW50aW9uIGlzIG5vdyBhbHNvIHVzZWQgYnkgUklTQyBPUyBlbXVsYXRvcnMgc3VjaCBhcyBSUENFbXUuCisKKyAgTW91bnRpbmcgYW4gQURGUyBkaXNjIHdpdGggb3B0aW9uIGZ0c3VmZml4PTEgd2lsbCBjYXVzZSBhcHByb3ByaWF0ZSBmaWxlCisgIHR5cGUgc3VmZml4ZXMgdG8gYmUgYXBwZW5kZWQgdG8gZmlsZSBuYW1lcyByZWFkIGZyb20gYSBkaXJlY3RvcnkuICBJZiB0aGUKKyAgZnRzdWZmaXggb3B0aW9uIGlzIHplcm8gb3Igb21pdHRlZCwgbm8gZmlsZSB0eXBlIHN1ZmZpeGVzIHdpbGwgYmUgYWRkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JvbWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcm9tZnMudHh0CmluZGV4IDJkMmE3YjIuLmUyYjA3Y2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcm9tZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcm9tZnMudHh0CkBAIC0xNyw4ICsxNyw3IEBACiB3aXRoIHJvbWZzLCBpdCBuZWVkZWQgMzA3OSBibG9ja3MuCiAKIFRvIGNyZWF0ZSBzdWNoIGEgZmlsZSBzeXN0ZW0sIHlvdSdsbCBuZWVkIGEgdXNlciBwcm9ncmFtIG5hbWVkCi1nZW5yb21mcy4gIEl0IGlzIGF2YWlsYWJsZSB2aWEgYW5vbnltb3VzIGZ0cCBvbiBzdW5zaXRlLnVuYy5lZHUgYW5kCi1pdHMgbWlycm9ycywgaW4gdGhlIC9wdWIvTGludXgvc3lzdGVtL3JlY292ZXJ5LyBkaXJlY3RvcnkuCitnZW5yb21mcy4gSXQgaXMgYXZhaWxhYmxlIG9uIGh0dHA6Ly9yb21mcy5zb3VyY2Vmb3JnZS5uZXQvCiAKIEFzIHRoZSBuYW1lIHN1Z2dlc3RzLCByb21mcyBjb3VsZCBiZSBhbHNvIHVzZWQgKHNwYWNlLWVmZmljaWVudGx5KSBvbgogdmFyaW91cyByZWFkLW9ubHkgbWVkaWEsIGxpa2UgKEUpRVBST00gZGlza3MgaWYgc29tZW9uZSB3aWxsIGhhdmUgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ViaWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CmluZGV4IDEyZmVkYjcuLmQ3YjEzYjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CkBAIC04MiwxMiArODIsMTIgQEAKIGJ1bGtfcmVhZAkJcmVhZCBtb3JlIGluIG9uZSBnbyB0byB0YWtlIGFkdmFudGFnZSBvZiBmbGFzaAogCQkJbWVkaWEgdGhhdCByZWFkIGZhc3RlciBzZXF1ZW50aWFsbHkKIG5vX2J1bGtfcmVhZCAoKikJZG8gbm90IGJ1bGstcmVhZAotbm9fY2hrX2RhdGFfY3JjCQlza2lwIGNoZWNraW5nIG9mIENSQ3Mgb24gZGF0YSBub2RlcyBpbiBvcmRlciB0bworbm9fY2hrX2RhdGFfY3JjICgqKQlza2lwIGNoZWNraW5nIG9mIENSQ3Mgb24gZGF0YSBub2RlcyBpbiBvcmRlciB0bwogCQkJaW1wcm92ZSByZWFkIHBlcmZvcm1hbmNlLiBVc2UgdGhpcyBvcHRpb24gb25seQogCQkJaWYgdGhlIGZsYXNoIG1lZGlhIGlzIGhpZ2hseSByZWxpYWJsZS4gVGhlIGVmZmVjdAogCQkJb2YgdGhpcyBvcHRpb24gaXMgdGhhdCBjb3JydXB0aW9uIG9mIHRoZSBjb250ZW50cwogCQkJb2YgYSBmaWxlIGNhbiBnbyB1bm5vdGljZWQuCi1jaGtfZGF0YV9jcmMgKCopCWRvIG5vdCBza2lwIGNoZWNraW5nIENSQ3Mgb24gZGF0YSBub2RlcworY2hrX2RhdGFfY3JjCQlkbyBub3Qgc2tpcCBjaGVja2luZyBDUkNzIG9uIGRhdGEgbm9kZXMKIGNvbXByPW5vbmUgICAgICAgICAgICAgIG92ZXJyaWRlIGRlZmF1bHQgY29tcHJlc3NvciBhbmQgc2V0IGl0IHRvICJub25lIgogY29tcHI9bHpvICAgICAgICAgICAgICAgb3ZlcnJpZGUgZGVmYXVsdCBjb21wcmVzc29yIGFuZCBzZXQgaXQgdG8gImx6byIKIGNvbXByPXpsaWIgICAgICAgICAgICAgIG92ZXJyaWRlIGRlZmF1bHQgY29tcHJlc3NvciBhbmQgc2V0IGl0IHRvICJ6bGliIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CmluZGV4IGVmMDcxNGEuLjMwNmYwYWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKQEAgLTg3Myw3ICs4NzMsNyBAQAogCXZvaWQgKCpkX2lwdXQpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwogCWNoYXIgKigqZF9kbmFtZSkoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIGludCk7CiAJc3RydWN0IHZmc21vdW50ICooKmRfYXV0b21vdW50KShzdHJ1Y3QgcGF0aCAqKTsKLQlpbnQgKCpkX21hbmFnZSkoc3RydWN0IGRlbnRyeSAqLCBib29sLCBib29sKTsKKwlpbnQgKCpkX21hbmFnZSkoc3RydWN0IGRlbnRyeSAqLCBib29sKTsKIH07CiAKICAgZF9yZXZhbGlkYXRlOiBjYWxsZWQgd2hlbiB0aGUgVkZTIG5lZWRzIHRvIHJldmFsaWRhdGUgYSBkZW50cnkuIFRoaXMKQEAgLTk2OSwxMCArOTY5LDYgQEAKIAltb3VudGVkIG9uIGl0IGFuZCBub3QgdG8gY2hlY2sgdGhlIGF1dG9tb3VudCBmbGFnLiAgQW55IG90aGVyIGVycm9yCiAJY29kZSB3aWxsIGFib3J0IHBhdGh3YWxrIGNvbXBsZXRlbHkuCiAKLQlJZiB0aGUgJ21vdW50aW5nX2hlcmUnIHBhcmFtZXRlciBpcyB0cnVlLCB0aGVuIG5hbWVzcGFjZV9zZW0gaXMgYmVpbmcKLQloZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHRoZSBmdW5jdGlvbiBzaG91bGQgbm90IGluaXRpYXRlIGFueSBtb3VudHMgb3IKLQl1bm1vdW50cyB0aGF0IGl0IHdpbGwgdGhlbiB3YWl0IGZvci4KLQogCUlmIHRoZSAncmN1X3dhbGsnIHBhcmFtZXRlciBpcyB0cnVlLCB0aGVuIHRoZSBjYWxsZXIgaXMgZG9pbmcgYQogCXBhdGh3YWxrIGluIFJDVS13YWxrIG1vZGUuICBTbGVlcGluZyBpcyBub3QgcGVybWl0dGVkIGluIHRoaXMgbW9kZSwKIAlhbmQgdGhlIGNhbGxlciBjYW4gYmUgYXNrZWQgdG8gbGVhdmUgaXQgYW5kIGNhbGwgYWdhaW4gYnkgcmV0dXJpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLWRlbGF5ZWQtbG9nZ2luZy1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMtZGVsYXllZC1sb2dnaW5nLWRlc2lnbi50eHQKaW5kZXggNzQ0NWJmMy4uNTI4MmUzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMtZGVsYXllZC1sb2dnaW5nLWRlc2lnbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMtZGVsYXllZC1sb2dnaW5nLWRlc2lnbi50eHQKQEAgLTc5MSwxMCArNzkxLDMgQEAKIGJlIGFibGUgdG8gc3dhcCBtZXRob2RzIGF1dG9tYXRpY2FsbHkgYW5kIHRyYW5zcGFyZW50bHkgZGVwZW5kaW5nIG9uIGxvYWQKIGNoYXJhY3RlcmlzdGljcywgYnV0IHRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgaWYgZGVsYXllZCBsb2dnaW5nIHdvcmtzIGFzCiBkZXNpZ25lZC4KLQotUm9hZG1hcDoKLQotMi42LjM5IFN3aXRjaCBkZWZhdWx0IG1vdW50IG9wdGlvbiB0byB1c2UgZGVsYXllZCBsb2dnaW5nCi0JPT4gc2hvdWxkIGJlIHJvdWdobHkgMTIgbW9udGhzIGFmdGVyIGluaXRpYWwgbWVyZ2UKLQk9PiBlbm91Z2ggdGltZSB0byBzaGFrZSBvdXQgcmVtYWluaW5nIHByb2JsZW1zIGJlZm9yZSBuZXh0IHJvdW5kIG9mCi0JICAgZW50ZXJwcmlzZSBkaXN0cm8ga2VybmVsIHJlYmFzZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWRzMTAxNSBiL0RvY3VtZW50YXRpb24vaHdtb24vYWRzMTAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmZlOWMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZHMxMDE1CkBAIC0wLDAgKzEsNzIgQEAKK0tlcm5lbCBkcml2ZXIgYWRzMTAxNQorPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBUZXhhcyBJbnN0cnVtZW50cyBBRFMxMDE1CisgICAgUHJlZml4OiAnYWRzMTAxNScKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgd2Vic2l0ZSA6CisgICAgICAgICAgICAgICBodHRwOi8vZm9jdXMudGkuY29tL2xpdC9kcy9zeW1saW5rL2FkczEwMTUucGRmCisKK0F1dGhvcnM6CisgICAgICAgIERpcmsgRWliYWNoLCBHdW50ZXJtYW5uICYgRHJ1bmNrIEdtYkggPGVpYmFjaEBnZHN5cy5kZT4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzIEFEUzEwMTUuCisKK1RoaXMgZGV2aWNlIGlzIGEgMTItYml0IEEtRCBjb252ZXJ0ZXIgd2l0aCA0IGlucHV0cy4KKworVGhlIGlucHV0cyBjYW4gYmUgdXNlZCBzaW5nbGUgZW5kZWQgb3IgaW4gY2VydGFpbiBkaWZmZXJlbnRpYWwgY29tYmluYXRpb25zLgorCitUaGUgaW5wdXRzIGNhbiBiZSBtYWRlIGF2YWlsYWJsZSBieSA4IHN5c2ZzIGlucHV0IGZpbGVzIGluMF9pbnB1dCAtIGluN19pbnB1dDoKK2luMDogVm9sdGFnZSBvdmVyIEFJTjAgYW5kIEFJTjEuCitpbjE6IFZvbHRhZ2Ugb3ZlciBBSU4wIGFuZCBBSU4zLgoraW4yOiBWb2x0YWdlIG92ZXIgQUlOMSBhbmQgQUlOMy4KK2luMzogVm9sdGFnZSBvdmVyIEFJTjIgYW5kIEFJTjMuCitpbjQ6IFZvbHRhZ2Ugb3ZlciBBSU4wIGFuZCBHTkQuCitpbjU6IFZvbHRhZ2Ugb3ZlciBBSU4xIGFuZCBHTkQuCitpbjY6IFZvbHRhZ2Ugb3ZlciBBSU4yIGFuZCBHTkQuCitpbjc6IFZvbHRhZ2Ugb3ZlciBBSU4zIGFuZCBHTkQuCisKK1doaWNoIGlucHV0cyBhcmUgYXZhaWxhYmxlIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHBsYXRmb3JtIGRhdGEgb3IgZGV2aWNldHJlZS4KKworQnkgZGVmYXVsdCBhbGwgaW5wdXRzIGFyZSBleHBvcnRlZC4KKworUGxhdGZvcm0gRGF0YQorLS0tLS0tLS0tLS0tLQorCitJbiBsaW51eC9pMmMvYWRzMTAxNS5oIHBsYXRmb3JtIGRhdGEgaXMgZGVmaW5lZCwgY2hhbm5lbF9kYXRhIGNvbnRhaW5zCitjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSB1c2VkIGlucHV0IGNvbWJpbmF0aW9uczoKKy0gcGdhIGlzIHRoZSBwcm9ncmFtbWFibGUgZ2FpbiBhbXBsaWZpZXIgKHZhbHVlcyBhcmUgZnVsbCBzY2FsZSkKKyAgMDogKy8tIDYuMTQ0IFYKKyAgMTogKy8tIDQuMDk2IFYKKyAgMjogKy8tIDIuMDQ4IFYKKyAgMzogKy8tIDEuMDI0IFYKKyAgNDogKy8tIDAuNTEyIFYKKyAgNTogKy8tIDAuMjU2IFYKKy0gZGF0YV9yYXRlIGluIHNhbXBsZXMgcGVyIHNlY29uZAorICAwOiAxMjgKKyAgMTogMjUwCisgIDI6IDQ5MAorICAzOiA5MjAKKyAgNDogMTYwMAorICA1OiAyNDAwCisgIDY6IDMzMDAKKworRXhhbXBsZToKK3N0cnVjdCBhZHMxMDE1X3BsYXRmb3JtX2RhdGEgZGF0YSA9IHsKKwkuY2hhbm5lbF9kYXRhID0geworCQlbMl0gPSB7IC5lbmFibGVkID0gdHJ1ZSwgLnBnYSA9IDEsIC5kYXRhX3JhdGUgPSAwIH0sCisJCVs0XSA9IHsgLmVuYWJsZWQgPSB0cnVlLCAucGdhID0gNCwgLmRhdGFfcmF0ZSA9IDUgfSwKKwl9Cit9OworCitJbiB0aGlzIGNhc2Ugb25seSBpbjJfaW5wdXQgKEZTICsvLSA0LjA5NiBWLCAxMjggU1BTKSBhbmQgaW40X2lucHV0CisoRlMgKy8tIDAuNTEyIFYsIDI0MDAgU1BTKSB3b3VsZCBiZSBjcmVhdGVkLgorCitEZXZpY2V0cmVlCistLS0tLS0tLS0tCisKK0NvbmZpZ3VyYXRpb24gaXMgYWxzbyBwb3NzaWJsZSB2aWEgZGV2aWNldHJlZToKK0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9od21vbi9hZHMxMDE1LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1CmluZGV4IDhlNjM1NmYuLmExNzkwNDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG03NQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtNzUKQEAgLTcsNiArNywxMSBAQAogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0OCAtIDB4NGYKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCiAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS8KKyAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNNzVBCisgICAgUHJlZml4OiAnbG03NWEnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDQ4IC0gMHg0ZgorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tLwogICAqIERhbGxhcyBTZW1pY29uZHVjdG9yIERTNzUKICAgICBQcmVmaXg6ICdsbTc1JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0OCAtIDB4NGYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc2NoNTYyNyBiL0RvY3VtZW50YXRpb24vaHdtb24vc2NoNTYyNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDZhMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zY2g1NjI3CkBAIC0wLDAgKzEsMjIgQEAKK0tlcm5lbCBkcml2ZXIgc2NoNTYyNworPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBTTVNDIFNDSDU2MjcKKyAgICBQcmVmaXg6ICdzY2g1NjI3JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCisgICAgRGF0YXNoZWV0OiBBcHBsaWNhdGlvbiBOb3RlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QKKworQXV0aG9yOiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitTTVNDIFNDSDU2MjcgU3VwZXIgSS9PIGNoaXBzIGluY2x1ZGUgY29tcGxldGUgaGFyZHdhcmUgbW9uaXRvcmluZworY2FwYWJpbGl0aWVzLiBUaGV5IGNhbiBtb25pdG9yIHVwIHRvIDUgdm9sdGFnZXMsIDQgZmFucyBhbmQgOCB0ZW1wZXJhdHVyZXMuCisKK1RoZSBoYXJkd2FyZSBtb25pdG9yaW5nIHBhcnQgb2YgdGhlIFNNU0MgU0NINTYyNyBpcyBhY2Nlc3NlZCBieSB0YWxraW5nCit0aHJvdWdoIGFuIGVtYmVkZGVkIG1pY3JvY29udHJvbGxlci4gQW4gYXBwbGljYXRpb24gbm90ZSBkZXNjcmliaW5nIHRoZQorcHJvdG9jb2wgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgbWljcm9jb250cm9sbGVyIGlzIGF2YWlsYWJsZSB1cG9uCityZXF1ZXN0LiBQbGVhc2UgbWFpbCBtZSBpZiB5b3Ugd2FudCBhIGNvcHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5NSBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTYwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5NQpAQCAtMCwwICsxLDEyNyBAQAorS2VybmVsIGRyaXZlciB3ODM3OTUKKz09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBXaW5ib25kL051dm90b24gVzgzNzk1RworICAgIFByZWZpeDogJ3c4Mzc5NWcnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJjIC0gMHgyZgorICAgIERhdGFzaGVldDogQXZhaWxhYmxlIGZvciBkb3dubG9hZCBvbiBudXZvdG9uLmNvbQorICAqIFdpbmJvbmQvTnV2b3RvbiBXODM3OTVBREcKKyAgICBQcmVmaXg6ICd3ODM3OTVhZGcnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJjIC0gMHgyZgorICAgIERhdGFzaGVldDogQXZhaWxhYmxlIGZvciBkb3dubG9hZCBvbiBudXZvdG9uLmNvbQorCitBdXRob3JzOgorICAgIFdlaSBTb25nIChOdXZvdG9uKQorICAgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorCisKK1BpbiBtYXBwaW5nCistLS0tLS0tLS0tLQorCitIZXJlIGlzIGEgc3VtbWFyeSBvZiB0aGUgcGluIG1hcHBpbmcgZm9yIHRoZSBXODM3OTVHIGFuZCBXODM3OTVBREcuCitUaGlzIGNhbiBiZSB1c2VmdWwgdG8gY29udmVydCBkYXRhIHByb3ZpZGVkIGJ5IGJvYXJkIG1hbnVmYWN0dXJlcnMKK2ludG8gd29ya2luZyBsaWJzZW5zb3JzIGNvbmZpZ3VyYXRpb24gc3RhdGVtZW50cy4KKworICAgIFc4Mzc5NUcJCQl8CisgIFBpbgl8IE5hbWUJCQl8IFJlZ2lzdGVyCXwgU3lzZnMgYXR0cmlidXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIDEzCXwgVlNFTjEgKFZDT1JFMSkJfCAxMGgJCXwgaW4wCisgICAxNAl8IFZTRU4yIChWQ09SRTIpCXwgMTFoCQl8IGluMQorICAgMTUJfCBWU0VOMyAoVkNPUkUzKQl8IDEyaAkJfCBpbjIKKyAgIDE2CXwgVlNFTjQJCQl8IDEzaAkJfCBpbjMKKyAgIDE3CXwgVlNFTjUJCQl8IDE0aAkJfCBpbjQKKyAgIDE4CXwgVlNFTjYJCQl8IDE1aAkJfCBpbjUKKyAgIDE5CXwgVlNFTjcJCQl8IDE2aAkJfCBpbjYKKyAgIDIwCXwgVlNFTjgJCQl8IDE3aAkJfCBpbjcKKyAgIDIxCXwgVlNFTjkJCQl8IDE4aAkJfCBpbjgKKyAgIDIyCXwgVlNFTjEwCQl8IDE5aAkJfCBpbjkKKyAgIDIzCXwgVlNFTjExCQl8IDFBaAkJfCBpbjEwCisgICAyOAl8IFZUVAkJCXwgMUJoCQl8IGluMTEKKyAgIDI0CXwgM1ZERAkJCXwgMUNoCQl8IGluMTIKKyAgIDI1CXwgM1ZTQgkJCXwgMURoCQl8IGluMTMKKyAgIDI2CXwgVkJBVAkJCXwgMUVoCQl8IGluMTQKKyAgICAzCXwgVlNFTjEyL1RSNQkJfCAxRmgJCXwgaW4xNS90ZW1wNQorICAgIDQJfCBWU0VOMTMvVFI1CQl8IDIwaAkJfCBpbjE2L3RlbXA2CisgIDUvICA2CXwgVkRTRU4xNC9UUjEvVEQxCXwgMjFoCQl8IGluMTcvdGVtcDEKKyAgNy8gIDgJfCBWRFNFTjE1L1RSMi9URDIJfCAyMmgJCXwgaW4xOC90ZW1wMgorICA5LyAxMAl8IFZEU0VOMTYvVFIzL1REMwl8IDIzaAkJfCBpbjE5L3RlbXAzCisgMTEvIDEyCXwgVkRTRU4xNy9UUjQvVEQ0CXwgMjRoCQl8IGluMjAvdGVtcDQKKyAgIDQwCXwgRkFOSU4xCQl8IDJFaAkJfCBmYW4xCisgICA0Mgl8IEZBTklOMgkJfCAyRmgJCXwgZmFuMgorICAgNDQJfCBGQU5JTjMJCXwgMzBoCQl8IGZhbjMKKyAgIDQ2CXwgRkFOSU40CQl8IDMxaAkJfCBmYW40CisgICA0OAl8IEZBTklONQkJfCAzMmgJCXwgZmFuNQorICAgNTAJfCBGQU5JTjYJCXwgMzNoCQl8IGZhbjYKKyAgIDUyCXwgRkFOSU43CQl8IDM0aAkJfCBmYW43CisgICA1NAl8IEZBTklOOAkJfCAzNWgJCXwgZmFuOAorICAgNTcJfCBGQU5JTjkJCXwgMzZoCQl8IGZhbjkKKyAgIDU4CXwgRkFOSU4xMAkJfCAzN2gJCXwgZmFuMTAKKyAgIDU5CXwgRkFOSU4xMQkJfCAzOGgJCXwgZmFuMTEKKyAgIDYwCXwgRkFOSU4xMgkJfCAzOWgJCXwgZmFuMTIKKyAgIDMxCXwgRkFOSU4xMwkJfCAzQWgJCXwgZmFuMTMKKyAgIDM1CXwgRkFOSU4xNAkJfCAzQmgJCXwgZmFuMTQKKyAgIDQxCXwgRkFOQ1RMMQkJfCAxMGggKGJhbmsgMikJfCBwd20xCisgICA0Mwl8IEZBTkNUTDIJCXwgMTFoIChiYW5rIDIpCXwgcHdtMgorICAgNDUJfCBGQU5DVEwzCQl8IDEyaCAoYmFuayAyKQl8IHB3bTMKKyAgIDQ3CXwgRkFOQ1RMNAkJfCAxM2ggKGJhbmsgMikJfCBwd200CisgICA0OQl8IEZBTkNUTDUJCXwgMTRoIChiYW5rIDIpCXwgcHdtNQorICAgNTEJfCBGQU5DVEw2CQl8IDE1aCAoYmFuayAyKQl8IHB3bTYKKyAgIDUzCXwgRkFOQ1RMNwkJfCAxNmggKGJhbmsgMikJfCBwd203CisgICA1NQl8IEZBTkNUTDgJCXwgMTdoIChiYW5rIDIpCXwgcHdtOAorIDI5LyAzMAl8IFBFQ0kvVFNJIChEVFMxKQl8IDI2aAkJfCB0ZW1wNworIDI5LyAzMAl8IFBFQ0kvVFNJIChEVFMyKQl8IDI3aAkJfCB0ZW1wOAorIDI5LyAzMAl8IFBFQ0kvVFNJIChEVFMzKQl8IDI4aAkJfCB0ZW1wOQorIDI5LyAzMAl8IFBFQ0kvVFNJIChEVFM0KQl8IDI5aAkJfCB0ZW1wMTAKKyAyOS8gMzAJfCBQRUNJL1RTSSAoRFRTNSkJfCAyQWgJCXwgdGVtcDExCisgMjkvIDMwCXwgUEVDSS9UU0kgKERUUzYpCXwgMkJoCQl8IHRlbXAxMgorIDI5LyAzMAl8IFBFQ0kvVFNJIChEVFM3KQl8IDJDaAkJfCB0ZW1wMTMKKyAyOS8gMzAJfCBQRUNJL1RTSSAoRFRTOCkJfCAyRGgJCXwgdGVtcDE0CisgICAyNwl8IENBU0VPUEVOIwkJfCA0NmgJCXwgaW50cnVzaW9uMAorCisgICAgVzgzNzk1QURHCQkJfAorICBQaW4JfCBOYW1lCQkJfCBSZWdpc3Rlcgl8IFN5c2ZzIGF0dHJpYnV0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAxMAl8IFZTRU4xIChWQ09SRTEpCXwgMTBoCQl8IGluMAorICAgMTEJfCBWU0VOMiAoVkNPUkUyKQl8IDExaAkJfCBpbjEKKyAgIDEyCXwgVlNFTjMgKFZDT1JFMykJfCAxMmgJCXwgaW4yCisgICAxMwl8IFZTRU40CQkJfCAxM2gJCXwgaW4zCisgICAxNAl8IFZTRU41CQkJfCAxNGgJCXwgaW40CisgICAxNQl8IFZTRU42CQkJfCAxNWgJCXwgaW41CisgICAxNgl8IFZTRU43CQkJfCAxNmgJCXwgaW42CisgICAxNwl8IFZTRU44CQkJfCAxN2gJCXwgaW43CisgICAyMgl8IFZUVAkJCXwgMUJoCQl8IGluMTEKKyAgIDE4CXwgM1ZERAkJCXwgMUNoCQl8IGluMTIKKyAgIDE5CXwgM1ZTQgkJCXwgMURoCQl8IGluMTMKKyAgIDIwCXwgVkJBVAkJCXwgMUVoCQl8IGluMTQKKyAgIDQ4CXwgVlNFTjEyL1RSNQkJfCAxRmgJCXwgaW4xNS90ZW1wNQorICAgIDEJfCBWU0VOMTMvVFI1CQl8IDIwaAkJfCBpbjE2L3RlbXA2CisgIDIvICAzCXwgVkRTRU4xNC9UUjEvVEQxCXwgMjFoCQl8IGluMTcvdGVtcDEKKyAgNC8gIDUJfCBWRFNFTjE1L1RSMi9URDIJfCAyMmgJCXwgaW4xOC90ZW1wMgorICA2LyAgNwl8IFZEU0VOMTYvVFIzL1REMwl8IDIzaAkJfCBpbjE5L3RlbXAzCisgIDgvICA5CXwgVkRTRU4xNy9UUjQvVEQ0CXwgMjRoCQl8IGluMjAvdGVtcDQKKyAgIDMyCXwgRkFOSU4xCQl8IDJFaAkJfCBmYW4xCisgICAzNAl8IEZBTklOMgkJfCAyRmgJCXwgZmFuMgorICAgMzYJfCBGQU5JTjMJCXwgMzBoCQl8IGZhbjMKKyAgIDM3CXwgRkFOSU40CQl8IDMxaAkJfCBmYW40CisgICAzOAl8IEZBTklONQkJfCAzMmgJCXwgZmFuNQorICAgMzkJfCBGQU5JTjYJCXwgMzNoCQl8IGZhbjYKKyAgIDQwCXwgRkFOSU43CQl8IDM0aAkJfCBmYW43CisgICA0MQl8IEZBTklOOAkJfCAzNWgJCXwgZmFuOAorICAgNDMJfCBGQU5JTjkJCXwgMzZoCQl8IGZhbjkKKyAgIDQ0CXwgRkFOSU4xMAkJfCAzN2gJCXwgZmFuMTAKKyAgIDQ1CXwgRkFOSU4xMQkJfCAzOGgJCXwgZmFuMTEKKyAgIDQ2CXwgRkFOSU4xMgkJfCAzOWgJCXwgZmFuMTIKKyAgIDI0CXwgRkFOSU4xMwkJfCAzQWgJCXwgZmFuMTMKKyAgIDI4CXwgRkFOSU4xNAkJfCAzQmgJCXwgZmFuMTQKKyAgIDMzCXwgRkFOQ1RMMQkJfCAxMGggKGJhbmsgMikJfCBwd20xCisgICAzNQl8IEZBTkNUTDIJCXwgMTFoIChiYW5rIDIpCXwgcHdtMgorICAgMjMJfCBQRUNJIChEVFMxKQkJfCAyNmgJCXwgdGVtcDcKKyAgIDIzCXwgUEVDSSAoRFRTMikJCXwgMjdoCQl8IHRlbXA4CisgICAyMwl8IFBFQ0kgKERUUzMpCQl8IDI4aAkJfCB0ZW1wOQorICAgMjMJfCBQRUNJIChEVFM0KQkJfCAyOWgJCXwgdGVtcDEwCisgICAyMwl8IFBFQ0kgKERUUzUpCQl8IDJBaAkJfCB0ZW1wMTEKKyAgIDIzCXwgUEVDSSAoRFRTNikJCXwgMkJoCQl8IHRlbXAxMgorICAgMjMJfCBQRUNJIChEVFM3KQkJfCAyQ2gJCXwgdGVtcDEzCisgICAyMwl8IFBFQ0kgKERUUzgpCQl8IDJEaAkJfCB0ZW1wMTQKKyAgIDIxCXwgQ0FTRU9QRU4jCQl8IDQ2aAkJfCBpbnRydXNpb24wCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3c3BpbmxvY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9od3NwaW5sb2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGNkMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od3NwaW5sb2NrLnR4dApAQCAtMCwwICsxLDI5MyBAQAorSGFyZHdhcmUgU3BpbmxvY2sgRnJhbWV3b3JrCisKKzEuIEludHJvZHVjdGlvbgorCitIYXJkd2FyZSBzcGlubG9jayBtb2R1bGVzIHByb3ZpZGUgaGFyZHdhcmUgYXNzaXN0YW5jZSBmb3Igc3luY2hyb25pemF0aW9uCithbmQgbXV0dWFsIGV4Y2x1c2lvbiBiZXR3ZWVuIGhldGVyb2dlbmVvdXMgcHJvY2Vzc29ycyBhbmQgdGhvc2Ugbm90IG9wZXJhdGluZwordW5kZXIgYSBzaW5nbGUsIHNoYXJlZCBvcGVyYXRpbmcgc3lzdGVtLgorCitGb3IgZXhhbXBsZSwgT01BUDQgaGFzIGR1YWwgQ29ydGV4LUE5LCBkdWFsIENvcnRleC1NMyBhbmQgYSBDNjR4KyBEU1AsCitlYWNoIG9mIHdoaWNoIGlzIHJ1bm5pbmcgYSBkaWZmZXJlbnQgT3BlcmF0aW5nIFN5c3RlbSAodGhlIG1hc3RlciwgQTksCitpcyB1c3VhbGx5IHJ1bm5pbmcgTGludXggYW5kIHRoZSBzbGF2ZSBwcm9jZXNzb3JzLCB0aGUgTTMgYW5kIHRoZSBEU1AsCithcmUgcnVubmluZyBzb21lIGZsYXZvciBvZiBSVE9TKS4KKworQSBnZW5lcmljIGh3c3BpbmxvY2sgZnJhbWV3b3JrIGFsbG93cyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBkcml2ZXJzIHRvIHVzZQordGhlIGh3c3BpbmxvY2sgZGV2aWNlIGluIG9yZGVyIHRvIGFjY2VzcyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2hhcmVkCitiZXR3ZWVuIHJlbW90ZSBwcm9jZXNzb3JzLCB0aGF0IG90aGVyd2lzZSBoYXZlIG5vIGFsdGVybmF0aXZlIG1lY2hhbmlzbQordG8gYWNjb21wbGlzaCBzeW5jaHJvbml6YXRpb24gYW5kIG11dHVhbCBleGNsdXNpb24gb3BlcmF0aW9ucy4KKworVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLCBmb3IgSW50ZXItcHJvY2Vzc29yIGNvbW11bmljYXRpb25zOgorb24gT01BUDQsIGNwdS1pbnRlbnNpdmUgbXVsdGltZWRpYSB0YXNrcyBhcmUgb2ZmbG9hZGVkIGJ5IHRoZSBob3N0IHRvIHRoZQorcmVtb3RlIE0zIGFuZC9vciBDNjR4KyBzbGF2ZSBwcm9jZXNzb3JzIChieSBhbiBJUEMgc3Vic3lzdGVtIGNhbGxlZCBTeXNsaW5rKS4KKworVG8gYWNoaWV2ZSBmYXN0IG1lc3NhZ2UtYmFzZWQgY29tbXVuaWNhdGlvbnMsIGEgbWluaW1hbCBrZXJuZWwgc3VwcG9ydAoraXMgbmVlZGVkIHRvIGRlbGl2ZXIgbWVzc2FnZXMgYXJyaXZpbmcgZnJvbSBhIHJlbW90ZSBwcm9jZXNzb3IgdG8gdGhlCithcHByb3ByaWF0ZSB1c2VyIHByb2Nlc3MuCisKK1RoaXMgY29tbXVuaWNhdGlvbiBpcyBiYXNlZCBvbiBzaW1wbGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaXMgc2hhcmVkIGJldHdlZW4KK3RoZSByZW1vdGUgcHJvY2Vzc29ycywgYW5kIGFjY2VzcyB0byBpdCBpcyBzeW5jaHJvbml6ZWQgdXNpbmcgdGhlIGh3c3BpbmxvY2sKK21vZHVsZSAocmVtb3RlIHByb2Nlc3NvciBkaXJlY3RseSBwbGFjZXMgbmV3IG1lc3NhZ2VzIGluIHRoaXMgc2hhcmVkIGRhdGEKK3N0cnVjdHVyZSkuCisKK0EgY29tbW9uIGh3c3BpbmxvY2sgaW50ZXJmYWNlIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGhhdmUgZ2VuZXJpYywgcGxhdGZvcm0tCitpbmRlcGVuZGVudCwgZHJpdmVycy4KKworMi4gVXNlciBBUEkKKworICBzdHJ1Y3QgaHdzcGlubG9jayAqaHdzcGluX2xvY2tfcmVxdWVzdCh2b2lkKTsKKyAgIC0gZHluYW1pY2FsbHkgYXNzaWduIGFuIGh3c3BpbmxvY2sgYW5kIHJldHVybiBpdHMgYWRkcmVzcywgb3IgTlVMTAorICAgICBpbiBjYXNlIGFuIHVudXNlZCBod3NwaW5sb2NrIGlzbid0IGF2YWlsYWJsZS4gVXNlcnMgb2YgdGhpcworICAgICBBUEkgd2lsbCB1c3VhbGx5IHdhbnQgdG8gY29tbXVuaWNhdGUgdGhlIGxvY2sncyBpZCB0byB0aGUgcmVtb3RlIGNvcmUKKyAgICAgYmVmb3JlIGl0IGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgc3luY2hyb25pemF0aW9uLgorICAgICBDYW4gYmUgY2FsbGVkIGZyb20gYW4gYXRvbWljIGNvbnRleHQgKHRoaXMgZnVuY3Rpb24gd2lsbCBub3Qgc2xlZXApIGJ1dAorICAgICBub3QgZnJvbSB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQuCisKKyAgc3RydWN0IGh3c3BpbmxvY2sgKmh3c3Bpbl9sb2NrX3JlcXVlc3Rfc3BlY2lmaWModW5zaWduZWQgaW50IGlkKTsKKyAgIC0gYXNzaWduIGEgc3BlY2lmaWMgaHdzcGlubG9jayBpZCBhbmQgcmV0dXJuIGl0cyBhZGRyZXNzLCBvciBOVUxMCisgICAgIGlmIHRoYXQgaHdzcGlubG9jayBpcyBhbHJlYWR5IGluIHVzZS4gVXN1YWxseSBib2FyZCBjb2RlIHdpbGwKKyAgICAgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGluIG9yZGVyIHRvIHJlc2VydmUgc3BlY2lmaWMgaHdzcGlubG9jaworICAgICBpZHMgZm9yIHByZWRlZmluZWQgcHVycG9zZXMuCisgICAgIENhbiBiZSBjYWxsZWQgZnJvbSBhbiBhdG9taWMgY29udGV4dCAodGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBzbGVlcCkgYnV0CisgICAgIG5vdCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dC4KKworICBpbnQgaHdzcGluX2xvY2tfZnJlZShzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKTsKKyAgIC0gZnJlZSBhIHByZXZpb3VzbHktYXNzaWduZWQgaHdzcGlubG9jazsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGFuCisgICAgIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiAtRUlOVkFMIGlmIHRoZSBod3NwaW5sb2NrCisgICAgIGlzIGFscmVhZHkgZnJlZSkuCisgICAgIENhbiBiZSBjYWxsZWQgZnJvbSBhbiBhdG9taWMgY29udGV4dCAodGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBzbGVlcCkgYnV0CisgICAgIG5vdCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dC4KKworICBpbnQgaHdzcGluX2xvY2tfdGltZW91dChzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLCB1bnNpZ25lZCBpbnQgdGltZW91dCk7CisgICAtIGxvY2sgYSBwcmV2aW91c2x5LWFzc2lnbmVkIGh3c3BpbmxvY2sgd2l0aCBhIHRpbWVvdXQgbGltaXQgKHNwZWNpZmllZCBpbgorICAgICBtc2VjcykuIElmIHRoZSBod3NwaW5sb2NrIGlzIGFscmVhZHkgdGFrZW4sIHRoZSBmdW5jdGlvbiB3aWxsIGJ1c3kgbG9vcAorICAgICB3YWl0aW5nIGZvciBpdCB0byBiZSByZWxlYXNlZCwgYnV0IGdpdmUgdXAgd2hlbiB0aGUgdGltZW91dCBlbGFwc2VzLgorICAgICBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkIHNvCisgICAgIHRoZSBjYWxsZXIgbXVzdCBub3Qgc2xlZXAsIGFuZCBpcyBhZHZpc2VkIHRvIHJlbGVhc2UgdGhlIGh3c3BpbmxvY2sgYXMKKyAgICAgc29vbiBhcyBwb3NzaWJsZSwgaW4gb3JkZXIgdG8gbWluaW1pemUgcmVtb3RlIGNvcmVzIHBvbGxpbmcgb24gdGhlCisgICAgIGhhcmR3YXJlIGludGVyY29ubmVjdC4KKyAgICAgUmV0dXJucyAwIHdoZW4gc3VjY2Vzc2Z1bCBhbmQgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSBvdGhlcndpc2UgKG1vc3QKKyAgICAgbm90YWJseSAtRVRJTUVET1VUIGlmIHRoZSBod3NwaW5sb2NrIGlzIHN0aWxsIGJ1c3kgYWZ0ZXIgdGltZW91dCBtc2VjcykuCisgICAgIFRoZSBmdW5jdGlvbiB3aWxsIG5ldmVyIHNsZWVwLgorCisgIGludCBod3NwaW5fbG9ja190aW1lb3V0X2lycShzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLCB1bnNpZ25lZCBpbnQgdGltZW91dCk7CisgICAtIGxvY2sgYSBwcmV2aW91c2x5LWFzc2lnbmVkIGh3c3BpbmxvY2sgd2l0aCBhIHRpbWVvdXQgbGltaXQgKHNwZWNpZmllZCBpbgorICAgICBtc2VjcykuIElmIHRoZSBod3NwaW5sb2NrIGlzIGFscmVhZHkgdGFrZW4sIHRoZSBmdW5jdGlvbiB3aWxsIGJ1c3kgbG9vcAorICAgICB3YWl0aW5nIGZvciBpdCB0byBiZSByZWxlYXNlZCwgYnV0IGdpdmUgdXAgd2hlbiB0aGUgdGltZW91dCBlbGFwc2VzLgorICAgICBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBwcmVlbXB0aW9uIGFuZCB0aGUgbG9jYWwKKyAgICAgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNvIHRoZSBjYWxsZXIgbXVzdCBub3Qgc2xlZXAsIGFuZCBpcyBhZHZpc2VkIHRvCisgICAgIHJlbGVhc2UgdGhlIGh3c3BpbmxvY2sgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICAgUmV0dXJucyAwIHdoZW4gc3VjY2Vzc2Z1bCBhbmQgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSBvdGhlcndpc2UgKG1vc3QKKyAgICAgbm90YWJseSAtRVRJTUVET1VUIGlmIHRoZSBod3NwaW5sb2NrIGlzIHN0aWxsIGJ1c3kgYWZ0ZXIgdGltZW91dCBtc2VjcykuCisgICAgIFRoZSBmdW5jdGlvbiB3aWxsIG5ldmVyIHNsZWVwLgorCisgIGludCBod3NwaW5fbG9ja190aW1lb3V0X2lycXNhdmUoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaywgdW5zaWduZWQgaW50IHRvLAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKKyAgIC0gbG9jayBhIHByZXZpb3VzbHktYXNzaWduZWQgaHdzcGlubG9jayB3aXRoIGEgdGltZW91dCBsaW1pdCAoc3BlY2lmaWVkIGluCisgICAgIG1zZWNzKS4gSWYgdGhlIGh3c3BpbmxvY2sgaXMgYWxyZWFkeSB0YWtlbiwgdGhlIGZ1bmN0aW9uIHdpbGwgYnVzeSBsb29wCisgICAgIHdhaXRpbmcgZm9yIGl0IHRvIGJlIHJlbGVhc2VkLCBidXQgZ2l2ZSB1cCB3aGVuIHRoZSB0aW1lb3V0IGVsYXBzZXMuCisgICAgIFVwb24gYSBzdWNjZXNzZnVsIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIHByZWVtcHRpb24gaXMgZGlzYWJsZWQsCisgICAgIGxvY2FsIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGFuZCB0aGVpciBwcmV2aW91cyBzdGF0ZSBpcyBzYXZlZCBhdCB0aGUKKyAgICAgZ2l2ZW4gZmxhZ3MgcGxhY2Vob2xkZXIuIFRoZSBjYWxsZXIgbXVzdCBub3Qgc2xlZXAsIGFuZCBpcyBhZHZpc2VkIHRvCisgICAgIHJlbGVhc2UgdGhlIGh3c3BpbmxvY2sgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICAgUmV0dXJucyAwIHdoZW4gc3VjY2Vzc2Z1bCBhbmQgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSBvdGhlcndpc2UgKG1vc3QKKyAgICAgbm90YWJseSAtRVRJTUVET1VUIGlmIHRoZSBod3NwaW5sb2NrIGlzIHN0aWxsIGJ1c3kgYWZ0ZXIgdGltZW91dCBtc2VjcykuCisgICAgIFRoZSBmdW5jdGlvbiB3aWxsIG5ldmVyIHNsZWVwLgorCisgIGludCBod3NwaW5fdHJ5bG9jayhzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKTsKKyAgIC0gYXR0ZW1wdCB0byBsb2NrIGEgcHJldmlvdXNseS1hc3NpZ25lZCBod3NwaW5sb2NrLCBidXQgaW1tZWRpYXRlbHkgZmFpbCBpZgorICAgICBpdCBpcyBhbHJlYWR5IHRha2VuLgorICAgICBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkIHNvCisgICAgIGNhbGxlciBtdXN0IG5vdCBzbGVlcCwgYW5kIGlzIGFkdmlzZWQgdG8gcmVsZWFzZSB0aGUgaHdzcGlubG9jayBhcyBzb29uIGFzCisgICAgIHBvc3NpYmxlLCBpbiBvcmRlciB0byBtaW5pbWl6ZSByZW1vdGUgY29yZXMgcG9sbGluZyBvbiB0aGUgaGFyZHdhcmUKKyAgICAgaW50ZXJjb25uZWN0LgorICAgICBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSBvdGhlcndpc2UgKG1vc3QKKyAgICAgbm90YWJseSAtRUJVU1kgaWYgdGhlIGh3c3BpbmxvY2sgd2FzIGFscmVhZHkgdGFrZW4pLgorICAgICBUaGUgZnVuY3Rpb24gd2lsbCBuZXZlciBzbGVlcC4KKworICBpbnQgaHdzcGluX3RyeWxvY2tfaXJxKHN0cnVjdCBod3NwaW5sb2NrICpod2xvY2spOworICAgLSBhdHRlbXB0IHRvIGxvY2sgYSBwcmV2aW91c2x5LWFzc2lnbmVkIGh3c3BpbmxvY2ssIGJ1dCBpbW1lZGlhdGVseSBmYWlsIGlmCisgICAgIGl0IGlzIGFscmVhZHkgdGFrZW4uCisgICAgIFVwb24gYSBzdWNjZXNzZnVsIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIHByZWVtcHRpb24gYW5kIHRoZSBsb2NhbAorICAgICBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBzbyBjYWxsZXIgbXVzdCBub3Qgc2xlZXAsIGFuZCBpcyBhZHZpc2VkIHRvCisgICAgIHJlbGVhc2UgdGhlIGh3c3BpbmxvY2sgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUgb3RoZXJ3aXNlIChtb3N0CisgICAgIG5vdGFibHkgLUVCVVNZIGlmIHRoZSBod3NwaW5sb2NrIHdhcyBhbHJlYWR5IHRha2VuKS4KKyAgICAgVGhlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgc2xlZXAuCisKKyAgaW50IGh3c3Bpbl90cnlsb2NrX2lycXNhdmUoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpOworICAgLSBhdHRlbXB0IHRvIGxvY2sgYSBwcmV2aW91c2x5LWFzc2lnbmVkIGh3c3BpbmxvY2ssIGJ1dCBpbW1lZGlhdGVseSBmYWlsIGlmCisgICAgIGl0IGlzIGFscmVhZHkgdGFrZW4uCisgICAgIFVwb24gYSBzdWNjZXNzZnVsIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIHByZWVtcHRpb24gaXMgZGlzYWJsZWQsCisgICAgIHRoZSBsb2NhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhbmQgdGhlaXIgcHJldmlvdXMgc3RhdGUgaXMgc2F2ZWQKKyAgICAgYXQgdGhlIGdpdmVuIGZsYWdzIHBsYWNlaG9sZGVyLiBUaGUgY2FsbGVyIG11c3Qgbm90IHNsZWVwLCBhbmQgaXMgYWR2aXNlZAorICAgICB0byByZWxlYXNlIHRoZSBod3NwaW5sb2NrIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIG90aGVyd2lzZSAobW9zdAorICAgICBub3RhYmx5IC1FQlVTWSBpZiB0aGUgaHdzcGlubG9jayB3YXMgYWxyZWFkeSB0YWtlbikuCisgICAgIFRoZSBmdW5jdGlvbiB3aWxsIG5ldmVyIHNsZWVwLgorCisgIHZvaWQgaHdzcGluX3VubG9jayhzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKTsKKyAgIC0gdW5sb2NrIGEgcHJldmlvdXNseS1sb2NrZWQgaHdzcGlubG9jay4gQWx3YXlzIHN1Y2NlZWQsIGFuZCBjYW4gYmUgY2FsbGVkCisgICAgIGZyb20gYW55IGNvbnRleHQgKHRoZSBmdW5jdGlvbiBuZXZlciBzbGVlcHMpLiBOb3RlOiBjb2RlIHNob3VsZCBfbmV2ZXJfCisgICAgIHVubG9jayBhbiBod3NwaW5sb2NrIHdoaWNoIGlzIGFscmVhZHkgdW5sb2NrZWQgKHRoZXJlIGlzIG5vIHByb3RlY3Rpb24KKyAgICAgYWdhaW5zdCB0aGlzKS4KKworICB2b2lkIGh3c3Bpbl91bmxvY2tfaXJxKHN0cnVjdCBod3NwaW5sb2NrICpod2xvY2spOworICAgLSB1bmxvY2sgYSBwcmV2aW91c2x5LWxvY2tlZCBod3NwaW5sb2NrIGFuZCBlbmFibGUgbG9jYWwgaW50ZXJydXB0cy4KKyAgICAgVGhlIGNhbGxlciBzaG91bGQgX25ldmVyXyB1bmxvY2sgYW4gaHdzcGlubG9jayB3aGljaCBpcyBhbHJlYWR5IHVubG9ja2VkLgorICAgICBEb2luZyBzbyBpcyBjb25zaWRlcmVkIGEgYnVnICh0aGVyZSBpcyBubyBwcm90ZWN0aW9uIGFnYWluc3QgdGhpcykuCisgICAgIFVwb24gYSBzdWNjZXNzZnVsIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIHByZWVtcHRpb24gYW5kIGxvY2FsCisgICAgIGludGVycnVwdHMgYXJlIGVuYWJsZWQuIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciBzbGVlcC4KKworICB2b2lkCisgIGh3c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLCB1bnNpZ25lZCBsb25nICpmbGFncyk7CisgICAtIHVubG9jayBhIHByZXZpb3VzbHktbG9ja2VkIGh3c3BpbmxvY2suCisgICAgIFRoZSBjYWxsZXIgc2hvdWxkIF9uZXZlcl8gdW5sb2NrIGFuIGh3c3BpbmxvY2sgd2hpY2ggaXMgYWxyZWFkeSB1bmxvY2tlZC4KKyAgICAgRG9pbmcgc28gaXMgY29uc2lkZXJlZCBhIGJ1ZyAodGhlcmUgaXMgbm8gcHJvdGVjdGlvbiBhZ2FpbnN0IHRoaXMpLgorICAgICBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBwcmVlbXB0aW9uIGlzIHJlZW5hYmxlZCwKKyAgICAgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0cyBpcyByZXN0b3JlZCB0byB0aGUgc3RhdGUgc2F2ZWQgYXQKKyAgICAgdGhlIGdpdmVuIGZsYWdzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgc2xlZXAuCisKKyAgaW50IGh3c3Bpbl9sb2NrX2dldF9pZChzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKTsKKyAgIC0gcmV0cmlldmUgaWQgbnVtYmVyIG9mIGEgZ2l2ZW4gaHdzcGlubG9jay4gVGhpcyBpcyBuZWVkZWQgd2hlbiBhbgorICAgICBod3NwaW5sb2NrIGlzIGR5bmFtaWNhbGx5IGFzc2lnbmVkOiBiZWZvcmUgaXQgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZQorICAgICBtdXR1YWwgZXhjbHVzaW9uIHdpdGggYSByZW1vdGUgY3B1LCB0aGUgaWQgbnVtYmVyIHNob3VsZCBiZSBjb21tdW5pY2F0ZWQKKyAgICAgdG8gdGhlIHJlbW90ZSB0YXNrIHdpdGggd2hpY2ggd2Ugd2FudCB0byBzeW5jaHJvbml6ZS4KKyAgICAgUmV0dXJucyB0aGUgaHdzcGlubG9jayBpZCBudW1iZXIsIG9yIC1FSU5WQUwgaWYgaHdsb2NrIGlzIG51bGwuCisKKzMuIFR5cGljYWwgdXNhZ2UKKworI2luY2x1ZGUgPGxpbnV4L2h3c3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworaW50IGh3c3BpbmxvY2tfZXhhbXBsZTEodm9pZCkKK3sKKwlzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrOworCWludCByZXQ7CisKKwkvKiBkeW5hbWljYWxseSBhc3NpZ24gYSBod3NwaW5sb2NrICovCisJaHdsb2NrID0gaHdzcGluX2xvY2tfcmVxdWVzdCgpOworCWlmICghaHdsb2NrKQorCQkuLi4KKworCWlkID0gaHdzcGluX2xvY2tfZ2V0X2lkKGh3bG9jayk7CisJLyogcHJvYmFibHkgbmVlZCB0byBjb21tdW5pY2F0ZSBpZCB0byBhIHJlbW90ZSBwcm9jZXNzb3Igbm93ICovCisKKwkvKiB0YWtlIHRoZSBsb2NrLCBzcGluIGZvciAxIHNlYyBpZiBpdCdzIGFscmVhZHkgdGFrZW4gKi8KKwlyZXQgPSBod3NwaW5fbG9ja190aW1lb3V0KGh3bG9jaywgMTAwMCk7CisJaWYgKHJldCkKKwkJLi4uCisKKwkvKgorCSAqIHdlIHRvb2sgdGhlIGxvY2ssIGRvIG91ciB0aGluZyBub3csIGJ1dCBkbyBOT1Qgc2xlZXAKKwkgKi8KKworCS8qIHJlbGVhc2UgdGhlIGxvY2sgKi8KKwlod3NwaW5fdW5sb2NrKGh3bG9jayk7CisKKwkvKiBmcmVlIHRoZSBsb2NrICovCisJcmV0ID0gaHdzcGluX2xvY2tfZnJlZShod2xvY2spOworCWlmIChyZXQpCisJCS4uLgorCisJcmV0dXJuIHJldDsKK30KKworaW50IGh3c3BpbmxvY2tfZXhhbXBsZTIodm9pZCkKK3sKKwlzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrOworCWludCByZXQ7CisKKwkvKgorCSAqIGFzc2lnbiBhIHNwZWNpZmljIGh3c3BpbmxvY2sgaWQgLSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgZWFybHkKKwkgKiBieSBib2FyZCBpbml0IGNvZGUuCisJICovCisJaHdsb2NrID0gaHdzcGluX2xvY2tfcmVxdWVzdF9zcGVjaWZpYyhQUkVERUZJTkVEX0xPQ0tfSUQpOworCWlmICghaHdsb2NrKQorCQkuLi4KKworCS8qIHRyeSB0byB0YWtlIGl0LCBidXQgZG9uJ3Qgc3BpbiBvbiBpdCAqLworCXJldCA9IGh3c3Bpbl90cnlsb2NrKGh3bG9jayk7CisJaWYgKCFyZXQpIHsKKwkJcHJfaW5mbygibG9jayBpcyBhbHJlYWR5IHRha2VuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKgorCSAqIHdlIHRvb2sgdGhlIGxvY2ssIGRvIG91ciB0aGluZyBub3csIGJ1dCBkbyBOT1Qgc2xlZXAKKwkgKi8KKworCS8qIHJlbGVhc2UgdGhlIGxvY2sgKi8KKwlod3NwaW5fdW5sb2NrKGh3bG9jayk7CisKKwkvKiBmcmVlIHRoZSBsb2NrICovCisJcmV0ID0gaHdzcGluX2xvY2tfZnJlZShod2xvY2spOworCWlmIChyZXQpCisJCS4uLgorCisJcmV0dXJuIHJldDsKK30KKworCis0LiBBUEkgZm9yIGltcGxlbWVudG9ycworCisgIGludCBod3NwaW5fbG9ja19yZWdpc3RlcihzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKTsKKyAgIC0gdG8gYmUgY2FsbGVkIGZyb20gdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGluCisgICAgIG9yZGVyIHRvIHJlZ2lzdGVyIGEgbmV3IGh3c3BpbmxvY2sgaW5zdGFuY2UuIENhbiBiZSBjYWxsZWQgZnJvbSBhbiBhdG9taWMKKyAgICAgY29udGV4dCAodGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBzbGVlcCkgYnV0IG5vdCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQKKyAgICAgY29udGV4dC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKworICBzdHJ1Y3QgaHdzcGlubG9jayAqaHdzcGluX2xvY2tfdW5yZWdpc3Rlcih1bnNpZ25lZCBpbnQgaWQpOworICAgLSB0byBiZSBjYWxsZWQgZnJvbSB0aGUgdW5kZXJseWluZyB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGluIG9yZGVyCisgICAgIHRvIHVucmVnaXN0ZXIgYW4gZXhpc3RpbmcgKGFuZCB1bnVzZWQpIGh3c3BpbmxvY2sgaW5zdGFuY2UuCisgICAgIENhbiBiZSBjYWxsZWQgZnJvbSBhbiBhdG9taWMgY29udGV4dCAod2lsbCBub3Qgc2xlZXApIGJ1dCBub3QgZnJvbQorICAgICB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQuCisgICAgIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgaHdzcGlubG9jayBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGVycm9yIChlLmcuCisgICAgIGlmIHRoZSBod3NwaW5sb2NrIGlzIHNpbGwgaW4gdXNlKS4KKworNS4gc3RydWN0IGh3c3BpbmxvY2sKKworVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyBhbiBod3NwaW5sb2NrIGluc3RhbmNlLiBJdCBpcyByZWdpc3RlcmVkIGJ5IHRoZQordW5kZXJseWluZyBod3NwaW5sb2NrIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBod3NwaW5fbG9ja19yZWdpc3RlcigpIEFQSS4KKworLyoqCisgKiBzdHJ1Y3QgaHdzcGlubG9jayAtIHZlbmRvci1zcGVjaWZpYyBod3NwaW5sb2NrIGltcGxlbWVudGF0aW9uCisgKgorICogQGRldjogdW5kZXJseWluZyBkZXZpY2UsIHdpbGwgYmUgdXNlZCB3aXRoIHJ1bnRpbWUgUE0gYXBpCisgKiBAb3BzOiB2ZW5kb3Itc3BlY2lmaWMgaHdzcGlubG9jayBoYW5kbGVycworICogQGlkOiBhIGdsb2JhbCwgdW5pcXVlLCBzeXN0ZW0td2lkZSwgaW5kZXggb2YgdGhlIGxvY2suCisgKiBAbG9jazogaW5pdGlhbGl6ZWQgYW5kIHVzZWQgYnkgaHdzcGlubG9jayBjb3JlCisgKiBAb3duZXI6IHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gbW9kdWxlLCB1c2VkIHRvIG1haW50YWluIG1vZHVsZSByZWYgY291bnQKKyAqLworc3RydWN0IGh3c3BpbmxvY2sgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwljb25zdCBzdHJ1Y3QgaHdzcGlubG9ja19vcHMgKm9wczsKKwlpbnQgaWQ7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworVGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gaXMgcmVzcG9uc2libGUgdG8gYXNzaWduIHRoZSBkZXYsIG9wcywgaWQgYW5kCitvd25lciBtZW1iZXJzLiBUaGUgbG9jayBtZW1iZXIsIE9UT0gsIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkIGJ5IHRoZSBod3NwaW5sb2NrCitjb3JlLgorCis2LiBJbXBsZW1lbnRhdGlvbiBjYWxsYmFja3MKKworVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhbGxiYWNrcyBkZWZpbmVkIGluICdzdHJ1Y3QgaHdzcGlubG9ja19vcHMnOgorCitzdHJ1Y3QgaHdzcGlubG9ja19vcHMgeworCWludCAoKnRyeWxvY2spKHN0cnVjdCBod3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqdW5sb2NrKShzdHJ1Y3QgaHdzcGlubG9jayAqbG9jayk7CisJdm9pZCAoKnJlbGF4KShzdHJ1Y3QgaHdzcGlubG9jayAqbG9jayk7Cit9OworCitUaGUgZmlyc3QgdHdvIGNhbGxiYWNrcyBhcmUgbWFuZGF0b3J5OgorCitUaGUgLT50cnlsb2NrKCkgY2FsbGJhY2sgc2hvdWxkIG1ha2UgYSBzaW5nbGUgYXR0ZW1wdCB0byB0YWtlIHRoZSBsb2NrLCBhbmQKK3JldHVybiAwIG9uIGZhaWx1cmUgYW5kIDEgb24gc3VjY2Vzcy4gVGhpcyBjYWxsYmFjayBtYXkgX25vdF8gc2xlZXAuCisKK1RoZSAtPnVubG9jaygpIGNhbGxiYWNrIHJlbGVhc2VzIHRoZSBsb2NrLiBJdCBhbHdheXMgc3VjY2VlZCwgYW5kIGl0LCB0b28sCittYXkgX25vdF8gc2xlZXAuCisKK1RoZSAtPnJlbGF4KCkgY2FsbGJhY2sgaXMgb3B0aW9uYWwuIEl0IGlzIGNhbGxlZCBieSBod3NwaW5sb2NrIGNvcmUgd2hpbGUKK3NwaW5uaW5nIG9uIGEgbG9jaywgYW5kIGNhbiBiZSB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHRvIGZvcmNlCithIGRlbGF5IGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUgaW52b2NhdGlvbnMgb2YgLT50cnlsb2NrKCkuIEl0IG1heSBfbm90XyBzbGVlcC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtZGlvbGFuLXUyYyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtZGlvbGFuLXUyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGZlNGJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1kaW9sYW4tdTJjCkBAIC0wLDAgKzEsMjYgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWRpb2xhbi11MmMKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIERpb2xhbiBVMkMtMTIgSTJDLVVTQiBhZGFwdGVyCisgICAgRG9jdW1lbnRhdGlvbjoKKwlodHRwOi8vd3d3LmRpb2xhbi5jb20vaTJjL3UyYzEyLmh0bWwKKworQXV0aG9yOiBHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIERpb2xhbiBVMkMtMTIgVVNCLUkyQyBhZGFwdGVyLgorCitUaGUgRGlvbGFuIFUyQy0xMiBJMkMtVVNCIEFkYXB0ZXIgcHJvdmlkZXMgYSBsb3cgY29zdCBzb2x1dGlvbiB0byBjb25uZWN0CithIGNvbXB1dGVyIHRvIEkyQyBzbGF2ZSBkZXZpY2VzIHVzaW5nIGEgVVNCIGludGVyZmFjZS4gSXQgYWxzbyBzdXBwb3J0cworY29ubmVjdGl2aXR5IHRvIFNQSSBkZXZpY2VzLgorCitUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIHRoZSBJMkMgaW50ZXJmYWNlIG9mIFUyQy0xMi4gVGhlIGRyaXZlciBkb2VzIG5vdCB1c2UKK2ludGVycnVwdHMuCisKKworTW9kdWxlIHBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogZnJlcXVlbmN5OiBJMkMgYnVzIGZyZXF1ZW5jeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCmluZGV4IDkzZmU3NmUuLjZkZjY5NzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEKQEAgLTE2LDggKzE2LDkgQEAKICAgKiBJbnRlbCBFUDgwNTc5IChUb2xhcGFpKQogICAqIEludGVsIDgyODAxSkkgKElDSDEwKQogICAqIEludGVsIDUvMzQwMCBTZXJpZXMgKFBDSCkKLSAgKiBJbnRlbCBDb3VnYXIgUG9pbnQgKFBDSCkKKyAgKiBJbnRlbCA2IFNlcmllcyAoUENIKQogICAqIEludGVsIFBhdHNidXJnIChQQ0gpCisgICogSW50ZWwgREg4OXh4Q0MgKFBDSCkKICAgIERhdGFzaGVldHM6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSW50ZWwgd2Vic2l0ZQogCiBPbiBJbnRlbCBQYXRzYnVyZyBhbmQgbGF0ZXIgY2hpcHNldHMsIGJvdGggdGhlIG5vcm1hbCBob3N0IFNNQnVzIGNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBiL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwppbmRleCA4N2RhNDA1Li45ZWRiNzVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkoLi4uKQogCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKDIpOwogCW1lbXNldCgmaTJjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlzdHJsY3B5KGkyY19pbmZvLm5hbWUsICJpc3AxMzAxX3BueCIsIEkyQ19OQU1FX1NJWkUpOworCXN0cmxjcHkoaTJjX2luZm8udHlwZSwgImlzcDEzMDFfcG54IiwgSTJDX05BTUVfU0laRSk7CiAJaXNwMTMwMV9pMmNfY2xpZW50ID0gaTJjX25ld19wcm9iZWRfZGV2aWNlKGkyY19hZGFwLCAmaTJjX2luZm8sCiAJCQkJCQkgICBub3JtYWxfaTJjLCBOVUxMKTsKIAlpMmNfcHV0X2FkYXB0ZXIoaTJjX2FkYXApOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvdXBncmFkaW5nLWNsaWVudHMgYi9Eb2N1bWVudGF0aW9uL2kyYy91cGdyYWRpbmctY2xpZW50cwppbmRleCA5YTQ1ZjliLi5kNjk5MTYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy91cGdyYWRpbmctY2xpZW50cworKysgYi9Eb2N1bWVudGF0aW9uL2kyYy91cGdyYWRpbmctY2xpZW50cwpAQCAtNjEsNyArNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBleGFtcGxlX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBleGFtcGxlX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBleGFtcGxlX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC04MSw3ICs4MSw3IEBACiAJCS5uYW1lCQk9ICJleGFtcGxlIiwKIAl9LAogCS5hdHRhY2hfYWRhcHRlciA9IGV4YW1wbGVfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQJPSBfX2RldmV4aXRfcChleGFtcGxlX2RldGFjaCksCisJLmRldGFjaF9jbGllbnQJPSBleGFtcGxlX2RldGFjaCwKIAkuc3VzcGVuZAk9IGV4YW1wbGVfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGV4YW1wbGVfcmVzdW1lLAogfTsKQEAgLTkzLDcgKzkzLDcgQEAKIFRoZSBuZXcgc3R5bGUgYmluZGluZyBtb2RlbCB3aWxsIGNoZWNrIGFnYWluc3QgYSBsaXN0IG9mIHN1cHBvcnRlZAogZGV2aWNlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBhZGRyZXNzIHN1cHBsaWVkIGJ5IHRoZSBjb2RlIHJlZ2lzdGVyaW5nCiB0aGUgYnVzc2VzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGRyaXZlciAuYXR0YWNoX2FkYXB0ZXIgYW5kCi0uZGV0YWNoX2FkYXB0ZXIgbWV0aG9kcyBjYW4gYmUgcmVtb3ZlZCwgYWxvbmcgd2l0aCB0aGUgYWRkcl9kYXRhLAorLmRldGFjaF9jbGllbnQgbWV0aG9kcyBjYW4gYmUgcmVtb3ZlZCwgYWxvbmcgd2l0aCB0aGUgYWRkcl9kYXRhLAogYXMgZm9sbG93czoKIAogLSBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZXhhbXBsZV9kcml2ZXI7CkBAIC0xMTAsMTQgKzExMCwxNCBAQAogCiAgc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGV4YW1wbGVfZHJpdmVyID0gewogLQkuYXR0YWNoX2FkYXB0ZXIgPSBleGFtcGxlX2F0dGFjaF9hZGFwdGVyLAotLQkuZGV0YWNoX2NsaWVudAk9IF9fZGV2ZXhpdF9wKGV4YW1wbGVfZGV0YWNoKSwKKy0JLmRldGFjaF9jbGllbnQJPSBleGFtcGxlX2RldGFjaCwKICB9CiAKIEFkZCB0aGUgcHJvYmUgYW5kIHJlbW92ZSBtZXRob2RzIHRvIHRoZSBpMmNfZHJpdmVyLCBhcyBzbzoKIAogIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBleGFtcGxlX2RyaXZlciA9IHsKICsJLnByb2JlCQk9IGV4YW1wbGVfcHJvYmUsCi0rCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZXhhbXBsZV9yZW1vdmUpLAorKwkucmVtb3ZlCQk9IGV4YW1wbGVfcmVtb3ZlLAogIH0KIAogQ2hhbmdlIHRoZSBleGFtcGxlX2F0dGFjaCBtZXRob2QgdG8gYWNjZXB0IHRoZSBuZXcgcGFyYW1ldGVycwpAQCAtMTk5LDggKzE5OSw4IEBACiBjYW4gYWxzbyByZW1vdmUgdGhlIHJldCB2YXJpYWJsZSBhcyBpdCBpcyBub3Qgbm90IG5lZWRlZCBmb3IKIGFueSBvZiB0aGUgY29yZSBmdW5jdGlvbnMuCiAKLS0gc3RhdGljIGludCBfX2RldmV4aXQgZXhhbXBsZV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLSsgc3RhdGljIGludCBfX2RldmV4aXQgZXhhbXBsZV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKKy0gc3RhdGljIGludCBleGFtcGxlX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorKyBzdGF0aWMgaW50IGV4YW1wbGVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGV4YW1wbGVfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTI1Myw3ICsyNTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBleGFtcGxlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBleGFtcGxlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBleGFtcGxlX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0yNzUsNyArMjc1LDcgQEAKIAl9LAogCS5pZF90YWJsZQk9IGV4YW1wbGVfaWR0YWJsZSwKIAkucHJvYmUJCT0gZXhhbXBsZV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGV4YW1wbGVfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IGV4YW1wbGVfcmVtb3ZlLAogCS5zdXNwZW5kCT0gZXhhbXBsZV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gZXhhbXBsZV9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CmluZGV4IGFjMjkzZTkuLmU2ODU0M2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKQEAgLTEzMyw2ICsxMzMsNyBAQAogJ0gnCUMwLURGCW5ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgJY29uZmxpY3QhCiAnSCcJQzAtREYJbmV0L2JsdWV0b290aC9jbXRwL2NtdHAuaAljb25mbGljdCEKICdIJwlDMC1ERgluZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oCWNvbmZsaWN0IQorJ0gnCUYxCWxpbnV4L2hpZC1yb2NjYXQuaAk8bWFpbHRvOmVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAnSScJYWxsCWxpbnV4L2lzZG4uaAkJY29uZmxpY3QhCiAnSScJMDAtMEYJZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5oCWNvbmZsaWN0IQogJ0knCTQwLTRGCWxpbnV4L21JU0ROaWYuaAkJY29uZmxpY3QhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9rYnVpbGQudHh0IGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2J1aWxkLnR4dAppbmRleCA0YTk5MDMxLi5mMTQzMWQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9rYnVpbGQudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQKQEAgLTE0Niw3ICsxNDYsNyBAQAogSU5TVEFMTF9NT0RfU1RSSVAsIGlmIGRlZmluZWQsIHdpbGwgY2F1c2UgbW9kdWxlcyB0byBiZQogc3RyaXBwZWQgYWZ0ZXIgdGhleSBhcmUgaW5zdGFsbGVkLiAgSWYgSU5TVEFMTF9NT0RfU1RSSVAgaXMgJzEnLCB0aGVuCiB0aGUgZGVmYXVsdCBvcHRpb24gLS1zdHJpcC1kZWJ1ZyB3aWxsIGJlIHVzZWQuICBPdGhlcndpc2UsCi1JTlNUQUxMX01PRF9TVFJJUCB3aWxsIHVzZWQgYXMgdGhlIG9wdGlvbnMgdG8gdGhlIHN0cmlwIGNvbW1hbmQuCitJTlNUQUxMX01PRF9TVFJJUCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIG9wdGlvbnMgdG8gdGhlIHN0cmlwIGNvbW1hbmQuCiAKIElOU1RBTExfRldfUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5NiwzICsxOTYsOCBAQAogVG8gZ2V0IGFsbCBhdmFpbGFibGUgYXJjaHMgeW91IGNhbiBhbHNvIHNwZWNpZnkgYWxsLiBFLmcuOgogCiAgICAgJCBtYWtlIEFMTFNPVVJDRV9BUkNIUz1hbGwgdGFncworCitLQlVJTERfRU5BQkxFX0VYVFJBX0dDQ19DSEVDS1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiBlbmFibGVkIG92ZXIgdGhlIG1ha2UgY29tbWFuZCBsaW5lIHdpdGggIlc9MSIsIGl0IHR1cm5zIG9uIGFkZGl0aW9uYWwKK2djYyAtVy4uLiBvcHRpb25zIGZvciBtb3JlIGV4dGVuc2l2ZSBidWlsZC10aW1lIGNoZWNraW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQKaW5kZXggODZlM2NkMC4uNWQxNDViYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0CkBAIC0xMzI1LDcgKzEzMjUsOCBAQAogCUlmIHRoaXMgdmFyaWFibGUgaXMgc3BlY2lmaWVkLCB3aWxsIGNhdXNlIG1vZHVsZXMgdG8gYmUgc3RyaXBwZWQKIAlhZnRlciB0aGV5IGFyZSBpbnN0YWxsZWQuICBJZiBJTlNUQUxMX01PRF9TVFJJUCBpcyAnMScsIHRoZW4gdGhlCiAJZGVmYXVsdCBvcHRpb24gLS1zdHJpcC1kZWJ1ZyB3aWxsIGJlIHVzZWQuICBPdGhlcndpc2UsCi0JSU5TVEFMTF9NT0RfU1RSSVAgd2lsbCB1c2VkIGFzIHRoZSBvcHRpb24ocykgdG8gdGhlIHN0cmlwIGNvbW1hbmQuCisJSU5TVEFMTF9NT0RfU1RSSVAgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBvcHRpb24ocykgdG8gdGhlIHN0cmlwCisJY29tbWFuZC4KIAogCiA9PT0gOSBNYWtlZmlsZSBsYW5ndWFnZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA1MzRkYmFmLi5jMzU3YTMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNjI2LDYgKzYyNiwxMCBAQAogCWRpc2FibGU9CVtJUFY2XQogCQkJU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcHY2LnR4dC4KIAorCWRpc2FibGVfZGR3ICAgICBbUFBDL1BTRVJJRVNdCisJCQlEaXNhYmxlIER5bmFtaWMgRE1BIFdpbmRvdyBzdXBwb3J0LiBVc2UgdGhpcyBpZgorCQkJdG8gd29ya2Fyb3VuZCBidWdneSBmaXJtd2FyZS4KKwogCWRpc2FibGVfaXB2Nj0JW0lQVjZdCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYudHh0LgogCkBAIC04NjgsNiArODcyLDEyIEBACiAJCQkgICAgICAgSWYgc3BlY2lmaWVkLCB6L1ZNIElVQ1YgSFZDIGFjY2VwdHMgY29ubmVjdGlvbnMKIAkJCSAgICAgICBmcm9tIGxpc3RlZCB6L1ZNIHVzZXIgSURzIG9ubHkuCiAKKwlrZWVwX2Jvb3Rjb24JW0tOTF0KKwkJCURvIG5vdCB1bnJlZ2lzdGVyIGJvb3QgY29uc29sZSBhdCBzdGFydC4gVGhpcyBpcyBvbmx5CisJCQl1c2VmdWwgZm9yIGRlYnVnZ2luZyB3aGVuIHNvbWV0aGluZyBoYXBwZW5zIGluIHRoZSB3aW5kb3cKKwkJCWJldHdlZW4gdW5yZWdpc3RlcmluZyB0aGUgYm9vdCBjb25zb2xlIGFuZCBpbml0aWFsaXppbmcKKwkJCXRoZSByZWFsIGNvbnNvbGUuCisKIAlpMmNfYnVzPQlbSFddIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGJvYXJkIHNwZWNpZmljIEkyQyBidXMgc3BlZWQKIAkJCSAgICAgb3IgcmVnaXN0ZXIgYW4gYWRkaXRpb25hbCBJMkMgYnVzIHRoYXQgaXMgbm90CiAJCQkgICAgIHJlZ2lzdGVyZWQgZnJvbSBib2FyZCBpbml0aWFsaXphdGlvbiBjb2RlLgpAQCAtMTU5MywxMSArMTYwMywxMiBAQAogCQkJRm9ybWF0OiBbc3RhdGVdWyxyZWdzXVssZGVib3VuY2VdWyxkaWVdCiAKIAlubWlfd2F0Y2hkb2c9CVtLTkwsQlVHUz1YODZdIERlYnVnZ2luZyBmZWF0dXJlcyBmb3IgU01QIGtlcm5lbHMKLQkJCUZvcm1hdDogW3BhbmljLF1bbnVtXQorCQkJRm9ybWF0OiBbcGFuaWMsXVtub3BhbmljLF1bbnVtXQogCQkJVmFsaWQgbnVtOiAwCiAJCQkwIC0gdHVybiBubWlfd2F0Y2hkb2cgb2ZmCiAJCQlXaGVuIHBhbmljIGlzIHNwZWNpZmllZCwgcGFuaWMgd2hlbiBhbiBOTUkgd2F0Y2hkb2cKLQkJCXRpbWVvdXQgb2NjdXJzLgorCQkJdGltZW91dCBvY2N1cnMgKG9yICdub3BhbmljJyB0byBvdmVycmlkZSB0aGUgb3Bwb3NpdGUKKwkJCWRlZmF1bHQpLgogCQkJVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgdXNlIGEgcGFuaWM9Li4uIHRpbWVvdXQgYW5kCiAJCQluZWVkIHRoZSBib3ggcXVpY2tseSB1cCBhZ2Fpbi4KIApAQCAtMTgyMSw2ICsxODMyLDExIEBACiAJCQkJcGVyZm1vbiBvbiBJbnRlbCBDUFVzIGluc3RlYWQgb2YgdGhlCiAJCQkJQ1BVIHNwZWNpZmljIGV2ZW50IHNldC4KIAorCW9vcHM9cGFuaWMJQWx3YXlzIHBhbmljIG9uIG9vcHNlcy4gRGVmYXVsdCBpcyB0byBqdXN0IGtpbGwgdGhlIHByb2Nlc3MsCisJCQlidXQgdGhlcmUgaXMgYSBzbWFsbCBwcm9iYWJpbGl0eSBvZiBkZWFkbG9ja2luZyB0aGUgbWFjaGluZS4KKwkJCVRoaXMgd2lsbCBhbHNvIGNhdXNlIHBhbmljcyBvbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnMuCisJCQlVc2VmdWwgdG9nZXRoZXIgd2l0aCBwYW5pYz0zMCB0byB0cmlnZ2VyIGEgcmVib290LgorCiAJT1NTCQlbSFcsT1NTXQogCQkJU2VlIERvY3VtZW50YXRpb24vc291bmQvb3NzL29zcy1wYXJhbWV0ZXJzLnR4dAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dAppbmRleCBhZDg1Nzk3Li45YmVmNGU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBUaGlzIGlvY3RsIGlzIG9ic29sZXRlIGFuZCBoYXMgYmVlbiByZW1vdmVkLgogCi00LjYgS1ZNX0NSRUFURV9WQ1BVCis0LjcgS1ZNX0NSRUFURV9WQ1BVCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiBhbGwKQEAgLTE3Nyw3ICsxNzcsNyBAQAogVGhpcyBBUEkgYWRkcyBhIHZjcHUgdG8gYSB2aXJ0dWFsIG1hY2hpbmUuICBUaGUgdmNwdSBpZCBpcyBhIHNtYWxsIGludGVnZXIKIGluIHRoZSByYW5nZSBbMCwgbWF4X3ZjcHVzKS4KIAotNC43IEtWTV9HRVRfRElSVFlfTE9HICh2bSBpb2N0bCkKKzQuOCBLVk1fR0VUX0RJUlRZX0xPRyAodm0gaW9jdGwpCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTIwMCw3ICsyMDAsNyBAQAogbWVtb3J5IHNsb3QuICBFbnN1cmUgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgaXMgY2xlYXJlZCB0byBhdm9pZCBwYWRkaW5nCiBpc3N1ZXMuCiAKLTQuOCBLVk1fU0VUX01FTU9SWV9BTElBUworNC45IEtWTV9TRVRfTUVNT1JZX0FMSUFTCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTIxMCw3ICsyMTAsNyBAQAogCiBUaGlzIGlvY3RsIGlzIG9ic29sZXRlIGFuZCBoYXMgYmVlbiByZW1vdmVkLgogCi00LjkgS1ZNX1JVTgorNC4xMCBLVk1fUlVOCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiBhbGwKQEAgLTIyNiw3ICsyMjYsNyBAQAogS1ZNX0dFVF9WQ1BVX01NQVBfU0laRS4gIFRoZSBwYXJhbWV0ZXIgYmxvY2sgaXMgZm9ybWF0dGVkIGFzIGEgJ3N0cnVjdAoga3ZtX3J1bicgKHNlZSBiZWxvdykuCiAKLTQuMTAgS1ZNX0dFVF9SRUdTCis0LjExIEtWTV9HRVRfUkVHUwogCiBDYXBhYmlsaXR5OiBiYXNpYwogQXJjaGl0ZWN0dXJlczogYWxsCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlfX3U2NCByaXAsIHJmbGFnczsKIH07CiAKLTQuMTEgS1ZNX1NFVF9SRUdTCis0LjEyIEtWTV9TRVRfUkVHUwogCiBDYXBhYmlsaXR5OiBiYXNpYwogQXJjaGl0ZWN0dXJlczogYWxsCkBAIC0yNTgsNyArMjU4LDcgQEAKIAogU2VlIEtWTV9HRVRfUkVHUyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlLgogCi00LjEyIEtWTV9HRVRfU1JFR1MKKzQuMTMgS1ZNX0dFVF9TUkVHUwogCiBDYXBhYmlsaXR5OiBiYXNpYwogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC0yODMsNyArMjgzLDcgQEAKIG9uZSBiaXQgbWF5IGJlIHNldC4gIFRoaXMgaW50ZXJydXB0IGhhcyBiZWVuIGFja25vd2xlZGdlZCBieSB0aGUgQVBJQwogYnV0IG5vdCB5ZXQgaW5qZWN0ZWQgaW50byB0aGUgY3B1IGNvcmUuCiAKLTQuMTMgS1ZNX1NFVF9TUkVHUworNC4xNCBLVk1fU0VUX1NSRUdTCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTI5NCw3ICsyOTQsNyBAQAogV3JpdGVzIHNwZWNpYWwgcmVnaXN0ZXJzIGludG8gdGhlIHZjcHUuICBTZWUgS1ZNX0dFVF9TUkVHUyBmb3IgdGhlCiBkYXRhIHN0cnVjdHVyZXMuCiAKLTQuMTQgS1ZNX1RSQU5TTEFURQorNC4xNSBLVk1fVFJBTlNMQVRFCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTMxNyw3ICszMTcsNyBAQAogCV9fdTggIHBhZFs1XTsKIH07CiAKLTQuMTUgS1ZNX0lOVEVSUlVQVAorNC4xNiBLVk1fSU5URVJSVVBUCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiB4ODYsIHBwYwpAQCAtMzY1LDcgKzM2NSw3IEBACiBOb3RlIHRoYXQgYW55IHZhbHVlIGZvciAnaXJxJyBvdGhlciB0aGFuIHRoZSBvbmVzIHN0YXRlZCBhYm92ZSBpcyBpbnZhbGlkCiBhbmQgaW5jdXJzIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCiAKLTQuMTYgS1ZNX0RFQlVHX0dVRVNUCis0LjE3IEtWTV9ERUJVR19HVUVTVAogCiBDYXBhYmlsaXR5OiBiYXNpYwogQXJjaGl0ZWN0dXJlczogbm9uZQpAQCAtMzc1LDcgKzM3NSw3IEBACiAKIFN1cHBvcnQgZm9yIHRoaXMgaGFzIGJlZW4gcmVtb3ZlZC4gIFVzZSBLVk1fU0VUX0dVRVNUX0RFQlVHIGluc3RlYWQuCiAKLTQuMTcgS1ZNX0dFVF9NU1JTCis0LjE4IEtWTV9HRVRfTVNSUwogCiBDYXBhYmlsaXR5OiBiYXNpYwogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC00MDMsNyArNDAzLDcgQEAKIHNpemUgb2YgdGhlIGVudHJpZXMgYXJyYXkpIGFuZCB0aGUgJ2luZGV4JyBtZW1iZXIgb2YgZWFjaCBhcnJheSBlbnRyeS4KIGt2bSB3aWxsIGZpbGwgaW4gdGhlICdkYXRhJyBtZW1iZXIuCiAKLTQuMTggS1ZNX1NFVF9NU1JTCis0LjE5IEtWTV9TRVRfTVNSUwogCiBDYXBhYmlsaXR5OiBiYXNpYwogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC00MTgsNyArNDE4LDcgQEAKIHNpemUgb2YgdGhlIGVudHJpZXMgYXJyYXkpLCBhbmQgdGhlICdpbmRleCcgYW5kICdkYXRhJyBtZW1iZXJzIG9mIGVhY2gKIGFycmF5IGVudHJ5LgogCi00LjE5IEtWTV9TRVRfQ1BVSUQKKzQuMjAgS1ZNX1NFVF9DUFVJRAogCiBDYXBhYmlsaXR5OiBiYXNpYwogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC00NDYsNyArNDQ2LDcgQEAKIAlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5IGVudHJpZXNbMF07CiB9OwogCi00LjIwIEtWTV9TRVRfU0lHTkFMX01BU0sKKzQuMjEgS1ZNX1NFVF9TSUdOQUxfTUFTSwogCiBDYXBhYmlsaXR5OiBiYXNpYwogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC00NjgsNyArNDY4LDcgQEAKIAlfX3U4ICBzaWdzZXRbMF07CiB9OwogCi00LjIxIEtWTV9HRVRfRlBVCis0LjIyIEtWTV9HRVRfRlBVCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCV9fdTMyIHBhZDI7CiB9OwogCi00LjIyIEtWTV9TRVRfRlBVCis0LjIzIEtWTV9TRVRfRlBVCiAKIENhcGFiaWxpdHk6IGJhc2ljCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTUxOCw3ICs1MTgsNyBAQAogCV9fdTMyIHBhZDI7CiB9OwogCi00LjIzIEtWTV9DUkVBVEVfSVJRQ0hJUAorNC4yNCBLVk1fQ1JFQVRFX0lSUUNISVAKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9JUlFDSElQCiBBcmNoaXRlY3R1cmVzOiB4ODYsIGlhNjQKQEAgLTUzMSw3ICs1MzEsNyBAQAogbG9jYWwgQVBJQy4gIElSUSByb3V0aW5nIGZvciBHU0lzIDAtMTUgaXMgc2V0IHRvIGJvdGggUElDIGFuZCBJT0FQSUM7IEdTSSAxNi0yMwogb25seSBnbyB0byB0aGUgSU9BUElDLiAgT24gaWE2NCwgYSBJT1NBUElDIGlzIGNyZWF0ZWQuCiAKLTQuMjQgS1ZNX0lSUV9MSU5FCis0LjI1IEtWTV9JUlFfTElORQogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX0lSUUNISVAKIEFyY2hpdGVjdHVyZXM6IHg4NiwgaWE2NApAQCAtNTUyLDcgKzU1Miw3IEBACiAJX191MzIgbGV2ZWw7ICAgICAgICAgICAvKiAwIG9yIDEgKi8KIH07CiAKLTQuMjUgS1ZNX0dFVF9JUlFDSElQCis0LjI2IEtWTV9HRVRfSVJRQ0hJUAogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX0lSUUNISVAKIEFyY2hpdGVjdHVyZXM6IHg4NiwgaWE2NApAQCAtNTczLDcgKzU3Myw3IEBACiAJfSBjaGlwOwogfTsKIAotNC4yNiBLVk1fU0VUX0lSUUNISVAKKzQuMjcgS1ZNX1NFVF9JUlFDSElQCiAKIENhcGFiaWxpdHk6IEtWTV9DQVBfSVJRQ0hJUAogQXJjaGl0ZWN0dXJlczogeDg2LCBpYTY0CkBAIC01OTQsNyArNTk0LDcgQEAKIAl9IGNoaXA7CiB9OwogCi00LjI3IEtWTV9YRU5fSFZNX0NPTkZJRworNC4yOCBLVk1fWEVOX0hWTV9DT05GSUcKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9YRU5fSFZNCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTYxOCw3ICs2MTgsNyBAQAogCV9fdTggcGFkMlszMF07CiB9OwogCi00LjI3IEtWTV9HRVRfQ0xPQ0sKKzQuMjkgS1ZNX0dFVF9DTE9DSwogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX0FESlVTVF9DTE9DSwogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC02MzYsNyArNjM2LDcgQEAKIAlfX3UzMiBwYWRbOV07CiB9OwogCi00LjI4IEtWTV9TRVRfQ0xPQ0sKKzQuMzAgS1ZNX1NFVF9DTE9DSwogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX0FESlVTVF9DTE9DSwogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC02NTQsNyArNjU0LDcgQEAKIAlfX3UzMiBwYWRbOV07CiB9OwogCi00LjI5IEtWTV9HRVRfVkNQVV9FVkVOVFMKKzQuMzEgS1ZNX0dFVF9WQ1BVX0VWRU5UUwogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX1ZDUFVfRVZFTlRTCiBFeHRlbmRlZCBieTogS1ZNX0NBUF9JTlRSX1NIQURPVwpAQCAtNjkzLDcgKzY5Myw3IEBACiBLVk1fVkNQVUVWRU5UX1ZBTElEX1NIQURPVyBtYXkgYmUgc2V0IGluIHRoZSBmbGFncyBmaWVsZCB0byBzaWduYWwgdGhhdAogaW50ZXJydXB0LnNoYWRvdyBjb250YWlucyBhIHZhbGlkIHN0YXRlLiBPdGhlcndpc2UsIHRoaXMgZmllbGQgaXMgdW5kZWZpbmVkLgogCi00LjMwIEtWTV9TRVRfVkNQVV9FVkVOVFMKKzQuMzIgS1ZNX1NFVF9WQ1BVX0VWRU5UUwogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX1ZDUFVfRVZFTlRTCiBFeHRlbmRlZCBieTogS1ZNX0NBUF9JTlRSX1NIQURPVwpAQCAtNzE5LDcgKzcxOSw3IEBACiB0aGUgZmxhZ3MgZmllbGQgdG8gc2lnbmFsIHRoYXQgaW50ZXJydXB0LnNoYWRvdyBjb250YWlucyBhIHZhbGlkIHN0YXRlIGFuZAogc2hhbGwgYmUgd3JpdHRlbiBpbnRvIHRoZSBWQ1BVLgogCi00LjMyIEtWTV9HRVRfREVCVUdSRUdTCis0LjMzIEtWTV9HRVRfREVCVUdSRUdTCiAKIENhcGFiaWxpdHk6IEtWTV9DQVBfREVCVUdSRUdTCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTczNyw3ICs3MzcsNyBAQAogCV9fdTY0IHJlc2VydmVkWzldOwogfTsKIAotNC4zMyBLVk1fU0VUX0RFQlVHUkVHUworNC4zNCBLVk1fU0VUX0RFQlVHUkVHUwogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX0RFQlVHUkVHUwogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC03NTAsNyArNzUwLDcgQEAKIFNlZSBLVk1fR0VUX0RFQlVHUkVHUyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlLiBUaGUgZmxhZ3MgZmllbGQgaXMgdW51c2VkCiB5ZXQgYW5kIG11c3QgYmUgY2xlYXJlZCBvbiBlbnRyeS4KIAotNC4zNCBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTgorNC4zNSBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTgogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX1VTRVJfTUVNCiBBcmNoaXRlY3R1cmVzOiBhbGwKQEAgLTc5Niw3ICs3OTYsNyBAQAogVGhlIEtWTV9TRVRfTUVNT1JZX1JFR0lPTiBkb2VzIG5vdCBhbGxvdyBmaW5lIGdyYWluZWQgY29udHJvbCBvdmVyIG1lbW9yeQogYWxsb2NhdGlvbiBhbmQgaXMgZGVwcmVjYXRlZC4KIAotNC4zNSBLVk1fU0VUX1RTU19BRERSCis0LjM2IEtWTV9TRVRfVFNTX0FERFIKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9TRVRfVFNTX0FERFIKIEFyY2hpdGVjdHVyZXM6IHg4NgpAQCAtODE0LDcgKzgxNCw3IEBACiBiZWNhdXNlIG9mIGEgcXVpcmsgaW4gdGhlIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uIChzZWUgdGhlIGludGVybmFscwogZG9jdW1lbnRhdGlvbiB3aGVuIGl0IHBvcHMgaW50byBleGlzdGVuY2UpLgogCi00LjM2IEtWTV9FTkFCTEVfQ0FQCis0LjM3IEtWTV9FTkFCTEVfQ0FQCiAKIENhcGFiaWxpdHk6IEtWTV9DQVBfRU5BQkxFX0NBUAogQXJjaGl0ZWN0dXJlczogcHBjCkBAIC04NDksNyArODQ5LDcgQEAKICAgICAgICBfX3U4ICBwYWRbNjRdOwogfTsKIAotNC4zNyBLVk1fR0VUX01QX1NUQVRFCis0LjM4IEtWTV9HRVRfTVBfU1RBVEUKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9NUF9TVEFURQogQXJjaGl0ZWN0dXJlczogeDg2LCBpYTY0CkBAIC04NzksNyArODc5LDcgQEAKIFRoaXMgaW9jdGwgaXMgb25seSB1c2VmdWwgYWZ0ZXIgS1ZNX0NSRUFURV9JUlFDSElQLiAgV2l0aG91dCBhbiBpbi1rZXJuZWwKIGlycWNoaXAsIHRoZSBtdWx0aXByb2Nlc3Npbmcgc3RhdGUgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHVzZXJzcGFjZS4KIAotNC4zOCBLVk1fU0VUX01QX1NUQVRFCis0LjM5IEtWTV9TRVRfTVBfU1RBVEUKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9NUF9TVEFURQogQXJjaGl0ZWN0dXJlczogeDg2LCBpYTY0CkBAIC04OTMsNyArODkzLDcgQEAKIFRoaXMgaW9jdGwgaXMgb25seSB1c2VmdWwgYWZ0ZXIgS1ZNX0NSRUFURV9JUlFDSElQLiAgV2l0aG91dCBhbiBpbi1rZXJuZWwKIGlycWNoaXAsIHRoZSBtdWx0aXByb2Nlc3Npbmcgc3RhdGUgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHVzZXJzcGFjZS4KIAotNC4zOSBLVk1fU0VUX0lERU5USVRZX01BUF9BRERSCis0LjQwIEtWTV9TRVRfSURFTlRJVFlfTUFQX0FERFIKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9TRVRfSURFTlRJVFlfTUFQX0FERFIKIEFyY2hpdGVjdHVyZXM6IHg4NgpAQCAtOTExLDcgKzkxMSw3IEBACiBiZWNhdXNlIG9mIGEgcXVpcmsgaW4gdGhlIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uIChzZWUgdGhlIGludGVybmFscwogZG9jdW1lbnRhdGlvbiB3aGVuIGl0IHBvcHMgaW50byBleGlzdGVuY2UpLgogCi00LjQwIEtWTV9TRVRfQk9PVF9DUFVfSUQKKzQuNDEgS1ZNX1NFVF9CT09UX0NQVV9JRAogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX1NFVF9CT09UX0NQVV9JRAogQXJjaGl0ZWN0dXJlczogeDg2LCBpYTY0CkBAIC05MjMsNyArOTIzLDcgQEAKIGFzIHRoZSB2Y3B1IGlkIGluIEtWTV9DUkVBVEVfVkNQVS4gIElmIHRoaXMgaW9jdGwgaXMgbm90IGNhbGxlZCwgdGhlIGRlZmF1bHQKIGlzIHZjcHUgMC4KIAotNC40MSBLVk1fR0VUX1hTQVZFCis0LjQyIEtWTV9HRVRfWFNBVkUKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9YU0FWRQogQXJjaGl0ZWN0dXJlczogeDg2CkBAIC05MzcsNyArOTM3LDcgQEAKIAogVGhpcyBpb2N0bCB3b3VsZCBjb3B5IGN1cnJlbnQgdmNwdSdzIHhzYXZlIHN0cnVjdCB0byB0aGUgdXNlcnNwYWNlLgogCi00LjQyIEtWTV9TRVRfWFNBVkUKKzQuNDMgS1ZNX1NFVF9YU0FWRQogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX1hTQVZFCiBBcmNoaXRlY3R1cmVzOiB4ODYKQEAgLTk1MSw3ICs5NTEsNyBAQAogCiBUaGlzIGlvY3RsIHdvdWxkIGNvcHkgdXNlcnNwYWNlJ3MgeHNhdmUgc3RydWN0IHRvIHRoZSBrZXJuZWwuCiAKLTQuNDMgS1ZNX0dFVF9YQ1JTCis0LjQ0IEtWTV9HRVRfWENSUwogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX1hDUlMKIEFyY2hpdGVjdHVyZXM6IHg4NgpAQCAtOTc0LDcgKzk3NCw3IEBACiAKIFRoaXMgaW9jdGwgd291bGQgY29weSBjdXJyZW50IHZjcHUncyB4Y3JzIHRvIHRoZSB1c2Vyc3BhY2UuCiAKLTQuNDQgS1ZNX1NFVF9YQ1JTCis0LjQ1IEtWTV9TRVRfWENSUwogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX1hDUlMKIEFyY2hpdGVjdHVyZXM6IHg4NgpAQCAtOTk3LDcgKzk5Nyw3IEBACiAKIFRoaXMgaW9jdGwgd291bGQgc2V0IHZjcHUncyB4Y3IgdG8gdGhlIHZhbHVlIHVzZXJzcGFjZSBzcGVjaWZpZWQuCiAKLTQuNDUgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQKKzQuNDYgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9FWFRfQ1BVSUQKIEFyY2hpdGVjdHVyZXM6IHg4NgpAQCAtMTA2Miw3ICsxMDYyLDcgQEAKICAgIGVheCwgZWJ4LCBlY3gsIGVkeDogdGhlIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY3B1aWQgaW5zdHJ1Y3Rpb24gZm9yCiAgICAgICAgICB0aGlzIGZ1bmN0aW9uL2luZGV4IGNvbWJpbmF0aW9uCiAKLTQuNDYgS1ZNX1BQQ19HRVRfUFZJTkZPCis0LjQ3IEtWTV9QUENfR0VUX1BWSU5GTwogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX1BQQ19HRVRfUFZJTkZPCiBBcmNoaXRlY3R1cmVzOiBwcGMKQEAgLTEwODUsNyArMTA4NSw3IEBACiBJZiBhbnkgYWRkaXRpb25hbCBmaWVsZCBnZXRzIGFkZGVkIHRvIHRoaXMgc3RydWN0dXJlIGxhdGVyIG9uLCBhIGJpdCBmb3IgdGhhdAogYWRkaXRpb25hbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB3aWxsIGJlIHNldCBpbiB0aGUgZmxhZ3MgYml0bWFwLgogCi00LjQ3IEtWTV9BU1NJR05fUENJX0RFVklDRQorNC40OCBLVk1fQVNTSUdOX1BDSV9ERVZJQ0UKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAogQXJjaGl0ZWN0dXJlczogeDg2IGlhNjQKQEAgLTExMTMsNyArMTExMyw3IEBACiAvKiBEZXBlbmRzIG9uIEtWTV9DQVBfSU9NTVUgKi8KICNkZWZpbmUgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VCSgxIDw8IDApCiAKLTQuNDggS1ZNX0RFQVNTSUdOX1BDSV9ERVZJQ0UKKzQuNDkgS1ZNX0RFQVNTSUdOX1BDSV9ERVZJQ0UKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9ERVZJQ0VfREVBU1NJR05NRU5UCiBBcmNoaXRlY3R1cmVzOiB4ODYgaWE2NApAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIFNlZSBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmUuIE9ubHkgYXNzaWduZWRfZGV2X2lkIGlzCiB1c2VkIGluIGt2bV9hc3NpZ25lZF9wY2lfZGV2IHRvIGlkZW50aWZ5IHRoZSBkZXZpY2UuCiAKLTQuNDkgS1ZNX0FTU0lHTl9ERVZfSVJRCis0LjUwIEtWTV9BU1NJR05fREVWX0lSUQogCiBDYXBhYmlsaXR5OiBLVk1fQ0FQX0FTU0lHTl9ERVZfSVJRCiBBcmNoaXRlY3R1cmVzOiB4ODYgaWE2NApAQCAtMTE2NCw3ICsxMTY0LDcgQEAKIEl0IGlzIG5vdCB2YWxpZCB0byBzcGVjaWZ5IG11bHRpcGxlIHR5cGVzIHBlciBob3N0IG9yIGd1ZXN0IElSUS4gSG93ZXZlciwgdGhlCiBJUlEgdHlwZSBvZiBob3N0IGFuZCBndWVzdCBjYW4gZGlmZmVyIG9yIGNhbiBldmVuIGJlIG51bGwuCiAKLTQuNTAgS1ZNX0RFQVNTSUdOX0RFVl9JUlEKKzQuNTEgS1ZNX0RFQVNTSUdOX0RFVl9JUlEKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9BU1NJR05fREVWX0lSUQogQXJjaGl0ZWN0dXJlczogeDg2IGlhNjQKQEAgLTExNzgsNyArMTE3OCw3IEBACiBieSBhc3NpZ25lZF9kZXZfaWQsIGZsYWdzIG11c3QgY29ycmVzcG9uZCB0byB0aGUgSVJRIHR5cGUgc3BlY2lmaWVkIG9uCiBLVk1fQVNTSUdOX0RFVl9JUlEuIFBhcnRpYWwgZGVhc3NpZ25tZW50IG9mIGhvc3Qgb3IgZ3Vlc3QgSVJRIGlzIGFsbG93ZWQuCiAKLTQuNTEgS1ZNX1NFVF9HU0lfUk9VVElORworNC41MiBLVk1fU0VUX0dTSV9ST1VUSU5HCiAKIENhcGFiaWxpdHk6IEtWTV9DQVBfSVJRX1JPVVRJTkcKIEFyY2hpdGVjdHVyZXM6IHg4NiBpYTY0CkBAIC0xMjI2LDcgKzEyMjYsNyBAQAogCV9fdTMyIHBhZDsKIH07CiAKLTQuNTIgS1ZNX0FTU0lHTl9TRVRfTVNJWF9OUgorNC41MyBLVk1fQVNTSUdOX1NFVF9NU0lYX05SCiAKIENhcGFiaWxpdHk6IEtWTV9DQVBfREVWSUNFX01TSVgKIEFyY2hpdGVjdHVyZXM6IHg4NiBpYTY0CkBAIC0xMjQ1LDcgKzEyNDUsNyBAQAogCiAjZGVmaW5lIEtWTV9NQVhfTVNJWF9QRVJfREVWCQkyNTYKIAotNC41MyBLVk1fQVNTSUdOX1NFVF9NU0lYX0VOVFJZCis0LjU0IEtWTV9BU1NJR05fU0VUX01TSVhfRU5UUlkKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9ERVZJQ0VfTVNJWAogQXJjaGl0ZWN0dXJlczogeDg2IGlhNjQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vaHBmYWxsLmMgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvaHBmYWxsLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaHdtb24vaHBmYWxsLmMKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vbGFwdG9wcy9ocGZhbGwuYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9saXMzbHYwMmQKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2xpczNsdjAyZAppbmRleCAwNjUzNGYyLi5mMWE0ZWM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xpczNsdjAyZAorKysgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9saXMzbHYwMmQKQEAgLTE3LDggKzE3LDggQEAKIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBhY2NlbGVyb21ldGVyIGZvdW5kIGluIHZhcmlvdXMgSFAgbGFwdG9wcwogc3BvcnRpbmcgdGhlIGZlYXR1cmUgb2ZmaWNpYWxseSBjYWxsZWQgIkhQIE1vYmlsZSBEYXRhIFByb3RlY3Rpb24gU3lzdGVtIDNEIiBvcgogIkhQIDNEIERyaXZlR3VhcmQiLiBJdCBkZXRlY3RzIGF1dG9tYXRpY2FsbHkgbGFwdG9wcyB3aXRoIHRoaXMgc2Vuc29yLiBLbm93bgotbW9kZWxzIChmdWxsIGxpc3QgY2FuIGJlIGZvdW5kIGluIGRyaXZlcnMvaHdtb24vaHBfYWNjZWwuYykgd2lsbCBoYXZlIHRoZWlyCi1heGlzIGF1dG9tYXRpY2FsbHkgb3JpZW50ZWQgb24gc3RhbmRhcmQgd2F5IChlZzogeW91IGNhbiBkaXJlY3RseSBwbGF5Cittb2RlbHMgKGZ1bGwgbGlzdCBjYW4gYmUgZm91bmQgaW4gZHJpdmVycy9wbGF0Zm9ybS94ODYvaHBfYWNjZWwuYykgd2lsbCBoYXZlCit0aGVpciBheGlzIGF1dG9tYXRpY2FsbHkgb3JpZW50ZWQgb24gc3RhbmRhcmQgd2F5IChlZzogeW91IGNhbiBkaXJlY3RseSBwbGF5CiBuZXZlcmJhbGwpLiBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYQogL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4gUmVwb3J0ZWQgdmFsdWVzIGFyZSBzY2FsZWQKIHRvIG1nIHZhbHVlcyAoMS8xMDAwdGggb2YgZWFydGggZ3Jhdml0eSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9zcGVhci1wY2llLWdhZGdldC50eHQgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9zcGVhci1wY2llLWdhZGdldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjMTNlZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL3NwZWFyLXBjaWUtZ2FkZ2V0LnR4dApAQCAtMCwwICsxLDEzMCBAQAorU3BlYXIgUENJZSBHYWRnZXQgRHJpdmVyOgorCitBdXRob3IKKz09PT09PT09PT09PT0KK1ByYXR5dXNoIEFuYW5kIChwcmF0eXVzaC5hbmFuZEBzdC5jb20pCisKK0xvY2F0aW9uCis9PT09PT09PT09PT0KK2RyaXZlci9taXNjL3NwZWFyMTN4eF9wY2llX2dhZGdldC5jCisKK1N1cHBvcnRlZCBDaGlwOgorPT09PT09PT09PT09PT09PT09PQorU1BFQXIxMzAwCitTUEVBcjEzMTAKKworTWVudWNvbmZpZyBvcHRpb246Cis9PT09PT09PT09PT09PT09PT09PT09PT09PQorRGV2aWNlIERyaXZlcnMKKwlNaXNjIGRldmljZXMKKwkJUENJZSBnYWRnZXQgc3VwcG9ydCBmb3IgU1BFQXIxM1hYIHBsYXRmb3JtCitwdXJwb3NlCis9PT09PT09PT09PQorVGhpcyBkcml2ZXIgaGFzIHNldmVyYWwgbm9kZXMgd2hpY2ggY2FuIGJlIHJlYWQvd3JpdHRlbiBieSBjb25maWdmcyBpbnRlcmZhY2UuCitJdHMgbWFpbiBwdXJwb3NlIGlzIHRvIGNvbmZpZ3VyZSBzZWxlY3RlZCBkdWFsIG1vZGUgUENJZSBjb250cm9sbGVyIGFzIGRldmljZQorYW5kIHRoZW4gcHJvZ3JhbSBpdHMgdmFyaW91cyByZWdpc3RlcnMgdG8gY29uZmlndXJlIGl0IGFzIGEgcGFydGljdWxhciBkZXZpY2UKK3R5cGUuIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHRvIHNob3cgc3BlYXIncyBQQ0llIGRldmljZSBjYXBhYmlsaXR5LgorCitEZXNjcmlwdGlvbiBvZiBkaWZmZXJlbnQgbm9kZXM6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcmVhZCBiZWhhdmlvciBvZiBub2RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGluayAJCTpnaXZlcyBsdHNzbSBzdGF0dXMuCitpbnRfdHlwZSAJOnR5cGUgb2Ygc3VwcG9ydGVkIGludGVycnVwdAorbm9fb2ZfbXNpIAk6emVybyBpZiBNU0kgaXMgbm90IGVuYWJsZWQgYnkgaG9zdC4gQSBwb3NpdGl2ZSB2YWx1ZSBpcyB0aGUKKwkJbnVtYmVyIG9mIE1TSSB2ZWN0b3IgZ3JhbnRlZC4KK3ZlbmRvcl9pZAk6cmV0dXJucyBwcm9ncmFtbWVkIHZlbmRvciBpZCAoaGV4KQorZGV2aWNlX2lkCTpyZXR1cm5zIHByb2dyYW1tZWQgZGV2aWNlIGlkKGhleCkKK2JhcjBfc2l6ZToJOnJldHVybnMgc2l6ZSBvZiBiYXIwIGluIGhleC4KK2JhcjBfYWRkcmVzcwk6cmV0dXJucyBhZGRyZXNzIG9mIGJhcjAgbWFwcGVkIGFyZWEgaW4gaGV4LgorYmFyMF9yd19vZmZzZXQJOnJldHVybnMgb2Zmc2V0IG9mIGJhcjAgZm9yIHdoaWNoIGJhcjBfZGF0YSB3aWxsIHJldHVybiB2YWx1ZS4KK2JhcjBfZGF0YQk6cmV0dXJucyBkYXRhIGF0IGJhcjBfcndfb2Zmc2V0LgorCit3cml0ZSBiZWhhdmlvciBvZiBub2RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGluayAJCTp3cml0ZSBVUCB0byBlbmFibGUgbHRzbW0gRE9XTiB0byBkaXNhYmxlCitpbnRfdHlwZQk6d3JpdGUgaW50ZXJydXB0IHR5cGUgdG8gYmUgY29uZmlndXJlZCBhbmQgKGludF90eXBlIGNvdWxkIGJlCisJCUlOVEEsIE1TSSBvciBOT19JTlQpLiBTZWxlY3QgTVNJIG9ubHkgd2hlbiB5b3UgaGF2ZSBwcm9ncmFtbWVkCisJCW5vX29mX21zaSBub2RlLgorbm9fb2ZfbXNpCTpudW1iZXIgb2YgTVNJIHZlY3RvciBuZWVkZWQuCitpbnRhCQk6d3JpdGUgMSB0byBhc3NlcnQgSU5UQSBhbmQgMCB0byBkZS1hc3NlcnQuCitzZW5kX21zaQk6d3JpdGUgTVNJIHZlY3RvciB0byBiZSBzZW50LgordmVuZG9yX2lkCTp3cml0ZSB2ZW5kb3IgaWQoaGV4KSB0byBiZSBwcm9ncmFtbWVkLgorZGV2aWNlX2lkCTp3cml0ZSBkZXZpY2UgaWQoaGV4KSB0byBiZSBwcm9ncmFtbWVkLgorYmFyMF9zaXplCTp3cml0ZSBzaXplIG9mIGJhcjAgaW4gaGV4LiBkZWZhdWx0IGJhcjAgc2l6ZSBpcyAxMDAwIChoZXgpCisJCWJ5dGVzLgorYmFyMF9hZGRyZXNzCTp3cml0ZQlhZGRyZXNzIG9mIGJhcjAgbWFwcGVkIGFyZWEgaW4gaGV4LiAoZGVmYXVsdCBtYXBwaW5nIG9mCisJCWJhcjAgaXMgU1lTUkFNMShFMDgwMDAwMCkuIEFsd2F5cyBwcm9ncmFtIGJhciBzaXplIGJlZm9yZSBiYXIKKwkJYWRkcmVzcy4gS2VybmVsIG1pZ2h0IG1vZGlmeSBiYXIgc2l6ZSBhbmQgYWRkcmVzcyBmb3IgYWxpZ25tZW50LCBzbworCQlyZWFkIGJhY2sgYmFyIHNpemUgYW5kIGFkZHJlc3MgYWZ0ZXIgd3JpdGluZyB0byBjcm9zcyBjaGVjay4KK2JhcjBfcndfb2Zmc2V0CTp3cml0ZSBvZmZzZXQgb2YgYmFyMCBmb3Igd2hpY2gJYmFyMF9kYXRhIHdpbGwgd3JpdGUgdmFsdWUuCitiYXIwX2RhdGEJOndyaXRlIGRhdGEgdG8gYmUgd3JpdHRlbiBhdCBiYXIwX3J3X29mZnNldC4KKworTm9kZSBwcm9ncmFtbWluZyBleGFtcGxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1Byb2dyYW0gYWxsIFBDSWUgcmVnaXN0ZXJzIGluIHN1Y2ggYSB3YXkgdGhhdCB3aGVuIHRoaXMgZGV2aWNlIGlzIGNvbm5lY3RlZAordG8gdGhlIFBDSWUgaG9zdCwgdGhlbiBob3N0IHNlZXMgdGhpcyBkZXZpY2UgYXMgMU1CIFJBTS4KKyNtb3VudCAtdCBjb25maWdmcyBub25lIC9Db25maWcKK0ZvciBudGggUENJZSBEZXZpY2UgQ29udHJvbGxlcgorIyBjZCAvY29uZmlnL3BjaWVfZ2FkZ2V0Lm4vCitOb3cgeW91IGhhdmUgYWxsIHRoZSBub2RlcyBpbiB0aGlzIGRpcmVjdG9yeS4KK3Byb2dyYW0gdmVuZG9yIGlkIGFzIDB4MTA0YQorIyBlY2hvIDEwNEEgPj4gdmVuZG9yX2lkCisKK3Byb2dyYW0gZGV2aWNlIGlkIGFzIDB4Q0Q4MAorIyBlY2hvIENEODAgPj4gZGV2aWNlX2lkCisKK3Byb2dyYW0gQkFSMCBzaXplIGFzIDFNQgorIyBlY2hvIDEwMDAwMCA+PiBiYXIwX3NpemUKKworY2hlY2sgZm9yIHByb2dyYW1tZWQgYmFyMCBzaXplCisjIGNhdCBiYXIwX3NpemUKKworUHJvZ3JhbSBCQVIwIEFkZHJlc3MgYXMgRERSICgweDIxMDAwMDApLiBUaGlzIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mCittZW1vcnksIHdoaWNoIGlzIHRvIGJlIG1hZGUgdmlzaWJsZSB0byBQQ0llIGhvc3QuIFNpbWlsYXJseSBhbnkgb3RoZXIgcGVyaXBoZXJhbAorY2FuIGFsc28gYmUgbWFkZSB2aXNpYmxlIHRvIFBDSWUgaG9zdC4gRS5nLiwgaWYgeW91IHByb2dyYW0gYmFzZSBhZGRyZXNzIG9mIFVBUlQKK2FzIEJBUjAgYWRkcmVzcyB0aGVuIHdoZW4gdGhpcyBkZXZpY2Ugd2lsbCBiZSBjb25uZWN0ZWQgdG8gYSBob3N0LCBpdCB3aWxsIGJlCit2aXNpYmxlIGFzIFVBUlQuCisjIGVjaG8gMjEwMDAwMCA+PiBiYXIwX2FkZHJlc3MKKworcHJvZ3JhbSBpbnRlcnJ1cHQgdHlwZSA6IElOVEEKKyMgZWNobyBJTlRBID4+IGludF90eXBlCisKK2dvIGZvciBsaW5rIHVwIG5vdy4KKyMgZWNobyBVUCA+PiBsaW5rCisKK0l0IHdpbGwgaGF2ZSB0byBiZSBpbnN1cmVkIHRoYXQsIG9uY2UgbGluayB1cCBpcyBkb25lIG9uIGdhZGdldCwgdGhlbiBvbmx5IGhvc3QKK2lzIGluaXRpYWxpemVkIGFuZCBzdGFydCB0byBzZWFyY2ggUENJZSBkZXZpY2VzIG9uIGl0cyBwb3J0LgorCisvKndhaXQgdGlsbCBsaW5rIGlzIHVwKi8KKyMgY2F0IGxpbmsKK3dhaXQgdGlsbCBpdCByZXR1cm5zIFVQLgorCitUbyBhc3NlcnQgSU5UQQorIyBlY2hvIDEgPj4gaW50YQorCitUbyBkZS1hc3NlcnQgSU5UQQorIyBlY2hvIDAgPj4gaW50YQorCitpZiBNU0kgaXMgdG8gYmUgdXNlZCBhcyBpbnRlcnJ1cHQsIHByb2dyYW0gbm8gb2YgbXNpIHZlY3RvciBuZWVkZWQgKHNheTQpCisjIGVjaG8gNCA+PiBub19vZl9tc2kKKworc2VsZWN0IE1TSSBhcyBpbnRlcnJ1cHQgdHlwZQorIyBlY2hvIE1TSSA+PiBpbnRfdHlwZQorCitnbyBmb3IgbGluayB1cCBub3cKKyMgZWNobyBVUCA+PiBsaW5rCisKK3dhaXQgdGlsbCBsaW5rIGlzIHVwCisjIGNhdCBsaW5rCitBbiBhcHBsaWNhdGlvbiBjYW4gcmVwZXRpdGl2ZWx5IHJlYWQgdGhpcyBub2RlIHRpbGwgbGluayBpcyBmb3VuZCBVUC4gSXQgY2FuCitzbGVlcCBiZXR3ZWVuIHR3byByZWFkLgorCit3YWl0IHRpbGwgbXNpIGlzIGVuYWJsZWQKKyMgY2F0IG5vX29mX21zaQorU2hvdWxkIHJldHVybiA0IChudW1iZXIgb2YgcmVxdWVzdGVkIE1TSSB2ZWN0b3IpCisKK3RvIHNlbmQgbXNpIHZlY3RvciAyCisjIGVjaG8gMiA+PiBzZW5kX21zaQorI2NkIC0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmFwaWRpby9yYXBpZGlvLnR4dCBiL0RvY3VtZW50YXRpb24vcmFwaWRpby9yYXBpZGlvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTcwZWUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9yYXBpZGlvL3JhcGlkaW8udHh0CkBAIC0wLDAgKzEsMTczIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBSYXBpZElPIFN1YnN5c3RlbQorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgUmFwaWRJTyBzdGFuZGFyZCBpcyBhIHBhY2tldC1iYXNlZCBmYWJyaWMgaW50ZXJjb25uZWN0IHN0YW5kYXJkIGRlc2lnbmVkIGZvcgordXNlIGluIGVtYmVkZGVkIHN5c3RlbXMuIERldmVsb3BtZW50IG9mIHRoZSBSYXBpZElPIHN0YW5kYXJkIGlzIGRpcmVjdGVkIGJ5IHRoZQorUmFwaWRJTyBUcmFkZSBBc3NvY2lhdGlvbiAoUlRBKS4gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgUmFwaWRJTyBzcGVjaWZpY2F0aW9uCitpcyBwdWJsaWNseSBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGZyb20gdGhlIFJUQSB3ZWItc2l0ZSBbMV0uCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBiYXNpY3Mgb2YgdGhlIExpbnV4IFJhcGlkSU8gc3Vic3lzdGVtIGFuZCBwcm92aWRlcworaW5mb3JtYXRpb24gb24gaXRzIG1ham9yIGNvbXBvbmVudHMuCisKKzEgT3ZlcnZpZXcKKy0tLS0tLS0tLS0KKworQmVjYXVzZSB0aGUgUmFwaWRJTyBzdWJzeXN0ZW0gZm9sbG93cyB0aGUgTGludXggZGV2aWNlIG1vZGVsIGl0IGlzIGludGVncmF0ZWQKK2ludG8gdGhlIGtlcm5lbCBzaW1pbGFybHkgdG8gb3RoZXIgYnVzZXMgYnkgZGVmaW5pbmcgUmFwaWRJTy1zcGVjaWZpYyBkZXZpY2UgYW5kCitidXMgdHlwZXMgYW5kIHJlZ2lzdGVyaW5nIHRoZW0gd2l0aGluIHRoZSBkZXZpY2UgbW9kZWwuCisKK1RoZSBMaW51eCBSYXBpZElPIHN1YnN5c3RlbSBpcyBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgYW5kIHRoZXJlZm9yZSBkZWZpbmVzCithcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGUgc3VwcG9ydCBmb3IgY29tbW9uIFJhcGlkSU8KK3N1YnN5c3RlbSBvcGVyYXRpb25zLgorCisyLiBDb3JlIENvbXBvbmVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHR5cGljYWwgUmFwaWRJTyBuZXR3b3JrIGlzIGEgY29tYmluYXRpb24gb2YgZW5kcG9pbnRzIGFuZCBzd2l0Y2hlcy4KK0VhY2ggb2YgdGhlc2UgY29tcG9uZW50cyBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3Vic3lzdGVtIGJ5IGFuIGFzc29jaWF0ZWQgZGF0YQorc3RydWN0dXJlLiBUaGUgY29yZSBsb2dpY2FsIGNvbXBvbmVudHMgb2YgdGhlIFJhcGlkSU8gc3Vic3lzdGVtIGFyZSBkZWZpbmVkCitpbiBpbmNsdWRlL2xpbnV4L3Jpby5oIGZpbGUuCisKKzIuMSBNYXN0ZXIgUG9ydAorCitBIG1hc3RlciBwb3J0IChvciBtcG9ydCkgaXMgYSBSYXBpZElPIGludGVyZmFjZSBjb250cm9sbGVyIHRoYXQgaXMgbG9jYWwgdG8gdGhlCitwcm9jZXNzb3IgZXhlY3V0aW5nIHRoZSBMaW51eCBjb2RlLiBBIG1hc3RlciBwb3J0IGdlbmVyYXRlcyBhbmQgcmVjZWl2ZXMgUmFwaWRJTworcGFja2V0cyAodHJhbnNhY3Rpb25zKS4gSW4gdGhlIFJhcGlkSU8gc3Vic3lzdGVtIGVhY2ggbWFzdGVyIHBvcnQgaXMgcmVwcmVzZW50ZWQKK2J5IGEgcmlvX21wb3J0IGRhdGEgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBtYXN0ZXIgcG9ydCBzcGVjaWZpYworcmVzb3VyY2VzIHN1Y2ggYXMgbWFpbGJveGVzIGFuZCBkb29yYmVsbHMuIFRoZSByaW9fbXBvcnQgYWxzbyBpbmNsdWRlcyBhIHVuaXF1ZQoraG9zdCBkZXZpY2UgSUQgdGhhdCBpcyB2YWxpZCB3aGVuIGEgbWFzdGVyIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhbiBlbnVtZXJhdGluZworaG9zdC4KKworUmFwaWRJTyBtYXN0ZXIgcG9ydHMgYXJlIHNlcnZpY2VkIGJ5IHN1YnN5c3RlbSBzcGVjaWZpYyBtcG9ydCBkZXZpY2UgZHJpdmVycwordGhhdCBwcm92aWRlIGZ1bmN0aW9uYWxpdHkgZGVmaW5lZCBmb3IgdGhpcyBzdWJzeXN0ZW0uIFRvIHByb3ZpZGUgYSBoYXJkd2FyZQoraW5kZXBlbmRlbnQgaW50ZXJmYWNlIGZvciBSYXBpZElPIHN1YnN5c3RlbSBvcGVyYXRpb25zLCByaW9fbXBvcnQgc3RydWN0dXJlCitpbmNsdWRlcyByaW9fb3BzIGRhdGEgc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGhhcmR3YXJlIHNwZWNpZmljCitpbXBsZW1lbnRhdGlvbnMgb2YgUmFwaWRJTyBmdW5jdGlvbnMuCisKKzIuMiBEZXZpY2UKKworQSBSYXBpZElPIGRldmljZSBpcyBhbnkgZW5kcG9pbnQgKG90aGVyIHRoYW4gbXBvcnQpIG9yIHN3aXRjaCBpbiB0aGUgbmV0d29yay4KK0FsbCBkZXZpY2VzIGFyZSBwcmVzZW50ZWQgaW4gdGhlIFJhcGlkSU8gc3Vic3lzdGVtIGJ5IGNvcnJlc3BvbmRpbmcgcmlvX2RldiBkYXRhCitzdHJ1Y3R1cmUuIERldmljZXMgZm9ybSBvbmUgZ2xvYmFsIGRldmljZSBsaXN0IGFuZCBwZXItbmV0d29yayBkZXZpY2UgbGlzdHMKKyhkZXBlbmRpbmcgb24gbnVtYmVyIG9mIGF2YWlsYWJsZSBtcG9ydHMgYW5kIG5ldHdvcmtzKS4KKworMi4zIFN3aXRjaAorCitBIFJhcGlkSU8gc3dpdGNoIGlzIGEgc3BlY2lhbCBjbGFzcyBvZiBkZXZpY2UgdGhhdCByb3V0ZXMgcGFja2V0cyBiZXR3ZWVuIGl0cworcG9ydHMgdG93YXJkcyB0aGVpciBmaW5hbCBkZXN0aW5hdGlvbi4gVGhlIHBhY2tldCBkZXN0aW5hdGlvbiBwb3J0IHdpdGhpbiBhCitzd2l0Y2ggaXMgZGVmaW5lZCBieSBhbiBpbnRlcm5hbCByb3V0aW5nIHRhYmxlLiBBIHN3aXRjaCBpcyBwcmVzZW50ZWQgaW4gdGhlCitSYXBpZElPIHN1YnN5c3RlbSBieSByaW9fZGV2IGRhdGEgc3RydWN0dXJlIGV4cGFuZGVkIGJ5IGFkZGl0aW9uYWwgcmlvX3N3aXRjaAorZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGNvbnRhaW5zIHN3aXRjaCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBzdWNoIGFzIGNvcHkgb2YgdGhlCityb3V0aW5nIHRhYmxlIGFuZCBwb2ludGVycyB0byBzd2l0Y2ggc3BlY2lmaWMgZnVuY3Rpb25zLgorCitUaGUgUmFwaWRJTyBzdWJzeXN0ZW0gZGVmaW5lcyB0aGUgZm9ybWF0IGFuZCBpbml0aWFsaXphdGlvbiBtZXRob2QgZm9yIHN1YnN5c3RlbQorc3BlY2lmaWMgc3dpdGNoIGRyaXZlcnMgdGhhdCBhcmUgZGVzaWduZWQgdG8gcHJvdmlkZSBoYXJkd2FyZS1zcGVjaWZpYworaW1wbGVtZW50YXRpb24gb2YgY29tbW9uIHN3aXRjaCBtYW5hZ2VtZW50IHJvdXRpbmVzLgorCisyLjQgTmV0d29yaworCitBIFJhcGlkSU8gbmV0d29yayBpcyBhIGNvbWJpbmF0aW9uIG9mIGludGVyY29ubmVjdGVkIGVuZHBvaW50IGFuZCBzd2l0Y2ggZGV2aWNlcy4KK0VhY2ggUmFwaWRJTyBuZXR3b3JrIGtub3duIHRvIHRoZSBzeXN0ZW0gaXMgcmVwcmVzZW50ZWQgYnkgY29ycmVzcG9uZGluZyByaW9fbmV0CitkYXRhIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgaW5jbHVkZXMgbGlzdHMgb2YgYWxsIGRldmljZXMgYW5kIGxvY2FsIG1hc3RlcgorcG9ydHMgdGhhdCBmb3JtIHRoZSBzYW1lIG5ldHdvcmsuIEl0IGFsc28gY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBkZWZhdWx0CittYXN0ZXIgcG9ydCB0aGF0IGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2VzIHdpdGhpbiB0aGUgbmV0d29yay4KKworMy4gU3Vic3lzdGVtIEluaXRpYWxpemF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgUmFwaWRJTyBzdWJzeXN0ZW0sIGEgcGxhdGZvcm0gbXVzdCBpbml0aWFsaXplIGFuZAorcmVnaXN0ZXIgYXQgbGVhc3Qgb25lIG1hc3RlciBwb3J0IHdpdGhpbiB0aGUgUmFwaWRJTyBuZXR3b3JrLiBUbyByZWdpc3RlciBtcG9ydAord2l0aGluIHRoZSBzdWJzeXN0ZW0gY29udHJvbGxlciBkcml2ZXIgaW5pdGlhbGl6YXRpb24gY29kZSBjYWxscyBmdW5jdGlvbgorcmlvX3JlZ2lzdGVyX21wb3J0KCkgZm9yIGVhY2ggYXZhaWxhYmxlIG1hc3RlciBwb3J0LiBBZnRlciBhbGwgYWN0aXZlIG1hc3RlcgorcG9ydHMgYXJlIHJlZ2lzdGVyZWQgd2l0aCBhIFJhcGlkSU8gc3Vic3lzdGVtLCB0aGUgcmlvX2luaXRfbXBvcnRzKCkgcm91dGluZQoraXMgY2FsbGVkIHRvIHBlcmZvcm0gZW51bWVyYXRpb24gYW5kIGRpc2NvdmVyeS4KKworSW4gdGhlIGN1cnJlbnQgUG93ZXJQQy1iYXNlZCBpbXBsZW1lbnRhdGlvbiBhIHN1YnN5c19pbml0Y2FsbCgpIGlzIHNwZWNpZmllZCB0bworcGVyZm9ybSBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uIGFuZCBtcG9ydCByZWdpc3RyYXRpb24uIEF0IHRoZSBlbmQgaXQgZGlyZWN0bHkKK2NhbGxzIHJpb19pbml0X21wb3J0cygpIHRvIGV4ZWN1dGUgUmFwaWRJTyBlbnVtZXJhdGlvbiBhbmQgZGlzY292ZXJ5LgorCis0LiBFbnVtZXJhdGlvbiBhbmQgRGlzY292ZXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gcmlvX2luaXRfbXBvcnRzKCkgaXMgY2FsbGVkIGl0IHNjYW5zIGEgbGlzdCBvZiByZWdpc3RlcmVkIG1hc3RlciBwb3J0cyBhbmQKK2NhbGxzIGFuIGVudW1lcmF0aW9uIG9yIGRpc2NvdmVyeSByb3V0aW5lIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJlZCByb2xlIG9mIGEKK21hc3RlciBwb3J0OiBob3N0IG9yIGFnZW50LgorCitFbnVtZXJhdGlvbiBpcyBwZXJmb3JtZWQgYnkgYSBtYXN0ZXIgcG9ydCBpZiBpdCBpcyBjb25maWd1cmVkIGFzIGEgaG9zdCBwb3J0IGJ5Cithc3NpZ25pbmcgYSBob3N0IGRldmljZSBJRCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4gQSBob3N0IGRldmljZSBJRCBpcworYXNzaWduZWQgdG8gYSBtYXN0ZXIgcG9ydCB0aHJvdWdoIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlciAicmlvaGRpZD0iLAorb3IgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gYSBwbGF0Zm9ybS1zcGVjaWZpYyBtYW5uZXIuIElmIHRoZSBob3N0IGRldmljZSBJRCBmb3IKK2Egc3BlY2lmaWMgbWFzdGVyIHBvcnQgaXMgc2V0IHRvIC0xLCB0aGUgZGlzY292ZXJ5IHByb2Nlc3Mgd2lsbCBiZSBwZXJmb3JtZWQKK2ZvciBpdC4KKworVGhlIGVudW1lcmF0aW9uIGFuZCBkaXNjb3Zlcnkgcm91dGluZXMgdXNlIFJhcGlkSU8gbWFpbnRlbmFuY2UgdHJhbnNhY3Rpb25zCit0byBhY2Nlc3MgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb2YgZGV2aWNlcy4KKworVGhlIGVudW1lcmF0aW9uIHByb2Nlc3MgaXMgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBlbnVtZXJhdGlvbiBhbGdvcml0aG0KK291dGxpbmVkIGluIHRoZSBSYXBpZElPIEludGVyY29ubmVjdCBTcGVjaWZpY2F0aW9uOiBBbm5leCBJIFsxXS4KKworVGhlIGVudW1lcmF0aW9uIHByb2Nlc3MgdHJhdmVyc2VzIHRoZSBuZXR3b3JrIHVzaW5nIGEgcmVjdXJzaXZlIGRlcHRoLWZpcnN0CithbGdvcml0aG0uIFdoZW4gYSBuZXcgZGV2aWNlIGlzIGZvdW5kLCB0aGUgZW51bWVyYXRvciB0YWtlcyBvd25lcnNoaXAgb2YgdGhhdAorZGV2aWNlIGJ5IHdyaXRpbmcgaW50byB0aGUgSG9zdCBEZXZpY2UgSUQgTG9jayBDU1IuIEl0IGRvZXMgdGhpcyB0byBlbnN1cmUgdGhhdAordGhlIGVudW1lcmF0b3IgaGFzIGV4Y2x1c2l2ZSByaWdodCB0byBlbnVtZXJhdGUgdGhlIGRldmljZS4gSWYgZGV2aWNlIG93bmVyc2hpcAoraXMgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkLCB0aGUgZW51bWVyYXRvciBhbGxvY2F0ZXMgYSBuZXcgcmlvX2RldiBzdHJ1Y3R1cmUgYW5kCitpbml0aWFsaXplcyBpdCBhY2NvcmRpbmcgdG8gZGV2aWNlIGNhcGFiaWxpdGllcy4KKworSWYgdGhlIGRldmljZSBpcyBhbiBlbmRwb2ludCwgYSB1bmlxdWUgZGV2aWNlIElEIGlzIGFzc2lnbmVkIHRvIGl0IGFuZCBpdHMgdmFsdWUKK2lzIHdyaXR0ZW4gaW50byB0aGUgZGV2aWNlJ3MgQmFzZSBEZXZpY2UgSUQgQ1NSLgorCitJZiB0aGUgZGV2aWNlIGlzIGEgc3dpdGNoLCB0aGUgZW51bWVyYXRvciBhbGxvY2F0ZXMgYW4gYWRkaXRpb25hbCByaW9fc3dpdGNoCitzdHJ1Y3R1cmUgdG8gc3RvcmUgc3dpdGNoIHNwZWNpZmljIGluZm9ybWF0aW9uLiBUaGVuIHRoZSBzd2l0Y2gncyB2ZW5kb3IgSUQgYW5kCitkZXZpY2UgSUQgYXJlIHF1ZXJpZWQgYWdhaW5zdCBhIHRhYmxlIG9mIGtub3duIFJhcGlkSU8gc3dpdGNoZXMuIEVhY2ggc3dpdGNoCit0YWJsZSBlbnRyeSBjb250YWlucyBhIHBvaW50ZXIgdG8gYSBzd2l0Y2gtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZSB0aGF0Citpbml0aWFsaXplcyBwb2ludGVycyB0byB0aGUgcmVzdCBvZiBzd2l0Y2ggc3BlY2lmaWMgb3BlcmF0aW9ucywgYW5kIHBlcmZvcm1zCitoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpZiBuZWNlc3NhcnkuIEEgUmFwaWRJTyBzd2l0Y2ggZG9lcyBub3QgaGF2ZSBhIHVuaXF1ZQorZGV2aWNlIElEOyBpdCByZWxpZXMgb24gaG9wY291bnQgYW5kIHJvdXRpbmcgZm9yIGRldmljZSBJRCBvZiBhbiBhdHRhY2hlZAorZW5kcG9pbnQgaWYgYWNjZXNzIHRvIGl0cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBpcyByZXF1aXJlZC4gSWYgYSBzd2l0Y2ggKG9yCitjaGFpbiBvZiBzd2l0Y2hlcykgZG9lcyBub3QgaGF2ZSBhbnkgZW5kcG9pbnQgKGV4Y2VwdCBlbnVtZXJhdG9yKSBhdHRhY2hlZCB0bworaXQsIGEgZmFrZSBkZXZpY2UgSUQgd2lsbCBiZSBhc3NpZ25lZCB0byBjb25maWd1cmUgYSByb3V0ZSB0byB0aGF0IHN3aXRjaC4KK0luIHRoZSBjYXNlIG9mIGEgY2hhaW4gb2Ygc3dpdGNoZXMgd2l0aG91dCBlbmRwb2ludCwgb25lIGZha2UgZGV2aWNlIElEIGlzIHVzZWQKK3RvIGNvbmZpZ3VyZSBhIHJvdXRlIHRocm91Z2ggdGhlIGVudGlyZSBjaGFpbiBhbmQgc3dpdGNoZXMgYXJlIGRpZmZlcmVudGlhdGVkIGJ5Cit0aGVpciBob3Bjb3VudCB2YWx1ZS4KKworRm9yIGJvdGggZW5kcG9pbnRzIGFuZCBzd2l0Y2hlcyB0aGUgZW51bWVyYXRvciB3cml0ZXMgYSB1bmlxdWUgY29tcG9uZW50IHRhZworaW50byBkZXZpY2UncyBDb21wb25lbnQgVGFnIENTUi4gVGhhdCB1bmlxdWUgdmFsdWUgaXMgdXNlZCBieSB0aGUgZXJyb3IKK21hbmFnZW1lbnQgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSB0byBpZGVudGlmeSBhIGRldmljZSB0aGF0IGlzIHJlcG9ydGluZyBhbgorZXJyb3IgbWFuYWdlbWVudCBldmVudC4KKworRW51bWVyYXRpb24gYmV5b25kIGEgc3dpdGNoIGlzIGNvbXBsZXRlZCBieSBpdGVyYXRpbmcgb3ZlciBlYWNoIGFjdGl2ZSBlZ3Jlc3MKK3BvcnQgb2YgdGhhdCBzd2l0Y2guIEZvciBlYWNoIGFjdGl2ZSBsaW5rLCBhIHJvdXRlIHRvIGEgZGVmYXVsdCBkZXZpY2UgSUQKKygweEZGIGZvciA4LWJpdCBzeXN0ZW1zIGFuZCAweEZGRkYgZm9yIDE2LWJpdCBzeXN0ZW1zKSBpcyB0ZW1wb3JhcmlseSB3cml0dGVuCitpbnRvIHRoZSByb3V0aW5nIHRhYmxlLiBUaGUgYWxnb3JpdGhtIHJlY3VycyBieSBjYWxsaW5nIGl0c2VsZiB3aXRoIGhvcGNvdW50ICsgMQorYW5kIHRoZSBkZWZhdWx0IGRldmljZSBJRCBpbiBvcmRlciB0byBhY2Nlc3MgdGhlIGRldmljZSBvbiB0aGUgYWN0aXZlIHBvcnQuCisKK0FmdGVyIHRoZSBob3N0IGhhcyBjb21wbGV0ZWQgZW51bWVyYXRpb24gb2YgdGhlIGVudGlyZSBuZXR3b3JrIGl0IHJlbGVhc2VzCitkZXZpY2VzIGJ5IGNsZWFyaW5nIGRldmljZSBJRCBsb2NrcyAoY2FsbHMgcmlvX2NsZWFyX2xvY2tzKCkpLiBGb3IgZWFjaCBlbmRwb2ludAoraW4gdGhlIHN5c3RlbSwgaXQgc2V0cyB0aGUgTWFzdGVyIEVuYWJsZSBiaXQgaW4gdGhlIFBvcnQgR2VuZXJhbCBDb250cm9sIENTUgordG8gaW5kaWNhdGUgdGhhdCBlbnVtZXJhdGlvbiBpcyBjb21wbGV0ZWQgYW5kIGFnZW50cyBhcmUgYWxsb3dlZCB0byBleGVjdXRlCitwYXNzaXZlIGRpc2NvdmVyeSBvZiB0aGUgbmV0d29yay4KKworVGhlIGRpc2NvdmVyeSBwcm9jZXNzIGlzIHBlcmZvcm1lZCBieSBhZ2VudHMgYW5kIGlzIHNpbWlsYXIgdG8gdGhlIGVudW1lcmF0aW9uCitwcm9jZXNzIHRoYXQgaXMgZGVzY3JpYmVkIGFib3ZlLiBIb3dldmVyLCB0aGUgZGlzY292ZXJ5IHByb2Nlc3MgaXMgcGVyZm9ybWVkCit3aXRob3V0IGNoYW5nZXMgdG8gdGhlIGV4aXN0aW5nIHJvdXRpbmcgYmVjYXVzZSBhZ2VudHMgb25seSBnYXRoZXIgaW5mb3JtYXRpb24KK2Fib3V0IFJhcGlkSU8gbmV0d29yayBzdHJ1Y3R1cmUgYW5kIGFyZSBidWlsZGluZyBhbiBpbnRlcm5hbCBtYXAgb2YgZGlzY292ZXJlZAorZGV2aWNlcy4gVGhpcyB3YXkgZWFjaCBMaW51eC1iYXNlZCBjb21wb25lbnQgb2YgdGhlIFJhcGlkSU8gc3Vic3lzdGVtIGhhcworYSBjb21wbGV0ZSB2aWV3IG9mIHRoZSBuZXR3b3JrLiBUaGUgZGlzY292ZXJ5IHByb2Nlc3MgY2FuIGJlIHBlcmZvcm1lZAorc2ltdWx0YW5lb3VzbHkgYnkgc2V2ZXJhbCBhZ2VudHMuIEFmdGVyIGluaXRpYWxpemluZyBpdHMgUmFwaWRJTyBtYXN0ZXIgcG9ydAorZWFjaCBhZ2VudCB3YWl0cyBmb3IgZW51bWVyYXRpb24gY29tcGxldGlvbiBieSB0aGUgaG9zdCBmb3IgdGhlIGNvbmZpZ3VyZWQgd2FpdAordGltZSBwZXJpb2QuIElmIHRoaXMgd2FpdCB0aW1lIHBlcmlvZCBleHBpcmVzIGJlZm9yZSBlbnVtZXJhdGlvbiBpcyBjb21wbGV0ZWQsCithbiBhZ2VudCBza2lwcyBSYXBpZElPIGRpc2NvdmVyeSBhbmQgY29udGludWVzIHdpdGggcmVtYWluaW5nIGtlcm5lbAoraW5pdGlhbGl6YXRpb24uCisKKzUuIFJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0KKworWzFdIFJhcGlkSU8gVHJhZGUgQXNzb2NpYXRpb24uIFJhcGlkSU8gSW50ZXJjb25uZWN0IFNwZWNpZmljYXRpb25zLgorICAgIGh0dHA6Ly93d3cucmFwaWRpby5vcmcuCitbMl0gUmFwaWRpbyBUQS4gVGVjaG5vbG9neSBDb21wYXJpc29ucy4KKyAgICBodHRwOi8vd3d3LnJhcGlkaW8ub3JnL2VkdWNhdGlvbi90ZWNobm9sb2d5X2NvbXBhcmlzb25zLworWzNdIFJhcGlkSU8gc3VwcG9ydCBmb3IgTGludXguCisgICAgaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMTM5MTE4LworWzRdIE1hdHQgUG9ydGVyLiBSYXBpZElPIGZvciBMaW51eC4gT3R0YXdhIExpbnV4IFN5bXBvc2l1bSwgMjAwNQorICAgIGh0dHA6Ly93d3cua2VybmVsLm9yZy9kb2Mvb2xzLzIwMDUvb2xzMjAwNXYyLXBhZ2VzLTQzLTU2LnBkZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yYXBpZGlvL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vcmFwaWRpby9zeXNmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzFjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcmFwaWRpby9zeXNmcy50eHQKQEAgLTAsMCArMSw5MCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgIFJhcGlkSU8gc3lzZnMgRmlsZXMKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworMS4gRGV2aWNlIFN1YmRpcmVjdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGVhY2ggUmFwaWRJTyBkZXZpY2UsIHRoZSBSYXBpZElPIHN1YnN5c3RlbSBjcmVhdGVzIGZpbGVzIGluIGFuIGluZGl2aWR1YWwKK3N1YmRpcmVjdG9yeSB3aXRoIHRoZSBmb2xsb3dpbmcgbmFtZSwgL3N5cy9idXMvcmFwaWRpby9kZXZpY2VzLzxkZXZpY2VfbmFtZT4uCisKK1RoZSBmb3JtYXQgb2YgZGV2aWNlX25hbWUgaXMgIm5uOmQ6aWlpaSIsIHdoZXJlOgorCitubiAtIHR3by1kaWdpdCBoZXhhZGVjaW1hbCBJRCBvZiBSYXBpZElPIG5ldHdvcmsgd2hlcmUgdGhlIGRldmljZSByZXNpZGVzCitkICAtIGRldmljZSB0eXByOiAnZScgLSBmb3IgZW5kcG9pbnQgb3IgJ3MnIC0gZm9yIHN3aXRjaAoraWlpaSAtIGZvdXItZGlnaXQgZGV2aWNlIGRlc3RJRCBmb3IgZW5kcG9pbnRzLCBvciBzd2l0Y2hJRCBmb3Igc3dpdGNoZXMKKworRm9yIGV4YW1wbGUsIGJlbG93IGlzIGEgbGlzdCBvZiBkZXZpY2UgZGlyZWN0b3JpZXMgdGhhdCByZXByZXNlbnRzIGEgdHlwaWNhbAorUmFwaWRJTyBuZXR3b3JrIHdpdGggb25lIHN3aXRjaCwgb25lIGhvc3QsIGFuZCB0d28gYWdlbnQgZW5kcG9pbnRzLCBhcyBpdCBpcworc2VlbiBieSB0aGUgZW51bWVyYXRpbmcgaG9zdCAoZGVzdElEID0gMSk6CisKKy9zeXMvYnVzL3JhcGlkaW8vZGV2aWNlcy8wMDplOjAwMDAKKy9zeXMvYnVzL3JhcGlkaW8vZGV2aWNlcy8wMDplOjAwMDIKKy9zeXMvYnVzL3JhcGlkaW8vZGV2aWNlcy8wMDpzOjAwMDEKKworTk9URTogQW4gZW51bWVyYXRpbmcgb3IgZGlzY292ZXJpbmcgZW5kcG9pbnQgZG9lcyBub3QgY3JlYXRlIGEgc3lzZnMgZW50cnkgZm9yCitpdHNlbGYsIHRoaXMgaXMgd2h5IGFuIGVuZHBvaW50IHdpdGggZGVzdElEPTEgaXMgbm90IHNob3duIGluIHRoZSBsaXN0LgorCisyLiBBdHRyaWJ1dGVzIENvbW1vbiBmb3IgQWxsIERldmljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFYWNoIGRldmljZSBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbmFsIHJlYWQtb25seSBmaWxlczoKKworICAgICAgIGRpZCAtIHJldHVybnMgdGhlIGRldmljZSBpZGVudGlmaWVyCisgICAgICAgdmlkIC0gcmV0dXJucyB0aGUgZGV2aWNlIHZlbmRvciBpZGVudGlmaWVyCitkZXZpY2VfcmV2IC0gcmV0dXJucyB0aGUgZGV2aWNlIHJldmlzaW9uIGxldmVsCisgICBhc21fZGlkIC0gcmV0dXJucyBpZGVudGlmaWVyIGZvciB0aGUgYXNzZW1ibHkgY29udGFpbmluZyB0aGUgZGV2aWNlCisgICBhc21fcmV2IC0gcmV0dXJucyByZXZpc2lvbiBsZXZlbCBvZiB0aGUgYXNzZW1ibHkgY29udGFpbmluZyB0aGUgZGV2aWNlCisgICBhc21fdmlkIC0gcmV0dXJucyB2ZW5kb3IgaWRlbnRpZmllciBvZiB0aGUgYXNzZW1ibHkgY29udGFpbmluZyB0aGUgZGV2aWNlCisgICBkZXN0aWQgIC0gcmV0dXJucyBkZXZpY2UgZGVzdGluYXRpb24gSUQgYXNzaWduZWQgYnkgdGhlIGVudW1lcmF0aW9uIHJvdXRpbmUKKyAgICAgICAgICAgICAoc2VlIDQuMSBmb3Igc3dpdGNoIHNwZWNpZmljIGRldGFpbHMpCisgICBscHJldiAgIC0gcmV0dXJucyBuYW1lIG9mIHByZXZpb3VzIGRldmljZSAoc3dpdGNoKSBvbiB0aGUgcGF0aCB0byB0aGUgZGV2aWNlCisgICAgICAgICAgICAgdGhhdCB0aGF0IG93bnMgdGhpcyBhdHRyaWJ1dGUKKworSW4gYWRkaXRpb24gdG8gdGhlIGZpbGVzIGxpc3RlZCBhYm92ZSwgZWFjaCBkZXZpY2UgaGFzIGEgYmluYXJ5IGF0dHJpYnV0ZSBmaWxlCit0aGF0IGFsbG93cyByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHVzaW5nCit0aGUgUmFwaWRJTyBtYWludGVuYW5jZSB0cmFuc2FjdGlvbnM6CisKKyBjb25maWcgLSByZWFkcyBmcm9tIGFuZCB3cml0ZXMgdG8gdGhlIGRldmljZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KKworVGhpcyBhdHRyaWJ1dGUgaXMgc2ltaWxhciBpbiBiZWhhdmlvciB0byB0aGUgImNvbmZpZyIgYXR0cmlidXRlIG9mIFBDSSBkZXZpY2VzCithbmQgcHJvdmlkZXMgYW4gYWNjZXNzIHRvIHRoZSBSYXBpZElPIGRldmljZSByZWdpc3RlcnMgdXNpbmcgc3RhbmRhcmQgZmlsZSByZWFkCithbmQgd3JpdGUgb3BlcmF0aW9ucy4KKworMy4gRW5kcG9pbnQgRGV2aWNlIEF0dHJpYnV0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1cnJlbnRseSBMaW51eCBSYXBpZElPIHN1YnN5c3RlbSBkb2VzIG5vdCBjcmVhdGUgYW55IGVuZHBvaW50IHNwZWNpZmljIHN5c2ZzCithdHRyaWJ1dGVzLiBJdCBpcyBwb3NzaWJsZSB0aGF0IFJhcGlkSU8gbWFzdGVyIHBvcnQgZHJpdmVycyBhbmQgZW5kcG9pbnQgZGV2aWNlCitkcml2ZXJzIHdpbGwgYWRkIHRoZWlyIGRldmljZS1zcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGVzIGJ1dCBzdWNoIGF0dHJpYnV0ZXMgYXJlCitvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50LgorCis0LiBTd2l0Y2ggRGV2aWNlIEF0dHJpYnV0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSYXBpZElPIHN3aXRjaGVzIGhhdmUgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGluIHN5c2ZzLiBSYXBpZElPIHN1YnN5c3RlbSBzdXBwb3J0cworY29tbW9uIGFuZCBkZXZpY2Utc3BlY2lmaWMgc3lzZnMgYXR0cmlidXRlcyBmb3Igc3dpdGNoZXMuIEJlY2F1c2Ugc3dpdGNoZXMgYXJlCitpbnRlZ3JhdGVkIGludG8gdGhlIFJhcGlkSU8gc3Vic3lzdGVtLCBpdCBvZmZlcnMgYSBtZXRob2QgdG8gY3JlYXRlCitkZXZpY2Utc3BlY2lmaWMgc3lzZnMgYXR0cmlidXRlcyBieSBzcGVjaWZ5aW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBtYXkgYmUKK3NldCBieSB0aGUgc3dpdGNoIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZHVyaW5nIGVudW1lcmF0aW9uIG9yIGRpc2NvdmVyeSBwcm9jZXNzLgorCis0LjEgQ29tbW9uIFN3aXRjaCBBdHRyaWJ1dGVzCisKKyAgIHJvdXRlcyAtIHJlcG9ydHMgc3dpdGNoIHJvdXRpbmcgaW5mb3JtYXRpb24gaW4gImRlc3RJRCBwb3J0IiBmb3JtYXQuIFRoaXMKKyAgICAgICAgICAgIGF0dHJpYnV0ZSByZXBvcnRzIG9ubHkgdmFsaWQgcm91dGluZyB0YWJsZSBlbnRyaWVzLCBvbmUgbGluZSBmb3IKKyAgICAgICAgICAgIGVhY2ggZW50cnkuCisgICBkZXN0aWQgLSBkZXZpY2UgZGVzdGluYXRpb24gSUQgdGhhdCBkZWZpbmVzIGEgcm91dGUgdG8gdGhlIHN3aXRjaAorIGhvcGNvdW50IC0gbnVtYmVyIG9mIGhvcHMgb24gdGhlIHBhdGggdG8gdGhlIHN3aXRjaAorICAgIGxuZXh0IC0gcmV0dXJucyBuYW1lcyBvZiBkZXZpY2VzIGxpbmtlZCB0byB0aGUgc3dpdGNoIGV4Y2VwdCBvbmUgb2YgYSBkZXZpY2UKKyAgICAgICAgICAgIGxpbmtlZCB0byB0aGUgaW5ncmVzcyBwb3J0IChyZXBvcnRlZCBhcyAibHByZXYiKS4gVGhpcyBpcyBhbiBhcnJheQorICAgICAgICAgICAgbmFtZXMgd2l0aCBudW1iZXIgb2YgbGluZXMgZXF1YWwgdG8gbnVtYmVyIG9mIHBvcnRzIGluIHN3aXRjaC4gSWYKKyAgICAgICAgICAgIGEgc3dpdGNoIHBvcnQgaGFzIG5vIGF0dGFjaGVkIGRldmljZSwgcmV0dXJucyAibnVsbCIgaW5zdGVhZCBvZgorICAgICAgICAgICAgYSBkZXZpY2UgbmFtZS4KKworNC4yIERldmljZS1zcGVjaWZpYyBTd2l0Y2ggQXR0cmlidXRlcworCitEZXZpY2Utc3BlY2lmaWMgc3dpdGNoIGF0dHJpYnV0ZXMgYXJlIGxpc3RlZCBmb3IgZWFjaCBSYXBpZElPIHN3aXRjaCBkcml2ZXIKK3RoYXQgZXhwb3J0cyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuCisKK0lEVF9HRU4yOgorIGVycmxvZyAtIHJlYWRzIGNvbnRlbnRzIG9mIGRldmljZSBlcnJvciBsb2cgdW50aWwgaXQgaXMgZW1wdHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAppbmRleCAxMWQ1Y2VkLi4zNmYwMDc1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKQEAgLTM2Nyw3ICszNjcsNyBAQAogCiAtIGNvbnNvbGVfbG9nbGV2ZWw6IG1lc3NhZ2VzIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkgdGhhbgogICB0aGlzIHdpbGwgYmUgcHJpbnRlZCB0byB0aGUgY29uc29sZQotLSBkZWZhdWx0X21lc3NhZ2VfbGV2ZWw6IG1lc3NhZ2VzIHdpdGhvdXQgYW4gZXhwbGljaXQgcHJpb3JpdHkKKy0gZGVmYXVsdF9tZXNzYWdlX2xvZ2xldmVsOiBtZXNzYWdlcyB3aXRob3V0IGFuIGV4cGxpY2l0IHByaW9yaXR5CiAgIHdpbGwgYmUgcHJpbnRlZCB3aXRoIHRoaXMgcHJpb3JpdHkKIC0gbWluaW11bV9jb25zb2xlX2xvZ2xldmVsOiBtaW5pbXVtIChoaWdoZXN0KSB2YWx1ZSB0byB3aGljaAogICBjb25zb2xlX2xvZ2xldmVsIGNhbiBiZSBzZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4gYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCmluZGV4IDY5OWI2MGUuLmM0MGUzYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgpAQCAtMTMwLDcgKzEzMCw3IEBACiAKIE5vdGU6IE5vIG1vZHVsZSBmb3IgdGhlIG1zZTMwMDAgaXMgYXZhaWxhYmxlIHlldAogTm90ZTogTm8gbW9kdWxlIGZvciB0aGUgdnB4MzIyNCBpcyBhdmFpbGFibGUgeWV0Ci1Ob3RlOiB1c2UgZW5jb2Rlcj1YIG9yIGRlY29kZXI9WCBmb3Igbm9uLWRlZmF1bHQgaTJjIGNoaXBzIChzZWUgaTJjLWlkLmgpCitOb3RlOiB1c2UgZW5jb2Rlcj1YIG9yIGRlY29kZXI9WCBmb3Igbm9uLWRlZmF1bHQgaTJjIGNoaXBzCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCmluZGV4IGNjOTZlZTIuLjc0NDVjYWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCisrKyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCkBAIC0zMiw4ICszMiwyMCBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9lcnJuby5oPgogI2luY2x1ZGUgPHN5cy9mY250bC5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgiCiAKIAorI2lmbmRlZiBNQVhfUEFUSAorIyBkZWZpbmUgTUFYX1BBVEggMjU2CisjZW5kaWYKKworI2lmbmRlZiBTVFIKKyMgZGVmaW5lIF9TVFIoeCkgI3gKKyMgZGVmaW5lIFNUUih4KSBfU1RSKHgpCisjZW5kaWYKKwogLyoKICAqIHBhZ2VtYXAga2VybmVsIEFCSSBiaXRzCiAgKi8KQEAgLTE1Miw2ICsxNjQsMTIgQEAKIH07CiAKIAorc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnZnNfa25vd25fbW91bnRwb2ludHNbXSA9IHsKKwkiL3N5cy9rZXJuZWwvZGVidWciLAorCSIvZGVidWciLAorCTAsCit9OworCiAvKgogICogZGF0YSBzdHJ1Y3R1cmVzCiAgKi8KQEAgLTE4NCw3ICsyMDIsNyBAQAogc3RhdGljIGludAkJb3B0X2h3cG9pc29uOwogc3RhdGljIGludAkJb3B0X3VucG9pc29uOwogCi1zdGF0aWMgY29uc3QgY2hhcglod3BvaXNvbl9kZWJ1Z19mc1tdID0gIi9kZWJ1Zy9od3BvaXNvbiI7CitzdGF0aWMgY2hhcgkJaHdwb2lzb25fZGVidWdfZnNbTUFYX1BBVEgrMV07CiBzdGF0aWMgaW50CQlod3BvaXNvbl9pbmplY3RfZmQ7CiBzdGF0aWMgaW50CQlod3BvaXNvbl9mb3JnZXRfZmQ7CiAKQEAgLTQ2NCwyMSArNDgyLDEwMCBAQAogCXJldHVybiBmbGFnczsKIH0KIAorLyogdmVyaWZ5IHRoYXQgYSBtb3VudHBvaW50IGlzIGFjdHVhbGx5IGEgZGVidWdmcyBpbnN0YW5jZSAqLworc3RhdGljIGludCBkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoY29uc3QgY2hhciAqZGVidWdmcykKK3sKKwlzdHJ1Y3Qgc3RhdGZzIHN0X2ZzOworCisJaWYgKHN0YXRmcyhkZWJ1Z2ZzLCAmc3RfZnMpIDwgMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJZWxzZSBpZiAoc3RfZnMuZl90eXBlICE9IChsb25nKSBERUJVR0ZTX01BR0lDKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiAwOworfQorCisvKiBmaW5kIHRoZSBwYXRoIHRvIHRoZSBtb3VudGVkIGRlYnVnZnMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z2ZzX2ZpbmRfbW91bnRwb2ludCh2b2lkKQoreworCWNvbnN0IGNoYXIgKipwdHI7CisJY2hhciB0eXBlWzEwMF07CisJRklMRSAqZnA7CisKKwlwdHIgPSBkZWJ1Z2ZzX2tub3duX21vdW50cG9pbnRzOworCXdoaWxlICgqcHRyKSB7CisJCWlmIChkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoKnB0cikgPT0gMCkgeworCQkJc3RyY3B5KGh3cG9pc29uX2RlYnVnX2ZzLCAqcHRyKTsKKwkJCXJldHVybiBod3BvaXNvbl9kZWJ1Z19mczsKKwkJfQorCQlwdHIrKzsKKwl9CisKKwkvKiBnaXZlIHVwIGFuZCBwYXJzZSAvcHJvYy9tb3VudHMgKi8KKwlmcCA9IGZvcGVuKCIvcHJvYy9tb3VudHMiLCAiciIpOworCWlmIChmcCA9PSBOVUxMKQorCQlwZXJyb3IoIkNhbid0IG9wZW4gL3Byb2MvbW91bnRzIGZvciByZWFkIik7CisKKwl3aGlsZSAoZnNjYW5mKGZwLCAiJSpzICUiCisJCSAgICAgIFNUUihNQVhfUEFUSCkKKwkJICAgICAgInMgJTk5cyAlKnMgJSpkICUqZFxuIiwKKwkJICAgICAgaHdwb2lzb25fZGVidWdfZnMsIHR5cGUpID09IDIpIHsKKwkJaWYgKHN0cmNtcCh0eXBlLCAiZGVidWdmcyIpID09IDApCisJCQlicmVhazsKKwl9CisJZmNsb3NlKGZwKTsKKworCWlmIChzdHJjbXAodHlwZSwgImRlYnVnZnMiKSAhPSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBod3BvaXNvbl9kZWJ1Z19mczsKK30KKworLyogbW91bnQgdGhlIGRlYnVnZnMgc29tZXdoZXJlIGlmIGl0J3Mgbm90IG1vdW50ZWQgKi8KKworc3RhdGljIHZvaWQgZGVidWdmc19tb3VudCh2b2lkKQoreworCWNvbnN0IGNoYXIgKipwdHI7CisKKwkvKiBzZWUgaWYgaXQncyBhbHJlYWR5IG1vdW50ZWQgKi8KKwlpZiAoZGVidWdmc19maW5kX21vdW50cG9pbnQoKSkKKwkJcmV0dXJuOworCisJcHRyID0gZGVidWdmc19rbm93bl9tb3VudHBvaW50czsKKwl3aGlsZSAoKnB0cikgeworCQlpZiAobW91bnQoTlVMTCwgKnB0ciwgImRlYnVnZnMiLCAwLCBOVUxMKSA9PSAwKSB7CisJCQkvKiBzYXZlIHRoZSBtb3VudHBvaW50ICovCisJCQlzdHJjcHkoaHdwb2lzb25fZGVidWdfZnMsICpwdHIpOworCQkJYnJlYWs7CisJCX0KKwkJcHRyKys7CisJfQorCisJaWYgKCpwdHIgPT0gTlVMTCkgeworCQlwZXJyb3IoIm1vdW50IGRlYnVnZnMiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKwogLyoKICAqIHBhZ2UgYWN0aW9ucwogICovCiAKIHN0YXRpYyB2b2lkIHByZXBhcmVfaHdwb2lzb25fZmQodm9pZCkKIHsKLQljaGFyIGJ1ZlsxMDBdOworCWNoYXIgYnVmW01BWF9QQVRIICsgMV07CisKKwlkZWJ1Z2ZzX21vdW50KCk7CiAKIAlpZiAob3B0X2h3cG9pc29uICYmICFod3BvaXNvbl9pbmplY3RfZmQpIHsKLQkJc3ByaW50ZihidWYsICIlcy9jb3JydXB0LXBmbiIsIGh3cG9pc29uX2RlYnVnX2ZzKTsKKwkJc25wcmludGYoYnVmLCBNQVhfUEFUSCwgIiVzL2h3cG9pc29uL2NvcnJ1cHQtcGZuIiwKKwkJCWh3cG9pc29uX2RlYnVnX2ZzKTsKIAkJaHdwb2lzb25faW5qZWN0X2ZkID0gY2hlY2tlZF9vcGVuKGJ1ZiwgT19XUk9OTFkpOwogCX0KIAogCWlmIChvcHRfdW5wb2lzb24gJiYgIWh3cG9pc29uX2ZvcmdldF9mZCkgewotCQlzcHJpbnRmKGJ1ZiwgIiVzL3VucG9pc29uLXBmbiIsIGh3cG9pc29uX2RlYnVnX2ZzKTsKKwkJc25wcmludGYoYnVmLCBNQVhfUEFUSCwgIiVzL2h3cG9pc29uL3VucG9pc29uLXBmbiIsCisJCQlod3BvaXNvbl9kZWJ1Z19mcyk7CiAJCWh3cG9pc29uX2ZvcmdldF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS50eHQKaW5kZXggMmQ3MGQwZC4uOTdiYWUzYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS91bmV2aWN0YWJsZS1scnUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vdW5ldmljdGFibGUtbHJ1LnR4dApAQCAtODQsOCArODQsNyBAQAogCiBUaGUgUEdfdW5ldmljdGFibGUgZmxhZyBpcyBhbmFsb2dvdXMgdG8sIGFuZCBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCwgdGhlCiBQR19hY3RpdmUgZmxhZyBpbiB0aGF0IGl0IGluZGljYXRlcyBvbiB3aGljaCBMUlUgbGlzdCBhIHBhZ2UgcmVzaWRlcyB3aGVuCi1QR19scnUgaXMgc2V0LiAgVGhlIHVuZXZpY3RhYmxlIGxpc3QgaXMgY29tcGlsZS10aW1lIGNvbmZpZ3VyYWJsZSBiYXNlZCBvbiB0aGUKLVVORVZJQ1RBQkxFX0xSVSBLY29uZmlnIG9wdGlvbi4KK1BHX2xydSBpcyBzZXQuCiAKIFRoZSBVbmV2aWN0YWJsZSBMUlUgaW5mcmFzdHJ1Y3R1cmUgbWFpbnRhaW5zIHVuZXZpY3RhYmxlIHBhZ2VzIG9uIGFuIGFkZGl0aW9uYWwKIExSVSBsaXN0IGZvciBhIGZldyByZWFzb25zOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAppbmRleCA3ZmJiYWY4Li4wOTJlNTk2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtMTg5LDEzICsxODksMTMgQEAKIAogUENJCiAKLSAgcGNpPW9mZglEb24ndCB1c2UgUENJCi0gIHBjaT1jb25mMQlVc2UgY29uZjEgYWNjZXNzLgotICBwY2k9Y29uZjIJVXNlIGNvbmYyIGFjY2Vzcy4KLSAgcGNpPXJvbQlBc3NpZ24gUk9Ncy4KLSAgcGNpPWFzc2lnbi1idXNzZXMgICAgQXNzaWduIGJ1c3NlcwotICBwY2k9aXJxbWFzaz1NQVNLCSAgICAgICBTZXQgUENJIGludGVycnVwdCBtYXNrIHRvIE1BU0sKLSAgcGNpPWxhc3RidXM9TlVNQkVSCSAgICAgICBTY2FuIHVwdG8gTlVNQkVSIGJ1c3Nlcywgbm8gbWF0dGVyIHdoYXQgdGhlIG1wdGFibGUgc2F5cy4KKyAgcGNpPW9mZgkJRG9uJ3QgdXNlIFBDSQorICBwY2k9Y29uZjEJCVVzZSBjb25mMSBhY2Nlc3MuCisgIHBjaT1jb25mMgkJVXNlIGNvbmYyIGFjY2Vzcy4KKyAgcGNpPXJvbQkJQXNzaWduIFJPTXMuCisgIHBjaT1hc3NpZ24tYnVzc2VzCUFzc2lnbiBidXNzZXMKKyAgcGNpPWlycW1hc2s9TUFTSwlTZXQgUENJIGludGVycnVwdCBtYXNrIHRvIE1BU0sKKyAgcGNpPWxhc3RidXM9TlVNQkVSCVNjYW4gdXAgdG8gTlVNQkVSIGJ1c3Nlcywgbm8gbWF0dGVyIHdoYXQgdGhlIG1wdGFibGUgc2F5cy4KICAgcGNpPW5vYWNwaQkJRG9uJ3QgdXNlIEFDUEkgdG8gc2V0IHVwIFBDSSBpbnRlcnJ1cHQgcm91dGluZy4KIAogSU9NTVUgKGlucHV0L291dHB1dCBtZW1vcnkgbWFuYWdlbWVudCB1bml0KQpAQCAtMjkzLDExICsyOTMsNiBAQAogCiBEZWJ1Z2dpbmcKIAotICBvb3BzPXBhbmljCUFsd2F5cyBwYW5pYyBvbiBvb3BzZXMuIERlZmF1bHQgaXMgdG8ganVzdCBraWxsIHRoZSBwcm9jZXNzLAotCQlidXQgdGhlcmUgaXMgYSBzbWFsbCBwcm9iYWJpbGl0eSBvZiBkZWFkbG9ja2luZyB0aGUgbWFjaGluZS4KLQkJVGhpcyB3aWxsIGFsc28gY2F1c2UgcGFuaWNzIG9uIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9ucy4KLQkJVXNlZnVsIHRvZ2V0aGVyIHdpdGggcGFuaWM9MzAgdG8gdHJpZ2dlciBhIHJlYm9vdC4KLQogICBrc3RhY2s9TglQcmludCBOIHdvcmRzIGZyb20gdGhlIGtlcm5lbCBzdGFjayBpbiBvb3BzIGR1bXBzLgogCiAgIHBhZ2VmYXVsdHRyYWNlICBEdW1wIGFsbCBwYWdlIGZhdWx0cy4gT25seSB1c2VmdWwgZm9yIGV4dHJlbWUgZGVidWdnaW5nCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGFiNjFmYjQuLmUxMTk1M2QgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC03Miw3ICs3Miw3IEBACiAJTDogTWFpbGluZyBsaXN0IHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBhcmVhCiAJVzogV2ViLXBhZ2Ugd2l0aCBzdGF0dXMvaW5mbwogCVE6IFBhdGNod29yayB3ZWIgYmFzZWQgcGF0Y2ggdHJhY2tpbmcgc3lzdGVtIHNpdGUKLQlUOiBTQ00gdHJlZSB0eXBlIGFuZCBsb2NhdGlvbi4gIFR5cGUgaXMgb25lIG9mOiBnaXQsIGhnLCBxdWlsdCwgc3RnaXQuCisJVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LCB0b3BnaXQuCiAJUzogU3RhdHVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAkgICBTdXBwb3J0ZWQ6CVNvbWVvbmUgaXMgYWN0dWFsbHkgcGFpZCB0byBsb29rIGFmdGVyIHRoaXMuCiAJICAgTWFpbnRhaW5lZDoJU29tZW9uZSBhY3R1YWxseSBsb29rcyBhZnRlciBpdC4KQEAgLTE5OCw3ICsxOTgsNyBAQAogRjoJZHJpdmVycy9zY3NpL2FhY3JhaWQvCiAKIEFCSVQgVUdVUlUgMSwyIEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCi1NOglIYW5zIGRlIEdvZWRlIDxqLncuci5kZWdvZWRlQGhocy5ubD4KK006CUhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiBMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jCkBAIC0yODgsMzUgKzI4OCwzNSBAQAogQUQ1MjVYIEFOQUxPRyBERVZJQ0VTIERJR0lUQUwgUE9URU5USU9NRVRFUlMgRFJJVkVSCiBNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KIEw6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKLVc6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQUQ1MjU0CitXOglodHRwOi8vd2lraS5hbmFsb2cuY29tL0FENTI1NAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL21pc2MvYWQ1MjV4X2Rwb3QuYwogCiBBRDUzOTggQ1VSUkVOVCBSRUdVTEFUT1IgRFJJVkVSIChBRDUzOTgvQUQ1ODIxKQogTToJTWljaGFlbCBIZW5uZXJpY2ggPG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20+CiBMOglkZXZpY2UtZHJpdmVyLWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnCi1XOglodHRwOi8vd2lraS1hbmFsb2cuY29tL0FENTM5OAorVzoJaHR0cDovL3dpa2kuYW5hbG9nLmNvbS9BRDUzOTgKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9yZWd1bGF0b3IvYWQ1Mzk4LmMKIAogQUQ3MTRYIENBUEFDSVRBTkNFIFRPVUNIIFNFTlNPUiBEUklWRVIgKEFENzE0Mi8zLzcvOC83QSkKIE06CU1pY2hhZWwgSGVubmVyaWNoIDxtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tPgogTDoJZGV2aWNlLWRyaXZlci1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZwotVzoJaHR0cDovL3dpa2ktYW5hbG9nLmNvbS9BRDcxNDIKK1c6CWh0dHA6Ly93aWtpLmFuYWxvZy5jb20vQUQ3MTQyCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHguYwogCiBBRDc4NzcgVE9VQ0hTQ1JFRU4gRFJJVkVSCiBNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KIEw6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKLVc6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQUQ3ODc3CitXOglodHRwOi8vd2lraS5hbmFsb2cuY29tL0FENzg3NwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3Ny5jCiAKIEFENzg3OSBUT1VDSFNDUkVFTiBEUklWRVIgKEFENzg3OS9BRDc4ODkpCiBNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KIEw6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKLVc6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQUQ3ODc5CitXOglodHRwOi8vd2lraS5hbmFsb2cuY29tL0FENzg3OQogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCiAKQEAgLTM0MiwxOCArMzQyLDE4IEBACiBBRFA1NTIwIEJBQ0tMSUdIVCBEUklWRVIgV0lUSCBJTyBFWFBBTkRFUiAoQURQNTUyMC9BRFA1NTAxKQogTToJTWljaGFlbCBIZW5uZXJpY2ggPG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20+CiBMOglkZXZpY2UtZHJpdmVyLWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnCi1XOglodHRwOi8vd2lraS1hbmFsb2cuY29tL0FEUDU1MjAKK1c6CWh0dHA6Ly93aWtpLmFuYWxvZy5jb20vQURQNTUyMAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL21mZC9hZHA1NTIwLmMKIEY6CWRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDU1MjBfYmwuYwotRjoJZHJpdmVycy9sZWQvbGVkcy1hZHA1NTIwLmMKK0Y6CWRyaXZlcnMvbGVkcy9sZWRzLWFkcDU1MjAuYwogRjoJZHJpdmVycy9ncGlvL2FkcDU1MjAtZ3Bpby5jCiBGOglkcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1MjAta2V5cy5jCiAKIEFEUDU1ODggUVdFUlRZIEtFWVBBRCBBTkQgSU8gRVhQQU5ERVIgRFJJVkVSIChBRFA1NTg4L0FEUDU1ODcpCiBNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KIEw6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKLVc6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQURQNTU4OAorVzoJaHR0cDovL3dpa2kuYW5hbG9nLmNvbS9BRFA1NTg4CiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWRwNTU4OC1rZXlzLmMKIEY6CWRyaXZlcnMvZ3Bpby9hZHA1NTg4LWdwaW8uYwpAQCAtMzYxLDEwICszNjEsMTggQEAKIEFEUDg4NjAgQkFDS0xJR0hUIERSSVZFUiAoQURQODg2MC9BRFA4ODYxL0FEUDg4NjMpCiBNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KIEw6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKLVc6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQURQODg2MAorVzoJaHR0cDovL3dpa2kuYW5hbG9nLmNvbS9BRFA4ODYwCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NjBfYmwuYwogCitBRFMxMDE1IEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCitNOglEaXJrIEVpYmFjaCA8ZWliYWNoQGdkc3lzLmRlPgorTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZworUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9od21vbi9hZHMxMDE1CitGOglkcml2ZXJzL2h3bW9uL2FkczEwMTUuYworRjoJaW5jbHVkZS9saW51eC9pMmMvYWRzMTAxNS5oCisKIEFEVDc0NlggRkFOIERSSVZFUgogTToJQ29saW4gTGVyb3kgPGNvbGluQGNvbGluby5uZXQ+CiBTOglNYWludGFpbmVkCkBAIC0zODAsNyArMzg4LDcgQEAKIEFEWEwzNFggVEhSRUUtQVhJUyBESUdJVEFMIEFDQ0VMRVJPTUVURVIgRFJJVkVSIChBRFhMMzQ1L0FEWEwzNDYpCiBNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KIEw6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKLVc6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQURYTDM0NQorVzoJaHR0cDovL3dpa2kuYW5hbG9nLmNvbS9BRFhMMzQ1CiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LmMKIApAQCAtNTIwLDExICs1MjgsOSBAQAogQU5BTE9HIERFVklDRVMgSU5DIEFTT0MgQ09ERUMgRFJJVkVSUwogTDoJZGV2aWNlLWRyaXZlci1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZwogTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVc6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vCitXOglodHRwOi8vd2lraS5hbmFsb2cuY29tLwogUzoJU3VwcG9ydGVkCiBGOglzb3VuZC9zb2MvY29kZWNzL2FkMSoKLUY6CXNvdW5kL3NvYy9jb2RlY3MvYWRhdSoKLUY6CXNvdW5kL3NvYy9jb2RlY3MvYWRhdioKIEY6CXNvdW5kL3NvYy9jb2RlY3Mvc3NtKgogCiBBTkFMT0cgREVWSUNFUyBJTkMgQVNPQyBEUklWRVJTCkBAIC02ODksOCArNjk1LDggQEAKIEFSTS9DTEtERVYgU1VQUE9SVAogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLUY6CWFyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwogRjoJYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmgKK0Y6CWRyaXZlcnMvY2xrL2Nsa2Rldi5jCiAKIEFSTS9DT01QVUxBQiBDTS1YMjcwL0VNLVgyNzAgYW5kIENNLVgzMDAgTUFDSElORSBTVVBQT1JUCiBNOglNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgpAQCAtOTExLDYgKzkxNyw3IEBACiBGOglkcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmgKIEY6CWRyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmgKIEY6CWRyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmMKK0Y6CWRyaXZlcnMvcGxhdGZvcm0vbXNtLwogVDoJZ2l0IGdpdDovL2NvZGVhdXJvcmEub3JnL3F1aWMva2VybmVsL2RhdmlkYi9saW51eC1tc20uZ2l0CiBTOglNYWludGFpbmVkCiAKQEAgLTEwNzAsNyArMTA3Nyw3IEBACiBTOglNYWludGFpbmVkCiAKIEFSTS9URVRPTiBCR0EgTUFDSElORSBTVVBQT1JUCi1NOglNYXJrIEYuIEJyb3duIDxtYXJrLmJyb3duMzE0QGdtYWlsLmNvbT4KK006CSJNYXJrIEYuIEJyb3duIiA8bWFyay5icm93bjMxNEBnbWFpbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCkBAIC0xNDc0LDcgKzE0ODEsNyBAQAogCiBCTFVFVE9PVEggRFJJVkVSUwogTToJTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgotTToJR3VzdGF2byBGLiBQYWRvdmFuIDxwYWRvdmFuQHByb2Z1c2lvbi5tb2JpPgorTToJIkd1c3Rhdm8gRi4gUGFkb3ZhbiIgPHBhZG92YW5AcHJvZnVzaW9uLm1vYmk+CiBMOglsaW51eC1ibHVldG9vdGhAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmJsdWV6Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcGFkb3Zhbi9ibHVldG9vdGgtMi42LmdpdApAQCAtMTQ4Myw3ICsxNDkwLDcgQEAKIAogQkxVRVRPT1RIIFNVQlNZU1RFTQogTToJTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgotTToJR3VzdGF2byBGLiBQYWRvdmFuIDxwYWRvdmFuQHByb2Z1c2lvbi5tb2JpPgorTToJIkd1c3Rhdm8gRi4gUGFkb3ZhbiIgPHBhZG92YW5AcHJvZnVzaW9uLm1vYmk+CiBMOglsaW51eC1ibHVldG9vdGhAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmJsdWV6Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcGFkb3Zhbi9ibHVldG9vdGgtMi42LmdpdApAQCAtMjEzMCw2ICsyMTM3LDEyIEBACiBGOglkcml2ZXJzL2NoYXIvZXBjYSoKIEY6CWRyaXZlcnMvY2hhci9kaWdpKgogCitESU9MQU4gVTJDLTEyIEkyQyBEUklWRVIKK006CUd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kaW9sYW4tdTJjLmMKKwogRElSRUNUT1JZIE5PVElGSUNBVElPTiAoRE5PVElGWSkKIE06CUVyaWMgUGFyaXMgPGVwYXJpc0BwYXJpc3BsYWNlLm9yZz4KIFM6CU1haW50YWluZWQKQEAgLTIzNzYsNyArMjM4OSw3IEBACiAKIEVEQUMtSTgyOTc1WAogTToJUmFuZ2FuYXRoYW4gRGVzaWthbiA8cmF2aUBqZXR6dGVjaG5vbG9naWVzLmNvbT4KLU06CSJBcnZpbmQgUi4iIDxhcnZpbmRAamV0enRlY2hub2xvZ2llcy5jb20+CitNOgkiQXJ2aW5kIFIuIiA8YXJ2aW5vNTVAZ21haWwuY29tPgogTDoJYmx1ZXNtb2tlLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglibHVlc21va2Uuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCkBAIC0yNDY3LDggKzI0ODAsNyBAQAogRU5FIEtCMjQyNiAoRU5FMDEwMC9FTkUwMjBYWCkgSU5GUkFSRUQgUkVDRUlWRVIKIE06CU1heGltIExldml0c2t5IDxtYXhpbWxldml0c2t5QGdtYWlsLmNvbT4KIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbWVkaWEvSVIvZW5lX2lyLmMKLUY6CWRyaXZlcnMvbWVkaWEvSVIvZW5lX2lyLmgKK0Y6CWRyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLioKIAogRVBTT04gMTM1NSBGUkFNRUJVRkZFUiBEUklWRVIKIE06CUNocmlzdG9waGVyIEhvb3ZlciA8Y2hAbXVyZ2F0cm9pZC5jb20+CkBAIC0yODEyLDcgKzI4MjQsNiBAQAogCiBHUElPIFNVQlNZU1RFTQogTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGdpdDovL2dpdC5zZWNyZXRsYWIuY2EvZ2l0L2xpbnV4LTIuNi5naXQKIEY6CURvY3VtZW50YXRpb24vZ3Bpby9ncGlvLnR4dApAQCAtMjgzNSw3ICsyODQ2LDYgQEAKIEhXUE9JU09OIE1FTU9SWSBGQUlMVVJFIEhBTkRMSU5HCiBNOglBbmRpIEtsZWVuIDxhbmRpQGZpcnN0Zmxvb3Iub3JnPgogTDoJbGludXgtbW1Aa3ZhY2sub3JnCi1MOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrL2xpbnV4LW1jZS0yLjYuZ2l0IGh3cG9pc29uCiBTOglNYWludGFpbmVkCiBGOgltbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0yOTM2LDcgKzI5NDYsNyBAQAogRjoJZHJpdmVycy9ibG9jay9jcHFhcnJheS4qCiAKIEhFV0xFVFQtUEFDS0FSRCBTTUFSVCBBUlJBWSBSQUlEIERSSVZFUiAoaHBzYSkKLU06CVN0ZXBoZW4gTS4gQ2FtZXJvbiA8c2NhbWVyb25AYmVhcmRvZy5jY2UuaHAuY29tPgorTToJIlN0ZXBoZW4gTS4gQ2FtZXJvbiIgPHNjYW1lcm9uQGJlYXJkb2cuY2NlLmhwLmNvbT4KIEw6CWlzc19zdG9yYWdlZGV2QGhwLmNvbQogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL3Njc2kvaHBzYS50eHQKQEAgLTI5OTMsNyArMzAwMyw3IEBACiBGOglrZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCiBGOglrZXJuZWwvdGltZS90aWNrKi4qCiBGOglrZXJuZWwvdGltZS90aW1lcl8qLmMKLUYJaW5jbHVkZS9saW51eC9jbG9ja2V2ZW50cy5oCitGOglpbmNsdWRlL2xpbnV4L2Nsb2NrZXZlbnRzLmgKIEY6CWluY2x1ZGUvbGludXgvaHJ0aW1lci5oCiAKIEhJR0gtU1BFRUQgU0NDIERSSVZFUiBGT1IgQVguMjUKQEAgLTMxNjYsMTUgKzMxNzYsNiBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2lkbGUvaTczMDBfaWRsZS5jCiAKLUlFRUUgMTM5NCBTVUJTWVNURU0KLU06CVN0ZWZhbiBSaWNodGVyIDxzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlPgotTDoJbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL2llZWUxMzk0Lndpa2kua2VybmVsLm9yZy8KLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKLVM6CU9ic29sZXRlCi1GOglEb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0Ci1GOglkcml2ZXJzL2llZWUxMzk0LwotCiBJRUVFIDgwMi4xNS40IFNVQlNZU1RFTQogTToJRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgogTToJU2VyZ2V5IExhcGluIDxzbGFwaW5Ab3NzZmFucy5vcmc+CkBAIC0zNDcyLDYgKzM0NzMsNyBAQAogSVJEQSBTVUJTWVNURU0KIE06CVNhbXVlbCBPcnRpeiA8c2FtdWVsQHNvcnRpei5vcmc+CiBMOglpcmRhLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8KIFM6CU1haW50YWluZWQKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc2FtZW8vaXJkYS0yLjYuZ2l0CkBAIC0zOTA5LDYgKzM5MTEsMTIgQEAKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvY2hyaXN3L2xzbS0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIAorTElTM0xWMDJEIEFDQ0VMRVJPTUVURVIgRFJJVkVSCitNOglFcmljIFBpZWwgPGVyaWMucGllbEB0cmVtcGxpbi11dGMubmV0PgorUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbGlzM2x2MDJkCitGOglkcml2ZXJzL21pc2MvbGlzM2x2MDJkLworCiBMTEMgKDgwMi4yKQogTToJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGdob3N0cHJvdG9jb2xzLm5ldD4KIFM6CU1haW50YWluZWQKQEAgLTM5MTYsMTIgKzM5MjQsNiBAQAogRjoJaW5jbHVkZS9uZXQvbGxjKgogRjoJbmV0L2xsYy8KIAotTElTM0xWMDJEIEFDQ0VMRVJPTUVURVIgRFJJVkVSCi1NOglFcmljIFBpZWwgPGVyaWMucGllbEB0cmVtcGxpbi11dGMubmV0PgotUzoJTWFpbnRhaW5lZAotRjoJRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQKLUY6CWRyaXZlcnMvaHdtb24vbGlzM2x2MDJkLioKLQogTE03MyBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgogTToJR3VpbGxhdW1lIExpZ25ldWwgPGd1aWxsYXVtZS5saWduZXVsQGdtYWlsLmNvbT4KIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKQEAgLTQyMTcsNyArNDIxOSw3IEBACiBGOglkcml2ZXJzL2NoYXIvbXhzZXIuKgogCiBNU0kgTEFQVE9QIFNVUFBPUlQKLU06CUxlZSwgQ2h1bi1ZaSA8amxlZUBub3ZlbGwuY29tPgorTToJIkxlZSwgQ2h1bi1ZaSIgPGpsZWVAbm92ZWxsLmNvbT4KIEw6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktbGFwdG9wLmMKQEAgLTQ1MTAsMTEgKzQ1MTIsMjEgQEAKIEY6CWFyY2gvYXJtLypvbWFwKi8qY2xvY2sqCiAKIE9NQVAgUE9XRVIgTUFOQUdFTUVOVCBTVVBQT1JUCi1NOglLZXZpbiBIaWxtYW4gPGtoaWxtYW5AZGVlcHJvb3RzeXN0ZW1zLmNvbT4KK006CUtldmluIEhpbG1hbiA8a2hpbG1hbkB0aS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vKm9tYXAqLypwbSoKIAorT01BUCBQT1dFUkRPTUFJTi9DTE9DS0RPTUFJTiBTT0MgQURBUFRBVElPTiBMQVlFUiBTVVBQT1JUCitNOglSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KK006CVBhdWwgV2FsbXNsZXkgPHBhdWxAcHdzYW4uY29tPgorTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4yeHh4XzN4eHguYworRjoJYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjQ0eHguYworRjoJYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbjJ4eHhfM3h4eC5jCitGOglhcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluNDR4eC5jCisKIE9NQVAgQVVESU8gU1VQUE9SVAogTToJSmFya2tvIE5pa3VsYSA8amhuaWt1bGFAZ21haWwuY29tPgogTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChzdWJzY3JpYmVycy1vbmx5KQpAQCAtNDcwMiw3ICs0NzE0LDYgQEAKIAogUEFEQVRBIFBBUkFMTEVMIEVYRUNVVElPTiBNRUNIQU5JU00KIE06CVN0ZWZmZW4gS2xhc3NlcnQgPHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20+Ci1MOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1jcnlwdG9Admdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglrZXJuZWwvcGFkYXRhLmMKQEAgLTQ4NTIsNyArNDg2Myw2IEBACiBQRVItQ1BVIE1FTU9SWSBBTExPQ0FUT1IKIE06CVRlanVuIEhlbyA8dGpAa2VybmVsLm9yZz4KIE06CUNocmlzdG9waCBMYW1ldGVyIDxjbEBsaW51eC1mb3VuZGF0aW9uLm9yZz4KLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGovcGVyY3B1LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJaW5jbHVkZS9saW51eC9wZXJjcHUqLmgKQEAgLTUzOTgsNiArNTQwOCwxMiBAQAogUzoJU3VwcG9ydGVkCiBGOglzb3VuZC9zb2Mvc2Ftc3VuZwogCitTRVJJQUwgRFJJVkVSUworTToJQWxhbiBDb3ggPGFsYW5AbGludXguaW50ZWwuY29tPgorTDoJbGludXgtc2VyaWFsQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy90dHkvc2VyaWFsCisKIFRJTUVLRUVQSU5HLCBOVFAKIE06CUpvaG4gU3R1bHR6IDxqb2huc3R1bEB1cy5pYm0uY29tPgogTToJVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CkBAIC01NDA1LDcgKzU0MjEsNiBAQAogRjoJaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCiBGOglpbmNsdWRlL2xpbnV4L3RpbWUuaAogRjoJaW5jbHVkZS9saW51eC90aW1leC5oCi1GOglpbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmgKIEY6CWtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKIEY6CWtlcm5lbC90aW1lL3RpbWUqLmMKIEY6CWtlcm5lbC90aW1lL250cC5jCkBAIC01NDkzLDcgKzU1MDgsNyBAQAogTToJSmltIENyb21pZSA8amltLmNyb21pZUBnbWFpbC5jb20+CiBTOglPZGQgRml4ZXMKIEY6CURvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9zY3gyMDBfYWNiCi1GOglhcmNoL3g4Ni9rZXJuZWwvc2N4MjAwXzMyLmMKK0Y6CWFyY2gveDg2L3BsYXRmb3JtL3NjeDIwMC8KIEY6CWRyaXZlcnMvd2F0Y2hkb2cvc2N4MjAwX3dkdC5jCiBGOglkcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwKgogRjoJZHJpdmVycy9tdGQvbWFwcy9zY3gyMDBfZG9jZmxhc2guYwpAQCAtNTYzNywyNCArNTY1MiwxMyBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9taXNjL3NnaS14cC8KIAotU0hBUlAgTEggU1VQUE9SVCAoTEg3OTUyWCAmIExIN0E0MFgpCi1NOglNYXJjIFNpbmdlciA8ZWxmQGJ1aWNpLmNvbT4KLVc6CWh0dHA6Ly9wcm9qZWN0cy5idWljaS5jb20vYXJtCi1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJTWFpbnRhaW5lZAotRjoJRG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvQURDLUxINy1Ub3VjaHNjcmVlbgotRjoJYXJjaC9hcm0vbWFjaC1saDdhNDB4LwotRjoJZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKLUY6CWRyaXZlcnMvdXNiL2dhZGdldC9saDdhNDAqCi1GOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwKgotCiBTSU1QTEUgRklSTVdBUkUgSU5URVJGQUNFIChTRkkpCiBNOglMZW4gQnJvd24gPGxlbmJAa2VybmVsLm9yZz4KIEw6CXNmaS1kZXZlbEBzaW1wbGVmaXJtd2FyZS5vcmcKIFc6CWh0dHA6Ly9zaW1wbGVmaXJtd2FyZS5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xlbmIvbGludXgtc2ZpLTIuNi5naXQKIFM6CVN1cHBvcnRlZAotRjoJYXJjaC94ODYva2VybmVsLypzZmkqCitGOglhcmNoL3g4Ni9wbGF0Zm9ybS9zZmkvCiBGOglkcml2ZXJzL3NmaS8KIEY6CWluY2x1ZGUvbGludXgvc2ZpKi5oCiAKQEAgLTU2NzYsNyArNTY4MCw4IEBACiBGOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYwogCiBUSSBEQVZJTkNJIE1BQ0hJTkUgU1VQUE9SVAotTToJS2V2aW4gSGlsbWFuIDxraGlsbWFuQGRlZXByb290c3lzdGVtcy5jb20+CitNOglTZWtoYXIgTm9yaSA8bnNla2hhckB0aS5jb20+CitNOglLZXZpbiBIaWxtYW4gPGtoaWxtYW5AdGkuY29tPgogTDoJZGF2aW5jaS1saW51eC1vcGVuLXNvdXJjZUBsaW51eC5kYXZpbmNpZHNwLmNvbSAoc3Vic2NyaWJlcnMtb25seSkKIFE6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LWRhdmluY2kvbGlzdC8KIFM6CVN1cHBvcnRlZApAQCAtNTc1MSw2ICs1NzU2LDEzIEBACiBGOglEb2N1bWVudGF0aW9uL2h3bW9uL2VtYzIxMDMKIEY6CWRyaXZlcnMvaHdtb24vZW1jMjEwMy5jCiAKK1NNU0MgU0NINTYyNyBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgorTToJSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KK0w6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKK1M6CVN1cHBvcnRlZAorRjoJRG9jdW1lbnRhdGlvbi9od21vbi9zY2g1NjI3CitGOglkcml2ZXJzL2h3bW9uL3NjaDU2MjcuYworCiBTTVNDNDdCMzk3IEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCiBNOgkiTWFyayBNLiBIb2ZmbWFuIiA8bWhvZmZtYW5AbGlnaHRsaW5rLmNvbT4KIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKQEAgLTYxMTYsNiArNjEyOCw3IEBACiBGOglhcmNoL3RpbGUvCiBGOglkcml2ZXJzL3R0eS9odmMvaHZjX3RpbGUuYwogRjoJZHJpdmVycy9uZXQvdGlsZS8KK0Y6CWRyaXZlcnMvZWRhYy90aWxlX2VkYWMuYwogCiBUTEFOIE5FVFdPUksgRFJJVkVSCiBNOglTYW11ZWwgQ2hlc3NtYW4gPGNoZXNzbWFuQHR1eC5vcmc+CkBAIC02NDUzLDEyICs2NDY2LDExIEBACiBGOglkcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCiAKIFVTQiBTRTQwMSBEUklWRVIKLU06CUplcm9lbiBWcmVla2VuIDxwZTFyeHFAYW1zYXQub3JnPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5jaGVsbG8ubmwvfmoudnJlZWtlbi9zZTQwMS8KLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zZTQwMS50eHQKLUY6CWRyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuKgorRjoJZHJpdmVycy9zdGFnaW5nL3NlNDAxLwogCiBVU0IgU0VSSUFMIEJFTEtJTiBGNVUxMDMgRFJJVkVSCiBNOglXaWxsaWFtIEdyZWF0aG91c2UgPHdncmVhdGhvdXNlQHNtdmEuY29tPgpAQCAtNjgwOCw3ICs2ODIwLDcgQEAKIFdJTkJPTkQgQ0lSIERSSVZFUgogTToJRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4KIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jCitGOglkcml2ZXJzL21lZGlhL3JjL3dpbmJvbmQtY2lyLmMKIAogV0lNQVggU1RBQ0sKIE06CUluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CkBAIC02ODg1LDcgKzY4OTcsNiBAQAogCiBXT1JLUVVFVUUKIE06CVRlanVuIEhlbyA8dGpAa2VybmVsLm9yZz4KLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGovd3EuZ2l0CiBTOglNYWludGFpbmVkCiBGOglpbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGQ2NTkyYjYuLjdkNGU5YzggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xMDIsNiArMTAyLDEwIEBACiAgIEtCVUlMRF9PVVRQVVQgOj0gJChPKQogZW5kaWYKIAoraWZlcSAoIiQob3JpZ2luIFcpIiwgImNvbW1hbmQgbGluZSIpCisgIGV4cG9ydCBLQlVJTERfRU5BQkxFX0VYVFJBX0dDQ19DSEVDS1MgOj0gMQorZW5kaWYKKwogIyBUaGF0J3Mgb3VyIGRlZmF1bHQgdGFyZ2V0IHdoZW4gbm9uZSBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lCiBQSE9OWSA6PSBfYWxsCiBfYWxsOgpAQCAtNDIxLDcgKzQyNSw3IEBACiAjIG9mIG1ha2Ugc28gLmNvbmZpZyBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyBjYXNlIGVpdGhlciAoZm9yICpjb25maWcpLgogCiBuby1kb3QtY29uZmlnLXRhcmdldHMgOj0gY2xlYW4gbXJwcm9wZXIgZGlzdGNsZWFuIFwKLQkJCSBjc2NvcGUgVEFHUyB0YWdzIGhlbHAgJWRvY3MgY2hlY2slIGNvY2NpY2hlY2sgXAorCQkJIGNzY29wZSBndGFncyBUQUdTIHRhZ3MgaGVscCAlZG9jcyBjaGVjayUgY29jY2ljaGVjayBcCiAJCQkgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggaGVhZGVyc18lIFwKIAkJCSBrZXJuZWx2ZXJzaW9uICVzcmMtcGtnCiAKQEAgLTY2Niw3ICs2NzAsNyBAQAogIyAgSU5TVEFMTF9NT0RfU1RSSVAsIGlmIGRlZmluZWQsIHdpbGwgY2F1c2UgbW9kdWxlcyB0byBiZQogIyAgc3RyaXBwZWQgYWZ0ZXIgdGhleSBhcmUgaW5zdGFsbGVkLiAgSWYgSU5TVEFMTF9NT0RfU1RSSVAgaXMgJzEnLCB0aGVuCiAjICB0aGUgZGVmYXVsdCBvcHRpb24gLS1zdHJpcC1kZWJ1ZyB3aWxsIGJlIHVzZWQuICBPdGhlcndpc2UsCi0jICBJTlNUQUxMX01PRF9TVFJJUCB3aWxsIHVzZWQgYXMgdGhlIG9wdGlvbnMgdG8gdGhlIHN0cmlwIGNvbW1hbmQuCisjICBJTlNUQUxMX01PRF9TVFJJUCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIG9wdGlvbnMgdG8gdGhlIHN0cmlwIGNvbW1hbmQuCiAKIGlmZGVmIElOU1RBTExfTU9EX1NUUklQCiBpZmVxICgkKElOU1RBTExfTU9EX1NUUklQKSwxKQpAQCAtMTAxOCw3ICsxMDIyLDcgQEAKIAogUEhPTlkgKz0gX19oZWFkZXJzCiBfX2hlYWRlcnM6IGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIHNjcmlwdHNfYmFzaWMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT1zY3JpcHRzIHNjcmlwdHMvdW5pZmRlZgorCSQoUSkkKE1BS0UpICQoYnVpbGQpPXNjcmlwdHMgYnVpbGRfdW5pZmRlZgogCiBQSE9OWSArPSBoZWFkZXJzX2luc3RhbGxfYWxsCiBoZWFkZXJzX2luc3RhbGxfYWxsOgpAQCAtMTEzNSw3ICsxMTM5LDcgQEAKIE1SUFJPUEVSX0RJUlMgICs9IGluY2x1ZGUvY29uZmlnIHVzci9pbmNsdWRlIGluY2x1ZGUvZ2VuZXJhdGVkCiBNUlBST1BFUl9GSUxFUyArPSAuY29uZmlnIC5jb25maWcub2xkIC52ZXJzaW9uIC5vbGRfdmVyc2lvbiAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCSAgTW9kdWxlLnN5bXZlcnMgdGFncyBUQUdTIGNzY29wZSoKKwkJICBNb2R1bGUuc3ltdmVycyB0YWdzIFRBR1MgY3Njb3BlKiBHUEFUSCBHVEFHUyBHUlRBR1MgR1NZTVMKIAogIyBjbGVhbiAtIERlbGV0ZSBtb3N0LCBidXQgbGVhdmUgZW5vdWdoIHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKICMKQEAgLTEyMjIsNiArMTIyNiw3IEBACiAJQGVjaG8gICcgIG1vZHVsZXNfcHJlcGFyZSAtIFNldCB1cCBmb3IgYnVpbGRpbmcgZXh0ZXJuYWwgbW9kdWxlcycKIAlAZWNobyAgJyAgdGFncy9UQUdTCSAgLSBHZW5lcmF0ZSB0YWdzIGZpbGUgZm9yIGVkaXRvcnMnCiAJQGVjaG8gICcgIGNzY29wZQkgIC0gR2VuZXJhdGUgY3Njb3BlIGluZGV4JworCUBlY2hvICAnICBndGFncyAgICAgICAgICAgLSBHZW5lcmF0ZSBHTlUgR0xPQkFMIGluZGV4JwogCUBlY2hvICAnICBrZXJuZWxyZWxlYXNlCSAgLSBPdXRwdXQgdGhlIHJlbGVhc2UgdmVyc2lvbiBzdHJpbmcnCiAJQGVjaG8gICcgIGtlcm5lbHZlcnNpb24JICAtIE91dHB1dCB0aGUgdmVyc2lvbiBzdG9yZWQgaW4gTWFrZWZpbGUnCiAJQGVjaG8gICcgIGhlYWRlcnNfaW5zdGFsbCAtIEluc3RhbGwgc2FuaXRpc2VkIGtlcm5lbCBoZWFkZXJzIHRvIElOU1RBTExfSERSX1BBVEgnOyBcCkBAIC0xMjYyLDYgKzEyNjcsNyBAQAogCUBlY2hvICAnICBtYWtlIE89ZGlyIFt0YXJnZXRzXSBMb2NhdGUgYWxsIG91dHB1dCBmaWxlcyBpbiAiZGlyIiwgaW5jbHVkaW5nIC5jb25maWcnCiAJQGVjaG8gICcgIG1ha2UgQz0xICAgW3RhcmdldHNdIENoZWNrIGFsbCBjIHNvdXJjZSB3aXRoICQkQ0hFQ0sgKHNwYXJzZSBieSBkZWZhdWx0KScKIAlAZWNobyAgJyAgbWFrZSBDPTIgICBbdGFyZ2V0c10gRm9yY2UgY2hlY2sgb2YgYWxsIGMgc291cmNlIHdpdGggJCRDSEVDSycKKwlAZWNobyAgJyAgbWFrZSBXPTEgICBbdGFyZ2V0c10gRW5hYmxlIGV4dHJhIGdjYyBjaGVja3MnCiAJQGVjaG8gICcnCiAJQGVjaG8gICdFeGVjdXRlICJtYWtlIiBvciAibWFrZSBhbGwiIHRvIGJ1aWxkIGFsbCB0YXJnZXRzIG1hcmtlZCB3aXRoIFsqXSAnCiAJQGVjaG8gICdGb3IgZnVydGhlciBpbmZvIHNlZSB0aGUgLi9SRUFETUUgZmlsZScKQEAgLTEzODAsNyArMTM4Niw3IEBACiBxdWlldF9jbWRfdGFncyA9IEdFTiAgICAgJEAKICAgICAgIGNtZF90YWdzID0gJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy90YWdzLnNoICRACiAKLXRhZ3MgVEFHUyBjc2NvcGU6IEZPUkNFCit0YWdzIFRBR1MgY3Njb3BlIGd0YWdzOiBGT1JDRQogCSQoY2FsbCBjbWQsdGFncykKIAogIyBTY3JpcHRzIHRvIGNoZWNrIHZhcmlvdXMgdGhpbmdzIGZvciBjb25zaXN0ZW5jeQpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDFiODFkMjguLjg1MTAwMTcgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTI0LDcgKzI0LDcgQEAKICAgdG9kYXkgTGludXggYWxzbyBydW5zIG9uIChhdCBsZWFzdCkgdGhlIENvbXBhcSBBbHBoYSBBWFAsIFN1biBTUEFSQyBhbmQKICAgVWx0cmFTUEFSQywgTW90b3JvbGEgNjgwMDAsIFBvd2VyUEMsIFBvd2VyUEM2NCwgQVJNLCBIaXRhY2hpIFN1cGVySCwgQ2VsbCwKICAgSUJNIFMvMzkwLCBNSVBTLCBIUCBQQS1SSVNDLCBJbnRlbCBJQS02NCwgREVDIFZBWCwgQU1EIHg4Ni02NCwgQVhJUyBDUklTLAotICBYdGVuc2EsIEFWUjMyIGFuZCBSZW5lc2FzIE0zMlIgYXJjaGl0ZWN0dXJlcy4KKyAgWHRlbnNhLCBUaWxlcmEgVElMRSwgQVZSMzIgYW5kIFJlbmVzYXMgTTMyUiBhcmNoaXRlY3R1cmVzLgogCiAgIExpbnV4IGlzIGVhc2lseSBwb3J0YWJsZSB0byBtb3N0IGdlbmVyYWwtcHVycG9zZSAzMi0gb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMKICAgYXMgbG9uZyBhcyB0aGV5IGhhdmUgYSBwYWdlZCBtZW1vcnkgbWFuYWdlbWVudCB1bml0IChQTU1VKSBhbmQgYSBwb3J0IG9mIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggYWRmYWI4YS4uODViODE1MiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC00NTQsMTMgKzQ1NCwxMSBAQAogCXJldHVybiBfX2Zmcyh0bXApICsgb2ZzOwogfQogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogCiAjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobCxuLGEpICAgdGVzdF9hbmRfc2V0X2JpdChuLGEpCiAjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsLG4sYSkgdGVzdF9hbmRfY2xlYXJfYml0KG4sYSkKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX0FMUEhBX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDAxMmYxMjQuLmE5Y2I2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC02Myw3ICs2Myw3IEBACiAJCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pOwogI2VuZGlmCiAKLS8qIFRoaXMgaXMgdXNlZCBvbmx5IGluIGRvX25vX3BhZ2UgYW5kIGRvX3N3YXBfcGFnZS4gICovCisvKiBUaGlzIGlzIHVzZWQgb25seSBpbiBfX2RvX2ZhdWx0IGFuZCBkb19zd2FwX3BhZ2UuICAqLwogI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBhZ2UpIFwKICAgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2UoKHZtYSksIChwYWdlKSwgMCwgMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IGJkNjIxZWMuLjg4MTU0NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTIwLDE2ICsyMCw0IEBACiB0eXBlZGVmIHVuc2lnbmVkIGludCB1bW9kZV90OwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLS8qCi0gKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcwotICovCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotdHlwZWRlZiB1NjQgZG1hX2FkZHJfdDsKLXR5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQUxQSEFfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZjc4NWI0OS4uOTNkNTk1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC02MjksNiArNjI5LDcgQEAKIAlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUXVhbGNvbW0gTVNNL1FTRCBiYXNlZCBzeXN0ZW1zLiAgVGhpcyBydW5zIG9uIHRoZQogCSAgYXBwcyBwcm9jZXNzb3Igb2YgdGhlIE1TTS9RU0QgYW5kIGRlcGVuZHMgb24gYSBzaGFyZWQgbWVtb3J5CkBAIC03MjUsNyArNzI2LDggQEAKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IEhBVkVfUzNDMjQxMF9XQVRDSERPRyBpZiBXQVRDSERPRwotCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEhBVkVfU0NIRURfQ0xPQ0sKIAlzZWxlY3QgSEFWRV9TM0MyNDEwX0kyQyBpZiBJMkMKIAlzZWxlY3QgSEFWRV9TM0NfUlRDIGlmIFJUQ19DTEFTUwogCWhlbHAKQEAgLTc2MywxNSArNzY1LDE2IEBACiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IEFSTV9MMV9DQUNIRV9TSElGVF82CiAJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKLQlzZWxlY3QgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBIQVZFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IEhBVkVfUzNDMjQxMF9JMkMgaWYgSTJDCiAJc2VsZWN0IEhBVkVfUzNDX1JUQyBpZiBSVENfQ0xBU1MKIAlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HIGlmIFdBVENIRE9HCiAJaGVscAogCSAgU2Ftc3VuZyBTNVBWMjEwL1M1UEMxMTAgc2VyaWVzIGJhc2VkIHN5c3RlbXMKIAotY29uZmlnIEFSQ0hfUzVQVjMxMAotCWJvb2wgIlNhbXN1bmcgUzVQVjMxMC9TNVBDMjEwIgorY29uZmlnIEFSQ0hfRVhZTk9TNAorCWJvb2wgIlNhbXN1bmcgRVhZTk9TNCIKIAlzZWxlY3QgQ1BVX1Y3CiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBHRU5FUklDX0dQSU8KQEAgLTc4Miw3ICs3ODUsNyBAQAogCXNlbGVjdCBIQVZFX1MzQzI0MTBfSTJDIGlmIEkyQwogCXNlbGVjdCBIQVZFX1MzQzI0MTBfV0FUQ0hET0cgaWYgV0FUQ0hET0cKIAloZWxwCi0JICBTYW1zdW5nIFM1UFYzMTAgc2VyaWVzIGJhc2VkIHN5c3RlbXMKKwkgIFNhbXN1bmcgRVhZTk9TNCBzZXJpZXMgYmFzZWQgc3lzdGVtcwogCiBjb25maWcgQVJDSF9TSEFSSwogCWJvb2wgIlNoYXJrIgpAQCAtOTk2LDcgKzk5OSw3IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zNXB2MjEwL0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtZXh5bm9zNC9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZyIKIApAQCAtMTMxOSw3ICsxMzIyLDcgQEAKIAlkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgUkVBTFZJRVdfRUJfQTlNUCB8fCBcCiAJCSBNQUNIX1JFQUxWSUVXX1BCMTFNUCB8fCBNQUNIX1JFQUxWSUVXX1BCWCB8fCBBUkNIX09NQVA0IHx8IFwKLQkJIEFSQ0hfUzVQVjMxMCB8fCBBUkNIX1RFR1JBIHx8IEFSQ0hfVTg1MDAgfHwgQVJDSF9WRVhQUkVTU19DQTlYNCB8fCBcCisJCSBBUkNIX0VYWU5PUzQgfHwgQVJDSF9URUdSQSB8fCBBUkNIX1U4NTAwIHx8IEFSQ0hfVkVYUFJFU1NfQ0E5WDQgfHwgXAogCQkgQVJDSF9NU01fU0NPUlBJT05NUCB8fCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCiAJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiAhQVJDSF9NU01fU0NPUlBJT05NUApAQCAtMTQwNyw3ICsxNDEwLDcgQEAKIAlib29sICJVc2UgbG9jYWwgdGltZXIgaW50ZXJydXB0cyIKIAlkZXBlbmRzIG9uIFNNUAogCWRlZmF1bHQgeQotCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgIUFSQ0hfTVNNX1NDT1JQSU9OTVAKKwlzZWxlY3QgSEFWRV9BUk1fVFdEIGlmICghQVJDSF9NU01fU0NPUlBJT05NUCAmJiAhRVhZTk9TNF9NQ1QpCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGxvY2FsIHRpbWVycyBvbiBTTVAgcGxhdGZvcm1zLCByYXRoZXIgdGhlbiB0aGUKIAkgIGxlZ2FjeSBJUEkgYnJvYWRjYXN0IG1ldGhvZC4gIExvY2FsIHRpbWVycyBhbGxvd3MgdGhlIHN5c3RlbQpAQCAtMTQxOSw3ICsxNDIyLDcgQEAKIGNvbmZpZyBIWgogCWludAogCWRlZmF1bHQgMjAwIGlmIEFSQ0hfRUJTQTExMCB8fCBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TNVA2NFgwIHx8IFwKLQkJQVJDSF9TNVA2NDQyIHx8IEFSQ0hfUzVQVjIxMCB8fCBBUkNIX1M1UFYzMTAKKwkJQVJDSF9TNVA2NDQyIHx8IEFSQ0hfUzVQVjIxMCB8fCBBUkNIX0VYWU5PUzQKIAlkZWZhdWx0IE9NQVBfMzJLX1RJTUVSX0haIGlmIEFSQ0hfT01BUCAmJiBPTUFQXzMyS19USU1FUgogCWRlZmF1bHQgQVQ5MV9USU1FUl9IWiBpZiBBUkNIX0FUOTEKIAlkZWZhdWx0IFNITU9CSUxFX1RJTUVSX0haIGlmIEFSQ0hfU0hNT0JJTEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggNWM3MTE0Yi4uYzdkMzIxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTE4MSw3ICsxODEsNyBAQAogbWFjaGluZS0kKENPTkZJR19BUkNIX1M1UDY0NDIpCQk6PSBzNXA2NDQyCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzVQQzEwMCkJCTo9IHM1cGMxMDAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TNVBWMjEwKQkJOj0gczVwdjIxMAotbWFjaGluZS0kKENPTkZJR19BUkNIX1M1UFYzMTApCQk6PSBzNXB2MzEwCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfRVhZTk9TNCkJCTo9IGV4eW5vczQKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TQTExMDApCQk6PSBzYTExMDAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TSEFSSykJCTo9IHNoYXJrCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpIAk6PSBzaG1vYmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGY5Zjc3YzYuLjhlYmJiNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTk1LDggKzk1LDggQEAKIEtCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKIGVuZGlmCiAKLUVYVFJBX0NGTEFHUyAgOj0gLWZwaWMgLWZuby1idWlsdGluCi1FWFRSQV9BRkxBR1MgIDo9IC1XYSwtbWFyY2g9YWxsCitjY2ZsYWdzLXkgOj0gLWZwaWMgLWZuby1idWlsdGluCithc2ZsYWdzLXkgOj0gLVdhLC1tYXJjaD1hbGwKIAogIyBQcm92aWRlIHNpemUgb2YgdW5jb21wcmVzc2VkIGtlcm5lbCB0byB0aGUgZGVjb21wcmVzc29yIHZpYSBhIGxpbmtlciBzeW1ib2wuCiBMREZMQUdTX3ZtbGludXggPSAtLWRlZnN5bSBfaW1hZ2Vfc2l6ZT0kKHNoZWxsIHN0YXQgLWMgIiVzIiAkKG9iaikvLi4vSW1hZ2UpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2V4eW5vczRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9leHlub3M0X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZiYTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9leHlub3M0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDcwIEBACitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VYWU5PUzQ9eQorQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQ9MQorQ09ORklHX01BQ0hfU01ES0MyMTA9eQorQ09ORklHX01BQ0hfU01ES1YzMTA9eQorQ09ORklHX01BQ0hfVU5JVkVSU0FMX0MyMTA9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfSE9UUExVR19DUFU9eQorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyByYW1kaXNrPTgxOTIgaW5pdHJkPTB4NDEwMDAwMDAsOE0gY29uc29sZT10dHlTQUMxLDExNTIwMCBpbml0PS9saW51eHJjIG1lbT0yNTZNIgorQ09ORklHX1ZGUD15CitDT05GSUdfTkVPTj15CitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX1NDU0k9eQorQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF9TQU1TVU5HPXkKK0NPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFPXkKK0NPTkZJR19IV19SQU5ET009eQorQ09ORklHX0kyQz15CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfUk9NRlNfRlM9eQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CitDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKK0NPTkZJR19ERUJVR19MTD15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19ERUJVR19TM0NfVUFSVD0xCitDT05GSUdfQ1JDX0NDSVRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKaW5kZXggMmY3MDQyOC4uYWViM2FmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKQEAgLTI0LDYgKzI0LDcgQEAKIENPTkZJR19NQUNIX05FVFNQQUNFX1YyPXkKIENPTkZJR19NQUNIX0lORVRTUEFDRV9WMj15CiBDT05GSUdfTUFDSF9ORVRTUEFDRV9NQVhfVjI9eQorQ09ORklHX01BQ0hfRDJORVRfVjI9eQogQ09ORklHX01BQ0hfTkVUMkJJR19WMj15CiBDT05GSUdfTUFDSF9ORVQ1QklHX1YyPXkKIENPTkZJR19NQUNIX1Q1MzI1PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXg1MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214NTFfZGVmY29uZmlnCmluZGV4IDljYmE2OGMuLmUzYzkwMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXg1MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDUxX2RlZmNvbmZpZwpAQCAtMTEwLDcgKzExMCw3IEBACiBDT05GSUdfTU1DX0JMT0NLPW0KIENPTkZJR19NTUNfU0RIQ0k9bQogQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPW0KK0NPTkZJR19MRURTX0NMQVNTPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15CiBDT05GSUdfRVhUMl9GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcKaW5kZXggYWU4OTBjYS4uMDE5ZmI3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZwpAQCAtNTgsNiArNTgsNyBAQAogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCiAjIENPTkZJR19MT0NBTF9USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0FFQUJJPXkKIENPTkZJR19MRURTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwNjR4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3M1cDY0eDBfZGVmY29uZmlnCmluZGV4IDI5OTNlY2QuLmFkNmI2MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwNjR4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zNXA2NHgwX2RlZmNvbmZpZwpAQCAtMTAsNiArMTAsOCBAQAogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQ9MQogQ09ORklHX01BQ0hfU01ESzY0NDA9eQogQ09ORklHX01BQ0hfU01ESzY0NTA9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQUVBQkk9eQogQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9yYW0wIHJ3IHJhbWRpc2s9ODE5MiBpbml0cmQ9MHgyMDgwMDAwMCw4TSBjb25zb2xlPXR0eVNBQzEsMTE1MjAwIGluaXQ9L2xpbnV4cmMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3M1cHYyMTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zNXB2MjEwX2RlZmNvbmZpZwppbmRleCAwNDg4YTFlLi5mYTk4OTkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3M1cHYyMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwdjIxMF9kZWZjb25maWcKQEAgLTEzLDYgKzEzLDggQEAKIENPTkZJR19NQUNIX0dPTkk9eQogQ09ORklHX01BQ0hfU01ES0MxMTA9eQogQ09ORklHX01BQ0hfU01ES1YyMTA9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX1ZNU1BMSVRfMkc9eQogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0FFQUJJPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggYWY1NGVkMS4uNmI3NDAzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTI4Nyw0MSArMjg3LDYzIEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogCi0vKgotICogRXh0MiBpcyBkZWZpbmVkIHRvIHVzZSBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXJpbmcuCi0gKiBUaGVzZSBkbyBub3QgbmVlZCB0byBiZSBhdG9taWMuCi0gKi8KLSNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLHApCQkJXAotCQlfX3Rlc3RfYW5kX3NldF9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKLSNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLG5yLHApICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0ZXN0X2FuZF9zZXRfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCi0jZGVmaW5lIGV4dDJfY2xlYXJfYml0KG5yLHApCQkJXAotCQlfX3Rlc3RfYW5kX2NsZWFyX2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQotI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jayxucixwKSAgICAgICAgXAotICAgICAgICAgICAgICAgIHRlc3RfYW5kX2NsZWFyX2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQotI2RlZmluZSBleHQyX3Rlc3RfYml0KG5yLHApCQkJXAotCQl0ZXN0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQotI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQocCxzeikJCVwKLQkJX2ZpbmRfZmlyc3RfemVyb19iaXRfbGUocCxzeikKLSNkZWZpbmUgZXh0Ml9maW5kX25leHRfemVyb19iaXQocCxzeixvZmYpCVwKLQkJX2ZpbmRfbmV4dF96ZXJvX2JpdF9sZShwLHN6LG9mZikKLSNkZWZpbmUgZXh0Ml9maW5kX25leHRfYml0KHAsIHN6LCBvZmYpIFwKLQkJX2ZpbmRfbmV4dF9iaXRfbGUocCwgc3osIG9mZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCV9fc2V0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCV9fY2xlYXJfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfc2V0X2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIF9fdGVzdF9hbmRfc2V0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0X2xlKGludCBuciwgdm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIF9fdGVzdF9hbmRfY2xlYXJfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2JpdF9sZShpbnQgbnIsIGNvbnN0IHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfZmlyc3RfemVyb19iaXRfbGUoY29uc3Qgdm9pZCAqcCwgdW5zaWduZWQgc2l6ZSkKK3sKKwlyZXR1cm4gX2ZpbmRfZmlyc3RfemVyb19iaXRfbGUocCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF96ZXJvX2JpdF9sZShjb25zdCB2b2lkICpwLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gX2ZpbmRfbmV4dF96ZXJvX2JpdF9sZShwLCBzaXplLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYml0X2xlKGNvbnN0IHZvaWQgKnAsIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworCXJldHVybiBfZmluZF9uZXh0X2JpdF9sZShwLCBzaXplLCBvZmZzZXQpOworfQogCiAvKgotICogTWluaXggaXMgZGVmaW5lZCB0byB1c2UgbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyaW5nLgotICogVGhlc2UgZG8gbm90IG5lZWQgdG8gYmUgYXRvbWljLgorICogRXh0MiBpcyBkZWZpbmVkIHRvIHVzZSBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXJpbmcuCiAgKi8KLSNkZWZpbmUgbWluaXhfc2V0X2JpdChucixwKQkJCVwKLQkJX19zZXRfYml0KFdPUkRfQklUT0ZGX1RPX0xFKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikocCkpCi0jZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLHApCQkJXAotCQl0ZXN0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQotI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLHApCQlcCi0JCV9fdGVzdF9hbmRfc2V0X2JpdChXT1JEX0JJVE9GRl9UT19MRShuciksICh1bnNpZ25lZCBsb25nICopKHApKQotI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIscCkJCVwKLQkJX190ZXN0X2FuZF9jbGVhcl9iaXQoV09SRF9CSVRPRkZfVE9fTEUobnIpLCAodW5zaWduZWQgbG9uZyAqKShwKSkKLSNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChwLHN6KQkJXAotCQlfZmluZF9maXJzdF96ZXJvX2JpdF9sZShwLHN6KQorI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssIG5yLCBwKQlcCisJCXRlc3RfYW5kX3NldF9iaXRfbGUobnIsIHApCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLCBuciwgcCkJXAorCQl0ZXN0X2FuZF9jbGVhcl9iaXRfbGUobnIsIHApCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rZXhlYy5oCmluZGV4IGMwMDk0ZDguLmMyYjliNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2tleGVjLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtNTAsNiArNTAsOSBAQAogCX0KIH0KIAorLyogRnVuY3Rpb24gcG9pbnRlciB0byBvcHRpb25hbCBtYWNoaW5lLXNwZWNpZmljIHJlaW5pdGlhbGl6YXRpb24gKi8KK2V4dGVybiB2b2lkICgqa2V4ZWNfcmVpbml0KSh2b2lkKTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogQ09ORklHX0tFWEVDICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCmluZGV4IDhjY2VhMDEuLjc1NDRjZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCkBAIC0xMiwxMSArMTIsMjUgQEAKICNpZm5kZWYgX19BUk1fUE1VX0hfXwogI2RlZmluZSBfX0FSTV9QTVVfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKwogZW51bSBhcm1fcG11X3R5cGUgewogCUFSTV9QTVVfREVWSUNFX0NQVQk9IDAsCiAJQVJNX05VTV9QTVVfREVWSUNFUywKIH07CiAKKy8qCisgKiBzdHJ1Y3QgYXJtX3BtdV9wbGF0ZGF0YSAtIEFSTSBQTVUgcGxhdGZvcm0gZGF0YQorICoKKyAqIEBoYW5kbGVfaXJxOiBhbiBvcHRpb25hbCBoYW5kbGVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBhbmQKKyAqIHBhc3NlZCB0aGUgYWRkcmVzcyBvZiB0aGUgbG93IGxldmVsIGhhbmRsZXIsIGFuZCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQKKyAqIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBoYW5kbGluZyBiZWZvcmUgb3IgYWZ0ZXIgY2FsbGluZyBpdC4KKyAqLworc3RydWN0IGFybV9wbXVfcGxhdGRhdGEgeworCWlycXJldHVybl90ICgqaGFuZGxlX2lycSkoaW50IGlycSwgdm9pZCAqZGV2LAorCQkJCSAgaXJxX2hhbmRsZXJfdCBwbXVfaGFuZGxlcik7Cit9OworCiAjaWZkZWYgQ09ORklHX0NQVV9IQVNfUE1VCiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggMzQ1ZGYwMS4uNDgxOTJhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC0xNiwxNSArMTYsNiBAQAogCiAjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogRG1hIGFkZHJlc3NlcyBhcmUgMzItYml0cyB3aWRlLiAgKi8KLQotdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKLXR5cGVkZWYgdTMyIGRtYTY0X2FkZHJfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL2FybS9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IGNkM2I4NTMuLjkwYzUwZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtMTgsOSArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0vKiBzdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZSAqLwotdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7Ci0KIC8qKgogICogY29weV9vbGRtZW1fcGFnZSgpIC0gY29weSBvbmUgcGFnZSBmcm9tIG9sZCBrZXJuZWwgbWVtb3J5CiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL2FybS9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDMwZWFkMTMuLmU1OWJiZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtNzUsNiArNzUsMTEgQEAKIAlwcmludGsoS0VSTl9JTkZPICJMb2FkaW5nIGNyYXNoZHVtcCBrZXJuZWwuLi5cbiIpOwogfQogCisvKgorICogRnVuY3Rpb24gcG9pbnRlciB0byBvcHRpb25hbCBtYWNoaW5lLXNwZWNpZmljIHJlaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZCAoKmtleGVjX3JlaW5pdCkodm9pZCk7CisKIHZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBhZ2VfbGlzdDsKQEAgLTEwNCw2ICsxMDksOCBAQAogCQkJICAgKHVuc2lnbmVkIGxvbmcpIHJlYm9vdF9jb2RlX2J1ZmZlciArIEtFWEVDX0NPTlRST0xfUEFHRV9TSVpFKTsKIAlwcmludGsoS0VSTl9JTkZPICJCeWUhXG4iKTsKIAorCWlmIChrZXhlY19yZWluaXQpCisJCWtleGVjX3JlaW5pdCgpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJbG9jYWxfZmlxX2Rpc2FibGUoKTsKIAlzZXR1cF9tbV9mb3JfcmVib290KDApOyAvKiBtb2RlIGlzIG5vdCB1c2VkLCBzbyBqdXN0IHBhc3MgMCovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBkMTUwYWQxLi4yMmUxOTRlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0zNzcsOSArMzc3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBhcm1wbXVfcGxhdGZvcm1faXJxKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgYXJtX3BtdV9wbGF0ZGF0YSAqcGxhdCA9IGRldl9nZXRfcGxhdGRhdGEoJnBtdV9kZXZpY2UtPmRldik7CisKKwlyZXR1cm4gcGxhdC0+aGFuZGxlX2lycShpcnEsIGRldiwgYXJtcG11LT5oYW5kbGVfaXJxKTsKK30KKwogc3RhdGljIGludAogYXJtcG11X3Jlc2VydmVfaGFyZHdhcmUodm9pZCkKIHsKKwlzdHJ1Y3QgYXJtX3BtdV9wbGF0ZGF0YSAqcGxhdDsKKwlpcnFfaGFuZGxlcl90IGhhbmRsZV9pcnE7CiAJaW50IGksIGVyciA9IC1FTk9ERVYsIGlycTsKIAogCXBtdV9kZXZpY2UgPSByZXNlcnZlX3BtdShBUk1fUE1VX0RFVklDRV9DUFUpOwpAQCAtMzkwLDYgKzM5OSwxMiBAQAogCiAJaW5pdF9wbXUoQVJNX1BNVV9ERVZJQ0VfQ1BVKTsKIAorCXBsYXQgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwbXVfZGV2aWNlLT5kZXYpOworCWlmIChwbGF0ICYmIHBsYXQtPmhhbmRsZV9pcnEpCisJCWhhbmRsZV9pcnEgPSBhcm1wbXVfcGxhdGZvcm1faXJxOworCWVsc2UKKwkJaGFuZGxlX2lycSA9IGFybXBtdS0+aGFuZGxlX2lycTsKKwogCWlmIChwbXVfZGV2aWNlLT5udW1fcmVzb3VyY2VzIDwgMSkgewogCQlwcl9lcnIoIm5vIGlycXMgZm9yIFBNVXMgZGVmaW5lZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNDAwLDcgKzQxNSw3IEBACiAJCWlmIChpcnEgPCAwKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gcmVxdWVzdF9pcnEoaXJxLCBhcm1wbXUtPmhhbmRsZV9pcnEsCisJCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgaGFuZGxlX2lycSwKIAkJCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HLAogCQkJCSAgImFybXBtdSIsIE5VTEwpOwogCQlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IGQxNDk1MzkuLjAwNmMxZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC03ODksMzAgKzc4OSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXJ2ZV9jcmFzaGtlcm5lbCh2b2lkKSB7fQogI2VuZGlmIC8qIENPTkZJR19LRVhFQyAqLwogCi0vKgotICogTm90ZTogZWxmY29yZWhkcl9hZGRyIGlzIG5vdCBqdXN0IGxpbWl0ZWQgdG8gdm1jb3JlLiBJdCBpcyBhbHNvIHVzZWQgYnkKLSAqIGlzX2tkdW1wX2tlcm5lbCgpIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYm9vdGluZyBhZnRlciBhIHBhbmljLiBIZW5jZQotICogaWZkZWYgaXQgdW5kZXIgQ09ORklHX0NSQVNIX0RVTVAgYW5kIG5vdCBDT05GSUdfUFJPQ19WTUNPUkUuCi0gKi8KLQotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCi0vKgotICogZWxmY29yZWhkcj0gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBlbGYgY29yZSBoZWFkZXIgc3RvcmVkIGJ5IHRoZSBjcmFzaGVkCi0gKiBrZXJuZWwuIFRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkIGJ5IGtleGVjIGxvYWRlciB0byB0aGUgY2FwdHVyZSBrZXJuZWwuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2VsZmNvcmVoZHIoY2hhciAqYXJnKQotewotCWNoYXIgKmVuZDsKLQotCWlmICghYXJnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKGFyZywgJmVuZCk7Ci0JcmV0dXJuIGVuZCA+IGFyZyA/IDAgOiAtRUlOVkFMOwotfQotZWFybHlfcGFyYW0oImVsZmNvcmVoZHIiLCBzZXR1cF9lbGZjb3JlaGRyKTsKLSNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqLwotCiBzdGF0aWMgdm9pZCBfX2luaXQgc3F1YXNoX21lbV90YWdzKHN0cnVjdCB0YWcgKnRhZykKIHsKIAlmb3IgKDsgdGFnLT5oZHIuc2l6ZTsgdGFnID0gdGFnX25leHQodGFnKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYwppbmRleCBiNTJhM2ExLi44YmMzNzAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4MzAtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODMwLWV2bS5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTMwLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxtYWNoL2RhOHh4Lmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KICNpbmNsdWRlIDxtYWNoL2FlbWlmLmg+CisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KIAogI2RlZmluZSBEQTgzMF9FVk1fUEhZX0lECQkiIgogLyoKQEAgLTUzNCw2ICs1MzcsNjQgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGRhODMwZXZtX3NwaWZsYXNoX3BhcnRbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lID0gIkRTUC1VQkwiLAorCQkub2Zmc2V0ID0gMCwKKwkJLnNpemUgPSBTWl84SywKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAorCX0sCisJWzFdID0geworCQkubmFtZSA9ICJBUk0tVUJMIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBTWl8xNksgKyBTWl84SywKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAorCX0sCisJWzJdID0geworCQkubmFtZSA9ICJVLUJvb3QiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IFNaXzI1NksgLSBTWl8zMkssCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUgPSAiVS1Cb290LUVudmlyb25tZW50IiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBTWl8xNkssCisJCS5tYXNrX2ZsYWdzID0gMCwKKwl9LAorCVs0XSA9IHsKKwkJLm5hbWUgPSAiS2VybmVsIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncyA9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBkYTgzMGV2bV9zcGlmbGFzaF9kYXRhID0geworCS5uYW1lCQk9ICJtMjVwODAiLAorCS5wYXJ0cwkJPSBkYTgzMGV2bV9zcGlmbGFzaF9wYXJ0LAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZGE4MzBldm1fc3BpZmxhc2hfcGFydCksCisJLnR5cGUJCT0gIncyNXgzMiIsCit9OworCitzdGF0aWMgc3RydWN0IGRhdmluY2lfc3BpX2NvbmZpZyBkYTgzMGV2bV9zcGlmbGFzaF9jZmcgPSB7CisJLmlvX3R5cGUJPSBTUElfSU9fVFlQRV9ETUEsCisJLmMydGRlbGF5CT0gOCwKKwkudDJjZGVsYXkJPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBkYTgzMGV2bV9zcGlfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJtMjVwODAiLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZGE4MzBldm1fc3BpZmxhc2hfZGF0YSwKKwkJLmNvbnRyb2xsZXJfZGF0YQk9ICZkYTgzMGV2bV9zcGlmbGFzaF9jZmcsCisJCS5tb2RlCQkJPSBTUElfTU9ERV8wLAorCQkubWF4X3NwZWVkX2h6CQk9IDMwMDAwMDAwLAorCQkuYnVzX251bQkJPSAwLAorCQkuY2hpcF9zZWxlY3QJCT0gMCwKKwl9LAorfTsKKwogc3RhdGljIF9faW5pdCB2b2lkIGRhODMwX2V2bV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRhdmluY2lfc29jX2luZm8gKnNvY19pbmZvID0gJmRhdmluY2lfc29jX2luZm87CkBAIC01OTAsNiArNjUxLDEyIEBACiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfcnRjKCk7CiAJaWYgKHJldCkKIAkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IHJ0YyBzZXR1cCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfc3BpKDAsIGRhODMwZXZtX3NwaV9pbmZvLAorCQkJCSBBUlJBWV9TSVpFKGRhODMwZXZtX3NwaV9pbmZvKSk7CisJaWYgKHJldCkKKwkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IHNwaSAwIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkJICAgcmV0KTsKIH0KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKaW5kZXggYjAxZmIyYS4uYTdiNDFiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL3RwczY1MDd4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvdHBzNjUwN3gtdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM4LDYgKzQwLDcgQEAKICNpbmNsdWRlIDxtYWNoL25hbmQuaD4KICNpbmNsdWRlIDxtYWNoL211eC5oPgogI2luY2x1ZGUgPG1hY2gvYWVtaWYuaD4KKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCiAjZGVmaW5lIERBODUwX0VWTV9QSFlfSUQJCSIwOjAwIgogI2RlZmluZSBEQTg1MF9MQ0RfUFdSX1BJTgkJR1BJT19UT19QSU4oMiwgOCkKQEAgLTQ4LDYgKzUxLDcwIEBACiAKICNkZWZpbmUgREE4NTBfTUlJX01ESU9fQ0xLRU5fUElOCUdQSU9fVE9fUElOKDIsIDYpCiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBkYTg1MGV2bV9zcGlmbGFzaF9wYXJ0W10gPSB7CisJWzBdID0geworCQkubmFtZSA9ICJVQkwiLAorCQkub2Zmc2V0ID0gMCwKKwkJLnNpemUgPSBTWl82NEssCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgPSAiVS1Cb290IiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBTWl81MTJLLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lID0gIlUtQm9vdC1FbnYiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IFNaXzY0SywKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAorCX0sCisJWzNdID0geworCQkubmFtZSA9ICJLZXJuZWwiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IFNaXzJNICsgU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MgPSAwLAorCX0sCisJWzRdID0geworCQkubmFtZSA9ICJGaWxlc3lzdGVtIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBTWl80TSwKKwkJLm1hc2tfZmxhZ3MgPSAwLAorCX0sCisJWzVdID0geworCQkubmFtZSA9ICJNQUMtQWRkcmVzcyIsCisJCS5vZmZzZXQgPSBTWl84TSAtIFNaXzY0SywKKwkJLnNpemUgPSBTWl82NEssCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGRhODUwZXZtX3NwaWZsYXNoX2RhdGEgPSB7CisJLm5hbWUJCT0gIm0yNXA4MCIsCisJLnBhcnRzCQk9IGRhODUwZXZtX3NwaWZsYXNoX3BhcnQsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShkYTg1MGV2bV9zcGlmbGFzaF9wYXJ0KSwKKwkudHlwZQkJPSAibTI1cDY0IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9zcGlfY29uZmlnIGRhODUwZXZtX3NwaWZsYXNoX2NmZyA9IHsKKwkuaW9fdHlwZQk9IFNQSV9JT19UWVBFX0RNQSwKKwkuYzJ0ZGVsYXkJPSA4LAorCS50MmNkZWxheQk9IDgsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGRhODUwZXZtX3NwaV9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMJCT0gIm0yNXA4MCIsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYTg1MGV2bV9zcGlmbGFzaF9kYXRhLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJmRhODUwZXZtX3NwaWZsYXNoX2NmZywKKwkJLm1vZGUJCQk9IFNQSV9NT0RFXzAsCisJCS5tYXhfc3BlZWRfaHoJCT0gMzAwMDAwMDAsCisJCS5idXNfbnVtCQk9IDEsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGE4NTBfZXZtX25vcmZsYXNoX3BhcnRpdGlvbltdID0gewogCXsKIAkJLm5hbWUgICAgICAgICAgID0gImJvb3Rsb2FkZXJzICsgZW52IiwKQEAgLTIzMSw4ICsyOTgsNiBAQAogCS0xCiB9OwogCi1zdGF0aWMgdTMyIHVpX2NhcmRfZGV0ZWN0ZWQ7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19NTUNfREFWSU5DSSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01NQ19EQVZJTkNJX01PRFVMRSkKICNkZWZpbmUgSEFTX01NQyAxCkBAIC0yNDQsNyArMzA5LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICh1aV9jYXJkX2RldGVjdGVkICYgIUhBU19NTUMpIHsKKwlpZiAoIUhBU19NTUMpIHsKIAkJcmV0ID0gZGF2aW5jaV9jZmdfcmVnX2xpc3QoZGE4NTBfZXZtX25hbmRfcGlucyk7CiAJCWlmIChyZXQpCiAJCQlwcl93YXJuaW5nKCJkYTg1MF9ldm1faW5pdDogbmFuZCBtdXggc2V0dXAgZmFpbGVkOiAiCkBAIC0zOTQsNyArNDU5LDYgQEAKIAkJZ290byBleHBfc2V0dXBfa2V5c19mYWlsOwogCX0KIAotCXVpX2NhcmRfZGV0ZWN0ZWQgPSAxOwogCXByX2luZm8oIkRBODUwL09NQVAtTDEzOCBFVk0gVUkgY2FyZCBkZXRlY3RlZFxuIik7CiAKIAlkYTg1MF9ldm1fc2V0dXBfbm9yX25hbmQoKTsKQEAgLTY2NCw2ICs3MjgsMTMgQEAKIAkucnhudW1ldnQJPSAxLAogfTsKIAorc3RhdGljIGNvbnN0IHNob3J0IGRhODUwX2V2bV9tY2FzcF9waW5zW10gX19pbml0Y29uc3QgPSB7CisJREE4NTBfQUhDTEtYLCBEQTg1MF9BQ0xLWCwgREE4NTBfQUZTWCwKKwlEQTg1MF9BSENMS1IsIERBODUwX0FDTEtSLCBEQTg1MF9BRlNSLCBEQTg1MF9BTVVURSwKKwlEQTg1MF9BWFJfMTEsIERBODUwX0FYUl8xMiwKKwktMQorfTsKKwogc3RhdGljIGludCBkYTg1MF9ldm1fbW1jX2dldF9ybyhpbnQgaW5kZXgpCiB7CiAJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKERBODUwX01NQ1NEX1dQX1BJTik7CkBAIC02ODMsNiArNzU0LDEzIEBACiAJLnZlcnNpb24JPSBNTUNfQ1RMUl9WRVJTSU9OXzIsCiB9OwogCitzdGF0aWMgY29uc3Qgc2hvcnQgZGE4NTBfZXZtX21tY3NkMF9waW5zW10gX19pbml0Y29uc3QgPSB7CisJREE4NTBfTU1DU0QwX0RBVF8wLCBEQTg1MF9NTUNTRDBfREFUXzEsIERBODUwX01NQ1NEMF9EQVRfMiwKKwlEQTg1MF9NTUNTRDBfREFUXzMsIERBODUwX01NQ1NEMF9DTEssIERBODUwX01NQ1NEMF9DTUQsCisJREE4NTBfR1BJTzRfMCwgREE4NTBfR1BJTzRfMSwKKwktMQorfTsKKwogc3RhdGljIHZvaWQgZGE4NTBfcGFuZWxfcG93ZXJfY3RybChpbnQgdmFsKQogewogCS8qIGxjZCBiYWNrbGlnaHQgKi8KQEAgLTEwNzAsNyArMTE0OCw3IEBACiAJCQkJcmV0KTsKIAogCWlmIChIQVNfTU1DKSB7Ci0JCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODUwX21tY3NkMF9waW5zKTsKKwkJcmV0ID0gZGF2aW5jaV9jZmdfcmVnX2xpc3QoZGE4NTBfZXZtX21tY3NkMF9waW5zKTsKIAkJaWYgKHJldCkKIAkJCXByX3dhcm5pbmcoImRhODUwX2V2bV9pbml0OiBtbWNzZDAgbXV4IHNldHVwIGZhaWxlZDoiCiAJCQkJCSIgJWRcbiIsIHJldCk7CkBAIC0xMTA2LDcgKzExODQsNyBAQAogCV9fcmF3X3dyaXRlbCgwLCBJT19BRERSRVNTKERBOFhYX1VBUlQxX0JBU0UpICsgMHgzMCk7CiAJX19yYXdfd3JpdGVsKDAsIElPX0FERFJFU1MoREE4WFhfVUFSVDBfQkFTRSkgKyAweDMwKTsKIAotCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODUwX21jYXNwX3BpbnMpOworCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODUwX2V2bV9tY2FzcF9waW5zKTsKIAlpZiAocmV0KQogCQlwcl93YXJuaW5nKCJkYTg1MF9ldm1faW5pdDogbWNhc3AgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsCiAJCQkJcmV0KTsKQEAgLTExNTMsNiArMTIzMSwxMiBAQAogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoImRhODUwX2V2bV9pbml0OiBzdXNwZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CisKKwlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9zcGkoMSwgZGE4NTBldm1fc3BpX2luZm8sCisJCQkJIEFSUkFZX1NJWkUoZGE4NTBldm1fc3BpX2luZm8pKTsKKwlpZiAocmV0KQorCQlwcl93YXJuaW5nKCJkYTg1MF9ldm1faW5pdDogc3BpIDEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCisJCQkJcmV0KTsKIH0KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ0eC1ldm0uYwppbmRleCAwY2E5MGI4Li41NTZiYmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NHgtZXZtLmMKQEAgLTQ0MCwxMSArNDQwLDYgQEAKIAlncGlvX3JlcXVlc3QoZ3BpbyArIDcsICJuQ0ZfU0VMIik7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyA3LCAxKTsKIAotCS8qIGlybG1sNjQwMSBzd2l0Y2hlcyBvdmVyIDFBLCBpbiB1bmRlciA4IG1zZWM7Ci0JICogbm93IGl0IGNhbiBiZSBtYW5hZ2VkIGJ5IG5EUlZfVkJVUyAuLi4KLQkgKi8KLQlkYXZpbmNpX3NldHVwX3VzYigxMDAwLCA4KTsKLQogCXJldHVybiAwOwogfQogCkBAIC03MDUsNiArNzAwLDkgQEAKIAlkYXZpbmNpX3NlcmlhbF9pbml0KCZ1YXJ0X2NvbmZpZyk7CiAJZG02NDR4X2luaXRfYXNwKCZkbTY0NHhfZXZtX3NuZF9kYXRhKTsKIAorCS8qIGlybG1sNjQwMSBzd2l0Y2hlcyBvdmVyIDFBLCBpbiB1bmRlciA4IG1zZWMgKi8KKwlkYXZpbmNpX3NldHVwX3VzYigxMDAwLCA4KTsKKwogCXNvY19pbmZvLT5lbWFjX3BkYXRhLT5waHlfaWQgPSBETTY0NFhfRVZNX1BIWV9JRDsKIAkvKiBSZWdpc3RlciB0aGUgZml4dXAgZm9yIFBIWSBvbiBEYVZpbmNpICovCiAJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQoTFhUOTcxX1BIWV9JRCwgTFhUOTcxX1BIWV9NQVNLLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jCmluZGV4IDBiYjVmMGMuLjJhYTc5YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMKQEAgLTE3LDYgKzE3LDggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0yNSw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bWFjaC9kYTh4eC5oPgogI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KIAogI2RlZmluZSBNSVRZT01BUEwxMzhfUEhZX0lECQkiMDowMyIKIApAQCAtNDQsMzggKzQ3LDEwOSBAQAogCiBzdGF0aWMgc3RydWN0IGZhY3RvcnlfY29uZmlnIGZhY3RvcnlfY29uZmlnOwogCitzdHJ1Y3QgcGFydF9ub19pbmZvIHsKKwljb25zdCBjaGFyCSpwYXJ0X25vOwkvKiBwYXJ0IG51bWJlciBzdHJpbmcgb2YgaW50ZXJlc3QgKi8KKwlpbnQJCW1heF9mcmVxOwkvKiBraHogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGFydF9ub19pbmZvIG1pdHlvbWFwbDEzOF9wbl9pbmZvW10gPSB7CisJeworCQkucGFydF9ubwk9ICJMMTM4LUMiLAorCQkubWF4X2ZyZXEJPSAzMDAwMDAsCisJfSwKKwl7CisJCS5wYXJ0X25vCT0gIkwxMzgtRCIsCisJCS5tYXhfZnJlcQk9IDM3NTAwMCwKKwl9LAorCXsKKwkJLnBhcnRfbm8JPSAiTDEzOC1GIiwKKwkJLm1heF9mcmVxCT0gNDU2MDAwLAorCX0sCisJeworCQkucGFydF9ubwk9ICIxODA4LUMiLAorCQkubWF4X2ZyZXEJPSAzMDAwMDAsCisJfSwKKwl7CisJCS5wYXJ0X25vCT0gIjE4MDgtRCIsCisJCS5tYXhfZnJlcQk9IDM3NTAwMCwKKwl9LAorCXsKKwkJLnBhcnRfbm8JPSAiMTgwOC1GIiwKKwkJLm1heF9mcmVxCT0gNDU2MDAwLAorCX0sCisJeworCQkucGFydF9ubwk9ICIxODEwLUQiLAorCQkubWF4X2ZyZXEJPSAzNzUwMDAsCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKK3N0YXRpYyB2b2lkIG1pdHlvbWFwbDEzOF9jcHVmcmVxX2luaXQoY29uc3QgY2hhciAqcGFydG51bSkKK3sKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMDsgcGFydG51bSAmJiBpIDwgQVJSQVlfU0laRShtaXR5b21hcGwxMzhfcG5faW5mbyk7IGkrKykgeworCQkvKgorCQkgKiB0aGUgcGFydCBudW1iZXIgaGFzIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBiZXlvbmQgd2hhdCBpcworCQkgKiBzdG9yZWQgaW4gdGhlIHRhYmxlLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgbmVlZGVkIGZvcgorCQkgKiBkZXRlcm1pbmluZyB0aGUgc3BlZWQgZ3JhZGUsIGFuZCB3b3VsZCByZXF1aXJlIHNldmVyYWwKKwkJICogbW9yZSB0YWJsZSBlbnRyaWVzLiAgT25seSBjaGVjayB0aGUgZmlyc3QgTiBjaGFyYWN0ZXJzCisJCSAqIGZvciBhIG1hdGNoLgorCQkgKi8KKwkJaWYgKCFzdHJuY21wKHBhcnRudW0sIG1pdHlvbWFwbDEzOF9wbl9pbmZvW2ldLnBhcnRfbm8sCisJCQkgICAgIHN0cmxlbihtaXR5b21hcGwxMzhfcG5faW5mb1tpXS5wYXJ0X25vKSkpIHsKKwkJCWRhODUwX21heF9zcGVlZCA9IG1pdHlvbWFwbDEzOF9wbl9pbmZvW2ldLm1heF9mcmVxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXQgPSBkYTg1MF9yZWdpc3Rlcl9jcHVmcmVxKCJwbGwwX3N5c2NsazMiKTsKKwlpZiAocmV0KQorCQlwcl93YXJuaW5nKCJjcHVmcmVxIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIG1pdHlvbWFwbDEzOF9jcHVmcmVxX2luaXQoY29uc3QgY2hhciAqcGFydG51bSkgeyB9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgcmVhZF9mYWN0b3J5X2NvbmZpZyhzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICphLCB2b2lkICpjb250ZXh0KQogewogCWludCByZXQ7CisJY29uc3QgY2hhciAqcGFydG51bSA9IE5VTEw7CiAJc3RydWN0IGRhdmluY2lfc29jX2luZm8gKnNvY19pbmZvID0gJmRhdmluY2lfc29jX2luZm87CiAKIAlyZXQgPSBhLT5yZWFkKGEsIChjaGFyICopJmZhY3RvcnlfY29uZmlnLCAwLCBzaXplb2YoZmFjdG9yeV9jb25maWcpKTsKIAlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgZmFjdG9yeV9jb25maWcpKSB7CiAJCXByX3dhcm5pbmcoIk1pdHlPTUFQTDEzODogUmVhZCBGYWN0b3J5IENvbmZpZyBGYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7Ci0JCXJldHVybjsKKwkJZ290byBiYWRfY29uZmlnOwogCX0KIAogCWlmIChmYWN0b3J5X2NvbmZpZy5tYWdpYyAhPSBGQUNUT1JZX0NPTkZJR19NQUdJQykgewogCQlwcl93YXJuaW5nKCJNaXR5T01BUEwxMzg6IEZhY3RvcnkgQ29uZmlnIE1hZ2ljIFdyb25nICglWClcbiIsCiAJCQkJZmFjdG9yeV9jb25maWcubWFnaWMpOwotCQlyZXR1cm47CisJCWdvdG8gYmFkX2NvbmZpZzsKIAl9CiAKIAlpZiAoZmFjdG9yeV9jb25maWcudmVyc2lvbiAhPSBGQUNUT1JZX0NPTkZJR19WRVJTSU9OKSB7CiAJCXByX3dhcm5pbmcoIk1pdHlPTUFQTDEzODogRmFjdG9yeSBDb25maWcgVmVyc2lvbiBXcm9uZyAoJVgpXG4iLAogCQkJCWZhY3RvcnlfY29uZmlnLnZlcnNpb24pOwotCQlyZXR1cm47CisJCWdvdG8gYmFkX2NvbmZpZzsKIAl9CiAKIAlwcl9pbmZvKCJNaXR5T01BUEwxMzg6IEZvdW5kIE1BQyA9ICVwTVxuIiwgZmFjdG9yeV9jb25maWcubWFjKTsKLQlwcl9pbmZvKCJNaXR5T01BUEwxMzg6IFBhcnQgTnVtYmVyID0gJXNcbiIsIGZhY3RvcnlfY29uZmlnLnBhcnRudW0pOwogCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGZhY3RvcnlfY29uZmlnLm1hYykpCiAJCW1lbWNweShzb2NfaW5mby0+ZW1hY19wZGF0YS0+bWFjX2FkZHIsCiAJCQlmYWN0b3J5X2NvbmZpZy5tYWMsIEVUSF9BTEVOKTsKIAllbHNlCiAJCXByX3dhcm5pbmcoIk1pdHlPTUFQTDEzODogSW52YWxpZCBNQUMgZm91bmQgIgogCQkJCSJpbiBmYWN0b3J5IGNvbmZpZyBibG9ja1xuIik7CisKKwlwYXJ0bnVtID0gZmFjdG9yeV9jb25maWcucGFydG51bTsKKwlwcl9pbmZvKCJNaXR5T01BUEwxMzg6IFBhcnQgTnVtYmVyID0gJXNcbiIsIHBhcnRudW0pOworCitiYWRfY29uZmlnOgorCS8qIGRlZmF1bHQgbWF4aW11bSBzcGVlZCBpcyB2YWxpZCBmb3IgYWxsIHBsYXRmb3JtcyAqLworCW1pdHlvbWFwbDEzOF9jcHVmcmVxX2luaXQocGFydG51bSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIG1pdHlvbWFwbDEzOF9mZF9jaGlwID0gewpAQCAtMjIzLDYgKzI5Nyw4MiBAQAogfQogCiAvKgorICogU1BJIERldmljZXM6CisgKglTUEkxX0NTMDogOE0gRmxhc2ggU1QtTTI1UDY0LVZNRTZHCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzcGlfZmxhc2hfcGFydGl0aW9uc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gInVibCIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gU1pfNjRLLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJ1LWJvb3QiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sCisJWzJdID0geworCQkubmFtZQkJPSAidS1ib290LWVudiIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl82NEssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUJCT0gInBlcmlwaC1jb25maWciLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNjRLLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lCQk9ICJyZXNlcnZlZCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl8yNTZLICsgU1pfNjRLLAorCX0sCisJWzVdID0geworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzJNICsgU1pfMU0sCisJfSwKKwlbNl0gPSB7CisJCS5uYW1lCQk9ICJmcGdhIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzJNLAorCX0sCisJWzddID0geworCQkubmFtZQkJPSAic3BhcmUiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG1pdHlvbWFwbDEzOF9zcGlfZmxhc2hfZGF0YSA9IHsKKwkubmFtZQkJPSAibTI1cDgwIiwKKwkucGFydHMJCT0gc3BpX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShzcGlfZmxhc2hfcGFydGl0aW9ucyksCisJLnR5cGUJCT0gIm0yNHA2NCIsCit9OworCitzdGF0aWMgc3RydWN0IGRhdmluY2lfc3BpX2NvbmZpZyBzcGlfZXByb21fY29uZmlnID0geworCS5pb190eXBlCT0gU1BJX0lPX1RZUEVfRE1BLAorCS5jMnRkZWxheQk9IDgsCisJLnQyY2RlbGF5CT0gOCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gbWl0eW9tYXBsMTM4X3NwaV9mbGFzaF9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMJCT0gIm0yNXA4MCIsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtaXR5b21hcGwxMzhfc3BpX2ZsYXNoX2RhdGEsCisJCS5jb250cm9sbGVyX2RhdGEJPSAmc3BpX2Vwcm9tX2NvbmZpZywKKwkJLm1vZGUJCQk9IFNQSV9NT0RFXzAsCisJCS5tYXhfc3BlZWRfaHoJCT0gMzAwMDAwMDAsCisJCS5idXNfbnVtCQk9IDEsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCX0sCit9OworCisvKgogICogTWl0eURTUC1MMTM4IGluY2x1ZGVzIGEgMjU2IE1CeXRlIGxhcmdlLXBhZ2UgTkFORCBmbGFzaAogICogKDEyOEsgYmxvY2tzKS4KICAqLwpAQCAtMzc3LDE2ICs1MjcsMTcgQEAKIAogCW1pdHlvbWFwbDEzOF9zZXR1cF9uYW5kKCk7CiAKKwlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9zcGkoMSwgbWl0eW9tYXBsMTM4X3NwaV9mbGFzaF9pbmZvLAorCQkJICAgICAgIEFSUkFZX1NJWkUobWl0eW9tYXBsMTM4X3NwaV9mbGFzaF9pbmZvKSk7CisJaWYgKHJldCkKKwkJcHJfd2FybmluZygic3BpIDEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisKIAltaXR5b21hcGwxMzhfY29uZmlnX2VtYWMoKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3J0YygpOwogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoInJ0YyBzZXR1cCBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCi0JcmV0ID0gZGE4NTBfcmVnaXN0ZXJfY3B1ZnJlcSgicGxsMF9zeXNjbGszIik7Ci0JaWYgKHJldCkKLQkJcHJfd2FybmluZygiY3B1ZnJlcSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKLQogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2NwdWlkbGUoKTsKIAlpZiAocmV0KQogCQlwcl93YXJuaW5nKCJjcHVpZGxlIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW9tYXBsMTM4LWhhd2suYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1vbWFwbDEzOC1oYXdrLmMKaW5kZXggMGI4ZGJkYi4uNjdjMzhkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW9tYXBsMTM4LWhhd2suYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtb21hcGwxMzgtaGF3ay5jCkBAIC0xOSw2ICsxOSwyNzkgQEAKIAogI2luY2x1ZGUgPG1hY2gvY3BfaW50Yy5oPgogI2luY2x1ZGUgPG1hY2gvZGE4eHguaD4KKyNpbmNsdWRlIDxtYWNoL211eC5oPgorCisjZGVmaW5lIEhBV0tCT0FSRF9QSFlfSUQJCSIwOjA3IgorI2RlZmluZSBEQTg1MF9IQVdLX01NQ1NEX0NEX1BJTgkJR1BJT19UT19QSU4oMywgMTIpCisjZGVmaW5lIERBODUwX0hBV0tfTU1DU0RfV1BfUElOCQlHUElPX1RPX1BJTigzLCAxMykKKworI2RlZmluZSBEQTg1MF9VU0IxX1ZCVVNfUElOCQlHUElPX1RPX1BJTigyLCA0KQorI2RlZmluZSBEQTg1MF9VU0IxX09DX1BJTgkJR1BJT19UT19QSU4oNiwgMTMpCisKK3N0YXRpYyBzaG9ydCBvbWFwbDEzOF9oYXdrX21paV9waW5zW10gX19pbml0ZGF0YSA9IHsKKwlEQTg1MF9NSUlfVFhFTiwgREE4NTBfTUlJX1RYQ0xLLCBEQTg1MF9NSUlfQ09MLCBEQTg1MF9NSUlfVFhEXzMsCisJREE4NTBfTUlJX1RYRF8yLCBEQTg1MF9NSUlfVFhEXzEsIERBODUwX01JSV9UWERfMCwgREE4NTBfTUlJX1JYRVIsCisJREE4NTBfTUlJX0NSUywgREE4NTBfTUlJX1JYQ0xLLCBEQTg1MF9NSUlfUlhEViwgREE4NTBfTUlJX1JYRF8zLAorCURBODUwX01JSV9SWERfMiwgREE4NTBfTUlJX1JYRF8xLCBEQTg1MF9NSUlfUlhEXzAsIERBODUwX01ESU9fQ0xLLAorCURBODUwX01ESU9fRCwKKwktMQorfTsKKworc3RhdGljIF9faW5pdCB2b2lkIG9tYXBsMTM4X2hhd2tfY29uZmlnX2VtYWModm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmNmZ2NoaXAzID0gREE4WFhfU1lTQ0ZHMF9WSVJUKERBOFhYX0NGR0NISVAzX1JFRyk7CisJaW50IHJldDsKKwl1MzIgdmFsOworCXN0cnVjdCBkYXZpbmNpX3NvY19pbmZvICpzb2NfaW5mbyA9ICZkYXZpbmNpX3NvY19pbmZvOworCisJdmFsID0gX19yYXdfcmVhZGwoY2ZnY2hpcDMpOworCXZhbCAmPSB+QklUKDgpOworCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KG9tYXBsMTM4X2hhd2tfbWlpX3BpbnMpOworCWlmIChyZXQpIHsKKwkJcHJfd2FybmluZygiJXM6IGNwZ21hYy9taWkgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNvbmZpZ3VyZSB0aGUgQ0ZHQ0hJUDMgcmVnaXN0ZXIgZm9yIE1JSSAqLworCV9fcmF3X3dyaXRlbCh2YWwsIGNmZ2NoaXAzKTsKKwlwcl9pbmZvKCJFTUFDOiBNSUkgUEhZIGNvbmZpZ3VyZWRcbiIpOworCisJc29jX2luZm8tPmVtYWNfcGRhdGEtPnBoeV9pZCA9IEhBV0tCT0FSRF9QSFlfSUQ7CisKKwlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9lbWFjKCk7CisJaWYgKHJldCkKKwkJcHJfd2FybmluZygiJXM6IGVtYWMgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgRURNQSBjaGFubmVscy9zbG90cyBhcmUgbm90IGJlaW5nIHVzZWQgYnkgZHJpdmVycyAoZm9yCisgKiBleGFtcGxlOiBUaW1lciwgR1BJTywgVUFSVCBldmVudHMgZXRjKSBvbiBkYTg1MC9vbWFwLWwxMzggRVZNL0hhd2tib2FyZCwKKyAqIGhlbmNlIHRoZXkgYXJlIGJlaW5nIHJlc2VydmVkIGZvciBjb2RlY3Mgb24gdGhlIERTUCBzaWRlLgorICovCitzdGF0aWMgY29uc3QgczE2IGRhODUwX2RtYTBfcnN2X2NoYW5zW11bMl0gPSB7CisJLyogKG9mZnNldCwgbnVtYmVyKSAqLworCXsgOCwgIDZ9LAorCXsyNCwgIDR9LAorCXszMCwgIDJ9LAorCXstMSwgLTF9Cit9OworCitzdGF0aWMgY29uc3QgczE2IGRhODUwX2RtYTBfcnN2X3Nsb3RzW11bMl0gPSB7CisJLyogKG9mZnNldCwgbnVtYmVyKSAqLworCXsgOCwgIDZ9LAorCXsyNCwgIDR9LAorCXszMCwgNTB9LAorCXstMSwgLTF9Cit9OworCitzdGF0aWMgY29uc3QgczE2IGRhODUwX2RtYTFfcnN2X2NoYW5zW11bMl0gPSB7CisJLyogKG9mZnNldCwgbnVtYmVyKSAqLworCXsgMCwgMjh9LAorCXszMCwgIDJ9LAorCXstMSwgLTF9Cit9OworCitzdGF0aWMgY29uc3QgczE2IGRhODUwX2RtYTFfcnN2X3Nsb3RzW11bMl0gPSB7CisJLyogKG9mZnNldCwgbnVtYmVyKSAqLworCXsgMCwgMjh9LAorCXszMCwgOTB9LAorCXstMSwgLTF9Cit9OworCitzdGF0aWMgc3RydWN0IGVkbWFfcnN2X2luZm8gZGE4NTBfZWRtYV9jYzBfcnN2ID0geworCS5yc3ZfY2hhbnMJPSBkYTg1MF9kbWEwX3Jzdl9jaGFucywKKwkucnN2X3Nsb3RzCT0gZGE4NTBfZG1hMF9yc3Zfc2xvdHMsCit9OworCitzdGF0aWMgc3RydWN0IGVkbWFfcnN2X2luZm8gZGE4NTBfZWRtYV9jYzFfcnN2ID0geworCS5yc3ZfY2hhbnMJPSBkYTg1MF9kbWExX3Jzdl9jaGFucywKKwkucnN2X3Nsb3RzCT0gZGE4NTBfZG1hMV9yc3Zfc2xvdHMsCit9OworCitzdGF0aWMgc3RydWN0IGVkbWFfcnN2X2luZm8gKmRhODUwX2VkbWFfcnN2WzJdID0geworCSZkYTg1MF9lZG1hX2NjMF9yc3YsCisJJmRhODUwX2VkbWFfY2MxX3JzdiwKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCBoYXdrX21tY3NkMF9waW5zW10gPSB7CisJREE4NTBfTU1DU0QwX0RBVF8wLCBEQTg1MF9NTUNTRDBfREFUXzEsIERBODUwX01NQ1NEMF9EQVRfMiwKKwlEQTg1MF9NTUNTRDBfREFUXzMsIERBODUwX01NQ1NEMF9DTEssIERBODUwX01NQ1NEMF9DTUQsCisJREE4NTBfR1BJTzNfMTIsIERBODUwX0dQSU8zXzEzLAorCS0xCit9OworCitzdGF0aWMgaW50IGRhODUwX2hhd2tfbW1jX2dldF9ybyhpbnQgaW5kZXgpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKERBODUwX0hBV0tfTU1DU0RfV1BfUElOKTsKK30KKworc3RhdGljIGludCBkYTg1MF9oYXdrX21tY19nZXRfY2QoaW50IGluZGV4KQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoREE4NTBfSEFXS19NTUNTRF9DRF9QSU4pOworfQorCitzdGF0aWMgc3RydWN0IGRhdmluY2lfbW1jX2NvbmZpZyBkYTg1MF9tbWNfY29uZmlnID0geworCS5nZXRfcm8JCT0gZGE4NTBfaGF3a19tbWNfZ2V0X3JvLAorCS5nZXRfY2QJCT0gZGE4NTBfaGF3a19tbWNfZ2V0X2NkLAorCS53aXJlcwkJPSA0LAorCS5tYXhfZnJlcQk9IDUwMDAwMDAwLAorCS5jYXBzCQk9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVELAorCS52ZXJzaW9uCT0gTU1DX0NUTFJfVkVSU0lPTl8yLAorfTsKKworc3RhdGljIF9faW5pdCB2b2lkIG9tYXBsMTM4X2hhd2tfbW1jX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGF2aW5jaV9jZmdfcmVnX2xpc3QoaGF3a19tbWNzZDBfcGlucyk7CisJaWYgKHJldCkgeworCQlwcl93YXJuaW5nKCIlczogTU1DL1NEMCBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShEQTg1MF9IQVdLX01NQ1NEX0NEX1BJTiwKKwkJCUdQSU9GX0RJUl9JTiwgIk1NQyBDRCIpOworCWlmIChyZXQgPCAwKSB7CisJCXByX3dhcm5pbmcoIiVzOiBjYW4gbm90IG9wZW4gR1BJTyAlZFxuIiwKKwkJCV9fZnVuY19fLCBEQTg1MF9IQVdLX01NQ1NEX0NEX1BJTik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3Rfb25lKERBODUwX0hBV0tfTU1DU0RfV1BfUElOLAorCQkJR1BJT0ZfRElSX0lOLCAiTU1DIFdQIik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfd2FybmluZygiJXM6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAorCQkJX19mdW5jX18sIERBODUwX0hBV0tfTU1DU0RfV1BfUElOKTsKKwkJZ290byBtbWNfc2V0dXBfd3BfZmFpbDsKKwl9CisKKwlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9tbWNzZDAoJmRhODUwX21tY19jb25maWcpOworCWlmIChyZXQpIHsKKwkJcHJfd2FybmluZygiJXM6IE1NQy9TRDAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBtbWNfc2V0dXBfbW1jc2RfZmFpbDsKKwl9CisKKwlyZXR1cm47CisKK21tY19zZXR1cF9tbWNzZF9mYWlsOgorCWdwaW9fZnJlZShEQTg1MF9IQVdLX01NQ1NEX1dQX1BJTik7CittbWNfc2V0dXBfd3BfZmFpbDoKKwlncGlvX2ZyZWUoREE4NTBfSEFXS19NTUNTRF9DRF9QSU4pOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcGwxMzhfaGF3a191c2Jfb2NpY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBkYTh4eF9vY2ljX2hhbmRsZXJfdCBoYXdrX3VzYl9vY2ljX2hhbmRsZXI7CisKK3N0YXRpYyBjb25zdCBzaG9ydCBkYTg1MF9oYXdrX3VzYjExX3BpbnNbXSA9IHsKKwlEQTg1MF9HUElPMl80LCBEQTg1MF9HUElPNl8xMywKKwktMQorfTsKKworc3RhdGljIGludCBoYXdrX3VzYl9zZXRfcG93ZXIodW5zaWduZWQgcG9ydCwgaW50IG9uKQoreworCWdwaW9fc2V0X3ZhbHVlKERBODUwX1VTQjFfVkJVU19QSU4sIG9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYXdrX3VzYl9nZXRfcG93ZXIodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoREE4NTBfVVNCMV9WQlVTX1BJTik7Cit9CisKK3N0YXRpYyBpbnQgaGF3a191c2JfZ2V0X29jaSh1bnNpZ25lZCBwb3J0KQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoREE4NTBfVVNCMV9PQ19QSU4pOworfQorCitzdGF0aWMgaW50IGhhd2tfdXNiX29jaWNfbm90aWZ5KGRhOHh4X29jaWNfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJaW50IGlycSAgICAgICAgID0gZ3Bpb190b19pcnEoREE4NTBfVVNCMV9PQ19QSU4pOworCWludCBlcnJvciAgICAgICA9IDA7CisKKwlpZiAoaGFuZGxlciAhPSBOVUxMKSB7CisJCWhhd2tfdXNiX29jaWNfaGFuZGxlciA9IGhhbmRsZXI7CisKKwkJZXJyb3IgPSByZXF1ZXN0X2lycShpcnEsIG9tYXBsMTM4X2hhd2tfdXNiX29jaWNfaXJxLAorCQkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8CisJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQkiT0hDSSBvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIiwgTlVMTCk7CisJCWlmIChlcnJvcikKKwkJCXByX2VycigiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IElSUSB0byB3YXRjaCAiCisJCQkJIm92ZXItY3VycmVudCBpbmRpY2F0b3IgY2hhbmdlc1xuIiwgX19mdW5jX18pOworCX0gZWxzZSB7CisJCWZyZWVfaXJxKGlycSwgTlVMTCk7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHN0cnVjdCBkYTh4eF9vaGNpX3Jvb3RfaHViIG9tYXBsMTM4X2hhd2tfdXNiMTFfcGRhdGEgPSB7CisJLnNldF9wb3dlciAgICAgID0gaGF3a191c2Jfc2V0X3Bvd2VyLAorCS5nZXRfcG93ZXIgICAgICA9IGhhd2tfdXNiX2dldF9wb3dlciwKKwkuZ2V0X29jaSAgICAgICAgPSBoYXdrX3VzYl9nZXRfb2NpLAorCS5vY2ljX25vdGlmeSAgICA9IGhhd2tfdXNiX29jaWNfbm90aWZ5LAorCS8qIFRQUzIwODcgc3dpdGNoIEAgNVYgKi8KKwkucG90cGd0ICAgICAgICAgPSAoMyArIDEpIC8gMiwgIC8qIDMgbXMgbWF4ICovCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcGwxMzhfaGF3a191c2Jfb2NpY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWhhd2tfdXNiX29jaWNfaGFuZGxlcigmb21hcGwxMzhfaGF3a191c2IxMV9wZGF0YSwgMSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgb21hcGwxMzhfaGF3a191c2JfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJdTMyIGNmZ2NoaXAyOworCisJcmV0ID0gZGF2aW5jaV9jZmdfcmVnX2xpc3QoZGE4NTBfaGF3a191c2IxMV9waW5zKTsKKwlpZiAocmV0KSB7CisJCXByX3dhcm5pbmcoIiVzOiBVU0IgMS4xIFBpbk11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZXR1cCB0aGUgUmVmLiBjbG9jayBmcmVxdWVuY3kgZm9yIHRoZSBIQVdLIGF0IDI0IE1Iei4gKi8KKworCWNmZ2NoaXAyID0gX19yYXdfcmVhZGwoREE4WFhfU1lTQ0ZHMF9WSVJUKERBOFhYX0NGR0NISVAyX1JFRykpOworCWNmZ2NoaXAyICY9IH5DRkdDSElQMl9SRUZGUkVROworCWNmZ2NoaXAyIHw9ICBDRkdDSElQMl9SRUZGUkVRXzI0TUhaOworCV9fcmF3X3dyaXRlbChjZmdjaGlwMiwgREE4WFhfU1lTQ0ZHMF9WSVJUKERBOFhYX0NGR0NISVAyX1JFRykpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShEQTg1MF9VU0IxX1ZCVVNfUElOLAorCQkJR1BJT0ZfRElSX09VVCwgIlVTQjEgVkJVUyIpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIFVTQiAxLjEgcG9ydCAiCisJCQkicG93ZXIgY29udHJvbDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShEQTg1MF9VU0IxX09DX1BJTiwKKwkJCUdQSU9GX0RJUl9JTiwgIlVTQjEgT0MiKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBVU0IgMS4xIHBvcnQgIgorCQkJIm92ZXItY3VycmVudCBpbmRpY2F0b3I6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byB1c2IxMV9zZXR1cF9vY19mYWlsOworCX0KKworCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3VzYjExKCZvbWFwbDEzOF9oYXdrX3VzYjExX3BkYXRhKTsKKwlpZiAocmV0KSB7CisJCXByX3dhcm5pbmcoIiVzOiBVU0IgMS4xIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCWdvdG8gdXNiMTFfc2V0dXBfZmFpbDsKKwl9CisKKwlyZXR1cm47CisKK3VzYjExX3NldHVwX2ZhaWw6CisJZ3Bpb19mcmVlKERBODUwX1VTQjFfT0NfUElOKTsKK3VzYjExX3NldHVwX29jX2ZhaWw6CisJZ3Bpb19mcmVlKERBODUwX1VTQjFfVkJVU19QSU4pOworfQogCiBzdGF0aWMgc3RydWN0IGRhdmluY2lfdWFydF9jb25maWcgb21hcGwxMzhfaGF3a191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0gewogCS5lbmFibGVkX3VhcnRzID0gMHg3LApAQCAtMzAsNiArMzAzLDE3IEBACiAKIAlkYXZpbmNpX3NlcmlhbF9pbml0KCZvbWFwbDEzOF9oYXdrX3VhcnRfY29uZmlnKTsKIAorCW9tYXBsMTM4X2hhd2tfY29uZmlnX2VtYWMoKTsKKworCXJldCA9IGRhODUwX3JlZ2lzdGVyX2VkbWEoZGE4NTBfZWRtYV9yc3YpOworCWlmIChyZXQpCisJCXByX3dhcm5pbmcoIiVzOiBFRE1BIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisKKwlvbWFwbDEzOF9oYXdrX21tY19pbml0KCk7CisKKwlvbWFwbDEzOF9oYXdrX3VzYl9pbml0KCk7CisKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl93YXRjaGRvZygpOwogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoIm9tYXBsMTM4X2hhd2tfaW5pdDogIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLXRuZXR2MTA3eC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC10bmV0djEwN3gtZXZtLmMKaW5kZXggYTZkYjg1NC4uMWE2NTZlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLXRuZXR2MTA3eC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtdG5ldHYxMDd4LWV2bS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM3LDYgKzM4LDcgQEAKIAogI2RlZmluZSBFVk1fTU1DX1dQX0dQSU8JCTIxCiAjZGVmaW5lIEVWTV9NTUNfQ0RfR1BJTwkJMjQKKyNkZWZpbmUgRVZNX1NQSV9DU19HUElPCQk1NAogCiBzdGF0aWMgaW50IGluaXRpYWxpemVfZ3BpbyhpbnQgZ3BpbywgY2hhciAqZGVzYykKIHsKQEAgLTk5LDYgKzEwMSwxMiBAQAogCS0xCiB9OwogCitzdGF0aWMgY29uc3Qgc2hvcnQgc3NwX3BpbnNbXSBfX2luaXRkYXRhID0geworCVRORVRWMTA3WF9TU1AwXzAsIFRORVRWMTA3WF9TU1AwXzEsIFRORVRWMTA3WF9TU1AwXzIsCisJVE5FVFYxMDdYX1NTUDFfMCwgVE5FVFYxMDdYX1NTUDFfMSwgVE5FVFYxMDdYX1NTUDFfMiwKKwlUTkVUVjEwN1hfU1NQMV8zLCAtMQorfTsKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5hbmRfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCAxMiBzZWN0b3JzICovCiAJewpAQCAtMTk2LDE5ICsyMDQsNjggQEAKIAkubm9fYXV0b3JlcGVhdAk9IDAsCiB9OwogCitzdGF0aWMgdm9pZCBzcGlfc2VsZWN0X2RldmljZShpbnQgY3MpCit7CisJc3RhdGljIGludCBncGlvOworCisJaWYgKCFncGlvKSB7CisJCWludCByZXQ7CisJCXJldCA9IGdwaW9fcmVxdWVzdChFVk1fU1BJX0NTX0dQSU8sICJzcGkgY2hpcHNlbCIpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCJjYW5ub3Qgb3BlbiBzcGkgY2hpcHNlbCBncGlvXG4iKTsKKwkJCWdwaW8gPSAtRU5PU1lTOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJZ3BpbyA9IEVWTV9TUElfQ1NfR1BJTzsKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCAwKTsKKwkJfQorCX0KKworCWlmIChncGlvIDwgMCkKKwkJcmV0dXJuOworCisJcmV0dXJuIGdwaW9fc2V0X3ZhbHVlKGdwaW8sIGNzID8gMSA6IDApOworfQorCitzdGF0aWMgc3RydWN0IHRpX3NzcF9zcGlfZGF0YSBzcGlfbWFzdGVyX2RhdGEgPSB7CisJLm51bV9jcwk9IDIsCisJLnNlbGVjdAk9IHNwaV9zZWxlY3RfZGV2aWNlLAorCS5pb3NlbAk9IFNTUF9QSU5fU0VMKDAsIFNTUF9DTE9DSykJfCBTU1BfUElOX1NFTCgxLCBTU1BfREFUQSkgfAorCQkgIFNTUF9QSU5fU0VMKDIsIFNTUF9DSElQU0VMKQl8IFNTUF9QSU5fU0VMKDMsIFNTUF9JTikgICB8CisJCSAgU1NQX0lOUFVUX1NFTCgzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGlfc3NwX2RhdGEgc3NwX2NvbmZpZyA9IHsKKwkub3V0X2Nsb2NrCT0gMjUwICogMTAwMCwKKwkuZGV2X2RhdGEJPSB7CisJCVsxXSA9IHsKKwkJCS5kZXZfbmFtZSA9ICJ0aS1zc3Atc3BpIiwKKwkJCS5wZGF0YSA9ICZzcGlfbWFzdGVyX2RhdGEsCisJCQkucGRhdGFfc2l6ZSA9IHNpemVvZihzcGlfbWFzdGVyX2RhdGEpLAorCQl9LAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHRuZXR2MTA3eF9kZXZpY2VfaW5mbyBldm1fZGV2aWNlX2luZm8gX19pbml0Y29uc3QgPSB7CiAJLnNlcmlhbF9jb25maWcJCT0gJnNlcmlhbF9jb25maWcsCiAJLm1tY19jb25maWdbMV0JCT0gJm1tY19jb25maWcsCS8qIGNvbnRyb2xsZXIgMSAqLwogCS5uYW5kX2NvbmZpZ1swXQkJPSAmbmFuZF9jb25maWcsCS8qIGNoaXAgc2VsZWN0IDAgKi8KIAkua2V5cGFkX2NvbmZpZwkJPSAma2V5cGFkX2NvbmZpZywKKwkuc3NwX2NvbmZpZwkJPSAmc3NwX2NvbmZpZywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc3BpX2luZm9bXSBfX2luaXRjb25zdCA9IHsKIH07CiAKIHN0YXRpYyBfX2luaXQgdm9pZCB0bmV0djEwN3hfZXZtX2JvYXJkX2luaXQodm9pZCkKIHsKIAlkYXZpbmNpX2NmZ19yZWdfbGlzdChzZGlvMV9waW5zKTsKIAlkYXZpbmNpX2NmZ19yZWdfbGlzdCh1YXJ0MV9waW5zKTsKKwlkYXZpbmNpX2NmZ19yZWdfbGlzdChzc3BfcGlucyk7CiAKIAl0bmV0djEwN3hfZGV2aWNlc19pbml0KCZldm1fZGV2aWNlX2luZm8pOworCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2luZm8sIEFSUkFZX1NJWkUoc3BpX2luZm8pKTsKIH0KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4MzAuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTgzMC5jCmluZGV4IGVjMjNhYjQuLjJlZDJmODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTgzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTgzMC5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRtYXhfY2xrID0gewogCS5uYW1lCQk9ICJkbWF4IiwKIAkucGFyZW50CQk9ICZwbGwwX3N5c2NsazIsCi0JLmxwc2MJCT0gREE4WFhfTFBTQzBfRE1BWCwKKwkubHBzYwkJPSBEQThYWF9MUFNDMF9QUlVTUywKIAkuZmxhZ3MJCT0gQUxXQVlTX0VOQUJMRUQsCiB9OwogCkBAIC0zOTcsOCArMzk3LDggQEAKIAlDTEsoTlVMTCwJCSJ1YXJ0MCIsCSZ1YXJ0MF9jbGspLAogCUNMSyhOVUxMLAkJInVhcnQxIiwJJnVhcnQxX2NsayksCiAJQ0xLKE5VTEwsCQkidWFydDIiLAkmdWFydDJfY2xrKSwKLQlDTEsoImRtX3NwaS4wIiwJCU5VTEwsCQkmc3BpMF9jbGspLAotCUNMSygiZG1fc3BpLjEiLAkJTlVMTCwJCSZzcGkxX2NsayksCisJQ0xLKCJzcGlfZGF2aW5jaS4wIiwJTlVMTCwJCSZzcGkwX2NsayksCisJQ0xLKCJzcGlfZGF2aW5jaS4xIiwJTlVMTCwJCSZzcGkxX2NsayksCiAJQ0xLKE5VTEwsCQkiZWNhcDAiLAkmZWNhcDBfY2xrKSwKIAlDTEsoTlVMTCwJCSJlY2FwMSIsCSZlY2FwMV9jbGspLAogCUNMSyhOVUxMLAkJImVjYXAyIiwJJmVjYXAyX2NsayksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4NTAuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCmluZGV4IDc4YjVhZTIuLjY4ZmU0YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCkBAIC0zNDUsNiArMzQ1LDM0IEBACiAJLmZsYWdzCQk9IEFMV0FZU19FTkFCTEVELAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgdXNiMTFfY2xrID0geworCS5uYW1lCQk9ICJ1c2IxMSIsCisJLnBhcmVudAkJPSAmcGxsMF9zeXNjbGs0LAorCS5scHNjCQk9IERBOFhYX0xQU0MxX1VTQjExLAorCS5ncHNjCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2IyMF9jbGsgPSB7CisJLm5hbWUJCT0gInVzYjIwIiwKKwkucGFyZW50CQk9ICZwbGwwX3N5c2NsazIsCisJLmxwc2MJCT0gREE4WFhfTFBTQzFfVVNCMjAsCisJLmdwc2MJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0geworCS5uYW1lCQk9ICJzcGkwIiwKKwkucGFyZW50CQk9ICZwbGwwX3N5c2NsazIsCisJLmxwc2MJCT0gREE4WFhfTFBTQzBfU1BJMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaTFfY2xrID0geworCS5uYW1lCQk9ICJzcGkxIiwKKwkucGFyZW50CQk9ICZwbGwwX3N5c2NsazIsCisJLmxwc2MJCT0gREE4WFhfTFBTQzFfU1BJMSwKKwkuZ3BzYwkJPSAxLAorCS5mbGFncwkJPSBEQTg1MF9DTEtfQVNZTkMzLAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGRhODUwX2Nsa3NbXSA9IHsKIAlDTEsoTlVMTCwJCSJyZWYiLAkJJnJlZl9jbGspLAogCUNMSyhOVUxMLAkJInBsbDAiLAkJJnBsbDBfY2xrKSwKQEAgLTM4Nyw2ICs0MTUsMTAgQEAKIAlDTEsoImRhdmluY2lfbW1jLjAiLAlOVUxMLAkJJm1tY3NkMF9jbGspLAogCUNMSygiZGF2aW5jaV9tbWMuMSIsCU5VTEwsCQkmbW1jc2QxX2NsayksCiAJQ0xLKE5VTEwsCQkiYWVtaWYiLAkmYWVtaWZfY2xrKSwKKwlDTEsoTlVMTCwJCSJ1c2IxMSIsCSZ1c2IxMV9jbGspLAorCUNMSyhOVUxMLAkJInVzYjIwIiwJJnVzYjIwX2NsayksCisJQ0xLKCJzcGlfZGF2aW5jaS4wIiwJTlVMTCwJCSZzcGkwX2NsayksCisJQ0xLKCJzcGlfZGF2aW5jaS4xIiwJTlVMTCwJCSZzcGkxX2NsayksCiAJQ0xLKE5VTEwsCQlOVUxMLAkJTlVMTCksCiB9OwogCkBAIC01NDMsMzAgKzU3NSwxOSBAQAogCU1VWF9DRkcoREE4NTAsIEVNQV9XQUlUXzEsCTYsCTI0LAkxNSwJMSwJZmFsc2UpCiAJTVVYX0NGRyhEQTg1MCwgTkVNQV9DU18yLAk3LAkwLAkxNSwJMSwJZmFsc2UpCiAJLyogR1BJTyBmdW5jdGlvbiAqLworCU1VWF9DRkcoREE4NTAsIEdQSU8yXzQsCQk2LAkxMiwJMTUsCTgsCWZhbHNlKQogCU1VWF9DRkcoREE4NTAsIEdQSU8yXzYsCQk2LAk0LAkxNSwJOCwJZmFsc2UpCiAJTVVYX0NGRyhEQTg1MCwgR1BJTzJfOCwJCTUsCTI4LAkxNSwJOCwJZmFsc2UpCiAJTVVYX0NGRyhEQTg1MCwgR1BJTzJfMTUsCTUsCTAsCTE1LAk4LAlmYWxzZSkKKwlNVVhfQ0ZHKERBODUwLCBHUElPM18xMiwJNywJMTIsCTE1LAk4LAlmYWxzZSkKKwlNVVhfQ0ZHKERBODUwLCBHUElPM18xMywJNywJOCwJMTUsCTgsCWZhbHNlKQogCU1VWF9DRkcoREE4NTAsIEdQSU80XzAsCQkxMCwJMjgsCTE1LAk4LAlmYWxzZSkKIAlNVVhfQ0ZHKERBODUwLCBHUElPNF8xLAkJMTAsCTI0LAkxNSwJOCwJZmFsc2UpCisJTVVYX0NGRyhEQTg1MCwgR1BJTzZfMTMsCTEzLAk4LAkxNSwJOCwJZmFsc2UpCiAJTVVYX0NGRyhEQTg1MCwgUlRDX0FMQVJNLAkwLAkyOCwJMTUsCTIsCWZhbHNlKQogI2VuZGlmCiB9OwogCi1jb25zdCBzaG9ydCBkYTg1MF91YXJ0MF9waW5zW10gX19pbml0ZGF0YSA9IHsKLQlEQTg1MF9OVUFSVDBfQ1RTLCBEQTg1MF9OVUFSVDBfUlRTLCBEQTg1MF9VQVJUMF9SWEQsIERBODUwX1VBUlQwX1RYRCwKLQktMQotfTsKLQotY29uc3Qgc2hvcnQgZGE4NTBfdWFydDFfcGluc1tdIF9faW5pdGRhdGEgPSB7Ci0JREE4NTBfVUFSVDFfUlhELCBEQTg1MF9VQVJUMV9UWEQsCi0JLTEKLX07Ci0KLWNvbnN0IHNob3J0IGRhODUwX3VhcnQyX3BpbnNbXSBfX2luaXRkYXRhID0gewotCURBODUwX1VBUlQyX1JYRCwgREE4NTBfVUFSVDJfVFhELAotCS0xCi19OwotCiBjb25zdCBzaG9ydCBkYTg1MF9pMmMwX3BpbnNbXSBfX2luaXRkYXRhID0gewogCURBODUwX0kyQzBfU0RBLCBEQTg1MF9JMkMwX1NDTCwKIAktMQpAQCAtNTc3LDI0ICs1OTgsNiBAQAogCS0xCiB9OwogCi1jb25zdCBzaG9ydCBkYTg1MF9jcGdtYWNfcGluc1tdIF9faW5pdGRhdGEgPSB7Ci0JREE4NTBfTUlJX1RYRU4sIERBODUwX01JSV9UWENMSywgREE4NTBfTUlJX0NPTCwgREE4NTBfTUlJX1RYRF8zLAotCURBODUwX01JSV9UWERfMiwgREE4NTBfTUlJX1RYRF8xLCBEQTg1MF9NSUlfVFhEXzAsIERBODUwX01JSV9SWEVSLAotCURBODUwX01JSV9DUlMsIERBODUwX01JSV9SWENMSywgREE4NTBfTUlJX1JYRFYsIERBODUwX01JSV9SWERfMywKLQlEQTg1MF9NSUlfUlhEXzIsIERBODUwX01JSV9SWERfMSwgREE4NTBfTUlJX1JYRF8wLCBEQTg1MF9NRElPX0NMSywKLQlEQTg1MF9NRElPX0QsIERBODUwX1JNSUlfVFhEXzAsIERBODUwX1JNSUlfVFhEXzEsIERBODUwX1JNSUlfVFhFTiwKLQlEQTg1MF9STUlJX0NSU19EViwgREE4NTBfUk1JSV9SWERfMCwgREE4NTBfUk1JSV9SWERfMSwgREE4NTBfUk1JSV9SWEVSLAotCURBODUwX1JNSUlfTUhaXzUwX0NMSywKLQktMQotfTsKLQotY29uc3Qgc2hvcnQgZGE4NTBfbWNhc3BfcGluc1tdIF9faW5pdGRhdGEgPSB7Ci0JREE4NTBfQUhDTEtYLCBEQTg1MF9BQ0xLWCwgREE4NTBfQUZTWCwKLQlEQTg1MF9BSENMS1IsIERBODUwX0FDTEtSLCBEQTg1MF9BRlNSLCBEQTg1MF9BTVVURSwKLQlEQTg1MF9BWFJfMTEsIERBODUwX0FYUl8xMiwKLQktMQotfTsKLQogY29uc3Qgc2hvcnQgZGE4NTBfbGNkY250bF9waW5zW10gX19pbml0ZGF0YSA9IHsKIAlEQTg1MF9MQ0RfRF8wLCBEQTg1MF9MQ0RfRF8xLCBEQTg1MF9MQ0RfRF8yLCBEQTg1MF9MQ0RfRF8zLAogCURBODUwX0xDRF9EXzQsIERBODUwX0xDRF9EXzUsIERBODUwX0xDRF9EXzYsIERBODUwX0xDRF9EXzcsCkBAIC02MDQsMjkgKzYwNyw2IEBACiAJLTEKIH07CiAKLWNvbnN0IHNob3J0IGRhODUwX21tY3NkMF9waW5zW10gX19pbml0ZGF0YSA9IHsKLQlEQTg1MF9NTUNTRDBfREFUXzAsIERBODUwX01NQ1NEMF9EQVRfMSwgREE4NTBfTU1DU0QwX0RBVF8yLAotCURBODUwX01NQ1NEMF9EQVRfMywgREE4NTBfTU1DU0QwX0NMSywgREE4NTBfTU1DU0QwX0NNRCwKLQlEQTg1MF9HUElPNF8wLCBEQTg1MF9HUElPNF8xLAotCS0xCi19OwotCi1jb25zdCBzaG9ydCBkYTg1MF9lbWlmMjVfcGluc1tdIF9faW5pdGRhdGEgPSB7Ci0JREE4NTBfRU1BX0JBXzEsIERBODUwX0VNQV9DTEssIERBODUwX0VNQV9XQUlUXzEsIERBODUwX05FTUFfQ1NfMiwKLQlEQTg1MF9ORU1BX0NTXzMsIERBODUwX05FTUFfQ1NfNCwgREE4NTBfTkVNQV9XRSwgREE4NTBfTkVNQV9PRSwKLQlEQTg1MF9FTUFfRF8wLCBEQTg1MF9FTUFfRF8xLCBEQTg1MF9FTUFfRF8yLCBEQTg1MF9FTUFfRF8zLAotCURBODUwX0VNQV9EXzQsIERBODUwX0VNQV9EXzUsIERBODUwX0VNQV9EXzYsIERBODUwX0VNQV9EXzcsCi0JREE4NTBfRU1BX0RfOCwgREE4NTBfRU1BX0RfOSwgREE4NTBfRU1BX0RfMTAsIERBODUwX0VNQV9EXzExLAotCURBODUwX0VNQV9EXzEyLCBEQTg1MF9FTUFfRF8xMywgREE4NTBfRU1BX0RfMTQsIERBODUwX0VNQV9EXzE1LAotCURBODUwX0VNQV9BXzAsIERBODUwX0VNQV9BXzEsIERBODUwX0VNQV9BXzIsIERBODUwX0VNQV9BXzMsCi0JREE4NTBfRU1BX0FfNCwgREE4NTBfRU1BX0FfNSwgREE4NTBfRU1BX0FfNiwgREE4NTBfRU1BX0FfNywKLQlEQTg1MF9FTUFfQV84LCBEQTg1MF9FTUFfQV85LCBEQTg1MF9FTUFfQV8xMCwgREE4NTBfRU1BX0FfMTEsCi0JREE4NTBfRU1BX0FfMTIsIERBODUwX0VNQV9BXzEzLCBEQTg1MF9FTUFfQV8xNCwgREE4NTBfRU1BX0FfMTUsCi0JREE4NTBfRU1BX0FfMTYsIERBODUwX0VNQV9BXzE3LCBEQTg1MF9FTUFfQV8xOCwgREE4NTBfRU1BX0FfMTksCi0JREE4NTBfRU1BX0FfMjAsIERBODUwX0VNQV9BXzIxLCBEQTg1MF9FTUFfQV8yMiwgREE4NTBfRU1BX0FfMjMsCi0JLTEKLX07Ci0KIC8qIEZJUSBhcmUgcHJpIDAtMTsgb3RoZXJ3aXNlIDItNywgd2l0aCA3IGxvd2VzdCBwcmlvcml0eSAqLwogc3RhdGljIHU4IGRhODUwX2RlZmF1bHRfcHJpb3JpdGllc1tEQTg1MF9OX0NQX0lOVENfSVJRXSA9IHsKIAlbSVJRX0RBOFhYX0NPTU1UWF0JCT0gNywKQEAgLTc2NCw2ICs3NDQsMTMgQEAKIAkJLmNwdV9pZAkJPSBEQVZJTkNJX0NQVV9JRF9EQTg1MCwKIAkJLm5hbWUJCT0gImRhODUwL29tYXAtbDEzOCIsCiAJfSwKKwl7CisJCS52YXJpYW50CT0gMHgxLAorCQkucGFydF9ubwk9IDB4YjdkMSwKKwkJLm1hbnVmYWN0dXJlcgk9IDB4MDE3LAkvKiAweDAyZiA+PiAxICovCisJCS5jcHVfaWQJCT0gREFWSU5DSV9DUFVfSURfREE4NTAsCisJCS5uYW1lCQk9ICJkYTg1MC9vbWFwLWwxMzgvYW0xOHgiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGRhdmluY2lfdGltZXJfaW5zdGFuY2UgZGE4NTBfdGltZXJfaW5zdGFuY2VbNF0gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwppbmRleCBiZWRhOGE0Li42MjVkNGI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKQEAgLTM4LDEyICszOCwyMyBAQAogI2RlZmluZSBEQThYWF9FTUFDX01ESU9fQkFTRQkJMHgwMWUyNDAwMAogI2RlZmluZSBEQThYWF9HUElPX0JBU0UJCQkweDAxZTI2MDAwCiAjZGVmaW5lIERBOFhYX0kyQzFfQkFTRQkJCTB4MDFlMjgwMDAKKyNkZWZpbmUgREE4WFhfU1BJMF9CQVNFCQkJMHgwMWM0MTAwMAorI2RlZmluZSBEQThYWF9TUEkxX0JBU0UJCQkweDAxZjBlMDAwCiAKICNkZWZpbmUgREE4WFhfRU1BQ19DVFJMX1JFR19PRkZTRVQJMHgzMDAwCiAjZGVmaW5lIERBOFhYX0VNQUNfTU9EX1JFR19PRkZTRVQJMHgyMDAwCiAjZGVmaW5lIERBOFhYX0VNQUNfUkFNX09GRlNFVAkJMHgwMDAwCiAjZGVmaW5lIERBOFhYX0VNQUNfQ1RSTF9SQU1fU0laRQlTWl84SwogCisjZGVmaW5lIERBOFhYX0RNQV9TUEkwX1JYCUVETUFfQ1RMUl9DSEFOKDAsIDE0KQorI2RlZmluZSBEQThYWF9ETUFfU1BJMF9UWAlFRE1BX0NUTFJfQ0hBTigwLCAxNSkKKyNkZWZpbmUgREE4WFhfRE1BX01NQ1NEMF9SWAlFRE1BX0NUTFJfQ0hBTigwLCAxNikKKyNkZWZpbmUgREE4WFhfRE1BX01NQ1NEMF9UWAlFRE1BX0NUTFJfQ0hBTigwLCAxNykKKyNkZWZpbmUgREE4WFhfRE1BX1NQSTFfUlgJRURNQV9DVExSX0NIQU4oMCwgMTgpCisjZGVmaW5lIERBOFhYX0RNQV9TUEkxX1RYCUVETUFfQ1RMUl9DSEFOKDAsIDE5KQorI2RlZmluZSBEQTg1MF9ETUFfTU1DU0QxX1JYCUVETUFfQ1RMUl9DSEFOKDEsIDI4KQorI2RlZmluZSBEQTg1MF9ETUFfTU1DU0QxX1RYCUVETUFfQ1RMUl9DSEFOKDEsIDI5KQorCiB2b2lkIF9faW9tZW0gKmRhOHh4X3N5c2NmZzBfYmFzZTsKIHZvaWQgX19pb21lbSAqZGE4eHhfc3lzY2ZnMV9iYXNlOwogCkBAIC01NzMsMTMgKzU4NCwxMyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogCXsJCS8qIERNQSBSWCAqLwotCQkuc3RhcnQJPSBFRE1BX0NUTFJfQ0hBTigwLCAxNiksCi0JCS5lbmQJPSBFRE1BX0NUTFJfQ0hBTigwLCAxNiksCisJCS5zdGFydAk9IERBOFhYX0RNQV9NTUNTRDBfUlgsCisJCS5lbmQJPSBEQThYWF9ETUFfTU1DU0QwX1JYLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKIAl9LAogCXsJCS8qIERNQSBUWCAqLwotCQkuc3RhcnQJPSBFRE1BX0NUTFJfQ0hBTigwLCAxNyksCi0JCS5lbmQJPSBFRE1BX0NUTFJfQ0hBTigwLCAxNyksCisJCS5zdGFydAk9IERBOFhYX0RNQV9NTUNTRDBfVFgsCisJCS5lbmQJPSBEQThYWF9ETUFfTU1DU0QwX1RYLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKIAl9LAogfTsKQEAgLTYxMCwxMyArNjIxLDEzIEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiAJewkJLyogRE1BIFJYICovCi0JCS5zdGFydAk9IEVETUFfQ1RMUl9DSEFOKDEsIDI4KSwKLQkJLmVuZAk9IEVETUFfQ1RMUl9DSEFOKDEsIDI4KSwKKwkJLnN0YXJ0CT0gREE4NTBfRE1BX01NQ1NEMV9SWCwKKwkJLmVuZAk9IERBODUwX0RNQV9NTUNTRDFfUlgsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAogCX0sCiAJewkJLyogRE1BIFRYICovCi0JCS5zdGFydAk9IEVETUFfQ1RMUl9DSEFOKDEsIDI5KSwKLQkJLmVuZAk9IEVETUFfQ1RMUl9DSEFOKDEsIDI5KSwKKwkJLnN0YXJ0CT0gREE4NTBfRE1BX01NQ1NEMV9UWCwKKwkJLmVuZAk9IERBODUwX0RNQV9NTUNTRDFfVFgsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAogCX0sCiB9OwpAQCAtNzI1LDMgKzczNiwxMDEgQEAKIAogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRhOHh4X2NwdWlkbGVfZGV2aWNlKTsKIH0KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYTh4eF9zcGkwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gREE4WFhfU1BJMF9CQVNFLAorCQkuZW5kCT0gREE4WFhfU1BJMF9CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0RBOFhYX1NQSU5UMCwKKwkJLmVuZAk9IElSUV9EQThYWF9TUElOVDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBEQThYWF9ETUFfU1BJMF9SWCwKKwkJLmVuZAk9IERBOFhYX0RNQV9TUEkwX1JYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gREE4WFhfRE1BX1NQSTBfVFgsCisJCS5lbmQJPSBEQThYWF9ETUFfU1BJMF9UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGE4eHhfc3BpMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IERBOFhYX1NQSTFfQkFTRSwKKwkJLmVuZAk9IERBOFhYX1NQSTFfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9EQThYWF9TUElOVDEsCisJCS5lbmQJPSBJUlFfREE4WFhfU1BJTlQxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gREE4WFhfRE1BX1NQSTFfUlgsCisJCS5lbmQJPSBEQThYWF9ETUFfU1BJMV9SWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IERBOFhYX0RNQV9TUEkxX1RYLAorCQkuZW5kCT0gREE4WFhfRE1BX1NQSTFfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSBkYTh4eF9zcGlfcGRhdGFbXSA9IHsKKwlbMF0gPSB7CisJCS52ZXJzaW9uCT0gU1BJX1ZFUlNJT05fMiwKKwkJLmludHJfbGluZQk9IDEsCisJCS5kbWFfZXZlbnRfcQk9IEVWRU5UUV8wLAorCX0sCisJWzFdID0geworCQkudmVyc2lvbgk9IFNQSV9WRVJTSU9OXzIsCisJCS5pbnRyX2xpbmUJPSAxLAorCQkuZG1hX2V2ZW50X3EJPSBFVkVOVFFfMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGE4eHhfc3BpX2RldmljZVtdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gInNwaV9kYXZpbmNpIiwKKwkJLmlkCQk9IDAsCisJCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYTh4eF9zcGkwX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZQk9IGRhOHh4X3NwaTBfcmVzb3VyY2VzLAorCQkuZGV2CQk9IHsKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJmRhOHh4X3NwaV9wZGF0YVswXSwKKwkJfSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCT0gInNwaV9kYXZpbmNpIiwKKwkJLmlkCQk9IDEsCisJCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYTh4eF9zcGkxX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZQk9IGRhOHh4X3NwaTFfcmVzb3VyY2VzLAorCQkuZGV2CQk9IHsKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJmRhOHh4X3NwaV9wZGF0YVsxXSwKKwkJfSwKKwl9LAorfTsKKworaW50IF9faW5pdCBkYTh4eF9yZWdpc3Rlcl9zcGkoaW50IGluc3RhbmNlLCBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmluZm8sCisJCQkgICAgICB1bnNpZ25lZCBsZW4pCit7CisJaW50IHJldDsKKworCWlmIChpbnN0YW5jZSA8IDAgfHwgaW5zdGFuY2UgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGluZm8sIGxlbik7CisJaWYgKHJldCkKKwkJcHJfd2FybmluZygiJXM6IGZhaWxlZCB0byByZWdpc3RlciBib2FyZCBpbmZvIGZvciBzcGkgJWQgOiIKKwkJCSAgICIgJWRcbiIsIF9fZnVuY19fLCBpbnN0YW5jZSwgcmV0KTsKKworCWRhOHh4X3NwaV9wZGF0YVtpbnN0YW5jZV0ubnVtX2NoaXBzZWxlY3QgPSBsZW47CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYTh4eF9zcGlfZGV2aWNlW2luc3RhbmNlXSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy10bmV0djEwN3guYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLXRuZXR2MTA3eC5jCmluZGV4IDg1NTAzZGViLi42MTYyY2FlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy10bmV0djEwN3guYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy10bmV0djEwN3guYwpAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBUTkVUVjEwN1hfU0RJTzBfQkFTRQkJCTB4MDgwODg3MDAKICNkZWZpbmUgVE5FVFYxMDdYX1NESU8xX0JBU0UJCQkweDA4MDg4ODAwCiAjZGVmaW5lIFRORVRWMTA3WF9LRVlQQURfQkFTRQkJCTB4MDgwODhhMDAKKyNkZWZpbmUgVE5FVFYxMDdYX1NTUF9CQVNFCQkJMHgwODA4OGMwMAogI2RlZmluZSBUTkVUVjEwN1hfQVNZTkNfRU1JRl9DTlRSTF9CQVNFCQkweDA4MjAwMDAwCiAjZGVmaW5lIFRORVRWMTA3WF9BU1lOQ19FTUlGX0RBVEFfQ0UwX0JBU0UJMHgzMDAwMDAwMAogI2RlZmluZSBUTkVUVjEwN1hfQVNZTkNfRU1JRl9EQVRBX0NFMV9CQVNFCTB4NDAwMDAwMDAKQEAgLTM0Miw2ICszNDMsMjUgQEAKIAkucmVzb3VyY2UJPSB0c2NfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc3BfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBUTkVUVjEwN1hfU1NQX0JBU0UsCisJCS5lbmQJPSBUTkVUVjEwN1hfU1NQX0JBU0UgKyAweDFmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9UTkVUVjEwN1hfU1NQLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3NwX2RldmljZSA9IHsKKwkubmFtZQkJPSAidGktc3NwIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzcF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNzcF9yZXNvdXJjZXMsCit9OworCiB2b2lkIF9faW5pdCB0bmV0djEwN3hfZGV2aWNlc19pbml0KHN0cnVjdCB0bmV0djEwN3hfZGV2aWNlX2luZm8gKmluZm8pCiB7CiAJaW50IGksIGVycm9yOwpAQCAtMzgwLDQgKzQwMCw5IEBACiAJCWtleXBhZF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBpbmZvLT5rZXlwYWRfY29uZmlnOwogCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmtleXBhZF9kZXZpY2UpOwogCX0KKworCWlmIChpbmZvLT5zc3BfY29uZmlnKSB7CisJCXNzcF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBpbmZvLT5zc3BfY29uZmlnOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNzcF9kZXZpY2UpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKaW5kZXggYTVmOGE4MC4uNzYzNjRkMTM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYwpAQCAtNDAzLDE2ICs0MDMsMTMgQEAKIAkJLnN0YXJ0ID0gMTYsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAogCX0sCi0JewotCQkuc3RhcnQgPSBFVkVOVFFfMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSBkbTM1NV9zcGkwX3BkYXRhID0gewogCS52ZXJzaW9uIAk9IFNQSV9WRVJTSU9OXzEsCiAJLm51bV9jaGlwc2VsZWN0ID0gMiwKIAkuY3Nob2xkX2J1Zwk9IHRydWUsCisJLmRtYV9ldmVudF9xCT0gRVZFTlRRXzEsCiB9Owogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG0zNTVfc3BpMF9kZXZpY2UgPSB7CiAJLm5hbWUgPSAic3BpX2RhdmluY2kiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYwppbmRleCAwMmQyY2MzLi40NjA0ZTcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYwpAQCAtNjI1LDYgKzYyNSw3IEBACiBzdGF0aWMgc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgZG0zNjVfc3BpMF9wZGF0YSA9IHsKIAkudmVyc2lvbiAJPSBTUElfVkVSU0lPTl8xLAogCS5udW1fY2hpcHNlbGVjdCA9IDIsCisJLmRtYV9ldmVudF9xCT0gRVZFTlRRXzMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtMzY1X3NwaTBfcmVzb3VyY2VzW10gPSB7CkBAIC02NDUsMTAgKzY0Niw2IEBACiAJCS5zdGFydCA9IDE2LAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKIAl9LAotCXsKLQkJLnN0YXJ0ID0gRVZFTlRRXzMsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAotCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTM2NV9zcGkwX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGE4eHguaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGE4eHguaAppbmRleCBlN2Y5NTIwLi5lNGZjMWFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RhOHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kYTh4eC5oCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kYXZpbmNpX2VtYWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNpbmNsdWRlIDxtYWNoL3NlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgpAQCAtMjMsNiArMjQsNyBAQAogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KICNpbmNsdWRlIDxtYWNoL3BtLmg+CisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KIAogZXh0ZXJuIHZvaWQgX19pb21lbSAqZGE4eHhfc3lzY2ZnMF9iYXNlOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqZGE4eHhfc3lzY2ZnMV9iYXNlOwpAQCAtNzcsNiArNzksNyBAQAogaW50IGRhODMwX3JlZ2lzdGVyX2VkbWEoc3RydWN0IGVkbWFfcnN2X2luZm8gKnJzdik7CiBpbnQgZGE4NTBfcmVnaXN0ZXJfZWRtYShzdHJ1Y3QgZWRtYV9yc3ZfaW5mbyAqcnN2WzJdKTsKIGludCBkYTh4eF9yZWdpc3Rlcl9pMmMoaW50IGluc3RhbmNlLCBzdHJ1Y3QgZGF2aW5jaV9pMmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworaW50IGRhOHh4X3JlZ2lzdGVyX3NwaShpbnQgaW5zdGFuY2UsIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqaW5mbywgdW5zaWduZWQgbGVuKTsKIGludCBkYTh4eF9yZWdpc3Rlcl93YXRjaGRvZyh2b2lkKTsKIGludCBkYTh4eF9yZWdpc3Rlcl91c2IyMCh1bnNpZ25lZCBtQSwgdW5zaWduZWQgcG90cGd0KTsKIGludCBkYTh4eF9yZWdpc3Rlcl91c2IxMShzdHJ1Y3QgZGE4eHhfb2hjaV9yb290X2h1YiAqcGRhdGEpOwpAQCAtOTUsNiArOTgsNyBAQAogZXh0ZXJuIHN0cnVjdCBlbWFjX3BsYXRmb3JtX2RhdGEgZGE4eHhfZW1hY19wZGF0YTsKIGV4dGVybiBzdHJ1Y3QgZGE4eHhfbGNkY19wbGF0Zm9ybV9kYXRhIHNoYXJwX2xjZDAzNXEzZGcwMV9wZGF0YTsKIGV4dGVybiBzdHJ1Y3QgZGE4eHhfbGNkY19wbGF0Zm9ybV9kYXRhIHNoYXJwX2xrMDQzdDFkZzAxX3BkYXRhOworZXh0ZXJuIHN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhIGRhOHh4X3NwaV9wZGF0YVtdOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYTh4eF93ZHRfZGV2aWNlOwogCkBAIC0xMjMsMTUgKzEyNyw4IEBACiBleHRlcm4gY29uc3Qgc2hvcnQgZGE4MzBfZXFlcDBfcGluc1tdOwogZXh0ZXJuIGNvbnN0IHNob3J0IGRhODMwX2VxZXAxX3BpbnNbXTsKIAotZXh0ZXJuIGNvbnN0IHNob3J0IGRhODUwX3VhcnQwX3BpbnNbXTsKLWV4dGVybiBjb25zdCBzaG9ydCBkYTg1MF91YXJ0MV9waW5zW107Ci1leHRlcm4gY29uc3Qgc2hvcnQgZGE4NTBfdWFydDJfcGluc1tdOwogZXh0ZXJuIGNvbnN0IHNob3J0IGRhODUwX2kyYzBfcGluc1tdOwogZXh0ZXJuIGNvbnN0IHNob3J0IGRhODUwX2kyYzFfcGluc1tdOwotZXh0ZXJuIGNvbnN0IHNob3J0IGRhODUwX2NwZ21hY19waW5zW107Ci1leHRlcm4gY29uc3Qgc2hvcnQgZGE4NTBfbWNhc3BfcGluc1tdOwogZXh0ZXJuIGNvbnN0IHNob3J0IGRhODUwX2xjZGNudGxfcGluc1tdOwotZXh0ZXJuIGNvbnN0IHNob3J0IGRhODUwX21tY3NkMF9waW5zW107Ci1leHRlcm4gY29uc3Qgc2hvcnQgZGE4NTBfZW1pZjI1X3BpbnNbXTsKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfREFWSU5DSV9EQThYWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2VkbWEuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZWRtYS5oCmluZGV4IGRjMTBlZjYuLjIwYzc3ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZWRtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZWRtYS5oCkBAIC0xNTEsNDIgKzE1MSw2IEBACiAjZGVmaW5lIERBODMwX0RNQUNIMkVWRU5UX01BUDEJCTB4MDAwMDAwMDB1CiAjZGVmaW5lIERBODMwX0VETUFfQVJNX09XTgkJMHgzMEZGQ0NGRnUKIAotLyogREE4MzAgc3BlY2lmaWMgRURNQTMgRXZlbnRzIEluZm9ybWF0aW9uICovCi1lbnVtIERBODMwX2VkbWFfY2ggewotCURBODMwX0RNQUNIX01DQVNQMF9SWCwKLQlEQTgzMF9ETUFDSF9NQ0FTUDBfVFgsCi0JREE4MzBfRE1BQ0hfTUNBU1AxX1JYLAotCURBODMwX0RNQUNIX01DQVNQMV9UWCwKLQlEQTgzMF9ETUFDSF9NQ0FTUDJfUlgsCi0JREE4MzBfRE1BQ0hfTUNBU1AyX1RYLAotCURBODMwX0RNQUNIX0dQSU9fQk5LMElOVCwKLQlEQTgzMF9ETUFDSF9HUElPX0JOSzFJTlQsCi0JREE4MzBfRE1BQ0hfVUFSVDBfUlgsCi0JREE4MzBfRE1BQ0hfVUFSVDBfVFgsCi0JREE4MzBfRE1BQ0hfVE1SNjRQMF9FVlRPVVQxMiwKLQlEQTgzMF9ETUFDSF9UTVI2NFAwX0VWVE9VVDM0LAotCURBODMwX0RNQUNIX1VBUlQxX1JYLAotCURBODMwX0RNQUNIX1VBUlQxX1RYLAotCURBODMwX0RNQUNIX1NQSTBfUlgsCi0JREE4MzBfRE1BQ0hfU1BJMF9UWCwKLQlEQTgzMF9ETUFDSF9NTUNTRF9SWCwKLQlEQTgzMF9ETUFDSF9NTUNTRF9UWCwKLQlEQTgzMF9ETUFDSF9TUEkxX1JYLAotCURBODMwX0RNQUNIX1NQSTFfVFgsCi0JREE4MzBfRE1BQ0hfRE1BWF9FVlRPVVQ2LAotCURBODMwX0RNQUNIX0RNQVhfRVZUT1VUNywKLQlEQTgzMF9ETUFDSF9HUElPX0JOSzJJTlQsCi0JREE4MzBfRE1BQ0hfR1BJT19CTkszSU5ULAotCURBODMwX0RNQUNIX0kyQzBfUlgsCi0JREE4MzBfRE1BQ0hfSTJDMF9UWCwKLQlEQTgzMF9ETUFDSF9JMkMxX1JYLAotCURBODMwX0RNQUNIX0kyQzFfVFgsCi0JREE4MzBfRE1BQ0hfR1BJT19CTks0SU5ULAotCURBODMwX0RNQUNIX0dQSU9fQk5LNUlOVCwKLQlEQTgzMF9ETUFDSF9VQVJUMl9SWCwKLQlEQTgzMF9ETUFDSF9VQVJUMl9UWAotfTsKLQogLypjaF9zdGF0dXMgcGFyYW1hdGVyIG9mIGNhbGxiYWNrIGZ1bmN0aW9uIHBvc3NpYmxlIHZhbHVlcyovCiAjZGVmaW5lIERNQV9DT01QTEVURSAxCiAjZGVmaW5lIERNQV9DQ19FUlJPUiAyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL211eC5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9tdXguaAppbmRleCBkZTExYWFjLi41ZDRlMGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL211eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvbXV4LmgKQEAgLTkwOCwxMSArOTA4LDE1IEBACiAJREE4NTBfTkVNQV9DU18yLAogCiAJLyogR1BJTyBmdW5jdGlvbiAqLworCURBODUwX0dQSU8yXzQsCiAJREE4NTBfR1BJTzJfNiwKIAlEQTg1MF9HUElPMl84LAogCURBODUwX0dQSU8yXzE1LAorCURBODUwX0dQSU8zXzEyLAorCURBODUwX0dQSU8zXzEzLAogCURBODUwX0dQSU80XzAsCiAJREE4NTBfR1BJTzRfMSwKKwlEQTg1MF9HUElPNl8xMywKIAlEQTg1MF9SVENfQUxBUk0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3BzYy5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9wc2MuaAppbmRleCA2MmIwODU4Li5hNDdlNmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3BzYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvcHNjLmgKQEAgLTE1MCw3ICsxNTAsNyBAQAogI2RlZmluZSBEQThYWF9MUFNDMF9TQ1IwX1NTCQkxMAogI2RlZmluZSBEQThYWF9MUFNDMF9TQ1IxX1NTCQkxMQogI2RlZmluZSBEQThYWF9MUFNDMF9TQ1IyX1NTCQkxMgotI2RlZmluZSBEQThYWF9MUFNDMF9ETUFYCQkxMworI2RlZmluZSBEQThYWF9MUFNDMF9QUlVTUwkJMTMKICNkZWZpbmUgREE4WFhfTFBTQzBfQVJNCQkJMTQKICNkZWZpbmUgREE4WFhfTFBTQzBfR0VNCQkJMTUKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc3BpLmgKaW5kZXggMzhmNGRhNS4uN2FmMzA1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zcGkuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NwaS5oCkBAIC0xOSw2ICsxOSw4IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fREFWSU5DSV9TUElfSAogI2RlZmluZSBfX0FSQ0hfQVJNX0RBVklOQ0lfU1BJX0gKIAorI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgorCiAjZGVmaW5lIFNQSV9JTlRFUk5fQ1MJMHhGRgogCiBlbnVtIHsKQEAgLTM5LDEzICs0MSwxNiBAQAogICoJCXRvIHBvcHVsYXRlIGlmIGFsbCBjaGlwLXNlbGVjdHMgYXJlIGludGVybmFsLgogICogQGNzaG9sZF9idWc6CXNldCB0aGlzIHRvIHRydWUgaWYgdGhlIFNQSSBjb250cm9sbGVyIG9uIHlvdXIgY2hpcCByZXF1aXJlcwogICoJCWEgd3JpdGUgdG8gQ1NIT0xEIGJpdCBpbiBiZXR3ZWVuIHRyYW5zZmVycyAobGlrZSBpbiBETTM1NSkuCisgKiBAZG1hX2V2ZW50X3E6IERNQSBldmVudCBxdWV1ZSB0byB1c2UgaWYgU1BJX0lPX1RZUEVfRE1BIGlzIHVzZWQgZm9yIGFueQorICoJCWRldmljZSBvbiB0aGUgYnVzLgogICovCiBzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSB7Ci0JdTgJdmVyc2lvbjsKLQl1OAludW1fY2hpcHNlbGVjdDsKLQl1OAlpbnRyX2xpbmU7Ci0JdTgJKmNoaXBfc2VsOwotCWJvb2wJY3Nob2xkX2J1ZzsKKwl1OAkJCXZlcnNpb247CisJdTgJCQludW1fY2hpcHNlbGVjdDsKKwl1OAkJCWludHJfbGluZTsKKwl1OAkJCSpjaGlwX3NlbDsKKwlib29sCQkJY3Nob2xkX2J1ZzsKKwllbnVtIGRtYV9ldmVudF9xCWRtYV9ldmVudF9xOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3RuZXR2MTA3eC5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC90bmV0djEwN3guaAppbmRleCA1YTY4MWQ4Li44OWMxZmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3RuZXR2MTA3eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvdG5ldHYxMDd4LmgKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90aV9zc3AuaD4KIAogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CkBAIC00NCw2ICs0NSw3IEBACiAJc3RydWN0IGRhdmluY2lfbW1jX2NvbmZpZwkqbW1jX2NvbmZpZ1syXTsgIC8qIDIgY29udHJvbGxlcnMgKi8KIAlzdHJ1Y3QgZGF2aW5jaV9uYW5kX3BkYXRhCSpuYW5kX2NvbmZpZ1s0XTsgLyogNCBjaGlwc2VscyAqLwogCXN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKmtleXBhZF9jb25maWc7CisJc3RydWN0IHRpX3NzcF9kYXRhCQkqc3NwX2NvbmZpZzsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRuZXR2MTA3eF93ZHRfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RuZXR2MTA3eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RuZXR2MTA3eC5jCmluZGV4IDZmY2RlY2UuLjFiMjhmZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90bmV0djEwN3guYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvdG5ldHYxMDd4LmMKQEAgLTI3OCw3ICsyNzgsNyBAQAogCUNMSyhOVUxMLAkJInRpbWVyMSIsCQkmY2xrX3RpbWVyMSksCiAJQ0xLKCJ0bmV0djEwN3hfd2R0LjAiLAlOVUxMLAkJCSZjbGtfd2R0X2FybSksCiAJQ0xLKE5VTEwsCQkiY2xrX3dkdF9kc3AiLAkJJmNsa193ZHRfZHNwKSwKLQlDTEsoInRpLXNzcC4wIiwJCU5VTEwsCQkJJmNsa19zc3ApLAorCUNMSygidGktc3NwIiwJCU5VTEwsCQkJJmNsa19zc3ApLAogCUNMSyhOVUxMLAkJImNsa190ZG0wIiwJCSZjbGtfdGRtMCksCiAJQ0xLKE5VTEwsCQkiY2xrX3ZseW5xIiwJCSZjbGtfdmx5bnEpLAogCUNMSyhOVUxMLAkJImNsa19tY2RtYSIsCQkmY2xrX21jZG1hKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9jbS1hNTEwLmMgYi9hcmNoL2FybS9tYWNoLWRvdmUvY20tYTUxMC5jCmluZGV4IDk2ZTBlOTQuLjAzZTExZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZG92ZS9jbS1hNTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2NtLWE1MTAuYwpAQCAtOTAsNiArOTAsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGNtX2E1MTBfaW5pdCwKIAkubWFwX2lvCQk9IGRvdmVfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gZG92ZV9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGRvdmVfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZkb3ZlX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uYwppbmRleCBmZTYyN2FiLi5lMDZhODhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1vbi5jCkBAIC01MzIsNiArNTMyLDExIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRpbWUgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBfX2luaXQgZG92ZV9pbml0X2Vhcmx5KHZvaWQpCit7CisJb3Jpb25fdGltZV9zZXRfYmFzZShUSU1FUl9WSVJUX0JBU0UpOworfQorCiBzdGF0aWMgaW50IGdldF90Y2xrKHZvaWQpCiB7CiAJLyogdXNlIERPVkVfUkVTRVRfU0FNUExFX0hJL0xPIHRvIGRldGVjdCB0Y2xrICovCkBAIC01NDAsNyArNTQ1LDggQEAKIAogc3RhdGljIHZvaWQgZG92ZV90aW1lcl9pbml0KHZvaWQpCiB7Ci0Jb3Jpb25fdGltZV9pbml0KElSUV9ET1ZFX0JSSURHRSwgZ2V0X3RjbGsoKSk7CisJb3Jpb25fdGltZV9pbml0KEJSSURHRV9WSVJUX0JBU0UsIEJSSURHRV9JTlRfVElNRVIxX0NMUiwKKwkJCUlSUV9ET1ZFX0JSSURHRSwgZ2V0X3RjbGsoKSk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgZG92ZV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uaAppbmRleCBhNTE1MTdjLi42YTIwNDZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1vbi5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIHZvaWQgZG92ZV9tYXBfaW8odm9pZCk7CiB2b2lkIGRvdmVfaW5pdCh2b2lkKTsKK3ZvaWQgZG92ZV9pbml0X2Vhcmx5KHZvaWQpOwogdm9pZCBkb3ZlX2luaXRfaXJxKHZvaWQpOwogdm9pZCBkb3ZlX3NldHVwX2NwdV9tYnVzKHZvaWQpOwogdm9pZCBkb3ZlX2dlMDBfaW5pdChzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2RvdmUtZGItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtZG92ZS9kb3ZlLWRiLXNldHVwLmMKaW5kZXggOTU5MjVhYS4uMmFjMzRlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2RvdmUtZGItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvZG92ZS1kYi1zZXR1cC5jCkBAIC05Nyw2ICs5Nyw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gZG92ZV9kYl9pbml0LAogCS5tYXBfaW8JCT0gZG92ZV9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBkb3ZlX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gZG92ZV9pbml0X2lycSwKIAkudGltZXIJCT0gJmRvdmVfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCmluZGV4IDIxNGE0YzMuLjIyNjk0OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKQEAgLTI2LDEwICsyNiw2IEBACiAjZGVmaW5lIFNZU1RFTV9TT0ZUX1JFU0VUCShCUklER0VfVklSVF9CQVNFIHwgMHgwMTBjKQogI2RlZmluZSAgU09GVF9SRVNFVAkJMHgwMDAwMDAwMQogCi0jZGVmaW5lIEJSSURHRV9DQVVTRQkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAxMTApCi0jZGVmaW5lIEJSSURHRV9NQVNLCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDExNCkKLSNkZWZpbmUgIEJSSURHRV9JTlRfVElNRVIwCTB4MDAwMgotI2RlZmluZSAgQlJJREdFX0lOVF9USU1FUjEJMHgwMDA0CiAjZGVmaW5lICBCUklER0VfSU5UX1RJTUVSMV9DTFIJKH4weDAwMDQpCiAKICNkZWZpbmUgSVJRX1ZJUlRfQkFTRQkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAyMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2RvdmUuaCBiL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvZG92ZS5oCmluZGV4IDI3YjQxNDUuLmU1ZmNkZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvZG92ZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvZG92ZS5oCkBAIC0xMzAsNyArMTMwLDggQEAKICNkZWZpbmUgRE9WRV9QTVVfTVBQX0dFTkVSQUxfQ1RSTCAoRE9WRV9NUFBfVklSVF9CQVNFICsgMHgxMCkKICNkZWZpbmUgRE9WRV9SRVNFVF9TQU1QTEVfTE8JKERPVkVfTVBQX1ZJUlRfQkFTRSB8IDB4MDE0KQogI2RlZmluZSBET1ZFX1JFU0VUX1NBTVBMRV9ISQkoRE9WRV9NUFBfVklSVF9CQVNFIHwgMHgwMTgpCi0jZGVmaW5lIERPVkVfR1BJT19WSVJUX0JBU0UJKERPVkVfU0JfUkVHU19WSVJUX0JBU0UgfCAweGQwNDAwKQorI2RlZmluZSBET1ZFX0dQSU9fTE9fVklSVF9CQVNFCShET1ZFX1NCX1JFR1NfVklSVF9CQVNFIHwgMHhkMDQwMCkKKyNkZWZpbmUgRE9WRV9HUElPX0hJX1ZJUlRfQkFTRQkoRE9WRV9TQl9SRUdTX1ZJUlRfQkFTRSB8IDB4ZDA0MjApCiAjZGVmaW5lIERPVkVfR1BJTzJfVklSVF9CQVNFICAgIChET1ZFX1NCX1JFR1NfVklSVF9CQVNFIHwgMHhlODQwMCkKICNkZWZpbmUgRE9WRV9NUFBfR0VORVJBTF9WSVJUX0JBU0UJKERPVkVfU0JfUkVHU19WSVJUX0JBU0UgfCAweGU4MDNjKQogI2RlZmluZSAgRE9WRV9BVTFfU1BESUZPX0dQSU9fRU4JKDEgPDwgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggMzQwYmI3YS4uZTdlNTEwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTYsNDYgKzYsNCBAQAogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9HUElPX0gKLSNkZWZpbmUgX19BU01fQVJDSF9HUElPX0gKLQotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4JCS8qIGNhbnNsZWVwIHdyYXBwZXJzICovCi0KLSNkZWZpbmUgR1BJT19NQVgJNzIKLQotI2RlZmluZSBHUElPX0JBU0VfTE8JCShET1ZFX0dQSU9fVklSVF9CQVNFICsgMHgwMCkKLSNkZWZpbmUgR1BJT19CQVNFX0hJCQkoRE9WRV9HUElPX1ZJUlRfQkFTRSArIDB4MjApCi0KLSNkZWZpbmUgR1BJT19CQVNFKHBpbikJCSgocGluIDwgMzIpID8gR1BJT19CQVNFX0xPIDoJCVwKLQkJCQkgKChwaW4gPCA2NCkgPyBHUElPX0JBU0VfSEkgOgkJXAotCQkJCSAgRE9WRV9HUElPMl9WSVJUX0JBU0UpKQotCi0jZGVmaW5lIEdQSU9fT1VUKHBpbikJCShHUElPX0JBU0UocGluKSArIDB4MDApCi0jZGVmaW5lIEdQSU9fSU9fQ09ORihwaW4pCShHUElPX0JBU0UocGluKSArIDB4MDQpCi0jZGVmaW5lIEdQSU9fQkxJTktfRU4ocGluKQkoR1BJT19CQVNFKHBpbikgKyAweDA4KQotI2RlZmluZSBHUElPX0lOX1BPTChwaW4pCShHUElPX0JBU0UocGluKSArIDB4MGMpCi0jZGVmaW5lIEdQSU9fREFUQV9JTihwaW4pCShHUElPX0JBU0UocGluKSArIDB4MTApCi0jZGVmaW5lIEdQSU9fRURHRV9DQVVTRShwaW4pCShHUElPX0JBU0UocGluKSArIDB4MTQpCi0jZGVmaW5lIEdQSU9fRURHRV9NQVNLKHBpbikJKEdQSU9fQkFTRShwaW4pICsgMHgxOCkKLSNkZWZpbmUgR1BJT19MRVZFTF9NQVNLKHBpbikJKEdQSU9fQkFTRShwaW4pICsgMHgxYykKLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEoaW50IHBpbikKLXsKLQlpZiAocGluIDwgTlJfR1BJT19JUlFTKQotCQlyZXR1cm4gcGluICsgSVJRX0RPVkVfR1BJT19TVEFSVDsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3BpbyhpbnQgaXJxKQotewotCWlmIChJUlFfRE9WRV9HUElPX1NUQVJUIDwgaXJxICYmIGlycSA8IE5SX0lSUVMpCi0JCXJldHVybiBpcnEgLSBJUlFfRE9WRV9HUElPX1NUQVJUOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA0NjY4MTQ2Li4wM2Q0MDFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtOTIsMTAgKzkyLDUgQEAKIAogI2RlZmluZSBOUl9JUlFTCQkJKElSUV9ET1ZFX1BNVV9TVEFSVCArIE5SX1BNVV9JUlFTKQogCi0vKiBSZXF1aXJlZCBmb3IgY29tcGF0YWJpbGl0eSB3aXRoIFBYQSBBQzk3IGRyaXZlci4JKi8KLSNkZWZpbmUgSVJRX0FDOTcJCUlSUV9ET1ZFX0FDOTcKLS8qIFJlcXVpcmVkIGZvciBjb21wYXRhYmlsaXR5IHdpdGggUFhBIERNQSBkcml2ZXIuCSovCi0jZGVmaW5lIElSUV9ETUEJCQlJUlFfRE9WRV9QRE1BCi0vKiBSZXF1aXJlZCBmb3IgY29tcGF0YWJpbGl0eSB3aXRoIFBYQSBOQU5EIGRyaXZlciAJKi8KLSNkZWZpbmUgSVJRX05BTkQJCUlSUV9ET1ZFX05BTkQKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRvdmUvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWRvdmUvaXJxLmMKaW5kZXggOTMxN2YwNS4uMTAxNzA3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9pcnEuYwpAQCAtOTksMTEgKzk5LDIxIEBACiAJb3Jpb25faXJxX2luaXQoMzIsICh2b2lkIF9faW9tZW0gKikoSVJRX1ZJUlRfQkFTRSArIElSUV9NQVNLX0hJR0hfT0ZGKSk7CiAKIAkvKgotCSAqIE1hc2sgYW5kIGNsZWFyIEdQSU8gSVJRIGludGVycnVwdHMuCisJICogSW5pdGlhbGl6ZSBncGlvbGliIGZvciBHUElPcyAwLTcxLgogCSAqLwotCXdyaXRlbCgwLCBHUElPX0xFVkVMX01BU0soMCkpOwotCXdyaXRlbCgwLCBHUElPX0VER0VfTUFTSygwKSk7Ci0Jd3JpdGVsKDAsIEdQSU9fRURHRV9DQVVTRSgwKSk7CisJb3Jpb25fZ3Bpb19pbml0KDAsIDMyLCBET1ZFX0dQSU9fTE9fVklSVF9CQVNFLCAwLAorCQkJSVJRX0RPVkVfR1BJT19TVEFSVCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0RPVkVfR1BJT18wXzcsIGdwaW9faXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9ET1ZFX0dQSU9fOF8xNSwgZ3Bpb19pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0RPVkVfR1BJT18xNl8yMywgZ3Bpb19pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0RPVkVfR1BJT18yNF8zMSwgZ3Bpb19pcnFfaGFuZGxlcik7CisKKwlvcmlvbl9ncGlvX2luaXQoMzIsIDMyLCBET1ZFX0dQSU9fSElfVklSVF9CQVNFLCAwLAorCQkJSVJRX0RPVkVfR1BJT19TVEFSVCArIDMyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRE9WRV9ISUdIX0dQSU8sIGdwaW9faXJxX2hhbmRsZXIpOworCisJb3Jpb25fZ3Bpb19pbml0KDY0LCA4LCBET1ZFX0dQSU8yX1ZJUlRfQkFTRSwgMCwKKwkJCUlSUV9ET1ZFX0dQSU9fU1RBUlQgKyA2NCk7CiAKIAkvKgogCSAqIE1hc2sgYW5kIGNsZWFyIFBNVSBpbnRlcnJ1cHRzCkBAIC0xMTEsMTggKzEyMSw2IEBACiAJd3JpdGVsKDAsIFBNVV9JTlRFUlJVUFRfTUFTSyk7CiAJd3JpdGVsKDAsIFBNVV9JTlRFUlJVUFRfQ0FVU0UpOwogCi0JZm9yIChpID0gSVJRX0RPVkVfR1BJT19TVEFSVDsgaSA8IElSUV9ET1ZFX1BNVV9TVEFSVDsgaSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpLCAmb3Jpb25fZ3Bpb19pcnFfY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX2Rlc2NbaV0uc3RhdHVzIHw9IElSUV9MRVZFTDsKLQkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKLQl9Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0RPVkVfR1BJT18wXzcsIGdwaW9faXJxX2hhbmRsZXIpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9ET1ZFX0dQSU9fOF8xNSwgZ3Bpb19pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0RPVkVfR1BJT18xNl8yMywgZ3Bpb19pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0RPVkVfR1BJT18yNF8zMSwgZ3Bpb19pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0RPVkVfSElHSF9HUElPLCBncGlvX2lycV9oYW5kbGVyKTsKLQogCWZvciAoaSA9IElSUV9ET1ZFX1BNVV9TVEFSVDsgaSA8IE5SX0lSUVM7IGkrKykgewogCQlzZXRfaXJxX2NoaXAoaSwgJnBtdV9pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAyMWI1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9LY29uZmlnCkBAIC0wLDAgKzEsMTk1IEBACisjIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9LY29uZmlnCisjCisjIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisjCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEVYWU5PUzQKKworaWYgQVJDSF9FWFlOT1M0CisKK2NvbmZpZyBDUFVfRVhZTk9TNDIxMAorCWJvb2wKKwlzZWxlY3QgUzNDX1BMMzMwX0RNQQorCWhlbHAKKwkgIEVuYWJsZSBFWFlOT1M0MjEwIENQVSBzdXBwb3J0CisKK2NvbmZpZyBFWFlOT1M0X01DVAorCWJvb2wgIktlcm5lbCB0aW1lciBzdXBwb3J0IGJ5IE1DVCIKKwloZWxwCisJICBVc2UgTUNUIChNdWx0aSBDb3JlIFRpbWVyKSBhcyBrZXJuZWwgdGltZXJzCisKK2NvbmZpZyBFWFlOT1M0X0RFVl9QRAorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgUG93ZXIgRG9tYWluCisKK2NvbmZpZyBFWFlOT1M0X0RFVl9TWVNNTVUKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFNZU1RFTSBNTVUgaW4gRVhZTk9TNAorCitjb25maWcgRVhZTk9TNF9TRVRVUF9JMkMxCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDEuCisKK2NvbmZpZyBFWFlOT1M0X1NFVFVQX0kyQzIKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMi4KKworY29uZmlnIEVYWU5PUzRfU0VUVVBfSTJDMworCWJvb2wKKwloZWxwCisJICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyAzLgorCitjb25maWcgRVhZTk9TNF9TRVRVUF9JMkM0CisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDQuCisKK2NvbmZpZyBFWFlOT1M0X1NFVFVQX0kyQzUKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgNS4KKworY29uZmlnIEVYWU5PUzRfU0VUVVBfSTJDNgorCWJvb2wKKwloZWxwCisJICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyA2LgorCitjb25maWcgRVhZTk9TNF9TRVRVUF9JMkM3CisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDcuCisKK2NvbmZpZyBFWFlOT1M0X1NFVFVQX0tFWVBBRAorCWJvb2wKKwloZWxwCisJICBDb21tb24gc2V0dXAgY29kZSBmb3Iga2V5cGFkLgorCitjb25maWcgRVhZTk9TNF9TRVRVUF9TREhDSQorCWJvb2wKKwlzZWxlY3QgRVhZTk9TNF9TRVRVUF9TREhDSV9HUElPCisJaGVscAorCSAgSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgRVhZTk9TNCBiYXNlZCBTREhDSSBzeXN0ZW1zLgorCitjb25maWcgRVhZTk9TNF9TRVRVUF9TREhDSV9HUElPCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBTREhDSSBncGlvLgorCitjb25maWcgRVhZTk9TNF9TRVRVUF9GSU1DCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciB0aGUgY2FtZXJhIGludGVyZmFjZXMuCisKKyMgbWFjaGluZSBzdXBwb3J0CisKK21lbnUgIkVYWU5PUzQgTWFjaGluZXMiCisKK2NvbmZpZyBNQUNIX1NNREtDMjEwCisJYm9vbCAiU01ES0MyMTAiCisJc2VsZWN0IENQVV9FWFlOT1M0MjEwCisJc2VsZWN0IFMzQ19ERVZfUlRDCisJc2VsZWN0IFMzQ19ERVZfV0RUCisJc2VsZWN0IFMzQ19ERVZfSTJDMQorCXNlbGVjdCBTM0NfREVWX0hTTU1DCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMxCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMyCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMzCisJc2VsZWN0IEVYWU5PUzRfREVWX1BECisJc2VsZWN0IEVYWU5PUzRfREVWX1NZU01NVQorCXNlbGVjdCBFWFlOT1M0X1NFVFVQX0kyQzEKKwlzZWxlY3QgRVhZTk9TNF9TRVRVUF9TREhDSQorCWhlbHAKKwkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTTURLQzIxMAorCitjb25maWcgTUFDSF9TTURLVjMxMAorCWJvb2wgIlNNREtWMzEwIgorCXNlbGVjdCBDUFVfRVhZTk9TNDIxMAorCXNlbGVjdCBTM0NfREVWX1JUQworCXNlbGVjdCBTM0NfREVWX1dEVAorCXNlbGVjdCBTM0NfREVWX0kyQzEKKwlzZWxlY3QgUzNDX0RFVl9IU01NQworCXNlbGVjdCBTM0NfREVWX0hTTU1DMQorCXNlbGVjdCBTM0NfREVWX0hTTU1DMgorCXNlbGVjdCBTM0NfREVWX0hTTU1DMworCXNlbGVjdCBTQU1TVU5HX0RFVl9LRVlQQUQKKwlzZWxlY3QgRVhZTk9TNF9ERVZfUEQKKwlzZWxlY3QgRVhZTk9TNF9ERVZfU1lTTU1VCisJc2VsZWN0IEVYWU5PUzRfU0VUVVBfSTJDMQorCXNlbGVjdCBFWFlOT1M0X1NFVFVQX0tFWVBBRAorCXNlbGVjdCBFWFlOT1M0X1NFVFVQX1NESENJCisJaGVscAorCSAgTWFjaGluZSBzdXBwb3J0IGZvciBTYW1zdW5nIFNNREtWMzEwCisKK2NvbmZpZyBNQUNIX0FSTUxFWDQyMTAKKwlib29sICJBUk1MRVg0MjEwIgorCXNlbGVjdCBDUFVfRVhZTk9TNDIxMAorCXNlbGVjdCBTM0NfREVWX1JUQworCXNlbGVjdCBTM0NfREVWX1dEVAorCXNlbGVjdCBTM0NfREVWX0hTTU1DCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMyCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMzCisJc2VsZWN0IEVYWU5PUzRfREVWX1NZU01NVQorCXNlbGVjdCBFWFlOT1M0X1NFVFVQX1NESENJCisJc2VsZWN0IFNBVEFfQUhDSV9QTEFURk9STQorCWhlbHAKKwkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgU2Ftc3VuZyBBUk1MRVg0MjEwIGJhc2VkIG9uIEVYWU5PUzQyMTAKKworY29uZmlnIE1BQ0hfVU5JVkVSU0FMX0MyMTAKKwlib29sICJNb2JpbGUgVU5JVkVSU0FMX0MyMTAgQm9hcmQiCisJc2VsZWN0IENQVV9FWFlOT1M0MjEwCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMKKwlzZWxlY3QgUzNDX0RFVl9IU01NQzIKKwlzZWxlY3QgUzNDX0RFVl9IU01NQzMKKwlzZWxlY3QgUzNDX0RFVl9JMkMxCisJc2VsZWN0IFMzQ19ERVZfSTJDNQorCXNlbGVjdCBTNVBfREVWX09ORU5BTkQKKwlzZWxlY3QgRVhZTk9TNF9TRVRVUF9JMkMxCisJc2VsZWN0IEVYWU5PUzRfU0VUVVBfSTJDNQorCXNlbGVjdCBFWFlOT1M0X1NFVFVQX1NESENJCisJaGVscAorCSAgTWFjaGluZSBzdXBwb3J0IGZvciBTYW1zdW5nIE1vYmlsZSBVbml2ZXJzYWwgUzVQQzIxMCBSZWZlcmVuY2UKKwkgIEJvYXJkLgorCitjb25maWcgTUFDSF9OVVJJCisJYm9vbCAiTW9iaWxlIE5VUkkgQm9hcmQiCisJc2VsZWN0IENQVV9FWFlOT1M0MjEwCisJc2VsZWN0IFMzQ19ERVZfV0RUCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMKKwlzZWxlY3QgUzNDX0RFVl9IU01NQzIKKwlzZWxlY3QgUzNDX0RFVl9IU01NQzMKKwlzZWxlY3QgUzNDX0RFVl9JMkMxCisJc2VsZWN0IFMzQ19ERVZfSTJDNQorCXNlbGVjdCBFWFlOT1M0X1NFVFVQX0kyQzEKKwlzZWxlY3QgRVhZTk9TNF9TRVRVUF9JMkM1CisJc2VsZWN0IEVYWU5PUzRfU0VUVVBfU0RIQ0kKKwlzZWxlY3QgU0FNU1VOR19ERVZfUFdNCisJaGVscAorCSAgTWFjaGluZSBzdXBwb3J0IGZvciBTYW1zdW5nIE1vYmlsZSBOVVJJIEJvYXJkLgorCitlbmRtZW51CisKK2NvbW1lbnQgIkNvbmZpZ3VyYXRpb24gZm9yIEhTTU1DIGJ1cyB3aWR0aCIKKworbWVudSAiVXNlIDgtYml0IGJ1cyB3aWR0aCIKKworY29uZmlnIEVYWU5PUzRfU0RIQ0lfQ0gwXzhCSVQKKwlib29sICJDaGFubmVsIDAgd2l0aCA4LWJpdCBidXMiCisJaGVscAorCSAgU3VwcG9ydCBIU01NQyBDaGFubmVsIDAgOC1iaXQgYnVzLgorCSAgSWYgc2VsZWN0ZWQsIENoYW5uZWwgMSBpcyBkaXNhYmxlZC4KKworY29uZmlnIEVYWU5PUzRfU0RIQ0lfQ0gyXzhCSVQKKwlib29sICJDaGFubmVsIDIgd2l0aCA4LWJpdCBidXMiCisJaGVscAorCSAgU3VwcG9ydCBIU01NQyBDaGFubmVsIDIgOC1iaXQgYnVzLgorCSAgSWYgc2VsZWN0ZWQsIENoYW5uZWwgMyBpcyBkaXNhYmxlZC4KKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjBlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUKQEAgLTAsMCArMSw1NiBAQAorIyBhcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyMJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK29iai15CQkJCTo9CitvYmotbQkJCQk6PQorb2JqLW4JCQkJOj0KK29iai0JCQkJOj0KKworIyBDb3JlIHN1cHBvcnQgZm9yIEVYWU5PUzQgc3lzdGVtCisKK29iai0kKENPTkZJR19DUFVfRVhZTk9TNDIxMCkJKz0gY3B1Lm8gaW5pdC5vIGNsb2NrLm8gaXJxLWNvbWJpbmVyLm8KK29iai0kKENPTkZJR19DUFVfRVhZTk9TNDIxMCkJKz0gc2V0dXAtaTJjMC5vIGdwaW9saWIubyBpcnEtZWludC5vIGRtYS5vCitvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vIHNsZWVwLm8KK29iai0kKENPTkZJR19DUFVfRlJFUSkJCSs9IGNwdWZyZXEubworCitvYmotJChDT05GSUdfU01QKQkJKz0gcGxhdHNtcC5vIGhlYWRzbXAubworCitpZmVxICgkKENPTkZJR19FWFlOT1M0X01DVCkseSkKK29iai15CQkJCSs9IG1jdC5vCitlbHNlCitvYmoteQkJCQkrPSB0aW1lLm8KK29iai0kKENPTkZJR19MT0NBTF9USU1FUlMpCSs9IGxvY2FsdGltZXIubworZW5kaWYKKworb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLm8KKworIyBtYWNoaW5lIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX01BQ0hfU01ES0MyMTApCQkrPSBtYWNoLXNtZGtjMjEwLm8KK29iai0kKENPTkZJR19NQUNIX1NNREtWMzEwKQkJKz0gbWFjaC1zbWRrdjMxMC5vCitvYmotJChDT05GSUdfTUFDSF9BUk1MRVg0MjEwKQkJKz0gbWFjaC1hcm1sZXg0MjEwLm8KK29iai0kKENPTkZJR19NQUNIX1VOSVZFUlNBTF9DMjEwKQkrPSBtYWNoLXVuaXZlcnNhbF9jMjEwLm8KK29iai0kKENPTkZJR19NQUNIX05VUkkpCQkJKz0gbWFjaC1udXJpLm8KKworIyBkZXZpY2Ugc3VwcG9ydAorCitvYmoteQkJCQkJKz0gZGV2LWF1ZGlvLm8KK29iai0kKENPTkZJR19FWFlOT1M0X0RFVl9QRCkJCSs9IGRldi1wZC5vCitvYmotJChDT05GSUdfRVhZTk9TNF9ERVZfU1lTTU1VKQkrPSBkZXYtc3lzbW11Lm8KKworb2JqLSQoQ09ORklHX0VYWU5PUzRfU0VUVVBfRklNQykJKz0gc2V0dXAtZmltYy5vCitvYmotJChDT05GSUdfRVhZTk9TNF9TRVRVUF9JMkMxKQkrPSBzZXR1cC1pMmMxLm8KK29iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX0kyQzIpCSs9IHNldHVwLWkyYzIubworb2JqLSQoQ09ORklHX0VYWU5PUzRfU0VUVVBfSTJDMykJKz0gc2V0dXAtaTJjMy5vCitvYmotJChDT05GSUdfRVhZTk9TNF9TRVRVUF9JMkM0KQkrPSBzZXR1cC1pMmM0Lm8KK29iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX0kyQzUpCSs9IHNldHVwLWkyYzUubworb2JqLSQoQ09ORklHX0VYWU5PUzRfU0VUVVBfSTJDNikJKz0gc2V0dXAtaTJjNi5vCitvYmotJChDT05GSUdfRVhZTk9TNF9TRVRVUF9JMkM3KQkrPSBzZXR1cC1pMmM3Lm8KK29iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX0tFWVBBRCkJKz0gc2V0dXAta2V5cGFkLm8KK29iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX1NESENJKQkrPSBzZXR1cC1zZGhjaS5vCitvYmotJChDT05GSUdfRVhZTk9TNF9TRVRVUF9TREhDSV9HUElPKQkrPSBzZXR1cC1zZGhjaS1ncGlvLm8KK29iai0kKENPTkZJR19TQVRBX0FIQ0lfUExBVEZPUk0pCSs9IGRldi1haGNpLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L01ha2VmaWxlLmJvb3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZS5ib290CnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUuYm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvY2xvY2suYwpzaW1pbGFyaXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvY2xvY2suYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2Nsb2NrLmMKaW5kZXggZmM3YzJmOC4uODcxZjlkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2Nsb2NrLmMKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvY2xvY2suYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2Nsb2NrLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgotICogUzVQVjMxMCAtIENsb2NrIHN1cHBvcnQKKyAqIEVYWU5PUzQgLSBDbG9jayBzdXBwb3J0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvc3lzbW11Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19zY2xrX2hkbWkyN20gPSB7CiAJLm5hbWUJCT0gInNjbGtfaGRtaTI3bSIsCkBAIC00Niw3MiArNDcsODIgQEAKIAkuaWQJCT0gLTEsCiB9OwogCi1zdGF0aWMgaW50IHM1cHYzMTBfY2xrc3JjX21hc2tfdG9wX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBleHlub3M0X2Nsa3NyY19tYXNrX3RvcF9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKIAlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtTUkNfTUFTS19UT1AsIGNsaywgZW5hYmxlKTsKIH0KIAotc3RhdGljIGludCBzNXB2MzEwX2Nsa3NyY19tYXNrX2NhbV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgZXh5bm9zNF9jbGtzcmNfbWFza19jYW1fY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCiB7CiAJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLU1JDX01BU0tfQ0FNLCBjbGssIGVuYWJsZSk7CiB9CiAKLXN0YXRpYyBpbnQgczVwdjMxMF9jbGtzcmNfbWFza19sY2QwX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBleHlub3M0X2Nsa3NyY19tYXNrX2xjZDBfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCiB7CiAJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLU1JDX01BU0tfTENEMCwgY2xrLCBlbmFibGUpOwogfQogCi1zdGF0aWMgaW50IHM1cHYzMTBfY2xrc3JjX21hc2tfbGNkMV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgZXh5bm9zNF9jbGtzcmNfbWFza19sY2QxX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQogewogCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS1NSQ19NQVNLX0xDRDEsIGNsaywgZW5hYmxlKTsKIH0KIAotc3RhdGljIGludCBzNXB2MzEwX2Nsa3NyY19tYXNrX2ZzeXNfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCitzdGF0aWMgaW50IGV4eW5vczRfY2xrc3JjX21hc2tfZnN5c19jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKIAlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtTUkNfTUFTS19GU1lTLCBjbGssIGVuYWJsZSk7CiB9CiAKLXN0YXRpYyBpbnQgczVwdjMxMF9jbGtzcmNfbWFza19wZXJpbDBfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCitzdGF0aWMgaW50IGV4eW5vczRfY2xrc3JjX21hc2tfcGVyaWwwX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQogewogCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS1NSQ19NQVNLX1BFUklMMCwgY2xrLCBlbmFibGUpOwogfQogCi1zdGF0aWMgaW50IHM1cHYzMTBfY2xrc3JjX21hc2tfcGVyaWwxX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBleHlub3M0X2Nsa3NyY19tYXNrX3BlcmlsMV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKIAlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtTUkNfTUFTS19QRVJJTDEsIGNsaywgZW5hYmxlKTsKIH0KIAotc3RhdGljIGludCBzNXB2MzEwX2Nsa19pcF9jYW1fY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCitzdGF0aWMgaW50IGV4eW5vczRfY2xrX2lwX21mY19jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtHQVRFX0lQX01GQywgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IGV4eW5vczRfY2xrX2lwX2NhbV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKIAlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtHQVRFX0lQX0NBTSwgY2xrLCBlbmFibGUpOwogfQogCi1zdGF0aWMgaW50IHM1cHYzMTBfY2xrX2lwX2ltYWdlX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBleHlub3M0X2Nsa19pcF90dl9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtHQVRFX0lQX1RWLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zNF9jbGtfaXBfaW1hZ2VfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCiB7CiAJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLR0FURV9JUF9JTUFHRSwgY2xrLCBlbmFibGUpOwogfQogCi1zdGF0aWMgaW50IHM1cHYzMTBfY2xrX2lwX2xjZDBfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCitzdGF0aWMgaW50IGV4eW5vczRfY2xrX2lwX2xjZDBfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCiB7CiAJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLR0FURV9JUF9MQ0QwLCBjbGssIGVuYWJsZSk7CiB9CiAKLXN0YXRpYyBpbnQgczVwdjMxMF9jbGtfaXBfbGNkMV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgZXh5bm9zNF9jbGtfaXBfbGNkMV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKIAlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtHQVRFX0lQX0xDRDEsIGNsaywgZW5hYmxlKTsKIH0KIAotc3RhdGljIGludCBzNXB2MzEwX2Nsa19pcF9mc3lzX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBleHlub3M0X2Nsa19pcF9mc3lzX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQogewogCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS0dBVEVfSVBfRlNZUywgY2xrLCBlbmFibGUpOwogfQogCi1zdGF0aWMgaW50IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKIAlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtHQVRFX0lQX1BFUklMLCBjbGssIGVuYWJsZSk7CiB9CiAKLXN0YXRpYyBpbnQgczVwdjMxMF9jbGtfaXBfcGVyaXJfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCitzdGF0aWMgaW50IGV4eW5vczRfY2xrX2lwX3BlcmlyX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQogewogCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS0dBVEVfSVBfUEVSSVIsIGNsaywgZW5hYmxlKTsKIH0KQEAgLTM1OCw3ICszNjksNyBAQAogCS5jbGsJPSB7CiAJCS5uYW1lCQk9ICJ2cGxsX3NyYyIsCiAJCS5pZAkJPSAtMSwKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa3NyY19tYXNrX3RvcF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrc3JjX21hc2tfdG9wX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMCksCiAJfSwKIAkuc291cmNlcwk9ICZjbGtzZXRfdnBsbHNyYywKQEAgLTM4OSwyMzkgKzQwMCwzMjIgQEAKIAkJLm5hbWUJCT0gInRpbWVycyIsCiAJCS5pZAkJPSAtMSwKIAkJLnBhcmVudAkJPSAmY2xrX2FjbGtfMTAwLmNsaywKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlsX2N0cmwsCiAJCS5jdHJsYml0CT0gKDE8PDI0KSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJjc2lzIiwKIAkJLmlkCQk9IDAsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfY2FtX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfY2FtX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgNCksCiAJfSwgewogCQkubmFtZQkJPSAiY3NpcyIsCiAJCS5pZAkJPSAxLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX2NhbV9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2NhbV9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDUpLAogCX0sIHsKIAkJLm5hbWUJCT0gImZpbWMiLAogCQkuaWQJCT0gMCwKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9jYW1fY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9jYW1fY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAwKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJmaW1jIiwKIAkJLmlkCQk9IDEsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfY2FtX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfY2FtX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMSksCiAJfSwgewogCQkubmFtZQkJPSAiZmltYyIsCiAJCS5pZAkJPSAyLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX2NhbV9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2NhbV9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDIpLAogCX0sIHsKIAkJLm5hbWUJCT0gImZpbWMiLAogCQkuaWQJCT0gMywKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9jYW1fY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9jYW1fY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAzKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJmaW1kIiwKIAkJLmlkCQk9IDAsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfbGNkMF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2xjZDBfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAwKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJmaW1kIiwKIAkJLmlkCQk9IDEsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfbGNkMV9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2xjZDFfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAwKSwKIAl9LCB7CisJCS5uYW1lCQk9ICJzYXRhcGh5IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfYWNsa18xMzMuY2xrLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2ZzeXNfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAzKSwKKwl9LCB7CiAJCS5uYW1lCQk9ICJoc21tYyIsCiAJCS5pZAkJPSAwLAogCQkucGFyZW50CQk9ICZjbGtfYWNsa18xMzMuY2xrLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX2ZzeXNfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9mc3lzX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgNSksCiAJfSwgewogCQkubmFtZQkJPSAiaHNtbWMiLAogCQkuaWQJCT0gMSwKIAkJLnBhcmVudAkJPSAmY2xrX2FjbGtfMTMzLmNsaywKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9mc3lzX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfZnN5c19jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDYpLAogCX0sIHsKIAkJLm5hbWUJCT0gImhzbW1jIiwKIAkJLmlkCQk9IDIsCiAJCS5wYXJlbnQJCT0gJmNsa19hY2xrXzEzMy5jbGssCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfZnN5c19jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2ZzeXNfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCA3KSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJoc21tYyIsCiAJCS5pZAkJPSAzLAogCQkucGFyZW50CQk9ICZjbGtfYWNsa18xMzMuY2xrLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX2ZzeXNfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9mc3lzX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgOCksCiAJfSwgewogCQkubmFtZQkJPSAiaHNtbWMiLAogCQkuaWQJCT0gNCwKIAkJLnBhcmVudAkJPSAmY2xrX2FjbGtfMTMzLmNsaywKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9mc3lzX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfZnN5c19jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDkpLAogCX0sIHsKIAkJLm5hbWUJCT0gInNhdGEiLAogCQkuaWQJCT0gLTEsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfZnN5c19jdHJsLAorCQkucGFyZW50CQk9ICZjbGtfYWNsa18xMzMuY2xrLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2ZzeXNfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAxMCksCiAJfSwgewogCQkubmFtZQkJPSAicGRtYSIsCiAJCS5pZAkJPSAwLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX2ZzeXNfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9mc3lzX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMCksCiAJfSwgewogCQkubmFtZQkJPSAicGRtYSIsCiAJCS5pZAkJPSAxLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX2ZzeXNfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9mc3lzX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMSksCiAJfSwgewogCQkubmFtZQkJPSAiYWRjIiwKIAkJLmlkCQk9IC0xLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaWxfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAxNSksCiAJfSwgeworCQkubmFtZQkJPSAia2V5cGFkIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlyX2N0cmwsCisJCS5jdHJsYml0CT0gKDEgPDwgMTYpLAorCX0sIHsKIAkJLm5hbWUJCT0gInJ0YyIsCiAJCS5pZAkJPSAtMSwKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpcl9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlyX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMTUpLAogCX0sIHsKIAkJLm5hbWUJCT0gIndhdGNoZG9nIiwKIAkJLmlkCQk9IC0xLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlyX2N0cmwsCisJCS5wYXJlbnQJCT0gJmNsa19hY2xrXzEwMC5jbGssCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaXJfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAxNCksCiAJfSwgewogCQkubmFtZQkJPSAidXNiaG9zdCIsCiAJCS5pZAkJPSAtMSwKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9mc3lzX2N0cmwgLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2ZzeXNfY3RybCAsCiAJCS5jdHJsYml0CT0gKDEgPDwgMTIpLAogCX0sIHsKIAkJLm5hbWUJCT0gIm90ZyIsCiAJCS5pZAkJPSAtMSwKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9mc3lzX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfZnN5c19jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDEzKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJzcGkiLAogCQkuaWQJCT0gMCwKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlsX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMTYpLAogCX0sIHsKIAkJLm5hbWUJCT0gInNwaSIsCiAJCS5pZAkJPSAxLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaWxfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAxNyksCiAJfSwgewogCQkubmFtZQkJPSAic3BpIiwKIAkJLmlkCQk9IDIsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfcGVyaWxfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDE4KSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJpaXMiLAogCQkuaWQJCT0gMCwKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlsX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMTkpLAogCX0sIHsKIAkJLm5hbWUJCT0gImlpcyIsCiAJCS5pZAkJPSAxLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaWxfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAyMCksCiAJfSwgewogCQkubmFtZQkJPSAiaWlzIiwKIAkJLmlkCQk9IDIsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfcGVyaWxfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDIxKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJhYzk3IiwKIAkJLmlkCQk9IC0xLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaWxfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAyNyksCiAJfSwgewogCQkubmFtZQkJPSAiZmltZzJkIiwKIAkJLmlkCQk9IC0xLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX2ltYWdlX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfaW1hZ2VfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAwKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJpMmMiLAogCQkuaWQJCT0gMCwKIAkJLnBhcmVudAkJPSAmY2xrX2FjbGtfMTAwLmNsaywKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlsX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgNiksCiAJfSwgewogCQkubmFtZQkJPSAiaTJjIiwKIAkJLmlkCQk9IDEsCiAJCS5wYXJlbnQJCT0gJmNsa19hY2xrXzEwMC5jbGssCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfcGVyaWxfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDcpLAogCX0sIHsKIAkJLm5hbWUJCT0gImkyYyIsCiAJCS5pZAkJPSAyLAogCQkucGFyZW50CQk9ICZjbGtfYWNsa18xMDAuY2xrLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaWxfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCA4KSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJpMmMiLAogCQkuaWQJCT0gMywKIAkJLnBhcmVudAkJPSAmY2xrX2FjbGtfMTAwLmNsaywKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlsX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgOSksCiAJfSwgewogCQkubmFtZQkJPSAiaTJjIiwKIAkJLmlkCQk9IDQsCiAJCS5wYXJlbnQJCT0gJmNsa19hY2xrXzEwMC5jbGssCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfcGVyaWxfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDEwKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJpMmMiLAogCQkuaWQJCT0gNSwKIAkJLnBhcmVudAkJPSAmY2xrX2FjbGtfMTAwLmNsaywKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlsX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMTEpLAogCX0sIHsKIAkJLm5hbWUJCT0gImkyYyIsCiAJCS5pZAkJPSA2LAogCQkucGFyZW50CQk9ICZjbGtfYWNsa18xMDAuY2xrLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaWxfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAxMiksCiAJfSwgewogCQkubmFtZQkJPSAiaTJjIiwKIAkJLmlkCQk9IDcsCiAJCS5wYXJlbnQJCT0gJmNsa19hY2xrXzEwMC5jbGssCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfcGVyaWxfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDEzKSwKLQl9LAorCX0sIHsKKwkJLm5hbWUJCT0gIlNZU01NVV9NRE1BIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2ltYWdlX2N0cmwsCisJCS5jdHJsYml0CT0gKDEgPDwgNSksCisJfSwgeworCQkubmFtZQkJPSAiU1lTTU1VX0ZJTUMwIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2NhbV9jdHJsLAorCQkuY3RybGJpdAk9ICgxIDw8IDcpLAorCX0sIHsKKwkJLm5hbWUJCT0gIlNZU01NVV9GSU1DMSIsCisJCS5pZAkJPSAtMSwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9jYW1fY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCA4KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJTWVNNTVVfRklNQzIiLAorCQkuaWQJCT0gLTEsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfY2FtX2N0cmwsCisJCS5jdHJsYml0CT0gKDEgPDwgOSksCisJfSwgeworCQkubmFtZQkJPSAiU1lTTU1VX0ZJTUMzIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2NhbV9jdHJsLAorCQkuY3RybGJpdAk9ICgxIDw8IDEwKSwKKwl9LCB7CisJCS5uYW1lCQk9ICJTWVNNTVVfSlBFRyIsCisJCS5pZAkJPSAtMSwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9jYW1fY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAxMSksCisJfSwgeworCQkubmFtZQkJPSAiU1lTTU1VX0ZJTUQwIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2xjZDBfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCA0KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJTWVNNTVVfRklNRDEiLAorCQkuaWQJCT0gLTEsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfbGNkMV9jdHJsLAorCQkuY3RybGJpdAk9ICgxIDw8IDQpLAorCX0sIHsKKwkJLm5hbWUJCT0gIlNZU01NVV9QQ0llIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2ZzeXNfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAxOCksCisJfSwgeworCQkubmFtZQkJPSAiU1lTTU1VX0cyRCIsCisJCS5pZAkJPSAtMSwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9pbWFnZV9jdHJsLAorCQkuY3RybGJpdAk9ICgxIDw8IDMpLAorCX0sIHsKKwkJLm5hbWUJCT0gIlNZU01NVV9ST1RBVE9SIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX2ltYWdlX2N0cmwsCisJCS5jdHJsYml0CT0gKDEgPDwgNCksCisJfSwgeworCQkubmFtZQkJPSAiU1lTTU1VX1RWIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3R2X2N0cmwsCisJCS5jdHJsYml0CT0gKDEgPDwgNCksCisJfSwgeworCQkubmFtZQkJPSAiU1lTTU1VX01GQ19MIiwKKwkJLmlkCQk9IC0xLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX21mY19jdHJsLAorCQkuY3RybGJpdAk9ICgxIDw8IDEpLAorCX0sIHsKKwkJLm5hbWUJCT0gIlNZU01NVV9NRkNfUiIsCisJCS5pZAkJPSAtMSwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9tZmNfY3RybCwKKwkJLmN0cmxiaXQJPSAoMSA8PCAyKSwKKwl9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc1tdID0gewogCXsKIAkJLm5hbWUJCT0gInVhcnQiLAogCQkuaWQJCT0gMCwKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlsX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMCksCiAJfSwgewogCQkubmFtZQkJPSAidWFydCIsCiAJCS5pZAkJPSAxLAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaWxfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCAxKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJ1YXJ0IiwKIAkJLmlkCQk9IDIsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfcGVyaWxfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDIpLAogCX0sIHsKIAkJLm5hbWUJCT0gInVhcnQiLAogCQkuaWQJCT0gMywKLQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrX2lwX3BlcmlsX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMyksCiAJfSwgewogCQkubmFtZQkJPSAidWFydCIsCiAJCS5pZAkJPSA0LAotCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtfaXBfcGVyaWxfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCA0KSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJ1YXJ0IiwKIAkJLmlkCQk9IDUsCi0JCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfcGVyaWxfY3RybCwKKwkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDUpLAogCX0KIH07CkBAIC03NDYsNyArODQwLDcgQEAKIAkJLmNsawk9IHsKIAkJCS5uYW1lCQk9ICJ1Y2xrMSIsCiAJCQkuaWQJCT0gMCwKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19wZXJpbDBfY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19wZXJpbDBfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgMCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKQEAgLTc1Niw3ICs4NTAsNyBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJ1Y2xrMSIsCiAJCQkuaWQJCT0gMSwKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19wZXJpbDBfY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19wZXJpbDBfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgNCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKQEAgLTc2Niw3ICs4NjAsNyBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJ1Y2xrMSIsCiAJCQkuaWQJCT0gMiwKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19wZXJpbDBfY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19wZXJpbDBfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgOCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKQEAgLTc3Niw3ICs4NzAsNyBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJ1Y2xrMSIsCiAJCQkuaWQJCT0gMywKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19wZXJpbDBfY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19wZXJpbDBfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgMTIpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAsCkBAIC03ODYsNyArODgwLDcgQEAKIAkJLmNsawkJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19wd20iLAogCQkJLmlkCQk9IC0xLAotCQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa3NyY19tYXNrX3BlcmlsMF9jdHJsLAorCQkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa3NyY19tYXNrX3BlcmlsMF9jdHJsLAogCQkJLmN0cmxiaXQJPSAoMSA8PCAyNCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKQEAgLTc5Niw3ICs4OTAsNyBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJzY2xrX2NzaXMiLAogCQkJLmlkCQk9IDAsCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfY2FtX2N0cmwsCisJCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrc3JjX21hc2tfY2FtX2N0cmwsCiAJCQkuY3RybGJpdAk9ICgxIDw8IDI0KSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLApAQCAtODA2LDcgKzkwMCw3IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfY3NpcyIsCiAJCQkuaWQJCT0gMSwKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19jYW1fY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19jYW1fY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgMjgpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAsCkBAIC04MTYsNyArOTEwLDcgQEAKIAkJLmNsawkJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19jYW0iLAogCQkJLmlkCQk9IDAsCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfY2FtX2N0cmwsCisJCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrc3JjX21hc2tfY2FtX2N0cmwsCiAJCQkuY3RybGJpdAk9ICgxIDw8IDE2KSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLApAQCAtODI2LDcgKzkyMCw3IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfY2FtIiwKIAkJCS5pZAkJPSAxLAotCQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa3NyY19tYXNrX2NhbV9jdHJsLAorCQkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa3NyY19tYXNrX2NhbV9jdHJsLAogCQkJLmN0cmxiaXQJPSAoMSA8PCAyMCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKQEAgLTgzNiw3ICs5MzAsNyBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJzY2xrX2ZpbWMiLAogCQkJLmlkCQk9IDAsCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfY2FtX2N0cmwsCisJCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrc3JjX21hc2tfY2FtX2N0cmwsCiAJCQkuY3RybGJpdAk9ICgxIDw8IDApLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAsCkBAIC04NDYsNyArOTQwLDcgQEAKIAkJLmNsawkJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19maW1jIiwKIAkJCS5pZAkJPSAxLAotCQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa3NyY19tYXNrX2NhbV9jdHJsLAorCQkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa3NyY19tYXNrX2NhbV9jdHJsLAogCQkJLmN0cmxiaXQJPSAoMSA8PCA0KSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLApAQCAtODU2LDcgKzk1MCw3IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfZmltYyIsCiAJCQkuaWQJCT0gMiwKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19jYW1fY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19jYW1fY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgOCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKQEAgLTg2Niw3ICs5NjAsNyBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJzY2xrX2ZpbWMiLAogCQkJLmlkCQk9IDMsCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfY2FtX2N0cmwsCisJCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrc3JjX21hc2tfY2FtX2N0cmwsCiAJCQkuY3RybGJpdAk9ICgxIDw8IDEyKSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLApAQCAtODc2LDcgKzk3MCw3IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfZmltZCIsCiAJCQkuaWQJCT0gMCwKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19sY2QwX2N0cmwsCisJCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrc3JjX21hc2tfbGNkMF9jdHJsLAogCQkJLmN0cmxiaXQJPSAoMSA8PCAwKSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLApAQCAtODg2LDcgKzk4MCw3IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfZmltZCIsCiAJCQkuaWQJCT0gMSwKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19sY2QxX2N0cmwsCisJCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrc3JjX21hc2tfbGNkMV9jdHJsLAogCQkJLmN0cmxiaXQJPSAoMSA8PCAwKSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLApAQCAtODk2LDcgKzk5MCw3IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfc2F0YSIsCiAJCQkuaWQJCT0gLTEsCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfZnN5c19jdHJsLAorCQkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa3NyY19tYXNrX2ZzeXNfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgMjQpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfbW91dF9jb3JlYnVzLApAQCAtOTA2LDcgKzEwMDAsNyBAQAogCQkuY2xrCQk9IHsKIAkJCS5uYW1lCQk9ICJzY2xrX3NwaSIsCiAJCQkuaWQJCT0gMCwKLQkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtzcmNfbWFza19wZXJpbDFfY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19wZXJpbDFfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgMTYpLAogCQl9LAogCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAsCkBAIC05MTYsNyArMTAxMCw3IEBACiAJCS5jbGsJCT0gewogCQkJLm5hbWUJCT0gInNjbGtfc3BpIiwKIAkJCS5pZAkJPSAxLAotCQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa3NyY19tYXNrX3BlcmlsMV9jdHJsLAorCQkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa3NyY19tYXNrX3BlcmlsMV9jdHJsLAogCQkJLmN0cmxiaXQJPSAoMSA8PCAyMCksCiAJCX0sCiAJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKQEAgLTkyNiw3ICsxMDIwLDcgQEAKIAkJLmNsawkJPSB7CiAJCQkubmFtZQkJPSAic2Nsa19zcGkiLAogCQkJLmlkCQk9IDIsCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfcGVyaWwxX2N0cmwsCisJCQkuZW5hYmxlCQk9IGV4eW5vczRfY2xrc3JjX21hc2tfcGVyaWwxX2N0cmwsCiAJCQkuY3RybGJpdAk9ICgxIDw8IDI0KSwKIAkJfSwKIAkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLApAQCAtOTQ1LDcgKzEwMzksNyBAQAogCQkJLm5hbWUJCT0gInNjbGtfbW1jIiwKIAkJCS5pZAkJPSAwLAogCQkJLnBhcmVudAkJPSAmY2xrX2RvdXRfbW1jMC5jbGssCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfZnN5c19jdHJsLAorCQkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa3NyY19tYXNrX2ZzeXNfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgMCksCiAJCX0sCiAJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQX0NMS0RJVl9GU1lTMSwgLnNoaWZ0ID0gOCwgLnNpemUgPSA4IH0sCkBAIC05NTQsNyArMTA0OCw3IEBACiAJCQkubmFtZQkJPSAic2Nsa19tbWMiLAogCQkJLmlkCQk9IDEsCiAJCQkucGFyZW50ICAgICAgICAgPSAmY2xrX2RvdXRfbW1jMS5jbGssCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfZnN5c19jdHJsLAorCQkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa3NyY19tYXNrX2ZzeXNfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgNCksCiAJCX0sCiAJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQX0NMS0RJVl9GU1lTMSwgLnNoaWZ0ID0gMjQsIC5zaXplID0gOCB9LApAQCAtOTYzLDcgKzEwNTcsNyBAQAogCQkJLm5hbWUJCT0gInNjbGtfbW1jIiwKIAkJCS5pZAkJPSAyLAogCQkJLnBhcmVudCAgICAgICAgID0gJmNsa19kb3V0X21tYzIuY2xrLAotCQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa3NyY19tYXNrX2ZzeXNfY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19mc3lzX2N0cmwsCiAJCQkuY3RybGJpdAk9ICgxIDw8IDgpLAogCQl9LAogCQkucmVnX2RpdiA9IHsgLnJlZyA9IFM1UF9DTEtESVZfRlNZUzIsIC5zaGlmdCA9IDgsIC5zaXplID0gOCB9LApAQCAtOTcyLDcgKzEwNjYsNyBAQAogCQkJLm5hbWUJCT0gInNjbGtfbW1jIiwKIAkJCS5pZAkJPSAzLAogCQkJLnBhcmVudCAgICAgICAgID0gJmNsa19kb3V0X21tYzMuY2xrLAotCQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa3NyY19tYXNrX2ZzeXNfY3RybCwKKwkJCS5lbmFibGUJCT0gZXh5bm9zNF9jbGtzcmNfbWFza19mc3lzX2N0cmwsCiAJCQkuY3RybGJpdAk9ICgxIDw8IDEyKSwKIAkJfSwKIAkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLRElWX0ZTWVMyLCAuc2hpZnQgPSAyNCwgLnNpemUgPSA4IH0sCkBAIC05ODEsNyArMTA3NSw3IEBACiAJCQkubmFtZQkJPSAic2Nsa19tbWMiLAogCQkJLmlkCQk9IDQsCiAJCQkucGFyZW50ICAgICAgICAgPSAmY2xrX2RvdXRfbW1jNC5jbGssCi0JCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrc3JjX21hc2tfZnN5c19jdHJsLAorCQkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa3NyY19tYXNrX2ZzeXNfY3RybCwKIAkJCS5jdHJsYml0CT0gKDEgPDwgMTYpLAogCQl9LAogCQkucmVnX2RpdiA9IHsgLnJlZyA9IFM1UF9DTEtESVZfRlNZUzMsIC5zaGlmdCA9IDgsIC5zaXplID0gOCB9LApAQCAtMTAyMiwxNiArMTExNiwxNiBAQAogCiBzdGF0aWMgaW50IHh0YWxfcmF0ZTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwdjMxMF9mb3V0X2FwbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh5bm9zNF9mb3V0X2FwbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXJldHVybiBzNXBfZ2V0X3BsbDQ1eHgoeHRhbF9yYXRlLCBfX3Jhd19yZWFkbChTNVBfQVBMTF9DT04wKSwgcGxsXzQ1MDgpOwogfQogCi1zdGF0aWMgc3RydWN0IGNsa19vcHMgczVwdjMxMF9mb3V0X2FwbGxfb3BzID0gewotCS5nZXRfcmF0ZSA9IHM1cHYzMTBfZm91dF9hcGxsX2dldF9yYXRlLAorc3RhdGljIHN0cnVjdCBjbGtfb3BzIGV4eW5vczRfZm91dF9hcGxsX29wcyA9IHsKKwkuZ2V0X3JhdGUgPSBleHlub3M0X2ZvdXRfYXBsbF9nZXRfcmF0ZSwKIH07CiAKLXZvaWQgX19pbml0X29yX2NwdWZyZXEgczVwdjMxMF9zZXR1cF9jbG9ja3Modm9pZCkKK3ZvaWQgX19pbml0X29yX2NwdWZyZXEgZXh5bm9zNF9zZXR1cF9jbG9ja3Modm9pZCkKIHsKIAlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKIAl1bnNpZ25lZCBsb25nIGFwbGw7CkBAIC0xMDcwLDEyICsxMTY0LDEyIEBACiAJdnBsbCA9IHM1cF9nZXRfcGxsNDZ4eCh2cGxsc3JjLCBfX3Jhd19yZWFkbChTNVBfVlBMTF9DT04wKSwKIAkJCQlfX3Jhd19yZWFkbChTNVBfVlBMTF9DT04xKSwgcGxsXzQ2NTApOwogCi0JY2xrX2ZvdXRfYXBsbC5vcHMgPSAmczVwdjMxMF9mb3V0X2FwbGxfb3BzOworCWNsa19mb3V0X2FwbGwub3BzID0gJmV4eW5vczRfZm91dF9hcGxsX29wczsKIAljbGtfZm91dF9tcGxsLnJhdGUgPSBtcGxsOwogCWNsa19mb3V0X2VwbGwucmF0ZSA9IGVwbGw7CiAJY2xrX2ZvdXRfdnBsbC5yYXRlID0gdnBsbDsKIAotCXByaW50ayhLRVJOX0lORk8gIlM1UFYzMTA6IFBMTCBzZXR0aW5ncywgQT0lbGQsIE09JWxkLCBFPSVsZCBWPSVsZCIsCisJcHJpbnRrKEtFUk5fSU5GTyAiRVhZTk9TNDogUExMIHNldHRpbmdzLCBBPSVsZCwgTT0lbGQsIEU9JWxkIFY9JWxkIiwKIAkJCWFwbGwsIG1wbGwsIGVwbGwsIHZwbGwpOwogCiAJYXJtY2xrID0gY2xrX2dldF9yYXRlKCZjbGtfYXJtY2xrLmNsayk7CkBAIC0xMDg2LDcgKzExODAsNyBAQAogCWFjbGtfMTYwID0gY2xrX2dldF9yYXRlKCZjbGtfYWNsa18xNjAuY2xrKTsKIAlhY2xrXzEzMyA9IGNsa19nZXRfcmF0ZSgmY2xrX2FjbGtfMTMzLmNsayk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTNVBWMzEwOiBBUk1DTEs9JWxkLCBETUM9JWxkLCBBQ0xLMjAwPSVsZFxuIgorCXByaW50ayhLRVJOX0lORk8gIkVYWU5PUzQ6IEFSTUNMSz0lbGQsIERNQz0lbGQsIEFDTEsyMDA9JWxkXG4iCiAJCQkgIkFDTEsxMDA9JWxkLCBBQ0xLMTYwPSVsZCwgQUNMSzEzMz0lbGRcbiIsCiAJCQlhcm1jbGssIHNjbGtfZG1jLCBhY2xrXzIwMCwKIAkJCWFjbGtfMTAwLCBhY2xrXzE2MCwgYWNsa18xMzMpOwpAQCAtMTEwMyw3ICsxMTk3LDcgQEAKIAkvKiBOb3RoaW5nIGhlcmUgeWV0ICovCiB9OwogCi12b2lkIF9faW5pdCBzNXB2MzEwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQordm9pZCBfX2luaXQgZXh5bm9zNF9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKIHsKIAlpbnQgcHRyOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1LmMKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2NwdS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1LmMKaW5kZXggMGRiMGZiNi4uNzkzMDExMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHUuYwpAQCAtMSw3ICsxLDcgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9jcHUuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdS5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTksOCArMTksMTAgQEAKIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvczVwdjMxMC5oPgorI2luY2x1ZGUgPHBsYXQvZXh5bm9zNC5oPgogI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2ZpbWMtY29yZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgogCkBAIC0yOSw1NSArMzEsNjAgQEAKIGV4dGVybiB2b2lkIGNvbWJpbmVyX2Nhc2NhZGVfaXJxKHVuc2lnbmVkIGludCBjb21iaW5lcl9uciwgdW5zaWduZWQgaW50IGlycSk7CiAKIC8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczVwdjMxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBleHlub3M0X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9TWVNUSU1FUiwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfU1lTVElNRVIpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkgCT0gTVRfREVWSUNFLAorCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfU1lTUkFNLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQVjMxMF9QQV9TWVNSQU0pLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9TWVNSQU0pLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9DTVUsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBWMzEwX1BBX0NNVSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0NNVSksCiAJCS5sZW5ndGgJCT0gU1pfMTI4SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfUE1VLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQVjMxMF9QQV9QTVUpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9QTVUpLAogCQkubGVuZ3RoCQk9IFNaXzY0SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfQ09NQklORVJfQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UFYzMTBfUEFfQ09NQklORVIpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9DT01CSU5FUiksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7CiAJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX0NPUkVQRVJJX0JBU0UsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBWMzEwX1BBX0NPUkVQRVJJKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfQ09SRVBFUkkpLAogCQkubGVuZ3RoCQk9IFNaXzhLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9MMkNDLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQVjMxMF9QQV9MMkNDKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfTDJDQyksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7CiAJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX0dQSU8xLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQVjMxMF9QQV9HUElPMSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0dQSU8xKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfR1BJTzIsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBWMzEwX1BBX0dQSU8yKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfR1BJTzIpLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9HUElPMywKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UFYzMTBfUEFfR1BJTzMpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9HUElPMyksCiAJCS5sZW5ndGgJCT0gU1pfMjU2LAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9ETUMwLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQVjMxMF9QQV9ETUMwKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfRE1DMCksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7CkBAIC04NywxMyArOTQsMTMgQEAKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfU1JPTUMsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBWMzEwX1BBX1NST01DKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfU1JPTUMpLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIHM1cHYzMTBfaWRsZSh2b2lkKQorc3RhdGljIHZvaWQgZXh5bm9zNF9pZGxlKHZvaWQpCiB7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKIAkJY3B1X2RvX2lkbGUoKTsKQEAgLTEwMSwzMiArMTA4LDM4IEBACiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCi0vKiBzNXB2MzEwX21hcF9pbworLyoKKyAqIGV4eW5vczRfbWFwX2lvCiAgKgogICogcmVnaXN0ZXIgdGhlIHN0YW5kYXJkIGNwdSBJTyBhcmVhcwotKi8KLXZvaWQgX19pbml0IHM1cHYzMTBfbWFwX2lvKHZvaWQpCisgKi8KK3ZvaWQgX19pbml0IGV4eW5vczRfbWFwX2lvKHZvaWQpCiB7Ci0JaW90YWJsZV9pbml0KHM1cHYzMTBfaW9kZXNjLCBBUlJBWV9TSVpFKHM1cHYzMTBfaW9kZXNjKSk7CisJaW90YWJsZV9pbml0KGV4eW5vczRfaW9kZXNjLCBBUlJBWV9TSVpFKGV4eW5vczRfaW9kZXNjKSk7CiAKIAkvKiBpbml0aWFsaXplIGRldmljZSBpbmZvcm1hdGlvbiBlYXJseSAqLwotCXM1cHYzMTBfZGVmYXVsdF9zZGhjaTAoKTsKLQlzNXB2MzEwX2RlZmF1bHRfc2RoY2kxKCk7Ci0JczVwdjMxMF9kZWZhdWx0X3NkaGNpMigpOwotCXM1cHYzMTBfZGVmYXVsdF9zZGhjaTMoKTsKKwlleHlub3M0X2RlZmF1bHRfc2RoY2kwKCk7CisJZXh5bm9zNF9kZWZhdWx0X3NkaGNpMSgpOworCWV4eW5vczRfZGVmYXVsdF9zZGhjaTIoKTsKKwlleHlub3M0X2RlZmF1bHRfc2RoY2kzKCk7CisKKwlzM2NfZmltY19zZXRuYW1lKDAsICJleHlub3M0LWZpbWMiKTsKKwlzM2NfZmltY19zZXRuYW1lKDEsICJleHlub3M0LWZpbWMiKTsKKwlzM2NfZmltY19zZXRuYW1lKDIsICJleHlub3M0LWZpbWMiKTsKKwlzM2NfZmltY19zZXRuYW1lKDMsICJleHlub3M0LWZpbWMiKTsKIH0KIAotdm9pZCBfX2luaXQgczVwdjMxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3ZvaWQgX19pbml0IGV4eW5vczRfaW5pdF9jbG9ja3MoaW50IHh0YWwpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbml0aWFsaXppbmcgY2xvY2tzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CiAJczVwX3JlZ2lzdGVyX2Nsb2Nrcyh4dGFsKTsKLQlzNXB2MzEwX3JlZ2lzdGVyX2Nsb2NrcygpOwotCXM1cHYzMTBfc2V0dXBfY2xvY2tzKCk7CisJZXh5bm9zNF9yZWdpc3Rlcl9jbG9ja3MoKTsKKwlleHlub3M0X3NldHVwX2Nsb2NrcygpOwogfQogCi12b2lkIF9faW5pdCBzNXB2MzEwX2luaXRfaXJxKHZvaWQpCit2b2lkIF9faW5pdCBleHlub3M0X2luaXRfaXJxKHZvaWQpCiB7CiAJaW50IGlycTsKIApAQCAtMTQ4LDI5ICsxNjEsMjkgQEAKIAl9CiAKIAkvKiBUaGUgcGFyYW1ldGVycyBvZiBzNXBfaW5pdF9pcnEoKSBhcmUgZm9yIFZJQyBpbml0LgotCSAqIFRoZXNlcyBwYXJhbWV0ZXJzIHNob3VsZCBiZSBOVUxMIGFuZCAwIGJlY2F1c2UgUzVQVjMxMAorCSAqIFRoZXNlcyBwYXJhbWV0ZXJzIHNob3VsZCBiZSBOVUxMIGFuZCAwIGJlY2F1c2UgRVhZTk9TNAogCSAqIHVzZXMgR0lDIGluc3RlYWQgb2YgVklDLgogCSAqLwogCXM1cF9pbml0X2lycShOVUxMLCAwKTsKIH0KIAotc3RydWN0IHN5c2Rldl9jbGFzcyBzNXB2MzEwX3N5c2NsYXNzID0gewotCS5uYW1lCT0gInM1cHYzMTAtY29yZSIsCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGV4eW5vczRfc3lzY2xhc3MgPSB7CisJLm5hbWUJPSAiZXh5bm9zNC1jb3JlIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzNXB2MzEwX3N5c2RldiA9IHsKLQkuY2xzCT0gJnM1cHYzMTBfc3lzY2xhc3MsCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZXh5bm9zNF9zeXNkZXYgPSB7CisJLmNscwk9ICZleHlub3M0X3N5c2NsYXNzLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgczVwdjMxMF9jb3JlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGV4eW5vczRfY29yZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczVwdjMxMF9zeXNjbGFzcyk7CisJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmZXh5bm9zNF9zeXNjbGFzcyk7CiB9CiAKLWNvcmVfaW5pdGNhbGwoczVwdjMxMF9jb3JlX2luaXQpOworY29yZV9pbml0Y2FsbChleHlub3M0X2NvcmVfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAotc3RhdGljIGludCBfX2luaXQgczVwdjMxMF9sMngwX2NhY2hlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGV4eW5vczRfbDJ4MF9jYWNoZV9pbml0KHZvaWQpCiB7CiAJLyogVEFHLCBEYXRhIExhdGVuY3kgQ29udHJvbDogMmN5Y2xlICovCiAJX19yYXdfd3JpdGVsKDB4MTEwLCBTNVBfVkFfTDJDQyArIEwyWDBfVEFHX0xBVEVOQ1lfQ1RSTCk7CkBAIC0xODgsMTUgKzIwMSwxNSBAQAogCXJldHVybiAwOwogfQogCi1lYXJseV9pbml0Y2FsbChzNXB2MzEwX2wyeDBfY2FjaGVfaW5pdCk7CitlYXJseV9pbml0Y2FsbChleHlub3M0X2wyeDBfY2FjaGVfaW5pdCk7CiAjZW5kaWYKIAotaW50IF9faW5pdCBzNXB2MzEwX2luaXQodm9pZCkKK2ludCBfX2luaXQgZXh5bm9zNF9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUzVQVjMxMDogSW5pdGlhbGl6aW5nIGFyY2hpdGVjdHVyZVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiRVhZTk9TNDogSW5pdGlhbGl6aW5nIGFyY2hpdGVjdHVyZVxuIik7CiAKIAkvKiBzZXQgaWRsZSBmdW5jdGlvbiAqLwotCXBtX2lkbGUgPSBzNXB2MzEwX2lkbGU7CisJcG1faWRsZSA9IGV4eW5vczRfaWRsZTsKIAotCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnM1cHYzMTBfc3lzZGV2KTsKKwlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZleHlub3M0X3N5c2Rldik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdWZyZXEuYwpzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvY3B1ZnJlcS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1ZnJlcS5jCmluZGV4IDdjMDhhZDcuLmExYmQyNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9jcHVmcmVxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdWZyZXEuYwpAQCAtMSw5ICsxLDkgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9jcHVmcmVxLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHVmcmVxLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKLSAqIFM1UFYzMTAgLSBDUFUgZnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydAorICogRVhZTk9TNCAtIENQVSBmcmVxdWVuY3kgc2NhbGluZyBzdXBwb3J0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0zMSwxNSArMzEsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrICptb3V0X21wbGw7CiBzdGF0aWMgc3RydWN0IGNsayAqbW91dF9hcGxsOwogCi0jaWZkZWYgQ09ORklHX1JFR1VMQVRPUgogc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKmFybV9yZWd1bGF0b3I7CiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqaW50X3JlZ3VsYXRvcjsKLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiBzdGF0aWMgdW5zaWduZWQgaW50IG1lbXR5cGU7CiAKLWVudW0gczVwdjMxMF9tZW1vcnlfdHlwZSB7CitlbnVtIGV4eW5vczRfbWVtb3J5X3R5cGUgewogCUREUjIgPSA0LAogCUxQRERSMiwKIAlERFIzLApAQCAtNDksNyArNDcsNyBAQAogCUwwLCBMMSwgTDIsIEwzLCBDUFVGUkVRX0xFVkVMX0VORCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgczVwdjMxMF9mcmVxX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIGV4eW5vczRfZnJlcV90YWJsZVtdID0gewogCXtMMCwgMTAwMCoxMDAwfSwKIAl7TDEsIDgwMCoxMDAwfSwKIAl7TDIsIDQwMCoxMDAwfSwKQEAgLTE2MCw3ICsxNTgsNyBAQAogCXVuc2lnbmVkIGludAlpbnRfdm9sdDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV92b2x0YWdlX3RhYmxlIHM1cHYzMTBfdm9sdF90YWJsZVtDUFVGUkVRX0xFVkVMX0VORF0gPSB7CitzdGF0aWMgc3RydWN0IGNwdWZyZXFfdm9sdGFnZV90YWJsZSBleHlub3M0X3ZvbHRfdGFibGVbQ1BVRlJFUV9MRVZFTF9FTkRdID0gewogCXsKIAkJLmluZGV4CQk9IEwwLAogCQkuYXJtX3ZvbHQJPSAxMjAwMDAwLApAQCAtMTgwLDcgKzE3OCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgczVwdjMxMF9hcGxsX3Btc190YWJsZVtDUFVGUkVRX0xFVkVMX0VORF0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGV4eW5vczRfYXBsbF9wbXNfdGFibGVbQ1BVRlJFUV9MRVZFTF9FTkRdID0gewogCS8qIEFQTEwgRk9VVCBMMDogMTAwME1IeiAqLwogCSgoMjUwIDw8IDE2KSB8ICg2IDw8IDgpIHwgMSksCiAKQEAgLTE5NCwxNyArMTkyLDE3IEBACiAJKCgyMDAgPDwgMTYpIHwgKDYgPDwgOCkgfCA0KSwKIH07CiAKLWludCBzNXB2MzEwX3ZlcmlmeV9zcGVlZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK2ludCBleHlub3M0X3ZlcmlmeV9zcGVlZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgczVwdjMxMF9mcmVxX3RhYmxlKTsKKwlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgZXh5bm9zNF9mcmVxX3RhYmxlKTsKIH0KIAotdW5zaWduZWQgaW50IHM1cHYzMTBfZ2V0c3BlZWQodW5zaWduZWQgaW50IGNwdSkKK3Vuc2lnbmVkIGludCBleHlub3M0X2dldHNwZWVkKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjcHVfY2xrKSAvIDEwMDA7CiB9CiAKLXZvaWQgczVwdjMxMF9zZXRfY2xrZGl2KHVuc2lnbmVkIGludCBkaXZfaW5kZXgpCit2b2lkIGV4eW5vczRfc2V0X2Nsa2Rpdih1bnNpZ25lZCBpbnQgZGl2X2luZGV4KQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKQEAgLTMyMSw3ICszMTksNyBAQAogCX0gd2hpbGUgKHRtcCAmIDB4MTEpOwogfQogCi1zdGF0aWMgdm9pZCBzNXB2MzEwX3NldF9hcGxsKHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIGV4eW5vczRfc2V0X2FwbGwodW5zaWduZWQgaW50IGluZGV4KQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKQEAgLTM0MCw3ICszMzgsNyBAQAogCS8qIDMuIENoYW5nZSBQTEwgUE1TIHZhbHVlcyAqLwogCXRtcCA9IF9fcmF3X3JlYWRsKFM1UF9BUExMX0NPTjApOwogCXRtcCAmPSB+KCgweDNmZiA8PCAxNikgfCAoMHgzZiA8PCA4KSB8ICgweDcgPDwgMCkpOwotCXRtcCB8PSBzNXB2MzEwX2FwbGxfcG1zX3RhYmxlW2luZGV4XTsKKwl0bXAgfD0gZXh5bm9zNF9hcGxsX3Btc190YWJsZVtpbmRleF07CiAJX19yYXdfd3JpdGVsKHRtcCwgUzVQX0FQTExfQ09OMCk7CiAKIAkvKiA0LiB3YWl0X2xvY2tfdGltZSAqLwpAQCAtMzU3LDk5ICszNTUsOTUgQEAKIAl9IHdoaWxlICh0bXAgIT0gKDB4MSA8PCBTNVBfQ0xLU1JDX0NQVV9NVVhDT1JFX1NISUZUKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHM1cHYzMTBfc2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgb2xkX2luZGV4LCB1bnNpZ25lZCBpbnQgbmV3X2luZGV4KQorc3RhdGljIHZvaWQgZXh5bm9zNF9zZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBvbGRfaW5kZXgsIHVuc2lnbmVkIGludCBuZXdfaW5kZXgpCiB7CiAJdW5zaWduZWQgaW50IHRtcDsKIAogCWlmIChvbGRfaW5kZXggPiBuZXdfaW5kZXgpIHsKIAkJLyogVGhlIGZyZXF1ZW5jeSBjaGFuZ2luZyB0byBMMCBuZWVkcyB0byBjaGFuZ2UgYXBsbCAqLwotCQlpZiAoZnJlcXMubmV3ID09IHM1cHYzMTBfZnJlcV90YWJsZVtMMF0uZnJlcXVlbmN5KSB7CisJCWlmIChmcmVxcy5uZXcgPT0gZXh5bm9zNF9mcmVxX3RhYmxlW0wwXS5mcmVxdWVuY3kpIHsKIAkJCS8qIDEuIENoYW5nZSB0aGUgc3lzdGVtIGNsb2NrIGRpdmlkZXIgdmFsdWVzICovCi0JCQlzNXB2MzEwX3NldF9jbGtkaXYobmV3X2luZGV4KTsKKwkJCWV4eW5vczRfc2V0X2Nsa2RpdihuZXdfaW5kZXgpOwogCiAJCQkvKiAyLiBDaGFuZ2UgdGhlIGFwbGwgbSxwLHMgdmFsdWUgKi8KLQkJCXM1cHYzMTBfc2V0X2FwbGwobmV3X2luZGV4KTsKKwkJCWV4eW5vczRfc2V0X2FwbGwobmV3X2luZGV4KTsKIAkJfSBlbHNlIHsKIAkJCS8qIDEuIENoYW5nZSB0aGUgc3lzdGVtIGNsb2NrIGRpdmlkZXIgdmFsdWVzICovCi0JCQlzNXB2MzEwX3NldF9jbGtkaXYobmV3X2luZGV4KTsKKwkJCWV4eW5vczRfc2V0X2Nsa2RpdihuZXdfaW5kZXgpOwogCiAJCQkvKiAyLiBDaGFuZ2UganVzdCBzIHZhbHVlIGluIGFwbGwgbSxwLHMgdmFsdWUgKi8KIAkJCXRtcCA9IF9fcmF3X3JlYWRsKFM1UF9BUExMX0NPTjApOwogCQkJdG1wICY9IH4oMHg3IDw8IDApOwotCQkJdG1wIHw9IChzNXB2MzEwX2FwbGxfcG1zX3RhYmxlW25ld19pbmRleF0gJiAweDcpOworCQkJdG1wIHw9IChleHlub3M0X2FwbGxfcG1zX3RhYmxlW25ld19pbmRleF0gJiAweDcpOwogCQkJX19yYXdfd3JpdGVsKHRtcCwgUzVQX0FQTExfQ09OMCk7CiAJCX0KIAl9CiAKIAllbHNlIGlmIChvbGRfaW5kZXggPCBuZXdfaW5kZXgpIHsKIAkJLyogVGhlIGZyZXF1ZW5jeSBjaGFuZ2luZyBmcm9tIEwwIG5lZWRzIHRvIGNoYW5nZSBhcGxsICovCi0JCWlmIChmcmVxcy5vbGQgPT0gczVwdjMxMF9mcmVxX3RhYmxlW0wwXS5mcmVxdWVuY3kpIHsKKwkJaWYgKGZyZXFzLm9sZCA9PSBleHlub3M0X2ZyZXFfdGFibGVbTDBdLmZyZXF1ZW5jeSkgewogCQkJLyogMS4gQ2hhbmdlIHRoZSBhcGxsIG0scCxzIHZhbHVlICovCi0JCQlzNXB2MzEwX3NldF9hcGxsKG5ld19pbmRleCk7CisJCQlleHlub3M0X3NldF9hcGxsKG5ld19pbmRleCk7CiAKIAkJCS8qIDIuIENoYW5nZSB0aGUgc3lzdGVtIGNsb2NrIGRpdmlkZXIgdmFsdWVzICovCi0JCQlzNXB2MzEwX3NldF9jbGtkaXYobmV3X2luZGV4KTsKKwkJCWV4eW5vczRfc2V0X2Nsa2RpdihuZXdfaW5kZXgpOwogCQl9IGVsc2UgewogCQkJLyogMS4gQ2hhbmdlIGp1c3QgcyB2YWx1ZSBpbiBhcGxsIG0scCxzIHZhbHVlICovCiAJCQl0bXAgPSBfX3Jhd19yZWFkbChTNVBfQVBMTF9DT04wKTsKIAkJCXRtcCAmPSB+KDB4NyA8PCAwKTsKLQkJCXRtcCB8PSAoczVwdjMxMF9hcGxsX3Btc190YWJsZVtuZXdfaW5kZXhdICYgMHg3KTsKKwkJCXRtcCB8PSAoZXh5bm9zNF9hcGxsX3Btc190YWJsZVtuZXdfaW5kZXhdICYgMHg3KTsKIAkJCV9fcmF3X3dyaXRlbCh0bXAsIFM1UF9BUExMX0NPTjApOwogCiAJCQkvKiAyLiBDaGFuZ2UgdGhlIHN5c3RlbSBjbG9jayBkaXZpZGVyIHZhbHVlcyAqLwotCQkJczVwdjMxMF9zZXRfY2xrZGl2KG5ld19pbmRleCk7CisJCQlleHlub3M0X3NldF9jbGtkaXYobmV3X2luZGV4KTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBzNXB2MzEwX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgZXh5bm9zNF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQogewogCXVuc2lnbmVkIGludCBpbmRleCwgb2xkX2luZGV4OwogCXVuc2lnbmVkIGludCBhcm1fdm9sdCwgaW50X3ZvbHQ7CiAKLQlmcmVxcy5vbGQgPSBzNXB2MzEwX2dldHNwZWVkKHBvbGljeS0+Y3B1KTsKKwlmcmVxcy5vbGQgPSBleHlub3M0X2dldHNwZWVkKHBvbGljeS0+Y3B1KTsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBzNXB2MzEwX2ZyZXFfdGFibGUsCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIGV4eW5vczRfZnJlcV90YWJsZSwKIAkJCQkJICAgZnJlcXMub2xkLCByZWxhdGlvbiwgJm9sZF9pbmRleCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHM1cHYzMTBfZnJlcV90YWJsZSwKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgZXh5bm9zNF9mcmVxX3RhYmxlLAogCQkJCQkgICB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZpbmRleCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZnJlcXMubmV3ID0gczVwdjMxMF9mcmVxX3RhYmxlW2luZGV4XS5mcmVxdWVuY3k7CisJZnJlcXMubmV3ID0gZXh5bm9zNF9mcmVxX3RhYmxlW2luZGV4XS5mcmVxdWVuY3k7CiAJZnJlcXMuY3B1ID0gcG9saWN5LT5jcHU7CiAKIAlpZiAoZnJlcXMubmV3ID09IGZyZXFzLm9sZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBnZXQgdGhlIHZvbHRhZ2UgdmFsdWUgKi8KLQlhcm1fdm9sdCA9IHM1cHYzMTBfdm9sdF90YWJsZVtpbmRleF0uYXJtX3ZvbHQ7Ci0JaW50X3ZvbHQgPSBzNXB2MzEwX3ZvbHRfdGFibGVbaW5kZXhdLmludF92b2x0OworCWFybV92b2x0ID0gZXh5bm9zNF92b2x0X3RhYmxlW2luZGV4XS5hcm1fdm9sdDsKKwlpbnRfdm9sdCA9IGV4eW5vczRfdm9sdF90YWJsZVtpbmRleF0uaW50X3ZvbHQ7CiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCiAJLyogY29udHJvbCByZWd1bGF0b3IgKi8KIAlpZiAoZnJlcXMubmV3ID4gZnJlcXMub2xkKSB7CiAJCS8qIFZvbHRhZ2UgdXAgKi8KLSNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAJCXJlZ3VsYXRvcl9zZXRfdm9sdGFnZShhcm1fcmVndWxhdG9yLCBhcm1fdm9sdCwgYXJtX3ZvbHQpOwogCQlyZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoaW50X3JlZ3VsYXRvciwgaW50X3ZvbHQsIGludF92b2x0KTsKLSNlbmRpZgogCX0KIAogCS8qIENsb2NrIENvbmZpZ3VyYXRpb24gUHJvY2VkdXJlICovCi0JczVwdjMxMF9zZXRfZnJlcXVlbmN5KG9sZF9pbmRleCwgaW5kZXgpOworCWV4eW5vczRfc2V0X2ZyZXF1ZW5jeShvbGRfaW5kZXgsIGluZGV4KTsKIAogCS8qIGNvbnRyb2wgcmVndWxhdG9yICovCiAJaWYgKGZyZXFzLm5ldyA8IGZyZXFzLm9sZCkgewogCQkvKiBWb2x0YWdlIGRvd24gKi8KLSNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAJCXJlZ3VsYXRvcl9zZXRfdm9sdGFnZShhcm1fcmVndWxhdG9yLCBhcm1fdm9sdCwgYXJtX3ZvbHQpOwogCQlyZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoaW50X3JlZ3VsYXRvciwgaW50X3ZvbHQsIGludF92b2x0KTsKLSNlbmRpZgogCX0KIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwpAQCAtNDU4LDUxICs0NTIsNTEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzNXB2MzEwX2NwdWZyZXFfc3VzcGVuZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgZXh5bm9zNF9jcHVmcmVxX3N1c3BlbmQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVwdjMxMF9jcHVmcmVxX3Jlc3VtZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgZXh5bm9zNF9jcHVmcmVxX3Jlc3VtZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHM1cHYzMTBfY3B1ZnJlcV9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgZXh5bm9zNF9jcHVmcmVxX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCXBvbGljeS0+Y3VyID0gcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IHM1cHYzMTBfZ2V0c3BlZWQocG9saWN5LT5jcHUpOworCXBvbGljeS0+Y3VyID0gcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IGV4eW5vczRfZ2V0c3BlZWQocG9saWN5LT5jcHUpOwogCi0JY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoczVwdjMxMF9mcmVxX3RhYmxlLCBwb2xpY3ktPmNwdSk7CisJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoZXh5bm9zNF9mcmVxX3RhYmxlLCBwb2xpY3ktPmNwdSk7CiAKIAkvKiBzZXQgdGhlIHRyYW5zaXRpb24gbGF0ZW5jeSB2YWx1ZSAqLwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDA7CiAKIAkvKgotCSAqIFM1UFYzMTAgbXVsdGktY29yZSBwcm9jZXNzb3JzIGhhcyAyIGNvcmVzCisJICogRVhZTk9TNCBtdWx0aS1jb3JlIHByb2Nlc3NvcnMgaGFzIDIgY29yZXMKIAkgKiB0aGF0IHRoZSBmcmVxdWVuY3kgY2Fubm90IGJlIHNldCBpbmRlcGVuZGVudGx5LgogCSAqIEVhY2ggY3B1IGlzIGJvdW5kIHRvIHRoZSBzYW1lIHNwZWVkLgogCSAqIFNvIHRoZSBhZmZlY3RlZCBjcHUgaXMgYWxsIG9mIHRoZSBjcHVzLgogCSAqLwogCWNwdW1hc2tfc2V0YWxsKHBvbGljeS0+Y3B1cyk7CiAKLQlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHM1cHYzMTBfZnJlcV90YWJsZSk7CisJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBleHlub3M0X2ZyZXFfdGFibGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIHM1cHYzMTBfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBleHlub3M0X2RyaXZlciA9IHsKIAkuZmxhZ3MJCT0gQ1BVRlJFUV9TVElDS1ksCi0JLnZlcmlmeQkJPSBzNXB2MzEwX3ZlcmlmeV9zcGVlZCwKLQkudGFyZ2V0CQk9IHM1cHYzMTBfdGFyZ2V0LAotCS5nZXQJCT0gczVwdjMxMF9nZXRzcGVlZCwKLQkuaW5pdAkJPSBzNXB2MzEwX2NwdWZyZXFfY3B1X2luaXQsCi0JLm5hbWUJCT0gInM1cHYzMTBfY3B1ZnJlcSIsCisJLnZlcmlmeQkJPSBleHlub3M0X3ZlcmlmeV9zcGVlZCwKKwkudGFyZ2V0CQk9IGV4eW5vczRfdGFyZ2V0LAorCS5nZXQJCT0gZXh5bm9zNF9nZXRzcGVlZCwKKwkuaW5pdAkJPSBleHlub3M0X2NwdWZyZXFfY3B1X2luaXQsCisJLm5hbWUJCT0gImV4eW5vczRfY3B1ZnJlcSIsCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzNXB2MzEwX2NwdWZyZXFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHM1cHYzMTBfY3B1ZnJlcV9yZXN1bWUsCisJLnN1c3BlbmQJPSBleHlub3M0X2NwdWZyZXFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGV4eW5vczRfY3B1ZnJlcV9yZXN1bWUsCiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHM1cHYzMTBfY3B1ZnJlcV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBleHlub3M0X2NwdWZyZXFfaW5pdCh2b2lkKQogewogCWNwdV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJhcm1jbGsiKTsKIAlpZiAoSVNfRVJSKGNwdV9jbGspKQpAQCAtNTIwLDcgKzUxNCw2IEBACiAJaWYgKElTX0VSUihtb3V0X2FwbGwpKQogCQlnb3RvIG91dDsKIAotI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIAlhcm1fcmVndWxhdG9yID0gcmVndWxhdG9yX2dldChOVUxMLCAidmRkX2FybSIpOwogCWlmIChJU19FUlIoYXJtX3JlZ3VsYXRvcikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IHJlc291cmNlICVzXG4iLCAidmRkX2FybSIpOwpAQCAtNTMyLDcgKzUyNSw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCByZXNvdXJjZSAlc1xuIiwgInZkZF9pbnQiKTsKIAkJZ290byBvdXQ7CiAJfQotI2VuZGlmCiAKIAkvKgogCSAqIENoZWNrIERSQU0gdHlwZS4KQEAgLTU0OSw3ICs1NDEsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1lbXR5cGU9IDB4JXhcbiIsIF9fZnVuY19fLCBtZW10eXBlKTsKIAl9CiAKLQlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnM1cHYzMTBfZHJpdmVyKTsKKwlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmV4eW5vczRfZHJpdmVyKTsKIAogb3V0OgogCWlmICghSVNfRVJSKGNwdV9jbGspKQpAQCAtNTY0LDE2ICs1NTYsMTQgQEAKIAlpZiAoIUlTX0VSUihtb3V0X2FwbGwpKQogCQljbGtfcHV0KG1vdXRfYXBsbCk7CiAKLSNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAJaWYgKCFJU19FUlIoYXJtX3JlZ3VsYXRvcikpCiAJCXJlZ3VsYXRvcl9wdXQoYXJtX3JlZ3VsYXRvcik7CiAKIAlpZiAoIUlTX0VSUihpbnRfcmVndWxhdG9yKSkKIAkJcmVndWxhdG9yX3B1dChpbnRfcmVndWxhdG9yKTsKLSNlbmRpZgogCiAJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIGluaXRpYWxpemF0aW9uXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLWxhdGVfaW5pdGNhbGwoczVwdjMxMF9jcHVmcmVxX2luaXQpOworbGF0ZV9pbml0Y2FsbChleHlub3M0X2NwdWZyZXFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvZGV2LWFoY2kuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9kZXYtYWhjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1N2EzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvZGV2LWFoY2kuYwpAQCAtMCwwICsxLDI2MyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2Rldi1haGNpLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TNCAtIEFIQ0kgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9haGNpX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtcG11Lmg+CisKKy8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNBVEFfQ1RSTDAJCTB4MAorLyogUEhZIExpbmsgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTQVRBX0NUUkwxCQkweDQKKy8qIFBIWSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0FUQV9QSFlfU1RBVFVTCQkweDgKKworI2RlZmluZSBTQVRBX0NUUkwwX1JYX0RBVEFfVkFMSUQoeCkJKHggPDwgMjcpCisjZGVmaW5lIFNBVEFfQ1RSTDBfU1BFRURfTU9ERQkJKDEgPDwgMjYpCisjZGVmaW5lIFNBVEFfQ1RSTDBfTV9QSFlfQ0FMCQkoMSA8PCAxOSkKKyNkZWZpbmUgU0FUQV9DVFJMMF9QSFlfQ01VX1JTVF9OCSgxIDw8IDEwKQorI2RlZmluZSBTQVRBX0NUUkwwX01fUEhZX0xOX1JTVF9OCSgxIDw8IDkpCisjZGVmaW5lIFNBVEFfQ1RSTDBfUEhZX1BPUl9OCQkoMSA8PCA4KQorCisjZGVmaW5lIFNBVEFfQ1RSTDFfUlNUX1BNQUxJVkVfTgkoMSA8PCA4KQorI2RlZmluZSBTQVRBX0NUUkwxX1JTVF9SWE9PQl9OCQkoMSA8PCA3KQorI2RlZmluZSBTQVRBX0NUUkwxX1JTVF9SWF9OCQkoMSA8PCA2KQorI2RlZmluZSBTQVRBX0NUUkwxX1JTVF9UWF9OCQkoMSA8PCA1KQorCisjZGVmaW5lIFNBVEFfUEhZX1NUQVRVU19DTVVfT0sJCSgxIDw8IDE4KQorI2RlZmluZSBTQVRBX1BIWV9TVEFUVVNfTEFORV9PSwkJKDEgPDwgMTYpCisKKyNkZWZpbmUgTEFORTAJCTB4MjAwCisjZGVmaW5lIENPTV9MQU5FCTB4QTAwCisKKyNkZWZpbmUgSE9TVF9QT1JUU19JTVBMCTB4QworI2RlZmluZSBTQ0xLX1NBVEFfRlJFUQkoNjcgKiBNSFopCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBoeV9iYXNlLCAqcGh5X2N0cmw7CisKK3N0cnVjdCBwaHlfcmVnIHsKKwl1OAlyZWc7CisJdTgJdmFsOworfTsKKworLyogU0FUQSBQSFkgc2V0dXAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3JlZyBleHlub3M0X3NhdGFwaHlfY211W10gPSB7CisJeyAweDAwLCAweDA2IH0sIHsgMHgwMiwgMHg4MCB9LCB7IDB4MjIsIDB4YTAgfSwgeyAweDIzLCAweDQyIH0sCisJeyAweDJlLCAweDA0IH0sIHsgMHgyZiwgMHg1MCB9LCB7IDB4MzAsIDB4NzAgfSwgeyAweDMxLCAweDAyIH0sCisJeyAweDMyLCAweDI1IH0sIHsgMHgzMywgMHg0MCB9LCB7IDB4MzQsIDB4MDEgfSwgeyAweDM1LCAweDQwIH0sCisJeyAweDYxLCAweDJlIH0sIHsgMHg2MywgMHg1ZSB9LCB7IDB4NjUsIDB4NDIgfSwgeyAweDY2LCAweGQxIH0sCisJeyAweDY3LCAweDIwIH0sIHsgMHg2OCwgMHgyOCB9LCB7IDB4NjksIDB4NzggfSwgeyAweDZhLCAweDA0IH0sCisJeyAweDZiLCAweGM4IH0sIHsgMHg2YywgMHgwNiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIGV4eW5vczRfc2F0YXBoeV9sYW5lW10gPSB7CisJeyAweDAwLCAweDAyIH0sIHsgMHgwNSwgMHgxMCB9LCB7IDB4MDYsIDB4ODQgfSwgeyAweDA3LCAweDA0IH0sCisJeyAweDA4LCAweGUwIH0sIHsgMHgxMCwgMHgyMyB9LCB7IDB4MTMsIDB4MDUgfSwgeyAweDE0LCAweDMwIH0sCisJeyAweDE1LCAweDAwIH0sIHsgMHgxNywgMHg3MCB9LCB7IDB4MTgsIDB4ZjIgfSwgeyAweDE5LCAweDFlIH0sCisJeyAweDFhLCAweDE4IH0sIHsgMHgxYiwgMHgwZCB9LCB7IDB4MWMsIDB4MDggfSwgeyAweDUwLCAweDYwIH0sCisJeyAweDUxLCAweDBmIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgZXh5bm9zNF9zYXRhcGh5X2NvbWxhbmVbXSA9IHsKKwl7IDB4MDEsIDB4MjAgfSwgeyAweDAzLCAweDQwIH0sIHsgMHgwNCwgMHgzYyB9LCB7IDB4MDUsIDB4N2QgfSwKKwl7IDB4MDYsIDB4MWQgfSwgeyAweDA3LCAweGNmIH0sIHsgMHgwOCwgMHgwNSB9LCB7IDB4MDksIDB4NjMgfSwKKwl7IDB4MGEsIDB4MjkgfSwgeyAweDBiLCAweGM0IH0sIHsgMHgwYywgMHgwMSB9LCB7IDB4MGQsIDB4MDMgfSwKKwl7IDB4MGUsIDB4MjggfSwgeyAweDBmLCAweDk4IH0sIHsgMHgxMCwgMHgxOSB9LCB7IDB4MTMsIDB4ODAgfSwKKwl7IDB4MTQsIDB4ZjAgfSwgeyAweDE1LCAweGQwIH0sIHsgMHgzOSwgMHhhMCB9LCB7IDB4M2EsIDB4YTAgfSwKKwl7IDB4M2IsIDB4YTAgfSwgeyAweDNjLCAweGEwIH0sIHsgMHgzZCwgMHhhMCB9LCB7IDB4M2UsIDB4YTAgfSwKKwl7IDB4M2YsIDB4YTAgfSwgeyAweDQwLCAweDQyIH0sIHsgMHg0MiwgMHg4MCB9LCB7IDB4NDMsIDB4NTggfSwKKwl7IDB4NDUsIDB4NDQgfSwgeyAweDQ2LCAweDVjIH0sIHsgMHg0NywgMHg4NiB9LCB7IDB4NDgsIDB4OGQgfSwKKwl7IDB4NDksIDB4ZDAgfSwgeyAweDRhLCAweDA5IH0sIHsgMHg0YiwgMHg5MCB9LCB7IDB4NGMsIDB4MDcgfSwKKwl7IDB4NGQsIDB4NDAgfSwgeyAweDUxLCAweDIwIH0sIHsgMHg1MiwgMHgzMiB9LCB7IDB4N2YsIDB4ZDggfSwKKwl7IDB4ODAsIDB4MWEgfSwgeyAweDgxLCAweGZmIH0sIHsgMHg4MiwgMHgxMSB9LCB7IDB4ODMsIDB4MDAgfSwKKwl7IDB4ODcsIDB4ZjAgfSwgeyAweDg3LCAweGZmIH0sIHsgMHg4NywgMHhmZiB9LCB7IDB4ODcsIDB4ZmYgfSwKKwl7IDB4ODcsIDB4ZmYgfSwgeyAweDhjLCAweDFjIH0sIHsgMHg4ZCwgMHhjMiB9LCB7IDB4OGUsIDB4YzMgfSwKKwl7IDB4OGYsIDB4M2YgfSwgeyAweDkwLCAweDBhIH0sIHsgMHg5NiwgMHhmOCB9LAorfTsKKworc3RhdGljIGludCB3YWl0X2Zvcl9waHlfcmVhZHkodm9pZCBfX2lvbWVtICpyZWcsIHVuc2lnbmVkIGxvbmcgYml0KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCS8qIHdhaXQgZm9yIG1heGltdW0gb2YgMyBzZWMgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMzAwMCk7CisJd2hpbGUgKCEoX19yYXdfcmVhZGwocmVnKSAmIGJpdCkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLTE7CisJCWNwdV9yZWxheCgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaGNpX3BoeV9pbml0KHZvaWQgX19pb21lbSAqbW1pbykKK3sKKwlpbnQgaSwgY3RybDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHlub3M0X3NhdGFwaHlfY211KTsgaSsrKQorCQlfX3Jhd193cml0ZWIoZXh5bm9zNF9zYXRhcGh5X2NtdVtpXS52YWwsCisJCXBoeV9iYXNlICsgKGV4eW5vczRfc2F0YXBoeV9jbXVbaV0ucmVnICogNCkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNF9zYXRhcGh5X2xhbmUpOyBpKyspCisJCV9fcmF3X3dyaXRlYihleHlub3M0X3NhdGFwaHlfbGFuZVtpXS52YWwsCisJCXBoeV9iYXNlICsgKExBTkUwICsgZXh5bm9zNF9zYXRhcGh5X2xhbmVbaV0ucmVnKSAqIDQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zNF9zYXRhcGh5X2NvbWxhbmUpOyBpKyspCisJCV9fcmF3X3dyaXRlYihleHlub3M0X3NhdGFwaHlfY29tbGFuZVtpXS52YWwsCisJCXBoeV9iYXNlICsgKENPTV9MQU5FICsgZXh5bm9zNF9zYXRhcGh5X2NvbWxhbmVbaV0ucmVnKSAqIDQpOworCisJX19yYXdfd3JpdGViKDB4MDcsIHBoeV9iYXNlKTsKKworCWN0cmwwID0gX19yYXdfcmVhZGwocGh5X2N0cmwgKyBTQVRBX0NUUkwwKTsKKwljdHJsMCB8PSBTQVRBX0NUUkwwX1BIWV9DTVVfUlNUX047CisJX19yYXdfd3JpdGVsKGN0cmwwLCBwaHlfY3RybCArIFNBVEFfQ1RSTDApOworCisJaWYgKHdhaXRfZm9yX3BoeV9yZWFkeShwaHlfY3RybCArIFNBVEFfUEhZX1NUQVRVUywKKwkJCQlTQVRBX1BIWV9TVEFUVVNfQ01VX09LKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQSFkgQ01VIG5vdCByZWFkeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJX19yYXdfd3JpdGViKDB4MDMsIHBoeV9iYXNlICsgKENPTV9MQU5FICogNCkpOworCisJY3RybDAgPSBfX3Jhd19yZWFkbChwaHlfY3RybCArIFNBVEFfQ1RSTDApOworCWN0cmwwIHw9IFNBVEFfQ1RSTDBfTV9QSFlfTE5fUlNUX047CisJX19yYXdfd3JpdGVsKGN0cmwwLCBwaHlfY3RybCArIFNBVEFfQ1RSTDApOworCisJaWYgKHdhaXRfZm9yX3BoeV9yZWFkeShwaHlfY3RybCArIFNBVEFfUEhZX1NUQVRVUywKKwkJCQlTQVRBX1BIWV9TVEFUVVNfTEFORV9PSykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUEhZIExBTkUgbm90IHJlYWR5XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwljdHJsMCA9IF9fcmF3X3JlYWRsKHBoeV9jdHJsICsgU0FUQV9DVFJMMCk7CisJY3RybDAgfD0gU0FUQV9DVFJMMF9NX1BIWV9DQUw7CisJX19yYXdfd3JpdGVsKGN0cmwwLCBwaHlfY3RybCArIFNBVEFfQ1RSTDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zNF9haGNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKm1taW8pCit7CisJc3RydWN0IGNsayAqY2xrX3NhdGEsICpjbGtfc2F0YXBoeSwgKmNsa19zY2xrX3NhdGE7CisJaW50IHZhbCwgcmV0OworCisJcGh5X2Jhc2UgPSBpb3JlbWFwKEVYWU5PUzRfUEFfU0FUQVBIWSwgU1pfNjRLKTsKKwlpZiAoIXBoeV9iYXNlKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgU0FUQSBQSFlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwaHlfY3RybCA9IGlvcmVtYXAoRVhZTk9TNF9QQV9TQVRBUEhZX0NUUkwsIFNaXzE2KTsKKwlpZiAoIXBoeV9jdHJsKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgU0FUQSBQSFkgQ1RSTFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwljbGtfc2F0YSA9IGNsa19nZXQoZGV2LCAic2F0YSIpOworCWlmIChJU19FUlIoY2xrX3NhdGEpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBzYXRhIGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihjbGtfc2F0YSk7CisJCWNsa19zYXRhID0gTlVMTDsKKwkJZ290byBlcnIyOworCisJfQorCWNsa19lbmFibGUoY2xrX3NhdGEpOworCisJY2xrX3NhdGFwaHkgPSBjbGtfZ2V0KGRldiwgInNhdGFwaHkiKTsKKwlpZiAoSVNfRVJSKGNsa19zYXRhcGh5KSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgc2F0YXBoeSBjbG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIoY2xrX3NhdGFwaHkpOworCQljbGtfc2F0YXBoeSA9IE5VTEw7CisJCWdvdG8gZXJyMzsKKwl9CisJY2xrX2VuYWJsZShjbGtfc2F0YXBoeSk7CisKKwljbGtfc2Nsa19zYXRhID0gY2xrX2dldChkZXYsICJzY2xrX3NhdGEiKTsKKwlpZiAoSVNfRVJSKGNsa19zY2xrX3NhdGEpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBzY2xrX3NhdGFcbiIpOworCQlyZXQgPSBQVFJfRVJSKGNsa19zY2xrX3NhdGEpOworCQljbGtfc2Nsa19zYXRhID0gTlVMTDsKKwkJZ290byBlcnI0OworCX0KKwljbGtfZW5hYmxlKGNsa19zY2xrX3NhdGEpOworCWNsa19zZXRfcmF0ZShjbGtfc2Nsa19zYXRhLCBTQ0xLX1NBVEFfRlJFUSk7CisKKwlfX3Jhd193cml0ZWwoUzVQX1BNVV9TQVRBX1BIWV9DT05UUk9MX0VOLCBTNVBfUE1VX1NBVEFfUEhZX0NPTlRST0wpOworCisJLyogRW5hYmxlIFBIWSBsaW5rIGNvbnRyb2wgKi8KKwl2YWwgPSBTQVRBX0NUUkwxX1JTVF9QTUFMSVZFX04gfCBTQVRBX0NUUkwxX1JTVF9SWE9PQl9OIHwKKwkJCVNBVEFfQ1RSTDFfUlNUX1JYX04gfCBTQVRBX0NUUkwxX1JTVF9UWF9OOworCV9fcmF3X3dyaXRlbCh2YWwsIHBoeV9jdHJsICsgU0FUQV9DVFJMMSk7CisKKwkvKiBTZXQgY29tbXVuaWNhdGlvbiBzcGVlZCBhcyAzR2JwcyBhbmQgZW5hYmxlIFBIWSBwb3dlciAqLworCXZhbCA9IFNBVEFfQ1RSTDBfUlhfREFUQV9WQUxJRCgzKSB8IFNBVEFfQ1RSTDBfU1BFRURfTU9ERSB8CisJCQlTQVRBX0NUUkwwX1BIWV9QT1JfTjsKKwlfX3Jhd193cml0ZWwodmFsLCBwaHlfY3RybCArIFNBVEFfQ1RSTDApOworCisJLyogUG9ydDAgaXMgYXZhaWxhYmxlICovCisJX19yYXdfd3JpdGVsKDB4MSwgbW1pbyArIEhPU1RfUE9SVFNfSU1QTCk7CisKKwlyZXR1cm4gYWhjaV9waHlfaW5pdChtbWlvKTsKKworZXJyNDoKKwljbGtfZGlzYWJsZShjbGtfc2F0YXBoeSk7CisJY2xrX3B1dChjbGtfc2F0YXBoeSk7CitlcnIzOgorCWNsa19kaXNhYmxlKGNsa19zYXRhKTsKKwljbGtfcHV0KGNsa19zYXRhKTsKK2VycjI6CisJaW91bm1hcChwaHlfY3RybCk7CitlcnIxOgorCWlvdW5tYXAocGh5X2Jhc2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBhaGNpX3BsYXRmb3JtX2RhdGEgZXh5bm9zNF9haGNpX3BkYXRhID0geworCS5pbml0ID0gZXh5bm9zNF9haGNpX2luaXQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV4eW5vczRfYWhjaV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9TQVRBLAorCQkuZW5kCT0gRVhZTk9TNF9QQV9TQVRBICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TQVRBLAorCQkuZW5kCT0gSVJRX1NBVEEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IGV4eW5vczRfYWhjaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9haGNpID0geworCS5uYW1lCQk9ICJhaGNpIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gZXh5bm9zNF9haGNpX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShleHlub3M0X2FoY2lfcmVzb3VyY2UpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQkJPSAmZXh5bm9zNF9haGNpX3BkYXRhLAorCQkuZG1hX21hc2sJCT0gJmV4eW5vczRfYWhjaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2Rldi1hdWRpby5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2Rldi1hdWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZWQ1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvZGV2LWF1ZGlvLmMKQEAgLTAsMCArMSwzNjcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9kZXYtYXVkaW8uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkCisgKglKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqcmNsa3NyY1tdID0geworCVswXSA9ICJidXNjbGsiLAorCVsxXSA9ICJpMnNjbGsiLAorfTsKKworc3RhdGljIGludCBleHlub3M0X2NmZ19pMnMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwkvKiBjb25maWd1cmUgR1BJTyBmb3IgaTJzIHBvcnQgKi8KKwlzd2l0Y2ggKHBkZXYtPmlkKSB7CisJY2FzZSAwOgorCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoRVhZTk9TNF9HUFooMCksIDcsIFMzQ19HUElPX1NGTigyKSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJczNjX2dwaW9fY2ZncGluX3JhbmdlKEVYWU5PUzRfR1BDMCgwKSwgNSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoRVhZTk9TNF9HUEMxKDApLCA1LCBTM0NfR1BJT19TRk4oNCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgRGV2aWNlICVkXG4iLCBwZGV2LT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBpMnN2NV9wZGF0YSA9IHsKKwkuY2ZnX2dwaW8gPSBleHlub3M0X2NmZ19pMnMsCisJLnR5cGUgPSB7CisJCS5pMnMgPSB7CisJCQkucXVpcmtzID0gUVVJUktfUFJJXzZDSEFOIHwgUVVJUktfU0VDX0RBSQorCQkJCQkgfCBRVUlSS19ORUVEX1JTVENMUiwKKwkJCS5zcmNfY2xrID0gcmNsa3NyYywKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHlub3M0X2kyczBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfSTJTMCwKKwkJLmVuZAk9IEVYWU5PUzRfUEFfSTJTMCArIDB4MTAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERNQUNIX0kyUzBfVFgsCisJCS5lbmQJPSBETUFDSF9JMlMwX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfSTJTMF9SWCwKKwkJLmVuZAk9IERNQUNIX0kyUzBfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBETUFDSF9JMlMwU19UWCwKKwkJLmVuZAk9IERNQUNIX0kyUzBTX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9pMnMwID0geworCS5uYW1lID0gInNhbXN1bmctaTJzIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShleHlub3M0X2kyczBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IGV4eW5vczRfaTJzMF9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpMnN2NV9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnJjbGtzcmNfdjNbXSA9IHsKKwlbMF0gPSAic2Nsa19pMnMiLAorCVsxXSA9ICJub19zdWNoX2Nsb2NrIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIGkyc3YzX3BkYXRhID0geworCS5jZmdfZ3BpbyA9IGV4eW5vczRfY2ZnX2kycywKKwkudHlwZSA9IHsKKwkJLmkycyA9IHsKKwkJCS5xdWlya3MgPSBRVUlSS19OT19NVVhQU1IsCisJCQkuc3JjX2NsayA9IHJjbGtzcmNfdjMsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXh5bm9zNF9pMnMxX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBFWFlOT1M0X1BBX0kyUzEsCisJCS5lbmQJPSBFWFlOT1M0X1BBX0kyUzEgKyAweDEwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBETUFDSF9JMlMxX1RYLAorCQkuZW5kCT0gRE1BQ0hfSTJTMV9UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IERNQUNIX0kyUzFfUlgsCisJCS5lbmQJPSBETUFDSF9JMlMxX1JYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9pMnMxID0geworCS5uYW1lID0gInNhbXN1bmctaTJzIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShleHlub3M0X2kyczFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IGV4eW5vczRfaTJzMV9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpMnN2M19wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHlub3M0X2kyczJfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfSTJTMiwKKwkJLmVuZAk9IEVYWU5PUzRfUEFfSTJTMiArIDB4MTAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERNQUNIX0kyUzJfVFgsCisJCS5lbmQJPSBETUFDSF9JMlMyX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfSTJTMl9SWCwKKwkJLmVuZAk9IERNQUNIX0kyUzJfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV4eW5vczRfZGV2aWNlX2kyczIgPSB7CisJLm5hbWUgPSAic2Ftc3VuZy1pMnMiLAorCS5pZCA9IDIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGV4eW5vczRfaTJzMl9yZXNvdXJjZSksCisJLnJlc291cmNlID0gZXh5bm9zNF9pMnMyX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmkyc3YzX3BkYXRhLAorCX0sCit9OworCisvKiBQQ00gQ29udHJvbGxlciBwbGF0Zm9ybV9kZXZpY2VzICovCisKK3N0YXRpYyBpbnQgZXh5bm9zNF9wY21fY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzd2l0Y2ggKHBkZXYtPmlkKSB7CisJY2FzZSAwOgorCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoRVhZTk9TNF9HUFooMCksIDUsIFMzQ19HUElPX1NGTigzKSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJczNjX2dwaW9fY2ZncGluX3JhbmdlKEVYWU5PUzRfR1BDMCgwKSwgNSwgUzNDX0dQSU9fU0ZOKDMpKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoRVhZTk9TNF9HUEMxKDApLCA1LCBTM0NfR1BJT19TRk4oMykpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiSW52YWxpZCBQQ00gQ29udHJvbGxlciBudW1iZXIhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzM2NfcGNtX3BkYXRhID0geworCS5jZmdfZ3BpbyA9IGV4eW5vczRfcGNtX2NmZ19ncGlvLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHlub3M0X3BjbTBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfUENNMCwKKwkJLmVuZAk9IEVYWU5PUzRfUEFfUENNMCArIDB4MTAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERNQUNIX1BDTTBfVFgsCisJCS5lbmQJPSBETUFDSF9QQ00wX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfUENNMF9SWCwKKwkJLmVuZAk9IERNQUNIX1BDTTBfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV4eW5vczRfZGV2aWNlX3BjbTAgPSB7CisJLm5hbWUgPSAic2Ftc3VuZy1wY20iLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGV4eW5vczRfcGNtMF9yZXNvdXJjZSksCisJLnJlc291cmNlID0gZXh5bm9zNF9wY20wX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnMzY19wY21fcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXh5bm9zNF9wY20xX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBFWFlOT1M0X1BBX1BDTTEsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1BDTTEgKyAweDEwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBETUFDSF9QQ00xX1RYLAorCQkuZW5kCT0gRE1BQ0hfUENNMV9UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IERNQUNIX1BDTTFfUlgsCisJCS5lbmQJPSBETUFDSF9QQ00xX1JYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9wY20xID0geworCS5uYW1lID0gInNhbXN1bmctcGNtIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShleHlub3M0X3BjbTFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IGV4eW5vczRfcGNtMV9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfcGNtX3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV4eW5vczRfcGNtMl9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9QQ00yLAorCQkuZW5kCT0gRVhZTk9TNF9QQV9QQ00yICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfUENNMl9UWCwKKwkJLmVuZAk9IERNQUNIX1BDTTJfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBETUFDSF9QQ00yX1JYLAorCQkuZW5kCT0gRE1BQ0hfUENNMl9SWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2VfcGNtMiA9IHsKKwkubmFtZSA9ICJzYW1zdW5nLXBjbSIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZXh5bm9zNF9wY20yX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgPSBleHlub3M0X3BjbTJfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmczNjX3BjbV9wZGF0YSwKKwl9LAorfTsKKworLyogQUM5NyBDb250cm9sbGVyIHBsYXRmb3JtIGRldmljZXMgKi8KKworc3RhdGljIGludCBleHlub3M0X2FjOTdfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gczNjX2dwaW9fY2ZncGluX3JhbmdlKEVYWU5PUzRfR1BDMCgwKSwgNSwgUzNDX0dQSU9fU0ZOKDQpKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHlub3M0X2FjOTdfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfQUM5NywKKwkJLmVuZAk9IEVYWU5PUzRfUEFfQUM5NyArIDB4MTAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERNQUNIX0FDOTdfUENNT1VULAorCQkuZW5kCT0gRE1BQ0hfQUM5N19QQ01PVVQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBETUFDSF9BQzk3X1BDTUlOLAorCQkuZW5kCT0gRE1BQ0hfQUM5N19QQ01JTiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IERNQUNIX0FDOTdfTUlDSU4sCisJCS5lbmQJPSBETUFDSF9BQzk3X01JQ0lOLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVs0XSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0FDOTcsCisJCS5lbmQJPSBJUlFfQUM5NywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19hYzk3X3BkYXRhID0geworCS5jZmdfZ3BpbyA9IGV4eW5vczRfYWM5N19jZmdfZ3BpbywKK307CisKK3N0YXRpYyB1NjQgZXh5bm9zNF9hYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV4eW5vczRfZGV2aWNlX2FjOTcgPSB7CisJLm5hbWUgPSAic2Ftc3VuZy1hYzk3IiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZXh5bm9zNF9hYzk3X3Jlc291cmNlKSwKKwkucmVzb3VyY2UgPSBleHlub3M0X2FjOTdfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmczNjX2FjOTdfcGRhdGEsCisJCS5kbWFfbWFzayA9ICZleHlub3M0X2FjOTdfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworLyogUy9QRElGIENvbnRyb2xsZXIgcGxhdGZvcm1fZGV2aWNlICovCisKK3N0YXRpYyBpbnQgZXh5bm9zNF9zcGRpZl9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShFWFlOT1M0X0dQQzEoMCksIDIsIFMzQ19HUElPX1NGTigzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHlub3M0X3NwZGlmX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBFWFlOT1M0X1BBX1NQRElGLAorCQkuZW5kCT0gRVhZTk9TNF9QQV9TUERJRiArIDB4MTAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERNQUNIX1NQRElGLAorCQkuZW5kCT0gRE1BQ0hfU1BESUYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzYW1zdW5nX3NwZGlmX3BkYXRhID0geworCS5jZmdfZ3BpbyA9IGV4eW5vczRfc3BkaWZfY2ZnX2dwaW8sCit9OworCitzdGF0aWMgdTY0IGV4eW5vczRfc3BkaWZfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2Vfc3BkaWYgPSB7CisJLm5hbWUgPSAic2Ftc3VuZy1zcGRpZiIsCisJLmlkID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGV4eW5vczRfc3BkaWZfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IGV4eW5vczRfc3BkaWZfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2Ftc3VuZ19zcGRpZl9wZGF0YSwKKwkJLmRtYV9tYXNrID0gJmV4eW5vczRfc3BkaWZfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9kZXYtcGQuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9kZXYtcGQuYwpzaW1pbGFyaXR5IGluZGV4IDc0JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvZGV2LXBkLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9kZXYtcGQuYwppbmRleCA1OGE1MGMyLi4zMjczZjI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvZGV2LXBkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2Rldi1wZC5jCkBAIC0xLDkgKzEsOSBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Rldi1wZC5jCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvZGV2LXBkLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKLSAqIFM1UFYzMTAgLSBQb3dlciBEb21haW4gc3VwcG9ydAorICogRVhZTk9TNCAtIFBvd2VyIERvbWFpbiBzdXBwb3J0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xOSw3ICsxOSw3IEBACiAKICNpbmNsdWRlIDxwbGF0L3BkLmg+CiAKLXN0YXRpYyBpbnQgczVwdjMxMF9wZF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBleHlub3M0X3BkX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNhbXN1bmdfcGRfaW5mbyAqcGRhdGEgPSAgZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXUzMiB0aW1lb3V0OwpAQCAtNDIsNyArNDIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1cHYzMTBfcGRfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGV4eW5vczRfcGRfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNhbXN1bmdfcGRfaW5mbyAqcGRhdGEgPSAgZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXUzMiB0aW1lb3V0OwpAQCAtNjQsMTQgKzY0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfcGRbXSA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2VfcGRbXSA9IHsKIAl7CiAJCS5uYW1lCQk9ICJzYW1zdW5nLXBkIiwKIAkJLmlkCQk9IDAsCiAJCS5kZXYgPSB7CiAJCQkucGxhdGZvcm1fZGF0YSA9ICYoc3RydWN0IHNhbXN1bmdfcGRfaW5mbykgewotCQkJCS5lbmFibGUJCT0gczVwdjMxMF9wZF9lbmFibGUsCi0JCQkJLmRpc2FibGUJPSBzNXB2MzEwX3BkX2Rpc2FibGUsCisJCQkJLmVuYWJsZQkJPSBleHlub3M0X3BkX2VuYWJsZSwKKwkJCQkuZGlzYWJsZQk9IGV4eW5vczRfcGRfZGlzYWJsZSwKIAkJCQkuYmFzZQkJPSBTNVBfUE1VX01GQ19DT05GLAogCQkJfSwKIAkJfSwKQEAgLTgwLDggKzgwLDggQEAKIAkJLmlkCQk9IDEsCiAJCS5kZXYgPSB7CiAJCQkucGxhdGZvcm1fZGF0YSA9ICYoc3RydWN0IHNhbXN1bmdfcGRfaW5mbykgewotCQkJCS5lbmFibGUJCT0gczVwdjMxMF9wZF9lbmFibGUsCi0JCQkJLmRpc2FibGUJPSBzNXB2MzEwX3BkX2Rpc2FibGUsCisJCQkJLmVuYWJsZQkJPSBleHlub3M0X3BkX2VuYWJsZSwKKwkJCQkuZGlzYWJsZQk9IGV4eW5vczRfcGRfZGlzYWJsZSwKIAkJCQkuYmFzZQkJPSBTNVBfUE1VX0czRF9DT05GLAogCQkJfSwKIAkJfSwKQEAgLTkwLDggKzkwLDggQEAKIAkJLmlkCQk9IDIsCiAJCS5kZXYgPSB7CiAJCQkucGxhdGZvcm1fZGF0YSA9ICYoc3RydWN0IHNhbXN1bmdfcGRfaW5mbykgewotCQkJCS5lbmFibGUJCT0gczVwdjMxMF9wZF9lbmFibGUsCi0JCQkJLmRpc2FibGUJPSBzNXB2MzEwX3BkX2Rpc2FibGUsCisJCQkJLmVuYWJsZQkJPSBleHlub3M0X3BkX2VuYWJsZSwKKwkJCQkuZGlzYWJsZQk9IGV4eW5vczRfcGRfZGlzYWJsZSwKIAkJCQkuYmFzZQkJPSBTNVBfUE1VX0xDRDBfQ09ORiwKIAkJCX0sCiAJCX0sCkBAIC0xMDAsOCArMTAwLDggQEAKIAkJLmlkCQk9IDMsCiAJCS5kZXYgPSB7CiAJCQkucGxhdGZvcm1fZGF0YSA9ICYoc3RydWN0IHNhbXN1bmdfcGRfaW5mbykgewotCQkJCS5lbmFibGUJCT0gczVwdjMxMF9wZF9lbmFibGUsCi0JCQkJLmRpc2FibGUJPSBzNXB2MzEwX3BkX2Rpc2FibGUsCisJCQkJLmVuYWJsZQkJPSBleHlub3M0X3BkX2VuYWJsZSwKKwkJCQkuZGlzYWJsZQk9IGV4eW5vczRfcGRfZGlzYWJsZSwKIAkJCQkuYmFzZQkJPSBTNVBfUE1VX0xDRDFfQ09ORiwKIAkJCX0sCiAJCX0sCkBAIC0xMTAsOCArMTEwLDggQEAKIAkJLmlkCQk9IDQsCiAJCS5kZXYgPSB7CiAJCQkucGxhdGZvcm1fZGF0YSA9ICYoc3RydWN0IHNhbXN1bmdfcGRfaW5mbykgewotCQkJCS5lbmFibGUJCT0gczVwdjMxMF9wZF9lbmFibGUsCi0JCQkJLmRpc2FibGUJPSBzNXB2MzEwX3BkX2Rpc2FibGUsCisJCQkJLmVuYWJsZQkJPSBleHlub3M0X3BkX2VuYWJsZSwKKwkJCQkuZGlzYWJsZQk9IGV4eW5vczRfcGRfZGlzYWJsZSwKIAkJCQkuYmFzZQkJPSBTNVBfUE1VX1RWX0NPTkYsCiAJCQl9LAogCQl9LApAQCAtMTIwLDggKzEyMCw4IEBACiAJCS5pZAkJPSA1LAogCQkuZGV2ID0gewogCQkJLnBsYXRmb3JtX2RhdGEgPSAmKHN0cnVjdCBzYW1zdW5nX3BkX2luZm8pIHsKLQkJCQkuZW5hYmxlCQk9IHM1cHYzMTBfcGRfZW5hYmxlLAotCQkJCS5kaXNhYmxlCT0gczVwdjMxMF9wZF9kaXNhYmxlLAorCQkJCS5lbmFibGUJCT0gZXh5bm9zNF9wZF9lbmFibGUsCisJCQkJLmRpc2FibGUJPSBleHlub3M0X3BkX2Rpc2FibGUsCiAJCQkJLmJhc2UJCT0gUzVQX1BNVV9DQU1fQ09ORiwKIAkJCX0sCiAJCX0sCkBAIC0xMzAsOCArMTMwLDggQEAKIAkJLmlkCQk9IDYsCiAJCS5kZXYgPSB7CiAJCQkucGxhdGZvcm1fZGF0YSA9ICYoc3RydWN0IHNhbXN1bmdfcGRfaW5mbykgewotCQkJCS5lbmFibGUJCT0gczVwdjMxMF9wZF9lbmFibGUsCi0JCQkJLmRpc2FibGUJPSBzNXB2MzEwX3BkX2Rpc2FibGUsCisJCQkJLmVuYWJsZQkJPSBleHlub3M0X3BkX2VuYWJsZSwKKwkJCQkuZGlzYWJsZQk9IGV4eW5vczRfcGRfZGlzYWJsZSwKIAkJCQkuYmFzZQkJPSBTNVBfUE1VX0dQU19DT05GLAogCQkJfSwKIAkJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9kZXYtc3lzbW11LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvZGV2LXN5c21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiN2NhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvZGV2LXN5c21tdS5jCkBAIC0wLDAgKzEsMjMyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvZGV2LXN5c21tdS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIEVYWU5PUzQgLSBTeXN0ZW0gTU1VIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL3N5c21tdS5oPgorI2luY2x1ZGUgPHBsYXQvczVwLWNsb2NrLmg+CisKKy8qIFRoZXNlIG5hbWVzIG11c3QgYmUgZXF1YWwgdG8gdGhlIGNsb2NrIG5hbWVzIGluIG1hY2gtZXh5bm9zNC9jbG9jay5jICovCitjb25zdCBjaGFyICpzeXNtbXVfaXBzX25hbWVbRVhZTk9TNF9TWVNNTVVfVE9UQUxfSVBOVU1dID0geworCSJTWVNNTVVfTURNQSIJLAorCSJTWVNNTVVfU1NTIgksCisJIlNZU01NVV9GSU1DMCIJLAorCSJTWVNNTVVfRklNQzEiCSwKKwkiU1lTTU1VX0ZJTUMyIgksCisJIlNZU01NVV9GSU1DMyIJLAorCSJTWVNNTVVfSlBFRyIJLAorCSJTWVNNTVVfRklNRDAiCSwKKwkiU1lTTU1VX0ZJTUQxIgksCisJIlNZU01NVV9QQ0llIgksCisJIlNZU01NVV9HMkQiCSwKKwkiU1lTTU1VX1JPVEFUT1IiLAorCSJTWVNNTVVfTURNQTIiCSwKKwkiU1lTTU1VX1RWIgksCisJIlNZU01NVV9NRkNfTCIJLAorCSJTWVNNTVVfTUZDX1IiCSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXh5bm9zNF9zeXNtbXVfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfU1lTTU1VX01ETUEsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NZU01NVV9NRE1BICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TWVNNTVVfTURNQTBfMCwKKwkJLmVuZAk9IElSUV9TWVNNTVVfTURNQTBfMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfU1lTTU1VX1NTUywKKwkJLmVuZAk9IEVYWU5PUzRfUEFfU1lTTU1VX1NTUyArIFNaXzY0SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBJUlFfU1lTTU1VX1NTU18wLAorCQkuZW5kCT0gSVJRX1NZU01NVV9TU1NfMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbNF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfU1lTTU1VX0ZJTUMwLAorCQkuZW5kCT0gRVhZTk9TNF9QQV9TWVNNTVVfRklNQzAgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVs1XSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1NZU01NVV9GSU1DMF8wLAorCQkuZW5kCT0gSVJRX1NZU01NVV9GSU1DMF8wLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVs2XSA9IHsKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9TWVNNTVVfRklNQzEsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NZU01NVV9GSU1DMSArIFNaXzY0SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzddID0geworCQkuc3RhcnQJPSBJUlFfU1lTTU1VX0ZJTUMxXzAsCisJCS5lbmQJPSBJUlFfU1lTTU1VX0ZJTUMxXzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzhdID0geworCQkuc3RhcnQJPSBFWFlOT1M0X1BBX1NZU01NVV9GSU1DMiwKKwkJLmVuZAk9IEVYWU5PUzRfUEFfU1lTTU1VX0ZJTUMyICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbOV0gPSB7CisJCS5zdGFydAk9IElSUV9TWVNNTVVfRklNQzJfMCwKKwkJLmVuZAk9IElSUV9TWVNNTVVfRklNQzJfMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMTBdID0geworCQkuc3RhcnQJPSBFWFlOT1M0X1BBX1NZU01NVV9GSU1DMywKKwkJLmVuZAk9IEVYWU5PUzRfUEFfU1lTTU1VX0ZJTUMzICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMTFdID0geworCQkuc3RhcnQJPSBJUlFfU1lTTU1VX0ZJTUMzXzAsCisJCS5lbmQJPSBJUlFfU1lTTU1VX0ZJTUMzXzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzEyXSA9IHsKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9TWVNNTVVfSlBFRywKKwkJLmVuZAk9IEVYWU5PUzRfUEFfU1lTTU1VX0pQRUcgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxM10gPSB7CisJCS5zdGFydAk9IElSUV9TWVNNTVVfSlBFR18wLAorCQkuZW5kCT0gSVJRX1NZU01NVV9KUEVHXzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzE0XSA9IHsKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9TWVNNTVVfRklNRDAsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NZU01NVV9GSU1EMCArIFNaXzY0SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzE1XSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1NZU01NVV9MQ0QwX00wXzAsCisJCS5lbmQJPSBJUlFfU1lTTU1VX0xDRDBfTTBfMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMTZdID0geworCQkuc3RhcnQJPSBFWFlOT1M0X1BBX1NZU01NVV9GSU1EMSwKKwkJLmVuZAk9IEVYWU5PUzRfUEFfU1lTTU1VX0ZJTUQxICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMTddID0geworCQkuc3RhcnQJPSBJUlFfU1lTTU1VX0xDRDFfTTFfMCwKKwkJLmVuZAk9IElSUV9TWVNNTVVfTENEMV9NMV8wLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsxOF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfU1lTTU1VX1BDSWUsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NZU01NVV9QQ0llICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMTldID0geworCQkuc3RhcnQJPSBJUlFfU1lTTU1VX1BDSUVfMCwKKwkJLmVuZAk9IElSUV9TWVNNTVVfUENJRV8wLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyMF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfU1lTTU1VX0cyRCwKKwkJLmVuZAk9IEVYWU5PUzRfUEFfU1lTTU1VX0cyRCArIFNaXzY0SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzIxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1NZU01NVV8yRF8wLAorCQkuZW5kCT0gSVJRX1NZU01NVV8yRF8wLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyMl0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfU1lTTU1VX1JPVEFUT1IsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NZU01NVV9ST1RBVE9SICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMjNdID0geworCQkuc3RhcnQJPSBJUlFfU1lTTU1VX1JPVEFUT1JfMCwKKwkJLmVuZAk9IElSUV9TWVNNTVVfUk9UQVRPUl8wLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyNF0gPSB7CisJCS5zdGFydAk9IEVYWU5PUzRfUEFfU1lTTU1VX01ETUEyLAorCQkuZW5kCT0gRVhZTk9TNF9QQV9TWVNNTVVfTURNQTIgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsyNV0gPSB7CisJCS5zdGFydAk9IElSUV9TWVNNTVVfTURNQTFfMCwKKwkJLmVuZAk9IElSUV9TWVNNTVVfTURNQTFfMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMjZdID0geworCQkuc3RhcnQJPSBFWFlOT1M0X1BBX1NZU01NVV9UViwKKwkJLmVuZAk9IEVYWU5PUzRfUEFfU1lTTU1VX1RWICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMjddID0geworCQkuc3RhcnQJPSBJUlFfU1lTTU1VX1RWX00wXzAsCisJCS5lbmQJPSBJUlFfU1lTTU1VX1RWX00wXzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzI4XSA9IHsKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9TWVNNTVVfTUZDX0wsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NZU01NVV9NRkNfTCArIFNaXzY0SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzI5XSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1NZU01NVV9NRkNfTTBfMCwKKwkJLmVuZAk9IElSUV9TWVNNTVVfTUZDX00wXzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzMwXSA9IHsKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9TWVNNTVVfTUZDX1IsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NZU01NVV9NRkNfUiArIFNaXzY0SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzMxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1NZU01NVV9NRkNfTTFfMCwKKwkJLmVuZAk9IElSUV9TWVNNTVVfTUZDX00xXzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV4eW5vczRfZGV2aWNlX3N5c21tdSA9IHsKKwkubmFtZQkJPSAiczVwLXN5c21tdSIsCisJLmlkCQk9IDMyLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShleHlub3M0X3N5c21tdV9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gZXh5bm9zNF9zeXNtbXVfcmVzb3VyY2UsCit9OworRVhQT1JUX1NZTUJPTChleHlub3M0X2RldmljZV9zeXNtbXUpOworCitzdGF0aWMgc3RydWN0IGNsayAqc3lzbW11X2Nsa1tTNVBfU1lTTU1VX1RPVEFMX0lQTlVNXTsKK3ZvaWQgc3lzbW11X2Nsa19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3lzbW11X2lwcyBpcHMpCit7CisJc3lzbW11X2Nsa1tpcHNdID0gY2xrX2dldChkZXYsIHN5c21tdV9pcHNfbmFtZVtpcHNdKTsKKwlpZiAoSVNfRVJSKHN5c21tdV9jbGtbaXBzXSkpCisJCXN5c21tdV9jbGtbaXBzXSA9IE5VTEw7CisJZWxzZQorCQljbGtfcHV0KHN5c21tdV9jbGtbaXBzXSk7Cit9CisKK3ZvaWQgc3lzbW11X2Nsa19lbmFibGUoc3lzbW11X2lwcyBpcHMpCit7CisJaWYgKHN5c21tdV9jbGtbaXBzXSkKKwkJY2xrX2VuYWJsZShzeXNtbXVfY2xrW2lwc10pOworfQorCit2b2lkIHN5c21tdV9jbGtfZGlzYWJsZShzeXNtbXVfaXBzIGlwcykKK3sKKwlpZiAoc3lzbW11X2Nsa1tpcHNdKQorCQljbGtfZGlzYWJsZShzeXNtbXVfY2xrW2lwc10pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2RtYS5jCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9kbWEuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2RtYS5jCmluZGV4IDIwMDY2YzcuLjU2NGJiNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvZG1hLmMKQEAgLTEsNCArMSw4IEBACi0vKgorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2RtYS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKICAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiBMdGQuCiAgKglKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CiAgKgpAQCAtMzAsMTAgKzM0LDEwIEBACiAKIHN0YXRpYyB1NjQgZG1hX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfcGRtYTBfcmVzb3VyY2VbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXh5bm9zNF9wZG1hMF9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9QRE1BMCwKLQkJLmVuZAk9IFM1UFYzMTBfUEFfUERNQTAgKyBTWl80SywKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9QRE1BMCwKKwkJLmVuZAk9IEVYWU5PUzRfUEFfUERNQTAgKyBTWl80SywKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC00Myw3ICs0Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgczNjX3BsMzMwX3BsYXRkYXRhIHM1cHYzMTBfcGRtYTBfcGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHMzY19wbDMzMF9wbGF0ZGF0YSBleHlub3M0X3BkbWEwX3BkYXRhID0gewogCS5wZXJpID0gewogCQlbMF0gPSBETUFDSF9QQ00wX1JYLAogCQlbMV0gPSBETUFDSF9QQ00wX1RYLApAQCAtODAsMjIgKzg0LDIyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX3BkbWEwID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2VfcGRtYTAgPSB7CiAJLm5hbWUJCT0gInMzYy1wbDMzMCIsCiAJLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cHYzMTBfcGRtYTBfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQk9IHM1cHYzMTBfcGRtYTBfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV4eW5vczRfcGRtYTBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGV4eW5vczRfcGRtYTBfcmVzb3VyY2UsCiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzayA9ICZkbWFfZG1hbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmczVwdjMxMF9wZG1hMF9wZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXh5bm9zNF9wZG1hMF9wZGF0YSwKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXB2MzEwX3BkbWExX3Jlc291cmNlW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV4eW5vczRfcGRtYTFfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfUERNQTEsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1BETUExICsgU1pfNEssCisJCS5zdGFydAk9IEVYWU5PUzRfUEFfUERNQTEsCisJCS5lbmQJPSBFWFlOT1M0X1BBX1BETUExICsgU1pfNEssCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtMTA1LDcgKzEwOSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgczNjX3BsMzMwX3BsYXRkYXRhIHM1cHYzMTBfcGRtYTFfcGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHMzY19wbDMzMF9wbGF0ZGF0YSBleHlub3M0X3BkbWExX3BkYXRhID0gewogCS5wZXJpID0gewogCQlbMF0gPSBETUFDSF9QQ00wX1JYLAogCQlbMV0gPSBETUFDSF9QQ00wX1RYLApAQCAtMTQyLDI3ICsxNDYsMjcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfcGRtYTEgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9wZG1hMSA9IHsKIAkubmFtZQkJPSAiczNjLXBsMzMwIiwKIAkuaWQJCT0gMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwdjMxMF9wZG1hMV9yZXNvdXJjZSksCi0JLnJlc291cmNlCT0gczVwdjMxMF9wZG1hMV9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXh5bm9zNF9wZG1hMV9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gZXh5bm9zNF9wZG1hMV9yZXNvdXJjZSwKIAkuZGV2CQk9IHsKIAkJLmRtYV9tYXNrID0gJmRtYV9kbWFtYXNrLAogCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZzNXB2MzEwX3BkbWExX3BkYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZleHlub3M0X3BkbWExX3BkYXRhLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczVwdjMxMF9kbWFjc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnM1cHYzMTBfZGV2aWNlX3BkbWEwLAotCSZzNXB2MzEwX2RldmljZV9wZG1hMSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpleHlub3M0X2RtYWNzW10gX19pbml0ZGF0YSA9IHsKKwkmZXh5bm9zNF9kZXZpY2VfcGRtYTAsCisJJmV4eW5vczRfZGV2aWNlX3BkbWExLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgczVwdjMxMF9kbWFfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZXh5bm9zNF9kbWFfaW5pdCh2b2lkKQogewotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHM1cHYzMTBfZG1hY3MsIEFSUkFZX1NJWkUoczVwdjMxMF9kbWFjcykpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGV4eW5vczRfZG1hY3MsIEFSUkFZX1NJWkUoZXh5bm9zNF9kbWFjcykpOwogCiAJcmV0dXJuIDA7CiB9Ci1hcmNoX2luaXRjYWxsKHM1cHYzMTBfZG1hX2luaXQpOworYXJjaF9pbml0Y2FsbChleHlub3M0X2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9ncGlvbGliLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvZ3Bpb2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NGNhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvZ3Bpb2xpYi5jCkBAIC0wLDAgKzEsMzY1IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvZ3Bpb2xpYi5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TNCAtIEdQSU9saWIgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1oZWxwZXJzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fY2ZnID0geworCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKKwkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKKwkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fY2ZnX25vaW50ID0geworCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKKwkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKKwkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKK307CisKKy8qCisgKiBGb2xsb3dpbmcgYXJlIHRoZSBncGlvIGJhbmtzIGluIHYzMTAuCisgKgorICogVGhlICdjb25maWcnIG1lbWJlciB3aGVuIGxlZnQgdG8gTlVMTCwgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIGRlZmF1bHQKKyAqIHN0cnVjdHVyZSBncGlvX2NmZyBpbiB0aGUgaW5pdCBmdW5jdGlvbiBiZWxvdy4KKyAqCisgKiBUaGUgJ2Jhc2UnIG1lbWJlciBpcyBhbHNvIGluaXRpYWxpemVkIGluIHRoZSBpbml0IGZ1bmN0aW9uIGJlbG93LgorICogTm90ZTogVGhlIGluaXRpYWxpemF0aW9uIG9mICdiYXNlJyBtZW1iZXIgb2YgczNjX2dwaW9fY2hpcCBzdHJ1Y3R1cmUKKyAqIHVzZXMgdGhlIGFib3ZlIG1hY3JvIGFuZCBkZXBlbmRzIG9uIHRoZSBiYW5rcyBiZWluZyBsaXN0ZWQgaW4gb3JkZXIgaGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jaGlwIGV4eW5vczRfZ3Bpb19wYXJ0MV80Yml0W10gPSB7CisJeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEEwKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0EwX05SLAorCQkJLmxhYmVsCT0gIkdQQTAiLAorCQl9LAorCX0sIHsKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BBMSgwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19BMV9OUiwKKwkJCS5sYWJlbAk9ICJHUEExIiwKKwkJfSwKKwl9LCB7CisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQQigwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19CX05SLAorCQkJLmxhYmVsCT0gIkdQQiIsCisJCX0sCisJfSwgeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEMwKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0MwX05SLAorCQkJLmxhYmVsCT0gIkdQQzAiLAorCQl9LAorCX0sIHsKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BDMSgwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19DMV9OUiwKKwkJCS5sYWJlbAk9ICJHUEMxIiwKKwkJfSwKKwl9LCB7CisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQRDAoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fRDBfTlIsCisJCQkubGFiZWwJPSAiR1BEMCIsCisJCX0sCisJfSwgeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEQxKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0QxX05SLAorCQkJLmxhYmVsCT0gIkdQRDEiLAorCQl9LAorCX0sIHsKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BFMCgwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19FMF9OUiwKKwkJCS5sYWJlbAk9ICJHUEUwIiwKKwkJfSwKKwl9LCB7CisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQRTEoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fRTFfTlIsCisJCQkubGFiZWwJPSAiR1BFMSIsCisJCX0sCisJfSwgeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEUyKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0UyX05SLAorCQkJLmxhYmVsCT0gIkdQRTIiLAorCQl9LAorCX0sIHsKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BFMygwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19FM19OUiwKKwkJCS5sYWJlbAk9ICJHUEUzIiwKKwkJfSwKKwl9LCB7CisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQRTQoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fRTRfTlIsCisJCQkubGFiZWwJPSAiR1BFNCIsCisJCX0sCisJfSwgeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEYwKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0YwX05SLAorCQkJLmxhYmVsCT0gIkdQRjAiLAorCQl9LAorCX0sIHsKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BGMSgwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19GMV9OUiwKKwkJCS5sYWJlbAk9ICJHUEYxIiwKKwkJfSwKKwl9LCB7CisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQRjIoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fRjJfTlIsCisJCQkubGFiZWwJPSAiR1BGMiIsCisJCX0sCisJfSwgeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEYzKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0YzX05SLAorCQkJLmxhYmVsCT0gIkdQRjMiLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NoaXAgZXh5bm9zNF9ncGlvX3BhcnQyXzRiaXRbXSA9IHsKKwl7CisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQSjAoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fSjBfTlIsCisJCQkubGFiZWwJPSAiR1BKMCIsCisJCX0sCisJfSwgeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEoxKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0oxX05SLAorCQkJLmxhYmVsCT0gIkdQSjEiLAorCQl9LAorCX0sIHsKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BLMCgwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19LMF9OUiwKKwkJCS5sYWJlbAk9ICJHUEswIiwKKwkJfSwKKwl9LCB7CisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQSzEoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fSzFfTlIsCisJCQkubGFiZWwJPSAiR1BLMSIsCisJCX0sCisJfSwgeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEsyKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0syX05SLAorCQkJLmxhYmVsCT0gIkdQSzIiLAorCQl9LAorCX0sIHsKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BLMygwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19LM19OUiwKKwkJCS5sYWJlbAk9ICJHUEszIiwKKwkJfSwKKwl9LCB7CisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQTDAoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fTDBfTlIsCisJCQkubGFiZWwJPSAiR1BMMCIsCisJCX0sCisJfSwgeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUEwxKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX0wxX05SLAorCQkJLmxhYmVsCT0gIkdQTDEiLAorCQl9LAorCX0sIHsKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BMMigwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19MMl9OUiwKKwkJCS5sYWJlbAk9ICJHUEwyIiwKKwkJfSwKKwl9LCB7CisJCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQWTAoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fWTBfTlIsCisJCQkubGFiZWwJPSAiR1BZMCIsCisJCX0sCisJfSwgeworCQkuY29uZmlnCT0gJmdwaW9fY2ZnX25vaW50LAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUFkxKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX1kxX05SLAorCQkJLmxhYmVsCT0gIkdQWTEiLAorCQl9LAorCX0sIHsKKwkJLmNvbmZpZwk9ICZncGlvX2NmZ19ub2ludCwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BZMigwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19ZMl9OUiwKKwkJCS5sYWJlbAk9ICJHUFkyIiwKKwkJfSwKKwl9LCB7CisJCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQWTMoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fWTNfTlIsCisJCQkubGFiZWwJPSAiR1BZMyIsCisJCX0sCisJfSwgeworCQkuY29uZmlnCT0gJmdwaW9fY2ZnX25vaW50LAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUFk0KDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX1k0X05SLAorCQkJLmxhYmVsCT0gIkdQWTQiLAorCQl9LAorCX0sIHsKKwkJLmNvbmZpZwk9ICZncGlvX2NmZ19ub2ludCwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BZNSgwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19ZNV9OUiwKKwkJCS5sYWJlbAk9ICJHUFk1IiwKKwkJfSwKKwl9LCB7CisJCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQWTYoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fWTZfTlIsCisJCQkubGFiZWwJPSAiR1BZNiIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IChTNVBfVkFfR1BJTzIgKyAweEMwMCksCisJCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCisJCS5pcnFfYmFzZSA9IElSUV9FSU5UKDApLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUFgwKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX1gwX05SLAorCQkJLmxhYmVsCT0gIkdQWDAiLAorCQkJLnRvX2lycQk9IHNhbXN1bmdfZ3Bpb2xpYl90b19pcnEsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IChTNVBfVkFfR1BJTzIgKyAweEMyMCksCisJCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCisJCS5pcnFfYmFzZSA9IElSUV9FSU5UKDgpLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUFgxKDApLAorCQkJLm5ncGlvCT0gRVhZTk9TNF9HUElPX1gxX05SLAorCQkJLmxhYmVsCT0gIkdQWDEiLAorCQkJLnRvX2lycQk9IHNhbXN1bmdfZ3Bpb2xpYl90b19pcnEsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IChTNVBfVkFfR1BJTzIgKyAweEM0MCksCisJCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCisJCS5pcnFfYmFzZSA9IElSUV9FSU5UKDE2KSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IEVYWU5PUzRfR1BYMigwKSwKKwkJCS5uZ3Bpbwk9IEVYWU5PUzRfR1BJT19YMl9OUiwKKwkJCS5sYWJlbAk9ICJHUFgyIiwKKwkJCS50b19pcnEJPSBzYW1zdW5nX2dwaW9saWJfdG9faXJxLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSAoUzVQX1ZBX0dQSU8yICsgMHhDNjApLAorCQkuY29uZmlnCT0gJmdwaW9fY2ZnX25vaW50LAorCQkuaXJxX2Jhc2UgPSBJUlFfRUlOVCgyNCksCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBFWFlOT1M0X0dQWDMoMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fWDNfTlIsCisJCQkubGFiZWwJPSAiR1BYMyIsCisJCQkudG9faXJxCT0gc2Ftc3VuZ19ncGlvbGliX3RvX2lycSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jaGlwIGV4eW5vczRfZ3Bpb19wYXJ0M180Yml0W10gPSB7CisJeworCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gRVhZTk9TNF9HUFooMCksCisJCQkubmdwaW8JPSBFWFlOT1M0X0dQSU9fWl9OUiwKKwkJCS5sYWJlbAk9ICJHUFoiLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgX19pbml0IGludCBleHlub3M0X2dwaW9saWJfaW5pdCh2b2lkKQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwOworCWludCBpOworCWludCBncm91cCA9IDA7CisJaW50IG5yX2NoaXBzOworCisJLyogR1BJTyBwYXJ0IDEgKi8KKworCWNoaXAgPSBleHlub3M0X2dwaW9fcGFydDFfNGJpdDsKKwlucl9jaGlwcyA9IEFSUkFZX1NJWkUoZXh5bm9zNF9ncGlvX3BhcnQxXzRiaXQpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2NoaXBzOyBpKyssIGNoaXArKykgeworCQlpZiAoY2hpcC0+Y29uZmlnID09IE5VTEwpIHsKKwkJCWNoaXAtPmNvbmZpZyA9ICZncGlvX2NmZzsKKwkJCS8qIEFzc2lnbiB0aGUgR1BJTyBpbnRlcnJ1cHQgZ3JvdXAgKi8KKwkJCWNoaXAtPmdyb3VwID0gZ3JvdXArKzsKKwkJfQorCQlpZiAoY2hpcC0+YmFzZSA9PSBOVUxMKQorCQkJY2hpcC0+YmFzZSA9IFM1UF9WQV9HUElPMSArIChpKSAqIDB4MjA7CisJfQorCisJc2Ftc3VuZ19ncGlvbGliX2FkZF80Yml0X2NoaXBzKGV4eW5vczRfZ3Bpb19wYXJ0MV80Yml0LCBucl9jaGlwcyk7CisKKwkvKiBHUElPIHBhcnQgMiAqLworCisJY2hpcCA9IGV4eW5vczRfZ3Bpb19wYXJ0Ml80Yml0OworCW5yX2NoaXBzID0gQVJSQVlfU0laRShleHlub3M0X2dwaW9fcGFydDJfNGJpdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY2hpcHM7IGkrKywgY2hpcCsrKSB7CisJCWlmIChjaGlwLT5jb25maWcgPT0gTlVMTCkgeworCQkJY2hpcC0+Y29uZmlnID0gJmdwaW9fY2ZnOworCQkJLyogQXNzaWduIHRoZSBHUElPIGludGVycnVwdCBncm91cCAqLworCQkJY2hpcC0+Z3JvdXAgPSBncm91cCsrOworCQl9CisJCWlmIChjaGlwLT5iYXNlID09IE5VTEwpCisJCQljaGlwLT5iYXNlID0gUzVQX1ZBX0dQSU8yICsgKGkpICogMHgyMDsKKwl9CisKKwlzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXRfY2hpcHMoZXh5bm9zNF9ncGlvX3BhcnQyXzRiaXQsIG5yX2NoaXBzKTsKKworCS8qIEdQSU8gcGFydCAzICovCisKKwljaGlwID0gZXh5bm9zNF9ncGlvX3BhcnQzXzRiaXQ7CisJbnJfY2hpcHMgPSBBUlJBWV9TSVpFKGV4eW5vczRfZ3Bpb19wYXJ0M180Yml0KTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jaGlwczsgaSsrLCBjaGlwKyspIHsKKwkJaWYgKGNoaXAtPmNvbmZpZyA9PSBOVUxMKSB7CisJCQljaGlwLT5jb25maWcgPSAmZ3Bpb19jZmc7CisJCQkvKiBBc3NpZ24gdGhlIEdQSU8gaW50ZXJydXB0IGdyb3VwICovCisJCQljaGlwLT5ncm91cCA9IGdyb3VwKys7CisJCX0KKwkJaWYgKGNoaXAtPmJhc2UgPT0gTlVMTCkKKwkJCWNoaXAtPmJhc2UgPSBTNVBfVkFfR1BJTzMgKyAoaSkgKiAweDIwOworCX0KKworCXNhbXN1bmdfZ3Bpb2xpYl9hZGRfNGJpdF9jaGlwcyhleHlub3M0X2dwaW9fcGFydDNfNGJpdCwgbnJfY2hpcHMpOworCXM1cF9yZWdpc3Rlcl9ncGlvaW50X2JhbmsoSVJRX0dQSU9fWEEsIDAsIElSUV9HUElPMV9OUl9HUk9VUFMpOworCXM1cF9yZWdpc3Rlcl9ncGlvaW50X2JhbmsoSVJRX0dQSU9fWEIsIElSUV9HUElPMV9OUl9HUk9VUFMsIElSUV9HUElPMl9OUl9HUk9VUFMpOworCisJcmV0dXJuIDA7Cit9Citjb3JlX2luaXRjYWxsKGV4eW5vczRfZ3Bpb2xpYl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaGVhZHNtcC5TCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9oZWFkc21wLlMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9oZWFkc21wLlMKaW5kZXggMTY0YjdiMC4uNmM2Y2ZjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2hlYWRzbXAuUworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaGVhZHNtcC5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaGVhZHNtcC5TCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2hlYWRzbXAuUwogICoKICAqICBDbG9uZWQgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hlYWRzbXAuUwogICoKQEAgLTE2LDExICsxNiwxMSBAQAogCV9fSU5JVAogCiAvKgotICogczVwdjMxMCBzcGVjaWZpYyBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVXMuICBUaGlzIHByb3ZpZGVzCisgKiBleHlub3M0IHNwZWNpZmljIGVudHJ5IHBvaW50IGZvciBzZWNvbmRhcnkgQ1BVcy4gIFRoaXMgcHJvdmlkZXMKICAqIGEgImhvbGRpbmcgcGVuIiBpbnRvIHdoaWNoIGFsbCBzZWNvbmRhcnkgY29yZXMgYXJlIGhlbGQgdW50aWwgd2UncmUKICAqIHJlYWR5IGZvciB0aGVtIHRvIGluaXRpYWxpc2UuCiAgKi8KLUVOVFJZKHM1cHYzMTBfc2Vjb25kYXJ5X3N0YXJ0dXApCitFTlRSWShleHlub3M0X3NlY29uZGFyeV9zdGFydHVwKQogCW1yYwlwMTUsIDAsIHIwLCBjMCwgYzAsIDUKIAlhbmQJcjAsIHIwLCAjMTUKIAlhZHIJcjQsIDFmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaG90cGx1Zy5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2hvdHBsdWcuYwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaG90cGx1Zy5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvaG90cGx1Zy5jCmluZGV4IGMyNDIzNWMuLjJiNTkwOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9ob3RwbHVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2hvdHBsdWcuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4IGFyY2gvYXJtL21hY2gtczVwdjMxMC9ob3RwbHVnLmMKKy8qIGxpbnV4IGFyY2gvYXJtL21hY2gtZXh5bm9zNC9ob3RwbHVnLmMKICAqCiAgKiAgQ2xvbmVkIGZyb20gbGludXgvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9ob3RwbHVnLmMKICAqCkBAIC0zMCwxMyArMzAsMTMgQEAKIAkgKiBUdXJuIG9mZiBjb2hlcmVuY3kKIAkgKi8KIAkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKLQkiCWJpYwklMCwgJTAsICMweDIwXG4iCisJIgliaWMJJTAsICUwLCAlM1xuIgogCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgogCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgogCSIJYmljCSUwLCAlMCwgJTJcbiIKIAkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKIAkgIDogIj0mciIgKHYpCi0JICA6ICJyIiAoMCksICJJciIgKENSX0MpCisJICA6ICJyIiAoMCksICJJciIgKENSX0MpLCAiSXIiICgweDQwKQogCSAgOiAiY2MiKTsKIH0KIApAQCAtNDksMTAgKzQ5LDEwIEBACiAJIglvcnIJJTAsICUwLCAlMVxuIgogCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgogCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgotCSIJb3JyCSUwLCAlMCwgIzB4MjBcbiIKKwkiCW9ycgklMCwgJTAsICUyXG4iCiAJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCiAJICA6ICI9JnIiICh2KQotCSAgOiAiSXIiIChDUl9DKQorCSAgOiAiSXIiIChDUl9DKSwgIklyIiAoMHg0MCkKIAkgIDogImNjIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBiMGQ5MjBjLi41OGJiZDA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xLDcgKzEsNyBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgogICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvZG1hLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZG1hLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvZG1hLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBlNjAwZTFkLi5kOGYzOGMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xLDggKzEsOCBAQAotLyogYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisvKiBhcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKICAqCiAgKiBDbG9uZWQgZnJvbSBhcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCiAgKgotICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBTNVBWMzEwIHBsYXRmb3JtcworICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBFWFlOT1M0IHBsYXRmb3JtcwogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzk3MjhiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvZ3Bpby5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TNCAtIEdQSU8gbGliIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0dQSU9fSCBfX0ZJTEVfXworCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCV9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAorI2RlZmluZSBncGlvX3RvX2lycQlfX2dwaW9fdG9faXJxCisKKy8qIFByYWN0aWNhbGx5LCBHUElPIGJhbmtzIHVwdG8gR1BaIGFyZSB0aGUgY29uZmlndXJhYmxlIGdwaW8gYmFua3MgKi8KKworLyogR1BJTyBiYW5rIHNpemVzICovCisjZGVmaW5lIEVYWU5PUzRfR1BJT19BMF9OUgkoOCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0ExX05SCSg2KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fQl9OUgkoOCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0MwX05SCSg1KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fQzFfTlIJKDUpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19EMF9OUgkoNCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0QxX05SCSg0KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fRTBfTlIJKDUpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19FMV9OUgkoOCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0UyX05SCSg2KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fRTNfTlIJKDgpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19FNF9OUgkoOCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0YwX05SCSg4KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fRjFfTlIJKDgpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19GMl9OUgkoOCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0YzX05SCSg2KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fSjBfTlIJKDgpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19KMV9OUgkoNSkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0swX05SCSg3KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fSzFfTlIJKDcpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19LMl9OUgkoNykKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0szX05SCSg3KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fTDBfTlIJKDgpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19MMV9OUgkoMykKKyNkZWZpbmUgRVhZTk9TNF9HUElPX0wyX05SCSg4KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fWDBfTlIJKDgpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19YMV9OUgkoOCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX1gyX05SCSg4KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fWDNfTlIJKDgpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19ZMF9OUgkoNikKKyNkZWZpbmUgRVhZTk9TNF9HUElPX1kxX05SCSg0KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fWTJfTlIJKDYpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19ZM19OUgkoOCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX1k0X05SCSg4KQorI2RlZmluZSBFWFlOT1M0X0dQSU9fWTVfTlIJKDgpCisjZGVmaW5lIEVYWU5PUzRfR1BJT19ZNl9OUgkoOCkKKyNkZWZpbmUgRVhZTk9TNF9HUElPX1pfTlIJKDcpCisKKy8qIEdQSU8gYmFuayBudW1iZXJzICovCisKKyNkZWZpbmUgRVhZTk9TNF9HUElPX05FWFQoX19ncGlvKSBcCisJKChfX2dwaW8jI19TVEFSVCkgKyAoX19ncGlvIyNfTlIpICsgQ09ORklHX1MzQ19HUElPX1NQQUNFICsgMSkKKworZW51bSBzNXBfZ3Bpb19udW1iZXIgeworCUVYWU5PUzRfR1BJT19BMF9TVEFSVAk9IDAsCisJRVhZTk9TNF9HUElPX0ExX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0EwKSwKKwlFWFlOT1M0X0dQSU9fQl9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19BMSksCisJRVhZTk9TNF9HUElPX0MwX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0IpLAorCUVYWU5PUzRfR1BJT19DMV9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19DMCksCisJRVhZTk9TNF9HUElPX0QwX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0MxKSwKKwlFWFlOT1M0X0dQSU9fRDFfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fRDApLAorCUVYWU5PUzRfR1BJT19FMF9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19EMSksCisJRVhZTk9TNF9HUElPX0UxX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0UwKSwKKwlFWFlOT1M0X0dQSU9fRTJfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fRTEpLAorCUVYWU5PUzRfR1BJT19FM19TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19FMiksCisJRVhZTk9TNF9HUElPX0U0X1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0UzKSwKKwlFWFlOT1M0X0dQSU9fRjBfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fRTQpLAorCUVYWU5PUzRfR1BJT19GMV9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19GMCksCisJRVhZTk9TNF9HUElPX0YyX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0YxKSwKKwlFWFlOT1M0X0dQSU9fRjNfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fRjIpLAorCUVYWU5PUzRfR1BJT19KMF9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19GMyksCisJRVhZTk9TNF9HUElPX0oxX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0owKSwKKwlFWFlOT1M0X0dQSU9fSzBfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fSjEpLAorCUVYWU5PUzRfR1BJT19LMV9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19LMCksCisJRVhZTk9TNF9HUElPX0syX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0sxKSwKKwlFWFlOT1M0X0dQSU9fSzNfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fSzIpLAorCUVYWU5PUzRfR1BJT19MMF9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19LMyksCisJRVhZTk9TNF9HUElPX0wxX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX0wwKSwKKwlFWFlOT1M0X0dQSU9fTDJfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fTDEpLAorCUVYWU5PUzRfR1BJT19YMF9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19MMiksCisJRVhZTk9TNF9HUElPX1gxX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX1gwKSwKKwlFWFlOT1M0X0dQSU9fWDJfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fWDEpLAorCUVYWU5PUzRfR1BJT19YM19TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19YMiksCisJRVhZTk9TNF9HUElPX1kwX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX1gzKSwKKwlFWFlOT1M0X0dQSU9fWTFfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fWTApLAorCUVYWU5PUzRfR1BJT19ZMl9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19ZMSksCisJRVhZTk9TNF9HUElPX1kzX1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX1kyKSwKKwlFWFlOT1M0X0dQSU9fWTRfU1RBUlQJPSBFWFlOT1M0X0dQSU9fTkVYVChFWFlOT1M0X0dQSU9fWTMpLAorCUVYWU5PUzRfR1BJT19ZNV9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19ZNCksCisJRVhZTk9TNF9HUElPX1k2X1NUQVJUCT0gRVhZTk9TNF9HUElPX05FWFQoRVhZTk9TNF9HUElPX1k1KSwKKwlFWFlOT1M0X0dQSU9fWl9TVEFSVAk9IEVYWU5PUzRfR1BJT19ORVhUKEVYWU5PUzRfR1BJT19ZNiksCit9OworCisvKiBFWFlOT1M0IEdQSU8gbnVtYmVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIEVYWU5PUzRfR1BBMChfbnIpCShFWFlOT1M0X0dQSU9fQTBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUEExKF9ucikJKEVYWU5PUzRfR1BJT19BMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQQihfbnIpCShFWFlOT1M0X0dQSU9fQl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQQzAoX25yKQkoRVhZTk9TNF9HUElPX0MwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BDMShfbnIpCShFWFlOT1M0X0dQSU9fQzFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUEQwKF9ucikJKEVYWU5PUzRfR1BJT19EMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQRDEoX25yKQkoRVhZTk9TNF9HUElPX0QxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BFMChfbnIpCShFWFlOT1M0X0dQSU9fRTBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUEUxKF9ucikJKEVYWU5PUzRfR1BJT19FMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQRTIoX25yKQkoRVhZTk9TNF9HUElPX0UyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BFMyhfbnIpCShFWFlOT1M0X0dQSU9fRTNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUEU0KF9ucikJKEVYWU5PUzRfR1BJT19FNF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQRjAoX25yKQkoRVhZTk9TNF9HUElPX0YwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BGMShfbnIpCShFWFlOT1M0X0dQSU9fRjFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUEYyKF9ucikJKEVYWU5PUzRfR1BJT19GMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQRjMoX25yKQkoRVhZTk9TNF9HUElPX0YzX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BKMChfbnIpCShFWFlOT1M0X0dQSU9fSjBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUEoxKF9ucikJKEVYWU5PUzRfR1BJT19KMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQSzAoX25yKQkoRVhZTk9TNF9HUElPX0swX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BLMShfbnIpCShFWFlOT1M0X0dQSU9fSzFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUEsyKF9ucikJKEVYWU5PUzRfR1BJT19LMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQSzMoX25yKQkoRVhZTk9TNF9HUElPX0szX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BMMChfbnIpCShFWFlOT1M0X0dQSU9fTDBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUEwxKF9ucikJKEVYWU5PUzRfR1BJT19MMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQTDIoX25yKQkoRVhZTk9TNF9HUElPX0wyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BYMChfbnIpCShFWFlOT1M0X0dQSU9fWDBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUFgxKF9ucikJKEVYWU5PUzRfR1BJT19YMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQWDIoX25yKQkoRVhZTk9TNF9HUElPX1gyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BYMyhfbnIpCShFWFlOT1M0X0dQSU9fWDNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUFkwKF9ucikJKEVYWU5PUzRfR1BJT19ZMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQWTEoX25yKQkoRVhZTk9TNF9HUElPX1kxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BZMihfbnIpCShFWFlOT1M0X0dQSU9fWTJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUFkzKF9ucikJKEVYWU5PUzRfR1BJT19ZM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQWTQoX25yKQkoRVhZTk9TNF9HUElPX1k0X1NUQVJUICsgKF9ucikpCisjZGVmaW5lIEVYWU5PUzRfR1BZNShfbnIpCShFWFlOT1M0X0dQSU9fWTVfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgRVhZTk9TNF9HUFk2KF9ucikJKEVYWU5PUzRfR1BJT19ZNl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBFWFlOT1M0X0dQWihfbnIpCShFWFlOT1M0X0dQSU9fWl9TVEFSVCArIChfbnIpKQorCisvKiB0aGUgZW5kIG9mIHRoZSBFWFlOT1M0IHNwZWNpZmljIGdwaW9zICovCisjZGVmaW5lIEVYWU5PUzRfR1BJT19FTkQJKEVYWU5PUzRfR1BaKEVYWU5PUzRfR1BJT19aX05SKSArIDEpCisjZGVmaW5lIFMzQ19HUElPX0VORAkJRVhZTk9TNF9HUElPX0VORAorCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBncGlvcyB3ZSBuZWVkIHRvIHRoZSBvbmUgYWZ0ZXIgdGhlIEdQWigpIHJhbmdlICovCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCShFWFlOT1M0X0dQWihFWFlOT1M0X0dQSU9fWl9OUikgKwlcCisJCQkJIENPTkZJR19TQU1TVU5HX0dQSU9fRVhUUkEgKyAxKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZW5kaWYgLyogX19BU01fQVJDSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCAyOGZmOTg4Li41MTA5ZWIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xLDkgKzEsOSBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgotICogUzVQVjMxMCAtIEhhcmR3YXJlIHN1cHBvcnQKKyAqIEVYWU5PUzQgLSBIYXJkd2FyZSBzdXBwb3J0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2lvLmgKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pby5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggOGE3ZjkxMi4uZDU0NzhkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMSwxMyArMSwxMyBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pby5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2lvLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgogICogQ29weXJpZ2h0IDIwMDgtMjAxMCBCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CiAgKgogICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9pby5oCiAgKgotICogRGVmYXVsdCBJTyByb3V0aW5lcyBmb3IgUzVQVjMxMAorICogRGVmYXVsdCBJTyByb3V0aW5lcyBmb3IgRVhZTk9TNAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2lycXMuaApzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lycXMuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggNTM2YjBiNS4uNWQwMzczMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lycXMuaAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9pcnFzLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgotICogUzVQVjMxMCAtIElSUSBkZWZpbml0aW9ucworICogRVhZTk9TNCAtIElSUSBkZWZpbml0aW9ucwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtODUsNiArODUsOSBAQAogI2RlZmluZSBJUlFfUlRDX0FMQVJNCQlDT01CSU5FUl9JUlEoMjMsIDApCiAjZGVmaW5lIElSUV9SVENfVElDCQlDT01CSU5FUl9JUlEoMjMsIDEpCiAKKyNkZWZpbmUgSVJRX0dQSU9fWEIJCUNPTUJJTkVSX0lSUSgyNCwgMCkKKyNkZWZpbmUgSVJRX0dQSU9fWEEJCUNPTUJJTkVSX0lSUSgyNCwgMSkKKwogI2RlZmluZSBJUlFfVUFSVDAJCUNPTUJJTkVSX0lSUSgyNiwgMCkKICNkZWZpbmUgSVJRX1VBUlQxCQlDT01CSU5FUl9JUlEoMjYsIDEpCiAjZGVmaW5lIElSUV9VQVJUMgkJQ09NQklORVJfSVJRKDI2LCAyKQpAQCAtMTA4LDYgKzExMSwxMSBAQAogI2RlZmluZSBJUlFfTUlQSV9DU0lTMAkJQ09NQklORVJfSVJRKDMwLCAwKQogI2RlZmluZSBJUlFfTUlQSV9DU0lTMQkJQ09NQklORVJfSVJRKDMwLCAxKQogCisjZGVmaW5lIElSUV9GSU1DMAkJQ09NQklORVJfSVJRKDMyLCAwKQorI2RlZmluZSBJUlFfRklNQzEJCUNPTUJJTkVSX0lSUSgzMiwgMSkKKyNkZWZpbmUgSVJRX0ZJTUMyCQlDT01CSU5FUl9JUlEoMzMsIDApCisjZGVmaW5lIElSUV9GSU1DMwkJQ09NQklORVJfSVJRKDMzLCAxKQorCiAjZGVmaW5lIElSUV9PTkVOQU5EX0FVREkJQ09NQklORVJfSVJRKDM0LCAwKQogCiAjZGVmaW5lIElSUV9NQ1RfTDEJCUNPTUJJTkVSX0lSUSgzNSwgMykKQEAgLTEzMSw2ICsxMzksNyBAQAogI2RlZmluZSBJUlFfTUNUX0wwCQlDT01CSU5FUl9JUlEoNTEsIDApCiAKICNkZWZpbmUgSVJRX1dEVAkJCUNPTUJJTkVSX0lSUSg1MywgMCkKKyNkZWZpbmUgSVJRX01DVF9HMAkJQ09NQklORVJfSVJRKDUzLCA0KQogCiAjZGVmaW5lIE1BWF9DT01CSU5FUl9OUgkJNTQKIApAQCAtMTM5LDggKzE0OCwxMyBAQAogI2RlZmluZSBTNVBfRUlOVF9CQVNFMQkJKFM1UF9JUlFfRUlOVF9CQVNFICsgMCkKICNkZWZpbmUgUzVQX0VJTlRfQkFTRTIJCShTNVBfSVJRX0VJTlRfQkFTRSArIDE2KQogCi0vKiBTZXQgdGhlIGRlZmF1bHQgTlJfSVJRUyAqLworLyogb3B0aW9uYWwgR1BJTyBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFM1UF9HUElPSU5UX0JBU0UJKFM1UF9JUlFfRUlOVF9CQVNFICsgMzIpCisjZGVmaW5lIElSUV9HUElPMV9OUl9HUk9VUFMJMTYKKyNkZWZpbmUgSVJRX0dQSU8yX05SX0dST1VQUwk5CisjZGVmaW5lIElSUV9HUElPX0VORAkJKFM1UF9HUElPSU5UX0JBU0UgKyBTNVBfR1BJT0lOVF9DT1VOVCkKIAotI2RlZmluZSBOUl9JUlFTCQkJKFM1UF9JUlFfRUlOVF9CQVNFICsgMzIpCisvKiBTZXQgdGhlIGRlZmF1bHQgTlJfSVJRUyAqLworI2RlZmluZSBOUl9JUlFTCQkJKElSUV9HUElPX0VORCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzMwYjczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMCwwICsxLDE2MiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9tYXAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBFWFlOT1M0IC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NQVBfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgorCisvKgorICogRVhZTk9TNCBVQVJUIG9mZnNldCBpcyAweDEwMDAwIGJ1dCB0aGUgb2xkZXIgUzVQIFNvQ3MgYXJlIDB4NDAwLgorICogU28gbmVlZCB0byBkZWZpbmUgaXQsIGFuZCBoZXJlIGlzIHRvIGF2b2lkIHJlZGVmaW5pdGlvbiB3YXJuaW5nLgorICovCisjZGVmaW5lIFMzQ19VQVJUX09GRlNFVAkJCSgweDEwMDAwKQorCisjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CisKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNSQU0JCTB4MDIwMjAwMDAKKworI2RlZmluZSBFWFlOT1M0X1BBX0ZJTUMwCQkweDExODAwMDAwCisjZGVmaW5lIEVYWU5PUzRfUEFfRklNQzEJCTB4MTE4MTAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9GSU1DMgkJMHgxMTgyMDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX0ZJTUMzCQkweDExODMwMDAwCisKKyNkZWZpbmUgRVhZTk9TNF9QQV9JMlMwCQkJMHgwMzgzMDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX0kyUzEJCQkweEUzMTAwMDAwCisjZGVmaW5lIEVYWU5PUzRfUEFfSTJTMgkJCTB4RTJBMDAwMDAKKworI2RlZmluZSBFWFlOT1M0X1BBX1BDTTAJCQkweDAzODQwMDAwCisjZGVmaW5lIEVYWU5PUzRfUEFfUENNMQkJCTB4MTM5ODAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9QQ00yCQkJMHgxMzk5MDAwMAorCisjZGVmaW5lIEVYWU5PUzRfUEFfU1JPTV9CQU5LKHgpCQkoMHgwNDAwMDAwMCArICgoeCkgKiAweDAxMDAwMDAwKSkKKworI2RlZmluZSBFWFlOT1M0X1BBX09ORU5BTkQJCTB4MEMwMDAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9PTkVOQU5EX0RNQQkJMHgwQzYwMDAwMAorCisjZGVmaW5lIEVYWU5PUzRfUEFfQ0hJUElECQkweDEwMDAwMDAwCisKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNDT04JCTB4MTAwMTAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9QTVUJCQkweDEwMDIwMDAwCisjZGVmaW5lIEVYWU5PUzRfUEFfQ01VCQkJMHgxMDAzMDAwMAorCisjZGVmaW5lIEVYWU5PUzRfUEFfU1lTVElNRVIJCTB4MTAwNTAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9XQVRDSERPRwkJMHgxMDA2MDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX1JUQwkJCTB4MTAwNzAwMDAKKworI2RlZmluZSBFWFlOT1M0X1BBX0tFWVBBRAkJMHgxMDBBMDAwMAorCisjZGVmaW5lIEVYWU5PUzRfUEFfRE1DMAkJCTB4MTA0MDAwMDAKKworI2RlZmluZSBFWFlOT1M0X1BBX0NPTUJJTkVSCQkweDEwNDQ4MDAwCisKKyNkZWZpbmUgRVhZTk9TNF9QQV9DT1JFUEVSSQkJMHgxMDUwMDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX0dJQ19DUFUJCTB4MTA1MDAxMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9UV0QJCQkweDEwNTAwNjAwCisjZGVmaW5lIEVYWU5PUzRfUEFfR0lDX0RJU1QJCTB4MTA1MDEwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9MMkNDCQkJMHgxMDUwMjAwMAorCisjZGVmaW5lIEVYWU5PUzRfUEFfTURNQQkJCTB4MTA4MTAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9QRE1BMAkJMHgxMjY4MDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX1BETUExCQkweDEyNjkwMDAwCisKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfTURNQQkJMHgxMEE0MDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX1NZU01NVV9TU1MJCTB4MTBBNTAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfRklNQzAJCTB4MTFBMjAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfRklNQzEJCTB4MTFBMzAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfRklNQzIJCTB4MTFBNDAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfRklNQzMJCTB4MTFBNTAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfSlBFRwkJMHgxMUE2MDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX1NZU01NVV9GSU1EMAkJMHgxMUUyMDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX1NZU01NVV9GSU1EMQkJMHgxMjIyMDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX1NZU01NVV9QQ0llCQkweDEyNjIwMDAwCisjZGVmaW5lIEVYWU5PUzRfUEFfU1lTTU1VX0cyRAkJMHgxMkEyMDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX1NZU01NVV9ST1RBVE9SCTB4MTJBMzAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfTURNQTIJCTB4MTJBNDAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfVFYJCTB4MTJFMjAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfTUZDX0wJCTB4MTM2MjAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9TWVNNTVVfTUZDX1IJCTB4MTM2MzAwMDAKKworI2RlZmluZSBFWFlOT1M0X1BBX0dQSU8xCQkweDExNDAwMDAwCisjZGVmaW5lIEVYWU5PUzRfUEFfR1BJTzIJCTB4MTEwMDAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9HUElPMwkJMHgwMzg2MDAwMAorCisjZGVmaW5lIEVYWU5PUzRfUEFfTUlQSV9DU0lTMAkJMHgxMTg4MDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX01JUElfQ1NJUzEJCTB4MTE4OTAwMDAKKworI2RlZmluZSBFWFlOT1M0X1BBX0hTTU1DKHgpCQkoMHgxMjUxMDAwMCArICgoeCkgKiAweDEwMDAwKSkKKworI2RlZmluZSBFWFlOT1M0X1BBX1NBVEEJCQkweDEyNTYwMDAwCisjZGVmaW5lIEVYWU5PUzRfUEFfU0FUQVBIWQkJMHgxMjVEMDAwMAorI2RlZmluZSBFWFlOT1M0X1BBX1NBVEFQSFlfQ1RSTAkJMHgxMjZCMDAwMAorCisjZGVmaW5lIEVYWU5PUzRfUEFfU1JPTUMJCTB4MTI1NzAwMDAKKworI2RlZmluZSBFWFlOT1M0X1BBX1VBUlQJCQkweDEzODAwMDAwCisKKyNkZWZpbmUgRVhZTk9TNF9QQV9JSUMoeCkJCSgweDEzODYwMDAwICsgKCh4KSAqIDB4MTAwMDApKQorCisjZGVmaW5lIEVYWU5PUzRfUEFfQUM5NwkJCTB4MTM5QTAwMDAKKworI2RlZmluZSBFWFlOT1M0X1BBX1NQRElGCQkweDEzOUIwMDAwCisKKyNkZWZpbmUgRVhZTk9TNF9QQV9USU1FUgkJMHgxMzlEMDAwMAorCisjZGVmaW5lIEVYWU5PUzRfUEFfU0RSQU0JCTB4NDAwMDAwMDAKKworLyogQ29tcGF0aWJpbHRpeSBEZWZpbmVzICovCisKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJCUVYWU5PUzRfUEFfSFNNTUMoMCkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJCUVYWU5PUzRfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJCUVYWU5PUzRfUEFfSFNNTUMoMikKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMwkJCUVYWU5PUzRfUEFfSFNNTUMoMykKKyNkZWZpbmUgUzNDX1BBX0lJQwkJCUVYWU5PUzRfUEFfSUlDKDApCisjZGVmaW5lIFMzQ19QQV9JSUMxCQkJRVhZTk9TNF9QQV9JSUMoMSkKKyNkZWZpbmUgUzNDX1BBX0lJQzIJCQlFWFlOT1M0X1BBX0lJQygyKQorI2RlZmluZSBTM0NfUEFfSUlDMwkJCUVYWU5PUzRfUEFfSUlDKDMpCisjZGVmaW5lIFMzQ19QQV9JSUM0CQkJRVhZTk9TNF9QQV9JSUMoNCkKKyNkZWZpbmUgUzNDX1BBX0lJQzUJCQlFWFlOT1M0X1BBX0lJQyg1KQorI2RlZmluZSBTM0NfUEFfSUlDNgkJCUVYWU5PUzRfUEFfSUlDKDYpCisjZGVmaW5lIFMzQ19QQV9JSUM3CQkJRVhZTk9TNF9QQV9JSUMoNykKKyNkZWZpbmUgUzNDX1BBX1JUQwkJCUVYWU5PUzRfUEFfUlRDCisjZGVmaW5lIFMzQ19QQV9XRFQJCQlFWFlOT1M0X1BBX1dBVENIRE9HCisKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJCUVYWU5PUzRfUEFfQ0hJUElECisjZGVmaW5lIFM1UF9QQV9GSU1DMAkJCUVYWU5PUzRfUEFfRklNQzAKKyNkZWZpbmUgUzVQX1BBX0ZJTUMxCQkJRVhZTk9TNF9QQV9GSU1DMQorI2RlZmluZSBTNVBfUEFfRklNQzIJCQlFWFlOT1M0X1BBX0ZJTUMyCisjZGVmaW5lIFM1UF9QQV9GSU1DMwkJCUVYWU5PUzRfUEFfRklNQzMKKyNkZWZpbmUgUzVQX1BBX01JUElfQ1NJUzAJCUVYWU5PUzRfUEFfTUlQSV9DU0lTMAorI2RlZmluZSBTNVBfUEFfTUlQSV9DU0lTMQkJRVhZTk9TNF9QQV9NSVBJX0NTSVMxCisjZGVmaW5lIFM1UF9QQV9PTkVOQU5ECQkJRVhZTk9TNF9QQV9PTkVOQU5ECisjZGVmaW5lIFM1UF9QQV9PTkVOQU5EX0RNQQkJRVhZTk9TNF9QQV9PTkVOQU5EX0RNQQorI2RlZmluZSBTNVBfUEFfU0RSQU0JCQlFWFlOT1M0X1BBX1NEUkFNCisjZGVmaW5lIFM1UF9QQV9TUk9NQwkJCUVYWU5PUzRfUEFfU1JPTUMKKyNkZWZpbmUgUzVQX1BBX1NZU0NPTgkJCUVYWU5PUzRfUEFfU1lTQ09OCisjZGVmaW5lIFM1UF9QQV9USU1FUgkJCUVYWU5PUzRfUEFfVElNRVIKKworI2RlZmluZSBTQU1TVU5HX1BBX0tFWVBBRAkJRVhZTk9TNF9QQV9LRVlQQUQKKworLyogVUFSVCAqLworCisjZGVmaW5lIFMzQ19QQV9VQVJUCQkJRVhZTk9TNF9QQV9VQVJUCisKKyNkZWZpbmUgUzVQX1BBX1VBUlQoeCkJCQkoUzNDX1BBX1VBUlQgKyAoKHgpICogUzNDX1VBUlRfT0ZGU0VUKSkKKyNkZWZpbmUgUzVQX1BBX1VBUlQwCQkJUzVQX1BBX1VBUlQoMCkKKyNkZWZpbmUgUzVQX1BBX1VBUlQxCQkJUzVQX1BBX1VBUlQoMSkKKyNkZWZpbmUgUzVQX1BBX1VBUlQyCQkJUzVQX1BBX1VBUlQoMikKKyNkZWZpbmUgUzVQX1BBX1VBUlQzCQkJUzVQX1BBX1VBUlQoMykKKyNkZWZpbmUgUzVQX1BBX1VBUlQ0CQkJUzVQX1BBX1VBUlQoNCkKKworI2RlZmluZSBTNVBfU1pfVUFSVAkJCVNaXzI1NgorCisjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA0NzBiMDFiLi4zNzRlZjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL21lbW9yeS5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKLSAqIFM1UFYzMTAgLSBNZW1vcnkgZGVmaW5pdGlvbnMKKyAqIEVYWU5PUzQgLSBNZW1vcnkgZGVmaW5pdGlvbnMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcG0tY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9wbS1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2ZTQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcG0tY29yZS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcG0tY29yZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcG0tY29yZS5oLAorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBFWFlOT1M0MjEwIC0gUE0gY29yZSBzdXBwb3J0IGZvciBhcmNoL2FybS9wbGF0LXM1cC9wbS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisjaW5jbHVkZSA8bWFjaC9yZWdzLXBtdS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2RlYnVnX2luaXRfdWFydCh2b2lkKQoreworCS8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9hcmNoX3ByZXBhcmVfaXJxcyh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXA7CisJdG1wID0gX19yYXdfcmVhZGwoUzVQX1dBS0VVUF9NQVNLKTsKKwl0bXAgJj0gfigxIDw8IDMxKTsKKwlfX3Jhd193cml0ZWwodG1wLCBTNVBfV0FLRVVQX01BU0spOworCisJX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2ludG1hc2ssIFM1UF9XQUtFVVBfTUFTSyk7CisJX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBTNVBfRUlOVF9XQUtFVVBfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zdG9wX2Nsb2Nrcyh2b2lkKQoreworCS8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9hcmNoX3Nob3dfcmVzdW1lX2lycXModm9pZCkKK3sKKwkvKiBub3RoaW5nIGhlcmUgeWV0ICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF91cGRhdGVfdWFydCh2b2lkIF9faW9tZW0gKnJlZ3MsCisJCQkJCSAgIHN0cnVjdCBwbV91YXJ0X3NhdmUgKnNhdmUpCit7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaAppbmRleCA3ZTZkYTI3Li44ZTEyMDkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKQEAgLTEsNyArMSw3IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKICAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKQEAgLTEwLDcgKzEwLDcgQEAKICAqCiAgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCiAgKgotICogUzVQVjMxMCAtIHB3bSBjbG9jayBhbmQgdGltZXIgc3VwcG9ydAorICogRVhZTk9TNCAtIHB3bSBjbG9jayBhbmQgdGltZXIgc3VwcG9ydAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKaW5kZXggYjVjNGFkYS4uNmUzMTFjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgotICogUzVQVjMxMCAtIENsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKiBFWFlOT1M0IC0gQ2xvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE3LDEzICsxNywxMyBAQAogCiAjZGVmaW5lIFM1UF9DTEtSRUcoeCkJCQkoUzVQX1ZBX0NNVSArICh4KSkKIAotI2RlZmluZSBTNVBfSU5GT1JNMAkJCVM1UF9DTEtSRUcoMHg4MDApCi0KICNkZWZpbmUgUzVQX0NMS0RJVl9MRUZUQlVTCQlTNVBfQ0xLUkVHKDB4MDQ1MDApCiAjZGVmaW5lIFM1UF9DTEtESVZfU1RBVF9MRUZUQlVTCQlTNVBfQ0xLUkVHKDB4MDQ2MDApCisjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX0xFRlRCVVMJCVM1UF9DTEtSRUcoMHgwNDgwMCkKIAogI2RlZmluZSBTNVBfQ0xLRElWX1JJR0hUQlVTCQlTNVBfQ0xLUkVHKDB4MDg1MDApCiAjZGVmaW5lIFM1UF9DTEtESVZfU1RBVF9SSUdIVEJVUwlTNVBfQ0xLUkVHKDB4MDg2MDApCisjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX1JJR0hUQlVTCQlTNVBfQ0xLUkVHKDB4MDg4MDApCiAKICNkZWZpbmUgUzVQX0VQTExfQ09OMAkJCVM1UF9DTEtSRUcoMHgwQzExMCkKICNkZWZpbmUgUzVQX0VQTExfQ09OMQkJCVM1UF9DTEtSRUcoMHgwQzExNCkKQEAgLTMzLDE4ICszMywyNCBAQAogI2RlZmluZSBTNVBfQ0xLU1JDX1RPUDAJCQlTNVBfQ0xLUkVHKDB4MEMyMTApCiAjZGVmaW5lIFM1UF9DTEtTUkNfVE9QMQkJCVM1UF9DTEtSRUcoMHgwQzIxNCkKICNkZWZpbmUgUzVQX0NMS1NSQ19DQU0JCQlTNVBfQ0xLUkVHKDB4MEMyMjApCisjZGVmaW5lIFM1UF9DTEtTUkNfTUZDCQkJUzVQX0NMS1JFRygweDBDMjI4KQogI2RlZmluZSBTNVBfQ0xLU1JDX0lNQUdFCQlTNVBfQ0xLUkVHKDB4MEMyMzApCiAjZGVmaW5lIFM1UF9DTEtTUkNfTENEMAkJCVM1UF9DTEtSRUcoMHgwQzIzNCkKICNkZWZpbmUgUzVQX0NMS1NSQ19MQ0QxCQkJUzVQX0NMS1JFRygweDBDMjM4KQorI2RlZmluZSBTNVBfQ0xLU1JDX01BVURJTwkJUzVQX0NMS1JFRygweDBDMjNDKQogI2RlZmluZSBTNVBfQ0xLU1JDX0ZTWVMJCQlTNVBfQ0xLUkVHKDB4MEMyNDApCiAjZGVmaW5lIFM1UF9DTEtTUkNfUEVSSUwwCQlTNVBfQ0xLUkVHKDB4MEMyNTApCiAjZGVmaW5lIFM1UF9DTEtTUkNfUEVSSUwxCQlTNVBfQ0xLUkVHKDB4MEMyNTQpCiAKICNkZWZpbmUgUzVQX0NMS0RJVl9UT1AJCQlTNVBfQ0xLUkVHKDB4MEM1MTApCiAjZGVmaW5lIFM1UF9DTEtESVZfQ0FNCQkJUzVQX0NMS1JFRygweDBDNTIwKQorI2RlZmluZSBTNVBfQ0xLRElWX1RWCQkJUzVQX0NMS1JFRygweDBDNTI0KQorI2RlZmluZSBTNVBfQ0xLRElWX01GQwkJCVM1UF9DTEtSRUcoMHgwQzUyOCkKKyNkZWZpbmUgUzVQX0NMS0RJVl9HM0QJCQlTNVBfQ0xLUkVHKDB4MEM1MkMpCiAjZGVmaW5lIFM1UF9DTEtESVZfSU1BR0UJCVM1UF9DTEtSRUcoMHgwQzUzMCkKICNkZWZpbmUgUzVQX0NMS0RJVl9MQ0QwCQkJUzVQX0NMS1JFRygweDBDNTM0KQogI2RlZmluZSBTNVBfQ0xLRElWX0xDRDEJCQlTNVBfQ0xLUkVHKDB4MEM1MzgpCisjZGVmaW5lIFM1UF9DTEtESVZfTUFVRElPCQlTNVBfQ0xLUkVHKDB4MEM1M0MpCiAjZGVmaW5lIFM1UF9DTEtESVZfRlNZUzAJCVM1UF9DTEtSRUcoMHgwQzU0MCkKICNkZWZpbmUgUzVQX0NMS0RJVl9GU1lTMQkJUzVQX0NMS1JFRygweDBDNTQ0KQogI2RlZmluZSBTNVBfQ0xLRElWX0ZTWVMyCQlTNVBfQ0xLUkVHKDB4MEM1NDgpCkBAIC01OCwyNSArNjQsMzYgQEAKIAogI2RlZmluZSBTNVBfQ0xLU1JDX01BU0tfVE9QCQlTNVBfQ0xLUkVHKDB4MEMzMTApCiAjZGVmaW5lIFM1UF9DTEtTUkNfTUFTS19DQU0JCVM1UF9DTEtSRUcoMHgwQzMyMCkKKyNkZWZpbmUgUzVQX0NMS1NSQ19NQVNLX1RWCQlTNVBfQ0xLUkVHKDB4MEMzMjQpCiAjZGVmaW5lIFM1UF9DTEtTUkNfTUFTS19MQ0QwCQlTNVBfQ0xLUkVHKDB4MEMzMzQpCiAjZGVmaW5lIFM1UF9DTEtTUkNfTUFTS19MQ0QxCQlTNVBfQ0xLUkVHKDB4MEMzMzgpCisjZGVmaW5lIFM1UF9DTEtTUkNfTUFTS19NQVVESU8JCVM1UF9DTEtSRUcoMHgwQzMzQykKICNkZWZpbmUgUzVQX0NMS1NSQ19NQVNLX0ZTWVMJCVM1UF9DTEtSRUcoMHgwQzM0MCkKICNkZWZpbmUgUzVQX0NMS1NSQ19NQVNLX1BFUklMMAkJUzVQX0NMS1JFRygweDBDMzUwKQogI2RlZmluZSBTNVBfQ0xLU1JDX01BU0tfUEVSSUwxCQlTNVBfQ0xLUkVHKDB4MEMzNTQpCiAKICNkZWZpbmUgUzVQX0NMS0RJVl9TVEFUX1RPUAkJUzVQX0NMS1JFRygweDBDNjEwKQogCisjZGVmaW5lIFM1UF9DTEtHQVRFX1NDTEtDQU0JCVM1UF9DTEtSRUcoMHgwQzgyMCkKICNkZWZpbmUgUzVQX0NMS0dBVEVfSVBfQ0FNCQlTNVBfQ0xLUkVHKDB4MEM5MjApCisjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX1RWCQlTNVBfQ0xLUkVHKDB4MEM5MjQpCisjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX01GQwkJUzVQX0NMS1JFRygweDBDOTI4KQorI2RlZmluZSBTNVBfQ0xLR0FURV9JUF9HM0QJCVM1UF9DTEtSRUcoMHgwQzkyQykKICNkZWZpbmUgUzVQX0NMS0dBVEVfSVBfSU1BR0UJCVM1UF9DTEtSRUcoMHgwQzkzMCkKICNkZWZpbmUgUzVQX0NMS0dBVEVfSVBfTENEMAkJUzVQX0NMS1JFRygweDBDOTM0KQogI2RlZmluZSBTNVBfQ0xLR0FURV9JUF9MQ0QxCQlTNVBfQ0xLUkVHKDB4MEM5MzgpCiAjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX0ZTWVMJCVM1UF9DTEtSRUcoMHgwQzk0MCkKKyNkZWZpbmUgUzVQX0NMS0dBVEVfSVBfR1BTCQlTNVBfQ0xLUkVHKDB4MEM5NEMpCiAjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX1BFUklMCQlTNVBfQ0xLUkVHKDB4MEM5NTApCiAjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX1BFUklSCQlTNVBfQ0xLUkVHKDB4MEM5NjApCisjZGVmaW5lIFM1UF9DTEtHQVRFX0JMT0NLCQlTNVBfQ0xLUkVHKDB4MEM5NzApCiAKKyNkZWZpbmUgUzVQX0NMS1NSQ19NQVNLX0RNQwkJUzVQX0NMS1JFRygweDEwMzAwKQogI2RlZmluZSBTNVBfQ0xLU1JDX0RNQwkJCVM1UF9DTEtSRUcoMHgxMDIwMCkKICNkZWZpbmUgUzVQX0NMS0RJVl9ETUMwCQkJUzVQX0NMS1JFRygweDEwNTAwKQorI2RlZmluZSBTNVBfQ0xLRElWX0RNQzEJCQlTNVBfQ0xLUkVHKDB4MTA1MDQpCiAjZGVmaW5lIFM1UF9DTEtESVZfU1RBVF9ETUMwCQlTNVBfQ0xLUkVHKDB4MTA2MDApCisjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX0RNQwkJUzVQX0NMS1JFRygweDEwOTAwKQogCiAjZGVmaW5lIFM1UF9BUExMX0xPQ0sJCQlTNVBfQ0xLUkVHKDB4MTQwMDApCiAjZGVmaW5lIFM1UF9NUExMX0xPQ0sJCQlTNVBfQ0xLUkVHKDB4MTQwMDQpCkBAIC05NCwyMSArMTExLDE4IEBACiAjZGVmaW5lIFM1UF9DTEtESVZfU1RBVENQVTEJCVM1UF9DTEtSRUcoMHgxNDYwNCkKIAogI2RlZmluZSBTNVBfQ0xLR0FURV9TQ0xLQ1BVCQlTNVBfQ0xLUkVHKDB4MTQ4MDApCisjZGVmaW5lIFM1UF9DTEtHQVRFX0lQX0NQVQkJUzVQX0NMS1JFRygweDE0OTAwKQogCi0vKiBBUExMX0xPQ0sgKi8KICNkZWZpbmUgUzVQX0FQTExfTE9DS1RJTUUJCSgweDFDMjApCS8qIDMwMHVzICovCiAKLS8qIEFQTExfQ09OMCAqLwogI2RlZmluZSBTNVBfQVBMTENPTjBfRU5BQkxFX1NISUZUCSgzMSkKICNkZWZpbmUgUzVQX0FQTExDT04wX0xPQ0tFRF9TSElGVAkoMjkpCiAjZGVmaW5lIFM1UF9BUExMX1ZBTF8xMDAwCQkoKDI1MCA8PCAxNikgfCAoNiA8PCA4KSB8IDEpCiAjZGVmaW5lIFM1UF9BUExMX1ZBTF84MDAJCSgoMjAwIDw8IDE2KSB8ICg2IDw8IDgpIHwgMSkKIAotLyogQ0xLX1NSQ19DUFUgKi8KICNkZWZpbmUgUzVQX0NMS1NSQ19DUFVfTVVYQ09SRV9TSElGVAkoMTYpCiAjZGVmaW5lIFM1UF9DTEtNVVhfU1RBVENQVV9NVVhDT1JFX01BU0sJKDB4NyA8PCBTNVBfQ0xLU1JDX0NQVV9NVVhDT1JFX1NISUZUKQogCi0vKiBDTEtESVZfQ1BVMCAqLwogI2RlZmluZSBTNVBfQ0xLRElWX0NQVTBfQ09SRV9TSElGVAkoMCkKICNkZWZpbmUgUzVQX0NMS0RJVl9DUFUwX0NPUkVfTUFTSwkoMHg3IDw8IFM1UF9DTEtESVZfQ1BVMF9DT1JFX1NISUZUKQogI2RlZmluZSBTNVBfQ0xLRElWX0NQVTBfQ09SRU0wX1NISUZUCSg0KQpAQCAtMTI0LDcgKzEzOCw2IEBACiAjZGVmaW5lIFM1UF9DTEtESVZfQ1BVMF9BUExMX1NISUZUCSgyNCkKICNkZWZpbmUgUzVQX0NMS0RJVl9DUFUwX0FQTExfTUFTSwkoMHg3IDw8IFM1UF9DTEtESVZfQ1BVMF9BUExMX1NISUZUKQogCi0vKiBDTEtESVZfRE1DMCAqLwogI2RlZmluZSBTNVBfQ0xLRElWX0RNQzBfQUNQX1NISUZUCSgwKQogI2RlZmluZSBTNVBfQ0xLRElWX0RNQzBfQUNQX01BU0sJKDB4NyA8PCBTNVBfQ0xLRElWX0RNQzBfQUNQX1NISUZUKQogI2RlZmluZSBTNVBfQ0xLRElWX0RNQzBfQUNQUENMS19TSElGVAkoNCkKQEAgLTE0Miw3ICsxNTUsNiBAQAogI2RlZmluZSBTNVBfQ0xLRElWX0RNQzBfQ09SRVRJX1NISUZUCSgyOCkKICNkZWZpbmUgUzVQX0NMS0RJVl9ETUMwX0NPUkVUSV9NQVNLCSgweDcgPDwgUzVQX0NMS0RJVl9ETUMwX0NPUkVUSV9TSElGVCkKIAotLyogQ0xLRElWX1RPUCAqLwogI2RlZmluZSBTNVBfQ0xLRElWX1RPUF9BQ0xLMjAwX1NISUZUCSgwKQogI2RlZmluZSBTNVBfQ0xLRElWX1RPUF9BQ0xLMjAwX01BU0sJKDB4NyA8PCBTNVBfQ0xLRElWX1RPUF9BQ0xLMjAwX1NISUZUKQogI2RlZmluZSBTNVBfQ0xLRElWX1RPUF9BQ0xLMTAwX1NISUZUCSg0KQpAQCAtMTU0LDEzICsxNjYsMTQgQEAKICNkZWZpbmUgUzVQX0NMS0RJVl9UT1BfT05FTkFORF9TSElGVAkoMTYpCiAjZGVmaW5lIFM1UF9DTEtESVZfVE9QX09ORU5BTkRfTUFTSwkoMHg3IDw8IFM1UF9DTEtESVZfVE9QX09ORU5BTkRfU0hJRlQpCiAKLS8qIENMS0RJVl9MRUZUQlVTIC8gQ0xLRElWX1JJR0hUQlVTKi8KICNkZWZpbmUgUzVQX0NMS0RJVl9CVVNfR0RMUl9TSElGVAkoMCkKICNkZWZpbmUgUzVQX0NMS0RJVl9CVVNfR0RMUl9NQVNLCSgweDcgPDwgUzVQX0NMS0RJVl9CVVNfR0RMUl9TSElGVCkKICNkZWZpbmUgUzVQX0NMS0RJVl9CVVNfR1BMUl9TSElGVAkoNCkKICNkZWZpbmUgUzVQX0NMS0RJVl9CVVNfR1BMUl9NQVNLCSgweDcgPDwgUzVQX0NMS0RJVl9CVVNfR1BMUl9TSElGVCkKIAotLyogQ29tcGF0aWJpbGl0eSBkZWZpbmVzICovCisvKiBDb21wYXRpYmlsaXR5IGRlZmluZXMgYW5kIGluY2x1c2lvbiAqLworCisjaW5jbHVkZSA8bWFjaC9yZWdzLXBtdS5oPgogCiAjZGVmaW5lIFM1UF9FUExMX0NPTgkJCVM1UF9FUExMX0NPTjAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwMWIyMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKQEAgLTAsMCArMSw0MiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIEVYWU5PUzQgLSBHUElPIChpbmNsdWRpbmcgRUlOVCkgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19HUElPX0ggX19GSUxFX18KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKKyNkZWZpbmUgRVhZTk9TNF9FSU5UNDBDT04JCShTNVBfVkFfR1BJTzIgKyAweEUwMCkKKyNkZWZpbmUgUzVQX0VJTlRfQ09OKHgpCQkJKEVYWU5PUzRfRUlOVDQwQ09OICsgKCh4KSAqIDB4NCkpCisKKyNkZWZpbmUgRVhZTk9TNF9FSU5UNDBGTFRDT04wCQkoUzVQX1ZBX0dQSU8yICsgMHhFODApCisjZGVmaW5lIFM1UF9FSU5UX0ZMVENPTih4KQkJKEVYWU5PUzRfRUlOVDQwRkxUQ09OMCArICgoeCkgKiAweDQpKQorCisjZGVmaW5lIEVYWU5PUzRfRUlOVDQwTUFTSwkJKFM1UF9WQV9HUElPMiArIDB4RjAwKQorI2RlZmluZSBTNVBfRUlOVF9NQVNLKHgpCQkoRVhZTk9TNF9FSU5UNDBNQVNLICsgKCh4KSAqIDB4NCkpCisKKyNkZWZpbmUgRVhZTk9TNF9FSU5UNDBQRU5ECQkoUzVQX1ZBX0dQSU8yICsgMHhGNDApCisjZGVmaW5lIFM1UF9FSU5UX1BFTkQoeCkJCShFWFlOT1M0X0VJTlQ0MFBFTkQgKyAoKHgpICogMHg0KSkKKworI2RlZmluZSBFSU5UX1JFR19OUih4KQkJCShFSU5UX09GRlNFVCh4KSA+PiAzKQorCisjZGVmaW5lIGVpbnRfaXJxX3RvX2JpdChpcnEpCQkoMSA8PCAoRUlOVF9PRkZTRVQoaXJxKSAmIDB4NykpCisKKyNkZWZpbmUgRUlOVF9NT0RFCQkJUzNDX0dQSU9fU0ZOKDB4ZikKKworI2RlZmluZSBFSU5UX0dQSU9fMCh4KQkJCUVYWU5PUzRfR1BYMCh4KQorI2RlZmluZSBFSU5UX0dQSU9fMSh4KQkJCUVYWU5PUzRfR1BYMSh4KQorI2RlZmluZSBFSU5UX0dQSU9fMih4KQkJCUVYWU5PUzRfR1BYMih4KQorI2RlZmluZSBFSU5UX0dQSU9fMyh4KQkJCUVYWU5PUzRfR1BYMyh4KQorCisjZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCnNpbWlsYXJpdHkgaW5kZXggNjYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCmluZGV4IGM2ZTA5YzcuLjljN2I0YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCi0gKiBTNVBWMzEwIC0gSVJRIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKiBFWFlOT1M0IC0gSVJRIHJlZ2lzdGVyIGRlZmluaXRpb25zCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtbWN0LmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtbWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5Yzg0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1tY3QuaApAQCAtMCwwICsxLDUyIEBACisvKiBhcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtbWN0LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TNCBNQ1QgY29uZmlndXRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19NQ1RfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfTUNUX0ggX19GSUxFX18KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNkZWZpbmUgRVhZTk9TNF9NQ1RSRUcoeCkJCShTNVBfVkFfU1lTVElNRVIgKyAoeCkpCisKKyNkZWZpbmUgRVhZTk9TNF9NQ1RfR19DTlRfTAkJRVhZTk9TNF9NQ1RSRUcoMHgxMDApCisjZGVmaW5lIEVYWU5PUzRfTUNUX0dfQ05UX1UJCUVYWU5PUzRfTUNUUkVHKDB4MTA0KQorI2RlZmluZSBFWFlOT1M0X01DVF9HX0NOVF9XU1RBVAkJRVhZTk9TNF9NQ1RSRUcoMHgxMTApCisKKyNkZWZpbmUgRVhZTk9TNF9NQ1RfR19DT01QMF9MCQlFWFlOT1M0X01DVFJFRygweDIwMCkKKyNkZWZpbmUgRVhZTk9TNF9NQ1RfR19DT01QMF9VCQlFWFlOT1M0X01DVFJFRygweDIwNCkKKyNkZWZpbmUgRVhZTk9TNF9NQ1RfR19DT01QMF9BRERfSU5DUglFWFlOT1M0X01DVFJFRygweDIwOCkKKworI2RlZmluZSBFWFlOT1M0X01DVF9HX1RDT04JCUVYWU5PUzRfTUNUUkVHKDB4MjQwKQorCisjZGVmaW5lIEVYWU5PUzRfTUNUX0dfSU5UX0NTVEFUCQlFWFlOT1M0X01DVFJFRygweDI0NCkKKyNkZWZpbmUgRVhZTk9TNF9NQ1RfR19JTlRfRU5CCQlFWFlOT1M0X01DVFJFRygweDI0OCkKKyNkZWZpbmUgRVhZTk9TNF9NQ1RfR19XU1RBVAkJRVhZTk9TNF9NQ1RSRUcoMHgyNEMpCisKKyNkZWZpbmUgRVhZTk9TNF9NQ1RfTDBfQkFTRQkJRVhZTk9TNF9NQ1RSRUcoMHgzMDApCisjZGVmaW5lIEVYWU5PUzRfTUNUX0wxX0JBU0UJCUVYWU5PUzRfTUNUUkVHKDB4NDAwKQorCisjZGVmaW5lIE1DVF9MX1RDTlRCX09GRlNFVAkJKDB4MDApCisjZGVmaW5lIE1DVF9MX0lDTlRCX09GRlNFVAkJKDB4MDgpCisjZGVmaW5lIE1DVF9MX1RDT05fT0ZGU0VUCQkoMHgyMCkKKyNkZWZpbmUgTUNUX0xfSU5UX0NTVEFUX09GRlNFVAkJKDB4MzApCisjZGVmaW5lIE1DVF9MX0lOVF9FTkJfT0ZGU0VUCQkoMHgzNCkKKyNkZWZpbmUgTUNUX0xfV1NUQVRfT0ZGU0VUCQkoMHg0MCkKKworI2RlZmluZSBNQ1RfR19UQ09OX1NUQVJUCQkoMSA8PCA4KQorI2RlZmluZSBNQ1RfR19UQ09OX0NPTVAwX0FVVE9fSU5DCSgxIDw8IDEpCisjZGVmaW5lIE1DVF9HX1RDT05fQ09NUDBfRU5BQkxFCQkoMSA8PCAwKQorCisjZGVmaW5lIE1DVF9MX1RDT05fSU5URVJWQUxfTU9ERQkoMSA8PCAyKQorI2RlZmluZSBNQ1RfTF9UQ09OX0lOVF9TVEFSVAkJKDEgPDwgMSkKKyNkZWZpbmUgTUNUX0xfVENPTl9USU1FUl9TVEFSVAkJKDEgPDwgMCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19NQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1tZW0uaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oCmluZGV4IDgzNDIyNzEuLjAzNjhiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1tZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtbWVtLmgKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtbWVtLmgKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1tZW0uaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgotICogUzVQVjMxMCAtIFNST01DIGFuZCBETUMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqIEVYWU5PUzQgLSBTUk9NQyBhbmQgRE1DIHJlZ2lzdGVyIGRlZmluaXRpb25zCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtcG11LmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiMDAxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1wbXUuaApAQCAtMCwwICsxLDE2MiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXBtdS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TNCAtIFBvd2VyIG1hbmFnZW1lbnQgdW5pdCBkZWZpbml0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1BNVV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19QTVVfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2RlZmluZSBTNVBfUE1VUkVHKHgpCQkJCShTNVBfVkFfUE1VICsgKHgpKQorCisjZGVmaW5lIFM1UF9DRU5UUkFMX1NFUV9DT05GSUdVUkFUSU9OCQlTNVBfUE1VUkVHKDB4MDIwMCkKKworI2RlZmluZSBTNVBfQ0VOVFJBTF9MT1dQV1JfQ0ZHCQkJKDEgPDwgMTYpCisKKyNkZWZpbmUgUzVQX0NFTlRSQUxfU0VRX09QVElPTgkJCVM1UF9QTVVSRUcoMHgwMjA4KQorCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkkwCQkJKDEgPDwgMTYpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkkxCQkJKDEgPDwgMTcpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkUwCQkJKDEgPDwgMjQpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkUxCQkJKDEgPDwgMjUpCisjZGVmaW5lIFM1UF9VU0VfTUFTSwkJCQkoKDB4MyA8PCAxNikgfCAoMHgzIDw8IDI0KSkKKworI2RlZmluZSBTNVBfV0FLRVVQX1NUQVQJCQkJUzVQX1BNVVJFRygweDA2MDApCisjZGVmaW5lIFM1UF9FSU5UX1dBS0VVUF9NQVNLCQkJUzVQX1BNVVJFRygweDA2MDQpCisjZGVmaW5lIFM1UF9XQUtFVVBfTUFTSwkJCQlTNVBfUE1VUkVHKDB4MDYwOCkKKworI2RlZmluZSBTNVBfTUlQSV9EUEhZX0NPTlRST0wobikJCVM1UF9QTVVSRUcoMHgwNzEwICsgKG4pICogNCkKKyNkZWZpbmUgUzVQX01JUElfRFBIWV9FTkFCTEUJCQkoMSA8PCAwKQorI2RlZmluZSBTNVBfTUlQSV9EUEhZX1NSRVNFVE4JCQkoMSA8PCAxKQorI2RlZmluZSBTNVBfTUlQSV9EUEhZX01SRVNFVE4JCQkoMSA8PCAyKQorCisjZGVmaW5lIFM1UF9QTVVfU0FUQV9QSFlfQ09OVFJPTAkJUzVQX1BNVVJFRygweDA3MjApCisjZGVmaW5lIFM1UF9JTkZPUk0wCQkJCVM1UF9QTVVSRUcoMHgwODAwKQorI2RlZmluZSBTNVBfSU5GT1JNMQkJCQlTNVBfUE1VUkVHKDB4MDgwNCkKKyNkZWZpbmUgUzVQX0lORk9STTIJCQkJUzVQX1BNVVJFRygweDA4MDgpCisjZGVmaW5lIFM1UF9JTkZPUk0zCQkJCVM1UF9QTVVSRUcoMHgwODBDKQorI2RlZmluZSBTNVBfSU5GT1JNNAkJCQlTNVBfUE1VUkVHKDB4MDgxMCkKKyNkZWZpbmUgUzVQX0lORk9STTUJCQkJUzVQX1BNVVJFRygweDA4MTQpCisjZGVmaW5lIFM1UF9JTkZPUk02CQkJCVM1UF9QTVVSRUcoMHgwODE4KQorI2RlZmluZSBTNVBfSU5GT1JNNwkJCQlTNVBfUE1VUkVHKDB4MDgxQykKKworI2RlZmluZSBTNVBfQVJNX0NPUkUwX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMDAwKQorI2RlZmluZSBTNVBfRElTX0lSUV9DT1JFMAkJCVM1UF9QTVVSRUcoMHgxMDA0KQorI2RlZmluZSBTNVBfRElTX0lSUV9DRU5UUkFMMAkJCVM1UF9QTVVSRUcoMHgxMDA4KQorI2RlZmluZSBTNVBfQVJNX0NPUkUxX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMDEwKQorI2RlZmluZSBTNVBfRElTX0lSUV9DT1JFMQkJCVM1UF9QTVVSRUcoMHgxMDE0KQorI2RlZmluZSBTNVBfRElTX0lSUV9DRU5UUkFMMQkJCVM1UF9QTVVSRUcoMHgxMDE4KQorI2RlZmluZSBTNVBfQVJNX0NPTU1PTl9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTA4MCkKKyNkZWZpbmUgUzVQX0wyXzBfTE9XUFdSCQkJCVM1UF9QTVVSRUcoMHgxMEMwKQorI2RlZmluZSBTNVBfTDJfMV9MT1dQV1IJCQkJUzVQX1BNVVJFRygweDEwQzQpCisjZGVmaW5lIFM1UF9DTVVfQUNMS1NUT1BfTE9XUFdSCQkJUzVQX1BNVVJFRygweDExMDApCisjZGVmaW5lIFM1UF9DTVVfU0NMS1NUT1BfTE9XUFdSCQkJUzVQX1BNVVJFRygweDExMDQpCisjZGVmaW5lIFM1UF9DTVVfUkVTRVRfTE9XUFdSCQkJUzVQX1BNVVJFRygweDExMEMpCisjZGVmaW5lIFM1UF9BUExMX1NZU0NMS19MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTEyMCkKKyNkZWZpbmUgUzVQX01QTExfU1lTQ0xLX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMTI0KQorI2RlZmluZSBTNVBfVlBMTF9TWVNDTEtfTE9XUFdSCQkJUzVQX1BNVVJFRygweDExMjgpCisjZGVmaW5lIFM1UF9FUExMX1NZU0NMS19MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTEyQykKKyNkZWZpbmUgUzVQX0NNVV9DTEtTVE9QX0dQU19BTElWRV9MT1dQV1IJUzVQX1BNVVJFRygweDExMzgpCisjZGVmaW5lIFM1UF9DTVVfUkVTRVRfR1BTQUxJVkVfTE9XUFdSCQlTNVBfUE1VUkVHKDB4MTEzQykKKyNkZWZpbmUgUzVQX0NNVV9DTEtTVE9QX0NBTV9MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMTQwKQorI2RlZmluZSBTNVBfQ01VX0NMS1NUT1BfVFZfTE9XUFdSCQlTNVBfUE1VUkVHKDB4MTE0NCkKKyNkZWZpbmUgUzVQX0NNVV9DTEtTVE9QX01GQ19MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMTQ4KQorI2RlZmluZSBTNVBfQ01VX0NMS1NUT1BfRzNEX0xPV1BXUgkJUzVQX1BNVVJFRygweDExNEMpCisjZGVmaW5lIFM1UF9DTVVfQ0xLU1RPUF9MQ0QwX0xPV1BXUgkJUzVQX1BNVVJFRygweDExNTApCisjZGVmaW5lIFM1UF9DTVVfQ0xLU1RPUF9MQ0QxX0xPV1BXUgkJUzVQX1BNVVJFRygweDExNTQpCisjZGVmaW5lIFM1UF9DTVVfQ0xLU1RPUF9NQVVESU9fTE9XUFdSCQlTNVBfUE1VUkVHKDB4MTE1OCkKKyNkZWZpbmUgUzVQX0NNVV9DTEtTVE9QX0dQU19MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMTVDKQorI2RlZmluZSBTNVBfQ01VX1JFU0VUX0NBTV9MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMTYwKQorI2RlZmluZSBTNVBfQ01VX1JFU0VUX1RWX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMTY0KQorI2RlZmluZSBTNVBfQ01VX1JFU0VUX01GQ19MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMTY4KQorI2RlZmluZSBTNVBfQ01VX1JFU0VUX0czRF9MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMTZDKQorI2RlZmluZSBTNVBfQ01VX1JFU0VUX0xDRDBfTE9XUFdSCQlTNVBfUE1VUkVHKDB4MTE3MCkKKyNkZWZpbmUgUzVQX0NNVV9SRVNFVF9MQ0QxX0xPV1BXUgkJUzVQX1BNVVJFRygweDExNzQpCisjZGVmaW5lIFM1UF9DTVVfUkVTRVRfTUFVRElPX0xPV1BXUgkJUzVQX1BNVVJFRygweDExNzgpCisjZGVmaW5lIFM1UF9DTVVfUkVTRVRfR1BTX0xPV1BXUgkJUzVQX1BNVVJFRygweDExN0MpCisjZGVmaW5lIFM1UF9UT1BfQlVTX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMTgwKQorI2RlZmluZSBTNVBfVE9QX1JFVEVOVElPTl9MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMTg0KQorI2RlZmluZSBTNVBfVE9QX1BXUl9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTE4OCkKKyNkZWZpbmUgUzVQX0xPR0lDX1JFU0VUX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMUEwKQorI2RlZmluZSBTNVBfT05FTkFORF9NRU1fTE9XUFdSCQkJUzVQX1BNVVJFRygweDExQzApCisjZGVmaW5lIFM1UF9NT0RJTUlGX01FTV9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTFDNCkKKyNkZWZpbmUgUzVQX0cyRF9BQ1BfTUVNX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMUM4KQorI2RlZmluZSBTNVBfVVNCT1RHX01FTV9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTFDQykKKyNkZWZpbmUgUzVQX0hTTU1DX01FTV9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTFEMCkKKyNkZWZpbmUgUzVQX0NTU1lTX01FTV9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTFENCkKKyNkZWZpbmUgUzVQX1NFQ1NTX01FTV9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTFEOCkKKyNkZWZpbmUgUzVQX1BDSUVfTUVNX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMUUwKQorI2RlZmluZSBTNVBfU0FUQV9NRU1fTE9XUFdSCQkJUzVQX1BNVVJFRygweDExRTQpCisjZGVmaW5lIFM1UF9QQURfUkVURU5USU9OX0RSQU1fTE9XUFdSCQlTNVBfUE1VUkVHKDB4MTIwMCkKKyNkZWZpbmUgUzVQX1BBRF9SRVRFTlRJT05fTUFVRElPX0xPV1BXUgkJUzVQX1BNVVJFRygweDEyMDQpCisjZGVmaW5lIFM1UF9QQURfUkVURU5USU9OX0dQSU9fTE9XUFdSCQlTNVBfUE1VUkVHKDB4MTIyMCkKKyNkZWZpbmUgUzVQX1BBRF9SRVRFTlRJT05fVUFSVF9MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMjI0KQorI2RlZmluZSBTNVBfUEFEX1JFVEVOVElPTl9NTUNBX0xPV1BXUgkJUzVQX1BNVVJFRygweDEyMjgpCisjZGVmaW5lIFM1UF9QQURfUkVURU5USU9OX01NQ0JfTE9XUFdSCQlTNVBfUE1VUkVHKDB4MTIyQykKKyNkZWZpbmUgUzVQX1BBRF9SRVRFTlRJT05fRUJJQV9MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMjMwKQorI2RlZmluZSBTNVBfUEFEX1JFVEVOVElPTl9FQklCX0xPV1BXUgkJUzVQX1BNVVJFRygweDEyMzQpCisjZGVmaW5lIFM1UF9QQURfUkVURU5USU9OX0lTT0xBVElPTl9MT1dQV1IJUzVQX1BNVVJFRygweDEyNDApCisjZGVmaW5lIFM1UF9QQURfUkVURU5USU9OX0FMVl9TRUxfTE9XUFdSCVM1UF9QTVVSRUcoMHgxMjYwKQorI2RlZmluZSBTNVBfWFVTQlhUSV9MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTI4MCkKKyNkZWZpbmUgUzVQX1hYVElfTE9XUFdSCQkJCVM1UF9QTVVSRUcoMHgxMjg0KQorI2RlZmluZSBTNVBfRVhUX1JFR1VMQVRPUl9MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMkMwKQorI2RlZmluZSBTNVBfR1BJT19NT0RFX0xPV1BXUgkJCVM1UF9QTVVSRUcoMHgxMzAwKQorI2RlZmluZSBTNVBfR1BJT19NT0RFX01BVURJT19MT1dQV1IJCVM1UF9QTVVSRUcoMHgxMzQwKQorI2RlZmluZSBTNVBfQ0FNX0xPV1BXUgkJCQlTNVBfUE1VUkVHKDB4MTM4MCkKKyNkZWZpbmUgUzVQX1RWX0xPV1BXUgkJCQlTNVBfUE1VUkVHKDB4MTM4NCkKKyNkZWZpbmUgUzVQX01GQ19MT1dQV1IJCQkJUzVQX1BNVVJFRygweDEzODgpCisjZGVmaW5lIFM1UF9HM0RfTE9XUFdSCQkJCVM1UF9QTVVSRUcoMHgxMzhDKQorI2RlZmluZSBTNVBfTENEMF9MT1dQV1IJCQkJUzVQX1BNVVJFRygweDEzOTApCisjZGVmaW5lIFM1UF9MQ0QxX0xPV1BXUgkJCQlTNVBfUE1VUkVHKDB4MTM5NCkKKyNkZWZpbmUgUzVQX01BVURJT19MT1dQV1IJCQlTNVBfUE1VUkVHKDB4MTM5OCkKKyNkZWZpbmUgUzVQX0dQU19MT1dQV1IJCQkJUzVQX1BNVVJFRygweDEzOUMpCisjZGVmaW5lIFM1UF9HUFNfQUxJVkVfTE9XUFdSCQkJUzVQX1BNVVJFRygweDEzQTApCisKKyNkZWZpbmUgUzVQX0FSTV9DT1JFMF9DT05GSUdVUkFUSU9OCQlTNVBfUE1VUkVHKDB4MjAwMCkKKyNkZWZpbmUgUzVQX0FSTV9DT1JFMF9PUFRJT04JCQlTNVBfUE1VUkVHKDB4MjAwOCkKKyNkZWZpbmUgUzVQX0FSTV9DT1JFMV9DT05GSUdVUkFUSU9OCQlTNVBfUE1VUkVHKDB4MjA4MCkKKyNkZWZpbmUgUzVQX0FSTV9DT1JFMV9TVEFUVVMJCQlTNVBfUE1VUkVHKDB4MjA4NCkKKyNkZWZpbmUgUzVQX0FSTV9DT1JFMV9PUFRJT04JCQlTNVBfUE1VUkVHKDB4MjA4OCkKKworI2RlZmluZSBTNVBfQVJNX0NPTU1PTl9PUFRJT04JCQlTNVBfUE1VUkVHKDB4MjQwOCkKKyNkZWZpbmUgUzVQX1RPUF9QV1JfT1BUSU9OCQkJUzVQX1BNVVJFRygweDJDNDgpCisjZGVmaW5lIFM1UF9DQU1fT1BUSU9OCQkJCVM1UF9QTVVSRUcoMHgzQzA4KQorI2RlZmluZSBTNVBfVFZfT1BUSU9OCQkJCVM1UF9QTVVSRUcoMHgzQzI4KQorI2RlZmluZSBTNVBfTUZDX09QVElPTgkJCQlTNVBfUE1VUkVHKDB4M0M0OCkKKyNkZWZpbmUgUzVQX0czRF9PUFRJT04JCQkJUzVQX1BNVVJFRygweDNDNjgpCisjZGVmaW5lIFM1UF9MQ0QwX09QVElPTgkJCQlTNVBfUE1VUkVHKDB4M0M4OCkKKyNkZWZpbmUgUzVQX0xDRDFfT1BUSU9OCQkJCVM1UF9QTVVSRUcoMHgzQ0E4KQorI2RlZmluZSBTNVBfTUFVRElPX09QVElPTgkJCVM1UF9QTVVSRUcoMHgzQ0M4KQorI2RlZmluZSBTNVBfR1BTX09QVElPTgkJCQlTNVBfUE1VUkVHKDB4M0NFOCkKKyNkZWZpbmUgUzVQX0dQU19BTElWRV9PUFRJT04JCQlTNVBfUE1VUkVHKDB4M0QwOCkKKworI2RlZmluZSBTNVBfUEFEX1JFVF9NQVVESU9fT1BUSU9OCQlTNVBfUE1VUkVHKDB4MzAyOCkKKyNkZWZpbmUgUzVQX1BBRF9SRVRfR1BJT19PUFRJT04JCQlTNVBfUE1VUkVHKDB4MzEwOCkKKyNkZWZpbmUgUzVQX1BBRF9SRVRfVUFSVF9PUFRJT04JCQlTNVBfUE1VUkVHKDB4MzEyOCkKKyNkZWZpbmUgUzVQX1BBRF9SRVRfTU1DQV9PUFRJT04JCQlTNVBfUE1VUkVHKDB4MzE0OCkKKyNkZWZpbmUgUzVQX1BBRF9SRVRfTU1DQl9PUFRJT04JCQlTNVBfUE1VUkVHKDB4MzE2OCkKKyNkZWZpbmUgUzVQX1BBRF9SRVRfRUJJQV9PUFRJT04JCQlTNVBfUE1VUkVHKDB4MzE4OCkKKyNkZWZpbmUgUzVQX1BBRF9SRVRfRUJJQl9PUFRJT04JCQlTNVBfUE1VUkVHKDB4MzFBOCkKKworI2RlZmluZSBTNVBfUE1VX0NBTV9DT05GCQkJUzVQX1BNVVJFRygweDNDMDApCisjZGVmaW5lIFM1UF9QTVVfVFZfQ09ORgkJCQlTNVBfUE1VUkVHKDB4M0MyMCkKKyNkZWZpbmUgUzVQX1BNVV9NRkNfQ09ORgkJCVM1UF9QTVVSRUcoMHgzQzQwKQorI2RlZmluZSBTNVBfUE1VX0czRF9DT05GCQkJUzVQX1BNVVJFRygweDNDNjApCisjZGVmaW5lIFM1UF9QTVVfTENEMF9DT05GCQkJUzVQX1BNVVJFRygweDNDODApCisjZGVmaW5lIFM1UF9QTVVfTENEMV9DT05GCQkJUzVQX1BNVVJFRygweDNDQTApCisjZGVmaW5lIFM1UF9QTVVfR1BTX0NPTkYJCQlTNVBfUE1VUkVHKDB4M0NFMCkKKworI2RlZmluZSBTNVBfUE1VX1NBVEFfUEhZX0NPTlRST0xfRU4JCTB4MQorI2RlZmluZSBTNVBfSU5UX0xPQ0FMX1BXUl9FTgkJCTB4NworCisjZGVmaW5lIFM1UF9DSEVDS19TTEVFUAkJCQkweDAwMDAwQkFECisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfUE1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1zeXNtbXUuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1zeXNtbXUuaApzaW1pbGFyaXR5IGluZGV4IDY2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3Mtc3lzbW11LmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1zeXNtbXUuaAppbmRleCAwYjI4ZTgxLi42OGZmNmFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3Mtc3lzbW11LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXN5c21tdS5oCkBAIC0xLDkgKzEsOSBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9yZWdzLXN5c21tdS5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3Mtc3lzbW11LmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKLSAqIFM1UFYzMTAgLSBTeXN0ZW0gTU1VIHJlZ2lzdGVyCisgKiBFWFlOT1M0IC0gU3lzdGVtIE1NVSByZWdpc3RlcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTksNiArMTksMTAgQEAKICNkZWZpbmUgUzVQX01NVV9GTFVTSAkJCTB4MDBDCiAjZGVmaW5lIFM1UF9QVF9CQVNFX0FERFIJCTB4MDE0CiAjZGVmaW5lIFM1UF9JTlRfU1RBVFVTCQkJMHgwMTgKKyNkZWZpbmUgUzVQX0lOVF9DTEVBUgkJCTB4MDFDCiAjZGVmaW5lIFM1UF9QQUdFX0ZBVUxUX0FERFIJCTB4MDI0CisjZGVmaW5lIFM1UF9BV19GQVVMVF9BRERSCQkweDAyOAorI2RlZmluZSBTNVBfQVJfRkFVTFRfQUREUgkJMHgwMkMKKyNkZWZpbmUgUzVQX0RFRkFVTFRfU0xBVkVfQUREUgkJMHgwMzAKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19TWVNNTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zbXAuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvc21wLmgKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zbXAuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9zbXAuaAppbmRleCAzOTNjY2JkLi5hNDYzZGNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3NtcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3NtcC5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3NtcC5oCiAgKgogICogQ2xvbmVkIGZyb20gYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc21wLmgKICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3N5c21tdS5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9zeXNtbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVmYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9zeXNtbXUuaApAQCAtMCwwICsxLDQ2IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3N5c21tdS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogU2Ftc3VuZyBzeXNtbXUgZHJpdmVyIGZvciBFWFlOT1M0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfU1lTTU1VX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfU1lTTU1VX0ggX19GSUxFX18KKworZW51bSBleHlub3M0X3N5c21tdV9pcHMgeworCVNZU01NVV9NRE1BLAorCVNZU01NVV9TU1MsCisJU1lTTU1VX0ZJTUMwLAorCVNZU01NVV9GSU1DMSwKKwlTWVNNTVVfRklNQzIsCisJU1lTTU1VX0ZJTUMzLAorCVNZU01NVV9KUEVHLAorCVNZU01NVV9GSU1EMCwKKwlTWVNNTVVfRklNRDEsCisJU1lTTU1VX1BDSWUsCisJU1lTTU1VX0cyRCwKKwlTWVNNTVVfUk9UQVRPUiwKKwlTWVNNTVVfTURNQTIsCisJU1lTTU1VX1RWLAorCVNZU01NVV9NRkNfTCwKKwlTWVNNTVVfTUZDX1IsCisJRVhZTk9TNF9TWVNNTVVfVE9UQUxfSVBOVU0sCit9OworCisjZGVmaW5lIFM1UF9TWVNNTVVfVE9UQUxfSVBOVU0JCUVYWU5PUzRfU1lTTU1VX1RPVEFMX0lQTlVNCisKK2V4dGVybiBjb25zdCBjaGFyICpzeXNtbXVfaXBzX25hbWVbRVhZTk9TNF9TWVNNTVVfVE9UQUxfSVBOVU1dOworCit0eXBlZGVmIGVudW0gZXh5bm9zNF9zeXNtbXVfaXBzIHN5c21tdV9pcHM7CisKK3ZvaWQgc3lzbW11X2Nsa19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3lzbW11X2lwcyBpcHMpOwordm9pZCBzeXNtbXVfY2xrX2VuYWJsZShzeXNtbXVfaXBzIGlwcyk7Cit2b2lkIHN5c21tdV9jbGtfZGlzYWJsZShzeXNtbXVfaXBzIGlwcyk7CisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fQVJDSF9TWVNNTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBkMTBjMDA5Li41ZTMyMjBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKLSAqIFM1UFYzMTAgLSBzeXN0ZW0gc3VwcG9ydCBoZWFkZXIKKyAqIEVYWU5PUzQgLSBzeXN0ZW0gc3VwcG9ydCBoZWFkZXIKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvdGltZXguaApzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCBiZDIzNTliLi42ZDEzODc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xLDE0ICsxLDE0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvdGltZXguaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3RpbWV4LmgKICAqCi0gKiBTNVBWMzEwIC0gdGltZSBwYXJhbWV0ZXJzCisgKiBFWFlOT1M0IC0gdGltZSBwYXJhbWV0ZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCA1OTU5M2MxLi4yMWQ5N2JjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMSw5ICsxLDkgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCi0gKiBTNVBWMzEwIC0gdW5jb21wcmVzcyBjb2RlCisgKiBFWFlOT1M0IC0gdW5jb21wcmVzcyBjb2RlCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCnNpbWlsYXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA2NTc1OWZiLi4yODQzMzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMSw3ICsxLDcgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCiAgKiBDb3B5cmlnaHQgMjAxMCBCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CiAgKgpAQCAtMTEsNyArMTEsNyBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqIFM1UFYzMTAgdm1hbGxvYyBkZWZpbml0aW9uCisgKiBFWFlOT1M0IHZtYWxsb2MgZGVmaW5pdGlvbgogKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luaXQuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbml0LmMKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luaXQuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2luaXQuYwppbmRleCAxODJkY2Y0Li5jZjkxZjUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5pdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbml0LmMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5pdC5jCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5pdC5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyBzNXB2MzEwX3NlcmlhbF9jbG9ja3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyBleHlub3M0X3NlcmlhbF9jbG9ja3NbXSA9IHsKIAlbMF0gPSB7CiAJCS5uYW1lCQk9ICJ1Y2xrMSIsCiAJCS5kaXZpc29yCT0gMSwKQEAgLTI0LDcgKzI0LDcgQEAKIH07CiAKIC8qIHVhcnQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgKi8KLXZvaWQgX19pbml0IHM1cHYzMTBfY29tbW9uX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCit2b2lkIF9faW5pdCBleHlub3M0X2NvbW1vbl9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKQogewogCXN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKnRjZmcgPSBjZmc7CiAJdTMyIHVjbnQ7CkBAIC0zMiw4ICszMiw4IEBACiAJZm9yICh1Y250ID0gMDsgdWNudCA8IG5vOyB1Y250KyssIHRjZmcrKykgewogCQlpZiAoIXRjZmctPmNsb2NrcykgewogCQkJdGNmZy0+aGFzX2ZyYWN2YWwgPSAxOwotCQkJdGNmZy0+Y2xvY2tzID0gczVwdjMxMF9zZXJpYWxfY2xvY2tzOwotCQkJdGNmZy0+Y2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKHM1cHYzMTBfc2VyaWFsX2Nsb2Nrcyk7CisJCQl0Y2ZnLT5jbG9ja3MgPSBleHlub3M0X3NlcmlhbF9jbG9ja3M7CisJCQl0Y2ZnLT5jbG9ja3Nfc2l6ZSA9IEFSUkFZX1NJWkUoZXh5bm9zNF9zZXJpYWxfY2xvY2tzKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2lycS1jb21iaW5lci5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2lycS1jb21iaW5lci5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9pcnEtY29tYmluZXIuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2lycS1jb21iaW5lci5jCmluZGV4IDFlYTRhOWUuLjMxNjE4ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pcnEtY29tYmluZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaXJxLWNvbWJpbmVyLmMKQEAgLTEsNiArMSw2IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaXJxLWNvbWJpbmVyLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pcnEtY29tYmluZXIuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgogICogQmFzZWQgb24gYXJjaC9hcm0vY29tbW9uL2dpYy5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaXJxLWVpbnQuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pcnEtZWludC5jCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9pcnEtZWludC5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvaXJxLWVpbnQuYwppbmRleCA0NzdiZDllLi40ZjdhZDRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaXJxLWVpbnQuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaXJxLWVpbnQuYwpAQCAtMSw5ICsxLDkgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pcnEtZWludC5jCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvaXJxLWVpbnQuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgotICogUzVQVjMxMCAtIElSUSBFSU5UIHN1cHBvcnQKKyAqIEVYWU5PUzQgLSBJUlEgRUlOVCBzdXBwb3J0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yNyw3ICsyNyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZWludDBfMTVfZGF0YVsxNl07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgczVwdjMxMF9nZXRfaXJxX25yKHVuc2lnbmVkIGludCBudW1iZXIpCitzdGF0aWMgdW5zaWduZWQgaW50IGV4eW5vczRfZ2V0X2lycV9ucih1bnNpZ25lZCBpbnQgbnVtYmVyKQogewogCXUzMiByZXQgPSAwOwogCkBAIC00OCw3ICs0OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHM1cHYzMTBfaXJxX2VpbnRfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgZXh5bm9zNF9pcnFfZWludF9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1MzIgbWFzazsKIApAQCAtNTksNyArNTksNyBAQAogCXNwaW5fdW5sb2NrKCZlaW50X2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBzNXB2MzEwX2lycV9laW50X3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCitzdGF0aWMgdm9pZCBleHlub3M0X2lycV9laW50X3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJdTMyIG1hc2s7CiAKQEAgLTcwLDE5ICs3MCwxOSBAQAogCXNwaW5fdW5sb2NrKCZlaW50X2xvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwdjMxMF9pcnFfZWludF9hY2soc3RydWN0IGlycV9kYXRhICpkYXRhKQorc3RhdGljIGlubGluZSB2b2lkIGV4eW5vczRfaXJxX2VpbnRfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAlfX3Jhd193cml0ZWwoZWludF9pcnFfdG9fYml0KGRhdGEtPmlycSksCiAJCSAgICAgUzVQX0VJTlRfUEVORChFSU5UX1JFR19OUihkYXRhLT5pcnEpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHM1cHYzMTBfaXJxX2VpbnRfbWFza2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCitzdGF0aWMgdm9pZCBleHlub3M0X2lycV9laW50X21hc2thY2soc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCXM1cHYzMTBfaXJxX2VpbnRfbWFzayhkYXRhKTsKLQlzNXB2MzEwX2lycV9laW50X2FjayhkYXRhKTsKKwlleHlub3M0X2lycV9laW50X21hc2soZGF0YSk7CisJZXh5bm9zNF9pcnFfZWludF9hY2soZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgczVwdjMxMF9pcnFfZWludF9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCB0eXBlKQorc3RhdGljIGludCBleHlub3M0X2lycV9laW50X3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJaW50IG9mZnMgPSBFSU5UX09GRlNFVChkYXRhLT5pcnEpOwogCWludCBzaGlmdDsKQEAgLTE0NSwxOSArMTQ1LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczVwdjMxMF9pcnFfZWludCA9IHsKLQkubmFtZQkJPSAiczVwdjMxMC1laW50IiwKLQkuaXJxX21hc2sJPSBzNXB2MzEwX2lycV9laW50X21hc2ssCi0JLmlycV91bm1hc2sJPSBzNXB2MzEwX2lycV9laW50X3VubWFzaywKLQkuaXJxX21hc2tfYWNrCT0gczVwdjMxMF9pcnFfZWludF9tYXNrYWNrLAotCS5pcnFfYWNrCT0gczVwdjMxMF9pcnFfZWludF9hY2ssCi0JLmlycV9zZXRfdHlwZQk9IHM1cHYzMTBfaXJxX2VpbnRfc2V0X3R5cGUsCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGV4eW5vczRfaXJxX2VpbnQgPSB7CisJLm5hbWUJCT0gImV4eW5vczQtZWludCIsCisJLmlycV9tYXNrCT0gZXh5bm9zNF9pcnFfZWludF9tYXNrLAorCS5pcnFfdW5tYXNrCT0gZXh5bm9zNF9pcnFfZWludF91bm1hc2ssCisJLmlycV9tYXNrX2Fjawk9IGV4eW5vczRfaXJxX2VpbnRfbWFza2FjaywKKwkuaXJxX2Fjawk9IGV4eW5vczRfaXJxX2VpbnRfYWNrLAorCS5pcnFfc2V0X3R5cGUJPSBleHlub3M0X2lycV9laW50X3NldF90eXBlLAogI2lmZGVmIENPTkZJR19QTQogCS5pcnFfc2V0X3dha2UJPSBzM2NfaXJxZXh0X3dha2UsCiAjZW5kaWYKIH07CiAKLS8qIHM1cHYzMTBfaXJxX2RlbXV4X2VpbnQKKy8qIGV4eW5vczRfaXJxX2RlbXV4X2VpbnQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGRlbXV4ZXMgdGhlIElSUSBmcm9tIGZyb20gRUlOVHMgMTYgdG8gMzEuCiAgKiBJdCBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmVkIGludG8gdGhlIHNwZWNpZmljIGhhbmRsZXIKQEAgLTE2NSw3ICsxNjUsNyBAQAogICoKICAqIEVhY2ggRUlOVCBwZW5kL21hc2sgcmVnaXN0ZXJzIGhhbmRsZSBlaWdodCBvZiB0aGVtLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwdjMxMF9pcnFfZGVtdXhfZWludCh1bnNpZ25lZCBpbnQgc3RhcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgZXh5bm9zNF9pcnFfZGVtdXhfZWludCh1bnNpZ25lZCBpbnQgc3RhcnQpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKIApAQCAtMTgyLDEzICsxODIsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHM1cHYzMTBfaXJxX2RlbXV4X2VpbnQxNl8zMSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCitzdGF0aWMgdm9pZCBleHlub3M0X2lycV9kZW11eF9laW50MTZfMzEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXM1cHYzMTBfaXJxX2RlbXV4X2VpbnQoSVJRX0VJTlQoMTYpKTsKLQlzNXB2MzEwX2lycV9kZW11eF9laW50KElSUV9FSU5UKDI0KSk7CisJZXh5bm9zNF9pcnFfZGVtdXhfZWludChJUlFfRUlOVCgxNikpOworCWV4eW5vczRfaXJxX2RlbXV4X2VpbnQoSVJRX0VJTlQoMjQpKTsKIH0KIAotc3RhdGljIHZvaWQgczVwdjMxMF9pcnFfZWludDBfMTUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgZXh5bm9zNF9pcnFfZWludDBfMTUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXUzMiAqaXJxX2RhdGEgPSBnZXRfaXJxX2RhdGEoaXJxKTsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXAoaXJxKTsKQEAgLTIwMywyNyArMjAzLDI3IEBACiAJY2hpcC0+aXJxX3VubWFzaygmZGVzYy0+aXJxX2RhdGEpOwogfQogCi1pbnQgX19pbml0IHM1cHYzMTBfaW5pdF9pcnFfZWludCh2b2lkKQoraW50IF9faW5pdCBleHlub3M0X2luaXRfaXJxX2VpbnQodm9pZCkKIHsKIAlpbnQgaXJxOwogCiAJZm9yIChpcnEgPSAwIDsgaXJxIDw9IDMxIDsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwKElSUV9FSU5UKGlycSksICZzNXB2MzEwX2lycV9laW50KTsKKwkJc2V0X2lycV9jaGlwKElSUV9FSU5UKGlycSksICZleHlub3M0X2lycV9laW50KTsKIAkJc2V0X2lycV9oYW5kbGVyKElSUV9FSU5UKGlycSksIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKElSUV9FSU5UKGlycSksIElSUUZfVkFMSUQpOwogCX0KIAotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UMTZfMzEsIHM1cHYzMTBfaXJxX2RlbXV4X2VpbnQxNl8zMSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VJTlQxNl8zMSwgZXh5bm9zNF9pcnFfZGVtdXhfZWludDE2XzMxKTsKIAogCWZvciAoaXJxID0gMCA7IGlycSA8PSAxNSA7IGlycSsrKSB7CiAJCWVpbnQwXzE1X2RhdGFbaXJxXSA9IElSUV9FSU5UKGlycSk7CiAKLQkJc2V0X2lycV9kYXRhKHM1cHYzMTBfZ2V0X2lycV9ucihpcnEpLCAmZWludDBfMTVfZGF0YVtpcnFdKTsKLQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoczVwdjMxMF9nZXRfaXJxX25yKGlycSksCi0JCQkJCXM1cHYzMTBfaXJxX2VpbnQwXzE1KTsKKwkJc2V0X2lycV9kYXRhKGV4eW5vczRfZ2V0X2lycV9ucihpcnEpLCAmZWludDBfMTVfZGF0YVtpcnFdKTsKKwkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoZXh5bm9zNF9nZXRfaXJxX25yKGlycSksCisJCQkJCWV4eW5vczRfaXJxX2VpbnQwXzE1KTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotYXJjaF9pbml0Y2FsbChzNXB2MzEwX2luaXRfaXJxX2VpbnQpOworYXJjaF9pbml0Y2FsbChleHlub3M0X2luaXRfaXJxX2VpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2xvY2FsdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9sb2NhbHRpbWVyLmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2xvY2FsdGltZXIuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L2xvY2FsdGltZXIuYwppbmRleCA4MjM5YzZhLi42YmYzZDBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbG9jYWx0aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9sb2NhbHRpbWVyLmMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbG9jYWx0aW1lci5jCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvbG9jYWx0aW1lci5jCiAgKgogICogQ2xvbmVkIGZyb20gbGludXgvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1hcm1sZXg0MjEwLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1hcm1sZXg0MjEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4MmM2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tYWNoLWFybWxleDQyMTAuYwpAQCAtMCwwICsxLDIxNSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtYXJtbGV4NDIxMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9leHlub3M0Lmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3JvbS5oPgorI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKy8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLworI2RlZmluZSBBUk1MRVg0MjEwX1VDT05fREVGQVVMVAkoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXAorCQkJCSBTM0MyNDEwX1VDT05fUlhJTEVWRUwgfAlcCisJCQkJIFMzQzI0MTBfVUNPTl9UWElSUU1PREUgfAlcCisJCQkJIFMzQzI0MTBfVUNPTl9SWElSUU1PREUgfAlcCisJCQkJIFMzQzI0MTBfVUNPTl9SWEZJRk9fVE9JIHwJXAorCQkJCSBTM0MyNDQzX1VDT05fUlhFUlJfSVJRRU4pCisKKyNkZWZpbmUgQVJNTEVYNDIxMF9VTENPTl9ERUZBVUxUCVMzQzI0MTBfTENPTl9DUzgKKworI2RlZmluZSBBUk1MRVg0MjEwX1VGQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUZDT05fRklGT01PREUgfAlcCisJCQkJIFM1UFYyMTBfVUZDT05fVFhUUklHNCB8CVwKKwkJCQkgUzVQVjIxMF9VRkNPTl9SWFRSSUc0KQorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBhcm1sZXg0MjEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJCT0gMCwKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IEFSTUxFWDQyMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gQVJNTEVYNDIxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gQVJNTEVYNDIxMF9VRkNPTl9ERUZBVUxULAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CQk9IDEsCisJCS5mbGFncwkJPSAwLAorCQkudWNvbgkJPSBBUk1MRVg0MjEwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IEFSTUxFWDQyMTBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IEFSTUxFWDQyMTBfVUZDT05fREVGQVVMVCwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkJPSAyLAorCQkuZmxhZ3MJCT0gMCwKKwkJLnVjb24JCT0gQVJNTEVYNDIxMF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBBUk1MRVg0MjEwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBBUk1MRVg0MjEwX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbM10gPSB7CisJCS5od3BvcnQJCT0gMywKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IEFSTUxFWDQyMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gQVJNTEVYNDIxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gQVJNTEVYNDIxMF9VRkNPTl9ERUZBVUxULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBhcm1sZXg0MjEwX2hzbW1jMF9wZGF0YSBfX2luaXRkYXRhID0geworCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9QRVJNQU5FTlQsCisJLmNsa190eXBlCQk9IFMzQ19TREhDSV9DTEtfRElWX0VYVEVSTkFMLAorI2lmZGVmIENPTkZJR19FWFlOT1M0X1NESENJX0NIMF84QklUCisJLm1heF93aWR0aAkJPSA4LAorCS5ob3N0X2NhcHMJCT0gTU1DX0NBUF84X0JJVF9EQVRBLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBhcm1sZXg0MjEwX2hzbW1jMl9wZGF0YSBfX2luaXRkYXRhID0geworCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9HUElPLAorCS5leHRfY2RfZ3BpbwkJPSBFWFlOT1M0X0dQWDIoNSksCisJLmV4dF9jZF9ncGlvX2ludmVydAk9IDEsCisJLmNsa190eXBlCQk9IFMzQ19TREhDSV9DTEtfRElWX0VYVEVSTkFMLAorCS5tYXhfd2lkdGgJCT0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIGFybWxleDQyMTBfaHNtbWMzX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX1BFUk1BTkVOVCwKKwkuY2xrX3R5cGUJCT0gUzNDX1NESENJX0NMS19ESVZfRVhURVJOQUwsCisJLm1heF93aWR0aAkJPSA0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGFybWxleDQyMTBfc2RoY2lfaW5pdCh2b2lkKQoreworCXMzY19zZGhjaTBfc2V0X3BsYXRkYXRhKCZhcm1sZXg0MjEwX2hzbW1jMF9wZGF0YSk7CisJczNjX3NkaGNpMl9zZXRfcGxhdGRhdGEoJmFybWxleDQyMTBfaHNtbWMyX3BkYXRhKTsKKwlzM2Nfc2RoY2kzX3NldF9wbGF0ZGF0YSgmYXJtbGV4NDIxMF9oc21tYzNfcGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYXJtbGV4NDIxMF93bGFuX2luaXQodm9pZCkKK3sKKwkvKiBlbmFibGUgKi8KKwlzM2NfZ3Bpb19jZmdwaW4oRVhZTk9TNF9HUFgyKDApLCBTM0NfR1BJT19TRk4oMHhmKSk7CisJczNjX2dwaW9fc2V0cHVsbChFWFlOT1M0X0dQWDIoMCksIFMzQ19HUElPX1BVTExfVVApOworCisJLyogcmVzZXQgKi8KKwlzM2NfZ3Bpb19jZmdwaW4oRVhZTk9TNF9HUFgxKDYpLCBTM0NfR1BJT19TRk4oMHhmKSk7CisJczNjX2dwaW9fc2V0cHVsbChFWFlOT1M0X0dQWDEoNiksIFMzQ19HUElPX1BVTExfVVApOworCisJLyogd2FrZXVwICovCisJczNjX2dwaW9fY2ZncGluKEVYWU5PUzRfR1BYMSg1KSwgUzNDX0dQSU9fU0ZOKDB4ZikpOworCXMzY19ncGlvX3NldHB1bGwoRVhZTk9TNF9HUFgxKDUpLCBTM0NfR1BJT19QVUxMX1VQKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhcm1sZXg0MjEwX3Ntc2M5MTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9TUk9NX0JBTksoMyksCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NST01fQkFOSygzKSArIFNaXzY0SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfRUlOVCgyNyksCisJCS5lbmQJPSBJUlFfRUlOVCgyNyksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSVJRRl9UUklHR0VSX0hJR0gsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MjE1X2NvbmZpZyA9IHsKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9ISUdILAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX1BVU0hfUFVMTCwKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzE2QklUIHwgU01TQzkxMVhfRk9SQ0VfSU5URVJOQUxfUEhZLAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKKwkubWFjCQk9IHsweDAwLCAweDgwLCAweDAwLCAweDIzLCAweDQ1LCAweDY3fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFybWxleDQyMTBfc21zYzkxMXggPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFybWxleDQyMTBfc21zYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBhcm1sZXg0MjEwX3Ntc2M5MTF4X3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21zYzkyMTVfY29uZmlnLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXJtbGV4NDIxMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV9oc21tYzAsCisJJnMzY19kZXZpY2VfaHNtbWMyLAorCSZzM2NfZGV2aWNlX2hzbW1jMywKKwkmczNjX2RldmljZV9ydGMsCisJJnMzY19kZXZpY2Vfd2R0LAorCSZleHlub3M0X2RldmljZV9zeXNtbXUsCisJJnNhbXN1bmdfYXNvY19kbWEsCisJJmFybWxleDQyMTBfc21zYzkxMXgsCisJJmV4eW5vczRfZGV2aWNlX2FoY2ksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXJtbGV4NDIxMF9zbXNjOTExeF9pbml0KHZvaWQpCit7CisJdTMyIGNzMTsKKworCS8qIGNvbmZpZ3VyZSBuQ1MxIHdpZHRoIHRvIDE2IGJpdHMgKi8KKwljczEgPSBfX3Jhd19yZWFkbChTNVBfU1JPTV9CVykgJgorCQl+KFM1UF9TUk9NX0JXX19DU19NQVNLIDw8IFM1UF9TUk9NX0JXX19OQ1MxX19TSElGVCk7CisJY3MxIHw9ICgoMSA8PCBTNVBfU1JPTV9CV19fREFUQVdJRFRIX19TSElGVCkgfAorCQkoMCA8PCBTNVBfU1JPTV9CV19fV0FJVEVOQUJMRV9fU0hJRlQpIHwKKwkJKDEgPDwgUzVQX1NST01fQldfX0FERFJNT0RFX19TSElGVCkgfAorCQkoMSA8PCBTNVBfU1JPTV9CV19fQllURUVOQUJMRV9fU0hJRlQpKSA8PAorCQlTNVBfU1JPTV9CV19fTkNTMV9fU0hJRlQ7CisJX19yYXdfd3JpdGVsKGNzMSwgUzVQX1NST01fQlcpOworCisJLyogc2V0IHRpbWluZyBmb3IgbkNTMSBzdWl0YWJsZSBmb3IgZXRoZXJuZXQgY2hpcCAqLworCV9fcmF3X3dyaXRlbCgoMHgxIDw8IFM1UF9TUk9NX0JDWF9fUE1DX19TSElGVCkgfAorCQkgICAgICgweDkgPDwgUzVQX1NST01fQkNYX19UQUNQX19TSElGVCkgfAorCQkgICAgICgweGMgPDwgUzVQX1NST01fQkNYX19UQ0FIX19TSElGVCkgfAorCQkgICAgICgweDEgPDwgUzVQX1NST01fQkNYX19UQ09IX19TSElGVCkgfAorCQkgICAgICgweDYgPDwgUzVQX1NST01fQkNYX19UQUNDX19TSElGVCkgfAorCQkgICAgICgweDEgPDwgUzVQX1NST01fQkNYX19UQ09TX19TSElGVCkgfAorCQkgICAgICgweDEgPDwgUzVQX1NST01fQkNYX19UQUNTX19TSElGVCksIFM1UF9TUk9NX0JDMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1sZXg0MjEwX21hcF9pbyh2b2lkKQoreworCXM1cF9pbml0X2lvKE5VTEwsIDAsIFM1UF9WQV9DSElQSUQpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMjQwMDAwMDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhhcm1sZXg0MjEwX3VhcnRjZmdzLAorCQkJICAgQVJSQVlfU0laRShhcm1sZXg0MjEwX3VhcnRjZmdzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1sZXg0MjEwX21hY2hpbmVfaW5pdCh2b2lkKQoreworCWFybWxleDQyMTBfc21zYzkxMXhfaW5pdCgpOworCisJYXJtbGV4NDIxMF9zZGhjaV9pbml0KCk7CisKKwlhcm1sZXg0MjEwX3dsYW5faW5pdCgpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoYXJtbGV4NDIxMF9kZXZpY2VzLAorCQkJICAgICBBUlJBWV9TSVpFKGFybWxleDQyMTBfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKEFSTUxFWDQyMTAsICJBUk1MRVg0MjEwIikKKwkvKiBNYWludGFpbmVyOiBBbGltIEFraHRhciA8YWxpbS5ha2h0YXJAc2Ftc3VuZy5jb20+ICovCisJLmJvb3RfcGFyYW1zCT0gUzVQX1BBX1NEUkFNICsgMHgxMDAsCisJLmluaXRfaXJxCT0gZXh5bm9zNF9pbml0X2lycSwKKwkubWFwX2lvCQk9IGFybWxleDQyMTBfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBhcm1sZXg0MjEwX21hY2hpbmVfaW5pdCwKKwkudGltZXIJCT0gJmV4eW5vczRfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtbnVyaS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtbnVyaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OWFkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1udXJpLmMKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1udXJpLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKworI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9leHlub3M0Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisvKiBGb2xsb3dpbmcgYXJlIGRlZmF1bHQgdmFsdWVzIGZvciBVQ09OLCBVTENPTiBhbmQgVUZDT04gVUFSVCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTlVSSV9VQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUNPTl9UWElMRVZFTCB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYSUxFVkVMIHwJXAorCQkJCSBTM0MyNDEwX1VDT05fVFhJUlFNT0RFIHwJXAorCQkJCSBTM0MyNDEwX1VDT05fUlhJUlFNT0RFIHwJXAorCQkJCSBTM0MyNDEwX1VDT05fUlhGSUZPX1RPSSB8CVwKKwkJCQkgUzNDMjQ0M19VQ09OX1JYRVJSX0lSUUVOKQorCisjZGVmaW5lIE5VUklfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CisKKyNkZWZpbmUgTlVSSV9VRkNPTl9ERUZBVUxUCShTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFIHwJXAorCQkJCSBTNVBWMjEwX1VGQ09OX1RYVFJJRzI1NiB8CVwKKwkJCQkgUzVQVjIxMF9VRkNPTl9SWFRSSUcyNTYpCisKK2VudW0gZml4ZWRfcmVndWxhdG9yX2lkIHsKKwlGSVhFRF9SRUdfSURfTU1DID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIG51cmlfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLmh3cG9ydAkJPSAwLAorCQkudWNvbgkJPSBOVVJJX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IE5VUklfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IE5VUklfVUZDT05fREVGQVVMVCwKKwl9LAorCXsKKwkJLmh3cG9ydAkJPSAxLAorCQkudWNvbgkJPSBOVVJJX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IE5VUklfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IE5VUklfVUZDT05fREVGQVVMVCwKKwl9LAorCXsKKwkJLmh3cG9ydAkJPSAyLAorCQkudWNvbgkJPSBOVVJJX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IE5VUklfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IE5VUklfVUZDT05fREVGQVVMVCwKKwl9LAorCXsKKwkJLmh3cG9ydAkJPSAzLAorCQkudWNvbgkJPSBOVVJJX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IE5VUklfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IE5VUklfVUZDT05fREVGQVVMVCwKKwl9LAorfTsKKworLyogZU1NQyAqLworc3RhdGljIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgbnVyaV9oc21tYzBfZGF0YSBfX2luaXRkYXRhID0geworCS5tYXhfd2lkdGgJCT0gOCwKKwkuaG9zdF9jYXBzCQk9IChNTUNfQ0FQXzhfQklUX0RBVEEgfCBNTUNfQ0FQXzRfQklUX0RBVEEgfAorCQkJCU1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEIHwKKwkJCQlNTUNfQ0FQX0RJU0FCTEUgfCBNTUNfQ0FQX0VSQVNFKSwKKwkuY2RfdHlwZQkJPSBTM0NfU0RIQ0lfQ0RfUEVSTUFORU5ULAorCS5jbGtfdHlwZQkJPSBTM0NfU0RIQ0lfQ0xLX0RJVl9FWFRFUk5BTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBlbW1jX3N1cHBsaWVzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJzM2Mtc2RoY2kuMCIpLAorCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAiZHdfbW1jIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZW1tY19maXhlZF92b2x0YWdlX2luaXRfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJCT0geworCQkubmFtZQkJPSAiVk1FTV9WRERfMi44ViIsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoZW1tY19zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gZW1tY19zdXBwbGllcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgZW1tY19maXhlZF92b2x0YWdlX2NvbmZpZyA9IHsKKwkuc3VwcGx5X25hbWUJCT0gIk1BU1NNRU1PUllfRU4gKGludmVydGVkKSIsCisJLm1pY3Jvdm9sdHMJCT0gMjgwMDAwMCwKKwkuZ3BpbwkJCT0gRVhZTk9TNF9HUEwxKDEpLAorCS5lbmFibGVfaGlnaAkJPSBmYWxzZSwKKwkuaW5pdF9kYXRhCQk9ICZlbW1jX2ZpeGVkX3ZvbHRhZ2VfaW5pdF9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZW1tY19maXhlZF92b2x0YWdlID0geworCS5uYW1lCQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCS5pZAkJCT0gRklYRURfUkVHX0lEX01NQywKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVtbWNfZml4ZWRfdm9sdGFnZV9jb25maWcsCisJfSwKK307CisKKy8qIFNEICovCitzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBudXJpX2hzbW1jMl9kYXRhIF9faW5pdGRhdGEgPSB7CisJLm1heF93aWR0aAkJPSA0LAorCS5ob3N0X2NhcHMJCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwKKwkJCQlNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8CisJCQkJTU1DX0NBUF9ESVNBQkxFLAorCS5leHRfY2RfZ3BpbwkJPSBFWFlOT1M0X0dQWDMoMyksCS8qIFhFSU5UXzI3ICovCisJLmV4dF9jZF9ncGlvX2ludmVydAk9IDEsCisJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX0dQSU8sCisJLmNsa190eXBlCQk9IFMzQ19TREhDSV9DTEtfRElWX0VYVEVSTkFMLAorfTsKKworLyogV0xBTiAqLworc3RhdGljIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgbnVyaV9oc21tYzNfZGF0YSBfX2luaXRkYXRhID0geworCS5tYXhfd2lkdGgJCT0gNCwKKwkuaG9zdF9jYXBzCQk9IE1NQ19DQVBfNF9CSVRfREFUQSB8CisJCQkJTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQsCisJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX0VYVEVSTkFMLAorCS5jbGtfdHlwZQkJPSBTM0NfU0RIQ0lfQ0xLX0RJVl9FWFRFUk5BTCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBudXJpX3NkaGNpX2luaXQodm9pZCkKK3sKKwlzM2Nfc2RoY2kwX3NldF9wbGF0ZGF0YSgmbnVyaV9oc21tYzBfZGF0YSk7CisJczNjX3NkaGNpMl9zZXRfcGxhdGRhdGEoJm51cmlfaHNtbWMyX2RhdGEpOworCXMzY19zZGhjaTNfc2V0X3BsYXRkYXRhKCZudXJpX2hzbW1jM19kYXRhKTsKK30KKworLyogR1BJTyBLRVlTICovCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gbnVyaV9ncGlvX2tleXNfdGFibGVzW10gPSB7CisJeworCQkuY29kZQkJCT0gS0VZX1ZPTFVNRVVQLAorCQkuZ3BpbwkJCT0gRVhZTk9TNF9HUFgyKDApLAkvKiBYRUlOVDE2ICovCisJCS5kZXNjCQkJPSAiZ3Bpby1rZXlzOiBLRVlfVk9MVU1FVVAiLAorCQkudHlwZQkJCT0gRVZfS0VZLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSAxLAorCX0sIHsKKwkJLmNvZGUJCQk9IEtFWV9WT0xVTUVET1dOLAorCQkuZ3BpbwkJCT0gRVhZTk9TNF9HUFgyKDEpLAkvKiBYRUlOVDE3ICovCisJCS5kZXNjCQkJPSAiZ3Bpby1rZXlzOiBLRVlfVk9MVU1FRE9XTiIsCisJCS50eXBlCQkJPSBFVl9LRVksCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDEsCisJfSwgeworCQkuY29kZQkJCT0gS0VZX1BPV0VSLAorCQkuZ3BpbwkJCT0gRVhZTk9TNF9HUFgyKDcpLAkvKiBYRUlOVDIzICovCisJCS5kZXNjCQkJPSAiZ3Bpby1rZXlzOiBLRVlfUE9XRVIiLAorCQkudHlwZQkJCT0gRVZfS0VZLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkud2FrZXVwCQkJPSAxLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIG51cmlfZ3Bpb19rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJCT0gbnVyaV9ncGlvX2tleXNfdGFibGVzLAorCS5uYnV0dG9ucwkJPSBBUlJBWV9TSVpFKG51cmlfZ3Bpb19rZXlzX3RhYmxlcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBudXJpX2dwaW9fa2V5cyA9IHsKKwkubmFtZQkJCT0gImdwaW8ta2V5cyIsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZudXJpX2dwaW9fa2V5c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBudXJpX2xjZF9wb3dlcl9vbihzdHJ1Y3QgcGxhdF9sY2RfZGF0YSAqcGQsIHVuc2lnbmVkIGludCBwb3dlcikKK3sKKwlpbnQgZ3BpbyA9IEVYWU5PUzRfR1BFMSg1KTsKKworCWdwaW9fcmVxdWVzdChncGlvLCAiTFZEU19uU0hETiIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCBwb3dlcik7CisJZ3Bpb19mcmVlKGdwaW8pOworfQorCitzdGF0aWMgaW50IG51cmlfYmxfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldCwgZ3BpbyA9IEVYWU5PUzRfR1BFMigzKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCAiTENEX0xET19FTiIpOworCWlmICghcmV0KQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG51cmlfYmxfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJyaWdodG5lc3MpCit7CisJaWYgKGJyaWdodG5lc3MgPCAxKQorCQlicmlnaHRuZXNzID0gMDsKKworCWdwaW9fc2V0X3ZhbHVlKEVYWU5PUzRfR1BFMigzKSwgMSk7CisKKwlyZXR1cm4gYnJpZ2h0bmVzczsKK30KKworc3RhdGljIHZvaWQgbnVyaV9ibF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoRVhZTk9TNF9HUEUyKDMpKTsKK30KKworLyogbnVyaSBwd20gYmFja2xpZ2h0ICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSBudXJpX2JhY2tsaWdodF9kYXRhID0geworCS5wd21faWQJCQk9IDAsCisJLnB3bV9wZXJpb2RfbnMJCT0gMzAwMDAsCisJLm1heF9icmlnaHRuZXNzCQk9IDEwMCwKKwkuZGZ0X2JyaWdodG5lc3MJCT0gNTAsCisJLmluaXQJCQk9IG51cmlfYmxfaW5pdCwKKwkubm90aWZ5CQkJPSBudXJpX2JsX25vdGlmeSwKKwkuZXhpdAkJCT0gbnVyaV9ibF9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVyaV9iYWNrbGlnaHRfZGV2aWNlID0geworCS5uYW1lCQkJPSAicHdtLWJhY2tsaWdodCIsCisJLmlkCQkJPSAtMSwKKwkuZGV2CQkJPSB7CisJCS5wYXJlbnQJCT0gJnMzY19kZXZpY2VfdGltZXJbMF0uZGV2LAorCQkucGxhdGZvcm1fZGF0YQk9ICZudXJpX2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfbGNkX2RhdGEgbnVyaV9sY2RfcGxhdGZvcm1fZGF0YSA9IHsKKwkuc2V0X3Bvd2VyCQk9IG51cmlfbGNkX3Bvd2VyX29uLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVyaV9sY2RfZGV2aWNlID0geworCS5uYW1lCQkJPSAicGxhdGZvcm0tbGNkIiwKKwkuaWQJCQk9IC0xLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbnVyaV9sY2RfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworLyogSTJDMSAqLworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmMxX2RldnNbXSBfX2luaXRkYXRhID0geworCS8qIEd5cm8sIFRvIGJlIHVwZGF0ZWQgKi8KK307CisKKy8qIEdQSU8gSTJDIDUgKFBNSUMpICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyYzVfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJLyogbWF4ODk5NywgVG8gYmUgdXBkYXRlZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm51cmlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJLyogU2Ftc3VuZyBQbGF0Zm9ybSBEZXZpY2VzICovCisJJmVtbWNfZml4ZWRfdm9sdGFnZSwKKwkmczNjX2RldmljZV9oc21tYzAsCisJJnMzY19kZXZpY2VfaHNtbWMyLAorCSZzM2NfZGV2aWNlX2hzbW1jMywKKwkmczNjX2RldmljZV93ZHQsCisJJnMzY19kZXZpY2VfdGltZXJbMF0sCisKKwkvKiBOVVJJIERldmljZXMgKi8KKwkmbnVyaV9ncGlvX2tleXMsCisJJm51cmlfbGNkX2RldmljZSwKKwkmbnVyaV9iYWNrbGlnaHRfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG51cmlfbWFwX2lvKHZvaWQpCit7CisJczVwX2luaXRfaW8oTlVMTCwgMCwgUzVQX1ZBX0NISVBJRCk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygyNDAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKG51cmlfdWFydGNmZ3MsIEFSUkFZX1NJWkUobnVyaV91YXJ0Y2ZncykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbnVyaV9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwludXJpX3NkaGNpX2luaXQoKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyYzFfZGV2cywgQVJSQVlfU0laRShpMmMxX2RldnMpKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyg1LCBpMmM1X2RldnMsIEFSUkFZX1NJWkUoaTJjNV9kZXZzKSk7CisKKwkvKiBMYXN0ICovCisJcGxhdGZvcm1fYWRkX2RldmljZXMobnVyaV9kZXZpY2VzLCBBUlJBWV9TSVpFKG51cmlfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKE5VUkksICJOVVJJIikKKwkvKiBNYWludGFpbmVyOiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPiAqLworCS5ib290X3BhcmFtcwk9IFM1UF9QQV9TRFJBTSArIDB4MTAwLAorCS5pbml0X2lycQk9IGV4eW5vczRfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBudXJpX21hcF9pbywKKwkuaW5pdF9tYWNoaW5lCT0gbnVyaV9tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZleHlub3M0X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9tYWNoLXNtZGtjMjEwLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1zbWRrYzIxMC5jCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9tYWNoLXNtZGtjMjEwLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9tYWNoLXNtZGtjMjEwLmMKaW5kZXggZDljYWIwMi4uMjVhMjU2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL21hY2gtc21ka2MyMTAuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1zbWRrYzIxMC5jCkBAIC0xLDcgKzEsNyBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL21hY2gtc21ka2MyMTAuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtc21ka2MyMTAuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3JvbS5oPgotI2luY2x1ZGUgPHBsYXQvczVwdjMxMC5oPgorI2luY2x1ZGUgPHBsYXQvZXh5bm9zNC5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgpAQCAtNzcsMTAgKzc3LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHNtZGtjMjEwX2hzbW1jMF9wZGF0YSBfX2luaXRkYXRhID0gewogCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9HUElPLAotCS5leHRfY2RfZ3BpbwkJPSBTNVBWMzEwX0dQSzAoMiksCisJLmV4dF9jZF9ncGlvCQk9IEVYWU5PUzRfR1BLMCgyKSwKIAkuZXh0X2NkX2dwaW9faW52ZXJ0CT0gMSwKIAkuY2xrX3R5cGUJCT0gUzNDX1NESENJX0NMS19ESVZfRVhURVJOQUwsCi0jaWZkZWYgQ09ORklHX1M1UFYzMTBfU0RIQ0lfQ0gwXzhCSVQKKyNpZmRlZiBDT05GSUdfRVhZTk9TNF9TREhDSV9DSDBfOEJJVAogCS5tYXhfd2lkdGgJCT0gOCwKIAkuaG9zdF9jYXBzCQk9IE1NQ19DQVBfOF9CSVRfREFUQSwKICNlbmRpZgpAQCAtODgsMTcgKzg4LDE3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHNtZGtjMjEwX2hzbW1jMV9wZGF0YSBfX2luaXRkYXRhID0gewogCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9HUElPLAotCS5leHRfY2RfZ3BpbwkJPSBTNVBWMzEwX0dQSzAoMiksCisJLmV4dF9jZF9ncGlvCQk9IEVYWU5PUzRfR1BLMCgyKSwKIAkuZXh0X2NkX2dwaW9faW52ZXJ0CT0gMSwKIAkuY2xrX3R5cGUJCT0gUzNDX1NESENJX0NMS19ESVZfRVhURVJOQUwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBzbWRrYzIxMF9oc21tYzJfcGRhdGEgX19pbml0ZGF0YSA9IHsKIAkuY2RfdHlwZQkJPSBTM0NfU0RIQ0lfQ0RfR1BJTywKLQkuZXh0X2NkX2dwaW8JCT0gUzVQVjMxMF9HUEsyKDIpLAorCS5leHRfY2RfZ3BpbwkJPSBFWFlOT1M0X0dQSzIoMiksCiAJLmV4dF9jZF9ncGlvX2ludmVydAk9IDEsCiAJLmNsa190eXBlCQk9IFMzQ19TREhDSV9DTEtfRElWX0VYVEVSTkFMLAotI2lmZGVmIENPTkZJR19TNVBWMzEwX1NESENJX0NIMl84QklUCisjaWZkZWYgQ09ORklHX0VYWU5PUzRfU0RIQ0lfQ0gyXzhCSVQKIAkubWF4X3dpZHRoCQk9IDgsCiAJLmhvc3RfY2FwcwkJPSBNTUNfQ0FQXzhfQklUX0RBVEEsCiAjZW5kaWYKQEAgLTEwNiwxNSArMTA2LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHNtZGtjMjEwX2hzbW1jM19wZGF0YSBfX2luaXRkYXRhID0gewogCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9HUElPLAotCS5leHRfY2RfZ3BpbwkJPSBTNVBWMzEwX0dQSzIoMiksCisJLmV4dF9jZF9ncGlvCQk9IEVYWU5PUzRfR1BLMigyKSwKIAkuZXh0X2NkX2dwaW9faW52ZXJ0CT0gMSwKIAkuY2xrX3R5cGUJCT0gUzNDX1NESENJX0NMS19ESVZfRVhURVJOQUwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtZGtjMjEwX3Ntc2M5MTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9TUk9NX0JBTksoMSksCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NST01fQkFOSygxKSArIFNaXzY0SyAtIDEsCisJCS5zdGFydAk9IEVYWU5PUzRfUEFfU1JPTV9CQU5LKDEpLAorCQkuZW5kCT0gRVhZTk9TNF9QQV9TUk9NX0JBTksoMSkgKyBTWl82NEsgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTE1NCwxNiArMTU0LDE2IEBACiAJJnMzY19kZXZpY2VfaTJjMSwKIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2Vfd2R0LAotCSZzNXB2MzEwX2RldmljZV9hYzk3LAotCSZzNXB2MzEwX2RldmljZV9pMnMwLAotCSZzNXB2MzEwX2RldmljZV9wZFtQRF9NRkNdLAotCSZzNXB2MzEwX2RldmljZV9wZFtQRF9HM0RdLAotCSZzNXB2MzEwX2RldmljZV9wZFtQRF9MQ0QwXSwKLQkmczVwdjMxMF9kZXZpY2VfcGRbUERfTENEMV0sCi0JJnM1cHYzMTBfZGV2aWNlX3BkW1BEX0NBTV0sCi0JJnM1cHYzMTBfZGV2aWNlX3BkW1BEX1RWXSwKLQkmczVwdjMxMF9kZXZpY2VfcGRbUERfR1BTXSwKLQkmczVwdjMxMF9kZXZpY2Vfc3lzbW11LAorCSZleHlub3M0X2RldmljZV9hYzk3LAorCSZleHlub3M0X2RldmljZV9pMnMwLAorCSZleHlub3M0X2RldmljZV9wZFtQRF9NRkNdLAorCSZleHlub3M0X2RldmljZV9wZFtQRF9HM0RdLAorCSZleHlub3M0X2RldmljZV9wZFtQRF9MQ0QwXSwKKwkmZXh5bm9zNF9kZXZpY2VfcGRbUERfTENEMV0sCisJJmV4eW5vczRfZGV2aWNlX3BkW1BEX0NBTV0sCisJJmV4eW5vczRfZGV2aWNlX3BkW1BEX1RWXSwKKwkmZXh5bm9zNF9kZXZpY2VfcGRbUERfR1BTXSwKKwkmZXh5bm9zNF9kZXZpY2Vfc3lzbW11LAogCSZzYW1zdW5nX2Fzb2NfZG1hLAogCSZzbWRrYzIxMF9zbXNjOTExeCwKIH07CkBAIC0yMTYsOCArMjE2LDggQEAKIE1BQ0hJTkVfU1RBUlQoU01ES0MyMTAsICJTTURLQzIxMCIpCiAJLyogTWFpbnRhaW5lcjogS3VramluIEtpbSA8a2dlbmUua2ltQHNhbXN1bmcuY29tPiAqLwogCS5ib290X3BhcmFtcwk9IFM1UF9QQV9TRFJBTSArIDB4MTAwLAotCS5pbml0X2lycQk9IHM1cHYzMTBfaW5pdF9pcnEsCisJLmluaXRfaXJxCT0gZXh5bm9zNF9pbml0X2lycSwKIAkubWFwX2lvCQk9IHNtZGtjMjEwX21hcF9pbywKIAkuaW5pdF9tYWNoaW5lCT0gc21ka2MyMTBfbWFjaGluZV9pbml0LAotCS50aW1lcgkJPSAmczVwdjMxMF90aW1lciwKKwkudGltZXIJCT0gJmV4eW5vczRfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL21hY2gtc21ka3YzMTAuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tYWNoLXNtZGt2MzEwLmMKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL21hY2gtc21ka3YzMTAuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtc21ka3YzMTAuYwppbmRleCBiMWNkZGJmLi44OGUwMjc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbWFjaC1zbWRrdjMxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tYWNoLXNtZGt2MzEwLmMKQEAgLTEsNyArMSw3IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbWFjaC1zbWRrdjMxMC5jCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1zbWRrdjMxMC5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTUsMTUgKzE1LDE3IEBACiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3JvbS5oPgotI2luY2x1ZGUgPHBsYXQvczVwdjMxMC5oPgorI2luY2x1ZGUgPHBsYXQvZXh5bm9zNC5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9rZXlwYWQuaD4KICNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CiAjaW5jbHVkZSA8cGxhdC9paWMuaD4KICNpbmNsdWRlIDxwbGF0L3BkLmg+CkBAIC03NywxMCArNzksMTAgQEAKIAogc3RhdGljIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgc21ka3YzMTBfaHNtbWMwX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX0dQSU8sCi0JLmV4dF9jZF9ncGlvCQk9IFM1UFYzMTBfR1BLMCgyKSwKKwkuZXh0X2NkX2dwaW8JCT0gRVhZTk9TNF9HUEswKDIpLAogCS5leHRfY2RfZ3Bpb19pbnZlcnQJPSAxLAogCS5jbGtfdHlwZQkJPSBTM0NfU0RIQ0lfQ0xLX0RJVl9FWFRFUk5BTCwKLSNpZmRlZiBDT05GSUdfUzVQVjMxMF9TREhDSV9DSDBfOEJJVAorI2lmZGVmIENPTkZJR19FWFlOT1M0X1NESENJX0NIMF84QklUCiAJLm1heF93aWR0aAkJPSA4LAogCS5ob3N0X2NhcHMJCT0gTU1DX0NBUF84X0JJVF9EQVRBLAogI2VuZGlmCkBAIC04OCwxNyArOTAsMTcgQEAKIAogc3RhdGljIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgc21ka3YzMTBfaHNtbWMxX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX0dQSU8sCi0JLmV4dF9jZF9ncGlvCQk9IFM1UFYzMTBfR1BLMCgyKSwKKwkuZXh0X2NkX2dwaW8JCT0gRVhZTk9TNF9HUEswKDIpLAogCS5leHRfY2RfZ3Bpb19pbnZlcnQJPSAxLAogCS5jbGtfdHlwZQkJPSBTM0NfU0RIQ0lfQ0xLX0RJVl9FWFRFUk5BTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHNtZGt2MzEwX2hzbW1jMl9wZGF0YSBfX2luaXRkYXRhID0gewogCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9HUElPLAotCS5leHRfY2RfZ3BpbwkJPSBTNVBWMzEwX0dQSzIoMiksCisJLmV4dF9jZF9ncGlvCQk9IEVYWU5PUzRfR1BLMigyKSwKIAkuZXh0X2NkX2dwaW9faW52ZXJ0CT0gMSwKIAkuY2xrX3R5cGUJCT0gUzNDX1NESENJX0NMS19ESVZfRVhURVJOQUwsCi0jaWZkZWYgQ09ORklHX1M1UFYzMTBfU0RIQ0lfQ0gyXzhCSVQKKyNpZmRlZiBDT05GSUdfRVhZTk9TNF9TREhDSV9DSDJfOEJJVAogCS5tYXhfd2lkdGgJCT0gOCwKIAkuaG9zdF9jYXBzCQk9IE1NQ19DQVBfOF9CSVRfREFUQSwKICNlbmRpZgpAQCAtMTA2LDE1ICsxMDgsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgc21ka3YzMTBfaHNtbWMzX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX0dQSU8sCi0JLmV4dF9jZF9ncGlvCQk9IFM1UFYzMTBfR1BLMigyKSwKKwkuZXh0X2NkX2dwaW8JCT0gRVhZTk9TNF9HUEsyKDIpLAogCS5leHRfY2RfZ3Bpb19pbnZlcnQJPSAxLAogCS5jbGtfdHlwZQkJPSBTM0NfU0RIQ0lfQ0xLX0RJVl9FWFRFUk5BTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21ka3YzMTBfc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1NST01fQkFOSygxKSwKLQkJLmVuZAk9IFM1UFYzMTBfUEFfU1JPTV9CQU5LKDEpICsgU1pfNjRLIC0gMSwKKwkJLnN0YXJ0CT0gRVhZTk9TNF9QQV9TUk9NX0JBTksoMSksCisJCS5lbmQJPSBFWFlOT1M0X1BBX1NST01fQkFOSygxKSArIFNaXzY0SyAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtMTQyLDYgKzE0NCwyNSBAQAogCX0sCiB9OwogCitzdGF0aWMgdWludDMyX3Qgc21ka3YzMTBfa2V5bWFwW10gX19pbml0ZGF0YSA9IHsKKwkvKiBLRVkocm93LCBjb2wsIGtleWNvZGUpICovCisJS0VZKDAsIDMsIEtFWV8xKSwgS0VZKDAsIDQsIEtFWV8yKSwgS0VZKDAsIDUsIEtFWV8zKSwKKwlLRVkoMCwgNiwgS0VZXzQpLCBLRVkoMCwgNywgS0VZXzUpLAorCUtFWSgxLCAzLCBLRVlfQSksIEtFWSgxLCA0LCBLRVlfQiksIEtFWSgxLCA1LCBLRVlfQyksCisJS0VZKDEsIDYsIEtFWV9EKSwgS0VZKDEsIDcsIEtFWV9FKQorfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgc21ka3YzMTBfa2V5bWFwX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkua2V5bWFwCQk9IHNtZGt2MzEwX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHNtZGt2MzEwX2tleW1hcCksCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfa2V5cGFkX3BsYXRkYXRhIHNtZGt2MzEwX2tleXBhZF9kYXRhIF9faW5pdGRhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJnNtZGt2MzEwX2tleW1hcF9kYXRhLAorCS5yb3dzCQk9IDIsCisJLmNvbHMJCT0gOCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaTJjX2RldnMxW10gX19pbml0ZGF0YSA9IHsKIAl7STJDX0JPQVJEX0lORk8oIndtODk5NCIsIDB4MWEpLH0sCiB9OwpAQCAtMTU0LDE2ICsxNzUsMTcgQEAKIAkmczNjX2RldmljZV9pMmMxLAogCSZzM2NfZGV2aWNlX3J0YywKIAkmczNjX2RldmljZV93ZHQsCi0JJnM1cHYzMTBfZGV2aWNlX2FjOTcsCi0JJnM1cHYzMTBfZGV2aWNlX2kyczAsCi0JJnM1cHYzMTBfZGV2aWNlX3BkW1BEX01GQ10sCi0JJnM1cHYzMTBfZGV2aWNlX3BkW1BEX0czRF0sCi0JJnM1cHYzMTBfZGV2aWNlX3BkW1BEX0xDRDBdLAotCSZzNXB2MzEwX2RldmljZV9wZFtQRF9MQ0QxXSwKLQkmczVwdjMxMF9kZXZpY2VfcGRbUERfQ0FNXSwKLQkmczVwdjMxMF9kZXZpY2VfcGRbUERfVFZdLAotCSZzNXB2MzEwX2RldmljZV9wZFtQRF9HUFNdLAotCSZzNXB2MzEwX2RldmljZV9zeXNtbXUsCisJJmV4eW5vczRfZGV2aWNlX2FjOTcsCisJJmV4eW5vczRfZGV2aWNlX2kyczAsCisJJnNhbXN1bmdfZGV2aWNlX2tleXBhZCwKKwkmZXh5bm9zNF9kZXZpY2VfcGRbUERfTUZDXSwKKwkmZXh5bm9zNF9kZXZpY2VfcGRbUERfRzNEXSwKKwkmZXh5bm9zNF9kZXZpY2VfcGRbUERfTENEMF0sCisJJmV4eW5vczRfZGV2aWNlX3BkW1BEX0xDRDFdLAorCSZleHlub3M0X2RldmljZV9wZFtQRF9DQU1dLAorCSZleHlub3M0X2RldmljZV9wZFtQRF9UVl0sCisJJmV4eW5vczRfZGV2aWNlX3BkW1BEX0dQU10sCisJJmV4eW5vczRfZGV2aWNlX3N5c21tdSwKIAkmc2Ftc3VuZ19hc29jX2RtYSwKIAkmc21ka3YzMTBfc21zYzkxMXgsCiB9OwpAQCAtMjEwLDYgKzIzMiw4IEBACiAJczNjX3NkaGNpMl9zZXRfcGxhdGRhdGEoJnNtZGt2MzEwX2hzbW1jMl9wZGF0YSk7CiAJczNjX3NkaGNpM19zZXRfcGxhdGRhdGEoJnNtZGt2MzEwX2hzbW1jM19wZGF0YSk7CiAKKwlzYW1zdW5nX2tleXBhZF9zZXRfcGxhdGRhdGEoJnNtZGt2MzEwX2tleXBhZF9kYXRhKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGt2MzEwX2RldmljZXMsIEFSUkFZX1NJWkUoc21ka3YzMTBfZGV2aWNlcykpOwogfQogCkBAIC0yMTcsOCArMjQxLDggQEAKIAkvKiBNYWludGFpbmVyOiBLdWtqaW4gS2ltIDxrZ2VuZS5raW1Ac2Ftc3VuZy5jb20+ICovCiAJLyogTWFpbnRhaW5lcjogQ2hhbmdod2FuIFlvdW4gPGNoYW9zLnlvdW5Ac2Ftc3VuZy5jb20+ICovCiAJLmJvb3RfcGFyYW1zCT0gUzVQX1BBX1NEUkFNICsgMHgxMDAsCi0JLmluaXRfaXJxCT0gczVwdjMxMF9pbml0X2lycSwKKwkuaW5pdF9pcnEJPSBleHlub3M0X2luaXRfaXJxLAogCS5tYXBfaW8JCT0gc21ka3YzMTBfbWFwX2lvLAogCS5pbml0X21hY2hpbmUJPSBzbWRrdjMxMF9tYWNoaW5lX2luaXQsCi0JLnRpbWVyCQk9ICZzNXB2MzEwX3RpbWVyLAorCS50aW1lcgkJPSAmZXh5bm9zNF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC11bml2ZXJzYWxfYzIxMC5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtdW5pdmVyc2FsX2MyMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2QzMjlmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtdW5pdmVyc2FsX2MyMTAuYwpAQCAtMCwwICsxLDY1MCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtdW5pdmVyc2FsX2MyMTAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODk5OC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21heDg5NTIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9leHlub3M0Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKy8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLworI2RlZmluZSBVTklWRVJTQUxfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisJCQkJIFMzQzI0MTBfVUNPTl9SWElMRVZFTCB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kgfAlcCisJCQkJIFMzQzI0NDNfVUNPTl9SWEVSUl9JUlFFTikKKworI2RlZmluZSBVTklWRVJTQUxfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CisKKyNkZWZpbmUgVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUZDT05fRklGT01PREUgfAlcCisJCQkJIFM1UFYyMTBfVUZDT05fVFhUUklHMjU2IHwJXAorCQkJCSBTNVBWMjEwX1VGQ09OX1JYVFJJRzI1NikKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgdW5pdmVyc2FsX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJCT0gMCwKKwkJLnVjb24JCT0gVU5JVkVSU0FMX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFVOSVZFUlNBTF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJCT0gMSwKKwkJLnVjb24JCT0gVU5JVkVSU0FMX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFVOSVZFUlNBTF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJCT0gMiwKKwkJLnVjb24JCT0gVU5JVkVSU0FMX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFVOSVZFUlNBTF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbM10gPSB7CisJCS5od3BvcnQJCT0gMywKKwkJLnVjb24JCT0gVU5JVkVSU0FMX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFVOSVZFUlNBTF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBtYXg4OTUyX2NvbnN1bWVyID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRhcm0iLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBtYXg4OTUyX3BsYXRmb3JtX2RhdGEgdW5pdmVyc2FsX21heDg5NTJfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuZ3Bpb192aWQwCT0gRVhZTk9TNF9HUFgwKDMpLAorCS5ncGlvX3ZpZDEJPSBFWFlOT1M0X0dQWDAoNCksCisJLmdwaW9fZW4JPSAtMSwgLyogTm90IGNvbnRyb2xsYWJsZSwgc2V0ICJBbHdheXMgSGlnaCIgKi8KKwkuZGVmYXVsdF9tb2RlCT0gMCwgLyogdmlkMCA9IDAsIHZpZDEgPSAwICovCisJLmR2c19tb2RlCT0geyA0OCwgMzIsIDI4LCAxOCB9LCAvKiAxLjI1LCAxLjIwLCAxLjA1LCAwLjk1ViAqLworCS5zeW5jX2ZyZXEJPSAwLCAvKiBkZWZhdWx0OiBmYXN0ZXN0ICovCisJLnJhbXBfc3BlZWQJPSAwLCAvKiBkZWZhdWx0OiBmYXN0ZXN0ICovCisKKwkucmVnX2RhdGEJPSB7CisJCS5jb25zdHJhaW50cwk9IHsKKwkJCS5uYW1lCQk9ICJWQVJNXzEuMlYiLAorCQkJLm1pbl91VgkJPSA3NzAwMDAsCisJCQkubWF4X3VWCQk9IDE0MDAwMDAsCisJCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCisJCQkuYWx3YXlzX29uCT0gMSwKKwkJCS5ib290X29uCT0gMSwKKwkJfSwKKwkJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJCS5jb25zdW1lcl9zdXBwbGllcwk9ICZtYXg4OTUyX2NvbnN1bWVyLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgbHAzOTc0X2J1Y2sxX2NvbnN1bWVyID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRpbnQiLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGxwMzk3NF9idWNrMl9jb25zdW1lciA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkZzNkIiwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfYnVjazFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWSU5UXzEuMVYiLAorCQkubWluX3VWCQk9IDc1MDAwMCwKKwkJLm1heF91VgkJPSAxNTAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5ib290X29uCT0gMSwKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5kaXNhYmxlZAk9IDEsCisJCX0sCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSAmbHAzOTc0X2J1Y2sxX2NvbnN1bWVyLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxwMzk3NF9idWNrMl9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZHM0RfMS4xViIsCisJCS5taW5fdVYJCT0gNzUwMDAwLAorCQkubWF4X3VWCQk9IDE1MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQlSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLmJvb3Rfb24JPSAxLAorCQkuc3RhdGVfbWVtCT0geworCQkJLmRpc2FibGVkCT0gMSwKKwkJfSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcyA9ICZscDM5NzRfYnVjazJfY29uc3VtZXIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2J1Y2szX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVkNDXzEuOFYiLAorCQkubWluX3VWCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLmFsd2F5c19vbgk9IDEsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZW5hYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfYnVjazRfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWTUVNXzEuMlYiLAorCQkubWluX3VWCQk9IDEyMDAwMDAsCisJCS5tYXhfdVYJCT0gMTIwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5hcHBseV91Vgk9IDEsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZGlzYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzJfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWQUxJVkVfMS4yViIsCisJCS5taW5fdVYJCT0gMTIwMDAwMCwKKwkJLm1heF91VgkJPSAxMjAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5lbmFibGVkCT0gMSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxwMzk3NF9sZG8zX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVlVTQitNSVBJXzEuMVYiLAorCQkubWluX3VWCQk9IDExMDAwMDAsCisJCS5tYXhfdVYJCT0gMTEwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZGlzYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzRfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWQURDXzMuM1YiLAorCQkubWluX3VWCQk9IDMzMDAwMDAsCisJCS5tYXhfdVYJCT0gMzMwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZGlzYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzVfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWVEZfMi44ViIsCisJCS5taW5fdVYJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5kaXNhYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfbGRvNl9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkxETzYiLAorCQkubWluX3VWCQk9IDIwMDAwMDAsCisJCS5tYXhfdVYJCT0gMjAwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZGlzYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzdfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWTENEK1ZNSVBJXzEuOFYiLAorCQkubWluX3VWCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZGlzYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzhfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWVVNCK1ZEQUNfMy4zViIsCisJCS5taW5fdVYJCT0gMzMwMDAwMCwKKwkJLm1heF91VgkJPSAzMzAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5kaXNhYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfbGRvOV9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZDQ18yLjhWIiwKKwkJLm1pbl91VgkJPSAyODAwMDAwLAorCQkubWF4X3VWCQk9IDI4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCQkuc3RhdGVfbWVtCT0geworCQkJLmVuYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzEwX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVlBMTF8xLjFWIiwKKwkJLm1pbl91VgkJPSAxMTAwMDAwLAorCQkubWF4X3VWCQk9IDExMDAwMDAsCisJCS5ib290X29uCT0gMSwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZGlzYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzExX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiQ0FNX0FGXzMuM1YiLAorCQkubWluX3VWCQk9IDMzMDAwMDAsCisJCS5tYXhfdVYJCT0gMzMwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZGlzYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzEyX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiUFNfMi44ViIsCisJCS5taW5fdVYJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5kaXNhYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfbGRvMTNfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWSElDXzEuMlYiLAorCQkubWluX3VWCQk9IDEyMDAwMDAsCisJCS5tYXhfdVYJCT0gMTIwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZGlzYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0X2xkbzE0X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiQ0FNX0lfSE9TVF8xLjhWIiwKKwkJLm1pbl91VgkJPSAxODAwMDAwLAorCQkubWF4X3VWCQk9IDE4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkuc3RhdGVfbWVtCT0geworCQkJLmRpc2FibGVkCT0gMSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxwMzk3NF9sZG8xNV9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkNBTV9TX0RJRytGTTMzX0NPUkVfMS4yViIsCisJCS5taW5fdVYJCT0gMTIwMDAwMCwKKwkJLm1heF91VgkJPSAxMjAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5kaXNhYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfbGRvMTZfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJDQU1fU19BTkFfMi44ViIsCisJCS5taW5fdVYJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5kaXNhYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfbGRvMTdfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWQ0NfMy4wVl9MQ0QiLAorCQkubWluX3VWCQk9IDMwMDAwMDAsCisJCS5tYXhfdVYJCT0gMzAwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5ib290X29uCT0gMSwKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5kaXNhYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfMzJraHpfYXBfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICIzMktIeiBBUCIsCisJCS5hbHdheXNfb24JPSAxLAorCQkuc3RhdGVfbWVtCT0geworCQkJLmVuYWJsZWQJPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbHAzOTc0XzMya2h6X2NwX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiMzJLSHogQ1AiLAorCQkuc3RhdGVfbWVtCT0geworCQkJLmRpc2FibGVkCT0gMSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxwMzk3NF92aWNoZ19kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZJQ0hHIiwKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5kaXNhYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBscDM5NzRfZXNhZmVvdXQxX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiU0FGRU9VVDEiLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5lbmFibGVkCT0gMSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxwMzk3NF9lc2FmZW91dDJfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJTQUZFT1VUMiIsCisJCS5ib290X29uCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5zdGF0ZV9tZW0JPSB7CisJCQkuZW5hYmxlZAk9IDEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4ODk5OF9yZWd1bGF0b3JfZGF0YSBscDM5NzRfcmVndWxhdG9yc1tdID0geworCXsgTUFYODk5OF9MRE8yLCAgJmxwMzk3NF9sZG8yX2RhdGEgfSwKKwl7IE1BWDg5OThfTERPMywgICZscDM5NzRfbGRvM19kYXRhIH0sCisJeyBNQVg4OTk4X0xETzQsICAmbHAzOTc0X2xkbzRfZGF0YSB9LAorCXsgTUFYODk5OF9MRE81LCAgJmxwMzk3NF9sZG81X2RhdGEgfSwKKwl7IE1BWDg5OThfTERPNiwgICZscDM5NzRfbGRvNl9kYXRhIH0sCisJeyBNQVg4OTk4X0xETzcsICAmbHAzOTc0X2xkbzdfZGF0YSB9LAorCXsgTUFYODk5OF9MRE84LCAgJmxwMzk3NF9sZG84X2RhdGEgfSwKKwl7IE1BWDg5OThfTERPOSwgICZscDM5NzRfbGRvOV9kYXRhIH0sCisJeyBNQVg4OTk4X0xETzEwLCAmbHAzOTc0X2xkbzEwX2RhdGEgfSwKKwl7IE1BWDg5OThfTERPMTEsICZscDM5NzRfbGRvMTFfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xMiwgJmxwMzk3NF9sZG8xMl9kYXRhIH0sCisJeyBNQVg4OTk4X0xETzEzLCAmbHAzOTc0X2xkbzEzX2RhdGEgfSwKKwl7IE1BWDg5OThfTERPMTQsICZscDM5NzRfbGRvMTRfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xNSwgJmxwMzk3NF9sZG8xNV9kYXRhIH0sCisJeyBNQVg4OTk4X0xETzE2LCAmbHAzOTc0X2xkbzE2X2RhdGEgfSwKKwl7IE1BWDg5OThfTERPMTcsICZscDM5NzRfbGRvMTdfZGF0YSB9LAorCXsgTUFYODk5OF9CVUNLMSwgJmxwMzk3NF9idWNrMV9kYXRhIH0sCisJeyBNQVg4OTk4X0JVQ0syLCAmbHAzOTc0X2J1Y2syX2RhdGEgfSwKKwl7IE1BWDg5OThfQlVDSzMsICZscDM5NzRfYnVjazNfZGF0YSB9LAorCXsgTUFYODk5OF9CVUNLNCwgJmxwMzk3NF9idWNrNF9kYXRhIH0sCisJeyBNQVg4OTk4X0VOMzJLSFpfQVAsICZscDM5NzRfMzJraHpfYXBfZGF0YSB9LAorCXsgTUFYODk5OF9FTjMyS0haX0NQLCAmbHAzOTc0XzMya2h6X2NwX2RhdGEgfSwKKwl7IE1BWDg5OThfRU5WSUNIRywgJmxwMzk3NF92aWNoZ19kYXRhIH0sCisJeyBNQVg4OTk4X0VTQUZFT1VUMSwgJmxwMzk3NF9lc2FmZW91dDFfZGF0YSB9LAorCXsgTUFYODk5OF9FU0FGRU9VVDIsICZscDM5NzRfZXNhZmVvdXQyX2RhdGEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4ODk5OF9wbGF0Zm9ybV9kYXRhIHVuaXZlcnNhbF9scDM5NzRfcGRhdGEgPSB7CisJLm51bV9yZWd1bGF0b3JzCQk9IEFSUkFZX1NJWkUobHAzOTc0X3JlZ3VsYXRvcnMpLAorCS5yZWd1bGF0b3JzCQk9IGxwMzk3NF9yZWd1bGF0b3JzLAorCS5idWNrMV92b2x0YWdlMQkJPSAxMTAwMDAwLAkvKiBJTlQgKi8KKwkuYnVjazFfdm9sdGFnZTIJCT0gMTAwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTMJCT0gMTEwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTQJCT0gMTAwMDAwMCwKKwkuYnVjazFfc2V0MQkJPSBFWFlOT1M0X0dQWDAoNSksCisJLmJ1Y2sxX3NldDIJCT0gRVhZTk9TNF9HUFgwKDYpLAorCS5idWNrMl92b2x0YWdlMQkJPSAxMjAwMDAwLAkvKiBHM0QgKi8KKwkuYnVjazJfdm9sdGFnZTIJCT0gMTEwMDAwMCwKKwkuYnVjazFfZGVmYXVsdF9pZHgJPSAwLAorCS5idWNrMl9zZXQzCQk9IEVYWU5PUzRfR1BFMigwKSwKKwkuYnVjazJfZGVmYXVsdF9pZHgJPSAwLAorCS53YWtldXAJCQk9IHRydWUsCit9OworCisvKiBHUElPIEkyQyA1IChQTUlDKSAqLworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmM1X2RldnNbXSBfX2luaXRkYXRhID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oIm1heDg5NTIiLCAweEMwID4+IDEpLAorCQkucGxhdGZvcm1fZGF0YQk9ICZ1bml2ZXJzYWxfbWF4ODk1Ml9wZGF0YSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJscDM5NzQiLCAweENDID4+IDEpLAorCQkucGxhdGZvcm1fZGF0YQk9ICZ1bml2ZXJzYWxfbHAzOTc0X3BkYXRhLAorCX0sCit9OworCisvKiBHUElPIEtFWVMgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiB1bml2ZXJzYWxfZ3Bpb19rZXlzX3RhYmxlc1tdID0geworCXsKKwkJLmNvZGUJCQk9IEtFWV9WT0xVTUVVUCwKKwkJLmdwaW8JCQk9IEVYWU5PUzRfR1BYMigwKSwJLyogWEVJTlQxNiAqLworCQkuZGVzYwkJCT0gImdwaW8ta2V5czogS0VZX1ZPTFVNRVVQIiwKKwkJLnR5cGUJCQk9IEVWX0tFWSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlYm91bmNlX2ludGVydmFsCT0gMSwKKwl9LCB7CisJCS5jb2RlCQkJPSBLRVlfVk9MVU1FRE9XTiwKKwkJLmdwaW8JCQk9IEVYWU5PUzRfR1BYMigxKSwJLyogWEVJTlQxNyAqLworCQkuZGVzYwkJCT0gImdwaW8ta2V5czogS0VZX1ZPTFVNRURPV04iLAorCQkudHlwZQkJCT0gRVZfS0VZLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSAxLAorCX0sIHsKKwkJLmNvZGUJCQk9IEtFWV9DT05GSUcsCisJCS5ncGlvCQkJPSBFWFlOT1M0X0dQWDIoMiksCS8qIFhFSU5UMTggKi8KKwkJLmRlc2MJCQk9ICJncGlvLWtleXM6IEtFWV9DT05GSUciLAorCQkudHlwZQkJCT0gRVZfS0VZLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSAxLAorCX0sIHsKKwkJLmNvZGUJCQk9IEtFWV9DQU1FUkEsCisJCS5ncGlvCQkJPSBFWFlOT1M0X0dQWDIoMyksCS8qIFhFSU5UMTkgKi8KKwkJLmRlc2MJCQk9ICJncGlvLWtleXM6IEtFWV9DQU1FUkEiLAorCQkudHlwZQkJCT0gRVZfS0VZLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSAxLAorCX0sIHsKKwkJLmNvZGUJCQk9IEtFWV9PSywKKwkJLmdwaW8JCQk9IEVYWU5PUzRfR1BYMyg1KSwJLyogWEVJTlQyOSAqLworCQkuZGVzYwkJCT0gImdwaW8ta2V5czogS0VZX09LIiwKKwkJLnR5cGUJCQk9IEVWX0tFWSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlYm91bmNlX2ludGVydmFsCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSB1bml2ZXJzYWxfZ3Bpb19rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSB1bml2ZXJzYWxfZ3Bpb19rZXlzX3RhYmxlcywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHVuaXZlcnNhbF9ncGlvX2tleXNfdGFibGVzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVuaXZlcnNhbF9ncGlvX2tleXMgPSB7CisJLm5hbWUJCQk9ICJncGlvLWtleXMiLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdW5pdmVyc2FsX2dwaW9fa2V5c19kYXRhLAorCX0sCit9OworCisvKiBlTU1DICovCitzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSB1bml2ZXJzYWxfaHNtbWMwX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkubWF4X3dpZHRoCQk9IDgsCisJLmhvc3RfY2FwcwkJPSAoTU1DX0NBUF84X0JJVF9EQVRBIHwgTU1DX0NBUF80X0JJVF9EQVRBIHwKKwkJCQlNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8CisJCQkJTU1DX0NBUF9ESVNBQkxFKSwKKwkuY2RfdHlwZQkJPSBTM0NfU0RIQ0lfQ0RfUEVSTUFORU5ULAorCS5jbGtfdHlwZQkJPSBTM0NfU0RIQ0lfQ0xLX0RJVl9FWFRFUk5BTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBtbWMwX3N1cHBsaWVzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJzM2Mtc2RoY2kuMCIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG1tYzBfZml4ZWRfdm9sdGFnZV9pbml0X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCQk9IHsKKwkJLm5hbWUJCT0gIlZNRU1fVkREXzIuOFYiLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKG1tYzBfc3VwcGxpZXMpLAorCS5jb25zdW1lcl9zdXBwbGllcwk9IG1tYzBfc3VwcGxpZXMsCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIG1tYzBfZml4ZWRfdm9sdGFnZV9jb25maWcgPSB7CisJLnN1cHBseV9uYW1lCQk9ICJNQVNTTUVNT1JZX0VOIiwKKwkubWljcm92b2x0cwkJPSAyODAwMDAwLAorCS5ncGlvCQkJPSBFWFlOT1M0X0dQRTEoMyksCisJLmVuYWJsZV9oaWdoCQk9IHRydWUsCisJLmluaXRfZGF0YQkJPSAmbW1jMF9maXhlZF92b2x0YWdlX2luaXRfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1tYzBfZml4ZWRfdm9sdGFnZSA9IHsKKwkubmFtZQkJCT0gInJlZy1maXhlZC12b2x0YWdlIiwKKwkuaWQJCQk9IDAsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZtbWMwX2ZpeGVkX3ZvbHRhZ2VfY29uZmlnLAorCX0sCit9OworCisvKiBTRCAqLworc3RhdGljIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgdW5pdmVyc2FsX2hzbW1jMl9kYXRhIF9faW5pdGRhdGEgPSB7CisJLm1heF93aWR0aAkJPSA0LAorCS5ob3N0X2NhcHMJCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwKKwkJCQlNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8CisJCQkJTU1DX0NBUF9ESVNBQkxFLAorCS5leHRfY2RfZ3BpbwkJPSBFWFlOT1M0X0dQWDMoNCksICAgICAgLyogWEVJTlRfMjggKi8KKwkuZXh0X2NkX2dwaW9faW52ZXJ0CT0gMSwKKwkuY2RfdHlwZQkJPSBTM0NfU0RIQ0lfQ0RfR1BJTywKKwkuY2xrX3R5cGUJCT0gUzNDX1NESENJX0NMS19ESVZfRVhURVJOQUwsCit9OworCisvKiBXaUZpICovCitzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSB1bml2ZXJzYWxfaHNtbWMzX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkubWF4X3dpZHRoCQk9IDQsCisJLmhvc3RfY2FwcwkJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfAorCQkJCU1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEIHwKKwkJCQlNTUNfQ0FQX0RJU0FCTEUsCisJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX0VYVEVSTkFMLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHVuaXZlcnNhbF9zZGhjaV9pbml0KHZvaWQpCit7CisJczNjX3NkaGNpMF9zZXRfcGxhdGRhdGEoJnVuaXZlcnNhbF9oc21tYzBfZGF0YSk7CisJczNjX3NkaGNpMl9zZXRfcGxhdGRhdGEoJnVuaXZlcnNhbF9oc21tYzJfZGF0YSk7CisJczNjX3NkaGNpM19zZXRfcGxhdGRhdGEoJnVuaXZlcnNhbF9oc21tYzNfZGF0YSk7Cit9CisKKy8qIEkyQzAgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaTJjMF9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkvKiBDYW1lcmEsIFRvIGJlIHVwZGF0ZWQgKi8KK307CisKKy8qIEkyQzEgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaTJjMV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkvKiBHeXJvLCBUbyBiZSB1cGRhdGVkICovCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdW5pdmVyc2FsX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCS8qIFNhbXN1bmcgUGxhdGZvcm0gRGV2aWNlcyAqLworCSZtbWMwX2ZpeGVkX3ZvbHRhZ2UsCisJJnMzY19kZXZpY2VfaHNtbWMwLAorCSZzM2NfZGV2aWNlX2hzbW1jMiwKKwkmczNjX2RldmljZV9oc21tYzMsCisJJnMzY19kZXZpY2VfaTJjNSwKKworCS8qIFVuaXZlcnNhbCBEZXZpY2VzICovCisJJnVuaXZlcnNhbF9ncGlvX2tleXMsCisJJnM1cF9kZXZpY2Vfb25lbmFuZCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB1bml2ZXJzYWxfbWFwX2lvKHZvaWQpCit7CisJczVwX2luaXRfaW8oTlVMTCwgMCwgUzVQX1ZBX0NISVBJRCk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygyNDAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKHVuaXZlcnNhbF91YXJ0Y2ZncywgQVJSQVlfU0laRSh1bml2ZXJzYWxfdWFydGNmZ3MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHVuaXZlcnNhbF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwl1bml2ZXJzYWxfc2RoY2lfaW5pdCgpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjMF9kZXZzLCBBUlJBWV9TSVpFKGkyYzBfZGV2cykpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyYzFfZGV2cywgQVJSQVlfU0laRShpMmMxX2RldnMpKTsKKworCXMzY19pMmM1X3NldF9wbGF0ZGF0YShOVUxMKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyg1LCBpMmM1X2RldnMsIEFSUkFZX1NJWkUoaTJjNV9kZXZzKSk7CisKKwkvKiBMYXN0ICovCisJcGxhdGZvcm1fYWRkX2RldmljZXModW5pdmVyc2FsX2RldmljZXMsIEFSUkFZX1NJWkUodW5pdmVyc2FsX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChVTklWRVJTQUxfQzIxMCwgIlVOSVZFUlNBTF9DMjEwIikKKwkvKiBNYWludGFpbmVyOiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPiAqLworCS5ib290X3BhcmFtcwk9IFM1UF9QQV9TRFJBTSArIDB4MTAwLAorCS5pbml0X2lycQk9IGV4eW5vczRfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSB1bml2ZXJzYWxfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSB1bml2ZXJzYWxfbWFjaGluZV9pbml0LAorCS50aW1lcgkJPSAmZXh5bm9zNF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWN0LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4MmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tY3QuYwpAQCAtMCwwICsxLDQyMSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L21jdC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIEVYWU5PUzQgTUNUKE11bHRpLUNvcmUgVGltZXIpIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1tY3QuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19jbnRfcGVyX3RpY2s7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKKworc3RydWN0IG1jdF9jbG9ja19ldmVudF9kZXZpY2UgeworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7Cit9OworCitzdHJ1Y3QgbWN0X2Nsb2NrX2V2ZW50X2RldmljZSBtY3RfdGlja1syXTsKKworc3RhdGljIHZvaWQgZXh5bm9zNF9tY3Rfd3JpdGUodW5zaWduZWQgaW50IHZhbHVlLCB2b2lkICphZGRyKQoreworCXZvaWQgX19pb21lbSAqc3RhdF9hZGRyOworCXUzMiBtYXNrOworCXUzMiBpOworCisJX19yYXdfd3JpdGVsKHZhbHVlLCBhZGRyKTsKKworCXN3aXRjaCAoKHUzMikgYWRkcikgeworCWNhc2UgKHUzMikgRVhZTk9TNF9NQ1RfR19UQ09OOgorCQlzdGF0X2FkZHIgPSBFWFlOT1M0X01DVF9HX1dTVEFUOworCQltYXNrID0gMSA8PCAxNjsJCS8qIEdfVENPTiB3cml0ZSBzdGF0dXMgKi8KKwkJYnJlYWs7CisJY2FzZSAodTMyKSBFWFlOT1M0X01DVF9HX0NPTVAwX0w6CisJCXN0YXRfYWRkciA9IEVYWU5PUzRfTUNUX0dfV1NUQVQ7CisJCW1hc2sgPSAxIDw8IDA7CQkvKiBHX0NPTVAwX0wgd3JpdGUgc3RhdHVzICovCisJCWJyZWFrOworCWNhc2UgKHUzMikgRVhZTk9TNF9NQ1RfR19DT01QMF9VOgorCQlzdGF0X2FkZHIgPSBFWFlOT1M0X01DVF9HX1dTVEFUOworCQltYXNrID0gMSA8PCAxOwkJLyogR19DT01QMF9VIHdyaXRlIHN0YXR1cyAqLworCQlicmVhazsKKwljYXNlICh1MzIpIEVYWU5PUzRfTUNUX0dfQ09NUDBfQUREX0lOQ1I6CisJCXN0YXRfYWRkciA9IEVYWU5PUzRfTUNUX0dfV1NUQVQ7CisJCW1hc2sgPSAxIDw8IDI7CQkvKiBHX0NPTVAwX0FERF9JTkNSIHdyaXRlIHN0YXR1cyAqLworCQlicmVhazsKKwljYXNlICh1MzIpIEVYWU5PUzRfTUNUX0dfQ05UX0w6CisJCXN0YXRfYWRkciA9IEVYWU5PUzRfTUNUX0dfQ05UX1dTVEFUOworCQltYXNrID0gMSA8PCAwOwkJLyogR19DTlRfTCB3cml0ZSBzdGF0dXMgKi8KKwkJYnJlYWs7CisJY2FzZSAodTMyKSBFWFlOT1M0X01DVF9HX0NOVF9VOgorCQlzdGF0X2FkZHIgPSBFWFlOT1M0X01DVF9HX0NOVF9XU1RBVDsKKwkJbWFzayA9IDEgPDwgMTsJCS8qIEdfQ05UX1Ugd3JpdGUgc3RhdHVzICovCisJCWJyZWFrOworCWNhc2UgKHUzMikoRVhZTk9TNF9NQ1RfTDBfQkFTRSArIE1DVF9MX1RDT05fT0ZGU0VUKToKKwkJc3RhdF9hZGRyID0gRVhZTk9TNF9NQ1RfTDBfQkFTRSArIE1DVF9MX1dTVEFUX09GRlNFVDsKKwkJbWFzayA9IDEgPDwgMzsJCS8qIEwwX1RDT04gd3JpdGUgc3RhdHVzICovCisJCWJyZWFrOworCWNhc2UgKHUzMikoRVhZTk9TNF9NQ1RfTDFfQkFTRSArIE1DVF9MX1RDT05fT0ZGU0VUKToKKwkJc3RhdF9hZGRyID0gRVhZTk9TNF9NQ1RfTDFfQkFTRSArIE1DVF9MX1dTVEFUX09GRlNFVDsKKwkJbWFzayA9IDEgPDwgMzsJCS8qIEwxX1RDT04gd3JpdGUgc3RhdHVzICovCisJCWJyZWFrOworCWNhc2UgKHUzMikoRVhZTk9TNF9NQ1RfTDBfQkFTRSArIE1DVF9MX1RDTlRCX09GRlNFVCk6CisJCXN0YXRfYWRkciA9IEVYWU5PUzRfTUNUX0wwX0JBU0UgKyBNQ1RfTF9XU1RBVF9PRkZTRVQ7CisJCW1hc2sgPSAxIDw8IDA7CQkvKiBMMF9UQ05UQiB3cml0ZSBzdGF0dXMgKi8KKwkJYnJlYWs7CisJY2FzZSAodTMyKShFWFlOT1M0X01DVF9MMV9CQVNFICsgTUNUX0xfVENOVEJfT0ZGU0VUKToKKwkJc3RhdF9hZGRyID0gRVhZTk9TNF9NQ1RfTDFfQkFTRSArIE1DVF9MX1dTVEFUX09GRlNFVDsKKwkJbWFzayA9IDEgPDwgMDsJCS8qIEwxX1RDTlRCIHdyaXRlIHN0YXR1cyAqLworCQlicmVhazsKKwljYXNlICh1MzIpKEVYWU5PUzRfTUNUX0wwX0JBU0UgKyBNQ1RfTF9JQ05UQl9PRkZTRVQpOgorCQlzdGF0X2FkZHIgPSBFWFlOT1M0X01DVF9MMF9CQVNFICsgTUNUX0xfV1NUQVRfT0ZGU0VUOworCQltYXNrID0gMSA8PCAxOwkJLyogTDBfSUNOVEIgd3JpdGUgc3RhdHVzICovCisJCWJyZWFrOworCWNhc2UgKHUzMikoRVhZTk9TNF9NQ1RfTDFfQkFTRSArIE1DVF9MX0lDTlRCX09GRlNFVCk6CisJCXN0YXRfYWRkciA9IEVYWU5PUzRfTUNUX0wxX0JBU0UgKyBNQ1RfTF9XU1RBVF9PRkZTRVQ7CisJCW1hc2sgPSAxIDw8IDE7CQkvKiBMMV9JQ05UQiB3cml0ZSBzdGF0dXMgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCS8qIFdhaXQgbWF4aW11bSAxIG1zIHVudGlsIHdyaXR0ZW4gdmFsdWVzIGFyZSBhcHBsaWVkICovCisJZm9yIChpID0gMDsgaSA8IGxvb3BzX3Blcl9qaWZmeSAvIDEwMDAgKiBIWjsgaSsrKQorCQlpZiAoX19yYXdfcmVhZGwoc3RhdF9hZGRyKSAmIG1hc2spIHsKKwkJCV9fcmF3X3dyaXRlbChtYXNrLCBzdGF0X2FkZHIpOworCQkJcmV0dXJuOworCQl9CisKKwlwYW5pYygiTUNUIGhhbmdzIGFmdGVyIHdyaXRpbmcgJWQgKGFkZHI6MHglMDh4KVxuIiwgdmFsdWUsICh1MzIpYWRkcik7Cit9CisKKy8qIENsb2Nrc291cmNlIGhhbmRsaW5nICovCitzdGF0aWMgdm9pZCBleHlub3M0X21jdF9mcmNfc3RhcnQodTMyIGhpLCB1MzIgbG8pCit7CisJdTMyIHJlZzsKKworCWV4eW5vczRfbWN0X3dyaXRlKGxvLCBFWFlOT1M0X01DVF9HX0NOVF9MKTsKKwlleHlub3M0X21jdF93cml0ZShoaSwgRVhZTk9TNF9NQ1RfR19DTlRfVSk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChFWFlOT1M0X01DVF9HX1RDT04pOworCXJlZyB8PSBNQ1RfR19UQ09OX1NUQVJUOworCWV4eW5vczRfbWN0X3dyaXRlKHJlZywgRVhZTk9TNF9NQ1RfR19UQ09OKTsKK30KKworc3RhdGljIGN5Y2xlX3QgZXh5bm9zNF9mcmNfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXVuc2lnbmVkIGludCBsbywgaGk7CisJdTMyIGhpMiA9IF9fcmF3X3JlYWRsKEVYWU5PUzRfTUNUX0dfQ05UX1UpOworCisJZG8geworCQloaSA9IGhpMjsKKwkJbG8gPSBfX3Jhd19yZWFkbChFWFlOT1M0X01DVF9HX0NOVF9MKTsKKwkJaGkyID0gX19yYXdfcmVhZGwoRVhZTk9TNF9NQ1RfR19DTlRfVSk7CisJfSB3aGlsZSAoaGkgIT0gaGkyKTsKKworCXJldHVybiAoKGN5Y2xlX3QpaGkgPDwgMzIpIHwgbG87Cit9CisKK3N0cnVjdCBjbG9ja3NvdXJjZSBtY3RfZnJjID0geworCS5uYW1lCQk9ICJtY3QtZnJjIiwKKwkucmF0aW5nCQk9IDQwMCwKKwkucmVhZAkJPSBleHlub3M0X2ZyY19yZWFkLAorCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soNjQpLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3M0X2Nsb2Nrc291cmNlX2luaXQodm9pZCkKK3sKKwlleHlub3M0X21jdF9mcmNfc3RhcnQoMCwgMCk7CisKKwlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJm1jdF9mcmMsIGNsa19yYXRlKSkKKwkJcGFuaWMoIiVzOiBjYW4ndCByZWdpc3RlciBjbG9ja3NvdXJjZVxuIiwgbWN0X2ZyYy5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNF9tY3RfY29tcDBfc3RvcCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0Y29uOworCisJdGNvbiA9IF9fcmF3X3JlYWRsKEVYWU5PUzRfTUNUX0dfVENPTik7CisJdGNvbiAmPSB+KE1DVF9HX1RDT05fQ09NUDBfRU5BQkxFIHwgTUNUX0dfVENPTl9DT01QMF9BVVRPX0lOQyk7CisKKwlleHlub3M0X21jdF93cml0ZSh0Y29uLCBFWFlOT1M0X01DVF9HX1RDT04pOworCWV4eW5vczRfbWN0X3dyaXRlKDAsIEVYWU5PUzRfTUNUX0dfSU5UX0VOQik7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczRfbWN0X2NvbXAwX3N0YXJ0KGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGN5Y2xlcykKK3sKKwl1bnNpZ25lZCBpbnQgdGNvbjsKKwljeWNsZV90IGNvbXBfY3ljbGU7CisKKwl0Y29uID0gX19yYXdfcmVhZGwoRVhZTk9TNF9NQ1RfR19UQ09OKTsKKworCWlmIChtb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKSB7CisJCXRjb24gfD0gTUNUX0dfVENPTl9DT01QMF9BVVRPX0lOQzsKKwkJZXh5bm9zNF9tY3Rfd3JpdGUoY3ljbGVzLCBFWFlOT1M0X01DVF9HX0NPTVAwX0FERF9JTkNSKTsKKwl9CisKKwljb21wX2N5Y2xlID0gZXh5bm9zNF9mcmNfcmVhZCgmbWN0X2ZyYykgKyBjeWNsZXM7CisJZXh5bm9zNF9tY3Rfd3JpdGUoKHUzMiljb21wX2N5Y2xlLCBFWFlOT1M0X01DVF9HX0NPTVAwX0wpOworCWV4eW5vczRfbWN0X3dyaXRlKCh1MzIpKGNvbXBfY3ljbGUgPj4gMzIpLCBFWFlOT1M0X01DVF9HX0NPTVAwX1UpOworCisJZXh5bm9zNF9tY3Rfd3JpdGUoMHgxLCBFWFlOT1M0X01DVF9HX0lOVF9FTkIpOworCisJdGNvbiB8PSBNQ1RfR19UQ09OX0NPTVAwX0VOQUJMRTsKKwlleHlub3M0X21jdF93cml0ZSh0Y29uICwgRVhZTk9TNF9NQ1RfR19UQ09OKTsKK30KKworc3RhdGljIGludCBleHlub3M0X2NvbXBfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBjeWNsZXMsCisJCQkJICAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlleHlub3M0X21jdF9jb21wMF9zdGFydChldnQtPm1vZGUsIGN5Y2xlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNF9jb21wX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCWV4eW5vczRfbWN0X2NvbXAwX3N0b3AoKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCWV4eW5vczRfbWN0X2NvbXAwX3N0YXJ0KG1vZGUsIGNsa19jbnRfcGVyX3RpY2spOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIG1jdF9jb21wX2RldmljZSA9IHsKKwkubmFtZQkJPSAibWN0LWNvbXAiLAorCS5mZWF0dXJlcyAgICAgICA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkucmF0aW5nCQk9IDI1MCwKKwkuc2V0X25leHRfZXZlbnQJPSBleHlub3M0X2NvbXBfc2V0X25leHRfZXZlbnQsCisJLnNldF9tb2RlCT0gZXh5bm9zNF9jb21wX3NldF9tb2RlLAorfTsKKworc3RhdGljIGlycXJldHVybl90IGV4eW5vczRfbWN0X2NvbXBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7CisKKwlleHlub3M0X21jdF93cml0ZSgweDEsIEVYWU5PUzRfTUNUX0dfSU5UX0NTVEFUKTsKKworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtY3RfY29tcF9ldmVudF9pcnEgPSB7CisJLm5hbWUJCT0gIm1jdF9jb21wX2lycSIsCisJLmZsYWdzCQk9IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIJPSBleHlub3M0X21jdF9jb21wX2lzciwKKwkuZGV2X2lkCQk9ICZtY3RfY29tcF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBleHlub3M0X2Nsb2NrZXZlbnRfaW5pdCh2b2lkKQoreworCWNsa19jbnRfcGVyX3RpY2sgPSBjbGtfcmF0ZSAvIDIJLyBIWjsKKworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdCgmbWN0X2NvbXBfZGV2aWNlLCBjbGtfcmF0ZSAvIDIsIDUpOworCW1jdF9jb21wX2RldmljZS5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmYsICZtY3RfY29tcF9kZXZpY2UpOworCW1jdF9jb21wX2RldmljZS5taW5fZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZiwgJm1jdF9jb21wX2RldmljZSk7CisJbWN0X2NvbXBfZGV2aWNlLmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmbWN0X2NvbXBfZGV2aWNlKTsKKworCXNldHVwX2lycShJUlFfTUNUX0cwLCAmbWN0X2NvbXBfZXZlbnRfaXJxKTsKK30KKworI2lmZGVmIENPTkZJR19MT0NBTF9USU1FUlMKKy8qIENsb2NrIGV2ZW50IGhhbmRsaW5nICovCitzdGF0aWMgdm9pZCBleHlub3M0X21jdF90aWNrX3N0b3Aoc3RydWN0IG1jdF9jbG9ja19ldmVudF9kZXZpY2UgKm1ldnQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gTUNUX0xfVENPTl9JTlRfU1RBUlQgfCBNQ1RfTF9UQ09OX1RJTUVSX1NUQVJUOworCXZvaWQgX19pb21lbSAqYWRkciA9IG1ldnQtPmJhc2UgKyBNQ1RfTF9UQ09OX09GRlNFVDsKKworCXRtcCA9IF9fcmF3X3JlYWRsKGFkZHIpOworCWlmICh0bXAgJiBtYXNrKSB7CisJCXRtcCAmPSB+bWFzazsKKwkJZXh5bm9zNF9tY3Rfd3JpdGUodG1wLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczRfbWN0X3RpY2tfc3RhcnQodW5zaWduZWQgbG9uZyBjeWNsZXMsCisJCQkJICAgc3RydWN0IG1jdF9jbG9ja19ldmVudF9kZXZpY2UgKm1ldnQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlleHlub3M0X21jdF90aWNrX3N0b3AobWV2dCk7CisKKwl0bXAgPSAoMSA8PCAzMSkgfCBjeWNsZXM7CS8qIE1DVF9MX1VQREFURV9JQ05UQiAqLworCisJLyogdXBkYXRlIGludGVycnVwdCBjb3VudCBidWZmZXIgKi8KKwlleHlub3M0X21jdF93cml0ZSh0bXAsIG1ldnQtPmJhc2UgKyBNQ1RfTF9JQ05UQl9PRkZTRVQpOworCisJLyogZW5hYmxlIE1DVCB0aWNrIGludGVydXB0ICovCisJZXh5bm9zNF9tY3Rfd3JpdGUoMHgxLCBtZXZ0LT5iYXNlICsgTUNUX0xfSU5UX0VOQl9PRkZTRVQpOworCisJdG1wID0gX19yYXdfcmVhZGwobWV2dC0+YmFzZSArIE1DVF9MX1RDT05fT0ZGU0VUKTsKKwl0bXAgfD0gTUNUX0xfVENPTl9JTlRfU1RBUlQgfCBNQ1RfTF9UQ09OX1RJTUVSX1NUQVJUIHwKKwkgICAgICAgTUNUX0xfVENPTl9JTlRFUlZBTF9NT0RFOworCWV4eW5vczRfbWN0X3dyaXRlKHRtcCwgbWV2dC0+YmFzZSArIE1DVF9MX1RDT05fT0ZGU0VUKTsKK30KKworc3RhdGljIGludCBleHlub3M0X3RpY2tfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBjeWNsZXMsCisJCQkJICAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlzdHJ1Y3QgbWN0X2Nsb2NrX2V2ZW50X2RldmljZSAqbWV2dCA9ICZtY3RfdGlja1tzbXBfcHJvY2Vzc29yX2lkKCldOworCisJZXh5bm9zNF9tY3RfdGlja19zdGFydChjeWNsZXMsIG1ldnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHlub3M0X3RpY2tfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJCSBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3RydWN0IG1jdF9jbG9ja19ldmVudF9kZXZpY2UgKm1ldnQgPSAmbWN0X3RpY2tbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCWV4eW5vczRfbWN0X3RpY2tfc3RvcChtZXZ0KTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCWV4eW5vczRfbWN0X3RpY2tfc3RhcnQoY2xrX2NudF9wZXJfdGljaywgbWV2dCk7CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IGV4eW5vczRfbWN0X3RpY2tfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWN0X2Nsb2NrX2V2ZW50X2RldmljZSAqbWV2dCA9IGRldl9pZDsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBtZXZ0LT5ldnQ7CisKKwkvKgorCSAqIFRoaXMgaXMgZm9yIHN1cHBvcnRpbmcgb25lc2hvdCBtb2RlLgorCSAqIE1jdCB3b3VsZCBnZW5lcmF0ZSBpbnRlcnJ1cHQgcGVyaW9kaWNhbGx5CisJICogd2l0aG91dCBleHBsaWNpdCBzdG9wcGluZy4KKwkgKi8KKwlpZiAoZXZ0LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQorCQlleHlub3M0X21jdF90aWNrX3N0b3AobWV2dCk7CisKKwkvKiBDbGVhciB0aGUgTUNUIHRpY2sgaW50ZXJydXB0ICovCisJZXh5bm9zNF9tY3Rfd3JpdGUoMHgxLCBtZXZ0LT5iYXNlICsgTUNUX0xfSU5UX0NTVEFUX09GRlNFVCk7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbWN0X3RpY2swX2V2ZW50X2lycSA9IHsKKwkubmFtZQkJPSAibWN0X3RpY2swX2lycSIsCisJLmZsYWdzCQk9IElSUUZfVElNRVIgfCBJUlFGX05PQkFMQU5DSU5HLAorCS5oYW5kbGVyCT0gZXh5bm9zNF9tY3RfdGlja19pc3IsCit9OworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtY3RfdGljazFfZXZlbnRfaXJxID0geworCS5uYW1lCQk9ICJtY3RfdGljazFfaXJxIiwKKwkuZmxhZ3MJCT0gSVJRRl9USU1FUiB8IElSUUZfTk9CQUxBTkNJTkcsCisJLmhhbmRsZXIJPSBleHlub3M0X21jdF90aWNrX2lzciwKK307CisKK3N0YXRpYyB2b2lkIGV4eW5vczRfbWN0X3RpY2tfaW5pdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCW1jdF90aWNrW2NwdV0uZXZ0ID0gZXZ0OworCisJaWYgKGNwdSA9PSAwKSB7CisJCW1jdF90aWNrW2NwdV0uYmFzZSA9IEVYWU5PUzRfTUNUX0wwX0JBU0U7CisJCWV2dC0+bmFtZSA9ICJtY3RfdGljazAiOworCX0gZWxzZSB7CisJCW1jdF90aWNrW2NwdV0uYmFzZSA9IEVYWU5PUzRfTUNUX0wxX0JBU0U7CisJCWV2dC0+bmFtZSA9ICJtY3RfdGljazEiOworCX0KKworCWV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoY3B1KTsKKwlldnQtPnNldF9uZXh0X2V2ZW50ID0gZXh5bm9zNF90aWNrX3NldF9uZXh0X2V2ZW50OworCWV2dC0+c2V0X21vZGUgPSBleHlub3M0X3RpY2tfc2V0X21vZGU7CisJZXZ0LT5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVDsKKwlldnQtPnJhdGluZyA9IDQ1MDsKKworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdChldnQsIGNsa19yYXRlIC8gMiwgNSk7CisJZXZ0LT5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZmZmZmYsIGV2dCk7CisJZXZ0LT5taW5fZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZiwgZXZ0KTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShldnQpOworCisJZXh5bm9zNF9tY3Rfd3JpdGUoMHgxLCBtY3RfdGlja1tjcHVdLmJhc2UgKyBNQ1RfTF9UQ05UQl9PRkZTRVQpOworCisJaWYgKGNwdSA9PSAwKSB7CisJCW1jdF90aWNrMF9ldmVudF9pcnEuZGV2X2lkID0gJm1jdF90aWNrW2NwdV07CisJCXNldHVwX2lycShJUlFfTUNUX0wwLCAmbWN0X3RpY2swX2V2ZW50X2lycSk7CisJfSBlbHNlIHsKKwkJbWN0X3RpY2sxX2V2ZW50X2lycS5kZXZfaWQgPSAmbWN0X3RpY2tbY3B1XTsKKwkJaXJxX3NldF9hZmZpbml0eShJUlFfTUNUMSwgY3B1bWFza19vZigxKSk7CisJCXNldHVwX2lycShJUlFfTUNUX0wxLCAmbWN0X3RpY2sxX2V2ZW50X2lycSk7CisJfQorfQorCisvKiBTZXR1cCB0aGUgbG9jYWwgY2xvY2sgZXZlbnRzIGZvciBhIENQVSAqLwordm9pZCBfX2NwdWluaXQgbG9jYWxfdGltZXJfc2V0dXAoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCWV4eW5vczRfbWN0X3RpY2tfaW5pdChldnQpOworfQorCitpbnQgbG9jYWxfdGltZXJfYWNrKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTE9DQUxfVElNRVJTICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBleHlub3M0X3RpbWVyX3Jlc291cmNlcyh2b2lkKQoreworCXN0cnVjdCBjbGsgKm1jdF9jbGs7CisJbWN0X2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKKworCWNsa19yYXRlID0gY2xrX2dldF9yYXRlKG1jdF9jbGspOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNF90aW1lcl9pbml0KHZvaWQpCit7CisJZXh5bm9zNF90aW1lcl9yZXNvdXJjZXMoKTsKKwlleHlub3M0X2Nsb2Nrc291cmNlX2luaXQoKTsKKwlleHlub3M0X2Nsb2NrZXZlbnRfaW5pdCgpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIGV4eW5vczRfdGltZXIgPSB7CisJLmluaXQJCT0gZXh5bm9zNF90aW1lcl9pbml0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvcGxhdHNtcC5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9wbGF0c21wLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9wbGF0c21wLmMKaW5kZXggMzQwOTNiMC4uNmQzNTg3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvcGxhdHNtcC5jCkBAIC0xLDcgKzEsNyBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3BsYXRzbXAuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L3BsYXRzbXAuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCiAgKiBDbG9uZWQgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYwogICoKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAKLWV4dGVybiB2b2lkIHM1cHYzMTBfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CitleHRlcm4gdm9pZCBleHlub3M0X3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogCiAvKgogICogY29udHJvbCBmb3Igd2hpY2ggY29yZSBpcyB0aGUgbmV4dCB0byBjb21lIG91dCBvZiB0aGUgc2Vjb25kYXJ5CkBAIC0xMzksNyArMTM5LDcgQEAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KIAlpZiAobmNvcmVzID4gTlJfQ1BVUykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiUzVQVjMxMDogbm8uIG9mIGNvcmVzICglZCkgZ3JlYXRlciB0aGFuIGNvbmZpZ3VyZWQgIgorCQkgICAgICAgIkVYWU5PUzQ6IG5vLiBvZiBjb3JlcyAoJWQpIGdyZWF0ZXIgdGhhbiBjb25maWd1cmVkICIKIAkJICAgICAgICJtYXhpbXVtIG9mICVkIC0gY2xpcHBpbmdcbiIsCiAJCSAgICAgICBuY29yZXMsIE5SX0NQVVMpOwogCQluY29yZXMgPSBOUl9DUFVTOwpAQCAtMTY4LDUgKzE2OCw1IEBACiAJICogdW50aWwgaXQgcmVjZWl2ZXMgYSBzb2Z0IGludGVycnVwdCwgYW5kIHRoZW4gdGhlCiAJICogc2Vjb25kYXJ5IENQVSBicmFuY2hlcyB0byB0aGlzIGFkZHJlc3MuCiAJICovCi0JX19yYXdfd3JpdGVsKEJTWU0odmlydF90b19waHlzKHM1cHYzMTBfc2Vjb25kYXJ5X3N0YXJ0dXApKSwgUzVQX1ZBX1NZU1JBTSk7CisJX19yYXdfd3JpdGVsKEJTWU0odmlydF90b19waHlzKGV4eW5vczRfc2Vjb25kYXJ5X3N0YXJ0dXApKSwgUzVQX1ZBX1NZU1JBTSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvcG0uYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDkxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvcG0uYwpAQCAtMCwwICsxLDQyMCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TNDIxMCAtIFBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1wbXUuaD4KKyNpbmNsdWRlIDxtYWNoL3BtLWNvcmUuaD4KKworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGV4eW5vczRfc2xlZXBbXSA9IHsKKwl7IC5yZWcgPSBTNVBfQVJNX0NPUkUwX0xPV1BXUgkJCSwgLnZhbCA9IDB4MiwgfSwKKwl7IC5yZWcgPSBTNVBfRElTX0lSUV9DT1JFMAkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfRElTX0lSUV9DRU5UUkFMMAkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfQVJNX0NPUkUxX0xPV1BXUgkJCSwgLnZhbCA9IDB4MiwgfSwKKwl7IC5yZWcgPSBTNVBfRElTX0lSUV9DT1JFMQkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfRElTX0lSUV9DRU5UUkFMMQkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfQVJNX0NPTU1PTl9MT1dQV1IJCQksIC52YWwgPSAweDIsIH0sCisJeyAucmVnID0gUzVQX0wyXzBfTE9XUFdSCQkJLCAudmFsID0gMHgzLCB9LAorCXsgLnJlZyA9IFM1UF9MMl8xX0xPV1BXUgkJCSwgLnZhbCA9IDB4MywgfSwKKwl7IC5yZWcgPSBTNVBfQ01VX0FDTEtTVE9QX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9DTVVfU0NMS1NUT1BfTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0NNVV9SRVNFVF9MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0FQTExfU1lTQ0xLX0xPV1BXUgkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfTVBMTF9TWVNDTEtfTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9WUExMX1NZU0NMS19MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0VQTExfU1lTQ0xLX0xPV1BXUgkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfQ01VX0NMS1NUT1BfR1BTX0FMSVZFX0xPV1BXUgksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0NNVV9SRVNFVF9HUFNBTElWRV9MT1dQV1IJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfQ01VX0NMS1NUT1BfQ0FNX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9DTVVfQ0xLU1RPUF9UVl9MT1dQV1IJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfQ01VX0NMS1NUT1BfTUZDX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9DTVVfQ0xLU1RPUF9HM0RfTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0NNVV9DTEtTVE9QX0xDRDBfTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0NNVV9DTEtTVE9QX0xDRDFfTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0NNVV9DTEtTVE9QX01BVURJT19MT1dQV1IJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfQ01VX0NMS1NUT1BfR1BTX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9DTVVfUkVTRVRfQ0FNX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9DTVVfUkVTRVRfVFZfTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0NNVV9SRVNFVF9NRkNfTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0NNVV9SRVNFVF9HM0RfTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0NNVV9SRVNFVF9MQ0QwX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9DTVVfUkVTRVRfTENEMV9MT1dQV1IJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfQ01VX1JFU0VUX01BVURJT19MT1dQV1IJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfQ01VX1JFU0VUX0dQU19MT1dQV1IJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfVE9QX0JVU19MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX1RPUF9SRVRFTlRJT05fTE9XUFdSCQksIC52YWwgPSAweDEsIH0sCisJeyAucmVnID0gUzVQX1RPUF9QV1JfTE9XUFdSCQkJLCAudmFsID0gMHgzLCB9LAorCXsgLnJlZyA9IFM1UF9MT0dJQ19SRVNFVF9MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX09ORU5BTkRfTUVNX0xPV1BXUgkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfTU9ESU1JRl9NRU1fTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9HMkRfQUNQX01FTV9MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX1VTQk9UR19NRU1fTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9IU01NQ19NRU1fTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9DU1NZU19NRU1fTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9TRUNTU19NRU1fTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9QQ0lFX01FTV9MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX1NBVEFfTUVNX0xPV1BXUgkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfUEFEX1JFVEVOVElPTl9EUkFNX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9QQURfUkVURU5USU9OX01BVURJT19MT1dQV1IJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9QQURfUkVURU5USU9OX0dQSU9fTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX1BBRF9SRVRFTlRJT05fVUFSVF9MT1dQV1IJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfUEFEX1JFVEVOVElPTl9NTUNBX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9QQURfUkVURU5USU9OX01NQ0JfTE9XUFdSCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX1BBRF9SRVRFTlRJT05fRUJJQV9MT1dQV1IJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfUEFEX1JFVEVOVElPTl9FQklCX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9QQURfUkVURU5USU9OX0lTT0xBVElPTl9MT1dQV1IJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9QQURfUkVURU5USU9OX0FMVl9TRUxfTE9XUFdSCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfWFVTQlhUSV9MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX1hYVElfTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9FWFRfUkVHVUxBVE9SX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9HUElPX01PREVfTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9HUElPX01PREVfTUFVRElPX0xPV1BXUgkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9DQU1fTE9XUFdSCQkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfVFZfTE9XUFdSCQkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfTUZDX0xPV1BXUgkJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0czRF9MT1dQV1IJCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9MQ0QwX0xPV1BXUgkJCSwgLnZhbCA9IDB4MCwgfSwKKwl7IC5yZWcgPSBTNVBfTENEMV9MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX01BVURJT19MT1dQV1IJCQksIC52YWwgPSAweDAsIH0sCisJeyAucmVnID0gUzVQX0dQU19MT1dQV1IJCQkJLCAudmFsID0gMHgwLCB9LAorCXsgLnJlZyA9IFM1UF9HUFNfQUxJVkVfTE9XUFdSCQkJLCAudmFsID0gMHgwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGV4eW5vczRfc2V0X2Nsa3NyY1tdID0geworCXsgLnJlZyA9IFM1UF9DTEtTUkNfTUFTS19UT1AJCQksIC52YWwgPSAweDAwMDAwMDAxLCB9LAorCXsgLnJlZyA9IFM1UF9DTEtTUkNfTUFTS19DQU0JCQksIC52YWwgPSAweDExMTExMTExLCB9LAorCXsgLnJlZyA9IFM1UF9DTEtTUkNfTUFTS19UVgkJCSwgLnZhbCA9IDB4MDAwMDAxMTEsIH0sCisJeyAucmVnID0gUzVQX0NMS1NSQ19NQVNLX0xDRDAJCQksIC52YWwgPSAweDAwMDAxMTExLCB9LAorCXsgLnJlZyA9IFM1UF9DTEtTUkNfTUFTS19MQ0QxCQkJLCAudmFsID0gMHgwMDAwMTExMSwgfSwKKwl7IC5yZWcgPSBTNVBfQ0xLU1JDX01BU0tfTUFVRElPCQkJLCAudmFsID0gMHgwMDAwMDAwMSwgfSwKKwl7IC5yZWcgPSBTNVBfQ0xLU1JDX01BU0tfRlNZUwkJCSwgLnZhbCA9IDB4MDEwMTExMTEsIH0sCisJeyAucmVnID0gUzVQX0NMS1NSQ19NQVNLX1BFUklMMAkJCSwgLnZhbCA9IDB4MDExMTExMTEsIH0sCisJeyAucmVnID0gUzVQX0NMS1NSQ19NQVNLX1BFUklMMQkJCSwgLnZhbCA9IDB4MDExMTAxMTEsIH0sCisJeyAucmVnID0gUzVQX0NMS1NSQ19NQVNLX0RNQwkJCSwgLnZhbCA9IDB4MDAwMTAwMDAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgZXh5bm9zNF9jb3JlX3NhdmVbXSA9IHsKKwkvKiBDTVUgc2lkZSAqLworCVNBVkVfSVRFTShTNVBfQ0xLRElWX0xFRlRCVVMpLAorCVNBVkVfSVRFTShTNVBfQ0xLR0FURV9JUF9MRUZUQlVTKSwKKwlTQVZFX0lURU0oUzVQX0NMS0RJVl9SSUdIVEJVUyksCisJU0FWRV9JVEVNKFM1UF9DTEtHQVRFX0lQX1JJR0hUQlVTKSwKKwlTQVZFX0lURU0oUzVQX0VQTExfQ09OMCksCisJU0FWRV9JVEVNKFM1UF9FUExMX0NPTjEpLAorCVNBVkVfSVRFTShTNVBfVlBMTF9DT04wKSwKKwlTQVZFX0lURU0oUzVQX1ZQTExfQ09OMSksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfVE9QMCksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfVE9QMSksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfQ0FNKSwKKwlTQVZFX0lURU0oUzVQX0NMS1NSQ19NRkMpLAorCVNBVkVfSVRFTShTNVBfQ0xLU1JDX0lNQUdFKSwKKwlTQVZFX0lURU0oUzVQX0NMS1NSQ19MQ0QwKSwKKwlTQVZFX0lURU0oUzVQX0NMS1NSQ19MQ0QxKSwKKwlTQVZFX0lURU0oUzVQX0NMS1NSQ19NQVVESU8pLAorCVNBVkVfSVRFTShTNVBfQ0xLU1JDX0ZTWVMpLAorCVNBVkVfSVRFTShTNVBfQ0xLU1JDX1BFUklMMCksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfUEVSSUwxKSwKKwlTQVZFX0lURU0oUzVQX0NMS0RJVl9DQU0pLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX1RWKSwKKwlTQVZFX0lURU0oUzVQX0NMS0RJVl9NRkMpLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX0czRCksCisJU0FWRV9JVEVNKFM1UF9DTEtESVZfSU1BR0UpLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX0xDRDApLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX0xDRDEpLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX01BVURJTyksCisJU0FWRV9JVEVNKFM1UF9DTEtESVZfRlNZUzApLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX0ZTWVMxKSwKKwlTQVZFX0lURU0oUzVQX0NMS0RJVl9GU1lTMiksCisJU0FWRV9JVEVNKFM1UF9DTEtESVZfRlNZUzMpLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX1BFUklMMCksCisJU0FWRV9JVEVNKFM1UF9DTEtESVZfUEVSSUwxKSwKKwlTQVZFX0lURU0oUzVQX0NMS0RJVl9QRVJJTDIpLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX1BFUklMMyksCisJU0FWRV9JVEVNKFM1UF9DTEtESVZfUEVSSUw0KSwKKwlTQVZFX0lURU0oUzVQX0NMS0RJVl9QRVJJTDUpLAorCVNBVkVfSVRFTShTNVBfQ0xLRElWX1RPUCksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfTUFTS19DQU0pLAorCVNBVkVfSVRFTShTNVBfQ0xLU1JDX01BU0tfVFYpLAorCVNBVkVfSVRFTShTNVBfQ0xLU1JDX01BU0tfTENEMCksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfTUFTS19MQ0QxKSwKKwlTQVZFX0lURU0oUzVQX0NMS1NSQ19NQVNLX01BVURJTyksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfTUFTS19GU1lTKSwKKwlTQVZFX0lURU0oUzVQX0NMS1NSQ19NQVNLX1BFUklMMCksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfTUFTS19QRVJJTDEpLAorCVNBVkVfSVRFTShTNVBfQ0xLR0FURV9TQ0xLQ0FNKSwKKwlTQVZFX0lURU0oUzVQX0NMS0dBVEVfSVBfQ0FNKSwKKwlTQVZFX0lURU0oUzVQX0NMS0dBVEVfSVBfVFYpLAorCVNBVkVfSVRFTShTNVBfQ0xLR0FURV9JUF9NRkMpLAorCVNBVkVfSVRFTShTNVBfQ0xLR0FURV9JUF9HM0QpLAorCVNBVkVfSVRFTShTNVBfQ0xLR0FURV9JUF9JTUFHRSksCisJU0FWRV9JVEVNKFM1UF9DTEtHQVRFX0lQX0xDRDApLAorCVNBVkVfSVRFTShTNVBfQ0xLR0FURV9JUF9MQ0QxKSwKKwlTQVZFX0lURU0oUzVQX0NMS0dBVEVfSVBfRlNZUyksCisJU0FWRV9JVEVNKFM1UF9DTEtHQVRFX0lQX0dQUyksCisJU0FWRV9JVEVNKFM1UF9DTEtHQVRFX0lQX1BFUklMKSwKKwlTQVZFX0lURU0oUzVQX0NMS0dBVEVfSVBfUEVSSVIpLAorCVNBVkVfSVRFTShTNVBfQ0xLR0FURV9CTE9DSyksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfTUFTS19ETUMpLAorCVNBVkVfSVRFTShTNVBfQ0xLU1JDX0RNQyksCisJU0FWRV9JVEVNKFM1UF9DTEtESVZfRE1DMCksCisJU0FWRV9JVEVNKFM1UF9DTEtESVZfRE1DMSksCisJU0FWRV9JVEVNKFM1UF9DTEtHQVRFX0lQX0RNQyksCisJU0FWRV9JVEVNKFM1UF9DTEtTUkNfQ1BVKSwKKwlTQVZFX0lURU0oUzVQX0NMS0RJVl9DUFUpLAorCVNBVkVfSVRFTShTNVBfQ0xLR0FURV9TQ0xLQ1BVKSwKKwlTQVZFX0lURU0oUzVQX0NMS0dBVEVfSVBfQ1BVKSwKKwkvKiBHSUMgc2lkZSAqLworCVNBVkVfSVRFTShTNVBfVkFfR0lDX0NQVSArIDB4MDAwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19DUFUgKyAweDAwNCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfQ1BVICsgMHgwMDgpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0NQVSArIDB4MDBDKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19DUFUgKyAweDAxNCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfQ1BVICsgMHgwMTgpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDAwMCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4MDA0KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHgxMDApLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDEwNCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4MTA4KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHgzMDApLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDMwNCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4MzA4KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg0MDApLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDQwNCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4NDA4KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg0MEMpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDQxMCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4NDE0KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg0MTgpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDQxQyksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4NDIwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg0MjQpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDQyOCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4NDJDKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg0MzApLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDQzNCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4NDM4KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg0M0MpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDQ0MCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4NDQ0KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg0NDgpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDQ0QyksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4NDUwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg0NTQpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDQ1OCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4NDVDKSwKKworCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDgwMCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4ODA0KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg4MDgpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDgwQyksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4ODEwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg4MTQpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDgxOCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4ODFDKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg4MjApLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDgyNCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4ODI4KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg4MkMpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDgzMCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4ODM0KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg4MzgpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDgzQyksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4ODQwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg4NDQpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDg0OCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4ODRDKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg4NTApLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweDg1NCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4ODU4KSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHg4NUMpLAorCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4QzAwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHhDMDQpLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweEMwOCksCisJU0FWRV9JVEVNKFM1UF9WQV9HSUNfRElTVCArIDB4QzBDKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0dJQ19ESVNUICsgMHhDMTApLAorCVNBVkVfSVRFTShTNVBfVkFfR0lDX0RJU1QgKyAweEMxNCksCisKKwlTQVZFX0lURU0oUzVQX1ZBX0NPTUJJTkVSX0JBU0UgKyAweDAwMCksCisJU0FWRV9JVEVNKFM1UF9WQV9DT01CSU5FUl9CQVNFICsgMHgwMTApLAorCVNBVkVfSVRFTShTNVBfVkFfQ09NQklORVJfQkFTRSArIDB4MDIwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0NPTUJJTkVSX0JBU0UgKyAweDAzMCksCisJU0FWRV9JVEVNKFM1UF9WQV9DT01CSU5FUl9CQVNFICsgMHgwNDApLAorCVNBVkVfSVRFTShTNVBfVkFfQ09NQklORVJfQkFTRSArIDB4MDUwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0NPTUJJTkVSX0JBU0UgKyAweDA2MCksCisJU0FWRV9JVEVNKFM1UF9WQV9DT01CSU5FUl9CQVNFICsgMHgwNzApLAorCVNBVkVfSVRFTShTNVBfVkFfQ09NQklORVJfQkFTRSArIDB4MDgwKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0NPTUJJTkVSX0JBU0UgKyAweDA5MCksCit9OworCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgZXh5bm9zNF9sMmNjX3NhdmVbXSA9IHsKKwlTQVZFX0lURU0oUzVQX1ZBX0wyQ0MgKyBMMlgwX1RBR19MQVRFTkNZX0NUUkwpLAorCVNBVkVfSVRFTShTNVBfVkFfTDJDQyArIEwyWDBfREFUQV9MQVRFTkNZX0NUUkwpLAorCVNBVkVfSVRFTShTNVBfVkFfTDJDQyArIEwyWDBfUFJFRkVUQ0hfQ1RSTCksCisJU0FWRV9JVEVNKFM1UF9WQV9MMkNDICsgTDJYMF9QT1dFUl9DVFJMKSwKKwlTQVZFX0lURU0oUzVQX1ZBX0wyQ0MgKyBMMlgwX0FVWF9DVFJMKSwKK307CisKK3ZvaWQgZXh5bm9zNF9jcHVfc3VzcGVuZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDB4RkZGRkZGRkY7CisKKwkvKiBTZXR0aW5nIENlbnRyYWwgU2VxdWVuY2UgUmVnaXN0ZXIgZm9yIHBvd2VyIGRvd24gbW9kZSAqLworCisJdG1wID0gX19yYXdfcmVhZGwoUzVQX0NFTlRSQUxfU0VRX0NPTkZJR1VSQVRJT04pOworCXRtcCAmPSB+KFM1UF9DRU5UUkFMX0xPV1BXUl9DRkcpOworCV9fcmF3X3dyaXRlbCh0bXAsIFM1UF9DRU5UUkFMX1NFUV9DT05GSUdVUkFUSU9OKTsKKworCS8qIFNldHRpbmcgQ2VudHJhbCBTZXF1ZW5jZSBvcHRpb24gUmVnaXN0ZXIgKi8KKworCXRtcCA9IF9fcmF3X3JlYWRsKFM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOworCXRtcCAmPSB+KFM1UF9VU0VfTUFTSyk7CisJdG1wIHw9IFM1UF9VU0VfU1RBTkRCWV9XRkkwOworCV9fcmF3X3dyaXRlbCh0bXAsIFM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOworCisJLyogQ2xlYXIgYWxsIGludGVycnVwdCBwZW5kaW5nIHRvIGF2b2lkIGVhcmx5IHdha2V1cCAqLworCisJX19yYXdfd3JpdGVsKG1hc2ssIChTNVBfVkFfR0lDX0RJU1QgKyAweDI4MCkpOworCV9fcmF3X3dyaXRlbChtYXNrLCAoUzVQX1ZBX0dJQ19ESVNUICsgMHgyODQpKTsKKwlfX3Jhd193cml0ZWwobWFzaywgKFM1UF9WQV9HSUNfRElTVCArIDB4Mjg4KSk7CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHQgKi8KKworCV9fcmF3X3dyaXRlbCgweDAsIChTNVBfVkFfR0lDX0NQVSArIDB4MDAwKSk7CisJX19yYXdfd3JpdGVsKDB4MCwgKFM1UF9WQV9HSUNfRElTVCArIDB4MDAwKSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIChTNVBfVkFfR0lDX0RJU1QgKyAweDE4NCkpOworCV9fcmF3X3dyaXRlbChtYXNrLCAoUzVQX1ZBX0dJQ19ESVNUICsgMHgxODgpKTsKKworCW91dGVyX2ZsdXNoX2FsbCgpOworCisJLyogaXNzdWUgdGhlIHN0YW5kYnkgc2lnbmFsIGludG8gdGhlIHBtIHVuaXQuICovCisJY3B1X2RvX2lkbGUoKTsKKworCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgcGFzdCBoZXJlICovCisJcGFuaWMoInNsZWVwIHJlc3VtZWQgdG8gb3JpZ2luYXRvcj8iKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNF9wbV9wcmVwYXJlKHZvaWQpCit7CisJdTMyIHRtcDsKKworCXMzY19wbV9kb19zYXZlKGV4eW5vczRfY29yZV9zYXZlLCBBUlJBWV9TSVpFKGV4eW5vczRfY29yZV9zYXZlKSk7CisJczNjX3BtX2RvX3NhdmUoZXh5bm9zNF9sMmNjX3NhdmUsIEFSUkFZX1NJWkUoZXh5bm9zNF9sMmNjX3NhdmUpKTsKKworCXRtcCA9IF9fcmF3X3JlYWRsKFM1UF9JTkZPUk0xKTsKKworCS8qIFNldCB2YWx1ZSBvZiBwb3dlciBkb3duIHJlZ2lzdGVyIGZvciBzbGVlcCBtb2RlICovCisKKwlzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKGV4eW5vczRfc2xlZXAsIEFSUkFZX1NJWkUoZXh5bm9zNF9zbGVlcCkpOworCV9fcmF3X3dyaXRlbChTNVBfQ0hFQ0tfU0xFRVAsIFM1UF9JTkZPUk0xKTsKKworCS8qIGVuc3VyZSBhdCBsZWFzdCBJTkZPUk0wIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KKworCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoczNjX2NwdV9yZXN1bWUpLCBTNVBfSU5GT1JNMCk7CisKKwkvKiBCZWZvcmUgZW50ZXIgY2VudHJhbCBzZXF1ZW5jZSBtb2RlLCBjbG9jayBzcmMgcmVnaXN0ZXIgaGF2ZSB0byBzZXQgKi8KKworCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoZXh5bm9zNF9zZXRfY2xrc3JjLCBBUlJBWV9TSVpFKGV4eW5vczRfc2V0X2Nsa3NyYykpOworCit9CisKK3N0YXRpYyBpbnQgZXh5bm9zNF9wbV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3sKKwlwbV9jcHVfcHJlcCA9IGV4eW5vczRfcG1fcHJlcGFyZTsKKwlwbV9jcHVfc2xlZXAgPSBleHlub3M0X2NwdV9zdXNwZW5kOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY29weSBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMgKi8KKwordm9pZCBleHlub3M0X3NjdV9lbmFibGUodm9pZCBfX2lvbWVtICpzY3VfYmFzZSkKK3sKKwl1MzIgc2N1X2N0cmw7CisKKwlzY3VfY3RybCA9IF9fcmF3X3JlYWRsKHNjdV9iYXNlKTsKKwkvKiBhbHJlYWR5IGVuYWJsZWQ/ICovCisJaWYgKHNjdV9jdHJsICYgMSkKKwkJcmV0dXJuOworCisJc2N1X2N0cmwgfD0gMTsKKwlfX3Jhd193cml0ZWwoc2N1X2N0cmwsIHNjdV9iYXNlKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIGRhdGEgYWNjZXNzZWQgYnkgQ1BVMCBiZWZvcmUgdGhlIFNDVSB3YXMKKwkgKiBpbml0aWFsaXNlZCBpcyB2aXNpYmxlIHRvIHRoZSBvdGhlciBDUFVzLgorCSAqLworCWZsdXNoX2NhY2hlX2FsbCgpOworfQorCitzdGF0aWMgaW50IGV4eW5vczRfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJLyogRm9yIHJlbGVhc2UgcmV0ZW50aW9uICovCisKKwlfX3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9NQVVESU9fT1BUSU9OKTsKKwlfX3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9HUElPX09QVElPTik7CisJX19yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfVUFSVF9PUFRJT04pOworCV9fcmF3X3dyaXRlbCgoMSA8PCAyOCksIFM1UF9QQURfUkVUX01NQ0FfT1BUSU9OKTsKKwlfX3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9NTUNCX09QVElPTik7CisJX19yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfRUJJQV9PUFRJT04pOworCV9fcmF3X3dyaXRlbCgoMSA8PCAyOCksIFM1UF9QQURfUkVUX0VCSUJfT1BUSU9OKTsKKworCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoZXh5bm9zNF9jb3JlX3NhdmUsIEFSUkFZX1NJWkUoZXh5bm9zNF9jb3JlX3NhdmUpKTsKKworCWV4eW5vczRfc2N1X2VuYWJsZShTNVBfVkFfU0NVKTsKKworI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCisJczNjX3BtX2RvX3Jlc3RvcmVfY29yZShleHlub3M0X2wyY2Nfc2F2ZSwgQVJSQVlfU0laRShleHlub3M0X2wyY2Nfc2F2ZSkpOworCW91dGVyX2ludl9hbGwoKTsKKwkvKiBlbmFibGUgTDJYMCovCisJd3JpdGVsX3JlbGF4ZWQoMSwgUzVQX1ZBX0wyQ0MgKyBMMlgwX0NUUkwpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGV4eW5vczRfcG1fZHJpdmVyID0geworCS5hZGQJCT0gZXh5bm9zNF9wbV9hZGQsCisJLnJlc3VtZQkJPSBleHlub3M0X3BtX3Jlc3VtZSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGV4eW5vczRfcG1fZHJ2aW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzM2NfcG1faW5pdCgpOworCisJLyogQWxsIHdha2V1cCBkaXNhYmxlICovCisKKwl0bXAgPSBfX3Jhd19yZWFkbChTNVBfV0FLRVVQX01BU0spOworCXRtcCB8PSAoKDB4RkYgPDwgOCkgfCAoMHgxRiA8PCAxKSk7CisJX19yYXdfd3JpdGVsKHRtcCwgUzVQX1dBS0VVUF9NQVNLKTsKKworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZleHlub3M0X3N5c2NsYXNzLCAmZXh5bm9zNF9wbV9kcml2ZXIpOworfQorYXJjaF9pbml0Y2FsbChleHlub3M0X3BtX2RydmluaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWZpbWMuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1maW1jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0NTA3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1maW1jLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIEV4eW5vczQgY2FtZXJhIGludGVyZmFjZSBHUElPIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKyNpbmNsdWRlIDxwbGF0L2NhbXBvcnQuaD4KKworaW50IGV4eW5vczRfZmltY19zZXR1cF9ncGlvKGVudW0gczVwX2NhbXBvcnRfaWQgaWQpCit7CisJdTMyIGdwaW84LCBncGlvNTsKKwl1MzIgc2ZuOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBTNVBfQ0FNUE9SVF9BOgorCQlncGlvOCA9IEVYWU5PUzRfR1BKMCgwKTsgLyogUENMSywgVlNZTkMsIEhSRUYsIERBVEFbMDo0XSAqLworCQlncGlvNSA9IEVYWU5PUzRfR1BKMSgwKTsgLyogREFUQVs1OjddLCBDTEtPVVQsIEZJRUxEICovCisJCXNmbiA9IFMzQ19HUElPX1NGTigyKTsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9DQU1QT1JUX0I6CisJCWdwaW84ID0gRVhZTk9TNF9HUEUwKDApOyAvKiBEQVRBWzA6N10gKi8KKwkJZ3BpbzUgPSBFWFlOT1M0X0dQRTEoMCk7IC8qIFBDTEssIFZTWU5DLCBIUkVGLCBDTEtPVVQsIEZJRUxEICovCisJCXNmbiA9IFMzQ19HUElPX1NGTigzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXQVJOKDEsICJXcm9uZyBjYW1wb3J0IGlkOiAlZFxuIiwgaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBzM2NfZ3Bpb19jZmdhbGxfcmFuZ2UoZ3BpbzgsIDgsIHNmbiwgUzNDX0dQSU9fUFVMTF9VUCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzM2NfZ3Bpb19jZmdhbGxfcmFuZ2UoZ3BpbzUsIDUsIHNmbiwgUzNDX0dQSU9fUFVMTF9VUCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMC5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzAuYwpzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMC5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjMC5jCmluZGV4IGY0N2Y4ZjMuLmQzOTViZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMC5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjMC5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwpAQCAtMjEsNiArMjEsNiBAQAogCiB2b2lkIHMzY19pMmMwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzM2NfZ3Bpb19jZmdhbGxfcmFuZ2UoUzVQVjMxMF9HUEQxKDApLCAyLAorCXMzY19ncGlvX2NmZ2FsbF9yYW5nZShFWFlOT1M0X0dQRDEoMCksIDIsCiAJCQkgICAgICBTM0NfR1BJT19TRk4oMiksIFMzQ19HUElPX1BVTExfVVApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzEuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1pMmMxLmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzEuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzEuYwppbmRleCA5ZDA3ZTRlMi4uZmQ3MjM1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzEuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMxLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1pMmMxLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCkBAIC0xOCw2ICsxOCw2IEBACiAKIHZvaWQgczNjX2kyYzFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXMzY19ncGlvX2NmZ2FsbF9yYW5nZShTNVBWMzEwX0dQRDEoMiksIDIsCisJczNjX2dwaW9fY2ZnYWxsX3JhbmdlKEVYWU5PUzRfR1BEMSgyKSwgMiwKIAkJCSAgICAgIFMzQ19HUElPX1NGTigyKSwgUzNDX0dQSU9fUFVMTF9VUCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMi5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzIuYwpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMi5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjMi5jCmluZGV4IDQxNjNiMTIuLjI2OTRiMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMi5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjMi5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCkBAIC0xOCw2ICsxOCw2IEBACiAKIHZvaWQgczNjX2kyYzJfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXMzY19ncGlvX2NmZ2FsbF9yYW5nZShTNVBWMzEwX0dQQTAoNiksIDIsCisJczNjX2dwaW9fY2ZnYWxsX3JhbmdlKEVYWU5PUzRfR1BBMCg2KSwgMiwKIAkJCSAgICAgIFMzQ19HUElPX1NGTigzKSwgUzNDX0dQSU9fUFVMTF9VUCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMy5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzMuYwpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMy5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjMy5jCmluZGV4IDE4MGYxNTMuLjM3OWJkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMy5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjMy5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgpAQCAtMTgsNiArMTgsNiBAQAogCiB2b2lkIHMzY19pMmMzX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzM2NfZ3Bpb19jZmdhbGxfcmFuZ2UoUzVQVjMxMF9HUEExKDIpLCAyLAorCXMzY19ncGlvX2NmZ2FsbF9yYW5nZShFWFlOT1M0X0dQQTEoMiksIDIsCiAJCQkgICAgICBTM0NfR1BJT19TRk4oMyksIFMzQ19HUElPX1BVTExfVVApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzQuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1pMmM0LmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzQuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzQuYwppbmRleCA5MDllOGRmLi45ZjNjMDQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1pMmM0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzQuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzQuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoKQEAgLTE4LDYgKzE4LDYgQEAKIAogdm9pZCBzM2NfaTJjNF9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JczNjX2dwaW9fY2ZnYWxsX3JhbmdlKFM1UFYzMTBfR1BCKDIpLCAyLAorCXMzY19ncGlvX2NmZ2FsbF9yYW5nZShFWFlOT1M0X0dQQigyKSwgMiwKIAkJCSAgICAgIFMzQ19HUElPX1NGTigzKSwgUzNDX0dQSU9fUFVMTF9VUCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjNS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzUuYwpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjNS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjNS5jCmluZGV4IDVkMGZhNGEuLjc3ZTFhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmM1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjNS5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjNS5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgpAQCAtMTgsNiArMTgsNiBAQAogCiB2b2lkIHMzY19pMmM1X2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzM2NfZ3Bpb19jZmdhbGxfcmFuZ2UoUzVQVjMxMF9HUEIoNiksIDIsCisJczNjX2dwaW9fY2ZnYWxsX3JhbmdlKEVYWU5PUzRfR1BCKDYpLCAyLAogCQkJICAgICAgUzNDX0dQSU9fU0ZOKDMpLCBTM0NfR1BJT19QVUxMX1VQKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmM2LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjNi5jCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmM2LmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1pMmM2LmMKaW5kZXggMzRhYWZhYi4uMjg0ZDEyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzYuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjNi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmM2LmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1pMmM2LmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCkBAIC0xOCw2ICsxOCw2IEBACiAKIHZvaWQgczNjX2kyYzZfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXMzY19ncGlvX2NmZ2FsbF9yYW5nZShTNVBWMzEwX0dQQzEoMyksIDIsCisJczNjX2dwaW9fY2ZnYWxsX3JhbmdlKEVYWU5PUzRfR1BDMSgzKSwgMiwKIAkJCSAgICAgIFMzQ19HUElPX1NGTig0KSwgUzNDX0dQSU9fUFVMTF9VUCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjNy5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzcuYwpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjNy5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjNy5jCmluZGV4IDliMjViOGQuLmI3NjExZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWkyYzcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjNy5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtaTJjNy5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgpAQCAtMTgsNiArMTgsNiBAQAogCiB2b2lkIHMzY19pMmM3X2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzM2NfZ3Bpb19jZmdhbGxfcmFuZ2UoUzVQVjMxMF9HUEQwKDIpLCAyLAorCXMzY19ncGlvX2NmZ2FsbF9yYW5nZShFWFlOT1M0X0dQRDAoMiksIDIsCiAJCQkgICAgICBTM0NfR1BJT19TRk4oMyksIFMzQ19HUElPX1BVTExfVVApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWtleXBhZC5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWtleXBhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTBlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAta2V5cGFkLmMKQEAgLTAsMCArMSwzNSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLWtleXBhZC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIEdQSU8gY29uZmlndXJhdGlvbiBmb3IgRXh5bm9zNCBLZXlQYWQgZGV2aWNlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorCit2b2lkIHNhbXN1bmdfa2V5cGFkX2NmZ19ncGlvKHVuc2lnbmVkIGludCByb3dzLCB1bnNpZ25lZCBpbnQgY29scykKK3sKKwkvKiBLZXlwYWRzIGNhbiBiZSBvZiB2YXJpb3VzIGNvbWJpbmF0aW9ucywgSnVzdCBtYWtpbmcgc3VyZSAqLworCisJaWYgKHJvd3MgPiA4KSB7CisJCS8qIFNldCBhbGwgdGhlIG5lY2Vzc2FyeSBHUFgyIHBpbnM6IEtQX1JPV1swfjddICovCisJCXMzY19ncGlvX2NmZ3JhbmdlX25vcHVsbChFWFlOT1M0X0dQWDIoMCksIDgsIFMzQ19HUElPX1NGTigzKSk7CisKKwkJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQWDMgcGluczogS1BfUk9XWzh+XSAqLworCQlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoRVhZTk9TNF9HUFgzKDApLCAocm93cyAtIDgpLAorCQkJCQkgUzNDX0dQSU9fU0ZOKDMpKTsKKwl9IGVsc2UgeworCQkvKiBTZXQgYWxsIHRoZSBuZWNlc3NhcnkgR1BYMiBwaW5zOiBLUF9ST1dbeF0gKi8KKwkJczNjX2dwaW9fY2ZncmFuZ2Vfbm9wdWxsKEVYWU5PUzRfR1BYMigwKSwgcm93cywKKwkJCQkJIFMzQ19HUElPX1NGTigzKSk7CisJfQorCisJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQWDEgcGlucyB0byBzcGVjaWFsLWZ1bmN0aW9uIDM6IEtQX0NPTFt4XSAqLworCXMzY19ncGlvX2NmZ3JhbmdlX25vcHVsbChFWFlOT1M0X0dQWDEoMCksIGNvbHMsIFMzQ19HUElPX1NGTigzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtc2RoY2ktZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLWdwaW8uYwpzaW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtc2RoY2ktZ3Bpby5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2ktZ3Bpby5jCmluZGV4IDg2ZDM4Y2MuLjFiM2QzYTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtc2RoY2ktZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1zZGhjaS1ncGlvLmMKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtc2RoY2ktZ3Bpby5jCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2ktZ3Bpby5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKLSAqIFM1UFYzMTAgLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBzZXR0aW5nIHVwIFNESENJIGRldmljZShzKSBHUElPIChIU01NQykKKyAqIEVYWU5PUzQgLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBzZXR0aW5nIHVwIFNESENJIGRldmljZShzKSBHUElPIChIU01NQykKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIzLDEzICsyMywxMyBAQAogI2luY2x1ZGUgPHBsYXQvcmVncy1zZGhjaS5oPgogI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KIAotdm9pZCBzNXB2MzEwX3NldHVwX3NkaGNpMF9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCB3aWR0aCkKK3ZvaWQgZXh5bm9zNF9zZXR1cF9zZGhjaTBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpCiB7CiAJc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGludCBncGlvOwogCiAJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQSzBbMDoxXSBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMiAqLwotCWZvciAoZ3BpbyA9IFM1UFYzMTBfR1BLMCgwKTsgZ3BpbyA8IFM1UFYzMTBfR1BLMCgyKTsgZ3BpbysrKSB7CisJZm9yIChncGlvID0gRVhZTk9TNF9HUEswKDApOyBncGlvIDwgRVhZTk9TNF9HUEswKDIpOyBncGlvKyspIHsKIAkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigyKSk7CiAJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKIAkJczVwX2dwaW9fc2V0X2RydnN0cihncGlvLCBTNVBfR1BJT19EUlZTVFJfTFY0KTsKQEAgLTM3LDE0ICszNywxNCBAQAogCiAJc3dpdGNoICh3aWR0aCkgewogCWNhc2UgODoKLQkJZm9yIChncGlvID0gUzVQVjMxMF9HUEsxKDMpOyBncGlvIDw9IFM1UFYzMTBfR1BLMSg2KTsgZ3BpbysrKSB7CisJCWZvciAoZ3BpbyA9IEVYWU5PUzRfR1BLMSgzKTsgZ3BpbyA8PSBFWFlOT1M0X0dQSzEoNik7IGdwaW8rKykgewogCQkJLyogRGF0YSBwaW4gR1BLMVszOjZdIHRvIHNwZWNpYWwtZnVudGlvbiAzICovCiAJCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDMpKTsKIAkJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9VUCk7CiAJCQlzNXBfZ3Bpb19zZXRfZHJ2c3RyKGdwaW8sIFM1UF9HUElPX0RSVlNUUl9MVjQpOwogCQl9CiAJY2FzZSA0OgotCQlmb3IgKGdwaW8gPSBTNVBWMzEwX0dQSzAoMyk7IGdwaW8gPD0gUzVQVjMxMF9HUEswKDYpOyBncGlvKyspIHsKKwkJZm9yIChncGlvID0gRVhZTk9TNF9HUEswKDMpOyBncGlvIDw9IEVYWU5PUzRfR1BLMCg2KTsgZ3BpbysrKSB7CiAJCQkvKiBEYXRhIHBpbiBHUEswWzM6Nl0gdG8gc3BlY2lhbC1mdW50aW9uIDIgKi8KIAkJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMikpOwogCQkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX1VQKTsKQEAgLTU1LDI1ICs1NSwyNSBAQAogCX0KIAogCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfSU5URVJOQUwpIHsKLQkJczNjX2dwaW9fY2ZncGluKFM1UFYzMTBfR1BLMCgyKSwgUzNDX0dQSU9fU0ZOKDIpKTsKLQkJczNjX2dwaW9fc2V0cHVsbChTNVBWMzEwX0dQSzAoMiksIFMzQ19HUElPX1BVTExfVVApOworCQlzM2NfZ3Bpb19jZmdwaW4oRVhZTk9TNF9HUEswKDIpLCBTM0NfR1BJT19TRk4oMikpOworCQlzM2NfZ3Bpb19zZXRwdWxsKEVYWU5PUzRfR1BLMCgyKSwgUzNDX0dQSU9fUFVMTF9VUCk7CiAJCXM1cF9ncGlvX3NldF9kcnZzdHIoZ3BpbywgUzVQX0dQSU9fRFJWU1RSX0xWNCk7CiAJfQogfQogCi12b2lkIHM1cHYzMTBfc2V0dXBfc2RoY2kxX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHdpZHRoKQordm9pZCBleHlub3M0X3NldHVwX3NkaGNpMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCB3aWR0aCkKIHsKIAlzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJdW5zaWduZWQgaW50IGdwaW87CiAKIAkvKiBTZXQgYWxsIHRoZSBuZWNlc3NhcnkgR1BLMVswOjFdIHBpbnMgdG8gc3BlY2lhbC1mdW5jdGlvbiAyICovCi0JZm9yIChncGlvID0gUzVQVjMxMF9HUEsxKDApOyBncGlvIDwgUzVQVjMxMF9HUEsxKDIpOyBncGlvKyspIHsKKwlmb3IgKGdwaW8gPSBFWFlOT1M0X0dQSzEoMCk7IGdwaW8gPCBFWFlOT1M0X0dQSzEoMik7IGdwaW8rKykgewogCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDIpKTsKIAkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX05PTkUpOwogCQlzNXBfZ3Bpb19zZXRfZHJ2c3RyKGdwaW8sIFM1UF9HUElPX0RSVlNUUl9MVjQpOwogCX0KIAotCWZvciAoZ3BpbyA9IFM1UFYzMTBfR1BLMSgzKTsgZ3BpbyA8PSBTNVBWMzEwX0dQSzEoNik7IGdwaW8rKykgeworCWZvciAoZ3BpbyA9IEVYWU5PUzRfR1BLMSgzKTsgZ3BpbyA8PSBFWFlOT1M0X0dQSzEoNik7IGdwaW8rKykgewogCQkvKiBEYXRhIHBpbiBHUEsxWzM6Nl0gdG8gc3BlY2lhbC1mdW5jdGlvbiAyICovCiAJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMikpOwogCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfVVApOwpAQCAtODEsMTkgKzgxLDE5IEBACiAJfQogCiAJaWYgKHBkYXRhLT5jZF90eXBlID09IFMzQ19TREhDSV9DRF9JTlRFUk5BTCkgewotCQlzM2NfZ3Bpb19jZmdwaW4oUzVQVjMxMF9HUEsxKDIpLCBTM0NfR1BJT19TRk4oMikpOwotCQlzM2NfZ3Bpb19zZXRwdWxsKFM1UFYzMTBfR1BLMSgyKSwgUzNDX0dQSU9fUFVMTF9VUCk7CisJCXMzY19ncGlvX2NmZ3BpbihFWFlOT1M0X0dQSzEoMiksIFMzQ19HUElPX1NGTigyKSk7CisJCXMzY19ncGlvX3NldHB1bGwoRVhZTk9TNF9HUEsxKDIpLCBTM0NfR1BJT19QVUxMX1VQKTsKIAkJczVwX2dwaW9fc2V0X2RydnN0cihncGlvLCBTNVBfR1BJT19EUlZTVFJfTFY0KTsKIAl9CiB9CiAKLXZvaWQgczVwdjMxMF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpCit2b2lkIGV4eW5vczRfc2V0dXBfc2RoY2kyX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHdpZHRoKQogewogCXN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3BpbzsKIAogCS8qIFNldCBhbGwgdGhlIG5lY2Vzc2FyeSBHUEsyWzA6MV0gcGlucyB0byBzcGVjaWFsLWZ1bmN0aW9uIDIgKi8KLQlmb3IgKGdwaW8gPSBTNVBWMzEwX0dQSzIoMCk7IGdwaW8gPCBTNVBWMzEwX0dQSzIoMik7IGdwaW8rKykgeworCWZvciAoZ3BpbyA9IEVYWU5PUzRfR1BLMigwKTsgZ3BpbyA8IEVYWU5PUzRfR1BLMigyKTsgZ3BpbysrKSB7CiAJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMikpOwogCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CiAJCXM1cF9ncGlvX3NldF9kcnZzdHIoZ3BpbywgUzVQX0dQSU9fRFJWU1RSX0xWNCk7CkBAIC0xMDEsMTQgKzEwMSwxNCBAQAogCiAJc3dpdGNoICh3aWR0aCkgewogCWNhc2UgODoKLQkJZm9yIChncGlvID0gUzVQVjMxMF9HUEszKDMpOyBncGlvIDw9IFM1UFYzMTBfR1BLMyg2KTsgZ3BpbysrKSB7CisJCWZvciAoZ3BpbyA9IEVYWU5PUzRfR1BLMygzKTsgZ3BpbyA8PSBFWFlOT1M0X0dQSzMoNik7IGdwaW8rKykgewogCQkJLyogRGF0YSBwaW4gR1BLM1szOjZdIHRvIHNwZWNpYWwtZnVuY3Rpb24gMyAqLwogCQkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigzKSk7CiAJCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfVVApOwogCQkJczVwX2dwaW9fc2V0X2RydnN0cihncGlvLCBTNVBfR1BJT19EUlZTVFJfTFY0KTsKIAkJfQogCWNhc2UgNDoKLQkJZm9yIChncGlvID0gUzVQVjMxMF9HUEsyKDMpOyBncGlvIDw9IFM1UFYzMTBfR1BLMig2KTsgZ3BpbysrKSB7CisJCWZvciAoZ3BpbyA9IEVYWU5PUzRfR1BLMigzKTsgZ3BpbyA8PSBFWFlOT1M0X0dQSzIoNik7IGdwaW8rKykgewogCQkJLyogRGF0YSBwaW4gR1BLMlszOjZdIHRvIHNwZWNpYWwtZnVuY3Rpb24gMiAqLwogCQkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigyKSk7CiAJCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfVVApOwpAQCAtMTE5LDI1ICsxMTksMjUgQEAKIAl9CiAKIAlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX0lOVEVSTkFMKSB7Ci0JCXMzY19ncGlvX2NmZ3BpbihTNVBWMzEwX0dQSzIoMiksIFMzQ19HUElPX1NGTigyKSk7Ci0JCXMzY19ncGlvX3NldHB1bGwoUzVQVjMxMF9HUEsyKDIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwkJczNjX2dwaW9fY2ZncGluKEVYWU5PUzRfR1BLMigyKSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwkJczNjX2dwaW9fc2V0cHVsbChFWFlOT1M0X0dQSzIoMiksIFMzQ19HUElPX1BVTExfVVApOwogCQlzNXBfZ3Bpb19zZXRfZHJ2c3RyKGdwaW8sIFM1UF9HUElPX0RSVlNUUl9MVjQpOwogCX0KIH0KIAotdm9pZCBzNXB2MzEwX3NldHVwX3NkaGNpM19jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCB3aWR0aCkKK3ZvaWQgZXh5bm9zNF9zZXR1cF9zZGhjaTNfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpCiB7CiAJc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGludCBncGlvOwogCiAJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQSzNbMDoxXSBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMiAqLwotCWZvciAoZ3BpbyA9IFM1UFYzMTBfR1BLMygwKTsgZ3BpbyA8IFM1UFYzMTBfR1BLMygyKTsgZ3BpbysrKSB7CisJZm9yIChncGlvID0gRVhZTk9TNF9HUEszKDApOyBncGlvIDwgRVhZTk9TNF9HUEszKDIpOyBncGlvKyspIHsKIAkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigyKSk7CiAJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKIAkJczVwX2dwaW9fc2V0X2RydnN0cihncGlvLCBTNVBfR1BJT19EUlZTVFJfTFY0KTsKIAl9CiAKLQlmb3IgKGdwaW8gPSBTNVBWMzEwX0dQSzMoMyk7IGdwaW8gPD0gUzVQVjMxMF9HUEszKDYpOyBncGlvKyspIHsKKwlmb3IgKGdwaW8gPSBFWFlOT1M0X0dQSzMoMyk7IGdwaW8gPD0gRVhZTk9TNF9HUEszKDYpOyBncGlvKyspIHsKIAkJLyogRGF0YSBwaW4gR1BLM1szOjZdIHRvIHNwZWNpYWwtZnVuY3Rpb24gMiAqLwogCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDIpKTsKIAkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX1VQKTsKQEAgLTE0NSw4ICsxNDUsOCBAQAogCX0KIAogCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfSU5URVJOQUwpIHsKLQkJczNjX2dwaW9fY2ZncGluKFM1UFYzMTBfR1BLMygyKSwgUzNDX0dQSU9fU0ZOKDIpKTsKLQkJczNjX2dwaW9fc2V0cHVsbChTNVBWMzEwX0dQSzMoMiksIFMzQ19HUElPX1BVTExfVVApOworCQlzM2NfZ3Bpb19jZmdwaW4oRVhZTk9TNF9HUEszKDIpLCBTM0NfR1BJT19TRk4oMikpOworCQlzM2NfZ3Bpb19zZXRwdWxsKEVYWU5PUzRfR1BLMygyKSwgUzNDX0dQSU9fUFVMTF9VUCk7CiAJCXM1cF9ncGlvX3NldF9kcnZzdHIoZ3BpbywgUzVQX0dQSU9fRFJWU1RSX0xWNCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLXNkaGNpLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2kuYwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtc2RoY2kuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLmMKaW5kZXggZGI4MzU4Zi4uODVmOTQzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLXNkaGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLmMKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtc2RoY2kuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgotICogUzVQVjMxMCAtIEhlbHBlciBmdW5jdGlvbnMgZm9yIHNldHRpZ24gdXAgU0RIQ0kgZGV2aWNlKHMpIChIU01NQykKKyAqIEVYWU5PUzQgLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBzZXR0aWduIHVwIFNESENJIGRldmljZShzKSAoSFNNTUMpCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMywxNCArMjMsMTQgQEAKIAogLyogY2xvY2sgc291cmNlcyBmb3IgdGhlIG1tYyBidXMgY2xvY2ssIG9yZGVyIGFzIGZvciB0aGUgY3RybDJbNS4uNF0gKi8KIAotY2hhciAqczVwdjMxMF9oc21tY19jbGtzcmNzWzRdID0geworY2hhciAqZXh5bm9zNF9oc21tY19jbGtzcmNzWzRdID0gewogCVswXSA9IE5VTEwsCiAJWzFdID0gTlVMTCwKIAlbMl0gPSAic2Nsa19tbWMiLAkvKiBtbWNfYnVzICovCiAJWzNdID0gTlVMTCwKIH07CiAKLXZvaWQgczVwdjMxMF9zZXR1cF9zZGhjaV9jZmdfY2FyZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqciwKK3ZvaWQgZXh5bm9zNF9zZXR1cF9zZGhjaV9jZmdfY2FyZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqciwKIAkJCQkgIHN0cnVjdCBtbWNfaW9zICppb3MsIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAl1MzIgY3RybDIsIGN0cmwzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjYyNDI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NsZWVwLlMKQEAgLTAsMCArMSw3NiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NsZWVwLlMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRVhZTk9TNDIxMCBwb3dlciBNYW5hZ2VyIChTdXNwZW5kLVRvLVJBTSkgc3VwcG9ydAorICogQmFzZWQgb24gUzNDMjQxMCBzbGVlcCBjb2RlIGJ5OgorICoJQmVuIERvb2tzLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBCYXNlZCBvbiBQWEEvU0ExMTAwIHNsZWVwIGNvZGUgYnk6CisgKglOaWNvbGFzIFBpdHJlLCAoYykgMjAwMiBNb250YSBWaXN0YSBTb2Z0d2FyZSBJbmMKKyAqCUNsaWZmIEJyYWtlLCAoYykgMjAwMQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKworCS50ZXh0CisKKwkvKgorCSAqIHMzY19jcHVfc2F2ZQorCSAqCisJICogZW50cnk6CisJICoJcjEgPSB2OnAgb2Zmc2V0CisJICovCisKK0VOVFJZKHMzY19jcHVfc2F2ZSkKKworCXN0bWZkCXNwISwgeyByMyAtIHIxMiwgbHIgfQorCWxkcglyMywgPXJlc3VtZV93aXRoX21tdQorCWJsCWNwdV9zdXNwZW5kCisKKwlsZHIJcjAsID1wbV9jcHVfc2xlZXAKKwlsZHIJcjAsIFsgcjAgXQorCW1vdglwYywgcjAKKworcmVzdW1lX3dpdGhfbW11OgorCWxkbWZkCXNwISwgeyByMyAtIHIxMiwgcGMgfQorCisJLmx0b3JnCisKKwkvKgorCSAqIHNsZWVwIG1hZ2ljLCB0byBhbGxvdyB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBmb3IgYW4gdmFsaWQKKwkgKiBpbWFnZSB0byByZXN1bWUgdG8uIE11c3QgYmUgdGhlIGZpcnN0IHdvcmQgYmVmb3JlIHRoZQorCSAqIHMzY19jcHVfcmVzdW1lIGVudHJ5LgorCSAqLworCisJLndvcmQJMHgyYmVkZjAwZAorCisJLyoKKwkgKiBzM2NfY3B1X3Jlc3VtZQorCSAqCisJICogcmVzdW1lIGNvZGUgZW50cnkgZm9yIGJvb3Rsb2FkZXIgdG8gY2FsbAorCSAqCisJICogd2UgbXVzdCBwdXQgdGhpcyBjb2RlIGhlcmUgaW4gdGhlIGRhdGEgc2VnbWVudCBhcyB3ZSBoYXZlIG5vCisJICogb3RoZXIgd2F5IG9mIHJlc3RvcmluZyB0aGUgc3RhY2sgcG9pbnRlciBhZnRlciBzbGVlcCwgYW5kIHdlCisJICogbXVzdCBub3Qgd3JpdGUgdG8gdGhlIGNvZGUgc2VnbWVudCAoY29kZSBpcyByZWFkLW9ubHkpCisJICovCisKK0VOVFJZKHMzY19jcHVfcmVzdW1lKQorCWIJY3B1X3Jlc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC90aW1lLmMKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3RpbWUuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L3RpbWUuYwppbmRleCBiMjYyZDQ2Li44NmI5ZmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC90aW1lLmMKQEAgLTEsOSArMSw5IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvdGltZS5jCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLWV4eW5vczQvdGltZS5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCi0gKiBTNVBWMzEwIChhbmQgY29tcGF0aWJsZSkgSFJUIHN1cHBvcnQKKyAqIEVYWU5PUzQgKGFuZCBjb21wYXRpYmxlKSBIUlQgc3VwcG9ydAogICogUFdNIDIvNCBpcyB1c2VkIGZvciB0aGlzIGZlYXR1cmUKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzMsNyArMzMsNyBAQAogc3RhdGljIHN0cnVjdCBjbGsgKnRkaXY0Owogc3RhdGljIHN0cnVjdCBjbGsgKnRpbWVyY2xrOwogCi1zdGF0aWMgdm9pZCBzNXB2MzEwX3B3bV9zdG9wKHVuc2lnbmVkIGludCBwd21faWQpCitzdGF0aWMgdm9pZCBleHlub3M0X3B3bV9zdG9wKHVuc2lnbmVkIGludCBwd21faWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0Y29uOwogCkBAIC01Miw3ICs1Miw3IEBACiAJX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7CiB9CiAKLXN0YXRpYyB2b2lkIHM1cHYzMTBfcHdtX2luaXQodW5zaWduZWQgaW50IHB3bV9pZCwgdW5zaWduZWQgbG9uZyB0Y250KQorc3RhdGljIHZvaWQgZXh5bm9zNF9wd21faW5pdCh1bnNpZ25lZCBpbnQgcHdtX2lkLCB1bnNpZ25lZCBsb25nIHRjbnQpCiB7CiAJdW5zaWduZWQgbG9uZyB0Y29uOwogCkBAIC04Niw3ICs4Niw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwdjMxMF9wd21fc3RhcnQodW5zaWduZWQgaW50IHB3bV9pZCwgYm9vbCBwZXJpb2RpYykKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHlub3M0X3B3bV9zdGFydCh1bnNpZ25lZCBpbnQgcHdtX2lkLCBib29sIHBlcmlvZGljKQogewogCXVuc2lnbmVkIGxvbmcgdGNvbjsKIApAQCAtMTE3LDIzICsxMTcsMjMgQEAKIAlfX3Jhd193cml0ZWwodGNvbiwgUzNDMjQxMF9UQ09OKTsKIH0KIAotc3RhdGljIGludCBzNXB2MzEwX3B3bV9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGN5Y2xlcywKK3N0YXRpYyBpbnQgZXh5bm9zNF9wd21fc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBjeWNsZXMsCiAJCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKIHsKLQlzNXB2MzEwX3B3bV9pbml0KDIsIGN5Y2xlcyk7Ci0JczVwdjMxMF9wd21fc3RhcnQoMiwgMCk7CisJZXh5bm9zNF9wd21faW5pdCgyLCBjeWNsZXMpOworCWV4eW5vczRfcHdtX3N0YXJ0KDIsIDApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzNXB2MzEwX3B3bV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKK3N0YXRpYyB2b2lkIGV4eW5vczRfcHdtX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAogCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKIHsKLQlzNXB2MzEwX3B3bV9zdG9wKDIpOworCWV4eW5vczRfcHdtX3N0b3AoMik7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQlzNXB2MzEwX3B3bV9pbml0KDIsIGNsb2NrX2NvdW50X3Blcl90aWNrKTsKLQkJczVwdjMxMF9wd21fc3RhcnQoMiwgMSk7CisJCWV4eW5vczRfcHdtX2luaXQoMiwgY2xvY2tfY291bnRfcGVyX3RpY2spOworCQlleHlub3M0X3B3bV9zdGFydCgyLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgogCQlicmVhazsKQEAgLTE0OSwxMSArMTQ5LDExIEBACiAJLmZlYXR1cmVzICAgICAgID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAogCS5yYXRpbmcJCT0gMjAwLAogCS5zaGlmdAkJPSAzMiwKLQkuc2V0X25leHRfZXZlbnQJPSBzNXB2MzEwX3B3bV9zZXRfbmV4dF9ldmVudCwKLQkuc2V0X21vZGUJPSBzNXB2MzEwX3B3bV9zZXRfbW9kZSwKKwkuc2V0X25leHRfZXZlbnQJPSBleHlub3M0X3B3bV9zZXRfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUJPSBleHlub3M0X3B3bV9zZXRfbW9kZSwKIH07CiAKLWlycXJldHVybl90IHM1cHYzMTBfY2xvY2tfZXZlbnRfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK2lycXJldHVybl90IGV4eW5vczRfY2xvY2tfZXZlbnRfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmcHdtX2V2ZW50X2RldmljZTsKIApAQCAtMTYyLDEzICsxNjIsMTMgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHM1cHYzMTBfY2xvY2tfZXZlbnRfaXJxID0geworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZXh5bm9zNF9jbG9ja19ldmVudF9pcnEgPSB7CiAJLm5hbWUJCT0gInB3bV90aW1lcjJfaXJxIiwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSBzNXB2MzEwX2Nsb2NrX2V2ZW50X2lzciwKKwkuaGFuZGxlcgk9IGV4eW5vczRfY2xvY2tfZXZlbnRfaXNyLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IHM1cHYzMTBfY2xvY2tldmVudF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNF9jbG9ja2V2ZW50X2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHBjbGs7CiAJdW5zaWduZWQgbG9uZyBjbG9ja19yYXRlOwpAQCAtMTk4LDIzICsxOTgsMzkgQEAKIAlwd21fZXZlbnRfZGV2aWNlLmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOwogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmcHdtX2V2ZW50X2RldmljZSk7CiAKLQlzZXR1cF9pcnEoSVJRX1RJTUVSMiwgJnM1cHYzMTBfY2xvY2tfZXZlbnRfaXJxKTsKKwlzZXR1cF9pcnEoSVJRX1RJTUVSMiwgJmV4eW5vczRfY2xvY2tfZXZlbnRfaXJxKTsKIH0KIAotc3RhdGljIGN5Y2xlX3QgczVwdjMxMF9wd200X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3N0YXRpYyBjeWNsZV90IGV4eW5vczRfcHdtNF9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIChjeWNsZV90KSB+X19yYXdfcmVhZGwoUzNDX1RJTUVSUkVHKDB4NDApKTsKIH0KIAorc3RhdGljIHZvaWQgZXh5bm9zNF9wd200X3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXVuc2lnbmVkIGxvbmcgcGNsazsKKworCXBjbGsgPSBjbGtfZ2V0X3JhdGUodGltZXJjbGspOworCisJY2xrX3NldF9yYXRlKHRkaXY0LCBwY2xrIC8gMik7CisJY2xrX3NldF9wYXJlbnQodGluNCwgdGRpdjQpOworCisJZXh5bm9zNF9wd21faW5pdCg0LCB+MCk7CisJZXh5bm9zNF9wd21fc3RhcnQoNCwgMSk7Cit9CisKIHN0cnVjdCBjbG9ja3NvdXJjZSBwd21fY2xvY2tzb3VyY2UgPSB7CiAJLm5hbWUJCT0gInB3bV90aW1lcjQiLAogCS5yYXRpbmcJCT0gMjUwLAotCS5yZWFkCQk9IHM1cHYzMTBfcHdtNF9yZWFkLAorCS5yZWFkCQk9IGV4eW5vczRfcHdtNF9yZWFkLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUyAsCisjaWZkZWYgQ09ORklHX1BNCisJLnJlc3VtZQkJPSBleHlub3M0X3B3bTRfcmVzdW1lLAorI2VuZGlmCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgczVwdjMxMF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBwY2xrOwogCXVuc2lnbmVkIGxvbmcgY2xvY2tfcmF0ZTsKQEAgLTIyNiwxNCArMjQyLDE0IEBACiAKIAljbG9ja19yYXRlID0gY2xrX2dldF9yYXRlKHRpbjQpOwogCi0JczVwdjMxMF9wd21faW5pdCg0LCB+MCk7Ci0JczVwdjMxMF9wd21fc3RhcnQoNCwgMSk7CisJZXh5bm9zNF9wd21faW5pdCg0LCB+MCk7CisJZXh5bm9zNF9wd21fc3RhcnQoNCwgMSk7CiAKIAlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnB3bV9jbG9ja3NvdXJjZSwgY2xvY2tfcmF0ZSkpCiAJCXBhbmljKCIlczogY2FuJ3QgcmVnaXN0ZXIgY2xvY2tzb3VyY2VcbiIsIHB3bV9jbG9ja3NvdXJjZS5uYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHM1cHYzMTBfdGltZXJfcmVzb3VyY2VzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNF90aW1lcl9yZXNvdXJjZXModm9pZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtcGRldjsKIApAQCAtMjY3LDE3ICsyODMsMTcgQEAKIAljbGtfZW5hYmxlKHRpbjQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgczVwdjMxMF90aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNF90aW1lcl9pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0xPQ0FMX1RJTUVSUwogCXR3ZF9iYXNlID0gUzVQX1ZBX1RXRDsKICNlbmRpZgogCi0JczVwdjMxMF90aW1lcl9yZXNvdXJjZXMoKTsKLQlzNXB2MzEwX2Nsb2NrZXZlbnRfaW5pdCgpOwotCXM1cHYzMTBfY2xvY2tzb3VyY2VfaW5pdCgpOworCWV4eW5vczRfdGltZXJfcmVzb3VyY2VzKCk7CisJZXh5bm9zNF9jbG9ja2V2ZW50X2luaXQoKTsKKwlleHlub3M0X2Nsb2Nrc291cmNlX2luaXQoKTsKIH0KIAotc3RydWN0IHN5c190aW1lciBzNXB2MzEwX3RpbWVyID0gewotCS5pbml0CQk9IHM1cHYzMTBfdGltZXJfaW5pdCwKK3N0cnVjdCBzeXNfdGltZXIgZXh5bm9zNF90aW1lciA9IHsKKwkuaW5pdAkJPSBleHlub3M0X3RpbWVyX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcKaW5kZXggNTY2ODRiNS4uNWVlYzA5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnCkBAIC0xMDAsNiArMTAwLDcgQEAKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWERJX1JUQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9GQgogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfS0VZUEFECiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCkBAIC0yMzgsNiArMjM5LDcgQEAKIAlzZWxlY3QgU09DX0lNWDI3CiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0ZTTF9VU0IyX1VEQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9LRVlQQUQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKQEAgLTI2NSw2ICsyNjcsNyBAQAogCWJvb2wgIkxvZ2ljUEQgTVgyNyBMSVRFS0lUIHBsYXRmb3JtIgogCXNlbGVjdCBTT0NfSU1YMjcKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1NTSQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyNyBMSVRFS0lUIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCkBAIC0zMDAsNCArMzAzLDEzIEBACiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIGktTVhUIChha2EgdGQ2MCkgcGxhdGZvcm0uIFRoaXMKIAkgIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKK2NvbmZpZyBNQUNIX0lNWDI3SVBDQU0KKwlib29sICJJTVgyNyBJUENBTSBwbGF0Zm9ybSIKKwlzZWxlY3QgU09DX0lNWDI3CisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBJTVgyNyBJUENBTSBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYworCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQppbmRleCA3NzEwMGJmLi5iODU3OTRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQpAQCAtOSwxMCArOSwxMCBAQAogb2JqLSQoQ09ORklHX0FSQ0hfTVgxKSArPSBjbG9jay1pbXgxLm8gbW0taW14MS5vCiBvYmotJChDT05GSUdfTUFDSF9NWDIxKSArPSBjbG9jay1pbXgyMS5vIG1tLWlteDIxLm8KIAotb2JqLSQoQ09ORklHX0FSQ0hfTVgyNSkgKz0gY2xvY2staW14MjUubyBtbS1pbXgyNS5vCitvYmotJChDT05GSUdfQVJDSF9NWDI1KSArPSBjbG9jay1pbXgyNS5vIG1tLWlteDI1Lm8gZWhjaS1pbXgyNS5vCiAKIG9iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNwdS1pbXgyNy5vIHBtLWlteDI3Lm8KLW9iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNsb2NrLWlteDI3Lm8gbW0taW14Mjcubworb2JqLSQoQ09ORklHX01BQ0hfTVgyNykgKz0gY2xvY2staW14MjcubyBtbS1pbXgyNy5vIGVoY2ktaW14MjcubwogCiAjIFN1cHBvcnQgZm9yIENNT1Mgc2Vuc29yIGludGVyZmFjZQogb2JqLSQoQ09ORklHX01YMV9WSURFTykJKz0gbXgxLWNhbWVyYS1maXEubyBteDEtY2FtZXJhLWZpcS1rc3ltLm8KQEAgLTM2LDMgKzM2LDQgQEAKIG9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRCkgKz0gZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLm8KIG9iai0kKENPTkZJR19NQUNIX1BDQTEwMCkgKz0gbWFjaC1wY2ExMDAubwogb2JqLSQoQ09ORklHX01BQ0hfTVhUX1RENjApICs9IG1hY2gtbXh0X3RkNjAubworb2JqLSQoQ09ORklHX01BQ0hfSU1YMjdJUENBTSkgKz0gbWFjaC1pbXgyN2lwY2FtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDEuYwppbmRleCAzOTM4YTU2Li5kY2M0MTcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MS5jCkBAIC01OTIsNiArNTkyLDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjIiLCBOVUxMLCB1YXJ0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgxLWNzcGkuMCIsIE5VTEwsIHNwaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgxLWNzcGkuMSIsIE5VTEwsIHNwaV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtbW1jLjAiLCBOVUxMLCBzZGhjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc2hjIiwgbXNoY19jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyNS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MjUuYwppbmRleCBkYWEwMTY1Li5hNjU4MzhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDI1LmMKQEAgLTIyOCw2ICsyMjgsNyBAQAogREVGSU5FX0NMT0NLKGVzZGhjMl9haGJfY2xrLCAwLCBDQ01fQ0dDUjAsIDIyLCBnZXRfcmF0ZV9lc2RoYzIsCSBOVUxMLCBOVUxMKTsKIERFRklORV9DTE9DSyhlc2RoYzJfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAgNCwgZ2V0X3JhdGVfZXNkaGMyLAkgTlVMTCwKIAkJJmVzZGhjMl9haGJfY2xrKTsKK0RFRklORV9DTE9DSyhzZG1hX2FoYl9jbGssIDAsIENDTV9DR0NSMCwgMjYsIE5VTEwsCSBOVUxMLCBOVUxMKTsKIERFRklORV9DTE9DSyhmZWNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyMywgTlVMTCwJIE5VTEwsIE5VTEwpOwogREVGSU5FX0NMT0NLKGxjZGNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyNCwgTlVMTCwJIE5VTEwsIE5VTEwpOwogREVGSU5FX0NMT0NLKGxjZGNfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAgNywgTlVMTCwJIE5VTEwsICZsY2RjX2FoYl9jbGspOwpAQCAtMjUzLDYgKzI1NCw3IEBACiBERUZJTkVfQ0xPQ0sod2R0X2NsaywgICAgMCwgQ0NNX0NHQ1IyLCAxOSwgZ2V0X3JhdGVfaXBnLCBOVUxMLCAgTlVMTCk7CiBERUZJTkVfQ0xPQ0soc3NpMV9jbGssICAwLCBDQ01fQ0dDUjIsIDExLCBnZXRfcmF0ZV9zc2kxLCBOVUxMLCAmc3NpMV9wZXJfY2xrKTsKIERFRklORV9DTE9DSyhzc2kyX2NsaywgIDEsIENDTV9DR0NSMiwgMTIsIGdldF9yYXRlX3NzaTIsIE5VTEwsICZzc2kyX3Blcl9jbGspOworREVGSU5FX0NMT0NLKHNkbWFfY2xrLCAwLCBDQ01fQ0dDUjIsICA2LCBnZXRfcmF0ZV9pcGcsIE5VTEwsICZzZG1hX2FoYl9jbGspOwogREVGSU5FX0NMT0NLKGVzZGhjMV9jbGssICAwLCBDQ01fQ0dDUjEsIDEzLCBnZXRfcmF0ZV9lc2RoYzEsIE5VTEwsCiAJCSZlc2RoYzFfcGVyX2Nsayk7CiBERUZJTkVfQ0xPQ0soZXNkaGMyX2NsaywgIDEsIENDTV9DR0NSMSwgMTQsIGdldF9yYXRlX2VzZGhjMiwgTlVMTCwKQEAgLTMwNCw2ICszMDYsNyBAQAogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXVkbXV4IiwgYXVkbXV4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImZsZXhjYW4uMCIsIE5VTEwsIGNhbjFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZmxleGNhbi4xIiwgTlVMTCwgY2FuMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtc2RtYSIsIE5VTEwsIHNkbWFfY2xrKQogfTsKIAogaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDEuaCBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MS5oCmluZGV4IDgxOTc5NDguLmRhNTkzNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MS5oCkBAIC05LDYgKzksMTAgQEAKICNpbmNsdWRlIDxtYWNoL214MS5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X2ZiX2RhdGEgaW14MV9pbXhfZmJfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MV9hZGRfaW14X2ZiKHBkYXRhKSBcCisgICAgaW14X2FkZF9pbXhfZmIoJmlteDFfaW14X2ZiX2RhdGEsIHBkYXRhKQorCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfaTJjX2RhdGEgaW14MV9pbXhfaTJjX2RhdGEgX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDFfYWRkX2lteF9pMmMocGRhdGEpCQlcCiAJaW14X2FkZF9pbXhfaTJjKCZpbXgxX2lteF9pMmNfZGF0YSwgcGRhdGEpCkBAIC0xOCwzICsyMiwxMCBAQAogCWlteF9hZGRfaW14X3VhcnRfM2lycSgmaW14MV9pbXhfdWFydF9kYXRhW2lkXSwgcGRhdGEpCiAjZGVmaW5lIGlteDFfYWRkX2lteF91YXJ0MChwZGF0YSkJaW14MV9hZGRfaW14X3VhcnQoMCwgcGRhdGEpCiAjZGVmaW5lIGlteDFfYWRkX2lteF91YXJ0MShwZGF0YSkJaW14MV9hZGRfaW14X3VhcnQoMSwgcGRhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSBpbXgxX2NzcGlfZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgxX2FkZF9jc3BpKGlkLCBwZGF0YSkgICBcCisJaW14X2FkZF9zcGlfaW14KCZpbXgxX2NzcGlfZGF0YVtpZF0sIHBkYXRhKQorCisjZGVmaW5lIGlteDFfYWRkX3NwaV9pbXgwKHBkYXRhKSBpbXgxX2FkZF9jc3BpKDAsIHBkYXRhKQorI2RlZmluZSBpbXgxX2FkZF9zcGlfaW14MShwZGF0YSkgaW14MV9hZGRfY3NwaSgxLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MjUuaCBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MjUuaAppbmRleCBiZGUzM2NhLi5iNTkxZDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDI1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy1pbXgyNS5oCkBAIC04MSw3ICs4MSwxMSBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9zcGlfaW14X2RhdGEgaW14MjVfY3NwaV9kYXRhW10gX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14KGlkLCBwZGF0YSkJXAotCWlteF9hZGRfc3BpX2lteCgmaW14MjVfc3BpX2lteF9kYXRhW2lkXSwgcGRhdGEpCisJaW14X2FkZF9zcGlfaW14KCZpbXgyNV9jc3BpX2RhdGFbaWRdLCBwZGF0YSkKICNkZWZpbmUgaW14MjVfYWRkX3NwaV9pbXgwKHBkYXRhKQlpbXgyNV9hZGRfc3BpX2lteCgwLCBwZGF0YSkKICNkZWZpbmUgaW14MjVfYWRkX3NwaV9pbXgxKHBkYXRhKQlpbXgyNV9hZGRfc3BpX2lteCgxLCBwZGF0YSkKICNkZWZpbmUgaW14MjVfYWRkX3NwaV9pbXgyKHBkYXRhKQlpbXgyNV9hZGRfc3BpX2lteCgyLCBwZGF0YSkKKworZXh0ZXJuIHN0cnVjdCBpbXhfbXhjX3B3bV9kYXRhIGlteDI1X214Y19wd21fZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfbXhjX3B3bShpZCkJXAorCWlteF9hZGRfbXhjX3B3bSgmaW14MjVfbXhjX3B3bV9kYXRhW2lkXSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RtYS12MS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLXYxLmMKaW5kZXggZTlmMTc2OS4uMjM2ZjE0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLXYxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLXYxLmMKQEAgLTY5OSw3ICs2OTksNyBAQAogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCW1lbXNldChpbXhkbWEsIDAsIHNpemVvZihpbXhkbWEpKTsKKwltZW1zZXQoaW14ZG1hLCAwLCBzaXplb2YoKmlteGRtYSkpOwogCWlteGRtYS0+bmFtZSA9IG5hbWU7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAvKiByZXF1ZXN0X2lycSgpIGNhbiBibG9jayAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9laGNpLWlteDI1LmMgYi9hcmNoL2FybS9tYWNoLWlteC9laGNpLWlteDI1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1ZGFmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2VoY2ktaW14MjUuYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgorCisjZGVmaW5lIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQJMHg2MDAKKworI2RlZmluZSBNWDI1X09UR19TSUNfU0hJRlQJMjkKKyNkZWZpbmUgTVgyNV9PVEdfU0lDX01BU0sJKDB4MyA8PCBNWDI1X09UR19TSUNfU0hJRlQpCisjZGVmaW5lIE1YMjVfT1RHX1BNX0JJVAkJKDEgPDwgMjQpCisKKyNkZWZpbmUgTVgyNV9IMV9TSUNfU0hJRlQJMjEKKyNkZWZpbmUgTVgyNV9IMV9TSUNfTUFTSwkoMHgzIDw8IE1YMjVfSDFfU0lDX1NISUZUKQorI2RlZmluZSBNWDI1X0gxX1BNX0JJVAkJKDEgPDwgOCkKKyNkZWZpbmUgTVgyNV9IMV9JUFBVRV9VUF9CSVQJKDEgPDwgNykKKyNkZWZpbmUgTVgyNV9IMV9JUFBVRV9ET1dOX0JJVAkoMSA8PCA2KQorI2RlZmluZSBNWDI1X0gxX1RMTF9CSVQJCSgxIDw8IDUpCisjZGVmaW5lIE1YMjVfSDFfVVNCVEVfQklUCSgxIDw8IDQpCisKK2ludCBteDI1X2luaXRpYWxpemVfdXNiX2h3KGludCBwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwl2ID0gcmVhZGwoTVgyNV9JT19BRERSRVNTKE1YMjVfVVNCX0JBU0VfQUREUiArIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoJLyogT1RHIHBvcnQgKi8KKwkJdiAmPSB+KE1YMjVfT1RHX1NJQ19NQVNLIHwgTVgyNV9PVEdfUE1fQklUKTsKKwkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykgPDwgTVgyNV9PVEdfU0lDX1NISUZUOworCisJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKKwkJCXYgfD0gTVgyNV9PVEdfUE1fQklUOworCisJCWJyZWFrOworCWNhc2UgMTogLyogSDEgcG9ydCAqLworCQl2ICY9IH4oTVgyNV9IMV9TSUNfTUFTSyB8IE1YMjVfSDFfUE1fQklUIHwgTVgyNV9IMV9UTExfQklUIHwKKwkJCU1YMjVfSDFfVVNCVEVfQklUIHwgTVgyNV9IMV9JUFBVRV9ET1dOX0JJVCB8IE1YMjVfSDFfSVBQVUVfVVBfQklUKTsKKwkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykgPDwgTVgyNV9IMV9TSUNfU0hJRlQ7CisKKwkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpKQorCQkJdiB8PSBNWDI1X0gxX1BNX0JJVDsKKworCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1RUTF9FTkFCTEVEKSkKKwkJCXYgfD0gTVgyNV9IMV9UTExfQklUOworCisJCWlmIChmbGFncyAmIE1YQ19FSENJX0lOVEVSTkFMX1BIWSkKKwkJCXYgfD0gTVgyNV9IMV9VU0JURV9CSVQ7CisKKwkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfSVBQVUVfRE9XTikKKwkJCXYgfD0gTVgyNV9IMV9JUFBVRV9ET1dOX0JJVDsKKworCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9JUFBVRV9VUCkKKwkJCXYgfD0gTVgyNV9IMV9JUFBVRV9VUF9CSVQ7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKHYsIE1YMjVfSU9fQUREUkVTUyhNWDI1X1VTQl9CQVNFX0FERFIgKyBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZWhjaS1pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZWhjaS1pbXgyNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjk0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9laGNpLWlteDI3LmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KKworI2RlZmluZSBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUCTB4NjAwCisKKyNkZWZpbmUgTVgyN19PVEdfU0lDX1NISUZUCTI5CisjZGVmaW5lIE1YMjdfT1RHX1NJQ19NQVNLCSgweDMgPDwgTVgyN19PVEdfU0lDX1NISUZUKQorI2RlZmluZSBNWDI3X09UR19QTV9CSVQJCSgxIDw8IDI0KQorCisjZGVmaW5lIE1YMjdfSDJfU0lDX1NISUZUCTIxCisjZGVmaW5lIE1YMjdfSDJfU0lDX01BU0sJKDB4MyA8PCBNWDI3X0gyX1NJQ19TSElGVCkKKyNkZWZpbmUgTVgyN19IMl9QTV9CSVQJCSgxIDw8IDE2KQorI2RlZmluZSBNWDI3X0gyX0RUX0JJVAkJKDEgPDwgNSkKKworI2RlZmluZSBNWDI3X0gxX1NJQ19TSElGVAkxMworI2RlZmluZSBNWDI3X0gxX1NJQ19NQVNLCSgweDMgPDwgTVgyN19IMV9TSUNfU0hJRlQpCisjZGVmaW5lIE1YMjdfSDFfUE1fQklUCQkoMSA8PCA4KQorI2RlZmluZSBNWDI3X0gxX0RUX0JJVAkJKDEgPDwgNCkKKworaW50IG14MjdfaW5pdGlhbGl6ZV91c2JfaHcoaW50IHBvcnQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCXYgPSByZWFkbChNWDI3X0lPX0FERFJFU1MoTVgyN19VU0JfQkFTRV9BRERSICsgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAwOgkvKiBPVEcgcG9ydCAqLworCQl2ICY9IH4oTVgyN19PVEdfU0lDX01BU0sgfCBNWDI3X09UR19QTV9CSVQpOworCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKSA8PCBNWDI3X09UR19TSUNfU0hJRlQ7CisKKwkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpKQorCQkJdiB8PSBNWDI3X09UR19QTV9CSVQ7CisJCWJyZWFrOworCWNhc2UgMTogLyogSDEgcG9ydCAqLworCQl2ICY9IH4oTVgyN19IMV9TSUNfTUFTSyB8IE1YMjdfSDFfUE1fQklUIHwgTVgyN19IMV9EVF9CSVQpOworCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKSA8PCBNWDI3X0gxX1NJQ19TSElGVDsKKworCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCisJCQl2IHw9IE1YMjdfSDFfUE1fQklUOworCisJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfVFRMX0VOQUJMRUQpKQorCQkJdiB8PSBNWDI3X0gxX0RUX0JJVDsKKworCQlicmVhazsKKwljYXNlIDI6CS8qIEgyIHBvcnQgKi8KKwkJdiAmPSB+KE1YMjdfSDJfU0lDX01BU0sgfCBNWDI3X0gyX1BNX0JJVCB8IE1YMjdfSDJfRFRfQklUKTsKKwkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykgPDwgTVgyN19IMl9TSUNfU0hJRlQ7CisKKwkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpKQorCQkJdiB8PSBNWDI3X0gyX1BNX0JJVDsKKworCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1RUTF9FTkFCTEVEKSkKKwkJCXYgfD0gTVgyN19IMl9EVF9CSVQ7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKHYsIE1YMjdfSU9fQUREUkVTUyhNWDI3X1VTQl9CQVNFX0FERFIgKyBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYwppbmRleCAyNzVjODU4Li5mYTUyODgwMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2V1a3JlYV9tYmlteDI3LWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2V1a3JlYV9tYmlteDI3LWJhc2Vib2FyZC5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAogI2RlZmluZSBBRFM3ODQ2X1BFTkRPV04gKEdQSU9fUE9SVEQgfCAyNSkKIAotc3RhdGljIHZvaWQgYWRzNzg0Nl9kZXZfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgYWRzNzg0Nl9kZXZfaW5pdCh2b2lkKQogewogCWlmIChncGlvX3JlcXVlc3QoQURTNzg0Nl9QRU5ET1dOLCAiQURTNzg0NiBwZW5kb3duIikgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGFkczc0NiBwZW4gZG93biBHUElPXG4iKTsKQEAgLTI2OCw3ICsyNjgsOCBAQAogCS5rZWVwX3ZyZWZfb24JCT0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBfX21heWJlX3VudXNlZAorCQlldWtyZWFfbWJpbXgyN19zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewogCQkubW9kYWxpYXMJPSAiYWRzNzg0NiIsCiAJCS5idXNfbnVtCT0gMCwKQEAgLTM1NywxMyArMzU4LDExIEBACiAJYWRzNzg0Nl9kZXZfaW5pdCgpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKIAkvKiBTUElfQ1MwIGluaXQgKi8KIAlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEQgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKIAlpbXgyN19hZGRfc3BpX2lteDAoJmV1a3JlYV9tYmlteDI3X3NwaTBfZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm8sCiAJCQlBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9ib2FyZF9pbmZvKSk7Ci0jZW5kaWYKIAogCS8qIExlZHMgY29uZmlndXJhdGlvbiAqLwogCW14Y19ncGlvX21vZGUoR1BJT19QT1JURiB8IDE2IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jCmluZGV4IDZjZjA0ZGEuLjc1OTI5OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtY3B1aW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDI3LmMKQEAgLTIwOSwxNyArMjA5LDI1IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKK3N0YXRpYyBpbnQgZXVrcmVhX2NwdWlteDI3X290Z19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MjdfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuaW5pdAk9IGV1a3JlYV9jcHVpbXgyN19vdGdfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07CiAKK3N0YXRpYyBpbnQgZXVrcmVhX2NwdWlteDI3X3VzYmgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXgyN19pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JKTsKK30KKwogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLmluaXQJPSBldWtyZWFfY3B1aW14MjdfdXNiaDJfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07Ci0jZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLApAQCAtMjczLDIxICsyODEsMTkgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAlpZiAob3RnX21vZGVfaG9zdCkgewotCQlvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7Ci0KLQkJaW14MjdfYWRkX214Y19laGNpX290Zygmb3RnX3BkYXRhKTsKKwkJb3RnX3BkYXRhLm90ZyA9IGlteF9vdGdfdWxwaV9jcmVhdGUoVUxQSV9PVEdfRFJWVkJVUyB8CisJCQkJVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCQlpZiAob3RnX3BkYXRhLm90ZykKKwkJCWlteDI3X2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CisJfSBlbHNlIHsKKwkJaW14MjdfYWRkX2ZzbF91c2IyX3VkYygmb3RnX2RldmljZV9wZGF0YSk7CiAJfQogCi0JdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7Ci0KLQlpbXgyN19hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKLSNlbmRpZgotCWlmICghb3RnX21vZGVfaG9zdCkKLQkJaW14MjdfYWRkX2ZzbF91c2IyX3VkYygmb3RnX2RldmljZV9wZGF0YSk7CisJdXNiaDJfcGRhdGEub3RnID0gaW14X290Z191bHBpX2NyZWF0ZShVTFBJX09UR19EUlZWQlVTIHwKKwkJCVVMUElfT1RHX0RSVlZCVVNfRVhUKTsKKwlpZiAodXNiaDJfcGRhdGEub3RnKQorCQlpbXgyN19hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKIAogI2lmZGVmIENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRAogCWV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KCk7CkBAIC0zMDQsOSArMzEwLDEwIEBACiB9OwogCiBNQUNISU5FX1NUQVJUKENQVUlNWDI3LCAiRVVLUkVBIENQVUlNWDI3IikKLQkuYm9vdF9wYXJhbXMgICAgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBldWtyZWFfY3B1aW14MjdfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmZXVrcmVhX2NwdWlteDI3X3RpbWVyLAorCS5ib290X3BhcmFtcyA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgyN19tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgyN19pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MjdfaW5pdF9pcnEsCisJLnRpbWVyID0gJmV1a3JlYV9jcHVpbXgyN190aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gZXVrcmVhX2NwdWlteDI3X2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1ldWtyZWFfY3B1aW14MjUuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtZXVrcmVhX2NwdWlteDI1LmMKaW5kZXggZWIzOTVhYi4uOWRhOGQxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1ldWtyZWFfY3B1aW14MjUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWV1a3JlYV9jcHVpbXgyNS5jCkBAIC04NCwxNSArODQsMjUgQEAKIAl9LAogfTsKIAorc3RhdGljIGludCBldWtyZWFfY3B1aW14MjVfb3RnX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXgyNV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuaW5pdAk9IGV1a3JlYV9jcHVpbXgyNV9vdGdfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JLAotCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07CiAKK3N0YXRpYyBpbnQgZXVrcmVhX2NwdWlteDI1X3VzYmgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXgyNV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkgfAorCQkJTVhDX0VIQ0lfSU5URVJOQUxfUEhZIHwgTVhDX0VIQ0lfSVBQVUVfRE9XTik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuaW5pdAk9IGV1a3JlYV9jcHVpbXgyNV91c2JoMl9pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1NFUklBTCwKLQkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSB8Ci0JCSAgTVhDX0VIQ0lfSVBQVUVfRE9XTiwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBvdGdfZGV2aWNlX3BkYXRhIF9faW5pdGNvbnN0ID0gewpAQCAtMTUzLDkgKzE2MywxMCBAQAogCiBNQUNISU5FX1NUQVJUKEVVS1JFQV9DUFVJTVgyNSwgIkV1a3JlYSBDUFVJTVgyNSIpCiAJLyogTWFpbnRhaW5lcjogRXVrcmVhIEVsZWN0cm9tYXRpcXVlICovCi0JLmJvb3RfcGFyYW1zICAgID0gTVgyNV9QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjVfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjVfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gZXVrcmVhX2NwdWlteDI1X2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJmV1a3JlYV9jcHVpbXgyNV90aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDI1X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MjVfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MjVfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDI1X2luaXRfaXJxLAorCS50aW1lciA9ICZldWtyZWFfY3B1aW14MjVfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IGV1a3JlYV9jcHVpbXgyNV9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14Mjdfdmlzc3RyaW1fbTEwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3X3Zpc3N0cmltX20xMC5jCmluZGV4IDQwYTM2NjYuLmQ3ZTBkMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14Mjdfdmlzc3RyaW1fbTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN192aXNzdHJpbV9tMTAuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgpAQCAtNjYsNiArNjcsMTEgQEAKIAlQRDE1X0FPVVRfRkVDX0NPTCwKIAlQRDE2X0FJTl9GRUNfVFhfRVIsCiAJUEYyM19BSU5fRkVDX1RYX0VOLAorCS8qIFNTSTEgKi8KKwlQQzIwX1BGX1NTSTFfRlMsCisJUEMyMV9QRl9TU0kxX1JYRCwKKwlQQzIyX1BGX1NTSTFfVFhELAorCVBDMjNfUEZfU1NJMV9DTEssCiAJLyogU0RIQzEgKi8KIAlQRTE4X1BGX1NEMV9EMCwKIAlQRTE5X1BGX1NEMV9EMSwKQEAgLTIwNCwyMCArMjEwLDMwIEBACiAJCUkyQ19CT0FSRF9JTkZPKCJwY2E5NTU1IiwgMHgyMCksCiAJCS5wbGF0Zm9ybV9kYXRhID0gJnZpc3N0cmltX20xMF9wY2E5NTU1X3BkYXRhLAogCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMzJ4NCIsIDB4MTgpLAorCX0KIH07CiAKIC8qIFVTQiBPVEcgKi8KIHN0YXRpYyBpbnQgb3RnX3BoeV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJZ3Bpb19zZXRfdmFsdWUoT1RHX1BIWV9DU19HUElPLCAwKTsKLQlyZXR1cm4gMDsKKworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gbXgyN19pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhCiB2aXNzdHJpbV9tMTBfdXNib3RnX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5pbml0ID0gb3RnX3BoeV9pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAorfTsKKworLyogU1NJICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteF9zc2lfcGxhdGZvcm1fZGF0YSB2aXNzdHJpbV9tMTBfc3NpX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncwkJCT0gSU1YX1NTSV9ETUEgfCBJTVhfU1NJX1NZTiwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2aXNzdHJpbV9tMTBfYm9hcmRfaW5pdCh2b2lkKQpAQCAtMjI5LDYgKzI0NSw3IEBACiAJaWYgKHJldCkKIAkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0dXAgcGlucyAoJWQpXG4iLCByZXQpOwogCisJaW14MjdfYWRkX2lteF9zc2koMCwgJnZpc3N0cmltX20xMF9zc2lfcGRhdGEpOwogCWlteDI3X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOwogCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgdmlzc3RyaW1fbTEwX2kyY19kZXZpY2VzLApAQCAtMjUxLDkgKzI2OCwxMCBAQAogfTsKIAogTUFDSElORV9TVEFSVChJTVgyN19WSVNTVFJJTV9NMTAsICJWaXN0YSBTaWxpY29uIFZpc3N0cmltX00xMCIpCi0JLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gdmlzc3RyaW1fbTEwX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJnZpc3N0cmltX20xMF90aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MjdfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MjdfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDI3X2luaXRfaXJxLAorCS50aW1lciA9ICZ2aXNzdHJpbV9tMTBfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IHZpc3N0cmltX20xMF9ib2FyZF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdpcGNhbS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN2lwY2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNmNkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdpcGNhbS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IEZhYmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1AZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14MjcuaCIKKworc3RhdGljIGNvbnN0IGludCBteDI3aXBjYW1fcGluc1tdIF9faW5pdGNvbnN0ID0geworCS8qIFVBUlQxICovCisJUEUxMl9QRl9VQVJUMV9UWEQsCisJUEUxM19QRl9VQVJUMV9SWEQsCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjdpcGNhbV9pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDI3aXBjYW1fcGlucywgQVJSQVlfU0laRShteDI3aXBjYW1fcGlucyksCisJCSJteDI3aXBjYW0iKTsKKworCWlteDI3X2FkZF9pbXhfdWFydDAoTlVMTCk7CisJaW14MjdfYWRkX2ZlYyhOVUxMKTsKKwlpbXgyN19hZGRfaW14Ml93ZHQoTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI3aXBjYW1fdGltZXJfaW5pdCh2b2lkKQoreworCW14MjdfY2xvY2tzX2luaXQoMjUwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3aXBjYW1fdGltZXIgPSB7CisJLmluaXQJPSBteDI3aXBjYW1fdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoSU1YMjdJUENBTSwgIkZyZWVzY2FsZSBJTVgyN0lQQ0FNIikKKwkvKiBtYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLworCS5ib290X3BhcmFtcyA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgyN19tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgyN19pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MjdfaW5pdF9pcnEsCisJLnRpbWVyID0gJm14MjdpcGNhbV90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXgyN2lwY2FtX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN2xpdGUuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdsaXRlLmMKaW5kZXggM2ExMjAyZS4uODQxMTQwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN2xpdGUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3bGl0ZS5jCkBAIC03NSw5ICs3NSwxMCBAQAogfTsKIAogTUFDSElORV9TVEFSVChJTVgyN0xJVEUsICJMb2dpY1BEIGkuTVgyN0xJVEUiKQotCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjdsaXRlX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MjdsaXRlX3RpbWVyLAorCS5ib290X3BhcmFtcyA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgyN19tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgyN19pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MjdfaW5pdF9pcnEsCisJLnRpbWVyID0gJm14MjdsaXRlX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBteDI3bGl0ZV9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgxYWRzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MWFkcy5jCmluZGV4IDFmNDQ2ZTUuLjQ3Y2Y1NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDFhZHMuYwpAQCAtMTQ0LDE3ICsxNDQsMTkgQEAKIAogTUFDSElORV9TVEFSVChNWDFBRFMsICJGcmVlc2NhbGUgTVgxQURTIikKIAkvKiBNYWludGFpbmVyOiBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4ICovCi0JLmJvb3RfcGFyYW1zCT0gTVgxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbwkJPSBteDFfbWFwX2lvLAotCS5pbml0X2lycQk9IG14MV9pbml0X2lycSwKLQkudGltZXIJCT0gJm14MWFkc190aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbXgxYWRzX2luaXQsCisJLmJvb3RfcGFyYW1zID0gTVgxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgxX2luaXRfZWFybHksCisJLmluaXRfaXJxID0gbXgxX2luaXRfaXJxLAorCS50aW1lciA9ICZteDFhZHNfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IG14MWFkc19pbml0LAogTUFDSElORV9FTkQKIAogTUFDSElORV9TVEFSVChNWExBRFMsICJGcmVlc2NhbGUgTVhMQURTIikKLQkuYm9vdF9wYXJhbXMJPSBNWDFfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvCQk9IG14MV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gbXgxX2luaXRfaXJxLAotCS50aW1lcgkJPSAmbXgxYWRzX3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBteDFhZHNfaW5pdCwKKwkuYm9vdF9wYXJhbXMgPSBNWDFfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgxX21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDFfaW5pdF9pcnEsCisJLnRpbWVyID0gJm14MWFkc190aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXgxYWRzX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDIxYWRzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjFhZHMuYwppbmRleCAwYTM3MjU3Li5mYTUyYTEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjFhZHMuYwpAQCAtMzA0LDkgKzMwNCwxMCBAQAogCiBNQUNISU5FX1NUQVJUKE1YMjFBRFMsICJGcmVlc2NhbGUgaS5NWDIxQURTIikKIAkvKiBtYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLwotCS5ib290X3BhcmFtcyAgICA9IE1YMjFfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDIxYWRzX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDIxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjFhZHNfYm9hcmRfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgyMWFkc190aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDIxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MjFhZHNfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MjFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDIxX2luaXRfaXJxLAorCS50aW1lciA9ICZteDIxYWRzX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBteDIxYWRzX2JvYXJkX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jCmluZGV4IDgzODJlNzkuLjA2ZGE0MzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKQEAgLTEwMywxNCArMTAzLDE4IEBACiAJTVgyNV9QQURfU0QxX0RBVEExX19TRDFfREFUQTEsCiAJTVgyNV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIsCiAJTVgyNV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMsCisKKwkvKiBJMkMxICovCisJTVgyNV9QQURfSTJDMV9DTEtfX0kyQzFfQ0xLLAorCU1YMjVfUEFEX0kyQzFfREFUX19JMkMxX0RBVCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgbXgyNV9mZWNfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLnBoeSAgICA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLAogfTsKIAotI2RlZmluZSBGRUNfRU5BQkxFX0dQSU8JCTM1Ci0jZGVmaW5lIEZFQ19SRVNFVF9CX0dQSU8JMTA0CisjZGVmaW5lIEZFQ19FTkFCTEVfR1BJTwkJSU1YX0dQSU9fTlIoMiwgMykKKyNkZWZpbmUgRkVDX1JFU0VUX0JfR1BJTwlJTVhfR1BJT19OUig0LCA4KQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19mZWNfcmVzZXQodm9pZCkKIHsKQEAgLTE4NSw5ICsxODksMTQgQEAKIAkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14MjVwZGtfa2V5bWFwKSwKIH07CiAKK3N0YXRpYyBpbnQgbXgyNXBka191c2JoMl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MjVfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX0lOVEVSTkFMX1BIWSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuaW5pdAk9IG14MjVwZGtfdXNiaDJfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CkBAIC0xOTUsNiArMjA0LDEwIEBACiAJLnBoeV9tb2RlICAgICAgID0gRlNMX1VTQjJfUEhZX1VUTUksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG14MjVfM2RzX2kyYzBfZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX2luaXQodm9pZCkKIHsKIAlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDI1cGRrX3BhZHMsCkBAIC0yMTMsNiArMjI2LDcgQEAKIAlpbXgyNV9hZGRfaW14X2tleXBhZCgmbXgyNXBka19rZXltYXBfZGF0YSk7CiAKIAlpbXgyNV9hZGRfc2RoY2lfZXNkaGNfaW14KDAsIE5VTEwpOworCWlteDI1X2FkZF9pbXhfaTJjMCgmbXgyNV8zZHNfaTJjMF9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfdGltZXJfaW5pdCh2b2lkKQpAQCAtMjI2LDEwICsyNDAsMTAgQEAKIAogTUFDSElORV9TVEFSVChNWDI1XzNEUywgIkZyZWVzY2FsZSBNWDI1UERLICgzRFMpIikKIAkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLwotCS5ib290X3BhcmFtcyAgICA9IE1YMjVfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDI1X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDI1X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjVwZGtfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgyNXBka190aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDI1X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MjVfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MjVfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDI1X2luaXRfaXJxLAorCS50aW1lciA9ICZteDI1cGRrX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBteDI1cGRrX2luaXQsCiBNQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdfM2RzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdfM2RzLmMKaW5kZXggMTY0MzMxNS4uNjE0YjNjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3XzNkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyN18zZHMuYwpAQCAtOTgsNiArOTgsOSBAQAogCVBEMjJfUEZfQ1NQSTJfU0NMSywKIAlQRDIzX1BGX0NTUEkyX01JU08sCiAJUEQyNF9QRl9DU1BJMl9NT1NJLAorCS8qIEkyQzEgKi8KKwlQRDE3X1BGX0kyQ19EQVRBLAorCVBEMThfUEZfSTJDX0NMSywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CkBAIC0xNTksMTMgKzE2MiwxNSBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCitzdGF0aWMgaW50IG14MjdfM2RzX290Z19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MjdfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuaW5pdAk9IG14MjdfM2RzX290Z19pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCi0JLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAogfTsKLSNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgb3RnX2RldmljZV9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub3BlcmF0aW5nX21vZGUgPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCkBAIC0yMTYsNyArMjIxLDcgQEAKIAkuY29uc3VtZXJfc3VwcGxpZXMgPSB2Z2VuX2NvbnN1bWVycywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIG14MjdfM2RzX3JlZ3VsYXRvcnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfaW5pdF9kYXRhIG14MjdfM2RzX3JlZ3VsYXRvcnNbXSA9IHsKIAl7CiAJCS5pZCA9IE1DMTM3ODNfUkVHX1ZNTUMxLAogCQkuaW5pdF9kYXRhID0gJnZtbWMxX2luaXQsCkBAIC0yMjcsMTAgKzIzMiwxMCBAQAogfTsKIAogLyogTUMxMzc4MyAqLwotc3RhdGljIHN0cnVjdCBtYzEzNzgzX3BsYXRmb3JtX2RhdGEgbWMxMzc4M19wZGF0YSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBtYzEzeHh4X3BsYXRmb3JtX2RhdGEgbWMxMzc4M19wZGF0YSBfX2luaXRkYXRhID0gewogCS5yZWd1bGF0b3JzID0gbXgyN18zZHNfcmVndWxhdG9ycywKIAkubnVtX3JlZ3VsYXRvcnMgPSBBUlJBWV9TSVpFKG14MjdfM2RzX3JlZ3VsYXRvcnMpLAotCS5mbGFncyAgPSBNQzEzNzgzX1VTRV9SRUdVTEFUT1IsCisJLmZsYWdzICA9IE1DMTNYWFhfVVNFX1JFR1VMQVRPUiwKIH07CiAKIC8qIFNQSSAqLwpAQCAtMjUzLDYgKzI1OCw5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbXgyN18zZHNfaTJjMF9kYXRhIF9faW5pdGNvbnN0ID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG14MjdwZGtfaW5pdCh2b2lkKQogewpAQCAtMjY1LDE0ICsyNzMsMTUgQEAKIAlpbXgyN19hZGRfbXhjX21tYygwLCAmc2RoYzFfcGRhdGEpOwogCWlteDI3X2FkZF9pbXgyX3dkdChOVUxMKTsKIAlvdGdfcGh5X2luaXQoKTsKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKLQlpZiAob3RnX21vZGVfaG9zdCkgewotCQlvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQkJaW14MjdfYWRkX214Y19laGNpX290Zygmb3RnX3BkYXRhKTsKKwlpZiAob3RnX21vZGVfaG9zdCkgeworCQlvdGdfcGRhdGEub3RnID0gaW14X290Z191bHBpX2NyZWF0ZShVTFBJX09UR19EUlZWQlVTIHwKKwkJCQlVTFBJX09UR19EUlZWQlVTX0VYVCk7CisKKwkJaWYgKG90Z19wZGF0YS5vdGcpCisJCQlpbXgyN19hZGRfbXhjX2VoY2lfb3RnKCZvdGdfcGRhdGEpOwogCX0KLSNlbmRpZgorCiAJaWYgKCFvdGdfbW9kZV9ob3N0KQogCQlpbXgyN19hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKIApAQCAtMjgyLDYgKzI5MSw3IEBACiAKIAlpZiAobXhjX2V4cGlvX2luaXQoTVgyN19DUzVfQkFTRV9BRERSLCBFWFBJT19QQVJFTlRfSU5UKSkKIAkJcHJfd2FybigiSW5pdCBvZiB0aGUgZGVidWdib2FyZCBmYWlsZWQsIGFsbCBkZXZpY2VzIG9uIHRoZSBkZWJ1Z2JvYXJkIGFyZSB1bnVzYWJsZS5cbiIpOworCWlteDI3X2FkZF9pbXhfaTJjKDAsICZteDI3XzNkc19pMmMwX2RhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyN3Bka190aW1lcl9pbml0KHZvaWQpCkBAIC0yOTUsOSArMzA1LDEwIEBACiAKIE1BQ0hJTkVfU1RBUlQoTVgyN18zRFMsICJGcmVlc2NhbGUgTVgyN1BESyIpCiAJLyogbWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KLQkuYm9vdF9wYXJhbXMgICAgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBteDI3cGRrX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MjdwZGtfdGltZXIsCisJLmJvb3RfcGFyYW1zID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gPSBteDI3X21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDI3X2luaXRfZWFybHksCisJLmluaXRfaXJxID0gbXgyN19pbml0X2lycSwKKwkudGltZXIgPSAmbXgyN3Bka190aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXgyN3Bka19pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyN2Fkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3YWRzLmMKaW5kZXggYjgzMmY5Ni4uMzY3ZDFlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3YWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3YWRzLmMKQEAgLTM0NCw5ICszNDQsMTAgQEAKIAogTUFDSElORV9TVEFSVChNWDI3QURTLCAiRnJlZXNjYWxlIGkuTVgyN0FEUyIpCiAJLyogbWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KLQkuYm9vdF9wYXJhbXMgICAgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgyN2Fkc19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBteDI3YWRzX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MjdhZHNfdGltZXIsCisJLmJvb3RfcGFyYW1zID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gPSBteDI3YWRzX21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDI3X2luaXRfZWFybHksCisJLmluaXRfaXJxID0gbXgyN19pbml0X2lycSwKKwkudGltZXIgPSAmbXgyN2Fkc190aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXgyN2Fkc19ib2FyZF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXh0X3RkNjAuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXh0X3RkNjAuYwppbmRleCA0Y2U3MWIwLi42OTc4N2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14dF90ZDYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teHRfdGQ2MC5jCkBAIC0yNjYsMTAgKzI2NiwxMCBAQAogCiBNQUNISU5FX1NUQVJUKE1YVF9URDYwLCAiTWF4dHJhY2sgaS1NWFQgVEQ2MCIpCiAJLyogbWFpbnRhaW5lcjogTWF4dHJhY2sgSW5kdXN0cmlhbCAqLwotCS5ib290X3BhcmFtcwk9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvCQk9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycQk9IG14MjdfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IG14dF90ZDYwX2JvYXJkX2luaXQsCi0JLnRpbWVyCQk9ICZteHRfdGQ2MF90aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MjdfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MjdfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDI3X2luaXRfaXJxLAorCS50aW1lciA9ICZteHRfdGQ2MF90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXh0X3RkNjBfYm9hcmRfaW5pdCwKIE1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNhMTAwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjYTEwMC5jCmluZGV4IGNjY2MwYTAuLjYzZTE4MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNhMTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY2ExMDAuYwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAJfQogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBzcGlfZWVwcm9tIGF0MjUzMjAgPSB7CiAJLm5hbWUJCT0gImF0MjUzMjBhbiIsCiAJLmJ5dGVfbGVuCT0gNDA5NiwKQEAgLTIxMSw3ICsyMTAsNiBAQAogCS5jaGlwc2VsZWN0CT0gcGNhMTAwX3NwaV9jcywKIAkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjYTEwMF9zcGlfY3MpLAogfTsKLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBwY2ExMDBfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKQEAgLTI2OSwzMSArMjY3LDMzIEBACiAJLmV4aXQgPSBwY2ExMDBfc2RoYzJfZXhpdCwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIHN0YXRpYyBpbnQgb3RnX3BoeV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJZ3Bpb19zZXRfdmFsdWUoT1RHX1BIWV9DU19HUElPLCAwKTsKLQlyZXR1cm4gMDsKKworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gbXgyN19pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JKTsKIH0KIAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSBfX2luaXRkYXRhID0gewogCS5pbml0CT0gb3RnX3BoeV9pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCi0JLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAogfTsKIAogc3RhdGljIGludCB1c2JoMl9waHlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWdwaW9fc2V0X3ZhbHVlKFVTQkgyX1BIWV9DU19HUElPLCAwKTsKLQlyZXR1cm4gMDsKKworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gbXgyN19pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JKTsKIH0KIAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmluaXQJPSB1c2JoMl9waHlfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07Ci0jZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLApAQCAtMzg5LDM2ICszODksMzMgQEAKIAogCWlteDI3X2FkZF9pbXhfaTJjKDEsICZwY2ExMDBfaTJjMV9kYXRhKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQogCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19JTik7CiAJbXhjX2dwaW9fbW9kZShHUElPX1BPUlREIHwgMjcgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhwY2ExMDBfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShwY2ExMDBfc3BpX2JvYXJkX2luZm8pKTsKIAlpbXgyN19hZGRfc3BpX2lteDAoJnBjYTEwMF9zcGkwX2RhdGEpOwotI2VuZGlmCiAKIAlncGlvX3JlcXVlc3QoT1RHX1BIWV9DU19HUElPLCAidXNiLW90Zy1jcyIpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChPVEdfUEhZX0NTX0dQSU8sIDEpOwogCWdwaW9fcmVxdWVzdChVU0JIMl9QSFlfQ1NfR1BJTywgInVzYi1ob3N0Mi1jcyIpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChVU0JIMl9QSFlfQ1NfR1BJTywgMSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAlpZiAob3RnX21vZGVfaG9zdCkgewotCQlvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CisJCW90Z19wZGF0YS5vdGcgPSBpbXhfb3RnX3VscGlfY3JlYXRlKFVMUElfT1RHX0RSVlZCVVMgfAorCQkJCVVMUElfT1RHX0RSVlZCVVNfRVhUKTsKIAotCQlpbXgyN19hZGRfbXhjX2VoY2lfb3RnKCZvdGdfcGRhdGEpOworCQlpZiAob3RnX3BkYXRhLm90ZykKKwkJCWlteDI3X2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CisJfSBlbHNlIHsKKwkJZ3Bpb19zZXRfdmFsdWUoT1RHX1BIWV9DU19HUElPLCAwKTsKKwkJaW14MjdfYWRkX2ZzbF91c2IyX3VkYygmb3RnX2RldmljZV9wZGF0YSk7CiAJfQogCiAJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQlpbXgyN19hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKLSNlbmRpZgotCWlmICghb3RnX21vZGVfaG9zdCkgewotCQlncGlvX3NldF92YWx1ZShPVEdfUEhZX0NTX0dQSU8sIDApOwotCQlpbXgyN19hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKLQl9CisJaWYgKHVzYmgyX3BkYXRhLm90ZykKKwkJaW14MjdfYWRkX214Y19laGNpX2hzKDIsICZ1c2JoMl9wZGF0YSk7CiAKIAlpbXgyN19hZGRfaW14X2ZiKCZwY2ExMDBfZmJfZGF0YSk7CiAKQEAgLTQzNywxMCArNDM0LDEwIEBACiB9OwogCiBNQUNISU5FX1NUQVJUKFBDQTEwMCwgInBoeUNBUkQtaS5NWDI3IikKLQkuYm9vdF9wYXJhbXMgICAgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBwY2ExMDBfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmcGNhMTAwX3RpbWVyLAorCS5ib290X3BhcmFtcyA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgyN19tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgyN19pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MjdfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSA9IHBjYTEwMF9pbml0LAorCS50aW1lciA9ICZwY2ExMDBfdGltZXIsCiBNQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzOC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wMzguYwppbmRleCA1MDU2MTQ4Li4zOGM3NzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNtMDM4LmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogCS5jb25zdW1lcl9zdXBwbGllcyA9IGNhbV9jb25zdW1lcnMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSBwY20wMzhfcmVndWxhdG9yc1tdID0geworc3RhdGljIHN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9pbml0X2RhdGEgcGNtMDM4X3JlZ3VsYXRvcnNbXSA9IHsKIAl7CiAJCS5pZCA9IE1DMTM3ODNfUkVHX1ZDQU0sCiAJCS5pbml0X2RhdGEgPSAmY2FtX2RhdGEsCkBAIC0yNjIsMTEgKzI2MiwxMSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBwY20wMzhfcG1pYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWMxM3h4eF9wbGF0Zm9ybV9kYXRhIHBjbTAzOF9wbWljID0gewogCS5yZWd1bGF0b3JzID0gcGNtMDM4X3JlZ3VsYXRvcnMsCiAJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShwY20wMzhfcmVndWxhdG9ycyksCi0JLmZsYWdzID0gTUMxMzc4M19VU0VfQURDIHwgTUMxMzc4M19VU0VfUkVHVUxBVE9SIHwKLQkJIE1DMTM3ODNfVVNFX1RPVUNIU0NSRUVOLAorCS5mbGFncyA9IE1DMTNYWFhfVVNFX0FEQyB8IE1DMTNYWFhfVVNFX1JFR1VMQVRPUiB8CisJCSBNQzEzWFhYX1VTRV9UT1VDSFNDUkVFTiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gcGNtMDM4X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKQEAgLTI4MSw5ICsyODEsMTUgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IHBjbTAzOF91c2JoMl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MjdfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8CisJCQlNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkkpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmluaXQJPSBwY20wMzhfdXNiaDJfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwY20wMzhfaW5pdCh2b2lkKQpAQCAtMzQwLDkgKzM0NiwxMCBAQAogfTsKIAogTUFDSElORV9TVEFSVChQQ00wMzgsICJwaHlDT1JFLWkuTVgyNyIpCi0JLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gcGNtMDM4X2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJnBjbTAzOF90aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MjdfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MjdfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDI3X2luaXRfaXJxLAorCS50aW1lciA9ICZwY20wMzhfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IHBjbTAzOF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtc2NiOTMyOC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1zY2I5MzI4LmMKaW5kZXggZWFlODc4Zi4uZGNhZWUwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1zY2I5MzI4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1zY2I5MzI4LmMKQEAgLTE0NSwxMCArMTQ1LDExIEBACiB9OwogCiBNQUNISU5FX1NUQVJUKFNDQjkzMjgsICJTeW5lcnRyb25peHggc2NiOTMyOCIpCi0gICAgLyogU2FzY2hhIEhhdWVyICovCi0JLmJvb3RfcGFyYW1zCT0gMHgwODAwMDEwMCwKLQkubWFwX2lvCQk9IG14MV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gbXgxX2luaXRfaXJxLAotCS50aW1lcgkJPSAmc2NiOTMyOF90aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gc2NiOTMyOF9pbml0LAorCS8qIFNhc2NoYSBIYXVlciAqLworCS5ib290X3BhcmFtcyA9IDB4MDgwMDAxMDAsCisJLm1hcF9pbyA9IG14MV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgxX2luaXRfZWFybHksCisJLmluaXRfaXJxID0gbXgxX2luaXRfaXJxLAorCS50aW1lciA9ICZzY2I5MzI4X3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBzY2I5MzI4X2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MS5jCmluZGV4IDcyOWFlMDkuLjJlNDgyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgxLmMKQEAgLTIzLDYgKzIzLDkgQEAKIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjEuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpbXhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJaW14X21hcF9lbnRyeShNWDEsIElPLCBNVF9ERVZJQ0UpLApAQCAtMzAsMTYgKzMzLDI2IEBACiAKIHZvaWQgX19pbml0IG14MV9tYXBfaW8odm9pZCkKIHsKLQlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgxKTsKLQlteGNfYXJjaF9yZXNldF9pbml0KE1YMV9JT19BRERSRVNTKE1YMV9XRFRfQkFTRV9BRERSKSk7Ci0KIAlpb3RhYmxlX2luaXQoaW14X2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW14X2lvX2Rlc2MpKTsKIH0KIAotaW50IGlteDFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7Cit2b2lkIF9faW5pdCBpbXgxX2luaXRfZWFybHkodm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgxKTsKKwlteGNfYXJjaF9yZXNldF9pbml0KE1YMV9JT19BRERSRVNTKE1YMV9XRFRfQkFTRV9BRERSKSk7CisJaW14X2lvbXV4djFfaW5pdChNWDFfSU9fQUREUkVTUyhNWDFfR1BJT19CQVNFX0FERFIpLAorCQkJTVgxX05VTV9HUElPX1BPUlQpOworfQorCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14MV9ncGlvX3BvcnRzW10gPSB7CisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMSwgMCwgMSwgTVgxX0dQSU9fSU5UX1BPUlRBKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgxLCAxLCAyLCBNWDFfR1BJT19JTlRfUE9SVEIpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDEsIDIsIDMsIE1YMV9HUElPX0lOVF9QT1JUQyksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMSwgMywgNCwgTVgxX0dQSU9fSU5UX1BPUlREKSwKK307CiAKIHZvaWQgX19pbml0IG14MV9pbml0X2lycSh2b2lkKQogewogCW14Y19pbml0X2lycShNWDFfSU9fQUREUkVTUyhNWDFfQVZJQ19CQVNFX0FERFIpKTsKLQlpbXgxX3JlZ2lzdGVyX2dwaW9zKCk7CisJbXhjX2dwaW9faW5pdChpbXgxX2dwaW9fcG9ydHMsCUFSUkFZX1NJWkUoaW14MV9ncGlvX3BvcnRzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgyMS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjEuYwppbmRleCBlNzI4YWY4Li43YTBjNTAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgyMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDIxLmMKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC12MS5oPgogCiAvKiBNWDIxIG1lbW9yeSBtYXAgZGVmaW5pdGlvbiAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpbXgyMV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTU2LDE2ICs1OSwyOCBAQAogICovCiB2b2lkIF9faW5pdCBteDIxX21hcF9pbyh2b2lkKQogewotCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDIxKTsKLQlteGNfYXJjaF9yZXNldF9pbml0KE1YMjFfSU9fQUREUkVTUyhNWDIxX1dET0dfQkFTRV9BRERSKSk7Ci0KIAlpb3RhYmxlX2luaXQoaW14MjFfaW9fZGVzYywgQVJSQVlfU0laRShpbXgyMV9pb19kZXNjKSk7CiB9CiAKLWludCBpbXgyMV9yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKK3ZvaWQgX19pbml0IGlteDIxX2luaXRfZWFybHkodm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyMSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDIxX0lPX0FERFJFU1MoTVgyMV9XRE9HX0JBU0VfQUREUikpOworCWlteF9pb211eHYxX2luaXQoTVgyMV9JT19BRERSRVNTKE1YMjFfR1BJT19CQVNFX0FERFIpLAorCQkJTVgyMV9OVU1fR1BJT19QT1JUKTsKK30KKworc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteDIxX2dwaW9fcG9ydHNbXSA9IHsKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgyMSwgMCwgMSwgTVgyMV9JTlRfR1BJTyksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyMSwgMSwgMiksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyMSwgMiwgMyksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyMSwgMywgNCksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyMSwgNCwgNSksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyMSwgNSwgNiksCit9OwogCiB2b2lkIF9faW5pdCBteDIxX2luaXRfaXJxKHZvaWQpCiB7CiAJbXhjX2luaXRfaXJxKE1YMjFfSU9fQUREUkVTUyhNWDIxX0FWSUNfQkFTRV9BRERSKSk7Ci0JaW14MjFfcmVnaXN0ZXJfZ3Bpb3MoKTsKKwlteGNfZ3Bpb19pbml0KGlteDIxX2dwaW9fcG9ydHMsCUFSUkFZX1NJWkUoaW14MjFfZ3Bpb19wb3J0cykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjUuYyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDI1LmMKaW5kZXggMmVkZWM2Yy4uMDJmN2I1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgyNS5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAogLyoKICAqIFRoaXMgdGFibGUgZGVmaW5lcyBzdGF0aWMgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGZvciBJL08gcmVnaW9ucy4KQEAgLTQ1LDE4ICs0NywyNiBAQAogICovCiB2b2lkIF9faW5pdCBteDI1X21hcF9pbyh2b2lkKQogewotCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI1KTsKLQlteGNfaW9tdXhfdjNfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9JT01VWENfQkFTRV9BRERSKSk7Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9XRE9HX0JBU0VfQUREUikpOwotCiAJaW90YWJsZV9pbml0KG14MjVfaW9fZGVzYywgQVJSQVlfU0laRShteDI1X2lvX2Rlc2MpKTsKIH0KIAotaW50IGlteDI1X3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwordm9pZCBfX2luaXQgaW14MjVfaW5pdF9lYXJseSh2b2lkKQoreworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI1KTsKKwlteGNfaW9tdXhfdjNfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9JT01VWENfQkFTRV9BRERSKSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9XRE9HX0JBU0VfQUREUikpOworfQorCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14MjVfZ3Bpb19wb3J0c1tdID0geworCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDI1LCAwLCAxLCBNWDI1X0lOVF9HUElPMSksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMjUsIDEsIDIsIE1YMjVfSU5UX0dQSU8yKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgyNSwgMiwgMywgTVgyNV9JTlRfR1BJTzMpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDI1LCAzLCA0LCBNWDI1X0lOVF9HUElPNCksCit9OwogCiB2b2lkIF9faW5pdCBteDI1X2luaXRfaXJxKHZvaWQpCiB7CiAJbXhjX2luaXRfaXJxKE1YMjVfSU9fQUREUkVTUyhNWDI1X0FWSUNfQkFTRV9BRERSKSk7Ci0JaW14MjVfcmVnaXN0ZXJfZ3Bpb3MoKTsKKwlteGNfZ3Bpb19pbml0KGlteDI1X2dwaW9fcG9ydHMsCUFSUkFZX1NJWkUoaW14MjVfZ3Bpb19wb3J0cykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjcuYwppbmRleCAzNzRlNDhiLi5hNjc2MWEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDI3LmMKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC12MS5oPgogCiAvKiBNWDI3IG1lbW9yeSBtYXAgZGVmaW5pdGlvbiAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpbXgyN19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTU2LDE2ICs1OSwyOCBAQAogICovCiB2b2lkIF9faW5pdCBteDI3X21hcF9pbyh2b2lkKQogewotCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI3KTsKLQlteGNfYXJjaF9yZXNldF9pbml0KE1YMjdfSU9fQUREUkVTUyhNWDI3X1dET0dfQkFTRV9BRERSKSk7Ci0KIAlpb3RhYmxlX2luaXQoaW14MjdfaW9fZGVzYywgQVJSQVlfU0laRShpbXgyN19pb19kZXNjKSk7CiB9CiAKLWludCBpbXgyN19yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKK3ZvaWQgX19pbml0IGlteDI3X2luaXRfZWFybHkodm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyNyk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDI3X0lPX0FERFJFU1MoTVgyN19XRE9HX0JBU0VfQUREUikpOworCWlteF9pb211eHYxX2luaXQoTVgyN19JT19BRERSRVNTKE1YMjdfR1BJT19CQVNFX0FERFIpLAorCQkJTVgyN19OVU1fR1BJT19QT1JUKTsKK30KKworc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteDI3X2dwaW9fcG9ydHNbXSA9IHsKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgyNywgMCwgMSwgTVgyN19JTlRfR1BJTyksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgMSwgMiksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgMiwgMyksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgMywgNCksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgNCwgNSksCisJREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgNSwgNiksCit9OwogCiB2b2lkIF9faW5pdCBteDI3X2luaXRfaXJxKHZvaWQpCiB7CiAJbXhjX2luaXRfaXJxKE1YMjdfSU9fQUREUkVTUyhNWDI3X0FWSUNfQkFTRV9BRERSKSk7Ci0JaW14MjdfcmVnaXN0ZXJfZ3Bpb3MoKTsKKwlteGNfZ3Bpb19pbml0KGlteDI3X2dwaW9fcG9ydHMsCUFSUkFZX1NJWkUoaW14MjdfZ3Bpb19wb3J0cykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKaW5kZXggMzY4ODEyMy4uMjBlNzFkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bmV0L2RzYS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisjaW5jbHVkZSA8YXNtL2tleGVjLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KQEAgLTg0Niw5ICs4NDcsMTQgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGltZSBoYW5kbGluZwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIF9faW5pdCBraXJrd29vZF9pbml0X2Vhcmx5KHZvaWQpCit7CisJb3Jpb25fdGltZV9zZXRfYmFzZShUSU1FUl9WSVJUX0JBU0UpOworfQorCiBpbnQga2lya3dvb2RfdGNsazsKIAotaW50IF9faW5pdCBraXJrd29vZF9maW5kX3RjbGsodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX2ZpbmRfdGNsayh2b2lkKQogewogCXUzMiBkZXYsIHJldjsKIApAQCAtODY0LDcgKzg3MCw5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQga2lya3dvb2RfdGltZXJfaW5pdCh2b2lkKQogewogCWtpcmt3b29kX3RjbGsgPSBraXJrd29vZF9maW5kX3RjbGsoKTsKLQlvcmlvbl90aW1lX2luaXQoSVJRX0tJUktXT09EX0JSSURHRSwga2lya3dvb2RfdGNsayk7CisKKwlvcmlvbl90aW1lX2luaXQoQlJJREdFX1ZJUlRfQkFTRSwgQlJJREdFX0lOVF9USU1FUjFfQ0xSLAorCQkJSVJRX0tJUktXT09EX0JSSURHRSwga2lya3dvb2RfdGNsayk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIga2lya3dvb2RfdGltZXIgPSB7CkBAIC0xMDAzLDYgKzEwMTEsMTAgQEAKIAlraXJrd29vZF94b3IwX2luaXQoKTsKIAlraXJrd29vZF94b3IxX2luaXQoKTsKIAlraXJrd29vZF9jcnlwdG9faW5pdCgpOworCisjaWZkZWYgQ09ORklHX0tFWEVDIAorCWtleGVjX3JlaW5pdCA9IGtpcmt3b29kX2VuYWJsZV9wY2llOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX2Nsb2NrX2dhdGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oCmluZGV4IDk1YmIwYTcuLmI5YjBmMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaApAQCAtMjcsMTEgKzI3LDEzIEBACiAgKi8KIHZvaWQga2lya3dvb2RfbWFwX2lvKHZvaWQpOwogdm9pZCBraXJrd29vZF9pbml0KHZvaWQpOwordm9pZCBraXJrd29vZF9pbml0X2Vhcmx5KHZvaWQpOwogdm9pZCBraXJrd29vZF9pbml0X2lycSh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8ga2lya3dvb2RfbWJ1c19kcmFtX2luZm87CiB2b2lkIGtpcmt3b29kX3NldHVwX2NwdV9tYnVzKHZvaWQpOwogCit2b2lkIGtpcmt3b29kX2VuYWJsZV9wY2llKHZvaWQpOwogdm9pZCBraXJrd29vZF9wY2llX2lkKHUzMiAqZGV2LCB1MzIgKnJldik7CiAKIHZvaWQga2lya3dvb2RfZWhjaV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kMm5ldF92Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kMm5ldF92Mi1zZXR1cC5jCmluZGV4IGEzMWM5NDkuLjA0M2NmZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZDJuZXRfdjItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2QybmV0X3YyLXNldHVwLmMKQEAgLTIyNCw2ICsyMjQsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGQybmV0X3YyX2luaXQsCiAJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBraXJrd29vZF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAogCS50aW1lcgkJPSAma2lya3dvb2RfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kYjg4ZjYyODEtYnAtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZGI4OGY2MjgxLWJwLXNldHVwLmMKaW5kZXggOWVhNzExOC4uYmZmMDRlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kYjg4ZjYyODEtYnAtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RiODhmNjI4MS1icC1zZXR1cC5jCkBAIC0xMDAsNiArMTAwLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBkYjg4ZjYyODFfaW5pdCwKIAkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGtpcmt3b29kX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RvY2tzdGFyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RvY2tzdGFyLXNldHVwLmMKaW5kZXggNDMzZWEzNi4uZjE0ZGZiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kb2Nrc3Rhci1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZG9ja3N0YXItc2V0dXAuYwpAQCAtMTA1LDYgKzEwNSw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gZG9ja3N0YXJfaW5pdCwKIAkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGtpcmt3b29kX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2d1cnVwbHVnLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2d1cnVwbHVnLXNldHVwLmMKaW5kZXggOGY0N2RjMC4uNDFkMWI0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9ndXJ1cGx1Zy1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZ3VydXBsdWctc2V0dXAuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gZ3VydXBsdWdfaW5pdCwKIAkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGtpcmt3b29kX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAppbmRleCBhZmYwZTEzLi45NTdiZDc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKQEAgLTI5LDkgKzI5LDYgQEAKICNkZWZpbmUgQlJJREdFX0NBVVNFCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDExMCkKICNkZWZpbmUgV0RUX0lOVF9SRVEJCTB4MDAwOAogCi0jZGVmaW5lIEJSSURHRV9NQVNLCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDExNCkKLSNkZWZpbmUgQlJJREdFX0lOVF9USU1FUjAJMHgwMDAyCi0jZGVmaW5lIEJSSURHRV9JTlRfVElNRVIxCTB4MDAwNAogI2RlZmluZSBCUklER0VfSU5UX1RJTUVSMV9DTFIJKH4weDAwMDQpCiAKICNkZWZpbmUgSVJRX1ZJUlRfQkFTRQkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAyMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggODFiMzM1ZS4uODRmMzQwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtNiwzMyArNiw0IEBACiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fSAotI2RlZmluZSBfX0FTTV9BUkNIX0dQSU9fSAotCi0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KLQotI2RlZmluZSBHUElPX01BWAkJNTAKLSNkZWZpbmUgR1BJT19PRkYocGluKQkJKCgocGluKSA+PiA1KSA/IDB4MDE0MCA6IDB4MDEwMCkKLSNkZWZpbmUgR1BJT19PVVQocGluKQkJKERFVl9CVVNfVklSVF9CQVNFICsgR1BJT19PRkYocGluKSArIDB4MDApCi0jZGVmaW5lIEdQSU9fSU9fQ09ORihwaW4pCShERVZfQlVTX1ZJUlRfQkFTRSArIEdQSU9fT0ZGKHBpbikgKyAweDA0KQotI2RlZmluZSBHUElPX0JMSU5LX0VOKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgR1BJT19PRkYocGluKSArIDB4MDgpCi0jZGVmaW5lIEdQSU9fSU5fUE9MKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgR1BJT19PRkYocGluKSArIDB4MGMpCi0jZGVmaW5lIEdQSU9fREFUQV9JTihwaW4pCShERVZfQlVTX1ZJUlRfQkFTRSArIEdQSU9fT0ZGKHBpbikgKyAweDEwKQotI2RlZmluZSBHUElPX0VER0VfQ0FVU0UocGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyBHUElPX09GRihwaW4pICsgMHgxNCkKLSNkZWZpbmUgR1BJT19FREdFX01BU0socGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyBHUElPX09GRihwaW4pICsgMHgxOCkKLSNkZWZpbmUgR1BJT19MRVZFTF9NQVNLKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgR1BJT19PRkYocGluKSArIDB4MWMpCi0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKGludCBwaW4pCi17Ci0JcmV0dXJuIHBpbiArIElSUV9LSVJLV09PRF9HUElPX1NUQVJUOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3BpbyhpbnQgaXJxKQotewotCXJldHVybiBpcnEgLSBJUlFfS0lSS1dPT0RfR1BJT19TVEFSVDsKLX0KLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCmluZGV4IDZlOTI0YjMuLjAxMGJkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaApAQCAtNjksNiArNjksOCBAQAogI2RlZmluZSBERVZfQlVTX1ZJUlRfQkFTRQkoS0lSS1dPT0RfUkVHU19WSVJUX0JBU0UgfCAweDEwMDAwKQogI2RlZmluZSAgU0FNUExFX0FUX1JFU0VUCShERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MDAzMCkKICNkZWZpbmUgIERFVklDRV9JRAkJKERFVl9CVVNfVklSVF9CQVNFIHwgMHgwMDM0KQorI2RlZmluZSAgR1BJT19MT1dfVklSVF9CQVNFCShERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MDEwMCkKKyNkZWZpbmUgIEdQSU9fSElHSF9WSVJUX0JBU0UJKERFVl9CVVNfVklSVF9CQVNFIHwgMHgwMTQwKQogI2RlZmluZSAgUlRDX1BIWVNfQkFTRQkJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgwMzAwKQogI2RlZmluZSAgU1BJX1BIWVNfQkFTRQkJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgwNjAwKQogI2RlZmluZSAgSTJDX1BIWVNfQkFTRQkJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgxMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pcnEuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaXJxLmMKaW5kZXggMjgwMjBhYi4uY2JkYjU4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2lycS5jCkBAIC0yNywzMSArMjcsMjEgQEAKIAogdm9pZCBfX2luaXQga2lya3dvb2RfaW5pdF9pcnEodm9pZCkKIHsKLQlpbnQgaTsKLQogCW9yaW9uX2lycV9pbml0KDAsICh2b2lkIF9faW9tZW0gKikoSVJRX1ZJUlRfQkFTRSArIElSUV9NQVNLX0xPV19PRkYpKTsKIAlvcmlvbl9pcnFfaW5pdCgzMiwgKHZvaWQgX19pb21lbSAqKShJUlFfVklSVF9CQVNFICsgSVJRX01BU0tfSElHSF9PRkYpKTsKIAogCS8qCi0JICogTWFzayBhbmQgY2xlYXIgR1BJTyBJUlEgaW50ZXJydXB0cy4KKwkgKiBJbml0aWFsaXplIGdwaW9saWIgZm9yIEdQSU9zIDAtNDkuCiAJICovCi0Jd3JpdGVsKDAsIEdQSU9fTEVWRUxfTUFTSygwKSk7Ci0Jd3JpdGVsKDAsIEdQSU9fRURHRV9NQVNLKDApKTsKLQl3cml0ZWwoMCwgR1BJT19FREdFX0NBVVNFKDApKTsKLQl3cml0ZWwoMCwgR1BJT19MRVZFTF9NQVNLKDMyKSk7Ci0Jd3JpdGVsKDAsIEdQSU9fRURHRV9NQVNLKDMyKSk7Ci0Jd3JpdGVsKDAsIEdQSU9fRURHRV9DQVVTRSgzMikpOwotCi0JZm9yIChpID0gSVJRX0tJUktXT09EX0dQSU9fU1RBUlQ7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGksICZvcmlvbl9ncGlvX2lycV9jaGlwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlpcnFfZGVzY1tpXS5zdGF0dXMgfD0gSVJRX0xFVkVMOwotCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOwotCX0KKwlvcmlvbl9ncGlvX2luaXQoMCwgMzIsIEdQSU9fTE9XX1ZJUlRfQkFTRSwgMCwKKwkJCUlSUV9LSVJLV09PRF9HUElPX1NUQVJUKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfS0lSS1dPT0RfR1BJT19MT1dfMF83LCBncGlvX2lycV9oYW5kbGVyKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfS0lSS1dPT0RfR1BJT19MT1dfOF8xNSwgZ3Bpb19pcnFfaGFuZGxlcik7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0tJUktXT09EX0dQSU9fTE9XXzE2XzIzLCBncGlvX2lycV9oYW5kbGVyKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfS0lSS1dPT0RfR1BJT19MT1dfMjRfMzEsIGdwaW9faXJxX2hhbmRsZXIpOworCisJb3Jpb25fZ3Bpb19pbml0KDMyLCAxOCwgR1BJT19ISUdIX1ZJUlRfQkFTRSwgMCwKKwkJCUlSUV9LSVJLV09PRF9HUElPX1NUQVJUICsgMzIpOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9LSVJLV09PRF9HUElPX0hJR0hfMF83LCBncGlvX2lycV9oYW5kbGVyKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfS0lSS1dPT0RfR1BJT19ISUdIXzhfMTUsIGdwaW9faXJxX2hhbmRsZXIpOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9LSVJLV09PRF9HUElPX0hJR0hfMTZfMjMsIGdwaW9faXJxX2hhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmMKaW5kZXggMjc5MDFmNy4uN2NlMjAxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5jCkBAIC00OSw5ICs0OSw2IEBACiAJaWYgKCF2YXJpYW50X21hc2spCiAJCXJldHVybjsKIAotCS8qIEluaXRpYWxpemUgZ3Bpb2xpYi4gKi8KLQlvcmlvbl9ncGlvX2luaXQoKTsKLQogCXByaW50ayhLRVJOX0RFQlVHICJpbml0aWFsIE1QUCByZWdzOiIpOwogCWZvciAoaSA9IDA7IGkgPCBNUFBfTlJfUkVHUzsgaSsrKSB7CiAJCW1wcF9jdHJsW2ldID0gcmVhZGwoTVBQX0NUUkwoaSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tdjg4ZjYyODFndHdfZ2Utc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXY4OGY2MjgxZ3R3X2dlLXNldHVwLmMKaW5kZXggMWU1MjY2Zi4uMDBjY2EyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tdjg4ZjYyODFndHdfZ2Utc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL212ODhmNjI4MWd0d19nZS1zZXR1cC5jCkBAIC0xNjYsNiArMTY2LDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBtdjg4ZjYyODFndHdfZ2VfaW5pdCwKIAkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGtpcmt3b29kX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHNwYWNlX3YyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHNwYWNlX3YyLXNldHVwLmMKaW5kZXggNjVlZTIxZi4uN2NkYWI1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXRzcGFjZV92Mi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbmV0c3BhY2VfdjItc2V0dXAuYwpAQCAtMjYxLDYgKzI2MSw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gbmV0c3BhY2VfdjJfaW5pdCwKIAkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGtpcmt3b29kX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECkBAIC0yNzEsNiArMjcyLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBuZXRzcGFjZV92Ml9pbml0LAogCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0ga2lya3dvb2RfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKIAkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAogTUFDSElORV9FTkQKQEAgLTI4MSw2ICsyODMsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IG5ldHNwYWNlX3YyX2luaXQsCiAJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBraXJrd29vZF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAogCS50aW1lcgkJPSAma2lya3dvb2RfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXR4YmlnX3YyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHhiaWdfdjItc2V0dXAuYwppbmRleCA5M2FmZDNjLi42YmU2MjdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHhiaWdfdjItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHhiaWdfdjItc2V0dXAuYwpAQCAtNDAyLDYgKzQwMiw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gbmV0eGJpZ192Ml9pbml0LAogCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0ga2lya3dvb2RfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKIAkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAogTUFDSElORV9FTkQKQEAgLTQxMiw2ICs0MTMsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IG5ldHhiaWdfdjJfaW5pdCwKIAkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGtpcmt3b29kX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmQtc2V0dXAuYwppbmRleCBjZmNjYTQxLi5mNjliZWVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkLXNldHVwLmMKQEAgLTIxNyw2ICsyMTcsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IG9wZW5yZF9pbml0LAogCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0ga2lya3dvb2RfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKIAkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAogTUFDSElORV9FTkQKQEAgLTIyOCw2ICsyMjksNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IG9wZW5yZF9pbml0LAogCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0ga2lya3dvb2RfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKIAkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAogTUFDSElORV9FTkQKQEAgLTIzOSw2ICsyNDEsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IG9wZW5yZF9pbml0LAogCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0ga2lya3dvb2RfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKIAkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9wY2llLmMKaW5kZXggNTEzYWQzMS4uY2EyOTRmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9wY2llLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9wY2llLmMKQEAgLTE4LDggKzE4LDE2IEBACiAjaW5jbHVkZSA8bWFjaC9icmlkZ2UtcmVncy5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogCit2b2lkIGtpcmt3b29kX2VuYWJsZV9wY2llKHZvaWQpCit7CisJdTMyIGN1cnIgPSByZWFkbChDTE9DS19HQVRJTkdfQ1RSTCk7CisJaWYgKCEoY3VyciAmIENHQ19QRVgwKSkKKwkJd3JpdGVsKGN1cnIgfCBDR0NfUEVYMCwgQ0xPQ0tfR0FUSU5HX0NUUkwpOworfQorCiB2b2lkIF9faW5pdCBraXJrd29vZF9wY2llX2lkKHUzMiAqZGV2LCB1MzIgKnJldikKIHsKKwlraXJrd29vZF9lbmFibGVfcGNpZSgpOwogCSpkZXYgPSBvcmlvbl9wY2llX2Rldl9pZCgodm9pZCBfX2lvbWVtICopUENJRV9WSVJUX0JBU0UpOwogCSpyZXYgPSBvcmlvbl9wY2llX3Jldigodm9pZCBfX2lvbWVtICopUENJRV9WSVJUX0JBU0UpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYxOTItbmFzLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYwppbmRleCAwMDQ5NjE0Li43NWM2NjAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYwpAQCAtODIsNiArODIsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IHJkODhmNjE5Ml9pbml0LAogCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0ga2lya3dvb2RfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKIAkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCmluZGV4IDA5OThhMDguLjBmNzU0OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYwpAQCAtMTE4LDYgKzExOCw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gcmQ4OGY2MjgxX2luaXQsCiAJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBraXJrd29vZF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAogCS50aW1lcgkJPSAma2lya3dvb2RfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9zaGVldmFwbHVnLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYwppbmRleCBkMmVlYzM1Li4wYTk1MDYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYwpAQCAtMTM0LDYgKzEzNCw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gc2hlZXZhcGx1Z19pbml0LAogCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0ga2lya3dvb2RfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKIAkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAogTUFDSElORV9FTkQKQEAgLTE0NCw2ICsxNDUsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IHNoZWV2YXBsdWdfaW5pdCwKIAkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGtpcmt3b29kX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3Q1MzI1LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3Q1MzI1LXNldHVwLmMKaW5kZXggY2U1MGU2MWEuLmU2YjliMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdDUzMjUtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3Q1MzI1LXNldHVwLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxzb3VuZC9hbGM1NjIzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgpAQCAtMTM0LDYgKzEzNSw3IEBACiAJTVBQMzNfR0UxX1RYQ1RMLAogCU1QUDM5X0FVX0kyU0JDTEssCiAJTVBQNDBfQVVfSTJTRE8sCisJTVBQNDNfQVVfSTJTREksCiAJTVBQNDFfQVVfSTJTTFJDTEssCiAJTVBQNDJfQVVfSTJTTUNMSywKIAlNUFA0NV9HUElPLAkJLyogUG93ZXIgYnV0dG9uICovCkBAIC0xNDEsNiArMTQzLDE4IEBACiAJMAogfTsKIAorc3RhdGljIHN0cnVjdCBhbGM1NjIzX3BsYXRmb3JtX2RhdGEgYWxjNTYyMV9kYXRhID0geworCS5hZGRfY3RybCA9IDB4MzcwMCwKKwkuamFja19kZXRfY3RybCA9IDB4NDgxMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaTJjX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImFsYzU2MjEiLCAweDFhKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYWxjNTYyMV9kYXRhLAorCX0sCit9OworCiAjZGVmaW5lIEhQX1Q1MzI1X0dQSU9fUE9XRVJfT0ZGCQk0OAogCiBzdGF0aWMgdm9pZCBocF90NTMyNV9wb3dlcl9vZmYodm9pZCkKQEAgLTE2Niw2ICsxODAsOSBAQAogCWtpcmt3b29kX2VoY2lfaW5pdCgpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaHBfdDUzMjVfYnV0dG9uX2RldmljZSk7CiAKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfYm9hcmRfaW5mbywgQVJSQVlfU0laRShpMmNfYm9hcmRfaW5mbykpOworCWtpcmt3b29kX2F1ZGlvX2luaXQoKTsKKwogCWlmIChncGlvX3JlcXVlc3QoSFBfVDUzMjVfR1BJT19QT1dFUl9PRkYsICJwb3dlci1vZmYiKSA9PSAwICYmCiAJICAgIGdwaW9fZGlyZWN0aW9uX291dHB1dChIUF9UNTMyNV9HUElPX1BPV0VSX09GRiwgMCkgPT0gMCkKIAkJcG1fcG93ZXJfb2ZmID0gaHBfdDUzMjVfcG93ZXJfb2ZmOwpAQCAtMTg3LDYgKzIwNCw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gaHBfdDUzMjVfaW5pdCwKIAkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGtpcmt3b29kX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzMjE5LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzMjE5LXNldHVwLmMKaW5kZXggZGM5OTljNC4uNjhmMzJmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czIxOS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYwpAQCAtMTM1LDYgKzEzNSw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gcW5hcF90czIxOV9pbml0LAogCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0ga2lya3dvb2RfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKIAkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHM0MXgtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHM0MXgtc2V0dXAuYwppbmRleCA5YTQ0MDI5Li5kNWQwMDk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzNDF4LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czQxeC1zZXR1cC5jCkBAIC0xNTQsNiArMTU0LDggQEAKIHN0YXRpYyBpbnQgX19pbml0IHRzNDF4X3BjaV9pbml0KHZvaWQpCiB7CiAJaWYgKG1hY2hpbmVfaXNfdHM0MXgoKSkgeworCQl1MzIgZGV2LCByZXY7CisKIAkJLyoKIAkJICogV2l0aG91dCB0aGlzIGV4cGxpY2l0IHJlc2V0LCB0aGUgUENJZSBTQVRBIGNvbnRyb2xsZXIKIAkJICogKE1hcnZlbGwgODhzeDcwNDIvc2F0YV9tdikgaXMga25vd24gdG8gc3RvcCB3b3JraW5nCkBAIC0xNjEsNyArMTYzLDExIEBACiAJCSAqLwogCQlvcmlvbl9wY2llX3Jlc2V0KCh2b2lkIF9faW9tZW0gKilQQ0lFX1ZJUlRfQkFTRSk7CiAKLQkJa2lya3dvb2RfcGNpZV9pbml0KEtXX1BDSUUwKTsKKwkJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKwkJaWYgKGRldiA9PSBNVjg4RjYyODJfREVWX0lEKQorCQkJa2lya3dvb2RfcGNpZV9pbml0KEtXX1BDSUUxIHwgS1dfUENJRTApOworCQllbHNlCisJCQlraXJrd29vZF9wY2llX2luaXQoS1dfUENJRTApOwogCX0KIAogICAgcmV0dXJuIDA7CkBAIC0xNzMsNiArMTc5LDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBxbmFwX3RzNDF4X2luaXQsCiAJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBraXJrd29vZF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAogCS50aW1lcgkJPSAma2lya3dvb2RfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sb2tpL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2NvbW1vbi5jCmluZGV4IDgxOGYxOWQuLmU0MWU5MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbG9raS9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWxva2kvY29tbW9uLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZXguaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8bWFjaC9icmlkZ2UtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvbG9raS5oPgogI2luY2x1ZGUgPHBsYXQvb3Jpb25fbmFuZC5oPgogI2luY2x1ZGUgPHBsYXQvdGltZS5oPgpAQCAtMjkwLDkgKzI5MSwxNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaW1lIGhhbmRsaW5nCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgX19pbml0IGxva2lfaW5pdF9lYXJseSh2b2lkKQoreworCW9yaW9uX3RpbWVfc2V0X2Jhc2UoVElNRVJfVklSVF9CQVNFKTsKK30KKwogc3RhdGljIHZvaWQgbG9raV90aW1lcl9pbml0KHZvaWQpCiB7Ci0Jb3Jpb25fdGltZV9pbml0KElSUV9MT0tJX0JSSURHRSwgTE9LSV9UQ0xLKTsKKwlvcmlvbl90aW1lX2luaXQoQlJJREdFX1ZJUlRfQkFTRSwgQlJJREdFX0lOVF9USU1FUjFfQ0xSLAorCQkJSVJRX0xPS0lfQlJJREdFLCBMT0tJX1RDTEspOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGxva2lfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxva2kvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWxva2kvY29tbW9uLmgKaW5kZXggMjYwNTRmZC4uYTMxNWRjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sb2tpL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtbG9raS9jb21tb24uaApAQCAtMTgsNiArMTgsNyBAQAogICovCiB2b2lkIGxva2lfbWFwX2lvKHZvaWQpOwogdm9pZCBsb2tpX2luaXQodm9pZCk7Cit2b2lkIGxva2lfaW5pdF9lYXJseSh2b2lkKTsKIHZvaWQgbG9raV9pbml0X2lycSh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gbG9raV9tYnVzX2RyYW1faW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAppbmRleCBhM2ZhYmY3Li5mZDg3NzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCkBAIC0xNywxMSArMTcsNiBAQAogI2RlZmluZSBTWVNURU1fU09GVF9SRVNFVAkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDEwYykKICNkZWZpbmUgU09GVF9SRVNFVAkJMHgwMDAwMDAwMQogCi0jZGVmaW5lIEJSSURHRV9DQVVTRQkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAxMTApCi0KLSNkZWZpbmUgQlJJREdFX01BU0sJCShCUklER0VfVklSVF9CQVNFIHwgMHgwMTE0KQotI2RlZmluZSBCUklER0VfSU5UX1RJTUVSMAkweDAwMDIKLSNkZWZpbmUgQlJJREdFX0lOVF9USU1FUjEJMHgwMDA0CiAjZGVmaW5lIEJSSURHRV9JTlRfVElNRVIxX0NMUgkweDAwMDQKIAogI2RlZmluZSBJUlFfVklSVF9CQVNFCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDIwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbG9raS9sYjg4cmM4NDgwLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWxva2kvbGI4OHJjODQ4MC1zZXR1cC5jCmluZGV4IGExZTc1ZTcuLjM1ZWFlNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbG9raS9sYjg4cmM4NDgwLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2xiODhyYzg0ODAtc2V0dXAuYwpAQCAtOTMsNiArOTMsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGxiODhyYzg0ODBfaW5pdCwKIAkubWFwX2lvCQk9IGxva2lfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gbG9raV9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGxva2lfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZsb2tpX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tbXAyLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbW1wMi5oCmluZGV4IDRhZWM0OTMuLjJjYmY2ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tbXAyLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21tcDIuaApAQCAtMTEsOCArMTEsOCBAQAogZXh0ZXJuIHZvaWQgbW1wMl9jbGVhcl9wbWljX2ludCh2b2lkKTsKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+Ci0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogZXh0ZXJuIHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgbW1wMl9kZXZpY2VfdWFydDE7CiBleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBtbXAyX2RldmljZV91YXJ0MjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGExNjguaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGExNjguaAppbmRleCAxODAxZTQyLi5hNTJiM2QyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhMTY4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3B4YTE2OC5oCkBAIC04LDggKzgsOCBAQAogZXh0ZXJuIHZvaWQgcHhhMTY4X2NsZWFyX2tleXBhZF93YWtldXAodm9pZCk7CiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8cGxhdC9weGEzeHhfbmFuZC5oPgogI2luY2x1ZGUgPHZpZGVvL3B4YTE2OGZiLmg+CiAjaW5jbHVkZSA8cGxhdC9weGEyN3hfa2V5cGFkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhOTEwLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhOTEwLmgKaW5kZXggZjEzYzQ5ZC4uOTFiZTc1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3B4YTkxMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGE5MTAuaApAQCAtNyw4ICs3LDggQEAKIGV4dGVybiB2b2lkIF9faW5pdCBweGE5MTBfaW5pdF9pcnEodm9pZCk7CiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8cGxhdC9weGEzeHhfbmFuZC5oPgogCiBleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGE5MTBfZGV2aWNlX3VhcnQxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXNtL0tjb25maWcKaW5kZXggNWQzZDlhZC4uMTUxNjg5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9LY29uZmlnCkBAIC00NSw3ICs0NSwxNiBAQAogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgTVNNX1YyX1RMTU0KIAlzZWxlY3QgTVNNX0dQSU9NVVgKLQlzZWxlY3QgSU9NTVVfQVBJCisJc2VsZWN0IE1TTV9TQ00gaWYgU01QCisKK2NvbmZpZyBBUkNIX01TTTg5NjAKKwlib29sICJNU004OTYwIgorCXNlbGVjdCBBUkNIX01TTV9TQ09SUElPTk1QCisJc2VsZWN0IE1BQ0hfTVNNODk2MF9TSU0gaWYgKCFNQUNIX01TTTg5NjBfUlVNSTMpCisJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgQ1BVX1Y3CisJc2VsZWN0IE1TTV9WMl9UTE1NCisJc2VsZWN0IE1TTV9HUElPTVVYCiAJc2VsZWN0IE1TTV9TQ00gaWYgU01QCiAKIGVuZGNob2ljZQpAQCAtMTI1LDExICsxMzQsMzUgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgUXVhbGNvbW0gTVNNOHg2MCBGRkEgZXZhbCBib2FyZC4KIAorY29uZmlnIE1BQ0hfTVNNODk2MF9TSU0KKwlkZXBlbmRzIG9uIEFSQ0hfTVNNODk2MAorCWJvb2wgIk1TTTg5NjAgU2ltdWxhdG9yIgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBRdWFsY29tbSBNU004OTYwIHNpbXVsYXRvci4KKworY29uZmlnIE1BQ0hfTVNNODk2MF9SVU1JMworCWRlcGVuZHMgb24gQVJDSF9NU004OTYwCisJYm9vbCAiTVNNODk2MCBSVU1JMyIKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgUXVhbGNvbW0gTVNNODk2MCBSVU1JMyBlbXVsYXRvci4KKwogZW5kbWVudQogCitjb25maWcgTVNNX0lPTU1VCisJYm9vbCAiTVNNIElPTU1VIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX01TTThYNjAgfHwgQVJDSF9NU004OTYwCisJc2VsZWN0IElPTU1VX0FQSQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBJT01NVXMgZm91bmQgb24gY2VydGFpbiBRdWFsY29tbSBTT0NzLgorCSAgVGhlc2UgSU9NTVVzIGFsbG93IHZpcnR1YWxpemF0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHVzZWQgYnkgbW9zdAorCSAgY29yZXMgd2l0aGluIHRoZSBtdWx0aW1lZGlhIHN1YnN5c3RlbS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgorCiBjb25maWcgSU9NTVVfUEdUQUJMRVNfTDIKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBBUkNIX01TTThYNjAgJiYgTU1VICYmIFNNUCAmJiBDUFVfRENBQ0hFX0RJU0FCTEU9bgorCWRlcGVuZHMgb24gTVNNX0lPTU1VICYmIE1NVSAmJiBTTVAgJiYgQ1BVX0RDQUNIRV9ESVNBQkxFPW4KIAogY29uZmlnIE1TTV9ERUJVR19VQVJUCiAJaW50CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCmluZGV4IDk0MTk1YzEuLjk1MTlmZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCkBAIC0xLDIxICsxLDE2IEBACiBvYmoteSArPSBpby5vIGlkbGUubyB0aW1lci5vCi1pZm5kZWYgQ09ORklHX0FSQ0hfTVNNOFg2MAotb2JqLXkgKz0gYWNwdWNsb2NrLWFybTExLm8KLW9iai15ICs9IGRtYS5vCi1lbmRpZgorb2JqLXkgKz0gY2xvY2subworb2JqLSQoQ09ORklHX0RFQlVHX0ZTKSArPSBjbG9jay1kZWJ1Zy5vCiAKLWlmZGVmIENPTkZJR19NU01fVklDCi1vYmoteSArPSBpcnEtdmljLm8KLWVsc2UKLWlmbmRlZiBDT05GSUdfQVJDSF9NU004WDYwCi1vYmoteSArPSBpcnEubwotZW5kaWYKLWVuZGlmCitvYmotJChDT05GSUdfTVNNX1ZJQykgKz0gaXJxLXZpYy5vCitvYmotJChDT05GSUdfTVNNX0lPTU1VKSArPSBpb21tdS5vIGlvbW11X2Rldi5vIGRldmljZXMtaW9tbXUubwogCi1vYmotJChDT05GSUdfQVJDSF9NU004WDYwKSArPSBjbG9jay1kdW1teS5vIGlvbW11Lm8gaW9tbXVfZGV2Lm8gZGV2aWNlcy1tc204eDYwLWlvbW11Lm8KK29iai0kKENPTkZJR19BUkNIX01TTTdYMDBBKSArPSBkbWEubyBpcnEubyBhY3B1Y2xvY2stYXJtMTEubworb2JqLSQoQ09ORklHX0FSQ0hfTVNNN1gzMCkgKz0gZG1hLm8KK29iai0kKENPTkZJR19BUkNIX1FTRDhYNTApICs9IGRtYS5vIHNpcmMubworCiBvYmotJChDT05GSUdfTVNNX1BST0NfQ09NTSkgKz0gcHJvY19jb21tLm8gY2xvY2stcGNvbS5vIHZyZWcubwotb2JqLSQoQ09ORklHX01TTV9QUk9DX0NPTU0pICs9IGNsb2NrLm8KLW9iai0kKENPTkZJR19BUkNIX1FTRDhYNTApICs9IHNpcmMubworCiBvYmotJChDT05GSUdfTVNNX1NNRCkgKz0gc21kLm8gc21kX2RlYnVnLm8KIG9iai0kKENPTkZJR19NU01fU01EKSArPSBsYXN0X3JhZGlvX2xvZy5vCiBvYmotJChDT05GSUdfTVNNX1NDTSkgKz0gc2NtLm8gc2NtLWJvb3QubwpAQCAtMjksMTIgKzI0LDE2IEBACiBvYmotJChDT05GSUdfQVJDSF9NU003WDMwKSArPSBib2FyZC1tc203eDMwLm8gZGV2aWNlcy1tc203eDMwLm8KIG9iai0kKENPTkZJR19BUkNIX1FTRDhYNTApICs9IGJvYXJkLXFzZDh4NTAubyBkZXZpY2VzLXFzZDh4NTAubwogb2JqLSQoQ09ORklHX0FSQ0hfTVNNOFg2MCkgKz0gYm9hcmQtbXNtOHg2MC5vCitvYmotJChDT05GSUdfQVJDSF9NU004OTYwKSArPSBib2FyZC1tc204OTYwLm8gZGV2aWNlcy1tc204OTYwLm8KIAotb2JqLSQoQ09ORklHX0FSQ0hfTVNNN1gzMCkgKz0gZ3Bpb211eC03eDMwLm8gZ3Bpb211eC12MS5vIGdwaW9tdXgubworb2JqLSQoQ09ORklHX0FSQ0hfTVNNN1gzMCkgKz0gZ3Bpb211eC12MS5vIGdwaW9tdXgubwogb2JqLSQoQ09ORklHX0FSQ0hfUVNEOFg1MCkgKz0gZ3Bpb211eC04eDUwLm8gZ3Bpb211eC12MS5vIGdwaW9tdXgubwogb2JqLSQoQ09ORklHX0FSQ0hfTVNNOFg2MCkgKz0gZ3Bpb211eC04eDYwLm8gZ3Bpb211eC12Mi5vIGdwaW9tdXgubwogaWZkZWYgQ09ORklHX01TTV9WMl9UTE1NCitpZm5kZWYgQ09ORklHX0FSQ0hfTVNNODk2MAorIyBUT0RPOiBUTE1NIE1hcHBpbmcgaXNzdWVzIG5lZWQgdG8gYmUgcmVzb2x2ZWQKIG9iai15CSs9IGdwaW8tdjIubworZW5kaWYKIGVsc2UKIG9iai15CSs9IGdwaW8ubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLWhhbGlidXQuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLWhhbGlidXQuYwppbmRleCA3NWRhYmIxLi4xOGEzYzk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1oYWxpYnV0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtaGFsaWJ1dC5jCkBAIC05Myw4ICs5Myw2IEBACiB9CiAKIE1BQ0hJTkVfU1RBUlQoSEFMSUJVVCwgIkhhbGlidXQgQm9hcmQgKFFDVCBTVVJGNzIwMEEpIikKLSNpZmRlZiBDT05GSUdfTVNNX0RFQlVHX1VBUlQKLSNlbmRpZgogCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCiAJLmZpeHVwCQk9IGhhbGlidXRfZml4dXAsCiAJLm1hcF9pbwkJPSBoYWxpYnV0X21hcF9pbywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1haGltYWhpLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tYWhpbWFoaS5jCmluZGV4IGVmM2ViZjIuLjdhOWEwM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1haGltYWhpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbWFoaW1haGkuYwpAQCAtNzQsOCArNzQsNiBAQAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbXNtX3RpbWVyOwogCiBNQUNISU5FX1NUQVJUKE1BSElNQUhJLCAibWFoaW1haGkiKQotI2lmZGVmIENPTkZJR19NU01fREVCVUdfVUFSVAotI2VuZGlmCiAJLmJvb3RfcGFyYW1zCT0gMHgyMDAwMDEwMCwKIAkuZml4dXAJCT0gbWFoaW1haGlfZml4dXAsCiAJLm1hcF9pbwkJPSBtYWhpbWFoaV9tYXBfaW8sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc203eDI3LmMgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc203eDI3LmMKaW5kZXggMDhmY2Q0MC4uYzAzZjI2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtN3gyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTd4MjcuYwpAQCAtMTMwLDggKzEzMCw2IEBACiB9CiAKIE1BQ0hJTkVfU1RBUlQoTVNNN1gyN19TVVJGLCAiUUNUIE1TTTd4MjcgU1VSRiIpCi0jaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUCi0jZW5kaWYKIAkuYm9vdF9wYXJhbXMJPSBQTEFUX1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBtc203eDJ4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBtc203eDJ4X2luaXRfaXJxLApAQCAtMTQwLDggKzEzOCw2IEBACiBNQUNISU5FX0VORAogCiBNQUNISU5FX1NUQVJUKE1TTTdYMjdfRkZBLCAiUUNUIE1TTTd4MjcgRkZBIikKLSNpZmRlZiBDT05GSUdfTVNNX0RFQlVHX1VBUlQKLSNlbmRpZgogCS5ib290X3BhcmFtcwk9IFBMQVRfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvCQk9IG1zbTd4MnhfbWFwX2lvLAogCS5pbml0X2lycQk9IG1zbTd4MnhfaW5pdF9pcnEsCkBAIC0xNTAsOCArMTQ2LDYgQEAKIE1BQ0hJTkVfRU5ECiAKIE1BQ0hJTkVfU1RBUlQoTVNNN1gyNV9TVVJGLCAiUUNUIE1TTTd4MjUgU1VSRiIpCi0jaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUCi0jZW5kaWYKIAkuYm9vdF9wYXJhbXMJPSBQTEFUX1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBtc203eDJ4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBtc203eDJ4X2luaXRfaXJxLApAQCAtMTYwLDggKzE1NCw2IEBACiBNQUNISU5FX0VORAogCiBNQUNISU5FX1NUQVJUKE1TTTdYMjVfRkZBLCAiUUNUIE1TTTd4MjUgRkZBIikKLSNpZmRlZiBDT05GSUdfTVNNX0RFQlVHX1VBUlQKLSNlbmRpZgogCS5ib290X3BhcmFtcwk9IFBMQVRfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvCQk9IG1zbTd4MnhfbWFwX2lvLAogCS5pbml0X2lycQk9IG1zbTd4MnhfaW5pdF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc203eDMwLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc203eDMwLmMKaW5kZXggMjVkYjhmZC4uYjdhODQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtN3gzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTd4MzAuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC91c2IvbXNtX2hzdXNiLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM2LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvdnJlZy5oPgogI2luY2x1ZGUgImRldmljZXMuaCIKKyNpbmNsdWRlICJncGlvbXV4LmgiCiAjaW5jbHVkZSAicHJvY19jb21tLmgiCiAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG1zbV90aW1lcjsKQEAgLTUyLDYgKzU0LDI3IEBACiAJLm90Z19jb250cm9sCQk9IE9UR19QSFlfQ09OVFJPTCwKIH07CiAKK3N0cnVjdCBtc21fZ3Bpb211eF9jb25maWcgbXNtX2dwaW9tdXhfY29uZmlnc1tHUElPTVVYX05HUElPU10gPSB7CisjaWZkZWYgQ09ORklHX1NFUklBTF9NU01fQ09OU09MRQorCVs0OV0gPSB7IC8qIFVBUlQyIFJGUiAqLworCQkuc3VzcGVuZGVkID0gR1BJT01VWF9EUlZfMk1BIHwgR1BJT01VWF9QVUxMX0RPV04gfAorCQkJICAgICBHUElPTVVYX0ZVTkNfMiB8IEdQSU9NVVhfVkFMSUQsCisJfSwKKwlbNTBdID0geyAvKiBVQVJUMiBDVFMgKi8KKwkJLnN1c3BlbmRlZCA9IEdQSU9NVVhfRFJWXzJNQSB8IEdQSU9NVVhfUFVMTF9ET1dOIHwKKwkJCSAgICAgR1BJT01VWF9GVU5DXzIgfCBHUElPTVVYX1ZBTElELAorCX0sCisJWzUxXSA9IHsgLyogVUFSVDIgUlggKi8KKwkJLnN1c3BlbmRlZCA9IEdQSU9NVVhfRFJWXzJNQSB8IEdQSU9NVVhfUFVMTF9ET1dOIHwKKwkJCSAgICAgR1BJT01VWF9GVU5DXzIgfCBHUElPTVVYX1ZBTElELAorCX0sCisJWzUyXSA9IHsgLyogVUFSVDIgVFggKi8KKwkJLnN1c3BlbmRlZCA9IEdQSU9NVVhfRFJWXzJNQSB8IEdQSU9NVVhfUFVMTF9ET1dOIHwKKwkJCSAgICAgR1BJT01VWF9GVU5DXzIgfCBHUElPTVVYX1ZBTElELAorCX0sCisjZW5kaWYKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVNNKSB8fCBkZWZpbmVkKENPTkZJR19NU01fU0VSSUFMX0RFQlVHR0VSKQogICAgICAgICAmbXNtX2RldmljZV91YXJ0MiwKQEAgLTgzLDggKzEwNiw2IEBACiB9CiAKIE1BQ0hJTkVfU1RBUlQoTVNNN1gzMF9TVVJGLCAiUUNUIE1TTTdYMzAgU1VSRiIpCi0jaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUCi0jZW5kaWYKIAkuYm9vdF9wYXJhbXMgPSBQTEFUX1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyA9IG1zbTd4MzBfbWFwX2lvLAogCS5pbml0X2lycSA9IG1zbTd4MzBfaW5pdF9pcnEsCkBAIC05Myw4ICsxMTQsNiBAQAogTUFDSElORV9FTkQKIAogTUFDSElORV9TVEFSVChNU003WDMwX0ZGQSwgIlFDVCBNU003WDMwIEZGQSIpCi0jaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUCi0jZW5kaWYKIAkuYm9vdF9wYXJhbXMgPSBQTEFUX1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyA9IG1zbTd4MzBfbWFwX2lvLAogCS5pbml0X2lycSA9IG1zbTd4MzBfaW5pdF9pcnEsCkBAIC0xMDMsOCArMTIyLDYgQEAKIE1BQ0hJTkVfRU5ECiAKIE1BQ0hJTkVfU1RBUlQoTVNNN1gzMF9GTFVJRCwgIlFDVCBNU003WDMwIEZMVUlEIikKLSNpZmRlZiBDT05GSUdfTVNNX0RFQlVHX1VBUlQKLSNlbmRpZgogCS5ib290X3BhcmFtcyA9IFBMQVRfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gbXNtN3gzMF9tYXBfaW8sCiAJLmluaXRfaXJxID0gbXNtN3gzMF9pbml0X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTg5NjAuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTg5NjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkzNzIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtODk2MC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtc204OTYwX21hcF9pbyh2b2lkKQoreworCW1zbV9tYXBfbXNtODk2MF9pbygpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXNtODk2MF9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCWdpY19pbml0KDAsIEdJQ19QUElfU1RBUlQsIE1TTV9RR0lDX0RJU1RfQkFTRSwKKwkJICh2b2lkICopTVNNX1FHSUNfQ1BVX0JBU0UpOworCisJLyogRWRnZSB0cmlnZ2VyIFBQSXMgZXhjZXB0IEFWU19TVklDSU5UIGFuZCBBVlNfU1ZJQ0lOVFNXRE9ORSAqLworCXdyaXRlbCgweEZGRkZEN0ZGLCBNU01fUUdJQ19ESVNUX0JBU0UgKyBHSUNfRElTVF9DT05GSUcgKyA0KTsKKworCWlmIChtYWNoaW5lX2lzX21zbTg5NjBfcnVtaTMoKSkKKwkJd3JpdGVsKDB4MDAwMEZGRkYsIE1TTV9RR0lDX0RJU1RfQkFTRSArIEdJQ19ESVNUX0VOQUJMRV9TRVQpOworCisJLyogRklYTUU6IE5vdCBpbnN0YWxsaW5nIEFWU19TVklDSU5UIGFuZCBBVlNfU1ZJQ0lOVFNXRE9ORSB5ZXQKKwkgKiBhcyB0aGV5IGFyZSBjb25maWd1cmVkIGFzIGxldmVsLCB3aGljaCBkb2VzIG5vdCBwbGF5IG5pY2Ugd2l0aAorCSAqIGhhbmRsZV9wZXJjcHVfaXJxLgorCSAqLworCWZvciAoaSA9IEdJQ19QUElfU1RBUlQ7IGkgPCBHSUNfU1BJX1NUQVJUOyBpKyspIHsKKwkJaWYgKGkgIT0gQVZTX1NWSUNJTlQgJiYgaSAhPSBBVlNfU1ZJQ0lOVFNXRE9ORSkKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2ltX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZtc204OTYwX2RldmljZV91YXJ0X2dzYmkyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJ1bWkzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZtc204OTYwX2RldmljZV91YXJ0X2dzYmk1LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG1zbTg5NjBfc2ltX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaW1fZGV2aWNlcywgQVJSQVlfU0laRShzaW1fZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXNtODk2MF9ydW1pM19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMocnVtaTNfZGV2aWNlcywgQVJSQVlfU0laRShydW1pM19kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTVNNODk2MF9TSU0sICJRQ1QgTVNNODk2MCBTSU1VTEFUT1IiKQorCS5tYXBfaW8gPSBtc204OTYwX21hcF9pbywKKwkuaW5pdF9pcnEgPSBtc204OTYwX2luaXRfaXJxLAorCS50aW1lciA9ICZtc21fdGltZXIsCisJLmluaXRfbWFjaGluZSA9IG1zbTg5NjBfc2ltX2luaXQsCitNQUNISU5FX0VORAorCitNQUNISU5FX1NUQVJUKE1TTTg5NjBfUlVNSTMsICJRQ1QgTVNNODk2MCBSVU1JMyIpCisJLm1hcF9pbyA9IG1zbTg5NjBfbWFwX2lvLAorCS5pbml0X2lycSA9IG1zbTg5NjBfaW5pdF9pcnEsCisJLnRpbWVyID0gJm1zbV90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXNtODk2MF9ydW1pM19pbml0LAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtOHg2MC5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtOHg2MC5jCmluZGV4IDliNWViMmIuLmIzYzU1ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTh4NjAuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc204eDYwLmMKQEAgLTI4LDEwICsyOCw2IEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAKLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9tYXhfYXhpX2toeih2b2lkKQotewotCXJldHVybiAwOwotfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXNtOHg2MF9tYXBfaW8odm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYwppbmRleCAxNWMyYmJkLi43ZjU2ODYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1xc2Q4eDUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9tc21faHN1c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMzEsNiArMzMsOCBAQAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvc2lyYy5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvdnJlZy5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKQEAgLTk1LDYgKzk5LDgxIEBACiAJJm1zbV9kZXZpY2VfaHN1c2JfaG9zdCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXNtX21tY19ncGlvIHNkYzFfZ3Bpb19jZmdbXSA9IHsKKwl7NTEsICJzZGMxX2RhdF8zIn0sCisJezUyLCAic2RjMV9kYXRfMiJ9LAorCXs1MywgInNkYzFfZGF0XzEifSwKKwl7NTQsICJzZGMxX2RhdF8wIn0sCisJezU1LCAic2RjMV9jbWQifSwKKwl7NTYsICJzZGMxX2NsayJ9Cit9OworCitzdGF0aWMgc3RydWN0IHZyZWcgKnZyZWdfbW1jOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdnJlZ19zdHM7CisKK3N0YXRpYyB1aW50MzJfdCBtc21fc2RjY19zZXR1cF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkdiwgdW5zaWduZWQgaW50IHZkZCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlwZGV2ID0gY29udGFpbmVyX29mKGR2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCisJaWYgKHZkZCA9PSAwKSB7CisJCWlmICghdnJlZ19zdHMpCisJCQlyZXR1cm4gMDsKKworCQljbGVhcl9iaXQocGRldi0+aWQsICZ2cmVnX3N0cyk7CisKKwkJaWYgKCF2cmVnX3N0cykgeworCQkJcmMgPSB2cmVnX2Rpc2FibGUodnJlZ19tbWMpOworCQkJaWYgKHJjKQorCQkJCXByX2VycigidnJlZ19tbWMgZGlzYWJsZSBmYWlsZWQgZm9yIHNsb3QgIgorCQkJCQkJIiVkOiAlZFxuIiwgcGRldi0+aWQsIHJjKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXZyZWdfc3RzKSB7CisJCXJjID0gdnJlZ19zZXRfbGV2ZWwodnJlZ19tbWMsIDI5MDApOworCQlpZiAocmMpCisJCQlwcl9lcnIoInZyZWdfbW1jIHNldCBsZXZlbCBmYWlsZWQgZm9yIHNsb3QgJWQ6ICVkXG4iLAorCQkJCQlwZGV2LT5pZCwgcmMpOworCQlyYyA9IHZyZWdfZW5hYmxlKHZyZWdfbW1jKTsKKwkJaWYgKHJjKQorCQkJcHJfZXJyKCJ2cmVnX21tYyBlbmFibGUgZmFpbGVkIGZvciBzbG90ICVkOiAlZFxuIiwKKwkJCQkJcGRldi0+aWQsIHJjKTsKKwl9CisJc2V0X2JpdChwZGV2LT5pZCwgJnZyZWdfc3RzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtc21fbW1jX2dwaW9fZGF0YSBzZGMxX2dwaW8gPSB7CisJLmdwaW8gPSBzZGMxX2dwaW9fY2ZnLAorCS5zaXplID0gQVJSQVlfU0laRShzZGMxX2dwaW9fY2ZnKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXNtX21tY19wbGF0Zm9ybV9kYXRhIHFzZDh4NTBfc2RjMV9kYXRhID0geworCS5vY3JfbWFzawk9IE1NQ19WRERfMjdfMjggfCBNTUNfVkREXzI4XzI5LAorCS50cmFuc2xhdGVfdmRkCT0gbXNtX3NkY2Nfc2V0dXBfcG93ZXIsCisJLmdwaW9fZGF0YSA9ICZzZGMxX2dwaW8sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcXNkOHg1MF9pbml0X21tYyh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX3FzZDh4NTBfZmZhKCkgfHwgbWFjaGluZV9pc19xc2Q4eDUwYV9mZmEoKSkKKwkJdnJlZ19tbWMgPSB2cmVnX2dldChOVUxMLCAiZ3A2Iik7CisJZWxzZQorCQl2cmVnX21tYyA9IHZyZWdfZ2V0KE5VTEwsICJncDUiKTsKKworCWlmIChJU19FUlIodnJlZ19tbWMpKSB7CisJCXByX2VycigidnJlZyBnZXQgZm9yIHZyZWdfbW1jIGZhaWxlZCAoJWxkKVxuIiwKKwkJCQlQVFJfRVJSKHZyZWdfbW1jKSk7CisJCXJldHVybjsKKwl9CisKKwltc21fYWRkX3NkY2MoMSwgJnFzZDh4NTBfc2RjMV9kYXRhLCAwLCAwKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHFzZDh4NTBfbWFwX2lvKHZvaWQpCiB7CiAJbXNtX21hcF9xc2Q4eDUwX2lvKCk7CkBAIC0xMTMsMTEgKzE5MiwxMCBAQAogCW1zbV9kZXZpY2VfaHN1c2IuZGV2LnBhcmVudCA9ICZtc21fZGV2aWNlX290Zy5kZXY7CiAJbXNtX2RldmljZV9oc3VzYl9ob3N0LmRldi5wYXJlbnQgPSAmbXNtX2RldmljZV9vdGcuZGV2OwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCXFzZDh4NTBfaW5pdF9tbWMoKTsKIH0KIAogTUFDSElORV9TVEFSVChRU0Q4WDUwX1NVUkYsICJRQ1QgUVNEOFg1MCBTVVJGIikKLSNpZmRlZiBDT05GSUdfTVNNX0RFQlVHX1VBUlQKLSNlbmRpZgogCS5ib290X3BhcmFtcyA9IFBMQVRfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gcXNkOHg1MF9tYXBfaW8sCiAJLmluaXRfaXJxID0gcXNkOHg1MF9pbml0X2lycSwKQEAgLTEyNiw4ICsyMDQsNiBAQAogTUFDSElORV9FTkQKIAogTUFDSElORV9TVEFSVChRU0Q4WDUwQV9TVDFfNSwgIlFDVCBRU0Q4WDUwQSBTVDEuNSIpCi0jaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUCi0jZW5kaWYKIAkuYm9vdF9wYXJhbXMgPSBQTEFUX1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyA9IHFzZDh4NTBfbWFwX2lvLAogCS5pbml0X2lycSA9IHFzZDh4NTBfaW5pdF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1zYXBwaGlyZS5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtc2FwcGhpcmUuYwppbmRleCA4MzYwNGY1Li42OGY5MzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1zYXBwaGlyZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXNhcHBoaXJlLmMKQEAgLTEwNSw4ICsxMDUsNiBAQAogCiBNQUNISU5FX1NUQVJUKFNBUFBISVJFLCAic2FwcGhpcmUiKQogLyogTWFpbnRhaW5lcjogQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGdvb2dsZS5jb20+ICovCi0jaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUCi0jZW5kaWYKIAkuYm9vdF9wYXJhbXMgICAgPSBQTEFUX1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLmZpeHVwICAgICAgICAgID0gc2FwcGhpcmVfZml4dXAsCiAJLm1hcF9pbyAgICAgICAgID0gc2FwcGhpcmVfbWFwX2lvLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQtZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQtZ3Bpby5jCmluZGV4IGE2MDRlYzEuLjMxMTE3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LWdwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC1ncGlvLmMKQEAgLTc0LDggKzc0LDYgQEAKIAogc3RhdGljIGludCB0cm91dF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0Jc3RydWN0IG1zbV9ncGlvX2NoaXAgKm1zbV9ncGlvID0gdG9fbXNtX2dwaW9fY2hpcChjaGlwKTsKLQogCXJldHVybiBUUk9VVF9HUElPX1RPX0lOVChvZmZzZXQgKyBjaGlwLT5iYXNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LmMKaW5kZXggNzNmMTQ2MC4uODE0Mzg2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC05Miw4ICs5Myw2IEBACiB9CiAKIE1BQ0hJTkVfU1RBUlQoVFJPVVQsICJIVEMgRHJlYW0iKQotI2lmZGVmIENPTkZJR19NU01fREVCVUdfVUFSVAotI2VuZGlmCiAJLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKIAkuZml4dXAJCT0gdHJvdXRfZml4dXAsCiAJLm1hcF9pbwkJPSB0cm91dF9tYXBfaW8sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay03eDMwLmggYi9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay03eDMwLmgKaW5kZXggZTE2ZjcyZi4uMTQxMDQ0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stN3gzMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLTd4MzAuaApAQCAtMSwzMCArMSwxMyBAQAogLyogQ29weXJpZ2h0IChjKSAyMDA5LCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIENvZGUgQXVyb3JhIEZvcnVtLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKLSAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAotICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKLSAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KLSAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfTVNNX0NMT0NLXzdYMzBfSApAQCAtMTQ3LDIyICsxMzAsMjYgQEAKIGV4dGVybiBpbnQgaW50ZXJuYWxfcHdyX3JhaWxfY3RsX2F1dG8odW5zaWduZWQgcmFpbF9pZCwgYm9vbCBlbmFibGUpOwogCiAjZGVmaW5lIENMS183WDMwKGNsa19uYW1lLCBjbGtfaWQsIGNsa19kZXYsIGNsa19mbGFncykgewlcCi0JLm5hbWUgPSBjbGtfbmFtZSwgXAotCS5pZCA9IExfN1gzMF8jI2Nsa19pZCwgXAotCS5yZW1vdGVfaWQgPSBQXyMjY2xrX2lkLCBcCi0JLmZsYWdzID0gY2xrX2ZsYWdzLCBcCi0JLmRldiA9IGNsa19kZXYsIFwKLQkuZGJnX25hbWUgPSAjY2xrX2lkLCBcCisJLmNvbl9pZCA9IGNsa19uYW1lLCBcCisJLmRldl9pZCA9IGNsa19kZXYsIFwKKwkuY2xrID0gJihzdHJ1Y3QgY2xrKXsgXAorCQkuaWQgPSBMXzdYMzBfIyNjbGtfaWQsIFwKKwkJLnJlbW90ZV9pZCA9IFBfIyNjbGtfaWQsIFwKKwkJLmZsYWdzID0gY2xrX2ZsYWdzLCBcCisJCS5kYmdfbmFtZSA9ICNjbGtfaWQsIFwKKwl9LCBcCiAJfQogCiAjZGVmaW5lIENMS183WDMwUyhjbGtfbmFtZSwgbF9pZCwgcl9pZCwgY2xrX2RldiwgY2xrX2ZsYWdzKSB7CVwKLQkubmFtZSA9IGNsa19uYW1lLCBcCi0JLmlkID0gTF83WDMwXyMjbF9pZCwgXAotCS5yZW1vdGVfaWQgPSBQXyMjcl9pZCwgXAotCS5mbGFncyA9IGNsa19mbGFncywgXAotCS5kZXYgPSBjbGtfZGV2LCBcCi0JLmRiZ19uYW1lID0gI2xfaWQsIFwKKwkuY29uX2lkID0gY2xrX25hbWUsIFwKKwkuZGV2X2lkID0gY2xrX2RldiwgXAorCS5jbGsgPSAmKHN0cnVjdCBjbGspeyBcCisJCS5pZCA9IExfN1gzMF8jI2xfaWQsIFwKKwkJLnJlbW90ZV9pZCA9IFBfIyNyX2lkLCBcCisJCS5mbGFncyA9IGNsa19mbGFncywgXAorCQkuZGJnX25hbWUgPSAjbF9pZCwgXAorCQkub3BzID0gJmNsa19vcHNfcGNvbSwgXAorCX0sIFwKIAl9CiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay1kZWJ1Zy5jIGIvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODg2NDA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stZGVidWcuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIGludCBjbG9ja19kZWJ1Z19yYXRlX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBjbGsgKmNsb2NrID0gZGF0YTsKKwlpbnQgcmV0OworCisJLyogT25seSBpbmNyZWFzZXMgdG8gbWF4IHJhdGUgd2lsbCBzdWNjZWVkLCBidXQgdGhhdCdzIGFjdHVhbGx5IGdvb2QKKwkgKiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHNvIHdlIGRvbid0IGNoZWNrIGZvciBlcnJvci4gKi8KKwlpZiAoY2xvY2stPmZsYWdzICYgQ0xLX01BWCkKKwkJY2xrX3NldF9tYXhfcmF0ZShjbG9jaywgdmFsKTsKKwlpZiAoY2xvY2stPmZsYWdzICYgQ0xLX01JTikKKwkJcmV0ID0gY2xrX3NldF9taW5fcmF0ZShjbG9jaywgdmFsKTsKKwllbHNlCisJCXJldCA9IGNsa19zZXRfcmF0ZShjbG9jaywgdmFsKTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiY2xrX3NldCVzX3JhdGUgZmFpbGVkICglZClcbiIsCisJCQkoY2xvY2stPmZsYWdzICYgQ0xLX01JTikgPyAiX21pbiIgOiAiIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNsb2NrX2RlYnVnX3JhdGVfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBjbGsgKmNsb2NrID0gZGF0YTsKKwkqdmFsID0gY2xrX2dldF9yYXRlKGNsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoY2xvY2tfcmF0ZV9mb3BzLCBjbG9ja19kZWJ1Z19yYXRlX2dldCwKKwkJCWNsb2NrX2RlYnVnX3JhdGVfc2V0LCAiJWxsdVxuIik7CisKK3N0YXRpYyBpbnQgY2xvY2tfZGVidWdfZW5hYmxlX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBjbGsgKmNsb2NrID0gZGF0YTsKKwlpbnQgcmMgPSAwOworCisJaWYgKHZhbCkKKwkJcmMgPSBjbG9jay0+b3BzLT5lbmFibGUoY2xvY2stPmlkKTsKKwllbHNlCisJCWNsb2NrLT5vcHMtPmRpc2FibGUoY2xvY2stPmlkKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBjbG9ja19kZWJ1Z19lbmFibGVfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBjbGsgKmNsb2NrID0gZGF0YTsKKworCSp2YWwgPSBjbG9jay0+b3BzLT5pc19lbmFibGVkKGNsb2NrLT5pZCk7CisKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoY2xvY2tfZW5hYmxlX2ZvcHMsIGNsb2NrX2RlYnVnX2VuYWJsZV9nZXQsCisJCQljbG9ja19kZWJ1Z19lbmFibGVfc2V0LCAiJWxsdVxuIik7CisKK3N0YXRpYyBpbnQgY2xvY2tfZGVidWdfbG9jYWxfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBjbGsgKmNsb2NrID0gZGF0YTsKKworCSp2YWwgPSBjbG9jay0+b3BzLT5pc19sb2NhbChjbG9jay0+aWQpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGNsb2NrX2xvY2FsX2ZvcHMsIGNsb2NrX2RlYnVnX2xvY2FsX2dldCwKKwkJCU5VTEwsICIlbGx1XG4iKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfYmFzZTsKKworaW50IF9faW5pdCBjbG9ja19kZWJ1Z19pbml0KHZvaWQpCit7CisJZGVidWdmc19iYXNlID0gZGVidWdmc19jcmVhdGVfZGlyKCJjbGsiLCBOVUxMKTsKKwlpZiAoIWRlYnVnZnNfYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgY2xvY2tfZGVidWdfYWRkKHN0cnVjdCBjbGsgKmNsb2NrKQoreworCWNoYXIgdGVtcFs1MF0sICpwdHI7CisJc3RydWN0IGRlbnRyeSAqY2xrX2RpcjsKKworCWlmICghZGVidWdmc19iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0cm5jcHkodGVtcCwgY2xvY2stPmRiZ19uYW1lLCBBUlJBWV9TSVpFKHRlbXApLTEpOworCWZvciAocHRyID0gdGVtcDsgKnB0cjsgcHRyKyspCisJCSpwdHIgPSB0b2xvd2VyKCpwdHIpOworCisJY2xrX2RpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcih0ZW1wLCBkZWJ1Z2ZzX2Jhc2UpOworCWlmICghY2xrX2RpcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJhdGUiLCBTX0lSVUdPIHwgU19JV1VTUiwgY2xrX2RpciwKKwkJCQljbG9jaywgJmNsb2NrX3JhdGVfZm9wcykpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImVuYWJsZSIsIFNfSVJVR08gfCBTX0lXVVNSLCBjbGtfZGlyLAorCQkJCWNsb2NrLCAmY2xvY2tfZW5hYmxlX2ZvcHMpKQorCQlnb3RvIGVycm9yOworCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpc19sb2NhbCIsIFNfSVJVR08sIGNsa19kaXIsIGNsb2NrLAorCQkJCSZjbG9ja19sb2NhbF9mb3BzKSkKKwkJZ290byBlcnJvcjsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjbGtfZGlyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLWR1bW15LmMgYi9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay1kdW1teS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjUwZDIyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLWR1bW15LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKLXsKLQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldCk7Ci0KLWludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gLUVOT0VOVDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7Ci0KLXZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotfQotRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7Ci0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKLQotaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlyZXR1cm4gLUVOT0VOVDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay1wY29tLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay1wY29tLmMKaW5kZXggYTNiNDU2Mi4uNjNiNzExMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stcGNvbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLXBjb20uYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjaW5jbHVkZSAicHJvY19jb21tLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jay1wY29tLmgiCiAKIC8qCiAgKiBnbHVlIGZvciB0aGUgcHJvY19jb21tIGludGVyZmFjZQpAQCAtMTE2LDYgKzExNywxMSBAQAogCXJldHVybiByYXRlOwogfQogCitzdGF0aWMgYm9vbCBwY19jbGtfaXNfbG9jYWwodW5zaWduZWQgaWQpCit7CisJcmV0dXJuIGZhbHNlOworfQorCiBzdHJ1Y3QgY2xrX29wcyBjbGtfb3BzX3Bjb20gPSB7CiAJLmVuYWJsZSA9IHBjX2Nsa19lbmFibGUsCiAJLmRpc2FibGUgPSBwY19jbGtfZGlzYWJsZSwKQEAgLTEyOCw0ICsxMzQsNSBAQAogCS5nZXRfcmF0ZSA9IHBjX2Nsa19nZXRfcmF0ZSwKIAkuaXNfZW5hYmxlZCA9IHBjX2Nsa19pc19lbmFibGVkLAogCS5yb3VuZF9yYXRlID0gcGNfY2xrX3JvdW5kX3JhdGUsCisJLmlzX2xvY2FsID0gcGNfY2xrX2lzX2xvY2FsLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLXBjb20uaCBiL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLXBjb20uaAppbmRleCAxN2QwMjdiLi45NzRkMDAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay1wY29tLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2stcGNvbS5oCkBAIC0xLDMwICsxLDEzIEBACiAvKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQ29kZSBBdXJvcmEgRm9ydW0sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVAotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgotICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCi0gKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQotICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgotICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NU01fQ0xPQ0tfUENPTV9ICkBAIC0xMzIsOCArMTE1LDEwIEBACiAjZGVmaW5lIFBfQ1NJMV9QX0NMSwkJOTcKICNkZWZpbmUgUF9HU0JJX0NMSwkJOTgKICNkZWZpbmUgUF9HU0JJX1BfQ0xLCQk5OQorI2RlZmluZSBQX0NFX0NMSwkJMTAwIC8qIENyeXB0byBlbmdpbmUgKi8KKyNkZWZpbmUgUF9DT0RFQ19TU0JJX0NMSwkxMDEKIAotI2RlZmluZSBQX05SX0NMS1MJCTEwMAorI2RlZmluZSBQX05SX0NMS1MJCTEwMgogCiBzdHJ1Y3QgY2xrX29wczsKIGV4dGVybiBzdHJ1Y3QgY2xrX29wcyBjbGtfb3BzX3Bjb207CkBAIC0xNDEsMTMgKzEyNiwxNSBAQAogaW50IHBjX2Nsa19yZXNldCh1bnNpZ25lZCBpZCwgZW51bSBjbGtfcmVzZXRfYWN0aW9uIGFjdGlvbik7CiAKICNkZWZpbmUgQ0xLX1BDT00oY2xrX25hbWUsIGNsa19pZCwgY2xrX2RldiwgY2xrX2ZsYWdzKSB7CVwKLQkubmFtZSA9IGNsa19uYW1lLCBcCi0JLmlkID0gUF8jI2Nsa19pZCwgXAotCS5yZW1vdGVfaWQgPSBQXyMjY2xrX2lkLCBcCi0JLm9wcyA9ICZjbGtfb3BzX3Bjb20sIFwKLQkuZmxhZ3MgPSBjbGtfZmxhZ3MsIFwKLQkuZGV2ID0gY2xrX2RldiwgXAotCS5kYmdfbmFtZSA9ICNjbGtfaWQsIFwKKwkuY29uX2lkID0gY2xrX25hbWUsIFwKKwkuZGV2X2lkID0gY2xrX2RldiwgXAorCS5jbGsgPSAmKHN0cnVjdCBjbGspeyBcCisJCS5pZCA9IFBfIyNjbGtfaWQsIFwKKwkJLnJlbW90ZV9pZCA9IFBfIyNjbGtfaWQsIFwKKwkJLm9wcyA9ICZjbGtfb3BzX3Bjb20sIFwKKwkJLmZsYWdzID0gY2xrX2ZsYWdzLCBcCisJCS5kYmdfbmFtZSA9ICNjbGtfaWQsIFwKKwl9LCBcCiAJfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay5jCmluZGV4IDIwNjliZmEuLjIyYTUzNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2suYwpAQCAtMTUsNzQgKzE1LDMyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+Ci0jaW5jbHVkZSA8bWFjaC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJwcm9jX2NvbW0uaCIKLSNpbmNsdWRlICJjbG9jay03eDMwLmgiCiAKIHN0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tzX211dGV4KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tzX2xvY2spOwogc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOwotc3RydWN0IGNsayAqbXNtX2Nsb2NrczsKLXVuc2lnbmVkIG1zbV9udW1fY2xvY2tzOwotCi0vKgotICogQml0bWFwIG9mIGVuYWJsZWQgY2xvY2tzLCBleGNsdWRpbmcgQUNQVSB3aGljaCBpcyBhbHdheXMKLSAqIGVuYWJsZWQKLSAqLwotc3RhdGljIERFQ0xBUkVfQklUTUFQKGNsb2NrX21hcF9lbmFibGVkLCBOUl9DTEtTKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tfbWFwX2xvY2spOwogCiAvKgogICogU3RhbmRhcmQgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9jbGsuaAogICovCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqY2xrOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBsaXN0KQotCQlpZiAoIXN0cmNtcChpZCwgY2xrLT5uYW1lKSAmJiBjbGstPmRldiA9PSBkZXYpCi0JCQlnb3RvIGZvdW5kX2l0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGssICZjbG9ja3MsIGxpc3QpCi0JCWlmICghc3RyY21wKGlkLCBjbGstPm5hbWUpICYmIGNsay0+ZGV2ID09IE5VTEwpCi0JCQlnb3RvIGZvdW5kX2l0OwotCi0JY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKLWZvdW5kX2l0OgotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQlyZXR1cm4gY2xrOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7Ci0KIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogCWNsay0+Y291bnQrKzsKLQlpZiAoY2xrLT5jb3VudCA9PSAxKSB7CisJaWYgKGNsay0+Y291bnQgPT0gMSkKIAkJY2xrLT5vcHMtPmVuYWJsZShjbGstPmlkKTsKLQkJc3Bpbl9sb2NrKCZjbG9ja19tYXBfbG9jayk7Ci0JCWNsb2NrX21hcF9lbmFibGVkW0JJVF9XT1JEKGNsay0+aWQpXSB8PSBCSVRfTUFTSyhjbGstPmlkKTsKLQkJc3Bpbl91bmxvY2soJmNsb2NrX21hcF9sb2NrKTsKLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTk0LDIwICs1MiwxNCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogCUJVR19PTihjbGstPmNvdW50ID09IDApOwogCWNsay0+Y291bnQtLTsKLQlpZiAoY2xrLT5jb3VudCA9PSAwKSB7CisJaWYgKGNsay0+Y291bnQgPT0gMCkKIAkJY2xrLT5vcHMtPmRpc2FibGUoY2xrLT5pZCk7Ci0JCXNwaW5fbG9jaygmY2xvY2tfbWFwX2xvY2spOwotCQljbG9ja19tYXBfZW5hYmxlZFtCSVRfV09SRChjbGstPmlkKV0gJj0gfkJJVF9NQVNLKGNsay0+aWQpOwotCQlzcGluX3VubG9jaygmY2xvY2tfbWFwX2xvY2spOwotCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CiAKIGludCBjbGtfcmVzZXQoc3RydWN0IGNsayAqY2xrLCBlbnVtIGNsa19yZXNldF9hY3Rpb24gYWN0aW9uKQogewotCWlmICghY2xrLT5vcHMtPnJlc2V0KQotCQljbGstPm9wcy0+cmVzZXQgPSAmcGNfY2xrX3Jlc2V0OwogCXJldHVybiBjbGstPm9wcy0+cmVzZXQoY2xrLT5yZW1vdGVfaWQsIGFjdGlvbik7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19yZXNldCk7CkBAIC0xODQsMjUgKzEzNiwxNCBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayAqZWJpMV9jbGs7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfY2xvY2tfb3BzKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoIWNsay0+b3BzKSB7Ci0JCWNsay0+b3BzID0gJmNsa19vcHNfcGNvbTsKLQkJY2xrLT5pZCA9IGNsay0+cmVtb3RlX2lkOwotCX0KLX0KLQotdm9pZCBfX2luaXQgbXNtX2Nsb2NrX2luaXQoc3RydWN0IGNsayAqY2xvY2tfdGJsLCB1bnNpZ25lZCBudW1fY2xvY2tzKQordm9pZCBfX2luaXQgbXNtX2Nsb2NrX2luaXQoc3RydWN0IGNsa19sb29rdXAgKmNsb2NrX3RibCwgdW5zaWduZWQgbnVtX2Nsb2NrcykKIHsKIAl1bnNpZ25lZCBuOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmNsb2Nrc19sb2NrKTsKIAltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCW1zbV9jbG9ja3MgPSBjbG9ja190Ymw7Ci0JbXNtX251bV9jbG9ja3MgPSBudW1fY2xvY2tzOwotCWZvciAobiA9IDA7IG4gPCBtc21fbnVtX2Nsb2NrczsgbisrKSB7Ci0JCXNldF9jbG9ja19vcHMoJm1zbV9jbG9ja3Nbbl0pOwotCQlsaXN0X2FkZF90YWlsKCZtc21fY2xvY2tzW25dLmxpc3QsICZjbG9ja3MpOworCWZvciAobiA9IDA7IG4gPCBudW1fY2xvY2tzOyBuKyspIHsKKwkJY2xrZGV2X2FkZCgmY2xvY2tfdGJsW25dKTsKKwkJbGlzdF9hZGRfdGFpbCgmY2xvY2tfdGJsW25dLmNsay0+bGlzdCwgJmNsb2Nrcyk7CiAJfQogCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIApAQCAtMjExLDExNSArMTUyLDYgQEAKIAogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCi1zdGF0aWMgc3RydWN0IGNsayAqbXNtX2Nsb2NrX2dldF9udGgodW5zaWduZWQgaW5kZXgpCi17Ci0JaWYgKGluZGV4IDwgbXNtX251bV9jbG9ja3MpCi0JCXJldHVybiBtc21fY2xvY2tzICsgaW5kZXg7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjbG9ja19kZWJ1Z19yYXRlX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQotewotCXN0cnVjdCBjbGsgKmNsb2NrID0gZGF0YTsKLQlpbnQgcmV0OwotCi0JLyogT25seSBpbmNyZWFzZXMgdG8gbWF4IHJhdGUgd2lsbCBzdWNjZWVkLCBidXQgdGhhdCdzIGFjdHVhbGx5IGdvb2QKLQkgKiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBTbyB3ZSBkb24ndCBjaGVjayBmb3IgZXJyb3IuICovCi0JaWYgKGNsb2NrLT5mbGFncyAmIENMS19NQVgpCi0JCWNsa19zZXRfbWF4X3JhdGUoY2xvY2ssIHZhbCk7Ci0JaWYgKGNsb2NrLT5mbGFncyAmIENMS19NSU4pCi0JCXJldCA9IGNsa19zZXRfbWluX3JhdGUoY2xvY2ssIHZhbCk7Ci0JZWxzZQotCQlyZXQgPSBjbGtfc2V0X3JhdGUoY2xvY2ssIHZhbCk7Ci0JaWYgKHJldCAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgImNsa19zZXQlc19yYXRlIGZhaWxlZCAoJWQpXG4iLAotCQkJKGNsb2NrLT5mbGFncyAmIENMS19NSU4pID8gIl9taW4iIDogIiIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBjbG9ja19kZWJ1Z19yYXRlX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgY2xrICpjbG9jayA9IGRhdGE7Ci0JKnZhbCA9IGNsa19nZXRfcmF0ZShjbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2xvY2tfZGVidWdfZW5hYmxlX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQotewotCXN0cnVjdCBjbGsgKmNsb2NrID0gZGF0YTsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKHZhbCkKLQkJcmMgPSBjbG9jay0+b3BzLT5lbmFibGUoY2xvY2stPmlkKTsKLQllbHNlCi0JCWNsb2NrLT5vcHMtPmRpc2FibGUoY2xvY2stPmlkKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBjbG9ja19kZWJ1Z19lbmFibGVfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQotewotCXN0cnVjdCBjbGsgKmNsb2NrID0gZGF0YTsKLQotCSp2YWwgPSBjbG9jay0+b3BzLT5pc19lbmFibGVkKGNsb2NrLT5pZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjbG9ja19kZWJ1Z19sb2NhbF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCi17Ci0Jc3RydWN0IGNsayAqY2xvY2sgPSBkYXRhOwotCi0JKnZhbCA9IGNsb2NrLT5vcHMgIT0gJmNsa19vcHNfcGNvbTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShjbG9ja19yYXRlX2ZvcHMsIGNsb2NrX2RlYnVnX3JhdGVfZ2V0LAotCQkJY2xvY2tfZGVidWdfcmF0ZV9zZXQsICIlbGx1XG4iKTsKLURFRklORV9TSU1QTEVfQVRUUklCVVRFKGNsb2NrX2VuYWJsZV9mb3BzLCBjbG9ja19kZWJ1Z19lbmFibGVfZ2V0LAotCQkJY2xvY2tfZGVidWdfZW5hYmxlX3NldCwgIiVsbHVcbiIpOwotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoY2xvY2tfbG9jYWxfZm9wcywgY2xvY2tfZGVidWdfbG9jYWxfZ2V0LAotCQkJTlVMTCwgIiVsbHVcbiIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBjbG9ja19kZWJ1Z19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGVudF9yYXRlLCAqZGVudF9lbmFibGUsICpkZW50X2xvY2FsOwotCXN0cnVjdCBjbGsgKmNsb2NrOwotCXVuc2lnbmVkIG4gPSAwOwotCWNoYXIgdGVtcFs1MF0sICpwdHI7Ci0KLQlkZW50X3JhdGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNsa19yYXRlIiwgMCk7Ci0JaWYgKElTX0VSUihkZW50X3JhdGUpKQotCQlyZXR1cm4gUFRSX0VSUihkZW50X3JhdGUpOwotCi0JZGVudF9lbmFibGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNsa19lbmFibGUiLCAwKTsKLQlpZiAoSVNfRVJSKGRlbnRfZW5hYmxlKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGVudF9lbmFibGUpOwotCi0JZGVudF9sb2NhbCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY2xrX2xvY2FsIiwgTlVMTCk7Ci0JaWYgKElTX0VSUihkZW50X2xvY2FsKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGVudF9sb2NhbCk7Ci0KLQl3aGlsZSAoKGNsb2NrID0gbXNtX2Nsb2NrX2dldF9udGgobisrKSkgIT0gMCkgewotCQlzdHJuY3B5KHRlbXAsIGNsb2NrLT5kYmdfbmFtZSwgQVJSQVlfU0laRSh0ZW1wKS0xKTsKLQkJZm9yIChwdHIgPSB0ZW1wOyAqcHRyOyBwdHIrKykKLQkJCSpwdHIgPSB0b2xvd2VyKCpwdHIpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHRlbXAsIDA2NDQsIGRlbnRfcmF0ZSwKLQkJCQkgICAgY2xvY2ssICZjbG9ja19yYXRlX2ZvcHMpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHRlbXAsIDA2NDQsIGRlbnRfZW5hYmxlLAotCQkJCSAgICBjbG9jaywgJmNsb2NrX2VuYWJsZV9mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSh0ZW1wLCBTX0lSVUdPLCBkZW50X2xvY2FsLAotCQkJCSAgICBjbG9jaywgJmNsb2NrX2xvY2FsX2ZvcHMpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotZGV2aWNlX2luaXRjYWxsKGNsb2NrX2RlYnVnX2luaXQpOwotI2VuZGlmCi0KIC8qIFRoZSBib290bG9hZGVyIGFuZC9vciBBTVNTIG1heSBoYXZlIGxlZnQgdmFyaW91cyBjbG9ja3MgZW5hYmxlZC4KICAqIERpc2FibGUgYW55IGNsb2NrcyB0aGF0IGJlbG9uZyB0byB1cyAoQ0xLRkxBR19BVVRPX09GRikgYnV0IGhhdmUKICAqIG5vdCBiZWVuIGV4cGxpY2l0bHkgZW5hYmxlZCBieSBhIGNsa19lbmFibGUoKSBjYWxsLgpAQCAtMzMwLDggKzE2MiwxMCBAQAogCXN0cnVjdCBjbGsgKmNsazsKIAl1bnNpZ25lZCBjb3VudCA9IDA7CiAKKwljbG9ja19kZWJ1Z19pbml0KCk7CiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaywgJmNsb2NrcywgbGlzdCkgeworCQljbG9ja19kZWJ1Z19hZGQoY2xrKTsKIAkJaWYgKGNsay0+ZmxhZ3MgJiBDTEtGTEFHX0FVVE9fT0ZGKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKIAkJCWlmICghY2xrLT5jb3VudCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmgKaW5kZXggYzI3MGI1NS4uMmMwMDdmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay5oCkBAIC0xNywxMiArMTcsMTAgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX01TTV9DTE9DS19ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NU01fQ0xPQ0tfSAogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxtYWNoL2Nsay5oPgogCi0jaW5jbHVkZSAiY2xvY2stcGNvbS5oIgotI2luY2x1ZGUgImNsb2NrLTd4MzAuaCIKLQogI2RlZmluZSBDTEtGTEFHX0lOVkVSVAkJCTB4MDAwMDAwMDEKICNkZWZpbmUgQ0xLRkxBR19OT0lOVkVSVAkJMHgwMDAwMDAwMgogI2RlZmluZSBDTEtGTEFHX05PTkVTVAkJCTB4MDAwMDAwMDQKQEAgLTQ1LDYgKzQzLDcgQEAKIAl1bnNpZ25lZCAoKmdldF9yYXRlKSh1bnNpZ25lZCBpZCk7CiAJdW5zaWduZWQgKCppc19lbmFibGVkKSh1bnNpZ25lZCBpZCk7CiAJbG9uZyAoKnJvdW5kX3JhdGUpKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCByYXRlKTsKKwlib29sICgqaXNfbG9jYWwpKHVuc2lnbmVkIGlkKTsKIH07CiAKIHN0cnVjdCBjbGsgewpAQCAtNTIsNTggKzUxLDIyIEBACiAJdWludDMyX3QgcmVtb3RlX2lkOwogCXVpbnQzMl90IGNvdW50OwogCXVpbnQzMl90IGZsYWdzOwotCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGNsa19vcHMgKm9wczsKIAljb25zdCBjaGFyICpkYmdfbmFtZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwogfTsKIAotI2RlZmluZSBBMTFTX0NMS19DTlRMX0FERFIJCShNU01fQ1NSX0JBU0UgKyAweDEwMCkKLSNkZWZpbmUgQTExU19DTEtfU0VMX0FERFIJCShNU01fQ1NSX0JBU0UgKyAweDEwNCkKLSNkZWZpbmUgQTExU19WRERfU1ZTX1BMRVZFTF9BRERSCShNU01fQ1NSX0JBU0UgKyAweDEyNCkKLQotI2lmZGVmIENPTkZJR19ERUJVR19GUwotI2RlZmluZSBDTE9DS19EQkdfTkFNRSh4KSAuZGJnX25hbWUgPSB4LAotI2Vsc2UKLSNkZWZpbmUgQ0xPQ0tfREJHX05BTUUoeCkKLSNlbmRpZgotCi0jZGVmaW5lIENMT0NLKGNsa19uYW1lLCBjbGtfaWQsIGNsa19kZXYsIGNsa19mbGFncykgewlcCi0JLm5hbWUgPSBjbGtfbmFtZSwgXAotCS5pZCA9IGNsa19pZCwgXAotCS5mbGFncyA9IGNsa19mbGFncywgXAotCS5kZXYgPSBjbGtfZGV2LCBcCi0JIENMT0NLX0RCR19OQU1FKCNjbGtfaWQpIFwKLQl9Ci0KICNkZWZpbmUgT0ZGIENMS0ZMQUdfQVVUT19PRkYKICNkZWZpbmUgQ0xLX01JTiBDTEtGTEFHX01JTgogI2RlZmluZSBDTEtfTUFYIENMS0ZMQUdfTUFYCiAjZGVmaW5lIENMS19NSU5NQVggKENMS19NSU4gfCBDTEtfTUFYKQotI2RlZmluZSBOUl9DTEtTCVBfTlJfQ0xLUwogCi1lbnVtIHsKLQlQTExfMCA9IDAsCi0JUExMXzEsCi0JUExMXzIsCi0JUExMXzMsCi0JUExMXzQsCi0JUExMXzUsCi0JUExMXzYsCi0JTlVNX1BMTAotfTsKLQotZW51bSBjbGt2b3RlX2NsaWVudCB7Ci0JQ0xLVk9URV9BQ1BVQ0xLID0gMCwKLQlDTEtWT1RFX1BNUU9TLAotCUNMS1ZPVEVfTUFYLAotfTsKLQotaW50IG1zbV9jbG9ja19yZXF1aXJlX3RjeG8odW5zaWduZWQgbG9uZyAqcmVhc29uLCBpbnQgbmJpdHMpOwotaW50IG1zbV9jbG9ja19nZXRfbmFtZSh1aW50MzJfdCBpZCwgY2hhciAqbmFtZSwgdWludDMyX3Qgc2l6ZSk7Ci1pbnQgZWJpMV9jbGtfc2V0X21pbl9yYXRlKGVudW0gY2xrdm90ZV9jbGllbnQgY2xpZW50LCB1bnNpZ25lZCBsb25nIHJhdGUpOwotdW5zaWduZWQgbG9uZyBjbGtfZ2V0X21heF9heGlfa2h6KHZvaWQpOwotCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitpbnQgX19pbml0IGNsb2NrX2RlYnVnX2luaXQodm9pZCk7CitpbnQgX19pbml0IGNsb2NrX2RlYnVnX2FkZChzdHJ1Y3QgY2xrICpjbG9jayk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IGNsb2NrX2RlYnVnX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IGNsb2NrX2RlYnVnX2FkZChzdHJ1Y3QgY2xrICpjbG9jaykgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1tc204eDYwLWlvbW11LmMgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLWlvbW11LmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1tc204eDYwLWlvbW11LmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtaW9tbXUuYwppbmRleCBmOWU3YmQzLi4yNDAzMGQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLW1zbTh4NjAtaW9tbXUuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLWlvbW11LmMKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKQEAgLTE4LDE1ICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLQotI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLTh4NjAuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMtOHg2MC5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvaW9tbXUuaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtc21faW9tbXVfanBlZ2RfcmVzb3VyY2VzW10gPSB7CiAJewotCQkuc3RhcnQgPSBNU01fSU9NTVVfSlBFR0RfUEhZUywKLQkJLmVuZCAgID0gTVNNX0lPTU1VX0pQRUdEX1BIWVMgKyBNU01fSU9NTVVfSlBFR0RfU0laRSAtIDEsCisJCS5zdGFydCA9IDB4MDczMDAwMDAsCisJCS5lbmQgICA9IDB4MDczMDAwMDAgKyBTWl8xTSAtIDEsCiAJCS5uYW1lICA9ICJwaHlzYmFzZSIsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCkBAIC00Niw4ICs0NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXNtX2lvbW11X3ZwZV9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydCA9IE1TTV9JT01NVV9WUEVfUEhZUywKLQkJLmVuZCAgID0gTVNNX0lPTU1VX1ZQRV9QSFlTICsgTVNNX0lPTU1VX1ZQRV9TSVpFIC0gMSwKKwkJLnN0YXJ0ID0gMHgwNzQwMDAwMCwKKwkJLmVuZCAgID0gMHgwNzQwMDAwMCArIFNaXzFNIC0gMSwKIAkJLm5hbWUgID0gInBoeXNiYXNlIiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKQEAgLTY3LDggKzY1LDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtc21faW9tbXVfbWRwMF9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydCA9IE1TTV9JT01NVV9NRFAwX1BIWVMsCi0JCS5lbmQgICA9IE1TTV9JT01NVV9NRFAwX1BIWVMgKyBNU01fSU9NTVVfTURQMF9TSVpFIC0gMSwKKwkJLnN0YXJ0ID0gMHgwNzUwMDAwMCwKKwkJLmVuZCAgID0gMHgwNzUwMDAwMCArIFNaXzFNIC0gMSwKIAkJLm5hbWUgID0gInBoeXNiYXNlIiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKQEAgLTg4LDggKzg2LDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtc21faW9tbXVfbWRwMV9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydCA9IE1TTV9JT01NVV9NRFAxX1BIWVMsCi0JCS5lbmQgICA9IE1TTV9JT01NVV9NRFAxX1BIWVMgKyBNU01fSU9NTVVfTURQMV9TSVpFIC0gMSwKKwkJLnN0YXJ0ID0gMHgwNzYwMDAwMCwKKwkJLmVuZCAgID0gMHgwNzYwMDAwMCArIFNaXzFNIC0gMSwKIAkJLm5hbWUgID0gInBoeXNiYXNlIiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKQEAgLTEwOSw4ICsxMDcsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG1zbV9pb21tdV9yb3RfcmVzb3VyY2VzW10gPSB7CiAJewotCQkuc3RhcnQgPSBNU01fSU9NTVVfUk9UX1BIWVMsCi0JCS5lbmQgICA9IE1TTV9JT01NVV9ST1RfUEhZUyArIE1TTV9JT01NVV9ST1RfU0laRSAtIDEsCisJCS5zdGFydCA9IDB4MDc3MDAwMDAsCisJCS5lbmQgICA9IDB4MDc3MDAwMDAgKyBTWl8xTSAtIDEsCiAJCS5uYW1lICA9ICJwaHlzYmFzZSIsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCkBAIC0xMzAsOCArMTI4LDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtc21faW9tbXVfaWpwZWdfcmVzb3VyY2VzW10gPSB7CiAJewotCQkuc3RhcnQgPSBNU01fSU9NTVVfSUpQRUdfUEhZUywKLQkJLmVuZCAgID0gTVNNX0lPTU1VX0lKUEVHX1BIWVMgKyBNU01fSU9NTVVfSUpQRUdfU0laRSAtIDEsCisJCS5zdGFydCA9IDB4MDc4MDAwMDAsCisJCS5lbmQgICA9IDB4MDc4MDAwMDAgKyBTWl8xTSAtIDEsCiAJCS5uYW1lICA9ICJwaHlzYmFzZSIsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCkBAIC0xNTEsOCArMTQ5LDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtc21faW9tbXVfdmZlX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0ID0gTVNNX0lPTU1VX1ZGRV9QSFlTLAotCQkuZW5kICAgPSBNU01fSU9NTVVfVkZFX1BIWVMgKyBNU01fSU9NTVVfVkZFX1NJWkUgLSAxLAorCQkuc3RhcnQgPSAweDA3OTAwMDAwLAorCQkuZW5kICAgPSAweDA3OTAwMDAwICsgU1pfMU0gLSAxLAogCQkubmFtZSAgPSAicGh5c2Jhc2UiLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LApAQCAtMTcyLDggKzE3MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXNtX2lvbW11X3Zjb2RlY19hX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0ID0gTVNNX0lPTU1VX1ZDT0RFQ19BX1BIWVMsCi0JCS5lbmQgICA9IE1TTV9JT01NVV9WQ09ERUNfQV9QSFlTICsgTVNNX0lPTU1VX1ZDT0RFQ19BX1NJWkUgLSAxLAorCQkuc3RhcnQgPSAweDA3QTAwMDAwLAorCQkuZW5kICAgPSAweDA3QTAwMDAwICsgU1pfMU0gLSAxLAogCQkubmFtZSAgPSAicGh5c2Jhc2UiLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LApAQCAtMTkzLDggKzE5MSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXNtX2lvbW11X3Zjb2RlY19iX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0ID0gTVNNX0lPTU1VX1ZDT0RFQ19CX1BIWVMsCi0JCS5lbmQgICA9IE1TTV9JT01NVV9WQ09ERUNfQl9QSFlTICsgTVNNX0lPTU1VX1ZDT0RFQ19CX1NJWkUgLSAxLAorCQkuc3RhcnQgPSAweDA3QjAwMDAwLAorCQkuZW5kICAgPSAweDA3QjAwMDAwICsgU1pfMU0gLSAxLAogCQkubmFtZSAgPSAicGh5c2Jhc2UiLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LApAQCAtMjE0LDggKzIxMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXNtX2lvbW11X2dmeDNkX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0ID0gTVNNX0lPTU1VX0dGWDNEX1BIWVMsCi0JCS5lbmQgICA9IE1TTV9JT01NVV9HRlgzRF9QSFlTICsgTVNNX0lPTU1VX0dGWDNEX1NJWkUgLSAxLAorCQkuc3RhcnQgPSAweDA3QzAwMDAwLAorCQkuZW5kICAgPSAweDA3QzAwMDAwICsgU1pfMU0gLSAxLAogCQkubmFtZSAgPSAicGh5c2Jhc2UiLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LApAQCAtMjM1LDggKzIzMyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXNtX2lvbW11X2dmeDJkMF9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydCA9IE1TTV9JT01NVV9HRlgyRDBfUEhZUywKLQkJLmVuZCAgID0gTVNNX0lPTU1VX0dGWDJEMF9QSFlTICsgTVNNX0lPTU1VX0dGWDJEMF9TSVpFIC0gMSwKKwkJLnN0YXJ0ID0gMHgwN0QwMDAwMCwKKwkJLmVuZCAgID0gMHgwN0QwMDAwMCArIFNaXzFNIC0gMSwKIAkJLm5hbWUgID0gInBoeXNiYXNlIiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKQEAgLTI1Niw4ICsyNTQsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG1zbV9pb21tdV9nZngyZDFfcmVzb3VyY2VzW10gPSB7CiAJewotCQkuc3RhcnQgPSBNU01fSU9NTVVfR0ZYMkQxX1BIWVMsCi0JCS5lbmQgICA9IE1TTV9JT01NVV9HRlgyRDFfUEhZUyArIE1TTV9JT01NVV9HRlgyRDFfU0laRSAtIDEsCisJCS5zdGFydCA9IDB4MDdFMDAwMDAsCisJCS5lbmQgICA9IDB4MDdFMDAwMDAgKyBTWl8xTSAtIDEsCiAJCS5uYW1lICA9ICJwaHlzYmFzZSIsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCkBAIC0yODIsNTUgKzI4MCw2MiBAQAogCiBzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYganBlZ2RfaW9tbXUgPSB7CiAJLm5hbWUgPSAianBlZ2QiLAotCS5jbGtfcmF0ZSA9IC0xCisJLm5jYiA9IDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgdnBlX2lvbW11ID0gewotCS5uYW1lID0gInZwZSIKKwkubmFtZSA9ICJ2cGUiLAorCS5uY2IgPSAyLAogfTsKIAogc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IG1kcDBfaW9tbXUgPSB7Ci0JLm5hbWUgPSAibWRwMCIKKwkubmFtZSA9ICJtZHAwIiwKKwkubmNiID0gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiBtZHAxX2lvbW11ID0gewotCS5uYW1lID0gIm1kcDEiCisJLm5hbWUgPSAibWRwMSIsCisJLm5jYiA9IDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgcm90X2lvbW11ID0gewotCS5uYW1lID0gInJvdCIKKwkubmFtZSA9ICJyb3QiLAorCS5uY2IgPSAyLAogfTsKIAogc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IGlqcGVnX2lvbW11ID0gewotCS5uYW1lID0gImlqcGVnIgorCS5uYW1lID0gImlqcGVnIiwKKwkubmNiID0gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiB2ZmVfaW9tbXUgPSB7CiAJLm5hbWUgPSAidmZlIiwKLQkuY2xrX3JhdGUgPSAtMQorCS5uY2IgPSAyLAogfTsKIAogc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IHZjb2RlY19hX2lvbW11ID0gewotCS5uYW1lID0gInZjb2RlY19hIgorCS5uYW1lID0gInZjb2RlY19hIiwKKwkubmNiID0gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiB2Y29kZWNfYl9pb21tdSA9IHsKLQkubmFtZSA9ICJ2Y29kZWNfYiIKKwkubmFtZSA9ICJ2Y29kZWNfYiIsCisJLm5jYiA9IDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgZ2Z4M2RfaW9tbXUgPSB7CiAJLm5hbWUgPSAiZ2Z4M2QiLAotCS5jbGtfcmF0ZSA9IDI3MDAwMDAwCisJLm5jYiA9IDMsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgZ2Z4MmQwX2lvbW11ID0gewogCS5uYW1lID0gImdmeDJkMCIsCi0JLmNsa19yYXRlID0gMjcwMDAwMDAKKwkubmNiID0gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiBnZngyZDFfaW9tbXUgPSB7CiAJLm5hbWUgPSAiZ2Z4MmQxIiwKLQkuY2xrX3JhdGUgPSAyNzAwMDAwMAorCS5uY2IgPSAyLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9pb21tdV9qcGVnZCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtN3gwMC5jIGIvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1tc203eDAwLmMKaW5kZXggZmI1NDhhOC4uYzRmNWUyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1tc203eDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1tc203eDAwLmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KQEAgLTI0LDggKzI1LDggQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLQogI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2stcGNvbS5oIgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX3VhcnQxW10gPSB7CkBAIC0zOCw2ICszOSw3IEBACiAJCS5zdGFydAk9IE1TTV9VQVJUMV9QSFlTLAogCQkuZW5kCT0gTVNNX1VBUlQxX1BIWVMgKyBNU01fVUFSVDFfU0laRSAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkubmFtZSAgPSAidWFydF9yZXNvdXJjZSIKIAl9LAogfTsKIApAQCAtNTEsNiArNTMsNyBAQAogCQkuc3RhcnQJPSBNU01fVUFSVDJfUEhZUywKIAkJLmVuZAk9IE1TTV9VQVJUMl9QSFlTICsgTVNNX1VBUlQyX1NJWkUgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLm5hbWUgID0gInVhcnRfcmVzb3VyY2UiCiAJfSwKIH07CiAKQEAgLTY0LDYgKzY3LDcgQEAKIAkJLnN0YXJ0CT0gTVNNX1VBUlQzX1BIWVMsCiAJCS5lbmQJPSBNU01fVUFSVDNfUEhZUyArIE1TTV9VQVJUM19TSVpFIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5uYW1lICA9ICJ1YXJ0X3Jlc291cmNlIgogCX0sCiB9OwogCkBAIC00MTQsNyArNDE4LDcgQEAKIAkucmVzb3VyY2UgPSByZXNvdXJjZXNfbWRwLAogfTsKIAotc3RydWN0IGNsayBtc21fY2xvY2tzXzd4MDFhW10gPSB7CitzdHJ1Y3QgY2xrX2xvb2t1cCBtc21fY2xvY2tzXzd4MDFhW10gPSB7CiAJQ0xLX1BDT00oImFkbV9jbGsiLAlBRE1fQ0xLLAlOVUxMLCAwKSwKIAlDTEtfUENPTSgiYWRzcF9jbGsiLAlBRFNQX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oImViaTFfY2xrIiwJRUJJMV9DTEssCU5VTEwsIDApLApAQCAtNDIzLDcgKzQyNyw3IEBACiAJQ0xLX1BDT00oImVtZGhfY2xrIiwJRU1ESF9DTEssCU5VTEwsIE9GRiksCiAJQ0xLX1BDT00oImdwX2NsayIsCQlHUF9DTEssCQlOVUxMLCAwKSwKIAlDTEtfUENPTSgiZ3JwX2NsayIsCUdSUF8zRF9DTEssCU5VTEwsIE9GRiksCi0JQ0xLX1BDT00oImkyY19jbGsiLAlJMkNfQ0xLLAkmbXNtX2RldmljZV9pMmMuZGV2LCAwKSwKKwlDTEtfUENPTSgiaTJjX2NsayIsCUkyQ19DTEssCSJtc21faTJjLjAiLCAwKSwKIAlDTEtfUENPTSgiaWNvZGVjX3J4X2NsayIsCUlDT0RFQ19SWF9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJpY29kZWNfdHhfY2xrIiwJSUNPREVDX1RYX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oImltZW1fY2xrIiwJSU1FTV9DTEssCU5VTEwsIE9GRiksCkBAIC00MzMsMjUgKzQzNywyNSBAQAogCUNMS19QQ09NKCJwY21fY2xrIiwJUENNX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oIm1kZGlfY2xrIiwJUE1ESF9DTEssCU5VTEwsIE9GRiB8IENMS19NSU5NQVgpLAogCUNMS19QQ09NKCJzZGFjX2NsayIsCVNEQUNfQ0xLLAlOVUxMLCBPRkYpLAotCUNMS19QQ09NKCJzZGNfY2xrIiwJU0RDMV9DTEssCSZtc21fZGV2aWNlX3NkYzEuZGV2LCBPRkYpLAotCUNMS19QQ09NKCJzZGNfcGNsayIsCVNEQzFfUF9DTEssCSZtc21fZGV2aWNlX3NkYzEuZGV2LCBPRkYpLAotCUNMS19QQ09NKCJzZGNfY2xrIiwJU0RDMl9DTEssCSZtc21fZGV2aWNlX3NkYzIuZGV2LCBPRkYpLAotCUNMS19QQ09NKCJzZGNfcGNsayIsCVNEQzJfUF9DTEssCSZtc21fZGV2aWNlX3NkYzIuZGV2LCBPRkYpLAotCUNMS19QQ09NKCJzZGNfY2xrIiwJU0RDM19DTEssCSZtc21fZGV2aWNlX3NkYzMuZGV2LCBPRkYpLAotCUNMS19QQ09NKCJzZGNfcGNsayIsCVNEQzNfUF9DTEssCSZtc21fZGV2aWNlX3NkYzMuZGV2LCBPRkYpLAotCUNMS19QQ09NKCJzZGNfY2xrIiwJU0RDNF9DTEssCSZtc21fZGV2aWNlX3NkYzQuZGV2LCBPRkYpLAotCUNMS19QQ09NKCJzZGNfcGNsayIsCVNEQzRfUF9DTEssCSZtc21fZGV2aWNlX3NkYzQuZGV2LCBPRkYpLAorCUNMS19QQ09NKCJzZGNfY2xrIiwJU0RDMV9DTEssCSJtc21fc2RjYy4xIiwgT0ZGKSwKKwlDTEtfUENPTSgic2RjX3BjbGsiLAlTREMxX1BfQ0xLLAkibXNtX3NkY2MuMSIsIE9GRiksCisJQ0xLX1BDT00oInNkY19jbGsiLAlTREMyX0NMSywJIm1zbV9zZGNjLjIiLCBPRkYpLAorCUNMS19QQ09NKCJzZGNfcGNsayIsCVNEQzJfUF9DTEssCSJtc21fc2RjYy4yIiwgT0ZGKSwKKwlDTEtfUENPTSgic2RjX2NsayIsCVNEQzNfQ0xLLAkibXNtX3NkY2MuMyIsIE9GRiksCisJQ0xLX1BDT00oInNkY19wY2xrIiwJU0RDM19QX0NMSywJIm1zbV9zZGNjLjMiLCBPRkYpLAorCUNMS19QQ09NKCJzZGNfY2xrIiwJU0RDNF9DTEssCSJtc21fc2RjYy40IiwgT0ZGKSwKKwlDTEtfUENPTSgic2RjX3BjbGsiLAlTREM0X1BfQ0xLLAkibXNtX3NkY2MuNCIsIE9GRiksCiAJQ0xLX1BDT00oInRzaWZfY2xrIiwJVFNJRl9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJ0c2lmX3JlZl9jbGsiLAlUU0lGX1JFRl9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJ0dl9kYWNfY2xrIiwJVFZfREFDX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oInR2X2VuY19jbGsiLAlUVl9FTkNfQ0xLLAlOVUxMLCAwKSwKLQlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUMV9DTEssCSZtc21fZGV2aWNlX3VhcnQxLmRldiwgT0ZGKSwKLQlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUMl9DTEssCSZtc21fZGV2aWNlX3VhcnQyLmRldiwgMCksCi0JQ0xLX1BDT00oInVhcnRfY2xrIiwJVUFSVDNfQ0xLLAkmbXNtX2RldmljZV91YXJ0My5kZXYsIE9GRiksCisJQ0xLX1BDT00oInVhcnRfY2xrIiwJVUFSVDFfQ0xLLAkibXNtX3NlcmlhbC4wIiwgT0ZGKSwKKwlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUMl9DTEssCSJtc21fc2VyaWFsLjEiLCAwKSwKKwlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUM19DTEssCSJtc21fc2VyaWFsLjIiLCBPRkYpLAogCUNMS19QQ09NKCJ1YXJ0MWRtX2NsayIsCVVBUlQxRE1fQ0xLLAlOVUxMLCBPRkYpLAogCUNMS19QQ09NKCJ1YXJ0MmRtX2NsayIsCVVBUlQyRE1fQ0xLLAlOVUxMLCAwKSwKLQlDTEtfUENPTSgidXNiX2hzX2NsayIsCVVTQl9IU19DTEssCSZtc21fZGV2aWNlX2hzdXNiLmRldiwgT0ZGKSwKLQlDTEtfUENPTSgidXNiX2hzX3BjbGsiLAlVU0JfSFNfUF9DTEssCSZtc21fZGV2aWNlX2hzdXNiLmRldiwgT0ZGKSwKKwlDTEtfUENPTSgidXNiX2hzX2NsayIsCVVTQl9IU19DTEssCSJtc21faHN1c2IiLCBPRkYpLAorCUNMS19QQ09NKCJ1c2JfaHNfcGNsayIsCVVTQl9IU19QX0NMSywJIm1zbV9oc3VzYiIsIE9GRiksCiAJQ0xLX1BDT00oInVzYl9vdGdfY2xrIiwJVVNCX09UR19DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJ2ZGNfY2xrIiwJVkRDX0NMSywJTlVMTCwgT0ZGICksCiAJQ0xLX1BDT00oInZmZV9jbGsiLAlWRkVfQ0xLLAlOVUxMLCBPRkYpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1tc203eDMwLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLW1zbTd4MzAuYwppbmRleCA0ZTlhMGFiLi4wOWI0ZjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLW1zbTd4MzAuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLW1zbTd4MzAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgpAQCAtMjgsNiArMjksNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKICNpbmNsdWRlICJjbG9jay1wY29tLmgiCisjaW5jbHVkZSAiY2xvY2stN3gzMC5oIgogCiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KIApAQCAtNDEsNiArNDMsNyBAQAogCQkuc3RhcnQJPSBNU01fVUFSVDJfUEhZUywKIAkJLmVuZAk9IE1TTV9VQVJUMl9QSFlTICsgTVNNX1VBUlQyX1NJWkUgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLm5hbWUgID0gInVhcnRfcmVzb3VyY2UiCiAJfSwKIH07CiAKQEAgLTEyNywxMSArMTMwLDEzIEBACiAJfSwKIH07CiAKLXN0cnVjdCBjbGsgbXNtX2Nsb2Nrc183eDMwW10gPSB7CitzdHJ1Y3QgY2xrX2xvb2t1cCBtc21fY2xvY2tzXzd4MzBbXSA9IHsKIAlDTEtfUENPTSgiYWRtX2NsayIsCUFETV9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJhZHNwX2NsayIsCUFEU1BfQ0xLLAlOVUxMLCAwKSwKIAlDTEtfUENPTSgiY2FtX21fY2xrIiwJQ0FNX01fQ0xLLAlOVUxMLCAwKSwKIAlDTEtfUENPTSgiY2FtaWZfcGFkX3BjbGsiLAlDQU1JRl9QQURfUF9DTEssCU5VTEwsIE9GRiksCisJQ0xLX1BDT00oImNlX2NsayIsCUNFX0NMSywJTlVMTCwgMCksCisJQ0xLX1BDT00oImNvZGVjX3NzYmlfY2xrIiwJQ09ERUNfU1NCSV9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJlYmkxX2NsayIsCUVCSTFfQ0xLLAlOVUxMLCBDTEtfTUlOKSwKIAlDTEtfUENPTSgiZWNvZGVjX2NsayIsCUVDT0RFQ19DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJlbWRoX2NsayIsCUVNREhfQ0xLLAlOVUxMLCBPRkYgfCBDTEtfTUlOTUFYKSwKQEAgLTE3Nyw3ICsxODIsNyBAQAogCUNMS183WDMwUygidHZfc3JjX2NsayIsCVRWX0NMSywgCVRWX0VOQ19DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJ0dl9kYWNfY2xrIiwJVFZfREFDX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oInR2X2VuY19jbGsiLAlUVl9FTkNfQ0xLLAlOVUxMLCAwKSwKLQlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUMl9DTEssCSZtc21fZGV2aWNlX3VhcnQyLmRldiwgMCksCisJQ0xLX1BDT00oInVhcnRfY2xrIiwJVUFSVDJfQ0xLLAkibXNtX3NlcmlhbC4xIiwgMCksCiAJQ0xLX1BDT00oInVzYl9waHlfY2xrIiwJVVNCX1BIWV9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJ1c2JfaHNfY2xrIiwJCVVTQl9IU19DTEssCQlOVUxMLCBPRkYpLAogCUNMS19QQ09NKCJ1c2JfaHNfcGNsayIsCQlVU0JfSFNfUF9DTEssCQlOVUxMLCBPRkYpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1tc204OTYwLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLW1zbTg5NjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWUxZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1tc204OTYwLmMKQEAgLTAsMCArMSw4NSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLTg5NjAuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNkZWZpbmUgTVNNX0dTQkkyX1BIWVMJCTB4MTYxMDAwMDAKKyNkZWZpbmUgTVNNX1VBUlQyRE1fUEhZUwkoTVNNX0dTQkkyX1BIWVMgKyAweDQwMDAwKQorCisjZGVmaW5lIE1TTV9HU0JJNV9QSFlTCQkweDE2NDAwMDAwCisjZGVmaW5lIE1TTV9VQVJUNURNX1BIWVMJKE1TTV9HU0JJNV9QSFlTICsgMHg0MDAwMCkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNfdWFydF9nc2JpMltdID0geworCXsKKwkJLnN0YXJ0CT0gR1NCSTJfVUFSVERNX0lSUSwKKwkJLmVuZAk9IEdTQkkyX1VBUlRETV9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJPSBNU01fVUFSVDJETV9QSFlTLAorCQkuZW5kCT0gTVNNX1VBUlQyRE1fUEhZUyArIFBBR0VfU0laRSAtIDEsCisJCS5uYW1lCT0gInVhcnRfcmVzb3VyY2UiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gTVNNX0dTQkkyX1BIWVMsCisJCS5lbmQJPSBNU01fR1NCSTJfUEhZUyArIFBBR0VfU0laRSAtIDEsCisJCS5uYW1lCT0gImdzYmlfcmVzb3VyY2UiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc204OTYwX2RldmljZV91YXJ0X2dzYmkyID0geworCS5uYW1lCT0gIm1zbV9zZXJpYWwiLAorCS5pZAk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlc291cmNlc191YXJ0X2dzYmkyKSwKKwkucmVzb3VyY2UJPSByZXNvdXJjZXNfdWFydF9nc2JpMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX3VhcnRfZ3NiaTVbXSA9IHsKKwl7CisJCS5zdGFydAk9IEdTQkk1X1VBUlRETV9JUlEsCisJCS5lbmQJPSBHU0JJNV9VQVJURE1fSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gTVNNX1VBUlQ1RE1fUEhZUywKKwkJLmVuZAk9IE1TTV9VQVJUNURNX1BIWVMgKyBQQUdFX1NJWkUgLSAxLAorCQkubmFtZQk9ICJ1YXJ0X3Jlc291cmNlIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IE1TTV9HU0JJNV9QSFlTLAorCQkuZW5kCT0gTVNNX0dTQkk1X1BIWVMgKyBQQUdFX1NJWkUgLSAxLAorCQkubmFtZQk9ICJnc2JpX3Jlc291cmNlIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtODk2MF9kZXZpY2VfdWFydF9nc2JpNSA9IHsKKwkubmFtZQk9ICJtc21fc2VyaWFsIiwKKwkuaWQJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfdWFydF9nc2JpNSksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX3VhcnRfZ3NiaTUsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1xc2Q4eDUwLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLXFzZDh4NTAuYwppbmRleCBhNGI3OThmLi4xMmQ4ZGViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLXFzZDh4NTAuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLXFzZDh4NTAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKQEAgLTE1LDggKzE1LDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKwogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KQEAgLTI3LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlICJjbG9jay1wY29tLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX3VhcnQzW10gPSB7CiAJewpAQCAtMzgsNiArNDAsNyBAQAogCQkuc3RhcnQJPSBNU01fVUFSVDNfUEhZUywKIAkJLmVuZAk9IE1TTV9VQVJUM19QSFlTICsgTVNNX1VBUlQzX1NJWkUgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLm5hbWUgID0gInVhcnRfcmVzb3VyY2UiCiAJfSwKIH07CiAKQEAgLTEyNCwxNCArMTI3LDIwNCBAQAogCX0sCiB9OwogCi1zdHJ1Y3QgY2xrIG1zbV9jbG9ja3NfOHg1MFtdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNfc2RjMVtdID0geworCXsKKwkJLnN0YXJ0CT0gTVNNX1NEQzFfUEhZUywKKwkJLmVuZAk9IE1TTV9TREMxX1BIWVMgKyBNU01fU0RDMV9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF9TREMxXzAsCisJCS5lbmQJPSBJTlRfU0RDMV8wLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLm5hbWUJPSAiY21kX2lycSIsCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF9TREMxXzEsCisJCS5lbmQJPSBJTlRfU0RDMV8xLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLm5hbWUJPSAicGlvX2lycSIsCisJfSwKKwl7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ESVNBQkxFRCwKKwkJLm5hbWUJPSAic3RhdHVzX2lycSIKKwl9LAorCXsKKwkJLnN0YXJ0CT0gOCwKKwkJLmVuZAk9IDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19zZGMyW10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fU0RDMl9QSFlTLAorCQkuZW5kCT0gTVNNX1NEQzJfUEhZUyArIE1TTV9TREMyX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UX1NEQzJfMCwKKwkJLmVuZAk9IElOVF9TREMyXzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkubmFtZQk9ICJjbWRfaXJxIiwKKwl9LAorCQl7CisJCS5zdGFydAk9IElOVF9TREMyXzEsCisJCS5lbmQJPSBJTlRfU0RDMl8xLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLm5hbWUJPSAicGlvX2lycSIsCisJfSwKKwl7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ESVNBQkxFRCwKKwkJLm5hbWUJPSAic3RhdHVzX2lycSIKKwl9LAorCXsKKwkJLnN0YXJ0CT0gOCwKKwkJLmVuZAk9IDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19zZGMzW10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fU0RDM19QSFlTLAorCQkuZW5kCT0gTVNNX1NEQzNfUEhZUyArIE1TTV9TREMzX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UX1NEQzNfMCwKKwkJLmVuZAk9IElOVF9TREMzXzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkubmFtZQk9ICJjbWRfaXJxIiwKKwl9LAorCQl7CisJCS5zdGFydAk9IElOVF9TREMzXzEsCisJCS5lbmQJPSBJTlRfU0RDM18xLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLm5hbWUJPSAicGlvX2lycSIsCisJfSwKKwl7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ESVNBQkxFRCwKKwkJLm5hbWUJPSAic3RhdHVzX2lycSIKKwl9LAorCXsKKwkJLnN0YXJ0CT0gOCwKKwkJLmVuZAk9IDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19zZGM0W10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fU0RDNF9QSFlTLAorCQkuZW5kCT0gTVNNX1NEQzRfUEhZUyArIE1TTV9TREM0X1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UX1NEQzRfMCwKKwkJLmVuZAk9IElOVF9TREM0XzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkubmFtZQk9ICJjbWRfaXJxIiwKKwl9LAorCQl7CisJCS5zdGFydAk9IElOVF9TREM0XzEsCisJCS5lbmQJPSBJTlRfU0RDNF8xLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLm5hbWUJPSAicGlvX2lycSIsCisJfSwKKwl7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ESVNBQkxFRCwKKwkJLm5hbWUJPSAic3RhdHVzX2lycSIKKwl9LAorCXsKKwkJLnN0YXJ0CT0gOCwKKwkJLmVuZAk9IDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc2RjMSA9IHsKKwkubmFtZQkJPSAibXNtX3NkY2MiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfc2RjMSksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX3NkYzEsCisJLmRldgkJPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zZGMyID0geworCS5uYW1lCQk9ICJtc21fc2RjYyIsCisJLmlkCQk9IDIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlc291cmNlc19zZGMyKSwKKwkucmVzb3VyY2UJPSByZXNvdXJjZXNfc2RjMiwKKwkuZGV2CQk9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX3NkYzMgPSB7CisJLm5hbWUJCT0gIm1zbV9zZGNjIiwKKwkuaWQJCT0gMywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVzb3VyY2VzX3NkYzMpLAorCS5yZXNvdXJjZQk9IHJlc291cmNlc19zZGMzLAorCS5kZXYJCT0geworCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc2RjNCA9IHsKKwkubmFtZQkJPSAibXNtX3NkY2MiLAorCS5pZAkJPSA0LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfc2RjNCksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX3NkYzQsCisJLmRldgkJPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptc21fc2RjY19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbXNtX2RldmljZV9zZGMxLAorCSZtc21fZGV2aWNlX3NkYzIsCisJJm1zbV9kZXZpY2Vfc2RjMywKKwkmbXNtX2RldmljZV9zZGM0LAorfTsKKworaW50IF9faW5pdCBtc21fYWRkX3NkY2ModW5zaWduZWQgaW50IGNvbnRyb2xsZXIsCisJCQlzdHJ1Y3QgbXNtX21tY19wbGF0Zm9ybV9kYXRhICpwbGF0LAorCQkJdW5zaWduZWQgaW50IHN0YXRfaXJxLCB1bnNpZ25lZCBsb25nIHN0YXRfaXJxX2ZsYWdzKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlpZiAoY29udHJvbGxlciA8IDEgfHwgY29udHJvbGxlciA+IDQpCisJCXJldHVybiAtRUlOVkFMOworCisJcGRldiA9IG1zbV9zZGNjX2RldmljZXNbY29udHJvbGxlci0xXTsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBsYXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAic3RhdHVzX2lycSIpOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChzdGF0X2lycSkgeworCQlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQgPSBzdGF0X2lycTsKKwkJcmVzLT5mbGFncyAmPSB+SU9SRVNPVVJDRV9ESVNBQkxFRDsKKwkJcmVzLT5mbGFncyB8PSBzdGF0X2lycV9mbGFnczsKKwl9CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworfQorCitzdHJ1Y3QgY2xrX2xvb2t1cCBtc21fY2xvY2tzXzh4NTBbXSA9IHsKIAlDTEtfUENPTSgiYWRtX2NsayIsCUFETV9DTEssCU5VTEwsIDApLAorCUNMS19QQ09NKCJjZV9jbGsiLAlDRV9DTEssCQlOVUxMLCAwKSwKIAlDTEtfUENPTSgiZWJpMV9jbGsiLAlFQkkxX0NMSywJTlVMTCwgQ0xLX01JTiksCiAJQ0xLX1BDT00oImViaTJfY2xrIiwJRUJJMl9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJlY29kZWNfY2xrIiwJRUNPREVDX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oImVtZGhfY2xrIiwJRU1ESF9DTEssCU5VTEwsIE9GRiB8IENMS19NSU5NQVgpLAogCUNMS19QQ09NKCJncF9jbGsiLAlHUF9DTEssCQlOVUxMLCAwKSwKIAlDTEtfUENPTSgiZ3JwX2NsayIsCUdSUF8zRF9DTEssCU5VTEwsIDApLAorCUNMS19QQ09NKCJpMmNfY2xrIiwJSTJDX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oImljb2RlY19yeF9jbGsiLAlJQ09ERUNfUlhfQ0xLLAlOVUxMLCAwKSwKIAlDTEtfUENPTSgiaWNvZGVjX3R4X2NsayIsCUlDT0RFQ19UWF9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJpbWVtX2NsayIsCUlNRU1fQ0xLLAlOVUxMLCBPRkYpLApAQCAtMTQ0LDEyICszMzcsMjQgQEAKIAlDTEtfUENPTSgicGJ1c19jbGsiLAlQQlVTX0NMSywJTlVMTCwgQ0xLX01JTiksCiAJQ0xLX1BDT00oInBjbV9jbGsiLAlQQ01fQ0xLLAlOVUxMLCAwKSwKIAlDTEtfUENPTSgic2RhY19jbGsiLAlTREFDX0NMSywJTlVMTCwgT0ZGKSwKKwlDTEtfUENPTSgic2RjX2NsayIsCVNEQzFfQ0xLLAkibXNtX3NkY2MuMSIsIE9GRiksCisJQ0xLX1BDT00oInNkY19wY2xrIiwJU0RDMV9QX0NMSywJIm1zbV9zZGNjLjEiLCBPRkYpLAorCUNMS19QQ09NKCJzZGNfY2xrIiwJU0RDMl9DTEssCSJtc21fc2RjYy4yIiwgT0ZGKSwKKwlDTEtfUENPTSgic2RjX3BjbGsiLAlTREMyX1BfQ0xLLAkibXNtX3NkY2MuMiIsIE9GRiksCisJQ0xLX1BDT00oInNkY19jbGsiLAlTREMzX0NMSywJIm1zbV9zZGNjLjMiLCBPRkYpLAorCUNMS19QQ09NKCJzZGNfcGNsayIsCVNEQzNfUF9DTEssCSJtc21fc2RjYy4zIiwgT0ZGKSwKKwlDTEtfUENPTSgic2RjX2NsayIsCVNEQzRfQ0xLLAkibXNtX3NkY2MuNCIsIE9GRiksCisJQ0xLX1BDT00oInNkY19wY2xrIiwJU0RDNF9QX0NMSywJIm1zbV9zZGNjLjQiLCBPRkYpLAogCUNMS19QQ09NKCJzcGlfY2xrIiwJU1BJX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oInRzaWZfY2xrIiwJVFNJRl9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJ0c2lmX3JlZl9jbGsiLAlUU0lGX1JFRl9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJ0dl9kYWNfY2xrIiwJVFZfREFDX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oInR2X2VuY19jbGsiLAlUVl9FTkNfQ0xLLAlOVUxMLCAwKSwKLQlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUM19DTEssCSZtc21fZGV2aWNlX3VhcnQzLmRldiwgT0ZGKSwKKwlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUMV9DTEssCU5VTEwsIE9GRiksCisJQ0xLX1BDT00oInVhcnRfY2xrIiwJVUFSVDJfQ0xLLAlOVUxMLCAwKSwKKwlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUM19DTEssCSJtc21fc2VyaWFsLjIiLCBPRkYpLAorCUNMS19QQ09NKCJ1YXJ0ZG1fY2xrIiwJVUFSVDFETV9DTEssCU5VTEwsIE9GRiksCisJQ0xLX1BDT00oInVhcnRkbV9jbGsiLAlVQVJUMkRNX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oInVzYl9oc19jbGsiLAlVU0JfSFNfQ0xLLAlOVUxMLCBPRkYpLAogCUNMS19QQ09NKCJ1c2JfaHNfcGNsayIsCVVTQl9IU19QX0NMSywJTlVMTCwgT0ZGKSwKIAlDTEtfUENPTSgidXNiX290Z19jbGsiLAlVU0JfT1RHX0NMSywJTlVMTCwgMCksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLmgKaW5kZXggODdjNzBiZi4uOTU0NWMxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMuaApAQCAtMTYsMTIgKzE2LDE3IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NU01fREVWSUNFU19ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NU01fREVWSUNFU19ICiAKKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KKwogI2luY2x1ZGUgImNsb2NrLmgiCiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfdWFydDE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX3VhcnQyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV91YXJ0MzsKIAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtODk2MF9kZXZpY2VfdWFydF9nc2JpMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbTg5NjBfZGV2aWNlX3VhcnRfZ3NiaTU7CisKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc2RjMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc2RjMjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc2RjMzsKQEAgLTQxLDEzICs0NiwxMyBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9tZGRpMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfbWRwOwogCi1leHRlcm4gc3RydWN0IGNsayBtc21fY2xvY2tzXzd4MDFhW107CitleHRlcm4gc3RydWN0IGNsa19sb29rdXAgbXNtX2Nsb2Nrc183eDAxYVtdOwogZXh0ZXJuIHVuc2lnbmVkIG1zbV9udW1fY2xvY2tzXzd4MDFhOwogCi1leHRlcm4gc3RydWN0IGNsayBtc21fY2xvY2tzXzd4MzBbXTsKK2V4dGVybiBzdHJ1Y3QgY2xrX2xvb2t1cCBtc21fY2xvY2tzXzd4MzBbXTsKIGV4dGVybiB1bnNpZ25lZCBtc21fbnVtX2Nsb2Nrc183eDMwOwogCi1leHRlcm4gc3RydWN0IGNsayBtc21fY2xvY2tzXzh4NTBbXTsKK2V4dGVybiBzdHJ1Y3QgY2xrX2xvb2t1cCBtc21fY2xvY2tzXzh4NTBbXTsKIGV4dGVybiB1bnNpZ25lZCBtc21fbnVtX2Nsb2Nrc184eDUwOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2dwaW9tdXgtN3gzMC5jIGIvYXJjaC9hcm0vbWFjaC1tc20vZ3Bpb211eC03eDMwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZTQxYzUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vZ3Bpb211eC03eDMwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlICJncGlvbXV4LmgiCi0KLXN0cnVjdCBtc21fZ3Bpb211eF9jb25maWcgbXNtX2dwaW9tdXhfY29uZmlnc1tHUElPTVVYX05HUElPU10gPSB7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9NU01fQ09OU09MRQotCVs0OV0gPSB7IC8qIFVBUlQyIFJGUiAqLwotCQkuc3VzcGVuZGVkID0gR1BJT01VWF9EUlZfMk1BIHwgR1BJT01VWF9QVUxMX0RPV04gfAotCQkJICAgICBHUElPTVVYX0ZVTkNfMiB8IEdQSU9NVVhfVkFMSUQsCi0JfSwKLQlbNTBdID0geyAvKiBVQVJUMiBDVFMgKi8KLQkJLnN1c3BlbmRlZCA9IEdQSU9NVVhfRFJWXzJNQSB8IEdQSU9NVVhfUFVMTF9ET1dOIHwKLQkJCSAgICAgR1BJT01VWF9GVU5DXzIgfCBHUElPTVVYX1ZBTElELAotCX0sCi0JWzUxXSA9IHsgLyogVUFSVDIgUlggKi8KLQkJLnN1c3BlbmRlZCA9IEdQSU9NVVhfRFJWXzJNQSB8IEdQSU9NVVhfUFVMTF9ET1dOIHwKLQkJCSAgICAgR1BJT01VWF9GVU5DXzIgfCBHUElPTVVYX1ZBTElELAotCX0sCi0JWzUyXSA9IHsgLyogVUFSVDIgVFggKi8KLQkJLnN1c3BlbmRlZCA9IEdQSU9NVVhfRFJWXzJNQSB8IEdQSU9NVVhfUFVMTF9ET1dOIHwKLQkJCSAgICAgR1BJT01VWF9GVU5DXzIgfCBHUElPTVVYX1ZBTElELAotCX0sCi0jZW5kaWYKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ncGlvbXV4LTh4NTAuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2dwaW9tdXgtOHg1MC5jCmluZGV4IDQ0MDZlMGYuLmY3YTRlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2dwaW9tdXgtOHg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2dwaW9tdXgtOHg1MC5jCkBAIC0xNiw2ICsxNiwxOSBAQAogICovCiAjaW5jbHVkZSAiZ3Bpb211eC5oIgogCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX01TTSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX01TTV9NT0RVTEUpCisJI2RlZmluZSBTRENDX0RBVF8wXzNfQ01EX0FDVFZfQ0ZHIChHUElPTVVYX1ZBTElEIHwgR1BJT01VWF9QVUxMX1VQXAorCQkJCQl8IEdQSU9NVVhfRlVOQ18xIHwgR1BJT01VWF9EUlZfOE1BKQorCSNkZWZpbmUgU0RDQ19DTEtfQUNUVl9DRkcgKEdQSU9NVVhfVkFMSUQgfCBHUElPTVVYX1BVTExfTk9ORVwKKwkJCQkJfCBHUElPTVVYX0ZVTkNfMSB8IEdQSU9NVVhfRFJWXzhNQSkKKyNlbHNlCisJI2RlZmluZSBTRENDX0RBVF8wXzNfQ01EX0FDVFZfQ0ZHIDAKKwkjZGVmaW5lIFNEQ0NfQ0xLX0FDVFZfQ0ZHIDAKKyNlbmRpZgorCisjZGVmaW5lIFNEQzFfU1VTUEVORF9DT05GSUcgKEdQSU9NVVhfVkFMSUQgfCBHUElPTVVYX1BVTExfRE9XTlwKKwkJCQl8IEdQSU9NVVhfRlVOQ19HUElPIHwgR1BJT01VWF9EUlZfMk1BKQorCiBzdHJ1Y3QgbXNtX2dwaW9tdXhfY29uZmlnIG1zbV9ncGlvbXV4X2NvbmZpZ3NbR1BJT01VWF9OR1BJT1NdID0gewogCVs4Nl0gPSB7IC8qIFVBUlQzIFJYICovCiAJCS5zdXNwZW5kZWQgPSBHUElPTVVYX0RSVl8yTUEgfCBHUElPTVVYX1BVTExfRE9XTiB8CkBAIC0yNSw0ICszOCwxNCBAQAogCQkuc3VzcGVuZGVkID0gR1BJT01VWF9EUlZfMk1BIHwgR1BJT01VWF9QVUxMX0RPV04gfAogCQkJICAgICBHUElPTVVYX0ZVTkNfMSB8IEdQSU9NVVhfVkFMSUQsCiAJfSwKKwkvKiBTREMxIGRhdGFbMzowXSAmIENNRCAqLworCVs1MSAuLi4gNTVdID0geworCQkuYWN0aXZlID0gU0RDQ19EQVRfMF8zX0NNRF9BQ1RWX0NGRywKKwkJLnN1c3BlbmRlZCA9IFNEQzFfU1VTUEVORF9DT05GSUcKKwl9LAorCS8qIFNEQzEgQ0xLICovCisJWzU2XSA9IHsKKwkJLmFjdGl2ZSA9IFNEQ0NfQ0xLX0FDVFZfQ0ZHLAorCQkuc3VzcGVuZGVkID0gU0RDMV9TVVNQRU5EX0NPTkZJRworCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaGVhZHNtcC5TIGIvYXJjaC9hcm0vbWFjaC1tc20vaGVhZHNtcC5TCmluZGV4IGQwYzIxNDMuLjBjNjMxYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2hlYWRzbXAuUworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9oZWFkc21wLlMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi0JX19JTklUCisJX19DUFVJTklUCiAKIC8qCiAgKiBNU00gc3BlY2lmaWMgZW50cnkgcG9pbnQgZm9yIHNlY29uZGFyeSBDUFVzLiAgVGhpcyBwcm92aWRlcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2JvYXJkLmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCA2YWJmNGE2Li4yY2U4ZjFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvYm9hcmQuaApAQCAtMzEsNyArMzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgd2FpdF9mb3JfaXJxX2toejsKIH07CiAKLXN0cnVjdCBjbGs7CitzdHJ1Y3QgY2xrX2xvb2t1cDsKIAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbXNtX3RpbWVyOwogCkBAIC00MSw3ICs0MSw3IEBACiB2b2lkIF9faW5pdCBtc21fbWFwX2NvbW1vbl9pbyh2b2lkKTsKIHZvaWQgX19pbml0IG1zbV9pbml0X2lycSh2b2lkKTsKIHZvaWQgX19pbml0IG1zbV9pbml0X2dwaW8odm9pZCk7Ci12b2lkIF9faW5pdCBtc21fY2xvY2tfaW5pdChzdHJ1Y3QgY2xrICpjbG9ja190YmwsIHVuc2lnbmVkIG51bV9jbG9ja3MpOwordm9pZCBfX2luaXQgbXNtX2Nsb2NrX2luaXQoc3RydWN0IGNsa19sb29rdXAgKmNsb2NrX3RibCwgdW5zaWduZWQgbnVtX2Nsb2Nrcyk7CiB2b2lkIF9faW5pdCBtc21fYWNwdV9jbG9ja19pbml0KHN0cnVjdCBtc21fYWNwdV9jbG9ja19wbGF0Zm9ybV9kYXRhICopOwogaW50IF9faW5pdCBtc21fYWRkX3NkY2ModW5zaWduZWQgaW50IGNvbnRyb2xsZXIsCiAJCQlzdHJ1Y3QgbXNtX21tY19wbGF0Zm9ybV9kYXRhICpwbGF0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2Nsay5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2Nsay5oCmluZGV4IGMwNWNhNDAuLmU4ZDM4NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9jbGsuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvY2xrLmgKQEAgLTEsMzAgKzEsMTMgQEAKIC8qIENvcHlyaWdodCAoYykgMjAwOSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDb2RlIEF1cm9yYSBGb3J1bSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCi0gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCi0gKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCi0gKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAjaWZuZGVmIF9fTUFDSF9DTEtfSAogI2RlZmluZSBfX01BQ0hfQ0xLX0gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODdhNTdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX01TTV9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9BUkNIX01TTV9DTEtERVZfSAorCitzdHJ1Y3QgY2xrOworCitzdGF0aWMgaW5saW5lIGludCBfX2Nsa19nZXQoc3RydWN0IGNsayAqY2xrKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykgeyB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTQ4MWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NU01fQ1BVX0hfXworI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfTVNNX0NQVV9IX18KKworLyogVE9ETzogRm9yIG5vdywgb25seSBvbmUgQ1BVIGNhbiBiZSBjb21waWxlZCBhdCBhIHRpbWUuICovCisKKyNkZWZpbmUgY3B1X2lzX21zbTd4MDEoKQkwCisjZGVmaW5lIGNwdV9pc19tc203eDMwKCkJMAorI2RlZmluZSBjcHVfaXNfcXNkOHg1MCgpCTAKKyNkZWZpbmUgY3B1X2lzX21zbTh4NjAoKQkwCisjZGVmaW5lIGNwdV9pc19tc204OTYwKCkJMAorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVNNN1gwMEEKKyMgdW5kZWYgY3B1X2lzX21zbTd4MDEKKyMgZGVmaW5lIGNwdV9pc19tc203eDAxKCkJMQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NU003WDMwCisjIHVuZGVmIGNwdV9pc19tc203eDMwCisjIGRlZmluZSBjcHVfaXNfbXNtN3gzMCgpCTEKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfUVNEOFg1MAorIyB1bmRlZiBjcHVfaXNfcXNkOHg1MAorIyBkZWZpbmUgY3B1X2lzX3FzZDh4NTAoKQkxCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX01TTThYNjAKKyMgdW5kZWYgY3B1X2lzX21zbTh4NjAKKyMgZGVmaW5lIGNwdV9pc19tc204eDYwKCkJMQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NU004OTYwCisjIHVuZGVmIGNwdV9pc19tc204OTYwCisjIGRlZmluZSBjcHVfaXNfbXNtODk2MCgpCTEKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggNzM4NmU3My4uZGMxYjkyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTI5LDYgKzI5LDcgQEAKIHZvaWQgbXNtX21hcF9xc2Q4eDUwX2lvKHZvaWQpOwogdm9pZCBtc21fbWFwX21zbTd4MzBfaW8odm9pZCk7CiB2b2lkIG1zbV9tYXBfbXNtOHg2MF9pbyh2b2lkKTsKK3ZvaWQgbXNtX21hcF9tc204OTYwX2lvKHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IG1zbV9zaGFyZWRfcmFtX3BoeXM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pb21tdS5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvbW11LmgKaW5kZXggMjk2YzBmMS4uNWM3Yzk1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvbW11LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvbW11LmgKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKQEAgLTE5LDYgKzE5LDcgQEAKICNkZWZpbmUgTVNNX0lPTU1VX0gKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAvKiBTaGFyYWJpbGl0eSBhdHRyaWJ1dGVzIG9mIE1TTSBJT01NVSBtYXBwaW5ncyAqLwogI2RlZmluZSBNU01fSU9NTVVfQVRUUl9OT05fU0gJCTB4MApAQCAtNDQsMTQgKzQ1LDExIEBACiAvKioKICAqIHN0cnVjdCBtc21faW9tbXVfZGV2IC0gYSBzaW5nbGUgSU9NTVUgaGFyZHdhcmUgaW5zdGFuY2UKICAqIG5hbWUJCUh1bWFuLXJlYWRhYmxlIG5hbWUgZ2l2ZW4gdG8gdGhpcyBJT01NVSBIVyBpbnN0YW5jZQotICogY2xrX3JhdGUJUmF0ZSB0byBzZXQgZm9yIHRoaXMgSU9NTVUncyBjbG9jaywgaWYgYXBwbGljYWJsZSB0byB0aGlzCi0gKgkJcGFydGljdWxhciBJT01NVS4gMCBtZWFucyBkb24ndCBzZXQgYSByYXRlLgotICoJCS0xIG1lYW5zIGl0IGlzIGFuIEFYSSBjbG9jayB3aXRoIG5vIHZhbGlkIHJhdGUKLSAqCisgKiBuY2IJCU51bWJlciBvZiBjb250ZXh0IGJhbmtzIHByZXNlbnQgb24gdGhpcyBJT01NVSBIVyBpbnN0YW5jZQogICovCiBzdHJ1Y3QgbXNtX2lvbW11X2RldiB7CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgY2xrX3JhdGU7CisJaW50IG5jYjsKIH07CiAKIC8qKgpAQCAtNzMsMTQgKzcxLDIwIEBACiAvKioKICAqIHN0cnVjdCBtc21faW9tbXVfZHJ2ZGF0YSAtIEEgc2luZ2xlIElPTU1VIGhhcmR3YXJlIGluc3RhbmNlCiAgKiBAYmFzZToJSU9NTVUgY29uZmlnIHBvcnQgYmFzZSBhZGRyZXNzIChWQSkKKyAqIEBuY2IJCVRoZSBudW1iZXIgb2YgY29udGV4dHMgb24gdGhpcyBJT01NVQogICogQGlycToJSW50ZXJydXB0IG51bWJlcgotICAqCisgKiBAY2xrOglUaGUgYnVzIGNsb2NrIGZvciB0aGlzIElPTU1VIGhhcmR3YXJlIGluc3RhbmNlCisgKiBAcGNsazoJVGhlIGNsb2NrIGZvciB0aGUgSU9NTVUgYnVzIGludGVyY29ubmVjdAorICoKICAqIEEgbXNtX2lvbW11X2RydmRhdGEgaG9sZHMgdGhlIGdsb2JhbCBkcml2ZXIgZGF0YSBhYm91dCBhIHNpbmdsZSBwaWVjZQogICogb2YgYW4gSU9NTVUgaGFyZHdhcmUgaW5zdGFuY2UuCiAgKi8KIHN0cnVjdCBtc21faW9tbXVfZHJ2ZGF0YSB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCBpcnE7CisJaW50IG5jYjsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGNsayAqcGNsazsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvbW11X2h3LTh4eHguaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pb21tdV9ody04eHh4LmgKaW5kZXggYzJjM2RhOS4uZmMxNjAxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvbW11X2h3LTh4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaW9tbXVfaHctOHh4eC5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8qIENvcHlyaWdodCAoYykgMjAxMC0yMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCkBAIC02OCw2ICs2OCw3IEBACiAjZGVmaW5lIEZMX0NBQ0hFQUJMRQkJKDEgPDwgMykKICNkZWZpbmUgRkxfVEVYMAkJCSgxIDw8IDEyKQogI2RlZmluZSBGTF9PRkZTRVQodmEpCQkoKCh2YSkgJiAweEZGRjAwMDAwKSA+PiAyMCkKKyNkZWZpbmUgRkxfTkcJCQkoMSA8PCAxNykKIAogLyogU2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgYml0cyAqLwogI2RlZmluZSBTTF9CQVNFX01BU0tfTEFSR0UJMHhGRkZGMDAwMApAQCAtODEsNiArODIsNyBAQAogI2RlZmluZSBTTF9DQUNIRUFCTEUJCSgxIDw8IDMpCiAjZGVmaW5lIFNMX1RFWDAJCQkoMSA8PCA2KQogI2RlZmluZSBTTF9PRkZTRVQodmEpCQkoKCh2YSkgJiAweEZGMDAwKSA+PiAxMikKKyNkZWZpbmUgU0xfTkcJCQkoMSA8PCAxMSkKIAogLyogTWVtb3J5IHR5cGUgYW5kIGNhY2hlIHBvbGljeSBhdHRyaWJ1dGVzICovCiAjZGVmaW5lIE1UX1NPCQkJMApAQCAtNjIzLDIwICs2MjUsNiBAQAogI2RlZmluZSBTRVRfSU5ERVgoYiwgYywgdikJIFNFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFNSLCBJTkRFWCwgdikKIAogCi0vKiBWMlB4eCBVVyBVUiBQVyBQUiAqLwotI2RlZmluZSBTRVRfVjJQVVdfSU5ERVgoYiwgYywgdikgU0VUX0NPTlRFWFRfRklFTEQoYiwgYywgVjJQVVcsIFYyUHh4X0lOREVYLCB2KQotI2RlZmluZSBTRVRfVjJQVVdfVkEoYiwgYywgdikJIFNFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFVXLCBWMlB4eF9WQSwgdikKLQotI2RlZmluZSBTRVRfVjJQVVJfSU5ERVgoYiwgYywgdikgU0VUX0NPTlRFWFRfRklFTEQoYiwgYywgVjJQVVIsIFYyUHh4X0lOREVYLCB2KQotI2RlZmluZSBTRVRfVjJQVVJfVkEoYiwgYywgdikJIFNFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFVSLCBWMlB4eF9WQSwgdikKLQotI2RlZmluZSBTRVRfVjJQUFdfSU5ERVgoYiwgYywgdikgU0VUX0NPTlRFWFRfRklFTEQoYiwgYywgVjJQUFcsIFYyUHh4X0lOREVYLCB2KQotI2RlZmluZSBTRVRfVjJQUFdfVkEoYiwgYywgdikJIFNFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFBXLCBWMlB4eF9WQSwgdikKLQotI2RlZmluZSBTRVRfVjJQUFJfSU5ERVgoYiwgYywgdikgU0VUX0NPTlRFWFRfRklFTEQoYiwgYywgVjJQUFIsIFYyUHh4X0lOREVYLCB2KQotI2RlZmluZSBTRVRfVjJQUFJfVkEoYiwgYywgdikJIFNFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFBSLCBWMlB4eF9WQSwgdikKLQotCiAvKiBDb250ZXh0IFJlZ2lzdGVyIGdldHRlcnMgKi8KIC8qIEFDVExSICovCiAjZGVmaW5lIEdFVF9DRkVSRShiLCBjKQkgICAgICAgIEdFVF9DT05URVhUX0ZJRUxEKGIsIGMsIEFDVExSLCBDRkVSRSkKQEAgLTgyNCwyMCArODEyLDYgQEAKICNkZWZpbmUgR0VUX0lOREVYKGIsIGMpCQlHRVRfQ09OVEVYVF9GSUVMRChiLCBjLCBWMlBTUiwgSU5ERVgpCiAKIAotLyogVjJQeHggVVcgVVIgUFcgUFIgKi8KLSNkZWZpbmUgR0VUX1YyUFVXX0lOREVYKGIsIGMpCUdFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFVXLCBWMlB4eF9JTkRFWCkKLSNkZWZpbmUgR0VUX1YyUFVXX1ZBKGIsIGMpCUdFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFVXLCBWMlB4eF9WQSkKLQotI2RlZmluZSBHRVRfVjJQVVJfSU5ERVgoYiwgYykJR0VUX0NPTlRFWFRfRklFTEQoYiwgYywgVjJQVVIsIFYyUHh4X0lOREVYKQotI2RlZmluZSBHRVRfVjJQVVJfVkEoYiwgYykJR0VUX0NPTlRFWFRfRklFTEQoYiwgYywgVjJQVVIsIFYyUHh4X1ZBKQotCi0jZGVmaW5lIEdFVF9WMlBQV19JTkRFWChiLCBjKQlHRVRfQ09OVEVYVF9GSUVMRChiLCBjLCBWMlBQVywgVjJQeHhfSU5ERVgpCi0jZGVmaW5lIEdFVF9WMlBQV19WQShiLCBjKQlHRVRfQ09OVEVYVF9GSUVMRChiLCBjLCBWMlBQVywgVjJQeHhfVkEpCi0KLSNkZWZpbmUgR0VUX1YyUFBSX0lOREVYKGIsIGMpCUdFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFBSLCBWMlB4eF9JTkRFWCkKLSNkZWZpbmUgR0VUX1YyUFBSX1ZBKGIsIGMpCUdFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFYyUFBSLCBWMlB4eF9WQSkKLQotCiAvKiBHbG9iYWwgUmVnaXN0ZXJzICovCiAjZGVmaW5lIE0yVkNCUl9OCSgweEZGMDAwKQogI2RlZmluZSBDQkFDUl9OCQkoMHhGRjgwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLTd4MzAuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLTd4MzAuaAppbmRleCA2N2M1Mzk2Li4xZjE1OTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaXJxcy03eDMwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lycXMtN3gzMC5oCkBAIC0xLDMwICsxLDEzIEBACiAvKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQ29kZSBBdXJvcmEgRm9ydW0sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVAotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgotICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCi0gKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQotICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgotICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVNNX0lSUVNfN1gzMF9ICmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaXJxcy04OTYwLmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaXJxcy04OTYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhYjJhNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLTg5NjAuaApAQCAtMCwwICsxLDI3NyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDExIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01TTV9JUlFTXzg5NjBfSAorI2RlZmluZSBfX0FTTV9BUkNIX01TTV9JUlFTXzg5NjBfSAorCisvKiBNU00gQUNQVSBJbnRlcnJ1cHQgTnVtYmVycyAqLworCisvKiAwLTE1OiAgU1RJL1NHSSAoc29mdHdhcmUgdHJpZ2dlcmVkL2dlbmVyYXRlZCBpbnRlcnJ1cHRzKQorICAgMTYtMzE6IFBQSSAocHJpdmF0ZSBwZXJpcGhlcmFsIGludGVycnVwdHMpCisgICAzMis6ICAgU1BJIChzaGFyZWQgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzKSAqLworCisjZGVmaW5lIEdJQ19QUElfU1RBUlQgMTYKKyNkZWZpbmUgR0lDX1NQSV9TVEFSVCAzMgorCisjZGVmaW5lIElOVF9WR0lDCQkJCShHSUNfUFBJX1NUQVJUICsgMCkKKyNkZWZpbmUgSU5UX0RFQlVHX1RJTUVSX0VYUAkJCShHSUNfUFBJX1NUQVJUICsgMSkKKyNkZWZpbmUgSU5UX0dQX1RJTUVSX0VYUAkJCShHSUNfUFBJX1NUQVJUICsgMikKKyNkZWZpbmUgSU5UX0dQX1RJTUVSMl9FWFAJCQkoR0lDX1BQSV9TVEFSVCArIDMpCisjZGVmaW5lIFdEVDBfQUNDU0NTU05CQVJLX0lOVAkJCShHSUNfUFBJX1NUQVJUICsgNCkKKyNkZWZpbmUgV0RUMV9BQ0NTQ1NTTkJBUktfSU5UCQkJKEdJQ19QUElfU1RBUlQgKyA1KQorI2RlZmluZSBBVlNfU1ZJQ0lOVAkJCQkoR0lDX1BQSV9TVEFSVCArIDYpCisjZGVmaW5lIEFWU19TVklDSU5UU1dET05FCQkJKEdJQ19QUElfU1RBUlQgKyA3KQorI2RlZmluZSBDUFVfREJHQ1BVWENPTU1SWEZVTEwJCQkoR0lDX1BQSV9TVEFSVCArIDgpCisjZGVmaW5lIENQVV9EQkdDUFVYQ09NTVRYRU1QVFkJCQkoR0lDX1BQSV9TVEFSVCArIDkpCisjZGVmaW5lIENQVV9TSUNDUFVYUEVSRk1PTklSUFRSRVEJCShHSUNfUFBJX1NUQVJUICsgMTApCisjZGVmaW5lIFNDX0FWU0NQVVhET1dOCQkJCShHSUNfUFBJX1NUQVJUICsgMTEpCisjZGVmaW5lIFNDX0FWU0NQVVhVUAkJCQkoR0lDX1BQSV9TVEFSVCArIDEyKQorI2RlZmluZSBTQ19TSUNDUFVYQUNHSVJQVFJFUQkJCShHSUNfUFBJX1NUQVJUICsgMTMpCisjZGVmaW5lIFNDX1NJQ0NQVVhFWFRGQVVMVElSUFRSRVEJCShHSUNfUFBJX1NUQVJUICsgMTQpCisvKiBQUEkgMTUgaXMgdW51c2VkICovCisKKyNkZWZpbmUgU0NfU0lDTVBVSVJQVFJFUQkJCShHSUNfU1BJX1NUQVJUICsgMCkKKyNkZWZpbmUgU0NfU0lDTDJJUlBUUkVRCQkJCShHSUNfU1BJX1NUQVJUICsgMSkKKyNkZWZpbmUgU0NfU0lDTDJQRVJGTU9OSVJQVFJFUQkJCShHSUNfU1BJX1NUQVJUICsgMikKKyNkZWZpbmUgU0NfU0lDQUdDSVJQVFJFUQkJCShHSUNfU1BJX1NUQVJUICsgMykKKyNkZWZpbmUgVExNTV9BUENDX0RJUl9DT05OX0lSUV8wCQkoR0lDX1NQSV9TVEFSVCArIDQpCisjZGVmaW5lIFRMTU1fQVBDQ19ESVJfQ09OTl9JUlFfMQkJKEdJQ19TUElfU1RBUlQgKyA1KQorI2RlZmluZSBUTE1NX0FQQ0NfRElSX0NPTk5fSVJRXzIJCShHSUNfU1BJX1NUQVJUICsgNikKKyNkZWZpbmUgVExNTV9BUENDX0RJUl9DT05OX0lSUV8zCQkoR0lDX1NQSV9TVEFSVCArIDcpCisjZGVmaW5lIFRMTU1fQVBDQ19ESVJfQ09OTl9JUlFfNAkJKEdJQ19TUElfU1RBUlQgKyA4KQorI2RlZmluZSBUTE1NX0FQQ0NfRElSX0NPTk5fSVJRXzUJCShHSUNfU1BJX1NUQVJUICsgOSkKKyNkZWZpbmUgVExNTV9BUENDX0RJUl9DT05OX0lSUV82CQkoR0lDX1NQSV9TVEFSVCArIDEwKQorI2RlZmluZSBUTE1NX0FQQ0NfRElSX0NPTk5fSVJRXzcJCShHSUNfU1BJX1NUQVJUICsgMTEpCisjZGVmaW5lIFRMTU1fQVBDQ19ESVJfQ09OTl9JUlFfOAkJKEdJQ19TUElfU1RBUlQgKyAxMikKKyNkZWZpbmUgVExNTV9BUENDX0RJUl9DT05OX0lSUV85CQkoR0lDX1NQSV9TVEFSVCArIDEzKQorI2RlZmluZSBQTTg5MjFfU0VDX0lSUV8xMDMJCQkoR0lDX1NQSV9TVEFSVCArIDE0KQorI2RlZmluZSBQTTgwMThfU0VDX0lSUV8xMDYJCQkoR0lDX1NQSV9TVEFSVCArIDE1KQorI2RlZmluZSBUTE1NX0FQQ0NfU1VNTUFSWV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDE2KQorI2RlZmluZSBTUERNX1JUXzFfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTcpCisjZGVmaW5lIFNQRE1fRElBR19JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyAxOCkKKyNkZWZpbmUgUlBNX0FQQ0NfQ1BVMF9HUF9ISUdIX0lSUQkJKEdJQ19TUElfU1RBUlQgKyAxOSkKKyNkZWZpbmUgUlBNX0FQQ0NfQ1BVMF9HUF9NRURJVU1fSVJRCQkoR0lDX1NQSV9TVEFSVCArIDIwKQorI2RlZmluZSBSUE1fQVBDQ19DUFUwX0dQX0xPV19JUlEJCShHSUNfU1BJX1NUQVJUICsgMjEpCisjZGVmaW5lIFJQTV9BUENDX0NQVTBfV0FLRV9VUF9JUlEJCShHSUNfU1BJX1NUQVJUICsgMjIpCisjZGVmaW5lIFJQTV9BUENDX0NQVTFfR1BfSElHSF9JUlEJCShHSUNfU1BJX1NUQVJUICsgMjMpCisjZGVmaW5lIFJQTV9BUENDX0NQVTFfR1BfTUVESVVNX0lSUQkJKEdJQ19TUElfU1RBUlQgKyAyNCkKKyNkZWZpbmUgUlBNX0FQQ0NfQ1BVMV9HUF9MT1dfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDI1KQorI2RlZmluZSBSUE1fQVBDQ19DUFUxX1dBS0VfVVBfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDI2KQorI2RlZmluZSBTU0JJMl8yX1NDX0NQVTBfU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyAyNykKKyNkZWZpbmUgU1NCSTJfMl9TQ19DUFUwX05PTl9TRUNVUkVfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDI4KQorI2RlZmluZSBTU0JJMl8xX1NDX0NQVTBfU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyAyOSkKKyNkZWZpbmUgU1NCSTJfMV9TQ19DUFUwX05PTl9TRUNVUkVfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDMwKQorI2RlZmluZSBNU01DX1NDX1NFQ19DRV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDMxKQorI2RlZmluZSBNU01DX1NDX1BSSV9DRV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDMyKQorI2RlZmluZSBTTElNQlVTMF9DT1JFX0VFMV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDMzKQorI2RlZmluZSBTTElNQlVTMF9CQU1fRUUxX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMzQpCisjZGVmaW5lIFE2RldfV0RPR19FWFBJUkVEX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMzUpCisjZGVmaW5lIFE2U1dfV0RPR19FWFBJUkVEX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMzYpCisjZGVmaW5lIE1TU19UT19BUFBTX0lSUV8wCQkJKEdJQ19TUElfU1RBUlQgKyAzNykKKyNkZWZpbmUgTVNTX1RPX0FQUFNfSVJRXzEJCQkoR0lDX1NQSV9TVEFSVCArIDM4KQorI2RlZmluZSBNU1NfVE9fQVBQU19JUlFfMgkJCShHSUNfU1BJX1NUQVJUICsgMzkpCisjZGVmaW5lIE1TU19UT19BUFBTX0lSUV8zCQkJKEdJQ19TUElfU1RBUlQgKyA0MCkKKyNkZWZpbmUgTVNTX1RPX0FQUFNfSVJRXzQJCQkoR0lDX1NQSV9TVEFSVCArIDQxKQorI2RlZmluZSBNU1NfVE9fQVBQU19JUlFfNQkJCShHSUNfU1BJX1NUQVJUICsgNDIpCisjZGVmaW5lIE1TU19UT19BUFBTX0lSUV82CQkJKEdJQ19TUElfU1RBUlQgKyA0MykKKyNkZWZpbmUgTVNTX1RPX0FQUFNfSVJRXzcJCQkoR0lDX1NQSV9TVEFSVCArIDQ0KQorI2RlZmluZSBNU1NfVE9fQVBQU19JUlFfOAkJCShHSUNfU1BJX1NUQVJUICsgNDUpCisjZGVmaW5lIE1TU19UT19BUFBTX0lSUV85CQkJKEdJQ19TUElfU1RBUlQgKyA0NikKKyNkZWZpbmUgVlBFX0lSUQkJCQkJKEdJQ19TUElfU1RBUlQgKyA0NykKKyNkZWZpbmUgVkZFX0lSUQkJCQkJKEdJQ19TUElfU1RBUlQgKyA0OCkKKyNkZWZpbmUgVkNPREVDX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDQ5KQorI2RlZmluZSBUVl9FTkNfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgNTApCisjZGVmaW5lIFNNTVVfVlBFX0NCX1NDX1NFQ1VSRV9JUlEJCShHSUNfU1BJX1NUQVJUICsgNTEpCisjZGVmaW5lIFNNTVVfVlBFX0NCX1NDX05PTl9TRUNVUkVfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDUyKQorI2RlZmluZSBTTU1VX1ZGRV9DQl9TQ19TRUNVUkVfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDUzKQorI2RlZmluZSBTTU1VX1ZGRV9DQl9TQ19OT05fU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA1NCkKKyNkZWZpbmUgU01NVV9WQ09ERUNfQl9DQl9TQ19TRUNVUkVfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDU1KQorI2RlZmluZSBTTU1VX1ZDT0RFQ19CX0NCX1NDX05PTl9TRUNVUkVfSVJRCShHSUNfU1BJX1NUQVJUICsgNTYpCisjZGVmaW5lIFNNTVVfVkNPREVDX0FfQ0JfU0NfU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA1NykKKyNkZWZpbmUgU01NVV9WQ09ERUNfQV9DQl9TQ19OT05fU0VDVVJFX0lSUQkoR0lDX1NQSV9TVEFSVCArIDU4KQorI2RlZmluZSBTTU1VX1JPVF9DQl9TQ19TRUNVUkVfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDU5KQorI2RlZmluZSBTTU1VX1JPVF9DQl9TQ19OT05fU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA2MCkKKyNkZWZpbmUgU01NVV9NRFAxX0NCX1NDX1NFQ1VSRV9JUlEJCShHSUNfU1BJX1NUQVJUICsgNjEpCisjZGVmaW5lIFNNTVVfTURQMV9DQl9TQ19OT05fU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA2MikKKyNkZWZpbmUgU01NVV9NRFAwX0NCX1NDX1NFQ1VSRV9JUlEJCShHSUNfU1BJX1NUQVJUICsgNjMpCisjZGVmaW5lIFNNTVVfTURQMF9DQl9TQ19OT05fU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA2NCkKKyNkZWZpbmUgU01NVV9KUEVHRF9DQl9TQ19TRUNVUkVfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDY1KQorI2RlZmluZSBTTU1VX0pQRUdEX0NCX1NDX05PTl9TRUNVUkVfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDY2KQorI2RlZmluZSBTTU1VX0lKUEVHX0NCX1NDX1NFQ1VSRV9JUlEJCShHSUNfU1BJX1NUQVJUICsgNjcpCisjZGVmaW5lIFNNTVVfSUpQRUdfQ0JfU0NfTk9OX1NFQ1VSRV9JUlEJCShHSUNfU1BJX1NUQVJUICsgNjgpCisjZGVmaW5lIFNNTVVfR0ZYM0RfQ0JfU0NfU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA2OSkKKyNkZWZpbmUgU01NVV9HRlgzRF9DQl9TQ19OT05fU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA3MCkKKyNkZWZpbmUgU01NVV9HRlgyRDBfQ0JfU0NfU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA3MSkKKyNkZWZpbmUgU01NVV9HRlgyRDBfQ0JfU0NfTk9OX1NFQ1VSRV9JUlEJKEdJQ19TUElfU1RBUlQgKyA3MikKKyNkZWZpbmUgUk9UX0lSUQkJCQkJKEdJQ19TUElfU1RBUlQgKyA3MykKKyNkZWZpbmUgTU1TU19GQUJSSUNfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgNzQpCisjZGVmaW5lIE1EUF9JUlEJCQkJCShHSUNfU1BJX1NUQVJUICsgNzUpCisjZGVmaW5lIEpQRUdEX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDc2KQorI2RlZmluZSBKUEVHX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDc3KQorI2RlZmluZSBNTVNTX0lNRU1fSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgNzgpCisjZGVmaW5lIEhETUlfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgNzkpCisjZGVmaW5lIEdGWDNEX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDgwKQorI2RlZmluZSBHRlgyRDBfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgODEpCisjZGVmaW5lIERTSTFfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgODIpCisjZGVmaW5lIENTSV8xX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDgzKQorI2RlZmluZSBDU0lfMF9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyA4NCkKKyNkZWZpbmUgTFBBU1NfU0NTU19BVURJT19JRl9PVVQwX0lSUQkJKEdJQ19TUElfU1RBUlQgKyA4NSkKKyNkZWZpbmUgTFBBU1NfU0NTU19NSURJX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgODYpCisjZGVmaW5lIExQQVNTX1E2U1NfV0RPR19FWFBJUkVECQkJKEdJQ19TUElfU1RBUlQgKyA4NykKKyNkZWZpbmUgTFBBU1NfU0NTU19HUF9MT1dfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyA4OCkKKyNkZWZpbmUgTFBBU1NfU0NTU19HUF9NRURJVU1fSVJRCQkoR0lDX1NQSV9TVEFSVCArIDg5KQorI2RlZmluZSBMUEFTU19TQ1NTX0dQX0hJR0hfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyA5MCkKKyNkZWZpbmUgVE9QX0lNRU1fSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgOTEpCisjZGVmaW5lIEZBQlJJQ19TWVNfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgOTIpCisjZGVmaW5lIEZBQlJJQ19BUFBTX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDkzKQorI2RlZmluZSBVU0IxX0hTX0JBTV9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyA5NCkKKyNkZWZpbmUgU0RDNF9CQU1fSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgOTUpCisjZGVmaW5lIFNEQzNfQkFNX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDk2KQorI2RlZmluZSBTREMyX0JBTV9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyA5NykKKyNkZWZpbmUgU0RDMV9CQU1fSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgOTgpCisjZGVmaW5lIEZBQlJJQ19TUFNfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgOTkpCisjZGVmaW5lIFVTQjFfSFNfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTAwKQorI2RlZmluZSBTREM0X0lSUV8wCQkJCShHSUNfU1BJX1NUQVJUICsgMTAxKQorI2RlZmluZSBTREMzX0lSUV8wCQkJCShHSUNfU1BJX1NUQVJUICsgMTAyKQorI2RlZmluZSBTREMyX0lSUV8wCQkJCShHSUNfU1BJX1NUQVJUICsgMTAzKQorI2RlZmluZSBTREMxX0lSUV8wCQkJCShHSUNfU1BJX1NUQVJUICsgMTA0KQorI2RlZmluZSBTUFNfQkFNX0RNQV9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyAxMDUpCisjZGVmaW5lIFNQU19TRUNfVklPTF9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDEwNikKKyNkZWZpbmUgU1BTX01USV8wCQkJCShHSUNfU1BJX1NUQVJUICsgMTA3KQorI2RlZmluZSBTUFNfTVRJXzEJCQkJKEdJQ19TUElfU1RBUlQgKyAxMDgpCisjZGVmaW5lIFNQU19NVElfMgkJCQkoR0lDX1NQSV9TVEFSVCArIDEwOSkKKyNkZWZpbmUgU1BTX01USV8zCQkJCShHSUNfU1BJX1NUQVJUICsgMTEwKQorI2RlZmluZSBTUFNfTVRJXzQJCQkJKEdJQ19TUElfU1RBUlQgKyAxMTEpCisjZGVmaW5lIFNQU19NVElfNQkJCQkoR0lDX1NQSV9TVEFSVCArIDExMikKKyNkZWZpbmUgU1BTX01USV82CQkJCShHSUNfU1BJX1NUQVJUICsgMTEzKQorI2RlZmluZSBTUFNfTVRJXzcJCQkJKEdJQ19TUElfU1RBUlQgKyAxMTQpCisjZGVmaW5lIFNQU19NVElfOAkJCQkoR0lDX1NQSV9TVEFSVCArIDExNSkKKyNkZWZpbmUgU1BTX01USV85CQkJCShHSUNfU1BJX1NUQVJUICsgMTE2KQorI2RlZmluZSBTUFNfTVRJXzEwCQkJCShHSUNfU1BJX1NUQVJUICsgMTE3KQorI2RlZmluZSBTUFNfTVRJXzExCQkJCShHSUNfU1BJX1NUQVJUICsgMTE4KQorI2RlZmluZSBTUFNfTVRJXzEyCQkJCShHSUNfU1BJX1NUQVJUICsgMTE5KQorI2RlZmluZSBTUFNfTVRJXzEzCQkJCShHSUNfU1BJX1NUQVJUICsgMTIwKQorI2RlZmluZSBTUFNfTVRJXzE0CQkJCShHSUNfU1BJX1NUQVJUICsgMTIxKQorI2RlZmluZSBTUFNfTVRJXzE1CQkJCShHSUNfU1BJX1NUQVJUICsgMTIyKQorI2RlZmluZSBTUFNfTVRJXzE2CQkJCShHSUNfU1BJX1NUQVJUICsgMTIzKQorI2RlZmluZSBTUFNfTVRJXzE3CQkJCShHSUNfU1BJX1NUQVJUICsgMTI0KQorI2RlZmluZSBTUFNfTVRJXzE4CQkJCShHSUNfU1BJX1NUQVJUICsgMTI1KQorI2RlZmluZSBTUFNfTVRJXzE5CQkJCShHSUNfU1BJX1NUQVJUICsgMTI2KQorI2RlZmluZSBTUFNfTVRJXzIwCQkJCShHSUNfU1BJX1NUQVJUICsgMTI3KQorI2RlZmluZSBTUFNfTVRJXzIxCQkJCShHSUNfU1BJX1NUQVJUICsgMTI4KQorI2RlZmluZSBTUFNfTVRJXzIyCQkJCShHSUNfU1BJX1NUQVJUICsgMTI5KQorI2RlZmluZSBTUFNfTVRJXzIzCQkJCShHSUNfU1BJX1NUQVJUICsgMTMwKQorI2RlZmluZSBTUFNfTVRJXzI0CQkJCShHSUNfU1BJX1NUQVJUICsgMTMxKQorI2RlZmluZSBTUFNfTVRJXzI1CQkJCShHSUNfU1BJX1NUQVJUICsgMTMyKQorI2RlZmluZSBTUFNfTVRJXzI2CQkJCShHSUNfU1BJX1NUQVJUICsgMTMzKQorI2RlZmluZSBTUFNfTVRJXzI3CQkJCShHSUNfU1BJX1NUQVJUICsgMTM0KQorI2RlZmluZSBTUFNfTVRJXzI4CQkJCShHSUNfU1BJX1NUQVJUICsgMTM1KQorI2RlZmluZSBTUFNfTVRJXzI5CQkJCShHSUNfU1BJX1NUQVJUICsgMTM2KQorI2RlZmluZSBTUFNfTVRJXzMwCQkJCShHSUNfU1BJX1NUQVJUICsgMTM3KQorI2RlZmluZSBTUFNfTVRJXzMxCQkJCShHSUNfU1BJX1NUQVJUICsgMTM4KQorI2RlZmluZSBDU0lQSFlfNExOX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDEzOSkKKyNkZWZpbmUgQ1NJUEhZXzJMTl9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyAxNDApCisjZGVmaW5lIFVTQjJfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTQxKQorI2RlZmluZSBVU0IxX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE0MikKKyNkZWZpbmUgVFNTQ19TU0JJX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE0MykKKyNkZWZpbmUgVFNTQ19TQU1QTEVfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTQ0KQorI2RlZmluZSBUU1NDX1BFTlVQX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE0NSkKKyNkZWZpbmUgR1NCSTFfVUFSVERNX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMTQ2KQorI2RlZmluZSBHU0JJMV9RVVBfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTQ3KQorI2RlZmluZSBHU0JJMl9VQVJURE1fSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxNDgpCisjZGVmaW5lIEdTQkkyX1FVUF9JUlEJCQkgICAgICAgIChHSUNfU1BJX1NUQVJUICsgMTQ5KQorI2RlZmluZSBHU0JJM19VQVJURE1fSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxNTApCisjZGVmaW5lIEdTQkkzX1FVUF9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyAxNTEpCisjZGVmaW5lIEdTQkk0X1VBUlRETV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDE1MikKKyNkZWZpbmUgR1NCSTRfUVVQX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE1MykKKyNkZWZpbmUgR1NCSTVfVUFSVERNX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMTU0KQorI2RlZmluZSBHU0JJNV9RVVBfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTU1KQorI2RlZmluZSBHU0JJNl9VQVJURE1fSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxNTYpCisjZGVmaW5lIEdTQkk2X1FVUF9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyAxNTcpCisjZGVmaW5lIEdTQkk3X1VBUlRETV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDE1OCkKKyNkZWZpbmUgR1NCSTdfUVVQX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE1OSkKKyNkZWZpbmUgR1NCSThfVUFSVERNX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMTYwKQorI2RlZmluZSBHU0JJOF9RVVBfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTYxKQorI2RlZmluZSBUU0lGX1RTUFBfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTYyKQorI2RlZmluZSBUU0lGX0JBTV9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyAxNjMpCisjZGVmaW5lIFRTSUYyX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE2NCkKKyNkZWZpbmUgVFNJRjFfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTY1KQorI2RlZmluZSBEU0kyX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE2NikKKyNkZWZpbmUgSVNQSUZfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTY3KQorI2RlZmluZSBNU01DX1NDX1NFQ19UTVJfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxNjgpCisjZGVmaW5lIE1TTUNfU0NfU0VDX1dET0dfQkFSS19JUlEJCShHSUNfU1BJX1NUQVJUICsgMTY5KQorI2RlZmluZSBJTlRfQURNMF9TQ1NTXzBfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxNzApCisjZGVmaW5lIElOVF9BRE0wX1NDU1NfMV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDE3MSkKKyNkZWZpbmUgSU5UX0FETTBfU0NTU18yX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMTcyKQorI2RlZmluZSBJTlRfQURNMF9TQ1NTXzNfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxNzMpCisjZGVmaW5lIENDX1NDU1NfV0RUMUNQVTFCSVRFRVhQSVJFRAkJKEdJQ19TUElfU1RBUlQgKyAxNzQpCisjZGVmaW5lIENDX1NDU1NfV0RUMUNQVTBCSVRFRVhQSVJFRAkJKEdJQ19TUElfU1RBUlQgKyAxNzUpCisjZGVmaW5lIENDX1NDU1NfV0RUMENQVTFCSVRFRVhQSVJFRAkJKEdJQ19TUElfU1RBUlQgKyAxNzYpCisjZGVmaW5lIENDX1NDU1NfV0RUMENQVTBCSVRFRVhQSVJFRAkJKEdJQ19TUElfU1RBUlQgKyAxNzcpCisjZGVmaW5lIFRTRU5TX1VQUEVSX0xPV0VSX0lOVAkJCShHSUNfU1BJX1NUQVJUICsgMTc4KQorI2RlZmluZSBTU0JJMl8yX1NDX0NQVTFfU0VDVVJFX0lOVAkJKEdJQ19TUElfU1RBUlQgKyAxNzkpCisjZGVmaW5lIFNTQkkyXzJfU0NfQ1BVMV9OT05fU0VDVVJFX0lOVAkJKEdJQ19TUElfU1RBUlQgKyAxODApCisjZGVmaW5lIFNTQkkyXzFfU0NfQ1BVMV9TRUNVUkVfSU5UCQkoR0lDX1NQSV9TVEFSVCArIDE4MSkKKyNkZWZpbmUgU1NCSTJfMV9TQ19DUFUxX05PTl9TRUNVUkVfSU5UCQkoR0lDX1NQSV9TVEFSVCArIDE4MikKKyNkZWZpbmUgWFBVX1NVTU1BUllfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTgzKQorI2RlZmluZSBCVVNfRVhDRVBUSU9OX1NVTU1BUllfSVJRCQkoR0lDX1NQSV9TVEFSVCArIDE4NCkKKyNkZWZpbmUgSFNERFJYX0VCSTFDSDBfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxODUpCisjZGVmaW5lIEhTRERSWF9FQkkxQ0gxX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMTg2KQorI2RlZmluZSBTREM1X0JBTV9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyAxODcpCisjZGVmaW5lIFNEQzVfSVJRXzAJCQkJKEdJQ19TUElfU1RBUlQgKyAxODgpCisjZGVmaW5lIEdTQkk5X1VBUlRETV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDE4OSkKKyNkZWZpbmUgR1NCSTlfUVVQX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE5MCkKKyNkZWZpbmUgR1NCSTEwX1VBUlRETV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDE5MSkKKyNkZWZpbmUgR1NCSTEwX1FVUF9JUlEJCQkJKEdJQ19TUElfU1RBUlQgKyAxOTIpCisjZGVmaW5lIEdTQkkxMV9VQVJURE1fSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxOTMpCisjZGVmaW5lIEdTQkkxMV9RVVBfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTk0KQorI2RlZmluZSBHU0JJMTJfVUFSVERNX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMTk1KQorI2RlZmluZSBHU0JJMTJfUVVQX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDE5NikKKyNkZWZpbmUgUklWQV9BUFNTX0xURUNPRVhfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxOTcpCisjZGVmaW5lIFJJVkFfQVBTU19TUEFSRV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDE5OCkKKyNkZWZpbmUgUklWQV9BUFNTX1dET0dfQklURV9SRVNFVF9SRFlfSVJRCShHSUNfU1BJX1NUQVJUICsgMTk5KQorI2RlZmluZSBSSVZBX0FTU19SRVNFVF9ET05FX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMjAwKQorI2RlZmluZSBSSVZBX0FQU1NfQVNJQ19JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDIwMSkKKyNkZWZpbmUgUklWQV9BUFBTX1dMQU5fUlhfREFUQV9BVkFJTF9JUlEJKEdJQ19TUElfU1RBUlQgKyAyMDIpCisjZGVmaW5lIFJJVkFfQVBQU19XTEFOX0RBVEFfWEZFUl9ET05FX0lSUQkoR0lDX1NQSV9TVEFSVCArIDIwMykKKyNkZWZpbmUgUklWQV9BUFBTX1dMQU1fU01TTV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDIwNCkKKyNkZWZpbmUgUklWQV9BUFBTX0xPR19DVFJMX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMjA1KQorI2RlZmluZSBSSVZBX0FQUFNfRk1fQ1RSTF9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDIwNikKKyNkZWZpbmUgUklWQV9BUFBTX0hDSV9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDIwNykKKyNkZWZpbmUgUklWQV9BUFBTX1dMQU5fQ1RSTF9JUlEJCQkoR0lDX1NQSV9TVEFSVCArIDIwOCkKKyNkZWZpbmUgQTJfQkFNX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDIwOSkKKyNkZWZpbmUgU01NVV9HRlgyRDFfQ0JfU0NfU0VDVVJFX0lSUQkJKEdJQ19TUElfU1RBUlQgKyAyMTApCisjZGVmaW5lIFNNTVVfR0ZYMkQxX0NCX1NDX05PTl9TRUNVUkVfSVJRCShHSUNfU1BJX1NUQVJUICsgMjExKQorI2RlZmluZSBHRlgyRDFfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMjEyKQorI2RlZmluZSBQUFNTX1dET0dfVElNRVJfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAyMTMpCisjZGVmaW5lIFNQU19TTElNQlVTX0NPUkVfRUUwX0lSUQkJKEdJQ19TUElfU1RBUlQgKyAyMTQpCisjZGVmaW5lIFNQU19TTElNQlVTX0JBTV9FRTBfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAyMTUpCisjZGVmaW5lIFFEU1NfRVRCX0lSUQkJCQkoR0lDX1NQSV9TVEFSVCArIDIxNikKKyNkZWZpbmUgUURTU19DVEkyS1BTU19DUFUxX0lSUQkJCShHSUNfU1BJX1NUQVJUICsgMjE3KQorI2RlZmluZSBRRFNTX0NUSTJLUFNTX0NQVTBfSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAyMTgpCisjZGVmaW5lIFRMTU1fQVBDQ19ESVJfQ09OTl9JUlFfMTYJCShHSUNfU1BJX1NUQVJUICsgMjE5KQorI2RlZmluZSBUTE1NX0FQQ0NfRElSX0NPTk5fSVJRXzE3CQkoR0lDX1NQSV9TVEFSVCArIDIyMCkKKyNkZWZpbmUgVExNTV9BUENDX0RJUl9DT05OX0lSUV8xOAkJKEdJQ19TUElfU1RBUlQgKyAyMjEpCisjZGVmaW5lIFRMTU1fQVBDQ19ESVJfQ09OTl9JUlFfMTkJCShHSUNfU1BJX1NUQVJUICsgMjIyKQorI2RlZmluZSBUTE1NX0FQQ0NfRElSX0NPTk5fSVJRXzIwCQkoR0lDX1NQSV9TVEFSVCArIDIyMykKKyNkZWZpbmUgVExNTV9BUENDX0RJUl9DT05OX0lSUV8yMQkJKEdJQ19TUElfU1RBUlQgKyAyMjQpCisjZGVmaW5lIFBNODkyMV9TRUNfSVJRXzEwNAkJCShHSUNfU1BJX1NUQVJUICsgMjI1KQorI2RlZmluZSBQTTgwMThfU0VDX0lSUV8xMDcJCQkoR0lDX1NQSV9TVEFSVCArIDIyNikKKworLyogRm9yIG5vdywgdXNlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnRlcnJ1cHRzIHVudGlsIGEgcGVuZGluZyBHSUMgaXNzdWUKKyAqIGlzIHNvcnRlZCBvdXQgKi8KKyNkZWZpbmUgTlJfTVNNX0lSUVMgMTAyMAorI2RlZmluZSBOUl9CT0FSRF9JUlFTIDAKKyNkZWZpbmUgTlJfR1BJT19JUlFTIDAKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLTh4NTAuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLTh4NTAuaAppbmRleCBkZTNkOGZlLi4yNmFkYmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaXJxcy04eDUwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lycXMtOHg1MC5oCkBAIC0xLDMwICsxLDEzIEBACiAvKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDb2RlIEF1cm9yYSBGb3J1bSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCi0gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCi0gKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCi0gKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9NU01fSVJRU184WFhYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDg2NzlhNDUuLjNjZDc4YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgInNpcmMuaCIKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNOFg2MCkKICNpbmNsdWRlICJpcnFzLTh4NjAuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNODk2MCkKKy8qIFRPRE86IE1ha2UgdGhlc2Ugbm90IGdlbmVyaWMuICovCisjaW5jbHVkZSAiaXJxcy04OTYwLmgiCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX01TTV9BUk0xMSkKICNpbmNsdWRlICJpcnFzLTd4MDAuaCIKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggMTc2ODc1ZC4uZjJmOGQyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjUsNiArMjUsOCBAQAogI2RlZmluZSBQTEFUX1BIWVNfT0ZGU0VUCQlVTCgweDAwMjAwMDAwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NU004WDYwKQogI2RlZmluZSBQTEFUX1BIWVNfT0ZGU0VUCQlVTCgweDQwMjAwMDAwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NU004OTYwKQorI2RlZmluZSBQTEFUX1BIWVNfT0ZGU0VUCQlVTCgweDQwMjAwMDAwKQogI2Vsc2UKICNkZWZpbmUgUExBVF9QSFlTX09GRlNFVAkJVUwoMHgxMDAwMDAwMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21tYy5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21tYy5oCmluZGV4IGQ1NGI2YjAuLjU2MzFiNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbW1jLmgKQEAgLTE1LDEyICsxNSwyMyBAQAogCWludCBudW1fZnVuY3M7CiB9OwogCitzdHJ1Y3QgbXNtX21tY19ncGlvIHsKKwl1bnNpZ25lZCBubzsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworc3RydWN0IG1zbV9tbWNfZ3Bpb19kYXRhIHsKKwlzdHJ1Y3QgbXNtX21tY19ncGlvICpncGlvOworCXU4IHNpemU7Cit9OworCiBzdHJ1Y3QgbXNtX21tY19wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgb2NyX21hc2s7CQkJLyogYXZhaWxhYmxlIHZvbHRhZ2VzICovCiAJdTMyICgqdHJhbnNsYXRlX3ZkZCkoc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBpbnQpOwogCXVuc2lnbmVkIGludCAoKnN0YXR1cykoc3RydWN0IGRldmljZSAqKTsKIAlzdHJ1Y3QgZW1iZWRkZWRfc2Rpb19kYXRhICplbWJlZGRlZF9zZGlvOwogCWludCAoKnJlZ2lzdGVyX3N0YXR1c19ub3RpZnkpKHZvaWQgKCpjYWxsYmFjaykoaW50IGNhcmRfcHJlc2VudCwgdm9pZCAqZGV2X2lkKSwgdm9pZCAqZGV2X2lkKTsKKwlzdHJ1Y3QgbXNtX21tY19ncGlvX2RhdGEgKmdwaW9fZGF0YTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC03eDAwLmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTd4MDAuaAppbmRleCBjZmZmMGU3Li44Zjk5ZDk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTd4MDAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTd4MDAuaApAQCAtMSw2ICsxLDcgQEAKIC8qIGFyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAuaAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBdXRob3I6IEJyaWFuIFN3ZXRsYW5kIDxzd2V0bGFuZEBnb29nbGUuY29tPgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTQ3LDEzICs0OCw4IEBACiAjZGVmaW5lIE1TTV9WSUNfUEhZUyAgICAgICAgICAweEMwMDAwMDAwCiAjZGVmaW5lIE1TTV9WSUNfU0laRSAgICAgICAgICBTWl80SwogCi0jZGVmaW5lIE1TTV9DU1JfQkFTRSAgICAgICAgICBJT01FTSgweEUwMDAxMDAwKQotI2RlZmluZSBNU01fQ1NSX1BIWVMgICAgICAgICAgMHhDMDEwMDAwMAotI2RlZmluZSBNU01fQ1NSX1NJWkUgICAgICAgICAgU1pfNEsKLQotI2RlZmluZSBNU01fR1BUX1BIWVMgICAgICAgICAgTVNNX0NTUl9QSFlTCi0jZGVmaW5lIE1TTV9HUFRfQkFTRSAgICAgICAgICBNU01fQ1NSX0JBU0UKLSNkZWZpbmUgTVNNX0dQVF9TSVpFICAgICAgICAgIFNaXzRLCisjZGVmaW5lIE1TTTdYMDBfQ1NSX1BIWVMgICAgICAweEMwMTAwMDAwCisjZGVmaW5lIE1TTTdYMDBfQ1NSX1NJWkUgICAgICBTWl80SwogCiAjZGVmaW5lIE1TTV9ETU9WX0JBU0UgICAgICAgICBJT01FTSgweEUwMDAyMDAwKQogI2RlZmluZSBNU01fRE1PVl9QSFlTICAgICAgICAgMHhBOTcwMDAwMApAQCAtMTMwLDEwICsxMjYsNCBAQAogI2RlZmluZSBNU01fQUQ1X1NJWkUgICAgICAgICAgKFNaXzFNKjEzKQogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01TTTdYMzApCi0jZGVmaW5lIE1TTV9HQ0NfQkFTRSAgICAgICAgICBJT01FTSgweEY4MDA5MDAwKQotI2RlZmluZSBNU01fR0NDX1BIWVMgICAgICAgICAgMHhDMDE4MjAwMAotI2RlZmluZSBNU01fR0NDX1NJWkUgICAgICAgICAgU1pfNEsKLSNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtN3gzMC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC03eDMwLmgKaW5kZXggMGZkN2I2OC4uNGQ4NGJlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC03eDMwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC03eDMwLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTEgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBdXRob3I6IEJyaWFuIFN3ZXRsYW5kIDxzd2V0bGFuZEBnb29nbGUuY29tPgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTM5LDE2ICszOSw4IEBACiAjZGVmaW5lIE1TTV9WSUNfUEhZUyAgICAgICAgICAweEMwMDgwMDAwCiAjZGVmaW5lIE1TTV9WSUNfU0laRSAgICAgICAgICBTWl80SwogCi0jZGVmaW5lIE1TTV9DU1JfQkFTRSAgICAgICAgICBJT01FTSgweEUwMDAxMDAwKQotI2RlZmluZSBNU01fQ1NSX1BIWVMgICAgICAgICAgMHhDMDEwMDAwMAotI2RlZmluZSBNU01fQ1NSX1NJWkUgICAgICAgICAgU1pfNEsKLQotI2RlZmluZSBNU01fVE1SX1BIWVMgICAgICAgICAgTVNNX0NTUl9QSFlTCi0jZGVmaW5lIE1TTV9UTVJfQkFTRSAgICAgICAgICBNU01fQ1NSX0JBU0UKLSNkZWZpbmUgTVNNX1RNUl9TSVpFICAgICAgICAgIFNaXzRLCi0KLSNkZWZpbmUgTVNNX0dQVF9CQVNFIAkgICAgICAoTVNNX1RNUl9CQVNFICsgMHg0KQotI2RlZmluZSBNU01fREdUX0JBU0UgCSAgICAgIChNU01fVE1SX0JBU0UgKyAweDI0KQorI2RlZmluZSBNU003WDMwX0NTUl9QSFlTICAgICAgMHhDMDEwMDAwMAorI2RlZmluZSBNU003WDMwX0NTUl9TSVpFICAgICAgU1pfNEsKIAogI2RlZmluZSBNU01fRE1PVl9CQVNFICAgICAgICAgSU9NRU0oMHhFMDAwMjAwMCkKICNkZWZpbmUgTVNNX0RNT1ZfUEhZUyAgICAgICAgIDB4QUM0MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtODk2MC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC04OTYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5ZDk2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtODk2MC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IEJyaWFuIFN3ZXRsYW5kIDxzd2V0bGFuZEBnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFRoZSBNU00gcGVyaXBoZXJhbHMgYXJlIHNwcmVhZCBhbGwgb3ZlciBhY3Jvc3MgNzY4TUIgb2YgcGh5c2ljYWwKKyAqIHNwYWNlLCB3aGljaCBtYWtlcyBqdXN0IGhhdmluZyBhIHNpbXBsZSBJT19BRERSRVNTIG1hY3JvIHRvIHNsaWRlCisgKiB0aGVtIGludG8gdGhlIHJpZ2h0IHZpcnR1YWwgbG9jYXRpb24gcm91Z2guICBJbnN0ZWFkLCB3ZSB3aWxsCisgKiBwcm92aWRlIGEgbWFzdGVyIHBoeXMtPnZpcnQgbWFwcGluZyBmb3IgcGVyaXBoZXJhbHMgaGVyZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01TTV9JT01BUF84OTYwX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NU01fSU9NQVBfODk2MF9ICisKKy8qIFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSBvZiBwZXJpcGhlcmFscy4KKyAqIE9yZGVyZWQgYnkgdGhlIHZpcnR1YWwgYmFzZSBhZGRyZXNzZXMgdGhleSB3aWxsIGJlIG1hcHBlZCBhdC4KKyAqCisgKiBJZiB5b3UgYWRkIG9yIHJlbW92ZSBlbnRyaWVzIGhlcmUsIHlvdSdsbCB3YW50IHRvIGVkaXQgdGhlCisgKiBtc21faW9fZGVzYyBhcnJheSBpbiBhcmNoL2FybS9tYWNoLW1zbS9pby5jIHRvIHJlZmxlY3QgeW91cgorICogY2hhbmdlcy4KKyAqCisgKi8KKworCisjZGVmaW5lIE1TTTg5NjBfUUdJQ19ESVNUX1BIWVMJMHgwMjAwMDAwMAorI2RlZmluZSBNU004OTYwX1FHSUNfRElTVF9TSVpFCVNaXzRLCisKKyNkZWZpbmUgTVNNODk2MF9RR0lDX0NQVV9QSFlTCTB4MDIwMDIwMDAKKyNkZWZpbmUgTVNNODk2MF9RR0lDX0NQVV9TSVpFCVNaXzRLCisKKyNkZWZpbmUgTVNNODk2MF9UTVJfUEhZUwkweDAyMDBBMDAwCisjZGVmaW5lIE1TTTg5NjBfVE1SX1NJWkUJU1pfNEsKKworI2RlZmluZSBNU004OTYwX1RNUjBfUEhZUwkweDAyMDhBMDAwCisjZGVmaW5lIE1TTTg5NjBfVE1SMF9TSVpFCVNaXzRLCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC04eDUwLmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTh4NTAuaAppbmRleCBhY2M4MTllLi5kNDE0MzIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTh4NTAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTh4NTAuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEF1dGhvcjogQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGdvb2dsZS5jb20+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtMzksMTYgKzM5LDggQEAKICNkZWZpbmUgTVNNX1ZJQ19QSFlTICAgICAgICAgIDB4QUMwMDAwMDAKICNkZWZpbmUgTVNNX1ZJQ19TSVpFICAgICAgICAgIFNaXzRLCiAKLSNkZWZpbmUgTVNNX0NTUl9CQVNFICAgICAgICAgIElPTUVNKDB4RTAwMDEwMDApCi0jZGVmaW5lIE1TTV9DU1JfUEhZUyAgICAgICAgICAweEFDMTAwMDAwCi0jZGVmaW5lIE1TTV9DU1JfU0laRSAgICAgICAgICBTWl80SwotCi0jZGVmaW5lIE1TTV9UTVJfUEhZUyAgICAgICAgICBNU01fQ1NSX1BIWVMKLSNkZWZpbmUgTVNNX1RNUl9CQVNFICAgICAgICAgIE1TTV9DU1JfQkFTRQotI2RlZmluZSBNU01fVE1SX1NJWkUgICAgICAgICAgU1pfNEsKLQotI2RlZmluZSBNU01fR1BUX0JBU0UgICAgICAgICAgTVNNX1RNUl9CQVNFCi0jZGVmaW5lIE1TTV9ER1RfQkFTRSAgICAgICAgICAoTVNNX1RNUl9CQVNFICsgMHgxMCkKKyNkZWZpbmUgUVNEOFg1MF9DU1JfUEhZUyAgICAgIDB4QUMxMDAwMDAKKyNkZWZpbmUgUVNEOFg1MF9DU1JfU0laRSAgICAgIFNaXzRLCiAKICNkZWZpbmUgTVNNX0RNT1ZfQkFTRSAgICAgICAgIElPTUVNKDB4RTAwMDIwMDApCiAjZGVmaW5lIE1TTV9ETU9WX1BIWVMgICAgICAgICAweEE5NzAwMDAwCkBAIC0xMzIsMTYgKzEyNCwxNiBAQAogI2RlZmluZSBNU01fVUFSVDJETV9QSFlTICAgICAgMHhBMDkwMDAwMAogCiAKLSNkZWZpbmUgTVNNX1NEQzFfUEhZUyAgICAgICAgICAweEEwNDAwMDAwCisjZGVmaW5lIE1TTV9TREMxX1BIWVMgICAgICAgICAgMHhBMDMwMDAwMAogI2RlZmluZSBNU01fU0RDMV9TSVpFICAgICAgICAgIFNaXzRLCiAKLSNkZWZpbmUgTVNNX1NEQzJfUEhZUyAgICAgICAgICAweEEwNTAwMDAwCisjZGVmaW5lIE1TTV9TREMyX1BIWVMgICAgICAgICAgMHhBMDQwMDAwMAogI2RlZmluZSBNU01fU0RDMl9TSVpFICAgICAgICAgIFNaXzRLCiAKLSNkZWZpbmUgTVNNX1NEQzNfUEhZUyAgICAgICAgICAweEEwNjAwMDAwCisjZGVmaW5lIE1TTV9TREMzX1BIWVMgICAgICAgICAgMHhBMDUwMDAwMAogI2RlZmluZSBNU01fU0RDM19TSVpFICAgICAgICAgICBTWl80SwogCi0jZGVmaW5lIE1TTV9TREM0X1BIWVMgICAgICAgICAgMHhBMDcwMDAwMAorI2RlZmluZSBNU01fU0RDNF9QSFlTICAgICAgICAgIDB4QTA2MDAwMDAKICNkZWZpbmUgTVNNX1NEQzRfU0laRSAgICAgICAgICBTWl80SwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtOHg2MC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC04eDYwLmgKaW5kZXggYTU0ZTMzYi4uM2IxOWI4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC04eDYwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC04eDYwLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0zNSwxMyArMzUsMTEgQEAKICAqCiAgKi8KIAotI2RlZmluZSBNU01fUUdJQ19ESVNUX0JBU0UJSU9NRU0oMHhGMDAwMDAwMCkKLSNkZWZpbmUgTVNNX1FHSUNfRElTVF9QSFlTCTB4MDIwODAwMDAKLSNkZWZpbmUgTVNNX1FHSUNfRElTVF9TSVpFCVNaXzRLCisjZGVmaW5lIE1TTThYNjBfUUdJQ19ESVNUX1BIWVMJMHgwMjA4MDAwMAorI2RlZmluZSBNU004WDYwX1FHSUNfRElTVF9TSVpFCVNaXzRLCiAKLSNkZWZpbmUgTVNNX1FHSUNfQ1BVX0JBU0UJSU9NRU0oMHhGMDAwMTAwMCkKLSNkZWZpbmUgTVNNX1FHSUNfQ1BVX1BIWVMJMHgwMjA4MTAwMAotI2RlZmluZSBNU01fUUdJQ19DUFVfU0laRQlTWl80SworI2RlZmluZSBNU004WDYwX1FHSUNfQ1BVX1BIWVMJMHgwMjA4MTAwMAorI2RlZmluZSBNU004WDYwX1FHSUNfQ1BVX1NJWkUJU1pfNEsKIAogI2RlZmluZSBNU01fQUNDX0JBU0UJCUlPTUVNKDB4RjAwMDIwMDApCiAjZGVmaW5lIE1TTV9BQ0NfUEhZUwkJMHgwMjAwMTAwMApAQCAtNTgsNTEgKzU2LDEwIEBACiAjZGVmaW5lIE1TTV9TSEFSRURfUkFNX0JBU0UJSU9NRU0oMHhGMDEwMDAwMCkKICNkZWZpbmUgTVNNX1NIQVJFRF9SQU1fU0laRQlTWl8xTQogCi0jZGVmaW5lIE1TTV9UTVJfQkFTRQkJSU9NRU0oMHhGMDIwMDAwMCkKLSNkZWZpbmUgTVNNX1RNUl9QSFlTCQkweDAyMDAwMDAwCi0jZGVmaW5lIE1TTV9UTVJfU0laRQkJU1pfNEsKKyNkZWZpbmUgTVNNOFg2MF9UTVJfUEhZUwkweDAyMDAwMDAwCisjZGVmaW5lIE1TTThYNjBfVE1SX1NJWkUJU1pfNEsKIAotI2RlZmluZSBNU01fVE1SMF9CQVNFCQlJT01FTSgweEYwMjAxMDAwKQotI2RlZmluZSBNU01fVE1SMF9QSFlTCQkweDAyMDQwMDAwCi0jZGVmaW5lIE1TTV9UTVIwX1NJWkUJCVNaXzRLCi0KLSNkZWZpbmUgTVNNX0dQVF9CQVNFCQkoTVNNX1RNUl9CQVNFICsgMHg0KQotI2RlZmluZSBNU01fREdUX0JBU0UJCShNU01fVE1SX0JBU0UgKyAweDI0KQotCi0jZGVmaW5lIE1TTV9JT01NVV9KUEVHRF9QSFlTCTB4MDczMDAwMDAKLSNkZWZpbmUgTVNNX0lPTU1VX0pQRUdEX1NJWkUJU1pfMU0KLQotI2RlZmluZSBNU01fSU9NTVVfVlBFX1BIWVMJMHgwNzQwMDAwMAotI2RlZmluZSBNU01fSU9NTVVfVlBFX1NJWkUJU1pfMU0KLQotI2RlZmluZSBNU01fSU9NTVVfTURQMF9QSFlTCTB4MDc1MDAwMDAKLSNkZWZpbmUgTVNNX0lPTU1VX01EUDBfU0laRQlTWl8xTQotCi0jZGVmaW5lIE1TTV9JT01NVV9NRFAxX1BIWVMJMHgwNzYwMDAwMAotI2RlZmluZSBNU01fSU9NTVVfTURQMV9TSVpFCVNaXzFNCi0KLSNkZWZpbmUgTVNNX0lPTU1VX1JPVF9QSFlTCTB4MDc3MDAwMDAKLSNkZWZpbmUgTVNNX0lPTU1VX1JPVF9TSVpFCVNaXzFNCi0KLSNkZWZpbmUgTVNNX0lPTU1VX0lKUEVHX1BIWVMJMHgwNzgwMDAwMAotI2RlZmluZSBNU01fSU9NTVVfSUpQRUdfU0laRQlTWl8xTQotCi0jZGVmaW5lIE1TTV9JT01NVV9WRkVfUEhZUwkweDA3OTAwMDAwCi0jZGVmaW5lIE1TTV9JT01NVV9WRkVfU0laRQlTWl8xTQotCi0jZGVmaW5lIE1TTV9JT01NVV9WQ09ERUNfQV9QSFlTCTB4MDdBMDAwMDAKLSNkZWZpbmUgTVNNX0lPTU1VX1ZDT0RFQ19BX1NJWkUJU1pfMU0KLQotI2RlZmluZSBNU01fSU9NTVVfVkNPREVDX0JfUEhZUwkweDA3QjAwMDAwCi0jZGVmaW5lIE1TTV9JT01NVV9WQ09ERUNfQl9TSVpFCVNaXzFNCi0KLSNkZWZpbmUgTVNNX0lPTU1VX0dGWDNEX1BIWVMJMHgwN0MwMDAwMAotI2RlZmluZSBNU01fSU9NTVVfR0ZYM0RfU0laRQlTWl8xTQotCi0jZGVmaW5lIE1TTV9JT01NVV9HRlgyRDBfUEhZUwkweDA3RDAwMDAwCi0jZGVmaW5lIE1TTV9JT01NVV9HRlgyRDBfU0laRQlTWl8xTQotCi0jZGVmaW5lIE1TTV9JT01NVV9HRlgyRDFfUEhZUwkweDA3RTAwMDAwCi0jZGVmaW5lIE1TTV9JT01NVV9HRlgyRDFfU0laRQlTWl8xTQorI2RlZmluZSBNU004WDYwX1RNUjBfUEhZUwkweDAyMDQwMDAwCisjZGVmaW5lIE1TTThYNjBfVE1SMF9TSVpFCVNaXzRLCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC5oCmluZGV4IDhlMjRkZDguLmM5OGM3NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC01Myw2ICs1MywxMyBAQAogI2luY2x1ZGUgIm1zbV9pb21hcC03eDAwLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgIm1zbV9pb21hcC04OTYwLmgiCiAKKy8qIFZpcnR1YWwgYWRkcmVzc3NlcyBzaGFyZWQgYWNyb3NzIGFsbCBNU00gdGFyZ2V0cy4gKi8KKyNkZWZpbmUgTVNNX0NTUl9CQVNFCQlJT01FTSgweEUwMDAxMDAwKQorI2RlZmluZSBNU01fUUdJQ19ESVNUX0JBU0UJSU9NRU0oMHhGMDAwMDAwMCkKKyNkZWZpbmUgTVNNX1FHSUNfQ1BVX0JBU0UJSU9NRU0oMHhGMDAwMTAwMCkKKyNkZWZpbmUgTVNNX1RNUl9CQVNFCQlJT01FTSgweEYwMjAwMDAwKQorI2RlZmluZSBNU01fVE1SMF9CQVNFCQlJT01FTSgweEYwMjAxMDAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9zaXJjLmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvc2lyYy5oCmluZGV4IDcyODEzMzcuLmVmNTU4NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9zaXJjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3NpcmMuaApAQCAtMSwzMCArMSwxMyBAQAogLyogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQ29kZSBBdXJvcmEgRm9ydW0sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVAotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgotICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCi0gKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQotICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgotICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVNNX1NJUkNfSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3NtcC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3NtcC5oCmluZGV4IGE5NWY3YjkuLjNjMDEwMDBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvc21wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3NtcC5oCkBAIC0xLDI5ICsxLDEzIEBACiAvKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIENvZGUgQXVyb3JhIG5vcgotICogICAgICAgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCi0gKiAgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLSAqICAgICAgIHBlcm1pc3Npb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotICogTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ci0gKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0gKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCi0gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9NU01fU01QX0gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9pby5jCmluZGV4IDEyNjAwMDcuLmNlYzZlZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwpAQCAtMyw3ICszLDcgQEAKICAqIE1TTTdLLCBRU0QgaW8gc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEF1dGhvcjogQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGdvb2dsZS5jb20+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTkgKzI4LDIwIEBACiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKLSNkZWZpbmUgTVNNX0RFVklDRShuYW1lKSB7IFwKKyNkZWZpbmUgTVNNX0NISVBfREVWSUNFKG5hbWUsIGNoaXApIHsJCQkgICAgICBcCiAJCS52aXJ0dWFsID0gKHVuc2lnbmVkIGxvbmcpIE1TTV8jI25hbWUjI19CQVNFLCBcCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1TTV8jI25hbWUjI19QSFlTKSwgXAotCQkubGVuZ3RoID0gTVNNXyMjbmFtZSMjX1NJWkUsIFwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oY2hpcCMjXyMjbmFtZSMjX1BIWVMpLCBcCisJCS5sZW5ndGggPSBjaGlwIyNfIyNuYW1lIyNfU0laRSwgXAogCQkudHlwZSA9IE1UX0RFVklDRV9OT05TSEFSRUQsIFwKIAkgfQogCisjZGVmaW5lIE1TTV9ERVZJQ0UobmFtZSkgTVNNX0NISVBfREVWSUNFKG5hbWUsIE1TTSkKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gwMEEpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gyNykgXAogCXx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gyNSkKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXNtX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCU1TTV9ERVZJQ0UoVklDKSwKLQlNU01fREVWSUNFKENTUiksCi0JTVNNX0RFVklDRShHUFQpLAorCU1TTV9DSElQX0RFVklDRShDU1IsIE1TTTdYMDApLAogCU1TTV9ERVZJQ0UoRE1PViksCiAJTVNNX0RFVklDRShHUElPMSksCiAJTVNNX0RFVklDRShHUElPMiksCkBAIC03Myw4ICs3NCw3IEBACiAjaWZkZWYgQ09ORklHX0FSQ0hfUVNEOFg1MAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBxc2Q4eDUwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCU1TTV9ERVZJQ0UoVklDKSwKLQlNU01fREVWSUNFKENTUiksCi0JTVNNX0RFVklDRShUTVIpLAorCU1TTV9DSElQX0RFVklDRShDU1IsIFFTRDhYNTApLAogCU1TTV9ERVZJQ0UoRE1PViksCiAJTVNNX0RFVklDRShHUElPMSksCiAJTVNNX0RFVklDRShHUElPMiksCkBAIC0xMDIsMTAgKzEwMiwxMCBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVNNOFg2MAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBtc204eDYwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCU1TTV9ERVZJQ0UoUUdJQ19ESVNUKSwKLQlNU01fREVWSUNFKFFHSUNfQ1BVKSwKLQlNU01fREVWSUNFKFRNUiksCi0JTVNNX0RFVklDRShUTVIwKSwKKwlNU01fQ0hJUF9ERVZJQ0UoUUdJQ19ESVNULCBNU004WDYwKSwKKwlNU01fQ0hJUF9ERVZJQ0UoUUdJQ19DUFUsIE1TTThYNjApLAorCU1TTV9DSElQX0RFVklDRShUTVIsIE1TTThYNjApLAorCU1TTV9DSElQX0RFVklDRShUTVIwLCBNU004WDYwKSwKIAlNU01fREVWSUNFKEFDQyksCiAJTVNNX0RFVklDRShHQ0MpLAogfTsKQEAgLTExNiwxMSArMTE2LDI0IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfTVNNOFg2MCAqLwogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVNNODk2MAorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBtc204OTYwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCU1TTV9DSElQX0RFVklDRShRR0lDX0RJU1QsIE1TTTg5NjApLAorCU1TTV9DSElQX0RFVklDRShRR0lDX0NQVSwgTVNNODk2MCksCisJTVNNX0NISVBfREVWSUNFKFRNUiwgTVNNODk2MCksCisJTVNNX0NISVBfREVWSUNFKFRNUjAsIE1TTTg5NjApLAorfTsKKwordm9pZCBfX2luaXQgbXNtX21hcF9tc204OTYwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KG1zbTg5NjBfaW9fZGVzYywgQVJSQVlfU0laRShtc204OTYwX2lvX2Rlc2MpKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9NU004OTYwICovCisKICNpZmRlZiBDT05GSUdfQVJDSF9NU003WDMwCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG1zbTd4MzBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJTVNNX0RFVklDRShWSUMpLAotCU1TTV9ERVZJQ0UoQ1NSKSwKLQlNU01fREVWSUNFKFRNUiksCisJTVNNX0NISVBfREVWSUNFKENTUiwgTVNNN1gzMCksCiAJTVNNX0RFVklDRShETU9WKSwKIAlNU01fREVWSUNFKEdQSU8xKSwKIAlNU01fREVWSUNFKEdQSU8yKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2lvbW11LmMgYi9hcmNoL2FybS9tYWNoLW1zbS9pb21tdS5jCmluZGV4IGUyZDU4ZTQuLjFhNTg0ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW9tbXUuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpAQCAtNTAsNiArNTEsMzAgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfYXR0YWNoZWQ7CiB9OwogCitzdGF0aWMgaW50IF9fZW5hYmxlX2Nsb2NrcyhzdHJ1Y3QgbXNtX2lvbW11X2RydmRhdGEgKmRydmRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IGNsa19lbmFibGUoZHJ2ZGF0YS0+cGNsayk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJaWYgKGRydmRhdGEtPmNsaykgeworCQlyZXQgPSBjbGtfZW5hYmxlKGRydmRhdGEtPmNsayk7CisJCWlmIChyZXQpCisJCQljbGtfZGlzYWJsZShkcnZkYXRhLT5wY2xrKTsKKwl9CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGlzYWJsZV9jbG9ja3Moc3RydWN0IG1zbV9pb21tdV9kcnZkYXRhICpkcnZkYXRhKQoreworCWlmIChkcnZkYXRhLT5jbGspCisJCWNsa19kaXNhYmxlKGRydmRhdGEtPmNsayk7CisJY2xrX2Rpc2FibGUoZHJ2ZGF0YS0+cGNsayk7Cit9CisKIHN0YXRpYyBpbnQgX19mbHVzaF9pb3RsYihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCiB7CiAJc3RydWN0IG1zbV9wcml2ICpwcml2ID0gZG9tYWluLT5wcml2OwpAQCAtNzcsOSArMTAyLDE2IEBACiAJCQlCVUcoKTsKIAogCQlpb21tdV9kcnZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGN0eF9kcnZkYXRhLT5wZGV2LT5kZXYucGFyZW50KTsKLQkJU0VUX0NUWF9UTEJJQUxMKGlvbW11X2RydmRhdGEtPmJhc2UsIGN0eF9kcnZkYXRhLT5udW0sIDApOwotCX0KKwkJQlVHX09OKCFpb21tdV9kcnZkYXRhKTsKIAorCQlyZXQgPSBfX2VuYWJsZV9jbG9ja3MoaW9tbXVfZHJ2ZGF0YSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWw7CisKKwkJU0VUX0NUWF9UTEJJQUxMKGlvbW11X2RydmRhdGEtPmJhc2UsIGN0eF9kcnZkYXRhLT5udW0sIDApOworCQlfX2Rpc2FibGVfY2xvY2tzKGlvbW11X2RydmRhdGEpOworCX0KK2ZhaWw6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA1LDcgKzEzNyw2IEBACiAJU0VUX1RMQkxLQ1IoYmFzZSwgY3R4LCAwKTsKIAlTRVRfUFJSUihiYXNlLCBjdHgsIDApOwogCVNFVF9OTVJSKGJhc2UsIGN0eCwgMCk7Ci0JU0VUX0NPTlRFWFRJRFIoYmFzZSwgY3R4LCAwKTsKIH0KIAogc3RhdGljIHZvaWQgX19wcm9ncmFtX2NvbnRleHQodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgY3R4LCBwaHlzX2FkZHJfdCBwZ3RhYmxlKQpAQCAtMjY1LDkgKzI5NiwxNCBAQAogCQkJZ290byBmYWlsOwogCQl9CiAKKwlyZXQgPSBfX2VuYWJsZV9jbG9ja3MoaW9tbXVfZHJ2ZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCiAJX19wcm9ncmFtX2NvbnRleHQoaW9tbXVfZHJ2ZGF0YS0+YmFzZSwgY3R4X2Rldi0+bnVtLAogCQkJICBfX3BhKHByaXYtPnBndGFibGUpKTsKIAorCV9fZGlzYWJsZV9jbG9ja3MoaW9tbXVfZHJ2ZGF0YSk7CiAJbGlzdF9hZGQoJihjdHhfZHJ2ZGF0YS0+YXR0YWNoZWRfZWxtKSwgJnByaXYtPmxpc3RfYXR0YWNoZWQpOwogCXJldCA9IF9fZmx1c2hfaW90bGIoZG9tYWluKTsKIApAQCAtMzAzLDcgKzMzOSwxMiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIAorCXJldCA9IF9fZW5hYmxlX2Nsb2Nrcyhpb21tdV9kcnZkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKIAlfX3Jlc2V0X2NvbnRleHQoaW9tbXVfZHJ2ZGF0YS0+YmFzZSwgY3R4X2Rldi0+bnVtKTsKKwlfX2Rpc2FibGVfY2xvY2tzKGlvbW11X2RydmRhdGEpOwogCWxpc3RfZGVsX2luaXQoJmN0eF9kcnZkYXRhLT5hdHRhY2hlZF9lbG0pOwogCiBmYWlsOgpAQCAtMzc2LDExICs0MTcsMTEgQEAKIAkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAJCQkqKGZsX3B0ZStpKSA9IChwYSAmIDB4RkYwMDAwMDApIHwgRkxfU1VQRVJTRUNUSU9OIHwKIAkJCQkgIEZMX0FQX1JFQUQgfCBGTF9BUF9XUklURSB8IEZMX1RZUEVfU0VDVCB8Ci0JCQkJICBGTF9TSEFSRUQgfCBwZ3Byb3Q7CisJCQkJICBGTF9TSEFSRUQgfCBGTF9ORyB8IHBncHJvdDsKIAl9CiAKIAlpZiAobGVuID09IFNaXzFNKQotCQkqZmxfcHRlID0gKHBhICYgMHhGRkYwMDAwMCkgfCBGTF9BUF9SRUFEIHwgRkxfQVBfV1JJVEUgfAorCQkqZmxfcHRlID0gKHBhICYgMHhGRkYwMDAwMCkgfCBGTF9BUF9SRUFEIHwgRkxfQVBfV1JJVEUgfCBGTF9ORyB8CiAJCQkJCSAgICBGTF9UWVBFX1NFQ1QgfCBGTF9TSEFSRUQgfCBwZ3Byb3Q7CiAKIAkvKiBOZWVkIGEgMm5kIGxldmVsIHRhYmxlICovCkBAIC00MDUsNyArNDQ2LDcgQEAKIAogCiAJaWYgKGxlbiA9PSBTWl80SykKLQkJKnNsX3B0ZSA9IChwYSAmIFNMX0JBU0VfTUFTS19TTUFMTCkgfCBTTF9BUDAgfCBTTF9BUDEgfAorCQkqc2xfcHRlID0gKHBhICYgU0xfQkFTRV9NQVNLX1NNQUxMKSB8IFNMX0FQMCB8IFNMX0FQMSB8IFNMX05HIHwKIAkJCQkJICBTTF9TSEFSRUQgfCBTTF9UWVBFX1NNQUxMIHwgcGdwcm90OwogCiAJaWYgKGxlbiA9PSBTWl82NEspIHsKQEAgLTQxMyw3ICs0NTQsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQkJKihzbF9wdGUraSkgPSAocGEgJiBTTF9CQVNFX01BU0tfTEFSR0UpIHwgU0xfQVAwIHwKLQkJCQlTTF9BUDEgfCBTTF9TSEFSRUQgfCBTTF9UWVBFX0xBUkdFIHwgcGdwcm90OworCQkJICAgIFNMX05HIHwgU0xfQVAxIHwgU0xfU0hBUkVEIHwgU0xfVFlQRV9MQVJHRSB8IHBncHJvdDsKIAl9CiAKIAlyZXQgPSBfX2ZsdXNoX2lvdGxiKGRvbWFpbik7CkBAIC01MzIsOSArNTczLDEzIEBACiAJYmFzZSA9IGlvbW11X2RydmRhdGEtPmJhc2U7CiAJY3R4ID0gY3R4X2RydmRhdGEtPm51bTsKIAorCXJldCA9IF9fZW5hYmxlX2Nsb2Nrcyhpb21tdV9kcnZkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKIAkvKiBJbnZhbGlkYXRlIGNvbnRleHQgVExCICovCiAJU0VUX0NUWF9UTEJJQUxMKGJhc2UsIGN0eCwgMCk7Ci0JU0VUX1YyUFBSX1ZBKGJhc2UsIGN0eCwgdmEgPj4gVjJQeHhfVkFfU0hJRlQpOworCVNFVF9WMlBQUihiYXNlLCBjdHgsIHZhICYgVjJQeHhfVkEpOwogCiAJcGFyID0gR0VUX1BBUihiYXNlLCBjdHgpOwogCkBAIC01NDcsNiArNTkyLDcgQEAKIAlpZiAoR0VUX0ZBVUxUKGJhc2UsIGN0eCkpCiAJCXJldCA9IDA7CiAKKwlfX2Rpc2FibGVfY2xvY2tzKGlvbW11X2RydmRhdGEpOwogZmFpbDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21faW9tbXVfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CkBAIC01OTAsNyArNjM2LDcgQEAKIAlzdHJ1Y3QgbXNtX2lvbW11X2RydmRhdGEgKmRydmRhdGEgPSBkZXZfaWQ7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXVuc2lnbmVkIGludCBmc3I7Ci0JaW50IG5jYiwgaTsKKwlpbnQgaSwgcmV0OwogCiAJc3Bpbl9sb2NrKCZtc21faW9tbXVfbG9jayk7CiAKQEAgLTYwNCw4ICs2NTAsMTEgQEAKIAlwcl9lcnIoIlVuZXhwZWN0ZWQgSU9NTVUgcGFnZSBmYXVsdCFcbiIpOwogCXByX2VycigiYmFzZSA9ICUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIGJhc2UpOwogCi0JbmNiID0gR0VUX05DQihiYXNlKSsxOwotCWZvciAoaSA9IDA7IGkgPCBuY2I7IGkrKykgeworCXJldCA9IF9fZW5hYmxlX2Nsb2NrcyhkcnZkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHJ2ZGF0YS0+bmNiOyBpKyspIHsKIAkJZnNyID0gR0VUX0ZTUihiYXNlLCBpKTsKIAkJaWYgKGZzcikgewogCQkJcHJfZXJyKCJGYXVsdCBvY2N1cnJlZCBpbiBjb250ZXh0ICVkLlxuIiwgaSk7CkBAIC02MTQsNiArNjYzLDcgQEAKIAkJCVNFVF9GU1IoYmFzZSwgaSwgMHg0MDAwMDAwRik7CiAJCX0KIAl9CisJX19kaXNhYmxlX2Nsb2NrcyhkcnZkYXRhKTsKIGZhaWw6CiAJc3Bpbl91bmxvY2soJm1zbV9pb21tdV9sb2NrKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2lvbW11X2Rldi5jIGIvYXJjaC9hcm0vbWFjaC1tc20vaW9tbXVfZGV2LmMKaW5kZXggYjgzYzczYi4uOGU4ZmIwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW9tbXVfZGV2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW9tbXVfZGV2LmMKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaW9tbXVfaHctOHh4eC5oPgogI2luY2x1ZGUgPG1hY2gvaW9tbXUuaD4KKyNpbmNsdWRlIDxtYWNoL2Nsay5oPgogCiBzdHJ1Y3QgaW9tbXVfY3R4X2l0ZXJfZGF0YSB7CiAJLyogaW5wdXQgKi8KQEAgLTg0LDkgKzg1LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0wobXNtX2lvbW11X2dldF9jdHgpOwogCi1zdGF0aWMgdm9pZCBtc21faW9tbXVfcmVzZXQodm9pZCBfX2lvbWVtICpiYXNlKQorc3RhdGljIHZvaWQgbXNtX2lvbW11X3Jlc2V0KHZvaWQgX19pb21lbSAqYmFzZSwgaW50IG5jYikKIHsKLQlpbnQgY3R4LCBuY2I7CisJaW50IGN0eDsKIAogCVNFVF9SUFVFKGJhc2UsIDApOwogCVNFVF9SUFVFSUUoYmFzZSwgMCk7CkBAIC05OSw3ICsxMDAsNiBAQAogCVNFVF9HTE9CQUxfVExCSUFMTChiYXNlLCAwKTsKIAlTRVRfUlBVX0FDUihiYXNlLCAwKTsKIAlTRVRfVExCTEtDUldFKGJhc2UsIDEpOwotCW5jYiA9IEdFVF9OQ0IoYmFzZSkrMTsKIAogCWZvciAoY3R4ID0gMDsgY3R4IDwgbmNiOyBjdHgrKykgewogCQlTRVRfQlBSQ09TSChiYXNlLCBjdHgsIDApOwpAQCAtMTMwLDExNyArMTMwLDE0MCBAQAogewogCXN0cnVjdCByZXNvdXJjZSAqciwgKnIyOwogCXN0cnVjdCBjbGsgKmlvbW11X2NsazsKKwlzdHJ1Y3QgY2xrICppb21tdV9wY2xrOwogCXN0cnVjdCBtc21faW9tbXVfZHJ2ZGF0YSAqZHJ2ZGF0YTsKIAlzdHJ1Y3QgbXNtX2lvbW11X2RldiAqaW9tbXVfZGV2ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJdm9pZCBfX2lvbWVtICpyZWdzX2Jhc2U7CiAJcmVzb3VyY2Vfc2l6ZV90CWxlbjsKLQlpbnQgcmV0ID0gMCwgbmNiLCBubTJ2LCBpcnE7CisJaW50IHJldCwgaXJxLCBwYXI7CiAKLQlpZiAocGRldi0+aWQgIT0gLTEpIHsKLQkJZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkcnZkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFkcnZkYXRhKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBmYWlsOwotCQl9Ci0KLQkJaWYgKCFpb21tdV9kZXYpIHsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQotCQlpZiAoaW9tbXVfZGV2LT5jbGtfcmF0ZSAhPSAwKSB7Ci0JCQlpb21tdV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpb21tdV9jbGsiKTsKLQotCQkJaWYgKElTX0VSUihpb21tdV9jbGspKSB7Ci0JCQkJcmV0ID0gLUVOT0RFVjsKLQkJCQlnb3RvIGZhaWw7Ci0JCQl9Ci0KLQkJCWlmIChpb21tdV9kZXYtPmNsa19yYXRlID4gMCkgewotCQkJCXJldCA9IGNsa19zZXRfcmF0ZShpb21tdV9jbGssCi0JCQkJCQkJaW9tbXVfZGV2LT5jbGtfcmF0ZSk7Ci0JCQkJaWYgKHJldCkgewotCQkJCQljbGtfcHV0KGlvbW11X2Nsayk7Ci0JCQkJCWdvdG8gZmFpbDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXJldCA9IGNsa19lbmFibGUoaW9tbXVfY2xrKTsKLQkJCWlmIChyZXQpIHsKLQkJCQljbGtfcHV0KGlvbW11X2Nsayk7Ci0JCQkJZ290byBmYWlsOwotCQkJfQotCQkJY2xrX3B1dChpb21tdV9jbGspOwotCQl9Ci0KLQkJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCi0JCQkJCQkgInBoeXNiYXNlIik7Ci0JCWlmICghcikgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCi0JCWxlbiA9IHItPmVuZCAtIHItPnN0YXJ0ICsgMTsKLQotCQlyMiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgbGVuLCByLT5uYW1lKTsKLQkJaWYgKCFyMikgewotCQkJcHJfZXJyKCJDb3VsZCBub3QgcmVxdWVzdCBtZW1vcnkgcmVnaW9uOiAiCi0JCQkic3RhcnQ9JXAsIGxlbj0lZFxuIiwgKHZvaWQgKikgci0+c3RhcnQsIGxlbik7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQotCQlyZWdzX2Jhc2UgPSBpb3JlbWFwKHIyLT5zdGFydCwgbGVuKTsKLQotCQlpZiAoIXJlZ3NfYmFzZSkgewotCQkJcHJfZXJyKCJDb3VsZCBub3QgaW9yZW1hcDogc3RhcnQ9JXAsIGxlbj0lZFxuIiwKLQkJCQkgKHZvaWQgKikgcjItPnN0YXJ0LCBsZW4pOwotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBmYWlsX21lbTsKLQkJfQotCi0JCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJzZWN1cmVfaXJxIik7Ci0JCWlmIChpcnEgPCAwKSB7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJZ290byBmYWlsX2lvOwotCQl9Ci0KLQkJbWIoKTsKLQotCQlpZiAoR0VUX0lEUihyZWdzX2Jhc2UpID09IDApIHsKLQkJCXByX2VycigiSW52YWxpZCBJRFIgdmFsdWUgZGV0ZWN0ZWRcbiIpOwotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWdvdG8gZmFpbF9pbzsKLQkJfQotCi0JCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbXNtX2lvbW11X2ZhdWx0X2hhbmRsZXIsIDAsCi0JCQkJIm1zbV9pb21tdV9zZWN1cmVfaXJwdF9oYW5kbGVyIiwgZHJ2ZGF0YSk7Ci0JCWlmIChyZXQpIHsKLQkJCXByX2VycigiUmVxdWVzdCBJUlEgJWQgZmFpbGVkIHdpdGggcmV0PSVkXG4iLCBpcnEsIHJldCk7Ci0JCQlnb3RvIGZhaWxfaW87Ci0JCX0KLQotCQltc21faW9tbXVfcmVzZXQocmVnc19iYXNlKTsKLQkJZHJ2ZGF0YS0+YmFzZSA9IHJlZ3NfYmFzZTsKLQkJZHJ2ZGF0YS0+aXJxID0gaXJxOwotCi0JCW5tMnYgPSBHRVRfTk0yVkNCTVQoKHVuc2lnbmVkIGxvbmcpIHJlZ3NfYmFzZSk7Ci0JCW5jYiA9IEdFVF9OQ0IoKHVuc2lnbmVkIGxvbmcpIHJlZ3NfYmFzZSk7Ci0KLQkJcHJfaW5mbygiZGV2aWNlICVzIG1hcHBlZCBhdCAlcCwgaXJxICVkIHdpdGggJWQgY3R4IGJhbmtzXG4iLAotCQkJaW9tbXVfZGV2LT5uYW1lLCByZWdzX2Jhc2UsIGlycSwgbmNiKzEpOwotCi0JCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydmRhdGEpOwotCX0gZWxzZQorCWlmIChwZGV2LT5pZCA9PSAtMSkgewogCQltc21faW9tbXVfcm9vdF9kZXYgPSBwZGV2OworCQlyZXR1cm4gMDsKKwl9CisKKwlkcnZkYXRhID0ga3phbGxvYyhzaXplb2YoKmRydmRhdGEpLCBHRlBfS0VSTkVMKTsKKworCWlmICghZHJ2ZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKCFpb21tdV9kZXYpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWlvbW11X3BjbGsgPSBjbGtfZ2V0KE5VTEwsICJzbW11X3BjbGsiKTsKKwlpZiAoSVNfRVJSKGlvbW11X3BjbGspKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXQgPSBjbGtfZW5hYmxlKGlvbW11X3BjbGspOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9lbmFibGU7CisKKwlpb21tdV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpb21tdV9jbGsiKTsKKworCWlmICghSVNfRVJSKGlvbW11X2NsaykpCXsKKwkJaWYgKGNsa19nZXRfcmF0ZShpb21tdV9jbGspID09IDApCisJCQljbGtfc2V0X21pbl9yYXRlKGlvbW11X2NsaywgMSk7CisKKwkJcmV0ID0gY2xrX2VuYWJsZShpb21tdV9jbGspOworCQlpZiAocmV0KSB7CisJCQljbGtfcHV0KGlvbW11X2Nsayk7CisJCQlnb3RvIGZhaWxfcGNsazsKKwkJfQorCX0gZWxzZQorCQlpb21tdV9jbGsgPSBOVUxMOworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwaHlzYmFzZSIpOworCisJaWYgKCFyKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9jbGs7CisJfQorCisJbGVuID0gcmVzb3VyY2Vfc2l6ZShyKTsKKworCXIyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCBsZW4sIHItPm5hbWUpOworCWlmICghcjIpIHsKKwkJcHJfZXJyKCJDb3VsZCBub3QgcmVxdWVzdCBtZW1vcnkgcmVnaW9uOiBzdGFydD0lcCwgbGVuPSVkXG4iLAorCQkJCQkJCSh2b2lkICopIHItPnN0YXJ0LCBsZW4pOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZmFpbF9jbGs7CisJfQorCisJcmVnc19iYXNlID0gaW9yZW1hcChyMi0+c3RhcnQsIGxlbik7CisKKwlpZiAoIXJlZ3NfYmFzZSkgeworCQlwcl9lcnIoIkNvdWxkIG5vdCBpb3JlbWFwOiBzdGFydD0lcCwgbGVuPSVkXG4iLAorCQkJICh2b2lkICopIHIyLT5zdGFydCwgbGVuKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZhaWxfbWVtOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJzZWN1cmVfaXJxIik7CisJaWYgKGlycSA8IDApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX2lvOworCX0KKworCW1zbV9pb21tdV9yZXNldChyZWdzX2Jhc2UsIGlvbW11X2Rldi0+bmNiKTsKKworCVNFVF9NKHJlZ3NfYmFzZSwgMCwgMSk7CisJU0VUX1BBUihyZWdzX2Jhc2UsIDAsIDApOworCVNFVF9WMlBDRkcocmVnc19iYXNlLCAwLCAxKTsKKwlTRVRfVjJQUFIocmVnc19iYXNlLCAwLCAwKTsKKwlwYXIgPSBHRVRfUEFSKHJlZ3NfYmFzZSwgMCk7CisJU0VUX1YyUENGRyhyZWdzX2Jhc2UsIDAsIDApOworCVNFVF9NKHJlZ3NfYmFzZSwgMCwgMCk7CisKKwlpZiAoIXBhcikgeworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIFBBUiB2YWx1ZSBkZXRlY3RlZFxuIiwgaW9tbXVfZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX2lvOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbXNtX2lvbW11X2ZhdWx0X2hhbmRsZXIsIDAsCisJCQkibXNtX2lvbW11X3NlY3VyZV9pcnB0X2hhbmRsZXIiLCBkcnZkYXRhKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiUmVxdWVzdCBJUlEgJWQgZmFpbGVkIHdpdGggcmV0PSVkXG4iLCBpcnEsIHJldCk7CisJCWdvdG8gZmFpbF9pbzsKKwl9CisKKworCWRydmRhdGEtPnBjbGsgPSBpb21tdV9wY2xrOworCWRydmRhdGEtPmNsayA9IGlvbW11X2NsazsKKwlkcnZkYXRhLT5iYXNlID0gcmVnc19iYXNlOworCWRydmRhdGEtPmlycSA9IGlycTsKKwlkcnZkYXRhLT5uY2IgPSBpb21tdV9kZXYtPm5jYjsKKworCXByX2luZm8oImRldmljZSAlcyBtYXBwZWQgYXQgJXAsIGlycSAlZCB3aXRoICVkIGN0eCBiYW5rc1xuIiwKKwkJaW9tbXVfZGV2LT5uYW1lLCByZWdzX2Jhc2UsIGlycSwgaW9tbXVfZGV2LT5uY2IpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2ZGF0YSk7CisKKwlpZiAoaW9tbXVfY2xrKQorCQljbGtfZGlzYWJsZShpb21tdV9jbGspOworCisJY2xrX2Rpc2FibGUoaW9tbXVfcGNsayk7CiAKIAlyZXR1cm4gMDsKLQogZmFpbF9pbzoKIAlpb3VubWFwKHJlZ3NfYmFzZSk7CiBmYWlsX21lbToKIAlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIGxlbik7CitmYWlsX2NsazoKKwlpZiAoaW9tbXVfY2xrKSB7CisJCWNsa19kaXNhYmxlKGlvbW11X2Nsayk7CisJCWNsa19wdXQoaW9tbXVfY2xrKTsKKwl9CitmYWlsX3BjbGs6CisJY2xrX2Rpc2FibGUoaW9tbXVfcGNsayk7CitmYWlsX2VuYWJsZToKKwljbGtfcHV0KGlvbW11X3BjbGspOwogZmFpbDoKIAlrZnJlZShkcnZkYXRhKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjUyLDcgKzI3NSwxMCBAQAogCiAJZHJ2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJaWYgKGRydikgewotCQltZW1zZXQoZHJ2LCAwLCBzaXplb2Yoc3RydWN0IG1zbV9pb21tdV9kcnZkYXRhKSk7CisJCWlmIChkcnYtPmNsaykKKwkJCWNsa19wdXQoZHJ2LT5jbGspOworCQljbGtfcHV0KGRydi0+cGNsayk7CisJCW1lbXNldChkcnYsIDAsIHNpemVvZigqZHJ2KSk7CiAJCWtmcmVlKGRydik7CiAJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KQEAgLTI2NCw3ICsyOTAsNyBAQAogCXN0cnVjdCBtc21faW9tbXVfY3R4X2RldiAqYyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBtc21faW9tbXVfZHJ2ZGF0YSAqZHJ2ZGF0YTsKIAlzdHJ1Y3QgbXNtX2lvbW11X2N0eF9kcnZkYXRhICpjdHhfZHJ2ZGF0YSA9IE5VTEw7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IGksIHJldDsKIAlpZiAoIWMgfHwgIXBkZXYtPmRldi5wYXJlbnQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBmYWlsOwpAQCAtMjg4LDYgKzMxNCwxOCBAQAogCUlOSVRfTElTVF9IRUFEKCZjdHhfZHJ2ZGF0YS0+YXR0YWNoZWRfZWxtKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjdHhfZHJ2ZGF0YSk7CiAKKwlyZXQgPSBjbGtfZW5hYmxlKGRydmRhdGEtPnBjbGspOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCWlmIChkcnZkYXRhLT5jbGspIHsKKwkJcmV0ID0gY2xrX2VuYWJsZShkcnZkYXRhLT5jbGspOworCQlpZiAocmV0KSB7CisJCQljbGtfZGlzYWJsZShkcnZkYXRhLT5wY2xrKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwogCS8qIFByb2dyYW0gdGhlIE0yViB0YWJsZXMgZm9yIHRoaXMgY29udGV4dCAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX01JRFM7IGkrKykgewogCQlpbnQgbWlkID0gYy0+bWlkc1tpXTsKQEAgLTI5NywyMSArMzM1LDI3IEBACiAJCVNFVF9NMlZDQlJfTihkcnZkYXRhLT5iYXNlLCBtaWQsIDApOwogCQlTRVRfQ0JBQ1JfTihkcnZkYXRhLT5iYXNlLCBjLT5udW0sIDApOwogCi0JCS8qIFNldCBWTUlEID0gTUlEICovCi0JCVNFVF9WTUlEKGRydmRhdGEtPmJhc2UsIG1pZCwgbWlkKTsKKwkJLyogU2V0IFZNSUQgPSAwICovCisJCVNFVF9WTUlEKGRydmRhdGEtPmJhc2UsIG1pZCwgMCk7CiAKIAkJLyogU2V0IHRoZSBjb250ZXh0IG51bWJlciBmb3IgdGhhdCBNSUQgdG8gdGhpcyBjb250ZXh0ICovCiAJCVNFVF9DQk5EWChkcnZkYXRhLT5iYXNlLCBtaWQsIGMtPm51bSk7CiAKLQkJLyogU2V0IE1JRCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0IGJhbmsgKi8KLQkJU0VUX0NCVk1JRChkcnZkYXRhLT5iYXNlLCBjLT5udW0sIG1pZCk7CisJCS8qIFNldCBNSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCBiYW5rIHRvIDAqLworCQlTRVRfQ0JWTUlEKGRydmRhdGEtPmJhc2UsIGMtPm51bSwgMCk7CisKKwkJLyogU2V0IHRoZSBBU0lEIGZvciBUTEIgdGFnZ2luZyBmb3IgdGhpcyBjb250ZXh0ICovCisJCVNFVF9DT05URVhUSURSX0FTSUQoZHJ2ZGF0YS0+YmFzZSwgYy0+bnVtLCBjLT5udW0pOwogCiAJCS8qIFNldCBzZWN1cml0eSBiaXQgb3ZlcnJpZGUgdG8gYmUgTm9uLXNlY3VyZSAqLwogCQlTRVRfTlNDRkcoZHJ2ZGF0YS0+YmFzZSwgbWlkLCAzKTsKIAl9CiAKLQlwcl9pbmZvKCJjb250ZXh0IGRldmljZSAlcyB3aXRoIGJhbmsgaW5kZXggJWRcbiIsIGMtPm5hbWUsIGMtPm51bSk7CisJaWYgKGRydmRhdGEtPmNsaykKKwkJY2xrX2Rpc2FibGUoZHJ2ZGF0YS0+Y2xrKTsKKwljbGtfZGlzYWJsZShkcnZkYXRhLT5wY2xrKTsKIAorCWRldl9pbmZvKCZwZGV2LT5kZXYsICJjb250ZXh0ICVzIHVzaW5nIGJhbmsgJWRcbiIsIGMtPm5hbWUsIGMtPm51bSk7CiAJcmV0dXJuIDA7CiBmYWlsOgogCWtmcmVlKGN0eF9kcnZkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL3NjbS1ib290LmggYi9hcmNoL2FybS9tYWNoLW1zbS9zY20tYm9vdC5oCmluZGV4IDY4ZjliNjEuLjdiZTMyZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL3NjbS1ib290LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vc2NtLWJvb3QuaApAQCAtMSwyOSArMSwxMyBAQAogLyogQ29weXJpZ2h0IChjKSAyMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIENvZGUgQXVyb3JhIEZvcnVtLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKLSAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAotICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKLSAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KLSAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogI2lmbmRlZiBfX01BQ0hfU0NNX0JPT1RfSAogI2RlZmluZSBfX01BQ0hfU0NNX0JPT1RfSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vc2NtLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9zY20uYwppbmRleCBmNGI5YmM5Li5jZmE4MDhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9zY20uYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9zY20uYwpAQCAtMTc0LDE1ICsxNzQsMTggQEAKIAlyZWdpc3RlciB1MzIgcjAgYXNtKCJyMCIpID0gMTsKIAlyZWdpc3RlciB1MzIgcjEgYXNtKCJyMSIpID0gKHUzMikmY29udGV4dF9pZDsKIAlyZWdpc3RlciB1MzIgcjIgYXNtKCJyMiIpID0gY21kX2FkZHI7Ci0JYXNtKAotCQlfX2FzbWVxKCIlMCIsICJyMCIpCi0JCV9fYXNtZXEoIiUxIiwgInIwIikKLQkJX19hc21lcSgiJTIiLCAicjEiKQotCQlfX2FzbWVxKCIlMyIsICJyMiIpCi0JCSJzbWMJIzAJQCBzd2l0Y2ggdG8gc2VjdXJlIHdvcmxkXG4iCi0JCTogIj1yIiAocjApCi0JCTogInIiIChyMCksICJyIiAocjEpLCAiciIgKHIyKQotCQk6ICJyMyIpOworCWRvIHsKKwkJYXNtIHZvbGF0aWxlKAorCQkJX19hc21lcSgiJTAiLCAicjAiKQorCQkJX19hc21lcSgiJTEiLCAicjAiKQorCQkJX19hc21lcSgiJTIiLCAicjEiKQorCQkJX19hc21lcSgiJTMiLCAicjIiKQorCQkJInNtYwkjMAlAIHN3aXRjaCB0byBzZWN1cmUgd29ybGRcbiIKKwkJCTogIj1yIiAocjApCisJCQk6ICJyIiAocjApLCAiciIgKHIxKSwgInIiIChyMikKKwkJCTogInIzIik7CisJfSB3aGlsZSAocjAgPT0gU0NNX0lOVEVSUlVQVEVEKTsKKwogCXJldHVybiByMDsKIH0KIApAQCAtMTk3LDEzICsyMDAsOSBAQAogCSAqIHNpZGUgaW4gdGhlIGJ1ZmZlci4KIAkgKi8KIAlmbHVzaF9jYWNoZV9hbGwoKTsKLQlkbyB7Ci0JCXJldCA9IHNtYyhjbWRfYWRkcik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlyZXQgPSBzY21fcmVtYXBfZXJyb3IocmV0KTsKLQkJCWJyZWFrOwotCQl9Ci0JfSB3aGlsZSAocmV0ID09IFNDTV9JTlRFUlJVUFRFRCk7CisJcmV0ID0gc21jKGNtZF9hZGRyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0ID0gc2NtX3JlbWFwX2Vycm9yKHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjY0LDIxICsyNjMsMjggQEAKIHsKIAlpbnQgY29udGV4dF9pZDsKIAlzdGF0aWMgdTMyIHZlcnNpb24gPSAtMTsKLQlyZWdpc3RlciB1MzIgcjAgYXNtKCJyMCIpID0gMHgxIDw8IDg7Ci0JcmVnaXN0ZXIgdTMyIHIxIGFzbSgicjEiKSA9ICh1MzIpJmNvbnRleHRfaWQ7CisJcmVnaXN0ZXIgdTMyIHIwIGFzbSgicjAiKTsKKwlyZWdpc3RlciB1MzIgcjEgYXNtKCJyMSIpOwogCiAJaWYgKHZlcnNpb24gIT0gLTEpCiAJCXJldHVybiB2ZXJzaW9uOwogCiAJbXV0ZXhfbG9jaygmc2NtX2xvY2spOwotCWFzbSgKLQkJX19hc21lcSgiJTAiLCAicjEiKQotCQlfX2FzbWVxKCIlMSIsICJyMCIpCi0JCV9fYXNtZXEoIiUyIiwgInIxIikKLQkJInNtYwkjMAlAIHN3aXRjaCB0byBzZWN1cmUgd29ybGRcbiIKLQkJOiAiPXIiIChyMSkKLQkJOiAiciIgKHIwKSwgInIiIChyMSkKLQkJOiAicjIiLCAicjMiKTsKKworCXIwID0gMHgxIDw8IDg7CisJcjEgPSAodTMyKSZjb250ZXh0X2lkOworCWRvIHsKKwkJYXNtIHZvbGF0aWxlKAorCQkJX19hc21lcSgiJTAiLCAicjAiKQorCQkJX19hc21lcSgiJTEiLCAicjEiKQorCQkJX19hc21lcSgiJTIiLCAicjAiKQorCQkJX19hc21lcSgiJTMiLCAicjEiKQorCQkJInNtYwkjMAlAIHN3aXRjaCB0byBzZWN1cmUgd29ybGRcbiIKKwkJCTogIj1yIiAocjApLCAiPXIiIChyMSkKKwkJCTogInIiIChyMCksICJyIiAocjEpCisJCQk6ICJyMiIsICJyMyIpOworCX0gd2hpbGUgKHIwID09IFNDTV9JTlRFUlJVUFRFRCk7CisKIAl2ZXJzaW9uID0gcjE7CiAJbXV0ZXhfdW5sb2NrKCZzY21fbG9jayk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL3NjbS5oIGIvYXJjaC9hcm0vbWFjaC1tc20vc2NtLmgKaW5kZXggMjYxNzg2Yi4uMDBiMzFlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vc2NtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vc2NtLmgKQEAgLTEsMjkgKzEsMTMgQEAKIC8qIENvcHlyaWdodCAoYykgMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDb2RlIEF1cm9yYSBGb3J1bSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCi0gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCi0gKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCi0gKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpZm5kZWYgX19NQUNIX1NDTV9ICiAjZGVmaW5lIF9fTUFDSF9TQ01fSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMKaW5kZXggYWU4NWFhOS4uNTZmOTIwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jCkBAIC0yNCwxMCArMjQsNyBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+Ci0KLSNpZm5kZWYgTVNNX0RHVF9CQVNFCi0jZGVmaW5lIE1TTV9ER1RfQkFTRSAoTVNNX0dQVF9CQVNFICsgMHgxMCkKLSNlbmRpZgorI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAKICNkZWZpbmUgVElNRVJfTUFUQ0hfVkFMICAgICAgICAgMHgwMDAwCiAjZGVmaW5lIFRJTUVSX0NPVU5UX1ZBTCAgICAgICAgIDB4MDAwNApAQCAtNTIsMTggKzQ5LDE0IEBACiAJR0xPQkFMX1RJTUVSID0gMSwKIH07CiAKLSNpZmRlZiBNU01fVE1SMF9CQVNFCi0jZGVmaW5lIE1TTV9UTVJfR0xPQkFMCQkoTVNNX1RNUjBfQkFTRSAtIE1TTV9UTVJfQkFTRSkKLSNlbHNlCi0jZGVmaW5lIE1TTV9UTVJfR0xPQkFMCQkwCi0jZW5kaWYKLQogI2RlZmluZSBNU01fR0xPQkFMX1RJTUVSIE1TTV9DTE9DS19ER1QKIAorLyogVE9ETzogUmVtb3ZlIHRoZXNlIGlmZGVmcyAqLwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfUVNEOFg1MCkKICNkZWZpbmUgREdUX0haICgxOTIwMDAwMCAvIDQpIC8qIDE5LjIgTUh6IC8gNCBieSBkZWZhdWx0ICovCiAjZGVmaW5lIE1TTV9ER1RfU0hJRlQgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX01TTTdYMzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNOFg2MCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NU004WDYwKSB8fCBcCisJCQkJICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9NU004OTYwKQogI2RlZmluZSBER1RfSFogKDI0NTc2MDAwIC8gNCkgLyogMjQuNTc2IE1IeiAoTFBYTykgLyA0IGJ5IGRlZmF1bHQgKi8KICNkZWZpbmUgTVNNX0RHVF9TSElGVCAoMCkKICNlbHNlCkBAIC0xNzcsMTEgKzE3MCw3IEBACiAJCQkuZGV2X2lkICA9ICZtc21fY2xvY2tzWzBdLmNsb2NrZXZlbnQsCiAJCQkuaXJxICAgICA9IElOVF9HUF9USU1FUl9FWFAKIAkJfSwKLQkJLnJlZ2Jhc2UgPSBNU01fR1BUX0JBU0UsCiAJCS5mcmVxID0gR1BUX0haLAotCQkubG9jYWxfY291bnRlciA9IE1TTV9HUFRfQkFTRSArIFRJTUVSX0NPVU5UX1ZBTCwKLQkJLmdsb2JhbF9jb3VudGVyID0gTVNNX0dQVF9CQVNFICsgVElNRVJfQ09VTlRfVkFMICsKLQkJCU1TTV9UTVJfR0xPQkFMLAogCX0sCiAJW01TTV9DTE9DS19ER1RdID0gewogCQkuY2xvY2tldmVudCA9IHsKQEAgLTIwNiwxMiArMTk1LDggQEAKIAkJCS5kZXZfaWQgID0gJm1zbV9jbG9ja3NbMV0uY2xvY2tldmVudCwKIAkJCS5pcnEgICAgID0gSU5UX0RFQlVHX1RJTUVSX0VYUAogCQl9LAotCQkucmVnYmFzZSA9IE1TTV9ER1RfQkFTRSwKIAkJLmZyZXEgPSBER1RfSFogPj4gTVNNX0RHVF9TSElGVCwKIAkJLnNoaWZ0ID0gTVNNX0RHVF9TSElGVCwKLQkJLmxvY2FsX2NvdW50ZXIgPSBNU01fREdUX0JBU0UgKyBUSU1FUl9DT1VOVF9WQUwsCi0JCS5nbG9iYWxfY291bnRlciA9IE1TTV9ER1RfQkFTRSArIFRJTUVSX0NPVU5UX1ZBTCArCi0JCQlNU01fVE1SX0dMT0JBTCwKIAl9CiB9OwogCkBAIC0yMTksNiArMjA0LDI1IEBACiB7CiAJaW50IGk7CiAJaW50IHJlczsKKwlpbnQgZ2xvYmFsX29mZnNldCA9IDA7CisKKwlpZiAoY3B1X2lzX21zbTd4MDEoKSkgeworCQltc21fY2xvY2tzW01TTV9DTE9DS19HUFRdLnJlZ2Jhc2UgPSBNU01fQ1NSX0JBU0U7CisJCW1zbV9jbG9ja3NbTVNNX0NMT0NLX0RHVF0ucmVnYmFzZSA9IE1TTV9DU1JfQkFTRSArIDB4MTA7CisJfSBlbHNlIGlmIChjcHVfaXNfbXNtN3gzMCgpKSB7CisJCW1zbV9jbG9ja3NbTVNNX0NMT0NLX0dQVF0ucmVnYmFzZSA9IE1TTV9DU1JfQkFTRSArIDB4MDQ7CisJCW1zbV9jbG9ja3NbTVNNX0NMT0NLX0RHVF0ucmVnYmFzZSA9IE1TTV9DU1JfQkFTRSArIDB4MjQ7CisJfSBlbHNlIGlmIChjcHVfaXNfcXNkOHg1MCgpKSB7CisJCW1zbV9jbG9ja3NbTVNNX0NMT0NLX0dQVF0ucmVnYmFzZSA9IE1TTV9DU1JfQkFTRTsKKwkJbXNtX2Nsb2Nrc1tNU01fQ0xPQ0tfREdUXS5yZWdiYXNlID0gTVNNX0NTUl9CQVNFICsgMHgxMDsKKwl9IGVsc2UgaWYgKGNwdV9pc19tc204eDYwKCkgfHwgY3B1X2lzX21zbTg5NjAoKSkgeworCQltc21fY2xvY2tzW01TTV9DTE9DS19HUFRdLnJlZ2Jhc2UgPSBNU01fVE1SX0JBU0UgKyAweDA0OworCQltc21fY2xvY2tzW01TTV9DTE9DS19ER1RdLnJlZ2Jhc2UgPSBNU01fVE1SX0JBU0UgKyAweDI0OworCisJCS8qIFVzZSBDUFUwJ3MgdGltZXIgYXMgdGhlIGdsb2JhbCB0aW1lci4gKi8KKwkJZ2xvYmFsX29mZnNldCA9IE1TTV9UTVIwX0JBU0UgLSBNU01fVE1SX0JBU0U7CisJfSBlbHNlCisJCUJVRygpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVNNX1NDT1JQSU9OTVAKIAl3cml0ZWwoREdUX0NMS19DVExfRElWXzQsIE1TTV9UTVJfQkFTRSArIERHVF9DTEtfQ1RMKTsKQEAgLTIyOCw2ICsyMzIsMTAgQEAKIAkJc3RydWN0IG1zbV9jbG9jayAqY2xvY2sgPSAmbXNtX2Nsb2Nrc1tpXTsKIAkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2UgPSAmY2xvY2stPmNsb2NrZXZlbnQ7CiAJCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MgPSAmY2xvY2stPmNsb2Nrc291cmNlOworCisJCWNsb2NrLT5sb2NhbF9jb3VudGVyID0gY2xvY2stPnJlZ2Jhc2UgKyBUSU1FUl9DT1VOVF9WQUw7CisJCWNsb2NrLT5nbG9iYWxfY291bnRlciA9IGNsb2NrLT5sb2NhbF9jb3VudGVyICsgZ2xvYmFsX29mZnNldDsKKwogCQl3cml0ZWwoMCwgY2xvY2stPnJlZ2Jhc2UgKyBUSU1FUl9FTkFCTEUpOwogCQl3cml0ZWwoMCwgY2xvY2stPnJlZ2Jhc2UgKyBUSU1FUl9DTEVBUik7CiAJCXdyaXRlbCh+MCwgY2xvY2stPnJlZ2Jhc2UgKyBUSU1FUl9NQVRDSF9WQUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2J1ZmZhbG8td3hsLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvYnVmZmFsby13eGwtc2V0dXAuYwppbmRleCAyOWUzOTBlLi4yMGYzZjEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvYnVmZmFsby13eGwtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvYnVmZmFsby13eGwtc2V0dXAuYwpAQCAtMTQ4LDYgKzE0OCw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gd3hsX2luaXQsCiAJLm1hcF9pbwkJPSBtdjc4eHgwX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG12Nzh4eDBfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBtdjc4eHgwX2luaXRfaXJxLAogCS50aW1lcgkJPSAmbXY3OHh4MF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKaW5kZXggMDg0NjVlYi4uNDRmYjRlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwpAQCAtODE4LDkgKzgxOCwxNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaW1lIGhhbmRsaW5nCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgX19pbml0IG12Nzh4eDBfaW5pdF9lYXJseSh2b2lkKQoreworCW9yaW9uX3RpbWVfc2V0X2Jhc2UoVElNRVJfVklSVF9CQVNFKTsKK30KKwogc3RhdGljIHZvaWQgbXY3OHh4MF90aW1lcl9pbml0KHZvaWQpCiB7Ci0Jb3Jpb25fdGltZV9pbml0KElSUV9NVjc4WFgwX1RJTUVSXzEsIGdldF90Y2xrKCkpOworCW9yaW9uX3RpbWVfaW5pdChCUklER0VfVklSVF9CQVNFLCBCUklER0VfSU5UX1RJTUVSMV9DTFIsCisJCQlJUlFfTVY3OFhYMF9USU1FUl8xLCBnZXRfdGNsaygpKTsKIH0KIAogc3RydWN0IHN5c190aW1lciBtdjc4eHgwX3RpbWVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5oCmluZGV4IGJlZmMyMjQuLjYzMmU2M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmgKQEAgLTIwLDYgKzIwLDcgQEAKIGludCBtdjc4eHgwX2NvcmVfaW5kZXgodm9pZCk7CiB2b2lkIG12Nzh4eDBfbWFwX2lvKHZvaWQpOwogdm9pZCBtdjc4eHgwX2luaXQodm9pZCk7Cit2b2lkIG12Nzh4eDBfaW5pdF9lYXJseSh2b2lkKTsKIHZvaWQgbXY3OHh4MF9pbml0X2lycSh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gbXY3OHh4MF9tYnVzX2RyYW1faW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9kYjc4eDAwLWJwLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvZGI3OHgwMC1icC1zZXR1cC5jCmluZGV4IDIwN2M5NWUuLmRmNWFlYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9kYjc4eDAwLWJwLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2RiNzh4MDAtYnAtc2V0dXAuYwpAQCAtOTYsNiArOTYsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGRiNzh4MDBfaW5pdCwKIAkubWFwX2lvCQk9IG12Nzh4eDBfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gbXY3OHh4MF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG12Nzh4eDBfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZtdjc4eHgwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAppbmRleCAyZDE0YzRmLi5jNjRkYmI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCkBAIC0yMCwxMCArMjAsNiBAQAogI2RlZmluZSBTWVNURU1fU09GVF9SRVNFVAkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDEwYykKICNkZWZpbmUgU09GVF9SRVNFVAkJMHgwMDAwMDAwMQogCi0jZGVmaW5lIEJSSURHRV9DQVVTRQkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAxMTApCi0jZGVmaW5lIEJSSURHRV9NQVNLCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDExNCkKLSNkZWZpbmUgQlJJREdFX0lOVF9USU1FUjAJMHgwMDAyCi0jZGVmaW5lIEJSSURHRV9JTlRfVElNRVIxCTB4MDAwNAogI2RlZmluZSBCUklER0VfSU5UX1RJTUVSMV9DTFIJKH4weDAwMDQpCiAKICNkZWZpbmUgSVJRX1ZJUlRfQkFTRQkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAyMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGQ5ZDE1MzUuLjc3ZTFiODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC02LDM1ICs2LDQgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19ICi0KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLwotCi1leHRlcm4gaW50IG12Nzh4eDBfY29yZV9pbmRleCh2b2lkKTsKLQotI2RlZmluZSBHUElPX01BWAkJMzIKLSNkZWZpbmUgR1BJT19PVVQocGluKQkJKERFVl9CVVNfVklSVF9CQVNFICsgMHgwMTAwKQotI2RlZmluZSBHUElPX0lPX0NPTkYocGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyAweDAxMDQpCi0jZGVmaW5lIEdQSU9fQkxJTktfRU4ocGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyAweDAxMDgpCi0jZGVmaW5lIEdQSU9fSU5fUE9MKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgMHgwMTBjKQotI2RlZmluZSBHUElPX0RBVEFfSU4ocGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyAweDAxMTApCi0jZGVmaW5lIEdQSU9fRURHRV9DQVVTRShwaW4pCShERVZfQlVTX1ZJUlRfQkFTRSArIDB4MDExNCkKLSNkZWZpbmUgR1BJT19NQVNLX09GRgkJKG12Nzh4eDBfY29yZV9pbmRleCgpID8gMHgxOCA6IDApCi0jZGVmaW5lIEdQSU9fRURHRV9NQVNLKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgMHgwMTE4ICsgR1BJT19NQVNLX09GRikKLSNkZWZpbmUgR1BJT19MRVZFTF9NQVNLKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgMHgwMTFjICsgR1BJT19NQVNLX09GRikKLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEoaW50IHBpbikKLXsKLQlyZXR1cm4gcGluICsgSVJRX01WNzhYWDBfR1BJT19TVEFSVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8oaW50IGlycSkKLXsKLQlyZXR1cm4gaXJxIC0gSVJRX01WNzhYWDBfR1BJT19TVEFSVDsKLX0KLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKaW5kZXggM2VmZjM5OS4uMzY3NDQ5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKQEAgLTcxLDYgKzcxLDcgQEAKICNkZWZpbmUgREVWX0JVU19WSVJUX0JBU0UJKE1WNzhYWDBfUkVHU19WSVJUX0JBU0UgfCAweDEwMDAwKQogI2RlZmluZSAgU0FNUExFX0FUX1JFU0VUX0xPVwkoREVWX0JVU19WSVJUX0JBU0UgfCAweDAwMzApCiAjZGVmaW5lICBTQU1QTEVfQVRfUkVTRVRfSElHSAkoREVWX0JVU19WSVJUX0JBU0UgfCAweDAwMzQpCisjZGVmaW5lICBHUElPX1ZJUlRfQkFTRQkJKERFVl9CVVNfVklSVF9CQVNFIHwgMHgwMTAwKQogI2RlZmluZSAgSTJDXzBfUEhZU19CQVNFCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MTAwMCkKICNkZWZpbmUgIEkyQ18xX1BIWVNfQkFTRQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDExMDApCiAjZGVmaW5lICBVQVJUMF9QSFlTX0JBU0UJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgyMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2lycS5jCmluZGV4IDIyYjRmZjguLjA4ZGE0OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaXJxLmMKQEAgLTI2LDI4ICsyNiwxOCBAQAogCiB2b2lkIF9faW5pdCBtdjc4eHgwX2luaXRfaXJxKHZvaWQpCiB7Ci0JaW50IGk7Ci0KLQkvKiBJbml0aWFsaXplIGdwaW9saWIuICovCi0Jb3Jpb25fZ3Bpb19pbml0KCk7Ci0KIAlvcmlvbl9pcnFfaW5pdCgwLCAodm9pZCBfX2lvbWVtICopKElSUV9WSVJUX0JBU0UgKyBJUlFfTUFTS19MT1dfT0ZGKSk7CiAJb3Jpb25faXJxX2luaXQoMzIsICh2b2lkIF9faW9tZW0gKikoSVJRX1ZJUlRfQkFTRSArIElSUV9NQVNLX0hJR0hfT0ZGKSk7CiAJb3Jpb25faXJxX2luaXQoNjQsICh2b2lkIF9faW9tZW0gKikoSVJRX1ZJUlRfQkFTRSArIElSUV9NQVNLX0VSUl9PRkYpKTsKIAogCS8qCi0JICogTWFzayBhbmQgY2xlYXIgR1BJTyBJUlEgaW50ZXJydXB0cy4KKwkgKiBJbml0aWFsaXplIGdwaW9saWIgZm9yIEdQSU9zIDAtMzEuICAoVGhlIEdQSU8gaW50ZXJydXB0IG1hc2sKKwkgKiByZWdpc3RlcnMgZm9yIGNvcmUgIzEgYXJlIGF0IGFuIG9mZnNldCBvZiAweDE4IGZyb20gdGhvc2Ugb2YKKwkgKiBjb3JlICMwLikKIAkgKi8KLQl3cml0ZWwoMCwgR1BJT19MRVZFTF9NQVNLKDApKTsKLQl3cml0ZWwoMCwgR1BJT19FREdFX01BU0soMCkpOwotCXdyaXRlbCgwLCBHUElPX0VER0VfQ0FVU0UoMCkpOwotCi0JZm9yIChpID0gSVJRX01WNzhYWDBfR1BJT19TVEFSVDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJm9yaW9uX2dwaW9faXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCWlycV9kZXNjW2ldLnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7Ci0JfQorCW9yaW9uX2dwaW9faW5pdCgwLCAzMiwgR1BJT19WSVJUX0JBU0UsCisJCQltdjc4eHgwX2NvcmVfaW5kZXgoKSA/IDB4MTggOiAwLAorCQkJSVJRX01WNzhYWDBfR1BJT19TVEFSVCk7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX01WNzhYWDBfR1BJT18wXzcsIGdwaW9faXJxX2hhbmRsZXIpOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9NVjc4WFgwX0dQSU9fOF8xNSwgZ3Bpb19pcnFfaGFuZGxlcik7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX01WNzhYWDBfR1BJT18xNl8yMywgZ3Bpb19pcnFfaGFuZGxlcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvbXBwLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvbXBwLmMKaW5kZXggODRkYjJkZi4uNjViNzJjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL21wcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9tcHAuYwpAQCAtNDQsOSArNDQsNiBAQAogCWlmICghdmFyaWFudF9tYXNrKQogCQlyZXR1cm47CiAKLQkvKiBJbml0aWFsaXplIGdwaW9saWIuICovCi0Jb3Jpb25fZ3Bpb19pbml0KCk7Ci0KIAlwcmludGsoS0VSTl9ERUJVRyAiaW5pdGlhbCBNUFAgcmVnczoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgTVBQX05SX1JFR1M7IGkrKykgewogCQltcHBfY3RybFtpXSA9IHJlYWRsKE1QUF9DVFJMKGkpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9yZDc4eDAwLW1hc2Etc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9yZDc4eDAwLW1hc2Etc2V0dXAuYwppbmRleCAzNTExYWQ0Li5kOTI3ZjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvcmQ3OHgwMC1tYXNhLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3JkNzh4MDAtbWFzYS1zZXR1cC5jCkBAIC04MSw2ICs4MSw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gcmQ3OHgwMF9tYXNhX2luaXQsCiAJLm1hcF9pbwkJPSBtdjc4eHgwX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG12Nzh4eDBfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBtdjc4eHgwX2luaXRfaXJxLAogCS50aW1lcgkJPSAmbXY3OHh4MF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZwppbmRleCAwNzE3Zjg4Li4zNDA4MDlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKQEAgLTk0LDYgKzk0LDcgQEAKIAlzZWxlY3QgTVhDX0RFQlVHX0JPQVJECiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0ZTTF9VU0IyX1VEQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9LRVlQQUQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKQEAgLTE4Myw2ICsxODQsNyBAQAogCXNlbGVjdCBNWENfREVCVUdfQk9BUkQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKQEAgLTE5OSw2ICsyMDEsMTUgQEAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgS1pNLUFSTTExLTAxLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKK2NvbmZpZyBNQUNIX0JVRworCWJvb2wgIlN1cHBvcnQgQnVnbGFicyBCVUdCYXNlIHBsYXRmb3JtIgorCXNlbGVjdCBTT0NfSU1YMzEKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIEJVR0Jhc2UgMS4zIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCisJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKIGNvbmZpZyBNQUNIX0VVS1JFQV9DUFVJTVgzNQogCWJvb2wgIlN1cHBvcnQgRXVrcmVhIENQVUlNWDM1IFBsYXRmb3JtIgogCXNlbGVjdCBTT0NfSU1YMzUKQEAgLTIyOSw0ICsyNDAsMTggQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBNQUNIX1ZQUjIwMAorCWJvb2wgIlN1cHBvcnQgVlBSMjAwIHBsYXRmb3JtIgorCXNlbGVjdCBTT0NfSU1YMzUKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBWUFIyMDAgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKaW5kZXggOGRiMTMyOS4uYTU0ZmFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKQEAgLTUsOCArNSw4IEBACiAjIE9iamVjdCBmaWxlIGxpc3RzLgogCiBvYmoteQkJCQk6PSBtbS5vIGRldmljZXMubyBjcHUubwotb2JqLSQoQ09ORklHX1NPQ19JTVgzMSkJCSs9IGNsb2NrLWlteDMxLm8gaW9tdXgtaW14MzEubwotb2JqLSQoQ09ORklHX1NPQ19JTVgzNSkJCSs9IGNsb2NrLWlteDM1Lm8KK29iai0kKENPTkZJR19TT0NfSU1YMzEpCQkrPSBjbG9jay1pbXgzMS5vIGlvbXV4LWlteDMxLm8gZWhjaS1pbXgzMS5vCitvYmotJChDT05GSUdfU09DX0lNWDM1KQkJKz0gY2xvY2staW14MzUubyBlaGNpLWlteDM1Lm8KIG9iai0kKENPTkZJR19NQUNIX01YMzFBRFMpCSs9IG1hY2gtbXgzMWFkcy5vCiBvYmotJChDT05GSUdfTUFDSF9NWDMxTElMTFkpCSs9IG1hY2gtbXgzMWxpbGx5Lm8gbXgzMWxpbGx5LWRiLm8KIG9iai0kKENPTkZJR19NQUNIX01YMzFMSVRFKQkrPSBtYWNoLW14MzFsaXRlLm8gbXgzMWxpdGUtZGIubwpAQCAtMjAsNSArMjAsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfQVJNQURJTExPNVgwKSArPSBtYWNoLWFybWFkaWxsbzV4MC5vCiBvYmotJChDT05GSUdfTUFDSF9NWDM1XzNEUykJKz0gbWFjaC1teDM1XzNkcy5vCiBvYmotJChDT05GSUdfTUFDSF9LWk1fQVJNMTFfMDEpCSs9IG1hY2gta3ptX2FybTExXzAxLm8KK29iai0kKENPTkZJR19NQUNIX0JVRykJCSs9IG1hY2gtYnVnLm8KIG9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9DUFVJTVgzNSkJKz0gbWFjaC1jcHVpbXgzNS5vCiBvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVhTRDM1X0JBU0VCT0FSRCkJKz0gZXVrcmVhX21iaW14c2QtYmFzZWJvYXJkLm8KK29iai0kKENPTkZJR19NQUNIX1ZQUjIwMCkJKz0gbWFjaC12cHIyMDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy1pbXgzNS5oIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy1pbXgzNS5oCmluZGV4IDY3N2IxOGEuLmQ1NDVkODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMtaW14MzUuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLWlteDM1LmgKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgaW14MzVfYWRkX2lteF9pMmMyKHBkYXRhKQlpbXgzNV9hZGRfaW14X2kyYygyLCBwZGF0YSkKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X2tleXBhZF9kYXRhIGlteDM1X2lteF9rZXlwYWRfZGF0YSBfX2luaXRjb25zdDsKLSNkZWZpbmUgaW14MzFfYWRkX2lteF9rZXlwYWQocGRhdGEpCVwKKyNkZWZpbmUgaW14MzVfYWRkX2lteF9rZXlwYWQocGRhdGEpCVwKIAlpbXhfYWRkX2lteF9rZXlwYWQoJmlteDM1X2lteF9rZXlwYWRfZGF0YSwgcGRhdGEpCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9zc2lfZGF0YSBpbXgzNV9pbXhfc3NpX2RhdGFbXSBfX2luaXRjb25zdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2VoY2ktaW14MzEuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2VoY2ktaW14MzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTRhOTgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZWhjaS1pbXgzMS5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisKKyNkZWZpbmUgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVAkweDYwMAorCisjZGVmaW5lIE1YMzFfT1RHX1NJQ19TSElGVAkyOQorI2RlZmluZSBNWDMxX09UR19TSUNfTUFTSwkoMHgzIDw8IE1YMzFfT1RHX1NJQ19TSElGVCkKKyNkZWZpbmUgTVgzMV9PVEdfUE1fQklUCQkoMSA8PCAyNCkKKworI2RlZmluZSBNWDMxX0gyX1NJQ19TSElGVAkyMQorI2RlZmluZSBNWDMxX0gyX1NJQ19NQVNLCSgweDMgPDwgTVgzMV9IMl9TSUNfU0hJRlQpCisjZGVmaW5lIE1YMzFfSDJfUE1fQklUCQkoMSA8PCAxNikKKyNkZWZpbmUgTVgzMV9IMl9EVF9CSVQJCSgxIDw8IDUpCisKKyNkZWZpbmUgTVgzMV9IMV9TSUNfU0hJRlQJMTMKKyNkZWZpbmUgTVgzMV9IMV9TSUNfTUFTSwkoMHgzIDw8IE1YMzFfSDFfU0lDX1NISUZUKQorI2RlZmluZSBNWDMxX0gxX1BNX0JJVAkJKDEgPDwgOCkKKyNkZWZpbmUgTVgzMV9IMV9EVF9CSVQJCSgxIDw8IDQpCisKK2ludCBteDMxX2luaXRpYWxpemVfdXNiX2h3KGludCBwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwl2ID0gcmVhZGwoTVgzMV9JT19BRERSRVNTKE1YMzFfVVNCX0JBU0VfQUREUiArIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoJLyogT1RHIHBvcnQgKi8KKwkJdiAmPSB+KE1YMzFfT1RHX1NJQ19NQVNLIHwgTVgzMV9PVEdfUE1fQklUKTsKKwkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykgPDwgTVgzMV9PVEdfU0lDX1NISUZUOworCisJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKKwkJCXYgfD0gTVgzMV9PVEdfUE1fQklUOworCisJCWJyZWFrOworCWNhc2UgMTogLyogSDEgcG9ydCAqLworCQl2ICY9IH4oTVgzMV9IMV9TSUNfTUFTSyB8IE1YMzFfSDFfUE1fQklUIHwgTVgzMV9IMV9EVF9CSVQpOworCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKSA8PCBNWDMxX0gxX1NJQ19TSElGVDsKKworCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCisJCQl2IHw9IE1YMzFfSDFfUE1fQklUOworCisJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfVFRMX0VOQUJMRUQpKQorCQkJdiB8PSBNWDMxX0gxX0RUX0JJVDsKKworCQlicmVhazsKKwljYXNlIDI6CS8qIEgyIHBvcnQgKi8KKwkJdiAmPSB+KE1YMzFfSDJfU0lDX01BU0sgfCBNWDMxX0gyX1BNX0JJVCB8IE1YMzFfSDJfRFRfQklUKTsKKwkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykgPDwgTVgzMV9IMl9TSUNfU0hJRlQ7CisKKwkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpKQorCQkJdiB8PSBNWDMxX0gyX1BNX0JJVDsKKworCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1RUTF9FTkFCTEVEKSkKKwkJCXYgfD0gTVgzMV9IMl9EVF9CSVQ7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKHYsIE1YMzFfSU9fQUREUkVTUyhNWDMxX1VTQl9CQVNFX0FERFIgKyBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZWhjaS1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZWhjaS1pbXgzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTgzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9laGNpLWlteDM1LmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KKworI2RlZmluZSBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUCTB4NjAwCisKKyNkZWZpbmUgTVgzNV9PVEdfU0lDX1NISUZUCTI5CisjZGVmaW5lIE1YMzVfT1RHX1NJQ19NQVNLCSgweDMgPDwgTVgzNV9PVEdfU0lDX1NISUZUKQorI2RlZmluZSBNWDM1X09UR19QTV9CSVQJCSgxIDw8IDI0KQorCisjZGVmaW5lIE1YMzVfSDFfU0lDX1NISUZUCTIxCisjZGVmaW5lIE1YMzVfSDFfU0lDX01BU0sJKDB4MyA8PCBNWDM1X0gxX1NJQ19TSElGVCkKKyNkZWZpbmUgTVgzNV9IMV9QTV9CSVQJCSgxIDw8IDgpCisjZGVmaW5lIE1YMzVfSDFfSVBQVUVfVVBfQklUCSgxIDw8IDcpCisjZGVmaW5lIE1YMzVfSDFfSVBQVUVfRE9XTl9CSVQJKDEgPDwgNikKKyNkZWZpbmUgTVgzNV9IMV9UTExfQklUCQkoMSA8PCA1KQorI2RlZmluZSBNWDM1X0gxX1VTQlRFX0JJVAkoMSA8PCA0KQorCitpbnQgbXgzNV9pbml0aWFsaXplX3VzYl9odyhpbnQgcG9ydCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGludCB2OworCisJdiA9IHJlYWRsKE1YMzVfSU9fQUREUkVTUyhNWDM1X1VTQl9CQVNFX0FERFIgKyBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7CisKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CS8qIE9URyBwb3J0ICovCisJCXYgJj0gfihNWDM1X09UR19TSUNfTUFTSyB8IE1YMzVfT1RHX1BNX0JJVCk7CisJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spIDw8IE1YMzVfT1RHX1NJQ19TSElGVDsKKworCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCisJCQl2IHw9IE1YMzVfT1RHX1BNX0JJVDsKKworCQlicmVhazsKKwljYXNlIDE6IC8qIEgxIHBvcnQgKi8KKwkJdiAmPSB+KE1YMzVfSDFfU0lDX01BU0sgfCBNWDM1X0gxX1BNX0JJVCB8IE1YMzVfSDFfVExMX0JJVCB8CisJCQlNWDM1X0gxX1VTQlRFX0JJVCB8IE1YMzVfSDFfSVBQVUVfRE9XTl9CSVQgfCBNWDM1X0gxX0lQUFVFX1VQX0JJVCk7CisJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spIDw8IE1YMzVfSDFfU0lDX1NISUZUOworCisJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKKwkJCXYgfD0gTVgzNV9IMV9QTV9CSVQ7CisKKwkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9UVExfRU5BQkxFRCkpCisJCQl2IHw9IE1YMzVfSDFfVExMX0JJVDsKKworCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUk5BTF9QSFkpCisJCQl2IHw9IE1YMzVfSDFfVVNCVEVfQklUOworCisJCWlmIChmbGFncyAmIE1YQ19FSENJX0lQUFVFX0RPV04pCisJCQl2IHw9IE1YMzVfSDFfSVBQVUVfRE9XTl9CSVQ7CisKKwkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfSVBQVUVfVVApCisJCQl2IHw9IE1YMzVfSDFfSVBQVUVfVVBfQklUOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyaXRlbCh2LCBNWDM1X0lPX0FERFJFU1MoTVgzNV9VU0JfQkFTRV9BRERSICsgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2V1a3JlYV9tYmlteHNkLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZXVrcmVhX21iaW14c2QtYmFzZWJvYXJkLmMKaW5kZXggMTRhNWZmYy4uODA3NjE0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvZXVrcmVhX21iaW14c2QtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZXVrcmVhX21iaW14c2QtYmFzZWJvYXJkLmMKQEAgLTE2NSw4ICsxNjUsOCBAQAogCU1YMzVfUEFEX1NEMV9EQVRBM19fRVNESEMxX0RBVDMsCiB9OwogCi0jZGVmaW5lIEdQSU9fTEVEMQkoMiAqIDMyICsgMjkpCi0jZGVmaW5lIEdQSU9fU1dJVENIMQkoMiAqIDMyICsgMjUpCisjZGVmaW5lIEdQSU9fTEVEMQlJTVhfR1BJT19OUigzLCAyOSkKKyNkZWZpbmUgR1BJT19TV0lUQ0gxCUlNWF9HUElPX05SKDMsIDI1KQogI2RlZmluZSBHUElPX0xDRFBXUgkoNCkKIAogc3RhdGljIHZvaWQgZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyX3NldChzdHJ1Y3QgcGxhdF9sY2RfZGF0YSAqcGQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9pb211eC1pbXgzMS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvaW9tdXgtaW14MzEuYwppbmRleCBhMWQ3ZmE1Li5jZjhmODA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9pb211eC1pbXgzMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LWlteDMxLmMKQEAgLTk3LDcgKzk3LDcgQEAKICAqIAktIHJlc2VydmVzIHRoZSBwaW4gc28gdGhhdCBpdCBpcyBub3QgY2xhaW1lZCBieSBhbm90aGVyIGRyaXZlcgogICogCS0gc2V0dXBzIHRoZSBpb211eCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24KICAqLwotaW50IG14Y19pb211eF9hbGxvY19waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbiwgY29uc3QgY2hhciAqbGFiZWwpCitpbnQgbXhjX2lvbXV4X2FsbG9jX3Bpbih1bnNpZ25lZCBpbnQgcGluLCBjb25zdCBjaGFyICpsYWJlbCkKIHsKIAl1bnNpZ25lZCBwYWQgPSBwaW4gJiBJT01VWF9QQUROVU1fTUFTSzsKIApAQCAtMTE4LDEwICsxMTgsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0wobXhjX2lvbXV4X2FsbG9jX3Bpbik7CiAKLWludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKK2ludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhjb25zdCB1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKIAkJY29uc3QgY2hhciAqbGFiZWwpCiB7Ci0JdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7CisJY29uc3QgdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7CiAJaW50IGk7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTEzOSw3ICsxMzksNyBAQAogfQogRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyk7CiAKLXZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW4pCit2b2lkIG14Y19pb211eF9yZWxlYXNlX3Bpbih1bnNpZ25lZCBpbnQgcGluKQogewogCXVuc2lnbmVkIHBhZCA9IHBpbiAmIElPTVVYX1BBRE5VTV9NQVNLOwogCkBAIC0xNDgsOSArMTQ4LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3JlbGVhc2VfcGluKTsKIAotdm9pZCBteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIGludCBjb3VudCkKK3ZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyhjb25zdCB1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpCiB7Ci0JdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7CisJY29uc3QgdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1hcm1hZGlsbG81eDAuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtYXJtYWRpbGxvNXgwLmMKaW5kZXggMjhiNmY0MS4uMjI2ODI5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1hcm1hZGlsbG81eDAuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWFybWFkaWxsbzV4MC5jCkBAIC0xMzMsNyArMTMzLDYgQEAKIH07CiAKIC8qIFVTQiAqLwotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQogCiAjZGVmaW5lIE9UR19SRVNFVCBJT01VWF9UT19HUElPKE1YMzFfUElOX1NUWEQ0KQogI2RlZmluZSBVU0JIMl9SRVNFVCBJT01VWF9UT19HUElPKE1YMzFfUElOX1NDSzYpCkBAIC0xNzYsOCArMTc1LDEwIEBACiAJZ3Bpb19zZXRfdmFsdWUoT1RHX1JFU0VULCAwLypMT1cqLyk7CiAJbWRlbGF5KDUpOwogCWdwaW9fc2V0X3ZhbHVlKE9UR19SRVNFVCwgMS8qSElHSCovKTsKKwltZGVsYXkoMTApOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIG14MzFfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8CisJCQlNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkkpOwogCiBvdGdfZnJlZV9yZXNldDoKIAlncGlvX2ZyZWUoT1RHX1JFU0VUKTsKQEAgLTIzMyw4ICsyMzQsMTAgQEAKIAlncGlvX3NldF92YWx1ZShVU0JIMl9SRVNFVCwgMC8qTE9XKi8pOwogCW1kZWxheSg1KTsKIAlncGlvX3NldF92YWx1ZShVU0JIMl9SRVNFVCwgMS8qSElHSCovKTsKKwltZGVsYXkoMTApOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIG14MzFfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8CisJCQlNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkkpOwogCiBoMl9mcmVlX3Jlc2V0OgogCWdwaW9fZnJlZShVU0JIMl9SRVNFVCk7CkBAIC0yNDYsMTUgKzI0OSwxMiBAQAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYm90Z19wZGF0YSBfX2luaXRkYXRhID0gewogCS5pbml0CT0gdXNib3RnX2luaXQsCiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKLQkuZmxhZ3MJPSBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQgfCBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCiB9OwogCiBzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgX19pbml0ZGF0YSA9IHsKIAkuaW5pdAk9IHVzYmgyX2luaXQsCiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKLQkuZmxhZ3MJPSBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQgfCBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCiB9OwotI2VuZGlmIC8qIENPTkZJR19VU0JfVUxQSSAqLwogCiAvKiBSVEMgb3ZlciBJMkMqLwogI2RlZmluZSBBUk1BRElMTE81WDBfUlRDX0dQSU8JSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TUlhENCkKQEAgLTU0NywxNSArNTQ3LDE1IEBACiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgJmFybWFkaWxsbzV4MF9pMmNfcnRjLCAxKTsKIAogCS8qIFVTQiAqLwotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQotCXVzYm90Z19wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwotCXVzYmgyX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKLQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQlpbXgzMV9hZGRfbXhjX2VoY2lfb3RnKCZ1c2JvdGdfcGRhdGEpOwotCWlteDMxX2FkZF9teGNfZWhjaV9ocygyLCAmdXNiaDJfcGRhdGEpOwotI2VuZGlmCisJdXNib3RnX3BkYXRhLm90ZyA9IGlteF9vdGdfdWxwaV9jcmVhdGUoVUxQSV9PVEdfRFJWVkJVUyB8CisJCQlVTFBJX09UR19EUlZWQlVTX0VYVCk7CisJaWYgKHVzYm90Z19wZGF0YS5vdGcpCisJCWlteDMxX2FkZF9teGNfZWhjaV9vdGcoJnVzYm90Z19wZGF0YSk7CisJdXNiaDJfcGRhdGEub3RnID0gaW14X290Z191bHBpX2NyZWF0ZShVTFBJX09UR19EUlZWQlVTIHwKKwkJCVVMUElfT1RHX0RSVlZCVVNfRVhUKTsKKwlpZiAodXNiaDJfcGRhdGEub3RnKQorCQlpbXgzMV9hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGFybWFkaWxsbzV4MF90aW1lcl9pbml0KHZvaWQpCkBAIC01NjksOSArNTY5LDEwIEBACiAKIE1BQ0hJTkVfU1RBUlQoQVJNQURJTExPNVgwLCAiQXJtYWRpbGxvLTUwMCIpCiAJLyogTWFpbnRhaW5lcjogQWxiZXJ0byBQYW5penpvICAqLwotCS5ib290X3BhcmFtcwk9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvCQk9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycQk9IG14MzFfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZhcm1hZGlsbG81eDBfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IGFybWFkaWxsbzV4MF9pbml0LAorCS5ib290X3BhcmFtcyA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgzMV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MzFfaW5pdF9pcnEsCisJLnRpbWVyID0gJmFybWFkaWxsbzV4MF90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gYXJtYWRpbGxvNXgwX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1idWcuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzN2Q3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtYnVnLmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogQ29weXJpZ2h0IChDKSAyMDAyIFNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKKyAqIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDExIERlbmlzICdHTlV0b28nIENhcmlrbGkgPEdOVXRvb0Buby1sb2cub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDMxLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnVnX3BpbnNbXSBfX2luaXRjb25zdCA9IHsKKwlNWDMxX1BJTl9QQ19SU1RfX0NUUzUsCisJTVgzMV9QSU5fUENfVlMyX19SVFM1LAorCU1YMzFfUElOX1BDX0JWRDJfX1RYRDUsCisJTVgzMV9QSU5fUENfQlZEMV9fUlhENSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBidWdfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKGJ1Z19waW5zLAorCQkJCSAgICAgIEFSUkFZX1NJWkUoYnVnX3BpbnMpLCAidWFydC00Iik7CisJaW14MzFfYWRkX2lteF91YXJ0NCgmdWFydF9wZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBidWdfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBidWdfdGltZXIgPSB7CisJLmluaXQgPSBidWdfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoQlVHLCAiQnVnTGFicyBCVUdCYXNlIikKKwkubWFwX2lvID0gbXgzMV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MzFfaW5pdF9pcnEsCisJLnRpbWVyID0gJmJ1Z190aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gYnVnX2JvYXJkX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1jcHVpbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1jcHVpbXgzNS5jCmluZGV4IDI2YWU5MGYuLmVjNjNkOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtY3B1aW14MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWNwdWlteDM1LmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkueF9wbGF0ZV9vaG1zCQk9IDE4MCwKIH07CiAKLSNkZWZpbmUgVFNDMjAwN19JUlFHUElPCQkoMiAqIDMyICsgMikKKyNkZWZpbmUgVFNDMjAwN19JUlFHUElPCQlJTVhfR1BJT19OUigzLCAyKQogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBldWtyZWFfY3B1aW14MzVfaTJjX2RldmljZXNbXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCkBAIC0xMTEsMTUgKzExMSwyNSBAQAogCS5mbGFzaF9iYnQJPSAxLAogfTsKIAorc3RhdGljIGludCBldWtyZWFfY3B1aW14MzVfb3RnX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXgzNV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuaW5pdAk9IGV1a3JlYV9jcHVpbXgzNV9vdGdfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JLAotCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07CiAKK3N0YXRpYyBpbnQgZXVrcmVhX2NwdWlteDM1X3VzYmgxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXgzNV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkgfAorCQkJTVhDX0VIQ0lfSU5URVJOQUxfUEhZIHwgTVhDX0VIQ0lfSVBQVUVfRE9XTik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuaW5pdAk9IGV1a3JlYV9jcHVpbXgzNV91c2JoMV9pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1NFUklBTCwKLQkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSB8Ci0JCSAgTVhDX0VIQ0lfSVBQVUVfRE9XTiwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBvdGdfZGV2aWNlX3BkYXRhIF9faW5pdGNvbnN0ID0gewpAQCAtMTQ2LDcgKzE1Niw3IEBACiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgzNV9pbml0KHZvaWQpCiB7CiAJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMoZXVrcmVhX2NwdWlteDM1X3BhZHMsCiAJCQlBUlJBWV9TSVpFKGV1a3JlYV9jcHVpbXgzNV9wYWRzKSk7CkBAIC0xODQsOSArMTk0LDEwIEBACiAKIE1BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDM1LCAiRXVrcmVhIENQVUlNWDM1IikKIAkvKiBNYWludGFpbmVyOiBFdWtyZWEgRWxlY3Ryb21hdGlxdWUgKi8KLQkuYm9vdF9wYXJhbXMgICAgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgzNV9tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgzNV9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmZXVrcmVhX2NwdWlteDM1X3RpbWVyLAorCS5ib290X3BhcmFtcyA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgzNV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgzNV9pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MzVfaW5pdF9pcnEsCisJLnRpbWVyID0gJmV1a3JlYV9jcHVpbXgzNV90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gZXVrcmVhX2NwdWlteDM1X2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1rem1fYXJtMTFfMDEuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gta3ptX2FybTExXzAxLmMKaW5kZXggZGYxYTZjZS4uZDM1NjIxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1rem1fYXJtMTFfMDEuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWt6bV9hcm0xMV8wMS5jCkBAIC0yNjYsMTcgKzI2NiwxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHN5c190aW1lciBrem1fdGltZXIgPSB7Ci0JLmluaXQgICA9IGt6bV90aW1lcl9pbml0LAorCS5pbml0ID0ga3ptX3RpbWVyX2luaXQsCiB9OwogCi0vKgotICogVGhlIGZvbGxvd2luZyB1c2VzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MgZGVmaW5lIGluIGFyY2guaCBpbiBvcmRlciB0bwotICogaW5pdGlhbGl6ZSBfX21hY2hfZGVzY19LWk1fQVJNMTFfMDEgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KIE1BQ0hJTkVfU1RBUlQoS1pNX0FSTTExXzAxLCAiS3lvdG8gTWljcm9jb21wdXRlciBDby4sIEx0ZC4gS1pNLUFSTTExLTAxIikKLQkuYm9vdF9wYXJhbXMgICAgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0ga3ptX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IGt6bV9ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZrem1fdGltZXIsCisJLmJvb3RfcGFyYW1zID0gTVgzeF9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gPSBrem1fbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MzFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDMxX2luaXRfaXJxLAorCS50aW1lciA9ICZrem1fdGltZXIsCisJLmluaXRfbWFjaGluZSA9IGt6bV9ib2FyZF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMV8zZHMuYwppbmRleCAwZDY1ZGI4Li41NDRkM2U0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxXzNkcy5jCkBAIC0yMSw5ICsyMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzNzgzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9sNGYwMDI0MnQwMy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KKworI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzUsNiArMzksMTAgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogI2luY2x1ZGUgPG1hY2gvM2RzX2RlYnVnYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CisjaW5jbHVkZSA8bWFjaC9teDNmYi5oPgorI2luY2x1ZGUgPG1hY2gvbXgzX2NhbWVyYS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy1pbXgzMS5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTQyLDEwICs1MCw2IEBACiAvKiBDUExEIElSUSBsaW5lIGZvciBleHRlcm5hbCB1YXJ0LCBleHRlcm5hbCBldGhlcm5ldCBldGMgKi8KICNkZWZpbmUgRVhQSU9fUEFSRU5UX0lOVAlJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMSkKIAotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCi0gKi8KLQogc3RhdGljIGludCBteDMxXzNkc19waW5zW10gPSB7CiAJLyogVUFSVDEgKi8KIAlNWDMxX1BJTl9DVFMxX19DVFMxLApAQCAtNTMsNiArNTcsMTIgQEAKIAlNWDMxX1BJTl9UWEQxX19UWEQxLAogCU1YMzFfUElOX1JYRDFfX1JYRDEsCiAJSU9NVVhfTU9ERShNWDMxX1BJTl9HUElPMV8xLCBJT01VWF9DT05GSUdfR1BJTyksCisJLypTUEkwKi8KKwlNWDMxX1BJTl9DU1BJMV9TQ0xLX19TQ0xLLAorCU1YMzFfUElOX0NTUEkxX01PU0lfX01PU0ksCisJTVgzMV9QSU5fQ1NQSTFfTUlTT19fTUlTTywKKwlNWDMxX1BJTl9DU1BJMV9TUElfUkRZX19TUElfUkRZLAorCU1YMzFfUElOX0NTUEkxX1NTMl9fU1MyLCAvKiBDUyBmb3IgTENEICovCiAJLyogU1BJIDEgKi8KIAlNWDMxX1BJTl9DU1BJMl9TQ0xLX19TQ0xLLAogCU1YMzFfUElOX0NTUEkyX01PU0lfX01PU0ksCkBAIC0xMDAsNiArMTEwLDI1MiBAQAogCUlPTVVYX01PREUoTVgzMV9QSU5fUENfUldfQiwgSU9NVVhfQ09ORklHX0FMVDEpLAogCS8qIFVTQiBIb3N0MiByZXNldCAqLwogCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCX0JZUCwgSU9NVVhfQ09ORklHX0dQSU8pLAorCS8qIEkyQzEgKi8KKwlNWDMxX1BJTl9JMkNfQ0xLX19JMkMxX1NDTCwKKwlNWDMxX1BJTl9JMkNfREFUX19JMkMxX1NEQSwKKwkvKiBTREhDMSAqLworCU1YMzFfUElOX1NEMV9EQVRBM19fU0QxX0RBVEEzLAorCU1YMzFfUElOX1NEMV9EQVRBMl9fU0QxX0RBVEEyLAorCU1YMzFfUElOX1NEMV9EQVRBMV9fU0QxX0RBVEExLAorCU1YMzFfUElOX1NEMV9EQVRBMF9fU0QxX0RBVEEwLAorCU1YMzFfUElOX1NEMV9DTEtfX1NEMV9DTEssCisJTVgzMV9QSU5fU0QxX0NNRF9fU0QxX0NNRCwKKwlNWDMxX1BJTl9HUElPM18xX19HUElPM18xLCAvKiBDYXJkIGRldGVjdCAqLworCU1YMzFfUElOX0dQSU8zXzBfX0dQSU8zXzAsIC8qIE9FICovCisJLyogRnJhbWVidWZmZXIgKi8KKwlNWDMxX1BJTl9MRDBfX0xEMCwKKwlNWDMxX1BJTl9MRDFfX0xEMSwKKwlNWDMxX1BJTl9MRDJfX0xEMiwKKwlNWDMxX1BJTl9MRDNfX0xEMywKKwlNWDMxX1BJTl9MRDRfX0xENCwKKwlNWDMxX1BJTl9MRDVfX0xENSwKKwlNWDMxX1BJTl9MRDZfX0xENiwKKwlNWDMxX1BJTl9MRDdfX0xENywKKwlNWDMxX1BJTl9MRDhfX0xEOCwKKwlNWDMxX1BJTl9MRDlfX0xEOSwKKwlNWDMxX1BJTl9MRDEwX19MRDEwLAorCU1YMzFfUElOX0xEMTFfX0xEMTEsCisJTVgzMV9QSU5fTEQxMl9fTEQxMiwKKwlNWDMxX1BJTl9MRDEzX19MRDEzLAorCU1YMzFfUElOX0xEMTRfX0xEMTQsCisJTVgzMV9QSU5fTEQxNV9fTEQxNSwKKwlNWDMxX1BJTl9MRDE2X19MRDE2LAorCU1YMzFfUElOX0xEMTdfX0xEMTcsCisJTVgzMV9QSU5fVlNZTkMzX19WU1lOQzMsCisJTVgzMV9QSU5fSFNZTkNfX0hTWU5DLAorCU1YMzFfUElOX0ZQU0hJRlRfX0ZQU0hJRlQsCisJTVgzMV9QSU5fQ09OVFJBU1RfX0NPTlRSQVNULAorCS8qIENTSSAqLworCU1YMzFfUElOX0NTSV9ENl9fQ1NJX0Q2LAorCU1YMzFfUElOX0NTSV9EN19fQ1NJX0Q3LAorCU1YMzFfUElOX0NTSV9EOF9fQ1NJX0Q4LAorCU1YMzFfUElOX0NTSV9EOV9fQ1NJX0Q5LAorCU1YMzFfUElOX0NTSV9EMTBfX0NTSV9EMTAsCisJTVgzMV9QSU5fQ1NJX0QxMV9fQ1NJX0QxMSwKKwlNWDMxX1BJTl9DU0lfRDEyX19DU0lfRDEyLAorCU1YMzFfUElOX0NTSV9EMTNfX0NTSV9EMTMsCisJTVgzMV9QSU5fQ1NJX0QxNF9fQ1NJX0QxNCwKKwlNWDMxX1BJTl9DU0lfRDE1X19DU0lfRDE1LAorCU1YMzFfUElOX0NTSV9IU1lOQ19fQ1NJX0hTWU5DLAorCU1YMzFfUElOX0NTSV9NQ0xLX19DU0lfTUNMSywKKwlNWDMxX1BJTl9DU0lfUElYQ0xLX19DU0lfUElYQ0xLLAorCU1YMzFfUElOX0NTSV9WU1lOQ19fQ1NJX1ZTWU5DLAorCU1YMzFfUElOX0NTSV9ENV9fR1BJTzNfNSwgLyogQ01PUyBQV0ROICovCisJSU9NVVhfTU9ERShNWDMxX1BJTl9SSV9EVEUxLCBJT01VWF9DT05GSUdfR1BJTyksIC8qIENNT1MgcmVzZXQgKi8KK307CisKKy8qCisgKiBDYW1lcmEgc3VwcG9ydAorICovCitzdGF0aWMgcGh5c19hZGRyX3QgbXgzX2NhbWVyYV9iYXNlIF9faW5pdGRhdGE7CisjZGVmaW5lIE1YMzFfM0RTX0NBTUVSQV9CVUZfU0laRSBTWl84TQorCisjZGVmaW5lIE1YMzFfM0RTX0dQSU9fQ0FNRVJBX1BXIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQ1NJX0Q1KQorI2RlZmluZSBNWDMxXzNEU19HUElPX0NBTUVSQV9SU1QgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9SSV9EVEUxKQorCitzdGF0aWMgc3RydWN0IGdwaW8gbXgzMV8zZHNfY2FtZXJhX2dwaW9zW10gPSB7CisJeyBNWDMxXzNEU19HUElPX0NBTUVSQV9QVywgR1BJT0ZfT1VUX0lOSVRfSElHSCwgImNhbWVyYS1wb3dlciIgfSwKKwl7IE1YMzFfM0RTX0dQSU9fQ0FNRVJBX1JTVCwgR1BJT0ZfT1VUX0lOSVRfSElHSCwgImNhbWVyYS1yZXNldCIgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14MzFfM2RzX2NhbWVyYV9hbGxvY19kbWEodm9pZCkKK3sKKwlpbnQgZG1hOworCisJaWYgKCFteDNfY2FtZXJhX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZG1hID0gZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KCZteDNfY2FtZXJhLmRldiwKKwkJCQkJbXgzX2NhbWVyYV9iYXNlLCBteDNfY2FtZXJhX2Jhc2UsCisJCQkJCU1YMzFfM0RTX0NBTUVSQV9CVUZfU0laRSwKKwkJCQkJRE1BX01FTU9SWV9NQVAgfCBETUFfTUVNT1JZX0VYQ0xVU0lWRSk7CisKKwlpZiAoIShkbWEgJiBETUFfTUVNT1JZX01BUCkpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXgzMV8zZHNfY2FtZXJhX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9uKQoreworCS8qIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjYW1lcmEgKi8KKwlwcl9kZWJ1ZygiJXM6ICVzIHRoZSBjYW1lcmFcbiIsIF9fZnVuY19fLCBvbiA/ICJFTkFCTEUiIDogIkRJU0FCTEUiKTsKKwlncGlvX3NldF92YWx1ZShNWDMxXzNEU19HUElPX0NBTUVSQV9QVywgb24gPyAwIDogMSk7CisKKwlpZiAoIW9uKQorCQlnb3RvIG91dDsKKworCS8qIElmIGVuYWJsZWQsIGdpdmUgYSByZXNldCBpbXB1bHNlICovCisJZ3Bpb19zZXRfdmFsdWUoTVgzMV8zRFNfR1BJT19DQU1FUkFfUlNULCAwKTsKKwltc2xlZXAoMjApOworCWdwaW9fc2V0X3ZhbHVlKE1YMzFfM0RTX0dQSU9fQ0FNRVJBX1JTVCwgMSk7CisJbXNsZWVwKDEwMCk7CisKK291dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteDMxXzNkc19pMmNfY2FtZXJhID0geworCUkyQ19CT0FSRF9JTkZPKCJvdjI2NDAiLCAweDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBteDMxXzNkc19jYW1lcmFfcmVnc1tdID0geworCXsgLnN1cHBseSA9ICJjbW9zX3Zjb3JlIiB9LAorCXsgLnN1cHBseSA9ICJjbW9zXzJ2OCIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua19vdjI2NDAgPSB7CisJLmJ1c19pZAkJPSAwLAorCS5ib2FyZF9pbmZvCT0gJm14MzFfM2RzX2kyY19jYW1lcmEsCisJLmkyY19hZGFwdGVyX2lkCT0gMCwKKwkucG93ZXIJCT0gbXgzMV8zZHNfY2FtZXJhX3Bvd2VyLAorCS5yZWd1bGF0b3JzCT0gbXgzMV8zZHNfY2FtZXJhX3JlZ3MsCisJLm51bV9yZWd1bGF0b3JzCT0gQVJSQVlfU0laRShteDMxXzNkc19jYW1lcmFfcmVncyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDMxXzNkc19vdjI2NDAgPSB7CisJLm5hbWUJPSAic29jLWNhbWVyYS1wZHJ2IiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua19vdjI2NDAsCisJfSwKK307CisKK3N0cnVjdCBteDNfY2FtZXJhX3BkYXRhIG14MzFfM2RzX2NhbWVyYV9wZGF0YSA9IHsKKwkuZG1hX2Rldgk9ICZteDNfaXB1LmRldiwKKwkuZmxhZ3MJCT0gTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTAsCisJLm1jbGtfMTBraHoJPSAyNjAwLAorfTsKKworLyoKKyAqIEZCIHN1cHBvcnQKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgZmJfbW9kZWRiW10gPSB7CisJewkvKiA0ODB4NjQwIEAgNjAgSHogKi8KKwkJLm5hbWUJCT0gIkVwc29uLVZHQSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDQ4MCwKKwkJLnlyZXMJCT0gNjQwLAorCQkucGl4Y2xvY2sJPSA0MTcwMSwKKwkJLmxlZnRfbWFyZ2luCT0gMjAsCisJCS5yaWdodF9tYXJnaW4JPSA0MSwKKwkJLnVwcGVyX21hcmdpbgk9IDEwLAorCQkubG93ZXJfbWFyZ2luCT0gNSwKKwkJLmhzeW5jX2xlbgk9IDIwLAorCQkudnN5bmNfbGVuCT0gMTAsCisJCS5zeW5jCQk9IEZCX1NZTkNfT0VfQUNUX0hJR0ggfCBGQl9TWU5DX0NMS19JTlZFUlQsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGlwdV9wbGF0Zm9ybV9kYXRhIG14M19pcHVfZGF0YSA9IHsKKwkuaXJxX2Jhc2UgPSBNWENfSVBVX0lSUV9TVEFSVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXgzZmJfcGxhdGZvcm1fZGF0YSBteDNmYl9wZGF0YSA9IHsKKwkuZG1hX2Rldgk9ICZteDNfaXB1LmRldiwKKwkubmFtZQkJPSAiRXBzb24tVkdBIiwKKwkubW9kZQkJPSBmYl9tb2RlZGIsCisJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUoZmJfbW9kZWRiKSwKK307CisKKy8qIExDRCAqLworc3RhdGljIHN0cnVjdCBsNGYwMDI0MnQwM19wZGF0YSBteDMxXzNkc19sNGYwMDI0MnQwM19wZGF0YSA9IHsKKwkucmVzZXRfZ3BpbwkJPSBJT01VWF9UT19HUElPKE1YMzFfUElOX0xDUzEpLAorCS5kYXRhX2VuYWJsZV9ncGlvCT0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TRVJfUlMpLAorCS5jb3JlX3N1cHBseQkJPSAibGNkXzJ2OCIsCisJLmlvX3N1cHBseQkJPSAidmRkX2xjZGlvIiwKK307CisKKy8qCisgKiBTdXBwb3J0IGZvciBTRCBjYXJkIHNsb3QgaW4gcGVyc29uYWxpdHkgYm9hcmQKKyAqLworI2RlZmluZSBNWDMxXzNEU19HUElPX1NESEMxX0NEIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzNfMSkKKyNkZWZpbmUgTVgzMV8zRFNfR1BJT19TREhDMV9CRSBJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8zXzApCisKK3N0YXRpYyBzdHJ1Y3QgZ3BpbyBteDMxXzNkc19zZGhjMV9ncGlvc1tdID0geworCXsgTVgzMV8zRFNfR1BJT19TREhDMV9DRCwgR1BJT0ZfSU4sICJzZGhjMS1jYXJkLWRldGVjdCIgfSwKKwl7IE1YMzFfM0RTX0dQSU9fU0RIQzFfQkUsIEdQSU9GX09VVF9JTklUX0xPVywgInNkaGMxLWJ1cy1lbiIgfSwKK307CisKK3N0YXRpYyBpbnQgbXgzMV8zZHNfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdF9hcnJheShteDMxXzNkc19zZGhjMV9ncGlvcywKKwkJCQkgQVJSQVlfU0laRShteDMxXzNkc19zZGhjMV9ncGlvcykpOworCWlmIChyZXQpIHsKKwkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgdGhlIFNEL01NQyBHUElPcy5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPM18xKSwKKwkJCSAgZGV0ZWN0X2lycSwgSVJRRl9ESVNBQkxFRCB8CisJCQkgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSAgInNkaGMxLWRldGVjdCIsIGRhdGEpOworCWlmIChyZXQpIHsKKwkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgdGhlIFNEL01NQyBjYXJkLWRldGVjdCBJUlEuXG4iKTsKKwkJZ290byBncGlvX2ZyZWU7CisJfQorCisJcmV0dXJuIDA7CisKK2dwaW9fZnJlZToKKwlncGlvX2ZyZWVfYXJyYXkobXgzMV8zZHNfc2RoYzFfZ3Bpb3MsCisJCQlBUlJBWV9TSVpFKG14MzFfM2RzX3NkaGMxX2dwaW9zKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXgzMV8zZHNfc2RoYzFfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8zXzEpLCBkYXRhKTsKKwlncGlvX2ZyZWVfYXJyYXkobXgzMV8zZHNfc2RoYzFfZ3Bpb3MsCisJCQkgQVJSQVlfU0laRShteDMxXzNkc19zZGhjMV9ncGlvcykpOworfQorCitzdGF0aWMgdm9pZCBteDMxXzNkc19zZGhjMV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJLyoKKwkgKiBXaGlsZSB0aGUgdm9sdGFnZSBzdHVmZiBpcyBkb25lIGJ5IHRoZSBkcml2ZXIsIGFjdGl2YXRlIHRoZQorCSAqIEJ1ZmZlciBFbmFibGUgUGluIG9ubHkgaWYgdGhlcmUgaXMgYSBjYXJkIGluIHNsb3QgdG8gZml4IHRoZSBjYXJkCisJICogdm9sdGFnZSBpc3N1ZSBjYXVzZWQgYnkgYmktZGlyZWN0aW9uYWwgY2hpcCBUWEIwMTA4IG9uIDNTdGFjay4KKwkgKiBEb25lIGhlcmUgYmVjYXVzZSBhdCB0aGlzIHN0YWdlIHdlIGhhdmUgZm9yIHN1cmUgYSBkZWJvdW5jZWQgdmFsdWUKKwkgKiBvZiB0aGUgcHJlc2VuY2Ugb2YgdGhlIGNhcmQsIHNob3dlZCBieSB0aGUgdmFsdWUgb2YgdmRkLgorCSAqIDcgPT0gaWxvZzIoTU1DX1ZERF8xNjVfMTk1KQorCSAqLworCWlmICh2ZGQgPiA3KQorCQlncGlvX3NldF92YWx1ZShNWDMxXzNEU19HUElPX1NESEMxX0JFLCAxKTsKKwllbHNlCisJCWdwaW9fc2V0X3ZhbHVlKE1YMzFfM0RTX0dQSU9fU0RIQzFfQkUsIDApOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhID0geworCS5pbml0CQk9IG14MzFfM2RzX3NkaGMxX2luaXQsCisJLmV4aXQJCT0gbXgzMV8zZHNfc2RoYzFfZXhpdCwKKwkuc2V0cG93ZXIJPSBteDMxXzNkc19zZGhjMV9zZXRwb3dlciwKIH07CiAKIC8qCkBAIC0xMzgsNyArMzk0LDcxIEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgbXgzMV8zZHNfcmVndWxhdG9yc1tdID0geworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHZtbWMyX2NvbnN1bWVyc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAibXhjLW1tYy4wIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdm1tYzJfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzAwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCQkgIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUodm1tYzJfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSB2bW1jMl9jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdm1tYzFfY29uc3VtZXJzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgibGNkXzJ2OCIsIE5VTEwpLAorCVJFR1VMQVRPUl9TVVBQTFkoImNtb3NfMnY4IiwgInNvYy1jYW1lcmEtcGRydi4wIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdm1tYzFfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAyODAwMDAwLAorCQkubWF4X3VWID0gMjgwMDAwMCwKKwkJLmFwcGx5X3VWID0gMSwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCQkgIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUodm1tYzFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSB2bW1jMV9jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdmdlbl9jb25zdW1lcnNbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRfbGNkaW8iLCBOVUxMKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2Z2VuX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWID0gMTgwMDAwMCwKKwkJLm1heF91ViA9IDE4MDAwMDAsCisJCS5hcHBseV91ViA9IDEsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHZnZW5fY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSB2Z2VuX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB2dmliX2NvbnN1bWVyc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoImNtb3NfdmNvcmUiLCAic29jLWNhbWVyYS1wZHJ2LjAiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2dmliX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWID0gMTMwMDAwMCwKKwkJLm1heF91ViA9IDEzMDAwMDAsCisJCS5hcHBseV91ViA9IDEsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHZ2aWJfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSB2dmliX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfaW5pdF9kYXRhIG14MzFfM2RzX3JlZ3VsYXRvcnNbXSA9IHsKIAl7CiAJCS5pZCA9IE1DMTM3ODNfUkVHX1BXR1QxU1BJLCAvKiBQb3dlciBHYXRlIGZvciBBUk0gY29yZS4gKi8KIAkJLmluaXRfZGF0YSA9ICZwd2d0eF9pbml0LApAQCAtMTUyLDE3ICs0NzIsMzggQEAKIAl9LCB7CiAJCS5pZCA9IE1DMTM3ODNfUkVHX0dQTzMsIC8qIFR1cm4gb24gMy4zViAqLwogCQkuaW5pdF9kYXRhID0gJmdwb19pbml0LAorCX0sIHsKKwkJLmlkID0gTUMxMzc4M19SRUdfVk1NQzIsIC8qIFBvd2VyIE1NQy9TRCwgV2lGaS9CbHVldG9vdGguICovCisJCS5pbml0X2RhdGEgPSAmdm1tYzJfaW5pdCwKKwl9LCB7CisJCS5pZCA9IE1DMTM3ODNfUkVHX1ZNTUMxLCAvKiBQb3dlciBMQ0QsIENNT1MsIEZNLCBHUFMsIEFjY2VsLiAqLworCQkuaW5pdF9kYXRhID0gJnZtbWMxX2luaXQsCisJfSwgeworCQkuaWQgPSBNQzEzNzgzX1JFR19WR0VOLCAgLyogUG93ZXIgTENEICovCisJCS5pbml0X2RhdGEgPSAmdmdlbl9pbml0LAorCX0sIHsKKwkJLmlkID0gTUMxMzc4M19SRUdfVlZJQiwgIC8qIFBvd2VyIENNT1MgKi8KKwkJLmluaXRfZGF0YSA9ICZ2dmliX2luaXQsCiAJfSwKIH07CiAKIC8qIE1DMTM3ODMgKi8KLXN0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIG1jMTM3ODNfcGRhdGEgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWMxM3h4eF9wbGF0Zm9ybV9kYXRhIG1jMTM3ODNfcGRhdGEgX19pbml0ZGF0YSA9IHsKIAkucmVndWxhdG9ycyA9IG14MzFfM2RzX3JlZ3VsYXRvcnMsCiAJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShteDMxXzNkc19yZWd1bGF0b3JzKSwKLQkuZmxhZ3MgID0gTUMxMzc4M19VU0VfUkVHVUxBVE9SIHwgTUMxMzc4M19VU0VfVE9VQ0hTQ1JFRU4sCisJLmZsYWdzICA9IE1DMTNYWFhfVVNFX1JFR1VMQVRPUiB8IE1DMTNYWFhfVVNFX1RPVUNIU0NSRUVOCiB9OwogCiAvKiBTUEkgKi8KK3N0YXRpYyBpbnQgc3BpMF9pbnRlcm5hbF9jaGlwc2VsZWN0W10gPSB7CisJTVhDX1NQSV9DUygyKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgc3BpMF9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuY2hpcHNlbGVjdAk9IHNwaTBfaW50ZXJuYWxfY2hpcHNlbGVjdCwKKwkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKHNwaTBfaW50ZXJuYWxfY2hpcHNlbGVjdCksCit9OworCiBzdGF0aWMgaW50IHNwaTFfaW50ZXJuYWxfY2hpcHNlbGVjdFtdID0gewogCU1YQ19TUElfQ1MoMCksCiAJTVhDX1NQSV9DUygyKSwKQEAgLTE4Miw2ICs1MjMsMTIgQEAKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbWMxMzc4M19wZGF0YSwKIAkJLmlycQkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMyksCiAJCS5tb2RlID0gU1BJX0NTX0hJR0gsCisJfSwgeworCQkubW9kYWxpYXMJPSAibDRmMDAyNDJ0MDMiLAorCQkubWF4X3NwZWVkX2h6CT0gNTAwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLCAvKiBTUzIgKi8KKwkJLnBsYXRmb3JtX2RhdGEJPSAmbXgzMV8zZHNfbDRmMDAyNDJ0MDNfcGRhdGEsCiAJfSwKIH07CiAKQEAgLTI0NSw2ICs1OTIsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG14MzFfM2RzX290Z19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MzFfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCk7Cit9CisKIHN0YXRpYyBpbnQgbXgzMV8zZHNfaG9zdDJfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCBlcnI7CkBAIC0yNzYsMjUgKzYyOCwyNSBAQAogCiAJbWRlbGF5KDEpOwogCWdwaW9fc2V0X3ZhbHVlKFVTQkgyX1JTVF9CLCAxKTsKLQlyZXR1cm4gMDsKKworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gbXgzMV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKTsKIAogdXNib3RnX2ZyZWVfcmVzZXQ6CiAJZ3Bpb19mcmVlKFVTQkgyX1JTVF9CKTsKIAlyZXR1cm4gZXJyOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCiBzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgb3RnX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLmluaXQJPSBteDMxXzNkc19vdGdfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSBfX2luaXRkYXRhID0gewogCS5pbml0ID0gbXgzMV8zZHNfaG9zdDJfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCwKIH07Ci0jZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYm90Z19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub3BlcmF0aW5nX21vZGUgPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCkBAIC0zMjAsMTkgKzY3MiwxOCBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi0vKgotICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgzMV8zZHNfbWFwX2lvKHZvaWQpCi17Ci0JbXgzMV9tYXBfaW8oKTsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbXgzMV8zZHNfaTJjMF9kYXRhIF9faW5pdGNvbnN0ID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKIAotLyohCi0gKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14MzFfM2RzX292MjY0MCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDMxXzNkc19pbml0KHZvaWQpCiB7CisJaW50IHJldDsKKwogCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKG14MzFfM2RzX3BpbnMsIEFSUkFZX1NJWkUobXgzMV8zZHNfcGlucyksCiAJCQkJICAgICAgIm14MzFfM2RzIik7CiAKQEAgLTM0MywyMCArNjk0LDIyIEBACiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8obXgzMV8zZHNfc3BpX2RldnMsCiAJCQkJCQlBUlJBWV9TSVpFKG14MzFfM2RzX3NwaV9kZXZzKSk7CiAKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwogCWlteDMxX2FkZF9pbXhfa2V5cGFkKCZteDMxXzNkc19rZXltYXBfZGF0YSk7CiAKIAlteDMxXzNkc191c2JvdGdfaW5pdCgpOwotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQogCWlmIChvdGdfbW9kZV9ob3N0KSB7Ci0JCW90Z19wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQkJVUxQSV9PVEdfRFJWVkJVUyB8IFVMUElfT1RHX0RSVlZCVVNfRVhUKTsKLQotCQlpbXgzMV9hZGRfbXhjX2VoY2lfb3RnKCZvdGdfcGRhdGEpOworCQlvdGdfcGRhdGEub3RnID0gaW14X290Z191bHBpX2NyZWF0ZShVTFBJX09UR19EUlZWQlVTIHwKKwkJCQlVTFBJX09UR19EUlZWQlVTX0VYVCk7CisJCWlmIChvdGdfcGRhdGEub3RnKQorCQkJaW14MzFfYWRkX214Y19laGNpX290Zygmb3RnX3BkYXRhKTsKIAl9Ci0JdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7Ci0JaW14MzFfYWRkX214Y19laGNpX2hzKDIsICZ1c2JoMl9wZGF0YSk7Ci0jZW5kaWYKKwl1c2JoMl9wZGF0YS5vdGcgPSBpbXhfb3RnX3VscGlfY3JlYXRlKFVMUElfT1RHX0RSVlZCVVMgfAorCQkJVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCWlmICh1c2JoMl9wZGF0YS5vdGcpCisJCWlteDMxX2FkZF9teGNfZWhjaV9ocygyLCAmdXNiaDJfcGRhdGEpOworCiAJaWYgKCFvdGdfbW9kZV9ob3N0KQogCQlpbXgzMV9hZGRfZnNsX3VzYjJfdWRjKCZ1c2JvdGdfcGRhdGEpOwogCkBAIC0zNjQsNiArNzE3LDI2IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkluaXQgb2YgdGhlIGRlYnVnIGJvYXJkIGZhaWxlZCwgYWxsICIKIAkJCQkgICAgImRldmljZXMgb24gdGhlIGRlYnVnIGJvYXJkIGFyZSB1bnVzYWJsZS5cbiIpOwogCWlteDMxX2FkZF9pbXgyX3dkdChOVUxMKTsKKwlpbXgzMV9hZGRfaW14X2kyYzAoJm14MzFfM2RzX2kyYzBfZGF0YSk7CisJaW14MzFfYWRkX214Y19tbWMoMCwgJnNkaGMxX3BkYXRhKTsKKworCWlteDMxX2FkZF9zcGlfaW14MCgmc3BpMF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2lwdSwgJm14M19pcHVfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2ZiLCAmbXgzZmJfcGRhdGEpOworCisJLyogQ1NJICovCisJLyogQ2FtZXJhIHBvd2VyOiBkZWZhdWx0IC0gb2ZmICovCisJcmV0ID0gZ3Bpb19yZXF1ZXN0X2FycmF5KG14MzFfM2RzX2NhbWVyYV9ncGlvcywKKwkJCQkgQVJSQVlfU0laRShteDMxXzNkc19jYW1lcmFfZ3Bpb3MpKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlcXVlc3QgY2FtZXJhIGdwaW9zIik7CisJCWljbGlua19vdjI2NDAucG93ZXIgPSBOVUxMOworCX0KKworCWlmICghbXgzMV8zZHNfY2FtZXJhX2FsbG9jX2RtYSgpKQorCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfY2FtZXJhLCAmbXgzMV8zZHNfY2FtZXJhX3BkYXRhKTsKKwllbHNlCisJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBtZW1vcnkgZm9yIGNhbWVyYSIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgzMV8zZHNfdGltZXJfaW5pdCh2b2lkKQpAQCAtMzc1LDE1ICs3NDgsMjIgQEAKIAkuaW5pdAk9IG14MzFfM2RzX3RpbWVyX2luaXQsCiB9OwogCi0vKgotICogVGhlIGZvbGxvd2luZyB1c2VzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MgZGVmaW5lZCBpbiBhcmNoLmggaW4gb3JkZXIgdG8KLSAqIGluaXRpYWxpemUgX19tYWNoX2Rlc2NfTVgzMV8zRFMgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBteDMxXzNkc19yZXNlcnZlKHZvaWQpCit7CisJLyogcmVzZXJ2ZSBNWDMxXzNEU19DQU1FUkFfQlVGX1NJWkUgYnl0ZXMgZm9yIG14My1jYW1lcmEgKi8KKwlteDNfY2FtZXJhX2Jhc2UgPSBtZW1ibG9ja19hbGxvYyhNWDMxXzNEU19DQU1FUkFfQlVGX1NJWkUsCisJCQkJCSBNWDMxXzNEU19DQU1FUkFfQlVGX1NJWkUpOworCW1lbWJsb2NrX2ZyZWUobXgzX2NhbWVyYV9iYXNlLCBNWDMxXzNEU19DQU1FUkFfQlVGX1NJWkUpOworCW1lbWJsb2NrX3JlbW92ZShteDNfY2FtZXJhX2Jhc2UsIE1YMzFfM0RTX0NBTUVSQV9CVUZfU0laRSk7Cit9CisKIE1BQ0hJTkVfU1RBUlQoTVgzMV8zRFMsICJGcmVlc2NhbGUgTVgzMVBESyAoM0RTKSIpCiAJLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KLQkuYm9vdF9wYXJhbXMgICAgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgzMV8zZHNfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MzFfM2RzX3RpbWVyLAorCS5ib290X3BhcmFtcyA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgzMV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MzFfaW5pdF9pcnEsCisJLnRpbWVyID0gJm14MzFfM2RzX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBteDMxXzNkc19pbml0LAorCS5yZXNlcnZlID0gbXgzMV8zZHNfcmVzZXJ2ZSwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWFkcy5jCmluZGV4IDg4Yjk3ZDYuLjRlNGI3ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWFkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWFkcy5jCkBAIC02OSwxMiArNjksOCBAQAogI2RlZmluZSBFWFBJT19JTlRfWFVBUlRfSU5UQgkoTVhDX0VYUF9JT19CQVNFICsgMTEpCiAKICNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMJMTYKLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgotICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQotLyohCisvKgogICogVGhlIHNlcmlhbCBwb3J0IGRlZmluaXRpb24gc3RydWN0dXJlLgogICovCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CkBAIC0xMTAsMTQgKzEwNiw3IEBACiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgbXhjX2luaXRfZXh0dWFydCh2b2lkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YX01PRFVMRSkKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CkBAIC0xMzQsMTEgKzEyMyw2IEBACiAJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModWFydF9waW5zLCBBUlJBWV9TSVpFKHVhcnRfcGlucyksICJ1YXJ0LTAiKTsKIAlpbXgzMV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKIH0KLSNlbHNlIC8qICFTRVJJQUxfSU1YICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKLXsKLX0KLSNlbmRpZiAvKiAhU0VSSUFMX0lNWCAqLwogCiBzdGF0aWMgdm9pZCBteDMxYWRzX2V4cGlvX2lycV9oYW5kbGVyKHUzMiBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKQEAgLTE2MCw3ICsxNDQsNyBAQAogCiAvKgogICogRGlzYWJsZSBhbiBleHBpbyBwaW4ncyBpbnRlcnJ1cHQgYnkgc2V0dGluZyB0aGUgYml0IGluIHRoZSBpbXIuCi0gKiBAcGFyYW0gaXJxICAgICAgICAgICBhbiBleHBpbyB2aXJ0dWFsIGlycSBudW1iZXIKKyAqIEBwYXJhbSBkCWFuIGV4cGlvIHZpcnR1YWwgaXJxIGRlc2NyaXB0aW9uCiAgKi8KIHN0YXRpYyB2b2lkIGV4cGlvX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKQEAgLTE3Miw3ICsxNTYsNyBAQAogCiAvKgogICogQWNrbm93bGVkZ2UgYW4gZXhwYW5kZWQgaW8gcGluJ3MgaW50ZXJydXB0IGJ5IGNsZWFyaW5nIHRoZSBiaXQgaW4gdGhlIGlzci4KLSAqIEBwYXJhbSBpcnEgICAgICAgICAgIGFuIGV4cGFuZGVkIGlvIHZpcnR1YWwgaXJxIG51bWJlcgorICogQHBhcmFtIGQJYW4gZXhwaW8gdmlydHVhbCBpcnEgZGVzY3JpcHRpb24KICAqLwogc3RhdGljIHZvaWQgZXhwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CkBAIC0xODMsNyArMTY3LDcgQEAKIAogLyoKICAqIEVuYWJsZSBhIGV4cGlvIHBpbidzIGludGVycnVwdCBieSBjbGVhcmluZyB0aGUgYml0IGluIHRoZSBpbXIuCi0gKiBAcGFyYW0gaXJxICAgICAgICAgICBhIGV4cGlvIHZpcnR1YWwgaXJxIG51bWJlcgorICogQHBhcmFtIGQJYW4gZXhwaW8gdmlydHVhbCBpcnEgZGVzY3JpcHRpb24KICAqLwogc3RhdGljIHZvaWQgZXhwaW9fdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CkBAIC00NzYsNyArNDYwLDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0kyQ19JTVgpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19JTVhfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG14MzFhZHNfaTJjMV9kZXZpY2VzW10gPSB7CiAjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCiAJewpAQCAtNDk3LDExICs0ODAsNiBAQAogCiAJaW14MzFfYWRkX2lteF9pMmMxKE5VTEwpOwogfQotI2Vsc2UKLXN0YXRpYyB2b2lkIG14Y19pbml0X2kyYyh2b2lkKQotewotfQotI2VuZGlmCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3NpX3BpbnNbXSA9IHsKIAlNWDMxX1BJTl9TRlM1X19TRlM1LApAQCAtNTE2LDkgKzQ5NCw3IEBACiAJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMoc3NpX3BpbnMsIEFSUkFZX1NJWkUoc3NpX3BpbnMpLCAic3NpIik7CiB9CiAKLS8qIQotICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBzdGF0aWMgbWFwcGluZ3MgZm9yIHRoZSBpLk1YMzFBRFMgYm9hcmQuCi0gKi8KKy8qIHN0YXRpYyBtYXBwaW5ncyAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxYWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBNWDMxX0NTNF9CQVNFX0FERFJfVklSVCwKQEAgLTUyOCw5ICs1MDQsNiBAQAogCX0sCiB9OwogCi0vKiEKLSAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KLSAqLwogc3RhdGljIHZvaWQgX19pbml0IG14MzFhZHNfbWFwX2lvKHZvaWQpCiB7CiAJbXgzMV9tYXBfaW8oKTsKQEAgLTU0MywxMCArNTE2LDcgQEAKIAlteDMxYWRzX2luaXRfZXhwaW8oKTsKIH0KIAotLyohCi0gKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzMWFkc19pbml0KHZvaWQpCiB7CiAJbXhjX2luaXRfZXh0dWFydCgpOwogCW14Y19pbml0X2lteF91YXJ0KCk7CkBAIC01NjMsMTUgKzUzMywxMiBAQAogCS5pbml0CT0gbXgzMWFkc190aW1lcl9pbml0LAogfTsKIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgdXNlcyBzdGFuZGFyZCBrZXJuZWwgbWFjcm9zIGRlZmluZWQgaW4gYXJjaC5oIGluIG9yZGVyIHRvCi0gKiBpbml0aWFsaXplIF9fbWFjaF9kZXNjX01YMzFBRFMgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KIE1BQ0hJTkVfU1RBUlQoTVgzMUFEUywgIkZyZWVzY2FsZSBNWDMxQURTIikKIAkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLwotCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDMxYWRzX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDMxYWRzX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZteDMxYWRzX3RpbWVyLAorCS5ib290X3BhcmFtcyA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgzMWFkc19tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MzFhZHNfaW5pdF9pcnEsCisJLnRpbWVyID0gJm14MzFhZHNfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IG14MzFhZHNfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaWxseS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGlsbHkuYwppbmRleCAyYzU5NTQ4Li5lZDk1NzQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaWxseS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpbGx5LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KQEAgLTExMCw1NSArMTExLDkgQEAKIAogLyogVVNCICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKLQogI2RlZmluZSBVU0JfUEFEX0NGRyAoUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfSFlTX0NNT1MgfCBcCiAJCQlQQURfQ1RMX09ERV9DTU9TIHwgUEFEX0NUTF8xMDBLX1BVKQogCi1zdGF0aWMgaW50IHVzYm90Z19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JdW5zaWduZWQgaW50IHBpbnNbXSA9IHsKLQkJTVgzMV9QSU5fVVNCT1RHX0RBVEEwX19VU0JPVEdfREFUQTAsCi0JCU1YMzFfUElOX1VTQk9UR19EQVRBMV9fVVNCT1RHX0RBVEExLAotCQlNWDMxX1BJTl9VU0JPVEdfREFUQTJfX1VTQk9UR19EQVRBMiwKLQkJTVgzMV9QSU5fVVNCT1RHX0RBVEEzX19VU0JPVEdfREFUQTMsCi0JCU1YMzFfUElOX1VTQk9UR19EQVRBNF9fVVNCT1RHX0RBVEE0LAotCQlNWDMxX1BJTl9VU0JPVEdfREFUQTVfX1VTQk9UR19EQVRBNSwKLQkJTVgzMV9QSU5fVVNCT1RHX0RBVEE2X19VU0JPVEdfREFUQTYsCi0JCU1YMzFfUElOX1VTQk9UR19EQVRBN19fVVNCT1RHX0RBVEE3LAotCQlNWDMxX1BJTl9VU0JPVEdfQ0xLX19VU0JPVEdfQ0xLLAotCQlNWDMxX1BJTl9VU0JPVEdfRElSX19VU0JPVEdfRElSLAotCQlNWDMxX1BJTl9VU0JPVEdfTlhUX19VU0JPVEdfTlhULAotCQlNWDMxX1BJTl9VU0JPVEdfU1RQX19VU0JPVEdfU1RQLAotCX07Ci0KLQlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhwaW5zLCBBUlJBWV9TSVpFKHBpbnMpLCAiVVNCIE9URyIpOwotCi0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEwLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEExLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEyLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEzLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE0LCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE1LCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE2LCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE3LCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0NMSywgVVNCX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19ESVIsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfTlhULCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX1NUUCwgVVNCX1BBRF9DRkcpOwotCi0JbXhjX2lvbXV4X3NldF9ncHIoTVVYX1BHUF9VU0JfNFdJUkUsIHRydWUpOwotCW14Y19pb211eF9zZXRfZ3ByKE1VWF9QR1BfVVNCX0NPTU1PTiwgdHJ1ZSk7Ci0KLQkvKiBjaGlwIHNlbGVjdCAqLwotCW14Y19pb211eF9hbGxvY19waW4oSU9NVVhfTU9ERShNWDMxX1BJTl9EVFJfRENFMiwgSU9NVVhfQ09ORklHX0dQSU8pLAotCQkJCSJVU0JPVEdfQ1MiKTsKLQlncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EVFJfRENFMiksICJVU0JIMSBDUyIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0RUUl9EQ0UyKSwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB1c2JoMV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHBpbnNbXSA9IHsKQEAgLTE4Myw3ICsxMzgsMTAgQEAKIAogCW14Y19pb211eF9zZXRfZ3ByKE1VWF9QR1BfVVNCX1NVU1BFTkQsIHRydWUpOwogCi0JcmV0dXJuIDA7CisJbWRlbGF5KDEwKTsKKworCXJldHVybiBteDMxX2luaXRpYWxpemVfdXNiX2h3KHBkZXYtPmlkLCBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQgfAorCQkJTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkpOwogfQogCiBzdGF0aWMgaW50IHVzYmgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTIyMCw0MSArMTc4LDMwIEBACiAJZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRFRSX0RDRTEpLCAiVVNCSDIgQ1MiKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EVFJfRENFMSksIDApOwogCi0JcmV0dXJuIDA7Ci19CisJbWRlbGF5KDEwKTsKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYm90Z19wZGF0YSA9IHsKLQkuaW5pdAk9IHVzYm90Z19pbml0LAotCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAotfTsKKwlyZXR1cm4gbXgzMV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKTsKK30KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5pbml0CT0gdXNiaDFfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JIHwgTVhDX0VIQ0lfU0VSSUFMLAotCS5mbGFncwk9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JLAogfTsKIAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmluaXQJPSB1c2JoMl9pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAogfTsKIAogc3RhdGljIHZvaWQgbGlsbHkxMTMxX3VzYl9pbml0KHZvaWQpCiB7Ci0JdXNib3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKLQkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwotCXVzYmgyX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKLQkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwotCiAJaW14MzFfYWRkX214Y19laGNpX2hzKDEsICZ1c2JoMV9wZGF0YSk7Ci0JaW14MzFfYWRkX214Y19laGNpX2hzKDIsICZ1c2JoMl9wZGF0YSk7Ci19CiAKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbGlsbHkxMTMxX3VzYl9pbml0KHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX1VTQl9VTFBJICovCisJdXNiaDJfcGRhdGEub3RnID0gaW14X290Z191bHBpX2NyZWF0ZShVTFBJX09UR19EUlZWQlVTIHwKKwkJCVVMUElfT1RHX0RSVlZCVVNfRVhUKTsKKwlpZiAodXNiaDJfcGRhdGEub3RnKQorCQlpbXgzMV9hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKK30KIAogLyogU1BJICovCiAKQEAgLTI3NCw4ICsyMjEsOCBAQAogCS5udW1fY2hpcHNlbGVjdCA9IEFSUkFZX1NJWkUoc3BpX2ludGVybmFsX2NoaXBzZWxlY3QpLAogfTsKIAotc3RhdGljIHN0cnVjdCBtYzEzNzgzX3BsYXRmb3JtX2RhdGEgbWMxMzc4M19wZGF0YSBfX2luaXRkYXRhID0gewotCS5mbGFncyA9IE1DMTM3ODNfVVNFX1JUQyB8IE1DMTM3ODNfVVNFX1RPVUNIU0NSRUVOLAorc3RhdGljIHN0cnVjdCBtYzEzeHh4X3BsYXRmb3JtX2RhdGEgbWMxMzc4M19wZGF0YSBfX2luaXRkYXRhID0geworCS5mbGFncyA9IE1DMTNYWFhfVVNFX1JUQyB8IE1DMTNYWFhfVVNFX1RPVUNIU0NSRUVOLAogfTsKIAogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBtYzEzNzgzX2RldiBfX2luaXRkYXRhID0gewpAQCAtMzQ3LDEwICsyOTQsMTAgQEAKIH07CiAKIE1BQ0hJTkVfU1RBUlQoTElMTFkxMTMxLCAiSU5DTyBzdGFydGVjIExJTExZLTExMzEiKQotCS5ib290X3BhcmFtcwk9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvCQk9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycQk9IG14MzFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IG14MzFsaWxseV9ib2FyZF9pbml0LAotCS50aW1lcgkJPSAmbXgzMWxpbGx5X3RpbWVyLAorCS5ib290X3BhcmFtcyA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXgzMV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgzMV9pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MzFfaW5pdF9pcnEsCisJLnRpbWVyID0gJm14MzFsaWxseV90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXgzMWxpbGx5X2JvYXJkX2luaXQsCiBNQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaXRlLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaXRlLmMKaW5kZXggOWU2NGM2Ni4uMjRhMjFhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGl0ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpdGUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMTExLDkgKzExMiw5IEBACiAJLm51bV9jaGlwc2VsZWN0CT0gQVJSQVlfU0laRShzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBtYzEzNzgzX3BkYXRhIF9faW5pdGRhdGEgPSB7Ci0JLmZsYWdzICA9IE1DMTM3ODNfVVNFX1JUQyB8Ci0JCSAgTUMxMzc4M19VU0VfUkVHVUxBVE9SLAorc3RhdGljIHN0cnVjdCBtYzEzeHh4X3BsYXRmb3JtX2RhdGEgbWMxMzc4M19wZGF0YSBfX2luaXRkYXRhID0geworCS5mbGFncyAgPSBNQzEzWFhYX1VTRV9SVEMgfAorCQkgIE1DMTNYWFhfVVNFX1JFR1VMQVRPUiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gbWMxMzc4M19zcGlfZGV2IF9faW5pdGRhdGEgPSB7CkBAIC0xMjksNyArMTMwLDYgQEAKICAqIFVTQgogICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKICNkZWZpbmUgVVNCX1BBRF9DRkcgKFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX0hZU19DTU9TIHwgXAogCQkJUEFEX0NUTF9PREVfQ01PUyB8IFBBRF9DVExfMTAwS19QVSkKIApAQCAtMTY3LDE1ICsxNjcsMTUgQEAKIAlncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EVFJfRENFMSksICJVU0JIMiBDUyIpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0RUUl9EQ0UxKSwgMCk7CiAKLQlyZXR1cm4gMDsKKwltZGVsYXkoMTApOworCisJcmV0dXJuIG14MzFfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSBfX2luaXRkYXRhID0gewogCS5pbml0ICAgPSB1c2JoMl9pbml0LAogCS5wb3J0c2MgPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCi0JLmZsYWdzICA9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCwKIH07Ci0jZW5kaWYKIAogLyoKICAqIE5PUiBmbGFzaApAQCAtMjI3LDcgKzIyNyw3IEBACiBzdGF0aWMgaW50IG14MzFsaXRlX2Jhc2Vib2FyZDsKIGNvcmVfcGFyYW0obXgzMWxpdGVfYmFzZWJvYXJkLCBteDMxbGl0ZV9iYXNlYm9hcmQsIGludCwgMDQ0NCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14MzFsaXRlX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCkBAIC0yNTIsMTMgKzI1MiwxMSBAQAogCWlteDMxX2FkZF9zcGlfaW14MSgmc3BpMV9wZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oJm1jMTM3ODNfc3BpX2RldiwgMSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAkvKiBVU0IgKi8KLQl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQkJVUxQSV9PVEdfRFJWVkJVUyB8IFVMUElfT1RHX0RSVlZCVVNfRVhUKTsKLQotCWlteDMxX2FkZF9teGNfZWhjaV9ocygyLCAmdXNiaDJfcGRhdGEpOwotI2VuZGlmCisJdXNiaDJfcGRhdGEub3RnID0gaW14X290Z191bHBpX2NyZWF0ZShVTFBJX09UR19EUlZWQlVTIHwKKwkJCVVMUElfT1RHX0RSVlZCVVNfRVhUKTsKKwlpZiAodXNiaDJfcGRhdGEub3RnKQorCQlpbXgzMV9hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKIAogCS8qIFNNU0M5MTE3IElSUSBwaW4gKi8KIAlyZXQgPSBncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TRlM2KSwgInNtczkxMTctaXJxIik7CkBAIC0yODEsOSArMjc5LDEwIEBACiAKIE1BQ0hJTkVfU1RBUlQoTVgzMUxJVEUsICJMb2dpY1BEIGkuTVgzMSBTT00iKQogCS8qIE1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCi0JLmJvb3RfcGFyYW1zICAgID0gTVgzeF9QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzFsaXRlX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZteDMxbGl0ZV90aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MzFsaXRlX21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDMxX2luaXRfZWFybHksCisJLmluaXRfaXJxID0gbXgzMV9pbml0X2lycSwKKwkudGltZXIgPSAmbXgzMWxpdGVfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IG14MzFsaXRlX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbW9ib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbW9ib2FyZC5jCmluZGV4IDFhYThkNjUuLjZmMzY5MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMW1vYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFtb2JvYXJkLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCS5jb25zdW1lcl9zdXBwbGllcyA9IGNhbV9jb25zdW1lcnMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSBtb2JvYXJkX3JlZ3VsYXRvcnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfaW5pdF9kYXRhIG1vYm9hcmRfcmVndWxhdG9yc1tdID0gewogCXsKIAkJLmlkID0gTUMxMzc4M19SRUdfVk1NQzEsCiAJCS5pbml0X2RhdGEgPSAmc2RoY192cmVnX2RhdGEsCkBAIC0yNjcsMTIgKzI2NywxMiBAQAogCS50YzJfcGVyaW9kID0gTUMxMzc4M19MRURfUEVSSU9EXzEwTVMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBtb2JvYXJkX3BtaWMgPSB7CitzdGF0aWMgc3RydWN0IG1jMTN4eHhfcGxhdGZvcm1fZGF0YSBtb2JvYXJkX3BtaWMgPSB7CiAJLnJlZ3VsYXRvcnMgPSBtb2JvYXJkX3JlZ3VsYXRvcnMsCiAJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShtb2JvYXJkX3JlZ3VsYXRvcnMpLAogCS5sZWRzID0gJm1vYm9hcmRfbGVkcywKLQkuZmxhZ3MgPSBNQzEzNzgzX1VTRV9SRUdVTEFUT1IgfCBNQzEzNzgzX1VTRV9SVEMgfAotCQlNQzEzNzgzX1VTRV9BREMgfCBNQzEzNzgzX1VTRV9MRUQsCisJLmZsYWdzID0gTUMxM1hYWF9VU0VfUkVHVUxBVE9SIHwgTUMxM1hYWF9VU0VfUlRDIHwKKwkJTUMxM1hYWF9VU0VfQURDIHwgTUMxM1hYWF9VU0VfTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBtb2JvYXJkX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKQEAgLTQwMCwxOSArNDAwLDI0IEBACiAJbWRlbGF5KDEpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCitzdGF0aWMgaW50IG1vYm9hcmRfdXNiaDJfaW5pdF9odyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBteDMxX2luaXRpYWxpemVfdXNiX2h3KHBkZXYtPmlkLCBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpOworfQogCiBzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuaW5pdAk9IG1vYm9hcmRfdXNiaDJfaW5pdF9odywKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJIHwgTVhDX0VIQ0lfVVRNSV84QklULAotCS5mbGFncwk9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1vYm9hcmRfdXNiaDJfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAKLQl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCXVzYmgyX3BkYXRhLm90ZyA9IGlteF9vdGdfdWxwaV9jcmVhdGUoVUxQSV9PVEdfRFJWVkJVUyB8CisJCQlVTFBJX09UR19EUlZWQlVTX0VYVCk7CisJaWYgKCF1c2JoMl9wZGF0YS5vdGcpCisJCXJldHVybiAtRU5PREVWOwogCiAJcGRldiA9IGlteDMxX2FkZF9teGNfZWhjaV9ocygyLCAmdXNiaDJfcGRhdGEpOwogCWlmIChJU19FUlIocGRldikpCkBAIC00MjAsMTAgKzQyNSw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtb2JvYXJkX3VzYmgyX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KIAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBteDMxbW9ib2FyZF9sZWRzW10gPSB7CiAJewpAQCAtNTAzLDcgKzUwNCw3IEBACiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14MzFtb2JvYXJkX2luaXQodm9pZCkKIHsKIAlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhtb2JvYXJkX3BpbnMsIEFSUkFZX1NJWkUobW9ib2FyZF9waW5zKSwKIAkJIm1vYm9hcmQiKTsKQEAgLTU2NCwxMCArNTY1LDEwIEBACiAKIE1BQ0hJTkVfU1RBUlQoTVgzMU1PQk9BUkQsICJFUEZMIE1vYm90cyBteDMxbW9ib2FyZCIpCiAJLyogTWFpbnRhaW5lcjogVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cCAqLwotCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDMxX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZteDMxbW9ib2FyZF90aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MzFfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MzFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDMxX2luaXRfaXJxLAorCS50aW1lciA9ICZteDMxbW9ib2FyZF90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXgzMW1vYm9hcmRfaW5pdCwKIE1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNV8zZHMuYwppbmRleCBiMTk2M2YyLi5mZjVmZTIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzVfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDM1XzNkcy5jCkBAIC0xMTgsMjQgKzExOCw0MiBAQAogCU1YMzVfUEFEX1NEMV9EQVRBMV9fRVNESEMxX0RBVDEsCiAJTVgzNV9QQURfU0QxX0RBVEEyX19FU0RIQzFfREFUMiwKIAlNWDM1X1BBRF9TRDFfREFUQTNfX0VTREhDMV9EQVQzLAorCS8qIEkyQzEgKi8KKwlNWDM1X1BBRF9JMkMxX0NMS19fSTJDMV9TQ0wsCisJTVgzNV9QQURfSTJDMV9EQVRfX0kyQzFfU0RBLAogfTsKIAorc3RhdGljIGludCBteDM1XzNkc19vdGdfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBteDM1X2luaXRpYWxpemVfdXNiX2h3KHBkZXYtPmlkLCBNWENfRUhDSV9JTlRFUk5BTF9QSFkpOworfQorCiAvKiBPVEcgY29uZmlnICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX290Z19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCiAJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUlfV0lERSwKKwkud29ya2Fyb3VuZAk9IEZMU19VU0IyX1dPUktBUk9VTkRfRU5HQ00wOTE1MiwKKy8qCisgKiBFTkdDTTA5MTUyIGFsc28gcmVxdWlyZXMgYSBoYXJkd2FyZSBjaGFuZ2UuCisgKiBQbGVhc2UgY2hlY2sgdGhlIE1YMzUgQ2hpcCBFcnJhdGEgZG9jdW1lbnQgZm9yIGRldGFpbHMuCisgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuaW5pdAk9IG14MzVfM2RzX290Z19pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VUTUksCi0JLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAogfTsKIAorc3RhdGljIGludCBteDM1XzNkc191c2JoX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXgzNV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkgfAorCQkJICBNWENfRUhDSV9JTlRFUk5BTF9QSFkpOworfQorCiAvKiBVU0IgSE9TVCBjb25maWcgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JfaG9zdF9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuaW5pdAkJPSBteDM1XzNkc191c2JoX2luaXQsCiAJLnBvcnRzYwkJPSBNWENfRUhDSV9NT0RFX1NFUklBTCwKLQkuZmxhZ3MJCT0gTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkgfAotCQkJICBNWENfRUhDSV9JTlRFUk5BTF9QSFksCiB9OwogCiBzdGF0aWMgaW50IG90Z19tb2RlX2hvc3Q7CkBAIC0xNTMsMTAgKzE3MSwxNCBAQAogfQogX19zZXR1cCgib3RnX21vZGU9IiwgbXgzNV8zZHNfb3RnX21vZGUpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG14MzVfM2RzX2kyYzBfZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKIC8qCiAgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzNV8zZHNfaW5pdCh2b2lkKQogewogCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKG14MzVwZGtfcGFkcywgQVJSQVlfU0laRShteDM1cGRrX3BhZHMpKTsKIApAQCAtMTgwLDYgKzIwMiw3IEBACiAJaWYgKG14Y19leHBpb19pbml0KE1YMzVfQ1M1X0JBU0VfQUREUiwgRVhQSU9fUEFSRU5UX0lOVCkpCiAJCXByX3dhcm4oIkluaXQgb2YgdGhlIGRlYnVnYm9hcmQgZmFpbGVkLCBhbGwgIgogCQkJCSJkZXZpY2VzIG9uIHRoZSBkZWJ1Z2JvYXJkIGFyZSB1bnVzYWJsZS5cbiIpOworCWlteDM1X2FkZF9pbXhfaTJjMCgmbXgzNV8zZHNfaTJjMF9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14MzVwZGtfdGltZXJfaW5pdCh2b2lkKQpAQCAtMTkzLDkgKzIxNiwxMCBAQAogCiBNQUNISU5FX1NUQVJUKE1YMzVfM0RTLCAiRnJlZXNjYWxlIE1YMzVQREsiKQogCS8qIE1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMgKi8KLQkuYm9vdF9wYXJhbXMgICAgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgzNV9tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgzNV9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgzNXBka190aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MzVfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MzVfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDM1X2luaXRfaXJxLAorCS50aW1lciA9ICZteDM1cGRrX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBteDM1XzNkc19pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDM3LmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTAzNy5jCmluZGV4IGI3NTJmNmIuLmYwN2QzYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzcuYwpAQCAtNTMzLDE3ICs1MzMsMjUgQEAKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUocGNtOTcwX3NqYTEwMDBfcmVzb3VyY2VzKSwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKK3N0YXRpYyBpbnQgcGNtMDM3X290Z19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MzFfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuaW5pdAk9IHBjbTAzN19vdGdfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07CiAKK3N0YXRpYyBpbnQgcGNtMDM3X3VzYmgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXgzMV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JKTsKK30KKwogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLmluaXQJPSBwY20wMzdfdXNiaDJfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07Ci0jZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLApAQCAtNTY4LDcgKzU3Niw3IEBACiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHBjbTAzN19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtNjQ2LDE5ICs2NTQsMTggQEAKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtOTcwX3NqYTEwMDApOwogCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCiAJaWYgKG90Z19tb2RlX2hvc3QpIHsKLQkJb3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKLQkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwotCi0JCWlteDMxX2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CisJCW90Z19wZGF0YS5vdGcgPSBpbXhfb3RnX3VscGlfY3JlYXRlKFVMUElfT1RHX0RSVlZCVVMgfAorCQkJCVVMUElfT1RHX0RSVlZCVVNfRVhUKTsKKwkJaWYgKG90Z19wZGF0YS5vdGcpCisJCQlpbXgzMV9hZGRfbXhjX2VoY2lfb3RnKCZvdGdfcGRhdGEpOwogCX0KIAotCXVzYmgyX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKLQkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCXVzYmgyX3BkYXRhLm90ZyA9IGlteF9vdGdfdWxwaV9jcmVhdGUoVUxQSV9PVEdfRFJWVkJVUyB8CisJCQlVTFBJX09UR19EUlZWQlVTX0VYVCk7CisJaWYgKHVzYmgyX3BkYXRhLm90ZykKKwkJaW14MzFfYWRkX214Y19laGNpX2hzKDIsICZ1c2JoMl9wZGF0YSk7CiAKLQlpbXgzMV9hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKLSNlbmRpZgogCWlmICghb3RnX21vZGVfaG9zdCkKIAkJaW14MzFfYWRkX2ZzbF91c2IyX3VkYygmb3RnX2RldmljZV9wZGF0YSk7CiAKQEAgLTY3NSw5ICs2ODIsMTAgQEAKIAogTUFDSElORV9TVEFSVChQQ00wMzcsICJQaHl0ZWMgUGh5Y29yZSBwY20wMzciKQogCS8qIE1haW50YWluZXI6IFBlbmd1dHJvbml4ICovCi0JLmJvb3RfcGFyYW1zICAgID0gTVgzeF9QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJnBjbTAzN190aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MzFfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MzFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDMxX2luaXRfaXJxLAorCS50aW1lciA9ICZwY20wMzdfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IHBjbTAzN19pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDM3X2VldC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzdfZWV0LmMKaW5kZXggZmRhNTY1NC4uZGY2ZmIwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzdfZWV0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzdfZWV0LmMKQEAgLTE4MCw5ICsxODAsNyBAQAogCiAJLyogU1BJICovCiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGNtMDM3X3NwaV9kZXYsIEFSUkFZX1NJWkUocGNtMDM3X3NwaV9kZXYpKTsKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKIAlpbXgzMV9hZGRfc3BpX2lteDAoJnBjbTAzN19zcGkxX3BkYXRhKTsKLSNlbmRpZgogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY20wMzdfZ3Bpb19rZXlzX2RldmljZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDQzLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTA0My5jCmluZGV4IGJjZjgzZmMuLmIzZWNmYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDQzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wNDMuYwpAQCAtMTE1LDcgKzExNSw2IEBACiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKLSNpZiBkZWZpbmVkIENPTkZJR19JMkNfSU1YIHx8IGRlZmluZWQgQ09ORklHX0kyQ19JTVhfTU9EVUxFCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjbTA0M19pMmMwX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLmJpdHJhdGUgPSA1MDAwMCwKIH07CkBAIC0xMzQsNyArMTMzLDYgQEAKIAkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKIAl9CiB9OwotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmcGNtMDQzX2ZsYXNoLApAQCAtMjIxLDkgKzIxOSw5IEBACiAJTVgzNV9QQURfU0QxX0RBVEEzX19FU0RIQzFfREFUMywKIH07CiAKLSNkZWZpbmUgQUM5N19HUElPX1RYRlMJKDEgKiAzMiArIDMxKQotI2RlZmluZSBBQzk3X0dQSU9fVFhECSgxICogMzIgKyAyOCkKLSNkZWZpbmUgQUM5N19HUElPX1JFU0VUCSgxICogMzIgKyAwKQorI2RlZmluZSBBQzk3X0dQSU9fVFhGUwlJTVhfR1BJT19OUigyLCAzMSkKKyNkZWZpbmUgQUM5N19HUElPX1RYRAlJTVhfR1BJT19OUigyLCAyOCkKKyNkZWZpbmUgQUM5N19HUElPX1JFU0VUCUlNWF9HUElPX05SKDIsIDApCiAKIHN0YXRpYyB2b2lkIHBjbTA0M19hYzk3X3dhcm1fcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQogewpAQCAtMzA3LDE4ICszMDUsMjYgQEAKIAkuaHdfZWNjID0gMSwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKK3N0YXRpYyBpbnQgcGNtMDQzX290Z19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MzVfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuaW5pdAk9IHBjbTA0M19vdGdfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JLAotCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07CiAKK3N0YXRpYyBpbnQgcGNtMDQzX3VzYmgxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXgzNV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkkgfAorCQkJTVhDX0VIQ0lfSU5URVJOQUxfUEhZIHwgTVhDX0VIQ0lfSVBQVUVfRE9XTik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuaW5pdAk9IHBjbTA0M191c2JoMV9pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1NFUklBTCwKLQkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSB8Ci0JCSAgTVhDX0VIQ0lfSVBQVUVfRE9XTiwKIH07Ci0jZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLApAQCAtMzQzLDcgKzM0OSw3IEBACiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHBjbTA0M19pbml0KHZvaWQpCiB7CiAJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMocGNtMDQzX3BhZHMsIEFSUkFZX1NJWkUocGNtMDQzX3BhZHMpKTsKIApAQCAtMzY5LDI2ICszNzUsMjIgQEAKIAogCWlteDM1X2FkZF9pbXhfdWFydDEoJnVhcnRfcGRhdGEpOwogCi0jaWYgZGVmaW5lZCBDT05GSUdfSTJDX0lNWCB8fCBkZWZpbmVkIENPTkZJR19JMkNfSU1YX01PRFVMRQogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHBjbTA0M19pMmNfZGV2aWNlcywKIAkJCUFSUkFZX1NJWkUocGNtMDQzX2kyY19kZXZpY2VzKSk7CiAKIAlpbXgzNV9hZGRfaW14X2kyYzAoJnBjbTA0M19pMmMwX2RhdGEpOwotI2VuZGlmCiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfaXB1LCAmbXgzX2lwdV9kYXRhKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfZmIsICZteDNmYl9wZGF0YSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAlpZiAob3RnX21vZGVfaG9zdCkgewotCQlvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7Ci0KLQkJaW14MzVfYWRkX214Y19laGNpX290Zygmb3RnX3BkYXRhKTsKKwkJb3RnX3BkYXRhLm90ZyA9IGlteF9vdGdfdWxwaV9jcmVhdGUoVUxQSV9PVEdfRFJWVkJVUyB8CisJCQkJVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCQlpZiAob3RnX3BkYXRhLm90ZykKKwkJCWlteDM1X2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CiAJfQotCiAJaW14MzVfYWRkX214Y19laGNpX2hzKCZ1c2JoMV9wZGF0YSk7Ci0jZW5kaWYKKwogCWlmICghb3RnX21vZGVfaG9zdCkKIAkJaW14MzVfYWRkX2ZzbF91c2IyX3VkYygmb3RnX2RldmljZV9wZGF0YSk7CiAKQEAgLTQwNywxMCArNDA5LDEwIEBACiAKIE1BQ0hJTkVfU1RBUlQoUENNMDQzLCAiUGh5dGVjIFBoeWNvcmUgcGNtMDQzIikKIAkvKiBNYWludGFpbmVyOiBQZW5ndXRyb25peCAqLwotCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDM1X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDM1X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZwY20wNDNfdGltZXIsCisJLmJvb3RfcGFyYW1zID0gTVgzeF9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gPSBteDM1X21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDM1X2luaXRfZWFybHksCisJLmluaXRfaXJxID0gbXgzNV9pbml0X2lycSwKKwkudGltZXIgPSAmcGNtMDQzX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBwY20wNDNfaW5pdCwKIE1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcW9uZy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1xb25nLmMKaW5kZXggZmQxMDUwYy4uMTdmNzU4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1xb25nLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1xb25nLmMKQEAgLTU0LDEwICs1NCw2IEBACiAKICNkZWZpbmUgUU9OR19GUEdBX0lSUQkJSU9NVVhfVE9fSVJRKE1YMzFfUElOX0RUUl9EQ0UxKQogCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KLSAqLwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwpAQCAtMjQ3LDcgKzI0Myw3IEBACiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHFvbmdfaW5pdCh2b2lkKQogewogCW14Y19pbml0X2lteF91YXJ0KCk7CiAJcW9uZ19pbml0X25vcl9tdGQoKTsKQEAgLTI2MywxNiArMjU5LDEyIEBACiAJLmluaXQJPSBxb25nX3RpbWVyX2luaXQsCiB9OwogCi0vKgotICogVGhlIGZvbGxvd2luZyB1c2VzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MgZGVmaW5lZCBpbiBhcmNoLmggaW4gb3JkZXIgdG8KLSAqIGluaXRpYWxpemUgX19tYWNoX2Rlc2NfUU9ORyBkYXRhIHN0cnVjdHVyZS4KLSAqLwotCiBNQUNISU5FX1NUQVJUKFFPTkcsICJEYXZlL0RFTlggUW9uZ0VWQi1MSVRFIikKIAkvKiBNYWludGFpbmVyOiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkggKi8KLQkuYm9vdF9wYXJhbXMgICAgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgzMV9tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgzMV9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmcW9uZ190aW1lciwKKwkuYm9vdF9wYXJhbXMgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyA9IG14MzFfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14MzFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteDMxX2luaXRfaXJxLAorCS50aW1lciA9ICZxb25nX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBxb25nX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC12cHIyMDAuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtdnByMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmMzkwZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtdnByMjAwLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcmMgS2xlaW5lLUJ1ZGRlLCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IDIwMTAgQ3JlYXRpdmUgUHJvZHVjdCBEZXNpZ24KKyAqCisgKiBEZXJpdmVkIGZyb20gbXgzNSAzc3RhY2suCisgKiBPcmlnaW5hbCBhdXRob3I6IEZhYmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1AZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDM1Lmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pcHUuaD4KKyNpbmNsdWRlIDxtYWNoL214M2ZiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzeHh4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDM1LmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisjZGVmaW5lIEdQSU9fTENEUFdSCUlNWF9HUElPX05SKDEsIDIpCisjZGVmaW5lIEdQSU9fUE1JQ19JTlQJSU1YX0dQSU9fTlIoMiwgMCkKKworI2RlZmluZSBHUElPX0JVVFRPTjEJSU1YX0dQSU9fTlIoMSwgNCkKKyNkZWZpbmUgR1BJT19CVVRUT04yCUlNWF9HUElPX05SKDEsIDUpCisjZGVmaW5lIEdQSU9fQlVUVE9OMwlJTVhfR1BJT19OUigxLCA3KQorI2RlZmluZSBHUElPX0JVVFRPTjQJSU1YX0dQSU9fTlIoMSwgOCkKKyNkZWZpbmUgR1BJT19CVVRUT041CUlNWF9HUElPX05SKDEsIDkpCisjZGVmaW5lIEdQSU9fQlVUVE9ONglJTVhfR1BJT19OUigxLCAxMCkKKyNkZWZpbmUgR1BJT19CVVRUT043CUlNWF9HUElPX05SKDEsIDExKQorI2RlZmluZSBHUElPX0JVVFRPTjgJSU1YX0dQSU9fTlIoMSwgMTIpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGZiX21vZGVkYltdID0geworCXsKKwkJLyogODAweDQ4MCBAIDYwIEh6ICovCisJCS5uYW1lCQk9ICJQVDA3MDgwNDgiLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDMzMjYwKSwKKwkJLmxlZnRfbWFyZ2luCT0gNTAsCisJCS5yaWdodF9tYXJnaW4JPSAxNTYsCisJCS51cHBlcl9tYXJnaW4JPSAxMCwKKwkJLmxvd2VyX21hcmdpbgk9IDEwLAorCQkuaHN5bmNfbGVuCT0gMSwJLyogbm90ZTogREUgb25seSBkaXNwbGF5ICovCisJCS52c3luY19sZW4JPSAxLAkvKiBub3RlOiBERSBvbmx5IGRpc3BsYXkgKi8KKwkJLnN5bmMJCT0gRkJfU1lOQ19DTEtfSURMRV9FTiB8IEZCX1NZTkNfT0VfQUNUX0hJR0gsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sIHsKKwkJLyogODAweDQ4MCBAIDYwIEh6ICovCisJCS5uYW1lCQk9ICJDVFAtQ0xBQTA3MExDMEFDVyIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoMjcwMDApLAorCQkubGVmdF9tYXJnaW4JPSA1MCwKKwkJLnJpZ2h0X21hcmdpbgk9IDUwLAkvKiB3aG9sZSBsaW5lIHNob3VsZCBoYXZlIDkwMCBjbG9ja3MgKi8KKwkJLnVwcGVyX21hcmdpbgk9IDEwLAorCQkubG93ZXJfbWFyZ2luCT0gMTAsCS8qIHdob2xlIGZyYW1lIHNob3VsZCBoYXZlIDUwMCBsaW5lcyAqLworCQkuaHN5bmNfbGVuCT0gMSwJLyogbm90ZTogREUgb25seSBkaXNwbGF5ICovCisJCS52c3luY19sZW4JPSAxLAkvKiBub3RlOiBERSBvbmx5IGRpc3BsYXkgKi8KKwkJLnN5bmMJCT0gRkJfU1lOQ19DTEtfSURMRV9FTiB8IEZCX1NZTkNfT0VfQUNUX0hJR0gsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaXB1X3BsYXRmb3JtX2RhdGEgbXgzX2lwdV9kYXRhID0geworCS5pcnFfYmFzZSA9IE1YQ19JUFVfSVJRX1NUQVJULAorfTsKKworc3RhdGljIHN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhIG14M2ZiX3BkYXRhID0geworCS5kbWFfZGV2CT0gJm14M19pcHUuZGV2LAorCS5uYW1lCQk9ICJQVDA3MDgwNDgiLAorCS5tb2RlCQk9IGZiX21vZGVkYiwKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRShmYl9tb2RlZGIpLAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgdnByMjAwX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoICA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHZwcjIwMF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBNWDM1X0NTMF9CQVNFX0FERFIsCisJLmVuZAk9IE1YMzVfQ1MwX0JBU0VfQUREUiArIFNaXzY0TSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cHIyMDBfZmxhc2ggPSB7CisJLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCT0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmdnByMjAwX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSAmdnByMjAwX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQorCQl2cHIyMDBfbmFuZF9ib2FyZF9pbmZvIF9faW5pdGNvbnN0ID0geworCS53aWR0aCA9IDEsCisJLmh3X2VjYyA9IDEsCisJLmZsYXNoX2JidCA9IDEsCit9OworCisjZGVmaW5lIFZQUl9LRVlfREVCT1VOQ0UJNTAwCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gdnByMjAwX2dwaW9fa2V5c190YWJsZVtdID0geworCXtLRVlfRjIsIEdQSU9fQlVUVE9OMSwgMSwgInZwci1rZXlzOiBGMiIsIDAsIFZQUl9LRVlfREVCT1VOQ0V9LAorCXtLRVlfRjMsIEdQSU9fQlVUVE9OMiwgMSwgInZwci1rZXlzOiBGMyIsIDAsIFZQUl9LRVlfREVCT1VOQ0V9LAorCXtLRVlfRjQsIEdQSU9fQlVUVE9OMywgMSwgInZwci1rZXlzOiBGNCIsIDAsIFZQUl9LRVlfREVCT1VOQ0V9LAorCXtLRVlfRjUsIEdQSU9fQlVUVE9ONCwgMSwgInZwci1rZXlzOiBGNSIsIDAsIFZQUl9LRVlfREVCT1VOQ0V9LAorCXtLRVlfRjYsIEdQSU9fQlVUVE9ONSwgMSwgInZwci1rZXlzOiBGNiIsIDAsIFZQUl9LRVlfREVCT1VOQ0V9LAorCXtLRVlfRjcsIEdQSU9fQlVUVE9ONiwgMSwgInZwci1rZXlzOiBGNyIsIDAsIFZQUl9LRVlfREVCT1VOQ0V9LAorCXtLRVlfRjgsIEdQSU9fQlVUVE9ONywgMSwgInZwci1rZXlzOiBGOCIsIDEsIFZQUl9LRVlfREVCT1VOQ0V9LAorCXtLRVlfRjksIEdQSU9fQlVUVE9OOCwgMSwgInZwci1rZXlzOiBGOSIsIDEsIFZQUl9LRVlfREVCT1VOQ0V9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSB2cHIyMDBfZ3Bpb19rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMgPSB2cHIyMDBfZ3Bpb19rZXlzX3RhYmxlLAorCS5uYnV0dG9ucyA9IEFSUkFZX1NJWkUodnByMjAwX2dwaW9fa2V5c190YWJsZSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cHIyMDBfZGV2aWNlX2dwaW9rZXlzID0geworCS5uYW1lID0gImdwaW8ta2V5cyIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdnByMjAwX2dwaW9fa2V5c19kYXRhLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxM3h4eF9wbGF0Zm9ybV9kYXRhIHZwcjIwMF9wbWljID0geworCS5mbGFncyA9IE1DMTNYWFhfVVNFX0FEQyB8IE1DMTNYWFhfVVNFX1RPVUNIU0NSRUVOLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSB2cHIyMDBfaTJjMF9kYXRhIF9faW5pdGNvbnN0ID0geworCS5iaXRyYXRlID0gNTAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSB2cHIyMDBfZWVwcm9tID0geworCS5ieXRlX2xlbiA9IDIwNDggLyA4LAorCS5wYWdlX3NpemUgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB2cHIyMDBfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MCksIC8qIEUwPTAsIEUxPTAsIEUyPTAgKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSAmdnByMjAwX2VlcHJvbSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJtYzEzODkyIiwgMHgwOCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnZwcjIwMF9wbWljLAorCQkuaXJxID0gZ3Bpb190b19pcnEoR1BJT19QTUlDX0lOVCksCisJfQorfTsKKworc3RhdGljIGlvbXV4X3YzX2NmZ190IHZwcjIwMF9wYWRzW10gPSB7CisJLyogVUFSVDEgKi8KKwlNWDM1X1BBRF9UWEQxX19VQVJUMV9UWERfTVVYLAorCU1YMzVfUEFEX1JYRDFfX1VBUlQxX1JYRF9NVVgsCisJLyogVUFSVDMgKi8KKwlNWDM1X1BBRF9BVEFfREFUQTEwX19VQVJUM19SWERfTVVYLAorCU1YMzVfUEFEX0FUQV9EQVRBMTFfX1VBUlQzX1RYRF9NVVgsCisJLyogRkVDICovCisJTVgzNV9QQURfRkVDX1RYX0NMS19fRkVDX1RYX0NMSywKKwlNWDM1X1BBRF9GRUNfUlhfQ0xLX19GRUNfUlhfQ0xLLAorCU1YMzVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAorCU1YMzVfUEFEX0ZFQ19DT0xfX0ZFQ19DT0wsCisJTVgzNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBXzAsCisJTVgzNV9QQURfRkVDX1REQVRBMF9fRkVDX1REQVRBXzAsCisJTVgzNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCisJTVgzNV9QQURfRkVDX01EQ19fRkVDX01EQywKKwlNWDM1X1BBRF9GRUNfTURJT19fRkVDX01ESU8sCisJTVgzNV9QQURfRkVDX1RYX0VSUl9fRkVDX1RYX0VSUiwKKwlNWDM1X1BBRF9GRUNfUlhfRVJSX19GRUNfUlhfRVJSLAorCU1YMzVfUEFEX0ZFQ19DUlNfX0ZFQ19DUlMsCisJTVgzNV9QQURfRkVDX1JEQVRBMV9fRkVDX1JEQVRBXzEsCisJTVgzNV9QQURfRkVDX1REQVRBMV9fRkVDX1REQVRBXzEsCisJTVgzNV9QQURfRkVDX1JEQVRBMl9fRkVDX1JEQVRBXzIsCisJTVgzNV9QQURfRkVDX1REQVRBMl9fRkVDX1REQVRBXzIsCisJTVgzNV9QQURfRkVDX1JEQVRBM19fRkVDX1JEQVRBXzMsCisJTVgzNV9QQURfRkVDX1REQVRBM19fRkVDX1REQVRBXzMsCisJLyogRGlzcGxheSAqLworCU1YMzVfUEFEX0xEMF9fSVBVX0RJU1BCX0RBVF8wLAorCU1YMzVfUEFEX0xEMV9fSVBVX0RJU1BCX0RBVF8xLAorCU1YMzVfUEFEX0xEMl9fSVBVX0RJU1BCX0RBVF8yLAorCU1YMzVfUEFEX0xEM19fSVBVX0RJU1BCX0RBVF8zLAorCU1YMzVfUEFEX0xENF9fSVBVX0RJU1BCX0RBVF80LAorCU1YMzVfUEFEX0xENV9fSVBVX0RJU1BCX0RBVF81LAorCU1YMzVfUEFEX0xENl9fSVBVX0RJU1BCX0RBVF82LAorCU1YMzVfUEFEX0xEN19fSVBVX0RJU1BCX0RBVF83LAorCU1YMzVfUEFEX0xEOF9fSVBVX0RJU1BCX0RBVF84LAorCU1YMzVfUEFEX0xEOV9fSVBVX0RJU1BCX0RBVF85LAorCU1YMzVfUEFEX0xEMTBfX0lQVV9ESVNQQl9EQVRfMTAsCisJTVgzNV9QQURfTEQxMV9fSVBVX0RJU1BCX0RBVF8xMSwKKwlNWDM1X1BBRF9MRDEyX19JUFVfRElTUEJfREFUXzEyLAorCU1YMzVfUEFEX0xEMTNfX0lQVV9ESVNQQl9EQVRfMTMsCisJTVgzNV9QQURfTEQxNF9fSVBVX0RJU1BCX0RBVF8xNCwKKwlNWDM1X1BBRF9MRDE1X19JUFVfRElTUEJfREFUXzE1LAorCU1YMzVfUEFEX0xEMTZfX0lQVV9ESVNQQl9EQVRfMTYsCisJTVgzNV9QQURfTEQxN19fSVBVX0RJU1BCX0RBVF8xNywKKwlNWDM1X1BBRF9EM19GUFNISUZUX19JUFVfRElTUEJfRDNfQ0xLLAorCU1YMzVfUEFEX0QzX0RSRFlfX0lQVV9ESVNQQl9EM19EUkRZLAorCU1YMzVfUEFEX0NPTlRSQVNUX19JUFVfRElTUEJfQ09OVFIsCisJLyogTENEIEVuYWJsZSAqLworCU1YMzVfUEFEX0QzX1ZTWU5DX19HUElPMV8yLAorCS8qIFVTQk9URyAqLworCU1YMzVfUEFEX1VTQk9UR19QV1JfX1VTQl9UT1BfVVNCT1RHX1BXUiwKKwlNWDM1X1BBRF9VU0JPVEdfT0NfX1VTQl9UT1BfVVNCT1RHX09DLAorCS8qIFNEQ0FSRCAqLworCU1YMzVfUEFEX1NEMV9DTURfX0VTREhDMV9DTUQsCisJTVgzNV9QQURfU0QxX0NMS19fRVNESEMxX0NMSywKKwlNWDM1X1BBRF9TRDFfREFUQTBfX0VTREhDMV9EQVQwLAorCU1YMzVfUEFEX1NEMV9EQVRBMV9fRVNESEMxX0RBVDEsCisJTVgzNV9QQURfU0QxX0RBVEEyX19FU0RIQzFfREFUMiwKKwlNWDM1X1BBRF9TRDFfREFUQTNfX0VTREhDMV9EQVQzLAorCS8qIFBNSUMgKi8KKwlNWDM1X1BBRF9HUElPMl8wX19HUElPMl8wLAorCS8qIEdQSU8ga2V5cyAqLworCU1YMzVfUEFEX1NDS1JfX0dQSU8xXzQsCisJTVgzNV9QQURfQ09NUEFSRV9fR1BJTzFfNSwKKwlNWDM1X1BBRF9TQ0tUX19HUElPMV83LAorCU1YMzVfUEFEX0ZTVF9fR1BJTzFfOCwKKwlNWDM1X1BBRF9IQ0tUX19HUElPMV85LAorCU1YMzVfUEFEX1RYNV9SWDBfX0dQSU8xXzEwLAorCU1YMzVfUEFEX1RYNF9SWDFfX0dQSU8xXzExLAorCU1YMzVfUEFEX1RYM19SWDJfX0dQSU8xXzEyLAorfTsKKworLyogVVNCIERldmljZSBjb25maWcgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBvdGdfZGV2aWNlX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5vcGVyYXRpbmdfbW9kZQk9IEZTTF9VU0IyX0RSX0RFVklDRSwKKwkucGh5X21vZGUJPSBGU0xfVVNCMl9QSFlfVVRNSSwKKwkud29ya2Fyb3VuZAk9IEZMU19VU0IyX1dPUktBUk9VTkRfRU5HQ00wOTE1MiwKK307CisKKy8qIFVTQiBIT1NUIGNvbmZpZyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYl9ob3N0X3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5wb3J0c2MJCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCisJLmZsYWdzCQk9IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JIHwKKwkJCSAgTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZ2cHIyMDBfZmxhc2gsCisJJnZwcjIwMF9kZXZpY2VfZ3Bpb2tleXMsCit9OworCisvKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB2cHIyMDBfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKHZwcjIwMF9wYWRzLCBBUlJBWV9TSVpFKHZwcjIwMF9wYWRzKSk7CisKKwlpbXgzNV9hZGRfZmVjKE5VTEwpOworCWlteDM1X2FkZF9pbXgyX3dkdChOVUxMKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCisJaWYgKDAgIT0gZ3Bpb19yZXF1ZXN0KEdQSU9fTENEUFdSLCAiTENEUFdSIikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZwcjIwMDogQ291bGRuJ3QgZ2V0IExDRFBXUiBncGlvXG4iKTsKKwllbHNlCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDRFBXUiwgMCk7CisKKwlpZiAoMCAhPSBncGlvX3JlcXVlc3QoR1BJT19QTUlDX0lOVCwgIlBNSUNfSU5UIikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZwcjIwMDogQ291bGRuJ3QgZ2V0IFBNSUNfSU5UIGdwaW9cbiIpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QTUlDX0lOVCk7CisKKwlpbXgzNV9hZGRfaW14X3VhcnQwKE5VTEwpOworCWlteDM1X2FkZF9pbXhfdWFydDIoTlVMTCk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfaXB1LCAmbXgzX2lwdV9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfZmIsICZteDNmYl9wZGF0YSk7CisKKwlpbXgzNV9hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKKwlpbXgzNV9hZGRfbXhjX2VoY2lfaHMoJnVzYl9ob3N0X3BkYXRhKTsKKworCWlteDM1X2FkZF9teGNfbmFuZCgmdnByMjAwX25hbmRfYm9hcmRfaW5mbyk7CisJaW14MzVfYWRkX3NkaGNpX2VzZGhjX2lteCgwLCBOVUxMKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHZwcjIwMF9pMmNfZGV2aWNlcywKKwkJCUFSUkFZX1NJWkUodnByMjAwX2kyY19kZXZpY2VzKSk7CisKKwlpbXgzNV9hZGRfaW14X2kyYzAoJnZwcjIwMF9pMmMwX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdnByMjAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDM1X2Nsb2Nrc19pbml0KCk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgdnByMjAwX3RpbWVyID0geworCS5pbml0CT0gdnByMjAwX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKFZQUjIwMCwgIlZQUjIwMCIpCisJLyogTWFpbnRhaW5lcjogQ3JlYXRpdmUgUHJvZHVjdCBEZXNpZ24gKi8KKwkubWFwX2lvID0gbXgzNV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXgzNV9pbml0X2Vhcmx5LAorCS5pbml0X2lycSA9IG14MzVfaW5pdF9pcnEsCisJLnRpbWVyID0gJnZwcjIwMF90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gdnByMjAwX2JvYXJkX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggNDcxMThmNy4uNTRkNzE3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC0yNywxNCArMjcsOCBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KLQotLyohCi0gKiBAZmlsZSBtbS5jCi0gKgotICogQGJyaWVmIFRoaXMgZmlsZSBjcmVhdGVzIHN0YXRpYyB2aXJ0dWFsIHRvIHBoeXNpY2FsIG1hcHBpbmdzLCBjb21tb24gdG8gYWxsIE1YMyBib2FyZHMuCi0gKgotICogQGluZ3JvdXAgTWVtb3J5Ci0gKi8KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAogI2lmZGVmIENPTkZJR19TT0NfSU1YMzEKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTUyLDE3ICs0NiwyNSBAQAogICovCiB2b2lkIF9faW5pdCBteDMxX21hcF9pbyh2b2lkKQogewotCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDMxKTsKLQlteGNfYXJjaF9yZXNldF9pbml0KE1YMzFfSU9fQUREUkVTUyhNWDMxX1dET0dfQkFTRV9BRERSKSk7Ci0KIAlpb3RhYmxlX2luaXQobXgzMV9pb19kZXNjLCBBUlJBWV9TSVpFKG14MzFfaW9fZGVzYykpOwogfQogCi1pbnQgaW14MzFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7Cit2b2lkIF9faW5pdCBpbXgzMV9pbml0X2Vhcmx5KHZvaWQpCit7CisJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMzEpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoTVgzMV9JT19BRERSRVNTKE1YMzFfV0RPR19CQVNFX0FERFIpKTsKK30KKworc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteDMxX2dwaW9fcG9ydHNbXSA9IHsKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgzMSwgMCwgMSwgTVgzMV9JTlRfR1BJTzEpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDMxLCAxLCAyLCBNWDMxX0lOVF9HUElPMiksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMzEsIDIsIDMsIE1YMzFfSU5UX0dQSU8zKSwKK307CisKIHZvaWQgX19pbml0IG14MzFfaW5pdF9pcnEodm9pZCkKIHsKIAlteGNfaW5pdF9pcnEoTVgzMV9JT19BRERSRVNTKE1YMzFfQVZJQ19CQVNFX0FERFIpKTsKLQlpbXgzMV9yZWdpc3Rlcl9ncGlvcygpOworCW14Y19ncGlvX2luaXQoaW14MzFfZ3Bpb19wb3J0cywJQVJSQVlfU0laRShpbXgzMV9ncGlvX3BvcnRzKSk7CiB9CiAjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgzMSAqLwogCkBAIC03NywxOCArNzksMjYgQEAKIAogdm9pZCBfX2luaXQgbXgzNV9tYXBfaW8odm9pZCkKIHsKLQlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7Ci0JbXhjX2lvbXV4X3YzX2luaXQoTVgzNV9JT19BRERSRVNTKE1YMzVfSU9NVVhDX0JBU0VfQUREUikpOwotCW14Y19hcmNoX3Jlc2V0X2luaXQoTVgzNV9JT19BRERSRVNTKE1YMzVfV0RPR19CQVNFX0FERFIpKTsKLQogCWlvdGFibGVfaW5pdChteDM1X2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgzNV9pb19kZXNjKSk7CiB9CiAKLWludCBpbXgzNV9yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKK3ZvaWQgX19pbml0IGlteDM1X2luaXRfZWFybHkodm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7CisJbXhjX2lvbXV4X3YzX2luaXQoTVgzNV9JT19BRERSRVNTKE1YMzVfSU9NVVhDX0JBU0VfQUREUikpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoTVgzNV9JT19BRERSRVNTKE1YMzVfV0RPR19CQVNFX0FERFIpKTsKK30KKworc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteDM1X2dwaW9fcG9ydHNbXSA9IHsKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgzNSwgMCwgMSwgTVgzNV9JTlRfR1BJTzEpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDM1LCAxLCAyLCBNWDM1X0lOVF9HUElPMiksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMzUsIDIsIDMsIE1YMzVfSU5UX0dQSU8zKSwKK307CisKIHZvaWQgX19pbml0IG14MzVfaW5pdF9pcnEodm9pZCkKIHsKIAlteGNfaW5pdF9pcnEoTVgzNV9JT19BRERSRVNTKE1YMzVfQVZJQ19CQVNFX0FERFIpKTsKLQlpbXgzNV9yZWdpc3Rlcl9ncGlvcygpOworCW14Y19ncGlvX2luaXQoaW14MzVfZ3Bpb19wb3J0cywJQVJSQVlfU0laRShpbXgzNV9ncGlvX3BvcnRzKSk7CiB9CiAjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgzNSAqLwogCkBAIC0xMjksNCArMTM5LDMgQEAKIAogYXJjaF9pbml0Y2FsbChteGNfaW5pdF9sMngwKTsKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwppbmRleCA5NGEwYjllLi42NDEwYjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xNDksNyArMTUwLDEwIEBACiAJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fQ1NQSTFfU1BJX1JEWSwgVVNCX1BBRF9DRkcpOwogCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NGUzYsIFVTQl9QQURfQ0ZHKTsKIAotCXJldHVybiAwOworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gbXgzMV9pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwKKwkJCU1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JKTsKIH0KIAogI2RlZmluZSBVU0JIMV9WQlVTRU5fQglJT01VWF9UT19HUElPKE1YMzFfUElOX05GUkVfQikKQEAgLTE4Nyw3ICsxOTEsNiBAQAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmluaXQJPSBkZXZib2FyZF91c2JoMV9od19pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VUTUkgfCBNWENfRUhDSV9TRVJJQUwsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkZXZib2FyZF91c2JoMV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKaW5kZXggZjQ0OWE5Ny4uNTdmN2IwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYwpAQCAtMjY1LDcgKzI2NSwxMCBAQAogCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX0NTUEkxX1NQSV9SRFksIFVTQl9QQURfQ0ZHKTsKIAlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TRlM2LCBVU0JfUEFEX0NGRyk7CiAKLQlyZXR1cm4gMDsKKwltZGVsYXkoMTApOworCisJcmV0dXJuIG14MzFfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8CisJCQlNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSk7CiB9CiAKICNkZWZpbmUgVVNCSDFfVkJVU0VOX0IJSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORlJFX0IpCkBAIC0zMDMsNyArMzA2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9wZGF0YSBfX2luaXRkYXRhID0gewogCS5pbml0CT0gbWFyeGJvdF91c2JoMV9od19pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VUTUkgfCBNWENfRUhDSV9TRVJJQUwsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYXJ4Ym90X3VzYmgxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLXNtYXJ0Ym90LmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1zbWFydGJvdC5jCmluZGV4IGJiZWMzYzguLjM1ZjgwNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLXNtYXJ0Ym90LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYwpAQCAtMTIzLDE3ICsxMjMsMjQgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQogCitzdGF0aWMgaW50IHNtYXJ0Ym90X290Z19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MzFfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfaG9zdF9wZGF0YSBfX2luaXRkYXRhID0geworCS5pbml0CT0gc21hcnRib3Rfb3RnX2luaXQsCiAJLnBvcnRzYyA9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKLQkuZmxhZ3MJPSBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzbWFydGJvdF9vdGdfaG9zdF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAotCW90Z19ob3N0X3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKLQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CisJb3RnX2hvc3RfcGRhdGEub3RnID0gaW14X290Z191bHBpX2NyZWF0ZShVTFBJX09UR19EUlZWQlVTIHwKKwkJVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCWlmICghb3RnX2hvc3RfcGRhdGEub3RnKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCXBkZXYgPSBpbXgzMV9hZGRfbXhjX2VoY2lfb3RnKCZvdGdfaG9zdF9wZGF0YSk7CiAJaWYgKElTX0VSUihwZGV2KSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW14NS9LY29uZmlnCmluZGV4IGRlNGZhOTkyZi4uODNlZTA4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14NS9LY29uZmlnCkBAIC0xLDUgKzEsNiBAQAogaWYgQVJDSF9NWDUKLSMgQVJDSF9NWDUxIGFuZCBBUkNIX01YNTAgYXJlIGxlZnQgZm9yIGNvbXBhdGliaWxpdHkKKyMgQVJDSF9NWDUwLzUxLzUzIGFyZSBsZWZ0IHRvIG1hcmsgcGxhY2VzIHdoZXJlIHByZXZlbnQgbXVsdGktc29jIGluIHNpbmdsZQorIyBpbWFnZS4gU28gZm9yIG1vc3QgdGltZSwgU09DX0lNWDUwLzUxLzUzIHNob3VsZCBiZSB1c2VkLgogCiBjb25maWcgQVJDSF9NWDUwCiAJYm9vbApAQCAtNTAsNiArNTEsNyBAQAogY29uZmlnIE1BQ0hfTVg1MV8zRFMKIAlib29sICJTdXBwb3J0IE1YNTFQREsgKDNEUykiCiAJc2VsZWN0IFNPQ19JTVg1MQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfS0VZUEFECiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NESENJX0VTREhDX0lNWApAQCAtMTEyLDE5ICsxMTQsMzIgQEAKIAogZW5kY2hvaWNlCiAKLWNvbmZpZyBNQUNIX01YNTFfRUZJS0FNWAotCWJvb2wgIlN1cHBvcnQgTVg1MSBHZW5lc2kgRWZpa2EgTVggbmV0dG9wIgorY29uZmlnIE1YNTFfRUZJS0FfQ09NTU9OCisJYm9vbAogCXNlbGVjdCBTT0NfSU1YNTEKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKKwlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKKworY29uZmlnIE1BQ0hfTVg1MV9FRklLQU1YCisJYm9vbCAiU3VwcG9ydCBNWDUxIEdlbmVzaSBFZmlrYSBNWCBuZXR0b3AiCisJc2VsZWN0IE1YNTFfRUZJS0FfQ09NTU9OCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBHZW5lc2kgRWZpa2EgTVggbmV0dG9wLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKK2NvbmZpZyBNQUNIX01YNTFfRUZJS0FTQgorCWJvb2wgIlN1cHBvcnQgTVg1MSBHZW5lc2kgRWZpa2EgU21hcnRib29rIgorCXNlbGVjdCBNWDUxX0VGSUtBX0NPTU1PTgorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgR2VuZXNpIEVmaWthIFNtYXJ0Ym9vay4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYworCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgorCiBjb25maWcgTUFDSF9NWDUzX0VWSwogCWJvb2wgIlN1cHBvcnQgTVg1MyBFVksgcGxhdGZvcm1zIgogCXNlbGVjdCBTT0NfSU1YNTMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YMl9XRFQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TREhDSV9FU0RIQ19JTVgKQEAgLTEzNiw2ICsxNTEsOCBAQAogY29uZmlnIE1BQ0hfTVg1M19TTUQKIAlib29sICJTdXBwb3J0IE1YNTMgU01EIHBsYXRmb3JtcyIKIAlzZWxlY3QgU09DX0lNWDUzCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YNTMgU01EIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCkBAIC0xNDQsNyArMTYxLDEwIEBACiBjb25maWcgTUFDSF9NWDUzX0xPQ08KIAlib29sICJTdXBwb3J0IE1YNTMgTE9DTyBwbGF0Zm9ybXMiCiAJc2VsZWN0IFNPQ19JTVg1MworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NESENJX0VTREhDX0lNWAogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVg1MyBMT0NPIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCkBAIC0xNTcsNiArMTc3LDcgQEAKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRkVDCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDUwIHJlZmVyZW5jZSBkZXNpZ24gcGxhdGZvcm0gKFJEUCkgYm9hcmQuIFRoaXMKIAkgIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUKaW5kZXggMGQ0M2JlOS4uNGY2MzA0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCi1vYmoteSAgIDo9IGNwdS5vIG1tLm8gY2xvY2stbXg1MS1teDUzLm8gZGV2aWNlcy5vCitvYmoteSAgIDo9IGNwdS5vIG1tLm8gY2xvY2stbXg1MS1teDUzLm8gZGV2aWNlcy5vIGVoY2kubwogb2JqLSQoQ09ORklHX1NPQ19JTVg1MCkgKz0gbW0tbXg1MC5vCiAKIG9iai0kKENPTkZJR19DUFVfRlJFUV9JTVgpICAgICs9IGNwdV9vcC1teDUxLm8KQEAgLTE2LDUgKzE2LDcgQEAKIG9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDUxX0JBU0VCT0FSRCkgKz0gZXVrcmVhX21iaW14NTEtYmFzZWJvYXJkLm8KIG9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9DUFVJTVg1MVNEKSArPSBib2FyZC1jcHVpbXg1MXNkLm8KIG9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9NQklNWFNENTFfQkFTRUJPQVJEKSArPSBldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQubworb2JqLSQoQ09ORklHX01YNTFfRUZJS0FfQ09NTU9OKSArPSBteDUxX2VmaWthLm8KIG9iai0kKENPTkZJR19NQUNIX01YNTFfRUZJS0FNWCkgKz0gYm9hcmQtbXg1MV9lZmlrYW14Lm8KK29iai0kKENPTkZJR19NQUNIX01YNTFfRUZJS0FTQikgKz0gYm9hcmQtbXg1MV9lZmlrYXNiLm8KIG9iai0kKENPTkZJR19NQUNIX01YNTBfUkRQKSArPSBib2FyZC1teDUwX3JkcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtY3B1aW14NTEuYwppbmRleCBmODY1MmVmLi5kMDI5NmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLWNwdWlteDUxLmMKQEAgLTYwLDcgKzYwLDYgQEAKICNkZWZpbmUJTVg1MV9VU0JfUExMX0RJVl8xOV8yX01IWgkweDAxCiAjZGVmaW5lCU1YNTFfVVNCX1BMTF9ESVZfMjRfTUhaCQkweDAyCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoTVg1MV9DUzFfQkFTRV9BRERSICsgMHg0MDAwMDApLApAQCAtMTA1LDEyICsxMDQsOSBAQAogCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQogCSZzZXJpYWxfZGV2aWNlLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgZXVrcmVhX2NwdWlteDUxX3BhZHNbXSA9IHsKQEAgLTE4OCw3ICsxODQsMTAgQEAKIAl2IHw9IE1YNTFfVVNCX1BMTF9ESVZfMTlfMl9NSFo7CiAJX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQzJfT0ZGU0VUKTsKIAlpb3VubWFwKHVzYl9iYXNlKTsKLQlyZXR1cm4gMDsKKworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gbXg1MV9pbml0aWFsaXplX3VzYl9odygwLCBNWENfRUhDSV9JTlRFUk5BTF9QSFkpOwogfQogCiBzdGF0aWMgaW50IGluaXRpYWxpemVfdXNiaDFfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMjA2LDEzICsyMDUsMTYgQEAKIAl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YNTFfVVNCX0NUUkxfMV9PRkZTRVQpOwogCV9fcmF3X3dyaXRlbCh2IHwgTVg1MV9VU0JfQ1RSTF9VSDFfRVhUX0NMS19FTiwgdXNib3RoZXJfYmFzZSArIE1YNTFfVVNCX0NUUkxfMV9PRkZTRVQpOwogCWlvdW5tYXAodXNiX2Jhc2UpOwotCXJldHVybiAwOworCisJbWRlbGF5KDEwKTsKKworCXJldHVybiBteDUxX2luaXRpYWxpemVfdXNiX2h3KDEsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8CisJCQlNWENfRUhDSV9JVENfTk9fVEhSRVNIT0xEKTsKIH0KIAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIGRyX3V0bWlfY29uZmlnID0gewogCS5pbml0CQk9IGluaXRpYWxpemVfb3RnX3BvcnQsCiAJLnBvcnRzYwk9IE1YQ19FSENJX1VUTUlfMTZCSVQsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAogfTsKIAogc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKQEAgLTIyMyw3ICsyMjUsNiBAQAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX2NvbmZpZyA9IHsKIAkuaW5pdAkJPSBpbml0aWFsaXplX3VzYmgxX3BvcnQsCiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSwKLQkuZmxhZ3MJPSAoTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSVRDX05PX1RIUkVTSE9MRCksCiB9OwogCiBzdGF0aWMgaW50IG90Z19tb2RlX2hvc3Q7CkBAIC0yOTgsNyArMjk5LDggQEAKIAkvKiBNYWludGFpbmVyOiBFcmljIELDqW5hcmQgPGVyaWNAZXVrcmVhLmNvbT4gKi8KIAkuYm9vdF9wYXJhbXMgPSBNWDUxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyA9IG14NTFfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14NTFfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDUxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgPSBldWtyZWFfY3B1aW14NTFfaW5pdCwKIAkudGltZXIgPSAmbXhjX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBldWtyZWFfY3B1aW14NTFfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MXNkLmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MXNkLmMKaW5kZXggYWQ5MzE4OS4uMjliMTgwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtY3B1aW14NTFzZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLWNwdWlteDUxc2QuYwpAQCAtNDIsNiArNDIsNyBAQAogCiAjaW5jbHVkZSAiZGV2aWNlcy1pbXg1MS5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKKyNpbmNsdWRlICJjcHVfb3AtbXg1MS5oIgogCiAjZGVmaW5lIFVTQkgxX1JTVAkJSU1YX0dQSU9fTlIoMiwgMjgpCiAjZGVmaW5lIEVUSF9SU1QJCQlJTVhfR1BJT19OUigyLCAzMSkKQEAgLTEwOSw3ICsxMTAsNyBAQAogCiAJLyogVG91Y2hzY3JlZW4gKi8KIAkvKiBJUlEgKi8KLQlfTVg1MV9QQURfQ1NJMV9EOF9fR1BJTzNfMTIgfCBNVVhfUEFEX0NUUkwoUEFEX0NUTF9QVVNfMjJLX1VQIHwKKwlfTVg1MV9QQURfR1BJT19OQU5EX19HUElPX05BTkQgfCBNVVhfUEFEX0NUUkwoUEFEX0NUTF9QVVNfMjJLX1VQIHwKIAkJCVBBRF9DVExfUEtFIHwgUEFEX0NUTF9TUkVfRkFTVCB8CiAJCQlQQURfQ1RMX0RTRV9ISUdIIHwgUEFEX0NUTF9QVUUgfCBQQURfQ1RMX0hZUyksCiB9OwpAQCAtMTE4LDE1ICsxMTksOSBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgaW50IHRzX2dldF9wZW5kb3duX3N0YXRlKHZvaWQpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFRTQzIwMDdfSVJRR1BJTykgPyAwIDogMTsKLX0KLQogc3RhdGljIHN0cnVjdCB0c2MyMDA3X3BsYXRmb3JtX2RhdGEgdHNjMjAwN19pbmZvID0gewogCS5tb2RlbAkJCT0gMjAwNywKIAkueF9wbGF0ZV9vaG1zCQk9IDE4MCwKLQkuZ2V0X3BlbmRvd25fc3RhdGUJPSB0c19nZXRfcGVuZG93bl9zdGF0ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZXVrcmVhX2NwdWlteDUxc2RfaTJjX2RldmljZXNbXSA9IHsKQEAgLTE2Nyw3ICsxNjIsMTAgQEAKIAl2IHw9IE1YNTFfVVNCX1BMTF9ESVZfMTlfMl9NSFo7CiAJX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQzJfT0ZGU0VUKTsKIAlpb3VubWFwKHVzYl9iYXNlKTsKLQlyZXR1cm4gMDsKKworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gbXg1MV9pbml0aWFsaXplX3VzYl9odygwLCBNWENfRUhDSV9JTlRFUk5BTF9QSFkpOwogfQogCiBzdGF0aWMgaW50IGluaXRpYWxpemVfdXNiaDFfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTg2LDEzICsxODQsMTYgQEAKIAlfX3Jhd193cml0ZWwodiB8IE1YNTFfVVNCX0NUUkxfVUgxX0VYVF9DTEtfRU4sCiAJCQl1c2JvdGhlcl9iYXNlICsgTVg1MV9VU0JfQ1RSTF8xX09GRlNFVCk7CiAJaW91bm1hcCh1c2JfYmFzZSk7Ci0JcmV0dXJuIDA7CisKKwltZGVsYXkoMTApOworCisJcmV0dXJuIG14NTFfaW5pdGlhbGl6ZV91c2JfaHcoMSwgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwKKwkJCU1YQ19FSENJX0lUQ19OT19USFJFU0hPTEQpOwogfQogCiBzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgZHJfdXRtaV9jb25maWcgPSB7CiAJLmluaXQJCT0gaW5pdGlhbGl6ZV9vdGdfcG9ydCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfVVRNSV8xNkJJVCwKLQkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUk5BTF9QSFksCiB9OwogCiBzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX3BkYXRhID0gewpAQCAtMjAzLDcgKzIwNCw2IEBACiBzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDFfY29uZmlnID0gewogCS5pbml0CQk9IGluaXRpYWxpemVfdXNiaDFfcG9ydCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAotCS5mbGFncwk9IChNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQgfCBNWENfRUhDSV9JVENfTk9fVEhSRVNIT0xEKSwKIH07CiAKIHN0YXRpYyBpbnQgb3RnX21vZGVfaG9zdDsKQEAgLTI0Miw3ICsyNDIsNyBAQAogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBjcHVpbXg1MXNkX3NwaV9kZXZpY2VbXSA9IHsKIAl7CiAJCS5tb2RhbGlhcyAgICAgICAgPSAibWNwMjUxNSIsCi0JCS5tYXhfc3BlZWRfaHogICAgPSA2NTAwMDAwLAorCQkubWF4X3NwZWVkX2h6ICAgID0gMTAwMDAwMDAsCiAJCS5idXNfbnVtICAgICAgICAgPSAwLAogCQkubW9kZQkJPSBTUElfTU9ERV8wLAogCQkuY2hpcF9zZWxlY3QgICAgID0gMCwKQEAgLTI2OSw2ICsyNjksMTAgQEAKIAlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhldWtyZWFfY3B1aW14NTFzZF9wYWRzLAogCQkJCQlBUlJBWV9TSVpFKGV1a3JlYV9jcHVpbXg1MXNkX3BhZHMpKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9GUkVRX0lNWCkKKwlnZXRfY3B1X29wID0gbXg1MV9nZXRfY3B1X29wOworI2VuZGlmCisKIAlpbXg1MV9hZGRfaW14X3VhcnQoMCwgJnVhcnRfcGRhdGEpOwogCWlteDUxX2FkZF9teGNfbmFuZCgmZXVrcmVhX2NwdWlteDUxc2RfbmFuZF9ib2FyZF9pbmZvKTsKIApAQCAtMzI5LDcgKzMzMyw4IEBACiAJLyogTWFpbnRhaW5lcjogRXJpYyBCw6luYXJkIDxlcmljQGV1a3JlYS5jb20+ICovCiAJLmJvb3RfcGFyYW1zID0gTVg1MV9QSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gPSBteDUxX21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDUxX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXg1MV9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lID0gZXVrcmVhX2NwdWlteDUxc2RfaW5pdCwKIAkudGltZXIgPSAmbXhjX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBldWtyZWFfY3B1aW14NTFzZF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTBfcmRwLmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUwX3JkcC5jCmluZGV4IGZkMzJlNGMuLmRlZGY3ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTBfcmRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MF9yZHAuYwpAQCAtMzUsNyArMzUsMTAgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCi0jaW5jbHVkZSAiZGV2aWNlcy1teDUwLmgiCisjaW5jbHVkZSAiZGV2aWNlcy1pbXg1MC5oIgorCisjZGVmaW5lIEZFQ19FTgkJSU1YX0dQSU9fTlIoNiwgMjMpCisjZGVmaW5lIEZFQ19SRVNFVF9CCUlNWF9HUElPX05SKDQsIDEyKQogCiBzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgbXg1MF9yZHBfcGFkc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogU0QxICovCkBAIC0xMDIsNyArMTA1LDcgQEAKIAlNWDUwX1BBRF9JMkMzX1NDTF9fVVNCT1RHX09DLAogCiAJTVg1MF9QQURfU1NJX1JYQ19fRkVDX01ESU8sCi0JTVg1MF9QQURfU1NJX1JYQ19fRkVDX01ESU8sCisJTVg1MF9QQURfU1NJX1JYRlNfX0ZFQ19NREMsCiAJTVg1MF9QQURfRElTUF9EMF9fRkVDX1RYQ0xLLAogCU1YNTBfUEFEX0RJU1BfRDFfX0ZFQ19SWF9FUiwKIAlNWDUwX1BBRF9ESVNQX0QyX19GRUNfUlhfRFYsCkBAIC0xMTEsNyArMTE0LDYgQEAKIAlNWDUwX1BBRF9ESVNQX0Q1X19GRUNfVFhfRU4sCiAJTVg1MF9QQURfRElTUF9ENl9fRkVDX1RYRDEsCiAJTVg1MF9QQURfRElTUF9EN19fRkVDX1RYRDAsCi0JTVg1MF9QQURfU1NJX1JYRlNfX0ZFQ19NREMsCiAJTVg1MF9QQURfSTJDM19TREFfX0dQSU9fNl8yMywKIAlNWDUwX1BBRF9FQ1NQSTFfU0NMS19fR1BJT180XzEyLAogCkBAIC0xNjgsNiArMTcwLDI0IEBACiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgZmVjX2RhdGEgX19pbml0Y29uc3QgPSB7CisJLnBoeSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG14NTBfcmRwX2ZlY19yZXNldCh2b2lkKQoreworCWdwaW9fcmVxdWVzdChGRUNfRU4sICJmZWMtZW4iKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX0VOLCAwKTsKKwlncGlvX3JlcXVlc3QoRkVDX1JFU0VUX0IsICJmZWMtcmVzZXRfYiIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChGRUNfUkVTRVRfQiwgMCk7CisJbXNsZWVwKDEpOworCWdwaW9fc2V0X3ZhbHVlKEZFQ19SRVNFVF9CLCAxKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBpMmNfZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKIC8qCiAgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwpAQCAtMTc4LDYgKzE5OCwxMSBAQAogCiAJaW14NTBfYWRkX2lteF91YXJ0KDAsICZ1YXJ0X3BkYXRhKTsKIAlpbXg1MF9hZGRfaW14X3VhcnQoMSwgJnVhcnRfcGRhdGEpOworCW14NTBfcmRwX2ZlY19yZXNldCgpOworCWlteDUwX2FkZF9mZWMoJmZlY19kYXRhKTsKKwlpbXg1MF9hZGRfaW14X2kyYygwLCAmaTJjX2RhdGEpOworCWlteDUwX2FkZF9pbXhfaTJjKDEsICZpMmNfZGF0YSk7CisJaW14NTBfYWRkX2lteF9pMmMoMiwgJmkyY19kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14NTBfcmRwX3RpbWVyX2luaXQodm9pZCkKQEAgLTE5MSw3ICsyMTYsOCBAQAogCiBNQUNISU5FX1NUQVJUKE1YNTBfUkRQLCAiRnJlZXNjYWxlIE1YNTAgUmVmZXJlbmNlIERlc2lnbiBQbGF0Zm9ybSIpCiAJLm1hcF9pbyA9IG14NTBfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14NTBfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDUwX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgPSBteDUwX3JkcF9ib2FyZF9pbml0LAogCS50aW1lciA9ICZteDUwX3JkcF90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXg1MF9yZHBfYm9hcmRfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxXzNkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV8zZHMuYwppbmRleCA0OWQ2NDQ4Li42M2RmYmVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxXzNkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfM2RzLmMKQEAgLTcxLDI0ICs3MSwxMCBAQAogfTsKIAogLyogU2VyaWFsIHBvcnRzICovCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0lNWF9NT0RVTEUpCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKLXsKLQlpbXg1MV9hZGRfaW14X3VhcnQoMCwgJnVhcnRfcGRhdGEpOwotCWlteDUxX2FkZF9pbXhfdWFydCgxLCAmdWFydF9wZGF0YSk7Ci0JaW14NTFfYWRkX2lteF91YXJ0KDIsICZ1YXJ0X3BkYXRhKTsKLX0KLSNlbHNlIC8qICFTRVJJQUxfSU1YICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKLXsKLX0KLSNlbmRpZiAvKiBTRVJJQUxfSU1YICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9JTVgpIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0lNWF9NT0RVTEUpCiBzdGF0aWMgaW50IG14NTFfM2RzX2JvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfMSksCiAJS0VZKDAsIDEsIEtFWV8yKSwKQEAgLTEyNCwxNiArMTEwLDYgQEAKIAkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14NTFfM2RzX2JvYXJkX2tleW1hcCksCiB9OwogCi1zdGF0aWMgdm9pZCBteGNfaW5pdF9rZXlwYWQodm9pZCkKLXsKLQlpbXg1MV9hZGRfaW14X2tleXBhZCgmbXg1MV8zZHNfbWFwX2RhdGEpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9rZXlwYWQodm9pZCkKLXsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IG14NTFfM2RzX3NwaTJfY3NbXSA9IHsKIAlNWENfU1BJX0NTKDApLAogCU1YNTFfM0RTX0VDU1BJMl9DUywKQEAgLTE1NywxMSArMTMzLDE0IEBACiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14NTFfM2RzX2luaXQodm9pZCkKIHsKIAlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDUxXzNkc19wYWRzLAogCQkJCQlBUlJBWV9TSVpFKG14NTFfM2RzX3BhZHMpKTsKLQlteGNfaW5pdF9pbXhfdWFydCgpOworCisJaW14NTFfYWRkX2lteF91YXJ0KDAsICZ1YXJ0X3BkYXRhKTsKKwlpbXg1MV9hZGRfaW14X3VhcnQoMSwgJnVhcnRfcGRhdGEpOworCWlteDUxX2FkZF9pbXhfdWFydCgyLCAmdWFydF9wZGF0YSk7CiAKIAlpbXg1MV9hZGRfZWNzcGkoMSwgJm14NTFfM2RzX2Vjc3BpMl9wZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8obXg1MV8zZHNfc3BpX25vcl9kZXZpY2UsCkBAIC0xNzIsNyArMTUxLDggQEAKIAkJCQkgICAgImRldmljZXMgb24gdGhlIGJvYXJkIGFyZSB1bnVzYWJsZS5cbiIpOwogCiAJaW14NTFfYWRkX3NkaGNpX2VzZGhjX2lteCgwLCBOVUxMKTsKLQlteGNfaW5pdF9rZXlwYWQoKTsKKwlpbXg1MV9hZGRfaW14X2tleXBhZCgmbXg1MV8zZHNfbWFwX2RhdGEpOworCWlteDUxX2FkZF9pbXgyX3dkdCgwLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14NTFfM2RzX3RpbWVyX2luaXQodm9pZCkKQEAgLTE4MCwxNSArMTYwLDE2IEBACiAJbXg1MV9jbG9ja3NfaW5pdCgzMjc2OCwgMjQwMDAwMDAsIDIyNTc5MjAwLCAwKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXhjX3RpbWVyID0gewotCS5pbml0CT0gbXg1MV8zZHNfdGltZXJfaW5pdCwKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14NTFfM2RzX3RpbWVyID0geworCS5pbml0ID0gbXg1MV8zZHNfdGltZXJfaW5pdCwKIH07CiAKIE1BQ0hJTkVfU1RBUlQoTVg1MV8zRFMsICJGcmVlc2NhbGUgTVg1MSAzLVN0YWNrIEJvYXJkIikKIAkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLwogCS5ib290X3BhcmFtcyA9IE1YNTFfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gbXg1MV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXg1MV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14NTFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciA9ICZteGNfdGltZXIsCisJLnRpbWVyID0gJm14NTFfM2RzX3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSBteDUxXzNkc19pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9iYWJiYWdlLmMKaW5kZXggMWQyMzFlOC4uYjJlY2QxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9iYWJiYWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9iYWJiYWdlLmMKQEAgLTE2MSwyMyArMTYxLDEwIEBACiB9OwogCiAvKiBTZXJpYWwgcG9ydHMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YX01PRFVMRSkKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQotewotCWlteDUxX2FkZF9pbXhfdWFydCgwLCAmdWFydF9wZGF0YSk7Ci0JaW14NTFfYWRkX2lteF91YXJ0KDEsICZ1YXJ0X3BkYXRhKTsKLQlpbXg1MV9hZGRfaW14X3VhcnQoMiwgJnVhcnRfcGRhdGEpOwotfQotI2Vsc2UgLyogIVNFUklBTF9JTVggKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQotewotfQotI2VuZGlmIC8qIFNFUklBTF9JTVggKi8KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBiYWJiYWdlX2kyY19kYXRhIF9faW5pdGNvbnN0ID0gewogCS5iaXRyYXRlID0gMTAwMDAwLAogfTsKQEAgLTI3Miw3ICsyNTksMTAgQEAKIAl2IHw9IE1YNTFfVVNCX1BMTF9ESVZfMTlfMl9NSFo7CiAJX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQzJfT0ZGU0VUKTsKIAlpb3VubWFwKHVzYl9iYXNlKTsKLQlyZXR1cm4gMDsKKworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gbXg1MV9pbml0aWFsaXplX3VzYl9odygwLCBNWENfRUhDSV9JTlRFUk5BTF9QSFkpOwogfQogCiBzdGF0aWMgaW50IGluaXRpYWxpemVfdXNiaDFfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMjkwLDEzICsyODAsMTYgQEAKIAl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YNTFfVVNCX0NUUkxfMV9PRkZTRVQpOwogCV9fcmF3X3dyaXRlbCh2IHwgTVg1MV9VU0JfQ1RSTF9VSDFfRVhUX0NMS19FTiwgdXNib3RoZXJfYmFzZSArIE1YNTFfVVNCX0NUUkxfMV9PRkZTRVQpOwogCWlvdW5tYXAodXNiX2Jhc2UpOwotCXJldHVybiAwOworCisJbWRlbGF5KDEwKTsKKworCXJldHVybiBteDUxX2luaXRpYWxpemVfdXNiX2h3KDEsIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8CisJCQlNWENfRUhDSV9JVENfTk9fVEhSRVNIT0xEKTsKIH0KIAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIGRyX3V0bWlfY29uZmlnID0gewogCS5pbml0CQk9IGluaXRpYWxpemVfb3RnX3BvcnQsCiAJLnBvcnRzYwk9IE1YQ19FSENJX1VUTUlfMTZCSVQsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAogfTsKIAogc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKQEAgLTMwNyw3ICszMDAsNiBAQAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX2NvbmZpZyA9IHsKIAkuaW5pdAkJPSBpbml0aWFsaXplX3VzYmgxX3BvcnQsCiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSwKLQkuZmxhZ3MJPSAoTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSVRDX05PX1RIUkVTSE9MRCksCiB9OwogCiBzdGF0aWMgaW50IG90Z19tb2RlX2hvc3Q7CkBAIC0zNDksNyArMzQxLDcgQEAKIC8qCiAgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXg1MV9iYWJiYWdlX2luaXQodm9pZCkKIHsKIAlpb211eF92M19jZmdfdCB1c2JoMXN0cCA9IE1YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQOwogCWlvbXV4X3YzX2NmZ190IHBvd2VyX2tleSA9IF9NWDUxX1BBRF9FSU1fQTI3X19HUElPMl8yMSB8CkBAIC0zNjAsNyArMzUyLDExIEBACiAjZW5kaWYKIAlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDUxYmFiYmFnZV9wYWRzLAogCQkJCQlBUlJBWV9TSVpFKG14NTFiYWJiYWdlX3BhZHMpKTsKLQlteGNfaW5pdF9pbXhfdWFydCgpOworCisJaW14NTFfYWRkX2lteF91YXJ0KDAsICZ1YXJ0X3BkYXRhKTsKKwlpbXg1MV9hZGRfaW14X3VhcnQoMSwgJnVhcnRfcGRhdGEpOworCWlteDUxX2FkZF9pbXhfdWFydCgyLCAmdWFydF9wZGF0YSk7CisKIAliYWJiYWdlX2ZlY19yZXNldCgpOwogCWlteDUxX2FkZF9mZWMoTlVMTCk7CiAKQEAgLTM5OSwxNSArMzk1LDE2IEBACiAJbXg1MV9jbG9ja3NfaW5pdCgzMjc2OCwgMjQwMDAwMDAsIDIyNTc5MjAwLCAwKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXhjX3RpbWVyID0gewotCS5pbml0CT0gbXg1MV9iYWJiYWdlX3RpbWVyX2luaXQsCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDUxX2JhYmJhZ2VfdGltZXIgPSB7CisJLmluaXQgPSBteDUxX2JhYmJhZ2VfdGltZXJfaW5pdCwKIH07CiAKIE1BQ0hJTkVfU1RBUlQoTVg1MV9CQUJCQUdFLCAiRnJlZXNjYWxlIE1YNTEgQmFiYmFnZSBCb2FyZCIpCiAJLyogTWFpbnRhaW5lcjogQW1pdCBLdWNoZXJpYSA8YW1pdC5rdWNoZXJpYUBjYW5vbmljYWwuY29tPiAqLwogCS5ib290X3BhcmFtcyA9IE1YNTFfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gbXg1MV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXg1MV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14NTFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciA9ICZteGNfdGltZXIsCisJLnRpbWVyID0gJm14NTFfYmFiYmFnZV90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXg1MV9iYWJiYWdlX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9lZmlrYW14LmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2VmaWthbXguYwppbmRleCBiNzk0NmY4Li5hY2FiMTkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2VmaWthbXguYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2VmaWthbXguYwpAQCAtMjUsNiArMjUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzODkyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtNDAsOCArNDMsNyBAQAogCiAjaW5jbHVkZSAiZGV2aWNlcy1pbXg1MS5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKLQotI2RlZmluZQlNWDUxX1VTQl9QTExfRElWXzI0X01IWgkweDAxCisjaW5jbHVkZSAiZWZpa2EuaCIKIAogI2RlZmluZSBFRklLQU1YX1BDQklEMAkJSU1YX0dQSU9fTlIoMywgMTYpCiAjZGVmaW5lIEVGSUtBTVhfUENCSUQxCQlJTVhfR1BJT19OUigzLCAxNykKQEAgLTUzLDEzICs1NSwxNCBAQAogCiAjZGVmaW5lIEVGSUtBTVhfUE9XRVJfS0VZCUlNWF9HUElPX05SKDIsIDMxKQogCi0jZGVmaW5lIEVGSUtBTVhfU1BJX0NTMAkJSU1YX0dQSU9fTlIoNCwgMjQpCi0jZGVmaW5lIEVGSUtBTVhfU1BJX0NTMQkJSU1YX0dQSU9fTlIoNCwgMjUpCi0KIC8qIGJvYXJkIDEuMSBkb2Vzbid0IGhhdmUgc2FtZSByZXNldCBncGlvICovCiAjZGVmaW5lIEVGSUtBTVhfUkVTRVQxXzEJSU1YX0dQSU9fTlIoMywgMikKICNkZWZpbmUgRUZJS0FNWF9SRVNFVAkJSU1YX0dQSU9fTlIoMSwgNCkKIAorI2RlZmluZSBFRklLQU1YX1BPV0VST0ZGCUlNWF9HUElPX05SKDQsIDEzKQorCisjZGVmaW5lIEVGSUtBTVhfUE1JQwkJSU1YX0dQSU9fTlIoMSwgNikKKwogLyogdGhlIHBjaSBpZHMgcGluIGhhdmUgcHVsbCB1cC4gdGhleSdyZSBkcml2ZW4gbG93IGFjY29yZGluZyB0byBib2FyZCBpZCAqLwogI2RlZmluZSBNWDUxX1BBRF9QQ0JJRDAJSU9NVVhfUEFEKDB4NTE4LCAweDEzMCwgMywgMHgwLCAgIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCiAjZGVmaW5lIE1YNTFfUEFEX1BDQklEMQlJT01VWF9QQUQoMHg1MUMsIDB4MTM0LCAzLCAweDAsICAgMCwgUEFEX0NUTF9QVVNfMTAwS19VUCkKQEAgLTY3LDM4ICs3MCwxMSBAQAogI2RlZmluZSBNWDUxX1BBRF9QV1JLRVkJSU9NVVhfUEFEKDB4NDhjLCAweDBmOCwgMSwgMHgwLCAgIDAsIFBBRF9DVExfUFVTXzEwMEtfVVAgfCBQQURfQ1RMX1BLRSkKIAogc3RhdGljIGlvbXV4X3YzX2NmZ190IG14NTFlZmlrYW14X3BhZHNbXSA9IHsKLQkvKiBVQVJUMSAqLwotCU1YNTFfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhELAotCU1YNTFfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhELAotCU1YNTFfUEFEX1VBUlQxX1JUU19fVUFSVDFfUlRTLAotCU1YNTFfUEFEX1VBUlQxX0NUU19fVUFSVDFfQ1RTLAogCS8qIGJvYXJkIGlkICovCiAJTVg1MV9QQURfUENCSUQwLAogCU1YNTFfUEFEX1BDQklEMSwKIAlNWDUxX1BBRF9QQ0JJRDIsCiAKLQkvKiBTRCAxICovCi0JTVg1MV9QQURfU0QxX0NNRF9fU0QxX0NNRCwKLQlNWDUxX1BBRF9TRDFfQ0xLX19TRDFfQ0xLLAotCU1YNTFfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwLAotCU1YNTFfUEFEX1NEMV9EQVRBMV9fU0QxX0RBVEExLAotCU1YNTFfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyLAotCU1YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzLAotCi0JLyogU0QgMiAqLwotCU1YNTFfUEFEX1NEMl9DTURfX1NEMl9DTUQsCi0JTVg1MV9QQURfU0QyX0NMS19fU0QyX0NMSywKLQlNWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMCwKLQlNWDUxX1BBRF9TRDJfREFUQTFfX1NEMl9EQVRBMSwKLQlNWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMiwKLQlNWDUxX1BBRF9TRDJfREFUQTNfX1NEMl9EQVRBMywKLQotCS8qIFNEL01NQyBXUC9DRCAqLwotCU1YNTFfUEFEX0dQSU8xXzBfX1NEMV9DRCwKLQlNWDUxX1BBRF9HUElPMV8xX19TRDFfV1AsCi0JTVg1MV9QQURfR1BJTzFfN19fU0QyX1dQLAotCU1YNTFfUEFEX0dQSU8xXzhfX1NEMl9DRCwKLQogCS8qIGxlZHMgKi8KIAlNWDUxX1BBRF9DU0kxX0Q5X19HUElPM18xMywKIAlNWDUxX1BBRF9DU0kxX1ZTWU5DX19HUElPM18xNCwKQEAgLTEwNyw2NCArODMsMTIgQEAKIAkvKiBwb3dlciBrZXkgKi8KIAlNWDUxX1BBRF9QV1JLRVksCiAKLQkvKiBzcGkgKi8KLQlNWDUxX1BBRF9DU1BJMV9NT1NJX19FQ1NQSTFfTU9TSSwKLQlNWDUxX1BBRF9DU1BJMV9NSVNPX19FQ1NQSTFfTUlTTywKLQlNWDUxX1BBRF9DU1BJMV9TUzBfX0dQSU80XzI0LAotCU1YNTFfUEFEX0NTUEkxX1NTMV9fR1BJTzRfMjUsCi0JTVg1MV9QQURfQ1NQSTFfUkRZX19FQ1NQSTFfUkRZLAotCU1YNTFfUEFEX0NTUEkxX1NDTEtfX0VDU1BJMV9TQ0xLLAotCiAJLyogcmVzZXQgKi8KIAlNWDUxX1BBRF9ESTFfUElOMTNfX0dQSU8zXzIsCiAJTVg1MV9QQURfR1BJTzFfNF9fR1BJTzFfNCwKLX07CiAKLS8qIFNlcmlhbCBwb3J0cyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9JTVhfTU9EVUxFKQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCi17Ci0JaW14NTFfYWRkX2lteF91YXJ0KDAsICZ1YXJ0X3BkYXRhKTsKLQlpbXg1MV9hZGRfaW14X3VhcnQoMSwgJnVhcnRfcGRhdGEpOwotCWlteDUxX2FkZF9pbXhfdWFydCgyLCAmdWFydF9wZGF0YSk7Ci19Ci0jZWxzZSAvKiAhU0VSSUFMX0lNWCAqLwotc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCi17Ci19Ci0jZW5kaWYgLyogU0VSSUFMX0lNWCAqLwotCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGJvYXJkIHNwZWNpZmljIGFzIHRoZSBiaXQgbWFzayBmb3IgdGhlIHBsbGRpdiB3aWxsIGFsc28KLSAqIGJlIGRpZmZlcmVudCBmb3Igb3RoZXIgRnJlZXNjYWxlIFNvQ3MsIHRodXMgYSBjb21tb24gYml0bWFzayBpcyBub3QKLSAqIHBvc3NpYmxlIGFuZCBjYW5ub3QgZ2V0IHBsYWNlIGluIC9wbGF0LW14Yy9laGNpLmMuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdGlhbGl6ZV9vdGdfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXUzMiB2OwotCXZvaWQgX19pb21lbSAqdXNiX2Jhc2U7Ci0Jdm9pZCBfX2lvbWVtICp1c2JvdGhlcl9iYXNlOwotCXVzYl9iYXNlID0gaW9yZW1hcChNWDUxX09UR19CQVNFX0FERFIsIFNaXzRLKTsKLQlpZiAoIXVzYl9iYXNlKQotCQlyZXR1cm4gLUVOT01FTTsKLQl1c2JvdGhlcl9iYXNlID0gKHZvaWQgX19pb21lbSAqKSh1c2JfYmFzZSArIE1YNV9VU0JPVEhFUl9SRUdTX09GRlNFVCk7Ci0KLQkvKiBTZXQgdGhlIFBIWSBjbG9jayB0byAxOS4yTUh6ICovCi0JdiA9IF9fcmF3X3JlYWRsKHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQzJfT0ZGU0VUKTsKLQl2ICY9IH5NWDVfVVNCX1VUTUlfUEhZQ1RSTDFfUExMRElWX01BU0s7Ci0JdiB8PSBNWDUxX1VTQl9QTExfRElWXzI0X01IWjsKLQlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JfUEhZX0NUUl9GVU5DMl9PRkZTRVQpOwotCWlvdW5tYXAodXNiX2Jhc2UpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgZHJfdXRtaV9jb25maWcgPSB7Ci0JLmluaXQgICA9IGluaXRpYWxpemVfb3RnX3BvcnQsCi0JLnBvcnRzYyA9IE1YQ19FSENJX1VUTUlfMTZCSVQsCi0JLmZsYWdzICA9IE1YQ19FSENJX0lOVEVSTkFMX1BIWSwKKwkvKiBwb3dlciBvZmYgKi8KKwlNWDUxX1BBRF9DU0kyX1ZTWU5DX19HUElPNF8xMywKIH07CiAKIC8qICAgUENCSUQyICBQQ0JJRDEgUENCSUQwICBTVEFURQpAQCAtMjY1LDQ3ICsxODksNiBAQAogCS5uYnV0dG9ucyA9IEFSUkFZX1NJWkUobXg1MV9lZmlrYW14X3Bvd2Vya2V5KSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBteDUxX2VmaWthbXhfc3BpX25vcl9wYXJ0aXRpb25zW10gPSB7Ci0JewotCSAubmFtZSA9ICJ1LWJvb3QiLAotCSAub2Zmc2V0ID0gMCwKLQkgLnNpemUgPSBTWl8yNTZLLAotCX0sCi0JewotCSAgLm5hbWUgPSAiY29uZmlnIiwKLQkgIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JICAuc2l6ZSA9IFNaXzY0SywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG14NTFfZWZpa2FteF9zcGlfZmxhc2hfZGF0YSA9IHsKLQkubmFtZQkJPSAic3BpX2ZsYXNoIiwKLQkucGFydHMJCT0gbXg1MV9lZmlrYW14X3NwaV9ub3JfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG14NTFfZWZpa2FteF9zcGlfbm9yX3BhcnRpdGlvbnMpLAotCS50eXBlCQk9ICJzc3QyNXZmMDMyYiIsCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG14NTFfZWZpa2FteF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkubW9kYWxpYXMgPSAibTI1cDgwIiwKLQkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLAotCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IDEsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJm14NTFfZWZpa2FteF9zcGlfZmxhc2hfZGF0YSwKLQkJLmlycSA9IC0xLAotCX0sCi19OwotCi1zdGF0aWMgaW50IG14NTFfZWZpa2FteF9zcGlfY3NbXSA9IHsKLQlFRklLQU1YX1NQSV9DUzAsCi0JRUZJS0FNWF9TUElfQ1MxLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfaW14X21hc3RlciBteDUxX2VmaWthbXhfc3BpX3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5jaGlwc2VsZWN0ICAgICA9IG14NTFfZWZpa2FteF9zcGlfY3MsCi0JLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShteDUxX2VmaWthbXhfc3BpX2NzKSwKLX07Ci0KIHZvaWQgbXg1MV9lZmlrYW14X3Jlc2V0KHZvaWQpCiB7CiAJaWYgKHN5c3RlbV9yZXYgPT0gMHgxMSkKQEAgLTMxNCwxNCArMTk3LDUzIEBACiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChFRklLQU1YX1JFU0VULCAwKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqcHdndDEsICpwd2d0MiwgKmNvaW5jZWxsOworCitzdGF0aWMgdm9pZCBteDUxX2VmaWthbXhfcG93ZXJfb2ZmKHZvaWQpCit7CisJaWYgKCFJU19FUlIoY29pbmNlbGwpKQorCQlyZWd1bGF0b3JfZGlzYWJsZShjb2luY2VsbCk7CisKKwlpZiAoIUlTX0VSUihwd2d0MSkgJiYgIUlTX0VSUihwd2d0MikpIHsKKwkJcmVndWxhdG9yX2Rpc2FibGUocHdndDIpOworCQlyZWd1bGF0b3JfZGlzYWJsZShwd2d0MSk7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChFRklLQU1YX1BPV0VST0ZGLCAxKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbXg1MV9lZmlrYW14X3Bvd2VyX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19teDUxX2VmaWthbXgoKSkgeworCQlwd2d0MSA9IHJlZ3VsYXRvcl9nZXQoTlVMTCwgInB3Z3QxIik7CisJCXB3Z3QyID0gcmVndWxhdG9yX2dldChOVUxMLCAicHdndDIiKTsKKwkJaWYgKCFJU19FUlIocHdndDEpICYmICFJU19FUlIocHdndDIpKSB7CisJCQlyZWd1bGF0b3JfZW5hYmxlKHB3Z3QxKTsKKwkJCXJlZ3VsYXRvcl9lbmFibGUocHdndDIpOworCQl9CisJCWdwaW9fcmVxdWVzdChFRklLQU1YX1BPV0VST0ZGLCAicG93ZXJvZmYiKTsKKwkJcG1fcG93ZXJfb2ZmID0gbXg1MV9lZmlrYW14X3Bvd2VyX29mZjsKKworCQkvKiBlbmFibGUgY29pbmNlbGwgY2hhcmdlci4gbWF5YmUgbmVlZCBhIHNtYWxsIHBvd2VyIGRyaXZlciA/ICovCisJCWNvaW5jZWxsID0gcmVndWxhdG9yX2dldChOVUxMLCAiY29pbmNlbGwiKTsKKwkJaWYgKCFJU19FUlIoY29pbmNlbGwpKSB7CisJCQlyZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoY29pbmNlbGwsIDMwMDAwMDAsIDMwMDAwMDApOworCQkJcmVndWxhdG9yX2VuYWJsZShjb2luY2VsbCk7CisJCX0KKworCQlyZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHMoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwobXg1MV9lZmlrYW14X3Bvd2VyX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgbXg1MV9lZmlrYW14X2luaXQodm9pZCkKIHsKIAlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDUxZWZpa2FteF9wYWRzLAogCQkJCQlBUlJBWV9TSVpFKG14NTFlZmlrYW14X3BhZHMpKTsKKwllZmlrYV9ib2FyZF9jb21tb25faW5pdCgpOworCiAJbXg1MV9lZmlrYW14X2JvYXJkX2lkKCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmRyX2hvc3RfZGV2aWNlLCAmZHJfdXRtaV9jb25maWcpOwotCW14Y19pbml0X2lteF91YXJ0KCk7Ci0JaW14NTFfYWRkX3NkaGNpX2VzZGhjX2lteCgwLCBOVUxMKTsKIAogCS8qIG9uIDwgMS4yIGJvYXJkcyBib3RoIFNEIGNvbnRyb2xsZXJzIGFyZSB1c2VkICovCiAJaWYgKHN5c3RlbV9yZXYgPCAweDEyKSB7CkBAIC0zMzIsMTAgKzI1NCw2IEBACiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZteDUxX2VmaWthbXhfbGVkc19kZXZpY2UpOwogCWlteDUxX2FkZF9ncGlvX2tleXMoJm14NTFfZWZpa2FteF9wb3dlcmtleV9kYXRhKTsKIAotCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG14NTFfZWZpa2FteF9zcGlfYm9hcmRfaW5mbywKLQkJQVJSQVlfU0laRShteDUxX2VmaWthbXhfc3BpX2JvYXJkX2luZm8pKTsKLQlpbXg1MV9hZGRfZWNzcGkoMCwgJm14NTFfZWZpa2FteF9zcGlfcGRhdGEpOwotCiAJaWYgKHN5c3RlbV9yZXYgPT0gMHgxMSkgewogCQlncGlvX3JlcXVlc3QoRUZJS0FNWF9SRVNFVDFfMSwgInJlc2V0Iik7CiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChFRklLQU1YX1JFU0VUMV8xLCAxKTsKQEAgLTM0Myw2ICsyNjEsMjAgQEAKIAkJZ3Bpb19yZXF1ZXN0KEVGSUtBTVhfUkVTRVQsICJyZXNldCIpOwogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRUZJS0FNWF9SRVNFVCwgMSk7CiAJfQorCisJLyoKKwkgKiBlbmFibGUgd2lmaSBieSBkZWZhdWx0IG9ubHkgb24gbXgKKwkgKiBzYiBhbmQgbXggaGF2ZSBzYW1lIHdsYW4gcGluIGJ1dCB0aGUgdmFsdWUgdG8gZW5hYmxlIGl0IGFyZQorCSAqIGRpZmZlcmVudCA6LworCSAqLworCWdwaW9fcmVxdWVzdChFRklLQV9XTEFOX0VOLCAid2xhbl9lbiIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChFRklLQV9XTEFOX0VOLCAwKTsKKwltc2xlZXAoMTApOworCisJZ3Bpb19yZXF1ZXN0KEVGSUtBX1dMQU5fUkVTRVQsICJ3bGFuX3JzdCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChFRklLQV9XTEFOX1JFU0VULCAwKTsKKwltc2xlZXAoMTApOworCWdwaW9fc2V0X3ZhbHVlKEVGSUtBX1dMQU5fUkVTRVQsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXg1MV9lZmlrYW14X3RpbWVyX2luaXQodm9pZCkKQEAgLTM1MCwxNSArMjgyLDE2IEBACiAJbXg1MV9jbG9ja3NfaW5pdCgzMjc2OCwgMjQwMDAwMDAsIDIyNTc5MjAwLCAyNDU3NjAwMCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14Y190aW1lciA9IHsKLQkuaW5pdAk9IG14NTFfZWZpa2FteF90aW1lcl9pbml0LAorc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXg1MV9lZmlrYW14X3RpbWVyID0geworCS5pbml0ID0gbXg1MV9lZmlrYW14X3RpbWVyX2luaXQsCiB9OwogCiBNQUNISU5FX1NUQVJUKE1YNTFfRUZJS0FNWCwgIkdlbmVzaSBFZmlrYU1YIG5ldHRvcCIpCiAJLyogTWFpbnRhaW5lcjogQW1pdCBLdWNoZXJpYSA8YW1pdC5rdWNoZXJpYUBsaW5hcm8ub3JnPiAqLwogCS5ib290X3BhcmFtcyA9IE1YNTFfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gbXg1MV9tYXBfaW8sCisJLmluaXRfZWFybHkgPSBpbXg1MV9pbml0X2Vhcmx5LAogCS5pbml0X2lycSA9IG14NTFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSA9ICBteGNfYm9hcmRfaW5pdCwKLQkudGltZXIgPSAmbXhjX3RpbWVyLAorCS50aW1lciA9ICZteDUxX2VmaWthbXhfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IG14NTFfZWZpa2FteF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfZWZpa2FzYi5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9lZmlrYXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwNGNlODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2VmaWthc2IuYwpAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KKyAqCisgKiBiYXNlZCBvbiBjb2RlIGZyb20gdGhlIGZvbGxvd2luZworICogQ29weXJpZ2h0IDIwMDktMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDktMjAxMCBQZWdhdHJvbiBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgR2VuZXNpIFVTQSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzODkyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKyNpbmNsdWRlIDxtYWNoL3VscGkuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXg1MS5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14NTEuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSAiZWZpa2EuaCIKKworI2RlZmluZSBFRklLQVNCX1VTQkgyX1NUUAlJTVhfR1BJT19OUigyLCAyMCkKKyNkZWZpbmUgRUZJS0FTQl9HUkVFTl9MRUQJSU1YX0dQSU9fTlIoMSwgMykKKyNkZWZpbmUgRUZJS0FTQl9XSElURV9MRUQJSU1YX0dQSU9fTlIoMiwgMjUpCisjZGVmaW5lIEVGSUtBU0JfUENCSUQwCQlJTVhfR1BJT19OUigyLCAyOCkKKyNkZWZpbmUgRUZJS0FTQl9QQ0JJRDEJCUlNWF9HUElPX05SKDIsIDI5KQorI2RlZmluZSBFRklLQVNCX1BXUktFWQkJSU1YX0dQSU9fTlIoMiwgMzEpCisjZGVmaW5lIEVGSUtBU0JfTElECQlJTVhfR1BJT19OUigzLCAxNCkKKyNkZWZpbmUgRUZJS0FTQl9QT1dFUk9GRglJTVhfR1BJT19OUig0LCAxMykKKyNkZWZpbmUgRUZJS0FTQl9SRktJTEwJCUlNWF9HUElPX05SKDMsIDEpCisKKyNkZWZpbmUgTVg1MV9QQURfUFdSS0VZIElPTVVYX1BBRCgweDQ4YywgMHgwZjgsIDEsIDB4MCwgICAwLCBQQURfQ1RMX1BVU18xMDBLX1VQIHwgUEFEX0NUTF9QS0UpCisKK3N0YXRpYyBpb211eF92M19jZmdfdCBteDUxZWZpa2FzYl9wYWRzW10gPSB7CisJLyogVVNCIEhPU1QyICovCisJTVg1MV9QQURfRUlNX0QxNl9fVVNCSDJfREFUQTAsCisJTVg1MV9QQURfRUlNX0QxN19fVVNCSDJfREFUQTEsCisJTVg1MV9QQURfRUlNX0QxOF9fVVNCSDJfREFUQTIsCisJTVg1MV9QQURfRUlNX0QxOV9fVVNCSDJfREFUQTMsCisJTVg1MV9QQURfRUlNX0QyMF9fVVNCSDJfREFUQTQsCisJTVg1MV9QQURfRUlNX0QyMV9fVVNCSDJfREFUQTUsCisJTVg1MV9QQURfRUlNX0QyMl9fVVNCSDJfREFUQTYsCisJTVg1MV9QQURfRUlNX0QyM19fVVNCSDJfREFUQTcsCisJTVg1MV9QQURfRUlNX0EyNF9fVVNCSDJfQ0xLLAorCU1YNTFfUEFEX0VJTV9BMjVfX1VTQkgyX0RJUiwKKwlNWDUxX1BBRF9FSU1fQTI2X19VU0JIMl9TVFAsCisJTVg1MV9QQURfRUlNX0EyN19fVVNCSDJfTlhULAorCisJLyogbGVkcyAqLworCU1YNTFfUEFEX0VJTV9DUzBfX0dQSU8yXzI1LAorCU1YNTFfUEFEX0dQSU8xXzNfX0dQSU8xXzMsCisKKwkvKiBwY2IgaWQgKi8KKwlNWDUxX1BBRF9FSU1fQ1MzX19HUElPMl8yOCwKKwlNWDUxX1BBRF9FSU1fQ1M0X19HUElPMl8yOSwKKworCS8qIGxpZCAqLworCU1YNTFfUEFEX0NTSTFfVlNZTkNfX0dQSU8zXzE0LAorCisJLyogcG93ZXIga2V5Ki8KKwlNWDUxX1BBRF9QV1JLRVksCisKKwkvKiB3aWZpL2J0IGJ1dHRvbiAqLworCU1YNTFfUEFEX0RJMV9QSU4xMl9fR1BJTzNfMSwKKworCS8qIHBvd2VyIG9mZiAqLworCU1YNTFfUEFEX0NTSTJfVlNZTkNfX0dQSU80XzEzLAorCisJLyogd2RvZyByZXNldCAqLworCU1YNTFfUEFEX0dQSU8xXzRfX1dET0cxX1dET0dfQiwKKworCS8qIEJUICovCisJTVg1MV9QQURfRUlNX0ExN19fR1BJTzJfMTEsCit9OworCitzdGF0aWMgaW50IGluaXRpYWxpemVfdXNiaDJfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlvbXV4X3YzX2NmZ190IHVzYmgyc3RwID0gTVg1MV9QQURfRUlNX0EyNl9fVVNCSDJfU1RQOworCWlvbXV4X3YzX2NmZ190IHVzYmgyZ3BpbyA9IE1YNTFfUEFEX0VJTV9BMjZfX0dQSU8yXzIwOworCisJbXhjX2lvbXV4X3YzX3NldHVwX3BhZCh1c2JoMmdwaW8pOworCWdwaW9fcmVxdWVzdChFRklLQVNCX1VTQkgyX1NUUCwgInVzYmgyX3N0cCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChFRklLQVNCX1VTQkgyX1NUUCwgMCk7CisJbXNsZWVwKDEpOworCWdwaW9fc2V0X3ZhbHVlKEVGSUtBU0JfVVNCSDJfU1RQLCAxKTsKKwltc2xlZXAoMSk7CisKKwlncGlvX2ZyZWUoRUZJS0FTQl9VU0JIMl9TVFApOworCW14Y19pb211eF92M19zZXR1cF9wYWQodXNiaDJzdHApOworCisJbWRlbGF5KDEwKTsKKworCXJldHVybiBteDUxX2luaXRpYWxpemVfdXNiX2h3KHBkZXYtPmlkLCBNWENfRUhDSV9JVENfTk9fVEhSRVNIT0xEKTsKK30KKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX2NvbmZpZyA9IHsKKwkuaW5pdCAgID0gaW5pdGlhbGl6ZV91c2JoMl9wb3J0LAorCS5wb3J0c2MgPSBNWENfRUhDSV9NT0RFX1VMUEksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXg1MV9lZmlrYXNiX3VzYih2b2lkKQoreworCXVzYmgyX2NvbmZpZy5vdGcgPSBpbXhfb3RnX3VscGlfY3JlYXRlKFVMUElfT1RHX0RSVlZCVVMgfAorCQkJVUxQSV9PVEdfRFJWVkJVU19FWFQgfCBVTFBJX09UR19FWFRWQlVTSU5EKTsKKwlpZiAodXNiaDJfY29uZmlnLm90ZykKKwkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyX2RldmljZSwgJnVzYmgyX2NvbmZpZyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgbXg1MV9lZmlrYXNiX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImVmaWthc2I6Z3JlZW4iLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImRlZmF1bHQtb24iLAorCQkuZ3BpbyA9IEVGSUtBU0JfR1JFRU5fTEVELAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gImVmaWthc2I6d2hpdGUiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImNhcHMiLAorCQkuZ3BpbyA9IEVGSUtBU0JfV0hJVEVfTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbXg1MV9lZmlrYXNiX2xlZHNfZGF0YSA9IHsKKwkubGVkcyA9IG14NTFfZWZpa2FzYl9sZWRzLAorCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUobXg1MV9lZmlrYXNiX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXg1MV9lZmlrYXNiX2xlZHNfZGV2aWNlID0geworCS5uYW1lID0gImxlZHMtZ3BpbyIsCisJLmlkID0gLTEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXg1MV9lZmlrYXNiX2xlZHNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIG14NTFfZWZpa2FzYl9rZXlzW10gPSB7CisJeworCQkuY29kZSA9IEtFWV9QT1dFUiwKKwkJLmdwaW8gPSBFRklLQVNCX1BXUktFWSwKKwkJLnR5cGUgPSBFVl9QV1IsCisJCS5kZXNjID0gIlBvd2VyIEJ1dHRvbiIsCisJCS53YWtldXAgPSAxLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwgPSAxMCwgLyogbXMgKi8KKwl9LAorCXsKKwkJLmNvZGUgPSBTV19MSUQsCisJCS5ncGlvID0gRUZJS0FTQl9MSUQsCisJCS50eXBlID0gRVZfU1csCisJCS5kZXNjID0gIkxpZCBTd2l0Y2giLAorCX0sCisJeworCQkvKiBTV19SRktJTExBTEwgdnMgS0VZX1JGS0lMTCA/ICovCisJCS5jb2RlID0gU1dfUkZLSUxMX0FMTCwKKwkJLmdwaW8gPSBFRklLQVNCX1JGS0lMTCwKKwkJLnR5cGUgPSBFVl9TVywKKwkJLmRlc2MgPSAicmZraWxsIiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBteDUxX2VmaWthc2Jfa2V5c19kYXRhIF9faW5pdGNvbnN0ID0geworCS5idXR0b25zID0gbXg1MV9lZmlrYXNiX2tleXMsCisJLm5idXR0b25zID0gQVJSQVlfU0laRShteDUxX2VmaWthc2Jfa2V5cyksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqcHdndDEsICpwd2d0MjsKKworc3RhdGljIHZvaWQgbXg1MV9lZmlrYXNiX3Bvd2VyX29mZih2b2lkKQoreworCWdwaW9fc2V0X3ZhbHVlKEVGSUtBX1VTQl9QSFlfUkVTRVQsIDApOworCisJaWYgKCFJU19FUlIocHdndDEpICYmICFJU19FUlIocHdndDIpKSB7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHB3Z3QyKTsKKwkJcmVndWxhdG9yX2Rpc2FibGUocHdndDEpOworCX0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRUZJS0FTQl9QT1dFUk9GRiwgMSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG14NTFfZWZpa2FzYl9wb3dlcl9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfbXg1MV9lZmlrYXNiKCkpIHsKKwkJcHdndDEgPSByZWd1bGF0b3JfZ2V0KE5VTEwsICJwd2d0MSIpOworCQlwd2d0MiA9IHJlZ3VsYXRvcl9nZXQoTlVMTCwgInB3Z3QyIik7CisJCWlmICghSVNfRVJSKHB3Z3QxKSAmJiAhSVNfRVJSKHB3Z3QyKSkgeworCQkJcmVndWxhdG9yX2VuYWJsZShwd2d0MSk7CisJCQlyZWd1bGF0b3JfZW5hYmxlKHB3Z3QyKTsKKwkJfQorCQlncGlvX3JlcXVlc3QoRUZJS0FTQl9QT1dFUk9GRiwgInBvd2Vyb2ZmIik7CisJCXBtX3Bvd2VyX29mZiA9IG14NTFfZWZpa2FzYl9wb3dlcl9vZmY7CisKKwkJcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKCk7CisJfQorCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKG14NTFfZWZpa2FzYl9wb3dlcl9pbml0KTsKKworLyogMDEgICAgIFIxLjMgYm9hcmQKKyAgIDEwICAgICBSMi4wIGJvYXJkICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXg1MV9lZmlrYXNiX2JvYXJkX2lkKHZvaWQpCit7CisJaW50IGlkOworCisJZ3Bpb19yZXF1ZXN0KEVGSUtBU0JfUENCSUQwLCAicGNiIGlkMCIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEVGSUtBU0JfUENCSUQwKTsKKwlncGlvX3JlcXVlc3QoRUZJS0FTQl9QQ0JJRDEsICJwY2IgaWQxIik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoRUZJS0FTQl9QQ0JJRDEpOworCisJaWQgPSBncGlvX2dldF92YWx1ZShFRklLQVNCX1BDQklEMCk7CisJaWQgfD0gZ3Bpb19nZXRfdmFsdWUoRUZJS0FTQl9QQ0JJRDEpIDw8IDE7CisKKwlzd2l0Y2ggKGlkKSB7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzeXN0ZW1fcmV2ID0gMHgxMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzeXN0ZW1fcmV2ID0gMHgyMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWZpa2FzYl9ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMobXg1MWVmaWthc2JfcGFkcywKKwkJCQkJQVJSQVlfU0laRShteDUxZWZpa2FzYl9wYWRzKSk7CisJZWZpa2FfYm9hcmRfY29tbW9uX2luaXQoKTsKKworCW14NTFfZWZpa2FzYl9ib2FyZF9pZCgpOworCW14NTFfZWZpa2FzYl91c2IoKTsKKwlpbXg1MV9hZGRfc2RoY2lfZXNkaGNfaW14KDEsIE5VTEwpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZteDUxX2VmaWthc2JfbGVkc19kZXZpY2UpOworCWlteDUxX2FkZF9ncGlvX2tleXMoJm14NTFfZWZpa2FzYl9rZXlzX2RhdGEpOworCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDUxX2VmaWthc2JfdGltZXJfaW5pdCh2b2lkKQoreworCW14NTFfY2xvY2tzX2luaXQoMzI3NjgsIDI0MDAwMDAwLCAyMjU3OTIwMCwgMjQ1NzYwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDUxX2VmaWthc2JfdGltZXIgPSB7CisJLmluaXQJPSBteDUxX2VmaWthc2JfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTVg1MV9FRklLQVNCLCAiR2VuZXNpIEVmaWthIFNtYXJ0Ym9vayIpCisJLmJvb3RfcGFyYW1zID0gTVg1MV9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gPSBteDUxX21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDUxX2luaXRfZWFybHksCisJLmluaXRfaXJxID0gbXg1MV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lID0gIGVmaWthc2JfYm9hcmRfaW5pdCwKKwkudGltZXIgPSAmbXg1MV9lZmlrYXNiX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfZXZrLmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2V2ay5jCmluZGV4IGNhZWUwNGMuLjdiNTczNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfZXZrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1M19ldmsuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWW9uZyBTaGVuLiA8WW9uZy5TaGVuQGxpbmFyby5vcmc+CiAgKi8KIApAQCAtNDIsMjggKzQyLDI0IEBACiAjaW5jbHVkZSAiZGV2aWNlcy1pbXg1My5oIgogCiBzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgbXg1M19ldmtfcGFkc1tdID0gewotCU1YNTNfUEFEX0NTSTBfRDEwX19VQVJUMV9UWEQsCi0JTVg1M19QQURfQ1NJMF9EMTFfX1VBUlQxX1JYRCwKLQlNWDUzX1BBRF9BVEFfRElPV19fVUFSVDFfVFhELAotCU1YNTNfUEFEX0FUQV9ETUFDS19fVUFSVDFfUlhELAorCU1YNTNfUEFEX0NTSTBfREFUMTBfX1VBUlQxX1RYRF9NVVgsCisJTVg1M19QQURfQ1NJMF9EQVQxMV9fVUFSVDFfUlhEX01VWCwKIAotCU1YNTNfUEFEX0FUQV9CVUZGRVJfRU5fX1VBUlQyX1JYRCwKLQlNWDUzX1BBRF9BVEFfRE1BUlFfX1VBUlQyX1RYRCwKLQlNWDUzX1BBRF9BVEFfRElPUl9fVUFSVDJfUlRTLAotCU1YNTNfUEFEX0FUQV9JTlRSUV9fVUFSVDJfQ1RTLAorCU1YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19VQVJUMl9SWERfTVVYLAorCU1YNTNfUEFEX1BBVEFfRE1BUlFfX1VBUlQyX1RYRF9NVVgsCisJTVg1M19QQURfUEFUQV9ESU9SX19VQVJUMl9SVFMsCisJTVg1M19QQURfUEFUQV9JTlRSUV9fVUFSVDJfQ1RTLAogCi0JTVg1M19QQURfQVRBX0NTXzBfX1VBUlQzX1RYRCwKLQlNWDUzX1BBRF9BVEFfQ1NfMV9fVUFSVDNfUlhELAotCU1YNTNfUEFEX0FUQV9EQV8xX19VQVJUM19DVFMsCi0JTVg1M19QQURfQVRBX0RBXzJfX1VBUlQzX1JUUywKKwlNWDUzX1BBRF9QQVRBX0NTXzBfX1VBUlQzX1RYRF9NVVgsCisJTVg1M19QQURfUEFUQV9DU18xX19VQVJUM19SWERfTVVYLAogCi0JTVg1M19QQURfRUlNX0QxNl9fQ1NQSTFfU0NMSywKLQlNWDUzX1BBRF9FSU1fRDE3X19DU1BJMV9NSVNPLAotCU1YNTNfUEFEX0VJTV9EMThfX0NTUEkxX01PU0ksCisJTVg1M19QQURfRUlNX0QxNl9fRUNTUEkxX1NDTEssCisJTVg1M19QQURfRUlNX0QxN19fRUNTUEkxX01JU08sCisJTVg1M19QQURfRUlNX0QxOF9fRUNTUEkxX01PU0ksCiAKIAkvKiBlY3NwaSBjaGlwIHNlbGVjdCBsaW5lcyAqLwotCU1YNTNfUEFEX0VJTV9FQjJfX0dQSU9fMl8zMCwKLQlNWDUzX1BBRF9FSU1fRDE5X19HUElPXzNfMTksCisJTVg1M19QQURfRUlNX0VCMl9fR1BJTzJfMzAsCisJTVg1M19QQURfRUlNX0QxOV9fR1BJTzNfMTksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSBteDUzX2V2a191YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0gewpAQCAtNzIsOSArNjgsOSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXg1M19ldmtfaW5pdF91YXJ0KHZvaWQpCiB7Ci0JaW14NTNfYWRkX2lteF91YXJ0KDAsICZteDUzX2V2a191YXJ0X3BkYXRhKTsKKwlpbXg1M19hZGRfaW14X3VhcnQoMCwgTlVMTCk7CiAJaW14NTNfYWRkX2lteF91YXJ0KDEsICZteDUzX2V2a191YXJ0X3BkYXRhKTsKLQlpbXg1M19hZGRfaW14X3VhcnQoMiwgJm14NTNfZXZrX3VhcnRfcGRhdGEpOworCWlteDUzX2FkZF9pbXhfdWFydCgyLCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteDUzX2V2a19pMmNfZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTEzOSw2ICsxMzUsNyBAQAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG14NTNfZXZrX3NwaV9ib2FyZF9pbmZvLAogCQlBUlJBWV9TSVpFKG14NTNfZXZrX3NwaV9ib2FyZF9pbmZvKSk7CiAJaW14NTNfYWRkX2Vjc3BpKDAsICZteDUzX2V2a19zcGlfZGF0YSk7CisJaW14NTNfYWRkX2lteDJfd2R0KDAsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXg1M19ldmtfdGltZXJfaW5pdCh2b2lkKQpAQCAtMTUyLDcgKzE0OSw4IEBACiAKIE1BQ0hJTkVfU1RBUlQoTVg1M19FVkssICJGcmVlc2NhbGUgTVg1MyBFVksgQm9hcmQiKQogCS5tYXBfaW8gPSBteDUzX21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDUzX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXg1M19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lID0gbXg1M19ldmtfYm9hcmRfaW5pdCwKIAkudGltZXIgPSAmbXg1M19ldmtfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IG14NTNfZXZrX2JvYXJkX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1M19sb2NvLmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYwppbmRleCBkMTM0OGUwLi4wYTE4ZjhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYwpAQCAtMzksMzMgKzM5LDE0NyBAQAogI2RlZmluZSBMT0NPX0ZFQ19QSFlfUlNUCQlJTVhfR1BJT19OUig3LCA2KQogCiBzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgbXg1M19sb2NvX3BhZHNbXSA9IHsKLQlNWDUzX1BBRF9DU0kwX0QxMF9fVUFSVDFfVFhELAotCU1YNTNfUEFEX0NTSTBfRDExX19VQVJUMV9SWEQsCi0JTVg1M19QQURfQVRBX0RJT1dfX1VBUlQxX1RYRCwKLQlNWDUzX1BBRF9BVEFfRE1BQ0tfX1VBUlQxX1JYRCwKLQotCU1YNTNfUEFEX0FUQV9CVUZGRVJfRU5fX1VBUlQyX1JYRCwKLQlNWDUzX1BBRF9BVEFfRE1BUlFfX1VBUlQyX1RYRCwKLQlNWDUzX1BBRF9BVEFfRElPUl9fVUFSVDJfUlRTLAotCU1YNTNfUEFEX0FUQV9JTlRSUV9fVUFSVDJfQ1RTLAotCi0JTVg1M19QQURfQVRBX0NTXzBfX1VBUlQzX1RYRCwKLQlNWDUzX1BBRF9BVEFfQ1NfMV9fVUFSVDNfUlhELAotCU1YNTNfUEFEX0FUQV9EQV8xX19VQVJUM19DVFMsCi0JTVg1M19QQURfQVRBX0RBXzJfX1VBUlQzX1JUUywKKwkvKiBGRUMgKi8KKwlNWDUzX1BBRF9GRUNfTURDX19GRUNfTURDLAorCU1YNTNfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKKwlNWDUzX1BBRF9GRUNfUkVGX0NMS19fRkVDX1RYX0NMSywKKwlNWDUzX1BBRF9GRUNfUlhfRVJfX0ZFQ19SWF9FUiwKKwlNWDUzX1BBRF9GRUNfQ1JTX0RWX19GRUNfUlhfRFYsCisJTVg1M19QQURfRkVDX1JYRDFfX0ZFQ19SREFUQV8xLAorCU1YNTNfUEFEX0ZFQ19SWEQwX19GRUNfUkRBVEFfMCwKKwlNWDUzX1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTiwKKwlNWDUzX1BBRF9GRUNfVFhEMV9fRkVDX1REQVRBXzEsCisJTVg1M19QQURfRkVDX1RYRDBfX0ZFQ19UREFUQV8wLAorCS8qIEZFQ19uUlNUICovCisJTVg1M19QQURfUEFUQV9EQV8wX19HUElPN182LAorCS8qIEZFQ19uSU5UICovCisJTVg1M19QQURfUEFUQV9EQVRBNF9fR1BJTzJfNCwKKwkvKiBBVURNVVg1ICovCisJTVg1M19QQURfS0VZX0NPTDBfX0FVRE1VWF9BVUQ1X1RYQywKKwlNWDUzX1BBRF9LRVlfUk9XMF9fQVVETVVYX0FVRDVfVFhELAorCU1YNTNfUEFEX0tFWV9DT0wxX19BVURNVVhfQVVENV9UWEZTLAorCU1YNTNfUEFEX0tFWV9ST1cxX19BVURNVVhfQVVENV9SWEQsCisJLyogSTJDMiAqLworCU1YNTNfUEFEX0tFWV9DT0wzX19JMkMyX1NDTCwKKwlNWDUzX1BBRF9LRVlfUk9XM19fSTJDMl9TREEsCisJLyogU0QxICovCisJTVg1M19QQURfU0QxX0NNRF9fRVNESEMxX0NNRCwKKwlNWDUzX1BBRF9TRDFfQ0xLX19FU0RIQzFfQ0xLLAorCU1YNTNfUEFEX1NEMV9EQVRBMF9fRVNESEMxX0RBVDAsCisJTVg1M19QQURfU0QxX0RBVEExX19FU0RIQzFfREFUMSwKKwlNWDUzX1BBRF9TRDFfREFUQTJfX0VTREhDMV9EQVQyLAorCU1YNTNfUEFEX1NEMV9EQVRBM19fRVNESEMxX0RBVDMsCisJLyogU0QzICovCisJTVg1M19QQURfUEFUQV9EQVRBOF9fRVNESEMzX0RBVDAsCisJTVg1M19QQURfUEFUQV9EQVRBOV9fRVNESEMzX0RBVDEsCisJTVg1M19QQURfUEFUQV9EQVRBMTBfX0VTREhDM19EQVQyLAorCU1YNTNfUEFEX1BBVEFfREFUQTExX19FU0RIQzNfREFUMywKKwlNWDUzX1BBRF9QQVRBX0RBVEEwX19FU0RIQzNfREFUNCwKKwlNWDUzX1BBRF9QQVRBX0RBVEExX19FU0RIQzNfREFUNSwKKwlNWDUzX1BBRF9QQVRBX0RBVEEyX19FU0RIQzNfREFUNiwKKwlNWDUzX1BBRF9QQVRBX0RBVEEzX19FU0RIQzNfREFUNywKKwlNWDUzX1BBRF9QQVRBX0lPUkRZX19FU0RIQzNfQ0xLLAorCU1YNTNfUEFEX1BBVEFfUkVTRVRfQl9fRVNESEMzX0NNRCwKKwkvKiBTRDNfQ0QgKi8KKwlNWDUzX1BBRF9FSU1fREExMV9fR1BJTzNfMTEsCisJLyogU0QzX1dQICovCisJTVg1M19QQURfRUlNX0RBMTJfX0dQSU8zXzEyLAorCS8qIFZHQSAqLworCU1YNTNfUEFEX0VJTV9PRV9fSVBVX0RJMV9QSU43LAorCU1YNTNfUEFEX0VJTV9SV19fSVBVX0RJMV9QSU44LAorCS8qIERJU1BMQiAqLworCU1YNTNfUEFEX0VJTV9EMjBfX0lQVV9TRVJfRElTUDBfQ1MsCisJTVg1M19QQURfRUlNX0QyMV9fSVBVX0RJU1BCMF9TRVJfQ0xLLAorCU1YNTNfUEFEX0VJTV9EMjJfX0lQVV9ESVNQQjBfU0VSX0RJTiwKKwlNWDUzX1BBRF9FSU1fRDIzX19JUFVfREkwX0QwX0NTLAorCS8qIERJU1AwX1BPV0VSX0VOICovCisJTVg1M19QQURfRUlNX0QyNF9fR1BJTzNfMjQsCisJLyogRElTUDAgREVUIElOVCAqLworCU1YNTNfUEFEX0VJTV9EMzFfX0dQSU8zXzMxLAorCS8qIExWRFMgKi8KKwlNWDUzX1BBRF9MVkRTMF9UWDNfUF9fTERCX0xWRFMwX1RYMywKKwlNWDUzX1BBRF9MVkRTMF9DTEtfUF9fTERCX0xWRFMwX0NMSywKKwlNWDUzX1BBRF9MVkRTMF9UWDJfUF9fTERCX0xWRFMwX1RYMiwKKwlNWDUzX1BBRF9MVkRTMF9UWDFfUF9fTERCX0xWRFMwX1RYMSwKKwlNWDUzX1BBRF9MVkRTMF9UWDBfUF9fTERCX0xWRFMwX1RYMCwKKwlNWDUzX1BBRF9MVkRTMV9UWDNfUF9fTERCX0xWRFMxX1RYMywKKwlNWDUzX1BBRF9MVkRTMV9UWDJfUF9fTERCX0xWRFMxX1RYMiwKKwlNWDUzX1BBRF9MVkRTMV9DTEtfUF9fTERCX0xWRFMxX0NMSywKKwlNWDUzX1BBRF9MVkRTMV9UWDFfUF9fTERCX0xWRFMxX1RYMSwKKwlNWDUzX1BBRF9MVkRTMV9UWDBfUF9fTERCX0xWRFMxX1RYMCwKKwkvKiBJMkMxICovCisJTVg1M19QQURfQ1NJMF9EQVQ4X19JMkMxX1NEQSwKKwlNWDUzX1BBRF9DU0kwX0RBVDlfX0kyQzFfU0NMLAorCS8qIFVBUlQxICovCisJTVg1M19QQURfQ1NJMF9EQVQxMF9fVUFSVDFfVFhEX01VWCwKKwlNWDUzX1BBRF9DU0kwX0RBVDExX19VQVJUMV9SWERfTVVYLAorCS8qIENTSTAgKi8KKwlNWDUzX1BBRF9DU0kwX0RBVDEyX19JUFVfQ1NJMF9EXzEyLAorCU1YNTNfUEFEX0NTSTBfREFUMTNfX0lQVV9DU0kwX0RfMTMsCisJTVg1M19QQURfQ1NJMF9EQVQxNF9fSVBVX0NTSTBfRF8xNCwKKwlNWDUzX1BBRF9DU0kwX0RBVDE1X19JUFVfQ1NJMF9EXzE1LAorCU1YNTNfUEFEX0NTSTBfREFUMTZfX0lQVV9DU0kwX0RfMTYsCisJTVg1M19QQURfQ1NJMF9EQVQxN19fSVBVX0NTSTBfRF8xNywKKwlNWDUzX1BBRF9DU0kwX0RBVDE4X19JUFVfQ1NJMF9EXzE4LAorCU1YNTNfUEFEX0NTSTBfREFUMTlfX0lQVV9DU0kwX0RfMTksCisJTVg1M19QQURfQ1NJMF9WU1lOQ19fSVBVX0NTSTBfVlNZTkMsCisJTVg1M19QQURfQ1NJMF9NQ0xLX19JUFVfQ1NJMF9IU1lOQywKKwlNWDUzX1BBRF9DU0kwX1BJWENMS19fSVBVX0NTSTBfUElYQ0xLLAorCS8qIERJU1BMQVkgKi8KKwlNWDUzX1BBRF9ESTBfRElTUF9DTEtfX0lQVV9ESTBfRElTUF9DTEssCisJTVg1M19QQURfREkwX1BJTjE1X19JUFVfREkwX1BJTjE1LAorCU1YNTNfUEFEX0RJMF9QSU4yX19JUFVfREkwX1BJTjIsCisJTVg1M19QQURfREkwX1BJTjNfX0lQVV9ESTBfUElOMywKKwlNWDUzX1BBRF9ESVNQMF9EQVQwX19JUFVfRElTUDBfREFUXzAsCisJTVg1M19QQURfRElTUDBfREFUMV9fSVBVX0RJU1AwX0RBVF8xLAorCU1YNTNfUEFEX0RJU1AwX0RBVDJfX0lQVV9ESVNQMF9EQVRfMiwKKwlNWDUzX1BBRF9ESVNQMF9EQVQzX19JUFVfRElTUDBfREFUXzMsCisJTVg1M19QQURfRElTUDBfREFUNF9fSVBVX0RJU1AwX0RBVF80LAorCU1YNTNfUEFEX0RJU1AwX0RBVDVfX0lQVV9ESVNQMF9EQVRfNSwKKwlNWDUzX1BBRF9ESVNQMF9EQVQ2X19JUFVfRElTUDBfREFUXzYsCisJTVg1M19QQURfRElTUDBfREFUN19fSVBVX0RJU1AwX0RBVF83LAorCU1YNTNfUEFEX0RJU1AwX0RBVDhfX0lQVV9ESVNQMF9EQVRfOCwKKwlNWDUzX1BBRF9ESVNQMF9EQVQ5X19JUFVfRElTUDBfREFUXzksCisJTVg1M19QQURfRElTUDBfREFUMTBfX0lQVV9ESVNQMF9EQVRfMTAsCisJTVg1M19QQURfRElTUDBfREFUMTFfX0lQVV9ESVNQMF9EQVRfMTEsCisJTVg1M19QQURfRElTUDBfREFUMTJfX0lQVV9ESVNQMF9EQVRfMTIsCisJTVg1M19QQURfRElTUDBfREFUMTNfX0lQVV9ESVNQMF9EQVRfMTMsCisJTVg1M19QQURfRElTUDBfREFUMTRfX0lQVV9ESVNQMF9EQVRfMTQsCisJTVg1M19QQURfRElTUDBfREFUMTVfX0lQVV9ESVNQMF9EQVRfMTUsCisJTVg1M19QQURfRElTUDBfREFUMTZfX0lQVV9ESVNQMF9EQVRfMTYsCisJTVg1M19QQURfRElTUDBfREFUMTdfX0lQVV9ESVNQMF9EQVRfMTcsCisJTVg1M19QQURfRElTUDBfREFUMThfX0lQVV9ESVNQMF9EQVRfMTgsCisJTVg1M19QQURfRElTUDBfREFUMTlfX0lQVV9ESVNQMF9EQVRfMTksCisJTVg1M19QQURfRElTUDBfREFUMjBfX0lQVV9ESVNQMF9EQVRfMjAsCisJTVg1M19QQURfRElTUDBfREFUMjFfX0lQVV9ESVNQMF9EQVRfMjEsCisJTVg1M19QQURfRElTUDBfREFUMjJfX0lQVV9ESVNQMF9EQVRfMjIsCisJTVg1M19QQURfRElTUDBfREFUMjNfX0lQVV9ESVNQMF9EQVRfMjMsCisJLyogQXVkaW8gQ0xLKi8KKwlNWDUzX1BBRF9HUElPXzBfX0NDTV9TU0lfRVhUMV9DTEssCisJLyogUFdNICovCisJTVg1M19QQURfR1BJT18xX19QV00yX1BXTU8sCisJLyogU1BESUYgKi8KKwlNWDUzX1BBRF9HUElPXzdfX1NQRElGX1BMT0NLLAorCU1YNTNfUEFEX0dQSU9fMTdfX1NQRElGX09VVDEsCisJLyogR1BJTyAqLworCU1YNTNfUEFEX1BBVEFfREFfMV9fR1BJTzdfNywKKwlNWDUzX1BBRF9QQVRBX0RBXzJfX0dQSU83XzgsCisJTVg1M19QQURfUEFUQV9EQVRBNV9fR1BJTzJfNSwKKwlNWDUzX1BBRF9QQVRBX0RBVEE2X19HUElPMl82LAorCU1YNTNfUEFEX1BBVEFfREFUQTE0X19HUElPMl8xNCwKKwlNWDUzX1BBRF9QQVRBX0RBVEExNV9fR1BJTzJfMTUsCisJTVg1M19QQURfUEFUQV9JTlRSUV9fR1BJTzdfMiwKKwlNWDUzX1BBRF9FSU1fV0FJVF9fR1BJTzVfMCwKKwlNWDUzX1BBRF9OQU5ERl9XUF9CX19HUElPNl85LAorCU1YNTNfUEFEX05BTkRGX1JCMF9fR1BJTzZfMTAsCisJTVg1M19QQURfTkFOREZfQ1MxX19HUElPNl8xNCwKKwlNWDUzX1BBRF9OQU5ERl9DUzJfX0dQSU82XzE1LAorCU1YNTNfUEFEX05BTkRGX0NTM19fR1BJTzZfMTYsCisJTVg1M19QQURfR1BJT181X19HUElPMV81LAorCU1YNTNfUEFEX0dQSU9fMTZfX0dQSU83XzExLAorCU1YNTNfUEFEX0dQSU9fOF9fR1BJTzFfOCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIG14NTNfbG9jb191YXJ0X2RhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBteDUzX2xvY29faW5pdF91YXJ0KHZvaWQpCi17Ci0JaW14NTNfYWRkX2lteF91YXJ0KDAsICZteDUzX2xvY29fdWFydF9kYXRhKTsKLQlpbXg1M19hZGRfaW14X3VhcnQoMSwgJm14NTNfbG9jb191YXJ0X2RhdGEpOwotCWlteDUzX2FkZF9pbXhfdWFydCgyLCAmbXg1M19sb2NvX3VhcnRfZGF0YSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBteDUzX2xvY29fZmVjX3Jlc2V0KHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTg1LDEzICsxOTksMjIgQEAKIAkucGh5ID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG14NTNfbG9jb19pMmNfZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBteDUzX2xvY29fYm9hcmRfaW5pdCh2b2lkKQogewogCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKG14NTNfbG9jb19wYWRzLAogCQkJCQlBUlJBWV9TSVpFKG14NTNfbG9jb19wYWRzKSk7Ci0JbXg1M19sb2NvX2luaXRfdWFydCgpOworCWlteDUzX2FkZF9pbXhfdWFydCgwLCBOVUxMKTsKIAlteDUzX2xvY29fZmVjX3Jlc2V0KCk7CiAJaW14NTNfYWRkX2ZlYygmbXg1M19sb2NvX2ZlY19kYXRhKTsKKwlpbXg1M19hZGRfaW14Ml93ZHQoMCwgTlVMTCk7CisJaW14NTNfYWRkX2lteF9pMmMoMCwgJm14NTNfbG9jb19pMmNfZGF0YSk7CisJaW14NTNfYWRkX2lteF9pMmMoMSwgJm14NTNfbG9jb19pMmNfZGF0YSk7CisJaW14NTNfYWRkX3NkaGNpX2VzZGhjX2lteCgwLCBOVUxMKTsKKwlpbXg1M19hZGRfc2RoY2lfZXNkaGNfaW14KDIsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXg1M19sb2NvX3RpbWVyX2luaXQodm9pZCkKQEAgLTEwNSw3ICsyMjgsOCBAQAogCiBNQUNISU5FX1NUQVJUKE1YNTNfTE9DTywgIkZyZWVzY2FsZSBNWDUzIExPQ08gQm9hcmQiKQogCS5tYXBfaW8gPSBteDUzX21hcF9pbywKKwkuaW5pdF9lYXJseSA9IGlteDUzX2luaXRfZWFybHksCiAJLmluaXRfaXJxID0gbXg1M19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lID0gbXg1M19sb2NvX2JvYXJkX2luaXQsCiAJLnRpbWVyID0gJm14NTNfbG9jb190aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXg1M19sb2NvX2JvYXJkX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1M19zbWQuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfc21kLmMKaW5kZXggNzk3MGY3YS4uMzFlMTczMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1M19zbWQuYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX3NtZC5jCkBAIC0zOSwyMCArMzksMTkgQEAKICNkZWZpbmUgU01EX0ZFQ19QSFlfUlNUCQlJTVhfR1BJT19OUig3LCA2KQogCiBzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgbXg1M19zbWRfcGFkc1tdID0gewotCU1YNTNfUEFEX0NTSTBfRDEwX19VQVJUMV9UWEQsCi0JTVg1M19QQURfQ1NJMF9EMTFfX1VBUlQxX1JYRCwKLQlNWDUzX1BBRF9BVEFfRElPV19fVUFSVDFfVFhELAotCU1YNTNfUEFEX0FUQV9ETUFDS19fVUFSVDFfUlhELAorCU1YNTNfUEFEX0NTSTBfREFUMTBfX1VBUlQxX1RYRF9NVVgsCisJTVg1M19QQURfQ1NJMF9EQVQxMV9fVUFSVDFfUlhEX01VWCwKIAotCU1YNTNfUEFEX0FUQV9CVUZGRVJfRU5fX1VBUlQyX1JYRCwKLQlNWDUzX1BBRF9BVEFfRE1BUlFfX1VBUlQyX1RYRCwKLQlNWDUzX1BBRF9BVEFfRElPUl9fVUFSVDJfUlRTLAotCU1YNTNfUEFEX0FUQV9JTlRSUV9fVUFSVDJfQ1RTLAorCU1YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19VQVJUMl9SWERfTVVYLAorCU1YNTNfUEFEX1BBVEFfRE1BUlFfX1VBUlQyX1RYRF9NVVgsCiAKLQlNWDUzX1BBRF9BVEFfQ1NfMF9fVUFSVDNfVFhELAotCU1YNTNfUEFEX0FUQV9DU18xX19VQVJUM19SWEQsCi0JTVg1M19QQURfQVRBX0RBXzFfX1VBUlQzX0NUUywKLQlNWDUzX1BBRF9BVEFfREFfMl9fVUFSVDNfUlRTLAorCU1YNTNfUEFEX1BBVEFfQ1NfMF9fVUFSVDNfVFhEX01VWCwKKwlNWDUzX1BBRF9QQVRBX0NTXzFfX1VBUlQzX1JYRF9NVVgsCisJTVg1M19QQURfUEFUQV9EQV8xX19VQVJUM19DVFMsCisJTVg1M19QQURfUEFUQV9EQV8yX19VQVJUM19SVFMsCisJLyogSTJDMSAqLworCU1YNTNfUEFEX0NTSTBfREFUOF9fSTJDMV9TREEsCisJTVg1M19QQURfQ1NJMF9EQVQ5X19JMkMxX1NDTCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIG14NTNfc21kX3VhcnRfZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTYxLDggKzYwLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG14NTNfc21kX2luaXRfdWFydCh2b2lkKQogewotCWlteDUzX2FkZF9pbXhfdWFydCgwLCAmbXg1M19zbWRfdWFydF9kYXRhKTsKLQlpbXg1M19hZGRfaW14X3VhcnQoMSwgJm14NTNfc21kX3VhcnRfZGF0YSk7CisJaW14NTNfYWRkX2lteF91YXJ0KDAsIE5VTEwpOworCWlteDUzX2FkZF9pbXhfdWFydCgxLCBOVUxMKTsKIAlpbXg1M19hZGRfaW14X3VhcnQoMiwgJm14NTNfc21kX3VhcnRfZGF0YSk7CiB9CiAKQEAgLTg1LDYgKzg0LDEwIEBACiAJLnBoeSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteDUzX3NtZF9pMmNfZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBteDUzX3NtZF9ib2FyZF9pbml0KHZvaWQpCiB7CiAJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMobXg1M19zbWRfcGFkcywKQEAgLTkyLDYgKzk1LDggQEAKIAlteDUzX3NtZF9pbml0X3VhcnQoKTsKIAlteDUzX3NtZF9mZWNfcmVzZXQoKTsKIAlpbXg1M19hZGRfZmVjKCZteDUzX3NtZF9mZWNfZGF0YSk7CisJaW14NTNfYWRkX2lteDJfd2R0KDAsIE5VTEwpOworCWlteDUzX2FkZF9pbXhfaTJjKDAsICZteDUzX3NtZF9pMmNfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDUzX3NtZF90aW1lcl9pbml0KHZvaWQpCkBAIC0xMDUsNyArMTEwLDggQEAKIAogTUFDSElORV9TVEFSVChNWDUzX1NNRCwgIkZyZWVzY2FsZSBNWDUzIFNNRCBCb2FyZCIpCiAJLm1hcF9pbyA9IG14NTNfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gaW14NTNfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEgPSBteDUzX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgPSBteDUzX3NtZF9ib2FyZF9pbml0LAogCS50aW1lciA9ICZteDUzX3NtZF90aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gbXg1M19zbWRfYm9hcmRfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9jbG9jay1teDUxLW14NTMuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEtbXg1My5jCmluZGV4IDBhMTllNzUuLjY1MmFjZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEtbXg1My5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEtbXg1My5jCkBAIC00Miw2ICs0Miw5IEBACiBzdGF0aWMgc3RydWN0IGNsayBlbWlfZmFzdF9jbGs7CiBzdGF0aWMgc3RydWN0IGNsayBpcHVfY2xrOwogc3RhdGljIHN0cnVjdCBjbGsgbWlwaV9oc2MxX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVzZGhjMV9jbGs7CitzdGF0aWMgc3RydWN0IGNsayBlc2RoYzJfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgZXNkaGMzX214NTNfY2xrOwogCiAjZGVmaW5lIE1BWF9EUExMX1dBSVRfVFJJRVMJMTAwMCAvKiAxMDAwICogdWRlbGF5KDEpID0gMW1zICovCiAKQEAgLTg2NywxMCArODcwLDYgQEAKIAkucGFyZW50ID0gJmNraWxfY2xrLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsga3BwX2NsayA9IHsKLQkuaWQgPSAwLAotfTsKLQogc3RhdGljIHN0cnVjdCBjbGsgZHVtbXlfY2xrID0gewogCS5pZCA9IDAsCiB9OwpAQCAtMTE0NywxMCArMTE0Niw4MCBAQAogQ0xLX1NFVF9QQVJFTlQoZXNkaGMxLCAxLCBFU0RIQzFfTVNIQzEpCiBDTEtfU0VUX1JBVEUoZXNkaGMxLCAxLCBFU0RIQzFfTVNIQzEpCiAKKy8qIG14NTEgc3BlY2lmaWMgKi8KIENMS19HRVRfUkFURShlc2RoYzIsIDEsIEVTREhDMl9NU0hDMikKIENMS19TRVRfUEFSRU5UKGVzZGhjMiwgMSwgRVNESEMyX01TSEMyKQogQ0xLX1NFVF9SQVRFKGVzZGhjMiwgMSwgRVNESEMyX01TSEMyKQogCitzdGF0aWMgaW50IGNsa19lc2RoYzNfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DU0NNUjEpOworCWlmIChwYXJlbnQgPT0gJmVzZGhjMV9jbGspCisJCXJlZyAmPSB+TVhDX0NDTV9DU0NNUjFfRVNESEMzX0NMS19TRUw7CisJZWxzZSBpZiAocGFyZW50ID09ICZlc2RoYzJfY2xrKQorCQlyZWcgfD0gTVhDX0NDTV9DU0NNUjFfRVNESEMzX0NMS19TRUw7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NTQ01SMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGtfZXNkaGM0X3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ1NDTVIxKTsKKwlpZiAocGFyZW50ID09ICZlc2RoYzFfY2xrKQorCQlyZWcgJj0gfk1YQ19DQ01fQ1NDTVIxX0VTREhDNF9DTEtfU0VMOworCWVsc2UgaWYgKHBhcmVudCA9PSAmZXNkaGMyX2NsaykKKwkJcmVnIHw9IE1YQ19DQ01fQ1NDTVIxX0VTREhDNF9DTEtfU0VMOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DU0NNUjEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG14NTMgc3BlY2lmaWMgKi8KK3N0YXRpYyBpbnQgY2xrX2VzZGhjMl9teDUzX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ1NDTVIxKTsKKwlpZiAocGFyZW50ID09ICZlc2RoYzFfY2xrKQorCQlyZWcgJj0gfk1YQ19DQ01fQ1NDTVIxX0VTREhDMl9NU0hDMl9NWDUzX0NMS19TRUw7CisJZWxzZSBpZiAocGFyZW50ID09ICZlc2RoYzNfbXg1M19jbGspCisJCXJlZyB8PSBNWENfQ0NNX0NTQ01SMV9FU0RIQzJfTVNIQzJfTVg1M19DTEtfU0VMOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DU0NNUjEpOworCisJcmV0dXJuIDA7Cit9CisKK0NMS19HRVRfUkFURShlc2RoYzNfbXg1MywgMSwgRVNESEMzX01YNTMpCitDTEtfU0VUX1BBUkVOVChlc2RoYzNfbXg1MywgMSwgRVNESEMzX01YNTMpCitDTEtfU0VUX1JBVEUoZXNkaGMzX214NTMsIDEsIEVTREhDM19NWDUzKQorCitzdGF0aWMgaW50IGNsa19lc2RoYzRfbXg1M19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NTQ01SMSk7CisJaWYgKHBhcmVudCA9PSAmZXNkaGMxX2NsaykKKwkJcmVnICY9IH5NWENfQ0NNX0NTQ01SMV9FU0RIQzRfQ0xLX1NFTDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmVzZGhjM19teDUzX2NsaykKKwkJcmVnIHw9IE1YQ19DQ01fQ1NDTVIxX0VTREhDNF9DTEtfU0VMOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DU0NNUjEpOworCisJcmV0dXJuIDA7Cit9CisKICNkZWZpbmUgREVGSU5FX0NMT0NLX0ZVTEwobmFtZSwgaSwgZXIsIGVzLCBnciwgc3IsIGUsIGQsIHAsIHMpCQlcCiAJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJCVwKIAkJLmlkCQk9IGksCQkJCQlcCkBAIC0xMjU1LDkgKzEzMjQsNjIgQEAKIAljbGtfZXNkaGMxLCAmcGxsMl9zd19jbGssICZlc2RoYzFfaXBnX2Nsayk7CiBERUZJTkVfQ0xPQ0tfRlVMTChlc2RoYzJfaXBnX2NsaywgMSwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzJfT0ZGU0VULAogCU5VTEwsICBOVUxMLCBfY2xrX21heF9lbmFibGUsIF9jbGtfbWF4X2Rpc2FibGUsICZpcGdfY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DS19GVUxMKGVzZGhjM19pcGdfY2xrLCAyLCBNWENfQ0NNX0NDR1IzLCBNWENfQ0NNX0NDR1J4X0NHNF9PRkZTRVQsCisJTlVMTCwgIE5VTEwsIF9jbGtfbWF4X2VuYWJsZSwgX2Nsa19tYXhfZGlzYWJsZSwgJmlwZ19jbGssIE5VTEwpOworREVGSU5FX0NMT0NLX0ZVTEwoZXNkaGM0X2lwZ19jbGssIDMsIE1YQ19DQ01fQ0NHUjMsIE1YQ19DQ01fQ0NHUnhfQ0c2X09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgX2Nsa19tYXhfZW5hYmxlLCBfY2xrX21heF9kaXNhYmxlLCAmaXBnX2NsaywgTlVMTCk7CisKKy8qIG14NTEgc3BlY2lmaWMgKi8KIERFRklORV9DTE9DS19NQVgoZXNkaGMyX2NsaywgMSwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzNfT0ZGU0VULAogCWNsa19lc2RoYzIsICZwbGwyX3N3X2NsaywgJmVzZGhjMl9pcGdfY2xrKTsKIAorc3RhdGljIHN0cnVjdCBjbGsgZXNkaGMzX2NsayA9IHsKKwkuaWQgPSAyLAorCS5wYXJlbnQgPSAmZXNkaGMxX2NsaywKKwkuc2V0X3BhcmVudCA9IGNsa19lc2RoYzNfc2V0X3BhcmVudCwKKwkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0NHUjMsCisJLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0NHUnhfQ0c1X09GRlNFVCwKKwkuZW5hYmxlICA9IF9jbGtfbWF4X2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfbWF4X2Rpc2FibGUsCisJLnNlY29uZGFyeSA9ICZlc2RoYzNfaXBnX2NsaywKK307CitzdGF0aWMgc3RydWN0IGNsayBlc2RoYzRfY2xrID0geworCS5pZCA9IDMsCisJLnBhcmVudCA9ICZlc2RoYzFfY2xrLAorCS5zZXRfcGFyZW50ID0gY2xrX2VzZGhjNF9zZXRfcGFyZW50LAorCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DQ0dSMywKKwkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DQ0dSeF9DRzdfT0ZGU0VULAorCS5lbmFibGUgID0gX2Nsa19tYXhfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa19tYXhfZGlzYWJsZSwKKwkuc2Vjb25kYXJ5ID0gJmVzZGhjNF9pcGdfY2xrLAorfTsKKworLyogbXg1MyBzcGVjaWZpYyAqLworc3RhdGljIHN0cnVjdCBjbGsgZXNkaGMyX214NTNfY2xrID0geworCS5pZCA9IDIsCisJLnBhcmVudCA9ICZlc2RoYzFfY2xrLAorCS5zZXRfcGFyZW50ID0gY2xrX2VzZGhjMl9teDUzX3NldF9wYXJlbnQsCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1IzLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHM19PRkZTRVQsCisJLmVuYWJsZSAgPSBfY2xrX21heF9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrX21heF9kaXNhYmxlLAorCS5zZWNvbmRhcnkgPSAmZXNkaGMzX2lwZ19jbGssCit9OworCitERUZJTkVfQ0xPQ0tfTUFYKGVzZGhjM19teDUzX2NsaywgMiwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzVfT0ZGU0VULAorCWNsa19lc2RoYzNfbXg1MywgJnBsbDJfc3dfY2xrLCAmZXNkaGMyX2lwZ19jbGspOworCitzdGF0aWMgc3RydWN0IGNsayBlc2RoYzRfbXg1M19jbGsgPSB7CisJLmlkID0gMywKKwkucGFyZW50ID0gJmVzZGhjMV9jbGssCisJLnNldF9wYXJlbnQgPSBjbGtfZXNkaGM0X214NTNfc2V0X3BhcmVudCwKKwkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0NHUjMsCisJLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0NHUnhfQ0c3X09GRlNFVCwKKwkuZW5hYmxlICA9IF9jbGtfbWF4X2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfbWF4X2Rpc2FibGUsCisJLnNlY29uZGFyeSA9ICZlc2RoYzRfaXBnX2NsaywKK307CisKIERFRklORV9DTE9DSyhtaXBpX2VzY19jbGssIDAsIE1YQ19DQ01fQ0NHUjQsIE1YQ19DQ01fQ0NHUnhfQ0c1X09GRlNFVCwgTlVMTCwgTlVMTCwgTlVMTCwgJnBsbDJfc3dfY2xrKTsKIERFRklORV9DTE9DSyhtaXBpX2hzYzJfY2xrLCAwLCBNWENfQ0NNX0NDR1I0LCBNWENfQ0NNX0NDR1J4X0NHNF9PRkZTRVQsIE5VTEwsIE5VTEwsICZtaXBpX2VzY19jbGssICZwbGwyX3N3X2Nsayk7CiBERUZJTkVfQ0xPQ0sobWlwaV9oc2MxX2NsaywgMCwgTVhDX0NDTV9DQ0dSNCwgTVhDX0NDTV9DQ0dSeF9DRzNfT0ZGU0VULCBOVUxMLCBOVUxMLCAmbWlwaV9oc2MyX2NsaywgJnBsbDJfc3dfY2xrKTsKQEAgLTEzMDIsNyArMTQyNCw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYl9haGIiLCB1c2JfYWhiX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JvaDNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYl9haGIiLCBhaGJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LWtleXBhZCIsIE5VTEwsIGtwcF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgta2V5cGFkIiwgTlVMTCwgZHVtbXlfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjX25hbmQiLCBOVUxMLCBuZmNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LXNzaS4wIiwgTlVMTCwgc3NpMV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtc3NpLjEiLCBOVUxMLCBzc2kyX2NsaykKQEAgLTEzMTYsNiArMTQzOCw4IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJpbXg1MS1jc3BpLjAiLCBOVUxMLCBjc3BpX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4wIiwgTlVMTCwgZXNkaGMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4xIiwgTlVMTCwgZXNkaGMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4yIiwgTlVMTCwgZXNkaGMzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4zIiwgTlVMTCwgZXNkaGM0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNwdV9jbGsiLCBjcHVfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaWltX2NsayIsIGlpbV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgyLXdkdC4wIiwgTlVMTCwgZHVtbXlfY2xrKQpAQCAtMTMzNiwxMCArMTQ2MCwxNCBAQAogCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjMV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjEiLCBOVUxMLCBpMmMyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4wIiwgTlVMTCwgZXNkaGMxX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4xIiwgTlVMTCwgZXNkaGMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4xIiwgTlVMTCwgZXNkaGMyX214NTNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic2RoY2ktZXNkaGMtaW14LjIiLCBOVUxMLCBlc2RoYzNfbXg1M19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzZGhjaS1lc2RoYy1pbXguMyIsIE5VTEwsIGVzZGhjNF9teDUzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDUzLWVjc3BpLjAiLCBOVUxMLCBlY3NwaTFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14NTMtZWNzcGkuMSIsIE5VTEwsIGVjc3BpMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXg1My1jc3BpLjAiLCBOVUxMLCBjc3BpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteDItd2R0LjAiLCBOVUxMLCBkdW1teV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgyLXdkdC4xIiwgTlVMTCwgZHVtbXlfY2xrKQogfTsKIAogc3RhdGljIHZvaWQgY2xrX3RyZWVfaW5pdCh2b2lkKQpAQCAtMTQyNyw2ICsxNTU1LDE0IEBACiAJbXg1M19yZXZpc2lvbigpOwogCWNsa19kaXNhYmxlKCZpaW1fY2xrKTsKIAorCS8qIFNldCBTREhDIHBhcmVudHMgdG8gYmUgUExMMiAqLworCWNsa19zZXRfcGFyZW50KCZlc2RoYzFfY2xrLCAmcGxsMl9zd19jbGspOworCWNsa19zZXRfcGFyZW50KCZlc2RoYzNfbXg1M19jbGssICZwbGwyX3N3X2Nsayk7CisKKwkvKiBzZXQgU0RIQyByb290IGNsb2NrIGFzIDIwME1IWiovCisJY2xrX3NldF9yYXRlKCZlc2RoYzFfY2xrLCAyMDAwMDAwMDApOworCWNsa19zZXRfcmF0ZSgmZXNkaGMzX214NTNfY2xrLCAyMDAwMDAwMDApOworCiAJLyogU3lzdGVtIHRpbWVyICovCiAJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YNTNfSU9fQUREUkVTUyhNWDUzX0dQVDFfQkFTRV9BRERSKSwKIAkJTVg1M19JTlRfR1BUKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvY3B1LmMKaW5kZXggZDQwNjcxZC4uZGY0NmI1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvY3B1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvY3B1LmMKQEAgLTc4LDExICs3OCwxNiBAQAogCXZvaWQgX19pb21lbSAqaWltX2Jhc2UgPSBNWDUxX0lPX0FERFJFU1MoTVg1M19JSU1fQkFTRV9BRERSKTsKIAl1MzIgcmV2ID0gcmVhZGwoaWltX2Jhc2UgKyBJSU1fU1JFVikgJiAweGZmOwogCi0JaWYgKHJldiA9PSAweDApCisJc3dpdGNoIChyZXYpIHsKKwljYXNlIDB4MDoKIAkJcmV0dXJuIElNWF9DSElQX1JFVklTSU9OXzFfMDsKLQllbHNlIGlmIChyZXYgPT0gMHgxMCkKKwljYXNlIDB4MjoKIAkJcmV0dXJuIElNWF9DSElQX1JFVklTSU9OXzJfMDsKLQlyZXR1cm4gMDsKKwljYXNlIDB4MzoKKwkJcmV0dXJuIElNWF9DSElQX1JFVklTSU9OXzJfMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gSU1YX0NISVBfUkVWSVNJT05fVU5LTk9XTjsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9jcm1fcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1teDUvY3JtX3JlZ3MuaAppbmRleCBiNDYyYzIyLi44N2MwYzU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9jcm1fcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2NybV9yZWdzLmgKQEAgLTIxNyw5ICsyMTcsMTIgQEAKICNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfRVNESEMxX01TSEMxX0NMS19TRUxfT0ZGU0VUCSgyMCkKICNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfRVNESEMxX01TSEMxX0NMS19TRUxfTUFTSwkoMHgzIDw8IDIwKQogI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9FU0RIQzNfQ0xLX1NFTAkJCSgweDEgPDwgMTkpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX0VTREhDMl9NU0hDMl9NWDUzX0NMS19TRUwJKDB4MSA8PCAxOSkKICNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfRVNESEM0X0NMS19TRUwJCQkoMHgxIDw8IDE4KQogI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9FU0RIQzJfTVNIQzJfQ0xLX1NFTF9PRkZTRVQJKDE2KQogI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9FU0RIQzJfTVNIQzJfQ0xLX1NFTF9NQVNLCSgweDMgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX0VTREhDM19NWDUzX0NMS19TRUxfT0ZGU0VUCSgxNikKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfRVNESEMzX01YNTNfQ0xLX1NFTF9NQVNLCQkoMHgzIDw8IDE2KQogI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9TU0kxX0NMS19TRUxfT0ZGU0VUCQkoMTQpCiAjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1NTSTFfQ0xLX1NFTF9NQVNLCQkoMHgzIDw8IDE0KQogI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9TU0kyX0NMS19TRUxfT0ZGU0VUCQkoMTIpCkBAIC0yNzEsNiArMjc0LDEwIEBACiAjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX0VTREhDMl9NU0hDMl9DTEtfUFJFRF9NQVNLCSgweDcgPDwgMjIpCiAjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX0VTREhDMl9NU0hDMl9DTEtfUE9ERl9PRkZTRVQJKDE5KQogI2RlZmluZSBNWENfQ0NNX0NTQ0RSMV9FU0RIQzJfTVNIQzJfQ0xLX1BPREZfTUFTSwkoMHg3IDw8IDE5KQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMV9FU0RIQzNfTVg1M19DTEtfUFJFRF9PRkZTRVQJKDIyKQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMV9FU0RIQzNfTVg1M19DTEtfUFJFRF9NQVNLCSgweDcgPDwgMjIpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX0VTREhDM19NWDUzX0NMS19QT0RGX09GRlNFVAkoMTkpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX0VTREhDM19NWDUzX0NMS19QT0RGX01BU0sJKDB4NyA8PCAxOSkKICNkZWZpbmUgTVhDX0NDTV9DU0NEUjFfRVNESEMxX01TSEMxX0NMS19QUkVEX09GRlNFVAkoMTYpCiAjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX0VTREhDMV9NU0hDMV9DTEtfUFJFRF9NQVNLCSgweDcgPDwgMTYpCiAjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX1BHQ19DTEtfUE9ERl9PRkZTRVQJCSgxNCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtbXg1MC5oIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy1pbXg1MC5oCnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtbXg1MC5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLWlteDUwLmgKaW5kZXggOThhYjA3NC4uYzllNDI4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy1teDUwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy1pbXg1MC5oCkBAIC0yNCwzICsyNCwxMSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X3VhcnRfMWlycV9kYXRhIGlteDUwX2lteF91YXJ0X2RhdGFbXSBfX2luaXRjb25zdDsKICNkZWZpbmUgaW14NTBfYWRkX2lteF91YXJ0KGlkLCBwZGF0YSkJXAogCWlteF9hZGRfaW14X3VhcnRfMWlycSgmaW14NTBfaW14X3VhcnRfZGF0YVtpZF0sIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9mZWNfZGF0YSBpbXg1MF9mZWNfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14NTBfYWRkX2ZlYyhwZGF0YSkJXAorCWlteF9hZGRfZmVjKCZpbXg1MF9mZWNfZGF0YSwgcGRhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9pMmNfZGF0YSBpbXg1MF9pbXhfaTJjX2RhdGFbXSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14NTBfYWRkX2lteF9pMmMoaWQsIHBkYXRhKQlcCisJaW14X2FkZF9pbXhfaTJjKCZpbXg1MF9pbXhfaTJjX2RhdGFbaWRdLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtaW14NTMuaCBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtaW14NTMuaAppbmRleCA4NjM5NzM1Li45MjUxMDA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLWlteDUzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy1pbXg1My5oCkBAIC0yOSwzICsyOSw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9zcGlfaW14X2RhdGEgaW14NTNfZWNzcGlfZGF0YVtdIF9faW5pdGNvbnN0OwogI2RlZmluZSBpbXg1M19hZGRfZWNzcGkoaWQsIHBkYXRhKQlcCiAJaW14X2FkZF9zcGlfaW14KCZpbXg1M19lY3NwaV9kYXRhW2lkXSwgcGRhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteDJfd2R0X2RhdGEgaW14NTNfaW14Ml93ZHRfZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXg1M19hZGRfaW14Ml93ZHQoaWQsIHBkYXRhKQlcCisJaW14X2FkZF9pbXgyX3dkdCgmaW14NTNfaW14Ml93ZHRfZGF0YVtpZF0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9lZmlrYS5oIGIvYXJjaC9hcm0vbWFjaC1teDUvZWZpa2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTRhYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvZWZpa2EuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9FRklLQV9ICisjZGVmaW5lIF9FRklLQV9ICisKKyNkZWZpbmUgRUZJS0FfV0xBTl9FTgkJSU1YX0dQSU9fTlIoMiwgMTYpCisjZGVmaW5lIEVGSUtBX1dMQU5fUkVTRVQJSU1YX0dQSU9fTlIoMiwgMTApCisjZGVmaW5lIEVGSUtBX1VTQl9QSFlfUkVTRVQJSU1YX0dQSU9fTlIoMiwgOSkKKwordm9pZCBfX2luaXQgZWZpa2FfYm9hcmRfY29tbW9uX2luaXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvZWhjaS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvZWhjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZTEyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9laGNpLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisKKyNkZWZpbmUgTVhDX09UR19PRkZTRVQJCQkwCisjZGVmaW5lIE1YQ19IMV9PRkZTRVQJCQkweDIwMAorI2RlZmluZSBNWENfSDJfT0ZGU0VUCQkJMHg0MDAKKworLyogVVNCX0NUUkwgKi8KKyNkZWZpbmUgTVhDX09UR19VQ1RSTF9PV0lFX0JJVAkJKDEgPDwgMjcpCS8qIE9URyB3YWtldXAgaW50ciBlbmFibGUgKi8KKyNkZWZpbmUgTVhDX09UR19VQ1RSTF9PUE1fQklUCQkoMSA8PCAyNCkJLyogT1RHIHBvd2VyIG1hc2sgKi8KKyNkZWZpbmUgTVhDX0gxX1VDVFJMX0gxVUlFX0JJVAkJKDEgPDwgMTIpCS8qIEhvc3QxIFVMUEkgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBNWENfSDFfVUNUUkxfSDFXSUVfQklUCQkoMSA8PCAxMSkJLyogSE9TVDEgd2FrZXVwIGludHIgZW5hYmxlICovCisjZGVmaW5lIE1YQ19IMV9VQ1RSTF9IMVBNX0JJVAkJKDEgPDwgIDgpCQkvKiBIT1NUMSBwb3dlciBtYXNrICovCisKKy8qIFVTQl9QSFlfQ1RSTF9GVU5DICovCisjZGVmaW5lIE1YQ19PVEdfUEhZQ1RSTF9PQ19ESVNfQklUCSgxIDw8IDgpCS8qIE9URyBEaXNhYmxlIE92ZXJjdXJyZW50IEV2ZW50ICovCisjZGVmaW5lIE1YQ19IMV9PQ19ESVNfQklUCQkoMSA8PCA1KQkvKiBVSDEgRGlzYWJsZSBPdmVyY3VycmVudCBFdmVudCAqLworCisvKiBVU0JIMkNUUkwgKi8KKyNkZWZpbmUgTVhDX0gyX1VDVFJMX0gyVUlFX0JJVAkJKDEgPDwgOCkKKyNkZWZpbmUgTVhDX0gyX1VDVFJMX0gyV0lFX0JJVAkJKDEgPDwgNykKKyNkZWZpbmUgTVhDX0gyX1VDVFJMX0gyUE1fQklUCQkoMSA8PCA0KQorCisjZGVmaW5lIE1YQ19VU0JDTURfT0ZGU0VUCQkweDE0MAorCisvKiBVU0JDTUQgKi8KKyNkZWZpbmUgTVhDX1VDTURfSVRDX05PX1RIUkVTSE9MRF9NQVNLCSh+KDB4ZmYgPDwgMTYpKQkvKiBJbnRlcnJ1cHQgVGhyZXNob2xkIENvbnRyb2wgKi8KKworaW50IG14NTFfaW5pdGlhbGl6ZV91c2JfaHcoaW50IHBvcnQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKwl2b2lkIF9faW9tZW0gKnVzYl9iYXNlOworCXZvaWQgX19pb21lbSAqdXNib3RnX2Jhc2U7CisJdm9pZCBfX2lvbWVtICp1c2JvdGhlcl9iYXNlOworCWludCByZXQgPSAwOworCisJdXNiX2Jhc2UgPSBpb3JlbWFwKE1YNTFfT1RHX0JBU0VfQUREUiwgU1pfNEspOworCWlmICghdXNiX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CS8qIE9URyBwb3J0ICovCisJCXVzYm90Z19iYXNlID0gdXNiX2Jhc2UgKyBNWENfT1RHX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSAxOgkvKiBIb3N0IDEgcG9ydCAqLworCQl1c2JvdGdfYmFzZSA9IHVzYl9iYXNlICsgTVhDX0gxX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSAyOiAvKiBIb3N0IDIgcG9ydCAqLworCQl1c2JvdGdfYmFzZSA9IHVzYl9iYXNlICsgTVhDX0gyX09GRlNFVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSIiVzIG5vIHN1Y2ggcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycm9yOworCX0KKwl1c2JvdGhlcl9iYXNlID0gdXNiX2Jhc2UgKyBNWDVfVVNCT1RIRVJfUkVHU19PRkZTRVQ7CisKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CS8qT1RHIHBvcnQgKi8KKwkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJOQUxfUEhZKSB7CisJCQl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YQ19VU0JfUEhZX0NUUl9GVU5DX09GRlNFVCk7CisKKwkJCWlmIChmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkgeworCQkJCS8qIE9DL1VTQlBXUiBpcyBub3QgdXNlZCAqLworCQkJCXYgfD0gTVhDX09UR19QSFlDVFJMX09DX0RJU19CSVQ7CisJCQl9IGVsc2UgeworCQkJCS8qIE9DL1VTQlBXUiBpcyB1c2VkICovCisJCQkJdiAmPSB+TVhDX09UR19QSFlDVFJMX09DX0RJU19CSVQ7CisJCQl9CisJCQlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JfUEhZX0NUUl9GVU5DX09GRlNFVCk7CisKKwkJCXYgPSBfX3Jhd19yZWFkbCh1c2JvdGhlcl9iYXNlICsgTVhDX1VTQkNUUkxfT0ZGU0VUKTsKKwkJCWlmIChmbGFncyAmIE1YQ19FSENJX1dBS0VVUF9FTkFCTEVEKQorCQkJCXYgfD0gTVhDX09UR19VQ1RSTF9PV0lFX0JJVDsvKiBPVEcgd2FrZXVwIGVuYWJsZSAqLworCQkJZWxzZQorCQkJCXYgJj0gfk1YQ19PVEdfVUNUUkxfT1dJRV9CSVQ7LyogT1RHIHdha2V1cCBkaXNhYmxlICovCisJCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCisJCQkJdiB8PSBNWENfT1RHX1VDVFJMX09QTV9CSVQ7CisJCQllbHNlCisJCQkJdiAmPSB+TVhDX09UR19VQ1RSTF9PUE1fQklUOworCQkJX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCQ1RSTF9PRkZTRVQpOworCQl9CisJCWJyZWFrOworCWNhc2UgMToJLyogSG9zdCAxICovCisJCS8qSG9zdCBVTFBJICovCisJCXYgPSBfX3Jhd19yZWFkbCh1c2JvdGhlcl9iYXNlICsgTVhDX1VTQkNUUkxfT0ZGU0VUKTsKKwkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfV0FLRVVQX0VOQUJMRUQpIHsKKwkJCS8qIEhPU1QxIHdha2V1cC9VTFBJIGludHIgZW5hYmxlICovCisJCQl2IHw9IChNWENfSDFfVUNUUkxfSDFXSUVfQklUIHwgTVhDX0gxX1VDVFJMX0gxVUlFX0JJVCk7CisJCX0gZWxzZSB7CisJCQkvKiBIT1NUMSB3YWtldXAvVUxQSSBpbnRyIGRpc2FibGUgKi8KKwkJCXYgJj0gfihNWENfSDFfVUNUUkxfSDFXSUVfQklUIHwgTVhDX0gxX1VDVFJMX0gxVUlFX0JJVCk7CisJCX0KKworCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCisJCQl2ICY9IH5NWENfSDFfVUNUUkxfSDFQTV9CSVQ7IC8qIEhPU1QxIHBvd2VyIG1hc2sgdXNlZCovCisJCWVsc2UKKwkJCXYgfD0gTVhDX0gxX1VDVFJMX0gxUE1fQklUOyAvKiBIT1NUMSBwb3dlciBtYXNrIHVzZWQqLworCQlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JDVFJMX09GRlNFVCk7CisKKwkJdiA9IF9fcmF3X3JlYWRsKHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQ19PRkZTRVQpOworCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCisJCQl2ICY9IH5NWENfSDFfT0NfRElTX0JJVDsgLyogT0MgaXMgdXNlZCAqLworCQllbHNlCisJCQl2IHw9IE1YQ19IMV9PQ19ESVNfQklUOyAvKiBPQyBpcyBub3QgdXNlZCAqLworCQlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JfUEhZX0NUUl9GVU5DX09GRlNFVCk7CisKKwkJdiA9IF9fcmF3X3JlYWRsKHVzYm90Z19iYXNlICsgTVhDX1VTQkNNRF9PRkZTRVQpOworCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9JVENfTk9fVEhSRVNIT0xEKQorCQkJLyogSW50ZXJydXB0IFRocmVzaG9sZCBDb250cm9sOkltbWVkaWF0ZSAobm8gdGhyZXNob2xkKSAqLworCQkJdiAmPSBNWENfVUNNRF9JVENfTk9fVEhSRVNIT0xEX01BU0s7CisJCV9fcmF3X3dyaXRlbCh2LCB1c2JvdGdfYmFzZSArIE1YQ19VU0JDTURfT0ZGU0VUKTsKKwkJYnJlYWs7CisJY2FzZSAyOiAvKiBIb3N0IDIgVUxQSSAqLworCQl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YQ19VU0JIMkNUUkxfT0ZGU0VUKTsKKwkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfV0FLRVVQX0VOQUJMRUQpIHsKKwkJCS8qIEhPU1QxIHdha2V1cC9VTFBJIGludHIgZW5hYmxlICovCisJCQl2IHw9IChNWENfSDJfVUNUUkxfSDJXSUVfQklUIHwgTVhDX0gyX1VDVFJMX0gyVUlFX0JJVCk7CisJCX0gZWxzZSB7CisJCQkvKiBIT1NUMSB3YWtldXAvVUxQSSBpbnRyIGRpc2FibGUgKi8KKwkJCXYgJj0gfihNWENfSDJfVUNUUkxfSDJXSUVfQklUIHwgTVhDX0gyX1VDVFJMX0gyVUlFX0JJVCk7CisJCX0KKworCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCisJCQl2ICY9IH5NWENfSDJfVUNUUkxfSDJQTV9CSVQ7IC8qIEhPU1QyIHBvd2VyIG1hc2sgdXNlZCovCisJCWVsc2UKKwkJCXYgfD0gTVhDX0gyX1VDVFJMX0gyUE1fQklUOyAvKiBIT1NUMiBwb3dlciBtYXNrIHVzZWQqLworCQlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JIMkNUUkxfT0ZGU0VUKTsKKwkJYnJlYWs7CisJfQorCitlcnJvcjoKKwlpb3VubWFwKHVzYl9iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9tbS1teDUwLmMgYi9hcmNoL2FybS9tYWNoLW14NS9tbS1teDUwLmMKaW5kZXggOGM2NTQwZS4uYjljMzYzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvbW0tbXg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L21tLW14NTAuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAogLyoKICAqIERlZmluZSB0aGUgTVg1MCBtZW1vcnkgbWFwLgpAQCAtNDQsMTYgKzQ2LDI3IEBACiAgKi8KIHZvaWQgX19pbml0IG14NTBfbWFwX2lvKHZvaWQpCiB7Ci0JbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YNTApOwotCW14Y19pb211eF92M19pbml0KE1YNTBfSU9fQUREUkVTUyhNWDUwX0lPTVVYQ19CQVNFX0FERFIpKTsKLQlteGNfYXJjaF9yZXNldF9pbml0KE1YNTBfSU9fQUREUkVTUyhNWDUwX1dET0dfQkFTRV9BRERSKSk7CiAJaW90YWJsZV9pbml0KG14NTBfaW9fZGVzYywgQVJSQVlfU0laRShteDUwX2lvX2Rlc2MpKTsKIH0KIAotaW50IGlteDUwX3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwordm9pZCBfX2luaXQgaW14NTBfaW5pdF9lYXJseSh2b2lkKQoreworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDUwKTsKKwlteGNfaW9tdXhfdjNfaW5pdChNWDUwX0lPX0FERFJFU1MoTVg1MF9JT01VWENfQkFTRV9BRERSKSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDUwX0lPX0FERFJFU1MoTVg1MF9XRE9HX0JBU0VfQUREUikpOworfQorCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14NTBfZ3Bpb19wb3J0c1tdID0geworCURFRklORV9JTVhfR1BJT19QT1JUX0lSUV9ISUdIKE1YNTAsIDAsIDEsIE1YNTBfSU5UX0dQSU8xX0xPVywgTVg1MF9JTlRfR1BJTzFfSElHSCksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRX0hJR0goTVg1MCwgMSwgMiwgTVg1MF9JTlRfR1BJTzJfTE9XLCBNWDUwX0lOVF9HUElPMl9ISUdIKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlFfSElHSChNWDUwLCAyLCAzLCBNWDUwX0lOVF9HUElPM19MT1csIE1YNTBfSU5UX0dQSU8zX0hJR0gpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUV9ISUdIKE1YNTAsIDMsIDQsIE1YNTBfSU5UX0dQSU8zX0xPVywgTVg1MF9JTlRfR1BJTzNfSElHSCksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRX0hJR0goTVg1MCwgNCwgNSwgTVg1MF9JTlRfR1BJTzNfTE9XLCBNWDUwX0lOVF9HUElPM19ISUdIKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlFfSElHSChNWDUwLCA1LCA2LCBNWDUwX0lOVF9HUElPM19MT1csIE1YNTBfSU5UX0dQSU8zX0hJR0gpLAorfTsKIAogdm9pZCBfX2luaXQgbXg1MF9pbml0X2lycSh2b2lkKQogewogCXR6aWNfaW5pdF9pcnEoTVg1MF9JT19BRERSRVNTKE1YNTBfVFpJQ19CQVNFX0FERFIpKTsKLQlpbXg1MF9yZWdpc3Rlcl9ncGlvcygpOworCW14Y19ncGlvX2luaXQoaW14NTBfZ3Bpb19wb3J0cywJQVJSQVlfU0laRShpbXg1MF9ncGlvX3BvcnRzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9tbS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvbW0uYwppbmRleCA0NTdmOWY5Li5mZjU1NzMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9tbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L21tLmMKQEAgLTQ3LDE4ICs0NywyNiBAQAogICovCiB2b2lkIF9faW5pdCBteDUxX21hcF9pbyh2b2lkKQogeworCWlvdGFibGVfaW5pdChteDUxX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXg1MV9pb19kZXNjKSk7Cit9CisKK3ZvaWQgX19pbml0IGlteDUxX2luaXRfZWFybHkodm9pZCkKK3sKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVg1MSk7CiAJbXhjX2lvbXV4X3YzX2luaXQoTVg1MV9JT19BRERSRVNTKE1YNTFfSU9NVVhDX0JBU0VfQUREUikpOwogCW14Y19hcmNoX3Jlc2V0X2luaXQoTVg1MV9JT19BRERSRVNTKE1YNTFfV0RPRzFfQkFTRV9BRERSKSk7Ci0JaW90YWJsZV9pbml0KG14NTFfaW9fZGVzYywgQVJSQVlfU0laRShteDUxX2lvX2Rlc2MpKTsKIH0KIAogdm9pZCBfX2luaXQgbXg1M19tYXBfaW8odm9pZCkKIHsKKwlpb3RhYmxlX2luaXQobXg1M19pb19kZXNjLCBBUlJBWV9TSVpFKG14NTNfaW9fZGVzYykpOworfQorCit2b2lkIF9faW5pdCBpbXg1M19pbml0X2Vhcmx5KHZvaWQpCit7CiAJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YNTMpOwogCW14Y19pb211eF92M19pbml0KE1YNTNfSU9fQUREUkVTUyhNWDUzX0lPTVVYQ19CQVNFX0FERFIpKTsKLQlteGNfYXJjaF9yZXNldF9pbml0KE1YNTNfSU9fQUREUkVTUyhNWDUzX1dET0dfQkFTRV9BRERSKSk7Ci0JaW90YWJsZV9pbml0KG14NTNfaW9fZGVzYywgQVJSQVlfU0laRShteDUzX2lvX2Rlc2MpKTsKKwlteGNfYXJjaF9yZXNldF9pbml0KE1YNTNfSU9fQUREUkVTUyhNWDUzX1dET0cxX0JBU0VfQUREUikpOwogfQogCiBpbnQgaW14NTFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9teDUxX2VmaWthLmMgYi9hcmNoL2FybS9tYWNoLW14NS9teDUxX2VmaWthLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhNjdmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L214NTFfZWZpa2EuYwpAQCAtMCwwICsxLDYzNiBAQAorLyoKKyAqIGJhc2VkIG9uIGNvZGUgZnJvbSB0aGUgZm9sbG93aW5nCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIFBlZ2F0cm9uIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDktMjAxMCBHZW5lc2kgVVNBLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM4OTIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDUxLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKyNpbmNsdWRlIDxtYWNoL3VscGkuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgImRldmljZXMtaW14NTEuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSAiZWZpa2EuaCIKKyNpbmNsdWRlICJjcHVfb3AtbXg1MS5oIgorCisjZGVmaW5lIE1YNTFfVVNCX0NUUkxfMV9PRkZTRVQgICAgICAgICAgMHgxMAorI2RlZmluZSBNWDUxX1VTQl9DVFJMX1VIMV9FWFRfQ0xLX0VOICAgICgxIDw8IDI1KQorI2RlZmluZQlNWDUxX1VTQl9QTExfRElWXzE5XzJfTUhaCTB4MDEKKworI2RlZmluZSBFRklLQU1YX1VTQl9IVUJfUkVTRVQJSU1YX0dQSU9fTlIoMSwgNSkKKyNkZWZpbmUgRUZJS0FNWF9VU0JIMV9TVFAJSU1YX0dQSU9fTlIoMSwgMjcpCisKKyNkZWZpbmUgRUZJS0FNWF9TUElfQ1MwCQlJTVhfR1BJT19OUig0LCAyNCkKKyNkZWZpbmUgRUZJS0FNWF9TUElfQ1MxCQlJTVhfR1BJT19OUig0LCAyNSkKKworI2RlZmluZSBFRklLQU1YX1BNSUMJCUlNWF9HUElPX05SKDEsIDYpCisKK3N0YXRpYyBpb211eF92M19jZmdfdCBteDUxZWZpa2FfcGFkc1tdID0geworCS8qIFVBUlQxICovCisJTVg1MV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQsCisJTVg1MV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQsCisJTVg1MV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMsCisJTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMsCisKKwkvKiBTRCAxICovCisJTVg1MV9QQURfU0QxX0NNRF9fU0QxX0NNRCwKKwlNWDUxX1BBRF9TRDFfQ0xLX19TRDFfQ0xLLAorCU1YNTFfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwLAorCU1YNTFfUEFEX1NEMV9EQVRBMV9fU0QxX0RBVEExLAorCU1YNTFfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyLAorCU1YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzLAorCisJLyogU0QgMiAqLworCU1YNTFfUEFEX1NEMl9DTURfX1NEMl9DTUQsCisJTVg1MV9QQURfU0QyX0NMS19fU0QyX0NMSywKKwlNWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMCwKKwlNWDUxX1BBRF9TRDJfREFUQTFfX1NEMl9EQVRBMSwKKwlNWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMiwKKwlNWDUxX1BBRF9TRDJfREFUQTNfX1NEMl9EQVRBMywKKworCS8qIFNEL01NQyBXUC9DRCAqLworCU1YNTFfUEFEX0dQSU8xXzBfX1NEMV9DRCwKKwlNWDUxX1BBRF9HUElPMV8xX19TRDFfV1AsCisJTVg1MV9QQURfR1BJTzFfN19fU0QyX1dQLAorCU1YNTFfUEFEX0dQSU8xXzhfX1NEMl9DRCwKKworCS8qIHNwaSAqLworCU1YNTFfUEFEX0NTUEkxX01PU0lfX0VDU1BJMV9NT1NJLAorCU1YNTFfUEFEX0NTUEkxX01JU09fX0VDU1BJMV9NSVNPLAorCU1YNTFfUEFEX0NTUEkxX1NTMF9fR1BJTzRfMjQsCisJTVg1MV9QQURfQ1NQSTFfU1MxX19HUElPNF8yNSwKKwlNWDUxX1BBRF9DU1BJMV9SRFlfX0VDU1BJMV9SRFksCisJTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEssCisJTVg1MV9QQURfR1BJTzFfNl9fR1BJTzFfNiwKKworCS8qIFVTQiBIT1NUMSAqLworCU1YNTFfUEFEX1VTQkgxX0NMS19fVVNCSDFfQ0xLLAorCU1YNTFfUEFEX1VTQkgxX0RJUl9fVVNCSDFfRElSLAorCU1YNTFfUEFEX1VTQkgxX05YVF9fVVNCSDFfTlhULAorCU1YNTFfUEFEX1VTQkgxX0RBVEEwX19VU0JIMV9EQVRBMCwKKwlNWDUxX1BBRF9VU0JIMV9EQVRBMV9fVVNCSDFfREFUQTEsCisJTVg1MV9QQURfVVNCSDFfREFUQTJfX1VTQkgxX0RBVEEyLAorCU1YNTFfUEFEX1VTQkgxX0RBVEEzX19VU0JIMV9EQVRBMywKKwlNWDUxX1BBRF9VU0JIMV9EQVRBNF9fVVNCSDFfREFUQTQsCisJTVg1MV9QQURfVVNCSDFfREFUQTVfX1VTQkgxX0RBVEE1LAorCU1YNTFfUEFEX1VTQkgxX0RBVEE2X19VU0JIMV9EQVRBNiwKKwlNWDUxX1BBRF9VU0JIMV9EQVRBN19fVVNCSDFfREFUQTcsCisKKwkvKiBVU0IgSFVCIFJFU0VUICovCisJTVg1MV9QQURfR1BJTzFfNV9fR1BJTzFfNSwKKworCS8qIFdMQU4gKi8KKwlNWDUxX1BBRF9FSU1fQTIyX19HUElPMl8xNiwKKwlNWDUxX1BBRF9FSU1fQTE2X19HUElPMl8xMCwKKworCS8qIFVTQiBQSFkgUkVTRVQgKi8KKwlNWDUxX1BBRF9FSU1fRDI3X19HUElPMl85LAorfTsKKworLyogU2VyaWFsIHBvcnRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGJvYXJkIHNwZWNpZmljIGFzIHRoZSBiaXQgbWFzayBmb3IgdGhlIHBsbGRpdiB3aWxsIGFsc28KKyAqIGJlIGRpZmZlcmVudCBmb3Igb3RoZXIgRnJlZXNjYWxlIFNvQ3MsIHRodXMgYSBjb21tb24gYml0bWFzayBpcyBub3QKKyAqIHBvc3NpYmxlIGFuZCBjYW5ub3QgZ2V0IHBsYWNlIGluIC9wbGF0LW14Yy9laGNpLmMuCisgKi8KK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZV9vdGdfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXUzMiB2OworCXZvaWQgX19pb21lbSAqdXNiX2Jhc2U7CisJdm9pZCBfX2lvbWVtICp1c2JvdGhlcl9iYXNlOworCXVzYl9iYXNlID0gaW9yZW1hcChNWDUxX09UR19CQVNFX0FERFIsIFNaXzRLKTsKKwlpZiAoIXVzYl9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1c2JvdGhlcl9iYXNlID0gKHZvaWQgX19pb21lbSAqKSh1c2JfYmFzZSArIE1YNV9VU0JPVEhFUl9SRUdTX09GRlNFVCk7CisKKwkvKiBTZXQgdGhlIFBIWSBjbG9jayB0byAxOS4yTUh6ICovCisJdiA9IF9fcmF3X3JlYWRsKHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQzJfT0ZGU0VUKTsKKwl2ICY9IH5NWDVfVVNCX1VUTUlfUEhZQ1RSTDFfUExMRElWX01BU0s7CisJdiB8PSBNWDUxX1VTQl9QTExfRElWXzE5XzJfTUhaOworCV9fcmF3X3dyaXRlbCh2LCB1c2JvdGhlcl9iYXNlICsgTVhDX1VTQl9QSFlfQ1RSX0ZVTkMyX09GRlNFVCk7CisJaW91bm1hcCh1c2JfYmFzZSk7CisKKwltZGVsYXkoMTApOworCisJcmV0dXJuIG14NTFfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIE1YQ19FSENJX0lOVEVSTkFMX1BIWSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBkcl91dG1pX2NvbmZpZyA9IHsKKwkuaW5pdCAgID0gaW5pdGlhbGl6ZV9vdGdfcG9ydCwKKwkucG9ydHNjID0gTVhDX0VIQ0lfVVRNSV8xNkJJVCwKK307CisKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZV91c2JoMV9wb3J0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW9tdXhfdjNfY2ZnX3QgdXNiaDFzdHAgPSBNWDUxX1BBRF9VU0JIMV9TVFBfX1VTQkgxX1NUUDsKKwlpb211eF92M19jZmdfdCB1c2JoMWdwaW8gPSBNWDUxX1BBRF9VU0JIMV9TVFBfX0dQSU8xXzI3OworCXUzMiB2OworCXZvaWQgX19pb21lbSAqdXNiX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpzb2NyZWdzX2Jhc2U7CisKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKHVzYmgxZ3Bpbyk7CisJZ3Bpb19yZXF1ZXN0KEVGSUtBTVhfVVNCSDFfU1RQLCAidXNiaDFfc3RwIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEVGSUtBTVhfVVNCSDFfU1RQLCAwKTsKKwltc2xlZXAoMSk7CisJZ3Bpb19zZXRfdmFsdWUoRUZJS0FNWF9VU0JIMV9TVFAsIDEpOworCW1zbGVlcCgxKTsKKworCXVzYl9iYXNlID0gaW9yZW1hcChNWDUxX09UR19CQVNFX0FERFIsIFNaXzRLKTsKKwlzb2NyZWdzX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopKHVzYl9iYXNlICsgTVg1X1VTQk9USEVSX1JFR1NfT0ZGU0VUKTsKKworCS8qIFRoZSBjbG9jayBmb3IgdGhlIFVTQkgxIFVMUEkgcG9ydCB3aWxsIGNvbWUgZXh0ZXJuYWxseSAqLworCS8qIGZyb20gdGhlIFBIWS4gKi8KKwl2ID0gX19yYXdfcmVhZGwoc29jcmVnc19iYXNlICsgTVg1MV9VU0JfQ1RSTF8xX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKHYgfCBNWDUxX1VTQl9DVFJMX1VIMV9FWFRfQ0xLX0VOLAorCQkJc29jcmVnc19iYXNlICsgTVg1MV9VU0JfQ1RSTF8xX09GRlNFVCk7CisKKwlpb3VubWFwKHVzYl9iYXNlKTsKKworCWdwaW9fZnJlZShFRklLQU1YX1VTQkgxX1NUUCk7CisJbXhjX2lvbXV4X3YzX3NldHVwX3BhZCh1c2JoMXN0cCk7CisKKwltZGVsYXkoMTApOworCisJcmV0dXJuIG14NTFfaW5pdGlhbGl6ZV91c2JfaHcoMCwgTVhDX0VIQ0lfSVRDX05PX1RIUkVTSE9MRCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9jb25maWcgPSB7CisJLmluaXQgICA9IGluaXRpYWxpemVfdXNiaDFfcG9ydCwKKwkucG9ydHNjID0gTVhDX0VIQ0lfTU9ERV9VTFBJLAorfTsKKworc3RhdGljIHZvaWQgbXg1MV9lZmlrYV9odWJyZXNldCh2b2lkKQoreworCWdwaW9fcmVxdWVzdChFRklLQU1YX1VTQl9IVUJfUkVTRVQsICJ1c2JfaHViX3JzdCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChFRklLQU1YX1VTQl9IVUJfUkVTRVQsIDEpOworCW1zbGVlcCgxKTsKKwlncGlvX3NldF92YWx1ZShFRklLQU1YX1VTQl9IVUJfUkVTRVQsIDApOworCW1zbGVlcCgxKTsKKwlncGlvX3NldF92YWx1ZShFRklLQU1YX1VTQl9IVUJfUkVTRVQsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXg1MV9lZmlrYV91c2Iodm9pZCkKK3sKKwlteDUxX2VmaWthX2h1YnJlc2V0KCk7CisKKwkvKiBwdWxsaW5nIGl0IGxvdywgbWVhbnMgbm8gVVNCIGF0IGFsbC4uLiAqLworCWdwaW9fcmVxdWVzdChFRklLQV9VU0JfUEhZX1JFU0VULCAidXNiX3BoeV9yZXNldCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChFRklLQV9VU0JfUEhZX1JFU0VULCAwKTsKKwltc2xlZXAoMSk7CisJZ3Bpb19zZXRfdmFsdWUoRUZJS0FfVVNCX1BIWV9SRVNFVCwgMSk7CisKKwl1c2JoMV9jb25maWcub3RnID0gaW14X290Z191bHBpX2NyZWF0ZShVTFBJX09UR19EUlZWQlVTIHwKKwkJCVVMUElfT1RHX0RSVlZCVVNfRVhUIHwgVUxQSV9PVEdfRVhUVkJVU0lORCk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiZHJfaG9zdF9kZXZpY2UsICZkcl91dG1pX2NvbmZpZyk7CisJaWYgKHVzYmgxX2NvbmZpZy5vdGcpCisJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMV9kZXZpY2UsICZ1c2JoMV9jb25maWcpOworfQorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbXg1MV9lZmlrYV9zcGlfbm9yX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJIC5uYW1lID0gInUtYm9vdCIsCisJIC5vZmZzZXQgPSAwLAorCSAuc2l6ZSA9IFNaXzI1NkssCisJfSwKKwl7CisJICAubmFtZSA9ICJjb25maWciLAorCSAgLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgIC5zaXplID0gU1pfNjRLLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgbXg1MV9lZmlrYV9zcGlfZmxhc2hfZGF0YSA9IHsKKwkubmFtZQkJPSAic3BpX2ZsYXNoIiwKKwkucGFydHMJCT0gbXg1MV9lZmlrYV9zcGlfbm9yX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShteDUxX2VmaWthX3NwaV9ub3JfcGFydGl0aW9ucyksCisJLnR5cGUJCT0gInNzdDI1dmYwMzJiIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzdzFfY29uc3VtZXJzW10gPSB7CisJeworCQkuc3VwcGx5ID0gImNwdV92Y2MiLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB2ZGlnX2NvbnN1bWVyc1tdID0geworCS8qIHNndGw1MDAwICovCisJUkVHVUxBVE9SX1NVUFBMWSgiVkREQSIsICIxLTAwMGEiKSwKKwlSRUdVTEFUT1JfU1VQUExZKCJWREREIiwgIjEtMDAwYSIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHZ2aWRlb19jb25zdW1lcnNbXSA9IHsKKwkvKiBzZ3RsNTAwMCAqLworCVJFR1VMQVRPUl9TVVBQTFkoIlZERElPIiwgIjEtMDAwYSIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHZzZF9jb25zdW1lcnNbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgInNkaGNpLWVzZGhjLWlteC4wIiksCisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJzZGhjaS1lc2RoYy1pbXguMSIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHB3Z3QxX2NvbnN1bWVyW10gPSB7CisJeworCQkuc3VwcGx5ID0gInB3Z3QxIiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcHdndDJfY29uc3VtZXJbXSA9IHsKKwl7CisJCS5zdXBwbHkgPSAicHdndDIiLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBjb2luY2VsbF9jb25zdW1lcltdID0geworCXsKKwkJLnN1cHBseSA9ICJjb2luY2VsbCIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN3MV9pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiU1cxIiwKKwkJLm1pbl91ViA9IDYwMDAwMCwKKwkJLm1heF91ViA9IDEzNzUwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSwKKwkJLnZhbGlkX21vZGVzX21hc2sgPSAwLAorCQkuYWx3YXlzX29uID0gMSwKKwkJLmJvb3Rfb24gPSAxLAorCQkuc3RhdGVfbWVtID0geworCQkJLnVWID0gODUwMDAwLAorCQkJLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkuZW5hYmxlZCA9IDEsCisJCX0sCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzdzFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBzdzFfY29uc3VtZXJzLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN3Ml9pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiU1cyIiwKKwkJLm1pbl91ViA9IDkwMDAwMCwKKwkJLm1heF91ViA9IDE4NTAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwkJLnN0YXRlX21lbSA9IHsKKwkJCS51ViA9IDk1MDAwMCwKKwkJCS5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJLmVuYWJsZWQgPSAxLAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzdzNfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXMyIsCisJCS5taW5fdVYgPSAxMTAwMDAwLAorCQkubWF4X3VWID0gMTg1MDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAorCQkuYWx3YXlzX29uID0gMSwKKwkJLmJvb3Rfb24gPSAxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzdzRfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXNCIsCisJCS5taW5fdVYgPSAxMTAwMDAwLAorCQkubWF4X3VWID0gMTg1MDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAorCQkuYWx3YXlzX29uID0gMSwKKwkJLmJvb3Rfb24gPSAxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2aW9oaV9pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVklPSEkiLAorCQkuYm9vdF9vbiA9IDEsCisJCS5hbHdheXNfb24gPSAxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2dXNiX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWVVNCIiwKKwkJLmJvb3Rfb24gPSAxLAorCQkuYWx3YXlzX29uID0gMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc3dic3RfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXQlNUIiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmRpZ19pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVkRJRyIsCisJCS5taW5fdVYgPSAxMDUwMDAwLAorCQkubWF4X3VWID0gMTgwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0KKwkJCVJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkuYm9vdF9vbiA9IDEsCisJCS5hbHdheXNfb24gPSAxLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUodmRpZ19jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHZkaWdfY29uc3VtZXJzLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZwbGxfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZQTEwiLAorCQkubWluX3VWID0gMTA1MDAwMCwKKwkJLm1heF91ViA9IDE4MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9CisJCQlSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLmJvb3Rfb24gPSAxLAorCQkuYWx3YXlzX29uID0gMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdnVzYjJfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZVU0IyIiwKKwkJLm1pbl91ViA9IDI0MDAwMDAsCisJCS5tYXhfdVYgPSAyNzc1MDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCisJCS5ib290X29uID0gMSwKKwkJLmFsd2F5c19vbiA9IDEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZ2aWRlb19pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVlZJREVPIiwKKwkJLm1pbl91ViA9IDI3NzUwMDAsCisJCS5tYXhfdVYgPSAyNzc1MDAwLAorCQkudmFsaWRfb3BzX21hc2sgPQorCQkJUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5ib290X29uID0gMSwKKwkJLmFwcGx5X3VWID0gMSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHZ2aWRlb19jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHZ2aWRlb19jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmF1ZGlvX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWQVVESU8iLAorCQkubWluX3VWID0gMjMwMDAwMCwKKwkJLm1heF91ViA9IDMwMDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9CisJCQlSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLmJvb3Rfb24gPSAxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2c2RfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZTRCIsCisJCS5taW5fdVYgPSAxODAwMDAwLAorCQkubWF4X3VWID0gMzE1MDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0KKwkJCVJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSwKKwkJLmJvb3Rfb24gPSAxLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUodnNkX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gdnNkX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2Y2FtX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWQ0FNIiwKKwkJLm1pbl91ViA9IDI1MDAwMDAsCisJCS5tYXhfdVYgPSAzMDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPQorCQkJUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX0ZBU1QgfCBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS5ib290X29uID0gMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmdlbjFfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZHRU4xIiwKKwkJLm1pbl91ViA9IDEyMDAwMDAsCisJCS5tYXhfdVYgPSAzMTUwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPQorCQkJUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5ib290X29uID0gMSwKKwkJLmFsd2F5c19vbiA9IDEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZnZW4yX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWR0VOMiIsCisJCS5taW5fdVYgPSAxMjAwMDAwLAorCQkubWF4X3VWID0gMzE1MDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0KKwkJCVJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkuYm9vdF9vbiA9IDEsCisJCS5hbHdheXNfb24gPSAxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2Z2VuM19pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVkdFTjMiLAorCQkubWluX3VWID0gMTgwMDAwMCwKKwkJLm1heF91ViA9IDI5MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9CisJCQlSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLmJvb3Rfb24gPSAxLAorCQkuYWx3YXlzX29uID0gMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ3BvMV9pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiR1BPMSIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdwbzJfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIkdQTzIiLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBncG8zX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJHUE8zIiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ3BvNF9pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiR1BPNCIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHB3Z3QxX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLmJvb3Rfb24gICAgICAgID0gMSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHB3Z3QxX2NvbnN1bWVyKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBwd2d0MV9jb25zdW1lciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBwd2d0Ml9pbml0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5ib290X29uICAgICAgICA9IDEsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShwd2d0Ml9jb25zdW1lciksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gcHdndDJfY29uc3VtZXIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmNvaW5jZWxsX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJDT0lOQ0VMTCIsCisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzAwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0KKwkJCVJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoY29pbmNlbGxfY29uc3VtZXIpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IGNvaW5jZWxsX2NvbnN1bWVyLAorfTsKKworc3RhdGljIHN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9pbml0X2RhdGEgbXg1MV9lZmlrYV9yZWd1bGF0b3JzW10gPSB7CisJeyAuaWQgPSBNQzEzODkyX1NXMSwJCS5pbml0X2RhdGEgPSAgJnN3MV9pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1NXMiwJCS5pbml0X2RhdGEgPSAgJnN3Ml9pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1NXMywJCS5pbml0X2RhdGEgPSAgJnN3M19pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1NXNCwJCS5pbml0X2RhdGEgPSAgJnN3NF9pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1NXQlNULAkJLmluaXRfZGF0YSA9ICAmc3dic3RfaW5pdCB9LAorCXsgLmlkID0gTUMxMzg5Ml9WSU9ISSwJCS5pbml0X2RhdGEgPSAgJnZpb2hpX2luaXQgfSwKKwl7IC5pZCA9IE1DMTM4OTJfVlBMTCwJCS5pbml0X2RhdGEgPSAgJnZwbGxfaW5pdCB9LAorCXsgLmlkID0gTUMxMzg5Ml9WRElHLAkJLmluaXRfZGF0YSA9ICAmdmRpZ19pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1ZTRCwJCS5pbml0X2RhdGEgPSAgJnZzZF9pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1ZVU0IyLAkJLmluaXRfZGF0YSA9ICAmdnVzYjJfaW5pdCB9LAorCXsgLmlkID0gTUMxMzg5Ml9WVklERU8sCQkuaW5pdF9kYXRhID0gICZ2dmlkZW9faW5pdCB9LAorCXsgLmlkID0gTUMxMzg5Ml9WQVVESU8sCQkuaW5pdF9kYXRhID0gICZ2YXVkaW9faW5pdCB9LAorCXsgLmlkID0gTUMxMzg5Ml9WQ0FNLAkJLmluaXRfZGF0YSA9ICAmdmNhbV9pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1ZHRU4xLAkJLmluaXRfZGF0YSA9ICAmdmdlbjFfaW5pdCB9LAorCXsgLmlkID0gTUMxMzg5Ml9WR0VOMiwJCS5pbml0X2RhdGEgPSAgJnZnZW4yX2luaXQgfSwKKwl7IC5pZCA9IE1DMTM4OTJfVkdFTjMsCQkuaW5pdF9kYXRhID0gICZ2Z2VuM19pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1ZVU0IsCQkuaW5pdF9kYXRhID0gICZ2dXNiX2luaXQgfSwKKwl7IC5pZCA9IE1DMTM4OTJfR1BPMSwJCS5pbml0X2RhdGEgPSAgJmdwbzFfaW5pdCB9LAorCXsgLmlkID0gTUMxMzg5Ml9HUE8yLAkJLmluaXRfZGF0YSA9ICAmZ3BvMl9pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX0dQTzMsCQkuaW5pdF9kYXRhID0gICZncG8zX2luaXQgfSwKKwl7IC5pZCA9IE1DMTM4OTJfR1BPNCwJCS5pbml0X2RhdGEgPSAgJmdwbzRfaW5pdCB9LAorCXsgLmlkID0gTUMxMzg5Ml9QV0dUMVNQSSwJLmluaXRfZGF0YSA9ICZwd2d0MV9pbml0IH0sCisJeyAuaWQgPSBNQzEzODkyX1BXR1QyU1BJLAkuaW5pdF9kYXRhID0gJnB3Z3QyX2luaXQgfSwKKwl7IC5pZCA9IE1DMTM4OTJfVkNPSU5DRUxMLAkuaW5pdF9kYXRhID0gJnZjb2luY2VsbF9pbml0IH0sCit9OworCitzdGF0aWMgc3RydWN0IG1jMTN4eHhfcGxhdGZvcm1fZGF0YSBteDUxX2VmaWthX21jMTM4OTJfZGF0YSA9IHsKKwkuZmxhZ3MgPSBNQzEzWFhYX1VTRV9SVEMgfCBNQzEzWFhYX1VTRV9SRUdVTEFUT1IsCisJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShteDUxX2VmaWthX3JlZ3VsYXRvcnMpLAorCS5yZWd1bGF0b3JzID0gbXg1MV9lZmlrYV9yZWd1bGF0b3JzLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBteDUxX2VmaWthX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJtMjVwODAiLAorCQkubWF4X3NwZWVkX2h6ID0gMjUwMDAwMDAsCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXg1MV9lZmlrYV9zcGlfZmxhc2hfZGF0YSwKKwkJLmlycSA9IC0xLAorCX0sCisJeworCQkubW9kYWxpYXMgPSAibWMxMzg5MiIsCisJCS5tYXhfc3BlZWRfaHogPSAxMDAwMDAwLAorCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJm14NTFfZWZpa2FfbWMxMzg5Ml9kYXRhLAorCQkuaXJxID0gZ3Bpb190b19pcnEoRUZJS0FNWF9QTUlDKSwKKwl9LAorfTsKKworc3RhdGljIGludCBteDUxX2VmaWthX3NwaV9jc1tdID0geworCUVGSUtBTVhfU1BJX0NTMCwKKwlFRklLQU1YX1NQSV9DUzEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyIG14NTFfZWZpa2Ffc3BpX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5jaGlwc2VsZWN0ICAgICA9IG14NTFfZWZpa2Ffc3BpX2NzLAorCS5udW1fY2hpcHNlbGVjdCA9IEFSUkFZX1NJWkUobXg1MV9lZmlrYV9zcGlfY3MpLAorfTsKKwordm9pZCBfX2luaXQgZWZpa2FfYm9hcmRfY29tbW9uX2luaXQodm9pZCkKK3sKKwlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDUxZWZpa2FfcGFkcywKKwkJCQkJQVJSQVlfU0laRShteDUxZWZpa2FfcGFkcykpOworCWlteDUxX2FkZF9pbXhfdWFydCgwLCAmdWFydF9wZGF0YSk7CisJbXg1MV9lZmlrYV91c2IoKTsKKwlpbXg1MV9hZGRfc2RoY2lfZXNkaGNfaW14KDAsIE5VTEwpOworCisJLyogRklYTUU6IGNvbWVzIGZyb20gb3JpZ2luYWwgY29kZS4gY2hlY2sgdGhpcy4gKi8KKwlpZiAobXg1MV9yZXZpc2lvbigpIDwgSU1YX0NISVBfUkVWSVNJT05fMl8wKQorCQlzdzJfaW5pdC5jb25zdHJhaW50cy5zdGF0ZV9tZW0udVYgPSAxMTAwMDAwOworCWVsc2UgaWYgKG14NTFfcmV2aXNpb24oKSA9PSBJTVhfQ0hJUF9SRVZJU0lPTl8yXzApIHsKKwkJc3cyX2luaXQuY29uc3RyYWludHMuc3RhdGVfbWVtLnVWID0gMTI1MDAwMDsKKwkJc3cxX2luaXQuY29uc3RyYWludHMuc3RhdGVfbWVtLnVWID0gMTAwMDAwMDsKKwl9CisJaWYgKG1hY2hpbmVfaXNfbXg1MV9lZmlrYXNiKCkpCisJCXZnZW4xX2luaXQuY29uc3RyYWludHMubWF4X3VWID0gMTIwMDAwMDsKKworCWdwaW9fcmVxdWVzdChFRklLQU1YX1BNSUMsICJwbWljIGlycSIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEVGSUtBTVhfUE1JQyk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8obXg1MV9lZmlrYV9zcGlfYm9hcmRfaW5mbywKKwkJQVJSQVlfU0laRShteDUxX2VmaWthX3NwaV9ib2FyZF9pbmZvKSk7CisJaW14NTFfYWRkX2Vjc3BpKDAsICZteDUxX2VmaWthX3NwaV9wZGF0YSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUV9JTVgpCisJZ2V0X2NwdV9vcCA9IG14NTFfZ2V0X2NwdV9vcDsKKyNlbmRpZgorfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2lvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2lvbXV4LmMKaW5kZXggNDA1ZDliMS4uNjZmYzQxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9pb211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvaW9tdXguYwpAQCAtNTAsNyArNTAsNyBAQAogLyoKICAqIHNldCB0aGUgbW9kZSBmb3IgYSBJT01VWCBwaW4uCiAgKi8KLWludCBteGNfaW9tdXhfbW9kZShjb25zdCB1bnNpZ25lZCBpbnQgcGluX21vZGUpCitpbnQgbXhjX2lvbXV4X21vZGUodW5zaWduZWQgaW50IHBpbl9tb2RlKQogewogCXUzMiBzaWRlLCBmaWVsZCwgbCwgbW9kZSwgcmV0ID0gMDsKIAl2b2lkIF9faW9tZW0gKnJlZzsKQEAgLTExNCw3ICsxMTQsNyBAQAogICogCS0gcmVzZXJ2ZXMgdGhlIHBpbiBzbyB0aGF0IGl0IGlzIG5vdCBjbGFpbWVkIGJ5IGFub3RoZXIgZHJpdmVyCiAgKiAJLSBzZXR1cHMgdGhlIGlvbXV4IGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbgogICovCi1pbnQgbXhjX2lvbXV4X2FsbG9jX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluX21vZGUsIGNvbnN0IGNoYXIgKmxhYmVsKQoraW50IG14Y19pb211eF9hbGxvY19waW4odW5zaWduZWQgaW50IHBpbl9tb2RlLCBjb25zdCBjaGFyICpsYWJlbCkKIHsKIAl1bnNpZ25lZCBwYWQgPSBQSU5fR0xPQkFMX05VTShwaW5fbW9kZSk7CiAJaWYgKHBhZCA+PSAoUElOX01BWCArIDEpKSB7CkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogfQogRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfYWxsb2NfcGluKTsKIAotaW50IG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAoraW50IG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKGNvbnN0IHVuc2lnbmVkIGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAogCQljb25zdCBjaGFyICpsYWJlbCkKIHsKLQl1bnNpZ25lZCBpbnQgKnAgPSBwaW5fbGlzdDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnAgPSBwaW5fbGlzdDsKIAlpbnQgaTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIApAQCAtMTU1LDcgKzE1NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKTsKIAotdm9pZCBteGNfaW9tdXhfcmVsZWFzZV9waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbl9tb2RlKQordm9pZCBteGNfaW9tdXhfcmVsZWFzZV9waW4odW5zaWduZWQgaW50IHBpbl9tb2RlKQogewogCXVuc2lnbmVkIHBhZCA9IFBJTl9HTE9CQUxfTlVNKHBpbl9tb2RlKTsKIApAQCAtMTY0LDkgKzE2NCw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF9yZWxlYXNlX3Bpbik7CiAKLXZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpCit2b2lkIG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgdW5zaWduZWQgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KQogewotCXVuc2lnbmVkIGludCAqcCA9IHBpbl9saXN0OworCWNvbnN0IHVuc2lnbmVkIGludCAqcCA9IHBpbl9saXN0OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbWFneC16bjUuYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbWFneC16bjUuYwppbmRleCAzOTVkODNiLi5mMzFhNDVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21hZ3gtem41LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tYWd4LXpuNS5jCkBAIC01Myw5ICs1MywxMCBAQAogfTsKIAogTUFDSElORV9TVEFSVChNQUdYX1pONSwgIk1vdG9yb2xhIFpuNSIpCi0JLmJvb3RfcGFyYW1zCT0gTVhDOTEyMzFfUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvCQk9IG14YzkxMjMxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteGM5MTIzMV9pbml0X2lycSwKLQkudGltZXIJCT0gJnpuNV90aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gem41X2luaXQsCisJLmJvb3RfcGFyYW1zID0gTVhDOTEyMzFfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvID0gbXhjOTEyMzFfbWFwX2lvLAorCS5pbml0X2Vhcmx5ID0gbXhjOTEyMzFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEgPSBteGM5MTIzMV9pbml0X2lycSwKKwkudGltZXIgPSAmem41X3RpbWVyLAorCS5pbml0X21hY2hpbmUgPSB6bjVfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21tLmMgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21tLmMKaW5kZXggNzY1MmMzMC4uYTc3ZjZkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbW0uYwpAQCAtNDUsMTEgKzQ1LDE0IEBACiAgKi8KIHZvaWQgX19pbml0IG14YzkxMjMxX21hcF9pbyh2b2lkKQogewotCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWEM5MTIzMSk7Ci0KIAlpb3RhYmxlX2luaXQobXhjOTEyMzFfaW9fZGVzYywgQVJSQVlfU0laRShteGM5MTIzMV9pb19kZXNjKSk7CiB9CiAKK3ZvaWQgX19pbml0IG14YzkxMjMxX2luaXRfZWFybHkodm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVhDOTEyMzEpOworfQorCiBpbnQgbXhjOTEyMzFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7CiAKIHZvaWQgX19pbml0IG14YzkxMjMxX2luaXRfaXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teHMvS2NvbmZpZwppbmRleCA4YmZjOGRmLi40ZjZmMTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL0tjb25maWcKQEAgLTIsMTMgKzIsMTggQEAKIAogc291cmNlICJhcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL0tjb25maWciCiAKK2NvbmZpZyBNWFNfT0NPVFAKKwlib29sCisKIGNvbmZpZyBTT0NfSU1YMjMKIAlib29sCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEhBVkVfUFdNCiAKIGNvbmZpZyBTT0NfSU1YMjgKIAlib29sCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEhBVkVfUFdNCiAKIGNvbW1lbnQgIk1YUyBwbGF0Zm9ybXM6IgogCkBAIC0xNiw2ICsyMSw4IEBACiAJYm9vbCAiU3VwcG9ydCBNWDIzRVZLIFBsYXRmb3JtIgogCXNlbGVjdCBTT0NfSU1YMjMKIAlzZWxlY3QgTVhTX0hBVkVfQU1CQV9EVUFSVAorCXNlbGVjdCBNWFNfSEFWRV9QTEFURk9STV9BVUFSVAorCXNlbGVjdCBNWFNfSEFWRV9QTEFURk9STV9NWFNGQgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyM0VWSyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwpAQCAtMjUsMTAgKzMyLDI3IEBACiAJYm9vbCAiU3VwcG9ydCBNWDI4RVZLIFBsYXRmb3JtIgogCXNlbGVjdCBTT0NfSU1YMjgKIAlzZWxlY3QgTVhTX0hBVkVfQU1CQV9EVUFSVAorCXNlbGVjdCBNWFNfSEFWRV9QTEFURk9STV9BVUFSVAogCXNlbGVjdCBNWFNfSEFWRV9QTEFURk9STV9GRUMKKwlzZWxlY3QgTVhTX0hBVkVfUExBVEZPUk1fRkxFWENBTgorCXNlbGVjdCBNWFNfSEFWRV9QTEFURk9STV9NWFNGQgorCXNlbGVjdCBNWFNfT0NPVFAKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMjhFVksgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKIAkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KIAorY29uZmlnIE1PRFVMRV9UWDI4CisJYm9vbAorCXNlbGVjdCBTT0NfSU1YMjgKKwlzZWxlY3QgTVhTX0hBVkVfQU1CQV9EVUFSVAorCXNlbGVjdCBNWFNfSEFWRV9QTEFURk9STV9BVUFSVAorCXNlbGVjdCBNWFNfSEFWRV9QTEFURk9STV9GRUMKKwlzZWxlY3QgTVhTX0hBVkVfUExBVEZPUk1fTVhTX0kyQworCXNlbGVjdCBNWFNfSEFWRV9QTEFURk9STV9NWFNfUFdNCisKK2NvbmZpZyBNQUNIX1RYMjgKKwlib29sICJLYS1SbyBUWDI4IG1vZHVsZSIKKwlzZWxlY3QgTU9EVUxFX1RYMjgKKwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teHMvTWFrZWZpbGUKaW5kZXggMzlkM2Y5Yy4uMmYxZjYxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvTWFrZWZpbGUKQEAgLTEsMTAgKzEsMTUgQEAKICMgQ29tbW9uIHN1cHBvcnQKIG9iai15IDo9IGNsb2NrLm8gZGV2aWNlcy5vIGdwaW8ubyBpY29sbC5vIGlvbXV4Lm8gc3lzdGVtLm8gdGltZXIubwogCitvYmotJChDT05GSUdfTVhTX09DT1RQKSArPSBvY290cC5vCitvYmotJChDT05GSUdfUE0pICs9IHBtLm8KKwogb2JqLSQoQ09ORklHX1NPQ19JTVgyMykgKz0gY2xvY2stbXgyMy5vIG1tLW14MjMubwogb2JqLSQoQ09ORklHX1NPQ19JTVgyOCkgKz0gY2xvY2stbXgyOC5vIG1tLW14MjgubwogCiBvYmotJChDT05GSUdfTUFDSF9NWDIzRVZLKSArPSBtYWNoLW14MjNldmsubwogb2JqLSQoQ09ORklHX01BQ0hfTVgyOEVWSykgKz0gbWFjaC1teDI4ZXZrLm8KK29iai0kKENPTkZJR19NT0RVTEVfVFgyOCkgKz0gbW9kdWxlLXR4Mjgubworb2JqLSQoQ09ORklHX01BQ0hfVFgyOCkgICAgKz0gbWFjaC10eDI4Lm8KIAogb2JqLXkgKz0gZGV2aWNlcy8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYwppbmRleCBjYTcyYTA1Li5kMTMzYzdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDIzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jCkBAIC00NDIsMTEgKzQ0MiwxOCBAQAogCV9SRUdJU1RFUl9DTE9DSygiZHVhcnQiLCAiYXBiX3BjbGsiLCB4YnVzX2NsaykKIAkvKiBmb3IgYW1iYS1wbDAxMSBkcml2ZXIgKi8KIAlfUkVHSVNURVJfQ0xPQ0soImR1YXJ0IiwgTlVMTCwgdWFydF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteHMtYXVhcnQuMCIsIE5VTEwsIHVhcnRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygicnRjIiwgTlVMTCwgcnRjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImhjbGsiLCBoYnVzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14cy1kbWEtYXBiaCIsIE5VTEwsIGhidXNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLWRtYS1hcGJ4IiwgTlVMTCwgeGJ1c19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ1c2IiLCB1c2JfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXVkaW8iLCBhdWRpb19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwd20iLCBwd21fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLXB3bS4wIiwgTlVMTCwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14cy1wd20uMSIsIE5VTEwsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteHMtcHdtLjIiLCBOVUxMLCBwd21fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLXB3bS4zIiwgTlVMTCwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14cy1wd20uNCIsIE5VTEwsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgyMy1mYiIsIE5VTEwsIGxjZGlmX2NsaykKIH07CiAKIHN0YXRpYyBpbnQgY2xrX21pc2NfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IGZkMWM0YzUuLjVlNDg5YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTYwOSwxNyArNjA5LDMwIEBACiAJX1JFR0lTVEVSX0NMT0NLKCJkdWFydCIsIE5VTEwsIHVhcnRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14MjgtZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14MjgtZmVjLjEiLCBOVUxMLCBmZWNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLWF1YXJ0LjAiLCBOVUxMLCB1YXJ0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14cy1hdWFydC4xIiwgTlVMTCwgdWFydF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteHMtYXVhcnQuMiIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLWF1YXJ0LjMiLCBOVUxMLCB1YXJ0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14cy1hdWFydC40IiwgTlVMTCwgdWFydF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJydGMiLCBOVUxMLCBydGNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygicGxsMiIsIE5VTEwsIHBsbDJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaGNsayIsIGhidXNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAieGNsayIsIHhidXNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2FuMCIsIGNhbjBfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2FuMSIsIGNhbjFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLWRtYS1hcGJoIiwgTlVMTCwgaGJ1c19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteHMtZG1hLWFwYngiLCBOVUxMLCB4YnVzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZsZXhjYW4uMCIsIE5VTEwsIGNhbjBfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZmxleGNhbi4xIiwgTlVMTCwgY2FuMV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ1c2IwIiwgdXNiMF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ1c2IxIiwgdXNiMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwd20iLCBwd21fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLXB3bS4wIiwgTlVMTCwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14cy1wd20uMSIsIE5VTEwsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteHMtcHdtLjIiLCBOVUxMLCBwd21fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLXB3bS4zIiwgTlVMTCwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14cy1wd20uNCIsIE5VTEwsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteHMtcHdtLjUiLCBOVUxMLCBwd21fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhzLXB3bS42IiwgTlVMTCwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14cy1wd20uNyIsIE5VTEwsIHB3bV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJscmFkYyIsIGxyYWRjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNwZGlmIiwgc3BkaWZfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14MjgtZmIiLCBOVUxMLCBsY2RpZl9jbGspCiB9OwogCiBzdGF0aWMgaW50IGNsa19taXNjX2luaXQodm9pZCkKQEAgLTczNyw2ICs3NTAsOCBAQAogCWNsa19lbmFibGUoJmVtaV9jbGspOwogCWNsa19lbmFibGUoJnVhcnRfY2xrKTsKIAorCWNsa19zZXRfcGFyZW50KCZsY2RpZl9jbGssICZyZWZfcGl4X2Nsayk7CisKIAljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJbXhzX3RpbWVyX2luaXQoJmNsazMya19jbGssIE1YMjhfSU5UX1RJTUVSMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzLW14MjMuaCBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyMy5oCmluZGV4IDEyNTY3ODguLmM3ZTE0ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyMy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyMy5oCkBAIC0xMCw3ICsxMCwxOCBAQAogICovCiAjaW5jbHVkZSA8bWFjaC9teDIzLmg+CiAjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvbXhzZmIuaD4KIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhbWJhX2RldmljZSBteDIzX2R1YXJ0X2RldmljZSBfX2luaXRjb25zdDsKICNkZWZpbmUgbXgyM19hZGRfZHVhcnQoKSBcCiAJbXhzX2FkZF9kdWFydCgmbXgyM19kdWFydF9kZXZpY2UpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbXhzX2F1YXJ0X2RhdGEgbXgyM19hdWFydF9kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIG14MjNfYWRkX2F1YXJ0KGlkKQlteHNfYWRkX2F1YXJ0KCZteDIzX2F1YXJ0X2RhdGFbaWRdKQorI2RlZmluZSBteDIzX2FkZF9hdWFydDAoKQkJbXgyM19hZGRfYXVhcnQoMCkKKyNkZWZpbmUgbXgyM19hZGRfYXVhcnQxKCkJCW14MjNfYWRkX2F1YXJ0KDEpCisKKyNkZWZpbmUgbXgyM19hZGRfbXhzX3B3bShpZCkJCW14c19hZGRfbXhzX3B3bShNWDIzX1BXTV9CQVNFX0FERFIsIGlkKQorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgbXgyM19hZGRfbXhzZmIoCisJCWNvbnN0IHN0cnVjdCBteHNmYl9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzLW14MjguaCBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyOC5oCmluZGV4IDMzNzczYTYuLjlkMDg1NTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyOC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyOC5oCkBAIC0xMCwxMSArMTAsMzQgQEAKICAqLwogI2luY2x1ZGUgPG1hY2gvbXgyOC5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL214c2ZiLmg+CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYW1iYV9kZXZpY2UgbXgyOF9kdWFydF9kZXZpY2UgX19pbml0Y29uc3Q7CiAjZGVmaW5lIG14MjhfYWRkX2R1YXJ0KCkgXAogCW14c19hZGRfZHVhcnQoJm14MjhfZHVhcnRfZGV2aWNlKQogCitleHRlcm4gY29uc3Qgc3RydWN0IG14c19hdWFydF9kYXRhIG14MjhfYXVhcnRfZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBteDI4X2FkZF9hdWFydChpZCkJbXhzX2FkZF9hdWFydCgmbXgyOF9hdWFydF9kYXRhW2lkXSkKKyNkZWZpbmUgbXgyOF9hZGRfYXVhcnQwKCkJCW14MjhfYWRkX2F1YXJ0KDApCisjZGVmaW5lIG14MjhfYWRkX2F1YXJ0MSgpCQlteDI4X2FkZF9hdWFydCgxKQorI2RlZmluZSBteDI4X2FkZF9hdWFydDIoKQkJbXgyOF9hZGRfYXVhcnQoMikKKyNkZWZpbmUgbXgyOF9hZGRfYXVhcnQzKCkJCW14MjhfYWRkX2F1YXJ0KDMpCisjZGVmaW5lIG14MjhfYWRkX2F1YXJ0NCgpCQlteDI4X2FkZF9hdWFydCg0KQorCiBleHRlcm4gY29uc3Qgc3RydWN0IG14c19mZWNfZGF0YSBteDI4X2ZlY19kYXRhW10gX19pbml0Y29uc3Q7CiAjZGVmaW5lIG14MjhfYWRkX2ZlYyhpZCwgcGRhdGEpIFwKIAlteHNfYWRkX2ZlYygmbXgyOF9mZWNfZGF0YVtpZF0sIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IG14c19mbGV4Y2FuX2RhdGEgbXgyOF9mbGV4Y2FuX2RhdGFbXSBfX2luaXRjb25zdDsKKyNkZWZpbmUgbXgyOF9hZGRfZmxleGNhbihpZCwgcGRhdGEpCVwKKwlteHNfYWRkX2ZsZXhjYW4oJm14MjhfZmxleGNhbl9kYXRhW2lkXSwgcGRhdGEpCisjZGVmaW5lIG14MjhfYWRkX2ZsZXhjYW4wKHBkYXRhKQlteDI4X2FkZF9mbGV4Y2FuKDAsIHBkYXRhKQorI2RlZmluZSBteDI4X2FkZF9mbGV4Y2FuMShwZGF0YSkJbXgyOF9hZGRfZmxleGNhbigxLCBwZGF0YSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBteHNfaTJjX2RhdGEgbXgyOF9teHNfaTJjX2RhdGFbXSBfX2luaXRjb25zdDsKKyNkZWZpbmUgbXgyOF9hZGRfbXhzX2kyYyhpZCkJCW14c19hZGRfbXhzX2kyYygmbXgyOF9teHNfaTJjX2RhdGFbaWRdKQorCisjZGVmaW5lIG14MjhfYWRkX214c19wd20oaWQpCQlteHNfYWRkX214c19wd20oTVgyOF9QV01fQkFTRV9BRERSLCBpZCkKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IG14MjhfYWRkX214c2ZiKAorCQljb25zdCBzdHJ1Y3QgbXhzZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy5jCmluZGV4IGMyMGQ1NDcuLmNmZGI2YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzLmMKQEAgLTY2LDYgKzY2LDggQEAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwogCWlmIChyZXQpIHsKIGVycjoKKwkJaWYgKGRtYW1hc2spCisJCQlrZnJlZShwZGV2LT5kZXYuZG1hX21hc2spOwogCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvS2NvbmZpZwppbmRleCBjZjdkYzFhLi4xNDUxYWQwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvS2NvbmZpZwpAQCAtMiw1ICsyLDIxIEBACiAJYm9vbAogCXNlbGVjdCBBUk1fQU1CQQogCitjb25maWcgTVhTX0hBVkVfUExBVEZPUk1fQVVBUlQKKwlib29sCisKIGNvbmZpZyBNWFNfSEFWRV9QTEFURk9STV9GRUMKIAlib29sCisKK2NvbmZpZyBNWFNfSEFWRV9QTEFURk9STV9GTEVYQ0FOCisJc2VsZWN0IEhBVkVfQ0FOX0ZMRVhDQU4gaWYgQ0FOCisJYm9vbAorCitjb25maWcgTVhTX0hBVkVfUExBVEZPUk1fTVhTX0kyQworCWJvb2wKKworY29uZmlnIE1YU19IQVZFX1BMQVRGT1JNX01YU19QV00KKwlib29sCisKK2NvbmZpZyBNWFNfSEFWRV9QTEFURk9STV9NWFNGQgorCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL01ha2VmaWxlCmluZGV4IGQwYTA5ZjYuLjBkOWJlYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9NYWtlZmlsZQpAQCAtMSwyICsxLDggQEAKIG9iai0kKENPTkZJR19NWFNfSEFWRV9BTUJBX0RVQVJUKSArPSBhbWJhLWR1YXJ0Lm8KK29iai0kKENPTkZJR19NWFNfSEFWRV9QTEFURk9STV9BVUFSVCkgKz0gcGxhdGZvcm0tYXVhcnQubworb2JqLXkgKz0gcGxhdGZvcm0tZG1hLm8KIG9iai0kKENPTkZJR19NWFNfSEFWRV9QTEFURk9STV9GRUMpICs9IHBsYXRmb3JtLWZlYy5vCitvYmotJChDT05GSUdfTVhTX0hBVkVfUExBVEZPUk1fRkxFWENBTikgKz0gcGxhdGZvcm0tZmxleGNhbi5vCitvYmotJChDT05GSUdfTVhTX0hBVkVfUExBVEZPUk1fTVhTX0kyQykgKz0gcGxhdGZvcm0tbXhzLWkyYy5vCitvYmotJChDT05GSUdfTVhTX0hBVkVfUExBVEZPUk1fTVhTX1BXTSkgKz0gcGxhdGZvcm0tbXhzLXB3bS5vCitvYmotJChDT05GSUdfTVhTX0hBVkVfUExBVEZPUk1fTVhTRkIpICs9IHBsYXRmb3JtLW14c2ZiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tYXVhcnQuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tYXVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTY2MDZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1hdWFydC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgKKyAqIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8bWFjaC9teDIzLmg+CisjaW5jbHVkZSA8bWFjaC9teDI4Lmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCisjZGVmaW5lIG14c19hdWFydF9kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9pZCwgaHdpZCkJCQlcCisJewkJCQkJCQkJXAorCQkuaWQgPSBfaWQsCQkJCQkJXAorCQkuaW9iYXNlID0gc29jICMjIF9BVUFSVCAjIyBod2lkICMjIF9CQVNFX0FERFIsCQlcCisJCS5pcnEgPSBzb2MgIyMgX0lOVF9BVUFSVCAjIyBod2lkLAkJCVwKKwl9CisKKyNkZWZpbmUgbXhzX2F1YXJ0X2RhdGFfZW50cnkoc29jLCBfaWQsIGh3aWQpCQkJCVwKKwlbX2lkXSA9IG14c19hdWFydF9kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9pZCwgaHdpZCkKKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjMKK2NvbnN0IHN0cnVjdCBteHNfYXVhcnRfZGF0YSBteDIzX2F1YXJ0X2RhdGFbXSBfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgbXgyM19hdWFydF9kYXRhX2VudHJ5KF9pZCwgaHdpZCkJCQkJXAorCW14c19hdWFydF9kYXRhX2VudHJ5KE1YMjMsIF9pZCwgaHdpZCkKKwlteDIzX2F1YXJ0X2RhdGFfZW50cnkoMCwgMSksCisJbXgyM19hdWFydF9kYXRhX2VudHJ5KDEsIDIpLAorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyOAorY29uc3Qgc3RydWN0IG14c19hdWFydF9kYXRhIG14MjhfYXVhcnRfZGF0YVtdIF9faW5pdGNvbnN0ID0geworI2RlZmluZSBteDI4X2F1YXJ0X2RhdGFfZW50cnkoX2lkKQkJCQkJXAorCW14c19hdWFydF9kYXRhX2VudHJ5KE1YMjgsIF9pZCwgX2lkKQorCW14MjhfYXVhcnRfZGF0YV9lbnRyeSgwKSwKKwlteDI4X2F1YXJ0X2RhdGFfZW50cnkoMSksCisJbXgyOF9hdWFydF9kYXRhX2VudHJ5KDIpLAorCW14MjhfYXVhcnRfZGF0YV9lbnRyeSgzKSwKKwlteDI4X2F1YXJ0X2RhdGFfZW50cnkoNCksCit9OworI2VuZGlmCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX2F1YXJ0KAorCQljb25zdCBzdHJ1Y3QgbXhzX2F1YXJ0X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2UsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlICsgU1pfOEsgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycSwKKwkJCS5lbmQgPSBkYXRhLT5pcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwl9OworCisJcmV0dXJuIG14c19hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soIm14cy1hdWFydCIsIGRhdGEtPmlkLAorCQkJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwgTlVMTCwgMCwKKwkJCQkJRE1BX0JJVF9NQVNLKDMyKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tZG1hLmMgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL3BsYXRmb3JtLWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NWM0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL3BsYXRmb3JtLWRtYS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPG1hY2gvbXgyMy5oPgorI2luY2x1ZGUgPG1hY2gvbXgyOC5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX2RtYShjb25zdCBjaGFyICpkZXZpZCwKKwkJCQkJCXJlc291cmNlX3NpemVfdCBiYXNlKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gYmFzZSwKKwkJCS5lbmQgPSBiYXNlICsgU1pfOEsgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0KKwl9OworCisJcmV0dXJuIG14c19hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soZGV2aWQsIC0xLAorCQkJCXJlcywgQVJSQVlfU0laRShyZXMpLCBOVUxMLCAwLAorCQkJCURNQV9CSVRfTUFTSygzMikpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBteHNfYWRkX214c19kbWEodm9pZCkKK3sKKwljaGFyICphcGJoID0gIm14cy1kbWEtYXBiaCI7CisJY2hhciAqYXBieCA9ICJteHMtZG1hLWFwYngiOworCisJaWYgKGNwdV9pc19teDIzKCkpIHsKKwkJbXhzX2FkZF9kbWEoYXBiaCwgTVgyM19BUEJIX0RNQV9CQVNFX0FERFIpOworCQlteHNfYWRkX2RtYShhcGJ4LCBNWDIzX0FQQlhfRE1BX0JBU0VfQUREUik7CisJfQorCisJaWYgKGNwdV9pc19teDI4KCkpIHsKKwkJbXhzX2FkZF9kbWEoYXBiaCwgTVgyOF9BUEJIX0RNQV9CQVNFX0FERFIpOworCQlteHNfYWRkX2RtYShhcGJ4LCBNWDI4X0FQQlhfRE1BX0JBU0VfQUREUik7CisJfQorCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG14c19hZGRfbXhzX2RtYSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL3BsYXRmb3JtLWZlYy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1mZWMuYwppbmRleCBjNDJkZmY3Li45ODU5Y2YyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1mZWMuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL3BsYXRmb3JtLWZlYy5jCkBAIC00NSw2ICs0NSw3IEBACiAJCX0sCiAJfTsKIAotCXJldHVybiBteHNfYWRkX3BsYXRmb3JtX2RldmljZSgiaW14MjgtZmVjIiwgZGF0YS0+aWQsCi0JCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKKwlyZXR1cm4gbXhzX2FkZF9wbGF0Zm9ybV9kZXZpY2VfZG1hbWFzaygiaW14MjgtZmVjIiwgZGF0YS0+aWQsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwgcGRhdGEsIHNpemVvZigqcGRhdGEpLAorCQkJRE1BX0JJVF9NQVNLKDMyKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL3BsYXRmb3JtLWZsZXhjYW4uYyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tZmxleGNhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTZiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL3BsYXRmb3JtLWZsZXhjYW4uYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFBlbmd1dHJvbml4LAorICogICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmMgS2xlaW5lLUJ1ZGRlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPG1hY2gvbXgyOC5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBteHNfZmxleGNhbl9kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9pZCwgX2h3aWQsIF9zaXplKQkJXAorCXsJCQkJCQkJCVwKKwkJLmlkID0gX2lkLAkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfQ0FOICMjIF9od2lkICMjIF9CQVNFX0FERFIsCQlcCisJCS5pb3NpemUgPSBfc2l6ZSwJCQkJCVwKKwkJLmlycSA9IHNvYyAjIyBfSU5UX0NBTiAjIyBfaHdpZCwJCQlcCisJfQorCisjZGVmaW5lIG14c19mbGV4Y2FuX2RhdGFfZW50cnkoc29jLCBfaWQsIF9od2lkLCBfc2l6ZSkJCQlcCisJW19pZF0gPSBteHNfZmxleGNhbl9kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9pZCwgX2h3aWQsIF9zaXplKQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyOAorY29uc3Qgc3RydWN0IG14c19mbGV4Y2FuX2RhdGEgbXgyOF9mbGV4Y2FuX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgbXgyOF9mbGV4Y2FuX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAorCW14c19mbGV4Y2FuX2RhdGFfZW50cnlfc2luZ2xlKE1YMjgsIF9pZCwgX2h3aWQsIFNaXzhLKQorCW14MjhfZmxleGNhbl9kYXRhX2VudHJ5KDAsIDApLAorCW14MjhfZmxleGNhbl9kYXRhX2VudHJ5KDEsIDEpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI4ICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX2ZsZXhjYW4oCisJCWNvbnN0IHN0cnVjdCBteHNfZmxleGNhbl9kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgZmxleGNhbl9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydCA9IGRhdGEtPmlvYmFzZSwKKwkJCS5lbmQgPSBkYXRhLT5pb2Jhc2UgKyBkYXRhLT5pb3NpemUgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycSwKKwkJCS5lbmQgPSBkYXRhLT5pcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwl9OworCisJcmV0dXJuIG14c19hZGRfcGxhdGZvcm1fZGV2aWNlKCJmbGV4Y2FuIiwgZGF0YS0+aWQsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tbXhzLWkyYy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1teHMtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiM2EwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tbXhzLWkyYy5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUGVuZ3V0cm9uaXgKKyAqIFdvbGZyYW0gU2FuZyA8dy5zYW5nQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxtYWNoL214MjguaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKKyNkZWZpbmUgbXhzX2kyY19kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9pZCkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlkID0gX2lkLAkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfSTJDICMjIF9pZCAjIyBfQkFTRV9BRERSLAkJXAorCQkuZXJyaXJxID0gc29jICMjIF9JTlRfSTJDICMjIF9pZCAjIyBfRVJST1IsCQlcCisJCS5kbWFpcnEgPSBzb2MgIyMgX0lOVF9JMkMgIyMgX2lkICMjIF9ETUEsCQlcCisJfQorCisjZGVmaW5lIG14c19pMmNfZGF0YV9lbnRyeShzb2MsIF9pZCkJCQkJCVwKKwlbX2lkXSA9IG14c19pMmNfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCBfaWQpCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI4Citjb25zdCBzdHJ1Y3QgbXhzX2kyY19kYXRhIG14MjhfbXhzX2kyY19kYXRhW10gX19pbml0Y29uc3QgPSB7CisJbXhzX2kyY19kYXRhX2VudHJ5KE1YMjgsIDApLAorCW14c19pMmNfZGF0YV9lbnRyeShNWDI4LCAxKSwKK307CisjZW5kaWYKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IG14c19hZGRfbXhzX2kyYyhjb25zdCBzdHJ1Y3QgbXhzX2kyY19kYXRhICpkYXRhKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gZGF0YS0+aW9iYXNlLAorCQkJLmVuZCA9IGRhdGEtPmlvYmFzZSArIFNaXzhLIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBkYXRhLT5lcnJpcnEsCisJCQkuZW5kID0gZGF0YS0+ZXJyaXJxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmRtYWlycSwKKwkJCS5lbmQgPSBkYXRhLT5kbWFpcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwl9OworCisJcmV0dXJuIG14c19hZGRfcGxhdGZvcm1fZGV2aWNlKCJteHMtaTJjIiwgZGF0YS0+aWQsIHJlcywKKwkJCQkJQVJSQVlfU0laRShyZXMpLCBOVUxMLCAwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tbXhzLXB3bS5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1teHMtcHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwZjVhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tbXhzLXB3bS5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgKKyAqIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgbXhzX2FkZF9teHNfcHdtKHJlc291cmNlX3NpemVfdCBpb2Jhc2UsIGludCBpZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzID0geworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9OworCisJcmVzLnN0YXJ0ID0gaW9iYXNlICsgMHgxMCArIDB4MjAgKiBpZDsKKwlyZXMuZW5kID0gcmVzLnN0YXJ0ICsgMHgxZjsKKworCXJldHVybiBteHNfYWRkX3BsYXRmb3JtX2RldmljZSgibXhzLXB3bSIsIGlkLCAmcmVzLCAxLCBOVUxMLCAwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tbXhzZmIuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tbXhzZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjcyYzliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1teHNmYi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUGVuZ3V0cm9uaXgsIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8bWFjaC9teDIzLmg+CisjaW5jbHVkZSA8bWFjaC9teDI4Lmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvbXhzZmIuaD4KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjMKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteDIzX2FkZF9teHNmYigKKwkJY29uc3Qgc3RydWN0IG14c2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gTVgyM19MQ0RJRl9CQVNFX0FERFIsCisJCQkuZW5kID0gTVgyM19MQ0RJRl9CQVNFX0FERFIgKyBTWl84SyAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwl9OworCisJcmV0dXJuIG14c19hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soImlteDIzLWZiIiwgLTEsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwgcGRhdGEsIHNpemVvZigqcGRhdGEpLCBETUFfQklUX01BU0soMzIpKTsKK30KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDIzICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI4CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgbXgyOF9hZGRfbXhzZmIoCisJCWNvbnN0IHN0cnVjdCBteHNmYl9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydCA9IE1YMjhfTENESUZfQkFTRV9BRERSLAorCQkJLmVuZCA9IE1YMjhfTENESUZfQkFTRV9BRERSICsgU1pfOEsgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sCisJfTsKKworCXJldHVybiBteHNfYWRkX3BsYXRmb3JtX2RldmljZV9kbWFtYXNrKCJpbXgyOC1mYiIsIC0xLAorCQkJcmVzLCBBUlJBWV9TSVpFKHJlcyksIHBkYXRhLCBzaXplb2YoKnBkYXRhKSwgRE1BX0JJVF9NQVNLKDMyKSk7Cit9CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyOCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jCmluZGV4IDYxOTkxZTQuLjU2ZmEyZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9ncGlvLmMKQEAgLTE4Miw2ICsxODIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxX2NoaXAgPSB7CisJLm5hbWUgPSAibXhzIGdwaW8iLAogCS5pcnFfYWNrID0gbXhzX2dwaW9fYWNrX2lycSwKIAkuaXJxX21hc2sgPSBteHNfZ3Bpb19tYXNrX2lycSwKIAkuaXJxX3VubWFzayA9IG14c19ncGlvX3VubWFza19pcnEsCkBAIC0yODksMzkgKzI5MCw0MiBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIERFRklORV9NWFNfR1BJT19QT1JUKHNvYywgX2lkKQkJCQkJXAorI2RlZmluZSBNWDIzX0dQSU9fQkFTRQlNWDIzX0lPX0FERFJFU1MoTVgyM19QSU5DVFJMX0JBU0VfQUREUikKKyNkZWZpbmUgTVgyOF9HUElPX0JBU0UJTVgyOF9JT19BRERSRVNTKE1YMjhfUElOQ1RSTF9CQVNFX0FERFIpCisKKyNkZWZpbmUgREVGSU5FX01YU19HUElPX1BPUlQoX2Jhc2UsIF9pcnEsIF9pZCkJCQkJXAogCXsJCQkJCQkJCVwKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0iICNfaWQsCQkJCVwKIAkJLmlkID0gX2lkLAkJCQkJCVwKLQkJLmlycSA9IHNvYyAjIyBfSU5UX0dQSU8gIyMgX2lkLAkJCQlcCi0JCS5iYXNlID0gc29jICMjIF9JT19BRERSRVNTKAkJCQlcCi0JCQkJc29jICMjIF9QSU5DVFJMICMjIF9CQVNFX0FERFIpLAkJXAorCQkuaXJxID0gX2lycSwJCQkJCQlcCisJCS5iYXNlID0gX2Jhc2UsCQkJCQkJXAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWFNfR1BJT19JUlFfU1RBUlQgKyAoX2lkKSAqIDMyLAlcCiAJfQogCi0jZGVmaW5lIERFRklORV9SRUdJU1RFUl9GVU5DVElPTihwcmVmaXgpCQkJCVwKLWludCBfX2luaXQgcHJlZml4ICMjIF9yZWdpc3Rlcl9ncGlvcyh2b2lkKQkJCQlcCi17CQkJCQkJCQkJXAotCXJldHVybiBteHNfZ3Bpb19pbml0KHByZWZpeCAjIyBfZ3Bpb19wb3J0cywJCQlcCi0JCQlBUlJBWV9TSVpFKHByZWZpeCAjIyBfZ3Bpb19wb3J0cykpOwkJXAotfQotCiAjaWZkZWYgQ09ORklHX1NPQ19JTVgyMwogc3RhdGljIHN0cnVjdCBteHNfZ3Bpb19wb3J0IG14MjNfZ3Bpb19wb3J0c1tdID0gewotCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjMsIDApLAotCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjMsIDEpLAotCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjMsIDIpLAorCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjNfR1BJT19CQVNFLCBNWDIzX0lOVF9HUElPMCwgMCksCisJREVGSU5FX01YU19HUElPX1BPUlQoTVgyM19HUElPX0JBU0UsIE1YMjNfSU5UX0dQSU8xLCAxKSwKKwlERUZJTkVfTVhTX0dQSU9fUE9SVChNWDIzX0dQSU9fQkFTRSwgTVgyM19JTlRfR1BJTzIsIDIpLAogfTsKLURFRklORV9SRUdJU1RFUl9GVU5DVElPTihteDIzKQorCitpbnQgX19pbml0IG14MjNfcmVnaXN0ZXJfZ3Bpb3Modm9pZCkKK3sKKwlyZXR1cm4gbXhzX2dwaW9faW5pdChteDIzX2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUobXgyM19ncGlvX3BvcnRzKSk7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TT0NfSU1YMjgKIHN0YXRpYyBzdHJ1Y3QgbXhzX2dwaW9fcG9ydCBteDI4X2dwaW9fcG9ydHNbXSA9IHsKLQlERUZJTkVfTVhTX0dQSU9fUE9SVChNWDI4LCAwKSwKLQlERUZJTkVfTVhTX0dQSU9fUE9SVChNWDI4LCAxKSwKLQlERUZJTkVfTVhTX0dQSU9fUE9SVChNWDI4LCAyKSwKLQlERUZJTkVfTVhTX0dQSU9fUE9SVChNWDI4LCAzKSwKLQlERUZJTkVfTVhTX0dQSU9fUE9SVChNWDI4LCA0KSwKKwlERUZJTkVfTVhTX0dQSU9fUE9SVChNWDI4X0dQSU9fQkFTRSwgTVgyOF9JTlRfR1BJTzAsIDApLAorCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjhfR1BJT19CQVNFLCBNWDI4X0lOVF9HUElPMSwgMSksCisJREVGSU5FX01YU19HUElPX1BPUlQoTVgyOF9HUElPX0JBU0UsIE1YMjhfSU5UX0dQSU8yLCAyKSwKKwlERUZJTkVfTVhTX0dQSU9fUE9SVChNWDI4X0dQSU9fQkFTRSwgTVgyOF9JTlRfR1BJTzMsIDMpLAorCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjhfR1BJT19CQVNFLCBNWDI4X0lOVF9HUElPNCwgNCksCiB9OwotREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKG14MjgpCisKK2ludCBfX2luaXQgbXgyOF9yZWdpc3Rlcl9ncGlvcyh2b2lkKQoreworCXJldHVybiBteHNfZ3Bpb19pbml0KG14MjhfZ3Bpb19wb3J0cywgQVJSQVlfU0laRShteDI4X2dwaW9fcG9ydHMpKTsKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IDU5MTMzZWIuLjYzNWJiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY29tbW9uLmgKQEAgLTEzLDYgKzEzLDcgQEAKIAogc3RydWN0IGNsazsKIAorZXh0ZXJuIGNvbnN0IHUzMiAqbXhzX2dldF9vY290cCh2b2lkKTsKIGV4dGVybiBpbnQgbXhzX3Jlc2V0X2Jsb2NrKHZvaWQgX19pb21lbSAqKTsKIGV4dGVybiB2b2lkIG14c190aW1lcl9pbml0KHN0cnVjdCBjbGsgKiwgaW50KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2RldmljZXMtY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvZGV2aWNlcy1jb21tb24uaAppbmRleCA2YzNkMWExLi43MWYyNDQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvZGV2aWNlcy1jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvZGV2aWNlcy1jb21tb24uaApAQCAtMzAsNiArMzAsMTYgQEAKIC8qIGR1YXJ0ICovCiBpbnQgX19pbml0IG14c19hZGRfZHVhcnQoY29uc3Qgc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpOwogCisvKiBhdWFydCAqLworc3RydWN0IG14c19hdWFydF9kYXRhIHsKKwlpbnQgaWQ7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgaW9zaXplOworCXJlc291cmNlX3NpemVfdCBpcnE7Cit9Oworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IG14c19hZGRfYXVhcnQoCisJCWNvbnN0IHN0cnVjdCBteHNfYXVhcnRfZGF0YSAqZGF0YSk7CisKIC8qIGZlYyAqLwogI2luY2x1ZGUgPGxpbnV4L2ZlYy5oPgogc3RydWN0IG14c19mZWNfZGF0YSB7CkBAIC00MSwzICs1MSwyOCBAQAogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IG14c19hZGRfZmVjKAogCQljb25zdCBzdHJ1Y3QgbXhzX2ZlY19kYXRhICpkYXRhLAogCQljb25zdCBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKKworLyogZmxleGNhbiAqLworI2luY2x1ZGUgPGxpbnV4L2Nhbi9wbGF0Zm9ybS9mbGV4Y2FuLmg+CitzdHJ1Y3QgbXhzX2ZsZXhjYW5fZGF0YSB7CisJaW50IGlkOworCXJlc291cmNlX3NpemVfdCBpb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGlvc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgaXJxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX2ZsZXhjYW4oCisJCWNvbnN0IHN0cnVjdCBteHNfZmxleGNhbl9kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgZmxleGNhbl9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisKKy8qIGkyYyAqLworc3RydWN0IG14c19pMmNfZGF0YSB7CisJaW50IGlkOworCXJlc291cmNlX3NpemVfdCBpb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGVycmlycTsKKwlyZXNvdXJjZV9zaXplX3QgZG1haXJxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBfX2luaXQgbXhzX2FkZF9teHNfaTJjKGNvbnN0IHN0cnVjdCBteHNfaTJjX2RhdGEgKmRhdGEpOworCisvKiBwd20gKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX214c19wd20oCisJCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIGludCBpZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0YWVlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19NQUNIX01YU19ETUFfSF9fCisjZGVmaW5lIF9fTUFDSF9NWFNfRE1BX0hfXworCitzdHJ1Y3QgbXhzX2RtYV9kYXRhIHsKKwlpbnQgY2hhbl9pcnE7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBteHNfZG1hX2lzX2FwYmgoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXJldHVybiAhc3RyY21wKGRldl9uYW1lKGNoYW4tPmRldmljZS0+ZGV2KSwgIm14cy1kbWEtYXBiaCIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBteHNfZG1hX2lzX2FwYngoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXJldHVybiAhc3RyY21wKGRldl9uYW1lKGNoYW4tPmRldmljZS0+ZGV2KSwgIm14cy1kbWEtYXBieCIpOworfQorCisjZW5kaWYgLyogX19NQUNIX01YU19ETUFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyMy5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjMuaAppbmRleCA5NGU1ZGQ4Li5iMDE5MGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyMy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9pb211eC1teDIzLmgKQEAgLTI1NCwxMDIgKzI1NCwxMDIgQEAKICNkZWZpbmUgTVgyM19QQURfUk9UQVJZQl9fR1BNSV9DRTNOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA4LCBQQURfTVVYU0VMXzIpCiAKIC8qIE1VWFNFTF9HUElPICovCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAwX19HUE9fMF8wCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAwLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAxX19HUE9fMF8xCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAxLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAyX19HUE9fMF8yCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAyLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAzX19HUE9fMF8zCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAzLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA0X19HUE9fMF80CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA0LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA1X19HUE9fMF81CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA1LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA2X19HUE9fMF82CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA2LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA3X19HUE9fMF83CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA3LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA4X19HUE9fMF84CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA4LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA5X19HUE9fMF85CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA5LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDEwX19HUE9fMF8xMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxMCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxMV9fR1BPXzBfMTEJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTEsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTJfX0dQT18wXzEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDEyLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDEzX19HUE9fMF8xMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxMywgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxNF9fR1BPXzBfMTQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTQsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTVfX0dQT18wXzE1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE1LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0xFX19HUE9fMF8xNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNiwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9HUE1JX0FMRV9fR1BPXzBfMTcJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTcsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfR1BNSV9DRTJOX19HUE9fMF8xOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9HUE1JX1JEWTBfX0dQT18wXzE5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE5LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfUkRZMV9fR1BPXzBfMjAJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjAsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfR1BNSV9SRFkyX19HUE9fMF8yMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMSwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9HUE1JX1JEWTNfX0dQT18wXzIyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIyLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfV1BOX19HUE9fMF8yMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMywgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9HUE1JX1dSTl9fR1BPXzBfMjQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjQsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfR1BNSV9SRE5fX0dQT18wXzI1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI1LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9DVFNfX0dQT18wXzI2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI2LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9SVFNfX0dQT18wXzI3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI3LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9SWF9fR1BPXzBfMjgJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjgsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfQVVBUlQxX1RYX19HUE9fMF8yOQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyOSwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9JMkNfU0NMX19HUE9fMF8zMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAzMCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9JMkNfU0RBX19HUE9fMF8zMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAzMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QwMF9fR1BJT18wXzAJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDFfX0dQSU9fMF8xCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAyX19HUElPXzBfMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QwM19fR1BJT18wXzMJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDRfX0dQSU9fMF80CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA1X19HUElPXzBfNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QwNl9fR1BJT18wXzYJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDdfX0dQSU9fMF83CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA4X19HUElPXzBfOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QwOV9fR1BJT18wXzkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTBfX0dQSU9fMF8xMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxMV9fR1BJT18wXzExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDExLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDEyX19HUElPXzBfMTIJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTNfX0dQSU9fMF8xMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxNF9fR1BJT18wXzE0CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDE1X19HUElPXzBfMTUJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9DTEVfX0dQSU9fMF8xNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0FMRV9fR1BJT18wXzE3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0UyTl9fR1BJT18wXzE4CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfUkRZMF9fR1BJT18wXzE5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfUkRZMV9fR1BJT18wXzIwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfUkRZMl9fR1BJT18wXzIxCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfUkRZM19fR1BJT18wXzIyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfV1BOX19HUElPXzBfMjMJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9XUk5fX0dQSU9fMF8yNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX1JETl9fR1BJT18wXzI1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9DVFNfX0dQSU9fMF8yNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9BVUFSVDFfUlRTX19HUElPXzBfMjcJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfQVVBUlQxX1JYX19HUElPXzBfMjgJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfQVVBUlQxX1RYX19HUElPXzBfMjkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfSTJDX1NDTF9fR1BJT18wXzMwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDMwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0kyQ19TREFfX0dQSU9fMF8zMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAzMSwgUEFEX01VWFNFTF9HUElPKQogCi0jZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDBfX0dQT18xXzAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDAsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QwMV9fR1BPXzFfMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMSwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDAyX19HUE9fMV8yCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAyLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDNfX0dQT18xXzMJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDMsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QwNF9fR1BPXzFfNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA1X19HUE9fMV81CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA1LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDZfX0dQT18xXzYJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDYsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QwN19fR1BPXzFfNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNywgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA4X19HUE9fMV84CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDlfX0dQT18xXzkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDksIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QxMF9fR1BPXzFfMTAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTAsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QxMV9fR1BPXzFfMTEJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTEsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QxMl9fR1BPXzFfMTIJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTIsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QxM19fR1BPXzFfMTMJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTMsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QxNF9fR1BPXzFfMTQJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTQsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QxNV9fR1BPXzFfMTUJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTUsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QxNl9fR1BPXzFfMTYJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTYsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0QxN19fR1BPXzFfMTcJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTcsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX1JFU0VUX19HUE9fMV8xOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9MQ0RfUlNfX0dQT18xXzE5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE5LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0xDRF9XUl9fR1BPXzFfMjAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjAsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX0NTX19HUE9fMV8yMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMSwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9MQ0RfRE9UQ0tfX0dQT18xXzIyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIyLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0xDRF9FTkFCTEVfX0dQT18xXzIzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIzLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0xDRF9IU1lOQ19fR1BPXzFfMjQJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjQsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfTENEX1ZTWU5DX19HUE9fMV8yNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNSwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9QV00wX19HUE9fMV8yNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjYsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfUFdNMV9fR1BPXzFfMjcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI3LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX1BXTTJfX0dQT18xXzI4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9QV00zX19HUE9fMV8yOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjksIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfUFdNNF9fR1BPXzFfMzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDMwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDBfX0dQSU9fMV8wCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDFfX0dQSU9fMV8xCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDJfX0dQSU9fMV8yCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDNfX0dQSU9fMV8zCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDRfX0dQSU9fMV80CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDVfX0dQSU9fMV81CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDZfX0dQSU9fMV82CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDdfX0dQSU9fMV83CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDhfX0dQSU9fMV84CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDlfX0dQSU9fMV85CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTBfX0dQSU9fMV8xMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDExX19HUElPXzFfMTEJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxMl9fR1BJT18xXzEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTNfX0dQSU9fMV8xMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDE0X19HUElPXzFfMTQJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxNV9fR1BJT18xXzE1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTZfX0dQSU9fMV8xNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDE3X19HUElPXzFfMTcJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX1JFU0VUX19HUElPXzFfMTgJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX1JTX19HUElPXzFfMTkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX1dSX19HUElPXzFfMjAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0NTX19HUElPXzFfMjEJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0RPVENLX19HUElPXzFfMjIJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0VOQUJMRV9fR1BJT18xXzIzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9IU1lOQ19fR1BJT18xXzI0CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9WU1lOQ19fR1BJT18xXzI1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX1BXTTBfX0dQSU9fMV8yNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9QV00xX19HUElPXzFfMjcJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfUFdNMl9fR1BJT18xXzI4CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX1BXTTNfX0dQSU9fMV8yOQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9QV000X19HUElPXzFfMzAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzAsIFBBRF9NVVhTRUxfR1BJTykKIAotI2RlZmluZSBNWDIzX1BBRF9TU1AxX0NNRF9fR1BPXzJfMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RFVEVDVF9fR1BPXzJfMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMSwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEEwX19HUE9fMl8yCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAyLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX1NTUDFfREFUQTFfX0dQT18yXzMJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDMsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfU1NQMV9EQVRBMl9fR1BPXzJfNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEEzX19HUE9fMl81CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA1LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX1NTUDFfU0NLX19HUE9fMl82CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA2LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX1JPVEFSWUFfX0dQT18yXzcJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDcsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfUk9UQVJZQl9fR1BPXzJfOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgOCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9FTUlfQTAwX19HUE9fMl85CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA5LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDFfX0dQT18yXzEwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEwLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDJfX0dQT18yXzExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDExLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDNfX0dQT18yXzEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEyLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDRfX0dQT18yXzEzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEzLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDVfX0dQT18yXzE0CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE0LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDZfX0dQT18yXzE1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE1LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDdfX0dQT18yXzE2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE2LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDhfX0dQT18yXzE3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE3LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDlfX0dQT18yXzE4CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE4LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMTBfX0dQT18yXzE5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE5LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMTFfX0dQT18yXzIwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIwLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9BMTJfX0dQT18yXzIxCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIxLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9CQTBfX0dQT18yXzIyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIyLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9CQTFfX0dQT18yXzIzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIzLCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0VNSV9DQVNOX19HUE9fMl8yNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9FTUlfQ0UwTl9fR1BPXzJfMjUJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjUsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfRU1JX0NFMU5fX0dQT18yXzI2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI2LCBQQURfTVVYU0VMX0dQSU8pCi0jZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0UxTl9fR1BPXzJfMjcJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjcsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfR1BNSV9DRTBOX19HUE9fMl8yOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyOCwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9FTUlfQ0tFX19HUE9fMl8yOQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyOSwgUEFEX01VWFNFTF9HUElPKQotI2RlZmluZSBNWDIzX1BBRF9FTUlfUkFTTl9fR1BPXzJfMzAJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMzAsIFBBRF9NVVhTRUxfR1BJTykKLSNkZWZpbmUgTVgyM19QQURfRU1JX1dFTl9fR1BPXzJfMzEJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMzEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9DTURfX0dQSU9fMl8wCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX1NTUDFfREVURUNUX19HUElPXzJfMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEEwX19HUElPXzJfMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEExX19HUElPXzJfMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEEyX19HUElPXzJfNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEEzX19HUElPXzJfNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX1NDS19fR1BJT18yXzYJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfUk9UQVJZQV9fR1BJT18yXzcJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfUk9UQVJZQl9fR1BJT18yXzgJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0EwMF9fR1BJT18yXzkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0EwMV9fR1BJT18yXzEwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDJfX0dQSU9fMl8xMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTAzX19HUElPXzJfMTIJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0EwNF9fR1BJT18yXzEzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDVfX0dQSU9fMl8xNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA2X19HUElPXzJfMTUJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0EwN19fR1BJT18yXzE2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDhfX0dQSU9fMl8xNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA5X19HUElPXzJfMTgJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0ExMF9fR1BJT18yXzE5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMTFfX0dQSU9fMl8yMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTEyX19HUElPXzJfMjEJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0JBMF9fR1BJT18yXzIyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9CQTFfX0dQSU9fMl8yMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQ0FTTl9fR1BJT18yXzI0CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9DRTBOX19HUElPXzJfMjUJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0NFMU5fX0dQSU9fMl8yNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0NFMU5fX0dQSU9fMl8yNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0NFME5fX0dQSU9fMl8yOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQ0tFX19HUElPXzJfMjkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX1JBU05fX0dQSU9fMl8zMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAzMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfV0VOX19HUElPXzJfMzEJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMzEsIFBBRF9NVVhTRUxfR1BJTykKIAogI2VuZGlmIC8qIF9fTUFDSF9JT01VWF9NWDIzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lvbXV4LmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW9tdXguaAppbmRleCBmZTU1OGUzLi43YWJkZjU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW9tdXguaAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW9tdXguaApAQCAtOTEsNiArOTEsOSBAQAogI2RlZmluZSBNWFNfUEFEX1BVTExVUAkoKFBBRF9QVUxMVVAgPDwgTVhTX1BBRF9QVUxMX1NISUZUKSB8IFwKIAkJCQkJTVhTX1BBRF9QVUxMX1ZBTElEX01BU0spCiAKKy8qIGdlbmVyaWMgcGFkIGNvbnRyb2wgdXNlZCBpbiBtb3N0IGNhc2VzICovCisjZGVmaW5lIE1YU19QQURfQ1RSTAkoTVhTX1BBRF80TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfTk9QVUxMKQorCiAjZGVmaW5lIE1YU19JT01VWF9QQUQoX2JhbmssIF9waW4sIF9tdXhzZWwsIF9tYSwgX3ZvbCwgX3B1bGwpCQlcCiAJCSgoKGlvbXV4X2NmZ190KShfYmFuaykgPDwgTVhTX1BBRF9CQU5LX1NISUZUKSB8CQlcCiAJCSgoaW9tdXhfY2ZnX3QpKF9waW4pIDw8IE1YU19QQURfUElOX1NISUZUKSB8CQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbW1jLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExNTQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9tbWMuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19NQUNIX01YU19NTUNfSF9fCisjZGVmaW5lIF9fTUFDSF9NWFNfTU1DX0hfXworCitzdHJ1Y3QgbXhzX21tY19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgd3BfZ3BpbzsJLyogd3JpdGUgcHJvdGVjdCBwaW4gKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisjZGVmaW5lIFNMT1RGXzRfQklUX0NBUEFCTEUJKDEgPDwgMCkKKyNkZWZpbmUgU0xPVEZfOF9CSVRfQ0FQQUJMRQkoMSA8PCAxKQorfTsKKyNlbmRpZiAvKiBfX01BQ0hfTVhTX01NQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teDIzLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbXgyMy5oCmluZGV4IDllZGQwMmUuLmMwYTE4YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teDIzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL214MjMuaApAQCAtOTMsNyArOTMsNyBAQAogI2RlZmluZSBNWDIzX0lOVF9VU0JfV0FLRVVQCQkxMgogI2RlZmluZSBNWDIzX0lOVF9HUE1JX0RNQQkJMTMKICNkZWZpbmUgTVgyM19JTlRfU1NQMV9ETUEJCTE0Ci0jZGVmaW5lIE1YMjNfSU5UX1NTUF9FUlJPUgkJMTUKKyNkZWZpbmUgTVgyM19JTlRfU1NQMV9FUlJPUgkJMTUKICNkZWZpbmUgTVgyM19JTlRfR1BJTzAJCQkxNgogI2RlZmluZSBNWDIzX0lOVF9HUElPMQkJCTE3CiAjZGVmaW5lIE1YMjNfSU5UX0dQSU8yCQkJMTgKQEAgLTEwMSw5ICsxMDEsOSBAQAogI2RlZmluZSBNWDIzX0lOVF9TU1AyX0RNQQkJMjAKICNkZWZpbmUgTVgyM19JTlRfRUNDOF9JUlEJCTIxCiAjZGVmaW5lIE1YMjNfSU5UX1JUQ19BTEFSTQkJMjIKLSNkZWZpbmUgTVgyM19JTlRfVUFSVEFQUF9UWF9ETUEJCTIzCi0jZGVmaW5lIE1YMjNfSU5UX1VBUlRBUFBfSU5URVJOQUwJMjQKLSNkZWZpbmUgTVgyM19JTlRfVUFSVEFQUF9SWF9ETUEJCTI1CisjZGVmaW5lIE1YMjNfSU5UX0FVQVJUMV9UWF9ETUEJCTIzCisjZGVmaW5lIE1YMjNfSU5UX0FVQVJUMQkJCTI0CisjZGVmaW5lIE1YMjNfSU5UX0FVQVJUMV9SWF9ETUEJCTI1CiAjZGVmaW5lIE1YMjNfSU5UX0kyQ19ETUEJCTI2CiAjZGVmaW5lIE1YMjNfSU5UX0kyQ19FUlJPUgkJMjcKICNkZWZpbmUgTVgyM19JTlRfVElNRVIwCQkJMjgKQEAgLTEzNSwxMSArMTM1LDM1IEBACiAjZGVmaW5lIE1YMjNfSU5UX0RDUAkJCTU0CiAjZGVmaW5lIE1YMjNfSU5UX0JDSAkJCTU2CiAjZGVmaW5lIE1YMjNfSU5UX1BYUAkJCTU3Ci0jZGVmaW5lIE1YMjNfSU5UX1VBUlRBUFAyX1RYX0RNQQk1OAotI2RlZmluZSBNWDIzX0lOVF9VQVJUQVBQMl9JTlRFUk5BTAk1OQotI2RlZmluZSBNWDIzX0lOVF9VQVJUQVBQMl9SWF9ETUEJNjAKKyNkZWZpbmUgTVgyM19JTlRfQVVBUlQyX1RYX0RNQQkJNTgKKyNkZWZpbmUgTVgyM19JTlRfQVVBUlQyCQkJNTkKKyNkZWZpbmUgTVgyM19JTlRfQVVBUlQyX1JYX0RNQQkJNjAKICNkZWZpbmUgTVgyM19JTlRfVkRBQ19ERVRFQ1QJCTYxCiAjZGVmaW5lIE1YMjNfSU5UX1ZERDVWX0RST09QCQk2NAogI2RlZmluZSBNWDIzX0lOVF9EQ0RDNFAyX0JPCQk2NQogCisvKgorICogQVBCSCBETUEKKyAqLworI2RlZmluZSBNWDIzX0RNQV9TU1AxCQkJMQorI2RlZmluZSBNWDIzX0RNQV9TU1AyCQkJMgorI2RlZmluZSBNWDIzX0RNQV9HUE1JMAkJCTQKKyNkZWZpbmUgTVgyM19ETUFfR1BNSTEJCQk1CisjZGVmaW5lIE1YMjNfRE1BX0dQTUkyCQkJNgorI2RlZmluZSBNWDIzX0RNQV9HUE1JMwkJCTcKKworLyoKKyAqIEFQQlggRE1BCisgKi8KKyNkZWZpbmUgTVgyM19ETUFfQURDCQkJMAorI2RlZmluZSBNWDIzX0RNQV9EQUMJCQkxCisjZGVmaW5lIE1YMjNfRE1BX1NQRElGCQkJMgorI2RlZmluZSBNWDIzX0RNQV9JMkMJCQkzCisjZGVmaW5lIE1YMjNfRE1BX1NBSUYwCQkJNAorI2RlZmluZSBNWDIzX0RNQV9VQVJUMF9SWAkJNgorI2RlZmluZSBNWDIzX0RNQV9VQVJUMF9UWAkJNworI2RlZmluZSBNWDIzX0RNQV9VQVJUMV9SWAkJOAorI2RlZmluZSBNWDIzX0RNQV9VQVJUMV9UWAkJOQorI2RlZmluZSBNWDIzX0RNQV9TQUlGMQkJCTEwCisKICNlbmRpZiAvKiBfX01BQ0hfTVgyM19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teDI4LmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbXgyOC5oCmluZGV4IDA3MTY3NDUuLjc1ZDg2MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teDI4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL214MjguaApAQCAtMTYzLDEwICsxNjMsMTAgQEAKICNkZWZpbmUgTVgyOF9JTlRfVVNCMAkJCTkzCiAjZGVmaW5lIE1YMjhfSU5UX1VTQjFfV0FLRVVQCQk5NAogI2RlZmluZSBNWDI4X0lOVF9VU0IwX1dBS0VVUAkJOTUKLSNkZWZpbmUgTVgyOF9JTlRfU1NQMAkJCTk2Ci0jZGVmaW5lIE1YMjhfSU5UX1NTUDEJCQk5NwotI2RlZmluZSBNWDI4X0lOVF9TU1AyCQkJOTgKLSNkZWZpbmUgTVgyOF9JTlRfU1NQMwkJCTk5CisjZGVmaW5lIE1YMjhfSU5UX1NTUDBfRVJST1IJCTk2CisjZGVmaW5lIE1YMjhfSU5UX1NTUDFfRVJST1IJCTk3CisjZGVmaW5lIE1YMjhfSU5UX1NTUDJfRVJST1IJCTk4CisjZGVmaW5lIE1YMjhfSU5UX1NTUDNfRVJST1IJCTk5CiAjZGVmaW5lIE1YMjhfSU5UX0VORVRfU1dJCQkxMDAKICNkZWZpbmUgTVgyOF9JTlRfRU5FVF9NQUMwCQkxMDEKICNkZWZpbmUgTVgyOF9JTlRfRU5FVF9NQUMxCQkxMDIKQEAgLTE4NSw0ICsxODUsNDEgQEAKICNkZWZpbmUgTVgyOF9JTlRfR1BJTzEJCQkxMjYKICNkZWZpbmUgTVgyOF9JTlRfR1BJTzAJCQkxMjcKIAorLyoKKyAqIEFQQkggRE1BCisgKi8KKyNkZWZpbmUgTVgyOF9ETUFfU1NQMAkJCTAKKyNkZWZpbmUgTVgyOF9ETUFfU1NQMQkJCTEKKyNkZWZpbmUgTVgyOF9ETUFfU1NQMgkJCTIKKyNkZWZpbmUgTVgyOF9ETUFfU1NQMwkJCTMKKyNkZWZpbmUgTVgyOF9ETUFfR1BNSTAJCQk0CisjZGVmaW5lIE1YMjhfRE1BX0dQTUkxCQkJNQorI2RlZmluZSBNWDI4X0RNQV9HUE1JMgkJCTYKKyNkZWZpbmUgTVgyOF9ETUFfR1BNSTMJCQk3CisjZGVmaW5lIE1YMjhfRE1BX0dQTUk0CQkJOAorI2RlZmluZSBNWDI4X0RNQV9HUE1JNQkJCTkKKyNkZWZpbmUgTVgyOF9ETUFfR1BNSTYJCQkxMAorI2RlZmluZSBNWDI4X0RNQV9HUE1JNwkJCTExCisjZGVmaW5lIE1YMjhfRE1BX0hTQURDCQkJMTIKKyNkZWZpbmUgTVgyOF9ETUFfTENESUYJCQkxMworCisvKgorICogQVBCWCBETUEKKyAqLworI2RlZmluZSBNWDI4X0RNQV9BVUFSVDRfUlgJCTAKKyNkZWZpbmUgTVgyOF9ETUFfQVVBUlQ0X1RYCQkxCisjZGVmaW5lIE1YMjhfRE1BX1NQRElGX1RYCQkyCisjZGVmaW5lIE1YMjhfRE1BX1NBSUYwCQkJNAorI2RlZmluZSBNWDI4X0RNQV9TQUlGMQkJCTUKKyNkZWZpbmUgTVgyOF9ETUFfSTJDMAkJCTYKKyNkZWZpbmUgTVgyOF9ETUFfSTJDMQkJCTcKKyNkZWZpbmUgTVgyOF9ETUFfQVVBUlQwX1JYCQk4CisjZGVmaW5lIE1YMjhfRE1BX0FVQVJUMF9UWAkJOQorI2RlZmluZSBNWDI4X0RNQV9BVUFSVDFfUlgJCTEwCisjZGVmaW5lIE1YMjhfRE1BX0FVQVJUMV9UWAkJMTEKKyNkZWZpbmUgTVgyOF9ETUFfQVVBUlQyX1JYCQkxMgorI2RlZmluZSBNWDI4X0RNQV9BVUFSVDJfVFgJCTEzCisjZGVmaW5lIE1YMjhfRE1BX0FVQVJUM19SWAkJMTQKKyNkZWZpbmUgTVgyOF9ETUFfQVVBUlQzX1RYCQkxNQorCiAjZW5kaWYgLyogX19NQUNIX01YMjhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbXhzLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbXhzLmgKaW5kZXggZjE4NmMwOC4uMzVhODlkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL214cy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teHMuaApAQCAtMjgsOCArMjgsMTMgQEAKIC8qCiAgKiBNWFMgQ1BVIHR5cGVzCiAgKi8KLSNkZWZpbmUgY3B1X2lzX214MjMoKQkJKG1hY2hpbmVfaXNfbXgyM2V2aygpKQotI2RlZmluZSBjcHVfaXNfbXgyOCgpCQkobWFjaGluZV9pc19teDI4ZXZrKCkpCisjZGVmaW5lIGNwdV9pc19teDIzKCkJCSgJCQkJCVwKKwkJbWFjaGluZV9pc19teDIzZXZrKCkgfHwJCQkJCVwKKwkJMCkKKyNkZWZpbmUgY3B1X2lzX214MjgoKQkJKAkJCQkJXAorCQltYWNoaW5lX2lzX214MjhldmsoKSB8fAkJCQkJXAorCQltYWNoaW5lX2lzX3R4MjgoKSB8fAkJCQkJXAorCQkwKQogCiAvKgogICogSU8gYWRkcmVzc2VzIGNvbW1vbiB0byBNWFMtYmFzZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teHNmYi5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL214c2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkNzk3OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teHNmYi5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9GQl9ICisjZGVmaW5lIF9fTUFDSF9GQl9ICisKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjZGVmaW5lIFNUTUxDRElGXzhCSVQgMQkvKiogcGl4ZWwgZGF0YSBidXMgdG8gdGhlIGRpc3BsYXkgaXMgb2YgOCBiaXQgd2lkdGggKi8KKyNkZWZpbmUgU1RNTENESUZfMTZCSVQgMCAvKiogcGl4ZWwgZGF0YSBidXMgdG8gdGhlIGRpc3BsYXkgaXMgb2YgMTYgYml0IHdpZHRoICovCisjZGVmaW5lIFNUTUxDRElGXzE4QklUIDIgLyoqIHBpeGVsIGRhdGEgYnVzIHRvIHRoZSBkaXNwbGF5IGlzIG9mIDE4IGJpdCB3aWR0aCAqLworI2RlZmluZSBTVE1MQ0RJRl8yNEJJVCAzIC8qKiBwaXhlbCBkYXRhIGJ1cyB0byB0aGUgZGlzcGxheSBpcyBvZiAyNCBiaXQgd2lkdGggKi8KKworI2RlZmluZSBGQl9TWU5DX0RBVEFfRU5BQkxFX0hJR0hfQUNUCSgxIDw8IDYpCisjZGVmaW5lIEZCX1NZTkNfRE9UQ0xLX0ZBSUxJTkdfQUNUCSgxIDw8IDcpIC8qIGZhaWxpbmcvbmVndGl2ZSBlZGdlIHNhbXBsaW5nICovCisKK3N0cnVjdCBteHNmYl9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlX2xpc3Q7CisJdW5zaWduZWQgbW9kZV9jb3VudDsKKworCXVuc2lnbmVkIGRlZmF1bHRfYnBwOworCisJdW5zaWduZWQgZG90Y2xrX2RlbGF5OwkvKiByZWZlciBtYW51YWwgSFdfTENESUZfVkRDVFJMNCByZWdpc3RlciAqLworCXVuc2lnbmVkIGxkX2ludGZfd2lkdGg7CS8qIHJlZmVyIFNUTUxDRElGXyogbWFjcm9zICovCisKKwl1bnNpZ25lZCBmYl9zaXplOwkvKiBTaXplIG9mIHRoZSB2aWRlbyBtZW1vcnkuIElmIHplcm8gYQorCQkJCSAqIGRlZmF1bHQgd2lsbCBiZSB1c2VkCisJCQkJICovCisJdW5zaWduZWQgbG9uZyBmYl9waHlzOwkvKiBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGUgdmlkZW8gbWVtb3J5LiBJZgorCQkJCSAqIHplcm8gdGhlIGZyYW1lYnVmZmVyIG1lbW9yeSB3aWxsIGJlIGR5bmFtaWNhbGx5CisJCQkJICogYWxsb2NhdGVkLiBJZiBzcGVjaWZpZWQsZmJfc2l6ZSBtdXN0IGFsc28gYmUgc3BlY2lmaWVkLgorCQkJCSAqIGZiX3BoeXMgbXVzdCBiZSB1bnVzZWQgYnkgTGludXguCisJCQkJICovCit9OworCisjZW5kaWYgLyogX19NQUNIX0ZCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IGEwMDVlNzZmLi5mMTJhMTczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTYzLDYgKzYzLDcgQEAKIAkJbXhzX2R1YXJ0X2Jhc2UgPSBNWDIzX0RVQVJUX0JBU0VfQUREUjsKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTVgyOEVWSzoKKwljYXNlIE1BQ0hfVFlQRV9UWDI4OgogCQlteHNfZHVhcnRfYmFzZSA9IE1YMjhfRFVBUlRfQkFTRV9BRERSOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teDIzZXZrLmMgYi9hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14MjNldmsuYwppbmRleCBhYTA2NDAwLi5hNjY5OTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14MjNldmsuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14MjNldmsuYwpAQCAtMjYsMTcgKzI2LDEwMyBAQAogCiAjaW5jbHVkZSAiZGV2aWNlcy1teDIzLmgiCiAKKyNkZWZpbmUgTVgyM0VWS19MQ0RfRU5BQkxFCU1YU19HUElPX05SKDEsIDE4KQorI2RlZmluZSBNWDIzRVZLX0JMX0VOQUJMRQlNWFNfR1BJT19OUigxLCAyOCkKKwogc3RhdGljIGNvbnN0IGlvbXV4X2NmZ190IG14MjNldmtfcGFkc1tdIF9faW5pdGNvbnN0ID0gewogCS8qIGR1YXJ0ICovCi0JTVgyM19QQURfUFdNMF9fRFVBUlRfUlggfCBNWFNfUEFEXzRNQSwKLQlNWDIzX1BBRF9QV00xX19EVUFSVF9UWCB8IE1YU19QQURfNE1BLAorCU1YMjNfUEFEX1BXTTBfX0RVQVJUX1JYIHwgTVhTX1BBRF9DVFJMLAorCU1YMjNfUEFEX1BXTTFfX0RVQVJUX1RYIHwgTVhTX1BBRF9DVFJMLAorCisJLyogYXVhcnQgKi8KKwlNWDIzX1BBRF9BVUFSVDFfUlhfX0FVQVJUMV9SWCB8IE1YU19QQURfQ1RSTCwKKwlNWDIzX1BBRF9BVUFSVDFfVFhfX0FVQVJUMV9UWCB8IE1YU19QQURfQ1RSTCwKKwlNWDIzX1BBRF9BVUFSVDFfQ1RTX19BVUFSVDFfQ1RTIHwgTVhTX1BBRF9DVFJMLAorCU1YMjNfUEFEX0FVQVJUMV9SVFNfX0FVQVJUMV9SVFMgfCBNWFNfUEFEX0NUUkwsCisKKwkvKiBteHNmYiAobGNkaWYpICovCisJTVgyM19QQURfTENEX0QwMF9fTENEX0QwMCB8IE1YU19QQURfQ1RSTCwKKwlNWDIzX1BBRF9MQ0RfRDAxX19MQ0RfRDAxIHwgTVhTX1BBRF9DVFJMLAorCU1YMjNfUEFEX0xDRF9EMDJfX0xDRF9EMDIgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX0QwM19fTENEX0QwMyB8IE1YU19QQURfQ1RSTCwKKwlNWDIzX1BBRF9MQ0RfRDA0X19MQ0RfRDA0IHwgTVhTX1BBRF9DVFJMLAorCU1YMjNfUEFEX0xDRF9EMDVfX0xDRF9EMDUgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX0QwNl9fTENEX0QwNiB8IE1YU19QQURfQ1RSTCwKKwlNWDIzX1BBRF9MQ0RfRDA3X19MQ0RfRDA3IHwgTVhTX1BBRF9DVFJMLAorCU1YMjNfUEFEX0xDRF9EMDhfX0xDRF9EMDggfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX0QwOV9fTENEX0QwOSB8IE1YU19QQURfQ1RSTCwKKwlNWDIzX1BBRF9MQ0RfRDEwX19MQ0RfRDEwIHwgTVhTX1BBRF9DVFJMLAorCU1YMjNfUEFEX0xDRF9EMTFfX0xDRF9EMTEgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX0QxMl9fTENEX0QxMiB8IE1YU19QQURfQ1RSTCwKKwlNWDIzX1BBRF9MQ0RfRDEzX19MQ0RfRDEzIHwgTVhTX1BBRF9DVFJMLAorCU1YMjNfUEFEX0xDRF9EMTRfX0xDRF9EMTQgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX0QxNV9fTENEX0QxNSB8IE1YU19QQURfQ1RSTCwKKwlNWDIzX1BBRF9MQ0RfRDE2X19MQ0RfRDE2IHwgTVhTX1BBRF9DVFJMLAorCU1YMjNfUEFEX0xDRF9EMTdfX0xDRF9EMTcgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfR1BNSV9EMDhfX0xDRF9EMTggfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfR1BNSV9EMDlfX0xDRF9EMTkgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfR1BNSV9EMTBfX0xDRF9EMjAgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfR1BNSV9EMTFfX0xDRF9EMjEgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfR1BNSV9EMTJfX0xDRF9EMjIgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfR1BNSV9EMTNfX0xDRF9EMjMgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX1ZTWU5DX19MQ0RfVlNZTkMgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX0hTWU5DX19MQ0RfSFNZTkMgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX0RPVENLX19MQ0RfRE9UQ0sgfCBNWFNfUEFEX0NUUkwsCisJTVgyM19QQURfTENEX0VOQUJMRV9fTENEX0VOQUJMRSB8IE1YU19QQURfQ1RSTCwKKwkvKiBMQ0QgcGFuZWwgZW5hYmxlICovCisJTVgyM19QQURfTENEX1JFU0VUX19HUElPXzFfMTggfCBNWFNfUEFEX0NUUkwsCisJLyogYmFja2xpZ2h0IGNvbnRyb2wgKi8KKwlNWDIzX1BBRF9QV00yX19HUElPXzFfMjggfCBNWFNfUEFEX0NUUkwsCit9OworCisvKiBteHNmYiAobGNkaWYpICovCitzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBteDIzZXZrX3ZpZGVvX21vZGVzW10gPSB7CisJeworCQkubmFtZQkJPSAiU2Ftc3VuZy1MTVM0MzBIRjAyIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gNDgwLAorCQkueXJlcwkJPSAyNzIsCisJCS5waXhjbG9jawk9IDEwODA5NiwgLyogcGljb3NlY29uZCAoOS4yIE1IeikgKi8KKwkJLmxlZnRfbWFyZ2luCT0gMTUsCisJCS5yaWdodF9tYXJnaW4JPSA4LAorCQkudXBwZXJfbWFyZ2luCT0gMTIsCisJCS5sb3dlcl9tYXJnaW4JPSA0LAorCQkuaHN5bmNfbGVuCT0gMSwKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS5zeW5jCQk9IEZCX1NZTkNfREFUQV9FTkFCTEVfSElHSF9BQ1QgfAorCQkJCSAgRkJfU1lOQ19ET1RDTEtfRkFJTElOR19BQ1QsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhzZmJfcGxhdGZvcm1fZGF0YSBteDIzZXZrX214c2ZiX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5tb2RlX2xpc3QJPSBteDIzZXZrX3ZpZGVvX21vZGVzLAorCS5tb2RlX2NvdW50CT0gQVJSQVlfU0laRShteDIzZXZrX3ZpZGVvX21vZGVzKSwKKwkuZGVmYXVsdF9icHAJPSAzMiwKKwkubGRfaW50Zl93aWR0aAk9IFNUTUxDRElGXzI0QklULAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG14MjNldmtfaW5pdCh2b2lkKQogeworCWludCByZXQ7CisKIAlteHNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDIzZXZrX3BhZHMsIEFSUkFZX1NJWkUobXgyM2V2a19wYWRzKSk7CiAKIAlteDIzX2FkZF9kdWFydCgpOworCW14MjNfYWRkX2F1YXJ0MCgpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShNWDIzRVZLX0xDRF9FTkFCTEUsIEdQSU9GX0RJUl9PVVQsICJsY2QtZW5hYmxlIik7CisJaWYgKHJldCkKKwkJcHJfd2FybigiZmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyBsY2QtZW5hYmxlOiAlZFxuIiwgcmV0KTsKKwllbHNlCisJCWdwaW9fc2V0X3ZhbHVlKE1YMjNFVktfTENEX0VOQUJMRSwgMSk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3Rfb25lKE1YMjNFVktfQkxfRU5BQkxFLCBHUElPRl9ESVJfT1VULCAiYmwtZW5hYmxlIik7CisJaWYgKHJldCkKKwkJcHJfd2FybigiZmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyBibC1lbmFibGU6ICVkXG4iLCByZXQpOworCWVsc2UKKwkJZ3Bpb19zZXRfdmFsdWUoTVgyM0VWS19CTF9FTkFCTEUsIDEpOworCisJbXgyM19hZGRfbXhzZmIoJm14MjNldmtfbXhzZmJfcGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyM2V2a190aW1lcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14MjhldmsuYyBiL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXgyOGV2ay5jCmluZGV4IDhlMmM1OTcuLjA4MDAyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXgyOGV2ay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXgyOGV2ay5jCkBAIC0yOCw1NCArMjgsOTMgQEAKICNpbmNsdWRlICJkZXZpY2VzLW14MjguaCIKICNpbmNsdWRlICJncGlvLmgiCiAKKyNkZWZpbmUgTVgyOEVWS19GTEVYQ0FOX1NXSVRDSAlNWFNfR1BJT19OUigyLCAxMykKICNkZWZpbmUgTVgyOEVWS19GRUNfUEhZX1BPV0VSCU1YU19HUElPX05SKDIsIDE1KQorI2RlZmluZSBNWDI4RVZLX0JMX0VOQUJMRQlNWFNfR1BJT19OUigzLCAxOCkKKyNkZWZpbmUgTVgyOEVWS19MQ0RfRU5BQkxFCU1YU19HUElPX05SKDMsIDMwKQogI2RlZmluZSBNWDI4RVZLX0ZFQ19QSFlfUkVTRVQJTVhTX0dQSU9fTlIoNCwgMTMpCiAKIHN0YXRpYyBjb25zdCBpb211eF9jZmdfdCBteDI4ZXZrX3BhZHNbXSBfX2luaXRjb25zdCA9IHsKIAkvKiBkdWFydCAqLwotCU1YMjhfUEFEX1BXTTBfX0RVQVJUX1JYIHwKLQkJKE1YU19QQURfNE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX05PUFVMTCksCi0JTVgyOF9QQURfUFdNMV9fRFVBUlRfVFggfAotCQkoTVhTX1BBRF80TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfTk9QVUxMKSwKKwlNWDI4X1BBRF9QV00wX19EVUFSVF9SWCB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9QV00xX19EVUFSVF9UWCB8IE1YU19QQURfQ1RSTCwKIAorCS8qIGF1YXJ0MCAqLworCU1YMjhfUEFEX0FVQVJUMF9SWF9fQVVBUlQwX1JYIHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0FVQVJUMF9UWF9fQVVBUlQwX1RYIHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0FVQVJUMF9DVFNfX0FVQVJUMF9DVFMgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfQVVBUlQwX1JUU19fQVVBUlQwX1JUUyB8IE1YU19QQURfQ1RSTCwKKwkvKiBhdWFydDMgKi8KKwlNWDI4X1BBRF9BVUFSVDNfUlhfX0FVQVJUM19SWCB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9BVUFSVDNfVFhfX0FVQVJUM19UWCB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9BVUFSVDNfQ1RTX19BVUFSVDNfQ1RTIHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0FVQVJUM19SVFNfX0FVQVJUM19SVFMgfCBNWFNfUEFEX0NUUkwsCisKKyNkZWZpbmUgTVhTX1BBRF9GRUMJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCkKIAkvKiBmZWMwICovCi0JTVgyOF9QQURfRU5FVDBfTURDX19FTkVUMF9NREMgfAotCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKLQlNWDI4X1BBRF9FTkVUMF9NRElPX19FTkVUMF9NRElPIHwKLQkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCi0JTVgyOF9QQURfRU5FVDBfUlhfRU5fX0VORVQwX1JYX0VOIHwKLQkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCi0JTVgyOF9QQURfRU5FVDBfUlhEMF9fRU5FVDBfUlhEMCB8Ci0JCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAotCU1YMjhfUEFEX0VORVQwX1JYRDFfX0VORVQwX1JYRDEgfAotCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKLQlNWDI4X1BBRF9FTkVUMF9UWF9FTl9fRU5FVDBfVFhfRU4gfAotCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKLQlNWDI4X1BBRF9FTkVUMF9UWEQwX19FTkVUMF9UWEQwIHwKLQkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCi0JTVgyOF9QQURfRU5FVDBfVFhEMV9fRU5FVDBfVFhEMSB8Ci0JCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAotCU1YMjhfUEFEX0VORVRfQ0xLX19DTEtDVFJMX0VORVQgfAotCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9FTkVUMF9NRENfX0VORVQwX01EQyB8IE1YU19QQURfRkVDLAorCU1YMjhfUEFEX0VORVQwX01ESU9fX0VORVQwX01ESU8gfCBNWFNfUEFEX0ZFQywKKwlNWDI4X1BBRF9FTkVUMF9SWF9FTl9fRU5FVDBfUlhfRU4gfCBNWFNfUEFEX0ZFQywKKwlNWDI4X1BBRF9FTkVUMF9SWEQwX19FTkVUMF9SWEQwIHwgTVhTX1BBRF9GRUMsCisJTVgyOF9QQURfRU5FVDBfUlhEMV9fRU5FVDBfUlhEMSB8IE1YU19QQURfRkVDLAorCU1YMjhfUEFEX0VORVQwX1RYX0VOX19FTkVUMF9UWF9FTiB8IE1YU19QQURfRkVDLAorCU1YMjhfUEFEX0VORVQwX1RYRDBfX0VORVQwX1RYRDAgfCBNWFNfUEFEX0ZFQywKKwlNWDI4X1BBRF9FTkVUMF9UWEQxX19FTkVUMF9UWEQxIHwgTVhTX1BBRF9GRUMsCisJTVgyOF9QQURfRU5FVF9DTEtfX0NMS0NUUkxfRU5FVCB8IE1YU19QQURfRkVDLAogCS8qIGZlYzEgKi8KLQlNWDI4X1BBRF9FTkVUMF9DUlNfX0VORVQxX1JYX0VOIHwKLQkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCi0JTVgyOF9QQURfRU5FVDBfUlhEMl9fRU5FVDFfUlhEMCB8Ci0JCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAotCU1YMjhfUEFEX0VORVQwX1JYRDNfX0VORVQxX1JYRDEgfAotCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKLQlNWDI4X1BBRF9FTkVUMF9DT0xfX0VORVQxX1RYX0VOIHwKLQkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCi0JTVgyOF9QQURfRU5FVDBfVFhEMl9fRU5FVDFfVFhEMCB8Ci0JCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAotCU1YMjhfUEFEX0VORVQwX1RYRDNfX0VORVQxX1RYRDEgfAotCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9FTkVUMF9DUlNfX0VORVQxX1JYX0VOIHwgTVhTX1BBRF9GRUMsCisJTVgyOF9QQURfRU5FVDBfUlhEMl9fRU5FVDFfUlhEMCB8IE1YU19QQURfRkVDLAorCU1YMjhfUEFEX0VORVQwX1JYRDNfX0VORVQxX1JYRDEgfCBNWFNfUEFEX0ZFQywKKwlNWDI4X1BBRF9FTkVUMF9DT0xfX0VORVQxX1RYX0VOIHwgTVhTX1BBRF9GRUMsCisJTVgyOF9QQURfRU5FVDBfVFhEMl9fRU5FVDFfVFhEMCB8IE1YU19QQURfRkVDLAorCU1YMjhfUEFEX0VORVQwX1RYRDNfX0VORVQxX1RYRDEgfCBNWFNfUEFEX0ZFQywKIAkvKiBwaHkgcG93ZXIgbGluZSAqLwotCU1YMjhfUEFEX1NTUDFfREFUQTNfX0dQSU9fMl8xNSB8Ci0JCShNWFNfUEFEXzRNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9OT1BVTEwpLAorCU1YMjhfUEFEX1NTUDFfREFUQTNfX0dQSU9fMl8xNSB8IE1YU19QQURfQ1RSTCwKIAkvKiBwaHkgcmVzZXQgbGluZSAqLwotCU1YMjhfUEFEX0VORVQwX1JYX0NMS19fR1BJT180XzEzIHwKLQkJKE1YU19QQURfNE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX05PUFVMTCksCisJTVgyOF9QQURfRU5FVDBfUlhfQ0xLX19HUElPXzRfMTMgfCBNWFNfUEFEX0NUUkwsCisKKwkvKiBmbGV4Y2FuMCAqLworCU1YMjhfUEFEX0dQTUlfUkRZMl9fQ0FOMF9UWCwKKwlNWDI4X1BBRF9HUE1JX1JEWTNfX0NBTjBfUlgsCisJLyogZmxleGNhbjEgKi8KKwlNWDI4X1BBRF9HUE1JX0NFMk5fX0NBTjFfVFgsCisJTVgyOF9QQURfR1BNSV9DRTNOX19DQU4xX1JYLAorCS8qIHRyYW5zY2VpdmVyIHBvd2VyIGNvbnRyb2wgKi8KKwlNWDI4X1BBRF9TU1AxX0NNRF9fR1BJT18yXzEzLAorCisJLyogbXhzZmIgKGxjZGlmKSAqLworCU1YMjhfUEFEX0xDRF9EMDBfX0xDRF9EMCB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfRDAxX19MQ0RfRDEgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX0QwMl9fTENEX0QyIHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9EMDNfX0xDRF9EMyB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfRDA0X19MQ0RfRDQgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX0QwNV9fTENEX0Q1IHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9EMDZfX0xDRF9ENiB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfRDA3X19MQ0RfRDcgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX0QwOF9fTENEX0Q4IHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9EMDlfX0xDRF9EOSB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfRDEwX19MQ0RfRDEwIHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9EMTFfX0xDRF9EMTEgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX0QxMl9fTENEX0QxMiB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfRDEzX19MQ0RfRDEzIHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9EMTRfX0xDRF9EMTQgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX0QxNV9fTENEX0QxNSB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfRDE2X19MQ0RfRDE2IHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9EMTdfX0xDRF9EMTcgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX0QxOF9fTENEX0QxOCB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfRDE5X19MQ0RfRDE5IHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9EMjBfX0xDRF9EMjAgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX0QyMV9fTENEX0QyMSB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfRDIyX19MQ0RfRDIyIHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9EMjNfX0xDRF9EMjMgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX1JEX0VfX0xDRF9WU1lOQyB8IE1YU19QQURfQ1RSTCwKKwlNWDI4X1BBRF9MQ0RfV1JfUldOX19MQ0RfSFNZTkMgfCBNWFNfUEFEX0NUUkwsCisJTVgyOF9QQURfTENEX1JTX19MQ0RfRE9UQ0xLIHwgTVhTX1BBRF9DVFJMLAorCU1YMjhfUEFEX0xDRF9DU19fTENEX0VOQUJMRSB8IE1YU19QQURfQ1RSTCwKKwkvKiBMQ0QgcGFuZWwgZW5hYmxlICovCisJTVgyOF9QQURfTENEX1JFU0VUX19HUElPXzNfMzAgfCBNWFNfUEFEX0NUUkwsCisJLyogYmFja2xpZ2h0IGNvbnRyb2wgKi8KKwlNWDI4X1BBRF9QV00yX19HUElPXzNfMTggfCBNWFNfUEFEX0NUUkwsCiB9OwogCiAvKiBmZWMgKi8KQEAgLTExOSw3ICsxNTgsNyBAQAogCWdwaW9fc2V0X3ZhbHVlKE1YMjhFVktfRkVDX1BIWV9SRVNFVCwgMSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgbXgyOF9mZWNfcGRhdGFbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgbXgyOF9mZWNfcGRhdGFbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLyogZmVjMCAqLwogCQkucGh5ID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksCkBAIC0xMjksMTUgKzE2OCwxMzUgQEAKIAl9LAogfTsKIAorc3RhdGljIGludCBfX2luaXQgbXgyOGV2a19mZWNfZ2V0X21hYyh2b2lkKQoreworCWludCBpOworCXUzMiB2YWw7CisJY29uc3QgdTMyICpvY290cCA9IG14c19nZXRfb2NvdHAoKTsKKworCWlmICghb2NvdHApCisJCWdvdG8gZXJyb3I7CisKKwkvKgorCSAqIE9DT1RQIG9ubHkgc3RvcmVzIHRoZSBsYXN0IDQgb2N0ZXRzIGZvciBlYWNoIG1hYyBhZGRyZXNzLAorCSAqIHNvIGhhcmQtY29kZSBGcmVlc2NhbGUgT1VJICgwMDowNDo5ZikgaGVyZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXZhbCA9IG9jb3RwW2kgKiA0XTsKKwkJbXgyOF9mZWNfcGRhdGFbaV0ubWFjWzBdID0gMHgwMDsKKwkJbXgyOF9mZWNfcGRhdGFbaV0ubWFjWzFdID0gMHgwNDsKKwkJbXgyOF9mZWNfcGRhdGFbaV0ubWFjWzJdID0gMHg5ZjsKKwkJbXgyOF9mZWNfcGRhdGFbaV0ubWFjWzNdID0gKHZhbCA+PiAxNikgJiAweGZmOworCQlteDI4X2ZlY19wZGF0YVtpXS5tYWNbNF0gPSAodmFsID4+IDgpICYgMHhmZjsKKwkJbXgyOF9mZWNfcGRhdGFbaV0ubWFjWzVdID0gKHZhbCA+PiAwKSAmIDB4ZmY7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXByX2VycigiJXM6IHRpbWVvdXQgd2hlbiByZWFkaW5nIGZlYyBtYWMgZnJvbSBPQ09UUFxuIiwgX19mdW5jX18pOworCXJldHVybiAtRVRJTUVET1VUOworfQorCisvKgorICogTVgyOEVWS19GTEVYQ0FOX1NXSVRDSCBpcyBzaGFyZWQgYmV0d2VlbiBib3RoIGZsZXhjYW4gY29udHJvbGxlcnMKKyAqLworc3RhdGljIGludCBmbGV4Y2FuMF9lbiwgZmxleGNhbjFfZW47CisKK3N0YXRpYyB2b2lkIG14MjhldmtfZmxleGNhbl9zd2l0Y2godm9pZCkKK3sKKwlpZiAoZmxleGNhbjBfZW4gfHwgZmxleGNhbjFfZW4pCisJCWdwaW9fc2V0X3ZhbHVlKE1YMjhFVktfRkxFWENBTl9TV0lUQ0gsIDEpOworCWVsc2UKKwkJZ3Bpb19zZXRfdmFsdWUoTVgyOEVWS19GTEVYQ0FOX1NXSVRDSCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG14MjhldmtfZmxleGNhbjBfc3dpdGNoKGludCBlbmFibGUpCit7CisJZmxleGNhbjBfZW4gPSBlbmFibGU7CisJbXgyOGV2a19mbGV4Y2FuX3N3aXRjaCgpOworfQorCitzdGF0aWMgdm9pZCBteDI4ZXZrX2ZsZXhjYW4xX3N3aXRjaChpbnQgZW5hYmxlKQoreworCWZsZXhjYW4xX2VuID0gZW5hYmxlOworCW14MjhldmtfZmxleGNhbl9zd2l0Y2goKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmbGV4Y2FuX3BsYXRmb3JtX2RhdGEKKwkJbXgyOGV2a19mbGV4Y2FuX3BkYXRhW10gX19pbml0Y29uc3QgPSB7CisJeworCQkudHJhbnNjZWl2ZXJfc3dpdGNoID0gbXgyOGV2a19mbGV4Y2FuMF9zd2l0Y2gsCisJfSwgeworCQkudHJhbnNjZWl2ZXJfc3dpdGNoID0gbXgyOGV2a19mbGV4Y2FuMV9zd2l0Y2gsCisJfQorfTsKKworLyogbXhzZmIgKGxjZGlmKSAqLworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgbXgyOGV2a192aWRlb19tb2Rlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlNlaWtvLTQzV1ZGMUciLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLnBpeGNsb2NrCT0gMjk4NTEsIC8qIHBpY29zZWNvbmQgKDMzLjUgTUh6KSAqLworCQkubGVmdF9tYXJnaW4JPSA4OSwKKwkJLnJpZ2h0X21hcmdpbgk9IDE2NCwKKwkJLnVwcGVyX21hcmdpbgk9IDIzLAorCQkubG93ZXJfbWFyZ2luCT0gMTAsCisJCS5oc3luY19sZW4JPSAxMCwKKwkJLnZzeW5jX2xlbgk9IDEwLAorCQkuc3luYwkJPSBGQl9TWU5DX0RBVEFfRU5BQkxFX0hJR0hfQUNUIHwKKwkJCQkgIEZCX1NZTkNfRE9UQ0xLX0ZBSUxJTkdfQUNULAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14c2ZiX3BsYXRmb3JtX2RhdGEgbXgyOGV2a19teHNmYl9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkubW9kZV9saXN0CT0gbXgyOGV2a192aWRlb19tb2RlcywKKwkubW9kZV9jb3VudAk9IEFSUkFZX1NJWkUobXgyOGV2a192aWRlb19tb2RlcyksCisJLmRlZmF1bHRfYnBwCT0gMzIsCisJLmxkX2ludGZfd2lkdGgJPSBTVE1MQ0RJRl8yNEJJVCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBteDI4ZXZrX2luaXQodm9pZCkKIHsKKwlpbnQgcmV0OworCiAJbXhzX2lvbXV4X3NldHVwX211bHRpcGxlX3BhZHMobXgyOGV2a19wYWRzLCBBUlJBWV9TSVpFKG14MjhldmtfcGFkcykpOwogCiAJbXgyOF9hZGRfZHVhcnQoKTsKKwlteDI4X2FkZF9hdWFydDAoKTsKKwlteDI4X2FkZF9hdWFydDMoKTsKKworCWlmIChteDI4ZXZrX2ZlY19nZXRfbWFjKCkpCisJCXByX3dhcm4oIiVzOiBmYWlsZWQgb24gZmVjIG1hYyBzZXR1cFxuIiwgX19mdW5jX18pOwogCiAJbXgyOGV2a19mZWNfcmVzZXQoKTsKIAlteDI4X2FkZF9mZWMoMCwgJm14MjhfZmVjX3BkYXRhWzBdKTsKIAlteDI4X2FkZF9mZWMoMSwgJm14MjhfZmVjX3BkYXRhWzFdKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoTVgyOEVWS19GTEVYQ0FOX1NXSVRDSCwgR1BJT0ZfRElSX09VVCwKKwkJCQkiZmxleGNhbi1zd2l0Y2giKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyBmbGV4Y2FuLXN3aXRjaDogJWRcbiIsIHJldCk7CisJfSBlbHNlIHsKKwkJbXgyOF9hZGRfZmxleGNhbigwLCAmbXgyOGV2a19mbGV4Y2FuX3BkYXRhWzBdKTsKKwkJbXgyOF9hZGRfZmxleGNhbigxLCAmbXgyOGV2a19mbGV4Y2FuX3BkYXRhWzFdKTsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3Rfb25lKE1YMjhFVktfTENEX0VOQUJMRSwgR1BJT0ZfRElSX09VVCwgImxjZC1lbmFibGUiKTsKKwlpZiAocmV0KQorCQlwcl93YXJuKCJmYWlsZWQgdG8gcmVxdWVzdCBncGlvIGxjZC1lbmFibGU6ICVkXG4iLCByZXQpOworCWVsc2UKKwkJZ3Bpb19zZXRfdmFsdWUoTVgyOEVWS19MQ0RfRU5BQkxFLCAxKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoTVgyOEVWS19CTF9FTkFCTEUsIEdQSU9GX0RJUl9PVVQsICJibC1lbmFibGUiKTsKKwlpZiAocmV0KQorCQlwcl93YXJuKCJmYWlsZWQgdG8gcmVxdWVzdCBncGlvIGJsLWVuYWJsZTogJWRcbiIsIHJldCk7CisJZWxzZQorCQlncGlvX3NldF92YWx1ZShNWDI4RVZLX0JMX0VOQUJMRSwgMSk7CisKKwlteDI4X2FkZF9teHNmYigmbXgyOGV2a19teHNmYl9wZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDI4ZXZrX3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtdHgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvbWFjaC10eDI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1ZTM3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtdHgyOC5jCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIDxMV0BLQVJPLWVsZWN0cm9uaWNzLmRlPgorICoKKyAqIGJhc2VkIG9uOiBtYWNoLW14MjhfZXZrLmMKKyAqIENvcHlyaWdodCAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjguaD4KKworI2luY2x1ZGUgImRldmljZXMtbXgyOC5oIgorI2luY2x1ZGUgIm1vZHVsZS10eDI4LmgiCisKKyNkZWZpbmUgVFgyOF9TVEs1X0dQSU9fTEVECQlNWFNfR1BJT19OUig0LCAxMCkKKworc3RhdGljIGNvbnN0IGlvbXV4X2NmZ190IHR4Mjhfc3RrNXYzX3BhZHNbXSBfX2luaXRjb25zdCA9IHsKKwkvKiBMRUQgKi8KKwlNWDI4X1BBRF9FTkVUMF9SWEQzX19HUElPXzRfMTAgfAorCQlNWFNfUEFEXzNWMyB8IE1YU19QQURfNE1BIHwgTVhTX1BBRF9OT1BVTEwsCisKKwkvKiBmcmFtZWJ1ZmZlciAqLworI2RlZmluZSBMQ0RfTU9ERSAoTVhTX1BBRF8zVjMgfCBNWFNfUEFEXzRNQSkKKwlNWDI4X1BBRF9MQ0RfRDAwX19MQ0RfRDAgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDAxX19MQ0RfRDEgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDAyX19MQ0RfRDIgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDAzX19MQ0RfRDMgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDA0X19MQ0RfRDQgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDA1X19MQ0RfRDUgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDA2X19MQ0RfRDYgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDA3X19MQ0RfRDcgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDA4X19MQ0RfRDggfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDA5X19MQ0RfRDkgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDEwX19MQ0RfRDEwIHwgTENEX01PREUsCisJTVgyOF9QQURfTENEX0QxMV9fTENEX0QxMSB8IExDRF9NT0RFLAorCU1YMjhfUEFEX0xDRF9EMTJfX0xDRF9EMTIgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDEzX19MQ0RfRDEzIHwgTENEX01PREUsCisJTVgyOF9QQURfTENEX0QxNF9fTENEX0QxNCB8IExDRF9NT0RFLAorCU1YMjhfUEFEX0xDRF9EMTVfX0xDRF9EMTUgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDE2X19MQ0RfRDE2IHwgTENEX01PREUsCisJTVgyOF9QQURfTENEX0QxN19fTENEX0QxNyB8IExDRF9NT0RFLAorCU1YMjhfUEFEX0xDRF9EMThfX0xDRF9EMTggfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDE5X19MQ0RfRDE5IHwgTENEX01PREUsCisJTVgyOF9QQURfTENEX0QyMF9fTENEX0QyMCB8IExDRF9NT0RFLAorCU1YMjhfUEFEX0xDRF9EMjFfX0xDRF9EMjEgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRDIyX19MQ0RfRDIyIHwgTENEX01PREUsCisJTVgyOF9QQURfTENEX0QyM19fTENEX0QyMyB8IExDRF9NT0RFLAorCU1YMjhfUEFEX0xDRF9SRF9FX19MQ0RfVlNZTkMgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfV1JfUldOX19MQ0RfSFNZTkMgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfUlNfX0xDRF9ET1RDTEsgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfQ1NfX0xDRF9DUyB8IExDRF9NT0RFLAorCU1YMjhfUEFEX0xDRF9WU1lOQ19fTENEX1ZTWU5DIHwgTENEX01PREUsCisJTVgyOF9QQURfTENEX0hTWU5DX19MQ0RfSFNZTkMgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9MQ0RfRE9UQ0xLX19MQ0RfRE9UQ0xLIHwgTENEX01PREUsCisJTVgyOF9QQURfTENEX0VOQUJMRV9fR1BJT18xXzMxIHwgTENEX01PREUsCisJTVgyOF9QQURfTENEX1JFU0VUX19HUElPXzNfMzAgfCBMQ0RfTU9ERSwKKwlNWDI4X1BBRF9QV00wX19QV01fMCB8IExDRF9NT0RFLAorCisJLyogVUFSVDEgKi8KKwlNWDI4X1BBRF9BVUFSVDBfQ1RTX19EVUFSVF9SWCwKKwlNWDI4X1BBRF9BVUFSVDBfUlRTX19EVUFSVF9UWCwKKwlNWDI4X1BBRF9BVUFSVDBfVFhfX0RVQVJUX1JUUywKKwlNWDI4X1BBRF9BVUFSVDBfUlhfX0RVQVJUX0NUUywKKworCS8qIFVBUlQyICovCisJTVgyOF9QQURfQVVBUlQxX1JYX19BVUFSVDFfUlgsCisJTVgyOF9QQURfQVVBUlQxX1RYX19BVUFSVDFfVFgsCisJTVgyOF9QQURfQVVBUlQxX1JUU19fQVVBUlQxX1JUUywKKwlNWDI4X1BBRF9BVUFSVDFfQ1RTX19BVUFSVDFfQ1RTLAorCisJLyogQ0FOICovCisJTVgyOF9QQURfR1BNSV9SRFkyX19DQU4wX1RYLAorCU1YMjhfUEFEX0dQTUlfUkRZM19fQ0FOMF9SWCwKKworCS8qIEkyQyAqLworCU1YMjhfUEFEX0kyQzBfU0NMX19JMkMwX1NDTCwKKwlNWDI4X1BBRF9JMkMwX1NEQV9fSTJDMF9TREEsCisKKwkvKiBUU0MyMDA3ICovCisJTVgyOF9QQURfU0FJRjBfTUNMS19fR1BJT18zXzIwIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEXzRNQSB8IE1YU19QQURfUFVMTFVQLAorCisJLyogTU1DMCAqLworCU1YMjhfUEFEX1NTUDBfREFUQTBfX1NTUDBfRDAgfAorCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9TU1AwX0RBVEExX19TU1AwX0QxIHwKKwkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCisJTVgyOF9QQURfU1NQMF9EQVRBMl9fU1NQMF9EMiB8CisJCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAorCU1YMjhfUEFEX1NTUDBfREFUQTNfX1NTUDBfRDMgfAorCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9TU1AwX0RBVEE0X19TU1AwX0Q0IHwKKwkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCisJTVgyOF9QQURfU1NQMF9EQVRBNV9fU1NQMF9ENSB8CisJCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAorCU1YMjhfUEFEX1NTUDBfREFUQTZfX1NTUDBfRDYgfAorCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9TU1AwX0RBVEE3X19TU1AwX0Q3IHwKKwkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCisJTVgyOF9QQURfU1NQMF9DTURfX1NTUDBfQ01EIHwKKwkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCisJTVgyOF9QQURfU1NQMF9ERVRFQ1RfX1NTUDBfQ0FSRF9ERVRFQ1QgfAorCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfTk9QVUxMKSwKKwlNWDI4X1BBRF9TU1AwX1NDS19fU1NQMF9TQ0sgfAorCQkoTVhTX1BBRF8xMk1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX05PUFVMTCksCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHR4Mjhfc3RrNXYzX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lID0gIkdQSU8tTEVEIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJoZWFydGJlYXQiLAorCQkuZ3BpbyA9IFRYMjhfU1RLNV9HUElPX0xFRCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHR4Mjhfc3RrNXYzX2xlZF9kYXRhIF9faW5pdGNvbnN0ID0geworCS5sZWRzID0gdHgyOF9zdGs1djNfbGVkcywKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKHR4Mjhfc3RrNXYzX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB0eDI4X3NwaV9ib2FyZF9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMgPSAic3BpZGV2IiwKKwkJLm1heF9zcGVlZF9oeiA9IDIwMDAwMDAwLAorCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDEsCisJCS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKVNQSV9HUElPX05PX0NISVBTRUxFQ1QsCisJCS5tb2RlID0gU1BJX01PREVfMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB0eDI4X3N0azV2M19pMmNfYm9hcmRpbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJkczEzMzkiLCAweDY4KSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHR4Mjhfc3RrNXYzX2luaXQodm9pZCkKK3sKKwlteHNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGFkcyh0eDI4X3N0azV2M19wYWRzLAorCQkJQVJSQVlfU0laRSh0eDI4X3N0azV2M19wYWRzKSk7CisKKwlteDI4X2FkZF9kdWFydCgpOyAvKiBVQVJUMSAqLworCW14MjhfYWRkX2F1YXJ0KDEpOyAvKiBVQVJUMiAqLworCisJdHgyOF9hZGRfZmVjMCgpOworCS8qIHNwaSB2aWEgc3NwIHdpbGwgYmUgYWRkZWQgd2hlbiBhdmFpbGFibGUgKi8KKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyh0eDI4X3NwaV9ib2FyZF9pbmZvLAorCQkJQVJSQVlfU0laRSh0eDI4X3NwaV9ib2FyZF9pbmZvKSk7CisJbXhzX2FkZF9wbGF0Zm9ybV9kZXZpY2UoImxlZHMtZ3BpbyIsIDAsIE5VTEwsIDAsCisJCQkmdHgyOF9zdGs1djNfbGVkX2RhdGEsIHNpemVvZih0eDI4X3N0azV2M19sZWRfZGF0YSkpOworCW14MjhfYWRkX214c19pMmMoMCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgdHgyOF9zdGs1djNfaTJjX2JvYXJkaW5mbywKKwkJCUFSUkFZX1NJWkUodHgyOF9zdGs1djNfaTJjX2JvYXJkaW5mbykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdHgyOF90aW1lcl9pbml0KHZvaWQpCit7CisJbXgyOF9jbG9ja3NfaW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciB0eDI4X3RpbWVyID0geworCS5pbml0ID0gdHgyOF90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChUWDI4LCAiS2EtUm8gZWxlY3Ryb25pY3MgVFgyOCBtb2R1bGUiKQorCS5tYXBfaW8gPSBteDI4X21hcF9pbywKKwkuaW5pdF9pcnEgPSBteDI4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgPSB0eDI4X3N0azV2M19pbml0LAorCS50aW1lciA9ICZ0eDI4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL21vZHVsZS10eDI4LmMgYi9hcmNoL2FybS9tYWNoLW14cy9tb2R1bGUtdHgyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGIxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9tb2R1bGUtdHgyOC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIDxMV0BLQVJPLWVsZWN0cm9uaWNzLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmVjLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI4Lmg+CisjaW5jbHVkZSAiLi4vZGV2aWNlcy1teDI4LmgiCisKKyNpbmNsdWRlICJtb2R1bGUtdHgyOC5oIgorCisjZGVmaW5lIFRYMjhfRkVDX1BIWV9QT1dFUglNWFNfR1BJT19OUigzLCAyOSkKKyNkZWZpbmUgVFgyOF9GRUNfUEhZX1JFU0VUCU1YU19HUElPX05SKDQsIDEzKQorCitzdGF0aWMgY29uc3QgaW9tdXhfY2ZnX3QgdHgyOF9mZWNfZ3Bpb19wYWRzW10gX19pbml0Y29uc3QgPSB7CisJLyogUEhZIFBPV0VSICovCisJTVgyOF9QQURfUFdNNF9fR1BJT18zXzI5IHwKKwkJTVhTX1BBRF80TUEgfCBNWFNfUEFEX05PUFVMTCB8IE1YU19QQURfM1YzLAorCS8qIFBIWSBSRVNFVCAqLworCU1YMjhfUEFEX0VORVQwX1JYX0NMS19fR1BJT180XzEzIHwKKwkJTVhTX1BBRF80TUEgfCBNWFNfUEFEX05PUFVMTCB8IE1YU19QQURfM1YzLAorCS8qIE1vZGUgc3RyYXAgcGlucyAwLTIgKi8KKwlNWDI4X1BBRF9FTkVUMF9SWEQwX19HUElPXzRfMyB8CisJCU1YU19QQURfOE1BIHwgTVhTX1BBRF9QVUxMVVAgfCBNWFNfUEFEXzNWMywKKwlNWDI4X1BBRF9FTkVUMF9SWEQxX19HUElPXzRfNCB8CisJCU1YU19QQURfOE1BIHwgTVhTX1BBRF9QVUxMVVAgfCBNWFNfUEFEXzNWMywKKwlNWDI4X1BBRF9FTkVUMF9SWF9FTl9fR1BJT180XzIgfAorCQlNWFNfUEFEXzhNQSB8IE1YU19QQURfUFVMTFVQIHwgTVhTX1BBRF8zVjMsCisJLyogbklOVCAqLworCU1YMjhfUEFEX0VORVQwX1RYX0NMS19fR1BJT180XzUgfAorCQlNWFNfUEFEXzRNQSB8IE1YU19QQURfTk9QVUxMIHwgTVhTX1BBRF8zVjMsCisKKwlNWDI4X1BBRF9FTkVUMF9NRENfX0dQSU9fNF8wLAorCU1YMjhfUEFEX0VORVQwX01ESU9fX0dQSU9fNF8xLAorCU1YMjhfUEFEX0VORVQwX1RYX0VOX19HUElPXzRfNiwKKwlNWDI4X1BBRF9FTkVUMF9UWEQwX19HUElPXzRfNywKKwlNWDI4X1BBRF9FTkVUMF9UWEQxX19HUElPXzRfOCwKKwlNWDI4X1BBRF9FTkVUX0NMS19fR1BJT180XzE2LAorfTsKKworI2RlZmluZSBGRUNfTU9ERSAoTVhTX1BBRF84TUEgfCBNWFNfUEFEX1BVTExVUCB8IE1YU19QQURfM1YzKQorc3RhdGljIGNvbnN0IGlvbXV4X2NmZ190IHR4MjhfZmVjX3BhZHNbXSBfX2luaXRjb25zdCA9IHsKKwlNWDI4X1BBRF9FTkVUMF9NRENfX0VORVQwX01EQyB8IEZFQ19NT0RFLAorCU1YMjhfUEFEX0VORVQwX01ESU9fX0VORVQwX01ESU8gfCBGRUNfTU9ERSwKKwlNWDI4X1BBRF9FTkVUMF9SWF9FTl9fRU5FVDBfUlhfRU4gfCBGRUNfTU9ERSwKKwlNWDI4X1BBRF9FTkVUMF9SWEQwX19FTkVUMF9SWEQwIHwgRkVDX01PREUsCisJTVgyOF9QQURfRU5FVDBfUlhEMV9fRU5FVDBfUlhEMSB8IEZFQ19NT0RFLAorCU1YMjhfUEFEX0VORVQwX1RYX0VOX19FTkVUMF9UWF9FTiB8IEZFQ19NT0RFLAorCU1YMjhfUEFEX0VORVQwX1RYRDBfX0VORVQwX1RYRDAgfCBGRUNfTU9ERSwKKwlNWDI4X1BBRF9FTkVUMF9UWEQxX19FTkVUMF9UWEQxIHwgRkVDX01PREUsCisJTVgyOF9QQURfRU5FVF9DTEtfX0NMS0NUUkxfRU5FVCB8IEZFQ19NT0RFLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmZWNfcGxhdGZvcm1fZGF0YSB0eDI4X2ZlY19kYXRhIF9faW5pdGNvbnN0ID0geworCS5waHkgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSwKK307CisKK2ludCBfX2luaXQgdHgyOF9hZGRfZmVjMCh2b2lkKQoreworCWludCBpLCByZXQ7CisKKwlwcl9kZWJ1ZygiJXM6IFN3aXRjaGluZyBGRUMgUEhZIHBvd2VyIG9mZlxuIiwgX19mdW5jX18pOworCXJldCA9IG14c19pb211eF9zZXR1cF9tdWx0aXBsZV9wYWRzKHR4MjhfZmVjX2dwaW9fcGFkcywKKwkJCUFSUkFZX1NJWkUodHgyOF9mZWNfZ3Bpb19wYWRzKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHgyOF9mZWNfZ3Bpb19wYWRzKTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBncGlvID0gTVhTX0dQSU9fTlIoUEFEX0JBTksodHgyOF9mZWNfZ3Bpb19wYWRzW2ldKSwKKwkJCVBBRF9QSU4odHgyOF9mZWNfZ3Bpb19wYWRzW2ldKSk7CisKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJGRUMiKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVxdWVzdCBHUElPXyVkXyVkOiAlZFxuIiwKKwkJCQlQQURfQkFOSyh0eDI4X2ZlY19ncGlvX3BhZHNbaV0pLAorCQkJCVBBRF9QSU4odHgyOF9mZWNfZ3Bpb19wYWRzW2ldKSwgcmV0KTsKKwkJCWdvdG8gZnJlZV9ncGlvczsKKwkJfQorCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMCk7CisJCWlmIChyZXQpIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHNldCBkaXJlY3Rpb24gb2YgR1BJT18lZF8lZCB0byBvdXRwdXQ6ICVkXG4iLAorCQkJCQlncGlvIC8gMzIgKyAxLCBncGlvICUgMzIsIHJldCk7CisJCQlnb3RvIGZyZWVfZ3Bpb3M7CisJCX0KKwl9CisKKwkvKiBQb3dlciB1cCBmZWMgcGh5ICovCisJcHJfZGVidWcoIiVzOiBTd2l0Y2hpbmcgRkVDIFBIWSBwb3dlciBvblxuIiwgX19mdW5jX18pOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChUWDI4X0ZFQ19QSFlfUE9XRVIsIDEpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcG93ZXIgb24gUEhZOiAlZFxuIiwgcmV0KTsKKwkJZ290byBmcmVlX2dwaW9zOworCX0KKwltZGVsYXkoMjYpOyAvKiAyNW1zIGFjY29yZGluZyB0byBkYXRhIHNoZWV0ICovCisKKwkvKiBuSU5UICovCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoTVhTX0dQSU9fTlIoNCwgNSkpOworCS8qIE1vZGUgc3RyYXAgcGlucyAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChNWFNfR1BJT19OUig0LCAyKSwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE1YU19HUElPX05SKDQsIDMpLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTVhTX0dQSU9fTlIoNCwgNCksIDEpOworCisJdWRlbGF5KDEwMCk7IC8qIG1pbmltdW0gYXNzZXJ0aW9uIHRpbWUgZm9yIG5SU1QgKi8KKworCXByX2RlYnVnKCIlczogRGVhc3NlcnRpbmcgRkVDIFBIWSBSRVNFVFxuIiwgX19mdW5jX18pOworCWdwaW9fc2V0X3ZhbHVlKFRYMjhfRkVDX1BIWV9SRVNFVCwgMSk7CisKKwlyZXQgPSBteHNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGFkcyh0eDI4X2ZlY19wYWRzLAorCQkJQVJSQVlfU0laRSh0eDI4X2ZlY19wYWRzKSk7CisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZygiJXM6IG14c19pb211eF9zZXR1cF9tdWx0aXBsZV9wYWRzKCkgZmFpbGVkIHdpdGggcmM6ICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXQpOworCQlnb3RvIGZyZWVfZ3Bpb3M7CisJfQorCXByX2RlYnVnKCIlczogUmVnaXN0ZXJpbmcgRkVDIGRldmljZVxuIiwgX19mdW5jX18pOworCW14MjhfYWRkX2ZlYygwLCAmdHgyOF9mZWNfZGF0YSk7CisJcmV0dXJuIDA7CisKK2ZyZWVfZ3Bpb3M6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXVuc2lnbmVkIGludCBncGlvID0gTVhTX0dQSU9fTlIoUEFEX0JBTksodHgyOF9mZWNfZ3Bpb19wYWRzW2ldKSwKKwkJCVBBRF9QSU4odHgyOF9mZWNfZ3Bpb19wYWRzW2ldKSk7CisKKwkJZ3Bpb19mcmVlKGdwaW8pOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9tb2R1bGUtdHgyOC5oIGIvYXJjaC9hcm0vbWFjaC1teHMvbW9kdWxlLXR4MjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjllMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvbW9kdWxlLXR4MjguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgKKyAqICAgVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCitpbnQgX19pbml0IHR4MjhfYWRkX2ZlYzAodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9vY290cC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvb2NvdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTE1N2EzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvb2NvdHAuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2luY2x1ZGUgPG1hY2gvbXhzLmg+CisKKyNkZWZpbmUgT0NPVFBfV09SRF9PRkZTRVQJCTB4MjAKKyNkZWZpbmUgT0NPVFBfV09SRF9DT1VOVAkJMHgyMAorCisjZGVmaW5lIEJNX09DT1RQX0NUUkxfQlVTWQkJKDEgPDwgOCkKKyNkZWZpbmUgQk1fT0NPVFBfQ1RSTF9FUlJPUgkJKDEgPDwgOSkKKyNkZWZpbmUgQk1fT0NPVFBfQ1RSTF9SRF9CQU5LX09QRU4JKDEgPDwgMTIpCisKK3N0YXRpYyBERUZJTkVfTVVURVgob2NvdHBfbXV0ZXgpOworc3RhdGljIHUzMiBvY290cF93b3Jkc1tPQ09UUF9XT1JEX0NPVU5UXTsKKworY29uc3QgdTMyICpteHNfZ2V0X29jb3RwKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpvY290cF9iYXNlID0gTVhTX0lPX0FERFJFU1MoTVhTX09DT1RQX0JBU0VfQUREUik7CisJaW50IHRpbWVvdXQgPSAweDQwMDsKKwlzaXplX3QgaTsKKwlzdGF0aWMgaW50IG9uY2UgPSAwOworCisJaWYgKG9uY2UpCisJCXJldHVybiBvY290cF93b3JkczsKKworCW11dGV4X2xvY2soJm9jb3RwX211dGV4KTsKKworCS8qCisJICogY2xrX2VuYWJsZShoYnVzX2NsaykgZm9yIG9jb3RwIGNhbiBiZSBza2lwcGVkCisJICogYXMgaXQgbXVzdCBiZSBvbiB3aGVuIHN5c3RlbSBpcyBydW5uaW5nLgorCSAqLworCisJLyogdHJ5IHRvIGNsZWFyIEVSUk9SIGJpdCAqLworCV9fbXhzX2NscmwoQk1fT0NPVFBfQ1RSTF9FUlJPUiwgb2NvdHBfYmFzZSk7CisKKwkvKiBjaGVjayBib3RoIEJVU1kgYW5kIEVSUk9SIGNsZWFyZWQgKi8KKwl3aGlsZSAoKF9fcmF3X3JlYWRsKG9jb3RwX2Jhc2UpICYKKwkJKEJNX09DT1RQX0NUUkxfQlVTWSB8IEJNX09DT1RQX0NUUkxfRVJST1IpKSAmJiAtLXRpbWVvdXQpCisJCWNwdV9yZWxheCgpOworCisJaWYgKHVubGlrZWx5KCF0aW1lb3V0KSkKKwkJZ290byBlcnJvcl91bmxvY2s7CisKKwkvKiBvcGVuIE9DT1RQIGJhbmtzIGZvciByZWFkICovCisJX19teHNfc2V0bChCTV9PQ09UUF9DVFJMX1JEX0JBTktfT1BFTiwgb2NvdHBfYmFzZSk7CisKKwkvKiBhcHByb3hpbWF0ZWx5IHdhaXQgMzIgaGNsayBjeWNsZXMgKi8KKwl1ZGVsYXkoMSk7CisKKwkvKiBwb2xsIEJVU1kgYml0IGJlY29taW5nIGNsZWFyZWQgKi8KKwl0aW1lb3V0ID0gMHg0MDA7CisJd2hpbGUgKChfX3Jhd19yZWFkbChvY290cF9iYXNlKSAmIEJNX09DT1RQX0NUUkxfQlVTWSkgJiYgLS10aW1lb3V0KQorCQljcHVfcmVsYXgoKTsKKworCWlmICh1bmxpa2VseSghdGltZW91dCkpCisJCWdvdG8gZXJyb3JfdW5sb2NrOworCisJZm9yIChpID0gMDsgaSA8IE9DT1RQX1dPUkRfQ09VTlQ7IGkrKykKKwkJb2NvdHBfd29yZHNbaV0gPSBfX3Jhd19yZWFkbChvY290cF9iYXNlICsgT0NPVFBfV09SRF9PRkZTRVQgKworCQkJCQkJaSAqIDB4MTApOworCisJLyogY2xvc2UgYmFua3MgZm9yIHBvd2VyIHNhdmluZyAqLworCV9fbXhzX2NscmwoQk1fT0NPVFBfQ1RSTF9SRF9CQU5LX09QRU4sIG9jb3RwX2Jhc2UpOworCisJb25jZSA9IDE7CisKKwltdXRleF91bmxvY2soJm9jb3RwX211dGV4KTsKKworCXJldHVybiBvY290cF93b3JkczsKKworZXJyb3JfdW5sb2NrOgorCW11dGV4X3VubG9jaygmb2NvdHBfbXV0ZXgpOworCXByX2VycigiJXM6IHRpbWVvdXQgaW4gcmVhZGluZyBPQ09UUFxuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvcG0uYyBiL2FyY2gvYXJtL21hY2gtbXhzL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwNDJkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL3BtLmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9zeXN0ZW0uaD4KKworc3RhdGljIGludCBteHNfc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCWFyY2hfaWRsZSgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBteHNfc3VzcGVuZF9vcHMgPSB7CisJLmVudGVyID0gbXhzX3N1c3BlbmRfZW50ZXIsCisJLnZhbGlkID0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14c19wbV9pbml0KHZvaWQpCit7CisJc3VzcGVuZF9zZXRfb3BzKCZteHNfc3VzcGVuZF9vcHMpOworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKG14c19wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL3JlZ3MtY2xrY3RybC1teDIzLmggYi9hcmNoL2FybS9tYWNoLW14cy9yZWdzLWNsa2N0cmwtbXgyMy5oCmluZGV4IGRiYzA0NzQuLjBlYTVjOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL3JlZ3MtY2xrY3RybC1teDIzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvcmVncy1jbGtjdHJsLW14MjMuaApAQCAtMzMsMTAgKzMzLDYgQEAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9QTExDVFJMMF9DTFIJKDB4MDAwMDAwMDgpCiAjZGVmaW5lIEhXX0NMS0NUUkxfUExMQ1RSTDBfVE9HCSgweDAwMDAwMDBjKQogCi0jZGVmaW5lIEJQX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQ2CTMwCi0jZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQ2CTB4QzAwMDAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9QTExDVFJMMF9SU1JWRDYodikgXAotCQkoKCh2KSA8PCAzMCkgJiBCTV9DTEtDVFJMX1BMTENUUkwwX1JTUlZENikKICNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMF9MRlJfU0VMCTI4CiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfTEZSX1NFTAkweDMwMDAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfUExMQ1RSTDBfTEZSX1NFTCh2KSAgXApAQCAtNDUsMTAgKzQxLDYgQEAKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTExDVFJMMF9MRlJfU0VMX19USU1FU18yICAgMHgxCiAjZGVmaW5lIEJWX0NMS0NUUkxfUExMQ1RSTDBfTEZSX1NFTF9fVElNRVNfMDUgIDB4MgogI2RlZmluZSBCVl9DTEtDVFJMX1BMTENUUkwwX0xGUl9TRUxfX1VOREVGSU5FRCAweDMKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMF9SU1JWRDUJMjYKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9SU1JWRDUJMHgwQzAwMDAwMAotI2RlZmluZSBCRl9DTEtDVFJMX1BMTENUUkwwX1JTUlZENSh2KSAgXAotCQkoKCh2KSA8PCAyNikgJiBCTV9DTEtDVFJMX1BMTENUUkwwX1JTUlZENSkKICNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMF9DUF9TRUwJMjQKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9DUF9TRUwJMHgwMzAwMDAwMAogI2RlZmluZSBCRl9DTEtDVFJMX1BMTENUUkwwX0NQX1NFTCh2KSAgXApAQCAtNTcsMTAgKzQ5LDYgQEAKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTExDVFJMMF9DUF9TRUxfX1RJTUVTXzIgICAweDEKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTExDVFJMMF9DUF9TRUxfX1RJTUVTXzA1ICAweDIKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTExDVFJMMF9DUF9TRUxfX1VOREVGSU5FRCAweDMKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMF9SU1JWRDQJMjIKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9SU1JWRDQJMHgwMEMwMDAwMAotI2RlZmluZSBCRl9DTEtDVFJMX1BMTENUUkwwX1JTUlZENCh2KSAgXAotCQkoKCh2KSA8PCAyMikgJiBCTV9DTEtDVFJMX1BMTENUUkwwX1JTUlZENCkKICNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMF9ESVZfU0VMCTIwCiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfRElWX1NFTAkweDAwMzAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfUExMQ1RSTDBfRElWX1NFTCh2KSAgXApAQCAtNjksMjMgKzU3LDEzIEBACiAjZGVmaW5lIEJWX0NMS0NUUkxfUExMQ1RSTDBfRElWX1NFTF9fTE9XRVIgICAgIDB4MQogI2RlZmluZSBCVl9DTEtDVFJMX1BMTENUUkwwX0RJVl9TRUxfX0xPV0VTVCAgICAweDIKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTExDVFJMMF9ESVZfU0VMX19VTkRFRklORUQgMHgzCi0jZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQzCTB4MDAwODAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9FTl9VU0JfQ0xLUwkweDAwMDQwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQyCTB4MDAwMjAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9QT1dFUgkweDAwMDEwMDAwCi0jZGVmaW5lIEJQX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQxCTAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9SU1JWRDEJMHgwMDAwRkZGRgotI2RlZmluZSBCRl9DTEtDVFJMX1BMTENUUkwwX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQxKQogCiAjZGVmaW5lIEhXX0NMS0NUUkxfUExMQ1RSTDEJKDB4MDAwMDAwMTApCiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMV9MT0NLCTB4ODAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMV9GT1JDRV9MT0NLCTB4NDAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMV9SU1JWRDEJMTYKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMV9SU1JWRDEJMHgzRkZGMDAwMAotI2RlZmluZSBCRl9DTEtDVFJMX1BMTENUUkwxX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX1BMTENUUkwxX1JTUlZEMSkKICNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMV9MT0NLX0NPVU5UCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMV9MT0NLX0NPVU5UCTB4MDAwMEZGRkYKICNkZWZpbmUgQkZfQ0xLQ1RSTF9QTExDVFJMMV9MT0NLX0NPVU5UKHYpICBcCkBAIC05NiwyOSArNzQsMTUgQEAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9DUFVfQ0xSCSgweDAwMDAwMDI4KQogI2RlZmluZSBIV19DTEtDVFJMX0NQVV9UT0cJKDB4MDAwMDAwMmMpCiAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfUlNSVkQ1CTMwCi0jZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX1JTUlZENQkweEMwMDAwMDAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfQ1BVX1JTUlZENSh2KSBcCi0JCSgoKHYpIDw8IDMwKSAmIEJNX0NMS0NUUkxfQ1BVX1JTUlZENSkKICNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfQlVTWV9SRUZfWFRBTAkweDIwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX0JVU1lfUkVGX0NQVQkweDEwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX1JTUlZENAkweDA4MDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX0RJVl9YVEFMX0ZSQUNfRU4JMHgwNDAwMDAwMAogI2RlZmluZSBCUF9DTEtDVFJMX0NQVV9ESVZfWFRBTAkxNgogI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTAkweDAzRkYwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfQ1BVX0RJVl9YVEFMKHYpICBcCiAJCSgoKHYpIDw8IDE2KSAmIEJNX0NMS0NUUkxfQ1BVX0RJVl9YVEFMKQotI2RlZmluZSBCUF9DTEtDVFJMX0NQVV9SU1JWRDMJMTMKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfUlNSVkQzCTB4MDAwMEUwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9DUFVfUlNSVkQzKHYpICBcCi0JCSgoKHYpIDw8IDEzKSAmIEJNX0NMS0NUUkxfQ1BVX1JTUlZEMykKICNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfSU5URVJSVVBUX1dBSVQJMHgwMDAwMTAwMAotI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9SU1JWRDIJMHgwMDAwMDgwMAogI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9ESVZfQ1BVX0ZSQUNfRU4JMHgwMDAwMDQwMAotI2RlZmluZSBCUF9DTEtDVFJMX0NQVV9SU1JWRDEJNgotI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9SU1JWRDEJMHgwMDAwMDNDMAotI2RlZmluZSBCRl9DTEtDVFJMX0NQVV9SU1JWRDEodikgIFwKLQkJKCgodikgPDwgNikgJiBCTV9DTEtDVFJMX0NQVV9SU1JWRDEpCiAjZGVmaW5lIEJQX0NMS0NUUkxfQ1BVX0RJVl9DUFUJMAogI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9ESVZfQ1BVCTB4MDAwMDAwM0YKICNkZWZpbmUgQkZfQ0xLQ1RSTF9DUFVfRElWX0NQVSh2KSAgXApAQCAtMTI5LDEwICs5Myw2IEBACiAjZGVmaW5lIEhXX0NMS0NUUkxfSEJVU19DTFIJKDB4MDAwMDAwMzgpCiAjZGVmaW5lIEhXX0NMS0NUUkxfSEJVU19UT0cJKDB4MDAwMDAwM2MpCiAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9IQlVTX1JTUlZENAkzMAotI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfUlNSVkQ0CTB4QzAwMDAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9IQlVTX1JTUlZENCh2KSBcCi0JCSgoKHYpIDw8IDMwKSAmIEJNX0NMS0NUUkxfSEJVU19SU1JWRDQpCiAjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19CVVNZCTB4MjAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0RDUF9BU19FTkFCTEUJMHgxMDAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfUFhQX0FTX0VOQUJMRQkweDA4MDAwMDAwCkBAIC0xNDMsNyArMTAzLDYgQEAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0NQVV9EQVRBX0FTX0VOQUJMRQkweDAwNDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19DUFVfSU5TVFJfQVNfRU5BQkxFCTB4MDAyMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0FVVE9fU0xPV19NT0RFCTB4MDAxMDAwMDAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX1JTUlZEMgkweDAwMDgwMDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfSEJVU19TTE9XX0RJVgkxNgogI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfU0xPV19ESVYJMHgwMDA3MDAwMAogI2RlZmluZSBCRl9DTEtDVFJMX0hCVVNfU0xPV19ESVYodikgIFwKQEAgLTE1NCwxMCArMTEzLDYgQEAKICNkZWZpbmUgQlZfQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX19CWTggIDB4MwogI2RlZmluZSBCVl9DTEtDVFJMX0hCVVNfU0xPV19ESVZfX0JZMTYgMHg0CiAjZGVmaW5lIEJWX0NMS0NUUkxfSEJVU19TTE9XX0RJVl9fQlkzMiAweDUKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9IQlVTX1JTUlZEMQk2Ci0jZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19SU1JWRDEJMHgwMDAwRkZDMAotI2RlZmluZSBCRl9DTEtDVFJMX0hCVVNfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDYpICYgQk1fQ0xLQ1RSTF9IQlVTX1JTUlZEMSkKICNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0RJVl9GUkFDX0VOCTB4MDAwMDAwMjAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9IQlVTX0RJVgkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19ESVYJMHgwMDAwMDAxRgpAQCAtMTY3LDEwICsxMjIsNiBAQAogI2RlZmluZSBIV19DTEtDVFJMX1hCVVMJKDB4MDAwMDAwNDApCiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9YQlVTX0JVU1kJMHg4MDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX1hCVVNfUlNSVkQxCTExCi0jZGVmaW5lIEJNX0NMS0NUUkxfWEJVU19SU1JWRDEJMHg3RkZGRjgwMAotI2RlZmluZSBCRl9DTEtDVFJMX1hCVVNfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDExKSAmIEJNX0NMS0NUUkxfWEJVU19SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfWEJVU19ESVZfRlJBQ19FTgkweDAwMDAwNDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfWEJVU19ESVYJMAogI2RlZmluZSBCTV9DTEtDVFJMX1hCVVNfRElWCTB4MDAwMDAzRkYKQEAgLTE5MiwxMCArMTQzLDYgQEAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9YVEFMX0RJR0NUUkxfQ0xLMU1fR0FURQkweDA4MDAwMDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9USU1ST1RfQ0xLMzJLX0dBVEUJMjYKICNkZWZpbmUgQk1fQ0xLQ1RSTF9YVEFMX1RJTVJPVF9DTEszMktfR0FURQkweDA0MDAwMDAwCi0jZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9SU1JWRDEJMgotI2RlZmluZSBCTV9DTEtDVFJMX1hUQUxfUlNSVkQxCTB4MDNGRkZGRkMKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9YVEFMX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAyKSAmIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDEpCiAjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9ESVZfVUFSVAkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9ESVZfVUFSVAkweDAwMDAwMDAzCiAjZGVmaW5lIEJGX0NMS0NUUkxfWFRBTF9ESVZfVUFSVCh2KSAgXApAQCAtMjA1LDEyICsxNTIsNyBAQAogCiAjZGVmaW5lIEJQX0NMS0NUUkxfUElYX0NMS0dBVEUJMzEKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QSVhfQ0xLR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfUElYX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfUElYX0JVU1kJMHgyMDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX1BJWF9SU1JWRDEJMTMKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QSVhfUlNSVkQxCTB4MUZGRkUwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9QSVhfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDEzKSAmIEJNX0NMS0NUUkxfUElYX1JTUlZEMSkKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QSVhfRElWX0ZSQUNfRU4JMHgwMDAwMTAwMAogI2RlZmluZSBCUF9DTEtDVFJMX1BJWF9ESVYJMAogI2RlZmluZSBCTV9DTEtDVFJMX1BJWF9ESVYJMHgwMDAwMEZGRgpAQCAtMjIxLDEyICsxNjMsNyBAQAogCiAjZGVmaW5lIEJQX0NMS0NUUkxfU1NQX0NMS0dBVEUJMzEKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1BfQ0xLR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfU1NQX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfU1NQX0JVU1kJMHgyMDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX1NTUF9SU1JWRDEJMTAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1BfUlNSVkQxCTB4MUZGRkZDMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9TU1BfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDEwKSAmIEJNX0NMS0NUUkxfU1NQX1JTUlZEMSkKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1BfRElWX0ZSQUNfRU4JMHgwMDAwMDIwMAogI2RlZmluZSBCUF9DTEtDVFJMX1NTUF9ESVYJMAogI2RlZmluZSBCTV9DTEtDVFJMX1NTUF9ESVYJMHgwMDAwMDFGRgpAQCAtMjM3LDEyICsxNzQsNyBAQAogCiAjZGVmaW5lIEJQX0NMS0NUUkxfR1BNSV9DTEtHQVRFCTMxCiAjZGVmaW5lIEJNX0NMS0NUUkxfR1BNSV9DTEtHQVRFCTB4ODAwMDAwMDAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9HUE1JX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfR1BNSV9CVVNZCTB4MjAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9HUE1JX1JTUlZEMQkxMQotI2RlZmluZSBCTV9DTEtDVFJMX0dQTUlfUlNSVkQxCTB4MUZGRkY4MDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9HUE1JX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxMSkgJiBCTV9DTEtDVFJMX0dQTUlfUlNSVkQxKQogI2RlZmluZSBCTV9DTEtDVFJMX0dQTUlfRElWX0ZSQUNfRU4JMHgwMDAwMDQwMAogI2RlZmluZSBCUF9DTEtDVFJMX0dQTUlfRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9HUE1JX0RJVgkweDAwMDAwM0ZGCkBAIC0yNTIsMTAgKzE4NCw2IEBACiAjZGVmaW5lIEhXX0NMS0NUUkxfU1BESUYJKDB4MDAwMDAwOTApCiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TUERJRl9DTEtHQVRFCTB4ODAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9TUERJRl9SU1JWRAkwCi0jZGVmaW5lIEJNX0NMS0NUUkxfU1BESUZfUlNSVkQJMHg3RkZGRkZGRgotI2RlZmluZSBCRl9DTEtDVFJMX1NQRElGX1JTUlZEKHYpICBcCi0JCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9TUERJRl9SU1JWRCkKIAogI2RlZmluZSBIV19DTEtDVFJMX0VNSQkoMHgwMDAwMDBhMCkKIApAQCAtMjY2LDI0ICsxOTQsMTIgQEAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9SRUZfRU1JCTB4MTAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9SRUZfQ1BVCTB4MDgwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9TWU5DX01PREUJMHgwNDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX0VNSV9SU1JWRDMJMTgKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfUlNSVkQzCTB4MDNGQzAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9FTUlfUlNSVkQzKHYpICBcCi0JCSgoKHYpIDw8IDE4KSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMykKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9EQ0NfUkVTWU5DCTB4MDAwMjAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfRENDX1JFU1lOQ19FTkFCTEUJMHgwMDAxMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX0VNSV9SU1JWRDIJMTIKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfUlNSVkQyCTB4MDAwMEYwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9FTUlfUlNSVkQyKHYpICBcCi0JCSgoKHYpIDw8IDEyKSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMikKICNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfRElWX1hUQUwJOAogI2RlZmluZSBCTV9DTEtDVFJMX0VNSV9ESVZfWFRBTAkweDAwMDAwRjAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfRU1JX0RJVl9YVEFMKHYpICBcCiAJCSgoKHYpIDw8IDgpICYgQk1fQ0xLQ1RSTF9FTUlfRElWX1hUQUwpCi0jZGVmaW5lIEJQX0NMS0NUUkxfRU1JX1JTUlZEMQk2Ci0jZGVmaW5lIEJNX0NMS0NUUkxfRU1JX1JTUlZEMQkweDAwMDAwMEMwCi0jZGVmaW5lIEJGX0NMS0NUUkxfRU1JX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCA2KSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMSkKICNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfRElWX0VNSQkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0RJVl9FTUkJMHgwMDAwMDAzRgogI2RlZmluZSBCRl9DTEtDVFJMX0VNSV9ESVZfRU1JKHYpICBcCkBAIC0yOTIsMjIgKzIwOCwxMyBAQAogI2RlZmluZSBIV19DTEtDVFJMX0lSCSgweDAwMDAwMGIwKQogCiAjZGVmaW5lIEJNX0NMS0NUUkxfSVJfQ0xLR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfSVJfUlNSVkQzCTB4NDAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9JUl9BVVRPX0RJVgkweDIwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfSVJfSVJfQlVTWQkweDEwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfSVJfSVJPVl9CVVNZCTB4MDgwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9JUl9SU1JWRDIJMjUKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9JUl9SU1JWRDIJMHgwNjAwMDAwMAotI2RlZmluZSBCRl9DTEtDVFJMX0lSX1JTUlZEMih2KSAgXAotCQkoKCh2KSA8PCAyNSkgJiBCTV9DTEtDVFJMX0lSX1JTUlZEMikKICNkZWZpbmUgQlBfQ0xLQ1RSTF9JUl9JUk9WX0RJVgkxNgogI2RlZmluZSBCTV9DTEtDVFJMX0lSX0lST1ZfRElWCTB4MDFGRjAwMDAKICNkZWZpbmUgQkZfQ0xLQ1RSTF9JUl9JUk9WX0RJVih2KSAgXAogCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX0lSX0lST1ZfRElWKQotI2RlZmluZSBCUF9DTEtDVFJMX0lSX1JTUlZEMQkxMAotI2RlZmluZSBCTV9DTEtDVFJMX0lSX1JTUlZEMQkweDAwMDBGQzAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfSVJfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDEwKSAmIEJNX0NMS0NUUkxfSVJfUlNSVkQxKQogI2RlZmluZSBCUF9DTEtDVFJMX0lSX0lSX0RJVgkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfSVJfSVJfRElWCTB4MDAwMDAzRkYKICNkZWZpbmUgQkZfQ0xLQ1RSTF9JUl9JUl9ESVYodikgIFwKQEAgLTMxNiwxMiArMjIzLDcgQEAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9TQUlGCSgweDAwMDAwMGMwKQogCiAjZGVmaW5lIEJNX0NMS0NUUkxfU0FJRl9DTEtHQVRFCTB4ODAwMDAwMDAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfU0FJRl9CVVNZCTB4MjAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9TQUlGX1JTUlZEMQkxNwotI2RlZmluZSBCTV9DTEtDVFJMX1NBSUZfUlNSVkQxCTB4MUZGRTAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9TQUlGX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxNykgJiBCTV9DTEtDVFJMX1NBSUZfUlNSVkQxKQogI2RlZmluZSBCTV9DTEtDVFJMX1NBSUZfRElWX0ZSQUNfRU4JMHgwMDAxMDAwMAogI2RlZmluZSBCUF9DTEtDVFJMX1NBSUZfRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGX0RJVgkweDAwMDBGRkZGCkBAIC0zMzIsMjAgKzIzNCwxMSBAQAogCiAjZGVmaW5lIEJNX0NMS0NUUkxfVFZfQ0xLX1RWMTA4TV9HQVRFCTB4ODAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9UVl9DTEtfVFZfR0FURQkweDQwMDAwMDAwCi0jZGVmaW5lIEJQX0NMS0NUUkxfVFZfUlNSVkQJMAotI2RlZmluZSBCTV9DTEtDVFJMX1RWX1JTUlZECTB4M0ZGRkZGRkYKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9UVl9SU1JWRCh2KSAgXAotCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfVFZfUlNSVkQpCiAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9FVE0JKDB4MDAwMDAwZTApCiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FVE1fQ0xLR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfRVRNX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfRVRNX0JVU1kJMHgyMDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX0VUTV9SU1JWRDEJNwotI2RlZmluZSBCTV9DTEtDVFJMX0VUTV9SU1JWRDEJMHgxRkZGRkY4MAotI2RlZmluZSBCRl9DTEtDVFJMX0VUTV9SU1JWRDEodikgIFwKLQkJKCgodikgPDwgNykgJiBCTV9DTEtDVFJMX0VUTV9SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfRVRNX0RJVl9GUkFDX0VOCTB4MDAwMDAwNDAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9FVE1fRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FVE1fRElWCTB4MDAwMDAwM0YKQEAgLTM5MywzNiArMjg2LDIzIEBACiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMV9DTEtHQVRFVklECTB4ODAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMV9WSURfU1RBQkxFCTB4NDAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMV9SU1JWRDEJMAotI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMxX1JTUlZEMQkweDNGRkZGRkZGCi0jZGVmaW5lIEJGX0NMS0NUUkxfRlJBQzFfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9GUkFDMV9SU1JWRDEpCiAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9DTEtTRVEJKDB4MDAwMDAxMTApCiAjZGVmaW5lIEhXX0NMS0NUUkxfQ0xLU0VRX1NFVAkoMHgwMDAwMDExNCkKICNkZWZpbmUgSFdfQ0xLQ1RSTF9DTEtTRVFfQ0xSCSgweDAwMDAwMTE4KQogI2RlZmluZSBIV19DTEtDVFJMX0NMS1NFUV9UT0cJKDB4MDAwMDAxMWMpCiAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQxCTkKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQxCTB4RkZGRkZFMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQxKHYpIFwKLQkJKCgodikgPDwgOSkgJiBCTV9DTEtDVFJMX0NMS1NFUV9SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19FVE0JMHgwMDAwMDEwMAogI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfQ1BVCTB4MDAwMDAwODAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0VNSQkweDAwMDAwMDQwCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AJMHgwMDAwMDAyMAogI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfR1BNSQkweDAwMDAwMDEwCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19JUgkweDAwMDAwMDA4Ci0jZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX1JTUlZEMAkweDAwMDAwMDA0CiAjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19QSVgJMHgwMDAwMDAwMgogI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfU0FJRgkweDAwMDAwMDAxCiAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9SRVNFVAkoMHgwMDAwMDEyMCkKIAotI2RlZmluZSBCUF9DTEtDVFJMX1JFU0VUX1JTUlZECTIKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9SRVNFVF9SU1JWRAkweEZGRkZGRkZDCi0jZGVmaW5lIEJGX0NMS0NUUkxfUkVTRVRfUlNSVkQodikgXAotCQkoKCh2KSA8PCAyKSAmIEJNX0NMS0NUUkxfUkVTRVRfUlNSVkQpCiAjZGVmaW5lIEJNX0NMS0NUUkxfUkVTRVRfQ0hJUAkweDAwMDAwMDAyCiAjZGVmaW5lIEJNX0NMS0NUUkxfUkVTRVRfRElHCTB4MDAwMDAwMDEKIApAQCAtNDMyLDEwICszMTIsNiBAQAogI2RlZmluZSBCTV9DTEtDVFJMX1NUQVRVU19DUFVfTElNSVQJMHhDMDAwMDAwMAogI2RlZmluZSBCRl9DTEtDVFJMX1NUQVRVU19DUFVfTElNSVQodikgXAogCQkoKCh2KSA8PCAzMCkgJiBCTV9DTEtDVFJMX1NUQVRVU19DUFVfTElNSVQpCi0jZGVmaW5lIEJQX0NMS0NUUkxfU1RBVFVTX1JTUlZECTAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9TVEFUVVNfUlNSVkQJMHgzRkZGRkZGRgotI2RlZmluZSBCRl9DTEtDVFJMX1NUQVRVU19SU1JWRCh2KSAgXAotCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfU1RBVFVTX1JTUlZEKQogCiAjZGVmaW5lIEhXX0NMS0NUUkxfVkVSU0lPTgkoMHgwMDAwMDE0MCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvcmVncy1jbGtjdHJsLW14MjguaCBiL2FyY2gvYXJtL21hY2gtbXhzL3JlZ3MtY2xrY3RybC1teDI4LmgKaW5kZXggNjYxZGYxOC4uN2QxYjA2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvcmVncy1jbGtjdHJsLW14MjguaAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9yZWdzLWNsa2N0cmwtbXgyOC5oCkBAIC0zMSwxMCArMzEsNiBAQAogI2RlZmluZSBIV19DTEtDVFJMX1BMTDBDVFJMMF9DTFIJKDB4MDAwMDAwMDgpCiAjZGVmaW5lIEhXX0NMS0NUUkxfUExMMENUUkwwX1RPRwkoMHgwMDAwMDAwYykKIAotI2RlZmluZSBCUF9DTEtDVFJMX1BMTDBDVFJMMF9SU1JWRDYJMzAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ2CTB4QzAwMDAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ2KHYpIFwKLQkJKCgodikgPDwgMzApICYgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ2KQogI2RlZmluZSBCUF9DTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMCTI4CiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwwX0xGUl9TRUwJMHgzMDAwMDAwMAogI2RlZmluZSBCRl9DTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMKHYpICBcCkBAIC00MywxMCArMzksNiBAQAogI2RlZmluZSBCVl9DTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMX19USU1FU18yICAgMHgxCiAjZGVmaW5lIEJWX0NMS0NUUkxfUExMMENUUkwwX0xGUl9TRUxfX1RJTUVTXzA1ICAweDIKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwwQ1RSTDBfTEZSX1NFTF9fVU5ERUZJTkVEIDB4MwotI2RlZmluZSBCUF9DTEtDVFJMX1BMTDBDVFJMMF9SU1JWRDUJMjYKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ1CTB4MEMwMDAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ1KHYpICBcCi0JCSgoKHYpIDw8IDI2KSAmIEJNX0NMS0NUUkxfUExMMENUUkwwX1JTUlZENSkKICNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwwQ1RSTDBfQ1BfU0VMCTI0CiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwwX0NQX1NFTAkweDAzMDAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfUExMMENUUkwwX0NQX1NFTCh2KSAgXApAQCAtNTUsMTAgKzQ3LDYgQEAKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwwQ1RSTDBfQ1BfU0VMX19USU1FU18yICAgMHgxCiAjZGVmaW5lIEJWX0NMS0NUUkxfUExMMENUUkwwX0NQX1NFTF9fVElNRVNfMDUgIDB4MgogI2RlZmluZSBCVl9DTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUxfX1VOREVGSU5FRCAweDMKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ0CTIyCi0jZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwwX1JTUlZENAkweDAwQzAwMDAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfUExMMENUUkwwX1JTUlZENCh2KSAgXAotCQkoKCh2KSA8PCAyMikgJiBCTV9DTEtDVFJMX1BMTDBDVFJMMF9SU1JWRDQpCiAjZGVmaW5lIEJQX0NMS0NUUkxfUExMMENUUkwwX0RJVl9TRUwJMjAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfRElWX1NFTAkweDAwMzAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfUExMMENUUkwwX0RJVl9TRUwodikgIFwKQEAgLTY3LDIyICs1NSwxMyBAQAogI2RlZmluZSBCVl9DTEtDVFJMX1BMTDBDVFJMMF9ESVZfU0VMX19MT1dFUiAgICAgMHgxCiAjZGVmaW5lIEJWX0NMS0NUUkxfUExMMENUUkwwX0RJVl9TRUxfX0xPV0VTVCAgICAweDIKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwwQ1RSTDBfRElWX1NFTF9fVU5ERUZJTkVEIDB4MwotI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMF9SU1JWRDMJMHgwMDA4MDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMF9FTl9VU0JfQ0xLUwkweDAwMDQwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwwX1BPV0VSCTB4MDAwMjAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQxCTAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQxCTB4MDAwMUZGRkYKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQxKQogCiAjZGVmaW5lIEhXX0NMS0NUUkxfUExMMENUUkwxCSgweDAwMDAwMDEwKQogCiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwxX0xPQ0sJMHg4MDAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMV9GT1JDRV9MT0NLCTB4NDAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwwQ1RSTDFfUlNSVkQxCTE2Ci0jZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwxX1JTUlZEMQkweDNGRkYwMDAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfUExMMENUUkwxX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX1BMTDBDVFJMMV9SU1JWRDEpCiAjZGVmaW5lIEJQX0NMS0NUUkxfUExMMENUUkwxX0xPQ0tfQ09VTlQJMAogI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMV9MT0NLX0NPVU5UCTB4MDAwMEZGRkYKICNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwwQ1RSTDFfTE9DS19DT1VOVCh2KSAgXApAQCAtOTQsNyArNzMsNiBAQAogI2RlZmluZSBIV19DTEtDVFJMX1BMTDFDVFJMMF9UT0cJKDB4MDAwMDAwMmMpCiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfQ0xLR0FURUVNSQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX1JTUlZENgkweDQwMDAwMDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUwJMjgKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTAkweDMwMDAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUwodikgIFwKQEAgLTEwMywxMCArODEsNiBAQAogI2RlZmluZSBCVl9DTEtDVFJMX1BMTDFDVFJMMF9MRlJfU0VMX19USU1FU18yICAgMHgxCiAjZGVmaW5lIEJWX0NMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUxfX1RJTUVTXzA1ICAweDIKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTF9fVU5ERUZJTkVEIDB4MwotI2RlZmluZSBCUF9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDUJMjYKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfUlNSVkQ1CTB4MEMwMDAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwxQ1RSTDBfUlNSVkQ1KHYpICBcCi0JCSgoKHYpIDw8IDI2KSAmIEJNX0NMS0NUUkxfUExMMUNUUkwwX1JTUlZENSkKICNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwxQ1RSTDBfQ1BfU0VMCTI0CiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX0NQX1NFTAkweDAzMDAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfUExMMUNUUkwwX0NQX1NFTCh2KSAgXApAQCAtMTE1LDEwICs4OSw2IEBACiAjZGVmaW5lIEJWX0NMS0NUUkxfUExMMUNUUkwwX0NQX1NFTF9fVElNRVNfMiAgIDB4MQogI2RlZmluZSBCVl9DTEtDVFJMX1BMTDFDVFJMMF9DUF9TRUxfX1RJTUVTXzA1ICAweDIKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwxQ1RSTDBfQ1BfU0VMX19VTkRFRklORUQgMHgzCi0jZGVmaW5lIEJQX0NMS0NUUkxfUExMMUNUUkwwX1JTUlZENAkyMgotI2RlZmluZSBCTV9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDQJMHgwMEMwMDAwMAotI2RlZmluZSBCRl9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDQodikgIFwKLQkJKCgodikgPDwgMjIpICYgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfUlNSVkQ0KQogI2RlZmluZSBCUF9DTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMCTIwCiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUwJMHgwMDMwMDAwMAogI2RlZmluZSBCRl9DTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMKHYpICBcCkBAIC0xMjcsMjIgKzk3LDEzIEBACiAjZGVmaW5lIEJWX0NMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUxfX0xPV0VSICAgICAweDEKICNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwxQ1RSTDBfRElWX1NFTF9fTE9XRVNUICAgIDB4MgogI2RlZmluZSBCVl9DTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMX19VTkRFRklORUQgMHgzCi0jZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX1JTUlZEMwkweDAwMDgwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX0VOX1VTQl9DTEtTCTB4MDAwNDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfUE9XRVIJMHgwMDAyMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDEJMAotI2RlZmluZSBCTV9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDEJMHgwMDAxRkZGRgotI2RlZmluZSBCRl9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDEodikgIFwKLQkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDEpCiAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9QTEwxQ1RSTDEJKDB4MDAwMDAwMzApCiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDFfTE9DSwkweDgwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwxX0ZPUkNFX0xPQ0sJMHg0MDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX1BMTDFDVFJMMV9SU1JWRDEJMTYKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDFfUlNSVkQxCTB4M0ZGRjAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwxQ1RSTDFfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDE2KSAmIEJNX0NMS0NUUkxfUExMMUNUUkwxX1JTUlZEMSkKICNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwxQ1RSTDFfTE9DS19DT1VOVAkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwxX0xPQ0tfQ09VTlQJMHgwMDAwRkZGRgogI2RlZmluZSBCRl9DTEtDVFJMX1BMTDFDVFJMMV9MT0NLX0NPVU5UKHYpICBcCkBAIC0xNTQsNTEgKzExNSwzMSBAQAogI2RlZmluZSBIV19DTEtDVFJMX1BMTDJDVFJMMF9UT0cJKDB4MDAwMDAwNGMpCiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfQ0xLR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfUExMMkNUUkwwX1JTUlZEMwkweDQwMDAwMDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfUExMMkNUUkwwX0xGUl9TRUwJMjgKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfTEZSX1NFTAkweDMwMDAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfUExMMkNUUkwwX0xGUl9TRUwodikgIFwKIAkJKCgodikgPDwgMjgpICYgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfTEZSX1NFTCkKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfUlNSVkQyCTB4MDgwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfSE9MRF9SSU5HX09GRl9CCTB4MDQwMDAwMDAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwyQ1RSTDBfQ1BfU0VMCTI0CiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMkNUUkwwX0NQX1NFTAkweDAzMDAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfUExMMkNUUkwwX0NQX1NFTCh2KSAgXAogCQkoKCh2KSA8PCAyNCkgJiBCTV9DTEtDVFJMX1BMTDJDVFJMMF9DUF9TRUwpCiAjZGVmaW5lIEJNX0NMS0NUUkxfUExMMkNUUkwwX1BPV0VSCTB4MDA4MDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwyQ1RSTDBfUlNSVkQxCTAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfUlNSVkQxCTB4MDA3RkZGRkYKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwyQ1RSTDBfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfUlNSVkQxKQogCiAjZGVmaW5lIEhXX0NMS0NUUkxfQ1BVCSgweDAwMDAwMDUwKQogI2RlZmluZSBIV19DTEtDVFJMX0NQVV9TRVQJKDB4MDAwMDAwNTQpCiAjZGVmaW5lIEhXX0NMS0NUUkxfQ1BVX0NMUgkoMHgwMDAwMDA1OCkKICNkZWZpbmUgSFdfQ0xLQ1RSTF9DUFVfVE9HCSgweDAwMDAwMDVjKQogCi0jZGVmaW5lIEJQX0NMS0NUUkxfQ1BVX1JTUlZENQkzMAotI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9SU1JWRDUJMHhDMDAwMDAwMAotI2RlZmluZSBCRl9DTEtDVFJMX0NQVV9SU1JWRDUodikgXAotCQkoKCh2KSA8PCAzMCkgJiBCTV9DTEtDVFJMX0NQVV9SU1JWRDUpCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX0JVU1lfUkVGX1hUQUwJMHgyMDAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9CVVNZX1JFRl9DUFUJMHgxMDAwMDAwMAotI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9SU1JWRDQJMHgwODAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTF9GUkFDX0VOCTB4MDQwMDAwMDAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfRElWX1hUQUwJMTYKICNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfRElWX1hUQUwJMHgwM0ZGMDAwMAogI2RlZmluZSBCRl9DTEtDVFJMX0NQVV9ESVZfWFRBTCh2KSAgXAogCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTCkKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfUlNSVkQzCTEzCi0jZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX1JTUlZEMwkweDAwMDBFMDAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfQ1BVX1JTUlZEMyh2KSAgXAotCQkoKCh2KSA8PCAxMykgJiBCTV9DTEtDVFJMX0NQVV9SU1JWRDMpCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX0lOVEVSUlVQVF9XQUlUCTB4MDAwMDEwMDAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfUlNSVkQyCTB4MDAwMDA4MDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfRElWX0NQVV9GUkFDX0VOCTB4MDAwMDA0MDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfUlNSVkQxCTYKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfUlNSVkQxCTB4MDAwMDAzQzAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9DUFVfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDYpICYgQk1fQ0xLQ1RSTF9DUFVfUlNSVkQxKQogI2RlZmluZSBCUF9DTEtDVFJMX0NQVV9ESVZfQ1BVCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfRElWX0NQVQkweDAwMDAwMDNGCiAjZGVmaW5lIEJGX0NMS0NUUkxfQ1BVX0RJVl9DUFUodikgIFwKQEAgLTIxMiw3ICsxNTMsNiBAQAogI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfQVNNX0JVU1kJMHg4MDAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfRENQX0FTX0VOQUJMRQkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19QWFBfQVNfRU5BQkxFCTB4MjAwMDAwMDAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX1JTUlZEMgkweDEwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19BU01fRU1JUE9SVF9BU19FTkFCTEUJMHgwODAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfQVBCSERNQV9BU19FTkFCTEUJMHgwNDAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfQVBCWERNQV9BU19FTkFCTEUJMHgwMjAwMDAwMApAQCAtMjMyLDEwICsxNzIsNiBAQAogI2RlZmluZSBCVl9DTEtDVFJMX0hCVVNfU0xPV19ESVZfX0JZOCAgMHgzCiAjZGVmaW5lIEJWX0NMS0NUUkxfSEJVU19TTE9XX0RJVl9fQlkxNiAweDQKICNkZWZpbmUgQlZfQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX19CWTMyIDB4NQotI2RlZmluZSBCUF9DTEtDVFJMX0hCVVNfUlNSVkQxCTYKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX1JTUlZEMQkweDAwMDBGRkMwCi0jZGVmaW5lIEJGX0NMS0NUUkxfSEJVU19SU1JWRDEodikgIFwKLQkJKCgodikgPDwgNikgJiBCTV9DTEtDVFJMX0hCVVNfUlNSVkQxKQogI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfRElWX0ZSQUNfRU4JMHgwMDAwMDAyMAogI2RlZmluZSBCUF9DTEtDVFJMX0hCVVNfRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0RJVgkweDAwMDAwMDFGCkBAIC0yNDUsMTAgKzE4MSw2IEBACiAjZGVmaW5lIEhXX0NMS0NUUkxfWEJVUwkoMHgwMDAwMDA3MCkKIAogI2RlZmluZSBCTV9DTEtDVFJMX1hCVVNfQlVTWQkweDgwMDAwMDAwCi0jZGVmaW5lIEJQX0NMS0NUUkxfWEJVU19SU1JWRDEJMTIKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9YQlVTX1JTUlZEMQkweDdGRkZGMDAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfWEJVU19SU1JWRDEodikgIFwKLQkJKCgodikgPDwgMTIpICYgQk1fQ0xLQ1RSTF9YQlVTX1JTUlZEMSkKICNkZWZpbmUgQk1fQ0xLQ1RSTF9YQlVTX0FVVE9fQ0xFQVJfRElWX0VOQUJMRQkweDAwMDAwODAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfWEJVU19ESVZfRlJBQ19FTgkweDAwMDAwNDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfWEJVU19ESVYJMApAQCAtMjYzLDE5ICsxOTUsMTAgQEAKIAogI2RlZmluZSBCUF9DTEtDVFJMX1hUQUxfVUFSVF9DTEtfR0FURQkzMQogI2RlZmluZSBCTV9DTEtDVFJMX1hUQUxfVUFSVF9DTEtfR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDMJMHg0MDAwMDAwMAogI2RlZmluZSBCUF9DTEtDVFJMX1hUQUxfUFdNX0NMSzI0TV9HQVRFCTI5CiAjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9QV01fQ0xLMjRNX0dBVEUJMHgyMDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX1hUQUxfUlNSVkQyCTI3Ci0jZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDIJMHgxODAwMDAwMAotI2RlZmluZSBCRl9DTEtDVFJMX1hUQUxfUlNSVkQyKHYpICBcCi0JCSgoKHYpIDw8IDI3KSAmIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDIpCiAjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9USU1ST1RfQ0xLMzJLX0dBVEUJMjYKICNkZWZpbmUgQk1fQ0xLQ1RSTF9YVEFMX1RJTVJPVF9DTEszMktfR0FURQkweDA0MDAwMDAwCi0jZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9SU1JWRDEJMgotI2RlZmluZSBCTV9DTEtDVFJMX1hUQUxfUlNSVkQxCTB4MDNGRkZGRkMKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9YVEFMX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAyKSAmIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDEpCiAjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9ESVZfVUFSVAkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9ESVZfVUFSVAkweDAwMDAwMDAzCiAjZGVmaW5lIEJGX0NMS0NUUkxfWFRBTF9ESVZfVUFSVCh2KSAgXApAQCAtMjg1LDEyICsyMDgsNyBAQAogCiAjZGVmaW5lIEJQX0NMS0NUUkxfU1NQMF9DTEtHQVRFCTMxCiAjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMF9DTEtHQVRFCTB4ODAwMDAwMDAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AwX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMF9CVVNZCTB4MjAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9TU1AwX1JTUlZEMQkxMAotI2RlZmluZSBCTV9DTEtDVFJMX1NTUDBfUlNSVkQxCTB4MUZGRkZDMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9TU1AwX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxMCkgJiBCTV9DTEtDVFJMX1NTUDBfUlNSVkQxKQogI2RlZmluZSBCTV9DTEtDVFJMX1NTUDBfRElWX0ZSQUNfRU4JMHgwMDAwMDIwMAogI2RlZmluZSBCUF9DTEtDVFJMX1NTUDBfRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AwX0RJVgkweDAwMDAwMUZGCkBAIC0zMDEsMTIgKzIxOSw3IEBACiAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9TU1AxX0NMS0dBVEUJMzEKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AxX0NMS0dBVEUJMHg4MDAwMDAwMAotI2RlZmluZSBCTV9DTEtDVFJMX1NTUDFfUlNSVkQyCTB4NDAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AxX0JVU1kJMHgyMDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX1NTUDFfUlNSVkQxCTEwCi0jZGVmaW5lIEJNX0NMS0NUUkxfU1NQMV9SU1JWRDEJMHgxRkZGRkMwMAotI2RlZmluZSBCRl9DTEtDVFJMX1NTUDFfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDEwKSAmIEJNX0NMS0NUUkxfU1NQMV9SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMV9ESVZfRlJBQ19FTgkweDAwMDAwMjAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfU1NQMV9ESVYJMAogI2RlZmluZSBCTV9DTEtDVFJMX1NTUDFfRElWCTB4MDAwMDAxRkYKQEAgLTMxNywxMiArMjMwLDcgQEAKIAogI2RlZmluZSBCUF9DTEtDVFJMX1NTUDJfQ0xLR0FURQkzMQogI2RlZmluZSBCTV9DTEtDVFJMX1NTUDJfQ0xLR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfU1NQMl9SU1JWRDIJMHg0MDAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX1NTUDJfQlVTWQkweDIwMDAwMDAwCi0jZGVmaW5lIEJQX0NMS0NUUkxfU1NQMl9SU1JWRDEJMTAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AyX1JTUlZEMQkweDFGRkZGQzAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfU1NQMl9SU1JWRDEodikgIFwKLQkJKCgodikgPDwgMTApICYgQk1fQ0xLQ1RSTF9TU1AyX1JTUlZEMSkKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AyX0RJVl9GUkFDX0VOCTB4MDAwMDAyMDAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9TU1AyX0RJVgkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMl9ESVYJMHgwMDAwMDFGRgpAQCAtMzMzLDEyICsyNDEsNyBAQAogCiAjZGVmaW5lIEJQX0NMS0NUUkxfU1NQM19DTEtHQVRFCTMxCiAjZGVmaW5lIEJNX0NMS0NUUkxfU1NQM19DTEtHQVRFCTB4ODAwMDAwMDAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AzX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfU1NQM19CVVNZCTB4MjAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9TU1AzX1JTUlZEMQkxMAotI2RlZmluZSBCTV9DTEtDVFJMX1NTUDNfUlNSVkQxCTB4MUZGRkZDMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9TU1AzX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxMCkgJiBCTV9DTEtDVFJMX1NTUDNfUlNSVkQxKQogI2RlZmluZSBCTV9DTEtDVFJMX1NTUDNfRElWX0ZSQUNfRU4JMHgwMDAwMDIwMAogI2RlZmluZSBCUF9DTEtDVFJMX1NTUDNfRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AzX0RJVgkweDAwMDAwMUZGCkBAIC0zNDksMTIgKzI1Miw3IEBACiAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9HUE1JX0NMS0dBVEUJMzEKICNkZWZpbmUgQk1fQ0xLQ1RSTF9HUE1JX0NMS0dBVEUJMHg4MDAwMDAwMAotI2RlZmluZSBCTV9DTEtDVFJMX0dQTUlfUlNSVkQyCTB4NDAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9HUE1JX0JVU1kJMHgyMDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX0dQTUlfUlNSVkQxCTExCi0jZGVmaW5lIEJNX0NMS0NUUkxfR1BNSV9SU1JWRDEJMHgxRkZGRjgwMAotI2RlZmluZSBCRl9DTEtDVFJMX0dQTUlfUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDExKSAmIEJNX0NMS0NUUkxfR1BNSV9SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfR1BNSV9ESVZfRlJBQ19FTgkweDAwMDAwNDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfR1BNSV9ESVYJMAogI2RlZmluZSBCTV9DTEtDVFJMX0dQTUlfRElWCTB4MDAwMDAzRkYKQEAgLTM2NSwxMCArMjYzLDYgQEAKIAogI2RlZmluZSBCUF9DTEtDVFJMX1NQRElGX0NMS0dBVEUJMzEKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TUERJRl9DTEtHQVRFCTB4ODAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9TUERJRl9SU1JWRAkwCi0jZGVmaW5lIEJNX0NMS0NUUkxfU1BESUZfUlNSVkQJMHg3RkZGRkZGRgotI2RlZmluZSBCRl9DTEtDVFJMX1NQRElGX1JTUlZEKHYpICBcCi0JCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9TUERJRl9SU1JWRCkKIAogI2RlZmluZSBIV19DTEtDVFJMX0VNSQkoMHgwMDAwMDBmMCkKIApAQCAtMzc5LDI0ICsyNzMsMTIgQEAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9SRUZfRU1JCTB4MTAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9SRUZfQ1BVCTB4MDgwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9TWU5DX01PREUJMHgwNDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX0VNSV9SU1JWRDMJMTgKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfUlNSVkQzCTB4MDNGQzAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9FTUlfUlNSVkQzKHYpICBcCi0JCSgoKHYpIDw8IDE4KSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMykKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9EQ0NfUkVTWU5DCTB4MDAwMjAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfRENDX1JFU1lOQ19FTkFCTEUJMHgwMDAxMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX0VNSV9SU1JWRDIJMTIKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfUlNSVkQyCTB4MDAwMEYwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9FTUlfUlNSVkQyKHYpICBcCi0JCSgoKHYpIDw8IDEyKSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMikKICNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfRElWX1hUQUwJOAogI2RlZmluZSBCTV9DTEtDVFJMX0VNSV9ESVZfWFRBTAkweDAwMDAwRjAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfRU1JX0RJVl9YVEFMKHYpICBcCiAJCSgoKHYpIDw8IDgpICYgQk1fQ0xLQ1RSTF9FTUlfRElWX1hUQUwpCi0jZGVmaW5lIEJQX0NMS0NUUkxfRU1JX1JTUlZEMQk2Ci0jZGVmaW5lIEJNX0NMS0NUUkxfRU1JX1JTUlZEMQkweDAwMDAwMEMwCi0jZGVmaW5lIEJGX0NMS0NUUkxfRU1JX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCA2KSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMSkKICNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfRElWX0VNSQkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0RJVl9FTUkJMHgwMDAwMDAzRgogI2RlZmluZSBCRl9DTEtDVFJMX0VNSV9ESVZfRU1JKHYpICBcCkBAIC00MDYsMTIgKzI4OCw3IEBACiAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9TQUlGMF9DTEtHQVRFCTMxCiAjZGVmaW5lIEJNX0NMS0NUUkxfU0FJRjBfQ0xLR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfU0FJRjBfUlNSVkQyCTB4NDAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGMF9CVVNZCTB4MjAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9TQUlGMF9SU1JWRDEJMTcKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGMF9SU1JWRDEJMHgxRkZFMDAwMAotI2RlZmluZSBCRl9DTEtDVFJMX1NBSUYwX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxNykgJiBCTV9DTEtDVFJMX1NBSUYwX1JTUlZEMSkKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGMF9ESVZfRlJBQ19FTgkweDAwMDEwMDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfU0FJRjBfRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGMF9ESVYJMHgwMDAwRkZGRgpAQCAtNDIyLDEyICsyOTksNyBAQAogCiAjZGVmaW5lIEJQX0NMS0NUUkxfU0FJRjFfQ0xLR0FURQkzMQogI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYxX0NMS0dBVEUJMHg4MDAwMDAwMAotI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYxX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfU0FJRjFfQlVTWQkweDIwMDAwMDAwCi0jZGVmaW5lIEJQX0NMS0NUUkxfU0FJRjFfUlNSVkQxCTE3Ci0jZGVmaW5lIEJNX0NMS0NUUkxfU0FJRjFfUlNSVkQxCTB4MUZGRTAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9TQUlGMV9SU1JWRDEodikgIFwKLQkJKCgodikgPDwgMTcpICYgQk1fQ0xLQ1RSTF9TQUlGMV9SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfU0FJRjFfRElWX0ZSQUNfRU4JMHgwMDAxMDAwMAogI2RlZmluZSBCUF9DTEtDVFJMX1NBSUYxX0RJVgkwCiAjZGVmaW5lIEJNX0NMS0NUUkxfU0FJRjFfRElWCTB4MDAwMEZGRkYKQEAgLTQzOCwxMiArMzEwLDcgQEAKIAogI2RlZmluZSBCUF9DTEtDVFJMX0RJU19MQ0RJRl9DTEtHQVRFCTMxCiAjZGVmaW5lIEJNX0NMS0NUUkxfRElTX0xDRElGX0NMS0dBVEUJMHg4MDAwMDAwMAotI2RlZmluZSBCTV9DTEtDVFJMX0RJU19MQ0RJRl9SU1JWRDIJMHg0MDAwMDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX0RJU19MQ0RJRl9CVVNZCTB4MjAwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9ESVNfTENESUZfUlNSVkQxCTE0Ci0jZGVmaW5lIEJNX0NMS0NUUkxfRElTX0xDRElGX1JTUlZEMQkweDFGRkZDMDAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfRElTX0xDRElGX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxNCkgJiBCTV9DTEtDVFJMX0RJU19MQ0RJRl9SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfRElTX0xDRElGX0RJVl9GUkFDX0VOCTB4MDAwMDIwMDAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9ESVNfTENESUZfRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9ESVNfTENESUZfRElWCTB4MDAwMDFGRkYKQEAgLTQ1MywxMiArMzIwLDcgQEAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9FVE0JKDB4MDAwMDAxMzApCiAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FVE1fQ0xLR0FURQkweDgwMDAwMDAwCi0jZGVmaW5lIEJNX0NMS0NUUkxfRVRNX1JTUlZEMgkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfRVRNX0JVU1kJMHgyMDAwMDAwMAotI2RlZmluZSBCUF9DTEtDVFJMX0VUTV9SU1JWRDEJOAotI2RlZmluZSBCTV9DTEtDVFJMX0VUTV9SU1JWRDEJMHgxRkZGRkYwMAotI2RlZmluZSBCRl9DTEtDVFJMX0VUTV9SU1JWRDEodikgIFwKLQkJKCgodikgPDwgOCkgJiBCTV9DTEtDVFJMX0VUTV9SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfRVRNX0RJVl9GUkFDX0VOCTB4MDAwMDAwODAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9FVE1fRElWCTAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FVE1fRElWCTB4MDAwMDAwN0YKQEAgLTQ3MSw3ICszMzMsNiBAQAogI2RlZmluZSBCUF9DTEtDVFJMX0VORVRfRElTQUJMRQkzMAogI2RlZmluZSBCTV9DTEtDVFJMX0VORVRfRElTQUJMRQkweDQwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfRU5FVF9TVEFUVVMJMHgyMDAwMDAwMAotI2RlZmluZSBCTV9DTEtDVFJMX0VORVRfUlNSVkQxCTB4MTAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTkVUX0JVU1lfVElNRQkweDA4MDAwMDAwCiAjZGVmaW5lIEJQX0NMS0NUUkxfRU5FVF9ESVZfVElNRQkyMQogI2RlZmluZSBCTV9DTEtDVFJMX0VORVRfRElWX1RJTUUJMHgwN0UwMDAwMApAQCAtNDkzLDM3ICszNTQsMjMgQEAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9FTkVUX0NMS19PVVRfRU4JMHgwMDA0MDAwMAogI2RlZmluZSBCTV9DTEtDVFJMX0VORVRfUkVTRVRfQllfU1dfQ0hJUAkweDAwMDIwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfRU5FVF9SRVNFVF9CWV9TVwkweDAwMDEwMDAwCi0jZGVmaW5lIEJQX0NMS0NUUkxfRU5FVF9SU1JWRDAJMAotI2RlZmluZSBCTV9DTEtDVFJMX0VORVRfUlNSVkQwCTB4MDAwMEZGRkYKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9FTkVUX1JTUlZEMCh2KSAgXAotCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfRU5FVF9SU1JWRDApCiAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9IU0FEQwkoMHgwMDAwMDE1MCkKIAotI2RlZmluZSBCTV9DTEtDVFJMX0hTQURDX1JTUlZEMgkweDgwMDAwMDAwCiAjZGVmaW5lIEJNX0NMS0NUUkxfSFNBRENfUkVTRVRCCTB4NDAwMDAwMDAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9IU0FEQ19GUkVRRElWCTI4CiAjZGVmaW5lIEJNX0NMS0NUUkxfSFNBRENfRlJFUURJVgkweDMwMDAwMDAwCiAjZGVmaW5lIEJGX0NMS0NUUkxfSFNBRENfRlJFUURJVih2KSAgXAogCQkoKCh2KSA8PCAyOCkgJiBCTV9DTEtDVFJMX0hTQURDX0ZSRVFESVYpCi0jZGVmaW5lIEJQX0NMS0NUUkxfSFNBRENfUlNSVkQxCTAKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9IU0FEQ19SU1JWRDEJMHgwRkZGRkZGRgotI2RlZmluZSBCRl9DTEtDVFJMX0hTQURDX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfSFNBRENfUlNSVkQxKQogCiAjZGVmaW5lIEhXX0NMS0NUUkxfRkxFWENBTgkoMHgwMDAwMDE2MCkKIAotI2RlZmluZSBCTV9DTEtDVFJMX0ZMRVhDQU5fUlNSVkQyCTB4ODAwMDAwMDAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9GTEVYQ0FOX1NUT1BfQ0FOMAkzMAogI2RlZmluZSBCTV9DTEtDVFJMX0ZMRVhDQU5fU1RPUF9DQU4wCTB4NDAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9GTEVYQ0FOX0NBTjBfU1RBVFVTCTB4MjAwMDAwMDAKICNkZWZpbmUgQlBfQ0xLQ1RSTF9GTEVYQ0FOX1NUT1BfQ0FOMQkyOAogI2RlZmluZSBCTV9DTEtDVFJMX0ZMRVhDQU5fU1RPUF9DQU4xCTB4MTAwMDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9GTEVYQ0FOX0NBTjFfU1RBVFVTCTB4MDgwMDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9GTEVYQ0FOX1JTUlZEMQkwCi0jZGVmaW5lIEJNX0NMS0NUUkxfRkxFWENBTl9SU1JWRDEJMHgwN0ZGRkZGRgotI2RlZmluZSBCRl9DTEtDVFJMX0ZMRVhDQU5fUlNSVkQxKHYpICBcCi0JCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9GTEVYQ0FOX1JTUlZEMSkKIAogI2RlZmluZSBIV19DTEtDVFJMX0ZSQUMwCSgweDAwMDAwMWIwKQogI2RlZmluZSBIV19DTEtDVFJMX0ZSQUMwX1NFVAkoMHgwMDAwMDFiNCkKQEAgLTU2NCwxMCArNDExLDYgQEAKICNkZWZpbmUgSFdfQ0xLQ1RSTF9GUkFDMV9DTFIJKDB4MDAwMDAxYzgpCiAjZGVmaW5lIEhXX0NMS0NUUkxfRlJBQzFfVE9HCSgweDAwMDAwMWNjKQogCi0jZGVmaW5lIEJQX0NMS0NUUkxfRlJBQzFfUlNSVkQyCTI0Ci0jZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzFfUlNSVkQyCTB4RkYwMDAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9GUkFDMV9SU1JWRDIodikgXAotCQkoKCh2KSA8PCAyNCkgJiBCTV9DTEtDVFJMX0ZSQUMxX1JTUlZEMikKICNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMV9DTEtHQVRFR1BNSQkyMwogI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMxX0NMS0dBVEVHUE1JCTB4MDA4MDAwMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMV9HUE1JX1NUQUJMRQkweDAwNDAwMDAwCkBAIC01OTUsMjIgKzQzOCwxMCBAQAogI2RlZmluZSBIV19DTEtDVFJMX0NMS1NFUV9DTFIJKDB4MDAwMDAxZDgpCiAjZGVmaW5lIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRwkoMHgwMDAwMDFkYykKIAotI2RlZmluZSBCUF9DTEtDVFJMX0NMS1NFUV9SU1JWRDAJMTkKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQwCTB4RkZGODAwMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQwKHYpIFwKLQkJKCgodikgPDwgMTkpICYgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQwKQogI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfQ1BVCTB4MDAwNDAwMDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQxCTE1Ci0jZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX1JTUlZEMQkweDAwMDM4MDAwCi0jZGVmaW5lIEJGX0NMS0NUUkxfQ0xLU0VRX1JTUlZEMSh2KSAgXAotCQkoKCh2KSA8PCAxNSkgJiBCTV9DTEtDVFJMX0NMS1NFUV9SU1JWRDEpCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19ESVNfTENESUYJMHgwMDAwNDAwMAogI2RlZmluZSBCVl9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfRElTX0xDRElGX19CWVBBU1MgMHgxCiAjZGVmaW5lIEJWX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19ESVNfTENESUZfX1BGRCAgICAweDAKLSNkZWZpbmUgQlBfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQyCTkKLSNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQyCTB4MDAwMDNFMDAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQyKHYpICBcCi0JCSgoKHYpIDw8IDkpICYgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQyKQogI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfRVRNCTB4MDAwMDAxMDAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0VNSQkweDAwMDAwMDgwCiAjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AzCTB4MDAwMDAwNDAKQEAgLTYyMywxMCArNDU0LDYgQEAKIAogI2RlZmluZSBIV19DTEtDVFJMX1JFU0VUCSgweDAwMDAwMWUwKQogCi0jZGVmaW5lIEJQX0NMS0NUUkxfUkVTRVRfUlNSVkQJNgotI2RlZmluZSBCTV9DTEtDVFJMX1JFU0VUX1JTUlZECTB4RkZGRkZGQzAKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9SRVNFVF9SU1JWRCh2KSBcCi0JCSgoKHYpIDw8IDYpICYgQk1fQ0xLQ1RSTF9SRVNFVF9SU1JWRCkKICNkZWZpbmUgQk1fQ0xLQ1RSTF9SRVNFVF9XRE9HX1BPUl9ESVNBQkxFCTB4MDAwMDAwMjAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9SRVNFVF9FWFRFUk5BTF9SRVNFVF9FTkFCTEUJMHgwMDAwMDAxMAogI2RlZmluZSBCTV9DTEtDVFJMX1JFU0VUX1RIRVJNQUxfUkVTRVRfRU5BQkxFCTB4MDAwMDAwMDgKQEAgLTY0MCwxMCArNDY3LDYgQEAKICNkZWZpbmUgQk1fQ0xLQ1RSTF9TVEFUVVNfQ1BVX0xJTUlUCTB4QzAwMDAwMDAKICNkZWZpbmUgQkZfQ0xLQ1RSTF9TVEFUVVNfQ1BVX0xJTUlUKHYpIFwKIAkJKCgodikgPDwgMzApICYgQk1fQ0xLQ1RSTF9TVEFUVVNfQ1BVX0xJTUlUKQotI2RlZmluZSBCUF9DTEtDVFJMX1NUQVRVU19SU1JWRAkwCi0jZGVmaW5lIEJNX0NMS0NUUkxfU1RBVFVTX1JTUlZECTB4M0ZGRkZGRkYKLSNkZWZpbmUgQkZfQ0xLQ1RSTF9TVEFUVVNfUlNSVkQodikgIFwKLQkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1NUQVRVU19SU1JWRCkKIAogI2RlZmluZSBIV19DTEtDVFJMX1ZFUlNJT04JKDB4MDAwMDAyMDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL3N5c3RlbS5jIGIvYXJjaC9hcm0vbWFjaC1teHMvc3lzdGVtLmMKaW5kZXggOTM0M2Q3ZS4uMjBlYzNiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvc3lzdGVtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvc3lzdGVtLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTEzNSwzICsxMzYsNCBAQAogCXByX2VycigiJXMoJXApOiBtb2R1bGUgcmVzZXQgdGltZW91dFxuIiwgX19mdW5jX18sIHJlc2V0X2FkZHIpOwogCXJldHVybiAtRVRJTUVET1VUOwogfQorRVhQT1JUX1NZTUJPTChteHNfcmVzZXRfYmxvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKaW5kZXggYmE2MDA5Zi4uYWY5ODExNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiAjIENvbW1vbiBzdXBwb3J0CiBvYmoteSA6PSBpby5vIGlkLm8gc3JhbS5vIHRpbWUubyBpcnEubyBtdXgubyBmbGFzaC5vIHNlcmlhbC5vIGRldmljZXMubyBkbWEubwotb2JqLXkgKz0gY2xvY2subyBjbG9ja19kYXRhLm8gb3BwX2RhdGEubworb2JqLXkgKz0gY2xvY2subyBjbG9ja19kYXRhLm8gb3BwX2RhdGEubyByZXNldC5vCiAKIG9iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCmluZGV4IDIyY2M4YzguLmRlODhjOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgYW1zX2RlbHRhX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGFtc19kZWx0YV9sY2RfY29uZmlnID0gewogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKIApAQCAtMTc1LDcgKzE3NSw3IEBACiAJLnBpbnNbMF0JPSAyLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgYW1zX2RlbHRhX2NvbmZpZ1tdID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgYW1zX2RlbHRhX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJeyBPTUFQX1RBR19MQ0QsCQkmYW1zX2RlbHRhX2xjZF9jb25maWcgfSwKIH07CiAKQEAgLTIwOCwxNCArMjA4LDE0IEBACiAJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShhbXNfZGVsdGFfa2V5bWFwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGFtc19kZWx0YV9rcF9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgYW1zX2RlbHRhX2twX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkucm93cwkJPSA4LAogCS5jb2xzCQk9IDgsCiAJLmtleW1hcF9kYXRhCT0gJmFtc19kZWx0YV9rZXltYXBfZGF0YSwKIAkuZGVsYXkJCT0gOSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFtc19kZWx0YV9rcF9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhbXNfZGVsdGFfa3BfZGV2aWNlIF9faW5pdGRhdGEgPSB7CiAJLm5hbWUJCT0gIm9tYXAta2V5cGFkIiwKIAkuaWQJCT0gLTEsCiAJLmRldgkJPSB7CkBAIC0yMjUsMTIgKzIyNSwxMiBAQAogCS5yZXNvdXJjZQk9IGFtc19kZWx0YV9rcF9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhbXNfZGVsdGFfbGNkX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFtc19kZWx0YV9sY2RfZGV2aWNlIF9faW5pdGRhdGEgPSB7CiAJLm5hbWUJPSAibGNkX2Ftc19kZWx0YSIsCiAJLmlkCT0gLTEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhbXNfZGVsdGFfbGVkX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFtc19kZWx0YV9sZWRfZGV2aWNlIF9faW5pdGRhdGEgPSB7CiAJLm5hbWUJPSAiYW1zLWRlbHRhLWxlZCIsCiAJLmlkCT0gLTEKIH07CkBAIC0yNTksNyArMjU5LDcgQEAKICNkZWZpbmUgYW1zX2RlbHRhX2NhbWVyYV9wb3dlcglOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgX19pbml0ZGF0YSBhbXNfZGVsdGFfaWNsaW5rID0geworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgYW1zX2RlbHRhX2ljbGluayA9IHsKIAkuYnVzX2lkICAgICAgICAgPSAwLAkvKiBPTUFQMSBTb0MgY2FtZXJhIGJ1cyAqLwogCS5pMmNfYWRhcHRlcl9pZCA9IDEsCiAJLmJvYXJkX2luZm8gICAgID0gJmFtc19kZWx0YV9jYW1lcmFfYm9hcmRfaW5mb1swXSwKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCS5wb3dlcgkJPSBhbXNfZGVsdGFfY2FtZXJhX3Bvd2VyLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYW1zX2RlbHRhX2NhbWVyYV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhbXNfZGVsdGFfY2FtZXJhX2RldmljZSBfX2luaXRkYXRhID0gewogCS5uYW1lICAgPSAic29jLWNhbWVyYS1wZHJ2IiwKIAkuaWQgICAgID0gMCwKIAkuZGV2ICAgID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYwppbmRleCAwZWZiOWRiLi44N2YxNzNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYwpAQCAtMjg3LDExICsyODcsMTEgQEAKIAkmbGNkX2RldmljZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGZzYW1wbGVfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgZnNhbXBsZV9sY2RfY29uZmlnID0gewogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgZnNhbXBsZV9jb25maWdbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGZzYW1wbGVfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAl7IE9NQVBfVEFHX0xDRCwJCSZmc2FtcGxlX2xjZF9jb25maWcgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwppbmRleCAyOGI4NGFhLi5iYTNiZDA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmgyX3BhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAotc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBoMl9uYW5kX3BsYXRkYXRhID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgaDJfbmFuZF9wbGF0ZGF0YSA9IHsKIAkuY2hpcAk9IHsKIAkJLm5yX2NoaXBzCQk9IDEsCiAJCS5jaGlwX29mZnNldAkJPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCmluZGV4IGRiYzhiOGQuLmFjNDg2NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIG5hbmRfcGxhdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBuYW5kX3BsYXRkYXRhID0gewogCS5jaGlwCT0gewogCQkubnJfY2hpcHMJCT0gMSwKIAkJLmNoaXBfb2Zmc2V0CQk9IDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1odGNoZXJhbGQuYwppbmRleCBmMmM1YzU4Li5iYTA1YTUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaHRjaGVyYWxkLmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCX0sCiB9OwogCi1zdHJ1Y3QgaHRjcGxkX2NoaXBfcGxhdGZvcm1fZGF0YSBodGNwbGRfY2hpcHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaHRjcGxkX2NoaXBfcGxhdGZvcm1fZGF0YSBodGNwbGRfY2hpcHNbXSA9IHsKIAlbMF0gPSB7CiAJCS5hZGRyCQk9IDB4MDMsCiAJCS5yZXNldAkJPSAweDA0LApAQCAtMzY2LDcgKzM2Niw3IEBACiAJfSwKIH07CiAKLXN0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhIGh0Y3BsZF9wZmRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGh0Y3BsZF9jb3JlX3BsYXRmb3JtX2RhdGEgaHRjcGxkX3BmZGF0YSA9IHsKIAkuaW50X3Jlc2V0X2dwaW9faGkgPSBIVENQTERfR1BJT19JTlRfUkVTRVRfSEksCiAJLmludF9yZXNldF9ncGlvX2xvID0gSFRDUExEX0dQSU9fSU5UX1JFU0VUX0xPLAogCS5pMmNfYWRhcHRlcl9pZAkgICA9IDEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBhMzZlNjc0Li4yZDliOGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19kYXRhW09NQVAxNlhYX05SX01NQ107CiAKLXZvaWQgX19pbml0IGlubm92YXRvcl9tbWNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGlubm92YXRvcl9tbWNfaW5pdCh2b2lkKQogewogCW1tY19kYXRhWzBdID0gJm1tYzFfZGF0YTsKIAlvbWFwMV9pbml0X21tYyhtbWNfZGF0YSwgT01BUDE1WFhfTlJfTU1DKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYwppbmRleCBkMjFmMDlkLi5jZmQwODQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkuc2h1dGRvd24gPSBtaXBpZF9zaHV0ZG93biwKIH07CiAKLXN0YXRpYyB2b2lkIG1pcGlkX2Rldl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbWlwaWRfZGV2X2luaXQodm9pZCkKIHsKIAljb25zdCBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnICpjb25mOwogCkBAIC0xMjYsNyArMTI2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFkczc4NDZfZGV2X2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBhZHM3ODQ2X2Rldl9pbml0KHZvaWQpCiB7CiAJaWYgKGdwaW9fcmVxdWVzdChBRFM3ODQ2X1BFTkRPV05fR1BJTywgIkFEUzc4NDYgcGVuZG93biIpIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgYWRzNzg0NiBwZW4gZG93biBHUElPXG4iKTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogCS50ZV9jb25uZWN0ZWQJCT0gMSwKIH07CiAKLXN0YXRpYyB2b2lkIGh3YTc0Ml9kZXZfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGh3YTc0Ml9kZXZfaW5pdCh2b2lkKQogewogCWNsa19hZGRfYWxpYXMoImh3YV9zeXNfY2siLCBOVUxMLCAiYmNsayIsIE5VTEwpOwogCW9tYXBmYl9zZXRfY3RybF9wbGF0Zm9ybV9kYXRhKCZub2tpYTc3MF9od2E3NDJfcGxhdGZvcm1fZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwppbmRleCBmYjUxY2U2Li5jOWQzOGY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKQEAgLTIzMCwxOSArMjMwLDYgQEAKIAl9LAogfTsKIAotc3RhdGljIHZvaWQgcGFsbXRlX2hlYWRwaG9uZXNfZGV0ZWN0KHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKLXsKLQlpZiAoc3RhdGUpIHsKLQkJLyogSGVhZHBob25lcyBjb25uZWN0ZWQsIGRpc2FibGUgc3BlYWtlciAqLwotCQlncGlvX3NldF92YWx1ZShQQUxNVEVfU1BFQUtFUl9HUElPLCAwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUE06IHNwZWFrZXIgb2ZmXG4iKTsKLQl9IGVsc2UgewotCQkvKiBIZWFkcGhvbmVzIHVucGx1Z2dlZCwgcmUtZW5hYmxlIHNwZWFrZXIgKi8KLQkJZ3Bpb19zZXRfdmFsdWUoUEFMTVRFX1NQRUFLRVJfR1BJTywgMSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBNOiBzcGVha2VyIG9uXG4iKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdGVfbWlzY19ncGlvX3NldHVwKHZvaWQpCiB7CiAJLyogU2V0IFRTQzIxMDIgUElOVERBViBwaW4gYXMgaW5wdXQgKHVzZWQgYnkgVFNDMjEwMiBkcml2ZXIpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwppbmRleCA4MTVhNjljLi5iZGMwYWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKQEAgLTI2LDEwICsyNiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKKyNpbmNsdWRlIDxwbGF0L2JvYXJkLXZvaWNlYmx1ZS5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9mbGFzaC5oPgpAQCAtMTYzLDUyICsxNjUsNiBAQAogCW9tYXBfaW5pdF9pcnEoKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHZvaWNlYmx1ZV9pbml0KHZvaWQpCi17Ci0JLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCi0Jb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKLQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKLQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOwotCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOwotCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7Ci0Jb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKLQotCS8qIFdhdGNoZG9nICovCi0JZ3Bpb19yZXF1ZXN0KDAsICJXYXRjaGRvZyIpOwotCS8qIHNtYzkxeCByZXNldCAqLwotCWdwaW9fcmVxdWVzdCg3LCAiU01DOTF4IHJlc2V0Iik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDcsIDEpOwotCXVkZWxheSgyKTsJLyogd2FpdCBhdCBsZWFzdCAxMDBucyAqLwotCWdwaW9fc2V0X3ZhbHVlKDcsIDApOwotCW1kZWxheSg1MCk7CS8qIDUwbXMgdW50aWwgUEhZIHJlYWR5ICovCi0JLyogc21jOTF4IGludGVycnVwdCBwaW4gKi8KLQlncGlvX3JlcXVlc3QoOCwgIlNNQzkxeCBpcnEiKTsKLQkvKiAxNkM1NTQgcmVzZXQqLwotCWdwaW9fcmVxdWVzdCg2LCAiMTZDNTU0IHJlc2V0Iik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDYsIDApOwotCS8qIDE2QzU1NCBpbnRlcnJ1cHQgcGlucyAqLwotCWdwaW9fcmVxdWVzdCgxMiwgIjE2QzU1NCBpcnEiKTsKLQlncGlvX3JlcXVlc3QoMTMsICIxNkM1NTQgaXJxIik7Ci0JZ3Bpb19yZXF1ZXN0KDE0LCAiMTZDNTU0IGlycSIpOwotCWdwaW9fcmVxdWVzdCgxNSwgIjE2QzU1NCBpcnEiKTsKLQlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoMTIpLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0Jc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKDEzKSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCXNldF9pcnFfdHlwZShncGlvX3RvX2lycSgxNCksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoMTUpLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyh2b2ljZWJsdWVfZGV2aWNlcywgQVJSQVlfU0laRSh2b2ljZWJsdWVfZGV2aWNlcykpOwotCW9tYXBfYm9hcmRfY29uZmlnID0gdm9pY2VibHVlX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRSh2b2ljZWJsdWVfY29uZmlnKTsKLQlvbWFwX3NlcmlhbF9pbml0KCk7Ci0Jb21hcDFfdXNiX2luaXQoJnZvaWNlYmx1ZV91c2JfY29uZmlnKTsKLQlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBOVUxMLCAwKTsKLQotCS8qIFRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgYm9hcmQgaXMgZ29pbmcgdXAsIHNvIGVuYWJsZSBwb3dlciBMRUQKLQkgKiAoaXQgaXMgY29ubmVjdGVkIHRocm91Z2ggaW52ZXJ0b3IpICovCi0Jb21hcF93cml0ZWIoMHgwMCwgT01BUF9MUEcxX0xDUik7Ci0Jb21hcF93cml0ZWIoMHgwMCwgT01BUF9MUEcxX1BNUik7CS8qIERpc2FibGUgY2xvY2sgKi8KLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHZvaWNlYmx1ZV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMV9tYXBfY29tbW9uX2lvKCk7CkBAIC0yNzUsOCArMjMxLDE3IEBACiAJZ3Bpb19zZXRfdmFsdWUoMCwgd2R0X2dwaW9fc3RhdGUpOwogfQogCi12b2lkIHZvaWNlYmx1ZV9yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgdm9pY2VibHVlX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogeworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgNTkxMi8xNjExYiBidWcgbWVudGlvbmVkIGluIHNwcnoyMDlkLnBkZiBwLiAyOAorCSAqICJHbG9iYWwgU29mdHdhcmUgUmVzZXQgQWZmZWN0cyBUcmFmZmljIENvbnRyb2xsZXIgRnJlcXVlbmN5Ii4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXA1OTEyKCkpIHsKKwkJb21hcF93cml0ZXcob21hcF9yZWFkdyhEUExMX0NUTCkgJiB+KDEgPDwgNCksIERQTExfQ1RMKTsKKwkJb21hcF93cml0ZXcoMHg4LCBBUk1fUlNUQ1QxKTsKKwl9CisKIAlzZXRfYml0KE1BQ0hJTkVfUkVCT09ULCAmbWFjaGluZV9zdGF0ZSk7CiAJdm9pY2VibHVlX3dkdF9lbmFibGUoKTsKIAl3aGlsZSAoMSkgOwpAQCAtMjg2LDYgKzI1MSw1NCBAQAogRVhQT1JUX1NZTUJPTCh2b2ljZWJsdWVfd2R0X2Rpc2FibGUpOwogRVhQT1JUX1NZTUJPTCh2b2ljZWJsdWVfd2R0X3BpbmcpOwogCitzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX2luaXQodm9pZCkKK3sKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCisJLyogV2F0Y2hkb2cgKi8KKwlncGlvX3JlcXVlc3QoMCwgIldhdGNoZG9nIik7CisJLyogc21jOTF4IHJlc2V0ICovCisJZ3Bpb19yZXF1ZXN0KDcsICJTTUM5MXggcmVzZXQiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoNywgMSk7CisJdWRlbGF5KDIpOwkvKiB3YWl0IGF0IGxlYXN0IDEwMG5zICovCisJZ3Bpb19zZXRfdmFsdWUoNywgMCk7CisJbWRlbGF5KDUwKTsJLyogNTBtcyB1bnRpbCBQSFkgcmVhZHkgKi8KKwkvKiBzbWM5MXggaW50ZXJydXB0IHBpbiAqLworCWdwaW9fcmVxdWVzdCg4LCAiU01DOTF4IGlycSIpOworCS8qIDE2QzU1NCByZXNldCovCisJZ3Bpb19yZXF1ZXN0KDYsICIxNkM1NTQgcmVzZXQiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoNiwgMCk7CisJLyogMTZDNTU0IGludGVycnVwdCBwaW5zICovCisJZ3Bpb19yZXF1ZXN0KDEyLCAiMTZDNTU0IGlycSIpOworCWdwaW9fcmVxdWVzdCgxMywgIjE2QzU1NCBpcnEiKTsKKwlncGlvX3JlcXVlc3QoMTQsICIxNkM1NTQgaXJxIik7CisJZ3Bpb19yZXF1ZXN0KDE1LCAiMTZDNTU0IGlycSIpOworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycSgxMiksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoMTMpLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKDE0KSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycSgxNSksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHZvaWNlYmx1ZV9kZXZpY2VzLCBBUlJBWV9TSVpFKHZvaWNlYmx1ZV9kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSB2b2ljZWJsdWVfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHZvaWNlYmx1ZV9jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKKwlvbWFwMV91c2JfaW5pdCgmdm9pY2VibHVlX3VzYl9jb25maWcpOworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOworCisJLyogVGhlcmUgaXMgYSBnb29kIGNoYW5jZSBib2FyZCBpcyBnb2luZyB1cCwgc28gZW5hYmxlIHBvd2VyIExFRAorCSAqIChpdCBpcyBjb25uZWN0ZWQgdGhyb3VnaCBpbnZlcnRvcikgKi8KKwlvbWFwX3dyaXRlYigweDAwLCBPTUFQX0xQRzFfTENSKTsKKwlvbWFwX3dyaXRlYigweDAwLCBPTUFQX0xQRzFfUE1SKTsJLyogRGlzYWJsZSBjbG9jayAqLworCisJYXJjaF9yZXNldCA9IHZvaWNlYmx1ZV9yZXNldDsKK30KKwogTUFDSElORV9TVEFSVChWT0lDRUJMVUUsICJWb2ljZUJsdWUgT01BUDU5MTAiKQogCS8qIE1haW50YWluZXI6IExhZGlzbGF2IE1pY2hsIDxtaWNobEAybi5jej4gKi8KIAkuYm9vdF9wYXJhbXMJPSAweDEwMDAwMTAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCmluZGV4IDgyMDk3MzYuLmQ5YWY5ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqCiAgKiBNdWx0aWNoYW5uZWwgbW9kZSBub3Qgc3VwcG9ydGVkLgogICovCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtNzgsMTAwICs3OSwyOTQgQEAKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKK3N0cnVjdCByZXNvdXJjZSBvbWFwN3h4X21jYnNwX3Jlc1tdWzZdID0geworCXsKKwkJeworCQkJLnN0YXJ0ID0gT01BUDdYWF9NQ0JTUDFfQkFTRSwKKwkJCS5lbmQgICA9IE9NQVA3WFhfTUNCU1AxX0JBU0UgKyBTWl8yNTYsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInJ4IiwKKwkJCS5zdGFydCA9IElOVF83WFhfTWNCU1AxUlgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInR4IiwKKwkJCS5zdGFydCA9IElOVF83WFhfTWNCU1AxVFgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInJ4IiwKKwkJCS5zdGFydCA9IE9NQVBfRE1BX01DQlNQMV9SWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAidHgiLAorCQkJLnN0YXJ0ID0gT01BUF9ETUFfTUNCU1AxX1RYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJCX0sCisJfSwKKwl7CisJCXsKKwkJCS5zdGFydCA9IE9NQVA3WFhfTUNCU1AyX0JBU0UsCisJCQkuZW5kICAgPSBPTUFQN1hYX01DQlNQMl9CQVNFICsgU1pfMjU2LAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJyeCIsCisJCQkuc3RhcnQgPSBJTlRfN1hYX01jQlNQMlJYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJ0eCIsCisJCQkuc3RhcnQgPSBJTlRfN1hYX01jQlNQMlRYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJyeCIsCisJCQkuc3RhcnQgPSBPTUFQX0RNQV9NQ0JTUDNfUlgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInR4IiwKKwkJCS5zdGFydCA9IE9NQVBfRE1BX01DQlNQM19UWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCQl9LAorCX0sCit9OworCisjZGVmaW5lIG9tYXA3eHhfbWNic3BfcmVzXzAJCW9tYXA3eHhfbWNic3BfcmVzWzBdCisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhIG9tYXA3eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7Ci0JCS5waHlzX2Jhc2UJPSBPTUFQN1hYX01DQlNQMV9CQVNFLAotCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfUlgsCi0JCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQMV9UWCwKLQkJLnJ4X2lycQkJPSBJTlRfN1hYX01jQlNQMVJYLAotCQkudHhfaXJxCQk9IElOVF83WFhfTWNCU1AxVFgsCiAJCS5vcHMJCT0gJm9tYXAxX21jYnNwX29wcywKIAl9LAogCXsKLQkJLnBoeXNfYmFzZQk9IE9NQVA3WFhfTUNCU1AyX0JBU0UsCi0JCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AzX1RYLAotCQkucnhfaXJxCQk9IElOVF83WFhfTWNCU1AyUlgsCi0JCS50eF9pcnEJCT0gSU5UXzdYWF9NY0JTUDJUWCwKIAkJLm9wcwkJPSAmb21hcDFfbWNic3Bfb3BzLAogCX0sCiB9OwotI2RlZmluZSBPTUFQN1hYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXA3eHhfbWNic3BfcGRhdGEpCi0jZGVmaW5lIE9NQVA3WFhfTUNCU1BfUkVHX05VTQkJKE9NQVBfTUNCU1BfUkVHX1hDRVJIIC8gc2l6ZW9mKHUxNikgKyAxKQorI2RlZmluZSBPTUFQN1hYX01DQlNQX1JFU19TWgkJQVJSQVlfU0laRShvbWFwN3h4X21jYnNwX3Jlc1sxXSkKKyNkZWZpbmUgT01BUDdYWF9NQ0JTUF9DT1VOVAkJQVJSQVlfU0laRShvbWFwN3h4X21jYnNwX3JlcykKICNlbHNlCisjZGVmaW5lIG9tYXA3eHhfbWNic3BfcmVzXzAJCU5VTEwKICNkZWZpbmUgb21hcDd4eF9tY2JzcF9wZGF0YQkJTlVMTAotI2RlZmluZSBPTUFQN1hYX01DQlNQX1BEQVRBX1NaCQkwCi0jZGVmaW5lIE9NQVA3WFhfTUNCU1BfUkVHX05VTQkJMAorI2RlZmluZSBPTUFQN1hYX01DQlNQX1JFU19TWgkJMAorI2RlZmluZSBPTUFQN1hYX01DQlNQX0NPVU5UCQkwCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCitzdHJ1Y3QgcmVzb3VyY2Ugb21hcDE1eHhfbWNic3BfcmVzW11bNl0gPSB7CisJeworCQl7CisJCQkuc3RhcnQgPSBPTUFQMTUxMF9NQ0JTUDFfQkFTRSwKKwkJCS5lbmQgICA9IE9NQVAxNTEwX01DQlNQMV9CQVNFICsgU1pfMjU2LAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJyeCIsCisJCQkuc3RhcnQgPSBJTlRfTWNCU1AxUlgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInR4IiwKKwkJCS5zdGFydCA9IElOVF9NY0JTUDFUWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAicngiLAorCQkJLnN0YXJ0ID0gT01BUF9ETUFfTUNCU1AxX1JYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJ0eCIsCisJCQkuc3RhcnQgPSBPTUFQX0RNQV9NQ0JTUDFfVFgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwkJfSwKKwl9LAorCXsKKwkJeworCQkJLnN0YXJ0ID0gT01BUDE1MTBfTUNCU1AyX0JBU0UsCisJCQkuZW5kICAgPSBPTUFQMTUxMF9NQ0JTUDJfQkFTRSArIFNaXzI1NiwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAicngiLAorCQkJLnN0YXJ0ID0gSU5UXzE1MTBfU1BJX1JYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJ0eCIsCisJCQkuc3RhcnQgPSBJTlRfMTUxMF9TUElfVFgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInJ4IiwKKwkJCS5zdGFydCA9IE9NQVBfRE1BX01DQlNQMl9SWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAidHgiLAorCQkJLnN0YXJ0ID0gT01BUF9ETUFfTUNCU1AyX1RYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJCX0sCisJfSwKKwl7CisJCXsKKwkJCS5zdGFydCA9IE9NQVAxNTEwX01DQlNQM19CQVNFLAorCQkJLmVuZCAgID0gT01BUDE1MTBfTUNCU1AzX0JBU0UgKyBTWl8yNTYsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInJ4IiwKKwkJCS5zdGFydCA9IElOVF9NY0JTUDNSWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAidHgiLAorCQkJLnN0YXJ0ID0gSU5UX01jQlNQM1RYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJyeCIsCisJCQkuc3RhcnQgPSBPTUFQX0RNQV9NQ0JTUDNfUlgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInR4IiwKKwkJCS5zdGFydCA9IE9NQVBfRE1BX01DQlNQM19UWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCQl9LAorCX0sCit9OworCisjZGVmaW5lIG9tYXAxNXh4X21jYnNwX3Jlc18wCQlvbWFwMTV4eF9tY2JzcF9yZXNbMF0KKwogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDE1eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7Ci0JCS5waHlzX2Jhc2UJPSBPTUFQMTUxMF9NQ0JTUDFfQkFTRSwKLQkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AxX1JYLAotCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfVFgsCi0JCS5yeF9pcnEJCT0gSU5UX01jQlNQMVJYLAotCQkudHhfaXJxCQk9IElOVF9NY0JTUDFUWCwKIAkJLm9wcwkJPSAmb21hcDFfbWNic3Bfb3BzLAogCX0sCiAJewotCQkucGh5c19iYXNlCT0gT01BUDE1MTBfTUNCU1AyX0JBU0UsCi0JCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQMl9SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AyX1RYLAotCQkucnhfaXJxCQk9IElOVF8xNTEwX1NQSV9SWCwKLQkJLnR4X2lycQkJPSBJTlRfMTUxMF9TUElfVFgsCiAJCS5vcHMJCT0gJm9tYXAxX21jYnNwX29wcywKIAl9LAogCXsKLQkJLnBoeXNfYmFzZQk9IE9NQVAxNTEwX01DQlNQM19CQVNFLAotCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDNfUlgsCi0JCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19UWCwKLQkJLnJ4X2lycQkJPSBJTlRfTWNCU1AzUlgsCi0JCS50eF9pcnEJCT0gSU5UX01jQlNQM1RYLAogCQkub3BzCQk9ICZvbWFwMV9tY2JzcF9vcHMsCiAJfSwKIH07Ci0jZGVmaW5lIE9NQVAxNVhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAxNXh4X21jYnNwX3BkYXRhKQotI2RlZmluZSBPTUFQMTVYWF9NQ0JTUF9SRUdfTlVNCQkoT01BUF9NQ0JTUF9SRUdfWENFUkggLyBzaXplb2YodTE2KSArIDEpCisjZGVmaW5lIE9NQVAxNVhYX01DQlNQX1JFU19TWgkJQVJSQVlfU0laRShvbWFwMTV4eF9tY2JzcF9yZXNbMV0pCisjZGVmaW5lIE9NQVAxNVhYX01DQlNQX0NPVU5UCQlBUlJBWV9TSVpFKG9tYXAxNXh4X21jYnNwX3JlcykKICNlbHNlCisjZGVmaW5lIG9tYXAxNXh4X21jYnNwX3Jlc18wCQlOVUxMCiAjZGVmaW5lIG9tYXAxNXh4X21jYnNwX3BkYXRhCQlOVUxMCi0jZGVmaW5lIE9NQVAxNVhYX01DQlNQX1BEQVRBX1NaCQkwCi0jZGVmaW5lIE9NQVAxNVhYX01DQlNQX1JFR19OVU0JCTAKKyNkZWZpbmUgT01BUDE1WFhfTUNCU1BfUkVTX1NaCQkwCisjZGVmaW5lIE9NQVAxNVhYX01DQlNQX0NPVU5UCQkwCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCitzdHJ1Y3QgcmVzb3VyY2Ugb21hcDE2eHhfbWNic3BfcmVzW11bNl0gPSB7CisJeworCQl7CisJCQkuc3RhcnQgPSBPTUFQMTYxMF9NQ0JTUDFfQkFTRSwKKwkJCS5lbmQgICA9IE9NQVAxNjEwX01DQlNQMV9CQVNFICsgU1pfMjU2LAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJyeCIsCisJCQkuc3RhcnQgPSBJTlRfTWNCU1AxUlgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInR4IiwKKwkJCS5zdGFydCA9IElOVF9NY0JTUDFUWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAicngiLAorCQkJLnN0YXJ0ID0gT01BUF9ETUFfTUNCU1AxX1JYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJ0eCIsCisJCQkuc3RhcnQgPSBPTUFQX0RNQV9NQ0JTUDFfVFgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwkJfSwKKwl9LAorCXsKKwkJeworCQkJLnN0YXJ0ID0gT01BUDE2MTBfTUNCU1AyX0JBU0UsCisJCQkuZW5kICAgPSBPTUFQMTYxMF9NQ0JTUDJfQkFTRSArIFNaXzI1NiwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAicngiLAorCQkJLnN0YXJ0ID0gSU5UXzE2MTBfTWNCU1AyX1JYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJ0eCIsCisJCQkuc3RhcnQgPSBJTlRfMTYxMF9NY0JTUDJfVFgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInJ4IiwKKwkJCS5zdGFydCA9IE9NQVBfRE1BX01DQlNQMl9SWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAidHgiLAorCQkJLnN0YXJ0ID0gT01BUF9ETUFfTUNCU1AyX1RYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJCX0sCisJfSwKKwl7CisJCXsKKwkJCS5zdGFydCA9IE9NQVAxNjEwX01DQlNQM19CQVNFLAorCQkJLmVuZCAgID0gT01BUDE2MTBfTUNCU1AzX0JBU0UgKyBTWl8yNTYsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInJ4IiwKKwkJCS5zdGFydCA9IElOVF9NY0JTUDNSWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCQl7CisJCQkubmFtZSAgPSAidHgiLAorCQkJLnN0YXJ0ID0gSU5UX01jQlNQM1RYLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJCXsKKwkJCS5uYW1lICA9ICJyeCIsCisJCQkuc3RhcnQgPSBPTUFQX0RNQV9NQ0JTUDNfUlgsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwkJfSwKKwkJeworCQkJLm5hbWUgID0gInR4IiwKKwkJCS5zdGFydCA9IE9NQVBfRE1BX01DQlNQM19UWCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCQl9LAorCX0sCit9OworCisjZGVmaW5lIG9tYXAxNnh4X21jYnNwX3Jlc18wCQlvbWFwMTZ4eF9tY2JzcF9yZXNbMF0KKwogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDE2eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7Ci0JCS5waHlzX2Jhc2UJPSBPTUFQMTYxMF9NQ0JTUDFfQkFTRSwKLQkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AxX1JYLAotCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfVFgsCi0JCS5yeF9pcnEJCT0gSU5UX01jQlNQMVJYLAotCQkudHhfaXJxCQk9IElOVF9NY0JTUDFUWCwKIAkJLm9wcwkJPSAmb21hcDFfbWNic3Bfb3BzLAogCX0sCiAJewotCQkucGh5c19iYXNlCT0gT01BUDE2MTBfTUNCU1AyX0JBU0UsCi0JCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQMl9SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AyX1RYLAotCQkucnhfaXJxCQk9IElOVF8xNjEwX01jQlNQMl9SWCwKLQkJLnR4X2lycQkJPSBJTlRfMTYxMF9NY0JTUDJfVFgsCiAJCS5vcHMJCT0gJm9tYXAxX21jYnNwX29wcywKIAl9LAogCXsKLQkJLnBoeXNfYmFzZQk9IE9NQVAxNjEwX01DQlNQM19CQVNFLAotCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDNfUlgsCi0JCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19UWCwKLQkJLnJ4X2lycQkJPSBJTlRfTWNCU1AzUlgsCi0JCS50eF9pcnEJCT0gSU5UX01jQlNQM1RYLAogCQkub3BzCQk9ICZvbWFwMV9tY2JzcF9vcHMsCiAJfSwKIH07Ci0jZGVmaW5lIE9NQVAxNlhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAxNnh4X21jYnNwX3BkYXRhKQotI2RlZmluZSBPTUFQMTZYWF9NQ0JTUF9SRUdfTlVNCQkoT01BUF9NQ0JTUF9SRUdfWENFUkggLyBzaXplb2YodTE2KSArIDEpCisjZGVmaW5lIE9NQVAxNlhYX01DQlNQX1JFU19TWgkJQVJSQVlfU0laRShvbWFwMTZ4eF9tY2JzcF9yZXNbMV0pCisjZGVmaW5lIE9NQVAxNlhYX01DQlNQX0NPVU5UCQlBUlJBWV9TSVpFKG9tYXAxNnh4X21jYnNwX3JlcykKICNlbHNlCisjZGVmaW5lIG9tYXAxNnh4X21jYnNwX3Jlc18wCQlOVUxMCiAjZGVmaW5lIG9tYXAxNnh4X21jYnNwX3BkYXRhCQlOVUxMCi0jZGVmaW5lIE9NQVAxNlhYX01DQlNQX1BEQVRBX1NaCQkwCi0jZGVmaW5lIE9NQVAxNlhYX01DQlNQX1JFR19OVU0JCTAKKyNkZWZpbmUgT01BUDE2WFhfTUNCU1BfUkVTX1NaCQkwCisjZGVmaW5lIE9NQVAxNlhYX01DQlNQX0NPVU5UCQkwCiAjZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgb21hcDFfbWNic3BfaW5pdCh2b2lkKQpAQCAtMTc5LDE2ICszNzQsMTIgQEAKIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChjcHVfaXNfb21hcDd4eCgpKSB7Ci0JCW9tYXBfbWNic3BfY291bnQgPSBPTUFQN1hYX01DQlNQX1BEQVRBX1NaOwotCQlvbWFwX21jYnNwX2NhY2hlX3NpemUgPSBPTUFQN1hYX01DQlNQX1JFR19OVU0gKiBzaXplb2YodTE2KTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMTVYWF9NQ0JTUF9QREFUQV9TWjsKLQkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDE1WFhfTUNCU1BfUkVHX05VTSAqIHNpemVvZih1MTYpOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAxNlhYX01DQlNQX1BEQVRBX1NaOwotCQlvbWFwX21jYnNwX2NhY2hlX3NpemUgPSBPTUFQMTZYWF9NQ0JTUF9SRUdfTlVNICogc2l6ZW9mKHUxNik7Ci0JfQorCWlmIChjcHVfaXNfb21hcDd4eCgpKQorCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDdYWF9NQ0JTUF9DT1VOVDsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAxNVhYX01DQlNQX0NPVU5UOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDE2WFhfTUNCU1BfQ09VTlQ7CiAKIAltY2JzcF9wdHIgPSBremFsbG9jKG9tYXBfbWNic3BfY291bnQgKiBzaXplb2Yoc3RydWN0IG9tYXBfbWNic3AgKiksCiAJCQkJCQkJCUdGUF9LRVJORUwpOwpAQCAtMTk2LDE2ICszODcsMjIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoY3B1X2lzX29tYXA3eHgoKSkKLQkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDd4eF9tY2JzcF9wZGF0YSwKLQkJCQkJCU9NQVA3WFhfTUNCU1BfUERBVEFfU1opOworCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwN3h4X21jYnNwX3Jlc18wLAorCQkJCQlPTUFQN1hYX01DQlNQX1JFU19TWiwKKwkJCQkJb21hcDd4eF9tY2JzcF9wZGF0YSwKKwkJCQkJT01BUDdYWF9NQ0JTUF9DT1VOVCk7CiAKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCi0JCW9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKG9tYXAxNXh4X21jYnNwX3BkYXRhLAotCQkJCQkJT01BUDE1WFhfTUNCU1BfUERBVEFfU1opOworCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMTV4eF9tY2JzcF9yZXNfMCwKKwkJCQkJT01BUDE1WFhfTUNCU1BfUkVTX1NaLAorCQkJCQlvbWFwMTV4eF9tY2JzcF9wZGF0YSwKKwkJCQkJT01BUDE1WFhfTUNCU1BfQ09VTlQpOwogCiAJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMTZ4eF9tY2JzcF9wZGF0YSwKLQkJCQkJCU9NQVAxNlhYX01DQlNQX1BEQVRBX1NaKTsKKwkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDE2eHhfbWNic3BfcmVzXzAsCisJCQkJCU9NQVAxNlhYX01DQlNQX1JFU19TWiwKKwkJCQkJb21hcDE2eHhfbWNic3BfcGRhdGEsCisJCQkJCU9NQVAxNlhYX01DQlNQX0NPVU5UKTsKIAogCXJldHVybiBvbWFwX21jYnNwX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvcmVzZXQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDk1MWVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9yZXNldC5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBPTUFQMSByZXNldCBzdXBwb3J0CisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtLmg+CisjaW5jbHVkZSA8cGxhdC9wcmNtLmg+CisKK3ZvaWQgb21hcDFfYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwkvKgorCSAqIFdvcmthcm91bmQgZm9yIDU5MTIvMTYxMWIgYnVnIG1lbnRpb25lZCBpbiBzcHJ6MjA5ZC5wZGYgcC4gMjgKKwkgKiAiR2xvYmFsIFNvZnR3YXJlIFJlc2V0IEFmZmVjdHMgVHJhZmZpYyBDb250cm9sbGVyIEZyZXF1ZW5jeSIuCisJICovCisJaWYgKGNwdV9pc19vbWFwNTkxMigpKSB7CisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoRFBMTF9DVEwpICYgfigxIDw8IDQpLCBEUExMX0NUTCk7CisJCW9tYXBfd3JpdGV3KDB4OCwgQVJNX1JTVENUMSk7CisJfQorCisJb21hcF93cml0ZXcoMSwgQVJNX1JTVENUMSk7Cit9CisKK3ZvaWQgKCphcmNoX3Jlc2V0KShjaGFyLCBjb25zdCBjaGFyICopID0gb21hcDFfYXJjaF9yZXNldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwppbmRleCA2ODE5YzY0Li5iOTk3YTM1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNTUsMjUgKzU1LDMwIEBACiBjb21tZW50ICJPTUFQIENvcmUgVHlwZSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKIAotY29uZmlnIEFSQ0hfT01BUDI0MjAKK2NvbmZpZyBTT0NfT01BUDI0MjAKIAlib29sICJPTUFQMjQyMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMgogCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX0RNX1RJTUVSCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAotY29uZmlnIEFSQ0hfT01BUDI0MzAKK2NvbmZpZyBTT0NfT01BUDI0MzAKIAlib29sICJPTUFQMjQzMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMgogCWRlZmF1bHQgeQogCXNlbGVjdCBBUkNIX09NQVBfT1RHCiAKLWNvbmZpZyBBUkNIX09NQVAzNDMwCitjb25maWcgU09DX09NQVAzNDMwCiAJYm9vbCAiT01BUDM0MzAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlkZWZhdWx0IHkKIAlzZWxlY3QgQVJDSF9PTUFQX09URwogCitjb25maWcgU09DX09NQVBUSTgxNlgKKwlib29sICJUSTgxNlggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlkZWZhdWx0IHkKKwogY29uZmlnIE9NQVBfUEFDS0FHRV9aQUYKICAgICAgICBib29sCiAKQEAgLTEwOCwyNSArMTEzLDI1IEBACiAKIGNvbmZpZyBNQUNIX09NQVAyX1RVU0I2MDEwCiAJYm9vbAotCWRlcGVuZHMgb24gQVJDSF9PTUFQMiAmJiBBUkNIX09NQVAyNDIwCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIFNPQ19PTUFQMjQyMAogCWRlZmF1bHQgeSBpZiBNQUNIX05PS0lBX044WDAKIAogY29uZmlnIE1BQ0hfT01BUF9INAogCWJvb2wgIk9NQVAgMjQyMCBINCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0MjAKKwlkZXBlbmRzIG9uIFNPQ19PTUFQMjQyMAogCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfWkFGCiAJc2VsZWN0IE9NQVBfREVCVUdfREVWSUNFUwogCiBjb25maWcgTUFDSF9PTUFQX0FQT0xMT04KIAlib29sICJPTUFQIDI0MjAgQXBvbGxvbiBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0MjAKKwlkZXBlbmRzIG9uIFNPQ19PTUFQMjQyMAogCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfWkFDCiAKIGNvbmZpZyBNQUNIX09NQVBfMjQzMFNEUAogCWJvb2wgIk9NQVAgMjQzMCBTRFAgYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyNDMwCisJZGVwZW5kcyBvbiBTT0NfT01BUDI0MzAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX1pBQwogCkBAIC0yMjEsNyArMjI2LDcgQEAKIAogY29uZmlnIE1BQ0hfTk9LSUFfTjhYMAogCWJvb2wgIk5va2lhIE44MDAvTjgxMCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0MjAKKwlkZXBlbmRzIG9uIFNPQ19PTUFQMjQyMAogCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfWkFDCiAJc2VsZWN0IE1BQ0hfTk9LSUFfTjgwMApAQCAtMjk2LDEyICszMDEsMTggQEAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCUAogCitjb25maWcgTUFDSF9USTgxNjhFVk0KKwlib29sICJUSTgxNjggRXZhbHVhdGlvbiBNb2R1bGUiCisJZGVwZW5kcyBvbiBTT0NfT01BUFRJODE2WAorCWRlZmF1bHQgeQorCiBjb25maWcgTUFDSF9PTUFQXzQ0MzBTRFAKIAlib29sICJPTUFQIDQ0MzAgU0RQIGJvYXJkIgogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gQVJDSF9PTUFQNAogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JMCiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQlMKKwlzZWxlY3QgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UKIAogY29uZmlnIE1BQ0hfT01BUDRfUEFOREEKIAlib29sICJPTUFQNCBQYW5kYSBCb2FyZCIKQEAgLTMwOSw2ICszMjAsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9PTUFQNAogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JMCiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQlMKKwlzZWxlY3QgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UKIAogY29uZmlnIE9NQVAzX0VNVQogCWJvb2wgIk9NQVAzIGRlYnVnZ2luZyBwZXJpcGhlcmFscyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IDY0ZGM0MTcuLmE0NWNkNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMzEsOCArMzEsOCBAQAogQUZMQUdTX29tYXA0NHh4LXNtYy5vCQkJOj0tV2EsLW1hcmNoPWFybXY3LWEkKHBsdXNfc2VjKQogCiAjIEZ1bmN0aW9ucyBsb2FkZWQgdG8gU1JBTQotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MjApCQkrPSBzcmFtMjQyeC5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMjQzMCkJCSs9IHNyYW0yNDN4Lm8KK29iai0kKENPTkZJR19TT0NfT01BUDI0MjApCQkrPSBzcmFtMjQyeC5vCitvYmotJChDT05GSUdfU09DX09NQVAyNDMwKQkJKz0gc3JhbTI0M3gubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBzcmFtMzR4eC5vCiAKIEFGTEFHU19zcmFtMjQyeC5vCQkJOj0tV2EsLW1hcmNoPWFybXY2CkBAIC00MCw4ICs0MCw4IEBACiBBRkxBR1Nfc3JhbTM0eHgubwkJCTo9LVdhLC1tYXJjaD1hcm12Ny1hCiAKICMgUGluIG11bHRpcGxleGluZwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MjApCQkrPSBtdXgyNDIwLm8KLW9iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gbXV4MjQzMC5vCitvYmotJChDT05GSUdfU09DX09NQVAyNDIwKQkJKz0gbXV4MjQyMC5vCitvYmotJChDT05GSUdfU09DX09NQVAyNDMwKQkJKz0gbXV4MjQzMC5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IG11eDM0eHgubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBtdXg0NHh4Lm8KIApAQCAtNTksMTAgKzU5LDEwIEBACiAjIFBvd2VyIE1hbmFnZW1lbnQKIGlmZXEgKCQoQ09ORklHX1BNKSx5KQogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBwbTI0eHgubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBzbGVlcDI0eHgubyBwbV9idXMubyB2b2x0YWdlLm8KLW9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gcG0zNHh4Lm8gc2xlZXAzNHh4Lm8gdm9sdGFnZS5vIFwKK29iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gc2xlZXAyNHh4Lm8gcG1fYnVzLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gcG0zNHh4Lm8gc2xlZXAzNHh4Lm8gXAogCQkJCQkgICBjcHVpZGxlMzR4eC5vIHBtX2J1cy5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IHBtNDR4eC5vIHZvbHRhZ2UubyBwbV9idXMubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBwbTQ0eHgubyBwbV9idXMubwogb2JqLSQoQ09ORklHX1BNX0RFQlVHKQkJCSs9IHBtLWRlYnVnLm8KIG9iai0kKENPTkZJR19PTUFQX1NNQVJUUkVGTEVYKSAgICAgICAgICArPSBzcl9kZXZpY2UubyBzbWFydHJlZmxleC5vCiBvYmotJChDT05GSUdfT01BUF9TTUFSVFJFRkxFWF9DTEFTUzMpCSs9IHNtYXJ0cmVmbGV4LWNsYXNzMy5vCkBAIC03OCwxMyArNzgsMjUgQEAKIAogIyBQUkNNCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHByY20ubyBjbTJ4eHhfM3h4eC5vIHBybTJ4eHhfM3h4eC5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHByY20ubyBjbTJ4eHhfM3h4eC5vIHBybTJ4eHhfM3h4eC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHByY20ubyBjbTJ4eHhfM3h4eC5vIHBybTJ4eHhfM3h4eC5vIFwKKwkJCQkJICAgdmMzeHh4X2RhdGEubyB2cDN4eHhfZGF0YS5vCiAjIFhYWCBUaGUgcHJlc2VuY2Ugb2YgY20yeHh4XzN4eHgubyBvbiB0aGUgbGluZSBiZWxvdyBpcyB0ZW1wb3JhcnkgYW5kCiAjIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRoZSBPTUFQNCBwYXJ0IG9mIHRoZSBjb2RlYmFzZSBpcyBjb252ZXJ0ZWQgdG8KICMgdXNlIE9NQVA0LXNwZWNpZmljIFBSQ00gZnVuY3Rpb25zLgogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBwcmNtLm8gY20yeHh4XzN4eHgubyBjbWluc3Q0NHh4Lm8gXAogCQkJCQkgICBjbTQ0eHgubyBwcmNtX21wdTQ0eHgubyBcCi0JCQkJCSAgIHBybWluc3Q0NHh4Lm8KKwkJCQkJICAgcHJtaW5zdDQ0eHgubyB2YzQ0eHhfZGF0YS5vIFwKKwkJCQkJICAgdnA0NHh4X2RhdGEubworCisjIE9NQVAgdm9sdGFnZSBkb21haW5zCitpZmVxICgkKENPTkZJR19QTSkseSkKK3ZvbHRhZ2Vkb21haW4tY29tbW9uCQkJOj0gdm9sdGFnZS5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9ICQodm9sdGFnZWRvbWFpbi1jb21tb24pCitvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9ICQodm9sdGFnZWRvbWFpbi1jb21tb24pIFwKKwkJCQkJICAgdm9sdGFnZWRvbWFpbnMzeHh4X2RhdGEubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSAkKHZvbHRhZ2Vkb21haW4tY29tbW9uKSBcCisJCQkJCSAgIHZvbHRhZ2Vkb21haW5zNDR4eF9kYXRhLm8KK2VuZGlmCiAKICMgT01BUCBwb3dlcmRvbWFpbiBmcmFtZXdvcmsKIHBvd2VyZG9tYWluLWNvbW1vbgkJCSs9IHBvd2VyZG9tYWluLm8gcG93ZXJkb21haW4tY29tbW9uLm8KQEAgLTEwMiwzOSArMTE0LDQ5IEBACiAKICMgUFJDTSBjbG9ja2RvbWFpbiBjb250cm9sCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IGNsb2NrZG9tYWluLm8gXAorCQkJCQkgICBjbG9ja2RvbWFpbjJ4eHhfM3h4eC5vIFwKIAkJCQkJICAgY2xvY2tkb21haW5zMnh4eF8zeHh4X2RhdGEubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBjbG9ja2RvbWFpbi5vIFwKKwkJCQkJICAgY2xvY2tkb21haW4yeHh4XzN4eHgubyBcCiAJCQkJCSAgIGNsb2NrZG9tYWluczJ4eHhfM3h4eF9kYXRhLm8KIG9iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0gY2xvY2tkb21haW4ubyBcCisJCQkJCSAgIGNsb2NrZG9tYWluNDR4eC5vIFwKIAkJCQkJICAgY2xvY2tkb21haW5zNDR4eF9kYXRhLm8KKwogIyBDbG9jayBmcmFtZXdvcmsKIG9iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gJChjbG9jay1jb21tb24pIGNsb2NrMnh4eC5vIFwKIAkJCQkJICAgY2xrdDJ4eHhfc3lzLm8gXAogCQkJCQkgICBjbGt0Mnh4eF9kcGxsY29yZS5vIFwKIAkJCQkJICAgY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5vIFwKLQkJCQkJICAgY2xrdDJ4eHhfYXBsbC5vIGNsa3QyeHh4X29zYy5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMjQyMCkJCSs9IGNsb2NrMjQyMF9kYXRhLm8KLW9iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gY2xvY2syNDMwLm8gY2xvY2syNDMwX2RhdGEubworCQkJCQkgICBjbGt0Mnh4eF9hcGxsLm8gY2xrdDJ4eHhfb3NjLm8gXAorCQkJCQkgICBjbGt0Mnh4eF9kcGxsLm8gY2xrdF9pY2xrLm8KK29iai0kKENPTkZJR19TT0NfT01BUDI0MjApCQkrPSBjbG9jazI0MjBfZGF0YS5vCitvYmotJChDT05GSUdfU09DX09NQVAyNDMwKQkJKz0gY2xvY2syNDMwLm8gY2xvY2syNDMwX2RhdGEubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSAkKGNsb2NrLWNvbW1vbikgY2xvY2szeHh4Lm8gXAogCQkJCQkgICBjbG9jazM0eHgubyBjbGt0MzR4eF9kcGxsM20yLm8gXAogCQkJCQkgICBjbG9jazM1MTcubyBjbG9jazM2eHgubyBcCi0JCQkJCSAgIGRwbGwzeHh4Lm8gY2xvY2szeHh4X2RhdGEubworCQkJCQkgICBkcGxsM3h4eC5vIGNsb2NrM3h4eF9kYXRhLm8gXAorCQkJCQkgICBjbGt0X2ljbGsubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSAkKGNsb2NrLWNvbW1vbikgY2xvY2s0NHh4X2RhdGEubyBcCi0JCQkJCSAgIGRwbGwzeHh4Lm8KKwkJCQkJICAgZHBsbDN4eHgubyBkcGxsNDR4eC5vCiAKICMgT01BUDIgY2xvY2sgcmF0ZSBzZXQgZGF0YSAob2xkICJPUFAiIGRhdGEpCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMjQyMCkJCSs9IG9wcDI0MjBfZGF0YS5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMjQzMCkJCSs9IG9wcDI0MzBfZGF0YS5vCitvYmotJChDT05GSUdfU09DX09NQVAyNDIwKQkJKz0gb3BwMjQyMF9kYXRhLm8KK29iai0kKENPTkZJR19TT0NfT01BUDI0MzApCQkrPSBvcHAyNDMwX2RhdGEubwogCiAjIGh3bW9kIGRhdGEKLW9iai0kKENPTkZJR19BUkNIX09NQVAyNDIwKQkJKz0gb21hcF9od21vZF8yNDIwX2RhdGEubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MzApCQkrPSBvbWFwX2h3bW9kXzI0MzBfZGF0YS5vCitvYmotJChDT05GSUdfU09DX09NQVAyNDIwKQkJKz0gb21hcF9od21vZF8yNDIwX2RhdGEubworb2JqLSQoQ09ORklHX1NPQ19PTUFQMjQzMCkJCSs9IG9tYXBfaHdtb2RfMjQzMF9kYXRhLm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gb21hcF9od21vZF8zeHh4X2RhdGEubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBvbWFwX2h3bW9kXzQ0eHhfZGF0YS5vCiAKICMgRU1VIHBlcmlwaGVyYWxzCiBvYmotJChDT05GSUdfT01BUDNfRU1VKQkJCSs9IGVtdS5vCiAKKyMgTDMgaW50ZXJjb25uZWN0CitvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IG9tYXBfbDNfc214Lm8KK29iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0gb21hcF9sM19ub2MubworCiBvYmotJChDT05GSUdfT01BUF9NQk9YX0ZXSykJCSs9IG1haWxib3hfbWFjaC5vCiBtYWlsYm94X21hY2gtb2JqcwkJCTo9IG1haWxib3gubwogCkBAIC0yMTgsMTIgKzI0MCwxNCBAQAogCQkJCQkgICBoc21tYy5vIFwKIAkJCQkJICAgb21hcF9waHlfaW50ZXJuYWwubwogCi1vYmotJChDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSkJCSs9IGJvYXJkLWFtMzUxN2V2bS5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSkJCSs9IGJvYXJkLWFtMzUxN2V2bS5vIFwKKwkJCQkJICAgb21hcF9waHlfaW50ZXJuYWwubyBcCiAKIG9iai0kKENPTkZJR19NQUNIX0NSQU5FQk9BUkQpCQkrPSBib2FyZC1hbTM1MTdjcmFuZS5vCiAKIG9iai0kKENPTkZJR19NQUNIX1NCQzM1MzApCQkrPSBib2FyZC1vbWFwM3N0YWxrZXIubyBcCiAJCQkJCSAgIGhzbW1jLm8KK29iai0kKENPTkZJR19NQUNIX1RJODE2OEVWTSkJCSs9IGJvYXJkLXRpODE2OGV2bS5vCiAjIFBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0IGNvZGUKIHVzYmZzLSQoQ09ORklHX0FSQ0hfT01BUF9PVEcpCQk6PSB1c2ItZnMubwogb2JqLXkJCQkJCSs9ICQodXNiZnMtbSkgJCh1c2Jmcy15KQpAQCAtMjQyLDMgKzI2Niw3IEBACiAKIHNtc2M5MTF4LSQoQ09ORklHX1NNU0M5MTFYKQkJOj0gZ3BtYy1zbXNjOTExeC5vCiBvYmoteQkJCQkJKz0gJChzbXNjOTExeC1tKSAkKHNtc2M5MTF4LXkpCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IGh3c3BpbmxvY2subworCitkaXNwLSQoQ09ORklHX09NQVAyX0RTUykJCTo9IGRpc3BsYXkubworb2JqLXkJCQkJCSs9ICQoZGlzcC1tKSAkKGRpc3AteSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKaW5kZXggZTA2NjE3Ny4uMWZhNmJiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTEzOSwxNSArMTQwLDMxIEBACiAJe09NQVBfVEFHX0xDRCwgJnNkcDI0MzBfbGNkX2NvbmZpZ30sCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF8yNDMwc2RwX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8yNDMwc2RwX2luaXRfZWFybHkodm9pZCkKIHsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDI0MzBfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDI0MzBfY29uZmlnKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7Ci0Jb21hcF9pbml0X2lycSgpOwogfQogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMjQzMF92bW1jMV9zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4wIiksCit9OworCisvKiBWTU1DMSBmb3IgT01BUCBWRERfTU1DMSAoaS9vKSBhbmQgTU1DMSBjYXJkICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMjQzMF92bW1jMSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4NTAwMDAsCisJCS5tYXhfdVYJCQk9IDMxNTAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoc2RwMjQzMF92bW1jMV9zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnNkcDI0MzBfdm1tYzFfc3VwcGxpZXNbMF0sCit9OworCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHNkcDI0MzBfZ3Bpb19kYXRhID0gewogCS5ncGlvX2Jhc2UJPSBPTUFQX01BWF9HUElPX0xJTkVTLAogCS5pcnFfYmFzZQk9IFRXTDQwMzBfR1BJT19JUlFfQkFTRSwKQEAgLTE2MCw2ICsxNzcsNyBAQAogCiAJLyogcGxhdGZvcm1fZGF0YSBmb3IgY2hpbGRyZW4gZ29lcyBoZXJlICovCiAJLmdwaW8JCT0gJnNkcDI0MzBfZ3Bpb19kYXRhLAorCS52bW1jMQkJPSAmc2RwMjQzMF92bW1jMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzZHAyNDMwX2kyY19ib2FyZGluZm9bXSA9IHsKQEAgLTIyNiw2ICsyNDQsOSBAQAogCiAJb21hcDI0MzBfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfWkFDKTsKIAorCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwMjQzMF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwMjQzMF9jb25maWcpOworCiAJb21hcDI0MzBfaTJjX2luaXQoKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDI0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHAyNDMwX2RldmljZXMpKTsKQEAgLTI1Myw5ICsyNzQsMTAgQEAKIE1BQ0hJTkVfU1RBUlQoT01BUF8yNDMwU0RQLCAiT01BUDI0MzAgc2RwMjQzMCBib2FyZCIpCiAJLyogTWFpbnRhaW5lcjogU3llZCBLaGFzaW0gLSBUZXhhcyBJbnN0cnVtZW50cyBJbmMgKi8KIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gb21hcF8yNDMwc2RwX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBvbWFwXzI0MzBzZHBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwXzI0MzBzZHBfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb21hcF8yNDMwc2RwX2luaXRfZWFybHksCisJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF8yNDMwc2RwX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKaW5kZXggNzU0MmJhNS4uYzA2ZWI0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTMwNywzNCArMzA3LDE2IEBACiAJLmRlZmF1bHRfZGV2aWNlCT0gJnNkcDM0MzBfbGNkX2RldmljZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDM0MzBfZHNzX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGRzcyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzZHAzNDMwX2Rzc19kYXRhLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92ZGRhX2RhY19zdXBwbHkgPSB7Ci0JLnN1cHBseQkJPSAidmRkYV9kYWMiLAotCS5kZXYJCT0gJnNkcDM0MzBfZHNzX2RldmljZS5kZXYsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2RwMzQzMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmc2RwMzQzMF9kc3NfZGV2aWNlLAotfTsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZkZGFfZGFjX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpOwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBzZHAzNDMwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF8zNDMwc2RwX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8zNDMwc2RwX2luaXRfZWFybHkodm9pZCkKIHsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDM0MzBfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDM0MzBfY29uZmlnKTsKLQlvbWFwM19wbV9pbml0X2NwdWlkbGUob21hcDNfY3B1aWRsZV9wYXJhbXNfdGFibGUpOwogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhoeWIxOG01MTIxNjBhZjZfc2RyY19wYXJhbXMsIE5VTEwpOwotCW9tYXBfaW5pdF9pcnEoKTsKIH0KIAogc3RhdGljIGludCBzZHAzNDMwX2JhdHRfdGFibGVbXSA9IHsKQEAgLTM3MCwxOCArMzUyLDYgQEAKIAl7fQkvKiBUZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92bW1jMV9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWMiLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdnNpbV9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWNfYXV4IiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZtbWMyX3N1cHBseSA9IHsKLQkuc3VwcGx5CQkJPSAidm1tYyIsCi19OwotCiBzdGF0aWMgaW50IHNkcDM0MzBfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAogCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKIHsKQEAgLTM5MiwxMyArMzYyLDYgQEAKIAltbWNbMV0uZ3Bpb19jZCA9IGdwaW8gKyAxOwogCW9tYXAyX2hzbW1jX2luaXQobW1jKTsKIAotCS8qIGxpbmsgcmVndWxhdG9ycyB0byBNTUMgYWRhcHRlcnMgLi4uIHdlICJrbm93IiB0aGUKLQkgKiByZWd1bGF0b3JzIHdpbGwgYmUgc2V0IHVwIG9ubHkgKmFmdGVyKiB3ZSByZXR1cm4uCi0JICovCi0Jc2RwMzQzMF92bW1jMV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKLQlzZHAzNDMwX3ZzaW1fc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7Ci0Jc2RwMzQzMF92bW1jMl9zdXBwbHkuZGV2ID0gbW1jWzFdLmRldjsKLQogCS8qIGdwaW8gKyA3IGlzICJzdWJfbGNkX2VuX2JrbCIgKG91dHB1dC9QV00xKSAqLwogCWdwaW9fcmVxdWVzdChncGlvICsgNywgInN1Yl9sY2RfZW5fYmtsIik7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyA3LCAwKTsKQEAgLTQyNyw2ICszOTAsMzQgQEAKIAkuaXJxX2xpbmUJPSAxLAogfTsKIAorLyogcmVndWxhdG9yIGNvbnN1bWVyIG1hcHBpbmdzICovCisKKy8qIGFkczc4NDYgb24gU1BJICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92YXV4M19zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZjYyIsICJzcGkxLjAiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZkZGFfZGFjX3N1cHBsaWVzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpLAorfTsKKworLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdnBsbDJfc3VwcGxpZXNbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRzX2RzaSIsICJvbWFwZHNzIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92bW1jMV9zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4wIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92c2ltX3N1cHBsaWVzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidm1tY19hdXgiLCAib21hcF9oc21tYy4wIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92bW1jMl9zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4xIiksCit9OworCiAvKgogICogQXBwbHkgYWxsIHRoZSBmaXhlZCB2b2x0YWdlcyBzaW5jZSBtb3N0IHZlcnNpb25zIG9mIFUtQm9vdAogICogZG9uJ3QgYm90aGVyIHdpdGggdGhhdCBpbml0aWFsaXphdGlvbi4KQEAgLTQ2OSw2ICs0NjAsOCBAQAogCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCQk9IEFSUkFZX1NJWkUoc2RwMzQzMF92YXV4M19zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCQk9IHNkcDM0MzBfdmF1eDNfc3VwcGxpZXMsCiB9OwogCiAvKiBWQVVYNCBmb3IgT01BUCBWRERfQ1NJMiAoY2FtZXJhKSAqLwpAQCAtNDk1LDggKzQ4OCw4IEBACiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSAmc2RwMzQzMF92bW1jMV9zdXBwbHksCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoc2RwMzQzMF92bW1jMV9zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gc2RwMzQzMF92bW1jMV9zdXBwbGllcywKIH07CiAKIC8qIFZNTUMyIGZvciBNTUMyIGNhcmQgKi8KQEAgLTUxMCw4ICs1MDMsOCBAQAogCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSAmc2RwMzQzMF92bW1jMl9zdXBwbHksCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoc2RwMzQzMF92bW1jMl9zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gc2RwMzQzMF92bW1jMl9zdXBwbGllcywKIH07CiAKIC8qIFZTSU0gZm9yIE9NQVAgVkREX01NQzFBIChpL28gZm9yIERBVDQuLkRBVDcpICovCkBAIC01MjUsOCArNTE4LDggQEAKIAkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKIAkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAotCS5jb25zdW1lcl9zdXBwbGllcwk9ICZzZHAzNDMwX3ZzaW1fc3VwcGx5LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKHNkcDM0MzBfdnNpbV9zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gc2RwMzQzMF92c2ltX3N1cHBsaWVzLAogfTsKIAogLyogVkRBQyBmb3IgRFNTIGRyaXZpbmcgUy1WaWRlbyAqLwpAQCAtNTQwLDE2ICs1MzMsOCBAQAogCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSAmc2RwMzQzMF92ZGRhX2RhY19zdXBwbHksCi19OwotCi0vKiBWUExMMiBmb3IgZGlnaXRhbCB2aWRlbyBvdXRwdXRzICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92cGxsMl9zdXBwbGllc1tdID0gewotCXsKLQkJLnN1cHBseQkJPSAidmRkc19kc2kiLAotCQkuZGV2CQk9ICZzZHAzNDMwX2Rzc19kZXZpY2UuZGV2LAotCX0KKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShzZHAzNDMwX3ZkZGFfZGFjX3N1cHBsaWVzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBzZHAzNDMwX3ZkZGFfZGFjX3N1cHBsaWVzLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdnBsbDIgPSB7CkBAIC01NjcsOSArNTUyLDcgQEAKIAkuY29uc3VtZXJfc3VwcGxpZXMJPSBzZHAzNDMwX3ZwbGwyX3N1cHBsaWVzLAogfTsKIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgc2RwMzQzMF9hdWRpbyA9IHsKLQkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAotfTsKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhIHNkcDM0MzBfYXVkaW87CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhIHNkcDM0MzBfY29kZWMgPSB7CiAJLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKQEAgLTY2OSw2ICs2NTIsMTA2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kZXZpY2VfcGFkIHNlcmlhbDFfcGFkc1tdIF9faW5pdGRhdGEgPSB7CisJLyoKKwkgKiBOb3RlIHRoYXQgb2ZmIG91dHB1dCBlbmFibGUgaXMgYW4gYWN0aXZlIGxvdworCSAqIHNpZ25hbC4gU28gc2V0dGluZyB0aGlzIG1lYW5zIHBpbiBpcyBhCisJICogaW5wdXQgZW5hYmxlZCBpbiBvZmYgbW9kZQorCSAqLworCU9NQVBfTVVYX1NUQVRJQygidWFydDFfY3RzLnVhcnQxX2N0cyIsCisJCQkgT01BUF9QSU5fSU5QVVQgfAorCQkJIE9NQVBfUElOX09GRl9JTlBVVF9QVUxMRE9XTiB8CisJCQkgT01BUF9PRkZPVVRfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQxX3J0cy51YXJ0MV9ydHMiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8CisJCQkgT01BUF9PRkZfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQxX3J4LnVhcnQxX3J4IiwKKwkJCSBPTUFQX1BJTl9JTlBVVCB8CisJCQkgT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExET1dOIHwKKwkJCSBPTUFQX09GRk9VVF9FTiB8CisJCQkgT01BUF9NVVhfTU9ERTApLAorCU9NQVBfTVVYX1NUQVRJQygidWFydDFfdHgudWFydDFfdHgiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8CisJCQkgT01BUF9PRkZfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kZXZpY2VfcGFkIHNlcmlhbDJfcGFkc1tdIF9faW5pdGRhdGEgPSB7CisJT01BUF9NVVhfU1RBVElDKCJ1YXJ0Ml9jdHMudWFydDJfY3RzIiwKKwkJCSBPTUFQX1BJTl9JTlBVVF9QVUxMVVAgfAorCQkJIE9NQVBfUElOX09GRl9JTlBVVF9QVUxMRE9XTiB8CisJCQkgT01BUF9PRkZPVVRfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQyX3J0cy51YXJ0Ml9ydHMiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8CisJCQkgT01BUF9PRkZfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQyX3J4LnVhcnQyX3J4IiwKKwkJCSBPTUFQX1BJTl9JTlBVVCB8CisJCQkgT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExET1dOIHwKKwkJCSBPTUFQX09GRk9VVF9FTiB8CisJCQkgT01BUF9NVVhfTU9ERTApLAorCU9NQVBfTVVYX1NUQVRJQygidWFydDJfdHgudWFydDJfdHgiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8CisJCQkgT01BUF9PRkZfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kZXZpY2VfcGFkIHNlcmlhbDNfcGFkc1tdIF9faW5pdGRhdGEgPSB7CisJT01BUF9NVVhfU1RBVElDKCJ1YXJ0M19jdHNfcmN0eC51YXJ0M19jdHNfcmN0eCIsCisJCQkgT01BUF9QSU5fSU5QVVRfUFVMTERPV04gfAorCQkJIE9NQVBfUElOX09GRl9JTlBVVF9QVUxMRE9XTiB8CisJCQkgT01BUF9PRkZPVVRfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQzX3J0c19zZC51YXJ0M19ydHNfc2QiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8CisJCQkgT01BUF9PRkZfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQzX3J4X2lycngudWFydDNfcnhfaXJyeCIsCisJCQkgT01BUF9QSU5fSU5QVVQgfAorCQkJIE9NQVBfUElOX09GRl9JTlBVVF9QVUxMRE9XTiB8CisJCQkgT01BUF9PRkZPVVRfRU4gfAorCQkJIE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQzX3R4X2lydHgudWFydDNfdHhfaXJ0eCIsCisJCQkgT01BUF9QSU5fT1VUUFVUIHwKKwkJCSBPTUFQX09GRl9FTiB8CisJCQkgT01BUF9NVVhfTU9ERTApLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMV9kYXRhID0geworCS5pZAkJPSAwLAorCS5wYWRzCQk9IHNlcmlhbDFfcGFkcywKKwkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDFfcGFkcyksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgPSB7CisJLmlkCQk9IDEsCisJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAorCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKKwkuaWQJCT0gMiwKKwkucGFkcwkJPSBzZXJpYWwzX3BhZHMsCisJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWwzX3BhZHMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGJvYXJkX3NlcmlhbF9pbml0KHZvaWQpCit7CisJb21hcF9zZXJpYWxfaW5pdF9wb3J0KCZzZXJpYWwxX2RhdGEpOworCW9tYXBfc2VyaWFsX2luaXRfcG9ydCgmc2VyaWFsMl9kYXRhKTsKKwlvbWFwX3NlcmlhbF9pbml0X3BvcnQoJnNlcmlhbDNfZGF0YSk7Cit9CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorCitzdGF0aWMgaW5saW5lIHZvaWQgYm9hcmRfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CiAjZW5kaWYKIAogLyoKQEAgLTgwMCw4ICs4ODMsMTEgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzM0MzBzZHBfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CisJb21hcF9ib2FyZF9jb25maWcgPSBzZHAzNDMwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHAzNDMwX2NvbmZpZyk7CisJb21hcDNfcG1faW5pdF9jcHVpZGxlKG9tYXAzX2NwdWlkbGVfcGFyYW1zX3RhYmxlKTsKIAlvbWFwMzQzMF9pMmNfaW5pdCgpOwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDM0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHAzNDMwX2RldmljZXMpKTsKKwlvbWFwX2Rpc3BsYXlfaW5pdCgmc2RwMzQzMF9kc3NfZGF0YSk7CiAJaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApCiAJCXRzX2dwaW8gPSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYyOwogCWVsc2UKQEAgLTgxMCwxMCArODk2LDEwIEBACiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc2RwMzQzMF9zcGlfYm9hcmRfaW5mbywKIAkJCQlBUlJBWV9TSVpFKHNkcDM0MzBfc3BpX2JvYXJkX2luZm8pKTsKIAlhZHM3ODQ2X2Rldl9pbml0KCk7Ci0Jb21hcF9zZXJpYWxfaW5pdCgpOworCWJvYXJkX3NlcmlhbF9pbml0KCk7CiAJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAlib2FyZF9zbWM5MXhfaW5pdCgpOwotCWJvYXJkX2ZsYXNoX2luaXQoc2RwX2ZsYXNoX3BhcnRpdGlvbnMsIGNoaXBfc2VsXzM0MzApOworCWJvYXJkX2ZsYXNoX2luaXQoc2RwX2ZsYXNoX3BhcnRpdGlvbnMsIGNoaXBfc2VsXzM0MzAsIDApOwogCXNkcDM0MzBfZGlzcGxheV9pbml0KCk7CiAJZW5hYmxlX2JvYXJkX3dha2V1cF9zb3VyY2UoKTsKIAl1c2Joc19pbml0KCZ1c2Joc19iZGF0YSk7CkBAIC04MjIsOSArOTA4LDEwIEBACiBNQUNISU5FX1NUQVJUKE9NQVBfMzQzMFNEUCwgIk9NQVAzNDMwIDM0MzBTRFAgYm9hcmQiKQogCS8qIE1haW50YWluZXI6IFN5ZWQgS2hhc2ltIC0gVGV4YXMgSW5zdHJ1bWVudHMgSW5jICovCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBvbWFwXzM0MzBzZHBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvbWFwXzM0MzBzZHBfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwXzM0MzBzZHBfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM2MzBzZHAuYwppbmRleCBkZWVkMmRiLi5hNTkzM2NjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM2MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM2MzBzZHAuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTY5LDE0ICs3MCwxMSBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgc2RwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zZHBfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3NkcF9pbml0X2Vhcmx5KHZvaWQpCiB7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBzZHBfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcF9jb25maWcpOwogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhoOG1ieDAwdTBtZXIwZW1fc2RyY19wYXJhbXMsCiAJCQkJICBoOG1ieDAwdTBtZXIwZW1fc2RyY19wYXJhbXMpOwotCW9tYXBfaW5pdF9pcnEoKTsKIH0KIAogI2lmZGVmIENPTkZJR19PTUFQX01VWApAQCAtMjA2LDE5ICsyMDQsMjIgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3NkcF9pbml0KHZvaWQpCiB7CiAJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JQKTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwX2NvbmZpZyk7CiAJem9vbV9wZXJpcGhlcmFsc19pbml0KCk7CiAJem9vbV9kaXNwbGF5X2luaXQoKTsKIAlib2FyZF9zbWM5MXhfaW5pdCgpOwotCWJvYXJkX2ZsYXNoX2luaXQoc2RwX2ZsYXNoX3BhcnRpdGlvbnMsIGNoaXBfc2VsX3NkcCk7CisJYm9hcmRfZmxhc2hfaW5pdChzZHBfZmxhc2hfcGFydGl0aW9ucywgY2hpcF9zZWxfc2RwLCBOQU5EX0JVU1dJRFRIXzE2KTsKIAllbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSgpOwogCXVzYmhzX2luaXQoJnVzYmhzX2JkYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQXzM2MzBTRFAsICJPTUFQIDM2MzBTRFAgYm9hcmQiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gb21hcF9zZHBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvbWFwX3NkcF9pbml0X2Vhcmx5LAorCS5pbml0X2lycQk9IG9tYXBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXBfc2RwX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKaW5kZXggZjYwM2YzYi4uMzMzY2ViMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9tbWMuaD4KKyNpbmNsdWRlIDxwbGF0L29tYXA0LWtleXBhZC5oPgogCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAiaHNtbWMuaCIKQEAgLTQ3LDYgKzQ4LDkwIEBACiAjZGVmaW5lIE9NQVA0X1NGSDc3NDFfU0VOU09SX09VVFBVVF9HUElPCTE4NAogI2RlZmluZSBPTUFQNF9TRkg3NzQxX0VOQUJMRV9HUElPCQkxODgKIAorc3RhdGljIGNvbnN0IGludCBzZHA0NDMwX2tleW1hcFtdID0geworCUtFWSgwLCAwLCBLRVlfRSksCisJS0VZKDAsIDEsIEtFWV9SKSwKKwlLRVkoMCwgMiwgS0VZX1QpLAorCUtFWSgwLCAzLCBLRVlfSE9NRSksCisJS0VZKDAsIDQsIEtFWV9GNSksCisJS0VZKDAsIDUsIEtFWV9VTktOT1dOKSwKKwlLRVkoMCwgNiwgS0VZX0kpLAorCUtFWSgwLCA3LCBLRVlfTEVGVFNISUZUKSwKKworCUtFWSgxLCAwLCBLRVlfRCksCisJS0VZKDEsIDEsIEtFWV9GKSwKKwlLRVkoMSwgMiwgS0VZX0cpLAorCUtFWSgxLCAzLCBLRVlfU0VORCksCisJS0VZKDEsIDQsIEtFWV9GNiksCisJS0VZKDEsIDUsIEtFWV9VTktOT1dOKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfRU5URVIpLAorCisJS0VZKDIsIDAsIEtFWV9YKSwKKwlLRVkoMiwgMSwgS0VZX0MpLAorCUtFWSgyLCAyLCBLRVlfViksCisJS0VZKDIsIDMsIEtFWV9FTkQpLAorCUtFWSgyLCA0LCBLRVlfRjcpLAorCUtFWSgyLCA1LCBLRVlfVU5LTk9XTiksCisJS0VZKDIsIDYsIEtFWV9ET1QpLAorCUtFWSgyLCA3LCBLRVlfQ0FQU0xPQ0spLAorCisJS0VZKDMsIDAsIEtFWV9aKSwKKwlLRVkoMywgMSwgS0VZX0tQUExVUyksCisJS0VZKDMsIDIsIEtFWV9CKSwKKwlLRVkoMywgMywgS0VZX0YxKSwKKwlLRVkoMywgNCwgS0VZX0Y4KSwKKwlLRVkoMywgNSwgS0VZX1VOS05PV04pLAorCUtFWSgzLCA2LCBLRVlfTyksCisJS0VZKDMsIDcsIEtFWV9TUEFDRSksCisKKwlLRVkoNCwgMCwgS0VZX1cpLAorCUtFWSg0LCAxLCBLRVlfWSksCisJS0VZKDQsIDIsIEtFWV9VKSwKKwlLRVkoNCwgMywgS0VZX0YyKSwKKwlLRVkoNCwgNCwgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoNCwgNSwgS0VZX1VOS05PV04pLAorCUtFWSg0LCA2LCBLRVlfTCksCisJS0VZKDQsIDcsIEtFWV9MRUZUKSwKKworCUtFWSg1LCAwLCBLRVlfUyksCisJS0VZKDUsIDEsIEtFWV9IKSwKKwlLRVkoNSwgMiwgS0VZX0opLAorCUtFWSg1LCAzLCBLRVlfRjMpLAorCUtFWSg1LCA0LCBLRVlfRjkpLAorCUtFWSg1LCA1LCBLRVlfVk9MVU1FRE9XTiksCisJS0VZKDUsIDYsIEtFWV9NKSwKKwlLRVkoNSwgNywgS0VZX1JJR0hUKSwKKworCUtFWSg2LCAwLCBLRVlfUSksCisJS0VZKDYsIDEsIEtFWV9BKSwKKwlLRVkoNiwgMiwgS0VZX04pLAorCUtFWSg2LCAzLCBLRVlfQkFDSyksCisJS0VZKDYsIDQsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSg2LCA1LCBLRVlfVU5LTk9XTiksCisJS0VZKDYsIDYsIEtFWV9QKSwKKwlLRVkoNiwgNywgS0VZX1VQKSwKKworCUtFWSg3LCAwLCBLRVlfUFJPRzEpLAorCUtFWSg3LCAxLCBLRVlfUFJPRzIpLAorCUtFWSg3LCAyLCBLRVlfUFJPRzMpLAorCUtFWSg3LCAzLCBLRVlfUFJPRzQpLAorCUtFWSg3LCA0LCBLRVlfRjQpLAorCUtFWSg3LCA1LCBLRVlfVU5LTk9XTiksCisJS0VZKDcsIDYsIEtFWV9PSyksCisJS0VZKDcsIDcsIEtFWV9ET1dOKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHNkcDQ0MzBfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gc2RwNDQzMF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoc2RwNDQzMF9rZXltYXApLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwNF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBzZHA0NDMwX2tleXBhZF9kYXRhID0geworCS5rZXltYXBfZGF0YQkJPSAmc2RwNDQzMF9rZXltYXBfZGF0YSwKKwkucm93cwkJCT0gOCwKKwkuY29scwkJCT0gOCwKK307CiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHNkcDQ0MzBfZ3Bpb19sZWRzW10gPSB7CiAJewogCQkubmFtZQk9ICJvbWFwNDpncmVlbjpkZWJ1ZzAiLApAQCAtMjM4LDE2ICszMjMsMTMgQEAKIAl7IE9NQVBfVEFHX0xDRCwJCSZzZHA0NDMwX2xjZF9jb25maWcgfSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdF9lYXJseSh2b2lkKQogewotCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhOVUxMLCBOVUxMKTsKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAlvbWFwMl9ncF9jbG9ja2V2ZW50X3NldF9ncHRpbWVyKDEpOwogI2VuZGlmCi0JZ2ljX2luaXRfaXJxKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0gewpAQCAtMjY2LDExICszNDgsNiBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CiAJewotCQkubW1jCQk9IDEsCi0JCS5jYXBzCQk9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSwKLQkJLmdwaW9fd3AJPSAtRUlOVkFMLAotCX0sCi0JewogCQkubW1jCQk9IDIsCiAJCS5jYXBzCQk9ICBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEsCiAJCS5ncGlvX2NkCT0gLUVJTlZBTCwKQEAgLTI3OCwxOSArMzU1LDI0IEBACiAJCS5ub25yZW1vdmFibGUgICA9IHRydWUsCiAJCS5vY3JfbWFzawk9IE1NQ19WRERfMjlfMzAsCiAJfSwKKwl7CisJCS5tbWMJCT0gMSwKKwkJLmNhcHMJCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBLAorCQkuZ3Bpb193cAk9IC1FSU5WQUwsCisJfSwKIAl7fQkvKiBUZXJtaW5hdG9yICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwNDQzMF92YXV4X3N1cHBseVtdID0gewogCXsKIAkJLnN1cHBseSA9ICJ2bW1jIiwKLQkJLmRldl9uYW1lID0gIm1tY2ktb21hcC1ocy4xIiwKKwkJLmRldl9uYW1lID0gIm9tYXBfaHNtbWMuMSIsCiAJfSwKIH07CiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwNDQzMF92bW1jX3N1cHBseVtdID0gewogCXsKIAkJLnN1cHBseSA9ICJ2bW1jIiwKLQkJLmRldl9uYW1lID0gIm1tY2ktb21hcC1ocy4wIiwKKwkJLmRldl9uYW1lID0gIm9tYXBfaHNtbWMuMCIsCiAJfSwKIH07CiAKQEAgLTQyNCw3ICs1MDYsNiBAQAogCS5jb25zdHJhaW50cyA9IHsKIAkJLm1pbl91VgkJCT0gMjEwMDAwMCwKIAkJLm1heF91VgkJCT0gMjEwMDAwMCwKLQkJLmFwcGx5X3VWCQk9IHRydWUsCiAJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCiAJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKIAkJLnZhbGlkX29wc19tYXNrCSA9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQpAQCAtNDM2LDcgKzUxNyw2IEBACiAJLmNvbnN0cmFpbnRzID0gewogCQkubWluX3VWCQkJPSAxODAwMDAwLAogCQkubWF4X3VWCQkJPSAxODAwMDAwLAotCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKIAkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKIAkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAogCQkudmFsaWRfb3BzX21hc2sJID0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCkBAIC00NDgsNyArNTI4LDYgQEAKIAkuY29uc3RyYWludHMgPSB7CiAJCS5taW5fdVYJCQk9IDE4MDAwMDAsCiAJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCi0JCS5hcHBseV91VgkJPSB0cnVlLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCiAJCS52YWxpZF9vcHNfbWFzawkgPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKQEAgLTU0Nyw5ICs2MjYsNzYgQEAKIAlPTUFQNF9NVVgoVVNCQjJfVUxQSVRMTF9DTEssIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2RldmljZV9wYWQgc2VyaWFsMl9wYWRzW10gX19pbml0ZGF0YSA9IHsKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQyX2N0cy51YXJ0Ml9jdHMiLAorCQkJIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQyX3J0cy51YXJ0Ml9ydHMiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQyX3J4LnVhcnQyX3J4IiwKKwkJCSBPTUFQX1BJTl9JTlBVVF9QVUxMVVAgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUF9NVVhfU1RBVElDKCJ1YXJ0Ml90eC51YXJ0Ml90eCIsCisJCQkgT01BUF9QSU5fT1VUUFVUIHwgT01BUF9NVVhfTU9ERTApLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2RldmljZV9wYWQgc2VyaWFsM19wYWRzW10gX19pbml0ZGF0YSA9IHsKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQzX2N0c19yY3R4LnVhcnQzX2N0c19yY3R4IiwKKwkJCSBPTUFQX1BJTl9JTlBVVF9QVUxMVVAgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUF9NVVhfU1RBVElDKCJ1YXJ0M19ydHNfc2QudWFydDNfcnRzX3NkIiwKKwkJCSBPTUFQX1BJTl9PVVRQVVQgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUF9NVVhfU1RBVElDKCJ1YXJ0M19yeF9pcnJ4LnVhcnQzX3J4X2lycngiLAorCQkJIE9NQVBfUElOX0lOUFVUIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVBfTVVYX1NUQVRJQygidWFydDNfdHhfaXJ0eC51YXJ0M190eF9pcnR4IiwKKwkJCSBPTUFQX1BJTl9PVVRQVVQgfCBPTUFQX01VWF9NT0RFMCksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZGV2aWNlX3BhZCBzZXJpYWw0X3BhZHNbXSBfX2luaXRkYXRhID0geworCU9NQVBfTVVYX1NUQVRJQygidWFydDRfcngudWFydDRfcngiLAorCQkJIE9NQVBfUElOX0lOUFVUIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVBfTVVYX1NUQVRJQygidWFydDRfdHgudWFydDRfdHgiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8IE9NQVBfTVVYX01PREUwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDJfZGF0YSA9IHsKKwkuaWQJCT0gMSwKKwkucGFkcwkJPSBzZXJpYWwyX3BhZHMsCisJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWwyX3BhZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsM19kYXRhID0geworCS5pZAkJPSAyLAorCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKKwkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CisJLmlkCQk9IDMsCisJLnBhZHMJCT0gc2VyaWFsNF9wYWRzLAorCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsNF9wYWRzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBib2FyZF9zZXJpYWxfaW5pdCh2b2lkKQoreworCXN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgYmRhdGE7CisJYmRhdGEuZmxhZ3MJPSAwOworCWJkYXRhLnBhZHMJPSBOVUxMOworCWJkYXRhLnBhZHNfY250CT0gMDsKKwliZGF0YS5pZAk9IDA7CisJLyogcGFzcyBkdW1teSBkYXRhIGZvciBVQVJUMSAqLworCW9tYXBfc2VyaWFsX2luaXRfcG9ydCgmYmRhdGEpOworCisJb21hcF9zZXJpYWxfaW5pdF9wb3J0KCZzZXJpYWwyX2RhdGEpOworCW9tYXBfc2VyaWFsX2luaXRfcG9ydCgmc2VyaWFsM19kYXRhKTsKKwlvbWFwX3NlcmlhbF9pbml0X3BvcnQoJnNlcmlhbDRfZGF0YSk7Cit9CiAjZWxzZQogI2RlZmluZSBib2FyZF9tdXgJTlVMTAotI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBib2FyZF9zZXJpYWxfaW5pdCh2b2lkKQoreworCW9tYXBfc2VyaWFsX2luaXQoKTsKK30KKyAjZW5kaWYKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfNDQzMHNkcF9pbml0KHZvaWQpCiB7CkBAIC01NjAsMTAgKzcwNiwxMyBAQAogCQlwYWNrYWdlID0gT01BUF9QQUNLQUdFX0NCTDsKIAlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIHBhY2thZ2UpOwogCisJb21hcF9ib2FyZF9jb25maWcgPSBzZHA0NDMwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHA0NDMwX2NvbmZpZyk7CisKIAlvbWFwNF9pMmNfaW5pdCgpOwogCW9tYXBfc2ZoNzc0MXByb3hfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDQ0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHA0NDMwX2RldmljZXMpKTsKLQlvbWFwX3NlcmlhbF9pbml0KCk7CisJYm9hcmRfc2VyaWFsX2luaXQoKTsKIAlvbWFwNF90d2w2MDMwX2hzbW1jX2luaXQobW1jKTsKIAogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CkBAIC01NzYsNiArNzI1LDEwIEBACiAJCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHNkcDQ0MzBfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShzZHA0NDMwX3NwaV9ib2FyZF9pbmZvKSk7CiAJfQorCisJc3RhdHVzID0gb21hcDRfa2V5Ym9hcmRfaW5pdCgmc2RwNDQzMF9rZXlwYWRfZGF0YSk7CisJaWYgKHN0YXR1cykKKwkJcHJfZXJyKCJLZXlwYWQgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlZFxuIiwgc3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfNDQzMHNkcF9tYXBfaW8odm9pZCkKQEAgLTU4Nyw5ICs3NDAsMTAgQEAKIE1BQ0hJTkVfU1RBUlQoT01BUF80NDMwU0RQLCAiT01BUDQ0MzAgNDQzMFNEUCBib2FyZCIpCiAJLyogTWFpbnRhaW5lcjogU2FudG9zaCBTaGlsaW1rYXIgLSBUZXhhcyBJbnN0cnVtZW50cyBJbmMgKi8KIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gb21hcF80NDMwc2RwX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBvbWFwXzQ0MzBzZHBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwXzQ0MzBzZHBfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb21hcF80NDMwc2RwX2luaXRfZWFybHksCisJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwXzQ0MzBzZHBfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdjcmFuZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdjcmFuZS5jCmluZGV4IGUzYTE5NGYuLmE4OTBkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3Y3JhbmUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2NyYW5lLmMKQEAgLTQ5LDE0ICs0OSwxMCBAQAogI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfY3JhbmVfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfY3JhbmVfaW5pdF9lYXJseSh2b2lkKQogewotCW9tYXBfYm9hcmRfY29uZmlnID0gYW0zNTE3X2NyYW5lX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShhbTM1MTdfY3JhbmVfY29uZmlnKTsKLQogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhOVUxMLCBOVUxMKTsKLQlvbWFwX2luaXRfaXJxKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiaHNfb21hcF9ib2FyZF9kYXRhIHVzYmhzX2JkYXRhIF9faW5pdGRhdGEgPSB7CkBAIC03Nyw2ICs3Myw5IEBACiAJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGFtMzUxN19jcmFuZV9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoYW0zNTE3X2NyYW5lX2NvbmZpZyk7CisKIAkvKiBDb25maWd1cmUgR1BJTyBmb3IgRUhDSSBwb3J0ICovCiAJaWYgKG9tYXBfbXV4X2luaXRfZ3BpbyhHUElPX1VTQl9OUkVTRVQsIE9NQVBfUElOX09VVFBVVCkpIHsKIAkJcHJfZXJyKCJDYW4gbm90IGNvbmZpZ3VyZSBtdXggZm9yIEdQSU9fVVNCX05SRVNFVCAlZFxuIiwKQEAgLTEwOCw5ICsxMDcsMTAgQEAKIAogTUFDSElORV9TVEFSVChDUkFORUJPQVJELCAiQU0zNTE3LzA1IENSQU5FQk9BUkQiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gYW0zNTE3X2NyYW5lX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gYW0zNTE3X2NyYW5lX2luaXRfZWFybHksCisJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gYW0zNTE3X2NyYW5lX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCmluZGV4IDkxMzUzOGEuLmNlN2Q1ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYwpAQCAtMjAwLDYgKzIwMCw5IEBACiB9Owogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGFtMzUxN2V2bV9pMmMyX2JvYXJkaW5mb1tdID0gewogCXsKKwkJSTJDX0JPQVJEX0lORk8oInRsdjMyMGFpYzIzIiwgMHgxQSksCisJfSwKKwl7CiAJCUkyQ19CT0FSRF9JTkZPKCJ0Y2E2NDE2IiwgMHgyMSksCiAJCS5wbGF0Zm9ybV9kYXRhID0gJmFtMzUxN2V2bV9ncGlvX2V4cGFuZGVyX2luZm9fMCwKIAl9LApAQCAtMzc4LDM3ICszODEsMjMgQEAKIAkuZGVmYXVsdF9kZXZpY2UJPSAmYW0zNTE3X2V2bV9sY2RfZGV2aWNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYW0zNTE3X2V2bV9kc3NfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZHNzIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmFtMzUxN19ldm1fZHNzX2RhdGEsCi0JfSwKLX07Ci0KIC8qCiAgKiBCb2FyZCBpbml0aWFsaXphdGlvbgogICovCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBhbTM1MTdfZXZtX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYW0zNTE3X2V2bV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmYW0zNTE3X2V2bV9kc3NfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGFtMzUxN19ldm1faW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX2luaXRfZWFybHkodm9pZCkKIHsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IGFtMzUxN19ldm1fY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGFtMzUxN19ldm1fY29uZmlnKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7Ci0Jb21hcF9pbml0X2lycSgpOwogfQogCiBzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKIAkuaW50ZXJmYWNlX3R5cGUgICAgICAgICA9IE1VU0JfSU5URVJGQUNFX1VMUEksCiAJLm1vZGUgICAgICAgICAgICAgICAgICAgPSBNVVNCX09URywKIAkucG93ZXIgICAgICAgICAgICAgICAgICA9IDUwMCwKKwkuc2V0X3BoeV9wb3dlcgkJPSBhbTM1eF9tdXNiX3BoeV9wb3dlciwKKwkuY2xlYXJfaXJxCQk9IGFtMzV4X211c2JfY2xlYXJfaXJxLAorCS5zZXRfbW9kZQkJPSBhbTM1eF9tdXNiX3NldF9tb2RlLAorCS5yZXNldAkJCT0gYW0zNXhfbXVzYl9yZXNldCwKIH07CiAKIHN0YXRpYyBfX2luaXQgdm9pZCBhbTM1MTdfZXZtX211c2JfaW5pdCh2b2lkKQpAQCAtNDkwLDE0ICs0NzksMTcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFtMzUxN19oZWNjX2RldmljZSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGFtMzUxN19ldm1fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX2luaXQodm9pZCkKIHsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGFtMzUxN19ldm1fY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGFtMzUxN19ldm1fY29uZmlnKTsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwogCiAJYW0zNTE3X2V2bV9pMmNfaW5pdCgpOwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtMzUxN19ldm1fZGV2aWNlcywKLQkJCQlBUlJBWV9TSVpFKGFtMzUxN19ldm1fZGV2aWNlcykpOwotCisJb21hcF9kaXNwbGF5X2luaXQoJmFtMzUxN19ldm1fZHNzX2RhdGEpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAogCS8qIENvbmZpZ3VyZSBHUElPIGZvciBFSENJIHBvcnQgKi8KQEAgLTUyMSw5ICs1MTMsMTAgQEAKIAogTUFDSElORV9TVEFSVChPTUFQMzUxN0VWTSwgIk9NQVAzNTE3L0FNMzUxNyBFVk0iKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gYW0zNTE3X2V2bV9pbml0X2lycSwKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGFtMzUxN19ldm1faW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBhbTM1MTdfZXZtX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKaW5kZXggOWY1NWI2OC4uZjRmODM3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTI3NCwxMyArMjc0LDEwIEBACiAJeyBPTUFQX1RBR19MQ0QsCQkmYXBvbGxvbl9sY2RfY29uZmlnIH0sCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXRfZWFybHkodm9pZCkKIHsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IGFwb2xsb25fY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGFwb2xsb25fY29uZmlnKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7Ci0Jb21hcF9pbml0X2lycSgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXBvbGxvbl9sZWRfaW5pdCh2b2lkKQpAQCAtMzIwLDYgKzMxNyw4IEBACiAJdTMyIHY7CiAKIAlvbWFwMjQyMF9tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9aQUMpOworCW9tYXBfYm9hcmRfY29uZmlnID0gYXBvbGxvbl9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoYXBvbGxvbl9jb25maWcpOwogCiAJYXBvbGxvbl9pbml0X3NtYzkxeCgpOwogCWFwb2xsb25fbGVkX2luaXQoKTsKQEAgLTM1NSw5ICszNTQsMTAgQEAKIE1BQ0hJTkVfU1RBUlQoT01BUF9BUE9MTE9OLCAiT01BUDI0eHggQXBvbGxvbiIpCiAJLyogTWFpbnRhaW5lcjogS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4gKi8KIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gb21hcF9hcG9sbG9uX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBvbWFwX2Fwb2xsb25faW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwX2Fwb2xsb25fbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb21hcF9hcG9sbG9uX2luaXRfZWFybHksCisJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9hcG9sbG9uX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCmluZGV4IDliZTcyODkuLjdiNTY0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwpAQCAtNDAxLDE0ICs0MDEsNiBAQAogCS5kZWZhdWx0X2RldmljZQk9ICZjbV90MzVfZHZpX2RldmljZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtX3QzNV9kc3NfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZHNzIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmNtX3QzNV9kc3NfZGF0YSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9kZXZpY2VfY29uZmlnIHRkbzI0bV9tY3NwaV9jb25maWcgPSB7CiAJLnR1cmJvX21vZGUJPSAwLAogCS5zaW5nbGVfY2hhbm5lbAk9IDEsCS8qIDA6IHNsYXZlLCAxOiBtYXN0ZXIgKi8KQEAgLTQ2OCw3ICs0NjAsNyBAQAogCW1zbGVlcCg1MCk7CiAJZ3Bpb19zZXRfdmFsdWUobGNkX2VuX2dwaW8sIDEpOwogCi0JZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjbV90MzVfZHNzX2RldmljZSk7CisJZXJyID0gb21hcF9kaXNwbGF5X2luaXQoJmNtX3QzNV9kc3NfZGF0YSk7CiAJaWYgKGVycikgewogCQlwcl9lcnIoIkNNLVQzNTogZmFpbGVkIHRvIHJlZ2lzdGVyIERTUyBkZXZpY2VcbiIpOwogCQlnb3RvIGVycl9kZXZfcmVnOwpAQCAtNDk1LDE1ICs0ODcsMTEgQEAKIAkuc3VwcGx5CQkJPSAidm1tY19hdXgiLAogfTsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGNtX3QzNV92ZGFjX3N1cHBseSA9IHsKLQkuc3VwcGx5CQk9ICJ2ZGRhX2RhYyIsCi0JLmRldgkJPSAmY21fdDM1X2Rzc19kZXZpY2UuZGV2LAotfTsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBjbV90MzVfdmRhY19zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZkZGFfZGFjIiwgIm9tYXBkc3MiKTsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGNtX3QzNV92ZHZpX3N1cHBseSA9IHsKLQkuc3VwcGx5CQk9ICJ2ZHZpIiwKLQkuZGV2CQk9ICZjbV90MzVfZHNzX2RldmljZS5kZXYsCi19Oworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGNtX3QzNV92ZHZpX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmR2aSIsICJvbWFwZHNzIik7CiAKIC8qIFZNTUMxIGZvciBNTUMxIHBpbnMgQ01ELCBDTEssIERBVDAuLkRBVDMgKDIwIG1BLCBwbHVzIGNhcmQgPT0gbWF4IDIyMCBtQSkgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBjbV90MzVfdm1tYzEgPSB7CkBAIC02ODAsMjAgKzY2OCwxNCBAQAogCQkJICAgICAgQVJSQVlfU0laRShjbV90MzVfaTJjX2JvYXJkaW5mbykpOwogfQogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBjbV90MzVfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjbV90MzVfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBjbV90MzVfaW5pdF9lYXJseSh2b2lkKQogewotCW9tYXBfYm9hcmRfY29uZmlnID0gY21fdDM1X2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShjbV90MzVfY29uZmlnKTsKLQogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAogCQkJICAgICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKLQlvbWFwX2luaXRfaXJxKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAkvKiBuQ1MgYW5kIElSUSBmb3IgQ00tVDM1IGV0aGVybmV0ICovCiAJT01BUDNfTVVYKEdQTUNfTkNTNSwgT01BUF9NVVhfTU9ERTApLApAQCAtNzkxLDYgKzc3Myw3IEBACiAKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKIAkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKQEAgLTc5OCw4ICs3ODEsMTMgQEAKIAkucG93ZXIJCQk9IDEwMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGNtX3QzNV9jb25maWdbXSBfX2luaXRkYXRhID0geworfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNV9pbml0KHZvaWQpCiB7CisJb21hcF9ib2FyZF9jb25maWcgPSBjbV90MzVfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGNtX3QzNV9jb25maWcpOwogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NVUyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCWNtX3QzNV9pbml0X2kyYygpOwpAQCAtODE1LDkgKzgwMywxMCBAQAogCiBNQUNISU5FX1NUQVJUKENNX1QzNSwgIkNvbXB1bGFiIENNLVQzNSIpCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBjbV90MzVfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLmluaXRfZWFybHkJPSBjbV90MzVfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBjbV90MzVfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCmluZGV4IDhlMThkYzcuLmEyN2UzZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKQEAgLTI1NCwxNiArMjU0LDEzIEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBjbV90MzUxN19jb25maWdbXSBfX2luaXRkYXRhID0gewogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNTE3X2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgY21fdDM1MTdfaW5pdF9lYXJseSh2b2lkKQogewotCW9tYXBfYm9hcmRfY29uZmlnID0gY21fdDM1MTdfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGNtX3QzNTE3X2NvbmZpZyk7Ci0KIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7Ci0Jb21hcF9pbml0X2lycSgpOwogfQogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJLyogR1BJTzE4NiAtIEdyZWVuIExFRCAqLwogCU9NQVAzX01VWChTWVNfQ0xLT1VUMiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9PVVRQVVQpLApAQCAtMjg5LDExICsyODYsMTQgQEAKIAogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjbV90MzUxN19pbml0KHZvaWQpCiB7CiAJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CisJb21hcF9ib2FyZF9jb25maWcgPSBjbV90MzUxN19jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoY21fdDM1MTdfY29uZmlnKTsKIAljbV90MzUxN19pbml0X2xlZHMoKTsKIAljbV90MzUxN19pbml0X25hbmQoKTsKIAljbV90MzUxN19pbml0X3J0YygpOwpAQCAtMzAzLDkgKzMwMywxMCBAQAogCiBNQUNISU5FX1NUQVJUKENNX1QzNTE3LCAiQ29tcHVsYWIgQ00tVDM1MTciKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUgICAgICAgID0gb21hcF9yZXNlcnZlLAotCS5pbml0X2lycQk9IGNtX3QzNTE3X2luaXRfaXJxLAorCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gY21fdDM1MTdfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBjbV90MzUxN19pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jCmluZGV4IGJjMDE0MWIuLmFhMjc0ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGRldmtpdDgwMDBfdm1tYzFfc3VwcGx5ID0KLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm1tY2ktb21hcC1ocy4wIik7CisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJvbWFwX2hzbW1jLjAiKTsKIAogCiAvKiBhZHM3ODQ2IG9uIFNQSSAqLwpAQCAtMTk1LDE0ICsxOTUsNiBAQAogCS5kZWZhdWx0X2RldmljZSA9ICZkZXZraXQ4MDAwX2xjZF9kZXZpY2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkZXZraXQ4MDAwX2Rzc19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBkc3MiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZGV2a2l0ODAwMF9kc3NfZGF0YSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGRldmtpdDgwMDBfdmRkYV9kYWNfc3VwcGx5ID0KIAlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRhX2RhYyIsICJvbWFwZHNzIik7CiAKQEAgLTM1MCw5ICszNDIsNyBAQAogCS51c2JfbW9kZQk9IFQyX1VTQl9NT0RFX1VMUEksCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YSBkZXZraXQ4MDAwX2F1ZGlvX2RhdGEgPSB7Ci0JLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKLX07CitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YSBkZXZraXQ4MDAwX2F1ZGlvX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhIGRldmtpdDgwMDBfY29kZWNfZGF0YSA9IHsKIAkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLApAQCAtNDU2LDExICs0NDYsMTUgQEAKIH07CiAKIAotc3RhdGljIHZvaWQgX19pbml0IGRldmtpdDgwMDBfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBkZXZraXQ4MDAwX2luaXRfZWFybHkodm9pZCkKIHsKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywKIAkJCQkgIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZGV2a2l0ODAwMF9pbml0X2lycSh2b2lkKQorewogCW9tYXBfaW5pdF9pcnEoKTsKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAlvbWFwMl9ncF9jbG9ja2V2ZW50X3NldF9ncHRpbWVyKDEyKTsKQEAgLTU3NSw3ICs1NjksNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2a2l0ODAwMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmZGV2a2l0ODAwMF9kc3NfZGV2aWNlLAogCSZsZWRzX2dwaW8sCiAJJmtleXNfZ3BpbywKIAkmb21hcF9kbTkwMDBfZGV2LApAQCAtNjMyLDYgKzYyNSw3IEBACiAJLnJlc2V0X2dwaW9fcG9ydFsyXSAgPSAtRUlOVkFMCiB9OwogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJLyogbkNTIGFuZCBJUlEgZm9yIERldmtpdDgwMDAgZXRoZXJuZXQgKi8KIAlPTUFQM19NVVgoR1BNQ19OQ1M2LCBPTUFQX01VWF9NT0RFMCksCkBAIC03ODUsNiArNzc5LDcgQEAKIAogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkZXZraXQ4MDAwX2luaXQodm9pZCkKIHsKQEAgLTc5Nyw2ICs3OTIsNyBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmtpdDgwMDBfZGV2aWNlcywKIAkJCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9kZXZpY2VzKSk7CiAKKwlvbWFwX2Rpc3BsYXlfaW5pdCgmZGV2a2l0ODAwMF9kc3NfZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2a2l0ODAwMF9zcGlfYm9hcmRfaW5mbywKIAlBUlJBWV9TSVpFKGRldmtpdDgwMDBfc3BpX2JvYXJkX2luZm8pKTsKIApAQCAtODEzLDggKzgwOSw5IEBACiAKIE1BQ0hJTkVfU1RBUlQoREVWS0lUODAwMCwgIk9NQVAzIERldmtpdDgwMDAiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLmluaXRfZWFybHkJPSBkZXZraXQ4MDAwX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gZGV2a2l0ODAwMF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gZGV2a2l0ODAwMF9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guYwppbmRleCBmZDM4YzA1Li43Mjk4OTJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGJvYXJkLXNkcC1mbGFzaC5jCisgKiBib2FyZC1mbGFzaC5jCiAgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC1mbGFzaC5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHBsYXQvaXJxcy5oPgogCiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CiAjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CkBAIC03MywxMSArNzQsMTEgQEAKIAkJCQkJKyBGTEFTSF9TSVpFX1NEUFYxIC0gMTsKIAl9CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJOT1I6IENhbid0IHJlcXVlc3QgR1BNQyBDU1xuIik7CisJCXByX2VycigiTk9SOiBDYW4ndCByZXF1ZXN0IEdQTUMgQ1NcbiIpOwogCQlyZXR1cm47CiAJfQogCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJvYXJkX25vcl9kZXZpY2UpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSCSJVbmFibGUgdG8gcmVnaXN0ZXIgTk9SIGRldmljZVxuIik7CisJCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIE5PUiBkZXZpY2VcbiIpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT01BUDIpIHx8IFwKQEAgLTEzOSwxNyArMTQwLDIxIEBACiB9OwogCiB2b2lkCi1fX2luaXQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBtdGRfcGFydGl0aW9uICpuYW5kX3BhcnRzLCB1OCBucl9wYXJ0cywgdTggY3MpCitfX2luaXQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBtdGRfcGFydGl0aW9uICpuYW5kX3BhcnRzLAorCQkJdTggbnJfcGFydHMsIHU4IGNzLCBpbnQgbmFuZF90eXBlKQogewogCWJvYXJkX25hbmRfZGF0YS5jcwkJPSBjczsKIAlib2FyZF9uYW5kX2RhdGEucGFydHMJCT0gbmFuZF9wYXJ0czsKLQlib2FyZF9uYW5kX2RhdGEubnJfcGFydHMJCT0gbnJfcGFydHM7CisJYm9hcmRfbmFuZF9kYXRhLm5yX3BhcnRzCT0gbnJfcGFydHM7CisJYm9hcmRfbmFuZF9kYXRhLmRldnNpemUJCT0gbmFuZF90eXBlOwogCisJYm9hcmRfbmFuZF9kYXRhLmVjY19vcHQgPSBPTUFQX0VDQ19IQU1NSU5HX0NPREVfREVGQVVMVDsKKwlib2FyZF9uYW5kX2RhdGEuZ3BtY19pcnEgPSBPTUFQX0dQTUNfSVJRX0JBU0UgKyBjczsKIAlncG1jX25hbmRfaW5pdCgmYm9hcmRfbmFuZF9kYXRhKTsKIH0KICNlbHNlCiB2b2lkCi1fX2luaXQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBtdGRfcGFydGl0aW9uICpuYW5kX3BhcnRzLCB1OCBucl9wYXJ0cywgdTggY3MpCitfX2luaXQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBtdGRfcGFydGl0aW9uICpuYW5kX3BhcnRzLCB1OCBucl9wYXJ0cywgdTggY3MsIGludCBuYW5kX3R5cGUpCiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX01URF9OQU5EX09NQVAyIHx8IENPTkZJR19NVERfTkFORF9PTUFQMl9NT0RVTEUgKi8KQEAgLTE4OSwxMiArMTk0LDEyIEBACiB9CiAKIC8qKgotICogc2RwMzQzMF9mbGFzaF9pbml0IC0gSWRlbnRpZnkgZGV2aWNlcyBjb25uZWN0ZWQgdG8gR1BNQyBhbmQgcmVnaXN0ZXIuCisgKiBib2FyZF9mbGFzaF9pbml0IC0gSWRlbnRpZnkgZGV2aWNlcyBjb25uZWN0ZWQgdG8gR1BNQyBhbmQgcmVnaXN0ZXIuCiAgKgogICogQHJldHVybiAtIHZvaWQuCiAgKi8KIHZvaWQgYm9hcmRfZmxhc2hfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBwYXJ0aXRpb25faW5mb1tdLAotCQkJCQljaGFyIGNoaXBfc2VsX2JvYXJkW11bR1BNQ19DU19OVU1dKQorCQkJY2hhciBjaGlwX3NlbF9ib2FyZFtdW0dQTUNfQ1NfTlVNXSwgaW50IG5hbmRfdHlwZSkKIHsKIAl1OAkJY3MgPSAwOwogCXU4CQlub3JjcyA9IEdQTUNfQ1NfTlVNICsgMTsKQEAgLTIwOCw3ICsyMTMsNyBAQAogCSAqLwogCWlkeCA9IGdldF9ncG1jMF90eXBlKCk7CiAJaWYgKGlkeCA+PSBNQVhfU1VQUE9SVEVEX0dQTUNfQ09ORklHKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgY2hpcCBzZWxlY3Q6ICVkXG4iLCBfX2Z1bmNfXywgY3MpOworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIGNoaXAgc2VsZWN0OiAlZFxuIiwgX19mdW5jX18sIGNzKTsKIAkJcmV0dXJuOwogCX0KIAljb25maWdfc2VsID0gKHVuc2lnbmVkIGNoYXIgKikoY2hpcF9zZWxfYm9hcmRbaWR4XSk7CkBAIC0yMzIsMjMgKzIzNywyMCBAQAogCX0KIAogCWlmIChub3JjcyA+IEdQTUNfQ1NfTlVNKQotCQlwcmludGsoS0VSTl9JTkZPICJOT1I6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgotCQkJCSJpbiBHUE1DXG4iKTsKKwkJcHJfZXJyKCJOT1I6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gaW4gR1BNQ1xuIik7CiAJZWxzZQogCQlib2FyZF9ub3JfaW5pdChwYXJ0aXRpb25faW5mb1swXS5wYXJ0cywKIAkJCQlwYXJ0aXRpb25faW5mb1swXS5ucl9wYXJ0cywgbm9yY3MpOwogCiAJaWYgKG9uZW5hbmRjcyA+IEdQTUNfQ1NfTlVNKQotCQlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKLQkJCQkiaW4gR1BNQ1xuIik7CisJCXByX2VycigiT25lTkFORDogVW5hYmxlIHRvIGZpbmQgY29uZmlndXJhdGlvbiBpbiBHUE1DXG4iKTsKIAllbHNlCiAJCWJvYXJkX29uZW5hbmRfaW5pdChwYXJ0aXRpb25faW5mb1sxXS5wYXJ0cywKIAkJCQkJcGFydGl0aW9uX2luZm9bMV0ubnJfcGFydHMsIG9uZW5hbmRjcyk7CiAKIAlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCi0JCXByaW50ayhLRVJOX0lORk8gIk5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgotCQkJCSJpbiBHUE1DXG4iKTsKKwkJcHJfZXJyKCJOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uIGluIEdQTUNcbiIpOwogCWVsc2UKIAkJYm9hcmRfbmFuZF9pbml0KHBhcnRpdGlvbl9pbmZvWzJdLnBhcnRzLAotCQkJCXBhcnRpdGlvbl9pbmZvWzJdLm5yX3BhcnRzLCBuYW5kY3MpOworCQkJcGFydGl0aW9uX2luZm9bMl0ubnJfcGFydHMsIG5hbmRjcywgbmFuZF90eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guaAppbmRleCA2OWJlZmUwLi5jMjQwYTNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5oCkBAIC0yNSw2ICsyNSw2IEBACiB9OwogCiBleHRlcm4gdm9pZCBib2FyZF9mbGFzaF9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIFtdLAotCQkJCWNoYXIgY2hpcF9zZWxbXVtHUE1DX0NTX05VTV0pOworCQkJCWNoYXIgY2hpcF9zZWxbXVtHUE1DX0NTX05VTV0sIGludCBuYW5kX3R5cGUpOwogZXh0ZXJuIHZvaWQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBtdGRfcGFydGl0aW9uICpuYW5kX3BhcnRzLAotCQkJCQl1OCBucl9wYXJ0cywgdTggY3MpOworCQkJCQl1OCBucl9wYXJ0cywgdTggY3MsIGludCBuYW5kX3R5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwppbmRleCAwZTNkODFlLi43M2UzYzMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwpAQCAtMzMsMTggKzMzLDE3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdID0gewogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0X2Vhcmx5KHZvaWQpCiB7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBnZW5lcmljX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShnZW5lcmljX2NvbmZpZyk7CiAJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKE5VTEwsIE5VTEwpOwotCW9tYXBfaW5pdF9pcnEoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0KHZvaWQpCiB7CiAJb21hcF9zZXJpYWxfaW5pdCgpOworCW9tYXBfYm9hcmRfY29uZmlnID0gZ2VuZXJpY19jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoZ2VuZXJpY19jb25maWcpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQpAQCAtNjgsOSArNjcsMTAgQEAKIE1BQ0hJTkVfU1RBUlQoT01BUF9HRU5FUklDLCAiR2VuZXJpYyBPTUFQMjR4eCIpCiAJLyogTWFpbnRhaW5lcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+ICovCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXBfZ2VuZXJpY19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gb21hcF9nZW5lcmljX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gb21hcF9nZW5lcmljX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9tYXBfZ2VuZXJpY19pbml0X2Vhcmx5LAorCS5pbml0X2lycQk9IG9tYXBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXBfZ2VuZXJpY19pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKaW5kZXggMjVjYzlkYS4uYmFjNzkzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpAQCAtMjkwLDE0ICsyOTAsMTUgQEAKIAl7IE9NQVBfVEFHX0xDRCwJCSZoNF9sY2RfY29uZmlnIH0sCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdF9lYXJseSh2b2lkKQogewotCW9tYXBfYm9hcmRfY29uZmlnID0gaDRfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGg0X2NvbmZpZyk7CiAJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0X2lycSh2b2lkKQorewogCW9tYXBfaW5pdF9pcnEoKTsKLQloNF9pbml0X2ZsYXNoKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIG0yNGMwMSA9IHsKQEAgLTMzMCw2ICszMzEsOSBAQAogewogCW9tYXAyNDIwX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX1pBRik7CiAKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGg0X2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShoNF9jb25maWcpOworCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhlIHNlcmlhbCBwb3J0cyBhcmUgbXV4ZWQgb24gYXQgdGhpcyBwb2ludC4KIAkgKiBZb3UgaGF2ZSB0byBtdXggdGhlbSBvZmYgaW4gZGV2aWNlIGRyaXZlcnMgbGF0ZXIgb24KQEAgLTM2Nyw2ICszNzEsNyBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGg0X2RldmljZXMsIEFSUkFZX1NJWkUoaDRfZGV2aWNlcykpOwogCW9tYXAyX3VzYmZzX2luaXQoJmg0X3VzYl9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKKwloNF9pbml0X2ZsYXNoKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X21hcF9pbyh2b2lkKQpAQCAtMzc4LDggKzM4Myw5IEBACiBNQUNISU5FX1NUQVJUKE9NQVBfSDQsICJPTUFQMjQyMCBINCBib2FyZCIpCiAJLyogTWFpbnRhaW5lcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+ICovCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXBfaDRfbWFwX2lvLAogCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAorCS5tYXBfaW8JCT0gb21hcF9oNF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvbWFwX2g0X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb21hcF9oNF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9oNF9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYwppbmRleCBmOWY1MzQ0Li5kMzE5OWI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCkBAIC0yNTAsNyArMjUwLDcgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgaWdlcDJfdm1tYzFfc3VwcGx5ID0KLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm1tY2ktb21hcC1ocy4wIik7CisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJvbWFwX2hzbW1jLjAiKTsKIAogLyogVk1NQzEgZm9yIE9NQVAgVkREX01NQzEgKGkvbykgYW5kIE1NQzEgY2FyZCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGlnZXAyX3ZtbWMxID0gewpAQCAtMjY4LDcgKzI2OCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgaWdlcDJfdmlvX3N1cHBseSA9Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tY19hdXgiLCAibW1jaS1vbWFwLWhzLjEiKTsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jX2F1eCIsICJvbWFwX2hzbW1jLjEiKTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGlnZXAyX3ZpbyA9IHsKIAkuY29uc3RyYWludHMgPSB7CkBAIC0yODYsNyArMjg2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBpZ2VwMl92bW1jMl9zdXBwbHkgPQotCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAibW1jaS1vbWFwLWhzLjEiKTsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm9tYXBfaHNtbWMuMSIpOwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgaWdlcDJfdm1tYzIgPSB7CiAJLmNvbnN0cmFpbnRzCQk9IHsKQEAgLTQ4NSwxOCArNDg1LDggQEAKIAkuZGVmYXVsdF9kZXZpY2UJPSAmaWdlcDJfZHZpX2RldmljZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlnZXAyX2Rzc19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAib21hcGRzcyIsCi0JLmlkCT0gLTEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWdlcDJfZHNzX2RhdGEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBpZ2VwMl92cGxsMl9zdXBwbHkgPSB7Ci0JLnN1cHBseQk9ICJ2ZGRzX2RzaSIsCi0JLmRldgk9ICZpZ2VwMl9kc3NfZGV2aWNlLmRldiwKLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgaWdlcDJfdnBsbDJfc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRzX2RzaSIsICJvbWFwZHNzIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBpZ2VwMl92cGxsMiA9IHsKIAkuY29uc3RyYWludHMgPSB7CkBAIC01MjEsMjEgKzUxMSwxNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaWdlcDJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmlnZXAyX2Rzc19kZXZpY2UsCiAJJmlnZXAyX3Z3bGFuX2RldmljZSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpZ2VwMl9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGlnZXAyX2luaXRfZWFybHkodm9pZCkKIHsKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMobTY1a3h4eHhhbV9zZHJjX3BhcmFtcywKIAkJCQkgIG02NWt4eHh4YW1fc2RyY19wYXJhbXMpOwotCW9tYXBfaW5pdF9pcnEoKTsKIH0KIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgaWdlcDJfYXVkaW9fZGF0YSA9IHsKLQkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAotfTsKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhIGlnZXAyX2F1ZGlvX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhIGlnZXAyX2NvZGVjX2RhdGEgPSB7CiAJLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKQEAgLTY5Nyw2ICs2ODMsNyBAQAogCS8qIFJlZ2lzdGVyIEkyQyBidXNzZXMgYW5kIGRyaXZlcnMgKi8KIAlpZ2VwMl9pMmNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlnZXAyX2RldmljZXMsIEFSUkFZX1NJWkUoaWdlcDJfZGV2aWNlcykpOworCW9tYXBfZGlzcGxheV9pbml0KCZpZ2VwMl9kc3NfZGF0YSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAJdXNiaHNfaW5pdCgmdXNiaHNfYmRhdGEpOwpAQCAtNzE2LDkgKzcwMywxMCBAQAogCiBNQUNISU5FX1NUQVJUKElHRVAwMDIwLCAiSUdFUCB2MiBib2FyZCIpCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBpZ2VwMl9pbml0X2lycSwKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IGlnZXAyX2luaXRfZWFybHksCisJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gaWdlcDJfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAzMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAzMC5jCmluZGV4IDU3OWZjMmQuLmIxMGRiMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDMwLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBpZ2VwM192bW1jMV9zdXBwbHkgPQotCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAibW1jaS1vbWFwLWhzLjAiKTsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm9tYXBfaHNtbWMuMCIpOwogCiAvKiBWTU1DMSBmb3IgT01BUCBWRERfTU1DMSAoaS9vKSBhbmQgTU1DMSBjYXJkICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgaWdlcDNfdm1tYzEgPSB7CkBAIC0xNjAsNyArMTYwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBpZ2VwM192aW9fc3VwcGx5ID0KLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jX2F1eCIsICJtbWNpLW9tYXAtaHMuMSIpOworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWNfYXV4IiwgIm9tYXBfaHNtbWMuMSIpOwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgaWdlcDNfdmlvID0gewogCS5jb25zdHJhaW50cyA9IHsKQEAgLTE3OCw3ICsxNzgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGlnZXAzX3ZtbWMyX3N1cHBseSA9Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMSIpOworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4xIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBpZ2VwM192bW1jMiA9IHsKIAkuY29uc3RyYWludHMJPSB7CkBAIC0zMzEsMTIgKzMzMSwxMSBAQAogCSZpZ2VwM192d2xhbl9kZXZpY2UsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgaWdlcDNfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBpZ2VwM19pbml0X2Vhcmx5KHZvaWQpCiB7CiAJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG02NWt4eHh4YW1fc2RyY19wYXJhbXMsCiAJCQkJICBtNjVreHh4eGFtX3NkcmNfcGFyYW1zKTsKLQlvbWFwX2luaXRfaXJxKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIGlnZXAzX3R3bDQwMzBfcGRhdGEgPSB7CkBAIC00NTIsNyArNDUxLDggQEAKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAotCS5pbml0X2lycQk9IGlnZXAzX2luaXRfaXJxLAorCS5pbml0X2Vhcmx5CT0gaWdlcDNfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBpZ2VwM19pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwppbmRleCBlNWRjNzQ4Li5lMmJhNzc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTI4OCwxMyArMjg4LDEwIEBACiAJeyBPTUFQX1RBR19MQ0QsCQkmbGRwX2xjZF9jb25maWcgfSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX2luaXRfZWFybHkodm9pZCkKIHsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IGxkcF9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUobGRwX2NvbmZpZyk7CiAJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKE5VTEwsIE5VTEwpOwotCW9tYXBfaW5pdF9pcnEoKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIGxkcF91c2JfZGF0YSA9IHsKQEAgLTMzMCw2ICszMjcsMjYgQEAKIAkuY29uc3VtZXJfc3VwcGxpZXMJPSAmbGRwX3ZtbWMxX3N1cHBseSwKIH07CiAKKy8qIGFkczc4NDYgb24gU1BJICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgbGRwX3ZhdXgxX3N1cHBsaWVzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidmNjIiwgInNwaTEuMCIpLAorfTsKKworLyogVkFVWDEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBsZHBfdmF1eDEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAzMDAwMDAwLAorCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCQk9IEFSUkFZX1NJWkUobGRwX3ZhdXgxX3N1cHBsaWVzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJCT0gbGRwX3ZhdXgxX3N1cHBsaWVzLAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgbGRwX3R3bGRhdGEgPSB7CiAJLmlycV9iYXNlCT0gVFdMNDAzMF9JUlFfQkFTRSwKIAkuaXJxX2VuZAk9IFRXTDQwMzBfSVJRX0VORCwKQEAgLTMzOCw2ICszNTUsNyBAQAogCS5tYWRjCQk9ICZsZHBfbWFkY19kYXRhLAogCS51c2IJCT0gJmxkcF91c2JfZGF0YSwKIAkudm1tYzEJCT0gJmxkcF92bW1jMSwKKwkudmF1eDEJCT0gJmxkcF92YXV4MSwKIAkuZ3BpbwkJPSAmbGRwX2dwaW9fZGF0YSwKIAkua2V5cGFkCQk9ICZsZHBfa3BfdHdsNDAzMF9kYXRhLAogfTsKQEAgLTQyMyw2ICs0NDEsOCBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX2luaXQodm9pZCkKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOworCW9tYXBfYm9hcmRfY29uZmlnID0gbGRwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShsZHBfY29uZmlnKTsKIAlsZHBfaW5pdF9zbXNjOTExeCgpOwogCW9tYXBfaTJjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhsZHBfZGV2aWNlcywgQVJSQVlfU0laRShsZHBfZGV2aWNlcykpOwpAQCAtNDM0LDcgKzQ1NCw3IEBACiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAJYm9hcmRfbmFuZF9pbml0KGxkcF9uYW5kX3BhcnRpdGlvbnMsCi0JCUFSUkFZX1NJWkUobGRwX25hbmRfcGFydGl0aW9ucyksIFpPT01fTkFORF9DUyk7CisJCUFSUkFZX1NJWkUobGRwX25hbmRfcGFydGl0aW9ucyksIFpPT01fTkFORF9DUywgMCk7CiAKIAlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAqLwpAQCAtNDQzLDkgKzQ2MywxMCBAQAogCiBNQUNISU5FX1NUQVJUKE9NQVBfTERQLCAiT01BUCBMRFAgYm9hcmQiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gb21hcF9sZHBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvbWFwX2xkcF9pbml0X2Vhcmx5LAorCS5pbml0X2lycQk9IG9tYXBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXBfbGRwX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKaW5kZXggZjM5Njc1Ni4uZTcxMGNkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKQEAgLTUzNiw3ICs1MzYsNyBAQAogCX0KIAogCW1tY19kYXRhWzBdID0gJm1tYzFfZGF0YTsKLQlvbWFwMl9pbml0X21tYyhtbWNfZGF0YSwgT01BUDI0WFhfTlJfTU1DKTsKKwlvbWFwMjQyeF9pbml0X21tYyhtbWNfZGF0YSk7CiB9CiAjZWxzZQogCkBAIC02MjgsMTEgKzYyOCwxMCBAQAogCW9tYXAyNDJ4X21hcF9jb21tb25faW8oKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG44eDBfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBuOHgwX2luaXRfZWFybHkodm9pZCkKIHsKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7Ci0Jb21hcF9pbml0X2lycSgpOwogfQogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCkBAIC03MDMsMjcgKzcwMiwzMCBAQAogCiBNQUNISU5FX1NUQVJUKE5PS0lBX044MDAsICJOb2tpYSBOODAwIikKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gbjh4MF9tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gbjh4MF9pbml0X2lycSwKKwkubWFwX2lvCQk9IG44eDBfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gbjh4MF9pbml0X2Vhcmx5LAorCS5pbml0X2lycQk9IG9tYXBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG44eDBfaW5pdF9tYWNoaW5lLAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKIE1BQ0hJTkVfRU5ECiAKIE1BQ0hJTkVfU1RBUlQoTk9LSUFfTjgxMCwgIk5va2lhIE44MTAiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBuOHgwX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBuOHgwX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gbjh4MF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBuOHgwX2luaXRfZWFybHksCisJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gbjh4MF9pbml0X21hY2hpbmUsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKIAogTUFDSElORV9TVEFSVChOT0tJQV9OODEwX1dJTUFYLCAiTm9raWEgTjgxMCBXaU1BWCIpCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG44eDBfbWFwX2lvLAogCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAotCS5pbml0X2lycQk9IG44eDBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBuOHgwX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG44eDBfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBuOHgwX2luaXRfbWFjaGluZSwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IGYwOTYzYjYuLjc2NDBjMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9vcHAuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpAQCAtNDUsMTAgKzQ2LDEyIEBACiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CiAjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KKyNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJoc21tYy5oIgogI2luY2x1ZGUgInRpbWVyLWdwLmgiCisjaW5jbHVkZSAicG0uaCIKIAogI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKIApAQCAtMjI4LDE0ICsyMzEsNiBAQAogCS5kZWZhdWx0X2RldmljZSA9ICZiZWFnbGVfZHZpX2RldmljZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJlYWdsZV9kc3NfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgID0gIm9tYXBkc3MiLAotCS5pZCAgICAgICAgICAgID0gLTEsCi0JLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZiZWFnbGVfZHNzX2RhdGEsCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBiZWFnbGVfdmRhY19zdXBwbHkgPQogCVJFR1VMQVRPUl9TVVBQTFkoInZkZGFfZGFjIiwgIm9tYXBkc3MiKTsKIApAQCAtNDM1LDkgKzQzMCw3IEBACiAJLnVzYl9tb2RlCT0gVDJfVVNCX01PREVfVUxQSSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhIGJlYWdsZV9hdWRpb19kYXRhID0gewotCS5hdWRpb19tY2xrID0gMjYwMDAwMDAsCi19Oworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgYmVhZ2xlX2F1ZGlvX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhIGJlYWdsZV9jb2RlY19kYXRhID0gewogCS5hdWRpb19tY2xrID0gMjYwMDAwMDAsCkBAIC01MzYsMTEgKzUyOSwxNSBAQAogCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX2luaXRfZWFybHkodm9pZCkKIHsKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywKIAkJCQkgIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX2luaXRfaXJxKHZvaWQpCit7CiAJb21hcF9pbml0X2lycSgpOwogI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgogCW9tYXAyX2dwX2Nsb2NrZXZlbnRfc2V0X2dwdGltZXIoMTIpOwpAQCAtNTUwLDcgKzU0Nyw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNfYmVhZ2xlX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZsZWRzX2dwaW8sCiAJJmtleXNfZ3BpbywKLQkmYmVhZ2xlX2Rzc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNiZWFnbGVfZmxhc2hfaW5pdCh2b2lkKQpAQCAtNjEwLDYgKzYwNiw1MiBAQAogCS5wb3dlcgkJCT0gMTAwLAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IGJlYWdsZV9vcHBfaW5pdCh2b2lkKQoreworCWludCByID0gMDsKKworCS8qIEluaXRpYWxpemUgdGhlIG9tYXAzIG9wcCB0YWJsZSAqLworCWlmIChvbWFwM19vcHBfaW5pdCgpKSB7CisJCXByX2VycigiJXM6IG9wcCBkZWZhdWx0IGluaXQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDdXN0b20gT1BQIGVuYWJsZWQgZm9yIFhNICovCisJaWYgKG9tYXAzX2JlYWdsZV9nZXRfcmV2KCkgPT0gT01BUDNCRUFHTEVfQk9BUkRfWE0pIHsKKwkJc3RydWN0IG9tYXBfaHdtb2QgKm1oID0gb21hcF9od21vZF9sb29rdXAoIm1wdSIpOworCQlzdHJ1Y3Qgb21hcF9od21vZCAqZGggPSBvbWFwX2h3bW9kX2xvb2t1cCgiaXZhIik7CisJCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCQlpZiAoIW1oIHx8ICFkaCkgeworCQkJcHJfZXJyKCIlczogQWllZS4uIG5vIG1wdS9kc3AgZGV2aWNlcz8gJXAgJXBcbiIsCisJCQkJX19mdW5jX18sIG1oLCBkaCk7CisJCQlyZXR1cm47CisJCX0KKwkJLyogRW5hYmxlIE1QVSAxR0h6IGFuZCBsb3dlciBvcHBzICovCisJCWRldiA9ICZtaC0+b2QtPnBkZXYuZGV2OworCQlyID0gb3BwX2VuYWJsZShkZXYsIDgwMDAwMDAwMCk7CisJCS8qIFRPRE86IE1QVSAxR0h6IG5lZWRzIFNSIGFuZCBBQkIgKi8KKworCQkvKiBFbmFibGUgSVZBIDgwME1IeiBhbmQgbG93ZXIgb3BwcyAqLworCQlkZXYgPSAmZGgtPm9kLT5wZGV2LmRldjsKKwkJciB8PSBvcHBfZW5hYmxlKGRldiwgNjYwMDAwMDAwKTsKKwkJLyogVE9ETzogRFNQIDgwME1IeiBuZWVkcyBTUiBhbmQgQUJCICovCisJCWlmIChyKSB7CisJCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gZW5hYmxlIGhpZ2hlciBvcHAgJWRcbiIsCisJCQkJX19mdW5jX18sIHIpOworCQkJLyoKKwkJCSAqIENsZWFudXAgLSBkaXNhYmxlIHRoZSBoaWdoZXIgZnJlcXMgLSB3ZSBkb250IGNhcmUKKwkJCSAqIGFib3V0IHRoZSByZXN1bHRzCisJCQkgKi8KKwkJCWRldiA9ICZtaC0+b2QtPnBkZXYuZGV2OworCQkJb3BwX2Rpc2FibGUoZGV2LCA4MDAwMDAwMDApOworCQkJZGV2ID0gJmRoLT5vZC0+cGRldi5kZXY7CisJCQlvcHBfZGlzYWJsZShkZXYsIDY2MDAwMDAwMCk7CisJCX0KKwl9CisJcmV0dXJuOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX2luaXQodm9pZCkKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwpAQCAtNjE3LDYgKzY1OSw3IEBACiAJb21hcDNfYmVhZ2xlX2kyY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMob21hcDNfYmVhZ2xlX2RldmljZXMsCiAJCQlBUlJBWV9TSVpFKG9tYXAzX2JlYWdsZV9kZXZpY2VzKSk7CisJb21hcF9kaXNwbGF5X2luaXQoJmJlYWdsZV9kc3NfZGF0YSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCiAJb21hcF9tdXhfaW5pdF9ncGlvKDE3MCwgT01BUF9QSU5fSU5QVVQpOwpAQCAtNjMzLDEzICs2NzYsMTUgQEAKIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKIAogCWJlYWdsZV9kaXNwbGF5X2luaXQoKTsKKwliZWFnbGVfb3BwX2luaXQoKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQM19CRUFHTEUsICJPTUFQMyBCZWFnbGUgQm9hcmQiKQogCS8qIE1haW50YWluZXI6IFN5ZWQgTW9oYW1tZWQgS2hhc2ltIC0gaHR0cDovL2JlYWdsZWJvYXJkLm9yZyAqLwogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvbWFwM19iZWFnbGVfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBvbWFwM19iZWFnbGVfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXAzX2JlYWdsZV9pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYwppbmRleCAzOGEyZDkxLi4wZmEyYzdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAKKyNpbmNsdWRlIDxsaW51eC93bDEyeHguaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKQEAgLTU4LDYgKzYwLDEzIEBACiAjZGVmaW5lIE9NQVAzRVZNX0VUSFJfSURfUkVWCTB4NTAKICNkZWZpbmUgT01BUDNFVk1fRVRIUl9HUElPX0lSUQkxNzYKICNkZWZpbmUgT01BUDNFVk1fU01TQzkxMVhfQ1MJNQorLyoKKyAqIEV0aCBSZXNldCBzaWduYWwKKyAqCTY0ID0gR2VuZXJhdGlvbiAxICg8PVJldkQpCisgKgk3ID0gR2VuZXJhdGlvbiAyICg+PVJldkUpCisgKi8KKyNkZWZpbmUgT01BUDNFVk1fR0VOMV9FVEhSX0dQSU9fUlNUCTY0CisjZGVmaW5lIE9NQVAzRVZNX0dFTjJfRVRIUl9HUElPX1JTVAk3CiAKIHN0YXRpYyB1OCBvbWFwM19ldm1fdmVyc2lvbjsKIApAQCAtMTI0LDEwICsxMzMsMTUgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvbWFwM2V2bV9pbml0X3Ntc2M5MTF4KHZvaWQpCiB7Ci0JaW50IGV0aF9jczsKKwlpbnQgZXRoX2NzLCBldGhfcnN0OwogCXN0cnVjdCBjbGsgKmwzY2s7CiAJdW5zaWduZWQgaW50IHJhdGU7CiAKKwlpZiAoZ2V0X29tYXAzX2V2bV9yZXYoKSA9PSBPTUFQM0VWTV9CT0FSRF9HRU5fMSkKKwkJZXRoX3JzdCA9IE9NQVAzRVZNX0dFTjFfRVRIUl9HUElPX1JTVDsKKwllbHNlCisJCWV0aF9yc3QgPSBPTUFQM0VWTV9HRU4yX0VUSFJfR1BJT19SU1Q7CisKIAlldGhfY3MgPSBPTUFQM0VWTV9TTVNDOTExWF9DUzsKIAogCWwzY2sgPSBjbGtfZ2V0KE5VTEwsICJsM19jayIpOwpAQCAtMTM2LDYgKzE1MCwyNyBAQAogCWVsc2UKIAkJcmF0ZSA9IGNsa19nZXRfcmF0ZShsM2NrKTsKIAorCS8qIENvbmZpZ3VyZSBldGhlcm5ldCBjb250cm9sbGVyIHJlc2V0IGdwaW8gKi8KKwlpZiAoY3B1X2lzX29tYXAzNDMwKCkpIHsKKwkJaWYgKGdwaW9fcmVxdWVzdChldGhfcnN0LCAiU01TQzkxMXggZ3BpbyIpIDwgMCkgeworCQkJcHJfZXJyKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCAlZCBmb3Igc21zYzkxMXhcbiIsCisJCQkJCWV0aF9yc3QpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGdwaW9fZGlyZWN0aW9uX291dHB1dChldGhfcnN0LCAxKSA8IDApIHsKKwkJCXByX2VycihLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBkaXJlY3Rpb24gb2YgJWQgZm9yIiBcCisJCQkJCSIgc21zYzkxMXhcbiIsIGV0aF9yc3QpOworCQkJcmV0dXJuOworCQl9CisJCS8qIHJlc2V0IHB1bHNlIHRvIGV0aGVybmV0IGNvbnRyb2xsZXIqLworCQl1c2xlZXBfcmFuZ2UoMTUwLCAyMjApOworCQlncGlvX3NldF92YWx1ZShldGhfcnN0LCAwKTsKKwkJdXNsZWVwX3JhbmdlKDE1MCwgMjIwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoZXRoX3JzdCwgMSk7CisJCXVzbGVlcF9yYW5nZSgxLCAyKTsKKwl9CisKIAlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVAzRVZNX0VUSFJfR1BJT19JUlEsICJTTVNDOTExeCBpcnEiKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtc2M5MTF4IElSUVxuIiwKIAkJCU9NQVAzRVZNX0VUSFJfR1BJT19JUlEpOwpAQCAtMjM1LDkgKzI3MCw5IEBACiAJZ3Bpb19zZXRfdmFsdWUoT01BUDNFVk1fTENEX1BBTkVMX0VOVkRELCAwKTsKIAogCWlmIChnZXRfb21hcDNfZXZtX3JldigpID49IE9NQVAzRVZNX0JPQVJEX0dFTl8yKQotCQlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9MQ0RfUEFORUxfQktMSUdIVF9HUElPLCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoT01BUDNFVk1fTENEX1BBTkVMX0JLTElHSFRfR1BJTywgMCk7CiAJZWxzZQotCQlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9MQ0RfUEFORUxfQktMSUdIVF9HUElPLCAxKTsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoT01BUDNFVk1fTENEX1BBTkVMX0JLTElHSFRfR1BJTywgMSk7CiAKIAlsY2RfZW5hYmxlZCA9IDE7CiAJcmV0dXJuIDA7CkBAIC0yNDgsOSArMjgzLDkgQEAKIAlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9MQ0RfUEFORUxfRU5WREQsIDEpOwogCiAJaWYgKGdldF9vbWFwM19ldm1fcmV2KCkgPj0gT01BUDNFVk1fQk9BUkRfR0VOXzIpCi0JCWdwaW9fc2V0X3ZhbHVlKE9NQVAzRVZNX0xDRF9QQU5FTF9CS0xJR0hUX0dQSU8sIDEpOworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChPTUFQM0VWTV9MQ0RfUEFORUxfQktMSUdIVF9HUElPLCAxKTsKIAllbHNlCi0JCWdwaW9fc2V0X3ZhbHVlKE9NQVAzRVZNX0xDRF9QQU5FTF9CS0xJR0hUX0dQSU8sIDApOworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChPTUFQM0VWTV9MQ0RfUEFORUxfQktMSUdIVF9HUElPLCAwKTsKIAogCWxjZF9lbmFibGVkID0gMDsKIH0KQEAgLTI4OSw3ICszMjQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9EVklfUEFORUxfRU5fR1BJTywgMSk7CisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoT01BUDNFVk1fRFZJX1BBTkVMX0VOX0dQSU8sIDEpOwogCiAJZHZpX2VuYWJsZWQgPSAxOwogCXJldHVybiAwOwpAQCAtMjk3LDcgKzMzMiw3IEBACiAKIHN0YXRpYyB2b2lkIG9tYXAzX2V2bV9kaXNhYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JZ3Bpb19zZXRfdmFsdWUoT01BUDNFVk1fRFZJX1BBTkVMX0VOX0dQSU8sIDApOworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKE9NQVAzRVZNX0RWSV9QQU5FTF9FTl9HUElPLCAwKTsKIAogCWR2aV9lbmFibGVkID0gMDsKIH0KQEAgLTMyOCwxNCArMzYzLDYgQEAKIAkuZGVmYXVsdF9kZXZpY2UJPSAmb21hcDNfZXZtX2xjZF9kZXZpY2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM19ldm1fZHNzX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGRzcyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwM19ldm1fZHNzX2RhdGEsCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBvbWFwM2V2bV92bW1jMV9zdXBwbHkgPSB7CiAJLnN1cHBseQkJCT0gInZtbWMiLAogfTsKQEAgLTM4MSw2ICs0MDgsMTYgQEAKIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCQkuZ3Bpb193cAk9IDYzLAogCX0sCisjaWZkZWYgQ09ORklHX1dMMTJYWF9QTEFURk9STV9EQVRBCisJeworCQkubmFtZQkJPSAid2wxMjcxIiwKKwkJLm1tYwkJPSAyLAorCQkuY2FwcwkJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAorCQkuZ3Bpb193cAk9IC1FSU5WQUwsCisJCS5ncGlvX2NkCT0gLUVJTlZBTCwKKwkJLm5vbnJlbW92YWJsZQk9IHRydWUsCisJfSwKKyNlbmRpZgogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTQxMSw2ICs0NDgsOCBAQAogc3RhdGljIGludCBvbWFwM2V2bV90d2xfZ3Bpb19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKQogeworCWludCByOworCiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCiAJb21hcF9tdXhfaW5pdF9ncGlvKDYzLCBPTUFQX1BJTl9JTlBVVCk7CiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKQEAgLTQyNiw4ICs0NjUsMTIgQEAKIAkgKi8KIAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwID09IGxlZEEsIExDRCBCYWNrbGlnaHQgY29udHJvbCAqLwotCWdwaW9fcmVxdWVzdChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgIkVOX0xDRF9CS0wiKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDApOworCXIgPSBncGlvX3JlcXVlc3QoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsICJFTl9MQ0RfQktMIik7CisJaWYgKCFyKQorCQlyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLAorCQkJKGdldF9vbWFwM19ldm1fcmV2KCkgPj0gT01BUDNFVk1fQk9BUkRfR0VOXzIpID8gMSA6IDApOworCWlmIChyKQorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQvc2V0IGxjZF9ia2wgZ3Bpb1xuIik7CiAKIAkvKiBncGlvICsgNyA9PSBEVkkgRW5hYmxlICovCiAJZ3Bpb19yZXF1ZXN0KGdwaW8gKyA3LCAiRU5fRFZJIik7CkBAIC00OTEsMTkgKzUzNCwxNSBAQAogCS5pcnFfbGluZQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YSBvbWFwM2V2bV9hdWRpb19kYXRhID0gewotCS5hdWRpb19tY2xrID0gMjYwMDAwMDAsCi19Oworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgb21hcDNldm1fYXVkaW9fZGF0YTsKIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2RhdGEgb21hcDNldm1fY29kZWNfZGF0YSA9IHsKIAkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAogCS5hdWRpbyA9ICZvbWFwM2V2bV9hdWRpb19kYXRhLAogfTsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzX2V2bV92ZGRhX2RhY19zdXBwbHkgPSB7Ci0JLnN1cHBseQkJPSAidmRkYV9kYWMiLAotCS5kZXYJCT0gJm9tYXAzX2V2bV9kc3NfZGV2aWNlLmRldiwKLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgb21hcDNfZXZtX3ZkZGFfZGFjX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpOwogCiAvKiBWREFDIGZvciBEU1MgZHJpdmluZyBTLVZpZGVvICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDNfZXZtX3ZkYWMgPSB7CkBAIC01MzgsNiArNTc3LDY2IEBACiAJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJm9tYXAzX2V2bV92cGxsMl9zdXBwbHksCiB9OwogCisvKiBhZHM3ODQ2IG9uIFNQSSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzZXZtX3Zpb19zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZjYyIsICJzcGkxLjAiKTsKKworLyogVklPIGZvciBhZHM3ODQ2ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDNldm1fdmlvID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJm9tYXAzZXZtX3Zpb19zdXBwbHksCit9OworCisjaWZkZWYgQ09ORklHX1dMMTJYWF9QTEFURk9STV9EQVRBCisKKyNkZWZpbmUgT01BUDNFVk1fV0xBTl9QTUVOQV9HUElPCSgxNTApCisjZGVmaW5lIE9NQVAzRVZNX1dMQU5fSVJRX0dQSU8JCSgxNDkpCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBvbWFwM2V2bV92bW1jMl9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4xIik7CisKKy8qIFZNTUMyIGZvciBkcml2aW5nIHRoZSBXTDEyeHggbW9kdWxlICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDNldm1fdm1tYzIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcyA9ICZvbWFwM2V2bV92bW1jMl9zdXBwbHksCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIG9tYXAzZXZtX3Z3bGFuID0geworCS5zdXBwbHlfbmFtZQkJPSAidndsMTI3MSIsCisJLm1pY3Jvdm9sdHMJCT0gMTgwMDAwMCwgLyogMS44MFYgKi8KKwkuZ3BpbwkJCT0gT01BUDNFVk1fV0xBTl9QTUVOQV9HUElPLAorCS5zdGFydHVwX2RlbGF5CQk9IDcwMDAwLCAvKiA3MG1zICovCisJLmVuYWJsZV9oaWdoCQk9IDEsCisJLmVuYWJsZWRfYXRfYm9vdAk9IDAsCisJLmluaXRfZGF0YQkJPSAmb21hcDNldm1fdm1tYzIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM2V2bV93bGFuX3JlZ3VsYXRvciA9IHsKKwkubmFtZQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCS5pZAkJPSAxLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm9tYXAzZXZtX3Z3bGFuLAorCX0sCit9OworCitzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgb21hcDNldm1fd2xhbl9kYXRhIF9faW5pdGRhdGEgPSB7CisJLmlycSA9IE9NQVBfR1BJT19JUlEoT01BUDNFVk1fV0xBTl9JUlFfR1BJTyksCisJLmJvYXJkX3JlZl9jbG9jayA9IFdMMTJYWF9SRUZDTE9DS18zOCwgLyogMzguNCBNSHogKi8KK307CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgb21hcDNldm1fdHdsZGF0YSA9IHsKIAkuaXJxX2Jhc2UJPSBUV0w0MDMwX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9JUlFfRU5ELApAQCAtNTUwLDYgKzY0OSw3IEBACiAJLmNvZGVjCQk9ICZvbWFwM2V2bV9jb2RlY19kYXRhLAogCS52ZGFjCQk9ICZvbWFwM19ldm1fdmRhYywKIAkudnBsbDIJCT0gJm9tYXAzX2V2bV92cGxsMiwKKwkudmlvCQk9ICZvbWFwM2V2bV92aW8sCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgb21hcDNldm1faTJjX2JvYXJkaW5mb1tdID0gewpAQCAtNjI1LDE5ICs3MjUsMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG9tYXAzX2V2bV9jb25maWdbXSBfX2luaXRkYXRhID0gewogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9pbml0X2Vhcmx5KHZvaWQpCiB7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBvbWFwM19ldm1fY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG9tYXAzX2V2bV9jb25maWcpOwogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLCBOVUxMKTsKLQlvbWFwX2luaXRfaXJxKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvbWFwM19ldm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm9tYXAzX2V2bV9kc3NfZGV2aWNlLAotfTsKLQogc3RhdGljIHN0cnVjdCB1c2Joc19vbWFwX2JvYXJkX2RhdGEgdXNiaHNfYmRhdGEgX19pbml0ZGF0YSA9IHsKIAogCS5wb3J0X21vZGVbMF0gPSBPTUFQX1VTQkhTX1BPUlRfTU9ERV9VTlVTRUQsCkBAIC02NTIsMTQgKzc0NSw3NiBAQAogfTsKIAogI2lmZGVmIENPTkZJR19PTUFQX01VWAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBvbWFwMzV4X2JvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJT01BUDNfTVVYKFNZU19OSVJRLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCB8CiAJCQkJT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExVUCB8IE9NQVBfUElOX09GRl9PVVRQVVRfTE9XIHwKIAkJCQlPTUFQX1BJTl9PRkZfV0FLRVVQRU5BQkxFKSwKIAlPTUFQM19NVVgoTUNTUEkxX0NTMSwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVAgfAotCQkJCU9NQVBfUElOX09GRl9JTlBVVF9QVUxMVVAgfCBPTUFQX1BJTl9PRkZfT1VUUFVUX0xPVyksCisJCQkJT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExVUCB8IE9NQVBfUElOX09GRl9PVVRQVVRfTE9XIHwKKwkJCQlPTUFQX1BJTl9PRkZfV0FLRVVQRU5BQkxFKSwKKwlPTUFQM19NVVgoU1lTX0JPT1Q1LCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCB8CisJCQkJT01BUF9QSU5fT0ZGX05PTkUpLAorCU9NQVAzX01VWChHUE1DX1dBSVQyLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCB8CisJCQkJT01BUF9QSU5fT0ZGX05PTkUpLAorI2lmZGVmIENPTkZJR19XTDEyWFhfUExBVEZPUk1fREFUQQorCS8qIFdMQU4gSVJRIC0gR1BJTyAxNDkgKi8KKwlPTUFQM19NVVgoVUFSVDFfUlRTLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKworCS8qIFdMQU4gUE9XRVIgRU5BQkxFIC0gR1BJTyAxNTAgKi8KKwlPTUFQM19NVVgoVUFSVDFfQ1RTLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX09VVFBVVCksCisKKwkvKiBNTUMyIFNESU8gcGluIG11eGVzIGZvciBXTDEyeHggKi8KKwlPTUFQM19NVVgoU0RNTUMyX0NMSywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVAzX01VWChTRE1NQzJfQ01ELCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQwLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQxLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQyLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQzLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisjZW5kaWYKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBvbWFwMzZ4X2JvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJT01BUDNfTVVYKFNZU19OSVJRLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCB8CisJCQkJT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExVUCB8IE9NQVBfUElOX09GRl9PVVRQVVRfTE9XIHwKKwkJCQlPTUFQX1BJTl9PRkZfV0FLRVVQRU5BQkxFKSwKKwlPTUFQM19NVVgoTUNTUEkxX0NTMSwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVAgfAorCQkJCU9NQVBfUElOX09GRl9JTlBVVF9QVUxMVVAgfCBPTUFQX1BJTl9PRkZfT1VUUFVUX0xPVyB8CisJCQkJT01BUF9QSU5fT0ZGX1dBS0VVUEVOQUJMRSksCisJLyogQU0vRE0zN3ggRVZNOiBEU1MgZGF0YSBidXMgbXV4ZWQgd2l0aCBzeXNfYm9vdCAqLworCU9NQVAzX01VWChEU1NfREFUQTE4LCBPTUFQX01VWF9NT0RFMyB8IE9NQVBfUElOX09GRl9OT05FKSwKKwlPTUFQM19NVVgoRFNTX0RBVEExOSwgT01BUF9NVVhfTU9ERTMgfCBPTUFQX1BJTl9PRkZfTk9ORSksCisJT01BUDNfTVVYKERTU19EQVRBMjIsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fT0ZGX05PTkUpLAorCU9NQVAzX01VWChEU1NfREFUQTIxLCBPTUFQX01VWF9NT0RFMyB8IE9NQVBfUElOX09GRl9OT05FKSwKKwlPTUFQM19NVVgoRFNTX0RBVEEyMiwgT01BUF9NVVhfTU9ERTMgfCBPTUFQX1BJTl9PRkZfTk9ORSksCisJT01BUDNfTVVYKERTU19EQVRBMjMsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fT0ZGX05PTkUpLAorCU9NQVAzX01VWChTWVNfQk9PVDAsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fT0ZGX05PTkUpLAorCU9NQVAzX01VWChTWVNfQk9PVDEsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fT0ZGX05PTkUpLAorCU9NQVAzX01VWChTWVNfQk9PVDMsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fT0ZGX05PTkUpLAorCU9NQVAzX01VWChTWVNfQk9PVDQsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fT0ZGX05PTkUpLAorCU9NQVAzX01VWChTWVNfQk9PVDUsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fT0ZGX05PTkUpLAorCU9NQVAzX01VWChTWVNfQk9PVDYsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fT0ZGX05PTkUpLAorI2lmZGVmIENPTkZJR19XTDEyWFhfUExBVEZPUk1fREFUQQorCS8qIFdMQU4gSVJRIC0gR1BJTyAxNDkgKi8KKwlPTUFQM19NVVgoVUFSVDFfUlRTLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKworCS8qIFdMQU4gUE9XRVIgRU5BQkxFIC0gR1BJTyAxNTAgKi8KKwlPTUFQM19NVVgoVUFSVDFfQ1RTLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX09VVFBVVCksCisKKwkvKiBNTUMyIFNESU8gcGluIG11eGVzIGZvciBXTDEyeHggKi8KKwlPTUFQM19NVVgoU0RNTUMyX0NMSywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVAzX01VWChTRE1NQzJfQ01ELCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQwLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQxLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQyLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQzLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisjZW5kaWYKKworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgb21hcDM1eF9ib2FyZF9tdXgJTlVMTAorI2RlZmluZSBvbWFwMzZ4X2JvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CkBAIC02NzEsMTEgKzgyNiwxOCBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9pbml0KHZvaWQpCiB7CiAJb21hcDNfZXZtX2dldF9yZXZpc2lvbigpOwotCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CisKKwlpZiAoY3B1X2lzX29tYXAzNjMwKCkpCisJCW9tYXAzX211eF9pbml0KG9tYXAzNnhfYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKKwllbHNlCisJCW9tYXAzX211eF9pbml0KG9tYXAzNXhfYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKKworCW9tYXBfYm9hcmRfY29uZmlnID0gb21hcDNfZXZtX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvbWFwM19ldm1fY29uZmlnKTsKIAogCW9tYXAzX2V2bV9pMmNfaW5pdCgpOwogCi0JcGxhdGZvcm1fYWRkX2RldmljZXMob21hcDNfZXZtX2RldmljZXMsIEFSUkFZX1NJWkUob21hcDNfZXZtX2RldmljZXMpKTsKKwlvbWFwX2Rpc3BsYXlfaW5pdCgmb21hcDNfZXZtX2Rzc19kYXRhKTsKIAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG9tYXAzZXZtX3NwaV9ib2FyZF9pbmZvLAogCQkJCUFSUkFZX1NJWkUob21hcDNldm1fc3BpX2JvYXJkX2luZm8pKTsKQEAgLTcxNSwxNCArODc3LDIyIEBACiAJYWRzNzg0Nl9kZXZfaW5pdCgpOwogCW9tYXAzZXZtX2luaXRfc21zYzkxMXgoKTsKIAlvbWFwM19ldm1fZGlzcGxheV9pbml0KCk7CisKKyNpZmRlZiBDT05GSUdfV0wxMlhYX1BMQVRGT1JNX0RBVEEKKwkvKiBXTDEyeHggV0xBTiBJbml0ICovCisJaWYgKHdsMTJ4eF9zZXRfcGxhdGZvcm1fZGF0YSgmb21hcDNldm1fd2xhbl9kYXRhKSkKKwkJcHJfZXJyKCJlcnJvciBzZXR0aW5nIHdsMTJ4eCBkYXRhXG4iKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzZXZtX3dsYW5fcmVndWxhdG9yKTsKKyNlbmRpZgogfQogCiBNQUNISU5FX1NUQVJUKE9NQVAzRVZNLCAiT01BUDMgRVZNIikKIAkvKiBNYWludGFpbmVyOiBTeWVkIE1vaGFtbWVkIEtoYXNpbSAtIFRleGFzIEluc3RydW1lbnRzICovCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBvbWFwM19ldm1faW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvbWFwM19ldm1faW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwM19ldm1faW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2xvZ2ljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzbG9naWMuYwppbmRleCAxNWU0YjA4Li5iNzI2OTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzbG9naWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzbG9naWMuYwpAQCAtMTk1LDExICsxOTUsMTAgQEAKIAlncG1jX3Ntc2M5MTF4X2luaXQoJmJvYXJkX3Ntc2M5MTF4X2RhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcDNsb2dpY19pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXAzbG9naWNfaW5pdF9lYXJseSh2b2lkKQogewogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhOVUxMLCBOVUxMKTsKLQlvbWFwX2luaXRfaXJxKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKQEAgLTIyNSw3ICsyMjQsOCBAQAogTUFDSElORV9TVEFSVChPTUFQM19UT1JQRURPLCAiTG9naWMgT01BUDMgVG9ycGVkbyBib2FyZCIpCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKIAkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKLQkuaW5pdF9pcnEJPSBvbWFwM2xvZ2ljX2luaXRfaXJxLAorCS5pbml0X2Vhcmx5CT0gb21hcDNsb2dpY19pbml0X2Vhcmx5LAorCS5pbml0X2lycQk9IG9tYXBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXAzbG9naWNfaW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApAQCAtMjMzLDcgKzIzMyw4IEBACiBNQUNISU5FX1NUQVJUKE9NQVAzNTMwX0xWX1NPTSwgIk9NQVAgTG9naWMgMzUzMCBMViBTT00gYm9hcmQiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCiAJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCi0JLmluaXRfaXJxCT0gb21hcDNsb2dpY19pbml0X2lycSwKKwkuaW5pdF9lYXJseQk9IG9tYXAzbG9naWNfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwM2xvZ2ljX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IGFhMDVmMmUuLjJlNWRjMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMjUzLDE0ICsyNTMsNiBAQAogCS5kZWZhdWx0X2RldmljZQk9ICZwYW5kb3JhX2xjZF9kZXZpY2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYW5kb3JhX2Rzc19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBkc3MiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcGFuZG9yYV9kc3NfZGF0YSwKLQl9LAotfTsKLQogc3RhdGljIHZvaWQgcGFuZG9yYV93bDEyNTFfaW5pdF9jYXJkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAkvKgpAQCAtMzQxLDEzICszMzMsMTMgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZtbWMxX3N1cHBseSA9Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMCIpOworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4wIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZtbWMyX3N1cHBseSA9Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMSIpOworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4xIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZtbWMzX3N1cHBseSA9Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMiIpOworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4yIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZkZGFfZGFjX3N1cHBseSA9CiAJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpOwpAQCAtNTI0LDkgKzUxNiw3IEBACiAJLnVzYl9tb2RlCT0gVDJfVVNCX01PREVfVUxQSSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhIG9tYXAzcGFuZG9yYV9hdWRpb19kYXRhID0gewotCS5hdWRpb19tY2xrID0gMjYwMDAwMDAsCi19Oworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgb21hcDNwYW5kb3JhX2F1ZGlvX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhIG9tYXAzcGFuZG9yYV9jb2RlY19kYXRhID0gewogCS5hdWRpb19tY2xrID0gMjYwMDAwMDAsCkBAIC02MzQsMTIgKzYyNCwxMSBAQAogCX0KIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfaW5pdF9lYXJseSh2b2lkKQogewogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAogCQkJCSAgbXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcyk7Ci0Jb21hcF9pbml0X2lycSgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFuZG9yYV93bDEyNTFfaW5pdCh2b2lkKQpAQCAtNjc3LDcgKzY2Niw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNwYW5kb3JhX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwYW5kb3JhX2xlZHNfZ3BpbywKIAkmcGFuZG9yYV9rZXlzX2dwaW8sCi0JJnBhbmRvcmFfZHNzX2RldmljZSwKIAkmcGFuZG9yYV92d2xhbl9kZXZpY2UsCiB9OwogCkBAIC03MTIsNiArNzAwLDcgQEAKIAlwYW5kb3JhX3dsMTI1MV9pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMob21hcDNwYW5kb3JhX2RldmljZXMsCiAJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9kZXZpY2VzKSk7CisJb21hcF9kaXNwbGF5X2luaXQoJnBhbmRvcmFfZHNzX2RhdGEpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhvbWFwM3BhbmRvcmFfc3BpX2JvYXJkX2luZm8sCiAJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9zcGlfYm9hcmRfaW5mbykpOwpAQCAtNzI3LDkgKzcxNiwxMCBAQAogCiBNQUNISU5FX1NUQVJUKE9NQVAzX1BBTkRPUkEsICJQYW5kb3JhIEhhbmRoZWxkIENvbnNvbGUiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gb21hcDNwYW5kb3JhX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb21hcDNwYW5kb3JhX2luaXRfZWFybHksCisJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcDNwYW5kb3JhX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNzdGFsa2VyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzc3RhbGtlci5jCmluZGV4IGY2Yzg3NzguLjhlYmRiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNzdGFsa2VyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3N0YWxrZXIuYwpAQCAtMjQwLDE0ICsyNDAsNiBAQAogCS5kZWZhdWx0X2RldmljZQk9ICZvbWFwM19zdGFsa2VyX2R2aV9kZXZpY2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM19zdGFsa2VyX2Rzc19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAib21hcGRzcyIsCi0JLmlkCT0gLTEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmb21hcDNfc3RhbGtlcl9kc3NfZGF0YSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzc3RhbGtlcl92bW1jMV9zdXBwbHkgPSB7CiAJLnN1cHBseQkJPSAidm1tYyIsCiB9OwpAQCAtNDM5LDE5ICs0MzEsMTUgQEAKIAkuaXJxX2xpbmUJPSAxLAogfTsKIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgb21hcDNzdGFsa2VyX2F1ZGlvX2RhdGEgPSB7Ci0JLmF1ZGlvX21jbGsJPSAyNjAwMDAwMCwKLX07CitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YSBvbWFwM3N0YWxrZXJfYXVkaW9fZGF0YTsKIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2RhdGEgb21hcDNzdGFsa2VyX2NvZGVjX2RhdGEgPSB7CiAJLmF1ZGlvX21jbGsJPSAyNjAwMDAwMCwKIAkuYXVkaW8JCT0gJm9tYXAzc3RhbGtlcl9hdWRpb19kYXRhLAogfTsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzX3N0YWxrZXJfdmRkYV9kYWNfc3VwcGx5ID0gewotCS5zdXBwbHkJCT0gInZkZGFfZGFjIiwKLQkuZGV2CQk9ICZvbWFwM19zdGFsa2VyX2Rzc19kZXZpY2UuZGV2LAotfTsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBvbWFwM19zdGFsa2VyX3ZkZGFfZGFjX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpOwogCiAvKiBWREFDIGZvciBEU1MgZHJpdmluZyBTLVZpZGVvICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDNfc3RhbGtlcl92ZGFjID0gewpAQCAtNDY5LDEwICs0NTcsOCBAQAogfTsKIAogLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzX3N0YWxrZXJfdnBsbDJfc3VwcGx5ID0gewotCS5zdXBwbHkJCT0gInZkZHNfZHNpIiwKLQkuZGV2CQk9ICZvbWFwM19zdGFsa2VyX2xjZF9kZXZpY2UuZGV2LAotfTsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBvbWFwM19zdGFsa2VyX3ZwbGwyX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkc19kc2kiLCAib21hcGRzcyIpOwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDNfc3RhbGtlcl92cGxsMiA9IHsKIAkuY29uc3RyYWludHMJCT0gewpAQCAtNTkxLDEyICs1NzcsMTQgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG9tYXAzX3N0YWxrZXJfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19zdGFsa2VyX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfc3RhbGtlcl9pbml0X2Vhcmx5KHZvaWQpCiB7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBvbWFwM19zdGFsa2VyX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvbWFwM19zdGFsa2VyX2NvbmZpZyk7CiAJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfc3RhbGtlcl9pbml0X2lycSh2b2lkKQorewogCW9tYXBfaW5pdF9pcnEoKTsKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAlvbWFwMl9ncF9jbG9ja2V2ZW50X3NldF9ncHRpbWVyKDEyKTsKQEAgLTYwNCw3ICs1OTIsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNfc3RhbGtlcl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmb21hcDNfc3RhbGtlcl9kc3NfZGV2aWNlLAogCSZrZXlzX2dwaW8sCiB9OwogCkBAIC02MzgsMTIgKzYyNSwxNSBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX3N0YWxrZXJfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NVUyk7CisJb21hcF9ib2FyZF9jb25maWcgPSBvbWFwM19zdGFsa2VyX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvbWFwM19zdGFsa2VyX2NvbmZpZyk7CiAKIAlvbWFwM19zdGFsa2VyX2kyY19pbml0KCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvbWFwM19zdGFsa2VyX2RldmljZXMsCiAJCQkgICAgIEFSUkFZX1NJWkUob21hcDNfc3RhbGtlcl9kZXZpY2VzKSk7CiAKKwlvbWFwX2Rpc3BsYXlfaW5pdCgmb21hcDNfc3RhbGtlcl9kc3NfZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ob21hcDNzdGFsa2VyX3NwaV9ib2FyZF9pbmZvLAogCQkJCUFSUkFZX1NJWkUob21hcDNzdGFsa2VyX3NwaV9ib2FyZF9pbmZvKSk7CiAKQEAgLTY2Niw2ICs2NTYsNyBAQAogCS8qIE1haW50YWluZXI6IEphc29uIExhbSAtbHpnQGVtYS10ZWNoLmNvbSAqLwogCS5ib290X3BhcmFtcwkJPSAweDgwMDAwMTAwLAogCS5tYXBfaW8JCQk9IG9tYXAzX21hcF9pbywKKwkuaW5pdF9lYXJseQkJPSBvbWFwM19zdGFsa2VyX2luaXRfZWFybHksCiAJLmluaXRfaXJxCQk9IG9tYXAzX3N0YWxrZXJfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQkJPSBvbWFwM19zdGFsa2VyX2luaXQsCiAJLnRpbWVyCQkJPSAmb21hcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwppbmRleCA4NGNmZGRiLi4xMjdjYjE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCkBAIC0yNTIsOSArMjUyLDcgQEAKIAkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAogfTsKIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgdG91Y2hib29rX2F1ZGlvX2RhdGEgPSB7Ci0JLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKLX07CitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YSB0b3VjaGJvb2tfYXVkaW9fZGF0YTsKIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2RhdGEgdG91Y2hib29rX2NvZGVjX2RhdGEgPSB7CiAJLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKQEAgLTQxNSwxNCArNDEzLDE1IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdF9lYXJseSh2b2lkKQogewotCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBvbWFwM190b3VjaGJvb2tfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG9tYXAzX3RvdWNoYm9va19jb25maWcpOwogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAogCQkJCSAgbXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdF9pcnEodm9pZCkKK3sKIAlvbWFwX2luaXRfaXJxKCk7CiAjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCiAJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxMik7CkBAIC01MTAsNiArNTA5LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdCh2b2lkKQogeworCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CisJb21hcF9ib2FyZF9jb25maWcgPSBvbWFwM190b3VjaGJvb2tfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG9tYXAzX3RvdWNoYm9va19jb25maWcpOworCiAJcG1fcG93ZXJfb2ZmID0gb21hcDNfdG91Y2hib29rX3Bvd2Vyb2ZmOwogCiAJb21hcDNfdG91Y2hib29rX2kyY19pbml0KCk7CkBAIC01MzgsOCArNTQxLDkgQEAKIE1BQ0hJTkVfU1RBUlQoVE9VQ0hCT09LLCAiT01BUDMgdG91Y2hib29rIEJvYXJkIikKIAkvKiBNYWludGFpbmVyOiBHcmVnb2lyZSBHZW50aWwgLSBodHRwOi8vd3d3LmFsd2F5c2lubm92YXRpbmcuY29tICovCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9tYXAzX3RvdWNoYm9va19pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9tYXAzX3RvdWNoYm9va19pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcDNfdG91Y2hib29rX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCBlZDYxYzFmLi4wZjRkOGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93bDEyeHguaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL29tYXA0LWNvbW1vbi5oPgpAQCAtNDUsNiArNDcsMTggQEAKIAogI2RlZmluZSBHUElPX0hVQl9QT1dFUgkJMQogI2RlZmluZSBHUElPX0hVQl9OUkVTRVQJCTYyCisjZGVmaW5lIEdQSU9fV0lGSV9QTUVOQQkJNDMKKyNkZWZpbmUgR1BJT19XSUZJX0lSUQkJNTMKKworLyogd2wxMjd4IEJULCBGTSwgR1BTIGNvbm5lY3Rpdml0eSBjaGlwICovCitzdGF0aWMgaW50IHdsMTI3MV9ncGlvc1tdID0gezQ2LCAtMSwgLTF9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2wxMjcxX2RldmljZSA9IHsKKwkubmFtZQk9ICJraW0iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJndsMTI3MV9ncGlvcywKKwl9LAorfTsKIAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBncGlvX2xlZHNbXSA9IHsKIAl7CkBAIC03NCwxMyArODgsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBhbmRhX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZsZWRzX2dwaW8sCisJJndsMTI3MV9kZXZpY2UsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcDRfcGFuZGFfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwNF9wYW5kYV9pbml0X2Vhcmx5KHZvaWQpCiB7CiAJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKE5VTEwsIE5VTEwpOwotCWdpY19pbml0X2lycSgpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYmhzX29tYXBfYm9hcmRfZGF0YSB1c2Joc19iZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTE2MywxNiArMTc3LDYyIEBACiAJCS5ncGlvX3dwCT0gLUVJTlZBTCwKIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCX0sCisJeworCQkubmFtZQkJPSAid2wxMjcxIiwKKwkJLm1tYwkJPSA1LAorCQkuY2FwcwkJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAorCQkuZ3Bpb193cAk9IC1FSU5WQUwsCisJCS5ncGlvX2NkCT0gLUVJTlZBTCwKKwkJLm9jcl9tYXNrCT0gTU1DX1ZERF8xNjVfMTk1LAorCQkubm9ucmVtb3ZhYmxlCT0gdHJ1ZSwKKwl9LAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBvbWFwNF9wYW5kYV92bW1jX3N1cHBseVtdID0gewogCXsKIAkJLnN1cHBseSA9ICJ2bW1jIiwKLQkJLmRldl9uYW1lID0gIm1tY2ktb21hcC1ocy4wIiwKKwkJLmRldl9uYW1lID0gIm9tYXBfaHNtbWMuMCIsCiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBvbWFwNF9wYW5kYV92bW1jNV9zdXBwbHkgPSB7CisJLnN1cHBseSA9ICJ2bW1jIiwKKwkuZGV2X25hbWUgPSAib21hcF9oc21tYy40IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBwYW5kYV92bW1jNSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gJm9tYXA0X3BhbmRhX3ZtbWM1X3N1cHBseSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgcGFuZGFfdndsYW4gPSB7CisJLnN1cHBseV9uYW1lID0gInZ3bDEyNzEiLAorCS5taWNyb3ZvbHRzID0gMTgwMDAwMCwgLyogMS44ViAqLworCS5ncGlvID0gR1BJT19XSUZJX1BNRU5BLAorCS5zdGFydHVwX2RlbGF5ID0gNzAwMDAsIC8qIDcwbXNlYyAqLworCS5lbmFibGVfaGlnaCA9IDEsCisJLmVuYWJsZWRfYXRfYm9vdCA9IDAsCisJLmluaXRfZGF0YSA9ICZwYW5kYV92bW1jNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfdndsYW5fZGV2aWNlID0geworCS5uYW1lCQk9ICJyZWctZml4ZWQtdm9sdGFnZSIsCisJLmlkCQk9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFuZGFfdndsYW4sCisJfSwKK307CisKK3N0cnVjdCB3bDEyeHhfcGxhdGZvcm1fZGF0YSBvbWFwX3BhbmRhX3dsYW5fZGF0YSAgX19pbml0ZGF0YSA9IHsKKwkuaXJxID0gT01BUF9HUElPX0lSUShHUElPX1dJRklfSVJRKSwKKwkvKiBQQU5EQSByZWYgY2xvY2sgaXMgMzguNCBNSHogKi8KKwkuYm9hcmRfcmVmX2Nsb2NrID0gMiwKK307CisKIHN0YXRpYyBpbnQgb21hcDRfdHdsNjAzMF9oc21tY19sYXRlX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQgPSAwOwpAQCAtMzA2LDcgKzM2Niw2IEBACiAJLmNvbnN0cmFpbnRzID0gewogCQkubWluX3VWCQkJPSAyMTAwMDAwLAogCQkubWF4X3VWCQkJPSAyMTAwMDAwLAotCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKIAkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKIAkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAogCQkudmFsaWRfb3BzX21hc2sJID0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCkBAIC0zMTgsNyArMzc3LDYgQEAKIAkuY29uc3RyYWludHMgPSB7CiAJCS5taW5fdVYJCQk9IDE4MDAwMDAsCiAJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCi0JCS5hcHBseV91VgkJPSB0cnVlLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCiAJCS52YWxpZF9vcHNfbWFzawkgPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKQEAgLTMzMCw3ICszODgsNiBAQAogCS5jb25zdHJhaW50cyA9IHsKIAkJLm1pbl91VgkJCT0gMTgwMDAwMCwKIAkJLm1heF91VgkJCT0gMTgwMDAwMCwKLQkJLmFwcGx5X3VWCQk9IHRydWUsCiAJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCiAJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKIAkJLnZhbGlkX29wc19tYXNrCSA9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQpAQCAtMzkyLDEwICs0NDksOTAgQEAKIAogI2lmZGVmIENPTkZJR19PTUFQX01VWAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCS8qIFdMQU4gSVJRIC0gR1BJTyA1MyAqLworCU9NQVA0X01VWChHUE1DX05DUzMsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fSU5QVVQpLAorCS8qIFdMQU4gUE9XRVIgRU5BQkxFIC0gR1BJTyA0MyAqLworCU9NQVA0X01VWChHUE1DX0ExOSwgT01BUF9NVVhfTU9ERTMgfCBPTUFQX1BJTl9PVVRQVVQpLAorCS8qIFdMQU4gU0RJTzogTU1DNSBDTUQgKi8KKwlPTUFQNF9NVVgoU0RNTUM1X0NNRCwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCS8qIFdMQU4gU0RJTzogTU1DNSBDTEsgKi8KKwlPTUFQNF9NVVgoU0RNTUM1X0NMSywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCS8qIFdMQU4gU0RJTzogTU1DNSBEQVRbMC0zXSAqLworCU9NQVA0X01VWChTRE1NQzVfREFUMCwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVA0X01VWChTRE1NQzVfREFUMSwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVA0X01VWChTRE1NQzVfREFUMiwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVA0X01VWChTRE1NQzVfREFUMywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZGV2aWNlX3BhZCBzZXJpYWwyX3BhZHNbXSBfX2luaXRkYXRhID0geworCU9NQVBfTVVYX1NUQVRJQygidWFydDJfY3RzLnVhcnQyX2N0cyIsCisJCQkgT01BUF9QSU5fSU5QVVRfUFVMTFVQIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVBfTVVYX1NUQVRJQygidWFydDJfcnRzLnVhcnQyX3J0cyIsCisJCQkgT01BUF9QSU5fT1VUUFVUIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVBfTVVYX1NUQVRJQygidWFydDJfcngudWFydDJfcngiLAorCQkJIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQyX3R4LnVhcnQyX3R4IiwKKwkJCSBPTUFQX1BJTl9PVVRQVVQgfCBPTUFQX01VWF9NT0RFMCksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZGV2aWNlX3BhZCBzZXJpYWwzX3BhZHNbXSBfX2luaXRkYXRhID0geworCU9NQVBfTVVYX1NUQVRJQygidWFydDNfY3RzX3JjdHgudWFydDNfY3RzX3JjdHgiLAorCQkJIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQzX3J0c19zZC51YXJ0M19ydHNfc2QiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQX01VWF9TVEFUSUMoInVhcnQzX3J4X2lycngudWFydDNfcnhfaXJyeCIsCisJCQkgT01BUF9QSU5fSU5QVVQgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUF9NVVhfU1RBVElDKCJ1YXJ0M190eF9pcnR4LnVhcnQzX3R4X2lydHgiLAorCQkJIE9NQVBfUElOX09VVFBVVCB8IE9NQVBfTVVYX01PREUwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kZXZpY2VfcGFkIHNlcmlhbDRfcGFkc1tdIF9faW5pdGRhdGEgPSB7CisJT01BUF9NVVhfU1RBVElDKCJ1YXJ0NF9yeC51YXJ0NF9yeCIsCisJCQkgT01BUF9QSU5fSU5QVVQgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUF9NVVhfU1RBVElDKCJ1YXJ0NF90eC51YXJ0NF90eCIsCisJCQkgT01BUF9QSU5fT1VUUFVUIHwgT01BUF9NVVhfTU9ERTApLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworCS5pZCAgICAgICAgICAgICA9IDEsCisJLnBhZHMgICAgICAgICAgID0gc2VyaWFsMl9wYWRzLAorCS5wYWRzX2NudCAgICAgICA9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKKwkuaWQgICAgICAgICAgICAgPSAyLAorCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDNfcGFkcywKKwkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CisJLmlkICAgICAgICAgICAgID0gMywKKwkucGFkcyAgICAgICAgICAgPSBzZXJpYWw0X3BhZHMsCisJLnBhZHNfY250ICAgICAgID0gQVJSQVlfU0laRShzZXJpYWw0X3BhZHMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGJvYXJkX3NlcmlhbF9pbml0KHZvaWQpCit7CisJc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBiZGF0YTsKKwliZGF0YS5mbGFncyAgICAgPSAwOworCWJkYXRhLnBhZHMgICAgICA9IE5VTEw7CisJYmRhdGEucGFkc19jbnQgID0gMDsKKwliZGF0YS5pZCAgICAgICAgPSAwOworCS8qIHBhc3MgZHVtbXkgZGF0YSBmb3IgVUFSVDEgKi8KKwlvbWFwX3NlcmlhbF9pbml0X3BvcnQoJmJkYXRhKTsKKworCW9tYXBfc2VyaWFsX2luaXRfcG9ydCgmc2VyaWFsMl9kYXRhKTsKKwlvbWFwX3NlcmlhbF9pbml0X3BvcnQoJnNlcmlhbDNfZGF0YSk7CisJb21hcF9zZXJpYWxfaW5pdF9wb3J0KCZzZXJpYWw0X2RhdGEpOworfQogI2Vsc2UKICNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKKworc3RhdGljIGlubGluZSB2b2lkIGJvYXJkX3NlcmlhbF9pbml0KHZvaWQpCit7CisJb21hcF9zZXJpYWxfaW5pdCgpOworfQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwNF9wYW5kYV9pbml0KHZvaWQpCkBAIC00MDYsOSArNTQzLDEzIEBACiAJCXBhY2thZ2UgPSBPTUFQX1BBQ0tBR0VfQ0JMOwogCW9tYXA0X211eF9pbml0KGJvYXJkX211eCwgcGFja2FnZSk7CiAKKwlpZiAod2wxMnh4X3NldF9wbGF0Zm9ybV9kYXRhKCZvbWFwX3BhbmRhX3dsYW5fZGF0YSkpCisJCXByX2VycigiZXJyb3Igc2V0dGluZyB3bDEyeHggZGF0YVxuIik7CisKIAlvbWFwNF9wYW5kYV9pMmNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBhbmRhX2RldmljZXMsIEFSUkFZX1NJWkUocGFuZGFfZGV2aWNlcykpOwotCW9tYXBfc2VyaWFsX2luaXQoKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfdndsYW5fZGV2aWNlKTsKKwlib2FyZF9zZXJpYWxfaW5pdCgpOwogCW9tYXA0X3R3bDYwMzBfaHNtbWNfaW5pdChtbWMpOwogCW9tYXA0X2VoY2lfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CkBAIC00MjUsNyArNTY2LDggQEAKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAogCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5tYXBfaW8JCT0gb21hcDRfcGFuZGFfbWFwX2lvLAotCS5pbml0X2lycQk9IG9tYXA0X3BhbmRhX2luaXRfaXJxLAorCS5pbml0X2Vhcmx5CT0gb21hcDRfcGFuZGFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXA0X3BhbmRhX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwppbmRleCAwODc3MGNjLi5kMDk2MTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC0zNTgsOSArMzU4LDcgQEAKIAkuY29uc3VtZXJfc3VwcGxpZXMJPSAmb3Zlcm9fdm1tYzFfc3VwcGx5LAogfTsKIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgb3Zlcm9fYXVkaW9fZGF0YSA9IHsKLQkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAotfTsKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhIG92ZXJvX2F1ZGlvX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhIG92ZXJvX2NvZGVjX2RhdGEgPSB7CiAJLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKQEAgLTQwOSwxNCArNDA3LDExIEBACiAJeyBPTUFQX1RBR19MQ0QsCQkmb3Zlcm9fbGNkX2NvbmZpZyB9LAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG92ZXJvX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9faW5pdF9lYXJseSh2b2lkKQogewotCW9tYXBfYm9hcmRfY29uZmlnID0gb3Zlcm9fY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG92ZXJvX2NvbmZpZyk7CiAJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCiAJCQkJICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKLQlvbWFwX2luaXRfaXJxKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvdmVyb19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKQEAgLTQ0OSw2ICs0NDQsOCBAQAogc3RhdGljIHZvaWQgX19pbml0IG92ZXJvX2luaXQodm9pZCkKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOworCW9tYXBfYm9hcmRfY29uZmlnID0gb3Zlcm9fY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG92ZXJvX2NvbmZpZyk7CiAJb3Zlcm9faTJjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvdmVyb19kZXZpY2VzLCBBUlJBWV9TSVpFKG92ZXJvX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CkBAIC01MDEsOSArNDk4LDEwIEBACiAKIE1BQ0hJTkVfU1RBUlQoT1ZFUk8sICJHdW1zdGl4IE92ZXJvIikKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAogCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAotCS5pbml0X2lycQk9IG92ZXJvX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Zlcm9faW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvdmVyb19pbml0LAogCS50aW1lcgkJPSAmb21hcF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMKaW5kZXggMzlhNzFiYi4uMmFmOGIwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1ybTY4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgInNkcmFtLW5va2lhLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBybTY4MF92ZW1tY19jb25zdW1lcnNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm1tY2ktb21hcC1ocy4xIiksCisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJvbWFwX2hzbW1jLjEiKSwKIH07CiAKIC8qIEZpeGVkIHJlZ3VsYXRvciBmb3IgaW50ZXJuYWwgZU1NQyAqLwpAQCAtMTM4LDE0ICsxMzgsMTMgQEAKIAlvbWFwMl9oc21tY19pbml0KG1tYyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBybTY4MF9pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHJtNjgwX2luaXRfZWFybHkodm9pZCkKIHsKIAlzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19wYXJhbXM7CiAKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCXNkcmNfcGFyYW1zID0gbm9raWFfZ2V0X3NkcmFtX3RpbWluZ3MoKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKHNkcmNfcGFyYW1zLCBzZHJjX3BhcmFtcyk7Ci0Jb21hcF9pbml0X2lycSgpOwogfQogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCkBAIC0xNzYsOSArMTc1LDEwIEBACiAKIE1BQ0hJTkVfU1RBUlQoTk9LSUFfUk02ODAsICJOb2tpYSBSTS02ODAgYm9hcmQiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBybTY4MF9tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gcm02ODBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBybTY4MF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBybTY4MF9pbml0X2Vhcmx5LAorCS5pbml0X2lycQk9IG9tYXBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IHJtNjgwX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKaW5kZXggZTc1ZTI0MC4uNWYxOTAwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKQEAgLTM2LDYgKzM2LDggQEAKIAogI2luY2x1ZGUgPHNvdW5kL3RsdjMyMGFpYzN4Lmg+CiAjaW5jbHVkZSA8c291bmQvdHBhNjEzMGEyLXBsYXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYWRpby1zaTQ3MTMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zaTQ3MTMuaD4KIAogI2luY2x1ZGUgPC4uL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2My5oPgogCkBAIC00Nyw2ICs0OSw4IEBACiAKICNkZWZpbmUgUlg1MV9XTDEyNTFfUE9XRVJfR1BJTwkJODcKICNkZWZpbmUgUlg1MV9XTDEyNTFfSVJRX0dQSU8JCTQyCisjZGVmaW5lIFJYNTFfRk1UWF9SRVNFVF9HUElPCQkxNjMKKyNkZWZpbmUgUlg1MV9GTVRYX0lSUQkJCTUzCiAKIC8qIGxpc3QgYWxsIHNwaSBkZXZpY2VzIGhlcmUgKi8KIGVudW0gewpAQCAtMzMxLDEzICszMzUsMTMgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZtbWMxX3N1cHBseSA9Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMCIpOworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4wIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZhdXgzX3N1cHBseSA9Ci0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMSIpOworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4xIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZzaW1fc3VwcGx5ID0KLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jX2F1eCIsICJtbWNpLW9tYXAtaHMuMSIpOworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWNfYXV4IiwgIm9tYXBfaHNtbWMuMSIpOwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92bW1jMl9zdXBwbGllc1tdID0gewogCS8qIHRsdjMyMGFpYzN4IGFuYWxvZyBzdXBwbGllcyAqLwpAQCAtMzQ4LDcgKzM1Miw3IEBACiAJLyogdHBhNjEzMGEyICovCiAJUkVHVUxBVE9SX1NVUFBMWSgiVmRkIiwgIjItMDA2MCIpLAogCS8qIEtlZXAgdm1tYyBhcyBsYXN0IGl0ZW0uIEl0IGlzIG5vdCBpdGVyYXRlZCBmb3IgbmV3ZXIgYm9hcmRzICovCi0JUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMSIpLAorCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4xIiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92aW9fc3VwcGxpZXNbXSA9IHsKQEAgLTM1NywxMCArMzYxLDE0IEBACiAJUkVHVUxBVE9SX1NVUFBMWSgiRFZERCIsICIyLTAwMTgiKSwKIAlSRUdVTEFUT1JfU1VQUExZKCJJT1ZERCIsICIyLTAwMTkiKSwKIAlSRUdVTEFUT1JfU1VQUExZKCJEVkREIiwgIjItMDAxOSIpLAorCS8qIFNpNDcxMyBJTyBzdXBwbHkgKi8KKwlSRUdVTEFUT1JfU1VQUExZKCJ2aW8iLCAiMi0wMDYzIiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92YXV4MV9jb25zdW1lcnNbXSA9IHsKIAlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRzX3NkaSIsICJvbWFwZHNzIiksCisJLyogU2k0NzEzIHN1cHBseSAqLworCVJFR1VMQVRPUl9TVVBQTFkoInZkZCIsICIyLTAwNjMiKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZkYWNfc3VwcGx5W10gPSB7CkBAIC01MTEsNiArNTE5LDQxIEBACiAJLmNvbnN1bWVyX3N1cHBsaWVzCT0gcng1MV92aW9fc3VwcGxpZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHNpNDcxM19wbGF0Zm9ybV9kYXRhIHJ4NTFfc2k0NzEzX2kyY19kYXRhIF9faW5pdGRhdGFfb3JfbW9kdWxlID0geworCS5ncGlvX3Jlc2V0CT0gUlg1MV9GTVRYX1JFU0VUX0dQSU8sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHJ4NTFfc2k0NzEzX2JvYXJkX2luZm8gX19pbml0ZGF0YV9vcl9tb2R1bGUgPSB7CisJSTJDX0JPQVJEX0lORk8oInNpNDcxMyIsIFNJNDcxM19JMkNfQUREUl9CVVNFTl9ISUdIKSwKKwkucGxhdGZvcm1fZGF0YQk9ICZyeDUxX3NpNDcxM19pMmNfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmFkaW9fc2k0NzEzX3BsYXRmb3JtX2RhdGEgcng1MV9zaTQ3MTNfZGF0YSBfX2luaXRkYXRhX29yX21vZHVsZSA9IHsKKwkuaTJjX2J1cwk9IDIsCisJLnN1YmRldl9ib2FyZF9pbmZvID0gJnJ4NTFfc2k0NzEzX2JvYXJkX2luZm8sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByeDUxX3NpNDcxM19kZXYgX19pbml0ZGF0YV9vcl9tb2R1bGUgPSB7CisJLm5hbWUJPSAicmFkaW8tc2k0NzEzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZyeDUxX3NpNDcxM19kYXRhLAorCX0sCit9OworCitzdGF0aWMgX19pbml0IHZvaWQgcng1MV9pbml0X3NpNDcxMyh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBncGlvX3JlcXVlc3Rfb25lKFJYNTFfRk1UWF9JUlEsIEdQSU9GX0RJUl9JTiwgInNpNDcxMyBpcnEiKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHJlcXVlc3Qgc2k0NzEzIGlycSBncGlvLiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuOworCX0KKwlyeDUxX3NpNDcxM19ib2FyZF9pbmZvLmlycSA9IGdwaW9fdG9faXJxKFJYNTFfRk1UWF9JUlEpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmcng1MV9zaTQ3MTNfZGV2KTsKK30KKwogc3RhdGljIGludCByeDUxX3R3bGdwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuKQogewogCS8qIEZJWE1FIHRoaXMgZ3BpbyBzZXR1cCBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yIG5vdyAqLwpAQCAtNjk5LDYgKzc0MiwxNCBAQAogCS5yZXNvdXJjZV9jb25maWcgPSB0d2w0MDMwX3Jjb25maWcsCiB9OwogCitzdHJ1Y3QgdHdsNDAzMF9jb2RlY192aWJyYV9kYXRhIHJ4NTFfdmlicmFfZGF0YSBfX2luaXRkYXRhID0geworCS5jb2V4aXN0CT0gMCwKK307CisKK3N0cnVjdCB0d2w0MDMwX2NvZGVjX2RhdGEgcng1MV9jb2RlY19kYXRhIF9faW5pdGRhdGEgPSB7CisJLmF1ZGlvX21jbGsJPSAyNjAwMDAwMCwKKwkudmlicmEJCT0gJnJ4NTFfdmlicmFfZGF0YSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHJ4NTFfdHdsZGF0YSBfX2luaXRkYXRhID0gewogCS5pcnFfYmFzZQkJPSBUV0w0MDMwX0lSUV9CQVNFLApAQCAtNzEwLDYgKzc2MSw3IEBACiAJLm1hZGMJCQk9ICZyeDUxX21hZGNfZGF0YSwKIAkudXNiCQkJPSAmcng1MV91c2JfZGF0YSwKIAkucG93ZXIJCQk9ICZyeDUxX3Qyc2NyaXB0c19kYXRhLAorCS5jb2RlYwkJCT0gJnJ4NTFfY29kZWNfZGF0YSwKIAogCS52YXV4MQkJCT0gJnJ4NTFfdmF1eDEsCiAJLnZhdXgyCQkJPSAmcng1MV92YXV4MiwKQEAgLTkyMSw2ICs5NzMsNyBAQAogCWJvYXJkX3NtYzkxeF9pbml0KCk7CiAJcng1MV9hZGRfZ3Bpb19rZXlzKCk7CiAJcng1MV9pbml0X3dsMTI1MSgpOworCXJ4NTFfaW5pdF9zaTQ3MTMoKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhyeDUxX3BlcmlwaGVyYWxzX3NwaV9ib2FyZF9pbmZvLAogCQkJCUFSUkFZX1NJWkUocng1MV9wZXJpcGhlcmFsc19zcGlfYm9hcmRfaW5mbykpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtdmlkZW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS12aWRlby5jCmluZGV4IGFjZDY3MDAuLjg5YTY2ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS12aWRlby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS12aWRlby5jCkBAIC02NiwxOCArNjYsNiBAQAogCS5kZWZhdWx0X2RldmljZQk9ICZyeDUxX2xjZF9kZXZpY2UsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ4NTFfZGlzcGxheV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAib21hcGRzcyIsCi0JLmlkCT0gLTEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcng1MV9kc3NfYm9hcmRfaW5mbywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJ4NTFfdmlkZW9fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnJ4NTFfZGlzcGxheV9kZXZpY2UsCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCByeDUxX3ZpZGVvX2luaXQodm9pZCkKIHsKIAlpZiAoIW1hY2hpbmVfaXNfbm9raWFfcng1MSgpKQpAQCAtOTUsOCArODMsNyBAQAogCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFJYNTFfTENEX1JFU0VUX0dQSU8sIDEpOwogCi0JcGxhdGZvcm1fYWRkX2RldmljZXMocng1MV92aWRlb19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUocng1MV92aWRlb19kZXZpY2VzKSk7CisJb21hcF9kaXNwbGF5X2luaXQoJnJ4NTFfZHNzX2JvYXJkX2luZm8pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IGY1M2ZjNTUuLmU5NjQ4OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC05OCwxNyArOTgsMTMgQEAKIAl7IE9NQVBfVEFHX0xDRCwJCSZyeDUxX2xjZF9jb25maWcgfSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCByeDUxX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9pbml0X2Vhcmx5KHZvaWQpCiB7CiAJc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfcGFyYW1zOwogCi0Jb21hcF9ib2FyZF9jb25maWcgPSByeDUxX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShyeDUxX2NvbmZpZyk7Ci0Jb21hcDNfcG1faW5pdF9jcHVpZGxlKHJ4NTFfY3B1aWRsZV9wYXJhbXMpOwogCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CiAJc2RyY19wYXJhbXMgPSBub2tpYV9nZXRfc2RyYW1fdGltaW5ncygpOwogCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoc2RyY19wYXJhbXMsIHNkcmNfcGFyYW1zKTsKLQlvbWFwX2luaXRfaXJxKCk7CiB9CiAKIGV4dGVybiB2b2lkIF9faW5pdCByeDUxX3BlcmlwaGVyYWxzX2luaXQodm9pZCk7CkBAIC0xMjgsNiArMTI0LDkgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCByeDUxX2luaXQodm9pZCkKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOworCW9tYXBfYm9hcmRfY29uZmlnID0gcng1MV9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUocng1MV9jb25maWcpOworCW9tYXAzX3BtX2luaXRfY3B1aWRsZShyeDUxX2NwdWlkbGVfcGFyYW1zKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAlyeDUxX3BlcmlwaGVyYWxzX2luaXQoKTsKQEAgLTE0OSw5ICsxNDgsMTAgQEAKIE1BQ0hJTkVfU1RBUlQoTk9LSUFfUlg1MSwgIk5va2lhIFJYLTUxIGJvYXJkIikKIAkvKiBNYWludGFpbmVyOiBMYXVyaSBMZXVra3VuZW4gPGxhdXJpLmxldWtrdW5lbkBub2tpYS5jb20+ICovCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IHJ4NTFfbWFwX2lvLAogCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAotCS5pbml0X2lycQk9IHJ4NTFfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSByeDUxX21hcF9pbywKKwkuaW5pdF9lYXJseQk9IHJ4NTFfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSByeDUxX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtdGk4MTY4ZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXRpODE2OGV2bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZmE3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXRpODE2OGV2bS5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb2RlIGZvciBUSTgxNjggRVZNLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLiAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9pcnFzLmg+CisjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHRpODE2OF9ldm1fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0aTgxNjhfaW5pdF9lYXJseSh2b2lkKQoreworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRpODE2OF9ldm1faW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2luaXRfaXJxKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0aTgxNjhfZXZtX2luaXQodm9pZCkKK3sKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJb21hcF9ib2FyZF9jb25maWcgPSB0aTgxNjhfZXZtX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRSh0aTgxNjhfZXZtX2NvbmZpZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0aTgxNjhfZXZtX21hcF9pbyh2b2lkKQoreworCW9tYXAyX3NldF9nbG9iYWxzX3RpODE2eCgpOworCW9tYXB0aTgxNnhfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKFRJODE2OEVWTSwgInRpODE2OGV2bSIpCisJLyogTWFpbnRhaW5lcjogVGV4YXMgSW5zdHJ1bWVudHMgKi8KKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gdGk4MTY4X2V2bV9tYXBfaW8sCisJLmluaXRfZWFybHkJPSB0aTgxNjhfaW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSB0aTgxNjhfZXZtX2luaXRfaXJxLAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gdGk4MTY4X2V2bV9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20tZGlzcGxheS5jCmluZGV4IDZiY2Q0MzYuLjM3Yjg0YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLWRpc3BsYXkuYwpAQCAtMTMwLDE0ICsxMzAsNiBAQAogCS5kZWZhdWx0X2RldmljZQkJPSAmem9vbV9sY2RfZGV2aWNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugem9vbV9kc3NfZGV2aWNlID0gewotCS5uYW1lCQkJCT0gIm9tYXBkc3MiLAotCS5pZAkJCQk9IC0xLAotCS5kZXYJCQkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCQk9ICZ6b29tX2Rzc19kYXRhLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgZHNzX2xjZF9tY3NwaV9jb25maWcgPSB7CiAJLnR1cmJvX21vZGUJCT0gMSwKIAkuc2luZ2xlX2NoYW5uZWwJPSAxLCAgLyogMDogc2xhdmUsIDE6IG1hc3RlciAqLwpAQCAtMTUzLDE0ICsxNDUsOSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqem9vbV9kaXNwbGF5X2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZ6b29tX2Rzc19kZXZpY2UsCi19OwotCiB2b2lkIF9faW5pdCB6b29tX2Rpc3BsYXlfaW5pdCh2b2lkKQogewotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHpvb21fZGlzcGxheV9kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUoem9vbV9kaXNwbGF5X2RldmljZXMpKTsKKwlvbWFwX2Rpc3BsYXlfaW5pdCgmem9vbV9kc3NfZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8obmVjXzgwNDhfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShuZWNfODA0OF9zcGlfYm9hcmRfaW5mbykpOwogCXpvb21fbGNkX3BhbmVsX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKaW5kZXggZTBlMDQwZi4uNDQ4YWI2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgem9vbV92bW1jM19zdXBwbHkgPSB7CiAJLnN1cHBseQkJPSAidm1tYyIsCi0JLmRldl9uYW1lCT0gIm1tY2ktb21hcC1ocy4yIiwKKwkuZGV2X25hbWUJPSAib21hcF9oc21tYy4yIiwKIH07CiAKIC8qIFZNTUMxIGZvciBPTUFQIFZERF9NTUMxIChpL28pIGFuZCBNTUMxIGNhcmQgKi8KQEAgLTMyMiw5ICszMjIsNyBAQAogCS5pcnFfbGluZQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YSB6b29tX2F1ZGlvX2RhdGEgPSB7Ci0JLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKLX07CitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YSB6b29tX2F1ZGlvX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhIHpvb21fY29kZWNfZGF0YSA9IHsKIAkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20uYwppbmRleCAxZGQxOTVhLi40YjEzM2Q3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20uYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0zMyw3ICszNCw3IEBACiAKICNkZWZpbmUgWk9PTTNfRUhDSV9SRVNFVF9HUElPCQk2NAogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF96b29tX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF96b29tX2luaXRfZWFybHkodm9pZCkKIHsKIAlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOwogCWlmIChtYWNoaW5lX2lzX29tYXBfem9vbTIoKSkKQEAgLTQyLDE0ICs0MywxMiBAQAogCWVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF96b29tMygpKQogCQlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKGg4bWJ4MDB1MG1lcjBlbV9zZHJjX3BhcmFtcywKIAkJCQkJICBoOG1ieDAwdTBtZXIwZW1fc2RyY19wYXJhbXMpOwotCi0Jb21hcF9pbml0X2lycSgpOwogfQogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJLyogV0xBTiBJUlEgLSBHUElPIDE2MiAqLwotCU9NQVAzX01VWChNQ0JTUDFfQ0xLWCwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVAzX01VWChNQ0JTUDFfQ0xLWCwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCiAJLyogV0xBTiBQT1dFUiBFTkFCTEUgLSBHUElPIDEwMSAqLwogCU9NQVAzX01VWChDQU1fRDIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKIAkvKiBXTEFOIFNESU86IE1NQzMgQ01EICovCkBAIC0xMjYsOCArMTI1LDggQEAKIAkJdXNiaHNfaW5pdCgmdXNiaHNfYmRhdGEpOwogCX0KIAotCWJvYXJkX25hbmRfaW5pdCh6b29tX25hbmRfcGFydGl0aW9ucywKLQkJCUFSUkFZX1NJWkUoem9vbV9uYW5kX3BhcnRpdGlvbnMpLCBaT09NX05BTkRfQ1MpOworCWJvYXJkX25hbmRfaW5pdCh6b29tX25hbmRfcGFydGl0aW9ucywgQVJSQVlfU0laRSh6b29tX25hbmRfcGFydGl0aW9ucyksCisJCQkJCQlaT09NX05BTkRfQ1MsIE5BTkRfQlVTV0lEVEhfMTYpOwogCXpvb21fZGVidWdib2FyZF9pbml0KCk7CiAJem9vbV9wZXJpcGhlcmFsc19pbml0KCk7CiAJem9vbV9kaXNwbGF5X2luaXQoKTsKQEAgLTEzNSwxOCArMTM0LDIwIEBACiAKIE1BQ0hJTkVfU1RBUlQoT01BUF9aT09NMiwgIk9NQVAgWm9vbTIgYm9hcmQiKQogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gb21hcF96b29tX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb21hcF96b29tX2luaXRfZWFybHksCisJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF96b29tX2luaXQsCiAJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAogTUFDSElORV9FTkQKIAogTUFDSElORV9TVEFSVChPTUFQX1pPT00zLCAiT01BUCBab29tMyBib2FyZCIpCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBvbWFwX3pvb21faW5pdF9pcnEsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvbWFwX3pvb21faW5pdF9lYXJseSwKKwkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwX3pvb21faW5pdCwKIAkudGltZXIJCT0gJm9tYXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9hcGxsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2FwbGwuYwppbmRleCBmNTFjZmZkLi5iMTlhMWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2FwbGwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2FwbGwuYwpAQCAtNzgsNiArNzgsMjYgQEAKIAlyZXR1cm4gb21hcDJfY2xrX2FwbGxfZW5hYmxlKGNsaywgT01BUDI0WFhfU1RfNTRNX0FQTExfTUFTSyk7CiB9CiAKK3N0YXRpYyB2b2lkIF9hcGxsOTZfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJb21hcDJ4eHhfY21fc2V0X2FwbGw5Nl9hdXRvX2xvd19wb3dlcl9zdG9wKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9hcGxsOTZfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlvbWFwMnh4eF9jbV9zZXRfYXBsbDk2X2Rpc2FibGVfYXV0b2lkbGUoKTsKK30KKworc3RhdGljIHZvaWQgX2FwbGw1NF9hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlvbWFwMnh4eF9jbV9zZXRfYXBsbDU0X2F1dG9fbG93X3Bvd2VyX3N0b3AoKTsKK30KKworc3RhdGljIHZvaWQgX2FwbGw1NF9kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCW9tYXAyeHh4X2NtX3NldF9hcGxsNTRfZGlzYWJsZV9hdXRvaWRsZSgpOworfQorCiAvKiBTdG9wIEFQTEwgKi8KIHN0YXRpYyB2b2lkIG9tYXAyX2Nsa19hcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewpAQCAtOTMsMTEgKzExMywxNSBAQAogY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfYXBsbDk2ID0gewogCS5lbmFibGUJCT0gb21hcDJfY2xrX2FwbGw5Nl9lbmFibGUsCiAJLmRpc2FibGUJPSBvbWFwMl9jbGtfYXBsbF9kaXNhYmxlLAorCS5hbGxvd19pZGxlCT0gX2FwbGw5Nl9hbGxvd19pZGxlLAorCS5kZW55X2lkbGUJPSBfYXBsbDk2X2RlbnlfaWRsZSwKIH07CiAKIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2FwbGw1NCA9IHsKIAkuZW5hYmxlCQk9IG9tYXAyX2Nsa19hcGxsNTRfZW5hYmxlLAogCS5kaXNhYmxlCT0gb21hcDJfY2xrX2FwbGxfZGlzYWJsZSwKKwkuYWxsb3dfaWRsZQk9IF9hcGxsNTRfYWxsb3dfaWRsZSwKKwkuZGVueV9pZGxlCT0gX2FwbGw1NF9kZW55X2lkbGUsCiB9OwogCiAvKiBQdWJsaWMgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDJhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGwuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogT01BUDItc3BlY2lmaWMgRFBMTCBjb250cm9sIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKworLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KKworLyoqCisgKiBfYWxsb3dfaWRsZSAtIGVuYWJsZSBEUExMIGF1dG9pZGxlIGJpdHMKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTCB0byBvcGVyYXRlIG9uCisgKgorICogRW5hYmxlIERQTEwgYXV0b21hdGljIGlkbGUgY29udHJvbC4gIFRoZSBEUExMIHdpbGwgZW50ZXIgbG93LXBvd2VyCisgKiBzdG9wIHdoZW4gaXRzIGRvd25zdHJlYW0gY2xvY2tzIGFyZSBnYXRlZC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqIFJFVklTSVQ6IERQTEwgY2FuIG9wdGlvbmFsbHkgZW50ZXIgbG93LXBvd2VyIGJ5cGFzcyBieSB3cml0aW5nIDB4MQorICogaW5zdGVhZC4gIEFkZCBzb21lIG1lY2hhbmlzbSB0byBvcHRpb25hbGx5IGVudGVyIHRoaXMgbW9kZS4KKyAqLworc3RhdGljIHZvaWQgX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKKwkJcmV0dXJuOworCisJb21hcDJ4eHhfY21fc2V0X2RwbGxfYXV0b19sb3dfcG93ZXJfc3RvcCgpOworfQorCisvKioKKyAqIF9kZW55X2lkbGUgLSBwcmV2ZW50IERQTEwgZnJvbSBhdXRvbWF0aWNhbGx5IGlkbGluZworICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIG9wZXJhdGUgb24KKyAqCisgKiBEaXNhYmxlIERQTEwgYXV0b21hdGljIGlkbGUgY29udHJvbC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQorCQlyZXR1cm47CisKKwlvbWFwMnh4eF9jbV9zZXRfZHBsbF9kaXNhYmxlX2F1dG9pZGxlKCk7Cit9CisKKworLyogUHVibGljIGRhdGEgKi8KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJ4eHhfZHBsbF9vcHMgPSB7CisJLmFsbG93X2lkbGUJPSBfYWxsb3dfaWRsZSwKKwkuZGVueV9pZGxlCT0gX2RlbnlfaWRsZSwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfb3NjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X29zYy5jCmluZGV4IGRmN2I4MDUuLmMzNDYwOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfb3NjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9vc2MuYwpAQCAtMzAsNiArMzAsMTMgQEAKICNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCiAKKy8qCisgKiBYWFggVGhpcyBkb2VzIG5vdCBhY3R1YWxseSBlbmFibGUgdGhlIG9zY19jaywgc2luY2UgdGhlIG9zY19jayBtdXN0CisgKiBiZSBydW5uaW5nIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4gIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24KKyAqIGlzIHVzZWQgdG8gZGlzYWJsZSBhbiBhdXRvaWRsZSBtb2RlIG9uIHRoZSBvc2NfY2suICBUaGUgZXhpc3RpbmcKKyAqIGNsa19lbmFibGUvY2xrX2Rpc2FibGUoKS1iYXNlZCB1c2Vjb3VudGluZyBmb3Igb3NjX2NrIHNob3VsZCBiZQorICogcmVwbGFjZWQgd2l0aCBhdXRvaWRsZS1iYXNlZCB1c2Vjb3VudGluZy4KKyAqLwogc3RhdGljIGludCBvbWFwMl9lbmFibGVfb3NjX2NrKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcGNjOwpAQCAtNDEsNiArNDgsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFhYWCBUaGlzIGRvZXMgbm90IGFjdHVhbGx5IGRpc2FibGUgdGhlIG9zY19jaywgc2luY2UgZG9pbmcgc28gd291bGQKKyAqIGltbWVkaWF0ZWx5IGhhbHQgdGhlIHN5c3RlbS4gIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0bworICogZW5hYmxlIGFuIGF1dG9pZGxlIG1vZGUgb24gdGhlIG9zY19jay4gIFRoZSBleGlzdGluZworICogY2xrX2VuYWJsZS9jbGtfZGlzYWJsZSgpLWJhc2VkIHVzZWNvdW50aW5nIGZvciBvc2NfY2sgc2hvdWxkIGJlCisgKiByZXBsYWNlZCB3aXRoIGF1dG9pZGxlLWJhc2VkIHVzZWNvdW50aW5nLgorICovCiBzdGF0aWMgdm9pZCBvbWFwMl9kaXNhYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIHBjYzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9jbGtzZWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9jbGtzZWwuYwppbmRleCBhNzgxY2Q2Li5lMjUzNjRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfY2xrc2VsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2Nsa3NlbC5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJCQkJdTMyICpmaWVsZF92YWwpCiB7CiAJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKLQljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3IsICptYXhfY2xrcjsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3IsICptYXhfY2xrciA9IE5VTEw7CiAJdTggbWF4X2RpdiA9IDA7CiAKIAljbGtzID0gX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgc3JjX2Nsayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYwppbmRleCBhY2I3YWU1Li5iY2ZmZWUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9kcGxsLmMKQEAgLTE3OCwxMiArMTc4LDExIEBACiAJaWYgKCFkZCkKIAkJcmV0dXJuOwogCi0JLyogUmV0dXJuIGJ5cGFzcyByYXRlIGlmIERQTEwgaXMgYnlwYXNzZWQgKi8KIAl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKIAl2ICY9IGRkLT5lbmFibGVfbWFzazsKIAl2ID4+PSBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOwogCi0JLyogUmVwYXJlbnQgaW4gY2FzZSB0aGUgZHBsbCBpcyBpbiBieXBhc3MgKi8KKwkvKiBSZXBhcmVudCB0aGUgc3RydWN0IGNsayBpbiBjYXNlIHRoZSBkcGxsIGlzIGluIGJ5cGFzcyAqLwogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQlpZiAodiA9PSBPTUFQMlhYWF9FTl9EUExMX0xQQllQQVNTIHx8CiAJCSAgICB2ID09IE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MpCkBAIC0yNjAsNTAgKzI1OSwyMiBAQAogLyogRFBMTCByYXRlIHJvdW5kaW5nIGNvZGUgKi8KIAogLyoqCi0gKiBvbWFwMl9kcGxsX3NldF9yYXRlX3RvbGVyYW5jZTogc2V0IHRoZSBlcnJvciB0b2xlcmFuY2UgZHVyaW5nIHJhdGUgcm91bmRpbmcKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTAotICogQHRvbGVyYW5jZTogbWF4aW11bSByYXRlIGVycm9yIHRvbGVyYW5jZQotICoKLSAqIFNldCB0aGUgbWF4aW11bSBEUExMIHJhdGUgZXJyb3IgdG9sZXJhbmNlIGZvciB0aGUgcmF0ZSByb3VuZGluZwotICogYWxnb3JpdGhtLiAgVGhlIHJhdGUgdG9sZXJhbmNlIGlzIGFuIGF0dGVtcHQgdG8gYmFsYW5jZSBEUExMIHBvd2VyCi0gKiBzYXZpbmcgKHRoZSBsZWFzdCBkaXZpZGVyIHZhbHVlICJuIikgdnMuIHJhdGUgZmlkZWxpdHkgKHRoZSBsZWFzdAotICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkZXNpcmVkIERQTEwgdGFyZ2V0IHJhdGUgYW5kIHRoZSByb3VuZGVkCi0gKiByYXRlIG91dCBvZiB0aGUgYWxnb3JpdGhtKS4gIFNvLCBpbmNyZWFzaW5nIHRoZSB0b2xlcmFuY2UgaXMgbGlrZWx5Ci0gKiB0byBkZWNyZWFzZSBEUExMIHBvd2VyIGNvbnN1bXB0aW9uIGFuZCBpbmNyZWFzZSBEUExMIHJhdGUgZXJyb3IuCi0gKiBSZXR1cm5zIC1FSU5WQUwgaWYgcHJvdmlkZWQgYSBudWxsIGNsb2NrIHB0ciBvciBhIGNsayB0aGF0IGlzIG5vdCBhCi0gKiBEUExMOyBvciAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IG9tYXAyX2RwbGxfc2V0X3JhdGVfdG9sZXJhbmNlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgaW50IHRvbGVyYW5jZSkKLXsKLQlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrLT5kcGxsX2RhdGEtPnJhdGVfdG9sZXJhbmNlID0gdG9sZXJhbmNlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogb21hcDJfZHBsbF9yb3VuZF9yYXRlIC0gcm91bmQgYSB0YXJnZXQgcmF0ZSBmb3IgYW4gT01BUCBEUExMCiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogZm9yIGEgRFBMTAogICogQHRhcmdldF9yYXRlOiBkZXNpcmVkIERQTEwgY2xvY2sgcmF0ZQogICoKLSAqIEdpdmVuIGEgRFBMTCwgYSBkZXNpcmVkIHRhcmdldCByYXRlLCBhbmQgYSByYXRlIHRvbGVyYW5jZSwgcm91bmQKLSAqIHRoZSB0YXJnZXQgcmF0ZSB0byBhIHBvc3NpYmxlLCBwcm9ncmFtbWFibGUgcmF0ZSBmb3IgdGhpcyBEUExMLgotICogUmF0ZSB0b2xlcmFuY2UgaXMgYXNzdW1lZCB0byBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgdGhpcwotICogZnVuY3Rpb24gaXMgY2FsbGVkLiAgQXR0ZW1wdHMgdG8gc2VsZWN0IHRoZSBtaW5pbXVtIHBvc3NpYmxlIG4KLSAqIHdpdGhpbiB0aGUgdG9sZXJhbmNlIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4gIFN0b3JlcyB0aGUKLSAqIGNvbXB1dGVkIChtLCBuKSBpbiB0aGUgRFBMTCdzIGRwbGxfZGF0YSBzdHJ1Y3R1cmUgc28gc2V0X3JhdGUoKQotICogd2lsbCBub3QgbmVlZCB0byBjYWxsIHRoaXMgKGV4cGVuc2l2ZSkgZnVuY3Rpb24gYWdhaW4uICBSZXR1cm5zIH4wCi0gKiBpZiB0aGUgdGFyZ2V0IHJhdGUgY2Fubm90IGJlIHJvdW5kZWQsIGVpdGhlciBiZWNhdXNlIHRoZSByYXRlIGlzCi0gKiB0b28gbG93IG9yIGJlY2F1c2UgdGhlIHJhdGUgdG9sZXJhbmNlIGlzIHNldCB0b28gdGlnaHRseTsgb3IgdGhlCi0gKiByb3VuZGVkIHJhdGUgdXBvbiBzdWNjZXNzLgorICogR2l2ZW4gYSBEUExMIGFuZCBhIGRlc2lyZWQgdGFyZ2V0IHJhdGUsIHJvdW5kIHRoZSB0YXJnZXQgcmF0ZSB0byBhCisgKiBwb3NzaWJsZSwgcHJvZ3JhbW1hYmxlIHJhdGUgZm9yIHRoaXMgRFBMTC4gIEF0dGVtcHRzIHRvIHNlbGVjdCB0aGUKKyAqIG1pbmltdW0gcG9zc2libGUgbi4gIFN0b3JlcyB0aGUgY29tcHV0ZWQgKG0sIG4pIGluIHRoZSBEUExMJ3MKKyAqIGRwbGxfZGF0YSBzdHJ1Y3R1cmUgc28gc2V0X3JhdGUoKSB3aWxsIG5vdCBuZWVkIHRvIGNhbGwgdGhpcworICogKGV4cGVuc2l2ZSkgZnVuY3Rpb24gYWdhaW4uICBSZXR1cm5zIH4wIGlmIHRoZSB0YXJnZXQgcmF0ZSBjYW5ub3QKKyAqIGJlIHJvdW5kZWQsIG9yIHRoZSByb3VuZGVkIHJhdGUgdXBvbiBzdWNjZXNzLgogICovCiBsb25nIG9tYXAyX2RwbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCiB7Ci0JaW50IG0sIG4sIHIsIGUsIHNjYWxlZF9tYXhfbTsKLQl1bnNpZ25lZCBsb25nIHNjYWxlZF9ydF9ycCwgbmV3X3JhdGU7Ci0JaW50IG1pbl9lID0gLTEsIG1pbl9lX20gPSAtMSwgbWluX2VfbiA9IC0xOworCWludCBtLCBuLCByLCBzY2FsZWRfbWF4X207CisJdW5zaWduZWQgbG9uZyBzY2FsZWRfcnRfcnA7CisJdW5zaWduZWQgbG9uZyBuZXdfcmF0ZSA9IDA7CiAJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CiAKIAlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCkBAIC0zMTEsOCArMjgyLDggQEAKIAogCWRkID0gY2xrLT5kcGxsX2RhdGE7CiAKLQlwcl9kZWJ1ZygiY2xvY2s6IHN0YXJ0aW5nIERQTEwgcm91bmRfcmF0ZSBmb3IgY2xvY2sgJXMsIHRhcmdldCByYXRlICIKLQkJICIlbGRcbiIsIGNsay0+bmFtZSwgdGFyZ2V0X3JhdGUpOworCXByX2RlYnVnKCJjbG9jazogJXM6IHN0YXJ0aW5nIERQTEwgcm91bmRfcmF0ZSwgdGFyZ2V0IHJhdGUgJWxkXG4iLAorCQkgY2xrLT5uYW1lLCB0YXJnZXRfcmF0ZSk7CiAKIAlzY2FsZWRfcnRfcnAgPSB0YXJnZXRfcmF0ZSAvIChkZC0+Y2xrX3JlZi0+cmF0ZSAvIERQTExfU0NBTEVfRkFDVE9SKTsKIAlzY2FsZWRfbWF4X20gPSBkZC0+bWF4X211bHRpcGxpZXIgKiBEUExMX1NDQUxFX0ZBQ1RPUjsKQEAgLTM0NywzOSArMzE4LDIzIEBACiAJCWlmIChyID09IERQTExfTVVMVF9VTkRFUkZMT1cpCiAJCQljb250aW51ZTsKIAotCQllID0gdGFyZ2V0X3JhdGUgLSBuZXdfcmF0ZTsKLQkJcHJfZGVidWcoImNsb2NrOiBuID0gJWQ6IG0gPSAlZDogcmF0ZSBlcnJvciBpcyAlZCAiCi0JCQkgIihuZXdfcmF0ZSA9ICVsZClcbiIsIG4sIG0sIGUsIG5ld19yYXRlKTsKKwkJcHJfZGVidWcoImNsb2NrOiAlczogbSA9ICVkOiBuID0gJWQ6IG5ld19yYXRlID0gJWxkXG4iLAorCQkJIGNsay0+bmFtZSwgbSwgbiwgbmV3X3JhdGUpOwogCi0JCWlmIChtaW5fZSA9PSAtMSB8fAotCQkgICAgbWluX2UgPj0gKGludCkoYWJzKGUpIC0gZGQtPnJhdGVfdG9sZXJhbmNlKSkgewotCQkJbWluX2UgPSBlOwotCQkJbWluX2VfbSA9IG07Ci0JCQltaW5fZV9uID0gbjsKLQotCQkJcHJfZGVidWcoImNsb2NrOiBmb3VuZCBuZXcgbGVhc3QgZXJyb3IgJWRcbiIsIG1pbl9lKTsKLQotCQkJLyogV2UgZm91bmQgZ29vZCBzZXR0aW5ncyAtLSBiYWlsIG91dCBub3cgKi8KLQkJCWlmIChtaW5fZSA8PSBkZC0+cmF0ZV90b2xlcmFuY2UpCi0JCQkJYnJlYWs7CisJCWlmICh0YXJnZXRfcmF0ZSA9PSBuZXdfcmF0ZSkgeworCQkJZGQtPmxhc3Rfcm91bmRlZF9tID0gbTsKKwkJCWRkLT5sYXN0X3JvdW5kZWRfbiA9IG47CisJCQlkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPSB0YXJnZXRfcmF0ZTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCi0JaWYgKG1pbl9lIDwgMCkgewotCQlwcl9kZWJ1ZygiY2xvY2s6IGVycm9yOiB0YXJnZXQgcmF0ZSBvciB0b2xlcmFuY2UgdG9vIGxvd1xuIik7CisJaWYgKHRhcmdldF9yYXRlICE9IG5ld19yYXRlKSB7CisJCXByX2RlYnVnKCJjbG9jazogJXM6IGNhbm5vdCByb3VuZCB0byByYXRlICVsZFxuIiwgY2xrLT5uYW1lLAorCQkJIHRhcmdldF9yYXRlKTsKIAkJcmV0dXJuIH4wOwogCX0KIAotCWRkLT5sYXN0X3JvdW5kZWRfbSA9IG1pbl9lX207Ci0JZGQtPmxhc3Rfcm91bmRlZF9uID0gbWluX2VfbjsKLQlkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPSBfZHBsbF9jb21wdXRlX25ld19yYXRlKGRkLT5jbGtfcmVmLT5yYXRlLAotCQkJCQkJICAgICAgIG1pbl9lX20sICBtaW5fZV9uKTsKLQotCXByX2RlYnVnKCJjbG9jazogZmluYWwgbGVhc3QgZXJyb3I6IGUgPSAlZCwgbSA9ICVkLCBuID0gJWRcbiIsCi0JCSBtaW5fZSwgbWluX2VfbSwgbWluX2Vfbik7Ci0JcHJfZGVidWcoImNsb2NrOiBmaW5hbCByYXRlOiAlbGQgICh0YXJnZXQgcmF0ZTogJWxkKVxuIiwKLQkJIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSwgdGFyZ2V0X3JhdGUpOwotCi0JcmV0dXJuIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZTsKKwlyZXR1cm4gdGFyZ2V0X3JhdGU7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9pY2xrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfaWNsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDNmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfaWNsay5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBPTUFQMi8zIGludGVyZmFjZSBjbG9jayBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvcHJjbS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazJ4eHguaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLworCisvKiBYWFggKi8KK3ZvaWQgb21hcDJfY2xrdF9pY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB2LCByOworCisJciA9ICgoX19mb3JjZSB1MzIpY2xrLT5lbmFibGVfcmVnIF4gKENNX0FVVE9JRExFIF4gQ01fSUNMS0VOKSk7CisKKwl2ID0gX19yYXdfcmVhZGwoKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcik7CisJdiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbCh2LCAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilyKTsKK30KKworLyogWFhYICovCit2b2lkIG9tYXAyX2Nsa3RfaWNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB2LCByOworCisJciA9ICgoX19mb3JjZSB1MzIpY2xrLT5lbmFibGVfcmVnIF4gKENNX0FVVE9JRExFIF4gQ01fSUNMS0VOKSk7CisKKwl2ID0gX19yYXdfcmVhZGwoKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcik7CisJdiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwlfX3Jhd193cml0ZWwodiwgKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcik7Cit9CisKKy8qIFB1YmxpYyBkYXRhICovCisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuZmluZF9jb21wYW5pb24JPSBvbWFwMl9jbGtfZGZsdF9maW5kX2NvbXBhbmlvbiwKKwkuZmluZF9pZGxlc3QJPSBvbWFwMl9jbGtfZGZsdF9maW5kX2lkbGVzdCwKKwkuYWxsb3dfaWRsZQk9IG9tYXAyX2Nsa3RfaWNsa19hbGxvd19pZGxlLAorCS5kZW55X2lkbGUJPSBvbWFwMl9jbGt0X2ljbGtfZGVueV9pZGxlLAorfTsKKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfaWNsa19kZmx0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuYWxsb3dfaWRsZQk9IG9tYXAyX2Nsa3RfaWNsa19hbGxvd19pZGxlLAorCS5kZW55X2lkbGUJPSBvbWFwMl9jbGt0X2ljbGtfZGVueV9pZGxlLAorfTsKKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfaWNsa19pZGxlX29ubHkgPSB7CisJLmFsbG93X2lkbGUJPSBvbWFwMl9jbGt0X2ljbGtfYWxsb3dfaWRsZSwKKwkuZGVueV9pZGxlCT0gb21hcDJfY2xrdF9pY2xrX2RlbnlfaWRsZSwKK307CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX21kbWNsa19kZmx0X3dhaXQgPSB7CisJLmVuYWJsZQkJPSBvbWFwMl9kZmx0X2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlLAorCS5maW5kX2NvbXBhbmlvbgk9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAorCS5maW5kX2lkbGVzdAk9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfaWRsZXN0LAorCS5hbGxvd19pZGxlCT0gb21hcDJfY2xrdF9pY2xrX2FsbG93X2lkbGUsCisJLmRlbnlfaWRsZQk9IG9tYXAyX2Nsa3RfaWNsa19kZW55X2lkbGUsCit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggMmEyZjE1Mi4uMTgwMjk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMjIsNyArMjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Bvd2VyLmg+CiAKKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KQEAgLTI2MSwxMCArMjYzLDEzIEBACiAKIAlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBkaXNhYmxpbmcgaW4gaGFyZHdhcmVcbiIsIGNsay0+bmFtZSk7CiAKLQljbGstPm9wcy0+ZGlzYWJsZShjbGspOworCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZGlzYWJsZSkgeworCQl0cmFjZV9jbG9ja19kaXNhYmxlKGNsay0+bmFtZSwgMCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKKwl9CiAKIAlpZiAoY2xrLT5jbGtkbSkKLQkJb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKKwkJY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKIAogCWlmIChjbGstPnBhcmVudCkKIAkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwpAQCAtMzA0LDcgKzMwOSw3IEBACiAJfQogCiAJaWYgKGNsay0+Y2xrZG0pIHsKLQkJcmV0ID0gb21hcDJfY2xrZG1fY2xrX2VuYWJsZShjbGstPmNsa2RtLCBjbGspOworCQlyZXQgPSBjbGtkbV9jbGtfZW5hYmxlKGNsay0+Y2xrZG0sIGNsayk7CiAJCWlmIChyZXQpIHsKIAkJCVdBUk4oMSwgImNsb2NrOiAlczogY291bGQgbm90IGVuYWJsZSBjbG9ja2RvbWFpbiAlczogIgogCQkJICAgICAiJWRcbiIsIGNsay0+bmFtZSwgY2xrLT5jbGtkbS0+bmFtZSwgcmV0KTsKQEAgLTMxMiwxNyArMzE3LDIxIEBACiAJCX0KIAl9CiAKLQlyZXQgPSBjbGstPm9wcy0+ZW5hYmxlKGNsayk7Ci0JaWYgKHJldCkgewotCQlXQVJOKDEsICJjbG9jazogJXM6IGNvdWxkIG5vdCBlbmFibGU6ICVkXG4iLCBjbGstPm5hbWUsIHJldCk7Ci0JCWdvdG8gb2NlX2VycjM7CisJaWYgKGNsay0+b3BzICYmIGNsay0+b3BzLT5lbmFibGUpIHsKKwkJdHJhY2VfY2xvY2tfZW5hYmxlKGNsay0+bmFtZSwgMSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJcmV0ID0gY2xrLT5vcHMtPmVuYWJsZShjbGspOworCQlpZiAocmV0KSB7CisJCQlXQVJOKDEsICJjbG9jazogJXM6IGNvdWxkIG5vdCBlbmFibGU6ICVkXG4iLAorCQkJICAgICBjbGstPm5hbWUsIHJldCk7CisJCQlnb3RvIG9jZV9lcnIzOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiAKIG9jZV9lcnIzOgogCWlmIChjbGstPmNsa2RtKQotCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOworCQljbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOwogb2NlX2VycjI6CiAJaWYgKGNsay0+cGFyZW50KQogCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CkBAIC0zNDksOCArMzU4LDEwIEBACiAJcHJfZGVidWcoImNsb2NrOiBzZXRfcmF0ZSBmb3IgY2xvY2sgJXMgdG8gcmF0ZSAlbGRcbiIsIGNsay0+bmFtZSwgcmF0ZSk7CiAKIAkvKiBkcGxsX2NrLCBjb3JlX2NrLCB2aXJ0X3ByY21fc2V0OyBwbHVzIGFsbCBjbGtzZWwgY2xvY2tzICovCi0JaWYgKGNsay0+c2V0X3JhdGUpCisJaWYgKGNsay0+c2V0X3JhdGUpIHsKKwkJdHJhY2VfY2xvY2tfc2V0X3JhdGUoY2xrLT5uYW1lLCByYXRlLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3MywxMSArMzg0LDE3IEBACiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwM19ub25jb3JlX2RwbGxfb3BzID0gewogCS5lbmFibGUJCT0gb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSwKIAkuZGlzYWJsZQk9IG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAorCS5hbGxvd19pZGxlCT0gb21hcDNfZHBsbF9hbGxvd19pZGxlLAorCS5kZW55X2lkbGUJPSBvbWFwM19kcGxsX2RlbnlfaWRsZSwKK307CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzX2NvcmVfZHBsbF9vcHMgPSB7CisJLmFsbG93X2lkbGUJPSBvbWFwM19kcGxsX2FsbG93X2lkbGUsCisJLmRlbnlfaWRsZQk9IG9tYXAzX2RwbGxfZGVueV9pZGxlLAogfTsKIAogI2VuZGlmCiAKLQogLyoKICAqIE9NQVAyKyBjbG9jayByZXNldCBhbmQgaW5pdCBmdW5jdGlvbnMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCmluZGV4IDg5NjU4NGUuLmUxMGZmMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKQEAgLTIsNyArMiw3IEBACiAgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqICBDb250YWN0czoKICAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CkBAIC0xOCw5ICsxOCw2IEBACiAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAKLS8qIFRoZSBtYXhpbXVtIGVycm9yIGJldHdlZW4gYSB0YXJnZXQgRFBMTCByYXRlIGFuZCB0aGUgcm91bmRlZCByYXRlIGluIEh6ICovCi0jZGVmaW5lIERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQk1MDAwMAotCiAvKiBDTV9DTEtTRUwyX1BMTC5DT1JFX0NMS19TUkMgYml0cyAoMlhYWCkgKi8KICNkZWZpbmUgQ09SRV9DTEtfU1JDXzMySwkJMHgwCiAjZGVmaW5lIENPUkVfQ0xLX1NSQ19EUExMCQkweDEKQEAgLTU1LDcgKzUyLDYgQEAKIGxvbmcgb21hcDJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogaW50IG9tYXAyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiBpbnQgb21hcDJfY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpuZXdfcGFyZW50KTsKLWludCBvbWFwMl9kcGxsX3NldF9yYXRlX3RvbGVyYW5jZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGludCB0b2xlcmFuY2UpOwogbG9uZyBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlKTsKIHVuc2lnbmVkIGxvbmcgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKIHVuc2lnbmVkIGxvbmcgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CkBAIC02NSw2ICs2MSw5IEBACiBpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIGludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgb21hcDRfZHBsbG14X2dhdGVjdHJsX3JlYWQoc3RydWN0IGNsayAqY2xrKTsKK3ZvaWQgb21hcDRfZHBsbG14X2FsbG93X2dhdGVjdHJsKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIG9tYXA0X2RwbGxteF9kZW55X2dhdGVjdHJsKHN0cnVjdCBjbGsgKmNsayk7CiAKICNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKIHZvaWQgb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkKHN0cnVjdCBjbGsgKmNsayk7CkBAIC04Myw2ICs4MiwxMCBAQAogaW50IG9tYXAyX2Nsa3NlbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiBpbnQgb21hcDJfY2xrc2VsX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpuZXdfcGFyZW50KTsKIAorLyogY2xrdF9pY2xrLmMgcHVibGljIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgb21hcDJfY2xrdF9pY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiB2b2lkIG9tYXAyX2Nsa3RfaWNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKKwogdTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfaW5pdF9kcGxsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwogCkBAIC0xMzYsNiArMTM5LDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZ3B0XzMya19yYXRlc1tdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBncHRfc3lzX3JhdGVzW107CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdmeF9sM19yYXRlc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfaWNrX3JhdGVzW107CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkKIGV4dGVybiB2b2lkIG9tYXAyX2Nsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpOwpAQCAtMTQ1LDYgKzE0OSwxMyBAQAogI2RlZmluZSBvbWFwMl9jbGtfZXhpdF9jcHVmcmVxX3RhYmxlCTAKICNlbmRpZgogCitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfaWNsa19kZmx0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX2ljbGtfaWRsZV9vbmx5OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX21kbWNsa19kZmx0X3dhaXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJ4eHhfZHBsbF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDNfbm9uY29yZV9kcGxsX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwM19jb3JlX2RwbGxfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXA0X2RwbGxteF9vcHM7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jCmluZGV4IDBhOTkyYmMuLmI2ZjY1ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDIwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQyMF9kYXRhLmMKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jCisgKiBPTUFQMjQyMCBjbG9jayBkYXRhCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqICBDb250YWN0czoKLSAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKiAgUGF1bCBXYWxtc2xleQorICogQ29udGFjdHM6CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBQYXVsIFdhbG1zbGV5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0zNCwxOCArMzQsMTUgQEAKIC8qCiAgKiAyNDIwIGNsb2NrIHRyZWUuCiAgKgotICogTk9URTpJbiBtYW55IGNhc2VzIGhlcmUgd2UgYXJlIGFzc2lnbmluZyBhICdkZWZhdWx0JyBwYXJlbnQuCUluIG1hbnkKLSAqCWNhc2VzIHRoZSBwYXJlbnQgaXMgc2VsZWN0YWJsZS4JVGhlIGdldC9zZXQgcGFyZW50IGNhbGxzIHdpbGwgYWxzbwotICoJc3dpdGNoIHNvdXJjZXMuCi0gKgotICoJTWFueSBzb21lIGNsb2NrcyBzYXkgYWx3YXlzX2VuYWJsZWQsIGJ1dCB0aGV5IGNhbiBiZSBhdXRvIGlkbGVkIGZvcgotICoJcG93ZXIgc2F2aW5ncy4gVGhleSB3aWxsIGFsd2F5cyBiZSBhdmFpbGFibGUgdXBvbiBjbG9jayByZXF1ZXN0LgorICogTk9URTpJbiBtYW55IGNhc2VzIGhlcmUgd2UgYXJlIGFzc2lnbmluZyBhICdkZWZhdWx0JyBwYXJlbnQuIEluCisgKgltYW55IGNhc2VzIHRoZSBwYXJlbnQgaXMgc2VsZWN0YWJsZS4gVGhlIHNldCBwYXJlbnQgY2FsbHMgd2lsbAorICoJYWxzbyBzd2l0Y2ggc291cmNlcy4KICAqCiAgKglTZXZlcmFsIHNvdXJjZXMgYXJlIGdpdmVuIGluaXRpYWwgcmF0ZXMgd2hpY2ggbWF5IGJlIHdyb25nLCB0aGlzIHdpbGwKICAqCWJlIGZpeGVkIHVwIGluIHRoZSBpbml0IGZ1bmMuCiAgKgogICoJVGhpbmdzIGFyZSBicm9hZGx5IHNlcGFyYXRlZCBiZWxvdyBieSBjbG9jayBkb21haW5zLiBJdCBpcwotICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaWZlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jaworICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaXBoZXJhbHMgaGF2ZSBkZXBlbmRlbmNpZXMgb24gbXVsdGlwbGUgY2xvY2sKICAqCWRvbWFpbnMuIE1hbnkgZ2V0IHRoZWlyIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgZG9tYWluLCBidXQgZ2V0CiAgKglmdW5jdGlvbmFsIGNsb2NrcyBmcm9tIGZpeGVkIHNvdXJjZXMgb3Igb3RoZXIgY29yZSBkb21haW4gZGVyaXZlZAogICoJY2xvY2tzLgpAQCAtNTUsNyArNTIsNyBAQAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7CiAJLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzMjAwMCwKKwkucmF0ZQkJPSAzMjc2OCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIH07CiAKQEAgLTExNiw3ICsxMTMsNiBAQAogCS5tYXhfbXVsdGlwbGllcgkJPSAxMDIzLAogCS5taW5fZGl2aWRlcgkJPSAxLAogCS5tYXhfZGl2aWRlcgkJPSAxNiwKLQkucmF0ZV90b2xlcmFuY2UJCT0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiAvKgpAQCAtMTI1LDcgKzEyMSw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGxfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMnh4eF9kcGxsX29wcywKIAkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBDYW4gYmUgZnVuY18zMmsgYWxzbyAqLwogCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKQEAgLTQ1NSwzNiArNDUxLDIyIEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLS8qIERTUCBpbnRlcmZhY2UgY2xvY2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNwX2lyYXRlX2lja19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNwX2lyYXRlX2lja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHNwX2ZjaywgLnJhdGVzID0gZHNwX2lyYXRlX2lja19yYXRlcyB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNwX2lja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHNwX2ZjaywgLnJhdGVzID0gZHNwX2lja19yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAotLyogVGhpcyBjbG9jayBkb2VzIG5vdCBleGlzdCBhcyBzdWNoIGluIHRoZSBUUk0uICovCi1zdGF0aWMgc3RydWN0IGNsayBkc3BfaXJhdGVfaWNrID0gewotCS5uYW1lCQk9ICJkc3BfaXJhdGVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkc3BfZmNrLAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUF9JRl9NQVNLLAotCS5jbGtzZWwJCT0gZHNwX2lyYXRlX2lja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIDI0MjAgb25seSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ljayA9IHsKIAkubmFtZQkJPSAiZHNwX2ljayIsCSAvKiBhcHBhcmVudGx5IGlwaSBhbmQgaXNwICovCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkc3BfZmNrLAorCS5jbGtkbV9uYW1lCT0gImRzcF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0RTUF9JUElfU0hJRlQsCSAgICAgIC8qIGZvciBpcGkgKi8KKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfSUZfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKgpAQCAtNTc5LDcgKzU2MSw3IEBACiAvKiBJdCBpcyB1bmNsZWFyIGZyb20gVFJNIHdoZXRoZXIgdXNiX2w0X2ljayBpcyByZWFsbHkgaW4gTDMgb3IgTDQgY2xrZG0gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CS8qIEZTLVVTQiBpbnRlcmZhY2UgY2xvY2sgKi8KIAkubmFtZQkJPSAidXNiX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCkBAIC02NjEsNyArNjQzLDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKIAkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLApAQCAtNzE2LDYgKzY5OCw3IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKKy8qIFRoaXMgaW50ZXJmYWNlIGNsb2NrIGRvZXMgbm90IGhhdmUgYSBDTV9BVVRPSURMRSBiaXQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9pY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLwogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCkBAIC03NjMsNyArNzQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzX2ljayA9IHsJCS8qIEVuYWJsZXMgYm90aCBMMyxMNCBJQ0xLJ3MgKi8KIAkubmFtZQkJPSAiZHNzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdCwKIAkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC04MjUsNiArODA4LDE0IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIHd1X2w0X2ljayA9IHsKKwkubmFtZQkJPSAid3VfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKIC8qCiAgKiBDT1JFIHBvd2VyIGRvbWFpbiBJQ0xLICYgRkNMSyBkZWZpbmVzLgogICogTWFueSBvZiB0aGUgdGhlc2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBwYXJlbnQuIEVudHJpZXMKQEAgLTg0NSw5ICs4MzYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnd1X2w0X2ljaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTg3MSw3ICs4NjIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTg5NSw3ICs4ODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQzX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0M19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTkxOSw3ICs5MTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0NF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTk0Myw3ICs5MzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0NV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTk2Nyw3ICs5NTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0Nl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTk5MSw4ICs5ODIsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0N19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTEwMTQsNyArMTAwNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0gewogCS5uYW1lCQk9ICJncHQ4X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTAzOCw3ICsxMDMwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDlfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMDYyLDcgKzEwNTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEwX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTA4Niw3ICsxMDc4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTExMTAsNyArMTEwMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMTM0LDcgKzExMjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMTc0LDcgKzExNjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMTk4LDcgKzExOTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMjE4LDcgKzEyMTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMjM4LDcgKzEyMzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTI1OCw3ICsxMjUwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTEyNzgsNyArMTI3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ljayA9IHsKIAkubmFtZQkJPSAidWFydDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCkBAIC0xMjk4LDkgKzEyOTAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW9zX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd3VfbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTEzMTgsOSArMTMxMCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfaWNrID0gewogCS5uYW1lCQk9ICJtcHVfd2R0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd3VfbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTMzOCwxMCArMTMzMCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7CiAJLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd3VfbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzMyS1NZTkNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTEzNDksOSArMTM0MSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd3VfbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTM1OSwxMCArMTM1MSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd3VfbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX09NQVBDVFJMX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xMzcwLDcgKzEzNjIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0gewogCS5uYW1lCQk9ICJjYW1faWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTEzOTUsNyArMTM4Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CiAJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTE0MDUsNyArMTM5Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTQyNSw3ICsxNDE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xNDQ1LDcgKzE0MzcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7CiAJLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTQ2NSw3ICsxNDU3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ljayA9IHsKIAkubmFtZQkJPSAibW1jX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTQ4NSw3ICsxNDc3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ljayA9IHsKIAkubmFtZQkJPSAiZmFjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTUwNSw3ICsxNDk3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ljayA9IHsKIAkubmFtZQkJPSAiZWFjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTUyNSw3ICsxNTE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKIAkubmFtZQkJPSAiaGRxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTU0NSw3ICsxNTM3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9pY2sgPSB7CiAJLm5hbWUJCT0gImkyYzJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xNTY1LDcgKzE1NTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTE1ODMsMTIgKzE1NzUsMTggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAorLyoKKyAqIFRoZSBlbmFibGVfcmVnL2VuYWJsZV9iaXQgaW4gdGhpcyBjbG9jayBpcyBvbmx5IHVzZWQgZm9yIENNX0FVVE9JRExFCisgKiBhY2Nlc3NlcyBkZXJpdmVkIGZyb20gdGhpcyBkYXRhLgorICovCiBzdGF0aWMgc3RydWN0IGNsayBncG1jX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3BtY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfaWRsZV9vbmx5LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0FVVE9fR1BNQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTYwMCwxNyArMTU5OCwzOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCisvKgorICogVGhlIGVuYWJsZV9yZWcvZW5hYmxlX2JpdCBpbiB0aGlzIGNsb2NrIGlzIG9ubHkgdXNlZCBmb3IgQ01fQVVUT0lETEUKKyAqIGFjY2Vzc2VzIGRlcml2ZWQgZnJvbSB0aGlzIGRhdGEuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0gewogCS5uYW1lCQk9ICJzZG1hX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KLQkucGFyZW50CQk9ICZsNF9jaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19pZGxlX29ubHksCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9BVVRPX1NETUFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBUaGUgZW5hYmxlX3JlZy9lbmFibGVfYml0IGluIHRoaXMgY2xvY2sgaXMgb25seSB1c2VkIGZvciBDTV9BVVRPSURMRQorICogYWNjZXNzZXMgZGVyaXZlZCBmcm9tIHRoaXMgZGF0YS4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CisJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19pZGxlX29ubHksCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjMpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQVVUT19TRFJDX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2bHlucV9pY2sgPSB7CiAJLm5hbWUJCT0gInZseW5xX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xNjU5LDcgKzE2NzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkZXNfaWNrID0gewogCS5uYW1lCQk9ICJkZXNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCkBAIC0xNjY5LDcgKzE2ODgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzaGFfaWNrID0gewogCS5uYW1lCQk9ICJzaGFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCkBAIC0xNjc5LDcgKzE2OTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0gewogCS5uYW1lCQk9ICJybmdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCkBAIC0xNjg5LDcgKzE3MDgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBhZXNfaWNrID0gewogCS5uYW1lCQk9ICJhZXNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCkBAIC0xNjk5LDcgKzE3MTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0gewogCS5uYW1lCQk9ICJwa2FfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCkBAIC0xNzc3LDcgKzE3OTYsNiBAQAogCUNMSyhOVUxMLAkibXB1X2NrIiwJJm1wdV9jaywJQ0tfMjQyWCksCiAJLyogZHNwIGRvbWFpbiBjbG9ja3MgKi8KIAlDTEsoTlVMTCwJImRzcF9mY2siLAkmZHNwX2ZjaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJkc3BfaXJhdGVfaWNrIiwgJmRzcF9pcmF0ZV9pY2ssIENLXzI0MlgpLAogCUNMSyhOVUxMLAkiZHNwX2ljayIsCSZkc3BfaWNrLAlDS18yNDJYKSwKIAlDTEsoTlVMTCwJIml2YTFfaWZjayIsCSZpdmExX2lmY2ssCUNLXzI0MlgpLAogCUNMSyhOVUxMLAkiaXZhMV9tcHVfaW50X2lmY2siLCAmaXZhMV9tcHVfaW50X2lmY2ssIENLXzI0MlgpLApAQCAtMTc5Nyw2ICsxODE1LDcgQEAKIAkvKiBMNCBkb21haW4gY2xvY2tzICovCiAJQ0xLKE5VTEwsCSJsNF9jayIsCSZsNF9jaywJCUNLXzI0MlgpLAogCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInd1X2w0X2ljayIsCSZ3dV9sNF9pY2ssCUNLXzI0MlgpLAogCS8qIHZpcnR1YWwgbWV0YS1ncm91cCBjbG9jayAqLwogCUNMSyhOVUxMLAkidmlydF9wcmNtX3NldCIsICZ2aXJ0X3ByY21fc2V0LCBDS18yNDJYKSwKIAkvKiBnZW5lcmFsIGw0IGludGVyZmFjZSBjaywgbXVsdGktcGFyZW50IGZ1bmN0aW9uYWwgY2xrICovCkBAIC0xODY5LDYgKzE4ODgsNyBAQAogCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0MlgpLAogCUNMSyhOVUxMLAkic2RtYV9mY2siLAkmc2RtYV9mY2ssCUNLXzI0MlgpLAogCUNMSyhOVUxMLAkic2RtYV9pY2siLAkmc2RtYV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzI0MlgpLAogCUNMSyhOVUxMLAkidmx5bnFfaWNrIiwJJnZseW5xX2ljaywJQ0tfMjQyWCksCiAJQ0xLKE5VTEwsCSJ2bHlucV9mY2siLAkmdmx5bnFfZmNrLAlDS18yNDJYKSwKIAlDTEsoTlVMTCwJImRlc19pY2siLAkmZGVzX2ljaywJQ0tfMjQyWCksCkBAIC0xOTEzLDYgKzE5MzMsOSBAQAogCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwogCX0KIAorCS8qIERpc2FibGUgYXV0b2lkbGUgb24gYWxsIGNsb2NrczsgbGV0IHRoZSBQTSBjb2RlIGVuYWJsZSBpdCBsYXRlciAqLworCW9tYXBfY2xrX2Rpc2FibGVfYXV0b2lkbGVfYWxsKCk7CisKIAkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KIAljbGtyYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOwogCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMF9kYXRhLmMKaW5kZXggYzA0N2RjZC4uYmJhMDE4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MzBfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwX2RhdGEuYwpAQCAtMSwxMiArMSwxMiBAQAogLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMF9kYXRhLmMKKyAqIE9NQVAyNDMwIGNsb2NrIGRhdGEKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDExIE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogIENvbnRhY3RzOgotICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqICBQYXVsIFdhbG1zbGV5CisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTM0LDE4ICszNCwxNSBAQAogLyoKICAqIDI0MzAgY2xvY2sgdHJlZS4KICAqCi0gKiBOT1RFOkluIG1hbnkgY2FzZXMgaGVyZSB3ZSBhcmUgYXNzaWduaW5nIGEgJ2RlZmF1bHQnIHBhcmVudC4JSW4gbWFueQotICoJY2FzZXMgdGhlIHBhcmVudCBpcyBzZWxlY3RhYmxlLglUaGUgZ2V0L3NldCBwYXJlbnQgY2FsbHMgd2lsbCBhbHNvCi0gKglzd2l0Y2ggc291cmNlcy4KLSAqCi0gKglNYW55IHNvbWUgY2xvY2tzIHNheSBhbHdheXNfZW5hYmxlZCwgYnV0IHRoZXkgY2FuIGJlIGF1dG8gaWRsZWQgZm9yCi0gKglwb3dlciBzYXZpbmdzLiBUaGV5IHdpbGwgYWx3YXlzIGJlIGF2YWlsYWJsZSB1cG9uIGNsb2NrIHJlcXVlc3QuCisgKiBOT1RFOkluIG1hbnkgY2FzZXMgaGVyZSB3ZSBhcmUgYXNzaWduaW5nIGEgJ2RlZmF1bHQnIHBhcmVudC4gSW4KKyAqCW1hbnkgY2FzZXMgdGhlIHBhcmVudCBpcyBzZWxlY3RhYmxlLiBUaGUgc2V0IHBhcmVudCBjYWxscyB3aWxsCisgKglhbHNvIHN3aXRjaCBzb3VyY2VzLgogICoKICAqCVNldmVyYWwgc291cmNlcyBhcmUgZ2l2ZW4gaW5pdGlhbCByYXRlcyB3aGljaCBtYXkgYmUgd3JvbmcsIHRoaXMgd2lsbAogICoJYmUgZml4ZWQgdXAgaW4gdGhlIGluaXQgZnVuYy4KICAqCiAgKglUaGluZ3MgYXJlIGJyb2FkbHkgc2VwYXJhdGVkIGJlbG93IGJ5IGNsb2NrIGRvbWFpbnMuIEl0IGlzCi0gKglub3Rld29ydGh5IHRoYXQgbW9zdCBwZXJpZmVyYWxzIGhhdmUgZGVwZW5kZW5jaWVzIG9uIG11bHRpcGxlIGNsb2NrCisgKglub3Rld29ydGh5IHRoYXQgbW9zdCBwZXJpcGhlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jawogICoJZG9tYWlucy4gTWFueSBnZXQgdGhlaXIgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBkb21haW4sIGJ1dCBnZXQKICAqCWZ1bmN0aW9uYWwgY2xvY2tzIGZyb20gZml4ZWQgc291cmNlcyBvciBvdGhlciBjb3JlIGRvbWFpbiBkZXJpdmVkCiAgKgljbG9ja3MuCkBAIC01NSw3ICs1Miw3IEBACiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzMya19jayA9IHsKIAkubmFtZQkJPSAiZnVuY18zMmtfY2siLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yYXRlCQk9IDMyMDAwLAorCS5yYXRlCQk9IDMyNzY4LAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogfTsKIApAQCAtMTE2LDcgKzExMyw2IEBACiAJLm1heF9tdWx0aXBsaWVyCQk9IDEwMjMsCiAJLm1pbl9kaXZpZGVyCQk9IDEsCiAJLm1heF9kaXZpZGVyCQk9IDE2LAotCS5yYXRlX3RvbGVyYW5jZQkJPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKIH07CiAKIC8qCkBAIC0xMjUsNyArMTIxLDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jayA9IHsKIAkubmFtZQkJPSAiZHBsbF9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyeHh4X2RwbGxfb3BzLAogCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCiAJLmRwbGxfZGF0YQk9ICZkcGxsX2RkLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLApAQCAtNDM0LDM3ICs0MzAsMjMgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAotLyogRFNQIGludGVyZmFjZSBjbG9jayAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfaXJhdGVfaWNrX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNwX2lyYXRlX2lja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHNwX2ZjaywgLnJhdGVzID0gZHNwX2lyYXRlX2lja19yYXRlcyB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNwX2lja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHNwX2ZjaywgLnJhdGVzID0gZHNwX2lja19yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAotLyogVGhpcyBjbG9jayBkb2VzIG5vdCBleGlzdCBhcyBzdWNoIGluIHRoZSBUUk0uICovCi1zdGF0aWMgc3RydWN0IGNsayBkc3BfaXJhdGVfaWNrID0gewotCS5uYW1lCQk9ICJkc3BfaXJhdGVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkc3BfZmNrLAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUF9JRl9NQVNLLAotCS5jbGtzZWwJCT0gZHNwX2lyYXRlX2lja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KIC8qIDI0MzAgb25seSAtIEVOX0RTUCBjb250cm9scyBib3RoIGRzcCBmY2xrIGFuZCBpY2xrIG9uIDI0MzAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTJfMV9pY2sgPSB7CiAJLm5hbWUJCT0gIml2YTJfMV9pY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZHNwX2lyYXRlX2ljaywKKwkucGFyZW50CQk9ICZkc3BfZmNrLAorCS5jbGtkbV9uYW1lCT0gImRzcF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NNX0ZDTEtFTl9EU1BfRU5fRFNQX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUF9JRl9NQVNLLAorCS5jbGtzZWwJCT0gZHNwX2lja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIC8qCkBAIC01MjUsNyArNTA3LDcgQEAKIC8qIEl0IGlzIHVuY2xlYXIgZnJvbSBUUk0gd2hldGhlciB1c2JfbDRfaWNrIGlzIHJlYWxseSBpbiBMMyBvciBMNCBjbGtkbSAqLwogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsJLyogRlMtVVNCIGludGVyZmFjZSBjbG9jayAqLwogCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKQEAgLTYwNiw3ICs1ODgsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0gewogCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCkBAIC02NjEsNiArNjQzLDcgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAorLyogVGhpcyBpbnRlcmZhY2UgY2xvY2sgZG9lcyBub3QgaGF2ZSBhIENNX0FVVE9JRExFIGJpdCAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ljayA9IHsKIAkubmFtZQkJPSAiZ2Z4X2ljayIsCQkvKiBGcm9tIGwzICovCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKQEAgLTY5Myw3ICs2NzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtZG1faWNrID0gewkJLyogdXNlZCBib3RoIGFzIGEgaWNrIGFuZCBmY2sgKi8KIAkubmFtZQkJPSAibWRtX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKIAkuY2xrZG1fbmFtZQk9ICJtZG1fY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNDMwX01ETV9NT0QsIENNX0lDTEtFTiksCkBAIC03MDYsNyArNjg5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKIAkubmFtZQkJPSAibWRtX29zY19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfbWRtY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZvc2NfY2ssCiAJLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9GQ0xLRU4pLApAQCAtNzUxLDcgKzczNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCiAJLm5hbWUJCT0gImRzc19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCS8qIHJlYWxseSBib3RoIGwzIGFuZCBsNCAqLwogCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtODEzLDYgKzc5NiwxNCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayB3dV9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInd1X2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCiAvKgogICogQ09SRSBwb3dlciBkb21haW4gSUNMSyAmIEZDTEsgZGVmaW5lcy4KICAqIE1hbnkgb2YgdGhlIHRoZXNlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgcGFyZW50LiBFbnRyaWVzCkBAIC04MzMsOSArODI0LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3dV9sNF9pY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC04NTksNyArODUwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC04ODMsNyArODc0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC05MDcsNyArODk4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC05MzEsNyArOTIyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC05NTUsNyArOTQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC05NzksOCArOTcwLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ3X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xMDAyLDcgKzk5NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0gewogCS5uYW1lCQk9ICJncHQ4X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTAyNiw3ICsxMDE4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDlfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMDUwLDcgKzEwNDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEwX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTA3NCw3ICsxMDY2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTEwOTgsNyArMTA5MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMTIyLDcgKzExMTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMTYyLDcgKzExNTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMTg2LDcgKzExNzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCkBAIC0xMjEwLDcgKzEyMDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCkBAIC0xMjM0LDcgKzEyMjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCkBAIC0xMjU4LDcgKzEyNTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMjc4LDcgKzEyNzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xMjk4LDcgKzEyOTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCkBAIC0xMzE4LDcgKzEzMTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTMzOCw3ICsxMzMwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTEzNTgsNyArMTM1MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ljayA9IHsKIAkubmFtZQkJPSAidWFydDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCkBAIC0xMzc4LDkgKzEzNzAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW9zX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd3VfbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTEzOTgsOSArMTM5MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfaWNrID0gewogCS5uYW1lCQk9ICJtcHVfd2R0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd3VfbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTQxOCwxMCArMTQxMCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7CiAJLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5wYXJlbnQJCT0gJnd1X2w0X2ljaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzMyS1NZTkNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE0MjksOSArMTQyMSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd3VfbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTQzOSwxMCArMTQzMSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5wYXJlbnQJCT0gJnd1X2w0X2ljaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX09NQVBDVFJMX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNDUwLDkgKzE0NDIsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewogCS5uYW1lCQk9ICJpY3JfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3dV9sNF9pY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JQ1JfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE0NjAsNyArMTQ1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CiAJLm5hbWUJCT0gImNhbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTQ4NSw3ICsxNDc3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKIAkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTQ5NSw3ICsxNDg3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xNTE1LDcgKzE1MDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7CiAJLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTUzNSw3ICsxNTI3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ljayA9IHsKIAkubmFtZQkJPSAiZmFjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTU1NSw3ICsxNTQ3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKIAkubmFtZQkJPSAiaGRxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLApAQCAtMTU3OSw3ICsxNTcxLDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9pY2sgPSB7CiAJLm5hbWUJCT0gImkyYzJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0xNjAzLDcgKzE1OTUsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTE2MjEsMTIgKzE2MTMsMTggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAorLyoKKyAqIFRoZSBlbmFibGVfcmVnL2VuYWJsZV9iaXQgaW4gdGhpcyBjbG9jayBpcyBvbmx5IHVzZWQgZm9yIENNX0FVVE9JRExFCisgKiBhY2Nlc3NlcyBkZXJpdmVkIGZyb20gdGhpcyBkYXRhLgorICovCiBzdGF0aWMgc3RydWN0IGNsayBncG1jX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3BtY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfaWRsZV9vbmx5LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0FVVE9fR1BNQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTYzOCwyMCArMTYzNiwyNiBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCisvKgorICogVGhlIGVuYWJsZV9yZWcvZW5hYmxlX2JpdCBpbiB0aGlzIGNsb2NrIGlzIG9ubHkgdXNlZCBmb3IgQ01fQVVUT0lETEUKKyAqIGFjY2Vzc2VzIGRlcml2ZWQgZnJvbSB0aGlzIGRhdGEuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0gewogCS5uYW1lCQk9ICJzZG1hX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KLQkucGFyZW50CQk9ICZsNF9jaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19pZGxlX29ubHksCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9BVVRPX1NETUFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewogCS5uYW1lCQk9ICJzZHJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19pZGxlX29ubHksCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjMpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fU0RSQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTY1OSw3ICsxNjYzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKIAkubmFtZQkJPSAiZGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLApAQCAtMTY2OSw3ICsxNjczLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc2hhX2ljayA9IHsKIAkubmFtZQkJPSAic2hhX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLApAQCAtMTY3OSw3ICsxNjgzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcm5nX2ljayA9IHsKIAkubmFtZQkJPSAicm5nX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLApAQCAtMTY4OSw3ICsxNjkzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKIAkubmFtZQkJPSAiYWVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLApAQCAtMTY5OSw3ICsxNzAzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKIAkubmFtZQkJPSAicGthX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLApAQCAtMTcxOSw3ICsxNzIzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaHNfaWNrID0gewogCS5uYW1lCQk9ICJ1c2Joc19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLApAQCAtMTcyOSw3ICsxNzMzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKIAkubmFtZQkJPSAibW1jaHMxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLApAQCAtMTc0MSw3ICsxNzQ1LDcgQEAKIAkubmFtZQkJPSAibW1jaHMxX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3NDksNyArMTc1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9pY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKQEAgLTE3NjEsNiArMTc2NSw3IEBACiAJLm5hbWUJCT0gIm1tY2hzMl9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNzY4LDcgKzE3NzMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW81X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLApAQCAtMTc4OCw3ICsxNzkzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ludGNfaWNrID0gewogCS5uYW1lCQk9ICJtZG1faW50Y19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKQEAgLTE4ODAsNyArMTg4NSw2IEBACiAJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18yNDNYKSwKIAkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLwogCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJImRzcF9pcmF0ZV9pY2siLCAmZHNwX2lyYXRlX2ljaywgQ0tfMjQzWCksCiAJQ0xLKE5VTEwsCSJpdmEyXzFfaWNrIiwJJml2YTJfMV9pY2ssCUNLXzI0M1gpLAogCS8qIEdGWCBkb21haW4gY2xvY2tzICovCiAJQ0xLKE5VTEwsCSJnZnhfM2RfZmNrIiwJJmdmeF8zZF9mY2ssCUNLXzI0M1gpLApAQCAtMTkwMSw2ICsxOTA1LDcgQEAKIAkvKiBMNCBkb21haW4gY2xvY2tzICovCiAJQ0xLKE5VTEwsCSJsNF9jayIsCSZsNF9jaywJCUNLXzI0M1gpLAogCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInd1X2w0X2ljayIsCSZ3dV9sNF9pY2ssCUNLXzI0M1gpLAogCS8qIHZpcnR1YWwgbWV0YS1ncm91cCBjbG9jayAqLwogCUNMSyhOVUxMLAkidmlydF9wcmNtX3NldCIsICZ2aXJ0X3ByY21fc2V0LCBDS18yNDNYKSwKIAkvKiBnZW5lcmFsIGw0IGludGVyZmFjZSBjaywgbXVsdGktcGFyZW50IGZ1bmN0aW9uYWwgY2xrICovCkBAIC0xOTg0LDE1ICsxOTg5LDE1IEBACiAJQ0xLKE5VTEwsCSJwa2FfaWNrIiwJJnBrYV9pY2ssCUNLXzI0M1gpLAogCUNMSyhOVUxMLAkidXNiX2ZjayIsCSZ1c2JfZmNrLAlDS18yNDNYKSwKIAlDTEsoIm11c2Itb21hcDI0MzAiLAkiaWNrIiwJJnVzYmhzX2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMCIsICJpY2siLAkmbW1jaHMxX2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMCIsICJmY2siLAkmbW1jaHMxX2ZjaywJQ0tfMjQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsICJpY2siLAkmbW1jaHMyX2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsICJmY2siLAkmbW1jaHMyX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX2hzbW1jLjAiLCAiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcF9oc21tYy4wIiwgImZjayIsCSZtbWNoczFfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXBfaHNtbWMuMSIsICJpY2siLAkmbW1jaHMyX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX2hzbW1jLjEiLCAiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzI0M1gpLAogCUNMSyhOVUxMLAkiZ3BpbzVfaWNrIiwJJmdwaW81X2ljaywJQ0tfMjQzWCksCiAJQ0xLKE5VTEwsCSJncGlvNV9mY2siLAkmZ3BpbzVfZmNrLAlDS18yNDNYKSwKIAlDTEsoTlVMTCwJIm1kbV9pbnRjX2ljayIsCSZtZG1faW50Y19pY2ssCUNLXzI0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjAiLCAibW1jaHNkYl9mY2siLAkmbW1jaHNkYjFfZmNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwgIm1tY2hzZGJfZmNrIiwgCSZtbWNoc2RiMl9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcF9oc21tYy4wIiwgIm1tY2hzZGJfZmNrIiwJJm1tY2hzZGIxX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX2hzbW1jLjEiLCAibW1jaHNkYl9mY2siLAkmbW1jaHNkYjJfZmNrLAlDS18yNDNYKSwKIH07CiAKIC8qCkBAIC0yMDI4LDYgKzIwMzMsOSBAQAogCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwogCX0KIAorCS8qIERpc2FibGUgYXV0b2lkbGUgb24gYWxsIGNsb2NrczsgbGV0IHRoZSBQTSBjb2RlIGVuYWJsZSBpdCBsYXRlciAqLworCW9tYXBfY2xrX2Rpc2FibGVfYXV0b2lkbGVfYWxsKCk7CisKIAkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KIAljbGtyYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOwogCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguaAppbmRleCA2YTY1OGI4Li5jYjZkZjhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4LmgKQEAgLTIwLDE2ICsyMCwxNiBAQAogdTMyIG9tYXAyeHh4X2dldF9zeXNjbGtkaXYodm9pZCk7CiB2b2lkIG9tYXAyeHh4X2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAorI2lmZGVmIENPTkZJR19TT0NfT01BUDI0MjAKIGludCBvbWFwMjQyMF9jbGtfaW5pdCh2b2lkKTsKICNlbHNlCi0jZGVmaW5lIG9tYXAyNDIwX2Nsa19pbml0KCkJMAorI2RlZmluZSBvbWFwMjQyMF9jbGtfaW5pdCgpCWRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorI2lmZGVmIENPTkZJR19TT0NfT01BUDI0MzAKIGludCBvbWFwMjQzMF9jbGtfaW5pdCh2b2lkKTsKICNlbHNlCi0jZGVmaW5lIG9tYXAyNDMwX2Nsa19pbml0KCkJMAorI2RlZmluZSBvbWFwMjQzMF9jbGtfaW5pdCgpCWRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKIGV4dGVybiB2b2lkIF9faW9tZW0gKnByY21fY2xrc3JjX2N0cmwsICpjbV9pZGxlc3RfcGxsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggMjg3YWJjNC4uMWZjOTZiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC0yLDcgKzIsNyBAQAogICogT01BUDMtc3BlY2lmaWMgY2xvY2sgZnJhbWV3b3JrIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBQYXVsIFdhbG1zbGV5CiAgKiBKb3VuaSBIw7ZnYW5kZXIKQEAgLTU5LDYgKzU5LDE1IEBACiAJLmZpbmRfY29tcGFuaW9uID0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCiB9OwogCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMzQzMGVzMl9pY2xrX3NzaV93YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuZmluZF9pZGxlc3QJPSBvbWFwMzQzMGVzMl9jbGtfc3NpX2ZpbmRfaWRsZXN0LAorCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAorCS5hbGxvd19pZGxlCT0gb21hcDJfY2xrdF9pY2xrX2FsbG93X2lkbGUsCisJLmRlbnlfaWRsZQk9IG9tYXAyX2Nsa3RfaWNsa19kZW55X2lkbGUsCit9OworCiAvKioKICAqIG9tYXAzNDMwZXMyX2Nsa19kc3NfdXNiaG9zdF9maW5kX2lkbGVzdCAtIENNX0lETEVTVCBpbmZvIGZvciBEU1MsIFVTQkhPU1QKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCkBAIC05NCw2ICsxMDMsMTUgQEAKIAkuZmluZF9jb21wYW5pb24gPSBvbWFwMl9jbGtfZGZsdF9maW5kX2NvbXBhbmlvbiwKIH07CiAKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX2ljbGtfZHNzX3VzYmhvc3Rfd2FpdCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCisJLmZpbmRfaWRsZXN0CT0gb21hcDM0MzBlczJfY2xrX2Rzc191c2Job3N0X2ZpbmRfaWRsZXN0LAorCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAorCS5hbGxvd19pZGxlCT0gb21hcDJfY2xrdF9pY2xrX2FsbG93X2lkbGUsCisJLmRlbnlfaWRsZQk9IG9tYXAyX2Nsa3RfaWNsa19kZW55X2lkbGUsCit9OworCiAvKioKICAqIG9tYXAzNDMwZXMyX2Nsa19oc290Z3VzYl9maW5kX2lkbGVzdCAtIHJldHVybiBDTV9JRExFU1QgaW5mbyBmb3IgSFNPVEdVU0IKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCkBAIC0xMjQsMyArMTQyLDEyIEBACiAJLmZpbmRfaWRsZXN0CT0gb21hcDM0MzBlczJfY2xrX2hzb3RndXNiX2ZpbmRfaWRsZXN0LAogCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAogfTsKKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfaWNsa19oc290Z3VzYl93YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuZmluZF9pZGxlc3QJPSBvbWFwMzQzMGVzMl9jbGtfaHNvdGd1c2JfZmluZF9pZGxlc3QsCisJLmZpbmRfY29tcGFuaW9uID0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCisJLmFsbG93X2lkbGUJPSBvbWFwMl9jbGt0X2ljbGtfYWxsb3dfaWRsZSwKKwkuZGVueV9pZGxlCT0gb21hcDJfY2xrdF9pY2xrX2RlbnlfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAppbmRleCA2MjhlOGRlLi4wODRiYTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKQEAgLTIsMTQgKzIsMTcgQEAKICAqIE9NQVAzNHh4IGNsb2NrIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1hY3JvcwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTm9raWEgQ29ycG9yYXRpb24KICAqLwogCiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DSzM0WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0szNFhYX0gKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX2ljbGtfc3NpX3dhaXQ7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfaHNvdGd1c2Jfd2FpdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMzQzMGVzMl9pY2xrX2hzb3RndXNiX3dhaXQ7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMzQzMGVzMl9pY2xrX2Rzc191c2Job3N0X3dhaXQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM1MTcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNTE3LmMKaW5kZXggNzQxMTZhMy4uMmU5N2QwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM1MTcuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5jCkBAIC0yLDcgKzIsNyBAQAogICogT01BUDM1MTcvMzUwNS1zcGVjaWZpYyBjbG9jayBmcmFtZXdvcmsgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFJhbmppdGggTG9oaXRoYWtzaGFuCiAgKiBQYXVsIFdhbG1zbGV5CkBAIC0xMTksNiArMTE5LDggQEAKIAkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCiAJLmZpbmRfaWRsZXN0CT0gYW0zNXh4X2Nsa19pcHNzX2ZpbmRfaWRsZXN0LAogCS5maW5kX2NvbXBhbmlvbgk9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAorCS5hbGxvd19pZGxlCT0gb21hcDJfY2xrdF9pY2xrX2FsbG93X2lkbGUsCisJLmRlbnlfaWRsZQk9IG9tYXAyX2Nsa3RfaWNsa19kZW55X2lkbGUsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jCmluZGV4IGU5ZjY2YjYuLjk1MmMzZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYwpAQCAtNjUsOSArNjUsNiBAQAogCWNsa19zZXRfcmF0ZShkcGxsNV9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QpOwogCWNsa19lbmFibGUoZHBsbDVfY2xrKTsKIAotCS8qIEVuYWJsZSBhdXRvaWRsZSB0byBhbGxvdyBpdCB0byBlbnRlciBsb3cgcG93ZXIgYnlwYXNzICovCi0Jb21hcDNfZHBsbF9hbGxvd19pZGxlKGRwbGw1X2Nsayk7Ci0KIAkvKiBQcm9ncmFtIGRwbGw1X20yX2NsayBkaXZpZGVyIGZvciBubyBkaXZpc2lvbiAqLwogCWRwbGw1X20yX2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X20yX2NrIik7CiAJY2xrX2VuYWJsZShkcGxsNV9tMl9jbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jCmluZGV4IGZiYjFlMzAuLmZjYjMyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eF9kYXRhLmMKQEAgLTIsNyArMiw3IEBACiAgKiBPTUFQMyBjbG9jayBkYXRhCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICogV2l0aCBtYW55IGRldmljZSBjbG9jayBmaXhlcyBieSBLZXZpbiBIaWxtYW4gYW5kIEpvdW5pIEjDtmdhbmRlcgpAQCAtMjkxLDEyICsyOTEsMTEgQEAKIAkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAogCS5taW5fZGl2aWRlcgk9IDEsCiAJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAotCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwxX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDNfbm9uY29yZV9kcGxsX29wcywKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmRwbGxfZGF0YQk9ICZkcGxsMV9kZCwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCkBAIC0zNjQsNyArMzYzLDYgQEAKIAkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAogCS5taW5fZGl2aWRlcgk9IDEsCiAJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAotCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfY2sgPSB7CkBAIC00MjQsMTIgKzQyMiwxMSBAQAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCiAJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCi0JLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsM19jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5vcHMJCT0gJmNsa29wc19vbWFwM19jb3JlX2RwbGxfb3BzLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGwzX2RkLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKQEAgLTU4Myw3ICs1ODAsNiBAQAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCiAJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCi0JLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZF8zNjMwIF9faW5pdGRhdGEgPSB7CkBAIC02MDcsNyArNjAzLDYgQEAKIAkubWF4X211bHRpcGxpZXIgPSBPTUFQMzYzMF9NQVhfSlRZUEVfRFBMTF9NVUxULAogCS5taW5fZGl2aWRlcgk9IDEsCiAJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAotCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRSwKIAkuZmxhZ3MJCT0gRFBMTF9KX1RZUEUKIH07CiAKQEAgLTkzOSw3ICs5MzQsNiBAQAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCiAJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCi0JLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNV9jayA9IHsKQEAgLTEyMDUsNyArMTE5OSwxMCBAQAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAotLyogVmlydHVhbCBwYXJlbnQgY2xvY2sgZm9yIGdmeF9sM19pY2sgYW5kIGdmeF9sM19mY2sgKi8KKy8qCisgKiBWaXJ0dWFsIHBhcmVudCBjbG9jayBmb3IgZ2Z4X2wzX2ljayBhbmQgZ2Z4X2wzX2ZjaworICogVGhpcyBpbnRlcmZhY2UgY2xvY2sgZG9lcyBub3QgaGF2ZSBhIENNX0FVVE9JRExFIGJpdAorICovCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9sM19jayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKQEAgLTEzMDQsNiArMTMwMSw3IEBACiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUKIH07CiAKKy8qIFRoaXMgaW50ZXJmYWNlIGNsb2NrIGRvZXMgbm90IGhhdmUgYSBDTV9BVVRPSURMRSBiaXQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHNneF9pY2sgPSB7CiAJLm5hbWUJCT0gInNneF9pY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCkBAIC0xMzI4LDcgKzEzMjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtb2RlbV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1vZGVtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfbWRtY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU9ERU1fU0hJRlQsCkBAIC0xMzM4LDcgKzEzMzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzYWQyZF9pY2sgPSB7CiAJLm5hbWUJCT0gInNhZDJkX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NBRDJEX1NISUZULApAQCAtMTM0OCw3ICsxMzQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWFkMmRfaWNrID0gewogCS5uYW1lCQk9ICJtYWQyZF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmwzX2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUQyRF9TSElGVCwKQEAgLTE3MTgsNyArMTcxNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2lja18zNDMwZXMxID0gewogCS5uYW1lCQk9ICJoc290Z3VzYl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSFNPVEdVU0JfU0hJRlQsCkBAIC0xNzI4LDcgKzE3MjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2tfMzQzMGVzMiA9IHsKIAkubmFtZQkJPSAiaHNvdGd1c2JfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfaHNvdGd1c2Jfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfaWNsa19oc290Z3VzYl93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hTT1RHVVNCX1NISUZULApAQCAtMTczNiw2ICsxNzM0LDcgQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAorLyogVGhpcyBpbnRlcmZhY2UgY2xvY2sgZG9lcyBub3QgaGF2ZSBhIENNX0FVVE9JRExFIGJpdCAqLwogc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CiAJLm5hbWUJCT0gInNkcmNfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LApAQCAtMTc2Nyw3ICsxNzY2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKIAkubmFtZQkJPSAicGthX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDNfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1BLQV9TSElGVCwKQEAgLTE3ODYsNyArMTc4NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYnRsbF9pY2sgPSB7CiAJLm5hbWUJCT0gInVzYnRsbF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQlRMTF9TSElGVCwKQEAgLTE3OTYsNyArMTc5NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19pY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQsCkBAIC0xODA3LDcgKzE4MDYsNyBAQAogLyogSW50ZXJzeXN0ZW0gQ29tbXVuaWNhdGlvbiBSZWdpc3RlcnMgLSBjaGFzc2lzIG1vZGUgb25seSAqLwogc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKIAkubmFtZQkJPSAiaWNyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSUNSX1NISUZULApAQCAtMTgxNyw3ICsxODE2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7CiAJLm5hbWUJCT0gImFlczJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMyX1NISUZULApAQCAtMTgyNyw3ICsxODI2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc2hhMTJfaWNrID0gewogCS5uYW1lCQk9ICJzaGExMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTEyX1NISUZULApAQCAtMTgzNyw3ICsxODM2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZGVzMl9pY2sgPSB7CiAJLm5hbWUJCT0gImRlczJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMyX1NISUZULApAQCAtMTg0Nyw3ICsxODQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKIAkubmFtZQkJPSAibW1jaHMyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMl9TSElGVCwKQEAgLTE4NTcsNyArMTg1Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9pY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCkBAIC0xODY3LDcgKzE4NjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7CiAJLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCkBAIC0xODc3LDcgKzE4NzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBoZHFfaWNrID0gewogCS5uYW1lCQk9ICJoZHFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCkBAIC0xODg3LDcgKzE4ODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTRfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCkBAIC0xODk3LDcgKzE4OTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCkBAIC0xOTA3LDcgKzE5MDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCkBAIC0xOTE3LDcgKzE5MTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaTFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCkBAIC0xOTI3LDcgKzE5MjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMzX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCkBAIC0xOTM3LDcgKzE5MzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCkBAIC0xOTQ3LDcgKzE5NDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCkBAIC0xOTU3LDcgKzE5NTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDJfU0hJRlQsCkBAIC0xOTY3LDcgKzE5NjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDFfU0hJRlQsCkBAIC0xOTc3LDcgKzE5NzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDExX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsCkBAIC0xOTg3LDcgKzE5ODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEwX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCkBAIC0xOTk3LDcgKzE5OTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDVfU0hJRlQsCkBAIC0yMDA3LDcgKzIwMDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcDFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDFfU0hJRlQsCkBAIC0yMDE3LDcgKzIwMTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0gewogCS5uYW1lCQk9ICJmYWNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GQUNfU0hJRlQsCkBAIC0yMDI3LDcgKzIwMjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtYWlsYm94ZXNfaWNrID0gewogCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCkBAIC0yMDM3LDcgKzIwMzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fT01BUENUUkxfU0hJRlQsCkBAIC0yMDU3LDcgKzIwNTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczEgPSB7CiAJLm5hbWUJCT0gInNzaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHQsCiAJLnBhcmVudAkJPSAmc3NpX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCkBAIC0yMDY3LDcgKzIwNjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczIgPSB7CiAJLm5hbWUJCT0gInNzaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9zc2lfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfaWNsa19zc2lfd2FpdCwKIAkucGFyZW50CQk9ICZzc2lfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKQEAgLTIwODUsNyArMjA4NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CiAJLm5hbWUJCT0gInVzYl9sNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKQEAgLTIxMDcsNyArMjEwNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFlczFfaWNrID0gewogCS5uYW1lCQk9ICJhZXMxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMxX1NISUZULApAQCAtMjExNiw3ICsyMTE1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcm5nX2ljayA9IHsKIAkubmFtZQkJPSAicm5nX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9STkdfU0hJRlQsCkBAIC0yMTI1LDcgKzIxMjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzaGExMV9pY2sgPSB7CiAJLm5hbWUJCT0gInNoYTExX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TSEExMV9TSElGVCwKQEAgLTIxMzQsNyArMjEzMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRlczFfaWNrID0gewogCS5uYW1lCQk9ICJkZXMxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMxX1NISUZULApAQCAtMjE5NSw3ICsyMTk0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMSA9IHsKIAkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwogCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fSUNMS0VOX0RTU19FTl9EU1NfU0hJRlQsCkBAIC0yMjA2LDcgKzIyMDUsNyBAQAogc3RhdGljIHN0cnVjdCBjbGsgZHNzX2lja18zNDMwZXMyID0gewogCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCiAJLm5hbWUJCT0gImRzc19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9pY2xrX2Rzc191c2Job3N0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTV9JQ0xLRU5fRFNTX0VOX0RTU19TSElGVCwKQEAgLTIyMjksNyArMjIyOCw3IEBACiBzdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0gewogCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCiAJLm5hbWUJCT0gImNhbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHQsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCkBAIC0yMjcyLDcgKzIyNzEsNyBAQAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9pY2sgPSB7CiAJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KIAkubmFtZQkJPSAidXNiaG9zdF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9pY2xrX2Rzc191c2Job3N0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVF9TSElGVCwKQEAgLTIzNzIsNyArMjM3MSw3IEBACiAvKiBOZXZlciBzcGVjaWZpY2FsbHkgbmFtZWQgaW4gdGhlIFRSTSwgc28gd2UgaGF2ZSB0byBpbmZlciBhIGxpa2VseSBuYW1lICovCiBzdGF0aWMgc3RydWN0IGNsayB1c2ltX2ljayA9IHsKIAkubmFtZQkJPSAidXNpbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKQEAgLTIzODIsNyArMjM4MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULApAQCAtMjM5Miw3ICsyMzkxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDFfU0hJRlQsCkBAIC0yNDAyLDcgKzI0MDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvMV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW8xX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMV9TSElGVCwKQEAgLTI0MTIsNyArMjQxMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrc3luY19pY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfMzJrc3luY19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fMzJLU1lOQ19TSElGVCwKQEAgLTI0MjMsNyArMjQyMiw3IEBACiAvKiBYWFggVGhpcyBjbG9jayBubyBsb25nZXIgZXhpc3RzIGluIDM0MzAgVFJNIHJldiBGICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMl9TSElGVCwKQEAgLTI0MzMsNyArMjQzMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfaWNrID0gewogCS5uYW1lCQk9ICJncHQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULApAQCAtMjY2Myw3ICsyNjYyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfaWNrID0gewogCS5uYW1lCQk9ICJncGlvNl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU82X1NISUZULApAQCAtMjY3Myw3ICsyNjcyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewogCS5uYW1lCQk9ICJncGlvNV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULApAQCAtMjY4Myw3ICsyNjgyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfaWNrID0gewogCS5uYW1lCQk9ICJncGlvNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU80X1NISUZULApAQCAtMjY5Myw3ICsyNjkyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfaWNrID0gewogCS5uYW1lCQk9ICJncGlvM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8zX1NISUZULApAQCAtMjcwMyw3ICsyNzAyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfaWNrID0gewogCS5uYW1lCQk9ICJncGlvMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULApAQCAtMjcxMyw3ICsyNzEyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULApAQCAtMjcyMyw3ICsyNzIyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQzX1NISUZULApAQCAtMjczMyw3ICsyNzMyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDRfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0NF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2ljbGtfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNjMwX0VOX1VBUlQ0X1NISUZULApAQCAtMjc0Myw3ICsyNzQyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDlfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ5X1NISUZULApAQCAtMjc1Myw3ICsyNzUyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDhfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULApAQCAtMjc2Myw3ICsyNzYyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ3X1NISUZULApAQCAtMjc3Myw3ICsyNzcyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ2X1NISUZULApAQCAtMjc4Myw3ICsyNzgyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULApAQCAtMjc5Myw3ICsyNzkyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ0X1NISUZULApAQCAtMjgwMyw3ICsyODAyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQzX1NISUZULApAQCAtMjgxMyw3ICsyODEyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULApAQCAtMjgyMyw3ICsyODIyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3AyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AyX1NISUZULApAQCAtMjgzMyw3ICsyODMyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3AzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AzX1NISUZULApAQCAtMjg0Myw3ICsyODQyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ljayA9IHsKIAkubmFtZQkJPSAibWNic3A0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfaWNsa19kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULApAQCAtMzE4Niw3ICszMTg1LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgdWFydDRfaWNrX2FtMzV4eCA9IHsKIAkubmFtZQkJPSAidWFydDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9pY2xrX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBBTTM1WFhfRU5fVUFSVDRfU0hJRlQsCkBAIC0zMjkwLDEwICszMjg5LDEwIEBACiAJQ0xLKCJvbWFwLW1jYnNwLjEiLAkicHJjbV9mY2siLAkmY29yZV85Nm1fZmNrLAlDS18zWFhYKSwKIAlDTEsoIm9tYXAtbWNic3AuNSIsCSJwcmNtX2ZjayIsCSZjb3JlXzk2bV9mY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiY29yZV85Nm1fZmNrIiwJJmNvcmVfOTZtX2ZjaywJQ0tfM1hYWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMiIsCSJmY2siLAkmbW1jaHMzX2ZjaywJQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImZjayIsCSZtbWNoczJfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfaHNtbWMuMiIsCSJmY2siLAkmbW1jaHMzX2ZjaywJQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKKwlDTEsoIm9tYXBfaHNtbWMuMSIsCSJmY2siLAkmbW1jaHMyX2ZjaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJtc3Byb19mY2siLAkmbXNwcm9fZmNrLAlDS18zNFhYIHwgQ0tfMzZYWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkmbW1jaHMxX2ZjaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwX2hzbW1jLjAiLAkiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzNYWFgpLAogCUNMSygib21hcF9pMmMuMyIsICJmY2siLAkmaTJjM19mY2ssCUNLXzNYWFgpLAogCUNMSygib21hcF9pMmMuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzNYWFgpLAogCUNMSygib21hcF9pMmMuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzNYWFgpLApAQCAtMzMyMywxMyArMzMyMiwxMyBAQAogCUNMSyhOVUxMLAkiY29yZV9sNF9pY2siLAkmY29yZV9sNF9pY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkidXNidGxsX2ljayIsCSZ1c2J0bGxfaWNrLAlDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAogCUNMSygidXNiaHMtb21hcC4wIiwJInVzYnRsbF9pY2siLAkmdXNidGxsX2ljaywJQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImljayIsCSZtbWNoczNfaWNrLAlDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAorCUNMSygib21hcF9oc21tYy4yIiwJImljayIsCSZtbWNoczNfaWNrLAlDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkiaWNyX2ljayIsCSZpY3JfaWNrLAlDS18zNFhYIHwgQ0tfMzZYWCksCiAJQ0xLKCJvbWFwLWFlcyIsCSJpY2siLAkmYWVzMl9pY2ssCUNLXzM0WFggfCBDS18zNlhYKSwKIAlDTEsoIm9tYXAtc2hhbSIsCSJpY2siLAkmc2hhMTJfaWNrLAlDS18zNFhYIHwgQ0tfMzZYWCksCiAJQ0xLKE5VTEwsCSJkZXMyX2ljayIsCSZkZXMyX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAotCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzNYWFgpLAotCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcF9oc21tYy4xIiwJImljayIsCSZtbWNoczJfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfaHNtbWMuMCIsCSJpY2siLAkmbW1jaHMxX2ljaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJtc3Byb19pY2siLAkmbXNwcm9faWNrLAlDS18zNFhYIHwgQ0tfMzZYWCksCiAJQ0xLKCJvbWFwX2hkcS4wIiwgImljayIsCSZoZHFfaWNrLAlDS18zWFhYKSwKIAlDTEsoIm9tYXAyX21jc3BpLjQiLCAiaWNrIiwJJm1jc3BpNF9pY2ssCUNLXzNYWFgpLApAQCAtMzQ4MCw2ICszNDc5LDkgQEAKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzYzMCgpKSB7CiAJCWNwdV9tYXNrID0gKFJBVEVfSU5fMzRYWCB8IFJBVEVfSU5fMzZYWCk7CiAJCWNwdV9jbGtmbGcgPSBDS18zNlhYOworCX0gZWxzZSBpZiAoY3B1X2lzX3RpODE2eCgpKSB7CisJCWNwdV9tYXNrID0gUkFURV9JTl9USTgxNlg7CisJCWNwdV9jbGtmbGcgPSBDS19USTgxNlg7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApIHsKIAkJCWNwdV9tYXNrID0gUkFURV9JTl8zNDMwRVMxOwpAQCAtMzU0NCw2ICszNTQ2LDkgQEAKIAkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CiAJCX0KIAorCS8qIERpc2FibGUgYXV0b2lkbGUgb24gYWxsIGNsb2NrczsgbGV0IHRoZSBQTSBjb2RlIGVuYWJsZSBpdCBsYXRlciAqLworCW9tYXBfY2xrX2Rpc2FibGVfYXV0b2lkbGVfYWxsKCk7CisKIAlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOwogCiAJcHJfaW5mbygiQ2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9Db3JlL01QVSk6ICVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKQEAgLTM1NTcsOSArMzU2MiwxMCBAQAogCWNsa19lbmFibGVfaW5pdF9jbG9ja3MoKTsKIAogCS8qCi0JICogTG9jayBEUExMNSBhbmQgcHV0IGl0IGluIGF1dG9pZGxlLgorCSAqIExvY2sgRFBMTDUgLS0gaGVyZSBvbmx5IHVudGlsIG90aGVyIGRldmljZSBpbml0IGNvZGUgY2FuCisJICogaGFuZGxlIHRoaXMKIAkgKi8KLQlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCisJaWYgKCFjcHVfaXNfdGk4MTZ4KCkgJiYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMl8wKSkKIAkJb21hcDNfY2xrX2xvY2tfZHBsbDUoKTsKIAogCS8qIEF2b2lkIHNsZWVwaW5nIGR1cmluZyBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCmluZGV4IDQ2ZmQzZjYuLmQzMmVkOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKQEAgLTI3OCw4ICsyNzgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfYWJlX3gyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsX2FiZV94Ml9jayIsCiAJLnBhcmVudAkJPSAmZHBsbF9hYmVfY2ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX0NMS09VVFgyLAorCS5vcHMJCT0gJmNsa29wc19vbWFwNF9kcGxsbXhfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX0FCRSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2MzFfMXRvMzFfcmF0ZXNbXSA9IHsKQEAgLTMyOCw3ICszMzAsNyBAQAogCS5jbGtzZWwJCT0gZHBsbF9hYmVfbTJ4Ml9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9BQkUsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLApAQCAtMzk1LDcgKzM5Nyw3IEBACiAJLmNsa3NlbAkJPSBkcGxsX2FiZV9tMngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NM19EUExMX0FCRSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZfTUFTSywKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDRfZHBsbG14X29wcywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCkBAIC00NDMsMTMgKzQ0NSwxNCBAQAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGxfY29yZV9kZCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDNfY29yZV9kcGxsX29wcywKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV94Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbF9jb3JlX3gyX2NrIiwKIAkucGFyZW50CQk9ICZkcGxsX2NvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0NMS09VVFgyLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CkBAIC00NjUsNyArNDY4LDcgQEAKIAkuY2xrc2VsCQk9IGRwbGxfY29yZV9tNngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NNl9EUExMX0NPUkUsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLApAQCAtNDk1LDcgKzQ5OCw3IEBACiAJLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00yX0RQTExfQ09SRSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfTUFTSywKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDRfZHBsbG14X29wcywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCkBAIC01MTUsNyArNTE4LDcgQEAKIAkuY2xrc2VsCQk9IGRwbGxfY29yZV9tNngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NNV9EUExMX0NPUkUsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLApAQCAtNTgxLDcgKzU4NCw3IEBACiAJLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTZ4Ml9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTRfRFBMTF9DT1JFLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0RJVl9NQVNLLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5vcHMJCT0gJmNsa29wc19vbWFwNF9kcGxsbXhfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKQEAgLTYwNiw3ICs2MDksNyBAQAogCS5jbGtzZWwJCT0gZHBsbF9hYmVfbTJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00yX0RQTExfQUJFLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5vcHMJCT0gJmNsa29wc19vbWFwNF9kcGxsbXhfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKQEAgLTYzMiw3ICs2MzUsNyBAQAogCS5jbGtzZWwJCT0gZHBsbF9jb3JlX202eDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX003X0RQTExfQ09SRSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZfTUFTSywKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDRfZHBsbG14X29wcywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCkBAIC02ODksNiArNjkyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfaXZhX3gyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsX2l2YV94Ml9jayIsCiAJLnBhcmVudAkJPSAmZHBsbF9pdmFfY2ssCisJLmZsYWdzCQk9IENMT0NLX0NMS09VVFgyLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CkBAIC03MDQsNyArNzA4LDcgQEAKIAkuY2xrc2VsCQk9IGRwbGxfaXZhX200eDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX000X0RQTExfSVZBLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0RJVl9NQVNLLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5vcHMJCT0gJmNsa29wc19vbWFwNF9kcGxsbXhfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKQEAgLTcxNiw3ICs3MjAsNyBAQAogCS5jbGtzZWwJCT0gZHBsbF9pdmFfbTR4Ml9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTVfRFBMTF9JVkEsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLApAQCAtNzY0LDcgKzc2OCw3IEBACiAJLmNsa3NlbAkJPSBkcGxsX21wdV9tMl9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9NUFUsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLApAQCAtODM3LDcgKzg0MSw3IEBACiAJLmNsa3NlbAkJPSBkcGxsX3Blcl9tMl9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9QRVIsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLApAQCAtODQ2LDggKzg1MCwxMCBAQAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGxfcGVyX3gyX2NrIiwKIAkucGFyZW50CQk9ICZkcGxsX3Blcl9jaywKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfQ0xLT1VUWDIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00yX0RQTExfUEVSLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF9wZXJfbTJ4Ml9kaXZbXSA9IHsKQEAgLTg2MSw3ICs4NjcsNyBAQAogCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJ4Ml9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9QRVIsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLApAQCAtODg3LDcgKzg5Myw3IEBACiAJLmNsa3NlbAkJPSBkcGxsX3Blcl9tMngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX1BFUiwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfTUFTSywKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDRfZHBsbG14X29wcywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCkBAIC04OTksNyArOTA1LDcgQEAKIAkuY2xrc2VsCQk9IGRwbGxfcGVyX20yeDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX001X0RQTExfUEVSLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0RJVl9NQVNLLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5vcHMJCT0gJmNsa29wc19vbWFwNF9kcGxsbXhfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKQEAgLTkxMSw3ICs5MTcsNyBAQAogCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJ4Ml9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTZfRFBMTF9QRVIsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLApAQCAtOTIzLDcgKzkyOSw3IEBACiAJLmNsa3NlbAkJPSBkcGxsX3Blcl9tMngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NN19EUExMX1BFUiwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZfTUFTSywKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDRfZHBsbG14X29wcywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCkBAIC05NjQsNiArOTcwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfdW5pcHJvX3gyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsX3VuaXByb194Ml9jayIsCiAJLnBhcmVudAkJPSAmZHBsbF91bmlwcm9fY2ssCisJLmZsYWdzCQk9IENMT0NLX0NMS09VVFgyLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CkBAIC05NzksNyArOTg2LDcgQEAKIAkuY2xrc2VsCQk9IGRwbGxfdW5pcHJvX20yeDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00yX0RQTExfVU5JUFJPLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5vcHMJCT0gJmNsa29wc19vbWFwNF9kcGxsbXhfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKQEAgLTEwMjgsNyArMTAzNSw4IEBACiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX3VzYl9jbGtkY29sZG9fY2sgPSB7CiAJLm5hbWUJCT0gImRwbGxfdXNiX2Nsa2Rjb2xkb19jayIsCiAJLnBhcmVudAkJPSAmZHBsbF91c2JfY2ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXA0X2RwbGxteF9vcHMsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9DTEtEQ09MRE9fRFBMTF9VU0IsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEwNDMsNyArMTA1MSw3IEBACiAJLmNsa3NlbAkJPSBkcGxsX3VzYl9tMl9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9VU0IsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWXzBfNl9NQVNLLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5vcHMJCT0gJmNsa29wc19vbWFwNF9kcGxsbXhfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKQEAgLTMxNTgsMTEgKzMxNjYsMTEgQEAKIAlDTEsoIm9tYXAyX21jc3BpLjIiLAkiZmNrIiwJCQkJJm1jc3BpMl9mY2ssCUNLXzQ0M1gpLAogCUNMSygib21hcDJfbWNzcGkuMyIsCSJmY2siLAkJCQkmbWNzcGkzX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwMl9tY3NwaS40IiwJImZjayIsCQkJCSZtY3NwaTRfZmNrLAlDS180NDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwJImZjayIsCQkJCSZtbWMxX2ZjaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsCSJmY2siLAkJCQkmbW1jMl9mY2ssCUNLXzQ0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiZmNrIiwJCQkJJm1tYzNfZmNrLAlDS180NDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4zIiwJImZjayIsCQkJCSZtbWM0X2ZjaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuNCIsCSJmY2siLAkJCQkmbW1jNV9mY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcF9oc21tYy4wIiwJImZjayIsCQkJCSZtbWMxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX2hzbW1jLjEiLAkiZmNrIiwJCQkJJm1tYzJfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBfaHNtbWMuMiIsCSJmY2siLAkJCQkmbW1jM19mY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcF9oc21tYy4zIiwJImZjayIsCQkJCSZtbWM0X2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX2hzbW1jLjQiLAkiZmNrIiwJCQkJJm1tYzVfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJIm9jcDJzY3BfdXNiX3BoeV9waHlfNDhtIiwJJm9jcDJzY3BfdXNiX3BoeV9waHlfNDhtLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJIm9jcDJzY3BfdXNiX3BoeV9pY2siLAkJJm9jcDJzY3BfdXNiX3BoeV9pY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkib2NwX3dwX25vY19pY2siLAkJJm9jcF93cF9ub2NfaWNrLAlDS180NDNYKSwKQEAgLTMyNDUsMTEgKzMyNTMsMTEgQEAKIAlDTEsoIm9tYXBfaTJjLjIiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBfaTJjLjMiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBfaTJjLjQiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4zIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuNCIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcF9oc21tYy4wIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX2hzbW1jLjEiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBfaHNtbWMuMiIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcF9oc21tYy4zIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX2hzbW1jLjQiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKIAlDTEsoIm9tYXAtbWNic3AuMSIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAogCUNMSygib21hcC1tY2JzcC4yIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwLW1jYnNwLjMiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKQEAgLTMzMDEsNiArMzMwOSw5IEBACiAJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwogCQl9CiAKKwkvKiBEaXNhYmxlIGF1dG9pZGxlIG9uIGFsbCBjbG9ja3M7IGxldCB0aGUgUE0gY29kZSBlbmFibGUgaXQgbGF0ZXIgKi8KKwlvbWFwX2Nsa19kaXNhYmxlX2F1dG9pZGxlX2FsbCgpOworCiAJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrX2NvbW1vbl9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrX2NvbW1vbl9kYXRhLmMKaW5kZXggMWNmODEzMS4uNjQyNGQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja19jb21tb25fZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tfY29tbW9uX2RhdGEuYwpAQCAtMzcsMyArMzcsOSBAQAogCXsgLmRpdiA9IDAgfQogfTsKIAorY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzcF9pY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IDU4ZTQyZjcuLmFiODc4NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTI2LDE3ICsyNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAotI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKLSNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgotI2luY2x1ZGUgImNtaW5zdDQ0eHguaCIKLSNpbmNsdWRlICJwcmNtNDR4eC5oIgotCiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCiAjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKLSNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAogLyogY2xrZG1fbGlzdCBjb250YWlucyBhbGwgcmVnaXN0ZXJlZCBzdHJ1Y3QgY2xvY2tkb21haW5zICovCiBzdGF0aWMgTElTVF9IRUFEKGNsa2RtX2xpc3QpOwpAQCAtNDQsNiArMzUsNyBAQAogLyogYXJyYXkgb2YgY2xvY2tkb21haW4gZGVwcyB0byBiZSBhZGRlZC9yZW1vdmVkIHdoZW4gY2xrZG0gaW4gaHdzdXAgbW9kZSAqLwogc3RhdGljIHN0cnVjdCBjbGtkbV9hdXRvZGVwICphdXRvZGVwczsKIAorc3RhdGljIHN0cnVjdCBjbGtkbV9vcHMgKmFyY2hfY2xrZG07CiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zICovCiAKQEAgLTE3NywxMSArMTY5LDExIEBACiAgKiBYWFggYXV0b2RlcHMgYXJlIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBiZSByZW1vdmVkIGF0IHRoZSBlYXJsaWVzdAogICogb3Bwb3J0dW5pdHkKICAqLwotc3RhdGljIHZvaWQgX2Nsa2RtX2FkZF9hdXRvZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQordm9pZCBfY2xrZG1fYWRkX2F1dG9kZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCiB7CiAJc3RydWN0IGNsa2RtX2F1dG9kZXAgKmF1dG9kZXA7CiAKLQlpZiAoIWF1dG9kZXBzKQorCWlmICghYXV0b2RlcHMgfHwgY2xrZG0tPmZsYWdzICYgQ0xLRE1fTk9fQVVUT0RFUFMpCiAJCXJldHVybjsKIAogCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5jbGtkbS5wdHI7IGF1dG9kZXArKykgewpAQCAtMjExLDExICsyMDMsMTEgQEAKICAqIFhYWCBhdXRvZGVwcyBhcmUgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgYXQgdGhlIGVhcmxpZXN0CiAgKiBvcHBvcnR1bml0eQogICovCi1zdGF0aWMgdm9pZCBfY2xrZG1fZGVsX2F1dG9kZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit2b2lkIF9jbGtkbV9kZWxfYXV0b2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKIAlzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcDsKIAotCWlmICghYXV0b2RlcHMpCisJaWYgKCFhdXRvZGVwcyB8fCBjbGtkbS0+ZmxhZ3MgJiBDTEtETV9OT19BVVRPREVQUykKIAkJcmV0dXJuOwogCiAJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPmNsa2RtLnB0cjsgYXV0b2RlcCsrKSB7CkBAIC0yMzUsNTUgKzIyNywyOSBAQAogfQogCiAvKioKLSAqIF9lbmFibGVfaHdzdXAgLSBwbGFjZSBhIGNsb2NrZG9tYWluIGludG8gaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlCi0gKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKiBfcmVzb2x2ZV9jbGtkbV9kZXBzKCkgLSByZXNvbHZlIGNsa2RtX25hbWVzIGluIEBjbGtkbV9kZXBzIHRvIGNsa2RtcworICogQGNsa2RtOiBjbG9ja2RvbWFpbiB0aGF0IHdlIGFyZSByZXNvbHZpbmcgZGVwZW5kZW5jaWVzIGZvcgorICogQGNsa2RtX2RlcHM6IHB0ciB0byBhcnJheSBvZiBzdHJ1Y3QgY2xrZG1fZGVwcyB0byByZXNvbHZlCiAgKgotICogUGxhY2UgdGhlIGNsb2NrZG9tYWluIGludG8gaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUuICBObyByZXR1cm4KLSAqIHZhbHVlLgotICoKLSAqIFhYWCBTaG91bGQgdGhpcyByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGNsb2NrZG9tYWluIGRvZXMgbm90IHN1cHBvcnQKLSAqIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlPwotICovCi1zdGF0aWMgdm9pZCBfZW5hYmxlX2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCi17Ci0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCQkgICAgICAgY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJb21hcDN4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQkJICAgICAgIGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCXJldHVybiBvbWFwNF9jbWluc3RfY2xrZG1fZW5hYmxlX2h3c3VwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQkJCSAgICAgICBjbGtkbS0+Y21faW5zdCwKLQkJCQkJCSAgICAgICBjbGtkbS0+Y2xrZG1fb2Zmcyk7Ci0JZWxzZQotCQlCVUcoKTsKLX0KLQotLyoqCi0gKiBfZGlzYWJsZV9od3N1cCAtIHBsYWNlIGEgY2xvY2tkb21haW4gaW50byBzb2Z0d2FyZS1zdXBlcnZpc2VkIGlkbGUKLSAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKLSAqCi0gKiBQbGFjZSB0aGUgY2xvY2tkb21haW4gQGNsa2RtIGludG8gc29mdHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUuCisgKiBJdGVyYXRlcyB0aHJvdWdoIEBjbGtkbV9kZXBzLCBsb29raW5nIHVwIHRoZSBzdHJ1Y3QgY2xvY2tkb21haW4gbmFtZWQgYnkKKyAqIGNsa2RtX25hbWUgYW5kIHN0b3JpbmcgdGhlIGNsb2NrZG9tYWluIHBvaW50ZXIgaW4gdGhlIHN0cnVjdCBjbGtkbV9kZXAuCiAgKiBObyByZXR1cm4gdmFsdWUuCi0gKgotICogWFhYIFNob3VsZCB0aGlzIHJldHVybiBhbiBlcnJvciBpZiB0aGUgY2xvY2tkb21haW4gZG9lcyBub3Qgc3VwcG9ydAotICogc29mdHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGU/CiAgKi8KLXN0YXRpYyB2b2lkIF9kaXNhYmxlX2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCitzdGF0aWMgdm9pZCBfcmVzb2x2ZV9jbGtkbV9kZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sCisJCQkJc3RydWN0IGNsa2RtX2RlcCAqY2xrZG1fZGVwcykKIHsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCW9tYXAyeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCQkJY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJb21hcDN4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJCQljbGtkbS0+Y2xrdHJjdHJsX21hc2spOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQlyZXR1cm4gb21hcDRfY21pbnN0X2Nsa2RtX2Rpc2FibGVfaHdzdXAoY2xrZG0tPnByY21fcGFydGl0aW9uLAotCQkJCQkJCWNsa2RtLT5jbV9pbnN0LAotCQkJCQkJCWNsa2RtLT5jbGtkbV9vZmZzKTsKLQllbHNlCi0JCUJVRygpOworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJZm9yIChjZCA9IGNsa2RtX2RlcHM7IGNkICYmIGNkLT5jbGtkbV9uYW1lOyBjZCsrKSB7CisJCWlmICghb21hcF9jaGlwX2lzKGNkLT5vbWFwX2NoaXApKQorCQkJY29udGludWU7CisJCWlmIChjZC0+Y2xrZG0pCisJCQljb250aW51ZTsKKwkJY2QtPmNsa2RtID0gX2Nsa2RtX2xvb2t1cChjZC0+Y2xrZG1fbmFtZSk7CisKKwkJV0FSTighY2QtPmNsa2RtLCAiY2xvY2tkb21haW46ICVzOiBjb3VsZCBub3QgZmluZCBjbGtkbSAlcyB3aGlsZSByZXNvbHZpbmcgZGVwZW5kZW5jaWVzIC0gc2hvdWxkIG5ldmVyIGhhcHBlbiIsCisJCSAgICAgY2xrZG0tPm5hbWUsIGNkLT5jbGtkbV9uYW1lKTsKKwl9CiB9CiAKIC8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KQEAgLTI5Miw2ICsyNTgsNyBAQAogICogY2xrZG1faW5pdCAtIHNldCB1cCB0aGUgY2xvY2tkb21haW4gbGF5ZXIKICAqIEBjbGtkbXM6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW5zIHRvIHJlZ2lzdGVyCiAgKiBAaW5pdF9hdXRvZGVwczogb3B0aW9uYWwgcG9pbnRlciB0byBhbiBhcnJheSBvZiBhdXRvZGVwcyB0byByZWdpc3RlcgorICogQGN1c3RvbV9mdW5jczogZnVuYyBwb2ludGVycyBmb3IgYXJjaCBzcGVjZmljIGltcGxlbWVudGF0aW9ucwogICoKICAqIFNldCB1cCBpbnRlcm5hbCBzdGF0ZS4gIElmIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbnMKICAqIEBjbGtkbXMgd2FzIHN1cHBsaWVkLCBsb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgY2xvY2tkb21haW5zLApAQCAtMzAwLDEyICsyNjcsMTggQEAKICAqIEBpbml0X2F1dG9kZXBzIHdhcyBwcm92aWRlZCwgcmVnaXN0ZXIgdGhvc2UuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KIHZvaWQgY2xrZG1faW5pdChzdHJ1Y3QgY2xvY2tkb21haW4gKipjbGtkbXMsCi0JCXN0cnVjdCBjbGtkbV9hdXRvZGVwICppbml0X2F1dG9kZXBzKQorCQlzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqaW5pdF9hdXRvZGVwcywKKwkJc3RydWN0IGNsa2RtX29wcyAqY3VzdG9tX2Z1bmNzKQogewogCXN0cnVjdCBjbG9ja2RvbWFpbiAqKmMgPSBOVUxMOwogCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG07CiAJc3RydWN0IGNsa2RtX2F1dG9kZXAgKmF1dG9kZXAgPSBOVUxMOwogCisJaWYgKCFjdXN0b21fZnVuY3MpCisJCVdBUk4oMSwgIk5vIGN1c3RvbSBjbGtkbSBmdW5jdGlvbnMgcmVnaXN0ZXJlZFxuIik7CisJZWxzZQorCQlhcmNoX2Nsa2RtID0gY3VzdG9tX2Z1bmNzOworCiAJaWYgKGNsa2RtcykKIAkJZm9yIChjID0gY2xrZG1zOyAqYzsgYysrKQogCQkJX2Nsa2RtX3JlZ2lzdGVyKCpjKTsKQEAgLTMyMSwxMSArMjk0LDE0IEBACiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtkbSwgJmNsa2RtX2xpc3QsIG5vZGUpIHsKIAkJaWYgKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9GT1JDRV9XQUtFVVApCi0JCQlvbWFwMl9jbGtkbV93YWtldXAoY2xrZG0pOworCQkJY2xrZG1fd2FrZXVwKGNsa2RtKTsKIAkJZWxzZSBpZiAoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0RJU0FCTEVfQVVUTykKLQkJCW9tYXAyX2Nsa2RtX2RlbnlfaWRsZShjbGtkbSk7CisJCQljbGtkbV9kZW55X2lkbGUoY2xrZG0pOwogCisJCV9yZXNvbHZlX2Nsa2RtX2RlcHMoY2xrZG0sIGNsa2RtLT53a2RlcF9zcmNzKTsKIAkJY2xrZG1fY2xlYXJfYWxsX3drZGVwcyhjbGtkbSk7CisKKwkJX3Jlc29sdmVfY2xrZG1fZGVwcyhjbGtkbSwgY2xrZG0tPnNsZWVwZGVwX3NyY3MpOwogCQljbGtkbV9jbGVhcl9hbGxfc2xlZXBkZXBzKGNsa2RtKTsKIAl9CiB9CkBAIC00MjIsMzIgKzM5OCwzMiBAQAogaW50IGNsa2RtX2FkZF93a2RlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpCiB7CiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7Ci0KLQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgewotCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlcy8lczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCi0JCSAgICAgICBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNkID0gX2Nsa2RtX2RlcHNfbG9va3VwKGNsa2RtMiwgY2xrZG0xLT53a2RlcF9zcmNzKTsKLQlpZiAoSVNfRVJSKGNkKSkgeworCWlmIChJU19FUlIoY2QpKQorCQlyZXQgPSBQVFJfRVJSKGNkKTsKKworCWlmICghYXJjaF9jbGtkbSB8fCAhYXJjaF9jbGtkbS0+Y2xrZG1fYWRkX3drZGVwKQorCQlyZXQgPSAtRUlOVkFMOworCisJaWYgKHJldCkgewogCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCiAJCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIoY2QpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmY2QtPndrZGVwX3VzZWNvdW50KSA9PSAxKSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgd2lsbCB3YWtlIHVwICVzIHdoZW4gJXMgd2FrZXMgIgogCQkJICJ1cFxuIiwgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUpOwogCi0JCW9tYXAyX3BybV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IGNsa2RtMi0+ZGVwX2JpdCksCi0JCQkJICAgICBjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CisJCXJldCA9IGFyY2hfY2xrZG0tPmNsa2RtX2FkZF93a2RlcChjbGtkbTEsIGNsa2RtMik7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC00NjMsMzIgKzQzOSwzMiBAQAogaW50IGNsa2RtX2RlbF93a2RlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpCiB7CiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7Ci0KLQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgewotCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlcy8lczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCi0JCSAgICAgICBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNkID0gX2Nsa2RtX2RlcHNfbG9va3VwKGNsa2RtMiwgY2xrZG0xLT53a2RlcF9zcmNzKTsKLQlpZiAoSVNfRVJSKGNkKSkgeworCWlmIChJU19FUlIoY2QpKQorCQlyZXQgPSBQVFJfRVJSKGNkKTsKKworCWlmICghYXJjaF9jbGtkbSB8fCAhYXJjaF9jbGtkbS0+Y2xrZG1fZGVsX3drZGVwKQorCQlyZXQgPSAtRUlOVkFMOworCisJaWYgKHJldCkgewogCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCiAJCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIoY2QpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChhdG9taWNfZGVjX3JldHVybigmY2QtPndrZGVwX3VzZWNvdW50KSA9PSAwKSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgd2lsbCBubyBsb25nZXIgd2FrZSB1cCAlcyAiCiAJCQkgImFmdGVyICVzIHdha2VzIHVwXG4iLCBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSk7CiAKLQkJb21hcDJfcHJtX2NsZWFyX21vZF9yZWdfYml0cygoMSA8PCBjbGtkbTItPmRlcF9iaXQpLAotCQkJCSAgICAgICBjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CisJCXJldCA9IGFyY2hfY2xrZG0tPmNsa2RtX2RlbF93a2RlcChjbGtkbTEsIGNsa2RtMik7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01MDgsMjYgKzQ4NCwyNiBAQAogaW50IGNsa2RtX3JlYWRfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQogewogCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCWludCByZXQgPSAwOwogCiAJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgewotCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlcy8lczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCi0JCSAgICAgICBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAljZCA9IF9jbGtkbV9kZXBzX2xvb2t1cChjbGtkbTIsIGNsa2RtMS0+d2tkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihjZCkpIHsKKwlpZiAoSVNfRVJSKGNkKSkKKwkJcmV0ID0gUFRSX0VSUihjZCk7CisKKwlpZiAoIWFyY2hfY2xrZG0gfHwgIWFyY2hfY2xrZG0tPmNsa2RtX3JlYWRfd2tkZXApCisJCXJldCA9IC1FSU5WQUw7CisKKwlpZiAocmV0KSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKIAkJCSAiJXMgd2hlbiAlcyB3YWtlcyB1cFxuIiwgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihjZCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogWFhYIEl0J3MgZmFzdGVyIHRvIHJldHVybiB0aGUgYXRvbWljIHdrZGVwX3VzZWNvdW50ICovCi0JcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KGNsa2RtMS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1dLREVQLAotCQkJCSAgICAgICAoMSA8PCBjbGtkbTItPmRlcF9iaXQpKTsKKwlyZXR1cm4gYXJjaF9jbGtkbS0+Y2xrZG1fcmVhZF93a2RlcChjbGtkbTEsIGNsa2RtMik7CiB9CiAKIC8qKgpAQCAtNTQyLDMzICs1MTgsMTMgQEAKICAqLwogaW50IGNsa2RtX2NsZWFyX2FsbF93a2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKLQl1MzIgbWFzayA9IDA7Ci0KLQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgewotCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCi0JCSAgICAgICBjbGtkbS0+bmFtZSwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAoIWNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoY2QgPSBjbGtkbS0+d2tkZXBfc3JjczsgY2QgJiYgY2QtPmNsa2RtX25hbWU7IGNkKyspIHsKLQkJaWYgKCFvbWFwX2NoaXBfaXMoY2QtPm9tYXBfY2hpcCkpCi0JCQljb250aW51ZTsKKwlpZiAoIWFyY2hfY2xrZG0gfHwgIWFyY2hfY2xrZG0tPmNsa2RtX2NsZWFyX2FsbF93a2RlcHMpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmICghY2QtPmNsa2RtICYmIGNkLT5jbGtkbV9uYW1lKQotCQkJY2QtPmNsa2RtID0gX2Nsa2RtX2xvb2t1cChjZC0+Y2xrZG1fbmFtZSk7Ci0KLQkJLyogUFJNIGFjY2Vzc2VzIGFyZSBzbG93LCBzbyBtaW5pbWl6ZSB0aGVtICovCi0JCW1hc2sgfD0gMSA8PCBjZC0+Y2xrZG0tPmRlcF9iaXQ7Ci0JCWF0b21pY19zZXQoJmNkLT53a2RlcF91c2Vjb3VudCwgMCk7Ci0JfQotCi0Jb21hcDJfcHJtX2NsZWFyX21vZF9yZWdfYml0cyhtYXNrLCBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1dLREVQKTsKLQotCXJldHVybiAwOworCXJldHVybiBhcmNoX2Nsa2RtLT5jbGtkbV9jbGVhcl9hbGxfd2tkZXBzKGNsa2RtKTsKIH0KIAogLyoqCkBAIC01ODYsMzEgKzU0MiwzMyBAQAogaW50IGNsa2RtX2FkZF9zbGVlcGRlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpCiB7CiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7Ci0KLQlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2QgPSBfY2xrZG1fZGVwc19sb29rdXAoY2xrZG0yLCBjbGtkbTEtPnNsZWVwZGVwX3NyY3MpOwotCWlmIChJU19FUlIoY2QpKSB7CisJaWYgKElTX0VSUihjZCkpCisJCXJldCA9IFBUUl9FUlIoY2QpOworCisJaWYgKCFhcmNoX2Nsa2RtIHx8ICFhcmNoX2Nsa2RtLT5jbGtkbV9hZGRfc2xlZXBkZXApCisJCXJldCA9IC1FSU5WQUw7CisKKwlpZiAocmV0KSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciBzbGVlcCAiCiAJCQkgImRlcGVuZGVuY3kgYWZmZWN0aW5nICVzIGZyb20gJXNcbiIsIGNsa2RtMS0+bmFtZSwKIAkJCSBjbGtkbTItPm5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihjZCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjZC0+c2xlZXBkZXBfdXNlY291bnQpID09IDEpIHsKIAkJcHJfZGVidWcoImNsb2NrZG9tYWluOiB3aWxsIHByZXZlbnQgJXMgZnJvbSBzbGVlcGluZyBpZiAlcyAiCiAJCQkgImlzIGFjdGl2ZVxuIiwgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUpOwogCi0JCW9tYXAyX2NtX3NldF9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKLQkJCQkgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQkgICAgT01BUDM0MzBfQ01fU0xFRVBERVApOworCQlyZXQgPSBhcmNoX2Nsa2RtLT5jbGtkbV9hZGRfc2xlZXBkZXAoY2xrZG0xLCBjbGtkbTIpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNjI4LDE5ICs1ODYsMjMgQEAKIGludCBjbGtkbV9kZWxfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQogewogCXN0cnVjdCBjbGtkbV9kZXAgKmNkOwotCi0JaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNkID0gX2Nsa2RtX2RlcHNfbG9va3VwKGNsa2RtMiwgY2xrZG0xLT5zbGVlcGRlcF9zcmNzKTsKLQlpZiAoSVNfRVJSKGNkKSkgeworCWlmIChJU19FUlIoY2QpKQorCQlyZXQgPSBQVFJfRVJSKGNkKTsKKworCWlmICghYXJjaF9jbGtkbSB8fCAhYXJjaF9jbGtkbS0+Y2xrZG1fZGVsX3NsZWVwZGVwKQorCQlyZXQgPSAtRUlOVkFMOworCisJaWYgKHJldCkgewogCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgogCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBjbGtkbTEtPm5hbWUsCiAJCQkgY2xrZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIoY2QpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChhdG9taWNfZGVjX3JldHVybigmY2QtPnNsZWVwZGVwX3VzZWNvdW50KSA9PSAwKSB7CkBAIC02NDgsMTIgKzYxMCwxMCBAQAogCQkJICJzbGVlcGluZyBpZiAlcyBpcyBhY3RpdmVcbiIsIGNsa2RtMS0+bmFtZSwKIAkJCSBjbGtkbTItPm5hbWUpOwogCi0JCW9tYXAyX2NtX2NsZWFyX21vZF9yZWdfYml0cygoMSA8PCBjbGtkbTItPmRlcF9iaXQpLAotCQkJCSAgICAgIGNsa2RtMS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJICAgICAgT01BUDM0MzBfQ01fU0xFRVBERVApOworCQlyZXQgPSBhcmNoX2Nsa2RtLT5jbGtkbV9kZWxfc2xlZXBkZXAoY2xrZG0xLCBjbGtkbTIpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNjc1LDI1ICs2MzUsMjcgQEAKIGludCBjbGtkbV9yZWFkX3NsZWVwZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMikKIHsKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKLQotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCi0JCXJldHVybiAtRUlOVkFMOworCWludCByZXQgPSAwOwogCiAJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljZCA9IF9jbGtkbV9kZXBzX2xvb2t1cChjbGtkbTIsIGNsa2RtMS0+c2xlZXBkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihjZCkpIHsKKwlpZiAoSVNfRVJSKGNkKSkKKwkJcmV0ID0gUFRSX0VSUihjZCk7CisKKwlpZiAoIWFyY2hfY2xrZG0gfHwgIWFyY2hfY2xrZG0tPmNsa2RtX3JlYWRfc2xlZXBkZXApCisJCXJldCA9IC1FSU5WQUw7CisKKwlpZiAocmV0KSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciBzbGVlcCAiCiAJCQkgImRlcGVuZGVuY3kgYWZmZWN0aW5nICVzIGZyb20gJXNcbiIsIGNsa2RtMS0+bmFtZSwKIAkJCSBjbGtkbTItPm5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihjZCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogWFhYIEl0J3MgZmFzdGVyIHRvIHJldHVybiB0aGUgYXRvbWljIHNsZWVwZGVwX3VzZWNvdW50ICovCi0JcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KGNsa2RtMS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJICAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQLAotCQkJCSAgICAgICAoMSA8PCBjbGtkbTItPmRlcF9iaXQpKTsKKwlyZXR1cm4gYXJjaF9jbGtkbS0+Y2xrZG1fcmVhZF9zbGVlcGRlcChjbGtkbTEsIGNsa2RtMik7CiB9CiAKIC8qKgpAQCAtNzA4LDM1ICs2NzAsMTcgQEAKICAqLwogaW50IGNsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKLQl1MzIgbWFzayA9IDA7Ci0KLQlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChjZCA9IGNsa2RtLT5zbGVlcGRlcF9zcmNzOyBjZCAmJiBjZC0+Y2xrZG1fbmFtZTsgY2QrKykgewotCQlpZiAoIW9tYXBfY2hpcF9pcyhjZC0+b21hcF9jaGlwKSkKLQkJCWNvbnRpbnVlOworCWlmICghYXJjaF9jbGtkbSB8fCAhYXJjaF9jbGtkbS0+Y2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwcykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKCFjZC0+Y2xrZG0gJiYgY2QtPmNsa2RtX25hbWUpCi0JCQljZC0+Y2xrZG0gPSBfY2xrZG1fbG9va3VwKGNkLT5jbGtkbV9uYW1lKTsKLQotCQkvKiBQUk0gYWNjZXNzZXMgYXJlIHNsb3csIHNvIG1pbmltaXplIHRoZW0gKi8KLQkJbWFzayB8PSAxIDw8IGNkLT5jbGtkbS0+ZGVwX2JpdDsKLQkJYXRvbWljX3NldCgmY2QtPnNsZWVwZGVwX3VzZWNvdW50LCAwKTsKLQl9Ci0KLQlvbWFwMl9wcm1fY2xlYXJfbW9kX3JlZ19iaXRzKG1hc2ssIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCSAgICAgICBPTUFQMzQzMF9DTV9TTEVFUERFUCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYXJjaF9jbGtkbS0+Y2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwcyhjbGtkbSk7CiB9CiAKIC8qKgotICogb21hcDJfY2xrZG1fc2xlZXAgLSBmb3JjZSBjbG9ja2RvbWFpbiBzbGVlcCB0cmFuc2l0aW9uCisgKiBjbGtkbV9zbGVlcCAtIGZvcmNlIGNsb2NrZG9tYWluIHNsZWVwIHRyYW5zaXRpb24KICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqCiAgKiBJbnN0cnVjdCB0aGUgQ00gdG8gZm9yY2UgYSBzbGVlcCB0cmFuc2l0aW9uIG9uIHRoZSBzcGVjaWZpZWQKQEAgLTc0NCw3ICs2ODgsNyBAQAogICogY2xvY2tkb21haW4gZG9lcyBub3Qgc3VwcG9ydCBzb2Z0d2FyZS1pbml0aWF0ZWQgc2xlZXA7IDAgdXBvbgogICogc3VjY2Vzcy4KICAqLwotaW50IG9tYXAyX2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCitpbnQgY2xrZG1fc2xlZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKIAlpZiAoIWNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc1NSwzMyArNjk5LDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICghYXJjaF9jbGtkbSB8fCAhYXJjaF9jbGtkbS0+Y2xrZG1fc2xlZXApCisJCXJldHVybiAtRUlOVkFMOworCiAJcHJfZGVidWcoImNsb2NrZG9tYWluOiBmb3JjaW5nIHNsZWVwIG9uICVzXG4iLCBjbGtkbS0+bmFtZSk7CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQotCQlvbWFwMl9jbV9zZXRfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEVfTUFTSywKLQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIE9NQVAyX1BNX1BXU1RDVFJMKTsKLQotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQotCQlvbWFwM3h4eF9jbV9jbGtkbV9mb3JjZV9zbGVlcChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJCSAgICAgIGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7Ci0KLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0KLQkJb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3NsZWVwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQkJICAgICAgIGNsa2RtLT5jbV9pbnN0LAotCQkJCQkgICAgICAgY2xrZG0tPmNsa2RtX29mZnMpOwotCi0JfSBlbHNlIHsKLQkJQlVHKCk7Ci0JfTsKLQotCXJldHVybiAwOworCXJldHVybiBhcmNoX2Nsa2RtLT5jbGtkbV9zbGVlcChjbGtkbSk7CiB9CiAKIC8qKgotICogb21hcDJfY2xrZG1fd2FrZXVwIC0gZm9yY2UgY2xvY2tkb21haW4gd2FrZXVwIHRyYW5zaXRpb24KKyAqIGNsa2RtX3dha2V1cCAtIGZvcmNlIGNsb2NrZG9tYWluIHdha2V1cCB0cmFuc2l0aW9uCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCiAgKgogICogSW5zdHJ1Y3QgdGhlIENNIHRvIGZvcmNlIGEgd2FrZXVwIHRyYW5zaXRpb24gb24gdGhlIHNwZWNpZmllZApAQCAtNzg5LDcgKzcxNiw3IEBACiAgKiBjbG9ja2RvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbnRyb2xsZWQgd2FrZXVwOyAwIHVwb24KICAqIHN1Y2Nlc3MuCiAgKi8KLWludCBvbWFwMl9jbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK2ludCBjbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKIAlpZiAoIWNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwMCwzMyArNzI3LDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICghYXJjaF9jbGtkbSB8fCAhYXJjaF9jbGtkbS0+Y2xrZG1fd2FrZXVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZm9yY2luZyB3YWtldXAgb24gJXNcbiIsIGNsa2RtLT5uYW1lKTsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCi0JCW9tYXAyX2NtX2NsZWFyX21vZF9yZWdfYml0cyhPTUFQMjRYWF9GT1JDRVNUQVRFX01BU0ssCi0JCQkgICAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIE9NQVAyX1BNX1BXU1RDVFJMKTsKLQotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQotCQlvbWFwM3h4eF9jbV9jbGtkbV9mb3JjZV93YWtldXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCQkgICAgICAgY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKLQotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQotCQlvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfd2FrZXVwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQkJCWNsa2RtLT5jbV9pbnN0LAotCQkJCQkJY2xrZG0tPmNsa2RtX29mZnMpOwotCi0JfSBlbHNlIHsKLQkJQlVHKCk7Ci0JfTsKLQotCXJldHVybiAwOworCXJldHVybiBhcmNoX2Nsa2RtLT5jbGtkbV93YWtldXAoY2xrZG0pOwogfQogCiAvKioKLSAqIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUgLSBlbmFibGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0KKyAqIGNsa2RtX2FsbG93X2lkbGUgLSBlbmFibGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0KICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqCiAgKiBBbGxvdyB0aGUgaGFyZHdhcmUgdG8gYXV0b21hdGljYWxseSBzd2l0Y2ggdGhlIGNsb2NrZG9tYWluIEBjbGtkbSBpbnRvCkBAIC04MzUsNyArNzQ1LDcgQEAKICAqIGZyYW1ld29yaywgd2tkZXAvc2xlZXBkZXAgYXV0b2RlcGVuZGVuY2llcyBhcmUgYWRkZWQ7IHRoaXMgaXMgc28KICAqIGRldmljZSBkcml2ZXJzIGNhbiByZWFkIGFuZCB3cml0ZSB0byB0aGUgZGV2aWNlLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3ZvaWQgY2xrZG1fYWxsb3dfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewogCWlmICghY2xrZG0pCiAJCXJldHVybjsKQEAgLTg0NiwyNyArNzU2LDE4IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoIWFyY2hfY2xrZG0gfHwgIWFyY2hfY2xrZG0tPmNsa2RtX2FsbG93X2lkbGUpCisJCXJldHVybjsKKwogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZW5hYmxpbmcgYXV0b21hdGljIGlkbGUgdHJhbnNpdGlvbnMgZm9yICVzXG4iLAogCQkgY2xrZG0tPm5hbWUpOwogCi0JLyoKLQkgKiBYWFggVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIFRJIGFkZHMgd2FrZXVwL3NsZWVwCi0JICogZGVwZW5kZW5jeSBjb2RlIGFuZCBkYXRhIGZvciBPTUFQNC4KLQkgKi8KLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXM6IE9NQVA0IHdha2V1cC9zbGVlcCBkZXBlbmRlbmN5IHN1cHBvcnQ6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIGNsa2RtLT5uYW1lKTsKLQl9IGVsc2UgewotCQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQotCQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7Ci0JfQotCi0JX2VuYWJsZV9od3N1cChjbGtkbSk7Ci0KKwlhcmNoX2Nsa2RtLT5jbGtkbV9hbGxvd19pZGxlKGNsa2RtKTsKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwogfQogCiAvKioKLSAqIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZSAtIGRpc2FibGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0KKyAqIGNsa2RtX2RlbnlfaWRsZSAtIGRpc2FibGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0KICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqCiAgKiBQcmV2ZW50IHRoZSBoYXJkd2FyZSBmcm9tIGF1dG9tYXRpY2FsbHkgc3dpdGNoaW5nIHRoZSBjbG9ja2RvbWFpbgpAQCAtODc0LDcgKzc3NSw3IEBACiAgKiBkb3duc3RyZWFtIGNsb2NrcyBlbmFibGVkIGluIHRoZSBjbG9jayBmcmFtZXdvcmssIHdrZGVwL3NsZWVwZGVwCiAgKiBhdXRvZGVwZW5kZW5jaWVzIGFyZSByZW1vdmVkLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQordm9pZCBjbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKIAlpZiAoIWNsa2RtKQogCQlyZXR1cm47CkBAIC04ODUsMjggKzc4NiwyMCBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKCFhcmNoX2Nsa2RtIHx8ICFhcmNoX2Nsa2RtLT5jbGtkbV9kZW55X2lkbGUpCisJCXJldHVybjsKKwogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZGlzYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKIAkJIGNsa2RtLT5uYW1lKTsKIAotCV9kaXNhYmxlX2h3c3VwKGNsa2RtKTsKLQotCS8qCi0JICogWFhYIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBUSSBhZGRzIHdha2V1cC9zbGVlcAotCSAqIGRlcGVuZGVuY3kgY29kZSBhbmQgZGF0YSBmb3IgT01BUDQuCi0JICovCi0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCXByX2VycigiY2xvY2tkb21haW46ICVzOiBPTUFQNCB3YWtldXAvc2xlZXAgZGVwZW5kZW5jeSBzdXBwb3J0OiBub3QgeWV0IGltcGxlbWVudGVkXG4iLCBjbGtkbS0+bmFtZSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKLQkJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOwotCX0KKwlhcmNoX2Nsa2RtLT5jbGtkbV9kZW55X2lkbGUoY2xrZG0pOwogfQogCiAKIC8qIENsb2NrZG9tYWluLXRvLWNsb2NrIGZyYW1ld29yayBpbnRlcmZhY2UgY29kZSAqLwogCiAvKioKLSAqIG9tYXAyX2Nsa2RtX2Nsa19lbmFibGUgLSBhZGQgYW4gZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrIHRvIHRoaXMgY2xrZG0KKyAqIGNsa2RtX2Nsa19lbmFibGUgLSBhZGQgYW4gZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrIHRvIHRoaXMgY2xrZG0KICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrCiAgKgpAQCAtOTE5LDEwICs4MTIsOCBAQAogICogYnkgb24tY2hpcCBwcm9jZXNzb3JzLiAgUmV0dXJucyAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOwogICogcmV0dXJucyAwIHVwb24gc3VjY2VzcyBvciBpZiB0aGUgY2xvY2tkb21haW4gaXMgaW4gaHdzdXAgaWRsZSBtb2RlLgogICovCi1pbnQgb21hcDJfY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCitpbnQgY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JYm9vbCBod3N1cCA9IGZhbHNlOwotCiAJLyoKIAkgKiBYWFggUmV3cml0ZSB0aGlzIGNvZGUgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGVuYWJsZWQKIAkgKiBkb3duc3RyZWFtIGNsb2NrcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzPwpAQCAtOTMxLDYgKzgyMiw5IEBACiAJaWYgKCFjbGtkbSB8fCAhY2xrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghYXJjaF9jbGtkbSB8fCAhYXJjaF9jbGtkbS0+Y2xrZG1fY2xrX2VuYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJmNsa2RtLT51c2Vjb3VudCkgPiAxKQogCQlyZXR1cm4gMDsKIApAQCAtOTM5LDMxICs4MzMsNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG0gJXM6IGNsayAlcyBub3cgZW5hYmxlZFxuIiwgY2xrZG0tPm5hbWUsCiAJCSBjbGstPm5hbWUpOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0KLQkJaWYgKCFjbGtkbS0+Y2xrdHJjdHJsX21hc2spCi0JCQlyZXR1cm4gMDsKLQotCQlod3N1cCA9IG9tYXAyX2NtX2lzX2Nsa2RtX2luX2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQkJCSAgIGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7Ci0KLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0KLQkJaHdzdXAgPSBvbWFwNF9jbWluc3RfaXNfY2xrZG1faW5faHdzdXAoY2xrZG0tPnByY21fcGFydGl0aW9uLAotCQkJCQkJICAgICAgIGNsa2RtLT5jbV9pbnN0LAotCQkJCQkJICAgICAgIGNsa2RtLT5jbGtkbV9vZmZzKTsKLQotCX0KLQotCWlmIChod3N1cCkgewotCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KLQkJX2Rpc2FibGVfaHdzdXAoY2xrZG0pOwotCQlfY2xrZG1fYWRkX2F1dG9kZXBzKGNsa2RtKTsKLQkJX2VuYWJsZV9od3N1cChjbGtkbSk7Ci0JfSBlbHNlIHsKLQkJb21hcDJfY2xrZG1fd2FrZXVwKGNsa2RtKTsKLQl9Ci0KKwlhcmNoX2Nsa2RtLT5jbGtkbV9jbGtfZW5hYmxlKGNsa2RtKTsKIAlwd3JkbV93YWl0X3RyYW5zaXRpb24oY2xrZG0tPnB3cmRtLnB0cik7CiAJcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsa2RtKTsKIApAQCAtOTcxLDcgKzg0MSw3IEBACiB9CiAKIC8qKgotICogb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUgLSByZW1vdmUgYW4gZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrIGZyb20gdGhpcyBjbGtkbQorICogY2xrZG1fY2xrX2Rpc2FibGUgLSByZW1vdmUgYW4gZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrIGZyb20gdGhpcyBjbGtkbQogICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgogICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBkaXNhYmxlZCBkb3duc3RyZWFtIGNsb2NrCiAgKgpAQCAtOTg0LDEwICs4NTQsOCBAQAogICogaXMgZW5hYmxlZDsgb3IgcmV0dXJucyAwIHVwb24gc3VjY2VzcyBvciBpZiB0aGUgY2xvY2tkb21haW4gaXMgaW4KICAqIGh3c3VwIGlkbGUgbW9kZS4KICAqLwotaW50IG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsaykKK2ludCBjbGtkbV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JYm9vbCBod3N1cCA9IGZhbHNlOwotCiAJLyoKIAkgKiBYWFggUmV3cml0ZSB0aGlzIGNvZGUgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGVuYWJsZWQKIAkgKiBkb3duc3RyZWFtIGNsb2NrcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzPwpAQCAtOTk2LDYgKzg2NCw5IEBACiAJaWYgKCFjbGtkbSB8fCAhY2xrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghYXJjaF9jbGtkbSB8fCAhYXJjaF9jbGtkbS0+Y2xrZG1fY2xrX2Rpc2FibGUpCisJCXJldHVybiAtRUlOVkFMOworCiAjaWZkZWYgREVCVUcKIAlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPT0gMCkgewogCQlXQVJOX09OKDEpOyAvKiB1bmRlcmZsb3cgKi8KQEAgLTEwMTEsMzEgKzg4Miw3IEBACiAJcHJfZGVidWcoImNsb2NrZG9tYWluOiBjbGtkbSAlczogY2xrICVzIG5vdyBkaXNhYmxlZFxuIiwgY2xrZG0tPm5hbWUsCiAJCSBjbGstPm5hbWUpOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0KLQkJaWYgKCFjbGtkbS0+Y2xrdHJjdHJsX21hc2spCi0JCQlyZXR1cm4gMDsKLQotCQlod3N1cCA9IG9tYXAyX2NtX2lzX2Nsa2RtX2luX2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQkJCSAgIGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7Ci0KLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0KLQkJaHdzdXAgPSBvbWFwNF9jbWluc3RfaXNfY2xrZG1faW5faHdzdXAoY2xrZG0tPnByY21fcGFydGl0aW9uLAotCQkJCQkJICAgICAgIGNsa2RtLT5jbV9pbnN0LAotCQkJCQkJICAgICAgIGNsa2RtLT5jbGtkbV9vZmZzKTsKLQotCX0KLQotCWlmIChod3N1cCkgewotCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KLQkJX2Rpc2FibGVfaHdzdXAoY2xrZG0pOwotCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKLQkJX2VuYWJsZV9od3N1cChjbGtkbSk7Ci0JfSBlbHNlIHsKLQkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOwotCX0KLQorCWFyY2hfY2xrZG0tPmNsa2RtX2Nsa19kaXNhYmxlKGNsa2RtKTsKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmgKaW5kZXggOWI0NTljMi4uODViM2RjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaApAQCAtNCw3ICs0LDcgQEAKICAqIE9NQVAyLzMgY2xvY2tkb21haW4gZnJhbWV3b3JrIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogUGF1bCBXYWxtc2xleQogICoKQEAgLTIyLDExICsyMiwxOSBAQAogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCi0vKiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzICovCisvKgorICogQ2xvY2tkb21haW4gZmxhZ3MKKyAqCisgKiBYWFggRG9jdW1lbnQgQ0xLRE1fQ0FOXyogZmxhZ3MKKyAqCisgKiBDTEtETV9OT19BVVRPREVQUzogUHJldmVudCAiYXV0b2RlcHMiIGZyb20gYmVpbmcgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoaXMKKyAqICAgICBjbG9ja2RvbWFpbi4gIChDdXJyZW50bHksIHRoaXMgYXBwbGllcyB0byBPTUFQMyBjbG9ja2RvbWFpbnMgb25seS4pCisgKi8KICNkZWZpbmUgQ0xLRE1fQ0FOX0ZPUkNFX1NMRUVQCQkJKDEgPDwgMCkKICNkZWZpbmUgQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUAkJCSgxIDw8IDEpCiAjZGVmaW5lIENMS0RNX0NBTl9FTkFCTEVfQVVUTwkJCSgxIDw8IDIpCiAjZGVmaW5lIENMS0RNX0NBTl9ESVNBQkxFX0FVVE8JCQkoMSA8PCAzKQorI2RlZmluZSBDTEtETV9OT19BVVRPREVQUwkJCSgxIDw8IDQpCiAKICNkZWZpbmUgQ0xLRE1fQ0FOX0hXU1VQCQkoQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPIHwgQ0xLRE1fQ0FOX0RJU0FCTEVfQVVUTykKICNkZWZpbmUgQ0xLRE1fQ0FOX1NXU1VQCQkoQ0xLRE1fQ0FOX0ZPUkNFX1NMRUVQIHwgQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCkKQEAgLTExNiw3ICsxMjQsNDIgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiB9OwogCi12b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLCBzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcHMpOworLyoqCisgKiBzdHJ1Y3QgY2xrZG1fb3BzIC0gQXJjaCBzcGVjZmljIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucworICogQGNsa2RtX2FkZF93a2RlcDogQWRkIGEgd2FrZXVwIGRlcGVuZGVuY3kgYmV0d2VlbiBjbGsgZG9tYWlucworICogQGNsa2RtX2RlbF93a2RlcDogRGVsZXRlIGEgd2FrZXVwIGRlcGVuZGVuY3kgYmV0d2VlbiBjbGsgZG9tYWlucworICogQGNsa2RtX3JlYWRfd2tkZXA6IFJlYWQgd2FrZXVwIGRlcGVuZGVuY3kgc3RhdGUgYmV0d2VlbiBjbGsgZG9tYWlucworICogQGNsa2RtX2NsZWFyX2FsbF93a2RlcHM6IFJlbW92ZSBhbGwgd2FrZXVwIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBjbGsgZG9tYWluCisgKiBAY2xrZG1fYWRkX3NsZWVwZGVwOiBBZGQgYSBzbGVlcCBkZXBlbmRlbmN5IGJldHdlZW4gY2xrIGRvbWFpbnMKKyAqIEBjbGtkbV9kZWxfc2xlZXBkZXA6IERlbGV0ZSBhIHNsZWVwIGRlcGVuZGVuY3kgYmV0d2VlbiBjbGsgZG9tYWlucworICogQGNsa2RtX3JlYWRfc2xlZXBkZXA6IFJlYWQgc2xlZXAgZGVwZW5kZW5jeSBzdGF0ZSBiZXR3ZWVuIGNsayBkb21haW5zCisgKiBAY2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwczogUmVtb3ZlIGFsbCBzbGVlcCBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgY2xrIGRvbWFpbgorICogQGNsa2RtX3NsZWVwOiBGb3JjZSBhIGNsb2NrZG9tYWluIHRvIHNsZWVwCisgKiBAY2xrZG1fd2FrZXVwOiBGb3JjZSBhIGNsb2NrZG9tYWluIHRvIHdha2V1cAorICogQGNsa2RtX2FsbG93X2lkbGU6IEVuYWJsZSBodyBzdXBlcnZpc2VkIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsb2NrIGRvbWFpbgorICogQGNsa2RtX2RlbnlfaWRsZTogRGlzYWJsZSBodyBzdXBlcnZpc2VkIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsb2NrIGRvbWFpbgorICogQGNsa2RtX2Nsa19lbmFibGU6IFB1dCB0aGUgY2xrZG0gaW4gcmlnaHQgc3RhdGUgZm9yIGEgY2xvY2sgZW5hYmxlCisgKiBAY2xrZG1fY2xrX2Rpc2FibGU6IFB1dCB0aGUgY2xrZG0gaW4gcmlnaHQgc3RhdGUgZm9yIGEgY2xvY2sgZGlzYWJsZQorICovCitzdHJ1Y3QgY2xrZG1fb3BzIHsKKwlpbnQJKCpjbGtkbV9hZGRfd2tkZXApKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CisJaW50CSgqY2xrZG1fZGVsX3drZGVwKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworCWludAkoKmNsa2RtX3JlYWRfd2tkZXApKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CisJaW50CSgqY2xrZG1fY2xlYXJfYWxsX3drZGVwcykoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CisJaW50CSgqY2xrZG1fYWRkX3NsZWVwZGVwKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworCWludAkoKmNsa2RtX2RlbF9zbGVlcGRlcCkoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKTsKKwlpbnQJKCpjbGtkbV9yZWFkX3NsZWVwZGVwKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworCWludAkoKmNsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMpKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCWludAkoKmNsa2RtX3NsZWVwKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKKwlpbnQJKCpjbGtkbV93YWtldXApKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCXZvaWQJKCpjbGtkbV9hbGxvd19pZGxlKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKKwl2b2lkCSgqY2xrZG1fZGVueV9pZGxlKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKKwlpbnQJKCpjbGtkbV9jbGtfZW5hYmxlKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKKwlpbnQJKCpjbGtkbV9jbGtfZGlzYWJsZSkoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Cit9OworCit2b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLCBzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcHMsCisJCQlzdHJ1Y3QgY2xrZG1fb3BzICpjdXN0b21fZnVuY3MpOwogc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CiAKIGludCBjbGtkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgdm9pZCAqdXNlciksCkBAIC0xMzIsMTYgKzE3NSwyMyBAQAogaW50IGNsa2RtX3JlYWRfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKTsKIGludCBjbGtkbV9jbGVhcl9hbGxfc2xlZXBkZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogCi12b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Ci12b2lkIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK3ZvaWQgY2xrZG1fYWxsb3dfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK3ZvaWQgY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogCi1pbnQgb21hcDJfY2xrZG1fd2FrZXVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwotaW50IG9tYXAyX2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworaW50IGNsa2RtX3dha2V1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK2ludCBjbGtkbV9zbGVlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIAotaW50IG9tYXAyX2Nsa2RtX2Nsa19lbmFibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsayAqY2xrKTsKLWludCBvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspOworaW50IGNsa2RtX2Nsa19lbmFibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsayAqY2xrKTsKK2ludCBjbGtkbV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspOwogCi1leHRlcm4gdm9pZCBfX2luaXQgb21hcDJfY2xvY2tkb21haW5zX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgb21hcDJ4eHhfY2xvY2tkb21haW5zX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgb21hcDN4eHhfY2xvY2tkb21haW5zX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgb21hcDQ0eHhfY2xvY2tkb21haW5zX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfY2xrZG1fYWRkX2F1dG9kZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworZXh0ZXJuIHZvaWQgX2Nsa2RtX2RlbF9hdXRvZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKKworZXh0ZXJuIHN0cnVjdCBjbGtkbV9vcHMgb21hcDJfY2xrZG1fb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgY2xrZG1fb3BzIG9tYXAzX2Nsa2RtX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGNsa2RtX29wcyBvbWFwNF9jbGtkbV9vcGVyYXRpb25zOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4yeHh4XzN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4yeHh4XzN4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGQwZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbjJ4eHhfM3h4eC5jCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogT01BUDIgYW5kIE9NQVAzIGNsb2NrZG9tYWluIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBEZXJpdmVkIGZyb20gbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIHdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogUmFqZW5kcmEgTmF5YWsgPHJuYXlha0B0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCisKK3N0YXRpYyBpbnQgb21hcDJfY2xrZG1fYWRkX3drZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLAorCQkJCQkJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpCit7CisJb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQljbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfY2xrZG1fZGVsX3drZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLAorCQkJCQkJIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCW9tYXAyX3BybV9jbGVhcl9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQljbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfY2xrZG1fcmVhZF93a2RlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwKKwkJCQkJCSBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMikKK3sKKwlyZXR1cm4gb21hcDJfcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQlQTV9XS0RFUCwgKDEgPDwgY2xrZG0yLT5kZXBfYml0KSk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfY2xrZG1fY2xlYXJfYWxsX3drZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCXUzMiBtYXNrID0gMDsKKworCWZvciAoY2QgPSBjbGtkbS0+d2tkZXBfc3JjczsgY2QgJiYgY2QtPmNsa2RtX25hbWU7IGNkKyspIHsKKwkJaWYgKCFvbWFwX2NoaXBfaXMoY2QtPm9tYXBfY2hpcCkpCisJCQljb250aW51ZTsKKwkJaWYgKCFjZC0+Y2xrZG0pCisJCQljb250aW51ZTsgLyogb25seSBoYXBwZW5zIGlmIGRhdGEgaXMgZXJyb25lb3VzICovCisKKwkJLyogUFJNIGFjY2Vzc2VzIGFyZSBzbG93LCBzbyBtaW5pbWl6ZSB0aGVtICovCisJCW1hc2sgfD0gMSA8PCBjZC0+Y2xrZG0tPmRlcF9iaXQ7CisJCWF0b21pY19zZXQoJmNkLT53a2RlcF91c2Vjb3VudCwgMCk7CisJfQorCisJb21hcDJfcHJtX2NsZWFyX21vZF9yZWdfYml0cyhtYXNrLCBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJIFBNX1dLREVQKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM19jbGtkbV9hZGRfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsCisJCQkJCQkgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpCit7CisJb21hcDJfY21fc2V0X21vZF9yZWdfYml0cygoMSA8PCBjbGtkbTItPmRlcF9iaXQpLAorCQkJCWNsa2RtMS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJT01BUDM0MzBfQ01fU0xFRVBERVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzX2Nsa2RtX2RlbF9zbGVlcGRlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwKKwkJCQkJCSBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMikKK3sKKwlvbWFwMl9jbV9jbGVhcl9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQljbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCU9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM19jbGtkbV9yZWFkX3NsZWVwZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLAorCQkJCQkJIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXJldHVybiBvbWFwMl9wcm1fcmVhZF9tb2RfYml0c19zaGlmdChjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCU9NQVAzNDMwX0NNX1NMRUVQREVQLCAoMSA8PCBjbGtkbTItPmRlcF9iaXQpKTsKK30KKworc3RhdGljIGludCBvbWFwM19jbGtkbV9jbGVhcl9hbGxfc2xlZXBkZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CisJdTMyIG1hc2sgPSAwOworCisJZm9yIChjZCA9IGNsa2RtLT5zbGVlcGRlcF9zcmNzOyBjZCAmJiBjZC0+Y2xrZG1fbmFtZTsgY2QrKykgeworCQlpZiAoIW9tYXBfY2hpcF9pcyhjZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNkLT5jbGtkbSkKKwkJCWNvbnRpbnVlOyAvKiBvbmx5IGhhcHBlbnMgaWYgZGF0YSBpcyBlcnJvbmVvdXMgKi8KKworCQkvKiBQUk0gYWNjZXNzZXMgYXJlIHNsb3csIHNvIG1pbmltaXplIHRoZW0gKi8KKwkJbWFzayB8PSAxIDw8IGNkLT5jbGtkbS0+ZGVwX2JpdDsKKwkJYXRvbWljX3NldCgmY2QtPnNsZWVwZGVwX3VzZWNvdW50LCAwKTsKKwl9CisJb21hcDJfcHJtX2NsZWFyX21vZF9yZWdfYml0cyhtYXNrLCBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJT01BUDM0MzBfQ01fU0xFRVBERVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJb21hcDJfY21fc2V0X21vZF9yZWdfYml0cyhPTUFQMjRYWF9GT1JDRVNUQVRFX01BU0ssCisJCQkJY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCU9NQVAyX1BNX1BXU1RDVFJMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMl9jbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlvbWFwMl9jbV9jbGVhcl9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURV9NQVNLLAorCQkJCWNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQlPTUFQMl9QTV9QV1NUQ1RSTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQorCQlfY2xrZG1fYWRkX2F1dG9kZXBzKGNsa2RtKTsKKworCW9tYXAyeHh4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJb21hcDJ4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKworCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCisJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOworfQorCitzdGF0aWMgdm9pZCBfZW5hYmxlX2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkgICAgICAgY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJb21hcDN4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgICAgIGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIF9kaXNhYmxlX2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwMnh4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJCWNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXAzeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkJY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKK30KKworCitzdGF0aWMgaW50IG9tYXAyX2Nsa2RtX2Nsa19lbmFibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlib29sIGh3c3VwID0gZmFsc2U7CisKKwlpZiAoIWNsa2RtLT5jbGt0cmN0cmxfbWFzaykKKwkJcmV0dXJuIDA7CisKKwlod3N1cCA9IG9tYXAyX2NtX2lzX2Nsa2RtX2luX2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQljbGtkbS0+Y2xrdHJjdHJsX21hc2spOworCisJaWYgKGh3c3VwKSB7CisJCS8qIERpc2FibGUgSFcgdHJhbnNpdGlvbnMgd2hlbiB3ZSBhcmUgY2hhbmdpbmcgZGVwcyAqLworCQlfZGlzYWJsZV9od3N1cChjbGtkbSk7CisJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOworCQlfZW5hYmxlX2h3c3VwKGNsa2RtKTsKKwl9IGVsc2UgeworCQljbGtkbV93YWtldXAoY2xrZG0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJYm9vbCBod3N1cCA9IGZhbHNlOworCisJaWYgKCFjbGtkbS0+Y2xrdHJjdHJsX21hc2spCisJCXJldHVybiAwOworCisJaHdzdXAgPSBvbWFwMl9jbV9pc19jbGtkbV9pbl9od3N1cChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKworCWlmIChod3N1cCkgeworCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KKwkJX2Rpc2FibGVfaHdzdXAoY2xrZG0pOworCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKKwkJX2VuYWJsZV9od3N1cChjbGtkbSk7CisJfSBlbHNlIHsKKwkJY2xrZG1fc2xlZXAoY2xrZG0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzX2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCWNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNfY2xrZG1fd2FrZXVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQljbGtkbS0+Y2xrdHJjdHJsX21hc2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwM19jbGtkbV9hbGxvd19pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKKwkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CisKKwlvbWFwM3h4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCWNsa2RtLT5jbGt0cmN0cmxfbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAzX2Nsa2RtX2RlbnlfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCW9tYXAzeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCWNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisKKwlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQorCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKK30KKworc3RydWN0IGNsa2RtX29wcyBvbWFwMl9jbGtkbV9vcGVyYXRpb25zID0geworCS5jbGtkbV9hZGRfd2tkZXAJPSBvbWFwMl9jbGtkbV9hZGRfd2tkZXAsCisJLmNsa2RtX2RlbF93a2RlcAk9IG9tYXAyX2Nsa2RtX2RlbF93a2RlcCwKKwkuY2xrZG1fcmVhZF93a2RlcAk9IG9tYXAyX2Nsa2RtX3JlYWRfd2tkZXAsCisJLmNsa2RtX2NsZWFyX2FsbF93a2RlcHMJPSBvbWFwMl9jbGtkbV9jbGVhcl9hbGxfd2tkZXBzLAorCS5jbGtkbV9zbGVlcAkJPSBvbWFwMl9jbGtkbV9zbGVlcCwKKwkuY2xrZG1fd2FrZXVwCQk9IG9tYXAyX2Nsa2RtX3dha2V1cCwKKwkuY2xrZG1fYWxsb3dfaWRsZQk9IG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUsCisJLmNsa2RtX2RlbnlfaWRsZQk9IG9tYXAyX2Nsa2RtX2RlbnlfaWRsZSwKKwkuY2xrZG1fY2xrX2VuYWJsZQk9IG9tYXAyX2Nsa2RtX2Nsa19lbmFibGUsCisJLmNsa2RtX2Nsa19kaXNhYmxlCT0gb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUsCit9OworCitzdHJ1Y3QgY2xrZG1fb3BzIG9tYXAzX2Nsa2RtX29wZXJhdGlvbnMgPSB7CisJLmNsa2RtX2FkZF93a2RlcAk9IG9tYXAyX2Nsa2RtX2FkZF93a2RlcCwKKwkuY2xrZG1fZGVsX3drZGVwCT0gb21hcDJfY2xrZG1fZGVsX3drZGVwLAorCS5jbGtkbV9yZWFkX3drZGVwCT0gb21hcDJfY2xrZG1fcmVhZF93a2RlcCwKKwkuY2xrZG1fY2xlYXJfYWxsX3drZGVwcwk9IG9tYXAyX2Nsa2RtX2NsZWFyX2FsbF93a2RlcHMsCisJLmNsa2RtX2FkZF9zbGVlcGRlcAk9IG9tYXAzX2Nsa2RtX2FkZF9zbGVlcGRlcCwKKwkuY2xrZG1fZGVsX3NsZWVwZGVwCT0gb21hcDNfY2xrZG1fZGVsX3NsZWVwZGVwLAorCS5jbGtkbV9yZWFkX3NsZWVwZGVwCT0gb21hcDNfY2xrZG1fcmVhZF9zbGVlcGRlcCwKKwkuY2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwcwk9IG9tYXAzX2Nsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMsCisJLmNsa2RtX3NsZWVwCQk9IG9tYXAzX2Nsa2RtX3NsZWVwLAorCS5jbGtkbV93YWtldXAJCT0gb21hcDNfY2xrZG1fd2FrZXVwLAorCS5jbGtkbV9hbGxvd19pZGxlCT0gb21hcDNfY2xrZG1fYWxsb3dfaWRsZSwKKwkuY2xrZG1fZGVueV9pZGxlCT0gb21hcDNfY2xrZG1fZGVueV9pZGxlLAorCS5jbGtkbV9jbGtfZW5hYmxlCT0gb21hcDJfY2xrZG1fY2xrX2VuYWJsZSwKKwkuY2xrZG1fY2xrX2Rpc2FibGUJPSBvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbjQ0eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWE0ZWNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbjQ0eHguYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIE9NQVA0IGNsb2NrZG9tYWluIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBEZXJpdmVkIGZyb20gbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIHdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogUmFqZW5kcmEgTmF5YWsgPHJuYXlha0B0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKKyNpbmNsdWRlICJjbWluc3Q0NHh4LmgiCisjaW5jbHVkZSAiY200NHh4LmgiCisKK3N0YXRpYyBpbnQgb21hcDRfY2xrZG1fYWRkX3drdXBfc2xlZXBfZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLAorCQkJCQlzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMikKK3sKKwlvbWFwNF9jbWluc3Rfc2V0X2luc3RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQkJY2xrZG0xLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJY2xrZG0xLT5jbV9pbnN0LCBjbGtkbTEtPmNsa2RtX29mZnMgKworCQkJCQlPTUFQNF9DTV9TVEFUSUNERVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXA0X2Nsa2RtX2RlbF93a3VwX3NsZWVwX2RlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwKKwkJCQkJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpCit7CisJb21hcDRfY21pbnN0X2NsZWFyX2luc3RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQkJY2xrZG0xLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJY2xrZG0xLT5jbV9pbnN0LCBjbGtkbTEtPmNsa2RtX29mZnMgKworCQkJCQlPTUFQNF9DTV9TVEFUSUNERVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXA0X2Nsa2RtX3JlYWRfd2t1cF9zbGVlcF9kZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsCisJCQkJCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXJldHVybiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZ19iaXRzKGNsa2RtMS0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCWNsa2RtMS0+Y21faW5zdCwgY2xrZG0xLT5jbGtkbV9vZmZzICsKKwkJCQkJT01BUDRfQ01fU1RBVElDREVQLAorCQkJCQkoMSA8PCBjbGtkbTItPmRlcF9iaXQpKTsKK30KKworc3RhdGljIGludCBvbWFwNF9jbGtkbV9jbGVhcl9hbGxfd2t1cF9zbGVlcF9kZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CisJdTMyIG1hc2sgPSAwOworCisJZm9yIChjZCA9IGNsa2RtLT53a2RlcF9zcmNzOyBjZCAmJiBjZC0+Y2xrZG1fbmFtZTsgY2QrKykgeworCQlpZiAoIW9tYXBfY2hpcF9pcyhjZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNkLT5jbGtkbSkKKwkJCWNvbnRpbnVlOyAvKiBvbmx5IGhhcHBlbnMgaWYgZGF0YSBpcyBlcnJvbmVvdXMgKi8KKworCQltYXNrIHw9IDEgPDwgY2QtPmNsa2RtLT5kZXBfYml0OworCQlhdG9taWNfc2V0KCZjZC0+d2tkZXBfdXNlY291bnQsIDApOworCX0KKworCW9tYXA0X2NtaW5zdF9jbGVhcl9pbnN0X3JlZ19iaXRzKG1hc2ssIGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJY2xrZG0tPmNtX2luc3QsIGNsa2RtLT5jbGtkbV9vZmZzICsKKwkJCQkJT01BUDRfQ01fU1RBVElDREVQKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwNF9jbGtkbV9zbGVlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCW9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV9zbGVlcChjbGtkbS0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCWNsa2RtLT5jbV9pbnN0LCBjbGtkbS0+Y2xrZG1fb2Zmcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDRfY2xrZG1fd2FrZXVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3dha2V1cChjbGtkbS0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCWNsa2RtLT5jbV9pbnN0LCBjbGtkbS0+Y2xrZG1fb2Zmcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXA0X2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlvbWFwNF9jbWluc3RfY2xrZG1fZW5hYmxlX2h3c3VwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJY2xrZG0tPmNtX2luc3QsIGNsa2RtLT5jbGtkbV9vZmZzKTsKK30KKworc3RhdGljIHZvaWQgb21hcDRfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJb21hcDRfY21pbnN0X2Nsa2RtX2Rpc2FibGVfaHdzdXAoY2xrZG0tPnByY21fcGFydGl0aW9uLAorCQkJCQljbGtkbS0+Y21faW5zdCwgY2xrZG0tPmNsa2RtX29mZnMpOworfQorCitzdGF0aWMgaW50IG9tYXA0X2Nsa2RtX2Nsa19lbmFibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlib29sIGh3c3VwID0gZmFsc2U7CisKKwlod3N1cCA9IG9tYXA0X2NtaW5zdF9pc19jbGtkbV9pbl9od3N1cChjbGtkbS0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCWNsa2RtLT5jbV9pbnN0LCBjbGtkbS0+Y2xrZG1fb2Zmcyk7CisKKwlpZiAoIWh3c3VwKQorCQljbGtkbV93YWtldXAoY2xrZG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDRfY2xrZG1fY2xrX2Rpc2FibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlib29sIGh3c3VwID0gZmFsc2U7CisKKwlod3N1cCA9IG9tYXA0X2NtaW5zdF9pc19jbGtkbV9pbl9od3N1cChjbGtkbS0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCWNsa2RtLT5jbV9pbnN0LCBjbGtkbS0+Y2xrZG1fb2Zmcyk7CisKKwlpZiAoIWh3c3VwKQorCQljbGtkbV9zbGVlcChjbGtkbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNsa2RtX29wcyBvbWFwNF9jbGtkbV9vcGVyYXRpb25zID0geworCS5jbGtkbV9hZGRfd2tkZXAJPSBvbWFwNF9jbGtkbV9hZGRfd2t1cF9zbGVlcF9kZXAsCisJLmNsa2RtX2RlbF93a2RlcAk9IG9tYXA0X2Nsa2RtX2RlbF93a3VwX3NsZWVwX2RlcCwKKwkuY2xrZG1fcmVhZF93a2RlcAk9IG9tYXA0X2Nsa2RtX3JlYWRfd2t1cF9zbGVlcF9kZXAsCisJLmNsa2RtX2NsZWFyX2FsbF93a2RlcHMJPSBvbWFwNF9jbGtkbV9jbGVhcl9hbGxfd2t1cF9zbGVlcF9kZXBzLAorCS5jbGtkbV9hZGRfc2xlZXBkZXAJPSBvbWFwNF9jbGtkbV9hZGRfd2t1cF9zbGVlcF9kZXAsCisJLmNsa2RtX2RlbF9zbGVlcGRlcAk9IG9tYXA0X2Nsa2RtX2RlbF93a3VwX3NsZWVwX2RlcCwKKwkuY2xrZG1fcmVhZF9zbGVlcGRlcAk9IG9tYXA0X2Nsa2RtX3JlYWRfd2t1cF9zbGVlcF9kZXAsCisJLmNsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMJPSBvbWFwNF9jbGtkbV9jbGVhcl9hbGxfd2t1cF9zbGVlcF9kZXBzLAorCS5jbGtkbV9zbGVlcAkJPSBvbWFwNF9jbGtkbV9zbGVlcCwKKwkuY2xrZG1fd2FrZXVwCQk9IG9tYXA0X2Nsa2RtX3dha2V1cCwKKwkuY2xrZG1fYWxsb3dfaWRsZQk9IG9tYXA0X2Nsa2RtX2FsbG93X2lkbGUsCisJLmNsa2RtX2RlbnlfaWRsZQk9IG9tYXA0X2Nsa2RtX2RlbnlfaWRsZSwKKwkuY2xrZG1fY2xrX2VuYWJsZQk9IG9tYXA0X2Nsa2RtX2Nsa19lbmFibGUsCisJLmNsa2RtX2Nsa19kaXNhYmxlCT0gb21hcDRfY2xrZG1fY2xrX2Rpc2FibGUsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMyeHh4XzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMyeHh4XzN4eHhfZGF0YS5jCmluZGV4IGU0YTcxMzMuLjEzYmRlOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zMnh4eF8zeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczJ4eHhfM3h4eF9kYXRhLmMKQEAgLTg5LDYgKzg5LDggQEAKIAogLyogMjRYWC1zcGVjaWZpYyBwb3NzaWJsZSBkZXBlbmRlbmNpZXMgKi8KIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisKIC8qIFdha2V1cCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgKi8KIAogLyogMjQyMC8yNDMwIFBNX1dLREVQX0RTUDogQ09SRSwgTVBVLCBXS1VQICovCkBAIC0xNjgsMTAgKzE3MCwxMSBAQAogCXsgTlVMTCB9LAogfTsKIAorI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAyICovCiAKIC8qIDI0MzAtc3BlY2lmaWMgcG9zc2libGUgd2FrZXVwIGRlcGVuZGVuY2llcyAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDMwCiAKIC8qIDI0MzAgUE1fV0tERVBfTURNOiBDT1JFLCBNUFUsIFdLVVAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIG1kbV8yNDMwX3drZGVwc1tdID0gewpAQCAtMTk0LDcgKzE5Nyw3IEBACiAJeyBOVUxMIH0sCiB9OwogCi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKyNlbmRpZiAvKiBDT05GSUdfU09DX09NQVAyNDMwICovCiAKIAogLyogT01BUDMtc3BlY2lmaWMgcG9zc2libGUgZGVwZW5kZW5jaWVzICovCkBAIC00NTAsNyArNDUzLDcgQEAKICAqIDI0MjAtb25seSBjbG9ja2RvbWFpbnMKICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfT01BUDI0MjApCiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MjBfY2xrZG0gPSB7CiAJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCkBAIC01MTQsMTQgKzUxNywxNCBAQAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKIH07CiAKLSNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAyNDIwICovCisjZW5kaWYgICAvKiBDT05GSUdfU09DX09NQVAyNDIwICovCiAKIAogLyoKICAqIDI0MzAtb25seSBjbG9ja2RvbWFpbnMKICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfT01BUDI0MzApCiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MzBfY2xrZG0gPSB7CiAJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCkBAIC02MDAsNyArNjAzLDcgQEAKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCiB9OwogCi0jZW5kaWYgICAgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKyNlbmRpZiAgICAvKiBDT05GSUdfU09DX09NQVAyNDMwICovCiAKIAogLyoKQEAgLTgxMSw3ICs4MTQsNyBAQAogCSZjbV9jbGtkbSwKIAkmcHJtX2Nsa2RtLAogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDIwCiAJJm1wdV8yNDIwX2Nsa2RtLAogCSZpdmExXzI0MjBfY2xrZG0sCiAJJmRzcF8yNDIwX2Nsa2RtLApAQCAtODIxLDcgKzgyNCw3IEBACiAJJmRzc18yNDIwX2Nsa2RtLAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorI2lmZGVmIENPTkZJR19TT0NfT01BUDI0MzAKIAkmbXB1XzI0MzBfY2xrZG0sCiAJJm1kbV9jbGtkbSwKIAkmZHNwXzI0MzBfY2xrZG0sCkBAIC04NTQsNyArODU3LDEyIEBACiAJTlVMTCwKIH07CiAKLXZvaWQgX19pbml0IG9tYXAyX2Nsb2NrZG9tYWluc19pbml0KHZvaWQpCit2b2lkIF9faW5pdCBvbWFwMnh4eF9jbG9ja2RvbWFpbnNfaW5pdCh2b2lkKQogewotCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAyLCBjbGtkbV9hdXRvZGVwcyk7CisJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcDIsIGNsa2RtX2F1dG9kZXBzLCAmb21hcDJfY2xrZG1fb3BlcmF0aW9ucyk7Cit9CisKK3ZvaWQgX19pbml0IG9tYXAzeHh4X2Nsb2NrZG9tYWluc19pbml0KHZvaWQpCit7CisJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcDIsIGNsa2RtX2F1dG9kZXBzLCAmb21hcDNfY2xrZG1fb3BlcmF0aW9ucyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4X2RhdGEuYwppbmRleCAxMDYyMmM5Li5hNjA3ZWMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMKQEAgLTE4LDExICsxOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0vKgotICogVG8tRG8gTGlzdAotICogLT4gUG9wdWxhdGUgdGhlIFNsZWVwL1dha2V1cCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBkb21haW5zCi0gKi8KLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKQEAgLTM1LDYgKzMwLDM1NSBAQAogI2luY2x1ZGUgInByY200NHh4LmgiCiAjaW5jbHVkZSAicHJjbV9tcHU0NHh4LmgiCiAKKy8qIFN0YXRpYyBEZXBlbmRlbmNpZXMgZm9yIE9NQVA0IENsb2NrIERvbWFpbnMgKi8KKworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZHVjYXRpX3drdXBfc2xlZXBfZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUJID0gImFiZV9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gIml2YWhkX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfMV9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzXzJfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM19kc3NfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM19lbWlmX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfZ2Z4X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfaW5pdF9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImw0X2NmZ19jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImw0X3Blcl9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImw0X3NlY3VyZV9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImw0X3drdXBfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJ0ZXNsYV9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgaXNzX3drdXBfc2xlZXBfZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUJID0gIml2YWhkX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfMV9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzX2VtaWZfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGl2YWhkX3drdXBfc2xlZXBfZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUJID0gImwzXzFfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM19lbWlmX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBsM19kMmRfd2t1cF9zbGVlcF9kZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZQkgPSAiYWJlX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAiaXZhaGRfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM18xX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzX2VtaWZfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM19pbml0X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDRfY2ZnX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDRfcGVyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBsM19kbWFfd2t1cF9zbGVlcF9kZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZQkgPSAiYWJlX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAiZHVjYXRpX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAiaXZhaGRfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM18xX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfZHNzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfZW1pZl9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzX2luaXRfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsNF9jZmdfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsNF9wZXJfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsNF9zZWN1cmVfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsNF93a3VwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBsM19kc3Nfd2t1cF9zbGVlcF9kZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZQkgPSAiaXZhaGRfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM18yX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfZW1pZl9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgbDNfZ2Z4X3drdXBfc2xlZXBfZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUJID0gIml2YWhkX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfMV9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzX2VtaWZfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGwzX2luaXRfd2t1cF9zbGVlcF9kZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZQkgPSAiYWJlX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAiaXZhaGRfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM19lbWlmX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDRfY2ZnX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDRfcGVyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDRfc2VjdXJlX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDRfd2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgbDRfc2VjdXJlX3drdXBfc2xlZXBfZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUJID0gImwzXzFfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM19lbWlmX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDRfcGVyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBtcHVzc193a3VwX3NsZWVwX2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJhYmVfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJkdWNhdGlfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJpdmFoZF9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzXzFfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM18yX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfZHNzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfZW1pZl9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzX2dmeF9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzX2luaXRfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsNF9jZmdfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsNF9wZXJfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsNF9zZWN1cmVfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsNF93a3VwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAidGVzbGFfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIHRlc2xhX3drdXBfc2xlZXBfZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUJID0gImFiZV9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gIml2YWhkX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfMV9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImwzXzJfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lCSA9ICJsM19lbWlmX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcAkgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZQkgPSAibDNfaW5pdF9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImw0X2NmZ19jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImw0X3Blcl9jbGtkbSIsCisJCS5vbWFwX2NoaXAJID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUJID0gImw0X3drdXBfY2xrZG0iLAorCQkub21hcF9jaGlwCSA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDRfY2VmdXNlXzQ0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCSAgPSAibDRfY2VmdXNlX2Nsa2RtIiwKQEAgLTUyLDYgKzM5Niw3IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9JTlNULAogCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9MNENGR19DRE9GRlMsCisJLmRlcF9iaXQJICA9IE9NQVA0NDMwX0w0Q0ZHX1NUQVRERVBfU0hJRlQsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTYyLDYgKzQwNyw5IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTFfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTFfVEVTTEFfSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00xX1RFU0xBX1RFU0xBX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfVEVTTEFfU1RBVERFUF9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gdGVzbGFfd2t1cF9zbGVlcF9kZXBzLAorCS5zbGVlcGRlcF9zcmNzCSAgPSB0ZXNsYV93a3VwX3NsZWVwX2RlcHMsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTcyLDYgKzQyMCw5IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfR0ZYX0lOU1QsCiAJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX0NNMl9HRlhfR0ZYX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfR0ZYX1NUQVRERVBfU0hJRlQsCisJLndrZGVwX3NyY3MJICA9IGwzX2dmeF93a3VwX3NsZWVwX2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGwzX2dmeF93a3VwX3NsZWVwX2RlcHMsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTgyLDYgKzQzMyw5IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfSVZBSERfSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0lWQUhEX0lWQUhEX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfSVZBSERfU1RBVERFUF9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gaXZhaGRfd2t1cF9zbGVlcF9kZXBzLAorCS5zbGVlcGRlcF9zcmNzCSAgPSBpdmFoZF93a3VwX3NsZWVwX2RlcHMsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTkyLDYgKzQ0Niw5IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0w0UEVSX0w0U0VDX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfTDRTRUNfU1RBVERFUF9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gbDRfc2VjdXJlX3drdXBfc2xlZXBfZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gbDRfc2VjdXJlX3drdXBfc2xlZXBfZGVwcywKIAkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCiB9OwpAQCAtMTAyLDYgKzQ1OSw3IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0w0UEVSX0w0UEVSX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfTDRQRVJfU1RBVERFUF9TSElGVCwKIAkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCiB9OwpAQCAtMTEyLDYgKzQ3MCw3IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTFfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTFfQUJFX0lOU1QsCiAJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX0NNMV9BQkVfQUJFX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfQUJFX1NUQVRERVBfU0hJRlQsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTEzMSw2ICs0OTAsOSBAQAogCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKIAkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULAogCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfTDNJTklUX0wzSU5JVF9DRE9GRlMsCisJLmRlcF9iaXQJICA9IE9NQVA0NDMwX0wzSU5JVF9TVEFUREVQX1NISUZULAorCS53a2RlcF9zcmNzCSAgPSBsM19pbml0X3drdXBfc2xlZXBfZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gbDNfaW5pdF93a3VwX3NsZWVwX2RlcHMsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTE0MSw2ICs1MDMsOCBAQAogCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00xX1BBUlRJVElPTiwKIAkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00xX01QVV9JTlNULAogCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTFfTVBVX01QVV9DRE9GRlMsCisJLndrZGVwX3NyY3MJICA9IG1wdXNzX3drdXBfc2xlZXBfZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gbXB1c3Nfd2t1cF9zbGVlcF9kZXBzLAogCS5mbGFncwkJICA9IENMS0RNX0NBTl9GT1JDRV9XQUtFVVAgfCBDTEtETV9DQU5fSFdTVVAsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCiB9OwpAQCAtMTUwLDcgKzUxNCw3IEBACiAJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjcHUwX3B3cmRtIiB9LAogCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfUFJDTV9NUFVfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9QUkNNX01QVV9DUFUwX0lOU1QsCi0JLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfTVBVX0NET0ZGUywKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9DUFUwX0NET0ZGUywKIAkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTE2MCw3ICs1MjQsNyBAQAogCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY3B1MV9wd3JkbSIgfSwKIAkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSQ01fTVBVX1BBUlRJVElPTiwKIAkuY21faW5zdAkgID0gT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9JTlNULAotCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9QUkNNX01QVV9DUFUxX01QVV9DRE9GRlMsCisJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfQ1BVMV9DRE9GRlMsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKIH07CkBAIC0xNzEsNiArNTM1LDcgQEAKIAkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX0NNMl9QQVJUSVRJT04sCiAJLmNtX2luc3QJICA9IE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsCiAJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX0NNMl9DT1JFX01FTUlGX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfTUVNSUZfU1RBVERFUF9TSElGVCwKIAkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTE5MSw2ICs1NTYsOSBAQAogCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKIAkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NPUkVfRFVDQVRJX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfRFVDQVRJX1NUQVRERVBfU0hJRlQsCisJLndrZGVwX3NyY3MJICA9IGR1Y2F0aV93a3VwX3NsZWVwX2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGR1Y2F0aV93a3VwX3NsZWVwX2RlcHMsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTIwMSw2ICs1NjksNyBAQAogCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKIAkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NPUkVfTDNfMl9DRE9GRlMsCisJLmRlcF9iaXQJICA9IE9NQVA0NDMwX0wzXzJfU1RBVERFUF9TSElGVCwKIAkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVAsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCiB9OwpAQCAtMjExLDYgKzU4MCw3IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9JTlNULAogCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9MM18xX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfTDNfMV9TVEFUREVQX1NISUZULAogCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKIH07CkBAIC0yMjEsNiArNTkxLDggQEAKIAkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX0NNMl9QQVJUSVRJT04sCiAJLmNtX2luc3QJICA9IE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsCiAJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX0NNMl9DT1JFX0QyRF9DRE9GRlMsCisJLndrZGVwX3NyY3MJICA9IGwzX2QyZF93a3VwX3NsZWVwX2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGwzX2QyZF93a3VwX3NsZWVwX2RlcHMsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKIH07CkBAIC0yMzEsNiArNjAzLDggQEAKIAkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX0NNMl9QQVJUSVRJT04sCiAJLmNtX2luc3QJICA9IE9NQVA0NDMwX0NNMl9DQU1fSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NBTV9DQU1fQ0RPRkZTLAorCS53a2RlcF9zcmNzCSAgPSBpc3Nfd2t1cF9zbGVlcF9kZXBzLAorCS5zbGVlcGRlcF9zcmNzCSAgPSBpc3Nfd2t1cF9zbGVlcF9kZXBzLAogCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKIH07CkBAIC0yNDEsNiArNjE1LDkgQEAKIAkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX0NNMl9QQVJUSVRJT04sCiAJLmNtX2luc3QJICA9IE9NQVA0NDMwX0NNMl9EU1NfSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0RTU19EU1NfQ0RPRkZTLAorCS5kZXBfYml0CSAgPSBPTUFQNDQzMF9EU1NfU1RBVERFUF9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gbDNfZHNzX3drdXBfc2xlZXBfZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gbDNfZHNzX3drdXBfc2xlZXBfZGVwcywKIAkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCiB9OwpAQCAtMjUxLDYgKzYyOCw3IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9QUk1fUEFSVElUSU9OLAogCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9QUk1fV0tVUF9DTV9JTlNULAogCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fV0tVUF9DTV9XS1VQX0NET0ZGUywKKwkuZGVwX2JpdAkgID0gT01BUDQ0MzBfTDRXS1VQX1NUQVRERVBfU0hJRlQsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogfTsKQEAgLTI3MSw2ICs2NDksOCBAQAogCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKIAkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwKIAkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NPUkVfU0RNQV9DRE9GRlMsCisJLndrZGVwX3NyY3MJICA9IGwzX2RtYV93a3VwX3NsZWVwX2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGwzX2RtYV93a3VwX3NsZWVwX2RlcHMsCiAJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKIH07CkBAIC0zMDUsNSArNjg1LDUgQEAKIAogdm9pZCBfX2luaXQgb21hcDQ0eHhfY2xvY2tkb21haW5zX2luaXQodm9pZCkKIHsKLQljbGtkbV9pbml0KGNsb2NrZG9tYWluc19vbWFwNDR4eCwgTlVMTCk7CisJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcDQ0eHgsIE5VTEwsICZvbWFwNF9jbGtkbV9vcGVyYXRpb25zKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oCmluZGV4IGQ3MDY2MGUuLjY4NjI5MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaApAQCAtMjEwLDggKzIxMCwxMSBAQAogI2RlZmluZSBPTUFQMjRYWF9BVVRPX1VTQl9NQVNLCQkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFM19DT1JFICovCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fU0RSQ19TSElGVAkJCTIKICNkZWZpbmUgT01BUDI0WFhfQVVUT19TRFJDX01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19HUE1DX1NISUZUCQkJMQogI2RlZmluZSBPTUFQMjRYWF9BVVRPX0dQTUNfTUFTSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX1NETUFfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVAyNFhYX0FVVE9fU0RNQV9NQVNLCQkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFNF9DT1JFICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmMKaW5kZXggOTY5NTRhYS4uOWQwZGVjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4XzN4eHguYwpAQCAtMjUsNiArMjUsMTQgQEAKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKIAorLyogQ01fQVVUT0lETEVfUExMLkFVVE9fKiBiaXQgdmFsdWVzIGZvciBEUExMcyAqLworI2RlZmluZSBEUExMX0FVVE9JRExFX0RJU0FCTEUJCQkJMHgwCisjZGVmaW5lIE9NQVAyWFhYX0RQTExfQVVUT0lETEVfTE9XX1BPV0VSX1NUT1AJCTB4MworCisvKiBDTV9BVVRPSURMRV9QTEwuQVVUT18qIGJpdCB2YWx1ZXMgZm9yIEFQTExzIChPTUFQMnh4eCBvbmx5KSAqLworI2RlZmluZSBPTUFQMlhYWF9BUExMX0FVVE9JRExFX0RJU0FCTEUJCQkweDAKKyNkZWZpbmUgT01BUDJYWFhfQVBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUAkJMHgzCisKIHN0YXRpYyBjb25zdCB1OCBjbV9pZGxlc3Rfb2Zmc1tdID0gewogCUNNX0lETEVTVDEsIENNX0lETEVTVDIsIE9NQVAyNDMwX0NNX0lETEVTVDMKIH07CkBAIC0xMjUsNiArMTMzLDY3IEBACiAJX3dyaXRlX2Nsa3RyY3RybChPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQLCBtb2R1bGUsIG1hc2spOwogfQogCisvKgorICogRFBMTCBhdXRvaWRsZSBjb250cm9sCisgKi8KKworc3RhdGljIHZvaWQgX29tYXAyeHh4X3NldF9kcGxsX2F1dG9pZGxlKHU4IG0pCit7CisJdTMyIHY7CisKKwl2ID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0FVVE9JRExFKTsKKwl2ICY9IH5PTUFQMjRYWF9BVVRPX0RQTExfTUFTSzsKKwl2IHw9IG0gPDwgT01BUDI0WFhfQVVUT19EUExMX1NISUZUOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcodiwgUExMX01PRCwgQ01fQVVUT0lETEUpOworfQorCit2b2lkIG9tYXAyeHh4X2NtX3NldF9kcGxsX2Rpc2FibGVfYXV0b2lkbGUodm9pZCkKK3sKKwlfb21hcDJ4eHhfc2V0X2RwbGxfYXV0b2lkbGUoT01BUDJYWFhfRFBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUCk7Cit9CisKK3ZvaWQgb21hcDJ4eHhfY21fc2V0X2RwbGxfYXV0b19sb3dfcG93ZXJfc3RvcCh2b2lkKQoreworCV9vbWFwMnh4eF9zZXRfZHBsbF9hdXRvaWRsZShEUExMX0FVVE9JRExFX0RJU0FCTEUpOworfQorCisvKgorICogQVBMTCBhdXRvaWRsZSBjb250cm9sCisgKi8KKworc3RhdGljIHZvaWQgX29tYXAyeHh4X3NldF9hcGxsX2F1dG9pZGxlKHU4IG0sIHUzMiBtYXNrKQoreworCXUzMiB2OworCisJdiA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9BVVRPSURMRSk7CisJdiAmPSB+bWFzazsKKwl2IHw9IG0gPDwgX19mZnMobWFzayk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyh2LCBQTExfTU9ELCBDTV9BVVRPSURMRSk7Cit9CisKK3ZvaWQgb21hcDJ4eHhfY21fc2V0X2FwbGw1NF9kaXNhYmxlX2F1dG9pZGxlKHZvaWQpCit7CisJX29tYXAyeHh4X3NldF9hcGxsX2F1dG9pZGxlKE9NQVAyWFhYX0FQTExfQVVUT0lETEVfTE9XX1BPV0VSX1NUT1AsCisJCQkJICAgIE9NQVAyNFhYX0FVVE9fNTRNX01BU0spOworfQorCit2b2lkIG9tYXAyeHh4X2NtX3NldF9hcGxsNTRfYXV0b19sb3dfcG93ZXJfc3RvcCh2b2lkKQoreworCV9vbWFwMnh4eF9zZXRfYXBsbF9hdXRvaWRsZShPTUFQMlhYWF9BUExMX0FVVE9JRExFX0RJU0FCTEUsCisJCQkJICAgIE9NQVAyNFhYX0FVVE9fNTRNX01BU0spOworfQorCit2b2lkIG9tYXAyeHh4X2NtX3NldF9hcGxsOTZfZGlzYWJsZV9hdXRvaWRsZSh2b2lkKQoreworCV9vbWFwMnh4eF9zZXRfYXBsbF9hdXRvaWRsZShPTUFQMlhYWF9BUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QLAorCQkJCSAgICBPTUFQMjRYWF9BVVRPXzk2TV9NQVNLKTsKK30KKwordm9pZCBvbWFwMnh4eF9jbV9zZXRfYXBsbDk2X2F1dG9fbG93X3Bvd2VyX3N0b3Aodm9pZCkKK3sKKwlfb21hcDJ4eHhfc2V0X2FwbGxfYXV0b2lkbGUoT01BUDJYWFhfQVBMTF9BVVRPSURMRV9ESVNBQkxFLAorCQkJCSAgICBPTUFQMjRYWF9BVVRPXzk2TV9NQVNLKTsKK30KIAogLyoKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmgKaW5kZXggNWU5ZWE1Yi4uMDg4YmJhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4XzN4eHguaApAQCAtMTIyLDYgKzEyMiwxNCBAQAogZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwogZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKIAorZXh0ZXJuIHZvaWQgb21hcDJ4eHhfY21fc2V0X2RwbGxfZGlzYWJsZV9hdXRvaWRsZSh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9kcGxsX2F1dG9fbG93X3Bvd2VyX3N0b3Aodm9pZCk7CisKK2V4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9hcGxsNTRfZGlzYWJsZV9hdXRvaWRsZSh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9hcGxsNTRfYXV0b19sb3dfcG93ZXJfc3RvcCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9hcGxsOTZfZGlzYWJsZV9hdXRvaWRsZSh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9hcGxsOTZfYXV0b19sb3dfcG93ZXJfc3RvcCh2b2lkKTsKKwogI2VuZGlmCiAKIC8qIENNIHJlZ2lzdGVyIGJpdHMgc2hhcmVkIGJldHdlZW4gMjRYWCBhbmQgMzQzMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmgKaW5kZXggNDhmYzNmNC4uMGI4N2VjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY20uaCIKIAogI2RlZmluZSBPTUFQNF9DTV9DTEtTVENUUkwJCQkJMHgwMDAwCisjZGVmaW5lIE9NQVA0X0NNX1NUQVRJQ0RFUAkJCQkweDAwMDQKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwogIyBpZm5kZWYgX19BU1NFTUJMRVJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYwppbmRleCBjMDRiYmJlLi5hNDgyYmZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYwpAQCAtNzMsNiArNzMsMjcgQEAKIAlyZXR1cm4gdjsKIH0KIAordTMyIG9tYXA0X2NtaW5zdF9zZXRfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgczE2IGluc3QsIHMxNiBpZHgpCit7CisJcmV0dXJuIG9tYXA0X2NtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyhiaXRzLCBiaXRzLCBwYXJ0LCBpbnN0LCBpZHgpOworfQorCit1MzIgb21hcDRfY21pbnN0X2NsZWFyX2luc3RfcmVnX2JpdHModTMyIGJpdHMsIHU4IHBhcnQsIHMxNiBpbnN0LCBzMTYgaWR4KQoreworCXJldHVybiBvbWFwNF9jbWluc3Rfcm13X2luc3RfcmVnX2JpdHMoYml0cywgMHgwLCBwYXJ0LCBpbnN0LCBpZHgpOworfQorCit1MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWdfYml0cyh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGlkeCwgdTMyIG1hc2spCit7CisJdTMyIHY7CisKKwl2ID0gb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcocGFydCwgaW5zdCwgaWR4KTsKKwl2ICY9IG1hc2s7CisJdiA+Pj0gX19mZnMobWFzayk7CisKKwlyZXR1cm4gdjsKK30KKwogLyoKICAqCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmgKaW5kZXggYTZhYmQwYS4uMmIzMmMxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmgKQEAgLTI1LDYgKzI1LDEyIEBACiBleHRlcm4gdm9pZCBvbWFwNF9jbWluc3Rfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgdTggcGFydCwgczE2IGluc3QsIHUxNiBpZHgpOwogZXh0ZXJuIHUzMiBvbWFwNF9jbWluc3Rfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCB1OCBwYXJ0LAogCQkJCQkgICBzMTYgaW5zdCwgczE2IGlkeCk7CitleHRlcm4gdTMyIG9tYXA0X2NtaW5zdF9zZXRfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgczE2IGluc3QsCisJCQkJCSAgIHMxNiBpZHgpOworZXh0ZXJuIHUzMiBvbWFwNF9jbWluc3RfY2xlYXJfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgczE2IGluc3QsCisJCQkJCSAgIHMxNiBpZHgpOworZXh0ZXJuIHUzMiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZ19iaXRzKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgaWR4LAorCQkJCQkgICB1MzIgbWFzayk7CiAKIGV4dGVybiBpbnQgb21hcDRfY21fd2FpdF9tb2R1bGVfcmVhZHkodm9pZCBfX2lvbWVtICpjbGtjdHJsX3JlZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi5jCmluZGV4IDc3ODkyOWYuLjNmMjBjYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24uYwpAQCAtNDAsNyArNDAsNyBAQAogCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCisjaWYgZGVmaW5lZChDT05GSUdfU09DX09NQVAyNDIwKQogCiBzdGF0aWMgc3RydWN0IG9tYXBfZ2xvYmFscyBvbWFwMjQyeF9nbG9iYWxzID0gewogCS5jbGFzcwk9IE9NQVAyNDJYX0NMQVNTLApAQCAtNTAsOSArNTAsNiBAQAogCS5jdHJsCT0gT01BUDI0MlhfQ1RSTF9CQVNFLAogCS5wcm0JPSBPTUFQMjQyMF9QUk1fQkFTRSwKIAkuY20JPSBPTUFQMjQyMF9DTV9CQVNFLAotCS51YXJ0MV9waHlzCT0gT01BUDJfVUFSVDFfQkFTRSwKLQkudWFydDJfcGh5cwk9IE9NQVAyX1VBUlQyX0JBU0UsCi0JLnVhcnQzX3BoeXMJPSBPTUFQMl9VQVJUM19CQVNFLAogfTsKIAogdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMjQyeCh2b2lkKQpAQCAtNjEsNyArNTgsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKQorI2lmIGRlZmluZWQoQ09ORklHX1NPQ19PTUFQMjQzMCkKIAogc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDI0M3hfZ2xvYmFscyA9IHsKIAkuY2xhc3MJPSBPTUFQMjQzWF9DTEFTUywKQEAgLTcxLDkgKzY4LDYgQEAKIAkuY3RybAk9IE9NQVAyNDNYX0NUUkxfQkFTRSwKIAkucHJtCT0gT01BUDI0MzBfUFJNX0JBU0UsCiAJLmNtCT0gT01BUDI0MzBfQ01fQkFTRSwKLQkudWFydDFfcGh5cwk9IE9NQVAyX1VBUlQxX0JBU0UsCi0JLnVhcnQyX3BoeXMJPSBPTUFQMl9VQVJUMl9CQVNFLAotCS51YXJ0M19waHlzCT0gT01BUDJfVUFSVDNfQkFTRSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzI0M3godm9pZCkKQEAgLTkyLDEwICs4Niw2IEBACiAJLmN0cmwJPSBPTUFQMzQzWF9DVFJMX0JBU0UsCiAJLnBybQk9IE9NQVAzNDMwX1BSTV9CQVNFLAogCS5jbQk9IE9NQVAzNDMwX0NNX0JBU0UsCi0JLnVhcnQxX3BoeXMJPSBPTUFQM19VQVJUMV9CQVNFLAotCS51YXJ0Ml9waHlzCT0gT01BUDNfVUFSVDJfQkFTRSwKLQkudWFydDNfcGh5cwk9IE9NQVAzX1VBUlQzX0JBU0UsCi0JLnVhcnQ0X3BoeXMJPSBPTUFQM19VQVJUNF9CQVNFLAkvKiBPbmx5IG9uIDM2MzAgKi8KIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzN4eHgodm9pZCkKQEAgLTEwOCw2ICs5OCwyNyBAQAogCW9tYXAyX3NldF9nbG9iYWxzXzN4eHgoKTsKIAlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CisKKy8qCisgKiBBZGp1c3QgVEFQIHJlZ2lzdGVyIGJhc2Ugc3VjaCB0aGF0IG9tYXAzX2NoZWNrX3JldmlzaW9uIGFjY2Vzc2VzIHRoZSBjb3JyZWN0CisgKiBUSTgxNlggcmVnaXN0ZXIgZm9yIGNoZWNraW5nIGRldmljZSBJRCAoaXQgYWRkcyAweDIwNCB0byB0YXAgYmFzZSB3aGlsZQorICogVEk4MTZYIERFVklDRSBJRCByZWdpc3RlciBpcyBhdCBvZmZzZXQgMHg2MDAgZnJvbSBjb250cm9sIGJhc2UpLgorICovCisjZGVmaW5lIFRJODE2WF9UQVBfQkFTRQkJKFRJODE2WF9DVFJMX0JBU0UgKyBcCisJCQkJVEk4MTZYX0NPTlRST0xfREVWSUNFX0lEIC0gMHgyMDQpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9nbG9iYWxzIHRpODE2eF9nbG9iYWxzID0geworCS5jbGFzcyAgPSBPTUFQMzQzWF9DTEFTUywKKwkudGFwICAgID0gT01BUDJfTDRfSU9fQUREUkVTUyhUSTgxNlhfVEFQX0JBU0UpLAorCS5jdHJsICAgPSBUSTgxNlhfQ1RSTF9CQVNFLAorCS5wcm0gICAgPSBUSTgxNlhfUFJDTV9CQVNFLAorCS5jbSAgICAgPSBUSTgxNlhfUFJDTV9CQVNFLAorfTsKKwordm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfdGk4MTZ4KHZvaWQpCit7CisJX19vbWFwMl9zZXRfZ2xvYmFscygmdGk4MTZ4X2dsb2JhbHMpOworfQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQpAQCAtMTE5LDEwICsxMzAsNiBAQAogCS5wcm0JPSBPTUFQNDQzMF9QUk1fQkFTRSwKIAkuY20JPSBPTUFQNDQzMF9DTV9CQVNFLAogCS5jbTIJPSBPTUFQNDQzMF9DTTJfQkFTRSwKLQkudWFydDFfcGh5cwk9IE9NQVA0X1VBUlQxX0JBU0UsCi0JLnVhcnQyX3BoeXMJPSBPTUFQNF9VQVJUMl9CQVNFLAotCS51YXJ0M19waHlzCT0gT01BUDRfVUFSVDNfQkFTRSwKLQkudWFydDRfcGh5cwk9IE9NQVA0X1VBUlQ0X0JBU0UsCiB9OwogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc180NDN4KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5oCmluZGV4IGYwNjI5YWUuLmMyODA0YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5oCkBAIC01Miw2ICs1Miw5IEBACiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfUEFEQ09ORlNfV0tVUAkweGEwMAogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0dFTkVSQUxfV0tVUAkweGE2MAogCisvKiBUSTgxNlggc3BlZmljIGNvbnRyb2wgc3VibW9kdWxlcyAqLworI2RlZmluZSBUSTgxNlhfQ09OVFJPTF9ERVZDT05GCQkweDYwMAorCiAvKiBDb250cm9sIHJlZ2lzdGVyIG9mZnNldHMgLSByZWFkL3dyaXRlIHdpdGggb21hcF9jdHJsX3tyZWFkLHdyaXRlfXtid2x9KCkgKi8KIAogI2RlZmluZSBPTUFQMl9DT05UUk9MX1NZU0NPTkZJRwkJKE9NQVAyX0NPTlRST0xfSU5URVJGQUNFICsgMHgxMCkKQEAgLTI0MSw2ICsyNDQsOSBAQAogI2RlZmluZSBPTUFQM19QQURDT05GX1NBRDJEX01TVEFOREJZICAgMHgyNTAKICNkZWZpbmUgT01BUDNfUEFEQ09ORl9TQUQyRF9JRExFQUNLICAgIDB4MjU0CiAKKy8qIFRJODE2WCBDT05UUk9MX0RFVkNPTkYgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBUSTgxNlhfQ09OVFJPTF9ERVZJQ0VfSUQJKFRJODE2WF9DT05UUk9MX0RFVkNPTkYgKyAweDAwMCkKKwogLyoKICAqIFJFVklTSVQ6IFRoaXMgbGlzdCBvZiByZWdpc3RlcnMgaXMgbm90IGNvbXByZWhlbnNpdmUgLSB0aGVyZSBhcmUgbW9yZQogICogdGhhdCBzaG91bGQgYmUgYWRkZWQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMKaW5kZXggZjdiMjJhMS4uYTQ0YzUyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYwpAQCAtNTgsNiArNTgsNyBAQAogCXUzMiBjb3JlX3N0YXRlOwogCXUzMiB0aHJlc2hvbGQ7CiAJdTMyIGZsYWdzOworCWNvbnN0IGNoYXIgKmRlc2M7CiB9OwogCiBzdHJ1Y3Qgb21hcDNfcHJvY2Vzc29yX2N4IG9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19NQVhfU1RBVEVTXTsKQEAgLTk5LDE0ICsxMDAsMTQgQEAKIHN0YXRpYyBpbnQgX2NwdWlkbGVfYWxsb3dfaWRsZShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAogCQkJCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCiB7Ci0Jb21hcDJfY2xrZG1fYWxsb3dfaWRsZShjbGtkbSk7CisJY2xrZG1fYWxsb3dfaWRsZShjbGtkbSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX2NwdWlkbGVfZGVueV9pZGxlKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sCiAJCQkJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQlvbWFwMl9jbGtkbV9kZW55X2lkbGUoY2xrZG0pOworCWNsa2RtX2RlbnlfaWRsZShjbGtkbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2NSw2ICszNjYsNyBAQAogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMV0ubXB1X3N0YXRlID0gUFdSRE1fUE9XRVJfT047CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfT047CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMV0uZGVzYyA9ICJNUFUgT04gKyBDT1JFIE9OIjsKIAogCS8qIEMyIC4gTVBVIFdGSSArIENvcmUgaW5hY3RpdmUgKi8KIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzJdLnZhbGlkID0KQEAgLTM4MCw2ICszODIsNyBAQAogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0uY29yZV9zdGF0ZSA9IFBXUkRNX1BPV0VSX09OOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8CiAJCQkJQ1BVSURMRV9GTEFHX0NIRUNLX0JNOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0uZGVzYyA9ICJNUFUgT04gKyBDT1JFIE9OIjsKIAogCS8qIEMzIC4gTVBVIENTV1IgKyBDb3JlIGluYWN0aXZlICovCiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS52YWxpZCA9CkBAIC0zOTUsNiArMzk4LDcgQEAKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLmNvcmVfc3RhdGUgPSBQV1JETV9QT1dFUl9PTjsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfAogCQkJCUNQVUlETEVfRkxBR19DSEVDS19CTTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLmRlc2MgPSAiTVBVIFJFVCArIENPUkUgT04iOwogCiAJLyogQzQgLiBNUFUgT0ZGICsgQ29yZSBpbmFjdGl2ZSAqLwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0udmFsaWQgPQpAQCAtNDEwLDYgKzQxNCw3IEBACiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfT047CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwKIAkJCQlDUFVJRExFX0ZMQUdfQ0hFQ0tfQk07CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS5kZXNjID0gIk1QVSBPRkYgKyBDT1JFIE9OIjsKIAogCS8qIEM1IC4gTVBVIENTV1IgKyBDb3JlIENTV1IqLwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0udmFsaWQgPQpAQCAtNDI1LDYgKzQzMCw3IEBACiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M1XS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfUkVUOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8CiAJCQkJQ1BVSURMRV9GTEFHX0NIRUNLX0JNOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0uZGVzYyA9ICJNUFUgUkVUICsgQ09SRSBSRVQiOwogCiAJLyogQzYgLiBNUFUgT0ZGICsgQ29yZSBDU1dSICovCiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS52YWxpZCA9CkBAIC00NDAsNiArNDQ2LDcgQEAKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzZdLmNvcmVfc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwKIAkJCQlDUFVJRExFX0ZMQUdfQ0hFQ0tfQk07CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS5kZXNjID0gIk1QVSBPRkYgKyBDT1JFIFJFVCI7CiAKIAkvKiBDNyAuIE1QVSBPRkYgKyBDb3JlIE9GRiAqLwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10udmFsaWQgPQpAQCAtNDU1LDYgKzQ2Miw3IEBACiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M3XS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfT0ZGOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8CiAJCQkJQ1BVSURMRV9GTEFHX0NIRUNLX0JNOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10uZGVzYyA9ICJNUFUgT0ZGICsgQ09SRSBPRkYiOwogCiAJLyoKIAkgKiBFcnJhdHVtIGk1ODM6IGltcGxlbWVudGF0aW9uIGZvciBFUyByZXYgPCBFczEuMiBvbiAzNjMwLiBXZSBjYW5ub3QKQEAgLTQ2NCw3ICs0NzIsNyBAQAogCWlmIChJU19QTTM0WFhfRVJSQVRVTShQTV9TRFJDX1dBS0VVUF9FUlJBVFVNX2k1ODMpKSB7CiAJCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10udmFsaWQgPSAwOwogCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DN10udmFsaWQgPSAwOwotCQlXQVJOX09OQ0UoMSwgIiVzOiBjb3JlIG9mZiBzdGF0ZSBDNyBkaXNhYmxlZCBkdWUgdG8gaTU4M1xuIiwKKwkJcHJfd2FybigiJXM6IGNvcmUgb2ZmIHN0YXRlIEM3IGRpc2FibGVkIGR1ZSB0byBpNTgzXG4iLAogCQkJCV9fZnVuY19fKTsKIAl9CiB9CkBAIC01MTIsNiArNTIwLDcgQEAKIAkJaWYgKGN4LT50eXBlID09IE9NQVAzX1NUQVRFX0MxKQogCQkJZGV2LT5zYWZlX3N0YXRlID0gc3RhdGU7CiAJCXNwcmludGYoc3RhdGUtPm5hbWUsICJDJWQiLCBjb3VudCsxKTsKKwkJc3RybmNweShzdGF0ZS0+ZGVzYywgY3gtPmRlc2MsIENQVUlETEVfREVTQ19MRU4pOwogCQljb3VudCsrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCAyYzljOTEyLi4wZDJkNmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpAQCAtMzAsMTAgKzMxLDc1IEBACiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KICNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CisjaW5jbHVkZSA8cGxhdC9vbWFwNC1rZXlwYWQuaD4KIAogI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKIAorI2RlZmluZSBMM19NT0RVTEVTX01BWF9MRU4gMTIKKyNkZWZpbmUgTDNfTU9EVUxFUyAzCisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAzX2wzX2luaXQodm9pZCkKK3sKKwlpbnQgbDsKKwlzdHJ1Y3Qgb21hcF9od21vZCAqb2g7CisJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKKwljaGFyIG9oX25hbWVbTDNfTU9EVUxFU19NQVhfTEVOXTsKKworCS8qCisJICogVG8gYXZvaWQgY29kZSBydW5uaW5nIG9uIG90aGVyIE9NQVBzIGluCisJICogbXVsdGktb21hcCBidWlsZHMKKwkgKi8KKwlpZiAoIShjcHVfaXNfb21hcDM0eHgoKSkpCisJCXJldHVybiAtRU5PREVWOworCisJbCA9IHNucHJpbnRmKG9oX25hbWUsIEwzX01PRFVMRVNfTUFYX0xFTiwgImwzX21haW4iKTsKKworCW9oID0gb21hcF9od21vZF9sb29rdXAob2hfbmFtZSk7CisKKwlpZiAoIW9oKQorCQlwcl9lcnIoImNvdWxkIG5vdCBsb29rIHVwICVzXG4iLCBvaF9uYW1lKTsKKworCW9kID0gb21hcF9kZXZpY2VfYnVpbGQoIm9tYXBfbDNfc214IiwgMCwgb2gsIE5VTEwsIDAsCisJCQkJCQkJICAgTlVMTCwgMCwgMCk7CisKKwlXQVJOKElTX0VSUihvZCksICJjb3VsZCBub3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzXG4iLCBvaF9uYW1lKTsKKworCXJldHVybiBQVFJfRVJSKG9kKTsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKG9tYXAzX2wzX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwNF9sM19pbml0KHZvaWQpCit7CisJaW50IGwsIGk7CisJc3RydWN0IG9tYXBfaHdtb2QgKm9oWzNdOworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CisJY2hhciBvaF9uYW1lW0wzX01PRFVMRVNfTUFYX0xFTl07CisKKwkvKgorCSAqIFRvIGF2b2lkIGNvZGUgcnVubmluZyBvbiBvdGhlciBPTUFQcyBpbgorCSAqIG11bHRpLW9tYXAgYnVpbGRzCisJICovCisJaWYgKCEoY3B1X2lzX29tYXA0NHh4KCkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBMM19NT0RVTEVTOyBpKyspIHsKKwkJbCA9IHNucHJpbnRmKG9oX25hbWUsIEwzX01PRFVMRVNfTUFYX0xFTiwgImwzX21haW5fJWQiLCBpKzEpOworCisJCW9oW2ldID0gb21hcF9od21vZF9sb29rdXAob2hfbmFtZSk7CisJCWlmICghKG9oW2ldKSkKKwkJCXByX2VycigiY291bGQgbm90IGxvb2sgdXAgJXNcbiIsIG9oX25hbWUpOworCX0KKworCW9kID0gb21hcF9kZXZpY2VfYnVpbGRfc3MoIm9tYXBfbDNfbm9jIiwgMCwgb2gsIDMsIE5VTEwsCisJCQkJCQkgICAgIDAsIE5VTEwsIDAsIDApOworCisJV0FSTihJU19FUlIob2QpLCAiY291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlc1xuIiwgb2hfbmFtZSk7CisKKwlyZXR1cm4gUFRSX0VSUihvZCk7Cit9Citwb3N0Y29yZV9pbml0Y2FsbChvbWFwNF9sM19pbml0KTsKKwogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19PTUFQMl9NT0RVTEUpCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2FtX3Jlc291cmNlc1tdID0gewpAQCAtMTQxLDk2ICsyMDcsNzAgQEAKIH0KICNlbmRpZgogCitzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSBvbWFwX2tleWJvYXJkX2xhdGVuY3lbXSA9IHsKKwl7CisJCS5kZWFjdGl2YXRlX2Z1bmMgPSBvbWFwX2RldmljZV9pZGxlX2h3bW9kcywKKwkJLmFjdGl2YXRlX2Z1bmMgICA9IG9tYXBfZGV2aWNlX2VuYWJsZV9od21vZHMsCisJCS5mbGFncyA9IE9NQVBfREVWSUNFX0xBVEVOQ1lfQVVUT19BREpVU1QsCisJfSwKK307CisKK2ludCBfX2luaXQgb21hcDRfa2V5Ym9hcmRfaW5pdChzdHJ1Y3Qgb21hcDRfa2V5cGFkX3BsYXRmb3JtX2RhdGEKKwkJCQkJCSpzZHA0NDMwX2tleXBhZF9kYXRhKQoreworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CisJc3RydWN0IG9tYXBfaHdtb2QgKm9oOworCXN0cnVjdCBvbWFwNF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqa2V5cGFkX2RhdGE7CisJdW5zaWduZWQgaW50IGlkID0gLTE7CisJY2hhciAqb2hfbmFtZSA9ICJrYmQiOworCWNoYXIgKm5hbWUgPSAib21hcDQta2V5cGFkIjsKKworCW9oID0gb21hcF9od21vZF9sb29rdXAob2hfbmFtZSk7CisJaWYgKCFvaCkgeworCQlwcl9lcnIoIkNvdWxkIG5vdCBsb29rIHVwICVzXG4iLCBvaF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJa2V5cGFkX2RhdGEgPSBzZHA0NDMwX2tleXBhZF9kYXRhOworCisJb2QgPSBvbWFwX2RldmljZV9idWlsZChuYW1lLCBpZCwgb2gsIGtleXBhZF9kYXRhLAorCQkJc2l6ZW9mKHN0cnVjdCBvbWFwNF9rZXlwYWRfcGxhdGZvcm1fZGF0YSksCisJCQlvbWFwX2tleWJvYXJkX2xhdGVuY3ksCisJCQlBUlJBWV9TSVpFKG9tYXBfa2V5Ym9hcmRfbGF0ZW5jeSksIDApOworCisJaWYgKElTX0VSUihvZCkpIHsKKwkJV0FSTigxLCAiQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAorCQkJCQkJbmFtZSwgb2gtPm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihvZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01CT1hfRldLKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX01CT1hfRldLX01PRFVMRSkKLQotI2RlZmluZSBNQk9YX1JFR19TSVpFICAgMHgxMjAKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyX21ib3hfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gT01BUDI0WFhfTUFJTEJPWF9CQVNFLAotCQkuZW5kCQk9IE9NQVAyNFhYX01BSUxCT1hfQkFTRSArIE1CT1hfUkVHX1NJWkUgLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCitzdGF0aWMgc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgbWJveF9sYXRlbmNpZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5hY3RpdmF0ZV9mdW5jID0gb21hcF9kZXZpY2VfZW5hYmxlX2h3bW9kcywKKwkJLmRlYWN0aXZhdGVfZnVuYyA9IG9tYXBfZGV2aWNlX2lkbGVfaHdtb2RzLAorCQkuZmxhZ3MgPSBPTUFQX0RFVklDRV9MQVRFTkNZX0FVVE9fQURKVVNULAogCX0sCi0JewotCQkuc3RhcnQJCT0gSU5UXzI0WFhfTUFJTF9VMF9NUFUsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQkJLm5hbWUJCT0gImRzcCIsCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSBJTlRfMjRYWF9NQUlMX1UzX01QVSwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCQkubmFtZQkJPSAiaXZhIiwKLQl9LAotfTsKLXN0YXRpYyBpbnQgb21hcDJfbWJveF9yZXNvdXJjZXNfc3ogPSBBUlJBWV9TSVpFKG9tYXAyX21ib3hfcmVzb3VyY2VzKTsKLSNlbHNlCi0jZGVmaW5lIG9tYXAyX21ib3hfcmVzb3VyY2VzCQlOVUxMCi0jZGVmaW5lIG9tYXAyX21ib3hfcmVzb3VyY2VzX3N6CQkwCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAzX21ib3hfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gT01BUDM0WFhfTUFJTEJPWF9CQVNFLAotCQkuZW5kCQk9IE9NQVAzNFhYX01BSUxCT1hfQkFTRSArIE1CT1hfUkVHX1NJWkUgLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSBJTlRfMjRYWF9NQUlMX1UwX01QVSwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCQkubmFtZQkJPSAiZHNwIiwKLQl9LAotfTsKLXN0YXRpYyBpbnQgb21hcDNfbWJveF9yZXNvdXJjZXNfc3ogPSBBUlJBWV9TSVpFKG9tYXAzX21ib3hfcmVzb3VyY2VzKTsKLSNlbHNlCi0jZGVmaW5lIG9tYXAzX21ib3hfcmVzb3VyY2VzCQlOVUxMCi0jZGVmaW5lIG9tYXAzX21ib3hfcmVzb3VyY2VzX3N6CQkwCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0KLSNkZWZpbmUgT01BUDRfTUJPWF9SRUdfU0laRQkweDEzMAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwNF9tYm94X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ICAgICAgICAgID0gT01BUDQ0WFhfTUFJTEJPWF9CQVNFLAotCQkuZW5kICAgICAgICAgICAgPSBPTUFQNDRYWF9NQUlMQk9YX0JBU0UgKwotCQkJCQlPTUFQNF9NQk9YX1JFR19TSVpFIC0gMSwKLQkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydCAgICAgICAgICA9IE9NQVA0NFhYX0lSUV9NQUlMX1UwLAotCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX0lSUSwKLQkJLm5hbWUJCT0gIm1ib3giLAotCX0sCi19Owotc3RhdGljIGludCBvbWFwNF9tYm94X3Jlc291cmNlc19zeiA9IEFSUkFZX1NJWkUob21hcDRfbWJveF9yZXNvdXJjZXMpOwotI2Vsc2UKLSNkZWZpbmUgb21hcDRfbWJveF9yZXNvdXJjZXMJCU5VTEwKLSNkZWZpbmUgb21hcDRfbWJveF9yZXNvdXJjZXNfc3oJCTAKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYm94X2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcC1tYWlsYm94IiwKLQkuaWQJCT0gLTEsCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21ib3godm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJbWJveF9kZXZpY2UucmVzb3VyY2UgPSBvbWFwMl9tYm94X3Jlc291cmNlczsKLQkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IG9tYXAyX21ib3hfcmVzb3VyY2VzX3N6OwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJbWJveF9kZXZpY2UucmVzb3VyY2UgPSBvbWFwM19tYm94X3Jlc291cmNlczsKLQkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IG9tYXAzX21ib3hfcmVzb3VyY2VzX3N6OwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJbWJveF9kZXZpY2UucmVzb3VyY2UgPSBvbWFwNF9tYm94X3Jlc291cmNlczsKLQkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IG9tYXA0X21ib3hfcmVzb3VyY2VzX3N6OwotCX0gZWxzZSB7Ci0JCXByX2VycigiJXM6IHBsYXRmb3JtIG5vdCBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKKwlzdHJ1Y3Qgb21hcF9od21vZCAqb2g7CisJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKKworCW9oID0gb21hcF9od21vZF9sb29rdXAoIm1haWxib3giKTsKKwlpZiAoIW9oKSB7CisJCXByX2VycigiJXM6IHVuYWJsZSB0byBmaW5kIGh3bW9kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYm94X2RldmljZSk7CisKKwlvZCA9IG9tYXBfZGV2aWNlX2J1aWxkKCJvbWFwLW1haWxib3giLCAtMSwgb2gsIE5VTEwsIDAsCisJCQkJbWJveF9sYXRlbmNpZXMsIEFSUkFZX1NJWkUobWJveF9sYXRlbmNpZXMpLCAwKTsKKwlXQVJOKElTX0VSUihvZCksICIlczogY291bGQgbm90IGJ1aWxkIGRldmljZSwgZXJyICVsZFxuIiwKKwkJCQkJCV9fZnVuY19fLCBQVFJfRVJSKG9kKSk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tYm94KHZvaWQpIHsgfQpAQCAtMjc5LDE2MyArMzE5LDU1IEBACiAKICNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CiAKLSNkZWZpbmUgT01BUDJfTUNTUEkxX0JBU0UJCTB4NDgwOTgwMDAKLSNkZWZpbmUgT01BUDJfTUNTUEkyX0JBU0UJCTB4NDgwOWEwMDAKLSNkZWZpbmUgT01BUDJfTUNTUEkzX0JBU0UJCTB4NDgwYjgwMDAKLSNkZWZpbmUgT01BUDJfTUNTUEk0X0JBU0UJCTB4NDgwYmEwMDAKLQotI2RlZmluZSBPTUFQNF9NQ1NQSTFfQkFTRQkJMHg0ODA5ODEwMAotI2RlZmluZSBPTUFQNF9NQ1NQSTJfQkFTRQkJMHg0ODA5YTEwMAotI2RlZmluZSBPTUFQNF9NQ1NQSTNfQkFTRQkJMHg0ODBiODEwMAotI2RlZmluZSBPTUFQNF9NQ1NQSTRfQkFTRQkJMHg0ODBiYTEwMAotCi1zdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTFfY29uZmlnID0gewotCS5udW1fY3MJCT0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWNzcGkxX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX01DU1BJMV9CQVNFLAotCQkuZW5kCQk9IE9NQVAyX01DU1BJMV9CQVNFICsgMHhmZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgb21hcF9tY3NwaV9sYXRlbmN5W10gPSB7CisJWzBdID0geworCQkuZGVhY3RpdmF0ZV9mdW5jID0gb21hcF9kZXZpY2VfaWRsZV9od21vZHMsCisJCS5hY3RpdmF0ZV9mdW5jICAgPSBvbWFwX2RldmljZV9lbmFibGVfaHdtb2RzLAorCQkuZmxhZ3MJCSA9IE9NQVBfREVWSUNFX0xBVEVOQ1lfQVVUT19BREpVU1QsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAyX21jc3BpMSA9IHsKLQkubmFtZQkJPSAib21hcDJfbWNzcGkiLAotCS5pZAkJPSAxLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvbWFwMl9tY3NwaTFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBvbWFwMl9tY3NwaTFfcmVzb3VyY2VzLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwMl9tY3NwaTFfY29uZmlnLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTJfY29uZmlnID0gewotCS5udW1fY3MJCT0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWNzcGkyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX01DU1BJMl9CQVNFLAotCQkuZW5kCQk9IE9NQVAyX01DU1BJMl9CQVNFICsgMHhmZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTIgPSB7Ci0JLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKLQkuaWQJCT0gMiwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfbWNzcGkyX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gb21hcDJfbWNzcGkyX3Jlc291cmNlcywKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDJfbWNzcGkyX2NvbmZpZywKLQl9LAotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgb21hcDJfbWNzcGkzX2NvbmZpZyA9IHsKLQkubnVtX2NzCQk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyX21jc3BpM19yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JLnN0YXJ0CQk9IE9NQVAyX01DU1BJM19CQVNFLAotCS5lbmQJCT0gT01BUDJfTUNTUEkzX0JBU0UgKyAweGZmLAotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkzID0gewotCS5uYW1lCQk9ICJvbWFwMl9tY3NwaSIsCi0JLmlkCQk9IDMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXAyX21jc3BpM19yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG9tYXAyX21jc3BpM19yZXNvdXJjZXMsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXAyX21jc3BpM19jb25maWcsCi0JfSwKLX07Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi1zdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTRfY29uZmlnID0gewotCS5udW1fY3MJCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWNzcGk0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX01DU1BJNF9CQVNFLAotCQkuZW5kCQk9IE9NQVAyX01DU1BJNF9CQVNFICsgMHhmZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTQgPSB7Ci0JLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKLQkuaWQJCT0gNCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfbWNzcGk0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gb21hcDJfbWNzcGk0X3Jlc291cmNlcywKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDJfbWNzcGk0X2NvbmZpZywKLQl9LAotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwNF9tY3NwaV9maXh1cCh2b2lkKQorc3RhdGljIGludCBvbWFwX21jc3BpX2luaXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICp1bnVzZWQpCiB7Ci0Jb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMV9CQVNFOwotCW9tYXAyX21jc3BpMV9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkxX0JBU0UgKyAweGZmOwotCW9tYXAyX21jc3BpMl9yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTJfQkFTRTsKLQlvbWFwMl9tY3NwaTJfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMl9CQVNFICsgMHhmZjsKLQlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkzX0JBU0U7Ci0Jb21hcDJfbWNzcGkzX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTNfQkFTRSArIDB4ZmY7Ci0Jb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJNF9CQVNFOwotCW9tYXAyX21jc3BpNF9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEk0X0JBU0UgKyAweGZmOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwNF9tY3NwaV9maXh1cCh2b2lkKQotewotfQotI2VuZGlmCisJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKKwljaGFyICpuYW1lID0gIm9tYXAyX21jc3BpIjsKKwlzdHJ1Y3Qgb21hcDJfbWNzcGlfcGxhdGZvcm1fY29uZmlnICpwZGF0YTsKKwlzdGF0aWMgaW50IHNwaV9udW07CisJc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyICptY3NwaV9hdHRyaWIgPSBvaC0+ZGV2X2F0dHI7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTNfaW5pdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkzKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfbWNzcGkzX2luaXQodm9pZCkKLXsKLX0KLSNlbmRpZgorCXBkYXRhID0ga3phbGxvYyhzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkgeworCQlwcl9lcnIoIk1lbW9yeSBhbGxvY2F0aW9uIGZvciBNY1NQSSBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTRfaW5pdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGk0KTsKKwlwZGF0YS0+bnVtX2NzID0gbWNzcGlfYXR0cmliLT5udW1fY2hpcHNlbGVjdDsKKwlzd2l0Y2ggKG9oLT5jbGFzcy0+cmV2KSB7CisJY2FzZSBPTUFQMl9NQ1NQSV9SRVY6CisJY2FzZSBPTUFQM19NQ1NQSV9SRVY6CisJCQlwZGF0YS0+cmVnc19vZmZzZXQgPSAwOworCQkJYnJlYWs7CisJY2FzZSBPTUFQNF9NQ1NQSV9SRVY6CisJCQlwZGF0YS0+cmVnc19vZmZzZXQgPSBPTUFQNF9NQ1NQSV9SRUdfT0ZGU0VUOworCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJCXByX2VycigiSW52YWxpZCBNY1NQSSBSZXZpc2lvbiB2YWx1ZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGlfbnVtKys7CisJb2QgPSBvbWFwX2RldmljZV9idWlsZChuYW1lLCBzcGlfbnVtLCBvaCwgcGRhdGEsCisJCQkJc2l6ZW9mKCpwZGF0YSksCW9tYXBfbWNzcGlfbGF0ZW5jeSwKKwkJCQlBUlJBWV9TSVpFKG9tYXBfbWNzcGlfbGF0ZW5jeSksIDApOworCVdBUk4oSVNfRVJSKG9kKSwgIkNhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzXG4iLAorCQkJCW5hbWUsIG9oLT5uYW1lKTsKKwlrZnJlZShwZGF0YSk7CisJcmV0dXJuIDA7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpNF9pbml0KHZvaWQpCi17Ci19Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgb21hcF9pbml0X21jc3BpKHZvaWQpCiB7Ci0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQlvbWFwNF9tY3NwaV9maXh1cCgpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkyKTsKLQotCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJb21hcDJfbWNzcGkzX2luaXQoKTsKLQotCWlmIChjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJb21hcDJfbWNzcGk0X2luaXQoKTsKKwlvbWFwX2h3bW9kX2Zvcl9lYWNoX2J5X2NsYXNzKCJtY3NwaSIsIG9tYXBfbWNzcGlfaW5pdCwgTlVMTCk7CiB9CiAKICNlbHNlCkBAIC02MTAsMTE3ICs1NDIsMTAgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkKIAotI2RlZmluZSBNTUNIU19TWVNDT05GSUcJCQkweDAwMTAKLSNkZWZpbmUgTU1DSFNfU1lTQ09ORklHX1NXUkVTRVQJCSgxIDw8IDEpCi0jZGVmaW5lIE1NQ0hTX1NZU1NUQVRVUwkJCTB4MDAxNAotI2RlZmluZSBNTUNIU19TWVNTVEFUVVNfUkVTRVRET05FCSgxIDw8IDApCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGR1bW15X3BkZXYgPSB7Ci0JLmRldiA9IHsKLQkJLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQl9LAotfTsKLQotLyoqCi0gKiBvbWFwX2hzbW1jX3Jlc2V0KCkgLSBGdWxsIHJlc2V0IG9mIGVhY2ggSFMtTU1DIGNvbnRyb2xsZXIKLSAqCi0gKiBFbnN1cmUgdGhhdCBlYWNoIE1NQyBjb250cm9sbGVyIGlzIGZ1bGx5IHJlc2V0LiAgQ29udHJvbGxlcnMKLSAqIGxlZnQgaW4gYW4gdW5rbm93biBzdGF0ZSAoYnkgYm9vdGxvYWRlcikgbWF5IHByZXZlbnQgcmV0ZW50aW9uCi0gKiBvciBPRkYtbW9kZS4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaW4gY2FzZXMgd2hlcmUgdGhlCi0gKiBNTUMgZHJpdmVyIGlzIG5vdCBlbmFibGVkLCBfb3JfIGJ1aWx0IGFzIGEgbW9kdWxlLgotICoKLSAqIEluIG9yZGVyIGZvciByZXNldCB0byB3b3JrLCBpbnRlcmZhY2UsIGZ1bmN0aW9uYWwgYW5kIGRlYm91bmNlCi0gKiBjbG9ja3MgbXVzdCBiZSBlbmFibGVkLiAgVGhlIGRlYm91bmNlIGNsb2NrIGNvbWVzIGZyb20gZnVuY18zMmtfY2xrCi0gKiBhbmQgaXMgbm90IHVuZGVyIFNXIGNvbnRyb2wsIHNvIHdlIG9ubHkgZW5hYmxlIGktIGFuZCBmLWNsb2Nrcy4KLSAqKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2hzbW1jX3Jlc2V0KHZvaWQpCi17Ci0JdTMyIGksIG5yX2NvbnRyb2xsZXJzOwotCXN0cnVjdCBjbGsgKmljbGssICpmY2xrOwotCi0JaWYgKGNwdV9pc19vbWFwMjQyeCgpKQotCQlyZXR1cm47Ci0KLQlucl9jb250cm9sbGVycyA9IGNwdV9pc19vbWFwNDR4eCgpID8gT01BUDQ0WFhfTlJfTU1DIDoKLQkJKGNwdV9pc19vbWFwMzR4eCgpID8gT01BUDM0WFhfTlJfTU1DIDogT01BUDI0WFhfTlJfTU1DKTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9jb250cm9sbGVyczsgaSsrKSB7Ci0JCXUzMiB2LCBiYXNlID0gMDsKLQkJc3RydWN0IGRldmljZSAqZGV2ID0gJmR1bW15X3BkZXYuZGV2OwotCi0JCXN3aXRjaCAoaSkgewotCQljYXNlIDA6Ci0JCQliYXNlID0gT01BUDJfTU1DMV9CQVNFOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWJhc2UgPSBPTUFQMl9NTUMyX0JBU0U7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJYmFzZSA9IE9NQVAzX01NQzNfQkFTRTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQotCQkJCXJldHVybjsKLQkJCWJhc2UgPSBPTUFQNF9NTUM0X0JBU0U7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKLQkJCQlyZXR1cm47Ci0JCQliYXNlID0gT01BUDRfTU1DNV9CQVNFOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCQliYXNlICs9IE9NQVA0X01NQ19SRUdfT0ZGU0VUOwotCi0JCWR1bW15X3BkZXYuaWQgPSBpOwotCQlkZXZfc2V0X25hbWUoJmR1bW15X3BkZXYuZGV2LCAibW1jaS1vbWFwLWhzLiVkIiwgaSk7Ci0JCWljbGsgPSBjbGtfZ2V0KGRldiwgImljayIpOwotCQlpZiAoSVNfRVJSKGljbGspKQotCQkJZ290byBlcnIxOwotCQlpZiAoY2xrX2VuYWJsZShpY2xrKSkKLQkJCWdvdG8gZXJyMjsKLQotCQlmY2xrID0gY2xrX2dldChkZXYsICJmY2siKTsKLQkJaWYgKElTX0VSUihmY2xrKSkKLQkJCWdvdG8gZXJyMzsKLQkJaWYgKGNsa19lbmFibGUoZmNsaykpCi0JCQlnb3RvIGVycjQ7Ci0KLQkJb21hcF93cml0ZWwoTU1DSFNfU1lTQ09ORklHX1NXUkVTRVQsIGJhc2UgKyBNTUNIU19TWVNDT05GSUcpOwotCQl2ID0gb21hcF9yZWFkbChiYXNlICsgTU1DSFNfU1lTU1RBVFVTKTsKLQkJd2hpbGUgKCEob21hcF9yZWFkbChiYXNlICsgTU1DSFNfU1lTU1RBVFVTKSAmCi0JCQkgTU1DSFNfU1lTU1RBVFVTX1JFU0VURE9ORSkpCi0JCQljcHVfcmVsYXgoKTsKLQotCQljbGtfZGlzYWJsZShmY2xrKTsKLQkJY2xrX3B1dChmY2xrKTsKLQkJY2xrX2Rpc2FibGUoaWNsayk7Ci0JCWNsa19wdXQoaWNsayk7Ci0JfQotCXJldHVybjsKLQotZXJyNDoKLQljbGtfcHV0KGZjbGspOwotZXJyMzoKLQljbGtfZGlzYWJsZShpY2xrKTsKLWVycjI6Ci0JY2xrX3B1dChpY2xrKTsKLWVycjE6Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBlbmFibGUgY2xvY2tzIGZvciBNTUMlZCwgIgotCQkJICAgICJjYW5ub3QgcmVzZXQuXG4iLCAgX19mdW5jX18sIGkpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2hzbW1jX3Jlc2V0KHZvaWQpIHt9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IUykgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFNfTU9EVUxFKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfbW1jX211eChzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jX2NvbnRyb2xsZXIsCi0JCQlpbnQgY29udHJvbGxlcl9ucikKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMjQyeF9tbWNfbXV4KHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhCisJCQkJCQkJKm1tY19jb250cm9sbGVyKQogewogCWlmICgobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLnN3aXRjaF9waW4gPiAwKSAmJiBcCiAJCShtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uc3dpdGNoX3BpbiA8IE9NQVBfTUFYX0dQSU9fTElORVMpKQpAQCAtNzMxLDE2MyArNTU2LDQ0IEBACiAJCW9tYXBfbXV4X2luaXRfZ3BpbyhtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uZ3Bpb193cCwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAotCWlmIChjcHVfaXNfb21hcDI0MjAoKSAmJiBjb250cm9sbGVyX25yID09IDApIHsKLQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2NtZCIsIDApOwotCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfY2xraSIsIDApOwotCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfY2xrbyIsIDApOwotCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0MCIsIDApOwotCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0X2RpcjAiLCAwKTsKLQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2NtZF9kaXIiLCAwKTsKLQkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5jYXBzICYgTU1DX0NBUF80X0JJVF9EQVRBKSB7Ci0JCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0MSIsIDApOwotCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2RhdDIiLCAwKTsKLQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXQzIiwgMCk7Ci0JCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0X2RpcjEiLCAwKTsKLQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXRfZGlyMiIsIDApOwotCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2RhdF9kaXIzIiwgMCk7Ci0JCX0KLQotCQkvKgotCQkgKiBVc2UgaW50ZXJuYWwgbG9vcC1iYWNrIGluIE1NQy9TRElPIE1vZHVsZSBJbnB1dCBDbG9jawotCQkgKiBzZWxlY3Rpb24KLQkJICovCi0JCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uaW50ZXJuYWxfY2xvY2spIHsKLQkJCXUzMiB2ID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwotCQkJdiB8PSAoMSA8PCAyNCk7Ci0JCQlvbWFwX2N0cmxfd3JpdGVsKHYsIE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwotCQl9CisJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2NtZCIsIDApOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19jbGtpIiwgMCk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2Nsa28iLCAwKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0MCIsIDApOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXRfZGlyMCIsIDApOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19jbWRfZGlyIiwgMCk7CisJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5jYXBzICYgTU1DX0NBUF80X0JJVF9EQVRBKSB7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXQxIiwgMCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXQyIiwgMCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXQzIiwgMCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXRfZGlyMSIsIDApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0X2RpcjIiLCAwKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2RhdF9kaXIzIiwgMCk7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCWlmIChjb250cm9sbGVyX25yID09IDApIHsKLQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfY2xrIiwKLQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9jbWQiLAotCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci0JCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDAiLAotCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci0JCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmNhcHMgJgotCQkJCShNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7Ci0JCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQxIiwKLQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLQkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDIiLAotCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0MyIsCi0JCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci0JCQl9Ci0JCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmNhcHMgJgotCQkJCQkJTU1DX0NBUF84X0JJVF9EQVRBKSB7Ci0JCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQ0IiwKLQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLQkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDUiLAotCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0NiIsCi0JCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci0JCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQ3IiwKLQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLQkJCX0KLQkJfQotCQlpZiAoY29udHJvbGxlcl9uciA9PSAxKSB7Ci0JCQkvKiBNTUMyICovCi0JCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2NsayIsCi0JCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfY21kIiwKLQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQwIiwKLQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCi0JCQkvKgotCQkJICogRm9yIDggd2lyZSBjb25maWd1cmF0aW9ucywgTGluZXMgREFUNCwgNSwgNiBhbmQgNyBuZWVkIHRvIGJlIG11eGVkCi0JCQkgKiBpbiB0aGUgYm9hcmQtKi5jIGZpbGVzCi0JCQkgKi8KLQkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uY2FwcyAmCi0JCQkJKE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSkpIHsKLQkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDEiLAotCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0MiIsCi0JCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci0JCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQzIiwKLQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLQkJCX0KLQkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uY2FwcyAmCi0JCQkJCQkJTU1DX0NBUF84X0JJVF9EQVRBKSB7Ci0JCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQ0LnNkbW1jMl9kYXQ0IiwKLQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLQkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDUuc2RtbWMyX2RhdDUiLAotCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0Ni5zZG1tYzJfZGF0NiIsCi0JCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci0JCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQ3LnNkbW1jMl9kYXQ3IiwKLQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIEZvciBNTUMzIHRoZSBwaW5zIG5lZWQgdG8gYmUgbXV4ZWQgaW4gdGhlIGJvYXJkLSouYyBmaWxlcwotCQkgKi8KKwkvKgorCSAqIFVzZSBpbnRlcm5hbCBsb29wLWJhY2sgaW4gTU1DL1NESU8gTW9kdWxlIElucHV0IENsb2NrCisJICogc2VsZWN0aW9uCisJICovCisJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgeworCQl1MzIgdiA9IG9tYXBfY3RybF9yZWFkbChPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKKwkJdiB8PSAoMSA8PCAyNCk7CisJCW9tYXBfY3RybF93cml0ZWwodiwgT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CiAJfQogfQogCi12b2lkIF9faW5pdCBvbWFwMl9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhLAotCQkJaW50IG5yX2NvbnRyb2xsZXJzKQordm9pZCBfX2luaXQgb21hcDI0MnhfaW5pdF9tbWMoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKiptbWNfZGF0YSkKIHsKLQlpbnQgaTsKLQljaGFyICpuYW1lOworCWNoYXIgKm5hbWUgPSAibW1jaS1vbWFwIjsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9jb250cm9sbGVyczsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZTsKLQkJdW5zaWduZWQgaW50IGlycSA9IDA7CisJaWYgKCFtbWNfZGF0YVswXSkgeworCQlwcl9lcnIoIiVzIGZhaWxzOiBJbmNvbXBsZXRlIHBsYXRmb3JtIGRhdGFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KIAotCQlpZiAoIW1tY19kYXRhW2ldKQotCQkJY29udGludWU7Ci0KLQkJb21hcDJfbW1jX211eChtbWNfZGF0YVtpXSwgaSk7Ci0KLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgMDoKLQkJCWJhc2UgPSBPTUFQMl9NTUMxX0JBU0U7Ci0JCQlpcnEgPSBJTlRfMjRYWF9NTUNfSVJROwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWJhc2UgPSBPTUFQMl9NTUMyX0JBU0U7Ci0JCQlpcnEgPSBJTlRfMjRYWF9NTUMyX0lSUTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkKLQkJCQlyZXR1cm47Ci0JCQliYXNlID0gT01BUDNfTU1DM19CQVNFOwotCQkJaXJxID0gSU5UXzM0WFhfTU1DM19JUlE7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKLQkJCQlyZXR1cm47Ci0JCQliYXNlID0gT01BUDRfTU1DNF9CQVNFOwotCQkJaXJxID0gT01BUDQ0WFhfSVJRX01NQzQ7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKLQkJCQlyZXR1cm47Ci0JCQliYXNlID0gT01BUDRfTU1DNV9CQVNFOwotCQkJaXJxID0gT01BUDQ0WFhfSVJRX01NQzU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7Ci0JCQlzaXplID0gT01BUDI0MjBfTU1DX1NJWkU7Ci0JCQluYW1lID0gIm1tY2ktb21hcCI7Ci0JCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJCWlmIChpIDwgMykKLQkJCQlpcnEgKz0gT01BUDQ0WFhfSVJRX0dJQ19TVEFSVDsKLQkJCXNpemUgPSBPTUFQNF9IU01NQ19TSVpFOwotCQkJbmFtZSA9ICJtbWNpLW9tYXAtaHMiOwotCQl9IGVsc2UgewotCQkJc2l6ZSA9IE9NQVAzX0hTTU1DX1NJWkU7Ci0JCQluYW1lID0gIm1tY2ktb21hcC1ocyI7Ci0JCX0KLQkJb21hcF9tbWNfYWRkKG5hbWUsIGksIGJhc2UsIHNpemUsIGlycSwgbW1jX2RhdGFbaV0pOwotCX07CisJb21hcDI0MnhfbW1jX211eChtbWNfZGF0YVswXSk7CisJb21hcF9tbWNfYWRkKG5hbWUsIDAsIE9NQVAyX01NQzFfQkFTRSwgT01BUDI0MjBfTU1DX1NJWkUsCisJCQkJCUlOVF8yNFhYX01NQ19JUlEsIG1tY19kYXRhWzBdKTsKIH0KIAogI2VuZGlmCkBAIC04OTUsNyArNjAxLDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZiBkZWZpbmVkKENPTkZJR19IRFFfTUFTVEVSX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0hEUV9NQVNURVJfT01BUF9NT0RVTEUpCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzQzMCkKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19PTUFQMzQzMCkKICNkZWZpbmUgT01BUF9IRFFfQkFTRQkweDQ4MEIyMDAwCiAjZW5kaWYKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcF9oZHFfcmVzb3VyY2VzW10gPSB7CkBAIC05NjEsNyArNjY3LDYgQEAKIAkgKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwotCW9tYXBfaHNtbWNfcmVzZXQoKTsKIAlvbWFwX2luaXRfYXVkaW8oKTsKIAlvbWFwX2luaXRfY2FtZXJhKCk7CiAJb21hcF9pbml0X21ib3goKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGlzcGxheS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kaXNwbGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4ZGI4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGlzcGxheS5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBPTUFQMnBsdXMgZGlzcGxheSBkZXZpY2Ugc2V0dXAgLyBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKglTZW50aGlsdmFkaXZ1IEd1cnVzd2FteQorICoJU3VtaXQgU2Vtd2FsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfZGlzcGxheV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgPSAib21hcGRzcyIsCisJLmlkICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKKwl9LAorfTsKKworaW50IF9faW5pdCBvbWFwX2Rpc3BsYXlfaW5pdChzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyAqYm9hcmRfZGF0YSkKK3sKKwlpbnQgciA9IDA7CisJb21hcF9kaXNwbGF5X2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGJvYXJkX2RhdGE7CisKKwlyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX2Rpc3BsYXlfZGV2aWNlKTsKKwlpZiAociA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIE9NQVAtRGlzcGxheSBkZXZpY2VcbiIpOworCisJcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGw0NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGw0NHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0ZGE2MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDQ0eHguYwpAQCAtMCwwICsxLDg0IEBACisvKgorICogT01BUDQtc3BlY2lmaWMgRFBMTCBjb250cm9sIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogUmFqZW5kcmEgTmF5YWsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy00NHh4LmgiCisKKy8qIFN1cHBvcnRlZCBvbmx5IG9uIE9NQVA0ICovCitpbnQgb21hcDRfZHBsbG14X2dhdGVjdHJsX3JlYWQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB2OworCXUzMiBtYXNrOworCisJaWYgKCFjbGsgfHwgIWNsay0+Y2xrc2VsX3JlZyB8fCAhY3B1X2lzX29tYXA0NHh4KCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbWFzayA9IGNsay0+ZmxhZ3MgJiBDTE9DS19DTEtPVVRYMiA/CisJCQlPTUFQNDQzMF9EUExMX0NMS09VVFgyX0dBVEVfQ1RSTF9NQVNLIDoKKwkJCU9NQVA0NDMwX0RQTExfQ0xLT1VUX0dBVEVfQ1RSTF9NQVNLOworCisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7CisJdiAmPSBtYXNrOworCXYgPj49IF9fZmZzKG1hc2spOworCisJcmV0dXJuIHY7Cit9CisKK3ZvaWQgb21hcDRfZHBsbG14X2FsbG93X2dhdGVjdHJsKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgdjsKKwl1MzIgbWFzazsKKworCWlmICghY2xrIHx8ICFjbGstPmNsa3NlbF9yZWcgfHwgIWNwdV9pc19vbWFwNDR4eCgpKQorCQlyZXR1cm47CisKKwltYXNrID0gY2xrLT5mbGFncyAmIENMT0NLX0NMS09VVFgyID8KKwkJCU9NQVA0NDMwX0RQTExfQ0xLT1VUWDJfR0FURV9DVFJMX01BU0sgOgorCQkJT01BUDQ0MzBfRFBMTF9DTEtPVVRfR0FURV9DVFJMX01BU0s7CisKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsKKwkvKiBDbGVhciB0aGUgYml0IHRvIGFsbG93IGdhdGVjdHJsICovCisJdiAmPSB+bWFzazsKKwlfX3Jhd193cml0ZWwodiwgY2xrLT5jbGtzZWxfcmVnKTsKK30KKwordm9pZCBvbWFwNF9kcGxsbXhfZGVueV9nYXRlY3RybChzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHY7CisJdTMyIG1hc2s7CisKKwlpZiAoIWNsayB8fCAhY2xrLT5jbGtzZWxfcmVnIHx8ICFjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmV0dXJuOworCisJbWFzayA9IGNsay0+ZmxhZ3MgJiBDTE9DS19DTEtPVVRYMiA/CisJCQlPTUFQNDQzMF9EUExMX0NMS09VVFgyX0dBVEVfQ1RSTF9NQVNLIDoKKwkJCU9NQVA0NDMwX0RQTExfQ0xLT1VUX0dBVEVfQ1RSTF9NQVNLOworCisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7CisJLyogU2V0IHRoZSBiaXQgdG8gZGVueSBnYXRlY3RybCAqLworCXYgfD0gbWFzazsKKwlfX3Jhd193cml0ZWwodiwgY2xrLT5jbGtzZWxfcmVnKTsKK30KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDRfZHBsbG14X29wcyA9IHsKKwkuYWxsb3dfaWRsZQk9IG9tYXA0X2RwbGxteF9hbGxvd19nYXRlY3RybCwKKwkuZGVueV9pZGxlCT0gb21hcDRfZHBsbG14X2RlbnlfZ2F0ZWN0cmwsCit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYwppbmRleCAyYmIyOWMxLi5jMTc5MWQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCkBAIC02OSw4ICs3MCwxMCBAQAogCXQud3JfY3ljbGUgID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT53cl9jeWNsZSk7CiAKIAkvKiBDb25maWd1cmUgR1BNQyAqLwotCWdwbWNfY3NfY29uZmlndXJlKGdwbWNfbmFuZF9kYXRhLT5jcywKLQkJCQlHUE1DX0NPTkZJR19ERVZfU0laRSwgZ3BtY19uYW5kX2RhdGEtPmRldnNpemUpOworCWlmIChncG1jX25hbmRfZGF0YS0+ZGV2c2l6ZSA9PSBOQU5EX0JVU1dJRFRIXzE2KQorCQlncG1jX2NzX2NvbmZpZ3VyZShncG1jX25hbmRfZGF0YS0+Y3MsIEdQTUNfQ09ORklHX0RFVl9TSVpFLCAxKTsKKwllbHNlCisJCWdwbWNfY3NfY29uZmlndXJlKGdwbWNfbmFuZF9kYXRhLT5jcywgR1BNQ19DT05GSUdfREVWX1NJWkUsIDApOwogCWdwbWNfY3NfY29uZmlndXJlKGdwbWNfbmFuZF9kYXRhLT5jcywKIAkJCUdQTUNfQ09ORklHX0RFVl9UWVBFLCBHUE1DX0RFVklDRVRZUEVfTkFORCk7CiAJZXJyID0gZ3BtY19jc19zZXRfdGltaW5ncyhncG1jX25hbmRfZGF0YS0+Y3MsICZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5jCmluZGV4IDNhN2QyNWYuLmQ3NzZkZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuYwpAQCAtOTQsNyArOTQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzZXRfb25lbmFuZF9jZmcodm9pZCBfX2lvbWVtICpvbmVuYW5kX2Jhc2UsIGludCBsYXRlbmN5LAotCQkJCWludCBzeW5jX3JlYWQsIGludCBzeW5jX3dyaXRlLCBpbnQgaGYpCisJCQkJaW50IHN5bmNfcmVhZCwgaW50IHN5bmNfd3JpdGUsIGludCBoZiwgaW50IHZoZikKIHsKIAl1MzIgcmVnOwogCkBAIC0xMTQsMTIgKzExNCw1NyBAQAogCQlyZWcgfD0gT05FTkFORF9TWVNfQ0ZHMV9IRjsKIAllbHNlCiAJCXJlZyAmPSB+T05FTkFORF9TWVNfQ0ZHMV9IRjsKKwlpZiAodmhmKQorCQlyZWcgfD0gT05FTkFORF9TWVNfQ0ZHMV9WSEY7CisJZWxzZQorCQlyZWcgJj0gfk9ORU5BTkRfU1lTX0NGRzFfVkhGOwogCXdyaXRldyhyZWcsIG9uZW5hbmRfYmFzZSArIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKIH0KIAorc3RhdGljIGludCBvbWFwMl9vbmVuYW5kX2dldF9mcmVxKHN0cnVjdCBvbWFwX29uZW5hbmRfcGxhdGZvcm1fZGF0YSAqY2ZnLAorCQkJCSAgdm9pZCBfX2lvbWVtICpvbmVuYW5kX2Jhc2UsIGJvb2wgKmNsa19kZXApCit7CisJdTE2IHZlciA9IHJlYWR3KG9uZW5hbmRfYmFzZSArIE9ORU5BTkRfUkVHX1ZFUlNJT05fSUQpOworCWludCBmcmVxID0gMDsKKworCWlmIChjZmctPmdldF9mcmVxKSB7CisJCXN0cnVjdCBvbmVuYW5kX2ZyZXFfaW5mbyBmaTsKKworCQlmaS5tYWZfaWQgPSByZWFkdyhvbmVuYW5kX2Jhc2UgKyBPTkVOQU5EX1JFR19NQU5VRkFDVFVSRVJfSUQpOworCQlmaS5kZXZfaWQgPSByZWFkdyhvbmVuYW5kX2Jhc2UgKyBPTkVOQU5EX1JFR19ERVZJQ0VfSUQpOworCQlmaS52ZXJfaWQgPSB2ZXI7CisJCWZyZXEgPSBjZmctPmdldF9mcmVxKCZmaSwgY2xrX2RlcCk7CisJCWlmIChmcmVxKQorCQkJcmV0dXJuIGZyZXE7CisJfQorCisJc3dpdGNoICgodmVyID4+IDQpICYgMHhmKSB7CisJY2FzZSAwOgorCQlmcmVxID0gNDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZnJlcSA9IDU0OworCQlicmVhazsKKwljYXNlIDI6CisJCWZyZXEgPSA2NjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlmcmVxID0gODM7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZnJlcSA9IDEwNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZnJlcSA9IDU0OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZnJlcTsKK30KKwogc3RhdGljIGludCBvbWFwMl9vbmVuYW5kX3NldF9zeW5jX21vZGUoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpjZmcsCiAJCQkJCXZvaWQgX19pb21lbSAqb25lbmFuZF9iYXNlLAotCQkJCQlpbnQgZnJlcSkKKwkJCQkJaW50ICpmcmVxX3B0cikKIHsKIAlzdHJ1Y3QgZ3BtY190aW1pbmdzIHQ7CiAJY29uc3QgaW50IHRfY2VyICA9IDE1OwpAQCAtMTMwLDEwICsxNzUsMTEgQEAKIAljb25zdCBpbnQgdF93cGggID0gMzA7CiAJaW50IG1pbl9ncG1jX2Nsa19wZXJpb2QsIHRfY2VzLCB0X2F2ZHMsIHRfYXZkaCwgdF9hY2gsIHRfYWF2ZGgsIHRfcmR5bzsKIAlpbnQgdGlja19ucywgZGl2LCBmY2xrX29mZnNldF9ucywgZmNsa19vZmZzZXQsIGdwbWNfY2xrX25zLCBsYXRlbmN5OwotCWludCBmaXJzdF90aW1lID0gMCwgaGYgPSAwLCBzeW5jX3JlYWQgPSAwLCBzeW5jX3dyaXRlID0gMDsKKwlpbnQgZmlyc3RfdGltZSA9IDAsIGhmID0gMCwgdmhmID0gMCwgc3luY19yZWFkID0gMCwgc3luY193cml0ZSA9IDA7CiAJaW50IGVyciwgdGlja3NfY2V6OwotCWludCBjcyA9IGNmZy0+Y3M7CisJaW50IGNzID0gY2ZnLT5jcywgZnJlcSA9ICpmcmVxX3B0cjsKIAl1MzIgcmVnOworCWJvb2wgY2xrX2RlcCA9IGZhbHNlOwogCiAJaWYgKGNmZy0+ZmxhZ3MgJiBPTkVOQU5EX1NZTkNfUkVBRCkgewogCQlzeW5jX3JlYWQgPSAxOwpAQCAtMTQ4LDI3ICsxOTQsNyBAQAogCQllcnIgPSBvbWFwMl9vbmVuYW5kX3NldF9hc3luY19tb2RlKGNzLCBvbmVuYW5kX2Jhc2UpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJcmVnID0gcmVhZHcob25lbmFuZF9iYXNlICsgT05FTkFORF9SRUdfVkVSU0lPTl9JRCk7Ci0JCXN3aXRjaCAoKHJlZyA+PiA0KSAmIDB4ZikgewotCQljYXNlIDA6Ci0JCQlmcmVxID0gNDA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJZnJlcSA9IDU0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWZyZXEgPSA2NjsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlmcmVxID0gODM7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJZnJlcSA9IDEwNDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZnJlcSA9IDU0OwotCQkJYnJlYWs7Ci0JCX0KKwkJZnJlcSA9IG9tYXAyX29uZW5hbmRfZ2V0X2ZyZXEoY2ZnLCBvbmVuYW5kX2Jhc2UsICZjbGtfZGVwKTsKIAkJZmlyc3RfdGltZSA9IDE7CiAJfQogCkBAIC0xODAsNyArMjA2LDcgQEAKIAkJdF9hdmRoICA9IDI7CiAJCXRfYWNoICAgPSAzOwogCQl0X2FhdmRoID0gNjsKLQkJdF9yZHlvICA9IDk7CisJCXRfcmR5byAgPSA2OwogCQlicmVhazsKIAljYXNlIDgzOgogCQltaW5fZ3BtY19jbGtfcGVyaW9kID0gMTIwMDA7IC8qIDgzIE1IeiAqLwpAQCAtMjE3LDE2ICsyNDMsMzYgQEAKIAlncG1jX2Nsa19ucyA9IGdwbWNfdGlja3NfdG9fbnMoZGl2KTsKIAlpZiAoZ3BtY19jbGtfbnMgPCAxNSkgLyogPjY2TWh6ICovCiAJCWhmID0gMTsKLQlpZiAoaGYpCisJaWYgKGdwbWNfY2xrX25zIDwgMTIpIC8qID44M01oeiAqLworCQl2aGYgPSAxOworCWlmICh2aGYpCisJCWxhdGVuY3kgPSA4OworCWVsc2UgaWYgKGhmKQogCQlsYXRlbmN5ID0gNjsKIAllbHNlIGlmIChncG1jX2Nsa19ucyA+PSAyNSkgLyogNDAgTUh6Ki8KIAkJbGF0ZW5jeSA9IDM7CiAJZWxzZQogCQlsYXRlbmN5ID0gNDsKIAorCWlmIChjbGtfZGVwKSB7CisJCWlmIChncG1jX2Nsa19ucyA8IDEyKSB7IC8qID44M01oeiAqLworCQkJdF9jZXMgICA9IDM7CisJCQl0X2F2ZHMgID0gNDsKKwkJfSBlbHNlIGlmIChncG1jX2Nsa19ucyA8IDE1KSB7IC8qID42Nk1oeiAqLworCQkJdF9jZXMgICA9IDU7CisJCQl0X2F2ZHMgID0gNDsKKwkJfSBlbHNlIGlmIChncG1jX2Nsa19ucyA8IDI1KSB7IC8qID40ME1oeiAqLworCQkJdF9jZXMgICA9IDY7CisJCQl0X2F2ZHMgID0gNTsKKwkJfSBlbHNlIHsKKwkJCXRfY2VzICAgPSA3OworCQkJdF9hdmRzICA9IDc7CisJCX0KKwl9CisKIAlpZiAoZmlyc3RfdGltZSkKIAkJc2V0X29uZW5hbmRfY2ZnKG9uZW5hbmRfYmFzZSwgbGF0ZW5jeSwKLQkJCQkJc3luY19yZWFkLCBzeW5jX3dyaXRlLCBoZik7CisJCQkJCXN5bmNfcmVhZCwgc3luY193cml0ZSwgaGYsIHZoZik7CiAKIAlpZiAoZGl2ID09IDEpIHsKIAkJcmVnID0gZ3BtY19jc19yZWFkX3JlZyhjcywgR1BNQ19DU19DT05GSUcyKTsKQEAgLTI2NCw2ICszMTAsOSBAQAogCS8qIFJlYWQgKi8KIAl0LmFkdl9yZF9vZmYgPSBncG1jX3RpY2tzX3RvX25zKGZjbGtfb2Zmc2V0ICsgZ3BtY19uc190b190aWNrcyh0X2F2ZGgpKTsKIAl0Lm9lX29uID0gZ3BtY190aWNrc190b19ucyhmY2xrX29mZnNldCArIGdwbWNfbnNfdG9fdGlja3ModF9hY2gpKTsKKwkvKiBGb3JjZSBhdCBsZWFzdCAxIGNsayBiZXR3ZWVuIEFWRCBIaWdoIHRvIE9FIExvdyAqLworCWlmICh0Lm9lX29uIDw9IHQuYWR2X3JkX29mZikKKwkJdC5vZV9vbiA9IHQuYWR2X3JkX29mZiArIGdwbWNfcm91bmRfbnNfdG9fdGlja3MoMSk7CiAJdC5hY2Nlc3MgPSBncG1jX3RpY2tzX3RvX25zKGZjbGtfb2Zmc2V0ICsgKGxhdGVuY3kgKyAxKSAqIGRpdik7CiAJdC5vZV9vZmYgPSB0LmFjY2VzcyArIGdwbWNfcm91bmRfbnNfdG9fdGlja3MoMSk7CiAJdC5jc19yZF9vZmYgPSB0Lm9lX29mZjsKQEAgLTMxNywxOCArMzY2LDIwIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXNldF9vbmVuYW5kX2NmZyhvbmVuYW5kX2Jhc2UsIGxhdGVuY3ksIHN5bmNfcmVhZCwgc3luY193cml0ZSwgaGYpOworCXNldF9vbmVuYW5kX2NmZyhvbmVuYW5kX2Jhc2UsIGxhdGVuY3ksIHN5bmNfcmVhZCwgc3luY193cml0ZSwgaGYsIHZoZik7CisKKwkqZnJlcV9wdHIgPSBmcmVxOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ3BtY19vbmVuYW5kX3NldHVwKHZvaWQgX19pb21lbSAqb25lbmFuZF9iYXNlLCBpbnQgZnJlcSkKK3N0YXRpYyBpbnQgZ3BtY19vbmVuYW5kX3NldHVwKHZvaWQgX19pb21lbSAqb25lbmFuZF9iYXNlLCBpbnQgKmZyZXFfcHRyKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZncG1jX29uZW5hbmRfZGV2aWNlLmRldjsKIAogCS8qIFNldCBzeW5jIHRpbWluZ3MgaW4gR1BNQyAqLwogCWlmIChvbWFwMl9vbmVuYW5kX3NldF9zeW5jX21vZGUoZ3BtY19vbmVuYW5kX2RhdGEsIG9uZW5hbmRfYmFzZSwKLQkJCWZyZXEpIDwgMCkgeworCQkJZnJlcV9wdHIpIDwgMCkgewogCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBzZXQgc3luY2hyb25vdXMgbW9kZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggMWI3YjNlNy4uNjc0MTc0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogI3VuZGVmIERFQlVHCiAKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0yMiw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KQEAgLTU4LDcgKzYwLDYgQEAKICNkZWZpbmUgR1BNQ19DSFVOS19TSElGVAkyNAkJLyogMTYgTUIgKi8KICNkZWZpbmUgR1BNQ19TRUNUSU9OX1NISUZUCTI4CQkvKiAxMjggTUIgKi8KIAotI2RlZmluZSBQUkVGRVRDSF9GSUZPVEhSRVNIT0xECSgweDQwIDw8IDgpCiAjZGVmaW5lIENTX05VTV9TSElGVAkJMjQKICNkZWZpbmUgRU5BQkxFX1BSRUZFVENICQkoMHgxIDw8IDcpCiAjZGVmaW5lIERNQV9NUFVfTU9ERQkJMgpAQCAtMTAwLDYgKzEwMSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpncG1jX2wzX2NsazsKIAorc3RhdGljIGlycXJldHVybl90IGdwbWNfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkZXYpOworCiBzdGF0aWMgdm9pZCBncG1jX3dyaXRlX3JlZyhpbnQgaWR4LCB1MzIgdmFsKQogewogCV9fcmF3X3dyaXRlbCh2YWwsIGdwbWNfYmFzZSArIGlkeCk7CkBAIC00OTcsNiArNTAwLDEwIEBACiAJdTMyIHJlZ3ZhbCA9IDA7CiAKIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgR1BNQ19FTkFCTEVfSVJROgorCQlncG1jX3dyaXRlX3JlZyhHUE1DX0lSUUVOQUJMRSwgd3ZhbCk7CisJCWJyZWFrOworCiAJY2FzZSBHUE1DX1NFVF9JUlFfU1RBVFVTOgogCQlncG1jX3dyaXRlX3JlZyhHUE1DX0lSUVNUQVRVUywgd3ZhbCk7CiAJCWJyZWFrOwpAQCAtNTk4LDE1ICs2MDUsMTkgQEAKIC8qKgogICogZ3BtY19wcmVmZXRjaF9lbmFibGUgLSBjb25maWd1cmVzIGFuZCBzdGFydHMgcHJlZmV0Y2ggdHJhbnNmZXIKICAqIEBjczogY3MgKGNoaXAgc2VsZWN0KSBudW1iZXIKKyAqIEBmaWZvX3RoOiBmaWZvIHRocmVzaG9sZCB0byBiZSB1c2VkIGZvciByZWFkLyB3cml0ZQogICogQGRtYV9tb2RlOiBkbWEgbW9kZSBlbmFibGUgKDEpIG9yIGRpc2FibGUgKDApCiAgKiBAdTMyX2NvdW50OiBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQKICAqIEBpc193cml0ZTogcHJlZmV0Y2ggcmVhZCgwKSBvciB3cml0ZSBwb3N0KDEpIG1vZGUKICAqLwotaW50IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGludCBjcywgaW50IGRtYV9tb2RlLAoraW50IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGludCBjcywgaW50IGZpZm9fdGgsIGludCBkbWFfbW9kZSwKIAkJCQl1bnNpZ25lZCBpbnQgdTMyX2NvdW50LCBpbnQgaXNfd3JpdGUpCiB7CiAKLQlpZiAoIShncG1jX3JlYWRfcmVnKEdQTUNfUFJFRkVUQ0hfQ09OVFJPTCkpKSB7CisJaWYgKGZpZm9fdGggPiBQUkVGRVRDSF9GSUZPVEhSRVNIT0xEX01BWCkgeworCQlwcl9lcnIoImdwbWM6IGZpZm8gdGhyZXNob2xkIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmICghKGdwbWNfcmVhZF9yZWcoR1BNQ19QUkVGRVRDSF9DT05UUk9MKSkpIHsKIAkJLyogU2V0IHRoZSBhbW91bnQgb2YgYnl0ZXMgdG8gYmUgcHJlZmV0Y2hlZCAqLwogCQlncG1jX3dyaXRlX3JlZyhHUE1DX1BSRUZFVENIX0NPTkZJRzIsIHUzMl9jb3VudCk7CiAKQEAgLTYxNCw3ICs2MjUsNyBAQAogCQkgKiBlbmFibGUgdGhlIGVuZ2luZS4gU2V0IHdoaWNoIGNzIGlzIGhhcyByZXF1ZXN0ZWQgZm9yLgogCQkgKi8KIAkJZ3BtY193cml0ZV9yZWcoR1BNQ19QUkVGRVRDSF9DT05GSUcxLCAoKGNzIDw8IENTX05VTV9TSElGVCkgfAotCQkJCQlQUkVGRVRDSF9GSUZPVEhSRVNIT0xEIHwKKwkJCQkJUFJFRkVUQ0hfRklGT1RIUkVTSE9MRChmaWZvX3RoKSB8CiAJCQkJCUVOQUJMRV9QUkVGRVRDSCB8CiAJCQkJCShkbWFfbW9kZSA8PCBETUFfTVBVX01PREUpIHwKIAkJCQkJKDB4MSAmIGlzX3dyaXRlKSkpOwpAQCAtNjc4LDkgKzY4OSwxMCBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBncG1jX2luaXQodm9pZCkKIHsKLQl1MzIgbDsKKwl1MzIgbCwgaXJxOworCWludCBjcywgcmV0ID0gLUVJTlZBTDsKIAljaGFyICpjayA9IE5VTEw7CiAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKQEAgLTY5OCw3ICs3MTAsNyBAQAogCX0KIAogCWlmIChXQVJOX09OKCFjaykpCi0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAogCWdwbWNfbDNfY2xrID0gY2xrX2dldChOVUxMLCBjayk7CiAJaWYgKElTX0VSUihncG1jX2wzX2NsaykpIHsKQEAgLTcyMyw2ICs3MzUsMzYgQEAKIAlsIHw9ICgweDAyIDw8IDMpIHwgKDEgPDwgMCk7CiAJZ3BtY193cml0ZV9yZWcoR1BNQ19TWVNDT05GSUcsIGwpOwogCWdwbWNfbWVtX2luaXQoKTsKKworCS8qIGluaXRhbGl6ZSB0aGUgaXJxX2NoYWluZWQgKi8KKwlpcnEgPSBPTUFQX0dQTUNfSVJRX0JBU0U7CisJZm9yIChjcyA9IDA7IGNzIDwgR1BNQ19DU19OVU07IGNzKyspIHsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX3NpbXBsZV9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJCWlycSsrOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKElOVF8zNFhYX0dQTUNfSVJRLAorCQkJZ3BtY19oYW5kbGVfaXJxLCBJUlFGX1NIQVJFRCwgImdwbWMiLCBncG1jX2Jhc2UpOworCWlmIChyZXQpCisJCXByX2VycigiZ3BtYzogaXJxLSVkIGNvdWxkIG5vdCBjbGFpbTogZXJyICVkXG4iLAorCQkJCQkJSU5UXzM0WFhfR1BNQ19JUlEsIHJldCk7CisJcmV0dXJuIHJldDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKGdwbWNfaW5pdCk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBncG1jX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXU4IGNzOworCisJaWYgKGlycSAhPSBJTlRfMzRYWF9HUE1DX0lSUSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCS8qIGNoZWNrIGNzIHRvIGludm9rZSB0aGUgaXJxICovCisJY3MgPSAoKGdwbWNfcmVhZF9yZWcoR1BNQ19QUkVGRVRDSF9DT05GSUcxKSkgPj4gQ1NfTlVNX1NISUZUKSAmIDB4NzsKKwlpZiAoT01BUF9HUE1DX0lSUV9CQVNFK2NzIDw9IE9NQVBfR1BNQ19JUlFfRU5EKQorCQlnZW5lcmljX2hhbmRsZV9pcnEoT01BUF9HUE1DX0lSUV9CQVNFK2NzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKaW5kZXggMzQyNzJlNC4uMTM3ZTFhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwpAQCAtMTYsNyArMTYsMTAgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9tbWMuaD4KICNpbmNsdWRlIDxwbGF0L29tYXAtcG0uaD4KKyNpbmNsdWRlIDxwbGF0L211eC5oPgorI2luY2x1ZGUgPHBsYXQvb21hcF9kZXZpY2UuaD4KIAorI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgImhzbW1jLmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgogCkBAIC0yOCwxMCArMzEsNiBAQAogCiAjZGVmaW5lIEhTTU1DX05BTUVfTEVOCTkKIAotc3RhdGljIHN0cnVjdCBoc21tY19jb250cm9sbGVyIHsKLQljaGFyCQkJCW5hbWVbSFNNTUNfTkFNRV9MRU4gKyAxXTsKLX0gaHNtbWNbT01BUDM0WFhfTlJfTU1DXTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpICYmIGRlZmluZWQoQ09ORklHX1BNKQogCiBzdGF0aWMgaW50IGhzbW1jX2dldF9jb250ZXh0X2xvc3Moc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMjA0LDEzICsyMDMsMjg0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqaHNtbWNfZGF0YVtPTUFQMzRYWF9OUl9NTUNdIF9faW5pdGRhdGE7CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9oc21tY19tdXgoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19jb250cm9sbGVyLAorCQkJaW50IGNvbnRyb2xsZXJfbnIpCit7CisJaWYgKChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uc3dpdGNoX3BpbiA+IDApICYmIFwKKwkJKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5zd2l0Y2hfcGluIDwgT01BUF9NQVhfR1BJT19MSU5FUykpCisJCW9tYXBfbXV4X2luaXRfZ3BpbyhtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uc3dpdGNoX3BpbiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwlpZiAoKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5ncGlvX3dwID4gMCkgJiYgXAorCQkobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmdwaW9fd3AgPCBPTUFQX01BWF9HUElPX0xJTkVTKSkKKwkJb21hcF9tdXhfaW5pdF9ncGlvKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5ncGlvX3dwLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpZiAoY29udHJvbGxlcl9uciA9PSAwKSB7CisJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2NsayIsCisJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfY21kIiwKKwkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQwIiwKKwkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5jYXBzICYKKwkJCQkoTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBKSkgeworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0MSIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQyIiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDMiLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJfQorCQkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5jYXBzICYKKwkJCQkJCU1NQ19DQVBfOF9CSVRfREFUQSkgeworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0NCIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQ1IiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDYiLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0NyIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQl9CisJCX0KKwkJaWYgKGNvbnRyb2xsZXJfbnIgPT0gMSkgeworCQkJLyogTU1DMiAqLworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9jbGsiLAorCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2NtZCIsCisJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0MCIsCisJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKworCQkJLyoKKwkJCSAqIEZvciA4IHdpcmUgY29uZmlndXJhdGlvbnMsIExpbmVzIERBVDQsIDUsIDYgYW5kIDcKKwkJCSAqIG5lZWQgdG8gYmUgbXV4ZWQgaW4gdGhlIGJvYXJkLSouYyBmaWxlcworCQkJICovCisJCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmNhcHMgJgorCQkJCShNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQxIiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDIiLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0MyIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQl9CisJCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmNhcHMgJgorCQkJCQkJCU1NQ19DQVBfOF9CSVRfREFUQSkgeworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0NC5zZG1tYzJfZGF0NCIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQ1LnNkbW1jMl9kYXQ1IiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDYuc2RtbWMyX2RhdDYiLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0Ny5zZG1tYzJfZGF0NyIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBGb3IgTU1DMyB0aGUgcGlucyBuZWVkIHRvIGJlIG11eGVkIGluIHRoZSBib2FyZC0qLmMgZmlsZXMKKwkJICovCisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX3BkYXRhX2luaXQoc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gKmMsCisJCQkJCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMpCit7CisJY2hhciAqaGNfbmFtZTsKKworCWhjX25hbWUgPSBremFsbG9jKHNpemVvZihjaGFyKSAqIChIU01NQ19OQU1FX0xFTiArIDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhjX25hbWUpIHsKKwkJcHJfZXJyKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb250cm9sbGVyIHNsb3QgbmFtZVxuIik7CisJCWtmcmVlKGhjX25hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoYy0+bmFtZSkKKwkJc3RybmNweShoY19uYW1lLCBjLT5uYW1lLCBIU01NQ19OQU1FX0xFTik7CisJZWxzZQorCQlzbnByaW50ZihoY19uYW1lLCAoSFNNTUNfTkFNRV9MRU4gKyAxKSwgIm1tYyVpc2xvdCVpIiwKKwkJCQkJCQkJYy0+bW1jLCAxKTsKKwltbWMtPnNsb3RzWzBdLm5hbWUgPSBoY19uYW1lOworCW1tYy0+bnJfc2xvdHMgPSAxOworCW1tYy0+c2xvdHNbMF0uY2FwcyA9IGMtPmNhcHM7CisJbW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jayA9ICFjLT5leHRfY2xvY2s7CisJbW1jLT5kbWFfbWFzayA9IDB4ZmZmZmZmZmY7CisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQltbWMtPnJlZ19vZmZzZXQgPSBPTUFQNF9NTUNfUkVHX09GRlNFVDsKKwllbHNlCisJCW1tYy0+cmVnX29mZnNldCA9IDA7CisKKwltbWMtPmdldF9jb250ZXh0X2xvc3NfY291bnQgPSBoc21tY19nZXRfY29udGV4dF9sb3NzOworCisJbW1jLT5zbG90c1swXS5zd2l0Y2hfcGluID0gYy0+Z3Bpb19jZDsKKwltbWMtPnNsb3RzWzBdLmdwaW9fd3AgPSBjLT5ncGlvX3dwOworCisJbW1jLT5zbG90c1swXS5yZW11eCA9IGMtPnJlbXV4OworCW1tYy0+c2xvdHNbMF0uaW5pdF9jYXJkID0gYy0+aW5pdF9jYXJkOworCisJaWYgKGMtPmNvdmVyX29ubHkpCisJCW1tYy0+c2xvdHNbMF0uY292ZXIgPSAxOworCisJaWYgKGMtPm5vbnJlbW92YWJsZSkKKwkJbW1jLT5zbG90c1swXS5ub25yZW1vdmFibGUgPSAxOworCisJaWYgKGMtPnBvd2VyX3NhdmluZykKKwkJbW1jLT5zbG90c1swXS5wb3dlcl9zYXZpbmcgPSAxOworCisJaWYgKGMtPm5vX29mZikKKwkJbW1jLT5zbG90c1swXS5ub19vZmYgPSAxOworCisJaWYgKGMtPnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKKwkJbW1jLT5zbG90c1swXS52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXAgPSAxOworCisJLyoKKwkgKiBOT1RFOiAgTU1DIHNsb3RzIHNob3VsZCBoYXZlIGEgVmNjIHJlZ3VsYXRvciBzZXQgdXAuCisJICogVGhpcyBtYXkgYmUgZnJvbSBhIFRXTDQwMzAtZmFtaWx5IGNoaXAsIGFub3RoZXIKKwkgKiBjb250cm9sbGFibGUgcmVndWxhdG9yLCBvciBhIGZpeGVkIHN1cHBseS4KKwkgKgorCSAqIHRlbXBvcmFyeSBIQUNLOiBvY3JfbWFzayBpbnN0ZWFkIG9mIGZpeGVkIHN1cHBseQorCSAqLworCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBjLT5vY3JfbWFzazsKKworCWlmIChjcHVfaXNfb21hcDM1MTcoKSB8fCBjcHVfaXNfb21hcDM1MDUoKSkKKwkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSBub3BfbW1jX3NldF9wb3dlcjsKKwllbHNlCisJCW1tYy0+c2xvdHNbMF0uZmVhdHVyZXMgfD0gSFNNTUNfSEFTX1BCSUFTOworCisJaWYgKGNwdV9pc19vbWFwNDR4eCgpICYmIChvbWFwX3JldigpID4gT01BUDQ0MzBfUkVWX0VTMV8wKSkKKwkJbW1jLT5zbG90c1swXS5mZWF0dXJlcyB8PSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVDsKKworCXN3aXRjaCAoYy0+bW1jKSB7CisJY2FzZSAxOgorCQlpZiAobW1jLT5zbG90c1swXS5mZWF0dXJlcyAmIEhTTU1DX0hBU19QQklBUykgeworCQkJLyogb24tY2hpcCBsZXZlbCBzaGlmdGluZyB2aWEgUEJJQVMwL1BCSUFTMSAqLworCQkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQkJbW1jLT5zbG90c1swXS5iZWZvcmVfc2V0X3JlZyA9CisJCQkJCQlvbWFwNF9oc21tYzFfYmVmb3JlX3NldF9yZWc7CisJCQkJbW1jLT5zbG90c1swXS5hZnRlcl9zZXRfcmVnID0KKwkJCQkJCW9tYXA0X2hzbW1jMV9hZnRlcl9zZXRfcmVnOworCQkJfSBlbHNlIHsKKwkJCQltbWMtPnNsb3RzWzBdLmJlZm9yZV9zZXRfcmVnID0KKwkJCQkJCW9tYXBfaHNtbWMxX2JlZm9yZV9zZXRfcmVnOworCQkJCW1tYy0+c2xvdHNbMF0uYWZ0ZXJfc2V0X3JlZyA9CisJCQkJCQlvbWFwX2hzbW1jMV9hZnRlcl9zZXRfcmVnOworCQkJfQorCQl9CisKKwkJLyogT01BUDM2MzAgSFNNTUMxIHN1cHBvcnRzIG9ubHkgNC1iaXQgKi8KKwkJaWYgKGNwdV9pc19vbWFwMzYzMCgpICYmCisJCQkJKGMtPmNhcHMgJiBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7CisJCQljLT5jYXBzICY9IH5NTUNfQ0FQXzhfQklUX0RBVEE7CisJCQljLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKKwkJCW1tYy0+c2xvdHNbMF0uY2FwcyA9IGMtPmNhcHM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoYy0+ZXh0X2Nsb2NrKQorCQkJYy0+dHJhbnNjZWl2ZXIgPSAxOworCQlpZiAoYy0+dHJhbnNjZWl2ZXIgJiYgKGMtPmNhcHMgJiBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7CisJCQljLT5jYXBzICY9IH5NTUNfQ0FQXzhfQklUX0RBVEE7CisJCQljLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKKwkJfQorCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMzoKKwkJaWYgKG1tYy0+c2xvdHNbMF0uZmVhdHVyZXMgJiBIU01NQ19IQVNfUEJJQVMpIHsKKwkJCS8qIG9mZi1jaGlwIGxldmVsIHNoaWZ0aW5nLCBvciBub25lICovCisJCQltbWMtPnNsb3RzWzBdLmJlZm9yZV9zZXRfcmVnID0gaHNtbWMyM19iZWZvcmVfc2V0X3JlZzsKKwkJCW1tYy0+c2xvdHNbMF0uYWZ0ZXJfc2V0X3JlZyA9IE5VTEw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSA0OgorCWNhc2UgNToKKwkJbW1jLT5zbG90c1swXS5iZWZvcmVfc2V0X3JlZyA9IE5VTEw7CisJCW1tYy0+c2xvdHNbMF0uYWZ0ZXJfc2V0X3JlZyA9IE5VTEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKKwkJa2ZyZWUoaGNfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX2RldmljZV9wbV9sYXRlbmN5IG9tYXBfaHNtbWNfbGF0ZW5jeVtdID0geworCVswXSA9IHsKKwkJLmRlYWN0aXZhdGVfZnVuYyA9IG9tYXBfZGV2aWNlX2lkbGVfaHdtb2RzLAorCQkuYWN0aXZhdGVfZnVuYwkgPSBvbWFwX2RldmljZV9lbmFibGVfaHdtb2RzLAorCQkuZmxhZ3MJCSA9IE9NQVBfREVWSUNFX0xBVEVOQ1lfQVVUT19BREpVU1QsCisJfSwKKwkvKgorCSAqIFhYWCBUaGVyZSBzaG91bGQgYWxzbyBiZSBhbiBlbnRyeSBoZXJlIHRvIHBvd2VyIG9mZi9vbiB0aGUKKwkgKiBNTUMgcmVndWxhdG9ycy9QQklBUyBjZWxscywgZXRjLgorCSAqLworfTsKKworI2RlZmluZSBNQVhfT01BUF9NTUNfSFdNT0RfTkFNRV9MRU4JCTE2CisKK3ZvaWQgX19pbml0IG9tYXBfaW5pdF9oc21tYyhzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqaHNtbWNpbmZvLCBpbnQgY3RybF9ucikKK3sKKwlzdHJ1Y3Qgb21hcF9od21vZCAqb2g7CisJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKKwlzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSAqb2hsOworCWNoYXIgb2hfbmFtZVtNQVhfT01BUF9NTUNfSFdNT0RfTkFNRV9MRU5dOworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgKm1tY19kZXZfYXR0cjsKKwljaGFyICpuYW1lOworCWludCBsOworCWludCBvaGxfY250ID0gMDsKKworCW1tY19kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1tY19kYXRhKSB7CisJCXByX2VycigiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbW1jIGRldmljZSFcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKG9tYXBfaHNtbWNfcGRhdGFfaW5pdChoc21tY2luZm8sIG1tY19kYXRhKSA8IDApIHsKKwkJcHJfZXJyKCIlcyBmYWlscyFcbiIsIF9fZnVuY19fKTsKKwkJZ290byBkb25lOworCX0KKwlvbWFwX2hzbW1jX211eChtbWNfZGF0YSwgKGN0cmxfbnIgLSAxKSk7CisKKwluYW1lID0gIm9tYXBfaHNtbWMiOworCW9obCA9IG9tYXBfaHNtbWNfbGF0ZW5jeTsKKwlvaGxfY250ID0gQVJSQVlfU0laRShvbWFwX2hzbW1jX2xhdGVuY3kpOworCisJbCA9IHNucHJpbnRmKG9oX25hbWUsIE1BWF9PTUFQX01NQ19IV01PRF9OQU1FX0xFTiwKKwkJICAgICAibW1jJWQiLCBjdHJsX25yKTsKKwlXQVJOKGwgPj0gTUFYX09NQVBfTU1DX0hXTU9EX05BTUVfTEVOLAorCSAgICAgIlN0cmluZyBidWZmZXIgb3ZlcmZsb3cgaW4gTU1DJWQgZGV2aWNlIHNldHVwXG4iLCBjdHJsX25yKTsKKwlvaCA9IG9tYXBfaHdtb2RfbG9va3VwKG9oX25hbWUpOworCWlmICghb2gpIHsKKwkJcHJfZXJyKCJDb3VsZCBub3QgbG9vayB1cCAlc1xuIiwgb2hfbmFtZSk7CisJCWtmcmVlKG1tY19kYXRhLT5zbG90c1swXS5uYW1lKTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChvaC0+ZGV2X2F0dHIgIT0gTlVMTCkgeworCQltbWNfZGV2X2F0dHIgPSBvaC0+ZGV2X2F0dHI7CisJCW1tY19kYXRhLT5jb250cm9sbGVyX2ZsYWdzID0gbW1jX2Rldl9hdHRyLT5mbGFnczsKKwl9CisKKwlvZCA9IG9tYXBfZGV2aWNlX2J1aWxkKG5hbWUsIGN0cmxfbnIgLSAxLCBvaCwgbW1jX2RhdGEsCisJCXNpemVvZihzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSksIG9obCwgb2hsX2NudCwgZmFsc2UpOworCWlmIChJU19FUlIob2QpKSB7CisJCVdBUk4oMSwgIkNhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwgbmFtZSwgb2gtPm5hbWUpOworCQlrZnJlZShtbWNfZGF0YS0+c2xvdHNbMF0ubmFtZSk7CisJCWdvdG8gZG9uZTsKKwl9CisJLyoKKwkgKiByZXR1cm4gZGV2aWNlIGhhbmRsZSB0byBib2FyZCBzZXR1cCBjb2RlCisJICogcmVxdWlyZWQgdG8gcG9wdWxhdGUgZm9yIHJlZ3VsYXRvciBmcmFtZXdvcmsgc3RydWN0dXJlCisJICovCisJaHNtbWNpbmZvLT5kZXYgPSAmb2QtPnBkZXYuZGV2OworCitkb25lOgorCWtmcmVlKG1tY19kYXRhKTsKK30KIAogdm9pZCBfX2luaXQgb21hcDJfaHNtbWNfaW5pdChzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqY29udHJvbGxlcnMpCiB7Ci0Jc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gKmM7Ci0JaW50IG5yX2hzbW1jID0gQVJSQVlfU0laRShoc21tY19kYXRhKTsKLQlpbnQgaTsKIAl1MzIgcmVnOwogCiAJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkgewpAQCAtMjM2LDE0MiArNTA2LDkgQEAKIAkJb21hcDRfY3RybF9wYWRfd3JpdGVsKHJlZywgY29udHJvbF9tbWMxKTsKIAl9CiAKLQlmb3IgKGMgPSBjb250cm9sbGVyczsgYy0+bW1jOyBjKyspIHsKLQkJc3RydWN0IGhzbW1jX2NvbnRyb2xsZXIgKmhjID0gaHNtbWMgKyBjLT5tbWMgLSAxOwotCQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaHNtbWNfZGF0YVtjLT5tbWMgLSAxXTsKKwlmb3IgKDsgY29udHJvbGxlcnMtPm1tYzsgY29udHJvbGxlcnMrKykKKwkJb21hcF9pbml0X2hzbW1jKGNvbnRyb2xsZXJzLCBjb250cm9sbGVycy0+bW1jKTsKIAotCQlpZiAoIWMtPm1tYyB8fCBjLT5tbWMgPiBucl9oc21tYykgewotCQkJcHJfZGVidWcoIk1NQyVkOiBubyBzdWNoIGNvbnRyb2xsZXJcbiIsIGMtPm1tYyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobW1jKSB7Ci0JCQlwcl9kZWJ1ZygiTU1DJWQ6IGFscmVhZHkgY29uZmlndXJlZFxuIiwgYy0+bW1jKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbW1jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEpLAotCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbW1jKSB7Ci0JCQlwcl9lcnIoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tYyBkZXZpY2UhXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWlmIChjLT5uYW1lKQotCQkJc3RybmNweShoYy0+bmFtZSwgYy0+bmFtZSwgSFNNTUNfTkFNRV9MRU4pOwotCQllbHNlCi0JCQlzbnByaW50ZihoYy0+bmFtZSwgQVJSQVlfU0laRShoYy0+bmFtZSksCi0JCQkJIm1tYyVpc2xvdCVpIiwgYy0+bW1jLCAxKTsKLQkJbW1jLT5zbG90c1swXS5uYW1lID0gaGMtPm5hbWU7Ci0JCW1tYy0+bnJfc2xvdHMgPSAxOwotCQltbWMtPnNsb3RzWzBdLmNhcHMgPSBjLT5jYXBzOwotCQltbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrID0gIWMtPmV4dF9jbG9jazsKLQkJbW1jLT5kbWFfbWFzayA9IDB4ZmZmZmZmZmY7Ci0JCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJCW1tYy0+cmVnX29mZnNldCA9IE9NQVA0X01NQ19SRUdfT0ZGU0VUOwotCQllbHNlCi0JCQltbWMtPnJlZ19vZmZzZXQgPSAwOwotCi0JCW1tYy0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCA9IGhzbW1jX2dldF9jb250ZXh0X2xvc3M7Ci0KLQkJbW1jLT5zbG90c1swXS5zd2l0Y2hfcGluID0gYy0+Z3Bpb19jZDsKLQkJbW1jLT5zbG90c1swXS5ncGlvX3dwID0gYy0+Z3Bpb193cDsKLQotCQltbWMtPnNsb3RzWzBdLnJlbXV4ID0gYy0+cmVtdXg7Ci0JCW1tYy0+c2xvdHNbMF0uaW5pdF9jYXJkID0gYy0+aW5pdF9jYXJkOwotCi0JCWlmIChjLT5jb3Zlcl9vbmx5KQotCQkJbW1jLT5zbG90c1swXS5jb3ZlciA9IDE7Ci0KLQkJaWYgKGMtPm5vbnJlbW92YWJsZSkKLQkJCW1tYy0+c2xvdHNbMF0ubm9ucmVtb3ZhYmxlID0gMTsKLQotCQlpZiAoYy0+cG93ZXJfc2F2aW5nKQotCQkJbW1jLT5zbG90c1swXS5wb3dlcl9zYXZpbmcgPSAxOwotCi0JCWlmIChjLT5ub19vZmYpCi0JCQltbWMtPnNsb3RzWzBdLm5vX29mZiA9IDE7Ci0KLQkJaWYgKGMtPnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKLQkJCW1tYy0+c2xvdHNbMF0udmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwID0gMTsKLQotCQkvKiBOT1RFOiAgTU1DIHNsb3RzIHNob3VsZCBoYXZlIGEgVmNjIHJlZ3VsYXRvciBzZXQgdXAuCi0JCSAqIFRoaXMgbWF5IGJlIGZyb20gYSBUV0w0MDMwLWZhbWlseSBjaGlwLCBhbm90aGVyCi0JCSAqIGNvbnRyb2xsYWJsZSByZWd1bGF0b3IsIG9yIGEgZml4ZWQgc3VwcGx5LgotCQkgKgotCQkgKiB0ZW1wb3JhcnkgSEFDSzogb2NyX21hc2sgaW5zdGVhZCBvZiBmaXhlZCBzdXBwbHkKLQkJICovCi0JCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBjLT5vY3JfbWFzazsKLQotCQlpZiAoY3B1X2lzX29tYXAzNTE3KCkgfHwgY3B1X2lzX29tYXAzNTA1KCkpCi0JCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IG5vcF9tbWNfc2V0X3Bvd2VyOwotCQllbHNlCi0JCQltbWMtPnNsb3RzWzBdLmZlYXR1cmVzIHw9IEhTTU1DX0hBU19QQklBUzsKLQotCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkgJiYgKG9tYXBfcmV2KCkgPiBPTUFQNDQzMF9SRVZfRVMxXzApKQotCQkJbW1jLT5zbG90c1swXS5mZWF0dXJlcyB8PSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVDsKLQotCQlzd2l0Y2ggKGMtPm1tYykgewotCQljYXNlIDE6Ci0JCQlpZiAobW1jLT5zbG90c1swXS5mZWF0dXJlcyAmIEhTTU1DX0hBU19QQklBUykgewotCQkJCS8qIG9uLWNoaXAgbGV2ZWwgc2hpZnRpbmcgdmlhIFBCSUFTMC9QQklBUzEgKi8KLQkJCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJCQkJbW1jLT5zbG90c1swXS5iZWZvcmVfc2V0X3JlZyA9Ci0JCQkJCQlvbWFwNF9oc21tYzFfYmVmb3JlX3NldF9yZWc7Ci0JCQkJCW1tYy0+c2xvdHNbMF0uYWZ0ZXJfc2V0X3JlZyA9Ci0JCQkJCQlvbWFwNF9oc21tYzFfYWZ0ZXJfc2V0X3JlZzsKLQkJCQl9IGVsc2UgewotCQkJCQltbWMtPnNsb3RzWzBdLmJlZm9yZV9zZXRfcmVnID0KLQkJCQkJCW9tYXBfaHNtbWMxX2JlZm9yZV9zZXRfcmVnOwotCQkJCQltbWMtPnNsb3RzWzBdLmFmdGVyX3NldF9yZWcgPQotCQkJCQkJb21hcF9oc21tYzFfYWZ0ZXJfc2V0X3JlZzsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIE9tYXAzNjMwIEhTTU1DMSBzdXBwb3J0cyBvbmx5IDQtYml0ICovCi0JCQlpZiAoY3B1X2lzX29tYXAzNjMwKCkgJiYKLQkJCQkJKGMtPmNhcHMgJiBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7Ci0JCQkJYy0+Y2FwcyAmPSB+TU1DX0NBUF84X0JJVF9EQVRBOwotCQkJCWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwotCQkJCW1tYy0+c2xvdHNbMF0uY2FwcyA9IGMtPmNhcHM7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaWYgKGMtPmV4dF9jbG9jaykKLQkJCQljLT50cmFuc2NlaXZlciA9IDE7Ci0JCQlpZiAoYy0+dHJhbnNjZWl2ZXIgJiYgKGMtPmNhcHMgJiBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7Ci0JCQkJYy0+Y2FwcyAmPSB+TU1DX0NBUF84X0JJVF9EQVRBOwotCQkJCWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwotCQkJfQotCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJY2FzZSAzOgotCQkJaWYgKG1tYy0+c2xvdHNbMF0uZmVhdHVyZXMgJiBIU01NQ19IQVNfUEJJQVMpIHsKLQkJCQkvKiBvZmYtY2hpcCBsZXZlbCBzaGlmdGluZywgb3Igbm9uZSAqLwotCQkJCW1tYy0+c2xvdHNbMF0uYmVmb3JlX3NldF9yZWcgPSBoc21tYzIzX2JlZm9yZV9zZXRfcmVnOwotCQkJCW1tYy0+c2xvdHNbMF0uYWZ0ZXJfc2V0X3JlZyA9IE5VTEw7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKLQkJCWtmcmVlKG1tYyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQloc21tY19kYXRhW2MtPm1tYyAtIDFdID0gbW1jOwotCX0KLQotCW9tYXAyX2luaXRfbW1jKGhzbW1jX2RhdGEsIE9NQVAzNFhYX05SX01NQyk7Ci0KLQkvKiBwYXNzIHRoZSBkZXZpY2Ugbm9kZXMgYmFjayB0byBib2FyZCBzZXR1cCBjb2RlICovCi0JZm9yIChjID0gY29udHJvbGxlcnM7IGMtPm1tYzsgYysrKSB7Ci0JCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBoc21tY19kYXRhW2MtPm1tYyAtIDFdOwotCi0JCWlmICghYy0+bW1jIHx8IGMtPm1tYyA+IG5yX2hzbW1jKQotCQkJY29udGludWU7Ci0JCWMtPmRldiA9IG1tYy0+ZGV2OwotCX0KLQotZG9uZToKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaHNtbWM7IGkrKykKLQkJa2ZyZWUoaHNtbWNfZGF0YVtpXSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9od3NwaW5sb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2h3c3BpbmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQ0YTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9od3NwaW5sb2NrLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIE9NQVAgaGFyZHdhcmUgc3BpbmxvY2sgZGV2aWNlIGluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tCisgKgorICogQ29udGFjdDogU2ltb24gUXVlIDxzcXVlQHRpLmNvbT4KKyAqICAgICAgICAgIEhhcmkgS2FuaWdlcmkgPGgta2FuaWdlcmkyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgorI2luY2x1ZGUgPHBsYXQvb21hcF9kZXZpY2UuaD4KKworc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgb21hcF9zcGlubG9ja19sYXRlbmN5W10gPSB7CisJeworCQkuZGVhY3RpdmF0ZV9mdW5jID0gb21hcF9kZXZpY2VfaWRsZV9od21vZHMsCisJCS5hY3RpdmF0ZV9mdW5jICAgPSBvbWFwX2RldmljZV9lbmFibGVfaHdtb2RzLAorCQkuZmxhZ3MgPSBPTUFQX0RFVklDRV9MQVRFTkNZX0FVVE9fQURKVVNULAorCX0KK307CisKK2ludCBfX2luaXQgaHdzcGlubG9ja3NfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBvbWFwX2h3bW9kICpvaDsKKwlzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kOworCWNvbnN0IGNoYXIgKm9oX25hbWUgPSAic3BpbmxvY2siOworCWNvbnN0IGNoYXIgKmRldl9uYW1lID0gIm9tYXBfaHdzcGlubG9jayI7CisKKwkvKgorCSAqIEh3bW9kIGxvb2t1cCB3aWxsIGZhaWwgaW4gY2FzZSBvdXIgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IHRoZQorCSAqIGhhcmR3YXJlIHNwaW5sb2NrIG1vZHVsZSwgc28gaXQgaXMgc2FmZSB0byBydW4gdGhpcyBpbml0Y2FsbAorCSAqIG9uIGFsbCBvbWFwcworCSAqLworCW9oID0gb21hcF9od21vZF9sb29rdXAob2hfbmFtZSk7CisJaWYgKG9oID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJb2QgPSBvbWFwX2RldmljZV9idWlsZChkZXZfbmFtZSwgMCwgb2gsIE5VTEwsIDAsCisJCQkJb21hcF9zcGlubG9ja19sYXRlbmN5LAorCQkJCUFSUkFZX1NJWkUob21hcF9zcGlubG9ja19sYXRlbmN5KSwgZmFsc2UpOworCWlmIChJU19FUlIob2QpKSB7CisJCXByX2VycigiQ2FuJ3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzXG4iLCBkZXZfbmFtZSwKKwkJCQkJCQkJb2hfbmFtZSk7CisJCXJldHZhbCA9IFBUUl9FUlIob2QpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisvKiBlYXJseSBib2FyZCBjb2RlIG1pZ2h0IG5lZWQgdG8gcmVzZXJ2ZSBzcGVjaWZpYyBod3NwaW5sb2NrIGluc3RhbmNlcyAqLworcG9zdGNvcmVfaW5pdGNhbGwoaHdzcGlubG9ja3NfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKaW5kZXggNWY5MDg2Yy4uMjUzNzA5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpAQCAtNiw3ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cworICogQ29weXJpZ2h0IChDKSAyMDA5LTExIFRleGFzIEluc3RydW1lbnRzCiAgKiBBZGRlZCBPTUFQNCBzdXBwb3J0IC0gU2FudG9zaCBTaGlsaW1rYXIgPHNhbnRvc2guc2hpbGlta2FyQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtODQsNiArODQsMTEgQEAKICNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzIJMHgwMjIwCiAjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8zCTB4MDIyNAogCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF80NFhYXzAJMHgwMjAwCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF80NFhYXzEJMHgwMjA4CisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF80NFhYXzIJMHgwMjBjCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF80NFhYXzMJMHgwMjEwCisKICNkZWZpbmUgcmVhZF90YXBfcmVnKHJlZykJX19yYXdfcmVhZGwodGFwX2Jhc2UgICsgKHJlZykpCiAKIHN0cnVjdCBvbWFwX2lkIHsKQEAgLTEwNyw2ICsxMTIsMTQgQEAKIAogdm9pZCBvbWFwX2dldF9kaWVfaWQoc3RydWN0IG9tYXBfZGllX2lkICpvZGkpCiB7CisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCW9kaS0+aWRfMCA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfNDRYWF8wKTsKKwkJb2RpLT5pZF8xID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF80NFhYXzEpOworCQlvZGktPmlkXzIgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzQ0WFhfMik7CisJCW9kaS0+aWRfMyA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfNDRYWF8zKTsKKworCQlyZXR1cm47CisJfQogCW9kaS0+aWRfMCA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMCk7CiAJb2RpLT5pZF8xID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8xKTsKIAlvZGktPmlkXzIgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzIpOwpAQCAtMTkxLDEyICsyMDQsMTkgQEAKIAlpZiAoIWNwdV9pc19vbWFwMzUwNSgpICYmICFjcHVfaXNfb21hcDM1MTcoKSkKIAkJb21hcDNfZmVhdHVyZXMgfD0gT01BUDNfSEFTX0lPX1dBS0VVUDsKIAorCW9tYXAzX2ZlYXR1cmVzIHw9IE9NQVAzX0hBU19TRFJDOworCiAJLyoKIAkgKiBUT0RPOiBHZXQgYWRkaXRpb25hbCBpbmZvICh3aGVyZSBhcHBsaWNhYmxlKQogCSAqICAgICAgIGUuZy4gU2l6ZSBvZiBMMiBjYWNoZS4KIAkgKi8KIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHRpODE2eF9jaGVja19mZWF0dXJlcyh2b2lkKQoreworCW9tYXAzX2ZlYXR1cmVzID0gT01BUDNfSEFTX05FT047Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19jaGVja19yZXZpc2lvbih2b2lkKQogewogCXUzMiBjcHVpZCwgaWRjb2RlOwpAQCAtMjg3LDYgKzMwNywyMCBAQAogCQkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDM2MzBFUzFfMjsKIAkJfQogCQlicmVhazsKKwljYXNlIDB4YjgxZToKKwkJb21hcF9jaGlwLm9jID0gQ0hJUF9JU19USTgxNlg7CisKKwkJc3dpdGNoIChyZXYpIHsKKwkJY2FzZSAwOgorCQkJb21hcF9yZXZpc2lvbiA9IFRJODE2OF9SRVZfRVMxXzA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJb21hcF9yZXZpc2lvbiA9IFRJODE2OF9SRVZfRVMxXzE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW9tYXBfcmV2aXNpb24gPSAgVEk4MTY4X1JFVl9FUzFfMTsKKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBVbmtub3duIGRlZmF1bHQgdG8gbGF0ZXN0IHNpbGljb24gcmV2IGFzIGRlZmF1bHQqLwogCQlvbWFwX3JldmlzaW9uID0gIE9NQVAzNjMwX1JFVl9FUzFfMjsKQEAgLTMwNyw3ICszNDEsNyBAQAogCSAqLwogCWlkY29kZSA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9JRENPREUpOwogCWhhd2tleWUgPSAoaWRjb2RlID4+IDEyKSAmIDB4ZmZmZjsKLQlyZXYgPSAoaWRjb2RlID4+IDI4KSAmIDB4ZmY7CisJcmV2ID0gKGlkY29kZSA+PiAyOCkgJiAweGY7CiAKIAkvKgogCSAqIEZldyBpbml0aWFsIEVTMi4wIHNhbXBsZXMgSURDT0RFIGlzIHNhbWUgYXMgRVMxLjAKQEAgLTMyNiwyMiArMzYwLDMxIEBACiAJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQNDQzMEVTMTsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlvbWFwX3JldmlzaW9uID0gT01BUDQ0MzBfUkVWX0VTMl8wOwotCQkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDQ0MzBFUzI7Ci0JCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCW9tYXBfcmV2aXNpb24gPSBPTUFQNDQzMF9SRVZfRVMyXzA7CiAJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQNDQzMEVTMjsKLQl9Ci0JYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweGI5NWM6CisJCXN3aXRjaCAocmV2KSB7CisJCWNhc2UgMzoKKwkJCW9tYXBfcmV2aXNpb24gPSBPTUFQNDQzMF9SRVZfRVMyXzE7CisJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQNDQzMEVTMl8xOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJZGVmYXVsdDoKKwkJCW9tYXBfcmV2aXNpb24gPSBPTUFQNDQzMF9SRVZfRVMyXzI7CisJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQNDQzMEVTMl8yOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCS8qIFVua25vd24gZGVmYXVsdCB0byBsYXRlc3Qgc2lsaWNvbiByZXYgYXMgZGVmYXVsdCovCi0JCW9tYXBfcmV2aXNpb24gPSBPTUFQNDQzMF9SRVZfRVMyXzA7Ci0JCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVA0NDMwRVMyOworCQkvKiBVbmtub3duIGRlZmF1bHQgdG8gbGF0ZXN0IHNpbGljb24gcmV2IGFzIGRlZmF1bHQgKi8KKwkJb21hcF9yZXZpc2lvbiA9IE9NQVA0NDMwX1JFVl9FUzJfMjsKKwkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDQ0MzBFUzJfMjsKIAl9CiAKLQlwcl9pbmZvKCJPTUFQJTA0eCBFUyVkLjBcbiIsCi0JCQlvbWFwX3JldigpID4+IDE2LCAoKG9tYXBfcmV2KCkgPj4gMTIpICYgMHhmKSArIDEpOworCXByX2luZm8oIk9NQVAlMDR4IEVTJWQuJWRcbiIsIG9tYXBfcmV2KCkgPj4gMTYsCisJCSgob21hcF9yZXYoKSA+PiAxMikgJiAweGYpLCAoKG9tYXBfcmV2KCkgPj4gOCkgJiAweGYpKTsKIH0KIAogI2RlZmluZSBPTUFQM19TSE9XX0ZFQVRVUkUoZmVhdCkJCVwKQEAgLTM3Miw2ICs0MTUsOCBAQAogCQkJLyogQWxyZWFkeSBzZXQgaW4gb21hcDNfY2hlY2tfcmV2aXNpb24oKSAqLwogCQkJc3RyY3B5KGNwdV9uYW1lLCAiQU0zNTA1Iik7CiAJCX0KKwl9IGVsc2UgaWYgKGNwdV9pc190aTgxNngoKSkgeworCQlzdHJjcHkoY3B1X25hbWUsICJUSTgxNlgiKTsKIAl9IGVsc2UgaWYgKG9tYXAzX2hhc19pdmEoKSAmJiBvbWFwM19oYXNfc2d4KCkpIHsKIAkJLyogT01BUDM0MzAsIE9NQVAzNTI1LCBPTUFQMzUxNSwgT01BUDM1MDMgZGV2aWNlcyAqLwogCQlzdHJjcHkoY3B1X25hbWUsICJPTUFQMzQzMC8zNTMwIik7CkBAIC0zODYsNyArNDMxLDcgQEAKIAkJc3RyY3B5KGNwdV9uYW1lLCAiT01BUDM1MDMiKTsKIAl9CiAKLQlpZiAoY3B1X2lzX29tYXAzNjMwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAzNjMwKCkgfHwgY3B1X2lzX3RpODE2eCgpKSB7CiAJCXN3aXRjaCAocmV2KSB7CiAJCWNhc2UgT01BUF9SRVZCSVRTXzAwOgogCQkJc3RyY3B5KGNwdV9yZXYsICIxLjAiKTsKQEAgLTQ2Miw3ICs1MDcsMTMgQEAKIAkJb21hcDI0eHhfY2hlY2tfcmV2aXNpb24oKTsKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCW9tYXAzX2NoZWNrX3JldmlzaW9uKCk7Ci0JCW9tYXAzX2NoZWNrX2ZlYXR1cmVzKCk7CisKKwkJLyogVEk4MTZYIGRvZXNuJ3QgaGF2ZSBmZWF0dXJlIHJlZ2lzdGVyICovCisJCWlmICghY3B1X2lzX3RpODE2eCgpKQorCQkJb21hcDNfY2hlY2tfZmVhdHVyZXMoKTsKKwkJZWxzZQorCQkJdGk4MTZ4X2NoZWNrX2ZlYXR1cmVzKCk7CisKIAkJb21hcDNfY3B1aW5mbygpOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNjA0OWY0Ni4uNDhhZGZlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC03Miw2ICs3MiwxMiBAQAogCQliZXEJMzRmCQkJQCBjb25maWd1cmUgT01BUDNVQVJUNAogCQljbXAJXHJwLCAjT01BUDRVQVJUNAlAIG9ubHkgb24gNDR4eAogCQliZXEJNDRmCQkJQCBjb25maWd1cmUgT01BUDRVQVJUNAorCQljbXAJXHJwLCAjVEk4MTZYVUFSVDEJQCB0aTgxNnggVUFSVCBvZmZzZXRzIGRpZmZlcmVudAorCQliZXEJODFmCQkJQCBjb25maWd1cmUgVUFSVDEKKwkJY21wCVxycCwgI1RJODE2WFVBUlQyCUAgdGk4MTZ4IFVBUlQgb2Zmc2V0cyBkaWZmZXJlbnQKKwkJYmVxCTgyZgkJCUAgY29uZmlndXJlIFVBUlQyCisJCWNtcAlccnAsICNUSTgxNlhVQVJUMwlAIHRpODE2eCBVQVJUIG9mZnNldHMgZGlmZmVyZW50CisJCWJlcQk4M2YJCQlAIGNvbmZpZ3VyZSBVQVJUMwogCQljbXAJXHJwLCAjWk9PTV9VQVJUCQlAIG9ubHkgb24gem9vbTIvMwogCQliZXEJOTVmCQkJQCBjb25maWd1cmUgWk9PTV9VQVJUCiAKQEAgLTk0LDYgKzEwMCwxMiBAQAogCQliCTk4ZgogNDQ6CQltb3YJXHJwLCAjVUFSVF9PRkZTRVQoT01BUDRfVUFSVDRfQkFTRSkKIAkJYgk5OGYKKzgxOgkJbW92CVxycCwgI1VBUlRfT0ZGU0VUKFRJODE2WF9VQVJUMV9CQVNFKQorCQliCTk4ZgorODI6CQltb3YJXHJwLCAjVUFSVF9PRkZTRVQoVEk4MTZYX1VBUlQyX0JBU0UpCisJCWIJOThmCis4MzoJCW1vdglccnAsICNVQVJUX09GRlNFVChUSTgxNlhfVUFSVDNfQkFTRSkKKwkJYgk5OGYKIDk1OgkJbGRyCVxycCwgPVpPT01fVUFSVF9CQVNFCiAJCW1yYwlwMTUsIDAsIFxydiwgYzEsIGMwCiAJCXRzdAlccnYsICMxCQkJQCBNTVUgZW5hYmxlZD8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IDgxOTg1YTYuLmE0ODY5MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtNjEsNiArNjEsMTQgQEAKIAkJYm5lCTk5OThmCiAJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4ZDhdIC8qIElSUSBwZW5kaW5nIHJlZyAzICovCiAJCWNtcAlcaXJxbnIsICMweDAKKwkJYm5lCTk5OThmCisKKwkJLyoKKwkJICogdGk4MTZ4IGhhcyBhZGRpdGlvbmFsIElSUSBwZW5kaW5nIHJlZ2lzdGVyLiBDaGVja2luZyB0aGlzCisJCSAqIHJlZ2lzdGVyIG9uIG9tYXAyICYgb21hcDMgaGFzIG5vIGVmZmVjdCAocmVhZCBhcyAwKS4KKwkJICovCisJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4ZjhdIC8qIElSUSBwZW5kaW5nIHJlZyA0ICovCisJCWNtcAlcaXJxbnIsICMweDAKIDk5OTg6CiAJCWxkcm5lCVxpcnFuciwgW1xiYXNlLCAjSU5UQ1BTX1NJUl9JUlFfT0ZGU0VUXQogCQlhbmQJXGlycW5yLCBcaXJxbnIsICNBQ1RJVkVJUlFfTUFTSyAvKiBDbGVhciBzcHVyaW91cyBiaXRzICovCkBAIC0xMzMsNiArMTQxLDExIEBACiAJCWJuZQk5OTk5ZgogCQlsZHIJXGlycW5yLCBbXGJhc2UsICMweGQ4XSAvKiBJUlEgcGVuZGluZyByZWcgMyAqLwogCQljbXAJXGlycW5yLCAjMHgwCisjaWZkZWYgQ09ORklHX1NPQ19PTUFQVEk4MTZYCisJCWJuZQk5OTk5ZgorCQlsZHIJXGlycW5yLCBbXGJhc2UsICMweGY4XSAvKiBJUlEgcGVuZGluZyByZWcgNCAqLworCQljbXAJXGlycW5yLCAjMHgwCisjZW5kaWYKIDk5OTk6CiAJCWxkcm5lCVxpcnFuciwgW1xiYXNlLCAjSU5UQ1BTX1NJUl9JUlFfT0ZGU0VUXQogCQlhbmQJXGlycW5yLCBcaXJxbnIsICNBQ1RJVkVJUlFfTUFTSyAvKiBDbGVhciBzcHVyaW91cyBiaXRzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9vbWFwNC1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL29tYXA0LWNvbW1vbi5oCmluZGV4IDViMDI3MGIuLmRlNDQxYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL29tYXA0LWNvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL29tYXA0LWNvbW1vbi5oCkBAIC0xNyw4ICsxNywxMiBAQAogICogd2ZpIHVzZWQgaW4gbG93IHBvd2VyIGNvZGUuIERpcmVjdGx5IG9wY29kZSBpcyB1c2VkIGluc3RlYWQKICAqIG9mIGluc3RydWN0aW9uIHRvIGF2b2lkIG11bGl0LW9tYXAgYnVpbGQgYnJlYWsKICAqLworI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCisjZGVmaW5lIGRvX3dmaSgpIF9fYXNtX18gX192b2xhdGlsZV9fICgid2ZpIiA6IDogOiAibWVtb3J5IikKKyNlbHNlCiAjZGVmaW5lIGRvX3dmaSgpCQkJXAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi53b3JkCTB4ZTMyMGYwMDMiIDogOiA6ICJtZW1vcnkiKQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAogZXh0ZXJuIHZvaWQgX19pb21lbSAqbDJjYWNoZV9iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IGMyMDMyMDQuLjQ0MWU3OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgPHBsYXQvc3JhbS5oPgogI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgotI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPHBsYXQvc2VyaWFsLmg+CiAKICNpbmNsdWRlICJjbG9jazJ4eHguaCIKQEAgLTY2LDcgKzY1LDcgQEAKIAl9LAogfTsKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisjaWZkZWYgQ09ORklHX1NPQ19PTUFQMjQyMAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMjQyeF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS52aXJ0dWFsCT0gRFNQX01FTV8yNDIwX1ZJUlQsCkBAIC05MCw3ICs4OSw3IEBACiAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDMwCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNDN4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBMNF9XS18yNDNYX1ZJUlQsCkBAIC0xNzUsNiArMTc0LDE4IEBACiAjZW5kaWYKIH07CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19TT0NfT01BUFRJODE2WAorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwdGk4MTZ4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBMNF8zNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF8zNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEw0XzM0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisjZW5kaWYKKwogI2lmZGVmCUNPTkZJR19BUkNIX09NQVA0CiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXA0NHh4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTI0MSw3ICsyNTIsNyBAQAogCW9tYXBfc3JhbV9pbml0KCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAorI2lmZGVmIENPTkZJR19TT0NfT01BUDI0MjAKIHZvaWQgX19pbml0IG9tYXAyNDJ4X21hcF9jb21tb25faW8odm9pZCkKIHsKIAlpb3RhYmxlX2luaXQob21hcDI0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjR4eF9pb19kZXNjKSk7CkBAIC0yNTAsNyArMjYxLDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDMwCiB2b2lkIF9faW5pdCBvbWFwMjQzeF9tYXBfY29tbW9uX2lvKHZvaWQpCiB7CiAJaW90YWJsZV9pbml0KG9tYXAyNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0eHhfaW9fZGVzYykpOwpAQCAtMjY3LDYgKzI3OCwxNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU09DX09NQVBUSTgxNlgKK3ZvaWQgX19pbml0IG9tYXB0aTgxNnhfbWFwX2NvbW1vbl9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChvbWFwdGk4MTZ4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcHRpODE2eF9pb19kZXNjKSk7CisJX29tYXAyX21hcF9jb21tb25faW8oKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKIHZvaWQgX19pbml0IG9tYXA0NHh4X21hcF9jb21tb25faW8odm9pZCkKIHsKQEAgLTMzNywxNSArMzU2LDE1IEBACiAKIAlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpIHsKIAkJb21hcDJ4eHhfcG93ZXJkb21haW5zX2luaXQoKTsKLQkJb21hcDJfY2xvY2tkb21haW5zX2luaXQoKTsKKwkJb21hcDJ4eHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAkJb21hcDI0MjBfaHdtb2RfaW5pdCgpOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDN4KCkpIHsKIAkJb21hcDJ4eHhfcG93ZXJkb21haW5zX2luaXQoKTsKLQkJb21hcDJfY2xvY2tkb21haW5zX2luaXQoKTsKKwkJb21hcDJ4eHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAkJb21hcDI0MzBfaHdtb2RfaW5pdCgpOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJb21hcDN4eHhfcG93ZXJkb21haW5zX2luaXQoKTsKLQkJb21hcDJfY2xvY2tkb21haW5zX2luaXQoKTsKKwkJb21hcDN4eHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAkJb21hcDN4eHhfaHdtb2RfaW5pdCgpOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJb21hcDQ0eHhfcG93ZXJkb21haW5zX2luaXQoKTsKQEAgLTM5OCwxNSArNDE3LDEwIEBACiB2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMCwKIAkJCQkgICAgICBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczEpCiB7Ci0Jb21hcF9zZXJpYWxfZWFybHlfaW5pdCgpOwotCi0Jb21hcF9od21vZF9sYXRlX2luaXQoKTsKLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgeworCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBvbWFwM19oYXNfc2RyYygpKSB7CiAJCW9tYXAyX3NkcmNfaW5pdChzZHJjX2NzMCwgc2RyY19jczEpOwogCQlfb21hcDJfaW5pdF9yZXByb2dyYW1fc2RyYygpOwogCX0KLQlncG1jX2luaXQoKTsKIAogCW9tYXBfaXJxX2Jhc2VfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pb21tdTIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMKaW5kZXggMTRlZTY4Ni4uYWRiMDgzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pb21tdTIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jCkBAIC0xNDUsMzUgKzE0NSwzMiBAQAogCiBzdGF0aWMgdTMyIG9tYXAyX2lvbW11X2ZhdWx0X2lzcihzdHJ1Y3QgaW9tbXUgKm9iaiwgdTMyICpyYSkKIHsKLQlpbnQgaTsKIAl1MzIgc3RhdCwgZGE7Ci0JY29uc3QgY2hhciAqZXJyX21zZ1tdID0JewotCQkidGxiIG1pc3MiLAotCQkidHJhbnNsYXRpb24gZmF1bHQiLAotCQkiZW11bGF0aW9uIG1pc3MiLAotCQkidGFibGUgd2FsayBmYXVsdCIsCi0JCSJtdWx0aSBoaXQgZmF1bHQiLAotCX07CisJdTMyIGVycnMgPSAwOwogCiAJc3RhdCA9IGlvbW11X3JlYWRfcmVnKG9iaiwgTU1VX0lSUVNUQVRVUyk7CiAJc3RhdCAmPSBNTVVfSVJRX01BU0s7Ci0JaWYgKCFzdGF0KQorCWlmICghc3RhdCkgeworCQkqcmEgPSAwOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlkYSA9IGlvbW11X3JlYWRfcmVnKG9iaiwgTU1VX0ZBVUxUX0FEKTsKIAkqcmEgPSBkYTsKIAotCWRldl9lcnIob2JqLT5kZXYsICIlczpcdGRhOiUwOHggIiwgX19mdW5jX18sIGRhKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycl9tc2cpOyBpKyspIHsKLQkJaWYgKHN0YXQgJiAoMSA8PCBpKSkKLQkJCXByaW50aygiJXMgIiwgZXJyX21zZ1tpXSk7Ci0JfQotCXByaW50aygiXG4iKTsKLQorCWlmIChzdGF0ICYgTU1VX0lSUV9UTEJNSVNTKQorCQllcnJzIHw9IE9NQVBfSU9NTVVfRVJSX1RMQl9NSVNTOworCWlmIChzdGF0ICYgTU1VX0lSUV9UUkFOU0xBVElPTkZBVUxUKQorCQllcnJzIHw9IE9NQVBfSU9NTVVfRVJSX1RSQU5TX0ZBVUxUOworCWlmIChzdGF0ICYgTU1VX0lSUV9FTVVNSVNTKQorCQllcnJzIHw9IE9NQVBfSU9NTVVfRVJSX0VNVV9NSVNTOworCWlmIChzdGF0ICYgTU1VX0lSUV9UQUJMRVdBTEtGQVVMVCkKKwkJZXJycyB8PSBPTUFQX0lPTU1VX0VSUl9UQkxXQUxLX0ZBVUxUOworCWlmIChzdGF0ICYgTU1VX0lSUV9NVUxUSUhJVEZBVUxUKQorCQllcnJzIHw9IE9NQVBfSU9NTVVfRVJSX01VTFRJSElUX0ZBVUxUOwogCWlvbW11X3dyaXRlX3JlZyhvYmosIHN0YXQsIE1NVV9JUlFTVEFUVVMpOwogCi0JcmV0dXJuIHN0YXQ7CisJcmV0dXJuIGVycnM7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXAyX3RsYl9yZWFkX2NyKHN0cnVjdCBpb21tdSAqb2JqLCBzdHJ1Y3QgY3JfcmVncyAqY3IpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwppbmRleCAyMzA0OWM0Li5iYzUyNGI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKQEAgLTYxLDggKzYxLDYgQEAKIAl1MzIgbWlyW0lOVENQU19OUl9NSVJfUkVHU107CiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXAzX2ludGNfcmVncyBpbnRjX2NvbnRleHRbQVJSQVlfU0laRShpcnFfYmFua3MpXTsKLQogLyogSU5UQyBiYW5rIHJlZ2lzdGVyIGdldC9zZXQgKi8KIAogc3RhdGljIHZvaWQgaW50Y19iYW5rX3dyaXRlX3JlZyh1MzIgdmFsLCBzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuaywgdTE2IHJlZykKQEAgLTExMCw3ICsxMDgsNyBAQAogCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJaW50IG9mZnNldCA9IGlycSAmICh+KElSUV9CSVRTX1BFUl9SRUcgLSAxKSk7CiAKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkgJiYgIWNwdV9pc190aTgxNngoKSkgewogCQlpbnQgc3B1cmlvdXMgPSAwOwogCiAJCS8qCkBAIC0yMDUsNiArMjAzLDkgQEAKIAogCQlCVUdfT04oIWJhc2UpOwogCisJCWlmIChjcHVfaXNfdGk4MTZ4KCkpCisJCQliYW5rLT5ucl9pcnFzID0gMTI4OworCiAJCS8qIFN0YXRpYyBtYXBwaW5nLCBuZXZlciByZWxlYXNlZCAqLwogCQliYW5rLT5iYXNlX3JlZyA9IGlvcmVtYXAoYmFzZSwgU1pfNEspOwogCQlpZiAoIWJhbmstPmJhc2VfcmVnKSB7CkBAIC0yMjksNiArMjMwLDggQEAKIH0KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCitzdGF0aWMgc3RydWN0IG9tYXAzX2ludGNfcmVncyBpbnRjX2NvbnRleHRbQVJSQVlfU0laRShpcnFfYmFua3MpXTsKKwogdm9pZCBvbWFwX2ludGNfc2F2ZV9jb250ZXh0KHZvaWQpCiB7CiAJaW50IGluZCA9IDAsIGkgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwppbmRleCAyNGI4ODUwLi44NmQ1NjRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtMTQsMTIgKzE0LDExIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8cGxhdC9tYWlsYm94Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAKICNkZWZpbmUgTUFJTEJPWF9SRVZJU0lPTgkJMHgwMDAKLSNkZWZpbmUgTUFJTEJPWF9TWVNDT05GSUcJCTB4MDEwCi0jZGVmaW5lIE1BSUxCT1hfU1lTU1RBVFVTCQkweDAxNAogI2RlZmluZSBNQUlMQk9YX01FU1NBR0UobSkJCSgweDA0MCArIDQgKiAobSkpCiAjZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVUyhtKQkJKDB4MDgwICsgNCAqIChtKSkKICNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVMobSkJCSgweDBjMCArIDQgKiAobSkpCkBAIC0zMywxNyArMzIsNiBAQAogI2RlZmluZSBNQUlMQk9YX0lSUV9ORVdNU0cobSkJCSgxIDw8ICgyICogKG0pKSkKICNkZWZpbmUgTUFJTEJPWF9JUlFfTk9URlVMTChtKQkJKDEgPDwgKDIgKiAobSkgKyAxKSkKIAotLyogU1lTQ09ORklHOiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbiAqLwotI2RlZmluZSBBVVRPSURMRQkoMSA8PCAwKQotI2RlZmluZSBTT0ZUUkVTRVQJKDEgPDwgMSkKLSNkZWZpbmUgU01BUlRJRExFCSgyIDw8IDMpCi0jZGVmaW5lIE9NQVA0X1NPRlRSRVNFVAkoMSA8PCAwKQotI2RlZmluZSBPTUFQNF9OT0lETEUJKDEgPDwgMikKLSNkZWZpbmUgT01BUDRfU01BUlRJRExFCSgyIDw8IDIpCi0KLS8qIFNZU1NUQVRVUzogcmVnaXN0ZXIgYml0IGRlZmluaXRpb24gKi8KLSNkZWZpbmUgUkVTRVRET05FCSgxIDw8IDApCi0KICNkZWZpbmUgTUJPWF9SRUdfU0laRQkJCTB4MTIwCiAKICNkZWZpbmUgT01BUDRfTUJPWF9SRUdfU0laRQkJMHgxMzAKQEAgLTcwLDggKzU4LDYgQEAKIAl1bnNpZ25lZCBsb25nIGlycWRpc2FibGU7CiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqbWJveF9pY2tfaGFuZGxlOwotCiBzdGF0aWMgdm9pZCBvbWFwMl9tYm94X2VuYWJsZV9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwKIAkJCQkgIG9tYXBfbWJveF90eXBlX3QgaXJxKTsKIApAQCAtODksNTMgKzc1LDEzIEBACiBzdGF0aWMgaW50IG9tYXAyX21ib3hfc3RhcnR1cChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQogewogCXUzMiBsOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAotCW1ib3hfaWNrX2hhbmRsZSA9IGNsa19nZXQoTlVMTCwgIm1haWxib3hlc19pY2siKTsKLQlpZiAoSVNfRVJSKG1ib3hfaWNrX2hhbmRsZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IG1haWxib3hlc19pY2s6ICVsZFxuIiwKLQkJCVBUUl9FUlIobWJveF9pY2tfaGFuZGxlKSk7Ci0JCXJldHVybiBQVFJfRVJSKG1ib3hfaWNrX2hhbmRsZSk7Ci0JfQotCWNsa19lbmFibGUobWJveF9pY2tfaGFuZGxlKTsKLQotCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQltYm94X3dyaXRlX3JlZyhPTUFQNF9TT0ZUUkVTRVQsIE1BSUxCT1hfU1lTQ09ORklHKTsKLQkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKLQkJZG8gewotCQkJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9TWVNDT05GSUcpOwotCQkJaWYgKCEobCAmIE9NQVA0X1NPRlRSRVNFVCkpCi0JCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKLQotCQlpZiAobCAmIE9NQVA0X1NPRlRSRVNFVCkgewotCQkJcHJfZXJyKCJDYW4ndCB0YWtlIG1haWxib3ggb3V0IG9mIHJlc2V0XG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfSBlbHNlIHsKLQkJbWJveF93cml0ZV9yZWcoU09GVFJFU0VULCBNQUlMQk9YX1NZU0NPTkZJRyk7Ci0JCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7Ci0JCWRvIHsKLQkJCWwgPSBtYm94X3JlYWRfcmVnKE1BSUxCT1hfU1lTU1RBVFVTKTsKLQkJCWlmIChsICYgUkVTRVRET05FKQotCQkJCWJyZWFrOwotCQl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSk7Ci0KLQkJaWYgKCEobCAmIFJFU0VURE9ORSkpIHsKLQkJCXByX2VycigiQ2FuJ3QgdGFrZSBtYWlsYm94IG91dCBvZiByZXNldFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KKwlwbV9ydW50aW1lX2VuYWJsZShtYm94LT5kZXYtPnBhcmVudCk7CisJcG1fcnVudGltZV9nZXRfc3luYyhtYm94LT5kZXYtPnBhcmVudCk7CiAKIAlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1JFVklTSU9OKTsKIAlwcl9kZWJ1Zygib21hcCBtYWlsYm94IHJldiAlZC4lZFxuIiwgKGwgJiAweGYwKSA+PiA0LCAobCAmIDB4MGYpKTsKIAotCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJbCA9IE9NQVA0X1NNQVJUSURMRTsKLQllbHNlCi0JCWwgPSBTTUFSVElETEUgfCBBVVRPSURMRTsKLQltYm94X3dyaXRlX3JlZyhsLCBNQUlMQk9YX1NZU0NPTkZJRyk7Ci0KIAlvbWFwMl9tYm94X2VuYWJsZV9pcnEobWJveCwgSVJRX1JYKTsKIAogCXJldHVybiAwOwpAQCAtMTQzLDkgKzg5LDggQEAKIAogc3RhdGljIHZvaWQgb21hcDJfbWJveF9zaHV0ZG93bihzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQogewotCWNsa19kaXNhYmxlKG1ib3hfaWNrX2hhbmRsZSk7Ci0JY2xrX3B1dChtYm94X2lja19oYW5kbGUpOwotCW1ib3hfaWNrX2hhbmRsZSA9IE5VTEw7CisJcG1fcnVudGltZV9wdXRfc3luYyhtYm94LT5kZXYtPnBhcmVudCk7CisJcG1fcnVudGltZV9kaXNhYmxlKG1ib3gtPmRldi0+cGFyZW50KTsKIH0KIAogLyogTWFpbGJveCBGSUZPIGhhbmRsZSBmdW5jdGlvbnMgKi8KQEAgLTMxMiw3ICsyNTcsNyBAQAogc3RydWN0IG9tYXBfbWJveCAqb21hcDNfbWJveGVzW10gPSB7ICZtYm94X2RzcF9pbmZvLCBOVUxMIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCisjaWYgZGVmaW5lZChDT05GSUdfU09DX09NQVAyNDIwKQogLyogSVZBICovCiBzdGF0aWMgc3RydWN0IG9tYXBfbWJveDJfcHJpdiBvbWFwMl9tYm94X2l2YV9wcml2ID0gewogCS50eF9maWZvID0gewpAQCAtNDAwLDE0ICszNDUsMTQgQEAKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlsaXN0ID0gb21hcDNfbWJveGVzOwogCi0JCWxpc3RbMF0tPmlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJkc3AiKTsKKwkJbGlzdFswXS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAl9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQogCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CiAJCWxpc3QgPSBvbWFwMl9tYm94ZXM7CiAKLQkJbGlzdFswXS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImRzcCIpOworCQlsaXN0WzBdLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKIAkJbGlzdCA9IG9tYXAyX21ib3hlczsKIApAQCAtNDE5LDggKzM2NCw3IEBACiAJZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJbGlzdCA9IG9tYXA0X21ib3hlczsKIAotCQlsaXN0WzBdLT5pcnEgPSBsaXN0WzFdLT5pcnEgPQotCQkJcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIm1ib3giKTsKKwkJbGlzdFswXS0+aXJxID0gbGlzdFsxXS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAl9CiAjZW5kaWYKIAllbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwppbmRleCBmOWM5ZGY1Li41NjViOTA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCkBAIC0yMiwxMCArMjIsMTEgQEAKICNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgorI2luY2x1ZGUgPHBsYXQvb21hcF9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlICJjb250cm9sLmgiCiAKLQogLyogTWNCU1AgaW50ZXJuYWwgc2lnbmFsIG11eGluZyBmdW5jdGlvbnMgKi8KIAogdm9pZCBvbWFwMl9tY2JzcDFfbXV4X2Nsa3Jfc3JjKHU4IG11eCkKQEAgLTgzLDcgKzg0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY2xrX2Rpc2FibGUobWNic3AtPmZjbGspOworCXBtX3J1bnRpbWVfcHV0X3N5bmMobWNic3AtPmRldik7CiAKIAlyID0gY2xrX3NldF9wYXJlbnQobWNic3AtPmZjbGssIGZja19zcmMpOwogCWlmIChJU19FUlJfVkFMVUUocikpIHsKQEAgLTkzLDcgKzk0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY2xrX2VuYWJsZShtY2JzcC0+ZmNsayk7CisJcG1fcnVudGltZV9nZXRfc3luYyhtY2JzcC0+ZGV2KTsKIAogCWNsa19wdXQoZmNrX3NyYyk7CiAKQEAgLTEwMSwxOTYgKzEwMiw3MCBAQAogfQogRVhQT1JUX1NZTUJPTChvbWFwMl9tY2JzcF9zZXRfY2xrc19zcmMpOwogCi0KLS8qIFBsYXRmb3JtIGRhdGEgKi8KLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCi1zdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjQyMF9tY2JzcF9wZGF0YVtdID0geworc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgb21hcDJfbWNic3BfbGF0ZW5jeVtdID0gewogCXsKLQkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMV9CQVNFLAotCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYLAotCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYLAotCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCi0JCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKLQl9LAotCXsKLQkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMl9CQVNFLAotCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYLAotCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYLAotCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCi0JCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKKwkJLmRlYWN0aXZhdGVfZnVuYyA9IG9tYXBfZGV2aWNlX2lkbGVfaHdtb2RzLAorCQkuYWN0aXZhdGVfZnVuYyAgID0gb21hcF9kZXZpY2VfZW5hYmxlX2h3bW9kcywKKwkJLmZsYWdzID0gT01BUF9ERVZJQ0VfTEFURU5DWV9BVVRPX0FESlVTVCwKIAl9LAogfTsKLSNkZWZpbmUgT01BUDI0MjBfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDI0MjBfbWNic3BfcGRhdGEpCi0jZGVmaW5lIE9NQVAyNDIwX01DQlNQX1JFR19OVU0JCShPTUFQX01DQlNQX1JFR19SQ0NSIC8gc2l6ZW9mKHUzMikgKyAxKQotI2Vsc2UKLSNkZWZpbmUgb21hcDI0MjBfbWNic3BfcGRhdGEJCU5VTEwKLSNkZWZpbmUgT01BUDI0MjBfTUNCU1BfUERBVEFfU1oJCTAKLSNkZWZpbmUgT01BUDI0MjBfTUNCU1BfUkVHX05VTQkJMAotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAotc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDI0MzBfbWNic3BfcGRhdGFbXSA9IHsKLQl7Ci0JCS5waHlzX2Jhc2UJPSBPTUFQMjRYWF9NQ0JTUDFfQkFTRSwKLQkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMV9SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMV9UWCwKLQkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAotCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfVFgsCi0JfSwKLQl7Ci0JCS5waHlzX2Jhc2UJPSBPTUFQMjRYWF9NQ0JTUDJfQkFTRSwKLQkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9UWCwKLQkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1JYLAotCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfVFgsCi0JfSwKLQl7Ci0JCS5waHlzX2Jhc2UJPSBPTUFQMjQzMF9NQ0JTUDNfQkFTRSwKLQkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQM19SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQM19UWCwKLQkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1JYLAotCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfVFgsCi0JfSwKLQl7Ci0JCS5waHlzX2Jhc2UJPSBPTUFQMjQzMF9NQ0JTUDRfQkFTRSwKLQkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQNF9SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQNF9UWCwKLQkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1JYLAotCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfVFgsCi0JfSwKLQl7Ci0JCS5waHlzX2Jhc2UJPSBPTUFQMjQzMF9NQ0JTUDVfQkFTRSwKLQkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQNV9SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQNV9UWCwKLQkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1JYLAotCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfVFgsCi0JfSwKLX07Ci0jZGVmaW5lIE9NQVAyNDMwX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwX3BkYXRhKQotI2RlZmluZSBPTUFQMjQzMF9NQ0JTUF9SRUdfTlVNCQkoT01BUF9NQ0JTUF9SRUdfUkNDUiAvIHNpemVvZih1MzIpICsgMSkKLSNlbHNlCi0jZGVmaW5lIG9tYXAyNDMwX21jYnNwX3BkYXRhCQlOVUxMCi0jZGVmaW5lIE9NQVAyNDMwX01DQlNQX1BEQVRBX1NaCQkwCi0jZGVmaW5lIE9NQVAyNDMwX01DQlNQX1JFR19OVU0JCTAKLSNlbmRpZgorc3RhdGljIGludCBvbWFwX2luaXRfbWNic3Aoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICp1bnVzZWQpCit7CisJaW50IGlkLCBjb3VudCA9IDE7CisJY2hhciAqbmFtZSA9ICJvbWFwLW1jYnNwIjsKKwlzdHJ1Y3Qgb21hcF9od21vZCAqb2hfZGV2aWNlWzJdOworCXN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gTlVMTDsKKwlzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhIG9tYXAzNHh4X21jYnNwX3BkYXRhW10gPSB7Ci0JewotCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1AxX0JBU0UsCi0JCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlgsCi0JCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsCi0JCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9SWCwKLQkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYLAotCQkuYnVmZmVyX3NpemUJPSAweDgwLCAvKiBUaGUgRklGTyBoYXMgMTI4IGxvY2F0aW9ucyAqLwotCX0sCi0JewotCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1AyX0JBU0UsCi0JCS5waHlzX2Jhc2Vfc3QJPSBPTUFQMzRYWF9NQ0JTUDJfU1RfQkFTRSwKLQkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9SWCwKLQkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9UWCwKLQkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1JYLAotCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfVFgsCi0JCS5idWZmZXJfc2l6ZQk9IDB4NTAwLCAvKiBUaGUgRklGTyBoYXMgMTAyNCArIDI1NiBsb2NhdGlvbnMgKi8KLQl9LAotCXsKLQkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQM19CQVNFLAotCQkucGh5c19iYXNlX3N0CT0gT01BUDM0WFhfTUNCU1AzX1NUX0JBU0UsCi0JCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDNfUlgsCi0JCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDNfVFgsCi0JCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9SWCwKLQkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1RYLAotCQkuYnVmZmVyX3NpemUJPSAweDgwLCAvKiBUaGUgRklGTyBoYXMgMTI4IGxvY2F0aW9ucyAqLwotCX0sCi0JewotCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1A0X0JBU0UsCi0JCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDRfUlgsCi0JCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDRfVFgsCi0JCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9SWCwKLQkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1RYLAotCQkuYnVmZmVyX3NpemUJPSAweDgwLCAvKiBUaGUgRklGTyBoYXMgMTI4IGxvY2F0aW9ucyAqLwotCX0sCi0JewotCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1A1X0JBU0UsCi0JCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDVfUlgsCi0JCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDVfVFgsCi0JCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9SWCwKLQkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1RYLAotCQkuYnVmZmVyX3NpemUJPSAweDgwLCAvKiBUaGUgRklGTyBoYXMgMTI4IGxvY2F0aW9ucyAqLwotCX0sCi19OwotI2RlZmluZSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMzR4eF9tY2JzcF9wZGF0YSkKLSNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUkVHX05VTQkJKE9NQVBfTUNCU1BfUkVHX1JDQ1IgLyBzaXplb2YodTMyKSArIDEpCi0jZWxzZQotI2RlZmluZSBvbWFwMzR4eF9tY2JzcF9wZGF0YQkJTlVMTAotI2RlZmluZSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWgkJMAotI2RlZmluZSBPTUFQMzRYWF9NQ0JTUF9SRUdfTlVNCQkwCi0jZW5kaWYKKwlzc2NhbmYob2gtPm5hbWUsICJtY2JzcCVkIiwgJmlkKTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDQ0eHhfbWNic3BfcGRhdGFbXSA9IHsKLQl7Ci0JCS5waHlzX2Jhc2UgICAgICA9IE9NQVA0NFhYX01DQlNQMV9CQVNFLAotCQkuZG1hX3J4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1AxX1JYLAotCQkuZG1hX3R4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1AxX1RYLAotCQkudHhfaXJxICAgICAgICAgPSBPTUFQNDRYWF9JUlFfTUNCU1AxLAotCX0sCi0JewotCQkucGh5c19iYXNlICAgICAgPSBPTUFQNDRYWF9NQ0JTUDJfQkFTRSwKLQkJLmRtYV9yeF9zeW5jICAgID0gT01BUDQ0WFhfRE1BX01DQlNQMl9SWCwKLQkJLmRtYV90eF9zeW5jICAgID0gT01BUDQ0WFhfRE1BX01DQlNQMl9UWCwKLQkJLnR4X2lycSAgICAgICAgID0gT01BUDQ0WFhfSVJRX01DQlNQMiwKLQl9LAotCXsKLQkJLnBoeXNfYmFzZSAgICAgID0gT01BUDQ0WFhfTUNCU1AzX0JBU0UsCi0JCS5kbWFfcnhfc3luYyAgICA9IE9NQVA0NFhYX0RNQV9NQ0JTUDNfUlgsCi0JCS5kbWFfdHhfc3luYyAgICA9IE9NQVA0NFhYX0RNQV9NQ0JTUDNfVFgsCi0JCS50eF9pcnEgICAgICAgICA9IE9NQVA0NFhYX0lSUV9NQ0JTUDMsCi0JfSwKLQl7Ci0JCS5waHlzX2Jhc2UgICAgICA9IE9NQVA0NFhYX01DQlNQNF9CQVNFLAotCQkuZG1hX3J4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1A0X1JYLAotCQkuZG1hX3R4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1A0X1RYLAotCQkudHhfaXJxICAgICAgICAgPSBPTUFQNDRYWF9JUlFfTUNCU1A0LAotCX0sCi19OwotI2RlZmluZSBPTUFQNDRYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcF9wZGF0YSkKLSNkZWZpbmUgT01BUDQ0WFhfTUNCU1BfUkVHX05VTQkJKE9NQVBfTUNCU1BfUkVHX1JDQ1IgLyBzaXplb2YodTMyKSArIDEpCisJcGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkgeworCQlwcl9lcnIoIiVzOiBObyBtZW1vcnkgZm9yIG1jYnNwXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBkYXRhLT5tY2JzcF9jb25maWdfdHlwZSA9IG9oLT5jbGFzcy0+cmV2OworCisJaWYgKG9oLT5jbGFzcy0+cmV2ID09IE1DQlNQX0NPTkZJR19UWVBFMykgeworCQlpZiAoaWQgPT0gMikKKwkJCS8qIFRoZSBGSUZPIGhhcyAxMDI0ICsgMjU2IGxvY2F0aW9ucyAqLworCQkJcGRhdGEtPmJ1ZmZlcl9zaXplID0gMHg1MDA7CisJCWVsc2UKKwkJCS8qIFRoZSBGSUZPIGhhcyAxMjggbG9jYXRpb25zICovCisJCQlwZGF0YS0+YnVmZmVyX3NpemUgPSAweDgwOworCX0KKworCW9oX2RldmljZVswXSA9IG9oOworCisJaWYgKG9oLT5kZXZfYXR0cikgeworCQlvaF9kZXZpY2VbMV0gPSBvbWFwX2h3bW9kX2xvb2t1cCgoCisJCShzdHJ1Y3Qgb21hcF9tY2JzcF9kZXZfYXR0ciAqKShvaC0+ZGV2X2F0dHIpKS0+c2lkZXRvbmUpOworCQljb3VudCsrOworCX0KKwlvZCA9IG9tYXBfZGV2aWNlX2J1aWxkX3NzKG5hbWUsIGlkLCBvaF9kZXZpY2UsIGNvdW50LCBwZGF0YSwKKwkJCQlzaXplb2YoKnBkYXRhKSwgb21hcDJfbWNic3BfbGF0ZW5jeSwKKwkJCQlBUlJBWV9TSVpFKG9tYXAyX21jYnNwX2xhdGVuY3kpLCBmYWxzZSk7CisJa2ZyZWUocGRhdGEpOworCWlmIChJU19FUlIob2QpKSAgeworCQlwcl9lcnIoIiVzOiBDYW50IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolcy5cbiIsIF9fZnVuY19fLAorCQkJCQluYW1lLCBvaC0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKG9kKTsKKwl9CisJb21hcF9tY2JzcF9jb3VudCsrOworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9tY2JzcF9pbml0KHZvaWQpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7Ci0JCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWjsKLQkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDI0MjBfTUNCU1BfUkVHX05VTSAqIHNpemVvZih1MTYpOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKLQkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAyNDMwX01DQlNQX1BEQVRBX1NaOwotCQlvbWFwX21jYnNwX2NhY2hlX3NpemUgPSBPTUFQMjQzMF9NQ0JTUF9SRUdfTlVNICogc2l6ZW9mKHUzMik7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDM0WFhfTUNCU1BfUERBVEFfU1o7Ci0JCW9tYXBfbWNic3BfY2FjaGVfc2l6ZSA9IE9NQVAzNFhYX01DQlNQX1JFR19OVU0gKiBzaXplb2YodTMyKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCW9tYXBfbWNic3BfY291bnQgPSBPTUFQNDRYWF9NQ0JTUF9QREFUQV9TWjsKLQkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDQ0WFhfTUNCU1BfUkVHX05VTSAqIHNpemVvZih1MzIpOwotCX0KKwlvbWFwX2h3bW9kX2Zvcl9lYWNoX2J5X2NsYXNzKCJtY2JzcCIsIG9tYXBfaW5pdF9tY2JzcCwgTlVMTCk7CiAKIAltY2JzcF9wdHIgPSBremFsbG9jKG9tYXBfbWNic3BfY291bnQgKiBzaXplb2Yoc3RydWN0IG9tYXBfbWNic3AgKiksCiAJCQkJCQkJCUdGUF9LRVJORUwpOwogCWlmICghbWNic3BfcHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKLQkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDI0MjBfbWNic3BfcGRhdGEsCi0JCQkJCQlPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWik7Ci0JaWYgKGNwdV9pc19vbWFwMjQzMCgpKQotCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMjQzMF9tY2JzcF9wZGF0YSwKLQkJCQkJCU9NQVAyNDMwX01DQlNQX1BEQVRBX1NaKTsKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCW9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKG9tYXAzNHh4X21jYnNwX3BkYXRhLAotCQkJCQkJT01BUDM0WFhfTUNCU1BfUERBVEFfU1opOwotCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDQ0eHhfbWNic3BfcGRhdGEsCi0JCQkJCQlPTUFQNDRYWF9NQ0JTUF9QREFUQV9TWik7Ci0KIAlyZXR1cm4gb21hcF9tY2JzcF9pbml0KCk7CiB9CiBhcmNoX2luaXRjYWxsKG9tYXAyX21jYnNwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggNmM4NDY1OS4uYmIwNDNjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIG9tYXBfaHdtb2RfbXV4X2luaXQoc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAqYnBhZHMsIGludCBucl9wYWRzKQogewogCXN0cnVjdCBvbWFwX2h3bW9kX211eF9pbmZvICpobXV4OwotCWludCBpOworCWludCBpLCBucl9wYWRzX2R5bmFtaWMgPSAwOwogCiAJaWYgKCFicGFkcyB8fCBucl9wYWRzIDwgMSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0zMDIsOSArMzAyLDQwIEBACiAJCXBhZC0+ZW5hYmxlID0gYnBhZC0+ZW5hYmxlOwogCQlwYWQtPmlkbGUgPSBicGFkLT5pZGxlOwogCQlwYWQtPm9mZiA9IGJwYWQtPm9mZjsKKworCQlpZiAocGFkLT5mbGFncyAmIE9NQVBfREVWSUNFX1BBRF9SRU1VWCkKKwkJCW5yX3BhZHNfZHluYW1pYysrOworCiAJCXByX2RlYnVnKCIlczogSW5pdGlhbGl6ZWQgJXNcbiIsIF9fZnVuY19fLCBwYWQtPm5hbWUpOwogCX0KIAorCWlmICghbnJfcGFkc19keW5hbWljKQorCQlyZXR1cm4gaG11eDsKKworCS8qCisJICogQWRkIHBhZHMgdGhhdCBuZWVkIGR5bmFtaWMgbXV4aW5nIGludG8gYSBzZXBhcmF0ZSBsaXN0CisJICovCisKKwlobXV4LT5ucl9wYWRzX2R5bmFtaWMgPSBucl9wYWRzX2R5bmFtaWM7CisJaG11eC0+cGFkc19keW5hbWljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAqKSAqCisJCQkJCW5yX3BhZHNfZHluYW1pYywgR0ZQX0tFUk5FTCk7CisJaWYgKCFobXV4LT5wYWRzX2R5bmFtaWMpIHsKKwkJcHJfZXJyKCIlczogQ291bGQgbm90IGFsbG9jYXRlIGR5bmFtaWMgcGFkc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gaG11eDsKKwl9CisKKwlucl9wYWRzX2R5bmFtaWMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBobXV4LT5ucl9wYWRzOyBpKyspIHsKKwkJc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAqcGFkID0gJmhtdXgtPnBhZHNbaV07CisKKwkJaWYgKHBhZC0+ZmxhZ3MgJiBPTUFQX0RFVklDRV9QQURfUkVNVVgpIHsKKwkJCXByX2RlYnVnKCIlczogcGFkICVzIHRhZ2dlZCBkeW5hbWljXG4iLAorCQkJCQlfX2Z1bmNfXywgcGFkLT5uYW1lKTsKKwkJCWhtdXgtPnBhZHNfZHluYW1pY1tucl9wYWRzX2R5bmFtaWNdID0gcGFkOworCQkJbnJfcGFkc19keW5hbWljKys7CisJCX0KKwl9CisKIAlyZXR1cm4gaG11eDsKIAogZXJyMzoKQEAgLTMyMiw2ICszNTMsMzYgQEAKIHsKIAlpbnQgaTsKIAorCS8qIFJ1bnRpbWUgaWRsaW5nIG9mIGR5bmFtaWMgcGFkcyAqLworCWlmIChzdGF0ZSA9PSBfSFdNT0RfU1RBVEVfSURMRSAmJiBobXV4LT5lbmFibGVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBobXV4LT5ucl9wYWRzX2R5bmFtaWM7IGkrKykgeworCQkJc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAqcGFkID0gaG11eC0+cGFkc19keW5hbWljW2ldOworCQkJaW50IHZhbCA9IC1FSU5WQUw7CisKKwkJCXZhbCA9IHBhZC0+aWRsZTsKKwkJCW9tYXBfbXV4X3dyaXRlKHBhZC0+cGFydGl0aW9uLCB2YWwsCisJCQkJCXBhZC0+bXV4LT5yZWdfb2Zmc2V0KTsKKwkJfQorCisJCXJldHVybjsKKwl9CisKKwkvKiBSdW50aW1lIGVuYWJsaW5nIG9mIGR5bmFtaWMgcGFkcyAqLworCWlmICgoc3RhdGUgPT0gX0hXTU9EX1NUQVRFX0VOQUJMRUQpICYmIGhtdXgtPnBhZHNfZHluYW1pYworCQkJCQkmJiBobXV4LT5lbmFibGVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBobXV4LT5ucl9wYWRzX2R5bmFtaWM7IGkrKykgeworCQkJc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAqcGFkID0gaG11eC0+cGFkc19keW5hbWljW2ldOworCQkJaW50IHZhbCA9IC1FSU5WQUw7CisKKwkJCXZhbCA9IHBhZC0+ZW5hYmxlOworCQkJb21hcF9tdXhfd3JpdGUocGFkLT5wYXJ0aXRpb24sIHZhbCwKKwkJCQkJcGFkLT5tdXgtPnJlZ19vZmZzZXQpOworCQl9CisKKwkJcmV0dXJuOworCX0KKworCS8qIEVuYWJsaW5nIG9yIGRpc2FibGluZyBvZiBhbGwgcGFkcyAqLwogCWZvciAoaSA9IDA7IGkgPCBobXV4LT5ucl9wYWRzOyBpKyspIHsKIAkJc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAqcGFkID0gJmhtdXgtPnBhZHNbaV07CiAJCWludCBmbGFncywgdmFsID0gLUVJTlZBTDsKQEAgLTMzMCwzMSArMzkxLDIyIEBACiAKIAkJc3dpdGNoIChzdGF0ZSkgewogCQljYXNlIF9IV01PRF9TVEFURV9FTkFCTEVEOgotCQkJaWYgKGZsYWdzICYgT01BUF9ERVZJQ0VfUEFEX0VOQUJMRUQpCi0JCQkJYnJlYWs7Ci0JCQlmbGFncyB8PSBPTUFQX0RFVklDRV9QQURfRU5BQkxFRDsKIAkJCXZhbCA9IHBhZC0+ZW5hYmxlOwogCQkJcHJfZGVidWcoIiVzOiBFbmFibGluZyAlcyAleFxuIiwgX19mdW5jX18sCiAJCQkJCXBhZC0+bmFtZSwgdmFsKTsKIAkJCWJyZWFrOwotCQljYXNlIF9IV01PRF9TVEFURV9JRExFOgotCQkJaWYgKCEoZmxhZ3MgJiBPTUFQX0RFVklDRV9QQURfUkVNVVgpKQotCQkJCWJyZWFrOwotCQkJZmxhZ3MgJj0gfk9NQVBfREVWSUNFX1BBRF9FTkFCTEVEOwotCQkJdmFsID0gcGFkLT5pZGxlOwotCQkJcHJfZGVidWcoIiVzOiBJZGxpbmcgJXMgJXhcbiIsIF9fZnVuY19fLAotCQkJCQlwYWQtPm5hbWUsIHZhbCk7Ci0JCQlicmVhazsKIAkJY2FzZSBfSFdNT0RfU1RBVEVfRElTQUJMRUQ6Ci0JCWRlZmF1bHQ6CiAJCQkvKiBVc2Ugc2FmZSBtb2RlIHVubGVzcyBPTUFQX0RFVklDRV9QQURfUkVNVVggKi8KIAkJCWlmIChmbGFncyAmIE9NQVBfREVWSUNFX1BBRF9SRU1VWCkKIAkJCQl2YWwgPSBwYWQtPm9mZjsKIAkJCWVsc2UKIAkJCQl2YWwgPSBPTUFQX01VWF9NT0RFNzsKLQkJCWZsYWdzICY9IH5PTUFQX0RFVklDRV9QQURfRU5BQkxFRDsKIAkJCXByX2RlYnVnKCIlczogRGlzYWJsaW5nICVzICV4XG4iLCBfX2Z1bmNfXywKIAkJCQkJcGFkLT5uYW1lLCB2YWwpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgKi8KKwkJCWJyZWFrOwogCQl9OwogCiAJCWlmICh2YWwgPj0gMCkgewpAQCAtMzYzLDYgKzQxNSwxMSBAQAogCQkJcGFkLT5mbGFncyA9IGZsYWdzOwogCQl9CiAJfQorCisJaWYgKHN0YXRlID09IF9IV01PRF9TVEFURV9FTkFCTEVEKQorCQlobXV4LT5lbmFibGVkID0gdHJ1ZTsKKwllbHNlCisJCWhtdXgtPmVuYWJsZWQgPSBmYWxzZTsKIH0KIAogI2lmZGVmIENPTkZJR19ERUJVR19GUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKaW5kZXggYTRhYjE3YS4uMTM3ZjMyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCkBAIC0xNTksNyArMTU5LDYgQEAKIAl1MTYJdmFsdWU7CiB9OwogCi0jZGVmaW5lIE9NQVBfREVWSUNFX1BBRF9FTkFCTEVECQlCSVQoNykJLyogTm90IG5lZWRlZCBmb3IgYm9hcmQtKi5jICovCiAjZGVmaW5lIE9NQVBfREVWSUNFX1BBRF9SRU1VWAkJQklUKDEpCS8qIER5bmFtaWNhbGx5IHJlbXV4IGEgcGFkLAogCQkJCQkJICAgbmVlZHMgZW5hYmxlLCBpZGxlIGFuZCBvZmYKIAkJCQkJCSAgIHZhbHVlcyAqLwpAQCAtMTg3LDYgKzE4NiwxMiBAQAogCiBzdHJ1Y3Qgb21hcF9od21vZF9tdXhfaW5mbzsKIAorI2RlZmluZSBPTUFQX01VWF9TVEFUSUMoc2lnbmFsLCBtb2RlKQkJCQkJXAorewkJCQkJCQkJCVwKKwkubmFtZQk9IChzaWduYWwpLAkJCQkJCVwKKwkuZW5hYmxlCT0gKG1vZGUpLAkJCQkJCVwKK30KKwogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXg0NHh4LmMKaW5kZXggYzMyMmU3Yi4uOWE2NjQ0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXg0NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXg0NHh4LmMKQEAgLTc1NSwyNSArNzU1LDkgQEAKICNlbmRpZgogCiAvKgotICogU3VwZXJzZXQgb2YgYWxsIG11eCBtb2RlcyBmb3Igb21hcDQgRVMyLjAKKyAqIFNpZ25hbHMgZGlmZmVyZW50IG9uIEVTMi4wIGNvbXBhcmVkIHRvIHN1cGVyc2V0CiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tdXggX19pbml0ZGF0YSBvbWFwNF9lczJfY29yZV9tdXhtb2Rlc1tdID0gewotCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMCwgMCwgImdwbWNfYWQwIiwgInNkbW1jMl9kYXQwIiwgTlVMTCwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMSwgMCwgImdwbWNfYWQxIiwgInNkbW1jMl9kYXQxIiwgTlVMTCwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMiwgMCwgImdwbWNfYWQyIiwgInNkbW1jMl9kYXQyIiwgTlVMTCwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMywgMCwgImdwbWNfYWQzIiwgInNkbW1jMl9kYXQzIiwgTlVMTCwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FENCwgMCwgImdwbWNfYWQ0IiwgInNkbW1jMl9kYXQ0IiwKLQkJCSJzZG1tYzJfZGlyX2RhdDAiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKLQlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDUsIDAsICJncG1jX2FkNSIsICJzZG1tYzJfZGF0NSIsCi0JCQkic2RtbWMyX2Rpcl9kYXQxIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCi0JX09NQVA0X01VWEVOVFJZKEdQTUNfQUQ2LCAwLCAiZ3BtY19hZDYiLCAic2RtbWMyX2RhdDYiLAotCQkJInNkbW1jMl9kaXJfY21kIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCi0JX09NQVA0X01VWEVOVFJZKEdQTUNfQUQ3LCAwLCAiZ3BtY19hZDciLCAic2RtbWMyX2RhdDciLAotCQkJInNkbW1jMl9jbGtfZmRiayIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorc3RhdGljIHN0cnVjdCBvbWFwX211eCBfX2luaXRkYXRhIG9tYXA0X2VzMl9jb3JlX3N1YnNldFtdID0gewogCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEOCwgMzIsICJncG1jX2FkOCIsICJrcGRfcm93MCIsICJjMmNfZGF0YTE1IiwKIAkJCSJncGlvXzMyIiwgTlVMTCwgInNkbW1jMV9kYXQwIiwgTlVMTCwgTlVMTCksCiAJX09NQVA0X01VWEVOVFJZKEdQTUNfQUQ5LCAzMywgImdwbWNfYWQ5IiwgImtwZF9yb3cxIiwgImMyY19kYXRhMTQiLApAQCAtNzkyLDUyICs3NzYsMTUgQEAKIAkJCSJncGlvXzM5IiwgTlVMTCwgInNkbW1jMV9kYXQ3IiwgTlVMTCwgTlVMTCksCiAJX09NQVA0X01VWEVOVFJZKEdQTUNfQTE2LCA0MCwgImdwbWNfYTE2IiwgImtwZF9yb3c0IiwgImMyY19kYXRhaW4wIiwKIAkJCSJncGlvXzQwIiwgInZlbmNfNjU2X2RhdGEwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX0ExNywgNDEsICJncG1jX2ExNyIsICJrcGRfcm93NSIsICJjMmNfZGF0YWluMSIsCi0JCQkiZ3Bpb180MSIsICJ2ZW5jXzY1Nl9kYXRhMSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMTgsIDQyLCAiZ3BtY19hMTgiLCAia3BkX3JvdzYiLCAiYzJjX2RhdGFpbjIiLAotCQkJImdwaW9fNDIiLCAidmVuY182NTZfZGF0YTIiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEdQTUNfQTE5LCA0MywgImdwbWNfYTE5IiwgImtwZF9yb3c3IiwgImMyY19kYXRhaW4zIiwKLQkJCSJncGlvXzQzIiwgInZlbmNfNjU2X2RhdGEzIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX0EyMCwgNDQsICJncG1jX2EyMCIsICJrcGRfY29sNCIsICJjMmNfZGF0YWluNCIsCi0JCQkiZ3Bpb180NCIsICJ2ZW5jXzY1Nl9kYXRhNCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMjEsIDQ1LCAiZ3BtY19hMjEiLCAia3BkX2NvbDUiLCAiYzJjX2RhdGFpbjUiLAotCQkJImdwaW9fNDUiLCAidmVuY182NTZfZGF0YTUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEdQTUNfQTIyLCA0NiwgImdwbWNfYTIyIiwgImtwZF9jb2w2IiwgImMyY19kYXRhaW42IiwKLQkJCSJncGlvXzQ2IiwgInZlbmNfNjU2X2RhdGE2IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX0EyMywgNDcsICJncG1jX2EyMyIsICJrcGRfY29sNyIsICJjMmNfZGF0YWluNyIsCi0JCQkiZ3Bpb180NyIsICJ2ZW5jXzY1Nl9kYXRhNyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKIAlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMjQsIDQ4LCAiZ3BtY19hMjQiLCAia3BkX2NvbDgiLCAiYzJjX2Nsa291dDAiLAogCQkJImdwaW9fNDgiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEdQTUNfQTI1LCA0OSwgImdwbWNfYTI1IiwgTlVMTCwgImMyY19jbGtvdXQxIiwKLQkJCSJncGlvXzQ5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX05DUzAsIDUwLCAiZ3BtY19uY3MwIiwgTlVMTCwgTlVMTCwgImdwaW9fNTAiLAotCQkJInN5c19uZG1hcmVxMCIsIE5VTEwsIE5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX05DUzEsIDUxLCAiZ3BtY19uY3MxIiwgTlVMTCwgImMyY19kYXRhb3V0NiIsCi0JCQkiZ3Bpb181MSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKIAlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQ1MyLCA1MiwgImdwbWNfbmNzMiIsICJrcGRfcm93OCIsCiAJCQkiYzJjX2RhdGFvdXQ3IiwgImdwaW9fNTIiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX05DUzMsIDUzLCAiZ3BtY19uY3MzIiwgImdwbWNfZGlyIiwKLQkJCSJjMmNfZGF0YW91dDQiLCAiZ3Bpb181MyIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEdQTUNfTldQLCA1NCwgImdwbWNfbndwIiwgImRzaTFfdGUwIiwgTlVMTCwgImdwaW9fNTQiLAotCQkJInN5c19uZG1hcmVxMSIsIE5VTEwsIE5VTEwsIE5VTEwpLAogCV9PTUFQNF9NVVhFTlRSWShHUE1DX0NMSywgNTUsICJncG1jX2NsayIsIE5VTEwsIE5VTEwsICJncGlvXzU1IiwKIAkJCSJzeXNfbmRtYXJlcTIiLCAic2RtbWMxX2NtZCIsIE5VTEwsIE5VTEwpLAogCV9PTUFQNF9NVVhFTlRSWShHUE1DX05BRFZfQUxFLCA1NiwgImdwbWNfbmFkdl9hbGUiLCAiZHNpMV90ZTEiLCBOVUxMLAogCQkJImdwaW9fNTYiLCAic3lzX25kbWFyZXEzIiwgInNkbW1jMV9jbGsiLCBOVUxMLCBOVUxMKSwKLQlfT01BUDRfTVVYRU5UUlkoR1BNQ19OT0UsIDAsICJncG1jX25vZSIsICJzZG1tYzJfY2xrIiwgTlVMTCwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX05XRSwgMCwgImdwbWNfbndlIiwgInNkbW1jMl9jbWQiLCBOVUxMLCBOVUxMLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCi0JX09NQVA0X01VWEVOVFJZKEdQTUNfTkJFMF9DTEUsIDU5LCAiZ3BtY19uYmUwX2NsZSIsICJkc2kyX3RlMCIsIE5VTEwsCi0JCQkiZ3Bpb181OSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShHUE1DX05CRTEsIDYwLCAiZ3BtY19uYmUxIiwgTlVMTCwgImMyY19kYXRhb3V0NSIsCi0JCQkiZ3Bpb182MCIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoR1BNQ19XQUlUMCwgNjEsICJncG1jX3dhaXQwIiwgImRzaTJfdGUxIiwgTlVMTCwKLQkJCSJncGlvXzYxIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCi0JX09NQVA0X01VWEVOVFJZKEdQTUNfV0FJVDEsIDYyLCAiZ3BtY193YWl0MSIsIE5VTEwsICJjMmNfZGF0YW91dDIiLAotCQkJImdwaW9fNjIiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCiAJX09NQVA0X01VWEVOVFJZKEdQTUNfV0FJVDIsIDEwMCwgImdwbWNfd2FpdDIiLCAidXNiYzFfaWN1c2JfdHhlbiIsCiAJCQkiYzJjX2RhdGFvdXQzIiwgImdwaW9fMTAwIiwgInN5c19uZG1hcmVxMCIsIE5VTEwsCiAJCQlOVUxMLCAic2FmZV9tb2RlIiksCkBAIC04NTEsNjIgKzc5OCw2IEBACiAJX09NQVA0X01VWEVOVFJZKEdQTUNfTkNTNywgMTA0LCAiZ3BtY19uY3M3IiwgImRzaTJfdGUxIiwKIAkJCSJjMmNfZGF0YW91dDEiLCAiZ3Bpb18xMDQiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShIRE1JX0hQRCwgNjMsICJoZG1pX2hwZCIsIE5VTEwsIE5VTEwsICJncGlvXzYzIiwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoSERNSV9DRUMsIDY0LCAiaGRtaV9jZWMiLCBOVUxMLCBOVUxMLCAiZ3Bpb182NCIsIE5VTEwsCi0JCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEhETUlfRERDX1NDTCwgNjUsICJoZG1pX2RkY19zY2wiLCBOVUxMLCBOVUxMLAotCQkJImdwaW9fNjUiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEhETUlfRERDX1NEQSwgNjYsICJoZG1pX2RkY19zZGEiLCBOVUxMLCBOVUxMLAotCQkJImdwaW9fNjYiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKENTSTIxX0RYMCwgMCwgImNzaTIxX2R4MCIsIE5VTEwsIE5VTEwsICJncGlfNjciLCBOVUxMLAotCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWTAsIDAsICJjc2kyMV9keTAiLCBOVUxMLCBOVUxMLCAiZ3BpXzY4IiwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFgxLCAwLCAiY3NpMjFfZHgxIiwgTlVMTCwgTlVMTCwgImdwaV82OSIsIE5VTEwsCi0JCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKENTSTIxX0RZMSwgMCwgImNzaTIxX2R5MSIsIE5VTEwsIE5VTEwsICJncGlfNzAiLCBOVUxMLAotCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWDIsIDAsICJjc2kyMV9keDIiLCBOVUxMLCBOVUxMLCAiZ3BpXzcxIiwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFkyLCAwLCAiY3NpMjFfZHkyIiwgTlVMTCwgTlVMTCwgImdwaV83MiIsIE5VTEwsCi0JCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKENTSTIxX0RYMywgMCwgImNzaTIxX2R4MyIsIE5VTEwsIE5VTEwsICJncGlfNzMiLCBOVUxMLAotCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWTMsIDAsICJjc2kyMV9keTMiLCBOVUxMLCBOVUxMLCAiZ3BpXzc0IiwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFg0LCAwLCAiY3NpMjFfZHg0IiwgTlVMTCwgTlVMTCwgImdwaV83NSIsIE5VTEwsCi0JCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKENTSTIxX0RZNCwgMCwgImNzaTIxX2R5NCIsIE5VTEwsIE5VTEwsICJncGlfNzYiLCBOVUxMLAotCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShDU0kyMl9EWDAsIDAsICJjc2kyMl9keDAiLCBOVUxMLCBOVUxMLCAiZ3BpXzc3IiwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoQ1NJMjJfRFkwLCAwLCAiY3NpMjJfZHkwIiwgTlVMTCwgTlVMTCwgImdwaV83OCIsIE5VTEwsCi0JCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKENTSTIyX0RYMSwgMCwgImNzaTIyX2R4MSIsIE5VTEwsIE5VTEwsICJncGlfNzkiLCBOVUxMLAotCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShDU0kyMl9EWTEsIDAsICJjc2kyMl9keTEiLCBOVUxMLCBOVUxMLCAiZ3BpXzgwIiwgTlVMTCwKLQkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoQ0FNX1NIVVRURVIsIDgxLCAiY2FtX3NodXR0ZXIiLCBOVUxMLCBOVUxMLCAiZ3Bpb184MSIsCi0JCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKENBTV9TVFJPQkUsIDgyLCAiY2FtX3N0cm9iZSIsIE5VTEwsIE5VTEwsICJncGlvXzgyIiwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoQ0FNX0dMT0JBTFJFU0VULCA4MywgImNhbV9nbG9iYWxyZXNldCIsIE5VTEwsIE5VTEwsCi0JCQkiZ3Bpb184MyIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9DTEssIDg0LCAidXNiYjFfdWxwaXRsbF9jbGsiLAotCQkJImhzaTFfY2F3YWtlIiwgTlVMTCwgImdwaW9fODQiLCAidXNiYjFfdWxwaXBoeV9jbGsiLAotCQkJTlVMTCwgImh3X2RiZzIwIiwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9VTFBJVExMX1NUUCwgODUsICJ1c2JiMV91bHBpdGxsX3N0cCIsCi0JCQkiaHNpMV9jYWRhdGEiLCAibWNic3A0X2Nsa3IiLCAiZ3Bpb184NSIsCi0JCQkidXNiYjFfdWxwaXBoeV9zdHAiLCAidXNiYjFfbW1fcnhkcCIsICJod19kYmcyMSIsCi0JCQkic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfRElSLCA4NiwgInVzYmIxX3VscGl0bGxfZGlyIiwKLQkJCSJoc2kxX2NhZmxhZyIsICJtY2JzcDRfZnNyIiwgImdwaW9fODYiLAotCQkJInVzYmIxX3VscGlwaHlfZGlyIiwgTlVMTCwgImh3X2RiZzIyIiwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9VTFBJVExMX05YVCwgODcsICJ1c2JiMV91bHBpdGxsX254dCIsCi0JCQkiaHNpMV9hY3JlYWR5IiwgIm1jYnNwNF9mc3giLCAiZ3Bpb184NyIsCi0JCQkidXNiYjFfdWxwaXBoeV9ueHQiLCAidXNiYjFfbW1fcnhkbSIsICJod19kYmcyMyIsCi0JCQkic2FmZV9tb2RlIiksCiAJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfREFUMCwgODgsICJ1c2JiMV91bHBpdGxsX2RhdDAiLAogCQkJImhzaTFfYWN3YWtlIiwgIm1jYnNwNF9jbGt4IiwgImdwaW9fODgiLAogCQkJInVzYmIxX3VscGlwaHlfZGF0MCIsICJ1c2JiMV9tbV90eGVuIiwgImh3X2RiZzI0IiwKQEAgLTkyMiw4NCArODEzLDYgQEAKIAlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQzLCA5MSwgInVzYmIxX3VscGl0bGxfZGF0MyIsCiAJCQkiaHNpMV9jYXJlYWR5IiwgTlVMTCwgImdwaW9fOTEiLCAidXNiYjFfdWxwaXBoeV9kYXQzIiwKIAkJCSJ1c2JiMV9tbV9yeHJjdiIsICJod19kYmcyNyIsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQ0LCA5MiwgInVzYmIxX3VscGl0bGxfZGF0NCIsCi0JCQkiZG10aW1lcjhfcHdtX2V2dCIsICJhYmVfbWNic3AzX2RyIiwgImdwaW9fOTIiLAotCQkJInVzYmIxX3VscGlwaHlfZGF0NCIsIE5VTEwsICJod19kYmcyOCIsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQ1LCA5MywgInVzYmIxX3VscGl0bGxfZGF0NSIsCi0JCQkiZG10aW1lcjlfcHdtX2V2dCIsICJhYmVfbWNic3AzX2R4IiwgImdwaW9fOTMiLAotCQkJInVzYmIxX3VscGlwaHlfZGF0NSIsIE5VTEwsICJod19kYmcyOSIsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQ2LCA5NCwgInVzYmIxX3VscGl0bGxfZGF0NiIsCi0JCQkiZG10aW1lcjEwX3B3bV9ldnQiLCAiYWJlX21jYnNwM19jbGt4IiwgImdwaW9fOTQiLAotCQkJInVzYmIxX3VscGlwaHlfZGF0NiIsICJhYmVfZG1pY19kaW4zIiwgImh3X2RiZzMwIiwKLQkJCSJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQ3LCA5NSwgInVzYmIxX3VscGl0bGxfZGF0NyIsCi0JCQkiZG10aW1lcjExX3B3bV9ldnQiLCAiYWJlX21jYnNwM19mc3giLCAiZ3Bpb185NSIsCi0JCQkidXNiYjFfdWxwaXBoeV9kYXQ3IiwgImFiZV9kbWljX2NsazMiLCAiaHdfZGJnMzEiLAotCQkJInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9IU0lDX0RBVEEsIDk2LCAidXNiYjFfaHNpY19kYXRhIiwgTlVMTCwgTlVMTCwKLQkJCSJncGlvXzk2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9IU0lDX1NUUk9CRSwgOTcsICJ1c2JiMV9oc2ljX3N0cm9iZSIsIE5VTEwsCi0JCQlOVUxMLCAiZ3Bpb185NyIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoVVNCQzFfSUNVU0JfRFAsIDk4LCAidXNiYzFfaWN1c2JfZHAiLCBOVUxMLCBOVUxMLAotCQkJImdwaW9fOTgiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFVTQkMxX0lDVVNCX0RNLCA5OSwgInVzYmMxX2ljdXNiX2RtIiwgTlVMTCwgTlVMTCwKLQkJCSJncGlvXzk5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfQ0xLLCAxMDAsICJzZG1tYzFfY2xrIiwgTlVMTCwgImRwbV9lbXUxOSIsCi0JCQkiZ3Bpb18xMDAiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFNETU1DMV9DTUQsIDEwMSwgInNkbW1jMV9jbWQiLCBOVUxMLCAidWFydDFfcngiLAotCQkJImdwaW9fMTAxIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUMCwgMTAyLCAic2RtbWMxX2RhdDAiLCBOVUxMLCAiZHBtX2VtdTE4IiwKLQkJCSJncGlvXzEwMiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoU0RNTUMxX0RBVDEsIDEwMywgInNkbW1jMV9kYXQxIiwgTlVMTCwgImRwbV9lbXUxNyIsCi0JCQkiZ3Bpb18xMDMiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFNETU1DMV9EQVQyLCAxMDQsICJzZG1tYzFfZGF0MiIsIE5VTEwsICJkcG1fZW11MTYiLAotCQkJImdwaW9fMTA0IiwgImp0YWdfdG1zX3Rtc2MiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFNETU1DMV9EQVQzLCAxMDUsICJzZG1tYzFfZGF0MyIsIE5VTEwsICJkcG1fZW11MTUiLAotCQkJImdwaW9fMTA1IiwgImp0YWdfdGNrIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUNCwgMTA2LCAic2RtbWMxX2RhdDQiLCBOVUxMLCBOVUxMLAotCQkJImdwaW9fMTA2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUNSwgMTA3LCAic2RtbWMxX2RhdDUiLCBOVUxMLCBOVUxMLAotCQkJImdwaW9fMTA3IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUNiwgMTA4LCAic2RtbWMxX2RhdDYiLCBOVUxMLCBOVUxMLAotCQkJImdwaW9fMTA4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUNywgMTA5LCAic2RtbWMxX2RhdDciLCBOVUxMLCBOVUxMLAotCQkJImdwaW9fMTA5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AyX0NMS1gsIDExMCwgImFiZV9tY2JzcDJfY2xreCIsICJtY3NwaTJfY2xrIiwKLQkJCSJhYmVfbWNhc3BfYWhjbGt4IiwgImdwaW9fMTEwIiwgInVzYmIyX21tX3J4ZG0iLAotCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AyX0RSLCAxMTEsICJhYmVfbWNic3AyX2RyIiwgIm1jc3BpMl9zb21pIiwKLQkJCSJhYmVfbWNhc3BfYXhyIiwgImdwaW9fMTExIiwgInVzYmIyX21tX3J4ZHAiLCBOVUxMLAotCQkJTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AyX0RYLCAxMTIsICJhYmVfbWNic3AyX2R4IiwgIm1jc3BpMl9zaW1vIiwKLQkJCSJhYmVfbWNhc3BfYW11dGUiLCAiZ3Bpb18xMTIiLCAidXNiYjJfbW1fcnhyY3YiLCBOVUxMLAotCQkJTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AyX0ZTWCwgMTEzLCAiYWJlX21jYnNwMl9mc3giLCAibWNzcGkyX2NzMCIsCi0JCQkiYWJlX21jYXNwX2Fmc3giLCAiZ3Bpb18xMTMiLCAidXNiYjJfbW1fdHhlbiIsIE5VTEwsCi0JCQlOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEFCRV9NQ0JTUDFfQ0xLWCwgMTE0LCAiYWJlX21jYnNwMV9jbGt4IiwKLQkJCSJhYmVfc2xpbWJ1czFfY2xvY2siLCBOVUxMLCAiZ3Bpb18xMTQiLCBOVUxMLCBOVUxMLAotCQkJTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AxX0RSLCAxMTUsICJhYmVfbWNic3AxX2RyIiwKLQkJCSJhYmVfc2xpbWJ1czFfZGF0YSIsIE5VTEwsICJncGlvXzExNSIsIE5VTEwsIE5VTEwsCi0JCQlOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEFCRV9NQ0JTUDFfRFgsIDExNiwgImFiZV9tY2JzcDFfZHgiLCAic2RtbWMzX2RhdDIiLAotCQkJImFiZV9tY2FzcF9hY2xreCIsICJncGlvXzExNiIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKEFCRV9NQ0JTUDFfRlNYLCAxMTcsICJhYmVfbWNic3AxX2ZzeCIsICJzZG1tYzNfZGF0MyIsCi0JCQkiYWJlX21jYXNwX2FtdXRlaW4iLCAiZ3Bpb18xMTciLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfUERNX1VMX0RBVEEsIDAsICJhYmVfcGRtX3VsX2RhdGEiLAotCQkJImFiZV9tY2JzcDNfZHIiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfUERNX0RMX0RBVEEsIDAsICJhYmVfcGRtX2RsX2RhdGEiLAotCQkJImFiZV9tY2JzcDNfZHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfUERNX0ZSQU1FLCAwLCAiYWJlX3BkbV9mcmFtZSIsICJhYmVfbWNic3AzX2Nsa3giLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShBQkVfUERNX0xCX0NMSywgMCwgImFiZV9wZG1fbGJfY2xrIiwgImFiZV9tY2JzcDNfZnN4IiwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoQUJFX0NMS1MsIDExOCwgImFiZV9jbGtzIiwgTlVMTCwgTlVMTCwgImdwaW9fMTE4IiwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKIAlfT01BUDRfTVVYRU5UUlkoQUJFX0RNSUNfQ0xLMSwgMTE5LCAiYWJlX2RtaWNfY2xrMSIsIE5VTEwsIE5VTEwsCiAJCQkiZ3Bpb18xMTkiLCAidXNiYjJfbW1fdHhzZTAiLCAidWFydDRfY3RzIiwgTlVMTCwKIAkJCSJzYWZlX21vZGUiKSwKQEAgLTEwMTIsNTggKzgyNSw2IEBACiAJX09NQVA0X01VWEVOVFJZKEFCRV9ETUlDX0RJTjMsIDEyMiwgImFiZV9kbWljX2RpbjMiLCAic2xpbWJ1czJfZGF0YSIsCiAJCQkiYWJlX2RtaWNfY2xrMiIsICJncGlvXzEyMiIsIE5VTEwsICJkbXRpbWVyOV9wd21fZXZ0IiwKIAkJCU5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoVUFSVDJfQ1RTLCAxMjMsICJ1YXJ0Ml9jdHMiLCAic2RtbWMzX2NsayIsIE5VTEwsCi0JCQkiZ3Bpb18xMjMiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFVBUlQyX1JUUywgMTI0LCAidWFydDJfcnRzIiwgInNkbW1jM19jbWQiLCBOVUxMLAotCQkJImdwaW9fMTI0IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVQVJUMl9SWCwgMTI1LCAidWFydDJfcngiLCAic2RtbWMzX2RhdDAiLCBOVUxMLAotCQkJImdwaW9fMTI1IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVQVJUMl9UWCwgMTI2LCAidWFydDJfdHgiLCAic2RtbWMzX2RhdDEiLCBOVUxMLAotCQkJImdwaW9fMTI2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShIRFFfU0lPLCAxMjcsICJoZHFfc2lvIiwgImkyYzNfc2NjYiIsICJpMmMyX3NjY2IiLAotCQkJImdwaW9fMTI3IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShJMkMxX1NDTCwgMCwgImkyYzFfc2NsIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCU5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShJMkMxX1NEQSwgMCwgImkyYzFfc2RhIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCU5VTEwsIE5VTEwpLAotCV9PTUFQNF9NVVhFTlRSWShJMkMyX1NDTCwgMTI4LCAiaTJjMl9zY2wiLCAidWFydDFfcngiLCBOVUxMLAotCQkJImdwaW9fMTI4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShJMkMyX1NEQSwgMTI5LCAiaTJjMl9zZGEiLCAidWFydDFfdHgiLCBOVUxMLAotCQkJImdwaW9fMTI5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShJMkMzX1NDTCwgMTMwLCAiaTJjM19zY2wiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzAiLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShJMkMzX1NEQSwgMTMxLCAiaTJjM19zZGEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzEiLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShJMkM0X1NDTCwgMTMyLCAiaTJjNF9zY2wiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzIiLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShJMkM0X1NEQSwgMTMzLCAiaTJjNF9zZGEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzMiLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ0xLLCAxMzQsICJtY3NwaTFfY2xrIiwgTlVMTCwgTlVMTCwgImdwaW9fMTM0IiwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX1NPTUksIDEzNSwgIm1jc3BpMV9zb21pIiwgTlVMTCwgTlVMTCwKLQkJCSJncGlvXzEzNSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX1NJTU8sIDEzNiwgIm1jc3BpMV9zaW1vIiwgTlVMTCwgTlVMTCwKLQkJCSJncGlvXzEzNiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX0NTMCwgMTM3LCAibWNzcGkxX2NzMCIsIE5VTEwsIE5VTEwsICJncGlvXzEzNyIsCi0JCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKE1DU1BJMV9DUzEsIDEzOCwgIm1jc3BpMV9jczEiLCAidWFydDFfcngiLCBOVUxMLAotCQkJImdwaW9fMTM4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ1MyLCAxMzksICJtY3NwaTFfY3MyIiwgInVhcnQxX2N0cyIsCi0JCQkic2xpbWJ1czJfY2xvY2siLCAiZ3Bpb18xMzkiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ1MzLCAxNDAsICJtY3NwaTFfY3MzIiwgInVhcnQxX3J0cyIsCi0JCQkic2xpbWJ1czJfZGF0YSIsICJncGlvXzE0MCIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFVBUlQzX0NUU19SQ1RYLCAxNDEsICJ1YXJ0M19jdHNfcmN0eCIsICJ1YXJ0MV90eCIsCi0JCQlOVUxMLCAiZ3Bpb18xNDEiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFVBUlQzX1JUU19TRCwgMTQyLCAidWFydDNfcnRzX3NkIiwgTlVMTCwgTlVMTCwKLQkJCSJncGlvXzE0MiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoVUFSVDNfUlhfSVJSWCwgMTQzLCAidWFydDNfcnhfaXJyeCIsCi0JCQkiZG10aW1lcjhfcHdtX2V2dCIsIE5VTEwsICJncGlvXzE0MyIsIE5VTEwsIE5VTEwsCi0JCQlOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFVBUlQzX1RYX0lSVFgsIDE0NCwgInVhcnQzX3R4X2lydHgiLAotCQkJImRtdGltZXI5X3B3bV9ldnQiLCBOVUxMLCAiZ3Bpb18xNDQiLCBOVUxMLCBOVUxMLAotCQkJTlVMTCwgInNhZmVfbW9kZSIpLAogCV9PTUFQNF9NVVhFTlRSWShTRE1NQzVfQ0xLLCAxNDUsICJzZG1tYzVfY2xrIiwgIm1jc3BpMl9jbGsiLAogCQkJInVzYmMxX2ljdXNiX2RwIiwgImdwaW9fMTQ1IiwgTlVMTCwgInNkbW1jMl9jbGsiLAogCQkJTlVMTCwgInNhZmVfbW9kZSIpLApAQCAtMTA5Niw5ICs4NTcsNiBAQAogCQkJImdwaW9fMTU1IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAogCV9PTUFQNF9NVVhFTlRSWShVQVJUNF9UWCwgMTU2LCAidWFydDRfdHgiLCAic2RtbWM0X2RhdDEiLCAia3BkX2NvbDgiLAogCQkJImdwaW9fMTU2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX0NMSywgMTU3LCAidXNiYjJfdWxwaXRsbF9jbGsiLAotCQkJInVzYmIyX3VscGlwaHlfY2xrIiwgInNkbW1jNF9jbWQiLCAiZ3Bpb18xNTciLAotCQkJImhzaTJfY2F3YWtlIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAogCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX1NUUCwgMTU4LCAidXNiYjJfdWxwaXRsbF9zdHAiLAogCQkJInVzYmIyX3VscGlwaHlfc3RwIiwgInNkbW1jNF9jbGsiLCAiZ3Bpb18xNTgiLAogCQkJImhzaTJfY2FkYXRhIiwgImRpc3BjMl9kYXRhMjMiLCBOVUxMLCAic2FmZV9tb2RlIiksCkBAIC0xMTQwLDEwICs4OTgsNiBAQAogCQkJInVzYmIyX3VscGlwaHlfZGF0NyIsICJzZG1tYzNfY2xrIiwgImdwaW9fMTY4IiwKIAkJCSJtY3NwaTNfY2xrIiwgImRpc3BjMl9kYXRhMTEiLCAicmZiaV9kYXRhMTEiLAogCQkJInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9IU0lDX0RBVEEsIDE2OSwgInVzYmIyX2hzaWNfZGF0YSIsIE5VTEwsIE5VTEwsCi0JCQkiZ3Bpb18xNjkiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFVTQkIyX0hTSUNfU1RST0JFLCAxNzAsICJ1c2JiMl9oc2ljX3N0cm9iZSIsIE5VTEwsCi0JCQlOVUxMLCAiZ3Bpb18xNzAiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCiAJX09NQVA0X01VWEVOVFJZKEtQRF9DT0wzLCAxNzEsICJrcGRfY29sMyIsICJrcGRfY29sMCIsIE5VTEwsCiAJCQkiZ3Bpb18xNzEiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCiAJX09NQVA0X01VWEVOVFJZKEtQRF9DT0w0LCAxNzIsICJrcGRfY29sNCIsICJrcGRfY29sMSIsIE5VTEwsCkBAIC0xMTY4LDM2ICs5MjIsMTAgQEAKIAkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKIAlfT01BUDRfTVVYRU5UUlkoS1BEX1JPVzIsIDMsICJrcGRfcm93MiIsICJrcGRfcm93NSIsIE5VTEwsICJncGlvXzMiLAogCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShVU0JBMF9PVEdfQ0UsIDAsICJ1c2JhMF9vdGdfY2UiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCiAJX09NQVA0X01VWEVOVFJZKFVTQkEwX09UR19EUCwgMCwgInVzYmEwX290Z19kcCIsICJ1YXJ0M19yeF9pcnJ4IiwKIAkJCSJ1YXJ0Ml9yeCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKIAlfT01BUDRfTVVYRU5UUlkoVVNCQTBfT1RHX0RNLCAwLCAidXNiYTBfb3RnX2RtIiwgInVhcnQzX3R4X2lydHgiLAogCQkJInVhcnQyX3R4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShGUkVGX0NMSzFfT1VULCAxODEsICJmcmVmX2NsazFfb3V0IiwgTlVMTCwgTlVMTCwKLQkJCSJncGlvXzE4MSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoRlJFRl9DTEsyX09VVCwgMTgyLCAiZnJlZl9jbGsyX291dCIsIE5VTEwsIE5VTEwsCi0JCQkiZ3Bpb18xODIiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFNZU19OSVJRMSwgMCwgInN5c19uaXJxMSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFNZU19OSVJRMiwgMTgzLCAic3lzX25pcnEyIiwgTlVMTCwgTlVMTCwgImdwaW9fMTgzIiwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoU1lTX0JPT1QwLCAxODQsICJzeXNfYm9vdDAiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xODQiLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShTWVNfQk9PVDEsIDE4NSwgInN5c19ib290MSIsIE5VTEwsIE5VTEwsICJncGlvXzE4NSIsCi0JCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFNZU19CT09UMiwgMTg2LCAic3lzX2Jvb3QyIiwgTlVMTCwgTlVMTCwgImdwaW9fMTg2IiwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoU1lTX0JPT1QzLCAxODcsICJzeXNfYm9vdDMiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xODciLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAotCV9PTUFQNF9NVVhFTlRSWShTWVNfQk9PVDQsIDE4OCwgInN5c19ib290NCIsIE5VTEwsIE5VTEwsICJncGlvXzE4OCIsCi0JCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCi0JX09NQVA0X01VWEVOVFJZKFNZU19CT09UNSwgMTg5LCAic3lzX2Jvb3Q1IiwgTlVMTCwgTlVMTCwgImdwaW9fMTg5IiwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTAsIDExLCAiZHBtX2VtdTAiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMSIsIE5VTEwsCi0JCQlOVUxMLCAiaHdfZGJnMCIsICJzYWZlX21vZGUiKSwKLQlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTEsIDEyLCAiZHBtX2VtdTEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMiIsIE5VTEwsCi0JCQlOVUxMLCAiaHdfZGJnMSIsICJzYWZlX21vZGUiKSwKIAlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTIsIDEzLCAiZHBtX2VtdTIiLCAidXNiYTBfdWxwaXBoeV9jbGsiLCBOVUxMLAogCQkJImdwaW9fMTMiLCBOVUxMLCAiZGlzcGMyX2ZpZCIsICJod19kYmcyIiwKIAkJCSJzYWZlX21vZGUiKSwKQEAgLTE1ODYsNiArMTMxNCw3IEBACiAJc3RydWN0IG9tYXBfYmFsbCAqcGFja2FnZV9iYWxsc19jb3JlOwogCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHNfd2t1cCA9IG9tYXA0X3drdXBfY2JsX2Nic19iYWxsOwogCXN0cnVjdCBvbWFwX211eCAqY29yZV9tdXhtb2RlczsKKwlzdHJ1Y3Qgb21hcF9tdXggKmNvcmVfc3Vic2V0ID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJc3dpdGNoIChmbGFncyAmIE9NQVBfUEFDS0FHRV9NQVNLKSB7CkBAIC0xNTk3LDcgKzEzMjYsOCBAQAogCWNhc2UgT01BUF9QQUNLQUdFX0NCUzoKIAkJcHJfZGVidWcoIiVzOiBPTUFQNDQzMCBFUzIuWCAtPiBPTUFQX1BBQ0tBR0VfQ0JTXG4iLCBfX2Z1bmNfXyk7CiAJCXBhY2thZ2VfYmFsbHNfY29yZSA9IG9tYXA0X2NvcmVfY2JzX2JhbGw7Ci0JCWNvcmVfbXV4bW9kZXMgPSBvbWFwNF9lczJfY29yZV9tdXhtb2RlczsKKwkJY29yZV9tdXhtb2RlcyA9IG9tYXA0X2NvcmVfbXV4bW9kZXM7CisJCWNvcmVfc3Vic2V0ID0gb21hcDRfZXMyX2NvcmVfc3Vic2V0OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9lcnIoIiVzOiBVbmtub3duIG9tYXAgcGFja2FnZSwgbXV4IGRpc2FibGVkXG4iLCBfX2Z1bmNfXyk7CkBAIC0xNjA4LDcgKzEzMzgsNyBAQAogCQkJICAgIE9NQVBfTVVYX0dQSU9fSU5fTU9ERTMsCiAJCQkgICAgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0NPUkVfTVVYX1BCQVNFLAogCQkJICAgIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9DT1JFX01VWF9TSVpFLAotCQkJICAgIGNvcmVfbXV4bW9kZXMsIE5VTEwsIGJvYXJkX3N1YnNldCwKKwkJCSAgICBjb3JlX211eG1vZGVzLCBjb3JlX3N1YnNldCwgYm9hcmRfc3Vic2V0LAogCQkJICAgIHBhY2thZ2VfYmFsbHNfY29yZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaGVhZHNtcC5TCmluZGV4IDZhZTkzN2EuLjRlZTZhZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhlYWRzbXAuUwpAQCAtNDUsNSArNDUsNSBAQAogCSAqIHNob3VsZCBub3cgY29udGFpbiB0aGUgU1ZDIHN0YWNrIGZvciB0aGlzIGNvcmUKIAkgKi8KIAliCXNlY29uZGFyeV9zdGFydHVwCi1FTkQob21hcF9zZWNvbmRhcnlfc3RhcnR1cCkKK0VORFBST0Mob21hcF9zZWNvbmRhcnlfc3RhcnR1cCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNDR4eC1zbWMuUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQ0eHgtc21jLlMKaW5kZXggMTk4MGRjMy4uZTY5ZDM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNDR4eC1zbWMuUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0NHh4LXNtYy5TCkBAIC0yOSw3ICsyOSw3IEBACiAJZHNiCiAJc21jCSMwCiAJbGRtZmQgICBzcCEsIHtyMi1yMTIsIHBjfQotRU5EKG9tYXBfc21jMSkKK0VORFBST0Mob21hcF9zbWMxKQogCiBFTlRSWShvbWFwX21vZGlmeV9hdXhjb3JlYm9vdDApCiAJc3RtZmQgICBzcCEsIHtyMS1yMTIsIGxyfQpAQCAtMzcsNyArMzcsNyBAQAogCWRzYgogCXNtYwkjMAogCWxkbWZkICAgc3AhLCB7cjEtcjEyLCBwY30KLUVORChvbWFwX21vZGlmeV9hdXhjb3JlYm9vdDApCitFTkRQUk9DKG9tYXBfbW9kaWZ5X2F1eGNvcmVib290MCkKIAogRU5UUlkob21hcF9hdXhjb3JlYm9vdF9hZGRyKQogCXN0bWZkICAgc3AhLCB7cjItcjEyLCBscn0KQEAgLTQ1LDcgKzQ1LDcgQEAKIAlkc2IKIAlzbWMJIzAKIAlsZG1mZCAgIHNwISwge3IyLXIxMiwgcGN9Ci1FTkQob21hcF9hdXhjb3JlYm9vdF9hZGRyKQorRU5EUFJPQyhvbWFwX2F1eGNvcmVib290X2FkZHIpCiAKIEVOVFJZKG9tYXBfcmVhZF9hdXhjb3JlYm9vdDApCiAJc3RtZmQgICBzcCEsIHtyMi1yMTIsIGxyfQpAQCAtNTQsNCArNTQsNCBAQAogCXNtYwkjMAogCW1vdglyMCwgcjAsIGxzciAjOQogCWxkbWZkICAgc3AhLCB7cjItcjEyLCBwY30KLUVORChvbWFwX3JlYWRfYXV4Y29yZWJvb3QwKQorRU5EUFJPQyhvbWFwX3JlYWRfYXV4Y29yZWJvb3QwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCBlMjgyZTM1Li5lMDM0Mjk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBvbWFwX2h3bW9kIGltcGxlbWVudGF0aW9uIGZvciBPTUFQMi8zLzQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBQYXVsIFdhbG1zbGV5LCBCZW5vw650IENvdXNzb24sIEtldmluIEhpbG1hbgogICoKQEAgLTE2Miw5ICsxNjIsNiBAQAogLyogbXB1X29oOiB1c2VkIHRvIGFkZC9yZW1vdmUgTVBVIGluaXRpYXRvciBmcm9tIHNsZWVwZGVwIGxpc3QgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCAqbXB1X29oOwogCi0vKiBpbml0ZWQ6IDAgaWYgb21hcF9od21vZF9pbml0KCkgaGFzIG5vdCB5ZXQgYmVlbiBjYWxsZWQ7IDEgb3RoZXJ3aXNlICovCi1zdGF0aWMgdTggaW5pdGVkOwotCiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zICovCiAKQEAgLTM3Myw3ICszNzAsNyBAQAogCX0KIAogCWF1dG9pZGxlX3NoaWZ0ID0gb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcy0+YXV0b2lkbGVfc2hpZnQ7Ci0JYXV0b2lkbGVfbWFzayA9ICgweDMgPDwgYXV0b2lkbGVfc2hpZnQpOworCWF1dG9pZGxlX21hc2sgPSAoMHgxIDw8IGF1dG9pZGxlX3NoaWZ0KTsKIAogCSp2ICY9IH5hdXRvaWRsZV9tYXNrOwogCSp2IHw9IGF1dG9pZGxlIDw8IGF1dG9pZGxlX3NoaWZ0OwpAQCAtNDYwLDE0ICs0NTcsMTggQEAKICAqIHdpbGwgYmUgYWNjZXNzZWQgYnkgYSBwYXJ0aWN1bGFyIGluaXRpYXRvciAoZS5nLiwgaWYgYSBtb2R1bGUgd2lsbAogICogYmUgYWNjZXNzZWQgYnkgdGhlIElWQSwgdGhlcmUgc2hvdWxkIGJlIGEgc2xlZXBkZXAgYmV0d2VlbiB0aGUgSVZBCiAgKiBpbml0aWF0b3IgYW5kIHRoZSBtb2R1bGUpLiAgT25seSBhcHBsaWVzIHRvIG1vZHVsZXMgaW4gc21hcnQtaWRsZQotICogbW9kZS4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yIG9yIHBhc3NlcyBhbG9uZwotICogY2xrZG1fYWRkX3NsZWVwZGVwKCkgdmFsdWUgdXBvbiBzdWNjZXNzLgorICogbW9kZS4gIElmIHRoZSBjbG9ja2RvbWFpbiBpcyBtYXJrZWQgYXMgbm90IG5lZWRpbmcgYXV0b2RlcHMsIHJldHVybgorICogMCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLiAgT3RoZXJ3aXNlLCByZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciBvcgorICogcGFzc2VzIGFsb25nIGNsa2RtX2FkZF9zbGVlcGRlcCgpIHZhbHVlIHVwb24gc3VjY2Vzcy4KICAqLwogc3RhdGljIGludCBfYWRkX2luaXRpYXRvcl9kZXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCBzdHJ1Y3Qgb21hcF9od21vZCAqaW5pdF9vaCkKIHsKIAlpZiAoIW9oLT5fY2xrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChvaC0+X2Nsay0+Y2xrZG0gJiYgb2gtPl9jbGstPmNsa2RtLT5mbGFncyAmIENMS0RNX05PX0FVVE9ERVBTKQorCQlyZXR1cm4gMDsKKwogCXJldHVybiBjbGtkbV9hZGRfc2xlZXBkZXAob2gtPl9jbGstPmNsa2RtLCBpbml0X29oLT5fY2xrLT5jbGtkbSk7CiB9CiAKQEAgLTQ4MCwxNCArNDgxLDE4IEBACiAgKiBiZSBhY2Nlc3NlZCBieSBhIHBhcnRpY3VsYXIgaW5pdGlhdG9yIChlLmcuLCBpZiBhIG1vZHVsZSB3aWxsIG5vdAogICogYmUgYWNjZXNzZWQgYnkgdGhlIElWQSwgdGhlcmUgc2hvdWxkIGJlIG5vIHNsZWVwZGVwIGJldHdlZW4gdGhlIElWQQogICogaW5pdGlhdG9yIGFuZCB0aGUgbW9kdWxlKS4gIE9ubHkgYXBwbGllcyB0byBtb2R1bGVzIGluIHNtYXJ0LWlkbGUKLSAqIG1vZGUuICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciBvciBwYXNzZXMgYWxvbmcKLSAqIGNsa2RtX2RlbF9zbGVlcGRlcCgpIHZhbHVlIHVwb24gc3VjY2Vzcy4KKyAqIG1vZGUuICBJZiB0aGUgY2xvY2tkb21haW4gaXMgbWFya2VkIGFzIG5vdCBuZWVkaW5nIGF1dG9kZXBzLCByZXR1cm4KKyAqIDAgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yIG9yIHBhc3NlcworICogYWxvbmcgY2xrZG1fZGVsX3NsZWVwZGVwKCkgdmFsdWUgdXBvbiBzdWNjZXNzLgogICovCiBzdGF0aWMgaW50IF9kZWxfaW5pdGlhdG9yX2RlcChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHN0cnVjdCBvbWFwX2h3bW9kICppbml0X29oKQogewogCWlmICghb2gtPl9jbGspCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKG9oLT5fY2xrLT5jbGtkbSAmJiBvaC0+X2Nsay0+Y2xrZG0tPmZsYWdzICYgQ0xLRE1fTk9fQVVUT0RFUFMpCisJCXJldHVybiAwOworCiAJcmV0dXJuIGNsa2RtX2RlbF9zbGVlcGRlcChvaC0+X2Nsay0+Y2xrZG0sIGluaXRfb2gtPl9jbGstPmNsa2RtKTsKIH0KIApAQCAtOTA0LDE4ICs5MDksMTYgQEAKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgogICogQGRhdGE6IG5vdCB1c2VkOyBwYXNzIE5VTEwKICAqCi0gKiBDYWxsZWQgYnkgb21hcF9od21vZF9sYXRlX2luaXQoKSAoYWZ0ZXIgb21hcDJfY2xrX2luaXQoKSkuCi0gKiBSZXNvbHZlcyBhbGwgY2xvY2sgbmFtZXMgZW1iZWRkZWQgaW4gdGhlIGh3bW9kLiAgUmV0dXJucyAtRUlOVkFMIGlmCi0gKiB0aGUgb21hcF9od21vZCBoYXMgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgb3IgaWYgdGhlIGNsb2NrcyBoYXZlCi0gKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsIDAgb24gc3VjY2Vzcywgb3IgYSBub24temVybyBlcnJvciBvbgotICogZmFpbHVyZS4KKyAqIENhbGxlZCBieSBvbWFwX2h3bW9kX3NldHVwXyooKSAoYWZ0ZXIgb21hcDJfY2xrX2luaXQoKSkuCisgKiBSZXNvbHZlcyBhbGwgY2xvY2sgbmFtZXMgZW1iZWRkZWQgaW4gdGhlIGh3bW9kLiAgUmV0dXJucyAwIG9uCisgKiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBfaW5pdF9jbG9ja3Moc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICpkYXRhKQogewogCWludCByZXQgPSAwOwogCi0JaWYgKCFvaCB8fCAob2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfUkVHSVNURVJFRCkpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChvaC0+X3N0YXRlICE9IF9IV01PRF9TVEFURV9SRUdJU1RFUkVEKQorCQlyZXR1cm4gMDsKIAogCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogbG9va2luZyB1cCBjbG9ja3NcbiIsIG9oLT5uYW1lKTsKIApAQCAtOTI2LDcgKzkyOSw3IEBACiAJaWYgKCFyZXQpCiAJCW9oLT5fc3RhdGUgPSBfSFdNT0RfU1RBVEVfQ0xLU19JTklURUQ7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTk3MiwyNSArOTc1LDI5IEBACiB9CiAKIC8qKgotICogX2xvb2t1cF9oYXJkcmVzZXQgLSByZXR1cm4gdGhlIHJlZ2lzdGVyIGJpdCBzaGlmdCBmb3IgdGhpcyBod21vZC9yZXNldCBsaW5lCisgKiBfbG9va3VwX2hhcmRyZXNldCAtIGZpbGwgcmVnaXN0ZXIgYml0IGluZm8gZm9yIHRoaXMgaHdtb2QvcmVzZXQgbGluZQogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgcmVzZXQgbGluZSBpbiB0aGUgY29udGV4dCBvZiB0aGlzIGh3bW9kCisgKiBAb2hyaTogc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gKiB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBmaWxsIGluCiAgKgogICogUmV0dXJuIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIHJlc2V0IGxpbmUgdGhhdCBtYXRjaCB0aGUKICAqIGlucHV0IG5hbWUuIFJldHVybiAtRU5PRU5UIGlmIG5vdCBmb3VuZC4KICAqLwotc3RhdGljIHU4IF9sb29rdXBfaGFyZHJlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB1OCBfbG9va3VwX2hhcmRyZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gKm9ocmkpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgb2gtPnJzdF9saW5lc19jbnQ7IGkrKykgewogCQljb25zdCBjaGFyICpyc3RfbGluZSA9IG9oLT5yc3RfbGluZXNbaV0ubmFtZTsKIAkJaWYgKCFzdHJjbXAocnN0X2xpbmUsIG5hbWUpKSB7Ci0JCQl1OCBzaGlmdCA9IG9oLT5yc3RfbGluZXNbaV0ucnN0X3NoaWZ0OwotCQkJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBfbG9va3VwX2hhcmRyZXNldDogJXM6ICVkXG4iLAotCQkJCSBvaC0+bmFtZSwgcnN0X2xpbmUsIHNoaWZ0KTsKKwkJCW9ocmktPnJzdF9zaGlmdCA9IG9oLT5yc3RfbGluZXNbaV0ucnN0X3NoaWZ0OworCQkJb2hyaS0+c3Rfc2hpZnQgPSBvaC0+cnN0X2xpbmVzW2ldLnN0X3NoaWZ0OworCQkJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiAlczogJXM6IHJzdCAlZCBzdCAlZFxuIiwKKwkJCQkgb2gtPm5hbWUsIF9fZnVuY19fLCByc3RfbGluZSwgb2hyaS0+cnN0X3NoaWZ0LAorCQkJCSBvaHJpLT5zdF9zaGlmdCk7CiAKLQkJCXJldHVybiBzaGlmdDsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCkBAIC0xMDA5LDIxICsxMDE2LDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgX2Fzc2VydF9oYXJkcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCBjb25zdCBjaGFyICpuYW1lKQogewotCXU4IHNoaWZ0OworCXN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvIG9ocmk7CisJdTggcmV0OwogCiAJaWYgKCFvaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzaGlmdCA9IF9sb29rdXBfaGFyZHJlc2V0KG9oLCBuYW1lKTsKLQlpZiAoSVNfRVJSX1ZBTFVFKHNoaWZ0KSkKLQkJcmV0dXJuIHNoaWZ0OworCXJldCA9IF9sb29rdXBfaGFyZHJlc2V0KG9oLCBuYW1lLCAmb2hyaSk7CisJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKQogCQlyZXR1cm4gb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQob2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsCi0JCQkJCQkgIHNoaWZ0KTsKKwkJCQkJCSAgb2hyaS5yc3Rfc2hpZnQpOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQogCQlyZXR1cm4gb21hcDRfcHJtX2Fzc2VydF9oYXJkcmVzZXQob2gtPnByY20ub21hcDQucnN0Y3RybF9yZWcsCi0JCQkJCQkgIHNoaWZ0KTsKKwkJCQkJCSAgb2hyaS5yc3Rfc2hpZnQpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMDQwLDI5ICsxMDQ4LDM0IEBACiAgKi8KIHN0YXRpYyBpbnQgX2RlYXNzZXJ0X2hhcmRyZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JdTggc2hpZnQ7Ci0JaW50IHI7CisJc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gb2hyaTsKKwlpbnQgcmV0OwogCiAJaWYgKCFvaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzaGlmdCA9IF9sb29rdXBfaGFyZHJlc2V0KG9oLCBuYW1lKTsKLQlpZiAoSVNfRVJSX1ZBTFVFKHNoaWZ0KSkKLQkJcmV0dXJuIHNoaWZ0OworCXJldCA9IF9sb29rdXBfaGFyZHJlc2V0KG9oLCBuYW1lLCAmb2hyaSk7CisJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQlyZXR1cm4gcmV0OwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKQotCQlyID0gb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywKLQkJCQkJCSBzaGlmdCk7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCXIgPSBvbWFwNF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KG9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfcmVnLAotCQkJCQkJIHNoaWZ0KTsKLQllbHNlCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXJldCA9IG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQob2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsCisJCQkJCQkgICBvaHJpLnJzdF9zaGlmdCwKKwkJCQkJCSAgIG9ocmkuc3Rfc2hpZnQpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJaWYgKG9ocmkuc3Rfc2hpZnQpCisJCQlwcl9lcnIoIm9tYXBfaHdtb2Q6ICVzOiAlczogaHdtb2QgZGF0YSBlcnJvcjogT01BUDQgZG9lcyBub3Qgc3VwcG9ydCBzdF9zaGlmdFxuIiwKKwkJCSAgICAgICBvaC0+bmFtZSwgbmFtZSk7CisJCXJldCA9IG9tYXA0X3BybV9kZWFzc2VydF9oYXJkcmVzZXQob2gtPnByY20ub21hcDQucnN0Y3RybF9yZWcsCisJCQkJCQkgICBvaHJpLnJzdF9zaGlmdCk7CisJfSBlbHNlIHsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JaWYgKHIgPT0gLUVCVVNZKQorCWlmIChyZXQgPT0gLUVCVVNZKQogCQlwcl93YXJuaW5nKCJvbWFwX2h3bW9kOiAlczogZmFpbGVkIHRvIGhhcmRyZXNldFxuIiwgb2gtPm5hbWUpOwogCi0JcmV0dXJuIHI7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xMDc1LDIxICsxMDg4LDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgX3JlYWRfaGFyZHJlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQl1OCBzaGlmdDsKKwlzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyBvaHJpOworCXU4IHJldDsKIAogCWlmICghb2gpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2hpZnQgPSBfbG9va3VwX2hhcmRyZXNldChvaCwgbmFtZSk7Ci0JaWYgKElTX0VSUl9WQUxVRShzaGlmdCkpCi0JCXJldHVybiBzaGlmdDsKKwlyZXQgPSBfbG9va3VwX2hhcmRyZXNldChvaCwgbmFtZSwgJm9ocmkpOworCWlmIChJU19FUlJfVkFMVUUocmV0KSkKKwkJcmV0dXJuIHJldDsKIAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewogCQlyZXR1cm4gb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywKLQkJCQkJCSAgICAgICBzaGlmdCk7CisJCQkJCQkgICAgICAgb2hyaS5zdF9zaGlmdCk7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlyZXR1cm4gb21hcDRfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX3JlZywKLQkJCQkJCSAgICAgICBzaGlmdCk7CisJCQkJCQkgICAgICAgb2hyaS5yc3Rfc2hpZnQpOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEyMzAsNyArMTI0NCw5IEBACiAJCV9kZWFzc2VydF9oYXJkcmVzZXQob2gsIG9oLT5yc3RfbGluZXNbMF0ubmFtZSk7CiAKIAkvKiBNdXggcGlucyBmb3IgZGV2aWNlIHJ1bnRpbWUgaWYgcG9wdWxhdGVkICovCi0JaWYgKG9oLT5tdXgpCisJaWYgKG9oLT5tdXggJiYgKCFvaC0+bXV4LT5lbmFibGVkIHx8CisJCQkoKG9oLT5fc3RhdGUgPT0gX0hXTU9EX1NUQVRFX0lETEUpICYmCisJCQkgb2gtPm11eC0+cGFkc19keW5hbWljKSkpCiAJCW9tYXBfaHdtb2RfbXV4KG9oLT5tdXgsIF9IV01PRF9TVEFURV9FTkFCTEVEKTsKIAogCV9hZGRfaW5pdGlhdG9yX2RlcChvaCwgbXB1X29oKTsKQEAgLTEyNzksNyArMTI5NSw3IEBACiAJX2Rpc2FibGVfY2xvY2tzKG9oKTsKIAogCS8qIE11eCBwaW5zIGZvciBkZXZpY2UgaWRsZSBpZiBwb3B1bGF0ZWQgKi8KLQlpZiAob2gtPm11eCkKKwlpZiAob2gtPm11eCAmJiBvaC0+bXV4LT5wYWRzX2R5bmFtaWMpCiAJCW9tYXBfaHdtb2RfbXV4KG9oLT5tdXgsIF9IV01PRF9TVEFURV9JRExFKTsKIAogCW9oLT5fc3RhdGUgPSBfSFdNT0RfU1RBVEVfSURMRTsKQEAgLTEyODgsNiArMTMwNCw0MiBAQAogfQogCiAvKioKKyAqIG9tYXBfaHdtb2Rfc2V0X29jcF9hdXRvaWRsZSAtIHNldCB0aGUgaHdtb2QncyBPQ1AgYXV0b2lkbGUgYml0CisgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKKyAqIEBhdXRvaWRsZTogZGVzaXJlZCBBVVRPSURMRSBiaXRmaWVsZCB2YWx1ZSAoMCBvciAxKQorICoKKyAqIFNldHMgdGhlIElQIGJsb2NrJ3MgT0NQIGF1dG9pZGxlIGJpdCBpbiBoYXJkd2FyZSwgYW5kIHVwZGF0ZXMgb3VyCisgKiBsb2NhbCBjb3B5LiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGRyaXZlcnMgdGhhdCByZXF1aXJlCisgKiBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIHRoZSBBVVRPSURMRSBiaXRzLgorICogUmV0dXJucyAtRUlOVkFMIGlmIEBvaCBpcyBudWxsIG9yIGlzIG5vdCBpbiB0aGUgRU5BQkxFRCBzdGF0ZSwgb3IgcGFzc2VzCisgKiBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gX3NldF9tb2R1bGVfYXV0b2lkbGUoKS4KKyAqCisgKiBBbnkgdXNlcnMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgc2NydXRpbml6ZWQgY2FyZWZ1bGx5LgorICovCitpbnQgb21hcF9od21vZF9zZXRfb2NwX2F1dG9pZGxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTggYXV0b2lkbGUpCit7CisJdTMyIHY7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghb2ggfHwgb2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfRU5BQkxFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2gtPl9sb2NrLCBmbGFncyk7CisKKwl2ID0gb2gtPl9zeXNjX2NhY2hlOworCisJcmV0dmFsID0gX3NldF9tb2R1bGVfYXV0b2lkbGUob2gsIGF1dG9pZGxlLCAmdik7CisKKwlpZiAoIXJldHZhbCkKKwkJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaC0+X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgogICogX3NodXRkb3duIC0gc2h1dGRvd24gYW4gb21hcF9od21vZAogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgpAQCAtMTM1NCwxNCArMTQwNiwxNiBAQAogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgogICogV3JpdGVzIHRoZSBDTE9DS0FDVElWSVRZIGJpdHMgQGNsb2NrYWN0IHRvIHRoZSBod21vZCBAb2gKLSAqIE9DUF9TWVNDT05GSUcgcmVnaXN0ZXIuICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGh3bW9kIGlzIGluIHRoZQotICogd3Jvbmcgc3RhdGUgb3IgcmV0dXJucyAwLgorICogT0NQX1NZU0NPTkZJRyByZWdpc3Rlci4gIFJldHVybnMgMC4KICAqLwogc3RhdGljIGludCBfc2V0dXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICpkYXRhKQogewogCWludCBpLCByOwogCXU4IHBvc3RzZXR1cF9zdGF0ZTsKIAorCWlmIChvaC0+X3N0YXRlICE9IF9IV01PRF9TVEFURV9DTEtTX0lOSVRFRCkKKwkJcmV0dXJuIDA7CisKIAkvKiBTZXQgaWNsayBhdXRvaWRsZSBtb2RlICovCiAJaWYgKG9oLT5zbGF2ZXNfY250ID4gMCkgewogCQlmb3IgKGkgPSAwOyBpIDwgb2gtPnNsYXZlc19jbnQ7IGkrKykgewpAQCAtMTQ1NSw3ICsxNTA5LDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgX3JlZ2lzdGVyKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKLQlpbnQgcmV0LCBtc19pZDsKKwlpbnQgbXNfaWQ7CiAKIAlpZiAoIW9oIHx8ICFvaC0+bmFtZSB8fCAhb2gtPmNsYXNzIHx8ICFvaC0+Y2xhc3MtPm5hbWUgfHwKIAkgICAgKG9oLT5fc3RhdGUgIT0gX0hXTU9EX1NUQVRFX1VOS05PV04pKQpAQCAtMTQ2NywxMiArMTUyMSwxMCBAQAogCQlyZXR1cm4gLUVFWElTVDsKIAogCW1zX2lkID0gX2ZpbmRfbXB1X3BvcnRfaW5kZXgob2gpOwotCWlmICghSVNfRVJSX1ZBTFVFKG1zX2lkKSkgeworCWlmICghSVNfRVJSX1ZBTFVFKG1zX2lkKSkKIAkJb2gtPl9tcHVfcG9ydF9pbmRleCA9IG1zX2lkOwotCQlvaC0+X21wdV9ydF92YSA9IF9maW5kX21wdV9ydF9iYXNlKG9oLCBvaC0+X21wdV9wb3J0X2luZGV4KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJb2gtPl9pbnRfZmxhZ3MgfD0gX0hXTU9EX05PX01QVV9QT1JUOwotCX0KIAogCWxpc3RfYWRkX3RhaWwoJm9oLT5ub2RlLCAmb21hcF9od21vZF9saXN0KTsKIApAQCAtMTQ4MCw5ICsxNTMyLDE0IEBACiAKIAlvaC0+X3N0YXRlID0gX0hXTU9EX1NUQVRFX1JFR0lTVEVSRUQ7CiAKLQlyZXQgPSAwOworCS8qCisJICogWFhYIFJhdGhlciB0aGFuIGRvaW5nIGEgc3RyY21wKCksIHRoaXMgc2hvdWxkIHRlc3QgYSBmbGFnCisJICogc2V0IGluIHRoZSBod21vZCBkYXRhLCBpbnNlcnRlZCBieSB0aGUgYXV0b2dlbmVyYXRvciBjb2RlLgorCSAqLworCWlmICghc3RyY21wKG9oLT5uYW1lLCBNUFVfSU5JVElBVE9SX05BTUUpKQorCQltcHVfb2ggPSBvaDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTU4NSw2NSArMTY0MiwxMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIC8qKgotICogb21hcF9od21vZF9pbml0IC0gaW5pdCBvbWFwX2h3bW9kIGNvZGUgYW5kIHJlZ2lzdGVyIGh3bW9kcworICogb21hcF9od21vZF9yZWdpc3RlciAtIHJlZ2lzdGVyIGFuIGFycmF5IG9mIGh3bW9kcwogICogQG9oczogcG9pbnRlciB0byBhbiBhcnJheSBvZiBvbWFwX2h3bW9kcyB0byByZWdpc3RlcgogICoKICAqIEludGVuZGVkIHRvIGJlIGNhbGxlZCBlYXJseSBpbiBib290IGJlZm9yZSB0aGUgY2xvY2sgZnJhbWV3b3JrIGlzCiAgKiBpbml0aWFsaXplZC4gIElmIEBvaHMgaXMgbm90IG51bGwsIHdpbGwgcmVnaXN0ZXIgYWxsIG9tYXBfaHdtb2RzCi0gKiBsaXN0ZWQgaW4gQG9ocyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhpcyBjaGlwLiAgUmV0dXJucyAtRUlOVkFMIGlmCi0gKiBvbWFwX2h3bW9kX2luaXQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBvciAwIG90aGVyd2lzZS4KKyAqIGxpc3RlZCBpbiBAb2hzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGlzIGNoaXAuICBSZXR1cm5zIDAuCiAgKi8KLWludCBfX2luaXQgb21hcF9od21vZF9pbml0KHN0cnVjdCBvbWFwX2h3bW9kICoqb2hzKQoraW50IF9faW5pdCBvbWFwX2h3bW9kX3JlZ2lzdGVyKHN0cnVjdCBvbWFwX2h3bW9kICoqb2hzKQogewotCXN0cnVjdCBvbWFwX2h3bW9kICpvaDsKLQlpbnQgcjsKLQotCWlmIChpbml0ZWQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaW5pdGVkID0gMTsKKwlpbnQgciwgaTsKIAogCWlmICghb2hzKQogCQlyZXR1cm4gMDsKIAotCW9oID0gKm9oczsKLQl3aGlsZSAob2gpIHsKLQkJaWYgKG9tYXBfY2hpcF9pcyhvaC0+b21hcF9jaGlwKSkgewotCQkJciA9IF9yZWdpc3RlcihvaCk7Ci0JCQlXQVJOKHIsICJvbWFwX2h3bW9kOiAlczogX3JlZ2lzdGVyIHJldHVybmVkICIKLQkJCSAgICAgIiVkXG4iLCBvaC0+bmFtZSwgcik7Ci0JCX0KLQkJb2ggPSAqKytvaHM7Ci0JfQorCWkgPSAwOworCWRvIHsKKwkJaWYgKCFvbWFwX2NoaXBfaXMob2hzW2ldLT5vbWFwX2NoaXApKQorCQkJY29udGludWU7CisKKwkJciA9IF9yZWdpc3RlcihvaHNbaV0pOworCQlXQVJOKHIsICJvbWFwX2h3bW9kOiAlczogX3JlZ2lzdGVyIHJldHVybmVkICVkXG4iLCBvaHNbaV0tPm5hbWUsCisJCSAgICAgcik7CisJfSB3aGlsZSAob2hzWysraV0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBfcG9wdWxhdGVfbXB1X3J0X2Jhc2UgLSBwb3B1bGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIGZvciBhIGh3bW9kCisgKgorICogTXVzdCBiZSBjYWxsZWQgb25seSBmcm9tIG9tYXBfaHdtb2Rfc2V0dXBfKigpIHNvIGlvcmVtYXAgd29ya3MgcHJvcGVybHkuCisgKiBBc3N1bWVzIHRoZSBjYWxsZXIgdGFrZXMgY2FyZSBvZiBsb2NraW5nIGlmIG5lZWRlZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgX3BvcHVsYXRlX21wdV9ydF9iYXNlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqZGF0YSkKK3sKKwlpZiAob2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfUkVHSVNURVJFRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2gtPl9pbnRfZmxhZ3MgJiBfSFdNT0RfTk9fTVBVX1BPUlQpCisJCXJldHVybiAwOworCisJb2gtPl9tcHVfcnRfdmEgPSBfZmluZF9tcHVfcnRfYmFzZShvaCwgb2gtPl9tcHVfcG9ydF9pbmRleCk7CisJaWYgKCFvaC0+X21wdV9ydF92YSkKKwkJcHJfd2FybmluZygib21hcF9od21vZDogJXMgZm91bmQgbm8gX21wdV9ydF92YSBmb3IgJXNcbiIsCisJCQkJX19mdW5jX18sIG9oLT5uYW1lKTsKIAogCXJldHVybiAwOwogfQogCiAvKioKLSAqIG9tYXBfaHdtb2RfbGF0ZV9pbml0IC0gZG8gc29tZSBwb3N0LWNsb2NrIGZyYW1ld29yayBpbml0aWFsaXphdGlvbgorICogb21hcF9od21vZF9zZXR1cF9vbmUgLSBzZXQgdXAgYSBzaW5nbGUgaHdtb2QKKyAqIEBvaF9uYW1lOiBjb25zdCBjaGFyICogbmFtZSBvZiB0aGUgYWxyZWFkeS1yZWdpc3RlcmVkIGh3bW9kIHRvIHNldCB1cAorICoKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIG9tYXAyX2Nsa19pbml0KCkuICBSZXNvbHZlcyB0aGUgc3RydWN0IGNsaworICogbmFtZXMgdG8gc3RydWN0IGNsayBwb2ludGVycyBmb3IgZWFjaCByZWdpc3RlcmVkIG9tYXBfaHdtb2QuICBBbHNvCisgKiBjYWxscyBfc2V0dXAoKSBvbiBlYWNoIGh3bW9kLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3Igb3IgMCB1cG9uCisgKiBzdWNjZXNzLgorICovCitpbnQgX19pbml0IG9tYXBfaHdtb2Rfc2V0dXBfb25lKGNvbnN0IGNoYXIgKm9oX25hbWUpCit7CisJc3RydWN0IG9tYXBfaHdtb2QgKm9oOworCWludCByOworCisJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiAlc1xuIiwgb2hfbmFtZSwgX19mdW5jX18pOworCisJaWYgKCFtcHVfb2gpIHsKKwkJcHJfZXJyKCJvbWFwX2h3bW9kOiAlczogY2Fubm90IHNldHVwX29uZTogTVBVIGluaXRpYXRvciBod21vZCAlcyBub3QgeWV0IHJlZ2lzdGVyZWRcbiIsCisJCSAgICAgICBvaF9uYW1lLCBNUFVfSU5JVElBVE9SX05BTUUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvaCA9IF9sb29rdXAob2hfbmFtZSk7CisJaWYgKCFvaCkgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogaHdtb2Qgbm90IHlldCByZWdpc3RlcmVkXG4iLCBvaF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG1wdV9vaC0+X3N0YXRlID09IF9IV01PRF9TVEFURV9SRUdJU1RFUkVEICYmIG9oICE9IG1wdV9vaCkKKwkJb21hcF9od21vZF9zZXR1cF9vbmUoTVBVX0lOSVRJQVRPUl9OQU1FKTsKKworCXIgPSBfcG9wdWxhdGVfbXB1X3J0X2Jhc2Uob2gsIE5VTEwpOworCWlmIChJU19FUlJfVkFMVUUocikpIHsKKwkJV0FSTigxLCAib21hcF9od21vZDogJXM6IGNvdWxkbid0IHNldCBtcHVfcnRfYmFzZVxuIiwgb2hfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXIgPSBfaW5pdF9jbG9ja3Mob2gsIE5VTEwpOworCWlmIChJU19FUlJfVkFMVUUocikpIHsKKwkJV0FSTigxLCAib21hcF9od21vZDogJXM6IGNvdWxkbid0IGluaXQgY2xvY2tzXG4iLCBvaF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJX3NldHVwKG9oLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXBfaHdtb2Rfc2V0dXAgLSBkbyBzb21lIHBvc3QtY2xvY2sgZnJhbWV3b3JrIGluaXRpYWxpemF0aW9uCiAgKgogICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgb21hcDJfY2xrX2luaXQoKS4gIFJlc29sdmVzIHRoZSBzdHJ1Y3QgY2xrIG5hbWVzCiAgKiB0byBzdHJ1Y3QgY2xrIHBvaW50ZXJzIGZvciBlYWNoIHJlZ2lzdGVyZWQgb21hcF9od21vZC4gIEFsc28gY2FsbHMKLSAqIF9zZXR1cCgpIG9uIGVhY2ggaHdtb2QuICBSZXR1cm5zIDAuCisgKiBfc2V0dXAoKSBvbiBlYWNoIGh3bW9kLiAgUmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KICAqLwotaW50IG9tYXBfaHdtb2RfbGF0ZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2h3bW9kX3NldHVwX2FsbCh2b2lkKQogewogCWludCByOwogCi0JLyogWFhYIGNoZWNrIHJldHVybiB2YWx1ZSAqLwotCXIgPSBvbWFwX2h3bW9kX2Zvcl9lYWNoKF9pbml0X2Nsb2NrcywgTlVMTCk7Ci0JV0FSTihyLCAib21hcF9od21vZDogb21hcF9od21vZF9sYXRlX2luaXQoKTogX2luaXRfY2xvY2tzIGZhaWxlZFxuIik7CisJaWYgKCFtcHVfb2gpIHsKKwkJcHJfZXJyKCJvbWFwX2h3bW9kOiAlczogTVBVIGluaXRpYXRvciBod21vZCAlcyBub3QgeWV0IHJlZ2lzdGVyZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgTVBVX0lOSVRJQVRPUl9OQU1FKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JbXB1X29oID0gb21hcF9od21vZF9sb29rdXAoTVBVX0lOSVRJQVRPUl9OQU1FKTsKLQlXQVJOKCFtcHVfb2gsICJvbWFwX2h3bW9kOiBjb3VsZCBub3QgZmluZCBNUFUgaW5pdGlhdG9yIGh3bW9kICVzXG4iLAotCSAgICAgTVBVX0lOSVRJQVRPUl9OQU1FKTsKKwlyID0gb21hcF9od21vZF9mb3JfZWFjaChfcG9wdWxhdGVfbXB1X3J0X2Jhc2UsIE5VTEwpOworCisJciA9IG9tYXBfaHdtb2RfZm9yX2VhY2goX2luaXRfY2xvY2tzLCBOVUxMKTsKKwlXQVJOKElTX0VSUl9WQUxVRShyKSwKKwkgICAgICJvbWFwX2h3bW9kOiAlczogX2luaXRfY2xvY2tzIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCiAJb21hcF9od21vZF9mb3JfZWFjaChfc2V0dXAsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9Citjb3JlX2luaXRjYWxsKG9tYXBfaHdtb2Rfc2V0dXBfYWxsKTsKIAogLyoqCiAgKiBvbWFwX2h3bW9kX2VuYWJsZSAtIGVuYWJsZSBhbiBvbWFwX2h3bW9kCkBAIC0xODYyLDYgKzE5ODYsNyBAQAogCQlvcyA9IG9oLT5zbGF2ZXNbaV07CiAKIAkJZm9yIChqID0gMDsgaiA8IG9zLT5hZGRyX2NudDsgaisrKSB7CisJCQkocmVzICsgciktPm5hbWUgPSAob3MtPmFkZHIgKyBqKS0+bmFtZTsKIAkJCShyZXMgKyByKS0+c3RhcnQgPSAob3MtPmFkZHIgKyBqKS0+cGFfc3RhcnQ7CiAJCQkocmVzICsgciktPmVuZCA9IChvcy0+YWRkciArIGopLT5wYV9lbmQ7CiAJCQkocmVzICsgciktPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CkBAIC0yMTYyLDExICsyMjg3LDExIEBACiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKICAqIEBzdGF0ZTogc3RhdGUgdGhhdCBfc2V0dXAoKSBzaG91bGQgbGVhdmUgdGhlIGh3bW9kIGluCiAgKgotICogU2V0cyB0aGUgaHdtb2Qgc3RhdGUgdGhhdCBAb2ggd2lsbCBlbnRlciBhdCB0aGUgZW5kIG9mIF9zZXR1cCgpIChjYWxsZWQgYnkKLSAqIG9tYXBfaHdtb2RfbGF0ZV9pbml0KCkpLiAgT25seSB2YWxpZCB0byBjYWxsIGJldHdlZW4gY2FsbHMgdG8KLSAqIG9tYXBfaHdtb2RfaW5pdCgpIGFuZCBvbWFwX2h3bW9kX2xhdGVfaW5pdCgpLiAgUmV0dXJucyAwIHVwb24gc3VjY2VzcyBvcgotICogLUVJTlZBTCBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgYXJndW1lbnRzIG9yIGlmIHRoZSBod21vZCBpcwotICogaW4gdGhlIHdyb25nIHN0YXRlLgorICogU2V0cyB0aGUgaHdtb2Qgc3RhdGUgdGhhdCBAb2ggd2lsbCBlbnRlciBhdCB0aGUgZW5kIG9mIF9zZXR1cCgpCisgKiAoY2FsbGVkIGJ5IG9tYXBfaHdtb2Rfc2V0dXBfKigpKS4gIE9ubHkgdmFsaWQgdG8gY2FsbCBiZXR3ZWVuCisgKiBjYWxsaW5nIG9tYXBfaHdtb2RfcmVnaXN0ZXIoKSBhbmQgb21hcF9od21vZF9zZXR1cF8qKCkuICBSZXR1cm5zCisgKiAwIHVwb24gc3VjY2VzcyBvciAtRUlOVkFMIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBhcmd1bWVudHMKKyAqIG9yIGlmIHRoZSBod21vZCBpcyBpbiB0aGUgd3Jvbmcgc3RhdGUuCiAgKi8KIGludCBvbWFwX2h3bW9kX3NldF9wb3N0c2V0dXBfc3RhdGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBzdGF0ZSkKIHsKQEAgLTIyMTgsMyArMjM0MywyOSBAQAogCiAJcmV0dXJuIHJldDsKIH0KKworLyoqCisgKiBvbWFwX2h3bW9kX25vX3NldHVwX3Jlc2V0IC0gcHJldmVudCBhIGh3bW9kIGZyb20gYmVpbmcgcmVzZXQgdXBvbiBzZXR1cAorICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCisgKgorICogUHJldmVudCB0aGUgaHdtb2QgQG9oIGZyb20gYmVpbmcgcmVzZXQgZHVyaW5nIHRoZSBzZXR1cCBwcm9jZXNzLgorICogSW50ZW5kZWQgZm9yIHVzZSBieSBib2FyZC0qLmMgZmlsZXMgb24gYm9hcmRzIHdpdGggZGV2aWNlcyB0aGF0CisgKiBjYW5ub3QgdG9sZXJhdGUgYmVpbmcgcmVzZXQuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGh3bW9kIGhhcworICogYmVlbiBzZXQgdXAuICBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgdXBvbgorICogZmFpbHVyZS4KKyAqLworaW50IG9tYXBfaHdtb2Rfbm9fc2V0dXBfcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQoreworCWlmICghb2gpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9oLT5fc3RhdGUgIT0gX0hXTU9EX1NUQVRFX1JFR0lTVEVSRUQpIHsKKwkJcHJfZXJyKCJvbWFwX2h3bW9kOiAlczogY2Fubm90IHByZXZlbnQgc2V0dXAgcmVzZXQ7IGluIHdyb25nIHN0YXRlXG4iLAorCQkJb2gtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvaC0+ZmxhZ3MgfD0gSFdNT0RfSU5JVF9OT19SRVNFVDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCmluZGV4IGI4NWM2MzAuLjYyODIzNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKQEAgLTE4LDYgKzE4LDEwIEBACiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KKyNpbmNsdWRlIDxwbGF0L2RtdGltZXIuaD4KKyNpbmNsdWRlIDxwbGF0L2wzXzJ4eHguaD4KKyNpbmNsdWRlIDxwbGF0L2w0XzJ4eHguaD4KIAogI2luY2x1ZGUgIm9tYXBfaHdtb2RfY29tbW9uX2RhdGEuaCIKIApAQCAtMzgsMTIgKzQyLDE4IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfaXZhX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2wzX21haW5faHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDRfY29yZV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9kc3NfY29yZV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9kc3NfZGlzcGNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZHNzX3JmYmlfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZHNzX3ZlbmNfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfd2RfdGltZXIyX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8xX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8yX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8zX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW80X2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2RtYV9zeXN0ZW1faHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbWNzcGkxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21jc3BpMl9od21vZDsKIAogLyogTDMgLT4gTDRfQ09SRSBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDNfbWFpbl9fbDRfY29yZSA9IHsKQEAgLTY0LDYgKzc0LDE5IEBACiAJJm9tYXAyNDIwX21wdV9fbDNfbWFpbiwKIH07CiAKKy8qIERTUyAtPiBsMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9kc3NfX2wzID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2Rzc19jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfbDNfbWFpbl9od21vZCwKKwkuZncgPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5sM19wZXJtX2JpdCAgPSBPTUFQMl9MM19DT1JFX0ZXX0NPTk5JRF9EU1MsCisJCQkuZmxhZ3MJPSBPTUFQX0ZJUkVXQUxMX0wzLAorCQl9CisJfSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKwogLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDNfbWFpbl9tYXN0ZXJzW10gPSB7CiAJJm9tYXAyNDIwX2wzX21haW5fX2w0X2NvcmUsCkBAIC04Nyw2ICsxMTAsNDQgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF91YXJ0M19od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9pMmMxX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2kyYzJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbWNic3AxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21jYnNwMl9od21vZDsKKworLyogbDQgY29yZSAtPiBtY3NwaTEgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF9tY3NwaTFfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA5ODAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDk4MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX21jc3BpMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfbWNzcGkxX2h3bW9kLAorCS5jbGsJCT0gIm1jc3BpMV9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDIwX21jc3BpMV9hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbWNzcGkxX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsNCBjb3JlIC0+IG1jc3BpMiBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX21jc3BpMl9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDlhMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOWEwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fbWNzcGkyID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9tY3NwaTJfaHdtb2QsCisJLmNsawkJPSAibWNzcGkyX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfbWNzcGkyX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9tY3NwaTJfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CiAKIC8qIEw0X0NPUkUgLT4gTDRfV0tVUCBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fbDRfd2t1cCA9IHsKQEAgLTI3OSw2ICszNDAsNjI1IEBACiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApCiB9OwogCisvKiBUaW1lciBDb21tb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MjBfdGltZXJfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfAorCQkJICAgU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKKwkJCSAgIFNZU0NfSEFTX0FVVE9JRExFKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmllbGRzICAgID0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwMjQyMF90aW1lcl9od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJ0aW1lciIsCisJLnN5c2MgPSAmb21hcDI0MjBfdGltZXJfc3lzYywKKwkucmV2ID0gT01BUF9USU1FUl9JUF9WRVJTSU9OXzEsCit9OworCisvKiB0aW1lcjEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjFfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MjBfdGltZXIxX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gMzcsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF90aW1lcjFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwMjgwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODAyODAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF93a3VwIC0+IHRpbWVyMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF93a3VwX190aW1lcjEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDRfd2t1cF9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX3RpbWVyMV9od21vZCwKKwkuY2xrCQk9ICJncHQxX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfdGltZXIxX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXIxX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIxIHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX3RpbWVyMV9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDRfd2t1cF9fdGltZXIxLAorfTsKKworLyogdGltZXIxIGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdGltZXIxX2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjEiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDIwX3RpbWVyMV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjFfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQxX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQxX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gV0tVUF9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUMV9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfdGltZXIxX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXIxX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQyMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKK307CisKKy8qIHRpbWVyMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX3RpbWVyMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyMF90aW1lcjJfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSAzOCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX3RpbWVyMl9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODAyYTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDJhMDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gdGltZXIyICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX3RpbWVyMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfdGltZXIyX2h3bW9kLAorCS5jbGsJCT0gImdwdDJfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQyMF90aW1lcjJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjJfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjIgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfdGltZXIyX3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX190aW1lcjIsCit9OworCisvKiB0aW1lcjIgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjJfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMiIsCisJLm1wdV9pcnFzCT0gb21hcDI0MjBfdGltZXIyX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyMl9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDJfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQVDJfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQyX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQyMF90aW1lcjJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjJfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDIwX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQorfTsKKworLyogdGltZXIzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdGltZXIzX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDIwX3RpbWVyM19tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDM5LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfdGltZXIzX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDc4MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNzgwMDAgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiB0aW1lcjMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fdGltZXIzID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF90aW1lcjNfaHdtb2QsCisJLmNsawkJPSAiZ3B0M19pY2siLAorCS5hZGRyCQk9IG9tYXAyNDIwX3RpbWVyM19hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyM19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyMyBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF90aW1lcjNfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX3RpbWVyMywKK307CisKKy8qIHRpbWVyMyBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX3RpbWVyM19od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIzIiwKKwkubXB1X2lycXMJPSBvbWFwMjQyMF90aW1lcjNfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXIzX21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3B0M19mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fR1BUM19TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQVDNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX3RpbWVyM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyM19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MjBfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApCit9OworCisvKiB0aW1lcjQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjRfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MjBfdGltZXI0X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF90aW1lcjRfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwN2EwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA3YTAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF9jb3JlX190aW1lcjQgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX3RpbWVyNF9od21vZCwKKwkuY2xrCQk9ICJncHQ0X2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfdGltZXI0X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXI0X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI0IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX3RpbWVyNF9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDRfY29yZV9fdGltZXI0LAorfTsKKworLyogdGltZXI0IGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdGltZXI0X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjQiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDIwX3RpbWVyNF9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjRfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQ0X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUNF9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfdGltZXI0X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXI0X3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQyMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKK307CisKKy8qIHRpbWVyNSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX3RpbWVyNV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyMF90aW1lcjVfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0MSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX3RpbWVyNV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA3YzAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDdjMDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gdGltZXI1ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX3RpbWVyNSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfdGltZXI1X2h3bW9kLAorCS5jbGsJCT0gImdwdDVfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQyMF90aW1lcjVfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjVfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjUgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfdGltZXI1X3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX190aW1lcjUsCit9OworCisvKiB0aW1lcjUgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjVfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyNSIsCisJLm1wdV9pcnFzCT0gb21hcDI0MjBfdGltZXI1X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyNV9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDVfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQVDVfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ1X1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQyMF90aW1lcjVfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjVfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDIwX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQorfTsKKworCisvKiB0aW1lcjYgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjZfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MjBfdGltZXI2X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDIsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF90aW1lcjZfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwN2UwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA3ZTAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyNiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF9jb3JlX190aW1lcjYgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX3RpbWVyNl9od21vZCwKKwkuY2xrCQk9ICJncHQ2X2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfdGltZXI2X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXI2X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI2IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX3RpbWVyNl9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDRfY29yZV9fdGltZXI2LAorfTsKKworLyogdGltZXI2IGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdGltZXI2X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjYiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDIwX3RpbWVyNl9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjZfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQ2X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUNl9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfdGltZXI2X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXI2X3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQyMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKK307CisKKy8qIHRpbWVyNyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX3RpbWVyN19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyMF90aW1lcjdfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0MywgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX3RpbWVyN19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA4MDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDgwMDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gdGltZXI3ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX3RpbWVyNyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfdGltZXI3X2h3bW9kLAorCS5jbGsJCT0gImdwdDdfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQyMF90aW1lcjdfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjdfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjcgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfdGltZXI3X3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX190aW1lcjcsCit9OworCisvKiB0aW1lcjcgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjdfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyNyIsCisJLm1wdV9pcnFzCT0gb21hcDI0MjBfdGltZXI3X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyN19tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDdfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ3X1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQyMF90aW1lcjdfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjdfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDIwX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQorfTsKKworLyogdGltZXI4ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdGltZXI4X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDIwX3RpbWVyOF9tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDQ0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfdGltZXI4X2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDgyMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwODIwMDAgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiB0aW1lcjggKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fdGltZXI4ID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF90aW1lcjhfaHdtb2QsCisJLmNsawkJPSAiZ3B0OF9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDIwX3RpbWVyOF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyOF9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyOCBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF90aW1lcjhfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX3RpbWVyOCwKK307CisKKy8qIHRpbWVyOCBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX3RpbWVyOF9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXI4IiwKKwkubXB1X2lycXMJPSBvbWFwMjQyMF90aW1lcjhfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXI4X21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3B0OF9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQVDhfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX3RpbWVyOF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyOF9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MjBfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApCit9OworCisvKiB0aW1lcjkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjlfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MjBfdGltZXI5X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDUsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF90aW1lcjlfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwODQwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA4NDAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyOSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF9jb3JlX190aW1lcjkgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX3RpbWVyOV9od21vZCwKKwkuY2xrCQk9ICJncHQ5X2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfdGltZXI5X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXI5X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI5IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX3RpbWVyOV9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDRfY29yZV9fdGltZXI5LAorfTsKKworLyogdGltZXI5IGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdGltZXI5X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjkiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDIwX3RpbWVyOV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjlfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQ5X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUOV9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfdGltZXI5X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXI5X3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQyMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKK307CisKKy8qIHRpbWVyMTAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjEwX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDIwX3RpbWVyMTBfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0NiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX3RpbWVyMTBfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwODYwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA4NjAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyMTAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fdGltZXIxMCA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfdGltZXIxMF9od21vZCwKKwkuY2xrCQk9ICJncHQxMF9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDIwX3RpbWVyMTBfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjEwX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIxMCBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF90aW1lcjEwX3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX190aW1lcjEwLAorfTsKKworLyogdGltZXIxMCBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX3RpbWVyMTBfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMTAiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDIwX3RpbWVyMTBfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXIxMF9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDEwX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQVDEwX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQyMF90aW1lcjEwX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXIxMF9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MjBfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApCit9OworCisvKiB0aW1lcjExICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdGltZXIxMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyMF90aW1lcjExX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDcsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF90aW1lcjExX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDg4MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwODgwMDAgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiB0aW1lcjExICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX3RpbWVyMTEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX3RpbWVyMTFfaHdtb2QsCisJLmNsawkJPSAiZ3B0MTFfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQyMF90aW1lcjExX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfdGltZXIxMV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyMTEgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfdGltZXIxMV9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDRfY29yZV9fdGltZXIxMSwKK307CisKKy8qIHRpbWVyMTEgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF90aW1lcjExX2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjExIiwKKwkubXB1X2lycXMJPSBvbWFwMjQyMF90aW1lcjExX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyMTFfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQxMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQxMV9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfdGltZXIxMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyMTFfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDIwX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQorfTsKKworLyogdGltZXIxMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX3RpbWVyMTJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MjBfdGltZXIxMl9tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDQ4LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfdGltZXIxMl9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA4YTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDhhMDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gdGltZXIxMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF9jb3JlX190aW1lcjEyID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF90aW1lcjEyX2h3bW9kLAorCS5jbGsJCT0gImdwdDEyX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfdGltZXIxMl9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX3RpbWVyMTJfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjEyIHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX3RpbWVyMTJfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX3RpbWVyMTIsCit9OworCisvKiB0aW1lcjEyIGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdGltZXIxMl9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIxMiIsCisJLm1wdV9pcnFzCT0gb21hcDI0MjBfdGltZXIxMl9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjEyX21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3B0MTJfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQVDEyX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUMTJfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX3RpbWVyMTJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF90aW1lcjEyX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQyMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKK307CisKIC8qIGw0X3drdXAgLT4gd2RfdGltZXIyICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF93ZF90aW1lcjJfYWRkcnNbXSA9IHsKIAl7CkBAIC0zMDgsNyArOTg4LDcgQEAKIAkuc3lzY19vZmZzCT0gMHgwMDEwLAogCS5zeXNzX29mZnMJPSAweDAwMTQsCiAJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfRU1VRlJFRSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8Ci0JCQkgICBTWVNDX0hBU19BVVRPSURMRSksCisJCQkgICBTWVNDX0hBU19BVVRPSURMRSB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCiAJLnN5c2NfZmllbGRzICAgID0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKIH07CiAKQEAgLTM0OSw3ICsxMDI5LDcgQEAKIAkuc3lzc19vZmZzCT0gMHg1OCwKIAkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfAogCQkJICAgU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKLQkJCSAgIFNZU0NfSEFTX0FVVE9JRExFKSwKKwkJCSAgIFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKIAkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCiAJLnN5c2NfZmllbGRzICAgID0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKIH07CkBAIC00NzAsMTIgKzExNTAsMjk4IEBACiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAogfTsKIAorLyoKKyAqICdkc3MnIGNsYXNzCisgKiBkaXNwbGF5IHN1Yi1zeXN0ZW0KKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyNDIwX2Rzc19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDI0MjBfZHNzX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gImRzcyIsCisJLnN5c2MgPSAmb21hcDI0MjBfZHNzX3N5c2MsCit9OworCisvKiBkc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyMF9kc3NfaXJxc1tdID0geworCXsgLmlycSA9IDI1IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDI0MjBfZHNzX3NkbWFfY2hzW10gPSB7CisJeyAubmFtZSA9ICJkaXNwYyIsIC5kbWFfcmVxID0gNSB9LAorfTsKKworLyogZHNzICovCisvKiBkc3MgbWFzdGVyIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9kc3NfbWFzdGVyc1tdID0geworCSZvbWFwMjQyMF9kc3NfX2wzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfZHNzX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDUwMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNTAzRkYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBkc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fZHNzID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9kc3NfY29yZV9od21vZCwKKwkuY2xrCQk9ICJkc3NfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQyMF9kc3NfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9kc3NfYWRkcnMpLAorCS5mdyA9IHsKKwkJLm9tYXAyID0geworCQkJLmw0X2Z3X3JlZ2lvbiAgPSBPTUFQMjQyMF9MNF9DT1JFX0ZXX0RTU19DT1JFX1JFR0lPTiwKKwkJCS5mbGFncwk9IE9NQVBfRklSRVdBTExfTDQsCisJCX0KKwl9LAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBkc3Mgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2Rzc19zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDRfY29yZV9fZHNzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZHNzX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJ0dl9jbGsiLCAuY2xrID0gImRzc181NG1fZmNrIiB9LAorCXsgLnJvbGUgPSAic3lzX2NsayIsIC5jbGsgPSAiZHNzMl9mY2siIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZHNzX2NvcmVfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc19jb3JlIiwKKwkuY2xhc3MJCT0gJm9tYXAyNDIwX2Rzc19od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAiZHNzMV9mY2siLCAvKiBpbnN0ZWFkIG9mIGRzc19mY2sgKi8KKwkubXB1X2lycXMJPSBvbWFwMjQyMF9kc3NfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9kc3NfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAyNDIwX2Rzc19zZG1hX2NocywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZHNzX3NkbWFfY2hzKSwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3Rfc3RkYnlfYml0ID0gT01BUDI0WFhfU1RfRFNTX1NISUZULAorCQl9LAorCX0sCisJLm9wdF9jbGtzCT0gZHNzX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQgPSBBUlJBWV9TSVpFKGRzc19vcHRfY2xrcyksCisJLnNsYXZlcwkJPSBvbWFwMjQyMF9kc3Nfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9kc3Nfc2xhdmVzKSwKKwkubWFzdGVycwk9IG9tYXAyNDIwX2Rzc19tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZHNzX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAorfTsKKworLyoKKyAqICdkaXNwYycgY2xhc3MKKyAqIGRpc3BsYXkgY29udHJvbGxlcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MjBfZGlzcGNfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX01JRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgTVNUQU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8IE1TVEFOREJZX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDIwX2Rpc3BjX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gImRpc3BjIiwKKwkuc3lzYyA9ICZvbWFwMjQyMF9kaXNwY19zeXNjLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfZHNzX2Rpc3BjX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDUwNDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNTA3RkYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBkc3NfZGlzcGMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fZHNzX2Rpc3BjID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9kc3NfZGlzcGNfaHdtb2QsCisJLmNsawkJPSAiZHNzX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfZHNzX2Rpc3BjX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZHNzX2Rpc3BjX2FkZHJzKSwKKwkuZncgPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5sNF9md19yZWdpb24gID0gT01BUDI0MjBfTDRfQ09SRV9GV19EU1NfRElTUENfUkVHSU9OLAorCQkJLmZsYWdzCT0gT01BUF9GSVJFV0FMTF9MNCwKKwkJfQorCX0sCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRzc19kaXNwYyBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfZHNzX2Rpc3BjX3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX19kc3NfZGlzcGMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZHNzX2Rpc3BjX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfZGlzcGMiLAorCS5jbGFzcwkJPSAmb21hcDI0MjBfZGlzcGNfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gImRzczFfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3Rfc3RkYnlfYml0ID0gT01BUDI0WFhfU1RfRFNTX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQyMF9kc3NfZGlzcGNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9kc3NfZGlzcGNfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKK307CisKKy8qCisgKiAncmZiaScgY2xhc3MKKyAqIHJlbW90ZSBmcmFtZSBidWZmZXIgaW50ZXJmYWNlCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwMjQyMF9yZmJpX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19TT0ZUUkVTRVQgfAorCQkJICAgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDIwX3JmYmlfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAicmZiaSIsCisJLnN5c2MgPSAmb21hcDI0MjBfcmZiaV9zeXNjLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfZHNzX3JmYmlfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNTA4MDAsCisJCS5wYV9lbmQJCT0gMHg0ODA1MEJGRiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IGRzc19yZmJpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2Rzc19yZmJpID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9kc3NfcmZiaV9od21vZCwKKwkuY2xrCQk9ICJkc3NfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQyMF9kc3NfcmZiaV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2Rzc19yZmJpX2FkZHJzKSwKKwkuZncgPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5sNF9md19yZWdpb24gID0gT01BUDI0MjBfTDRfQ09SRV9GV19EU1NfQ09SRV9SRUdJT04sCisJCQkuZmxhZ3MJPSBPTUFQX0ZJUkVXQUxMX0w0LAorCQl9CisJfSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZHNzX3JmYmkgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2Rzc19yZmJpX3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX19kc3NfcmZiaSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9kc3NfcmZiaV9od21vZCA9IHsKKwkubmFtZQkJPSAiZHNzX3JmYmkiLAorCS5jbGFzcwkJPSAmb21hcDI0MjBfcmZiaV9od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAiZHNzMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fRFNTMV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQyMF9kc3NfcmZiaV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2Rzc19yZmJpX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCit9OworCisvKgorICogJ3ZlbmMnIGNsYXNzCisgKiB2aWRlbyBlbmNvZGVyCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDIwX3ZlbmNfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAidmVuYyIsCit9OworCisvKiBkc3NfdmVuYyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfZHNzX3ZlbmNfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNTBDMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA1MEZGRiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IGRzc192ZW5jICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2Rzc192ZW5jID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9kc3NfdmVuY19od21vZCwKKwkuY2xrCQk9ICJkc3NfNTRtX2ZjayIsCisJLmFkZHIJCT0gb21hcDI0MjBfZHNzX3ZlbmNfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9kc3NfdmVuY19hZGRycyksCisJLmZ3ID0geworCQkub21hcDIgPSB7CisJCQkubDRfZndfcmVnaW9uICA9IE9NQVAyNDIwX0w0X0NPUkVfRldfRFNTX1ZFTkNfUkVHSU9OLAorCQkJLmZsYWdzCT0gT01BUF9GSVJFV0FMTF9MNCwKKwkJfQorCX0sCisJLmZsYWdzCQk9IE9DUElGX1NXU1VQX0lETEUsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRzc192ZW5jIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9kc3NfdmVuY19zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDRfY29yZV9fZHNzX3ZlbmMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZHNzX3ZlbmNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc192ZW5jIiwKKwkuY2xhc3MJCT0gJm9tYXAyNDIwX3ZlbmNfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gImRzczFfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfZHNzX3ZlbmNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9kc3NfdmVuY19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAorfTsKKwogLyogSTJDIGNvbW1vbiAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBpMmNfc3lzYyA9IHsKIAkucmV2X29mZnMJPSAweDAwLAogCS5zeXNjX29mZnMJPSAweDIwLAogCS5zeXNzX29mZnMJPSAweDEwLAotCS5zeXNjX2ZsYWdzCT0gU1lTQ19IQVNfU09GVFJFU0VULAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCiAJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKIH07CiAKQEAgLTY0Nyw3ICsxNjEzLDggQEAKIAkuc3lzY19vZmZzCT0gMHgwMDEwLAogCS5zeXNzX29mZnMJPSAweDAwMTQsCiAJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKLQkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFKSwKKwkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFIHwKKwkJCSAgIFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCiAJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAogCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCiB9OwpAQCAtNzg5LDcgKzE3NTYsNyBAQAogCS5zeXNzX29mZnMJPSAweDAwMjgsCiAJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTQ19IQVNfTUlETEVNT0RFIHwKIAkJCSAgIFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfCBTWVNDX0hBU19FTVVGUkVFIHwKLQkJCSAgIFNZU0NfSEFTX0FVVE9JRExFKSwKKwkJCSAgIFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKIAkuaWRsZW1vZGVzCT0gKE1TVEFOREJZX0ZPUkNFIHwgTVNUQU5EQllfTk8gfCBNU1RBTkRCWV9TTUFSVCksCiAJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKIH07CkBAIC04NjQsMTYgKzE4MzEsMzQyIEBACiAJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKKy8qCisgKiAnbWFpbGJveCcgY2xhc3MKKyAqIG1haWxib3ggbW9kdWxlIGFsbG93aW5nIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgb24tY2hpcCBwcm9jZXNzb3JzCisgKiB1c2luZyBhIHF1ZXVlZCBtYWlsYm94LWludGVycnVwdCBtZWNoYW5pc20uCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwMjQyMF9tYWlsYm94X3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDEwLAorCS5zeXNzX29mZnMJPSAweDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKKwkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwMjQyMF9tYWlsYm94X2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gIm1haWxib3giLAorCS5zeXNjID0gJm9tYXAyNDIwX21haWxib3hfc3lzYywKK307CisKKy8qIG1haWxib3ggKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9tYWlsYm94X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDIwX21haWxib3hfaXJxc1tdID0geworCXsgLm5hbWUgPSAiZHNwIiwgLmlycSA9IDI2IH0sCisJeyAubmFtZSA9ICJpdmEiLCAuaXJxID0gMzQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX21haWxib3hfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwOTQwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA5NDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBtYWlsYm94ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX21haWxib3ggPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX21haWxib3hfaHdtb2QsCisJLmFkZHIJCT0gb21hcDI0MjBfbWFpbGJveF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX21haWxib3hfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtYWlsYm94IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9tYWlsYm94X3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX19tYWlsYm94LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21haWxib3hfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1haWxib3giLAorCS5jbGFzcwkJPSAmb21hcDI0MjBfbWFpbGJveF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwMjQyMF9tYWlsYm94X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbWFpbGJveF9pcnFzKSwKKwkubWFpbl9jbGsJPSAibWFpbGJveGVzX2ljayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9NQUlMQk9YRVNfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQUlMQk9YRVNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX21haWxib3hfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9tYWlsYm94X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworLyoKKyAqICdtY3NwaScgY2xhc3MKKyAqIG11bHRpY2hhbm5lbCBzZXJpYWwgcG9ydCBpbnRlcmZhY2UgKG1jc3BpKSAvIG1hc3Rlci9zbGF2ZSBzeW5jaHJvbm91cyBzZXJpYWwKKyAqIGJ1cworICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MjBfbWNzcGlfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfCBTWVNDX0hBU19TSURMRU1PREUgfAorCQkJCVNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkJU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMgICAgPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDIwX21jc3BpX2NsYXNzID0geworCS5uYW1lID0gIm1jc3BpIiwKKwkuc3lzYyA9ICZvbWFwMjQyMF9tY3NwaV9zeXNjLAorCS5yZXYgPSBPTUFQMl9NQ1NQSV9SRVYsCit9OworCisvKiBtY3NwaTEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyMF9tY3NwaTFfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA2NSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXAyNDIwX21jc3BpMV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4MCIsIC5kbWFfcmVxID0gMzUgfSwgLyogRE1BX1NQSTFfVFgwICovCisJeyAubmFtZSA9ICJyeDAiLCAuZG1hX3JlcSA9IDM2IH0sIC8qIERNQV9TUEkxX1JYMCAqLworCXsgLm5hbWUgPSAidHgxIiwgLmRtYV9yZXEgPSAzNyB9LCAvKiBETUFfU1BJMV9UWDEgKi8KKwl7IC5uYW1lID0gInJ4MSIsIC5kbWFfcmVxID0gMzggfSwgLyogRE1BX1NQSTFfUlgxICovCisJeyAubmFtZSA9ICJ0eDIiLCAuZG1hX3JlcSA9IDM5IH0sIC8qIERNQV9TUEkxX1RYMiAqLworCXsgLm5hbWUgPSAicngyIiwgLmRtYV9yZXEgPSA0MCB9LCAvKiBETUFfU1BJMV9SWDIgKi8KKwl7IC5uYW1lID0gInR4MyIsIC5kbWFfcmVxID0gNDEgfSwgLyogRE1BX1NQSTFfVFgzICovCisJeyAubmFtZSA9ICJyeDMiLCAuZG1hX3JlcSA9IDQyIH0sIC8qIERNQV9TUEkxX1JYMyAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbWNzcGkxX3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sNF9jb3JlX19tY3NwaTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyIG9tYXBfbWNzcGkxX2Rldl9hdHRyID0geworCS5udW1fY2hpcHNlbGVjdCA9IDQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbWNzcGkxX2h3bW9kID0geworCS5uYW1lCQk9ICJtY3NwaTFfaHdtb2QiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDIwX21jc3BpMV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9tY3NwaTFfbXB1X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMjQyMF9tY3NwaTFfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9tY3NwaTFfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibWNzcGkxX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQ1NQSTFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX21jc3BpMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX21jc3BpMV9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MjBfbWNzcGlfY2xhc3MsCisJLmRldl9hdHRyICAgICAgID0gJm9tYXBfbWNzcGkxX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKKy8qIG1jc3BpMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDIwX21jc3BpMl9tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDY2IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDI0MjBfbWNzcGkyX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgwIiwgLmRtYV9yZXEgPSA0MyB9LCAvKiBETUFfU1BJMl9UWDAgKi8KKwl7IC5uYW1lID0gInJ4MCIsIC5kbWFfcmVxID0gNDQgfSwgLyogRE1BX1NQSTJfUlgwICovCisJeyAubmFtZSA9ICJ0eDEiLCAuZG1hX3JlcSA9IDQ1IH0sIC8qIERNQV9TUEkyX1RYMSAqLworCXsgLm5hbWUgPSAicngxIiwgLmRtYV9yZXEgPSA0NiB9LCAvKiBETUFfU1BJMl9SWDEgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX21jc3BpMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbDRfY29yZV9fbWNzcGkyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9kZXZfYXR0ciBvbWFwX21jc3BpMl9kZXZfYXR0ciA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21jc3BpMl9od21vZCA9IHsKKwkubmFtZQkJPSAibWNzcGkyX2h3bW9kIiwKKwkubXB1X2lycXMJPSBvbWFwMjQyMF9tY3NwaTJfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbWNzcGkyX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDI0MjBfbWNzcGkyX3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbWNzcGkyX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gIm1jc3BpMl9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfTUNTUEkyX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQyMF9tY3NwaTJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9tY3NwaTJfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDIwX21jc3BpX2NsYXNzLAorCS5kZXZfYXR0ciAgICAgICA9ICZvbWFwX21jc3BpMl9kZXZfYXR0ciwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCisvKgorICogJ21jYnNwJyBjbGFzcworICogbXVsdGkgY2hhbm5lbCBidWZmZXJlZCBzZXJpYWwgcG9ydCBjb250cm9sbGVyCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDIwX21jYnNwX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gIm1jYnNwIiwKK307CisKKy8qIG1jYnNwMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDIwX21jYnNwMV9pcnFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsIC5pcnEgPSA1OSB9LAorCXsgLm5hbWUgPSAicngiLCAuaXJxID0gNjAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwMjQyMF9tY2JzcDFfc2RtYV9jaHNbXSA9IHsKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAzMiB9LAorCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDMxIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF9tY2JzcDFfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtcHUiLAorCQkucGFfc3RhcnQJPSAweDQ4MDc0MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNzQwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBtY2JzcDEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fbWNic3AxID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9tY2JzcDFfaHdtb2QsCisJLmNsawkJPSAibWNic3AxX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfbWNic3AxX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbWNic3AxX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3AxIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9tY2JzcDFfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX21jYnNwMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9tY2JzcDFfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jYnNwMSIsCisJLmNsYXNzCQk9ICZvbWFwMjQyMF9tY2JzcF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwMjQyMF9tY2JzcDFfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9tY2JzcDFfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAyNDIwX21jYnNwMV9zZG1hX2NocywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbWNic3AxX3NkbWFfY2hzKSwKKwkubWFpbl9jbGsJPSAibWNic3AxX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQ0JTUDFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX21jYnNwMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX21jYnNwMV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKKy8qIG1jYnNwMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDIwX21jYnNwMl9pcnFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsIC5pcnEgPSA2MiB9LAorCXsgLm5hbWUgPSAicngiLCAuaXJxID0gNjMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwMjQyMF9tY2JzcDJfc2RtYV9jaHNbXSA9IHsKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAzNCB9LAorCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDMzIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF9tY2JzcDJfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtcHUiLAorCQkucGFfc3RhcnQJPSAweDQ4MDc2MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNzYwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBtY2JzcDIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fbWNic3AyID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9tY2JzcDJfaHdtb2QsCisJLmNsawkJPSAibWNic3AyX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfbWNic3AyX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbWNic3AyX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3AyIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9tY2JzcDJfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX21jYnNwMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9tY2JzcDJfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jYnNwMiIsCisJLmNsYXNzCQk9ICZvbWFwMjQyMF9tY2JzcF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwMjQyMF9tY2JzcDJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9tY2JzcDJfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAyNDIwX21jYnNwMl9zZG1hX2NocywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbWNic3AyX3NkbWFfY2hzKSwKKwkubWFpbl9jbGsJPSAibWNic3AyX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQ0JTUDJfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX21jYnNwMl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX21jYnNwMl9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwMjQyMF9od21vZHNbXSA9IHsKIAkmb21hcDI0MjBfbDNfbWFpbl9od21vZCwKIAkmb21hcDI0MjBfbDRfY29yZV9od21vZCwKIAkmb21hcDI0MjBfbDRfd2t1cF9od21vZCwKIAkmb21hcDI0MjBfbXB1X2h3bW9kLAogCSZvbWFwMjQyMF9pdmFfaHdtb2QsCisKKwkmb21hcDI0MjBfdGltZXIxX2h3bW9kLAorCSZvbWFwMjQyMF90aW1lcjJfaHdtb2QsCisJJm9tYXAyNDIwX3RpbWVyM19od21vZCwKKwkmb21hcDI0MjBfdGltZXI0X2h3bW9kLAorCSZvbWFwMjQyMF90aW1lcjVfaHdtb2QsCisJJm9tYXAyNDIwX3RpbWVyNl9od21vZCwKKwkmb21hcDI0MjBfdGltZXI3X2h3bW9kLAorCSZvbWFwMjQyMF90aW1lcjhfaHdtb2QsCisJJm9tYXAyNDIwX3RpbWVyOV9od21vZCwKKwkmb21hcDI0MjBfdGltZXIxMF9od21vZCwKKwkmb21hcDI0MjBfdGltZXIxMV9od21vZCwKKwkmb21hcDI0MjBfdGltZXIxMl9od21vZCwKKwogCSZvbWFwMjQyMF93ZF90aW1lcjJfaHdtb2QsCiAJJm9tYXAyNDIwX3VhcnQxX2h3bW9kLAogCSZvbWFwMjQyMF91YXJ0Ml9od21vZCwKIAkmb21hcDI0MjBfdWFydDNfaHdtb2QsCisJLyogZHNzIGNsYXNzICovCisJJm9tYXAyNDIwX2Rzc19jb3JlX2h3bW9kLAorCSZvbWFwMjQyMF9kc3NfZGlzcGNfaHdtb2QsCisJJm9tYXAyNDIwX2Rzc19yZmJpX2h3bW9kLAorCSZvbWFwMjQyMF9kc3NfdmVuY19od21vZCwKKwkvKiBpMmMgY2xhc3MgKi8KIAkmb21hcDI0MjBfaTJjMV9od21vZCwKIAkmb21hcDI0MjBfaTJjMl9od21vZCwKIApAQCAtODg1LDEwICsyMTc4LDIxIEBACiAKIAkvKiBkbWFfc3lzdGVtIGNsYXNzKi8KIAkmb21hcDI0MjBfZG1hX3N5c3RlbV9od21vZCwKKworCS8qIG1haWxib3ggY2xhc3MgKi8KKwkmb21hcDI0MjBfbWFpbGJveF9od21vZCwKKworCS8qIG1jYnNwIGNsYXNzICovCisJJm9tYXAyNDIwX21jYnNwMV9od21vZCwKKwkmb21hcDI0MjBfbWNic3AyX2h3bW9kLAorCisJLyogbWNzcGkgY2xhc3MgKi8KKwkmb21hcDI0MjBfbWNzcGkxX2h3bW9kLAorCSZvbWFwMjQyMF9tY3NwaTJfaHdtb2QsCiAJTlVMTCwKIH07CiAKIGludCBfX2luaXQgb21hcDI0MjBfaHdtb2RfaW5pdCh2b2lkKQogewotCXJldHVybiBvbWFwX2h3bW9kX2luaXQob21hcDI0MjBfaHdtb2RzKTsKKwlyZXR1cm4gb21hcF9od21vZF9yZWdpc3RlcihvbWFwMjQyMF9od21vZHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCmluZGV4IDhlY2ZiY2QuLjBmZGYyY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKQEAgLTE4LDYgKzE4LDExIEBACiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvbWNic3AuaD4KKyNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9kbXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9tbWMuaD4KKyNpbmNsdWRlIDxwbGF0L2wzXzJ4eHguaD4KIAogI2luY2x1ZGUgIm9tYXBfaHdtb2RfY29tbW9uX2RhdGEuaCIKIApAQCAtMzgsNiArNDMsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9pdmFfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDNfbWFpbl9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF9jb3JlX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2Rzc19jb3JlX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2Rzc19kaXNwY19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9kc3NfcmZiaV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9kc3NfdmVuY19od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF93ZF90aW1lcjJfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzFfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzJfaHdtb2Q7CkBAIC00NSw2ICs1NCwxNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW80X2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW81X2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2RtYV9zeXN0ZW1faHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbWNic3AxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jYnNwMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tY2JzcDNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbWNic3A0X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jYnNwNV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tY3NwaTFfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbWNzcGkyX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jc3BpM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tbWMxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21tYzJfaHdtb2Q7CiAKIC8qIEwzIC0+IEw0X0NPUkUgaW50ZXJmYWNlICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2wzX21haW5fX2w0X2NvcmUgPSB7CkBAIC02NSw2ICs4NCwxOSBAQAogCSZvbWFwMjQzMF9tcHVfX2wzX21haW4sCiB9OwogCisvKiBEU1MgLT4gbDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfZHNzX19sMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9kc3NfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX2wzX21haW5faHdtb2QsCisJLmZ3ID0geworCQkub21hcDIgPSB7CisJCQkubDNfcGVybV9iaXQgID0gT01BUDJfTDNfQ09SRV9GV19DT05OSURfRFNTLAorCQkJLmZsYWdzCT0gT01BUF9GSVJFV0FMTF9MMywKKwkJfQorCX0sCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKIC8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2wzX21haW5fbWFzdGVyc1tdID0gewogCSZvbWFwMjQzMF9sM19tYWluX19sNF9jb3JlLApAQCAtODksNiArMTIxLDE2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfaTJjMV9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9pMmMyX2h3bW9kOwogCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdXNiaHNvdGdfaHdtb2Q7CisKKy8qIGwzX2NvcmUgLT4gdXNiaHNvdGcgIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF91c2Joc290Z19fbDMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfdXNiaHNvdGdfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF9sM19tYWluX2h3bW9kLAorCS5jbGsJCT0gImNvcmVfbDNfY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKK307CisKIC8qIEkyQyBJUCBibG9jayBhZGRyZXNzIHNwYWNlIGxlbmd0aCAoaW4gYnl0ZXMpICovCiAjZGVmaW5lIE9NQVAyX0kyQ19BU19MRU4JCTEyOAogCkBAIC0xODksNiArMjMxLDcxIEBACiAJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKKy8qCisqIHVzYmhzb3RnIGludGVyZmFjZSBkYXRhCisqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfdXNiaHNvdGdfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IE9NQVAyNDNYX0hTX0JBU0UsCisJCS5wYV9lbmQJCT0gT01BUDI0M1hfSFNfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiAgbDRfY29yZSAtPnVzYmhzb3RnICBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fdXNiaHNvdGcgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX3VzYmhzb3RnX2h3bW9kLAorCS5jbGsJCT0gInVzYl9sNF9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX3VzYmhzb3RnX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdXNiaHNvdGdfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX3VzYmhzb3RnX21hc3RlcnNbXSA9IHsKKwkmb21hcDI0MzBfdXNiaHNvdGdfX2wzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfdXNiaHNvdGdfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX3VzYmhzb3RnLAorfTsKKworLyogTDQgQ09SRSAtPiBNTUMxIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfbW1jMV9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDljMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOWMxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fbW1jMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfbW1jMV9od21vZCwKKwkuY2xrCQk9ICJtbWNoczFfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF9tbWMxX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tbWMxX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBMNCBDT1JFIC0+IE1NQzIgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9tbWMyX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwYjQwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODBiNDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19tbWMyID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF9tbWMyX2h3bW9kLAorCS5hZGRyCQk9IG9tYXAyNDMwX21tYzJfYWRkcl9zcGFjZSwKKwkuY2xrCQk9ICJtbWNoczJfaWNrIiwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21tYzJfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKIC8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sNF9jb3JlX3NsYXZlc1tdID0gewogCSZvbWFwMjQzMF9sM19tYWluX19sNF9jb3JlLApAQCAtMTk3LDYgKzMwNCw4IEBACiAvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2w0X2NvcmVfbWFzdGVyc1tdID0gewogCSZvbWFwMjQzMF9sNF9jb3JlX19sNF93a3VwLAorCSZvbWFwMjQzMF9sNF9jb3JlX19tbWMxLAorCSZvbWFwMjQzMF9sNF9jb3JlX19tbWMyLAogfTsKIAogLyogTDQgQ09SRSAqLwpAQCAtMjIzLDYgKzMzMiw2MCBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDRfd2t1cF9tYXN0ZXJzW10gPSB7CiB9OwogCisvKiBsNCBjb3JlIC0+IG1jc3BpMSBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX21jc3BpMV9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDk4MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOTgwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fbWNzcGkxID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF9tY3NwaTFfaHdtb2QsCisJLmNsawkJPSAibWNzcGkxX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfbWNzcGkxX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY3NwaTFfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0IGNvcmUgLT4gbWNzcGkyIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfbWNzcGkyX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwOWEwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA5YTBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19tY3NwaTIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX21jc3BpMl9od21vZCwKKwkuY2xrCQk9ICJtY3NwaTJfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF9tY3NwaTJfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jc3BpMl9hZGRyX3NwYWNlKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDQgY29yZSAtPiBtY3NwaTMgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9tY3NwaTNfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODBiODAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MGI4MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX21jc3BpMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfbWNzcGkzX2h3bW9kLAorCS5jbGsJCT0gIm1jc3BpM19pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX21jc3BpM19hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNzcGkzX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCiAvKiBMNCBXS1VQICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDRfd2t1cF9od21vZCA9IHsKIAkubmFtZQkJPSAibDRfd2t1cCIsCkBAIC0yNzgsNiArNDQxLDYyNCBAQAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQogfTsKIAorLyogVGltZXIgQ29tbW9uICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyNDMwX3RpbWVyX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwKKwkJCSAgIFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkgICBTWVNDX0hBU19BVVRPSURMRSksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDI0MzBfdGltZXJfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAidGltZXIiLAorCS5zeXNjID0gJm9tYXAyNDMwX3RpbWVyX3N5c2MsCisJLnJldiA9IE9NQVBfVElNRVJfSVBfVkVSU0lPTl8xLAorfTsKKworLyogdGltZXIxICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdGltZXIxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDMwX3RpbWVyMV9tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDM3LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfdGltZXIxX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ5MDE4MDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMTgwMDAgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfd2t1cCAtPiB0aW1lcjEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfd2t1cF9fdGltZXIxID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X3drdXBfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF90aW1lcjFfaHdtb2QsCisJLmNsawkJPSAiZ3B0MV9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX3RpbWVyMV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyMV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyMSBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF90aW1lcjFfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X3drdXBfX3RpbWVyMSwKK307CisKKy8qIHRpbWVyMSBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3RpbWVyMV9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIxIiwKKwkubXB1X2lycXMJPSBvbWFwMjQzMF90aW1lcjFfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXIxX21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3B0MV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQVDFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX3RpbWVyMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyMV9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCit9OworCisvKiB0aW1lcjIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF90aW1lcjJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MzBfdGltZXIyX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gMzgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF90aW1lcjJfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwMmEwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODAyYTAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX190aW1lcjIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX3RpbWVyMl9od21vZCwKKwkuY2xrCQk9ICJncHQyX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfdGltZXIyX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXIyX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIyIHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX3RpbWVyMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDRfY29yZV9fdGltZXIyLAorfTsKKworLyogdGltZXIyIGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdGltZXIyX2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjIiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDMwX3RpbWVyMl9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjJfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQyX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUMl9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfdGltZXIyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXIyX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKK307CisKKy8qIHRpbWVyMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3RpbWVyM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF90aW1lcjNfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSAzOSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX3RpbWVyM19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA3ODAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDc4MDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gdGltZXIzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX3RpbWVyMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfdGltZXIzX2h3bW9kLAorCS5jbGsJCT0gImdwdDNfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF90aW1lcjNfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjNfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjMgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfdGltZXIzX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX190aW1lcjMsCit9OworCisvKiB0aW1lcjMgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF90aW1lcjNfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMyIsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfdGltZXIzX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyM19tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDNfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQzX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF90aW1lcjNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjNfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDMwX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorfTsKKworLyogdGltZXI0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdGltZXI0X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDMwX3RpbWVyNF9tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDQwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfdGltZXI0X2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDdhMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwN2EwMDAgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiB0aW1lcjQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fdGltZXI0ID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF90aW1lcjRfaHdtb2QsCisJLmNsawkJPSAiZ3B0NF9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX3RpbWVyNF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyNF9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyNCBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF90aW1lcjRfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX3RpbWVyNCwKK307CisKKy8qIHRpbWVyNCBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3RpbWVyNF9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXI0IiwKKwkubXB1X2lycXMJPSBvbWFwMjQzMF90aW1lcjRfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXI0X21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3B0NF9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQVDRfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX3RpbWVyNF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyNF9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCit9OworCisvKiB0aW1lcjUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF90aW1lcjVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MzBfdGltZXI1X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDEsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF90aW1lcjVfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwN2MwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA3YzAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyNSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX190aW1lcjUgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX3RpbWVyNV9od21vZCwKKwkuY2xrCQk9ICJncHQ1X2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfdGltZXI1X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXI1X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI1IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX3RpbWVyNV9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDRfY29yZV9fdGltZXI1LAorfTsKKworLyogdGltZXI1IGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdGltZXI1X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjUiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDMwX3RpbWVyNV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjVfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQ1X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUNV9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfdGltZXI1X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXI1X3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKK307CisKKy8qIHRpbWVyNiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3RpbWVyNl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF90aW1lcjZfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0MiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX3RpbWVyNl9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA3ZTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDdlMDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gdGltZXI2ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX3RpbWVyNiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfdGltZXI2X2h3bW9kLAorCS5jbGsJCT0gImdwdDZfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF90aW1lcjZfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjZfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjYgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfdGltZXI2X3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX190aW1lcjYsCit9OworCisvKiB0aW1lcjYgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF90aW1lcjZfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyNiIsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfdGltZXI2X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyNl9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDZfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ2X1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF90aW1lcjZfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjZfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDMwX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorfTsKKworLyogdGltZXI3ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdGltZXI3X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDMwX3RpbWVyN19tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDQzLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfdGltZXI3X2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDgwMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwODAwMDAgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiB0aW1lcjcgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fdGltZXI3ID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF90aW1lcjdfaHdtb2QsCisJLmNsawkJPSAiZ3B0N19pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX3RpbWVyN19hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyN19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyNyBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF90aW1lcjdfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX3RpbWVyNywKK307CisKKy8qIHRpbWVyNyBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3RpbWVyN19od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXI3IiwKKwkubXB1X2lycXMJPSBvbWFwMjQzMF90aW1lcjdfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXI3X21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3B0N19mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQVDdfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX3RpbWVyN19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyN19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCit9OworCisvKiB0aW1lcjggKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF90aW1lcjhfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MzBfdGltZXI4X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF90aW1lcjhfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwODIwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA4MjAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyOCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX190aW1lcjggPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX3RpbWVyOF9od21vZCwKKwkuY2xrCQk9ICJncHQ4X2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfdGltZXI4X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXI4X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI4IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX3RpbWVyOF9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDRfY29yZV9fdGltZXI4LAorfTsKKworLyogdGltZXI4IGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdGltZXI4X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjgiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDMwX3RpbWVyOF9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjhfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQ4X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUOF9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfdGltZXI4X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXI4X3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKK307CisKKy8qIHRpbWVyOSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3RpbWVyOV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF90aW1lcjlfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0NSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX3RpbWVyOV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA4NDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDg0MDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gdGltZXI5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX3RpbWVyOSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfdGltZXI5X2h3bW9kLAorCS5jbGsJCT0gImdwdDlfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF90aW1lcjlfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjlfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjkgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfdGltZXI5X3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX190aW1lcjksCit9OworCisvKiB0aW1lcjkgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF90aW1lcjlfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyOSIsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfdGltZXI5X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyOV9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDlfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ5X1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF90aW1lcjlfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjlfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDMwX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorfTsKKworLyogdGltZXIxMCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3RpbWVyMTBfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MzBfdGltZXIxMF9tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDQ2LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfdGltZXIxMF9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA4NjAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDg2MDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gdGltZXIxMCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX190aW1lcjEwID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF90aW1lcjEwX2h3bW9kLAorCS5jbGsJCT0gImdwdDEwX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfdGltZXIxMF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyMTBfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjEwIHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX3RpbWVyMTBfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX3RpbWVyMTAsCit9OworCisvKiB0aW1lcjEwIGh3bW9kICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdGltZXIxMF9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIxMCIsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfdGltZXIxMF9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjEwX21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3B0MTBfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQVDEwX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUMTBfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX3RpbWVyMTBfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjEwX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzMF90aW1lcl9od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKK307CisKKy8qIHRpbWVyMTEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF90aW1lcjExX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDMwX3RpbWVyMTFfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0NywgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX3RpbWVyMTFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwODgwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA4ODAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyMTEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fdGltZXIxMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfdGltZXIxMV9od21vZCwKKwkuY2xrCQk9ICJncHQxMV9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX3RpbWVyMTFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF90aW1lcjExX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIxMSBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF90aW1lcjExX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX190aW1lcjExLAorfTsKKworLyogdGltZXIxMSBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3RpbWVyMTFfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMTEiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDMwX3RpbWVyMTFfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXIxMV9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDExX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQVDExX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF90aW1lcjExX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXIxMV9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCit9OworCisvKiB0aW1lcjEyICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdGltZXIxMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF90aW1lcjEyX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF90aW1lcjEyX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDhhMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOGEwMDAgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiB0aW1lcjEyICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX3RpbWVyMTIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX3RpbWVyMTJfaHdtb2QsCisJLmNsawkJPSAiZ3B0MTJfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF90aW1lcjEyX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdGltZXIxMl9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyMTIgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfdGltZXIxMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDRfY29yZV9fdGltZXIxMiwKK307CisKKy8qIHRpbWVyMTIgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF90aW1lcjEyX2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjEyIiwKKwkubXB1X2lycXMJPSBvbWFwMjQzMF90aW1lcjEyX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyMTJfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQxMl9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQxMl9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfdGltZXIxMl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX3RpbWVyMTJfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDMwX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorfTsKKwogLyogbDRfd2t1cCAtPiB3ZF90aW1lcjIgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX3dkX3RpbWVyMl9hZGRyc1tdID0gewogCXsKQEAgLTMwNyw3ICsxMDg4LDcgQEAKIAkuc3lzY19vZmZzCT0gMHgwMDEwLAogCS5zeXNzX29mZnMJPSAweDAwMTQsCiAJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfRU1VRlJFRSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8Ci0JCQkgICBTWVNDX0hBU19BVVRPSURMRSksCisJCQkgICBTWVNDX0hBU19BVVRPSURMRSB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCiAJLnN5c2NfZmllbGRzICAgID0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKIH07CiAKQEAgLTM0OCw3ICsxMTI5LDcgQEAKIAkuc3lzc19vZmZzCT0gMHg1OCwKIAkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfAogCQkJICAgU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKLQkJCSAgIFNZU0NfSEFTX0FVVE9JRExFKSwKKwkJCSAgIFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKIAkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCiAJLnN5c2NfZmllbGRzICAgID0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKIH07CkBAIC00NjksMTIgKzEyNTAsMjc0IEBACiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAogfTsKIAorLyoKKyAqICdkc3MnIGNsYXNzCisgKiBkaXNwbGF5IHN1Yi1zeXN0ZW0KKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyNDMwX2Rzc19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDI0MzBfZHNzX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gImRzcyIsCisJLnN5c2MgPSAmb21hcDI0MzBfZHNzX3N5c2MsCit9OworCisvKiBkc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF9kc3NfaXJxc1tdID0geworCXsgLmlycSA9IDI1IH0sCit9Oworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXAyNDMwX2Rzc19zZG1hX2Noc1tdID0geworCXsgLm5hbWUgPSAiZGlzcGMiLCAuZG1hX3JlcSA9IDUgfSwKK307CisKKy8qIGRzcyAqLworLyogZHNzIG1hc3RlciBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfZHNzX21hc3RlcnNbXSA9IHsKKwkmb21hcDI0MzBfZHNzX19sMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX2Rzc19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA1MDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDUwM0ZGLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gZHNzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX2RzcyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfZHNzX2NvcmVfaHdtb2QsCisJLmNsawkJPSAiZHNzX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfZHNzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfZHNzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZHNzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9kc3Nfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX2RzcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIGRzc19vcHRfY2xrc1tdID0geworCXsgLnJvbGUgPSAidHZfY2xrIiwgLmNsayA9ICJkc3NfNTRtX2ZjayIgfSwKKwl7IC5yb2xlID0gInN5c19jbGsiLCAuY2xrID0gImRzczJfZmNrIiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2Rzc19jb3JlX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfY29yZSIsCisJLmNsYXNzCQk9ICZvbWFwMjQzMF9kc3NfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gImRzczFfZmNrIiwgLyogaW5zdGVhZCBvZiBkc3NfZmNrICovCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfZHNzX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfZHNzX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMjQzMF9kc3Nfc2RtYV9jaHMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2Rzc19zZG1hX2NocyksCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X3N0ZGJ5X2JpdCA9IE9NQVAyNFhYX1NUX0RTU19TSElGVCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGRzc19vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250ID0gQVJSQVlfU0laRShkc3Nfb3B0X2Nsa3MpLAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfZHNzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfZHNzX3NsYXZlcyksCisJLm1hc3RlcnMJPSBvbWFwMjQzMF9kc3NfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2Rzc19tYXN0ZXJzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKK307CisKKy8qCisgKiAnZGlzcGMnIGNsYXNzCisgKiBkaXNwbGF5IGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyNDMwX2Rpc3BjX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19NSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIE1TVEFOREJZX0ZPUkNFIHwgTVNUQU5EQllfTk8gfCBNU1RBTkRCWV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwMjQzMF9kaXNwY19od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJkaXNwYyIsCisJLnN5c2MgPSAmb21hcDI0MzBfZGlzcGNfc3lzYywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX2Rzc19kaXNwY19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA1MDQwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDUwN0ZGLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gZHNzX2Rpc3BjICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX2Rzc19kaXNwYyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfZHNzX2Rpc3BjX2h3bW9kLAorCS5jbGsJCT0gImRzc19pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX2Rzc19kaXNwY19hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2Rzc19kaXNwY19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRzc19kaXNwYyBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfZHNzX2Rpc3BjX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19kc3NfZGlzcGMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZHNzX2Rpc3BjX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfZGlzcGMiLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfZGlzcGNfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gImRzczFfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3Rfc3RkYnlfYml0ID0gT01BUDI0WFhfU1RfRFNTX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9kc3NfZGlzcGNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9kc3NfZGlzcGNfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKK307CisKKy8qCisgKiAncmZiaScgY2xhc3MKKyAqIHJlbW90ZSBmcmFtZSBidWZmZXIgaW50ZXJmYWNlCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwMjQzMF9yZmJpX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19TT0ZUUkVTRVQgfAorCQkJICAgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDMwX3JmYmlfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAicmZiaSIsCisJLnN5c2MgPSAmb21hcDI0MzBfcmZiaV9zeXNjLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfZHNzX3JmYmlfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNTA4MDAsCisJCS5wYV9lbmQJCT0gMHg0ODA1MEJGRiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IGRzc19yZmJpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX2Rzc19yZmJpID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF9kc3NfcmZiaV9od21vZCwKKwkuY2xrCQk9ICJkc3NfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF9kc3NfcmZiaV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2Rzc19yZmJpX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZHNzX3JmYmkgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2Rzc19yZmJpX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19kc3NfcmZiaSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9kc3NfcmZiaV9od21vZCA9IHsKKwkubmFtZQkJPSAiZHNzX3JmYmkiLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfcmZiaV9od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAiZHNzMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fRFNTMV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9kc3NfcmZiaV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2Rzc19yZmJpX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCit9OworCisvKgorICogJ3ZlbmMnIGNsYXNzCisgKiB2aWRlbyBlbmNvZGVyCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDMwX3ZlbmNfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAidmVuYyIsCit9OworCisvKiBkc3NfdmVuYyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfZHNzX3ZlbmNfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNTBDMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA1MEZGRiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IGRzc192ZW5jICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX2Rzc192ZW5jID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF9kc3NfdmVuY19od21vZCwKKwkuY2xrCQk9ICJkc3NfNTRtX2ZjayIsCisJLmFkZHIJCT0gb21hcDI0MzBfZHNzX3ZlbmNfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9kc3NfdmVuY19hZGRycyksCisJLmZsYWdzCQk9IE9DUElGX1NXU1VQX0lETEUsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRzc192ZW5jIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9kc3NfdmVuY19zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDRfY29yZV9fZHNzX3ZlbmMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZHNzX3ZlbmNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc192ZW5jIiwKKwkuY2xhc3MJCT0gJm9tYXAyNDMwX3ZlbmNfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gImRzczFfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfZHNzX3ZlbmNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9kc3NfdmVuY19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAorfTsKKwogLyogSTJDIGNvbW1vbiAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBpMmNfc3lzYyA9IHsKIAkucmV2X29mZnMJPSAweDAwLAogCS5zeXNjX29mZnMJPSAweDIwLAogCS5zeXNzX29mZnMJPSAweDEwLAotCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFKSwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSB8CisJCQkgICBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAogCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCiB9OwogCkBAIC02NzIsNyArMTcxNSw4IEBACiAJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKIAkuc3lzc19vZmZzCT0gMHgwMDE0LAogCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NJRExFTU9ERSB8Ci0JCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSB8CisJCQkgICBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAogCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKIAkuc3lzY19maWVsZHMgICAgPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAogfTsKQEAgLTg0NCw3ICsxODg4LDcgQEAKIAkuc3lzc19vZmZzCT0gMHgwMDI4LAogCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX01JRExFTU9ERSB8CiAJCQkgICBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwgU1lTQ19IQVNfRU1VRlJFRSB8Ci0JCQkgICBTWVNDX0hBU19BVVRPSURMRSksCisJCQkgICBTWVNDX0hBU19BVVRPSURMRSB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCiAJLmlkbGVtb2Rlcwk9IChNU1RBTkRCWV9GT1JDRSB8IE1TVEFOREJZX05PIHwgTVNUQU5EQllfU01BUlQpLAogCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCiB9OwpAQCAtOTE5LDE4ICsxOTYzLDc0MSBAQAogCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCiB9OwogCisvKgorICogJ21haWxib3gnIGNsYXNzCisgKiBtYWlsYm94IG1vZHVsZSBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIG9uLWNoaXAgcHJvY2Vzc29ycworICogdXNpbmcgYSBxdWV1ZWQgbWFpbGJveC1pbnRlcnJ1cHQgbWVjaGFuaXNtLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MzBfbWFpbGJveF9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwLAorCS5zeXNjX29mZnMJPSAweDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkJU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDMwX21haWxib3hfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAibWFpbGJveCIsCisJLnN5c2MgPSAmb21hcDI0MzBfbWFpbGJveF9zeXNjLAorfTsKKworLyogbWFpbGJveCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21haWxib3hfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MzBfbWFpbGJveF9pcnFzW10gPSB7CisJeyAuaXJxID0gMjYgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX21haWxib3hfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwOTQwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA5NDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBtYWlsYm94ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX21haWxib3ggPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX21haWxib3hfaHdtb2QsCisJLmFkZHIJCT0gb21hcDI0MzBfbWFpbGJveF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21haWxib3hfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtYWlsYm94IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9tYWlsYm94X3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19tYWlsYm94LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21haWxib3hfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1haWxib3giLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfbWFpbGJveF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwMjQzMF9tYWlsYm94X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWFpbGJveF9pcnFzKSwKKwkubWFpbl9jbGsJPSAibWFpbGJveGVzX2ljayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9NQUlMQk9YRVNfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQUlMQk9YRVNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX21haWxib3hfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tYWlsYm94X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyoKKyAqICdtY3NwaScgY2xhc3MKKyAqIG11bHRpY2hhbm5lbCBzZXJpYWwgcG9ydCBpbnRlcmZhY2UgKG1jc3BpKSAvIG1hc3Rlci9zbGF2ZSBzeW5jaHJvbm91cyBzZXJpYWwKKyAqIGJ1cworICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MzBfbWNzcGlfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfCBTWVNDX0hBU19TSURMRU1PREUgfAorCQkJCVNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkJU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMgICAgPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDMwX21jc3BpX2NsYXNzID0geworCS5uYW1lID0gIm1jc3BpIiwKKwkuc3lzYyA9ICZvbWFwMjQzMF9tY3NwaV9zeXNjLAorCS5yZXYgPSBPTUFQMl9NQ1NQSV9SRVYsCit9OworCisvKiBtY3NwaTEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF9tY3NwaTFfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA2NSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXAyNDMwX21jc3BpMV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4MCIsIC5kbWFfcmVxID0gMzUgfSwgLyogRE1BX1NQSTFfVFgwICovCisJeyAubmFtZSA9ICJyeDAiLCAuZG1hX3JlcSA9IDM2IH0sIC8qIERNQV9TUEkxX1JYMCAqLworCXsgLm5hbWUgPSAidHgxIiwgLmRtYV9yZXEgPSAzNyB9LCAvKiBETUFfU1BJMV9UWDEgKi8KKwl7IC5uYW1lID0gInJ4MSIsIC5kbWFfcmVxID0gMzggfSwgLyogRE1BX1NQSTFfUlgxICovCisJeyAubmFtZSA9ICJ0eDIiLCAuZG1hX3JlcSA9IDM5IH0sIC8qIERNQV9TUEkxX1RYMiAqLworCXsgLm5hbWUgPSAicngyIiwgLmRtYV9yZXEgPSA0MCB9LCAvKiBETUFfU1BJMV9SWDIgKi8KKwl7IC5uYW1lID0gInR4MyIsIC5kbWFfcmVxID0gNDEgfSwgLyogRE1BX1NQSTFfVFgzICovCisJeyAubmFtZSA9ICJyeDMiLCAuZG1hX3JlcSA9IDQyIH0sIC8qIERNQV9TUEkxX1JYMyAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbWNzcGkxX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19tY3NwaTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyIG9tYXBfbWNzcGkxX2Rldl9hdHRyID0geworCS5udW1fY2hpcHNlbGVjdCA9IDQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbWNzcGkxX2h3bW9kID0geworCS5uYW1lCQk9ICJtY3NwaTFfaHdtb2QiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDMwX21jc3BpMV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY3NwaTFfbXB1X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMjQzMF9tY3NwaTFfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY3NwaTFfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibWNzcGkxX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQ1NQSTFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX21jc3BpMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jc3BpMV9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfbWNzcGlfY2xhc3MsCisJLmRldl9hdHRyICAgICAgID0gJm9tYXBfbWNzcGkxX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKy8qIG1jc3BpMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDMwX21jc3BpMl9tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDY2IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDI0MzBfbWNzcGkyX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgwIiwgLmRtYV9yZXEgPSA0MyB9LCAvKiBETUFfU1BJMl9UWDAgKi8KKwl7IC5uYW1lID0gInJ4MCIsIC5kbWFfcmVxID0gNDQgfSwgLyogRE1BX1NQSTJfUlgwICovCisJeyAubmFtZSA9ICJ0eDEiLCAuZG1hX3JlcSA9IDQ1IH0sIC8qIERNQV9TUEkyX1RYMSAqLworCXsgLm5hbWUgPSAicngxIiwgLmRtYV9yZXEgPSA0NiB9LCAvKiBETUFfU1BJMl9SWDEgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX21jc3BpMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDRfY29yZV9fbWNzcGkyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9kZXZfYXR0ciBvbWFwX21jc3BpMl9kZXZfYXR0ciA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jc3BpMl9od21vZCA9IHsKKwkubmFtZQkJPSAibWNzcGkyX2h3bW9kIiwKKwkubXB1X2lycXMJPSBvbWFwMjQzMF9tY3NwaTJfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNzcGkyX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDI0MzBfbWNzcGkyX3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNzcGkyX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gIm1jc3BpMl9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfTUNTUEkyX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9tY3NwaTJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY3NwaTJfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDMwX21jc3BpX2NsYXNzLAorCS5kZXZfYXR0ciAgICAgICA9ICZvbWFwX21jc3BpMl9kZXZfYXR0ciwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCisvKiBtY3NwaTMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF9tY3NwaTNfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA5MSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXAyNDMwX21jc3BpM19zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4MCIsIC5kbWFfcmVxID0gMTUgfSwgLyogRE1BX1NQSTNfVFgwICovCisJeyAubmFtZSA9ICJyeDAiLCAuZG1hX3JlcSA9IDE2IH0sIC8qIERNQV9TUEkzX1JYMCAqLworCXsgLm5hbWUgPSAidHgxIiwgLmRtYV9yZXEgPSAyMyB9LCAvKiBETUFfU1BJM19UWDEgKi8KKwl7IC5uYW1lID0gInJ4MSIsIC5kbWFfcmVxID0gMjQgfSwgLyogRE1BX1NQSTNfUlgxICovCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9tY3NwaTNfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX21jc3BpMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2X2F0dHIgb21hcF9tY3NwaTNfZGV2X2F0dHIgPSB7CisJLm51bV9jaGlwc2VsZWN0ID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tY3NwaTNfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19od21vZCIsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfbWNzcGkzX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jc3BpM19tcHVfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAyNDMwX21jc3BpM19zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jc3BpM19zZG1hX3JlcXMpLAorCS5tYWluX2Nsawk9ICJtY3NwaTNfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLnByY21fcmVnX2lkID0gMiwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAorCQkJLmlkbGVzdF9yZWdfaWQgPSAyLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNDMwX1NUX01DU1BJM19TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfbWNzcGkzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNzcGkzX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzMF9tY3NwaV9jbGFzcywKKwkuZGV2X2F0dHIgICAgICAgPSAmb21hcF9tY3NwaTNfZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyoKKyAqIHVzYmhzb3RnCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MzBfdXNiaHNvdGdfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDA0MDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDQwNCwKKwkuc3lzc19vZmZzCT0gMHgwNDA4LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX01JRExFTU9ERXwKKwkJCSAgU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKKwkJCSAgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgTVNUQU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8IE1TVEFOREJZX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIHVzYm90Z19jbGFzcyA9IHsKKwkubmFtZSA9ICJ1c2JvdGciLAorCS5zeXNjID0gJm9tYXAyNDMwX3VzYmhzb3RnX3N5c2MsCit9OworCisvKiB1c2Jfb3RnX2hzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MzBfdXNiaHNvdGdfbXB1X2lycXNbXSA9IHsKKworCXsgLm5hbWUgPSAibWMiLCAuaXJxID0gOTIgfSwKKwl7IC5uYW1lID0gImRtYSIsIC5pcnEgPSA5MyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX3VzYmhzb3RnX2h3bW9kID0geworCS5uYW1lCQk9ICJ1c2Jfb3RnX2hzIiwKKwkubXB1X2lycXMJPSBvbWFwMjQzMF91c2Joc290Z19tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF91c2Joc290Z19tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gInVzYmhzX2ljayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjQzMF9FTl9VU0JIU19NQVNLLAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0MzBfU1RfVVNCSFNfU0hJRlQsCisJCX0sCisJfSwKKwkubWFzdGVycwk9IG9tYXAyNDMwX3VzYmhzb3RnX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF91c2Joc290Z19tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX3VzYmhzb3RnX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfdXNiaHNvdGdfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJnVzYm90Z19jbGFzcywKKwkvKgorCSAqIEVycmF0dW0gSUQ6IGk0NzkgIGlkbGVfcmVxIC8gaWRsZV9hY2sgbWVjaGFuaXNtIHBvdGVudGlhbGx5CisJICogYnJva2VuIHdoZW4gYXV0b2lkbGUgaXMgZW5hYmxlZAorCSAqIHdvcmthcm91bmQgaXMgdG8gZGlzYWJsZSB0aGUgYXV0b2lkbGUgYml0IGF0IG1vZHVsZSBsZXZlbC4KKwkgKi8KKwkuZmxhZ3MJCT0gSFdNT0RfTk9fT0NQX0FVVE9JRExFIHwgSFdNT0RfU1dTVVBfU0lETEUKKwkJCQl8IEhXTU9EX1NXU1VQX01TVEFOREJZLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorfTsKKworLyoKKyAqICdtY2JzcCcgY2xhc3MKKyAqIG11bHRpIGNoYW5uZWwgYnVmZmVyZWQgc2VyaWFsIHBvcnQgY29udHJvbGxlcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MzBfbWNic3Bfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwN0MsCisJLnN5c2Nfb2Zmcwk9IDB4MDA4QywKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TT0ZUUkVTRVQpLAorCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDI0MzBfbWNic3BfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAibWNic3AiLAorCS5zeXNjID0gJm9tYXAyNDMwX21jYnNwX3N5c2MsCisJLnJldiAgPSBNQ0JTUF9DT05GSUdfVFlQRTIsCit9OworCisvKiBtY2JzcDEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF9tY2JzcDFfaXJxc1tdID0geworCXsgLm5hbWUgPSAidHgiLAkJLmlycSA9IDU5IH0sCisJeyAubmFtZSA9ICJyeCIsCQkuaXJxID0gNjAgfSwKKwl7IC5uYW1lID0gIm92ciIsCS5pcnEgPSA2MSB9LAorCXsgLm5hbWUgPSAiY29tbW9uIiwJLmlycSA9IDY0IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDI0MzBfbWNic3AxX3NkbWFfY2hzW10gPSB7CisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gMzIgfSwKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSAzMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfbWNic3AxX2FkZHJzW10gPSB7CisJeworCQkubmFtZQkJPSAibXB1IiwKKwkJLnBhX3N0YXJ0CT0gMHg0ODA3NDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDc0MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gbWNic3AxICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX21jYnNwMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfbWNic3AxX2h3bW9kLAorCS5jbGsJCT0gIm1jYnNwMV9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX21jYnNwMV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwMV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIG1jYnNwMSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbWNic3AxX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19tY2JzcDEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbWNic3AxX2h3bW9kID0geworCS5uYW1lCQk9ICJtY2JzcDEiLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfbWNic3BfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfbWNic3AxX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNic3AxX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMjQzMF9tY2JzcDFfc2RtYV9jaHMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwMV9zZG1hX2NocyksCisJLm1haW5fY2xrCT0gIm1jYnNwMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfTUNCU1AxX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9tY2JzcDFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY2JzcDFfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCisvKiBtY2JzcDIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF9tY2JzcDJfaXJxc1tdID0geworCXsgLm5hbWUgPSAidHgiLAkJLmlycSA9IDYyIH0sCisJeyAubmFtZSA9ICJyeCIsCQkuaXJxID0gNjMgfSwKKwl7IC5uYW1lID0gImNvbW1vbiIsCS5pcnEgPSAxNiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXAyNDMwX21jYnNwMl9zZG1hX2Noc1tdID0geworCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IDM0IH0sCisJeyAubmFtZSA9ICJ0eCIsIC5kbWFfcmVxID0gMzMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX21jYnNwMl9hZGRyc1tdID0geworCXsKKwkJLm5hbWUJCT0gIm1wdSIsCisJCS5wYV9zdGFydAk9IDB4NDgwNzYwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA3NjBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IG1jYnNwMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19tY2JzcDIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX21jYnNwMl9od21vZCwKKwkuY2xrCQk9ICJtY2JzcDJfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF9tY2JzcDJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY2JzcDJfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtY2JzcDIgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX21jYnNwMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDRfY29yZV9fbWNic3AyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jYnNwMl9od21vZCA9IHsKKwkubmFtZQkJPSAibWNic3AyIiwKKwkuY2xhc3MJCT0gJm9tYXAyNDMwX21jYnNwX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXAyNDMwX21jYnNwMl9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwMl9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDI0MzBfbWNic3AyX3NkbWFfY2hzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY2JzcDJfc2RtYV9jaHMpLAorCS5tYWluX2Nsawk9ICJtY2JzcDJfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX01DQlNQMl9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX01DQlNQMl9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfbWNic3AyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNic3AyX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyogbWNic3AzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MzBfbWNic3AzX2lycXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwJCS5pcnEgPSA4OSB9LAorCXsgLm5hbWUgPSAicngiLAkJLmlycSA9IDkwIH0sCisJeyAubmFtZSA9ICJjb21tb24iLAkuaXJxID0gMTcgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwMjQzMF9tY2JzcDNfc2RtYV9jaHNbXSA9IHsKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAxOCB9LAorCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDE3IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9tY2JzcDNfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtcHUiLAorCQkucGFfc3RhcnQJPSAweDQ4MDhDMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOEMwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBtY2JzcDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fbWNic3AzID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF9tY2JzcDNfaHdtb2QsCisJLmNsawkJPSAibWNic3AzX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfbWNic3AzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNic3AzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3AzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9tY2JzcDNfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX21jYnNwMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tY2JzcDNfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jYnNwMyIsCisJLmNsYXNzCQk9ICZvbWFwMjQzMF9tY2JzcF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwMjQzMF9tY2JzcDNfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY2JzcDNfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAyNDMwX21jYnNwM19zZG1hX2NocywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNic3AzX3NkbWFfY2hzKSwKKwkubWFpbl9jbGsJPSAibWNic3AzX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMiwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjQzMF9TVF9NQ0JTUDNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX21jYnNwM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwM19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKy8qIG1jYnNwNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAyNDMwX21jYnNwNF9pcnFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsCQkuaXJxID0gNTQgfSwKKwl7IC5uYW1lID0gInJ4IiwJCS5pcnEgPSA1NSB9LAorCXsgLm5hbWUgPSAiY29tbW9uIiwJLmlycSA9IDE4IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDI0MzBfbWNic3A0X3NkbWFfY2hzW10gPSB7CisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gMjAgfSwKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSAxOSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfbWNic3A0X2FkZHJzW10gPSB7CisJeworCQkubmFtZQkJPSAibXB1IiwKKwkJLnBhX3N0YXJ0CT0gMHg0ODA4RTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDhFMGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gbWNic3A0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX21jYnNwNCA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfbWNic3A0X2h3bW9kLAorCS5jbGsJCT0gIm1jYnNwNF9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX21jYnNwNF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwNF9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIG1jYnNwNCBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbWNic3A0X3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19tY2JzcDQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbWNic3A0X2h3bW9kID0geworCS5uYW1lCQk9ICJtY2JzcDQiLAorCS5jbGFzcwkJPSAmb21hcDI0MzBfbWNic3BfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfbWNic3A0X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNic3A0X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMjQzMF9tY2JzcDRfc2RtYV9jaHMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwNF9zZG1hX2NocyksCisJLm1haW5fY2xrCT0gIm1jYnNwNF9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDIsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0MzBfU1RfTUNCU1A0X1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9tY2JzcDRfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY2JzcDRfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCisvKiBtY2JzcDUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF9tY2JzcDVfaXJxc1tdID0geworCXsgLm5hbWUgPSAidHgiLAkJLmlycSA9IDgxIH0sCisJeyAubmFtZSA9ICJyeCIsCQkuaXJxID0gODIgfSwKKwl7IC5uYW1lID0gImNvbW1vbiIsCS5pcnEgPSAxOSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXAyNDMwX21jYnNwNV9zZG1hX2Noc1tdID0geworCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IDIyIH0sCisJeyAubmFtZSA9ICJ0eCIsIC5kbWFfcmVxID0gMjEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX21jYnNwNV9hZGRyc1tdID0geworCXsKKwkJLm5hbWUJCT0gIm1wdSIsCisJCS5wYV9zdGFydAk9IDB4NDgwOTYwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA5NjBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IG1jYnNwNSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19tY2JzcDUgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX21jYnNwNV9od21vZCwKKwkuY2xrCQk9ICJtY2JzcDVfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF9tY2JzcDVfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY2JzcDVfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtY2JzcDUgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX21jYnNwNV9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MzBfbDRfY29yZV9fbWNic3A1LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jYnNwNV9od21vZCA9IHsKKwkubmFtZQkJPSAibWNic3A1IiwKKwkuY2xhc3MJCT0gJm9tYXAyNDMwX21jYnNwX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXAyNDMwX21jYnNwNV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwNV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDI0MzBfbWNic3A1X3NkbWFfY2hzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tY2JzcDVfc2RtYV9jaHMpLAorCS5tYWluX2Nsawk9ICJtY2JzcDVfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNDMwX0VOX01DQlNQNV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAyLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNDMwX1NUX01DQlNQNV9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfbWNic3A1X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbWNic3A1X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyogTU1DL1NEL1NESU8gY29tbW9uICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MzBfbW1jX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgxZmMsCisJLnN5c2Nfb2Zmcwk9IDB4MTAsCisJLnN5c3Nfb2Zmcwk9IDB4MTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19FTkFXQUtFVVAgfCBTWVNDX0hBU19TT0ZUUkVTRVQgfAorCQkJICAgU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMgICAgPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDMwX21tY19jbGFzcyA9IHsKKwkubmFtZSA9ICJtbWMiLAorCS5zeXNjID0gJm9tYXAyNDMwX21tY19zeXNjLAorfTsKKworLyogTU1DL1NEL1NESU8xICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF9tbWMxX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gODMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwMjQzMF9tbWMxX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLAkuZG1hX3JlcSA9IDYxIH0sIC8qIERNQV9NTUMxX1RYICovCisJeyAubmFtZSA9ICJyeCIsCS5kbWFfcmVxID0gNjIgfSwgLyogRE1BX01NQzFfUlggKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIG9tYXAyNDMwX21tYzFfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2siLCAuY2xrID0gIm1tY2hzZGIxX2ZjayIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX21tYzFfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX21tYzEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CisJLmZsYWdzID0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbW1jMV9od21vZCA9IHsKKwkubmFtZQkJPSAibW1jMSIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfbW1jMV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tbWMxX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDI0MzBfbW1jMV9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21tYzFfc2RtYV9yZXFzKSwKKwkub3B0X2Nsa3MJPSBvbWFwMjQzMF9tbWMxX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21tYzFfb3B0X2Nsa3MpLAorCS5tYWluX2Nsawk9ICJtbWNoczFfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLnByY21fcmVnX2lkID0gMiwKKwkJCS5tb2R1bGVfYml0ICA9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMiwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjQzMF9TVF9NTUNIUzFfU0hJRlQsCisJCX0sCisJfSwKKwkuZGV2X2F0dHIJPSAmbW1jMV9kZXZfYXR0ciwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX21tYzFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tbWMxX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzMF9tbWNfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyogTU1DL1NEL1NESU8yICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQzMF9tbWMyX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gODYgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwMjQzMF9tbWMyX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLAkuZG1hX3JlcSA9IDQ3IH0sIC8qIERNQV9NTUMyX1RYICovCisJeyAubmFtZSA9ICJyeCIsCS5kbWFfcmVxID0gNDggfSwgLyogRE1BX01NQzJfUlggKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIG9tYXAyNDMwX21tYzJfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2siLCAuY2xrID0gIm1tY2hzZGIyX2ZjayIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX21tYzJfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX21tYzIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbW1jMl9od21vZCA9IHsKKwkubmFtZQkJPSAibW1jMiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfbW1jMl9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tbWMyX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDI0MzBfbW1jMl9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21tYzJfc2RtYV9yZXFzKSwKKwkub3B0X2Nsa3MJPSBvbWFwMjQzMF9tbWMyX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21tYzJfb3B0X2Nsa3MpLAorCS5tYWluX2Nsawk9ICJtbWNoczJfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLnByY21fcmVnX2lkID0gMiwKKwkJCS5tb2R1bGVfYml0ICA9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMiwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjQzMF9TVF9NTUNIUzJfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX21tYzJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tbWMyX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzMF9tbWNfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKwogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9tYXBfaHdtb2QgKm9tYXAyNDMwX2h3bW9kc1tdID0gewogCSZvbWFwMjQzMF9sM19tYWluX2h3bW9kLAogCSZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAogCSZvbWFwMjQzMF9sNF93a3VwX2h3bW9kLAogCSZvbWFwMjQzMF9tcHVfaHdtb2QsCiAJJm9tYXAyNDMwX2l2YV9od21vZCwKKworCSZvbWFwMjQzMF90aW1lcjFfaHdtb2QsCisJJm9tYXAyNDMwX3RpbWVyMl9od21vZCwKKwkmb21hcDI0MzBfdGltZXIzX2h3bW9kLAorCSZvbWFwMjQzMF90aW1lcjRfaHdtb2QsCisJJm9tYXAyNDMwX3RpbWVyNV9od21vZCwKKwkmb21hcDI0MzBfdGltZXI2X2h3bW9kLAorCSZvbWFwMjQzMF90aW1lcjdfaHdtb2QsCisJJm9tYXAyNDMwX3RpbWVyOF9od21vZCwKKwkmb21hcDI0MzBfdGltZXI5X2h3bW9kLAorCSZvbWFwMjQzMF90aW1lcjEwX2h3bW9kLAorCSZvbWFwMjQzMF90aW1lcjExX2h3bW9kLAorCSZvbWFwMjQzMF90aW1lcjEyX2h3bW9kLAorCiAJJm9tYXAyNDMwX3dkX3RpbWVyMl9od21vZCwKIAkmb21hcDI0MzBfdWFydDFfaHdtb2QsCiAJJm9tYXAyNDMwX3VhcnQyX2h3bW9kLAogCSZvbWFwMjQzMF91YXJ0M19od21vZCwKKwkvKiBkc3MgY2xhc3MgKi8KKwkmb21hcDI0MzBfZHNzX2NvcmVfaHdtb2QsCisJJm9tYXAyNDMwX2Rzc19kaXNwY19od21vZCwKKwkmb21hcDI0MzBfZHNzX3JmYmlfaHdtb2QsCisJJm9tYXAyNDMwX2Rzc192ZW5jX2h3bW9kLAorCS8qIGkyYyBjbGFzcyAqLwogCSZvbWFwMjQzMF9pMmMxX2h3bW9kLAogCSZvbWFwMjQzMF9pMmMyX2h3bW9kLAorCSZvbWFwMjQzMF9tbWMxX2h3bW9kLAorCSZvbWFwMjQzMF9tbWMyX2h3bW9kLAogCiAJLyogZ3BpbyBjbGFzcyAqLwogCSZvbWFwMjQzMF9ncGlvMV9od21vZCwKQEAgLTk0MSwxMCArMjcwOCwyOSBAQAogCiAJLyogZG1hX3N5c3RlbSBjbGFzcyovCiAJJm9tYXAyNDMwX2RtYV9zeXN0ZW1faHdtb2QsCisKKwkvKiBtY2JzcCBjbGFzcyAqLworCSZvbWFwMjQzMF9tY2JzcDFfaHdtb2QsCisJJm9tYXAyNDMwX21jYnNwMl9od21vZCwKKwkmb21hcDI0MzBfbWNic3AzX2h3bW9kLAorCSZvbWFwMjQzMF9tY2JzcDRfaHdtb2QsCisJJm9tYXAyNDMwX21jYnNwNV9od21vZCwKKworCS8qIG1haWxib3ggY2xhc3MgKi8KKwkmb21hcDI0MzBfbWFpbGJveF9od21vZCwKKworCS8qIG1jc3BpIGNsYXNzICovCisJJm9tYXAyNDMwX21jc3BpMV9od21vZCwKKwkmb21hcDI0MzBfbWNzcGkyX2h3bW9kLAorCSZvbWFwMjQzMF9tY3NwaTNfaHdtb2QsCisKKwkvKiB1c2JvdGcgY2xhc3MqLworCSZvbWFwMjQzMF91c2Joc290Z19od21vZCwKKwogCU5VTEwsCiB9OwogCiBpbnQgX19pbml0IG9tYXAyNDMwX2h3bW9kX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb21hcF9od21vZF9pbml0KG9tYXAyNDMwX2h3bW9kcyk7CisJcmV0dXJuIG9tYXBfaHdtb2RfcmVnaXN0ZXIob21hcDI0MzBfaHdtb2RzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYwppbmRleCA4ZDgxODEzLi5jODE5YzMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCkBAIC0xOCwxNiArMTgsMjEgQEAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L2wzXzN4eHguaD4KICNpbmNsdWRlIDxwbGF0L2w0XzN4eHguaD4KICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby5oPgotI2luY2x1ZGUgPHBsYXQvc21hcnRyZWZsZXguaD4KKyNpbmNsdWRlIDxwbGF0L21tYy5oPgorI2luY2x1ZGUgPHBsYXQvbWNic3AuaD4KKyNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9kbXRpbWVyLmg+CiAKICNpbmNsdWRlICJvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgiCiAKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAid2RfdGltZXIuaCIKKyNpbmNsdWRlIDxtYWNoL2FtMzV4eC5oPgogCiAvKgogICogT01BUDN4eHggaGFyZHdhcmUgbW9kdWxlIGludGVncmF0aW9uIGRhdGEKQEAgLTQ0LDYgKzQ5LDEyIEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfY29yZV9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sNF9wZXJfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfd2RfdGltZXIyX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNDMwZXMxX2Rzc19jb3JlX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2Rzc19jb3JlX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2Rzc19kaXNwY19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9kc3NfZHNpMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9kc3NfcmZiaV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9kc3NfdmVuY19od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9pMmMxX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2kyYzJfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfaTJjM19od21vZDsKQEAgLTU1LDkgKzY2LDI1IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzZfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfc3IxX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X3NyMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzR4eF9tY3NwaTE7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbWNzcGkyOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X21jc3BpMzsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzR4eF9tY3NwaTQ7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbW1jMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9tbWMyX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21tYzNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2QgYW0zNXh4X3VzYmhzb3RnX2h3bW9kOwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZG1hX3N5c3RlbV9od21vZDsKIAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21jYnNwMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9tY2JzcDJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbWNic3AzX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21jYnNwNF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9tY2JzcDVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbWNic3AyX3NpZGV0b25lX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21jYnNwM19zaWRldG9uZV9od21vZDsKKwogLyogTDMgLT4gTDRfQ09SRSBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDNfbWFpbl9fbDRfY29yZSA9IHsKIAkubWFzdGVyCT0gJm9tYXAzeHh4X2wzX21haW5faHdtb2QsCkBAIC03MiwxMCArOTksMjYgQEAKIAkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCisvKiBMMyB0YXJldCBjb25maWd1cmF0aW9uIGFuZCBlcnJvciBsb2cgcmVnaXN0ZXJzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfbDNfbWFpbl9pcnFzW10gPSB7CisJeyAuaXJxID0gSU5UXzM0WFhfTDNfREJHX0lSUSB9LAorCXsgLmlycSA9IElOVF8zNFhYX0wzX0FQUF9JUlEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X2wzX21haW5fYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydCAgICAgICA9IDB4NjgwMDAwMDAsCisJCS5wYV9lbmQgICAgICAgICA9IDB4NjgwMGZmZmYsCisJCS5mbGFncyAgICAgICAgICA9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKwogLyogTVBVIC0+IEwzIGludGVyZmFjZSAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9tcHVfX2wzX21haW4gPSB7Ci0JLm1hc3RlciA9ICZvbWFwM3h4eF9tcHVfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAzeHh4X2wzX21haW5faHdtb2QsCisJLm1hc3RlciAgID0gJm9tYXAzeHh4X21wdV9od21vZCwKKwkuc2xhdmUgICAgPSAmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKKwkuYWRkciAgICAgPSBvbWFwM3h4eF9sM19tYWluX2FkZHJzLAorCS5hZGRyX2NudCA9IEFSUkFZX1NJWkUob21hcDN4eHhfbDNfbWFpbl9hZGRycyksCiAJLnVzZXIJPSBPQ1BfVVNFUl9NUFUsCiB9OwogCkBAIC04NCw2ICsxMjcsMTkgQEAKIAkmb21hcDN4eHhfbXB1X19sM19tYWluLAogfTsKIAorLyogRFNTIC0+IGwzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2Rzc19fbDMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfZHNzX2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9sM19tYWluX2h3bW9kLAorCS5mdyA9IHsKKwkJLm9tYXAyID0geworCQkJLmwzX3Blcm1fYml0ICA9IE9NQVAzX0wzX0NPUkVfRldfSU5JVF9JRF9EU1MsCisJCQkuZmxhZ3MJPSBPTUFQX0ZJUkVXQUxMX0wzLAorCQl9CisJfSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKwogLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDNfbWFpbl9tYXN0ZXJzW10gPSB7CiAJJm9tYXAzeHh4X2wzX21haW5fX2w0X2NvcmUsCkBAIC05NCw2ICsxNTAsOCBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2wzX21haW5faHdtb2QgPSB7CiAJLm5hbWUJCT0gImwzX21haW4iLAogCS5jbGFzcwkJPSAmbDNfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzICAgICAgID0gb21hcDN4eHhfbDNfbWFpbl9pcnFzLAorCS5tcHVfaXJxc19jbnQgICA9IEFSUkFZX1NJWkUob21hcDN4eHhfbDNfbWFpbl9pcnFzKSwKIAkubWFzdGVycwk9IG9tYXAzeHh4X2wzX21haW5fbWFzdGVycywKIAkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2wzX21haW5fbWFzdGVycyksCiAJLnNsYXZlcwkJPSBvbWFwM3h4eF9sM19tYWluX3NsYXZlcywKQEAgLTEwNyw3ICsxNjUsMjMgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF91YXJ0Ml9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF91YXJ0M19od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF91YXJ0NF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF91c2Joc290Z19od21vZDsKIAorLyogbDNfY29yZSAtPiB1c2Joc290ZyBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfdXNiaHNvdGdfX2wzID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X3VzYmhzb3RnX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKKwkuY2xrCQk9ICJjb3JlX2wzX2ljayIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworLyogbDNfY29yZSAtPiBhbTM1eHhfdXNiaHNvdGcgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGFtMzV4eF91c2Joc290Z19fbDMgPSB7CisJLm1hc3RlcgkJPSAmYW0zNXh4X3VzYmhzb3RnX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKKwkuY2xrCQk9ICJjb3JlX2wzX2ljayIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKIC8qIEw0X0NPUkUgLT4gTDRfV0tVUCBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fbDRfd2t1cCA9IHsKIAkubWFzdGVyCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCkBAIC0xMTUsNiArMTg5LDYzIEBACiAJLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAorLyogTDQgQ09SRSAtPiBNTUMxIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfbW1jMV9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDljMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOWMxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fbW1jMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfbW1jMV9od21vZCwKKwkuY2xrCQk9ICJtbWNoczFfaWNrIiwKKwkuYWRkcgkJPSBvbWFwM3h4eF9tbWMxX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tbWMxX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCisJLmZsYWdzCQk9IE9NQVBfRklSRVdBTExfTDQKK307CisKKy8qIEw0IENPUkUgLT4gTU1DMiBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X21tYzJfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODBiNDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MGI0MWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X2NvcmVfX21tYzIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X21tYzJfaHdtb2QsCisJLmNsawkJPSAibW1jaHMyX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfbW1jMl9hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbW1jMl9hZGRyX3NwYWNlKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorCS5mbGFncwkJPSBPTUFQX0ZJUkVXQUxMX0w0Cit9OworCisvKiBMNCBDT1JFIC0+IE1NQzMgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9tbWMzX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwYWQwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODBhZDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF9jb3JlX19tbWMzID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9tbWMzX2h3bW9kLAorCS5jbGsJCT0gIm1tY2hzM19pY2siLAorCS5hZGRyCQk9IG9tYXAzeHh4X21tYzNfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21tYzNfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKKwkuZmxhZ3MJCT0gT01BUF9GSVJFV0FMTF9MNAorfTsKKwogLyogTDQgQ09SRSAtPiBVQVJUMSBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X3VhcnQxX2FkZHJfc3BhY2VbXSA9IHsKIAl7CkBAIC0zMDEsMjkgKzQzMiw3MCBAQAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKIH07CiAKKy8qCisqIHVzYmhzb3RnIGludGVyZmFjZSBkYXRhCisqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF91c2Joc290Z19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gT01BUDM0WFhfSFNVU0JfT1RHX0JBU0UsCisJCS5wYV9lbmQJCT0gT01BUDM0WFhfSFNVU0JfT1RHX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiB1c2Joc290ZyAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fdXNiaHNvdGcgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3VzYmhzb3RnX2h3bW9kLAorCS5jbGsJCT0gImw0X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfdXNiaHNvdGdfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF91c2Joc290Z19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfdXNiaHNvdGdfbWFzdGVyc1tdID0geworCSZvbWFwM3h4eF91c2Joc290Z19fbDMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF91c2Joc290Z19zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfY29yZV9fdXNiaHNvdGcsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBhbTM1eHhfdXNiaHNvdGdfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IEFNMzVYWF9JUFNTX1VTQk9UR1NTX0JBU0UsCisJCS5wYV9lbmQJCT0gQU0zNVhYX0lQU1NfVVNCT1RHU1NfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHVzYmhzb3RnICAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBhbTM1eHhfbDRfY29yZV9fdXNiaHNvdGcgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJmFtMzV4eF91c2Joc290Z19od21vZCwKKwkuY2xrCQk9ICJsNF9pY2siLAorCS5hZGRyCQk9IGFtMzV4eF91c2Joc290Z19hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKGFtMzV4eF91c2Joc290Z19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqYW0zNXh4X3VzYmhzb3RnX21hc3RlcnNbXSA9IHsKKwkmYW0zNXh4X3VzYmhzb3RnX19sMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKmFtMzV4eF91c2Joc290Z19zbGF2ZXNbXSA9IHsKKwkmYW0zNXh4X2w0X2NvcmVfX3VzYmhzb3RnLAorfTsKIC8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sNF9jb3JlX3NsYXZlc1tdID0gewogCSZvbWFwM3h4eF9sM19tYWluX19sNF9jb3JlLAotCSZvbWFwM19sNF9jb3JlX19zcjEsCi0JJm9tYXAzX2w0X2NvcmVfX3NyMiwKLX07Ci0KLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDRfY29yZV9tYXN0ZXJzW10gPSB7Ci0JJm9tYXAzeHh4X2w0X2NvcmVfX2w0X3drdXAsCi0JJm9tYXAzX2w0X2NvcmVfX3VhcnQxLAotCSZvbWFwM19sNF9jb3JlX191YXJ0MiwKLQkmb21hcDNfbDRfY29yZV9faTJjMSwKLQkmb21hcDNfbDRfY29yZV9faTJjMiwKLQkmb21hcDNfbDRfY29yZV9faTJjMywKIH07CiAKIC8qIEw0IENPUkUgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sNF9jb3JlX2h3bW9kID0gewogCS5uYW1lCQk9ICJsNF9jb3JlIiwKIAkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAotCS5tYXN0ZXJzCT0gb21hcDN4eHhfbDRfY29yZV9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbDRfY29yZV9tYXN0ZXJzKSwKIAkuc2xhdmVzCQk9IG9tYXAzeHh4X2w0X2NvcmVfc2xhdmVzLAogCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF9jb3JlX3NsYXZlcyksCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLApAQCAtMzM1LDE4ICs1MDcsMTAgQEAKIAkmb21hcDN4eHhfbDNfbWFpbl9fbDRfcGVyLAogfTsKIAotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X1BFUiBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X3Blcl9tYXN0ZXJzW10gPSB7Ci0JJm9tYXAzX2w0X3Blcl9fdWFydDMsCi0JJm9tYXAzX2w0X3Blcl9fdWFydDQsCi19OwotCiAvKiBMNCBQRVIgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sNF9wZXJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImw0X3BlciIsCiAJLmNsYXNzCQk9ICZsNF9od21vZF9jbGFzcywKLQkubWFzdGVycwk9IG9tYXAzeHh4X2w0X3Blcl9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbDRfcGVyX21hc3RlcnMpLAogCS5zbGF2ZXMJCT0gb21hcDN4eHhfbDRfcGVyX3NsYXZlcywKIAkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbDRfcGVyX3NsYXZlcyksCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLApAQCAtMzU4LDE2ICs1MjIsMTAgQEAKIAkmb21hcDN4eHhfbDRfY29yZV9fbDRfd2t1cCwKIH07CiAKLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9XS1VQIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDRfd2t1cF9tYXN0ZXJzW10gPSB7Ci19OwotCiAvKiBMNCBXS1VQICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfd2t1cF9od21vZCA9IHsKIAkubmFtZQkJPSAibDRfd2t1cCIsCiAJLmNsYXNzCQk9ICZsNF9od21vZF9jbGFzcywKLQkubWFzdGVycwk9IG9tYXAzeHh4X2w0X3drdXBfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2w0X3drdXBfbWFzdGVycyksCiAJLnNsYXZlcwkJPSBvbWFwM3h4eF9sNF93a3VwX3NsYXZlcywKIAkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbDRfd2t1cF9zbGF2ZXMpLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKQEAgLTQxNyw2ICs1NzUsNjQwIEBACiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCiB9OwogCisvKiB0aW1lciBjbGFzcyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwM3h4eF90aW1lcl8xbXNfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfAorCQkJCVNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkJU1lTQ19IQVNfRU1VRlJFRSB8IFNZU0NfSEFTX0FVVE9JRExFKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwM3h4eF90aW1lcl8xbXNfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAidGltZXIiLAorCS5zeXNjID0gJm9tYXAzeHh4X3RpbWVyXzFtc19zeXNjLAorCS5yZXYgPSBPTUFQX1RJTUVSX0lQX1ZFUlNJT05fMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDN4eHhfdGltZXJfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX0VOQVdBS0VVUCB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAidGltZXIiLAorCS5zeXNjID0gJm9tYXAzeHh4X3RpbWVyX3N5c2MsCisJLnJldiA9ICBPTUFQX1RJTUVSX0lQX1ZFUlNJT05fMSwKK307CisKKy8qIHRpbWVyMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X3RpbWVyMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF90aW1lcjFfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSAzNywgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X3RpbWVyMV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODMxODAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MzE4MDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3drdXAgLT4gdGltZXIxICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3drdXBfX3RpbWVyMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF93a3VwX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfdGltZXIxX2h3bW9kLAorCS5jbGsJCT0gImdwdDFfaWNrIiwKKwkuYWRkcgkJPSBvbWFwM3h4eF90aW1lcjFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF90aW1lcjFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjEgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfdGltZXIxX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF93a3VwX190aW1lcjEsCit9OworCisvKiB0aW1lcjEgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjFfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMSIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfdGltZXIxX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyMV9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDFfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQVDFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBXS1VQX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9HUFQxX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF90aW1lcjFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF90aW1lcjFfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X3RpbWVyXzFtc19od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKK307CisKKy8qIHRpbWVyMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X3RpbWVyMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF90aW1lcjJfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSAzOCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X3RpbWVyMl9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0OTAzMjAwMCwKKwkJLnBhX2VuZAkJPSAweDQ5MDMyMDAwICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiB0aW1lcjIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfcGVyX190aW1lcjIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfdGltZXIyX2h3bW9kLAorCS5jbGsJCT0gImdwdDJfaWNrIiwKKwkuYWRkcgkJPSBvbWFwM3h4eF90aW1lcjJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF90aW1lcjJfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjIgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfdGltZXIyX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9wZXJfX3RpbWVyMiwKK307CisKKy8qIHRpbWVyMiBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X3RpbWVyMl9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIyIiwKKwkubXB1X2lycXMJPSBvbWFwM3h4eF90aW1lcjJfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXIyX21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3B0Ml9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fR1BUMl9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IE9NQVAzNDMwX1BFUl9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfR1BUMl9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfdGltZXIyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXIyX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwM3h4eF90aW1lcl8xbXNfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfdGltZXIzX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gMzksIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF90aW1lcjNfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwMzQwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAzNDAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXIzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fdGltZXIzID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3RpbWVyM19od21vZCwKKwkuY2xrCQk9ICJncHQzX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfdGltZXIzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXIzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIzIHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X3RpbWVyM19zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfcGVyX190aW1lcjMsCit9OworCisvKiB0aW1lcjMgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjNfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMyIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfdGltZXIzX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyM19tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDNfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X3RpbWVyM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyM19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjRfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfdGltZXI0X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF90aW1lcjRfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwMzYwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAzNjAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXI0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fdGltZXI0ID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3RpbWVyNF9od21vZCwKKwkuY2xrCQk9ICJncHQ0X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfdGltZXI0X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXI0X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI0IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X3RpbWVyNF9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfcGVyX190aW1lcjQsCit9OworCisvKiB0aW1lcjQgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjRfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyNCIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfdGltZXI0X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyNF9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDRfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDRfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X3RpbWVyNF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyNF9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfdGltZXI1X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDEsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF90aW1lcjVfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwMzgwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAzODAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXI1ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fdGltZXI1ID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3RpbWVyNV9od21vZCwKKwkuY2xrCQk9ICJncHQ1X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfdGltZXI1X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXI1X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI1IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X3RpbWVyNV9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfcGVyX190aW1lcjUsCit9OworCisvKiB0aW1lcjUgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjVfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyNSIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfdGltZXI1X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyNV9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDVfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDVfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X3RpbWVyNV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyNV9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjYgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjZfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfdGltZXI2X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDIsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF90aW1lcjZfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwM0EwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAzQTAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXI2ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fdGltZXI2ID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3RpbWVyNl9od21vZCwKKwkuY2xrCQk9ICJncHQ2X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfdGltZXI2X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXI2X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI2IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X3RpbWVyNl9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfcGVyX190aW1lcjYsCit9OworCisvKiB0aW1lcjYgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjZfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyNiIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfdGltZXI2X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyNl9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDZfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDZfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X3RpbWVyNl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyNl9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjcgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjdfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfdGltZXI3X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDMsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF90aW1lcjdfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwM0MwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAzQzAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXI3ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fdGltZXI3ID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3RpbWVyN19od21vZCwKKwkuY2xrCQk9ICJncHQ3X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfdGltZXI3X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXI3X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI3IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X3RpbWVyN19zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfcGVyX190aW1lcjcsCit9OworCisvKiB0aW1lcjcgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjdfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyNyIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfdGltZXI3X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyN19tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDdfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDdfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X3RpbWVyN19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyN19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjggKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjhfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfdGltZXI4X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF90aW1lcjhfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwM0UwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAzRTAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXI4ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fdGltZXI4ID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3RpbWVyOF9od21vZCwKKwkuY2xrCQk9ICJncHQ4X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfdGltZXI4X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXI4X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI4IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X3RpbWVyOF9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfcGVyX190aW1lcjgsCit9OworCisvKiB0aW1lcjggaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjhfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyOCIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfdGltZXI4X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyOF9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDhfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDhfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X3RpbWVyOF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyOF9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjlfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfdGltZXI5X21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDUsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF90aW1lcjlfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwNDAwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTA0MDAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXI5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fdGltZXI5ID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3RpbWVyOV9od21vZCwKKwkuY2xrCQk9ICJncHQ5X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfdGltZXI5X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXI5X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI5IHNsYXZlIHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X3RpbWVyOV9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfcGVyX190aW1lcjksCit9OworCisvKiB0aW1lcjkgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjlfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyOSIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfdGltZXI5X21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyOV9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDlfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDlfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X3RpbWVyOV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyOV9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjEwICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfdGltZXIxMF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF90aW1lcjEwX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDYsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF90aW1lcjEwX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDg2MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwODYwMDAgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiB0aW1lcjEwICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X2NvcmVfX3RpbWVyMTAgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X3RpbWVyMTBfaHdtb2QsCisJLmNsawkJPSAiZ3B0MTBfaWNrIiwKKwkuYWRkcgkJPSBvbWFwM3h4eF90aW1lcjEwX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXIxMF9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyMTAgc2xhdmUgcG9ydCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfdGltZXIxMF9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfY29yZV9fdGltZXIxMCwKK307CisKKy8qIHRpbWVyMTAgaHdtb2QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjEwX2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjEwIiwKKwkubXB1X2lycXMJPSBvbWFwM3h4eF90aW1lcjEwX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyMTBfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJncHQxMF9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9HUFQxMF9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfdGltZXIxMF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3RpbWVyMTBfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X3RpbWVyXzFtc19od21vZF9jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKK307CisKKy8qIHRpbWVyMTEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjExX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzeHh4X3RpbWVyMTFfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0NywgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X3RpbWVyMTFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwODgwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA4ODAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyMTEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fdGltZXIxMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfdGltZXIxMV9od21vZCwKKwkuY2xrCQk9ICJncHQxMV9pY2siLAorCS5hZGRyCQk9IG9tYXAzeHh4X3RpbWVyMTFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF90aW1lcjExX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIxMSBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF90aW1lcjExX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX190aW1lcjExLAorfTsKKworLyogdGltZXIxMSBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X3RpbWVyMTFfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMTEiLAorCS5tcHVfaXJxcwk9IG9tYXAzeHh4X3RpbWVyMTFfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXIxMV9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDExX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9HUFQxMV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDExX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF90aW1lcjExX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXIxMV9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCisvKiB0aW1lcjEyKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF90aW1lcjEyX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzeHh4X3RpbWVyMTJfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA5NSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X3RpbWVyMTJfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgzMDQwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODMwNDAwMCArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IHRpbWVyMTIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fdGltZXIxMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfdGltZXIxMl9od21vZCwKKwkuY2xrCQk9ICJncHQxMl9pY2siLAorCS5hZGRyCQk9IG9tYXAzeHh4X3RpbWVyMTJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF90aW1lcjEyX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIxMiBzbGF2ZSBwb3J0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF90aW1lcjEyX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX190aW1lcjEyLAorfTsKKworLyogdGltZXIxMiBod21vZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X3RpbWVyMTJfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMTIiLAorCS5tcHVfaXJxcwk9IG9tYXAzeHh4X3RpbWVyMTJfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXIxMl9tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwdDEyX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9HUFQxMl9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0dQVDEyX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF90aW1lcjEyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfdGltZXIxMl9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCiAvKiBsNF93a3VwIC0+IHdkX3RpbWVyMiAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfd2RfdGltZXIyX2FkZHJzW10gPSB7CiAJewpAQCAtNDQ3LDcgKzEyMzksOCBAQAogCS5zeXNzX29mZnMJPSAweDAwMTQsCiAJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfU0lETEVNT0RFIHwgU1lTQ19IQVNfRU1VRlJFRSB8CiAJCQkgICBTWVNDX0hBU19FTkFXQUtFVVAgfCBTWVNDX0hBU19TT0ZUUkVTRVQgfAotCQkJICAgU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNDX0hBU19DTE9DS0FDVElWSVRZKSwKKwkJCSAgIFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8CisJCQkgICBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAogCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKIAkuc3lzY19maWVsZHMgICAgPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAogfTsKQEAgLTQ1OSw3ICsxMjUyLDcgQEAKIAkuc3lzc19vZmZzCT0gMHgxMCwKIAkuc3lzY19mbGFncwk9IChTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKIAkJCSAgIFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8Ci0JCQkgICBTWVNDX0hBU19BVVRPSURMRSksCisJCQkgICBTWVNDX0hBU19BVVRPSURMRSB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCiAJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAogCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCiB9OwpAQCAtNDkxLDYgKzEyODQsMTEgQEAKIAkuc2xhdmVzCQk9IG9tYXAzeHh4X3dkX3RpbWVyMl9zbGF2ZXMsCiAJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3dkX3RpbWVyMl9zbGF2ZXMpLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkvKgorCSAqIFhYWDogVXNlIHNvZnR3YXJlIHN1cGVydmlzZWQgbW9kZSwgSFcgc3VwZXJ2aXNlZCBzbWFydGlkbGUgc2VlbXMgdG8KKwkgKiBibG9jayBDT1JFIHBvd2VyIGRvbWFpbiBpZGxlIHRyYW5zaXRpb25zLiBNYXliZSBhIEhXIGJ1ZyBpbiB3ZHQyPworCSAqLworCS5mbGFncwkJPSBIV01PRF9TV1NVUF9TSURMRSwKIH07CiAKIC8qIFVBUlQgY29tbW9uICovCkBAIC01MDEsNyArMTI5OSw3IEBACiAJLnN5c3Nfb2Zmcwk9IDB4NTgsCiAJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfU0lETEVNT0RFIHwKIAkJCSAgIFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8Ci0JCQkgICBTWVNDX0hBU19BVVRPSURMRSksCisJCQkgICBTWVNDX0hBU19BVVRPSURMRSB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCiAJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAogCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCiB9OwpAQCAtNjY0LDYgKzE0NjIsNDExIEBACiAJLnN5c2MgPSAmaTJjX3N5c2MsCiB9OwogCisvKgorICogJ2RzcycgY2xhc3MKKyAqIGRpc3BsYXkgc3ViLXN5c3RlbQorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDN4eHhfZHNzX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwM3h4eF9kc3NfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAiZHNzIiwKKwkuc3lzYyA9ICZvbWFwM3h4eF9kc3Nfc3lzYywKK307CisKKy8qIGRzcyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzeHh4X2Rzc19pcnFzW10gPSB7CisJeyAuaXJxID0gMjUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwM3h4eF9kc3Nfc2RtYV9jaHNbXSA9IHsKKwl7IC5uYW1lID0gImRpc3BjIiwgLmRtYV9yZXEgPSA1IH0sCisJeyAubmFtZSA9ICJkc2kxIiwgLmRtYV9yZXEgPSA3NCB9LAorfTsKKworLyogZHNzICovCisvKiBkc3MgbWFzdGVyIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9kc3NfbWFzdGVyc1tdID0geworCSZvbWFwM3h4eF9kc3NfX2wzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfZHNzX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDUwMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNTAzRkYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBkc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDM0MzBlczFfbDRfY29yZV9fZHNzID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMzQzMGVzMV9kc3NfY29yZV9od21vZCwKKwkuY2xrCQk9ICJkc3NfaWNrIiwKKwkuYWRkcgkJPSBvbWFwM3h4eF9kc3NfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9kc3NfYWRkcnMpLAorCS5mdyA9IHsKKwkJLm9tYXAyID0geworCQkJLmw0X2Z3X3JlZ2lvbiAgPSBPTUFQM0VTMV9MNF9DT1JFX0ZXX0RTU19DT1JFX1JFR0lPTiwKKwkJCS5sNF9wcm90X2dyb3VwID0gT01BUDNfTDRfQ09SRV9GV19EU1NfUFJPVF9HUk9VUCwKKwkJCS5mbGFncwk9IE9NQVBfRklSRVdBTExfTDQsCisJCX0KKwl9LAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X2NvcmVfX2RzcyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZHNzX2NvcmVfaHdtb2QsCisJLmNsawkJPSAiZHNzX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfZHNzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZHNzX2FkZHJzKSwKKwkuZncgPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5sNF9md19yZWdpb24gID0gT01BUDNfTDRfQ09SRV9GV19EU1NfQ09SRV9SRUdJT04sCisJCQkubDRfcHJvdF9ncm91cCA9IE9NQVAzX0w0X0NPUkVfRldfRFNTX1BST1RfR1JPVVAsCisJCQkuZmxhZ3MJPSBPTUFQX0ZJUkVXQUxMX0w0LAorCQl9CisJfSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZHNzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMzQzMGVzMV9kc3Nfc2xhdmVzW10gPSB7CisJJm9tYXAzNDMwZXMxX2w0X2NvcmVfX2RzcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2Rzc19zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfY29yZV9fZHNzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZHNzX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJ0dl9jbGsiLCAuY2xrID0gImRzc190dl9mY2siIH0sCisJeyAucm9sZSA9ICJkc3NjbGsiLCAuY2xrID0gImRzc185Nm1fZmNrIiB9LAorCXsgLnJvbGUgPSAic3lzX2NsayIsIC5jbGsgPSAiZHNzMl9hbHdvbl9mY2siIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0MzBlczFfZHNzX2NvcmVfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc19jb3JlIiwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X2Rzc19od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAiZHNzMV9hbHdvbl9mY2siLCAvKiBpbnN0ZWFkIG9mIGRzc19mY2sgKi8KKwkubXB1X2lycXMJPSBvbWFwM3h4eF9kc3NfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9kc3NfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAzeHh4X2Rzc19zZG1hX2NocywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZHNzX3NkbWFfY2hzKSwKKworCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fRFNTMV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IE9NQVAzNDMwX0RTU19NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X3N0ZGJ5X2JpdCA9IE9NQVAzNDMwRVMxX1NUX0RTU19TSElGVCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGRzc19vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250ID0gQVJSQVlfU0laRShkc3Nfb3B0X2Nsa3MpLAorCS5zbGF2ZXMJCT0gb21hcDM0MzBlczFfZHNzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0MzBlczFfZHNzX3NsYXZlcyksCisJLm1hc3RlcnMJPSBvbWFwM3h4eF9kc3NfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2Rzc19tYXN0ZXJzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMSksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9kc3NfY29yZV9od21vZCA9IHsKKwkubmFtZQkJPSAiZHNzX2NvcmUiLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfZHNzX2h3bW9kX2NsYXNzLAorCS5tYWluX2Nsawk9ICJkc3MxX2Fsd29uX2ZjayIsIC8qIGluc3RlYWQgb2YgZHNzX2ZjayAqLworCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2Rzc19pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2Rzc19pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDN4eHhfZHNzX3NkbWFfY2hzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9kc3Nfc2RtYV9jaHMpLAorCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gT01BUDM0MzBfRFNTX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMEVTMl9TVF9EU1NfSURMRV9TSElGVCwKKwkJCS5pZGxlc3Rfc3RkYnlfYml0ID0gT01BUDM0MzBFUzJfU1RfRFNTX1NUREJZX1NISUZULAorCQl9LAorCX0sCisJLm9wdF9jbGtzCT0gZHNzX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQgPSBBUlJBWV9TSVpFKGRzc19vcHRfY2xrcyksCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9kc3Nfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9kc3Nfc2xhdmVzKSwKKwkubWFzdGVycwk9IG9tYXAzeHh4X2Rzc19tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZHNzX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyIHwKKwkJCQlDSElQX0lTX09NQVAzNjMwRVMxIHwgQ0hJUF9HRV9PTUFQMzYzMEVTMV8xKSwKK307CisKKy8qCisgKiAnZGlzcGMnIGNsYXNzCisgKiBkaXNwbGF5IGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAzeHh4X2Rpc3BjX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwKKwkJCSAgIFNZU0NfSEFTX01JRExFTU9ERSB8IFNZU0NfSEFTX0VOQVdBS0VVUCB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgTVNUQU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8IE1TVEFOREJZX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAzeHh4X2Rpc3BjX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gImRpc3BjIiwKKwkuc3lzYyA9ICZvbWFwM3h4eF9kaXNwY19zeXNjLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfZHNzX2Rpc3BjX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDUwNDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNTA3RkYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBkc3NfZGlzcGMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fZHNzX2Rpc3BjID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9kc3NfZGlzcGNfaHdtb2QsCisJLmNsawkJPSAiZHNzX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfZHNzX2Rpc3BjX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZHNzX2Rpc3BjX2FkZHJzKSwKKwkuZncgPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5sNF9md19yZWdpb24gID0gT01BUDNfTDRfQ09SRV9GV19EU1NfRElTUENfUkVHSU9OLAorCQkJLmw0X3Byb3RfZ3JvdXAgPSBPTUFQM19MNF9DT1JFX0ZXX0RTU19QUk9UX0dST1VQLAorCQkJLmZsYWdzCT0gT01BUF9GSVJFV0FMTF9MNCwKKwkJfQorCX0sCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRzc19kaXNwYyBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfZHNzX2Rpc3BjX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX19kc3NfZGlzcGMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZHNzX2Rpc3BjX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfZGlzcGMiLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfZGlzcGNfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gImRzczFfYWx3b25fZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0RTUzFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9EU1NfTU9ELAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9kc3NfZGlzcGNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9kc3NfZGlzcGNfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMSB8CisJCQkJQ0hJUF9HRV9PTUFQMzQzMEVTMiB8IENISVBfSVNfT01BUDM2MzBFUzEgfAorCQkJCUNISVBfR0VfT01BUDM2MzBFUzFfMSksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKK307CisKKy8qCisgKiAnZHNpJyBjbGFzcworICogZGlzcGxheSBzZXJpYWwgaW50ZXJmYWNlIGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDN4eHhfZHNpX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gImRzaSIsCit9OworCisvKiBkc3NfZHNpMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfZHNzX2RzaTFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNEZDMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA0RkZGRiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jb3JlIC0+IGRzc19kc2kxICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X2NvcmVfX2Rzc19kc2kxID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9kc3NfZHNpMV9od21vZCwKKwkuYWRkcgkJPSBvbWFwM3h4eF9kc3NfZHNpMV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2Rzc19kc2kxX2FkZHJzKSwKKwkuZncgPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5sNF9md19yZWdpb24gID0gT01BUDNfTDRfQ09SRV9GV19EU1NfRFNJX1JFR0lPTiwKKwkJCS5sNF9wcm90X2dyb3VwID0gT01BUDNfTDRfQ09SRV9GV19EU1NfUFJPVF9HUk9VUCwKKwkJCS5mbGFncwk9IE9NQVBfRklSRVdBTExfTDQsCisJCX0KKwl9LAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBkc3NfZHNpMSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfZHNzX2RzaTFfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2w0X2NvcmVfX2Rzc19kc2kxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2Rzc19kc2kxX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfZHNpMSIsCisJLmNsYXNzCQk9ICZvbWFwM3h4eF9kc2lfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gImRzczFfYWx3b25fZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0RTUzFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9EU1NfTU9ELAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9kc3NfZHNpMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2Rzc19kc2kxX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzEgfAorCQkJCUNISVBfR0VfT01BUDM0MzBFUzIgfCBDSElQX0lTX09NQVAzNjMwRVMxIHwKKwkJCQlDSElQX0dFX09NQVAzNjMwRVMxXzEpLAorCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCit9OworCisvKgorICogJ3JmYmknIGNsYXNzCisgKiByZW1vdGUgZnJhbWUgYnVmZmVyIGludGVyZmFjZQorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDN4eHhfcmZiaV9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfU0lETEVNT0RFIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKKwkJCSAgIFNZU0NfSEFTX0FVVE9JRExFKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwM3h4eF9yZmJpX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gInJmYmkiLAorCS5zeXNjID0gJm9tYXAzeHh4X3JmYmlfc3lzYywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X2Rzc19yZmJpX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDUwODAwLAorCQkucGFfZW5kCQk9IDB4NDgwNTBCRkYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBkc3NfcmZiaSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF9jb3JlX19kc3NfcmZiaSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZHNzX3JmYmlfaHdtb2QsCisJLmNsawkJPSAiZHNzX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfZHNzX3JmYmlfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9kc3NfcmZiaV9hZGRycyksCisJLmZ3ID0geworCQkub21hcDIgPSB7CisJCQkubDRfZndfcmVnaW9uICA9IE9NQVAzX0w0X0NPUkVfRldfRFNTX1JGQklfUkVHSU9OLAorCQkJLmw0X3Byb3RfZ3JvdXAgPSBPTUFQM19MNF9DT1JFX0ZXX0RTU19QUk9UX0dST1VQICwKKwkJCS5mbGFncwk9IE9NQVBfRklSRVdBTExfTDQsCisJCX0KKwl9LAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBkc3NfcmZiaSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfZHNzX3JmYmlfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2w0X2NvcmVfX2Rzc19yZmJpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2Rzc19yZmJpX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfcmZiaSIsCisJLmNsYXNzCQk9ICZvbWFwM3h4eF9yZmJpX2h3bW9kX2NsYXNzLAorCS5tYWluX2Nsawk9ICJkc3MxX2Fsd29uX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gT01BUDM0MzBfRFNTX01PRCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfZHNzX3JmYmlfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9kc3NfcmZiaV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMxIHwKKwkJCQlDSElQX0dFX09NQVAzNDMwRVMyIHwgQ0hJUF9JU19PTUFQMzYzMEVTMSB8CisJCQkJQ0hJUF9HRV9PTUFQMzYzMEVTMV8xKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAorfTsKKworLyoKKyAqICd2ZW5jJyBjbGFzcworICogdmlkZW8gZW5jb2RlcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwM3h4eF92ZW5jX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gInZlbmMiLAorfTsKKworLyogZHNzX3ZlbmMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X2Rzc192ZW5jX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDUwQzAwLAorCQkucGFfZW5kCQk9IDB4NDgwNTBGRkYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBkc3NfdmVuYyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF9jb3JlX19kc3NfdmVuYyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZHNzX3ZlbmNfaHdtb2QsCisJLmNsawkJPSAiZHNzX3R2X2ZjayIsCisJLmFkZHIJCT0gb21hcDN4eHhfZHNzX3ZlbmNfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9kc3NfdmVuY19hZGRycyksCisJLmZ3ID0geworCQkub21hcDIgPSB7CisJCQkubDRfZndfcmVnaW9uICA9IE9NQVAzX0w0X0NPUkVfRldfRFNTX1ZFTkNfUkVHSU9OLAorCQkJLmw0X3Byb3RfZ3JvdXAgPSBPTUFQM19MNF9DT1JFX0ZXX0RTU19QUk9UX0dST1VQLAorCQkJLmZsYWdzCT0gT01BUF9GSVJFV0FMTF9MNCwKKwkJfQorCX0sCisJLmZsYWdzCQk9IE9DUElGX1NXU1VQX0lETEUsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRzc192ZW5jIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9kc3NfdmVuY19zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfY29yZV9fZHNzX3ZlbmMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZHNzX3ZlbmNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc192ZW5jIiwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X3ZlbmNfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gImRzczFfYWx3b25fZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0RTUzFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9EU1NfTU9ELAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9kc3NfdmVuY19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2Rzc192ZW5jX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzEgfAorCQkJCUNISVBfR0VfT01BUDM0MzBFUzIgfCBDSElQX0lTX09NQVAzNjMwRVMxIHwKKwkJCQlDSElQX0dFX09NQVAzNjMwRVMxXzEpLAorCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCit9OworCiAvKiBJMkMxICovCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pMmNfZGV2X2F0dHIgaTJjMV9kZXZfYXR0ciA9IHsKQEAgLTkwMiw3ICsyMTA1LDggQEAKIAkuc3lzY19vZmZzCT0gMHgwMDEwLAogCS5zeXNzX29mZnMJPSAweDAwMTQsCiAJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKLQkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFKSwKKwkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFIHwKKwkJCSAgIFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCiAJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAogCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCiB9OwpAQCAtMTE1Niw3ICsyMzYwLDggQEAKIAkuc3lzc19vZmZzCT0gMHgwMDI4LAogCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CiAJCQkgICBTWVNDX0hBU19NSURMRU1PREUgfCBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwKLQkJCSAgIFNZU0NfSEFTX0VNVUZSRUUgfCBTWVNDX0hBU19BVVRPSURMRSksCisJCQkgICBTWVNDX0hBU19FTVVGUkVFIHwgU1lTQ19IQVNfQVVUT0lETEUgfAorCQkJICAgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKIAkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCB8CiAJCQkgICBNU1RBTkRCWV9GT1JDRSB8IE1TVEFOREJZX05PIHwgTVNUQU5EQllfU01BUlQpLAogCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCkBAIC0xMjI3LDYgKzI0MzIsNDM3IEBACiAJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKKy8qCisgKiAnbWNic3AnIGNsYXNzCisgKiBtdWx0aSBjaGFubmVsIGJ1ZmZlcmVkIHNlcmlhbCBwb3J0IGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAzeHh4X21jYnNwX3N5c2MgPSB7CisJLnN5c2Nfb2Zmcwk9IDB4MDA4YywKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwgU1lTQ19IQVNfRU5BV0FLRVVQIHwKKwkJCSAgIFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCisJLmNsb2NrYWN0CT0gMHgyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAzeHh4X21jYnNwX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gIm1jYnNwIiwKKwkuc3lzYyA9ICZvbWFwM3h4eF9tY2JzcF9zeXNjLAorCS5yZXYgID0gTUNCU1BfQ09ORklHX1RZUEUzLAorfTsKKworLyogbWNic3AxICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfbWNic3AxX2lycXNbXSA9IHsKKwl7IC5uYW1lID0gImlycSIsIC5pcnEgPSAxNiB9LAorCXsgLm5hbWUgPSAidHgiLCAuaXJxID0gNTkgfSwKKwl7IC5uYW1lID0gInJ4IiwgLmlycSA9IDYwIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDN4eHhfbWNic3AxX3NkbWFfY2hzW10gPSB7CisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gMzIgfSwKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSAzMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfbWNic3AxX2FkZHJzW10gPSB7CisJeworCQkubmFtZQkJPSAibXB1IiwKKwkJLnBhX3N0YXJ0CT0gMHg0ODA3NDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDc0MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NvcmUgLT4gbWNic3AxICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X2NvcmVfX21jYnNwMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfbWNic3AxX2h3bW9kLAorCS5jbGsJCT0gIm1jYnNwMV9pY2siLAorCS5hZGRyCQk9IG9tYXAzeHh4X21jYnNwMV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21jYnNwMV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIG1jYnNwMSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbWNic3AxX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX19tY2JzcDEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbWNic3AxX2h3bW9kID0geworCS5uYW1lCQk9ICJtY2JzcDEiLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfbWNic3BfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfbWNic3AxX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AxX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwM3h4eF9tY2JzcDFfc2RtYV9jaHMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21jYnNwMV9zZG1hX2NocyksCisJLm1haW5fY2xrCT0gIm1jYnNwMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfTUNCU1AxX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9tY2JzcDFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tY2JzcDFfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisvKiBtY2JzcDIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9tY2JzcDJfaXJxc1tdID0geworCXsgLm5hbWUgPSAiaXJxIiwgLmlycSA9IDE3IH0sCisJeyAubmFtZSA9ICJ0eCIsIC5pcnEgPSA2MiB9LAorCXsgLm5hbWUgPSAicngiLCAuaXJxID0gNjMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwM3h4eF9tY2JzcDJfc2RtYV9jaHNbXSA9IHsKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAzNCB9LAorCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDMzIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9tY2JzcDJfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtcHUiLAorCQkucGFfc3RhcnQJPSAweDQ5MDIyMDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMjIwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IG1jYnNwMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF9wZXJfX21jYnNwMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9tY2JzcDJfaHdtb2QsCisJLmNsawkJPSAibWNic3AyX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfbWNic3AyX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AyX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3AyIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9tY2JzcDJfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2w0X3Blcl9fbWNic3AyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX2Rldl9hdHRyIG9tYXAzNHh4X21jYnNwMl9kZXZfYXR0ciA9IHsKKwkuc2lkZXRvbmUJPSAibWNic3AyX3NpZGV0b25lIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9tY2JzcDJfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jYnNwMiIsCisJLmNsYXNzCQk9ICZvbWFwM3h4eF9tY2JzcF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwM3h4eF9tY2JzcDJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tY2JzcDJfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAzeHh4X21jYnNwMl9zZG1hX2NocywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AyX3NkbWFfY2hzKSwKKwkubWFpbl9jbGsJPSAibWNic3AyX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX01DQlNQMl9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfbWNic3AyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AyX3NsYXZlcyksCisJLmRldl9hdHRyCT0gJm9tYXAzNHh4X21jYnNwMl9kZXZfYXR0ciwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisvKiBtY2JzcDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9tY2JzcDNfaXJxc1tdID0geworCXsgLm5hbWUgPSAiaXJxIiwgLmlycSA9IDIyIH0sCisJeyAubmFtZSA9ICJ0eCIsIC5pcnEgPSA4OSB9LAorCXsgLm5hbWUgPSAicngiLCAuaXJxID0gOTAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwM3h4eF9tY2JzcDNfc2RtYV9jaHNbXSA9IHsKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAxOCB9LAorCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDE3IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9tY2JzcDNfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtcHUiLAorCQkucGFfc3RhcnQJPSAweDQ5MDI0MDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMjQwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IG1jYnNwMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF9wZXJfX21jYnNwMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9tY2JzcDNfaHdtb2QsCisJLmNsawkJPSAibWNic3AzX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfbWNic3AzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3AzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9tY2JzcDNfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2w0X3Blcl9fbWNic3AzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX2Rldl9hdHRyIG9tYXAzNHh4X21jYnNwM19kZXZfYXR0ciA9IHsKKwkuc2lkZXRvbmUgICAgICAgPSAibWNic3AzX3NpZGV0b25lIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9tY2JzcDNfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jYnNwMyIsCisJLmNsYXNzCQk9ICZvbWFwM3h4eF9tY2JzcF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwM3h4eF9tY2JzcDNfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tY2JzcDNfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAzeHh4X21jYnNwM19zZG1hX2NocywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AzX3NkbWFfY2hzKSwKKwkubWFpbl9jbGsJPSAibWNic3AzX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX01DQlNQM19TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfbWNic3AzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AzX3NsYXZlcyksCisJLmRldl9hdHRyCT0gJm9tYXAzNHh4X21jYnNwM19kZXZfYXR0ciwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisvKiBtY2JzcDQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9tY2JzcDRfaXJxc1tdID0geworCXsgLm5hbWUgPSAiaXJxIiwgLmlycSA9IDIzIH0sCisJeyAubmFtZSA9ICJ0eCIsIC5pcnEgPSA1NCB9LAorCXsgLm5hbWUgPSAicngiLCAuaXJxID0gNTUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwM3h4eF9tY2JzcDRfc2RtYV9jaHNbXSA9IHsKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAyMCB9LAorCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDE5IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9tY2JzcDRfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtcHUiLAorCQkucGFfc3RhcnQJPSAweDQ5MDI2MDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMjYwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IG1jYnNwNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF9wZXJfX21jYnNwNCA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9tY2JzcDRfaHdtb2QsCisJLmNsawkJPSAibWNic3A0X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfbWNic3A0X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3A0X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3A0IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9tY2JzcDRfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2w0X3Blcl9fbWNic3A0LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21jYnNwNF9od21vZCA9IHsKKwkubmFtZQkJPSAibWNic3A0IiwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X21jYnNwX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXAzeHh4X21jYnNwNF9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21jYnNwNF9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDN4eHhfbWNic3A0X3NkbWFfY2hzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tY2JzcDRfc2RtYV9jaHMpLAorCS5tYWluX2Nsawk9ICJtY2JzcDRfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX01DQlNQNF9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IE9NQVAzNDMwX1BFUl9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfTUNCU1A0X1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9tY2JzcDRfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tY2JzcDRfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisvKiBtY2JzcDUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9tY2JzcDVfaXJxc1tdID0geworCXsgLm5hbWUgPSAiaXJxIiwgLmlycSA9IDI3IH0sCisJeyAubmFtZSA9ICJ0eCIsIC5pcnEgPSA4MSB9LAorCXsgLm5hbWUgPSAicngiLCAuaXJxID0gODIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwM3h4eF9tY2JzcDVfc2RtYV9jaHNbXSA9IHsKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAyMiB9LAorCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDIxIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9tY2JzcDVfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtcHUiLAorCQkucGFfc3RhcnQJPSAweDQ4MDk2MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOTYwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBtY2JzcDUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fbWNic3A1ID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9tY2JzcDVfaHdtb2QsCisJLmNsawkJPSAibWNic3A1X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfbWNic3A1X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3A1X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3A1IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9tY2JzcDVfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2w0X2NvcmVfX21jYnNwNSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9tY2JzcDVfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jYnNwNSIsCisJLmNsYXNzCQk9ICZvbWFwM3h4eF9tY2JzcF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwM3h4eF9tY2JzcDVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tY2JzcDVfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAzeHh4X21jYnNwNV9zZG1hX2NocywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3A1X3NkbWFfY2hzKSwKKwkubWFpbl9jbGsJPSAibWNic3A1X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NQ0JTUDVfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X21jYnNwNV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21jYnNwNV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisvKiAnbWNic3Agc2lkZXRvbmUnIGNsYXNzICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDN4eHhfbWNic3Bfc2lkZXRvbmVfc3lzYyA9IHsKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNjX2ZsYWdzCT0gU1lTQ19IQVNfQVVUT0lETEUsCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwM3h4eF9tY2JzcF9zaWRldG9uZV9od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJtY2JzcF9zaWRldG9uZSIsCisJLnN5c2MgPSAmb21hcDN4eHhfbWNic3Bfc2lkZXRvbmVfc3lzYywKK307CisKKy8qIG1jYnNwMl9zaWRldG9uZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzeHh4X21jYnNwMl9zaWRldG9uZV9pcnFzW10gPSB7CisJeyAubmFtZSA9ICJpcnEiLCAuaXJxID0gNCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfbWNic3AyX3NpZGV0b25lX2FkZHJzW10gPSB7CisJeworCQkubmFtZQkJPSAic2lkZXRvbmUiLAorCQkucGFfc3RhcnQJPSAweDQ5MDI4MDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMjgwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IG1jYnNwMl9zaWRldG9uZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF9wZXJfX21jYnNwMl9zaWRldG9uZSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9tY2JzcDJfc2lkZXRvbmVfaHdtb2QsCisJLmNsawkJPSAibWNic3AyX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfbWNic3AyX3NpZGV0b25lX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AyX3NpZGV0b25lX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCit9OworCisvKiBtY2JzcDJfc2lkZXRvbmUgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X21jYnNwMl9zaWRldG9uZV9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfcGVyX19tY2JzcDJfc2lkZXRvbmUsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbWNic3AyX3NpZGV0b25lX2h3bW9kID0geworCS5uYW1lCQk9ICJtY2JzcDJfc2lkZXRvbmUiLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfbWNic3Bfc2lkZXRvbmVfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfbWNic3AyX3NpZGV0b25lX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AyX3NpZGV0b25lX2lycXMpLAorCS5tYWluX2Nsawk9ICJtY2JzcDJfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkgLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBPTUFQMzQzMF9QRVJfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX01DQlNQMl9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfbWNic3AyX3NpZGV0b25lX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWNic3AyX3NpZGV0b25lX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogbWNic3AzX3NpZGV0b25lICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfbWNic3AzX3NpZGV0b25lX2lycXNbXSA9IHsKKwl7IC5uYW1lID0gImlycSIsIC5pcnEgPSA1IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9tY2JzcDNfc2lkZXRvbmVfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJzaWRldG9uZSIsCisJCS5wYV9zdGFydAk9IDB4NDkwMkEwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAyQTBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gbWNic3AzX3NpZGV0b25lICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fbWNic3AzX3NpZGV0b25lID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X21jYnNwM19zaWRldG9uZV9od21vZCwKKwkuY2xrCQk9ICJtY2JzcDNfaWNrIiwKKwkuYWRkcgkJPSBvbWFwM3h4eF9tY2JzcDNfc2lkZXRvbmVfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tY2JzcDNfc2lkZXRvbmVfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKK307CisKKy8qIG1jYnNwM19zaWRldG9uZSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbWNic3AzX3NpZGV0b25lX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9wZXJfX21jYnNwM19zaWRldG9uZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9tY2JzcDNfc2lkZXRvbmVfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jYnNwM19zaWRldG9uZSIsCisJLmNsYXNzCQk9ICZvbWFwM3h4eF9tY2JzcF9zaWRldG9uZV9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwM3h4eF9tY2JzcDNfc2lkZXRvbmVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tY2JzcDNfc2lkZXRvbmVfaXJxcyksCisJLm1haW5fY2xrCT0gIm1jYnNwM19mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fTUNCU1AzX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gT01BUDM0MzBfUEVSX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NQ0JTUDNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X21jYnNwM19zaWRldG9uZV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21jYnNwM19zaWRldG9uZV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKwogLyogU1IgY29tbW9uICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfc3lzY19maWVsZHMgb21hcDM0eHhfc3Jfc3lzY19maWVsZHMgPSB7CiAJLmNsa2FjdF9zaGlmdAk9IDIwLApAQCAtMTM1NiwxOCArMjk5Miw2MTcgQEAKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzYzMEVTMSksCiB9OwogCisvKgorICogJ21haWxib3gnIGNsYXNzCisgKiBtYWlsYm94IG1vZHVsZSBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIG9uLWNoaXAgcHJvY2Vzc29ycworICogdXNpbmcgYSBxdWV1ZWQgbWFpbGJveC1pbnRlcnJ1cHQgbWVjaGFuaXNtLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDN4eHhfbWFpbGJveF9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwLAorCS5zeXNjX29mZnMJPSAweDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkJU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAzeHh4X21haWxib3hfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAibWFpbGJveCIsCisJLnN5c2MgPSAmb21hcDN4eHhfbWFpbGJveF9zeXNjLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21haWxib3hfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfbWFpbGJveF9pcnFzW10gPSB7CisJeyAuaXJxID0gMjYgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X21haWxib3hfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwOTQwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA5NDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworLyogbDRfY29yZSAtPiBtYWlsYm94ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X2NvcmVfX21haWxib3ggPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X21haWxib3hfaHdtb2QsCisJLmFkZHIJCT0gb21hcDN4eHhfbWFpbGJveF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21haWxib3hfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtYWlsYm94IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9tYWlsYm94X3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX19tYWlsYm94LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21haWxib3hfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1haWxib3giLAorCS5jbGFzcwkJPSAmb21hcDN4eHhfbWFpbGJveF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwM3h4eF9tYWlsYm94X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbWFpbGJveF9pcnFzKSwKKwkubWFpbl9jbGsJPSAibWFpbGJveGVzX2ljayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NQUlMQk9YRVNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X21haWxib3hfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9tYWlsYm94X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogbDQgY29yZSAtPiBtY3NwaTEgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMzR4eF9tY3NwaTFfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA5ODAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDk4MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzNHh4X2w0X2NvcmVfX21jc3BpMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDM0eHhfbWNzcGkxLAorCS5jbGsJCT0gIm1jc3BpMV9pY2siLAorCS5hZGRyCQk9IG9tYXAzNHh4X21jc3BpMV9hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbWNzcGkxX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsNCBjb3JlIC0+IG1jc3BpMiBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzNHh4X21jc3BpMl9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDlhMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOWEwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDM0eHhfbDRfY29yZV9fbWNzcGkyID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMzR4eF9tY3NwaTIsCisJLmNsawkJPSAibWNzcGkyX2ljayIsCisJLmFkZHIJCT0gb21hcDM0eHhfbWNzcGkyX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTJfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0IGNvcmUgLT4gbWNzcGkzIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDM0eHhfbWNzcGkzX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwYjgwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODBiODBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMzR4eF9sNF9jb3JlX19tY3NwaTMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzNHh4X21jc3BpMywKKwkuY2xrCQk9ICJtY3NwaTNfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMzR4eF9tY3NwaTNfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21jc3BpM19hZGRyX3NwYWNlKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDQgY29yZSAtPiBtY3NwaTQgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMzR4eF9tY3NwaTRfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODBiYTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MGJhMGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzNHh4X2w0X2NvcmVfX21jc3BpNCA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDM0eHhfbWNzcGk0LAorCS5jbGsJCT0gIm1jc3BpNF9pY2siLAorCS5hZGRyCQk9IG9tYXAzNHh4X21jc3BpNF9hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbWNzcGk0X2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKgorICogJ21jc3BpJyBjbGFzcworICogbXVsdGljaGFubmVsIHNlcmlhbCBwb3J0IGludGVyZmFjZSAobWNzcGkpIC8gbWFzdGVyL3NsYXZlIHN5bmNocm9ub3VzIHNlcmlhbAorICogYnVzCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwMzR4eF9tY3NwaV9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkJU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKKwkJCQlTWVNDX0hBU19BVVRPSURMRSB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDM0eHhfbWNzcGlfY2xhc3MgPSB7CisJLm5hbWUgPSAibWNzcGkiLAorCS5zeXNjID0gJm9tYXAzNHh4X21jc3BpX3N5c2MsCisJLnJldiA9IE9NQVAzX01DU1BJX1JFViwKK307CisKKy8qIG1jc3BpMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzNHh4X21jc3BpMV9tcHVfaXJxc1tdID0geworCXsgLm5hbWUgPSAiaXJxIiwgLmlycSA9IDY1IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDM0eHhfbWNzcGkxX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgwIiwgLmRtYV9yZXEgPSAzNSB9LAorCXsgLm5hbWUgPSAicngwIiwgLmRtYV9yZXEgPSAzNiB9LAorCXsgLm5hbWUgPSAidHgxIiwgLmRtYV9yZXEgPSAzNyB9LAorCXsgLm5hbWUgPSAicngxIiwgLmRtYV9yZXEgPSAzOCB9LAorCXsgLm5hbWUgPSAidHgyIiwgLmRtYV9yZXEgPSAzOSB9LAorCXsgLm5hbWUgPSAicngyIiwgLmRtYV9yZXEgPSA0MCB9LAorCXsgLm5hbWUgPSAidHgzIiwgLmRtYV9yZXEgPSA0MSB9LAorCXsgLm5hbWUgPSAicngzIiwgLmRtYV9yZXEgPSA0MiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbWNzcGkxX3NsYXZlc1tdID0geworCSZvbWFwMzR4eF9sNF9jb3JlX19tY3NwaTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyIG9tYXBfbWNzcGkxX2Rldl9hdHRyID0geworCS5udW1fY2hpcHNlbGVjdCA9IDQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbWNzcGkxID0geworCS5uYW1lCQk9ICJtY3NwaTEiLAorCS5tcHVfaXJxcwk9IG9tYXAzNHh4X21jc3BpMV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTFfbXB1X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMzR4eF9tY3NwaTFfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTFfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibWNzcGkxX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX01DU1BJMV9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NQ1NQSTFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzNHh4X21jc3BpMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21jc3BpMV9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDM0eHhfbWNzcGlfY2xhc3MsCisJLmRldl9hdHRyICAgICAgID0gJm9tYXBfbWNzcGkxX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qIG1jc3BpMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzNHh4X21jc3BpMl9tcHVfaXJxc1tdID0geworCXsgLm5hbWUgPSAiaXJxIiwgLmlycSA9IDY2IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDM0eHhfbWNzcGkyX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgwIiwgLmRtYV9yZXEgPSA0MyB9LAorCXsgLm5hbWUgPSAicngwIiwgLmRtYV9yZXEgPSA0NCB9LAorCXsgLm5hbWUgPSAidHgxIiwgLmRtYV9yZXEgPSA0NSB9LAorCXsgLm5hbWUgPSAicngxIiwgLmRtYV9yZXEgPSA0NiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbWNzcGkyX3NsYXZlc1tdID0geworCSZvbWFwMzR4eF9sNF9jb3JlX19tY3NwaTIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyIG9tYXBfbWNzcGkyX2Rldl9hdHRyID0geworCS5udW1fY2hpcHNlbGVjdCA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbWNzcGkyID0geworCS5uYW1lCQk9ICJtY3NwaTIiLAorCS5tcHVfaXJxcwk9IG9tYXAzNHh4X21jc3BpMl9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTJfbXB1X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMzR4eF9tY3NwaTJfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTJfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibWNzcGkyX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NQ1NQSTJfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzNHh4X21jc3BpMl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21jc3BpMl9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDM0eHhfbWNzcGlfY2xhc3MsCisJLmRldl9hdHRyICAgICAgID0gJm9tYXBfbWNzcGkyX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qIG1jc3BpMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzNHh4X21jc3BpM19tcHVfaXJxc1tdID0geworCXsgLm5hbWUgPSAiaXJxIiwgLmlycSA9IDkxIH0sIC8qIDkxICovCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDM0eHhfbWNzcGkzX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgwIiwgLmRtYV9yZXEgPSAxNSB9LAorCXsgLm5hbWUgPSAicngwIiwgLmRtYV9yZXEgPSAxNiB9LAorCXsgLm5hbWUgPSAidHgxIiwgLmRtYV9yZXEgPSAyMyB9LAorCXsgLm5hbWUgPSAicngxIiwgLmRtYV9yZXEgPSAyNCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbWNzcGkzX3NsYXZlc1tdID0geworCSZvbWFwMzR4eF9sNF9jb3JlX19tY3NwaTMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyIG9tYXBfbWNzcGkzX2Rldl9hdHRyID0geworCS5udW1fY2hpcHNlbGVjdCA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbWNzcGkzID0geworCS5uYW1lCQk9ICJtY3NwaTMiLAorCS5tcHVfaXJxcwk9IG9tYXAzNHh4X21jc3BpM19tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTNfbXB1X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMzR4eF9tY3NwaTNfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTNfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibWNzcGkzX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX01DU1BJM19TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NQ1NQSTNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzNHh4X21jc3BpM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21jc3BpM19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDM0eHhfbWNzcGlfY2xhc3MsCisJLmRldl9hdHRyICAgICAgID0gJm9tYXBfbWNzcGkzX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qIFNQSTQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMzR4eF9tY3NwaTRfbXB1X2lycXNbXSA9IHsKKwl7IC5uYW1lID0gImlycSIsIC5pcnEgPSBJTlRfMzRYWF9TUEk0X0lSUSB9LCAvKiA0OCAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXAzNHh4X21jc3BpNF9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4MCIsIC5kbWFfcmVxID0gNzAgfSwgLyogRE1BX1NQSTRfVFgwICovCisJeyAubmFtZSA9ICJyeDAiLCAuZG1hX3JlcSA9IDcxIH0sIC8qIERNQV9TUEk0X1JYMCAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbWNzcGk0X3NsYXZlc1tdID0geworCSZvbWFwMzR4eF9sNF9jb3JlX19tY3NwaTQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyIG9tYXBfbWNzcGk0X2Rldl9hdHRyID0geworCS5udW1fY2hpcHNlbGVjdCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbWNzcGk0ID0geworCS5uYW1lCQk9ICJtY3NwaTQiLAorCS5tcHVfaXJxcwk9IG9tYXAzNHh4X21jc3BpNF9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTRfbXB1X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMzR4eF9tY3NwaTRfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tY3NwaTRfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibWNzcGk0X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX01DU1BJNF9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NQ1NQSTRfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzNHh4X21jc3BpNF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21jc3BpNF9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDM0eHhfbWNzcGlfY2xhc3MsCisJLmRldl9hdHRyICAgICAgID0gJm9tYXBfbWNzcGk0X2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qCisgKiB1c2Joc290ZworICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAzeHh4X3VzYmhzb3RnX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwNDAwLAorCS5zeXNjX29mZnMJPSAweDA0MDQsCisJLnN5c3Nfb2Zmcwk9IDB4MDQwOCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19NSURMRU1PREV8CisJCQkgIFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkgIFNZU0NfSEFTX0FVVE9JRExFKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCB8CisJCQkgIE1TVEFOREJZX0ZPUkNFIHwgTVNUQU5EQllfTk8gfCBNU1RBTkRCWV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyB1c2JvdGdfY2xhc3MgPSB7CisJLm5hbWUgPSAidXNib3RnIiwKKwkuc3lzYyA9ICZvbWFwM3h4eF91c2Joc290Z19zeXNjLAorfTsKKy8qIHVzYl9vdGdfaHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF91c2Joc290Z19tcHVfaXJxc1tdID0geworCisJeyAubmFtZSA9ICJtYyIsIC5pcnEgPSA5MiB9LAorCXsgLm5hbWUgPSAiZG1hIiwgLmlycSA9IDkzIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfdXNiaHNvdGdfaHdtb2QgPSB7CisJLm5hbWUJCT0gInVzYl9vdGdfaHMiLAorCS5tcHVfaXJxcwk9IG9tYXAzeHh4X3VzYmhzb3RnX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3VzYmhzb3RnX21wdV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiaHNvdGd1c2JfaWNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0hTT1RHVVNCX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBFUzJfU1RfSFNPVEdVU0JfSURMRV9TSElGVCwKKwkJCS5pZGxlc3Rfc3RkYnlfYml0ID0gT01BUDM0MzBFUzJfU1RfSFNPVEdVU0JfU1REQllfU0hJRlQKKwkJfSwKKwl9LAorCS5tYXN0ZXJzCT0gb21hcDN4eHhfdXNiaHNvdGdfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X3VzYmhzb3RnX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfdXNiaHNvdGdfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF91c2Joc290Z19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmdXNib3RnX2NsYXNzLAorCisJLyoKKwkgKiBFcnJhdHVtIElEOiBpNDc5ICBpZGxlX3JlcSAvIGlkbGVfYWNrIG1lY2hhbmlzbSBwb3RlbnRpYWxseQorCSAqIGJyb2tlbiB3aGVuIGF1dG9pZGxlIGlzIGVuYWJsZWQKKwkgKiB3b3JrYXJvdW5kIGlzIHRvIGRpc2FibGUgdGhlIGF1dG9pZGxlIGJpdCBhdCBtb2R1bGUgbGV2ZWwuCisJICovCisJLmZsYWdzCQk9IEhXTU9EX05PX09DUF9BVVRPSURMRSB8IEhXTU9EX1NXU1VQX1NJRExFCisJCQkJfCBIV01PRF9TV1NVUF9NU1RBTkRCWSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKK307CisKKy8qIHVzYl9vdGdfaHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBhbTM1eHhfdXNiaHNvdGdfbXB1X2lycXNbXSA9IHsKKworCXsgLm5hbWUgPSAibWMiLCAuaXJxID0gNzEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBhbTM1eHhfdXNib3RnX2NsYXNzID0geworCS5uYW1lID0gImFtMzV4eF91c2JvdGciLAorCS5zeXNjID0gTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBhbTM1eHhfdXNiaHNvdGdfaHdtb2QgPSB7CisJLm5hbWUJCT0gImFtMzV4X290Z19ocyIsCisJLm1wdV9pcnFzCT0gYW0zNXh4X3VzYmhzb3RnX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKGFtMzV4eF91c2Joc290Z19tcHVfaXJxcyksCisJLm1haW5fY2xrCT0gTlVMTCwKKwkucHJjbSA9IHsKKwkJLm9tYXAyID0geworCQl9LAorCX0sCisJLm1hc3RlcnMJPSBhbTM1eHhfdXNiaHNvdGdfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKGFtMzV4eF91c2Joc290Z19tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IGFtMzV4eF91c2Joc290Z19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKGFtMzV4eF91c2Joc290Z19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmYW0zNXh4X3VzYm90Z19jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTM18xKQorfTsKKworLyogTU1DL1NEL1NESU8gY29tbW9uICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDM0eHhfbW1jX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgxZmMsCisJLnN5c2Nfb2Zmcwk9IDB4MTAsCisJLnN5c3Nfb2Zmcwk9IDB4MTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19FTkFXQUtFVVAgfCBTWVNDX0hBU19TT0ZUUkVTRVQgfAorCQkJICAgU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMgICAgPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAzNHh4X21tY19jbGFzcyA9IHsKKwkubmFtZSA9ICJtbWMiLAorCS5zeXNjID0gJm9tYXAzNHh4X21tY19zeXNjLAorfTsKKworLyogTU1DL1NEL1NESU8xICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMzR4eF9tbWMxX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gODMsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDM0eHhfbW1jMV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwJLmRtYV9yZXEgPSA2MSwgfSwKKwl7IC5uYW1lID0gInJ4IiwJLmRtYV9yZXEgPSA2MiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIG9tYXAzNHh4X21tYzFfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2siLCAuY2xrID0gIm9tYXBfMzJrX2ZjayIsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9tbWMxX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX19tbWMxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0geworCS5mbGFncyA9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X21tYzFfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1tYzEiLAorCS5tcHVfaXJxcwk9IG9tYXAzNHh4X21tYzFfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbW1jMV9tcHVfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXAzNHh4X21tYzFfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tbWMxX3NkbWFfcmVxcyksCisJLm9wdF9jbGtzCT0gb21hcDM0eHhfbW1jMV9vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tbWMxX29wdF9jbGtzKSwKKwkubWFpbl9jbGsJPSAibW1jaHMxX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfTU1DMV9TSElGVCwKKwkJfSwKKwl9LAorCS5kZXZfYXR0cgk9ICZtbWMxX2Rldl9hdHRyLAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfbW1jMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X21tYzFfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzNHh4X21tY19jbGFzcywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisvKiBNTUMvU0QvU0RJTzIgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzNHh4X21tYzJfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSBJTlRfMjRYWF9NTUMyX0lSUSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwMzR4eF9tbWMyX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLAkuZG1hX3JlcSA9IDQ3LCB9LAorCXsgLm5hbWUgPSAicngiLAkuZG1hX3JlcSA9IDQ4LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgb21hcDM0eHhfbW1jMl9vcHRfY2xrc1tdID0geworCXsgLnJvbGUgPSAiZGJjayIsIC5jbGsgPSAib21hcF8zMmtfZmNrIiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X21tYzJfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2w0X2NvcmVfX21tYzIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbW1jMl9od21vZCA9IHsKKwkubmFtZQkJPSAibW1jMiIsCisJLm1wdV9pcnFzCT0gb21hcDM0eHhfbW1jMl9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9tbWMyX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDM0eHhfbW1jMl9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21tYzJfc2RtYV9yZXFzKSwKKwkub3B0X2Nsa3MJPSBvbWFwMzR4eF9tbWMyX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21tYzJfb3B0X2Nsa3MpLAorCS5tYWluX2Nsawk9ICJtbWNoczJfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fTU1DMl9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NTUMyX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9tbWMyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbW1jMl9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDM0eHhfbW1jX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qIE1NQy9TRC9TRElPMyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDM0eHhfbW1jM19tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDk0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXAzNHh4X21tYzNfc2RtYV9yZXFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsCS5kbWFfcmVxID0gNzcsIH0sCisJeyAubmFtZSA9ICJyeCIsCS5kbWFfcmVxID0gNzgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayBvbWFwMzR4eF9tbWMzX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJkYmNrIiwgLmNsayA9ICJvbWFwXzMya19mY2siLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbW1jM19zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfY29yZV9fbW1jMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9tbWMzX2h3bW9kID0geworCS5uYW1lCQk9ICJtbWMzIiwKKwkubXB1X2lycXMJPSBvbWFwMzR4eF9tbWMzX21wdV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X21tYzNfbXB1X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwMzR4eF9tbWMzX3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbW1jM19zZG1hX3JlcXMpLAorCS5vcHRfY2xrcwk9IG9tYXAzNHh4X21tYzNfb3B0X2Nsa3MsCisJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbW1jM19vcHRfY2xrcyksCisJLm1haW5fY2xrCT0gIm1tY2hzM19mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fTU1DM19TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9NTUMzX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9tbWMzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbW1jM19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmb21hcDM0eHhfbW1jX2NsYXNzLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwM3h4eF9od21vZHNbXSA9IHsKIAkmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKIAkmb21hcDN4eHhfbDRfY29yZV9od21vZCwKIAkmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAogCSZvbWFwM3h4eF9sNF93a3VwX2h3bW9kLAorCSZvbWFwM3h4eF9tbWMxX2h3bW9kLAorCSZvbWFwM3h4eF9tbWMyX2h3bW9kLAorCSZvbWFwM3h4eF9tbWMzX2h3bW9kLAogCSZvbWFwM3h4eF9tcHVfaHdtb2QsCiAJJm9tYXAzeHh4X2l2YV9od21vZCwKKworCSZvbWFwM3h4eF90aW1lcjFfaHdtb2QsCisJJm9tYXAzeHh4X3RpbWVyMl9od21vZCwKKwkmb21hcDN4eHhfdGltZXIzX2h3bW9kLAorCSZvbWFwM3h4eF90aW1lcjRfaHdtb2QsCisJJm9tYXAzeHh4X3RpbWVyNV9od21vZCwKKwkmb21hcDN4eHhfdGltZXI2X2h3bW9kLAorCSZvbWFwM3h4eF90aW1lcjdfaHdtb2QsCisJJm9tYXAzeHh4X3RpbWVyOF9od21vZCwKKwkmb21hcDN4eHhfdGltZXI5X2h3bW9kLAorCSZvbWFwM3h4eF90aW1lcjEwX2h3bW9kLAorCSZvbWFwM3h4eF90aW1lcjExX2h3bW9kLAorCSZvbWFwM3h4eF90aW1lcjEyX2h3bW9kLAorCiAJJm9tYXAzeHh4X3dkX3RpbWVyMl9od21vZCwKIAkmb21hcDN4eHhfdWFydDFfaHdtb2QsCiAJJm9tYXAzeHh4X3VhcnQyX2h3bW9kLAogCSZvbWFwM3h4eF91YXJ0M19od21vZCwKIAkmb21hcDN4eHhfdWFydDRfaHdtb2QsCisJLyogZHNzIGNsYXNzICovCisJJm9tYXAzNDMwZXMxX2Rzc19jb3JlX2h3bW9kLAorCSZvbWFwM3h4eF9kc3NfY29yZV9od21vZCwKKwkmb21hcDN4eHhfZHNzX2Rpc3BjX2h3bW9kLAorCSZvbWFwM3h4eF9kc3NfZHNpMV9od21vZCwKKwkmb21hcDN4eHhfZHNzX3JmYmlfaHdtb2QsCisJJm9tYXAzeHh4X2Rzc192ZW5jX2h3bW9kLAorCisJLyogaTJjIGNsYXNzICovCiAJJm9tYXAzeHh4X2kyYzFfaHdtb2QsCiAJJm9tYXAzeHh4X2kyYzJfaHdtb2QsCiAJJm9tYXAzeHh4X2kyYzNfaHdtb2QsCkBAIC0xMzg3LDEwICszNjIyLDM1IEBACiAKIAkvKiBkbWFfc3lzdGVtIGNsYXNzKi8KIAkmb21hcDN4eHhfZG1hX3N5c3RlbV9od21vZCwKKworCS8qIG1jYnNwIGNsYXNzICovCisJJm9tYXAzeHh4X21jYnNwMV9od21vZCwKKwkmb21hcDN4eHhfbWNic3AyX2h3bW9kLAorCSZvbWFwM3h4eF9tY2JzcDNfaHdtb2QsCisJJm9tYXAzeHh4X21jYnNwNF9od21vZCwKKwkmb21hcDN4eHhfbWNic3A1X2h3bW9kLAorCSZvbWFwM3h4eF9tY2JzcDJfc2lkZXRvbmVfaHdtb2QsCisJJm9tYXAzeHh4X21jYnNwM19zaWRldG9uZV9od21vZCwKKworCS8qIG1haWxib3ggY2xhc3MgKi8KKwkmb21hcDN4eHhfbWFpbGJveF9od21vZCwKKworCS8qIG1jc3BpIGNsYXNzICovCisJJm9tYXAzNHh4X21jc3BpMSwKKwkmb21hcDM0eHhfbWNzcGkyLAorCSZvbWFwMzR4eF9tY3NwaTMsCisJJm9tYXAzNHh4X21jc3BpNCwKKworCS8qIHVzYm90ZyBjbGFzcyAqLworCSZvbWFwM3h4eF91c2Joc290Z19od21vZCwKKworCS8qIHVzYm90ZyBmb3IgYW0zNXggKi8KKwkmYW0zNXh4X3VzYmhzb3RnX2h3bW9kLAorCiAJTlVMTCwKIH07CiAKIGludCBfX2luaXQgb21hcDN4eHhfaHdtb2RfaW5pdCh2b2lkKQogewotCXJldHVybiBvbWFwX2h3bW9kX2luaXQob21hcDN4eHhfaHdtb2RzKTsKKwlyZXR1cm4gb21hcF9od21vZF9yZWdpc3RlcihvbWFwM3h4eF9od21vZHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IGMyODA2YmQuLjNlODhkZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogSGFyZHdhcmUgbW9kdWxlcyBwcmVzZW50IG9uIHRoZSBPTUFQNDR4eCBjaGlwcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBQYXVsIFdhbG1zbGV5CkBAIC0yNCw2ICsyNCw5IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KKyNpbmNsdWRlIDxwbGF0L21jYnNwLmg+CisjaW5jbHVkZSA8cGxhdC9tbWMuaD4KIAogI2luY2x1ZGUgIm9tYXBfaHdtb2RfY29tbW9uX2RhdGEuaCIKIApAQCAtNDAsMTAgKzQzLDE1IEBACiAjZGVmaW5lIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgIDEKIAogLyogQmFja3dhcmQgcmVmZXJlbmNlcyAoSVBzIHdpdGggQnVzIE1hc3RlciBjYXBhYmlsaXR5KSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Flc3NfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZG1hX3N5c3RlbV9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9kbW1faHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZHNwX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc19od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9lbWlmX2Z3X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2hzaV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9pcHVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfaXNzX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2l2YV9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9sM19pbnN0cl9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9sM19tYWluXzFfaHdtb2Q7CkBAIC01Myw4ICs2MSwxMSBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2w0X2NmZ19od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9sNF9wZXJfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbDRfd2t1cF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tbWMxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21tYzJfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbXB1X2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21wdV9wcml2YXRlX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3VzYl9vdGdfaHNfaHdtb2Q7CiAKIC8qCiAgKiBJbnRlcmNvbm5lY3RzIG9tYXBfaHdtb2Qgc3RydWN0dXJlcwpAQCAtMjEzLDYgKzIyNCwxNCBAQAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCisvKiBkc3MgLT4gbDNfbWFpbl8xICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2Rzc19fbDNfbWFpbl8xID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2Rzc19od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2wzX21haW5fMV9od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCiAvKiBsM19tYWluXzIgLT4gbDNfbWFpbl8xICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fbDNfbWFpbl8xID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKQEAgLTIyOSwyNSArMjQ4LDYyIEBACiAJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKKy8qIG1tYzEgLT4gbDNfbWFpbl8xICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X21tYzFfX2wzX21haW5fMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9tbWMxX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbDNfbWFpbl8xX2h3bW9kLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIG1tYzIgLT4gbDNfbWFpbl8xICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X21tYzJfX2wzX21haW5fMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9tbWMyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbDNfbWFpbl8xX2h3bW9kLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIEwzIHRhcmdldCBjb25maWd1cmF0aW9uIGFuZCBlcnJvciBsb2cgcmVnaXN0ZXJzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfbDNfdGFyZ19pcnFzW10gPSB7CisJeyAuaXJxID0gOSAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCisJeyAuaXJxID0gMTAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9sM19tYWluXzFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDQwMDAwMDAsCisJCS5wYV9lbmQJCT0gMHg0NDAwMGZmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKwogLyogbXB1IC0+IGwzX21haW5fMSAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9tcHVfX2wzX21haW5fMSA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9tcHVfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9sM19tYWluXzFfaHdtb2QsCiAJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9sM19tYWluXzFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9sM19tYWluXzFfYWRkcnMpLAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCiAvKiBsM19tYWluXzEgc2xhdmUgcG9ydHMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2wzX21haW5fMV9zbGF2ZXNbXSA9IHsKIAkmb21hcDQ0eHhfZHNwX19sM19tYWluXzEsCisJJm9tYXA0NHh4X2Rzc19fbDNfbWFpbl8xLAogCSZvbWFwNDR4eF9sM19tYWluXzJfX2wzX21haW5fMSwKIAkmb21hcDQ0eHhfbDRfY2ZnX19sM19tYWluXzEsCisJJm9tYXA0NHh4X21tYzFfX2wzX21haW5fMSwKKwkmb21hcDQ0eHhfbW1jMl9fbDNfbWFpbl8xLAogCSZvbWFwNDR4eF9tcHVfX2wzX21haW5fMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9sM19tYWluXzFfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImwzX21haW5fMSIsCiAJLmNsYXNzCQk9ICZvbWFwNDR4eF9sM19od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9sM190YXJnX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbDNfdGFyZ19pcnFzKSwKIAkuc2xhdmVzCQk9IG9tYXA0NHh4X2wzX21haW5fMV9zbGF2ZXMsCiAJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2wzX21haW5fMV9zbGF2ZXMpLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKQEAgLTI2Miw2ICszMTgsMzAgQEAKIAkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAorLyogaHNpIC0+IGwzX21haW5fMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9oc2lfX2wzX21haW5fMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9oc2lfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogaXB1IC0+IGwzX21haW5fMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9pcHVfX2wzX21haW5fMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9pcHVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogaXNzIC0+IGwzX21haW5fMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9pc3NfX2wzX21haW5fMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9pc3NfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKwogLyogaXZhIC0+IGwzX21haW5fMiAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9pdmFfX2wzX21haW5fMiA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9pdmFfaHdtb2QsCkBAIC0yNzAsMTEgKzM1MCwyMSBAQAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9sM19tYWluXzJfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDQ4MDAwMDAsCisJCS5wYV9lbmQJCT0gMHg0NDgwMWZmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKwogLyogbDNfbWFpbl8xIC0+IGwzX21haW5fMiAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzFfX2wzX21haW5fMiA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzFfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCiAJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9sM19tYWluXzJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9sM19tYWluXzJfYWRkcnMpLAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCkBAIC0yODYsMTIgKzM3NiwyNCBAQAogCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCisvKiB1c2Jfb3RnX2hzIC0+IGwzX21haW5fMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF91c2Jfb3RnX2hzX19sM19tYWluXzIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfdXNiX290Z19oc19od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCiAvKiBsM19tYWluXzIgc2xhdmUgcG9ydHMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2wzX21haW5fMl9zbGF2ZXNbXSA9IHsKIAkmb21hcDQ0eHhfZG1hX3N5c3RlbV9fbDNfbWFpbl8yLAorCSZvbWFwNDR4eF9oc2lfX2wzX21haW5fMiwKKwkmb21hcDQ0eHhfaXB1X19sM19tYWluXzIsCisJJm9tYXA0NHh4X2lzc19fbDNfbWFpbl8yLAogCSZvbWFwNDR4eF9pdmFfX2wzX21haW5fMiwKIAkmb21hcDQ0eHhfbDNfbWFpbl8xX19sM19tYWluXzIsCiAJJm9tYXA0NHh4X2w0X2NmZ19fbDNfbWFpbl8yLAorCSZvbWFwNDR4eF91c2Jfb3RnX2hzX19sM19tYWluXzIsCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kID0gewpAQCAtMzAzLDExICs0MDUsMjEgQEAKIH07CiAKIC8qIGwzX21haW5fMyBpbnRlcmZhY2UgZGF0YSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfbDNfbWFpbl8zX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ1MDAwMDAwLAorCQkucGFfZW5kCQk9IDB4NDUwMDBmZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQsCisJfSwKK307CisKIC8qIGwzX21haW5fMSAtPiBsM19tYWluXzMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8xX19sM19tYWluXzMgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8xX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbDNfbWFpbl8zX2h3bW9kLAogCS5jbGsJCT0gImwzX2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbDNfbWFpbl8zX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbDNfbWFpbl8zX2FkZHJzKSwKIAkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIApAQCAtMzUxLDYgKzQ2MywxNCBAQAogfTsKIAogLyogbDRfYWJlIGludGVyZmFjZSBkYXRhICovCisvKiBhZXNzIC0+IGw0X2FiZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9hZXNzX19sNF9hYmUgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfYWVzc19od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCiAvKiBkc3AgLT4gbDRfYWJlICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2RzcF9fbDRfYWJlID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2RzcF9od21vZCwKQEAgLTM3Nyw2ICs0OTcsNyBAQAogCiAvKiBsNF9hYmUgc2xhdmUgcG9ydHMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2w0X2FiZV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfYWVzc19fbDRfYWJlLAogCSZvbWFwNDR4eF9kc3BfX2w0X2FiZSwKIAkmb21hcDQ0eHhfbDNfbWFpbl8xX19sNF9hYmUsCiAJJm9tYXA0NHh4X21wdV9fbDRfYWJlLApAQCAtNDk0LDI2ICs2MTUsMTUgQEAKICAqIC0gVGhleSBzdGlsbCBuZWVkIHRvIGJlIHZhbGlkYXRlZCB3aXRoIHRoZSBkcml2ZXIKICAqICAgcHJvcGVybHkgYWRhcHRlZCB0byBvbWFwX2h3bW9kIC8gb21hcF9kZXZpY2UKICAqCi0gKiAgYWVzcwotICogIGJhbmRnYXAKICAqICBjMmMKICAqICBjMmNfdGFyZ2V0X2Z3CiAgKiAgY21fY29yZQogICogIGNtX2NvcmVfYW9uCi0gKiAgY291bnRlcl8zMmsKICAqICBjdHJsX21vZHVsZV9jb3JlCiAgKiAgY3RybF9tb2R1bGVfcGFkX2NvcmUKICAqICBjdHJsX21vZHVsZV9wYWRfd2t1cAogICogIGN0cmxfbW9kdWxlX3drdXAKICAqICBkZWJ1Z3NzCi0gKiAgZG1pYwotICogIGRzcwotICogIGRzc19kaXNwYwotICogIGRzc19kc2kxCi0gKiAgZHNzX2RzaTIKLSAqICBkc3NfaGRtaQotICogIGRzc19yZmJpCi0gKiAgZHNzX3ZlbmMKICAqICBlZnVzZV9jdHJsX2N1c3QKICAqICBlZnVzZV9jdHJsX3N0ZAogICogIGVsbQpAQCAtNTI0LDU4ICs2MzQsMjExIEBACiAgKiAgZ3B1CiAgKiAgaGRxMXcKICAqICBoc2kKLSAqICBpcHUKLSAqICBpc3MKLSAqICBrYmQKLSAqICBtYWlsYm94Ci0gKiAgbWNhc3AKLSAqICBtY2JzcDEKLSAqICBtY2JzcDIKLSAqICBtY2JzcDMKLSAqICBtY2JzcDQKLSAqICBtY3BkbQotICogIG1jc3BpMQotICogIG1jc3BpMgotICogIG1jc3BpMwotICogIG1jc3BpNAotICogIG1tYzEKLSAqICBtbWMyCi0gKiAgbW1jMwotICogIG1tYzQKLSAqICBtbWM1Ci0gKiAgbXB1X2MwCi0gKiAgbXB1X2MxCiAgKiAgb2NtY19yYW0KICAqICBvY3Ayc2NwX3VzYl9waHkKICAqICBvY3Bfd3Bfbm9jCi0gKiAgcHJjbQogICogIHByY21fbXB1CiAgKiAgcHJtCiAgKiAgc2NybQogICogIHNsMmlmCiAgKiAgc2xpbWJ1czEKICAqICBzbGltYnVzMgotICogIHNwaW5sb2NrCi0gKiAgdGltZXIxCi0gKiAgdGltZXIxMAotICogIHRpbWVyMTEKLSAqICB0aW1lcjIKLSAqICB0aW1lcjMKLSAqICB0aW1lcjQKLSAqICB0aW1lcjUKLSAqICB0aW1lcjYKLSAqICB0aW1lcjcKLSAqICB0aW1lcjgKLSAqICB0aW1lcjkKICAqICB1c2JfaG9zdF9mcwogICogIHVzYl9ob3N0X2hzCi0gKiAgdXNiX290Z19ocwogICogIHVzYl9waHlfY20KICAqICB1c2JfdGxsX2hzCiAgKiAgdXNpbQogICovCiAKIC8qCisgKiAnYWVzcycgY2xhc3MKKyAqIGF1ZGlvIGVuZ2luZSBzdWIgc3lzdGVtCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwNDR4eF9hZXNzX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfTUlETEVNT0RFIHwgU1lTQ19IQVNfU0lETEVNT0RFKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCB8CisJCQkgICBNU1RBTkRCWV9GT1JDRSB8IE1TVEFOREJZX05PIHwgTVNUQU5EQllfU01BUlQpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfYWVzc19od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJhZXNzIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9hZXNzX3N5c2MsCit9OworCisvKiBhZXNzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfYWVzc19pcnFzW10gPSB7CisJeyAuaXJxID0gOTkgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDQ0eHhfYWVzc19zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gImZpZm8wIiwgLmRtYV9yZXEgPSAxMDAgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJmaWZvMSIsIC5kbWFfcmVxID0gMTAxICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAiZmlmbzIiLCAuZG1hX3JlcSA9IDEwMiArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gImZpZm8zIiwgLmRtYV9yZXEgPSAxMDMgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJmaWZvNCIsIC5kbWFfcmVxID0gMTA0ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAiZmlmbzUiLCAuZG1hX3JlcSA9IDEwNSArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gImZpZm82IiwgLmRtYV9yZXEgPSAxMDYgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJmaWZvNyIsIC5kbWFfcmVxID0gMTA3ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorfTsKKworLyogYWVzcyBtYXN0ZXIgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2Flc3NfbWFzdGVyc1tdID0geworCSZvbWFwNDR4eF9hZXNzX19sNF9hYmUsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9hZXNzX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQwMWYxMDAwLAorCQkucGFfZW5kCQk9IDB4NDAxZjEzZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfYWJlIC0+IGFlc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX19hZXNzID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2Flc3NfaHdtb2QsCisJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9hZXNzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfYWVzc19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfYWVzc19kbWFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwZjEwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTBmMTNmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9hYmUgLT4gYWVzcyAoZG1hKSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX2Flc3NfZG1hID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2Flc3NfaHdtb2QsCisJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9hZXNzX2RtYV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Flc3NfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogYWVzcyBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfYWVzc19zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfYWJlX19hZXNzLAorCSZvbWFwNDR4eF9sNF9hYmVfX2Flc3NfZG1hLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Flc3NfaHdtb2QgPSB7CisJLm5hbWUJCT0gImFlc3MiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfYWVzc19od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9hZXNzX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfYWVzc19pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfYWVzc19zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Flc3Nfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiYWVzc19mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ00xX0FCRV9BRVNTX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2Flc3Nfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9hZXNzX3NsYXZlcyksCisJLm1hc3RlcnMJPSBvbWFwNDR4eF9hZXNzX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9hZXNzX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qCisgKiAnYmFuZGdhcCcgY2xhc3MKKyAqIGJhbmdhcCByZWZlcmVuY2UgZm9yIGxkbyByZWd1bGF0b3JzCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X2JhbmRnYXBfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAiYmFuZGdhcCIsCit9OworCisvKiBiYW5kZ2FwICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayBiYW5kZ2FwX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJmY2xrIiwgLmNsayA9ICJiYW5kZ2FwX2ZjbGsiIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfYmFuZGdhcF9od21vZCA9IHsKKwkubmFtZQkJPSAiYmFuZGdhcCIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9iYW5kZ2FwX2h3bW9kX2NsYXNzLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fV0tVUF9CQU5ER0FQX0NMS0NUUkwsCisJCX0sCisJfSwKKwkub3B0X2Nsa3MJPSBiYW5kZ2FwX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGJhbmRnYXBfb3B0X2Nsa3MpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qCisgKiAnY291bnRlcicgY2xhc3MKKyAqIDMyLWJpdCBvcmRpbmFyeSBjb3VudGVyLCBjbG9ja2VkIGJ5IHRoZSBmYWxsaW5nIGVkZ2Ugb2YgdGhlIDMyIGtoeiBjbG9jaworICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDQ0eHhfY291bnRlcl9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDA0LAorCS5zeXNjX2ZsYWdzCT0gU1lTQ19IQVNfU0lETEVNT0RFLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIFNJRExFX1NNQVJUX1dLVVApLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfY291bnRlcl9od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJjb3VudGVyIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9jb3VudGVyX3N5c2MsCit9OworCisvKiBjb3VudGVyXzMyayAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2NvdW50ZXJfMzJrX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfY291bnRlcl8zMmtfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NGEzMDQwMDAsCisJCS5wYV9lbmQJCT0gMHg0YTMwNDAxZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF93a3VwIC0+IGNvdW50ZXJfMzJrICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3drdXBfX2NvdW50ZXJfMzJrID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3drdXBfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9jb3VudGVyXzMya19od21vZCwKKwkuY2xrCQk9ICJsNF93a3VwX2Nsa19tdXhfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2NvdW50ZXJfMzJrX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfY291bnRlcl8zMmtfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBjb3VudGVyXzMyayBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfY291bnRlcl8zMmtfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3drdXBfX2NvdW50ZXJfMzJrLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2NvdW50ZXJfMzJrX2h3bW9kID0geworCS5uYW1lCQk9ICJjb3VudGVyXzMyayIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9jb3VudGVyX2h3bW9kX2NsYXNzLAorCS5mbGFncwkJPSBIV01PRF9TV1NVUF9TSURMRSwKKwkubWFpbl9jbGsJPSAic3lzXzMya19jayIsCisJLnByY20JCT0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9XS1VQX1NZTkNUSU1FUl9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9jb3VudGVyXzMya19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2NvdW50ZXJfMzJrX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyoKICAqICdkbWEnIGNsYXNzCiAgKiBkbWEgY29udHJvbGxlciBmb3IgZGF0YSBleGNoYW5nZSBiZXR3ZWVuIG1lbW9yeSB0byBtZW1vcnkgKGkuZS4gaW50ZXJuYWwgb3IKICAqIGV4dGVybmFsIG1lbW9yeSkgYW5kIGdwIHBlcmlwaGVyYWxzIHRvIG1lbW9yeSBvciBtZW1vcnkgdG8gZ3AgcGVyaXBoZXJhbHMKQEAgLTY2Miw2ICs5MjUsOTYgQEAKIH07CiAKIC8qCisgKiAnZG1pYycgY2xhc3MKKyAqIGRpZ2l0YWwgbWljcm9waG9uZSBjb250cm9sbGVyCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwNDR4eF9kbWljX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfRU1VRlJFRSB8IFNZU0NfSEFTX1JFU0VUX1NUQVRVUyB8CisJCQkgICBTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19TT0ZUUkVTRVQpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIFNJRExFX1NNQVJUX1dLVVApLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfZG1pY19od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJkbWljIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9kbWljX3N5c2MsCit9OworCisvKiBkbWljICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZG1pY19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9kbWljX2lycXNbXSA9IHsKKwl7IC5pcnEgPSAxMTQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDQ0eHhfZG1pY19zZG1hX3JlcXNbXSA9IHsKKwl7IC5kbWFfcmVxID0gNjYgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9kbWljX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQwMTJlMDAwLAorCQkucGFfZW5kCQk9IDB4NDAxMmUwN2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfYWJlIC0+IGRtaWMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX19kbWljID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2RtaWNfaHdtb2QsCisJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9kbWljX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZG1pY19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZG1pY19kbWFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwMmUwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAyZTA3ZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9hYmUgLT4gZG1pYyAoZG1hKSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX2RtaWNfZG1hID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2RtaWNfaHdtb2QsCisJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9kbWljX2RtYV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2RtaWNfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZG1pYyBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZG1pY19zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfYWJlX19kbWljLAorCSZvbWFwNDR4eF9sNF9hYmVfX2RtaWNfZG1hLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2RtaWNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRtaWMiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfZG1pY19od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9kbWljX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZG1pY19pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfZG1pY19zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2RtaWNfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiZG1pY19mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ00xX0FCRV9ETUlDX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2RtaWNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kbWljX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyoKICAqICdkc3AnIGNsYXNzCiAgKiBkc3Agc3ViLXN5c3RlbQogICovCkBAIC03NDcsNiArMTEwMCw1OTAgQEAKIH07CiAKIC8qCisgKiAnZHNzJyBjbGFzcworICogZGlzcGxheSBzdWItc3lzdGVtCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwNDR4eF9kc3Nfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IFNZU1NfSEFTX1JFU0VUX1NUQVRVUywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9kc3NfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAiZHNzIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9kc3Nfc3lzYywKK307CisKKy8qIGRzcyAqLworLyogZHNzIG1hc3RlciBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZHNzX21hc3RlcnNbXSA9IHsKKwkmb21hcDQ0eHhfZHNzX19sM19tYWluXzEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9kc3NfZG1hX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDU4MDAwMDAwLAorCQkucGFfZW5kCQk9IDB4NTgwMDAwN2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDNfbWFpbl8yIC0+IGRzcyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2RzcyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfaHdtb2QsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfZG1hX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2RtYV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2Rzc19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA0MDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDQwMDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBkc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19kc3MgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCit9OworCisvKiBkc3Mgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2Rzc19zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDNfbWFpbl8yX19kc3MsCisJJm9tYXA0NHh4X2w0X3Blcl9fZHNzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZHNzX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJzeXNfY2xrIiwgLmNsayA9ICJkc3Nfc3lzX2NsayIgfSwKKwl7IC5yb2xlID0gInR2X2NsayIsIC5jbGsgPSAiZHNzX3R2X2NsayIgfSwKKwl7IC5yb2xlID0gImRzc19jbGsiLCAuY2xrID0gImRzc19kc3NfY2xrIiB9LAorCXsgLnJvbGUgPSAidmlkZW9fY2xrIiwgLmNsayA9ICJkc3NfNDhtaHpfY2xrIiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc19od21vZCA9IHsKKwkubmFtZQkJPSAiZHNzX2NvcmUiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfZHNzX2h3bW9kX2NsYXNzLAorCS5tYWluX2Nsawk9ICJkc3NfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fRFNTX0RTU19DTEtDVFJMLAorCQl9LAorCX0sCisJLm9wdF9jbGtzCT0gZHNzX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19vcHRfY2xrcyksCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9kc3Nfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3Nfc2xhdmVzKSwKKwkubWFzdGVycwk9IG9tYXA0NHh4X2Rzc19tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qCisgKiAnZGlzcGMnIGNsYXNzCisgKiBkaXNwbGF5IGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X2Rpc3BjX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19BVVRPSURMRSB8IFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfAorCQkJICAgU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfTUlETEVNT0RFIHwKKwkJCSAgIFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkgICBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIE1TVEFOREJZX0ZPUkNFIHwgTVNUQU5EQllfTk8gfCBNU1RBTkRCWV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9kaXNwY19od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJkaXNwYyIsCisJLnN5c2MJPSAmb21hcDQ0eHhfZGlzcGNfc3lzYywKK307CisKKy8qIGRzc19kaXNwYyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc19kaXNwY19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9kc3NfZGlzcGNfaXJxc1tdID0geworCXsgLmlycSA9IDI1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X2Rzc19kaXNwY19zZG1hX3JlcXNbXSA9IHsKKwl7IC5kbWFfcmVxID0gNSArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2Rzc19kaXNwY19kbWFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NTgwMDEwMDAsCisJCS5wYV9lbmQJCT0gMHg1ODAwMWZmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsM19tYWluXzIgLT4gZHNzX2Rpc3BjICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX2Rpc3BjID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19kaXNwY19od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19kaXNwY19kbWFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3NfZGlzcGNfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZHNzX2Rpc3BjX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDQxMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNDFmZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IGRzc19kaXNwYyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX2Rzc19kaXNwYyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfZGlzcGNfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfZGlzcGNfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3NfZGlzcGNfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKK307CisKKy8qIGRzc19kaXNwYyBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZHNzX2Rpc3BjX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sM19tYWluXzJfX2Rzc19kaXNwYywKKwkmb21hcDQ0eHhfbDRfcGVyX19kc3NfZGlzcGMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZHNzX2Rpc3BjX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfZGlzcGMiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfZGlzcGNfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfZHNzX2Rpc3BjX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2Rpc3BjX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9kc3NfZGlzcGNfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3NfZGlzcGNfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiZHNzX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0RTU19EU1NfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfZHNzX2Rpc3BjX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2Rpc3BjX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyoKKyAqICdkc2knIGNsYXNzCisgKiBkaXNwbGF5IHNlcmlhbCBpbnRlcmZhY2UgY29udHJvbGxlcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDQ0eHhfZHNpX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19BVVRPSURMRSB8IFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfAorCQkJICAgU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKKwkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfZHNpX2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gImRzaSIsCisJLnN5c2MJPSAmb21hcDQ0eHhfZHNpX3N5c2MsCit9OworCisvKiBkc3NfZHNpMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc19kc2kxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X2Rzc19kc2kxX2lycXNbXSA9IHsKKwl7IC5pcnEgPSA1MyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9kc3NfZHNpMV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5kbWFfcmVxID0gNzQgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9kc3NfZHNpMV9kbWFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NTgwMDQwMDAsCisJCS5wYV9lbmQJCT0gMHg1ODAwNDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsM19tYWluXzIgLT4gZHNzX2RzaTEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfZHNpMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfZHNpMV9od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19kc2kxX2RtYV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19kc2kxX2RtYV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2Rzc19kc2kxX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDQ0MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNDQxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IGRzc19kc2kxICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fZHNzX2RzaTEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX2RzaTFfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfZHNpMV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19kc2kxX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCit9OworCisvKiBkc3NfZHNpMSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZHNzX2RzaTFfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2wzX21haW5fMl9fZHNzX2RzaTEsCisJJm9tYXA0NHh4X2w0X3Blcl9fZHNzX2RzaTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZHNzX2RzaTFfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc19kc2kxIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2RzaV9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9kc3NfZHNpMV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19kc2kxX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9kc3NfZHNpMV9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19kc2kxX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gImRzc19mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9EU1NfRFNTX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2Rzc19kc2kxX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2RzaTFfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiBkc3NfZHNpMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc19kc2kyX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X2Rzc19kc2kyX2lycXNbXSA9IHsKKwl7IC5pcnEgPSA4NCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9kc3NfZHNpMl9zZG1hX3JlcXNbXSA9IHsKKwl7IC5kbWFfcmVxID0gODMgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9kc3NfZHNpMl9kbWFfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NTgwMDUwMDAsCisJCS5wYV9lbmQJCT0gMHg1ODAwNTFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsM19tYWluXzIgLT4gZHNzX2RzaTIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfZHNpMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfZHNpMl9od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19kc2kyX2RtYV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19kc2kyX2RtYV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2Rzc19kc2kyX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDQ1MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNDUxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IGRzc19kc2kyICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fZHNzX2RzaTIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX2RzaTJfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfZHNpMl9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19kc2kyX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCit9OworCisvKiBkc3NfZHNpMiBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZHNzX2RzaTJfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2wzX21haW5fMl9fZHNzX2RzaTIsCisJJm9tYXA0NHh4X2w0X3Blcl9fZHNzX2RzaTIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZHNzX2RzaTJfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzc19kc2kyIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2RzaV9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9kc3NfZHNpMl9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19kc2kyX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9kc3NfZHNpMl9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19kc2kyX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gImRzc19mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9EU1NfRFNTX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2Rzc19kc2kyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2RzaTJfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ2hkbWknIGNsYXNzCisgKiBoZG1pIGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X2hkbWlfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19SRVNFVF9TVEFUVVMgfCBTWVNDX0hBU19TSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfU09GVFJFU0VUKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCB8CisJCQkgICBTSURMRV9TTUFSVF9XS1VQKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X2hkbWlfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAiaGRtaSIsCisJLnN5c2MJPSAmb21hcDQ0eHhfaGRtaV9zeXNjLAorfTsKKworLyogZHNzX2hkbWkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9kc3NfaGRtaV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9kc3NfaGRtaV9pcnFzW10gPSB7CisJeyAuaXJxID0gMTAxICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X2Rzc19oZG1pX3NkbWFfcmVxc1tdID0geworCXsgLmRtYV9yZXEgPSA3NSArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2Rzc19oZG1pX2RtYV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg1ODAwNjAwMCwKKwkJLnBhX2VuZAkJPSAweDU4MDA2ZmZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGwzX21haW5fMiAtPiBkc3NfaGRtaSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2Rzc19oZG1pID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19oZG1pX2h3bW9kLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX2hkbWlfZG1hX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2hkbWlfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZHNzX2hkbWlfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNDYwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA0NmZmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gZHNzX2hkbWkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19kc3NfaGRtaSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfaGRtaV9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19oZG1pX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2hkbWlfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKK307CisKKy8qIGRzc19oZG1pIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9kc3NfaGRtaV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfaGRtaSwKKwkmb21hcDQ0eHhfbDRfcGVyX19kc3NfaGRtaSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9kc3NfaGRtaV9od21vZCA9IHsKKwkubmFtZQkJPSAiZHNzX2hkbWkiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfaGRtaV9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9kc3NfaGRtaV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19oZG1pX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9kc3NfaGRtaV9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19oZG1pX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gImRzc19mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9EU1NfRFNTX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2Rzc19oZG1pX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX2hkbWlfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ3JmYmknIGNsYXNzCisgKiByZW1vdGUgZnJhbWUgYnVmZmVyIGludGVyZmFjZQorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDQ0eHhfcmZiaV9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNDX0hBU19TSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9yZmJpX2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gInJmYmkiLAorCS5zeXNjCT0gJm9tYXA0NHh4X3JmYmlfc3lzYywKK307CisKKy8qIGRzc19yZmJpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZHNzX3JmYmlfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDQ0eHhfZHNzX3JmYmlfc2RtYV9yZXFzW10gPSB7CisJeyAuZG1hX3JlcSA9IDEzICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZHNzX3JmYmlfZG1hX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDU4MDAyMDAwLAorCQkucGFfZW5kCQk9IDB4NTgwMDIwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDNfbWFpbl8yIC0+IGRzc19yZmJpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX3JmYmkgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX3JmYmlfaHdtb2QsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfcmZiaV9kbWFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3NfcmZiaV9kbWFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9kc3NfcmZiaV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA0MjAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDQyMGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBkc3NfcmZiaSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX2Rzc19yZmJpID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19yZmJpX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX3JmYmlfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3NfcmZiaV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworLyogZHNzX3JmYmkgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2Rzc19yZmJpX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sM19tYWluXzJfX2Rzc19yZmJpLAorCSZvbWFwNDR4eF9sNF9wZXJfX2Rzc19yZmJpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc19yZmJpX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfcmZiaSIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9yZmJpX2h3bW9kX2NsYXNzLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9kc3NfcmZiaV9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc19yZmJpX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gImRzc19mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9EU1NfRFNTX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2Rzc19yZmJpX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNzX3JmYmlfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ3ZlbmMnIGNsYXNzCisgKiB2aWRlbyBlbmNvZGVyCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X3ZlbmNfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAidmVuYyIsCit9OworCisvKiBkc3NfdmVuYyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc192ZW5jX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZHNzX3ZlbmNfZG1hX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDU4MDAzMDAwLAorCQkucGFfZW5kCQk9IDB4NTgwMDMwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDNfbWFpbl8yIC0+IGRzc192ZW5jICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX3ZlbmMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX3ZlbmNfaHdtb2QsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfdmVuY19kbWFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3NfdmVuY19kbWFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9kc3NfdmVuY19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA0MzAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDQzMGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBkc3NfdmVuYyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX2Rzc192ZW5jID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc192ZW5jX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX3ZlbmNfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3NfdmVuY19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworLyogZHNzX3ZlbmMgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2Rzc192ZW5jX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sM19tYWluXzJfX2Rzc192ZW5jLAorCSZvbWFwNDR4eF9sNF9wZXJfX2Rzc192ZW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2Rzc192ZW5jX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3NfdmVuYyIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF92ZW5jX2h3bW9kX2NsYXNzLAorCS5tYWluX2Nsawk9ICJkc3NfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fRFNTX0RTU19DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9kc3NfdmVuY19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2Rzc192ZW5jX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyoKICAqICdncGlvJyBjbGFzcwogICogZ2VuZXJhbCBwdXJwb3NlIGlvIG1vZHVsZQogICovCkBAIC0xMDkzLDYgKzIwMzAsODMgQEAKIH07CiAKIC8qCisgKiAnaHNpJyBjbGFzcworICogbWlwaSBoaWdoLXNwZWVkIHN5bmNocm9ub3VzIHNlcmlhbCBpbnRlcmZhY2UgKG11bHRpY2hhbm5lbCBhbmQgZnVsbC1kdXBsZXgKKyAqIHNlcmlhbCBpZikKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X2hzaV9zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNDX0hBU19FTVVGUkVFIHwKKwkJCSAgIFNZU0NfSEFTX01JRExFTU9ERSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIFNJRExFX1NNQVJUX1dLVVAgfCBNU1RBTkRCWV9GT1JDRSB8IE1TVEFOREJZX05PIHwKKwkJCSAgIE1TVEFOREJZX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X2hzaV9od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJoc2kiLAorCS5zeXNjCT0gJm9tYXA0NHh4X2hzaV9zeXNjLAorfTsKKworLyogaHNpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfaHNpX2lycXNbXSA9IHsKKwl7IC5uYW1lID0gIm1wdV9wMSIsIC5pcnEgPSA2NyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKKwl7IC5uYW1lID0gIm1wdV9wMiIsIC5pcnEgPSA2OCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKKwl7IC5uYW1lID0gIm1wdV9kbWEiLCAuaXJxID0gNzEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCisvKiBoc2kgbWFzdGVyIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9oc2lfbWFzdGVyc1tdID0geworCSZvbWFwNDR4eF9oc2lfX2wzX21haW5fMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2hzaV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0YTA1ODAwMCwKKwkJLnBhX2VuZAkJPSAweDRhMDViZmZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NmZyAtPiBoc2kgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfY2ZnX19oc2kgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfY2ZnX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfaHNpX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfaHNpX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaHNpX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogaHNpIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9oc2lfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X2NmZ19faHNpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2hzaV9od21vZCA9IHsKKwkubmFtZQkJPSAiaHNpIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2hzaV9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9oc2lfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9oc2lfaXJxcyksCisJLm1haW5fY2xrCT0gImhzaV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDNJTklUX0hTSV9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9oc2lfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9oc2lfc2xhdmVzKSwKKwkubWFzdGVycwk9IG9tYXA0NHh4X2hzaV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaHNpX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qCiAgKiAnaTJjJyBjbGFzcwogICogbXVsdGltYXN0ZXIgaGlnaC1zcGVlZCBpMmMgY29udHJvbGxlcgogICovCkBAIC0xMzI2LDYgKzIzNDAsMTg4IEBACiB9OwogCiAvKgorICogJ2lwdScgY2xhc3MKKyAqIGltYWdpbmcgcHJvY2Vzc29yIHVuaXQKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfaXB1X2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gImlwdSIsCit9OworCisvKiBpcHUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9pcHVfaXJxc1tdID0geworCXsgLmlycSA9IDEwMCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyBvbWFwNDR4eF9pcHVfYzBfcmVzZXRzW10gPSB7CisJeyAubmFtZSA9ICJjcHUwIiwgLnJzdF9zaGlmdCA9IDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyBvbWFwNDR4eF9pcHVfYzFfcmVzZXRzW10gPSB7CisJeyAubmFtZSA9ICJjcHUxIiwgLnJzdF9zaGlmdCA9IDEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyBvbWFwNDR4eF9pcHVfcmVzZXRzW10gPSB7CisJeyAubmFtZSA9ICJtbXVfY2FjaGUiLCAucnN0X3NoaWZ0ID0gMiB9LAorfTsKKworLyogaXB1IG1hc3RlciBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfaXB1X21hc3RlcnNbXSA9IHsKKwkmb21hcDQ0eHhfaXB1X19sM19tYWluXzIsCit9OworCisvKiBsM19tYWluXzIgLT4gaXB1ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9faXB1ID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2lwdV9od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBpcHUgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2lwdV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDNfbWFpbl8yX19pcHUsCit9OworCisvKiBQc2V1ZG8gaHdtb2QgZm9yIHJlc2V0IGNvbnRyb2wgcHVycG9zZSBvbmx5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfaXB1X2MwX2h3bW9kID0geworCS5uYW1lCQk9ICJpcHVfYzAiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfaXB1X2h3bW9kX2NsYXNzLAorCS5mbGFncwkJPSBIV01PRF9JTklUX05PX1JFU0VULAorCS5yc3RfbGluZXMJPSBvbWFwNDR4eF9pcHVfYzBfcmVzZXRzLAorCS5yc3RfbGluZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pcHVfYzBfcmVzZXRzKSwKKwkucHJjbQkJPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5yc3RjdHJsX3JlZyA9IE9NQVA0NDMwX1JNX0RVQ0FUSV9SU1RDVFJMLAorCQl9LAorCX0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogUHNldWRvIGh3bW9kIGZvciByZXNldCBjb250cm9sIHB1cnBvc2Ugb25seSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2lwdV9jMV9od21vZCA9IHsKKwkubmFtZQkJPSAiaXB1X2MxIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2lwdV9od21vZF9jbGFzcywKKwkuZmxhZ3MJCT0gSFdNT0RfSU5JVF9OT19SRVNFVCwKKwkucnN0X2xpbmVzCT0gb21hcDQ0eHhfaXB1X2MxX3Jlc2V0cywKKwkucnN0X2xpbmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaXB1X2MxX3Jlc2V0cyksCisJLnByY20JCT0geworCQkub21hcDQgPSB7CisJCQkucnN0Y3RybF9yZWcgPSBPTUFQNDQzMF9STV9EVUNBVElfUlNUQ1RSTCwKKwkJfSwKKwl9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9pcHVfaHdtb2QgPSB7CisJLm5hbWUJCT0gImlwdSIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9pcHVfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfaXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaXB1X2lycXMpLAorCS5yc3RfbGluZXMJPSBvbWFwNDR4eF9pcHVfcmVzZXRzLAorCS5yc3RfbGluZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pcHVfcmVzZXRzKSwKKwkubWFpbl9jbGsJPSAiaXB1X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9EVUNBVElfRFVDQVRJX0NMS0NUUkwsCisJCQkucnN0Y3RybF9yZWcgPSBPTUFQNDQzMF9STV9EVUNBVElfUlNUQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfaXB1X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaXB1X3NsYXZlcyksCisJLm1hc3RlcnMJPSBvbWFwNDR4eF9pcHVfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2lwdV9tYXN0ZXJzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ2lzcycgY2xhc3MKKyAqIGV4dGVybmFsIGltYWdlcyBzZW5zb3IgcGl4ZWwgZGF0YSBwcm9jZXNzb3IKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X2lzc19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX01JRExFTU9ERSB8IFNZU0NfSEFTX1JFU0VUX1NUQVRVUyB8CisJCQkgICBTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19TT0ZUUkVTRVQpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIFNJRExFX1NNQVJUX1dLVVAgfCBNU1RBTkRCWV9GT1JDRSB8IE1TVEFOREJZX05PIHwKKwkJCSAgIE1TVEFOREJZX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X2lzc19od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJpc3MiLAorCS5zeXNjCT0gJm9tYXA0NHh4X2lzc19zeXNjLAorfTsKKworLyogaXNzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfaXNzX2lycXNbXSA9IHsKKwl7IC5pcnEgPSAyNCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9pc3Nfc2RtYV9yZXFzW10gPSB7CisJeyAubmFtZSA9ICIxIiwgLmRtYV9yZXEgPSA4ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAiMiIsIC5kbWFfcmVxID0gOSArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gIjMiLCAuZG1hX3JlcSA9IDExICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAiNCIsIC5kbWFfcmVxID0gMTIgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCisvKiBpc3MgbWFzdGVyIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9pc3NfbWFzdGVyc1tdID0geworCSZvbWFwNDR4eF9pc3NfX2wzX21haW5fMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2lzc19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg1MjAwMDAwMCwKKwkJLnBhX2VuZAkJPSAweDUyMDAwMGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGwzX21haW5fMiAtPiBpc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19pc3MgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfaXNzX2h3bW9kLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfaXNzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaXNzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogaXNzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9pc3Nfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2wzX21haW5fMl9faXNzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgaXNzX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJjdHJsY2xrIiwgLmNsayA9ICJpc3NfY3RybGNsayIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9pc3NfaHdtb2QgPSB7CisJLm5hbWUJCT0gImlzcyIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9pc3NfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfaXNzX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaXNzX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9pc3Nfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pc3Nfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiaXNzX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9DQU1fSVNTX0NMS0NUUkwsCisJCX0sCisJfSwKKwkub3B0X2Nsa3MJPSBpc3Nfb3B0X2Nsa3MsCisJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoaXNzX29wdF9jbGtzKSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2lzc19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2lzc19zbGF2ZXMpLAorCS5tYXN0ZXJzCT0gb21hcDQ0eHhfaXNzX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pc3NfbWFzdGVycyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyoKICAqICdpdmEnIGNsYXNzCiAgKiBtdWx0aS1zdGFuZGFyZCB2aWRlbyBlbmNvZGVyL2RlY29kZXIgaGFyZHdhcmUgYWNjZWxlcmF0b3IKICAqLwpAQCAtMTQzNSw2ICsyNjMxLDEwODQgQEAKIH07CiAKIC8qCisgKiAna2JkJyBjbGFzcworICoga2V5Ym9hcmQgY29udHJvbGxlcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDQ0eHhfa2JkX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19BVVRPSURMRSB8IFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfAorCQkJICAgU1lTQ19IQVNfRU1VRlJFRSB8IFNZU0NfSEFTX0VOQVdBS0VVUCB8CisJCQkgICBTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19TT0ZUUkVTRVQgfAorCQkJICAgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9rYmRfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAia2JkIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9rYmRfc3lzYywKK307CisKKy8qIGtiZCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2tiZF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9rYmRfaXJxc1tdID0geworCXsgLmlycSA9IDEyMCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2tiZF9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0YTMxYzAwMCwKKwkJLnBhX2VuZAkJPSAweDRhMzFjMDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3drdXAgLT4ga2JkICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3drdXBfX2tiZCA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF93a3VwX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfa2JkX2h3bW9kLAorCS5jbGsJCT0gImw0X3drdXBfY2xrX211eF9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfa2JkX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfa2JkX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyoga2JkIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9rYmRfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3drdXBfX2tiZCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9rYmRfaHdtb2QgPSB7CisJLm5hbWUJCT0gImtiZCIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9rYmRfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfa2JkX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfa2JkX2lycXMpLAorCS5tYWluX2Nsawk9ICJrYmRfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX1dLVVBfS0VZQk9BUkRfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfa2JkX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfa2JkX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyoKKyAqICdtYWlsYm94JyBjbGFzcworICogbWFpbGJveCBtb2R1bGUgYWxsb3dpbmcgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBvbi1jaGlwIHByb2Nlc3NvcnMgdXNpbmcgYQorICogcXVldWVkIG1haWxib3gtaW50ZXJydXB0IG1lY2hhbmlzbS4KKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X21haWxib3hfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19SRVNFVF9TVEFUVVMgfCBTWVNDX0hBU19TSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfU09GVFJFU0VUKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9tYWlsYm94X2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gIm1haWxib3giLAorCS5zeXNjCT0gJm9tYXA0NHh4X21haWxib3hfc3lzYywKK307CisKKy8qIG1haWxib3ggKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tYWlsYm94X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X21haWxib3hfaXJxc1tdID0geworCXsgLmlycSA9IDI2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfbWFpbGJveF9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0YTBmNDAwMCwKKwkJLnBhX2VuZAkJPSAweDRhMGY0MWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2NmZyAtPiBtYWlsYm94ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2NmZ19fbWFpbGJveCA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9jZmdfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9tYWlsYm94X2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbWFpbGJveF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21haWxib3hfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtYWlsYm94IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9tYWlsYm94X3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9jZmdfX21haWxib3gsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbWFpbGJveF9od21vZCA9IHsKKwkubmFtZQkJPSAibWFpbGJveCIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9tYWlsYm94X2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X21haWxib3hfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tYWlsYm94X2lycXMpLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDRDRkdfTUFJTEJPWF9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9tYWlsYm94X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWFpbGJveF9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qCisgKiAnbWNic3AnIGNsYXNzCisgKiBtdWx0aSBjaGFubmVsIGJ1ZmZlcmVkIHNlcmlhbCBwb3J0IGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X21jYnNwX3N5c2MgPSB7CisJLnN5c2Nfb2Zmcwk9IDB4MDA4YywKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwgU1lTQ19IQVNfRU5BV0FLRVVQIHwKKwkJCSAgIFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfbWNic3BfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAibWNic3AiLAorCS5zeXNjCT0gJm9tYXA0NHh4X21jYnNwX3N5c2MsCisJLnJldgk9IE1DQlNQX0NPTkZJR19UWVBFNCwKK307CisKKy8qIG1jYnNwMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21jYnNwMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9tY2JzcDFfaXJxc1tdID0geworCXsgLmlycSA9IDE3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X21jYnNwMV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSAzMiArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAzMyArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X21jYnNwMV9hZGRyc1tdID0geworCXsKKwkJLm5hbWUJCT0gIm1wdSIsCisJCS5wYV9zdGFydAk9IDB4NDAxMjIwMDAsCisJCS5wYV9lbmQJCT0gMHg0MDEyMjBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9hYmUgLT4gbWNic3AxICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fbWNic3AxID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X21jYnNwMV9od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X21jYnNwMV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jYnNwMV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfbWNic3AxX2RtYV9hZGRyc1tdID0geworCXsKKwkJLm5hbWUJCT0gImRtYSIsCisJCS5wYV9zdGFydAk9IDB4NDkwMjIwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAyMjBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9hYmUgLT4gbWNic3AxIChkbWEpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fbWNic3AxX2RtYSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9tY2JzcDFfaHdtb2QsCisJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9tY2JzcDFfZG1hX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNic3AxX2RtYV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIG1jYnNwMSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfbWNic3AxX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9hYmVfX21jYnNwMSwKKwkmb21hcDQ0eHhfbDRfYWJlX19tY2JzcDFfZG1hLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21jYnNwMV9od21vZCA9IHsKKwkubmFtZQkJPSAibWNic3AxIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X21jYnNwX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X21jYnNwMV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jYnNwMV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfbWNic3AxX3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNic3AxX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gIm1jYnNwMV9mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTTFfQUJFX01DQlNQMV9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9tY2JzcDFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcDFfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiBtY2JzcDIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tY2JzcDJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfbWNic3AyX2lycXNbXSA9IHsKKwl7IC5pcnEgPSAyMiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9tY2JzcDJfc2RtYV9yZXFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsIC5kbWFfcmVxID0gMTYgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gMTcgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9tY2JzcDJfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtcHUiLAorCQkucGFfc3RhcnQJPSAweDQwMTI0MDAwLAorCQkucGFfZW5kCQk9IDB4NDAxMjQwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfYWJlIC0+IG1jYnNwMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX21jYnNwMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9tY2JzcDJfaHdtb2QsCisJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9tY2JzcDJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcDJfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X21jYnNwMl9kbWFfYWRkcnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJkbWEiLAorCQkucGFfc3RhcnQJPSAweDQ5MDI0MDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMjQwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfYWJlIC0+IG1jYnNwMiAoZG1hKSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX21jYnNwMl9kbWEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3AyX2h3bW9kLAorCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbWNic3AyX2RtYV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jYnNwMl9kbWFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtY2JzcDIgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X21jYnNwMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfYWJlX19tY2JzcDIsCisJJm9tYXA0NHh4X2w0X2FiZV9fbWNic3AyX2RtYSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tY2JzcDJfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jYnNwMiIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9tY2JzcF9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9tY2JzcDJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcDJfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXA0NHh4X21jYnNwMl9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jYnNwMl9zZG1hX3JlcXMpLAorCS5tYWluX2Nsawk9ICJtY2JzcDJfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDJfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfbWNic3AyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNic3AyX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogbWNic3AzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbWNic3AzX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X21jYnNwM19pcnFzW10gPSB7CisJeyAuaXJxID0gMjMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDQ0eHhfbWNic3AzX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDE4ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IDE5ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfbWNic3AzX2FkZHJzW10gPSB7CisJeworCQkubmFtZQkJPSAibXB1IiwKKwkJLnBhX3N0YXJ0CT0gMHg0MDEyNjAwMCwKKwkJLnBhX2VuZAkJPSAweDQwMTI2MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2FiZSAtPiBtY2JzcDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX19tY2JzcDMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3AzX2h3bW9kLAorCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbWNic3AzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNic3AzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9tY2JzcDNfZG1hX2FkZHJzW10gPSB7CisJeworCQkubmFtZQkJPSAiZG1hIiwKKwkJLnBhX3N0YXJ0CT0gMHg0OTAyNjAwMCwKKwkJLnBhX2VuZAkJPSAweDQ5MDI2MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2FiZSAtPiBtY2JzcDMgKGRtYSkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX19tY2JzcDNfZG1hID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X21jYnNwM19od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X21jYnNwM19kbWFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcDNfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3AzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9tY2JzcDNfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X2FiZV9fbWNic3AzLAorCSZvbWFwNDR4eF9sNF9hYmVfX21jYnNwM19kbWEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbWNic3AzX2h3bW9kID0geworCS5uYW1lCQk9ICJtY2JzcDMiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfbWNic3BfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfbWNic3AzX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNic3AzX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9tY2JzcDNfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcDNfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibWNic3AzX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNMV9BQkVfTUNCU1AzX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X21jYnNwM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jYnNwM19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIG1jYnNwNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21jYnNwNF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9tY2JzcDRfaXJxc1tdID0geworCXsgLmlycSA9IDE2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X21jYnNwNF9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSAzMCArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAzMSArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X21jYnNwNF9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA5NjAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDk2MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBtY2JzcDQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19tY2JzcDQgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNic3A0X2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbWNic3A0X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNic3A0X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNic3A0IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9tY2JzcDRfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fbWNic3A0LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21jYnNwNF9od21vZCA9IHsKKwkubmFtZQkJPSAibWNic3A0IiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X21jYnNwX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X21jYnNwNF9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jYnNwNF9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfbWNic3A0X3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNic3A0X3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gIm1jYnNwNF9mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9NQ0JTUDRfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfbWNic3A0X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNic3A0X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyoKKyAqICdtY3BkbScgY2xhc3MKKyAqIG11bHRpIGNoYW5uZWwgcGRtIGNvbnRyb2xsZXIgKHByb3ByaWV0YXJ5IGludGVyZmFjZSB3aXRoIHBob2VuaXggcG93ZXIKKyAqIGljKQorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDQ0eHhfbWNwZG1fc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19FTVVGUkVFIHwgU1lTQ19IQVNfUkVTRVRfU1RBVFVTIHwKKwkJCSAgIFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgU0lETEVfU01BUlRfV0tVUCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9tY3BkbV9od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJtY3BkbSIsCisJLnN5c2MJPSAmb21hcDQ0eHhfbWNwZG1fc3lzYywKK307CisKKy8qIG1jcGRtICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbWNwZG1faHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfbWNwZG1faXJxc1tdID0geworCXsgLmlycSA9IDExMiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9tY3BkbV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInVwX2xpbmsiLCAuZG1hX3JlcSA9IDY0ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAiZG5fbGluayIsIC5kbWFfcmVxID0gNjUgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9tY3BkbV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0MDEzMjAwMCwKKwkJLnBhX2VuZAkJPSAweDQwMTMyMDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2FiZSAtPiBtY3BkbSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX21jcGRtID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X21jcGRtX2h3bW9kLAorCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbWNwZG1fYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3BkbV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfbWNwZG1fZG1hX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ5MDMyMDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMzIwN2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfYWJlIC0+IG1jcGRtIChkbWEpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fbWNwZG1fZG1hID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X21jcGRtX2h3bW9kLAorCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbWNwZG1fZG1hX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNwZG1fZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNwZG0gc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X21jcGRtX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9hYmVfX21jcGRtLAorCSZvbWFwNDR4eF9sNF9hYmVfX21jcGRtX2RtYSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tY3BkbV9od21vZCA9IHsKKwkubmFtZQkJPSAibWNwZG0iLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfbWNwZG1faHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfbWNwZG1faXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3BkbV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfbWNwZG1fc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3BkbV9zZG1hX3JlcXMpLAorCS5tYWluX2Nsawk9ICJtY3BkbV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ00xX0FCRV9QRE1fQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfbWNwZG1fc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3BkbV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qCisgKiAnbWNzcGknIGNsYXNzCisgKiBtdWx0aWNoYW5uZWwgc2VyaWFsIHBvcnQgaW50ZXJmYWNlIChtY3NwaSkgLyBtYXN0ZXIvc2xhdmUgc3luY2hyb25vdXMgc2VyaWFsCisgKiBidXMKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X21jc3BpX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfRU1VRlJFRSB8IFNZU0NfSEFTX1JFU0VUX1NUQVRVUyB8CisJCQkgICBTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19TT0ZUUkVTRVQpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIFNJRExFX1NNQVJUX1dLVVApLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfbWNzcGlfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAibWNzcGkiLAorCS5zeXNjCT0gJm9tYXA0NHh4X21jc3BpX3N5c2MsCisJLnJldgk9IE9NQVA0X01DU1BJX1JFViwKK307CisKKy8qIG1jc3BpMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21jc3BpMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9tY3NwaTFfaXJxc1tdID0geworCXsgLmlycSA9IDY1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X21jc3BpMV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4MCIsIC5kbWFfcmVxID0gMzQgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJyeDAiLCAuZG1hX3JlcSA9IDM1ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAidHgxIiwgLmRtYV9yZXEgPSAzNiArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gInJ4MSIsIC5kbWFfcmVxID0gMzcgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJ0eDIiLCAuZG1hX3JlcSA9IDM4ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAicngyIiwgLmRtYV9yZXEgPSAzOSArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gInR4MyIsIC5kbWFfcmVxID0gNDAgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJyeDMiLCAuZG1hX3JlcSA9IDQxICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfbWNzcGkxX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDk4MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOTgxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IG1jc3BpMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX21jc3BpMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9tY3NwaTFfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9tY3NwaTFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3NwaTFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtY3NwaTEgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X21jc3BpMV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX19tY3NwaTEsCit9OworCisvKiBtY3NwaTEgZGV2X2F0dHIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2X2F0dHIgbWNzcGkxX2Rldl9hdHRyID0geworCS5udW1fY2hpcHNlbGVjdAk9IDQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbWNzcGkxX2h3bW9kID0geworCS5uYW1lCQk9ICJtY3NwaTEiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfbWNzcGlfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfbWNzcGkxX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNzcGkxX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9tY3NwaTFfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3NwaTFfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibWNzcGkxX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0w0UEVSX01DU1BJMV9DTEtDVFJMLAorCQl9LAorCX0sCisJLmRldl9hdHRyCT0gJm1jc3BpMV9kZXZfYXR0ciwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X21jc3BpMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jc3BpMV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIG1jc3BpMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21jc3BpMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9tY3NwaTJfaXJxc1tdID0geworCXsgLmlycSA9IDY2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X21jc3BpMl9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4MCIsIC5kbWFfcmVxID0gNDIgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJyeDAiLCAuZG1hX3JlcSA9IDQzICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAidHgxIiwgLmRtYV9yZXEgPSA0NCArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gInJ4MSIsIC5kbWFfcmVxID0gNDUgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9tY3NwaTJfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwOWEwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA5YTFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gbWNzcGkyICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fbWNzcGkyID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X21jc3BpMl9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X21jc3BpMl9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jc3BpMl9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIG1jc3BpMiBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfbWNzcGkyX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9wZXJfX21jc3BpMiwKK307CisKKy8qIG1jc3BpMiBkZXZfYXR0ciAqLworc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9kZXZfYXR0ciBtY3NwaTJfZGV2X2F0dHIgPSB7CisJLm51bV9jaGlwc2VsZWN0CT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tY3NwaTJfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1jc3BpMiIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9tY3NwaV9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9tY3NwaTJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3NwaTJfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXA0NHh4X21jc3BpMl9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jc3BpMl9zZG1hX3JlcXMpLAorCS5tYWluX2Nsawk9ICJtY3NwaTJfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkyX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuZGV2X2F0dHIJPSAmbWNzcGkyX2Rldl9hdHRyLAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfbWNzcGkyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNzcGkyX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogbWNzcGkzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbWNzcGkzX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X21jc3BpM19pcnFzW10gPSB7CisJeyAuaXJxID0gOTEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDQ0eHhfbWNzcGkzX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgwIiwgLmRtYV9yZXEgPSAxNCArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gInJ4MCIsIC5kbWFfcmVxID0gMTUgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJ0eDEiLCAuZG1hX3JlcSA9IDIyICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAicngxIiwgLmRtYV9yZXEgPSAyMyArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X21jc3BpM19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODBiODAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MGI4MWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBtY3NwaTMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19tY3NwaTMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNzcGkzX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbWNzcGkzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNzcGkzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNzcGkzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9tY3NwaTNfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fbWNzcGkzLAorfTsKKworLyogbWNzcGkzIGRldl9hdHRyICovCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyIG1jc3BpM19kZXZfYXR0ciA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21jc3BpM19od21vZCA9IHsKKwkubmFtZQkJPSAibWNzcGkzIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X21jc3BpX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X21jc3BpM19pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jc3BpM19pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfbWNzcGkzX3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNzcGkzX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gIm1jc3BpM19mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9NQ1NQSTNfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5kZXZfYXR0cgk9ICZtY3NwaTNfZGV2X2F0dHIsCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9tY3NwaTNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3NwaTNfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiBtY3NwaTQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tY3NwaTRfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfbWNzcGk0X2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0OCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9tY3NwaTRfc2RtYV9yZXFzW10gPSB7CisJeyAubmFtZSA9ICJ0eDAiLCAuZG1hX3JlcSA9IDY5ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAicngwIiwgLmRtYV9yZXEgPSA3MCArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X21jc3BpNF9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODBiYTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MGJhMWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBtY3NwaTQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19tY3NwaTQgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbWNzcGk0X2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbWNzcGk0X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNzcGk0X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbWNzcGk0IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9tY3NwaTRfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fbWNzcGk0LAorfTsKKworLyogbWNzcGk0IGRldl9hdHRyICovCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2Rldl9hdHRyIG1jc3BpNF9kZXZfYXR0ciA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21jc3BpNF9od21vZCA9IHsKKwkubmFtZQkJPSAibWNzcGk0IiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X21jc3BpX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X21jc3BpNF9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21jc3BpNF9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfbWNzcGk0X3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbWNzcGk0X3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gIm1jc3BpNF9mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9NQ1NQSTRfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5kZXZfYXR0cgk9ICZtY3NwaTRfZGV2X2F0dHIsCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9tY3NwaTRfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tY3NwaTRfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ21tYycgY2xhc3MKKyAqIG11bHRpbWVkaWEgY2FyZCBoaWdoLXNwZWVkL3NkL3NkaW8gKG1tYy9zZC9zZGlvKSBob3N0IGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X21tY19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0VNVUZSRUUgfCBTWVNDX0hBU19NSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfUkVTRVRfU1RBVFVTIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKKwkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgU0lETEVfU01BUlRfV0tVUCB8IE1TVEFOREJZX0ZPUkNFIHwgTVNUQU5EQllfTk8gfAorCQkJICAgTVNUQU5EQllfU01BUlQpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfbW1jX2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gIm1tYyIsCisJLnN5c2MJPSAmb21hcDQ0eHhfbW1jX3N5c2MsCit9OworCisvKiBtbWMxICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9tbWMxX2lycXNbXSA9IHsKKwl7IC5pcnEgPSA4MyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9tbWMxX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDYwICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IDYxICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorfTsKKworLyogbW1jMSBtYXN0ZXIgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X21tYzFfbWFzdGVyc1tdID0geworCSZvbWFwNDR4eF9tbWMxX19sM19tYWluXzEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9tbWMxX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDljMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwOWMzZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IG1tYzEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19tbWMxID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X21tYzFfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9tbWMxX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jMV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIG1tYzEgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X21tYzFfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fbW1jMSwKK307CisKKy8qIG1tYzEgZGV2X2F0dHIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKKwkuZmxhZ3MJPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tbWMxX2h3bW9kID0geworCS5uYW1lCQk9ICJtbWMxIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X21tY19od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9tbWMxX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jMV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfbW1jMV9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21tYzFfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibW1jMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDNJTklUX01NQzFfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5kZXZfYXR0cgk9ICZtbWMxX2Rldl9hdHRyLAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfbW1jMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21tYzFfc2xhdmVzKSwKKwkubWFzdGVycwk9IG9tYXA0NHh4X21tYzFfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21tYzFfbWFzdGVycyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogbW1jMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X21tYzJfaXJxc1tdID0geworCXsgLmlycSA9IDg2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X21tYzJfc2RtYV9yZXFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsIC5kbWFfcmVxID0gNDYgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gNDcgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCisvKiBtbWMyIG1hc3RlciBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfbW1jMl9tYXN0ZXJzW10gPSB7CisJJm9tYXA0NHh4X21tYzJfX2wzX21haW5fMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X21tYzJfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwYjQwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODBiNDNmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gbW1jMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX21tYzIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbW1jMl9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X21tYzJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tbWMyX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbW1jMiBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfbW1jMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX19tbWMyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21tYzJfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1tYzIiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfbW1jX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X21tYzJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tbWMyX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9tbWMyX3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jMl9zZG1hX3JlcXMpLAorCS5tYWluX2Nsawk9ICJtbWMyX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MM0lOSVRfTU1DMl9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9tbWMyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jMl9zbGF2ZXMpLAorCS5tYXN0ZXJzCT0gb21hcDQ0eHhfbW1jMl9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jMl9tYXN0ZXJzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiBtbWMzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbW1jM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9tbWMzX2lycXNbXSA9IHsKKwl7IC5pcnEgPSA5NCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9tbWMzX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDc2ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IDc3ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfbW1jM19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODBhZDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MGFkM2ZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBtbWMzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fbW1jMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9tbWMzX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfbW1jM19hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21tYzNfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBtbWMzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9tbWMzX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9wZXJfX21tYzMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfbW1jM19od21vZCA9IHsKKwkubmFtZQkJPSAibW1jMyIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9tbWNfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfbW1jM19pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21tYzNfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXA0NHh4X21tYzNfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tbWMzX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gIm1tYzNfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0w0UEVSX01NQ1NEM19DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9tbWMzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jM19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIG1tYzQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tbWM0X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X21tYzRfaXJxc1tdID0geworCXsgLmlycSA9IDk2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X21tYzRfc2RtYV9yZXFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsIC5kbWFfcmVxID0gNTYgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gNTcgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9tbWM0X2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MGQxMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwZDEzZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IG1tYzQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19tbWM0ID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X21tYzRfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9tbWM0X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jNF9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIG1tYzQgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X21tYzRfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fbW1jNCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9tbWM0X2h3bW9kID0geworCS5uYW1lCQk9ICJtbWM0IiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X21tY19od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9tbWM0X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jNF9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfbW1jNF9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21tYzRfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAibW1jNF9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0Q0X0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X21tYzRfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tbWM0X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogbW1jNSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21tYzVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfbW1jNV9pcnFzW10gPSB7CisJeyAuaXJxID0gNTkgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDQ0eHhfbW1jNV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSA1OCArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSA1OSArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X21tYzVfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwZDUwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODBkNTNmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gbW1jNSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX21tYzUgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfbW1jNV9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X21tYzVfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tbWM1X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbW1jNSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfbW1jNV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX19tbWM1LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X21tYzVfaHdtb2QgPSB7CisJLm5hbWUJCT0gIm1tYzUiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfbW1jX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X21tYzVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9tbWM1X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9tbWM1X3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfbW1jNV9zZG1hX3JlcXMpLAorCS5tYWluX2Nsawk9ICJtbWM1X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9NTUNTRDVfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfbW1jNV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X21tYzVfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgogICogJ21wdScgY2xhc3MKICAqIG1wdSBzdWItc3lzdGVtCiAgKi8KQEAgLTE2MzksNiArMzkxMyw2NzYgQEAKIH07CiAKIC8qCisgKiAnc3BpbmxvY2snIGNsYXNzCisgKiBzcGlubG9jayBwcm92aWRlcyBoYXJkd2FyZSBhc3Npc3RhbmNlIGZvciBzeW5jaHJvbml6aW5nIHRoZSBwcm9jZXNzZXMKKyAqIHJ1bm5pbmcgb24gbXVsdGlwbGUgcHJvY2Vzc29ycworICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDQ0eHhfc3BpbmxvY2tfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8CisJCQkgICBTWVNDX0hBU19FTkFXQUtFVVAgfCBTWVNDX0hBU19TSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCB8CisJCQkgICBTSURMRV9TTUFSVF9XS1VQKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X3NwaW5sb2NrX2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gInNwaW5sb2NrIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9zcGlubG9ja19zeXNjLAorfTsKKworLyogc3BpbmxvY2sgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9zcGlubG9ja19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X3NwaW5sb2NrX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDRhMGY2MDAwLAorCQkucGFfZW5kCQk9IDB4NGEwZjZmZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY2ZnIC0+IHNwaW5sb2NrICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2NmZ19fc3BpbmxvY2sgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfY2ZnX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfc3BpbmxvY2tfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9zcGlubG9ja19hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3NwaW5sb2NrX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogc3BpbmxvY2sgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3NwaW5sb2NrX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9jZmdfX3NwaW5sb2NrLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3NwaW5sb2NrX2h3bW9kID0geworCS5uYW1lCQk9ICJzcGlubG9jayIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9zcGlubG9ja19od21vZF9jbGFzcywKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDRDRkdfSFdfU0VNX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X3NwaW5sb2NrX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfc3BpbmxvY2tfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ3RpbWVyJyBjbGFzcworICogZ2VuZXJhbCBwdXJwb3NlIHRpbWVyIG1vZHVsZSB3aXRoIGFjY3VyYXRlIDFtcyB0aWNrCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHNldmVyYWwgdmFyaWFudHM6IFsndGltZXJfMW1zJywgJ3RpbWVyJ10KKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X3RpbWVyXzFtc19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQVVUT0lETEUgfCBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwKKwkJCSAgIFNZU0NfSEFTX0VNVUZSRUUgfCBTWVNDX0hBU19FTkFXQUtFVVAgfAorCQkJICAgU1lTQ19IQVNfU0lETEVNT0RFIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKKwkJCSAgIFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfdGltZXJfMW1zX2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gInRpbWVyIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF90aW1lcl8xbXNfc3lzYywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDQ0eHhfdGltZXJfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19FTVVGUkVFIHwgU1lTQ19IQVNfUkVTRVRfU1RBVFVTIHwKKwkJCSAgIFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgU0lETEVfU01BUlRfV0tVUCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF90aW1lcl9od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJ0aW1lciIsCisJLnN5c2MJPSAmb21hcDQ0eHhfdGltZXJfc3lzYywKK307CisKKy8qIHRpbWVyMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3RpbWVyMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF90aW1lcjFfaXJxc1tdID0geworCXsgLmlycSA9IDM3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfdGltZXIxX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDRhMzE4MDAwLAorCQkucGFfZW5kCQk9IDB4NGEzMTgwN2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfd2t1cCAtPiB0aW1lcjEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfd2t1cF9fdGltZXIxID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3drdXBfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjFfaHdtb2QsCisJLmNsawkJPSAibDRfd2t1cF9jbGtfbXV4X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF90aW1lcjFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjEgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3RpbWVyMV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfd2t1cF9fdGltZXIxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3RpbWVyMV9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIxIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X3RpbWVyXzFtc19od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF90aW1lcjFfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjFfaXJxcyksCisJLm1haW5fY2xrCT0gInRpbWVyMV9mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9XS1VQX1RJTUVSMV9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF90aW1lcjFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjFfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiB0aW1lcjIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF90aW1lcjJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfdGltZXIyX2lycXNbXSA9IHsKKwl7IC5pcnEgPSAzOCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X3RpbWVyMl9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODAzMjAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDMyMDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiB0aW1lcjIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX190aW1lcjIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfdGltZXIyX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfdGltZXIyX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXIyX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIyIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF90aW1lcjJfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fdGltZXIyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3RpbWVyMl9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIyIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X3RpbWVyXzFtc19od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF90aW1lcjJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjJfaXJxcyksCisJLm1haW5fY2xrCT0gInRpbWVyMl9mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSMl9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF90aW1lcjJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjJfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiB0aW1lcjMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF90aW1lcjNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfdGltZXIzX2lycXNbXSA9IHsKKwl7IC5pcnEgPSAzOSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X3RpbWVyM19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODAzNDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDM0MDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiB0aW1lcjMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX190aW1lcjMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfdGltZXIzX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfdGltZXIzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXIzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF90aW1lcjNfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fdGltZXIzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3RpbWVyM19od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIzIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X3RpbWVyX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X3RpbWVyM19pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyM19pcnFzKSwKKwkubWFpbl9jbGsJPSAidGltZXIzX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIzX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X3RpbWVyM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyM19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIHRpbWVyNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3RpbWVyNF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF90aW1lcjRfaXJxc1tdID0geworCXsgLmlycSA9IDQwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfdGltZXI0X2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDM2MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwMzYwN2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IHRpbWVyNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX3RpbWVyNCA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjRfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF90aW1lcjRfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjRfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjQgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3RpbWVyNF9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX190aW1lcjQsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI0X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjQiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfdGltZXI0X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI0X2lycXMpLAorCS5tYWluX2Nsawk9ICJ0aW1lcjRfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjRfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfdGltZXI0X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI0X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogdGltZXI1ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI1X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X3RpbWVyNV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF90aW1lcjVfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDAxMzgwMDAsCisJCS5wYV9lbmQJCT0gMHg0MDEzODA3ZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9hYmUgLT4gdGltZXI1ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fdGltZXI1ID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyNV9od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyNV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyNV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfdGltZXI1X2RtYV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0OTAzODAwMCwKKwkJLnBhX2VuZAkJPSAweDQ5MDM4MDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2FiZSAtPiB0aW1lcjUgKGRtYSkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX190aW1lcjVfZG1hID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyNV9od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyNV9kbWFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjVfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI1IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF90aW1lcjVfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X2FiZV9fdGltZXI1LAorCSZvbWFwNDR4eF9sNF9hYmVfX3RpbWVyNV9kbWEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI1X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjUiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfdGltZXI1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI1X2lycXMpLAorCS5tYWluX2Nsawk9ICJ0aW1lcjVfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ00xX0FCRV9USU1FUjVfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfdGltZXI1X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI1X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogdGltZXI2ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI2X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X3RpbWVyNl9pcnFzW10gPSB7CisJeyAuaXJxID0gNDIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF90aW1lcjZfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDAxM2EwMDAsCisJCS5wYV9lbmQJCT0gMHg0MDEzYTA3ZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9hYmUgLT4gdGltZXI2ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fdGltZXI2ID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyNl9od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyNl9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyNl9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfdGltZXI2X2RtYV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0OTAzYTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ5MDNhMDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2FiZSAtPiB0aW1lcjYgKGRtYSkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX190aW1lcjZfZG1hID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyNl9od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyNl9kbWFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjZfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI2IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF90aW1lcjZfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X2FiZV9fdGltZXI2LAorCSZvbWFwNDR4eF9sNF9hYmVfX3RpbWVyNl9kbWEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI2X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjYiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfdGltZXI2X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI2X2lycXMpLAorCS5tYWluX2Nsawk9ICJ0aW1lcjZfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ00xX0FCRV9USU1FUjZfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfdGltZXI2X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI2X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogdGltZXI3ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI3X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X3RpbWVyN19pcnFzW10gPSB7CisJeyAuaXJxID0gNDMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF90aW1lcjdfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDAxM2MwMDAsCisJCS5wYV9lbmQJCT0gMHg0MDEzYzA3ZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9hYmUgLT4gdGltZXI3ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fdGltZXI3ID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyN19od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyN19hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyN19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfdGltZXI3X2RtYV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0OTAzYzAwMCwKKwkJLnBhX2VuZAkJPSAweDQ5MDNjMDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2FiZSAtPiB0aW1lcjcgKGRtYSkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX190aW1lcjdfZG1hID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyN19od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyN19kbWFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjdfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI3IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF90aW1lcjdfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X2FiZV9fdGltZXI3LAorCSZvbWFwNDR4eF9sNF9hYmVfX3RpbWVyN19kbWEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI3X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjciLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfdGltZXI3X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI3X2lycXMpLAorCS5tYWluX2Nsawk9ICJ0aW1lcjdfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ00xX0FCRV9USU1FUjdfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfdGltZXI3X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI3X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogdGltZXI4ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI4X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X3RpbWVyOF9pcnFzW10gPSB7CisJeyAuaXJxID0gNDQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF90aW1lcjhfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDAxM2UwMDAsCisJCS5wYV9lbmQJCT0gMHg0MDEzZTA3ZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9hYmUgLT4gdGltZXI4ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2FiZV9fdGltZXI4ID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyOF9od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyOF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyOF9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfdGltZXI4X2RtYV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0OTAzZTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ5MDNlMDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2FiZSAtPiB0aW1lcjggKGRtYSkgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX190aW1lcjhfZG1hID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2FiZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyOF9od21vZCwKKwkuY2xrCQk9ICJvY3BfYWJlX2ljbGsiLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyOF9kbWFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjhfZG1hX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXI4IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF90aW1lcjhfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X2FiZV9fdGltZXI4LAorCSZvbWFwNDR4eF9sNF9hYmVfX3RpbWVyOF9kbWEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI4X2h3bW9kID0geworCS5uYW1lCQk9ICJ0aW1lcjgiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfdGltZXJfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfdGltZXI4X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI4X2lycXMpLAorCS5tYWluX2Nsawk9ICJ0aW1lcjhfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ00xX0FCRV9USU1FUjhfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfdGltZXI4X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXI4X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogdGltZXI5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXI5X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X3RpbWVyOV9pcnFzW10gPSB7CisJeyAuaXJxID0gNDUgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF90aW1lcjlfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwM2UwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODAzZTA3ZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXI5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fdGltZXI5ID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3RpbWVyOV9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyOV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyOV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHRpbWVyOSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfdGltZXI5X3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9wZXJfX3RpbWVyOSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF90aW1lcjlfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyOSIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF90aW1lcl9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF90aW1lcjlfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjlfaXJxcyksCisJLm1haW5fY2xrCT0gInRpbWVyOV9mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSOV9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF90aW1lcjlfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjlfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiB0aW1lcjEwICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXIxMF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF90aW1lcjEwX2lycXNbXSA9IHsKKwl7IC5pcnEgPSA0NiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X3RpbWVyMTBfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwODYwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA4NjA3ZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gdGltZXIxMCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX3RpbWVyMTAgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfdGltZXIxMF9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X3RpbWVyMTBfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjEwX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogdGltZXIxMCBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfdGltZXIxMF9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX190aW1lcjEwLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3RpbWVyMTBfaHdtb2QgPSB7CisJLm5hbWUJCT0gInRpbWVyMTAiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfdGltZXJfMW1zX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X3RpbWVyMTBfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF90aW1lcjEwX2lycXMpLAorCS5tYWluX2Nsawk9ICJ0aW1lcjEwX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF90aW1lcjEwX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXIxMF9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIHRpbWVyMTEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF90aW1lcjExX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X3RpbWVyMTFfaXJxc1tdID0geworCXsgLmlycSA9IDQ3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfdGltZXIxMV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA4ODAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDg4MDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiB0aW1lcjExICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fdGltZXIxMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF90aW1lcjExX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfdGltZXIxMV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyMTFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB0aW1lcjExIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF90aW1lcjExX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9wZXJfX3RpbWVyMTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfdGltZXIxMV9od21vZCA9IHsKKwkubmFtZQkJPSAidGltZXIxMSIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF90aW1lcl9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF90aW1lcjExX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdGltZXIxMV9pcnFzKSwKKwkubWFpbl9jbGsJPSAidGltZXIxMV9mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSMTFfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfdGltZXIxMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3RpbWVyMTFfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgogICogJ3VhcnQnIGNsYXNzCiAgKiB1bml2ZXJzYWwgYXN5bmNocm9ub3VzIHJlY2VpdmVyL3RyYW5zbWl0dGVyICh1YXJ0KQogICovCkBAIC0xODcwLDYgKzQ4MTQsODggQEAKIH07CiAKIC8qCisgKiAndXNiX290Z19ocycgY2xhc3MKKyAqIGhpZ2gtc3BlZWQgb24tdGhlLWdvIHVuaXZlcnNhbCBzZXJpYWwgYnVzICh1c2Jfb3RnX2hzKSBjb250cm9sbGVyCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwNDR4eF91c2Jfb3RnX2hzX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwNDAwLAorCS5zeXNjX29mZnMJPSAweDA0MDQsCisJLnN5c3Nfb2Zmcwk9IDB4MDQwOCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19BVVRPSURMRSB8IFNZU0NfSEFTX0VOQVdBS0VVUCB8CisJCQkgICBTWVNDX0hBU19NSURMRU1PREUgfCBTWVNDX0hBU19TSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCB8CisJCQkgICBTSURMRV9TTUFSVF9XS1VQIHwgTVNUQU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8CisJCQkgICBNU1RBTkRCWV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF91c2Jfb3RnX2hzX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gInVzYl9vdGdfaHMiLAorCS5zeXNjID0gJm9tYXA0NHh4X3VzYl9vdGdfaHNfc3lzYywKK307CisKKy8qIHVzYl9vdGdfaHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF91c2Jfb3RnX2hzX2lycXNbXSA9IHsKKwl7IC5uYW1lID0gIm1jIiwgLmlycSA9IDkyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorCXsgLm5hbWUgPSAiZG1hIiwgLmlycSA9IDkzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworLyogdXNiX290Z19ocyBtYXN0ZXIgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3VzYl9vdGdfaHNfbWFzdGVyc1tdID0geworCSZvbWFwNDR4eF91c2Jfb3RnX2hzX19sM19tYWluXzIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF91c2Jfb3RnX2hzX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDRhMGFiMDAwLAorCQkucGFfZW5kCQk9IDB4NGEwYWIwMDMsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY2ZnIC0+IHVzYl9vdGdfaHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfY2ZnX191c2Jfb3RnX2hzID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2NmZ19od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3VzYl9vdGdfaHNfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF91c2Jfb3RnX2hzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdXNiX290Z19oc19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHVzYl9vdGdfaHMgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3VzYl9vdGdfaHNfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X2NmZ19fdXNiX290Z19ocywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIHVzYl9vdGdfaHNfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gInhjbGsiLCAuY2xrID0gInVzYl9vdGdfaHNfeGNsayIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF91c2Jfb3RnX2hzX2h3bW9kID0geworCS5uYW1lCQk9ICJ1c2Jfb3RnX2hzIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X3VzYl9vdGdfaHNfaHdtb2RfY2xhc3MsCisJLmZsYWdzCQk9IEhXTU9EX1NXU1VQX1NJRExFIHwgSFdNT0RfU1dTVVBfTVNUQU5EQlksCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfdXNiX290Z19oc19pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3VzYl9vdGdfaHNfaXJxcyksCisJLm1haW5fY2xrCT0gInVzYl9vdGdfaHNfaWNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9PVEdfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IHVzYl9vdGdfaHNfb3B0X2Nsa3MsCisJLm9wdF9jbGtzX2NudCA9IEFSUkFZX1NJWkUodXNiX290Z19oc19vcHRfY2xrcyksCisJLnNsYXZlcwkJPSBvbWFwNDR4eF91c2Jfb3RnX2hzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdXNiX290Z19oc19zbGF2ZXMpLAorCS5tYXN0ZXJzCT0gb21hcDQ0eHhfdXNiX290Z19oc19tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfdXNiX290Z19oc19tYXN0ZXJzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgogICogJ3dkX3RpbWVyJyBjbGFzcwogICogMzItYml0IHdhdGNoZG9nIHVwd2FyZCBjb3VudGVyIHRoYXQgZ2VuZXJhdGVzIGEgcHVsc2Ugb24gdGhlIHJlc2V0IHBpbiBvbgogICogb3ZlcmZsb3cgY29uZGl0aW9uCkBAIC0yMDI0LDEzICs1MDUwLDM0IEBACiAJLyogbXB1X2J1cyBjbGFzcyAqLwogCSZvbWFwNDR4eF9tcHVfcHJpdmF0ZV9od21vZCwKIAorCS8qIGFlc3MgY2xhc3MgKi8KKy8qCSZvbWFwNDR4eF9hZXNzX2h3bW9kLCAqLworCisJLyogYmFuZGdhcCBjbGFzcyAqLworCSZvbWFwNDR4eF9iYW5kZ2FwX2h3bW9kLAorCisJLyogY291bnRlciBjbGFzcyAqLworLyoJJm9tYXA0NHh4X2NvdW50ZXJfMzJrX2h3bW9kLCAqLworCiAJLyogZG1hIGNsYXNzICovCiAJJm9tYXA0NHh4X2RtYV9zeXN0ZW1faHdtb2QsCiAKKwkvKiBkbWljIGNsYXNzICovCisJJm9tYXA0NHh4X2RtaWNfaHdtb2QsCisKIAkvKiBkc3AgY2xhc3MgKi8KIAkmb21hcDQ0eHhfZHNwX2h3bW9kLAogCSZvbWFwNDR4eF9kc3BfYzBfaHdtb2QsCiAKKwkvKiBkc3MgY2xhc3MgKi8KKwkmb21hcDQ0eHhfZHNzX2h3bW9kLAorCSZvbWFwNDR4eF9kc3NfZGlzcGNfaHdtb2QsCisJJm9tYXA0NHh4X2Rzc19kc2kxX2h3bW9kLAorCSZvbWFwNDR4eF9kc3NfZHNpMl9od21vZCwKKwkmb21hcDQ0eHhfZHNzX2hkbWlfaHdtb2QsCisJJm9tYXA0NHh4X2Rzc19yZmJpX2h3bW9kLAorCSZvbWFwNDR4eF9kc3NfdmVuY19od21vZCwKKwogCS8qIGdwaW8gY2xhc3MgKi8KIAkmb21hcDQ0eHhfZ3BpbzFfaHdtb2QsCiAJJm9tYXA0NHh4X2dwaW8yX2h3bW9kLApAQCAtMjAzOSwxNyArNTA4Niw1NiBAQAogCSZvbWFwNDR4eF9ncGlvNV9od21vZCwKIAkmb21hcDQ0eHhfZ3BpbzZfaHdtb2QsCiAKKwkvKiBoc2kgY2xhc3MgKi8KKy8qCSZvbWFwNDR4eF9oc2lfaHdtb2QsICovCisKIAkvKiBpMmMgY2xhc3MgKi8KIAkmb21hcDQ0eHhfaTJjMV9od21vZCwKIAkmb21hcDQ0eHhfaTJjMl9od21vZCwKIAkmb21hcDQ0eHhfaTJjM19od21vZCwKIAkmb21hcDQ0eHhfaTJjNF9od21vZCwKIAorCS8qIGlwdSBjbGFzcyAqLworCSZvbWFwNDR4eF9pcHVfaHdtb2QsCisJJm9tYXA0NHh4X2lwdV9jMF9od21vZCwKKwkmb21hcDQ0eHhfaXB1X2MxX2h3bW9kLAorCisJLyogaXNzIGNsYXNzICovCisvKgkmb21hcDQ0eHhfaXNzX2h3bW9kLCAqLworCiAJLyogaXZhIGNsYXNzICovCiAJJm9tYXA0NHh4X2l2YV9od21vZCwKIAkmb21hcDQ0eHhfaXZhX3NlcTBfaHdtb2QsCiAJJm9tYXA0NHh4X2l2YV9zZXExX2h3bW9kLAogCisJLyoga2JkIGNsYXNzICovCisvKgkmb21hcDQ0eHhfa2JkX2h3bW9kLCAqLworCisJLyogbWFpbGJveCBjbGFzcyAqLworCSZvbWFwNDR4eF9tYWlsYm94X2h3bW9kLAorCisJLyogbWNic3AgY2xhc3MgKi8KKwkmb21hcDQ0eHhfbWNic3AxX2h3bW9kLAorCSZvbWFwNDR4eF9tY2JzcDJfaHdtb2QsCisJJm9tYXA0NHh4X21jYnNwM19od21vZCwKKwkmb21hcDQ0eHhfbWNic3A0X2h3bW9kLAorCisJLyogbWNwZG0gY2xhc3MgKi8KKy8qCSZvbWFwNDR4eF9tY3BkbV9od21vZCwgKi8KKworCS8qIG1jc3BpIGNsYXNzICovCisJJm9tYXA0NHh4X21jc3BpMV9od21vZCwKKwkmb21hcDQ0eHhfbWNzcGkyX2h3bW9kLAorCSZvbWFwNDR4eF9tY3NwaTNfaHdtb2QsCisJJm9tYXA0NHh4X21jc3BpNF9od21vZCwKKworCS8qIG1tYyBjbGFzcyAqLworCSZvbWFwNDR4eF9tbWMxX2h3bW9kLAorCSZvbWFwNDR4eF9tbWMyX2h3bW9kLAorCSZvbWFwNDR4eF9tbWMzX2h3bW9kLAorCSZvbWFwNDR4eF9tbWM0X2h3bW9kLAorCSZvbWFwNDR4eF9tbWM1X2h3bW9kLAorCiAJLyogbXB1IGNsYXNzICovCiAJJm9tYXA0NHh4X21wdV9od21vZCwKIApAQCAtMjA1OCwxMiArNTE0NCwzMSBAQAogCSZvbWFwNDR4eF9zbWFydHJlZmxleF9pdmFfaHdtb2QsCiAJJm9tYXA0NHh4X3NtYXJ0cmVmbGV4X21wdV9od21vZCwKIAorCS8qIHNwaW5sb2NrIGNsYXNzICovCisJJm9tYXA0NHh4X3NwaW5sb2NrX2h3bW9kLAorCisJLyogdGltZXIgY2xhc3MgKi8KKwkmb21hcDQ0eHhfdGltZXIxX2h3bW9kLAorCSZvbWFwNDR4eF90aW1lcjJfaHdtb2QsCisJJm9tYXA0NHh4X3RpbWVyM19od21vZCwKKwkmb21hcDQ0eHhfdGltZXI0X2h3bW9kLAorCSZvbWFwNDR4eF90aW1lcjVfaHdtb2QsCisJJm9tYXA0NHh4X3RpbWVyNl9od21vZCwKKwkmb21hcDQ0eHhfdGltZXI3X2h3bW9kLAorCSZvbWFwNDR4eF90aW1lcjhfaHdtb2QsCisJJm9tYXA0NHh4X3RpbWVyOV9od21vZCwKKwkmb21hcDQ0eHhfdGltZXIxMF9od21vZCwKKwkmb21hcDQ0eHhfdGltZXIxMV9od21vZCwKKwogCS8qIHVhcnQgY2xhc3MgKi8KIAkmb21hcDQ0eHhfdWFydDFfaHdtb2QsCiAJJm9tYXA0NHh4X3VhcnQyX2h3bW9kLAogCSZvbWFwNDR4eF91YXJ0M19od21vZCwKIAkmb21hcDQ0eHhfdWFydDRfaHdtb2QsCiAKKwkvKiB1c2Jfb3RnX2hzIGNsYXNzICovCisJJm9tYXA0NHh4X3VzYl9vdGdfaHNfaHdtb2QsCisKIAkvKiB3ZF90aW1lciBjbGFzcyAqLwogCSZvbWFwNDR4eF93ZF90aW1lcjJfaHdtb2QsCiAJJm9tYXA0NHh4X3dkX3RpbWVyM19od21vZCwKQEAgLTIwNzMsNiArNTE3OCw2IEBACiAKIGludCBfX2luaXQgb21hcDQ0eHhfaHdtb2RfaW5pdCh2b2lkKQogewotCXJldHVybiBvbWFwX2h3bW9kX2luaXQob21hcDQ0eHhfaHdtb2RzKTsKKwlyZXR1cm4gb21hcF9od21vZF9yZWdpc3RlcihvbWFwNDR4eF9od21vZHMpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfbDNfbm9jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfbDNfbm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2MzJjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19ub2MuYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAgKiBPTUFQNFhYWCBMMyBJbnRlcmNvbm5lY3QgZXJyb3IgaGFuZGxpbmcgZHJpdmVyCisgICoKKyAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGV4YXMgQ29ycG9yYXRpb24KKyAgKglTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgorICAqCVNyaWNoYXJhbiA8ci5zcmljaGFyYW5AdGkuY29tPgorICAqCisgICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgKgorICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICoKKyAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICAqIFVTQQorICAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgIm9tYXBfbDNfbm9jLmgiCisKKy8qCisgKiBJbnRlcnJ1cHQgSGFuZGxlciBmb3IgTDMgZXJyb3IgZGV0ZWN0aW9uLgorICoJMSkgSWRlbnRpZnkgdGhlIEwzIGNsb2NrZG9tYWluIHBhcnRpdGlvbiB0byB3aGljaCB0aGUgZXJyb3IgYmVsb25ncyB0by4KKyAqCTIpIElkZW50aWZ5IHRoZSBzbGF2ZSB3aGVyZSB0aGUgZXJyb3IgaW5mb3JtYXRpb24gaXMgbG9nZ2VkCisgKgkzKSBQcmludCB0aGUgbG9nZ2VkIGluZm9ybWF0aW9uLgorICoJNCkgQWRkIGR1bXAgc3RhY2sgdG8gcHJvdmlkZSBrZXJuZWwgdHJhY2UuCisgKgorICogVHdvIFR5cGVzIG9mIGVycm9ycyA6CisgKgkxKSBDdXN0b20gZXJyb3JzIGluIEwzIDoKKyAqCQlUYXJnZXQgbGlrZSBETU0vRlcvRU1JRiBnZW5lcmF0ZXMgU1JFU1A9RVJSIGVycm9yCisgKgkyKSBTdGFuZGFyZCBMMyBlcnJvcjoKKyAqCQktIFVuc3VwcG9ydGVkIENNRC4KKyAqCQkJTDMgdHJpZXMgdG8gYWNjZXNzIHRhcmdldCB3aGlsZSBpdCBpcyBpZGxlCisgKgkJLSBPQ1AgZGlzY29ubmVjdC4KKyAqCQktIEFkZHJlc3MgaG9sZSBlcnJvcjoKKyAqCQkJSWYgRFNTL0lTUy9GRElGL1VTQkhPU1RGUyBhY2Nlc3MgYSB0YXJnZXQgd2hlcmUgdGhleQorICoJCQlkbyBub3QgaGF2ZSBjb25uZWN0aXZpdHksIHRoZSBlcnJvciBpcyBsb2dnZWQgaW4KKyAqCQkJdGhlaXIgZGVmYXVsdCB0YXJnZXQgd2hpY2ggaXMgRE1NMi4KKyAqCisgKglPbiBIaWdoIFNlY3VyZSBkZXZpY2VzLCBmaXJld2FsbCBlcnJvcnMgYXJlIHBvc3NpYmxlIGFuZCB0aG9zZQorICoJY2FuIGJlIHRyYXBwZWQgYXMgd2VsbC4gQnV0IHRoZSB0cmFwcGluZyBpcyBpbXBsZW1lbnRlZCBhcyBwYXJ0CisgKglzZWN1cmUgc29mdHdhcmUgYW5kIGhlbmNlIG5lZWQgbm90IGJlIGltcGxlbWVudGVkIGhlcmUuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBsM19pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpfbDMpCit7CisKKwlzdHJ1Y3Qgb21hcDRfbDMJCSpsMyA9IF9sMzsKKwlpbnQgaW50dHlwZSwgaSwgajsKKwlpbnQgZXJyX3NyYyA9IDA7CisJdTMyIHN0ZF9lcnJfbWFpbl9hZGRyLCBzdGRfZXJyX21haW4sIGVycl9yZWc7CisJdTMyIGJhc2UsIHNsYXZlX2FkZHIsIGNsZWFyOworCWNoYXIgKnNvdXJjZV9uYW1lOworCisJLyogR2V0IHRoZSBUeXBlIG9mIGludGVycnVwdCAqLworCWlmIChpcnEgPT0gbDMtPmFwcF9pcnEpCisJCWludHR5cGUgPSBMM19BUFBMSUNBVElPTl9FUlJPUjsKKwllbHNlCisJCWludHR5cGUgPSBMM19ERUJVR19FUlJPUjsKKworCWZvciAoaSA9IDA7IGkgPCBMM19NT0RVTEVTOyBpKyspIHsKKwkJLyoKKwkJICogUmVhZCB0aGUgcmVnZXJyIHJlZ2lzdGVyIG9mIHRoZSBjbG9jayBkb21haW4KKwkJICogdG8gZGV0ZXJtaW5lIHRoZSBzb3VyY2UKKwkJICovCisJCWJhc2UgPSAodTMyKWwzLT5sM19iYXNlW2ldOworCQllcnJfcmVnID0gIHJlYWRsKGJhc2UgKyBsM19mbGFnbXV4W2ldICsgKGludHR5cGUgPDwgMykpOworCisJCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBhbmQgYW5hbHlzZSAqLworCQlpZiAoZXJyX3JlZykgeworCQkJLyogSWRlbnRpZnkgdGhlIHNvdXJjZSBmcm9tIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyICovCisJCQlmb3IgKGogPSAwOyAhKGVycl9yZWcgJiAoMSA8PCBqKSk7IGorKykKKwkJCQkJCQkJCTsKKworCQkJZXJyX3NyYyA9IGo7CisJCQkvKiBSZWFkIHRoZSBzdGRlcnJsb2dfbWFpbl9zb3VyY2UgZnJvbSBjbGsgZG9tYWluICovCisJCQlzdGRfZXJyX21haW5fYWRkciA9IGJhc2UgKyAoKihsM190YXJnW2ldICsgZXJyX3NyYykpOworCQkJc3RkX2Vycl9tYWluID0gIHJlYWRsKHN0ZF9lcnJfbWFpbl9hZGRyKTsKKworCQkJc3dpdGNoICgoc3RkX2Vycl9tYWluICYgQ1VTVE9NX0VSUk9SKSkgeworCQkJY2FzZSBTVEFOREFSRF9FUlJPUjoKKwkJCQlzb3VyY2VfbmFtZSA9CisJCQkJbDNfdGFyZ19zdGRlcnJsb2dfbWFpbl9uYW1lW2ldW2Vycl9zcmNdOworCisJCQkJc2xhdmVfYWRkciA9IHN0ZF9lcnJfbWFpbl9hZGRyICsKKwkJCQkJCUwzX1NMQVZFX0FERFJFU1NfT0ZGU0VUOworCQkJCVdBUk4odHJ1ZSwgIkwzIHN0YW5kYXJkIGVycm9yOiBTT1VSQ0U6JXMgYXQgYWRkcmVzcyAweCV4XG4iLAorCQkJCQlzb3VyY2VfbmFtZSwgcmVhZGwoc2xhdmVfYWRkcikpOworCQkJCS8qIGNsZWFyIHRoZSBzdGQgZXJyb3IgbG9nKi8KKwkJCQljbGVhciA9IHN0ZF9lcnJfbWFpbiB8IENMRUFSX1NUREVSUl9MT0c7CisJCQkJd3JpdGVsKGNsZWFyLCBzdGRfZXJyX21haW5fYWRkcik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQ1VTVE9NX0VSUk9SOgorCQkJCXNvdXJjZV9uYW1lID0KKwkJCQlsM190YXJnX3N0ZGVycmxvZ19tYWluX25hbWVbaV1bZXJyX3NyY107CisKKwkJCQlXQVJOKHRydWUsICJDVVNUT00gU1JFU1AgZXJyb3Igd2l0aCBTT1VSQ0U6JXNcbiIsCisJCQkJCQkJc291cmNlX25hbWUpOworCQkJCS8qIGNsZWFyIHRoZSBzdGQgZXJyb3IgbG9nKi8KKwkJCQljbGVhciA9IHN0ZF9lcnJfbWFpbiB8IENMRUFSX1NUREVSUl9MT0c7CisJCQkJd3JpdGVsKGNsZWFyLCBzdGRfZXJyX21haW5fYWRkcik7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJLyogTm90aGluZyB0byBiZSBoYW5kbGVkIGhlcmUgYXMgb2Ygbm93ICovCisJCQkJYnJlYWs7CisJCQl9CisJCS8qIEVycm9yIGZvdW5kIHNvIGJyZWFrIHRoZSBmb3IgbG9vcCAqLworCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXA0X2wzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RhdGljIHN0cnVjdCBvbWFwNF9sMwkJKmwzOworCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKKwlpbnQJCQlyZXQ7CisJaW50CQkJaXJxOworCisJbDMgPSBremFsbG9jKHNpemVvZigqbDMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWwzKQorCQlyZXQgPSAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbDMpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgZmluZCByZXNvdXJjZSAwXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKworCWwzLT5sM19iYXNlWzBdID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghKGwzLT5sM19iYXNlWzBdKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IGZpbmQgcmVzb3VyY2UgMVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMzsKKwl9CisKKwlsMy0+bDNfYmFzZVsxXSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIShsMy0+bDNfYmFzZVsxXSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjQ7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAyKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCBmaW5kIHJlc291cmNlIDJcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjU7CisJfQorCisJbDMtPmwzX2Jhc2VbMl0gPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCEobDMtPmwzX2Jhc2VbMl0pKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI2OworCX0KKworCS8qCisJICogU2V0dXAgaW50ZXJydXB0IEhhbmRsZXJzCisJICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsCisJCQlsM19pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCUlSUUZfRElTQUJMRUQsICJsMy1kYmctaXJxIiwgbDMpOworCWlmIChyZXQpIHsKKwkJcHJfY3JpdCgiTDM6IHJlcXVlc3RfaXJxIGZhaWxlZCB0byByZWdpc3RlciBmb3IgMHgleFxuIiwKKwkJCQkJIE9NQVA0NFhYX0lSUV9MM19EQkcpOworCQlnb3RvIGVycjc7CisJfQorCWwzLT5kZWJ1Z19pcnEgPSBpcnE7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwKKwkJCWwzX2ludGVycnVwdF9oYW5kbGVyLAorCQkJSVJRRl9ESVNBQkxFRCwgImwzLWFwcC1pcnEiLCBsMyk7CisJaWYgKHJldCkgeworCQlwcl9jcml0KCJMMzogcmVxdWVzdF9pcnEgZmFpbGVkIHRvIHJlZ2lzdGVyIGZvciAweCV4XG4iLAorCQkJCQkgT01BUDQ0WFhfSVJRX0wzX0FQUCk7CisJCWdvdG8gZXJyODsKKwl9CisJbDMtPmFwcF9pcnEgPSBpcnE7CisKKwlnb3RvIGVycjA7CitlcnI4OgorZXJyNzoKKwlpb3VubWFwKGwzLT5sM19iYXNlWzJdKTsKK2VycjY6CitlcnI1OgorCWlvdW5tYXAobDMtPmwzX2Jhc2VbMV0pOworZXJyNDoKK2VycjM6CisJaW91bm1hcChsMy0+bDNfYmFzZVswXSk7CitlcnIyOgorZXJyMToKKwlrZnJlZShsMyk7CitlcnIwOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG9tYXA0X2wzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwNF9sMyAgICAgICAgICpsMyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZnJlZV9pcnEobDMtPmFwcF9pcnEsIGwzKTsKKwlmcmVlX2lycShsMy0+ZGVidWdfaXJxLCBsMyk7CisJaW91bm1hcChsMy0+bDNfYmFzZVswXSk7CisJaW91bm1hcChsMy0+bDNfYmFzZVsxXSk7CisJaW91bm1hcChsMy0+bDNfYmFzZVsyXSk7CisJa2ZyZWUobDMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXA0X2wzX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG9tYXA0X2wzX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJLm5hbWUJCT0gIm9tYXBfbDNfbm9jIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDRfbDNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm9tYXA0X2wzX2RyaXZlciwgb21hcDRfbDNfcHJvYmUpOworfQorcG9zdGNvcmVfaW5pdGNhbGxfc3luYyhvbWFwNF9sM19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG9tYXA0X2wzX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcDRfbDNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG9tYXA0X2wzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2wzX25vYy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2wzX25vYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OWI4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfbDNfbm9jLmgKQEAgLTAsMCArMSwxMzIgQEAKKyAvKgorICAqIE9NQVA0WFhYIEwzIEludGVyY29ubmVjdCAgZXJyb3IgaGFuZGxpbmcgZHJpdmVyIGhlYWRlcgorICAqCisgICogQ29weXJpZ2h0IChDKSAyMDExIFRleGFzIENvcnBvcmF0aW9uCisgICoJU2FudG9zaCBTaGlsaW1rYXIgPHNhbnRvc2guc2hpbGlta2FyQHRpLmNvbT4KKyAgKglzcmljaGFyYW4gPHIuc3JpY2hhcmFuQHRpLmNvbT4KKyAgKgorICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICoKKyAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAqCisgICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgKiBVU0EKKyAgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0wzX0lOVEVSQ09OTkVDVF8zWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0wzX0lOVEVSQ09OTkVDVF8zWFhYX0gKKworLyoKKyAqIEwzIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBMM19NT0RVTEVTCQkJMworI2RlZmluZSBDTEVBUl9TVERFUlJfTE9HCQkoMSA8PCAzMSkKKyNkZWZpbmUgQ1VTVE9NX0VSUk9SCQkJMHgyCisjZGVmaW5lIFNUQU5EQVJEX0VSUk9SCQkJMHgwCisjZGVmaW5lIElOQkFORF9FUlJPUgkJCTB4MAorI2RlZmluZSBFTUlGX0tFUlJMT0dfT0ZGU0VUCQkweDEwCisjZGVmaW5lIEwzX1NMQVZFX0FERFJFU1NfT0ZGU0VUCQkweDE0CisjZGVmaW5lIExPR0lDQUxfQUREUl9FUlJPUkxPRwkJMHg0CisjZGVmaW5lIEwzX0FQUExJQ0FUSU9OX0VSUk9SCQkweDAKKyNkZWZpbmUgTDNfREVCVUdfRVJST1IJCQkweDEKKwordTMyIGwzX2ZsYWdtdXhbTDNfTU9EVUxFU10gPSB7CisJMHg1MEMsCisJMHgxMDBDLAorCTBYMDIwQworfTsKKworLyoKKyAqIEwzIFRhcmdldCBzdGFuZGFyZCBFcnJvciByZWdpc3RlciBvZmZzZXRzCisgKi8KK3UzMiBsM190YXJnX3N0ZGVycmxvZ19tYWluX2NsazFbXSA9IHsKKwkweDE0OCwgLyogRE1NMSAqLworCTB4MjQ4LCAvKiBETU0yICovCisJMHgzNDgsIC8qIEFCRSAqLworCTB4NDQ4LCAvKiBMNENGRyAqLworCTB4NjQ4ICAvKiBDTEsyIFBXUiBESVNDICovCit9OworCit1MzIgbDNfdGFyZ19zdGRlcnJsb2dfbWFpbl9jbGsyW10gPSB7CisJMHg1NDgsCQkvKiBDT1JURVggTTMgKi8KKwkweDM0OCwJCS8qIERTUyAqLworCTB4MTQ4LAkJLyogR1BNQyAqLworCTB4NDQ4LAkJLyogSVNTICovCisJMHg3NDgsCQkvKiBJVkFIRCAqLworCTB4RDQ4LAkJLyogbWlzc2luZyBpbiBUUk0gIGNvcnJlc3BvbmRzIHRvIEFFUzEqLworCTB4OTQ4LAkJLyogTDQgUEVSMCovCisJMHgyNDgsCQkvKiBPQ01SQU0gKi8KKwkweDE0OCwJCS8qIG1pc3NpbmcgaW4gVFJNIGNvcnJlc3BvbmRzIHRvIEdQTUMgc0VSUk9SKi8KKwkweDY0OCwJCS8qIFNHWCAqLworCTB4ODQ4LAkJLyogU0wyICovCisJMHgxNjQ4LAkJLyogQzJDICovCisJMHgxMTQ4LAkJLyogbWlzc2luZyBpbiBUUk0gY29ycmVzcG9uZHMgUFdSIERJU0MgQ0xLMSovCisJMHhGNDgsCQkvKiBtaXNzaW5nIGluIFRSTSBjb3Jyc3BvbmRzIHRvIFNIQTEqLworCTB4RTQ4LAkJLyogbWlzc2luZyBpbiBUUk0gY29ycmVzcG9uZHMgdG8gQUVTMiovCisJMHhDNDgsCQkvKiBMNCBQRVIzICovCisJMHhBNDgsCQkvKiBMNCBQRVIxKi8KKwkweEI0OAkJLyogTDQgUEVSMiovCit9OworCit1MzIgbDNfdGFyZ19zdGRlcnJsb2dfbWFpbl9jbGszW10gPSB7CisJMHgwMTQ4CS8qIEVNVVNTICovCit9OworCitjaGFyICpsM190YXJnX3N0ZGVycmxvZ19tYWluX25hbWVbTDNfTU9EVUxFU11bMThdID0geworCXsKKwkiRE1NMSIsCisJIkRNTTIiLAorCSJBQkUiLAorCSJMNENGRyIsCisJIkNMSzIgUFdSIERJU0MiLAorCX0sCisJeworCSJDT1JURVggTTMiICwKKwkiRFNTICIsCisJIkdQTUMgIiwKKwkiSVNTICIsCisJIklWQUhEICIsCisJIkFFUzEiLAorCSJMNCBQRVIwIiwKKwkiT0NNUkFNICIsCisJIkdQTUMgc0VSUk9SIiwKKwkiU0dYICIsCisJIlNMMiAiLAorCSJDMkMgIiwKKwkiUFdSIERJU0MgQ0xLMSIsCisJIlNIQTEiLAorCSJBRVMyIiwKKwkiTDQgUEVSMyIsCisJIkw0IFBFUjEiLAorCSJMNCBQRVIyIiwKKwl9LAorCXsKKwkiRU1VU1MiLAorCX0sCit9OworCit1MzIgKmwzX3RhcmdbTDNfTU9EVUxFU10gPSB7CisJbDNfdGFyZ19zdGRlcnJsb2dfbWFpbl9jbGsxLAorCWwzX3Rhcmdfc3RkZXJybG9nX21haW5fY2xrMiwKKwlsM190YXJnX3N0ZGVycmxvZ19tYWluX2NsazMsCit9OworCitzdHJ1Y3Qgb21hcDRfbDMgeworCXN0cnVjdCBkZXZpY2UJKmRldjsKKwlzdHJ1Y3QgY2xrCSppY2s7CisKKwkvKiBtZW1vcnkgYmFzZSAqLworCXZvaWQgX19pb21lbSAqbDNfYmFzZVs0XTsKKworCWludAkJZGVidWdfaXJxOworCWludAkJYXBwX2lycTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2wzX3NteC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2wzX3NteC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NWJmZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfbDNfc214LmMKQEAgLTAsMCArMSwzMTQgQEAKKyAvKgorICAqIE9NQVAzWFhYIEwzIEludGVyY29ubmVjdCBEcml2ZXIKKyAgKgorICAqIENvcHlyaWdodCAoQykgMjAxMSBUZXhhcyBDb3Jwb3JhdGlvbgorICAqCUZlbGlwZSBCYWxiaSA8YmFsYmlAdGkuY29tPgorICAqCVNhbnRvc2ggU2hpbGlta2FyIDxzYW50b3NoLnNoaWxpbWthckB0aS5jb20+CisgICoJU3JpY2hhcmFuIDxyLnNyaWNoYXJhbkB0aS5jb20+CisgICoKKyAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAqCisgICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgKgorICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgICogVVNBCisgICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJvbWFwX2wzX3NteC5oIgorCitzdGF0aWMgaW5saW5lIHU2NCBvbWFwM19sM19yZWFkbGwodm9pZCBfX2lvbWVtICpiYXNlLCB1MTYgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbGwoYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwM19sM193cml0ZWxsKHZvaWQgX19pb21lbSAqYmFzZSwgdTE2IHJlZywgdTY0IHZhbHVlKQoreworCV9fcmF3X3dyaXRlbGwodmFsdWUsIGJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gb21hcDNfbDNfY29kZSBvbWFwM19sM19kZWNvZGVfZXJyb3JfY29kZSh1NjQgZXJyb3IpCit7CisJcmV0dXJuIChlcnJvciAmIDB4MGYwMDAwMDApID4+IEwzX0VSUk9SX0xPR19DT0RFOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBvbWFwM19sM19kZWNvZGVfYWRkcih1NjQgZXJyb3JfYWRkcikKK3sKKwlyZXR1cm4gZXJyb3JfYWRkciAmIDB4ZmZmZmZmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgb21hcDNfbDNfZGVjb2RlX2NtZCh1NjQgZXJyb3IpCit7CisJcmV0dXJuIChlcnJvciAmIDB4MDcpID4+IEwzX0VSUk9SX0xPR19DTUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBvbWFwM19sM19pbml0aWF0b3JfaWQgb21hcDNfbDNfZGVjb2RlX2luaXRpZCh1NjQgZXJyb3IpCit7CisJcmV0dXJuIChlcnJvciAmIDB4ZmYwMCkgPj4gTDNfRVJST1JfTE9HX0lOSVRJRDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBvbWFwM19sM19kZWNvZGVfcmVxX2luZm8odTY0IGVycm9yKQoreworCXJldHVybiAoZXJyb3IgPj4gMzIpICYgMHhmZmZmOworfQorCitzdGF0aWMgY2hhciAqb21hcDNfbDNfY29kZV9zdHJpbmcodTggY29kZSkKK3sKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIE9NQVBfTDNfQ09ERV9OT0VSUk9SOgorCQlyZXR1cm4gIk5vIEVycm9yIjsKKwljYXNlIE9NQVBfTDNfQ09ERV9VTlNVUF9DTUQ6CisJCXJldHVybiAiVW5zdXBwb3J0ZWQgQ29tbWFuZCI7CisJY2FzZSBPTUFQX0wzX0NPREVfQUREUl9IT0xFOgorCQlyZXR1cm4gIkFkZHJlc3MgSG9sZSI7CisJY2FzZSBPTUFQX0wzX0NPREVfUFJPVEVDVF9WSU9MQVRJT046CisJCXJldHVybiAiUHJvdGVjdGlvbiBWaW9sYXRpb24iOworCWNhc2UgT01BUF9MM19DT0RFX0lOX0JBTkRfRVJSOgorCQlyZXR1cm4gIkluLWJhbmQgRXJyb3IiOworCWNhc2UgT01BUF9MM19DT0RFX1JFUV9UT1VUX05PVF9BQ0NFUFQ6CisJCXJldHVybiAiUmVxdWVzdCBUaW1lb3V0IE5vdCBBY2NlcHRlZCI7CisJY2FzZSBPTUFQX0wzX0NPREVfUkVRX1RPVVRfTk9fUkVTUDoKKwkJcmV0dXJuICJSZXF1ZXN0IFRpbWVvdXQsIG5vIHJlc3BvbnNlIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04gZXJyb3IiOworCX0KK30KKworc3RhdGljIGNoYXIgKm9tYXAzX2wzX2luaXRpYXRvcl9zdHJpbmcodTggaW5pdGlkKQoreworCXN3aXRjaCAoaW5pdGlkKSB7CisJY2FzZSBPTUFQX0wzX0xDRDoKKwkJcmV0dXJuICJMQ0QiOworCWNhc2UgT01BUF9MM19TQUQyRDoKKwkJcmV0dXJuICJTQUQyRCI7CisJY2FzZSBPTUFQX0wzX0lBX01QVV9TU18xOgorCWNhc2UgT01BUF9MM19JQV9NUFVfU1NfMjoKKwljYXNlIE9NQVBfTDNfSUFfTVBVX1NTXzM6CisJY2FzZSBPTUFQX0wzX0lBX01QVV9TU180OgorCWNhc2UgT01BUF9MM19JQV9NUFVfU1NfNToKKwkJcmV0dXJuICJNUFUiOworCWNhc2UgT01BUF9MM19JQV9JVkFfU1NfMToKKwljYXNlIE9NQVBfTDNfSUFfSVZBX1NTXzI6CisJY2FzZSBPTUFQX0wzX0lBX0lWQV9TU18zOgorCQlyZXR1cm4gIklWQV9TUyI7CisJY2FzZSBPTUFQX0wzX0lBX0lWQV9TU19ETUFfMToKKwljYXNlIE9NQVBfTDNfSUFfSVZBX1NTX0RNQV8yOgorCWNhc2UgT01BUF9MM19JQV9JVkFfU1NfRE1BXzM6CisJY2FzZSBPTUFQX0wzX0lBX0lWQV9TU19ETUFfNDoKKwljYXNlIE9NQVBfTDNfSUFfSVZBX1NTX0RNQV81OgorCWNhc2UgT01BUF9MM19JQV9JVkFfU1NfRE1BXzY6CisJCXJldHVybiAiSVZBX1NTX0RNQSI7CisJY2FzZSBPTUFQX0wzX0lBX1NHWDoKKwkJcmV0dXJuICJTR1giOworCWNhc2UgT01BUF9MM19JQV9DQU1fMToKKwljYXNlIE9NQVBfTDNfSUFfQ0FNXzI6CisJY2FzZSBPTUFQX0wzX0lBX0NBTV8zOgorCQlyZXR1cm4gIkNBTSI7CisJY2FzZSBPTUFQX0wzX0lBX0RBUDoKKwkJcmV0dXJuICJEQVAiOworCWNhc2UgT01BUF9MM19TRE1BX1dSXzE6CisJY2FzZSBPTUFQX0wzX1NETUFfV1JfMjoKKwkJcmV0dXJuICJTRE1BX1dSIjsKKwljYXNlIE9NQVBfTDNfU0RNQV9SRF8xOgorCWNhc2UgT01BUF9MM19TRE1BX1JEXzI6CisJY2FzZSBPTUFQX0wzX1NETUFfUkRfMzoKKwljYXNlIE9NQVBfTDNfU0RNQV9SRF80OgorCQlyZXR1cm4gIlNETUFfUkQiOworCWNhc2UgT01BUF9MM19VU0JPVEc6CisJCXJldHVybiAiVVNCX09URyI7CisJY2FzZSBPTUFQX0wzX1VTQkhPU1Q6CisJCXJldHVybiAiVVNCX0hPU1QiOworCWRlZmF1bHQ6CisJCXJldHVybiAiVU5LTk9XTiBJbml0aWF0b3IiOworCX0KK30KKworLyoqCisgKiBvbWFwM19sM19ibG9ja19pcnEgLSBoYW5kbGVzIGEgcmVnaXN0ZXIgYmxvY2sncyBpcnEKKyAqIEBsMzogc3RydWN0IG9tYXAzX2wzICoKKyAqIEBiYXNlOiByZWdpc3RlciBibG9jayBiYXNlIGFkZHJlc3MKKyAqIEBlcnJvcjogTDNfRVJST1JfTE9HIHJlZ2lzdGVyIG9mIG91ciBibG9jaworICoKKyAqIENhbGxlZCBpbiBoYXJkLWlycSBjb250ZXh0LiBDYWxsZXIgc2hvdWxkIHRha2UgY2FyZSBvZiBsb2NraW5nCisgKgorICogT01BUDM2eHggVFJNIGdpdmVzLCBvbiBwYWdlIDIwMDEsIEZpZ3VyZSA5LTEwLCB0aGUgVHlwaWNhbCBFcnJvcgorICogQW5hbHlzaXMgU2VxdWVuY2UsIHdlIGFyZSBmb2xsb3dpbmcgdGhhdCBzZXF1ZW5jZSBoZXJlLCBwbGVhc2UKKyAqIHJlZmVyIHRvIHRoYXQgRmlndXJlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBzdWJqZWN0LgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcDNfbDNfYmxvY2tfaXJxKHN0cnVjdCBvbWFwM19sMyAqbDMsCisJCQkJCXU2NCBlcnJvciwgaW50IGVycm9yX2FkZHIpCit7CisJdTggICAgICAgICAgICAgICAgICAgICAgY29kZSA9IG9tYXAzX2wzX2RlY29kZV9lcnJvcl9jb2RlKGVycm9yKTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBpbml0aWQgPSBvbWFwM19sM19kZWNvZGVfaW5pdGlkKGVycm9yKTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBtdWx0aSA9IGVycm9yICYgTDNfRVJST1JfTE9HX01VTFRJOworCXUzMgkJCWFkZHJlc3MgPSBvbWFwM19sM19kZWNvZGVfYWRkcihlcnJvcl9hZGRyKTsKKworCVdBUk4odHJ1ZSwgIiVzIEVycm9yIHNlZW4gYnkgJXMgJXMgYXQgYWRkcmVzcyAleFxuIiwKKwkJCQkgb21hcDNfbDNfY29kZV9zdHJpbmcoY29kZSksCisJCQkgIG9tYXAzX2wzX2luaXRpYXRvcl9zdHJpbmcoaW5pdGlkKSwKKwkJCSAgICAgbXVsdGkgPyAiTXVsdGlwbGUgRXJyb3JzIiA6ICIiLAorCQkJCQkJICAgYWRkcmVzcyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwM19sM19hcHBfaXJxKGludCBpcnEsIHZvaWQgKl9sMykKK3sKKwlzdHJ1Y3Qgb21hcDNfbDMgICAgICAgICAqbDMgPSBfbDM7CisKKwl1NjQgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGNsZWFyOworCXU2NCAgICAgICAgICAgICAgICAgICAgIGVycm9yOworCXU2NAkJCWVycm9yX2FkZHI7CisJdTY0CQkJZXJyX3NvdXJjZSA9IDA7CisJdm9pZAkJCV9faW9tZW0gKmJhc2U7CisJaW50CQkJaW50X3R5cGU7CisKKwlpcnFyZXR1cm5fdCAgICAgICAgICAgICByZXQgPSBJUlFfTk9ORTsKKworCWlmIChpcnEgPT0gbDMtPmFwcF9pcnEpCisJCWludF90eXBlID0gTDNfQVBQTElDQVRJT05fRVJST1I7CisJZWxzZQorCQlpbnRfdHlwZSA9IEwzX0RFQlVHX0VSUk9SOworCisJaWYgKCFpbnRfdHlwZSkgeworCQlzdGF0dXMgPSBvbWFwM19sM19yZWFkbGwobDMtPnJ0LCBMM19TSV9GTEFHX1NUQVRVU18wKTsKKwkJLyoKKwkJICogaWYgd2UgaGF2ZSBhIHRpbWVvdXQgZXJyb3IsIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4KKwkJICogZG8gYmVzaWRlcyByZWJvb3RpbmcgdGhlIGJvYXJkLiBTbyBsZXQncyBCVUcgb24gYW55CisJCSAqIG9mIHN1Y2ggZXJyb3JzIGFuZCBoYW5kbGUgdGhlIG90aGVycy4gdGltZW91dCBlcnJvcgorCQkgKiBpcyBzZXZlcmUgYW5kIG5vdCBleHBlY3RlZCB0byBvY2N1ci4KKwkJICovCisJCUJVR19PTihzdGF0dXMgJiBMM19TVEFUVVNfMF9USU1FT1VUX01BU0spOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IG9tYXAzX2wzX3JlYWRsbChsMy0+cnQsIEwzX1NJX0ZMQUdfU1RBVFVTXzEpOworCQkvKiBObyB0aW1lb3V0IGVycm9yIGZvciBkZWJ1ZyBzb3VyY2VzICovCisJfQorCisJYmFzZSA9ICgobDMtPnJ0KSArICgqKG9tYXAzX2wzX2Jhc2VzW2ludF90eXBlXSArIGVycl9zb3VyY2UpKSk7CisKKwkvKiBpZGVudGlmeSB0aGUgZXJyb3Igc291cmNlICovCisJZm9yIChlcnJfc291cmNlID0gMDsgIShzdGF0dXMgJiAoMSA8PCBlcnJfc291cmNlKSk7IGVycl9zb3VyY2UrKykKKwkJCQkJCQkJCTsKKwllcnJvciA9IG9tYXAzX2wzX3JlYWRsbChiYXNlLCBMM19FUlJPUl9MT0cpOworCisJaWYgKGVycm9yKSB7CisJCWVycm9yX2FkZHIgPSBvbWFwM19sM19yZWFkbGwoYmFzZSwgTDNfRVJST1JfTE9HX0FERFIpOworCisJCXJldCB8PSBvbWFwM19sM19ibG9ja19pcnEobDMsIGVycm9yLCBlcnJvcl9hZGRyKTsKKwl9CisKKwkvKiBDbGVhciB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJY2xlYXIgPSAoKEwzX0FHRU5UX1NUQVRVU19DTEVBUl9JQSA8PCBpbnRfdHlwZSkgfAorCQkgKEwzX0FHRU5UX1NUQVRVU19DTEVBUl9UQSkpOworCisJb21hcDNfbDNfd3JpdGVsbChiYXNlLCBMM19BR0VOVF9TVEFUVVMsIGNsZWFyKTsKKworCS8qIGNsZWFyIHRoZSBlcnJvciBsb2cgcmVnaXN0ZXIgKi8KKwlvbWFwM19sM193cml0ZWxsKGJhc2UsIEwzX0VSUk9SX0xPRywgZXJyb3IpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2luaXQgb21hcDNfbDNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcDNfbDMgICAgICAgICAqbDM7CisJc3RydWN0IHJlc291cmNlICAgICAgICAgKnJlczsKKwlpbnQgICAgICAgICAgICAgICAgICAgICByZXQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaXJxOworCisJbDMgPSBremFsbG9jKHNpemVvZigqbDMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWwzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsMyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IGZpbmQgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjE7CisJfQorCWwzLT5ydCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIShsMy0+cnQpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBvbWFwM19sM19hcHBfaXJxLAorCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJImwzLWRlYnVnLWlycSIsIGwzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlcXVlc3QgZGVidWcgaXJxXG4iKTsKKwkJZ290byBlcnIzOworCX0KKwlsMy0+ZGVidWdfaXJxID0gaXJxOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIG9tYXAzX2wzX2FwcF9pcnEsCisJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkibDMtYXBwLWlycSIsIGwzKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgcmVxdWVzdCBhcHAgaXJxXG4iKTsKKwkJZ290byBlcnI0OworCX0KKworCWwzLT5hcHBfaXJxID0gaXJxOworCWdvdG8gZXJyMDsKKworZXJyNDoKK2VycjM6CisJaW91bm1hcChsMy0+cnQpOworZXJyMjoKK2VycjE6CisJa2ZyZWUobDMpOworZXJyMDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBvbWFwM19sM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcDNfbDMgICAgICAgICAqbDMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWZyZWVfaXJxKGwzLT5hcHBfaXJxLCBsMyk7CisJZnJlZV9pcnEobDMtPmRlYnVnX2lycSwgbDMpOworCWlvdW5tYXAobDMtPnJ0KTsKKwlrZnJlZShsMyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDNfbDNfZHJpdmVyID0geworCS5yZW1vdmUgICAgICAgICA9IF9fZXhpdF9wKG9tYXAzX2wzX3JlbW92ZSksCisJLmRyaXZlciAgICAgICAgID0geworCS5uYW1lICAgPSAib21hcF9sM19zbXgiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwM19sM19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmb21hcDNfbDNfZHJpdmVyLCBvbWFwM19sM19wcm9iZSk7Cit9Citwb3N0Y29yZV9pbml0Y2FsbF9zeW5jKG9tYXAzX2wzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDNfbDNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwM19sM19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQob21hcDNfbDNfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfbDNfc214LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfbDNfc214LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyZWQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguaApAQCAtMCwwICsxLDMzOCBAQAorIC8qCisgICogT01BUDNYWFggTDMgSW50ZXJjb25uZWN0IERyaXZlciBoZWFkZXIKKyAgKgorICAqIENvcHlyaWdodCAoQykgMjAxMSBUZXhhcyBDb3Jwb3JhdGlvbgorICAqCUZlbGlwZSBCYWxiaSA8YmFsYmlAdGkuY29tPgorICAqCVNhbnRvc2ggU2hpbGlta2FyIDxzYW50b3NoLnNoaWxpbWthckB0aS5jb20+CisgICoJc3JpY2hhcmFuIDxyLnNyaWNoYXJhbkB0aS5jb20+CisgICoKKyAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAqCisgICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgKgorICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgICogVVNBCisgICovCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9MM19JTlRFUkNPTk5FQ1RfM1hYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9MM19JTlRFUkNPTk5FQ1RfM1hYWF9ICisKKy8qIFJlZ2lzdGVyIGRlZmluaXRpb25zLiBBbGwgNjQtYml0IHdpZGUgKi8KKyNkZWZpbmUgTDNfQ09NUE9ORU5UCQkJMHgwMDAKKyNkZWZpbmUgTDNfQ09SRQkJCQkweDAxOAorI2RlZmluZSBMM19BR0VOVF9DT05UUk9MCQkweDAyMAorI2RlZmluZSBMM19BR0VOVF9TVEFUVVMJCQkweDAyOAorI2RlZmluZSBMM19FUlJPUl9MT0cJCQkweDA1OAorCisjZGVmaW5lIEwzX0VSUk9SX0xPR19NVUxUSQkJKDEgPDwgMzEpCisjZGVmaW5lIEwzX0VSUk9SX0xPR19TRUNPTkRBUlkJCSgxIDw8IDMwKQorCisjZGVmaW5lIEwzX0VSUk9SX0xPR19BRERSCQkweDA2MAorCisvKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgU2lkZWJhbmQgSW50ZXJjb25uZWN0ICovCisjZGVmaW5lIEwzX1NJX0NPTlRST0wJCQkweDAyMAorI2RlZmluZSBMM19TSV9GTEFHX1NUQVRVU18wCQkweDUxMAorCitjb25zdCB1NjQgc2hpZnQgPSAxOworCisjZGVmaW5lIEwzX1NUQVRVU18wX01QVUlBX0JSU1QJCShzaGlmdCA8PCAwKQorI2RlZmluZSBMM19TVEFUVVNfMF9NUFVJQV9SU1AJCShzaGlmdCA8PCAxKQorI2RlZmluZSBMM19TVEFUVVNfMF9NUFVJQV9JTkJBTkQJKHNoaWZ0IDw8IDIpCisjZGVmaW5lIEwzX1NUQVRVU18wX0lWQUlBX0JSU1QJCShzaGlmdCA8PCA2KQorI2RlZmluZSBMM19TVEFUVVNfMF9JVkFJQV9SU1AJCShzaGlmdCA8PCA3KQorI2RlZmluZSBMM19TVEFUVVNfMF9JVkFJQV9JTkJBTkQJKHNoaWZ0IDw8IDgpCisjZGVmaW5lIEwzX1NUQVRVU18wX1NHWElBX0JSU1QJCShzaGlmdCA8PCA5KQorI2RlZmluZSBMM19TVEFUVVNfMF9TR1hJQV9SU1AJCShzaGlmdCA8PCAxMCkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfU0dYSUFfTUVSUk9SCShzaGlmdCA8PCAxMSkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfQ0FNSUFfQlJTVAkJKHNoaWZ0IDw8IDEyKQorI2RlZmluZSBMM19TVEFUVVNfMF9DQU1JQV9SU1AJCShzaGlmdCA8PCAxMykKKyNkZWZpbmUgTDNfU1RBVFVTXzBfQ0FNSUFfSU5CQU5ECShzaGlmdCA8PCAxNCkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfRElTUElBX0JSU1QJCShzaGlmdCA8PCAxNSkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfRElTUElBX1JTUAkJKHNoaWZ0IDw8IDE2KQorI2RlZmluZSBMM19TVEFUVVNfMF9ETUFSRElBX0JSU1QJKHNoaWZ0IDw8IDE4KQorI2RlZmluZSBMM19TVEFUVVNfMF9ETUFSRElBX1JTUAkJKHNoaWZ0IDw8IDE5KQorI2RlZmluZSBMM19TVEFUVVNfMF9ETUFXUklBX0JSU1QJKHNoaWZ0IDw8IDIxKQorI2RlZmluZSBMM19TVEFUVVNfMF9ETUFXUklBX1JTUAkJKHNoaWZ0IDw8IDIyKQorI2RlZmluZSBMM19TVEFUVVNfMF9VU0JPVEdJQV9CUlNUCShzaGlmdCA8PCAyNCkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfVVNCT1RHSUFfUlNQCShzaGlmdCA8PCAyNSkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfVVNCT1RHSUFfSU5CQU5ECShzaGlmdCA8PCAyNikKKyNkZWZpbmUgTDNfU1RBVFVTXzBfVVNCSE9TVElBX0JSU1QJKHNoaWZ0IDw8IDI3KQorI2RlZmluZSBMM19TVEFUVVNfMF9VU0JIT1NUSUFfSU5CQU5ECShzaGlmdCA8PCAyOCkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfU01TVEFfUkVRCQkoc2hpZnQgPDwgNDgpCisjZGVmaW5lIEwzX1NUQVRVU18wX0dQTUNUQV9SRVEJCShzaGlmdCA8PCA0OSkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfT0NNUkFNVEFfUkVRCShzaGlmdCA8PCA1MCkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfT0NNUk9NVEFfUkVRCShzaGlmdCA8PCA1MSkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfSVZBVEFfUkVRCQkoc2hpZnQgPDwgNTQpCisjZGVmaW5lIEwzX1NUQVRVU18wX1NHWFRBX1JFUQkJKHNoaWZ0IDw8IDU1KQorI2RlZmluZSBMM19TVEFUVVNfMF9TR1hUQV9TRVJST1IJKHNoaWZ0IDw8IDU2KQorI2RlZmluZSBMM19TVEFUVVNfMF9HUE1DVEFfU0VSUk9SCShzaGlmdCA8PCA1NykKKyNkZWZpbmUgTDNfU1RBVFVTXzBfTDRDT1JFVEFfUkVRCShzaGlmdCA8PCA1OCkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfTDRQRVJUQV9SRVEJCShzaGlmdCA8PCA1OSkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfTDRFTVVUQV9SRVEJCShzaGlmdCA8PCA2MCkKKyNkZWZpbmUgTDNfU1RBVFVTXzBfTUFEMkRUQV9SRVEJCShzaGlmdCA8PCA2MSkKKworI2RlZmluZSBMM19TVEFUVVNfMF9USU1FT1VUX01BU0sJKEwzX1NUQVRVU18wX01QVUlBX0JSU1QgICAgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfTVBVSUFfUlNQICAgICAgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX0lWQUlBX0JSU1QgICAgICAgIFwKKwkJCQkJfCBMM19TVEFUVVNfMF9JVkFJQV9SU1AgICAgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfU0dYSUFfQlJTVCAgICAgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX1NHWElBX1JTUCAgICAgICAgIFwKKwkJCQkJfCBMM19TVEFUVVNfMF9DQU1JQV9CUlNUICAgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfQ0FNSUFfUlNQICAgICAgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX0RJU1BJQV9CUlNUICAgICAgIFwKKwkJCQkJfCBMM19TVEFUVVNfMF9ESVNQSUFfUlNQICAgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfRE1BUkRJQV9CUlNUICAgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX0RNQVJESUFfUlNQICAgICAgIFwKKwkJCQkJfCBMM19TVEFUVVNfMF9ETUFXUklBX0JSU1QgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfRE1BV1JJQV9SU1AgICAgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX1VTQk9UR0lBX0JSU1QgICAgIFwKKwkJCQkJfCBMM19TVEFUVVNfMF9VU0JPVEdJQV9SU1AgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfVVNCSE9TVElBX0JSU1QgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX1NNU1RBX1JFUSAgICAgICAgIFwKKwkJCQkJfCBMM19TVEFUVVNfMF9HUE1DVEFfUkVRICAgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfT0NNUkFNVEFfUkVRICAgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX09DTVJPTVRBX1JFUSAgICAgIFwKKwkJCQkJfCBMM19TVEFUVVNfMF9JVkFUQV9SRVEgICAgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfU0dYVEFfUkVRICAgICAgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX0w0Q09SRVRBX1JFUSAgICAgIFwKKwkJCQkJfCBMM19TVEFUVVNfMF9MNFBFUlRBX1JFUSAgICAgICBcCisJCQkJCXwgTDNfU1RBVFVTXzBfTDRFTVVUQV9SRVEgICAgICAgXAorCQkJCQl8IEwzX1NUQVRVU18wX01BRDJEVEFfUkVRKQorCisjZGVmaW5lIEwzX1NJX0ZMQUdfU1RBVFVTXzEJCTB4NTMwCisKKyNkZWZpbmUgTDNfU1RBVFVTXzFfTVBVX0RBVEFJQQkJKDEgPDwgMCkKKyNkZWZpbmUgTDNfU1RBVFVTXzFfREFQSUEwCQkoMSA8PCAzKQorI2RlZmluZSBMM19TVEFUVVNfMV9EQVBJQTEJCSgxIDw8IDQpCisjZGVmaW5lIEwzX1NUQVRVU18xX0lWQUlBCQkoMSA8PCA2KQorCisjZGVmaW5lIEwzX1BNX0VSUk9SX0xPRwkJCTB4MDIwCisjZGVmaW5lIEwzX1BNX0NPTlRST0wJCQkweDAyOAorI2RlZmluZSBMM19QTV9FUlJPUl9DTEVBUl9TSU5HTEUJMHgwMzAKKyNkZWZpbmUgTDNfUE1fRVJST1JfQ0xFQVJfTVVMVEkJCTB4MDM4CisjZGVmaW5lIEwzX1BNX1JFUV9JTkZPX1BFUk1JU1NJT04obikJKDB4MDQ4ICsgKDB4MDIwICogbikpCisjZGVmaW5lIEwzX1BNX1JFQURfUEVSTUlTU0lPTihuKQkoMHgwNTAgKyAoMHgwMjAgKiBuKSkKKyNkZWZpbmUgTDNfUE1fV1JJVEVfUEVSTUlTU0lPTihuKQkoMHgwNTggKyAoMHgwMjAgKiBuKSkKKyNkZWZpbmUgTDNfUE1fQUREUl9NQVRDSChuKQkJKDB4MDYwICsgKDB4MDIwICogbikpCisKKy8qIEwzIGVycm9yIGxvZyBiaXQgZmllbGRzLiBDb21tb24gZm9yIElBIGFuZCBUQSAqLworI2RlZmluZSBMM19FUlJPUl9MT0dfQ09ERQkJMjQKKyNkZWZpbmUgTDNfRVJST1JfTE9HX0lOSVRJRAkJOAorI2RlZmluZSBMM19FUlJPUl9MT0dfQ01ECQkwCisKKy8qIEwzIGFnZW50IHN0YXR1cyBiaXQgZmllbGRzLiAqLworI2RlZmluZSBMM19BR0VOVF9TVEFUVVNfQ0xFQVJfSUEJMHgxMDAwMDAwMAorI2RlZmluZSBMM19BR0VOVF9TVEFUVVNfQ0xFQVJfVEEJMHgwMTAwMDAwMAorCisjZGVmaW5lIE9NQVAzNHh4X0lSUV9MM19BUFAJCTEwCisjZGVmaW5lIEwzX0FQUExJQ0FUSU9OX0VSUk9SCQkweDAKKyNkZWZpbmUgTDNfREVCVUdfRVJST1IJCQkweDEKKworZW51bSBvbWFwM19sM19pbml0aWF0b3JfaWQgeworCS8qIExDRCBoYXMgMSBJRCAqLworCU9NQVBfTDNfTENECSAgICAgICAgPSAyOSwKKwkvKiBTQUQyRCBoYXMgMSBJRCAqLworCU9NQVBfTDNfU0FEMkQJCT0gMjgsCisJLyogTVBVIGhhcyA1IElEcyAqLworCU9NQVBfTDNfSUFfTVBVX1NTXzEgICAgID0gMjcsCisJT01BUF9MM19JQV9NUFVfU1NfMiAgICAgPSAyNiwKKwlPTUFQX0wzX0lBX01QVV9TU18zICAgICA9IDI1LAorCU9NQVBfTDNfSUFfTVBVX1NTXzQgICAgID0gMjQsCisJT01BUF9MM19JQV9NUFVfU1NfNSAgICAgPSAyMywKKwkvKiBJVkEyLjIgU1MgaGFzIDMgSURzKi8KKwlPTUFQX0wzX0lBX0lWQV9TU18xICAgICA9IDIyLAorCU9NQVBfTDNfSUFfSVZBX1NTXzIgICAgID0gMjEsCisJT01BUF9MM19JQV9JVkFfU1NfMyAgICAgPSAyMCwKKwkvKiBJVkEgMi4yIFNTIERNQSBoYXMgNiBJRFMgKi8KKwlPTUFQX0wzX0lBX0lWQV9TU19ETUFfMSA9IDE5LAorCU9NQVBfTDNfSUFfSVZBX1NTX0RNQV8yID0gMTgsCisJT01BUF9MM19JQV9JVkFfU1NfRE1BXzMgPSAxNywKKwlPTUFQX0wzX0lBX0lWQV9TU19ETUFfNCA9IDE2LAorCU9NQVBfTDNfSUFfSVZBX1NTX0RNQV81ID0gMTUsCisJT01BUF9MM19JQV9JVkFfU1NfRE1BXzYgPSAxNCwKKwkvKiBTR1ggaGFzIDEgSUQgKi8KKwlPTUFQX0wzX0lBX1NHWAkJPSAxMywKKwkvKiBDQU0gaGFzIDMgSUQgKi8KKwlPTUFQX0wzX0lBX0NBTV8xCT0gMTIsCisJT01BUF9MM19JQV9DQU1fMgk9IDExLAorCU9NQVBfTDNfSUFfQ0FNXzMJPSAxMCwKKwkvKiBEQVAgaGFzIDEgSUQgKi8KKwlPTUFQX0wzX0lBX0RBUAkJPSA5LAorCS8qIFNETUEgV1IgaGFzIDIgSURzICovCisJT01BUF9MM19TRE1BX1dSXzEJPSA4LAorCU9NQVBfTDNfU0RNQV9XUl8yCT0gNywKKwkvKiBTRE1BIFJEIGhhcyA0IElEcyAqLworCU9NQVBfTDNfU0RNQV9SRF8xCT0gNiwKKwlPTUFQX0wzX1NETUFfUkRfMgk9IDUsCisJT01BUF9MM19TRE1BX1JEXzMJPSA0LAorCU9NQVBfTDNfU0RNQV9SRF80CT0gMywKKwkvKiBIU1VTQiBPVEcgaGFzIDEgSUQgKi8KKwlPTUFQX0wzX1VTQk9URwkJPSAyLAorCS8qIEhTVVNCIEhPU1QgaGFzIDEgSUQgKi8KKwlPTUFQX0wzX1VTQkhPU1QJCT0gMSwKK307CisKK2VudW0gb21hcDNfbDNfY29kZSB7CisJT01BUF9MM19DT0RFX05PRVJST1IgPSAwLAorCU9NQVBfTDNfQ09ERV9VTlNVUF9DTUQgPSAxLAorCU9NQVBfTDNfQ09ERV9BRERSX0hPTEUgPSAyLAorCU9NQVBfTDNfQ09ERV9QUk9URUNUX1ZJT0xBVElPTiA9IDMsCisJT01BUF9MM19DT0RFX0lOX0JBTkRfRVJSID0gNCwKKwkvKiBjb2RlcyA1IGFuZCA2IGFyZSByZXNlcnZlZCAqLworCU9NQVBfTDNfQ09ERV9SRVFfVE9VVF9OT1RfQUNDRVBUID0gNywKKwlPTUFQX0wzX0NPREVfUkVRX1RPVVRfTk9fUkVTUCA9IDgsCisJLyogY29kZXMgOSAtIDE1IGFyZSBhbHNvIHJlc2VydmVkICovCit9OworCitzdHJ1Y3Qgb21hcDNfbDMgeworCXN0cnVjdCBkZXZpY2UgICAqZGV2OworCXN0cnVjdCBjbGsgICAgICAqaWNrOworCisJLyogbWVtb3J5IGJhc2UqLworCXZvaWQgX19pb21lbSAgICAqcnQ7CisKKwlpbnQgICAgICAgICAgICAgZGVidWdfaXJxOworCWludCAgICAgICAgICAgICBhcHBfaXJxOworCisJLyogdHJ1ZSB3aGVuIGFuZCBpbmJhbmQgZnVuY3Rpb25hbCBlcnJvciBvY2N1cnMgKi8KKwl1bnNpZ25lZCAgICAgICAgaW5iYW5kOjE7Cit9OworCisvKiBvZmZzZXRzIGZvciBsMyBhZ2VudHMgaW4gb3JkZXIgd2l0aCB0aGUgRmxhZyBzdGF0dXMgcmVnaXN0ZXIgKi8KK3Vuc2lnbmVkIGludCBfX2lvbWVtIG9tYXAzX2wzX2FwcF9iYXNlc1tdID0geworCS8qIE1QVSBJQSAqLworCTB4MTQwMCwKKwkweDE0MDAsCisJMHgxNDAwLAorCS8qIFJFU0VSVkVEICovCisJMCwKKwkwLAorCTAsCisJLyogSVZBIDIuMiBJQSAqLworCTB4MTgwMCwKKwkweDE4MDAsCisJMHgxODAwLAorCS8qIFNHWCBJQSAqLworCTB4MWMwMCwKKwkweDFjMDAsCisJLyogUkVTRVJWRUQgKi8KKwkwLAorCS8qIENBTUVSQSBJQSAqLworCTB4NTgwMCwKKwkweDU4MDAsCisJMHg1ODAwLAorCS8qIERJU1BMQVkgSUEgKi8KKwkweDU0MDAsCisJMHg1NDAwLAorCS8qIFJFU0VSVkVEICovCisJMCwKKwkvKlNETUEgUkQgSUEgKi8KKwkweDRjMDAsCisJMHg0YzAwLAorCS8qIFJFU0VSVkVEICovCisJMCwKKwkvKiBTRE1BIFdSIElBICovCisJMHg1MDAwLAorCTB4NTAwMCwKKwkvKiBSRVNFUlZFRCAqLworCTAsCisJLyogVVNCIE9URyBJQSAqLworCTB4NDQwMCwKKwkweDQ0MDAsCisJMHg0NDAwLAorCS8qIFVTQiBIT1NUIElBICovCisJMHg0MDAwLAorCTB4NDAwMCwKKwkvKiBSRVNFUlZFRCAqLworCTAsCisJMCwKKwkwLAorCTAsCisJLyogU0FEMkQgSUEgKi8KKwkweDMwMDAsCisJMHgzMDAwLAorCTB4MzAwMCwKKwkvKiBSRVNFUlZFRCAqLworCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCS8qIFNNQSBUQSAqLworCTB4MjAwMCwKKwkvKiBHUE1DIFRBICovCisJMHgyNDAwLAorCS8qIE9DTSBSQU0gVEEgKi8KKwkweDI4MDAsCisJLyogT0NNIFJPTSBUQSAqLworCTB4MkMwMCwKKwkvKiBMNCBDT1JFIFRBICovCisJMHg2ODAwLAorCS8qIEw0IFBFUiBUQSAqLworCTB4NmMwMCwKKwkvKiBJVkEgMi4yIFRBICovCisJMHg2MDAwLAorCS8qIFNHWCBUQSAqLworCTB4NjQwMCwKKwkvKiBMNCBFTVUgVEEgKi8KKwkweDcwMDAsCisJLyogR1BNQyBUQSAqLworCTB4MjQwMCwKKwkvKiBMNCBDT1JFIFRBICovCisJMHg2ODAwLAorCS8qIEw0IFBFUiBUQSAqLworCTB4NmMwMCwKKwkvKiBMNCBFTVUgVEEgKi8KKwkweDcwMDAsCisJLyogTUFEMkQgVEEgKi8KKwkweDM0MDAsCisJLyogUkVTRVJWRUQgKi8KKwkwLAorCTAsCit9OworCit1bnNpZ25lZCBpbnQgX19pb21lbSBvbWFwM19sM19kZWJ1Z19iYXNlc1tdID0geworCS8qIE1QVSBEQVRBIElBICovCisJMHgxNDAwLAorCS8qIFJFU0VSVkVEICovCisJMCwKKwkwLAorCS8qIERBUCBJQSAqLworCTB4NWMwMCwKKwkweDVjMDAsCisJLyogUkVTRVJWRUQgKi8KKwkwLAorCS8qIElWQSAyLjIgSUEgKi8KKwkweDE4MDAsCisJLyogUkVTVCBSRVNFUlZFRCAqLworfTsKKwordTMyICpvbWFwM19sM19iYXNlc1tdID0geworCW9tYXAzX2wzX2FwcF9iYXNlcywKKwlvbWFwM19sM19kZWJ1Z19iYXNlcywKK307CisKKy8qCisgKiBSRVZJU0lUIGRlZmluZSBfX3Jhd19yZWFkbGwvX19yYXdfd3JpdGVsbCBoZXJlLCBidXQgbW92ZSB0aGVtIHRvCisgKiA8YXNtL2lvLmg+IGF0IHNvbWUgcG9pbnQKKyAqLworI2RlZmluZSBfX3Jhd193cml0ZWxsKHYsIGEpCShfX2Noa19pb19wdHIoYSksIFwKKwkJCQkqKHZvbGF0aWxlIHU2NCBfX2ZvcmNlICopKGEpID0gKHYpKQorI2RlZmluZSBfX3Jhd19yZWFkbGwoYSkJCShfX2Noa19pb19wdHIoYSksIFwKKwkJCQkqKHZvbGF0aWxlIHU2NCBfX2ZvcmNlICopKGEpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9vcHBfZGF0YS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX29wcF9kYXRhLmgKaW5kZXggNDZhYzI3ZC4uYzc4NGMxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX29wcF9kYXRhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX29wcF9kYXRhLmgKQEAgLTIxLDYgKzIxLDggQEAKIAogI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgogCisjaW5jbHVkZSAidm9sdGFnZS5oIgorCiAvKgogICogKkJJRyBGQVQgV0FSTklORyo6CiAgKiBVU0UgdGhlIGZvbGxvd2luZyBPTkxZIGluIG9wcCBkYXRhIGluaXRpYWxpemF0aW9uIGNvbW1vbiB0byBhbiBTb0MuCkBAIC02NSw4ICs2NywzMCBAQAogCS51X3ZvbHQJCT0gX3V2LAkJCQkJXAogfQogCisvKgorICogSW5pdGlhbGl6YXRpb24gd3JhcHBlciB1c2VkIHRvIGRlZmluZSBTbWFydFJlZmxleCBwcm9jZXNzIGRhdGEKKyAqIFhYWCBJcyB0aGlzIG5lZWRlZD8gIEp1c3QgdXNlIEM5OSBpbml0aWFsaXplcnMgaW4gZGF0YSBmaWxlcz8KKyAqLworI2RlZmluZSBWT0xUX0RBVEFfREVGSU5FKF92X25vbSwgX2VmdXNlX29mZnMsIF9lcnJtaW5saW1pdCwgX2VycmdhaW4pICBcCit7CQkJCQkJCQkgICAgICAgXAorCS52b2x0X25vbWluYWwJPSBfdl9ub20sCQkJCSAgICAgICBcCisJLnNyX2VmdXNlX29mZnMJPSBfZWZ1c2Vfb2ZmcywJCQkJICAgICAgIFwKKwkuc3JfZXJybWlubGltaXQgPSBfZXJybWlubGltaXQsCQkJCSAgICAgICBcCisJLnZwX2VycmdhaW4JPSBfZXJyZ2FpbgkJCQkgICAgICAgXAorfQorCiAvKiBVc2UgdGhpcyB0byBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHRhYmxlICovCiBleHRlcm4gaW50IF9faW5pdCBvbWFwX2luaXRfb3BwX3RhYmxlKHN0cnVjdCBvbWFwX29wcF9kZWYgKm9wcF9kZWYsCiAJCXUzMiBvcHBfZGVmX3NpemUpOwogCisKK2V4dGVybiBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDM0eHhfdmRkbXB1X3ZvbHRfZGF0YVtdOworZXh0ZXJuIHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSBvbWFwMzR4eF92ZGRjb3JlX3ZvbHRfZGF0YVtdOworZXh0ZXJuIHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSBvbWFwMzZ4eF92ZGRtcHVfdm9sdF9kYXRhW107CitleHRlcm4gc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXAzNnh4X3ZkZGNvcmVfdm9sdF9kYXRhW107CisKK2V4dGVybiBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX21wdV92b2x0X2RhdGFbXTsKK2V4dGVybiBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX2l2YV92b2x0X2RhdGFbXTsKK2V4dGVybiBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX2NvcmVfdm9sdF9kYXRhW107CisKICNlbmRpZgkJLyogX19BUkNIX0FSTV9NQUNIX09NQVAyX09NQVBfT1BQX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCmluZGV4IGViZTMzZGYuLmUyZTYwNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KIAogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CisjaW5jbHVkZSAiY29udHJvbC5oIgogCiAvKiBPTUFQIGNvbnRyb2wgbW9kdWxlIHJlZ2lzdGVyIGZvciBVVE1JIFBIWSAqLwogI2RlZmluZSBDT05UUk9MX0RFVl9DT05GCQkweDMwMApAQCAtMTYyLDMgKzE2Myw5NSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3ZvaWQgYW0zNXhfbXVzYl9yZXNldCh2b2lkKQoreworCXUzMglyZWd2YWw7CisKKwkvKiBSZXNldCB0aGUgbXVzYiBpbnRlcmZhY2UgKi8KKwlyZWd2YWwgPSBvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfSVBfU1dfUkVTRVQpOworCisJcmVndmFsIHw9IEFNMzVYWF9VU0JPVEdTU19TV19SU1Q7CisJb21hcF9jdHJsX3dyaXRlbChyZWd2YWwsIEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUKTsKKworCXJlZ3ZhbCAmPSB+QU0zNVhYX1VTQk9UR1NTX1NXX1JTVDsKKwlvbWFwX2N0cmxfd3JpdGVsKHJlZ3ZhbCwgQU0zNVhYX0NPTlRST0xfSVBfU1dfUkVTRVQpOworCisJcmVndmFsID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUKTsKK30KKwordm9pZCBhbTM1eF9tdXNiX3BoeV9wb3dlcih1OCBvbikKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDApOworCXUzMiBkZXZjb25mMjsKKworCWlmIChvbikgeworCQkvKgorCQkgKiBTdGFydCB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwuCisJCSAqLworCQlkZXZjb25mMiA9IG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9ERVZDT05GMik7CisKKwkJZGV2Y29uZjIgJj0gfihDT05GMl9SRVNFVCB8IENPTkYyX1BIWVBXUkROIHwgQ09ORjJfT1RHUFdSRE4pOworCQlkZXZjb25mMiB8PSBDT05GMl9QSFlfUExMT047CisKKwkJb21hcF9jdHJsX3dyaXRlbChkZXZjb25mMiwgQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOworCisJCXByX2luZm8oS0VSTl9JTkZPICJXYWl0aW5nIGZvciBQSFkgY2xvY2sgZ29vZC4uLlxuIik7CisJCXdoaWxlICghKG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9ERVZDT05GMikKKwkJCQkmIENPTkYyX1BIWUNMS0dEKSkgeworCQkJY3B1X3JlbGF4KCk7CisKKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQkJcHJfZXJyKEtFUk5fRVJSICJtdXNiIFBIWSBjbG9jayBnb29kIHRpbWVkIG91dFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBQb3dlciBkb3duIHRoZSBvbi1jaGlwIFBIWS4KKwkJICovCisJCWRldmNvbmYyID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKKworCQlkZXZjb25mMiAmPSB+Q09ORjJfUEhZX1BMTE9OOworCQlkZXZjb25mMiB8PSAgQ09ORjJfUEhZUFdSRE4gfCBDT05GMl9PVEdQV1JETjsKKwkJb21hcF9jdHJsX3dyaXRlbChkZXZjb25mMiwgQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOworCX0KK30KKwordm9pZCBhbTM1eF9tdXNiX2NsZWFyX2lycSh2b2lkKQoreworCXUzMiByZWd2YWw7CisKKwlyZWd2YWwgPSBvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfTFZMX0lOVFJfQ0xFQVIpOworCXJlZ3ZhbCB8PSBBTTM1WFhfVVNCT1RHU1NfSU5UX0NMUjsKKwlvbWFwX2N0cmxfd3JpdGVsKHJlZ3ZhbCwgQU0zNVhYX0NPTlRST0xfTFZMX0lOVFJfQ0xFQVIpOworCXJlZ3ZhbCA9IG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUik7Cit9CisKK3ZvaWQgYW0zNXhfbXVzYl9zZXRfbW9kZSh1OCBtdXNiX21vZGUpCit7CisJdTMyIGRldmNvbmYyID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKKworCWRldmNvbmYyICY9IH5DT05GMl9PVEdNT0RFOworCXN3aXRjaCAobXVzYl9tb2RlKSB7CisjaWZkZWYJQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECisJY2FzZSBNVVNCX0hPU1Q6CQkvKiBGb3JjZSBWQlVTIHZhbGlkLCBJRCA9IDAgKi8KKwkJZGV2Y29uZjIgfD0gQ09ORjJfRk9SQ0VfSE9TVDsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKKwljYXNlIE1VU0JfUEVSSVBIRVJBTDoJLyogRm9yY2UgVkJVUyB2YWxpZCwgSUQgPSAxICovCisJCWRldmNvbmYyIHw9IENPTkYyX0ZPUkNFX0RFVklDRTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCisJY2FzZSBNVVNCX09URzoJCS8qIERvbid0IG92ZXJyaWRlIHRoZSBWQlVTL0lEIGNvbXBhcmF0b3JzICovCisJCWRldmNvbmYyIHw9IENPTkYyX05PX09WRVJSSURFOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXByX2luZm8oS0VSTl9JTkZPICJVbnN1cHBvcnRlZCBtb2RlICV1XG4iLCBtdXNiX21vZGUpOworCX0KKworCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYwppbmRleCAwMGUxZDJiLi4wYThlNzRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfdHdsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3R3bC5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCi0jaW5jbHVkZSA8cGxhdC92b2x0YWdlLmg+CisjaW5jbHVkZSAidm9sdGFnZS5oIgogCiAjaW5jbHVkZSAicG0uaCIKIApAQCAtNTksOCArNTksMTUgQEAKIAogc3RhdGljIGJvb2wgaXNfb2Zmc2V0X3ZhbGlkOwogc3RhdGljIHU4IHNtcHNfb2Zmc2V0OworLyoKKyAqIEZsYWcgdG8gZW5zdXJlIFNtYXJ0cmVmbGV4IGJpdCBpbiBUV0wKKyAqIGJlaW5nIGNsZWFyZWQgaW4gYm9hcmQgZmlsZSBpcyBub3Qgb3ZlcndyaXR0ZW4uCisgKi8KK3N0YXRpYyBib29sIF9faW5pdGRhdGEgdHdsX3NyX2VuYWJsZV9hdXRvaW5pdDsKIAorI2RlZmluZSBUV0w0MDMwX0RDRENfR0xPQkFMX0NGRyAgICAgICAgMHgwNgogI2RlZmluZSBSRUdfU01QU19PRkZTRVQgICAgICAgICAweEUwCisjZGVmaW5lIFNNQVJUUkVGTEVYX0VOQUJMRSAgICAgQklUKDMpCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHR3bDQwMzBfdnNlbF90b191dihjb25zdCB1OCB2c2VsKQogewpAQCAtMjY5LDYgKzI3NiwxOCBAQAogCQlvbWFwM19jb3JlX3ZvbHRfaW5mby52cF92ZGRtYXggPSBPTUFQMzYzMF9WUDJfVkxJTUlUVE9fVkRETUFYOwogCX0KIAorCS8qCisJICogVGhlIHNtYXJ0cmVmbGV4IGJpdCBvbiB0d2w0MDMwIHNwZWNpZmllcyBpZiB0aGUgc2V0dGluZyBvZiB2b2x0YWdlCisJICogaXMgZG9uZSBvdmVyIHRoZSBJMkNfU1IgcGF0aC4gU2luY2UgdGhpcyBzZXR0aW5nIGlzIGluZGVwZW5kZW50IG9mCisJICogdGhlIGFjdHVhbCB1c2FnZSBvZiBzbWFydHJlZmxleCBBVlMgbW9kdWxlLCB3ZSBlbmFibGUgVFdMIFNSIGJpdAorCSAqIGJ5IGRlZmF1bHQgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgc21hcnRyZWZsZXggQVZTIG1vZHVsZSBpcyBlbmFibGVkCisJICogb24gdGhlIE9NQVAgc2lkZSBvciBub3QuIFRoaXMgaXMgYmVjYXVzZSB3aXRob3V0IHRoaXMgYml0IGVuYWJsZWQsCisJICogdGhlIHZvbHRhZ2Ugc2NhbGluZyB0aHJvdWdoIHZwIGZvcmNldXBkYXRlL2J5cGFzcyBtZWNoYW5pc20gb2YKKwkgKiB2b2x0YWdlIHNjYWxpbmcgd2lsbCBub3QgZnVuY3Rpb24gb24gVFdMIG92ZXIgSTJDX1NSLgorCSAqLworCWlmICghdHdsX3NyX2VuYWJsZV9hdXRvaW5pdCkKKwkJb21hcDNfdHdsX3NldF9zcl9iaXQodHJ1ZSk7CisKIAl2b2x0ZG0gPSBvbWFwX3ZvbHRhZ2VfZG9tYWluX2xvb2t1cCgibXB1Iik7CiAJb21hcF92b2x0YWdlX3JlZ2lzdGVyX3BtaWModm9sdGRtLCAmb21hcDNfbXB1X3ZvbHRfaW5mbyk7CiAKQEAgLTI3NywzICsyOTYsNDQgQEAKIAogCXJldHVybiAwOwogfQorCisvKioKKyAqIG9tYXAzX3R3bF9zZXRfc3JfYml0KCkgLSBTZXQvQ2xlYXIgU1IgYml0IG9uIFRXTAorICogQGVuYWJsZTogZW5hYmxlIFNSIG1vZGUgaW4gdHdsIG9yIG5vdAorICoKKyAqIElmICdlbmFibGUnIGlzIHRydWUsIGVuYWJsZXMgU21hcnRyZWZsZXggYml0IG9uIFRXTCA0MDMwIHRvIG1ha2Ugc3VyZQorICogdm9sdGFnZSBzY2FsaW5nIHRocm91Z2ggT01BUCBTUiB3b3Jrcy4gRWxzZSwgdGhlIHNtYXJ0cmVmbGV4IGJpdAorICogb24gdHdsNDAzMCBpcyBjbGVhcmVkIGFzIHRoZXJlIGFyZSBwbGF0Zm9ybXMgd2hpY2ggdXNlIE9NQVAzIGFuZCBUMiBidXQKKyAqIHVzZSBTeW5jaHJvbml6ZWQgU2NhbGluZyBIYXJkd2FyZSBTdHJhdGVneSAoRU5BQkxFX1ZNT0RFPTEpIGFuZCBEaXJlY3QKKyAqIFN0cmF0ZWd5IFNvZnR3YXJlIFNjYWxpbmcgTW9kZSAoRU5BQkxFX1ZNT0RFPTApLCBmb3Igc2V0dGluZyB0aGUgdm9sdGFnZXMsCisgKiBpbiB0aG9zZSBzY2VuYXJpb3MgdGhpcyBiaXQgaXMgdG8gYmUgY2xlYXJlZCAoZW5hYmxlID0gZmFsc2UpLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNlc3MsIGVycm9yIGlzIHJldHVybmVkIGlmIEkyQyByZWFkL3dyaXRlIGZhaWxzLgorICovCitpbnQgX19pbml0IG9tYXAzX3R3bF9zZXRfc3JfYml0KGJvb2wgZW5hYmxlKQoreworCXU4IHRlbXA7CisJaW50IHJldDsKKwlpZiAodHdsX3NyX2VuYWJsZV9hdXRvaW5pdCkKKwkJcHJfd2FybmluZygiJXM6IHVuZXhwZWN0ZWQgbXVsdGlwbGUgY2FsbHNcbiIsIF9fZnVuY19fKTsKKworCXJldCA9IHR3bF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgJnRlbXAsCisJCQkJCVRXTDQwMzBfRENEQ19HTE9CQUxfQ0ZHKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWlmIChlbmFibGUpCisJCXRlbXAgfD0gU01BUlRSRUZMRVhfRU5BQkxFOworCWVsc2UKKwkJdGVtcCAmPSB+U01BUlRSRUZMRVhfRU5BQkxFOworCisJcmV0ID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgdGVtcCwKKwkJCQlUV0w0MDMwX0RDRENfR0xPQkFMX0NGRyk7CisJaWYgKCFyZXQpIHsKKwkJdHdsX3NyX2VuYWJsZV9hdXRvaW5pdCA9IHRydWU7CisJCXJldHVybiAwOworCX0KK2VycjoKKwlwcl9lcnIoIiVzOiBFcnJvciBhY2Nlc3MgdG8gVFdMNDAzMCAoJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaAppbmRleCAzOGI3MzA1Li44YWZmYzY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaApAQCAtNDE4LDcgKzQxOCw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgb21hcDI0MjBfcmF0ZV90YWJsZVtdOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDMwCiBleHRlcm4gY29uc3Qgc3RydWN0IHByY21fY29uZmlnIG9tYXAyNDMwX3JhdGVfdGFibGVbXTsKICNlbHNlCiAjZGVmaW5lIG9tYXAyNDMwX3JhdGVfdGFibGUJTlVMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAzeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwM3h4eF9kYXRhLmMKaW5kZXggMDQ4NmZjZS4uZDk1ZjNmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAzeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDN4eHhfZGF0YS5jCkBAIC00LDggKzQsOSBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCiAgKglOaXNoYW50aCBNZW5vbgogICoJS2V2aW4gSGlsbWFuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbi4KICAqICAgICAgRWR1YXJkbyBWYWxlbnRpbgorICogICAgICBQYXVsIFdhbG1zbGV5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMCwxOSArMjEsODMgQEAKIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKKyNpbmNsdWRlICJjb250cm9sLmgiCiAjaW5jbHVkZSAib21hcF9vcHBfZGF0YS5oIgorI2luY2x1ZGUgInBtLmgiCisKKy8qIDM0eHggKi8KKworLyogVkREMSAqLworCisjZGVmaW5lIE9NQVAzNDMwX1ZERF9NUFVfT1BQMV9VVgkJOTc1MDAwCisjZGVmaW5lIE9NQVAzNDMwX1ZERF9NUFVfT1BQMl9VVgkJMTA3NTAwMAorI2RlZmluZSBPTUFQMzQzMF9WRERfTVBVX09QUDNfVVYJCTEyMDAwMDAKKyNkZWZpbmUgT01BUDM0MzBfVkREX01QVV9PUFA0X1VWCQkxMjcwMDAwCisjZGVmaW5lIE9NQVAzNDMwX1ZERF9NUFVfT1BQNV9VVgkJMTM1MDAwMAorCitzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDM0eHhfdmRkbXB1X3ZvbHRfZGF0YVtdID0geworCVZPTFRfREFUQV9ERUZJTkUoT01BUDM0MzBfVkREX01QVV9PUFAxX1VWLCBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQMV9WREQxLCAweGY0LCAweDBjKSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9NUFVfT1BQMl9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDJfVkREMSwgMHhmNCwgMHgwYyksCisJVk9MVF9EQVRBX0RFRklORShPTUFQMzQzMF9WRERfTVBVX09QUDNfVVYsIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFAzX1ZERDEsIDB4ZjksIDB4MTgpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDM0MzBfVkREX01QVV9PUFA0X1VWLCBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQNF9WREQxLCAweGY5LCAweDE4KSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9NUFVfT1BQNV9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDVfVkREMSwgMHhmOSwgMHgxOCksCisJVk9MVF9EQVRBX0RFRklORSgwLCAwLCAwLCAwKSwKK307CisKKy8qIFZERDIgKi8KKworI2RlZmluZSBPTUFQMzQzMF9WRERfQ09SRV9PUFAxX1VWCQk5NzUwMDAKKyNkZWZpbmUgT01BUDM0MzBfVkREX0NPUkVfT1BQMl9VVgkJMTA1MDAwMAorI2RlZmluZSBPTUFQMzQzMF9WRERfQ09SRV9PUFAzX1VWCQkxMTUwMDAwCisKK3N0cnVjdCBvbWFwX3ZvbHRfZGF0YSBvbWFwMzR4eF92ZGRjb3JlX3ZvbHRfZGF0YVtdID0geworCVZPTFRfREFUQV9ERUZJTkUoT01BUDM0MzBfVkREX0NPUkVfT1BQMV9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDFfVkREMiwgMHhmNCwgMHgwYyksCisJVk9MVF9EQVRBX0RFRklORShPTUFQMzQzMF9WRERfQ09SRV9PUFAyX1VWLCBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQMl9WREQyLCAweGY0LCAweDBjKSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9DT1JFX09QUDNfVVYsIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFAzX1ZERDIsIDB4ZjksIDB4MTgpLAorCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCit9OworCisvKiAzNnh4ICovCisKKy8qIFZERDEgKi8KKworI2RlZmluZSBPTUFQMzYzMF9WRERfTVBVX09QUDUwX1VWCQkxMDEyNTAwCisjZGVmaW5lIE9NQVAzNjMwX1ZERF9NUFVfT1BQMTAwX1VWCQkxMjAwMDAwCisjZGVmaW5lIE9NQVAzNjMwX1ZERF9NUFVfT1BQMTIwX1VWCQkxMzI1MDAwCisjZGVmaW5lIE9NQVAzNjMwX1ZERF9NUFVfT1BQMUdfVVYJCTEzNzUwMDAKKworc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXAzNnh4X3ZkZG1wdV92b2x0X2RhdGFbXSA9IHsKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNjMwX1ZERF9NUFVfT1BQNTBfVVYsIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFA1MF9WREQxLCAweGY0LCAweDBjKSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNjMwX1ZERF9NUFVfT1BQMTAwX1VWLCBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMTAwX1ZERDEsIDB4ZjksIDB4MTYpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDM2MzBfVkREX01QVV9PUFAxMjBfVVYsIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFAxMjBfVkREMSwgMHhmYSwgMHgyMyksCisJVk9MVF9EQVRBX0RFRklORShPTUFQMzYzMF9WRERfTVBVX09QUDFHX1VWLCBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMUdfVkREMSwgMHhmYSwgMHgyNyksCisJVk9MVF9EQVRBX0RFRklORSgwLCAwLCAwLCAwKSwKK307CisKKy8qIFZERDIgKi8KKworI2RlZmluZSBPTUFQMzYzMF9WRERfQ09SRV9PUFA1MF9VVgkJMTAwMDAwMAorI2RlZmluZSBPTUFQMzYzMF9WRERfQ09SRV9PUFAxMDBfVVYJCTEyMDAwMDAKKworc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXAzNnh4X3ZkZGNvcmVfdm9sdF9kYXRhW10gPSB7CisJVk9MVF9EQVRBX0RFRklORShPTUFQMzYzMF9WRERfQ09SRV9PUFA1MF9VViwgT01BUDM2MzBfQ09OVFJPTF9GVVNFX09QUDUwX1ZERDIsIDB4ZjQsIDB4MGMpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDM2MzBfVkREX0NPUkVfT1BQMTAwX1VWLCBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMTAwX1ZERDIsIDB4ZjksIDB4MTYpLAorCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCit9OworCisvKiBPUFAgZGF0YSAqLwogCiBzdGF0aWMgc3RydWN0IG9tYXBfb3BwX2RlZiBfX2luaXRkYXRhIG9tYXAzNHh4X29wcF9kZWZfbGlzdFtdID0gewogCS8qIE1QVSBPUFAxICovCi0JT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCAxMjUwMDAwMDAsIDk3NTAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCAxMjUwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQMV9VViksCiAJLyogTVBVIE9QUDIgKi8KLQlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsIDI1MDAwMDAwMCwgMTA3NTAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCAyNTAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQMl9VViksCiAJLyogTVBVIE9QUDMgKi8KLQlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsIDUwMDAwMDAwMCwgMTIwMDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCA1MDAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQM19VViksCiAJLyogTVBVIE9QUDQgKi8KLQlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsIDU1MDAwMDAwMCwgMTI3MDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCA1NTAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQNF9VViksCiAJLyogTVBVIE9QUDUgKi8KLQlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsIDYwMDAwMDAwMCwgMTM1MDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCA2MDAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQNV9VViksCiAKIAkvKgogCSAqIEwzIE9QUDEgLSA0MS41IE1IeiBpcyBkaXNhYmxlZCBiZWNhdXNlOiBUaGUgdm9sdGFnZSBmb3IgdGhhdCBPUFAgaXMKQEAgLTQyLDUzICsxMDcsNTMgQEAKIAkgKiBpbXBhY3QgdGhhdCBmcmVxdWVuY3kgd2lsbCBkbyB0byB0aGUgTVBVIGFuZCB0aGUgd2hvbGUgc3lzdGVtIGluCiAJICogZ2VuZXJhbC4KIAkgKi8KLQlPUFBfSU5JVElBTElaRVIoImwzX21haW4iLCBmYWxzZSwgNDE1MDAwMDAsIDk3NTAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluIiwgZmFsc2UsIDQxNTAwMDAwLCBPTUFQMzQzMF9WRERfQ09SRV9PUFAxX1VWKSwKIAkvKiBMMyBPUFAyICovCi0JT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluIiwgdHJ1ZSwgODMwMDAwMDAsIDEwNTAwMDApLAorCU9QUF9JTklUSUFMSVpFUigibDNfbWFpbiIsIHRydWUsIDgzMDAwMDAwLCBPTUFQMzQzMF9WRERfQ09SRV9PUFAyX1VWKSwKIAkvKiBMMyBPUFAzICovCi0JT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluIiwgdHJ1ZSwgMTY2MDAwMDAwLCAxMTUwMDAwKSwKKwlPUFBfSU5JVElBTElaRVIoImwzX21haW4iLCB0cnVlLCAxNjYwMDAwMDAsIE9NQVAzNDMwX1ZERF9DT1JFX09QUDNfVVYpLAogCiAJLyogRFNQIE9QUDEgKi8KLQlPUFBfSU5JVElBTElaRVIoIml2YSIsIHRydWUsIDkwMDAwMDAwLCA5NzUwMDApLAorCU9QUF9JTklUSUFMSVpFUigiaXZhIiwgdHJ1ZSwgOTAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQMV9VViksCiAJLyogRFNQIE9QUDIgKi8KLQlPUFBfSU5JVElBTElaRVIoIml2YSIsIHRydWUsIDE4MDAwMDAwMCwgMTA3NTAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCAxODAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQMl9VViksCiAJLyogRFNQIE9QUDMgKi8KLQlPUFBfSU5JVElBTElaRVIoIml2YSIsIHRydWUsIDM2MDAwMDAwMCwgMTIwMDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCAzNjAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQM19VViksCiAJLyogRFNQIE9QUDQgKi8KLQlPUFBfSU5JVElBTElaRVIoIml2YSIsIHRydWUsIDQwMDAwMDAwMCwgMTI3MDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCA0MDAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQNF9VViksCiAJLyogRFNQIE9QUDUgKi8KLQlPUFBfSU5JVElBTElaRVIoIml2YSIsIHRydWUsIDQzMDAwMDAwMCwgMTM1MDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCA0MzAwMDAwMDAsIE9NQVAzNDMwX1ZERF9NUFVfT1BQNV9VViksCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfb3BwX2RlZiBfX2luaXRkYXRhIG9tYXAzNnh4X29wcF9kZWZfbGlzdFtdID0gewogCS8qIE1QVSBPUFAxIC0gT1BQNTAgKi8KLQlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsICAzMDAwMDAwMDAsIDEwMTI1MDApLAorCU9QUF9JTklUSUFMSVpFUigibXB1IiwgdHJ1ZSwgIDMwMDAwMDAwMCwgT01BUDM2MzBfVkREX01QVV9PUFA1MF9VViksCiAJLyogTVBVIE9QUDIgLSBPUFAxMDAgKi8KLQlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsICA2MDAwMDAwMDAsIDEyMDAwMDApLAorCU9QUF9JTklUSUFMSVpFUigibXB1IiwgdHJ1ZSwgIDYwMDAwMDAwMCwgT01BUDM2MzBfVkREX01QVV9PUFAxMDBfVVYpLAogCS8qIE1QVSBPUFAzIC0gT1BQLVR1cmJvICovCi0JT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCBmYWxzZSwgODAwMDAwMDAwLCAxMzI1MDAwKSwKKwlPUFBfSU5JVElBTElaRVIoIm1wdSIsIGZhbHNlLCA4MDAwMDAwMDAsIE9NQVAzNjMwX1ZERF9NUFVfT1BQMTIwX1VWKSwKIAkvKiBNUFUgT1BQNCAtIE9QUC1TQiAqLwotCU9QUF9JTklUSUFMSVpFUigibXB1IiwgZmFsc2UsIDEwMDAwMDAwMDAsIDEzNzUwMDApLAorCU9QUF9JTklUSUFMSVpFUigibXB1IiwgZmFsc2UsIDEwMDAwMDAwMDAsIE9NQVAzNjMwX1ZERF9NUFVfT1BQMUdfVVYpLAogCiAJLyogTDMgT1BQMSAtIE9QUDUwICovCi0JT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluIiwgdHJ1ZSwgMTAwMDAwMDAwLCAxMDAwMDAwKSwKKwlPUFBfSU5JVElBTElaRVIoImwzX21haW4iLCB0cnVlLCAxMDAwMDAwMDAsIE9NQVAzNjMwX1ZERF9DT1JFX09QUDUwX1VWKSwKIAkvKiBMMyBPUFAyIC0gT1BQMTAwLCBPUFAtVHVyYm8sIE9QUC1TQiAqLwotCU9QUF9JTklUSUFMSVpFUigibDNfbWFpbiIsIHRydWUsIDIwMDAwMDAwMCwgMTIwMDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluIiwgdHJ1ZSwgMjAwMDAwMDAwLCBPTUFQMzYzMF9WRERfQ09SRV9PUFAxMDBfVVYpLAogCiAJLyogRFNQIE9QUDEgLSBPUFA1MCAqLwotCU9QUF9JTklUSUFMSVpFUigiaXZhIiwgdHJ1ZSwgIDI2MDAwMDAwMCwgMTAxMjUwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCAgMjYwMDAwMDAwLCBPTUFQMzYzMF9WRERfTVBVX09QUDUwX1VWKSwKIAkvKiBEU1AgT1BQMiAtIE9QUDEwMCAqLwotCU9QUF9JTklUSUFMSVpFUigiaXZhIiwgdHJ1ZSwgIDUyMDAwMDAwMCwgMTIwMDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCAgNTIwMDAwMDAwLCBPTUFQMzYzMF9WRERfTVBVX09QUDEwMF9VViksCiAJLyogRFNQIE9QUDMgLSBPUFAtVHVyYm8gKi8KLQlPUFBfSU5JVElBTElaRVIoIml2YSIsIGZhbHNlLCA2NjAwMDAwMDAsIDEzMjUwMDApLAorCU9QUF9JTklUSUFMSVpFUigiaXZhIiwgZmFsc2UsIDY2MDAwMDAwMCwgT01BUDM2MzBfVkREX01QVV9PUFAxMjBfVVYpLAogCS8qIERTUCBPUFA0IC0gT1BQLVNCICovCi0JT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCBmYWxzZSwgODAwMDAwMDAwLCAxMzc1MDAwKSwKKwlPUFBfSU5JVElBTElaRVIoIml2YSIsIGZhbHNlLCA4MDAwMDAwMDAsIE9NQVAzNjMwX1ZERF9NUFVfT1BQMUdfVVYpLAogfTsKIAogLyoqCiAgKiBvbWFwM19vcHBfaW5pdCgpIC0gaW5pdGlhbGl6ZSBvbWFwMyBvcHAgdGFibGUKICAqLwotc3RhdGljIGludCBfX2luaXQgb21hcDNfb3BwX2luaXQodm9pZCkKK2ludCBfX2luaXQgb21hcDNfb3BwX2luaXQodm9pZCkKIHsKIAlpbnQgciA9IC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwNHh4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDR4eHhfZGF0YS5jCmluZGV4IGExMWZhNTYuLjIyOTNiYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwNHh4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHA0eHh4X2RhdGEuYwpAQCAtNSw4ICs1LDkgQEAKICAqCU5pc2hhbnRoIE1lbm9uCiAgKglLZXZpbiBIaWxtYW4KICAqCVRoYXJhIEdvcGluYXRoCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbi4KICAqICAgICAgRWR1YXJkbyBWYWxlbnRpbgorICogICAgICBQYXVsIFdhbG1zbGV5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMSwyOCArMjIsNzUgQEAKIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKKyNpbmNsdWRlICJjb250cm9sLmgiCiAjaW5jbHVkZSAib21hcF9vcHBfZGF0YS5oIgorI2luY2x1ZGUgInBtLmgiCisKKy8qCisgKiBTdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgT01BUDQ0MzAgdm9sdGFnZSBzdXBwb3J0ZWQgYW5kIHZhcmlvdXMKKyAqIHZvbHRhZ2UgZGVwZW5kZW50IGRhdGEgZm9yIGVhY2ggVkRELgorICovCisKKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9PUFA1MF9VVgkJMTAyNTAwMAorI2RlZmluZSBPTUFQNDQzMF9WRERfTVBVX09QUDEwMF9VVgkJMTIwMDAwMAorI2RlZmluZSBPTUFQNDQzMF9WRERfTVBVX09QUFRVUkJPX1VWCQkxMzEzMDAwCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfT1BQTklUUk9fVVYJCTEzNzUwMDAKKworc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXA0NHh4X3ZkZF9tcHVfdm9sdF9kYXRhW10gPSB7CisJVk9MVF9EQVRBX0RFRklORShPTUFQNDQzMF9WRERfTVBVX09QUDUwX1VWLCBPTUFQNDRYWF9DT05UUk9MX0ZVU0VfTVBVX09QUDUwLCAweGY0LCAweDBjKSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9NUFVfT1BQMTAwX1VWLCBPTUFQNDRYWF9DT05UUk9MX0ZVU0VfTVBVX09QUDEwMCwgMHhmOSwgMHgxNiksCisJVk9MVF9EQVRBX0RFRklORShPTUFQNDQzMF9WRERfTVBVX09QUFRVUkJPX1VWLCBPTUFQNDRYWF9DT05UUk9MX0ZVU0VfTVBVX09QUFRVUkJPLCAweGZhLCAweDIzKSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9NUFVfT1BQTklUUk9fVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQTklUUk8sIDB4ZmEsIDB4MjcpLAorCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCit9OworCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9JVkFfT1BQNTBfVVYJCTEwMTMwMDAKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9PUFAxMDBfVVYJCTExODgwMDAKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9PUFBUVVJCT19VVgkJMTMwMDAwMAorCitzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX2l2YV92b2x0X2RhdGFbXSA9IHsKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9JVkFfT1BQNTBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQNTAsIDB4ZjQsIDB4MGMpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX0lWQV9PUFAxMDBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQMTAwLCAweGY5LCAweDE2KSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9JVkFfT1BQVFVSQk9fVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQVFVSQk8sIDB4ZmEsIDB4MjMpLAorCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCit9OworCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9DT1JFX09QUDUwX1VWCQkxMDI1MDAwCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9DT1JFX09QUDEwMF9VVgkJMTIwMDAwMAorCitzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX2NvcmVfdm9sdF9kYXRhW10gPSB7CisJVk9MVF9EQVRBX0RFRklORShPTUFQNDQzMF9WRERfQ09SRV9PUFA1MF9VViwgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX0NPUkVfT1BQNTAsIDB4ZjQsIDB4MGMpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX0NPUkVfT1BQMTAwX1VWLCBPTUFQNDRYWF9DT05UUk9MX0ZVU0VfQ09SRV9PUFAxMDAsIDB4ZjksIDB4MTYpLAorCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCit9OworCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9vcHBfZGVmIF9faW5pdGRhdGEgb21hcDQ0eHhfb3BwX2RlZl9saXN0W10gPSB7CiAJLyogTVBVIE9QUDEgLSBPUFA1MCAqLwotCU9QUF9JTklUSUFMSVpFUigibXB1IiwgdHJ1ZSwgMzAwMDAwMDAwLCAxMTAwMDAwKSwKKwlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsIDMwMDAwMDAwMCwgT01BUDQ0MzBfVkREX01QVV9PUFA1MF9VViksCiAJLyogTVBVIE9QUDIgLSBPUFAxMDAgKi8KLQlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsIDYwMDAwMDAwMCwgMTIwMDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCA2MDAwMDAwMDAsIE9NQVA0NDMwX1ZERF9NUFVfT1BQMTAwX1VWKSwKIAkvKiBNUFUgT1BQMyAtIE9QUC1UdXJibyAqLwotCU9QUF9JTklUSUFMSVpFUigibXB1IiwgZmFsc2UsIDgwMDAwMDAwMCwgMTI2MDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCA4MDAwMDAwMDAsIE9NQVA0NDMwX1ZERF9NUFVfT1BQVFVSQk9fVVYpLAogCS8qIE1QVSBPUFA0IC0gT1BQLVNCICovCi0JT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCBmYWxzZSwgMTAwODAwMDAwMCwgMTM1MDAwMCksCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCAxMDA4MDAwMDAwLCBPTUFQNDQzMF9WRERfTVBVX09QUE5JVFJPX1VWKSwKIAkvKiBMMyBPUFAxIC0gT1BQNTAgKi8KLQlPUFBfSU5JVElBTElaRVIoImwzX21haW5fMSIsIHRydWUsIDEwMDAwMDAwMCwgOTMwMDAwKSwKKwlPUFBfSU5JVElBTElaRVIoImwzX21haW5fMSIsIHRydWUsIDEwMDAwMDAwMCwgT01BUDQ0MzBfVkREX0NPUkVfT1BQNTBfVVYpLAogCS8qIEwzIE9QUDIgLSBPUFAxMDAsIE9QUC1UdXJibywgT1BQLVNCICovCi0JT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluXzEiLCB0cnVlLCAyMDAwMDAwMDAsIDExMDAwMDApLAotCS8qIFRPRE86IGFkZCBJVkEsIERTUCwgYWVzcywgZmRpZiwgZ3B1ICovCisJT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluXzEiLCB0cnVlLCAyMDAwMDAwMDAsIE9NQVA0NDMwX1ZERF9DT1JFX09QUDEwMF9VViksCisJLyogSVZBIE9QUDEgLSBPUFA1MCAqLworCU9QUF9JTklUSUFMSVpFUigiaXZhIiwgdHJ1ZSwgMTMzMDAwMDAwLCBPTUFQNDQzMF9WRERfSVZBX09QUDUwX1VWKSwKKwkvKiBJVkEgT1BQMiAtIE9QUDEwMCAqLworCU9QUF9JTklUSUFMSVpFUigiaXZhIiwgdHJ1ZSwgMjY2MTAwMDAwLCBPTUFQNDQzMF9WRERfSVZBX09QUDEwMF9VViksCisJLyogSVZBIE9QUDMgLSBPUFAtVHVyYm8gKi8KKwlPUFBfSU5JVElBTElaRVIoIml2YSIsIGZhbHNlLCAzMzIwMDAwMDAsIE9NQVA0NDMwX1ZERF9JVkFfT1BQVFVSQk9fVVYpLAorCS8qIFRPRE86IGFkZCBEU1AsIGFlc3MsIGZkaWYsIGdwdSAqLwogfTsKIAogLyoqCiAgKiBvbWFwNF9vcHBfaW5pdCgpIC0gaW5pdGlhbGl6ZSBvbWFwNCBvcHAgdGFibGUKICAqLwotc3RhdGljIGludCBfX2luaXQgb21hcDRfb3BwX2luaXQodm9pZCkKK2ludCBfX2luaXQgb21hcDRfb3BwX2luaXQodm9pZCkKIHsKIAlpbnQgciA9IC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwppbmRleCBkNWExMDJjLi4zMGFmMzM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCkBAIC0xOCw4ICsxOCw4IEBACiAjaW5jbHVkZSA8cGxhdC9vbWFwLXBtLmg+CiAjaW5jbHVkZSA8cGxhdC9vbWFwX2RldmljZS5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+Ci0jaW5jbHVkZSA8cGxhdC92b2x0YWdlLmg+CiAKKyNpbmNsdWRlICJ2b2x0YWdlLmgiCiAjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKICNpbmNsdWRlICJjbG9ja2RvbWFpbi5oIgogI2luY2x1ZGUgInBtLmgiCkBAIC04Myw3ICs4Myw5IEBACiBzdGF0aWMgdm9pZCBvbWFwMl9pbml0X3Byb2Nlc3Nvcl9kZXZpY2VzKHZvaWQpCiB7CiAJX2luaXRfb21hcF9kZXZpY2UoIm1wdSIsICZtcHVfZGV2KTsKLQlfaW5pdF9vbWFwX2RldmljZSgiaXZhIiwgJml2YV9kZXYpOworCWlmIChvbWFwM19oYXNfaXZhKCkpCisJCV9pbml0X29tYXBfZGV2aWNlKCJpdmEiLCAmaXZhX2Rldik7CisKIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJX2luaXRfb21hcF9kZXZpY2UoImwzX21haW5fMSIsICZsM19kZXYpOwogCQlfaW5pdF9vbWFwX2RldmljZSgiZHNwIiwgJmRzcF9kZXYpOwpAQCAtMTI0LDcgKzEyNiw3IEBACiAJCQkocHdyZG0tPmZsYWdzICYgUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UpKSB7CiAJCQlzbGVlcF9zd2l0Y2ggPSBMT1dQT1dFUlNUQVRFX1NXSVRDSDsKIAkJfSBlbHNlIHsKLQkJCW9tYXAyX2Nsa2RtX3dha2V1cChwd3JkbS0+cHdyZG1fY2xrZG1zWzBdKTsKKwkJCWNsa2RtX3dha2V1cChwd3JkbS0+cHdyZG1fY2xrZG1zWzBdKTsKIAkJCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihwd3JkbSk7CiAJCQlzbGVlcF9zd2l0Y2ggPSBGT1JDRVdBS0VVUF9TV0lUQ0g7CiAJCX0KQEAgLTE0MCw5ICsxNDIsOSBAQAogCXN3aXRjaCAoc2xlZXBfc3dpdGNoKSB7CiAJY2FzZSBGT1JDRVdBS0VVUF9TV0lUQ0g6CiAJCWlmIChwd3JkbS0+cHdyZG1fY2xrZG1zWzBdLT5mbGFncyAmIENMS0RNX0NBTl9FTkFCTEVfQVVUTykKLQkJCW9tYXAyX2Nsa2RtX2FsbG93X2lkbGUocHdyZG0tPnB3cmRtX2Nsa2Rtc1swXSk7CisJCQljbGtkbV9hbGxvd19pZGxlKHB3cmRtLT5wd3JkbV9jbGtkbXNbMF0pOwogCQllbHNlCi0JCQlvbWFwMl9jbGtkbV9zbGVlcChwd3JkbS0+cHdyZG1fY2xrZG1zWzBdKTsKKwkJCWNsa2RtX3NsZWVwKHB3cmRtLT5wd3JkbV9jbGtkbXNbMF0pOwogCQlicmVhazsKIAljYXNlIExPV1BPV0VSU1RBVEVfU1dJVENIOgogCQlwd3JkbV9zZXRfbG93cHdyc3RjaGFuZ2UocHdyZG0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCmluZGV4IDM5NTgwZTYuLjc5N2JmZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmgKQEAgLTEyNyw2ICsxMjcsNyBAQAogI2lmZGVmIENPTkZJR19UV0w0MDMwX0NPUkUKIGV4dGVybiBpbnQgb21hcDNfdHdsX2luaXQodm9pZCk7CiBleHRlcm4gaW50IG9tYXA0X3R3bF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwM190d2xfc2V0X3NyX2JpdChib29sIGVuYWJsZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgb21hcDNfdHdsX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCmluZGV4IDk3ZmViM2EuLmRmM2RlZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYwpAQCAtMzYzLDE0ICszNjMsMTEgQEAKIC8qIFhYWCBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBzaGFyZWFibGUgYmV0d2VlbiBPTUFQMnh4eCBhbmQgT01BUDMgKi8KIHN0YXRpYyBpbnQgX19pbml0IGNsa2Rtc19zZXR1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCB2b2lkICp1bnVzZWQpCiB7Ci0JY2xrZG1fY2xlYXJfYWxsX3drZGVwcyhjbGtkbSk7Ci0JY2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwcyhjbGtkbSk7Ci0KIAlpZiAoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPKQotCQlvbWFwMl9jbGtkbV9hbGxvd19pZGxlKGNsa2RtKTsKKwkJY2xrZG1fYWxsb3dfaWRsZShjbGtkbSk7CiAJZWxzZSBpZiAoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0ZPUkNFX1NMRUVQICYmCiAJCSBhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA9PSAwKQotCQlvbWFwMl9jbGtkbV9zbGVlcChjbGtkbSk7CisJCWNsa2RtX3NsZWVwKGNsa2RtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc5LDcgKzM3NiwxMCBAQAogCWludCBpLCBudW1fbWVtX2JhbmtzOwogCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07CiAKLQkvKiBFbmFibGUgYXV0b2lkbGUgKi8KKwkvKgorCSAqIEVuYWJsZSBhdXRvaWRsZQorCSAqIFhYWCBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IGh3bW9kIGNvZGUgb3IgUFJDTSBpbml0IGNvZGUKKwkgKi8KIAlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPSURMRV9NQVNLLCBPQ1BfTU9ELAogCQkJICBPTUFQMl9QUkNNX1NZU0NPTkZJR19PRkZTRVQpOwogCkBAIC00MDUsODMgKzQwNSwxNiBAQAogCiAJcHdyZG0gPSBjbGtkbV9nZXRfcHdyZG0oZHNwX2Nsa2RtKTsKIAlwd3JkbV9zZXRfbmV4dF9wd3JzdChwd3JkbSwgUFdSRE1fUE9XRVJfT0ZGKTsKLQlvbWFwMl9jbGtkbV9zbGVlcChkc3BfY2xrZG0pOworCWNsa2RtX3NsZWVwKGRzcF9jbGtkbSk7CiAKIAlwd3JkbSA9IGNsa2RtX2dldF9wd3JkbShnZnhfY2xrZG0pOwogCXB3cmRtX3NldF9uZXh0X3B3cnN0KHB3cmRtLCBQV1JETV9QT1dFUl9PRkYpOwotCW9tYXAyX2Nsa2RtX3NsZWVwKGdmeF9jbGtkbSk7CisJY2xrZG1fc2xlZXAoZ2Z4X2Nsa2RtKTsKIAotCS8qCi0JICogQ2xlYXIgY2xvY2tkb21haW4gd2FrZXVwIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxlCi0JICogaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIGZvciBhbGwgY2xrZG1zCi0JICovCisJLyogRW5hYmxlIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBmb3IgYWxsIGNsa2RtcyAqLwogCWNsa2RtX2Zvcl9lYWNoKGNsa2Rtc19zZXR1cCwgTlVMTCk7CiAJY2xrZG1fYWRkX3drZGVwKG1wdV9jbGtkbSwgd2t1cF9jbGtkbSk7CiAKLQkvKiBFbmFibGUgY2xvY2sgYXV0b2lkbGUgZm9yIGFsbCBkb21haW5zICovCi0Jb21hcDJfY21fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPX0NBTV9NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX01BSUxCT1hFU19NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX1dEVDRfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0MjBfQVVUT19XRFQzX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fTVNQUk9fTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0MjBfQVVUT19NTUNfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19GQUNfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0MjBfQVVUT19FQUNfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19IRFFfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19VQVJUMl9NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX1VBUlQxX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fSTJDMl9NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0kyQzFfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19NQ1NQSTJfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19NQ1NQSTFfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19NQ0JTUDJfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19NQ0JTUDFfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19HUFQxMl9NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDExX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BUMTBfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19HUFQ5X01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BUOF9NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDdfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19HUFQ2X01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BUNV9NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDRfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19HUFQzX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BUMl9NQVNLIHwKLQkJCSAgICAgICBPTUFQMjQyMF9BVVRPX1ZMWU5RX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fRFNTX01BU0ssCi0JCQkgICAgICAgQ09SRV9NT0QsIENNX0FVVE9JRExFMSk7Ci0Jb21hcDJfY21fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPX1VBUlQzX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fU1NJX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fVVNCX01BU0ssCi0JCQkgICAgICAgQ09SRV9NT0QsIENNX0FVVE9JRExFMik7Ci0Jb21hcDJfY21fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPX1NEUkNfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19HUE1DX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fU0RNQV9NQVNLLAotCQkJICAgICAgIENPUkVfTU9ELCBDTV9BVVRPSURMRTMpOwotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfQVVUT19QS0FfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19BRVNfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19STkdfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19TSEFfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19ERVNfTUFTSywKLQkJCSAgICAgICBDT1JFX01PRCwgT01BUDI0WFhfQ01fQVVUT0lETEU0KTsKLQotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoT01BUDI0MjBfQVVUT19EU1BfSVBJX01BU0ssIE9NQVAyNFhYX0RTUF9NT0QsCi0JCQkgICAgICAgQ01fQVVUT0lETEUpOwotCi0JLyogUHV0IERQTEwgYW5kIGJvdGggQVBMTHMgaW50byBhdXRvaWRsZSBtb2RlICovCi0Jb21hcDJfY21fd3JpdGVfbW9kX3JlZygoMHgwMyA8PCBPTUFQMjRYWF9BVVRPX0RQTExfU0hJRlQpIHwKLQkJCSAgICAgICAoMHgwMyA8PCBPTUFQMjRYWF9BVVRPXzk2TV9TSElGVCkgfAotCQkJICAgICAgICgweDAzIDw8IE9NQVAyNFhYX0FVVE9fNTRNX1NISUZUKSwKLQkJCSAgICAgICBQTExfTU9ELCBDTV9BVVRPSURMRSk7Ci0KLQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX0FVVE9fT01BUENUUkxfTUFTSyB8Ci0JCQkgICAgICAgT01BUDI0WFhfQVVUT19XRFQxX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fTVBVX1dEVF9NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQSU9TX01BU0sgfAotCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fMzJLU1lOQ19NQVNLIHwKLQkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDFfTUFTSywKLQkJCSAgICAgICBXS1VQX01PRCwgQ01fQVVUT0lETEUpOwotCiAJLyogUkVWSVNJVDogQ29uZmlndXJlIG51bWJlciBvZiAzMiBrSHogY2xvY2sgY3ljbGVzIGZvciBzeXNfY2xrCiAJICogc3RhYmlsaXNhdGlvbiAqLwogCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDE1IDw8IE9NQVBfU0VUVVBfVElNRV9TSElGVCwgT01BUDI0WFhfR1JfTU9ELApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggMmY4NjRlNC4uMGM1ZTNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogCiAjaW5jbHVkZSA8cGxhdC9zcmFtLmg+CiAjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKQEAgLTMxMSwxMSArMzEyLDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc3RvcmVfY29udHJvbF9yZWdpc3Rlcih1MzIgdmFsKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7Ci19Ci0KIC8qIEZ1bmN0aW9uIHRvIHJlc3RvcmUgdGhlIHRhYmxlIGVudHJ5IHRoYXQgd2FzIG1vZGlmaWVkIGZvciBlbmFibGluZyBNTVUgKi8KIHN0YXRpYyB2b2lkIHJlc3RvcmVfdGFibGVfZW50cnkodm9pZCkKIHsKQEAgLTMzNyw3ICszMzMsNyBAQAogCWNvbnRyb2xfcmVnX3ZhbHVlID0gX19yYXdfcmVhZGwoc2NyYXRjaHBhZF9hZGRyZXNzCiAJCQkJCSsgT01BUDM0M1hfQ09OVFJPTF9SRUdfVkFMVUVfT0ZGU0VUKTsKIAkvKiBUaGlzIHdpbGwgZW5hYmxlIGNhY2hlcyBhbmQgcHJlZGljdGlvbiAqLwotCXJlc3RvcmVfY29udHJvbF9yZWdpc3Rlcihjb250cm9sX3JlZ192YWx1ZSk7CisJc2V0X2NyKGNvbnRyb2xfcmVnX3ZhbHVlKTsKIH0KIAogdm9pZCBvbWFwX3NyYW1faWRsZSh2b2lkKQpAQCAtNDk2LDcgKzQ5Miw3IEBACiAKIAlwd3JkbV9wb3N0X3RyYW5zaXRpb24oKTsKIAotCW9tYXAyX2Nsa2RtX2FsbG93X2lkbGUobXB1X3B3cmRtLT5wd3JkbV9jbGtkbXNbMF0pOworCWNsa2RtX2FsbG93X2lkbGUobXB1X3B3cmRtLT5wd3JkbV9jbGtkbXNbMF0pOwogfQogCiBpbnQgb21hcDNfY2FuX3NsZWVwKHZvaWQpCkBAIC01MTksOCArNTE1LDE0IEBACiAJaWYgKG9tYXBfaXJxX3BlbmRpbmcoKSB8fCBuZWVkX3Jlc2NoZWQoKSkKIAkJZ290byBvdXQ7CiAKKwl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIDEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJdHJhY2VfY3B1X2lkbGUoMSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwogCW9tYXBfc3JhbV9pZGxlKCk7CiAKKwl0cmFjZV9wb3dlcl9lbmQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0cmFjZV9jcHVfaWRsZShQV1JfRVZFTlRfRVhJVCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwogb3V0OgogCWxvY2FsX2ZpcV9lbmFibGUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC02ODgsMTQ5ICs2OTAsMTUgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHByY21fc2V0dXBfcmVncyh2b2lkKQogewotCXUzMiBvbWFwMzYzMF9hdXRvX3VhcnQ0X21hc2sgPSBjcHVfaXNfb21hcDM2MzAoKSA/Ci0JCQkJCU9NQVAzNjMwX0FVVE9fVUFSVDRfTUFTSyA6IDA7CiAJdTMyIG9tYXAzNjMwX2VuX3VhcnQ0X21hc2sgPSBjcHVfaXNfb21hcDM2MzAoKSA/CiAJCQkJCU9NQVAzNjMwX0VOX1VBUlQ0X01BU0sgOiAwOwogCXUzMiBvbWFwMzYzMF9ncnBzZWxfdWFydDRfbWFzayA9IGNwdV9pc19vbWFwMzYzMCgpID8KIAkJCQkJT01BUDM2MzBfR1JQU0VMX1VBUlQ0X01BU0sgOiAwOwogCi0KLQkvKiBYWFggUmVzZXQgYWxsIHdrZGVwcy4gVGhpcyBzaG91bGQgYmUgZG9uZSB3aGVuIGluaXRpYWxpemluZwotCSAqIHBvd2VyZG9tYWlucyAqLwotCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0lWQTJfTU9ELCBQTV9XS0RFUCk7Ci0Jb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMCwgTVBVX01PRCwgUE1fV0tERVApOwotCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0RTU19NT0QsIFBNX1dLREVQKTsKLQlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9ORU9OX01PRCwgUE1fV0tERVApOwotCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0NBTV9NT0QsIFBNX1dLREVQKTsKLQlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS0RFUCk7Ci0JaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKLQkJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBFUzJfU0dYX01PRCwgUE1fV0tERVApOwotCQlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fV0tERVApOwotCX0gZWxzZQotCQlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBHRlhfTU9ELCBQTV9XS0RFUCk7Ci0KLQkvKgotCSAqIEVuYWJsZSBpbnRlcmZhY2UgY2xvY2sgYXV0b2lkbGUgZm9yIGFsbCBtb2R1bGVzLgotCSAqIE5vdGUgdGhhdCBpbiB0aGUgbG9uZyBydW4gdGhpcyBzaG91bGQgYmUgZG9uZSBieSBjbG9ja2Z3Ci0JICovCi0Jb21hcDJfY21fd3JpdGVfbW9kX3JlZygKLQkJT01BUDM0MzBfQVVUT19NT0RFTV9NQVNLIHwKLQkJT01BUDM0MzBFUzJfQVVUT19NTUMzX01BU0sgfAotCQlPTUFQMzQzMEVTMl9BVVRPX0lDUl9NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19BRVMyX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX1NIQTEyX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0RFUzJfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fTU1DMl9NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19NTUMxX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX01TUFJPX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0hEUV9NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19NQ1NQSTRfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fTUNTUEkzX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX01DU1BJMl9NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19NQ1NQSTFfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fSTJDM19NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19JMkMyX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0kyQzFfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fVUFSVDJfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fVUFSVDFfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BUMTFfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BUMTBfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fTUNCU1A1X01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX01DQlNQMV9NQVNLIHwKLQkJT01BUDM0MzBFUzFfQVVUT19GQUNfTUFTSyB8IC8qIFRoaXMgaXMgZXMxIG9ubHkgKi8KLQkJT01BUDM0MzBfQVVUT19NQUlMQk9YRVNfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fT01BUENUUkxfTUFTSyB8Ci0JCU9NQVAzNDMwRVMxX0FVVE9fRlNIT1NUVVNCX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0hTT1RHVVNCX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX1NBRDJEX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX1NTSV9NQVNLLAotCQlDT1JFX01PRCwgQ01fQVVUT0lETEUxKTsKLQotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoCi0JCU9NQVAzNDMwX0FVVE9fUEtBX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0FFUzFfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fUk5HX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX1NIQTExX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0RFUzFfTUFTSywKLQkJQ09SRV9NT0QsIENNX0FVVE9JRExFMik7Ci0KLQlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkgewotCQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKAotCQkJT01BUDM0MzBfQVVUT19NQUQyRF9NQVNLIHwKLQkJCU9NQVAzNDMwRVMyX0FVVE9fVVNCVExMX01BU0ssCi0JCQlDT1JFX01PRCwgQ01fQVVUT0lETEUzKTsKLQl9Ci0KLQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKAotCQlPTUFQMzQzMF9BVVRPX1dEVDJfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fV0RUMV9NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19HUElPMV9NQVNLIHwKLQkJT01BUDM0MzBfQVVUT18zMktTWU5DX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0dQVDEyX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0dQVDFfTUFTSywKLQkJV0tVUF9NT0QsIENNX0FVVE9JRExFKTsKLQotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoCi0JCU9NQVAzNDMwX0FVVE9fRFNTX01BU0ssCi0JCU9NQVAzNDMwX0RTU19NT0QsCi0JCUNNX0FVVE9JRExFKTsKLQotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoCi0JCU9NQVAzNDMwX0FVVE9fQ0FNX01BU0ssCi0JCU9NQVAzNDMwX0NBTV9NT0QsCi0JCUNNX0FVVE9JRExFKTsKLQotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoCi0JCW9tYXAzNjMwX2F1dG9fdWFydDRfbWFzayB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BJTzZfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BJTzVfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BJTzRfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BJTzNfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BJTzJfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fV0RUM19NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19VQVJUM19NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19HUFQ5X01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0dQVDhfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BUN19NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19HUFQ2X01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0dQVDVfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fR1BUNF9NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19HUFQzX01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX0dQVDJfTUFTSyB8Ci0JCU9NQVAzNDMwX0FVVE9fTUNCU1A0X01BU0sgfAotCQlPTUFQMzQzMF9BVVRPX01DQlNQM19NQVNLIHwKLQkJT01BUDM0MzBfQVVUT19NQ0JTUDJfTUFTSywKLQkJT01BUDM0MzBfUEVSX01PRCwKLQkJQ01fQVVUT0lETEUpOwotCi0JaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKLQkJb21hcDJfY21fd3JpdGVfbW9kX3JlZygKLQkJCU9NQVAzNDMwRVMyX0FVVE9fVVNCSE9TVF9NQVNLLAotCQkJT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQlDTV9BVVRPSURMRSk7Ci0JfQotCisJLyogWFhYIFRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgaHdtb2QgY29kZSBvciBTQ00gaW5pdCBjb2RlICovCiAJb21hcF9jdHJsX3dyaXRlbChPTUFQMzQzMF9BVVRPSURMRV9NQVNLLCBPTUFQMl9DT05UUk9MX1NZU0NPTkZJRyk7CiAKIAkvKgotCSAqIFNldCBhbGwgcGxscyB0byBhdXRvaWRsZS4gVGhpcyBpcyBuZWVkZWQgdW50aWwgYXV0b2lkbGUgaXMKLQkgKiBlbmFibGVkIGJ5IGNsb2NrZncKLQkgKi8KLQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKDEgPDwgT01BUDM0MzBfQVVUT19JVkEyX0RQTExfU0hJRlQsCi0JCQkgT01BUDM0MzBfSVZBMl9NT0QsIENNX0FVVE9JRExFMik7Ci0Jb21hcDJfY21fd3JpdGVfbW9kX3JlZygxIDw8IE9NQVAzNDMwX0FVVE9fTVBVX0RQTExfU0hJRlQsCi0JCQkgTVBVX01PRCwKLQkJCSBDTV9BVVRPSURMRTIpOwotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoKDEgPDwgT01BUDM0MzBfQVVUT19QRVJJUEhfRFBMTF9TSElGVCkgfAotCQkJICgxIDw8IE9NQVAzNDMwX0FVVE9fQ09SRV9EUExMX1NISUZUKSwKLQkJCSBQTExfTU9ELAotCQkJIENNX0FVVE9JRExFKTsKLQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKDEgPDwgT01BUDM0MzBFUzJfQVVUT19QRVJJUEgyX0RQTExfU0hJRlQsCi0JCQkgUExMX01PRCwKLQkJCSBDTV9BVVRPSURMRTIpOwotCi0JLyoKIAkgKiBFbmFibGUgY29udHJvbCBvZiBleHB0ZXJuYWwgb3NjaWxsYXRvciB0aHJvdWdoCiAJICogc3lzX2Nsa3JlcS4gSW4gdGhlIGxvbmcgcnVuIGNsb2NrIGZyYW1ld29yayBzaG91bGQKIAkgKiB0YWtlIGNhcmUgb2YgdGhpcy4KQEAgLTkyOCw4ICs3OTYsNyBAQAogCQkJCXB3cnN0LT5wd3JkbSA9PSBjb3JlX3B3cmRtICYmCiAJCQkJc3RhdGUgPT0gUFdSRE1fUE9XRVJfT0ZGKSB7CiAJCQlwd3JzdC0+bmV4dF9zdGF0ZSA9IFBXUkRNX1BPV0VSX1JFVDsKLQkJCVdBUk5fT05DRSgxLAotCQkJCSIlczogQ29yZSBPRkYgZGlzYWJsZWQgZHVlIHRvIGVycmF0YSBpNTgzXG4iLAorCQkJcHJfd2FybigiJXM6IENvcmUgT0ZGIGRpc2FibGVkIGR1ZSB0byBlcnJhdGEgaTU4M1xuIiwKIAkJCQlfX2Z1bmNfXyk7CiAJCX0gZWxzZSB7CiAJCQlwd3JzdC0+bmV4dF9zdGF0ZSA9IHN0YXRlOwpAQCAtOTkwLDEwICs4NTcsMTAgQEAKIHN0YXRpYyBpbnQgX19pbml0IGNsa2Rtc19zZXR1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCB2b2lkICp1bnVzZWQpCiB7CiAJaWYgKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9FTkFCTEVfQVVUTykKLQkJb21hcDJfY2xrZG1fYWxsb3dfaWRsZShjbGtkbSk7CisJCWNsa2RtX2FsbG93X2lkbGUoY2xrZG0pOwogCWVsc2UgaWYgKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9GT1JDRV9TTEVFUCAmJgogCQkgYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPT0gMCkKLQkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOworCQljbGtkbV9zbGVlcChjbGtkbSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCBlYWVkMGRmLi40OWM2NTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCkBAIC0yLDcgKzIsNyBAQAogICogT01BUCBwb3dlcmRvbWFpbiBjb250cm9sCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICogQWRkZWQgT01BUDQgc3BlY2lmaWMgc3VwcG9ydCBieSBBYmhpaml0IFBhZ2FyZSA8YWJoaWppdHBhZ2FyZUB0aS5jb20+CkBAIC0xOSwxMiArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KKwogI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAicHJjbTQ0eHguaCIKICNpbmNsdWRlICJjbTQ0eHguaCIKICNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKICNpbmNsdWRlICJwcm00NHh4LmgiCiAKKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgogI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCkBAIC0zMiw2ICszNSw4IEBACiAKICNpbmNsdWRlICJwbS5oIgogCisjZGVmaW5lIFBXUkRNX1RSQUNFX1NUQVRFU19GTEFHCSgxPDwzMSkKKwogZW51bSB7CiAJUFdSRE1fU1RBVEVfTk9XID0gMCwKIAlQV1JETV9TVEFURV9QUkVWLApAQCAtMTMwLDggKzEzNSw3IEBACiBzdGF0aWMgaW50IF9wd3JkbV9zdGF0ZV9zd2l0Y2goc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgaW50IGZsYWcpCiB7CiAKLQlpbnQgcHJldjsKLQlpbnQgc3RhdGU7CisJaW50IHByZXYsIHN0YXRlLCB0cmFjZV9zdGF0ZSA9IDA7CiAKIAlpZiAocHdyZG0gPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDgsNiArMTUyLDE3IEBACiAJCQlwd3JkbS0+c3RhdGVfY291bnRlcltwcmV2XSsrOwogCQlpZiAocHJldiA9PSBQV1JETV9QT1dFUl9SRVQpCiAJCQlfdXBkYXRlX2xvZ2ljX21lbWJhbmtfY291bnRlcnMocHdyZG0pOworCQkvKgorCQkgKiBJZiB0aGUgcG93ZXIgZG9tYWluIGRpZCBub3QgaGl0IHRoZSBkZXNpcmVkIHN0YXRlLAorCQkgKiBnZW5lcmF0ZSBhIHRyYWNlIGV2ZW50IHdpdGggYm90aCB0aGUgZGVzaXJlZCBhbmQgaGl0IHN0YXRlcworCQkgKi8KKwkJaWYgKHN0YXRlICE9IHByZXYpIHsKKwkJCXRyYWNlX3N0YXRlID0gKFBXUkRNX1RSQUNFX1NUQVRFU19GTEFHIHwKKwkJCQkgICAgICAgKChzdGF0ZSAmIE9NQVBfUE9XRVJTVEFURV9NQVNLKSA8PCA4KSB8CisJCQkJICAgICAgICgocHJldiAmIE9NQVBfUE9XRVJTVEFURV9NQVNLKSA8PCAwKSk7CisJCQl0cmFjZV9wb3dlcl9kb21haW5fdGFyZ2V0KHB3cmRtLT5uYW1lLCB0cmFjZV9zdGF0ZSwKKwkJCQkJCSAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQwNiw4ICs0MjEsMTMgQEAKIAlwcl9kZWJ1ZygicG93ZXJkb21haW46IHNldHRpbmcgbmV4dCBwb3dlcnN0YXRlIGZvciAlcyB0byAlMHhcbiIsCiAJCSBwd3JkbS0+bmFtZSwgcHdyc3QpOwogCi0JaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fc2V0X25leHRfcHdyc3QpCisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fc2V0X25leHRfcHdyc3QpIHsKKwkJLyogVHJhY2UgdGhlIHB3cmRtIGRlc2lyZWQgdGFyZ2V0IHN0YXRlICovCisJCXRyYWNlX3Bvd2VyX2RvbWFpbl90YXJnZXQocHdyZG0tPm5hbWUsIHB3cnN0LAorCQkJCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCS8qIFByb2dyYW0gdGhlIHB3cmRtIGRlc2lyZWQgdGFyZ2V0IHN0YXRlICovCiAJCXJldCA9IGFyY2hfcHdyZG0tPnB3cmRtX3NldF9uZXh0X3B3cnN0KHB3cmRtLCBwd3JzdCk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTkzOCwzICs5NTgsNDQgQEAKIAogCXJldHVybiBjb3VudDsKIH0KKworLyoqCisgKiBwd3JkbV9jYW5fZXZlcl9sb3NlX2NvbnRleHQgLSBjYW4gdGhpcyBwb3dlcmRvbWFpbiBldmVyIGxvc2UgY29udGV4dD8KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICoKKyAqCisgKiBHaXZlbiBhIHN0cnVjdCBwb3dlcmRvbWFpbiAqIEBwd3JkbSwgcmV0dXJucyAxIGlmIHRoZSBwb3dlcmRvbWFpbgorICogY2FuIGxvc2UgZWl0aGVyIG1lbW9yeSBvciBsb2dpYyBjb250ZXh0IG9yIGlmIEBwd3JkbSBpcyBpbnZhbGlkLCBvcgorICogcmV0dXJucyAwIG90aGVyd2lzZS4gIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNvbmNlcm5lZCB3aXRoIGhvdyB0aGUKKyAqIHBvd2VyZG9tYWluIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZCAoaS5lLiwgdG8gZ28gb2ZmIG9yIG5vdCk7IGl0J3MKKyAqIGNvbmNlcm5lZCB3aXRoIHdoZXRoZXIgaXQncyBldmVyIHBvc3NpYmxlIGZvciB0aGlzIHBvd2VyZG9tYWluIHRvCisgKiBnbyBvZmYgd2hpbGUgc29tZSBvdGhlciBwYXJ0IG9mIHRoZSBjaGlwIGlzIGFjdGl2ZS4gIFRoaXMgZnVuY3Rpb24KKyAqIGFzc3VtZXMgdGhhdCBldmVyeSBwb3dlcmRvbWFpbiBjYW4gZ28gdG8gZWl0aGVyIE9OIG9yIElOQUNUSVZFLgorICovCitib29sIHB3cmRtX2Nhbl9ldmVyX2xvc2VfY29udGV4dChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCWludCBpOworCisJaWYgKElTX0VSUl9PUl9OVUxMKHB3cmRtKSkgeworCQlwcl9kZWJ1ZygicG93ZXJkb21haW46ICVzOiBpbnZhbGlkIHBvd2VyZG9tYWluIHBvaW50ZXJcbiIsCisJCQkgX19mdW5jX18pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAocHdyZG0tPnB3cnN0cyAmIFBXUlNUU19PRkYpCisJCXJldHVybiAxOworCisJaWYgKHB3cmRtLT5wd3JzdHMgJiBQV1JTVFNfUkVUKSB7CisJCWlmIChwd3JkbS0+cHdyc3RzX2xvZ2ljX3JldCAmIFBXUlNUU19PRkYpCisJCQlyZXR1cm4gMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcHdyZG0tPmJhbmtzOyBpKyspCisJCQlpZiAocHdyZG0tPnB3cnN0c19tZW1fcmV0W2ldICYgUFdSU1RTX09GRikKKwkJCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcHdyZG0tPmJhbmtzOyBpKyspCisJCWlmIChwd3JkbS0+cHdyc3RzX21lbV9vbltpXSAmIFBXUlNUU19PRkYpCisJCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5oCmluZGV4IGM2NjQzMWUuLjAyN2Y0MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmgKQEAgLTIsNyArMiw3IEBACiAgKiBPTUFQMi8zLzQgcG93ZXJkb21haW4gY29udHJvbAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBQYXVsIFdhbG1zbGV5CiAgKgpAQCAtMzQsMTcgKzM0LDE0IEBACiAKIC8qIFBvd2VyZG9tYWluIGFsbG93YWJsZSBzdGF0ZSBiaXRmaWVsZHMgKi8KICNkZWZpbmUgUFdSU1RTX09OCQkoMSA8PCBQV1JETV9QT1dFUl9PTikKKyNkZWZpbmUgUFdSU1RTX0lOQUNUSVZFCQkoMSA8PCBQV1JETV9QT1dFUl9JTkFDVElWRSkKKyNkZWZpbmUgUFdSU1RTX1JFVAkJKDEgPDwgUFdSRE1fUE9XRVJfUkVUKQogI2RlZmluZSBQV1JTVFNfT0ZGCQkoMSA8PCBQV1JETV9QT1dFUl9PRkYpCi0jZGVmaW5lIFBXUlNUU19PRkZfT04JCSgoMSA8PCBQV1JETV9QT1dFUl9PRkYpIHwgXAotCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9PTikpCiAKLSNkZWZpbmUgUFdSU1RTX09GRl9SRVQJCSgoMSA8PCBQV1JETV9QT1dFUl9PRkYpIHwgXAotCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9SRVQpKQotCi0jZGVmaW5lIFBXUlNUU19SRVRfT04JCSgoMSA8PCBQV1JETV9QT1dFUl9SRVQpIHwgXAotCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9PTikpCi0KLSNkZWZpbmUgUFdSU1RTX09GRl9SRVRfT04JKFBXUlNUU19PRkZfUkVUIHwgKDEgPDwgUFdSRE1fUE9XRVJfT04pKQorI2RlZmluZSBQV1JTVFNfT0ZGX09OCQkoUFdSU1RTX09GRiB8IFBXUlNUU19PTikKKyNkZWZpbmUgUFdSU1RTX09GRl9SRVQJCShQV1JTVFNfT0ZGIHwgUFdSU1RTX1JFVCkKKyNkZWZpbmUgUFdSU1RTX1JFVF9PTgkJKFBXUlNUU19SRVQgfCBQV1JTVFNfT04pCisjZGVmaW5lIFBXUlNUU19PRkZfUkVUX09OCShQV1JTVFNfT0ZGX1JFVCB8IFBXUlNUU19PTikKIAogCiAvKiBQb3dlcmRvbWFpbiBmbGFncyAqLwpAQCAtMTY1LDcgKzE2Miw2IEBACiAJaW50CSgqcHdyZG1fd2FpdF90cmFuc2l0aW9uKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIH07CiAKLXZvaWQgcHdyZG1fZndfaW5pdCh2b2lkKTsKIHZvaWQgcHdyZG1faW5pdChzdHJ1Y3QgcG93ZXJkb21haW4gKipwd3JkbV9saXN0LCBzdHJ1Y3QgcHdyZG1fb3BzICpjdXN0b21fZnVuY3MpOwogCiBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKQEAgLTIxMiw2ICsyMDgsNyBAQAogaW50IHB3cmRtX3Bvc3RfdHJhbnNpdGlvbih2b2lkKTsKIGludCBwd3JkbV9zZXRfbG93cHdyc3RjaGFuZ2Uoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CiB1MzIgcHdyZG1fZ2V0X2NvbnRleHRfbG9zc19jb3VudChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2Jvb2wgcHdyZG1fY2FuX2V2ZXJfbG9zZV9jb250ZXh0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogCiBleHRlcm4gdm9pZCBvbWFwMnh4eF9wb3dlcmRvbWFpbnNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAzeHh4X3Bvd2VyZG9tYWluc19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5jCmluZGV4IDViNGRkOTcuLjQyMTBjMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMnh4eF8zeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczJ4eHhfM3h4eF9kYXRhLmMKQEAgLTIsNyArMiw3IEBACiAgKiBPTUFQMi8zIGNvbW1vbiBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBQYXVsIFdhbG1zbGV5LCBKb3VuaSBIw7ZnYW5kZXIKICAqCkBAIC02MiwxMyArNjIsMTMgQEAKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKIAkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTMSksCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX1JFVCwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJCVswXSA9IFBXUlNUU19SRVQsIC8qIE1FTVJFVFNUQVRFICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwkJWzBdID0gUFdSU1RTX09OLCAgLyogTUVNT05TVEFURSAqLwogCX0sCiB9OwogCkBAIC03Niw0ICs3Niw1IEBACiAJLm5hbWUJCT0gIndrdXBfcHdyZG0iLAogCS5wcmNtX29mZnMJPSBXS1VQX01PRCwKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8IENISVBfSVNfT01BUDM0MzApLAorCS5wd3JzdHMJCT0gUFdSU1RTX09OLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMnh4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczJ4eHhfZGF0YS5jCmluZGV4IDliMWEzMzUuLmNjMzg5ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMnh4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4X2RhdGEuYwpAQCAtMiw3ICsyLDcgQEAKICAqIE9NQVAyWFhYIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFBhdWwgV2FsbXNsZXksIEpvdW5pIEjDtmdhbmRlcgogICoKQEAgLTMwLDEzICszMCwxMyBAQAogCS5wcmNtX29mZnMJICA9IE9NQVAyNFhYX0RTUF9NT0QsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX1JFVCwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsCisJCVswXSA9IFBXUlNUU19SRVQsCiAJfSwKIAkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwKKwkJWzBdID0gUFdSU1RTX09OLAogCX0sCiB9OwogCkBAIC00OCwxMCArNDgsMTAgQEAKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAogCS5iYW5rcwkJICA9IDEsCiAJLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwKKwkJWzBdID0gUFdSU1RTX1JFVCwKIAl9LAogCS5wd3JzdHNfbWVtX29uCSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAorCQlbMF0gPSBQV1JTVFNfT04sCiAJfSwKIH07CiAKQEAgLTc4LDcgKzc4LDcgQEAKICAqIDI0MzAtc3BlY2lmaWMgcG93ZXJkb21haW5zCiAgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisjaWZkZWYgQ09ORklHX1NPQ19PTUFQMjQzMAogCiAvKiBYWFggMjQzMCBLSUxMRE9NQUlOV0tVUCBiaXQ/ICBObyBjdXJyZW50IHVzZXJzIGFwcGFyZW50bHkgKi8KIApAQCAtODcsMTcgKzg3LDE3IEBACiAJLnByY21fb2ZmcwkgID0gT01BUDI0MzBfTURNX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfUkVULAogCS5iYW5rcwkJICA9IDEsCiAJLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwgLyogTUVNUkVUU1RBVEUgKi8KKwkJWzBdID0gUFdSU1RTX1JFVCwgLyogTUVNUkVUU1RBVEUgKi8KIAl9LAogCS5wd3JzdHNfbWVtX29uCSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLCAgLyogTUVNT05TVEFURSAqLworCQlbMF0gPSBQV1JTVFNfT04sICAvKiBNRU1PTlNUQVRFICovCiAJfSwKIH07CiAKLSNlbmRpZiAgICAgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKyNlbmRpZiAgICAgLyogQ09ORklHX1NPQ19PTUFQMjQzMCAqLwogCiAvKiBBcyBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgYWJvdmUsIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgY2hhbmdlZCAqLwogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqcG93ZXJkb21haW5zX29tYXAyeHh4W10gX19pbml0ZGF0YSA9IHsKQEAgLTExMSw3ICsxMTEsNyBAQAogCSZjb3JlXzI0eHhfcHdyZG0sCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisjaWZkZWYgQ09ORklHX1NPQ19PTUFQMjQzMAogCSZtZG1fcHdyZG0sCiAjZW5kaWYKIAlOVUxMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzeHh4X2RhdGEuYwppbmRleCBlMWJlYzU2Li45YzljMTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczN4eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zM3h4eF9kYXRhLmMKQEAgLTIsNyArMiw3IEBACiAgKiBPTUFQMyBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBQYXVsIFdhbG1zbGV5LCBKb3VuaSBIw7ZnYW5kZXIKICAqCkBAIC00NywxMCArNDcsMTAgQEAKIAkJWzNdID0gUFdSU1RTX09GRl9SRVQsCiAJfSwKIAkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwKLQkJWzFdID0gUFdSRE1fUE9XRVJfT04sCisJCVswXSA9IFBXUlNUU19PTiwKKwkJWzFdID0gUFdSU1RTX09OLAogCQlbMl0gPSBQV1JTVFNfT0ZGX09OLAotCQlbM10gPSBQV1JETV9QT1dFUl9PTiwKKwkJWzNdID0gUFdSU1RTX09OLAogCX0sCiB9OwogCkBAIC0xMjgsMTMgKzEyOCwxMyBAQAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX0RTU19NT0QsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX1JFVCwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJCVswXSA9IFBXUlNUU19SRVQsIC8qIE1FTVJFVFNUQVRFICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwkJWzBdID0gUFdSU1RTX09OLCAgLyogTUVNT05TVEFURSAqLwogCX0sCiB9OwogCkBAIC0xNDksMTMgKzE0OSwxMyBAQAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAogCS8qIFhYWCBUaGlzIGlzIGFjY3VyYXRlIGZvciAzNDMwIFNHWCwgYnV0IHdoYXQgYWJvdXQgR0ZYPyAqLwogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX1JFVCwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJCVswXSA9IFBXUlNUU19SRVQsIC8qIE1FTVJFVFNUQVRFICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwkJWzBdID0gUFdSU1RTX09OLCAgLyogTUVNT05TVEFURSAqLwogCX0sCiB9OwogCkBAIC0xNjQsMTMgKzE2NCwxMyBAQAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX0NBTV9NT0QsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX1JFVCwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJCVswXSA9IFBXUlNUU19SRVQsIC8qIE1FTVJFVFNUQVRFICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwkJWzBdID0gUFdSU1RTX09OLCAgLyogTUVNT05TVEFURSAqLwogCX0sCiB9OwogCkBAIC0xODIsMTAgKzE4MiwxMCBAQAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCQlbMF0gPSBQV1JTVFNfUkVULCAvKiBNRU1SRVRTVEFURSAqLwogCX0sCiAJLnB3cnN0c19tZW1fb24JICA9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJCVswXSA9IFBXUlNUU19PTiwgIC8qIE1FTU9OU1RBVEUgKi8KIAl9LAogfTsKIApAQCAtMjAwLDcgKzIwMCw3IEBACiAJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfTkVPTl9NT0QsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX1JFVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gdXNiaG9zdF9wd3JkbSA9IHsKQEAgLTIwOCw3ICsyMDgsNyBAQAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19SRVQsCiAJLyoKIAkgKiBSRVZJU0lUOiBFbmFibGluZyB1c2IgaG9zdCBzYXZlIGFuZCByZXN0b3JlIG1lY2hhbmlzbSBzZWVtcyB0bwogCSAqIGxlYXZlIHRoZSB1c2IgaG9zdCBkb21haW4gcGVybWFuZW50bHkgaW4gQUNUSVZFIG1vZGUgYWZ0ZXIKQEAgLTIxOCwxMCArMjE4LDEwIEBACiAJLyouZmxhZ3MJICA9IFBXUkRNX0hBU19IRFdSX1NBUiwqLyAvKiBmb3IgVVNCSE9TVCBjdHJsciBvbmx5ICovCiAJLmJhbmtzCQkgID0gMSwKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCQlbMF0gPSBQV1JTVFNfUkVULCAvKiBNRU1SRVRTVEFURSAqLwogCX0sCiAJLnB3cnN0c19tZW1fb24JICA9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJCVswXSA9IFBXUlNUU19PTiwgIC8qIE1FTU9OU1RBVEUgKi8KIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnM0NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zNDR4eF9kYXRhLmMKaW5kZXggMjZkNzY0MS4uYzQyMjJjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnM0NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczQ0eHhfZGF0YS5jCkBAIC0yLDcgKzIsNyBAQAogICogT01BUDQgUG93ZXIgZG9tYWlucyBmcmFtZXdvcmsKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogQWJoaWppdCBQYWdhcmUgKGFiaGlqaXRwYWdhcmVAdGkuY29tKQogICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCkBAIC00MCwxOCArNDAsMTggQEAKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAogCS5iYW5rcwkJICA9IDUsCiAJLnB3cnN0c19tZW1fcmV0CT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGNvcmVfbnJldF9iYW5rICovCisJCVswXSA9IFBXUlNUU19PRkYsCS8qIGNvcmVfbnJldF9iYW5rICovCiAJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkvKiBjb3JlX29jbXJhbSAqLwotCQlbMl0gPSBQV1JETV9QT1dFUl9SRVQsCS8qIGNvcmVfb3RoZXJfYmFuayAqLworCQlbMl0gPSBQV1JTVFNfUkVULAkvKiBjb3JlX290aGVyX2JhbmsgKi8KIAkJWzNdID0gUFdSU1RTX09GRl9SRVQsCS8qIGR1Y2F0aV9sMnJhbSAqLwogCQlbNF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogZHVjYXRpX3VuaWNhY2hlICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGNvcmVfbnJldF9iYW5rICovCisJCVswXSA9IFBXUlNUU19PTiwJLyogY29yZV9ucmV0X2JhbmsgKi8KIAkJWzFdID0gUFdSU1RTX09GRl9SRVQsCS8qIGNvcmVfb2NtcmFtICovCi0JCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjb3JlX290aGVyX2JhbmsgKi8KLQkJWzNdID0gUFdSRE1fUE9XRVJfT04sCS8qIGR1Y2F0aV9sMnJhbSAqLwotCQlbNF0gPSBQV1JETV9QT1dFUl9PTiwJLyogZHVjYXRpX3VuaWNhY2hlICovCisJCVsyXSA9IFBXUlNUU19PTiwJLyogY29yZV9vdGhlcl9iYW5rICovCisJCVszXSA9IFBXUlNUU19PTiwJLyogZHVjYXRpX2wycmFtICovCisJCVs0XSA9IFBXUlNUU19PTiwJLyogZHVjYXRpX3VuaWNhY2hlICovCiAJfSwKIAkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCiB9OwpAQCAtNjUsMTAgKzY1LDEwIEBACiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCiAJLmJhbmtzCQkgID0gMSwKIAkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogZ2Z4X21lbSAqLworCQlbMF0gPSBQV1JTVFNfT0ZGLAkvKiBnZnhfbWVtICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGdmeF9tZW0gKi8KKwkJWzBdID0gUFdSU1RTX09OLAkvKiBnZnhfbWVtICovCiAJfSwKIAkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCiB9OwpAQCAtODAsMTUgKzgwLDE1IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9QUk1fUEFSVElUSU9OLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX09GRiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkYsCiAJLmJhbmtzCQkgID0gMiwKIAkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogYWVzc21lbSAqLwotCQlbMV0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIHBlcmlwaG1lbSAqLworCQlbMF0gPSBQV1JTVFNfUkVULAkvKiBhZXNzbWVtICovCisJCVsxXSA9IFBXUlNUU19PRkYsCS8qIHBlcmlwaG1lbSAqLwogCX0sCiAJLnB3cnN0c19tZW1fb24JPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBhZXNzbWVtICovCi0JCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBwZXJpcGhtZW0gKi8KKwkJWzBdID0gUFdSU1RTX09OLAkvKiBhZXNzbWVtICovCisJCVsxXSA9IFBXUlNUU19PTiwJLyogcGVyaXBobWVtICovCiAJfSwKIAkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCiB9OwpAQCAtMTAzLDEwICsxMDMsMTAgQEAKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkYsCiAJLmJhbmtzCQkgID0gMSwKIAkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogZHNzX21lbSAqLworCQlbMF0gPSBQV1JTVFNfT0ZGLAkvKiBkc3NfbWVtICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGRzc19tZW0gKi8KKwkJWzBdID0gUFdSU1RTX09OLAkvKiBkc3NfbWVtICovCiAJfSwKIAkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCiB9OwpAQCAtMTIxLDE0ICsxMjEsMTQgQEAKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAogCS5iYW5rcwkJICA9IDMsCiAJLnB3cnN0c19tZW1fcmV0CT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsCS8qIHRlc2xhX2VkbWEgKi8KKwkJWzBdID0gUFdSU1RTX1JFVCwJLyogdGVzbGFfZWRtYSAqLwogCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogdGVzbGFfbDEgKi8KIAkJWzJdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRlc2xhX2wyICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2VkbWEgKi8KLQkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2wxICovCi0JCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0ZXNsYV9sMiAqLworCQlbMF0gPSBQV1JTVFNfT04sCS8qIHRlc2xhX2VkbWEgKi8KKwkJWzFdID0gUFdSU1RTX09OLAkvKiB0ZXNsYV9sMSAqLworCQlbMl0gPSBQV1JTVFNfT04sCS8qIHRlc2xhX2wyICovCiAJfSwKIAkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCiB9OwpAQCAtMTQyLDEwICsxNDIsMTAgQEAKIAkucHdyc3RzCQkgID0gUFdSU1RTX09OLAogCS5iYW5rcwkJICA9IDEsCiAJLnB3cnN0c19tZW1fcmV0CT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIHdrdXBfYmFuayAqLworCQlbMF0gPSBQV1JTVFNfT0ZGLAkvKiB3a3VwX2JhbmsgKi8KIAl9LAogCS5wd3JzdHNfbWVtX29uCT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogd2t1cF9iYW5rICovCisJCVswXSA9IFBXUlNUU19PTiwJLyogd2t1cF9iYW5rICovCiAJfSwKIH07CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogY3B1MF9sMSAqLwogCX0sCiAJLnB3cnN0c19tZW1fb24JPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjcHUwX2wxICovCisJCVswXSA9IFBXUlNUU19PTiwJLyogY3B1MF9sMSAqLwogCX0sCiB9OwogCkBAIC0xNzksNyArMTc5LDcgQEAKIAkJWzBdID0gUFdSU1RTX09GRl9SRVQsCS8qIGNwdTFfbDEgKi8KIAl9LAogCS5wd3JzdHNfbWVtX29uCT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogY3B1MV9sMSAqLworCQlbMF0gPSBQV1JTVFNfT04sCS8qIGNwdTFfbDEgKi8KIAl9LAogfTsKIApAQCAtMTkyLDEwICsxOTIsMTAgQEAKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9PTiwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBlbXVfYmFuayAqLworCQlbMF0gPSBQV1JTVFNfT0ZGLAkvKiBlbXVfYmFuayAqLwogCX0sCiAJLnB3cnN0c19tZW1fb24JPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBlbXVfYmFuayAqLworCQlbMF0gPSBQV1JTVFNfT04sCS8qIGVtdV9iYW5rICovCiAJfSwKIH07CiAKQEAgLTIxMSwxMiArMjExLDEyIEBACiAJLnB3cnN0c19tZW1fcmV0CT0gewogCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogbXB1X2wxICovCiAJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkvKiBtcHVfbDIgKi8KLQkJWzJdID0gUFdSRE1fUE9XRVJfUkVULAkvKiBtcHVfcmFtICovCisJCVsyXSA9IFBXUlNUU19SRVQsCS8qIG1wdV9yYW0gKi8KIAl9LAogCS5wd3JzdHNfbWVtX29uCT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogbXB1X2wxICovCi0JCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBtcHVfbDIgKi8KLQkJWzJdID0gUFdSRE1fUE9XRVJfT04sCS8qIG1wdV9yYW0gKi8KKwkJWzBdID0gUFdSU1RTX09OLAkvKiBtcHVfbDEgKi8KKwkJWzFdID0gUFdSU1RTX09OLAkvKiBtcHVfbDIgKi8KKwkJWzJdID0gUFdSU1RTX09OLAkvKiBtcHVfcmFtICovCiAJfSwKIH07CiAKQEAgLTIyNywxOSArMjI3LDE5IEBACiAJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9QUk1fUEFSVElUSU9OLAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX09GRiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkYsCiAJLmJhbmtzCQkgID0gNCwKIAkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogaHdhX21lbSAqLworCQlbMF0gPSBQV1JTVFNfT0ZGLAkvKiBod2FfbWVtICovCiAJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkvKiBzbDJfbWVtICovCiAJCVsyXSA9IFBXUlNUU19PRkZfUkVULAkvKiB0Y20xX21lbSAqLwogCQlbM10gPSBQV1JTVFNfT0ZGX1JFVCwJLyogdGNtMl9tZW0gKi8KIAl9LAogCS5wd3JzdHNfbWVtX29uCT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogaHdhX21lbSAqLwotCQlbMV0gPSBQV1JETV9QT1dFUl9PTiwJLyogc2wyX21lbSAqLwotCQlbMl0gPSBQV1JETV9QT1dFUl9PTiwJLyogdGNtMV9tZW0gKi8KLQkJWzNdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRjbTJfbWVtICovCisJCVswXSA9IFBXUlNUU19PTiwJLyogaHdhX21lbSAqLworCQlbMV0gPSBQV1JTVFNfT04sCS8qIHNsMl9tZW0gKi8KKwkJWzJdID0gUFdSU1RTX09OLAkvKiB0Y20xX21lbSAqLworCQlbM10gPSBQV1JTVFNfT04sCS8qIHRjbTJfbWVtICovCiAJfSwKIAkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCiB9OwpAQCAtMjUzLDEwICsyNTMsMTAgQEAKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9PTiwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBjYW1fbWVtICovCisJCVswXSA9IFBXUlNUU19PRkYsCS8qIGNhbV9tZW0gKi8KIAl9LAogCS5wd3JzdHNfbWVtX29uCT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogY2FtX21lbSAqLworCQlbMF0gPSBQV1JTVFNfT04sCS8qIGNhbV9tZW0gKi8KIAl9LAogCS5mbGFncwkJPSBQV1JETV9IQVNfTE9XUE9XRVJTVEFURUNIQU5HRSwKIH07CkBAIC0yNzEsMTAgKzI3MSwxMCBAQAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKIAkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogbDNpbml0X2JhbmsxICovCisJCVswXSA9IFBXUlNUU19PRkYsCS8qIGwzaW5pdF9iYW5rMSAqLwogCX0sCiAJLnB3cnN0c19tZW1fb24JPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBsM2luaXRfYmFuazEgKi8KKwkJWzBdID0gUFdSU1RTX09OLAkvKiBsM2luaXRfYmFuazEgKi8KIAl9LAogCS5mbGFncwkJPSBQV1JETV9IQVNfTE9XUE9XRVJTVEFURUNIQU5HRSwKIH07CkBAIC0yODksMTIgKzI4OSwxMiBAQAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCiAJLmJhbmtzCQkgID0gMiwKIAkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogbm9ucmV0YWluZWRfYmFuayAqLwotCQlbMV0gPSBQV1JETV9QT1dFUl9SRVQsCS8qIHJldGFpbmVkX2JhbmsgKi8KKwkJWzBdID0gUFdSU1RTX09GRiwJLyogbm9ucmV0YWluZWRfYmFuayAqLworCQlbMV0gPSBQV1JTVFNfUkVULAkvKiByZXRhaW5lZF9iYW5rICovCiAJfSwKIAkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIG5vbnJldGFpbmVkX2JhbmsgKi8KLQkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHJldGFpbmVkX2JhbmsgKi8KKwkJWzBdID0gUFdSU1RTX09OLAkvKiBub25yZXRhaW5lZF9iYW5rICovCisJCVsxXSA9IFBXUlNUU19PTiwJLyogcmV0YWluZWRfYmFuayAqLwogCX0sCiAJLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAppbmRleCA4NzQ4NmY1Li4wMzYzZGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCkBAIC0xMjEsNiArMTIxLDEwIEBACiAjZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMl9NQVNLCQkJCSgxIDw8IDE4KQogI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTFfU0hJRlQJCQkxNwogI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTFfTUFTSwkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyX01BU0sJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMV9TSElGVAkJCTE1CisjZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMV9NQVNLCQkJCSgxIDw8IDE1KQogI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMl9TSElGVAkJCQkxNAogI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMl9NQVNLCQkJCSgxIDw8IDE0KQogI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMV9TSElGVAkJCQkxMwpAQCAtMTkxLDYgKzE5NSw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0FVVE9JRExFX01BU0sJCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOMV9DT1JFLCBDTV9JQ0xLRU4xX0NPUkUsIFBNX1dLRU4xX0NPUkUgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU5fTU1DM19NQVNLCQkJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQMzQzMF9FTl9NTUMzX1NISUZUCQkJCTMwCiAjZGVmaW5lIE9NQVAzNDMwX0VOX01NQzJfTUFTSwkJCQkoMSA8PCAyNSkKICNkZWZpbmUgT01BUDM0MzBfRU5fTU1DMl9TSElGVAkJCQkyNQogI2RlZmluZSBPTUFQMzQzMF9FTl9NTUMxX01BU0sJCQkJKDEgPDwgMjQpCkBAIC0yMzEsNiArMjM3LDggQEAKICNkZWZpbmUgT01BUDM0MzBfRU5fSFNPVEdVU0JfU0hJRlQJCQk0CiAKIC8qIFBNX1dLU1QxX0NPUkUsIENNX0lETEVTVDFfQ09SRSBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9TVF9NTUMzX1NISUZUCQkJCTMwCisjZGVmaW5lIE9NQVAzNDMwX1NUX01NQzNfTUFTSwkJCQkoMSA8PCAzMCkKICNkZWZpbmUgT01BUDM0MzBfU1RfTU1DMl9TSElGVAkJCQkyNQogI2RlZmluZSBPTUFQMzQzMF9TVF9NTUMyX01BU0sJCQkJKDEgPDwgMjUpCiAjZGVmaW5lIE9NQVAzNDMwX1NUX01NQzFfU0hJRlQJCQkJMjQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMKaW5kZXggNjc5YmNkMi4uNmJlMTQzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKKyNpbmNsdWRlIDxtYWNoL3N5c3RlbS5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9wcmNtLmg+CiAjaW5jbHVkZSA8cGxhdC9pcnFzLmg+CkBAIC01Nyw3ICs1OCw3IEBACiBFWFBPUlRfU1lNQk9MKG9tYXBfcHJjbV9nZXRfcmVzZXRfc291cmNlcyk7CiAKIC8qIFJlc2V0cyBjbG9jayByYXRlcyBhbmQgcmVib290cyB0aGUgc3lzdGVtLiBPbmx5IGNhbGxlZCBmcm9tIHN5c3RlbS5oICovCi12b2lkIG9tYXBfcHJjbV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQorc3RhdGljIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJczE2IHByY21fb2ZmcyA9IDA7CiAKQEAgLTEwOCw2ICsxMDksOCBAQAogCW9tYXAyX3BybV9yZWFkX21vZF9yZWcocHJjbV9vZmZzLCBPTUFQMl9STV9SU1RDVFJMKTsgLyogT0NQIGJhcnJpZXIgKi8KIH0KIAordm9pZCAoKmFyY2hfcmVzZXQpKGNoYXIsIGNvbnN0IGNoYXIgKikgPSBvbWFwX3ByY21fYXJjaF9yZXNldDsKKwogLyoqCiAgKiBvbWFwMl9jbV93YWl0X2lkbGVzdCAtIHdhaXQgZm9yIElETEVTVCBiaXQgdG8gaW5kaWNhdGUgbW9kdWxlIHJlYWRpbmVzcwogICogQHJlZzogcGh5c2ljYWwgYWRkcmVzcyBvZiBtb2R1bGUgSURMRVNUIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguaAppbmRleCAzMzAwZmY2Li5kMjJkMWI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbV9tcHU0NHh4LmgKQEAgLTM4LDggKzM4LDggQEAKICNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9JTlNUCQkweDA4MDAKIAogLyogUFJDTV9NUFUgY2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0cyAoZnJvbSBpbnN0YW5jZSBzdGFydCkgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NUFVfQ0RPRkZTCTB4MDAxOAotI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9DUFUxX01QVV9DRE9GRlMJMHgwMDE4CisjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfQ1BVMF9DRE9GRlMJMHgwMDE4CisjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfQ1BVMV9DRE9GRlMJMHgwMDE4CiAKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jCmluZGV4IGVjMDM2MjUuLjA1MTIxM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYwpAQCAtMTE4LDcgKzExOCw4IEBACiAvKioKICAqIG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQgLSBkZWFzc2VydCBhIHN1Ym1vZHVsZSBoYXJkcmVzZXQgbGluZSBhbmQgd2FpdAogICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSAoZS5nLiBDT1JFX01PRCkKLSAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUgdG8gZGVhc3NlcnQKKyAqIEByc3Rfc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lIHRvIGRlYXNzZXJ0CisgKiBAc3Rfc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGUgZGVhc3NlcnRlZCBzdWJtb2R1bGUKICAqCiAgKiBTb21lIElQcyBsaWtlIGRzcCBvciBpdmEgY29udGFpbiBwcm9jZXNzb3JzIHRoYXQgcmVxdWlyZSBhbiBIVwogICogcmVzZXQgbGluZSB0byBiZSBhc3NlcnRlZCAvIGRlYXNzZXJ0ZWQgaW4gb3JkZXIgdG8gZnVsbHkgZW5hYmxlIHRoZQpAQCAtMTI5LDI3ICsxMzAsMjggQEAKICAqIC1FSU5WQUwgdXBvbiBhbiBhcmd1bWVudCBlcnJvciwgLUVFWElTVCBpZiB0aGUgc3VibW9kdWxlIHdhcyBhbHJlYWR5IG91dAogICogb2YgcmVzZXQsIG9yIC1FQlVTWSBpZiB0aGUgc3VibW9kdWxlIGRpZCBub3QgZXhpdCByZXNldCBwcm9tcHRseS4KICAqLwotaW50IG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KQoraW50IG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHJzdF9zaGlmdCwgdTggc3Rfc2hpZnQpCiB7Ci0JdTMyIG1hc2s7CisJdTMyIHJzdCwgc3Q7CiAJaW50IGM7CiAKIAlpZiAoIShjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWFzayA9IDEgPDwgc2hpZnQ7CisJcnN0ID0gMSA8PCByc3Rfc2hpZnQ7CisJc3QgPSAxIDw8IHN0X3NoaWZ0OwogCiAJLyogQ2hlY2sgdGhlIGN1cnJlbnQgc3RhdHVzIHRvIGF2b2lkIGRlLWFzc2VydGluZyB0aGUgbGluZSB0d2ljZSAqLwotCWlmIChvbWFwMl9wcm1fcmVhZF9tb2RfYml0c19zaGlmdChwcm1fbW9kLCBPTUFQMl9STV9SU1RDVFJMLCBtYXNrKSA9PSAwKQorCWlmIChvbWFwMl9wcm1fcmVhZF9tb2RfYml0c19zaGlmdChwcm1fbW9kLCBPTUFQMl9STV9SU1RDVFJMLCByc3QpID09IDApCiAJCXJldHVybiAtRUVYSVNUOwogCiAJLyogQ2xlYXIgdGhlIHJlc2V0IHN0YXR1cyBieSB3cml0aW5nIDEgdG8gdGhlIHN0YXR1cyBiaXQgKi8KLQlvbWFwMl9wcm1fcm13X21vZF9yZWdfYml0cygweGZmZmZmZmZmLCBtYXNrLCBwcm1fbW9kLCBPTUFQMl9STV9SU1RTVCk7CisJb21hcDJfcHJtX3Jtd19tb2RfcmVnX2JpdHMoMHhmZmZmZmZmZiwgc3QsIHBybV9tb2QsIE9NQVAyX1JNX1JTVFNUKTsKIAkvKiBkZS1hc3NlcnQgdGhlIHJlc2V0IGNvbnRyb2wgbGluZSAqLwotCW9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzKG1hc2ssIDAsIHBybV9tb2QsIE9NQVAyX1JNX1JTVENUUkwpOworCW9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzKHJzdCwgMCwgcHJtX21vZCwgT01BUDJfUk1fUlNUQ1RSTCk7CiAJLyogd2FpdCB0aGUgc3RhdHVzIHRvIGJlIHNldCAqLwogCW9tYXBfdGVzdF90aW1lb3V0KG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHBybV9tb2QsIE9NQVAyX1JNX1JTVFNULAotCQkJCQkJICBtYXNrKSwKKwkJCQkJCSAgc3QpLAogCQkJICBNQVhfTU9EVUxFX0hBUkRSRVNFVF9XQUlULCBjKTsKIAogCXJldHVybiAoYyA9PSBNQVhfTU9EVUxFX0hBUkRSRVNFVF9XQUlUKSA/IC1FQlVTWSA6IDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguaAppbmRleCA0OTY1NGM4Li5hMWZjNjJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmgKQEAgLTI4Miw3ICsyODIsOCBAQAogCQkibm90IHN1cHBvc2UgdG8gYmUgdXNlZCBvbiBvbWFwNFxuIik7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHMxNiBwcm1fbW9kLCB1OCBzaGlmdCkKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHJzdF9zaGlmdCwKKwkJCQkJCXU4IHN0X3NoaWZ0KQogewogCVdBUk4oMSwgInBybTogb21hcDJ4eHgvb21hcDN4eHggc3BlY2lmaWMgZnVuY3Rpb24gYW5kICIKIAkJIm5vdCBzdXBwb3NlIHRvIGJlIHVzZWQgb24gb21hcDRcbiIpOwpAQCAtMzAwLDcgKzMwMSw3IEBACiAvKiBUaGVzZSBvbWFwMl8gUFJNIGZ1bmN0aW9ucyBhcHBseSB0byBib3RoIE9NQVAyIGFuZCAzICovCiBleHRlcm4gaW50IG9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KTsKIGV4dGVybiBpbnQgb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KTsKLWV4dGVybiBpbnQgb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChzMTYgcHJtX21vZCwgdTggc2hpZnQpOworZXh0ZXJuIGludCBvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHMxNiBwcm1fbW9kLCB1OCByc3Rfc2hpZnQsIHU4IHN0X3NoaWZ0KTsKIAogI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVA0ICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IDMyZTkxYTkuLjFhYzM2MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCW1vZF90aW1lcigmdWFydC0+dGltZXIsIGppZmZpZXMgKyB1YXJ0LT50aW1lb3V0KTsKIAlvbWFwX3VhcnRfc21hcnRfaWRsZV9lbmFibGUodWFydCwgMCk7CiAKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkgJiYgIWNwdV9pc190aTgxNngoKSkgewogCQl1MzIgbW9kID0gKHVhcnQtPm51bSA+IDEpID8gT01BUDM0MzBfUEVSX01PRCA6IENPUkVfTU9EOwogCQl1MzIgd2tfbWFzayA9IDA7CiAJCXUzMiBwYWRjb25mID0gMDsKQEAgLTY1NSw3ICs2NTUsNyBAQAogfQogI2VuZGlmCiAKLXZvaWQgX19pbml0IG9tYXBfc2VyaWFsX2Vhcmx5X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfc2VyaWFsX2Vhcmx5X2luaXQodm9pZCkKIHsKIAlpbnQgaSA9IDA7CiAKQEAgLTY3Miw3ICs2NzIsNyBAQAogCiAJCXVhcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF91YXJ0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChXQVJOX09OKCF1YXJ0KSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAtRU5PREVWOwogCiAJCXVhcnQtPm9oID0gb2g7CiAJCXVhcnQtPm51bSA9IGkrKzsKQEAgLTY4MCw3ICs2ODAsNyBAQAogCQludW1fdWFydHMrKzsKIAogCQkvKgotCQkgKiBOT1RFOiBvbWFwX2h3bW9kX2luaXQoKSBoYXMgbm90IHlldCBiZWVuIGNhbGxlZCwKKwkJICogTk9URTogb21hcF9od21vZF9zZXR1cCooKSBoYXMgbm90IHlldCBiZWVuIGNhbGxlZCwKIAkJICogICAgICAgc28gbm8gaHdtb2QgZnVuY3Rpb25zIHdpbGwgd29yayB5ZXQuCiAJCSAqLwogCkBAIC02OTEsNyArNjkxLDEwIEBACiAJCSAqLwogCQl1YXJ0LT5vaC0+ZmxhZ3MgfD0gSFdNT0RfSU5JVF9OT19JRExFIHwgSFdNT0RfSU5JVF9OT19SRVNFVDsKIAl9IHdoaWxlICgxKTsKKworCXJldHVybiAwOwogfQorY29yZV9pbml0Y2FsbChvbWFwX3NlcmlhbF9lYXJseV9pbml0KTsKIAogLyoqCiAgKiBvbWFwX3NlcmlhbF9pbml0X3BvcnQoKSAtIGluaXRpYWxpemUgc2luZ2xlIHNlcmlhbCBwb3J0CkBAIC03NTksMTMgKzc2MiwxMyBAQAogCXAtPnByaXZhdGVfZGF0YSA9IHVhcnQ7CiAKIAkvKgotCSAqIG9tYXA0NHh4OiBOZXZlciByZWFkIGVtcHR5IFVBUlQgZmlmbworCSAqIG9tYXA0NHh4LCB0aTgxNng6IE5ldmVyIHJlYWQgZW1wdHkgVUFSVCBmaWZvCiAJICogb21hcDN4eHg6IE5ldmVyIHJlYWQgZW1wdHkgVUFSVCBmaWZvIG9uIFVBUlRzCiAJICogd2l0aCBJUCByZXYgPj0weDUyCiAJICovCiAJdWFydC0+cmVnc2hpZnQgPSBwLT5yZWdzaGlmdDsKIAl1YXJ0LT5tZW1iYXNlID0gcC0+bWVtYmFzZTsKLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJaWYgKGNwdV9pc19vbWFwNDR4eCgpIHx8IGNwdV9pc190aTgxNngoKSkKIAkJdWFydC0+ZXJyYXRhIHw9IFVBUlRfRVJSQVRBX0ZJRk9fRlVMTF9BQk9SVDsKIAllbHNlIGlmICgoc2VyaWFsX3JlYWRfcmVnKHVhcnQsIFVBUlRfT01BUF9NVkVSKSAmIDB4RkYpCiAJCQk+PSBVQVJUX09NQVBfTk9fRU1QVFlfRklGT19SRUFEX0lQX1JFVikKQEAgLTg0Nyw3ICs4NTAsNyBAQAogCX0KIAogCS8qIEVuYWJsZSB0aGUgTURSMSBlcnJhdGEgZm9yIE9NQVAzICovCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCWlmIChjcHVfaXNfb21hcDM0eHgoKSAmJiAhY3B1X2lzX3RpODE2eCgpKQogCQl1YXJ0LT5lcnJhdGEgfD0gVUFSVF9FUlJBVEFfaTIwMl9NRFIxX0FDQ0VTUzsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMKaW5kZXggOTUxYTBiZS4uNjNmMTA2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMzR4eC5TCkBAIC02NCw2ICs2NCwxMSBAQAogI2RlZmluZSBTRFJDX0RMTEFfU1RBVFVTX1YJT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9TVEFUVVMpCiAjZGVmaW5lIFNEUkNfRExMQV9DVFJMX1YJT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9DVFJMKQogCisvKgorICogVGhpcyBmaWxlIG5lZWRzIGJlIGJ1aWx0IHVuY29uZGl0aW9uYWxseSBhcyBBUk0gdG8gaW50ZXJvcGVyYXRlIGNvcnJlY3RseQorICogd2l0aCBub24tVGh1bWItMi1jYXBhYmxlIGZpcm13YXJlLgorICovCisJLmFybQogCiAvKgogICogQVBJIGZ1bmN0aW9ucwpAQCAtODIsNiArODcsOCBAQAogCXN0bWZkCXNwISwge2xyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAJYWRyCXIwLCByZXN0b3JlCiAJbGRtZmQJc3AhLCB7cGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KK0VORFBST0MoZ2V0X3Jlc3RvcmVfcG9pbnRlcikKKwkuYWxpZ24KIEVOVFJZKGdldF9yZXN0b3JlX3BvaW50ZXJfc3opCiAJLndvcmQJLiAtIGdldF9yZXN0b3JlX3BvaW50ZXIKIApAQCAtOTEsNiArOTgsOCBAQAogCXN0bWZkCXNwISwge2xyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAJYWRyCXIwLCByZXN0b3JlXzM2MzAKIAlsZG1mZAlzcCEsIHtwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorRU5EUFJPQyhnZXRfb21hcDM2MzBfcmVzdG9yZV9wb2ludGVyKQorCS5hbGlnbgogRU5UUlkoZ2V0X29tYXAzNjMwX3Jlc3RvcmVfcG9pbnRlcl9zeikKIAkud29yZAkuIC0gZ2V0X29tYXAzNjMwX3Jlc3RvcmVfcG9pbnRlcgogCkBAIC0xMDAsNiArMTA5LDggQEAKIAlzdG1mZAlzcCEsIHtscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCWFkcglyMCwgcmVzdG9yZV9lczMKIAlsZG1mZAlzcCEsIHtwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorRU5EUFJPQyhnZXRfZXMzX3Jlc3RvcmVfcG9pbnRlcikKKwkuYWxpZ24KIEVOVFJZKGdldF9lczNfcmVzdG9yZV9wb2ludGVyX3N6KQogCS53b3JkCS4gLSBnZXRfZXMzX3Jlc3RvcmVfcG9pbnRlcgogCkBAIC0xMTMsOCArMTI0LDEwIEBACiAJc3RtZmQJc3AhLCB7bHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKIAkvKiBTZXR1cCBzbyB0aGF0IHdlIHdpbGwgZGlzYWJsZSBhbmQgZW5hYmxlIGwyICovCiAJbW92CXIxLCAjMHgxCi0Jc3RyCXIxLCBsMmRpc18zNjMwCisJYWRybAlyMiwgbDJkaXNfMzYzMAlAIG1heSBiZSB0b28gZGlzdGFudCBmb3IgcGxhaW4gYWRyCisJc3RyCXIxLCBbcjJdCiAJbGRtZmQJc3AhLCB7cGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KK0VORFBST0MoZW5hYmxlX29tYXAzNjMwX3RvZ2dsZV9sMl9vbl9yZXN0b3JlKQogCiAJLnRleHQKIC8qIEZ1bmN0aW9uIHRvIGNhbGwgcm9tIGNvZGUgdG8gc2F2ZSBzZWN1cmUgcmFtIGNvbnRleHQgKi8KQEAgLTEzMiwyMCArMTQ1LDIyIEBACiAJbW92CXIxLCAjMAkJCUAgc2V0IHRhc2sgaWQgZm9yIFJPTSBjb2RlIGluIHIxCiAJbW92CXIyLCAjNAkJCUAgc2V0IHNvbWUgZmxhZ3MgaW4gcjIsIHI2CiAJbW92CXI2LCAjMHhmZgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgZGF0YSB3cml0ZSBiYXJyaWVyCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDUJQCBkYXRhIG1lbW9yeSBiYXJyaWVyCi0JLndvcmQJMHhFMTYwMDA3MQkJQCBjYWxsIFNNSSBtb25pdG9yIChzbWkgIzEpCisJZHNiCQkJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJZG1iCQkJCUAgZGF0YSBtZW1vcnkgYmFycmllcgorCXNtYwkjMQkJCUAgY2FsbCBTTUkgbW9uaXRvciAoc21pICMxKQogCW5vcAogCW5vcAogCW5vcAogCW5vcAogCWxkbWZkCXNwISwge3IxLXIxMiwgcGN9CisJLmFsaWduCiBzcmFtX3BoeV9hZGRyX21hc2s6CiAJLndvcmQJU1JBTV9CQVNFX1AKIGhpZ2hfbWFzazoKIAkud29yZAkweGZmZmYKIGFwaV9wYXJhbXM6CiAJLndvcmQJMHg0LCAweDAsIDB4MCwgMHgxLCAweDEKK0VORFBST0Moc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQpCiBFTlRSWShzYXZlX3NlY3VyZV9yYW1fY29udGV4dF9zeikKIAkud29yZAkuIC0gc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQKIApAQCAtMTc1LDEyICsxOTAsMTIgQEAKIAlzdG1mZAlzcCEsIHtyMC1yMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAKIAkvKgotCSAqIHIwIGNvbnRhaW5zIHJlc3RvcmUgcG9pbnRlciBpbiBzZHJhbQorCSAqIHIwIGNvbnRhaW5zIENQVSBjb250ZXh0IHNhdmUvcmVzdG9yZSBwb2ludGVyIGluIHNkcmFtCiAJICogcjEgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgc2F2aW5nIGNvbnRleHQ6CiAJICogICAwIC0gTm8gY29udGV4dCBsb3N0CiAJICogICAxIC0gT25seSBMMSBhbmQgbG9naWMgbG9zdAotCSAqICAgMiAtIE9ubHkgTDIgbG9zdAotCSAqICAgMyAtIEJvdGggTDEgYW5kIEwyIGxvc3QKKwkgKiAgIDIgLSBPbmx5IEwyIGxvc3QgKEV2ZW4gTDEgaXMgcmV0YWluZWQgd2UgY2xlYW4gaXQgYWxvbmcgd2l0aCBMMikKKwkgKiAgIDMgLSBCb3RoIEwxIGFuZCBMMiBsb3N0IGFuZCBsb2dpYyBsb3N0CiAJICovCiAKIAkvKiBEaXJlY3RseSBqdW1wIHRvIFdGSSBpcyB0aGUgY29udGV4dCBzYXZlIGlzIG5vdCByZXF1aXJlZCAqLwpAQCAtMjAxLDg5ICsyMTYsNzQgQEAKIAliZXEJY2xlYW5fY2FjaGVzCiAKIGwxX2xvZ2ljX2xvc3Q6Ci0JLyogU3RvcmUgc3AgYW5kIHNwc3IgdG8gU0RSQU0gKi8KLQltb3YJcjQsIHNwCi0JbXJzCXI1LCBzcHNyCi0JbW92CXI2LCBscgorCW1vdglyNCwgc3AJCQlAIFN0b3JlIHNwCisJbXJzCXI1LCBzcHNyCQlAIFN0b3JlIHNwc3IKKwltb3YJcjYsIGxyCQkJQCBTdG9yZSBscgogCXN0bWlhCXI4ISwge3I0LXI2fQotCS8qIFNhdmUgYWxsIEFSTSByZWdpc3RlcnMgKi8KLQkvKiBDb3Byb2Nlc3NvciBhY2Nlc3MgY29udHJvbCByZWdpc3RlciAqLwotCW1yYwlwMTUsIDAsIHI2LCBjMSwgYzAsIDIKLQlzdG1pYQlyOCEsIHtyNn0KLQkvKiBUVEJSMCwgVFRCUjEgYW5kIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgY29udHJvbCAqLwotCW1yYwlwMTUsIDAsIHI0LCBjMiwgYzAsIDAKLQltcmMJcDE1LCAwLCByNSwgYzIsIGMwLCAxCi0JbXJjCXAxNSwgMCwgcjYsIGMyLCBjMCwgMgotCXN0bWlhCXI4ISwge3I0LXI2fQotCS8qCi0JICogRG9tYWluIGFjY2VzcyBjb250cm9sIHJlZ2lzdGVyLCBkYXRhIGZhdWx0IHN0YXR1cyByZWdpc3RlciwKLQkgKiBhbmQgaW5zdHJ1Y3Rpb24gZmF1bHQgc3RhdHVzIHJlZ2lzdGVyCi0JICovCi0JbXJjCXAxNSwgMCwgcjQsIGMzLCBjMCwgMAotCW1yYwlwMTUsIDAsIHI1LCBjNSwgYzAsIDAKLQltcmMJcDE1LCAwLCByNiwgYzUsIGMwLCAxCi0Jc3RtaWEJcjghLCB7cjQtcjZ9Ci0JLyoKLQkgKiBEYXRhIGF1eCBmYXVsdCBzdGF0dXMgcmVnaXN0ZXIsIGluc3RydWN0aW9uIGF1eCBmYXVsdCBzdGF0dXMsCi0JICogZGF0YSBmYXVsdCBhZGRyZXNzIHJlZ2lzdGVyIGFuZCBpbnN0cnVjdGlvbiBmYXVsdCBhZGRyZXNzIHJlZ2lzdGVyCi0JICovCi0JbXJjCXAxNSwgMCwgcjQsIGM1LCBjMSwgMAotCW1yYwlwMTUsIDAsIHI1LCBjNSwgYzEsIDEKLQltcmMJcDE1LCAwLCByNiwgYzYsIGMwLCAwCi0JbXJjCXAxNSwgMCwgcjcsIGM2LCBjMCwgMgotCXN0bWlhCXI4ISwge3I0LXI3fQotCS8qCi0JICogdXNlciByL3cgdGhyZWFkIGFuZCBwcm9jZXNzIElELCB1c2VyIHIvbyB0aHJlYWQgYW5kIHByb2Nlc3MgSUQsCi0JICogcHJpdiBvbmx5IHRocmVhZCBhbmQgcHJvY2VzcyBJRCwgY2FjaGUgc2l6ZSBzZWxlY3Rpb24KLQkgKi8KLQltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMgotCW1yYwlwMTUsIDAsIHI1LCBjMTMsIGMwLCAzCi0JbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDQKLQltcmMJcDE1LCAyLCByNywgYzAsIGMwLCAwCi0Jc3RtaWEJcjghLCB7cjQtcjd9Ci0JLyogRGF0YSBUTEIgbG9ja2Rvd24sIGluc3RydWN0aW9uIFRMQiBsb2NrZG93biByZWdpc3RlcnMgKi8KLQltcmMJcDE1LCAwLCByNSwgYzEwLCBjMCwgMAotCW1yYwlwMTUsIDAsIHI2LCBjMTAsIGMwLCAxCi0Jc3RtaWEJcjghLCB7cjUtcjZ9Ci0JLyogU2VjdXJlIG9yIG5vbiBzZWN1cmUgdmVjdG9yIGJhc2UgYWRkcmVzcywgRkNTRSBQSUQsIENvbnRleHQgUElEKi8KLQltcmMJcDE1LCAwLCByNCwgYzEyLCBjMCwgMAotCW1yYwlwMTUsIDAsIHI1LCBjMTMsIGMwLCAwCi0JbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDEKLQlzdG1pYQlyOCEsIHtyNC1yNn0KLQkvKiBQcmltYXJ5IHJlbWFwLCBub3JtYWwgcmVtYXAgcmVnaXN0ZXJzICovCi0JbXJjCXAxNSwgMCwgcjQsIGMxMCwgYzIsIDAKLQltcmMJcDE1LCAwLCByNSwgYzEwLCBjMiwgMQotCXN0bWlhCXI4ISx7cjQtcjV9CiAKLQkvKiBTdG9yZSBjdXJyZW50IGNwc3IqLwotCW1ycwlyMiwgY3BzcgotCXN0bWlhCXI4ISwge3IyfQorCW1yYwlwMTUsIDAsIHI0LCBjMSwgYzAsIDIJQCBDb3Byb2Nlc3NvciBhY2Nlc3MgY29udHJvbCByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHI1LCBjMiwgYzAsIDAJQCBUVEJSMAorCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDEJQCBUVEJSMQorCW1yYwlwMTUsIDAsIHI3LCBjMiwgYzAsIDIJQCBUVEJDUgorCXN0bWlhCXI4ISwge3I0LXI3fQogCi0JbXJjCXAxNSwgMCwgcjQsIGMxLCBjMCwgMAotCS8qIHNhdmUgY29udHJvbCByZWdpc3RlciAqLworCW1yYwlwMTUsIDAsIHI0LCBjMywgYzAsIDAJQCBEb21haW4gYWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIKKwltcmMJcDE1LCAwLCByNSwgYzEwLCBjMiwgMAlAIFBSUlIKKwltcmMJcDE1LCAwLCByNiwgYzEwLCBjMiwgMQlAIE5NUlIKKwlzdG1pYQlyOCEse3I0LXI2fQorCisJbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDEJQCBDb250ZXh0IElECisJbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDIJQCBVc2VyIHIvdyB0aHJlYWQgYW5kIHByb2Nlc3MgSUQKKwltcmMJcDE1LCAwLCByNiwgYzEyLCBjMCwgMAlAIFNlY3VyZSBvciBOUyB2ZWN0b3IgYmFzZSBhZGRyZXNzCisJbXJzCXI3LCBjcHNyCQlAIFN0b3JlIGN1cnJlbnQgY3BzcgorCXN0bWlhCXI4ISwge3I0LXI3fQorCisJbXJjCXAxNSwgMCwgcjQsIGMxLCBjMCwgMAlAIHNhdmUgY29udHJvbCByZWdpc3RlcgogCXN0bWlhCXI4ISwge3I0fQogCiBjbGVhbl9jYWNoZXM6CiAJLyoKLQkgKiBDbGVhbiBEYXRhIG9yIHVuaWZpZWQgY2FjaGUgdG8gUE9VCi0JICogSG93IHRvIGludmFsaWRhdGUgb25seSBMMSBjYWNoZT8/Pz8gLSAjRklYX01FIwotCSAqIG1jcglwMTUsIDAsIHIxMSwgYzcsIGMxMSwgMQotCSAqLwotCWNtcAlyMSwgIzB4MSAJCUAgQ2hlY2sgd2hldGhlciBMMiBpbnZhbCBpcyByZXF1aXJlZAotCWJlcQlvbWFwM19kb193ZmkKLQotY2xlYW5fbDI6Ci0JLyoKIAkgKiBqdW1wIG91dCB0byBrZXJuZWwgZmx1c2ggcm91dGluZQogCSAqICAtIHJldXNlIHRoYXQgY29kZSBpcyBiZXR0ZXIKIAkgKiAgLSBpdCBleGVjdXRlcyBpbiBhIGNhY2hlZCBzcGFjZSBzbyBpcyBmYXN0ZXIgdGhhbiByZWZldGNoIHBlci1ibG9jawogCSAqICAtIHNob3VsZCBiZSBmYXN0ZXIgYW5kIHdpbGwgY2hhbmdlIHdpdGgga2VybmVsCiAJICogIC0gJ21pZ2h0JyBoYXZlIHRvIGNvcHkgYWRkcmVzcywgbG9hZCBhbmQganVtcCB0byBpdAorCSAqIEZsdXNoIGFsbCBkYXRhIGZyb20gdGhlIEwxIGRhdGEgY2FjaGUgYmVmb3JlIGRpc2FibGluZworCSAqIFNDVExSLkMgYml0LgogCSAqLwogCWxkcglyMSwga2VybmVsX2ZsdXNoCiAJbW92CWxyLCBwYwogCWJ4CXIxCiAKKwkvKgorCSAqIENsZWFyIHRoZSBTQ1RMUi5DIGJpdCB0byBwcmV2ZW50IGZ1cnRoZXIgZGF0YSBjYWNoZQorCSAqIGFsbG9jYXRpb24uIENsZWFyaW5nIFNDVExSLkMgd291bGQgbWFrZSBhbGwgdGhlIGRhdGEgYWNjZXNzZXMKKwkgKiBzdHJvbmdseSBvcmRlcmVkIGFuZCB3b3VsZCBub3QgaGl0IHRoZSBjYWNoZS4KKwkgKi8KKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJYmljCXIwLCByMCwgIygxIDw8IDIpCUAgRGlzYWJsZSB0aGUgQyBiaXQKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJaXNiCisKKwkvKgorCSAqIEludmFsaWRhdGUgTDEgZGF0YSBjYWNoZS4gRXZlbiB0aG91Z2ggb25seSBpbnZhbGlkYXRlIGlzCisJICogbmVjZXNzYXJ5IGV4cG9ydGVkIGZsdXNoIEFQSSBpcyB1c2VkIGhlcmUuIERvaW5nIGNsZWFuCisJICogb24gYWxyZWFkeSBjbGVhbiBjYWNoZSB3b3VsZCBiZSBhbG1vc3QgTk9QLgorCSAqLworCWxkcglyMSwga2VybmVsX2ZsdXNoCisJYmx4CXIxCisJLyoKKwkgKiBUaGUga2VybmVsIGRvZXNuJ3QgaW50ZXJ3b3JrOiB2N19mbHVzaF9kY2FjaGVfYWxsIGluIHBhcnRpY2x1YXIgd2lsbAorCSAqIGFsd2F5cyByZXR1cm4gaW4gVGh1bWIgc3RhdGUgd2hlbiBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBlbmFibGVkLgorCSAqIFRoaXMgc2VxdWVuY2Ugc3dpdGNoZXMgYmFjayB0byBBUk0uICBOb3RlIHRoYXQgLmFsaWduIG1heSBpbnNlcnQgYQorCSAqIG5vcDogYnggcGMgbmVlZHMgdG8gYmUgd29yZC1hbGlnbmVkIGluIG9yZGVyIHRvIHdvcmsuCisJICovCisgVEhVTUIoCS50aHVtYgkJKQorIFRIVU1CKAkuYWxpZ24JCSkKKyBUSFVNQigJYngJcGMJKQorIFRIVU1CKAlub3AJCSkKKwkuYXJtCisKIG9tYXAzX2RvX3dmaToKIAlsZHIJcjQsIHNkcmNfcG93ZXIJCUAgcmVhZCB0aGUgU0RSQ19QT1dFUiByZWdpc3RlcgogCWxkcglyNSwgW3I0XQkJQCByZWFkIHRoZSBjb250ZW50cyBvZiBTRFJDX1BPV0VSCkBAIC0yOTEsOSArMjkxLDggQEAKIAlzdHIJcjUsIFtyNF0JCUAgd3JpdGUgYmFjayB0byBTRFJDX1BPV0VSIHJlZ2lzdGVyCiAKIAkvKiBEYXRhIG1lbW9yeSBiYXJyaWVyIGFuZCBEYXRhIHN5bmMgYmFycmllciAqLwotCW1vdglyMSwgIzAKLQltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAotCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA1CisJZHNiCisJZG1iCiAKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzE5LDYgKzMxOCwxMiBAQAogCW5vcAogCWJsIHdhaXRfc2RyY19vawogCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAorCXRzdAlyMCwgIygxIDw8IDIpCQlAIENoZWNrIEMgYml0IGVuYWJsZWQ/CisJb3JyZXEJcjAsIHIwLCAjKDEgPDwgMikJQCBFbmFibGUgdGhlIEMgYml0IGlmIGNsZWFyZWQKKwltY3JlcQlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKwlpc2IKKwogLyoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiA9PSBFeGl0IHBvaW50IGZyb20gbm9uLU9GRiBtb2RlcyA9PQpAQCAtNDA4LDkgKzQxMyw5IEBACiAJbW92CXIyLCAjNAkJCUAgc2V0IHNvbWUgZmxhZ3MgaW4gcjIsIHI2CiAJbW92CXI2LCAjMHhmZgogCWFkcglyMywgbDJfaW52X2FwaV9wYXJhbXMJQCByMyBwb2ludHMgdG8gZHVtbXkgcGFyYW1ldGVycwotCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgZGF0YSB3cml0ZSBiYXJyaWVyCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDUJQCBkYXRhIG1lbW9yeSBiYXJyaWVyCi0JLndvcmQJMHhFMTYwMDA3MQkJQCBjYWxsIFNNSSBtb25pdG9yIChzbWkgIzEpCisJZHNiCQkJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJZG1iCQkJCUAgZGF0YSBtZW1vcnkgYmFycmllcgorCXNtYwkjMQkJCUAgY2FsbCBTTUkgbW9uaXRvciAoc21pICMxKQogCS8qIFdyaXRlIHRvIEF1eCBjb250cm9sIHJlZ2lzdGVyIHRvIHNldCBzb21lIGJpdHMgKi8KIAltb3YJcjAsICM0MgkJCUAgc2V0IHNlcnZpY2UgSUQgZm9yIFBQQQogCW1vdglyMTIsIHIwCQkJQCBjb3B5IHNlY3VyZSBTZXJ2aWNlIElEIGluIHIxMgpAQCAtNDE5LDkgKzQyNCw5IEBACiAJbW92CXI2LCAjMHhmZgogCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCiAJbGRyCXIzLCBbcjQsICMweEJDXQkJQCByMyBwb2ludHMgdG8gcGFyYW1ldGVycwotCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgZGF0YSB3cml0ZSBiYXJyaWVyCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDUJQCBkYXRhIG1lbW9yeSBiYXJyaWVyCi0JLndvcmQJMHhFMTYwMDA3MQkJQCBjYWxsIFNNSSBtb25pdG9yIChzbWkgIzEpCisJZHNiCQkJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJZG1iCQkJCUAgZGF0YSBtZW1vcnkgYmFycmllcgorCXNtYwkjMQkJCUAgY2FsbCBTTUkgbW9uaXRvciAoc21pICMxKQogCiAjaWZkZWYgQ09ORklHX09NQVAzX0wyX0FVWF9TRUNVUkVfU0FWRV9SRVNUT1JFCiAJLyogUmVzdG9yZSBMMiBhdXggY29udHJvbCByZWdpc3RlciAqLwpAQCAtNDM0LDI5ICs0MzksMzAgQEAKIAlsZHIJcjQsIHNjcmF0Y2hwYWRfYmFzZQogCWxkcglyMywgW3I0LCAjMHhCQ10KIAlhZGRzCXIzLCByMywgIzgJCUAgcjMgcG9pbnRzIHRvIHBhcmFtZXRlcnMKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAlAIGRhdGEgd3JpdGUgYmFycmllcgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA1CUAgZGF0YSBtZW1vcnkgYmFycmllcgotCS53b3JkCTB4RTE2MDAwNzEJCUAgY2FsbCBTTUkgbW9uaXRvciAoc21pICMxKQorCWRzYgkJCQlAIGRhdGEgd3JpdGUgYmFycmllcgorCWRtYgkJCQlAIGRhdGEgbWVtb3J5IGJhcnJpZXIKKwlzbWMJIzEJCQlAIGNhbGwgU01JIG1vbml0b3IgKHNtaSAjMSkKICNlbmRpZgogCWIJbG9naWNfbDFfcmVzdG9yZQogCisJLmFsaWduCiBsMl9pbnZfYXBpX3BhcmFtczoKIAkud29yZAkweDEsIDB4MDAKIGwyX2ludl9ncDoKIAkvKiBFeGVjdXRlIHNtaSB0byBpbnZhbGlkYXRlIEwyIGNhY2hlICovCiAJbW92IHIxMiwgIzB4MQkJCUAgc2V0IHVwIHRvIGludmFsaWRhdGUgTDIKLQkud29yZCAweEUxNjAwMDcwCQlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQorCXNtYwkjMAkJCUAgQ2FsbCBTTUkgbW9uaXRvciAoc21pZXEpCiAJLyogV3JpdGUgdG8gQXV4IGNvbnRyb2wgcmVnaXN0ZXIgdG8gc2V0IHNvbWUgYml0cyAqLwogCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCiAJbGRyCXIzLCBbcjQsIzB4QkNdCiAJbGRyCXIwLCBbcjMsIzRdCiAJbW92CXIxMiwgIzB4MwotCS53b3JkCTB4RTE2MDAwNzAJCUAgQ2FsbCBTTUkgbW9uaXRvciAoc21pZXEpCisJc21jCSMwCQkJQCBDYWxsIFNNSSBtb25pdG9yIChzbWllcSkKIAlsZHIJcjQsIHNjcmF0Y2hwYWRfYmFzZQogCWxkcglyMywgW3I0LCMweEJDXQogCWxkcglyMCwgW3IzLCMxMl0KIAltb3YJcjEyLCAjMHgyCi0JLndvcmQJMHhFMTYwMDA3MAkJQCBDYWxsIFNNSSBtb25pdG9yIChzbWllcSkKKwlzbWMJIzAJCQlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQogbG9naWNfbDFfcmVzdG9yZToKIAlsZHIJcjEsIGwyZGlzXzM2MzAKIAljbXAJcjEsICMweDEJCUAgVGVzdCBpZiBMMiByZS1lbmFibGUgbmVlZGVkIG9uIDM2MzAKQEAgLTQ3NSw2OCArNDgxLDI5IEBACiAJbGRyCXI0LCBzY3JhdGNocGFkX2Jhc2UKIAlsZHIJcjMsIFtyNCwjMHhCQ10KIAlhZGRzCXIzLCByMywgIzE2CisKIAlsZG1pYQlyMyEsIHtyNC1yNn0KLQltb3YJc3AsIHI0Ci0JbXNyCXNwc3JfY3hzZiwgcjUKLQltb3YJbHIsIHI2CisJbW92CXNwLCByNAkJCUAgUmVzdG9yZSBzcAorCW1zcglzcHNyX2N4c2YsIHI1CQlAIFJlc3RvcmUgc3BzcgorCW1vdglsciwgcjYJCQlAIFJlc3RvcmUgbHIKIAotCWxkbWlhCXIzISwge3I0LXI5fQotCS8qIENvcHJvY2Vzc29yIGFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCi0JbWNyIHAxNSwgMCwgcjQsIGMxLCBjMCwgMgorCWxkbWlhCXIzISwge3I0LXI3fQorCW1jcglwMTUsIDAsIHI0LCBjMSwgYzAsIDIJQCBDb3Byb2Nlc3NvciBhY2Nlc3MgQ29udHJvbCBSZWdpc3RlcgorCW1jcglwMTUsIDAsIHI1LCBjMiwgYzAsIDAJQCBUVEJSMAorCW1jcglwMTUsIDAsIHI2LCBjMiwgYzAsIDEJQCBUVEJSMQorCW1jcglwMTUsIDAsIHI3LCBjMiwgYzAsIDIJQCBUVEJDUgogCi0JLyogVFRCUjAgKi8KLQlNQ1IgcDE1LCAwLCByNSwgYzIsIGMwLCAwCi0JLyogVFRCUjEgKi8KLQlNQ1IgcDE1LCAwLCByNiwgYzIsIGMwLCAxCi0JLyogVHJhbnNsYXRpb24gdGFibGUgYmFzZSBjb250cm9sIHJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjcsIGMyLCBjMCwgMgotCS8qIERvbWFpbiBhY2Nlc3MgQ29udHJvbCBSZWdpc3RlciAqLwotCU1DUiBwMTUsIDAsIHI4LCBjMywgYzAsIDAKLQkvKiBEYXRhIGZhdWx0IHN0YXR1cyBSZWdpc3RlciAqLwotCU1DUiBwMTUsIDAsIHI5LCBjNSwgYzAsIDAKKwlsZG1pYQlyMyEse3I0LXI2fQorCW1jcglwMTUsIDAsIHI0LCBjMywgYzAsIDAJQCBEb21haW4gYWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIKKwltY3IJcDE1LCAwLCByNSwgYzEwLCBjMiwgMAlAIFBSUlIKKwltY3IJcDE1LCAwLCByNiwgYzEwLCBjMiwgMQlAIE5NUlIKIAotCWxkbWlhCXIzISx7cjQtcjh9Ci0JLyogSW5zdHJ1Y3Rpb24gZmF1bHQgc3RhdHVzIFJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjQsIGM1LCBjMCwgMQotCS8qIERhdGEgQXV4aWxpYXJ5IEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLwotCU1DUiBwMTUsIDAsIHI1LCBjNSwgYzEsIDAKLQkvKiBJbnN0cnVjdGlvbiBBdXhpbGlhcnkgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyKi8KLQlNQ1IgcDE1LCAwLCByNiwgYzUsIGMxLCAxCi0JLyogRGF0YSBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjcsIGM2LCBjMCwgMAotCS8qIEluc3RydWN0aW9uIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIqLwotCU1DUiBwMTUsIDAsIHI4LCBjNiwgYzAsIDIKKwogCWxkbWlhCXIzISx7cjQtcjd9Ci0KLQkvKiBVc2VyIHIvdyB0aHJlYWQgYW5kIHByb2Nlc3MgSUQgKi8KLQlNQ1IgcDE1LCAwLCByNCwgYzEzLCBjMCwgMgotCS8qIFVzZXIgcm8gdGhyZWFkIGFuZCBwcm9jZXNzIElEICovCi0JTUNSIHAxNSwgMCwgcjUsIGMxMywgYzAsIDMKLQkvKiBQcml2aWxlZ2VkIG9ubHkgdGhyZWFkIGFuZCBwcm9jZXNzIElEICovCi0JTUNSIHAxNSwgMCwgcjYsIGMxMywgYzAsIDQKLQkvKiBDYWNoZSBzaXplIHNlbGVjdGlvbiAqLwotCU1DUiBwMTUsIDIsIHI3LCBjMCwgYzAsIDAKLQlsZG1pYQlyMyEse3I0LXI4fQotCS8qIERhdGEgVExCIGxvY2tkb3duIHJlZ2lzdGVycyAqLwotCU1DUiBwMTUsIDAsIHI0LCBjMTAsIGMwLCAwCi0JLyogSW5zdHJ1Y3Rpb24gVExCIGxvY2tkb3duIHJlZ2lzdGVycyAqLwotCU1DUiBwMTUsIDAsIHI1LCBjMTAsIGMwLCAxCi0JLyogU2VjdXJlIG9yIE5vbnNlY3VyZSBWZWN0b3IgQmFzZSBBZGRyZXNzICovCi0JTUNSIHAxNSwgMCwgcjYsIGMxMiwgYzAsIDAKLQkvKiBGQ1NFIFBJRCAqLwotCU1DUiBwMTUsIDAsIHI3LCBjMTMsIGMwLCAwCi0JLyogQ29udGV4dCBQSUQgKi8KLQlNQ1IgcDE1LCAwLCByOCwgYzEzLCBjMCwgMQotCi0JbGRtaWEJcjMhLHtyNC1yNX0KLQkvKiBQcmltYXJ5IG1lbW9yeSByZW1hcCByZWdpc3RlciAqLwotCU1DUiBwMTUsIDAsIHI0LCBjMTAsIGMyLCAwCi0JLyogTm9ybWFsIG1lbW9yeSByZW1hcCByZWdpc3RlciAqLwotCU1DUiBwMTUsIDAsIHI1LCBjMTAsIGMyLCAxCi0KLQkvKiBSZXN0b3JlIGNwc3IgKi8KLQlsZG1pYQlyMyEse3I0fQkJQCBsb2FkIENQU1IgZnJvbSBTRFJBTQotCW1zcgljcHNyLCByNAkJQCBzdG9yZSBjcHNyCisJbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDEJQCBDb250ZXh0IElECisJbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDIJQCBVc2VyIHIvdyB0aHJlYWQgYW5kIHByb2Nlc3MgSUQKKwltcmMJcDE1LCAwLCByNiwgYzEyLCBjMCwgMAlAIFNlY3VyZSBvciBOUyB2ZWN0b3IgYmFzZSBhZGRyZXNzCisJbXNyCWNwc3IsIHI3CQlAIHN0b3JlIGNwc3IKIAogCS8qIEVuYWJsaW5nIE1NVSBoZXJlICovCiAJbXJjCXAxNSwgMCwgcjcsIGMyLCBjMCwgMiAJQCBSZWFkIFRUQlJDb250cm9sCkBAIC01OTQsMTIgKzU2MSwxNyBAQAogCWxkcglyMiwgY2FjaGVfcHJlZF9kaXNhYmxlX21hc2sKIAlhbmQJcjQsIHIyCiAJbWNyCXAxNSwgMCwgcjQsIGMxLCBjMCwgMAorCWRzYgorCWlzYgorCWxkciAgICAgcjAsID1yZXN0b3JlbW11X29uCisJYnggICAgICByMAogCiAvKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiA9PSBFeGl0IHBvaW50IGZyb20gT0ZGIG1vZGUgPT0KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCityZXN0b3JlbW11X29uOgogCWxkbWZkCXNwISwge3IwLXIxMiwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KIAogCkBAIC02MDksNiArNTgxLDcgQEAKIAogLyogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBlcnJhdHVtIElEIGk0NDMgV0EsIGFwcGxpZXMgdG8gMzR4eCA+PSBFUzMuMCAqLwogCS50ZXh0CisJLmFsaWduCTMKIEVOVFJZKGVzM19zZHJjX2ZpeCkKIAlsZHIJcjQsIHNkcmNfc3lzY2ZnCQlAIGdldCBjb25maWcgYWRkcgogCWxkcglyNSwgW3I0XQkJQCBnZXQgdmFsdWUKQEAgLTYzNiw2ICs2MDksNyBAQAogCXN0cglyNSwgW3I0XQkJQCBraWNrIG9mZiByZWZyZXNoZXMKIAlieAlscgogCisJLmFsaWduCiBzZHJjX3N5c2NmZzoKIAkud29yZAlTRFJDX1NZU0NPTkZJR19QCiBzZHJjX21yXzA6CkBAIC02NTAsNiArNjI0LDcgQEAKIAkud29yZAlTRFJDX0VNUjJfMV9QCiBzZHJjX21hbnVhbF8xOgogCS53b3JkCVNEUkNfTUFOVUFMXzFfUAorRU5EUFJPQyhlczNfc2RyY19maXgpCiBFTlRSWShlczNfc2RyY19maXhfc3opCiAJLndvcmQJLiAtIGVzM19zZHJjX2ZpeAogCkBAIC02ODQsNiArNjU5LDEyIEBACiAJYmljCXI1LCByNSwgIzB4NDAKIAlzdHIJcjUsIFtyNF0KIAorLyoKKyAqIFBDLXJlbGF0aXZlIHN0b3JlcyBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gVGh1bWItMjogdXNlIGEgcjcgYXMgYQorICogYmFzZSBpbnN0ZWFkLgorICogQmUgY2FyZWZ1bCBub3QgdG8gY2xvYmJlciByNyB3aGVuIG1haW50YWluZyB0aGlzIGNvZGUuCisgKi8KKwogaXNfZGxsX2luX2xvY2tfbW9kZToKIAkvKiBJcyBkbGwgaW4gbG9jayBtb2RlPyAqLwogCWxkcglyNCwgc2RyY19kbGxhX2N0cmwKQEAgLTY5MSwxMCArNjcyLDExIEBACiAJdHN0CXI1LCAjMHg0CiAJYnhuZQlscgkJCUAgUmV0dXJuIGlmIGxvY2tlZAogCS8qIHdhaXQgdGlsbCBkbGwgbG9ja3MgKi8KKwlhZHIJcjcsIGtpY2tfY291bnRlcgogd2FpdF9kbGxfbG9ja190aW1lZDoKIAlsZHIJcjQsIHdhaXRfZGxsX2xvY2tfY291bnRlcgogCWFkZAlyNCwgcjQsICMxCi0Jc3RyCXI0LCB3YWl0X2RsbF9sb2NrX2NvdW50ZXIKKwlzdHIJcjQsIFtyNywgI3dhaXRfZGxsX2xvY2tfY291bnRlciAtIGtpY2tfY291bnRlcl0KIAlsZHIJcjQsIHNkcmNfZGxsYV9zdGF0dXMKIAkvKiBXYWl0IDIwdVMgZm9yIGxvY2sgKi8KIAltb3YJcjYsICM4CkBAIC03MjAsOSArNzAyLDEwIEBACiAJZHNiCiAJbGRyCXI0LCBraWNrX2NvdW50ZXIKIAlhZGQJcjQsIHI0LCAjMQotCXN0cglyNCwga2lja19jb3VudGVyCisJc3RyCXI0LCBbcjddCQlAIGtpY2tfY291bnRlcgogCWIJd2FpdF9kbGxfbG9ja190aW1lZAogCisJLmFsaWduCiBjbV9pZGxlc3QxX2NvcmU6CiAJLndvcmQJQ01fSURMRVNUMV9DT1JFX1YKIGNtX2lkbGVzdF9ja2dlbjoKQEAgLTc2NSw2ICs3NDgsNyBAQAogCS53b3JkCTAKIHdhaXRfZGxsX2xvY2tfY291bnRlcjoKIAkud29yZAkwCitFTkRQUk9DKG9tYXAzNHh4X2NwdV9zdXNwZW5kKQogCiBFTlRSWShvbWFwMzR4eF9jcHVfc3VzcGVuZF9zeikKIAkud29yZAkuIC0gb21hcDM0eHhfY3B1X3N1c3BlbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXgtY2xhc3MzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LWNsYXNzMy5jCmluZGV4IDYwZTcwNTUuLmY0MzhjZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXgtY2xhc3MzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC1jbGFzczMuYwpAQCAtMTEsNyArMTEsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPHBsYXQvc21hcnRyZWZsZXguaD4KKyNpbmNsdWRlICJzbWFydHJlZmxleC5oIgogCiBzdGF0aWMgaW50IHNyX2NsYXNzM19lbmFibGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYwppbmRleCAxYTc3N2UzLi44ZjY3NGM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KLSNpbmNsdWRlIDxwbGF0L3NtYXJ0cmVmbGV4Lmg+CiAKICNpbmNsdWRlICJwbS5oIgorI2luY2x1ZGUgInNtYXJ0cmVmbGV4LmgiCiAKICNkZWZpbmUgU01BUlRSRUZMRVhfTkFNRV9MRU4JMTYKICNkZWZpbmUgTlZBTFVFX05BTUVfTEVOCQk0MApAQCAtNTQsNiArNTQsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCW5vZGU7CiAJc3RydWN0IG9tYXBfc3JfbnZhbHVlX3RhYmxlCSpudmFsdWVfdGFibGU7CiAJc3RydWN0IHZvbHRhZ2Vkb21haW4JCSp2b2x0ZG07CisJc3RydWN0IGRlbnRyeQkJCSpkYmdfZGlyOwogfTsKIAogLyogc3JfbGlzdCBjb250YWlucyBhbGwgdGhlIGluc3RhbmNlcyBvZiBzbWFydHJlZmxleCBtb2R1bGUgKi8KQEAgLTI2MCw5ICsyNjEsMTEgQEAKIAlpZiAoc3JfY2xhc3MtPmNsYXNzX3R5cGUgPT0gU1JfQ0xBU1MyICYmCiAJCXNyX2NsYXNzLT5ub3RpZnlfZmxhZ3MgJiYgc3JfaW5mby0+aXJxKSB7CiAKLQkJbmFtZSA9IGt6YWxsb2MoU01BUlRSRUZMRVhfTkFNRV9MRU4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJc3RyY3B5KG5hbWUsICJzcl8iKTsKLQkJc3RyY2F0KG5hbWUsIHNyX2luZm8tPnZvbHRkbS0+bmFtZSk7CisJCW5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInNyXyVzIiwgc3JfaW5mby0+dm9sdGRtLT5uYW1lKTsKKwkJaWYgKG5hbWUgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KIAkJcmV0ID0gcmVxdWVzdF9pcnEoc3JfaW5mby0+aXJxLCBzcl9pbnRlcnJ1cHQsCiAJCQkJMCwgbmFtZSwgKHZvaWQgKilzcl9pbmZvKTsKIAkJaWYgKHJldCkKQEAgLTgyMSw3ICs4MjQsNyBAQAogCXN0cnVjdCBvbWFwX3NyICpzcl9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfc3IpLCBHRlBfS0VSTkVMKTsKIAlzdHJ1Y3Qgb21hcF9zcl9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqaXJxOwotCXN0cnVjdCBkZW50cnkgKnZkZF9kYmdfZGlyLCAqZGJnX2RpciwgKm52YWx1ZV9kaXI7CisJc3RydWN0IGRlbnRyeSAqdmRkX2RiZ19kaXIsICpudmFsdWVfZGlyOwogCXN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhOwogCWludCBpLCByZXQgPSAwOwogCkBAIC04OTYsMjQgKzg5OSwyNCBAQAogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKLQlkYmdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzbWFydHJlZmxleCIsIHZkZF9kYmdfZGlyKTsKLQlpZiAoSVNfRVJSKGRiZ19kaXIpKSB7CisJc3JfaW5mby0+ZGJnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic21hcnRyZWZsZXgiLCB2ZGRfZGJnX2Rpcik7CisJaWYgKElTX0VSUihzcl9pbmZvLT5kYmdfZGlyKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIiwKIAkJCV9fZnVuY19fKTsKLQkJcmV0ID0gUFRSX0VSUihkYmdfZGlyKTsKKwkJcmV0ID0gUFRSX0VSUihzcl9pbmZvLT5kYmdfZGlyKTsKIAkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF1dG9jb21wIiwgU19JUlVHTyB8IFNfSVdVU1IsIGRiZ19kaXIsCi0JCQkJKHZvaWQgKilzcl9pbmZvLCAmcG1fc3JfZm9wcyk7Ci0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gzMigiZXJyd2VpZ2h0IiwgU19JUlVHTywgZGJnX2RpciwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b2NvbXAiLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNyX2luZm8tPmRiZ19kaXIsICh2b2lkICopc3JfaW5mbywgJnBtX3NyX2ZvcHMpOworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImVycndlaWdodCIsIFNfSVJVR08sIHNyX2luZm8tPmRiZ19kaXIsCiAJCQkmc3JfaW5mby0+ZXJyX3dlaWdodCk7Ci0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gzMigiZXJybWF4bGltaXQiLCBTX0lSVUdPLCBkYmdfZGlyLAorCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImVycm1heGxpbWl0IiwgU19JUlVHTywgc3JfaW5mby0+ZGJnX2RpciwKIAkJCSZzcl9pbmZvLT5lcnJfbWF4bGltaXQpOwotCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImVycm1pbmxpbWl0IiwgU19JUlVHTywgZGJnX2RpciwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfeDMyKCJlcnJtaW5saW1pdCIsIFNfSVJVR08sIHNyX2luZm8tPmRiZ19kaXIsCiAJCQkmc3JfaW5mby0+ZXJyX21pbmxpbWl0KTsKIAotCW52YWx1ZV9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm52YWx1ZSIsIGRiZ19kaXIpOworCW52YWx1ZV9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm52YWx1ZSIsIHNyX2luZm8tPmRiZ19kaXIpOwogCWlmIChJU19FUlIobnZhbHVlX2RpcikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnkiCiAJCQkiZm9yIG4tdmFsdWVzXG4iLCBfX2Z1bmNfXyk7CkBAIC05NzAsNiArOTczLDggQEAKIAogCWlmIChzcl9pbmZvLT5hdXRvY29tcF9hY3RpdmUpCiAJCXNyX3N0b3BfdmRkYXV0b2NvbXAoc3JfaW5mbyk7CisJaWYgKHNyX2luZm8tPmRiZ19kaXIpCisJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShzcl9pbmZvLT5kYmdfZGlyKTsKIAogCWxpc3RfZGVsKCZzcl9pbmZvLT5ub2RlKTsKIAlpb3VubWFwKHNyX2luZm8tPmJhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zbWFydHJlZmxleC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc21hcnRyZWZsZXguaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5oCmluZGV4IDY1NjhjODguLjVmMzViOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc21hcnRyZWZsZXguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmgKQEAgLTIxLDcgKzIxLDggQEAKICNkZWZpbmUgX19BU01fQVJNX09NQVBfU01BUlRSRUZMRVhfSAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8cGxhdC92b2x0YWdlLmg+CisKKyNpbmNsdWRlICJ2b2x0YWdlLmgiCiAKIC8qCiAgKiBEaWZmZXJlbnQgU21hcnRyZWZsZXggSVBzIHZlcnNpb24uIFRoZSB2MSBpcyB0aGUgNjVubSB2ZXJzaW9uIHVzZWQgaW4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jCmluZGV4IGIxZTBhZjEuLjEwZDNjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYwpAQCAtMjMsOSArMjMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8cGxhdC9zbWFydHJlZmxleC5oPgotI2luY2x1ZGUgPHBsYXQvdm9sdGFnZS5oPgogCisjaW5jbHVkZSAic21hcnRyZWZsZXguaCIKKyNpbmNsdWRlICJ2b2x0YWdlLmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgInBtLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUwppbmRleCAyNTAxMWNhLi42ZjU4NDlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TCkBAIC0zNCw2ICszNCwxMiBAQAogI2luY2x1ZGUgInNkcmMuaCIKICNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgogCisvKgorICogVGhpcyBmaWxlIG5lZWRzIGJlIGJ1aWx0IHVuY29uZGl0aW9uYWxseSBhcyBBUk0gdG8gaW50ZXJvcGVyYXRlIGNvcnJlY3RseQorICogd2l0aCBub24tVGh1bWItMi1jYXBhYmxlIGZpcm13YXJlLgorICovCisJLmFybQorCiAJLnRleHQKIAogLyogcjEgcGFyYW1ldGVycyAqLwpAQCAtMTE3LDI0ICsxMjMsMzYgQEAKIAogCQkJCQlAIHB1bGwgdGhlIGV4dHJhIGFyZ3Mgb2ZmIHRoZSBzdGFjawogCQkJCQlAICBhbmQgc3RvcmUgdGhlbSBpbiBTUkFNCisKKy8qCisgKiBQQy1yZWxhdGl2ZSBzdG9yZXMgYXJlIGRlcHJlY2F0ZWQgaW4gQVJNdjcgYW5kIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW91cgorICogaW4gVGh1bWItMjogdXNlIGEgcjcgYXMgYSBiYXNlIGluc3RlYWQuCisgKiBCZSBjYXJlZnVsIG5vdCB0byBjbG9iYmVyIHI3IHdoZW4gbWFpbnRhaW5nIHRoaXMgZmlsZS4KKyAqLworIFRIVU1CKAlhZHIJcjcsIG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbAkJCSkKKwkubWFjcm8gc3RydGV4dCBSdDpyZXEsIGxhYmVsOnJlcQorIEFSTSgJc3RyCVxSdCwgXGxhYmVsCQkJCQkJKQorIFRIVU1CKAlzdHIJXFJ0LCBbcjcsIFxsYWJlbCAtIG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbF0JKQorCS5lbmRtCisKIAlsZHIJcjQsIFtzcCwgIzUyXQotCXN0ciAgICAgcjQsIG9tYXBfc2RyY19yZnJfY3RybF8wX3ZhbAorCXN0cnRleHQJcjQsIG9tYXBfc2RyY19yZnJfY3RybF8wX3ZhbAogCWxkcglyNCwgW3NwLCAjNTZdCi0Jc3RyICAgICByNCwgb21hcF9zZHJjX2FjdGltX2N0cmxfYV8wX3ZhbAorCXN0cnRleHQJcjQsIG9tYXBfc2RyY19hY3RpbV9jdHJsX2FfMF92YWwKIAlsZHIJcjQsIFtzcCwgIzYwXQotCXN0ciAgICAgcjQsIG9tYXBfc2RyY19hY3RpbV9jdHJsX2JfMF92YWwKKwlzdHJ0ZXh0CXI0LCBvbWFwX3NkcmNfYWN0aW1fY3RybF9iXzBfdmFsCiAJbGRyCXI0LCBbc3AsICM2NF0KLQlzdHIgICAgIHI0LCBvbWFwX3NkcmNfbXJfMF92YWwKKwlzdHJ0ZXh0CXI0LCBvbWFwX3NkcmNfbXJfMF92YWwKIAlsZHIJcjQsIFtzcCwgIzY4XQotCXN0ciAgICAgcjQsIG9tYXBfc2RyY19yZnJfY3RybF8xX3ZhbAorCXN0cnRleHQJcjQsIG9tYXBfc2RyY19yZnJfY3RybF8xX3ZhbAogCWNtcAlyNCwgIzAJCQlAIGlmIFNEUkNfUkZSX0NUUkxfMSBpcyAwLAogCWJlcQlza2lwX2NzMV9wYXJhbXMJCUAgIGRvIG5vdCB1c2UgY3MxIHBhcmFtcwogCWxkcglyNCwgW3NwLCAjNzJdCi0Jc3RyICAgICByNCwgb21hcF9zZHJjX2FjdGltX2N0cmxfYV8xX3ZhbAorCXN0cnRleHQJcjQsIG9tYXBfc2RyY19hY3RpbV9jdHJsX2FfMV92YWwKIAlsZHIJcjQsIFtzcCwgIzc2XQotCXN0ciAgICAgcjQsIG9tYXBfc2RyY19hY3RpbV9jdHJsX2JfMV92YWwKKwlzdHJ0ZXh0CXI0LCBvbWFwX3NkcmNfYWN0aW1fY3RybF9iXzFfdmFsCiAJbGRyCXI0LCBbc3AsICM4MF0KLQlzdHIgICAgIHI0LCBvbWFwX3NkcmNfbXJfMV92YWwKKwlzdHJ0ZXh0CXI0LCBvbWFwX3NkcmNfbXJfMV92YWwKIHNraXBfY3MxX3BhcmFtczoKIAltcmMJcDE1LCAwLCByOCwgYzEsIGMwLCAwCUAgcmVhZCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIxMCwgcjgsICMweDgwMAkJQCBjbGVhciBaLWJpdCwgZGlzYWJsZSBicmFuY2ggcHJlZGljdGlvbgpAQCAtMjcyLDYgKzI5MCw3IEBACiAJbGRyCXIxMiwgW3IxMV0JCUAgcG9zdGVkLXdyaXRlIGJhcnJpZXIgZm9yIFNEUkMKIAlieAlscgogCisJLmFsaWduCiBvbWFwM19zZHJjX3Bvd2VyOgogCS53b3JkIE9NQVAzNFhYX1NEUkNfUkVHQUREUihTRFJDX1BPV0VSKQogb21hcDNfY21fY2xrc2VsMV9wbGw6CkBAIC0zMjAsNiArMzM5LDcgQEAKIAkud29yZCBPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCiBjb3JlX20yX21hc2tfdmFsOgogCS53b3JkIDB4MDdGRkZGRkYKK0VORFBST0Mob21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsKQogCiBFTlRSWShvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGxfc3opCiAJLndvcmQJLiAtIG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCmluZGV4IDBmYzU1MGUuLjNiOWNmODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKQEAgLTQwLDEwICs0MCwxMSBAQAogI2luY2x1ZGUgPHBsYXQvZG10aW1lci5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbHRpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3NjaGVkX2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KIAogI2luY2x1ZGUgInRpbWVyLWdwLmgiCiAKLSNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogCiAvKiBNQVhfR1BUSU1FUl9JRDogbnVtYmVyIG9mIEdQVElNRVJzIG9uIHRoZSBjaGlwICovCiAjZGVmaW5lIE1BWF9HUFRJTUVSX0lECQkxMgpAQCAtMTMzLDkgKzEzNCwxMyBAQAogewogCXUzMiB0aWNrX3JhdGU7CiAJaW50IHNyYzsKKwljaGFyIGNsb2NrZXZlbnRfaHdtb2RfbmFtZVs4XTsgLyogOCA9IHNpemVvZigidGltZXJYWDAiKSAqLwogCiAJaW5pdGVkID0gMTsKIAorCXNwcmludGYoY2xvY2tldmVudF9od21vZF9uYW1lLCAidGltZXIlZCIsIGdwdGltZXJfaWQpOworCW9tYXBfaHdtb2Rfc2V0dXBfb25lKGNsb2NrZXZlbnRfaHdtb2RfbmFtZSk7CisKIAlncHRpbWVyID0gb21hcF9kbV90aW1lcl9yZXF1ZXN0X3NwZWNpZmljKGdwdGltZXJfaWQpOwogCUJVR19PTihncHRpbWVyID09IE5VTEwpOwogCWdwdGltZXJfd2FrZXVwID0gZ3B0aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYwppbmRleCAyNDFmYzk0Li4zNTU1OWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItbXVzYi5jCkBAIC0zMCwxMTggKzMwLDExIEBACiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9hbTM1eHguaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgotI2luY2x1ZGUgImNvbnRyb2wuaCIKKyNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CisjaW5jbHVkZSAibXV4LmgiCiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9PTUFQMlBMVVMpIHx8IGRlZmluZWQgKENPTkZJR19VU0JfTVVTQl9BTTM1WCkKIAotc3RhdGljIHZvaWQgYW0zNXhfbXVzYl9yZXNldCh2b2lkKQotewotCXUzMglyZWd2YWw7Ci0KLQkvKiBSZXNldCB0aGUgbXVzYiBpbnRlcmZhY2UgKi8KLQlyZWd2YWwgPSBvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfSVBfU1dfUkVTRVQpOwotCi0JcmVndmFsIHw9IEFNMzVYWF9VU0JPVEdTU19TV19SU1Q7Ci0Jb21hcF9jdHJsX3dyaXRlbChyZWd2YWwsIEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUKTsKLQotCXJlZ3ZhbCAmPSB+QU0zNVhYX1VTQk9UR1NTX1NXX1JTVDsKLQlvbWFwX2N0cmxfd3JpdGVsKHJlZ3ZhbCwgQU0zNVhYX0NPTlRST0xfSVBfU1dfUkVTRVQpOwotCi0JcmVndmFsID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUKTsKLX0KLQotc3RhdGljIHZvaWQgYW0zNXhfbXVzYl9waHlfcG93ZXIodTggb24pCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwKTsKLQl1MzIgZGV2Y29uZjI7Ci0KLQlpZiAob24pIHsKLQkJLyoKLQkJICogU3RhcnQgdGhlIG9uLWNoaXAgUEhZIGFuZCBpdHMgUExMLgotCQkgKi8KLQkJZGV2Y29uZjIgPSBvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOwotCi0JCWRldmNvbmYyICY9IH4oQ09ORjJfUkVTRVQgfCBDT05GMl9QSFlQV1JETiB8IENPTkYyX09UR1BXUkROKTsKLQkJZGV2Y29uZjIgfD0gQ09ORjJfUEhZX1BMTE9OOwotCi0JCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKLQotCQlwcl9pbmZvKEtFUk5fSU5GTyAiV2FpdGluZyBmb3IgUEhZIGNsb2NrIGdvb2QuLi5cbiIpOwotCQl3aGlsZSAoIShvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpCi0JCQkJJiBDT05GMl9QSFlDTEtHRCkpIHsKLQkJCWNwdV9yZWxheCgpOwotCi0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJCXByX2VycihLRVJOX0VSUiAibXVzYiBQSFkgY2xvY2sgZ29vZCB0aW1lZCBvdXRcbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogUG93ZXIgZG93biB0aGUgb24tY2hpcCBQSFkuCi0JCSAqLwotCQlkZXZjb25mMiA9IG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9ERVZDT05GMik7Ci0KLQkJZGV2Y29uZjIgJj0gfkNPTkYyX1BIWV9QTExPTjsKLQkJZGV2Y29uZjIgfD0gIENPTkYyX1BIWVBXUkROIHwgQ09ORjJfT1RHUFdSRE47Ci0JCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGFtMzV4X211c2JfY2xlYXJfaXJxKHZvaWQpCi17Ci0JdTMyIHJlZ3ZhbDsKLQotCXJlZ3ZhbCA9IG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUik7Ci0JcmVndmFsIHw9IEFNMzVYWF9VU0JPVEdTU19JTlRfQ0xSOwotCW9tYXBfY3RybF93cml0ZWwocmVndmFsLCBBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUik7Ci0JcmVndmFsID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0xWTF9JTlRSX0NMRUFSKTsKLX0KLQotc3RhdGljIHZvaWQgYW0zNXhfbXVzYl9zZXRfbW9kZSh1OCBtdXNiX21vZGUpCi17Ci0JdTMyIGRldmNvbmYyID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKLQotCWRldmNvbmYyICY9IH5DT05GMl9PVEdNT0RFOwotCXN3aXRjaCAobXVzYl9tb2RlKSB7Ci0jaWZkZWYJQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECi0JY2FzZSBNVVNCX0hPU1Q6CQkvKiBGb3JjZSBWQlVTIHZhbGlkLCBJRCA9IDAgKi8KLQkJZGV2Y29uZjIgfD0gQ09ORjJfRk9SQ0VfSE9TVDsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKLQljYXNlIE1VU0JfUEVSSVBIRVJBTDoJLyogRm9yY2UgVkJVUyB2YWxpZCwgSUQgPSAxICovCi0JCWRldmNvbmYyIHw9IENPTkYyX0ZPUkNFX0RFVklDRTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCi0JY2FzZSBNVVNCX09URzoJCS8qIERvbid0IG92ZXJyaWRlIHRoZSBWQlVTL0lEIGNvbXBhcmF0b3JzICovCi0JCWRldmNvbmYyIHw9IENPTkYyX05PX09WRVJSSURFOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXByX2luZm8oS0VSTl9JTkZPICJVbnN1cHBvcnRlZCBtb2RlICV1XG4iLCBtdXNiX21vZGUpOwotCX0KLQotCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdXNiX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsgLyogc3RhcnQgYW5kIGVuZCBzZXQgZHluYW1pY2FsbHkgKi8KLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CS8qIGdlbmVyYWwgSVJRICovCi0JCS5zdGFydAk9IElOVF8yNDNYX0hTX1VTQl9NQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JCS5uYW1lCT0gIm1jIiwKLQl9LAotCVsyXSA9IHsJLyogRE1BIElSUSAqLwotCQkuc3RhcnQJPSBJTlRfMjQzWF9IU19VU0JfRE1BLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQkJLm5hbWUJPSAiZG1hIiwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfY29uZmlnIG11c2JfY29uZmlnID0gewogCS5tdWx0aXBvaW50CT0gMSwKIAkuZHluX2ZpZm8JPSAxLApAQCAtMTY5LDM4ICs2Miw2NSBAQAogCiBzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG11c2JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtdXNiLW9tYXAyNDMwIiwKLQkuaWQJCT0gLTEsCi0JLmRldiA9IHsKLQkJLmRtYV9tYXNrCQk9ICZtdXNiX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCS5wbGF0Zm9ybV9kYXRhCQk9ICZtdXNiX3BsYXQsCitzdGF0aWMgc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgb21hcF9tdXNiX2xhdGVuY3lbXSA9IHsKKwl7CisJCS5kZWFjdGl2YXRlX2Z1bmMJPSBvbWFwX2RldmljZV9pZGxlX2h3bW9kcywKKwkJLmFjdGl2YXRlX2Z1bmMJCT0gb21hcF9kZXZpY2VfZW5hYmxlX2h3bW9kcywKKwkJLmZsYWdzCQkJPSBPTUFQX0RFVklDRV9MQVRFTkNZX0FVVE9fQURKVVNULAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG11c2JfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBtdXNiX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIHVzYl9tdXNiX211eF9pbml0KHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSAqYm9hcmRfZGF0YSkKK3sKKwlzd2l0Y2ggKGJvYXJkX2RhdGEtPmludGVyZmFjZV90eXBlKSB7CisJY2FzZSBNVVNCX0lOVEVSRkFDRV9VVE1JOgorCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYTBfb3RnX2RwIiwgT01BUF9QSU5fSU5QVVQpOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYTBfb3RnX2RtIiwgT01BUF9QSU5fSU5QVVQpOworCQlicmVhazsKKwljYXNlIE1VU0JfSU5URVJGQUNFX1VMUEk6CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JhMF91bHBpcGh5X2NsayIsCisJCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JhMF91bHBpcGh5X3N0cCIsCisJCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JhMF91bHBpcGh5X2RpciIsCisJCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JhMF91bHBpcGh5X254dCIsCisJCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JhMF91bHBpcGh5X2RhdDAiLAorCQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYTBfdWxwaXBoeV9kYXQxIiwKKwkJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmEwX3VscGlwaHlfZGF0MiIsCisJCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JhMF91bHBpcGh5X2RhdDMiLAorCQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYTBfdWxwaXBoeV9kYXQ0IiwKKwkJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmEwX3VscGlwaHlfZGF0NSIsCisJCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JhMF91bHBpcGh5X2RhdDYiLAorCQkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYTBfdWxwaXBoeV9kYXQ3IiwKKwkJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCiB2b2lkIF9faW5pdCB1c2JfbXVzYl9pbml0KHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSAqYm9hcmRfZGF0YSkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNDN4KCkpIHsKLQkJbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgPSBPTUFQMjQzWF9IU19CQVNFOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNTE3KCkgfHwgY3B1X2lzX29tYXAzNTA1KCkpIHsKLQkJbXVzYl9kZXZpY2UubmFtZSA9ICJtdXNiLWFtMzV4IjsKLQkJbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgPSBBTTM1WFhfSVBTU19VU0JPVEdTU19CQVNFOwotCQltdXNiX3Jlc291cmNlc1sxXS5zdGFydCA9IElOVF8zNVhYX1VTQk9UR19JUlE7Ci0JCWJvYXJkX2RhdGEtPnNldF9waHlfcG93ZXIgPSBhbTM1eF9tdXNiX3BoeV9wb3dlcjsKLQkJYm9hcmRfZGF0YS0+Y2xlYXJfaXJxID0gYW0zNXhfbXVzYl9jbGVhcl9pcnE7Ci0JCWJvYXJkX2RhdGEtPnNldF9tb2RlID0gYW0zNXhfbXVzYl9zZXRfbW9kZTsKLQkJYm9hcmRfZGF0YS0+cmVzZXQgPSBhbTM1eF9tdXNiX3Jlc2V0OwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgPSBPTUFQMzRYWF9IU1VTQl9PVEdfQkFTRTsKKwlzdHJ1Y3Qgb21hcF9od21vZAkJKm9oOworCXN0cnVjdCBvbWFwX2RldmljZQkJKm9kOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCWludAkJCQlidXNfaWQgPSAtMTsKKwljb25zdCBjaGFyCQkJKm9oX25hbWUsICpuYW1lOworCisJaWYgKGNwdV9pc19vbWFwMzUxNygpIHx8IGNwdV9pc19vbWFwMzUwNSgpKSB7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVA0NFhYX0hTVVNCX09UR19CQVNFOwotCQltdXNiX3Jlc291cmNlc1sxXS5zdGFydCA9IE9NQVA0NFhYX0lSUV9IU19VU0JfTUNfTjsKLQkJbXVzYl9yZXNvdXJjZXNbMl0uc3RhcnQgPSBPTUFQNDRYWF9JUlFfSFNfVVNCX0RNQV9OOworCQl1c2JfbXVzYl9tdXhfaW5pdChib2FyZF9kYXRhKTsKIAl9Ci0JbXVzYl9yZXNvdXJjZXNbMF0uZW5kID0gbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgKyBTWl80SyAtIDE7CiAKIAkvKgogCSAqIFJFVklTSVQ6IFRoaXMgbGluZSBjYW4gYmUgcmVtb3ZlZCBvbmNlIGFsbCB0aGUgcGxhdGZvcm1zIHVzaW5nCkBAIC0yMTIsMTIgKzEzMiwzOCBAQAogCW11c2JfcGxhdC5tb2RlID0gYm9hcmRfZGF0YS0+bW9kZTsKIAltdXNiX3BsYXQuZXh0dmJ1cyA9IGJvYXJkX2RhdGEtPmV4dHZidXM7CiAKLQlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdXNiX2RldmljZSkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBIUy1VU0IgKE1VU0IpIGRldmljZVxuIik7Ci0KIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCiAJCW9tYXA0NDMwX3BoeV9pbml0KGRldik7CiAKKwlpZiAoY3B1X2lzX29tYXAzNTE3KCkgfHwgY3B1X2lzX29tYXAzNTA1KCkpIHsKKwkJb2hfbmFtZSA9ICJhbTM1eF9vdGdfaHMiOworCQluYW1lID0gIm11c2ItYW0zNXgiOworCX0gZWxzZSB7CisJCW9oX25hbWUgPSAidXNiX290Z19ocyI7CisJCW5hbWUgPSAibXVzYi1vbWFwMjQzMCI7CisJfQorCisJb2ggPSBvbWFwX2h3bW9kX2xvb2t1cChvaF9uYW1lKTsKKwlpZiAoIW9oKSB7CisJCXByX2VycigiQ291bGQgbm90IGxvb2sgdXAgJXNcbiIsIG9oX25hbWUpOworCQlyZXR1cm47CisJfQorCisJb2QgPSBvbWFwX2RldmljZV9idWlsZChuYW1lLCBidXNfaWQsIG9oLCAmbXVzYl9wbGF0LAorCQkJICAgICAgIHNpemVvZihtdXNiX3BsYXQpLCBvbWFwX211c2JfbGF0ZW5jeSwKKwkJCSAgICAgICBBUlJBWV9TSVpFKG9tYXBfbXVzYl9sYXRlbmN5KSwgZmFsc2UpOworCWlmIChJU19FUlIob2QpKSB7CisJCXByX2VycigiQ291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlcyAlc1xuIiwKKwkJCQkJCW5hbWUsIG9oX25hbWUpOworCQlyZXR1cm47CisJfQorCisJcGRldiA9ICZvZC0+cGRldjsKKwlkZXYgPSAmcGRldi0+ZGV2OworCWdldF9kZXZpY2UoZGV2KTsKKwlkZXYtPmRtYV9tYXNrID0gJm11c2JfZG1hbWFzazsKKwlkZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gbXVzYl9kbWFtYXNrOworCXB1dF9kZXZpY2UoZGV2KTsKIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdmMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvdmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzc2Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92Yy5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBPTUFQMy80IFZvbHRhZ2UgQ29udHJvbGxlciAoVkMpIHN0cnVjdHVyZSBhbmQgbWFjcm8gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgorICogTGVzbHkgQSBNIDx4MDA4MDk3MEB0aS5jb20+CisgKiBUaGFyYSBHb3BpbmF0aCA8dGhhcmFAdGkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgorICogS2FsbGUgSm9raW5pZW1pCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfVkNfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfVkNfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKy8qKgorICogc3RydWN0IG9tYXBfdmNfY29tbW9uX2RhdGEgLSBwZXItVkMgcmVnaXN0ZXIvYml0ZmllbGQgZGF0YQorICogQGNtZF9vbl9tYXNrOiBPTiBiaXRtYXNrIGluIFBSTV9WQ19DTURfVkFMKiByZWdpc3RlcgorICogQHZhbGlkOiBWQUxJRCBiaXRtYXNrIGluIFBSTV9WQ19CWVBBU1NfVkFMIHJlZ2lzdGVyCisgKiBAc21wc19zYV9yZWc6IE9mZnNldCBvZiBQUk1fVkNfU01QU19TQSByZWcgZnJvbSBQUk0gc3RhcnQKKyAqIEBzbXBzX3ZvbHJhX3JlZzogT2Zmc2V0IG9mIFBSTV9WQ19TTVBTX1ZPTF9SQSByZWcgZnJvbSBQUk0gc3RhcnQKKyAqIEBieXBhc3NfdmFsX3JlZzogT2Zmc2V0IG9mIFBSTV9WQ19CWVBBU1NfVkFMIHJlZyBmcm9tIFBSTSBzdGFydAorICogQGRhdGFfc2hpZnQ6IERBVEEgZmllbGQgc2hpZnQgaW4gUFJNX1ZDX0JZUEFTU19WQUwgcmVnaXN0ZXIKKyAqIEBzbGF2ZWFkZHJfc2hpZnQ6IFNMQVZFQUREUiBmaWVsZCBzaGlmdCBpbiBQUk1fVkNfQllQQVNTX1ZBTCByZWdpc3RlcgorICogQHJlZ2FkZHJfc2hpZnQ6IFJFR0FERFIgZmllbGQgc2hpZnQgaW4gUFJNX1ZDX0JZUEFTU19WQUwgcmVnaXN0ZXIKKyAqIEBjbWRfb25fc2hpZnQ6IE9OIGZpZWxkIHNoaWZ0IGluIFBSTV9WQ19DTURfVkFMXyogcmVnaXN0ZXIKKyAqIEBjbWRfb25scF9zaGlmdDogT05MUCBmaWVsZCBzaGlmdCBpbiBQUk1fVkNfQ01EX1ZBTF8qIHJlZ2lzdGVyCisgKiBAY21kX3JldF9zaGlmdDogUkVUIGZpZWxkIHNoaWZ0IGluIFBSTV9WQ19DTURfVkFMXyogcmVnaXN0ZXIKKyAqIEBjbWRfb2ZmX3NoaWZ0OiBPRkYgZmllbGQgc2hpZnQgaW4gUFJNX1ZDX0NNRF9WQUxfKiByZWdpc3RlcgorICoKKyAqIFhYWCBPbmUgb2YgY21kX29uX21hc2sgYW5kIGNtZF9vbl9zaGlmdCBhcmUgbm90IG5lZWRlZAorICogWFhYIFZBTElEIHNob3VsZCBwcm9iYWJseSBiZSBhIHNoaWZ0LCBub3QgYSBtYXNrCisgKi8KK3N0cnVjdCBvbWFwX3ZjX2NvbW1vbl9kYXRhIHsKKwl1MzIgY21kX29uX21hc2s7CisJdTMyIHZhbGlkOworCXU4IHNtcHNfc2FfcmVnOworCXU4IHNtcHNfdm9scmFfcmVnOworCXU4IGJ5cGFzc192YWxfcmVnOworCXU4IGRhdGFfc2hpZnQ7CisJdTggc2xhdmVhZGRyX3NoaWZ0OworCXU4IHJlZ2FkZHJfc2hpZnQ7CisJdTggY21kX29uX3NoaWZ0OworCXU4IGNtZF9vbmxwX3NoaWZ0OworCXU4IGNtZF9yZXRfc2hpZnQ7CisJdTggY21kX29mZl9zaGlmdDsKK307CisKKy8qKgorICogc3RydWN0IG9tYXBfdmNfaW5zdGFuY2VfZGF0YSAtIFZDIHBlci1pbnN0YW5jZSBkYXRhCisgKiBAdmNfY29tbW9uOiBwb2ludGVyIHRvIFZDIGNvbW1vbiBkYXRhIGZvciB0aGlzIHBsYXRmb3JtCisgKiBAc21wc19zYV9tYXNrOiBTQSogYml0bWFzayBpbiB0aGUgUFJNX1ZDX1NNUFNfU0EgcmVnaXN0ZXIKKyAqIEBzbXBzX3ZvbHJhX21hc2s6IFZPTFJBKiBiaXRtYXNrIGluIHRoZSBQUk1fVkNfVk9MX1JBIHJlZ2lzdGVyCisgKiBAc21wc19zYV9zaGlmdDogU0EqIGZpZWxkIHNoaWZ0IGluIHRoZSBQUk1fVkNfU01QU19TQSByZWdpc3RlcgorICogQHNtcHNfdm9scmFfc2hpZnQ6IFZPTFJBKiBmaWVsZCBzaGlmdCBpbiB0aGUgUFJNX1ZDX1ZPTF9SQSByZWdpc3RlcgorICoKKyAqIFhYWCBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCBhICpfbWFzayBhbmQgYSAqX3NoaWZ0IC0KKyAqICAgICByZW1vdmUgb25lCisgKi8KK3N0cnVjdCBvbWFwX3ZjX2luc3RhbmNlX2RhdGEgeworCWNvbnN0IHN0cnVjdCBvbWFwX3ZjX2NvbW1vbl9kYXRhICp2Y19jb21tb247CisJdTMyIHNtcHNfc2FfbWFzazsKKwl1MzIgc21wc192b2xyYV9tYXNrOworCXU4IGNtZHZhbF9yZWc7CisJdTggc21wc19zYV9zaGlmdDsKKwl1OCBzbXBzX3ZvbHJhX3NoaWZ0OworfTsKKworZXh0ZXJuIHN0cnVjdCBvbWFwX3ZjX2luc3RhbmNlX2RhdGEgb21hcDNfdmMxX2RhdGE7CitleHRlcm4gc3RydWN0IG9tYXBfdmNfaW5zdGFuY2VfZGF0YSBvbWFwM192YzJfZGF0YTsKKworZXh0ZXJuIHN0cnVjdCBvbWFwX3ZjX2luc3RhbmNlX2RhdGEgb21hcDRfdmNfbXB1X2RhdGE7CitleHRlcm4gc3RydWN0IG9tYXBfdmNfaW5zdGFuY2VfZGF0YSBvbWFwNF92Y19pdmFfZGF0YTsKK2V4dGVybiBzdHJ1Y3Qgb21hcF92Y19pbnN0YW5jZV9kYXRhIG9tYXA0X3ZjX2NvcmVfZGF0YTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdmMzeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdmMzeHh4X2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzdkYzRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92YzN4eHhfZGF0YS5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBPTUFQMyBWb2x0YWdlIENvbnRyb2xsZXIgKFZDKSBkYXRhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KKyAqIExlc2x5IEEgTSA8eDAwODA5NzBAdGkuY29tPgorICogVGhhcmEgR29waW5hdGggPHRoYXJhQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24KKyAqIEthbGxlIEpva2luaWVtaQorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAidm9sdGFnZS5oIgorCisjaW5jbHVkZSAidmMuaCIKKworLyoKKyAqIFZDIGRhdGEgY29tbW9uIHRvIDM0eHgvMzZ4eCBjaGlwcworICogWFhYIFRoaXMgc3R1ZmYgcHJlc3VtYWJseSBiZWxvbmdzIGluIHRoZSB2YzN4eHguYyBvciB2Yy5jIGZpbGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF92Y19jb21tb25fZGF0YSBvbWFwM192Y19jb21tb24gPSB7CisJLnNtcHNfc2FfcmVnCSA9IE9NQVAzX1BSTV9WQ19TTVBTX1NBX09GRlNFVCwKKwkuc21wc192b2xyYV9yZWcJID0gT01BUDNfUFJNX1ZDX1NNUFNfVk9MX1JBX09GRlNFVCwKKwkuYnlwYXNzX3ZhbF9yZWcJID0gT01BUDNfUFJNX1ZDX0JZUEFTU19WQUxfT0ZGU0VULAorCS5kYXRhX3NoaWZ0CSA9IE9NQVAzNDMwX0RBVEFfU0hJRlQsCisJLnNsYXZlYWRkcl9zaGlmdCA9IE9NQVAzNDMwX1NMQVZFQUREUl9TSElGVCwKKwkucmVnYWRkcl9zaGlmdAkgPSBPTUFQMzQzMF9SRUdBRERSX1NISUZULAorCS52YWxpZAkJID0gT01BUDM0MzBfVkFMSURfTUFTSywKKwkuY21kX29uX3NoaWZ0CSA9IE9NQVAzNDMwX1ZDX0NNRF9PTl9TSElGVCwKKwkuY21kX29uX21hc2sJID0gT01BUDM0MzBfVkNfQ01EX09OX01BU0ssCisJLmNtZF9vbmxwX3NoaWZ0CSA9IE9NQVAzNDMwX1ZDX0NNRF9PTkxQX1NISUZULAorCS5jbWRfcmV0X3NoaWZ0CSA9IE9NQVAzNDMwX1ZDX0NNRF9SRVRfU0hJRlQsCisJLmNtZF9vZmZfc2hpZnQJID0gT01BUDM0MzBfVkNfQ01EX09GRl9TSElGVCwKK307CisKK3N0cnVjdCBvbWFwX3ZjX2luc3RhbmNlX2RhdGEgb21hcDNfdmMxX2RhdGEgPSB7CisJLnZjX2NvbW1vbiA9ICZvbWFwM192Y19jb21tb24sCisJLmNtZHZhbF9yZWcgPSBPTUFQM19QUk1fVkNfQ01EX1ZBTF8wX09GRlNFVCwKKwkuc21wc19zYV9zaGlmdCA9IE9NQVAzNDMwX1BSTV9WQ19TTVBTX1NBX1NBMF9TSElGVCwKKwkuc21wc19zYV9tYXNrID0gT01BUDM0MzBfUFJNX1ZDX1NNUFNfU0FfU0EwX01BU0ssCisJLnNtcHNfdm9scmFfc2hpZnQgPSBPTUFQMzQzMF9WT0xSQTBfU0hJRlQsCisJLnNtcHNfdm9scmFfbWFzayA9IE9NQVAzNDMwX1ZPTFJBMF9NQVNLLAorfTsKKworc3RydWN0IG9tYXBfdmNfaW5zdGFuY2VfZGF0YSBvbWFwM192YzJfZGF0YSA9IHsKKwkudmNfY29tbW9uID0gJm9tYXAzX3ZjX2NvbW1vbiwKKwkuY21kdmFsX3JlZyA9IE9NQVAzX1BSTV9WQ19DTURfVkFMXzFfT0ZGU0VULAorCS5zbXBzX3NhX3NoaWZ0ID0gT01BUDM0MzBfUFJNX1ZDX1NNUFNfU0FfU0ExX1NISUZULAorCS5zbXBzX3NhX21hc2sgPSBPTUFQMzQzMF9QUk1fVkNfU01QU19TQV9TQTFfTUFTSywKKwkuc21wc192b2xyYV9zaGlmdCA9IE9NQVAzNDMwX1ZPTFJBMV9TSElGVCwKKwkuc21wc192b2xyYV9tYXNrID0gT01BUDM0MzBfVk9MUkExX01BU0ssCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92YzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92YzQ0eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OGRhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZjNDR4eF9kYXRhLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIE9NQVA0IFZvbHRhZ2UgQ29udHJvbGxlciAoVkMpIGRhdGEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgorICogTGVzbHkgQSBNIDx4MDA4MDk3MEB0aS5jb20+CisgKiBUaGFyYSBHb3BpbmF0aCA8dGhhcmFAdGkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgorICogS2FsbGUgSm9raW5pZW1pCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKworI2luY2x1ZGUgInBybTQ0eHguaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCisjaW5jbHVkZSAidm9sdGFnZS5oIgorCisjaW5jbHVkZSAidmMuaCIKKworLyoKKyAqIFZDIGRhdGEgY29tbW9uIHRvIDQ0eHggY2hpcHMKKyAqIFhYWCBUaGlzIHN0dWZmIHByZXN1bWFibHkgYmVsb25ncyBpbiB0aGUgdmMzeHh4LmMgb3IgdmMuYyBmaWxlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfdmNfY29tbW9uX2RhdGEgb21hcDRfdmNfY29tbW9uID0geworCS5zbXBzX3NhX3JlZyA9IE9NQVA0X1BSTV9WQ19TTVBTX1NBX09GRlNFVCwKKwkuc21wc192b2xyYV9yZWcgPSBPTUFQNF9QUk1fVkNfVkFMX1NNUFNfUkFfVk9MX09GRlNFVCwKKwkuYnlwYXNzX3ZhbF9yZWcgPSBPTUFQNF9QUk1fVkNfVkFMX0JZUEFTU19PRkZTRVQsCisJLmRhdGFfc2hpZnQgPSBPTUFQNDQzMF9EQVRBX1NISUZULAorCS5zbGF2ZWFkZHJfc2hpZnQgPSBPTUFQNDQzMF9TTEFWRUFERFJfU0hJRlQsCisJLnJlZ2FkZHJfc2hpZnQgPSBPTUFQNDQzMF9SRUdBRERSX1NISUZULAorCS52YWxpZCA9IE9NQVA0NDMwX1ZBTElEX01BU0ssCisJLmNtZF9vbl9zaGlmdCA9IE9NQVA0NDMwX09OX1NISUZULAorCS5jbWRfb25fbWFzayA9IE9NQVA0NDMwX09OX01BU0ssCisJLmNtZF9vbmxwX3NoaWZ0ID0gT01BUDQ0MzBfT05MUF9TSElGVCwKKwkuY21kX3JldF9zaGlmdCA9IE9NQVA0NDMwX1JFVF9TSElGVCwKKwkuY21kX29mZl9zaGlmdCA9IE9NQVA0NDMwX09GRl9TSElGVCwKK307CisKKy8qIFZDIGluc3RhbmNlIGRhdGEgZm9yIGVhY2ggY29udHJvbGxhYmxlIHZvbHRhZ2UgbGluZSAqLworc3RydWN0IG9tYXBfdmNfaW5zdGFuY2VfZGF0YSBvbWFwNF92Y19tcHVfZGF0YSA9IHsKKwkudmNfY29tbW9uID0gJm9tYXA0X3ZjX2NvbW1vbiwKKwkuY21kdmFsX3JlZyA9IE9NQVA0X1BSTV9WQ19WQUxfQ01EX1ZERF9NUFVfTF9PRkZTRVQsCisJLnNtcHNfc2Ffc2hpZnQgPSBPTUFQNDQzMF9TQV9WRERfTVBVX0xfUFJNX1ZDX1NNUFNfU0FfU0hJRlQsCisJLnNtcHNfc2FfbWFzayA9IE9NQVA0NDMwX1NBX1ZERF9NUFVfTF9QUk1fVkNfU01QU19TQV9NQVNLLAorCS5zbXBzX3ZvbHJhX3NoaWZ0ID0gT01BUDQ0MzBfVk9MUkFfVkREX01QVV9MX1NISUZULAorCS5zbXBzX3ZvbHJhX21hc2sgPSBPTUFQNDQzMF9WT0xSQV9WRERfTVBVX0xfTUFTSywKK307CisKK3N0cnVjdCBvbWFwX3ZjX2luc3RhbmNlX2RhdGEgb21hcDRfdmNfaXZhX2RhdGEgPSB7CisJLnZjX2NvbW1vbiA9ICZvbWFwNF92Y19jb21tb24sCisJLmNtZHZhbF9yZWcgPSBPTUFQNF9QUk1fVkNfVkFMX0NNRF9WRERfSVZBX0xfT0ZGU0VULAorCS5zbXBzX3NhX3NoaWZ0ID0gT01BUDQ0MzBfU0FfVkREX0lWQV9MX1BSTV9WQ19TTVBTX1NBX1NISUZULAorCS5zbXBzX3NhX21hc2sgPSBPTUFQNDQzMF9TQV9WRERfSVZBX0xfUFJNX1ZDX1NNUFNfU0FfTUFTSywKKwkuc21wc192b2xyYV9zaGlmdCA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9JVkFfTF9TSElGVCwKKwkuc21wc192b2xyYV9tYXNrID0gT01BUDQ0MzBfVk9MUkFfVkREX0lWQV9MX01BU0ssCit9OworCitzdHJ1Y3Qgb21hcF92Y19pbnN0YW5jZV9kYXRhIG9tYXA0X3ZjX2NvcmVfZGF0YSA9IHsKKwkudmNfY29tbW9uID0gJm9tYXA0X3ZjX2NvbW1vbiwKKwkuY21kdmFsX3JlZyA9IE9NQVA0X1BSTV9WQ19WQUxfQ01EX1ZERF9DT1JFX0xfT0ZGU0VULAorCS5zbXBzX3NhX3NoaWZ0ID0gT01BUDQ0MzBfU0FfVkREX0NPUkVfTF8wXzZfU0hJRlQsCisJLnNtcHNfc2FfbWFzayA9IE9NQVA0NDMwX1NBX1ZERF9DT1JFX0xfMF82X01BU0ssCisJLnNtcHNfdm9scmFfc2hpZnQgPSBPTUFQNDQzMF9WT0xSQV9WRERfQ09SRV9MX1NISUZULAorCS5zbXBzX3ZvbHJhX21hc2sgPSBPTUFQNDQzMF9WT0xSQV9WRERfQ09SRV9MX01BU0ssCit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZS5jCmluZGV4IDEyYmU1MjUuLmM2ZmFjZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZS5jCkBAIC03LDggKzcsOSBAQAogICogUmFqZW5kcmEgTmF5YWsgPHJuYXlha0B0aS5jb20+CiAgKiBMZXNseSBBIE0gPHgwMDgwOTcwQHRpLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgogICogS2FsbGUgSm9raW5pZW1pCisgKiBQYXVsIFdhbG1zbGV5CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCiAgKiBUaGFyYSBHb3BpbmF0aCA8dGhhcmFAdGkuY29tPgpAQCAtMjYsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+Ci0jaW5jbHVkZSA8cGxhdC92b2x0YWdlLmg+CiAKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgpAQCAtMzUsMjg0ICszNSwzMCBAQAogI2luY2x1ZGUgInBybWluc3Q0NHh4LmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgogCi0jZGVmaW5lIFZQX0lETEVfVElNRU9VVAkJMjAwCi0jZGVmaW5lIFZQX1RSQU5YRE9ORV9USU1FT1VUCTMwMAorI2luY2x1ZGUgInZvbHRhZ2UuaCIKKworI2luY2x1ZGUgInZjLmgiCisjaW5jbHVkZSAidnAuaCIKKwogI2RlZmluZSBWT0xUQUdFX0RJUl9TSVpFCTE2CiAKLS8qIFZvbHRhZ2UgcHJvY2Vzc29yIHJlZ2lzdGVyIG9mZnNldHMgKi8KLXN0cnVjdCB2cF9yZWdfb2ZmcyB7Ci0JdTggdnBjb25maWc7Ci0JdTggdnN0ZXBtaW47Ci0JdTggdnN0ZXBtYXg7Ci0JdTggdmxpbWl0dG87Ci0JdTggdnN0YXR1czsKLQl1OCB2b2x0YWdlOwotfTsKIAotLyogVm9sdGFnZSBQcm9jZXNzb3IgYml0IGZpZWxkIHZhbHVlcywgc2hpZnRzIGFuZCBtYXNrcyAqLwotc3RydWN0IHZwX3JlZ192YWwgewotCS8qIFBSTSBtb2R1bGUgKi8KLQl1MTYgcHJtX21vZDsKLQkvKiBWUHhfVlBDT05GSUcgKi8KLQl1MzIgdnBjb25maWdfZXJyb3JvZmZzZXQ7Ci0JdTE2IHZwY29uZmlnX2Vycm9yZ2FpbjsKLQl1MzIgdnBjb25maWdfZXJyb3JnYWluX21hc2s7Ci0JdTggdnBjb25maWdfZXJyb3JnYWluX3NoaWZ0OwotCXUzMiB2cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrOwotCXU4IHZwY29uZmlnX2luaXR2b2x0YWdlX3NoaWZ0OwotCXUzMiB2cGNvbmZpZ190aW1lb3V0ZW47Ci0JdTMyIHZwY29uZmlnX2luaXR2ZGQ7Ci0JdTMyIHZwY29uZmlnX2ZvcmNldXBkYXRlOwotCXUzMiB2cGNvbmZpZ192cGVuYWJsZTsKLQkvKiBWUHhfVlNURVBNSU4gKi8KLQl1OCB2c3RlcG1pbl9zdGVwbWluOwotCXUxNiB2c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW47Ci0JdTggdnN0ZXBtaW5fc3RlcG1pbl9zaGlmdDsKLQl1OCB2c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW5fc2hpZnQ7Ci0JLyogVlB4X1ZTVEVQTUFYICovCi0JdTggdnN0ZXBtYXhfc3RlcG1heDsKLQl1MTYgdnN0ZXBtYXhfc21wc3dhaXR0aW1lbWF4OwotCXU4IHZzdGVwbWF4X3N0ZXBtYXhfc2hpZnQ7Ci0JdTggdnN0ZXBtYXhfc21wc3dhaXR0aW1lbWF4X3NoaWZ0OwotCS8qIFZQeF9WTElNSVRUTyAqLwotCXU4IHZsaW1pdHRvX3ZkZG1pbjsKLQl1OCB2bGltaXR0b192ZGRtYXg7Ci0JdTE2IHZsaW1pdHRvX3RpbWVvdXQ7Ci0JdTggdmxpbWl0dG9fdmRkbWluX3NoaWZ0OwotCXU4IHZsaW1pdHRvX3ZkZG1heF9zaGlmdDsKLQl1OCB2bGltaXR0b190aW1lb3V0X3NoaWZ0OwotCS8qIFBSTV9JUlFTVEFUVVMqLwotCXUzMiB0cmFueGRvbmVfc3RhdHVzOwotfTsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqKnZkZF9pbmZvOwogCi0vKiBWb2x0YWdlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFuZCBvZmZzZXRzICovCi1zdHJ1Y3QgdmNfcmVnX2luZm8gewotCS8qIFBSTSBtb2R1bGUgKi8KLQl1MTYgcHJtX21vZDsKLQkvKiBWQyByZWdpc3RlciBvZmZzZXRzICovCi0JdTggc21wc19zYV9yZWc7Ci0JdTggc21wc192b2xyYV9yZWc7Ci0JdTggYnlwYXNzX3ZhbF9yZWc7Ci0JdTggY21kdmFsX3JlZzsKLQl1OCB2b2x0c2V0dXBfcmVnOwotCS8qVkNfU01QU19TQSovCi0JdTggc21wc19zYV9zaGlmdDsKLQl1MzIgc21wc19zYV9tYXNrOwotCS8qIFZDX1NNUFNfVk9MX1JBICovCi0JdTggc21wc192b2xyYV9zaGlmdDsKLQl1MzIgc21wc192b2xyYV9tYXNrOwotCS8qIFZDX0JZUEFTU19WQUwgKi8KLQl1OCBkYXRhX3NoaWZ0OwotCXU4IHNsYXZlYWRkcl9zaGlmdDsKLQl1OCByZWdhZGRyX3NoaWZ0OwotCXUzMiB2YWxpZDsKLQkvKiBWQ19DTURfVkFMICovCi0JdTggY21kX29uX3NoaWZ0OwotCXU4IGNtZF9vbmxwX3NoaWZ0OwotCXU4IGNtZF9yZXRfc2hpZnQ7Ci0JdTggY21kX29mZl9zaGlmdDsKLQl1MzIgY21kX29uX21hc2s7Ci0JLyogUFJNX1ZPTFRTRVRVUCAqLwotCXU4IHZvbHRzZXR1cF9zaGlmdDsKLQl1MzIgdm9sdHNldHVwX21hc2s7Ci19OwotCi0vKioKLSAqIG9tYXBfdmRkX2luZm8gLSBQZXIgVm9sdGFnZSBEb21haW4gaW5mbwotICoKLSAqIEB2b2x0X2RhdGEJCTogdm9sdGFnZSB0YWJsZSBoYXZpbmcgdGhlIGRpc3RpbmN0IHZvbHRhZ2VzIHN1cHBvcnRlZAotICoJCQkgIGJ5IHRoZSBkb21haW4gYW5kIG90aGVyIGFzc29jaWF0ZWQgcGVyIHZvbHRhZ2UgZGF0YS4KLSAqIEBwbWljX2luZm8JCTogcG1pYyBzcGVjaWZpYyBwYXJhbWV0ZXJzIHdoaWNoIHNob3VsZCBiZSBwb3B1bHRlZCBieQotICoJCQkgIHRoZSBwbWljIGRyaXZlcnMuCi0gKiBAdnBfb2ZmcwkJOiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgb2Zmc2V0cyBmb3IgdmFyaW91cwotICoJCQkgIHZwIHJlZ2lzdGVycwotICogQHZwX3JlZwkJOiB0aGUgcmVnaXN0ZXIgdmFsdWVzLCBzaGlmdHMsIG1hc2tzIGZvciB2YXJpb3VzCi0gKgkJCSAgdnAgcmVnaXN0ZXJzCi0gKiBAdmNfcmVnCQk6IHN0cnVjdHVyZSBjb250YWluaW5nIHZhcmlvdXMgdmFyaW91cyB2YyByZWdpc3RlcnMsCi0gKgkJCSAgc2hpZnRzLCBtYXNrcyBldGMuCi0gKiBAdm9sdGRtCQk6IHBvaW50ZXIgdG8gdGhlIHZvbHRhZ2UgZG9tYWluIHN0cnVjdHVyZQotICogQGRlYnVnX2RpcgkJOiBkZWJ1ZyBkaXJlY3RvcnkgZm9yIHRoaXMgdm9sdGFnZSBkb21haW4uCi0gKiBAY3Vycl92b2x0CQk6IGN1cnJlbnQgdm9sdGFnZSBmb3IgdGhpcyB2ZGQuCi0gKiBAb2NwX21vZAkJOiBUaGUgcHJtIG1vZHVsZSBmb3IgYWNjZXNzaW5nIHRoZSBwcm0gaXJxc3RhdHVzIHJlZy4KLSAqIEBwcm1faXJxc3RfcmVnCTogcHJtIGlycXN0YXR1cyByZWdpc3Rlci4KLSAqIEB2cF9lbmFibGVkCQk6IGZsYWcgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIHZwIGlzIGVuYWJsZWQgb3Igbm90Ci0gKiBAdm9sdF9zY2FsZQkJOiBBUEkgdG8gc2NhbGUgdGhlIHZvbHRhZ2Ugb2YgdGhlIHZkZC4KLSAqLwotc3RydWN0IG9tYXBfdmRkX2luZm8gewotCXN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhOwotCXN0cnVjdCBvbWFwX3ZvbHRfcG1pY19pbmZvICpwbWljX2luZm87Ci0Jc3RydWN0IHZwX3JlZ19vZmZzIHZwX29mZnM7Ci0Jc3RydWN0IHZwX3JlZ192YWwgdnBfcmVnOwotCXN0cnVjdCB2Y19yZWdfaW5mbyB2Y19yZWc7Ci0Jc3RydWN0IHZvbHRhZ2Vkb21haW4gdm9sdGRtOwotCXN0cnVjdCBkZW50cnkgKmRlYnVnX2RpcjsKLQl1MzIgY3Vycl92b2x0OwotCXUxNiBvY3BfbW9kOwotCXU4IHBybV9pcnFzdF9yZWc7Ci0JYm9vbCB2cF9lbmFibGVkOwotCXUzMiAoKnJlYWRfcmVnKSAodTE2IG1vZCwgdTggb2Zmc2V0KTsKLQl2b2lkICgqd3JpdGVfcmVnKSAodTMyIHZhbCwgdTE2IG1vZCwgdTggb2Zmc2V0KTsKLQlpbnQgKCp2b2x0X3NjYWxlKSAoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCwKLQkJdW5zaWduZWQgbG9uZyB0YXJnZXRfdm9sdCk7Ci19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZF9pbmZvOwogLyoKICAqIE51bWJlciBvZiBzY2FsYWJsZSB2b2x0YWdlIGRvbWFpbnMuCiAgKi8KIHN0YXRpYyBpbnQgbnJfc2NhbGFibGVfdmRkOwogCi0vKiBPTUFQMyBWREQgc3R1cmN0dXJlcyAqLwotc3RhdGljIHN0cnVjdCBvbWFwX3ZkZF9pbmZvIG9tYXAzX3ZkZF9pbmZvW10gPSB7Ci0JewotCQkudnBfb2ZmcyA9IHsKLQkJCS52cGNvbmZpZyA9IE9NQVAzX1BSTV9WUDFfQ09ORklHX09GRlNFVCwKLQkJCS52c3RlcG1pbiA9IE9NQVAzX1BSTV9WUDFfVlNURVBNSU5fT0ZGU0VULAotCQkJLnZzdGVwbWF4ID0gT01BUDNfUFJNX1ZQMV9WU1RFUE1BWF9PRkZTRVQsCi0JCQkudmxpbWl0dG8gPSBPTUFQM19QUk1fVlAxX1ZMSU1JVFRPX09GRlNFVCwKLQkJCS52c3RhdHVzID0gT01BUDNfUFJNX1ZQMV9TVEFUVVNfT0ZGU0VULAotCQkJLnZvbHRhZ2UgPSBPTUFQM19QUk1fVlAxX1ZPTFRBR0VfT0ZGU0VULAotCQl9LAotCQkudm9sdGRtID0gewotCQkJLm5hbWUgPSAibXB1IiwKLQkJfSwKLQl9LAotCXsKLQkJLnZwX29mZnMgPSB7Ci0JCQkudnBjb25maWcgPSBPTUFQM19QUk1fVlAyX0NPTkZJR19PRkZTRVQsCi0JCQkudnN0ZXBtaW4gPSBPTUFQM19QUk1fVlAyX1ZTVEVQTUlOX09GRlNFVCwKLQkJCS52c3RlcG1heCA9IE9NQVAzX1BSTV9WUDJfVlNURVBNQVhfT0ZGU0VULAotCQkJLnZsaW1pdHRvID0gT01BUDNfUFJNX1ZQMl9WTElNSVRUT19PRkZTRVQsCi0JCQkudnN0YXR1cyA9IE9NQVAzX1BSTV9WUDJfU1RBVFVTX09GRlNFVCwKLQkJCS52b2x0YWdlID0gT01BUDNfUFJNX1ZQMl9WT0xUQUdFX09GRlNFVCwKLQkJfSwKLQkJLnZvbHRkbSA9IHsKLQkJCS5uYW1lID0gImNvcmUiLAotCQl9LAotCX0sCi19OwotCi0jZGVmaW5lIE9NQVAzX05SX1NDQUxBQkxFX1ZERCBBUlJBWV9TSVpFKG9tYXAzX3ZkZF9pbmZvKQotCi0vKiBPTUFQNCBWREQgc3R1cmN0dXJlcyAqLwotc3RhdGljIHN0cnVjdCBvbWFwX3ZkZF9pbmZvIG9tYXA0X3ZkZF9pbmZvW10gPSB7Ci0JewotCQkudnBfb2ZmcyA9IHsKLQkJCS52cGNvbmZpZyA9IE9NQVA0X1BSTV9WUF9NUFVfQ09ORklHX09GRlNFVCwKLQkJCS52c3RlcG1pbiA9IE9NQVA0X1BSTV9WUF9NUFVfVlNURVBNSU5fT0ZGU0VULAotCQkJLnZzdGVwbWF4ID0gT01BUDRfUFJNX1ZQX01QVV9WU1RFUE1BWF9PRkZTRVQsCi0JCQkudmxpbWl0dG8gPSBPTUFQNF9QUk1fVlBfTVBVX1ZMSU1JVFRPX09GRlNFVCwKLQkJCS52c3RhdHVzID0gT01BUDRfUFJNX1ZQX01QVV9TVEFUVVNfT0ZGU0VULAotCQkJLnZvbHRhZ2UgPSBPTUFQNF9QUk1fVlBfTVBVX1ZPTFRBR0VfT0ZGU0VULAotCQl9LAotCQkudm9sdGRtID0gewotCQkJLm5hbWUgPSAibXB1IiwKLQkJfSwKLQl9LAotCXsKLQkJLnZwX29mZnMgPSB7Ci0JCQkudnBjb25maWcgPSBPTUFQNF9QUk1fVlBfSVZBX0NPTkZJR19PRkZTRVQsCi0JCQkudnN0ZXBtaW4gPSBPTUFQNF9QUk1fVlBfSVZBX1ZTVEVQTUlOX09GRlNFVCwKLQkJCS52c3RlcG1heCA9IE9NQVA0X1BSTV9WUF9JVkFfVlNURVBNQVhfT0ZGU0VULAotCQkJLnZsaW1pdHRvID0gT01BUDRfUFJNX1ZQX0lWQV9WTElNSVRUT19PRkZTRVQsCi0JCQkudnN0YXR1cyA9IE9NQVA0X1BSTV9WUF9JVkFfU1RBVFVTX09GRlNFVCwKLQkJCS52b2x0YWdlID0gT01BUDRfUFJNX1ZQX0lWQV9WT0xUQUdFX09GRlNFVCwKLQkJfSwKLQkJLnZvbHRkbSA9IHsKLQkJCS5uYW1lID0gIml2YSIsCi0JCX0sCi0JfSwKLQl7Ci0JCS52cF9vZmZzID0gewotCQkJLnZwY29uZmlnID0gT01BUDRfUFJNX1ZQX0NPUkVfQ09ORklHX09GRlNFVCwKLQkJCS52c3RlcG1pbiA9IE9NQVA0X1BSTV9WUF9DT1JFX1ZTVEVQTUlOX09GRlNFVCwKLQkJCS52c3RlcG1heCA9IE9NQVA0X1BSTV9WUF9DT1JFX1ZTVEVQTUFYX09GRlNFVCwKLQkJCS52bGltaXR0byA9IE9NQVA0X1BSTV9WUF9DT1JFX1ZMSU1JVFRPX09GRlNFVCwKLQkJCS52c3RhdHVzID0gT01BUDRfUFJNX1ZQX0NPUkVfU1RBVFVTX09GRlNFVCwKLQkJCS52b2x0YWdlID0gT01BUDRfUFJNX1ZQX0NPUkVfVk9MVEFHRV9PRkZTRVQsCi0JCX0sCi0JCS52b2x0ZG0gPSB7Ci0JCQkubmFtZSA9ICJjb3JlIiwKLQkJfSwKLQl9LAotfTsKLQotI2RlZmluZSBPTUFQNF9OUl9TQ0FMQUJMRV9WREQgQVJSQVlfU0laRShvbWFwNF92ZGRfaW5mbykKLQotLyoKLSAqIFN0cnVjdHVyZXMgY29udGFpbmluZyBPTUFQMzQzMC9PTUFQMzYzMCB2b2x0YWdlIHN1cHBvcnRlZCBhbmQgdmFyaW91cwotICogdm9sdGFnZSBkZXBlbmRlbnQgZGF0YSBmb3IgZWFjaCBWREQuCi0gKi8KLSNkZWZpbmUgVk9MVF9EQVRBX0RFRklORShfdl9ub20sIF9lZnVzZV9vZmZzLCBfZXJybWlubGltaXQsIF9lcnJnYWluKQlcCi17CQkJCQkJCQkJXAotCS52b2x0X25vbWluYWwJPSBfdl9ub20sCQkJCQlcCi0JLnNyX2VmdXNlX29mZnMJPSBfZWZ1c2Vfb2ZmcywJCQkJCVwKLQkuc3JfZXJybWlubGltaXQJPSBfZXJybWlubGltaXQsCQkJCQlcCi0JLnZwX2VycmdhaW4JPSBfZXJyZ2FpbgkJCQkJXAotfQotCi0vKiBWREQxICovCi1zdGF0aWMgc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXAzNHh4X3ZkZG1wdV92b2x0X2RhdGFbXSA9IHsKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9NUFVfT1BQMV9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDFfVkREMSwgMHhmNCwgMHgwYyksCi0JVk9MVF9EQVRBX0RFRklORShPTUFQMzQzMF9WRERfTVBVX09QUDJfVVYsIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFAyX1ZERDEsIDB4ZjQsIDB4MGMpLAotCVZPTFRfREFUQV9ERUZJTkUoT01BUDM0MzBfVkREX01QVV9PUFAzX1VWLCBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQM19WREQxLCAweGY5LCAweDE4KSwKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9NUFVfT1BQNF9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDRfVkREMSwgMHhmOSwgMHgxOCksCi0JVk9MVF9EQVRBX0RFRklORShPTUFQMzQzMF9WRERfTVBVX09QUDVfVVYsIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFA1X1ZERDEsIDB4ZjksIDB4MTgpLAotCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXAzNnh4X3ZkZG1wdV92b2x0X2RhdGFbXSA9IHsKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNjMwX1ZERF9NUFVfT1BQNTBfVVYsIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFA1MF9WREQxLCAweGY0LCAweDBjKSwKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNjMwX1ZERF9NUFVfT1BQMTAwX1VWLCBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMTAwX1ZERDEsIDB4ZjksIDB4MTYpLAotCVZPTFRfREFUQV9ERUZJTkUoT01BUDM2MzBfVkREX01QVV9PUFAxMjBfVVYsIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFAxMjBfVkREMSwgMHhmYSwgMHgyMyksCi0JVk9MVF9EQVRBX0RFRklORShPTUFQMzYzMF9WRERfTVBVX09QUDFHX1VWLCBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMUdfVkREMSwgMHhmYSwgMHgyNyksCi0JVk9MVF9EQVRBX0RFRklORSgwLCAwLCAwLCAwKSwKLX07Ci0KLS8qIFZERDIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDM0eHhfdmRkY29yZV92b2x0X2RhdGFbXSA9IHsKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9DT1JFX09QUDFfVVYsIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFAxX1ZERDIsIDB4ZjQsIDB4MGMpLAotCVZPTFRfREFUQV9ERUZJTkUoT01BUDM0MzBfVkREX0NPUkVfT1BQMl9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDJfVkREMiwgMHhmNCwgMHgwYyksCi0JVk9MVF9EQVRBX0RFRklORShPTUFQMzQzMF9WRERfQ09SRV9PUFAzX1VWLCBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQM19WREQyLCAweGY5LCAweDE4KSwKLQlWT0xUX0RBVEFfREVGSU5FKDAsIDAsIDAsIDApLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSBvbWFwMzZ4eF92ZGRjb3JlX3ZvbHRfZGF0YVtdID0gewotCVZPTFRfREFUQV9ERUZJTkUoT01BUDM2MzBfVkREX0NPUkVfT1BQNTBfVVYsIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFA1MF9WREQyLCAweGY0LCAweDBjKSwKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNjMwX1ZERF9DT1JFX09QUDEwMF9VViwgT01BUDM2MzBfQ09OVFJPTF9GVVNFX09QUDEwMF9WREQyLCAweGY5LCAweDE2KSwKLQlWT0xUX0RBVEFfREVGSU5FKDAsIDAsIDAsIDApLAotfTsKLQotLyoKLSAqIFN0cnVjdHVyZXMgY29udGFpbmluZyBPTUFQNDQzMCB2b2x0YWdlIHN1cHBvcnRlZCBhbmQgdmFyaW91cwotICogdm9sdGFnZSBkZXBlbmRlbnQgZGF0YSBmb3IgZWFjaCBWREQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX21wdV92b2x0X2RhdGFbXSA9IHsKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9NUFVfT1BQNTBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQNTAsIDB4ZjQsIDB4MGMpLAotCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX01QVV9PUFAxMDBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQMTAwLCAweGY5LCAweDE2KSwKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9NUFVfT1BQVFVSQk9fVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQVFVSQk8sIDB4ZmEsIDB4MjMpLAotCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX01QVV9PUFBOSVRST19VViwgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX01QVV9PUFBOSVRSTywgMHhmYSwgMHgyNyksCi0JVk9MVF9EQVRBX0RFRklORSgwLCAwLCAwLCAwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX2l2YV92b2x0X2RhdGFbXSA9IHsKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9JVkFfT1BQNTBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQNTAsIDB4ZjQsIDB4MGMpLAotCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX0lWQV9PUFAxMDBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQMTAwLCAweGY5LCAweDE2KSwKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9JVkFfT1BQVFVSQk9fVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQVFVSQk8sIDB4ZmEsIDB4MjMpLAotCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXA0NHh4X3ZkZF9jb3JlX3ZvbHRfZGF0YVtdID0gewotCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX0NPUkVfT1BQNTBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9DT1JFX09QUDUwLCAweGY0LCAweDBjKSwKLQlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9DT1JFX09QUDEwMF9VViwgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX0NPUkVfT1BQMTAwLCAweGY5LCAweDE2KSwKLQlWT0xUX0RBVEFfREVGSU5FKDAsIDAsIDAsIDApLAotfTsKKy8qIFhYWCBkb2N1bWVudCAqLworc3RhdGljIHMxNiBwcm1fbW9kX29mZnM7CitzdGF0aWMgczE2IHBybV9pcnFzdF9vY3BfbW9kX29mZnM7CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2b2x0YWdlX2RpcjsKIAogLyogSW5pdCBmdW5jdGlvbiBwb2ludGVycyAqLwotc3RhdGljIHZvaWQgKCp2Y19pbml0KSAoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCk7Ci1zdGF0aWMgaW50ICgqdmRkX2RhdGFfY29uZmlndXJlKSAoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCk7CitzdGF0aWMgaW50IHZwX2ZvcmNldXBkYXRlX3NjYWxlX3ZvbHRhZ2Uoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCwKKwkJCQkJdW5zaWduZWQgbG9uZyB0YXJnZXRfdm9sdCk7CiAKIHN0YXRpYyB1MzIgb21hcDNfdm9sdGFnZV9yZWFkX3JlZyh1MTYgbW9kLCB1OCBvZmZzZXQpCiB7CkBAIC0zMzUsNiArODEsNjIgQEAKIAlvbWFwNF9wcm1pbnN0X3dyaXRlX2luc3RfcmVnKHZhbCwgT01BUDQ0MzBfUFJNX1BBUlRJVElPTiwgbW9kLCBvZmZzZXQpOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBfY29uZmlnX2NvbW1vbl92ZGRfZGF0YShzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkKQoreworCWNoYXIgKnN5c19ja19uYW1lOworCXN0cnVjdCBjbGsgKnN5c19jazsKKwl1MzIgc3lzX2Nsa19zcGVlZCwgdGltZW91dF92YWwsIHdhaXR0aW1lOworCisJLyoKKwkgKiBYWFggQ2xvY2tmdyBzaG91bGQgaGFuZGxlIHRoaXMsIG9yIHRoaXMgc2hvdWxkIGJlIGluIGEKKwkgKiBzdHJ1Y3QgcmVjb3JkCisJICovCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKQorCQlzeXNfY2tfbmFtZSA9ICJzeXNfY2siOworCWVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlzeXNfY2tfbmFtZSA9ICJzeXNfY2xraW5fY2siOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFN5cyBjbGsgcmF0ZSBpcyByZXF1aXJlIHRvIGNhbGN1bGF0ZSB2cCB0aW1lb3V0IHZhbHVlIGFuZAorCSAqIHNtcHN3YWl0dGltZW1pbiBhbmQgc21wc3dhaXR0aW1lbWF4LgorCSAqLworCXN5c19jayA9IGNsa19nZXQoTlVMTCwgc3lzX2NrX25hbWUpOworCWlmIChJU19FUlIoc3lzX2NrKSkgeworCQlwcl93YXJuaW5nKCIlczogQ291bGQgbm90IGdldCB0aGUgc3lzIGNsayB0byBjYWxjdWxhdGUiCisJCQkidmFyaW91cyB2ZGRfJXMgcGFyYW1zXG4iLCBfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzeXNfY2xrX3NwZWVkID0gY2xrX2dldF9yYXRlKHN5c19jayk7CisJY2xrX3B1dChzeXNfY2spOworCS8qIERpdmlkZSB0byBhdm9pZCBvdmVyZmxvdyAqLworCXN5c19jbGtfc3BlZWQgLz0gMTAwMDsKKworCS8qIEdlbmVyaWMgdm9sdGFnZSBwYXJhbWV0ZXJzICovCisJdmRkLT5jdXJyX3ZvbHQgPSAxMjAwMDAwOworCXZkZC0+dm9sdF9zY2FsZSA9IHZwX2ZvcmNldXBkYXRlX3NjYWxlX3ZvbHRhZ2U7CisJdmRkLT52cF9lbmFibGVkID0gZmFsc2U7CisKKwl2ZGQtPnZwX3J0X2RhdGEudnBjb25maWdfZXJyb3JvZmZzZXQgPQorCQkodmRkLT5wbWljX2luZm8tPnZwX2Vycm9yb2Zmc2V0IDw8CisJCSB2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnBjb25maWdfZXJyb3JvZmZzZXRfc2hpZnQpOworCisJdGltZW91dF92YWwgPSAoc3lzX2Nsa19zcGVlZCAqIHZkZC0+cG1pY19pbmZvLT52cF90aW1lb3V0X3VzKSAvIDEwMDA7CisJdmRkLT52cF9ydF9kYXRhLnZsaW1pdHRvX3RpbWVvdXQgPSB0aW1lb3V0X3ZhbDsKKwl2ZGQtPnZwX3J0X2RhdGEudmxpbWl0dG9fdmRkbWluID0gdmRkLT5wbWljX2luZm8tPnZwX3ZkZG1pbjsKKwl2ZGQtPnZwX3J0X2RhdGEudmxpbWl0dG9fdmRkbWF4ID0gdmRkLT5wbWljX2luZm8tPnZwX3ZkZG1heDsKKworCXdhaXR0aW1lID0gKCh2ZGQtPnBtaWNfaW5mby0+c3RlcF9zaXplIC8gdmRkLT5wbWljX2luZm8tPnNsZXdfcmF0ZSkgKgorCQkJCXN5c19jbGtfc3BlZWQpIC8gMTAwMDsKKwl2ZGQtPnZwX3J0X2RhdGEudnN0ZXBtaW5fc21wc3dhaXR0aW1lbWluID0gd2FpdHRpbWU7CisJdmRkLT52cF9ydF9kYXRhLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heCA9IHdhaXR0aW1lOworCXZkZC0+dnBfcnRfZGF0YS52c3RlcG1pbl9zdGVwbWluID0gdmRkLT5wbWljX2luZm8tPnZwX3ZzdGVwbWluOworCXZkZC0+dnBfcnRfZGF0YS52c3RlcG1heF9zdGVwbWF4ID0gdmRkLT5wbWljX2luZm8tPnZwX3ZzdGVwbWF4OworCisJcmV0dXJuIDA7Cit9CisKIC8qIFZvbHRhZ2UgZGVidWdmcyBzdXBwb3J0ICovCiBzdGF0aWMgaW50IHZwX3ZvbHRfZGVidWdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQogewpAQCAtMzQ2LDcgKzE0OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXZzZWwgPSB2ZGQtPnJlYWRfcmVnKHZkZC0+dnBfcmVnLnBybV9tb2QsIHZkZC0+dnBfb2Zmcy52b2x0YWdlKTsKKwl2c2VsID0gdmRkLT5yZWFkX3JlZyhwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dm9sdGFnZSk7CiAJcHJfbm90aWNlKCJjdXJyX3ZzZWwgPSAleFxuIiwgdnNlbCk7CiAKIAlpZiAoIXZkZC0+cG1pY19pbmZvLT52c2VsX3RvX3V2KSB7CkBAIC0zNzksNyArMTgxLDYgQEAKIHN0YXRpYyB2b2lkIHZwX2xhdGNoX3ZzZWwoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKIHsKIAl1MzIgdnBjb25maWc7Ci0JdTE2IG1vZDsKIAl1bnNpZ25lZCBsb25nIHV2ZGM7CiAJY2hhciB2c2VsOwogCkBAIC0zOTYsMzAgKzE5NywyNyBAQAogCQlyZXR1cm47CiAJfQogCi0JbW9kID0gdmRkLT52cF9yZWcucHJtX21vZDsKLQogCXZzZWwgPSB2ZGQtPnBtaWNfaW5mby0+dXZfdG9fdnNlbCh1dmRjKTsKIAotCXZwY29uZmlnID0gdmRkLT5yZWFkX3JlZyhtb2QsIHZkZC0+dnBfb2Zmcy52cGNvbmZpZyk7Ci0JdnBjb25maWcgJj0gfih2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrIHwKLQkJCXZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2ZGQpOwotCXZwY29uZmlnIHw9IHZzZWwgPDwgdmRkLT52cF9yZWcudnBjb25maWdfaW5pdHZvbHRhZ2Vfc2hpZnQ7CisJdnBjb25maWcgPSB2ZGQtPnJlYWRfcmVnKHBybV9tb2Rfb2ZmcywgdmRkLT52cF9kYXRhLT52cGNvbmZpZyk7CisJdnBjb25maWcgJj0gfih2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnBjb25maWdfaW5pdHZvbHRhZ2VfbWFzayB8CisJCQl2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnBjb25maWdfaW5pdHZkZCk7CisJdnBjb25maWcgfD0gdnNlbCA8PCB2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnBjb25maWdfaW5pdHZvbHRhZ2Vfc2hpZnQ7CiAKLQl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgbW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCXZkZC0+d3JpdGVfcmVnKHZwY29uZmlnLCBwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dnBjb25maWcpOwogCiAJLyogVHJpZ2dlciBpbml0VkREIHZhbHVlIGNvcHkgdG8gdm9sdGFnZSBwcm9jZXNzb3IgKi8KLQl2ZGQtPndyaXRlX3JlZygodnBjb25maWcgfCB2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dmRkKSwgbW9kLAotCQkJdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwl2ZGQtPndyaXRlX3JlZygodnBjb25maWcgfCB2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnBjb25maWdfaW5pdHZkZCksCisJCSAgICAgICBwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dnBjb25maWcpOwogCiAJLyogQ2xlYXIgaW5pdFZERCBjb3B5IHRyaWdnZXIgYml0ICovCi0JdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgcHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZwY29uZmlnKTsKIH0KIAogLyogR2VuZXJpYyB2b2x0YWdlIGluaXQgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBfX2luaXQgdnBfaW5pdChzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkKQogewogCXUzMiB2cF92YWw7Ci0JdTE2IG1vZDsKIAogCWlmICghdmRkLT5yZWFkX3JlZyB8fCAhdmRkLT53cml0ZV9yZWcpIHsKIAkJcHJfZXJyKCIlczogTm8gcmVhZC93cml0ZSBBUEkgZm9yIGFjY2Vzc2luZyB2ZGRfJXMgcmVnc1xuIiwKQEAgLTQyNywzMyArMjI1LDMxIEBACiAJCXJldHVybjsKIAl9CiAKLQltb2QgPSB2ZGQtPnZwX3JlZy5wcm1fbW9kOworCXZwX3ZhbCA9IHZkZC0+dnBfcnRfZGF0YS52cGNvbmZpZ19lcnJvcm9mZnNldCB8CisJCSh2ZGQtPnZwX3J0X2RhdGEudnBjb25maWdfZXJyb3JnYWluIDw8CisJCXZkZC0+dnBfZGF0YS0+dnBfY29tbW9uLT52cGNvbmZpZ19lcnJvcmdhaW5fc2hpZnQpIHwKKwkJdmRkLT52cF9kYXRhLT52cF9jb21tb24tPnZwY29uZmlnX3RpbWVvdXRlbjsKKwl2ZGQtPndyaXRlX3JlZyh2cF92YWwsIHBybV9tb2Rfb2ZmcywgdmRkLT52cF9kYXRhLT52cGNvbmZpZyk7CiAKLQl2cF92YWwgPSB2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcm9mZnNldCB8Ci0JCSh2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW4gPDwKLQkJdmRkLT52cF9yZWcudnBjb25maWdfZXJyb3JnYWluX3NoaWZ0KSB8Ci0JCXZkZC0+dnBfcmVnLnZwY29uZmlnX3RpbWVvdXRlbjsKLQl2ZGQtPndyaXRlX3JlZyh2cF92YWwsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwl2cF92YWwgPSAoKHZkZC0+dnBfcnRfZGF0YS52c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW4gPDwKKwkJdmRkLT52cF9kYXRhLT52cF9jb21tb24tPnZzdGVwbWluX3NtcHN3YWl0dGltZW1pbl9zaGlmdCkgfAorCQkodmRkLT52cF9ydF9kYXRhLnZzdGVwbWluX3N0ZXBtaW4gPDwKKwkJdmRkLT52cF9kYXRhLT52cF9jb21tb24tPnZzdGVwbWluX3N0ZXBtaW5fc2hpZnQpKTsKKwl2ZGQtPndyaXRlX3JlZyh2cF92YWwsIHBybV9tb2Rfb2ZmcywgdmRkLT52cF9kYXRhLT52c3RlcG1pbik7CiAKLQl2cF92YWwgPSAoKHZkZC0+dnBfcmVnLnZzdGVwbWluX3NtcHN3YWl0dGltZW1pbiA8PAotCQl2ZGQtPnZwX3JlZy52c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW5fc2hpZnQpIHwKLQkJKHZkZC0+dnBfcmVnLnZzdGVwbWluX3N0ZXBtaW4gPDwKLQkJdmRkLT52cF9yZWcudnN0ZXBtaW5fc3RlcG1pbl9zaGlmdCkpOwotCXZkZC0+d3JpdGVfcmVnKHZwX3ZhbCwgbW9kLCB2ZGQtPnZwX29mZnMudnN0ZXBtaW4pOworCXZwX3ZhbCA9ICgodmRkLT52cF9ydF9kYXRhLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heCA8PAorCQl2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnN0ZXBtYXhfc21wc3dhaXR0aW1lbWF4X3NoaWZ0KSB8CisJCSh2ZGQtPnZwX3J0X2RhdGEudnN0ZXBtYXhfc3RlcG1heCA8PAorCQl2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnN0ZXBtYXhfc3RlcG1heF9zaGlmdCkpOworCXZkZC0+d3JpdGVfcmVnKHZwX3ZhbCwgcHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZzdGVwbWF4KTsKIAotCXZwX3ZhbCA9ICgodmRkLT52cF9yZWcudnN0ZXBtYXhfc21wc3dhaXR0aW1lbWF4IDw8Ci0JCXZkZC0+dnBfcmVnLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heF9zaGlmdCkgfAotCQkodmRkLT52cF9yZWcudnN0ZXBtYXhfc3RlcG1heCA8PAotCQl2ZGQtPnZwX3JlZy52c3RlcG1heF9zdGVwbWF4X3NoaWZ0KSk7Ci0JdmRkLT53cml0ZV9yZWcodnBfdmFsLCBtb2QsIHZkZC0+dnBfb2Zmcy52c3RlcG1heCk7Ci0KLQl2cF92YWwgPSAoKHZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1heCA8PAotCQl2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtYXhfc2hpZnQpIHwKLQkJKHZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1pbiA8PAotCQl2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtaW5fc2hpZnQpIHwKLQkJKHZkZC0+dnBfcmVnLnZsaW1pdHRvX3RpbWVvdXQgPDwKLQkJdmRkLT52cF9yZWcudmxpbWl0dG9fdGltZW91dF9zaGlmdCkpOwotCXZkZC0+d3JpdGVfcmVnKHZwX3ZhbCwgbW9kLCB2ZGQtPnZwX29mZnMudmxpbWl0dG8pOworCXZwX3ZhbCA9ICgodmRkLT52cF9ydF9kYXRhLnZsaW1pdHRvX3ZkZG1heCA8PAorCQl2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dmxpbWl0dG9fdmRkbWF4X3NoaWZ0KSB8CisJCSh2ZGQtPnZwX3J0X2RhdGEudmxpbWl0dG9fdmRkbWluIDw8CisJCXZkZC0+dnBfZGF0YS0+dnBfY29tbW9uLT52bGltaXR0b192ZGRtaW5fc2hpZnQpIHwKKwkJKHZkZC0+dnBfcnRfZGF0YS52bGltaXR0b190aW1lb3V0IDw8CisJCXZkZC0+dnBfZGF0YS0+dnBfY29tbW9uLT52bGltaXR0b190aW1lb3V0X3NoaWZ0KSk7CisJdmRkLT53cml0ZV9yZWcodnBfdmFsLCBwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dmxpbWl0dG8pOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdmRkX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkKQpAQCAtNDgwLDIzICsyNzYsMjMgQEAKIAl9CiAKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfeDE2KCJ2cF9lcnJvcmdhaW4iLCBTX0lSVUdPLCB2ZGQtPmRlYnVnX2RpciwKLQkJCQkmKHZkZC0+dnBfcmVnLnZwY29uZmlnX2Vycm9yZ2FpbikpOworCQkJCSYodmRkLT52cF9ydF9kYXRhLnZwY29uZmlnX2Vycm9yZ2FpbikpOwogCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94MTYoInZwX3NtcHN3YWl0dGltZW1pbiIsIFNfSVJVR08sCiAJCQkJdmRkLT5kZWJ1Z19kaXIsCi0JCQkJJih2ZGQtPnZwX3JlZy52c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW4pKTsKKwkJCQkmKHZkZC0+dnBfcnRfZGF0YS52c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW4pKTsKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfeDgoInZwX3N0ZXBtaW4iLCBTX0lSVUdPLCB2ZGQtPmRlYnVnX2RpciwKLQkJCQkmKHZkZC0+dnBfcmVnLnZzdGVwbWluX3N0ZXBtaW4pKTsKKwkJCQkmKHZkZC0+dnBfcnRfZGF0YS52c3RlcG1pbl9zdGVwbWluKSk7CiAJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gxNigidnBfc21wc3dhaXR0aW1lbWF4IiwgU19JUlVHTywKIAkJCQl2ZGQtPmRlYnVnX2RpciwKLQkJCQkmKHZkZC0+dnBfcmVnLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heCkpOworCQkJCSYodmRkLT52cF9ydF9kYXRhLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heCkpOwogCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94OCgidnBfc3RlcG1heCIsIFNfSVJVR08sIHZkZC0+ZGVidWdfZGlyLAotCQkJCSYodmRkLT52cF9yZWcudnN0ZXBtYXhfc3RlcG1heCkpOworCQkJCSYodmRkLT52cF9ydF9kYXRhLnZzdGVwbWF4X3N0ZXBtYXgpKTsKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfeDgoInZwX3ZkZG1heCIsIFNfSVJVR08sIHZkZC0+ZGVidWdfZGlyLAotCQkJCSYodmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWF4KSk7CisJCQkJJih2ZGQtPnZwX3J0X2RhdGEudmxpbWl0dG9fdmRkbWF4KSk7CiAJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3g4KCJ2cF92ZGRtaW4iLCBTX0lSVUdPLCB2ZGQtPmRlYnVnX2RpciwKLQkJCQkmKHZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1pbikpOworCQkJCSYodmRkLT52cF9ydF9kYXRhLnZsaW1pdHRvX3ZkZG1pbikpOwogCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94MTYoInZwX3RpbWVvdXQiLCBTX0lSVUdPLCB2ZGQtPmRlYnVnX2RpciwKLQkJCQkmKHZkZC0+dnBfcmVnLnZsaW1pdHRvX3RpbWVvdXQpKTsKKwkJCQkmKHZkZC0+dnBfcnRfZGF0YS52bGltaXR0b190aW1lb3V0KSk7CiAJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImN1cnJfdnBfdm9sdCIsIFNfSVJVR08sIHZkZC0+ZGVidWdfZGlyLAogCQkJCSh2b2lkICopIHZkZCwgJnZwX3ZvbHRfZGVidWdfZm9wcyk7CiAJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImN1cnJfbm9taW5hbF92b2x0IiwgU19JUlVHTywKQEAgLTUwOSw4ICszMDUsMTIgQEAKIAkJdW5zaWduZWQgbG9uZyB0YXJnZXRfdm9sdCwgdTggKnRhcmdldF92c2VsLCB1OCAqY3VycmVudF92c2VsKQogewogCXN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhOworCWNvbnN0IHN0cnVjdCBvbWFwX3ZjX2NvbW1vbl9kYXRhICp2Y19jb21tb247CisJY29uc3Qgc3RydWN0IG9tYXBfdnBfY29tbW9uX2RhdGEgKnZwX2NvbW1vbjsKIAl1MzIgdmNfY21kdmFsLCB2cF9lcnJnYWluX3ZhbDsKLQl1MTYgdnBfbW9kLCB2Y19tb2Q7CisKKwl2Y19jb21tb24gPSB2ZGQtPnZjX2RhdGEtPnZjX2NvbW1vbjsKKwl2cF9jb21tb24gPSB2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbjsKIAogCS8qIENoZWNrIGlmIHN1ZmZpZWNpZW50IHBtaWMgaW5mbyBpcyBhdmFpbGFibGUgZm9yIHRoaXMgdmRkICovCiAJaWYgKCF2ZGQtPnBtaWNfaW5mbykgewpAQCAtNTMyLDMzICszMzIsMzAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdnBfbW9kID0gdmRkLT52cF9yZWcucHJtX21vZDsKLQl2Y19tb2QgPSB2ZGQtPnZjX3JlZy5wcm1fbW9kOwotCiAJLyogR2V0IHZvbHRfZGF0YSBjb3JyZXNwb25kaW5nIHRvIHRhcmdldF92b2x0ICovCiAJdm9sdF9kYXRhID0gb21hcF92b2x0YWdlX2dldF92b2x0ZGF0YSgmdmRkLT52b2x0ZG0sIHRhcmdldF92b2x0KTsKIAlpZiAoSVNfRVJSKHZvbHRfZGF0YSkpCiAJCXZvbHRfZGF0YSA9IE5VTEw7CiAKIAkqdGFyZ2V0X3ZzZWwgPSB2ZGQtPnBtaWNfaW5mby0+dXZfdG9fdnNlbCh0YXJnZXRfdm9sdCk7Ci0JKmN1cnJlbnRfdnNlbCA9IHZkZC0+cmVhZF9yZWcodnBfbW9kLCB2ZGQtPnZwX29mZnMudm9sdGFnZSk7CisJKmN1cnJlbnRfdnNlbCA9IHZkZC0+cmVhZF9yZWcocHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZvbHRhZ2UpOwogCiAJLyogU2V0dGluZyB0aGUgT04gdm9sdGFnZSB0byB0aGUgbmV3IHRhcmdldCB2b2x0YWdlICovCi0JdmNfY21kdmFsID0gdmRkLT5yZWFkX3JlZyh2Y19tb2QsIHZkZC0+dmNfcmVnLmNtZHZhbF9yZWcpOwotCXZjX2NtZHZhbCAmPSB+dmRkLT52Y19yZWcuY21kX29uX21hc2s7Ci0JdmNfY21kdmFsIHw9ICgqdGFyZ2V0X3ZzZWwgPDwgdmRkLT52Y19yZWcuY21kX29uX3NoaWZ0KTsKLQl2ZGQtPndyaXRlX3JlZyh2Y19jbWR2YWwsIHZjX21vZCwgdmRkLT52Y19yZWcuY21kdmFsX3JlZyk7CisJdmNfY21kdmFsID0gdmRkLT5yZWFkX3JlZyhwcm1fbW9kX29mZnMsIHZkZC0+dmNfZGF0YS0+Y21kdmFsX3JlZyk7CisJdmNfY21kdmFsICY9IH52Y19jb21tb24tPmNtZF9vbl9tYXNrOworCXZjX2NtZHZhbCB8PSAoKnRhcmdldF92c2VsIDw8IHZjX2NvbW1vbi0+Y21kX29uX3NoaWZ0KTsKKwl2ZGQtPndyaXRlX3JlZyh2Y19jbWR2YWwsIHBybV9tb2Rfb2ZmcywgdmRkLT52Y19kYXRhLT5jbWR2YWxfcmVnKTsKIAogCS8qIFNldHRpbmcgdnAgZXJyb3JnYWluIGJhc2VkIG9uIHRoZSB2b2x0YWdlICovCiAJaWYgKHZvbHRfZGF0YSkgewotCQl2cF9lcnJnYWluX3ZhbCA9IHZkZC0+cmVhZF9yZWcodnBfbW9kLAotCQkJCXZkZC0+dnBfb2Zmcy52cGNvbmZpZyk7Ci0JCXZkZC0+dnBfcmVnLnZwY29uZmlnX2Vycm9yZ2FpbiA9IHZvbHRfZGF0YS0+dnBfZXJyZ2FpbjsKLQkJdnBfZXJyZ2Fpbl92YWwgJj0gfnZkZC0+dnBfcmVnLnZwY29uZmlnX2Vycm9yZ2Fpbl9tYXNrOwotCQl2cF9lcnJnYWluX3ZhbCB8PSB2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW4gPDwKLQkJCQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW5fc2hpZnQ7Ci0JCXZkZC0+d3JpdGVfcmVnKHZwX2VycmdhaW5fdmFsLCB2cF9tb2QsCi0JCQkJdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwkJdnBfZXJyZ2Fpbl92YWwgPSB2ZGQtPnJlYWRfcmVnKHBybV9tb2Rfb2ZmcywKKwkJCQkJICAgICAgIHZkZC0+dnBfZGF0YS0+dnBjb25maWcpOworCQl2ZGQtPnZwX3J0X2RhdGEudnBjb25maWdfZXJyb3JnYWluID0gdm9sdF9kYXRhLT52cF9lcnJnYWluOworCQl2cF9lcnJnYWluX3ZhbCAmPSB+dnBfY29tbW9uLT52cGNvbmZpZ19lcnJvcmdhaW5fbWFzazsKKwkJdnBfZXJyZ2Fpbl92YWwgfD0gdmRkLT52cF9ydF9kYXRhLnZwY29uZmlnX2Vycm9yZ2FpbiA8PAorCQkJdnBfY29tbW9uLT52cGNvbmZpZ19lcnJvcmdhaW5fc2hpZnQ7CisJCXZkZC0+d3JpdGVfcmVnKHZwX2VycmdhaW5fdmFsLCBwcm1fbW9kX29mZnMsCisJCQkgICAgICAgdmRkLT52cF9kYXRhLT52cGNvbmZpZyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01ODQsNyArMzgxLDYgQEAKIHsKIAl1MzIgbG9vcF9jbnQgPSAwLCByZXRyaWVzX2NudCA9IDA7CiAJdTMyIHZjX3ZhbGlkLCB2Y19ieXBhc3NfdmFsX3JlZywgdmNfYnlwYXNzX3ZhbHVlOwotCXUxNiBtb2Q7CiAJdTggdGFyZ2V0X3ZzZWwsIGN1cnJlbnRfdnNlbDsKIAlpbnQgcmV0OwogCkBAIC01OTIsMjAgKzM4OCwxOSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQltb2QgPSB2ZGQtPnZjX3JlZy5wcm1fbW9kOwotCi0JdmNfdmFsaWQgPSB2ZGQtPnZjX3JlZy52YWxpZDsKLQl2Y19ieXBhc3NfdmFsX3JlZyA9IHZkZC0+dmNfcmVnLmJ5cGFzc192YWxfcmVnOwotCXZjX2J5cGFzc192YWx1ZSA9ICh0YXJnZXRfdnNlbCA8PCB2ZGQtPnZjX3JlZy5kYXRhX3NoaWZ0KSB8CisJdmNfdmFsaWQgPSB2ZGQtPnZjX2RhdGEtPnZjX2NvbW1vbi0+dmFsaWQ7CisJdmNfYnlwYXNzX3ZhbF9yZWcgPSB2ZGQtPnZjX2RhdGEtPnZjX2NvbW1vbi0+YnlwYXNzX3ZhbF9yZWc7CisJdmNfYnlwYXNzX3ZhbHVlID0gKHRhcmdldF92c2VsIDw8IHZkZC0+dmNfZGF0YS0+dmNfY29tbW9uLT5kYXRhX3NoaWZ0KSB8CiAJCQkodmRkLT5wbWljX2luZm8tPnBtaWNfcmVnIDw8Ci0JCQl2ZGQtPnZjX3JlZy5yZWdhZGRyX3NoaWZ0KSB8CisJCQl2ZGQtPnZjX2RhdGEtPnZjX2NvbW1vbi0+cmVnYWRkcl9zaGlmdCkgfAogCQkJKHZkZC0+cG1pY19pbmZvLT5pMmNfc2xhdmVfYWRkciA8PAotCQkJdmRkLT52Y19yZWcuc2xhdmVhZGRyX3NoaWZ0KTsKKwkJCXZkZC0+dmNfZGF0YS0+dmNfY29tbW9uLT5zbGF2ZWFkZHJfc2hpZnQpOwogCi0JdmRkLT53cml0ZV9yZWcodmNfYnlwYXNzX3ZhbHVlLCBtb2QsIHZjX2J5cGFzc192YWxfcmVnKTsKLQl2ZGQtPndyaXRlX3JlZyh2Y19ieXBhc3NfdmFsdWUgfCB2Y192YWxpZCwgbW9kLCB2Y19ieXBhc3NfdmFsX3JlZyk7CisJdmRkLT53cml0ZV9yZWcodmNfYnlwYXNzX3ZhbHVlLCBwcm1fbW9kX29mZnMsIHZjX2J5cGFzc192YWxfcmVnKTsKKwl2ZGQtPndyaXRlX3JlZyh2Y19ieXBhc3NfdmFsdWUgfCB2Y192YWxpZCwgcHJtX21vZF9vZmZzLAorCQkgICAgICAgdmNfYnlwYXNzX3ZhbF9yZWcpOwogCi0JdmNfYnlwYXNzX3ZhbHVlID0gdmRkLT5yZWFkX3JlZyhtb2QsIHZjX2J5cGFzc192YWxfcmVnKTsKKwl2Y19ieXBhc3NfdmFsdWUgPSB2ZGQtPnJlYWRfcmVnKHBybV9tb2Rfb2ZmcywgdmNfYnlwYXNzX3ZhbF9yZWcpOwogCS8qCiAJICogTG9vcCB0aWxsIHRoZSBieXBhc3MgY29tbWFuZCBpcyBhY2tub3dsZWRnZWQgZnJvbSB0aGUgU01QUy4KIAkgKiBOT1RFOiBUaGlzIGlzIGxlZ2FjeSBjb2RlLiBUaGUgbG9vcCBjb3VudCBhbmQgcmV0cnkgY291bnQgbmVlZHMKQEAgLTYyNCw3ICs0MTksOCBAQAogCQkJbG9vcF9jbnQgPSAwOwogCQkJdWRlbGF5KDEwKTsKIAkJfQotCQl2Y19ieXBhc3NfdmFsdWUgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmNfYnlwYXNzX3ZhbF9yZWcpOworCQl2Y19ieXBhc3NfdmFsdWUgPSB2ZGQtPnJlYWRfcmVnKHBybV9tb2Rfb2ZmcywKKwkJCQkJCXZjX2J5cGFzc192YWxfcmVnKTsKIAl9CiAKIAlfcG9zdF92b2x0X3NjYWxlKHZkZCwgdGFyZ2V0X3ZvbHQsIHRhcmdldF92c2VsLCBjdXJyZW50X3ZzZWwpOwpAQCAtNjM2LDcgKzQzMiw2IEBACiAJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZvbHQpCiB7CiAJdTMyIHZwY29uZmlnOwotCXUxNiBtb2QsIG9jcF9tb2Q7CiAJdTggdGFyZ2V0X3ZzZWwsIGN1cnJlbnRfdnNlbCwgcHJtX2lycXN0X3JlZzsKIAlpbnQgcmV0LCB0aW1lb3V0ID0gMDsKIApAQCAtNjQ0LDIwICs0MzksMTggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbW9kID0gdmRkLT52cF9yZWcucHJtX21vZDsKLQlvY3BfbW9kID0gdmRkLT5vY3BfbW9kOwotCXBybV9pcnFzdF9yZWcgPSB2ZGQtPnBybV9pcnFzdF9yZWc7CisJcHJtX2lycXN0X3JlZyA9IHZkZC0+dnBfZGF0YS0+cHJtX2lycXN0X2RhdGEtPnBybV9pcnFzdF9yZWc7CiAKIAkvKgogCSAqIENsZWFyIGFsbCBwZW5kaW5nIFRyYW5zYWN0aW9uRG9uZSBpbnRlcnJ1cHQvc3RhdHVzLiBUeXBpY2FsIGxhdGVuY3kKIAkgKiBpcyA8M3VzCiAJICovCiAJd2hpbGUgKHRpbWVvdXQrKyA8IFZQX1RSQU5YRE9ORV9USU1FT1VUKSB7Ci0JCXZkZC0+d3JpdGVfcmVnKHZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMsCi0JCQkJb2NwX21vZCwgcHJtX2lycXN0X3JlZyk7Ci0JCWlmICghKHZkZC0+cmVhZF9yZWcob2NwX21vZCwgcHJtX2lycXN0X3JlZykgJgotCQkJCXZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMpKQotCQkJCWJyZWFrOworCQl2ZGQtPndyaXRlX3JlZyh2ZGQtPnZwX2RhdGEtPnBybV9pcnFzdF9kYXRhLT50cmFueGRvbmVfc3RhdHVzLAorCQkJICAgICAgIHBybV9pcnFzdF9vY3BfbW9kX29mZnMsIHBybV9pcnFzdF9yZWcpOworCQlpZiAoISh2ZGQtPnJlYWRfcmVnKHBybV9pcnFzdF9vY3BfbW9kX29mZnMsIHBybV9pcnFzdF9yZWcpICYKKwkJICAgICAgdmRkLT52cF9kYXRhLT5wcm1faXJxc3RfZGF0YS0+dHJhbnhkb25lX3N0YXR1cykpCisJCQlicmVhazsKIAkJdWRlbGF5KDEpOwogCX0KIAlpZiAodGltZW91dCA+PSBWUF9UUkFOWERPTkVfVElNRU9VVCkgewpAQCAtNjY3LDMwICs0NjAsMzAgQEAKIAl9CiAKIAkvKiBDb25maWd1cmUgZm9yIFZQLUZvcmNlIFVwZGF0ZSAqLwotCXZwY29uZmlnID0gdmRkLT5yZWFkX3JlZyhtb2QsIHZkZC0+dnBfb2Zmcy52cGNvbmZpZyk7Ci0JdnBjb25maWcgJj0gfih2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dmRkIHwKLQkJCXZkZC0+dnBfcmVnLnZwY29uZmlnX2ZvcmNldXBkYXRlIHwKLQkJCXZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2b2x0YWdlX21hc2spOworCXZwY29uZmlnID0gdmRkLT5yZWFkX3JlZyhwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dnBjb25maWcpOworCXZwY29uZmlnICY9IH4odmRkLT52cF9kYXRhLT52cF9jb21tb24tPnZwY29uZmlnX2luaXR2ZGQgfAorCQkJdmRkLT52cF9kYXRhLT52cF9jb21tb24tPnZwY29uZmlnX2ZvcmNldXBkYXRlIHwKKwkJCXZkZC0+dnBfZGF0YS0+dnBfY29tbW9uLT52cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrKTsKIAl2cGNvbmZpZyB8PSAoKHRhcmdldF92c2VsIDw8Ci0JCQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9zaGlmdCkpOwotCXZkZC0+d3JpdGVfcmVnKHZwY29uZmlnLCBtb2QsIHZkZC0+dnBfb2Zmcy52cGNvbmZpZyk7CisJCQl2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnBjb25maWdfaW5pdHZvbHRhZ2Vfc2hpZnQpKTsKKwl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgcHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZwY29uZmlnKTsKIAogCS8qIFRyaWdnZXIgaW5pdFZERCB2YWx1ZSBjb3B5IHRvIHZvbHRhZ2UgcHJvY2Vzc29yICovCi0JdnBjb25maWcgfD0gdmRkLT52cF9yZWcudnBjb25maWdfaW5pdHZkZDsKLQl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgbW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCXZwY29uZmlnIHw9IHZkZC0+dnBfZGF0YS0+dnBfY29tbW9uLT52cGNvbmZpZ19pbml0dmRkOworCXZkZC0+d3JpdGVfcmVnKHZwY29uZmlnLCBwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dnBjb25maWcpOwogCiAJLyogRm9yY2UgdXBkYXRlIG9mIHZvbHRhZ2UgKi8KLQl2cGNvbmZpZyB8PSB2ZGQtPnZwX3JlZy52cGNvbmZpZ19mb3JjZXVwZGF0ZTsKLQl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgbW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCXZwY29uZmlnIHw9IHZkZC0+dnBfZGF0YS0+dnBfY29tbW9uLT52cGNvbmZpZ19mb3JjZXVwZGF0ZTsKKwl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgcHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZwY29uZmlnKTsKIAogCS8qCiAJICogV2FpdCBmb3IgVHJhbnNhY3Rpb25Eb25lLiBUeXBpY2FsIGxhdGVuY3kgaXMgPDIwMHVzLgogCSAqIERlcGVuZHMgb24gU01QU1dBSVRUSU1FTUlOL01BWCBhbmQgdm9sdGFnZSBjaGFuZ2UKIAkgKi8KIAl0aW1lb3V0ID0gMDsKLQlvbWFwX3Rlc3RfdGltZW91dCgodmRkLT5yZWFkX3JlZyhvY3BfbW9kLCBwcm1faXJxc3RfcmVnKSAmCi0JCQl2ZGQtPnZwX3JlZy50cmFueGRvbmVfc3RhdHVzKSwKLQkJCVZQX1RSQU5YRE9ORV9USU1FT1VULCB0aW1lb3V0KTsKKwlvbWFwX3Rlc3RfdGltZW91dCgodmRkLT5yZWFkX3JlZyhwcm1faXJxc3Rfb2NwX21vZF9vZmZzLCBwcm1faXJxc3RfcmVnKSAmCisJCQkgICB2ZGQtPnZwX2RhdGEtPnBybV9pcnFzdF9kYXRhLT50cmFueGRvbmVfc3RhdHVzKSwKKwkJCSAgVlBfVFJBTlhET05FX1RJTUVPVVQsIHRpbWVvdXQpOwogCWlmICh0aW1lb3V0ID49IFZQX1RSQU5YRE9ORV9USU1FT1VUKQogCQlwcl9lcnIoIiVzOiB2ZGRfJXMgVFJBTlhET05FIHRpbWVvdXQgZXhjZWVkZWQuIgogCQkJIlRSQU5YRE9ORSBuZXZlciBnb3Qgc2V0IGFmdGVyIHRoZSB2b2x0YWdlIHVwZGF0ZVxuIiwKQEAgLTcwNCwxMSArNDk3LDExIEBACiAJICovCiAJdGltZW91dCA9IDA7CiAJd2hpbGUgKHRpbWVvdXQrKyA8IFZQX1RSQU5YRE9ORV9USU1FT1VUKSB7Ci0JCXZkZC0+d3JpdGVfcmVnKHZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMsCi0JCQkJb2NwX21vZCwgcHJtX2lycXN0X3JlZyk7Ci0JCWlmICghKHZkZC0+cmVhZF9yZWcob2NwX21vZCwgcHJtX2lycXN0X3JlZykgJgotCQkJCXZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMpKQotCQkJCWJyZWFrOworCQl2ZGQtPndyaXRlX3JlZyh2ZGQtPnZwX2RhdGEtPnBybV9pcnFzdF9kYXRhLT50cmFueGRvbmVfc3RhdHVzLAorCQkJICAgICAgIHBybV9pcnFzdF9vY3BfbW9kX29mZnMsIHBybV9pcnFzdF9yZWcpOworCQlpZiAoISh2ZGQtPnJlYWRfcmVnKHBybV9pcnFzdF9vY3BfbW9kX29mZnMsIHBybV9pcnFzdF9yZWcpICYKKwkJICAgICAgdmRkLT52cF9kYXRhLT5wcm1faXJxc3RfZGF0YS0+dHJhbnhkb25lX3N0YXR1cykpCisJCQlicmVhazsKIAkJdWRlbGF5KDEpOwogCX0KIApAQCAtNzE3LDIyMiArNTEwLDk1IEBACiAJCQkidG8gY2xlYXIgdGhlIFRSQU5YRE9ORSBzdGF0dXNcbiIsCiAJCQlfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CiAKLQl2cGNvbmZpZyA9IHZkZC0+cmVhZF9yZWcobW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCXZwY29uZmlnID0gdmRkLT5yZWFkX3JlZyhwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dnBjb25maWcpOwogCS8qIENsZWFyIGluaXRWREQgY29weSB0cmlnZ2VyIGJpdCAqLwotCXZwY29uZmlnICY9IH52ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dmRkOzsKLQl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgbW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCXZwY29uZmlnICY9IH52ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnBjb25maWdfaW5pdHZkZDsKKwl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgcHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZwY29uZmlnKTsKIAkvKiBDbGVhciBmb3JjZSBiaXQgKi8KLQl2cGNvbmZpZyAmPSB+dmRkLT52cF9yZWcudnBjb25maWdfZm9yY2V1cGRhdGU7Ci0JdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwl2cGNvbmZpZyAmPSB+dmRkLT52cF9kYXRhLT52cF9jb21tb24tPnZwY29uZmlnX2ZvcmNldXBkYXRlOworCXZkZC0+d3JpdGVfcmVnKHZwY29uZmlnLCBwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dnBjb25maWcpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qIE9NQVAzIHNwZWNpZmljIHZvbHRhZ2UgaW5pdCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM192ZnNtX2luaXQoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKK3sKKwkvKgorCSAqIFZvbHRhZ2UgTWFuYWdlciBGU00gcGFyYW1ldGVycyBpbml0CisJICogWFhYIFRoaXMgZGF0YSBzaG91bGQgYmUgcGFzc2VkIGluIGZyb20gdGhlIGJvYXJkIGZpbGUKKwkgKi8KKwl2ZGQtPndyaXRlX3JlZyhPTUFQM19DTEtTRVRVUCwgcHJtX21vZF9vZmZzLCBPTUFQM19QUk1fQ0xLU0VUVVBfT0ZGU0VUKTsKKwl2ZGQtPndyaXRlX3JlZyhPTUFQM19WT0xUT0ZGU0VULCBwcm1fbW9kX29mZnMsCisJCSAgICAgICBPTUFQM19QUk1fVk9MVE9GRlNFVF9PRkZTRVQpOworCXZkZC0+d3JpdGVfcmVnKE9NQVAzX1ZPTFRTRVRVUDIsIHBybV9tb2Rfb2ZmcywKKwkJICAgICAgIE9NQVAzX1BSTV9WT0xUU0VUVVAyX09GRlNFVCk7Cit9CiAKLS8qCi0gKiBJbnRpYWxpemVzIHRoZSB2b2x0YWdlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHdpdGggdGhlIFBNSUMgYW5kIGJvYXJkCi0gKiBzcGVjaWZpYyBwYXJhbWV0ZXJzIGFuZCB2b2x0YWdlIHNldHVwIHRpbWVzIGZvciBPTUFQMy4KLSAqLwogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX3ZjX2luaXQoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKIHsKLQl1MzIgdmNfdmFsOwotCXUxNiBtb2Q7Ci0JdTggb25fdnNlbCwgb25scF92c2VsLCByZXRfdnNlbCwgb2ZmX3ZzZWw7CiAJc3RhdGljIGJvb2wgaXNfaW5pdGlhbGl6ZWQ7CisJdTggb25fdnNlbCwgb25scF92c2VsLCByZXRfdnNlbCwgb2ZmX3ZzZWw7CisJdTMyIHZjX3ZhbDsKIAotCWlmICghdmRkLT5wbWljX2luZm8gfHwgIXZkZC0+cG1pY19pbmZvLT51dl90b192c2VsKSB7Ci0JCXByX2VycigiJXM6IFBNSUMgaW5mbyByZXF1cmllZCB0byBjb25maWd1cmUgdmMgZm9yIgotCQkJInZkZF8lcyBub3QgcG9wdWxhdGVkLkhlbmNlIGNhbm5vdCBpbml0aWFsaXplIHZjXG4iLAotCQkJX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOworCWlmIChpc19pbml0aWFsaXplZCkKIAkJcmV0dXJuOwotCX0KLQotCWlmICghdmRkLT5yZWFkX3JlZyB8fCAhdmRkLT53cml0ZV9yZWcpIHsKLQkJcHJfZXJyKCIlczogTm8gcmVhZC93cml0ZSBBUEkgZm9yIGFjY2Vzc2luZyB2ZGRfJXMgcmVnc1xuIiwKLQkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCW1vZCA9IHZkZC0+dmNfcmVnLnBybV9tb2Q7Ci0KLQkvKiBTZXQgdXAgdGhlIFNNUFNfU0EoaTJjIHNsYXZlIGFkZHJlc3MgaW4gVkMgKi8KLQl2Y192YWwgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmRkLT52Y19yZWcuc21wc19zYV9yZWcpOwotCXZjX3ZhbCAmPSB+dmRkLT52Y19yZWcuc21wc19zYV9tYXNrOwotCXZjX3ZhbCB8PSB2ZGQtPnBtaWNfaW5mby0+aTJjX3NsYXZlX2FkZHIgPDwgdmRkLT52Y19yZWcuc21wc19zYV9zaGlmdDsKLQl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIG1vZCwgdmRkLT52Y19yZWcuc21wc19zYV9yZWcpOwotCi0JLyogU2V0dXAgdGhlIFZPTFJBKHBtaWMgcmVnIGFkZHIpIGluIFZDICovCi0JdmNfdmFsID0gdmRkLT5yZWFkX3JlZyhtb2QsIHZkZC0+dmNfcmVnLnNtcHNfdm9scmFfcmVnKTsKLQl2Y192YWwgJj0gfnZkZC0+dmNfcmVnLnNtcHNfdm9scmFfbWFzazsKLQl2Y192YWwgfD0gdmRkLT5wbWljX2luZm8tPnBtaWNfcmVnIDw8IHZkZC0+dmNfcmVnLnNtcHNfdm9scmFfc2hpZnQ7Ci0JdmRkLT53cml0ZV9yZWcodmNfdmFsLCBtb2QsIHZkZC0+dmNfcmVnLnNtcHNfdm9scmFfcmVnKTsKLQotCS8qQ29uZmlndXJlIHRoZSBzZXR1cCB0aW1lcyAqLwotCXZjX3ZhbCA9IHZkZC0+cmVhZF9yZWcobW9kLCB2ZGQtPnZjX3JlZy52b2x0c2V0dXBfcmVnKTsKLQl2Y192YWwgJj0gfnZkZC0+dmNfcmVnLnZvbHRzZXR1cF9tYXNrOwotCXZjX3ZhbCB8PSB2ZGQtPnBtaWNfaW5mby0+dm9sdF9zZXR1cF90aW1lIDw8Ci0JCQl2ZGQtPnZjX3JlZy52b2x0c2V0dXBfc2hpZnQ7Ci0JdmRkLT53cml0ZV9yZWcodmNfdmFsLCBtb2QsIHZkZC0+dmNfcmVnLnZvbHRzZXR1cF9yZWcpOwogCiAJLyogU2V0IHVwIHRoZSBvbiwgaW5hY3RpdmUsIHJldGVudGlvbiBhbmQgb2ZmIHZvbHRhZ2UgKi8KIAlvbl92c2VsID0gdmRkLT5wbWljX2luZm8tPnV2X3RvX3ZzZWwodmRkLT5wbWljX2luZm8tPm9uX3ZvbHQpOwogCW9ubHBfdnNlbCA9IHZkZC0+cG1pY19pbmZvLT51dl90b192c2VsKHZkZC0+cG1pY19pbmZvLT5vbmxwX3ZvbHQpOwogCXJldF92c2VsID0gdmRkLT5wbWljX2luZm8tPnV2X3RvX3ZzZWwodmRkLT5wbWljX2luZm8tPnJldF92b2x0KTsKIAlvZmZfdnNlbCA9IHZkZC0+cG1pY19pbmZvLT51dl90b192c2VsKHZkZC0+cG1pY19pbmZvLT5vZmZfdm9sdCk7Ci0JdmNfdmFsCT0gKChvbl92c2VsIDw8IHZkZC0+dmNfcmVnLmNtZF9vbl9zaGlmdCkgfAotCQkob25scF92c2VsIDw8IHZkZC0+dmNfcmVnLmNtZF9vbmxwX3NoaWZ0KSB8Ci0JCShyZXRfdnNlbCA8PCB2ZGQtPnZjX3JlZy5jbWRfcmV0X3NoaWZ0KSB8Ci0JCShvZmZfdnNlbCA8PCB2ZGQtPnZjX3JlZy5jbWRfb2ZmX3NoaWZ0KSk7Ci0JdmRkLT53cml0ZV9yZWcodmNfdmFsLCBtb2QsIHZkZC0+dmNfcmVnLmNtZHZhbF9yZWcpOworCXZjX3ZhbAk9ICgob25fdnNlbCA8PCB2ZGQtPnZjX2RhdGEtPnZjX2NvbW1vbi0+Y21kX29uX3NoaWZ0KSB8CisJCShvbmxwX3ZzZWwgPDwgdmRkLT52Y19kYXRhLT52Y19jb21tb24tPmNtZF9vbmxwX3NoaWZ0KSB8CisJCShyZXRfdnNlbCA8PCB2ZGQtPnZjX2RhdGEtPnZjX2NvbW1vbi0+Y21kX3JldF9zaGlmdCkgfAorCQkob2ZmX3ZzZWwgPDwgdmRkLT52Y19kYXRhLT52Y19jb21tb24tPmNtZF9vZmZfc2hpZnQpKTsKKwl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIHBybV9tb2Rfb2ZmcywgdmRkLT52Y19kYXRhLT5jbWR2YWxfcmVnKTsKIAotCWlmIChpc19pbml0aWFsaXplZCkKLQkJcmV0dXJuOwotCi0JLyogR2VuZXJpYyBWQyBwYXJhbWV0ZXJzIGluaXQgKi8KLQl2ZGQtPndyaXRlX3JlZyhPTUFQMzQzMF9DTUQxX01BU0sgfCBPTUFQMzQzMF9SQVYxX01BU0ssIG1vZCwKKwkvKgorCSAqIEdlbmVyaWMgVkMgcGFyYW1ldGVycyBpbml0CisJICogWFhYIFRoaXMgZGF0YSBzaG91bGQgYmUgYWJzdHJhY3RlZCBvdXQKKwkgKi8KKwl2ZGQtPndyaXRlX3JlZyhPTUFQMzQzMF9DTUQxX01BU0sgfCBPTUFQMzQzMF9SQVYxX01BU0ssIHBybV9tb2Rfb2ZmcywKIAkJCU9NQVAzX1BSTV9WQ19DSF9DT05GX09GRlNFVCk7Ci0JdmRkLT53cml0ZV9yZWcoT01BUDM0MzBfTUNPREVfU0hJRlQgfCBPTUFQMzQzMF9IU0VOX01BU0ssIG1vZCwKKwl2ZGQtPndyaXRlX3JlZyhPTUFQMzQzMF9NQ09ERV9TSElGVCB8IE9NQVAzNDMwX0hTRU5fTUFTSywgcHJtX21vZF9vZmZzLAogCQkJT01BUDNfUFJNX1ZDX0kyQ19DRkdfT0ZGU0VUKTsKLQl2ZGQtPndyaXRlX3JlZyhPTUFQM19DTEtTRVRVUCwgbW9kLCBPTUFQM19QUk1fQ0xLU0VUVVBfT0ZGU0VUKTsKLQl2ZGQtPndyaXRlX3JlZyhPTUFQM19WT0xUT0ZGU0VULCBtb2QsIE9NQVAzX1BSTV9WT0xUT0ZGU0VUX09GRlNFVCk7Ci0JdmRkLT53cml0ZV9yZWcoT01BUDNfVk9MVFNFVFVQMiwgbW9kLCBPTUFQM19QUk1fVk9MVFNFVFVQMl9PRkZTRVQpOworCisJb21hcDNfdmZzbV9pbml0KHZkZCk7CisKIAlpc19pbml0aWFsaXplZCA9IHRydWU7CiB9CiAKLS8qIFNldHMgdXAgYWxsIHRoZSBWREQgcmVsYXRlZCBpbmZvIGZvciBPTUFQMyAqLwotc3RhdGljIGludCBfX2luaXQgb21hcDNfdmRkX2RhdGFfY29uZmlndXJlKHN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQpCi17Ci0Jc3RydWN0IGNsayAqc3lzX2NrOwotCXUzMiBzeXNfY2xrX3NwZWVkLCB0aW1lb3V0X3ZhbCwgd2FpdHRpbWU7Ci0KLQlpZiAoIXZkZC0+cG1pY19pbmZvKSB7Ci0JCXByX2VycigiJXM6IFBNSUMgaW5mbyByZXF1cmllZCB0byBjb25maWd1cmUgdmRkXyVzIG5vdCIKLQkJCSJwb3B1bGF0ZWQuSGVuY2UgY2Fubm90IGluaXRpYWxpemUgdmRkXyVzXG4iLAotCQkJX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUsIHZkZC0+dm9sdGRtLm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIXN0cmNtcCh2ZGQtPnZvbHRkbS5uYW1lLCAibXB1IikpIHsKLQkJaWYgKGNwdV9pc19vbWFwMzYzMCgpKQotCQkJdmRkLT52b2x0X2RhdGEgPSBvbWFwMzZ4eF92ZGRtcHVfdm9sdF9kYXRhOwotCQllbHNlCi0JCQl2ZGQtPnZvbHRfZGF0YSA9IG9tYXAzNHh4X3ZkZG1wdV92b2x0X2RhdGE7Ci0KLQkJdmRkLT52cF9yZWcudHJhbnhkb25lX3N0YXR1cyA9IE9NQVAzNDMwX1ZQMV9UUkFOWERPTkVfU1RfTUFTSzsKLQkJdmRkLT52Y19yZWcuY21kdmFsX3JlZyA9IE9NQVAzX1BSTV9WQ19DTURfVkFMXzBfT0ZGU0VUOwotCQl2ZGQtPnZjX3JlZy5zbXBzX3NhX3NoaWZ0ID0gT01BUDM0MzBfUFJNX1ZDX1NNUFNfU0FfU0EwX1NISUZUOwotCQl2ZGQtPnZjX3JlZy5zbXBzX3NhX21hc2sgPSBPTUFQMzQzMF9QUk1fVkNfU01QU19TQV9TQTBfTUFTSzsKLQkJdmRkLT52Y19yZWcuc21wc192b2xyYV9zaGlmdCA9IE9NQVAzNDMwX1ZPTFJBMF9TSElGVDsKLQkJdmRkLT52Y19yZWcuc21wc192b2xyYV9tYXNrID0gT01BUDM0MzBfVk9MUkEwX01BU0s7Ci0JCXZkZC0+dmNfcmVnLnZvbHRzZXR1cF9zaGlmdCA9IE9NQVAzNDMwX1NFVFVQX1RJTUUxX1NISUZUOwotCQl2ZGQtPnZjX3JlZy52b2x0c2V0dXBfbWFzayA9IE9NQVAzNDMwX1NFVFVQX1RJTUUxX01BU0s7Ci0JfSBlbHNlIGlmICghc3RyY21wKHZkZC0+dm9sdGRtLm5hbWUsICJjb3JlIikpIHsKLQkJaWYgKGNwdV9pc19vbWFwMzYzMCgpKQotCQkJdmRkLT52b2x0X2RhdGEgPSBvbWFwMzZ4eF92ZGRjb3JlX3ZvbHRfZGF0YTsKLQkJZWxzZQotCQkJdmRkLT52b2x0X2RhdGEgPSBvbWFwMzR4eF92ZGRjb3JlX3ZvbHRfZGF0YTsKLQotCQl2ZGQtPnZwX3JlZy50cmFueGRvbmVfc3RhdHVzID0gT01BUDM0MzBfVlAyX1RSQU5YRE9ORV9TVF9NQVNLOwotCQl2ZGQtPnZjX3JlZy5jbWR2YWxfcmVnID0gT01BUDNfUFJNX1ZDX0NNRF9WQUxfMV9PRkZTRVQ7Ci0JCXZkZC0+dmNfcmVnLnNtcHNfc2Ffc2hpZnQgPSBPTUFQMzQzMF9QUk1fVkNfU01QU19TQV9TQTFfU0hJRlQ7Ci0JCXZkZC0+dmNfcmVnLnNtcHNfc2FfbWFzayA9IE9NQVAzNDMwX1BSTV9WQ19TTVBTX1NBX1NBMV9NQVNLOwotCQl2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX3NoaWZ0ID0gT01BUDM0MzBfVk9MUkExX1NISUZUOwotCQl2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX21hc2sgPSBPTUFQMzQzMF9WT0xSQTFfTUFTSzsKLQkJdmRkLT52Y19yZWcudm9sdHNldHVwX3NoaWZ0ID0gT01BUDM0MzBfU0VUVVBfVElNRTJfU0hJRlQ7Ci0JCXZkZC0+dmNfcmVnLnZvbHRzZXR1cF9tYXNrID0gT01BUDM0MzBfU0VUVVBfVElNRTJfTUFTSzsKLQl9IGVsc2UgewotCQlwcl93YXJuaW5nKCIlczogdmRkXyVzIGRvZXMgbm90IGV4aXNpdCBpbiBPTUFQM1xuIiwKLQkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBTeXMgY2xrIHJhdGUgaXMgcmVxdWlyZSB0byBjYWxjdWxhdGUgdnAgdGltZW91dCB2YWx1ZSBhbmQKLQkgKiBzbXBzd2FpdHRpbWVtaW4gYW5kIHNtcHN3YWl0dGltZW1heC4KLQkgKi8KLQlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKLQlpZiAoSVNfRVJSKHN5c19jaykpIHsKLQkJcHJfd2FybmluZygiJXM6IENvdWxkIG5vdCBnZXQgdGhlIHN5cyBjbGsgdG8gY2FsY3VsYXRlIgotCQkJInZhcmlvdXMgdmRkXyVzIHBhcmFtc1xuIiwgX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0Jc3lzX2Nsa19zcGVlZCA9IGNsa19nZXRfcmF0ZShzeXNfY2spOwotCWNsa19wdXQoc3lzX2NrKTsKLQkvKiBEaXZpZGUgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KLQlzeXNfY2xrX3NwZWVkIC89IDEwMDA7Ci0KLQkvKiBHZW5lcmljIHZvbHRhZ2UgcGFyYW1ldGVycyAqLwotCXZkZC0+Y3Vycl92b2x0ID0gMTIwMDAwMDsKLQl2ZGQtPm9jcF9tb2QgPSBPQ1BfTU9EOwotCXZkZC0+cHJtX2lycXN0X3JlZyA9IE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVDsKLQl2ZGQtPnJlYWRfcmVnID0gb21hcDNfdm9sdGFnZV9yZWFkX3JlZzsKLQl2ZGQtPndyaXRlX3JlZyA9IG9tYXAzX3ZvbHRhZ2Vfd3JpdGVfcmVnOwotCXZkZC0+dm9sdF9zY2FsZSA9IHZwX2ZvcmNldXBkYXRlX3NjYWxlX3ZvbHRhZ2U7Ci0JdmRkLT52cF9lbmFibGVkID0gZmFsc2U7Ci0KLQkvKiBWQyBwYXJhbWV0ZXJzICovCi0JdmRkLT52Y19yZWcucHJtX21vZCA9IE9NQVAzNDMwX0dSX01PRDsKLQl2ZGQtPnZjX3JlZy5zbXBzX3NhX3JlZyA9IE9NQVAzX1BSTV9WQ19TTVBTX1NBX09GRlNFVDsKLQl2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX3JlZyA9IE9NQVAzX1BSTV9WQ19TTVBTX1ZPTF9SQV9PRkZTRVQ7Ci0JdmRkLT52Y19yZWcuYnlwYXNzX3ZhbF9yZWcgPSBPTUFQM19QUk1fVkNfQllQQVNTX1ZBTF9PRkZTRVQ7Ci0JdmRkLT52Y19yZWcudm9sdHNldHVwX3JlZyA9IE9NQVAzX1BSTV9WT0xUU0VUVVAxX09GRlNFVDsKLQl2ZGQtPnZjX3JlZy5kYXRhX3NoaWZ0ID0gT01BUDM0MzBfREFUQV9TSElGVDsKLQl2ZGQtPnZjX3JlZy5zbGF2ZWFkZHJfc2hpZnQgPSBPTUFQMzQzMF9TTEFWRUFERFJfU0hJRlQ7Ci0JdmRkLT52Y19yZWcucmVnYWRkcl9zaGlmdCA9IE9NQVAzNDMwX1JFR0FERFJfU0hJRlQ7Ci0JdmRkLT52Y19yZWcudmFsaWQgPSBPTUFQMzQzMF9WQUxJRF9NQVNLOwotCXZkZC0+dmNfcmVnLmNtZF9vbl9zaGlmdCA9IE9NQVAzNDMwX1ZDX0NNRF9PTl9TSElGVDsKLQl2ZGQtPnZjX3JlZy5jbWRfb25fbWFzayA9IE9NQVAzNDMwX1ZDX0NNRF9PTl9NQVNLOwotCXZkZC0+dmNfcmVnLmNtZF9vbmxwX3NoaWZ0ID0gT01BUDM0MzBfVkNfQ01EX09OTFBfU0hJRlQ7Ci0JdmRkLT52Y19yZWcuY21kX3JldF9zaGlmdCA9IE9NQVAzNDMwX1ZDX0NNRF9SRVRfU0hJRlQ7Ci0JdmRkLT52Y19yZWcuY21kX29mZl9zaGlmdCA9IE9NQVAzNDMwX1ZDX0NNRF9PRkZfU0hJRlQ7Ci0KLQl2ZGQtPnZwX3JlZy5wcm1fbW9kID0gT01BUDM0MzBfR1JfTU9EOwotCi0JLyogVlBDT05GSUcgYml0IGZpZWxkcyAqLwotCXZkZC0+dnBfcmVnLnZwY29uZmlnX2Vycm9yb2Zmc2V0ID0gKHZkZC0+cG1pY19pbmZvLT52cF9lcnJvcm9mZnNldCA8PAotCQkJCSBPTUFQMzQzMF9FUlJPUk9GRlNFVF9TSElGVCk7Ci0JdmRkLT52cF9yZWcudnBjb25maWdfZXJyb3JnYWluX21hc2sgPSBPTUFQMzQzMF9FUlJPUkdBSU5fTUFTSzsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW5fc2hpZnQgPSBPTUFQMzQzMF9FUlJPUkdBSU5fU0hJRlQ7Ci0JdmRkLT52cF9yZWcudnBjb25maWdfaW5pdHZvbHRhZ2Vfc2hpZnQgPSBPTUFQMzQzMF9JTklUVk9MVEFHRV9TSElGVDsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrID0gT01BUDM0MzBfSU5JVFZPTFRBR0VfTUFTSzsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ190aW1lb3V0ZW4gPSBPTUFQMzQzMF9USU1FT1VURU5fTUFTSzsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dmRkID0gT01BUDM0MzBfSU5JVFZERF9NQVNLOwotCXZkZC0+dnBfcmVnLnZwY29uZmlnX2ZvcmNldXBkYXRlID0gT01BUDM0MzBfRk9SQ0VVUERBVEVfTUFTSzsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ192cGVuYWJsZSA9IE9NQVAzNDMwX1ZQRU5BQkxFX01BU0s7Ci0KLQkvKiBWU1RFUE1JTiBWU1RFUE1BWCBiaXQgZmllbGRzICovCi0Jd2FpdHRpbWUgPSAoKHZkZC0+cG1pY19pbmZvLT5zdGVwX3NpemUgLyB2ZGQtPnBtaWNfaW5mby0+c2xld19yYXRlKSAqCi0JCQkJc3lzX2Nsa19zcGVlZCkgLyAxMDAwOwotCXZkZC0+dnBfcmVnLnZzdGVwbWluX3NtcHN3YWl0dGltZW1pbiA9IHdhaXR0aW1lOwotCXZkZC0+dnBfcmVnLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heCA9IHdhaXR0aW1lOwotCXZkZC0+dnBfcmVnLnZzdGVwbWluX3N0ZXBtaW4gPSB2ZGQtPnBtaWNfaW5mby0+dnBfdnN0ZXBtaW47Ci0JdmRkLT52cF9yZWcudnN0ZXBtYXhfc3RlcG1heCA9IHZkZC0+cG1pY19pbmZvLT52cF92c3RlcG1heDsKLQl2ZGQtPnZwX3JlZy52c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW5fc2hpZnQgPQotCQkJCU9NQVAzNDMwX1NNUFNXQUlUVElNRU1JTl9TSElGVDsKLQl2ZGQtPnZwX3JlZy52c3RlcG1heF9zbXBzd2FpdHRpbWVtYXhfc2hpZnQgPQotCQkJCU9NQVAzNDMwX1NNUFNXQUlUVElNRU1BWF9TSElGVDsKLQl2ZGQtPnZwX3JlZy52c3RlcG1pbl9zdGVwbWluX3NoaWZ0ID0gT01BUDM0MzBfVlNURVBNSU5fU0hJRlQ7Ci0JdmRkLT52cF9yZWcudnN0ZXBtYXhfc3RlcG1heF9zaGlmdCA9IE9NQVAzNDMwX1ZTVEVQTUFYX1NISUZUOwotCi0JLyogVkxJTUlUVE8gYml0IGZpZWxkcyAqLwotCXRpbWVvdXRfdmFsID0gKHN5c19jbGtfc3BlZWQgKiB2ZGQtPnBtaWNfaW5mby0+dnBfdGltZW91dF91cykgLyAxMDAwOwotCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3RpbWVvdXQgPSB0aW1lb3V0X3ZhbDsKLQl2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtaW4gPSB2ZGQtPnBtaWNfaW5mby0+dnBfdmRkbWluOwotCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1heCA9IHZkZC0+cG1pY19pbmZvLT52cF92ZGRtYXg7Ci0JdmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWluX3NoaWZ0ID0gT01BUDM0MzBfVkRETUlOX1NISUZUOwotCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1heF9zaGlmdCA9IE9NQVAzNDMwX1ZERE1BWF9TSElGVDsKLQl2ZGQtPnZwX3JlZy52bGltaXR0b190aW1lb3V0X3NoaWZ0ID0gT01BUDM0MzBfVElNRU9VVF9TSElGVDsKLQotCXJldHVybiAwOwotfQogCiAvKiBPTUFQNCBzcGVjaWZpYyB2b2x0YWdlIGluaXQgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDRfdmNfaW5pdChzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkKQogewotCXUzMiB2Y192YWw7Ci0JdTE2IG1vZDsKIAlzdGF0aWMgYm9vbCBpc19pbml0aWFsaXplZDsKKwl1MzIgdmNfdmFsOworCisJaWYgKGlzX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwkvKiBUT0RPOiBDb25maWd1cmUgc2V0dXAgdGltZXMgYW5kIENNRF9WQUwgdmFsdWVzKi8KKworCS8qCisJICogR2VuZXJpYyBWQyBwYXJhbWV0ZXJzIGluaXQKKwkgKiBYWFggVGhpcyBkYXRhIHNob3VsZCBiZSBhYnN0cmFjdGVkIG91dAorCSAqLworCXZjX3ZhbCA9IChPTUFQNDQzMF9SQVZfVkREX01QVV9MX01BU0sgfCBPTUFQNDQzMF9DTURfVkREX01QVV9MX01BU0sgfAorCQkgIE9NQVA0NDMwX1JBVl9WRERfSVZBX0xfTUFTSyB8IE9NQVA0NDMwX0NNRF9WRERfSVZBX0xfTUFTSyB8CisJCSAgT01BUDQ0MzBfUkFWX1ZERF9DT1JFX0xfTUFTSyB8IE9NQVA0NDMwX0NNRF9WRERfQ09SRV9MX01BU0spOworCXZkZC0+d3JpdGVfcmVnKHZjX3ZhbCwgcHJtX21vZF9vZmZzLCBPTUFQNF9QUk1fVkNfQ0ZHX0NIQU5ORUxfT0ZGU0VUKTsKKworCS8qIFhYWCBUaGVzZSBhcmUgbWFnaWMgbnVtYmVycyBhbmQgZG8gbm90IGJlbG9uZyEgKi8KKwl2Y192YWwgPSAoMHg2MCA8PCBPTUFQNDQzMF9TQ0xMX1NISUZUIHwgMHgyNiA8PCBPTUFQNDQzMF9TQ0xIX1NISUZUKTsKKwl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIHBybV9tb2Rfb2ZmcywgT01BUDRfUFJNX1ZDX0NGR19JMkNfQ0xLX09GRlNFVCk7CisKKwlpc19pbml0aWFsaXplZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3ZjX2luaXQoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKK3sKKwl1MzIgdmNfdmFsOwogCiAJaWYgKCF2ZGQtPnBtaWNfaW5mbyB8fCAhdmRkLT5wbWljX2luZm8tPnV2X3RvX3ZzZWwpIHsKIAkJcHJfZXJyKCIlczogUE1JQyBpbmZvIHJlcXVyaWVkIHRvIGNvbmZpZ3VyZSB2YyBmb3IiCkBAIC05NDcsMTczICs2MTMsNjEgQEAKIAkJcmV0dXJuOwogCX0KIAotCW1vZCA9IHZkZC0+dmNfcmVnLnBybV9tb2Q7Ci0KIAkvKiBTZXQgdXAgdGhlIFNNUFNfU0EoaTJjIHNsYXZlIGFkZHJlc3MgaW4gVkMgKi8KLQl2Y192YWwgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmRkLT52Y19yZWcuc21wc19zYV9yZWcpOwotCXZjX3ZhbCAmPSB+dmRkLT52Y19yZWcuc21wc19zYV9tYXNrOwotCXZjX3ZhbCB8PSB2ZGQtPnBtaWNfaW5mby0+aTJjX3NsYXZlX2FkZHIgPDwgdmRkLT52Y19yZWcuc21wc19zYV9zaGlmdDsKLQl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIG1vZCwgdmRkLT52Y19yZWcuc21wc19zYV9yZWcpOworCXZjX3ZhbCA9IHZkZC0+cmVhZF9yZWcocHJtX21vZF9vZmZzLAorCQkJICAgICAgIHZkZC0+dmNfZGF0YS0+dmNfY29tbW9uLT5zbXBzX3NhX3JlZyk7CisJdmNfdmFsICY9IH52ZGQtPnZjX2RhdGEtPnNtcHNfc2FfbWFzazsKKwl2Y192YWwgfD0gdmRkLT5wbWljX2luZm8tPmkyY19zbGF2ZV9hZGRyIDw8IHZkZC0+dmNfZGF0YS0+c21wc19zYV9zaGlmdDsKKwl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIHBybV9tb2Rfb2ZmcywKKwkJICAgICAgIHZkZC0+dmNfZGF0YS0+dmNfY29tbW9uLT5zbXBzX3NhX3JlZyk7CiAKIAkvKiBTZXR1cCB0aGUgVk9MUkEocG1pYyByZWcgYWRkcikgaW4gVkMgKi8KLQl2Y192YWwgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmRkLT52Y19yZWcuc21wc192b2xyYV9yZWcpOwotCXZjX3ZhbCAmPSB+dmRkLT52Y19yZWcuc21wc192b2xyYV9tYXNrOwotCXZjX3ZhbCB8PSB2ZGQtPnBtaWNfaW5mby0+cG1pY19yZWcgPDwgdmRkLT52Y19yZWcuc21wc192b2xyYV9zaGlmdDsKLQl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIG1vZCwgdmRkLT52Y19yZWcuc21wc192b2xyYV9yZWcpOworCXZjX3ZhbCA9IHZkZC0+cmVhZF9yZWcocHJtX21vZF9vZmZzLAorCQkJICAgICAgIHZkZC0+dmNfZGF0YS0+dmNfY29tbW9uLT5zbXBzX3ZvbHJhX3JlZyk7CisJdmNfdmFsICY9IH52ZGQtPnZjX2RhdGEtPnNtcHNfdm9scmFfbWFzazsKKwl2Y192YWwgfD0gdmRkLT5wbWljX2luZm8tPnBtaWNfcmVnIDw8IHZkZC0+dmNfZGF0YS0+c21wc192b2xyYV9zaGlmdDsKKwl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIHBybV9tb2Rfb2ZmcywKKwkJICAgICAgIHZkZC0+dmNfZGF0YS0+dmNfY29tbW9uLT5zbXBzX3ZvbHJhX3JlZyk7CiAKLQkvKiBUT0RPOiBDb25maWd1cmUgc2V0dXAgdGltZXMgYW5kIENNRF9WQUwgdmFsdWVzKi8KKwkvKiBDb25maWd1cmUgdGhlIHNldHVwIHRpbWVzICovCisJdmNfdmFsID0gdmRkLT5yZWFkX3JlZyhwcm1fbW9kX29mZnMsIHZkZC0+dmZzbS0+dm9sdHNldHVwX3JlZyk7CisJdmNfdmFsICY9IH52ZGQtPnZmc20tPnZvbHRzZXR1cF9tYXNrOworCXZjX3ZhbCB8PSB2ZGQtPnBtaWNfaW5mby0+dm9sdF9zZXR1cF90aW1lIDw8CisJCQl2ZGQtPnZmc20tPnZvbHRzZXR1cF9zaGlmdDsKKwl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIHBybV9tb2Rfb2ZmcywgdmRkLT52ZnNtLT52b2x0c2V0dXBfcmVnKTsKIAotCWlmIChpc19pbml0aWFsaXplZCkKLQkJcmV0dXJuOwotCi0JLyogR2VuZXJpYyBWQyBwYXJhbWV0ZXJzIGluaXQgKi8KLQl2Y192YWwgPSAoT01BUDQ0MzBfUkFWX1ZERF9NUFVfTF9NQVNLIHwgT01BUDQ0MzBfQ01EX1ZERF9NUFVfTF9NQVNLIHwKLQkJT01BUDQ0MzBfUkFWX1ZERF9JVkFfTF9NQVNLIHwgT01BUDQ0MzBfQ01EX1ZERF9JVkFfTF9NQVNLIHwKLQkJT01BUDQ0MzBfUkFWX1ZERF9DT1JFX0xfTUFTSyB8IE9NQVA0NDMwX0NNRF9WRERfQ09SRV9MX01BU0spOwotCXZkZC0+d3JpdGVfcmVnKHZjX3ZhbCwgbW9kLCBPTUFQNF9QUk1fVkNfQ0ZHX0NIQU5ORUxfT0ZGU0VUKTsKLQotCXZjX3ZhbCA9ICgweDYwIDw8IE9NQVA0NDMwX1NDTExfU0hJRlQgfCAweDI2IDw8IE9NQVA0NDMwX1NDTEhfU0hJRlQpOwotCXZkZC0+d3JpdGVfcmVnKHZjX3ZhbCwgbW9kLCBPTUFQNF9QUk1fVkNfQ0ZHX0kyQ19DTEtfT0ZGU0VUKTsKLQotCWlzX2luaXRpYWxpemVkID0gdHJ1ZTsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXAzX3ZjX2luaXQodmRkKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJb21hcDRfdmNfaW5pdCh2ZGQpOwogfQogCi0vKiBTZXRzIHVwIGFsbCB0aGUgVkREIHJlbGF0ZWQgaW5mbyBmb3IgT01BUDQgKi8KLXN0YXRpYyBpbnQgX19pbml0IG9tYXA0X3ZkZF9kYXRhX2NvbmZpZ3VyZShzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkKQorc3RhdGljIGludCBfX2luaXQgb21hcF92ZGRfZGF0YV9jb25maWd1cmUoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKIHsKLQlzdHJ1Y3QgY2xrICpzeXNfY2s7Ci0JdTMyIHN5c19jbGtfc3BlZWQsIHRpbWVvdXRfdmFsLCB3YWl0dGltZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWlmICghdmRkLT5wbWljX2luZm8pIHsKIAkJcHJfZXJyKCIlczogUE1JQyBpbmZvIHJlcXVyaWVkIHRvIGNvbmZpZ3VyZSB2ZGRfJXMgbm90IgogCQkJInBvcHVsYXRlZC5IZW5jZSBjYW5ub3QgaW5pdGlhbGl6ZSB2ZGRfJXNcbiIsCiAJCQlfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSwgdmRkLT52b2x0ZG0ubmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG92ZGNfb3V0OwogCX0KIAotCWlmICghc3RyY21wKHZkZC0+dm9sdGRtLm5hbWUsICJtcHUiKSkgewotCQl2ZGQtPnZvbHRfZGF0YSA9IG9tYXA0NHh4X3ZkZF9tcHVfdm9sdF9kYXRhOwotCQl2ZGQtPnZwX3JlZy50cmFueGRvbmVfc3RhdHVzID0KLQkJCQlPTUFQNDQzMF9WUF9NUFVfVFJBTlhET05FX1NUX01BU0s7Ci0JCXZkZC0+dmNfcmVnLmNtZHZhbF9yZWcgPSBPTUFQNF9QUk1fVkNfVkFMX0NNRF9WRERfTVBVX0xfT0ZGU0VUOwotCQl2ZGQtPnZjX3JlZy5zbXBzX3NhX3NoaWZ0ID0KLQkJCQlPTUFQNDQzMF9TQV9WRERfTVBVX0xfUFJNX1ZDX1NNUFNfU0FfU0hJRlQ7Ci0JCXZkZC0+dmNfcmVnLnNtcHNfc2FfbWFzayA9Ci0JCQkJT01BUDQ0MzBfU0FfVkREX01QVV9MX1BSTV9WQ19TTVBTX1NBX01BU0s7Ci0JCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfc2hpZnQgPSBPTUFQNDQzMF9WT0xSQV9WRERfTVBVX0xfU0hJRlQ7Ci0JCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfbWFzayA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9NUFVfTF9NQVNLOwotCQl2ZGQtPnZjX3JlZy52b2x0c2V0dXBfcmVnID0KLQkJCQlPTUFQNF9QUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVBfT0ZGU0VUOwotCQl2ZGQtPnBybV9pcnFzdF9yZWcgPSBPTUFQNF9QUk1fSVJRU1RBVFVTX01QVV8yX09GRlNFVDsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodmRkLT52b2x0ZG0ubmFtZSwgImNvcmUiKSkgewotCQl2ZGQtPnZvbHRfZGF0YSA9IG9tYXA0NHh4X3ZkZF9jb3JlX3ZvbHRfZGF0YTsKLQkJdmRkLT52cF9yZWcudHJhbnhkb25lX3N0YXR1cyA9Ci0JCQkJT01BUDQ0MzBfVlBfQ09SRV9UUkFOWERPTkVfU1RfTUFTSzsKLQkJdmRkLT52Y19yZWcuY21kdmFsX3JlZyA9Ci0JCQkJT01BUDRfUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTF9PRkZTRVQ7Ci0JCXZkZC0+dmNfcmVnLnNtcHNfc2Ffc2hpZnQgPSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MXzBfNl9TSElGVDsKLQkJdmRkLT52Y19yZWcuc21wc19zYV9tYXNrID0gT01BUDQ0MzBfU0FfVkREX0NPUkVfTF8wXzZfTUFTSzsKLQkJdmRkLT52Y19yZWcuc21wc192b2xyYV9zaGlmdCA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9DT1JFX0xfU0hJRlQ7Ci0JCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfbWFzayA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9DT1JFX0xfTUFTSzsKLQkJdmRkLT52Y19yZWcudm9sdHNldHVwX3JlZyA9Ci0JCQkJT01BUDRfUFJNX1ZPTFRTRVRVUF9DT1JFX1JFVF9TTEVFUF9PRkZTRVQ7Ci0JCXZkZC0+cHJtX2lycXN0X3JlZyA9IE9NQVA0X1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVDsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodmRkLT52b2x0ZG0ubmFtZSwgIml2YSIpKSB7Ci0JCXZkZC0+dm9sdF9kYXRhID0gb21hcDQ0eHhfdmRkX2l2YV92b2x0X2RhdGE7Ci0JCXZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMgPQotCQkJCU9NQVA0NDMwX1ZQX0lWQV9UUkFOWERPTkVfU1RfTUFTSzsKLQkJdmRkLT52Y19yZWcuY21kdmFsX3JlZyA9IE9NQVA0X1BSTV9WQ19WQUxfQ01EX1ZERF9JVkFfTF9PRkZTRVQ7Ci0JCXZkZC0+dmNfcmVnLnNtcHNfc2Ffc2hpZnQgPQotCQkJCU9NQVA0NDMwX1NBX1ZERF9JVkFfTF9QUk1fVkNfU01QU19TQV9TSElGVDsKLQkJdmRkLT52Y19yZWcuc21wc19zYV9tYXNrID0KLQkJCQlPTUFQNDQzMF9TQV9WRERfSVZBX0xfUFJNX1ZDX1NNUFNfU0FfTUFTSzsKLQkJdmRkLT52Y19yZWcuc21wc192b2xyYV9zaGlmdCA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9JVkFfTF9TSElGVDsKLQkJdmRkLT52Y19yZWcuc21wc192b2xyYV9tYXNrID0gT01BUDQ0MzBfVk9MUkFfVkREX0lWQV9MX01BU0s7Ci0JCXZkZC0+dmNfcmVnLnZvbHRzZXR1cF9yZWcgPQotCQkJCU9NQVA0X1BSTV9WT0xUU0VUVVBfSVZBX1JFVF9TTEVFUF9PRkZTRVQ7Ci0JCXZkZC0+cHJtX2lycXN0X3JlZyA9IE9NQVA0X1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVDsKLQl9IGVsc2UgewotCQlwcl93YXJuaW5nKCIlczogdmRkXyVzIGRvZXMgbm90IGV4aXNpdCBpbiBPTUFQNFxuIiwKLQkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKElTX0VSUl9WQUxVRShfY29uZmlnX2NvbW1vbl92ZGRfZGF0YSh2ZGQpKSkKKwkJZ290byBvdmRjX291dDsKKworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQl2ZGQtPnJlYWRfcmVnID0gb21hcDNfdm9sdGFnZV9yZWFkX3JlZzsKKwkJdmRkLT53cml0ZV9yZWcgPSBvbWFwM192b2x0YWdlX3dyaXRlX3JlZzsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCXZkZC0+cmVhZF9yZWcgPSBvbWFwNF92b2x0YWdlX3JlYWRfcmVnOworCQl2ZGQtPndyaXRlX3JlZyA9IG9tYXA0X3ZvbHRhZ2Vfd3JpdGVfcmVnOworCQlyZXQgPSAwOwogCX0KIAotCS8qCi0JICogU3lzIGNsayByYXRlIGlzIHJlcXVpcmUgdG8gY2FsY3VsYXRlIHZwIHRpbWVvdXQgdmFsdWUgYW5kCi0JICogc21wc3dhaXR0aW1lbWluIGFuZCBzbXBzd2FpdHRpbWVtYXguCi0JICovCi0Jc3lzX2NrID0gY2xrX2dldChOVUxMLCAic3lzX2Nsa2luX2NrIik7Ci0JaWYgKElTX0VSUihzeXNfY2spKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBDb3VsZCBub3QgZ2V0IHRoZSBzeXMgY2xrIHRvIGNhbGN1bGF0ZSIKLQkJCSJ2YXJpb3VzIHZkZF8lcyBwYXJhbXNcbiIsIF9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXN5c19jbGtfc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc3lzX2NrKTsKLQljbGtfcHV0KHN5c19jayk7Ci0JLyogRGl2aWRlIHRvIGF2b2lkIG92ZXJmbG93ICovCi0Jc3lzX2Nsa19zcGVlZCAvPSAxMDAwOwotCi0JLyogR2VuZXJpYyB2b2x0YWdlIHBhcmFtZXRlcnMgKi8KLQl2ZGQtPmN1cnJfdm9sdCA9IDEyMDAwMDA7Ci0JdmRkLT5vY3BfbW9kID0gT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfSU5TVDsKLQl2ZGQtPnJlYWRfcmVnID0gb21hcDRfdm9sdGFnZV9yZWFkX3JlZzsKLQl2ZGQtPndyaXRlX3JlZyA9IG9tYXA0X3ZvbHRhZ2Vfd3JpdGVfcmVnOwotCXZkZC0+dm9sdF9zY2FsZSA9IHZwX2ZvcmNldXBkYXRlX3NjYWxlX3ZvbHRhZ2U7Ci0JdmRkLT52cF9lbmFibGVkID0gZmFsc2U7Ci0KLQkvKiBWQyBwYXJhbWV0ZXJzICovCi0JdmRkLT52Y19yZWcucHJtX21vZCA9IE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVDsKLQl2ZGQtPnZjX3JlZy5zbXBzX3NhX3JlZyA9IE9NQVA0X1BSTV9WQ19TTVBTX1NBX09GRlNFVDsKLQl2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX3JlZyA9IE9NQVA0X1BSTV9WQ19WQUxfU01QU19SQV9WT0xfT0ZGU0VUOwotCXZkZC0+dmNfcmVnLmJ5cGFzc192YWxfcmVnID0gT01BUDRfUFJNX1ZDX1ZBTF9CWVBBU1NfT0ZGU0VUOwotCXZkZC0+dmNfcmVnLmRhdGFfc2hpZnQgPSBPTUFQNDQzMF9EQVRBX1NISUZUOwotCXZkZC0+dmNfcmVnLnNsYXZlYWRkcl9zaGlmdCA9IE9NQVA0NDMwX1NMQVZFQUREUl9TSElGVDsKLQl2ZGQtPnZjX3JlZy5yZWdhZGRyX3NoaWZ0ID0gT01BUDQ0MzBfUkVHQUREUl9TSElGVDsKLQl2ZGQtPnZjX3JlZy52YWxpZCA9IE9NQVA0NDMwX1ZBTElEX01BU0s7Ci0JdmRkLT52Y19yZWcuY21kX29uX3NoaWZ0ID0gT01BUDQ0MzBfT05fU0hJRlQ7Ci0JdmRkLT52Y19yZWcuY21kX29uX21hc2sgPSBPTUFQNDQzMF9PTl9NQVNLOwotCXZkZC0+dmNfcmVnLmNtZF9vbmxwX3NoaWZ0ID0gT01BUDQ0MzBfT05MUF9TSElGVDsKLQl2ZGQtPnZjX3JlZy5jbWRfcmV0X3NoaWZ0ID0gT01BUDQ0MzBfUkVUX1NISUZUOwotCXZkZC0+dmNfcmVnLmNtZF9vZmZfc2hpZnQgPSBPTUFQNDQzMF9PRkZfU0hJRlQ7Ci0KLQl2ZGQtPnZwX3JlZy5wcm1fbW9kID0gT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNUOwotCi0JLyogVlBDT05GSUcgYml0IGZpZWxkcyAqLwotCXZkZC0+dnBfcmVnLnZwY29uZmlnX2Vycm9yb2Zmc2V0ID0gKHZkZC0+cG1pY19pbmZvLT52cF9lcnJvcm9mZnNldCA8PAotCQkJCSBPTUFQNDQzMF9FUlJPUk9GRlNFVF9TSElGVCk7Ci0JdmRkLT52cF9yZWcudnBjb25maWdfZXJyb3JnYWluX21hc2sgPSBPTUFQNDQzMF9FUlJPUkdBSU5fTUFTSzsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW5fc2hpZnQgPSBPTUFQNDQzMF9FUlJPUkdBSU5fU0hJRlQ7Ci0JdmRkLT52cF9yZWcudnBjb25maWdfaW5pdHZvbHRhZ2Vfc2hpZnQgPSBPTUFQNDQzMF9JTklUVk9MVEFHRV9TSElGVDsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrID0gT01BUDQ0MzBfSU5JVFZPTFRBR0VfTUFTSzsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ190aW1lb3V0ZW4gPSBPTUFQNDQzMF9USU1FT1VURU5fTUFTSzsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dmRkID0gT01BUDQ0MzBfSU5JVFZERF9NQVNLOwotCXZkZC0+dnBfcmVnLnZwY29uZmlnX2ZvcmNldXBkYXRlID0gT01BUDQ0MzBfRk9SQ0VVUERBVEVfTUFTSzsKLQl2ZGQtPnZwX3JlZy52cGNvbmZpZ192cGVuYWJsZSA9IE9NQVA0NDMwX1ZQRU5BQkxFX01BU0s7Ci0KLQkvKiBWU1RFUE1JTiBWU1RFUE1BWCBiaXQgZmllbGRzICovCi0Jd2FpdHRpbWUgPSAoKHZkZC0+cG1pY19pbmZvLT5zdGVwX3NpemUgLyB2ZGQtPnBtaWNfaW5mby0+c2xld19yYXRlKSAqCi0JCQkJc3lzX2Nsa19zcGVlZCkgLyAxMDAwOwotCXZkZC0+dnBfcmVnLnZzdGVwbWluX3NtcHN3YWl0dGltZW1pbiA9IHdhaXR0aW1lOwotCXZkZC0+dnBfcmVnLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heCA9IHdhaXR0aW1lOwotCXZkZC0+dnBfcmVnLnZzdGVwbWluX3N0ZXBtaW4gPSB2ZGQtPnBtaWNfaW5mby0+dnBfdnN0ZXBtaW47Ci0JdmRkLT52cF9yZWcudnN0ZXBtYXhfc3RlcG1heCA9IHZkZC0+cG1pY19pbmZvLT52cF92c3RlcG1heDsKLQl2ZGQtPnZwX3JlZy52c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW5fc2hpZnQgPQotCQkJT01BUDQ0MzBfU01QU1dBSVRUSU1FTUlOX1NISUZUOwotCXZkZC0+dnBfcmVnLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heF9zaGlmdCA9Ci0JCQlPTUFQNDQzMF9TTVBTV0FJVFRJTUVNQVhfU0hJRlQ7Ci0JdmRkLT52cF9yZWcudnN0ZXBtaW5fc3RlcG1pbl9zaGlmdCA9IE9NQVA0NDMwX1ZTVEVQTUlOX1NISUZUOwotCXZkZC0+dnBfcmVnLnZzdGVwbWF4X3N0ZXBtYXhfc2hpZnQgPSBPTUFQNDQzMF9WU1RFUE1BWF9TSElGVDsKLQotCS8qIFZMSU1JVFRPIGJpdCBmaWVsZHMgKi8KLQl0aW1lb3V0X3ZhbCA9IChzeXNfY2xrX3NwZWVkICogdmRkLT5wbWljX2luZm8tPnZwX3RpbWVvdXRfdXMpIC8gMTAwMDsKLQl2ZGQtPnZwX3JlZy52bGltaXR0b190aW1lb3V0ID0gdGltZW91dF92YWw7Ci0JdmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWluID0gdmRkLT5wbWljX2luZm8tPnZwX3ZkZG1pbjsKLQl2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtYXggPSB2ZGQtPnBtaWNfaW5mby0+dnBfdmRkbWF4OwotCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1pbl9zaGlmdCA9IE9NQVA0NDMwX1ZERE1JTl9TSElGVDsKLQl2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtYXhfc2hpZnQgPSBPTUFQNDQzMF9WRERNQVhfU0hJRlQ7Ci0JdmRkLT52cF9yZWcudmxpbWl0dG9fdGltZW91dF9zaGlmdCA9IE9NQVA0NDMwX1RJTUVPVVRfU0hJRlQ7Ci0KLQlyZXR1cm4gMDsKK292ZGNfb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIC8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KQEAgLTExNjEsOCArNzE1LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JY3Vycl92c2VsID0gdmRkLT5yZWFkX3JlZyh2ZGQtPnZwX3JlZy5wcm1fbW9kLAotCQkJdmRkLT52cF9vZmZzLnZvbHRhZ2UpOworCWN1cnJfdnNlbCA9IHZkZC0+cmVhZF9yZWcocHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZvbHRhZ2UpOwogCiAJaWYgKCF2ZGQtPnBtaWNfaW5mbyB8fCAhdmRkLT5wbWljX2luZm8tPnZzZWxfdG9fdXYpIHsKIAkJcHJfd2FybmluZygiJXM6IFBNSUMgZnVuY3Rpb24gdG8gY29udmVydCB2c2VsIHRvIHZvbHRhZ2UiCkBAIC0xMTg0LDcgKzczNyw2IEBACiB7CiAJc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZDsKIAl1MzIgdnBjb25maWc7Ci0JdTE2IG1vZDsKIAogCWlmICghdm9sdGRtIHx8IElTX0VSUih2b2x0ZG0pKSB7CiAJCXByX3dhcm5pbmcoIiVzOiBWREQgc3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0IVxuIiwgX19mdW5jX18pOwpAQCAtMTE5OCw4ICs3NTAsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JbW9kID0gdmRkLT52cF9yZWcucHJtX21vZDsKLQogCS8qIElmIFZQIGlzIGFscmVhZHkgZW5hYmxlZCwgZG8gbm90aGluZy4gUmV0dXJuICovCiAJaWYgKHZkZC0+dnBfZW5hYmxlZCkKIAkJcmV0dXJuOwpAQCAtMTIwNyw5ICs3NTcsOSBAQAogCXZwX2xhdGNoX3ZzZWwodmRkKTsKIAogCS8qIEVuYWJsZSBWUCAqLwotCXZwY29uZmlnID0gdmRkLT5yZWFkX3JlZyhtb2QsIHZkZC0+dnBfb2Zmcy52cGNvbmZpZyk7Ci0JdnBjb25maWcgfD0gdmRkLT52cF9yZWcudnBjb25maWdfdnBlbmFibGU7Ci0JdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwl2cGNvbmZpZyA9IHZkZC0+cmVhZF9yZWcocHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZwY29uZmlnKTsKKwl2cGNvbmZpZyB8PSB2ZGQtPnZwX2RhdGEtPnZwX2NvbW1vbi0+dnBjb25maWdfdnBlbmFibGU7CisJdmRkLT53cml0ZV9yZWcodnBjb25maWcsIHBybV9tb2Rfb2ZmcywgdmRkLT52cF9kYXRhLT52cGNvbmZpZyk7CiAJdmRkLT52cF9lbmFibGVkID0gdHJ1ZTsKIH0KIApAQCAtMTIyNCw3ICs3NzQsNiBAQAogewogCXN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQ7CiAJdTMyIHZwY29uZmlnOwotCXUxNiBtb2Q7CiAJaW50IHRpbWVvdXQ7CiAKIAlpZiAoIXZvbHRkbSB8fCBJU19FUlIodm9sdGRtKSkgewpAQCAtMTIzOSw4ICs3ODgsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JbW9kID0gdmRkLT52cF9yZWcucHJtX21vZDsKLQogCS8qIElmIFZQIGlzIGFscmVhZHkgZGlzYWJsZWQsIGRvIG5vdGhpbmcuIFJldHVybiAqLwogCWlmICghdmRkLT52cF9lbmFibGVkKSB7CiAJCXByX3dhcm5pbmcoIiVzOiBUcnlpbmcgdG8gZGlzYWJsZSBWUCBmb3IgdmRkXyVzIHdoZW4iCkBAIC0xMjQ5LDE0ICs3OTYsMTQgQEAKIAl9CiAKIAkvKiBEaXNhYmxlIFZQICovCi0JdnBjb25maWcgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKLQl2cGNvbmZpZyAmPSB+dmRkLT52cF9yZWcudnBjb25maWdfdnBlbmFibGU7Ci0JdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwl2cGNvbmZpZyA9IHZkZC0+cmVhZF9yZWcocHJtX21vZF9vZmZzLCB2ZGQtPnZwX2RhdGEtPnZwY29uZmlnKTsKKwl2cGNvbmZpZyAmPSB+dmRkLT52cF9kYXRhLT52cF9jb21tb24tPnZwY29uZmlnX3ZwZW5hYmxlOworCXZkZC0+d3JpdGVfcmVnKHZwY29uZmlnLCBwcm1fbW9kX29mZnMsIHZkZC0+dnBfZGF0YS0+dnBjb25maWcpOwogCiAJLyoKIAkgKiBXYWl0IGZvciBWUCBpZGxlIFR5cGljYWwgbGF0ZW5jeSBpcyA8MnVzLiBNYXhpbXVtIGxhdGVuY3kgaXMgfjEwMHVzCiAJICovCi0Jb21hcF90ZXN0X3RpbWVvdXQoKHZkZC0+cmVhZF9yZWcobW9kLCB2ZGQtPnZwX29mZnMudnN0YXR1cykpLAorCW9tYXBfdGVzdF90aW1lb3V0KCh2ZGQtPnJlYWRfcmVnKHBybV9tb2Rfb2ZmcywgdmRkLT52cF9kYXRhLT52c3RhdHVzKSksCiAJCQkJVlBfSURMRV9USU1FT1VULCB0aW1lb3V0KTsKIAogCWlmICh0aW1lb3V0ID49IFZQX0lETEVfVElNRU9VVCkKQEAgLTE1MDksOCArMTA1Niw4IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG5yX3NjYWxhYmxlX3ZkZDsgaSsrKSB7Ci0JCWlmICghKHN0cmNtcChuYW1lLCB2ZGRfaW5mb1tpXS52b2x0ZG0ubmFtZSkpKQotCQkJcmV0dXJuICZ2ZGRfaW5mb1tpXS52b2x0ZG07CisJCWlmICghKHN0cmNtcChuYW1lLCB2ZGRfaW5mb1tpXS0+dm9sdGRtLm5hbWUpKSkKKwkJCXJldHVybiAmdmRkX2luZm9baV0tPnZvbHRkbTsKIAl9CiAKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTE1MzgsMzUgKzEwODUsMjQgQEAKIAkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGNyZWF0ZSB2b2x0YWdlIGRlYnVnZnMgbWFpbiBkaXJcbiIsCiAJCQlfX2Z1bmNfXyk7CiAJZm9yIChpID0gMDsgaSA8IG5yX3NjYWxhYmxlX3ZkZDsgaSsrKSB7Ci0JCWlmICh2ZGRfZGF0YV9jb25maWd1cmUoJnZkZF9pbmZvW2ldKSkKKwkJaWYgKG9tYXBfdmRkX2RhdGFfY29uZmlndXJlKHZkZF9pbmZvW2ldKSkKIAkJCWNvbnRpbnVlOwotCQl2Y19pbml0KCZ2ZGRfaW5mb1tpXSk7Ci0JCXZwX2luaXQoJnZkZF9pbmZvW2ldKTsKLQkJdmRkX2RlYnVnZnNfaW5pdCgmdmRkX2luZm9baV0pOworCQlvbWFwX3ZjX2luaXQodmRkX2luZm9baV0pOworCQl2cF9pbml0KHZkZF9pbmZvW2ldKTsKKwkJdmRkX2RlYnVnZnNfaW5pdCh2ZGRfaW5mb1tpXSk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogb21hcF92b2x0YWdlX2Vhcmx5X2luaXQoKS0gVm9sYXRhZ2UgZHJpdmVyIGVhcmx5IGluaXQKLSAqLwotc3RhdGljIGludCBfX2luaXQgb21hcF92b2x0YWdlX2Vhcmx5X2luaXQodm9pZCkKKy8qIFhYWCBkb2N1bWVudCAqLworaW50IF9faW5pdCBvbWFwX3ZvbHRhZ2VfZWFybHlfaW5pdChzMTYgcHJtX21vZCwgczE2IHBybV9pcnFzdF9vY3BfbW9kLAorCQkJCSAgIHN0cnVjdCBvbWFwX3ZkZF9pbmZvICpvbWFwX3ZkZF9hcnJheVtdLAorCQkJCSAgIHU4IG9tYXBfdmRkX2NvdW50KQogewotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQl2ZGRfaW5mbyA9IG9tYXAzX3ZkZF9pbmZvOwotCQlucl9zY2FsYWJsZV92ZGQgPSBPTUFQM19OUl9TQ0FMQUJMRV9WREQ7Ci0JCXZjX2luaXQgPSBvbWFwM192Y19pbml0OwotCQl2ZGRfZGF0YV9jb25maWd1cmUgPSBvbWFwM192ZGRfZGF0YV9jb25maWd1cmU7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQl2ZGRfaW5mbyA9IG9tYXA0X3ZkZF9pbmZvOwotCQlucl9zY2FsYWJsZV92ZGQgPSBPTUFQNF9OUl9TQ0FMQUJMRV9WREQ7Ci0JCXZjX2luaXQgPSBvbWFwNF92Y19pbml0OwotCQl2ZGRfZGF0YV9jb25maWd1cmUgPSBvbWFwNF92ZGRfZGF0YV9jb25maWd1cmU7Ci0JfSBlbHNlIHsKLQkJcHJfd2FybmluZygiJXM6IHZvbHRhZ2UgZHJpdmVyIHN1cHBvcnQgbm90IGFkZGVkXG4iLCBfX2Z1bmNfXyk7Ci0JfQotCisJcHJtX21vZF9vZmZzID0gcHJtX21vZDsKKwlwcm1faXJxc3Rfb2NwX21vZF9vZmZzID0gcHJtX2lycXN0X29jcF9tb2Q7CisJdmRkX2luZm8gPSBvbWFwX3ZkZF9hcnJheTsKKwlucl9zY2FsYWJsZV92ZGQgPSBvbWFwX3ZkZF9jb3VudDsKIAlyZXR1cm4gMDsKIH0KLWNvcmVfaW5pdGNhbGwob21hcF92b2x0YWdlX2Vhcmx5X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC92b2x0YWdlLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuaApzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ZvbHRhZ2UuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmgKaW5kZXggNWJkMjA0ZS4uZTlmNTQwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC92b2x0YWdlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmgKQEAgLTE2LDYgKzE2LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAorI2luY2x1ZGUgInZjLmgiCisjaW5jbHVkZSAidnAuaCIKKworLyogWFhYIGRvY3VtZW50ICovCiAjZGVmaW5lIFZPTFRTQ0FMRV9WUEZPUkNFVVBEQVRFCQkxCiAjZGVmaW5lIFZPTFRTQ0FMRV9WQ0JZUEFTUwkJMgogCkBAIC0yNywzNiArMzEsMjIgQEAKICNkZWZpbmUgT01BUDNfVk9MVE9GRlNFVAkweGZmCiAjZGVmaW5lIE9NQVAzX1ZPTFRTRVRVUDIJMHhmZgogCi0vKiBWb2x0YWdlIHZhbHVlIGRlZmluZXMgKi8KLSNkZWZpbmUgT01BUDM0MzBfVkREX01QVV9PUFAxX1VWCQk5NzUwMDAKLSNkZWZpbmUgT01BUDM0MzBfVkREX01QVV9PUFAyX1VWCQkxMDc1MDAwCi0jZGVmaW5lIE9NQVAzNDMwX1ZERF9NUFVfT1BQM19VVgkJMTIwMDAwMAotI2RlZmluZSBPTUFQMzQzMF9WRERfTVBVX09QUDRfVVYJCTEyNzAwMDAKLSNkZWZpbmUgT01BUDM0MzBfVkREX01QVV9PUFA1X1VWCQkxMzUwMDAwCi0KLSNkZWZpbmUgT01BUDM0MzBfVkREX0NPUkVfT1BQMV9VVgkJOTc1MDAwCi0jZGVmaW5lIE9NQVAzNDMwX1ZERF9DT1JFX09QUDJfVVYJCTEwNTAwMDAKLSNkZWZpbmUgT01BUDM0MzBfVkREX0NPUkVfT1BQM19VVgkJMTE1MDAwMAotCi0jZGVmaW5lIE9NQVAzNjMwX1ZERF9NUFVfT1BQNTBfVVYJCTEwMTI1MDAKLSNkZWZpbmUgT01BUDM2MzBfVkREX01QVV9PUFAxMDBfVVYJCTEyMDAwMDAKLSNkZWZpbmUgT01BUDM2MzBfVkREX01QVV9PUFAxMjBfVVYJCTEzMjUwMDAKLSNkZWZpbmUgT01BUDM2MzBfVkREX01QVV9PUFAxR19VVgkJMTM3NTAwMAotCi0jZGVmaW5lIE9NQVAzNjMwX1ZERF9DT1JFX09QUDUwX1VWCQkxMDAwMDAwCi0jZGVmaW5lIE9NQVAzNjMwX1ZERF9DT1JFX09QUDEwMF9VVgkJMTIwMDAwMAotCi0jZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfT1BQNTBfVVYJCTkzMDAwMAotI2RlZmluZSBPTUFQNDQzMF9WRERfTVBVX09QUDEwMF9VVgkJMTEwMDAwMAotI2RlZmluZSBPTUFQNDQzMF9WRERfTVBVX09QUFRVUkJPX1VWCQkxMjYwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfT1BQTklUUk9fVVYJCTEzNTAwMDAKLQotI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX09QUDUwX1VWCQk5MzAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9PUFAxMDBfVVYJCTExMDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9PUFBUVVJCT19VVgkJMTI2MDAwMAotCi0jZGVmaW5lIE9NQVA0NDMwX1ZERF9DT1JFX09QUDUwX1VWCQk5MzAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfT1BQMTAwX1VWCQkxMTAwMDAwCisvKioKKyAqIHN0cnVjdCBvbWFwX3Zmc21faW5zdGFuY2VfZGF0YSAtIHBlci12b2x0YWdlIG1hbmFnZXIgRlNNIHJlZ2lzdGVyL2JpdGZpZWxkCisgKiBkYXRhCisgKiBAdm9sdHNldHVwX21hc2s6IFNFVFVQX1RJTUUqIGJpdG1hc2sgaW4gdGhlIFBSTV9WT0xUU0VUVVAqIHJlZ2lzdGVyCisgKiBAdm9sdHNldHVwX3JlZzogcmVnaXN0ZXIgb2Zmc2V0IG9mIFBSTV9WT0xUU0VUVVAgZnJvbSBQUk0gYmFzZQorICogQHZvbHRzZXR1cF9zaGlmdDogU0VUVVBfVElNRSogZmllbGQgc2hpZnQgaW4gdGhlIFBSTV9WT0xUU0VUVVAqIHJlZ2lzdGVyCisgKgorICogWFhYIFdoYXQgYWJvdXQgVk9MVE9GRlNFVC9WT0xUQ1RSTD8KKyAqIFhYWCBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCBhIF9tYXNrIGFuZCBhIF9zaGlmdCBmb3IgdGhlIHNhbWUKKyAqICAgICBiaXRmaWVsZCAtIHJlbW92ZSBvbmUhCisgKi8KK3N0cnVjdCBvbWFwX3Zmc21faW5zdGFuY2VfZGF0YSB7CisJdTMyIHZvbHRzZXR1cF9tYXNrOworCXU4IHZvbHRzZXR1cF9yZWc7CisJdTggdm9sdHNldHVwX3NoaWZ0OworfTsKIAogLyoqCiAgKiBzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAtIG9tYXAgdm9sdGFnZSBkb21haW4gZ2xvYmFsIHN0cnVjdHVyZS4KQEAgLTExMyw2ICsxMDMsNDIgQEAKIAl1OCAoKnV2X3RvX3ZzZWwpICh1bnNpZ25lZCBsb25nIHVWKTsKIH07CiAKKy8qKgorICogb21hcF92ZGRfaW5mbyAtIFBlciBWb2x0YWdlIERvbWFpbiBpbmZvCisgKgorICogQHZvbHRfZGF0YQkJOiB2b2x0YWdlIHRhYmxlIGhhdmluZyB0aGUgZGlzdGluY3Qgdm9sdGFnZXMgc3VwcG9ydGVkCisgKgkJCSAgYnkgdGhlIGRvbWFpbiBhbmQgb3RoZXIgYXNzb2NpYXRlZCBwZXIgdm9sdGFnZSBkYXRhLgorICogQHBtaWNfaW5mbwkJOiBwbWljIHNwZWNpZmljIHBhcmFtZXRlcnMgd2hpY2ggc2hvdWxkIGJlIHBvcHVsdGVkIGJ5CisgKgkJCSAgdGhlIHBtaWMgZHJpdmVycy4KKyAqIEB2cF9kYXRhCQk6IHRoZSByZWdpc3RlciB2YWx1ZXMsIHNoaWZ0cywgbWFza3MgZm9yIHZhcmlvdXMKKyAqCQkJICB2cCByZWdpc3RlcnMKKyAqIEB2cF9ydF9kYXRhICAgICAgICAgIDogVlAgZGF0YSBkZXJpdmVkIGF0IHJ1bnRpbWUsIG5vdCBwcmVkZWZpbmVkCisgKiBAdmNfZGF0YQkJOiBzdHJ1Y3R1cmUgY29udGFpbmluZyB2YXJpb3VzIHZhcmlvdXMgdmMgcmVnaXN0ZXJzLAorICoJCQkgIHNoaWZ0cywgbWFza3MgZXRjLgorICogQHZmc20gICAgICAgICAgICAgICAgOiB2b2x0YWdlIG1hbmFnZXIgRlNNIGRhdGEKKyAqIEB2b2x0ZG0JCTogcG9pbnRlciB0byB0aGUgdm9sdGFnZSBkb21haW4gc3RydWN0dXJlCisgKiBAZGVidWdfZGlyCQk6IGRlYnVnIGRpcmVjdG9yeSBmb3IgdGhpcyB2b2x0YWdlIGRvbWFpbi4KKyAqIEBjdXJyX3ZvbHQJCTogY3VycmVudCB2b2x0YWdlIGZvciB0aGlzIHZkZC4KKyAqIEB2cF9lbmFibGVkCQk6IGZsYWcgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIHZwIGlzIGVuYWJsZWQgb3Igbm90CisgKiBAdm9sdF9zY2FsZQkJOiBBUEkgdG8gc2NhbGUgdGhlIHZvbHRhZ2Ugb2YgdGhlIHZkZC4KKyAqLworc3RydWN0IG9tYXBfdmRkX2luZm8geworCXN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhOworCXN0cnVjdCBvbWFwX3ZvbHRfcG1pY19pbmZvICpwbWljX2luZm87CisJc3RydWN0IG9tYXBfdnBfaW5zdGFuY2VfZGF0YSAqdnBfZGF0YTsKKwlzdHJ1Y3Qgb21hcF92cF9ydW50aW1lX2RhdGEgdnBfcnRfZGF0YTsKKwlzdHJ1Y3Qgb21hcF92Y19pbnN0YW5jZV9kYXRhICp2Y19kYXRhOworCWNvbnN0IHN0cnVjdCBvbWFwX3Zmc21faW5zdGFuY2VfZGF0YSAqdmZzbTsKKwlzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiB2b2x0ZG07CisJc3RydWN0IGRlbnRyeSAqZGVidWdfZGlyOworCXUzMiBjdXJyX3ZvbHQ7CisJYm9vbCB2cF9lbmFibGVkOworCXUzMiAoKnJlYWRfcmVnKSAodTE2IG1vZCwgdTggb2Zmc2V0KTsKKwl2b2lkICgqd3JpdGVfcmVnKSAodTMyIHZhbCwgdTE2IG1vZCwgdTggb2Zmc2V0KTsKKwlpbnQgKCp2b2x0X3NjYWxlKSAoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCwKKwkJdW5zaWduZWQgbG9uZyB0YXJnZXRfdm9sdCk7Cit9OworCiB1bnNpZ25lZCBsb25nIG9tYXBfdnBfZ2V0X2N1cnJfdm9sdChzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKTsKIHZvaWQgb21hcF92cF9lbmFibGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7CiB2b2lkIG9tYXBfdnBfZGlzYWJsZShzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKTsKQEAgLTEyNSw2ICsxNTEsOSBAQAogCQl1bnNpZ25lZCBsb25nIHZvbHQpOwogdW5zaWduZWQgbG9uZyBvbWFwX3ZvbHRhZ2VfZ2V0X25vbV92b2x0KHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pOwogc3RydWN0IGRlbnRyeSAqb21hcF92b2x0YWdlX2dldF9kYmdkaXIoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7CitpbnQgX19pbml0IG9tYXBfdm9sdGFnZV9lYXJseV9pbml0KHMxNiBwcm1fbW9kLCBzMTYgcHJtX2lycXN0X21vZCwKKwkJCQkgICBzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqb21hcF92ZGRfYXJyYXlbXSwKKwkJCQkgICB1OCBvbWFwX3ZkZF9jb3VudCk7CiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgb21hcF92b2x0YWdlX3JlZ2lzdGVyX3BtaWMoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSwKIAkJc3RydWN0IG9tYXBfdm9sdF9wbWljX2luZm8gKnBtaWNfaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2Vkb21haW5zM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2Vkb21haW5zM3h4eF9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmMjMwZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZWRvbWFpbnMzeHh4X2RhdGEuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogT01BUDMgdm9sdGFnZSBkb21haW4gZGF0YQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogUmFqZW5kcmEgTmF5YWsgPHJuYXlha0B0aS5jb20+CisgKiBMZXNseSBBIE0gPHgwMDgwOTcwQHRpLmNvbT4KKyAqIFRoYXJhIEdvcGluYXRoIDx0aGFyYUB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExIE5va2lhIENvcnBvcmF0aW9uCisgKiBLYWxsZSBKb2tpbmllbWkKKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgIm9tYXBfb3BwX2RhdGEuaCIKKyNpbmNsdWRlICJ2b2x0YWdlLmgiCisjaW5jbHVkZSAidmMuaCIKKyNpbmNsdWRlICJ2cC5oIgorCisvKgorICogVkREIGRhdGEKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfdmZzbV9pbnN0YW5jZV9kYXRhIG9tYXAzX3ZkZDFfdmZzbV9kYXRhID0geworCS52b2x0c2V0dXBfcmVnID0gT01BUDNfUFJNX1ZPTFRTRVRVUDFfT0ZGU0VULAorCS52b2x0c2V0dXBfc2hpZnQgPSBPTUFQMzQzMF9TRVRVUF9USU1FMV9TSElGVCwKKwkudm9sdHNldHVwX21hc2sgPSBPTUFQMzQzMF9TRVRVUF9USU1FMV9NQVNLLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3ZkZF9pbmZvIG9tYXAzX3ZkZDFfaW5mbyA9IHsKKwkudnBfZGF0YSA9ICZvbWFwM192cDFfZGF0YSwKKwkudmNfZGF0YSA9ICZvbWFwM192YzFfZGF0YSwKKwkudmZzbSA9ICZvbWFwM192ZGQxX3Zmc21fZGF0YSwKKwkudm9sdGRtID0geworCQkubmFtZSA9ICJtcHUiLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfdmZzbV9pbnN0YW5jZV9kYXRhIG9tYXAzX3ZkZDJfdmZzbV9kYXRhID0geworCS52b2x0c2V0dXBfcmVnID0gT01BUDNfUFJNX1ZPTFRTRVRVUDFfT0ZGU0VULAorCS52b2x0c2V0dXBfc2hpZnQgPSBPTUFQMzQzMF9TRVRVUF9USU1FMl9TSElGVCwKKwkudm9sdHNldHVwX21hc2sgPSBPTUFQMzQzMF9TRVRVUF9USU1FMl9NQVNLLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3ZkZF9pbmZvIG9tYXAzX3ZkZDJfaW5mbyA9IHsKKwkudnBfZGF0YSA9ICZvbWFwM192cDJfZGF0YSwKKwkudmNfZGF0YSA9ICZvbWFwM192YzJfZGF0YSwKKwkudmZzbSA9ICZvbWFwM192ZGQyX3Zmc21fZGF0YSwKKwkudm9sdGRtID0geworCQkubmFtZSA9ICJjb3JlIiwKKwl9LAorfTsKKworLyogT01BUDMgVkREIHN0cnVjdHVyZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqb21hcDNfdmRkX2luZm9bXSA9IHsKKwkmb21hcDNfdmRkMV9pbmZvLAorCSZvbWFwM192ZGQyX2luZm8sCit9OworCisvKiBPTUFQMyBzcGVjaWZpYyB2b2x0YWdlIGluaXQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwM3h4eF92b2x0YWdlX2Vhcmx5X2luaXQodm9pZCkKK3sKKwlzMTYgcHJtX21vZCA9IE9NQVAzNDMwX0dSX01PRDsKKwlzMTYgcHJtX2lycXN0X29jcF9tb2QgPSBPQ1BfTU9EOworCisJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFhYWCBXaWxsIGRlcGVuZCBvbiB0aGUgcHJvY2VzcywgdmFsaWRhdGlvbiwgYW5kIGJpbm5pbmcKKwkgKiBmb3IgdGhlIGN1cnJlbnRseS1ydW5uaW5nIElDCisJICovCisJaWYgKGNwdV9pc19vbWFwMzYzMCgpKSB7CisJCW9tYXAzX3ZkZDFfaW5mby52b2x0X2RhdGEgPSBvbWFwMzZ4eF92ZGRtcHVfdm9sdF9kYXRhOworCQlvbWFwM192ZGQyX2luZm8udm9sdF9kYXRhID0gb21hcDM2eHhfdmRkY29yZV92b2x0X2RhdGE7CisJfSBlbHNlIHsKKwkJb21hcDNfdmRkMV9pbmZvLnZvbHRfZGF0YSA9IG9tYXAzNHh4X3ZkZG1wdV92b2x0X2RhdGE7CisJCW9tYXAzX3ZkZDJfaW5mby52b2x0X2RhdGEgPSBvbWFwMzR4eF92ZGRjb3JlX3ZvbHRfZGF0YTsKKwl9CisKKwlyZXR1cm4gb21hcF92b2x0YWdlX2Vhcmx5X2luaXQocHJtX21vZCwgcHJtX2lycXN0X29jcF9tb2QsCisJCQkJICAgICAgIG9tYXAzX3ZkZF9pbmZvLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKG9tYXAzX3ZkZF9pbmZvKSk7Cit9OworY29yZV9pbml0Y2FsbChvbWFwM3h4eF92b2x0YWdlX2Vhcmx5X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlZG9tYWluczQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlZG9tYWluczQ0eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNjQ5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2Vkb21haW5zNDR4eF9kYXRhLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBPTUFQMy9PTUFQNCBWb2x0YWdlIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBBdXRob3I6IFRoYXJhIEdvcGluYXRoCTx0aGFyYUB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KKyAqIExlc2x5IEEgTSA8eDAwODA5NzBAdGkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogS2FsbGUgSm9raW5pZW1pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBUaGFyYSBHb3BpbmF0aCA8dGhhcmFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgorCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgorI2luY2x1ZGUgInBybTQ0eHguaCIKKyNpbmNsdWRlICJwcmNtNDR4eC5oIgorI2luY2x1ZGUgInBybWluc3Q0NHh4LmgiCisjaW5jbHVkZSAidm9sdGFnZS5oIgorI2luY2x1ZGUgIm9tYXBfb3BwX2RhdGEuaCIKKyNpbmNsdWRlICJ2Yy5oIgorI2luY2x1ZGUgInZwLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF92ZnNtX2luc3RhbmNlX2RhdGEgb21hcDRfdmRkX21wdV92ZnNtX2RhdGEgPSB7CisJLnZvbHRzZXR1cF9yZWcgPSBPTUFQNF9QUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVBfT0ZGU0VULAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3ZkZF9pbmZvIG9tYXA0X3ZkZF9tcHVfaW5mbyA9IHsKKwkudnBfZGF0YSA9ICZvbWFwNF92cF9tcHVfZGF0YSwKKwkudmNfZGF0YSA9ICZvbWFwNF92Y19tcHVfZGF0YSwKKwkudmZzbSA9ICZvbWFwNF92ZGRfbXB1X3Zmc21fZGF0YSwKKwkudm9sdGRtID0geworCQkubmFtZSA9ICJtcHUiLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfdmZzbV9pbnN0YW5jZV9kYXRhIG9tYXA0X3ZkZF9pdmFfdmZzbV9kYXRhID0geworCS52b2x0c2V0dXBfcmVnID0gT01BUDRfUFJNX1ZPTFRTRVRVUF9JVkFfUkVUX1NMRUVQX09GRlNFVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF92ZGRfaW5mbyBvbWFwNF92ZGRfaXZhX2luZm8gPSB7CisJLnZwX2RhdGEgPSAmb21hcDRfdnBfaXZhX2RhdGEsCisJLnZjX2RhdGEgPSAmb21hcDRfdmNfaXZhX2RhdGEsCisJLnZmc20gPSAmb21hcDRfdmRkX2l2YV92ZnNtX2RhdGEsCisJLnZvbHRkbSA9IHsKKwkJLm5hbWUgPSAiaXZhIiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3Zmc21faW5zdGFuY2VfZGF0YSBvbWFwNF92ZGRfY29yZV92ZnNtX2RhdGEgPSB7CisJLnZvbHRzZXR1cF9yZWcgPSBPTUFQNF9QUk1fVk9MVFNFVFVQX0NPUkVfUkVUX1NMRUVQX09GRlNFVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF92ZGRfaW5mbyBvbWFwNF92ZGRfY29yZV9pbmZvID0geworCS52cF9kYXRhID0gJm9tYXA0X3ZwX2NvcmVfZGF0YSwKKwkudmNfZGF0YSA9ICZvbWFwNF92Y19jb3JlX2RhdGEsCisJLnZmc20gPSAmb21hcDRfdmRkX2NvcmVfdmZzbV9kYXRhLAorCS52b2x0ZG0gPSB7CisJCS5uYW1lID0gImNvcmUiLAorCX0sCit9OworCisvKiBPTUFQNCBWREQgc3RydWN0dXJlcyAqLworc3RhdGljIHN0cnVjdCBvbWFwX3ZkZF9pbmZvICpvbWFwNF92ZGRfaW5mb1tdID0geworCSZvbWFwNF92ZGRfbXB1X2luZm8sCisJJm9tYXA0X3ZkZF9pdmFfaW5mbywKKwkmb21hcDRfdmRkX2NvcmVfaW5mbywKK307CisKKy8qIE9NQVA0IHNwZWNpZmljIHZvbHRhZ2UgaW5pdCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXA0NHh4X3ZvbHRhZ2VfZWFybHlfaW5pdCh2b2lkKQoreworCXMxNiBwcm1fbW9kID0gT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNUOworCXMxNiBwcm1faXJxc3Rfb2NwX21vZCA9IE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX0lOU1Q7CisKKwlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogWFhYIFdpbGwgZGVwZW5kIG9uIHRoZSBwcm9jZXNzLCB2YWxpZGF0aW9uLCBhbmQgYmlubmluZworCSAqIGZvciB0aGUgY3VycmVudGx5LXJ1bm5pbmcgSUMKKwkgKi8KKwlvbWFwNF92ZGRfbXB1X2luZm8udm9sdF9kYXRhID0gb21hcDQ0eHhfdmRkX21wdV92b2x0X2RhdGE7CisJb21hcDRfdmRkX2l2YV9pbmZvLnZvbHRfZGF0YSA9IG9tYXA0NHh4X3ZkZF9pdmFfdm9sdF9kYXRhOworCW9tYXA0X3ZkZF9jb3JlX2luZm8udm9sdF9kYXRhID0gb21hcDQ0eHhfdmRkX2NvcmVfdm9sdF9kYXRhOworCisJcmV0dXJuIG9tYXBfdm9sdGFnZV9lYXJseV9pbml0KHBybV9tb2QsIHBybV9pcnFzdF9vY3BfbW9kLAorCQkJCSAgICAgICBvbWFwNF92ZGRfaW5mbywKKwkJCQkgICAgICAgQVJSQVlfU0laRShvbWFwNF92ZGRfaW5mbykpOworfTsKK2NvcmVfaW5pdGNhbGwob21hcDQ0eHhfdm9sdGFnZV9lYXJseV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdnAuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvdnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2UxMzRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92cC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogT01BUDMvNCBWb2x0YWdlIFByb2Nlc3NvciAoVlApIHN0cnVjdHVyZSBhbmQgbWFjcm8gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgorICogTGVzbHkgQSBNIDx4MDA4MDk3MEB0aS5jb20+CisgKiBUaGFyYSBHb3BpbmF0aCA8dGhhcmFAdGkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgorICogS2FsbGUgSm9raW5pZW1pCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfVlBfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfVlBfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKy8qIFhYWCBkb2N1bWVudCAqLworI2RlZmluZSBWUF9JRExFX1RJTUVPVVQJCTIwMAorI2RlZmluZSBWUF9UUkFOWERPTkVfVElNRU9VVAkzMDAKKworCisvKioKKyAqIHN0cnVjdCBvbWFwX3ZwX2NvbW1vbl9kYXRhIC0gcmVnaXN0ZXIgZGF0YSBjb21tb24gdG8gYWxsIFZERHMKKyAqIEB2cGNvbmZpZ19lcnJvcmdhaW5fbWFzazogRVJST1JHQUlOIGJpdG1hc2sgaW4gdGhlIFBSTV9WUCpfQ09ORklHIHJlZworICogQHZwY29uZmlnX2luaXR2b2x0YWdlX21hc2s6IElOSVRWT0xUQUdFIGJpdG1hc2sgaW4gdGhlIFBSTV9WUCpfQ09ORklHIHJlZworICogQHZwY29uZmlnX3RpbWVvdXRlbl9tYXNrOiBUSU1FT1VUIGJpdG1hc2sgaW4gdGhlIFBSTV9WUCpfQ09ORklHIHJlZworICogQHZwY29uZmlnX2luaXR2ZGQ6IElOSVRWREQgYml0bWFzayBpbiB0aGUgUFJNX1ZQKl9DT05GSUcgcmVnCisgKiBAdnBjb25maWdfZm9yY2V1cGRhdGU6IEZPUkNFVVBEQVRFIGJpdG1hc2sgaW4gdGhlIFBSTV9WUCpfQ09ORklHIHJlZworICogQHZwY29uZmlnX3ZwZW5hYmxlOiBWUEVOQUJMRSBiaXRtYXNrIGluIHRoZSBQUk1fVlAqX0NPTkZJRyByZWcKKyAqIEB2cGNvbmZpZ19lcnJvcm9mZnNldF9zaGlmdDogRVJST1JPRkZTRVQgZmllbGQgc2hpZnQgaW4gUFJNX1ZQKl9DT05GSUcgcmVnCisgKiBAdnBjb25maWdfZXJyb3JnYWluX3NoaWZ0OiBFUlJPUkdBSU4gZmllbGQgc2hpZnQgaW4gUFJNX1ZQKl9DT05GSUcgcmVnCisgKiBAdnBjb25maWdfaW5pdHZvbHRhZ2Vfc2hpZnQ6IElOSVRWT0xUQUdFIGZpZWxkIHNoaWZ0IGluIFBSTV9WUCpfQ09ORklHIHJlZworICogQHZwY29uZmlnX3N0ZXBtaW5fc2hpZnQ6IFZTVEVQTUlOIGZpZWxkIHNoaWZ0IGluIHRoZSBQUk1fVlAqX1ZTVEVQTUlOIHJlZworICogQHZwY29uZmlnX3NtcHN3YWl0dGltZW1pbl9zaGlmdDogU01QU1dBSVRUSU1FTUlOIGZpZWxkIHNoaWZ0IGluIFBSTV9WUCpfVlNURVBNSU4gcmVnCisgKiBAdnBjb25maWdfc3RlcG1heF9zaGlmdDogVlNURVBNQVggZmllbGQgc2hpZnQgaW4gdGhlIFBSTV9WUCpfVlNURVBNQVggcmVnCisgKiBAdnBjb25maWdfc21wc3dhaXR0aW1lbWF4X3NoaWZ0OiBTTVBTV0FJVFRJTUVNQVggZmllbGQgc2hpZnQgaW4gUFJNX1ZQKl9WU1RFUE1BWCByZWcKKyAqIEB2cGNvbmZpZ192bGltaXR0b192ZGRtaW5fc2hpZnQ6IFZERE1JTiBmaWVsZCBzaGlmdCBpbiBQUk1fVlAqX1ZMSU1JVFRPIHJlZworICogQHZwY29uZmlnX3ZsaW1pdHRvX3ZkZG1heF9zaGlmdDogVkRETUFYIGZpZWxkIHNoaWZ0IGluIFBSTV9WUCpfVkxJTUlUVE8gcmVnCisgKiBAdnBjb25maWdfdmxpbWl0dG9fdGltZW91dF9zaGlmdDogVElNRU9VVCBmaWVsZCBzaGlmdCBpbiBQUk1fVlAqX1ZMSU1JVFRPIHJlZworICoKKyAqIFhYWCBJdCBpdCBub3QgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCBhIG1hc2sgYW5kIGEgc2hpZnQgZm9yIHRoZSBzYW1lCisgKiAgICAgYml0ZmllbGQgLSByZW1vdmUgb25lCisgKiBYWFggTWFueSBvZiB0aGVzZSBmaWVsZHMgYXJlIHdyb25nbHkgbmFtZWQgLS0gZS5nLiwgdnBjb25maWdfc21wcyogLS0gZml4IQorICovCitzdHJ1Y3Qgb21hcF92cF9jb21tb25fZGF0YSB7CisJdTMyIHZwY29uZmlnX2Vycm9yZ2Fpbl9tYXNrOworCXUzMiB2cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrOworCXUzMiB2cGNvbmZpZ190aW1lb3V0ZW47CisJdTMyIHZwY29uZmlnX2luaXR2ZGQ7CisJdTMyIHZwY29uZmlnX2ZvcmNldXBkYXRlOworCXUzMiB2cGNvbmZpZ192cGVuYWJsZTsKKwl1OCB2cGNvbmZpZ19lcnJvcm9mZnNldF9zaGlmdDsKKwl1OCB2cGNvbmZpZ19lcnJvcmdhaW5fc2hpZnQ7CisJdTggdnBjb25maWdfaW5pdHZvbHRhZ2Vfc2hpZnQ7CisJdTggdnN0ZXBtaW5fc3RlcG1pbl9zaGlmdDsKKwl1OCB2c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW5fc2hpZnQ7CisJdTggdnN0ZXBtYXhfc3RlcG1heF9zaGlmdDsKKwl1OCB2c3RlcG1heF9zbXBzd2FpdHRpbWVtYXhfc2hpZnQ7CisJdTggdmxpbWl0dG9fdmRkbWluX3NoaWZ0OworCXU4IHZsaW1pdHRvX3ZkZG1heF9zaGlmdDsKKwl1OCB2bGltaXR0b190aW1lb3V0X3NoaWZ0OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgb21hcF92cF9wcm1faXJxc3RfZGF0YSAtIFBSTV9JUlFTVEFUVVNfTVBVLlZQX1RSQU5YRE9ORV9TVCBkYXRhCisgKiBAcHJtX2lycXN0X3JlZzogcmVnIG9mZnNldCBmb3IgUFJNX0lSUVNUQVRVU19NUFUgZnJvbSB0b3Agb2YgUFJNCisgKiBAdHJhbnhkb25lX3N0YXR1czogVlBfVFJBTlhET05FX1NUIGJpdG1hc2sgaW4gUFJNX0lSUVNUQVRVU19NUFUgcmVnCisgKgorICogWFhYIHBybV9pcnFzdF9yZWcgZG9lcyBub3QgYmVsb25nIGhlcmUKKyAqIFhYWCBOb3RlIHRoYXQgb24gT01BUDMsIFZQX1RSQU5YRE9ORSBpbnRlcnJ1cHQgbWF5IG5vdCB3b3JrIGR1ZSB0byBhCisgKiAgICAgaGFyZHdhcmUgYnVnCisgKiBYWFggVGhpcyBzdHJ1Y3R1cmUgaXMgcHJvYmFibHkgbm90IG5lZWRlZAorICovCitzdHJ1Y3Qgb21hcF92cF9wcm1faXJxc3RfZGF0YSB7CisJdTggcHJtX2lycXN0X3JlZzsKKwl1MzIgdHJhbnhkb25lX3N0YXR1czsKK307CisKKy8qKgorICogc3RydWN0IG9tYXBfdnBfaW5zdGFuY2VfZGF0YSAtIFZQIHJlZ2lzdGVyIG9mZnNldHMgKHBlci1WREQpCisgKiBAdnBfY29tbW9uOiBwb2ludGVyIHRvIHN0cnVjdCBvbWFwX3ZwX2NvbW1vbl9kYXRhICogZm9yIHRoaXMgU29DCisgKiBAcHJtX2lycXN0X2RhdGE6IHBvaW50ZXIgdG8gc3RydWN0IG9tYXBfdnBfcHJtX2lycXN0X2RhdGEgZm9yIHRoaXMgVkRECisgKiBAdnBjb25maWc6IFBSTV9WUCpfQ09ORklHIHJlZyBvZmZzZXQgZnJvbSBQUk0gc3RhcnQKKyAqIEB2c3RlcG1pbjogUFJNX1ZQKl9WU1RFUE1JTiByZWcgb2Zmc2V0IGZyb20gUFJNIHN0YXJ0CisgKiBAdmxpbWl0dG86IFBSTV9WUCpfVkxJTUlUVE8gcmVnIG9mZnNldCBmcm9tIFBSTSBzdGFydAorICogQHZzdGF0dXM6IFBSTV9WUCpfVlNUQVRVUyByZWcgb2Zmc2V0IGZyb20gUFJNIHN0YXJ0CisgKiBAdm9sdGFnZTogUFJNX1ZQKl9WT0xUQUdFIHJlZyBvZmZzZXQgZnJvbSBQUk0gc3RhcnQKKyAqCisgKiBYWFggdnBfY29tbW9uIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQgc2luY2UgaXQgaXMgcGVyLVNvQworICovCitzdHJ1Y3Qgb21hcF92cF9pbnN0YW5jZV9kYXRhIHsKKwljb25zdCBzdHJ1Y3Qgb21hcF92cF9jb21tb25fZGF0YSAqdnBfY29tbW9uOworCWNvbnN0IHN0cnVjdCBvbWFwX3ZwX3BybV9pcnFzdF9kYXRhICpwcm1faXJxc3RfZGF0YTsKKwl1OCB2cGNvbmZpZzsKKwl1OCB2c3RlcG1pbjsKKwl1OCB2c3RlcG1heDsKKwl1OCB2bGltaXR0bzsKKwl1OCB2c3RhdHVzOworCXU4IHZvbHRhZ2U7Cit9OworCisvKioKKyAqIHN0cnVjdCBvbWFwX3ZwX3J1bnRpbWVfZGF0YSAtIFZQIGRhdGEgcG9wdWxhdGVkIGF0IHJ1bnRpbWUgYnkgY29kZQorICogQHZwY29uZmlnX2Vycm9yb2Zmc2V0OiB2YWx1ZSBvZiBFUlJPUk9GRlNFVCBiaXRmaWVsZCBpbiBQUk1fVlAqX0NPTkZJRworICogQHZwY29uZmlnX2Vycm9yZ2FpbjogdmFsdWUgb2YgRVJST1JHQUlOIGJpdGZpZWxkIGluIFBSTV9WUCpfQ09ORklHCisgKiBAdnN0ZXBtaW5fc21wc3dhaXR0aW1lbWluOiB2YWx1ZSBvZiBTTVBTV0FJVFRJTUVNSU4gYml0ZmllbGQgaW4gUFJNX1ZQKl9WU1RFUE1JTgorICogQHZzdGVwbWF4X3NtcHN3YWl0dGltZW1heDogdmFsdWUgb2YgU01QU1dBSVRUSU1FTUFYIGJpdGZpZWxkIGluIFBSTV9WUCpfVlNURVBNQVgKKyAqIEB2bGltaXR0b190aW1lb3V0OiB2YWx1ZSBvZiBUSU1FT1VUIGJpdGZpZWxkIGluIFBSTV9WUCpfVkxJTUlUVE8KKyAqIEB2c3RlcG1pbl9zdGVwbWluOiB2YWx1ZSBvZiBWU1RFUE1JTiBiaXRmaWVsZCBpbiBQUk1fVlAqX1ZTVEVQTUlOCisgKiBAdnN0ZXBtYXhfc3RlcG1heDogdmFsdWUgb2YgVlNURVBNQVggYml0ZmllbGQgaW4gUFJNX1ZQKl9WU1RFUE1BWAorICogQHZsaW1pdHRvX3ZkZG1pbjogdmFsdWUgb2YgVkRETUlOIGJpdGZpZWxkIGluIFBSTV9WUCpfVkxJTUlUVE8KKyAqIEB2bGltaXR0b192ZGRtYXg6IHZhbHVlIG9mIFZERE1BWCBiaXRmaWVsZCBpbiBQUk1fVlAqX1ZMSU1JVFRPCisgKgorICogWFhYIElzIHRoaXMgc3RydWN0dXJlIHJlYWxseSBuZWVkZWQ/ICBXaHkgbm90IGp1c3QgcHJvZ3JhbSB0aGUKKyAqIGRldmljZSBkaXJlY3RseT8gIFRoZXkgYXJlIGluIFBSTSBzcGFjZSwgdGhlcmVmb3JlIGluIHRoZSBXS1VQCisgKiBwb3dlcmRvbWFpbiwgc28gcmVnaXN0ZXIgY29udGVudHMgc2hvdWxkIG5vdCBiZSBsb3N0IGluIG9mZi1tb2RlLgorICogWFhYIFNvbWUgb2YgdGhlc2UgZmllbGRzIGFyZSBpbmNvcnJlY3RseSBuYW1lZCwgZS5nLiwgdnN0ZXAqCisgKi8KK3N0cnVjdCBvbWFwX3ZwX3J1bnRpbWVfZGF0YSB7CisJdTMyIHZwY29uZmlnX2Vycm9yb2Zmc2V0OworCXUxNiB2cGNvbmZpZ19lcnJvcmdhaW47CisJdTE2IHZzdGVwbWluX3NtcHN3YWl0dGltZW1pbjsKKwl1MTYgdnN0ZXBtYXhfc21wc3dhaXR0aW1lbWF4OworCXUxNiB2bGltaXR0b190aW1lb3V0OworCXU4IHZzdGVwbWluX3N0ZXBtaW47CisJdTggdnN0ZXBtYXhfc3RlcG1heDsKKwl1OCB2bGltaXR0b192ZGRtaW47CisJdTggdmxpbWl0dG9fdmRkbWF4OworfTsKKworZXh0ZXJuIHN0cnVjdCBvbWFwX3ZwX2luc3RhbmNlX2RhdGEgb21hcDNfdnAxX2RhdGE7CitleHRlcm4gc3RydWN0IG9tYXBfdnBfaW5zdGFuY2VfZGF0YSBvbWFwM192cDJfZGF0YTsKKworZXh0ZXJuIHN0cnVjdCBvbWFwX3ZwX2luc3RhbmNlX2RhdGEgb21hcDRfdnBfbXB1X2RhdGE7CitleHRlcm4gc3RydWN0IG9tYXBfdnBfaW5zdGFuY2VfZGF0YSBvbWFwNF92cF9pdmFfZGF0YTsKK2V4dGVybiBzdHJ1Y3Qgb21hcF92cF9pbnN0YW5jZV9kYXRhIG9tYXA0X3ZwX2NvcmVfZGF0YTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZwM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZwM3h4eF9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1MjE3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdnAzeHh4X2RhdGEuYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogT01BUDMgVm9sdGFnZSBQcm9jZXNzb3IgKFZQKSBkYXRhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KKyAqIExlc2x5IEEgTSA8eDAwODA5NzBAdGkuY29tPgorICogVGhhcmEgR29waW5hdGggPHRoYXJhQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24KKyAqIEthbGxlIEpva2luaWVtaQorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKworI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJ2b2x0YWdlLmgiCisKKyNpbmNsdWRlICJ2cC5oIgorCisvKgorICogVlAgZGF0YSBjb21tb24gdG8gMzR4eC8zNnh4IGNoaXBzCisgKiBYWFggVGhpcyBzdHVmZiBwcmVzdW1hYmx5IGJlbG9uZ3MgaW4gdGhlIHZwM3h4eC5jIG9yIHZwLmMgZmlsZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3ZwX2NvbW1vbl9kYXRhIG9tYXAzX3ZwX2NvbW1vbiA9IHsKKwkudnBjb25maWdfZXJyb3JvZmZzZXRfc2hpZnQgPSBPTUFQMzQzMF9FUlJPUk9GRlNFVF9TSElGVCwKKwkudnBjb25maWdfZXJyb3JnYWluX21hc2sgPSBPTUFQMzQzMF9FUlJPUkdBSU5fTUFTSywKKwkudnBjb25maWdfZXJyb3JnYWluX3NoaWZ0ID0gT01BUDM0MzBfRVJST1JHQUlOX1NISUZULAorCS52cGNvbmZpZ19pbml0dm9sdGFnZV9zaGlmdCA9IE9NQVAzNDMwX0lOSVRWT0xUQUdFX1NISUZULAorCS52cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrID0gT01BUDM0MzBfSU5JVFZPTFRBR0VfTUFTSywKKwkudnBjb25maWdfdGltZW91dGVuID0gT01BUDM0MzBfVElNRU9VVEVOX01BU0ssCisJLnZwY29uZmlnX2luaXR2ZGQgPSBPTUFQMzQzMF9JTklUVkREX01BU0ssCisJLnZwY29uZmlnX2ZvcmNldXBkYXRlID0gT01BUDM0MzBfRk9SQ0VVUERBVEVfTUFTSywKKwkudnBjb25maWdfdnBlbmFibGUgPSBPTUFQMzQzMF9WUEVOQUJMRV9NQVNLLAorCS52c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW5fc2hpZnQgPSBPTUFQMzQzMF9TTVBTV0FJVFRJTUVNSU5fU0hJRlQsCisJLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heF9zaGlmdCA9IE9NQVAzNDMwX1NNUFNXQUlUVElNRU1BWF9TSElGVCwKKwkudnN0ZXBtaW5fc3RlcG1pbl9zaGlmdCA9IE9NQVAzNDMwX1ZTVEVQTUlOX1NISUZULAorCS52c3RlcG1heF9zdGVwbWF4X3NoaWZ0ID0gT01BUDM0MzBfVlNURVBNQVhfU0hJRlQsCisJLnZsaW1pdHRvX3ZkZG1pbl9zaGlmdCA9IE9NQVAzNDMwX1ZERE1JTl9TSElGVCwKKwkudmxpbWl0dG9fdmRkbWF4X3NoaWZ0ID0gT01BUDM0MzBfVkRETUFYX1NISUZULAorCS52bGltaXR0b190aW1lb3V0X3NoaWZ0ID0gT01BUDM0MzBfVElNRU9VVF9TSElGVCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF92cF9wcm1faXJxc3RfZGF0YSBvbWFwM192cDFfcHJtX2lycXN0X2RhdGEgPSB7CisJLnBybV9pcnFzdF9yZWcgPSBPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQsCisJLnRyYW54ZG9uZV9zdGF0dXMgPSBPTUFQMzQzMF9WUDFfVFJBTlhET05FX1NUX01BU0ssCit9OworCitzdHJ1Y3Qgb21hcF92cF9pbnN0YW5jZV9kYXRhIG9tYXAzX3ZwMV9kYXRhID0geworCS52cF9jb21tb24gPSAmb21hcDNfdnBfY29tbW9uLAorCS52cGNvbmZpZyA9IE9NQVAzX1BSTV9WUDFfQ09ORklHX09GRlNFVCwKKwkudnN0ZXBtaW4gPSBPTUFQM19QUk1fVlAxX1ZTVEVQTUlOX09GRlNFVCwKKwkudnN0ZXBtYXggPSBPTUFQM19QUk1fVlAxX1ZTVEVQTUFYX09GRlNFVCwKKwkudmxpbWl0dG8gPSBPTUFQM19QUk1fVlAxX1ZMSU1JVFRPX09GRlNFVCwKKwkudnN0YXR1cyA9IE9NQVAzX1BSTV9WUDFfU1RBVFVTX09GRlNFVCwKKwkudm9sdGFnZSA9IE9NQVAzX1BSTV9WUDFfVk9MVEFHRV9PRkZTRVQsCisJLnBybV9pcnFzdF9kYXRhID0gJm9tYXAzX3ZwMV9wcm1faXJxc3RfZGF0YSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF92cF9wcm1faXJxc3RfZGF0YSBvbWFwM192cDJfcHJtX2lycXN0X2RhdGEgPSB7CisJLnBybV9pcnFzdF9yZWcgPSBPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQsCisJLnRyYW54ZG9uZV9zdGF0dXMgPSBPTUFQMzQzMF9WUDJfVFJBTlhET05FX1NUX01BU0ssCit9OworCitzdHJ1Y3Qgb21hcF92cF9pbnN0YW5jZV9kYXRhIG9tYXAzX3ZwMl9kYXRhID0geworCS52cF9jb21tb24gPSAmb21hcDNfdnBfY29tbW9uLAorCS52cGNvbmZpZyA9IE9NQVAzX1BSTV9WUDJfQ09ORklHX09GRlNFVCwKKwkudnN0ZXBtaW4gPSBPTUFQM19QUk1fVlAyX1ZTVEVQTUlOX09GRlNFVCwKKwkudnN0ZXBtYXggPSBPTUFQM19QUk1fVlAyX1ZTVEVQTUFYX09GRlNFVCwKKwkudmxpbWl0dG8gPSBPTUFQM19QUk1fVlAyX1ZMSU1JVFRPX09GRlNFVCwKKwkudnN0YXR1cyA9IE9NQVAzX1BSTV9WUDJfU1RBVFVTX09GRlNFVCwKKwkudm9sdGFnZSA9IE9NQVAzX1BSTV9WUDJfVk9MVEFHRV9PRkZTRVQsCisJLnBybV9pcnFzdF9kYXRhID0gJm9tYXAzX3ZwMl9wcm1faXJxc3RfZGF0YSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZwNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZwNDR4eF9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkMWFkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdnA0NHh4X2RhdGEuYwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIE9NQVAzIFZvbHRhZ2UgUHJvY2Vzc29yIChWUCkgZGF0YQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogUmFqZW5kcmEgTmF5YWsgPHJuYXlha0B0aS5jb20+CisgKiBMZXNseSBBIE0gPHgwMDgwOTcwQHRpLmNvbT4KKyAqIFRoYXJhIEdvcGluYXRoIDx0aGFyYUB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExIE5va2lhIENvcnBvcmF0aW9uCisgKiBLYWxsZSBKb2tpbmllbWkKKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKKyNpbmNsdWRlICJwcm00NHh4LmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgorI2luY2x1ZGUgInZvbHRhZ2UuaCIKKworI2luY2x1ZGUgInZwLmgiCisKKy8qCisgKiBWUCBkYXRhIGNvbW1vbiB0byA0NHh4IGNoaXBzCisgKiBYWFggVGhpcyBzdHVmZiBwcmVzdW1hYmx5IGJlbG9uZ3MgaW4gdGhlIHZwNDR4eC5jIG9yIHZwLmMgZmlsZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3ZwX2NvbW1vbl9kYXRhIG9tYXA0X3ZwX2NvbW1vbiA9IHsKKwkudnBjb25maWdfZXJyb3JvZmZzZXRfc2hpZnQgPSBPTUFQNDQzMF9FUlJPUk9GRlNFVF9TSElGVCwKKwkudnBjb25maWdfZXJyb3JnYWluX21hc2sgPSBPTUFQNDQzMF9FUlJPUkdBSU5fTUFTSywKKwkudnBjb25maWdfZXJyb3JnYWluX3NoaWZ0ID0gT01BUDQ0MzBfRVJST1JHQUlOX1NISUZULAorCS52cGNvbmZpZ19pbml0dm9sdGFnZV9zaGlmdCA9IE9NQVA0NDMwX0lOSVRWT0xUQUdFX1NISUZULAorCS52cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrID0gT01BUDQ0MzBfSU5JVFZPTFRBR0VfTUFTSywKKwkudnBjb25maWdfdGltZW91dGVuID0gT01BUDQ0MzBfVElNRU9VVEVOX01BU0ssCisJLnZwY29uZmlnX2luaXR2ZGQgPSBPTUFQNDQzMF9JTklUVkREX01BU0ssCisJLnZwY29uZmlnX2ZvcmNldXBkYXRlID0gT01BUDQ0MzBfRk9SQ0VVUERBVEVfTUFTSywKKwkudnBjb25maWdfdnBlbmFibGUgPSBPTUFQNDQzMF9WUEVOQUJMRV9NQVNLLAorCS52c3RlcG1pbl9zbXBzd2FpdHRpbWVtaW5fc2hpZnQgPSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNSU5fU0hJRlQsCisJLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heF9zaGlmdCA9IE9NQVA0NDMwX1NNUFNXQUlUVElNRU1BWF9TSElGVCwKKwkudnN0ZXBtaW5fc3RlcG1pbl9zaGlmdCA9IE9NQVA0NDMwX1ZTVEVQTUlOX1NISUZULAorCS52c3RlcG1heF9zdGVwbWF4X3NoaWZ0ID0gT01BUDQ0MzBfVlNURVBNQVhfU0hJRlQsCisJLnZsaW1pdHRvX3ZkZG1pbl9zaGlmdCA9IE9NQVA0NDMwX1ZERE1JTl9TSElGVCwKKwkudmxpbWl0dG9fdmRkbWF4X3NoaWZ0ID0gT01BUDQ0MzBfVkRETUFYX1NISUZULAorCS52bGltaXR0b190aW1lb3V0X3NoaWZ0ID0gT01BUDQ0MzBfVElNRU9VVF9TSElGVCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF92cF9wcm1faXJxc3RfZGF0YSBvbWFwNF92cF9tcHVfcHJtX2lycXN0X2RhdGEgPSB7CisJLnBybV9pcnFzdF9yZWcgPSBPTUFQNF9QUk1fSVJRU1RBVFVTX01QVV8yX09GRlNFVCwKKwkudHJhbnhkb25lX3N0YXR1cyA9IE9NQVA0NDMwX1ZQX01QVV9UUkFOWERPTkVfU1RfTUFTSywKK307CisKK3N0cnVjdCBvbWFwX3ZwX2luc3RhbmNlX2RhdGEgb21hcDRfdnBfbXB1X2RhdGEgPSB7CisJLnZwX2NvbW1vbiA9ICZvbWFwNF92cF9jb21tb24sCisJLnZwY29uZmlnID0gT01BUDRfUFJNX1ZQX01QVV9DT05GSUdfT0ZGU0VULAorCS52c3RlcG1pbiA9IE9NQVA0X1BSTV9WUF9NUFVfVlNURVBNSU5fT0ZGU0VULAorCS52c3RlcG1heCA9IE9NQVA0X1BSTV9WUF9NUFVfVlNURVBNQVhfT0ZGU0VULAorCS52bGltaXR0byA9IE9NQVA0X1BSTV9WUF9NUFVfVkxJTUlUVE9fT0ZGU0VULAorCS52c3RhdHVzID0gT01BUDRfUFJNX1ZQX01QVV9TVEFUVVNfT0ZGU0VULAorCS52b2x0YWdlID0gT01BUDRfUFJNX1ZQX01QVV9WT0xUQUdFX09GRlNFVCwKKwkucHJtX2lycXN0X2RhdGEgPSAmb21hcDRfdnBfbXB1X3BybV9pcnFzdF9kYXRhLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3ZwX3BybV9pcnFzdF9kYXRhIG9tYXA0X3ZwX2l2YV9wcm1faXJxc3RfZGF0YSA9IHsKKwkucHJtX2lycXN0X3JlZyA9IE9NQVA0X1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCwKKwkudHJhbnhkb25lX3N0YXR1cyA9IE9NQVA0NDMwX1ZQX0lWQV9UUkFOWERPTkVfU1RfTUFTSywKK307CisKK3N0cnVjdCBvbWFwX3ZwX2luc3RhbmNlX2RhdGEgb21hcDRfdnBfaXZhX2RhdGEgPSB7CisJLnZwX2NvbW1vbiA9ICZvbWFwNF92cF9jb21tb24sCisJLnZwY29uZmlnID0gT01BUDRfUFJNX1ZQX0lWQV9DT05GSUdfT0ZGU0VULAorCS52c3RlcG1pbiA9IE9NQVA0X1BSTV9WUF9JVkFfVlNURVBNSU5fT0ZGU0VULAorCS52c3RlcG1heCA9IE9NQVA0X1BSTV9WUF9JVkFfVlNURVBNQVhfT0ZGU0VULAorCS52bGltaXR0byA9IE9NQVA0X1BSTV9WUF9JVkFfVkxJTUlUVE9fT0ZGU0VULAorCS52c3RhdHVzID0gT01BUDRfUFJNX1ZQX0lWQV9TVEFUVVNfT0ZGU0VULAorCS52b2x0YWdlID0gT01BUDRfUFJNX1ZQX0lWQV9WT0xUQUdFX09GRlNFVCwKKwkucHJtX2lycXN0X2RhdGEgPSAmb21hcDRfdnBfaXZhX3BybV9pcnFzdF9kYXRhLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3ZwX3BybV9pcnFzdF9kYXRhIG9tYXA0X3ZwX2NvcmVfcHJtX2lycXN0X2RhdGEgPSB7CisJLnBybV9pcnFzdF9yZWcgPSBPTUFQNF9QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQsCisJLnRyYW54ZG9uZV9zdGF0dXMgPSBPTUFQNDQzMF9WUF9DT1JFX1RSQU5YRE9ORV9TVF9NQVNLLAorfTsKKworc3RydWN0IG9tYXBfdnBfaW5zdGFuY2VfZGF0YSBvbWFwNF92cF9jb3JlX2RhdGEgPSB7CisJLnZwX2NvbW1vbiA9ICZvbWFwNF92cF9jb21tb24sCisJLnZwY29uZmlnID0gT01BUDRfUFJNX1ZQX0NPUkVfQ09ORklHX09GRlNFVCwKKwkudnN0ZXBtaW4gPSBPTUFQNF9QUk1fVlBfQ09SRV9WU1RFUE1JTl9PRkZTRVQsCisJLnZzdGVwbWF4ID0gT01BUDRfUFJNX1ZQX0NPUkVfVlNURVBNQVhfT0ZGU0VULAorCS52bGltaXR0byA9IE9NQVA0X1BSTV9WUF9DT1JFX1ZMSU1JVFRPX09GRlNFVCwKKwkudnN0YXR1cyA9IE9NQVA0X1BSTV9WUF9DT1JFX1NUQVRVU19PRkZTRVQsCisJLnZvbHRhZ2UgPSBPTUFQNF9QUk1fVlBfQ09SRV9WT0xUQUdFX09GRlNFVCwKKwkucHJtX2lycXN0X2RhdGEgPSAmb21hcDRfdnBfY29yZV9wcm1faXJxc3RfZGF0YSwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYwppbmRleCA4ZGMyYzc2Li45ODZjM2JmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL2JyaWRnZS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvb3Jpb241eC5oPgogI2luY2x1ZGUgPHBsYXQvZWhjaS1vcmlvbi5oPgpAQCAtNTk5LDYgKzYwMCwxMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaW1lIGhhbmRsaW5nCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgX19pbml0IG9yaW9uNXhfaW5pdF9lYXJseSh2b2lkKQoreworCW9yaW9uX3RpbWVfc2V0X2Jhc2UoVElNRVJfVklSVF9CQVNFKTsKK30KKwogaW50IG9yaW9uNXhfdGNsazsKIAogaW50IF9faW5pdCBvcmlvbjV4X2ZpbmRfdGNsayh2b2lkKQpAQCAtNjE2LDcgKzYyMiw5IEBACiBzdGF0aWMgdm9pZCBvcmlvbjV4X3RpbWVyX2luaXQodm9pZCkKIHsKIAlvcmlvbjV4X3RjbGsgPSBvcmlvbjV4X2ZpbmRfdGNsaygpOwotCW9yaW9uX3RpbWVfaW5pdChJUlFfT1JJT041WF9CUklER0UsIG9yaW9uNXhfdGNsayk7CisKKwlvcmlvbl90aW1lX2luaXQoT1JJT041WF9CUklER0VfVklSVF9CQVNFLCBCUklER0VfSU5UX1RJTUVSMV9DTFIsCisJCQlJUlFfT1JJT041WF9CUklER0UsIG9yaW9uNXhfdGNsayk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgb3Jpb241eF90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaAppbmRleCA4ZjAwNDUwLi5mMmIyYjM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5oCkBAIC05LDYgKzksNyBAQAogICogQmFzaWMgT3Jpb24gaW5pdCBmdW5jdGlvbnMgdXNlZCBlYXJseSBieSBtYWNoaW5lLXNldHVwLgogICovCiB2b2lkIG9yaW9uNXhfbWFwX2lvKHZvaWQpOwordm9pZCBvcmlvbjV4X2luaXRfZWFybHkodm9pZCk7CiB2b2lkIG9yaW9uNXhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIG9yaW9uNXhfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgb3Jpb241eF90Y2xrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYwppbmRleCBiMWM0NTFmLi40MjU4MDc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYwpAQCAtMzM5LDYgKzMzOSw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gZDJuZXRfaW5pdCwKIAkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogCS5maXh1cAkJPSB0YWdfZml4dXBfbWVtMzIsCkBAIC0zNTAsNiArMzUxLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBkMm5ldF9pbml0LAogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKIAkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCiAJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kYjg4ZjUyODEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kYjg4ZjUyODEtc2V0dXAuYwppbmRleCBkZjEwODNmLi5jMTBhMTE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZGI4OGY1MjgxLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RiODhmNTI4MS1zZXR1cC5jCkBAIC0zNjEsNiArMzYxLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBkYjg4ZjUyODFfaW5pdCwKIAkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYwppbmRleCAzYTdiYzBlLi45MGFiMDIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCkBAIC03MzMsNiArNzMzLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBkbnMzMjNfaW5pdCwKIAkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogCS5maXh1cAkJPSB0YWdfZml4dXBfbWVtMzIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZWRtaW5pX3YyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZWRtaW5pX3YyLXNldHVwLmMKaW5kZXggYmE5ODQ1OS4uZDAzN2E5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2VkbWluaV92Mi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9lZG1pbmlfdjItc2V0dXAuYwpAQCAtMjU0LDYgKzI1NCw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gZWRtaW5pX3YyX2luaXQsCiAJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9yaW9uNXhfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKIAkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCmluZGV4IDVjOTc0NGMuLjk2NDg0YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKQEAgLTIyLDE0ICsyMiwxMiBAQAogCiAjZGVmaW5lIENQVV9TT0ZUX1JFU0VUCQkoT1JJT041WF9CUklER0VfVklSVF9CQVNFIHwgMHgxMGMpCiAKKyNkZWZpbmUgQlJJREdFX0NBVVNFCQkoT1JJT041WF9CUklER0VfVklSVF9CQVNFIHwgMHgxMTApCisKICNkZWZpbmUgUE9XRVJfTU5HX0NUUkxfUkVHCShPUklPTjVYX0JSSURHRV9WSVJUX0JBU0UgfCAweDExQykKIAotI2RlZmluZSBCUklER0VfQ0FVU0UJCShPUklPTjVYX0JSSURHRV9WSVJUX0JBU0UgfCAweDExMCkKICNkZWZpbmUgV0RUX0lOVF9SRVEJCTB4MDAwOAogCi0jZGVmaW5lIEJSSURHRV9NQVNLCQkoT1JJT041WF9CUklER0VfVklSVF9CQVNFIHwgMHgxMTQpCi0jZGVmaW5lIEJSSURHRV9JTlRfVElNRVIwCTB4MDAwMgotI2RlZmluZSBCUklER0VfSU5UX1RJTUVSMQkweDAwMDQKICNkZWZpbmUgQlJJREdFX0lOVF9USU1FUjFfQ0xSCSh+MHgwMDA0KQogCiAjZGVmaW5lIE1BSU5fSVJRX0NBVVNFCQkoT1JJT041WF9CUklER0VfVklSVF9CQVNFIHwgMHgyMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGQ4MTgyZTguLmExZDBiNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC02LDMyICs2LDQgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19ICi0KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLwotCi0jZGVmaW5lIEdQSU9fTUFYCQkzMgotI2RlZmluZSBHUElPX09VVChwaW4pCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTAwKQotI2RlZmluZSBHUElPX0lPX0NPTkYocGluKQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTA0KQotI2RlZmluZSBHUElPX0JMSU5LX0VOKHBpbikJT1JJT041WF9ERVZfQlVTX1JFRygweDEwOCkKLSNkZWZpbmUgR1BJT19JTl9QT0wocGluKQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTBjKQotI2RlZmluZSBHUElPX0RBVEFfSU4ocGluKQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTEwKQotI2RlZmluZSBHUElPX0VER0VfQ0FVU0UocGluKQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTE0KQotI2RlZmluZSBHUElPX0VER0VfTUFTSyhwaW4pCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMTgpCi0jZGVmaW5lIEdQSU9fTEVWRUxfTUFTSyhwaW4pCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMWMpCi0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKGludCBwaW4pCi17Ci0JcmV0dXJuIHBpbiArIElSUV9PUklPTjVYX0dQSU9fU1RBUlQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKGludCBpcnEpCi17Ci0JcmV0dXJuIGlycSAtIElSUV9PUklPTjVYX0dQSU9fU1RBUlQ7Ci19Ci0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL29yaW9uNXguaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvb3Jpb241eC5oCmluZGV4IDJkODc2NjUuLjBhMjhiYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvb3Jpb241eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvb3Jpb241eC5oCkBAIC03Myw2ICs3Myw3IEBACiAjZGVmaW5lIE9SSU9ONVhfREVWX0JVU19QSFlTX0JBU0UJKE9SSU9ONVhfUkVHU19QSFlTX0JBU0UgfCAweDEwMDAwKQogI2RlZmluZSBPUklPTjVYX0RFVl9CVVNfVklSVF9CQVNFCShPUklPTjVYX1JFR1NfVklSVF9CQVNFIHwgMHgxMDAwMCkKICNkZWZpbmUgT1JJT041WF9ERVZfQlVTX1JFRyh4KQkJKE9SSU9ONVhfREVWX0JVU19WSVJUX0JBU0UgfCAoeCkpCisjZGVmaW5lICBHUElPX1ZJUlRfQkFTRQkJCU9SSU9ONVhfREVWX0JVU19SRUcoMHgwMTAwKQogI2RlZmluZSAgU1BJX1BIWVNfQkFTRQkJCShPUklPTjVYX0RFVl9CVVNfUEhZU19CQVNFIHwgMHgwNjAwKQogI2RlZmluZSAgSTJDX1BIWVNfQkFTRQkJCShPUklPTjVYX0RFVl9CVVNfUEhZU19CQVNFIHwgMHgxMDAwKQogI2RlZmluZSAgVUFSVDBfUEhZU19CQVNFCQkoT1JJT041WF9ERVZfQlVTX1BIWVNfQkFTRSB8IDB4MjAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYwppbmRleCBkNzUxMmI5Li5lZDg1ODkxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYwpAQCAtMjgsMjcgKzI4LDEyIEBACiAKIHZvaWQgX19pbml0IG9yaW9uNXhfaW5pdF9pcnEodm9pZCkKIHsKLQlpbnQgaTsKLQogCW9yaW9uX2lycV9pbml0KDAsICh2b2lkIF9faW9tZW0gKilNQUlOX0lSUV9NQVNLKTsKIAogCS8qCi0JICogTWFzayBhbmQgY2xlYXIgR1BJTyBJUlEgaW50ZXJydXB0cworCSAqIEluaXRpYWxpemUgZ3Bpb2xpYiBmb3IgR1BJT3MgMC0zMS4KIAkgKi8KLQl3cml0ZWwoMHgwLCBHUElPX0xFVkVMX01BU0soMCkpOwotCXdyaXRlbCgweDAsIEdQSU9fRURHRV9NQVNLKDApKTsKLQl3cml0ZWwoMHgwLCBHUElPX0VER0VfQ0FVU0UoMCkpOwotCi0JLyoKLQkgKiBSZWdpc3RlciBjaGFpbmVkIGxldmVsIGhhbmRsZXJzIGZvciBHUElPIElSUXMgYnkgZGVmYXVsdC4KLQkgKiBVc2VyIGNhbiB1c2Ugc2V0X3R5cGUoKSBpZiBoZSB3YW50cyB0byB1c2UgZWRnZSB0eXBlcyBoYW5kbGVycy4KLQkgKi8KLQlmb3IgKGkgPSBJUlFfT1JJT041WF9HUElPX1NUQVJUOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpLCAmb3Jpb25fZ3Bpb19pcnFfY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX2Rlc2NbaV0uc3RhdHVzIHw9IElSUV9MRVZFTDsKLQkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKLQl9CisJb3Jpb25fZ3Bpb19pbml0KDAsIDMyLCBHUElPX1ZJUlRfQkFTRSwgMCwgSVJRX09SSU9ONVhfR1BJT19TVEFSVCk7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18wXzcsIGdwaW9faXJxX2hhbmRsZXIpOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9PUklPTjVYX0dQSU9fOF8xNSwgZ3Bpb19pcnFfaGFuZGxlcik7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18xNl8yMywgZ3Bpb19pcnFfaGFuZGxlcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgva3Vyb2JveF9wcm8tc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9rdXJvYm94X3Byby1zZXR1cC5jCmluZGV4IDRiZTlhYTAuLjQ3NDk3YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9rdXJvYm94X3Byby1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9rdXJvYm94X3Byby1zZXR1cC5jCkBAIC0zODIsNiArMzgyLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBrdXJvYm94X3Byb19pbml0LAogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKIAkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCiAJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKQEAgLTM5NCw2ICszOTUsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGt1cm9ib3hfcHJvX2luaXQsCiAJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9yaW9uNXhfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKIAkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzLWNobC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzLWNobC1zZXR1cC5jCmluZGV4IDIwYTliNjYuLjZhZTEyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9scy1jaGwtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHMtY2hsLXNldHVwLmMKQEAgLTMyMSw2ICszMjEsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGxzY2hsX2luaXQsCiAJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9yaW9uNXhfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKIAkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzX2hnbC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzX2hnbC1zZXR1cC5jCmluZGV4IDQzNzM2NGIuLjdhZGFmZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc19oZ2wtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNfaGdsLXNldHVwLmMKQEAgLTI2OCw2ICsyNjgsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGxzX2hnbF9pbml0LAogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKIAkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCiAJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc21pbmktc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc21pbmktc2V0dXAuYwppbmRleCBhYjliMGNmLi44Njk5NThmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNtaW5pLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzbWluaS1zZXR1cC5jCkBAIC0yNzAsNiArMjcwLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBsc21pbmlfaW5pdCwKIAkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogCS5maXh1cAkJPSB0YWdfZml4dXBfbWVtMzIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbXBwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbXBwLmMKaW5kZXggZGI0ODVkMy4uMjI4ODIwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L21wcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9tcHAuYwpAQCAtMTI0LDkgKzEyNCw2IEBACiAJdTMyIG1wcF84XzE1X2N0cmwgPSByZWFkbChNUFBfOF8xNV9DVFJMKTsKIAl1MzIgbXBwXzE2XzE5X2N0cmwgPSByZWFkbChNUFBfMTZfMTlfQ1RSTCk7CiAKLQkvKiBJbml0aWFsaXplIGdwaW9saWIuICovCi0Jb3Jpb25fZ3Bpb19pbml0KCk7Ci0KIAlmb3IgKCA7IG1vZGUtPm1wcCA+PSAwOyBtb2RlKyspIHsKIAkJdTMyICpyZWc7CiAJCWludCBudW1fdHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9tc3MyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbXNzMi1zZXR1cC5jCmluZGV4IDJmMGUxNmMuLmI0M2IyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9tc3MyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L21zczItc2V0dXAuYwpAQCAtMjY0LDYgKzI2NCw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gbXNzMl9pbml0LAogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKIAkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCiAJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L212MjEyMC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L212MjEyMC1zZXR1cC5jCmluZGV4IGIzZDkwZjIuLmM1NWQwNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9tdjIxMjAtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbXYyMTIwLXNldHVwLmMKQEAgLTIzMiw2ICsyMzIsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IG12MjEyMF9pbml0LAogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKIAkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCiAJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L25ldDJiaWctc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9uZXQyYmlnLXNldHVwLmMKaW5kZXggZDY2NjViMy4uNDI5ZWNhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L25ldDJiaWctc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbmV0MmJpZy1zZXR1cC5jCkBAIC00MjIsNiArNDIyLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSBuZXQyYmlnX2luaXQsCiAJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9yaW9uNXhfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKIAkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZnhvLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwppbmRleCBmNGMyNmZkLi4zNDMxMGFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwpAQCAtMTcyLDYgKzE3Miw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gcmQ4OGY1MTgxbF9meG9faW5pdCwKIAkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogCS5maXh1cAkJPSB0YWdfZml4dXBfbWVtMzIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwppbmRleCBiNTk0MjkwLi5jMWY3OWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKQEAgLTE4NCw2ICsxODQsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IHJkODhmNTE4MWxfZ2VfaW5pdCwKIAkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogCS5maXh1cAkJPSB0YWdfZml4dXBfbWVtMzIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgyLXNldHVwLmMKaW5kZXggMTY1ZWQ4NzAuLjY3ZWM2OTU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4Mi1zZXR1cC5jCkBAIC0zMDgsNiArMzA4LDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSByZDg4ZjUxODJfaW5pdCwKIAkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjYxODNhcC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKaW5kZXggMDJmZjQ1Zi4uYjA4MGM2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKQEAgLTEyNiw2ICsxMjYsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IHJkODhmNjE4M2FwX2dlX2luaXQsCiAJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9yaW9uNXhfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKIAkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RlcmFzdGF0aW9uX3BybzItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90ZXJhc3RhdGlvbl9wcm8yLXNldHVwLmMKaW5kZXggNDQwM2ZhZS4uNTY1M2VlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RlcmFzdGF0aW9uX3BybzItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdGVyYXN0YXRpb25fcHJvMi1zZXR1cC5jCkBAIC0zNjEsNiArMzYxLDcgQEAKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5pbml0X21hY2hpbmUJPSB0c3AyX2luaXQsCiAJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9lYXJseQk9IG9yaW9uNXhfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKIAkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzMjA5LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHMyMDktc2V0dXAuYwppbmRleCAxZTE5NjEyLi44YmJkMjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHMyMDktc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHMyMDktc2V0dXAuYwpAQCAtMzI1LDYgKzMyNSw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gcW5hcF90czIwOV9pbml0LAogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKIAkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCiAJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czQwOS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNDA5LXNldHVwLmMKaW5kZXggNDI4YWYyMC4uOTJmMzkzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNDA5LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNDA5LXNldHVwLmMKQEAgLTMxNCw2ICszMTQsNyBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IHFuYXBfdHM0MDlfaW5pdCwKIAkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogCS5maXh1cAkJPSB0YWdfZml4dXBfbWVtMzIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LWZwZ2EuaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtZnBnYS5oCmluZGV4IDM3YjNkNDguLjE1MWU4OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtZnBnYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtZnBnYS5oCkBAIC0xLDMgKzEsNCBAQAorI2RlZmluZSBUUzc4MDBfRlBHQV9NQUdJQyAweDAwYjQ4MAogI2RlZmluZSBGUEdBSUQoX21hZ2ljLCBfcmV2KSAoKF9tYWdpYyA8PCA4KSArIF9yZXYpCiAKIC8qCkBAIC02LDExICs3LDE1IEBACiAgKi8KIGVudW0gZnBnYV9pZHMgewogCS8qIFRlY2hub2xvZ2ljIFN5c3RlbXMgKi8KLQlUUzc4MDBfUkVWXzEJPSBGUEdBSUQoMHgwMGI0ODAsIDB4MDEpLAotCVRTNzgwMF9SRVZfMgk9IEZQR0FJRCgweDAwYjQ4MCwgMHgwMiksCi0JVFM3ODAwX1JFVl8zCT0gRlBHQUlEKDB4MDBiNDgwLCAweDAzKSwKLQlUUzc4MDBfUkVWXzQJPSBGUEdBSUQoMHgwMGI0ODAsIDB4MDQpLAotCVRTNzgwMF9SRVZfNQk9IEZQR0FJRCgweDAwYjQ4MCwgMHgwNSksCisJVFM3ODAwX1JFVl8xCT0gRlBHQUlEKFRTNzgwMF9GUEdBX01BR0lDLCAweDAxKSwKKwlUUzc4MDBfUkVWXzIJPSBGUEdBSUQoVFM3ODAwX0ZQR0FfTUFHSUMsIDB4MDIpLAorCVRTNzgwMF9SRVZfMwk9IEZQR0FJRChUUzc4MDBfRlBHQV9NQUdJQywgMHgwMyksCisJVFM3ODAwX1JFVl80CT0gRlBHQUlEKFRTNzgwMF9GUEdBX01BR0lDLCAweDA0KSwKKwlUUzc4MDBfUkVWXzUJPSBGUEdBSUQoVFM3ODAwX0ZQR0FfTUFHSUMsIDB4MDUpLAorCVRTNzgwMF9SRVZfNgk9IEZQR0FJRChUUzc4MDBfRlBHQV9NQUdJQywgMHgwNiksCisJVFM3ODAwX1JFVl83CT0gRlBHQUlEKFRTNzgwMF9GUEdBX01BR0lDLCAweDA3KSwKKwlUUzc4MDBfUkVWXzgJPSBGUEdBSUQoVFM3ODAwX0ZQR0FfTUFHSUMsIDB4MDgpLAorCVRTNzgwMF9SRVZfOQk9IEZQR0FJRChUUzc4MDBfRlBHQV9NQUdJQywgMHgwOSksCiAKIAkvKiBVbmFmZm9yZGFibGUgJiBFeHBlbnNpdmUgKi8KIAlVQUVfRFVNTVkJPSBGUEdBSUQoMHhmZmZmZmYsIDB4MDEpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1zZXR1cC5jCmluZGV4IGMxYzFjZDAuLjg1NTQ3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LXNldHVwLmMKQEAgLTE5MSw2ICsxOTEsNjAgQEAKIAlyZXR1cm4gcmVhZGIoVFNfTkFORF9DVFJMKSAmIDB4MjA7CiB9CiAKK3N0YXRpYyB2b2lkIHRzNzh4eF90c19uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCWNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGNoaXAtPklPX0FERFJfVzsKKwl1bnNpZ25lZCBsb25nIG9mZiA9ICgodW5zaWduZWQgbG9uZylidWYgJiAzKTsKKwlpbnQgc3o7CisKKwlpZiAob2ZmKSB7CisJCXN6ID0gbWluX3QoaW50LCA0IC0gb2ZmLCBsZW4pOworCQl3cml0ZXNiKGlvX2Jhc2UsIGJ1Ziwgc3opOworCQlidWYgKz0gc3o7CisJCWxlbiAtPSBzejsKKwl9CisKKwlzeiA9IGxlbiA+PiAyOworCWlmIChzeikgeworCQl1MzIgKmJ1ZjMyID0gKHUzMiAqKWJ1ZjsKKwkJd3JpdGVzbChpb19iYXNlLCBidWYzMiwgc3opOworCQlidWYgKz0gc3ogPDwgMjsKKwkJbGVuIC09IHN6IDw8IDI7CisJfQorCisJaWYgKGxlbikKKwkJd3JpdGVzYihpb19iYXNlLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHRzNzh4eF90c19uYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gY2hpcC0+SU9fQUREUl9SOworCXVuc2lnbmVkIGxvbmcgb2ZmID0gKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDMpOworCWludCBzejsKKworCWlmIChvZmYpIHsKKwkJc3ogPSBtaW5fdChpbnQsIDQgLSBvZmYsIGxlbik7CisJCXJlYWRzYihpb19iYXNlLCBidWYsIHN6KTsKKwkJYnVmICs9IHN6OworCQlsZW4gLT0gc3o7CisJfQorCisJc3ogPSBsZW4gPj4gMjsKKwlpZiAoc3opIHsKKwkJdTMyICpidWYzMiA9ICh1MzIgKilidWY7CisJCXJlYWRzbChpb19iYXNlLCBidWYzMiwgc3opOworCQlidWYgKz0gc3ogPDwgMjsKKwkJbGVuIC09IHN6IDw8IDI7CisJfQorCisJaWYgKGxlbikKKwkJcmVhZHNiKGlvX2Jhc2UsIGJ1ZiwgbGVuKTsKK30KKwogY29uc3QgY2hhciAqdHNfbmFuZF9wYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB0czc4eHhfdHNfbmFuZF9wYXJ0c1tdID0gewpAQCAtMjMzLDYgKzI4Nyw4IEBACiAJCSAqLwogCQkuY21kX2N0cmwJCT0gdHM3OHh4X3RzX25hbmRfY21kX2N0cmwsCiAJCS5kZXZfcmVhZHkJCT0gdHM3OHh4X3RzX25hbmRfZGV2X3JlYWR5LAorCQkud3JpdGVfYnVmCQk9IHRzNzh4eF90c19uYW5kX3dyaXRlX2J1ZiwKKwkJLnJlYWRfYnVmCQk9IHRzNzh4eF90c19uYW5kX3JlYWRfYnVmLAogCX0sCiB9OwogCkBAIC0zMzQsMTQgKzM5MCwyOSBAQAogCWNhc2UgVFM3ODAwX1JFVl8zOgogCWNhc2UgVFM3ODAwX1JFVl80OgogCWNhc2UgVFM3ODAwX1JFVl81OgorCWNhc2UgVFM3ODAwX1JFVl82OgorCWNhc2UgVFM3ODAwX1JFVl83OgorCWNhc2UgVFM3ODAwX1JFVl84OgorCWNhc2UgVFM3ODAwX1JFVl85OgogCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMucHJlc2VudCA9IDE7CiAJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQucHJlc2VudCA9IDE7CiAJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3JuZy5wcmVzZW50ID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPSAwOwotCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLnByZXNlbnQgPSAwOwotCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ybmcucHJlc2VudCA9IDA7CisJCS8qIGVuYWJsZSBkZXZpY2VzIGlmIG1hZ2ljIG1hdGNoZXMgKi8KKwkJc3dpdGNoICgodHM3OHh4X2ZwZ2EuaWQgPj4gOCkgJiAweGZmZmZmZikgeworCQljYXNlIFRTNzgwMF9GUEdBX01BR0lDOgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVFMtNzgwMCBGUEdBOiB1bnJlY29nbml6ZWQgcmV2aXNpb24gMHglLjJ4XG4iLAorCQkJCQl0czc4eHhfZnBnYS5pZCAmIDB4ZmYpOworCQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPSAxOworCQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID0gMTsKKwkJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3JuZy5wcmVzZW50ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPSAwOworCQkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID0gMDsKKwkJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3JuZy5wcmVzZW50ID0gMDsKKwkJfQogCX0KIH0KIApAQCAtNTUzLDYgKzYyNCw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gdHM3OHh4X2luaXQsCiAJLm1hcF9pbwkJPSB0czc4eHhfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb3Jpb241eF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93bnI4NTR0LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd25yODU0dC1zZXR1cC5jCmluZGV4IDc5OTRkNmUuLjRlNTIxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93bnI4NTR0LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3ducjg1NHQtc2V0dXAuYwpAQCAtMTc1LDYgKzE3NSw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gd25yODU0dF9pbml0LAogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKIAkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCiAJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCmluZGV4IGE1OTg5YjcuLmZhYjc5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYwpAQCAtMjYzLDYgKzI2Myw3IEBACiAJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gd3J0MzUwbl92Ml9pbml0LAogCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfZWFybHkJPSBvcmlvbjV4X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKIAkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCiAJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCmluZGV4IGUxOTRkOTIuLmQyYWY3MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvYmFsbG9vbjMuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcGNmODU3eC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYXgxNTg2Lmg+CkBAIC01MSw4ICs1Miw2IEBACiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgotCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IDc5ODQyNjguLmJmY2E3ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21mZC9kYTkwM3guaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgpAQCAtNDgsNyArNDksNiBAQAogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8cGxhdC9weGEzeHhfbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eC11MmQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jCmluZGV4IDI4ZjY2N2UuLjgxYzNjNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CkBAIC0yNyw4ICsyOCw2IEBACiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgotCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtaW5jb21lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC1pbmNvbWUuYwppbmRleCAwN2I2MmEwLi5lZTc5NzM5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtaW5jb21lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtaW5jb21lLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTMzLDggKzM0LDYgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTI3eC11ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgotCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKaW5kZXggYTU0NTJhMy4uZDRlNzA1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KQEAgLTQ1LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCmluZGV4IGEzMDU0MjQuLjA0ODFjMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCkBAIC0xNywxMiArMTcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtNTAxLmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8bWFjaC9jc2I3MjYuaD4KICNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IDRjNzY2ZTMuLmM0YmYwOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAKICNpbmNsdWRlIDxhc20vcG11Lmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KQEAgLTE2LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxtYWNoL2NhbWVyYS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KICNpbmNsdWRlIDxwbGF0L3B4YTN4eF9uYW5kLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKaW5kZXggYTc4YmIzMC4uYjQxMWQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FwbS1lbXVsYXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8cGxhdC9weGEyN3hfa2V5cGFkLmg+Ci0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2NhbWVyYS5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXp4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lenguYwppbmRleCA4N2NlYzBhLi45M2YwNWUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lenguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lenguYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLWxwMzk0NC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKQEAgLTMwLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxwbGF0L3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2NhbWVyYS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYwppbmRleCBhOTA4ZTBhLi42ZGUwYWQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC00Miw3ICs0Myw2IEBACiAKICNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvaHg0NzAwLmg+Ci0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KIAogI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCBjY2I3YmZhLi44N2MxZWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvZGE5MDN4Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL21heDczMnguaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC00NSw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxwbGF0L3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2xpdHRsZXRvbi5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8cGxhdC9weGEzeHhfbmFuZC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKaW5kZXggNDExOThmMC4uNTUzNTk5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2JxMjQwMjIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zNiw3ICszNyw2IEBACiAjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL21hZ2ljaWFuLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKaW5kZXggZDRiNmYyMy4uZjk1NDIyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDYsNyArNDcsNiBAQAogI2luY2x1ZGUgPG1hY2gvbWFpbnN0b25lLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKaW5kZXggZmFhZmVhMy4uNzhkOThhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWF4MTU4Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC01MCw3ICs1MSw2IEBACiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbXhtOHgxMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbXhtOHgxMC5jCmluZGV4IGNkZjdmNDEuLmI1YThmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL214bTh4MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9teG04eDEwLmMKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCi0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KICNpbmNsdWRlIDxwbGF0L3B4YTN4eF9uYW5kLmg+CiAKICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMKaW5kZXggMzU1NzJjNC4uNzJhZGIzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG0yN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ3Bpb192YnVzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21heDE1ODYuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0zNiw4ICszNyw2IEBACiAjaW5jbHVkZSA8bWFjaC9wYWxtYXNvYy5oPgogI2luY2x1ZGUgPG1hY2gvcGFsbTI3eC5oPgogCi0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KLQogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwppbmRleCA5MDgyMGZhLi45ZGJmM2NjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwpAQCAtMjMsMTIgKzIzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKICNpbmNsdWRlIDxhc20vZ3Bpby5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwppbmRleCA0ZjBmZjFhLi4zNTM1M2FmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3B4YTJ4eF9zcGkuaD4KQEAgLTQ0LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3Bvb2RsZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2xvY29tby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCAyOGIxMWJlLi4xY2I1ZDBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTMyLDggKzMzLDYgQEAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvc21lbWMuaD4KIAotI2luY2x1ZGUgPHBsYXQvaTJjLmg+Ci0KICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jCmluZGV4IDEyMzAzNDMuLmYzNzQyNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzIsNyArMzMsNiBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWludGMuaD4KICNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+Ci0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGE5NXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCmluZGV4IDQzNzk4MGYuLjIzYjIyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgpAQCAtMjcsNyArMjgsNiBAQAogI2luY2x1ZGUgPG1hY2gvcG0uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1pbnRjLmg+Ci0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYwppbmRleCA4MzYxMTUxLi40NzA5NDE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9saXMzbHYwMmQuaD4KQEAgLTUzLDcgKzU0LDYgQEAKICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPHBsYXQvcHhhM3h4X25hbmQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYwppbmRleCBjMWNhOGNiLi5lYjgzYzg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2Fhci5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2RhOTAzeC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KQEAgLTMxLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8bWFjaC9weGE5MzAuaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NhYXJiLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zYWFyYi5jCmluZGV4IGU0OTc5MjIuLjkzMjJmZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NhYXJiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2FhcmIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC84OHBtODYweC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTI0LDggKzI1LDYgQEAKICNpbmNsdWRlIDxtYWNoL21mcC1weGE5MzAuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAotI2luY2x1ZGUgPHBsYXQvaTJjLmg+Ci0KICNpbmNsdWRlICJnZW5lcmljLmgiCiAKICNkZWZpbmUgU0FBUkJfTlJfSVJRUwkoSVJRX0JPQVJEX1NUQVJUICsgNDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCBiNDlhMmMyLi4zOGUyYzA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KQEAgLTQ3LDggKzQ4LDYgQEAKICNpbmNsdWRlIDxtYWNoL3NoYXJwc2xfcG0uaD4KICNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgotCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3RhcmdhdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zdGFyZ2F0ZTIuYwppbmRleCA5YTE0ZmRiLi5jYjU2MTFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zdGFyZ2F0ZTIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zdGFyZ2F0ZTIuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2Y4NTd4Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eC11ZGMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiMy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIzLmMKaW5kZXggNzAxOTFhOS4uNzlmNDQyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIzLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvODhwbTg2MHguaD4KIApAQCAtMjMsOCArMjQsNiBAQAogCiAjaW5jbHVkZSA8bWFjaC9weGE5MzAuaD4KIAotI2luY2x1ZGUgPHBsYXQvaTJjLmg+Ci0KICNpbmNsdWRlICJkZXZpY2VzLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKaW5kZXggZjI1ODJlYy4uNWFkMzgwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTQxLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3Rvc2FfYnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCmluZGV4IDQyMzI2MWQuLjg1N2JiMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC00Nyw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKaW5kZXggNDllZWVhYi4uMTIyNzkyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CkBAIC00Nyw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXVhcnQuaD4KICNpbmNsdWRlIDxtYWNoL2FyY29tLXBjbWNpYS5oPgogI2luY2x1ZGUgPG1hY2gvdmlwZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZwYWMyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3ZwYWMyNzAuYwppbmRleCBiOWI1Nzk3Li5lNzA5ZmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS92cGFjMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdnBhYzI3MC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdWNiMTQwMC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYXgxNTg2Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtNDAsOCArNDEsNiBAQAogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9wYXRhX3B4YS5oPgogCi0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KLQogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3hjZXAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3hjZXAuYwppbmRleCA1MWMwMjgxLi5mNTVmOGYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpAQCAtMjYsOCArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KLQogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96Mi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvejIuYwppbmRleCBhMzIzZTA3Li5hYWY4ODM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3oyLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtNDAsOCArNDEsNiBAQAogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8cGxhdC9weGEyN3hfa2V5cGFkLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgotCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCmluZGV4IGI5MmFhM2IuLjczMGY1MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgogI2luY2x1ZGUgPGxpbnV4L2FwbS1lbXVsYXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jYW4vcGxhdGZvcm0vbWNwMjUxeC5oPgpAQCAtMzMsOCArMzQsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPHBsYXQvaTJjLmg+Ci0KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXVhcnQuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKaW5kZXggM2FhNzNiMy4uOTNjNjRkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKQEAgLTE3LDExICsxNywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9weGEzMDAuaD4KLSNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvenlsb25pdGUuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9oMTk0MC1ibHVldG9vdGguYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9oMTk0MC1ibHVldG9vdGguYwppbmRleCA2Yjg2YTcyLi4yYzEyNmJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaDE5NDAtYmx1ZXRvb3RoLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2gxOTQwLWJsdWV0b290aC5jCkBAIC0xOCwxMiArMTgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaDE5NDAtbGF0Y2guaD4KKyNpbmNsdWRlIDxtYWNoL2gxOTQwLmg+CiAKLSNkZWZpbmUgRFJWX05BTUUgICAgICAgICAgICAgICJoMTk0MC1idCIKKyNkZWZpbmUgRFJWX05BTUUgImgxOTQwLWJ0IgogCiAvKiBCbHVldG9vdGggY29udHJvbCAqLwogc3RhdGljIHZvaWQgaDE5NDBidF9lbmFibGUoaW50IG9uKQpAQCAtMzcsNiArMzksOCBAQAogCQlncGlvX3NldF92YWx1ZShTM0MyNDEwX0dQSCgxKSwgMSk7CiAJCW1kZWxheSgxMCk7CiAJCWdwaW9fc2V0X3ZhbHVlKFMzQzI0MTBfR1BIKDEpLCAwKTsKKworCQloMTk0MF9sZWRfYmxpbmtfc2V0KC1FSU5WQUwsIEdQSU9fTEVEX0JMSU5LLCBOVUxMLCBOVUxMKTsKIAl9CiAJZWxzZSB7CiAJCWdwaW9fc2V0X3ZhbHVlKFMzQzI0MTBfR1BIKDEpLCAxKTsKQEAgLTQ0LDYgKzQ4LDggQEAKIAkJZ3Bpb19zZXRfdmFsdWUoUzNDMjQxMF9HUEgoMSksIDApOwogCQltZGVsYXkoMTApOwogCQlncGlvX3NldF92YWx1ZShIMTk0MF9MQVRDSF9CTFVFVE9PVEhfUE9XRVIsIDApOworCisJCWgxOTQwX2xlZF9ibGlua19zZXQoLUVJTlZBTCwgR1BJT19MRURfTk9fQkxJTktfTE9XLCBOVUxMLCBOVUxMKTsKIAl9CiB9CiAKQEAgLTg1LDcgKzkxLDYgQEAKIAlzM2NfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEgoMyksIFMzQzI0MTBfR1BIM19SWEQwKTsKIAlzM2NfZ3Bpb19zZXRwdWxsKFMzQzI0MTBfR1BIKDMpLCBTM0NfR1BJT19QVUxMX05PTkUpOwogCi0KIAlyZmsgPSByZmtpbGxfYWxsb2MoRFJWX05BTUUsICZwZGV2LT5kZXYsIFJGS0lMTF9UWVBFX0JMVUVUT09USCwKIAkJCSZoMTk0MGJ0X3Jma2lsbF9vcHMsIE5VTEwpOwogCWlmICghcmZrKSB7CkBAIC05Myw4ICs5OCw2IEBACiAJCWdvdG8gZXJyX3Jma19hbGxvYzsKIAl9CiAKLQlyZmtpbGxfc2V0X2xlZF90cmlnZ2VyX25hbWUocmZrLCAiaDE5NDAtYmx1ZXRvb3RoIik7Ci0KIAlyZXQgPSByZmtpbGxfcmVnaXN0ZXIocmZrKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZmtpbGw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2gxOTQwLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2gxOTQwLmgKaW5kZXggNDU1OTc4NC4uMmFhNjgzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9oMTk0MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaDE5NDAuaApAQCAtMTcsNSArMTcsOCBAQAogI2RlZmluZSBIMTk0MF9TVVNQRU5EX0NIRUNLCQkoMHgzMDA4MDAwMCkKIAogZXh0ZXJuIHZvaWQgaDE5NDBfcG1fcmV0dXJuKHZvaWQpOworZXh0ZXJuIGludCBoMTk0MF9sZWRfYmxpbmtfc2V0KHVuc2lnbmVkIGdwaW8sIGludCBzdGF0ZSwKKwl1bnNpZ25lZCBsb25nICpkZWxheV9vbiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKTsKKwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9IMTk0MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwppbmRleCAxZTkzZjE3Li4yYTJmYTA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKQEAgLTIzLDggKzIzLDE1IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgorI2luY2x1ZGUgPGxpbnV4L3MzY19hZGNfYmF0dGVyeS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKICNpbmNsdWRlIDx2aWRlby9wbGF0Zm9ybV9sY2QuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CkBAIC0yMDMsMjAgKzIxMCwyMzkgQEAKIAkubnVtX2Rpc3BsYXlzID0gMSwKIAkuZGVmYXVsdF9kaXNwbGF5ID0gMCwKIAotCS5scGNzZWw9CTB4MDIsCi0JLmdwY2Nvbj0JMHhhYTk0MDY1OSwKLQkuZ3BjY29uX21hc2s9CTB4ZmZmZmZmZmYsCi0JLmdwY3VwPQkJMHgwMDAwZmZmZiwKLQkuZ3BjdXBfbWFzaz0JMHhmZmZmZmZmZiwKLQkuZ3BkY29uPQkweGFhODRhYWEwLAotCS5ncGRjb25fbWFzaz0JMHhmZmZmZmZmZiwKLQkuZ3BkdXA9CQkweDAwMDBmYWZmLAotCS5ncGR1cF9tYXNrPQkweGZmZmZmZmZmLAorCS5scGNzZWwgPQkweDAyLAorCS5ncGNjb24gPQkweGFhOTQwNjU5LAorCS5ncGNjb25fbWFzayA9CTB4ZmZmZmMwZjAsCisJLmdwY3VwID0JMHgwMDAwZmZmZiwKKwkuZ3BjdXBfbWFzayA9CTB4ZmZmZmZmZmYsCisJLmdwZGNvbiA9CTB4YWE4NGFhYTAsCisJLmdwZGNvbl9tYXNrID0JMHhmZmZmZmZmZiwKKwkuZ3BkdXAgPQkweDAwMDBmYWZmLAorCS5ncGR1cF9tYXNrID0JMHhmZmZmZmZmZiwKK307CisKK3N0YXRpYyBpbnQgcG93ZXJfc3VwcGx5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBncGlvX3JlcXVlc3QoUzNDMjQxMF9HUEYoMiksICJjYWJsZSBwbHVnZ2VkIik7Cit9CisKK3N0YXRpYyBpbnQgaDE5NDBfaXNfYWNfb25saW5lKHZvaWQpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShTM0MyNDEwX0dQRigyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VyX3N1cHBseV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoUzNDMjQxMF9HUEYoMikpOworfQorCitzdGF0aWMgY2hhciAqaDE5NDBfc3VwcGxpY2FudHNbXSA9IHsKKwkibWFpbi1iYXR0ZXJ5IiwKKwkiYmFja3VwLWJhdHRlcnkiLAorfTsKKworc3RhdGljIHN0cnVjdCBwZGFfcG93ZXJfcGRhdGEgcG93ZXJfc3VwcGx5X2luZm8gPSB7CisJLmluaXQJCQk9IHBvd2VyX3N1cHBseV9pbml0LAorCS5pc19hY19vbmxpbmUJCT0gaDE5NDBfaXNfYWNfb25saW5lLAorCS5leGl0CQkJPSBwb3dlcl9zdXBwbHlfZXhpdCwKKwkuc3VwcGxpZWRfdG8JCT0gaDE5NDBfc3VwcGxpY2FudHMsCisJLm51bV9zdXBwbGljYW50cwk9IEFSUkFZX1NJWkUoaDE5NDBfc3VwcGxpY2FudHMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwb3dlcl9zdXBwbHlfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkJLm5hbWUJPSAiYWMiLAorCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dFREdFIHwKKwkJCQkJICBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwkJCS5zdGFydAk9IElSUV9FSU5UMiwKKwkJCS5lbmQJPSBJUlFfRUlOVDIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvd2VyX3N1cHBseSA9IHsKKwkubmFtZQkJPSAicGRhLXBvd2VyIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEgPQorCQkJCQkmcG93ZXJfc3VwcGx5X2luZm8sCisJfSwKKwkucmVzb3VyY2UJPSBwb3dlcl9zdXBwbHlfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShwb3dlcl9zdXBwbHlfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgczNjX2FkY19iYXRfdGhyZXNoIGJhdF9sdXRfbm9hY1tdID0geworCXsgLnZvbHQgPSA0MDcwLCAuY3VyID0gMTYyLCAubGV2ZWwgPSAxMDB9LAorCXsgLnZvbHQgPSA0MDQwLCAuY3VyID0gMTY1LCAubGV2ZWwgPSA5NX0sCisJeyAudm9sdCA9IDQwMTYsIC5jdXIgPSAxNjQsIC5sZXZlbCA9IDkwfSwKKwl7IC52b2x0ID0gMzk5NiwgLmN1ciA9IDE2NiwgLmxldmVsID0gODV9LAorCXsgLnZvbHQgPSAzOTcxLCAuY3VyID0gMTY4LCAubGV2ZWwgPSA4MH0sCisJeyAudm9sdCA9IDM5NTEsIC5jdXIgPSAxNjgsIC5sZXZlbCA9IDc1fSwKKwl7IC52b2x0ID0gMzkzMSwgLmN1ciA9IDE3MCwgLmxldmVsID0gNzB9LAorCXsgLnZvbHQgPSAzOTAzLCAuY3VyID0gMTcyLCAubGV2ZWwgPSA2NX0sCisJeyAudm9sdCA9IDM4ODYsIC5jdXIgPSAxNzIsIC5sZXZlbCA9IDYwfSwKKwl7IC52b2x0ID0gMzg1OCwgLmN1ciA9IDE3NiwgLmxldmVsID0gNTV9LAorCXsgLnZvbHQgPSAzODQyLCAuY3VyID0gMTc2LCAubGV2ZWwgPSA1MH0sCisJeyAudm9sdCA9IDM4MTgsIC5jdXIgPSAxNzYsIC5sZXZlbCA9IDQ1fSwKKwl7IC52b2x0ID0gMzc4OSwgLmN1ciA9IDE4MCwgLmxldmVsID0gNDB9LAorCXsgLnZvbHQgPSAzNzY5LCAuY3VyID0gMTgwLCAubGV2ZWwgPSAzNX0sCisJeyAudm9sdCA9IDM3NDksIC5jdXIgPSAxODQsIC5sZXZlbCA9IDMwfSwKKwl7IC52b2x0ID0gMzczMiwgLmN1ciA9IDE4NCwgLmxldmVsID0gMjV9LAorCXsgLnZvbHQgPSAzNzE2LCAuY3VyID0gMTg0LCAubGV2ZWwgPSAyMH0sCisJeyAudm9sdCA9IDM3MDgsIC5jdXIgPSAxODQsIC5sZXZlbCA9IDE1fSwKKwl7IC52b2x0ID0gMzcxNiwgLmN1ciA9IDk2LCAubGV2ZWwgPSAxMH0sCisJeyAudm9sdCA9IDM3MDAsIC5jdXIgPSA5NiwgLmxldmVsID0gNX0sCisJeyAudm9sdCA9IDM2ODQsIC5jdXIgPSA5NiwgLmxldmVsID0gMH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHMzY19hZGNfYmF0X3RocmVzaCBiYXRfbHV0X2FjaW5bXSA9IHsKKwl7IC52b2x0ID0gNDEzMCwgLmN1ciA9IDAsIC5sZXZlbCA9IDEwMH0sCisJeyAudm9sdCA9IDM5ODIsIC5jdXIgPSAwLCAubGV2ZWwgPSA1MH0sCisJeyAudm9sdCA9IDM4NTQsIC5jdXIgPSAwLCAubGV2ZWwgPSAxMH0sCisJeyAudm9sdCA9IDM4NDEsIC5jdXIgPSAwLCAubGV2ZWwgPSAwfSwKK307CisKK2ludCBoMTk0MF9iYXRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoSDE5NDBfTEFUQ0hfU004MDNfRU5BQkxFLCAiaDE5NDAtY2hhcmdlci1lbmFibGUiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWdwaW9fZGlyZWN0aW9uX291dHB1dChIMTk0MF9MQVRDSF9TTTgwM19FTkFCTEUsIDApOworCisJcmV0dXJuIDA7CisKK30KKwordm9pZCBoMTk0MF9iYXRfZXhpdCh2b2lkKQoreworCWdwaW9fZnJlZShIMTk0MF9MQVRDSF9TTTgwM19FTkFCTEUpOworfQorCit2b2lkIGgxOTQwX2VuYWJsZV9jaGFyZ2VyKHZvaWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoSDE5NDBfTEFUQ0hfU004MDNfRU5BQkxFLCAxKTsKK30KKwordm9pZCBoMTk0MF9kaXNhYmxlX2NoYXJnZXIodm9pZCkKK3sKKwlncGlvX3NldF92YWx1ZShIMTk0MF9MQVRDSF9TTTgwM19FTkFCTEUsIDApOworfQorCitzdGF0aWMgc3RydWN0IHMzY19hZGNfYmF0X3BkYXRhIGgxOTQwX2JhdF9jZmcgPSB7CisJLmluaXQgPSBoMTk0MF9iYXRfaW5pdCwKKwkuZXhpdCA9IGgxOTQwX2JhdF9leGl0LAorCS5lbmFibGVfY2hhcmdlciA9IGgxOTQwX2VuYWJsZV9jaGFyZ2VyLAorCS5kaXNhYmxlX2NoYXJnZXIgPSBoMTk0MF9kaXNhYmxlX2NoYXJnZXIsCisJLmdwaW9fY2hhcmdlX2ZpbmlzaGVkID0gUzNDMjQxMF9HUEYoMyksCisJLmdwaW9faW52ZXJ0ZWQgPSAxLAorCS5sdXRfbm9hYyA9IGJhdF9sdXRfbm9hYywKKwkubHV0X25vYWNfY250ID0gQVJSQVlfU0laRShiYXRfbHV0X25vYWMpLAorCS5sdXRfYWNpbiA9IGJhdF9sdXRfYWNpbiwKKwkubHV0X2FjaW5fY250ID0gQVJSQVlfU0laRShiYXRfbHV0X2FjaW4pLAorCS52b2x0X2NoYW5uZWwgPSAwLAorCS5jdXJyZW50X2NoYW5uZWwgPSAxLAorCS52b2x0X211bHQgPSA0MDU2LAorCS5jdXJyZW50X211bHQgPSAxODkzLAorCS5pbnRlcm5hbF9pbXBlZGFuY2UgPSAyMDAsCisJLmJhY2t1cF92b2x0X2NoYW5uZWwgPSAzLAorCS8qIFRPRE8gQ2hlY2sgYmFja3VwIHZvbHQgbXVsdGlwbGllciAqLworCS5iYWNrdXBfdm9sdF9tdWx0ID0gNDA1NiwKKwkuYmFja3VwX3ZvbHRfbWluID0gMCwKKwkuYmFja3VwX3ZvbHRfbWF4ID0gNDE0OTI4OAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDE5NDBfYmF0dGVyeSA9IHsKKwkubmFtZSAgICAgICAgICAgICA9ICJzM2MtYWRjLWJhdHRlcnkiLAorCS5pZCAgICAgICAgICAgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLnBhcmVudCA9ICZzM2NfZGV2aWNlX2FkYy5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmgxOTQwX2JhdF9jZmcsCisJfSwKK307CisKK0RFRklORV9TUElOTE9DSyhoMTk0MF9ibGlua19zcGluKTsKKworaW50IGgxOTQwX2xlZF9ibGlua19zZXQodW5zaWduZWQgZ3BpbywgaW50IHN0YXRlLAorCXVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLCB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCit7CisJaW50IGJsaW5rX2dwaW8sIGNoZWNrX2dwaW8xLCBjaGVja19ncGlvMjsKKworCXN3aXRjaCAoZ3BpbykgeworCWNhc2UgSDE5NDBfTEFUQ0hfTEVEX0dSRUVOOgorCQlibGlua19ncGlvID0gUzNDMjQxMF9HUEEoNyk7CisJCWNoZWNrX2dwaW8xID0gUzNDMjQxMF9HUEEoMSk7CisJCWNoZWNrX2dwaW8yID0gUzNDMjQxMF9HUEEoMyk7CisJCWJyZWFrOworCWNhc2UgSDE5NDBfTEFUQ0hfTEVEX1JFRDoKKwkJYmxpbmtfZ3BpbyA9IFMzQzI0MTBfR1BBKDEpOworCQljaGVja19ncGlvMSA9IFMzQzI0MTBfR1BBKDcpOworCQljaGVja19ncGlvMiA9IFMzQzI0MTBfR1BBKDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlibGlua19ncGlvID0gUzNDMjQxMF9HUEEoMyk7CisJCWNoZWNrX2dwaW8xID0gUzNDMjQxMF9HUEEoMSk7CisJCWNoZWNrX2dwaW8xID0gUzNDMjQxMF9HUEEoNyk7CisJCWJyZWFrOworCX0KKworCWlmIChkZWxheV9vbiAmJiBkZWxheV9vZmYgJiYgISpkZWxheV9vbiAmJiAhKmRlbGF5X29mZikKKwkJKmRlbGF5X29uID0gKmRlbGF5X29mZiA9IDUwMDsKKworCXNwaW5fbG9jaygmaDE5NDBfYmxpbmtfc3Bpbik7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBHUElPX0xFRF9OT19CTElOS19MT1c6CisJY2FzZSBHUElPX0xFRF9OT19CTElOS19ISUdIOgorCQlpZiAoIWdwaW9fZ2V0X3ZhbHVlKGNoZWNrX2dwaW8xKSAmJgorCQkgICAgIWdwaW9fZ2V0X3ZhbHVlKGNoZWNrX2dwaW8yKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKEgxOTQwX0xBVENIX0xFRF9GTEFTSCwgMCk7CisJCWdwaW9fc2V0X3ZhbHVlKGJsaW5rX2dwaW8sIDApOworCQlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIHN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBHUElPX0xFRF9CTElOSzoKKwkJaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpCisJCQlncGlvX3NldF92YWx1ZShncGlvLCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoSDE5NDBfTEFUQ0hfTEVEX0ZMQVNILCAxKTsKKwkJZ3Bpb19zZXRfdmFsdWUoYmxpbmtfZ3BpbywgMSk7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrKCZoMTk0MF9ibGlua19zcGluKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChoMTk0MF9sZWRfYmxpbmtfc2V0KTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBoMTk0MF9sZWRzX2Rlc2NbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiR3JlZW4iLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1haW4tYmF0dGVyeS1mdWxsIiwKKwkJLmdwaW8JCQk9IEgxOTQwX0xBVENIX0xFRF9HUkVFTiwKKwkJLnJldGFpbl9zdGF0ZV9zdXNwZW5kZWQJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIlJlZCIsCisJCS5kZWZhdWx0X3RyaWdnZXIKKwkJCT0gIm1haW4tYmF0dGVyeS1jaGFyZ2luZy1ibGluay1mdWxsLXNvbGlkIiwKKwkJLmdwaW8JCQk9IEgxOTQwX0xBVENIX0xFRF9SRUQsCisJCS5yZXRhaW5fc3RhdGVfc3VzcGVuZGVkCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGgxOTQwX2xlZHNfcGRhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShoMTk0MF9sZWRzX2Rlc2MpLAorCS5sZWRzCQk9IGgxOTQwX2xlZHNfZGVzYywKKwkuZ3Bpb19ibGlua19zZXQJPSBoMTk0MF9sZWRfYmxpbmtfc2V0LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDE5NDBfZGV2aWNlX2xlZHMgPSB7Ci0JLm5hbWUgICAgICAgICAgICAgPSAiaDE5NDAtbGVkcyIsCi0JLmlkICAgICAgICAgICAgICAgPSAtMSwKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZoMTk0MF9sZWRzX3BkYXRhLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoMTk0MF9kZXZpY2VfYmx1ZXRvb3RoID0gewpAQCAtMzAyLDE0ICs1MjgsMTQgQEAKIHN0YXRpYyB2b2lkIGgxOTQwX2xjZF9wb3dlcl9zZXQoc3RydWN0IHBsYXRfbGNkX2RhdGEgKnBkLAogCQkJCQl1bnNpZ25lZCBpbnQgcG93ZXIpCiB7Ci0JaW50IHZhbHVlOworCWludCB2YWx1ZSwgcmV0cmllcyA9IDEwMDsKIAogCWlmICghcG93ZXIpIHsKIAkJZ3Bpb19zZXRfdmFsdWUoUzNDMjQxMF9HUEMoMCksIDApOwogCQkvKiB3YWl0IGZvciAzYWMgKi8KIAkJZG8gewogCQkJdmFsdWUgPSBncGlvX2dldF92YWx1ZShTM0MyNDEwX0dQQyg2KSk7Ci0JCX0gd2hpbGUgKHZhbHVlKTsKKwkJfSB3aGlsZSAodmFsdWUgJiYgcmV0cmllcy0tKTsKIAogCQlncGlvX3NldF92YWx1ZShIMTk0MF9MQVRDSF9MQ0RfUDIsIDApOwogCQlncGlvX3NldF92YWx1ZShIMTk0MF9MQVRDSF9MQ0RfUDMsIDApOwpAQCAtMzI3LDYgKzU1Myw5IEBACiAJCWdwaW9fc2V0X3ZhbHVlKEgxOTQwX0xBVENIX0xDRF9QMCwgMSk7CiAJCWdwaW9fc2V0X3ZhbHVlKEgxOTQwX0xBVENIX0xDRF9QMSwgMSk7CiAKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoUzNDMjQxMF9HUEMoMSkpOworCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTM0MyNDEwX0dQQyg0KSk7CisJCW1kZWxheSgxMCk7CiAJCXMzY19ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQygxKSwgUzNDX0dQSU9fU0ZOKDIpKTsKIAkJczNjX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BDKDQpLCBTM0NfR1BJT19TRk4oMikpOwogCkBAIC0zNjIsNyArNTkxLDQ0IEBACiAJfSwKIH07CiAKKyNkZWZpbmUgREVDTEFSRV9CVVRUT04ocCwgaywgbiwgdykJXAorCXsJCQkJXAorCQkuZ3BpbwkJPSBwLAlcCisJCS5jb2RlCQk9IGssCVwKKwkJLmRlc2MJCT0gbiwJXAorCQkud2FrZXVwCQk9IHcsCVwKKwkJLmFjdGl2ZV9sb3cJPSAxLAlcCisJfQorCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gaDE5NDBfYnV0dG9uc1tdID0geworCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BGKDApLCAgICAgICBLRVlfUE9XRVIsICAgICAgICAgICJQb3dlciIsIDEpLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BGKDYpLCAgICAgICBLRVlfRU5URVIsICAgICAgICAgIlNlbGVjdCIsIDEpLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BGKDcpLCAgICAgIEtFWV9SRUNPUkQsICAgICAgICAgIlJlY29yZCIsIDApLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BHKDApLCAgICAgICAgIEtFWV9GMTEsICAgICAgICJDYWxlbmRhciIsIDApLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BHKDIpLCAgICAgICAgIEtFWV9GMTIsICAgICAgICJDb250YWN0cyIsIDApLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BHKDMpLCAgICAgICAgS0VZX01BSUwsICAgICAgICAgICAiTWFpbCIsIDApLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BHKDYpLCAgICAgICAgS0VZX0xFRlQsICAgICAiTGVmdF9hcnJvdyIsIDApLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BHKDcpLCAgICBLRVlfSE9NRVBBR0UsICAgICAgICAgICAiSG9tZSIsIDApLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BHKDgpLCAgICAgICBLRVlfUklHSFQsICAgICJSaWdodF9hcnJvdyIsIDApLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BHKDkpLCAgICAgICAgICBLRVlfVVAsICAgICAgICJVcF9hcnJvdyIsIDApLAorCURFQ0xBUkVfQlVUVE9OKFMzQzI0MTBfR1BHKDEwKSwgICAgICAgS0VZX0RPV04sICAgICAiRG93bl9hcnJvdyIsIDApLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBoMTk0MF9idXR0b25zX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBoMTk0MF9idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoaDE5NDBfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoMTk0MF9kZXZfYnV0dG9ucyA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZoMTk0MF9idXR0b25zX2RhdGEsCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmgxOTQwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoMTk0MF9kZXZfYnV0dG9ucywKIAkmczNjX2RldmljZV9vaGNpLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCkBAIC0zNzksNiArNjQ1LDggQEAKIAkmaDE5NDBfbGNkX3Bvd2VyZGV2LAogCSZzM2NfZGV2aWNlX2FkYywKIAkmczNjX2RldmljZV90cywKKwkmcG93ZXJfc3VwcGx5LAorCSZoMTk0MF9iYXR0ZXJ5LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGgxOTQwX21hcF9pbyh2b2lkKQpAQCAtNDYxLDYgKzcyOSwxNSBAQAogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaDE5NDBfZGV2aWNlcywgQVJSQVlfU0laRShoMTk0MF9kZXZpY2VzKSk7CiAKKwlncGlvX3JlcXVlc3QoUzNDMjQxMF9HUEEoMSksICJSZWQgTEVEIGJsaW5rIik7CisJZ3Bpb19yZXF1ZXN0KFMzQzI0MTBfR1BBKDMpLCAiQmx1ZSBMRUQgYmxpbmsiKTsKKwlncGlvX3JlcXVlc3QoUzNDMjQxMF9HUEEoNyksICJHcmVlbiBMRUQgYmxpbmsiKTsKKwlncGlvX3JlcXVlc3QoSDE5NDBfTEFUQ0hfTEVEX0ZMQVNILCAiTEVEIGJsaW5rIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzI0MTBfR1BBKDEpLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDMjQxMF9HUEEoMyksIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0MyNDEwX0dQQSg3KSwgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEgxOTQwX0xBVENIX0xFRF9GTEFTSCwgMCk7CisKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBoMTk0MF9pMmNfZGV2aWNlcywKIAkJQVJSQVlfU0laRShoMTk0MF9pMmNfZGV2aWNlcykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWd0YTAyLmMKaW5kZXggMzc0MDVkOS4uMGRiMjQxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jCkBAIC01OCw2ICs1OCw5IEBACiAjaW5jbHVkZSA8bGludXgvbWZkL3BjZjUwNjMzL3BtaWMuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvcGNmNTA2MzMvYmFja2xpZ2h0Lmg+CiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpAQCAtODYsNiArODksOCBAQAogI2luY2x1ZGUgPHBsYXQvdWRjLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogI2luY2x1ZGUgPHBsYXQvaWljLmg+CisjaW5jbHVkZSA8cGxhdC90cy5oPgorCiAKIHN0YXRpYyBzdHJ1Y3QgcGNmNTA2MzMgKmd0YTAyX3BjZjsKIApAQCAtMjgwLDkgKzI4NSw2IEBACiAJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCiAJCQkJLmFsd2F5c19vbiA9IDEsCiAJCQkJLmFwcGx5X3VWID0gMSwKLQkJCQkuc3RhdGVfbWVtID0gewotCQkJCQkuZW5hYmxlZCA9IDEsCi0JCQkJfSwKIAkJCX0sCiAJCX0sCiAJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfRE9XTjFdID0gewpAQCAtMzAxLDkgKzMwMyw2IEBACiAJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCiAJCQkJLmFwcGx5X3VWID0gMSwKIAkJCQkuYWx3YXlzX29uID0gMSwKLQkJCQkuc3RhdGVfbWVtID0gewotCQkJCQkuZW5hYmxlZCA9IDEsCi0JCQkJfSwKIAkJCX0sCiAJCX0sCiAJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfSENMRE9dID0gewpAQCAtMzExLDggKzMxMCw4IEBACiAJCQkJLm1pbl91ViA9IDIwMDAwMDAsCiAJCQkJLm1heF91ViA9IDMzMDAwMDAsCiAJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCi0JCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAotCQkJCS5hbHdheXNfb24gPSAxLAorCQkJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJCQlSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAkJCX0sCiAJCX0sCiAJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMV0gPSB7CkBAIC0zMjAsMTAgKzMxOSw4IEBACiAJCQkJLm1pbl91ViA9IDMzMDAwMDAsCiAJCQkJLm1heF91ViA9IDMzMDAwMDAsCiAJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJCQkJLmFwcGx5X3VWID0gMSwKLQkJCQkuc3RhdGVfbWVtID0gewotCQkJCQkuZW5hYmxlZCA9IDAsCi0JCQkJfSwKIAkJCX0sCiAJCX0sCiAJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMl0gPSB7CkBAIC0zNDcsNiArMzQ0LDcgQEAKIAkJCQkubWluX3VWID0gMzIwMDAwMCwKIAkJCQkubWF4X3VWID0gMzIwMDAwMCwKIAkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAkJCQkuYXBwbHlfdVYgPSAxLAogCQkJfSwKIAkJfSwKQEAgLTM1NSwxMCArMzUzLDggQEAKIAkJCQkubWluX3VWID0gMzAwMDAwMCwKIAkJCQkubWF4X3VWID0gMzAwMDAwMCwKIAkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAkJCQkuYXBwbHlfdVYgPSAxLAotCQkJCS5zdGF0ZV9tZW0gPSB7Ci0JCQkJCS5lbmFibGVkID0gMSwKLQkJCQl9LAogCQkJfSwKIAkJfSwKIAkJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE82XSA9IHsKQEAgLTM3Myw5ICszNjksNiBAQAogCQkJCS5taW5fdVYgPSAxODAwMDAwLAogCQkJCS5tYXhfdVYgPSAxODAwMDAwLAogCQkJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotCQkJCS5zdGF0ZV9tZW0gPSB7Ci0JCQkJCS5lbmFibGVkID0gMSwKLQkJCQl9LAogCQkJfSwKIAkJfSwKIApAQCAtNDcxLDYgKzQ2NCw0MyBAQAogCX0sCiB9OwogCisvKiBUb3VjaHNjcmVlbiAqLworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3RzX21hY2hfaW5mbyBndGEwMl90c19pbmZvID0geworCS5kZWxheQkJCT0gMTAwMDAsCisJLnByZXNjCQkJPSAweGZmLCAvKiBzbG93IGFzIHdlIGNhbiBnbyAqLworCS5vdmVyc2FtcGxpbmdfc2hpZnQJPSAyLAorfTsKKworLyogQnV0dG9ucyAqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGd0YTAyX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5ncGlvID0gR1RBMDJfR1BJT19BVVhfS0VZLAorCQkuY29kZSA9IEtFWV9QSE9ORSwKKwkJLmRlc2MgPSAiQXV4IiwKKwkJLnR5cGUgPSBFVl9LRVksCisJCS5kZWJvdW5jZV9pbnRlcnZhbCA9IDEwMCwKKwl9LAorCXsKKwkJLmdwaW8gPSBHVEEwMl9HUElPX0hPTERfS0VZLAorCQkuY29kZSA9IEtFWV9QQVVTRSwKKwkJLmRlc2MgPSAiSG9sZCIsCisJCS50eXBlID0gRVZfS0VZLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwgPSAxMDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZ3RhMDJfYnV0dG9uc19wZGF0YSA9IHsKKwkuYnV0dG9ucyA9IGd0YTAyX2J1dHRvbnMsCisJLm5idXR0b25zID0gQVJSQVlfU0laRShndGEwMl9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGd0YTAyX2J1dHRvbnNfZGV2aWNlID0geworCS5uYW1lID0gImdwaW8ta2V5cyIsCisJLmlkID0gLTEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ3RhMDJfYnV0dG9uc19wZGF0YSwKKwl9LAorfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGd0YTAyX21hcF9pbyh2b2lkKQogewpAQCAtNDkxLDcgKzUyMSwxMSBAQAogCSZndGEwMl9ub3JfZmxhc2gsCiAJJnMzYzI0eHhfcHdtX2RldmljZSwKIAkmczNjX2RldmljZV9paXMsCisJJnNhbXN1bmdfYXNvY19kbWEsCiAJJnMzY19kZXZpY2VfaTJjMCwKKwkmZ3RhMDJfYnV0dG9uc19kZXZpY2UsCisJJnMzY19kZXZpY2VfYWRjLAorCSZzM2NfZGV2aWNlX3RzLAogfTsKIAogLyogVGhlc2UgZ3V5cyBETyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIFBNVS4gKi8KQEAgLTU0MSw2ICs1NzUsNyBAQAogI2VuZGlmCiAKIAlzM2MyNHh4X3VkY19zZXRfcGxhdGRhdGEoJmd0YTAyX3VkY19jZmcpOworCXMzYzI0eHhfdHNfc2V0X3BsYXRkYXRhKCZndGEwMl90c19pbmZvKTsKIAlzM2Nfb2hjaV9zZXRfcGxhdGRhdGEoJmd0YTAyX3VzYl9pbmZvKTsKIAlzM2NfbmFuZF9zZXRfcGxhdGRhdGEoJmd0YTAyX25hbmRfaW5mbyk7CiAJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwpAQCAtNTQ5LDYgKzU4NCw4IEBACiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhndGEwMl9kZXZpY2VzLCBBUlJBWV9TSVpFKGd0YTAyX2RldmljZXMpKTsKIAlwbV9wb3dlcl9vZmYgPSBndGEwMl9wb3dlcm9mZjsKKworCXJlZ3VsYXRvcl9oYXNfZnVsbF9jb25zdHJhaW50cygpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCmluZGV4IGQ4MGYxMjkuLmRmZWRjOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYwpAQCAtNDg4LDYgKzQ4OCwxMSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1ZGExMzQwX2NvZGVjID0geworCQkubmFtZSA9ICJ1ZGExMzR4LWNvZGVjIiwKKwkJLmlkID0gLTEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWluaTI0NDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV93ZHQsCkBAIC01MDMsNyArNTA4LDkgQEAKIAkmczNjX2RldmljZV9uYW5kLAogCSZzM2NfZGV2aWNlX3NkaSwKIAkmczNjX2RldmljZV9paXMsCisJJnVkYTEzNDBfY29kZWMsCiAJJm1pbmkyNDQwX2F1ZGlvLAorCSZzYW1zdW5nX2Fzb2NfZG1hLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1pbmkyNDQwX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngxOTUwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDE5NTAuYwppbmRleCA4NmJiYzIzLi4yN2VhOTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDE5NTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDE5NTAuYwpAQCAtMjYzLDI3ICsyNjMsNzggQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDMjQxMF9HUEooMyksIDApOwogfQogCitERUZJTkVfU1BJTkxPQ0socngxOTUwX2JsaW5rX3NwaW4pOworCitzdGF0aWMgaW50IHJ4MTk1MF9sZWRfYmxpbmtfc2V0KHVuc2lnbmVkIGdwaW8sIGludCBzdGF0ZSwKKwl1bnNpZ25lZCBsb25nICpkZWxheV9vbiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQoreworCWludCBibGlua19ncGlvLCBjaGVja19ncGlvOworCisJc3dpdGNoIChncGlvKSB7CisJY2FzZSBTM0MyNDEwX0dQQSg2KToKKwkJYmxpbmtfZ3BpbyA9IFMzQzI0MTBfR1BBKDQpOworCQljaGVja19ncGlvID0gUzNDMjQxMF9HUEEoMyk7CisJCWJyZWFrOworCWNhc2UgUzNDMjQxMF9HUEEoNyk6CisJCWJsaW5rX2dwaW8gPSBTM0MyNDEwX0dQQSgzKTsKKwkJY2hlY2tfZ3BpbyA9IFMzQzI0MTBfR1BBKDQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGRlbGF5X29uICYmIGRlbGF5X29mZiAmJiAhKmRlbGF5X29uICYmICEqZGVsYXlfb2ZmKQorCQkqZGVsYXlfb24gPSAqZGVsYXlfb2ZmID0gNTAwOworCisJc3Bpbl9sb2NrKCZyeDE5NTBfYmxpbmtfc3Bpbik7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBHUElPX0xFRF9OT19CTElOS19MT1c6CisJY2FzZSBHUElPX0xFRF9OT19CTElOS19ISUdIOgorCQlpZiAoIWdwaW9fZ2V0X3ZhbHVlKGNoZWNrX2dwaW8pKQorCQkJZ3Bpb19zZXRfdmFsdWUoUzNDMjQxMF9HUEooNiksIDApOworCQlncGlvX3NldF92YWx1ZShibGlua19ncGlvLCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpbywgc3RhdGUpOworCQlicmVhazsKKwljYXNlIEdQSU9fTEVEX0JMSU5LOgorCQlncGlvX3NldF92YWx1ZShncGlvLCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoUzNDMjQxMF9HUEooNiksIDEpOworCQlncGlvX3NldF92YWx1ZShibGlua19ncGlvLCAxKTsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2soJnJ4MTk1MF9ibGlua19zcGluKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHJ4MTk1MF9sZWRzX2Rlc2NbXSA9IHsKIAl7Ci0JCS5uYW1lCQkJCT0gIkdyZWVuIiwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJtYWluLWJhdHRlcnktY2hhcmdpbmctb3ItZnVsbCIsCi0JCS5ncGlvCQkJCT0gUzNDMjQxMF9HUEEoNiksCi0JfSwKLQl7Ci0JCS5uYW1lCQkJCT0gIlJlZCIsCisJCS5uYW1lCQkJPSAiR3JlZW4iLAogCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1haW4tYmF0dGVyeS1mdWxsIiwKLQkJLmdwaW8JCQkJPSBTM0MyNDEwX0dQQSg3KSwKKwkJLmdwaW8JCQk9IFMzQzI0MTBfR1BBKDYpLAorCQkucmV0YWluX3N0YXRlX3N1c3BlbmRlZAk9IDEsCiAJfSwKIAl7Ci0JCS5uYW1lCQkJCT0gIkJsdWUiLAorCQkubmFtZQkJCT0gIlJlZCIsCisJCS5kZWZhdWx0X3RyaWdnZXIKKwkJCT0gIm1haW4tYmF0dGVyeS1jaGFyZ2luZy1ibGluay1mdWxsLXNvbGlkIiwKKwkJLmdwaW8JCQk9IFMzQzI0MTBfR1BBKDcpLAorCQkucmV0YWluX3N0YXRlX3N1c3BlbmRlZAk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiQmx1ZSIsCiAJCS5kZWZhdWx0X3RyaWdnZXIJPSAicngxOTUwLWFjeC1tZW0iLAotCQkuZ3BpbwkJCQk9IFMzQzI0MTBfR1BBKDExKSwKKwkJLmdwaW8JCQk9IFMzQzI0MTBfR1BBKDExKSwKKwkJLnJldGFpbl9zdGF0ZV9zdXNwZW5kZWQJPSAxLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgcngxOTUwX2xlZHNfcGRhdGEgPSB7CiAJLm51bV9sZWRzCT0gQVJSQVlfU0laRShyeDE5NTBfbGVkc19kZXNjKSwKIAkubGVkcwkJPSByeDE5NTBfbGVkc19kZXNjLAorCS5ncGlvX2JsaW5rX3NldAk9IHJ4MTk1MF9sZWRfYmxpbmtfc2V0LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcngxOTUwX2xlZHMgPSB7CkBAIC03NTIsNiArODAzLDEzIEBACiAKIAlXQVJOX09OKGdwaW9fcmVxdWVzdChTM0MyNDEwX0dQQigxKSwgIkxDRCBwb3dlciIpKTsKIAorCVdBUk5fT04oZ3Bpb19yZXF1ZXN0KFMzQzI0MTBfR1BBKDMpLCAiUmVkIGJsaW5rIikpOworCVdBUk5fT04oZ3Bpb19yZXF1ZXN0KFMzQzI0MTBfR1BBKDQpLCAiR3JlZW4gYmxpbmsiKSk7CisJV0FSTl9PTihncGlvX3JlcXVlc3QoUzNDMjQxMF9HUEooNiksICJMRUQgYmxpbmsiKSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzI0MTBfR1BBKDMpLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDMjQxMF9HUEEoNCksIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0MyNDEwX0dQSig2KSwgMCk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyeDE5NTBfZGV2aWNlcywgQVJSQVlfU0laRShyeDE5NTBfZGV2aWNlcykpOwogCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgcngxOTUwX2kyY19kZXZpY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvS2NvbmZpZwppbmRleCA1NzlkMmYwLi5lNDE3N2UyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvS2NvbmZpZwpAQCAtMTQzLDYgKzE0Myw3IEBACiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hTT1RHCiAJc2VsZWN0IFMzQ19ERVZfV0RUCiAJc2VsZWN0IFNBTVNVTkdfREVWX0tFWVBBRAorCXNlbGVjdCBTQU1TVU5HX0RFVl9QV00KIAlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HIGlmIFdBVENIRE9HCiAJc2VsZWN0IFMzQzY0WFhfU0VUVVBfU0RIQ0kKIAlzZWxlY3QgUzNDNjRYWF9TRVRVUF9JMkMxCkBAIC0yMzEsNyArMjMyLDcgQEAKIAlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAlzZWxlY3QgUzNDNjRYWF9TRVRVUF9GQl8yNEJQUAotCXNlbGVjdCBIQVZFX1BXTQorCXNlbGVjdCBTQU1TVU5HX0RFVl9QV00KIAloZWxwCiAJICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBBaXJnb28gSE1UCiAKQEAgLTI0OSw4ICsyNTAsOCBAQAogCXNlbGVjdCBTM0M2NFhYX1NFVFVQX1NESENJCiAJc2VsZWN0IFMzQzY0WFhfU0VUVVBfRkJfMjRCUFAKIAlzZWxlY3QgU0FNU1VOR19ERVZfQURDCisJc2VsZWN0IFNBTVNVTkdfREVWX1BXTQogCXNlbGVjdCBTQU1TVU5HX0RFVl9UUwotCXNlbGVjdCBIQVZFX1BXTQogCWhlbHAKIAkgICAgU2hhcmVkIG1hY2hpbmUgc3VwcG9ydCBmb3IgU21hcnRRIDUvNwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2NwdWZyZXEuYwppbmRleCA3NGMwZTgzLi40Mzc1Yjk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvY3B1ZnJlcS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jcHVmcmVxLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IHMzYzY0eHhfY3B1ZnJlcV9kcml2ZXJfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgczNjNjR4eF9jcHVmcmVxX2RyaXZlcl9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCWludCByZXQ7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDEwLmMKaW5kZXggYTgwYTMxNi4uNjg2YTRmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KIAogI2lmZGVmIENPTkZJR19TTURLNjQxMF9XTTExOTBfRVYxCiAjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9jb3JlLmg+CkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1mYi5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWJhbmstZi5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0xMTksNyArMTIxLDYgQEAKIHsKIAlpZiAocG93ZXIpIHsKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDEzKSwgMSk7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxNSksIDEpOwogCiAJCS8qIGZpcmUgblJFU0VUIG9uIHBvd2VyIHVwICovCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQTig1KSwgMCk7CkBAIC0xMjcsNyArMTI4LDYgQEAKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BOKDUpLCAxKTsKIAkJbXNsZWVwKDEpOwogCX0gZWxzZSB7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxNSksIDApOwogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEYoMTMpLCAwKTsKIAl9CiB9CkBAIC0yNzAsNiArMjcwLDQ1IEBACiAJLmNvbHMJCT0gOCwKIH07CiAKK3N0YXRpYyBpbnQgc21kazY0MTBfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEYoMTUpLCAiQmFja2xpZ2h0Iik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZXF1ZXN0IEdQRiBmb3IgUFdNLU9VVDFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIENvbmZpZ3VyZSBHUElPIHBpbiB3aXRoIFMzQzY0WFhfR1BGMTVfUFdNX1RPVVQxICovCisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BGKDE1KSwgUzNDX0dQSU9fU0ZOKDIpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbWRrNjQxMF9iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BGKDE1KSwgUzNDX0dQSU9fT1VUUFVUKTsKKwlncGlvX2ZyZWUoUzNDNjRYWF9HUEYoMTUpKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgc21kazY0MTBfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAxLAorCS5tYXhfYnJpZ2h0bmVzcwk9IDI1NSwKKwkuZGZ0X2JyaWdodG5lc3MJPSAyNTUsCisJLnB3bV9wZXJpb2RfbnMJPSA3ODc3MCwKKwkuaW5pdAkJPSBzbWRrNjQxMF9iYWNrbGlnaHRfaW5pdCwKKwkuZXhpdAkJPSBzbWRrNjQxMF9iYWNrbGlnaHRfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtZGs2NDEwX2JhY2tsaWdodF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB3bS1iYWNrbGlnaHQiLAorCS5kZXYJCT0geworCQkucGFyZW50CQk9ICZzM2NfZGV2aWNlX3RpbWVyWzFdLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21kazY0MTBfYmFja2xpZ2h0X2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazY0MTBfaW9kZXNjW10gPSB7fTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGs2NDEwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtMjk5LDYgKzMzOCw4IEBACiAJJnMzY19kZXZpY2VfcnRjLAogCSZzM2NfZGV2aWNlX3RzLAogCSZzM2NfZGV2aWNlX3dkdCwKKwkmczNjX2RldmljZV90aW1lclsxXSwKKwkmc21kazY0MTBfYmFja2xpZ2h0X2RldmljZSwKIH07CiAKICNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCkBAIC02OTQsNyArNzM1LDYgQEAKIAogCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQTig1KSwgIkxDRCBwb3dlciIpOwogCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQRigxMyksICJMQ0QgcG93ZXIiKTsKLQlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEYoMTUpLCAiTENEIHBvd2VyIik7CiAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfZGV2czAsIEFSUkFZX1NJWkUoaTJjX2RldnMwKSk7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaTJjX2RldnMxLCBBUlJBWV9TSVpFKGkyY19kZXZzMSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvS2NvbmZpZwppbmRleCAxNjRkMjc4Li4wMTdhZjRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvS2NvbmZpZwpAQCAtMTAsMTIgKzEwLDE0IEBACiBjb25maWcgQ1BVX1M1UDY0NDAKIAlib29sCiAJc2VsZWN0IFMzQ19QTDMzMF9ETUEKKwlzZWxlY3QgUzVQX0hSVAogCWhlbHAKIAkgIEVuYWJsZSBTNVA2NDQwIENQVSBzdXBwb3J0CiAKIGNvbmZpZyBDUFVfUzVQNjQ1MAogCWJvb2wKIAlzZWxlY3QgUzNDX1BMMzMwX0RNQQorCXNlbGVjdCBTNVBfSFJUCiAJaGVscAogCSAgRW5hYmxlIFM1UDY0NTAgQ1BVIHN1cHBvcnQKIApAQCAtMzQsNiArMzYsNyBAQAogCXNlbGVjdCBTM0NfREVWX1dEVAogCXNlbGVjdCBTM0M2NFhYX0RFVl9TUEkKIAlzZWxlY3QgU0FNU1VOR19ERVZfQURDCisJc2VsZWN0IFNBTVNVTkdfREVWX1BXTQogCXNlbGVjdCBTQU1TVU5HX0RFVl9UUwogCXNlbGVjdCBTNVA2NFgwX1NFVFVQX0kyQzEKIAloZWxwCkBAIC00Nyw2ICs1MCw3IEBACiAJc2VsZWN0IFMzQ19ERVZfV0RUCiAJc2VsZWN0IFMzQzY0WFhfREVWX1NQSQogCXNlbGVjdCBTQU1TVU5HX0RFVl9BREMKKwlzZWxlY3QgU0FNU1VOR19ERVZfUFdNCiAJc2VsZWN0IFNBTVNVTkdfREVWX1RTCiAJc2VsZWN0IFM1UDY0WDBfU0VUVVBfSTJDMQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjR4MC9tYWNoLXNtZGs2NDQwLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvbWFjaC1zbWRrNjQ0MC5jCmluZGV4IGU1YmViODQuLjJkNTU5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjR4MC9tYWNoLXNtZGs2NDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL21hY2gtc21kazY0NDAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0zMiw2ICszMyw3IEBACiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgpAQCAtNDMsNiArNDUsNyBAQAogI2luY2x1ZGUgPHBsYXQvcGxsLmg+CiAjaW5jbHVkZSA8cGxhdC9hZGMuaD4KICNpbmNsdWRlIDxwbGF0L3RzLmg+CisjaW5jbHVkZSA8cGxhdC9zNXAtdGltZS5oPgogCiAjZGVmaW5lIFNNREs2NDQwX1VDT05fREVGQVVMVAkoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXAogCQkJCVMzQzI0MTBfVUNPTl9SWElMRVZFTCB8CQlcCkBAIC04OCw2ICs5MSw0NSBAQAogCX0sCiB9OwogCitzdGF0aWMgaW50IHNtZGs2NDQwX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFM1UDY0NDBfR1BGKDE1KSwgIkJhY2tsaWdodCIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVxdWVzdCBHUEYgZm9yIFBXTS1PVVQxXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBDb25maWd1cmUgR1BJTyBwaW4gd2l0aCBTNVA2NDQwX0dQRjE1X1BXTV9UT1VUMSAqLworCXMzY19ncGlvX2NmZ3BpbihTNVA2NDQwX0dQRigxNSksIFMzQ19HUElPX1NGTigyKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc21kazY0NDBfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXMzY19ncGlvX2NmZ3BpbihTNVA2NDQwX0dQRigxNSksIFMzQ19HUElPX09VVFBVVCk7CisJZ3Bpb19mcmVlKFM1UDY0NDBfR1BGKDE1KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHNtZGs2NDQwX2JhY2tsaWdodF9kYXRhID0geworCS5wd21faWQJCT0gMSwKKwkubWF4X2JyaWdodG5lc3MJPSAyNTUsCisJLmRmdF9icmlnaHRuZXNzCT0gMjU1LAorCS5wd21fcGVyaW9kX25zCT0gNzg3NzAsCisJLmluaXQJCT0gc21kazY0NDBfYmFja2xpZ2h0X2luaXQsCisJLmV4aXQJCT0gc21kazY0NDBfYmFja2xpZ2h0X2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWRrNjQ0MF9iYWNrbGlnaHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJwd20tYmFja2xpZ2h0IiwKKwkuZGV2CQk9IHsKKwkJLnBhcmVudAkJPSAmczNjX2RldmljZV90aW1lclsxXS5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtZGs2NDQwX2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazY0NDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2VfYWRjLAogCSZzM2NfZGV2aWNlX3J0YywKQEAgLTk3LDYgKzEzOSw4IEBACiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzYW1zdW5nX2Fzb2NfZG1hLAogCSZzNXA2NDQwX2RldmljZV9paXMsCisJJnMzY19kZXZpY2VfdGltZXJbMV0sCisJJnNtZGs2NDQwX2JhY2tsaWdodF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1faTJjIHM1cDY0NDBfaTJjMF9kYXRhIF9faW5pdGRhdGEgPSB7CkBAIC0xMzYsNiArMTgwLDcgQEAKIAlzNXBfaW5pdF9pbyhOVUxMLCAwLCBTNVA2NFgwX1NZU19JRCk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKHNtZGs2NDQwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGs2NDQwX3VhcnRjZmdzKSk7CisJczVwX3NldF90aW1lcl9zb3VyY2UoUzVQX1BXTTMsIFM1UF9QV000KTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNtZGs2NDQwX21hY2hpbmVfaW5pdCh2b2lkKQpAQCAtMTU5LDUgKzIwNCw1IEBACiAJLmluaXRfaXJxCT0gczVwNjQ0MF9pbml0X2lycSwKIAkubWFwX2lvCQk9IHNtZGs2NDQwX21hcF9pbywKIAkuaW5pdF9tYWNoaW5lCT0gc21kazY0NDBfbWFjaGluZV9pbml0LAotCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKKwkudGltZXIJCT0gJnM1cF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvbWFjaC1zbWRrNjQ1MC5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL21hY2gtc21kazY0NTAuYwppbmRleCAzYTIwZGUwLi5kMTljNDY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvbWFjaC1zbWRrNjQ1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjR4MC9tYWNoLXNtZGs2NDUwLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMzIsNiArMzMsNyBAQAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KQEAgLTQzLDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxwbGF0L3BsbC5oPgogI2luY2x1ZGUgPHBsYXQvYWRjLmg+CiAjaW5jbHVkZSA8cGxhdC90cy5oPgorI2luY2x1ZGUgPHBsYXQvczVwLXRpbWUuaD4KIAogI2RlZmluZSBTTURLNjQ1MF9VQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUNPTl9UWElMRVZFTCB8CVwKIAkJCQlTM0MyNDEwX1VDT05fUlhJTEVWRUwgfAkJXApAQCAtMTA2LDYgKzEwOSw0NSBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgaW50IHNtZGs2NDUwX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFM1UDY0NTBfR1BGKDE1KSwgIkJhY2tsaWdodCIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVxdWVzdCBHUEYgZm9yIFBXTS1PVVQxXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBDb25maWd1cmUgR1BJTyBwaW4gd2l0aCBTNVA2NDUwX0dQRjE1X1BXTV9UT1VUMSAqLworCXMzY19ncGlvX2NmZ3BpbihTNVA2NDUwX0dQRigxNSksIFMzQ19HUElPX1NGTigyKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc21kazY0NTBfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXMzY19ncGlvX2NmZ3BpbihTNVA2NDUwX0dQRigxNSksIFMzQ19HUElPX09VVFBVVCk7CisJZ3Bpb19mcmVlKFM1UDY0NTBfR1BGKDE1KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHNtZGs2NDUwX2JhY2tsaWdodF9kYXRhID0geworCS5wd21faWQJCT0gMSwKKwkubWF4X2JyaWdodG5lc3MJPSAyNTUsCisJLmRmdF9icmlnaHRuZXNzCT0gMjU1LAorCS5wd21fcGVyaW9kX25zCT0gNzg3NzAsCisJLmluaXQJCT0gc21kazY0NTBfYmFja2xpZ2h0X2luaXQsCisJLmV4aXQJCT0gc21kazY0NTBfYmFja2xpZ2h0X2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWRrNjQ1MF9iYWNrbGlnaHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJwd20tYmFja2xpZ2h0IiwKKwkuZGV2CQk9IHsKKwkJLnBhcmVudAkJPSAmczNjX2RldmljZV90aW1lclsxXS5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtZGs2NDUwX2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazY0NTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2VfYWRjLAogCSZzM2NfZGV2aWNlX3J0YywKQEAgLTExNSw2ICsxNTcsOCBAQAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmc2Ftc3VuZ19hc29jX2RtYSwKIAkmczVwNjQ1MF9kZXZpY2VfaWlzMCwKKwkmczNjX2RldmljZV90aW1lclsxXSwKKwkmc21kazY0NTBfYmFja2xpZ2h0X2RldmljZSwKIAkvKiBzNXA2NDUwX2RldmljZV9zcGkwIHdpbGwgYmUgYWRkZWQgKi8KIH07CiAKQEAgLTE1NSw2ICsxOTksNyBAQAogCXM1cF9pbml0X2lvKE5VTEwsIDAsIFM1UDY0WDBfU1lTX0lEKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDE5MjAwMDAwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoc21kazY0NTBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazY0NTBfdWFydGNmZ3MpKTsKKwlzNXBfc2V0X3RpbWVyX3NvdXJjZShTNVBfUFdNMywgUzVQX1BXTTQpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazY0NTBfbWFjaGluZV9pbml0KHZvaWQpCkBAIC0xNzgsNSArMjIzLDUgQEAKIAkuaW5pdF9pcnEJPSBzNXA2NDUwX2luaXRfaXJxLAogCS5tYXBfaW8JCT0gc21kazY0NTBfbWFwX2lvLAogCS5pbml0X21hY2hpbmUJPSBzbWRrNjQ1MF9tYWNoaW5lX2luaXQsCi0JLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorCS50aW1lcgkJPSAmczVwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL0tjb25maWcKaW5kZXggYjhmYmYyZi4uNjA4NzIyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL0tjb25maWcKQEAgLTU4LDYgKzU4LDcgQEAKIAlzZWxlY3QgU0FNU1VOR19ERVZfQURDCiAJc2VsZWN0IFNBTVNVTkdfREVWX0lERQogCXNlbGVjdCBTQU1TVU5HX0RFVl9LRVlQQUQKKwlzZWxlY3QgU0FNU1VOR19ERVZfUFdNCiAJc2VsZWN0IFNBTVNVTkdfREVWX1RTCiAJc2VsZWN0IFM1UEMxMDBfU0VUVVBfRkJfMjRCUFAKIAlzZWxlY3QgUzVQQzEwMF9TRVRVUF9JMkMxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvZ3Bpb2xpYi5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2dwaW9saWIuYwppbmRleCAyMDg1NmViLi4yODQyMzk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvZ3Bpb2xpYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9ncGlvbGliLmMKQEAgLTM0OCw2ICszNDgsNyBAQAogCX0KIAogCXNhbXN1bmdfZ3Bpb2xpYl9hZGRfNGJpdF9jaGlwcyhzNXBjMTAwX2dwaW9fY2hpcHMsIG5yX2NoaXBzKTsKKwlzNXBfcmVnaXN0ZXJfZ3Bpb2ludF9iYW5rKElSUV9HUElPSU5ULCAwLCBTNVBfR1BJT0lOVF9HUk9VUF9NQVhOUik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9tYWNoLXNtZGtjMTAwLmMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jCmluZGV4IGRkMTkyYTIuLjA1MjVjYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9tYWNoLXNtZGtjMTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL21hY2gtc21ka2MxMDAuYwpAQCAtMjMsMTIgKzIzLDE1IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgorCiAjaW5jbHVkZSA8dmlkZW8vcGxhdGZvcm1fbGNkLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0xMDcsOSArMTEwLDYgQEAKIHN0YXRpYyB2b2lkIHNtZGtjMTAwX2xjZF9wb3dlcl9zZXQoc3RydWN0IHBsYXRfbGNkX2RhdGEgKnBkLAogCQkJCSAgIHVuc2lnbmVkIGludCBwb3dlcikKIHsKLQkvKiBiYWNrbGlnaHQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzVQQzEwMF9HUEQoMCksIHBvd2VyKTsKLQogCWlmIChwb3dlcikgewogCQkvKiBtb2R1bGUgcmVzZXQgKi8KIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFM1UEMxMDBfR1BIMCg2KSwgMSk7CkBAIC0xNzksNiArMTc5LDQ1IEBACiAJLmNvbHMJCT0gOCwKIH07CiAKK3N0YXRpYyBpbnQgc21ka2MxMDBfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoUzVQQzEwMF9HUEQoMCksICJCYWNrbGlnaHQiKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlcXVlc3QgR1BGIGZvciBQV00tT1VUMFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogQ29uZmlndXJlIEdQSU8gcGluIHdpdGggUzVQQzEwMF9HUERfVE9VVF8wICovCisJczNjX2dwaW9fY2ZncGluKFM1UEMxMDBfR1BEKDApLCBTM0NfR1BJT19TRk4oMikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNtZGtjMTAwX2JhY2tsaWdodF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzM2NfZ3Bpb19jZmdwaW4oUzVQQzEwMF9HUEQoMCksIFMzQ19HUElPX09VVFBVVCk7CisJZ3Bpb19mcmVlKFM1UEMxMDBfR1BEKDApKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgc21ka2MxMDBfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAwLAorCS5tYXhfYnJpZ2h0bmVzcwk9IDI1NSwKKwkuZGZ0X2JyaWdodG5lc3MJPSAyNTUsCisJLnB3bV9wZXJpb2RfbnMJPSA3ODc3MCwKKwkuaW5pdAkJPSBzbWRrYzEwMF9iYWNrbGlnaHRfaW5pdCwKKwkuZXhpdAkJPSBzbWRrYzEwMF9iYWNrbGlnaHRfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtZGtjMTAwX2JhY2tsaWdodF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB3bS1iYWNrbGlnaHQiLAorCS5kZXYJCT0geworCQkucGFyZW50CQk9ICZzM2NfZGV2aWNlX3RpbWVyWzBdLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21ka2MxMDBfYmFja2xpZ2h0X2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrYzEwMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmczNjX2RldmljZV9hZGMsCiAJJnMzY19kZXZpY2VfY2Zjb24sCkBAIC0yMDAsNiArMjM5LDggQEAKIAkmczVwX2RldmljZV9maW1jMSwKIAkmczVwX2RldmljZV9maW1jMiwKIAkmczVwYzEwMF9kZXZpY2Vfc3BkaWYsCisJJnMzY19kZXZpY2VfdGltZXJbMF0sCisJJnNtZGtjMTAwX2JhY2tsaWdodF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfdHNfbWFjaF9pbmZvIHMzY190c19wbGF0Zm9ybSBfX2luaXRkYXRhID0gewpAQCAtMjMzLDcgKzI3NCw2IEBACiAJczVwYzEwMF9zcGRpZl9zZXR1cF9ncGlvKFM1UEMxMDBfU1BESUZfR1BEKTsKIAogCS8qIExDRCBpbml0ICovCi0JZ3Bpb19yZXF1ZXN0KFM1UEMxMDBfR1BEKDApLCAiR1BEIik7CiAJZ3Bpb19yZXF1ZXN0KFM1UEMxMDBfR1BIMCg2KSwgIkdQSDAiKTsKIAlzbWRrYzEwMF9sY2RfcG93ZXJfc2V0KCZzbWRrYzEwMF9sY2RfcG93ZXJfZGF0YSwgMCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc21ka2MxMDBfZGV2aWNlcywgQVJSQVlfU0laRShzbWRrYzEwMF9kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9LY29uZmlnCmluZGV4IDUzYWFiZWYuLjM3YjVhOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9LY29uZmlnCkBAIC0xMyw2ICsxMyw3IEBACiAJYm9vbAogCXNlbGVjdCBTM0NfUEwzMzBfRE1BCiAJc2VsZWN0IFM1UF9FWFRfSU5UCisJc2VsZWN0IFM1UF9IUlQKIAlzZWxlY3QgUzVQVjIxMF9QTSBpZiBQTQogCWhlbHAKIAkgIEVuYWJsZSBTNVBWMjEwIENQVSBzdXBwb3J0CkBAIC01Myw2ICs1NCwxMSBAQAogCWhlbHAKIAkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBTREhDSSBncGlvLgogCitjb25maWcgUzVQVjIxMF9TRVRVUF9GSU1DCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciB0aGUgY2FtZXJhIGludGVyZmFjZXMuCisKIG1lbnUgIlM1UEMxMTAgTWFjaGluZXMiCiAKIGNvbmZpZyBNQUNIX0FRVUlMQQpAQCAtMTMwLDYgKzEzNiw3IEBACiAJc2VsZWN0IFNBTVNVTkdfREVWX0FEQwogCXNlbGVjdCBTQU1TVU5HX0RFVl9JREUKIAlzZWxlY3QgU0FNU1VOR19ERVZfS0VZUEFECisJc2VsZWN0IFNBTVNVTkdfREVWX1BXTQogCXNlbGVjdCBTQU1TVU5HX0RFVl9UUwogCXNlbGVjdCBTNVBWMjEwX1NFVFVQX0ZCXzI0QlBQCiAJc2VsZWN0IFM1UFYyMTBfU0VUVVBfSTJDMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL01ha2VmaWxlCmluZGV4IGZmMWEwZGIuLjExZjE3OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDcgQEAKIG9iai0kKENPTkZJR19TM0M2NFhYX0RFVl9TUEkpCSs9IGRldi1zcGkubwogCiBvYmotJChDT05GSUdfUzVQVjIxMF9TRVRVUF9GQl8yNEJQUCkJKz0gc2V0dXAtZmItMjRicHAubworb2JqLSQoQ09ORklHX1M1UFYyMTBfU0VUVVBfRklNQykJKz0gc2V0dXAtZmltYy5vCiBvYmotJChDT05GSUdfUzVQVjIxMF9TRVRVUF9JMkMxKSAJKz0gc2V0dXAtaTJjMS5vCiBvYmotJChDT05GSUdfUzVQVjIxMF9TRVRVUF9JMkMyKSAJKz0gc2V0dXAtaTJjMi5vCiBvYmotJChDT05GSUdfUzVQVjIxMF9TRVRVUF9JREUpCQkrPSBzZXR1cC1pZGUubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2dwaW9saWIuYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9ncGlvbGliLmMKaW5kZXggYWI2NzNlZi4uMWJhMjBhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2dwaW9saWIuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZ3Bpb2xpYi5jCkBAIC0yODEsNiArMjgxLDcgQEAKIAl9CiAKIAlzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXRfY2hpcHMoczVwdjIxMF9ncGlvXzRiaXQsIG5yX2NoaXBzKTsKKwlzNXBfcmVnaXN0ZXJfZ3Bpb2ludF9iYW5rKElSUV9HUElPSU5ULCAwLCBTNVBfR1BJT0lOVF9HUk9VUF9NQVhOUik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKaW5kZXggNGM0NWI3NC4uNzg5MjVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKQEAgLTE0Niw2ICsxNDYsMTAgQEAKICNkZWZpbmUgUzVQX09NX1NUQVQJCVM1UF9DTEtSRUcoMHhFMTAwKQogI2RlZmluZSBTNVBfVVNCX1BIWV9DT05UUk9MCVM1UF9DTEtSRUcoMHhFODBDKQogI2RlZmluZSBTNVBfREFDX0NPTlRST0wJCVM1UF9DTEtSRUcoMHhFODEwKQorI2RlZmluZSBTNVBfTUlQSV9EUEhZX0NPTlRST0woeCkgUzVQX0NMS1JFRygweEU4MTQpCisjZGVmaW5lIFM1UF9NSVBJX0RQSFlfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIFM1UF9NSVBJX0RQSFlfU1JFU0VUTgkoMSA8PCAxKQorI2RlZmluZSBTNVBfTUlQSV9EUEhZX01SRVNFVE4JKDEgPDwgMikKIAogI2RlZmluZSBTNVBfSU5GT1JNMAkJUzVQX0NMS1JFRygweEYwMDApCiAjZGVmaW5lIFM1UF9JTkZPUk0xCQlTNVBfQ0xLUkVHKDB4RjAwNCkKQEAgLTE2MSw3ICsxNjUsNiBAQAogI2RlZmluZSBTNVBfTUROSUVfU0VMCQlTNVBfQ0xLUkVHKDB4NzAwOCkKICNkZWZpbmUgUzVQX01JUElfUEhZX0NPTjAJUzVQX0NMS1JFRygweDcyMDApCiAjZGVmaW5lIFM1UF9NSVBJX1BIWV9DT04xCVM1UF9DTEtSRUcoMHg3MjA0KQotI2RlZmluZSBTNVBfTUlQSV9EUEhZX0NPTlRST0wJUzVQX0NMS1JFRygweEU4MTQpCiAKICNkZWZpbmUgUzVQX0lETEVfQ0ZHX1RMX01BU0sJKDMgPDwgMzApCiAjZGVmaW5lIFM1UF9JRExFX0NGR19UTV9NQVNLCSgzIDw8IDI4KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1hcXVpbGEuYwppbmRleCA1NTdhZGQ0Li40ZTFkOGZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1hcXVpbGEuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1hcXVpbGEuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPHBsYXQvZmIuaD4KICNpbmNsdWRlIDxwbGF0L2ZpbWMtY29yZS5oPgogI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cC10aW1lLmg+CiAKIC8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBUVVJTEFfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCkBAIC0yOTYsMTMgKzI5NywxMSBAQAogfTsKIAogLyogQlVDSyAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGJ1Y2sxX2NvbnN1bWVyW10gPSB7Ci0Jewkuc3VwcGx5CT0gInZkZGFybSIsIH0sCi19Oworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGJ1Y2sxX2NvbnN1bWVyID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRhcm0iLCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGJ1Y2syX2NvbnN1bWVyW10gPSB7Ci0Jewkuc3VwcGx5CT0gInZkZGludCIsIH0sCi19Oworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGJ1Y2syX2NvbnN1bWVyID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRpbnQiLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9idWNrMV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKQEAgLTMxMyw4ICszMTIsOCBAQAogCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAogCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShidWNrMV9jb25zdW1lciksCi0JLmNvbnN1bWVyX3N1cHBsaWVzCT0gYnVjazFfY29uc3VtZXIsCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJmJ1Y2sxX2NvbnN1bWVyLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9idWNrMl9kYXRhID0gewpAQCAtMzI2LDggKzMyNSw4IEBACiAJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CiAJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKGJ1Y2syX2NvbnN1bWVyKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSBidWNrMl9jb25zdW1lciwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmYnVjazJfY29uc3VtZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2J1Y2szX2RhdGEgPSB7CkBAIC0zOTEsMjYgKzM5MCwxNCBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB3bTg5OTRfZml4ZWRfdm9sdGFnZTBfc3VwcGxpZXNbXSA9IHsKLQl7Ci0JCS5kZXZfbmFtZQk9ICI1LTAwMWEiLAotCQkuc3VwcGx5CQk9ICJEQlZERCIsCi0JfSwgewotCQkuZGV2X25hbWUJPSAiNS0wMDFhIiwKLQkJLnN1cHBseQkJPSAiQVZERDIiLAotCX0sIHsKLQkJLmRldl9uYW1lCT0gIjUtMDAxYSIsCi0JCS5zdXBwbHkJCT0gIkNQVkREIiwKLQl9LAorCVJFR1VMQVRPUl9TVVBQTFkoIkRCVkREIiwgIjUtMDAxYSIpLAorCVJFR1VMQVRPUl9TVVBQTFkoIkFWREQyIiwgIjUtMDAxYSIpLAorCVJFR1VMQVRPUl9TVVBQTFkoIkNQVkREIiwgIjUtMDAxYSIpLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHdtODk5NF9maXhlZF92b2x0YWdlMV9zdXBwbGllc1tdID0gewotCXsKLQkJLmRldl9uYW1lCT0gIjUtMDAxYSIsCi0JCS5zdXBwbHkJCT0gIlNQS1ZERDEiLAotCX0sIHsKLQkJLmRldl9uYW1lCT0gIjUtMDAxYSIsCi0JCS5zdXBwbHkJCT0gIlNQS1ZERDIiLAotCX0sCisJUkVHVUxBVE9SX1NVUFBMWSgiU1BLVkREMSIsICI1LTAwMWEiKSwKKwlSRUdVTEFUT1JfU1VQUExZKCJTUEtWREQyIiwgIjUtMDAxYSIpLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODk5NF9maXhlZF92b2x0YWdlMF9pbml0X2RhdGEgPSB7CkBAIC00NTksMTUgKzQ0NiwxMSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgd204OTk0X2F2ZGQxX3N1cHBseSA9IHsKLQkuZGV2X25hbWUJPSAiNS0wMDFhIiwKLQkuc3VwcGx5CQk9ICJBVkREMSIsCi19Oworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHdtODk5NF9hdmRkMV9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoIkFWREQxIiwgIjUtMDAxYSIpOwogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgd204OTk0X2RjdmRkX3N1cHBseSA9IHsKLQkuZGV2X25hbWUJPSAiNS0wMDFhIiwKLQkuc3VwcGx5CQk9ICJEQ1ZERCIsCi19Oworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHdtODk5NF9kY3ZkZF9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoIkRDVkREIiwgIjUtMDAxYSIpOwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd204OTk0X2xkbzFfZGF0YSA9IHsKIAkuY29uc3RyYWludHMJPSB7CkBAIC02NjQsNiArNjQ3LDcgQEAKIAlzNXBfaW5pdF9pbyhOVUxMLCAwLCBTNVBfVkFfQ0hJUElEKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDI0MDAwMDAwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoYXF1aWxhX3VhcnRjZmdzLCBBUlJBWV9TSVpFKGFxdWlsYV91YXJ0Y2ZncykpOworCXM1cF9zZXRfdGltZXJfc291cmNlKFM1UF9QV00zLCBTNVBfUFdNNCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhcXVpbGFfbWFjaGluZV9pbml0KHZvaWQpCkBAIC02OTgsNSArNjgyLDUgQEAKIAkuaW5pdF9pcnEJPSBzNXB2MjEwX2luaXRfaXJxLAogCS5tYXBfaW8JCT0gYXF1aWxhX21hcF9pbywKIAkuaW5pdF9tYWNoaW5lCT0gYXF1aWxhX21hY2hpbmVfaW5pdCwKLQkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCisJLnRpbWVyCQk9ICZzNXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jCmluZGV4IDA1NmY1YzcuLjMxZDVhYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1nb25pLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3F0NjAyMjQwX3RzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0bWVsX214dF90cy5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9tYXg4OTk4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9wZGF0YS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CiAjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3M1cC10aW1lLmg+CiAKIC8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLwogI2RlZmluZSBHT05JX1VDT05fREVGQVVMVAkoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXApAQCAtMTA4LDYgKzExMCw4IEBACiAJfSwKIAkubWF4X2JwcAk9IDMyLAogCS5kZWZhdWx0X2JwcAk9IDE2LAorCS52aXJ0dWFsX3gJPSA0ODAsCisJLnZpcnR1YWxfeQk9IDIgKiA4MDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzY19mYl9wbGF0ZGF0YSBnb25pX2xjZF9wZGF0YSBfX2luaXRkYXRhID0gewpAQCAtMjIyLDcgKzIyNiw3IEBACiB9CiAKIC8qIFRTUCAqLwotc3RhdGljIHN0cnVjdCBxdDYwMjI0MF9wbGF0Zm9ybV9kYXRhIHF0NjAyMjQwX3BsYXRmb3JtX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG14dF9wbGF0Zm9ybV9kYXRhIHF0NjAyMjQwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLnhfbGluZQkJPSAxNywKIAkueV9saW5lCQk9IDExLAogCS54X3NpemUJCT0gODAwLApAQCAtMjMwLDcgKzIzNCw4IEBACiAJLmJsZW4JCT0gMHgyMSwKIAkudGhyZXNob2xkCT0gMHgyOCwKIAkudm9sdGFnZQk9IDI4MDAwMDAsICAgICAgICAgICAgICAvKiAyLjhWICovCi0JLm9yaWVudAkJPSBRVDYwMjI0MF9ESUFHT05BTCwKKwkub3JpZW50CQk9IE1YVF9ESUFHT05BTCwKKwkuaXJxZmxhZ3MJPSBJUlFGX1RSSUdHRVJfRkFMTElORywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9pMmMgaTJjMl9kYXRhIF9faW5pdGRhdGEgPSB7CkBAIC0yNjksMTAgKzI3NCwzMCBAQAogLyogTUFYODk5OCByZWd1bGF0b3JzICovCiAjaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX01BWDg5OTgpIHx8IGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9NQVg4OTk4X01PRFVMRSkKIAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGdvbmlfbGRvM19jb25zdW1lcnNbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2dXNiX2EiLCAiczNjLWhzb3RnIiksCit9OworCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZ29uaV9sZG81X2NvbnN1bWVyc1tdID0gewogCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAiczNjLXNkaGNpLjAiKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBnb25pX2xkbzhfY29uc3VtZXJzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidnVzYl9kIiwgInMzYy1oc290ZyIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGdvbmlfbGRvMTFfY29uc3VtZXJzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkaW8iLCAiMC0wMDMwIiksIC8qICJDQU1fSU9fMi44ViIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBnb25pX2xkbzEzX2NvbnN1bWVyc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZkZGEiLCAiMC0wMDMwIiksIC8qICJDQU1fQV8yLjhWIiAqLworfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGdvbmlfbGRvMTRfY29uc3VtZXJzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkX2NvcmUiLCAiMC0wMDMwIiksIC8qICJDQU1fQ0lGXzEuOFYiICovCit9OworCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG8yX2RhdGEgPSB7CiAJLmNvbnN0cmFpbnRzCT0gewogCQkubmFtZQkJPSAiVkFMSVZFXzEuMVYiLApAQCAtMjkyLDggKzMxNywxMCBAQAogCQkubWluX3VWCQk9IDExMDAwMDAsCiAJCS5tYXhfdVYJCT0gMTEwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKLQkJLmFsd2F5c19vbgk9IDEsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoZ29uaV9sZG8zX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gZ29uaV9sZG8zX2NvbnN1bWVycywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2xkbzRfZGF0YSA9IHsKQEAgLTMxMSw2ICszMzgsNyBAQAogCQkubWluX3VWCQk9IDI4MDAwMDAsCiAJCS5tYXhfdVYJCT0gMjgwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKIAkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShnb25pX2xkbzVfY29uc3VtZXJzKSwKIAkuY29uc3VtZXJfc3VwcGxpZXMgPSBnb25pX2xkbzVfY29uc3VtZXJzLApAQCAtMzQxLDggKzM2OSwxMCBAQAogCQkubWluX3VWCQk9IDMzMDAwMDAsCiAJCS5tYXhfdVYJCT0gMzMwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKLQkJLmFsd2F5c19vbgk9IDEsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoZ29uaV9sZG84X2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gZ29uaV9sZG84X2NvbnN1bWVycywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2xkbzlfZGF0YSA9IHsKQEAgLTM1MSw3ICszODEsNiBAQAogCQkubWluX3VWCQk9IDI4MDAwMDAsCiAJCS5tYXhfdVYJCT0gMjgwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKLQkJLmFsd2F5c19vbgk9IDEsCiAJfSwKIH07CiAKQEAgLTM3MSw4ICs0MDAsMTAgQEAKIAkJLm1pbl91VgkJPSAyODAwMDAwLAogCQkubWF4X3VWCQk9IDI4MDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCi0JCS5hbHdheXNfb24JPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKGdvbmlfbGRvMTFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBnb25pX2xkbzExX2NvbnN1bWVycywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2xkbzEyX2RhdGEgPSB7CkBAIC0zODEsNyArNDEyLDYgQEAKIAkJLm1pbl91VgkJPSAxMjAwMDAwLAogCQkubWF4X3VWCQk9IDEyMDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCi0JCS5hbHdheXNfb24JPSAxLAogCX0sCiB9OwogCkBAIC0zOTEsOCArNDIxLDEwIEBACiAJCS5taW5fdVYJCT0gMjgwMDAwMCwKIAkJLm1heF91VgkJPSAyODAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLAotCQkuYWx3YXlzX29uCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShnb25pX2xkbzEzX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gZ29uaV9sZG8xM19jb25zdW1lcnMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG8xNF9kYXRhID0gewpAQCAtNDAxLDggKzQzMywxMCBAQAogCQkubWluX3VWCQk9IDE4MDAwMDAsCiAJCS5tYXhfdVYJCT0gMTgwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKLQkJLmFsd2F5c19vbgk9IDEsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoZ29uaV9sZG8xNF9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcwk9IGdvbmlfbGRvMTRfY29uc3VtZXJzLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvMTVfZGF0YSA9IHsKQEAgLTQxMSw3ICs0NDUsNiBAQAogCQkubWluX3VWCQk9IDMzMDAwMDAsCiAJCS5tYXhfdVYJCT0gMzMwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKLQkJLmFsd2F5c19vbgk9IDEsCiAJfSwKIH07CiAKQEAgLTQyMSw3ICs0NTQsNiBAQAogCQkubWluX3VWCQk9IDE4MDAwMDAsCiAJCS5tYXhfdVYJCT0gMTgwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKLQkJLmFsd2F5c19vbgk9IDEsCiAJfSwKIH07CiAKQEAgLTQzNiwxMyArNDY4LDExIEBACiB9OwogCiAvKiBCVUNLICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYnVjazFfY29uc3VtZXJbXSA9IHsKLQl7CS5zdXBwbHkJPSAidmRkYXJtIiwgfSwKLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYnVjazFfY29uc3VtZXIgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZkZGFybSIsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYnVjazJfY29uc3VtZXJbXSA9IHsKLQl7CS5zdXBwbHkJPSAidmRkaW50IiwgfSwKLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYnVjazJfY29uc3VtZXIgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZkZGludCIsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9idWNrMV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKQEAgLTQ1Myw4ICs0ODMsOCBAQAogCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAogCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShidWNrMV9jb25zdW1lciksCi0JLmNvbnN1bWVyX3N1cHBsaWVzCT0gYnVjazFfY29uc3VtZXIsCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJmJ1Y2sxX2NvbnN1bWVyLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfYnVjazJfZGF0YSA9IHsKQEAgLTQ2Niw4ICs0OTYsOCBAQAogCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAogCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShidWNrMl9jb25zdW1lciksCi0JLmNvbnN1bWVyX3N1cHBsaWVzCT0gYnVjazJfY29uc3VtZXIsCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJmJ1Y2syX2NvbnN1bWVyLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfYnVjazNfZGF0YSA9IHsKQEAgLTUzMSwyNiArNTYxLDE0IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHdtODk5NF9maXhlZF92b2x0YWdlMF9zdXBwbGllc1tdID0gewotCXsKLQkJLmRldl9uYW1lCT0gIjUtMDAxYSIsCi0JCS5zdXBwbHkJCT0gIkRCVkREIiwKLQl9LCB7Ci0JCS5kZXZfbmFtZQk9ICI1LTAwMWEiLAotCQkuc3VwcGx5CQk9ICJBVkREMiIsCi0JfSwgewotCQkuZGV2X25hbWUJPSAiNS0wMDFhIiwKLQkJLnN1cHBseQkJPSAiQ1BWREQiLAotCX0sCisJUkVHVUxBVE9SX1NVUFBMWSgiREJWREQiLCAiNS0wMDFhIiksCisJUkVHVUxBVE9SX1NVUFBMWSgiQVZERDIiLCAiNS0wMDFhIiksCisJUkVHVUxBVE9SX1NVUFBMWSgiQ1BWREQiLCAiNS0wMDFhIiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgd204OTk0X2ZpeGVkX3ZvbHRhZ2UxX3N1cHBsaWVzW10gPSB7Ci0JewotCQkuZGV2X25hbWUJPSAiNS0wMDFhIiwKLQkJLnN1cHBseQkJPSAiU1BLVkREMSIsCi0JfSwgewotCQkuZGV2X25hbWUJPSAiNS0wMDFhIiwKLQkJLnN1cHBseQkJPSAiU1BLVkREMiIsCi0JfSwKKwlSRUdVTEFUT1JfU1VQUExZKCJTUEtWREQxIiwgIjUtMDAxYSIpLAorCVJFR1VMQVRPUl9TVVBQTFkoIlNQS1ZERDIiLCAiNS0wMDFhIiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd204OTk0X2ZpeGVkX3ZvbHRhZ2UwX2luaXRfZGF0YSA9IHsKQEAgLTU5OSwxNSArNjE3LDExIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB3bTg5OTRfYXZkZDFfc3VwcGx5ID0gewotCS5kZXZfbmFtZQk9ICI1LTAwMWEiLAotCS5zdXBwbHkJCT0gIkFWREQxIiwKLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgd204OTk0X2F2ZGQxX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgiQVZERDEiLCAiNS0wMDFhIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB3bTg5OTRfZGN2ZGRfc3VwcGx5ID0gewotCS5kZXZfbmFtZQk9ICI1LTAwMWEiLAotCS5zdXBwbHkJCT0gIkRDVkREIiwKLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgd204OTk0X2RjdmRkX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgiRENWREQiLCAiNS0wMDFhIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB3bTg5OTRfbGRvMV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKQEAgLTc5NCw2ICs4MDgsNyBAQAogCSZnb25pX2kyY19ncGlvNSwKIAkmbW1jMl9maXhlZF92b2x0YWdlLAogCSZnb25pX2RldmljZV9ncGlva2V5cywKKwkmczNjX2RldmljZV9pMmMwLAogCSZzNXBfZGV2aWNlX2ZpbWMwLAogCSZzNXBfZGV2aWNlX2ZpbWMxLAogCSZzNXBfZGV2aWNlX2ZpbWMyLApAQCAtODIzLDYgKzgzOCw3IEBACiAJczVwX2luaXRfaW8oTlVMTCwgMCwgUzVQX1ZBX0NISVBJRCk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygyNDAwMDAwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKGdvbmlfdWFydGNmZ3MsIEFSUkFZX1NJWkUoZ29uaV91YXJ0Y2ZncykpOworCXM1cF9zZXRfdGltZXJfc291cmNlKFM1UF9QV00zLCBTNVBfUFdNNCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBnb25pX21hY2hpbmVfaW5pdCh2b2lkKQpAQCAtODMwLDYgKzg0Niw5IEBACiAJLyogUmFkaW86IGNhbGwgYmVmb3JlIEkyQyAxIHJlZ2lzdGVyYXRpb24gKi8KIAlnb25pX3JhZGlvX2luaXQoKTsKIAorCS8qIEkyQzAgKi8KKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CisKIAkvKiBJMkMxICovCiAJczNjX2kyYzFfc2V0X3BsYXRkYXRhKE5VTEwpOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyYzFfZGV2cywgQVJSQVlfU0laRShpMmMxX2RldnMpKTsKQEAgLTg3Myw1ICs4OTIsNSBAQAogCS5pbml0X2lycQk9IHM1cHYyMTBfaW5pdF9pcnEsCiAJLm1hcF9pbwkJPSBnb25pX21hcF9pbywKIAkuaW5pdF9tYWNoaW5lCT0gZ29uaV9tYWNoaW5lX2luaXQsCi0JLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorCS50aW1lcgkJPSAmczVwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXNtZGtjMTEwLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrYzExMC5jCmluZGV4IGNlMTFhMDIuLjZjNDEyYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXNtZGtjMTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtc21ka2MxMTAuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHBsYXQvYXRhLmg+CiAjaW5jbHVkZSA8cGxhdC9paWMuaD4KICNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9zNXAtdGltZS5oPgogCiAvKiBGb2xsb3dpbmcgYXJlIGRlZmF1bHQgdmFsdWVzIGZvciBVQ09OLCBVTENPTiBhbmQgVUZDT04gVUFSVCByZWdpc3RlcnMgKi8KICNkZWZpbmUgU01ES0MxMTBfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCkBAIC0xMTEsNiArMTEyLDcgQEAKIAlzNXBfaW5pdF9pbyhOVUxMLCAwLCBTNVBfVkFfQ0hJUElEKTsKIAlzM2MyNHh4X2luaXRfY2xvY2tzKDI0MDAwMDAwKTsKIAlzM2MyNHh4X2luaXRfdWFydHMoc21ka3YyMTBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21ka3YyMTBfdWFydGNmZ3MpKTsKKwlzNXBfc2V0X3RpbWVyX3NvdXJjZShTNVBfUFdNMywgUzVQX1BXTTQpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21ka2MxMTBfbWFjaGluZV9pbml0KHZvaWQpCkBAIC0xMzgsNSArMTQwLDUgQEAKIAkuaW5pdF9pcnEJPSBzNXB2MjEwX2luaXRfaXJxLAogCS5tYXBfaW8JCT0gc21ka2MxMTBfbWFwX2lvLAogCS5pbml0X21hY2hpbmUJPSBzbWRrYzExMF9tYWNoaW5lX2luaXQsCi0JLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorCS50aW1lcgkJPSAmczVwX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXNtZGt2MjEwLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrdjIxMC5jCmluZGV4IGJjOWZkYjUuLmJjMDhhYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXNtZGt2MjEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtc21ka3YyMTAuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtNDMsNiArNDQsOCBAQAogI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CiAjaW5jbHVkZSA8cGxhdC9wbS5oPgogI2luY2x1ZGUgPHBsYXQvZmIuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9zNXAtdGltZS5oPgogCiAvKiBGb2xsb3dpbmcgYXJlIGRlZmF1bHQgdmFsdWVzIGZvciBVQ09OLCBVTENPTiBhbmQgVUZDT04gVUFSVCByZWdpc3RlcnMgKi8KICNkZWZpbmUgU01ES1YyMTBfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCkBAIC0yMDgsNiArMjExLDQ1IEBACiAJLnNldHVwX2dwaW8JPSBzNXB2MjEwX2ZiX2dwaW9fc2V0dXBfMjRicHAsCiB9OwogCitzdGF0aWMgaW50IHNtZGt2MjEwX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFM1UFYyMTBfR1BEMCgzKSwgIkJhY2tsaWdodCIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVxdWVzdCBHUEQgZm9yIFBXTS1PVVQgM1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogQ29uZmlndXJlIEdQSU8gcGluIHdpdGggUzVQVjIxMF9HUERfMF8zX1RPVVRfMyAqLworCXMzY19ncGlvX2NmZ3BpbihTNVBWMjEwX0dQRDAoMyksIFMzQ19HUElPX1NGTigyKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc21ka3YyMTBfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXMzY19ncGlvX2NmZ3BpbihTNVBWMjEwX0dQRDAoMyksIFMzQ19HUElPX09VVFBVVCk7CisJZ3Bpb19mcmVlKFM1UFYyMTBfR1BEMCgzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHNtZGt2MjEwX2JhY2tsaWdodF9kYXRhID0geworCS5wd21faWQJCT0gMywKKwkubWF4X2JyaWdodG5lc3MJPSAyNTUsCisJLmRmdF9icmlnaHRuZXNzCT0gMjU1LAorCS5wd21fcGVyaW9kX25zCT0gNzg3NzAsCisJLmluaXQJCT0gc21ka3YyMTBfYmFja2xpZ2h0X2luaXQsCisJLmV4aXQJCT0gc21ka3YyMTBfYmFja2xpZ2h0X2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWRrdjIxMF9iYWNrbGlnaHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJwd20tYmFja2xpZ2h0IiwKKwkuZGV2CQk9IHsKKwkJLnBhcmVudAkJPSAmczNjX2RldmljZV90aW1lclszXS5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtZGt2MjEwX2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21ka3YyMTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2VfYWRjLAogCSZzM2NfZGV2aWNlX2NmY29uLApAQCAtMjI5LDYgKzI3MSw4IEBACiAJJnNhbXN1bmdfZGV2aWNlX2tleXBhZCwKIAkmc21ka3YyMTBfZG05MDAwLAogCSZzbWRrdjIxMF9sY2RfbHRlNDgwd3YsCisJJnMzY19kZXZpY2VfdGltZXJbM10sCisJJnNtZGt2MjEwX2JhY2tsaWdodF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21ka3YyMTBfZG05MDAwX2luaXQodm9pZCkKQEAgLTI3Miw2ICszMTYsNyBAQAogCXM1cF9pbml0X2lvKE5VTEwsIDAsIFM1UF9WQV9DSElQSUQpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMjQwMDAwMDApOwogCXMzYzI0eHhfaW5pdF91YXJ0cyhzbWRrdjIxMF91YXJ0Y2ZncywgQVJSQVlfU0laRShzbWRrdjIxMF91YXJ0Y2ZncykpOworCXM1cF9zZXRfdGltZXJfc291cmNlKFM1UF9QV00yLCBTNVBfUFdNNCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWRrdjIxMF9tYWNoaW5lX2luaXQodm9pZCkKQEAgLTMwNiw1ICszNTEsNSBAQAogCS5pbml0X2lycQk9IHM1cHYyMTBfaW5pdF9pcnEsCiAJLm1hcF9pbwkJPSBzbWRrdjIxMF9tYXBfaW8sCiAJLmluaXRfbWFjaGluZQk9IHNtZGt2MjEwX21hY2hpbmVfaW5pdCwKLQkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCisJLnRpbWVyCQk9ICZzNXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtdG9yYnJlY2suYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXRvcmJyZWNrLmMKaW5kZXggMDQzYzkzODguLjkyNWZjMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXRvcmJyZWNrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtdG9yYnJlY2suYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cC10aW1lLmg+CiAKIC8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLwogI2RlZmluZSBUT1JCUkVDS19VQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUNPTl9UWElMRVZFTCB8CVwKQEAgLTEwNCw2ICsxMDUsNyBAQAogCXM1cF9pbml0X2lvKE5VTEwsIDAsIFM1UF9WQV9DSElQSUQpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMjQwMDAwMDApOwogCXMzYzI0eHhfaW5pdF91YXJ0cyh0b3JicmVja191YXJ0Y2ZncywgQVJSQVlfU0laRSh0b3JicmVja191YXJ0Y2ZncykpOworCXM1cF9zZXRfdGltZXJfc291cmNlKFM1UF9QV00zLCBTNVBfUFdNNCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB0b3JicmVja19tYWNoaW5lX2luaXQodm9pZCkKQEAgLTEyNyw1ICsxMjksNSBAQAogCS5pbml0X2lycQk9IHM1cHYyMTBfaW5pdF9pcnEsCiAJLm1hcF9pbwkJPSB0b3JicmVja19tYXBfaW8sCiAJLmluaXRfbWFjaGluZQk9IHRvcmJyZWNrX21hY2hpbmVfaW5pdCwKLQkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCisJLnRpbWVyCQk9ICZzNXBfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWZpbWMuYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1maW1jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjYzViMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtZmltYy5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBTNVBWMjEwIGNhbWVyYSBpbnRlcmZhY2UgR1BJTyBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9jYW1wb3J0Lmg+CisKK2ludCBzNXB2MjEwX2ZpbWNfc2V0dXBfZ3BpbyhlbnVtIHM1cF9jYW1wb3J0X2lkIGlkKQoreworCXUzMiBncGlvOCwgZ3BpbzU7CisJaW50IHJldDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFM1UF9DQU1QT1JUX0E6CisJCWdwaW84ID0gUzVQVjIxMF9HUEUwKDApOworCQlncGlvNSA9IFM1UFYyMTBfR1BFMSgwKTsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9DQU1QT1JUX0I6CisJCWdwaW84ID0gUzVQVjIxMF9HUEowKDApOworCQlncGlvNSA9IFM1UFYyMTBfR1BKMSgwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXQVJOKDEsICJXcm9uZyBjYW1wb3J0IGlkOiAlZFxuIiwgaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBzM2NfZ3Bpb19jZmdhbGxfcmFuZ2UoZ3BpbzgsIDgsIFMzQ19HUElPX1NGTigyKSwKKwkJCQkgICAgUzNDX0dQSU9fUFVMTF9VUCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzM2NfZ3Bpb19jZmdhbGxfcmFuZ2UoZ3BpbzUsIDUsIFMzQ19HUElPX1NGTigyKSwKKwkJCQkgICAgIFMzQ19HUElPX1BVTExfVVApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhOWFjYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0jIGFyY2gvYXJtL21hY2gtczVwdjMxMC9LY29uZmlnCi0jCi0jIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotIwkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KLSMKLSMgTGljZW5zZWQgdW5kZXIgR1BMdjIKLQotIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTNVBWMzEwCi0KLWlmIEFSQ0hfUzVQVjMxMAotCi1jb25maWcgQ1BVX1M1UFYzMTAKLQlib29sCi0Jc2VsZWN0IFMzQ19QTDMzMF9ETUEKLQloZWxwCi0JICBFbmFibGUgUzVQVjMxMCBDUFUgc3VwcG9ydAotCi1jb25maWcgUzVQVjMxMF9ERVZfUEQKLQlib29sCi0JaGVscAotCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIFBvd2VyIERvbWFpbgotCi1jb25maWcgUzVQVjMxMF9TRVRVUF9JMkMxCi0JYm9vbAotCWhlbHAKLQkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDEuCi0KLWNvbmZpZyBTNVBWMzEwX1NFVFVQX0kyQzIKLQlib29sCi0JaGVscAotCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMi4KLQotY29uZmlnIFM1UFYzMTBfU0VUVVBfSTJDMwotCWJvb2wKLQloZWxwCi0JICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyAzLgotCi1jb25maWcgUzVQVjMxMF9TRVRVUF9JMkM0Ci0JYm9vbAotCWhlbHAKLQkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDQuCi0KLWNvbmZpZyBTNVBWMzEwX1NFVFVQX0kyQzUKLQlib29sCi0JaGVscAotCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgNS4KLQotY29uZmlnIFM1UFYzMTBfU0VUVVBfSTJDNgotCWJvb2wKLQloZWxwCi0JICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyA2LgotCi1jb25maWcgUzVQVjMxMF9TRVRVUF9JMkM3Ci0JYm9vbAotCWhlbHAKLQkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDcuCi0KLWNvbmZpZyBTNVBWMzEwX1NFVFVQX1NESENJCi0JYm9vbAotCXNlbGVjdCBTNVBWMzEwX1NFVFVQX1NESENJX0dQSU8KLQloZWxwCi0JICBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIGZvciBTNVBWMzEwIGJhc2VkIFNESENJIHN5c3RlbXMuCi0KLWNvbmZpZyBTNVBWMzEwX1NFVFVQX1NESENJX0dQSU8KLQlib29sCi0JaGVscAotCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFNESENJIGdwaW8uCi0KLWNvbmZpZyBTNVBWMzEwX0RFVl9TWVNNTVUKLQlib29sCi0JaGVscAotCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFNZU1RFTSBNTVUgaW4gUzVQVjMxMAotCi0jIG1hY2hpbmUgc3VwcG9ydAotCi1tZW51ICJTNVBDMjEwIE1hY2hpbmVzIgotCi1jb25maWcgTUFDSF9TTURLQzIxMAotCWJvb2wgIlNNREtDMjEwIgotCXNlbGVjdCBDUFVfUzVQVjMxMAotCXNlbGVjdCBTM0NfREVWX1JUQwotCXNlbGVjdCBTM0NfREVWX1dEVAotCXNlbGVjdCBTM0NfREVWX0kyQzEKLQlzZWxlY3QgUzNDX0RFVl9IU01NQwotCXNlbGVjdCBTM0NfREVWX0hTTU1DMQotCXNlbGVjdCBTM0NfREVWX0hTTU1DMgotCXNlbGVjdCBTM0NfREVWX0hTTU1DMwotCXNlbGVjdCBTNVBWMzEwX0RFVl9QRAotCXNlbGVjdCBTNVBWMzEwX1NFVFVQX0kyQzEKLQlzZWxlY3QgUzVQVjMxMF9TRVRVUF9TREhDSQotCXNlbGVjdCBTNVBWMzEwX0RFVl9TWVNNTVUKLQloZWxwCi0JICBNYWNoaW5lIHN1cHBvcnQgZm9yIFNhbXN1bmcgU01ES0MyMTAKLQkgIFM1UEMyMTAoTUNQKSBpcyBvbmUgb2YgcGFja2FnZSBvcHRpb24gb2YgUzVQVjMxMAotCi1jb25maWcgTUFDSF9VTklWRVJTQUxfQzIxMAotCWJvb2wgIk1vYmlsZSBVTklWRVJTQUxfQzIxMCBCb2FyZCIKLQlzZWxlY3QgQ1BVX1M1UFYzMTAKLQlzZWxlY3QgUzVQX0RFVl9PTkVOQU5ECi0Jc2VsZWN0IFMzQ19ERVZfSFNNTUMKLQlzZWxlY3QgUzNDX0RFVl9IU01NQzIKLQlzZWxlY3QgUzNDX0RFVl9IU01NQzMKLQlzZWxlY3QgUzVQVjMxMF9TRVRVUF9TREhDSQotCXNlbGVjdCBTM0NfREVWX0kyQzEKLQlzZWxlY3QgUzVQVjMxMF9TRVRVUF9JMkMxCi0JaGVscAotCSAgTWFjaGluZSBzdXBwb3J0IGZvciBTYW1zdW5nIE1vYmlsZSBVbml2ZXJzYWwgUzVQQzIxMCBSZWZlcmVuY2UKLQkgIEJvYXJkLiBTNVBDMjEwKE1DUCkgaXMgb25lIG9mIHBhY2thZ2Ugb3B0aW9uIG9mIFM1UFYzMTAKLQotZW5kbWVudQotCi1tZW51ICJTNVBWMzEwIE1hY2hpbmVzIgotCi1jb25maWcgTUFDSF9TTURLVjMxMAotCWJvb2wgIlNNREtWMzEwIgotCXNlbGVjdCBDUFVfUzVQVjMxMAotCXNlbGVjdCBTM0NfREVWX1JUQwotCXNlbGVjdCBTM0NfREVWX1dEVAotCXNlbGVjdCBTM0NfREVWX0kyQzEKLQlzZWxlY3QgUzNDX0RFVl9IU01NQwotCXNlbGVjdCBTM0NfREVWX0hTTU1DMQotCXNlbGVjdCBTM0NfREVWX0hTTU1DMgotCXNlbGVjdCBTM0NfREVWX0hTTU1DMwotCXNlbGVjdCBTNVBWMzEwX0RFVl9QRAotCXNlbGVjdCBTNVBWMzEwX0RFVl9TWVNNTVUKLQlzZWxlY3QgUzVQVjMxMF9TRVRVUF9JMkMxCi0Jc2VsZWN0IFM1UFYzMTBfU0VUVVBfU0RIQ0kKLQloZWxwCi0JICBNYWNoaW5lIHN1cHBvcnQgZm9yIFNhbXN1bmcgU01ES1YzMTAKLQotZW5kbWVudQotCi1jb21tZW50ICJDb25maWd1cmF0aW9uIGZvciBIU01NQyBidXMgd2lkdGgiCi0KLW1lbnUgIlVzZSA4LWJpdCBidXMgd2lkdGgiCi0KLWNvbmZpZyBTNVBWMzEwX1NESENJX0NIMF84QklUCi0JYm9vbCAiQ2hhbm5lbCAwIHdpdGggOC1iaXQgYnVzIgotCWhlbHAKLQkgIFN1cHBvcnQgSFNNTUMgQ2hhbm5lbCAwIDgtYml0IGJ1cy4KLQkgIElmIHNlbGVjdGVkLCBDaGFubmVsIDEgaXMgZGlzYWJsZWQuCi0KLWNvbmZpZyBTNVBWMzEwX1NESENJX0NIMl84QklUCi0JYm9vbCAiQ2hhbm5lbCAyIHdpdGggOC1iaXQgYnVzIgotCWhlbHAKLQkgIFN1cHBvcnQgSFNNTUMgQ2hhbm5lbCAyIDgtYml0IGJ1cy4KLQkgIElmIHNlbGVjdGVkLCBDaGFubmVsIDMgaXMgZGlzYWJsZWQuCi0KLWVuZG1lbnUKLQotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM2ZmIzOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jIGFyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZQotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSMJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCi0jCi0jIExpY2Vuc2VkIHVuZGVyIEdQTHYyCi0KLW9iai15CQkJCTo9Ci1vYmotbQkJCQk6PQotb2JqLW4JCQkJOj0KLW9iai0JCQkJOj0KLQotIyBDb3JlIHN1cHBvcnQgZm9yIFM1UFYzMTAgc3lzdGVtCi0KLW9iai0kKENPTkZJR19DUFVfUzVQVjMxMCkJKz0gY3B1Lm8gaW5pdC5vIGNsb2NrLm8gaXJxLWNvbWJpbmVyLm8KLW9iai0kKENPTkZJR19DUFVfUzVQVjMxMCkJKz0gc2V0dXAtaTJjMC5vIHRpbWUubyBncGlvbGliLm8gaXJxLWVpbnQubyBkbWEubwotb2JqLSQoQ09ORklHX0NQVV9GUkVRKQkJKz0gY3B1ZnJlcS5vCi0KLW9iai0kKENPTkZJR19TTVApCQkrPSBwbGF0c21wLm8gaGVhZHNtcC5vCi1vYmotJChDT05GSUdfTE9DQUxfVElNRVJTKQkrPSBsb2NhbHRpbWVyLm8KLW9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gaG90cGx1Zy5vCi0KLSMgbWFjaGluZSBzdXBwb3J0Ci0KLW9iai0kKENPTkZJR19NQUNIX1NNREtDMjEwKQkrPSBtYWNoLXNtZGtjMjEwLm8KLW9iai0kKENPTkZJR19NQUNIX1NNREtWMzEwKQkrPSBtYWNoLXNtZGt2MzEwLm8KLW9iai0kKENPTkZJR19NQUNIX1VOSVZFUlNBTF9DMjEwKQkrPSBtYWNoLXVuaXZlcnNhbF9jMjEwLm8KLQotIyBkZXZpY2Ugc3VwcG9ydAotCi1vYmoteQkJCQkJKz0gZGV2LWF1ZGlvLm8KLW9iai0kKENPTkZJR19TNVBWMzEwX0RFVl9QRCkJCSs9IGRldi1wZC5vCi1vYmotJChDT05GSUdfUzVQVjMxMF9ERVZfU1lTTU1VKQkrPSBkZXYtc3lzbW11Lm8KLQotb2JqLSQoQ09ORklHX1M1UFYzMTBfU0VUVVBfSTJDMSkJKz0gc2V0dXAtaTJjMS5vCi1vYmotJChDT05GSUdfUzVQVjMxMF9TRVRVUF9JMkMyKQkrPSBzZXR1cC1pMmMyLm8KLW9iai0kKENPTkZJR19TNVBWMzEwX1NFVFVQX0kyQzMpCSs9IHNldHVwLWkyYzMubwotb2JqLSQoQ09ORklHX1M1UFYzMTBfU0VUVVBfSTJDNCkJKz0gc2V0dXAtaTJjNC5vCi1vYmotJChDT05GSUdfUzVQVjMxMF9TRVRVUF9JMkM1KQkrPSBzZXR1cC1pMmM1Lm8KLW9iai0kKENPTkZJR19TNVBWMzEwX1NFVFVQX0kyQzYpCSs9IHNldHVwLWkyYzYubwotb2JqLSQoQ09ORklHX1M1UFYzMTBfU0VUVVBfSTJDNykJKz0gc2V0dXAtaTJjNy5vCi1vYmotJChDT05GSUdfUzVQVjMxMF9TRVRVUF9TREhDSSkJKz0gc2V0dXAtc2RoY2kubwotb2JqLSQoQ09ORklHX1M1UFYzMTBfU0VUVVBfU0RIQ0lfR1BJTykJKz0gc2V0dXAtc2RoY2ktZ3Bpby5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvZGV2LWF1ZGlvLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvZGV2LWF1ZGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOTY0MjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Rldi1hdWRpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9kZXYtYXVkaW8uYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiBMdGQKLSAqCUphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLQotI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KLSNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpyY2xrc3JjW10gPSB7Ci0JWzBdID0gImJ1c2NsayIsCi0JWzFdID0gImkyc2NsayIsCi19OwotCi1zdGF0aWMgaW50IHM1cHYzMTBfY2ZnX2kycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCS8qIGNvbmZpZ3VyZSBHUElPIGZvciBpMnMgcG9ydCAqLwotCXN3aXRjaCAocGRldi0+aWQpIHsKLQljYXNlIDA6Ci0JCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMzEwX0dQWigwKSwgNywgUzNDX0dQSU9fU0ZOKDIpKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQVjMxMF9HUEMwKDApLCA1LCBTM0NfR1BJT19TRk4oMikpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMzEwX0dQQzEoMCksIDUsIFMzQ19HUElPX1NGTig0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBEZXZpY2UgJWRcbiIsIHBkZXYtPmlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIGkyc3Y1X3BkYXRhID0gewotCS5jZmdfZ3BpbyA9IHM1cHYzMTBfY2ZnX2kycywKLQkudHlwZSA9IHsKLQkJLmkycyA9IHsKLQkJCS5xdWlya3MgPSBRVUlSS19QUklfNkNIQU4gfCBRVUlSS19TRUNfREFJCi0JCQkJCSB8IFFVSVJLX05FRURfUlNUQ0xSLAotCQkJLnNyY19jbGsgPSByY2xrc3JjLAotCQl9LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfaTJzMF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9JMlMwLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9JMlMwICsgMHgxMDAgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gRE1BQ0hfSTJTMF9UWCwKLQkJLmVuZAk9IERNQUNIX0kyUzBfVFgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBETUFDSF9JMlMwX1JYLAotCQkuZW5kCT0gRE1BQ0hfSTJTMF9SWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLQlbM10gPSB7Ci0JCS5zdGFydAk9IERNQUNIX0kyUzBTX1RYLAotCQkuZW5kCT0gRE1BQ0hfSTJTMFNfVFgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX2kyczAgPSB7Ci0JLm5hbWUgPSAic2Ftc3VuZy1pMnMiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHM1cHYzMTBfaTJzMF9yZXNvdXJjZSksCi0JLnJlc291cmNlID0gczVwdjMxMF9pMnMwX3Jlc291cmNlLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmkyc3Y1X3BkYXRhLAotCX0sCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqcmNsa3NyY192M1tdID0gewotCVswXSA9ICJzY2xrX2kycyIsCi0JWzFdID0gIm5vX3N1Y2hfY2xvY2siLAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgaTJzdjNfcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczVwdjMxMF9jZmdfaTJzLAotCS50eXBlID0gewotCQkuaTJzID0gewotCQkJLnF1aXJrcyA9IFFVSVJLX05PX01VWFBTUiwKLQkJCS5zcmNfY2xrID0gcmNsa3NyY192MywKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXB2MzEwX2kyczFfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfSTJTMSwKLQkJLmVuZAk9IFM1UFYzMTBfUEFfSTJTMSArIDB4MTAwIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IERNQUNIX0kyUzFfVFgsCi0JCS5lbmQJPSBETUFDSF9JMlMxX1RYLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gRE1BQ0hfSTJTMV9SWCwKLQkJLmVuZAk9IERNQUNIX0kyUzFfUlgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX2kyczEgPSB7Ci0JLm5hbWUgPSAic2Ftc3VuZy1pMnMiLAotCS5pZCA9IDEsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHM1cHYzMTBfaTJzMV9yZXNvdXJjZSksCi0JLnJlc291cmNlID0gczVwdjMxMF9pMnMxX3Jlc291cmNlLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmkyc3YzX3BkYXRhLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfaTJzMl9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9JMlMyLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9JMlMyICsgMHgxMDAgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gRE1BQ0hfSTJTMl9UWCwKLQkJLmVuZAk9IERNQUNIX0kyUzJfVFgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBETUFDSF9JMlMyX1JYLAotCQkuZW5kCT0gRE1BQ0hfSTJTMl9SWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfaTJzMiA9IHsKLQkubmFtZSA9ICJzYW1zdW5nLWkycyIsCi0JLmlkID0gMiwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoczVwdjMxMF9pMnMyX3Jlc291cmNlKSwKLQkucmVzb3VyY2UgPSBzNXB2MzEwX2kyczJfcmVzb3VyY2UsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaTJzdjNfcGRhdGEsCi0JfSwKLX07Ci0KLS8qIFBDTSBDb250cm9sbGVyIHBsYXRmb3JtX2RldmljZXMgKi8KLQotc3RhdGljIGludCBzNXB2MzEwX3BjbV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN3aXRjaCAocGRldi0+aWQpIHsKLQljYXNlIDA6Ci0JCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMzEwX0dQWigwKSwgNSwgUzNDX0dQSU9fU0ZOKDMpKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQVjMxMF9HUEMwKDApLCA1LCBTM0NfR1BJT19TRk4oMykpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMzEwX0dQQzEoMCksIDUsIFMzQ19HUElPX1NGTigzKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJJbnZhbGlkIFBDTSBDb250cm9sbGVyIG51bWJlciEiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19wY21fcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczVwdjMxMF9wY21fY2ZnX2dwaW8sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfcGNtMF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9QQ00wLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9QQ00wICsgMHgxMDAgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gRE1BQ0hfUENNMF9UWCwKLQkJLmVuZAk9IERNQUNIX1BDTTBfVFgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBETUFDSF9QQ00wX1JYLAotCQkuZW5kCT0gRE1BQ0hfUENNMF9SWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfcGNtMCA9IHsKLQkubmFtZSA9ICJzYW1zdW5nLXBjbSIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoczVwdjMxMF9wY20wX3Jlc291cmNlKSwKLQkucmVzb3VyY2UgPSBzNXB2MzEwX3BjbTBfcmVzb3VyY2UsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmczNjX3BjbV9wZGF0YSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXB2MzEwX3BjbTFfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfUENNMSwKLQkJLmVuZAk9IFM1UFYzMTBfUEFfUENNMSArIDB4MTAwIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IERNQUNIX1BDTTFfVFgsCi0JCS5lbmQJPSBETUFDSF9QQ00xX1RYLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gRE1BQ0hfUENNMV9SWCwKLQkJLmVuZAk9IERNQUNIX1BDTTFfUlgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX3BjbTEgPSB7Ci0JLm5hbWUgPSAic2Ftc3VuZy1wY20iLAotCS5pZCA9IDEsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHM1cHYzMTBfcGNtMV9yZXNvdXJjZSksCi0JLnJlc291cmNlID0gczVwdjMxMF9wY20xX3Jlc291cmNlLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnMzY19wY21fcGRhdGEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwdjMxMF9wY20yX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1BDTTIsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1BDTTIgKyAweDEwMCAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBETUFDSF9QQ00yX1RYLAotCQkuZW5kCT0gRE1BQ0hfUENNMl9UWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IERNQUNIX1BDTTJfUlgsCi0JCS5lbmQJPSBETUFDSF9QQ00yX1JYLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9wY20yID0gewotCS5uYW1lID0gInNhbXN1bmctcGNtIiwKLQkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzNXB2MzEwX3BjbTJfcmVzb3VyY2UpLAotCS5yZXNvdXJjZSA9IHM1cHYzMTBfcGNtMl9yZXNvdXJjZSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfcGNtX3BkYXRhLAotCX0sCi19OwotCi0vKiBBQzk3IENvbnRyb2xsZXIgcGxhdGZvcm0gZGV2aWNlcyAqLwotCi1zdGF0aWMgaW50IHM1cHYzMTBfYWM5N19jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXJldHVybiBzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQVjMxMF9HUEMwKDApLCA1LCBTM0NfR1BJT19TRk4oNCkpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfYWM5N19yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9BQzk3LAotCQkuZW5kCT0gUzVQVjMxMF9QQV9BQzk3ICsgMHgxMDAgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gRE1BQ0hfQUM5N19QQ01PVVQsCi0JCS5lbmQJPSBETUFDSF9BQzk3X1BDTU9VVCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IERNQUNIX0FDOTdfUENNSU4sCi0JCS5lbmQJPSBETUFDSF9BQzk3X1BDTUlOLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gRE1BQ0hfQUM5N19NSUNJTiwKLQkJLmVuZAk9IERNQUNIX0FDOTdfTUlDSU4sCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi0JWzRdID0gewotCQkuc3RhcnQJPSBJUlFfQUM5NywKLQkJLmVuZAk9IElSUV9BQzk3LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX2FjOTdfcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczVwdjMxMF9hYzk3X2NmZ19ncGlvLAotfTsKLQotc3RhdGljIHU2NCBzNXB2MzEwX2FjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfYWM5NyA9IHsKLQkubmFtZSA9ICJzYW1zdW5nLWFjOTciLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzNXB2MzEwX2FjOTdfcmVzb3VyY2UpLAotCS5yZXNvdXJjZSA9IHM1cHYzMTBfYWM5N19yZXNvdXJjZSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfYWM5N19wZGF0YSwKLQkJLmRtYV9tYXNrID0gJnM1cHYzMTBfYWM5N19kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX0sCi19OwotCi0vKiBTL1BESUYgQ29udHJvbGxlciBwbGF0Zm9ybV9kZXZpY2UgKi8KLQotc3RhdGljIGludCBzNXB2MzEwX3NwZGlmX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JczNjX2dwaW9fY2ZncGluX3JhbmdlKFM1UFYzMTBfR1BDMSgwKSwgMiwgUzNDX0dQSU9fU0ZOKDMpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfc3BkaWZfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfU1BESUYsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NQRElGICsgMHgxMDAgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gRE1BQ0hfU1BESUYsCi0JCS5lbmQJPSBETUFDSF9TUERJRiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHNhbXN1bmdfc3BkaWZfcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczVwdjMxMF9zcGRpZl9jZmdfZ3BpbywKLX07Ci0KLXN0YXRpYyB1NjQgczVwdjMxMF9zcGRpZl9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9zcGRpZiA9IHsKLQkubmFtZSA9ICJzYW1zdW5nLXNwZGlmIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoczVwdjMxMF9zcGRpZl9yZXNvdXJjZSksCi0JLnJlc291cmNlID0gczVwdjMxMF9zcGRpZl9yZXNvdXJjZSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzYW1zdW5nX3NwZGlmX3BkYXRhLAotCQkuZG1hX21hc2sgPSAmczVwdjMxMF9zcGRpZl9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX0sCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Rldi1zeXNtbXUuYyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9kZXYtc3lzbW11LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYmIyMDAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Rldi1zeXNtbXUuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvZGV2LXN5c21tdS5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfc3lzbW11X3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1NZU01NVV9NRE1BLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9TWVNNTVVfTURNQSArIFNaXzY0SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfU1lTTU1VX01ETUEwXzAsCi0JCS5lbmQJPSBJUlFfU1lTTU1VX01ETUEwXzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1NZU01NVV9TU1MsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NZU01NVV9TU1MgKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1NZU01NVV9TU1NfMCwKLQkJLmVuZAk9IElSUV9TWVNNTVVfU1NTXzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzRdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1NZU01NVV9GSU1DMCwKLQkJLmVuZAk9IFM1UFYzMTBfUEFfU1lTTU1VX0ZJTUMwICsgU1pfNjRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbNV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TWVNNTVVfRklNQzBfMCwKLQkJLmVuZAk9IElSUV9TWVNNTVVfRklNQzBfMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbNl0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfU1lTTU1VX0ZJTUMxLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9TWVNNTVVfRklNQzEgKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVs3XSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1NZU01NVV9GSU1DMV8wLAotCQkuZW5kCT0gSVJRX1NZU01NVV9GSU1DMV8wLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVs4XSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9TWVNNTVVfRklNQzIsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NZU01NVV9GSU1DMiArIFNaXzY0SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzldID0gewotCQkuc3RhcnQJPSBJUlFfU1lTTU1VX0ZJTUMyXzAsCi0JCS5lbmQJPSBJUlFfU1lTTU1VX0ZJTUMyXzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzEwXSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9TWVNNTVVfRklNQzMsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NZU01NVV9GSU1DMyArIFNaXzY0SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzExXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1NZU01NVV9GSU1DM18wLAotCQkuZW5kCT0gSVJRX1NZU01NVV9GSU1DM18wLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsxMl0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfU1lTTU1VX0pQRUcsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NZU01NVV9KUEVHICsgU1pfNjRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMTNdID0gewotCQkuc3RhcnQJPSBJUlFfU1lTTU1VX0pQRUdfMCwKLQkJLmVuZAk9IElSUV9TWVNNTVVfSlBFR18wLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsxNF0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfU1lTTU1VX0ZJTUQwLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9TWVNNTVVfRklNRDAgKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxNV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TWVNNTVVfTENEMF9NMF8wLAotCQkuZW5kCT0gSVJRX1NZU01NVV9MQ0QwX00wXzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzE2XSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9TWVNNTVVfRklNRDEsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NZU01NVV9GSU1EMSArIFNaXzY0SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzE3XSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1NZU01NVV9MQ0QxX00xXzAsCi0JCS5lbmQJPSBJUlFfU1lTTU1VX0xDRDFfTTFfMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMThdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1NZU01NVV9QQ0llLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9TWVNNTVVfUENJZSArIFNaXzY0SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzE5XSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1NZU01NVV9QQ0lFXzAsCi0JCS5lbmQJPSBJUlFfU1lTTU1VX1BDSUVfMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMjBdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1NZU01NVV9HMkQsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NZU01NVV9HMkQgKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TWVNNTVVfMkRfMCwKLQkJLmVuZAk9IElSUV9TWVNNTVVfMkRfMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMjJdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1NZU01NVV9ST1RBVE9SLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9TWVNNTVVfUk9UQVRPUiArIFNaXzY0SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzIzXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1NZU01NVV9ST1RBVE9SXzAsCi0JCS5lbmQJPSBJUlFfU1lTTU1VX1JPVEFUT1JfMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMjRdID0gewotCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1NZU01NVV9NRE1BMiwKLQkJLmVuZAk9IFM1UFYzMTBfUEFfU1lTTU1VX01ETUEyICsgU1pfNjRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMjVdID0gewotCQkuc3RhcnQJPSBJUlFfU1lTTU1VX01ETUExXzAsCi0JCS5lbmQJPSBJUlFfU1lTTU1VX01ETUExXzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzI2XSA9IHsKLQkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9TWVNNTVVfVFYsCi0JCS5lbmQJPSBTNVBWMzEwX1BBX1NZU01NVV9UViArIFNaXzY0SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzI3XSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1NZU01NVV9UVl9NMF8wLAotCQkuZW5kCT0gSVJRX1NZU01NVV9UVl9NMF8wLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyOF0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfU1lTTU1VX01GQ19MLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9TWVNNTVVfTUZDX0wgKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyOV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TWVNNTVVfTUZDX00wXzAsCi0JCS5lbmQJPSBJUlFfU1lTTU1VX01GQ19NMF8wLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszMF0gPSB7Ci0JCS5zdGFydAk9IFM1UFYzMTBfUEFfU1lTTU1VX01GQ19SLAotCQkuZW5kCT0gUzVQVjMxMF9QQV9TWVNNTVVfTUZDX1IgKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVszMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TWVNNTVVfTUZDX00xXzAsCi0JCS5lbmQJPSBJUlFfU1lTTU1VX01GQ19NMV8wLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9zeXNtbXUgPSB7Ci0JLm5hbWUJCT0gInM1cC1zeXNtbXUiLAotCS5pZAkJPSAzMiwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwdjMxMF9zeXNtbXVfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQk9IHM1cHYzMTBfc3lzbW11X3Jlc291cmNlLAotfTsKLQotRVhQT1JUX1NZTUJPTChzNXB2MzEwX2RldmljZV9zeXNtbXUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2dwaW9saWIuYyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9ncGlvbGliLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MjE3YjguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2dwaW9saWIuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvZ3Bpb2xpYi5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQotICoKLSAqIFM1UFYzMTAgLSBHUElPbGliIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgotI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgotCi1zdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvX2NmZyA9IHsKLQkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCi0JLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCi0JLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvX2NmZ19ub2ludCA9IHsKLQkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCi0JLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCi0JLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCi19OwotCi0vKgotICogRm9sbG93aW5nIGFyZSB0aGUgZ3BpbyBiYW5rcyBpbiB2MzEwLgotICoKLSAqIFRoZSAnY29uZmlnJyBtZW1iZXIgd2hlbiBsZWZ0IHRvIE5VTEwsIGlzIGluaXRpYWxpemVkIHRvIHRoZSBkZWZhdWx0Ci0gKiBzdHJ1Y3R1cmUgZ3Bpb19jZmcgaW4gdGhlIGluaXQgZnVuY3Rpb24gYmVsb3cuCi0gKgotICogVGhlICdiYXNlJyBtZW1iZXIgaXMgYWxzbyBpbml0aWFsaXplZCBpbiB0aGUgaW5pdCBmdW5jdGlvbiBiZWxvdy4KLSAqIE5vdGU6IFRoZSBpbml0aWFsaXphdGlvbiBvZiAnYmFzZScgbWVtYmVyIG9mIHMzY19ncGlvX2NoaXAgc3RydWN0dXJlCi0gKiB1c2VzIHRoZSBhYm92ZSBtYWNybyBhbmQgZGVwZW5kcyBvbiB0aGUgYmFua3MgYmVpbmcgbGlzdGVkIGluIG9yZGVyIGhlcmUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2hpcCBzNXB2MzEwX2dwaW9fcGFydDFfNGJpdFtdID0gewotCXsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BBMCgwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19BMF9OUiwKLQkJCS5sYWJlbAk9ICJHUEEwIiwKLQkJfSwKLQl9LCB7Ci0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQQTEoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fQTFfTlIsCi0JCQkubGFiZWwJPSAiR1BBMSIsCi0JCX0sCi0JfSwgewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUEIoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fQl9OUiwKLQkJCS5sYWJlbAk9ICJHUEIiLAotCQl9LAotCX0sIHsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BDMCgwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19DMF9OUiwKLQkJCS5sYWJlbAk9ICJHUEMwIiwKLQkJfSwKLQl9LCB7Ci0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQQzEoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fQzFfTlIsCi0JCQkubGFiZWwJPSAiR1BDMSIsCi0JCX0sCi0JfSwgewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUEQwKDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX0QwX05SLAotCQkJLmxhYmVsCT0gIkdQRDAiLAotCQl9LAotCX0sIHsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BEMSgwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19EMV9OUiwKLQkJCS5sYWJlbAk9ICJHUEQxIiwKLQkJfSwKLQl9LCB7Ci0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQRTAoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fRTBfTlIsCi0JCQkubGFiZWwJPSAiR1BFMCIsCi0JCX0sCi0JfSwgewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUEUxKDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX0UxX05SLAotCQkJLmxhYmVsCT0gIkdQRTEiLAotCQl9LAotCX0sIHsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BFMigwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19FMl9OUiwKLQkJCS5sYWJlbAk9ICJHUEUyIiwKLQkJfSwKLQl9LCB7Ci0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQRTMoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fRTNfTlIsCi0JCQkubGFiZWwJPSAiR1BFMyIsCi0JCX0sCi0JfSwgewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUEU0KDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX0U0X05SLAotCQkJLmxhYmVsCT0gIkdQRTQiLAotCQl9LAotCX0sIHsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BGMCgwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19GMF9OUiwKLQkJCS5sYWJlbAk9ICJHUEYwIiwKLQkJfSwKLQl9LCB7Ci0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQRjEoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fRjFfTlIsCi0JCQkubGFiZWwJPSAiR1BGMSIsCi0JCX0sCi0JfSwgewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUEYyKDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX0YyX05SLAotCQkJLmxhYmVsCT0gIkdQRjIiLAotCQl9LAotCX0sIHsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BGMygwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19GM19OUiwKLQkJCS5sYWJlbAk9ICJHUEYzIiwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jaGlwIHM1cHYzMTBfZ3Bpb19wYXJ0Ml80Yml0W10gPSB7Ci0JewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUEowKDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX0owX05SLAotCQkJLmxhYmVsCT0gIkdQSjAiLAotCQl9LAotCX0sIHsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BKMSgwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19KMV9OUiwKLQkJCS5sYWJlbAk9ICJHUEoxIiwKLQkJfSwKLQl9LCB7Ci0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQSzAoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fSzBfTlIsCi0JCQkubGFiZWwJPSAiR1BLMCIsCi0JCX0sCi0JfSwgewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUEsxKDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX0sxX05SLAotCQkJLmxhYmVsCT0gIkdQSzEiLAotCQl9LAotCX0sIHsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BLMigwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19LMl9OUiwKLQkJCS5sYWJlbAk9ICJHUEsyIiwKLQkJfSwKLQl9LCB7Ci0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQSzMoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fSzNfTlIsCi0JCQkubGFiZWwJPSAiR1BLMyIsCi0JCX0sCi0JfSwgewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUEwwKDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX0wwX05SLAotCQkJLmxhYmVsCT0gIkdQTDAiLAotCQl9LAotCX0sIHsKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BMMSgwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19MMV9OUiwKLQkJCS5sYWJlbAk9ICJHUEwxIiwKLQkJfSwKLQl9LCB7Ci0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQTDIoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fTDJfTlIsCi0JCQkubGFiZWwJPSAiR1BMMiIsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IChTNVBfVkFfR1BJTzIgKyAweEMwMCksCi0JCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCi0JCS5pcnFfYmFzZSA9IElSUV9FSU5UKDApLAotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUFgwKDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX1gwX05SLAotCQkJLmxhYmVsCT0gIkdQWDAiLAotCQkJLnRvX2lycQk9IHNhbXN1bmdfZ3Bpb2xpYl90b19pcnEsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IChTNVBfVkFfR1BJTzIgKyAweEMyMCksCi0JCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCi0JCS5pcnFfYmFzZSA9IElSUV9FSU5UKDgpLAotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUFgxKDApLAotCQkJLm5ncGlvCT0gUzVQVjMxMF9HUElPX1gxX05SLAotCQkJLmxhYmVsCT0gIkdQWDEiLAotCQkJLnRvX2lycQk9IHNhbXN1bmdfZ3Bpb2xpYl90b19pcnEsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IChTNVBfVkFfR1BJTzIgKyAweEM0MCksCi0JCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCi0JCS5pcnFfYmFzZSA9IElSUV9FSU5UKDE2KSwKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFM1UFYzMTBfR1BYMigwKSwKLQkJCS5uZ3Bpbwk9IFM1UFYzMTBfR1BJT19YMl9OUiwKLQkJCS5sYWJlbAk9ICJHUFgyIiwKLQkJCS50b19pcnEJPSBzYW1zdW5nX2dwaW9saWJfdG9faXJxLAotCQl9LAotCX0sIHsKLQkJLmJhc2UJPSAoUzVQX1ZBX0dQSU8yICsgMHhDNjApLAotCQkuY29uZmlnCT0gJmdwaW9fY2ZnX25vaW50LAotCQkuaXJxX2Jhc2UgPSBJUlFfRUlOVCgyNCksCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTNVBWMzEwX0dQWDMoMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fWDNfTlIsCi0JCQkubGFiZWwJPSAiR1BYMyIsCi0JCQkudG9faXJxCT0gc2Ftc3VuZ19ncGlvbGliX3RvX2lycSwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jaGlwIHM1cHYzMTBfZ3Bpb19wYXJ0M180Yml0W10gPSB7Ci0JewotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzVQVjMxMF9HUFooMCksCi0JCQkubmdwaW8JPSBTNVBWMzEwX0dQSU9fWl9OUiwKLQkJCS5sYWJlbAk9ICJHUFoiLAotCQl9LAotCX0sCi19OwotCi1zdGF0aWMgX19pbml0IGludCBzNXB2MzEwX2dwaW9saWJfaW5pdCh2b2lkKQotewotCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwOwotCWludCBpOwotCWludCBucl9jaGlwczsKLQotCS8qIEdQSU8gcGFydCAxICovCi0KLQljaGlwID0gczVwdjMxMF9ncGlvX3BhcnQxXzRiaXQ7Ci0JbnJfY2hpcHMgPSBBUlJBWV9TSVpFKHM1cHYzMTBfZ3Bpb19wYXJ0MV80Yml0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9jaGlwczsgaSsrLCBjaGlwKyspIHsKLQkJaWYgKGNoaXAtPmNvbmZpZyA9PSBOVUxMKQotCQkJY2hpcC0+Y29uZmlnID0gJmdwaW9fY2ZnOwotCQlpZiAoY2hpcC0+YmFzZSA9PSBOVUxMKQotCQkJY2hpcC0+YmFzZSA9IFM1UF9WQV9HUElPMSArIChpKSAqIDB4MjA7Ci0JfQotCi0Jc2Ftc3VuZ19ncGlvbGliX2FkZF80Yml0X2NoaXBzKHM1cHYzMTBfZ3Bpb19wYXJ0MV80Yml0LCBucl9jaGlwcyk7Ci0KLQkvKiBHUElPIHBhcnQgMiAqLwotCi0JY2hpcCA9IHM1cHYzMTBfZ3Bpb19wYXJ0Ml80Yml0OwotCW5yX2NoaXBzID0gQVJSQVlfU0laRShzNXB2MzEwX2dwaW9fcGFydDJfNGJpdCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfY2hpcHM7IGkrKywgY2hpcCsrKSB7Ci0JCWlmIChjaGlwLT5jb25maWcgPT0gTlVMTCkKLQkJCWNoaXAtPmNvbmZpZyA9ICZncGlvX2NmZzsKLQkJaWYgKGNoaXAtPmJhc2UgPT0gTlVMTCkKLQkJCWNoaXAtPmJhc2UgPSBTNVBfVkFfR1BJTzIgKyAoaSkgKiAweDIwOwotCX0KLQotCXNhbXN1bmdfZ3Bpb2xpYl9hZGRfNGJpdF9jaGlwcyhzNXB2MzEwX2dwaW9fcGFydDJfNGJpdCwgbnJfY2hpcHMpOwotCi0JLyogR1BJTyBwYXJ0IDMgKi8KLQotCWNoaXAgPSBzNXB2MzEwX2dwaW9fcGFydDNfNGJpdDsKLQlucl9jaGlwcyA9IEFSUkFZX1NJWkUoczVwdjMxMF9ncGlvX3BhcnQzXzRiaXQpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2NoaXBzOyBpKyssIGNoaXArKykgewotCQlpZiAoY2hpcC0+Y29uZmlnID09IE5VTEwpCi0JCQljaGlwLT5jb25maWcgPSAmZ3Bpb19jZmc7Ci0JCWlmIChjaGlwLT5iYXNlID09IE5VTEwpCi0JCQljaGlwLT5iYXNlID0gUzVQX1ZBX0dQSU8zICsgKGkpICogMHgyMDsKLQl9Ci0KLQlzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXRfY2hpcHMoczVwdjMxMF9ncGlvX3BhcnQzXzRiaXQsIG5yX2NoaXBzKTsKLQotCXJldHVybiAwOwotfQotY29yZV9pbml0Y2FsbChzNXB2MzEwX2dwaW9saWJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGNiODBjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KLSAqCi0gKiBTNVBWMzEwIC0gR1BJTyBsaWIgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19IIF9fRklMRV9fCi0KLSNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUJX19ncGlvX2dldF92YWx1ZQotI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCi0jZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCi0jZGVmaW5lIGdwaW9fdG9faXJxCV9fZ3Bpb190b19pcnEKLQotLyogUHJhY3RpY2FsbHksIEdQSU8gYmFua3MgdXB0byBHUFogYXJlIHRoZSBjb25maWd1cmFibGUgZ3BpbyBiYW5rcyAqLwotCi0vKiBHUElPIGJhbmsgc2l6ZXMgKi8KLSNkZWZpbmUgUzVQVjMxMF9HUElPX0EwX05SCSg4KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fQTFfTlIJKDYpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19CX05SCSg4KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fQzBfTlIJKDUpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19DMV9OUgkoNSkKLSNkZWZpbmUgUzVQVjMxMF9HUElPX0QwX05SCSg0KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fRDFfTlIJKDQpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19FMF9OUgkoNSkKLSNkZWZpbmUgUzVQVjMxMF9HUElPX0UxX05SCSg4KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fRTJfTlIJKDYpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19FM19OUgkoOCkKLSNkZWZpbmUgUzVQVjMxMF9HUElPX0U0X05SCSg4KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fRjBfTlIJKDgpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19GMV9OUgkoOCkKLSNkZWZpbmUgUzVQVjMxMF9HUElPX0YyX05SCSg4KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fRjNfTlIJKDYpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19KMF9OUgkoOCkKLSNkZWZpbmUgUzVQVjMxMF9HUElPX0oxX05SCSg1KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fSzBfTlIJKDcpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19LMV9OUgkoNykKLSNkZWZpbmUgUzVQVjMxMF9HUElPX0syX05SCSg3KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fSzNfTlIJKDcpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19MMF9OUgkoOCkKLSNkZWZpbmUgUzVQVjMxMF9HUElPX0wxX05SCSgzKQotI2RlZmluZSBTNVBWMzEwX0dQSU9fTDJfTlIJKDgpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19YMF9OUgkoOCkKLSNkZWZpbmUgUzVQVjMxMF9HUElPX1gxX05SCSg4KQotI2RlZmluZSBTNVBWMzEwX0dQSU9fWDJfTlIJKDgpCi0jZGVmaW5lIFM1UFYzMTBfR1BJT19YM19OUgkoOCkKLSNkZWZpbmUgUzVQVjMxMF9HUElPX1pfTlIJKDcpCi0KLS8qIEdQSU8gYmFuayBudW1iZXJzICovCi0KLSNkZWZpbmUgUzVQVjMxMF9HUElPX05FWFQoX19ncGlvKSBcCi0JKChfX2dwaW8jI19TVEFSVCkgKyAoX19ncGlvIyNfTlIpICsgQ09ORklHX1MzQ19HUElPX1NQQUNFICsgMSkKLQotZW51bSBzNXBfZ3Bpb19udW1iZXIgewotCVM1UFYzMTBfR1BJT19BMF9TVEFSVAk9IDAsCi0JUzVQVjMxMF9HUElPX0ExX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0EwKSwKLQlTNVBWMzEwX0dQSU9fQl9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19BMSksCi0JUzVQVjMxMF9HUElPX0MwX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0IpLAotCVM1UFYzMTBfR1BJT19DMV9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19DMCksCi0JUzVQVjMxMF9HUElPX0QwX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0MxKSwKLQlTNVBWMzEwX0dQSU9fRDFfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fRDApLAotCVM1UFYzMTBfR1BJT19FMF9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19EMSksCi0JUzVQVjMxMF9HUElPX0UxX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0UwKSwKLQlTNVBWMzEwX0dQSU9fRTJfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fRTEpLAotCVM1UFYzMTBfR1BJT19FM19TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19FMiksCi0JUzVQVjMxMF9HUElPX0U0X1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0UzKSwKLQlTNVBWMzEwX0dQSU9fRjBfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fRTQpLAotCVM1UFYzMTBfR1BJT19GMV9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19GMCksCi0JUzVQVjMxMF9HUElPX0YyX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0YxKSwKLQlTNVBWMzEwX0dQSU9fRjNfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fRjIpLAotCVM1UFYzMTBfR1BJT19KMF9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19GMyksCi0JUzVQVjMxMF9HUElPX0oxX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0owKSwKLQlTNVBWMzEwX0dQSU9fSzBfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fSjEpLAotCVM1UFYzMTBfR1BJT19LMV9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19LMCksCi0JUzVQVjMxMF9HUElPX0syX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0sxKSwKLQlTNVBWMzEwX0dQSU9fSzNfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fSzIpLAotCVM1UFYzMTBfR1BJT19MMF9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19LMyksCi0JUzVQVjMxMF9HUElPX0wxX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0wwKSwKLQlTNVBWMzEwX0dQSU9fTDJfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fTDEpLAotCVM1UFYzMTBfR1BJT19YMF9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19MMiksCi0JUzVQVjMxMF9HUElPX1gxX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX1gwKSwKLQlTNVBWMzEwX0dQSU9fWDJfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fWDEpLAotCVM1UFYzMTBfR1BJT19YM19TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19YMiksCi0JUzVQVjMxMF9HUElPX1pfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fWDMpLAotfTsKLQotLyogUzVQVjMxMCBHUElPIG51bWJlciBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBTNVBWMzEwX0dQQTAoX25yKQkoUzVQVjMxMF9HUElPX0EwX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BBMShfbnIpCShTNVBWMzEwX0dQSU9fQTFfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEIoX25yKQkoUzVQVjMxMF9HUElPX0JfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEMwKF9ucikJKFM1UFYzMTBfR1BJT19DMF9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQQzEoX25yKQkoUzVQVjMxMF9HUElPX0MxX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BEMChfbnIpCShTNVBWMzEwX0dQSU9fRDBfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEQxKF9ucikJKFM1UFYzMTBfR1BJT19EMV9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQRTAoX25yKQkoUzVQVjMxMF9HUElPX0UwX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BFMShfbnIpCShTNVBWMzEwX0dQSU9fRTFfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEUyKF9ucikJKFM1UFYzMTBfR1BJT19FMl9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQRTMoX25yKQkoUzVQVjMxMF9HUElPX0UzX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BFNChfbnIpCShTNVBWMzEwX0dQSU9fRTRfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEYwKF9ucikJKFM1UFYzMTBfR1BJT19GMF9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQRjEoX25yKQkoUzVQVjMxMF9HUElPX0YxX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BGMihfbnIpCShTNVBWMzEwX0dQSU9fRjJfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEYzKF9ucikJKFM1UFYzMTBfR1BJT19GM19TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQSjAoX25yKQkoUzVQVjMxMF9HUElPX0owX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BKMShfbnIpCShTNVBWMzEwX0dQSU9fSjFfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEswKF9ucikJKFM1UFYzMTBfR1BJT19LMF9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQSzEoX25yKQkoUzVQVjMxMF9HUElPX0sxX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BLMihfbnIpCShTNVBWMzEwX0dQSU9fSzJfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEszKF9ucikJKFM1UFYzMTBfR1BJT19LM19TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQTDAoX25yKQkoUzVQVjMxMF9HUElPX0wwX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BMMShfbnIpCShTNVBWMzEwX0dQSU9fTDFfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUEwyKF9ucikJKFM1UFYzMTBfR1BJT19MMl9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQWDAoX25yKQkoUzVQVjMxMF9HUElPX1gwX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BYMShfbnIpCShTNVBWMzEwX0dQSU9fWDFfU1RBUlQgKyAoX25yKSkKLSNkZWZpbmUgUzVQVjMxMF9HUFgyKF9ucikJKFM1UFYzMTBfR1BJT19YMl9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTNVBWMzEwX0dQWDMoX25yKQkoUzVQVjMxMF9HUElPX1gzX1NUQVJUICsgKF9ucikpCi0jZGVmaW5lIFM1UFYzMTBfR1BaKF9ucikJKFM1UFYzMTBfR1BJT19aX1NUQVJUICsgKF9ucikpCi0KLS8qIHRoZSBlbmQgb2YgdGhlIFM1UFYzMTAgc3BlY2lmaWMgZ3Bpb3MgKi8KLSNkZWZpbmUgUzVQVjMxMF9HUElPX0VORAkoUzVQVjMxMF9HUFooUzVQVjMxMF9HUElPX1pfTlIpICsgMSkKLSNkZWZpbmUgUzNDX0dQSU9fRU5ECQlTNVBWMzEwX0dQSU9fRU5ECi0KLS8qIGRlZmluZSB0aGUgbnVtYmVyIG9mIGdwaW9zIHdlIG5lZWQgdG8gdGhlIG9uZSBhZnRlciB0aGUgR1BaKCkgcmFuZ2UgKi8KLSNkZWZpbmUgQVJDSF9OUl9HUElPUwkJKFM1UFYzMTBfR1BaKFM1UFYzMTBfR1BJT19aX05SKSArCVwKLQkJCQkgQ09ORklHX1NBTVNVTkdfR1BJT19FWFRSQSArIDEpCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+Ci0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMTY1N2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21hcC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwotICoKLSAqIFM1UFYzMTAgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NQVBfSAotI2RlZmluZSBfX0FTTV9BUkNIX01BUF9IIF9fRklMRV9fCi0KLSNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+Ci0KLS8qCi0gKiBTNVBWMzEwIFVBUlQgb2Zmc2V0IGlzIDB4MTAwMDAgYnV0IHRoZSBvbGRlciBTNVAgU29DcyBhcmUgMHg0MDAuCi0gKiBTbyBuZWVkIHRvIGRlZmluZSBpdCwgYW5kIGhlcmUgaXMgdG8gYXZvaWQgcmVkZWZpbml0aW9uIHdhcm5pbmcuCi0gKi8KLSNkZWZpbmUgUzNDX1VBUlRfT0ZGU0VUCQkJKDB4MTAwMDApCi0KLSNpbmNsdWRlIDxwbGF0L21hcC1zNXAuaD4KLQotI2RlZmluZSBTNVBWMzEwX1BBX1NZU1JBTQkJMHgwMjAyNTAwMAotCi0jZGVmaW5lIFM1UFYzMTBfUEFfSTJTMAkJCTB4MDM4MzAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9JMlMxCQkJMHhFMzEwMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX0kyUzIJCQkweEUyQTAwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9QQ00wCQkJMHgwMzg0MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BDTTEJCQkweDEzOTgwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfUENNMgkJCTB4MTM5OTAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX1NST01fQkFOSyh4KQkJKDB4MDQwMDAwMDAgKyAoKHgpICogMHgwMTAwMDAwMCkpCi0KLSNkZWZpbmUgUzVQQzIxMF9QQV9PTkVOQU5ECQkweDBDMDAwMDAwCi0jZGVmaW5lIFM1UEMyMTBfUEFfT05FTkFORF9ETUEJCTB4MEM2MDAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX0NISVBJRAkJMHgxMDAwMDAwMAotCi0jZGVmaW5lIFM1UFYzMTBfUEFfU1lTQ09OCQkweDEwMDEwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfUE1VCQkJMHgxMDAyMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX0NNVQkJCTB4MTAwMzAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX1dBVENIRE9HCQkweDEwMDYwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfUlRDCQkJMHgxMDA3MDAwMAotCi0jZGVmaW5lIFM1UFYzMTBfUEFfRE1DMAkJCTB4MTA0MDAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX0NPTUJJTkVSCQkweDEwNDQ4MDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9DT1JFUEVSSQkJMHgxMDUwMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX0dJQ19DUFUJCTB4MTA1MDAxMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9UV0QJCQkweDEwNTAwNjAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0RJU1QJCTB4MTA1MDEwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9MMkNDCQkJMHgxMDUwMjAwMAotCi0jZGVmaW5lIFM1UFYzMTBfUEFfTURNQQkJCTB4MTA4MTAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9QRE1BMAkJMHgxMjY4MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BETUExCQkweDEyNjkwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfTURNQQkJMHgxMEE0MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU01NVV9TU1MJCTB4MTBBNTAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfRklNQzAJCTB4MTFBMjAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfRklNQzEJCTB4MTFBMzAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfRklNQzIJCTB4MTFBNDAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfRklNQzMJCTB4MTFBNTAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfSlBFRwkJMHgxMUE2MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU01NVV9GSU1EMAkJMHgxMUUyMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU01NVV9GSU1EMQkJMHgxMjIyMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU01NVV9QQ0llCQkweDEyNjIwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX0cyRAkJMHgxMkEyMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU01NVV9ST1RBVE9SCTB4MTJBMzAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfTURNQTIJCTB4MTJBNDAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfVFYJCTB4MTJFMjAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfTUZDX0wJCTB4MTM2MjAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfTUZDX1IJCTB4MTM2MzAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8xCQkweDExNDAwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzIJCTB4MTEwMDAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMwkJMHgwMzg2MDAwMAotCi0jZGVmaW5lIFM1UFYzMTBfUEFfTUlQSV9DU0lTMAkJMHgxMTg4MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzEJCTB4MTE4OTAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX0hTTU1DKHgpCQkoMHgxMjUxMDAwMCArICgoeCkgKiAweDEwMDAwKSkKLQotI2RlZmluZSBTNVBWMzEwX1BBX1NST01DCQkweDEyNTcwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9VQVJUCQkJMHgxMzgwMDAwMAotCi0jZGVmaW5lIFM1UFYzMTBfUEFfSUlDKHgpCQkoMHgxMzg2MDAwMCArICgoeCkgKiAweDEwMDAwKSkKLQotI2RlZmluZSBTNVBWMzEwX1BBX0FDOTcJCQkweDEzOUEwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9USU1FUgkJMHgxMzlEMDAwMAotCi0jZGVmaW5lIFM1UFYzMTBfUEFfU0RSQU0JCTB4NDAwMDAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX1NQRElGCQkweEUxMTAwMDAwCi0KLS8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLwotCi0jZGVmaW5lIFMzQ19QQV9IU01NQzAJCQlTNVBWMzEwX1BBX0hTTU1DKDApCi0jZGVmaW5lIFMzQ19QQV9IU01NQzEJCQlTNVBWMzEwX1BBX0hTTU1DKDEpCi0jZGVmaW5lIFMzQ19QQV9IU01NQzIJCQlTNVBWMzEwX1BBX0hTTU1DKDIpCi0jZGVmaW5lIFMzQ19QQV9IU01NQzMJCQlTNVBWMzEwX1BBX0hTTU1DKDMpCi0jZGVmaW5lIFMzQ19QQV9JSUMJCQlTNVBWMzEwX1BBX0lJQygwKQotI2RlZmluZSBTM0NfUEFfSUlDMQkJCVM1UFYzMTBfUEFfSUlDKDEpCi0jZGVmaW5lIFMzQ19QQV9JSUMyCQkJUzVQVjMxMF9QQV9JSUMoMikKLSNkZWZpbmUgUzNDX1BBX0lJQzMJCQlTNVBWMzEwX1BBX0lJQygzKQotI2RlZmluZSBTM0NfUEFfSUlDNAkJCVM1UFYzMTBfUEFfSUlDKDQpCi0jZGVmaW5lIFMzQ19QQV9JSUM1CQkJUzVQVjMxMF9QQV9JSUMoNSkKLSNkZWZpbmUgUzNDX1BBX0lJQzYJCQlTNVBWMzEwX1BBX0lJQyg2KQotI2RlZmluZSBTM0NfUEFfSUlDNwkJCVM1UFYzMTBfUEFfSUlDKDcpCi0jZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBWMzEwX1BBX1JUQwotI2RlZmluZSBTM0NfUEFfV0RUCQkJUzVQVjMxMF9QQV9XQVRDSERPRwotCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMzEwX1BBX0NISVBJRAotI2RlZmluZSBTNVBfUEFfTUlQSV9DU0lTMAkJUzVQVjMxMF9QQV9NSVBJX0NTSVMwCi0jZGVmaW5lIFM1UF9QQV9NSVBJX0NTSVMxCQlTNVBWMzEwX1BBX01JUElfQ1NJUzEKLSNkZWZpbmUgUzVQX1BBX09ORU5BTkQJCQlTNVBDMjEwX1BBX09ORU5BTkQKLSNkZWZpbmUgUzVQX1BBX09ORU5BTkRfRE1BCQlTNVBDMjEwX1BBX09ORU5BTkRfRE1BCi0jZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UFYzMTBfUEFfU0RSQU0KLSNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQVjMxMF9QQV9TUk9NQwotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjMxMF9QQV9TWVNDT04KLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQVjMxMF9QQV9USU1FUgotCi0vKiBVQVJUICovCi0KLSNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMzEwX1BBX1VBUlQKLQotI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJCShTM0NfUEFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQotI2RlZmluZSBTNVBfUEFfVUFSVDAJCQlTNVBfUEFfVUFSVCgwKQotI2RlZmluZSBTNVBfUEFfVUFSVDEJCQlTNVBfUEFfVUFSVCgxKQotI2RlZmluZSBTNVBfUEFfVUFSVDIJCQlTNVBfUEFfVUFSVCgyKQotI2RlZmluZSBTNVBfUEFfVUFSVDMJCQlTNVBfUEFfVUFSVCgzKQotI2RlZmluZSBTNVBfUEFfVUFSVDQJCQlTNVBfUEFfVUFSVCg0KQotCi0jZGVmaW5lIFM1UF9TWl9VQVJUCQkJU1pfMjU2Ci0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlOWUwYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaAotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KLSAqCi0gKiBTNVBWMzEwIC0gR1BJTyAoaW5jbHVkaW5nIEVJTlQpIHJlZ2lzdGVyIGRlZmluaXRpb25zCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0dQSU9fSAotI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfR1BJT19IIF9fRklMRV9fCi0KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotCi0jZGVmaW5lIFM1UFYzMTBfRUlOVDQwQ09OCQkoUzVQX1ZBX0dQSU8yICsgMHhFMDApCi0jZGVmaW5lIFM1UF9FSU5UX0NPTih4KQkJCShTNVBWMzEwX0VJTlQ0MENPTiArICgoeCkgKiAweDQpKQotCi0jZGVmaW5lIFM1UFYzMTBfRUlOVDQwRkxUQ09OMAkJKFM1UF9WQV9HUElPMiArIDB4RTgwKQotI2RlZmluZSBTNVBfRUlOVF9GTFRDT04oeCkJCShTNVBWMzEwX0VJTlQ0MEZMVENPTjAgKyAoKHgpICogMHg0KSkKLQotI2RlZmluZSBTNVBWMzEwX0VJTlQ0ME1BU0sJCShTNVBfVkFfR1BJTzIgKyAweEYwMCkKLSNkZWZpbmUgUzVQX0VJTlRfTUFTSyh4KQkJKFM1UFYzMTBfRUlOVDQwTUFTSyArICgoeCkgKiAweDQpKQotCi0jZGVmaW5lIFM1UFYzMTBfRUlOVDQwUEVORAkJKFM1UF9WQV9HUElPMiArIDB4RjQwKQotI2RlZmluZSBTNVBfRUlOVF9QRU5EKHgpCQkoUzVQVjMxMF9FSU5UNDBQRU5EICsgKCh4KSAqIDB4NCkpCi0KLSNkZWZpbmUgRUlOVF9SRUdfTlIoeCkJCQkoRUlOVF9PRkZTRVQoeCkgPj4gMykKLQotI2RlZmluZSBlaW50X2lycV90b19iaXQoaXJxKQkJKDEgPDwgKEVJTlRfT0ZGU0VUKGlycSkgJiAweDcpKQotCi0jZGVmaW5lIEVJTlRfTU9ERQkJCVMzQ19HUElPX1NGTigweGYpCi0KLSNkZWZpbmUgRUlOVF9HUElPXzAoeCkJCQlTNVBWMzEwX0dQWDAoeCkKLSNkZWZpbmUgRUlOVF9HUElPXzEoeCkJCQlTNVBWMzEwX0dQWDEoeCkKLSNkZWZpbmUgRUlOVF9HUElPXzIoeCkJCQlTNVBWMzEwX0dQWDIoeCkKLSNkZWZpbmUgRUlOVF9HUElPXzMoeCkJCQlTNVBWMzEwX0dQWDMoeCkKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1wbXUuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1wbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIzMzNkMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtcG11LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtcG11LmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCi0gKgotICogUzVQVjMxMCAtIFBvd2VyIG1hbmFnZW1lbnQgdW5pdCBkZWZpbml0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1BNVV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19QTVVfSCBfX0ZJTEVfXwotCi0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2RlZmluZSBTNVBfUE1VUkVHKHgpCQkJKFM1UF9WQV9QTVUgKyAoeCkpCi0KLSNkZWZpbmUgUzVQX1BNVV9DQU1fQ09ORgkJUzVQX1BNVVJFRygweDNDMDApCi0jZGVmaW5lIFM1UF9QTVVfVFZfQ09ORgkJUzVQX1BNVVJFRygweDNDMjApCi0jZGVmaW5lIFM1UF9QTVVfTUZDX0NPTkYJCVM1UF9QTVVSRUcoMHgzQzQwKQotI2RlZmluZSBTNVBfUE1VX0czRF9DT05GCQlTNVBfUE1VUkVHKDB4M0M2MCkKLSNkZWZpbmUgUzVQX1BNVV9MQ0QwX0NPTkYJCVM1UF9QTVVSRUcoMHgzQzgwKQotI2RlZmluZSBTNVBfUE1VX0xDRDFfQ09ORgkJUzVQX1BNVVJFRygweDNDQTApCi0jZGVmaW5lIFM1UF9QTVVfR1BTX0NPTkYJCVM1UF9QTVVSRUcoMHgzQ0UwKQotCi0jZGVmaW5lIFM1UF9JTlRfTE9DQUxfUFdSX0VOCQkweDcKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19QTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc3lzbW11LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5OGZjNWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KLSAqCi0gKiBTYW1zdW5nIHN5c21tdSBkcml2ZXIgZm9yIFM1UFYzMTAKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9TWVNNTVVfSAotI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9TWVNNTVVfSCBfX0ZJTEVfXwotCi0jZGVmaW5lIFM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCTE2Ci0jZGVmaW5lIFM1UF9TWVNNTVVfVE9UQUxfSVBOVU0JCVM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCi0KLWVudW0gczVwdjMxMF9zeXNtbXVfaXBzIHsKLQlTWVNNTVVfTURNQSwKLQlTWVNNTVVfU1NTLAotCVNZU01NVV9GSU1DMCwKLQlTWVNNTVVfRklNQzEsCi0JU1lTTU1VX0ZJTUMyLAotCVNZU01NVV9GSU1DMywKLQlTWVNNTVVfSlBFRywKLQlTWVNNTVVfRklNRDAsCi0JU1lTTU1VX0ZJTUQxLAotCVNZU01NVV9QQ0llLAotCVNZU01NVV9HMkQsCi0JU1lTTU1VX1JPVEFUT1IsCi0JU1lTTU1VX01ETUEyLAotCVNZU01NVV9UViwKLQlTWVNNTVVfTUZDX0wsCi0JU1lTTU1VX01GQ19SLAotfTsKLQotc3RhdGljIGNoYXIgKnN5c21tdV9pcHNfbmFtZVtTNVBWMzEwX1NZU01NVV9UT1RBTF9JUE5VTV0gPSB7Ci0JIlNZU01NVV9NRE1BIgksCi0JIlNZU01NVV9TU1MiCSwKLQkiU1lTTU1VX0ZJTUMwIgksCi0JIlNZU01NVV9GSU1DMSIJLAotCSJTWVNNTVVfRklNQzIiCSwKLQkiU1lTTU1VX0ZJTUMzIgksCi0JIlNZU01NVV9KUEVHIgksCi0JIlNZU01NVV9GSU1EMCIJLAotCSJTWVNNTVVfRklNRDEiCSwKLQkiU1lTTU1VX1BDSWUiCSwKLQkiU1lTTU1VX0cyRCIJLAotCSJTWVNNTVVfUk9UQVRPUiIsCi0JIlNZU01NVV9NRE1BMiIJLAotCSJTWVNNTVVfVFYiCSwKLQkiU1lTTU1VX01GQ19MIgksCi0JIlNZU01NVV9NRkNfUiIJLAotfTsKLQotdHlwZWRlZiBlbnVtIHM1cHYzMTBfc3lzbW11X2lwcyBzeXNtbXVfaXBzOwotCi1zdHJ1Y3Qgc3lzbW11X3R0X2luZm8gewotCXVuc2lnbmVkIGxvbmcgKnBnZDsKLQl1bnNpZ25lZCBsb25nIHBnZF9wYWRkcjsKLQl1bnNpZ25lZCBsb25nICpwdGU7Ci19OwotCi1zdHJ1Y3Qgc3lzbW11X2NvbnRyb2xsZXIgewotCWNvbnN0IGNoYXIJCSpuYW1lOwotCi0JLyogY2hhbm5lbHMgcmVnaXN0ZXJzICovCi0Jdm9pZCBfX2lvbWVtCQkqcmVnczsKLQotCS8qIGNoYW5uZWwgaXJxICovCi0JdW5zaWduZWQgaW50CQlpcnE7Ci0KLQlzeXNtbXVfaXBzCQlpcHM7Ci0KLQkvKiBUcmFuc2xhdGlvbiBUYWJsZSBJbmZvLiAqLwotCXN0cnVjdCBzeXNtbXVfdHRfaW5mbwkqdHRfaW5mbzsKLQotCXN0cnVjdCByZXNvdXJjZQkJKm1lbTsKLQlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwotCi0JLyogU3lzTU1VIGNvbnRyb2xsZXIgZW5hYmxlIC0gdHJ1ZSA6IGVuYWJsZSAqLwotCWJvb2wJCQllbmFibGU7Ci19OwotCi0vKioKLSAqIHM1cF9zeXNtbXVfZW5hYmxlKCkgLSBlbmFibGUgc3lzdGVtIG1tdSBvZiBpcAotICogQGlwczogVGhlIGlwIGNvbm5lY3RlZCBzeXN0ZW0gbW11LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlIHN5c3RlbSBtbXUgdG8gdHJhbnNmZXIgYWRkcmVzcwotICogZnJvbSB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRkcmVzcwotICovCi1pbnQgczVwX3N5c21tdV9lbmFibGUoc3lzbW11X2lwcyBpcHMpOwotCi0vKioKLSAqIHM1cF9zeXNtbXVfZGlzYWJsZSgpIC0gZGlzYWJsZSBzeXNtbXUgbW11IG9mIGlwCi0gKiBAaXBzOiBUaGUgaXAgY29ubmVjdGVkIHN5c3RlbSBtbXUuCi0gKgotICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHN5c3RlbSBtbXUgdG8gdHJhbnNmZXIgYWRkcmVzcwotICogZnJvbSB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRkcmVzcwotICovCi1pbnQgczVwX3N5c21tdV9kaXNhYmxlKHN5c21tdV9pcHMgaXBzKTsKLQotLyoqCi0gKiBzNXBfc3lzbW11X3NldF90YWJsZWJhc2VfcGdkKCkgLSBzZXQgcGFnZSB0YWJsZSBiYXNlIGFkZHJlc3MgdG8gcmVmZXIgcGFnZSB0YWJsZQotICogQGlwczogVGhlIGlwIGNvbm5lY3RlZCBzeXN0ZW0gbW11LgotICogQHBnZDogVGhlIHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzCi0gKiBXaGVuIHN5c3RlbSBtbXUgdHJhbnNmZXIgYWRkcmVzcyBmcm9tIHZpcnRhdWwgYWRkcmVzcyB0byBwaHlzaWNhbCBhZGRyZXNzLAotICogc3lzdGVtIG1tdSByZWZlciBhZGRyZXNzIGluZm9ybWF0aW9uIGZyb20gcGFnZSB0YWJsZQotICovCi1pbnQgczVwX3N5c21tdV9zZXRfdGFibGViYXNlX3BnZChzeXNtbXVfaXBzIGlwcywgdW5zaWduZWQgbG9uZyBwZ2QpOwotCi0vKioKLSAqIHM1cF9zeXNtbXVfdGxiX2ludmFsaWRhdGUoKSAtIGZsdXNoIGFsbCBUTEIgZW50cnkgaW4gc3lzdGVtIG1tdQotICogQGlwczogVGhlIGlwIGNvbm5lY3RlZCBzeXN0ZW0gbW11LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZmx1c2ggYWxsIFRMQiBlbnRyeSBpbiBzeXN0ZW0gbW11Ci0gKi8KLWludCBzNXBfc3lzbW11X3RsYl9pbnZhbGlkYXRlKHN5c21tdV9pcHMgaXBzKTsKLSNlbmRpZiAvKiBfX0FTTV9BUk1fQVJDSF9TWVNNTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL21hY2gtdW5pdmVyc2FsX2MyMTAuYyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9tYWNoLXVuaXZlcnNhbF9jMjEwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YmMzY2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL21hY2gtdW5pdmVyc2FsX2MyMTAuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbWFjaC11bml2ZXJzYWxfYzIxMC5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPHBsYXQvczVwdjMxMC5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+Ci0jaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgotCi0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotLyogRm9sbG93aW5nIGFyZSBkZWZhdWx0IHZhbHVlcyBmb3IgVUNPTiwgVUxDT04gYW5kIFVGQ09OIFVBUlQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFVOSVZFUlNBTF9VQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUNPTl9UWElMRVZFTCB8CVwKLQkJCQkgUzNDMjQxMF9VQ09OX1JYSUxFVkVMIHwJXAotCQkJCSBTM0MyNDEwX1VDT05fVFhJUlFNT0RFIHwJXAotCQkJCSBTM0MyNDEwX1VDT05fUlhJUlFNT0RFIHwJXAotCQkJCSBTM0MyNDEwX1VDT05fUlhGSUZPX1RPSSB8CVwKLQkJCQkgUzNDMjQ0M19VQ09OX1JYRVJSX0lSUUVOKQotCi0jZGVmaW5lIFVOSVZFUlNBTF9VTENPTl9ERUZBVUxUCVMzQzI0MTBfTENPTl9DUzgKLQotI2RlZmluZSBVTklWRVJTQUxfVUZDT05fREVGQVVMVAkoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8CVwKLQkJCQkgUzVQVjIxMF9VRkNPTl9UWFRSSUcyNTYgfAlcCi0JCQkJIFM1UFYyMTBfVUZDT05fUlhUUklHMjU2KQotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyB1bml2ZXJzYWxfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewotCVswXSA9IHsKLQkJLmh3cG9ydAkJPSAwLAotCQkudWNvbgkJPSBVTklWRVJTQUxfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gVU5JVkVSU0FMX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBVTklWRVJTQUxfVUZDT05fREVGQVVMVCwKLQl9LAotCVsxXSA9IHsKLQkJLmh3cG9ydAkJPSAxLAotCQkudWNvbgkJPSBVTklWRVJTQUxfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gVU5JVkVSU0FMX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBVTklWRVJTQUxfVUZDT05fREVGQVVMVCwKLQl9LAotCVsyXSA9IHsKLQkJLmh3cG9ydAkJPSAyLAotCQkudWNvbgkJPSBVTklWRVJTQUxfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gVU5JVkVSU0FMX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBVTklWRVJTQUxfVUZDT05fREVGQVVMVCwKLQl9LAotCVszXSA9IHsKLQkJLmh3cG9ydAkJPSAzLAotCQkudWNvbgkJPSBVTklWRVJTQUxfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gVU5JVkVSU0FMX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBVTklWRVJTQUxfVUZDT05fREVGQVVMVCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHVuaXZlcnNhbF9ncGlvX2tleXNfdGFibGVzW10gPSB7Ci0JewotCQkuY29kZQkJCT0gS0VZX1ZPTFVNRVVQLAotCQkuZ3BpbwkJCT0gUzVQVjMxMF9HUFgyKDApLAkvKiBYRUlOVDE2ICovCi0JCS5kZXNjCQkJPSAiZ3Bpby1rZXlzOiBLRVlfVk9MVU1FVVAiLAotCQkudHlwZQkJCT0gRVZfS0VZLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSAxLAotCX0sIHsKLQkJLmNvZGUJCQk9IEtFWV9WT0xVTUVET1dOLAotCQkuZ3BpbwkJCT0gUzVQVjMxMF9HUFgyKDEpLAkvKiBYRUlOVDE3ICovCi0JCS5kZXNjCQkJPSAiZ3Bpby1rZXlzOiBLRVlfVk9MVU1FRE9XTiIsCi0JCS50eXBlCQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDEsCi0JfSwgewotCQkuY29kZQkJCT0gS0VZX0NPTkZJRywKLQkJLmdwaW8JCQk9IFM1UFYzMTBfR1BYMigyKSwJLyogWEVJTlQxOCAqLwotCQkuZGVzYwkJCT0gImdwaW8ta2V5czogS0VZX0NPTkZJRyIsCi0JCS50eXBlCQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDEsCi0JfSwgewotCQkuY29kZQkJCT0gS0VZX0NBTUVSQSwKLQkJLmdwaW8JCQk9IFM1UFYzMTBfR1BYMigzKSwJLyogWEVJTlQxOSAqLwotCQkuZGVzYwkJCT0gImdwaW8ta2V5czogS0VZX0NBTUVSQSIsCi0JCS50eXBlCQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDEsCi0JfSwgewotCQkuY29kZQkJCT0gS0VZX09LLAotCQkuZ3BpbwkJCT0gUzVQVjMxMF9HUFgzKDUpLAkvKiBYRUlOVDI5ICovCi0JCS5kZXNjCQkJPSAiZ3Bpby1rZXlzOiBLRVlfT0siLAotCQkudHlwZQkJCT0gRVZfS0VZLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHVuaXZlcnNhbF9ncGlvX2tleXNfZGF0YSA9IHsKLQkuYnV0dG9ucwk9IHVuaXZlcnNhbF9ncGlvX2tleXNfdGFibGVzLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUodW5pdmVyc2FsX2dwaW9fa2V5c190YWJsZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdW5pdmVyc2FsX2dwaW9fa2V5cyA9IHsKLQkubmFtZQkJCT0gImdwaW8ta2V5cyIsCi0JLmRldgkJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ1bml2ZXJzYWxfZ3Bpb19rZXlzX2RhdGEsCi0JfSwKLX07Ci0KLS8qIGVNTUMgKi8KLXN0YXRpYyBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHVuaXZlcnNhbF9oc21tYzBfZGF0YSBfX2luaXRkYXRhID0gewotCS5tYXhfd2lkdGgJCT0gOCwKLQkuaG9zdF9jYXBzCQk9IChNTUNfQ0FQXzhfQklUX0RBVEEgfCBNTUNfQ0FQXzRfQklUX0RBVEEgfAotCQkJCU1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEIHwKLQkJCQlNTUNfQ0FQX0RJU0FCTEUpLAotCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9QRVJNQU5FTlQsCi0JLmNsa190eXBlCQk9IFMzQ19TREhDSV9DTEtfRElWX0VYVEVSTkFMLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG1tYzBfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgInMzYy1zZGhjaS4wIiksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbW1jMF9maXhlZF92b2x0YWdlX2luaXRfZGF0YSA9IHsKLQkuY29uc3RyYWludHMJCT0gewotCQkubmFtZQkJPSAiVk1FTV9WRERfMi44ViIsCi0JCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUobW1jMF9zdXBwbGllcyksCi0JLmNvbnN1bWVyX3N1cHBsaWVzCT0gbW1jMF9zdXBwbGllcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgbW1jMF9maXhlZF92b2x0YWdlX2NvbmZpZyA9IHsKLQkuc3VwcGx5X25hbWUJCT0gIk1BU1NNRU1PUllfRU4iLAotCS5taWNyb3ZvbHRzCQk9IDI4MDAwMDAsCi0JLmdwaW8JCQk9IFM1UFYzMTBfR1BFMSgzKSwKLQkuZW5hYmxlX2hpZ2gJCT0gdHJ1ZSwKLQkuaW5pdF9kYXRhCQk9ICZtbWMwX2ZpeGVkX3ZvbHRhZ2VfaW5pdF9kYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbW1jMF9maXhlZF92b2x0YWdlID0gewotCS5uYW1lCQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAotCS5pZAkJCT0gMCwKLQkuZGV2CQkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzBfZml4ZWRfdm9sdGFnZV9jb25maWcsCi0JfSwKLX07Ci0KLS8qIFNEICovCi1zdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSB1bml2ZXJzYWxfaHNtbWMyX2RhdGEgX19pbml0ZGF0YSA9IHsKLQkubWF4X3dpZHRoCQk9IDQsCi0JLmhvc3RfY2FwcwkJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfAotCQkJCU1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEIHwKLQkJCQlNTUNfQ0FQX0RJU0FCTEUsCi0JLmV4dF9jZF9ncGlvCQk9IFM1UFYzMTBfR1BYMyg0KSwgICAgICAvKiBYRUlOVF8yOCAqLwotCS5leHRfY2RfZ3Bpb19pbnZlcnQJPSAxLAotCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9HUElPLAotCS5jbGtfdHlwZQkJPSBTM0NfU0RIQ0lfQ0xLX0RJVl9FWFRFUk5BTCwKLX07Ci0KLS8qIFdpRmkgKi8KLXN0YXRpYyBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHVuaXZlcnNhbF9oc21tYzNfZGF0YSBfX2luaXRkYXRhID0gewotCS5tYXhfd2lkdGgJCT0gNCwKLQkuaG9zdF9jYXBzCQk9IE1NQ19DQVBfNF9CSVRfREFUQSB8Ci0JCQkJTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQgfAotCQkJCU1NQ19DQVBfRElTQUJMRSwKLQkuY2RfdHlwZQkJPSBTM0NfU0RIQ0lfQ0RfRVhURVJOQUwsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdW5pdmVyc2FsX3NkaGNpX2luaXQodm9pZCkKLXsKLQlzM2Nfc2RoY2kwX3NldF9wbGF0ZGF0YSgmdW5pdmVyc2FsX2hzbW1jMF9kYXRhKTsKLQlzM2Nfc2RoY2kyX3NldF9wbGF0ZGF0YSgmdW5pdmVyc2FsX2hzbW1jMl9kYXRhKTsKLQlzM2Nfc2RoY2kzX3NldF9wbGF0ZGF0YSgmdW5pdmVyc2FsX2hzbW1jM19kYXRhKTsKLX0KLQotLyogSTJDMCAqLwotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmMwX2RldnNbXSBfX2luaXRkYXRhID0gewotCS8qIENhbWVyYSwgVG8gYmUgdXBkYXRlZCAqLwotfTsKLQotLyogSTJDMSAqLwotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmMxX2RldnNbXSBfX2luaXRkYXRhID0gewotCS8qIEd5cm8sIFRvIGJlIHVwZGF0ZWQgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1bml2ZXJzYWxfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogU2Ftc3VuZyBQbGF0Zm9ybSBEZXZpY2VzICovCi0JJm1tYzBfZml4ZWRfdm9sdGFnZSwKLQkmczNjX2RldmljZV9oc21tYzAsCi0JJnMzY19kZXZpY2VfaHNtbWMyLAotCSZzM2NfZGV2aWNlX2hzbW1jMywKLQotCS8qIFVuaXZlcnNhbCBEZXZpY2VzICovCi0JJnVuaXZlcnNhbF9ncGlvX2tleXMsCi0JJnM1cF9kZXZpY2Vfb25lbmFuZCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB1bml2ZXJzYWxfbWFwX2lvKHZvaWQpCi17Ci0JczVwX2luaXRfaW8oTlVMTCwgMCwgUzVQX1ZBX0NISVBJRCk7Ci0JczNjMjR4eF9pbml0X2Nsb2NrcygyNDAwMDAwMCk7Ci0JczNjMjR4eF9pbml0X3VhcnRzKHVuaXZlcnNhbF91YXJ0Y2ZncywgQVJSQVlfU0laRSh1bml2ZXJzYWxfdWFydGNmZ3MpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHVuaXZlcnNhbF9tYWNoaW5lX2luaXQodm9pZCkKLXsKLQl1bml2ZXJzYWxfc2RoY2lfaW5pdCgpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjMF9kZXZzLCBBUlJBWV9TSVpFKGkyYzBfZGV2cykpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyYzFfZGV2cywgQVJSQVlfU0laRShpMmMxX2RldnMpKTsKLQotCS8qIExhc3QgKi8KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyh1bml2ZXJzYWxfZGV2aWNlcywgQVJSQVlfU0laRSh1bml2ZXJzYWxfZGV2aWNlcykpOwotfQotCi1NQUNISU5FX1NUQVJUKFVOSVZFUlNBTF9DMjEwLCAiVU5JVkVSU0FMX0MyMTAiKQotCS8qIE1haW50YWluZXI6IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+ICovCi0JLmJvb3RfcGFyYW1zCT0gUzVQX1BBX1NEUkFNICsgMHgxMDAsCi0JLmluaXRfaXJxCT0gczVwdjMxMF9pbml0X2lycSwKLQkubWFwX2lvCQk9IHVuaXZlcnNhbF9tYXBfaW8sCi0JLmluaXRfbWFjaGluZQk9IHVuaXZlcnNhbF9tYWNoaW5lX2luaXQsCi0JLnRpbWVyCQk9ICZzNXB2MzEwX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCmluZGV4IDQzMDNhODYuLjNlNmYwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYwpAQCAtMTE5LDEzICsxMTksNiBAQAogfTsKIAogLyogRlNJIEEgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8gZnNpX2luZm8gPSB7Ci0JLnBvcnRhX2ZsYWdzID0gU0hfRlNJX09VVF9TTEFWRV9NT0RFCXwKLQkJICAgICAgIFNIX0ZTSV9JTl9TTEFWRV9NT0RFCXwKLQkJICAgICAgIFNIX0ZTSV9PRk1UKEkyUykJCXwKLQkJICAgICAgIFNIX0ZTSV9JRk1UKEkyUyksCi19OwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGZzaV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5uYW1lCT0gIkZTSSIsCkBAIC0xNDQsOSArMTM3LDYgQEAKIAkuaWQJCT0gLTEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGZzaV9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IGZzaV9yZXNvdXJjZXMsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZnNpX2luZm8sCi0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfbW1jaWZfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYwppbmRleCA4MWQ2NTM2Li4xYTgxMThjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCkBAIC02NzMsMTYgKzY3MywxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNoX2ZzaV9wbGF0Zm9ybV9pbmZvIGZzaV9pbmZvID0gewotCS5wb3J0YV9mbGFncyA9IFNIX0ZTSV9CUlNfSU5WIHwKLQkJICAgICAgIFNIX0ZTSV9PVVRfU0xBVkVfTU9ERSB8Ci0JCSAgICAgICBTSF9GU0lfSU5fU0xBVkVfTU9ERSB8Ci0JCSAgICAgICBTSF9GU0lfT0ZNVChQQ00pIHwKLQkJICAgICAgIFNIX0ZTSV9JRk1UKFBDTSksCisJLnBvcnRhX2ZsYWdzID0gU0hfRlNJX0JSU19JTlYsCiAKIAkucG9ydGJfZmxhZ3MgPSBTSF9GU0lfQlJTX0lOViB8CiAJCSAgICAgICBTSF9GU0lfQlJNX0lOViB8CiAJCSAgICAgICBTSF9GU0lfTFJTX0lOViB8Ci0JCSAgICAgICBTSF9GU0lfT0ZNVChTUERJRiksCisJCSAgICAgICBTSF9GU0lfRk1UX1NQRElGLAogCS5zZXRfcmF0ZSA9IGZzaV9zZXRfcmF0ZSwKIH07CiAKQEAgLTc4Myw2ICs3NzksMTAgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZnNpX2hkbWlfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9mc2kyX2JfaGRtaSIsCit9OworCiBzdGF0aWMgbG9uZyBhcDRldmJfY2xrX29wdGltaXplKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nICpiZXN0X2ZyZXEsCiAJCQkJdW5zaWduZWQgbG9uZyAqcGFyZW50X2ZyZXEpCiB7CkBAIC05MzYsNiArOTM2LDcgQEAKIAkmdXNiMV9ob3N0X2RldmljZSwKIAkmZnNpX2RldmljZSwKIAkmZnNpX2FrNDY0M19kZXZpY2UsCisJJmZzaV9oZG1pX2RldmljZSwKIAkmc2hfbW1jaWZfZGV2aWNlLAogCSZsY2RjMV9kZXZpY2UsCiAJJmxjZGNfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCmluZGV4IDE2NTdlYWMuLjFhNjNjMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKQEAgLTM5OSw2ICszOTksMTAgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZnNpX2hkbWlfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9mc2kyX2JfaGRtaSIsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBoZG1pX2luaXRfcG1fY2xvY2sodm9pZCkKIHsKIAlzdHJ1Y3QgY2xrICpoZG1pX2ljayA9IGNsa19nZXQoJmhkbWlfZGV2aWNlLmRldiwgImljayIpOwpAQCAtNjA5LDE2ICs2MTMsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyBmc2lfaW5mbyA9IHsKLQkucG9ydGFfZmxhZ3MgPQlTSF9GU0lfQlJTX0lOVgkJfAotCQkJU0hfRlNJX09VVF9TTEFWRV9NT0RFCXwKLQkJCVNIX0ZTSV9JTl9TTEFWRV9NT0RFCXwKLQkJCVNIX0ZTSV9PRk1UKFBDTSkJfAotCQkJU0hfRlNJX0lGTVQoUENNKSwKKwkucG9ydGFfZmxhZ3MgPQlTSF9GU0lfQlJTX0lOViwKIAogCS5wb3J0Yl9mbGFncyA9CVNIX0ZTSV9CUlNfSU5WCXwKIAkJCVNIX0ZTSV9CUk1fSU5WCXwKIAkJCVNIX0ZTSV9MUlNfSU5WCXwKLQkJCVNIX0ZTSV9PRk1UKFNQRElGKSwKKwkJCVNIX0ZTSV9GTVRfU1BESUYsCiAKIAkuc2V0X3JhdGUgPSBmc2lfc2V0X3JhdGUsCiB9OwpAQCAtOTIxLDYgKzkyMSw3IEBACiAJJmxlZHNfZGV2aWNlLAogCSZmc2lfZGV2aWNlLAogCSZmc2lfYWs0NjQzX2RldmljZSwKKwkmZnNpX2hkbWlfZGV2aWNlLAogCSZzZGhpMF9kZXZpY2UsCiAjaWYgIWRlZmluZWQoQ09ORklHX01NQ19TSF9NTUNJRikKIAkmc2RoaTFfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10Y2M4ay9ib2FyZC10Y2M4MDAwLXNkay5jIGIvYXJjaC9hcm0vbWFjaC10Y2M4ay9ib2FyZC10Y2M4MDAwLXNkay5jCmluZGV4IGZiNjQyNmQuLjRjYjNjMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGNjOGsvYm9hcmQtdGNjODAwMC1zZGsuYworKysgYi9hcmNoL2FybS9tYWNoLXRjYzhrL2JvYXJkLXRjYzgwMDAtc2RrLmMKQEAgLTYsNiArNiw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0xNyw2ICsxOCw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvdGNjLW5hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL3RjYzhrLXJlZ3MuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCkBAIC01MSw2ICs1NCwyMiBAQAogc3RhdGljIHZvaWQgX19pbml0IHRjYzhrX21hcF9pbyh2b2lkKQogewogCXRjYzhrX21hcF9jb21tb25faW8oKTsKKworCS8qIHNldCBQTEwwIGNsb2NrIHRvIDk2TUh6LCBhZGFwdCBVQVJUMCBkaXZpc29yICovCisJX19yYXdfd3JpdGVsKDB4MDAwMjYwMDMsIENLQ19CQVNFICsgUExMMENGR19PRkZTKTsKKwlfX3Jhd193cml0ZWwoMHgxMDAwMDAwMSwgQ0tDX0JBU0UgKyBBQ0xLVUFSVDBfT0ZGUyk7CisKKwkvKiBzZXQgUExMMSBjbG9jayB0byAxOTJNSHogKi8KKwlfX3Jhd193cml0ZWwoMHgwMDAxNjAwMywgQ0tDX0JBU0UgKyBQTEwxQ0ZHX09GRlMpOworCisJLyogc2V0IFBMTDIgY2xvY2sgdG8gNDhNSHogKi8KKwlfX3Jhd193cml0ZWwoMHgwMDAzNjAwMywgQ0tDX0JBU0UgKyBQTEwyQ0ZHX09GRlMpOworCisJLyogd2l0aCBDUFUgZnJlcSBoaWdoZXIgdGhhbiAxNTAgTUh6LCBuZWVkIGV4dHJhIERUQ00gd2FpdCAqLworCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAxLCBTQ0ZHX0JBU0UgKyBEVENNV0FJVF9PRkZTKTsKKworCS8qIFBMTCBsb2NraW5nIHRpbWUgYXMgc3BlY2lmaWVkICovCisJdWRlbGF5KDMwMCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoVENDODAwMF9TREssICJUZWxlY2hpcHMgVENDODAwMC1TREsgRGVtbyBCb2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRjYzhrL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXRjYzhrL2Nsb2NrLmMKaW5kZXggMzk3MGE5Yy4uZTdjZGFlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10Y2M4ay9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGNjOGsvY2xvY2suYwpAQCAtNDUsMTEgKzQ1LDEyIEBACiAjZGVmaW5lIEFDTEtHU0IxCShDS0NfQkFTRSArIEFDTEtHU0IxX09GRlMpCiAjZGVmaW5lIEFDTEtHU0IyCShDS0NfQkFTRSArIEFDTEtHU0IyX09GRlMpCiAjZGVmaW5lIEFDTEtHU0IzCShDS0NfQkFTRSArIEFDTEtHU0IzX09GRlMpCi0jZGVmaW5lIEFDTEtVU0JICShDS0NfQkFTRSArIEFDTEtVU0JIX09GRlMpCiAjZGVmaW5lIEFDTEtUQ1QJCShDS0NfQkFTRSArIEFDTEtUQ1RfT0ZGUykKICNkZWZpbmUgQUNMS1RDWAkJKENLQ19CQVNFICsgQUNMS1RDWF9PRkZTKQogI2RlZmluZSBBQ0xLVENaCQkoQ0tDX0JBU0UgKyBBQ0xLVENaX09GRlMpCiAKKyNkZWZpbmUgQUNMS19NQVhfRElWCSgweGZmZiArIDEpCisKIC8qIENyeXN0YWwgZnJlcXVlbmNpZXMgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHhpX3JhdGUsIHh0aV9yYXRlOwogCkBAIC0xMDYsOSArMTA3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByb290X2Nsa19kaXNhYmxlKGVudW0gcm9vdF9jbGtzIHJvb3Rfc3JjKQorc3RhdGljIGludCByb290X2Nsa19kaXNhYmxlKGVudW0gcm9vdF9jbGtzIHNyYykKIHsKLQlzd2l0Y2ggKHJvb3Rfc3JjKSB7CisJc3dpdGNoIChzcmMpIHsKIAljYXNlIENMS19TUkNfUExMMDogcmV0dXJuIHBsbF9lbmFibGUoMCwgMCk7CiAJY2FzZSBDTEtfU1JDX1BMTDE6IHJldHVybiBwbGxfZW5hYmxlKDEsIDApOwogCWNhc2UgQ0xLX1NSQ19QTEwyOiByZXR1cm4gcGxsX2VuYWJsZSgyLCAwKTsKQEAgLTE5Nyw3ICsxOTgsNyBAQAogCQlhZGRyID0gQ0tDX0JBU0UgKyBDTEtESVZDMV9PRkZTOwogCQlyZWcgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAkJaWYgKHJlZyAmIENMS0RJVkMxX1AyRSkKLQkJCWRpdiA9IF9fcmF3X3JlYWRsKGFkZHIpICYgMHgzZjsKKwkJCWRpdiA9IHJlZyAmIDB4M2Y7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gZ2V0X3JhdGVfcGxsKHBsbCkgLyAoZGl2ICsgMSk7CkBAIC0yNTgsMTQgKzI1OSwxOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZGl2LCBzcmMsIGZyZXEsIHIxLCByMjsKIAorCWlmICghcmF0ZSkKKwkJcmV0dXJuIEFDTEtfTUFYX0RJVjsKKwogCXNyYyA9IF9fcmF3X3JlYWRsKGNsay0+YWNsa3JlZykgPj4gQUNMS19TRUxfU0hJRlQ7CiAJc3JjICY9IENMS19TUkNfTUFTSzsKIAlmcmVxID0gcm9vdF9jbGtfZ2V0X3JhdGUoc3JjKTsKLQlkaXYgPSBmcmVxIC8gcmF0ZSArIDE7CisJZGl2ID0gZnJlcSAvIHJhdGU7CisJaWYgKCFkaXYpCisJCXJldHVybiAxOworCWlmIChkaXYgPj0gQUNMS19NQVhfRElWKQorCQlyZXR1cm4gQUNMS19NQVhfRElWOwogCXIxID0gZnJlcSAvIGRpdjsKIAlyMiA9IGZyZXEgLyAoZGl2ICsgMSk7Ci0JaWYgKHIyID49IHJhdGUpCi0JCXJldHVybiBkaXYgKyAxOwogCWlmICgocmF0ZSAtIHIyKSA8IChyMSAtIHJhdGUpKQogCQlyZXR1cm4gZGl2ICsgMTsKIApAQCAtMjg3LDcgKzI5Myw4IEBACiAJdTMyIHJlZzsKIAogCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+YWNsa3JlZykgJiB+QUNMS19ESVZfTUFTSzsKLQlyZWcgfD0gYWNsa19iZXN0X2RpdihjbGssIHJhdGUpOworCXJlZyB8PSBhY2xrX2Jlc3RfZGl2KGNsaywgcmF0ZSkgLSAxOworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+YWNsa3JlZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NiwxNSArMzAzLDIyIEBACiAJdW5zaWduZWQgaW50IHNyYzsKIAogCXNyYyA9IF9fcmF3X3JlYWRsKENLQ19CQVNFICsgQ0xLQ1RSTF9PRkZTKSAmIENMS19TUkNfTUFTSzsKLQkJcmV0dXJuIHJvb3RfY2xrX2dldF9yYXRlKHNyYyk7CisJcmV0dXJuIHJvb3RfY2xrX2dldF9yYXRlKHNyYyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2J1cyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgcmVnLCBzZGl2LCBiZGl2LCByYXRlOwogCi0JZGl2ID0gKF9fcmF3X3JlYWRsKENLQ19CQVNFICsgQ0xLQ1RSTF9PRkZTKSA+PiA0KSAmIDB4ZmY7Ci0JcmV0dXJuIGdldF9yYXRlX3N5cyhjbGspIC8gKGRpdiArIDEpOworCXJlZyA9IF9fcmF3X3JlYWRsKENLQ19CQVNFICsgQ0xLQ1RSTF9PRkZTKTsKKwlyYXRlID0gZ2V0X3JhdGVfc3lzKGNsayk7CisJc2RpdiA9IChyZWcgPj4gMjApICYgMzsKKwlpZiAoc2RpdikKKwkJcmF0ZSAvPSBzZGl2ICsgMTsKKwliZGl2ID0gKHJlZyA+PiA0KSAmIDB4ZmY7CisJaWYgKGJkaXYpCisJCXJhdGUgLz0gYmRpdiArIDE7CisJcmV0dXJuIHJhdGU7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2NwdShzdHJ1Y3QgY2xrICpjbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYwppbmRleCBhYTUzZWUyLi41MTNkNmFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKQEAgLTMsNyArMyw3IEBACiAgKiBhcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCiAgKgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFNULUVyaWNzc29uIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBTVC1Fcmljc3NvbiBTQQogICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCiAgKiBDb3JlIHBsYXRmb3JtIHN1cHBvcnQsIElSUSBoYW5kbGluZyBhbmQgZGV2aWNlIGRlZmluaXRpb25zLgogICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgpAQCAtMTYsNyArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CkBAIC05NiwxMCArOTgsMjAgQEAKICAqIERlY2xhcmF0aW9uIG9mIGRldmljZXMgZm91bmQgb24gdGhlIFUzMDAgYm9hcmQgYW5kCiAgKiB0aGVpciByZXNwZWN0aXZlIG1lbW9yeSBsb2NhdGlvbnMuCiAgKi8KKworc3RhdGljIHN0cnVjdCBhbWJhX3BsMDExX2RhdGEgdWFydDBfcGxhdF9kYXRhID0geworI2lmZGVmIENPTkZJR19DT0g5MDEzMTgKKwkuZG1hX2ZpbHRlciA9IGNvaDkwMTMxOF9maWx0ZXJfaWQsCisJLmRtYV9yeF9wYXJhbSA9ICh2b2lkICopIFUzMDBfRE1BX1VBUlQwX1JYLAorCS5kbWFfdHhfcGFyYW0gPSAodm9pZCAqKSBVMzAwX0RNQV9VQVJUMF9UWCwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0MF9kZXZpY2UgPSB7CiAJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gfjAsCiAJCS5pbml0X25hbWUgPSAidWFydDAiLCAvKiBTbG93IGRldmljZSBhdCAweDMwMDAgb2Zmc2V0ICovCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdWFydDBfcGxhdF9kYXRhLAogCX0sCiAJLnJlcyA9IHsKIAkJLnN0YXJ0ID0gVTMwMF9VQVJUMF9CQVNFLApAQCAtMTExLDEwICsxMjMsMTkgQEAKIAogLyogVGhlIFUzMzUgaGF2ZSBhbiBhZGRpdGlvbmFsIFVBUlQxIG9uIHRoZSBBUFAgQ1BVICovCiAjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9CUzMzNQorc3RhdGljIHN0cnVjdCBhbWJhX3BsMDExX2RhdGEgdWFydDFfcGxhdF9kYXRhID0geworI2lmZGVmIENPTkZJR19DT0g5MDEzMTgKKwkuZG1hX2ZpbHRlciA9IGNvaDkwMTMxOF9maWx0ZXJfaWQsCisJLmRtYV9yeF9wYXJhbSA9ICh2b2lkICopIFUzMDBfRE1BX1VBUlQxX1JYLAorCS5kbWFfdHhfcGFyYW0gPSAodm9pZCAqKSBVMzAwX0RNQV9VQVJUMV9UWCwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0MV9kZXZpY2UgPSB7CiAJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gfjAsCiAJCS5pbml0X25hbWUgPSAidWFydDEiLCAvKiBGYXN0IGRldmljZSBhdCAweDcwMDAgb2Zmc2V0ICovCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdWFydDFfcGxhdF9kYXRhLAogCX0sCiAJLnJlcyA9IHsKIAkJLnN0YXJ0ID0gVTMwMF9VQVJUMV9CQVNFLApAQCAtOTYwLDQyICs5ODEsMzcgQEAKIAkJLnByaW9yaXR5X2hpZ2ggPSAwLAogCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgNiAqIDB4NDAgKyAweDIyMCwKIAl9LAorCS8qCisJICogRG9uJ3Qgc2V0IHVwIGRldmljZSBhZGRyZXNzLCBidXJzdCBjb3VudCBvciBzaXplIG9mIHNyYworCSAqIG9yIGRzdCBidXMgZm9yIHRoaXMgcGVyaXBoZXJhbCAtIGhhbmRsZWQgYnkgUHJpbWVDZWxsCisJICogRE1BIGV4dGVuc2lvbi4KKwkgKi8KIAl7CiAJCS5udW1iZXIgPSBVMzAwX0RNQV9NTUNTRF9SWF9UWCwKIAkJLm5hbWUgPSAiTU1DU0QgUlggVFgiLAogCQkucHJpb3JpdHlfaGlnaCA9IDAsCi0JCS5kZXZfYWRkciA9ICBVMzAwX01NQ1NEX0JBU0UgKyAweDA4MCwKIAkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CiAJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CiAJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCiAJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CiAJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKLQkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8Ci0JCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAotCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKLQkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CiAJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CiAJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAogCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZLAogCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAotCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKLQkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8Ci0JCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAogCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAogCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAotCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CiAJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1ksCiAJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CiAJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKLQkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8Ci0JCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAotCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CiAJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CkBAIC0xMDE0LDE1ICsxMDMwLDc2IEBACiAJCS5uYW1lID0gIk1TUFJPIFJYIiwKIAkJLnByaW9yaXR5X2hpZ2ggPSAwLAogCX0sCisJLyoKKwkgKiBEb24ndCBzZXQgdXAgZGV2aWNlIGFkZHJlc3MsIGJ1cnN0IGNvdW50IG9yIHNpemUgb2Ygc3JjCisJICogb3IgZHN0IGJ1cyBmb3IgdGhpcyBwZXJpcGhlcmFsIC0gaGFuZGxlZCBieSBQcmltZUNlbGwKKwkgKiBETUEgZXh0ZW5zaW9uLgorCSAqLwogCXsKIAkJLm51bWJlciA9IFUzMDBfRE1BX1VBUlQwX1RYLAogCQkubmFtZSA9ICJVQVJUMCBUWCIsCiAJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKIAl9LAogCXsKIAkJLm51bWJlciA9IFUzMDBfRE1BX1VBUlQwX1JYLAogCQkubmFtZSA9ICJVQVJUMCBSWCIsCiAJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKIAl9LAogCXsKIAkJLm51bWJlciA9IFUzMDBfRE1BX0FQRVhfVFgsCkBAIC0xMDgwLDcgKzExNTcsNyBAQAogCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKIAkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKLQkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CiAJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CiAJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAogCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKQEAgLTEyNTIsMTUgKzEzMjksNzcgQEAKIAkJLm5hbWUgPSAiWEdBTSBQREkiLAogCQkucHJpb3JpdHlfaGlnaCA9IDAsCiAJfSwKKwkvKgorCSAqIERvbid0IHNldCB1cCBkZXZpY2UgYWRkcmVzcywgYnVyc3QgY291bnQgb3Igc2l6ZSBvZiBzcmMKKwkgKiBvciBkc3QgYnVzIGZvciB0aGlzIHBlcmlwaGVyYWwgLSBoYW5kbGVkIGJ5IFByaW1lQ2VsbAorCSAqIERNQSBleHRlbnNpb24uCisJICovCiAJewogCQkubnVtYmVyID0gVTMwMF9ETUFfU1BJX1RYLAogCQkubmFtZSA9ICJTUEkgVFgiLAogCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1ksCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1ksCiAJfSwKIAl7CiAJCS5udW1iZXIgPSBVMzAwX0RNQV9TUElfUlgsCiAJCS5uYW1lID0gIlNQSSBSWCIsCiAJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKKwogCX0sCiAJewogCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzAsCkBAIC0xNjE3LDcgKzE3NTYsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9CUzMzNQogCWlmICgodmFsICYgMHhGRjAwVSkgIT0gMHhmMDAwICYmICh2YWwgJiAweEZGMDBVKSAhPSAweGYxMDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQbGF0Zm9ybSBjb25maWd1cmVkIGZvciBCUzM2NSAiIFwKKwkJcHJpbnRrKEtFUk5fRVJSICJQbGF0Zm9ybSBjb25maWd1cmVkIGZvciBCUzMzNSAiIFwKIAkJICAgICAgICIgd2l0aCBEQjMzNTAgYnV0ICVzIGRldGVjdGVkLCBleHBlY3QgcHJvYmxlbXMhIiwKIAkJICAgICAgIGNoaXBuYW1lKTsKIAl9CkBAIC0xNjkyLDEyICsxODMxLDEyIEBACiAJLyogUmVnaXN0ZXIgc3ViZGV2aWNlcyBvbiB0aGUgSTJDIGJ1c2VzICovCiAJdTMwMF9pMmNfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcygpOwogCi0JLyogUmVnaXN0ZXIgc3ViZGV2aWNlcyBvbiB0aGUgU1BJIGJ1cyAqLwotCXUzMDBfc3BpX3JlZ2lzdGVyX2JvYXJkX2RldmljZXMoKTsKLQogCS8qIFJlZ2lzdGVyIHRoZSBwbGF0Zm9ybSBkZXZpY2VzICovCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2cywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZzKSk7CiAKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBTUEkgYnVzICovCisJdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcygpOworCiAjaWZuZGVmIENPTkZJR19NQUNIX1UzMDBfU0VNSV9JU19TSEFSRUQKIAkvKgogCSAqIEVuYWJsZSBTRU1JIHNlbGYgcmVmcmVzaC4gU2VsZi1yZWZyZXNoIG9mIHRoZSBTRFJBTSBpcyBlbnRlcmVkIHdoZW4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvY29oOTAxMzE4LmggYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2NvaDkwMTMxOC5oCmluZGV4IDYxOTNhYWEuLjdjM2IyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvY29oOTAxMzE4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9jb2g5MDEzMTguaApAQCAtMTAyLDYgKzEwMiw3IEBACiAJY29uc3QgaW50IG1heF9jaGFubmVsczsKIH07CiAKKyNpZmRlZiBDT05GSUdfQ09IOTAxMzE4CiAvKioKICAqIGNvaDkwMTMxOF9maWx0ZXJfaWQoKSAtIERNQSBjaGFubmVsIGZpbHRlciBmdW5jdGlvbgogICogQGNoYW46IGRtYSBjaGFubmVsIGhhbmRsZQpAQCAtMTEwLDYgKzExMSwxMiBAQAogICogSW4gZG1hX3JlcXVlc3RfY2hhbm5lbCgpIGl0IHNwZWNpZmllcyB3aGF0IGNoYW5uZWwgaWQgdG8gYmUgcmVxdWVzdGVkCiAgKi8KIGJvb2wgY29oOTAxMzE4X2ZpbHRlcl9pZChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmNoYW5faWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb2g5MDEzMThfZmlsdGVyX2lkKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqY2hhbl9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKIAogLyoKICAqIERNQSBDb250cm9sbGVyIC0gdGhpcyBhY2Nlc3MgdGhlIHN0YXRpYyBtYXBwaW5ncyBvZiB0aGUgY29oOTAxMzE4IGRtYS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwppbmRleCBkZTFhYzlhLi42NzdjY2VmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCkBAIC0zLDE1OSArMyw1MiBAQAogICogYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCiAgKgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uIFNBCiAgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKICAqCiAgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Ci0gKiBBdXRob3I6IEpvaGFuIEx1bmRpbiA8am9oYW4ubHVuZGluQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBKb2hhbiBMdW5kaW4KICAqIEF1dGhvcjogSm9uYXMgQWFiZXJnIDxqb25hcy5hYmVyZ0BzdGVyaWNzc29uLmNvbT4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPG1hY2gvY29oOTAxMzE4Lmg+CisjaW5jbHVkZSA8bWFjaC9kbWFfY2hhbm5lbHMuaD4KIAogI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgInBhZG11eC5oIgogCi1zdHJ1Y3QgbW1jaV9jYXJkX2V2ZW50IHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICptbWNfaW5wdXQ7Ci0JaW50IG1tY19pbnNlcnRlZDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya3E7Ci0Jc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YTsKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbW1jX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG1tY2lfY2FyZF9ldmVudCAqbW1jaV9jYXJkID0gY29udGFpbmVyX29mKAotCQlkZXYtPnBsYXRmb3JtX2RhdGEsCi0JCXN0cnVjdCBtbWNpX2NhcmRfZXZlbnQsIG1tYzBfcGxhdF9kYXRhKTsKLQotCXJldHVybiBtbWNpX2NhcmQtPm1tY19pbnNlcnRlZDsKLX0KLQotc3RhdGljIGludCBtbWNpX2NhbGxiYWNrKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG1tY2lfY2FyZF9ldmVudCAqbW1jaV9jYXJkID0gZGF0YTsKLQotCWRpc2FibGVfaXJxX29uX2dwaW9fcGluKFUzMDBfR1BJT19QSU5fTU1DX0NEKTsKLQlzY2hlZHVsZV93b3JrKCZtbWNpX2NhcmQtPndvcmtxKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBzc2l6ZV90IGdwaW9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbW1jaV9jYXJkX2V2ZW50ICptbWNpX2NhcmQgPSBjb250YWluZXJfb2YoCi0JCWRldi0+cGxhdGZvcm1fZGF0YSwKLQkJc3RydWN0IG1tY2lfY2FyZF9ldmVudCwgbW1jMF9wbGF0X2RhdGEpOwotCi0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgIW1tY2lfY2FyZC0+bW1jX2luc2VydGVkKTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKG1tY19pbnNlcnRlZCwgU19JUlVHTywgZ3Bpb19zaG93LCBOVUxMKTsKLQotc3RhdGljIHZvaWQgX21tY2lfY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3cykKLXsKLQotCXN0cnVjdCBtbWNpX2NhcmRfZXZlbnQgKm1tY2lfY2FyZCA9IGNvbnRhaW5lcl9vZigKLQkJd3MsCi0JCXN0cnVjdCBtbWNpX2NhcmRfZXZlbnQsIHdvcmtxKTsKLQotCW1kZWxheSgyMCk7Ci0KLQltbWNpX2NhcmQtPm1tY19pbnNlcnRlZCA9ICFncGlvX2dldF92YWx1ZShVMzAwX0dQSU9fUElOX01NQ19DRCk7Ci0KLQlpbnB1dF9yZXBvcnRfc3dpdGNoKG1tY2lfY2FyZC0+bW1jX2lucHV0LCBLRVlfSU5TRVJULAotCQkJICAgIG1tY2lfY2FyZC0+bW1jX2luc2VydGVkKTsKLQlpbnB1dF9zeW5jKG1tY2lfY2FyZC0+bW1jX2lucHV0KTsKLQotCXByX2RlYnVnKCJNTUMvU0QgY2FyZCB3YXMgJXNcbiIsCi0JCSBtbWNpX2NhcmQtPm1tY19pbnNlcnRlZCA/ICJpbnNlcnRlZCIgOiAicmVtb3ZlZCIpOwotCi0JZW5hYmxlX2lycV9vbl9ncGlvX3BpbihVMzAwX0dQSU9fUElOX01NQ19DRCwgbW1jaV9jYXJkLT5tbWNfaW5zZXJ0ZWQpOwotfQotCi1pbnQgX19kZXZpbml0IG1tY19pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldikKLXsKLQlzdHJ1Y3QgbW1jaV9jYXJkX2V2ZW50ICptbWNpX2NhcmQ7Ci0Jc3RydWN0IGRldmljZSAqbW1jc2RfZGV2aWNlID0gJmFkZXYtPmRldjsKLQlzdHJ1Y3QgcG14ICpwbXg7Ci0JaW50IHJldCA9IDA7Ci0KLQltbWNpX2NhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW1jaV9jYXJkX2V2ZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtbWNpX2NhcmQpCi0JCXJldHVybiAtRU5PTUVNOwotCitzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YSA9IHsKIAkvKgogCSAqIERvIG5vdCBzZXQgb2NyX21hc2sgb3Igdm9sdGFnZSB0cmFuc2xhdGlvbiBmdW5jdGlvbiwKIAkgKiB3ZSBoYXZlIGEgcmVndWxhdG9yIHdlIGNhbiBjb250cm9sIGluc3RlYWQuCiAJICovCiAJLyogTm9taW5hbGx5IDIuODVWIG9uIG91ciBwbGF0Zm9ybSAqLwotCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuZl9tYXggPSAyNDAwMDAwMDsKLQltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLnN0YXR1cyA9IG1tY19zdGF0dXM7Ci0JbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS5ncGlvX3dwID0gLTE7Ci0JbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS5ncGlvX2NkID0gLTE7Ci0JbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS5jYXBhYmlsaXRpZXMgPSBNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfAotCQlNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQTsKKwkuZl9tYXggPSAyNDAwMDAwMCwKKwkuZ3Bpb193cCA9IC0xLAorCS5ncGlvX2NkID0gVTMwMF9HUElPX1BJTl9NTUNfQ0QsCisJLmNkX2ludmVydCA9IHRydWUsCisJLmNhcGFiaWxpdGllcyA9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8CisJTU1DX0NBUF9TRF9ISUdIU1BFRUQgfCBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEsCisjaWZkZWYgQ09ORklHX0NPSDkwMTMxOAorCS5kbWFfZmlsdGVyID0gY29oOTAxMzE4X2ZpbHRlcl9pZCwKKwkuZG1hX3J4X3BhcmFtID0gKHZvaWQgKikgVTMwMF9ETUFfTU1DU0RfUlhfVFgsCisJLyogRG9uJ3Qgc3BlY2lmeSBhIFRYIGNoYW5uZWwsIHRoaXMgUlggY2hhbm5lbCBpcyBiaWRpcmVjdGlvbmFsICovCisjZW5kaWYKK307CiAKLQltbWNzZF9kZXZpY2UtPnBsYXRmb3JtX2RhdGEgPSAodm9pZCAqKSAmbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YTsKK2ludCBfX2RldmluaXQgbW1jX2luaXQoc3RydWN0IGFtYmFfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKm1tY3NkX2RldmljZSA9ICZhZGV2LT5kZXY7CisJc3RydWN0IHBteCAqcG14OworCWludCByZXQgPSAwOwogCi0JSU5JVF9XT1JLKCZtbWNpX2NhcmQtPndvcmtxLCBfbW1jaV9jYWxsYmFjayk7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoVTMwMF9HUElPX1BJTl9NTUNfQ0QsICJNTUMgY2FyZCBkZXRlY3Rpb24iKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBNTUMgY2FyZCBkZXRlY3Rpb24gIiBcCi0JCSAgICAgICAiR1BJTyBwaW5cbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChVMzAwX0dQSU9fUElOX01NQ19DRCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9DUklUICJJbnZhbGlkIEdQSU8gcGluIHJlcXVlc3RlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZtbWNzZF9kZXZpY2UtPmtvYmosCi0JCQkgICAgICAgJmRldl9hdHRyX21tY19pbnNlcnRlZC5hdHRyKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCW1tY2lfY2FyZC0+bW1jX2lucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFtbWNpX2NhcmQtPm1tY19pbnB1dCkgewotCQlwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgYWxsb2NhdGUgTU1DIGlucHV0IGRldmljZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1tY2lfY2FyZC0+bW1jX2lucHV0LT5uYW1lID0gIk1NQyBpbnNlcnQgbm90aWZpY2F0aW9uIjsKLQltbWNpX2NhcmQtPm1tY19pbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCW1tY2lfY2FyZC0+bW1jX2lucHV0LT5pZC52ZW5kb3IgPSAwOwotCW1tY2lfY2FyZC0+bW1jX2lucHV0LT5pZC5wcm9kdWN0ID0gMDsKLQltbWNpX2NhcmQtPm1tY19pbnB1dC0+aWQudmVyc2lvbiA9IDB4MDEwMDsKLQltbWNpX2NhcmQtPm1tY19pbnB1dC0+ZGV2LnBhcmVudCA9IG1tY3NkX2RldmljZTsKLQlpbnB1dF9zZXRfY2FwYWJpbGl0eShtbWNpX2NhcmQtPm1tY19pbnB1dCwgRVZfU1csIEtFWV9JTlNFUlQpOwotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIG11c3QgYWx3YXlzIGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhpcyBpbnB1dAotCSAqIGlzIG5ldmVyIHVucmVnaXN0ZXJlZCBvciBmcmVlOmVkLgotCSAqLwotCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShtbWNpX2NhcmQtPm1tY19pbnB1dCk7Ci0JaWYgKHJldCkgewotCQlpbnB1dF9mcmVlX2RldmljZShtbWNpX2NhcmQtPm1tY19pbnB1dCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlucHV0X3NldF9kcnZkYXRhKG1tY2lfY2FyZC0+bW1jX2lucHV0LCBtbWNpX2NhcmQpOworCW1tY3NkX2RldmljZS0+cGxhdGZvcm1fZGF0YSA9ICZtbWMwX3BsYXRfZGF0YTsKIAogCS8qCiAJICogU2V0dXAgcGFkbXV4aW5nIGZvciBNTUMuIFNpbmNlIHRoaXMgbXVzdCBhbHdheXMgYmUKQEAgLTE3MSwxMiArNjQsNSBAQAogCQkJcHJfd2FybmluZygiQ291bGQgbm90IGFjdGl2YXRlIHBhZG11eGluZ1xuIik7CiAJfQogCi0JcmV0ID0gZ3Bpb19yZWdpc3Rlcl9jYWxsYmFjayhVMzAwX0dQSU9fUElOX01NQ19DRCwgbW1jaV9jYWxsYmFjaywKLQkJCQkgICAgIG1tY2lfY2FyZCk7Ci0KLQlzY2hlZHVsZV93b3JrKCZtbWNpX2NhcmQtPndvcmtxKTsKLQotCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyZWQgTU1DIGluc2VydC9yZW1vdmUgbm90aWZpY2F0aW9uXG4iKTsKLW91dDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5jCmluZGV4IDAwODY5ZGUuLjU3NjcyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMKQEAgLTExLDYgKzExLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2gvY29oOTAxMzE4Lmg+CisjaW5jbHVkZSA8bWFjaC9kbWFfY2hhbm5lbHMuaD4KKwogI2luY2x1ZGUgInBhZG11eC5oIgogCiAvKgpAQCAtMzAsMTEgKzMzLDggQEAKIH0KIAogc3RydWN0IHBsMDIyX2NvbmZpZ19jaGlwIGR1bW15X2NoaXBfaW5mbyA9IHsKLQkvKgotCSAqIGF2YWlsYWJsZSBQT0xMSU5HX1RSQU5TRkVSIGFuZCBJTlRFUlJVUFRfVFJBTlNGRVIsCi0JICogRE1BX1RSQU5TRkVSIGRvZXMgbm90IHdvcmsKLQkgKi8KLQkuY29tX21vZGUgPSBJTlRFUlJVUFRfVFJBTlNGRVIsCisJLyogYXZhaWxhYmxlIFBPTExJTkdfVFJBTlNGRVIsIElOVEVSUlVQVF9UUkFOU0ZFUiwgRE1BX1RSQU5TRkVSICovCisJLmNvbV9tb2RlID0gRE1BX1RSQU5TRkVSLAogCS5pZmFjZSA9IFNTUF9JTlRFUkZBQ0VfTU9UT1JPTEFfU1BJLAogCS8qIFdlIGNhbiBvbmx5IGFjdCBhcyBtYXN0ZXIgYnV0IFNTUF9TTEFWRSBpcyBwb3NzaWJsZSBpbiB0aGVvcnkgKi8KIAkuaGllcmFyY2h5ID0gU1NQX01BU1RFUiwKQEAgLTc1LDggKzc1LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGwwMjJfc3NwX2NvbnRyb2xsZXIgc3NwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLyogSWYgeW91IGhhdmUgc2V2ZXJhbCBTUEkgYnVzZXMgdGhpcyB2YXJpZXMsIHdlIGhhdmUgb25seSBidXMgMCAqLwogCS5idXNfaWQgPSAwLAotCS8qIFNldCB0aGlzIHRvIDEgd2hlbiB3ZSB0aGluayB3ZSBnb3QgRE1BIHdvcmtpbmcgKi8KLQkuZW5hYmxlX2RtYSA9IDAsCiAJLyoKIAkgKiBPbiB0aGUgQVBQIENQVSBHUElPIDQsIDUgYW5kIDYgYXJlIGNvbm5lY3RlZCBhcyBnZW5lcmljCiAJICogY2hpcCBzZWxlY3RzIGZvciBTUEkuIChTYW1lIG9uIFUzMzAsIFUzMzUgYW5kIFUzNjUuKQpAQCAtODQsNiArODIsMTQgQEAKIAkgKiBhbmQgZG8gcGFkbXV4aW5nIGFjY29yZGluZ2x5IHRvby4KIAkgKi8KIAkubnVtX2NoaXBzZWxlY3QgPSAzLAorI2lmZGVmIENPTkZJR19DT0g5MDEzMTgKKwkuZW5hYmxlX2RtYSA9IDEsCisJLmRtYV9maWx0ZXIgPSBjb2g5MDEzMThfZmlsdGVyX2lkLAorCS5kbWFfcnhfcGFyYW0gPSAodm9pZCAqKSBVMzAwX0RNQV9TUElfUlgsCisJLmRtYV90eF9wYXJhbSA9ICh2b2lkICopIFUzMDBfRE1BX1NQSV9UWCwKKyNlbHNlCisJLmVuYWJsZV9kbWEgPSAwLAorI2VuZGlmCiB9OwogCiAKQEAgLTEwOSw2ICsxMTUsNyBAQAogCX0KIAogfQorCiB2b2lkIF9faW5pdCB1MzAwX3NwaV9yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpCiB7CiAJLyogUmVnaXN0ZXIgYW55IFNQSSBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZQppbmRleCA1M2ViYjQyLi5iNTQ5YThmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvTWFrZWZpbGUKQEAgLTMsMTYgKzMsMTggQEAKICMKIAogb2JqLXkJCQkJOj0gY2xvY2subyBjcHUubyBkZXZpY2VzLm8gZGV2aWNlcy1jb21tb24ubyBcCi0JCQkJICAgaWQubworCQkJCSAgIGlkLm8gdXNiLm8KIG9iai0kKENPTkZJR19VWDUwMF9TT0NfREI1NTAwKQkrPSBjcHUtZGI1NTAwLm8gZG1hLWRiNTUwMC5vCiBvYmotJChDT05GSUdfVVg1MDBfU09DX0RCODUwMCkJKz0gY3B1LWRiODUwMC5vIGRldmljZXMtZGI4NTAwLm8gcHJjbXUubwogb2JqLSQoQ09ORklHX01BQ0hfVTg1MDApCSs9IGJvYXJkLW1vcDUwMC5vIGJvYXJkLW1vcDUwMC1zZGkubyBcCi0JCQkJYm9hcmQtbW9wNTAwLWtleXBhZHMubworCQkJCWJvYXJkLW1vcDUwMC1yZWd1bGF0b3JzLm8gXAorCQkJCWJvYXJkLW1vcDUwMC11aWIubyBib2FyZC1tb3A1MDAtc3R1aWIubyBcCisJCQkJYm9hcmQtbW9wNTAwLXU4NTAwdWliLm8gXAorCQkJCWJvYXJkLW1vcDUwMC1waW5zLm8KIG9iai0kKENPTkZJR19NQUNIX1U1NTAwKQkrPSBib2FyZC11NTUwMC5vIGJvYXJkLXU1NTAwLXNkaS5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gcGxhdHNtcC5vIGhlYWRzbXAubwogb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLm8KIG9iai0kKENPTkZJR19MT0NBTF9USU1FUlMpCSs9IGxvY2FsdGltZXIubwotb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9BQjg1MDApCSs9IGJvYXJkLW1vcDUwMC1yZWd1bGF0b3JzLm8KIG9iai0kKENPTkZJR19VNTUwMF9NT0RFTV9JUlEpCSs9IG1vZGVtLWlycS1kYjU1MDAubwogb2JqLSQoQ09ORklHX1U1NTAwX01CT1gpCSs9IG1ib3gtZGI1NTAwLm8KIG9iai0kKENPTkZJR19DUFVfRlJFUSkJCSs9IGNwdWZyZXEubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAta2V5cGFkcy5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAta2V5cGFkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDMxOGMzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLWtleXBhZHMuYworKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCi0gKgotICogTGljZW5zZSBUZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKLSAqCi0gKiBLZXlwYWQgbGF5b3V0cyBmb3IgdmFyaW91cyBib2FyZHMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9zdG1wZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC90YzM1ODl4Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgotCi0jaW5jbHVkZSA8cGxhdC9waW5jZmcuaD4KLSNpbmNsdWRlIDxwbGF0L3NrZS5oPgotCi0jaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy1kYjg1MDAuaCIKLSNpbmNsdWRlICJib2FyZC1tb3A1MDAuaCIKLQotLyogU1RNUEUvU0tFIGtleXBhZCB1c2UgdGhpcyBrZXkgbGF5b3V0ICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1vcDUwMF9rZXltYXBbXSA9IHsKLQlLRVkoMiwgNSwgS0VZX0VORCksCi0JS0VZKDQsIDEsIEtFWV9QT1dFUiksCi0JS0VZKDMsIDUsIEtFWV9WT0xVTUVET1dOKSwKLQlLRVkoMSwgMywgS0VZXzMpLAotCUtFWSg1LCAyLCBLRVlfUklHSFQpLAotCUtFWSg1LCAwLCBLRVlfOSksCi0KLQlLRVkoMCwgNSwgS0VZX01FTlUpLAotCUtFWSg3LCA2LCBLRVlfRU5URVIpLAotCUtFWSg0LCA1LCBLRVlfMCksCi0JS0VZKDYsIDcsIEtFWV8yKSwKLQlLRVkoMywgNCwgS0VZX1VQKSwKLQlLRVkoMywgMywgS0VZX0RPV04pLAotCi0JS0VZKDYsIDQsIEtFWV9TRU5EKSwKLQlLRVkoNiwgMiwgS0VZX0JBQ0spLAotCUtFWSg0LCAyLCBLRVlfVk9MVU1FVVApLAotCUtFWSg1LCA1LCBLRVlfMSksCi0JS0VZKDQsIDMsIEtFWV9MRUZUKSwKLQlLRVkoMywgMiwgS0VZXzcpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgbW9wNTAwX2tleW1hcF9kYXRhID0gewotCS5rZXltYXAJCT0gbW9wNTAwX2tleW1hcCwKLQkua2V5bWFwX3NpemUgICAgPSBBUlJBWV9TSVpFKG1vcDUwMF9rZXltYXApLAotfTsKLQotLyoKLSAqIE5vbWFkaWsgU0tFIGtleXBhZAotICovCi0jZGVmaW5lIFJPV19QSU5fSTAgICAgICAxNjQKLSNkZWZpbmUgUk9XX1BJTl9JMSAgICAgIDE2MwotI2RlZmluZSBST1dfUElOX0kyICAgICAgMTYyCi0jZGVmaW5lIFJPV19QSU5fSTMgICAgICAxNjEKLSNkZWZpbmUgUk9XX1BJTl9JNCAgICAgIDE1NgotI2RlZmluZSBST1dfUElOX0k1ICAgICAgMTU1Ci0jZGVmaW5lIFJPV19QSU5fSTYgICAgICAxNTQKLSNkZWZpbmUgUk9XX1BJTl9JNyAgICAgIDE1MwotI2RlZmluZSBDT0xfUElOX08wICAgICAgMTY4Ci0jZGVmaW5lIENPTF9QSU5fTzEgICAgICAxNjcKLSNkZWZpbmUgQ09MX1BJTl9PMiAgICAgIDE2NgotI2RlZmluZSBDT0xfUElOX08zICAgICAgMTY1Ci0jZGVmaW5lIENPTF9QSU5fTzQgICAgICAxNjAKLSNkZWZpbmUgQ09MX1BJTl9PNSAgICAgIDE1OQotI2RlZmluZSBDT0xfUElOX082ICAgICAgMTU4Ci0jZGVmaW5lIENPTF9QSU5fTzcgICAgICAxNTcKLQotI2RlZmluZSBTS0VfS1BEX01BWF9ST1dTCTgKLSNkZWZpbmUgU0tFX0tQRF9NQVhfQ09MUwk4Ci0KLXN0YXRpYyBpbnQgc2tlX2twX3Jvd3NbXSA9IHsKLQlST1dfUElOX0kwLCBST1dfUElOX0kxLCBST1dfUElOX0kyLCBST1dfUElOX0kzLAotCVJPV19QSU5fSTQsIFJPV19QSU5fSTUsIFJPV19QSU5fSTYsIFJPV19QSU5fSTcsCi19OwotCi0vKgotICogc2tlX3NldF9ncGlvX3JvdzogcmVxdWVzdCBhbmQgc2V0IGdwaW8gcm93cwotICovCi1zdGF0aWMgaW50IHNrZV9zZXRfZ3Bpb19yb3coaW50IGdwaW8pCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCAic2tlLWtwIik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJfZXJyKCJza2Vfc2V0X2dwaW9fcm93OiBncGlvIHJlcXVlc3QgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJfZXJyKCJza2Vfc2V0X2dwaW9fcm93OiBncGlvIGRpcmVjdGlvbiBmYWlsZWRcbiIpOwotCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIHNrZV9rcF9pbml0IC0gZW5hYmxlIHRoZSBncGlvIGNvbmZpZ3VyYXRpb24KLSAqLwotc3RhdGljIGludCBza2Vfa3BfaW5pdCh2b2lkKQotewotCWludCByZXQsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU0tFX0tQRF9NQVhfUk9XUzsgaSsrKSB7Ci0JCXJldCA9IHNrZV9zZXRfZ3Bpb19yb3coc2tlX2twX3Jvd3NbaV0pOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJfZXJyKCJza2Vfa3BfaW5pdDogZmFpbGVkIGluaXRcbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNrZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSBza2Vfa2V5cGFkX2JvYXJkID0gewotCS5pbml0CQk9IHNrZV9rcF9pbml0LAotCS5rZXltYXBfZGF0YSAgICA9ICZtb3A1MDBfa2V5bWFwX2RhdGEsCi0JLm5vX2F1dG9yZXBlYXQgID0gdHJ1ZSwKLQkua3JvdwkJPSBTS0VfS1BEX01BWF9ST1dTLCAgICAgLyogOHg4IG1hdHJpeCAqLwotCS5rY29sCQk9IFNLRV9LUERfTUFYX0NPTFMsCi0JLmRlYm91bmNlX21zICAgID0gNDAsCQkJLyogaW4gbWlsbGlzZWNzICovCi19OwotCi0vKgotICogU1RNUEUxNjAxCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3RtcGVfa2V5cGFkX3BsYXRmb3JtX2RhdGEgc3RtcGUxNjAxX2tleXBhZF9kYXRhID0gewotCS5kZWJvdW5jZV9tcyAgICA9IDY0LAotCS5zY2FuX2NvdW50ICAgICA9IDgsCi0JLm5vX2F1dG9yZXBlYXQgID0gdHJ1ZSwKLQkua2V5bWFwX2RhdGEgICAgPSAmbW9wNTAwX2tleW1hcF9kYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBzdG1wZV9wbGF0Zm9ybV9kYXRhIHN0bXBlMTYwMV9kYXRhID0gewotCS5pZCAgICAgICAgICAgICA9IDEsCi0JLmJsb2NrcyAgICAgICAgID0gU1RNUEVfQkxPQ0tfS0VZUEFELAotCS5pcnFfdHJpZ2dlciAgICA9IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCS5pcnFfYmFzZSAgICAgICA9IE1PUDUwMF9TVE1QRTE2MDFfSVJRKDApLAotCS5rZXlwYWQgICAgICAgICA9ICZzdG1wZTE2MDFfa2V5cGFkX2RhdGEsCi0JLmF1dG9zbGVlcCAgICAgID0gdHJ1ZSwKLQkuYXV0b3NsZWVwX3RpbWVvdXQgPSAxMDI0LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBtb3A1MDBfaTJjMF9kZXZpY2VzX3N0dWliW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygic3RtcGUxNjAxIiwgMHg0MCksCi0JCS5pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKDIxOCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnN0bXBlMTYwMV9kYXRhLAotCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCi0JfSwKLX07Ci0KLS8qCi0gKiBUQzM1ODkzCi0gKi8KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1aWJfa2V5bWFwW10gPSB7Ci0JS0VZKDMsIDEsIEtFWV9FTkQpLAotCUtFWSg0LCAxLCBLRVlfUE9XRVIpLAotCUtFWSg2LCA0LCBLRVlfVk9MVU1FRE9XTiksCi0JS0VZKDQsIDIsIEtFWV9FTUFJTCksCi0JS0VZKDMsIDMsIEtFWV9SSUdIVCksCi0JS0VZKDIsIDUsIEtFWV9CQUNLU1BBQ0UpLAotCi0JS0VZKDYsIDcsIEtFWV9NRU5VKSwKLQlLRVkoNSwgMCwgS0VZX0VOVEVSKSwKLQlLRVkoNCwgMywgS0VZXzApLAotCUtFWSgzLCA0LCBLRVlfRE9UKSwKLQlLRVkoNSwgMiwgS0VZX1VQKSwKLQlLRVkoMywgNSwgS0VZX0RPV04pLAotCi0JS0VZKDQsIDUsIEtFWV9TRU5EKSwKLQlLRVkoMCwgNSwgS0VZX0JBQ0spLAotCUtFWSg2LCAyLCBLRVlfVk9MVU1FVVApLAotCUtFWSgxLCAzLCBLRVlfU1BBQ0UpLAotCUtFWSg3LCA2LCBLRVlfTEVGVCksCi0JS0VZKDUsIDUsIEtFWV9TRUFSQ0gpLAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgdWliX2tleW1hcF9kYXRhID0gewotCS5rZXltYXAgICAgICAgICA9IHVpYl9rZXltYXAsCi0JLmtleW1hcF9zaXplICAgID0gQVJSQVlfU0laRSh1aWJfa2V5bWFwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGMzNTg5eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSB0YzM1ODkzX2RhdGEgPSB7Ci0JLmtyb3cgPSBUQ19LUERfUk9XUywKLQkua2NvbCA9IFRDX0tQRF9DT0xVTU5TLAotCS5kZWJvdW5jZV9wZXJpb2QgPSBUQ19LUERfREVCT1VOQ0VfUEVSSU9ELAotCS5zZXR0bGVfdGltZSA9IFRDX0tQRF9TRVRUTEVfVElNRSwKLQkuaXJxdHlwZSA9IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCS5lbmFibGVfd2FrZXVwID0gdHJ1ZSwKLQkua2V5bWFwX2RhdGEgICAgPSAmdWliX2tleW1hcF9kYXRhLAotCS5ub19hdXRvcmVwZWF0ICA9IHRydWUsCi19OwotCi1zdGF0aWMgc3RydWN0IHRjMzU4OXhfcGxhdGZvcm1fZGF0YSB0YzM1ODl4X2tleXBhZF9kYXRhID0gewotCS5ibG9jayA9IFRDMzU4OXhfQkxPQ0tfS0VZUEFELAotCS5rZXlwYWQgPSAmdGMzNTg5M19kYXRhLAotCS5pcnFfYmFzZSA9IE1PUDUwMF9FR1BJT19JUlFfQkFTRSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbW9wNTAwX2kyYzBfZGV2aWNlc191aWJbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJ0YzM1ODl4IiwgMHg0NCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnRjMzU4OXhfa2V5cGFkX2RhdGEsCi0JCS5pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKDIxOCksCi0JCS5mbGFncyA9IEkyQ19DTElFTlRfV0FLRSwKLQl9LAotfTsKLQotdm9pZCBtb3A1MDBfa2V5cGFkX2luaXQodm9pZCkKLXsKLQlkYjg1MDBfYWRkX3NrZV9rZXlwYWQoJnNrZV9rZXlwYWRfYm9hcmQpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbW9wNTAwX2kyYzBfZGV2aWNlc19zdHVpYiwKLQkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfZGV2aWNlc19zdHVpYikpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbW9wNTAwX2kyYzBfZGV2aWNlc191aWIsCi0JCQlBUlJBWV9TSVpFKG1vcDUwMF9pMmMwX2RldmljZXNfdWliKSk7Ci0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXBpbnMuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXBpbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDRjZjFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtcGlucy5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCisgKgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPHBsYXQvcGluY2ZnLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSAicGlucy1kYjg1MDAuaCIKKworc3RhdGljIHBpbl9jZmdfdCBtb3A1MDBfcGluc19jb21tb25bXSA9IHsKKwkvKiBJMkMgKi8KKwlHUElPMTQ3X0kyQzBfU0NMLAorCUdQSU8xNDhfSTJDMF9TREEsCisJR1BJTzE2X0kyQzFfU0NMLAorCUdQSU8xN19JMkMxX1NEQSwKKwlHUElPMTBfSTJDMl9TREEsCisJR1BJTzExX0kyQzJfU0NMLAorCUdQSU8yMjlfSTJDM19TREEsCisJR1BJTzIzMF9JMkMzX1NDTCwKKworCS8qIE1TUDAgKi8KKwlHUElPMTJfTVNQMF9UWEQsCisJR1BJTzEzX01TUDBfVEZTLAorCUdQSU8xNF9NU1AwX1RDSywKKwlHUElPMTVfTVNQMF9SWEQsCisKKwkvKiBNU1AyOiBIRE1JICovCisJR1BJTzE5M19NU1AyX1RYRCwKKwlHUElPMTk0X01TUDJfVENLLAorCUdQSU8xOTVfTVNQMl9URlMsCisJR1BJTzE5Nl9NU1AyX1JYRCB8IFBJTl9PVVRQVVRfTE9XLAorCisJLyogVG91Y2ggc2NyZWVuIElOVEVSRkFDRSAqLworCUdQSU84NF9HUElPCXwgUElOX0lOUFVUX1BVTExVUCwgLyogVE9VQ0hfSU5UMSAqLworCisJLyogU1RNUEUxNjAxL3RjMzU4OTMga2V5cGFkICBJUlEgKi8KKwlHUElPMjE4X0dQSU8JfCBQSU5fSU5QVVRfUFVMTFVQLAorCisJLyogTU1DMCAoTWljcm9TRCBjYXJkKSAqLworCUdQSU8xOF9NQzBfQ01ERElSCXwgUElOX09VVFBVVF9ISUdILAorCUdQSU8xOV9NQzBfREFUMERJUgl8IFBJTl9PVVRQVVRfSElHSCwKKwlHUElPMjBfTUMwX0RBVDJESVIJfCBQSU5fT1VUUFVUX0hJR0gsCisKKwlHUElPMjJfTUMwX0ZCQ0xLCXwgUElOX0lOUFVUX05PUFVMTCwKKwlHUElPMjNfTUMwX0NMSwkJfCBQSU5fT1VUUFVUX0xPVywKKwlHUElPMjRfTUMwX0NNRAkJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yNV9NQzBfREFUMAkJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yNl9NQzBfREFUMQkJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yN19NQzBfREFUMgkJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yOF9NQzBfREFUMwkJfCBQSU5fSU5QVVRfUFVMTFVQLAorCisJLyogU0RJMSAoU0RJTykgKi8KKwlHUElPMjA4X01DMV9DTEsJCXwgUElOX09VVFBVVF9MT1csCisJR1BJTzIwOV9NQzFfRkJDTEsJfCBQSU5fSU5QVVRfTk9QVUxMLAorCUdQSU8yMTBfTUMxX0NNRAkJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yMTFfTUMxX0RBVDAJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yMTJfTUMxX0RBVDEJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yMTNfTUMxX0RBVDIJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yMTRfTUMxX0RBVDMJfCBQSU5fSU5QVVRfUFVMTFVQLAorCisJLyogTU1DMiAoT24tYm9hcmQgREFUQSBJTlRFUkZBQ0UgZU1NQykgKi8KKwlHUElPMTI4X01DMl9DTEsJCXwgUElOX09VVFBVVF9MT1csCisJR1BJTzEyOV9NQzJfQ01ECQl8IFBJTl9JTlBVVF9QVUxMVVAsCisJR1BJTzEzMF9NQzJfRkJDTEsJfCBQSU5fSU5QVVRfTk9QVUxMLAorCUdQSU8xMzFfTUMyX0RBVDAJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8xMzJfTUMyX0RBVDEJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8xMzNfTUMyX0RBVDIJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8xMzRfTUMyX0RBVDMJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8xMzVfTUMyX0RBVDQJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8xMzZfTUMyX0RBVDUJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8xMzdfTUMyX0RBVDYJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8xMzhfTUMyX0RBVDcJfCBQSU5fSU5QVVRfUFVMTFVQLAorCisJLyogTU1DNCAoT24tYm9hcmQgU1RPUkFHRSBJTlRFUkZBQ0UgZU1NQykgKi8KKwlHUElPMTk3X01DNF9EQVQzCXwgUElOX0lOUFVUX1BVTExVUCwKKwlHUElPMTk4X01DNF9EQVQyCXwgUElOX0lOUFVUX1BVTExVUCwKKwlHUElPMTk5X01DNF9EQVQxCXwgUElOX0lOUFVUX1BVTExVUCwKKwlHUElPMjAwX01DNF9EQVQwCXwgUElOX0lOUFVUX1BVTExVUCwKKwlHUElPMjAxX01DNF9DTUQJCXwgUElOX0lOUFVUX1BVTExVUCwKKwlHUElPMjAyX01DNF9GQkNMSwl8IFBJTl9JTlBVVF9OT1BVTEwsCisJR1BJTzIwM19NQzRfQ0xLCQl8IFBJTl9PVVRQVVRfTE9XLAorCUdQSU8yMDRfTUM0X0RBVDcJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yMDVfTUM0X0RBVDYJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yMDZfTUM0X0RBVDUJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8yMDdfTUM0X0RBVDQJfCBQSU5fSU5QVVRfUFVMTFVQLAorCisJLyogU0tFIGtleXBhZCAqLworCUdQSU8xNTNfS1BfSTcsCisJR1BJTzE1NF9LUF9JNiwKKwlHUElPMTU1X0tQX0k1LAorCUdQSU8xNTZfS1BfSTQsCisJR1BJTzE1N19LUF9PNywKKwlHUElPMTU4X0tQX082LAorCUdQSU8xNTlfS1BfTzUsCisJR1BJTzE2MF9LUF9PNCwKKwlHUElPMTYxX0tQX0kzLAorCUdQSU8xNjJfS1BfSTIsCisJR1BJTzE2M19LUF9JMSwKKwlHUElPMTY0X0tQX0kwLAorCUdQSU8xNjVfS1BfTzMsCisJR1BJTzE2Nl9LUF9PMiwKKwlHUElPMTY3X0tQX08xLAorCUdQSU8xNjhfS1BfTzAsCisKKwkvKiBVQVJUICovCisJR1BJTzBfVTBfQ1RTbgl8IFBJTl9JTlBVVF9QVUxMVVAsCisJR1BJTzFfVTBfUlRTbgl8IFBJTl9PVVRQVVRfSElHSCwKKwlHUElPMl9VMF9SWEQJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8zX1UwX1RYRAl8IFBJTl9PVVRQVVRfSElHSCwKKworCUdQSU8yOV9VMl9SWEQJfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8zMF9VMl9UWEQJfCBQSU5fT1VUUFVUX0hJR0gsCisJR1BJTzMxX1UyX0NUU24JfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU8zMl9VMl9SVFNuCXwgUElOX09VVFBVVF9ISUdILAorCisJLyogRGlzcGxheSAmIEhETUkgSFcgc3luYyAqLworCUdQSU82OF9MQ0RfVlNJMAl8IFBJTl9JTlBVVF9QVUxMVVAsCisJR1BJTzY5X0xDRF9WU0kxCXwgUElOX0lOUFVUX1BVTExVUCwKK307CisKK3N0YXRpYyBwaW5fY2ZnX3QgbW9wNTAwX3BpbnNfZGVmYXVsdFtdID0geworCS8qIFNTUDAgKi8KKwlHUElPMTQzX1NTUDBfQ0xLLAorCUdQSU8xNDRfU1NQMF9GUk0sCisJR1BJTzE0NV9TU1AwX1JYRCB8IFBJTl9QVUxMX0RPV04sCisJR1BJTzE0Nl9TU1AwX1RYRCwKKworCisJR1BJTzIxN19HUElPCXwgUElOX0lOUFVUX1BVTExVUCwgLyogVEMzNTg5MiBJUlEgKi8KKworCS8qIFNESTAgKE1pY3JvU0QgY2FyZCkgKi8KKwlHUElPMjFfTUMwX0RBVDMxRElSCXwgUElOX09VVFBVVF9ISUdILAorCisJLyogVUFSVCAqLworCUdQSU80X1UxX1JYRAl8IFBJTl9JTlBVVF9QVUxMVVAsCisJR1BJTzVfVTFfVFhECXwgUElOX09VVFBVVF9ISUdILAorCUdQSU82X1UxX0NUU24JfCBQSU5fSU5QVVRfUFVMTFVQLAorCUdQSU83X1UxX1JUU24JfCBQSU5fT1VUUFVUX0hJR0gsCit9OworCitzdGF0aWMgcGluX2NmZ190IG1vcDUwMF9waW5zX2hyZWZ2NjBbXSA9IHsKKwkvKiBXTEFOICovCisJR1BJTzRfR1BJTwkJfCBQSU5fSU5QVVRfUFVMTFVQLC8qIFdMQU5fSVJRICovCisJR1BJTzg1X0dQSU8JCXwgUElOX09VVFBVVF9MT1csLyogV0xBTl9FTkEgKi8KKworCS8qIFhFTk9OIEZsYXNoZ3VuIElOVEVSRkFDRSAqLworCUdQSU82X0lQX0dQSU8wCXwgUElOX0lOUFVUX1BVTExVUCwvKiBYRU5PTl9GTEFTSF9JRCAqLworCUdQSU83X0lQX0dQSU8xCXwgUElOX0lOUFVUX1BVTExVUCwvKiBYRU5PTl9SRUFEWSAqLworCUdQSU8xNzBfR1BJTwl8IFBJTl9PVVRQVVRfTE9XLCAvKiBYRU5PTl9DSEFSR0UgKi8KKworCS8qIEFzc2lzdGFudCBMRUQgSU5URVJGQUNFICovCisJR1BJTzIxX0dQSU8gfCBQSU5fT1VUUFVUX0xPVywgIC8qIFhFTk9OX0VOMSAqLworCUdQSU82NF9JUF9HUElPNCB8IFBJTl9PVVRQVVRfTE9XLCAgLyogWEVOT05fRU4yICovCisKKwkvKiBNYWduZXRvbWV0ZXIgKi8KKwlHUElPMzFfR1BJTyB8IFBJTl9JTlBVVF9QVUxMVVAsICAvKiBtYWduZXRvbWV0ZXJfSU5UICovCisJR1BJTzMyX0dQSU8gfCBQSU5fSU5QVVRfUFVMTERPV04sIC8qIE1hZ25ldG9tZXRlciBEUkRZICovCisKKwkvKiBEaXNwbGF5IEludGVyZmFjZSAqLworCUdQSU82NV9HUElPCQl8IFBJTl9PVVRQVVRfTE9XLCAvKiBESVNQMSBSU1QgKi8KKwlHUElPNjZfR1BJTwkJfCBQSU5fT1VUUFVUX0xPVywgLyogRElTUDIgUlNUICovCisKKwkvKiBUb3VjaCBzY3JlZW4gSU5URVJGQUNFICovCisJR1BJTzE0M19HUElPCXwgUElOX09VVFBVVF9MT1csLypUT1VDSF9SU1QxICovCisKKwkvKiBUb3VjaCBzY3JlZW4gSU5URVJGQUNFIDIgKi8KKwlHUElPNjdfR1BJTwl8IFBJTl9JTlBVVF9QVUxMVVAsIC8qIFRPVUNIX0lOVDIgKi8KKwlHUElPMTQ2X0dQSU8JfCBQSU5fT1VUUFVUX0xPVywvKlRPVUNIX1JTVDIgKi8KKworCS8qIEVUTV9QVE1fVFJBQ0UgSU5URVJGQUNFICovCisJR1BJTzcwX0dQSU8JfCBQSU5fT1VUUFVUX0xPVywvKiBFVE1fUFRNX0RBVEEyMyAqLworCUdQSU83MV9HUElPCXwgUElOX09VVFBVVF9MT1csLyogRVRNX1BUTV9EQVRBMjIgKi8KKwlHUElPNzJfR1BJTwl8IFBJTl9PVVRQVVRfTE9XLC8qIEVUTV9QVE1fREFUQTIxICovCisJR1BJTzczX0dQSU8JfCBQSU5fT1VUUFVUX0xPVywvKiBFVE1fUFRNX0RBVEEyMCAqLworCUdQSU83NF9HUElPCXwgUElOX09VVFBVVF9MT1csLyogRVRNX1BUTV9EQVRBMTkgKi8KKworCS8qIE5BSEogSU5URVJGQUNFICovCisJR1BJTzc2X0dQSU8JfCBQSU5fT1VUUFVUX0xPVywvKiBOQUhKX0NUUkwgKi8KKwlHUElPMjE2X0dQSU8JfCBQSU5fT1VUUFVUX0hJR0gsLyogTkFISl9DVFJMX0lOViAqLworCisJLyogTkZDIElOVEVSRkFDRSAqLworCUdQSU83N19HUElPCXwgUElOX09VVFBVVF9MT1csIC8qIE5GQ19FTkEgKi8KKwlHUElPMTQ0X0dQSU8JfCBQSU5fSU5QVVRfUFVMTERPV04sIC8qIE5GQ19JUlEgKi8KKwlHUElPMTQyX0dQSU8JfCBQSU5fT1VUUFVUX0xPVywgLyogTkZDX1JFU0VUICovCisKKwkvKiBLZXlib2FyZCBNQVRSSVggSU5URVJGQUNFICovCisJR1BJTzkwX01DNV9DTUQJfCBQSU5fT1VUUFVUX0xPVywgLyogS1BfT18xICovCisJR1BJTzg3X01DNV9EQVQxCXwgUElOX09VVFBVVF9MT1csIC8qIEtQX09fMiAqLworCUdQSU84Nl9NQzVfREFUMAl8IFBJTl9PVVRQVVRfTE9XLCAvKiBLUF9PXzMgKi8KKwlHUElPOTZfS1BfTzYJfCBQSU5fT1VUUFVUX0xPVywgLyogS1BfT182ICovCisJR1BJTzk0X0tQX083CXwgUElOX09VVFBVVF9MT1csIC8qIEtQX09fNyAqLworCUdQSU85M19NQzVfREFUNAl8IFBJTl9JTlBVVF9QVUxMVVAsIC8qIEtQX0lfMCAqLworCUdQSU84OV9NQzVfREFUMwl8IFBJTl9JTlBVVF9QVUxMVVAsIC8qIEtQX0lfMiAqLworCUdQSU84OF9NQzVfREFUMgl8IFBJTl9JTlBVVF9QVUxMVVAsIC8qIEtQX0lfMyAqLworCUdQSU85MV9HUElPCXwgUElOX0lOUFVUX1BVTExVUCwgLyogRk9SQ0VfU0VOU0lOR19JTlQgKi8KKwlHUElPOTJfR1BJTwl8IFBJTl9PVVRQVVRfTE9XLCAvKiBGT1JDRV9TRU5TSU5HX1JTVCAqLworCUdQSU85N19HUElPCXwgUElOX09VVFBVVF9MT1csIC8qIEZPUkNFX1NFTlNJTkdfV1UgKi8KKworCS8qIERpUHJvIFNlbnNvciBJbnRlcmZhY2UgKi8KKwlHUElPMTM5X0dQSU8JfCBQSU5fSU5QVVRfUFVMTFVQLCAvKiBESVBST19JTlQgKi8KKworCS8qIEhBTCBTV0lUQ0ggSU5URVJGQUNFICovCisJR1BJTzE0NV9HUElPCXwgUElOX0lOUFVUX1BVTExET1dOLC8qIEhBTF9TVyAqLworCisJLyogQXVkaW8gQW1wbGlmaWVyIEludGVyZmFjZSAqLworCUdQSU8xNDlfR1BJTwl8IFBJTl9PVVRQVVRfTE9XLCAvKiBWQVVESU9fSEZfRU4gKi8KKworCS8qIEdCRiBJTlRFUkZBQ0UgKi8KKwlHUElPMTcxX0dQSU8JfCBQSU5fT1VUUFVUX0xPVywgLyogR0JGX0VOQV9SRVNFVCAqLworCisJLyogTVNQIDogSERUViBJTlRFUkZBQ0UgKi8KKwlHUElPMTkyX0dQSU8JfCBQSU5fSU5QVVRfUFVMTERPV04sCisKKwkvKiBBQ0NFTEVST01FVEVSX0lOVEVSRkFDRSAqLworCUdQSU84Ml9HUElPCQl8IFBJTl9JTlBVVF9QVUxMVVAsIC8qIEFDQ19JTlQxICovCisJR1BJTzgzX0dQSU8JCXwgUElOX0lOUFVUX1BVTExVUCwgLyogQUNDX0lOVDIgKi8KKworCS8qIFByb3hpbWl0eSBTZW5zb3IgKi8KKwlHUElPMjE3X0dQSU8JCXwgUElOX0lOUFVUX1BVTExVUCwKKworCit9OworCit2b2lkIF9faW5pdCBtb3A1MDBfcGluc19pbml0KHZvaWQpCit7CisJbm1rX2NvbmZpZ19waW5zKG1vcDUwMF9waW5zX2NvbW1vbiwKKwkJCQlBUlJBWV9TSVpFKG1vcDUwMF9waW5zX2NvbW1vbikpOworCWlmIChtYWNoaW5lX2lzX2hyZWZ2NjAoKSkKKwkJbm1rX2NvbmZpZ19waW5zKG1vcDUwMF9waW5zX2hyZWZ2NjAsCisJCQkJQVJSQVlfU0laRShtb3A1MDBfcGluc19ocmVmdjYwKSk7CisJZWxzZQorCQlubWtfY29uZmlnX3BpbnMobW9wNTAwX3BpbnNfZGVmYXVsdCwKKwkJCQlBUlJBWV9TSVpFKG1vcDUwMF9waW5zX2RlZmF1bHQpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXJlZ3VsYXRvcnMuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXJlZ3VsYXRvcnMuYwppbmRleCA1MzM5NjdjLi44NzVjOTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1yZWd1bGF0b3JzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtcmVndWxhdG9ycy5jCkBAIC0xMSw2ICsxMSw1NiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2FiODUwMC5oPgorI2luY2x1ZGUgImJvYXJkLW1vcDUwMC1yZWd1bGF0b3JzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBhYjg1MDBfdmF1eDFfY29uc3VtZXJzW10gPSB7CisJLyogRXh0ZXJuYWwgZGlzcGxheXMsIGNvbm5lY3RvciBvbiBib2FyZCAydjUgcG93ZXIgc3VwcGx5ICovCisJUkVHVUxBVE9SX1NVUFBMWSgidmF1eDEydjUiLCAibWNkZS4wIiksCisJLyogU0ZINzc0MSBwcm94aW1pdHkgc2Vuc29yICovCisJUkVHVUxBVE9SX1NVUFBMWSgidmNjIiwgImdwaW8ta2V5cy4wIiksCisJLyogQkgxNzgwR0xTIGFtYmllbnQgbGlnaHQgc2Vuc29yICovCisJUkVHVUxBVE9SX1NVUFBMWSgidmNjIiwgIjItMDAyOSIpLAorCS8qIGxzbTMwM2RsaCBhY2NlbGVyb21ldGVyICovCisJUkVHVUxBVE9SX1NVUFBMWSgidmRkIiwgIjMtMDAxOCIpLAorCS8qIGxzbTMwM2RsaCBtYWduZXRvbWV0ZXIgKi8KKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGQiLCAiMy0wMDFlIiksCisJLyogUm9obSBCVTIxMDEzIFRvdWNoc2NyZWVuIGRldmljZXMgKi8KKwlSRUdVTEFUT1JfU1VQUExZKCJhdmRkIiwgIjMtMDA1YyIpLAorCVJFR1VMQVRPUl9TVVBQTFkoImF2ZGQiLCAiMy0wMDVkIiksCisJLyogU3luYXB0aWNzIFJNSTQgVG91Y2hzY3JlZW4gZGV2aWNlICovCisJUkVHVUxBVE9SX1NVUFBMWSgidmRkIiwgIjMtMDA0YiIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGFiODUwMF92YXV4Ml9jb25zdW1lcnNbXSA9IHsKKwkvKiBPbi1ib2FyZCBlTU1DIHBvd2VyICovCisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJzZGk0IiksCisJLyogQUI4NTAwIGF1ZGlvIGNvZGVjICovCisJUkVHVUxBVE9SX1NVUFBMWSgidmNjLU4yMTU4IiwgImFiODUwMC1jb2RlYy4wIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYWI4NTAwX3ZhdXgzX2NvbnN1bWVyc1tdID0geworCS8qIEV4dGVybmFsIE1NQyBzbG90IHBvd2VyICovCisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJzZGkwIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYWI4NTAwX3Z0dm91dF9jb25zdW1lcnNbXSA9IHsKKwkvKiBUVi1vdXQgREVOQyBzdXBwbHkgKi8KKwlSRUdVTEFUT1JfU1VQUExZKCJ2dHZvdXQiLCAiYWI4NTAwLWRlbmMuMCIpLAorCS8qIEludGVybmFsIGdlbmVyYWwtcHVycG9zZSBBREMgKi8KKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRhZGMiLCAiYWI4NTAwLWdwYWRjLjAiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBhYjg1MDBfdmludGNvcmVfY29uc3VtZXJzW10gPSB7CisJLyogU29DIGNvcmUgc3VwcGx5LCBubyBkZXZpY2UgKi8KKwlSRUdVTEFUT1JfU1VQUExZKCJ2LWludGNvcmUiLCBOVUxMKSwKKwkvKiBVU0IgVHJhbnNjaWV2ZXIgKi8KKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGR1bHBpdmlvMTgiLCAiYWI4NTAwLXVzYi4wIiksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYWI4NTAwX3ZhbmFfY29uc3VtZXJzW10gPSB7CisJLyogRXh0ZXJuYWwgZGlzcGxheXMsIGNvbm5lY3RvciBvbiBib2FyZCwgMXY4IHBvd2VyIHN1cHBseSAqLworCVJFR1VMQVRPUl9TVVBQTFkoInZzbXBzMiIsICJtY2RlLjAiKSwKK307CiAKIC8qIEFCODUwMCByZWd1bGF0b3JzICovCiBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhYjg1MDBfcmVndWxhdG9yc1tBQjg1MDBfTlVNX1JFR1VMQVRPUlNdID0gewpAQCAtMjMsNiArNzMsOCBAQAogCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKIAkJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAkJfSwKKwkJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoYWI4NTAwX3ZhdXgxX2NvbnN1bWVycyksCisJCS5jb25zdW1lcl9zdXBwbGllcyA9IGFiODUwMF92YXV4MV9jb25zdW1lcnMsCiAJfSwKIAkvKiBzdXBwbGllcyB0byB0aGUgb24tYm9hcmQgZU1NQyAqLwogCVtBQjg1MDBfTERPX0FVWDJdID0gewpAQCAtMzMsNiArODUsOCBAQAogCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKIAkJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAkJfSwKKwkJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoYWI4NTAwX3ZhdXgyX2NvbnN1bWVycyksCisJCS5jb25zdW1lcl9zdXBwbGllcyA9IGFiODUwMF92YXV4Ml9jb25zdW1lcnMsCiAJfSwKIAkvKiBzdXBwbHkgZm9yIFZBVVgzLCBzdXBwbGllcyB0byBTRGNhcmQgc2xvdHMgKi8KIAlbQUI4NTAwX0xET19BVVgzXSA9IHsKQEAgLTQzLDYgKzk3LDggQEAKIAkJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CiAJCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJCX0sCisJCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGFiODUwMF92YXV4M19jb25zdW1lcnMpLAorCQkuY29uc3VtZXJfc3VwcGxpZXMgPSBhYjg1MDBfdmF1eDNfY29uc3VtZXJzLAogCX0sCiAJLyogc3VwcGx5IGZvciB0dm91dCwgZ3BhZGMsIFRWT1VUIExETyAqLwogCVtBQjg1MDBfTERPX1RWT1VUXSA9IHsKQEAgLTUwLDYgKzEwNiw4IEBACiAJCQkubmFtZSA9ICJWLVRWT1VUIiwKIAkJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCQl9LAorCQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShhYjg1MDBfdnR2b3V0X2NvbnN1bWVycyksCisJCS5jb25zdW1lcl9zdXBwbGllcyA9IGFiODUwMF92dHZvdXRfY29uc3VtZXJzLAogCX0sCiAJLyogc3VwcGx5IGZvciBhYjg1MDAtdmF1ZGlvLCBWQVVESU8gTERPICovCiAJW0FCODUwMF9MRE9fQVVESU9dID0gewpAQCAtODUsNiArMTQzLDggQEAKIAkJCS5uYW1lID0gIlYtSU5UQ09SRSIsCiAJCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAkJfSwKKwkJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoYWI4NTAwX3ZpbnRjb3JlX2NvbnN1bWVycyksCisJCS5jb25zdW1lcl9zdXBwbGllcyA9IGFiODUwMF92aW50Y29yZV9jb25zdW1lcnMsCiAJfSwKIAkvKiBzdXBwbHkgZm9yIFU4NTAwIENTSS9EU0ksIFZBTkEgTERPICovCiAJW0FCODUwMF9MRE9fQU5BXSA9IHsKQEAgLTkyLDUgKzE1Miw3IEBACiAJCQkubmFtZSA9ICJWLUNTSS9EU0kiLAogCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJCX0sCisJCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGFiODUwMF92YW5hX2NvbnN1bWVycyksCisJCS5jb25zdW1lcl9zdXBwbGllcyA9IGFiODUwMF92YW5hX2NvbnN1bWVycywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXNkaS5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtc2RpLmMKaW5kZXggNGI5OTY2Ny4uYmYwYjAyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtc2RpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtc2RpLmMKQEAgLTEyLDU2ICsxMiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxwbGF0L3BpbmNmZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8cGxhdC9zdGVfZG1hNDAuaD4KICNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWRiODUwMC5oIgotI2luY2x1ZGUgInBpbnMtZGI4NTAwLmgiCiAjaW5jbHVkZSAiYm9hcmQtbW9wNTAwLmgiCi0KLXN0YXRpYyBwaW5fY2ZnX3QgbW9wNTAwX3NkaV9waW5zW10gPSB7Ci0JLyogU0RJMCAoTWljcm9TRCBzbG90KSAqLwotCUdQSU8xOF9NQzBfQ01ERElSLAotCUdQSU8xOV9NQzBfREFUMERJUiwKLQlHUElPMjBfTUMwX0RBVDJESVIsCi0JR1BJTzIxX01DMF9EQVQzMURJUiwKLQlHUElPMjJfTUMwX0ZCQ0xLLAotCUdQSU8yM19NQzBfQ0xLLAotCUdQSU8yNF9NQzBfQ01ELAotCUdQSU8yNV9NQzBfREFUMCwKLQlHUElPMjZfTUMwX0RBVDEsCi0JR1BJTzI3X01DMF9EQVQyLAotCUdQSU8yOF9NQzBfREFUMywKLQotCS8qIFNESTQgKG9uLWJvYXJkIGVNTUMpICovCi0JR1BJTzE5N19NQzRfREFUMywKLQlHUElPMTk4X01DNF9EQVQyLAotCUdQSU8xOTlfTUM0X0RBVDEsCi0JR1BJTzIwMF9NQzRfREFUMCwKLQlHUElPMjAxX01DNF9DTUQsCi0JR1BJTzIwMl9NQzRfRkJDTEssCi0JR1BJTzIwM19NQzRfQ0xLLAotCUdQSU8yMDRfTUM0X0RBVDcsCi0JR1BJTzIwNV9NQzRfREFUNiwKLQlHUElPMjA2X01DNF9EQVQ1LAotCUdQSU8yMDdfTUM0X0RBVDQsCi19OwotCi1zdGF0aWMgcGluX2NmZ190IG1vcDUwMF9zZGkyX3BpbnNbXSA9IHsKLQkvKiBTREkyIChQT1AgZU1NQykgKi8KLQlHUElPMTI4X01DMl9DTEssCi0JR1BJTzEyOV9NQzJfQ01ELAotCUdQSU8xMzBfTUMyX0ZCQ0xLLAotCUdQSU8xMzFfTUMyX0RBVDAsCi0JR1BJTzEzMl9NQzJfREFUMSwKLQlHUElPMTMzX01DMl9EQVQyLAotCUdQSU8xMzRfTUMyX0RBVDMsCi0JR1BJTzEzNV9NQzJfREFUNCwKLQlHUElPMTM2X01DMl9EQVQ1LAotCUdQSU8xMzdfTUMyX0RBVDYsCi0JR1BJTzEzOF9NQzJfREFUNywKLX07CisjaW5jbHVkZSAic3RlLWRtYTQwLWRiODUwMC5oIgogCiAvKgogICogU0RJIDAgKE1pY3JvU0Qgc2xvdCkKQEAgLTg2LDQ4ICs0NCwxMzQgQEAKIAkgICAgICAgTUNJX0RBVEEyRElSRU4gfCBNQ0lfREFUQTMxRElSRU47CiB9CiAKKyNpZmRlZiBDT05GSUdfU1RFX0RNQTQwCitzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgbW9wNTAwX3NkaTBfZG1hX2NmZ19yeCA9IHsKKwkubW9kZSA9IFNURURNQTQwX01PREVfTE9HSUNBTCwKKwkuZGlyID0gU1RFRE1BNDBfUEVSSVBIX1RPX01FTSwKKwkuc3JjX2Rldl90eXBlID0gREI4NTAwX0RNQV9ERVYyOV9TRF9NTTBfUlgsCisJLmRzdF9kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9EU1RfTUVNT1JZLAorCS5zcmNfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfV09SRF9XSURUSCwKKwkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsCit9OworCitzdGF0aWMgc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIG1vcDUwMF9zZGkwX2RtYV9jZmdfdHggPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCisJLmRpciA9IFNURURNQTQwX01FTV9UT19QRVJJUEgsCisJLnNyY19kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9TUkNfTUVNT1JZLAorCS5kc3RfZGV2X3R5cGUgPSBEQjg1MDBfRE1BX0RFVjI5X1NEX01NMF9UWCwKKwkuc3JjX2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsCisJLmRzdF9pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9XT1JEX1dJRFRILAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtb3A1MDBfc2RpMF9kYXRhID0gewogCS52ZGRfaGFuZGxlcgk9IG1vcDUwMF9zZGkwX3ZkZF9oYW5kbGVyLAogCS5vY3JfbWFzawk9IE1NQ19WRERfMjlfMzAsCiAJLmZfbWF4CQk9IDEwMDAwMDAwMCwKIAkuY2FwYWJpbGl0aWVzCT0gTU1DX0NBUF80X0JJVF9EQVRBLAotCS5ncGlvX2NkCT0gR1BJT19TRE1NQ19DRCwKIAkuZ3Bpb193cAk9IC0xLAorI2lmZGVmIENPTkZJR19TVEVfRE1BNDAKKwkuZG1hX2ZpbHRlcgk9IHN0ZWRtYTQwX2ZpbHRlciwKKwkuZG1hX3J4X3BhcmFtCT0gJm1vcDUwMF9zZGkwX2RtYV9jZmdfcngsCisJLmRtYV90eF9wYXJhbQk9ICZtb3A1MDBfc2RpMF9kbWFfY2ZnX3R4LAorI2VuZGlmCiB9OwogCi12b2lkIG1vcDUwMF9zZGlfdGMzNTg5Ml9pbml0KHZvaWQpCisvKiBHUElPIHBpbnMgdXNlZCBieSB0aGUgc2RpMCBsZXZlbCBzaGlmdGVyICovCitzdGF0aWMgaW50IHNkaTBfZW4gPSAtMTsKK3N0YXRpYyBpbnQgc2RpMF92c2VsID0gLTE7CisKK3N0YXRpYyB2b2lkIHNkaTBfY29uZmlndXJlKHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1NETU1DX0VOLCAiU0RNTUNfRU4iKTsKKwlyZXQgPSBncGlvX3JlcXVlc3Qoc2RpMF9lbiwgImxldmVsIHNoaWZ0ZXIgZW5hYmxlIik7CiAJaWYgKCFyZXQpCi0JCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1NETU1DXzFWOF8zVl9TRUwsCi0JCQkJICAgIkdQSU9fU0RNTUNfMVY4XzNWX1NFTCIpOwotCWlmIChyZXQpCisJCXJldCA9IGdwaW9fcmVxdWVzdChzZGkwX3ZzZWwsCisJCQkJICAgImxldmVsIHNoaWZ0ZXIgMXY4LTN2IHNlbGVjdCIpOworCisJaWYgKHJldCkgeworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gY29uZmlnIHNkaTAgZ3Bpb3MgZm9yIGxldmVsIHNoaWZ0ZXIuXG4iKTsKIAkJcmV0dXJuOworCX0KIAotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1NETU1DXzFWOF8zVl9TRUwsIDEpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1NETU1DX0VOLCAwKTsKKwkvKiBTZWxlY3QgdGhlIGRlZmF1bHQgMi45ViBhbmQgZW5hYmxlIGxldmVsIHNoaWZ0ZXIgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoc2RpMF92c2VsLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoc2RpMF9lbiwgMSk7CiAKKwkvKiBBZGQgdGhlIGRldmljZSAqLwogCWRiODUwMF9hZGRfc2RpMCgmbW9wNTAwX3NkaTBfZGF0YSk7CiB9CiAKK3ZvaWQgbW9wNTAwX3NkaV90YzM1ODkyX2luaXQodm9pZCkKK3sKKwltb3A1MDBfc2RpMF9kYXRhLmdwaW9fY2QgPSBHUElPX1NETU1DX0NEOworCXNkaTBfZW4gPSBHUElPX1NETU1DX0VOOworCXNkaTBfdnNlbCA9IEdQSU9fU0RNTUNfMVY4XzNWX1NFTDsKKwlzZGkwX2NvbmZpZ3VyZSgpOworfQorCiAvKgogICogU0RJIDIgKFBPUCBlTU1DLCBub3Qgb24gREI4NTAwZWQpCiAgKi8KIAorI2lmZGVmIENPTkZJR19TVEVfRE1BNDAKK3N0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyBtb3A1MDBfc2RpMl9kbWFfY2ZnX3J4ID0geworCS5tb2RlID0gU1RFRE1BNDBfTU9ERV9MT0dJQ0FMLAorCS5kaXIgPSBTVEVETUE0MF9QRVJJUEhfVE9fTUVNLAorCS5zcmNfZGV2X3R5cGUgPSAgREI4NTAwX0RNQV9ERVYyOF9TRF9NTTJfUlgsCisJLmRzdF9kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9EU1RfTUVNT1JZLAorCS5zcmNfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfV09SRF9XSURUSCwKKwkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsCit9OworCitzdGF0aWMgc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIG1vcDUwMF9zZGkyX2RtYV9jZmdfdHggPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCisJLmRpciA9IFNURURNQTQwX01FTV9UT19QRVJJUEgsCisJLnNyY19kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9TUkNfTUVNT1JZLAorCS5kc3RfZGV2X3R5cGUgPSBEQjg1MDBfRE1BX0RFVjI4X1NEX01NMl9UWCwKKwkuc3JjX2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsCisJLmRzdF9pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9XT1JEX1dJRFRILAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtb3A1MDBfc2RpMl9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMTY1XzE5NSwKIAkuZl9tYXgJCT0gMTAwMDAwMDAwLAogCS5jYXBhYmlsaXRpZXMJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEsCiAJLmdwaW9fY2QJPSAtMSwKIAkuZ3Bpb193cAk9IC0xLAorI2lmZGVmIENPTkZJR19TVEVfRE1BNDAKKwkuZG1hX2ZpbHRlcgk9IHN0ZWRtYTQwX2ZpbHRlciwKKwkuZG1hX3J4X3BhcmFtCT0gJm1vcDUwMF9zZGkyX2RtYV9jZmdfcngsCisJLmRtYV90eF9wYXJhbQk9ICZtb3A1MDBfc2RpMl9kbWFfY2ZnX3R4LAorI2VuZGlmCiB9OwogCiAvKgogICogU0RJIDQgKG9uLWJvYXJkIGVNTUMpCiAgKi8KIAorI2lmZGVmIENPTkZJR19TVEVfRE1BNDAKK3N0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyBtb3A1MDBfc2RpNF9kbWFfY2ZnX3J4ID0geworCS5tb2RlID0gU1RFRE1BNDBfTU9ERV9MT0dJQ0FMLAorCS5kaXIgPSBTVEVETUE0MF9QRVJJUEhfVE9fTUVNLAorCS5zcmNfZGV2X3R5cGUgPSAgREI4NTAwX0RNQV9ERVY0Ml9TRF9NTTRfUlgsCisJLmRzdF9kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9EU1RfTUVNT1JZLAorCS5zcmNfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfV09SRF9XSURUSCwKKwkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsCit9OworCitzdGF0aWMgc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIG1vcDUwMF9zZGk0X2RtYV9jZmdfdHggPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCisJLmRpciA9IFNURURNQTQwX01FTV9UT19QRVJJUEgsCisJLnNyY19kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9TUkNfTUVNT1JZLAorCS5kc3RfZGV2X3R5cGUgPSBEQjg1MDBfRE1BX0RFVjQyX1NEX01NNF9UWCwKKwkuc3JjX2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsCisJLmRzdF9pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9XT1JEX1dJRFRILAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtb3A1MDBfc2RpNF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMjlfMzAsCiAJLmZfbWF4CQk9IDEwMDAwMDAwMCwKQEAgLTEzNSwyNiArMTc5LDMyIEBACiAJCQkgIE1NQ19DQVBfTU1DX0hJR0hTUEVFRCwKIAkuZ3Bpb19jZAk9IC0xLAogCS5ncGlvX3dwCT0gLTEsCisjaWZkZWYgQ09ORklHX1NURV9ETUE0MAorCS5kbWFfZmlsdGVyCT0gc3RlZG1hNDBfZmlsdGVyLAorCS5kbWFfcnhfcGFyYW0JPSAmbW9wNTAwX3NkaTRfZG1hX2NmZ19yeCwKKwkuZG1hX3R4X3BhcmFtCT0gJm1vcDUwMF9zZGk0X2RtYV9jZmdfdHgsCisjZW5kaWYKIH07CiAKIHZvaWQgX19pbml0IG1vcDUwMF9zZGlfaW5pdCh2b2lkKQogewotCW5ta19jb25maWdfcGlucyhtb3A1MDBfc2RpX3BpbnMsIEFSUkFZX1NJWkUobW9wNTAwX3NkaV9waW5zKSk7Ci0KLQkvKgotCSAqIHNkaTAgd2lsbCBmaW5hbGx5IGJlIGFkZGVkIHdoZW4gdGhlIFRDMzU4OTIgaW5pdGlhbGl6ZXMgYW5kIGNhbGxzCi0JICogbW9wNTAwX3NkaV90YzM1ODkyX2luaXQoKSBhYm92ZS4KLQkgKi8KLQotCS8qIFBvUDplZCBlTU1DICovCi0JaWYgKCFjcHVfaXNfdTg1MDBlZCgpKSB7Ci0JCW5ta19jb25maWdfcGlucyhtb3A1MDBfc2RpMl9waW5zLCBBUlJBWV9TSVpFKG1vcDUwMF9zZGkyX3BpbnMpKTsKLQkJLyogUE9QIGVNTUMgb24gdjEuMCBoYXMgcHJvYmxlbXMgd2l0aCBoaWdoIHNwZWVkICovCi0JCWlmICghY3B1X2lzX3U4NTAwdjEwKCkpCi0JCQltb3A1MDBfc2RpMl9kYXRhLmNhcGFiaWxpdGllcyB8PSBNTUNfQ0FQX01NQ19ISUdIU1BFRUQ7Ci0JCWRiODUwMF9hZGRfc2RpMigmbW9wNTAwX3NkaTJfZGF0YSk7Ci0JfQorCS8qIFBvUDplZCBlTU1DIG9uIHRvcCBvZiBEQjg1MDAgdjEuMCBoYXMgcHJvYmxlbXMgd2l0aCBoaWdoIHNwZWVkICovCisJaWYgKCFjcHVfaXNfdTg1MDB2MTAoKSkKKwkJbW9wNTAwX3NkaTJfZGF0YS5jYXBhYmlsaXRpZXMgfD0gTU1DX0NBUF9NTUNfSElHSFNQRUVEOworCWRiODUwMF9hZGRfc2RpMigmbW9wNTAwX3NkaTJfZGF0YSk7CiAKIAkvKiBPbi1ib2FyZCBlTU1DICovCiAJZGI4NTAwX2FkZF9zZGk0KCZtb3A1MDBfc2RpNF9kYXRhKTsKKworCWlmIChtYWNoaW5lX2lzX2hyZWZ2NjAoKSkgeworCQltb3A1MDBfc2RpMF9kYXRhLmdwaW9fY2QgPSBIUkVGVjYwX1NETU1DX0NEX0dQSU87CisJCXNkaTBfZW4gPSBIUkVGVjYwX1NETU1DX0VOX0dQSU87CisJCXNkaTBfdnNlbCA9IEhSRUZWNjBfU0RNTUNfMVY4XzNWX0dQSU87CisJCXNkaTBfY29uZmlndXJlKCk7CisJfQorCS8qCisJICogT24gYm9hcmRzIHdpdGggdGhlIFRDMzU4OTIgR1BJTyBleHBhbmRlciwgc2RpMCB3aWxsIGZpbmFsbHkKKwkgKiBiZSBhZGRlZCB3aGVuIHRoZSBUQzM1ODkyIGluaXRpYWxpemVzIGFuZCBjYWxscworCSAqIG1vcDUwMF9zZGlfdGMzNTg5Ml9pbml0KCkgYWJvdmUuCisJICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1zdHVpYi5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtc3R1aWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzk3OTc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtc3R1aWIuYwpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zdG1wZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L2J1MjEwMTMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJib2FyZC1tb3A1MDAuaCIKKworLyogU1RNUEUvU0tFIGtleXBhZCB1c2UgdGhpcyBrZXkgbGF5b3V0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1vcDUwMF9rZXltYXBbXSA9IHsKKwlLRVkoMiwgNSwgS0VZX0VORCksCisJS0VZKDQsIDEsIEtFWV9QT1dFUiksCisJS0VZKDMsIDUsIEtFWV9WT0xVTUVET1dOKSwKKwlLRVkoMSwgMywgS0VZXzMpLAorCUtFWSg1LCAyLCBLRVlfUklHSFQpLAorCUtFWSg1LCAwLCBLRVlfOSksCisKKwlLRVkoMCwgNSwgS0VZX01FTlUpLAorCUtFWSg3LCA2LCBLRVlfRU5URVIpLAorCUtFWSg0LCA1LCBLRVlfMCksCisJS0VZKDYsIDcsIEtFWV8yKSwKKwlLRVkoMywgNCwgS0VZX1VQKSwKKwlLRVkoMywgMywgS0VZX0RPV04pLAorCisJS0VZKDYsIDQsIEtFWV9TRU5EKSwKKwlLRVkoNiwgMiwgS0VZX0JBQ0spLAorCUtFWSg0LCAyLCBLRVlfVk9MVU1FVVApLAorCUtFWSg1LCA1LCBLRVlfMSksCisJS0VZKDQsIDMsIEtFWV9MRUZUKSwKKwlLRVkoMywgMiwgS0VZXzcpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgbW9wNTAwX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gbW9wNTAwX2tleW1hcCwKKwkua2V5bWFwX3NpemUgICAgPSBBUlJBWV9TSVpFKG1vcDUwMF9rZXltYXApLAorfTsKKy8qCisgKiBTVE1QRTE2MDEKKyAqLworc3RhdGljIHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSBzdG1wZTE2MDFfa2V5cGFkX2RhdGEgPSB7CisJLmRlYm91bmNlX21zICAgID0gNjQsCisJLnNjYW5fY291bnQgICAgID0gOCwKKwkubm9fYXV0b3JlcGVhdCAgPSB0cnVlLAorCS5rZXltYXBfZGF0YSAgICA9ICZtb3A1MDBfa2V5bWFwX2RhdGEsCit9OworCitzdGF0aWMgc3RydWN0IHN0bXBlX3BsYXRmb3JtX2RhdGEgc3RtcGUxNjAxX2RhdGEgPSB7CisJLmlkCQk9IDEsCisJLmJsb2NrcwkJPSBTVE1QRV9CTE9DS19LRVlQQUQsCisJLmlycV90cmlnZ2VyICAgID0gSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJLmlycV9iYXNlICAgICAgID0gTU9QNTAwX1NUTVBFMTYwMV9JUlEoMCksCisJLmtleXBhZAkJPSAmc3RtcGUxNjAxX2tleXBhZF9kYXRhLAorCS5hdXRvc2xlZXAgICAgICA9IHRydWUsCisJLmF1dG9zbGVlcF90aW1lb3V0ID0gMTAyNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtb3A1MDBfaTJjMF9kZXZpY2VzX3N0dWliW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygic3RtcGUxNjAxIiwgMHg0MCksCisJCS5pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKDIxOCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnN0bXBlMTYwMV9kYXRhLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJfSwKK307CisKKy8qCisgKiBCVTIxMDEzIFJPSE0gdG91Y2hzY3JlZW4gaW50ZXJmYWNlIG9uIHRoZSBTVFVJQnMKKyAqLworCisvKiB0cmFja3MgbnVtYmVyIG9mIGJ1MjEwMTMgZGV2aWNlcyBiZWluZyBlbmFibGVkICovCitzdGF0aWMgaW50IGJ1MjEwMTNfZGV2aWNlczsKKworI2RlZmluZSBUT1VDSF9HUElPX1BJTiAgODQKKworI2RlZmluZSBUT1VDSF9YTUFYCTM4NAorI2RlZmluZSBUT1VDSF9ZTUFYCTcwNAorCisjZGVmaW5lIFBSQ01VX0NMT0NLX09DUgkJMHgxQ0MKKyNkZWZpbmUgVFNDX0VYVF9DTE9DS185XzZNSFoJMHg4NDAwMDAKKworLyoqCisgKiBidTIxMDEzX2dwaW9fYm9hcmRfaW5pdCA6IGNvbmZpZ3VyZXMgdGhlIHRvdWNoIHBhbmVsLgorICogQHJlc2V0X3BpbjogcmVzZXQgcGluIG51bWJlcgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb25maWd1cmVzCisgKiB0aGUgdm9sdGFnZSBhbmQgcmVzZXQgdGhlIHRvdWNoIHBhbmVsIGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyBpbnQgYnUyMTAxM19ncGlvX2JvYXJkX2luaXQoaW50IHJlc2V0X3BpbikKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCWJ1MjEwMTNfZGV2aWNlcysrOworCWlmIChidTIxMDEzX2RldmljZXMgPT0gMSkgeworCQlyZXR2YWwgPSBncGlvX3JlcXVlc3QocmVzZXRfcGluLCAidG91Y2hwX3Jlc2V0Iik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlcXVlc3QgZ3BpbyByZXNldF9waW4iKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJcmV0dmFsID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHJlc2V0X3BpbiwgMSk7CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBncGlvIGRpcmVjdGlvbiBmYWlsZWRcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIGJ1MjEwMTNfZ3Bpb19ib2FyZF9leGl0IDogZGVjb25maWd1cmVzIHRoZSB0b3VjaCBwYW5lbCBjb250cm9sbGVyCisgKiBAcmVzZXRfcGluOiByZXNldCBwaW4gbnVtYmVyCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRlY29uZmlndXJlcyB0aGUgY2hpcCBzZWxlY3Rpb24KKyAqIGZvciB0b3VjaCBwYW5lbCBjb250cm9sbGVyLgorICovCitzdGF0aWMgaW50IGJ1MjEwMTNfZ3Bpb19ib2FyZF9leGl0KGludCByZXNldF9waW4pCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoYnUyMTAxM19kZXZpY2VzID09IDEpIHsKKwkJcmV0dmFsID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHJlc2V0X3BpbiwgMCk7CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBncGlvIGRpcmVjdGlvbiBmYWlsZWRcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJZ3Bpb19zZXRfdmFsdWUocmVzZXRfcGluLCAwKTsKKwl9CisJYnUyMTAxM19kZXZpY2VzLS07CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIGJ1MjEwMTNfcmVhZF9waW5fdmFsIDogZ2V0IHRoZSBpbnRlcnJ1cHQgcGluIHZhbHVlCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGdldCB0aGUgaW50ZXJydXB0IHBpbiB2YWx1ZSBmb3IgdG91Y2ggcGFuZWwKKyAqIGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyBpbnQgYnUyMTAxM19yZWFkX3Bpbl92YWwodm9pZCkKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoVE9VQ0hfR1BJT19QSU4pOworfQorCitzdGF0aWMgc3RydWN0IGJ1MjEwMTNfcGxhdGZvcm1fZGV2aWNlIHRzY19wbGF0X2RldmljZSA9IHsKKwkuY3NfZW4gPSBidTIxMDEzX2dwaW9fYm9hcmRfaW5pdCwKKwkuY3NfZGlzID0gYnUyMTAxM19ncGlvX2JvYXJkX2V4aXQsCisJLmlycV9yZWFkX3ZhbCA9IGJ1MjEwMTNfcmVhZF9waW5fdmFsLAorCS5pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKFRPVUNIX0dQSU9fUElOKSwKKwkudG91Y2hfeF9tYXggPSBUT1VDSF9YTUFYLAorCS50b3VjaF95X21heCA9IFRPVUNIX1lNQVgsCisJLmV4dF9jbGsgPSBmYWxzZSwKKwkueF9mbGlwID0gZmFsc2UsCisJLnlfZmxpcCA9IHRydWUsCit9OworCitzdGF0aWMgc3RydWN0IGJ1MjEwMTNfcGxhdGZvcm1fZGV2aWNlIHRzY19wbGF0Ml9kZXZpY2UgPSB7CisJLmNzX2VuID0gYnUyMTAxM19ncGlvX2JvYXJkX2luaXQsCisJLmNzX2RpcyA9IGJ1MjEwMTNfZ3Bpb19ib2FyZF9leGl0LAorCS5pcnFfcmVhZF92YWwgPSBidTIxMDEzX3JlYWRfcGluX3ZhbCwKKwkuaXJxID0gTk9NQURJS19HUElPX1RPX0lSUShUT1VDSF9HUElPX1BJTiksCisJLnRvdWNoX3hfbWF4ID0gVE9VQ0hfWE1BWCwKKwkudG91Y2hfeV9tYXggPSBUT1VDSF9ZTUFYLAorCS5leHRfY2xrID0gZmFsc2UsCisJLnhfZmxpcCA9IGZhbHNlLAorCS55X2ZsaXAgPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHU4NTAwX2kyYzNfZGV2aWNlc19zdHVpYltdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImJ1MjEwMTNfdHAiLCAweDVDKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdHNjX3BsYXRfZGV2aWNlLAorCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygiYnUyMTAxM190cCIsIDB4NUQpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0c2NfcGxhdDJfZGV2aWNlLAorCX0sCisKK307CisKK3ZvaWQgX19pbml0IG1vcDUwMF9zdHVpYl9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfaHJlZnY2MCgpKSB7CisJCXRzY19wbGF0X2RldmljZS5jc19waW4gPSBIUkVGVjYwX1RPVUNIX1JTVF9HUElPOworCQl0c2NfcGxhdDJfZGV2aWNlLmNzX3BpbiA9IEhSRUZWNjBfVE9VQ0hfUlNUX0dQSU87CisJfSBlbHNlIHsKKwkJdHNjX3BsYXRfZGV2aWNlLmNzX3BpbiA9IEdQSU9fQlUyMTAxM19DUzsKKwkJdHNjX3BsYXQyX2RldmljZS5jc19waW4gPSBHUElPX0JVMjEwMTNfQ1M7CisKKwl9CisKKwltb3A1MDBfdWliX2kyY19hZGQoMCwgbW9wNTAwX2kyYzBfZGV2aWNlc19zdHVpYiwKKwkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfZGV2aWNlc19zdHVpYikpOworCisJbW9wNTAwX3VpYl9pMmNfYWRkKDMsIHU4NTAwX2kyYzNfZGV2aWNlc19zdHVpYiwKKwkJCUFSUkFZX1NJWkUodTg1MDBfaTJjM19kZXZpY2VzX3N0dWliKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC11ODUwMHVpYi5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtdTg1MDB1aWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGE4NzM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtdTg1MDB1aWIuYwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIEJvYXJkIGRhdGEgZm9yIHRoZSBVODUwMCBVSUIsIGFsc28ga25vd24gYXMgdGhlIE5ldyBVSUIKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdGMzNTg5eC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDwuLi9kcml2ZXJzL3N0YWdpbmcvc3RlX3JtaTQvc3luYXB0aWNzX2kyY19ybWk0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2luY2x1ZGUgImJvYXJkLW1vcDUwMC5oIgorCisvKgorICogU3luYXB0aWNzIFJNSTQgdG91Y2hzY3JlZW4gaW50ZXJmYWNlIG9uIHRoZSBVODUwMCBVSUIKKyAqLworCisvKgorICogRGVzY3JpcHRvciBzdHJ1Y3R1cmUuCisgKiBEZXNjcmliZXMgdGhlIG51bWJlciBvZiBpMmMgZGV2aWNlcyBvbiB0aGUgYnVzIHRoYXQgc3BlYWsgUk1JLgorICovCitzdGF0aWMgc3RydWN0IHN5bmFwdGljc19ybWk0X3BsYXRmb3JtX2RhdGEgcm1pNF9pMmNfZGV2X3BsYXRmb3JtZGF0YSA9IHsKKwkuaXJxX251bWJlciAgICAgPSBOT01BRElLX0dQSU9fVE9fSVJRKDg0KSwKKwkuaXJxX3R5cGUgICAgICAgPSAoSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1NIQVJFRCksCisJLnhfZmxpcAkJPSBmYWxzZSwKKwkueV9mbGlwCQk9IHRydWUsCisJLnJlZ3VsYXRvcl9lbiAgID0gZmFsc2UsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbW9wNTAwX2kyYzNfZGV2aWNlc191ODUwMFtdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInN5bmFwdGljc19ybWk0X2kyYyIsIDB4NEIpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZybWk0X2kyY19kZXZfcGxhdGZvcm1kYXRhLAorCX0sCit9OworCisvKgorICogVEMzNTg5MworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHU4NTAwX2tleW1hcFtdID0geworCUtFWSgzLCAxLCBLRVlfRU5EKSwKKwlLRVkoNCwgMSwgS0VZX1BPV0VSKSwKKwlLRVkoNiwgNCwgS0VZX1ZPTFVNRURPV04pLAorCUtFWSg0LCAyLCBLRVlfRU1BSUwpLAorCUtFWSgzLCAzLCBLRVlfUklHSFQpLAorCUtFWSgyLCA1LCBLRVlfQkFDS1NQQUNFKSwKKworCUtFWSg2LCA3LCBLRVlfTUVOVSksCisJS0VZKDUsIDAsIEtFWV9FTlRFUiksCisJS0VZKDQsIDMsIEtFWV8wKSwKKwlLRVkoMywgNCwgS0VZX0RPVCksCisJS0VZKDUsIDIsIEtFWV9VUCksCisJS0VZKDMsIDUsIEtFWV9ET1dOKSwKKworCUtFWSg0LCA1LCBLRVlfU0VORCksCisJS0VZKDAsIDUsIEtFWV9CQUNLKSwKKwlLRVkoNiwgMiwgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoMSwgMywgS0VZX1NQQUNFKSwKKwlLRVkoNywgNiwgS0VZX0xFRlQpLAorCUtFWSg1LCA1LCBLRVlfU0VBUkNIKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHU4NTAwX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gdTg1MDBfa2V5bWFwLAorCS5rZXltYXBfc2l6ZSAgICA9IEFSUkFZX1NJWkUodTg1MDBfa2V5bWFwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGMzNTg5eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSB0YzM1ODkzX2RhdGEgPSB7CisJLmtyb3cgPSBUQ19LUERfUk9XUywKKwkua2NvbCA9IFRDX0tQRF9DT0xVTU5TLAorCS5kZWJvdW5jZV9wZXJpb2QgPSBUQ19LUERfREVCT1VOQ0VfUEVSSU9ELAorCS5zZXR0bGVfdGltZSA9IFRDX0tQRF9TRVRUTEVfVElNRSwKKwkuaXJxdHlwZSA9IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCS5lbmFibGVfd2FrZXVwID0gdHJ1ZSwKKwkua2V5bWFwX2RhdGEgICAgPSAmdTg1MDBfa2V5bWFwX2RhdGEsCisJLm5vX2F1dG9yZXBlYXQgID0gdHJ1ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGMzNTg5eF9wbGF0Zm9ybV9kYXRhIHRjMzU4OXhfa2V5cGFkX2RhdGEgPSB7CisJLmJsb2NrID0gVEMzNTg5eF9CTE9DS19LRVlQQUQsCisJLmtleXBhZCA9ICZ0YzM1ODkzX2RhdGEsCisJLmlycV9iYXNlID0gTU9QNTAwX0VHUElPX0lSUV9CQVNFLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG1vcDUwMF9pMmMwX2RldmljZXNfdTg1MDBbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0YzM1ODl4IiwgMHg0NCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRjMzU4OXhfa2V5cGFkX2RhdGEsCisJCS5pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKDIxOCksCisJCS5mbGFncyA9IEkyQ19DTElFTlRfV0FLRSwKKwl9LAorfTsKKworCit2b2lkIF9faW5pdCBtb3A1MDBfdTg1MDB1aWJfaW5pdCh2b2lkKQoreworCW1vcDUwMF91aWJfaTJjX2FkZCgzLCBtb3A1MDBfaTJjM19kZXZpY2VzX3U4NTAwLAorCQkJQVJSQVlfU0laRShtb3A1MDBfaTJjM19kZXZpY2VzX3U4NTAwKSk7CisKKwltb3A1MDBfdWliX2kyY19hZGQoMCwgbW9wNTAwX2kyYzBfZGV2aWNlc191ODUwMCwKKwkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfZGV2aWNlc191ODUwMCkpOworCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC11aWIuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXVpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2NlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC11aWIuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIEF1dGhvcjogUmFiaW4gVmluY2VudCA8cmFiaW4udmluY2VudEBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQkibW9wNTAwLXVpYjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlICJib2FyZC1tb3A1MDAuaCIKKworZW51bSBtb3A1MDBfdWliIHsKKwlTVFVJQiwKKwlVODUwMFVJQiwKK307CisKK3N0cnVjdCB1aWIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqb3B0aW9uOworCXZvaWQgKCppbml0KSh2b2lkKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSB1aWIgbW9wNTAwX3VpYnNbXSA9IHsKKwlbU1RVSUJdID0geworCQkubmFtZQk9ICJTVC1VSUIiLAorCQkub3B0aW9uCT0gInN0dWliIiwKKwkJLmluaXQJPSBtb3A1MDBfc3R1aWJfaW5pdCwKKwl9LAorCVtVODUwMFVJQl0gPSB7CisJCS5uYW1lCT0gIlU4NTAwLVVJQiIsCisJCS5vcHRpb24JPSAidTg1MDB1aWIiLAorCQkuaW5pdAk9IG1vcDUwMF91ODUwMHVpYl9pbml0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHVpYiAqbW9wNTAwX3VpYjsKKworc3RhdGljIGludCBfX2luaXQgbW9wNTAwX3VpYl9zZXR1cChjaGFyICpzdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtb3A1MDBfdWlicyk7IGkrKykgeworCQlzdHJ1Y3QgdWliICp1aWIgPSAmbW9wNTAwX3VpYnNbaV07CisKKwkJaWYgKCFzdHJjbXAoc3RyLCB1aWItPm9wdGlvbikpIHsKKwkJCW1vcDUwMF91aWIgPSB1aWI7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IEFSUkFZX1NJWkUobW9wNTAwX3VpYnMpKQorCQlwcl9lcnIoImludmFsaWQgdWliPSBvcHRpb24gKCVzKVxuIiwgc3RyKTsKKworCXJldHVybiAxOworfQorX19zZXR1cCgidWliPSIsIG1vcDUwMF91aWJfc2V0dXApOworCisvKgorICogVGhlIFVJQnMgYXJlIGRldGVjdGVkIGFmdGVyIHRoZSBJMkMgaG9zdCBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZCwgc28KKyAqIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKCkgY2FuJ3QgYmUgdXNlZC4KKyAqLwordm9pZCBtb3A1MDBfdWliX2kyY19hZGQoaW50IGJ1c251bSwgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvLAorCQl1bnNpZ25lZCBuKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCWludCBpOworCisJYWRhcCA9IGkyY19nZXRfYWRhcHRlcihidXNudW0pOworCWlmICghYWRhcCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYWRhcHRlciBpMmMlZFxuIiwgYnVzbnVtKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcCwgJmluZm9baV0pOworCQlpZiAoIWNsaWVudCkKKwkJCXByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyICVzIHRvIGkyYyVkXG4iLAorCQkJCQlpbmZvW2ldLnR5cGUsIGJ1c251bSk7CisJfQorCisJaTJjX3B1dF9hZGFwdGVyKGFkYXApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgX19tb3A1MDBfdWliX2luaXQoc3RydWN0IHVpYiAqdWliLCBjb25zdCBjaGFyICp3aHkpCit7CisJcHJfaW5mbygiJXMgKCVzKVxuIiwgdWliLT5uYW1lLCB3aHkpOworCXVpYi0+aW5pdCgpOworfQorCisvKgorICogRGV0ZWN0IHRoZSBVSUIgYXR0YWNoZWQgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgaTJjIGRldmljZXMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1vcDUwMF91aWJfaW5pdCh2b2lkKQoreworCXN0cnVjdCB1aWIgKnVpYiA9IG1vcDUwMF91aWI7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmMwOworCWludCByZXQ7CisKKwlpZiAoIWNwdV9pc191ODUwMCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICh1aWIpIHsKKwkJX19tb3A1MDBfdWliX2luaXQodWliLCAiZnJvbSB1aWI9IGJvb3QgYXJndW1lbnQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaTJjMCA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwlpZiAoIWkyYzApIHsKKwkJX19tb3A1MDBfdWliX2luaXQoJm1vcDUwMF91aWJzW1NUVUlCXSwKKwkJCQkiZmFsbGJhY2ssIGNvdWxkIG5vdCBnZXQgaTJjMCIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBVODUwMC1VSUIgaGFzIHRoZSBUQzM1ODkzIGF0IDB4NDQgb24gSTJDMCwgdGhlIFNULVVJQiBkb2Vzbid0LiAqLworCXJldCA9IGkyY19zbWJ1c194ZmVyKGkyYzAsIDB4NDQsIDAsIEkyQ19TTUJVU19XUklURSwgMCwKKwkJCUkyQ19TTUJVU19RVUlDSywgTlVMTCk7CisJaTJjX3B1dF9hZGFwdGVyKGkyYzApOworCisJaWYgKHJldCA9PSAwKQorCQl1aWIgPSAmbW9wNTAwX3VpYnNbVTg1MDBVSUJdOworCWVsc2UKKwkJdWliID0gJm1vcDUwMF91aWJzW1NUVUlCXTsKKworCV9fbW9wNTAwX3VpYl9pbml0KHVpYiwgImRldGVjdGVkIik7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobW9wNTAwX3VpYl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCmluZGV4IGEzOTNmNTcuLjg3OTBkOTg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKQEAgLTE3LDY4ICsxNywzMCBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvYWI4NTAwLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RjMzU4OXguaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLWxwNTUyMS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAotI2luY2x1ZGUgPHBsYXQvcGluY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKyNpbmNsdWRlIDxwbGF0L3N0ZV9kbWE0MC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KICNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAorI2luY2x1ZGUgInN0ZS1kbWE0MC1kYjg1MDAuaCIKICNpbmNsdWRlICJkZXZpY2VzLWRiODUwMC5oIgotI2luY2x1ZGUgInBpbnMtZGI4NTAwLmgiCiAjaW5jbHVkZSAiYm9hcmQtbW9wNTAwLmgiCiAjaW5jbHVkZSAiYm9hcmQtbW9wNTAwLXJlZ3VsYXRvcnMuaCIKIAotc3RhdGljIHBpbl9jZmdfdCBtb3A1MDBfcGluc1tdID0gewotCS8qIFNTUDAgKi8KLQlHUElPMTQzX1NTUDBfQ0xLLAotCUdQSU8xNDRfU1NQMF9GUk0sCi0JR1BJTzE0NV9TU1AwX1JYRCwKLQlHUElPMTQ2X1NTUDBfVFhELAotCi0JLyogSTJDICovCi0JR1BJTzE0N19JMkMwX1NDTCwKLQlHUElPMTQ4X0kyQzBfU0RBLAotCUdQSU8xNl9JMkMxX1NDTCwKLQlHUElPMTdfSTJDMV9TREEsCi0JR1BJTzEwX0kyQzJfU0RBLAotCUdQSU8xMV9JMkMyX1NDTCwKLQlHUElPMjI5X0kyQzNfU0RBLAotCUdQSU8yMzBfSTJDM19TQ0wsCi0KLQkvKiBTS0Uga2V5cGFkICovCi0JR1BJTzE1M19LUF9JNywKLQlHUElPMTU0X0tQX0k2LAotCUdQSU8xNTVfS1BfSTUsCi0JR1BJTzE1Nl9LUF9JNCwKLQlHUElPMTU3X0tQX083LAotCUdQSU8xNThfS1BfTzYsCi0JR1BJTzE1OV9LUF9PNSwKLQlHUElPMTYwX0tQX080LAotCUdQSU8xNjFfS1BfSTMsCi0JR1BJTzE2Ml9LUF9JMiwKLQlHUElPMTYzX0tQX0kxLAotCUdQSU8xNjRfS1BfSTAsCi0JR1BJTzE2NV9LUF9PMywKLQlHUElPMTY2X0tQX08yLAotCUdQSU8xNjdfS1BfTzEsCi0JR1BJTzE2OF9LUF9PMCwKLQotCS8qIEdQSU9fRVhQX0lOVCAqLwotCUdQSU8yMTdfR1BJTywKLQotCS8qIFNUTVBFMTYwMSBJUlEgKi8KLQlHUElPMjE4X0dQSU8gICAgfCBQSU5fSU5QVVRfUFVMTFVQLAotfTsKLQogc3RhdGljIHN0cnVjdCBhYjg1MDBfcGxhdGZvcm1fZGF0YSBhYjg1MDBfcGxhdGRhdGEgPSB7CiAJLmlycV9iYXNlCT0gTU9QNTAwX0FCODUwMF9JUlFfQkFTRSwKIAkucmVndWxhdG9yCT0gYWI4NTAwX3JlZ3VsYXRvcnMsCkBAIC0xMDMsMTYgKzY1LDYgQEAKIAkucmVzb3VyY2UgPSBhYjg1MDBfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3AwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmJ1c19pZCA9IDAsCi0JLyogcGwwMjIgbm90IHlldCBzdXBwb3J0cyBkbWEgKi8KLQkuZW5hYmxlX2RtYSA9IDAsCi0JLyogb24gdGhpcyBwbGF0Zm9ybSwgZ3BpbyAzMSwxNDIsMTQ0LDIxNCAmCi0JICogMjI0IGFyZSBjb25uZWN0ZWQgYXMgY2hpcCBzZWxlY3RzCi0JICovCi0JLm51bV9jaGlwc2VsZWN0ID0gNSwKLX07Ci0KIC8qCiAgKiBUQzM1ODkyCiAgKi8KQEAgLTEzMywxNCArODUsODEgQEAKIAkuaXJxX2Jhc2UJPSBNT1A1MDBfRUdQSU9fSVJRX0JBU0UsCiB9OwogCitzdGF0aWMgc3RydWN0IGxwNTUyMV9sZWRfY29uZmlnIGxwNTUyMV9wcmlfbGVkW10gPSB7CisgICAgICAgWzBdID0geworCSAgICAgICAuY2hhbl9uciA9IDAsCisJICAgICAgIC5sZWRfY3VycmVudCA9IDB4MmYsCisJICAgICAgIC5tYXhfY3VycmVudCA9IDB4NWYsCisgICAgICAgfSwKKyAgICAgICBbMV0gPSB7CisJICAgICAgIC5jaGFuX25yID0gMSwKKwkgICAgICAgLmxlZF9jdXJyZW50ID0gMHgyZiwKKwkgICAgICAgLm1heF9jdXJyZW50ID0gMHg1ZiwKKyAgICAgICB9LAorICAgICAgIFsyXSA9IHsKKwkgICAgICAgLmNoYW5fbnIgPSAyLAorCSAgICAgICAubGVkX2N1cnJlbnQgPSAweDJmLAorCSAgICAgICAubWF4X2N1cnJlbnQgPSAweDVmLAorICAgICAgIH0sCit9OworCitzdGF0aWMgc3RydWN0IGxwNTUyMV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbHA1NTIxX3ByaV9kYXRhID0geworICAgICAgIC5sYWJlbCA9ICJscDU1MjFfcHJpIiwKKyAgICAgICAubGVkX2NvbmZpZyAgICAgPSAmbHA1NTIxX3ByaV9sZWRbMF0sCisgICAgICAgLm51bV9jaGFubmVscyAgID0gMywKKyAgICAgICAuY2xvY2tfbW9kZSAgICAgPSBMUDU1MjFfQ0xPQ0tfRVhULAorfTsKKworc3RhdGljIHN0cnVjdCBscDU1MjFfbGVkX2NvbmZpZyBscDU1MjFfc2VjX2xlZFtdID0geworICAgICAgIFswXSA9IHsKKwkgICAgICAgLmNoYW5fbnIgPSAwLAorCSAgICAgICAubGVkX2N1cnJlbnQgPSAweDJmLAorCSAgICAgICAubWF4X2N1cnJlbnQgPSAweDVmLAorICAgICAgIH0sCisgICAgICAgWzFdID0geworCSAgICAgICAuY2hhbl9uciA9IDEsCisJICAgICAgIC5sZWRfY3VycmVudCA9IDB4MmYsCisJICAgICAgIC5tYXhfY3VycmVudCA9IDB4NWYsCisgICAgICAgfSwKKyAgICAgICBbMl0gPSB7CisJICAgICAgIC5jaGFuX25yID0gMiwKKwkgICAgICAgLmxlZF9jdXJyZW50ID0gMHgyZiwKKwkgICAgICAgLm1heF9jdXJyZW50ID0gMHg1ZiwKKyAgICAgICB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscDU1MjFfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGxwNTUyMV9zZWNfZGF0YSA9IHsKKyAgICAgICAubGFiZWwgPSAibHA1NTIxX3NlYyIsCisgICAgICAgLmxlZF9jb25maWcgICAgID0gJmxwNTUyMV9zZWNfbGVkWzBdLAorICAgICAgIC5udW1fY2hhbm5lbHMgICA9IDMsCisgICAgICAgLmNsb2NrX21vZGUgICAgID0gTFA1NTIxX0NMT0NLX0VYVCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbW9wNTAwX2kyYzBfZGV2aWNlc1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oInRjMzU4OXgiLCAweDQyKSwKLQkJLmlycSAgICAgICAgICAgID0gTk9NQURJS19HUElPX1RPX0lSUSgyMTcpLAorCQkuaXJxCQk9IE5PTUFESUtfR1BJT19UT19JUlEoMjE3KSwKIAkJLnBsYXRmb3JtX2RhdGEgID0gJm1vcDUwMF90YzM1ODkyX2RhdGEsCiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtb3A1MDBfaTJjMl9kZXZpY2VzW10gPSB7CisJeworCQkvKiBscDU1MjEgTEVEIGRyaXZlciwgMXN0IGRldmljZSAqLworCQlJMkNfQk9BUkRfSU5GTygibHA1NTIxIiwgMHgzMyksCisJCS5wbGF0Zm9ybV9kYXRhID0gJmxwNTUyMV9wcmlfZGF0YSwKKwl9LAorCXsKKwkJLyogbHA1NTIxIExFRCBkcml2ZXIsIDJzdCBkZXZpY2UgKi8KKwkJSTJDX0JPQVJEX0lORk8oImxwNTUyMSIsIDB4MzQpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZscDU1MjFfc2VjX2RhdGEsCisJfSwKKwl7CisJCS8qIExpZ2h0IHNlbnNvciBSb2htIEJIMTc4MEdMSSAqLworCQlJMkNfQk9BUkRfSU5GTygiYmgxNzgwIiwgMHgyOSksCisJfSwKK307CisKICNkZWZpbmUgVTg1MDBfSTJDX0NPTlRST0xMRVIoaWQsIF9zbHN1LCBfdGZ0LCBfcmZ0LCBjbGssIF9zbSkgXAogc3RhdGljIHN0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgdTg1MDBfaTJjIyNpZCMjX2RhdGEgPSB7IFwKIAkvKgkJCQlcCkBAIC0xNzgsOCArMTk3LDkzIEBACiAJZGI4NTAwX2FkZF9pMmMzKCZ1ODUwMF9pMmMzX2RhdGEpOwogfQogCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gbW9wNTAwX2dwaW9fa2V5c1tdID0geworCXsKKwkJLmRlc2MJCQk9ICJTRkg3NzQxIFByb3hpbWl0eSBTZW5zb3IiLAorCQkudHlwZQkJCT0gRVZfU1csCisJCS5jb2RlCQkJPSBTV19GUk9OVF9QUk9YSU1JVFksCisJCS5hY3RpdmVfbG93CQk9IDAsCisJCS5jYW5fZGlzYWJsZQkJPSAxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpwcm94X3JlZ3VsYXRvcjsKK3N0YXRpYyBpbnQgbW9wNTAwX3Byb3hfYWN0aXZhdGUoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIG1vcDUwMF9wcm94X2RlYWN0aXZhdGUoc3RydWN0IGRldmljZSAqZGV2KTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBtb3A1MDBfZ3Bpb19rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBtb3A1MDBfZ3Bpb19rZXlzLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUobW9wNTAwX2dwaW9fa2V5cyksCisJLmVuYWJsZQkJPSBtb3A1MDBfcHJveF9hY3RpdmF0ZSwKKwkuZGlzYWJsZQk9IG1vcDUwMF9wcm94X2RlYWN0aXZhdGUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtb3A1MDBfZ3Bpb19rZXlzX2RldmljZSA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbW9wNTAwX2dwaW9fa2V5c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IG1vcDUwMF9wcm94X2FjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwcm94X3JlZ3VsYXRvciA9IHJlZ3VsYXRvcl9nZXQoJm1vcDUwMF9ncGlvX2tleXNfZGV2aWNlLmRldiwKKwkJCQkJCSJ2Y2MiKTsKKwlpZiAoSVNfRVJSKHByb3hfcmVndWxhdG9yKSkgeworCQlkZXZfZXJyKCZtb3A1MDBfZ3Bpb19rZXlzX2RldmljZS5kZXYsCisJCQkibm8gcmVndWxhdG9yXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocHJveF9yZWd1bGF0b3IpOworCX0KKwlyZWd1bGF0b3JfZW5hYmxlKHByb3hfcmVndWxhdG9yKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbW9wNTAwX3Byb3hfZGVhY3RpdmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmVndWxhdG9yX2Rpc2FibGUocHJveF9yZWd1bGF0b3IpOworCXJlZ3VsYXRvcl9wdXQocHJveF9yZWd1bGF0b3IpOworfQorCiAvKiBhZGQgYW55IHBsYXRmb3JtIGRldmljZXMgaGVyZSAtIFRPRE8gKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmbW9wNTAwX2dwaW9fa2V5c19kZXZpY2UsCit9OworCisjaWZkZWYgQ09ORklHX1NURV9ETUE0MAorc3RhdGljIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyBzc3AwX2RtYV9jZmdfcnggPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCisJLmRpciA9IFNURURNQTQwX1BFUklQSF9UT19NRU0sCisJLnNyY19kZXZfdHlwZSA9ICBEQjg1MDBfRE1BX0RFVjhfU1NQMF9SWCwKKwkuZHN0X2Rldl90eXBlID0gU1RFRE1BNDBfREVWX0RTVF9NRU1PUlksCisJLnNyY19pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAorCS5kc3RfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfQllURV9XSURUSCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgc3NwMF9kbWFfY2ZnX3R4ID0geworCS5tb2RlID0gU1RFRE1BNDBfTU9ERV9MT0dJQ0FMLAorCS5kaXIgPSBTVEVETUE0MF9NRU1fVE9fUEVSSVBILAorCS5zcmNfZGV2X3R5cGUgPSBTVEVETUE0MF9ERVZfU1JDX01FTU9SWSwKKwkuZHN0X2Rldl90eXBlID0gREI4NTAwX0RNQV9ERVY4X1NTUDBfVFgsCisJLnNyY19pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAorCS5kc3RfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfQllURV9XSURUSCwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3AwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmJ1c19pZCA9IDAsCisjaWZkZWYgQ09ORklHX1NURV9ETUE0MAorCS5lbmFibGVfZG1hID0gMSwKKwkuZG1hX2ZpbHRlciA9IHN0ZWRtYTQwX2ZpbHRlciwKKwkuZG1hX3J4X3BhcmFtID0gJnNzcDBfZG1hX2NmZ19yeCwKKwkuZG1hX3R4X3BhcmFtID0gJnNzcDBfZG1hX2NmZ190eCwKKyNlbHNlCisJLmVuYWJsZV9kbWEgPSAwLAorI2VuZGlmCisJLyogb24gdGhpcyBwbGF0Zm9ybSwgZ3BpbyAzMSwxNDIsMTQ0LDIxNCAmCisJICogMjI0IGFyZSBjb25uZWN0ZWQgYXMgY2hpcCBzZWxlY3RzCisJICovCisJLm51bV9jaGlwc2VsZWN0ID0gNSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtb3A1MDBfc3BpX2luaXQodm9pZCkKQEAgLTE4NywxOCArMjkxLDEwOCBAQAogCWRiODUwMF9hZGRfc3NwMCgmc3NwMF9wbGF0Zm9ybV9kYXRhKTsKIH0KIAorI2lmZGVmIENPTkZJR19TVEVfRE1BNDAKK3N0YXRpYyBzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgdWFydDBfZG1hX2NmZ19yeCA9IHsKKwkubW9kZSA9IFNURURNQTQwX01PREVfTE9HSUNBTCwKKwkuZGlyID0gU1RFRE1BNDBfUEVSSVBIX1RPX01FTSwKKwkuc3JjX2Rldl90eXBlID0gIERCODUwMF9ETUFfREVWMTNfVUFSVDBfUlgsCisJLmRzdF9kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9EU1RfTUVNT1JZLAorCS5zcmNfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfQllURV9XSURUSCwKKwkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEgsCit9OworCitzdGF0aWMgc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIHVhcnQwX2RtYV9jZmdfdHggPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCisJLmRpciA9IFNURURNQTQwX01FTV9UT19QRVJJUEgsCisJLnNyY19kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9TUkNfTUVNT1JZLAorCS5kc3RfZGV2X3R5cGUgPSBEQjg1MDBfRE1BX0RFVjEzX1VBUlQwX1RYLAorCS5zcmNfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfQllURV9XSURUSCwKKwkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEgsCit9OworCitzdGF0aWMgc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIHVhcnQxX2RtYV9jZmdfcnggPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCisJLmRpciA9IFNURURNQTQwX1BFUklQSF9UT19NRU0sCisJLnNyY19kZXZfdHlwZSA9ICBEQjg1MDBfRE1BX0RFVjEyX1VBUlQxX1JYLAorCS5kc3RfZGV2X3R5cGUgPSBTVEVETUE0MF9ERVZfRFNUX01FTU9SWSwKKwkuc3JjX2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEgsCisJLmRzdF9pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAorfTsKKworc3RhdGljIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyB1YXJ0MV9kbWFfY2ZnX3R4ID0geworCS5tb2RlID0gU1RFRE1BNDBfTU9ERV9MT0dJQ0FMLAorCS5kaXIgPSBTVEVETUE0MF9NRU1fVE9fUEVSSVBILAorCS5zcmNfZGV2X3R5cGUgPSBTVEVETUE0MF9ERVZfU1JDX01FTU9SWSwKKwkuZHN0X2Rldl90eXBlID0gREI4NTAwX0RNQV9ERVYxMl9VQVJUMV9UWCwKKwkuc3JjX2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEgsCisJLmRzdF9pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAorfTsKKworc3RhdGljIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyB1YXJ0Ml9kbWFfY2ZnX3J4ID0geworCS5tb2RlID0gU1RFRE1BNDBfTU9ERV9MT0dJQ0FMLAorCS5kaXIgPSBTVEVETUE0MF9QRVJJUEhfVE9fTUVNLAorCS5zcmNfZGV2X3R5cGUgPSAgREI4NTAwX0RNQV9ERVYxMV9VQVJUMl9SWCwKKwkuZHN0X2Rldl90eXBlID0gU1RFRE1BNDBfREVWX0RTVF9NRU1PUlksCisJLnNyY19pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAorCS5kc3RfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfQllURV9XSURUSCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgdWFydDJfZG1hX2NmZ190eCA9IHsKKwkubW9kZSA9IFNURURNQTQwX01PREVfTE9HSUNBTCwKKwkuZGlyID0gU1RFRE1BNDBfTUVNX1RPX1BFUklQSCwKKwkuc3JjX2Rldl90eXBlID0gU1RFRE1BNDBfREVWX1NSQ19NRU1PUlksCisJLmRzdF9kZXZfdHlwZSA9IERCODUwMF9ETUFfREVWMTFfVUFSVDJfVFgsCisJLnNyY19pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAorCS5kc3RfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfQllURV9XSURUSCwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBhbWJhX3BsMDExX2RhdGEgdWFydDBfcGxhdCA9IHsKKyNpZmRlZiBDT05GSUdfU1RFX0RNQTQwCisJLmRtYV9maWx0ZXIgPSBzdGVkbWE0MF9maWx0ZXIsCisJLmRtYV9yeF9wYXJhbSA9ICZ1YXJ0MF9kbWFfY2ZnX3J4LAorCS5kbWFfdHhfcGFyYW0gPSAmdWFydDBfZG1hX2NmZ190eCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX3BsMDExX2RhdGEgdWFydDFfcGxhdCA9IHsKKyNpZmRlZiBDT05GSUdfU1RFX0RNQTQwCisJLmRtYV9maWx0ZXIgPSBzdGVkbWE0MF9maWx0ZXIsCisJLmRtYV9yeF9wYXJhbSA9ICZ1YXJ0MV9kbWFfY2ZnX3J4LAorCS5kbWFfdHhfcGFyYW0gPSAmdWFydDFfZG1hX2NmZ190eCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX3BsMDExX2RhdGEgdWFydDJfcGxhdCA9IHsKKyNpZmRlZiBDT05GSUdfU1RFX0RNQTQwCisJLmRtYV9maWx0ZXIgPSBzdGVkbWE0MF9maWx0ZXIsCisJLmRtYV9yeF9wYXJhbSA9ICZ1YXJ0Ml9kbWFfY2ZnX3J4LAorCS5kbWFfdHhfcGFyYW0gPSAmdWFydDJfZG1hX2NmZ190eCwKKyNlbmRpZgorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG1vcDUwMF91YXJ0X2luaXQodm9pZCkKIHsKLQlkYjg1MDBfYWRkX3VhcnQwKCk7Ci0JZGI4NTAwX2FkZF91YXJ0MSgpOwotCWRiODUwMF9hZGRfdWFydDIoKTsKKwlkYjg1MDBfYWRkX3VhcnQwKCZ1YXJ0MF9wbGF0KTsKKwlkYjg1MDBfYWRkX3VhcnQxKCZ1YXJ0MV9wbGF0KTsKKwlkYjg1MDBfYWRkX3VhcnQyKCZ1YXJ0Ml9wbGF0KTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHU4NTAwX2luaXRfbWFjaGluZSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG1vcDUwMF9pbml0X21hY2hpbmUodm9pZCkKIHsKKwkvKgorCSAqIFRoZSBIUkVGdjYwIGJvYXJkIHJlbW92ZWQgYSBHUElPIGV4cGFuZGVyIGFuZCByb3V0ZWQKKwkgKiBhbGwgdGhlc2UgR1BJTyBwaW5zIHRvIHRoZSBpbnRlcm5hbCBHUElPIGNvbnRyb2xsZXIKKwkgKiBpbnN0ZWFkLgorCSAqLworCWlmIChtYWNoaW5lX2lzX2hyZWZ2NjAoKSkKKwkJbW9wNTAwX2dwaW9fa2V5c1swXS5ncGlvID0gSFJFRlY2MF9QUk9YX1NFTlNFX0dQSU87CisJZWxzZQorCQltb3A1MDBfZ3Bpb19rZXlzWzBdLmdwaW8gPSBHUElPX1BST1hfU0VOU09SOworCiAJdTg1MDBfaW5pdF9kZXZpY2VzKCk7CiAKLQlubWtfY29uZmlnX3BpbnMobW9wNTAwX3BpbnMsIEFSUkFZX1NJWkUobW9wNTAwX3BpbnMpKTsKKwltb3A1MDBfcGluc19pbml0KCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldnMpKTsKIApAQCAtMjA3LDEyICs0MDEsMTIgQEAKIAltb3A1MDBfc3BpX2luaXQoKTsKIAltb3A1MDBfdWFydF9pbml0KCk7CiAKLQltb3A1MDBfa2V5cGFkX2luaXQoKTsKLQogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWI4NTAwX2RldmljZSk7CiAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtb3A1MDBfaTJjMF9kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfZGV2aWNlcykpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDIsIG1vcDUwMF9pMmMyX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShtb3A1MDBfaTJjMl9kZXZpY2VzKSk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoVTg1MDAsICJTVC1Fcmljc3NvbiBNT1A1MDAgcGxhdGZvcm0iKQpAQCAtMjIyLDUgKzQxNiwxMyBAQAogCS5pbml0X2lycQk9IHV4NTAwX2luaXRfaXJxLAogCS8qIHdlIHJlLXVzZSBub21hZGlrIHRpbWVyIGhlcmUgKi8KIAkudGltZXIJCT0gJnV4NTAwX3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSB1ODUwMF9pbml0X21hY2hpbmUsCisJLmluaXRfbWFjaGluZQk9IG1vcDUwMF9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORAorCitNQUNISU5FX1NUQVJUKEhSRUZWNjAsICJTVC1Fcmljc3NvbiBVODUwMCBQbGF0Zm9ybSBIUkVGdjYwKyIpCisJLmJvb3RfcGFyYW1zCT0gMHgxMDAsCisJLm1hcF9pbwkJPSB1ODUwMF9tYXBfaW8sCisJLmluaXRfaXJxCT0gdXg1MDBfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZ1eDUwMF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbW9wNTAwX2luaXRfbWFjaGluZSwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuaAppbmRleCAzMTA0YWUyLi41NjcyMmY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmgKQEAgLTcsMTUgKzcsMzYgQEAKICNpZm5kZWYgX19CT0FSRF9NT1A1MDBfSAogI2RlZmluZSBfX0JPQVJEX01PUDUwMF9ICiAKLSNkZWZpbmUgTU9QNTAwX0VHUElPKHgpCQkJKE5PTUFESUtfTlJfR1BJTyArICh4KSkKKy8qIEhSRUZ2NjAtc3BlY2lmaWMgR1BJTyBhc3NpZ25tZW50cywgdGhpcyBib2FyZCBoYXMgbm8gR1BJTyBleHBhbmRlciAqLworI2RlZmluZSBIUkVGVjYwX1RPVUNIX1JTVF9HUElPCQkxNDMKKyNkZWZpbmUgSFJFRlY2MF9QUk9YX1NFTlNFX0dQSU8JCTIxNworI2RlZmluZSBIUkVGVjYwX0hBTF9TV19HUElPCQkxNDUKKyNkZWZpbmUgSFJFRlY2MF9TRE1NQ19FTl9HUElPCQkxNjkKKyNkZWZpbmUgSFJFRlY2MF9TRE1NQ18xVjhfM1ZfR1BJTwk1CisjZGVmaW5lIEhSRUZWNjBfU0RNTUNfQ0RfR1BJTwkJOTUKKyNkZWZpbmUgSFJFRlY2MF9BQ0NFTF9JTlQxX0dQSU8JCTgyCisjZGVmaW5lIEhSRUZWNjBfQUNDRUxfSU5UMl9HUElPCQk4MworI2RlZmluZSBIUkVGVjYwX01BR05FVF9EUkRZX0dQSU8JMzIKKyNkZWZpbmUgSFJFRlY2MF9ESVNQMV9SU1RfR1BJTwkJNjUKKyNkZWZpbmUgSFJFRlY2MF9ESVNQMl9SU1RfR1BJTwkJNjYKIAogLyogR1BJT3Mgb24gdGhlIFRDMzU4OTIgZXhwYW5kZXIgKi8KKyNkZWZpbmUgTU9QNTAwX0VHUElPKHgpCQkJKE5PTUFESUtfTlJfR1BJTyArICh4KSkKICNkZWZpbmUgR1BJT19TRE1NQ19DRAkJCU1PUDUwMF9FR1BJTygzKQorI2RlZmluZSBHUElPX1BST1hfU0VOU09SCQlNT1A1MDBfRUdQSU8oNykKKyNkZWZpbmUgR1BJT19CVTIxMDEzX0NTCQkJTU9QNTAwX0VHUElPKDEzKQogI2RlZmluZSBHUElPX1NETU1DX0VOCQkJTU9QNTAwX0VHUElPKDE3KQogI2RlZmluZSBHUElPX1NETU1DXzFWOF8zVl9TRUwJCU1PUDUwMF9FR1BJTygxOCkKIAorc3RydWN0IGkyY19ib2FyZF9pbmZvOworCiBleHRlcm4gdm9pZCBtb3A1MDBfc2RpX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBtb3A1MDBfc2RpX3RjMzU4OTJfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIG1vcDUwMF9rZXlwYWRfaW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IG1vcDUwMF91ODUwMHVpYl9pbml0KHZvaWQpOwordm9pZCBfX2luaXQgbW9wNTAwX3N0dWliX2luaXQodm9pZCk7Cit2b2lkIF9faW5pdCBtb3A1MDBfcGluc19pbml0KHZvaWQpOworCit2b2lkIG1vcDUwMF91aWJfaTJjX2FkZChpbnQgYnVzbnVtLCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8sCisJCXVuc2lnbmVkIG4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtdTU1MDAtc2RpLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLXU1NTAwLXNkaS5jCmluZGV4IDU0NzEyYWMuLjczOWZiNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtdTU1MDAtc2RpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC11NTUwMC1zZGkuYwpAQCAtMzEsNiArMzEsMjYgQEAKIAlHUElPMTRfTUMwX0NMSwkJfCBQSU5fRElSX09VVFBVVCB8IFBJTl9WQUxfTE9XLAogfTsKIAorI2lmZGVmIENPTkZJR19TVEVfRE1BNDAKK3N0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyB1NTUwMF9zZGkwX2RtYV9jZmdfcnggPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCisJLmRpciA9IFNURURNQTQwX1BFUklQSF9UT19NRU0sCisJLnNyY19kZXZfdHlwZSA9IERCNTUwMF9ETUFfREVWMjRfU0RNTUMwX1JYLAorCS5kc3RfZGV2X3R5cGUgPSBTVEVETUE0MF9ERVZfRFNUX01FTU9SWSwKKwkuc3JjX2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsCisJLmRzdF9pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9XT1JEX1dJRFRILAorfTsKKworc3RhdGljIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyB1NTUwMF9zZGkwX2RtYV9jZmdfdHggPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsCisJLmRpciA9IFNURURNQTQwX01FTV9UT19QRVJJUEgsCisJLnNyY19kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9TUkNfTUVNT1JZLAorCS5kc3RfZGV2X3R5cGUgPSBEQjU1MDBfRE1BX0RFVjI0X1NETU1DMF9UWCwKKwkuc3JjX2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsCisJLmRzdF9pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9XT1JEX1dJRFRILAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSB1NTUwMF9zZGkwX2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8xNjVfMTk1LAogCS5mX21heAkJPSA1MDAwMDAwMCwKQEAgLTM5LDYgKzU5LDExIEBACiAJCQkJTU1DX0NBUF9NTUNfSElHSFNQRUVELAogCS5ncGlvX2NkCT0gLTEsCiAJLmdwaW9fd3AJPSAtMSwKKyNpZmRlZiBDT05GSUdfU1RFX0RNQTQwCisJLmRtYV9maWx0ZXIJPSBzdGVkbWE0MF9maWx0ZXIsCisJLmRtYV9yeF9wYXJhbQk9ICZ1NTUwMF9zZGkwX2RtYV9jZmdfcngsCisJLmRtYV90eF9wYXJhbQk9ICZ1NTUwMF9zZGkwX2RtYV9jZmdfdHgsCisjZW5kaWYKIH07CiAKIHZvaWQgX19pbml0IHU1NTAwX3NkaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLXU1NTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLXU1NTAwLmMKaW5kZXggMzlkMzcwYy4uNDRmZDNiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC11NTUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtdTU1MDAuYwpAQCAtMjIsOSArMjIsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdTU1MDBfdWFydF9pbml0KHZvaWQpCiB7Ci0JZGI1NTAwX2FkZF91YXJ0MCgpOwotCWRiNTUwMF9hZGRfdWFydDEoKTsKLQlkYjU1MDBfYWRkX3VhcnQyKCk7CisJZGI1NTAwX2FkZF91YXJ0MChOVUxMKTsKKwlkYjU1MDBfYWRkX3VhcnQxKE5VTEwpOworCWRiNTUwMF9hZGRfdWFydDIoTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB1NTUwMF9pbml0X21hY2hpbmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suYwppbmRleCBiMmIwYTNiLi4zMmNlOTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jCkBAIC0zMTMsNyArMzEzLDcgQEAKIHN0YXRpYyBERUZJTkVfUFJDTVVfQ0xLKG1zcDAyY2xrLAkweDAsIDYsIE1TUDAyQ0xLKTsKIHN0YXRpYyBERUZJTkVfUFJDTVVfQ0xLKG1zcDFjbGssCTB4MCwgNywgTVNQMUNMSyk7IC8qIHYxICovCiBzdGF0aWMgREVGSU5FX1BSQ01VX0NMS19SQVRFKGkyY2NsaywJMHgwLCA4LCBJMkNDTEssIDQ4MDAwMDAwKTsKLXN0YXRpYyBERUZJTkVfUFJDTVVfQ0xLX1JBVEUoc2RtbWNjbGssCTB4MCwgOSwgU0RNTUNDTEssIDUwMDAwMDAwKTsKK3N0YXRpYyBERUZJTkVfUFJDTVVfQ0xLX1JBVEUoc2RtbWNjbGssCTB4MCwgOSwgU0RNTUNDTEssIDEwMDAwMDAwMCk7CiBzdGF0aWMgREVGSU5FX1BSQ01VX0NMSyhzbGltY2xrLAkweDAsIDEwLCBTTElNQ0xLKTsKIHN0YXRpYyBERUZJTkVfUFJDTVVfQ0xLKHBlcjFjbGssCTB4MCwgMTEsIFBFUjFDTEspOwogc3RhdGljIERFRklORV9QUkNNVV9DTEsocGVyMmNsaywJMHgwLCAxMiwgUEVSMkNMSyk7CkBAIC01MjAsNyArNTIwLDcgQEAKIAlDTEsoc3NwMF9lZCwJInNzcDAiLAkJTlVMTCksCiAKIAkvKiBQZXJpcGhlcmFsIENsdXN0ZXIgIzUgKi8KLQlDTEsodXNiX2VkLAkibXVzYl9oZHJjLjAiLAkidXNiIiksCisJQ0xLKHVzYl9lZCwJIm11c2ItdXg1MDAuMCIsCSJ1c2IiKSwKIAogCS8qIFBlcmlwaGVyYWwgQ2x1c3RlciAjNiAqLwogCUNMSyhkbWNfZWQsCSJkbWMiLAkJTlVMTCksCkBAIC01NjEsNyArNTYxLDcgQEAKIAlDTEsoc3NwMF92MSwJInNzcDAiLAkJTlVMTCksCiAKIAkvKiBQZXJpcGhlcmFsIENsdXN0ZXIgIzUgKi8KLQlDTEsodXNiX3YxLAkibXVzYl9oZHJjLjAiLAkidXNiIiksCisJQ0xLKHVzYl92MSwJIm11c2ItdXg1MDAuMCIsCSJ1c2IiKSwKIAogCS8qIFBlcmlwaGVyYWwgQ2x1c3RlciAjNiAqLwogCUNMSyhtdHUxX3YxLAkibXR1MSIsCQlOVUxMKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiNTUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKaW5kZXggYWYwNGUwOC4uYzlkYzJlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9wbXUuaD4KIAogI2luY2x1ZGUgPHBsYXQvZ3Bpby5oPgogCkBAIC0xOCw4ICsxOSwxMCBAQAogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy1kYjU1MDAuaCIKKyNpbmNsdWRlICJzdGUtZG1hNDAtZGI1NTAwLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdTU1MDBfdWFydF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAlfX0lPX0RFVl9ERVNDKFU1NTAwX1VBUlQwX0JBU0UsIFNaXzRLKSwKQEAgLTQzLDYgKzQ2LDI2IEBACiAJX19JT19ERVZfREVTQyhVNTUwMF9QUkNNVV9CQVNFLCBTWl80SyksCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiNTUwMF9wbXVfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gSVJRX0RCNTUwMF9QTVUwLAorCQkuZW5kCQk9IElSUV9EQjU1MDBfUE1VMCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gSVJRX0RCNTUwMF9QTVUxLAorCQkuZW5kCQk9IElSUV9EQjU1MDBfUE1VMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjU1MDBfcG11X2RldmljZSA9IHsKKwkubmFtZQkJCT0gImFybS1wbXUiLAorCS5pZAkJCT0gQVJNX1BNVV9ERVZJQ0VfQ1BVLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUoZGI1NTAwX3BtdV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBkYjU1MDBfcG11X3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWJveDBfcmVzb3VyY2VzW10gPSB7CiAJewogCQkubmFtZSA9ICJtYm94X3BlZXIiLApAQCAtMTI3LDcgKzE1MCw4IEBACiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG1ib3gyX3Jlc291cmNlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdTU1MDBfcGxhdGZvcm1fZGV2c1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGI1NTAwX3BsYXRmb3JtX2RldnNbXSBfX2luaXRkYXRhID0geworCSZkYjU1MDBfcG11X2RldmljZSwKIAkmbWJveDBfZGV2aWNlLAogCSZtYm94MV9kZXZpY2UsCiAJJm1ib3gyX2RldmljZSwKQEAgLTE2NiwxMiArMTkwLDM1IEBACiAJaW90YWJsZV9pbml0KHU1NTAwX2lvX2Rlc2MsIEFSUkFZX1NJWkUodTU1MDBfaW9fZGVzYykpOwogfQogCitzdGF0aWMgaW50IHVzYl9kYjU1MDBfcnhfZG1hX2NmZ1tdID0geworCURCNTUwMF9ETUFfREVWNF9VU0JfT1RHX0lFUF8xXzksCisJREI1NTAwX0RNQV9ERVY1X1VTQl9PVEdfSUVQXzJfMTAsCisJREI1NTAwX0RNQV9ERVY2X1VTQl9PVEdfSUVQXzNfMTEsCisJREI1NTAwX0RNQV9ERVYyMF9VU0JfT1RHX0lFUF80XzEyLAorCURCNTUwMF9ETUFfREVWMjFfVVNCX09UR19JRVBfNV8xMywKKwlEQjU1MDBfRE1BX0RFVjIyX1VTQl9PVEdfSUVQXzZfMTQsCisJREI1NTAwX0RNQV9ERVYyM19VU0JfT1RHX0lFUF83XzE1LAorCURCNTUwMF9ETUFfREVWMzhfVVNCX09UR19JRVBfOAorfTsKKworc3RhdGljIGludCB1c2JfZGI1NTAwX3R4X2RtYV9jZmdbXSA9IHsKKwlEQjU1MDBfRE1BX0RFVjRfVVNCX09UR19PRVBfMV85LAorCURCNTUwMF9ETUFfREVWNV9VU0JfT1RHX09FUF8yXzEwLAorCURCNTUwMF9ETUFfREVWNl9VU0JfT1RHX09FUF8zXzExLAorCURCNTUwMF9ETUFfREVWMjBfVVNCX09UR19PRVBfNF8xMiwKKwlEQjU1MDBfRE1BX0RFVjIxX1VTQl9PVEdfT0VQXzVfMTMsCisJREI1NTAwX0RNQV9ERVYyMl9VU0JfT1RHX09FUF82XzE0LAorCURCNTUwMF9ETUFfREVWMjNfVVNCX09UR19PRVBfN18xNSwKKwlEQjU1MDBfRE1BX0RFVjM4X1VTQl9PVEdfT0VQXzgKK307CisKIHZvaWQgX19pbml0IHU1NTAwX2luaXRfZGV2aWNlcyh2b2lkKQogewogCWRiNTUwMF9hZGRfZ3Bpb3MoKTsKIAlkYjU1MDBfZG1hX2luaXQoKTsKIAlkYjU1MDBfYWRkX3J0YygpOworCWRiNTUwMF9hZGRfdXNiKHVzYl9kYjU1MDBfcnhfZG1hX2NmZywgdXNiX2RiNTUwMF90eF9kbWFfY2ZnKTsKIAotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHU1NTAwX3BsYXRmb3JtX2RldnMsCi0JCQkgICAgIEFSUkFZX1NJWkUodTU1MDBfcGxhdGZvcm1fZGV2cykpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRiNTUwMF9wbGF0Zm9ybV9kZXZzLAorCQkJICAgICBBUlJBWV9TSVpFKGRiNTUwMF9wbGF0Zm9ybV9kZXZzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCmluZGV4IDE3NDhmYmMuLjUxNjEyNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCkBAIC0xMiwyMSArMTIsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9wbXUuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9zZXR1cC5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWRiODUwMC5oIgotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2c1tdIF9faW5pdGRhdGEgPSB7Ci0JJnU4NTAwX2RtYTQwX2RldmljZSwKLX07CisjaW5jbHVkZSAic3RlLWRtYTQwLWRiODUwMC5oIgogCiAvKiBtaW5pbXVtIHN0YXRpYyBpL28gbWFwcGluZyByZXF1aXJlZCB0byBib290IFU4NTAwIHBsYXRmb3JtcyAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB1ODUwMF91YXJ0X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpAQCAtODksNiArODksNTEgQEAKIAkJaW90YWJsZV9pbml0KHU4NTAwX3YyX2lvX2Rlc2MsIEFSUkFZX1NJWkUodTg1MDBfdjJfaW9fZGVzYykpOwogfQogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiODUwMF9wbXVfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gSVJRX0RCODUwMF9QTVUsCisJCS5lbmQJCT0gSVJRX0RCODUwMF9QTVUsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworLyoKKyAqIFRoZSBQTVUgSVJRIGxpbmVzIG9mIHR3byBjb3JlcyBhcmUgd2lyZWQgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBpbnRlcnJ1cHQuCisgKiBCb3VuY2UgdGhlIGludGVycnVwdCB0byB0aGUgb3RoZXIgY29yZSBpZiBpdCdzIG5vdCBvdXJzLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZGI4NTAwX3BtdV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldiwgaXJxX2hhbmRsZXJfdCBoYW5kbGVyKQoreworCWlycXJldHVybl90IHJldCA9IGhhbmRsZXIoaXJxLCBkZXYpOworCWludCBvdGhlciA9ICFzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAocmV0ID09IElSUV9OT05FICYmIGNwdV9vbmxpbmUob3RoZXIpKQorCQlpcnFfc2V0X2FmZmluaXR5KGlycSwgY3B1bWFza19vZihvdGhlcikpOworCisJLyoKKwkgKiBXZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYXdheSB3aXRoIHRoZSBhbW91bnQgb2YgSVJRX05PTkVzIHdlIGdpdmUsCisJICogd2hpbGUgc3RpbGwgaGF2aW5nIHRoZSBzcHVyaW91cyBJUlEgZGV0ZWN0aW9uIGNvZGUga2ljayBpbiBpZiB0aGUKKwkgKiBpbnRlcnJ1cHQgcmVhbGx5IHN0YXJ0cyBoaXR0aW5nIHNwdXJpb3VzbHkuCisJICovCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBhcm1fcG11X3BsYXRkYXRhIGRiODUwMF9wbXVfcGxhdGRhdGEgPSB7CisJLmhhbmRsZV9pcnEJCT0gZGI4NTAwX3BtdV9oYW5kbGVyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGI4NTAwX3BtdV9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJhcm0tcG11IiwKKwkuaWQJCQk9IEFSTV9QTVVfREVWSUNFX0NQVSwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKGRiODUwMF9wbXVfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gZGI4NTAwX3BtdV9yZXNvdXJjZXMsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmRiODUwMF9wbXVfcGxhdGRhdGEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJnU4NTAwX2RtYTQwX2RldmljZSwKKwkmZGI4NTAwX3BtdV9kZXZpY2UsCit9OworCiBzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IF9faW5pdGRhdGEgZGI4NTAwX2dwaW9fYmFzZVtdID0gewogCVU4NTAwX0dQSU9CQU5LMF9CQVNFLAogCVU4NTAwX0dQSU9CQU5LMV9CQVNFLApAQCAtMTExLDYgKzE1NiwyOCBAQAogCQkJIElSUV9EQjg1MDBfR1BJTzAsICZwZGF0YSk7CiB9CiAKK3N0YXRpYyBpbnQgdXNiX2RiODUwMF9yeF9kbWFfY2ZnW10gPSB7CisJREI4NTAwX0RNQV9ERVYzOF9VU0JfT1RHX0lFUF8xXzksCisJREI4NTAwX0RNQV9ERVYzN19VU0JfT1RHX0lFUF8yXzEwLAorCURCODUwMF9ETUFfREVWMzZfVVNCX09UR19JRVBfM18xMSwKKwlEQjg1MDBfRE1BX0RFVjE5X1VTQl9PVEdfSUVQXzRfMTIsCisJREI4NTAwX0RNQV9ERVYxOF9VU0JfT1RHX0lFUF81XzEzLAorCURCODUwMF9ETUFfREVWMTdfVVNCX09UR19JRVBfNl8xNCwKKwlEQjg1MDBfRE1BX0RFVjE2X1VTQl9PVEdfSUVQXzdfMTUsCisJREI4NTAwX0RNQV9ERVYzOV9VU0JfT1RHX0lFUF84Cit9OworCitzdGF0aWMgaW50IHVzYl9kYjg1MDBfdHhfZG1hX2NmZ1tdID0geworCURCODUwMF9ETUFfREVWMzhfVVNCX09UR19PRVBfMV85LAorCURCODUwMF9ETUFfREVWMzdfVVNCX09UR19PRVBfMl8xMCwKKwlEQjg1MDBfRE1BX0RFVjM2X1VTQl9PVEdfT0VQXzNfMTEsCisJREI4NTAwX0RNQV9ERVYxOV9VU0JfT1RHX09FUF80XzEyLAorCURCODUwMF9ETUFfREVWMThfVVNCX09UR19PRVBfNV8xMywKKwlEQjg1MDBfRE1BX0RFVjE3X1VTQl9PVEdfT0VQXzZfMTQsCisJREI4NTAwX0RNQV9ERVYxNl9VU0JfT1RHX09FUF83XzE1LAorCURCODUwMF9ETUFfREVWMzlfVVNCX09UR19PRVBfOAorfTsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGJvYXJkIGluaXQKICAqLwpAQCAtMTIxLDYgKzE4OCw3IEBACiAKIAlkYjg1MDBfYWRkX3J0YygpOwogCWRiODUwMF9hZGRfZ3Bpb3MoKTsKKwlkYjg1MDBfYWRkX3VzYih1c2JfZGI4NTAwX3J4X2RtYV9jZmcsIHVzYl9kYjg1MDBfdHhfZG1hX2NmZyk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJjcHVmcmVxLXU4NTAwIiwgLTEsIE5VTEwsIDApOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldnMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2cykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWNvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWNvbW1vbi5jCmluZGV4IGZlNjlmNWYuLjEzYTRjZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtY29tbW9uLmMKQEAgLTEzOSw2ICsxMzksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgZmlyc3QgKz0gMzIsIGlycSsrKSB7CiAJCXBkYXRhLT5maXJzdF9ncGlvID0gZmlyc3Q7CiAJCXBkYXRhLT5maXJzdF9pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKGZpcnN0KTsKKwkJcGRhdGEtPm51bV9ncGlvID0gMzI7CiAKIAkJZGJ4NTAwX2FkZF9ncGlvKGksIGJhc2VbaV0sIGlycSwgcGRhdGEpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1jb21tb24uaAppbmRleCBjYmFkYzExLi5jNzE5YjVhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWNvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1jb21tb24uaApAQCAtNDIsMTAgKzQyLDEzIEBACiAJcmV0dXJuIGRieDUwMF9hZGRfYW1iYV9kZXZpY2UobmFtZSwgYmFzZSwgaXJxLCBwZGF0YSwgMCk7CiB9CiAKK3N0cnVjdCBhbWJhX3BsMDExX2RhdGE7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFtYmFfZGV2aWNlICoKLWRieDUwMF9hZGRfdWFydChjb25zdCBjaGFyICpuYW1lLCByZXNvdXJjZV9zaXplX3QgYmFzZSwgaW50IGlycSkKK2RieDUwMF9hZGRfdWFydChjb25zdCBjaGFyICpuYW1lLCByZXNvdXJjZV9zaXplX3QgYmFzZSwgaW50IGlycSwKKwkJc3RydWN0IGFtYmFfcGwwMTFfZGF0YSAqcGRhdGEpCiB7Ci0JcmV0dXJuIGRieDUwMF9hZGRfYW1iYV9kZXZpY2UobmFtZSwgYmFzZSwgaXJxLCBOVUxMLCAwKTsKKwlyZXR1cm4gZGJ4NTAwX2FkZF9hbWJhX2RldmljZShuYW1lLCBiYXNlLCBpcnEsIHBkYXRhLCAwKTsKIH0KIAogc3RydWN0IG5ta19pMmNfY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjU1MDAuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjU1MDAuaAppbmRleCBjOGQ3OTAxLi45NDYyN2Y3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI1NTAwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiNTUwMC5oCkBAIC0zNCw2ICszNCw5IEBACiAjZGVmaW5lIGRiNTUwMF9hZGRfcnRjKCkgXAogCWRieDUwMF9hZGRfcnRjKFU1NTAwX1JUQ19CQVNFLCBJUlFfREI1NTAwX1JUQyk7CiAKKyNkZWZpbmUgZGI1NTAwX2FkZF91c2IocnhfY2ZnLCB0eF9jZmcpIFwKKwl1eDUwMF9hZGRfdXNiKFU1NTAwX1VTQk9UR19CQVNFLCBJUlFfREI1NTAwX1VTQk9URywgcnhfY2ZnLCB0eF9jZmcpCisKICNkZWZpbmUgZGI1NTAwX2FkZF9zZGkwKHBkYXRhKSBcCiAJZGJ4NTAwX2FkZF9zZGkoInNkaTAiLCBVNTUwMF9TREkwX0JBU0UsIElSUV9EQjU1MDBfU0RNTUMwLCBwZGF0YSkKICNkZWZpbmUgZGI1NTAwX2FkZF9zZGkxKHBkYXRhKSBcCkBAIC01NCwxMyArNTcsMTMgQEAKICNkZWZpbmUgZGI1NTAwX2FkZF9zcGkzKHBkYXRhKSBcCiAJZGJ4NTAwX2FkZF9zcGkoInNwaTMiLCBVNTUwMF9TUEkzX0JBU0UsIElSUV9EQjU1MDBfU1BJMywgcGRhdGEpCiAKLSNkZWZpbmUgZGI1NTAwX2FkZF91YXJ0MCgpIFwKLQlkYng1MDBfYWRkX3VhcnQoInVhcnQwIiwgVTU1MDBfVUFSVDBfQkFTRSwgSVJRX0RCNTUwMF9VQVJUMCkKLSNkZWZpbmUgZGI1NTAwX2FkZF91YXJ0MSgpIFwKLQlkYng1MDBfYWRkX3VhcnQoInVhcnQxIiwgVTU1MDBfVUFSVDFfQkFTRSwgSVJRX0RCNTUwMF9VQVJUMSkKLSNkZWZpbmUgZGI1NTAwX2FkZF91YXJ0MigpIFwKLQlkYng1MDBfYWRkX3VhcnQoInVhcnQyIiwgVTU1MDBfVUFSVDJfQkFTRSwgSVJRX0RCNTUwMF9VQVJUMikKLSNkZWZpbmUgZGI1NTAwX2FkZF91YXJ0MygpIFwKLQlkYng1MDBfYWRkX3VhcnQoInVhcnQzIiwgVTU1MDBfVUFSVDNfQkFTRSwgSVJRX0RCNTUwMF9VQVJUMykKKyNkZWZpbmUgZGI1NTAwX2FkZF91YXJ0MChwbGF0KSBcCisJZGJ4NTAwX2FkZF91YXJ0KCJ1YXJ0MCIsIFU1NTAwX1VBUlQwX0JBU0UsIElSUV9EQjU1MDBfVUFSVDAsIHBsYXQpCisjZGVmaW5lIGRiNTUwMF9hZGRfdWFydDEocGxhdCkgXAorCWRieDUwMF9hZGRfdWFydCgidWFydDEiLCBVNTUwMF9VQVJUMV9CQVNFLCBJUlFfREI1NTAwX1VBUlQxLCBwbGF0KQorI2RlZmluZSBkYjU1MDBfYWRkX3VhcnQyKHBsYXQpIFwKKwlkYng1MDBfYWRkX3VhcnQoInVhcnQyIiwgVTU1MDBfVUFSVDJfQkFTRSwgSVJRX0RCNTUwMF9VQVJUMiwgcGxhdCkKKyNkZWZpbmUgZGI1NTAwX2FkZF91YXJ0MyhwbGF0KSBcCisJZGJ4NTAwX2FkZF91YXJ0KCJ1YXJ0MyIsIFU1NTAwX1VBUlQzX0JBU0UsIElSUV9EQjU1MDBfVUFSVDMsIHBsYXQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiODUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiODUwMC5jCmluZGV4IDIzYzY5NWQ1Li43M2IxNzQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI4NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiODUwMC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDIyLmg+CiAKICNpbmNsdWRlIDxwbGF0L3N0ZV9kbWE0MC5oPgogCkBAIC02NywxMiArNjgsNzIgQEAKIAogLyoKICAqIE1hcHBpbmcgYmV0d2VlbiBkZXN0aW5hdGlvbiBldmVudCBsaW5lcyBhbmQgcGh5c2ljYWwgZGV2aWNlIGFkZHJlc3MuCi0gKiBUaGUgZXZlbnQgbGluZSBpcyB0aWVkIHRvIGEgZGV2aWNlIGFuZCB0aGVyZWZvciB0aGUgYWRkcmVzcyBpcyBjb25zdGFudC4KKyAqIFRoZSBldmVudCBsaW5lIGlzIHRpZWQgdG8gYSBkZXZpY2UgYW5kIHRoZXJlZm9yZSB0aGUgYWRkcmVzcyBpcyBjb25zdGFudC4KKyAqIFdoZW4gdGhlIGFkZHJlc3MgY29tZXMgZnJvbSBhIHByaW1lY2VsbCBpdCB3aWxsIGJlIGNvbmZpZ3VyZWQgaW4gcnVudGltZQorICogYW5kIHdlIHNldCB0aGUgYWRkcmVzcyB0byAtMSBhcyBhIHBsYWNlaG9sZGVyLgogICovCi1zdGF0aWMgY29uc3QgZG1hX2FkZHJfdCBkbWE0MF90eF9tYXBbREI4NTAwX0RNQV9OUl9ERVZdOworc3RhdGljIGNvbnN0IGRtYV9hZGRyX3QgZG1hNDBfdHhfbWFwW0RCODUwMF9ETUFfTlJfREVWXSA9IHsKKwkvKiBNVVNCIC0gdGhlc2Ugd2lsbCBiZSBydW50aW1lLXJlY29uZmlndXJlZCAqLworCVtEQjg1MDBfRE1BX0RFVjM5X1VTQl9PVEdfT0VQXzhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTZfVVNCX09UR19PRVBfN18xNV0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYxN19VU0JfT1RHX09FUF82XzE0XSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjE4X1VTQl9PVEdfT0VQXzVfMTNdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTlfVVNCX09UR19PRVBfNF8xMl0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYzNl9VU0JfT1RHX09FUF8zXzExXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjM3X1VTQl9PVEdfT0VQXzJfMTBdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMzhfVVNCX09UR19PRVBfMV85XSA9IC0xLAorCS8qIFByaW1lQ2VsbHMgLSBydW4tdGltZSBjb25maWd1cmVkICovCisJW0RCODUwMF9ETUFfREVWMF9TUEkwX1RYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjFfU0RfTU1DMF9UWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYyX1NEX01NQzFfVFhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWM19TRF9NTUMyX1RYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjhfU1NQMF9UWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVY5X1NTUDFfVFhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTFfVUFSVDJfVFhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTJfVUFSVDFfVFhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTNfVUFSVDBfVFhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMjhfU0RfTU0yX1RYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjI5X1NEX01NMF9UWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYzMl9TRF9NTTFfVFhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMzNfU1BJMl9UWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYzNV9TUEkxX1RYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjQwX1NQSTNfVFhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWNDFfU0RfTU0zX1RYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjQyX1NEX01NNF9UWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVY0M19TRF9NTTVfVFhdID0gLTEsCit9OwogCiAvKiBNYXBwaW5nIGJldHdlZW4gc291cmNlIGV2ZW50IGxpbmVzIGFuZCBwaHlzaWNhbCBkZXZpY2UgYWRkcmVzcyAqLwotc3RhdGljIGNvbnN0IGRtYV9hZGRyX3QgZG1hNDBfcnhfbWFwW0RCODUwMF9ETUFfTlJfREVWXTsKK3N0YXRpYyBjb25zdCBkbWFfYWRkcl90IGRtYTQwX3J4X21hcFtEQjg1MDBfRE1BX05SX0RFVl0gPSB7CisJLyogTVVTQiAtIHRoZXNlIHdpbGwgYmUgcnVudGltZS1yZWNvbmZpZ3VyZWQgKi8KKwlbREI4NTAwX0RNQV9ERVYzOV9VU0JfT1RHX0lFUF84XSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjE2X1VTQl9PVEdfSUVQXzdfMTVdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTdfVVNCX09UR19JRVBfNl8xNF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYxOF9VU0JfT1RHX0lFUF81XzEzXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjE5X1VTQl9PVEdfSUVQXzRfMTJdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMzZfVVNCX09UR19JRVBfM18xMV0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYzN19VU0JfT1RHX0lFUF8yXzEwXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjM4X1VTQl9PVEdfSUVQXzFfOV0gPSAtMSwKKwkvKiBQcmltZUNlbGxzICovCisJW0RCODUwMF9ETUFfREVWMF9TUEkwX1JYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjFfU0RfTU1DMF9SWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYyX1NEX01NQzFfUlhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWM19TRF9NTUMyX1JYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjhfU1NQMF9SWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVY5X1NTUDFfUlhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTFfVUFSVDJfUlhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTJfVUFSVDFfUlhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMTNfVUFSVDBfUlhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMjhfU0RfTU0yX1JYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjI5X1NEX01NMF9SWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYzMl9TRF9NTTFfUlhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWMzNfU1BJMl9SWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVYzNV9TUEkxX1JYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjQwX1NQSTNfUlhdID0gLTEsCisJW0RCODUwMF9ETUFfREVWNDFfU0RfTU0zX1JYXSA9IC0xLAorCVtEQjg1MDBfRE1BX0RFVjQyX1NEX01NNF9SWF0gPSAtMSwKKwlbREI4NTAwX0RNQV9ERVY0M19TRF9NTTVfUlhdID0gLTEsCit9OwogCiAvKiBSZXNlcnZlZCBldmVudCBsaW5lcyBmb3IgbWVtY3B5IG9ubHkgKi8KIHN0YXRpYyBpbnQgZG1hNDBfbWVtY3B5X2V2ZW50W10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI4NTAwLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI4NTAwLmgKaW5kZXggM2E3NzBjNy4uOWNjNmY4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiODUwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjg1MDAuaApAQCAtNjEsNiArNjEsOSBAQAogI2RlZmluZSBkYjg1MDBfYWRkX3J0YygpIFwKIAlkYng1MDBfYWRkX3J0YyhVODUwMF9SVENfQkFTRSwgSVJRX0RCODUwMF9SVEMpOwogCisjZGVmaW5lIGRiODUwMF9hZGRfdXNiKHJ4X2NmZywgdHhfY2ZnKSBcCisJdXg1MDBfYWRkX3VzYihVODUwMF9VU0JPVEdfQkFTRSwgSVJRX0RCODUwMF9VU0JPVEcsIHJ4X2NmZywgdHhfY2ZnKQorCiAjZGVmaW5lIGRiODUwMF9hZGRfc2RpMChwZGF0YSkgXAogCWRieDUwMF9hZGRfc2RpKCJzZGkwIiwgVTg1MDBfU0RJMF9CQVNFLCBJUlFfREI4NTAwX1NETU1DMCwgcGRhdGEpCiAjZGVmaW5lIGRiODUwMF9hZGRfc2RpMShwZGF0YSkgXApAQCAtODgsMTEgKzkxLDExIEBACiAjZGVmaW5lIGRiODUwMF9hZGRfc3BpMyhwZGF0YSkgXAogCWRieDUwMF9hZGRfc3BpKCJzcGkzIiwgVTg1MDBfU1BJM19CQVNFLCBJUlFfREI4NTAwX1NQSTMsIHBkYXRhKQogCi0jZGVmaW5lIGRiODUwMF9hZGRfdWFydDAoKSBcCi0JZGJ4NTAwX2FkZF91YXJ0KCJ1YXJ0MCIsIFU4NTAwX1VBUlQwX0JBU0UsIElSUV9EQjg1MDBfVUFSVDApCi0jZGVmaW5lIGRiODUwMF9hZGRfdWFydDEoKSBcCi0JZGJ4NTAwX2FkZF91YXJ0KCJ1YXJ0MSIsIFU4NTAwX1VBUlQxX0JBU0UsIElSUV9EQjg1MDBfVUFSVDEpCi0jZGVmaW5lIGRiODUwMF9hZGRfdWFydDIoKSBcCi0JZGJ4NTAwX2FkZF91YXJ0KCJ1YXJ0MiIsIFU4NTAwX1VBUlQyX0JBU0UsIElSUV9EQjg1MDBfVUFSVDIpCisjZGVmaW5lIGRiODUwMF9hZGRfdWFydDAocGRhdGEpIFwKKwlkYng1MDBfYWRkX3VhcnQoInVhcnQwIiwgVTg1MDBfVUFSVDBfQkFTRSwgSVJRX0RCODUwMF9VQVJUMCwgcGRhdGEpCisjZGVmaW5lIGRiODUwMF9hZGRfdWFydDEocGRhdGEpIFwKKwlkYng1MDBfYWRkX3VhcnQoInVhcnQxIiwgVTg1MDBfVUFSVDFfQkFTRSwgSVJRX0RCODUwMF9VQVJUMSwgcGRhdGEpCisjZGVmaW5lIGRiODUwMF9hZGRfdWFydDIocGRhdGEpIFwKKwlkYng1MDBfYWRkX3VhcnQoInVhcnQyIiwgVTg1MDBfVUFSVDJfQkFTRSwgSVJRX0RCODUwMF9VQVJUMiwgcGRhdGEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kbWEtZGI1NTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RtYS1kYjU1MDAuYwppbmRleCAzMmEwNjFmLi4xY2ZhYjY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RtYS1kYjU1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RtYS1kYjU1MDAuYwpAQCAtNzMsMTEgKzczLDI3IEBACiAgKi8KIHN0YXRpYyBjb25zdCBkbWFfYWRkcl90IGRtYTQwX3J4X21hcFtEQjU1MDBfRE1BX05SX0RFVl0gPSB7CiAJW0RCNTUwMF9ETUFfREVWMjRfU0RNTUMwX1JYXSA9IC0xLAorCVtEQjU1MDBfRE1BX0RFVjM4X1VTQl9PVEdfSUVQXzhdID0gLTEsCisJW0RCNTUwMF9ETUFfREVWMjNfVVNCX09UR19JRVBfN18xNV0gPSAtMSwKKwlbREI1NTAwX0RNQV9ERVYyMl9VU0JfT1RHX0lFUF82XzE0XSA9IC0xLAorCVtEQjU1MDBfRE1BX0RFVjIxX1VTQl9PVEdfSUVQXzVfMTNdID0gLTEsCisJW0RCNTUwMF9ETUFfREVWMjBfVVNCX09UR19JRVBfNF8xMl0gPSAtMSwKKwlbREI1NTAwX0RNQV9ERVY2X1VTQl9PVEdfSUVQXzNfMTFdID0gLTEsCisJW0RCNTUwMF9ETUFfREVWNV9VU0JfT1RHX0lFUF8yXzEwXSA9IC0xLAorCVtEQjU1MDBfRE1BX0RFVjRfVVNCX09UR19JRVBfMV85XSA9IC0xLAogfTsKIAogLyogTWFwcGluZyBiZXR3ZWVuIGRlc3RpbmF0aW9uIGV2ZW50IGxpbmVzIGFuZCBwaHlzaWNhbCBkZXZpY2UgYWRkcmVzcyAqLwogc3RhdGljIGNvbnN0IGRtYV9hZGRyX3QgZG1hNDBfdHhfbWFwW0RCNTUwMF9ETUFfTlJfREVWXSA9IHsKIAlbREI1NTAwX0RNQV9ERVYyNF9TRE1NQzBfVFhdID0gLTEsCisJW0RCNTUwMF9ETUFfREVWMzhfVVNCX09UR19PRVBfOF0gPSAtMSwKKwlbREI1NTAwX0RNQV9ERVYyM19VU0JfT1RHX09FUF83XzE1XSA9IC0xLAorCVtEQjU1MDBfRE1BX0RFVjIyX1VTQl9PVEdfT0VQXzZfMTRdID0gLTEsCisJW0RCNTUwMF9ETUFfREVWMjFfVVNCX09UR19PRVBfNV8xM10gPSAtMSwKKwlbREI1NTAwX0RNQV9ERVYyMF9VU0JfT1RHX09FUF80XzEyXSA9IC0xLAorCVtEQjU1MDBfRE1BX0RFVjZfVVNCX09UR19PRVBfM18xMV0gPSAtMSwKKwlbREI1NTAwX0RNQV9ERVY1X1VTQl9PVEdfT0VQXzJfMTBdID0gLTEsCisJW0RCNTUwMF9ETUFfREVWNF9VU0JfT1RHX09FUF8xXzldID0gLTEsCiB9OwogCiBzdGF0aWMgaW50IGRtYTQwX21lbWNweV9ldmVudFtdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDlhNjYxNGMuLmFiMGZlMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTUwLDcgKzUwLDExIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQogewotCWlmIChtYWNoaW5lX2lzX3U4NTAwKCkpCisJLyogQ2hlY2sgaW4gcnVuIHRpbWUgaWYgd2UgcnVuIG9uIGFuIFU4NTAwIG9yIFU1NTAwICovCisJaWYgKG1hY2hpbmVfaXNfdTg1MDAoKSB8fAorCSAgICBtYWNoaW5lX2lzX3N2cDg1MDB2MSgpIHx8CisJICAgIG1hY2hpbmVfaXNfc3ZwODUwMHYyKCkgfHwKKwkgICAgbWFjaGluZV9pc19ocmVmdjYwKCkpCiAJCXV4NTAwX3VhcnRfYmFzZSA9IFU4NTAwX1VBUlQyX0JBU0U7CiAJZWxzZSBpZiAobWFjaGluZV9pc191NTUwMCgpKQogCQl1eDUwMF91YXJ0X2Jhc2UgPSBVNTUwMF9VQVJUMF9CQVNFOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdXNiLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzczOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdXNiLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMQorICoKKyAqIEF1dGhvcjogTWlhbiBZb3VzYWYgS2F1a2FiIDxtaWFuLnlvdXNhZi5rYXVrYWJAc3Rlcmljc3Nvbi5jb20+CisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1VTQl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVVNCX0gKKworI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorCisjZGVmaW5lIFVYNTAwX01VU0JfRE1BX05VTV9SWF9DSEFOTkVMUyA4CisjZGVmaW5lIFVYNTAwX01VU0JfRE1BX05VTV9UWF9DSEFOTkVMUyA4CisKK3N0cnVjdCB1eDUwMF9tdXNiX2JvYXJkX2RhdGEgeworCXZvaWQJKipkbWFfcnhfcGFyYW1fYXJyYXk7CisJdm9pZAkqKmRtYV90eF9wYXJhbV9hcnJheTsKKwl1MzIJbnVtX3J4X2NoYW5uZWxzOworCXUzMgludW1fdHhfY2hhbm5lbHM7CisJYm9vbCAoKmRtYV9maWx0ZXIpKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqZmlsdGVyX3BhcmFtKTsKK307CisKK3ZvaWQgdXg1MDBfYWRkX3VzYihyZXNvdXJjZV9zaXplX3QgYmFzZSwgaW50IGlycSwgaW50ICpkbWFfcnhfY2ZnLAorCWludCAqZG1hX3R4X2NmZyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvbWJveC1kYjU1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvbWJveC1kYjU1MDAuYwppbmRleCBjYmYxNTcxLi5hNGZmYjlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL21ib3gtZGI1NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9tYm94LWRiNTUwMC5jCkBAIC00OTgsNyArNDk4LDcgQEAKICNlbmRpZgogCiAJZGV2X2luZm8oJihtYm94LT5wZGV2LT5kZXYpLAotCQkgIk1haWxib3ggZHJpdmVyIHdpdGggaW5kZXggJWQgaW5pdGF0ZWQhXG4iLCBtYm94X2lkKTsKKwkJICJNYWlsYm94IGRyaXZlciB3aXRoIGluZGV4ICVkIGluaXRpYXRlZCFcbiIsIG1ib3hfaWQpOwogCiBleGl0OgogCXJldHVybiBtYm94OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC91c2IuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlNTM1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvdXNiLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTEKKyAqCisgKiBBdXRob3I6IE1pYW4gWW91c2FmIEthdWthYiA8bWlhbi55b3VzYWYua2F1a2FiQHN0ZXJpY3Nzb24uY29tPgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgorI2luY2x1ZGUgPHBsYXQvc3RlX2RtYTQwLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvdXNiLmg+CisKKyNkZWZpbmUgTVVTQl9ETUE0MF9SWF9DSCB7IFwKKwkJLm1vZGUgPSBTVEVETUE0MF9NT0RFX0xPR0lDQUwsIFwKKwkJLmRpciA9IFNURURNQTQwX1BFUklQSF9UT19NRU0sIFwKKwkJLmRzdF9kZXZfdHlwZSA9IFNURURNQTQwX0RFVl9EU1RfTUVNT1JZLCBcCisJCS5zcmNfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfV09SRF9XSURUSCwgXAorCQkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEgsIFwKKwkJLnNyY19pbmZvLnBzaXplID0gU1RFRE1BNDBfUFNJWkVfTE9HXzE2LCBcCisJCS5kc3RfaW5mby5wc2l6ZSA9IFNURURNQTQwX1BTSVpFX0xPR18xNiwgXAorCX0KKworI2RlZmluZSBNVVNCX0RNQTQwX1RYX0NIIHsgXAorCQkubW9kZSA9IFNURURNQTQwX01PREVfTE9HSUNBTCwgXAorCQkuZGlyID0gU1RFRE1BNDBfTUVNX1RPX1BFUklQSCwgXAorCQkuc3JjX2Rldl90eXBlID0gU1RFRE1BNDBfREVWX1NSQ19NRU1PUlksIFwKKwkJLnNyY19pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9XT1JEX1dJRFRILCBcCisJCS5kc3RfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfV09SRF9XSURUSCwgXAorCQkuc3JjX2luZm8ucHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfMTYsIFwKKwkJLmRzdF9pbmZvLnBzaXplID0gU1RFRE1BNDBfUFNJWkVfTE9HXzE2LCBcCisJfQorCitzdGF0aWMgc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnIG11c2JfZG1hX3J4X2NoW1VYNTAwX01VU0JfRE1BX05VTV9SWF9DSEFOTkVMU10KKwk9IHsKKwlNVVNCX0RNQTQwX1JYX0NILAorCU1VU0JfRE1BNDBfUlhfQ0gsCisJTVVTQl9ETUE0MF9SWF9DSCwKKwlNVVNCX0RNQTQwX1JYX0NILAorCU1VU0JfRE1BNDBfUlhfQ0gsCisJTVVTQl9ETUE0MF9SWF9DSCwKKwlNVVNCX0RNQTQwX1JYX0NILAorCU1VU0JfRE1BNDBfUlhfQ0gKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgbXVzYl9kbWFfdHhfY2hbVVg1MDBfTVVTQl9ETUFfTlVNX1RYX0NIQU5ORUxTXQorCT0geworCU1VU0JfRE1BNDBfVFhfQ0gsCisJTVVTQl9ETUE0MF9UWF9DSCwKKwlNVVNCX0RNQTQwX1RYX0NILAorCU1VU0JfRE1BNDBfVFhfQ0gsCisJTVVTQl9ETUE0MF9UWF9DSCwKKwlNVVNCX0RNQTQwX1RYX0NILAorCU1VU0JfRE1BNDBfVFhfQ0gsCisJTVVTQl9ETUE0MF9UWF9DSCwKK307CisKK3N0YXRpYyB2b2lkICp1eDUwMF9kbWFfcnhfcGFyYW1fYXJyYXlbVVg1MDBfTVVTQl9ETUFfTlVNX1JYX0NIQU5ORUxTXSA9IHsKKwkmbXVzYl9kbWFfcnhfY2hbMF0sCisJJm11c2JfZG1hX3J4X2NoWzFdLAorCSZtdXNiX2RtYV9yeF9jaFsyXSwKKwkmbXVzYl9kbWFfcnhfY2hbM10sCisJJm11c2JfZG1hX3J4X2NoWzRdLAorCSZtdXNiX2RtYV9yeF9jaFs1XSwKKwkmbXVzYl9kbWFfcnhfY2hbNl0sCisJJm11c2JfZG1hX3J4X2NoWzddCit9OworCitzdGF0aWMgdm9pZCAqdXg1MDBfZG1hX3R4X3BhcmFtX2FycmF5W1VYNTAwX01VU0JfRE1BX05VTV9UWF9DSEFOTkVMU10gPSB7CisJJm11c2JfZG1hX3R4X2NoWzBdLAorCSZtdXNiX2RtYV90eF9jaFsxXSwKKwkmbXVzYl9kbWFfdHhfY2hbMl0sCisJJm11c2JfZG1hX3R4X2NoWzNdLAorCSZtdXNiX2RtYV90eF9jaFs0XSwKKwkmbXVzYl9kbWFfdHhfY2hbNV0sCisJJm11c2JfZG1hX3R4X2NoWzZdLAorCSZtdXNiX2RtYV90eF9jaFs3XQorfTsKKworc3RhdGljIHN0cnVjdCB1eDUwMF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5kbWFfcnhfcGFyYW1fYXJyYXkgPSB1eDUwMF9kbWFfcnhfcGFyYW1fYXJyYXksCisJLmRtYV90eF9wYXJhbV9hcnJheSA9IHV4NTAwX2RtYV90eF9wYXJhbV9hcnJheSwKKwkubnVtX3J4X2NoYW5uZWxzID0gVVg1MDBfTVVTQl9ETUFfTlVNX1JYX0NIQU5ORUxTLAorCS5udW1fdHhfY2hhbm5lbHMgPSBVWDUwMF9NVVNCX0RNQV9OVU1fVFhfQ0hBTk5FTFMsCisJLmRtYV9maWx0ZXIgPSBzdGVkbWE0MF9maWx0ZXIsCit9OworCitzdGF0aWMgdTY0IHV4NTAwX211c2JfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZyBtdXNiX2hkcmNfY29uZmlnID0geworCS5tdWx0aXBvaW50CT0gdHJ1ZSwKKwkuZHluX2ZpZm8JPSB0cnVlLAorCS5udW1fZXBzCT0gMTYsCisJLnJhbV9iaXRzCT0gMTYsCit9OworCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIG11c2JfcGxhdGZvcm1fZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9PVEcpCisJLm1vZGUgPSBNVVNCX09URywKKyNlbGlmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwpCisJLm1vZGUgPSBNVVNCX1BFUklQSEVSQUwsCisjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IT1NUKSAqLworCS5tb2RlID0gTVVTQl9IT1NULAorI2VuZGlmCisJLmNvbmZpZyA9ICZtdXNiX2hkcmNfY29uZmlnLAorCS5ib2FyZF9kYXRhID0gJm11c2JfYm9hcmRfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAidXNiLW1lbSIsCisJCS5mbGFncwk9ICBJT1JFU09VUkNFX01FTSwKKwl9LAorCisJWzFdID0geworCQkubmFtZSAgID0gIm1jIiwgLyogaGFyZC1jb2RlZCBpbiBtdXNiICovCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHV4NTAwX211c2JfZGV2aWNlID0geworCS5uYW1lID0gIm11c2ItdXg1MDAiLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXVzYl9wbGF0Zm9ybV9kYXRhLAorCQkuZG1hX21hc2sgPSAmdXg1MDBfbXVzYl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IHVzYl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgdXg1MDBfdXNiX2RtYV91cGRhdGVfcnhfY2hfY29uZmlnKGludCAqc3JjX2Rldl90eXBlKQoreworCXUzMiBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IFVYNTAwX01VU0JfRE1BX05VTV9SWF9DSEFOTkVMUzsgaWR4KyspCisJCW11c2JfZG1hX3J4X2NoW2lkeF0uc3JjX2Rldl90eXBlID0gc3JjX2Rldl90eXBlW2lkeF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1eDUwMF91c2JfZG1hX3VwZGF0ZV90eF9jaF9jb25maWcoaW50ICpkc3RfZGV2X3R5cGUpCit7CisJdTMyIGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgVVg1MDBfTVVTQl9ETUFfTlVNX1RYX0NIQU5ORUxTOyBpZHgrKykKKwkJbXVzYl9kbWFfdHhfY2hbaWR4XS5kc3RfZGV2X3R5cGUgPSBkc3RfZGV2X3R5cGVbaWR4XTsKK30KKwordm9pZCB1eDUwMF9hZGRfdXNiKHJlc291cmNlX3NpemVfdCBiYXNlLCBpbnQgaXJxLCBpbnQgKmRtYV9yeF9jZmcsCisJaW50ICpkbWFfdHhfY2ZnKQoreworCXV4NTAwX211c2JfZGV2aWNlLnJlc291cmNlWzBdLnN0YXJ0ID0gYmFzZTsKKwl1eDUwMF9tdXNiX2RldmljZS5yZXNvdXJjZVswXS5lbmQgPSBiYXNlICsgU1pfNjRLIC0gMTsKKwl1eDUwMF9tdXNiX2RldmljZS5yZXNvdXJjZVsxXS5zdGFydCA9IGlycTsKKwl1eDUwMF9tdXNiX2RldmljZS5yZXNvdXJjZVsxXS5lbmQgPSBpcnE7CisKKwl1eDUwMF91c2JfZG1hX3VwZGF0ZV9yeF9jaF9jb25maWcoZG1hX3J4X2NmZyk7CisJdXg1MDBfdXNiX2RtYV91cGRhdGVfdHhfY2hfY29uZmlnKGRtYV90eF9jZmcpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ1eDUwMF9tdXNiX2RldmljZSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCA4OTI2NjM4Li4wMDc0YjhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTgxOSw4ICs4MTksOCBAQAogY29uZmlnIENBQ0hFX0wyWDAKIAlib29sICJFbmFibGUgdGhlIEwyeDAgb3V0ZXIgY2FjaGUgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYgfHwgXAotCQkgICBSRUFMVklFV19FQl9BOU1QIHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMzEgfHwgTUFDSF9SRUFMVklFV19QQlggfHwgXAotCQkgICBBUkNIX05PTUFESUsgfHwgQVJDSF9PTUFQNCB8fCBBUkNIX1M1UFYzMTAgfHwgQVJDSF9URUdSQSB8fCBcCisJCSAgIFJFQUxWSUVXX0VCX0E5TVAgfHwgU09DX0lNWDM1IHx8IFNPQ19JTVgzMSB8fCBNQUNIX1JFQUxWSUVXX1BCWCB8fCBcCisJCSAgIEFSQ0hfTk9NQURJSyB8fCBBUkNIX09NQVA0IHx8IEFSQ0hfRVhZTk9TNCB8fCBBUkNIX1RFR1JBIHx8IFwKIAkJICAgQVJDSF9VODUwMCB8fCBBUkNIX1ZFWFBSRVNTX0NBOVg0IHx8IEFSQ0hfU0hNT0JJTEUKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCmluZGV4IDM4OWYyMTcuLmIwY2I0MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZwpAQCAtMzMsNiArMzMsNyBAQAogY29uZmlnIEFSQ0hfTVhDOTEyMzEKIAlib29sICJNWEM5MTIzMS1iYXNlZCIKIAlzZWxlY3QgQ1BVX1Y2CisJc2VsZWN0IE1YQ19BVklDCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBNWEM5MTIzMSBmYW1pbHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQppbmRleCA1ZmQyMGU5Li5hMTM4Nzg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNiBAQAogb2JqLSQoQ09ORklHX0FSQ0hfTVhDX0lPTVVYX1YzKSArPSBpb211eC12My5vCiBvYmotJChDT05GSUdfSVJBTV9BTExPQykgKz0gaXJhbV9hbGxvYy5vCiBvYmotJChDT05GSUdfTVhDX1BXTSkgICs9IHB3bS5vCi1vYmotJChDT05GSUdfVVNCX0VIQ0lfTVhDKSArPSBlaGNpLm8KIG9iai0kKENPTkZJR19NWENfVUxQSSkgKz0gdWxwaS5vCiBvYmotJChDT05GSUdfTVhDX1VTRV9FUElUKSArPSBlcGl0Lm8KIG9iai0kKENPTkZJR19BUkNIX01YQ19BVURNVVhfVjEpICs9IGF1ZG11eC12MS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzLmMKaW5kZXggZTliY2VmZS4uZWVlMWI2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMuYwpAQCAtODEsNiArODEsOCBAQAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKHJldCkgewogZXJyOgorCQlpZiAoZG1hbWFzaykKKwkJCWtmcmVlKHBkZXYtPmRldi5kbWFfbWFzayk7CiAJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mZWMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZmVjLmMKaW5kZXggYjUwYzM1MS4uNjU2MWM5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mZWMuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWZlYy5jCkBAIC0zMSw2ICszMSwxMSBAQAogCWlteF9mZWNfZGF0YV9lbnRyeV9zaW5nbGUoTVgzNSk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TT0NfSU1YNTAKK2NvbnN0IHN0cnVjdCBpbXhfZmVjX2RhdGEgaW14NTBfZmVjX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9mZWNfZGF0YV9lbnRyeV9zaW5nbGUoTVg1MCk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TT0NfSU1YNTEKIGNvbnN0IHN0cnVjdCBpbXhfZmVjX2RhdGEgaW14NTFfZmVjX2RhdGEgX19pbml0Y29uc3QgPQogCWlteF9mZWNfZGF0YV9lbnRyeV9zaW5nbGUoTVg1MSk7CkBAIC01Nyw3ICs2Miw3IEBACiAJCX0sCiAJfTsKIAotCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgiZmVjIiwgMCAvKiAtMT8gKi8sCisJcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soImZlYyIsIDAsCiAJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwKLQkJCXBkYXRhLCBzaXplb2YoKnBkYXRhKSk7CisJCQlwZGF0YSwgc2l6ZW9mKCpwZGF0YSksIERNQV9CSVRfTUFTSygzMikpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtZG1hLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1kbWEuYwppbmRleCAzMzUzMGQyLi4zNTM4Yjg1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtZG1hLmMKQEAgLTk0LDcgKzk0LDcgQEAKIH07CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX01YMzEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCiBzdGF0aWMgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIGFkZHJfaW14MzFfdG8xID0gewogCS5wZXJfMl9wZXJfYWRkciA9IDE2NzcsCiB9OwpAQCAtMTA2LDcgKzEwNiw3IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CisjaWZkZWYgQ09ORklHX1NPQ19JTVgzNQogc3RhdGljIHN0cnVjdCBzZG1hX3NjcmlwdF9zdGFydF9hZGRycyBhZGRyX2lteDM1X3RvMSA9IHsKIAkuYXBfMl9hcF9hZGRyID0gNjQyLAogCS51YXJ0XzJfbWN1X2FkZHIgPSA4MTcsCkBAIC0xOTQsNyArMTk0LDcgQEAKIAl9IGVsc2UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDUxKQorI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVg1MSkKIAlpZiAoY3B1X2lzX214NTEoKSkgewogCQlpbXg1MV9pbXhfc2RtYV9kYXRhLnBkYXRhLnNjcmlwdF9hZGRycyA9ICZhZGRyX2lteDUxX3RvMTsKIAkJcmV0ID0gaW14X2FkZF9pbXhfc2RtYSgmaW14NTFfaW14X3NkbWFfZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1mYi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtZmIuYwppbmRleCA2MTAwYTdkLi43OWExY2IxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1mYi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWZiLmMKQEAgLTE2LDYgKzE2LDExIEBACiAJCS5pcnEgPSBzb2MgIyMgX0lOVF9MQ0RDLAkJCQlcCiAJfQogCisjaWZkZWYgQ09ORklHX1NPQ19JTVgxCitjb25zdCBzdHJ1Y3QgaW14X2lteF9mYl9kYXRhIGlteDFfaW14X2ZiX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9pbXhfZmJfZGF0YV9lbnRyeV9zaW5nbGUoTVgxLCBTWl80Syk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgxICovCisKICNpZmRlZiBDT05GSUdfU09DX0lNWDIxCiBjb25zdCBzdHJ1Y3QgaW14X2lteF9mYl9kYXRhIGlteDIxX2lteF9mYl9kYXRhIF9faW5pdGNvbnN0ID0KIAlpbXhfaW14X2ZiX2RhdGFfZW50cnlfc2luZ2xlKE1YMjEsIFNaXzRLKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWkyYy5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtaTJjLmMKaW5kZXggN2JhOTRlMS4uMmFiNzRmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtaTJjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtaTJjLmMKQEAgLTY5LDYgKzY5LDE2IEBACiB9OwogI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzUgKi8KIAorI2lmZGVmIENPTkZJR19TT0NfSU1YNTAKK2NvbnN0IHN0cnVjdCBpbXhfaW14X2kyY19kYXRhIGlteDUwX2lteF9pMmNfZGF0YVtdIF9faW5pdGNvbnN0ID0geworI2RlZmluZSBpbXg1MF9pbXhfaTJjX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAorCWlteF9pbXhfaTJjX2RhdGFfZW50cnkoTVg1MCwgX2lkLCBfaHdpZCwgU1pfNEspCisJaW14NTBfaW14X2kyY19kYXRhX2VudHJ5KDAsIDEpLAorCWlteDUwX2lteF9pMmNfZGF0YV9lbnRyeSgxLCAyKSwKKwlpbXg1MF9pbXhfaTJjX2RhdGFfZW50cnkoMiwgMyksCit9OworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YNTEgKi8KKwogI2lmZGVmIENPTkZJR19TT0NfSU1YNTEKIGNvbnN0IHN0cnVjdCBpbXhfaW14X2kyY19kYXRhIGlteDUxX2lteF9pMmNfZGF0YVtdIF9faW5pdGNvbnN0ID0gewogI2RlZmluZSBpbXg1MV9pbXhfaTJjX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgyLXdkdC5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgyLXdkdC5jCmluZGV4IGUwYWVjNjEuLjVlMDdlZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14Mi13ZHQuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteDItd2R0LmMKQEAgLTUzLDYgKzUzLDE1IEBACiB9OwogI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YNTEgKi8KIAorI2lmZGVmIENPTkZJR19TT0NfSU1YNTMKK2NvbnN0IHN0cnVjdCBpbXhfaW14Ml93ZHRfZGF0YSBpbXg1M19pbXgyX3dkdF9kYXRhW10gX19pbml0Y29uc3QgPSB7CisjZGVmaW5lIGlteDUzX2lteDJfd2R0X2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAorCWlteF9pbXgyX3dkdF9kYXRhX2VudHJ5KE1YNTMsIF9pZCwgX2h3aWQsIFNaXzE2SykKKwlpbXg1M19pbXgyX3dkdF9kYXRhX2VudHJ5KDAsIDEpLAorCWlteDUzX2lteDJfd2R0X2RhdGFfZW50cnkoMSwgMiksCit9OworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YNTMgKi8KKwogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14Ml93ZHQoCiAJCWNvbnN0IHN0cnVjdCBpbXhfaW14Ml93ZHRfZGF0YSAqZGF0YSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tc3BpX2lteC5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1zcGlfaW14LmMKaW5kZXggMDEzYzg1Zi4uZjRhNjBhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1zcGlfaW14LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1zcGlfaW14LmMKQEAgLTIxLDYgKzIxLDE1IEBACiAjZGVmaW5lIGlteF9zcGlfaW14X2RhdGFfZW50cnkoc29jLCB0eXBlLCBkZXZpZCwgaWQsIGh3aWQsIHNpemUpCVwKIAlbaWRdID0gaW14X3NwaV9pbXhfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCB0eXBlLCBkZXZpZCwgaWQsIGh3aWQsIHNpemUpCiAKKyNpZmRlZiBDT05GSUdfU09DX0lNWDEKK2NvbnN0IHN0cnVjdCBpbXhfc3BpX2lteF9kYXRhIGlteDFfY3NwaV9kYXRhW10gX19pbml0Y29uc3QgPSB7CisjZGVmaW5lIGlteDFfY3NwaV9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpIFwKKwlpbXhfc3BpX2lteF9kYXRhX2VudHJ5KE1YMSwgQ1NQSSwgImlteDEtY3NwaSIsIF9pZCwgX2h3aWQsIFNaXzRLKQorCWlteDFfY3NwaV9kYXRhX2VudHJ5KDAsIDEpLAorCWlteDFfY3NwaV9kYXRhX2VudHJ5KDEsIDIpLAorfTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NPQ19JTVgyMQogY29uc3Qgc3RydWN0IGlteF9zcGlfaW14X2RhdGEgaW14MjFfY3NwaV9kYXRhW10gX19pbml0Y29uc3QgPSB7CiAjZGVmaW5lIGlteDIxX2NzcGlfZGF0YV9lbnRyeShfaWQsIF9od2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9laGNpLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9laGNpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NzJjZTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZWhjaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+Ci0KLSNkZWZpbmUgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVAkweDYwMAotCi0jZGVmaW5lIE1YMzFfT1RHX1NJQ19TSElGVAkyOQotI2RlZmluZSBNWDMxX09UR19TSUNfTUFTSwkoMHgzIDw8IE1YMzFfT1RHX1NJQ19TSElGVCkKLSNkZWZpbmUgTVgzMV9PVEdfUE1fQklUCQkoMSA8PCAyNCkKLQotI2RlZmluZSBNWDMxX0gyX1NJQ19TSElGVAkyMQotI2RlZmluZSBNWDMxX0gyX1NJQ19NQVNLCSgweDMgPDwgTVgzMV9IMl9TSUNfU0hJRlQpCi0jZGVmaW5lIE1YMzFfSDJfUE1fQklUCQkoMSA8PCAxNikKLSNkZWZpbmUgTVgzMV9IMl9EVF9CSVQJCSgxIDw8IDUpCi0KLSNkZWZpbmUgTVgzMV9IMV9TSUNfU0hJRlQJMTMKLSNkZWZpbmUgTVgzMV9IMV9TSUNfTUFTSwkoMHgzIDw8IE1YMzFfSDFfU0lDX1NISUZUKQotI2RlZmluZSBNWDMxX0gxX1BNX0JJVAkJKDEgPDwgOCkKLSNkZWZpbmUgTVgzMV9IMV9EVF9CSVQJCSgxIDw8IDQpCi0KLSNkZWZpbmUgTVgzNV9PVEdfU0lDX1NISUZUCTI5Ci0jZGVmaW5lIE1YMzVfT1RHX1NJQ19NQVNLCSgweDMgPDwgTVgzNV9PVEdfU0lDX1NISUZUKQotI2RlZmluZSBNWDM1X09UR19QTV9CSVQJCSgxIDw8IDI0KQotCi0jZGVmaW5lIE1YMzVfSDFfU0lDX1NISUZUCTIxCi0jZGVmaW5lIE1YMzVfSDFfU0lDX01BU0sJKDB4MyA8PCBNWDM1X0gxX1NJQ19TSElGVCkKLSNkZWZpbmUgTVgzNV9IMV9QTV9CSVQJCSgxIDw8IDgpCi0jZGVmaW5lIE1YMzVfSDFfSVBQVUVfVVBfQklUCSgxIDw8IDcpCi0jZGVmaW5lIE1YMzVfSDFfSVBQVUVfRE9XTl9CSVQJKDEgPDwgNikKLSNkZWZpbmUgTVgzNV9IMV9UTExfQklUCQkoMSA8PCA1KQotI2RlZmluZSBNWDM1X0gxX1VTQlRFX0JJVAkoMSA8PCA0KQotCi0jZGVmaW5lIE1YQ19PVEdfT0ZGU0VUCQkwCi0jZGVmaW5lIE1YQ19IMV9PRkZTRVQJCTB4MjAwCi0jZGVmaW5lIE1YQ19IMl9PRkZTRVQJCTB4NDAwCi0KLS8qIFVTQl9DVFJMICovCi0jZGVmaW5lIE1YQ19PVEdfVUNUUkxfT1dJRV9CSVQJCSgxIDw8IDI3KQkvKiBPVEcgd2FrZXVwIGludHIgZW5hYmxlICovCi0jZGVmaW5lIE1YQ19PVEdfVUNUUkxfT1BNX0JJVAkJKDEgPDwgMjQpCS8qIE9URyBwb3dlciBtYXNrICovCi0jZGVmaW5lIE1YQ19IMV9VQ1RSTF9IMVVJRV9CSVQJCSgxIDw8IDEyKQkvKiBIb3N0MSBVTFBJIGludGVycnVwdCBlbmFibGUgKi8KLSNkZWZpbmUgTVhDX0gxX1VDVFJMX0gxV0lFX0JJVAkJKDEgPDwgMTEpCS8qIEhPU1QxIHdha2V1cCBpbnRyIGVuYWJsZSAqLwotI2RlZmluZSBNWENfSDFfVUNUUkxfSDFQTV9CSVQJCSgxIDw8ICA4KQkJLyogSE9TVDEgcG93ZXIgbWFzayAqLwotCi0vKiBVU0JfUEhZX0NUUkxfRlVOQyAqLwotI2RlZmluZSBNWENfT1RHX1BIWUNUUkxfT0NfRElTX0JJVAkoMSA8PCA4KQkvKiBPVEcgRGlzYWJsZSBPdmVyY3VycmVudCBFdmVudCAqLwotI2RlZmluZSBNWENfSDFfT0NfRElTX0JJVAkJCSgxIDw8IDUpCS8qIFVIMSBEaXNhYmxlIE92ZXJjdXJyZW50IEV2ZW50ICovCi0KLS8qIFVTQkgyQ1RSTCAqLwotI2RlZmluZSBNWENfSDJfVUNUUkxfSDJVSUVfQklUCQkoMSA8PCA4KQotI2RlZmluZSBNWENfSDJfVUNUUkxfSDJXSUVfQklUCQkoMSA8PCA3KQotI2RlZmluZSBNWENfSDJfVUNUUkxfSDJQTV9CSVQJCSgxIDw8IDQpCi0KLSNkZWZpbmUgTVhDX1VTQkNNRF9PRkZTRVQJCQkweDE0MAotCi0vKiBVU0JDTUQgKi8KLSNkZWZpbmUgTVhDX1VDTURfSVRDX05PX1RIUkVTSE9MRF9NQVNLCSh+KDB4ZmYgPDwgMTYpKQkvKiBJbnRlcnJ1cHQgVGhyZXNob2xkIENvbnRyb2wgKi8KLQotaW50IG14Y19pbml0aWFsaXplX3VzYl9odyhpbnQgcG9ydCwgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXVuc2lnbmVkIGludCB2OwotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyNSkKLQlpZiAoY3B1X2lzX214MjUoKSkgewotCQl2ID0gcmVhZGwoTVgyNV9JT19BRERSRVNTKE1YMjVfVVNCX0JBU0VfQUREUiArCi0JCQkJICAgICBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7Ci0KLQkJc3dpdGNoIChwb3J0KSB7Ci0JCWNhc2UgMDoJLyogT1RHIHBvcnQgKi8KLQkJCXYgJj0gfihNWDM1X09UR19TSUNfTUFTSyB8IE1YMzVfT1RHX1BNX0JJVCk7Ci0JCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKQotCQkJCQk8PCBNWDM1X09UR19TSUNfU0hJRlQ7Ci0JCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCi0JCQkJdiB8PSBNWDM1X09UR19QTV9CSVQ7Ci0KLQkJCWJyZWFrOwotCQljYXNlIDE6IC8qIEgxIHBvcnQgKi8KLQkJCXYgJj0gfihNWDM1X0gxX1NJQ19NQVNLIHwgTVgzNV9IMV9QTV9CSVQgfCBNWDM1X0gxX1RMTF9CSVQgfAotCQkJCU1YMzVfSDFfVVNCVEVfQklUIHwgTVgzNV9IMV9JUFBVRV9ET1dOX0JJVCB8IE1YMzVfSDFfSVBQVUVfVVBfQklUKTsKLQkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCi0JCQkJCQk8PCBNWDM1X0gxX1NJQ19TSElGVDsKLQkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzVfSDFfUE1fQklUOwotCi0JCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1RUTF9FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzVfSDFfVExMX0JJVDsKLQotCQkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJOQUxfUEhZKQotCQkJCXYgfD0gTVgzNV9IMV9VU0JURV9CSVQ7Ci0KLQkJCWlmIChmbGFncyAmIE1YQ19FSENJX0lQUFVFX0RPV04pCi0JCQkJdiB8PSBNWDM1X0gxX0lQUFVFX0RPV05fQklUOwotCi0JCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9JUFBVRV9VUCkKLQkJCQl2IHw9IE1YMzVfSDFfSVBQVUVfVVBfQklUOwotCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJd3JpdGVsKHYsIE1YMjVfSU9fQUREUkVTUyhNWDI1X1VTQl9CQVNFX0FERFIgKwotCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDI1KSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzKQotCWlmIChjcHVfaXNfbXgzMSgpKSB7Ci0JCXYgPSByZWFkbChNWDMxX0lPX0FERFJFU1MoTVgzMV9VU0JfQkFTRV9BRERSICsKLQkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKLQotCQlzd2l0Y2ggKHBvcnQpIHsKLQkJY2FzZSAwOgkvKiBPVEcgcG9ydCAqLwotCQkJdiAmPSB+KE1YMzFfT1RHX1NJQ19NQVNLIHwgTVgzMV9PVEdfUE1fQklUKTsKLQkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCi0JCQkJCTw8IE1YMzFfT1RHX1NJQ19TSElGVDsKLQkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzFfT1RHX1BNX0JJVDsKLQotCQkJYnJlYWs7Ci0JCWNhc2UgMTogLyogSDEgcG9ydCAqLwotCQkJdiAmPSB+KE1YMzFfSDFfU0lDX01BU0sgfCBNWDMxX0gxX1BNX0JJVCB8IE1YMzFfSDFfRFRfQklUKTsKLQkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCi0JCQkJCQk8PCBNWDMxX0gxX1NJQ19TSElGVDsKLQkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzFfSDFfUE1fQklUOwotCi0JCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1RUTF9FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzFfSDFfRFRfQklUOwotCi0JCQlicmVhazsKLQkJY2FzZSAyOgkvKiBIMiBwb3J0ICovCi0JCQl2ICY9IH4oTVgzMV9IMl9TSUNfTUFTSyB8IE1YMzFfSDJfUE1fQklUIHwgTVgzMV9IMl9EVF9CSVQpOwotCQkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykKLQkJCQkJCTw8IE1YMzFfSDJfU0lDX1NISUZUOwotCQkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpKQotCQkJCXYgfD0gTVgzMV9IMl9QTV9CSVQ7Ci0KLQkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfVFRMX0VOQUJMRUQpKQotCQkJCXYgfD0gTVgzMV9IMl9EVF9CSVQ7Ci0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQl3cml0ZWwodiwgTVgzMV9JT19BRERSRVNTKE1YMzFfVVNCX0JBU0VfQUREUiArCi0JCQkJICAgICBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjcHVfaXNfbXgzNSgpKSB7Ci0JCXYgPSByZWFkbChNWDM1X0lPX0FERFJFU1MoTVgzNV9VU0JfQkFTRV9BRERSICsKLQkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKLQotCQlzd2l0Y2ggKHBvcnQpIHsKLQkJY2FzZSAwOgkvKiBPVEcgcG9ydCAqLwotCQkJdiAmPSB+KE1YMzVfT1RHX1NJQ19NQVNLIHwgTVgzNV9PVEdfUE1fQklUKTsKLQkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCi0JCQkJCTw8IE1YMzVfT1RHX1NJQ19TSElGVDsKLQkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzVfT1RHX1BNX0JJVDsKLQotCQkJYnJlYWs7Ci0JCWNhc2UgMTogLyogSDEgcG9ydCAqLwotCQkJdiAmPSB+KE1YMzVfSDFfU0lDX01BU0sgfCBNWDM1X0gxX1BNX0JJVCB8IE1YMzVfSDFfVExMX0JJVCB8Ci0JCQkJTVgzNV9IMV9VU0JURV9CSVQgfCBNWDM1X0gxX0lQUFVFX0RPV05fQklUIHwgTVgzNV9IMV9JUFBVRV9VUF9CSVQpOwotCQkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykKLQkJCQkJCTw8IE1YMzVfSDFfU0lDX1NISUZUOwotCQkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpKQotCQkJCXYgfD0gTVgzNV9IMV9QTV9CSVQ7Ci0KLQkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfVFRMX0VOQUJMRUQpKQotCQkJCXYgfD0gTVgzNV9IMV9UTExfQklUOwotCi0JCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUk5BTF9QSFkpCi0JCQkJdiB8PSBNWDM1X0gxX1VTQlRFX0JJVDsKLQotCQkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfSVBQVUVfRE9XTikKLQkJCQl2IHw9IE1YMzVfSDFfSVBQVUVfRE9XTl9CSVQ7Ci0KLQkJCWlmIChmbGFncyAmIE1YQ19FSENJX0lQUFVFX1VQKQotCQkJCXYgfD0gTVgzNV9IMV9JUFBVRV9VUF9CSVQ7Ci0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQl3cml0ZWwodiwgTVgzNV9JT19BRERSRVNTKE1YMzVfVVNCX0JBU0VfQUREUiArCi0JCQkJICAgICBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9NWDMgKi8KLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3Ci0JaWYgKGNwdV9pc19teDI3KCkpIHsKLQkJLyogT24gaS5NWDI3IHdlIGNhbiB1c2UgdGhlIGkuTVgzMSBVU0JDVFJMIGJpdHMsIHRoZXkKLQkJICogYXJlIGlkZW50aWNhbAotCQkgKi8KLQkJdiA9IHJlYWRsKE1YMjdfSU9fQUREUkVTUyhNWDI3X1VTQl9CQVNFX0FERFIgKwotCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOwotCQlzd2l0Y2ggKHBvcnQpIHsKLQkJY2FzZSAwOgkvKiBPVEcgcG9ydCAqLwotCQkJdiAmPSB+KE1YMzFfT1RHX1NJQ19NQVNLIHwgTVgzMV9PVEdfUE1fQklUKTsKLQkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCi0JCQkJCTw8IE1YMzFfT1RHX1NJQ19TSElGVDsKLQkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzFfT1RHX1BNX0JJVDsKLQkJCWJyZWFrOwotCQljYXNlIDE6IC8qIEgxIHBvcnQgKi8KLQkJCXYgJj0gfihNWDMxX0gxX1NJQ19NQVNLIHwgTVgzMV9IMV9QTV9CSVQgfCBNWDMxX0gxX0RUX0JJVCk7Ci0JCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKQotCQkJCQkJPDwgTVgzMV9IMV9TSUNfU0hJRlQ7Ci0JCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCi0JCQkJdiB8PSBNWDMxX0gxX1BNX0JJVDsKLQotCQkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9UVExfRU5BQkxFRCkpCi0JCQkJdiB8PSBNWDMxX0gxX0RUX0JJVDsKLQotCQkJYnJlYWs7Ci0JCWNhc2UgMjoJLyogSDIgcG9ydCAqLwotCQkJdiAmPSB+KE1YMzFfSDJfU0lDX01BU0sgfCBNWDMxX0gyX1BNX0JJVCB8IE1YMzFfSDJfRFRfQklUKTsKLQkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCi0JCQkJCQk8PCBNWDMxX0gyX1NJQ19TSElGVDsKLQkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzFfSDJfUE1fQklUOwotCi0JCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1RUTF9FTkFCTEVEKSkKLQkJCQl2IHw9IE1YMzFfSDJfRFRfQklUOwotCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXdyaXRlbCh2LCBNWDI3X0lPX0FERFJFU1MoTVgyN19VU0JfQkFTRV9BRERSICsKLQkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19NQUNIX01YMjcgKi8KLSNpZmRlZiBDT05GSUdfU09DX0lNWDUxCi0JaWYgKGNwdV9pc19teDUxKCkpIHsKLQkJdm9pZCBfX2lvbWVtICp1c2JfYmFzZTsKLQkJdm9pZCBfX2lvbWVtICp1c2JvdGdfYmFzZTsKLQkJdm9pZCBfX2lvbWVtICp1c2JvdGhlcl9iYXNlOwotCQlpbnQgcmV0ID0gMDsKLQotCQl1c2JfYmFzZSA9IGlvcmVtYXAoTVg1MV9PVEdfQkFTRV9BRERSLCBTWl80Syk7Ci0JCWlmICghdXNiX2Jhc2UpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogaW9yZW1hcCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJc3dpdGNoIChwb3J0KSB7Ci0JCWNhc2UgMDoJLyogT1RHIHBvcnQgKi8KLQkJCXVzYm90Z19iYXNlID0gdXNiX2Jhc2UgKyBNWENfT1RHX09GRlNFVDsKLQkJCWJyZWFrOwotCQljYXNlIDE6CS8qIEhvc3QgMSBwb3J0ICovCi0JCQl1c2JvdGdfYmFzZSA9IHVzYl9iYXNlICsgTVhDX0gxX09GRlNFVDsKLQkJCWJyZWFrOwotCQljYXNlIDI6IC8qIEhvc3QgMiBwb3J0ICovCi0JCQl1c2JvdGdfYmFzZSA9IHVzYl9iYXNlICsgTVhDX0gyX09GRlNFVDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSIiVzIG5vIHN1Y2ggcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQpOwotCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJdXNib3RoZXJfYmFzZSA9IHVzYl9iYXNlICsgTVg1X1VTQk9USEVSX1JFR1NfT0ZGU0VUOwotCi0JCXN3aXRjaCAocG9ydCkgewotCQljYXNlIDA6CS8qT1RHIHBvcnQgKi8KLQkJCWlmIChmbGFncyAmIE1YQ19FSENJX0lOVEVSTkFMX1BIWSkgewotCQkJCXYgPSBfX3Jhd19yZWFkbCh1c2JvdGhlcl9iYXNlICsgTVhDX1VTQl9QSFlfQ1RSX0ZVTkNfT0ZGU0VUKTsKLQotCQkJCWlmIChmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkgewotCQkJCQkvKiBPQy9VU0JQV1IgaXMgbm90IHVzZWQgKi8KLQkJCQkJdiB8PSBNWENfT1RHX1BIWUNUUkxfT0NfRElTX0JJVDsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBPQy9VU0JQV1IgaXMgdXNlZCAqLwotCQkJCQl2ICY9IH5NWENfT1RHX1BIWUNUUkxfT0NfRElTX0JJVDsKLQkJCQl9Ci0JCQkJX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQ19PRkZTRVQpOwotCi0JCQkJdiA9IF9fcmF3X3JlYWRsKHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCQ1RSTF9PRkZTRVQpOwotCQkJCWlmIChmbGFncyAmIE1YQ19FSENJX1dBS0VVUF9FTkFCTEVEKQotCQkJCQl2IHw9IE1YQ19PVEdfVUNUUkxfT1dJRV9CSVQ7LyogT1RHIHdha2V1cCBlbmFibGUgKi8KLQkJCQllbHNlCi0JCQkJCXYgJj0gfk1YQ19PVEdfVUNUUkxfT1dJRV9CSVQ7LyogT1RHIHdha2V1cCBkaXNhYmxlICovCi0JCQkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKQotCQkJCQl2IHw9IE1YQ19PVEdfVUNUUkxfT1BNX0JJVDsKLQkJCQllbHNlCi0JCQkJCXYgJj0gfk1YQ19PVEdfVUNUUkxfT1BNX0JJVDsKLQkJCQlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JDVFJMX09GRlNFVCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAxOgkvKiBIb3N0IDEgKi8KLQkJCS8qSG9zdCBVTFBJICovCi0JCQl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YQ19VU0JDVFJMX09GRlNFVCk7Ci0JCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9XQUtFVVBfRU5BQkxFRCkgewotCQkJCS8qIEhPU1QxIHdha2V1cC9VTFBJIGludHIgZW5hYmxlICovCi0JCQkJdiB8PSAoTVhDX0gxX1VDVFJMX0gxV0lFX0JJVCB8IE1YQ19IMV9VQ1RSTF9IMVVJRV9CSVQpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBIT1NUMSB3YWtldXAvVUxQSSBpbnRyIGRpc2FibGUgKi8KLQkJCQl2ICY9IH4oTVhDX0gxX1VDVFJMX0gxV0lFX0JJVCB8IE1YQ19IMV9VQ1RSTF9IMVVJRV9CSVQpOwotCQkJfQotCi0JCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCi0JCQkJdiAmPSB+TVhDX0gxX1VDVFJMX0gxUE1fQklUOyAvKiBIT1NUMSBwb3dlciBtYXNrIHVzZWQqLwotCQkJZWxzZQotCQkJCXYgfD0gTVhDX0gxX1VDVFJMX0gxUE1fQklUOyAvKiBIT1NUMSBwb3dlciBtYXNrIHVzZWQqLwotCQkJX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCQ1RSTF9PRkZTRVQpOwotCi0JCQl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YQ19VU0JfUEhZX0NUUl9GVU5DX09GRlNFVCk7Ci0JCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCi0JCQkJdiAmPSB+TVhDX0gxX09DX0RJU19CSVQ7IC8qIE9DIGlzIHVzZWQgKi8KLQkJCWVsc2UKLQkJCQl2IHw9IE1YQ19IMV9PQ19ESVNfQklUOyAvKiBPQyBpcyBub3QgdXNlZCAqLwotCQkJX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQ19PRkZTRVQpOwotCi0JCQl2ID0gX19yYXdfcmVhZGwodXNib3RnX2Jhc2UgKyBNWENfVVNCQ01EX09GRlNFVCk7Ci0JCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9JVENfTk9fVEhSRVNIT0xEKQotCQkJCS8qIEludGVycnVwdCBUaHJlc2hvbGQgQ29udHJvbDpJbW1lZGlhdGUgKG5vIHRocmVzaG9sZCkgKi8KLQkJCQl2ICY9IE1YQ19VQ01EX0lUQ19OT19USFJFU0hPTERfTUFTSzsKLQkJCV9fcmF3X3dyaXRlbCh2LCB1c2JvdGdfYmFzZSArIE1YQ19VU0JDTURfT0ZGU0VUKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6IC8qIEhvc3QgMiBVTFBJICovCi0JCQl2ID0gX19yYXdfcmVhZGwodXNib3RoZXJfYmFzZSArIE1YQ19VU0JIMkNUUkxfT0ZGU0VUKTsKLQkJCWlmIChmbGFncyAmIE1YQ19FSENJX1dBS0VVUF9FTkFCTEVEKSB7Ci0JCQkJLyogSE9TVDEgd2FrZXVwL1VMUEkgaW50ciBlbmFibGUgKi8KLQkJCQl2IHw9IChNWENfSDJfVUNUUkxfSDJXSUVfQklUIHwgTVhDX0gyX1VDVFJMX0gyVUlFX0JJVCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEhPU1QxIHdha2V1cC9VTFBJIGludHIgZGlzYWJsZSAqLwotCQkJCXYgJj0gfihNWENfSDJfVUNUUkxfSDJXSUVfQklUIHwgTVhDX0gyX1VDVFJMX0gyVUlFX0JJVCk7Ci0JCQl9Ci0KLQkJCWlmIChmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkKLQkJCQl2ICY9IH5NWENfSDJfVUNUUkxfSDJQTV9CSVQ7IC8qIEhPU1QyIHBvd2VyIG1hc2sgdXNlZCovCi0JCQllbHNlCi0JCQkJdiB8PSBNWENfSDJfVUNUUkxfSDJQTV9CSVQ7IC8qIEhPU1QyIHBvd2VyIG1hc2sgdXNlZCovCi0JCQlfX3Jhd193cml0ZWwodiwgdXNib3RoZXJfYmFzZSArIE1YQ19VU0JIMkNUUkxfT0ZGU0VUKTsKLQkJCWJyZWFrOwotCQl9Ci0KLWVycm9yOgotCQlpb3VubWFwKHVzYl9iYXNlKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0jZW5kaWYKLQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSIlcygpIHVuYWJsZSB0byBzZXR1cCBVU0JDT05UUk9MIGZvciB0aGlzIENQVVxuIiwgX19mdW5jX18pOwotCXJldHVybiAtRUlOVkFMOwotfQotRVhQT1JUX1NZTUJPTChteGNfaW5pdGlhbGl6ZV91c2JfaHcpOwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKaW5kZXggZDE3YjNjOS4uNTdkNTk4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwpAQCAtMjMzLDYgKzIzMyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ3Bpb19pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJHUElPIiwKIAkuaXJxX2FjayA9IGdwaW9fYWNrX2lycSwKIAkuaXJxX21hc2sgPSBncGlvX21hc2tfaXJxLAogCS5pcnFfdW5tYXNrID0gZ3Bpb191bm1hc2tfaXJxLApAQCAtMzQ5LDExMyArMzUwLDMgQEAKIAogCXJldHVybiAwOwogfQotCi0jZGVmaW5lIERFRklORV9JTVhfR1BJT19QT1JUX0lSUV9ISUdIKHNvYywgX2lkLCBfaHdpZCwgX2lycSwgX2lycV9oaWdoKQlcCi0JewkJCQkJCQkJXAotCQkuY2hpcC5sYWJlbCA9ICJncGlvLSIgI19pZCwJCQkJXAotCQkuaXJxID0gX2lycSwJCQkJCQlcCi0JCS5pcnFfaGlnaCA9IF9pcnFfaGlnaCwJCQkJCVwKLQkJLmJhc2UgPSBzb2MgIyMgX0lPX0FERFJFU1MoCQkJCVwKLQkJCQlzb2MgIyMgX0dQSU8gIyMgX2h3aWQgIyMgX0JBU0VfQUREUiksCVwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgKF9pZCkgKiAzMiwJXAotCX0KLQotI2RlZmluZSBERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoc29jLCBfaWQsIF9od2lkLCBfaXJxKQkJCVwKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlFfSElHSChzb2MsIF9pZCwgX2h3aWQsIF9pcnEsIDApCi0jZGVmaW5lIERFRklORV9JTVhfR1BJT19QT1JUKHNvYywgX2lkLCBfaHdpZCkJCQkJXAotCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShzb2MsIF9pZCwgX2h3aWQsIDApCi0KLSNkZWZpbmUgREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKHByZWZpeCkJCQkJXAotaW50IF9faW5pdCBwcmVmaXggIyMgX3JlZ2lzdGVyX2dwaW9zKHZvaWQpCQkJCVwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIG14Y19ncGlvX2luaXQocHJlZml4ICMjIF9ncGlvX3BvcnRzLAkJCVwKLQkJCUFSUkFZX1NJWkUocHJlZml4ICMjIF9ncGlvX3BvcnRzKSk7CQlcCi19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YMSkKLXN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXgxX2dwaW9fcG9ydHNbXSA9IHsKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgxLCAwLCAxLCBNWDFfR1BJT19JTlRfUE9SVEEpLAotCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDEsIDEsIDIsIE1YMV9HUElPX0lOVF9QT1JUQiksCi0JREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMSwgMiwgMywgTVgxX0dQSU9fSU5UX1BPUlRDKSwKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgxLCAzLCA0LCBNWDFfR1BJT19JTlRfUE9SVEQpLAotfTsKLQotREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKGlteDEpCi0KLSNlbmRpZiAvKiBpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YMSkgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyMSkKLXN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXgyMV9ncGlvX3BvcnRzW10gPSB7Ci0JREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMjEsIDAsIDEsIE1YMjFfSU5UX0dQSU8pLAotCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjEsIDEsIDIpLAotCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjEsIDIsIDMpLAotCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjEsIDMsIDQpLAotCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjEsIDQsIDUpLAotCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjEsIDUsIDYpLAotfTsKLQotREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKGlteDIxKQotCi0jZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDIxKSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDI1KQotc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteDI1X2dwaW9fcG9ydHNbXSA9IHsKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgyNSwgMCwgMSwgTVgyNV9JTlRfR1BJTzEpLAotCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDI1LCAxLCAyLCBNWDI1X0lOVF9HUElPMiksCi0JREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMjUsIDIsIDMsIE1YMjVfSU5UX0dQSU8zKSwKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgyNSwgMywgNCwgTVgyNV9JTlRfR1BJTzQpLAotfTsKLQotREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKGlteDI1KQotCi0jZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDI1KSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDI3KQotc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteDI3X2dwaW9fcG9ydHNbXSA9IHsKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgyNywgMCwgMSwgTVgyN19JTlRfR1BJTyksCi0JREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgMSwgMiksCi0JREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgMiwgMyksCi0JREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgMywgNCksCi0JREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgNCwgNSksCi0JREVGSU5FX0lNWF9HUElPX1BPUlQoTVgyNywgNSwgNiksCi19OwotCi1ERUZJTkVfUkVHSVNURVJfRlVOQ1RJT04oaW14MjcpCi0KLSNlbmRpZiAvKiBpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YMjcpICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YMzEpCi1zdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14MzFfZ3Bpb19wb3J0c1tdID0gewotCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDMxLCAwLCAxLCBNWDMxX0lOVF9HUElPMSksCi0JREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMzEsIDEsIDIsIE1YMzFfSU5UX0dQSU8yKSwKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgzMSwgMiwgMywgTVgzMV9JTlRfR1BJTzMpLAotfTsKLQotREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKGlteDMxKQotCi0jZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDMxKSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDM1KQotc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteDM1X2dwaW9fcG9ydHNbXSA9IHsKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgzNSwgMCwgMSwgTVgzNV9JTlRfR1BJTzEpLAotCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDM1LCAxLCAyLCBNWDM1X0lOVF9HUElPMiksCi0JREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMzUsIDIsIDMsIE1YMzVfSU5UX0dQSU8zKSwKLX07Ci0KLURFRklORV9SRUdJU1RFUl9GVU5DVElPTihpbXgzNSkKLQotI2VuZGlmIC8qIGlmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgzNSkgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVg1MCkKLXN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXg1MF9ncGlvX3BvcnRzW10gPSB7Ci0JREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRX0hJR0goTVg1MCwgMCwgMSwgTVg1MF9JTlRfR1BJTzFfTE9XLCBNWDUwX0lOVF9HUElPMV9ISUdIKSwKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlFfSElHSChNWDUwLCAxLCAyLCBNWDUwX0lOVF9HUElPMl9MT1csIE1YNTBfSU5UX0dQSU8yX0hJR0gpLAotCURFRklORV9JTVhfR1BJT19QT1JUX0lSUV9ISUdIKE1YNTAsIDIsIDMsIE1YNTBfSU5UX0dQSU8zX0xPVywgTVg1MF9JTlRfR1BJTzNfSElHSCksCi0JREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRX0hJR0goTVg1MCwgMywgNCwgTVg1MF9JTlRfR1BJTzNfTE9XLCBNWDUwX0lOVF9HUElPM19ISUdIKSwKLQlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlFfSElHSChNWDUwLCA0LCA1LCBNWDUwX0lOVF9HUElPM19MT1csIE1YNTBfSU5UX0dQSU8zX0hJR0gpLAotCURFRklORV9JTVhfR1BJT19QT1JUX0lSUV9ISUdIKE1YNTAsIDUsIDYsIE1YNTBfSU5UX0dQSU8zX0xPVywgTVg1MF9JTlRfR1BJTzNfSElHSCksCi19OwotCi1ERUZJTkVfUkVHSVNURVJfRlVOQ1RJT04oaW14NTApCi0KLSNlbmRpZiAvKiBpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YNTApICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKaW5kZXggYWVhMmNkMy4uYTIyZWJlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaApAQCAtMjQsNiArMjQsMTYgQEAKIGV4dGVybiB2b2lkIG14NTFfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXg1M19tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCBteGM5MTIzMV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBpbXgxX2luaXRfZWFybHkodm9pZCk7CitleHRlcm4gdm9pZCBpbXgyMV9pbml0X2Vhcmx5KHZvaWQpOworZXh0ZXJuIHZvaWQgaW14MjVfaW5pdF9lYXJseSh2b2lkKTsKK2V4dGVybiB2b2lkIGlteDI3X2luaXRfZWFybHkodm9pZCk7CitleHRlcm4gdm9pZCBpbXgzMV9pbml0X2Vhcmx5KHZvaWQpOworZXh0ZXJuIHZvaWQgaW14MzVfaW5pdF9lYXJseSh2b2lkKTsKK2V4dGVybiB2b2lkIGlteDUwX2luaXRfZWFybHkodm9pZCk7CitleHRlcm4gdm9pZCBpbXg1MV9pbml0X2Vhcmx5KHZvaWQpOworZXh0ZXJuIHZvaWQgaW14NTNfaW5pdF9lYXJseSh2b2lkKTsKK2V4dGVybiB2b2lkIG14YzkxMjMxX2luaXRfZWFybHkodm9pZCk7CiBleHRlcm4gdm9pZCBteGNfaW5pdF9pcnEodm9pZCBfX2lvbWVtICopOwogZXh0ZXJuIHZvaWQgdHppY19pbml0X2lycSh2b2lkIF9faW9tZW0gKik7CiBleHRlcm4gdm9pZCBteDFfaW5pdF9pcnEodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZXNkaGMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lc2RoYy5oCmluZGV4IGE0OGE5YWEuLjg2MDAzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lc2RoYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lc2RoYy5oCkBAIC0xMCw3ICsxMCwxNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0lNWF9FU0RIQ19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSU1YX0VTREhDX0gKIAorLyoqCisgKiBzdHJ1Y3QgZXNkaGNfcGxhdGZvcm1fZGF0YSAtIG9wdGlvbmFsIHBsYXRmb3JtIGRhdGEgZm9yIGVzZGhjIG9uIGkuTVgKKyAqCisgKiBzdHJvbmdseSByZWNvbW1lbmRlZCBmb3IgaS5NWDI1LzM1LCBub3QgbmVlZGVkIGZvciBvdGhlciB2YXJpYW50cworICoKKyAqIEB3cF9ncGlvOglncGlvIGZvciB3cml0ZV9wcm90ZWN0ICgtRUlOVkFMIGlmIHVudXNlZCkKKyAqIEBjZF9ncGlvOglncGlvIGZvciBjYXJkX2RldGVjdCBpbnRlcnJ1cHQgKC1FSU5WQUwgaWYgdW51c2VkKQorICovCisKIHN0cnVjdCBlc2RoY19wbGF0Zm9ybV9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgd3BfZ3BpbzsJLyogd3JpdGUgcHJvdGVjdCBwaW4gKi8KKwl1bnNpZ25lZCBpbnQgd3BfZ3BpbzsKKwl1bnNpZ25lZCBpbnQgY2RfZ3BpbzsKIH07CiAjZW5kaWYgLyogX19BU01fQVJDSF9JTVhfRVNESENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggMDA0NGUyZi4uYTI3NDdmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC00Niw2ICs0NiwyMSBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKKyNkZWZpbmUgREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRX0hJR0goc29jLCBfaWQsIF9od2lkLCBfaXJxLCBfaXJxX2hpZ2gpCVwKKwl7CQkJCQkJCQlcCisJCS5jaGlwLmxhYmVsID0gImdwaW8tIiAjX2lkLAkJCQlcCisJCS5pcnEgPSBfaXJxLAkJCQkJCVwKKwkJLmlycV9oaWdoID0gX2lycV9oaWdoLAkJCQkJXAorCQkuYmFzZSA9IHNvYyAjIyBfSU9fQUREUkVTUygJCQkJXAorCQkJCXNvYyAjIyBfR1BJTyAjIyBfaHdpZCAjIyBfQkFTRV9BRERSKSwJXAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAoX2lkKSAqIDMyLAlcCisJfQorCisjZGVmaW5lIERFRklORV9JTVhfR1BJT19QT1JUX0lSUShzb2MsIF9pZCwgX2h3aWQsIF9pcnEpCQkJXAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUV9ISUdIKHNvYywgX2lkLCBfaHdpZCwgX2lycSwgMCkKKyNkZWZpbmUgREVGSU5FX0lNWF9HUElPX1BPUlQoc29jLCBfaWQsIF9od2lkKQkJCQlcCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKHNvYywgX2lkLCBfaHdpZCwgMCkKKwogaW50IG14Y19ncGlvX2luaXQoc3RydWN0IG14Y19ncGlvX3BvcnQqLCBpbnQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaAppbmRleCBjYmFlZDI5Li5jOTJmMGIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14My5oCkBAIC0xMTIsMTIgKzExMiwxMiBAQAogICogCS0gc2V0dXBzIHRoZSBpb211eCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24KICAqIAktIGlmIHRoZSBwaW4gaXMgY29uZmlndXJlZCBhcyBhIEdQSU8sIHdlIGNsYWltIGl0IHRocm91Z2gga2VybmVsIGdwaW9saWIKICAqLwotaW50IG14Y19pb211eF9hbGxvY19waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbiwgY29uc3QgY2hhciAqbGFiZWwpOworaW50IG14Y19pb211eF9hbGxvY19waW4odW5zaWduZWQgaW50IHBpbiwgY29uc3QgY2hhciAqbGFiZWwpOwogLyoKICAqIHNldHVwcyBtdXRsaXBsZSBwaW5zCiAgKiBjb252ZW5pZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcwogICovCi1pbnQgbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCitpbnQgbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMoY29uc3QgdW5zaWduZWQgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCiAJCWNvbnN0IGNoYXIgKmxhYmVsKTsKIAogLyoKQEAgLTEyNiwxMiArMTI2LDEyIEBACiAgKiAJLSBmcmVlcyB0aGUgR1BJTyBpZiB0aGUgcGluIHdhcyBjb25maWd1cmVkIGFzIEdQSU8KICAqIAktIERPRVMgTk9UIHJlY29uZmlndXJlIHRoZSBJT01VWCBpbiBpdHMgcmVzZXQgc3RhdGUKICAqLwotdm9pZCBteGNfaW9tdXhfcmVsZWFzZV9waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbik7Cit2b2lkIG14Y19pb211eF9yZWxlYXNlX3Bpbih1bnNpZ25lZCBpbnQgcGluKTsKIC8qCiAgKiByZWxlYXNlcyBtdWx0aXBsZSBwaW5zCiAgKiBjb252ZW52aWVudCB3YXkgdG8gY2FsbCB0aGUgYWJvdmUgZnVuY3Rpb24gd2l0aCB0YWJsZXMKICAqLwotdm9pZCBteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIGludCBjb3VudCk7Cit2b2lkIG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgdW5zaWduZWQgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIGZvciBhIHBhcnRpY3VsYXIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDM1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oCmluZGV4IDJhMjRiYWUuLjMxMTdjMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDM1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MzUuaApAQCAtOTg5LDEzICs5ODksMTMgQEAKICNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEEyX19JUFVfRElBR0JfOQkJCQlJT01VWF9QQUQoMHg2ZTgsIDB4Mjg0LCA2LCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMzVfUEFEX0FUQV9EQVRBMl9fQVJNMTFQX1RPUF9UUkFDRV8yOAkJCUlPTVVYX1BBRCgweDZlOCwgMHgyODQsIDcsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKIAotI2RlZmluZSBNWDM1X1BBRF9BVEFfREFUQTNfX0FUQV9EQVRBXzMJCQkJSU9NVVhfUEFEKDB4NmU4LCAweDI4OCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDM1X1BBRF9BVEFfREFUQTNfX0VTREhDM19DTEsJCQkJSU9NVVhfUEFEKDB4NmU4LCAweDI4OCwgMSwgMHg4MTQsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDM1X1BBRF9BVEFfREFUQTNfX1VTQl9UT1BfVVNCT1RHX0RBVEFfNQkJSU9NVVhfUEFEKDB4NmU4LCAweDI4OCwgMiwgMHg5YjgsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDM1X1BBRF9BVEFfREFUQTNfX0NTUEkyX1NDTEsJCQkJSU9NVVhfUEFEKDB4NmU4LCAweDI4OCwgNCwgMHg3ZTAsIDIsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDM1X1BBRF9BVEFfREFUQTNfX0dQSU8yXzE2CQkJCUlPTVVYX1BBRCgweDZlOCwgMHgyODgsIDUsIDB4ODg0LCAxLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEEzX19JUFVfRElBR0JfMTAJCQlJT01VWF9QQUQoMHg2ZTgsIDB4Mjg4LCA2LCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMzVfUEFEX0FUQV9EQVRBM19fQVJNMTFQX1RPUF9UUkFDRV8yOQkJCUlPTVVYX1BBRCgweDZlOCwgMHgyODgsIDcsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEEzX19BVEFfREFUQV8zCQkJCUlPTVVYX1BBRCgweDZlYywgMHgyODgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEEzX19FU0RIQzNfQ0xLCQkJCUlPTVVYX1BBRCgweDZlYywgMHgyODgsIDEsIDB4ODE0LCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEEzX19VU0JfVE9QX1VTQk9UR19EQVRBXzUJCUlPTVVYX1BBRCgweDZlYywgMHgyODgsIDIsIDB4OWI4LCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEEzX19DU1BJMl9TQ0xLCQkJCUlPTVVYX1BBRCgweDZlYywgMHgyODgsIDQsIDB4N2UwLCAyLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEEzX19HUElPMl8xNgkJCQlJT01VWF9QQUQoMHg2ZWMsIDB4Mjg4LCA1LCAweDg4NCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMzVfUEFEX0FUQV9EQVRBM19fSVBVX0RJQUdCXzEwCQkJSU9NVVhfUEFEKDB4NmVjLCAweDI4OCwgNiwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDM1X1BBRF9BVEFfREFUQTNfX0FSTTExUF9UT1BfVFJBQ0VfMjkJCQlJT01VWF9QQUQoMHg2ZWMsIDB4Mjg4LCA3LCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEE0X19BVEFfREFUQV80CQkJCUlPTVVYX1BBRCgweDZmMCwgMHgyOGMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgzNV9QQURfQVRBX0RBVEE0X19FU0RIQzNfQ01ECQkJCUlPTVVYX1BBRCgweDZmMCwgMHgyOGMsIDEsIDB4ODE4LCAxLCBOT19QQURfQ1RSTCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUwLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1MC5oCmluZGV4IDA1OGE5MjIuLjk4ZTdmZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTAuaApAQCAtODYsNyArODYsNyBAQAogI2RlZmluZSBNWDUwX1BBRF9JMkMxX1NDTF9fSTJDMV9TQ0wJSU9NVVhfUEFEKDB4MkVDLCAweDQwLCBJT01VWF9DT05GSUdfU0lPTiwgMHgwLCAwLCBcCiAJCQkJCQkJTVg1MF9JMkNfUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX0kyQzFfU0NMX19HUElPXzZfMTgJSU9NVVhfUEFEKDB4MkVDLCAweDQwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUwX1BBRF9JMkMxX1NDTF9fVUFSVDJfVFhECUlPTVVYX1BBRCgweDJFQywgMHg0MCwgMiwgMHg3Y2MsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDMV9TQ0xfX1VBUlQyX1RYRAlJT01VWF9QQUQoMHgyRUMsIDB4NDAsIDIsIDB4MCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YNTBfUEFEX0kyQzFfU0RBX19JMkMxX1NEQQlJT01VWF9QQUQoMHgyRjAsIDB4NDQsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKIAkJCQkJCQlNWDUwX0kyQ19QQURfQ1RSTCkKQEAgLTk2LDcgKzk2LDcgQEAKICNkZWZpbmUgTVg1MF9QQURfSTJDMl9TQ0xfX0kyQzJfU0NMCUlPTVVYX1BBRCgweDJGNCwgMHg0OCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgXAogCQkJCQkJCU1YNTBfSTJDX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9JMkMyX1NDTF9fR1BJT182XzIwCUlPTVVYX1BBRCgweDJGNCwgMHg0OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MF9QQURfSTJDMl9TQ0xfX1VBUlQyX0NUUwlJT01VWF9QQUQoMHgyRjQsIDB4NDgsIDIsIDB4N2M4LCAwLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzJfU0NMX19VQVJUMl9DVFMJSU9NVVhfUEFEKDB4MkY0LCAweDQ4LCAyLCAweDAsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfSTJDMl9TQ0xfX0RDRENfT0sJSU9NVVhfUEFEKDB4MkY0LCAweDQ4LCA3LCAweDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YNTBfUEFEX0kyQzJfU0RBX19JMkMyX1NEQQlJT01VWF9QQUQoMHgyRjgsIDB4NEMsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWEZTX19BVUQzX1JYRlMJSU9NVVhfUEFEKDB4MzI4LCAweDdDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9TU0lfUlhGU19fR1BJT182XzQJSU9NVVhfUEFEKDB4MzI4LCAweDdDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUwX1BBRF9TU0lfUlhGU19fVUFSVDVfVFhECUlPTVVYX1BBRCgweDMyOCwgMHg3QywgMiwgMHg3ZTQsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1JYRlNfX1VBUlQ1X1RYRAlJT01VWF9QQUQoMHgzMjgsIDB4N0MsIDIsIDB4MCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9TU0lfUlhGU19fV0VJTV9ENglJT01VWF9QQUQoMHgzMjgsIDB4N0MsIDMsIDB4ODA0LCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfU1NJX1JYRlNfX0NTUElfU1MyCUlPTVVYX1BBRCgweDMyOCwgMHg3QywgNCwgMHg2ZjAsIDAsIE1YNTBfQ1NQSV9TU19QQUQpCiAjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWEZTX19GRUNfQ09MCUlPTVVYX1BBRCgweDMyOCwgMHg3QywgNSwgMHg3NzAsIDAsIFBBRF9DVExfRFNFX0hJR0gpCkBAIC0xODYsMjUgKzE4NiwyNSBAQAogI2RlZmluZSBNWDUwX1BBRF9TU0lfUlhDX19GRUNfUlhfQ0xLCUlPTVVYX1BBRCgweDMyQywgMHg4MCwgNSwgMHg3ODAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9TU0lfUlhDX19GRUNfTURJTwlJT01VWF9QQUQoMHgzMkMsIDB4ODAsIDYsIDB4Nzc0LCAxLCBNWDUwX0ZFQ19QQURfQ1RSTCkKIAotI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRAlJT01VWF9QQUQoMHgzMzAsIDB4ODQsIDAsIDB4N2M0LCAwLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhECUlPTVVYX1BBRCgweDMzMCwgMHg4NCwgMCwgMHgwLCAwLCBNWDUwX1VBUlRfUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1RYRF9fR1BJT182XzYJSU9NVVhfUEFEKDB4MzMwLCAweDg0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhECUlPTVVYX1BBRCgweDMzNCwgMHg4OCwgMCwgMHg3YzQsIDEsIE1YNTBfVUFSVF9QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfVUFSVDFfUlhEX19HUElPXzZfNwlJT01VWF9QQUQoMHgzMzQsIDB4ODgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVg1MF9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMJSU9NVVhfUEFEKDB4MzM4LCAweDhDLCAwLCAweDdjMCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUwlJT01VWF9QQUQoMHgzMzgsIDB4OEMsIDAsIDB4MCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9DVFNfX0dQSU9fNl84CUlPTVVYX1BBRCgweDMzOCwgMHg4QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MF9QQURfVUFSVDFfQ1RTX19VQVJUNV9UWEQJSU9NVVhfUEFEKDB4MzM4LCAweDhDLCAyLCAweDdlNCwgMiwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9DVFNfX1VBUlQ1X1RYRAlJT01VWF9QQUQoMHgzMzgsIDB4OEMsIDIsIDB4MCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9DVFNfX1NENF9ENAlJT01VWF9QQUQoMHgzMzgsIDB4OEMsIDQsIDB4NzYwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9DVFNfX1NENF9DTUQJSU9NVVhfUEFEKDB4MzM4LCAweDhDLCA1LCAweDc0YywgMCwgTVg1MF9TRF9QQURfQ1RSTCkKIAogI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUwlJT01VWF9QQUQoMHgzM0MsIDB4OTAsIDAsIDB4N2MwLCAxLCBNWDUwX1VBUlRfUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1JUU19fR1BJT182XzkJSU9NVVhfUEFEKDB4MzNDLCAweDkwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9SVFNfX1VBUlQ1X1JYRAlJT01VWF9QQUQoMHgzM0MsIDB4OTAsIDIsIDB4N2U0LCAzLCBNWDUwX1VBUlRfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1JUU19fU0Q0X0Q1CUlPTVVYX1BBRCgweDMzQywgMHg5MCwgNCwgMHgwLCAxLCBNWDUwX1NEX1BBRF9DVFJMKQotI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9SVFNfX1NENF9DTEsJSU9NVVhfUEFEKDB4MzNDLCAweDkwLCA1LCAweDAsIDEsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1JUU19fU0Q0X0Q1CUlPTVVYX1BBRCgweDMzQywgMHg5MCwgNCwgMHg3NjQsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1JUU19fU0Q0X0NMSwlJT01VWF9QQUQoMHgzM0MsIDB4OTAsIDUsIDB4NzQ4LCAwLCBNWDUwX1NEX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YNTBfUEFEX1VBUlQyX1RYRF9fVUFSVDJfVFhECUlPTVVYX1BBRCgweDM0MCwgMHg5NCwgMCwgMHg3Y2MsIDIsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDJfVFhEX19VQVJUMl9UWEQJSU9NVVhfUEFEKDB4MzQwLCAweDk0LCAwLCAweDAsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfVUFSVDJfVFhEX19HUElPXzZfMTAJSU9NVVhfUEFEKDB4MzQwLCAweDk0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9UWERfX1NENF9ENglJT01VWF9QQUQoMHgzNDAsIDB4OTQsIDQsIDB4NzY4LCAwLCBNWDUwX1NEX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9UWERfX1NENF9ENAlJT01VWF9QQUQoMHgzNDAsIDB4OTQsIDUsIDB4NzYwLCAxLCBNWDUwX1NEX1BBRF9DVFJMKQpAQCAtMjE0LDcgKzIxNCw3IEBACiAjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX1JYRF9fU0Q0X0Q3CUlPTVVYX1BBRCgweDM0NCwgMHg5OCwgNCwgMHg3NmMsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX1JYRF9fU0Q0X0Q1CUlPTVVYX1BBRCgweDM0NCwgMHg5OCwgNSwgMHg3NjQsIDEsIE1YNTBfU0RfUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVg1MF9QQURfVUFSVDJfQ1RTX19VQVJUMl9DVFMJSU9NVVhfUEFEKDB4MzQ4LCAweDlDLCAwLCAweDdjOCwgMiwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9DVFNfX1VBUlQyX0NUUwlJT01VWF9QQUQoMHgzNDgsIDB4OUMsIDAsIDB4MCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9DVFNfX0dQSU9fNl8xMglJT01VWF9QQUQoMHgzNDgsIDB4OUMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX0NUU19fU0Q0X0NNRAlJT01VWF9QQUQoMHgzNDgsIDB4OUMsIDQsIDB4NzRjLCAxLCBNWDUwX1NEX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9DVFNfX1NENF9ENglJT01VWF9QQUQoMHgzNDgsIDB4OUMsIDUsIDB4NzY4LCAxLCBNWDUwX1NEX1BBRF9DVFJMKQpAQCAtMjI0LDcgKzIyNCw3IEBACiAjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX1JUU19fU0Q0X0NMSwlJT01VWF9QQUQoMHgzNEMsIDB4QTAsIDQsIDB4NzQ4LCAxLCBNWDUwX1NEX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9SVFNfX1NENF9ENwlJT01VWF9QQUQoMHgzNEMsIDB4QTAsIDUsIDB4NzZjLCAxLCBNWDUwX1NEX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YNTBfUEFEX1VBUlQzX1RYRF9fVUFSVDNfVFhECUlPTVVYX1BBRCgweDM1MCwgMHhBNCwgMCwgMHg3ZDQsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDNfVFhEX19VQVJUM19UWEQJSU9NVVhfUEFEKDB4MzUwLCAweEE0LCAwLCAweDAsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfVUFSVDNfVFhEX19HUElPXzZfMTQJSU9NVVhfUEFEKDB4MzUwLCAweEE0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUM19UWERfX1NEMV9ENAlJT01VWF9QQUQoMHgzNTAsIDB4QTQsIDMsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfVUFSVDNfVFhEX19TRDRfRDAJSU9NVVhfUEFEKDB4MzUwLCAweEE0LCA0LCAweDc1MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKQEAgLTIzOCw5ICsyMzgsOSBAQAogI2RlZmluZSBNWDUwX1BBRF9VQVJUM19SWERfX1NEMl9DRAlJT01VWF9QQUQoMHgzNTQsIDB4QTgsIDUsIDB4NzQwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUM19SWERfX1dFSU1fRDEzCUlPTVVYX1BBRCgweDM1NCwgMHhBOCwgNiwgMHg4MjAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1RYRF9fVUFSVDRfVFhECUlPTVVYX1BBRCgweDM1OCwgMHhBQywgMCwgMHg3ZGMsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDRfVFhEX19VQVJUNF9UWEQJSU9NVVhfUEFEKDB4MzU4LCAweEFDLCAwLCAweDAsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfVUFSVDRfVFhEX19HUElPXzZfMTYJSU9NVVhfUEFEKDB4MzU4LCAweEFDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUwX1BBRF9VQVJUNF9UWERfX1VBUlQzX0NUUwlJT01VWF9QQUQoMHgzNTgsIDB4QUMsIDIsIDB4N2QwLCAwLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1RYRF9fVUFSVDNfQ1RTCUlPTVVYX1BBRCgweDM1OCwgMHhBQywgMiwgMHgwLCAwLCBNWDUwX1VBUlRfUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1RYRF9fU0QxX0Q2CUlPTVVYX1BBRCgweDM1OCwgMHhBQywgMywgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUNF9UWERfX1NENF9EMglJT01VWF9QQUQoMHgzNTgsIDB4QUMsIDQsIDB4NzU4LCAwLCBNWDUwX1NEX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9VQVJUNF9UWERfX1NEMl9MQ1RMCUlPTVVYX1BBRCgweDM1OCwgMHhBQywgNSwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQpAQCAtMjc4LDcgKzI3OCw3IEBACiAjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9NT1NJX19HUElPXzRfMTMJCUlPTVVYX1BBRCgweDM3NCwgMHhDOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX01PU0lfX0NTUElfU1MxCQlJT01VWF9QQUQoMHgzNzQsIDB4QzgsIDIsIDB4NmVjLCAxLCBNWDUwX0NTUElfU1NfUEFEKQogI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfTU9TSV9fRUNTUEkyX1NTMQlJT01VWF9QQUQoMHgzNzQsIDB4QzgsIDMsIDB4MCwgMCwgTVg1MF9DU1BJX1NTX1BBRCkKLSNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX01PU0lfX1VBUlQzX0NUUwkJSU9NVVhfUEFEKDB4Mzc0LCAweEM4LCA0LCAweDdkMCwgMywgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfTU9TSV9fVUFSVDNfQ1RTCQlJT01VWF9QQUQoMHgzNzQsIDB4QzgsIDQsIDB4MCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfTU9TSV9fRVBEQ19TRENFNwlJT01VWF9QQUQoMHgzNzQsIDB4QzgsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9NT1NJX19XRUlNX0Q5CQlJT01VWF9QQUQoMHgzNzQsIDB4QzgsIDcsIDB4ODEwLCAwLCBOT19QQURfQ1RSTCkKIApAQCAtMjk0LDcgKzI5NCw3IEBACiAjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9TUzBfX0dQSU9fNF8xNQkJSU9NVVhfUEFEKDB4MzdDLCAweEQwLCAxLCAweDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCiAjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9TUzBfX0NTUElfU1MzCQlJT01VWF9QQUQoMHgzN0MsIDB4RDAsIDIsIDB4NmY0LCAxLCBNWDUwX0NTUElfU1NfUEFEKQogI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfU1MwX19FQ1NQSTJfU1MzCQlJT01VWF9QQUQoMHgzN0MsIDB4RDAsIDMsIDB4MCwgMCwgTVg1MF9DU1BJX1NTX1BBRCkKLSNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX1NTMF9fVUFSVDRfQ1RTCQlJT01VWF9QQUQoMHgzN0MsIDB4RDAsIDQsIDB4N2Q4LCAxLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9TUzBfX1VBUlQ0X0NUUwkJSU9NVVhfUEFEKDB4MzdDLCAweEQwLCA0LCAweDAsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX1NTMF9fRVBEQ19TRENFOQkJSU9NVVhfUEFEKDB4MzdDLCAweEQwLCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfU1MwX19XRUlNX0QxMQkJSU9NVVhfUEFEKDB4MzdDLCAweEQwLCA3LCAweDgxOCwgMCwgTk9fUEFEX0NUUkwpCiAKQEAgLTMxMSwxNyArMzExLDE3IEBACiAjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NT1NJX19HUElPXzRfMTcJCUlPTVVYX1BBRCgweDM4NCwgMHhEOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01PU0lfX0VMQ0RJRl9SRAkJSU9NVVhfUEFEKDB4Mzg0LCAweEQ4LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTU9TSV9fRUNTUEkxX1NTMQlJT01VWF9QQUQoMHgzODQsIDB4RDgsIDMsIDB4MCwgMCwgTVg1MF9DU1BJX1NTX1BBRCkKLSNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01PU0lfX1VBUlQ1X0NUUwkJSU9NVVhfUEFEKDB4Mzg0LCAweEQ4LCA0LCAweDdlMCwgMSwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTU9TSV9fVUFSVDVfQ1RTCQlJT01VWF9QQUQoMHgzODQsIDB4RDgsIDQsIDB4MCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTU9TSV9fRUxDRElGX0VOCQlJT01VWF9QQUQoMHgzODQsIDB4RDgsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NT1NJX19OQU5ERl9DRU41CUlPTVVYX1BBRCgweDM4NCwgMHhEOCwgNiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01PU0lfX1dFSU1fRDkJCUlPTVVYX1BBRCgweDM4NCwgMHhEOCwgNywgMHg4MTAsIDEsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19FQ1NQSTJfTUlTTwlJT01VWF9QQUQoMHgzODgsIDB4REMsIDAsIDB4NzNjLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01JU09fX0VDU1BJMl9NSVNPCUlPTVVYX1BBRCgweDM4OCwgMHhEQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01JU09fX0dQSU9fNF8xOAkJSU9NVVhfUEFEKDB4Mzg4LCAweERDLCAxLCAweDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCiAjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19FTENESUZfUlMJCUlPTVVYX1BBRCgweDM4OCwgMHhEQywgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01JU09fX0VDU1BJMV9TUzIJSU9NVVhfUEFEKDB4Mzg4LCAweERDLCAzLCAweDAsIDAsIE1YNTBfQ1NQSV9TU19QQUQpCi0jZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19VQVJUNV9UWEQJCUlPTVVYX1BBRCgweDM4OCwgMHhEQywgNCwgMHg3ZTQsIDQsIE1YNTBfVUFSVF9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01JU09fX0VMQ0RJRl9WU1lOQwlJT01VWF9QQUQoMHgzODgsIDB4REMsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19VQVJUNV9UWEQJCUlPTVVYX1BBRCgweDM4OCwgMHhEQywgNCwgMHgwLCAwLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19FTENESUZfVlNZTkMJSU9NVVhfUEFEKDB4Mzg4LCAweERDLCA1LCAweDczYywgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19OQU5ERl9DRU42CUlPTVVYX1BBRCgweDM4OCwgMHhEQywgNiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01JU09fX1dFSU1fRDEwCQlJT01VWF9QQUQoMHgzODgsIDB4REMsIDcsIDB4ODE0LCAxLCBOT19QQURfQ1RSTCkKIApAQCAtNTAzLDcgKzUwMyw3IEBACiAjZGVmaW5lIE1YNTBfUEFEX0RJU1BfUkRfX0VMQ0RJRl9FTglJT01VWF9QQUQoMHg0MzAsIDB4MTUwLCAyLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9ESVNQX1JEX19XRUlNX0EyNQlJT01VWF9QQUQoMHg0MzAsIDB4MTUwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YNTBfUEFEX0RJU1BfUlNfX0VMQ0RJRl9SUwlJT01VWF9QQUQoMHg0MzQsIDB4MTU0LCAwLCAweDczYywgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfUlNfX0VMQ0RJRl9SUwlJT01VWF9QQUQoMHg0MzQsIDB4MTU0LCAwLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQogI2RlZmluZSBNWDUwX1BBRF9ESVNQX1JTX19HUElPXzJfMTcJSU9NVVhfUEFEKDB4NDM0LCAweDE1NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRElTUF9SU19fRUxDRElGX1ZTWU5DCUlPTVVYX1BBRCgweDQzNCwgMHgxNTQsIDIsIDB4NzNjLCAxLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRElTUF9SU19fV0VJTV9BMjYJSU9NVVhfUEFEKDB4NDM0LCAweDE1NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKQEAgLTY5MSw4ICs2OTEsOCBAQAogCiAjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDlfX0VQRENfRDkJSU9NVVhfUEFEKDB4NTcwLCAweDFENCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRVBEQ19EOV9fR1BJT18zXzkJSU9NVVhfUEFEKDB4NTcwLCAweDFENCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MF9QQURfRVBEQ19EOV9fV0VJTV9EOQlJT01VWF9QQUQoMHg1NzAsIDB4MUQ0LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUwX1BBRF9FUERDX0Q5X19FTENESUZfRDI1CUlPTVVYX1BBRCgweDU3MCwgMHgxRDQsIDMsIDB4ODEwLCAyLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EOV9fV0VJTV9EOQlJT01VWF9QQUQoMHg1NzAsIDB4MUQ0LCAyLCAweDgxMCwgMiwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDlfX0VMQ0RJRl9EMjUJSU9NVVhfUEFEKDB4NTcwLCAweDFENCwgMywgMHgwLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKIAogI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxMF9fRVBEQ19EMTAJSU9NVVhfUEFEKDB4NTc0LCAweDFEOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMTBfX0dQSU9fM18xMAlJT01VWF9QQUQoMHg1NzQsIDB4MUQ4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUxLmgKaW5kZXggYjY3NjdmOS4uZGY2YWNjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1MS5oCkBAIC00NzMsNyArNDczLDcgQEAKICNkZWZpbmUgX01YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhECQlJT01VWF9QQUQoMHg2MjgsIDB4MjM4LCAwLCAweDA5ZWMsIDIsIDApCiAjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMl9UWERfX0ZJUklfUlhECQlJT01VWF9QQUQoMHg2MmMsIDB4MjNjLCAxLCAweDAwMDAsIDAsIDApCiAjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMl9UWERfX0dQSU8xXzIxCQlJT01VWF9QQUQoMHg2MmMsIDB4MjNjLCAzLCAweDAwMDAsIDAsIDApCi0jZGVmaW5lIF9NWDUxX1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRAkJSU9NVVhfUEFEKDB4NjJjLCAweDIzYywgMCwgMHgwOWVjLCAzLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDJfVFhEX19VQVJUMl9UWEQJCUlPTVVYX1BBRCgweDYyYywgMHgyM2MsIDAsIDB4MDAwMCwgMCwgMCkKICNkZWZpbmUgX01YNTFfUEFEX1VBUlQzX1JYRF9fQ1NJMV9EMAkJSU9NVVhfUEFEKDB4NjMwLCAweDI0MCwgMiwgMHgwMDAwLCAwLCAwKQogI2RlZmluZSBfTVg1MV9QQURfVUFSVDNfUlhEX19HUElPMV8yMgkJSU9NVVhfUEFEKDB4NjMwLCAweDI0MCwgMywgMHgwMDAwLCAwLCAwKQogI2RlZmluZSBfTVg1MV9QQURfVUFSVDNfUlhEX19VQVJUMV9EVFIJCUlPTVVYX1BBRCgweDYzMCwgMHgyNDAsIDAsIDB4MDAwMCwgMCwgMCkKQEAgLTUyOCw3ICs1MjgsNyBAQAogI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTFfX1VBUlQyX1JYRAlJT01VWF9QQUQoMHg2OGMsIDB4MjhjLCAxLCAweDA5ZWMsIDQsIDApCiAjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBMV9fVVNCSDFfREFUQTEJSU9NVVhfUEFEKDB4NjhjLCAweDI4YywgMCwgMHgwMDAwLCAwLCAwKQogI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTJfX0dQSU8xXzEzCQlJT01VWF9QQUQoMHg2OTAsIDB4MjkwLCAyLCAweDAwMDAsIDAsIDApCi0jZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBMl9fVUFSVDJfVFhECUlPTVVYX1BBRCgweDY5MCwgMHgyOTAsIDEsIDB4MDllYywgNSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEEyX19VQVJUMl9UWEQJSU9NVVhfUEFEKDB4NjkwLCAweDI5MCwgMSwgMHgwMDAwLCAwLCAwKQogI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTJfX1VTQkgxX0RBVEEyCUlPTVVYX1BBRCgweDY5MCwgMHgyOTAsIDAsIDB4MDAwMCwgMCwgMCkKICNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEEzX19HUElPMV8xNAkJSU9NVVhfUEFEKDB4Njk0LCAweDI5NCwgMiwgMHgwMDAwLCAwLCAwKQogI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTNfX1VBUlQyX1JUUwlJT01VWF9QQUQoMHg2OTQsIDB4Mjk0LCAxLCAweDA5ZTgsIDUsIDApCkBAIC05ODUsMTEgKzk4NSwxMSBAQAogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XRV9CX19HUElPM18zCQkoX01YNTFfUEFEX05BTkRGX1dFX0JfX0dQSU8zXzMgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfV0VfQl9fTkFOREZfV0VfQgkJKF9NWDUxX1BBRF9OQU5ERl9XRV9CX19OQU5ERl9XRV9CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfV0VfQl9fUEFUQV9ESU9XCQkoX01YNTFfUEFEX05BTkRGX1dFX0JfX1BBVEFfRElPVyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1dFX0JfX1NEM19EQVRBMAkJKF9NWDUxX1BBRF9OQU5ERl9XRV9CX19TRDNfREFUQTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XRV9CX19TRDNfREFUQTAJCShfTVg1MV9QQURfTkFOREZfV0VfQl9fU0QzX0RBVEEwIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRV9CX19HUElPM180CQkoX01YNTFfUEFEX05BTkRGX1JFX0JfX0dQSU8zXzQgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkVfQl9fTkFOREZfUkVfQgkJKF9NWDUxX1BBRF9OQU5ERl9SRV9CX19OQU5ERl9SRV9CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkVfQl9fUEFUQV9ESU9SCQkoX01YNTFfUEFEX05BTkRGX1JFX0JfX1BBVEFfRElPUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JFX0JfX1NEM19EQVRBMQkJKF9NWDUxX1BBRF9OQU5ERl9SRV9CX19TRDNfREFUQTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRV9CX19TRDNfREFUQTEJCShfTVg1MV9QQURfTkFOREZfUkVfQl9fU0QzX0RBVEExIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9BTEVfX0dQSU8zXzUJCShfTVg1MV9QQURfTkFOREZfQUxFX19HUElPM181IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0FMRV9fTkFOREZfQUxFCQkoX01YNTFfUEFEX05BTkRGX0FMRV9fTkFOREZfQUxFIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQUxFX19QQVRBX0JVRkZFUl9FTgkoX01YNTFfUEFEX05BTkRGX0FMRV9fUEFUQV9CVUZGRVJfRU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQpAQCAtOTk5LDE4ICs5OTksMTggQEAKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfV1BfQl9fR1BJTzNfNwkJKF9NWDUxX1BBRF9OQU5ERl9XUF9CX19HUElPM183IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1dQX0JfX05BTkRGX1dQX0IJCShfTVg1MV9QQURfTkFOREZfV1BfQl9fTkFOREZfV1BfQiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1dQX0JfX1BBVEFfRE1BQ0sJCShfTVg1MV9QQURfTkFOREZfV1BfQl9fUEFUQV9ETUFDSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1dQX0JfX1NEM19EQVRBMgkJKF9NWDUxX1BBRF9OQU5ERl9XUF9CX19TRDNfREFUQTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XUF9CX19TRDNfREFUQTIJCShfTVg1MV9QQURfTkFOREZfV1BfQl9fU0QzX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjBfX0VDU1BJMl9TUzEJCShfTVg1MV9QQURfTkFOREZfUkIwX19FQ1NQSTJfU1MxIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjBfX0dQSU8zXzgJCShfTVg1MV9QQURfTkFOREZfUkIwX19HUElPM184IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMF9fTkFOREZfUkIwCQkoX01YNTFfUEFEX05BTkRGX1JCMF9fTkFOREZfUkIwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIwX19QQVRBX0RNQVJRCQkoX01YNTFfUEFEX05BTkRGX1JCMF9fUEFUQV9ETUFSUSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMF9fU0QzX0RBVEEzCQkoX01YNTFfUEFEX05BTkRGX1JCMF9fU0QzX0RBVEEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIwX19TRDNfREFUQTMJCShfTVg1MV9QQURfTkFOREZfUkIwX19TRDNfREFUQTMgfCBNVVhfUEFEX0NUUkwoTVg1MV9TREhDSV9QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMV9fQ1NQSV9NT1NJCQkoX01YNTFfUEFEX05BTkRGX1JCMV9fQ1NQSV9NT1NJIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjFfX0VDU1BJMl9SRFkJCShfTVg1MV9QQURfTkFOREZfUkIxX19FQ1NQSTJfUkRZIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjFfX0dQSU8zXzkJCShfTVg1MV9QQURfTkFOREZfUkIxX19HUElPM185IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMV9fTkFOREZfUkIxCQkoX01YNTFfUEFEX05BTkRGX1JCMV9fTkFOREZfUkIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIxX19QQVRBX0lPUkRZCQkoX01YNTFfUEFEX05BTkRGX1JCMV9fUEFUQV9JT1JEWSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMV9fU0Q0X0NNRAkJKF9NWDUxX1BBRF9OQU5ERl9SQjFfX1NENF9DTUQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjFfX1NENF9DTUQJCShfTVg1MV9QQURfTkFOREZfUkIxX19TRDRfQ01EIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjJfX0RJU1AyX1dBSVQJCShfTVg1MV9QQURfTkFOREZfUkIyX19ESVNQMl9XQUlUIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIyX19FQ1NQSTJfU0NMSwkJKF9NWDUxX1BBRF9OQU5ERl9SQjJfX0VDU1BJMl9TQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjJfX0ZFQ19DT0wJCShfTVg1MV9QQURfTkFOREZfUkIyX19GRUNfQ09MIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfMikpCkBAIC0xMDM2LDQxICsxMDM2LDQxIEBACiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTMl9fR1BJTzNfMTgJCShfTVg1MV9QQURfTkFOREZfQ1MyX19HUElPM18xOCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzJfX05BTkRGX0NTMgkJKF9NWDUxX1BBRF9OQU5ERl9DUzJfX05BTkRGX0NTMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTMl9fUEFUQV9DU18wCQkoX01YNTFfUEFEX05BTkRGX0NTMl9fUEFUQV9DU18wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MyX19TRDRfQ0xLCQkoX01YNTFfUEFEX05BTkRGX0NTMl9fU0Q0X0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTMl9fU0Q0X0NMSwkJKF9NWDUxX1BBRF9OQU5ERl9DUzJfX1NENF9DTEsgfCBNVVhfUEFEX0NUUkwoTVg1MV9TREhDSV9QQURfQ1RSTCB8IFBBRF9DVExfSFlTKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MyX19VU0JIM19IMV9EUAkJKF9NWDUxX1BBRF9OQU5ERl9DUzJfX1VTQkgzX0gxX0RQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MzX19GRUNfTURDCQkoX01YNTFfUEFEX05BTkRGX0NTM19fRkVDX01EQyB8IE1VWF9QQURfQ1RSTChNWDUxX1BBRF9DVFJMXzUpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzNfX0dQSU8zXzE5CQkoX01YNTFfUEFEX05BTkRGX0NTM19fR1BJTzNfMTkgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MzX19OQU5ERl9DUzMJCShfTVg1MV9QQURfTkFOREZfQ1MzX19OQU5ERl9DUzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzNfX1BBVEFfQ1NfMQkJKF9NWDUxX1BBRF9OQU5ERl9DUzNfX1BBVEFfQ1NfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTM19fU0Q0X0RBVDAJCShfTVg1MV9QQURfTkFOREZfQ1MzX19TRDRfREFUMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTM19fU0Q0X0RBVDAJCShfTVg1MV9QQURfTkFOREZfQ1MzX19TRDRfREFUMCB8IE1VWF9QQURfQ1RSTChNWDUxX1NESENJX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MzX19VU0JIM19IMV9ETQkJKF9NWDUxX1BBRF9OQU5ERl9DUzNfX1VTQkgzX0gxX0RNIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M0X19GRUNfVERBVEExCQkoX01YNTFfUEFEX05BTkRGX0NTNF9fRkVDX1REQVRBMSB8IE1VWF9QQURfQ1RSTChNWDUxX1BBRF9DVFJMXzUpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzRfX0dQSU8zXzIwCQkoX01YNTFfUEFEX05BTkRGX0NTNF9fR1BJTzNfMjAgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M0X19OQU5ERl9DUzQJCShfTVg1MV9QQURfTkFOREZfQ1M0X19OQU5ERl9DUzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzRfX1BBVEFfREFfMAkJKF9NWDUxX1BBRF9OQU5ERl9DUzRfX1BBVEFfREFfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNF9fU0Q0X0RBVDEJCShfTVg1MV9QQURfTkFOREZfQ1M0X19TRDRfREFUMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNF9fU0Q0X0RBVDEJCShfTVg1MV9QQURfTkFOREZfQ1M0X19TRDRfREFUMSB8IE1VWF9QQURfQ1RSTChNWDUxX1NESENJX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M0X19VU0JIM19TVFAJCShfTVg1MV9QQURfTkFOREZfQ1M0X19VU0JIM19TVFAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzVfX0ZFQ19UREFUQTIJCShfTVg1MV9QQURfTkFOREZfQ1M1X19GRUNfVERBVEEyIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNSkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNV9fR1BJTzNfMjEJCShfTVg1MV9QQURfTkFOREZfQ1M1X19HUElPM18yMSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzVfX05BTkRGX0NTNQkJKF9NWDUxX1BBRF9OQU5ERl9DUzVfX05BTkRGX0NTNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNV9fUEFUQV9EQV8xCQkoX01YNTFfUEFEX05BTkRGX0NTNV9fUEFUQV9EQV8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M1X19TRDRfREFUMgkJKF9NWDUxX1BBRF9OQU5ERl9DUzVfX1NENF9EQVQyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M1X19TRDRfREFUMgkJKF9NWDUxX1BBRF9OQU5ERl9DUzVfX1NENF9EQVQyIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzVfX1VTQkgzX0RJUgkJKF9NWDUxX1BBRF9OQU5ERl9DUzVfX1VTQkgzX0RJUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNl9fQ1NQSV9TUzMJCShfTVg1MV9QQURfTkFOREZfQ1M2X19DU1BJX1NTMyB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M2X19GRUNfVERBVEEzCQkoX01YNTFfUEFEX05BTkRGX0NTNl9fRkVDX1REQVRBMyB8IE1VWF9QQURfQ1RSTChNWDUxX1BBRF9DVFJMXzUpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzZfX0dQSU8zXzIyCQkoX01YNTFfUEFEX05BTkRGX0NTNl9fR1BJTzNfMjIgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M2X19OQU5ERl9DUzYJCShfTVg1MV9QQURfTkFOREZfQ1M2X19OQU5ERl9DUzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzZfX1BBVEFfREFfMgkJKF9NWDUxX1BBRF9OQU5ERl9DUzZfX1BBVEFfREFfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNl9fU0Q0X0RBVDMJCShfTVg1MV9QQURfTkFOREZfQ1M2X19TRDRfREFUMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNl9fU0Q0X0RBVDMJCShfTVg1MV9QQURfTkFOREZfQ1M2X19TRDRfREFUMyB8IE1VWF9QQURfQ1RSTChNWDUxX1NESENJX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M3X19GRUNfVFhfRU4JCShfTVg1MV9QQURfTkFOREZfQ1M3X19GRUNfVFhfRU4gfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF81KSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M3X19HUElPM18yMwkJKF9NWDUxX1BBRF9OQU5ERl9DUzdfX0dQSU8zXzIzIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTN19fTkFOREZfQ1M3CQkoX01YNTFfUEFEX05BTkRGX0NTN19fTkFOREZfQ1M3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M3X19TRDNfQ0xLCQkoX01YNTFfUEFEX05BTkRGX0NTN19fU0QzX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTN19fU0QzX0NMSwkJKF9NWDUxX1BBRF9OQU5ERl9DUzdfX1NEM19DTEsgfCBNVVhfUEFEX0NUUkwoTVg1MV9TREhDSV9QQURfQ1RSTCB8IFBBRF9DVExfSFlTKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fRUNTUEkyX1NTMAkoX01YNTFfUEFEX05BTkRGX1JEWV9JTlRfX0VDU1BJMl9TUzAgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JEWV9JTlRfX0ZFQ19UWF9DTEsJKF9NWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19GRUNfVFhfQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JEWV9JTlRfX0dQSU8zXzI0CShfTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fR1BJTzNfMjQgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fTkFOREZfUkRZX0lOVAkoX01YNTFfUEFEX05BTkRGX1JEWV9JTlRfX05BTkRGX1JEWV9JTlQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19TRDNfQ01ECQkoX01YNTFfUEFEX05BTkRGX1JEWV9JTlRfX1NEM19DTUQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19TRDNfQ01ECQkoX01YNTFfUEFEX05BTkRGX1JEWV9JTlRfX1NEM19DTUQgfCBNVVhfUEFEX0NUUkwoTVg1MV9TREhDSV9QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxNV9fRUNTUEkyX01PU0kJCShfTVg1MV9QQURfTkFOREZfRDE1X19FQ1NQSTJfTU9TSSB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE1X19HUElPM18yNQkJKF9NWDUxX1BBRF9OQU5ERl9EMTVfX0dQSU8zXzI1IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxNV9fTkFOREZfRDE1CQkoX01YNTFfUEFEX05BTkRGX0QxNV9fTkFOREZfRDE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKQEAgLTE0NzksMjYgKzE0NzksMjYgQEAKICNkZWZpbmUgTVg1MV9QQURfU0QxX0NMS19fU0QxX0NMSwkJKF9NWDUxX1BBRF9TRDFfQ0xLX19TRDFfQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwgfCBQQURfQ1RMX0hZUykpCiAjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMF9fQVVENV9UWEQJCShfTVg1MV9QQURfU0QxX0RBVEEwX19BVUQ1X1RYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMF9fQ1NQSV9NSVNPCQkoX01YNTFfUEFEX1NEMV9EQVRBMF9fQ1NQSV9NSVNPIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTBfX1NEMV9EQVRBMAkJKF9NWDUxX1BBRF9TRDFfREFUQTBfX1NEMV9EQVRBMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwCQkoX01YNTFfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREEwX19FSU1fREEwCQkoX01YNTFfUEFEX0VJTV9EQTBfX0VJTV9EQTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREExX19FSU1fREExCQkoX01YNTFfUEFEX0VJTV9EQTFfX0VJTV9EQTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREEyX19FSU1fREEyCQkoX01YNTFfUEFEX0VJTV9EQTJfX0VJTV9EQTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREEzX19FSU1fREEzCQkoX01YNTFfUEFEX0VJTV9EQTNfX0VJTV9EQTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTFfX0FVRDVfUlhECQkoX01YNTFfUEFEX1NEMV9EQVRBMV9fQVVENV9SWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMQkJKF9NWDUxX1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMV9fU0QxX0RBVEExCQkoX01YNTFfUEFEX1NEMV9EQVRBMV9fU0QxX0RBVEExIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREE0X19FSU1fREE0CQkoX01YNTFfUEFEX0VJTV9EQTRfX0VJTV9EQTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREE1X19FSU1fREE1CQkoX01YNTFfUEFEX0VJTV9EQTVfX0VJTV9EQTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREE2X19FSU1fREE2CQkoX01YNTFfUEFEX0VJTV9EQTZfX0VJTV9EQTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREE3X19FSU1fREE3CQkoX01YNTFfUEFEX0VJTV9EQTdfX0VJTV9EQTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTJfX0FVRDVfVFhDCQkoX01YNTFfUEFEX1NEMV9EQVRBMl9fQVVENV9UWEMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMgkJKF9NWDUxX1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyCQkoX01YNTFfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9FSU1fREExMF9fRUlNX0RBMTAJCShfTVg1MV9QQURfRUlNX0RBMTBfX0VJTV9EQTEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTFfX0VJTV9EQTExCQkoX01YNTFfUEFEX0VJTV9EQTExX19FSU1fREExMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQThfX0VJTV9EQTgJCShfTVg1MV9QQURfRUlNX0RBOF9fRUlNX0RBOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTlfX0VJTV9EQTkJCShfTVg1MV9QQURfRUlNX0RBOV9fRUlNX0RBOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBM19fQVVENV9UWEZTCQkoX01YNTFfUEFEX1NEMV9EQVRBM19fQVVENV9UWEZTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEzX19DU1BJX1NTMQkJKF9NWDUxX1BBRF9TRDFfREFUQTNfX0NTUElfU1MxIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMwkJKF9NWDUxX1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzCQkoX01YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9HUElPMV8wX19DU1BJX1NTMgkJKF9NWDUxX1BBRF9HUElPMV8wX19DU1BJX1NTMiB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfR1BJTzFfMF9fR1BJTzFfMAkJKF9NWDUxX1BBRF9HUElPMV8wX19HUElPMV8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1MV9QQURfR1BJTzFfMF9fU0QxX0NECQkoX01YNTFfUEFEX0dQSU8xXzBfX1NEMV9DRCB8IE1VWF9QQURfQ1RSTChNWDUxX0VTREhDX1BBRF9DVFJMKSkKQEAgLTE1MTcsMTYgKzE1MTcsMTYgQEAKICNkZWZpbmUgTVg1MV9QQURfU0QyX0NMS19fU0QyX0NMSwkJKF9NWDUxX1BBRF9TRDJfQ0xLX19TRDJfQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwgfCBQQURfQ1RMX0hZUykpCiAjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBMF9fQ1NQSV9NSVNPCQkoX01YNTFfUEFEX1NEMl9EQVRBMF9fQ1NQSV9NSVNPIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTBfX1NEMV9EQVQ0CQkoX01YNTFfUEFEX1NEMl9EQVRBMF9fU0QxX0RBVDQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMAkJKF9NWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBMF9fU0QyX0RBVEEwCQkoX01YNTFfUEFEX1NEMl9EQVRBMF9fU0QyX0RBVEEwIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTFfX1NEMV9EQVQ1CQkoX01YNTFfUEFEX1NEMl9EQVRBMV9fU0QxX0RBVDUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTFfX1NEMl9EQVRBMQkJKF9NWDUxX1BBRF9TRDJfREFUQTFfX1NEMl9EQVRBMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBMV9fU0QyX0RBVEExCQkoX01YNTFfUEFEX1NEMl9EQVRBMV9fU0QyX0RBVEExIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTFfX1VTQkgzX0gyX0RQCQkoX01YNTFfUEFEX1NEMl9EQVRBMV9fVVNCSDNfSDJfRFAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTJfX1NEMV9EQVQ2CQkoX01YNTFfUEFEX1NEMl9EQVRBMl9fU0QxX0RBVDYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMgkJKF9NWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBMl9fU0QyX0RBVEEyCQkoX01YNTFfUEFEX1NEMl9EQVRBMl9fU0QyX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTJfX1VTQkgzX0gyX0RNCQkoX01YNTFfUEFEX1NEMl9EQVRBMl9fVVNCSDNfSDJfRE0gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTNfX0NTUElfU1MyCQkoX01YNTFfUEFEX1NEMl9EQVRBM19fQ1NQSV9TUzIgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBM19fU0QxX0RBVDcJCShfTVg1MV9QQURfU0QyX0RBVEEzX19TRDFfREFUNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBM19fU0QyX0RBVEEzCQkoX01YNTFfUEFEX1NEMl9EQVRBM19fU0QyX0RBVEEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMJCShfTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMgfCBNVVhfUEFEX0NUUkwoTVg1MV9TREhDSV9QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzJfX0NDTV9PVVRfMgkJKF9NWDUxX1BBRF9HUElPMV8yX19DQ01fT1VUXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9HUElPMV8yX19HUElPMV8yCQkoX01YNTFfUEFEX0dQSU8xXzJfX0dQSU8xXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUxX1BBRF9HUElPMV8yX19JMkMyX1NDTAkJKF9NWDUxX1BBRF9HUElPMV8yX19JMkMyX1NDTCB8IE1VWF9QQURfQ1RSTChNWDUxX0kyQ19QQURfQ1RSTCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1My5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTMuaAppbmRleCA2OGUxMWQ3Li5lOTVkOWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1My5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjEsMzA1ICsyMSwyMzU4IEBACiAKICNpbmNsdWRlIDxtYWNoL2lvbXV4LXYzLmg+CiAKLS8qCi0gKiB2YXJpb3VzIElPTVVYIGFsdGVybmF0ZSBvdXRwdXQgZnVuY3Rpb25zICgxLTcpCi0gKi8KLXR5cGVkZWYgZW51bSBpb211eF9jb25maWcgewotCUlPTVVYX0NPTkZJR19BTFQwLAotCUlPTVVYX0NPTkZJR19BTFQxLAotCUlPTVVYX0NPTkZJR19BTFQyLAotCUlPTVVYX0NPTkZJR19BTFQzLAotCUlPTVVYX0NPTkZJR19BTFQ0LAotCUlPTVVYX0NPTkZJR19BTFQ1LAotCUlPTVVYX0NPTkZJR19BTFQ2LAotCUlPTVVYX0NPTkZJR19BTFQ3LAotCUlPTVVYX0NPTkZJR19HUElPLCAvKiBhZGRlZCB0byBoZWxwIHVzZXIgdXNlIEdQSU8gbW9kZSAqLwotfSBpb211eF9waW5fY2ZnX3Q7Ci0KIC8qIFRoZXNlIDIgZGVmaW5lcyBhcmUgZm9yIHBpbnMgdGhhdCBtYXkgbm90IGhhdmUgYSBtdXggcmVnaXN0ZXIsIGJ1dCBjb3VsZAogICogaGF2ZSBhIHBhZCBzZXR0aW5nIHJlZ2lzdGVyLCBhbmQgdmljZS12ZXJzYS4gKi8KLSNkZWZpbmUgTk9OX01VWF9JCTB4MDAKICNkZWZpbmUgTk9OX1BBRF9JCTB4MDAKIAogI2RlZmluZSBNWDUzX1VBUlRfUEFEX0NUUkwJCShQQURfQ1RMX1BLRSB8IFBBRF9DVExfUFVFIHwJXAogCQlQQURfQ1RMX0RTRV9ISUdIIHwgUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfSFlTKQotLyogVUFSVDEgKi8KLSNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMTBfX1VBUlQxX1RYRAlJT01VWF9QQUQoMHg0MTQsIDB4RTgsIDIsIDB4MCwgMCwgTVg1M19VQVJUX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9DU0kwX0QxMV9fVUFSVDFfUlhECUlPTVVYX1BBRCgweDQxOCwgMHhFQywgMiwgMHg4NzgsIDEsIE1YNTNfVUFSVF9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RJT1dfX1VBUlQxX1RYRAlJT01VWF9QQUQoMHg1RjAsIDB4MjcwLCAzLCAweDAsCTAsIE1YNTNfVUFSVF9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RNQUNLX19VQVJUMV9SWEQJSU9NVVhfUEFEKDB4NUY0LCAweDI3NCwgMywgMHg4ODAsIDMsIE1YNTNfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19TREhDX1BBRF9DVFJMIAkoUEFEX0NUTF9IWVMgfCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfUFVFIHwgXAorCQkJCVBBRF9DVExfUFVTXzQ3S19VUCB8IFBBRF9DVExfRFNFX0hJR0ggfCBcCisJCQkJUEFEX0NUTF9TUkVfRkFTVCkKIAotLyogVUFSVDIgKi8KLSNkZWZpbmUgTVg1M19QQURfQVRBX0JVRkZFUl9FTl9fVUFSVDJfUlhECUlPTVVYX1BBRCgweDVGQywgMHgyN0MsIDMsIDB4ODgwLCAzLCBNWDUzX1VBUlRfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9ETUFSUV9fVUFSVDJfVFhECUlPTVVYX1BBRCgweDVGOCwgMHgyNzgsIDMsIDB4MCwgMCwgTVg1M19VQVJUX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfRElPUl9fVUFSVDJfUlRTCUlPTVVYX1BBRCgweDYwNCwgMHgyODQsIDMsIDB4ODdDLCAzLCBNWDUzX1VBUlRfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9JTlRSUV9fVUFSVDJfQ1RTCUlPTVVYX1BBRCgweDYwMCwgMHgyODAsIDMsIDB4MCwgMCwgTVg1M19VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xOV9fS1BQX0NPTF81CQlJT01VWF9QQUQoMHgzNDgsIDB4MjAsIDAsIDB4ODQwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xOV9fR1BJTzRfNQkJSU9NVVhfUEFEKDB4MzQ4LCAweDIwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE5X19DQ01fQ0xLTwkJSU9NVVhfUEFEKDB4MzQ4LCAweDIwLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE5X19TUERJRl9PVVQxCUlPTVVYX1BBRCgweDM0OCwgMHgyMCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xOV9fUlRDX0NFX1JUQ19FWFRfVFJJRzIJSU9NVVhfUEFEKDB4MzQ4LCAweDIwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE5X19FQ1NQSTFfUkRZCUlPTVVYX1BBRCgweDM0OCwgMHgyMCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xOV9fRkVDX1REQVRBXzMJSU9NVVhfUEFEKDB4MzQ4LCAweDIwLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE5X19TUkNfSU5UX0JPT1QJSU9NVVhfUEFEKDB4MzQ4LCAweDIwLDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wwX19LUFBfQ09MXzAJSU9NVVhfUEFEKDB4MzRDLCAweDI0LCBvLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MMF9fR1BJTzRfNgkJSU9NVVhfUEFEKDB4MzRDLCAweDI0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MMF9fQVVETVVYX0FVRDVfVFhDCUlPTVVYX1BBRCgweDM0QywgMHgyNCwgMiwgMHg3NTgsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MMF9fVUFSVDRfVFhEX01VWAlJT01VWF9QQUQoMHgzNEMsIDB4MjQsIDQsIDB4ODkwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDBfX0VDU1BJMV9TQ0xLCUlPTVVYX1BBRCgweDM0QywgMHgyNCwgNSwgMHg3OUMsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MMF9fRkVDX1JEQVRBXzMJSU9NVVhfUEFEKDB4MzRDLCAweDI0LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MMF9fU1JDX0FOWV9QVV9SU1QJSU9NVVhfUEFEKDB4MzRDLCAweDI0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfUk9XMF9fS1BQX1JPV18wCUlPTVVYX1BBRCgweDM1MCwgMHgyOCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzBfX0dQSU80XzcJCUlPTVVYX1BBRCgweDM1MCwgMHgyOCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzBfX0FVRE1VWF9BVUQ1X1RYRAlJT01VWF9QQUQoMHgzNTAsIDB4MjgsIDIsIDB4NzRDLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzBfX1VBUlQ0X1JYRF9NVVgJSU9NVVhfUEFEKDB4MzUwLCAweDI4LCA0LCAweDg5MCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1cwX19FQ1NQSTFfTU9TSQlJT01VWF9QQUQoMHgzNTAsIDB4MjgsIDUsIDB4N0E0LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzBfX0ZFQ19UWF9FUglJT01VWF9QQUQoMHgzNTAsIDB4MjgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wxX19LUFBfQ09MXzEJSU9NVVhfUEFEKDB4MzU0LCAweDJDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MMV9fR1BJTzRfOAkJSU9NVVhfUEFEKDB4MzU0LCAweDJDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MMV9fQVVETVVYX0FVRDVfVFhGUwlJT01VWF9QQUQoMHgzNTQsIDB4MkMsIDIsIDB4NzVDLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDFfX1VBUlQ1X1RYRF9NVVgJSU9NVVhfUEFEKDB4MzU0LCAweDJDLCA0LCAweDg5OCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wxX19FQ1NQSTFfTUlTTwlJT01VWF9QQUQoMHgzNTQsIDB4MkMsIDUsIDB4N0EwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDFfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4MzU0LCAweDJDLCA2LCAweDgwOCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wxX19VU0JQSFkxX1RYUkVBRFkJSU9NVVhfUEFEKDB4MzU0LCAweDJDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfUk9XMV9fS1BQX1JPV18xCUlPTVVYX1BBRCgweDM1OCwgMHgzMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzFfX0dQSU80XzkJCUlPTVVYX1BBRCgweDM1OCwgMHgzMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzFfX0FVRE1VWF9BVUQ1X1JYRAlJT01VWF9QQUQoMHgzNTgsIDB4MzAsIDIsIDB4NzQ4LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzFfX1VBUlQ1X1JYRF9NVVgJSU9NVVhfUEFEKDB4MzU4LCAweDMwLCA0LCAweDg5OCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1cxX19FQ1NQSTFfU1MwCUlPTVVYX1BBRCgweDM1OCwgMHgzMCwgNSwgMHg3QTgsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfUk9XMV9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MzU4LCAweDMwLCA2LCAweDgwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1cxX19VU0JQSFkxX1JYVkFMSUQJSU9NVVhfUEFEKDB4MzU4LCAweDMwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MMl9fS1BQX0NPTF8yCUlPTVVYX1BBRCgweDM1QywgMHgzNCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDJfX0dQSU80XzEwCQlJT01VWF9QQUQoMHgzNUMsIDB4MzQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wyX19DQU4xX1RYQ0FOCUlPTVVYX1BBRCgweDM1QywgMHgzNCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDJfX0ZFQ19NRElPCQlJT01VWF9QQUQoMHgzNUMsIDB4MzQsIDQsIDB4ODA0LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDJfX0VDU1BJMV9TUzEJSU9NVVhfUEFEKDB4MzVDLCAweDM0LCA1LCAweDdBQywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wyX19GRUNfUkRBVEFfMglJT01VWF9QQUQoMHgzNUMsIDB4MzQsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wyX19VU0JQSFkxX1JYQUNUSVZFCUlPTVVYX1BBRCgweDM1QywgMHgzNCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzJfX0tQUF9ST1dfMglJT01VWF9QQUQoMHgzNjAsIDB4MzgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1cyX19HUElPNF8xMQlJT01VWF9QQUQoMHgzNjAsIDB4MzgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1cyX19DQU4xX1JYQ0FOCUlPTVVYX1BBRCgweDM2MCwgMHgzOCwgMiwgMHg3NjAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfUk9XMl9fRkVDX01EQwkJSU9NVVhfUEFEKDB4MzYwLCAweDM4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfUk9XMl9fRUNTUEkxX1NTMglJT01VWF9QQUQoMHgzNjAsIDB4MzgsIDUsIDB4N0IwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzJfX0ZFQ19UREFUQV8yCUlPTVVYX1BBRCgweDM2MCwgMHgzOCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzJfX1VTQlBIWTFfUlhFUlJPUglJT01VWF9QQUQoMHgzNjAsIDB4MzgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wzX19LUFBfQ09MXzMJSU9NVVhfUEFEKDB4MzY0LCAweDNDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MM19fR1BJTzRfMTIJCUlPTVVYX1BBRCgweDM2NCwgMHgzQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDNfX1VTQk9IM19IMl9EUAlJT01VWF9QQUQoMHgzNjQsIDB4M0MsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wzX19TUERJRl9JTjEJSU9NVVhfUEFEKDB4MzY0LCAweDNDLCAzLCAweDg3MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wzX19JMkMyX1NDTAkJSU9NVVhfUEFEKDB4MzY0LCAweDNDLCA0IHwgSU9NVVhfQ09ORklHX1NJT04sIDB4ODFDLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDNfX0VDU1BJMV9TUzMJSU9NVVhfUEFEKDB4MzY0LCAweDNDLCA1LCAweDdCNCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wzX19GRUNfQ1JTCQlJT01VWF9QQUQoMHgzNjQsIDB4M0MsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0wzX19VU0JQSFkxX1NJRUNMT0NLCUlPTVVYX1BBRCgweDM2NCwgMHgzQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzNfX0tQUF9ST1dfMwlJT01VWF9QQUQoMHgzNjgsIDB4NDAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1czX19HUElPNF8xMwlJT01VWF9QQUQoMHgzNjgsIDB4NDAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1czX19VU0JPSDNfSDJfRE0JSU9NVVhfUEFEKDB4MzY4LCAweDQwLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfUk9XM19fQ0NNX0FTUkNfRVhUX0NMSwlJT01VWF9QQUQoMHgzNjgsIDB4NDAsIDMsIDB4NzY4LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzNfX0kyQzJfU0RBCUlPTVVYX1BBRCgweDM2OCwgMHg0MCwgNCB8IElPTVVYX0NPTkZJR19TSU9OLCAweDgyMCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1czX19PU0MzMktfMzJLX09VVAlJT01VWF9QQUQoMHgzNjgsIDB4NDAsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1czX19DQ01fUExMNF9CWVAJSU9NVVhfUEFEKDB4MzY4LCAweDQwLCA2LCAweDc3QywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1czX19VU0JQSFkxX0xJTkVTVEFURV8wCUlPTVVYX1BBRCgweDM2OCwgMHg0MCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDRfX0tQUF9DT0xfNAlJT01VWF9QQUQoMHgzNkMsIDB4NDQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0w0X19HUElPNF8xNAkJSU9NVVhfUEFEKDB4MzZDLCAweDQ0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfQ09MNF9fQ0FOMl9UWENBTglJT01VWF9QQUQoMHgzNkMsIDB4NDQsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0w0X19JUFVfU0lTR180CUlPTVVYX1BBRCgweDM2QywgMHg0NCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDRfX1VBUlQ1X1JUUwlJT01VWF9QQUQoMHgzNkMsIDB4NDQsIDQsIDB4ODk0LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX0NPTDRfX1VTQk9IM19VU0JPVEdfT0MJSU9NVVhfUEFEKDB4MzZDLCAweDQ0LCA1LCAweDg5QywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9DT0w0X19VU0JQSFkxX0xJTkVTVEFURV8xCUlPTVVYX1BBRCgweDM2QywgMHg0NCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfS0VZX1JPVzRfX0tQUF9ST1dfNAlJT01VWF9QQUQoMHgzNzAsIDB4NDgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1c0X19HUElPNF8xNQlJT01VWF9QQUQoMHgzNzAsIDB4NDgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1c0X19DQU4yX1JYQ0FOCUlPTVVYX1BBRCgweDM3MCwgMHg0OCwgMiwgMHg3NjQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9LRVlfUk9XNF9fSVBVX1NJU0dfNQlJT01VWF9QQUQoMHgzNzAsIDB4NDgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1c0X19VQVJUNV9DVFMJSU9NVVhfUEFEKDB4MzcwLCAweDQ4LCA0LCAweDg5NCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1c0X19VU0JPSDNfVVNCT1RHX1BXUglJT01VWF9QQUQoMHgzNzAsIDB4NDgsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0tFWV9ST1c0X19VU0JQSFkxX1ZCVVNWQUxJRAlJT01VWF9QQUQoMHgzNzAsIDB4NDgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9ESVNQX0NMS19fSVBVX0RJMF9ESVNQX0NMSwlJT01VWF9QQUQoMHgzNzgsIDB4NEMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9ESVNQX0NMS19fR1BJTzRfMTYJCUlPTVVYX1BBRCgweDM3OCwgMHg0QywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX0RJU1BfQ0xLX19VU0JPSDNfVVNCSDJfRElSCUlPTVVYX1BBRCgweDM3OCwgMHg0QywgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX0RJU1BfQ0xLX19TRE1BX0RFQlVHX0NPUkVfU1RBVEVfMAlJT01VWF9QQUQoMHgzNzgsIDB4NEMsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9ESVNQX0NMS19fRU1JX0VNSV9ERUJVR18wCUlPTVVYX1BBRCgweDM3OCwgMHg0QywgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX0RJU1BfQ0xLX19VU0JQSFkxX0FWQUxJRAlJT01VWF9QQUQoMHgzNzgsIDB4NEMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4xNV9fSVBVX0RJMF9QSU4xNQkJSU9NVVhfUEFEKDB4MzdDLCAweDUwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESTBfUElOMTVfX0dQSU80XzE3CQlJT01VWF9QQUQoMHgzN0MsIDB4NTAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4xNV9fQVVETVVYX0FVRDZfVFhDCUlPTVVYX1BBRCgweDM3QywgMHg1MCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX1BJTjE1X19TRE1BX0RFQlVHX0NPUkVfU1RBVEVfMQlJT01VWF9QQUQoMHgzN0MsIDB4NTAsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4xNV9fRU1JX0VNSV9ERUJVR18xCUlPTVVYX1BBRCgweDM3QywgMHg1MCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX1BJTjE1X19VU0JQSFkxX0JWQUxJRAkJSU9NVVhfUEFEKDB4MzdDLCAweDUwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESTBfUElOMl9fSVBVX0RJMF9QSU4yCQlJT01VWF9QQUQoMHgzODAsIDB4NTQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4yX19HUElPNF8xOAkJCUlPTVVYX1BBRCgweDM4MCwgMHg1NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX1BJTjJfX0FVRE1VWF9BVUQ2X1RYRAlJT01VWF9QQUQoMHgzODAsIDB4NTQsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4yX19TRE1BX0RFQlVHX0NPUkVfU1RBVEVfMglJT01VWF9QQUQoMHgzODAsIDB4NTQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4yX19FTUlfRU1JX0RFQlVHXzIJCUlPTVVYX1BBRCgweDM4MCwgMHg1NCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX1BJTjJfX1VTQlBIWTFfRU5EU0VTU0lPTglJT01VWF9QQUQoMHgzODAsIDB4NTQsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4zX19JUFVfREkwX1BJTjMJCUlPTVVYX1BBRCgweDM4NCwgMHg1OCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX1BJTjNfX0dQSU80XzE5CQkJSU9NVVhfUEFEKDB4Mzg0LCAweDU4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESTBfUElOM19fQVVETVVYX0FVRDZfVFhGUwlJT01VWF9QQUQoMHgzODQsIDB4NTgsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4zX19TRE1BX0RFQlVHX0NPUkVfU1RBVEVfMwlJT01VWF9QQUQoMHgzODQsIDB4NTgsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU4zX19FTUlfRU1JX0RFQlVHXzMJCUlPTVVYX1BBRCgweDM4NCwgMHg1OCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX1BJTjNfX1VTQlBIWTFfSURESUcJCUlPTVVYX1BBRCgweDM4NCwgMHg1OCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX1BJTjRfX0lQVV9ESTBfUElONAkJSU9NVVhfUEFEKDB4Mzg4LCAweDVDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESTBfUElONF9fR1BJTzRfMjAJCQlJT01VWF9QQUQoMHgzODgsIDB4NUMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU40X19BVURNVVhfQVVENl9SWEQJSU9NVVhfUEFEKDB4Mzg4LCAweDVDLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESTBfUElONF9fRVNESEMxX1dQCQlJT01VWF9QQUQoMHgzODgsIDB4NUMsIDMsIDB4N0ZDLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfREkwX1BJTjRfX1NETUFfREVCVUdfWUlFTEQJSU9NVVhfUEFEKDB4Mzg4LCAweDVDLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESTBfUElONF9fRU1JX0VNSV9ERUJVR180CQlJT01VWF9QQUQoMHgzODgsIDB4NUMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJMF9QSU40X19VU0JQSFkxX0hPU1RESVNDT05ORUNUCUlPTVVYX1BBRCgweDM4OCwgMHg1QywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMF9fSVBVX0RJU1AwX0RBVF8wCUlPTVVYX1BBRCgweDM4QywgMHg2MCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMF9fR1BJTzRfMjEJCUlPTVVYX1BBRCgweDM4QywgMHg2MCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMF9fQ1NQSV9TQ0xLCQlJT01VWF9QQUQoMHgzOEMsIDB4NjAsIDIsIDB4NzgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMF9fVVNCT0gzX1VTQkgyX0RBVEFfMAlJT01VWF9QQUQoMHgzOEMsIDB4NjAsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDBfX1NETUFfREVCVUdfQ09SRV9SVU4JSU9NVVhfUEFEKDB4MzhDLCAweDYwLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQwX19FTUlfRU1JX0RFQlVHXzUJSU9NVVhfUEFEKDB4MzhDLCAweDYwLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQwX19VU0JQSFkyX1RYUkVBRFkJSU9NVVhfUEFEKDB4MzhDLCAweDYwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxX19JUFVfRElTUDBfREFUXzEJSU9NVVhfUEFEKDB4MzkwLCAweDY0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxX19HUElPNF8yMgkJSU9NVVhfUEFEKDB4MzkwLCAweDY0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxX19DU1BJX01PU0kJCUlPTVVYX1BBRCgweDM5MCwgMHg2NCwgMiwgMHg3ODgsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxX19VU0JPSDNfVVNCSDJfREFUQV8xCUlPTVVYX1BBRCgweDM5MCwgMHg2NCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMV9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMX1NFTAlJT01VWF9QQUQoMHgzOTAsIDB4NjQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDFfX0VNSV9FTUlfREVCVUdfNglJT01VWF9QQUQoMHgzOTAsIDB4NjQsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDFfX1VTQlBIWTJfUlhWQUxJRAlJT01VWF9QQUQoMHgzOTAsIDB4NjQsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDJfX0lQVV9ESVNQMF9EQVRfMglJT01VWF9QQUQoMHgzOTQsIDB4NjgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDJfX0dQSU80XzIzCQlJT01VWF9QQUQoMHgzOTQsIDB4NjgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDJfX0NTUElfTUlTTwkJSU9NVVhfUEFEKDB4Mzk0LCAweDY4LCAyLCAweDc4NCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDJfX1VTQk9IM19VU0JIMl9EQVRBXzIJSU9NVVhfUEFEKDB4Mzk0LCAweDY4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyX19TRE1BX0RFQlVHX01PREUJSU9NVVhfUEFEKDB4Mzk0LCAweDY4LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyX19FTUlfRU1JX0RFQlVHXzcJSU9NVVhfUEFEKDB4Mzk0LCAweDY4LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyX19VU0JQSFkyX1JYQUNUSVZFCUlPTVVYX1BBRCgweDM5NCwgMHg2OCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUM19fSVBVX0RJU1AwX0RBVF8zCUlPTVVYX1BBRCgweDM5OCwgMHg2QywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUM19fR1BJTzRfMjQJCUlPTVVYX1BBRCgweDM5OCwgMHg2QywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUM19fQ1NQSV9TUzAJCUlPTVVYX1BBRCgweDM5OCwgMHg2QywgMiwgMHg3OEMsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQzX19VU0JPSDNfVVNCSDJfREFUQV8zCUlPTVVYX1BBRCgweDM5OCwgMHg2QywgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUM19fU0RNQV9ERUJVR19CVVNfRVJST1IJSU9NVVhfUEFEKDB4Mzk4LCAweDZDLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQzX19FTUlfRU1JX0RFQlVHXzgJSU9NVVhfUEFEKDB4Mzk4LCAweDZDLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQzX19VU0JQSFkyX1JYRVJST1IJSU9NVVhfUEFEKDB4Mzk4LCAweDZDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19JUFVfRElTUDBfREFUXzQJSU9NVVhfUEFEKDB4MzlDLCAweDcwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19HUElPNF8yNQkJSU9NVVhfUEFEKDB4MzlDLCAweDcwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19DU1BJX1NTMQkJSU9NVVhfUEFEKDB4MzlDLCAweDcwLCAyLCAweDc5MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDRfX1VTQk9IM19VU0JIMl9EQVRBXzQJSU9NVVhfUEFEKDB4MzlDLCAweDcwLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19TRE1BX0RFQlVHX0JVU19SV0IJSU9NVVhfUEFEKDB4MzlDLCAweDcwLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19FTUlfRU1JX0RFQlVHXzkJSU9NVVhfUEFEKDB4MzlDLCAweDcwLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19VU0JQSFkyX1NJRUNMT0NLCUlPTVVYX1BBRCgweDM5QywgMHg3MCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUNV9fSVBVX0RJU1AwX0RBVF81CUlPTVVYX1BBRCgweDNBMCwgMHg3NCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUNV9fR1BJTzRfMjYJCUlPTVVYX1BBRCgweDNBMCwgMHg3NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUNV9fQ1NQSV9TUzIJCUlPTVVYX1BBRCgweDNBMCwgMHg3NCwgMiwgMHg3OTQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ1X19VU0JPSDNfVVNCSDJfREFUQV81CUlPTVVYX1BBRCgweDNBMCwgMHg3NCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUNV9fU0RNQV9ERUJVR19NQVRDSEVEX0RNQlVTCUlPTVVYX1BBRCgweDNBMCwgMHg3NCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUNV9fRU1JX0VNSV9ERUJVR18xMAlJT01VWF9QQUQoMHgzQTAsIDB4NzQsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDVfX1VTQlBIWTJfTElORVNUQVRFXzAJSU9NVVhfUEFEKDB4M0EwLCAweDc0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ2X19JUFVfRElTUDBfREFUXzYJSU9NVVhfUEFEKDB4M0E0LCAweDc4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ2X19HUElPNF8yNwkJSU9NVVhfUEFEKDB4M0E0LCAweDc4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ2X19DU1BJX1NTMwkJSU9NVVhfUEFEKDB4M0E0LCAweDc4LCAyLCAweDc5OCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDZfX1VTQk9IM19VU0JIMl9EQVRBXzYJSU9NVVhfUEFEKDB4M0E0LCAweDc4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ2X19TRE1BX0RFQlVHX1JUQlVGRkVSX1dSSVRFCUlPTVVYX1BBRCgweDNBNCwgMHg3OCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUNl9fRU1JX0VNSV9ERUJVR18xMQlJT01VWF9QQUQoMHgzQTQsIDB4NzgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDZfX1VTQlBIWTJfTElORVNUQVRFXzEJSU9NVVhfUEFEKDB4M0E0LCAweDc4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19JUFVfRElTUDBfREFUXzcJSU9NVVhfUEFEKDB4M0E4LCAweDdDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19HUElPNF8yOAkJSU9NVVhfUEFEKDB4M0E4LCAweDdDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19DU1BJX1JEWQkJSU9NVVhfUEFEKDB4M0E4LCAweDdDLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19VU0JPSDNfVVNCSDJfREFUQV83CUlPTVVYX1BBRCgweDNBOCwgMHg3QywgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUN19fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzAJSU9NVVhfUEFEKDB4M0E4LCAweDdDLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19FTUlfRU1JX0RFQlVHXzEyCUlPTVVYX1BBRCgweDNBOCwgMHg3QywgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUN19fVVNCUEhZMl9WQlVTVkFMSUQJSU9NVVhfUEFEKDB4M0E4LCAweDdDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ4X19JUFVfRElTUDBfREFUXzgJSU9NVVhfUEFEKDB4M0FDLCAweDgwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ4X19HUElPNF8yOQkJSU9NVVhfUEFEKDB4M0FDLCAweDgwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ4X19QV00xX1BXTU8JCUlPTVVYX1BBRCgweDNBQywgMHg4MCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUOF9fV0RPRzFfV0RPR19CCUlPTVVYX1BBRCgweDNBQywgMHg4MCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUOF9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzEJSU9NVVhfUEFEKDB4M0FDLCAweDgwLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ4X19FTUlfRU1JX0RFQlVHXzEzCUlPTVVYX1BBRCgweDNBQywgMHg4MCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUOF9fVVNCUEhZMl9BVkFMSUQJSU9NVVhfUEFEKDB4M0FDLCAweDgwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ5X19JUFVfRElTUDBfREFUXzkJSU9NVVhfUEFEKDB4M0IwLCAweDg0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ5X19HUElPNF8zMAkJSU9NVVhfUEFEKDB4M0IwLCAweDg0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQ5X19QV00yX1BXTU8JCUlPTVVYX1BBRCgweDNCMCwgMHg4NCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUOV9fV0RPRzJfV0RPR19CCUlPTVVYX1BBRCgweDNCMCwgMHg4NCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUOV9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzIJCUlPTVVYX1BBRCgweDNCMCwgMHg4NCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUOV9fRU1JX0VNSV9ERUJVR18xNAlJT01VWF9QQUQoMHgzQjAsIDB4ODQsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDlfX1VTQlBIWTJfVlNUQVRVU18wCUlPTVVYX1BBRCgweDNCMCwgMHg4NCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTBfX0lQVV9ESVNQMF9EQVRfMTAJSU9NVVhfUEFEKDB4M0I0LCAweDg4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxMF9fR1BJTzRfMzEJCUlPTVVYX1BBRCgweDNCNCwgMHg4OCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTBfX1VTQk9IM19VU0JIMl9TVFAJSU9NVVhfUEFEKDB4M0I0LCAweDg4LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxMF9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzMJSU9NVVhfUEFEKDB4M0I0LCAweDg4LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxMF9fRU1JX0VNSV9ERUJVR18xNQlJT01VWF9QQUQoMHgzQjQsIDB4ODgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDEwX19VU0JQSFkyX1ZTVEFUVVNfMQlJT01VWF9QQUQoMHgzQjQsIDB4ODgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDExX19JUFVfRElTUDBfREFUXzExCUlPTVVYX1BBRCgweDNCOCwgMHg4QywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTFfX0dQSU81XzUJCUlPTVVYX1BBRCgweDNCOCwgMHg4QywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTFfX1VTQk9IM19VU0JIMl9OWFQJSU9NVVhfUEFEKDB4M0I4LCAweDhDLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxMV9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzQJSU9NVVhfUEFEKDB4M0I4LCAweDhDLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxMV9fRU1JX0VNSV9ERUJVR18xNglJT01VWF9QQUQoMHgzQjgsIDB4OEMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDExX19VU0JQSFkyX1ZTVEFUVVNfMglJT01VWF9QQUQoMHgzQjgsIDB4OEMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDEyX19JUFVfRElTUDBfREFUXzEyCUlPTVVYX1BBRCgweDNCQywgMHg5MCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTJfX0dQSU81XzYJCUlPTVVYX1BBRCgweDNCQywgMHg5MCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTJfX1VTQk9IM19VU0JIMl9DTEsJSU9NVVhfUEFEKDB4M0JDLCAweDkwLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxMl9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzUJSU9NVVhfUEFEKDB4M0JDLCAweDkwLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxMl9fRU1JX0VNSV9ERUJVR18xNwlJT01VWF9QQUQoMHgzQkMsIDB4OTAsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDEyX19VU0JQSFkyX1ZTVEFUVVNfMwlJT01VWF9QQUQoMHgzQkMsIDB4OTAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDEzX19JUFVfRElTUDBfREFUXzEzCUlPTVVYX1BBRCgweDNDMCwgMHg5NCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTNfX0dQSU81XzcJCUlPTVVYX1BBRCgweDNDMCwgMHg5NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTNfX0FVRE1VWF9BVUQ1X1JYRlMJSU9NVVhfUEFEKDB4M0MwLCAweDk0LCAzLCAweDc1NCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDEzX19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfMAlJT01VWF9QQUQoMHgzQzAsIDB4OTQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDEzX19FTUlfRU1JX0RFQlVHXzE4CUlPTVVYX1BBRCgweDNDMCwgMHg5NCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTNfX1VTQlBIWTJfVlNUQVRVU180CUlPTVVYX1BBRCgweDNDMCwgMHg5NCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTRfX0lQVV9ESVNQMF9EQVRfMTQJSU9NVVhfUEFEKDB4M0M0LCAweDk4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxNF9fR1BJTzVfOAkJSU9NVVhfUEFEKDB4M0M0LCAweDk4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxNF9fQVVETVVYX0FVRDVfUlhDCUlPTVVYX1BBRCgweDNDNCwgMHg5OCwgMywgMHg3NTAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxNF9fU0RNQV9ERUJVR19FVlRfQ0hOX0xJTkVTXzEJSU9NVVhfUEFEKDB4M0M0LCAweDk4LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxNF9fRU1JX0VNSV9ERUJVR18xOQlJT01VWF9QQUQoMHgzQzQsIDB4OTgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE0X19VU0JQSFkyX1ZTVEFUVVNfNQlJT01VWF9QQUQoMHgzQzQsIDB4OTgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE1X19JUFVfRElTUDBfREFUXzE1CUlPTVVYX1BBRCgweDNDOCwgMHg5QywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTVfX0dQSU81XzkJCUlPTVVYX1BBRCgweDNDOCwgMHg5QywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTVfX0VDU1BJMV9TUzEJCUlPTVVYX1BBRCgweDNDOCwgMHg5QywgMiwgMHg3QUMsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxNV9fRUNTUEkyX1NTMQkJSU9NVVhfUEFEKDB4M0M4LCAweDlDLCAzLCAweDdDOCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE1X19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfMglJT01VWF9QQUQoMHgzQzgsIDB4OUMsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE1X19FTUlfRU1JX0RFQlVHXzIwCUlPTVVYX1BBRCgweDNDOCwgMHg5QywgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTVfX1VTQlBIWTJfVlNUQVRVU182CUlPTVVYX1BBRCgweDNDOCwgMHg5QywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTZfX0lQVV9ESVNQMF9EQVRfMTYJSU9NVVhfUEFEKDB4M0NDLCAweEEwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxNl9fR1BJTzVfMTAJCUlPTVVYX1BBRCgweDNDQywgMHhBMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTZfX0VDU1BJMl9NT1NJCQlJT01VWF9QQUQoMHgzQ0MsIDB4QTAsIDIsIDB4N0MwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTZfX0FVRE1VWF9BVUQ1X1RYQwlJT01VWF9QQUQoMHgzQ0MsIDB4QTAsIDMsIDB4NzU4LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTZfX1NETUFfRVhUX0VWRU5UXzAJSU9NVVhfUEFEKDB4M0NDLCAweEEwLCA0LCAweDg2OCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE2X19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfMwlJT01VWF9QQUQoMHgzQ0MsIDB4QTAsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE2X19FTUlfRU1JX0RFQlVHXzIxCUlPTVVYX1BBRCgweDNDQywgMHhBMCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTZfX1VTQlBIWTJfVlNUQVRVU183CUlPTVVYX1BBRCgweDNDQywgMHhBMCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTdfX0lQVV9ESVNQMF9EQVRfMTcJSU9NVVhfUEFEKDB4M0QwLCAweEE0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxN19fR1BJTzVfMTEJCUlPTVVYX1BBRCgweDNEMCwgMHhBNCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTdfX0VDU1BJMl9NSVNPCQlJT01VWF9QQUQoMHgzRDAsIDB4QTQsIDIsIDB4N0JDLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTdfX0FVRE1VWF9BVUQ1X1RYRAlJT01VWF9QQUQoMHgzRDAsIDB4QTQsIDMsIDB4NzRDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMTdfX1NETUFfRVhUX0VWRU5UXzEJSU9NVVhfUEFEKDB4M0QwLCAweEE0LCA0LCAweDg2QywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE3X19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfNAlJT01VWF9QQUQoMHgzRDAsIDB4QTQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE3X19FTUlfRU1JX0RFQlVHXzIyCUlPTVVYX1BBRCgweDNEMCwgMHhBNCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMThfX0lQVV9ESVNQMF9EQVRfMTgJSU9NVVhfUEFEKDB4M0Q0LCAweEE4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxOF9fR1BJTzVfMTIJCUlPTVVYX1BBRCgweDNENCwgMHhBOCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMThfX0VDU1BJMl9TUzAJCUlPTVVYX1BBRCgweDNENCwgMHhBOCwgMiwgMHg3QzQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxOF9fQVVETVVYX0FVRDVfVFhGUwlJT01VWF9QQUQoMHgzRDQsIDB4QTgsIDMsIDB4NzVDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMThfX0FVRE1VWF9BVUQ0X1JYRlMJSU9NVVhfUEFEKDB4M0Q0LCAweEE4LCA0LCAweDczQywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE4X19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfNQlJT01VWF9QQUQoMHgzRDQsIDB4QTgsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE4X19FTUlfRU1JX0RFQlVHXzIzCUlPTVVYX1BBRCgweDNENCwgMHhBOCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMThfX0VNSV9XRUlNX0NTXzIJSU9NVVhfUEFEKDB4M0Q0LCAweEE4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxOV9fSVBVX0RJU1AwX0RBVF8xOQlJT01VWF9QQUQoMHgzRDgsIDB4QUMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE5X19HUElPNV8xMwkJSU9NVVhfUEFEKDB4M0Q4LCAweEFDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxOV9fRUNTUEkyX1NDTEsJCUlPTVVYX1BBRCgweDNEOCwgMHhBQywgMiwgMHg3QjgsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxOV9fQVVETVVYX0FVRDVfUlhECUlPTVVYX1BBRCgweDNEOCwgMHhBQywgMywgMHg3NDgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxOV9fQVVETVVYX0FVRDRfUlhDCUlPTVVYX1BBRCgweDNEOCwgMHhBQywgNCwgMHg3MzgsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxOV9fU0RNQV9ERUJVR19FVlRfQ0hOX0xJTkVTXzYJSU9NVVhfUEFEKDB4M0Q4LCAweEFDLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQxOV9fRU1JX0VNSV9ERUJVR18yNAlJT01VWF9QQUQoMHgzRDgsIDB4QUMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDE5X19FTUlfV0VJTV9DU18zCUlPTVVYX1BBRCgweDNEOCwgMHhBQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjBfX0lQVV9ESVNQMF9EQVRfMjAJSU9NVVhfUEFEKDB4M0RDLCAweEIwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyMF9fR1BJTzVfMTQJCUlPTVVYX1BBRCgweDNEQywgMHhCMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjBfX0VDU1BJMV9TQ0xLCQlJT01VWF9QQUQoMHgzREMsIDB4QjAsIDIsIDB4NzlDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjBfX0FVRE1VWF9BVUQ0X1RYQwlJT01VWF9QQUQoMHgzREMsIDB4QjAsIDMsIDB4NzQwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjBfX1NETUFfREVCVUdfRVZUX0NITl9MSU5FU183CUlPTVVYX1BBRCgweDNEQywgMHhCMCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjBfX0VNSV9FTUlfREVCVUdfMjUJSU9NVVhfUEFEKDB4M0RDLCAweEIwLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyMF9fU0FUQV9QSFlfVERJCQlJT01VWF9QQUQoMHgzREMsIDB4QjAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIxX19JUFVfRElTUDBfREFUXzIxCUlPTVVYX1BBRCgweDNFMCwgMHhCNCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjFfX0dQSU81XzE1CQlJT01VWF9QQUQoMHgzRTAsIDB4QjQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIxX19FQ1NQSTFfTU9TSQkJSU9NVVhfUEFEKDB4M0UwLCAweEI0LCAyLCAweDdBNCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIxX19BVURNVVhfQVVENF9UWEQJSU9NVVhfUEFEKDB4M0UwLCAweEI0LCAzLCAweDczNCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIxX19TRE1BX0RFQlVHX0JVU19ERVZJQ0VfMAlJT01VWF9QQUQoMHgzRTAsIDB4QjQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIxX19FTUlfRU1JX0RFQlVHXzI2CUlPTVVYX1BBRCgweDNFMCwgMHhCNCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjFfX1NBVEFfUEhZX1RETwlJT01VWF9QQUQoMHgzRTAsIDB4QjQsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIyX19JUFVfRElTUDBfREFUXzIyCUlPTVVYX1BBRCgweDNFNCwgMHhCOCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjJfX0dQSU81XzE2CQlJT01VWF9QQUQoMHgzRTQsIDB4QjgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIyX19FQ1NQSTFfTUlTTwkJSU9NVVhfUEFEKDB4M0U0LCAweEI4LCAyLCAweDdBMCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIyX19BVURNVVhfQVVENF9UWEZTCUlPTVVYX1BBRCgweDNFNCwgMHhCOCwgMywgMHg3NDQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyMl9fU0RNQV9ERUJVR19CVVNfREVWSUNFXzEJSU9NVVhfUEFEKDB4M0U0LCAweEI4LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyMl9fRU1JX0VNSV9ERUJVR18yNwlJT01VWF9QQUQoMHgzRTQsIDB4QjgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIyX19TQVRBX1BIWV9UQ0sJSU9NVVhfUEFEKDB4M0U0LCAweEI4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyM19fSVBVX0RJU1AwX0RBVF8yMwlJT01VWF9QQUQoMHgzRTgsIDB4QkMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIzX19HUElPNV8xNwkJSU9NVVhfUEFEKDB4M0U4LCAweEJDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9ESVNQMF9EQVQyM19fRUNTUEkxX1NTMAkJSU9NVVhfUEFEKDB4M0U4LCAweEJDLCAyLCAweDdBOCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIzX19BVURNVVhfQVVENF9SWEQJSU9NVVhfUEFEKDB4M0U4LCAweEJDLCAzLCAweDczMCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIzX19TRE1BX0RFQlVHX0JVU19ERVZJQ0VfMglJT01VWF9QQUQoMHgzRTgsIDB4QkMsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0RJU1AwX0RBVDIzX19FTUlfRU1JX0RFQlVHXzI4CUlPTVVYX1BBRCgweDNFOCwgMHhCQywgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRElTUDBfREFUMjNfX1NBVEFfUEhZX1RNUwlJT01VWF9QQUQoMHgzRTgsIDB4QkMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfUElYQ0xLX19JUFVfQ1NJMF9QSVhDTEsJSU9NVVhfUEFEKDB4M0VDLCAweEMwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX1BJWENMS19fR1BJTzVfMTgJCUlPTVVYX1BBRCgweDNFQywgMHhDMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9QSVhDTEtfX1NETUFfREVCVUdfUENfMAlJT01VWF9QQUQoMHgzRUMsIDB4QzAsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfUElYQ0xLX19FTUlfRU1JX0RFQlVHXzI5CUlPTVVYX1BBRCgweDNFQywgMHhDMCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9NQ0xLX19JUFVfQ1NJMF9IU1lOQwkJSU9NVVhfUEFEKDB4M0YwLCAweEM0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX01DTEtfX0dQSU81XzE5CQlJT01VWF9QQUQoMHgzRjAsIDB4QzQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfTUNMS19fQ0NNX0NTSTBfTUNMSwkJSU9NVVhfUEFEKDB4M0YwLCAweEM0LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX01DTEtfX1NETUFfREVCVUdfUENfMQlJT01VWF9QQUQoMHgzRjAsIDB4QzQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfTUNMS19fRU1JX0VNSV9ERUJVR18zMAlJT01VWF9QQUQoMHgzRjAsIDB4QzQsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfTUNMS19fVFBJVV9UUkNUTAkJSU9NVVhfUEFEKDB4M0YwLCAweEM0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVEFfRU5fX0lQVV9DU0kwX0RBVEFfRU4JSU9NVVhfUEFEKDB4M0Y0LCAweEM4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVEFfRU5fX0dQSU81XzIwCQlJT01VWF9QQUQoMHgzRjQsIDB4QzgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUQV9FTl9fU0RNQV9ERUJVR19QQ18yCUlPTVVYX1BBRCgweDNGNCwgMHhDOCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVRBX0VOX19FTUlfRU1JX0RFQlVHXzMxCUlPTVVYX1BBRCgweDNGNCwgMHhDOCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVRBX0VOX19UUElVX1RSQ0xLCQlJT01VWF9QQUQoMHgzRjQsIDB4QzgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfVlNZTkNfX0lQVV9DU0kwX1ZTWU5DCUlPTVVYX1BBRCgweDNGOCwgMHhDQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9WU1lOQ19fR1BJTzVfMjEJCUlPTVVYX1BBRCgweDNGOCwgMHhDQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9WU1lOQ19fU0RNQV9ERUJVR19QQ18zCUlPTVVYX1BBRCgweDNGOCwgMHhDQywgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9WU1lOQ19fRU1JX0VNSV9ERUJVR18zMglJT01VWF9QQUQoMHgzRjgsIDB4Q0MsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfVlNZTkNfX1RQSVVfVFJBQ0VfMAkJSU9NVVhfUEFEKDB4M0Y4LCAweENDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDRfX0lQVV9DU0kwX0RfNAkJSU9NVVhfUEFEKDB4M0ZDLCAweEQwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDRfX0dQSU81XzIyCQlJT01VWF9QQUQoMHgzRkMsIDB4RDAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUNF9fS1BQX0NPTF81CQlJT01VWF9QQUQoMHgzRkMsIDB4RDAsIDIsIDB4ODQwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ0X19FQ1NQSTFfU0NMSwkJSU9NVVhfUEFEKDB4M0ZDLCAweEQwLCAzLCAweDc5QywgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUNF9fVVNCT0gzX1VTQkgzX1NUUAlJT01VWF9QQUQoMHgzRkMsIDB4RDAsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUNF9fQVVETVVYX0FVRDNfVFhDCUlPTVVYX1BBRCgweDNGQywgMHhEMCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ0X19FTUlfRU1JX0RFQlVHXzMzCUlPTVVYX1BBRCgweDNGQywgMHhEMCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ0X19UUElVX1RSQUNFXzEJCUlPTVVYX1BBRCgweDNGQywgMHhEMCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ1X19JUFVfQ1NJMF9EXzUJCUlPTVVYX1BBRCgweDQwMCwgMHhENCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ1X19HUElPNV8yMwkJSU9NVVhfUEFEKDB4NDAwLCAweEQ0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDVfX0tQUF9ST1dfNQkJSU9NVVhfUEFEKDB4NDAwLCAweEQ0LCAyLCAweDg0QywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUNV9fRUNTUEkxX01PU0kJCUlPTVVYX1BBRCgweDQwMCwgMHhENCwgMywgMHg3QTQsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDVfX1VTQk9IM19VU0JIM19OWFQJSU9NVVhfUEFEKDB4NDAwLCAweEQ0LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDVfX0FVRE1VWF9BVUQzX1RYRAlJT01VWF9QQUQoMHg0MDAsIDB4RDQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUNV9fRU1JX0VNSV9ERUJVR18zNAlJT01VWF9QQUQoMHg0MDAsIDB4RDQsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUNV9fVFBJVV9UUkFDRV8yCQlJT01VWF9QQUQoMHg0MDAsIDB4RDQsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUNl9fSVBVX0NTSTBfRF82CQlJT01VWF9QQUQoMHg0MDQsIDB4RDgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUNl9fR1BJTzVfMjQJCUlPTVVYX1BBRCgweDQwNCwgMHhEOCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ2X19LUFBfQ09MXzYJCUlPTVVYX1BBRCgweDQwNCwgMHhEOCwgMiwgMHg4NDQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDZfX0VDU1BJMV9NSVNPCQlJT01VWF9QQUQoMHg0MDQsIDB4RDgsIDMsIDB4N0EwLCAyLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ2X19VU0JPSDNfVVNCSDNfQ0xLCUlPTVVYX1BBRCgweDQwNCwgMHhEOCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ2X19BVURNVVhfQVVEM19UWEZTCUlPTVVYX1BBRCgweDQwNCwgMHhEOCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ2X19FTUlfRU1JX0RFQlVHXzM1CUlPTVVYX1BBRCgweDQwNCwgMHhEOCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ2X19UUElVX1RSQUNFXzMJCUlPTVVYX1BBRCgweDQwNCwgMHhEOCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ3X19JUFVfQ1NJMF9EXzcJCUlPTVVYX1BBRCgweDQwOCwgMHhEQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ3X19HUElPNV8yNQkJSU9NVVhfUEFEKDB4NDA4LCAweERDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDdfX0tQUF9ST1dfNgkJSU9NVVhfUEFEKDB4NDA4LCAweERDLCAyLCAweDg1MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUN19fRUNTUEkxX1NTMAkJSU9NVVhfUEFEKDB4NDA4LCAweERDLCAzLCAweDdBOCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUN19fVVNCT0gzX1VTQkgzX0RJUglJT01VWF9QQUQoMHg0MDgsIDB4REMsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUN19fQVVETVVYX0FVRDNfUlhECUlPTVVYX1BBRCgweDQwOCwgMHhEQywgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ3X19FTUlfRU1JX0RFQlVHXzM2CUlPTVVYX1BBRCgweDQwOCwgMHhEQywgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ3X19UUElVX1RSQUNFXzQJCUlPTVVYX1BBRCgweDQwOCwgMHhEQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ4X19JUFVfQ1NJMF9EXzgJCUlPTVVYX1BBRCgweDQwQywgMHhFMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ4X19HUElPNV8yNgkJSU9NVVhfUEFEKDB4NDBDLCAweEUwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDhfX0tQUF9DT0xfNwkJSU9NVVhfUEFEKDB4NDBDLCAweEUwLCAyLCAweDg0OCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUOF9fRUNTUEkyX1NDTEsJCUlPTVVYX1BBRCgweDQwQywgMHhFMCwgMywgMHg3QjgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDhfX1VTQk9IM19VU0JIM19PQwlJT01VWF9QQUQoMHg0MEMsIDB4RTAsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUOF9fSTJDMV9TREEJCUlPTVVYX1BBRCgweDQwQywgMHhFMCwgNSB8IElPTVVYX0NPTkZJR19TSU9OLCAweDgxOCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUOF9fRU1JX0VNSV9ERUJVR18zNwlJT01VWF9QQUQoMHg0MEMsIDB4RTAsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUOF9fVFBJVV9UUkFDRV81CQlJT01VWF9QQUQoMHg0MEMsIDB4RTAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUOV9fSVBVX0NTSTBfRF85CQlJT01VWF9QQUQoMHg0MTAsIDB4RTQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUOV9fR1BJTzVfMjcJCUlPTVVYX1BBRCgweDQxMCwgMHhFNCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ5X19LUFBfUk9XXzcJCUlPTVVYX1BBRCgweDQxMCwgMHhFNCwgMiwgMHg4NTQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDlfX0VDU1BJMl9NT1NJCQlJT01VWF9QQUQoMHg0MTAsIDB4RTQsIDMsIDB4N0MwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ5X19VU0JPSDNfVVNCSDNfUFdSCUlPTVVYX1BBRCgweDQxMCwgMHhFNCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ5X19JMkMxX1NDTAkJSU9NVVhfUEFEKDB4NDEwLCAweEU0LCA1IHwgSU9NVVhfQ09ORklHX1NJT04sIDB4ODE0LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ5X19FTUlfRU1JX0RFQlVHXzM4CUlPTVVYX1BBRCgweDQxMCwgMHhFNCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQ5X19UUElVX1RSQUNFXzYJCUlPTVVYX1BBRCgweDQxMCwgMHhFNCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxMF9fSVBVX0NTSTBfRF8xMAkJSU9NVVhfUEFEKDB4NDE0LCAweEU4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEwX19HUElPNV8yOAkJSU9NVVhfUEFEKDB4NDE0LCAweEU4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEwX19VQVJUMV9UWERfTVVYCUlPTVVYX1BBRCgweDQxNCwgMHhFOCwgMiwgMHg4NzgsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEwX19FQ1NQSTJfTUlTTwkJSU9NVVhfUEFEKDB4NDE0LCAweEU4LCAzLCAweDdCQywgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTBfX0FVRE1VWF9BVUQzX1JYQwlJT01VWF9QQUQoMHg0MTQsIDB4RTgsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTBfX1NETUFfREVCVUdfUENfNAlJT01VWF9QQUQoMHg0MTQsIDB4RTgsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTBfX0VNSV9FTUlfREVCVUdfMzkJSU9NVVhfUEFEKDB4NDE0LCAweEU4LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEwX19UUElVX1RSQUNFXzcJCUlPTVVYX1BBRCgweDQxNCwgMHhFOCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxMV9fSVBVX0NTSTBfRF8xMQkJSU9NVVhfUEFEKDB4NDE4LCAweEVDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDExX19HUElPNV8yOQkJSU9NVVhfUEFEKDB4NDE4LCAweEVDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDExX19VQVJUMV9SWERfTVVYCUlPTVVYX1BBRCgweDQxOCwgMHhFQywgMiwgMHg4NzgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDExX19FQ1NQSTJfU1MwCQlJT01VWF9QQUQoMHg0MTgsIDB4RUMsIDMsIDB4N0M0LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxMV9fQVVETVVYX0FVRDNfUlhGUwlJT01VWF9QQUQoMHg0MTgsIDB4RUMsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTFfX1NETUFfREVCVUdfUENfNQlJT01VWF9QQUQoMHg0MTgsIDB4RUMsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTFfX0VNSV9FTUlfREVCVUdfNDAJSU9NVVhfUEFEKDB4NDE4LCAweEVDLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDExX19UUElVX1RSQUNFXzgJCUlPTVVYX1BBRCgweDQxOCwgMHhFQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxMl9fSVBVX0NTSTBfRF8xMgkJSU9NVVhfUEFEKDB4NDFDLCAweEYwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEyX19HUElPNV8zMAkJSU9NVVhfUEFEKDB4NDFDLCAweEYwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEyX19VQVJUNF9UWERfTVVYCUlPTVVYX1BBRCgweDQxQywgMHhGMCwgMiwgMHg4OTAsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEyX19VU0JPSDNfVVNCSDNfREFUQV8wCUlPTVVYX1BBRCgweDQxQywgMHhGMCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxMl9fU0RNQV9ERUJVR19QQ182CUlPTVVYX1BBRCgweDQxQywgMHhGMCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxMl9fRU1JX0VNSV9ERUJVR180MQlJT01VWF9QQUQoMHg0MUMsIDB4RjAsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTJfX1RQSVVfVFJBQ0VfOQkJSU9NVVhfUEFEKDB4NDFDLCAweEYwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEzX19JUFVfQ1NJMF9EXzEzCQlJT01VWF9QQUQoMHg0MjAsIDB4RjQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTNfX0dQSU81XzMxCQlJT01VWF9QQUQoMHg0MjAsIDB4RjQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTNfX1VBUlQ0X1JYRF9NVVgJSU9NVVhfUEFEKDB4NDIwLCAweEY0LCAyLCAweDg5MCwgMywgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTNfX1VTQk9IM19VU0JIM19EQVRBXzEJSU9NVVhfUEFEKDB4NDIwLCAweEY0LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEzX19TRE1BX0RFQlVHX1BDXzcJSU9NVVhfUEFEKDB4NDIwLCAweEY0LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDEzX19FTUlfRU1JX0RFQlVHXzQyCUlPTVVYX1BBRCgweDQyMCwgMHhGNCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxM19fVFBJVV9UUkFDRV8xMAkJSU9NVVhfUEFEKDB4NDIwLCAweEY0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE0X19JUFVfQ1NJMF9EXzE0CQlJT01VWF9QQUQoMHg0MjQsIDB4RjgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTRfX0dQSU82XzAJCUlPTVVYX1BBRCgweDQyNCwgMHhGOCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNF9fVUFSVDVfVFhEX01VWAlJT01VWF9QQUQoMHg0MjQsIDB4RjgsIDIsIDB4ODk4LCAyLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNF9fVVNCT0gzX1VTQkgzX0RBVEFfMglJT01VWF9QQUQoMHg0MjQsIDB4RjgsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTRfX1NETUFfREVCVUdfUENfOAlJT01VWF9QQUQoMHg0MjQsIDB4RjgsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTRfX0VNSV9FTUlfREVCVUdfNDMJSU9NVVhfUEFEKDB4NDI0LCAweEY4LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE0X19UUElVX1RSQUNFXzExCQlJT01VWF9QQUQoMHg0MjQsIDB4RjgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTVfX0lQVV9DU0kwX0RfMTUJCUlPTVVYX1BBRCgweDQyOCwgMHhGQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNV9fR1BJTzZfMQkJSU9NVVhfUEFEKDB4NDI4LCAweEZDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE1X19VQVJUNV9SWERfTVVYCUlPTVVYX1BBRCgweDQyOCwgMHhGQywgMiwgMHg4OTgsIDMsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE1X19VU0JPSDNfVVNCSDNfREFUQV8zCUlPTVVYX1BBRCgweDQyOCwgMHhGQywgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNV9fU0RNQV9ERUJVR19QQ185CUlPTVVYX1BBRCgweDQyOCwgMHhGQywgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNV9fRU1JX0VNSV9ERUJVR180NAlJT01VWF9QQUQoMHg0MjgsIDB4RkMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTVfX1RQSVVfVFJBQ0VfMTIJCUlPTVVYX1BBRCgweDQyOCwgMHhGQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNl9fSVBVX0NTSTBfRF8xNgkJSU9NVVhfUEFEKDB4NDJDLCAweDEwMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNl9fR1BJTzZfMgkJSU9NVVhfUEFEKDB4NDJDLCAweDEwMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNl9fVUFSVDRfUlRTCQlJT01VWF9QQUQoMHg0MkMsIDB4MTAwLCAyLCAweDg4QywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTZfX1VTQk9IM19VU0JIM19EQVRBXzQJSU9NVVhfUEFEKDB4NDJDLCAweDEwMCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxNl9fU0RNQV9ERUJVR19QQ18xMAlJT01VWF9QQUQoMHg0MkMsIDB4MTAwLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE2X19FTUlfRU1JX0RFQlVHXzQ1CUlPTVVYX1BBRCgweDQyQywgMHgxMDAsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTZfX1RQSVVfVFJBQ0VfMTMJCUlPTVVYX1BBRCgweDQyQywgMHgxMDAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTdfX0lQVV9DU0kwX0RfMTcJCUlPTVVYX1BBRCgweDQzMCwgMHgxMDQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTdfX0dQSU82XzMJCUlPTVVYX1BBRCgweDQzMCwgMHgxMDQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTdfX1VBUlQ0X0NUUwkJSU9NVVhfUEFEKDB4NDMwLCAweDEwNCwgMiwgMHg4OEMsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE3X19VU0JPSDNfVVNCSDNfREFUQV81CUlPTVVYX1BBRCgweDQzMCwgMHgxMDQsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTdfX1NETUFfREVCVUdfUENfMTEJSU9NVVhfUEFEKDB4NDMwLCAweDEwNCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxN19fRU1JX0VNSV9ERUJVR180NglJT01VWF9QQUQoMHg0MzAsIDB4MTA0LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE3X19UUElVX1RSQUNFXzE0CQlJT01VWF9QQUQoMHg0MzAsIDB4MTA0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE4X19JUFVfQ1NJMF9EXzE4CQlJT01VWF9QQUQoMHg0MzQsIDB4MTA4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE4X19HUElPNl80CQlJT01VWF9QQUQoMHg0MzQsIDB4MTA4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE4X19VQVJUNV9SVFMJCUlPTVVYX1BBRCgweDQzNCwgMHgxMDgsIDIsIDB4ODk0LCAyLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxOF9fVVNCT0gzX1VTQkgzX0RBVEFfNglJT01VWF9QQUQoMHg0MzQsIDB4MTA4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE4X19TRE1BX0RFQlVHX1BDXzEyCUlPTVVYX1BBRCgweDQzNCwgMHgxMDgsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMThfX0VNSV9FTUlfREVCVUdfNDcJSU9NVVhfUEFEKDB4NDM0LCAweDEwOCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxOF9fVFBJVV9UUkFDRV8xNQkJSU9NVVhfUEFEKDB4NDM0LCAweDEwOCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxOV9fSVBVX0NTSTBfRF8xOQkJSU9NVVhfUEFEKDB4NDM4LCAweDEwQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxOV9fR1BJTzZfNQkJSU9NVVhfUEFEKDB4NDM4LCAweDEwQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxOV9fVUFSVDVfQ1RTCQlJT01VWF9QQUQoMHg0MzgsIDB4MTBDLCAyLCAweDg5NCwgMywgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTlfX1VTQk9IM19VU0JIM19EQVRBXzcJSU9NVVhfUEFEKDB4NDM4LCAweDEwQywgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfQ1NJMF9EQVQxOV9fU0RNQV9ERUJVR19QQ18xMwlJT01VWF9QQUQoMHg0MzgsIDB4MTBDLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9DU0kwX0RBVDE5X19FTUlfRU1JX0RFQlVHXzQ4CUlPTVVYX1BBRCgweDQzOCwgMHgxMEMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0NTSTBfREFUMTlfX1VTQlBIWTJfQklTVE9LCUlPTVVYX1BBRCgweDQzOCwgMHgxMEMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjVfX0VNSV9XRUlNX0FfMjUJCUlPTVVYX1BBRCgweDQ1OCwgMHgxMTAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjVfX0dQSU81XzIJCQlJT01VWF9QQUQoMHg0NTgsIDB4MTEwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTI1X19FQ1NQSTJfUkRZCQlJT01VWF9QQUQoMHg0NTgsIDB4MTEwLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTI1X19JUFVfREkxX1BJTjEyCQlJT01VWF9QQUQoMHg0NTgsIDB4MTEwLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTI1X19DU1BJX1NTMQkJCUlPTVVYX1BBRCgweDQ1OCwgMHgxMTAsIDQsIDB4NzkwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyNV9fSVBVX0RJMF9EMV9DUwkJSU9NVVhfUEFEKDB4NDU4LCAweDExMCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyNV9fVVNCUEhZMV9CSVNUT0sJCUlPTVVYX1BBRCgweDQ1OCwgMHgxMTAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9FQjJfX0VNSV9XRUlNX0VCXzIJCUlPTVVYX1BBRCgweDQ1QywgMHgxMTQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9FQjJfX0dQSU8yXzMwCQkJSU9NVVhfUEFEKDB4NDVDLCAweDExNCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCMl9fQ0NNX0RJMV9FWFRfQ0xLCQlJT01VWF9QQUQoMHg0NUMsIDB4MTE0LCAyLCAweDc2QywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9FQjJfX0lQVV9TRVJfRElTUDFfQ1MJCUlPTVVYX1BBRCgweDQ1QywgMHgxMTQsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9FQjJfX0VDU1BJMV9TUzAJCUlPTVVYX1BBRCgweDQ1QywgMHgxMTQsIDQsIDB4N0E4LCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCMl9fSTJDMl9TQ0wJCQlJT01VWF9QQUQoMHg0NUMsIDB4MTE0LCA1IHwgSU9NVVhfQ09ORklHX1NJT04sIDB4ODFDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QxNl9fRU1JX1dFSU1fRF8xNgkJSU9NVVhfUEFEKDB4NDYwLCAweDExOCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QxNl9fR1BJTzNfMTYJCQlJT01VWF9QQUQoMHg0NjAsIDB4MTE4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE2X19JUFVfREkwX1BJTjUJCUlPTVVYX1BBRCgweDQ2MCwgMHgxMTgsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMTZfX0lQVV9ESVNQQjFfU0VSX0NMSwlJT01VWF9QQUQoMHg0NjAsIDB4MTE4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE2X19FQ1NQSTFfU0NMSwkJSU9NVVhfUEFEKDB4NDYwLCAweDExOCwgNCwgMHg3OUMsIDMsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE2X19JMkMyX1NEQQkJCUlPTVVYX1BBRCgweDQ2MCwgMHgxMTgsIDUsIDB4ODIwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QxN19fRU1JX1dFSU1fRF8xNwkJSU9NVVhfUEFEKDB4NDY0LCAweDExQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QxN19fR1BJTzNfMTcJCQlJT01VWF9QQUQoMHg0NjQsIDB4MTFDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE3X19JUFVfREkwX1BJTjYJCUlPTVVYX1BBRCgweDQ2NCwgMHgxMUMsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMTdfX0lQVV9ESVNQQjFfU0VSX0RJTglJT01VWF9QQUQoMHg0NjQsIDB4MTFDLCAzLCAweDgzMCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMTdfX0VDU1BJMV9NSVNPCQlJT01VWF9QQUQoMHg0NjQsIDB4MTFDLCA0LCAweDdBMCwgMywgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMTdfX0kyQzNfU0NMCQkJSU9NVVhfUEFEKDB4NDY0LCAweDExQywgNSwgMHg4MjQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE4X19FTUlfV0VJTV9EXzE4CQlJT01VWF9QQUQoMHg0NjgsIDB4MTIwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE4X19HUElPM18xOAkJCUlPTVVYX1BBRCgweDQ2OCwgMHgxMjAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMThfX0lQVV9ESTBfUElONwkJSU9NVVhfUEFEKDB4NDY4LCAweDEyMCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QxOF9fSVBVX0RJU1BCMV9TRVJfRElPCUlPTVVYX1BBRCgweDQ2OCwgMHgxMjAsIDMsIDB4ODMwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QxOF9fRUNTUEkxX01PU0kJCUlPTVVYX1BBRCgweDQ2OCwgMHgxMjAsIDQsIDB4N0E0LCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QxOF9fSTJDM19TREEJCQlJT01VWF9QQUQoMHg0NjgsIDB4MTIwLCA1LCAweDgyOCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMThfX0lQVV9ESTFfRDBfQ1MJCUlPTVVYX1BBRCgweDQ2OCwgMHgxMjAsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMTlfX0VNSV9XRUlNX0RfMTkJCUlPTVVYX1BBRCgweDQ2QywgMHgxMjQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMTlfX0dQSU8zXzE5CQkJSU9NVVhfUEFEKDB4NDZDLCAweDEyNCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QxOV9fSVBVX0RJMF9QSU44CQlJT01VWF9QQUQoMHg0NkMsIDB4MTI0LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE5X19JUFVfRElTUEIxX1NFUl9SUwlJT01VWF9QQUQoMHg0NkMsIDB4MTI0LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE5X19FQ1NQSTFfU1MxCQlJT01VWF9QQUQoMHg0NkMsIDB4MTI0LCA0LCAweDdBQywgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMTlfX0VQSVQxX0VQSVRPCQlJT01VWF9QQUQoMHg0NkMsIDB4MTI0LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDE5X19VQVJUMV9DVFMJCQlJT01VWF9QQUQoMHg0NkMsIDB4MTI0LCA2LCAweDg3NCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMTlfX1VTQk9IM19VU0JIMl9PQwkJSU9NVVhfUEFEKDB4NDZDLCAweDEyNCwgNywgMHg4QTQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIwX19FTUlfV0VJTV9EXzIwCQlJT01VWF9QQUQoMHg0NzAsIDB4MTI4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIwX19HUElPM18yMAkJCUlPTVVYX1BBRCgweDQ3MCwgMHgxMjgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjBfX0lQVV9ESTBfUElOMTYJCUlPTVVYX1BBRCgweDQ3MCwgMHgxMjgsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjBfX0lQVV9TRVJfRElTUDBfQ1MJCUlPTVVYX1BBRCgweDQ3MCwgMHgxMjgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjBfX0NTUElfU1MwCQkJSU9NVVhfUEFEKDB4NDcwLCAweDEyOCwgNCwgMHg3OEMsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIwX19FUElUMl9FUElUTwkJSU9NVVhfUEFEKDB4NDcwLCAweDEyOCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyMF9fVUFSVDFfUlRTCQkJSU9NVVhfUEFEKDB4NDcwLCAweDEyOCwgNiwgMHg4NzQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIwX19VU0JPSDNfVVNCSDJfUFdSCUlPTVVYX1BBRCgweDQ3MCwgMHgxMjgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjFfX0VNSV9XRUlNX0RfMjEJCUlPTVVYX1BBRCgweDQ3NCwgMHgxMkMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjFfX0dQSU8zXzIxCQkJSU9NVVhfUEFEKDB4NDc0LCAweDEyQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyMV9fSVBVX0RJMF9QSU4xNwkJSU9NVVhfUEFEKDB4NDc0LCAweDEyQywgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyMV9fSVBVX0RJU1BCMF9TRVJfQ0xLCUlPTVVYX1BBRCgweDQ3NCwgMHgxMkMsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjFfX0NTUElfU0NMSwkJCUlPTVVYX1BBRCgweDQ3NCwgMHgxMkMsIDQsIDB4NzgwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyMV9fSTJDMV9TQ0wJCQlJT01VWF9QQUQoMHg0NzQsIDB4MTJDLCA1LCAweDgxNCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjFfX1VTQk9IM19VU0JPVEdfT0MJSU9NVVhfUEFEKDB4NDc0LCAweDEyQywgNiwgMHg4OUMsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIyX19FTUlfV0VJTV9EXzIyCQlJT01VWF9QQUQoMHg0NzgsIDB4MTMwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIyX19HUElPM18yMgkJCUlPTVVYX1BBRCgweDQ3OCwgMHgxMzAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjJfX0lQVV9ESTBfUElOMQkJSU9NVVhfUEFEKDB4NDc4LCAweDEzMCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyMl9fSVBVX0RJU1BCMF9TRVJfRElOCUlPTVVYX1BBRCgweDQ3OCwgMHgxMzAsIDMsIDB4ODJDLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyMl9fQ1NQSV9NSVNPCQkJSU9NVVhfUEFEKDB4NDc4LCAweDEzMCwgNCwgMHg3ODQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIyX19VU0JPSDNfVVNCT1RHX1BXUglJT01VWF9QQUQoMHg0NzgsIDB4MTMwLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIzX19FTUlfV0VJTV9EXzIzCQlJT01VWF9QQUQoMHg0N0MsIDB4MTM0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIzX19HUElPM18yMwkJCUlPTVVYX1BBRCgweDQ3QywgMHgxMzQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjNfX1VBUlQzX0NUUwkJCUlPTVVYX1BBRCgweDQ3QywgMHgxMzQsIDIsIDB4ODg0LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyM19fVUFSVDFfRENECQlJT01VWF9QQUQoMHg0N0MsIDB4MTM0LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIzX19JUFVfREkwX0QwX0NTCQlJT01VWF9QQUQoMHg0N0MsIDB4MTM0LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDIzX19JUFVfREkxX1BJTjIJCUlPTVVYX1BBRCgweDQ3QywgMHgxMzQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjNfX0lQVV9DU0kxX0RBVEFfRU4JCUlPTVVYX1BBRCgweDQ3QywgMHgxMzQsIDYsIDB4ODM0LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyM19fSVBVX0RJMV9QSU4xNAkJSU9NVVhfUEFEKDB4NDdDLCAweDEzNCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCM19fRU1JX1dFSU1fRUJfMwkJSU9NVVhfUEFEKDB4NDgwLCAweDEzOCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCM19fR1BJTzJfMzEJCQlJT01VWF9QQUQoMHg0ODAsIDB4MTM4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIzX19VQVJUM19SVFMJCQlJT01VWF9QQUQoMHg0ODAsIDB4MTM4LCAyLCAweDg4NCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9FQjNfX1VBUlQxX1JJCQkJSU9NVVhfUEFEKDB4NDgwLCAweDEzOCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCM19fSVBVX0RJMV9QSU4zCQlJT01VWF9QQUQoMHg0ODAsIDB4MTM4LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIzX19JUFVfQ1NJMV9IU1lOQwkJSU9NVVhfUEFEKDB4NDgwLCAweDEzOCwgNiwgMHg4MzgsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIzX19JUFVfREkxX1BJTjE2CQlJT01VWF9QQUQoMHg0ODAsIDB4MTM4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI0X19FTUlfV0VJTV9EXzI0CQlJT01VWF9QQUQoMHg0ODQsIDB4MTNDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI0X19HUElPM18yNAkJCUlPTVVYX1BBRCgweDQ4NCwgMHgxM0MsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjRfX1VBUlQzX1RYRF9NVVgJCUlPTVVYX1BBRCgweDQ4NCwgMHgxM0MsIDIsIDB4ODg4LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyNF9fRUNTUEkxX1NTMgkJSU9NVVhfUEFEKDB4NDg0LCAweDEzQywgMywgMHg3QjAsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI0X19DU1BJX1NTMgkJCUlPTVVYX1BBRCgweDQ4NCwgMHgxM0MsIDQsIDB4Nzk0LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyNF9fQVVETVVYX0FVRDVfUlhGUwlJT01VWF9QQUQoMHg0ODQsIDB4MTNDLCA1LCAweDc1NCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjRfX0VDU1BJMl9TUzIJCUlPTVVYX1BBRCgweDQ4NCwgMHgxM0MsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjRfX1VBUlQxX0RUUgkJSU9NVVhfUEFEKDB4NDg0LCAweDEzQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyNV9fRU1JX1dFSU1fRF8yNQkJSU9NVVhfUEFEKDB4NDg4LCAweDE0MCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyNV9fR1BJTzNfMjUJCQlJT01VWF9QQUQoMHg0ODgsIDB4MTQwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI1X19VQVJUM19SWERfTVVYCQlJT01VWF9QQUQoMHg0ODgsIDB4MTQwLCAyLCAweDg4OCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjVfX0VDU1BJMV9TUzMJCUlPTVVYX1BBRCgweDQ4OCwgMHgxNDAsIDMsIDB4N0I0LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyNV9fQ1NQSV9TUzMJCQlJT01VWF9QQUQoMHg0ODgsIDB4MTQwLCA0LCAweDc5OCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjVfX0FVRE1VWF9BVUQ1X1JYQwkJSU9NVVhfUEFEKDB4NDg4LCAweDE0MCwgNSwgMHg3NTAsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI1X19FQ1NQSTJfU1MzCQlJT01VWF9QQUQoMHg0ODgsIDB4MTQwLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI1X19VQVJUMV9EU1IJCUlPTVVYX1BBRCgweDQ4OCwgMHgxNDAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjZfX0VNSV9XRUlNX0RfMjYJCUlPTVVYX1BBRCgweDQ4QywgMHgxNDQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjZfX0dQSU8zXzI2CQkJSU9NVVhfUEFEKDB4NDhDLCAweDE0NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyNl9fVUFSVDJfVFhEX01VWAkJSU9NVVhfUEFEKDB4NDhDLCAweDE0NCwgMiwgMHg4ODAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI2X19GSVJJX1JYRAkJCUlPTVVYX1BBRCgweDQ4QywgMHgxNDQsIDMsIDB4ODBDLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyNl9fSVBVX0NTSTBfRF8xCQlJT01VWF9QQUQoMHg0OEMsIDB4MTQ0LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI2X19JUFVfREkxX1BJTjExCQlJT01VWF9QQUQoMHg0OEMsIDB4MTQ0LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI2X19JUFVfU0lTR18yCQlJT01VWF9QQUQoMHg0OEMsIDB4MTQ0LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI2X19JUFVfRElTUDFfREFUXzIyCQlJT01VWF9QQUQoMHg0OEMsIDB4MTQ0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI3X19FTUlfV0VJTV9EXzI3CQlJT01VWF9QQUQoMHg0OTAsIDB4MTQ4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI3X19HUElPM18yNwkJCUlPTVVYX1BBRCgweDQ5MCwgMHgxNDgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjdfX1VBUlQyX1JYRF9NVVgJCUlPTVVYX1BBRCgweDQ5MCwgMHgxNDgsIDIsIDB4ODgwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyN19fRklSSV9UWEQJCQlJT01VWF9QQUQoMHg0OTAsIDB4MTQ4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI3X19JUFVfQ1NJMF9EXzAJCUlPTVVYX1BBRCgweDQ5MCwgMHgxNDgsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjdfX0lQVV9ESTFfUElOMTMJCUlPTVVYX1BBRCgweDQ5MCwgMHgxNDgsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjdfX0lQVV9TSVNHXzMJCUlPTVVYX1BBRCgweDQ5MCwgMHgxNDgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjdfX0lQVV9ESVNQMV9EQVRfMjMJCUlPTVVYX1BBRCgweDQ5MCwgMHgxNDgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjhfX0VNSV9XRUlNX0RfMjgJCUlPTVVYX1BBRCgweDQ5NCwgMHgxNEMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjhfX0dQSU8zXzI4CQkJSU9NVVhfUEFEKDB4NDk0LCAweDE0QywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyOF9fVUFSVDJfQ1RTCQkJSU9NVVhfUEFEKDB4NDk0LCAweDE0QywgMiwgMHg4N0MsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI4X19JUFVfRElTUEIwX1NFUl9ESU8JSU9NVVhfUEFEKDB4NDk0LCAweDE0QywgMywgMHg4MkMsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI4X19DU1BJX01PU0kJCQlJT01VWF9QQUQoMHg0OTQsIDB4MTRDLCA0LCAweDc4OCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjhfX0kyQzFfU0RBCQkJSU9NVVhfUEFEKDB4NDk0LCAweDE0QywgNSwgMHg4MTgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI4X19JUFVfRVhUX1RSSUcJCUlPTVVYX1BBRCgweDQ5NCwgMHgxNEMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjhfX0lQVV9ESTBfUElOMTMJCUlPTVVYX1BBRCgweDQ5NCwgMHgxNEMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjlfX0VNSV9XRUlNX0RfMjkJCUlPTVVYX1BBRCgweDQ5OCwgMHgxNTAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMjlfX0dQSU8zXzI5CQkJSU9NVVhfUEFEKDB4NDk4LCAweDE1MCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyOV9fVUFSVDJfUlRTCQkJSU9NVVhfUEFEKDB4NDk4LCAweDE1MCwgMiwgMHg4N0MsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI5X19JUFVfRElTUEIwX1NFUl9SUwlJT01VWF9QQUQoMHg0OTgsIDB4MTUwLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDI5X19DU1BJX1NTMAkJCUlPTVVYX1BBRCgweDQ5OCwgMHgxNTAsIDQsIDB4NzhDLCAyLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyOV9fSVBVX0RJMV9QSU4xNQkJSU9NVVhfUEFEKDB4NDk4LCAweDE1MCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyOV9fSVBVX0NTSTFfVlNZTkMJCUlPTVVYX1BBRCgweDQ5OCwgMHgxNTAsIDYsIDB4ODNDLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QyOV9fSVBVX0RJMF9QSU4xNAkJSU9NVVhfUEFEKDB4NDk4LCAweDE1MCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QzMF9fRU1JX1dFSU1fRF8zMAkJSU9NVVhfUEFEKDB4NDlDLCAweDE1NCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QzMF9fR1BJTzNfMzAJCQlJT01VWF9QQUQoMHg0OUMsIDB4MTU0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDMwX19VQVJUM19DVFMJCQlJT01VWF9QQUQoMHg0OUMsIDB4MTU0LCAyLCAweDg4NCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMzBfX0lQVV9DU0kwX0RfMwkJSU9NVVhfUEFEKDB4NDlDLCAweDE1NCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QzMF9fSVBVX0RJMF9QSU4xMQkJSU9NVVhfUEFEKDB4NDlDLCAweDE1NCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QzMF9fSVBVX0RJU1AxX0RBVF8yMQkJSU9NVVhfUEFEKDB4NDlDLCAweDE1NCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QzMF9fVVNCT0gzX1VTQkgxX09DCQlJT01VWF9QQUQoMHg0OUMsIDB4MTU0LCA2LCAweDhBMCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMzBfX1VTQk9IM19VU0JIMl9PQwkJSU9NVVhfUEFEKDB4NDlDLCAweDE1NCwgNywgMHg4QTQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDMxX19FTUlfV0VJTV9EXzMxCQlJT01VWF9QQUQoMHg0QTAsIDB4MTU4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDMxX19HUElPM18zMQkJCUlPTVVYX1BBRCgweDRBMCwgMHgxNTgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMzFfX1VBUlQzX1JUUwkJCUlPTVVYX1BBRCgweDRBMCwgMHgxNTgsIDIsIDB4ODg0LCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0QzMV9fSVBVX0NTSTBfRF8yCQlJT01VWF9QQUQoMHg0QTAsIDB4MTU4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDMxX19JUFVfREkwX1BJTjEyCQlJT01VWF9QQUQoMHg0QTAsIDB4MTU4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDMxX19JUFVfRElTUDFfREFUXzIwCQlJT01VWF9QQUQoMHg0QTAsIDB4MTU4LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRDMxX19VU0JPSDNfVVNCSDFfUFdSCUlPTVVYX1BBRCgweDRBMCwgMHgxNTgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EMzFfX1VTQk9IM19VU0JIMl9QV1IJSU9NVVhfUEFEKDB4NEEwLCAweDE1OCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyNF9fRU1JX1dFSU1fQV8yNAkJSU9NVVhfUEFEKDB4NEE4LCAweDE1QywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyNF9fR1BJTzVfNAkJCUlPTVVYX1BBRCgweDRBOCwgMHgxNUMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjRfX0lQVV9ESVNQMV9EQVRfMTkJCUlPTVVYX1BBRCgweDRBOCwgMHgxNUMsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjRfX0lQVV9DU0kxX0RfMTkJCUlPTVVYX1BBRCgweDRBOCwgMHgxNUMsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjRfX0lQVV9TSVNHXzIJCUlPTVVYX1BBRCgweDRBOCwgMHgxNUMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjRfX1VTQlBIWTJfQlZBTElECQlJT01VWF9QQUQoMHg0QTgsIDB4MTVDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTIzX19FTUlfV0VJTV9BXzIzCQlJT01VWF9QQUQoMHg0QUMsIDB4MTYwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTIzX19HUElPNl82CQkJSU9NVVhfUEFEKDB4NEFDLCAweDE2MCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyM19fSVBVX0RJU1AxX0RBVF8xOAkJSU9NVVhfUEFEKDB4NEFDLCAweDE2MCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyM19fSVBVX0NTSTFfRF8xOAkJSU9NVVhfUEFEKDB4NEFDLCAweDE2MCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyM19fSVBVX1NJU0dfMwkJSU9NVVhfUEFEKDB4NEFDLCAweDE2MCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyM19fVVNCUEhZMl9FTkRTRVNTSU9OCUlPTVVYX1BBRCgweDRBQywgMHgxNjAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjJfX0VNSV9XRUlNX0FfMjIJCUlPTVVYX1BBRCgweDRCMCwgMHgxNjQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjJfX0dQSU8yXzE2CQkJSU9NVVhfUEFEKDB4NEIwLCAweDE2NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyMl9fSVBVX0RJU1AxX0RBVF8xNwkJSU9NVVhfUEFEKDB4NEIwLCAweDE2NCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyMl9fSVBVX0NTSTFfRF8xNwkJSU9NVVhfUEFEKDB4NEIwLCAweDE2NCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyMl9fU1JDX0JUX0NGRzFfNwkJSU9NVVhfUEFEKDB4NEIwLCAweDE2NCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyMV9fRU1JX1dFSU1fQV8yMQkJSU9NVVhfUEFEKDB4NEI0LCAweDE2OCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0EyMV9fR1BJTzJfMTcJCQlJT01VWF9QQUQoMHg0QjQsIDB4MTY4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTIxX19JUFVfRElTUDFfREFUXzE2CQlJT01VWF9QQUQoMHg0QjQsIDB4MTY4LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTIxX19JUFVfQ1NJMV9EXzE2CQlJT01VWF9QQUQoMHg0QjQsIDB4MTY4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTIxX19TUkNfQlRfQ0ZHMV82CQlJT01VWF9QQUQoMHg0QjQsIDB4MTY4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTIwX19FTUlfV0VJTV9BXzIwCQlJT01VWF9QQUQoMHg0QjgsIDB4MTZDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTIwX19HUElPMl8xOAkJCUlPTVVYX1BBRCgweDRCOCwgMHgxNkMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjBfX0lQVV9ESVNQMV9EQVRfMTUJCUlPTVVYX1BBRCgweDRCOCwgMHgxNkMsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjBfX0lQVV9DU0kxX0RfMTUJCUlPTVVYX1BBRCgweDRCOCwgMHgxNkMsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMjBfX1NSQ19CVF9DRkcxXzUJCUlPTVVYX1BBRCgweDRCOCwgMHgxNkMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMTlfX0VNSV9XRUlNX0FfMTkJCUlPTVVYX1BBRCgweDRCQywgMHgxNzAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMTlfX0dQSU8yXzE5CQkJSU9NVVhfUEFEKDB4NEJDLCAweDE3MCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0ExOV9fSVBVX0RJU1AxX0RBVF8xNAkJSU9NVVhfUEFEKDB4NEJDLCAweDE3MCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0ExOV9fSVBVX0NTSTFfRF8xNAkJSU9NVVhfUEFEKDB4NEJDLCAweDE3MCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0ExOV9fU1JDX0JUX0NGRzFfNAkJSU9NVVhfUEFEKDB4NEJDLCAweDE3MCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0ExOF9fRU1JX1dFSU1fQV8xOAkJSU9NVVhfUEFEKDB4NEMwLCAweDE3NCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0ExOF9fR1BJTzJfMjAJCQlJT01VWF9QQUQoMHg0QzAsIDB4MTc0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTE4X19JUFVfRElTUDFfREFUXzEzCQlJT01VWF9QQUQoMHg0QzAsIDB4MTc0LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTE4X19JUFVfQ1NJMV9EXzEzCQlJT01VWF9QQUQoMHg0QzAsIDB4MTc0LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTE4X19TUkNfQlRfQ0ZHMV8zCQlJT01VWF9QQUQoMHg0QzAsIDB4MTc0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTE3X19FTUlfV0VJTV9BXzE3CQlJT01VWF9QQUQoMHg0QzQsIDB4MTc4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTE3X19HUElPMl8yMQkJCUlPTVVYX1BBRCgweDRDNCwgMHgxNzgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMTdfX0lQVV9ESVNQMV9EQVRfMTIJCUlPTVVYX1BBRCgweDRDNCwgMHgxNzgsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMTdfX0lQVV9DU0kxX0RfMTIJCUlPTVVYX1BBRCgweDRDNCwgMHgxNzgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMTdfX1NSQ19CVF9DRkcxXzIJCUlPTVVYX1BBRCgweDRDNCwgMHgxNzgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMTZfX0VNSV9XRUlNX0FfMTYJCUlPTVVYX1BBRCgweDRDOCwgMHgxN0MsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9BMTZfX0dQSU8yXzIyCQkJSU9NVVhfUEFEKDB4NEM4LCAweDE3QywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0ExNl9fSVBVX0RJMV9ESVNQX0NMSwkJSU9NVVhfUEFEKDB4NEM4LCAweDE3QywgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0ExNl9fSVBVX0NTSTFfUElYQ0xLCQlJT01VWF9QQUQoMHg0QzgsIDB4MTdDLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQTE2X19TUkNfQlRfQ0ZHMV8xCQlJT01VWF9QQUQoMHg0QzgsIDB4MTdDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQ1MwX19FTUlfV0VJTV9DU18wCQlJT01VWF9QQUQoMHg0Q0MsIDB4MTgwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQ1MwX19HUElPMl8yMwkJCUlPTVVYX1BBRCgweDRDQywgMHgxODAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9DUzBfX0VDU1BJMl9TQ0xLCQlJT01VWF9QQUQoMHg0Q0MsIDB4MTgwLCAyLCAweDdCOCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9DUzBfX0lQVV9ESTFfUElONQkJSU9NVVhfUEFEKDB4NENDLCAweDE4MCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0NTMV9fRU1JX1dFSU1fQ1NfMQkJSU9NVVhfUEFEKDB4NEQwLCAweDE4NCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0NTMV9fR1BJTzJfMjQJCQlJT01VWF9QQUQoMHg0RDAsIDB4MTg0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQ1MxX19FQ1NQSTJfTU9TSQkJSU9NVVhfUEFEKDB4NEQwLCAweDE4NCwgMiwgMHg3QzAsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fQ1MxX19JUFVfREkxX1BJTjYJCUlPTVVYX1BBRCgweDREMCwgMHgxODQsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9PRV9fRU1JX1dFSU1fT0UJCUlPTVVYX1BBRCgweDRENCwgMHgxODgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9PRV9fR1BJTzJfMjUJCQlJT01VWF9QQUQoMHg0RDQsIDB4MTg4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fT0VfX0VDU1BJMl9NSVNPCQlJT01VWF9QQUQoMHg0RDQsIDB4MTg4LCAyLCAweDdCQywgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9PRV9fSVBVX0RJMV9QSU43CQlJT01VWF9QQUQoMHg0RDQsIDB4MTg4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fT0VfX1VTQlBIWTJfSURESUcJCUlPTVVYX1BBRCgweDRENCwgMHgxODgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9SV19fRU1JX1dFSU1fUlcJCUlPTVVYX1BBRCgweDREOCwgMHgxOEMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9SV19fR1BJTzJfMjYJCQlJT01VWF9QQUQoMHg0RDgsIDB4MThDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fUldfX0VDU1BJMl9TUzAJCQlJT01VWF9QQUQoMHg0RDgsIDB4MThDLCAyLCAweDdDNCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9SV19fSVBVX0RJMV9QSU44CQlJT01VWF9QQUQoMHg0RDgsIDB4MThDLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fUldfX1VTQlBIWTJfSE9TVERJU0NPTk5FQ1QJSU9NVVhfUEFEKDB4NEQ4LCAweDE4QywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0xCQV9fRU1JX1dFSU1fTEJBCQlJT01VWF9QQUQoMHg0REMsIDB4MTkwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fTEJBX19HUElPMl8yNwkJCUlPTVVYX1BBRCgweDREQywgMHgxOTAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9MQkFfX0VDU1BJMl9TUzEJCUlPTVVYX1BBRCgweDREQywgMHgxOTAsIDIsIDB4N0M4LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0xCQV9fSVBVX0RJMV9QSU4xNwkJSU9NVVhfUEFEKDB4NERDLCAweDE5MCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0xCQV9fU1JDX0JUX0NGRzFfMAkJSU9NVVhfUEFEKDB4NERDLCAweDE5MCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCMF9fRU1JX1dFSU1fRUJfMAkJSU9NVVhfUEFEKDB4NEU0LCAweDE5NCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCMF9fR1BJTzJfMjgJCQlJT01VWF9QQUQoMHg0RTQsIDB4MTk0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIwX19JUFVfRElTUDFfREFUXzExCQlJT01VWF9QQUQoMHg0RTQsIDB4MTk0LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIwX19JUFVfQ1NJMV9EXzExCQlJT01VWF9QQUQoMHg0RTQsIDB4MTk0LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIwX19HUENfUE1JQ19SRFkJCUlPTVVYX1BBRCgweDRFNCwgMHgxOTQsIDUsIDB4ODEwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCMF9fU1JDX0JUX0NGRzJfNwkJSU9NVVhfUEFEKDB4NEU0LCAweDE5NCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCMV9fRU1JX1dFSU1fRUJfMQkJSU9NVVhfUEFEKDB4NEU4LCAweDE5OCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0VCMV9fR1BJTzJfMjkJCQlJT01VWF9QQUQoMHg0RTgsIDB4MTk4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIxX19JUFVfRElTUDFfREFUXzEwCQlJT01VWF9QQUQoMHg0RTgsIDB4MTk4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIxX19JUFVfQ1NJMV9EXzEwCQlJT01VWF9QQUQoMHg0RTgsIDB4MTk4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fRUIxX19TUkNfQlRfQ0ZHMl82CQlJT01VWF9QQUQoMHg0RTgsIDB4MTk4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREEwX19FTUlfTkFORF9XRUlNX0RBXzAJSU9NVVhfUEFEKDB4NEVDLCAweDE5QywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMF9fR1BJTzNfMAkJCUlPTVVYX1BBRCgweDRFQywgMHgxOUMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTBfX0lQVV9ESVNQMV9EQVRfOQkJSU9NVVhfUEFEKDB4NEVDLCAweDE5QywgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMF9fSVBVX0NTSTFfRF85CQlJT01VWF9QQUQoMHg0RUMsIDB4MTlDLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREEwX19TUkNfQlRfQ0ZHMl81CQlJT01VWF9QQUQoMHg0RUMsIDB4MTlDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREExX19FTUlfTkFORF9XRUlNX0RBXzEJSU9NVVhfUEFEKDB4NEYwLCAweDFBMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMV9fR1BJTzNfMQkJCUlPTVVYX1BBRCgweDRGMCwgMHgxQTAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTFfX0lQVV9ESVNQMV9EQVRfOAkJSU9NVVhfUEFEKDB4NEYwLCAweDFBMCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMV9fSVBVX0NTSTFfRF84CQlJT01VWF9QQUQoMHg0RjAsIDB4MUEwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREExX19TUkNfQlRfQ0ZHMl80CQlJT01VWF9QQUQoMHg0RjAsIDB4MUEwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREEyX19FTUlfTkFORF9XRUlNX0RBXzIJSU9NVVhfUEFEKDB4NEY0LCAweDFBNCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMl9fR1BJTzNfMgkJCUlPTVVYX1BBRCgweDRGNCwgMHgxQTQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTJfX0lQVV9ESVNQMV9EQVRfNwkJSU9NVVhfUEFEKDB4NEY0LCAweDFBNCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMl9fSVBVX0NTSTFfRF83CQlJT01VWF9QQUQoMHg0RjQsIDB4MUE0LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREEyX19TUkNfQlRfQ0ZHMl8zCQlJT01VWF9QQUQoMHg0RjQsIDB4MUE0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREEzX19FTUlfTkFORF9XRUlNX0RBXzMJSU9NVVhfUEFEKDB4NEY4LCAweDFBOCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBM19fR1BJTzNfMwkJCUlPTVVYX1BBRCgweDRGOCwgMHgxQTgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTNfX0lQVV9ESVNQMV9EQVRfNgkJSU9NVVhfUEFEKDB4NEY4LCAweDFBOCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBM19fSVBVX0NTSTFfRF82CQlJT01VWF9QQUQoMHg0RjgsIDB4MUE4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREEzX19TUkNfQlRfQ0ZHMl8yCQlJT01VWF9QQUQoMHg0RjgsIDB4MUE4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREE0X19FTUlfTkFORF9XRUlNX0RBXzQJSU9NVVhfUEFEKDB4NEZDLCAweDFBQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBNF9fR1BJTzNfNAkJCUlPTVVYX1BBRCgweDRGQywgMHgxQUMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTRfX0lQVV9ESVNQMV9EQVRfNQkJSU9NVVhfUEFEKDB4NEZDLCAweDFBQywgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBNF9fSVBVX0NTSTFfRF81CQlJT01VWF9QQUQoMHg0RkMsIDB4MUFDLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREE0X19TUkNfQlRfQ0ZHM183CQlJT01VWF9QQUQoMHg0RkMsIDB4MUFDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREE1X19FTUlfTkFORF9XRUlNX0RBXzUJSU9NVVhfUEFEKDB4NTAwLCAweDFCMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBNV9fR1BJTzNfNQkJCUlPTVVYX1BBRCgweDUwMCwgMHgxQjAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTVfX0lQVV9ESVNQMV9EQVRfNAkJSU9NVVhfUEFEKDB4NTAwLCAweDFCMCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBNV9fSVBVX0NTSTFfRF80CQlJT01VWF9QQUQoMHg1MDAsIDB4MUIwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREE1X19TUkNfQlRfQ0ZHM182CQlJT01VWF9QQUQoMHg1MDAsIDB4MUIwLCAxNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBNl9fRU1JX05BTkRfV0VJTV9EQV82CUlPTVVYX1BBRCgweDUwNCwgMHgxQjQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTZfX0dQSU8zXzYJCQlJT01VWF9QQUQoMHg1MDQsIDB4MUI0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREE2X19JUFVfRElTUDFfREFUXzMJCUlPTVVYX1BBRCgweDUwNCwgMHgxQjQsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTZfX0lQVV9DU0kxX0RfMwkJSU9NVVhfUEFEKDB4NTA0LCAweDFCNCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBNl9fU1JDX0JUX0NGRzNfNQkJSU9NVVhfUEFEKDB4NTA0LCAweDFCNCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBN19fRU1JX05BTkRfV0VJTV9EQV83CUlPTVVYX1BBRCgweDUwOCwgMHgxQjgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTdfX0dQSU8zXzcJCQlJT01VWF9QQUQoMHg1MDgsIDB4MUI4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREE3X19JUFVfRElTUDFfREFUXzIJCUlPTVVYX1BBRCgweDUwOCwgMHgxQjgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTdfX0lQVV9DU0kxX0RfMgkJSU9NVVhfUEFEKDB4NTA4LCAweDFCOCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBN19fU1JDX0JUX0NGRzNfNAkJSU9NVVhfUEFEKDB4NTA4LCAweDFCOCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBOF9fRU1JX05BTkRfV0VJTV9EQV84CUlPTVVYX1BBRCgweDUwQywgMHgxQkMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQThfX0dQSU8zXzgJCQlJT01VWF9QQUQoMHg1MEMsIDB4MUJDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREE4X19JUFVfRElTUDFfREFUXzEJCUlPTVVYX1BBRCgweDUwQywgMHgxQkMsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQThfX0lQVV9DU0kxX0RfMQkJSU9NVVhfUEFEKDB4NTBDLCAweDFCQywgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBOF9fU1JDX0JUX0NGRzNfMwkJSU9NVVhfUEFEKDB4NTBDLCAweDFCQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBOV9fRU1JX05BTkRfV0VJTV9EQV85CUlPTVVYX1BBRCgweDUxMCwgMHgxQzAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTlfX0dQSU8zXzkJCQlJT01VWF9QQUQoMHg1MTAsIDB4MUMwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREE5X19JUFVfRElTUDFfREFUXzAJCUlPTVVYX1BBRCgweDUxMCwgMHgxQzAsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTlfX0lQVV9DU0kxX0RfMAkJSU9NVVhfUEFEKDB4NTEwLCAweDFDMCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBOV9fU1JDX0JUX0NGRzNfMgkJSU9NVVhfUEFEKDB4NTEwLCAweDFDMCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTBfX0VNSV9OQU5EX1dFSU1fREFfMTAJSU9NVVhfUEFEKDB4NTE0LCAweDFDNCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTBfX0dQSU8zXzEwCQkJSU9NVVhfUEFEKDB4NTE0LCAweDFDNCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTBfX0lQVV9ESTFfUElOMTUJCUlPTVVYX1BBRCgweDUxNCwgMHgxQzQsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTEwX19JUFVfQ1NJMV9EQVRBX0VOCUlPTVVYX1BBRCgweDUxNCwgMHgxQzQsIDQsIDB4ODM0LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTBfX1NSQ19CVF9DRkczXzEJCUlPTVVYX1BBRCgweDUxNCwgMHgxQzQsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTExX19FTUlfTkFORF9XRUlNX0RBXzExCUlPTVVYX1BBRCgweDUxOCwgMHgxQzgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTExX19HUElPM18xMQkJCUlPTVVYX1BBRCgweDUxOCwgMHgxQzgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTExX19JUFVfREkxX1BJTjIJCUlPTVVYX1BBRCgweDUxOCwgMHgxQzgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTExX19JUFVfQ1NJMV9IU1lOQwkJSU9NVVhfUEFEKDB4NTE4LCAweDFDOCwgNCwgMHg4MzgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREExMl9fRU1JX05BTkRfV0VJTV9EQV8xMglJT01VWF9QQUQoMHg1MUMsIDB4MUNDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREExMl9fR1BJTzNfMTIJCQlJT01VWF9QQUQoMHg1MUMsIDB4MUNDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREExMl9fSVBVX0RJMV9QSU4zCQlJT01VWF9QQUQoMHg1MUMsIDB4MUNDLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9FSU1fREExMl9fSVBVX0NTSTFfVlNZTkMJCUlPTVVYX1BBRCgweDUxQywgMHgxQ0MsIDQsIDB4ODNDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTNfX0VNSV9OQU5EX1dFSU1fREFfMTMJSU9NVVhfUEFEKDB4NTIwLCAweDFEMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTNfX0dQSU8zXzEzCQkJSU9NVVhfUEFEKDB4NTIwLCAweDFEMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTNfX0lQVV9ESTFfRDBfQ1MJCUlPTVVYX1BBRCgweDUyMCwgMHgxRDAsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTEzX19DQ01fREkxX0VYVF9DTEsJCUlPTVVYX1BBRCgweDUyMCwgMHgxRDAsIDQsIDB4NzZDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTRfX0VNSV9OQU5EX1dFSU1fREFfMTQJSU9NVVhfUEFEKDB4NTI0LCAweDFENCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTRfX0dQSU8zXzE0CQkJSU9NVVhfUEFEKDB4NTI0LCAweDFENCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX0RBMTRfX0lQVV9ESTFfRDFfQ1MJCUlPTVVYX1BBRCgweDUyNCwgMHgxRDQsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTE0X19DQ01fREkwX0VYVF9DTEsJCUlPTVVYX1BBRCgweDUyNCwgMHgxRDQsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTE1X19FTUlfTkFORF9XRUlNX0RBXzE1CUlPTVVYX1BBRCgweDUyOCwgMHgxRDgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTE1X19HUElPM18xNQkJCUlPTVVYX1BBRCgweDUyOCwgMHgxRDgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTE1X19JUFVfREkxX1BJTjEJCUlPTVVYX1BBRCgweDUyOCwgMHgxRDgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9EQTE1X19JUFVfREkxX1BJTjQJCUlPTVVYX1BBRCgweDUyOCwgMHgxRDgsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX1dFX0JfX0VNSV9OQU5ERl9XRV9CCUlPTVVYX1BBRCgweDUyQywgMHgxREMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX1dFX0JfX0dQSU82XzEyCQlJT01VWF9QQUQoMHg1MkMsIDB4MURDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9SRV9CX19FTUlfTkFOREZfUkVfQglJT01VWF9QQUQoMHg1MzAsIDB4MUUwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9SRV9CX19HUElPNl8xMwkJSU9NVVhfUEFEKDB4NTMwLCAweDFFMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX1dBSVRfX0VNSV9XRUlNX1dBSVQJCUlPTVVYX1BBRCgweDUzNCwgMHgxRTQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0VJTV9XQUlUX19HUElPNV8wCQkJSU9NVVhfUEFEKDB4NTM0LCAweDFFNCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRUlNX1dBSVRfX0VNSV9XRUlNX0RUQUNLX0IJSU9NVVhfUEFEKDB4NTM0LCAweDFFNCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTFZEUzFfVFgzX1BfX0dQSU82XzIyCQlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDFFQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTFZEUzFfVFgzX1BfX0xEQl9MVkRTMV9UWDMJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgxRUMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0xWRFMxX1RYMl9QX19HUElPNl8yNAkJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgxRjAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0xWRFMxX1RYMl9QX19MREJfTFZEUzFfVFgyCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MUYwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9MVkRTMV9DTEtfUF9fR1BJTzZfMjYJCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MUY0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9MVkRTMV9DTEtfUF9fTERCX0xWRFMxX0NMSwlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDFGNCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTFZEUzFfVFgxX1BfX0dQSU82XzI4CQlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDFGOCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTFZEUzFfVFgxX1BfX0xEQl9MVkRTMV9UWDEJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgxRjgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0xWRFMxX1RYMF9QX19HUElPNl8zMAkJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgxRkMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0xWRFMxX1RYMF9QX19MREJfTFZEUzFfVFgwCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MUZDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9MVkRTMF9UWDNfUF9fR1BJTzdfMjIJCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MjAwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9MVkRTMF9UWDNfUF9fTERCX0xWRFMwX1RYMwlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDIwMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTFZEUzBfQ0xLX1BfX0dQSU83XzI0CQlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDIwNCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTFZEUzBfQ0xLX1BfX0xEQl9MVkRTMF9DTEsJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgyMDQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0xWRFMwX1RYMl9QX19HUElPN18yNgkJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgyMDgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0xWRFMwX1RYMl9QX19MREJfTFZEUzBfVFgyCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MjA4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9MVkRTMF9UWDFfUF9fR1BJTzdfMjgJCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MjBDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9MVkRTMF9UWDFfUF9fTERCX0xWRFMwX1RYMQlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDIwQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTFZEUzBfVFgwX1BfX0dQSU83XzMwCQlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDIxMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTFZEUzBfVFgwX1BfX0xEQl9MVkRTMF9UWDAJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgyMTAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMTBfX0dQSU80XzAJCQlJT01VWF9QQUQoMHg1NDAsIDB4MjE0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzEwX19PU0MzMmtfMzJLX09VVAkJSU9NVVhfUEFEKDB4NTQwLCAweDIxNCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xMV9fR1BJTzRfMQkJCUlPTVVYX1BBRCgweDU0NCwgMHgyMTgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMTJfX0dQSU80XzIJCQlJT01VWF9QQUQoMHg1NDgsIDB4MjFDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzEzX19HUElPNF8zCQkJSU9NVVhfUEFEKDB4NTRDLCAweDIyMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xNF9fR1BJTzRfNAkJCUlPTVVYX1BBRCgweDU1MCwgMHgyMjQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0NMRV9fRU1JX05BTkRGX0NMRQkJSU9NVVhfUEFEKDB4NUEwLCAweDIyOCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQ0xFX19HUElPNl83CQkJSU9NVVhfUEFEKDB4NUEwLCAweDIyOCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQ0xFX19VU0JQSFkxX1ZTVEFUVVNfMAlJT01VWF9QQUQoMHg1QTAsIDB4MjI4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9BTEVfX0VNSV9OQU5ERl9BTEUJCUlPTVVYX1BBRCgweDVBNCwgMHgyMkMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0FMRV9fR1BJTzZfOAkJSU9NVVhfUEFEKDB4NUE0LCAweDIyQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQUxFX19VU0JQSFkxX1ZTVEFUVVNfMQlJT01VWF9QQUQoMHg1QTQsIDB4MjJDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9XUF9CX19FTUlfTkFOREZfV1BfQglJT01VWF9QQUQoMHg1QTgsIDB4MjMwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9XUF9CX19HUElPNl85CQlJT01VWF9QQUQoMHg1QTgsIDB4MjMwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9XUF9CX19VU0JQSFkxX1ZTVEFUVVNfMglJT01VWF9QQUQoMHg1QTgsIDB4MjMwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9SQjBfX0VNSV9OQU5ERl9SQl8wCUlPTVVYX1BBRCgweDVBQywgMHgyMzQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX1JCMF9fR1BJTzZfMTAJCUlPTVVYX1BBRCgweDVBQywgMHgyMzQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX1JCMF9fVVNCUEhZMV9WU1RBVFVTXzMJSU9NVVhfUEFEKDB4NUFDLCAweDIzNCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQ1MwX19FTUlfTkFOREZfQ1NfMAlJT01VWF9QQUQoMHg1QjAsIDB4MjM4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzBfX0dQSU82XzExCQlJT01VWF9QQUQoMHg1QjAsIDB4MjM4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzBfX1VTQlBIWTFfVlNUQVRVU180CUlPTVVYX1BBRCgweDVCMCwgMHgyMzgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0NTMV9fRU1JX05BTkRGX0NTXzEJSU9NVVhfUEFEKDB4NUI0LCAweDIzQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQ1MxX19HUElPNl8xNAkJSU9NVVhfUEFEKDB4NUI0LCAweDIzQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQ1MxX19NTEJfTUxCQ0xLCQlJT01VWF9QQUQoMHg1QjQsIDB4MjNDLCA2LCAweDg1OCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0NTMV9fVVNCUEhZMV9WU1RBVFVTXzUJSU9NVVhfUEFEKDB4NUI0LCAweDIzQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQ1MyX19FTUlfTkFOREZfQ1NfMglJT01VWF9QQUQoMHg1QjgsIDB4MjQwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzJfX0dQSU82XzE1CQlJT01VWF9QQUQoMHg1QjgsIDB4MjQwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzJfX0lQVV9TSVNHXzAJCUlPTVVYX1BBRCgweDVCOCwgMHgyNDAsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0NTMl9fRVNBSTFfVFgwCQlJT01VWF9QQUQoMHg1QjgsIDB4MjQwLCAzLCAweDdFNCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0NTMl9fRU1JX1dFSU1fQ1JFCQlJT01VWF9QQUQoMHg1QjgsIDB4MjQwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzJfX0NDTV9DU0kwX01DTEsJCUlPTVVYX1BBRCgweDVCOCwgMHgyNDAsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0NTMl9fTUxCX01MQlNJRwkJSU9NVVhfUEFEKDB4NUI4LCAweDI0MCwgNiwgMHg4NjAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzJfX1VTQlBIWTFfVlNUQVRVU182CUlPTVVYX1BBRCgweDVCOCwgMHgyNDAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0NTM19fRU1JX05BTkRGX0NTXzMJSU9NVVhfUEFEKDB4NUJDLCAweDI0NCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQ1MzX19HUElPNl8xNgkJSU9NVVhfUEFEKDB4NUJDLCAweDI0NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfTkFOREZfQ1MzX19JUFVfU0lTR18xCQlJT01VWF9QQUQoMHg1QkMsIDB4MjQ0LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzNfX0VTQUkxX1RYMQkJSU9NVVhfUEFEKDB4NUJDLCAweDI0NCwgMywgMHg3RTgsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzNfX0VNSV9XRUlNX0FfMjYJCUlPTVVYX1BBRCgweDVCQywgMHgyNDQsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX05BTkRGX0NTM19fTUxCX01MQkRBVAkJSU9NVVhfUEFEKDB4NUJDLCAweDI0NCwgNiwgMHg4NUMsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9OQU5ERl9DUzNfX1VTQlBIWTFfVlNUQVRVU183CUlPTVVYX1BBRCgweDVCQywgMHgyNDQsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19NRElPX19GRUNfTURJTwkJSU9NVVhfUEFEKDB4NUM0LCAweDI0OCwgMCwgMHg4MDQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfTURJT19fR1BJTzFfMjIJCQlJT01VWF9QQUQoMHg1QzQsIDB4MjQ4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfTURJT19fRVNBSTFfU0NLUgkJSU9NVVhfUEFEKDB4NUM0LCAweDI0OCwgMiwgMHg3REMsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfTURJT19fRkVDX0NPTAkJCUlPTVVYX1BBRCgweDVDNCwgMHgyNDgsIDMsIDB4ODAwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX01ESU9fX1JUQ19DRV9SVENfUFMyCQlJT01VWF9QQUQoMHg1QzQsIDB4MjQ4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfTURJT19fU0RNQV9ERUJVR19CVVNfREVWSUNFXzMJSU9NVVhfUEFEKDB4NUM0LCAweDI0OCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX01ESU9fX0VNSV9FTUlfREVCVUdfNDkJSU9NVVhfUEFEKDB4NUM0LCAweDI0OCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1JFRl9DTEtfX0ZFQ19UWF9DTEsJCUlPTVVYX1BBRCgweDVDOCwgMHgyNEMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19SRUZfQ0xLX19HUElPMV8yMwkJSU9NVVhfUEFEKDB4NUM4LCAweDI0QywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1JFRl9DTEtfX0VTQUkxX0ZTUgkJSU9NVVhfUEFEKDB4NUM4LCAweDI0QywgMiwgMHg3Q0MsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfUkVGX0NMS19fU0RNQV9ERUJVR19CVVNfREVWSUNFXzQJSU9NVVhfUEFEKDB4NUM4LCAweDI0QywgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1JFRl9DTEtfX0VNSV9FTUlfREVCVUdfNTAJSU9NVVhfUEFEKDB4NUM4LCAweDI0QywgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1JYX0VSX19GRUNfUlhfRVIJCUlPTVVYX1BBRCgweDVDQywgMHgyNTAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19SWF9FUl9fR1BJTzFfMjQJCUlPTVVYX1BBRCgweDVDQywgMHgyNTAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19SWF9FUl9fRVNBSTFfSENLUgkJSU9NVVhfUEFEKDB4NUNDLCAweDI1MCwgMiwgMHg3RDQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfUlhfRVJfX0ZFQ19SWF9DTEsJCUlPTVVYX1BBRCgweDVDQywgMHgyNTAsIDMsIDB4ODA4LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1JYX0VSX19SVENfQ0VfUlRDX1BTMwkJSU9NVVhfUEFEKDB4NUNDLCAweDI1MCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX0NSU19EVl9fRkVDX1JYX0RWCQlJT01VWF9QQUQoMHg1RDAsIDB4MjU0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfQ1JTX0RWX19HUElPMV8yNQkJSU9NVVhfUEFEKDB4NUQwLCAweDI1NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX0NSU19EVl9fRVNBSTFfU0NLVAkJSU9NVVhfUEFEKDB4NUQwLCAweDI1NCwgMiwgMHg3RTAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfUlhEMV9fRkVDX1JEQVRBXzEJCUlPTVVYX1BBRCgweDVENCwgMHgyNTgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19SWEQxX19HUElPMV8yNgkJCUlPTVVYX1BBRCgweDVENCwgMHgyNTgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19SWEQxX19FU0FJMV9GU1QJCUlPTVVYX1BBRCgweDVENCwgMHgyNTgsIDIsIDB4N0QwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1JYRDFfX01MQl9NTEJTSUcJCUlPTVVYX1BBRCgweDVENCwgMHgyNTgsIDMsIDB4ODYwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1JYRDFfX1JUQ19DRV9SVENfUFMxCQlJT01VWF9QQUQoMHg1RDQsIDB4MjU4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfUlhEMF9fRkVDX1JEQVRBXzAJCUlPTVVYX1BBRCgweDVEOCwgMHgyNUMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19SWEQwX19HUElPMV8yNwkJCUlPTVVYX1BBRCgweDVEOCwgMHgyNUMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19SWEQwX19FU0FJMV9IQ0tUCQlJT01VWF9QQUQoMHg1RDgsIDB4MjVDLCAyLCAweDdEOCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19SWEQwX19PU0MzMmtfMzJLX09VVAkJSU9NVVhfUEFEKDB4NUQ4LCAweDI1QywgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4JCUlPTVVYX1BBRCgweDVEQywgMHgyNjAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19UWF9FTl9fR1BJTzFfMjgJCUlPTVVYX1BBRCgweDVEQywgMHgyNjAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19UWF9FTl9fRVNBSTFfVFgzX1JYMgkJSU9NVVhfUEFEKDB4NURDLCAweDI2MCwgMiwgMHg3RjAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfVFhEMV9fRkVDX1REQVRBXzEJCUlPTVVYX1BBRCgweDVFMCwgMHgyNjQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19UWEQxX19HUElPMV8yOQkJCUlPTVVYX1BBRCgweDVFMCwgMHgyNjQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19UWEQxX19FU0FJMV9UWDJfUlgzCQlJT01VWF9QQUQoMHg1RTAsIDB4MjY0LCAyLCAweDdFQywgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19UWEQxX19NTEJfTUxCQ0xLCQlJT01VWF9QQUQoMHg1RTAsIDB4MjY0LCAzLCAweDg1OCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19UWEQxX19SVENfQ0VfUlRDX1BSU0NfQ0xLCUlPTVVYX1BBRCgweDVFMCwgMHgyNjQsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19UWEQwX19GRUNfVERBVEFfMAkJSU9NVVhfUEFEKDB4NUU0LCAweDI2OCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1RYRDBfX0dQSU8xXzMwCQkJSU9NVVhfUEFEKDB4NUU0LCAweDI2OCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1RYRDBfX0VTQUkxX1RYNF9SWDEJCUlPTVVYX1BBRCgweDVFNCwgMHgyNjgsIDIsIDB4N0Y0LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX1RYRDBfX1VTQlBIWTJfREFUQU9VVF8wCUlPTVVYX1BBRCgweDVFNCwgMHgyNjgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19NRENfX0ZFQ19NREMJCQlJT01VWF9QQUQoMHg1RTgsIDB4MjZDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfTURDX19HUElPMV8zMQkJCUlPTVVYX1BBRCgweDVFOCwgMHgyNkMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19NRENfX0VTQUkxX1RYNV9SWDAJCUlPTVVYX1BBRCgweDVFOCwgMHgyNkMsIDIsIDB4N0Y4LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfRkVDX01EQ19fTUxCX01MQkRBVAkJSU9NVVhfUEFEKDB4NUU4LCAweDI2QywgMywgMHg4NUMsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9GRUNfTURDX19SVENfQ0VfUlRDX0FMQVJNMV9UUklHCUlPTVVYX1BBRCgweDVFOCwgMHgyNkMsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0ZFQ19NRENfX1VTQlBIWTJfREFUQU9VVF8xCUlPTVVYX1BBRCgweDVFOCwgMHgyNkMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfRElPV19fUEFUQV9ESU9XCQlJT01VWF9QQUQoMHg1RjAsIDB4MjcwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RJT1dfX0dQSU82XzE3CQlJT01VWF9QQUQoMHg1RjAsIDB4MjcwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RJT1dfX1VBUlQxX1RYRF9NVVgJSU9NVVhfUEFEKDB4NUYwLCAweDI3MCwgMywgMHg4NzgsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RJT1dfX1VTQlBIWTJfREFUQU9VVF8yCUlPTVVYX1BBRCgweDVGMCwgMHgyNzAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfRE1BQ0tfX1BBVEFfRE1BQ0sJCUlPTVVYX1BBRCgweDVGNCwgMHgyNzQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfRE1BQ0tfX0dQSU82XzE4CQlJT01VWF9QQUQoMHg1RjQsIDB4Mjc0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RNQUNLX19VQVJUMV9SWERfTVVYCUlPTVVYX1BBRCgweDVGNCwgMHgyNzQsIDMsIDB4ODc4LCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9ETUFDS19fVVNCUEhZMl9EQVRBT1VUXzMJSU9NVVhfUEFEKDB4NUY0LCAweDI3NCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9ETUFSUV9fUEFUQV9ETUFSUQkJSU9NVVhfUEFEKDB4NUY4LCAweDI3OCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9ETUFSUV9fR1BJTzdfMAkJSU9NVVhfUEFEKDB4NUY4LCAweDI3OCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9ETUFSUV9fVUFSVDJfVFhEX01VWAlJT01VWF9QQUQoMHg1RjgsIDB4Mjc4LCAzLCAweDg4MCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfRE1BUlFfX0NDTV9DQ01fT1VUXzAJSU9NVVhfUEFEKDB4NUY4LCAweDI3OCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9ETUFSUV9fVVNCUEhZMl9EQVRBT1VUXzQJSU9NVVhfUEFEKDB4NUY4LCAweDI3OCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9CVUZGRVJfRU5fX1BBVEFfQlVGRkVSX0VOCUlPTVVYX1BBRCgweDVGQywgMHgyN0MsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19HUElPN18xCQlJT01VWF9QQUQoMHg1RkMsIDB4MjdDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0JVRkZFUl9FTl9fVUFSVDJfUlhEX01VWAlJT01VWF9QQUQoMHg1RkMsIDB4MjdDLCAzLCAweDg4MCwgMywgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19DQ01fQ0NNX09VVF8xCUlPTVVYX1BBRCgweDVGQywgMHgyN0MsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19VU0JQSFkyX0RBVEFPVVRfNQlJT01VWF9QQUQoMHg1RkMsIDB4MjdDLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0lOVFJRX19QQVRBX0lOVFJRCQlJT01VWF9QQUQoMHg2MDAsIDB4MjgwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0lOVFJRX19HUElPN18yCQlJT01VWF9QQUQoMHg2MDAsIDB4MjgwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0lOVFJRX19VQVJUMl9DVFMJCUlPTVVYX1BBRCgweDYwMCwgMHgyODAsIDMsIDB4ODdDLCAyLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9JTlRSUV9fQ0FOMV9UWENBTgkJSU9NVVhfUEFEKDB4NjAwLCAweDI4MCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9JTlRSUV9fQ0NNX0NDTV9PVVRfMglJT01VWF9QQUQoMHg2MDAsIDB4MjgwLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0lOVFJRX19VU0JQSFkyX0RBVEFPVVRfNglJT01VWF9QQUQoMHg2MDAsIDB4MjgwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RJT1JfX1BBVEFfRElPUgkJSU9NVVhfUEFEKDB4NjA0LCAweDI4NCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9ESU9SX19HUElPN18zCQkJSU9NVVhfUEFEKDB4NjA0LCAweDI4NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9ESU9SX19VQVJUMl9SVFMJCUlPTVVYX1BBRCgweDYwNCwgMHgyODQsIDMsIDB4ODdDLCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9ESU9SX19DQU4xX1JYQ0FOCQlJT01VWF9QQUQoMHg2MDQsIDB4Mjg0LCA0LCAweDc2MCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfRElPUl9fVVNCUEhZMl9EQVRBT1VUXzcJSU9NVVhfUEFEKDB4NjA0LCAweDI4NCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9SRVNFVF9CX19QQVRBX1BBVEFfUkVTRVRfQglJT01VWF9QQUQoMHg2MDgsIDB4Mjg4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX1JFU0VUX0JfX0dQSU83XzQJCUlPTVVYX1BBRCgweDYwOCwgMHgyODgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfUkVTRVRfQl9fRVNESEMzX0NNRAkJSU9NVVhfUEFEKDB4NjA4LCAweDI4OCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9SRVNFVF9CX19VQVJUMV9DVFMJCUlPTVVYX1BBRCgweDYwOCwgMHgyODgsIDMsIDB4ODc0LCAyLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9SRVNFVF9CX19DQU4yX1RYQ0FOCQlJT01VWF9QQUQoMHg2MDgsIDB4Mjg4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX1JFU0VUX0JfX1VTQlBIWTFfREFUQU9VVF8wCUlPTVVYX1BBRCgweDYwOCwgMHgyODgsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfSU9SRFlfX1BBVEFfSU9SRFkJCUlPTVVYX1BBRCgweDYwQywgMHgyOEMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfSU9SRFlfX0dQSU83XzUJCUlPTVVYX1BBRCgweDYwQywgMHgyOEMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfSU9SRFlfX0VTREhDM19DTEsJCUlPTVVYX1BBRCgweDYwQywgMHgyOEMsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfSU9SRFlfX1VBUlQxX1JUUwkJSU9NVVhfUEFEKDB4NjBDLCAweDI4QywgMywgMHg4NzQsIDMsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0lPUkRZX19DQU4yX1JYQ0FOCQlJT01VWF9QQUQoMHg2MEMsIDB4MjhDLCA0LCAweDc2NCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfSU9SRFlfX1VTQlBIWTFfREFUQU9VVF8xCUlPTVVYX1BBRCgweDYwQywgMHgyOEMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFfMF9fUEFUQV9EQV8wCQlJT01VWF9QQUQoMHg2MTAsIDB4MjkwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBXzBfX0dQSU83XzYJCUlPTVVYX1BBRCgweDYxMCwgMHgyOTAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFfMF9fRVNESEMzX1JTVAkJSU9NVVhfUEFEKDB4NjEwLCAweDI5MCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQV8wX19PV0lSRV9MSU5FCQlJT01VWF9QQUQoMHg2MTAsIDB4MjkwLCA0LCAweDg2NCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFfMF9fVVNCUEhZMV9EQVRBT1VUXzIJSU9NVVhfUEFEKDB4NjEwLCAweDI5MCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQV8xX19QQVRBX0RBXzEJCUlPTVVYX1BBRCgweDYxNCwgMHgyOTQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFfMV9fR1BJTzdfNwkJSU9NVVhfUEFEKDB4NjE0LCAweDI5NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQV8xX19FU0RIQzRfQ01ECQlJT01VWF9QQUQoMHg2MTQsIDB4Mjk0LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBXzFfX1VBUlQzX0NUUwkJSU9NVVhfUEFEKDB4NjE0LCAweDI5NCwgNCwgMHg4ODQsIDQsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBXzFfX1VTQlBIWTFfREFUQU9VVF8zCUlPTVVYX1BBRCgweDYxNCwgMHgyOTQsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFfMl9fUEFUQV9EQV8yCQlJT01VWF9QQUQoMHg2MTgsIDB4Mjk4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBXzJfX0dQSU83XzgJCUlPTVVYX1BBRCgweDYxOCwgMHgyOTgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFfMl9fRVNESEM0X0NMSwkJSU9NVVhfUEFEKDB4NjE4LCAweDI5OCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQV8yX19VQVJUM19SVFMJCUlPTVVYX1BBRCgweDYxOCwgMHgyOTgsIDQsIDB4ODg0LCA1LCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQV8yX19VU0JQSFkxX0RBVEFPVVRfNAlJT01VWF9QQUQoMHg2MTgsIDB4Mjk4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0NTXzBfX1BBVEFfQ1NfMAkJSU9NVVhfUEFEKDB4NjFDLCAweDI5QywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9DU18wX19HUElPN185CQkJSU9NVVhfUEFEKDB4NjFDLCAweDI5QywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9DU18wX19VQVJUM19UWERfTVVYCQlJT01VWF9QQUQoMHg2MUMsIDB4MjlDLCA0LCAweDg4OCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfQ1NfMF9fVVNCUEhZMV9EQVRBT1VUXzUJSU9NVVhfUEFEKDB4NjFDLCAweDI5QywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9DU18xX19QQVRBX0NTXzEJCUlPTVVYX1BBRCgweDYyMCwgMHgyQTAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfQ1NfMV9fR1BJTzdfMTAJCUlPTVVYX1BBRCgweDYyMCwgMHgyQTAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfQ1NfMV9fVUFSVDNfUlhEX01VWAkJSU9NVVhfUEFEKDB4NjIwLCAweDJBMCwgNCwgMHg4ODgsIDMsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0NTXzFfX1VTQlBIWTFfREFUQU9VVF82CUlPTVVYX1BBRCgweDYyMCwgMHgyQTAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTBfX1BBVEFfREFUQV8wCQlJT01VWF9QQUQoMHg2MjgsIDB4MkE0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEEwX19HUElPMl8wCQlJT01VWF9QQUQoMHg2MjgsIDB4MkE0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEEwX19FTUlfTkFOREZfRF8wCUlPTVVYX1BBRCgweDYyOCwgMHgyQTQsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTBfX0VTREhDM19EQVQ0CQlJT01VWF9QQUQoMHg2MjgsIDB4MkE0LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEEwX19HUFUzZF9HUFVfREVCVUdfT1VUXzAJSU9NVVhfUEFEKDB4NjI4LCAweDJBNCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMF9fSVBVX0RJQUdfQlVTXzAJSU9NVVhfUEFEKDB4NjI4LCAweDJBNCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMF9fVVNCUEhZMV9EQVRBT1VUXzcJSU9NVVhfUEFEKDB4NjI4LCAweDJBNCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMV9fUEFUQV9EQVRBXzEJCUlPTVVYX1BBRCgweDYyQywgMHgyQTgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTFfX0dQSU8yXzEJCUlPTVVYX1BBRCgweDYyQywgMHgyQTgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTFfX0VNSV9OQU5ERl9EXzEJSU9NVVhfUEFEKDB4NjJDLCAweDJBOCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMV9fRVNESEMzX0RBVDUJCUlPTVVYX1BBRCgweDYyQywgMHgyQTgsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTFfX0dQVTNkX0dQVV9ERUJVR19PVVRfMQlJT01VWF9QQUQoMHg2MkMsIDB4MkE4LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExX19JUFVfRElBR19CVVNfMQlJT01VWF9QQUQoMHg2MkMsIDB4MkE4LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEEyX19QQVRBX0RBVEFfMgkJSU9NVVhfUEFEKDB4NjMwLCAweDJBQywgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMl9fR1BJTzJfMgkJSU9NVVhfUEFEKDB4NjMwLCAweDJBQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMl9fRU1JX05BTkRGX0RfMglJT01VWF9QQUQoMHg2MzAsIDB4MkFDLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEEyX19FU0RIQzNfREFUNgkJSU9NVVhfUEFEKDB4NjMwLCAweDJBQywgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMl9fR1BVM2RfR1BVX0RFQlVHX09VVF8yCUlPTVVYX1BBRCgweDYzMCwgMHgyQUMsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTJfX0lQVV9ESUFHX0JVU18yCUlPTVVYX1BBRCgweDYzMCwgMHgyQUMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTNfX1BBVEFfREFUQV8zCQlJT01VWF9QQUQoMHg2MzQsIDB4MkIwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEEzX19HUElPMl8zCQlJT01VWF9QQUQoMHg2MzQsIDB4MkIwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEEzX19FTUlfTkFOREZfRF8zCUlPTVVYX1BBRCgweDYzNCwgMHgyQjAsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTNfX0VTREhDM19EQVQ3CQlJT01VWF9QQUQoMHg2MzQsIDB4MkIwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEEzX19HUFUzZF9HUFVfREVCVUdfT1VUXzMJSU9NVVhfUEFEKDB4NjM0LCAweDJCMCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBM19fSVBVX0RJQUdfQlVTXzMJSU9NVVhfUEFEKDB4NjM0LCAweDJCMCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBNF9fUEFUQV9EQVRBXzQJCUlPTVVYX1BBRCgweDYzOCwgMHgyQjQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTRfX0dQSU8yXzQJCUlPTVVYX1BBRCgweDYzOCwgMHgyQjQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTRfX0VNSV9OQU5ERl9EXzQJSU9NVVhfUEFEKDB4NjM4LCAweDJCNCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBNF9fRVNESEM0X0RBVDQJCUlPTVVYX1BBRCgweDYzOCwgMHgyQjQsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTRfX0dQVTNkX0dQVV9ERUJVR19PVVRfNAlJT01VWF9QQUQoMHg2MzgsIDB4MkI0LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE0X19JUFVfRElBR19CVVNfNAlJT01VWF9QQUQoMHg2MzgsIDB4MkI0LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE1X19QQVRBX0RBVEFfNQlJT01VWF9QQUQoMHg2M0MsIDB4MkI4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE1X19HUElPMl81CQlJT01VWF9QQUQoMHg2M0MsIDB4MkI4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE1X19FTUlfTkFOREZfRF81CUlPTVVYX1BBRCgweDYzQywgMHgyQjgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTVfX0VTREhDNF9EQVQ1CQlJT01VWF9QQUQoMHg2M0MsIDB4MkI4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE1X19HUFUzZF9HUFVfREVCVUdfT1VUXzUJSU9NVVhfUEFEKDB4NjNDLCAweDJCOCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBNV9fSVBVX0RJQUdfQlVTXzUJSU9NVVhfUEFEKDB4NjNDLCAweDJCOCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBNl9fUEFUQV9EQVRBXzYJSU9NVVhfUEFEKDB4NjQwLCAweDJCQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBNl9fR1BJTzJfNgkJSU9NVVhfUEFEKDB4NjQwLCAweDJCQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBNl9fRU1JX05BTkRGX0RfNglJT01VWF9QQUQoMHg2NDAsIDB4MkJDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE2X19FU0RIQzRfREFUNgkJSU9NVVhfUEFEKDB4NjQwLCAweDJCQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBNl9fR1BVM2RfR1BVX0RFQlVHX09VVF82CUlPTVVYX1BBRCgweDY0MCwgMHgyQkMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTZfX0lQVV9ESUFHX0JVU182CUlPTVVYX1BBRCgweDY0MCwgMHgyQkMsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTdfX1BBVEFfREFUQV83CQlJT01VWF9QQUQoMHg2NDQsIDB4MkMwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE3X19HUElPMl83CQlJT01VWF9QQUQoMHg2NDQsIDB4MkMwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE3X19FTUlfTkFOREZfRF83CUlPTVVYX1BBRCgweDY0NCwgMHgyQzAsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTdfX0VTREhDNF9EQVQ3CQlJT01VWF9QQUQoMHg2NDQsIDB4MkMwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE3X19HUFUzZF9HUFVfREVCVUdfT1VUXzcJSU9NVVhfUEFEKDB4NjQ0LCAweDJDMCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBN19fSVBVX0RJQUdfQlVTXzcJSU9NVVhfUEFEKDB4NjQ0LCAweDJDMCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBOF9fUEFUQV9EQVRBXzgJCUlPTVVYX1BBRCgweDY0OCwgMHgyQzQsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQThfX0dQSU8yXzgJCUlPTVVYX1BBRCgweDY0OCwgMHgyQzQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQThfX0VTREhDMV9EQVQ0CQlJT01VWF9QQUQoMHg2NDgsIDB4MkM0LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE4X19FTUlfTkFOREZfRF84CUlPTVVYX1BBRCgweDY0OCwgMHgyQzQsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQThfX0VTREhDM19EQVQwCQlJT01VWF9QQUQoMHg2NDgsIDB4MkM0LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE4X19HUFUzZF9HUFVfREVCVUdfT1VUXzgJSU9NVVhfUEFEKDB4NjQ4LCAweDJDNCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBOF9fSVBVX0RJQUdfQlVTXzgJSU9NVVhfUEFEKDB4NjQ4LCAweDJDNCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBOV9fUEFUQV9EQVRBXzkJCUlPTVVYX1BBRCgweDY0QywgMHgyQzgsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTlfX0dQSU8yXzkJCUlPTVVYX1BBRCgweDY0QywgMHgyQzgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTlfX0VTREhDMV9EQVQ1CQlJT01VWF9QQUQoMHg2NEMsIDB4MkM4LCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE5X19FTUlfTkFOREZfRF85CUlPTVVYX1BBRCgweDY0QywgMHgyQzgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTlfX0VTREhDM19EQVQxCQlJT01VWF9QQUQoMHg2NEMsIDB4MkM4LCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEE5X19HUFUzZF9HUFVfREVCVUdfT1VUXzkJSU9NVVhfUEFEKDB4NjRDLCAweDJDOCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBOV9fSVBVX0RJQUdfQlVTXzkJSU9NVVhfUEFEKDB4NjRDLCAweDJDOCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTBfX1BBVEFfREFUQV8xMAlJT01VWF9QQUQoMHg2NTAsIDB4MkNDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExMF9fR1BJTzJfMTAJCUlPTVVYX1BBRCgweDY1MCwgMHgyQ0MsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTEwX19FU0RIQzFfREFUNgkJSU9NVVhfUEFEKDB4NjUwLCAweDJDQywgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTBfX0VNSV9OQU5ERl9EXzEwCUlPTVVYX1BBRCgweDY1MCwgMHgyQ0MsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTEwX19FU0RIQzNfREFUMgkJSU9NVVhfUEFEKDB4NjUwLCAweDJDQywgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTBfX0dQVTNkX0dQVV9ERUJVR19PVVRfMTAJSU9NVVhfUEFEKDB4NjUwLCAweDJDQywgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTBfX0lQVV9ESUFHX0JVU18xMAlJT01VWF9QQUQoMHg2NTAsIDB4MkNDLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExMV9fUEFUQV9EQVRBXzExCUlPTVVYX1BBRCgweDY1NCwgMHgyRDAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTExX19HUElPMl8xMQkJSU9NVVhfUEFEKDB4NjU0LCAweDJEMCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTFfX0VTREhDMV9EQVQ3CQlJT01VWF9QQUQoMHg2NTQsIDB4MkQwLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExMV9fRU1JX05BTkRGX0RfMTEJSU9NVVhfUEFEKDB4NjU0LCAweDJEMCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTFfX0VTREhDM19EQVQzCQlJT01VWF9QQUQoMHg2NTQsIDB4MkQwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExMV9fR1BVM2RfR1BVX0RFQlVHX09VVF8xMQlJT01VWF9QQUQoMHg2NTQsIDB4MkQwLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExMV9fSVBVX0RJQUdfQlVTXzExCUlPTVVYX1BBRCgweDY1NCwgMHgyRDAsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTEyX19QQVRBX0RBVEFfMTIJSU9NVVhfUEFEKDB4NjU4LCAweDJENCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTJfX0dQSU8yXzEyCQlJT01VWF9QQUQoMHg2NTgsIDB4MkQ0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExMl9fRVNESEMyX0RBVDQJCUlPTVVYX1BBRCgweDY1OCwgMHgyRDQsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTEyX19FTUlfTkFOREZfRF8xMglJT01VWF9QQUQoMHg2NTgsIDB4MkQ0LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExMl9fRVNESEM0X0RBVDAJCUlPTVVYX1BBRCgweDY1OCwgMHgyRDQsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTEyX19HUFUzZF9HUFVfREVCVUdfT1VUXzEyCUlPTVVYX1BBRCgweDY1OCwgMHgyRDQsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTEyX19JUFVfRElBR19CVVNfMTIJSU9NVVhfUEFEKDB4NjU4LCAweDJENCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTNfX1BBVEFfREFUQV8xMwlJT01VWF9QQUQoMHg2NUMsIDB4MkQ4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExM19fR1BJTzJfMTMJCUlPTVVYX1BBRCgweDY1QywgMHgyRDgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTEzX19FU0RIQzJfREFUNQkJSU9NVVhfUEFEKDB4NjVDLCAweDJEOCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTNfX0VNSV9OQU5ERl9EXzEzCUlPTVVYX1BBRCgweDY1QywgMHgyRDgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTEzX19FU0RIQzRfREFUMQkJSU9NVVhfUEFEKDB4NjVDLCAweDJEOCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTNfX0dQVTNkX0dQVV9ERUJVR19PVVRfMTMJSU9NVVhfUEFEKDB4NjVDLCAweDJEOCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTNfX0lQVV9ESUFHX0JVU18xMwlJT01VWF9QQUQoMHg2NUMsIDB4MkQ4LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExNF9fUEFUQV9EQVRBXzE0CUlPTVVYX1BBRCgweDY2MCwgMHgyREMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTE0X19HUElPMl8xNAkJSU9NVVhfUEFEKDB4NjYwLCAweDJEQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTRfX0VTREhDMl9EQVQ2CQlJT01VWF9QQUQoMHg2NjAsIDB4MkRDLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExNF9fRU1JX05BTkRGX0RfMTQJSU9NVVhfUEFEKDB4NjYwLCAweDJEQywgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTRfX0VTREhDNF9EQVQyCQlJT01VWF9QQUQoMHg2NjAsIDB4MkRDLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExNF9fR1BVM2RfR1BVX0RFQlVHX09VVF8xNAlJT01VWF9QQUQoMHg2NjAsIDB4MkRDLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExNF9fSVBVX0RJQUdfQlVTXzE0CUlPTVVYX1BBRCgweDY2MCwgMHgyREMsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTE1X19QQVRBX0RBVEFfMTUJSU9NVVhfUEFEKDB4NjY0LCAweDJFMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfUEFUQV9EQVRBMTVfX0dQSU8yXzE1CQlJT01VWF9QQUQoMHg2NjQsIDB4MkUwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExNV9fRVNESEMyX0RBVDcJCUlPTVVYX1BBRCgweDY2NCwgMHgyRTAsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTE1X19FTUlfTkFOREZfRF8xNQlJT01VWF9QQUQoMHg2NjQsIDB4MkUwLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9QQVRBX0RBVEExNV9fRVNESEM0X0RBVDMJCUlPTVVYX1BBRCgweDY2NCwgMHgyRTAsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTE1X19HUFUzZF9HUFVfREVCVUdfT1VUXzE1CUlPTVVYX1BBRCgweDY2NCwgMHgyRTAsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1BBVEFfREFUQTE1X19JUFVfRElBR19CVVNfMTUJSU9NVVhfUEFEKDB4NjY0LCAweDJFMCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0RBVEEwX19FU0RIQzFfREFUMAlJT01VWF9QQUQoMHg2NkMsIDB4MkU0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfREFUQTBfX0dQSU8xXzE2CUlPTVVYX1BBRCgweDY2QywgMHgyRTQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBMF9fR1BUX0NBUElOMQlJT01VWF9QQUQoMHg2NkMsIDB4MkU0LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfREFUQTBfX0NTUElfTUlTTwlJT01VWF9QQUQoMHg2NkMsIDB4MkU0LCA1LCAweDc4NCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBMF9fQ0NNX1BMTDNfQllQCUlPTVVYX1BBRCgweDY2QywgMHgyRTQsIDcsIDB4Nzc4LCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0RBVEExX19FU0RIQzFfREFUMQlJT01VWF9QQUQoMHg2NzAsIDB4MkU4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfREFUQTFfX0dQSU8xXzE3CUlPTVVYX1BBRCgweDY3MCwgMHgyRTgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBMV9fR1BUX0NBUElOMglJT01VWF9QQUQoMHg2NzAsIDB4MkU4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfREFUQTFfX0NTUElfU1MwCUlPTVVYX1BBRCgweDY3MCwgMHgyRTgsIDUsIDB4NzhDLCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0RBVEExX19DQ01fUExMNF9CWVAJSU9NVVhfUEFEKDB4NjcwLCAweDJFOCwgNywgMHg3N0MsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfQ01EX19FU0RIQzFfQ01ECUlPTVVYX1BBRCgweDY3NCwgMHgyRUMsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfQ01EX19HUElPMV8xOAkJSU9NVVhfUEFEKDB4Njc0LCAweDJFQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0NNRF9fR1BUX0NNUE9VVDEJSU9NVVhfUEFEKDB4Njc0LCAweDJFQywgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0NNRF9fQ1NQSV9NT1NJCQlJT01VWF9QQUQoMHg2NzQsIDB4MkVDLCA1LCAweDc4OCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9DTURfX0NDTV9QTEwxX0JZUAlJT01VWF9QQUQoMHg2NzQsIDB4MkVDLCA3LCAweDc3MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBMl9fRVNESEMxX0RBVDIJCUlPTVVYX1BBRCgweDY3OCwgMHgyRjAsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBMl9fR1BJTzFfMTkJCUlPTVVYX1BBRCgweDY3OCwgMHgyRjAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBMl9fR1BUX0NNUE9VVDIJCUlPTVVYX1BBRCgweDY3OCwgMHgyRjAsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBMl9fUFdNMl9QV01PCQlJT01VWF9QQUQoMHg2NzgsIDB4MkYwLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfREFUQTJfX1dET0cxX1dET0dfQgkJSU9NVVhfUEFEKDB4Njc4LCAweDJGMCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0RBVEEyX19DU1BJX1NTMQkJSU9NVVhfUEFEKDB4Njc4LCAweDJGMCwgNSwgMHg3OTAsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfREFUQTJfX1dET0cxX1dET0dfUlNUX0JfREVCCUlPTVVYX1BBRCgweDY3OCwgMHgyRjAsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBMl9fQ0NNX1BMTDJfQllQCQlJT01VWF9QQUQoMHg2NzgsIDB4MkYwLCA3LCAweDc3NCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9DTEtfX0VTREhDMV9DTEsJSU9NVVhfUEFEKDB4NjdDLCAweDJGNCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0NMS19fR1BJTzFfMjAJCUlPTVVYX1BBRCgweDY3QywgMHgyRjQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9DTEtfX09TQzMya18zMktfT1VUCUlPTVVYX1BBRCgweDY3QywgMHgyRjQsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9DTEtfX0dQVF9DTEtJTgkJSU9NVVhfUEFEKDB4NjdDLCAweDJGNCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0NMS19fQ1NQSV9TQ0xLCQlJT01VWF9QQUQoMHg2N0MsIDB4MkY0LCA1LCAweDc4MCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9DTEtfX1NBVEFfUEhZX0RUQl8wCUlPTVVYX1BBRCgweDY3QywgMHgyRjQsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBM19fRVNESEMxX0RBVDMJSU9NVVhfUEFEKDB4NjgwLCAweDJGOCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QxX0RBVEEzX19HUElPMV8yMQlJT01VWF9QQUQoMHg2ODAsIDB4MkY4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfREFUQTNfX0dQVF9DTVBPVVQzCUlPTVVYX1BBRCgweDY4MCwgMHgyRjgsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBM19fUFdNMV9QV01PCUlPTVVYX1BBRCgweDY4MCwgMHgyRjgsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBM19fV0RPRzJfV0RPR19CCUlPTVVYX1BBRCgweDY4MCwgMHgyRjgsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBM19fQ1NQSV9TUzIJSU9NVVhfUEFEKDB4NjgwLCAweDJGOCwgNSwgMHg3OTQsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDFfREFUQTNfX1dET0cyX1dET0dfUlNUX0JfREVCCUlPTVVYX1BBRCgweDY4MCwgMHgyRjgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMV9EQVRBM19fU0FUQV9QSFlfRFRCXzEJSU9NVVhfUEFEKDB4NjgwLCAweDJGOCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0NMS19fRVNESEMyX0NMSwlJT01VWF9QQUQoMHg2ODgsIDB4MkZDLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfQ0xLX19HUElPMV8xMAkJSU9NVVhfUEFEKDB4Njg4LCAweDJGQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0NMS19fS1BQX0NPTF81CQlJT01VWF9QQUQoMHg2ODgsIDB4MkZDLCAyLCAweDg0MCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9DTEtfX0FVRE1VWF9BVUQ0X1JYRlMJSU9NVVhfUEFEKDB4Njg4LCAweDJGQywgMywgMHg3M0MsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfQ0xLX19DU1BJX1NDTEsJCUlPTVVYX1BBRCgweDY4OCwgMHgyRkMsIDUsIDB4NzgwLCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0NMS19fU0NDX1JBTkRPTV9WCUlPTVVYX1BBRCgweDY4OCwgMHgyRkMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9DTURfX0VTREhDMl9DTUQJSU9NVVhfUEFEKDB4NjhDLCAweDMwMCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0NNRF9fR1BJTzFfMTEJCUlPTVVYX1BBRCgweDY4QywgMHgzMDAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9DTURfX0tQUF9ST1dfNQlJT01VWF9QQUQoMHg2OEMsIDB4MzAwLCAyLCAweDg0QywgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9DTURfX0FVRE1VWF9BVUQ0X1JYQwlJT01VWF9QQUQoMHg2OEMsIDB4MzAwLCAzLCAweDczOCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9DTURfX0NTUElfTU9TSQkJSU9NVVhfUEFEKDB4NjhDLCAweDMwMCwgNSwgMHg3ODgsIDMsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfQ01EX19TQ0NfUkFORE9NCUlPTVVYX1BBRCgweDY4QywgMHgzMDAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9EQVRBM19fRVNESEMyX0RBVDMJSU9NVVhfUEFEKDB4NjkwLCAweDMwNCwgMCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEEzX19HUElPMV8xMglJT01VWF9QQUQoMHg2OTAsIDB4MzA0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfREFUQTNfX0tQUF9DT0xfNglJT01VWF9QQUQoMHg2OTAsIDB4MzA0LCAyLCAweDg0NCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9EQVRBM19fQVVETVVYX0FVRDRfVFhDCUlPTVVYX1BBRCgweDY5MCwgMHgzMDQsIDMsIDB4NzQwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEEzX19DU1BJX1NTMglJT01VWF9QQUQoMHg2OTAsIDB4MzA0LCA1LCAweDc5NCwgMywgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9EQVRBM19fU0pDX0RPTkUJSU9NVVhfUEFEKDB4NjkwLCAweDMwNCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEEyX19FU0RIQzJfREFUMglJT01VWF9QQUQoMHg2OTQsIDB4MzA4LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfREFUQTJfX0dQSU8xXzEzCUlPTVVYX1BBRCgweDY5NCwgMHgzMDgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9EQVRBMl9fS1BQX1JPV182CUlPTVVYX1BBRCgweDY5NCwgMHgzMDgsIDIsIDB4ODUwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEEyX19BVURNVVhfQVVENF9UWEQJSU9NVVhfUEFEKDB4Njk0LCAweDMwOCwgMywgMHg3MzQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfREFUQTJfX0NTUElfU1MxCUlPTVVYX1BBRCgweDY5NCwgMHgzMDgsIDUsIDB4NzkwLCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEEyX19TSkNfRkFJTAlJT01VWF9QQUQoMHg2OTQsIDB4MzA4LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfREFUQTFfX0VTREhDMl9EQVQxCUlPTVVYX1BBRCgweDY5OCwgMHgzMEMsIDAsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9EQVRBMV9fR1BJTzFfMTQJSU9NVVhfUEFEKDB4Njk4LCAweDMwQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEExX19LUFBfQ09MXzcJSU9NVVhfUEFEKDB4Njk4LCAweDMwQywgMiwgMHg4NDgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfREFUQTFfX0FVRE1VWF9BVUQ0X1RYRlMJSU9NVVhfUEFEKDB4Njk4LCAweDMwQywgMywgMHg3NDQsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfREFUQTFfX0NTUElfU1MwCUlPTVVYX1BBRCgweDY5OCwgMHgzMEMsIDUsIDB4NzhDLCA0LCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEExX19SVElDX1NFQ19WSU8JSU9NVVhfUEFEKDB4Njk4LCAweDMwQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEEwX19FU0RIQzJfREFUMAlJT01VWF9QQUQoMHg2OUMsIDB4MzEwLCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfREFUQTBfX0dQSU8xXzE1CUlPTVVYX1BBRCgweDY5QywgMHgzMTAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9EQVRBMF9fS1BQX1JPV183CUlPTVVYX1BBRCgweDY5QywgMHgzMTAsIDIsIDB4ODU0LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfU0QyX0RBVEEwX19BVURNVVhfQVVENF9SWEQJSU9NVVhfUEFEKDB4NjlDLCAweDMxMCwgMywgMHg3MzAsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9TRDJfREFUQTBfX0NTUElfTUlTTwlJT01VWF9QQUQoMHg2OUMsIDB4MzEwLCA1LCAweDc4NCwgMywgMCkKKyNkZWZpbmUgX01YNTNfUEFEX1NEMl9EQVRBMF9fUlRJQ19ET05FX0lOVAlJT01VWF9QQUQoMHg2OUMsIDB4MzEwLCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzBfX0NDTV9DTEtPCQlJT01VWF9QQUQoMHg2QTQsIDB4MzE0LCAwLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzBfX0dQSU8xXzAJCUlPTVVYX1BBRCgweDZBNCwgMHgzMTQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMF9fS1BQX0NPTF81CQlJT01VWF9QQUQoMHg2QTQsIDB4MzE0LCAyLCAweDg0MCwgMywgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMF9fQ0NNX1NTSV9FWFQxX0NMSwlJT01VWF9QQUQoMHg2QTQsIDB4MzE0LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzBfX0VQSVQxX0VQSVRPCUlPTVVYX1BBRCgweDZBNCwgMHgzMTQsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMF9fU1JUQ19BTEFSTV9ERUIJSU9NVVhfUEFEKDB4NkE0LCAweDMxNCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18wX19VU0JPSDNfVVNCSDFfUFdSCUlPTVVYX1BBRCgweDZBNCwgMHgzMTQsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMF9fQ1NVX1RECQlJT01VWF9QQUQoMHg2QTQsIDB4MzE0LCA3LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzFfX0VTQUkxX1NDS1IJCUlPTVVYX1BBRCgweDZBOCwgMHgzMTgsIDAsIDB4N0RDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xX19HUElPMV8xCQlJT01VWF9QQUQoMHg2QTgsIDB4MzE4LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzFfX0tQUF9ST1dfNQkJSU9NVVhfUEFEKDB4NkE4LCAweDMxOCwgMiwgMHg4NEMsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzFfX0NDTV9TU0lfRVhUMl9DTEsJSU9NVVhfUEFEKDB4NkE4LCAweDMxOCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xX19QV00yX1BXTU8JSU9NVVhfUEFEKDB4NkE4LCAweDMxOCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xX19XRE9HMl9XRE9HX0IJSU9NVVhfUEFEKDB4NkE4LCAweDMxOCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xX19FU0RIQzFfQ0QJCUlPTVVYX1BBRCgweDZBOCwgMHgzMTgsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMV9fU1JDX1RFU1RFUl9BQ0sJSU9NVVhfUEFEKDB4NkE4LCAweDMxOCwgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT185X19FU0FJMV9GU1IJCUlPTVVYX1BBRCgweDZBQywgMHgzMUMsIDAsIDB4N0NDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT185X19HUElPMV85CQlJT01VWF9QQUQoMHg2QUMsIDB4MzFDLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzlfX0tQUF9DT0xfNgkJSU9NVVhfUEFEKDB4NkFDLCAweDMxQywgMiwgMHg4NDQsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzlfX0NDTV9SRUZfRU5fQglJT01VWF9QQUQoMHg2QUMsIDB4MzFDLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzlfX1BXTTFfUFdNTwlJT01VWF9QQUQoMHg2QUMsIDB4MzFDLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzlfX1dET0cxX1dET0dfQglJT01VWF9QQUQoMHg2QUMsIDB4MzFDLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzlfX0VTREhDMV9XUAkJSU9NVVhfUEFEKDB4NkFDLCAweDMxQywgNiwgMHg3RkMsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzlfX1NDQ19GQUlMX1NUQVRFCUlPTVVYX1BBRCgweDZBQywgMHgzMUMsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fM19fRVNBSTFfSENLUgkJSU9NVVhfUEFEKDB4NkIwLCAweDMyMCwgMCwgMHg3RDQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzNfX0dQSU8xXzMJCUlPTVVYX1BBRCgweDZCMCwgMHgzMjAsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fM19fSTJDM19TQ0wJCUlPTVVYX1BBRCgweDZCMCwgMHgzMjAsIDIgfCBJT01VWF9DT05GSUdfU0lPTiwgMHg4MjQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzNfX0RQTExJUDFfVE9HX0VOCUlPTVVYX1BBRCgweDZCMCwgMHgzMjAsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fM19fQ0NNX0NMS08yCQlJT01VWF9QQUQoMHg2QjAsIDB4MzIwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzNfX09CU0VSVkVfTVVYX09CU1JWX0lOVF9PVVQwCUlPTVVYX1BBRCgweDZCMCwgMHgzMjAsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fM19fVVNCT0gzX1VTQkgxX09DCUlPTVVYX1BBRCgweDZCMCwgMHgzMjAsIDYsIDB4OEEwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18zX19NTEJfTUxCQ0xLCQlJT01VWF9QQUQoMHg2QjAsIDB4MzIwLCA3LCAweDg1OCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fNl9fRVNBSTFfU0NLVAkJSU9NVVhfUEFEKDB4NkI0LCAweDMyNCwgMCwgMHg3RTAsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzZfX0dQSU8xXzYJCUlPTVVYX1BBRCgweDZCNCwgMHgzMjQsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fNl9fSTJDM19TREEJCUlPTVVYX1BBRCgweDZCNCwgMHgzMjQsIDIgfCBJT01VWF9DT05GSUdfU0lPTiwgMHg4MjgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzZfX0NDTV9DQ01fT1VUXzAJSU9NVVhfUEFEKDB4NkI0LCAweDMyNCwgMywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT182X19DU1VfQ1NVX0lOVF9ERUIJSU9NVVhfUEFEKDB4NkI0LCAweDMyNCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT182X19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUMQlJT01VWF9QQUQoMHg2QjQsIDB4MzI0LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzZfX0VTREhDMl9MQ1RMCUlPTVVYX1BBRCgweDZCNCwgMHgzMjQsIDYsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fNl9fTUxCX01MQlNJRwkJSU9NVVhfUEFEKDB4NkI0LCAweDMyNCwgNywgMHg4NjAsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzJfX0VTQUkxX0ZTVAkJSU9NVVhfUEFEKDB4NkI4LCAweDMyOCwgMCwgMHg3RDAsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzJfX0dQSU8xXzIJCUlPTVVYX1BBRCgweDZCOCwgMHgzMjgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMl9fS1BQX1JPV182CQlJT01VWF9QQUQoMHg2QjgsIDB4MzI4LCAyLCAweDg1MCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMl9fQ0NNX0NDTV9PVVRfMQlJT01VWF9QQUQoMHg2QjgsIDB4MzI4LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzJfX0NTVV9DU1VfQUxBUk1fQVVUXzAJSU9NVVhfUEFEKDB4NkI4LCAweDMyOCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18yX19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUMglJT01VWF9QQUQoMHg2QjgsIDB4MzI4LCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzJfX0VTREhDMl9XUAkJSU9NVVhfUEFEKDB4NkI4LCAweDMyOCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18yX19NTEJfTUxCREFUCUlPTVVYX1BBRCgweDZCOCwgMHgzMjgsIDcsIDB4ODVDLCAyLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT180X19FU0FJMV9IQ0tUCQlJT01VWF9QQUQoMHg2QkMsIDB4MzJDLCAwLCAweDdEOCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fNF9fR1BJTzFfNAkJSU9NVVhfUEFEKDB4NkJDLCAweDMyQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT180X19LUFBfQ09MXzcJCUlPTVVYX1BBRCgweDZCQywgMHgzMkMsIDIsIDB4ODQ4LCAyLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT180X19DQ01fQ0NNX09VVF8yCUlPTVVYX1BBRCgweDZCQywgMHgzMkMsIDMsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fNF9fQ1NVX0NTVV9BTEFSTV9BVVRfMQlJT01VWF9QQUQoMHg2QkMsIDB4MzJDLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzRfX09CU0VSVkVfTVVYX09CU1JWX0lOVF9PVVQzCUlPTVVYX1BBRCgweDZCQywgMHgzMkMsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fNF9fRVNESEMyX0NECQlJT01VWF9QQUQoMHg2QkMsIDB4MzJDLCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzRfX1NDQ19TRUNfU1RBVEUJSU9NVVhfUEFEKDB4NkJDLCAweDMyQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT181X19FU0FJMV9UWDJfUlgzCUlPTVVYX1BBRCgweDZDMCwgMHgzMzAsIDAsIDB4N0VDLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT181X19HUElPMV81CQlJT01VWF9QQUQoMHg2QzAsIDB4MzMwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzVfX0tQUF9ST1dfNwkJSU9NVVhfUEFEKDB4NkMwLCAweDMzMCwgMiwgMHg4NTQsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzVfX0NDTV9DTEtPCQlJT01VWF9QQUQoMHg2QzAsIDB4MzMwLCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzVfX0NTVV9DU1VfQUxBUk1fQVVUXzIJSU9NVVhfUEFEKDB4NkMwLCAweDMzMCwgNCwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT181X19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUNAlJT01VWF9QQUQoMHg2QzAsIDB4MzMwLCA1LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzVfX0kyQzNfU0NMCQlJT01VWF9QQUQoMHg2QzAsIDB4MzMwLCA2LCAweDgyNCwgMiwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fNV9fQ0NNX1BMTDFfQllQCUlPTVVYX1BBRCgweDZDMCwgMHgzMzAsIDcsIDB4NzcwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT183X19FU0FJMV9UWDRfUlgxCUlPTVVYX1BBRCgweDZDNCwgMHgzMzQsIDAsIDB4N0Y0LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT183X19HUElPMV83CQlJT01VWF9QQUQoMHg2QzQsIDB4MzM0LCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzdfX0VQSVQxX0VQSVRPCUlPTVVYX1BBRCgweDZDNCwgMHgzMzQsIDIsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fN19fQ0FOMV9UWENBTglJT01VWF9QQUQoMHg2QzQsIDB4MzM0LCAzLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzdfX1VBUlQyX1RYRF9NVVgJSU9NVVhfUEFEKDB4NkM0LCAweDMzNCwgNCwgMHg4ODAsIDQsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzdfX0ZJUklfUlhECQlJT01VWF9QQUQoMHg2QzQsIDB4MzM0LCA1LCAweDgwQywgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fN19fU1BESUZfUExPQ0sJSU9NVVhfUEFEKDB4NkM0LCAweDMzNCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT183X19DQ01fUExMMl9CWVAJSU9NVVhfUEFEKDB4NkM0LCAweDMzNCwgNywgMHg3NzQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzhfX0VTQUkxX1RYNV9SWDAJSU9NVVhfUEFEKDB4NkM4LCAweDMzOCwgMCwgMHg3RjgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzhfX0dQSU8xXzgJCUlPTVVYX1BBRCgweDZDOCwgMHgzMzgsIDEsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fOF9fRVBJVDJfRVBJVE8JSU9NVVhfUEFEKDB4NkM4LCAweDMzOCwgMiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT184X19DQU4xX1JYQ0FOCUlPTVVYX1BBRCgweDZDOCwgMHgzMzgsIDMsIDB4NzYwLCAzLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT184X19VQVJUMl9SWERfTVVYCUlPTVVYX1BBRCgweDZDOCwgMHgzMzgsIDQsIDB4ODgwLCA1LCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT184X19GSVJJX1RYRAkJSU9NVVhfUEFEKDB4NkM4LCAweDMzOCwgNSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT184X19TUERJRl9TUkNMSwlJT01VWF9QQUQoMHg2QzgsIDB4MzM4LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzhfX0NDTV9QTEwzX0JZUAlJT01VWF9QQUQoMHg2QzgsIDB4MzM4LCA3LCAweDc3OCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMTZfX0VTQUkxX1RYM19SWDIJSU9NVVhfUEFEKDB4NkNDLCAweDMzQywgMCwgMHg3RjAsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE2X19HUElPN18xMQkJSU9NVVhfUEFEKDB4NkNDLCAweDMzQywgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xNl9fVFpJQ19QV1JGQUlMX0lOVAlJT01VWF9QQUQoMHg2Q0MsIDB4MzNDLCAyLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE2X19SVENfQ0VfUlRDX0VYVF9UUklHMQlJT01VWF9QQUQoMHg2Q0MsIDB4MzNDLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE2X19TUERJRl9JTjEJCUlPTVVYX1BBRCgweDZDQywgMHgzM0MsIDUsIDB4ODcwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xNl9fSTJDM19TREEJCUlPTVVYX1BBRCgweDZDQywgMHgzM0MsIDYgfCBJT01VWF9DT05GSUdfU0lPTiwgMHg4MjgsIDIsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE2X19TSkNfREVfQgkJSU9NVVhfUEFEKDB4NkNDLCAweDMzQywgNywgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xN19fRVNBSTFfVFgwCQlJT01VWF9QQUQoMHg2RDAsIDB4MzQwLCAwLCAweDdFNCwgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMTdfX0dQSU83XzEyCQlJT01VWF9QQUQoMHg2RDAsIDB4MzQwLCAxLCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE3X19TRE1BX0VYVF9FVkVOVF8wCUlPTVVYX1BBRCgweDZEMCwgMHgzNDAsIDIsIDB4ODY4LCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xN19fR1BDX1BNSUNfUkRZCUlPTVVYX1BBRCgweDZEMCwgMHgzNDAsIDMsIDB4ODEwLCAxLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xN19fUlRDX0NFX1JUQ19GU1ZfVFJJRwlJT01VWF9QQUQoMHg2RDAsIDB4MzQwLCA0LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE3X19TUERJRl9PVVQxCUlPTVVYX1BBRCgweDZEMCwgMHgzNDAsIDUsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMTdfX0lQVV9TTk9PUDIJSU9NVVhfUEFEKDB4NkQwLCAweDM0MCwgNiwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xN19fU0pDX0pUQUdfQUNUCUlPTVVYX1BBRCgweDZEMCwgMHgzNDAsIDcsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMThfX0VTQUkxX1RYMQkJSU9NVVhfUEFEKDB4NkQ0LCAweDM0NCwgMCwgMHg3RTgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE4X19HUElPN18xMwkJSU9NVVhfUEFEKDB4NkQ0LCAweDM0NCwgMSwgMHgwLCAwLCAwKQorI2RlZmluZSBfTVg1M19QQURfR1BJT18xOF9fU0RNQV9FWFRfRVZFTlRfMQlJT01VWF9QQUQoMHg2RDQsIDB4MzQ0LCAyLCAweDg2QywgMSwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMThfX09XSVJFX0xJTkUJSU9NVVhfUEFEKDB4NkQ0LCAweDM0NCwgMywgMHg4NjQsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE4X19SVENfQ0VfUlRDX0FMQVJNMl9UUklHCUlPTVVYX1BBRCgweDZENCwgMHgzNDQsIDQsIDB4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTNfUEFEX0dQSU9fMThfX0NDTV9BU1JDX0VYVF9DTEsJSU9NVVhfUEFEKDB4NkQ0LCAweDM0NCwgNSwgMHg3NjgsIDEsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE4X19FU0RIQzFfTENUTAlJT01VWF9QQUQoMHg2RDQsIDB4MzQ0LCA2LCAweDAsIDAsIDApCisjZGVmaW5lIF9NWDUzX1BBRF9HUElPXzE4X19TUkNfU1lTVEVNX1JTVAlJT01VWF9QQUQoMHg2RDQsIDB4MzQ0LCA3LCAweDAsIDAsIDApCiAKLS8qIFVBUlQzICovCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9DU18wX19VQVJUM19UWEQJSU9NVVhfUEFEKDB4NjFDLCAweDI5QywgNCwgMHgwLCAwLCBNWDUzX1VBUlRfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9DU18xX19VQVJUM19SWEQJSU9NVVhfUEFEKDB4NjIwLCAweDJBMCwgNCwgMHg4ODgsIDMsIE1YNTNfVUFSVF9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RBXzFfX1VBUlQzX0NUUwlJT01VWF9QQUQoMHg2MTQsIDB4Mjk0LCA0LCAweDAsIDAsIE1YNTNfVUFSVF9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RBXzJfX1VBUlQzX1JUUwlJT01VWF9QQUQoMHg2MTgsIDB4Mjk4LCA0LCAweDg4NCwgNSwgTVg1M19VQVJUX1BBRF9DVFJMKQotCi0jZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTlfX0dQSU9fNF81CQlJT01VWF9QQUQoMHgzNDgsIDB4MjAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wwX19HUElPXzRfNgkJSU9NVVhfUEFEKDB4MzRDLCAweDI0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XMF9fR1BJT180XzcJCUlPTVVYX1BBRCgweDM1MCwgMHgyOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDFfX0dQSU9fNF84CQlJT01VWF9QQUQoMHgzNTQsIDB4MkMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cxX19HUElPXzRfOQkJSU9NVVhfUEFEKDB4MzU4LCAweDMwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MMl9fR1BJT180XzEwCQlJT01VWF9QQUQoMHgzNUMsIDB4MzQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cyX19HUElPXzRfMTEJSU9NVVhfUEFEKDB4MzYwLCAweDM4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MM19fR1BJT180XzEyCQlJT01VWF9QQUQoMHgzNjQsIDB4M0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1czX19HUElPXzRfMTMJSU9NVVhfUEFEKDB4MzY4LCAweDQwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MNF9fR1BJT180XzE0CQlJT01VWF9QQUQoMHgzNkMsIDB4NDQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1c0X19HUElPXzRfMTUJSU9NVVhfUEFEKDB4MzcwLCAweDQ4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9OVkNDX0tFWVBBRF9fTlZDQ19LRVlQQUQJSU9NVVhfUEFEKDB4Mzc0LCBOT05fTVVYX0ksSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RJMF9ESVNQX0NMS19fR1BJT180XzE2CUlPTVVYX1BBRCgweDM3OCwgMHg0QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfREkwX1BJTjE1X19HUElPXzRfMTcJSU9NVVhfUEFEKDB4MzdDLCAweDUwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOMl9fR1BJT180XzE4CQlJT01VWF9QQUQoMHgzODAsIDB4NTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RJMF9QSU4zX19HUElPXzRfMTkJCUlPTVVYX1BBRCgweDM4NCwgMHg1OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfREkwX1BJTjRfX0dQSU9fNF8yMAkJSU9NVVhfUEFEKDB4Mzg4LCAweDVDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQwX19HUElPXzRfMjEJSU9NVVhfUEFEKDB4MzhDLCAweDYwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxX19HUElPXzRfMjIJSU9NVVhfUEFEKDB4MzkwLCAweDY0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyX19HUElPXzRfMjMJSU9NVVhfUEFEKDB4Mzk0LCAweDY4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQzX19HUElPXzRfMjQJSU9NVVhfUEFEKDB4Mzk4LCAweDZDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ0X19HUElPXzRfMjUJSU9NVVhfUEFEKDB4MzlDLCAweDcwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ1X19HUElPXzRfMjYJSU9NVVhfUEFEKDB4M0EwLCAweDc0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ2X19HUElPXzRfMjcJSU9NVVhfUEFEKDB4M0E0LCAweDc4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ3X19HUElPXzRfMjgJSU9NVVhfUEFEKDB4M0E4LCAweDdDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ4X19HUElPXzRfMjkJSU9NVVhfUEFEKDB4M0FDLCAweDgwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ5X19HUElPXzRfMzAJSU9NVVhfUEFEKDB4M0IwLCAweDg0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxMF9fR1BJT180XzMxCUlPTVVYX1BBRCgweDNCNCwgMHg4OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTFfX0dQSU9fNV81CUlPTVVYX1BBRCgweDNCOCwgMHg4QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTJfX0dQSU9fNV82CUlPTVVYX1BBRCgweDNCQywgMHg5MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTNfX0dQSU9fNV83CUlPTVVYX1BBRCgweDNDMCwgMHg5NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTRfX0dQSU9fNV84CUlPTVVYX1BBRCgweDNDNCwgMHg5OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTVfX0dQSU9fNV85CUlPTVVYX1BBRCgweDNDOCwgMHg5QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTZfX0dQSU9fNV8xMAlJT01VWF9QQUQoMHgzQ0MsIDB4QTAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE3X19HUElPXzVfMTEJSU9NVVhfUEFEKDB4M0QwLCAweEE0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxOF9fR1BJT181XzEyCUlPTVVYX1BBRCgweDNENCwgMHhBOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTlfX0dQSU9fNV8xMwlJT01VWF9QQUQoMHgzRDgsIDB4QUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIwX19HUElPXzVfMTQJSU9NVVhfUEFEKDB4M0RDLCAweEIwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMV9fR1BJT181XzE1CUlPTVVYX1BBRCgweDNFMCwgMHhCNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjJfX0dQSU9fNV8xNglJT01VWF9QQUQoMHgzRTQsIDB4QjgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIzX19HUElPXzVfMTcJSU9NVVhfUEFEKDB4M0U4LCAweEJDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9DU0kwX1BJWENMS19fR1BJT181XzE4CUlPTVVYX1BBRCgweDNFQywgMHhDMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQ1NJMF9NQ0xLX19HUElPXzVfMTkJSU9NVVhfUEFEKDB4M0YwLCAweEM0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVEFfRU5fX0dQSU9fNV8yMAlJT01VWF9QQUQoMHgzRjQsIDB4QzgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0NTSTBfVlNZTkNfX0dQSU9fNV8yMQlJT01VWF9QQUQoMHgzRjgsIDB4Q0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDRfX0dQSU9fNV8yMgkJSU9NVVhfUEFEKDB4M0ZDLCAweEQwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9DU0kwX0Q1X19HUElPXzVfMjMJCUlPTVVYX1BBRCgweDQwMCwgMHhENCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQ1NJMF9ENl9fR1BJT181XzI0CQlJT01VWF9QQUQoMHg0MDQsIDB4RDgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDdfX0dQSU9fNV8yNQkJSU9NVVhfUEFEKDB4NDA4LCAweERDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9DU0kwX0Q4X19HUElPXzVfMjYJCUlPTVVYX1BBRCgweDQwQywgMHhFMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQ1NJMF9EOV9fR1BJT181XzI3CQlJT01VWF9QQUQoMHg0MTAsIDB4RTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDEwX19HUElPXzVfMjgJCUlPTVVYX1BBRCgweDQxNCwgMHhFOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMTFfX0dQSU9fNV8yOQkJSU9NVVhfUEFEKDB4NDE4LCAweEVDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9DU0kwX0QxMl9fR1BJT181XzMwCQlJT01VWF9QQUQoMHg0MUMsIDB4RjAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDEzX19HUElPXzVfMzEJCUlPTVVYX1BBRCgweDQyMCwgMHhGNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMTRfX0dQSU9fNl8wCQlJT01VWF9QQUQoMHg0MjQsIDB4RjgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDE1X19HUElPXzZfMQkJSU9NVVhfUEFEKDB4NDI4LCAweEZDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9DU0kwX0QxNl9fR1BJT182XzIJCUlPTVVYX1BBRCgweDQyQywgMHgxMDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDE3X19HUElPXzZfMwkJSU9NVVhfUEFEKDB4NDMwLCAweDEwNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMThfX0dQSU9fNl80CQlJT01VWF9QQUQoMHg0MzQsIDB4MTA4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9DU0kwX0QxOV9fR1BJT182XzUJCUlPTVVYX1BBRCgweDQzOCwgMHgxMEMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05WQ0NfQ1NJMF9fTlZDQ19DU0kwCUlPTVVYX1BBRCgweDQzQywgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfSlRBR19UTVNfX0pUQUdfVE1TCQlJT01VWF9QQUQoMHg0NDAsIE5PTl9NVVhfSSxJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfSlRBR19NT0RfX0pUQUdfTU9ECQlJT01VWF9QQUQoMHg0NDQsIE5PTl9NVVhfSSxJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfSlRBR19UUlNUQl9fSlRBR19UUlNUQglJT01VWF9QQUQoMHg0NDgsIE5PTl9NVVhfSSxJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfSlRBR19URElfX0pUQUdfVERJCQlJT01VWF9QQUQoMHg0NEMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0pUQUdfVENLX19KVEFHX1RDSwkJSU9NVVhfUEFEKDB4NDUwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9KVEFHX1RET19fSlRBR19URE8JCUlPTVVYX1BBRCgweDQ1NCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0EyNV9fR1BJT181XzIJCUlPTVVYX1BBRCgweDQ1OCwgMHgxMTAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjJfX0dQSU9fMl8zMAkJSU9NVVhfUEFEKDB4NDVDLCAweDExNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0QxNl9fR1BJT18zXzE2CQlJT01VWF9QQUQoMHg0NjAsIDB4MTE4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE3X19HUElPXzNfMTcJCUlPTVVYX1BBRCgweDQ2NCwgMHgxMUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EMThfX0dQSU9fM18xOAkJSU9NVVhfUEFEKDB4NDY4LCAweDEyMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0QxNl9fQ1NQSTFfU0NMSwkJSU9NVVhfUEFEKDB4NDYwLCAweDExOCxJT01VWF9DT05GSUdfQUxUNCwgMHg3OWMsIDMsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE3X19DU1BJMV9NSVNPCQlJT01VWF9QQUQoMHg0NjQsIDB4MTFDLElPTVVYX0NPTkZJR19BTFQ0LCAweDdhMCwgMywgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EMThfX0NTUEkxX01PU0kJCUlPTVVYX1BBRCgweDQ2OCwgMHgxMjAsSU9NVVhfQ09ORklHX0FMVDQsIDB4N2E0LCAzLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0QxOV9fR1BJT18zXzE5CQlJT01VWF9QQUQoMHg0NkMsIDB4MTI0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIwX19HUElPXzNfMjAJCUlPTVVYX1BBRCgweDQ3MCwgMHgxMjgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjFfX0dQSU9fM18yMQkJSU9NVVhfUEFEKDB4NDc0LCAweDEyQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0QyMl9fR1BJT18zXzIyCQlJT01VWF9QQUQoMHg0NzgsIDB4MTMwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIzX19HUElPXzNfMjMJCUlPTVVYX1BBRCgweDQ3QywgMHgxMzQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjNfX0dQSU9fMl8zMQkJSU9NVVhfUEFEKDB4NDgwLCAweDEzOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0QyNF9fR1BJT18zXzI0CQlJT01VWF9QQUQoMHg0ODQsIDB4MTNDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI1X19HUElPXzNfMjUJCUlPTVVYX1BBRCgweDQ4OCwgMHgxNDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjZfX0dQSU9fM18yNgkJSU9NVVhfUEFEKDB4NDhDLCAweDE0NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0QyN19fR1BJT18zXzI3CQlJT01VWF9QQUQoMHg0OTAsIDB4MTQ4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI4X19HUElPXzNfMjgJCUlPTVVYX1BBRCgweDQ5NCwgMHgxNEMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjlfX0dQSU9fM18yOQkJSU9NVVhfUEFEKDB4NDk4LCAweDE1MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0QzMF9fR1BJT18zXzMwCQlJT01VWF9QQUQoMHg0OUMsIDB4MTU0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRDMxX19HUElPXzNfMzEJCUlPTVVYX1BBRCgweDRBMCwgMHgxNTgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05WQ0NfRUlNMV9fTlZDQ19FSU0xCUlPTVVYX1BBRCgweDRBNCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0EyNF9fR1BJT181XzQJCUlPTVVYX1BBRCgweDRBOCwgMHgxNUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9BMjNfX0dQSU9fNl82CQlJT01VWF9QQUQoMHg0QUMsIDB4MTYwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIyX19HUElPXzJfMTYJCUlPTVVYX1BBRCgweDRCMCwgMHgxNjQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9BMjFfX0dQSU9fMl8xNwkJSU9NVVhfUEFEKDB4NEI0LCAweDE2OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0EyMF9fR1BJT18yXzE4CQlJT01VWF9QQUQoMHg0QjgsIDB4MTZDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE5X19HUElPXzJfMTkJCUlPTVVYX1BBRCgweDRCQywgMHgxNzAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9BMThfX0dQSU9fMl8yMAkJSU9NVVhfUEFEKDB4NEMwLCAweDE3NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0ExN19fR1BJT18yXzIxCQlJT01VWF9QQUQoMHg0QzQsIDB4MTc4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE2X19HUElPXzJfMjIJCUlPTVVYX1BBRCgweDRDOCwgMHgxN0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9DUzBfX0dQSU9fMl8yMwkJSU9NVVhfUEFEKDB4NENDLCAweDE4MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0NTMV9fR1BJT18yXzI0CQlJT01VWF9QQUQoMHg0RDAsIDB4MTg0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fT0VfX0dQSU9fMl8yNQkJSU9NVVhfUEFEKDB4NEQ0LCAweDE4OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX1JXX19HUElPXzJfMjYJCUlPTVVYX1BBRCgweDREOCwgMHgxOEMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9MQkFfX0dQSU9fMl8yNwkJSU9NVVhfUEFEKDB4NERDLCAweDE5MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfTlZDQ19FSU00X19OVkNDX0VJTTQJSU9NVVhfUEFEKDB4NEUwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRUIwX19HUElPXzJfMjgJCUlPTVVYX1BBRCgweDRFNCwgMHgxOTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjFfX0dQSU9fMl8yOQkJSU9NVVhfUEFEKDB4NEU4LCAweDE5OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0RBMF9fR1BJT18zXzAJCUlPTVVYX1BBRCgweDRFQywgMHgxOUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTFfX0dQSU9fM18xCQlJT01VWF9QQUQoMHg0RjAsIDB4MUEwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fREEyX19HUElPXzNfMgkJSU9NVVhfUEFEKDB4NEY0LCAweDFBNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0RBM19fR1BJT18zXzMJCUlPTVVYX1BBRCgweDRGOCwgMHgxQTgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTRfX0dQSU9fM180CQlJT01VWF9QQUQoMHg0RkMsIDB4MUFDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fREE1X19HUElPXzNfNQkJSU9NVVhfUEFEKDB4NTAwLCAweDFCMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0RBNl9fR1BJT18zXzYJCUlPTVVYX1BBRCgweDUwNCwgMHgxQjQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTdfX0dQSU9fM183CQlJT01VWF9QQUQoMHg1MDgsIDB4MUI4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fREE4X19HUElPXzNfOAkJSU9NVVhfUEFEKDB4NTBDLCAweDFCQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0RBOV9fR1BJT18zXzkJCUlPTVVYX1BBRCgweDUxMCwgMHgxQzAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTEwX19HUElPXzNfMTAJCUlPTVVYX1BBRCgweDUxNCwgMHgxQzQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTExX19HUElPXzNfMTEJCUlPTVVYX1BBRCgweDUxOCwgMHgxQzgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTEyX19HUElPXzNfMTIJCUlPTVVYX1BBRCgweDUxQywgMHgxQ0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTEzX19HUElPXzNfMTMJCUlPTVVYX1BBRCgweDUyMCwgMHgxRDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTE0X19HUElPXzNfMTQJCUlPTVVYX1BBRCgweDUyNCwgMHgxRDQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTE1X19HUElPXzNfMTUJCUlPTVVYX1BBRCgweDUyOCwgMHgxRDgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05BTkRGX1dFX0JfX0dQSU9fNl8xMglJT01VWF9QQUQoMHg1MkMsIDB4MURDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9SRV9CX19HUElPXzZfMTMJSU9NVVhfUEFEKDB4NTMwLCAweDFFMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRUlNX1dBSVRfX0dQSU9fNV8wCQlJT01VWF9QQUQoMHg1MzQsIDB4MUU0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fQkNMS19fRUlNX0JDTEsJCUlPTVVYX1BBRCgweDUzOCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfTlZDQ19FSU03X19OVkNDX0VJTTcJSU9NVVhfUEFEKDB4NTNDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9MVkRTMV9UWDNfUF9fR1BJT182XzIyCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MUVDLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfTFZEUzFfVFgyX1BfX0dQSU9fNl8yNAlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDFGMCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0xWRFMxX0NMS19QX19HUElPXzZfMjYJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgxRjQsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9MVkRTMV9UWDFfUF9fR1BJT182XzI4CUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MUY4LCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfTFZEUzFfVFgwX1BfX0dQSU9fNl8zMAlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDFGQywgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0xWRFMwX1RYM19QX19HUElPXzdfMjIJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgyMDAsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9MVkRTMF9DTEtfUF9fR1BJT183XzI0CUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MjA0LCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfTFZEUzBfVFgyX1BfX0dQSU9fN18yNglJT01VWF9QQUQoTk9OX1BBRF9JLCAweDIwOCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0xWRFMwX1RYMV9QX19HUElPXzdfMjgJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgyMEMsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9MVkRTMF9UWDBfUF9fR1BJT183XzMwCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MjEwLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT18xMF9fR1BJT180XzAJCUlPTVVYX1BBRCgweDU0MCwgMHgyMTQsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9HUElPXzExX19HUElPXzRfMQkJSU9NVVhfUEFEKDB4NTQ0LCAweDIxOCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTJfX0dQSU9fNF8yCQlJT01VWF9QQUQoMHg1NDgsIDB4MjFDLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT18xM19fR1BJT180XzMJCUlPTVVYX1BBRCgweDU0QywgMHgyMjAsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9HUElPXzE0X19HUElPXzRfNAkJSU9NVVhfUEFEKDB4NTUwLCAweDIyNCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RSQU1fRFFNM19fRFJBTV9EUU0zCUlPTVVYX1BBRCgweDU1NCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRFJBTV9TRFFTM19fRFJBTV9TRFFTMwlJT01VWF9QQUQoMHg1NTgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RSQU1fU0RDS0UxX19EUkFNX1NEQ0tFMQlJT01VWF9QQUQoMHg1NUMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RSQU1fRFFNMl9fRFJBTV9EUU0yCUlPTVVYX1BBRCgweDU2MCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRFJBTV9TRE9EVDFfX0RSQU1fU0RPRFQxCUlPTVVYX1BBRCgweDU2NCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRFJBTV9TRFFTMl9fRFJBTV9TRFFTMglJT01VWF9QQUQoMHg1NjgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RSQU1fUkVTRVRfX0RSQU1fUkVTRVQJSU9NVVhfUEFEKDB4NTZDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9EUkFNX1NEQ0xLMV9fRFJBTV9TRENMSzEJSU9NVVhfUEFEKDB4NTcwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9EUkFNX0NBU19fRFJBTV9DQVMJCUlPTVVYX1BBRCgweDU3NCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRFJBTV9TRENMSzBfX0RSQU1fU0RDTEswCUlPTVVYX1BBRCgweDU3OCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRFJBTV9TRFFTMF9fRFJBTV9TRFFTMAlJT01VWF9QQUQoMHg1N0MsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RSQU1fU0RPRFQwX19EUkFNX1NET0RUMAlJT01VWF9QQUQoMHg1ODAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RSQU1fRFFNMF9fRFJBTV9EUU0wCUlPTVVYX1BBRCgweDU4NCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfRFJBTV9SQVNfX0RSQU1fUkFTCQlJT01VWF9QQUQoMHg1ODgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RSQU1fU0RDS0UwX19EUkFNX1NEQ0tFMAlJT01VWF9QQUQoMHg1OEMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0RSQU1fU0RRUzFfX0RSQU1fU0RRUzEJSU9NVVhfUEFEKDB4NTkwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9EUkFNX0RRTTFfX0RSQU1fRFFNMQlJT01VWF9QQUQoMHg1OTQsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX1BNSUNfT05fUkVRX19QTUlDX09OX1JFUQlJT01VWF9QQUQoMHg1OTgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX1BNSUNfU1RCWV9SRVFfX1BNSUNfU1RCWV9SRVEJSU9NVVhfUEFEKDB4NTlDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DTEVfX0dQSU9fNl83CQlJT01VWF9QQUQoMHg1QTAsIDB4MjI4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9BTEVfX0dQSU9fNl84CUlPTVVYX1BBRCgweDVBNCwgMHgyMkMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05BTkRGX1dQX0JfX0dQSU9fNl85CUlPTVVYX1BBRCgweDVBOCwgMHgyMzAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05BTkRGX1JCMF9fR1BJT182XzEwCUlPTVVYX1BBRCgweDVBQywgMHgyMzQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMF9fR1BJT182XzExCUlPTVVYX1BBRCgweDVCMCwgMHgyMzgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMV9fR1BJT182XzE0CUlPTVVYX1BBRCgweDVCNCwgMHgyM0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMl9fR1BJT182XzE1CUlPTVVYX1BBRCgweDVCOCwgMHgyNDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTM19fR1BJT182XzE2CUlPTVVYX1BBRCgweDVCQywgMHgyNDQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05WQ0NfTkFOREZfX05WQ0NfTkFOREYJSU9NVVhfUEFEKDB4NUMwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9GRUNfTURJT19fR1BJT18xXzIyCQlJT01VWF9QQUQoMHg1QzQsIDB4MjQ4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9GRUNfUkVGX0NMS19fR1BJT18xXzIzCUlPTVVYX1BBRCgweDVDOCwgMHgyNEMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0ZFQ19SWF9FUl9fR1BJT18xXzI0CUlPTVVYX1BBRCgweDVDQywgMHgyNTAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0ZFQ19DUlNfRFZfX0dQSU9fMV8yNQlJT01VWF9QQUQoMHg1RDAsIDB4MjU0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9GRUNfUlhEMV9fR1BJT18xXzI2CQlJT01VWF9QQUQoMHg1RDQsIDB4MjU4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9GRUNfUlhEMF9fR1BJT18xXzI3CQlJT01VWF9QQUQoMHg1RDgsIDB4MjVDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9GRUNfVFhfRU5fX0dQSU9fMV8yOAlJT01VWF9QQUQoMHg1REMsIDB4MjYwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9GRUNfVFhEMV9fR1BJT18xXzI5CQlJT01VWF9QQUQoMHg1RTAsIDB4MjY0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9GRUNfVFhEMF9fR1BJT18xXzMwCQlJT01VWF9QQUQoMHg1RTQsIDB4MjY4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9GRUNfTURDX19HUElPXzFfMzEJCUlPTVVYX1BBRCgweDVFOCwgMHgyNkMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX05WQ0NfRkVDX19OVkNDX0ZFQwkJSU9NVVhfUEFEKDB4NUVDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfRElPV19fR1BJT182XzE3CUlPTVVYX1BBRCgweDVGMCwgMHgyNzAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9ETUFDS19fR1BJT182XzE4CUlPTVVYX1BBRCgweDVGNCwgMHgyNzQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9ETUFSUV9fR1BJT183XzAJSU9NVVhfUEFEKDB4NUY4LCAweDI3OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0JVRkZFUl9FTl9fR1BJT183XzEJSU9NVVhfUEFEKDB4NUZDLCAweDI3QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0lOVFJRX19HUElPXzdfMgkJSU9NVVhfUEFEKDB4NjAwLCAweDI4MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RJT1JfX0dQSU9fN18zCQlJT01VWF9QQUQoMHg2MDQsIDB4Mjg0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfUkVTRVRfQl9fR1BJT183XzQJSU9NVVhfUEFEKDB4NjA4LCAweDI4OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0lPUkRZX19HUElPXzdfNQkJSU9NVVhfUEFEKDB4NjBDLCAweDI4QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RBXzBfX0dQSU9fN182CQlJT01VWF9QQUQoMHg2MTAsIDB4MjkwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfREFfMV9fR1BJT183XzcJCUlPTVVYX1BBRCgweDYxNCwgMHgyOTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9EQV8yX19HUElPXzdfOAkJSU9NVVhfUEFEKDB4NjE4LCAweDI5OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0NTXzBfX0dQSU9fN185CQlJT01VWF9QQUQoMHg2MUMsIDB4MjlDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfQ1NfMV9fR1BJT183XzEwCQlJT01VWF9QQUQoMHg2MjAsIDB4MkEwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9OVkNDX0FUQTJfX05WQ0NfQVRBMglJT01VWF9QQUQoMHg2MjQsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBMF9fR1BJT18yXzAJSU9NVVhfUEFEKDB4NjI4LCAweDJBNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEExX19HUElPXzJfMQlJT01VWF9QQUQoMHg2MkMsIDB4MkE4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTJfX0dQSU9fMl8yCUlPTVVYX1BBRCgweDYzMCwgMHgyQUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBM19fR1BJT18yXzMJSU9NVVhfUEFEKDB4NjM0LCAweDJCMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEE0X19HUElPXzJfNAlJT01VWF9QQUQoMHg2MzgsIDB4MkI0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTVfX0dQSU9fMl81CUlPTVVYX1BBRCgweDYzQywgMHgyQjgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBNl9fR1BJT18yXzYJSU9NVVhfUEFEKDB4NjQwLCAweDJCQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEE3X19HUElPXzJfNwlJT01VWF9QQUQoMHg2NDQsIDB4MkMwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQThfX0dQSU9fMl84CUlPTVVYX1BBRCgweDY0OCwgMHgyQzQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBOV9fR1BJT18yXzkJSU9NVVhfUEFEKDB4NjRDLCAweDJDOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEExMF9fR1BJT18yXzEwCUlPTVVYX1BBRCgweDY1MCwgMHgyQ0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBMTFfX0dQSU9fMl8xMQlJT01VWF9QQUQoMHg2NTQsIDB4MkQwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTEyX19HUElPXzJfMTIJSU9NVVhfUEFEKDB4NjU4LCAweDJENCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEExM19fR1BJT18yXzEzCUlPTVVYX1BBRCgweDY1QywgMHgyRDgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBMTRfX0dQSU9fMl8xNAlJT01VWF9QQUQoMHg2NjAsIDB4MkRDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTE1X19HUElPXzJfMTUJSU9NVVhfUEFEKDB4NjY0LCAweDJFMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfTlZDQ19BVEEwX19OVkNDX0FUQTAJSU9NVVhfUEFEKDB4NjY4LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTBfX0dQSU9fMV8xNglJT01VWF9QQUQoMHg2NkMsIDB4MkU0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTFfX0dQSU9fMV8xNwlJT01VWF9QQUQoMHg2NzAsIDB4MkU4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9TRDFfQ01EX19HUElPXzFfMTgJCUlPTVVYX1BBRCgweDY3NCwgMHgyRUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBMl9fR1BJT18xXzE5CUlPTVVYX1BBRCgweDY3OCwgMHgyRjAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX1NEMV9DTEtfX0dQSU9fMV8yMAkJSU9NVVhfUEFEKDB4NjdDLCAweDJGNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEzX19HUElPXzFfMjEJSU9NVVhfUEFEKDB4NjgwLCAweDJGOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfTlZDQ19TRDFfX05WQ0NfU0QxCQlJT01VWF9QQUQoMHg2ODQsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX1NEMl9DTEtfX0dQSU9fMV8xMAkJSU9NVVhfUEFEKDB4Njg4LCAweDJGQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfU0QyX0NNRF9fR1BJT18xXzExCQlJT01VWF9QQUQoMHg2OEMsIDB4MzAwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTNfX0dQSU9fMV8xMglJT01VWF9QQUQoMHg2OTAsIDB4MzA0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTJfX0dQSU9fMV8xMwlJT01VWF9QQUQoMHg2OTQsIDB4MzA4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTFfX0dQSU9fMV8xNAlJT01VWF9QQUQoMHg2OTgsIDB4MzBDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTBfX0dQSU9fMV8xNQlJT01VWF9QQUQoMHg2OUMsIDB4MzEwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9OVkNDX1NEMl9fTlZDQ19TRDIJCUlPTVVYX1BBRCgweDZBMCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT18wX19HUElPXzFfMAkJSU9NVVhfUEFEKDB4NkE0LCAweDMxNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT18xX19HUElPXzFfMQkJSU9NVVhfUEFEKDB4NkE4LCAweDMxOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT185X19HUElPXzFfOQkJSU9NVVhfUEFEKDB4NkFDLCAweDMxQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT18zX19HUElPXzFfMwkJSU9NVVhfUEFEKDB4NkIwLCAweDMyMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT182X19HUElPXzFfNgkJSU9NVVhfUEFEKDB4NkI0LCAweDMyNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT18yX19HUElPXzFfMgkJSU9NVVhfUEFEKDB4NkI4LCAweDMyOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT180X19HUElPXzFfNAkJSU9NVVhfUEFEKDB4NkJDLCAweDMyQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT181X19HUElPXzFfNQkJSU9NVVhfUEFEKDB4NkMwLCAweDMzMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT183X19HUElPXzFfNwkJSU9NVVhfUEFEKDB4NkM0LCAweDMzNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT184X19HUElPXzFfOAkJSU9NVVhfUEFEKDB4NkM4LCAweDMzOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1BJT18xNl9fR1BJT183XzExCQlJT01VWF9QQUQoMHg2Q0MsIDB4MzNDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9HUElPXzE3X19HUElPXzdfMTIJCUlPTVVYX1BBRCgweDZEMCwgMHgzNDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0dQSU9fMThfX0dQSU9fN18xMwkJSU9NVVhfUEFEKDB4NkQ0LCAweDM0NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfTlZDQ19HUElPX19OVkNDX0dQSU8JSU9NVVhfUEFEKDB4NkQ4LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9QT1JfQl9fUE9SX0IJCQlJT01VWF9QQUQoMHg2REMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0JPT1RfTU9ERTFfX0JPT1RfTU9ERTEJSU9NVVhfUEFEKDB4NkUwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9SRVNFVF9JTl9CX19SRVNFVF9JTl9CCUlPTVVYX1BBRCgweDZFNCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfQk9PVF9NT0RFMF9fQk9PVF9NT0RFMAlJT01VWF9QQUQoMHg2RTgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX1RFU1RfTU9ERV9fVEVTVF9NT0RFCUlPTVVYX1BBRCgweDZFQywgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1JQX0FERERTX19HUlBfQURERFMJSU9NVVhfUEFEKDB4NkYwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9HUlBfRERSTU9ERV9DVExfX0dSUF9ERFJNT0RFX0NUTAlJT01VWF9QQUQoMHg2RjQsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0dSUF9ERFJQS0VfX0dSUF9ERFJQS0UJSU9NVVhfUEFEKDB4NkZDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9HUlBfRERSUEtfX0dSUF9ERFJQSwlJT01VWF9QQUQoMHg3MDgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0dSUF9URVJNX0NUTDNfX0dSUF9URVJNX0NUTDMJSU9NVVhfUEFEKDB4NzBDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9HUlBfRERSSFlTX19HUlBfRERSSFlTCUlPTVVYX1BBRCgweDcxMCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1JQX0REUk1PREVfX0dSUF9ERFJNT0RFCUlPTVVYX1BBRCgweDcxNCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1JQX0IwRFNfX0dSUF9CMERTCQlJT01VWF9QQUQoMHg3MTgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0dSUF9CMURTX19HUlBfQjFEUwkJSU9NVVhfUEFEKDB4NzFDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUzX1BBRF9HUlBfQ1RMRFNfX0dSUF9DVExEUwlJT01VWF9QQUQoMHg3MjAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0dSUF9ERFJfVFlQRV9fR1JQX0REUl9UWVBFCUlPTVVYX1BBRCgweDcyNCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1M19QQURfR1JQX0IyRFNfX0dSUF9CMkRTCQlJT01VWF9QQUQoMHg3MjgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTNfUEFEX0dSUF9CM0RTX19HUlBfQjNEUwkJSU9NVVhfUEFEKDB4NzJDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE5X19LUFBfQ09MXzUJCShfTVg1M19QQURfR1BJT18xOV9fS1BQX0NPTF81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xOV9fR1BJTzRfNQkJKF9NWDUzX1BBRF9HUElPXzE5X19HUElPNF81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xOV9fQ0NNX0NMS08JCShfTVg1M19QQURfR1BJT18xOV9fQ0NNX0NMS08gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE5X19TUERJRl9PVVQxCQkoX01YNTNfUEFEX0dQSU9fMTlfX1NQRElGX09VVDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE5X19SVENfQ0VfUlRDX0VYVF9UUklHMgkJKF9NWDUzX1BBRF9HUElPXzE5X19SVENfQ0VfUlRDX0VYVF9UUklHMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTlfX0VDU1BJMV9SRFkJCShfTVg1M19QQURfR1BJT18xOV9fRUNTUEkxX1JEWSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTlfX0ZFQ19UREFUQV8zCQkoX01YNTNfUEFEX0dQSU9fMTlfX0ZFQ19UREFUQV8zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xOV9fU1JDX0lOVF9CT09UCQkoX01YNTNfUEFEX0dQSU9fMTlfX1NSQ19JTlRfQk9PVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wwX19LUFBfQ09MXzAJCShfTVg1M19QQURfS0VZX0NPTDBfX0tQUF9DT0xfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wwX19HUElPNF82CQkoX01YNTNfUEFEX0tFWV9DT0wwX19HUElPNF82IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDBfX0FVRE1VWF9BVUQ1X1RYQwkJKF9NWDUzX1BBRF9LRVlfQ09MMF9fQVVETVVYX0FVRDVfVFhDIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDBfX1VBUlQ0X1RYRF9NVVgJCShfTVg1M19QQURfS0VZX0NPTDBfX1VBUlQ0X1RYRF9NVVggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MMF9fRUNTUEkxX1NDTEsJCShfTVg1M19QQURfS0VZX0NPTDBfX0VDU1BJMV9TQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDBfX0ZFQ19SREFUQV8zCQkoX01YNTNfUEFEX0tFWV9DT0wwX19GRUNfUkRBVEFfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wwX19TUkNfQU5ZX1BVX1JTVAkJKF9NWDUzX1BBRF9LRVlfQ09MMF9fU1JDX0FOWV9QVV9SU1QgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XMF9fS1BQX1JPV18wCQkoX01YNTNfUEFEX0tFWV9ST1cwX19LUFBfUk9XXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XMF9fR1BJTzRfNwkJKF9NWDUzX1BBRF9LRVlfUk9XMF9fR1BJTzRfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cwX19BVURNVVhfQVVENV9UWEQJCShfTVg1M19QQURfS0VZX1JPVzBfX0FVRE1VWF9BVUQ1X1RYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cwX19VQVJUNF9SWERfTVVYCQkoX01YNTNfUEFEX0tFWV9ST1cwX19VQVJUNF9SWERfTVVYIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzBfX0VDU1BJMV9NT1NJCQkoX01YNTNfUEFEX0tFWV9ST1cwX19FQ1NQSTFfTU9TSSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cwX19GRUNfVFhfRVIJCShfTVg1M19QQURfS0VZX1JPVzBfX0ZFQ19UWF9FUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wxX19LUFBfQ09MXzEJCShfTVg1M19QQURfS0VZX0NPTDFfX0tQUF9DT0xfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wxX19HUElPNF84CQkoX01YNTNfUEFEX0tFWV9DT0wxX19HUElPNF84IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDFfX0FVRE1VWF9BVUQ1X1RYRlMJCShfTVg1M19QQURfS0VZX0NPTDFfX0FVRE1VWF9BVUQ1X1RYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MMV9fVUFSVDVfVFhEX01VWAkJKF9NWDUzX1BBRF9LRVlfQ09MMV9fVUFSVDVfVFhEX01VWCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wxX19FQ1NQSTFfTUlTTwkJKF9NWDUzX1BBRF9LRVlfQ09MMV9fRUNTUEkxX01JU08gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MMV9fRkVDX1JYX0NMSwkJKF9NWDUzX1BBRF9LRVlfQ09MMV9fRkVDX1JYX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wxX19VU0JQSFkxX1RYUkVBRFkJCShfTVg1M19QQURfS0VZX0NPTDFfX1VTQlBIWTFfVFhSRUFEWSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cxX19LUFBfUk9XXzEJCShfTVg1M19QQURfS0VZX1JPVzFfX0tQUF9ST1dfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cxX19HUElPNF85CQkoX01YNTNfUEFEX0tFWV9ST1cxX19HUElPNF85IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzFfX0FVRE1VWF9BVUQ1X1JYRAkJKF9NWDUzX1BBRF9LRVlfUk9XMV9fQVVETVVYX0FVRDVfUlhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzFfX1VBUlQ1X1JYRF9NVVgJCShfTVg1M19QQURfS0VZX1JPVzFfX1VBUlQ1X1JYRF9NVVggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XMV9fRUNTUEkxX1NTMAkJKF9NWDUzX1BBRF9LRVlfUk9XMV9fRUNTUEkxX1NTMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cxX19GRUNfQ09MCQkoX01YNTNfUEFEX0tFWV9ST1cxX19GRUNfQ09MIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzFfX1VTQlBIWTFfUlhWQUxJRAkJKF9NWDUzX1BBRF9LRVlfUk9XMV9fVVNCUEhZMV9SWFZBTElEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDJfX0tQUF9DT0xfMgkJKF9NWDUzX1BBRF9LRVlfQ09MMl9fS1BQX0NPTF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDJfX0dQSU80XzEwCQkoX01YNTNfUEFEX0tFWV9DT0wyX19HUElPNF8xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wyX19DQU4xX1RYQ0FOCQkoX01YNTNfUEFEX0tFWV9DT0wyX19DQU4xX1RYQ0FOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDJfX0ZFQ19NRElPCQkoX01YNTNfUEFEX0tFWV9DT0wyX19GRUNfTURJTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wyX19FQ1NQSTFfU1MxCQkoX01YNTNfUEFEX0tFWV9DT0wyX19FQ1NQSTFfU1MxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDJfX0ZFQ19SREFUQV8yCQkoX01YNTNfUEFEX0tFWV9DT0wyX19GRUNfUkRBVEFfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wyX19VU0JQSFkxX1JYQUNUSVZFCQkoX01YNTNfUEFEX0tFWV9DT0wyX19VU0JQSFkxX1JYQUNUSVZFIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzJfX0tQUF9ST1dfMgkJKF9NWDUzX1BBRF9LRVlfUk9XMl9fS1BQX1JPV18yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzJfX0dQSU80XzExCQkoX01YNTNfUEFEX0tFWV9ST1cyX19HUElPNF8xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cyX19DQU4xX1JYQ0FOCQkoX01YNTNfUEFEX0tFWV9ST1cyX19DQU4xX1JYQ0FOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzJfX0ZFQ19NREMJCShfTVg1M19QQURfS0VZX1JPVzJfX0ZFQ19NREMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XMl9fRUNTUEkxX1NTMgkJKF9NWDUzX1BBRF9LRVlfUk9XMl9fRUNTUEkxX1NTMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cyX19GRUNfVERBVEFfMgkJKF9NWDUzX1BBRF9LRVlfUk9XMl9fRkVDX1REQVRBXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XMl9fVVNCUEhZMV9SWEVSUk9SCQkoX01YNTNfUEFEX0tFWV9ST1cyX19VU0JQSFkxX1JYRVJST1IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MM19fS1BQX0NPTF8zCQkoX01YNTNfUEFEX0tFWV9DT0wzX19LUFBfQ09MXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MM19fR1BJTzRfMTIJCShfTVg1M19QQURfS0VZX0NPTDNfX0dQSU80XzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDNfX1VTQk9IM19IMl9EUAkJKF9NWDUzX1BBRF9LRVlfQ09MM19fVVNCT0gzX0gyX0RQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDNfX1NQRElGX0lOMQkJKF9NWDUzX1BBRF9LRVlfQ09MM19fU1BESUZfSU4xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDNfX0kyQzJfU0NMCQkoX01YNTNfUEFEX0tFWV9DT0wzX19JMkMyX1NDTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wzX19FQ1NQSTFfU1MzCQkoX01YNTNfUEFEX0tFWV9DT0wzX19FQ1NQSTFfU1MzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDNfX0ZFQ19DUlMJCShfTVg1M19QQURfS0VZX0NPTDNfX0ZFQ19DUlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MM19fVVNCUEhZMV9TSUVDTE9DSwkJKF9NWDUzX1BBRF9LRVlfQ09MM19fVVNCUEhZMV9TSUVDTE9DSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1czX19LUFBfUk9XXzMJCShfTVg1M19QQURfS0VZX1JPVzNfX0tQUF9ST1dfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1czX19HUElPNF8xMwkJKF9NWDUzX1BBRF9LRVlfUk9XM19fR1BJTzRfMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XM19fVVNCT0gzX0gyX0RNCQkoX01YNTNfUEFEX0tFWV9ST1czX19VU0JPSDNfSDJfRE0gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XM19fQ0NNX0FTUkNfRVhUX0NMSwkJKF9NWDUzX1BBRF9LRVlfUk9XM19fQ0NNX0FTUkNfRVhUX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1czX19JMkMyX1NEQQkJKF9NWDUzX1BBRF9LRVlfUk9XM19fSTJDMl9TREEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XM19fT1NDMzJLXzMyS19PVVQJCShfTVg1M19QQURfS0VZX1JPVzNfX09TQzMyS18zMktfT1VUIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzNfX0NDTV9QTEw0X0JZUAkJKF9NWDUzX1BBRF9LRVlfUk9XM19fQ0NNX1BMTDRfQllQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzNfX1VTQlBIWTFfTElORVNUQVRFXzAJCShfTVg1M19QQURfS0VZX1JPVzNfX1VTQlBIWTFfTElORVNUQVRFXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MNF9fS1BQX0NPTF80CQkoX01YNTNfUEFEX0tFWV9DT0w0X19LUFBfQ09MXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MNF9fR1BJTzRfMTQJCShfTVg1M19QQURfS0VZX0NPTDRfX0dQSU80XzE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDRfX0NBTjJfVFhDQU4JCShfTVg1M19QQURfS0VZX0NPTDRfX0NBTjJfVFhDQU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MNF9fSVBVX1NJU0dfNAkJKF9NWDUzX1BBRF9LRVlfQ09MNF9fSVBVX1NJU0dfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0w0X19VQVJUNV9SVFMJCShfTVg1M19QQURfS0VZX0NPTDRfX1VBUlQ1X1JUUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0w0X19VU0JPSDNfVVNCT1RHX09DCQkoX01YNTNfUEFEX0tFWV9DT0w0X19VU0JPSDNfVVNCT1RHX09DIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDRfX1VTQlBIWTFfTElORVNUQVRFXzEJCShfTVg1M19QQURfS0VZX0NPTDRfX1VTQlBIWTFfTElORVNUQVRFXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XNF9fS1BQX1JPV180CQkoX01YNTNfUEFEX0tFWV9ST1c0X19LUFBfUk9XXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XNF9fR1BJTzRfMTUJCShfTVg1M19QQURfS0VZX1JPVzRfX0dQSU80XzE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzRfX0NBTjJfUlhDQU4JCShfTVg1M19QQURfS0VZX1JPVzRfX0NBTjJfUlhDQU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XNF9fSVBVX1NJU0dfNQkJKF9NWDUzX1BBRF9LRVlfUk9XNF9fSVBVX1NJU0dfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1c0X19VQVJUNV9DVFMJCShfTVg1M19QQURfS0VZX1JPVzRfX1VBUlQ1X0NUUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1c0X19VU0JPSDNfVVNCT1RHX1BXUgkJKF9NWDUzX1BBRF9LRVlfUk9XNF9fVVNCT0gzX1VTQk9UR19QV1IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XNF9fVVNCUEhZMV9WQlVTVkFMSUQJCShfTVg1M19QQURfS0VZX1JPVzRfX1VTQlBIWTFfVkJVU1ZBTElEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX0RJU1BfQ0xLX19JUFVfREkwX0RJU1BfQ0xLCQkoX01YNTNfUEFEX0RJMF9ESVNQX0NMS19fSVBVX0RJMF9ESVNQX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9ESVNQX0NMS19fR1BJTzRfMTYJCShfTVg1M19QQURfREkwX0RJU1BfQ0xLX19HUElPNF8xNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9ESVNQX0NMS19fVVNCT0gzX1VTQkgyX0RJUgkJKF9NWDUzX1BBRF9ESTBfRElTUF9DTEtfX1VTQk9IM19VU0JIMl9ESVIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfRElTUF9DTEtfX1NETUFfREVCVUdfQ09SRV9TVEFURV8wCQkoX01YNTNfUEFEX0RJMF9ESVNQX0NMS19fU0RNQV9ERUJVR19DT1JFX1NUQVRFXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfRElTUF9DTEtfX0VNSV9FTUlfREVCVUdfMAkJKF9NWDUzX1BBRF9ESTBfRElTUF9DTEtfX0VNSV9FTUlfREVCVUdfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9ESVNQX0NMS19fVVNCUEhZMV9BVkFMSUQJCShfTVg1M19QQURfREkwX0RJU1BfQ0xLX19VU0JQSFkxX0FWQUxJRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9QSU4xNV9fSVBVX0RJMF9QSU4xNQkJKF9NWDUzX1BBRF9ESTBfUElOMTVfX0lQVV9ESTBfUElOMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOMTVfX0dQSU80XzE3CQkoX01YNTNfUEFEX0RJMF9QSU4xNV9fR1BJTzRfMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOMTVfX0FVRE1VWF9BVUQ2X1RYQwkJKF9NWDUzX1BBRF9ESTBfUElOMTVfX0FVRE1VWF9BVUQ2X1RYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9QSU4xNV9fU0RNQV9ERUJVR19DT1JFX1NUQVRFXzEJCShfTVg1M19QQURfREkwX1BJTjE1X19TRE1BX0RFQlVHX0NPUkVfU1RBVEVfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9QSU4xNV9fRU1JX0VNSV9ERUJVR18xCQkoX01YNTNfUEFEX0RJMF9QSU4xNV9fRU1JX0VNSV9ERUJVR18xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjE1X19VU0JQSFkxX0JWQUxJRAkJKF9NWDUzX1BBRF9ESTBfUElOMTVfX1VTQlBIWTFfQlZBTElEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjJfX0lQVV9ESTBfUElOMgkJKF9NWDUzX1BBRF9ESTBfUElOMl9fSVBVX0RJMF9QSU4yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjJfX0dQSU80XzE4CQkoX01YNTNfUEFEX0RJMF9QSU4yX19HUElPNF8xOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9QSU4yX19BVURNVVhfQVVENl9UWEQJCShfTVg1M19QQURfREkwX1BJTjJfX0FVRE1VWF9BVUQ2X1RYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9QSU4yX19TRE1BX0RFQlVHX0NPUkVfU1RBVEVfMgkJKF9NWDUzX1BBRF9ESTBfUElOMl9fU0RNQV9ERUJVR19DT1JFX1NUQVRFXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOMl9fRU1JX0VNSV9ERUJVR18yCQkoX01YNTNfUEFEX0RJMF9QSU4yX19FTUlfRU1JX0RFQlVHXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOMl9fVVNCUEhZMV9FTkRTRVNTSU9OCQkoX01YNTNfUEFEX0RJMF9QSU4yX19VU0JQSFkxX0VORFNFU1NJT04gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOM19fSVBVX0RJMF9QSU4zCQkoX01YNTNfUEFEX0RJMF9QSU4zX19JUFVfREkwX1BJTjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOM19fR1BJTzRfMTkJCShfTVg1M19QQURfREkwX1BJTjNfX0dQSU80XzE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjNfX0FVRE1VWF9BVUQ2X1RYRlMJCShfTVg1M19QQURfREkwX1BJTjNfX0FVRE1VWF9BVUQ2X1RYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOM19fU0RNQV9ERUJVR19DT1JFX1NUQVRFXzMJCShfTVg1M19QQURfREkwX1BJTjNfX1NETUFfREVCVUdfQ09SRV9TVEFURV8zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjNfX0VNSV9FTUlfREVCVUdfMwkJKF9NWDUzX1BBRF9ESTBfUElOM19fRU1JX0VNSV9ERUJVR18zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjNfX1VTQlBIWTFfSURESUcJCShfTVg1M19QQURfREkwX1BJTjNfX1VTQlBIWTFfSURESUcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElONF9fSVBVX0RJMF9QSU40CQkoX01YNTNfUEFEX0RJMF9QSU40X19JUFVfREkwX1BJTjQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElONF9fR1BJTzRfMjAJCShfTVg1M19QQURfREkwX1BJTjRfX0dQSU80XzIwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjRfX0FVRE1VWF9BVUQ2X1JYRAkJKF9NWDUzX1BBRF9ESTBfUElONF9fQVVETVVYX0FVRDZfUlhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjRfX0VTREhDMV9XUAkJKF9NWDUzX1BBRF9ESTBfUElONF9fRVNESEMxX1dQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjRfX1NETUFfREVCVUdfWUlFTEQJCShfTVg1M19QQURfREkwX1BJTjRfX1NETUFfREVCVUdfWUlFTEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElONF9fRU1JX0VNSV9ERUJVR180CQkoX01YNTNfUEFEX0RJMF9QSU40X19FTUlfRU1JX0RFQlVHXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElONF9fVVNCUEhZMV9IT1NURElTQ09OTkVDVAkJKF9NWDUzX1BBRF9ESTBfUElONF9fVVNCUEhZMV9IT1NURElTQ09OTkVDVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDBfX0lQVV9ESVNQMF9EQVRfMAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQwX19JUFVfRElTUDBfREFUXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQwX19HUElPNF8yMQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQwX19HUElPNF8yMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDBfX0NTUElfU0NMSwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQwX19DU1BJX1NDTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQwX19VU0JPSDNfVVNCSDJfREFUQV8wCQkoX01YNTNfUEFEX0RJU1AwX0RBVDBfX1VTQk9IM19VU0JIMl9EQVRBXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQwX19TRE1BX0RFQlVHX0NPUkVfUlVOCQkoX01YNTNfUEFEX0RJU1AwX0RBVDBfX1NETUFfREVCVUdfQ09SRV9SVU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQwX19FTUlfRU1JX0RFQlVHXzUJCShfTVg1M19QQURfRElTUDBfREFUMF9fRU1JX0VNSV9ERUJVR181IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMF9fVVNCUEhZMl9UWFJFQURZCQkoX01YNTNfUEFEX0RJU1AwX0RBVDBfX1VTQlBIWTJfVFhSRUFEWSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDFfX0lQVV9ESVNQMF9EQVRfMQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxX19JUFVfRElTUDBfREFUXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxX19HUElPNF8yMgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxX19HUElPNF8yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDFfX0NTUElfTU9TSQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxX19DU1BJX01PU0kgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxX19VU0JPSDNfVVNCSDJfREFUQV8xCQkoX01YNTNfUEFEX0RJU1AwX0RBVDFfX1VTQk9IM19VU0JIMl9EQVRBXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxX19TRE1BX0RFQlVHX0VWRU5UX0NIQU5ORUxfU0VMCQkoX01YNTNfUEFEX0RJU1AwX0RBVDFfX1NETUFfREVCVUdfRVZFTlRfQ0hBTk5FTF9TRUwgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxX19FTUlfRU1JX0RFQlVHXzYJCShfTVg1M19QQURfRElTUDBfREFUMV9fRU1JX0VNSV9ERUJVR182IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMV9fVVNCUEhZMl9SWFZBTElECQkoX01YNTNfUEFEX0RJU1AwX0RBVDFfX1VTQlBIWTJfUlhWQUxJRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDJfX0lQVV9ESVNQMF9EQVRfMgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyX19JUFVfRElTUDBfREFUXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyX19HUElPNF8yMwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyX19HUElPNF8yMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDJfX0NTUElfTUlTTwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyX19DU1BJX01JU08gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyX19VU0JPSDNfVVNCSDJfREFUQV8yCQkoX01YNTNfUEFEX0RJU1AwX0RBVDJfX1VTQk9IM19VU0JIMl9EQVRBXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyX19TRE1BX0RFQlVHX01PREUJCShfTVg1M19QQURfRElTUDBfREFUMl9fU0RNQV9ERUJVR19NT0RFIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMl9fRU1JX0VNSV9ERUJVR183CQkoX01YNTNfUEFEX0RJU1AwX0RBVDJfX0VNSV9FTUlfREVCVUdfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDJfX1VTQlBIWTJfUlhBQ1RJVkUJCShfTVg1M19QQURfRElTUDBfREFUMl9fVVNCUEhZMl9SWEFDVElWRSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDNfX0lQVV9ESVNQMF9EQVRfMwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQzX19JUFVfRElTUDBfREFUXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQzX19HUElPNF8yNAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQzX19HUElPNF8yNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDNfX0NTUElfU1MwCQkoX01YNTNfUEFEX0RJU1AwX0RBVDNfX0NTUElfU1MwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUM19fVVNCT0gzX1VTQkgyX0RBVEFfMwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQzX19VU0JPSDNfVVNCSDJfREFUQV8zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUM19fU0RNQV9ERUJVR19CVVNfRVJST1IJCShfTVg1M19QQURfRElTUDBfREFUM19fU0RNQV9ERUJVR19CVVNfRVJST1IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQzX19FTUlfRU1JX0RFQlVHXzgJCShfTVg1M19QQURfRElTUDBfREFUM19fRU1JX0VNSV9ERUJVR184IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUM19fVVNCUEhZMl9SWEVSUk9SCQkoX01YNTNfUEFEX0RJU1AwX0RBVDNfX1VTQlBIWTJfUlhFUlJPUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDRfX0lQVV9ESVNQMF9EQVRfNAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19JUFVfRElTUDBfREFUXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ0X19HUElPNF8yNQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19HUElPNF8yNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDRfX0NTUElfU1MxCQkoX01YNTNfUEFEX0RJU1AwX0RBVDRfX0NTUElfU1MxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUNF9fVVNCT0gzX1VTQkgyX0RBVEFfNAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19VU0JPSDNfVVNCSDJfREFUQV80IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUNF9fU0RNQV9ERUJVR19CVVNfUldCCQkoX01YNTNfUEFEX0RJU1AwX0RBVDRfX1NETUFfREVCVUdfQlVTX1JXQiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDRfX0VNSV9FTUlfREVCVUdfOQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ0X19FTUlfRU1JX0RFQlVHXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ0X19VU0JQSFkyX1NJRUNMT0NLCQkoX01YNTNfUEFEX0RJU1AwX0RBVDRfX1VTQlBIWTJfU0lFQ0xPQ0sgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ1X19JUFVfRElTUDBfREFUXzUJCShfTVg1M19QQURfRElTUDBfREFUNV9fSVBVX0RJU1AwX0RBVF81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUNV9fR1BJTzRfMjYJCShfTVg1M19QQURfRElTUDBfREFUNV9fR1BJTzRfMjYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ1X19DU1BJX1NTMgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ1X19DU1BJX1NTMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDVfX1VTQk9IM19VU0JIMl9EQVRBXzUJCShfTVg1M19QQURfRElTUDBfREFUNV9fVVNCT0gzX1VTQkgyX0RBVEFfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDVfX1NETUFfREVCVUdfTUFUQ0hFRF9ETUJVUwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ1X19TRE1BX0RFQlVHX01BVENIRURfRE1CVVMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ1X19FTUlfRU1JX0RFQlVHXzEwCQkoX01YNTNfUEFEX0RJU1AwX0RBVDVfX0VNSV9FTUlfREVCVUdfMTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ1X19VU0JQSFkyX0xJTkVTVEFURV8wCQkoX01YNTNfUEFEX0RJU1AwX0RBVDVfX1VTQlBIWTJfTElORVNUQVRFXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ2X19JUFVfRElTUDBfREFUXzYJCShfTVg1M19QQURfRElTUDBfREFUNl9fSVBVX0RJU1AwX0RBVF82IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUNl9fR1BJTzRfMjcJCShfTVg1M19QQURfRElTUDBfREFUNl9fR1BJTzRfMjcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ2X19DU1BJX1NTMwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ2X19DU1BJX1NTMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDZfX1VTQk9IM19VU0JIMl9EQVRBXzYJCShfTVg1M19QQURfRElTUDBfREFUNl9fVVNCT0gzX1VTQkgyX0RBVEFfNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDZfX1NETUFfREVCVUdfUlRCVUZGRVJfV1JJVEUJCShfTVg1M19QQURfRElTUDBfREFUNl9fU0RNQV9ERUJVR19SVEJVRkZFUl9XUklURSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDZfX0VNSV9FTUlfREVCVUdfMTEJCShfTVg1M19QQURfRElTUDBfREFUNl9fRU1JX0VNSV9ERUJVR18xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDZfX1VTQlBIWTJfTElORVNUQVRFXzEJCShfTVg1M19QQURfRElTUDBfREFUNl9fVVNCUEhZMl9MSU5FU1RBVEVfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDdfX0lQVV9ESVNQMF9EQVRfNwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19JUFVfRElTUDBfREFUXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ3X19HUElPNF8yOAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19HUElPNF8yOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDdfX0NTUElfUkRZCQkoX01YNTNfUEFEX0RJU1AwX0RBVDdfX0NTUElfUkRZIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUN19fVVNCT0gzX1VTQkgyX0RBVEFfNwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19VU0JPSDNfVVNCSDJfREFUQV83IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUN19fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzAJCShfTVg1M19QQURfRElTUDBfREFUN19fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ3X19FTUlfRU1JX0RFQlVHXzEyCQkoX01YNTNfUEFEX0RJU1AwX0RBVDdfX0VNSV9FTUlfREVCVUdfMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ3X19VU0JQSFkyX1ZCVVNWQUxJRAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ3X19VU0JQSFkyX1ZCVVNWQUxJRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDhfX0lQVV9ESVNQMF9EQVRfOAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ4X19JUFVfRElTUDBfREFUXzggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ4X19HUElPNF8yOQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ4X19HUElPNF8yOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDhfX1BXTTFfUFdNTwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ4X19QV00xX1BXTU8gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ4X19XRE9HMV9XRE9HX0IJCShfTVg1M19QQURfRElTUDBfREFUOF9fV0RPRzFfV0RPR19CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUOF9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzEJCShfTVg1M19QQURfRElTUDBfREFUOF9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ4X19FTUlfRU1JX0RFQlVHXzEzCQkoX01YNTNfUEFEX0RJU1AwX0RBVDhfX0VNSV9FTUlfREVCVUdfMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ4X19VU0JQSFkyX0FWQUxJRAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ4X19VU0JQSFkyX0FWQUxJRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDlfX0lQVV9ESVNQMF9EQVRfOQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ5X19JUFVfRElTUDBfREFUXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ5X19HUElPNF8zMAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ5X19HUElPNF8zMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDlfX1BXTTJfUFdNTwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ5X19QV00yX1BXTU8gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ5X19XRE9HMl9XRE9HX0IJCShfTVg1M19QQURfRElTUDBfREFUOV9fV0RPRzJfV0RPR19CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUOV9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzIJCShfTVg1M19QQURfRElTUDBfREFUOV9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ5X19FTUlfRU1JX0RFQlVHXzE0CQkoX01YNTNfUEFEX0RJU1AwX0RBVDlfX0VNSV9FTUlfREVCVUdfMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQ5X19VU0JQSFkyX1ZTVEFUVVNfMAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQ5X19VU0JQSFkyX1ZTVEFUVVNfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDEwX19JUFVfRElTUDBfREFUXzEwCQkoX01YNTNfUEFEX0RJU1AwX0RBVDEwX19JUFVfRElTUDBfREFUXzEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTBfX0dQSU80XzMxCQkoX01YNTNfUEFEX0RJU1AwX0RBVDEwX19HUElPNF8zMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDEwX19VU0JPSDNfVVNCSDJfU1RQCQkoX01YNTNfUEFEX0RJU1AwX0RBVDEwX19VU0JPSDNfVVNCSDJfU1RQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTBfX1NETUFfREVCVUdfRVZFTlRfQ0hBTk5FTF8zCQkoX01YNTNfUEFEX0RJU1AwX0RBVDEwX19TRE1BX0RFQlVHX0VWRU5UX0NIQU5ORUxfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDEwX19FTUlfRU1JX0RFQlVHXzE1CQkoX01YNTNfUEFEX0RJU1AwX0RBVDEwX19FTUlfRU1JX0RFQlVHXzE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTBfX1VTQlBIWTJfVlNUQVRVU18xCQkoX01YNTNfUEFEX0RJU1AwX0RBVDEwX19VU0JQSFkyX1ZTVEFUVVNfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDExX19JUFVfRElTUDBfREFUXzExCQkoX01YNTNfUEFEX0RJU1AwX0RBVDExX19JUFVfRElTUDBfREFUXzExIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTFfX0dQSU81XzUJCShfTVg1M19QQURfRElTUDBfREFUMTFfX0dQSU81XzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxMV9fVVNCT0gzX1VTQkgyX05YVAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxMV9fVVNCT0gzX1VTQkgyX05YVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDExX19TRE1BX0RFQlVHX0VWRU5UX0NIQU5ORUxfNAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxMV9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxMV9fRU1JX0VNSV9ERUJVR18xNgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxMV9fRU1JX0VNSV9ERUJVR18xNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDExX19VU0JQSFkyX1ZTVEFUVVNfMgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxMV9fVVNCUEhZMl9WU1RBVFVTXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxMl9fSVBVX0RJU1AwX0RBVF8xMgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxMl9fSVBVX0RJU1AwX0RBVF8xMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDEyX19HUElPNV82CQkoX01YNTNfUEFEX0RJU1AwX0RBVDEyX19HUElPNV82IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTJfX1VTQk9IM19VU0JIMl9DTEsJCShfTVg1M19QQURfRElTUDBfREFUMTJfX1VTQk9IM19VU0JIMl9DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxMl9fU0RNQV9ERUJVR19FVkVOVF9DSEFOTkVMXzUJCShfTVg1M19QQURfRElTUDBfREFUMTJfX1NETUFfREVCVUdfRVZFTlRfQ0hBTk5FTF81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTJfX0VNSV9FTUlfREVCVUdfMTcJCShfTVg1M19QQURfRElTUDBfREFUMTJfX0VNSV9FTUlfREVCVUdfMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxMl9fVVNCUEhZMl9WU1RBVFVTXzMJCShfTVg1M19QQURfRElTUDBfREFUMTJfX1VTQlBIWTJfVlNUQVRVU18zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTNfX0lQVV9ESVNQMF9EQVRfMTMJCShfTVg1M19QQURfRElTUDBfREFUMTNfX0lQVV9ESVNQMF9EQVRfMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxM19fR1BJTzVfNwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxM19fR1BJTzVfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDEzX19BVURNVVhfQVVENV9SWEZTCQkoX01YNTNfUEFEX0RJU1AwX0RBVDEzX19BVURNVVhfQVVENV9SWEZTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTNfX1NETUFfREVCVUdfRVZUX0NITl9MSU5FU18wCQkoX01YNTNfUEFEX0RJU1AwX0RBVDEzX19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDEzX19FTUlfRU1JX0RFQlVHXzE4CQkoX01YNTNfUEFEX0RJU1AwX0RBVDEzX19FTUlfRU1JX0RFQlVHXzE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTNfX1VTQlBIWTJfVlNUQVRVU180CQkoX01YNTNfUEFEX0RJU1AwX0RBVDEzX19VU0JQSFkyX1ZTVEFUVVNfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE0X19JUFVfRElTUDBfREFUXzE0CQkoX01YNTNfUEFEX0RJU1AwX0RBVDE0X19JUFVfRElTUDBfREFUXzE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTRfX0dQSU81XzgJCShfTVg1M19QQURfRElTUDBfREFUMTRfX0dQSU81XzggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNF9fQVVETVVYX0FVRDVfUlhDCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE0X19BVURNVVhfQVVENV9SWEMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNF9fU0RNQV9ERUJVR19FVlRfQ0hOX0xJTkVTXzEJCShfTVg1M19QQURfRElTUDBfREFUMTRfX1NETUFfREVCVUdfRVZUX0NITl9MSU5FU18xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTRfX0VNSV9FTUlfREVCVUdfMTkJCShfTVg1M19QQURfRElTUDBfREFUMTRfX0VNSV9FTUlfREVCVUdfMTkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNF9fVVNCUEhZMl9WU1RBVFVTXzUJCShfTVg1M19QQURfRElTUDBfREFUMTRfX1VTQlBIWTJfVlNUQVRVU181IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTVfX0lQVV9ESVNQMF9EQVRfMTUJCShfTVg1M19QQURfRElTUDBfREFUMTVfX0lQVV9ESVNQMF9EQVRfMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNV9fR1BJTzVfOQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxNV9fR1BJTzVfOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE1X19FQ1NQSTFfU1MxCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE1X19FQ1NQSTFfU1MxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTVfX0VDU1BJMl9TUzEJCShfTVg1M19QQURfRElTUDBfREFUMTVfX0VDU1BJMl9TUzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNV9fU0RNQV9ERUJVR19FVlRfQ0hOX0xJTkVTXzIJCShfTVg1M19QQURfRElTUDBfREFUMTVfX1NETUFfREVCVUdfRVZUX0NITl9MSU5FU18yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTVfX0VNSV9FTUlfREVCVUdfMjAJCShfTVg1M19QQURfRElTUDBfREFUMTVfX0VNSV9FTUlfREVCVUdfMjAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNV9fVVNCUEhZMl9WU1RBVFVTXzYJCShfTVg1M19QQURfRElTUDBfREFUMTVfX1VTQlBIWTJfVlNUQVRVU182IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTZfX0lQVV9ESVNQMF9EQVRfMTYJCShfTVg1M19QQURfRElTUDBfREFUMTZfX0lQVV9ESVNQMF9EQVRfMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNl9fR1BJTzVfMTAJCShfTVg1M19QQURfRElTUDBfREFUMTZfX0dQSU81XzEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTZfX0VDU1BJMl9NT1NJCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE2X19FQ1NQSTJfTU9TSSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE2X19BVURNVVhfQVVENV9UWEMJCShfTVg1M19QQURfRElTUDBfREFUMTZfX0FVRE1VWF9BVUQ1X1RYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE2X19TRE1BX0VYVF9FVkVOVF8wCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE2X19TRE1BX0VYVF9FVkVOVF8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTZfX1NETUFfREVCVUdfRVZUX0NITl9MSU5FU18zCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE2X19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE2X19FTUlfRU1JX0RFQlVHXzIxCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE2X19FTUlfRU1JX0RFQlVHXzIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTZfX1VTQlBIWTJfVlNUQVRVU183CQkoX01YNTNfUEFEX0RJU1AwX0RBVDE2X19VU0JQSFkyX1ZTVEFUVVNfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE3X19JUFVfRElTUDBfREFUXzE3CQkoX01YNTNfUEFEX0RJU1AwX0RBVDE3X19JUFVfRElTUDBfREFUXzE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTdfX0dQSU81XzExCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE3X19HUElPNV8xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE3X19FQ1NQSTJfTUlTTwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxN19fRUNTUEkyX01JU08gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxN19fQVVETVVYX0FVRDVfVFhECQkoX01YNTNfUEFEX0RJU1AwX0RBVDE3X19BVURNVVhfQVVENV9UWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxN19fU0RNQV9FWFRfRVZFTlRfMQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxN19fU0RNQV9FWFRfRVZFTlRfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE3X19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfNAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxN19fU0RNQV9ERUJVR19FVlRfQ0hOX0xJTkVTXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxN19fRU1JX0VNSV9ERUJVR18yMgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxN19fRU1JX0VNSV9ERUJVR18yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE4X19JUFVfRElTUDBfREFUXzE4CQkoX01YNTNfUEFEX0RJU1AwX0RBVDE4X19JUFVfRElTUDBfREFUXzE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMThfX0dQSU81XzEyCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE4X19HUElPNV8xMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE4X19FQ1NQSTJfU1MwCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE4X19FQ1NQSTJfU1MwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMThfX0FVRE1VWF9BVUQ1X1RYRlMJCShfTVg1M19QQURfRElTUDBfREFUMThfX0FVRE1VWF9BVUQ1X1RYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxOF9fQVVETVVYX0FVRDRfUlhGUwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxOF9fQVVETVVYX0FVRDRfUlhGUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE4X19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfNQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxOF9fU0RNQV9ERUJVR19FVlRfQ0hOX0xJTkVTXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxOF9fRU1JX0VNSV9ERUJVR18yMwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxOF9fRU1JX0VNSV9ERUJVR18yMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE4X19FTUlfV0VJTV9DU18yCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE4X19FTUlfV0VJTV9DU18yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTlfX0lQVV9ESVNQMF9EQVRfMTkJCShfTVg1M19QQURfRElTUDBfREFUMTlfX0lQVV9ESVNQMF9EQVRfMTkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxOV9fR1BJTzVfMTMJCShfTVg1M19QQURfRElTUDBfREFUMTlfX0dQSU81XzEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTlfX0VDU1BJMl9TQ0xLCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE5X19FQ1NQSTJfU0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE5X19BVURNVVhfQVVENV9SWEQJCShfTVg1M19QQURfRElTUDBfREFUMTlfX0FVRE1VWF9BVUQ1X1JYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE5X19BVURNVVhfQVVENF9SWEMJCShfTVg1M19QQURfRElTUDBfREFUMTlfX0FVRE1VWF9BVUQ0X1JYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE5X19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfNgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxOV9fU0RNQV9ERUJVR19FVlRfQ0hOX0xJTkVTXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxOV9fRU1JX0VNSV9ERUJVR18yNAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQxOV9fRU1JX0VNSV9ERUJVR18yNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE5X19FTUlfV0VJTV9DU18zCQkoX01YNTNfUEFEX0RJU1AwX0RBVDE5X19FTUlfV0VJTV9DU18zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjBfX0lQVV9ESVNQMF9EQVRfMjAJCShfTVg1M19QQURfRElTUDBfREFUMjBfX0lQVV9ESVNQMF9EQVRfMjAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMF9fR1BJTzVfMTQJCShfTVg1M19QQURfRElTUDBfREFUMjBfX0dQSU81XzE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjBfX0VDU1BJMV9TQ0xLCQkoX01YNTNfUEFEX0RJU1AwX0RBVDIwX19FQ1NQSTFfU0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIwX19BVURNVVhfQVVENF9UWEMJCShfTVg1M19QQURfRElTUDBfREFUMjBfX0FVRE1VWF9BVUQ0X1RYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIwX19TRE1BX0RFQlVHX0VWVF9DSE5fTElORVNfNwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyMF9fU0RNQV9ERUJVR19FVlRfQ0hOX0xJTkVTXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMF9fRU1JX0VNSV9ERUJVR18yNQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyMF9fRU1JX0VNSV9ERUJVR18yNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIwX19TQVRBX1BIWV9UREkJCShfTVg1M19QQURfRElTUDBfREFUMjBfX1NBVEFfUEhZX1RESSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIxX19JUFVfRElTUDBfREFUXzIxCQkoX01YNTNfUEFEX0RJU1AwX0RBVDIxX19JUFVfRElTUDBfREFUXzIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjFfX0dQSU81XzE1CQkoX01YNTNfUEFEX0RJU1AwX0RBVDIxX19HUElPNV8xNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIxX19FQ1NQSTFfTU9TSQkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyMV9fRUNTUEkxX01PU0kgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMV9fQVVETVVYX0FVRDRfVFhECQkoX01YNTNfUEFEX0RJU1AwX0RBVDIxX19BVURNVVhfQVVENF9UWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMV9fU0RNQV9ERUJVR19CVVNfREVWSUNFXzAJCShfTVg1M19QQURfRElTUDBfREFUMjFfX1NETUFfREVCVUdfQlVTX0RFVklDRV8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjFfX0VNSV9FTUlfREVCVUdfMjYJCShfTVg1M19QQURfRElTUDBfREFUMjFfX0VNSV9FTUlfREVCVUdfMjYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMV9fU0FUQV9QSFlfVERPCQkoX01YNTNfUEFEX0RJU1AwX0RBVDIxX19TQVRBX1BIWV9URE8gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMl9fSVBVX0RJU1AwX0RBVF8yMgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyMl9fSVBVX0RJU1AwX0RBVF8yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIyX19HUElPNV8xNgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyMl9fR1BJTzVfMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMl9fRUNTUEkxX01JU08JCShfTVg1M19QQURfRElTUDBfREFUMjJfX0VDU1BJMV9NSVNPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjJfX0FVRE1VWF9BVUQ0X1RYRlMJCShfTVg1M19QQURfRElTUDBfREFUMjJfX0FVRE1VWF9BVUQ0X1RYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMl9fU0RNQV9ERUJVR19CVVNfREVWSUNFXzEJCShfTVg1M19QQURfRElTUDBfREFUMjJfX1NETUFfREVCVUdfQlVTX0RFVklDRV8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjJfX0VNSV9FTUlfREVCVUdfMjcJCShfTVg1M19QQURfRElTUDBfREFUMjJfX0VNSV9FTUlfREVCVUdfMjcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMl9fU0FUQV9QSFlfVENLCQkoX01YNTNfUEFEX0RJU1AwX0RBVDIyX19TQVRBX1BIWV9UQ0sgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyM19fSVBVX0RJU1AwX0RBVF8yMwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyM19fSVBVX0RJU1AwX0RBVF8yMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIzX19HUElPNV8xNwkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyM19fR1BJTzVfMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyM19fRUNTUEkxX1NTMAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyM19fRUNTUEkxX1NTMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIzX19BVURNVVhfQVVENF9SWEQJCShfTVg1M19QQURfRElTUDBfREFUMjNfX0FVRE1VWF9BVUQ0X1JYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIzX19TRE1BX0RFQlVHX0JVU19ERVZJQ0VfMgkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyM19fU0RNQV9ERUJVR19CVVNfREVWSUNFXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyM19fRU1JX0VNSV9ERUJVR18yOAkJKF9NWDUzX1BBRF9ESVNQMF9EQVQyM19fRU1JX0VNSV9ERUJVR18yOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIzX19TQVRBX1BIWV9UTVMJCShfTVg1M19QQURfRElTUDBfREFUMjNfX1NBVEFfUEhZX1RNUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfUElYQ0xLX19JUFVfQ1NJMF9QSVhDTEsJCShfTVg1M19QQURfQ1NJMF9QSVhDTEtfX0lQVV9DU0kwX1BJWENMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfUElYQ0xLX19HUElPNV8xOAkJKF9NWDUzX1BBRF9DU0kwX1BJWENMS19fR1BJTzVfMTggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX1BJWENMS19fU0RNQV9ERUJVR19QQ18wCQkoX01YNTNfUEFEX0NTSTBfUElYQ0xLX19TRE1BX0RFQlVHX1BDXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX1BJWENMS19fRU1JX0VNSV9ERUJVR18yOQkJKF9NWDUzX1BBRF9DU0kwX1BJWENMS19fRU1JX0VNSV9ERUJVR18yOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfTUNMS19fSVBVX0NTSTBfSFNZTkMJCShfTVg1M19QQURfQ1NJMF9NQ0xLX19JUFVfQ1NJMF9IU1lOQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfTUNMS19fR1BJTzVfMTkJCShfTVg1M19QQURfQ1NJMF9NQ0xLX19HUElPNV8xOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfTUNMS19fQ0NNX0NTSTBfTUNMSwkJKF9NWDUzX1BBRF9DU0kwX01DTEtfX0NDTV9DU0kwX01DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX01DTEtfX1NETUFfREVCVUdfUENfMQkJKF9NWDUzX1BBRF9DU0kwX01DTEtfX1NETUFfREVCVUdfUENfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfTUNMS19fRU1JX0VNSV9ERUJVR18zMAkJKF9NWDUzX1BBRF9DU0kwX01DTEtfX0VNSV9FTUlfREVCVUdfMzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX01DTEtfX1RQSVVfVFJDVEwJCShfTVg1M19QQURfQ1NJMF9NQ0xLX19UUElVX1RSQ1RMIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVRBX0VOX19JUFVfQ1NJMF9EQVRBX0VOCQkoX01YNTNfUEFEX0NTSTBfREFUQV9FTl9fSVBVX0NTSTBfREFUQV9FTiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUQV9FTl9fR1BJTzVfMjAJCShfTVg1M19QQURfQ1NJMF9EQVRBX0VOX19HUElPNV8yMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUQV9FTl9fU0RNQV9ERUJVR19QQ18yCQkoX01YNTNfUEFEX0NTSTBfREFUQV9FTl9fU0RNQV9ERUJVR19QQ18yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVRBX0VOX19FTUlfRU1JX0RFQlVHXzMxCQkoX01YNTNfUEFEX0NTSTBfREFUQV9FTl9fRU1JX0VNSV9ERUJVR18zMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUQV9FTl9fVFBJVV9UUkNMSwkJKF9NWDUzX1BBRF9DU0kwX0RBVEFfRU5fX1RQSVVfVFJDTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX1ZTWU5DX19JUFVfQ1NJMF9WU1lOQwkJKF9NWDUzX1BBRF9DU0kwX1ZTWU5DX19JUFVfQ1NJMF9WU1lOQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfVlNZTkNfX0dQSU81XzIxCQkoX01YNTNfUEFEX0NTSTBfVlNZTkNfX0dQSU81XzIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9WU1lOQ19fU0RNQV9ERUJVR19QQ18zCQkoX01YNTNfUEFEX0NTSTBfVlNZTkNfX1NETUFfREVCVUdfUENfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfVlNZTkNfX0VNSV9FTUlfREVCVUdfMzIJCShfTVg1M19QQURfQ1NJMF9WU1lOQ19fRU1JX0VNSV9ERUJVR18zMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfVlNZTkNfX1RQSVVfVFJBQ0VfMAkJKF9NWDUzX1BBRF9DU0kwX1ZTWU5DX19UUElVX1RSQUNFXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDRfX0lQVV9DU0kwX0RfNAkJKF9NWDUzX1BBRF9DU0kwX0RBVDRfX0lQVV9DU0kwX0RfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNF9fR1BJTzVfMjIJCShfTVg1M19QQURfQ1NJMF9EQVQ0X19HUElPNV8yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNF9fS1BQX0NPTF81CQkoX01YNTNfUEFEX0NTSTBfREFUNF9fS1BQX0NPTF81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ0X19FQ1NQSTFfU0NMSwkJKF9NWDUzX1BBRF9DU0kwX0RBVDRfX0VDU1BJMV9TQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ0X19VU0JPSDNfVVNCSDNfU1RQCQkoX01YNTNfUEFEX0NTSTBfREFUNF9fVVNCT0gzX1VTQkgzX1NUUCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNF9fQVVETVVYX0FVRDNfVFhDCQkoX01YNTNfUEFEX0NTSTBfREFUNF9fQVVETVVYX0FVRDNfVFhDIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ0X19FTUlfRU1JX0RFQlVHXzMzCQkoX01YNTNfUEFEX0NTSTBfREFUNF9fRU1JX0VNSV9ERUJVR18zMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNF9fVFBJVV9UUkFDRV8xCQkoX01YNTNfUEFEX0NTSTBfREFUNF9fVFBJVV9UUkFDRV8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ1X19JUFVfQ1NJMF9EXzUJCShfTVg1M19QQURfQ1NJMF9EQVQ1X19JUFVfQ1NJMF9EXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDVfX0dQSU81XzIzCQkoX01YNTNfUEFEX0NTSTBfREFUNV9fR1BJTzVfMjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDVfX0tQUF9ST1dfNQkJKF9NWDUzX1BBRF9DU0kwX0RBVDVfX0tQUF9ST1dfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNV9fRUNTUEkxX01PU0kJCShfTVg1M19QQURfQ1NJMF9EQVQ1X19FQ1NQSTFfTU9TSSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNV9fVVNCT0gzX1VTQkgzX05YVAkJKF9NWDUzX1BBRF9DU0kwX0RBVDVfX1VTQk9IM19VU0JIM19OWFQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDVfX0FVRE1VWF9BVUQzX1RYRAkJKF9NWDUzX1BBRF9DU0kwX0RBVDVfX0FVRE1VWF9BVUQzX1RYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNV9fRU1JX0VNSV9ERUJVR18zNAkJKF9NWDUzX1BBRF9DU0kwX0RBVDVfX0VNSV9FTUlfREVCVUdfMzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDVfX1RQSVVfVFJBQ0VfMgkJKF9NWDUzX1BBRF9DU0kwX0RBVDVfX1RQSVVfVFJBQ0VfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNl9fSVBVX0NTSTBfRF82CQkoX01YNTNfUEFEX0NTSTBfREFUNl9fSVBVX0NTSTBfRF82IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ2X19HUElPNV8yNAkJKF9NWDUzX1BBRF9DU0kwX0RBVDZfX0dQSU81XzI0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ2X19LUFBfQ09MXzYJCShfTVg1M19QQURfQ1NJMF9EQVQ2X19LUFBfQ09MXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDZfX0VDU1BJMV9NSVNPCQkoX01YNTNfUEFEX0NTSTBfREFUNl9fRUNTUEkxX01JU08gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDZfX1VTQk9IM19VU0JIM19DTEsJCShfTVg1M19QQURfQ1NJMF9EQVQ2X19VU0JPSDNfVVNCSDNfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ2X19BVURNVVhfQVVEM19UWEZTCQkoX01YNTNfUEFEX0NTSTBfREFUNl9fQVVETVVYX0FVRDNfVFhGUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUNl9fRU1JX0VNSV9ERUJVR18zNQkJKF9NWDUzX1BBRF9DU0kwX0RBVDZfX0VNSV9FTUlfREVCVUdfMzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDZfX1RQSVVfVFJBQ0VfMwkJKF9NWDUzX1BBRF9DU0kwX0RBVDZfX1RQSVVfVFJBQ0VfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUN19fSVBVX0NTSTBfRF83CQkoX01YNTNfUEFEX0NTSTBfREFUN19fSVBVX0NTSTBfRF83IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ3X19HUElPNV8yNQkJKF9NWDUzX1BBRF9DU0kwX0RBVDdfX0dQSU81XzI1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ3X19LUFBfUk9XXzYJCShfTVg1M19QQURfQ1NJMF9EQVQ3X19LUFBfUk9XXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDdfX0VDU1BJMV9TUzAJCShfTVg1M19QQURfQ1NJMF9EQVQ3X19FQ1NQSTFfU1MwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ3X19VU0JPSDNfVVNCSDNfRElSCQkoX01YNTNfUEFEX0NTSTBfREFUN19fVVNCT0gzX1VTQkgzX0RJUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUN19fQVVETVVYX0FVRDNfUlhECQkoX01YNTNfUEFEX0NTSTBfREFUN19fQVVETVVYX0FVRDNfUlhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ3X19FTUlfRU1JX0RFQlVHXzM2CQkoX01YNTNfUEFEX0NTSTBfREFUN19fRU1JX0VNSV9ERUJVR18zNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUN19fVFBJVV9UUkFDRV80CQkoX01YNTNfUEFEX0NTSTBfREFUN19fVFBJVV9UUkFDRV80IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ4X19JUFVfQ1NJMF9EXzgJCShfTVg1M19QQURfQ1NJMF9EQVQ4X19JUFVfQ1NJMF9EXzggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDhfX0dQSU81XzI2CQkoX01YNTNfUEFEX0NTSTBfREFUOF9fR1BJTzVfMjYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDhfX0tQUF9DT0xfNwkJKF9NWDUzX1BBRF9DU0kwX0RBVDhfX0tQUF9DT0xfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOF9fRUNTUEkyX1NDTEsJCShfTVg1M19QQURfQ1NJMF9EQVQ4X19FQ1NQSTJfU0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOF9fVVNCT0gzX1VTQkgzX09DCQkoX01YNTNfUEFEX0NTSTBfREFUOF9fVVNCT0gzX1VTQkgzX09DIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ4X19JMkMxX1NEQQkJKF9NWDUzX1BBRF9DU0kwX0RBVDhfX0kyQzFfU0RBIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ4X19FTUlfRU1JX0RFQlVHXzM3CQkoX01YNTNfUEFEX0NTSTBfREFUOF9fRU1JX0VNSV9ERUJVR18zNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOF9fVFBJVV9UUkFDRV81CQkoX01YNTNfUEFEX0NTSTBfREFUOF9fVFBJVV9UUkFDRV81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ5X19JUFVfQ1NJMF9EXzkJCShfTVg1M19QQURfQ1NJMF9EQVQ5X19JUFVfQ1NJMF9EXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDlfX0dQSU81XzI3CQkoX01YNTNfUEFEX0NTSTBfREFUOV9fR1BJTzVfMjcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDlfX0tQUF9ST1dfNwkJKF9NWDUzX1BBRF9DU0kwX0RBVDlfX0tQUF9ST1dfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOV9fRUNTUEkyX01PU0kJCShfTVg1M19QQURfQ1NJMF9EQVQ5X19FQ1NQSTJfTU9TSSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOV9fVVNCT0gzX1VTQkgzX1BXUgkJKF9NWDUzX1BBRF9DU0kwX0RBVDlfX1VTQk9IM19VU0JIM19QV1IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDlfX0kyQzFfU0NMCQkoX01YNTNfUEFEX0NTSTBfREFUOV9fSTJDMV9TQ0wgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDlfX0VNSV9FTUlfREVCVUdfMzgJCShfTVg1M19QQURfQ1NJMF9EQVQ5X19FTUlfRU1JX0RFQlVHXzM4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ5X19UUElVX1RSQUNFXzYJCShfTVg1M19QQURfQ1NJMF9EQVQ5X19UUElVX1RSQUNFXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDEwX19JUFVfQ1NJMF9EXzEwCQkoX01YNTNfUEFEX0NTSTBfREFUMTBfX0lQVV9DU0kwX0RfMTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDEwX19HUElPNV8yOAkJKF9NWDUzX1BBRF9DU0kwX0RBVDEwX19HUElPNV8yOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTBfX1VBUlQxX1RYRF9NVVgJCShfTVg1M19QQURfQ1NJMF9EQVQxMF9fVUFSVDFfVFhEX01VWCB8IE1VWF9QQURfQ1RSTChNWDUzX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDEwX19FQ1NQSTJfTUlTTwkJKF9NWDUzX1BBRF9DU0kwX0RBVDEwX19FQ1NQSTJfTUlTTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTBfX0FVRE1VWF9BVUQzX1JYQwkJKF9NWDUzX1BBRF9DU0kwX0RBVDEwX19BVURNVVhfQVVEM19SWEMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDEwX19TRE1BX0RFQlVHX1BDXzQJCShfTVg1M19QQURfQ1NJMF9EQVQxMF9fU0RNQV9ERUJVR19QQ180IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxMF9fRU1JX0VNSV9ERUJVR18zOQkJKF9NWDUzX1BBRF9DU0kwX0RBVDEwX19FTUlfRU1JX0RFQlVHXzM5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxMF9fVFBJVV9UUkFDRV83CQkoX01YNTNfUEFEX0NTSTBfREFUMTBfX1RQSVVfVFJBQ0VfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTFfX0lQVV9DU0kwX0RfMTEJCShfTVg1M19QQURfQ1NJMF9EQVQxMV9fSVBVX0NTSTBfRF8xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTFfX0dQSU81XzI5CQkoX01YNTNfUEFEX0NTSTBfREFUMTFfX0dQSU81XzI5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxMV9fVUFSVDFfUlhEX01VWAkJKF9NWDUzX1BBRF9DU0kwX0RBVDExX19VQVJUMV9SWERfTVVYIHwgTVVYX1BBRF9DVFJMKE1YNTNfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTFfX0VDU1BJMl9TUzAJCShfTVg1M19QQURfQ1NJMF9EQVQxMV9fRUNTUEkyX1NTMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTFfX0FVRE1VWF9BVUQzX1JYRlMJCShfTVg1M19QQURfQ1NJMF9EQVQxMV9fQVVETVVYX0FVRDNfUlhGUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTFfX1NETUFfREVCVUdfUENfNQkJKF9NWDUzX1BBRF9DU0kwX0RBVDExX19TRE1BX0RFQlVHX1BDXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDExX19FTUlfRU1JX0RFQlVHXzQwCQkoX01YNTNfUEFEX0NTSTBfREFUMTFfX0VNSV9FTUlfREVCVUdfNDAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDExX19UUElVX1RSQUNFXzgJCShfTVg1M19QQURfQ1NJMF9EQVQxMV9fVFBJVV9UUkFDRV84IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxMl9fSVBVX0NTSTBfRF8xMgkJKF9NWDUzX1BBRF9DU0kwX0RBVDEyX19JUFVfQ1NJMF9EXzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxMl9fR1BJTzVfMzAJCShfTVg1M19QQURfQ1NJMF9EQVQxMl9fR1BJTzVfMzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDEyX19VQVJUNF9UWERfTVVYCQkoX01YNTNfUEFEX0NTSTBfREFUMTJfX1VBUlQ0X1RYRF9NVVggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDEyX19VU0JPSDNfVVNCSDNfREFUQV8wCQkoX01YNTNfUEFEX0NTSTBfREFUMTJfX1VTQk9IM19VU0JIM19EQVRBXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDEyX19TRE1BX0RFQlVHX1BDXzYJCShfTVg1M19QQURfQ1NJMF9EQVQxMl9fU0RNQV9ERUJVR19QQ182IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxMl9fRU1JX0VNSV9ERUJVR180MQkJKF9NWDUzX1BBRF9DU0kwX0RBVDEyX19FTUlfRU1JX0RFQlVHXzQxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxMl9fVFBJVV9UUkFDRV85CQkoX01YNTNfUEFEX0NTSTBfREFUMTJfX1RQSVVfVFJBQ0VfOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTNfX0lQVV9DU0kwX0RfMTMJCShfTVg1M19QQURfQ1NJMF9EQVQxM19fSVBVX0NTSTBfRF8xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTNfX0dQSU81XzMxCQkoX01YNTNfUEFEX0NTSTBfREFUMTNfX0dQSU81XzMxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxM19fVUFSVDRfUlhEX01VWAkJKF9NWDUzX1BBRF9DU0kwX0RBVDEzX19VQVJUNF9SWERfTVVYIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxM19fVVNCT0gzX1VTQkgzX0RBVEFfMQkJKF9NWDUzX1BBRF9DU0kwX0RBVDEzX19VU0JPSDNfVVNCSDNfREFUQV8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxM19fU0RNQV9ERUJVR19QQ183CQkoX01YNTNfUEFEX0NTSTBfREFUMTNfX1NETUFfREVCVUdfUENfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTNfX0VNSV9FTUlfREVCVUdfNDIJCShfTVg1M19QQURfQ1NJMF9EQVQxM19fRU1JX0VNSV9ERUJVR180MiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTNfX1RQSVVfVFJBQ0VfMTAJCShfTVg1M19QQURfQ1NJMF9EQVQxM19fVFBJVV9UUkFDRV8xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTRfX0lQVV9DU0kwX0RfMTQJCShfTVg1M19QQURfQ1NJMF9EQVQxNF9fSVBVX0NTSTBfRF8xNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTRfX0dQSU82XzAJCShfTVg1M19QQURfQ1NJMF9EQVQxNF9fR1BJTzZfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTRfX1VBUlQ1X1RYRF9NVVgJCShfTVg1M19QQURfQ1NJMF9EQVQxNF9fVUFSVDVfVFhEX01VWCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTRfX1VTQk9IM19VU0JIM19EQVRBXzIJCShfTVg1M19QQURfQ1NJMF9EQVQxNF9fVVNCT0gzX1VTQkgzX0RBVEFfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTRfX1NETUFfREVCVUdfUENfOAkJKF9NWDUzX1BBRF9DU0kwX0RBVDE0X19TRE1BX0RFQlVHX1BDXzggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE0X19FTUlfRU1JX0RFQlVHXzQzCQkoX01YNTNfUEFEX0NTSTBfREFUMTRfX0VNSV9FTUlfREVCVUdfNDMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE0X19UUElVX1RSQUNFXzExCQkoX01YNTNfUEFEX0NTSTBfREFUMTRfX1RQSVVfVFJBQ0VfMTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE1X19JUFVfQ1NJMF9EXzE1CQkoX01YNTNfUEFEX0NTSTBfREFUMTVfX0lQVV9DU0kwX0RfMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE1X19HUElPNl8xCQkoX01YNTNfUEFEX0NTSTBfREFUMTVfX0dQSU82XzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE1X19VQVJUNV9SWERfTVVYCQkoX01YNTNfUEFEX0NTSTBfREFUMTVfX1VBUlQ1X1JYRF9NVVggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE1X19VU0JPSDNfVVNCSDNfREFUQV8zCQkoX01YNTNfUEFEX0NTSTBfREFUMTVfX1VTQk9IM19VU0JIM19EQVRBXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE1X19TRE1BX0RFQlVHX1BDXzkJCShfTVg1M19QQURfQ1NJMF9EQVQxNV9fU0RNQV9ERUJVR19QQ185IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxNV9fRU1JX0VNSV9ERUJVR180NAkJKF9NWDUzX1BBRF9DU0kwX0RBVDE1X19FTUlfRU1JX0RFQlVHXzQ0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxNV9fVFBJVV9UUkFDRV8xMgkJKF9NWDUzX1BBRF9DU0kwX0RBVDE1X19UUElVX1RSQUNFXzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxNl9fSVBVX0NTSTBfRF8xNgkJKF9NWDUzX1BBRF9DU0kwX0RBVDE2X19JUFVfQ1NJMF9EXzE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxNl9fR1BJTzZfMgkJKF9NWDUzX1BBRF9DU0kwX0RBVDE2X19HUElPNl8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxNl9fVUFSVDRfUlRTCQkoX01YNTNfUEFEX0NTSTBfREFUMTZfX1VBUlQ0X1JUUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTZfX1VTQk9IM19VU0JIM19EQVRBXzQJCShfTVg1M19QQURfQ1NJMF9EQVQxNl9fVVNCT0gzX1VTQkgzX0RBVEFfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTZfX1NETUFfREVCVUdfUENfMTAJCShfTVg1M19QQURfQ1NJMF9EQVQxNl9fU0RNQV9ERUJVR19QQ18xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTZfX0VNSV9FTUlfREVCVUdfNDUJCShfTVg1M19QQURfQ1NJMF9EQVQxNl9fRU1JX0VNSV9ERUJVR180NSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTZfX1RQSVVfVFJBQ0VfMTMJCShfTVg1M19QQURfQ1NJMF9EQVQxNl9fVFBJVV9UUkFDRV8xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTdfX0lQVV9DU0kwX0RfMTcJCShfTVg1M19QQURfQ1NJMF9EQVQxN19fSVBVX0NTSTBfRF8xNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTdfX0dQSU82XzMJCShfTVg1M19QQURfQ1NJMF9EQVQxN19fR1BJTzZfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTdfX1VBUlQ0X0NUUwkJKF9NWDUzX1BBRF9DU0kwX0RBVDE3X19VQVJUNF9DVFMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE3X19VU0JPSDNfVVNCSDNfREFUQV81CQkoX01YNTNfUEFEX0NTSTBfREFUMTdfX1VTQk9IM19VU0JIM19EQVRBXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE3X19TRE1BX0RFQlVHX1BDXzExCQkoX01YNTNfUEFEX0NTSTBfREFUMTdfX1NETUFfREVCVUdfUENfMTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE3X19FTUlfRU1JX0RFQlVHXzQ2CQkoX01YNTNfUEFEX0NTSTBfREFUMTdfX0VNSV9FTUlfREVCVUdfNDYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE3X19UUElVX1RSQUNFXzE0CQkoX01YNTNfUEFEX0NTSTBfREFUMTdfX1RQSVVfVFJBQ0VfMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE4X19JUFVfQ1NJMF9EXzE4CQkoX01YNTNfUEFEX0NTSTBfREFUMThfX0lQVV9DU0kwX0RfMTggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE4X19HUElPNl80CQkoX01YNTNfUEFEX0NTSTBfREFUMThfX0dQSU82XzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDE4X19VQVJUNV9SVFMJCShfTVg1M19QQURfQ1NJMF9EQVQxOF9fVUFSVDVfUlRTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxOF9fVVNCT0gzX1VTQkgzX0RBVEFfNgkJKF9NWDUzX1BBRF9DU0kwX0RBVDE4X19VU0JPSDNfVVNCSDNfREFUQV82IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxOF9fU0RNQV9ERUJVR19QQ18xMgkJKF9NWDUzX1BBRF9DU0kwX0RBVDE4X19TRE1BX0RFQlVHX1BDXzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxOF9fRU1JX0VNSV9ERUJVR180NwkJKF9NWDUzX1BBRF9DU0kwX0RBVDE4X19FTUlfRU1JX0RFQlVHXzQ3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxOF9fVFBJVV9UUkFDRV8xNQkJKF9NWDUzX1BBRF9DU0kwX0RBVDE4X19UUElVX1RSQUNFXzE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxOV9fSVBVX0NTSTBfRF8xOQkJKF9NWDUzX1BBRF9DU0kwX0RBVDE5X19JUFVfQ1NJMF9EXzE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxOV9fR1BJTzZfNQkJKF9NWDUzX1BBRF9DU0kwX0RBVDE5X19HUElPNl81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQxOV9fVUFSVDVfQ1RTCQkoX01YNTNfUEFEX0NTSTBfREFUMTlfX1VBUlQ1X0NUUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTlfX1VTQk9IM19VU0JIM19EQVRBXzcJCShfTVg1M19QQURfQ1NJMF9EQVQxOV9fVVNCT0gzX1VTQkgzX0RBVEFfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTlfX1NETUFfREVCVUdfUENfMTMJCShfTVg1M19QQURfQ1NJMF9EQVQxOV9fU0RNQV9ERUJVR19QQ18xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTlfX0VNSV9FTUlfREVCVUdfNDgJCShfTVg1M19QQURfQ1NJMF9EQVQxOV9fRU1JX0VNSV9ERUJVR180OCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUMTlfX1VTQlBIWTJfQklTVE9LCQkoX01YNTNfUEFEX0NTSTBfREFUMTlfX1VTQlBIWTJfQklTVE9LIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNV9fRU1JX1dFSU1fQV8yNQkJKF9NWDUzX1BBRF9FSU1fQTI1X19FTUlfV0VJTV9BXzI1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNV9fR1BJTzVfMgkJKF9NWDUzX1BBRF9FSU1fQTI1X19HUElPNV8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNV9fRUNTUEkyX1JEWQkJKF9NWDUzX1BBRF9FSU1fQTI1X19FQ1NQSTJfUkRZIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNV9fSVBVX0RJMV9QSU4xMgkJKF9NWDUzX1BBRF9FSU1fQTI1X19JUFVfREkxX1BJTjEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNV9fQ1NQSV9TUzEJCShfTVg1M19QQURfRUlNX0EyNV9fQ1NQSV9TUzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTI1X19JUFVfREkwX0QxX0NTCQkoX01YNTNfUEFEX0VJTV9BMjVfX0lQVV9ESTBfRDFfQ1MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTI1X19VU0JQSFkxX0JJU1RPSwkJKF9NWDUzX1BBRF9FSU1fQTI1X19VU0JQSFkxX0JJU1RPSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjJfX0VNSV9XRUlNX0VCXzIJCShfTVg1M19QQURfRUlNX0VCMl9fRU1JX1dFSU1fRUJfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjJfX0dQSU8yXzMwCQkoX01YNTNfUEFEX0VJTV9FQjJfX0dQSU8yXzMwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0VCMl9fQ0NNX0RJMV9FWFRfQ0xLCQkoX01YNTNfUEFEX0VJTV9FQjJfX0NDTV9ESTFfRVhUX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjJfX0lQVV9TRVJfRElTUDFfQ1MJCShfTVg1M19QQURfRUlNX0VCMl9fSVBVX1NFUl9ESVNQMV9DUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjJfX0VDU1BJMV9TUzAJCShfTVg1M19QQURfRUlNX0VCMl9fRUNTUEkxX1NTMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjJfX0kyQzJfU0NMCQkoX01YNTNfUEFEX0VJTV9FQjJfX0kyQzJfU0NMIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxNl9fRU1JX1dFSU1fRF8xNgkJKF9NWDUzX1BBRF9FSU1fRDE2X19FTUlfV0VJTV9EXzE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxNl9fR1BJTzNfMTYJCShfTVg1M19QQURfRUlNX0QxNl9fR1BJTzNfMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE2X19JUFVfREkwX1BJTjUJCShfTVg1M19QQURfRUlNX0QxNl9fSVBVX0RJMF9QSU41IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxNl9fSVBVX0RJU1BCMV9TRVJfQ0xLCQkoX01YNTNfUEFEX0VJTV9EMTZfX0lQVV9ESVNQQjFfU0VSX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTZfX0VDU1BJMV9TQ0xLCQkoX01YNTNfUEFEX0VJTV9EMTZfX0VDU1BJMV9TQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxNl9fSTJDMl9TREEJCShfTVg1M19QQURfRUlNX0QxNl9fSTJDMl9TREEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE3X19FTUlfV0VJTV9EXzE3CQkoX01YNTNfUEFEX0VJTV9EMTdfX0VNSV9XRUlNX0RfMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE3X19HUElPM18xNwkJKF9NWDUzX1BBRF9FSU1fRDE3X19HUElPM18xNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTdfX0lQVV9ESTBfUElONgkJKF9NWDUzX1BBRF9FSU1fRDE3X19JUFVfREkwX1BJTjYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE3X19JUFVfRElTUEIxX1NFUl9ESU4JCShfTVg1M19QQURfRUlNX0QxN19fSVBVX0RJU1BCMV9TRVJfRElOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxN19fRUNTUEkxX01JU08JCShfTVg1M19QQURfRUlNX0QxN19fRUNTUEkxX01JU08gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE3X19JMkMzX1NDTAkJKF9NWDUzX1BBRF9FSU1fRDE3X19JMkMzX1NDTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMThfX0VNSV9XRUlNX0RfMTgJCShfTVg1M19QQURfRUlNX0QxOF9fRU1JX1dFSU1fRF8xOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMThfX0dQSU8zXzE4CQkoX01YNTNfUEFEX0VJTV9EMThfX0dQSU8zXzE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxOF9fSVBVX0RJMF9QSU43CQkoX01YNTNfUEFEX0VJTV9EMThfX0lQVV9ESTBfUElONyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMThfX0lQVV9ESVNQQjFfU0VSX0RJTwkJKF9NWDUzX1BBRF9FSU1fRDE4X19JUFVfRElTUEIxX1NFUl9ESU8gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE4X19FQ1NQSTFfTU9TSQkJKF9NWDUzX1BBRF9FSU1fRDE4X19FQ1NQSTFfTU9TSSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMThfX0kyQzNfU0RBCQkoX01YNTNfUEFEX0VJTV9EMThfX0kyQzNfU0RBIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxOF9fSVBVX0RJMV9EMF9DUwkJKF9NWDUzX1BBRF9FSU1fRDE4X19JUFVfREkxX0QwX0NTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxOV9fRU1JX1dFSU1fRF8xOQkJKF9NWDUzX1BBRF9FSU1fRDE5X19FTUlfV0VJTV9EXzE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxOV9fR1BJTzNfMTkJCShfTVg1M19QQURfRUlNX0QxOV9fR1BJTzNfMTkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE5X19JUFVfREkwX1BJTjgJCShfTVg1M19QQURfRUlNX0QxOV9fSVBVX0RJMF9QSU44IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxOV9fSVBVX0RJU1BCMV9TRVJfUlMJCShfTVg1M19QQURfRUlNX0QxOV9fSVBVX0RJU1BCMV9TRVJfUlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE5X19FQ1NQSTFfU1MxCQkoX01YNTNfUEFEX0VJTV9EMTlfX0VDU1BJMV9TUzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE5X19FUElUMV9FUElUTwkJKF9NWDUzX1BBRF9FSU1fRDE5X19FUElUMV9FUElUTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTlfX1VBUlQxX0NUUwkJKF9NWDUzX1BBRF9FSU1fRDE5X19VQVJUMV9DVFMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE5X19VU0JPSDNfVVNCSDJfT0MJCShfTVg1M19QQURfRUlNX0QxOV9fVVNCT0gzX1VTQkgyX09DIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMF9fRU1JX1dFSU1fRF8yMAkJKF9NWDUzX1BBRF9FSU1fRDIwX19FTUlfV0VJTV9EXzIwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMF9fR1BJTzNfMjAJCShfTVg1M19QQURfRUlNX0QyMF9fR1BJTzNfMjAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIwX19JUFVfREkwX1BJTjE2CQkoX01YNTNfUEFEX0VJTV9EMjBfX0lQVV9ESTBfUElOMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIwX19JUFVfU0VSX0RJU1AwX0NTCQkoX01YNTNfUEFEX0VJTV9EMjBfX0lQVV9TRVJfRElTUDBfQ1MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIwX19DU1BJX1NTMAkJKF9NWDUzX1BBRF9FSU1fRDIwX19DU1BJX1NTMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjBfX0VQSVQyX0VQSVRPCQkoX01YNTNfUEFEX0VJTV9EMjBfX0VQSVQyX0VQSVRPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMF9fVUFSVDFfUlRTCQkoX01YNTNfUEFEX0VJTV9EMjBfX1VBUlQxX1JUUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjBfX1VTQk9IM19VU0JIMl9QV1IJCShfTVg1M19QQURfRUlNX0QyMF9fVVNCT0gzX1VTQkgyX1BXUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjFfX0VNSV9XRUlNX0RfMjEJCShfTVg1M19QQURfRUlNX0QyMV9fRU1JX1dFSU1fRF8yMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjFfX0dQSU8zXzIxCQkoX01YNTNfUEFEX0VJTV9EMjFfX0dQSU8zXzIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMV9fSVBVX0RJMF9QSU4xNwkJKF9NWDUzX1BBRF9FSU1fRDIxX19JUFVfREkwX1BJTjE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMV9fSVBVX0RJU1BCMF9TRVJfQ0xLCQkoX01YNTNfUEFEX0VJTV9EMjFfX0lQVV9ESVNQQjBfU0VSX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjFfX0NTUElfU0NMSwkJKF9NWDUzX1BBRF9FSU1fRDIxX19DU1BJX1NDTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIxX19JMkMxX1NDTAkJKF9NWDUzX1BBRF9FSU1fRDIxX19JMkMxX1NDTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjFfX1VTQk9IM19VU0JPVEdfT0MJCShfTVg1M19QQURfRUlNX0QyMV9fVVNCT0gzX1VTQk9UR19PQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjJfX0VNSV9XRUlNX0RfMjIJCShfTVg1M19QQURfRUlNX0QyMl9fRU1JX1dFSU1fRF8yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjJfX0dQSU8zXzIyCQkoX01YNTNfUEFEX0VJTV9EMjJfX0dQSU8zXzIyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMl9fSVBVX0RJMF9QSU4xCQkoX01YNTNfUEFEX0VJTV9EMjJfX0lQVV9ESTBfUElOMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjJfX0lQVV9ESVNQQjBfU0VSX0RJTgkJKF9NWDUzX1BBRF9FSU1fRDIyX19JUFVfRElTUEIwX1NFUl9ESU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIyX19DU1BJX01JU08JCShfTVg1M19QQURfRUlNX0QyMl9fQ1NQSV9NSVNPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMl9fVVNCT0gzX1VTQk9UR19QV1IJCShfTVg1M19QQURfRUlNX0QyMl9fVVNCT0gzX1VTQk9UR19QV1IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIzX19FTUlfV0VJTV9EXzIzCQkoX01YNTNfUEFEX0VJTV9EMjNfX0VNSV9XRUlNX0RfMjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIzX19HUElPM18yMwkJKF9NWDUzX1BBRF9FSU1fRDIzX19HUElPM18yMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjNfX1VBUlQzX0NUUwkJKF9NWDUzX1BBRF9FSU1fRDIzX19VQVJUM19DVFMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIzX19VQVJUMV9EQ0QJCShfTVg1M19QQURfRUlNX0QyM19fVUFSVDFfRENEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyM19fSVBVX0RJMF9EMF9DUwkJKF9NWDUzX1BBRF9FSU1fRDIzX19JUFVfREkwX0QwX0NTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyM19fSVBVX0RJMV9QSU4yCQkoX01YNTNfUEFEX0VJTV9EMjNfX0lQVV9ESTFfUElOMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjNfX0lQVV9DU0kxX0RBVEFfRU4JCShfTVg1M19QQURfRUlNX0QyM19fSVBVX0NTSTFfREFUQV9FTiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjNfX0lQVV9ESTFfUElOMTQJCShfTVg1M19QQURfRUlNX0QyM19fSVBVX0RJMV9QSU4xNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjNfX0VNSV9XRUlNX0VCXzMJCShfTVg1M19QQURfRUlNX0VCM19fRU1JX1dFSU1fRUJfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjNfX0dQSU8yXzMxCQkoX01YNTNfUEFEX0VJTV9FQjNfX0dQSU8yXzMxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0VCM19fVUFSVDNfUlRTCQkoX01YNTNfUEFEX0VJTV9FQjNfX1VBUlQzX1JUUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjNfX1VBUlQxX1JJCQkoX01YNTNfUEFEX0VJTV9FQjNfX1VBUlQxX1JJIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0VCM19fSVBVX0RJMV9QSU4zCQkoX01YNTNfUEFEX0VJTV9FQjNfX0lQVV9ESTFfUElOMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjNfX0lQVV9DU0kxX0hTWU5DCQkoX01YNTNfUEFEX0VJTV9FQjNfX0lQVV9DU0kxX0hTWU5DIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0VCM19fSVBVX0RJMV9QSU4xNgkJKF9NWDUzX1BBRF9FSU1fRUIzX19JUFVfREkxX1BJTjE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyNF9fRU1JX1dFSU1fRF8yNAkJKF9NWDUzX1BBRF9FSU1fRDI0X19FTUlfV0VJTV9EXzI0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyNF9fR1BJTzNfMjQJCShfTVg1M19QQURfRUlNX0QyNF9fR1BJTzNfMjQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI0X19VQVJUM19UWERfTVVYCQkoX01YNTNfUEFEX0VJTV9EMjRfX1VBUlQzX1RYRF9NVVggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI0X19FQ1NQSTFfU1MyCQkoX01YNTNfUEFEX0VJTV9EMjRfX0VDU1BJMV9TUzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI0X19DU1BJX1NTMgkJKF9NWDUzX1BBRF9FSU1fRDI0X19DU1BJX1NTMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjRfX0FVRE1VWF9BVUQ1X1JYRlMJCShfTVg1M19QQURfRUlNX0QyNF9fQVVETVVYX0FVRDVfUlhGUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjRfX0VDU1BJMl9TUzIJCShfTVg1M19QQURfRUlNX0QyNF9fRUNTUEkyX1NTMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjRfX1VBUlQxX0RUUgkJKF9NWDUzX1BBRF9FSU1fRDI0X19VQVJUMV9EVFIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI1X19FTUlfV0VJTV9EXzI1CQkoX01YNTNfUEFEX0VJTV9EMjVfX0VNSV9XRUlNX0RfMjUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI1X19HUElPM18yNQkJKF9NWDUzX1BBRF9FSU1fRDI1X19HUElPM18yNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjVfX1VBUlQzX1JYRF9NVVgJCShfTVg1M19QQURfRUlNX0QyNV9fVUFSVDNfUlhEX01VWCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjVfX0VDU1BJMV9TUzMJCShfTVg1M19QQURfRUlNX0QyNV9fRUNTUEkxX1NTMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjVfX0NTUElfU1MzCQkoX01YNTNfUEFEX0VJTV9EMjVfX0NTUElfU1MzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyNV9fQVVETVVYX0FVRDVfUlhDCQkoX01YNTNfUEFEX0VJTV9EMjVfX0FVRE1VWF9BVUQ1X1JYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjVfX0VDU1BJMl9TUzMJCShfTVg1M19QQURfRUlNX0QyNV9fRUNTUEkyX1NTMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjVfX1VBUlQxX0RTUgkJKF9NWDUzX1BBRF9FSU1fRDI1X19VQVJUMV9EU1IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI2X19FTUlfV0VJTV9EXzI2CQkoX01YNTNfUEFEX0VJTV9EMjZfX0VNSV9XRUlNX0RfMjYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI2X19HUElPM18yNgkJKF9NWDUzX1BBRF9FSU1fRDI2X19HUElPM18yNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjZfX1VBUlQyX1RYRF9NVVgJCShfTVg1M19QQURfRUlNX0QyNl9fVUFSVDJfVFhEX01VWCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjZfX0ZJUklfUlhECQkoX01YNTNfUEFEX0VJTV9EMjZfX0ZJUklfUlhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyNl9fSVBVX0NTSTBfRF8xCQkoX01YNTNfUEFEX0VJTV9EMjZfX0lQVV9DU0kwX0RfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjZfX0lQVV9ESTFfUElOMTEJCShfTVg1M19QQURfRUlNX0QyNl9fSVBVX0RJMV9QSU4xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjZfX0lQVV9TSVNHXzIJCShfTVg1M19QQURfRUlNX0QyNl9fSVBVX1NJU0dfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjZfX0lQVV9ESVNQMV9EQVRfMjIJCShfTVg1M19QQURfRUlNX0QyNl9fSVBVX0RJU1AxX0RBVF8yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjdfX0VNSV9XRUlNX0RfMjcJCShfTVg1M19QQURfRUlNX0QyN19fRU1JX1dFSU1fRF8yNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjdfX0dQSU8zXzI3CQkoX01YNTNfUEFEX0VJTV9EMjdfX0dQSU8zXzI3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyN19fVUFSVDJfUlhEX01VWAkJKF9NWDUzX1BBRF9FSU1fRDI3X19VQVJUMl9SWERfTVVYIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyN19fRklSSV9UWEQJCShfTVg1M19QQURfRUlNX0QyN19fRklSSV9UWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI3X19JUFVfQ1NJMF9EXzAJCShfTVg1M19QQURfRUlNX0QyN19fSVBVX0NTSTBfRF8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyN19fSVBVX0RJMV9QSU4xMwkJKF9NWDUzX1BBRF9FSU1fRDI3X19JUFVfREkxX1BJTjEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyN19fSVBVX1NJU0dfMwkJKF9NWDUzX1BBRF9FSU1fRDI3X19JUFVfU0lTR18zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyN19fSVBVX0RJU1AxX0RBVF8yMwkJKF9NWDUzX1BBRF9FSU1fRDI3X19JUFVfRElTUDFfREFUXzIzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyOF9fRU1JX1dFSU1fRF8yOAkJKF9NWDUzX1BBRF9FSU1fRDI4X19FTUlfV0VJTV9EXzI4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyOF9fR1BJTzNfMjgJCShfTVg1M19QQURfRUlNX0QyOF9fR1BJTzNfMjggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI4X19VQVJUMl9DVFMJCShfTVg1M19QQURfRUlNX0QyOF9fVUFSVDJfQ1RTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyOF9fSVBVX0RJU1BCMF9TRVJfRElPCQkoX01YNTNfUEFEX0VJTV9EMjhfX0lQVV9ESVNQQjBfU0VSX0RJTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjhfX0NTUElfTU9TSQkJKF9NWDUzX1BBRF9FSU1fRDI4X19DU1BJX01PU0kgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI4X19JMkMxX1NEQQkJKF9NWDUzX1BBRF9FSU1fRDI4X19JMkMxX1NEQSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjhfX0lQVV9FWFRfVFJJRwkJKF9NWDUzX1BBRF9FSU1fRDI4X19JUFVfRVhUX1RSSUcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI4X19JUFVfREkwX1BJTjEzCQkoX01YNTNfUEFEX0VJTV9EMjhfX0lQVV9ESTBfUElOMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI5X19FTUlfV0VJTV9EXzI5CQkoX01YNTNfUEFEX0VJTV9EMjlfX0VNSV9XRUlNX0RfMjkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI5X19HUElPM18yOQkJKF9NWDUzX1BBRF9FSU1fRDI5X19HUElPM18yOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjlfX1VBUlQyX1JUUwkJKF9NWDUzX1BBRF9FSU1fRDI5X19VQVJUMl9SVFMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI5X19JUFVfRElTUEIwX1NFUl9SUwkJKF9NWDUzX1BBRF9FSU1fRDI5X19JUFVfRElTUEIwX1NFUl9SUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjlfX0NTUElfU1MwCQkoX01YNTNfUEFEX0VJTV9EMjlfX0NTUElfU1MwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyOV9fSVBVX0RJMV9QSU4xNQkJKF9NWDUzX1BBRF9FSU1fRDI5X19JUFVfREkxX1BJTjE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyOV9fSVBVX0NTSTFfVlNZTkMJCShfTVg1M19QQURfRUlNX0QyOV9fSVBVX0NTSTFfVlNZTkMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI5X19JUFVfREkwX1BJTjE0CQkoX01YNTNfUEFEX0VJTV9EMjlfX0lQVV9ESTBfUElOMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDMwX19FTUlfV0VJTV9EXzMwCQkoX01YNTNfUEFEX0VJTV9EMzBfX0VNSV9XRUlNX0RfMzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDMwX19HUElPM18zMAkJKF9NWDUzX1BBRF9FSU1fRDMwX19HUElPM18zMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMzBfX1VBUlQzX0NUUwkJKF9NWDUzX1BBRF9FSU1fRDMwX19VQVJUM19DVFMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDMwX19JUFVfQ1NJMF9EXzMJCShfTVg1M19QQURfRUlNX0QzMF9fSVBVX0NTSTBfRF8zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QzMF9fSVBVX0RJMF9QSU4xMQkJKF9NWDUzX1BBRF9FSU1fRDMwX19JUFVfREkwX1BJTjExIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QzMF9fSVBVX0RJU1AxX0RBVF8yMQkJKF9NWDUzX1BBRF9FSU1fRDMwX19JUFVfRElTUDFfREFUXzIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QzMF9fVVNCT0gzX1VTQkgxX09DCQkoX01YNTNfUEFEX0VJTV9EMzBfX1VTQk9IM19VU0JIMV9PQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMzBfX1VTQk9IM19VU0JIMl9PQwkJKF9NWDUzX1BBRF9FSU1fRDMwX19VU0JPSDNfVVNCSDJfT0MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDMxX19FTUlfV0VJTV9EXzMxCQkoX01YNTNfUEFEX0VJTV9EMzFfX0VNSV9XRUlNX0RfMzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDMxX19HUElPM18zMQkJKF9NWDUzX1BBRF9FSU1fRDMxX19HUElPM18zMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMzFfX1VBUlQzX1JUUwkJKF9NWDUzX1BBRF9FSU1fRDMxX19VQVJUM19SVFMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDMxX19JUFVfQ1NJMF9EXzIJCShfTVg1M19QQURfRUlNX0QzMV9fSVBVX0NTSTBfRF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QzMV9fSVBVX0RJMF9QSU4xMgkJKF9NWDUzX1BBRF9FSU1fRDMxX19JUFVfREkwX1BJTjEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QzMV9fSVBVX0RJU1AxX0RBVF8yMAkJKF9NWDUzX1BBRF9FSU1fRDMxX19JUFVfRElTUDFfREFUXzIwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QzMV9fVVNCT0gzX1VTQkgxX1BXUgkJKF9NWDUzX1BBRF9FSU1fRDMxX19VU0JPSDNfVVNCSDFfUFdSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QzMV9fVVNCT0gzX1VTQkgyX1BXUgkJKF9NWDUzX1BBRF9FSU1fRDMxX19VU0JPSDNfVVNCSDJfUFdSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNF9fRU1JX1dFSU1fQV8yNAkJKF9NWDUzX1BBRF9FSU1fQTI0X19FTUlfV0VJTV9BXzI0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNF9fR1BJTzVfNAkJKF9NWDUzX1BBRF9FSU1fQTI0X19HUElPNV80IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNF9fSVBVX0RJU1AxX0RBVF8xOQkJKF9NWDUzX1BBRF9FSU1fQTI0X19JUFVfRElTUDFfREFUXzE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNF9fSVBVX0NTSTFfRF8xOQkJKF9NWDUzX1BBRF9FSU1fQTI0X19JUFVfQ1NJMV9EXzE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNF9fSVBVX1NJU0dfMgkJKF9NWDUzX1BBRF9FSU1fQTI0X19JUFVfU0lTR18yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyNF9fVVNCUEhZMl9CVkFMSUQJCShfTVg1M19QQURfRUlNX0EyNF9fVVNCUEhZMl9CVkFMSUQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIzX19FTUlfV0VJTV9BXzIzCQkoX01YNTNfUEFEX0VJTV9BMjNfX0VNSV9XRUlNX0FfMjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIzX19HUElPNl82CQkoX01YNTNfUEFEX0VJTV9BMjNfX0dQSU82XzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIzX19JUFVfRElTUDFfREFUXzE4CQkoX01YNTNfUEFEX0VJTV9BMjNfX0lQVV9ESVNQMV9EQVRfMTggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIzX19JUFVfQ1NJMV9EXzE4CQkoX01YNTNfUEFEX0VJTV9BMjNfX0lQVV9DU0kxX0RfMTggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIzX19JUFVfU0lTR18zCQkoX01YNTNfUEFEX0VJTV9BMjNfX0lQVV9TSVNHXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIzX19VU0JQSFkyX0VORFNFU1NJT04JCShfTVg1M19QQURfRUlNX0EyM19fVVNCUEhZMl9FTkRTRVNTSU9OIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyMl9fRU1JX1dFSU1fQV8yMgkJKF9NWDUzX1BBRF9FSU1fQTIyX19FTUlfV0VJTV9BXzIyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyMl9fR1BJTzJfMTYJCShfTVg1M19QQURfRUlNX0EyMl9fR1BJTzJfMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIyX19JUFVfRElTUDFfREFUXzE3CQkoX01YNTNfUEFEX0VJTV9BMjJfX0lQVV9ESVNQMV9EQVRfMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIyX19JUFVfQ1NJMV9EXzE3CQkoX01YNTNfUEFEX0VJTV9BMjJfX0lQVV9DU0kxX0RfMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIyX19TUkNfQlRfQ0ZHMV83CQkoX01YNTNfUEFEX0VJTV9BMjJfX1NSQ19CVF9DRkcxXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIxX19FTUlfV0VJTV9BXzIxCQkoX01YNTNfUEFEX0VJTV9BMjFfX0VNSV9XRUlNX0FfMjEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIxX19HUElPMl8xNwkJKF9NWDUzX1BBRF9FSU1fQTIxX19HUElPMl8xNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMjFfX0lQVV9ESVNQMV9EQVRfMTYJCShfTVg1M19QQURfRUlNX0EyMV9fSVBVX0RJU1AxX0RBVF8xNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMjFfX0lQVV9DU0kxX0RfMTYJCShfTVg1M19QQURfRUlNX0EyMV9fSVBVX0NTSTFfRF8xNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMjFfX1NSQ19CVF9DRkcxXzYJCShfTVg1M19QQURfRUlNX0EyMV9fU1JDX0JUX0NGRzFfNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMjBfX0VNSV9XRUlNX0FfMjAJCShfTVg1M19QQURfRUlNX0EyMF9fRU1JX1dFSU1fQV8yMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMjBfX0dQSU8yXzE4CQkoX01YNTNfUEFEX0VJTV9BMjBfX0dQSU8yXzE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyMF9fSVBVX0RJU1AxX0RBVF8xNQkJKF9NWDUzX1BBRF9FSU1fQTIwX19JUFVfRElTUDFfREFUXzE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyMF9fSVBVX0NTSTFfRF8xNQkJKF9NWDUzX1BBRF9FSU1fQTIwX19JUFVfQ1NJMV9EXzE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyMF9fU1JDX0JUX0NGRzFfNQkJKF9NWDUzX1BBRF9FSU1fQTIwX19TUkNfQlRfQ0ZHMV81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExOV9fRU1JX1dFSU1fQV8xOQkJKF9NWDUzX1BBRF9FSU1fQTE5X19FTUlfV0VJTV9BXzE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExOV9fR1BJTzJfMTkJCShfTVg1M19QQURfRUlNX0ExOV9fR1BJTzJfMTkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE5X19JUFVfRElTUDFfREFUXzE0CQkoX01YNTNfUEFEX0VJTV9BMTlfX0lQVV9ESVNQMV9EQVRfMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE5X19JUFVfQ1NJMV9EXzE0CQkoX01YNTNfUEFEX0VJTV9BMTlfX0lQVV9DU0kxX0RfMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE5X19TUkNfQlRfQ0ZHMV80CQkoX01YNTNfUEFEX0VJTV9BMTlfX1NSQ19CVF9DRkcxXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE4X19FTUlfV0VJTV9BXzE4CQkoX01YNTNfUEFEX0VJTV9BMThfX0VNSV9XRUlNX0FfMTggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE4X19HUElPMl8yMAkJKF9NWDUzX1BBRF9FSU1fQTE4X19HUElPMl8yMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMThfX0lQVV9ESVNQMV9EQVRfMTMJCShfTVg1M19QQURfRUlNX0ExOF9fSVBVX0RJU1AxX0RBVF8xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMThfX0lQVV9DU0kxX0RfMTMJCShfTVg1M19QQURfRUlNX0ExOF9fSVBVX0NTSTFfRF8xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMThfX1NSQ19CVF9DRkcxXzMJCShfTVg1M19QQURfRUlNX0ExOF9fU1JDX0JUX0NGRzFfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMTdfX0VNSV9XRUlNX0FfMTcJCShfTVg1M19QQURfRUlNX0ExN19fRU1JX1dFSU1fQV8xNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMTdfX0dQSU8yXzIxCQkoX01YNTNfUEFEX0VJTV9BMTdfX0dQSU8yXzIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExN19fSVBVX0RJU1AxX0RBVF8xMgkJKF9NWDUzX1BBRF9FSU1fQTE3X19JUFVfRElTUDFfREFUXzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExN19fSVBVX0NTSTFfRF8xMgkJKF9NWDUzX1BBRF9FSU1fQTE3X19JUFVfQ1NJMV9EXzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExN19fU1JDX0JUX0NGRzFfMgkJKF9NWDUzX1BBRF9FSU1fQTE3X19TUkNfQlRfQ0ZHMV8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExNl9fRU1JX1dFSU1fQV8xNgkJKF9NWDUzX1BBRF9FSU1fQTE2X19FTUlfV0VJTV9BXzE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExNl9fR1BJTzJfMjIJCShfTVg1M19QQURfRUlNX0ExNl9fR1BJTzJfMjIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE2X19JUFVfREkxX0RJU1BfQ0xLCQkoX01YNTNfUEFEX0VJTV9BMTZfX0lQVV9ESTFfRElTUF9DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE2X19JUFVfQ1NJMV9QSVhDTEsJCShfTVg1M19QQURfRUlNX0ExNl9fSVBVX0NTSTFfUElYQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExNl9fU1JDX0JUX0NGRzFfMQkJKF9NWDUzX1BBRF9FSU1fQTE2X19TUkNfQlRfQ0ZHMV8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0NTMF9fRU1JX1dFSU1fQ1NfMAkJKF9NWDUzX1BBRF9FSU1fQ1MwX19FTUlfV0VJTV9DU18wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0NTMF9fR1BJTzJfMjMJCShfTVg1M19QQURfRUlNX0NTMF9fR1BJTzJfMjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQ1MwX19FQ1NQSTJfU0NMSwkJKF9NWDUzX1BBRF9FSU1fQ1MwX19FQ1NQSTJfU0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9DUzBfX0lQVV9ESTFfUElONQkJKF9NWDUzX1BBRF9FSU1fQ1MwX19JUFVfREkxX1BJTjUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQ1MxX19FTUlfV0VJTV9DU18xCQkoX01YNTNfUEFEX0VJTV9DUzFfX0VNSV9XRUlNX0NTXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQ1MxX19HUElPMl8yNAkJKF9NWDUzX1BBRF9FSU1fQ1MxX19HUElPMl8yNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9DUzFfX0VDU1BJMl9NT1NJCQkoX01YNTNfUEFEX0VJTV9DUzFfX0VDU1BJMl9NT1NJIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0NTMV9fSVBVX0RJMV9QSU42CQkoX01YNTNfUEFEX0VJTV9DUzFfX0lQVV9ESTFfUElONiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9PRV9fRU1JX1dFSU1fT0UJCShfTVg1M19QQURfRUlNX09FX19FTUlfV0VJTV9PRSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9PRV9fR1BJTzJfMjUJCShfTVg1M19QQURfRUlNX09FX19HUElPMl8yNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9PRV9fRUNTUEkyX01JU08JCShfTVg1M19QQURfRUlNX09FX19FQ1NQSTJfTUlTTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9PRV9fSVBVX0RJMV9QSU43CQkoX01YNTNfUEFEX0VJTV9PRV9fSVBVX0RJMV9QSU43IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX09FX19VU0JQSFkyX0lERElHCQkoX01YNTNfUEFEX0VJTV9PRV9fVVNCUEhZMl9JRERJRyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9SV19fRU1JX1dFSU1fUlcJCShfTVg1M19QQURfRUlNX1JXX19FTUlfV0VJTV9SVyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9SV19fR1BJTzJfMjYJCShfTVg1M19QQURfRUlNX1JXX19HUElPMl8yNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9SV19fRUNTUEkyX1NTMAkJKF9NWDUzX1BBRF9FSU1fUldfX0VDU1BJMl9TUzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fUldfX0lQVV9ESTFfUElOOAkJKF9NWDUzX1BBRF9FSU1fUldfX0lQVV9ESTFfUElOOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9SV19fVVNCUEhZMl9IT1NURElTQ09OTkVDVAkJKF9NWDUzX1BBRF9FSU1fUldfX1VTQlBIWTJfSE9TVERJU0NPTk5FQ1QgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fTEJBX19FTUlfV0VJTV9MQkEJCShfTVg1M19QQURfRUlNX0xCQV9fRU1JX1dFSU1fTEJBIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0xCQV9fR1BJTzJfMjcJCShfTVg1M19QQURfRUlNX0xCQV9fR1BJTzJfMjcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fTEJBX19FQ1NQSTJfU1MxCQkoX01YNTNfUEFEX0VJTV9MQkFfX0VDU1BJMl9TUzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fTEJBX19JUFVfREkxX1BJTjE3CQkoX01YNTNfUEFEX0VJTV9MQkFfX0lQVV9ESTFfUElOMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fTEJBX19TUkNfQlRfQ0ZHMV8wCQkoX01YNTNfUEFEX0VJTV9MQkFfX1NSQ19CVF9DRkcxXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRUIwX19FTUlfV0VJTV9FQl8wCQkoX01YNTNfUEFEX0VJTV9FQjBfX0VNSV9XRUlNX0VCXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRUIwX19HUElPMl8yOAkJKF9NWDUzX1BBRF9FSU1fRUIwX19HUElPMl8yOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjBfX0lQVV9ESVNQMV9EQVRfMTEJCShfTVg1M19QQURfRUlNX0VCMF9fSVBVX0RJU1AxX0RBVF8xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjBfX0lQVV9DU0kxX0RfMTEJCShfTVg1M19QQURfRUlNX0VCMF9fSVBVX0NTSTFfRF8xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjBfX0dQQ19QTUlDX1JEWQkJKF9NWDUzX1BBRF9FSU1fRUIwX19HUENfUE1JQ19SRFkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRUIwX19TUkNfQlRfQ0ZHMl83CQkoX01YNTNfUEFEX0VJTV9FQjBfX1NSQ19CVF9DRkcyXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRUIxX19FTUlfV0VJTV9FQl8xCQkoX01YNTNfUEFEX0VJTV9FQjFfX0VNSV9XRUlNX0VCXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRUIxX19HUElPMl8yOQkJKF9NWDUzX1BBRF9FSU1fRUIxX19HUElPMl8yOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjFfX0lQVV9ESVNQMV9EQVRfMTAJCShfTVg1M19QQURfRUlNX0VCMV9fSVBVX0RJU1AxX0RBVF8xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjFfX0lQVV9DU0kxX0RfMTAJCShfTVg1M19QQURfRUlNX0VCMV9fSVBVX0NTSTFfRF8xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjFfX1NSQ19CVF9DRkcyXzYJCShfTVg1M19QQURfRUlNX0VCMV9fU1JDX0JUX0NGRzJfNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTBfX0VNSV9OQU5EX1dFSU1fREFfMAkJKF9NWDUzX1BBRF9FSU1fREEwX19FTUlfTkFORF9XRUlNX0RBXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREEwX19HUElPM18wCQkoX01YNTNfUEFEX0VJTV9EQTBfX0dQSU8zXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREEwX19JUFVfRElTUDFfREFUXzkJCShfTVg1M19QQURfRUlNX0RBMF9fSVBVX0RJU1AxX0RBVF85IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMF9fSVBVX0NTSTFfRF85CQkoX01YNTNfUEFEX0VJTV9EQTBfX0lQVV9DU0kxX0RfOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTBfX1NSQ19CVF9DRkcyXzUJCShfTVg1M19QQURfRUlNX0RBMF9fU1JDX0JUX0NGRzJfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTFfX0VNSV9OQU5EX1dFSU1fREFfMQkJKF9NWDUzX1BBRF9FSU1fREExX19FTUlfTkFORF9XRUlNX0RBXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExX19HUElPM18xCQkoX01YNTNfUEFEX0VJTV9EQTFfX0dQSU8zXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExX19JUFVfRElTUDFfREFUXzgJCShfTVg1M19QQURfRUlNX0RBMV9fSVBVX0RJU1AxX0RBVF84IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMV9fSVBVX0NTSTFfRF84CQkoX01YNTNfUEFEX0VJTV9EQTFfX0lQVV9DU0kxX0RfOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTFfX1NSQ19CVF9DRkcyXzQJCShfTVg1M19QQURfRUlNX0RBMV9fU1JDX0JUX0NGRzJfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTJfX0VNSV9OQU5EX1dFSU1fREFfMgkJKF9NWDUzX1BBRF9FSU1fREEyX19FTUlfTkFORF9XRUlNX0RBXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREEyX19HUElPM18yCQkoX01YNTNfUEFEX0VJTV9EQTJfX0dQSU8zXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREEyX19JUFVfRElTUDFfREFUXzcJCShfTVg1M19QQURfRUlNX0RBMl9fSVBVX0RJU1AxX0RBVF83IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMl9fSVBVX0NTSTFfRF83CQkoX01YNTNfUEFEX0VJTV9EQTJfX0lQVV9DU0kxX0RfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTJfX1NSQ19CVF9DRkcyXzMJCShfTVg1M19QQURfRUlNX0RBMl9fU1JDX0JUX0NGRzJfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTNfX0VNSV9OQU5EX1dFSU1fREFfMwkJKF9NWDUzX1BBRF9FSU1fREEzX19FTUlfTkFORF9XRUlNX0RBXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREEzX19HUElPM18zCQkoX01YNTNfUEFEX0VJTV9EQTNfX0dQSU8zXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREEzX19JUFVfRElTUDFfREFUXzYJCShfTVg1M19QQURfRUlNX0RBM19fSVBVX0RJU1AxX0RBVF82IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBM19fSVBVX0NTSTFfRF82CQkoX01YNTNfUEFEX0VJTV9EQTNfX0lQVV9DU0kxX0RfNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTNfX1NSQ19CVF9DRkcyXzIJCShfTVg1M19QQURfRUlNX0RBM19fU1JDX0JUX0NGRzJfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTRfX0VNSV9OQU5EX1dFSU1fREFfNAkJKF9NWDUzX1BBRF9FSU1fREE0X19FTUlfTkFORF9XRUlNX0RBXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE0X19HUElPM180CQkoX01YNTNfUEFEX0VJTV9EQTRfX0dQSU8zXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE0X19JUFVfRElTUDFfREFUXzUJCShfTVg1M19QQURfRUlNX0RBNF9fSVBVX0RJU1AxX0RBVF81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBNF9fSVBVX0NTSTFfRF81CQkoX01YNTNfUEFEX0VJTV9EQTRfX0lQVV9DU0kxX0RfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTRfX1NSQ19CVF9DRkczXzcJCShfTVg1M19QQURfRUlNX0RBNF9fU1JDX0JUX0NGRzNfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTVfX0VNSV9OQU5EX1dFSU1fREFfNQkJKF9NWDUzX1BBRF9FSU1fREE1X19FTUlfTkFORF9XRUlNX0RBXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE1X19HUElPM181CQkoX01YNTNfUEFEX0VJTV9EQTVfX0dQSU8zXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE1X19JUFVfRElTUDFfREFUXzQJCShfTVg1M19QQURfRUlNX0RBNV9fSVBVX0RJU1AxX0RBVF80IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBNV9fSVBVX0NTSTFfRF80CQkoX01YNTNfUEFEX0VJTV9EQTVfX0lQVV9DU0kxX0RfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTVfX1NSQ19CVF9DRkczXzYJCShfTVg1M19QQURfRUlNX0RBNV9fU1JDX0JUX0NGRzNfNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTZfX0VNSV9OQU5EX1dFSU1fREFfNgkJKF9NWDUzX1BBRF9FSU1fREE2X19FTUlfTkFORF9XRUlNX0RBXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE2X19HUElPM182CQkoX01YNTNfUEFEX0VJTV9EQTZfX0dQSU8zXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE2X19JUFVfRElTUDFfREFUXzMJCShfTVg1M19QQURfRUlNX0RBNl9fSVBVX0RJU1AxX0RBVF8zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBNl9fSVBVX0NTSTFfRF8zCQkoX01YNTNfUEFEX0VJTV9EQTZfX0lQVV9DU0kxX0RfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTZfX1NSQ19CVF9DRkczXzUJCShfTVg1M19QQURfRUlNX0RBNl9fU1JDX0JUX0NGRzNfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTdfX0VNSV9OQU5EX1dFSU1fREFfNwkJKF9NWDUzX1BBRF9FSU1fREE3X19FTUlfTkFORF9XRUlNX0RBXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE3X19HUElPM183CQkoX01YNTNfUEFEX0VJTV9EQTdfX0dQSU8zXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE3X19JUFVfRElTUDFfREFUXzIJCShfTVg1M19QQURfRUlNX0RBN19fSVBVX0RJU1AxX0RBVF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBN19fSVBVX0NTSTFfRF8yCQkoX01YNTNfUEFEX0VJTV9EQTdfX0lQVV9DU0kxX0RfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTdfX1NSQ19CVF9DRkczXzQJCShfTVg1M19QQURfRUlNX0RBN19fU1JDX0JUX0NGRzNfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQThfX0VNSV9OQU5EX1dFSU1fREFfOAkJKF9NWDUzX1BBRF9FSU1fREE4X19FTUlfTkFORF9XRUlNX0RBXzggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE4X19HUElPM184CQkoX01YNTNfUEFEX0VJTV9EQThfX0dQSU8zXzggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE4X19JUFVfRElTUDFfREFUXzEJCShfTVg1M19QQURfRUlNX0RBOF9fSVBVX0RJU1AxX0RBVF8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBOF9fSVBVX0NTSTFfRF8xCQkoX01YNTNfUEFEX0VJTV9EQThfX0lQVV9DU0kxX0RfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQThfX1NSQ19CVF9DRkczXzMJCShfTVg1M19QQURfRUlNX0RBOF9fU1JDX0JUX0NGRzNfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTlfX0VNSV9OQU5EX1dFSU1fREFfOQkJKF9NWDUzX1BBRF9FSU1fREE5X19FTUlfTkFORF9XRUlNX0RBXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE5X19HUElPM185CQkoX01YNTNfUEFEX0VJTV9EQTlfX0dQSU8zXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE5X19JUFVfRElTUDFfREFUXzAJCShfTVg1M19QQURfRUlNX0RBOV9fSVBVX0RJU1AxX0RBVF8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBOV9fSVBVX0NTSTFfRF8wCQkoX01YNTNfUEFEX0VJTV9EQTlfX0lQVV9DU0kxX0RfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTlfX1NSQ19CVF9DRkczXzIJCShfTVg1M19QQURfRUlNX0RBOV9fU1JDX0JUX0NGRzNfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTEwX19FTUlfTkFORF9XRUlNX0RBXzEwCQkoX01YNTNfUEFEX0VJTV9EQTEwX19FTUlfTkFORF9XRUlNX0RBXzEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTBfX0dQSU8zXzEwCQkoX01YNTNfUEFEX0VJTV9EQTEwX19HUElPM18xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTEwX19JUFVfREkxX1BJTjE1CQkoX01YNTNfUEFEX0VJTV9EQTEwX19JUFVfREkxX1BJTjE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTBfX0lQVV9DU0kxX0RBVEFfRU4JCShfTVg1M19QQURfRUlNX0RBMTBfX0lQVV9DU0kxX0RBVEFfRU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExMF9fU1JDX0JUX0NGRzNfMQkJKF9NWDUzX1BBRF9FSU1fREExMF9fU1JDX0JUX0NGRzNfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTExX19FTUlfTkFORF9XRUlNX0RBXzExCQkoX01YNTNfUEFEX0VJTV9EQTExX19FTUlfTkFORF9XRUlNX0RBXzExIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTFfX0dQSU8zXzExCQkoX01YNTNfUEFEX0VJTV9EQTExX19HUElPM18xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTExX19JUFVfREkxX1BJTjIJCShfTVg1M19QQURfRUlNX0RBMTFfX0lQVV9ESTFfUElOMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTExX19JUFVfQ1NJMV9IU1lOQwkJKF9NWDUzX1BBRF9FSU1fREExMV9fSVBVX0NTSTFfSFNZTkMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExMl9fRU1JX05BTkRfV0VJTV9EQV8xMgkJKF9NWDUzX1BBRF9FSU1fREExMl9fRU1JX05BTkRfV0VJTV9EQV8xMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTEyX19HUElPM18xMgkJKF9NWDUzX1BBRF9FSU1fREExMl9fR1BJTzNfMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExMl9fSVBVX0RJMV9QSU4zCQkoX01YNTNfUEFEX0VJTV9EQTEyX19JUFVfREkxX1BJTjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExMl9fSVBVX0NTSTFfVlNZTkMJCShfTVg1M19QQURfRUlNX0RBMTJfX0lQVV9DU0kxX1ZTWU5DIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTNfX0VNSV9OQU5EX1dFSU1fREFfMTMJCShfTVg1M19QQURfRUlNX0RBMTNfX0VNSV9OQU5EX1dFSU1fREFfMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExM19fR1BJTzNfMTMJCShfTVg1M19QQURfRUlNX0RBMTNfX0dQSU8zXzEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTNfX0lQVV9ESTFfRDBfQ1MJCShfTVg1M19QQURfRUlNX0RBMTNfX0lQVV9ESTFfRDBfQ1MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExM19fQ0NNX0RJMV9FWFRfQ0xLCQkoX01YNTNfUEFEX0VJTV9EQTEzX19DQ01fREkxX0VYVF9DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExNF9fRU1JX05BTkRfV0VJTV9EQV8xNAkJKF9NWDUzX1BBRF9FSU1fREExNF9fRU1JX05BTkRfV0VJTV9EQV8xNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTE0X19HUElPM18xNAkJKF9NWDUzX1BBRF9FSU1fREExNF9fR1BJTzNfMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREExNF9fSVBVX0RJMV9EMV9DUwkJKF9NWDUzX1BBRF9FSU1fREExNF9fSVBVX0RJMV9EMV9DUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTE0X19DQ01fREkwX0VYVF9DTEsJCShfTVg1M19QQURfRUlNX0RBMTRfX0NDTV9ESTBfRVhUX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTE1X19FTUlfTkFORF9XRUlNX0RBXzE1CQkoX01YNTNfUEFEX0VJTV9EQTE1X19FTUlfTkFORF9XRUlNX0RBXzE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTVfX0dQSU8zXzE1CQkoX01YNTNfUEFEX0VJTV9EQTE1X19HUElPM18xNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTE1X19JUFVfREkxX1BJTjEJCShfTVg1M19QQURfRUlNX0RBMTVfX0lQVV9ESTFfUElOMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTE1X19JUFVfREkxX1BJTjQJCShfTVg1M19QQURfRUlNX0RBMTVfX0lQVV9ESTFfUElONCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX1dFX0JfX0VNSV9OQU5ERl9XRV9CCQkoX01YNTNfUEFEX05BTkRGX1dFX0JfX0VNSV9OQU5ERl9XRV9CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfV0VfQl9fR1BJTzZfMTIJCShfTVg1M19QQURfTkFOREZfV0VfQl9fR1BJTzZfMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9SRV9CX19FTUlfTkFOREZfUkVfQgkJKF9NWDUzX1BBRF9OQU5ERl9SRV9CX19FTUlfTkFOREZfUkVfQiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX1JFX0JfX0dQSU82XzEzCQkoX01YNTNfUEFEX05BTkRGX1JFX0JfX0dQSU82XzEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX1dBSVRfX0VNSV9XRUlNX1dBSVQJCShfTVg1M19QQURfRUlNX1dBSVRfX0VNSV9XRUlNX1dBSVQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fV0FJVF9fR1BJTzVfMAkJKF9NWDUzX1BBRF9FSU1fV0FJVF9fR1BJTzVfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9XQUlUX19FTUlfV0VJTV9EVEFDS19CCQkoX01YNTNfUEFEX0VJTV9XQUlUX19FTUlfV0VJTV9EVEFDS19CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzFfVFgzX1BfX0dQSU82XzIyCQkoX01YNTNfUEFEX0xWRFMxX1RYM19QX19HUElPNl8yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMxX1RYM19QX19MREJfTFZEUzFfVFgzCQkoX01YNTNfUEFEX0xWRFMxX1RYM19QX19MREJfTFZEUzFfVFgzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzFfVFgyX1BfX0dQSU82XzI0CQkoX01YNTNfUEFEX0xWRFMxX1RYMl9QX19HUElPNl8yNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMxX1RYMl9QX19MREJfTFZEUzFfVFgyCQkoX01YNTNfUEFEX0xWRFMxX1RYMl9QX19MREJfTFZEUzFfVFgyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzFfQ0xLX1BfX0dQSU82XzI2CQkoX01YNTNfUEFEX0xWRFMxX0NMS19QX19HUElPNl8yNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMxX0NMS19QX19MREJfTFZEUzFfQ0xLCQkoX01YNTNfUEFEX0xWRFMxX0NMS19QX19MREJfTFZEUzFfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzFfVFgxX1BfX0dQSU82XzI4CQkoX01YNTNfUEFEX0xWRFMxX1RYMV9QX19HUElPNl8yOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMxX1RYMV9QX19MREJfTFZEUzFfVFgxCQkoX01YNTNfUEFEX0xWRFMxX1RYMV9QX19MREJfTFZEUzFfVFgxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzFfVFgwX1BfX0dQSU82XzMwCQkoX01YNTNfUEFEX0xWRFMxX1RYMF9QX19HUElPNl8zMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMxX1RYMF9QX19MREJfTFZEUzFfVFgwCQkoX01YNTNfUEFEX0xWRFMxX1RYMF9QX19MREJfTFZEUzFfVFgwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzBfVFgzX1BfX0dQSU83XzIyCQkoX01YNTNfUEFEX0xWRFMwX1RYM19QX19HUElPN18yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMwX1RYM19QX19MREJfTFZEUzBfVFgzCQkoX01YNTNfUEFEX0xWRFMwX1RYM19QX19MREJfTFZEUzBfVFgzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzBfQ0xLX1BfX0dQSU83XzI0CQkoX01YNTNfUEFEX0xWRFMwX0NMS19QX19HUElPN18yNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMwX0NMS19QX19MREJfTFZEUzBfQ0xLCQkoX01YNTNfUEFEX0xWRFMwX0NMS19QX19MREJfTFZEUzBfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzBfVFgyX1BfX0dQSU83XzI2CQkoX01YNTNfUEFEX0xWRFMwX1RYMl9QX19HUElPN18yNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMwX1RYMl9QX19MREJfTFZEUzBfVFgyCQkoX01YNTNfUEFEX0xWRFMwX1RYMl9QX19MREJfTFZEUzBfVFgyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzBfVFgxX1BfX0dQSU83XzI4CQkoX01YNTNfUEFEX0xWRFMwX1RYMV9QX19HUElPN18yOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMwX1RYMV9QX19MREJfTFZEUzBfVFgxCQkoX01YNTNfUEFEX0xWRFMwX1RYMV9QX19MREJfTFZEUzBfVFgxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzBfVFgwX1BfX0dQSU83XzMwCQkoX01YNTNfUEFEX0xWRFMwX1RYMF9QX19HUElPN18zMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMwX1RYMF9QX19MREJfTFZEUzBfVFgwCQkoX01YNTNfUEFEX0xWRFMwX1RYMF9QX19MREJfTFZEUzBfVFgwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xMF9fR1BJTzRfMAkJKF9NWDUzX1BBRF9HUElPXzEwX19HUElPNF8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xMF9fT1NDMzJrXzMyS19PVVQJCShfTVg1M19QQURfR1BJT18xMF9fT1NDMzJrXzMyS19PVVQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzExX19HUElPNF8xCQkoX01YNTNfUEFEX0dQSU9fMTFfX0dQSU80XzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzEyX19HUElPNF8yCQkoX01YNTNfUEFEX0dQSU9fMTJfX0dQSU80XzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzEzX19HUElPNF8zCQkoX01YNTNfUEFEX0dQSU9fMTNfX0dQSU80XzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE0X19HUElPNF80CQkoX01YNTNfUEFEX0dQSU9fMTRfX0dQSU80XzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DTEVfX0VNSV9OQU5ERl9DTEUJCShfTVg1M19QQURfTkFOREZfQ0xFX19FTUlfTkFOREZfQ0xFIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ0xFX19HUElPNl83CQkoX01YNTNfUEFEX05BTkRGX0NMRV9fR1BJTzZfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NMRV9fVVNCUEhZMV9WU1RBVFVTXzAJCShfTVg1M19QQURfTkFOREZfQ0xFX19VU0JQSFkxX1ZTVEFUVVNfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0FMRV9fRU1JX05BTkRGX0FMRQkJKF9NWDUzX1BBRF9OQU5ERl9BTEVfX0VNSV9OQU5ERl9BTEUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9BTEVfX0dQSU82XzgJCShfTVg1M19QQURfTkFOREZfQUxFX19HUElPNl84IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQUxFX19VU0JQSFkxX1ZTVEFUVVNfMQkJKF9NWDUzX1BBRF9OQU5ERl9BTEVfX1VTQlBIWTFfVlNUQVRVU18xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfV1BfQl9fRU1JX05BTkRGX1dQX0IJCShfTVg1M19QQURfTkFOREZfV1BfQl9fRU1JX05BTkRGX1dQX0IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9XUF9CX19HUElPNl85CQkoX01YNTNfUEFEX05BTkRGX1dQX0JfX0dQSU82XzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9XUF9CX19VU0JQSFkxX1ZTVEFUVVNfMgkJKF9NWDUzX1BBRF9OQU5ERl9XUF9CX19VU0JQSFkxX1ZTVEFUVVNfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX1JCMF9fRU1JX05BTkRGX1JCXzAJCShfTVg1M19QQURfTkFOREZfUkIwX19FTUlfTkFOREZfUkJfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX1JCMF9fR1BJTzZfMTAJCShfTVg1M19QQURfTkFOREZfUkIwX19HUElPNl8xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX1JCMF9fVVNCUEhZMV9WU1RBVFVTXzMJCShfTVg1M19QQURfTkFOREZfUkIwX19VU0JQSFkxX1ZTVEFUVVNfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMF9fRU1JX05BTkRGX0NTXzAJCShfTVg1M19QQURfTkFOREZfQ1MwX19FTUlfTkFOREZfQ1NfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMF9fR1BJTzZfMTEJCShfTVg1M19QQURfTkFOREZfQ1MwX19HUElPNl8xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMF9fVVNCUEhZMV9WU1RBVFVTXzQJCShfTVg1M19QQURfTkFOREZfQ1MwX19VU0JQSFkxX1ZTVEFUVVNfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMV9fRU1JX05BTkRGX0NTXzEJCShfTVg1M19QQURfTkFOREZfQ1MxX19FTUlfTkFOREZfQ1NfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMV9fR1BJTzZfMTQJCShfTVg1M19QQURfTkFOREZfQ1MxX19HUElPNl8xNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMV9fTUxCX01MQkNMSwkJKF9NWDUzX1BBRF9OQU5ERl9DUzFfX01MQl9NTEJDTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DUzFfX1VTQlBIWTFfVlNUQVRVU181CQkoX01YNTNfUEFEX05BTkRGX0NTMV9fVVNCUEhZMV9WU1RBVFVTXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DUzJfX0VNSV9OQU5ERl9DU18yCQkoX01YNTNfUEFEX05BTkRGX0NTMl9fRU1JX05BTkRGX0NTXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DUzJfX0dQSU82XzE1CQkoX01YNTNfUEFEX05BTkRGX0NTMl9fR1BJTzZfMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DUzJfX0lQVV9TSVNHXzAJCShfTVg1M19QQURfTkFOREZfQ1MyX19JUFVfU0lTR18wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MyX19FU0FJMV9UWDAJCShfTVg1M19QQURfTkFOREZfQ1MyX19FU0FJMV9UWDAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DUzJfX0VNSV9XRUlNX0NSRQkJKF9NWDUzX1BBRF9OQU5ERl9DUzJfX0VNSV9XRUlNX0NSRSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTMl9fQ0NNX0NTSTBfTUNMSwkJKF9NWDUzX1BBRF9OQU5ERl9DUzJfX0NDTV9DU0kwX01DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DUzJfX01MQl9NTEJTSUcJCShfTVg1M19QQURfTkFOREZfQ1MyX19NTEJfTUxCU0lHIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MyX19VU0JQSFkxX1ZTVEFUVVNfNgkJKF9NWDUzX1BBRF9OQU5ERl9DUzJfX1VTQlBIWTFfVlNUQVRVU182IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MzX19FTUlfTkFOREZfQ1NfMwkJKF9NWDUzX1BBRF9OQU5ERl9DUzNfX0VNSV9OQU5ERl9DU18zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MzX19HUElPNl8xNgkJKF9NWDUzX1BBRF9OQU5ERl9DUzNfX0dQSU82XzE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MzX19JUFVfU0lTR18xCQkoX01YNTNfUEFEX05BTkRGX0NTM19fSVBVX1NJU0dfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTM19fRVNBSTFfVFgxCQkoX01YNTNfUEFEX05BTkRGX0NTM19fRVNBSTFfVFgxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MzX19FTUlfV0VJTV9BXzI2CQkoX01YNTNfUEFEX05BTkRGX0NTM19fRU1JX1dFSU1fQV8yNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NTM19fTUxCX01MQkRBVAkJKF9NWDUzX1BBRF9OQU5ERl9DUzNfX01MQl9NTEJEQVQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9OQU5ERl9DUzNfX1VTQlBIWTFfVlNUQVRVU183CQkoX01YNTNfUEFEX05BTkRGX0NTM19fVVNCUEhZMV9WU1RBVFVTXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfTURJT19fRkVDX01ESU8JCShfTVg1M19QQURfRkVDX01ESU9fX0ZFQ19NRElPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX01ESU9fX0dQSU8xXzIyCQkoX01YNTNfUEFEX0ZFQ19NRElPX19HUElPMV8yMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19NRElPX19FU0FJMV9TQ0tSCQkoX01YNTNfUEFEX0ZFQ19NRElPX19FU0FJMV9TQ0tSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX01ESU9fX0ZFQ19DT0wJCShfTVg1M19QQURfRkVDX01ESU9fX0ZFQ19DT0wgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfTURJT19fUlRDX0NFX1JUQ19QUzIJCShfTVg1M19QQURfRkVDX01ESU9fX1JUQ19DRV9SVENfUFMyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX01ESU9fX1NETUFfREVCVUdfQlVTX0RFVklDRV8zCQkoX01YNTNfUEFEX0ZFQ19NRElPX19TRE1BX0RFQlVHX0JVU19ERVZJQ0VfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19NRElPX19FTUlfRU1JX0RFQlVHXzQ5CQkoX01YNTNfUEFEX0ZFQ19NRElPX19FTUlfRU1JX0RFQlVHXzQ5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JFRl9DTEtfX0ZFQ19UWF9DTEsJCShfTVg1M19QQURfRkVDX1JFRl9DTEtfX0ZFQ19UWF9DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfUkVGX0NMS19fR1BJTzFfMjMJCShfTVg1M19QQURfRkVDX1JFRl9DTEtfX0dQSU8xXzIzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JFRl9DTEtfX0VTQUkxX0ZTUgkJKF9NWDUzX1BBRF9GRUNfUkVGX0NMS19fRVNBSTFfRlNSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JFRl9DTEtfX1NETUFfREVCVUdfQlVTX0RFVklDRV80CQkoX01YNTNfUEFEX0ZFQ19SRUZfQ0xLX19TRE1BX0RFQlVHX0JVU19ERVZJQ0VfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19SRUZfQ0xLX19FTUlfRU1JX0RFQlVHXzUwCQkoX01YNTNfUEFEX0ZFQ19SRUZfQ0xLX19FTUlfRU1JX0RFQlVHXzUwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JYX0VSX19GRUNfUlhfRVIJCShfTVg1M19QQURfRkVDX1JYX0VSX19GRUNfUlhfRVIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfUlhfRVJfX0dQSU8xXzI0CQkoX01YNTNfUEFEX0ZFQ19SWF9FUl9fR1BJTzFfMjQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfUlhfRVJfX0VTQUkxX0hDS1IJCShfTVg1M19QQURfRkVDX1JYX0VSX19FU0FJMV9IQ0tSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JYX0VSX19GRUNfUlhfQ0xLCQkoX01YNTNfUEFEX0ZFQ19SWF9FUl9fRkVDX1JYX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19SWF9FUl9fUlRDX0NFX1JUQ19QUzMJCShfTVg1M19QQURfRkVDX1JYX0VSX19SVENfQ0VfUlRDX1BTMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19DUlNfRFZfX0ZFQ19SWF9EVgkJKF9NWDUzX1BBRF9GRUNfQ1JTX0RWX19GRUNfUlhfRFYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfQ1JTX0RWX19HUElPMV8yNQkJKF9NWDUzX1BBRF9GRUNfQ1JTX0RWX19HUElPMV8yNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19DUlNfRFZfX0VTQUkxX1NDS1QJCShfTVg1M19QQURfRkVDX0NSU19EVl9fRVNBSTFfU0NLVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19SWEQxX19GRUNfUkRBVEFfMQkJKF9NWDUzX1BBRF9GRUNfUlhEMV9fRkVDX1JEQVRBXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfUlhEMV9fR1BJTzFfMjYJCShfTVg1M19QQURfRkVDX1JYRDFfX0dQSU8xXzI2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JYRDFfX0VTQUkxX0ZTVAkJKF9NWDUzX1BBRF9GRUNfUlhEMV9fRVNBSTFfRlNUIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JYRDFfX01MQl9NTEJTSUcJCShfTVg1M19QQURfRkVDX1JYRDFfX01MQl9NTEJTSUcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfUlhEMV9fUlRDX0NFX1JUQ19QUzEJCShfTVg1M19QQURfRkVDX1JYRDFfX1JUQ19DRV9SVENfUFMxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JYRDBfX0ZFQ19SREFUQV8wCQkoX01YNTNfUEFEX0ZFQ19SWEQwX19GRUNfUkRBVEFfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19SWEQwX19HUElPMV8yNwkJKF9NWDUzX1BBRF9GRUNfUlhEMF9fR1BJTzFfMjcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfUlhEMF9fRVNBSTFfSENLVAkJKF9NWDUzX1BBRF9GRUNfUlhEMF9fRVNBSTFfSENLVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19SWEQwX19PU0MzMmtfMzJLX09VVAkJKF9NWDUzX1BBRF9GRUNfUlhEMF9fT1NDMzJrXzMyS19PVVQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTgkJKF9NWDUzX1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19UWF9FTl9fR1BJTzFfMjgJCShfTVg1M19QQURfRkVDX1RYX0VOX19HUElPMV8yOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19UWF9FTl9fRVNBSTFfVFgzX1JYMgkJKF9NWDUzX1BBRF9GRUNfVFhfRU5fX0VTQUkxX1RYM19SWDIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfVFhEMV9fRkVDX1REQVRBXzEJCShfTVg1M19QQURfRkVDX1RYRDFfX0ZFQ19UREFUQV8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1RYRDFfX0dQSU8xXzI5CQkoX01YNTNfUEFEX0ZFQ19UWEQxX19HUElPMV8yOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19UWEQxX19FU0FJMV9UWDJfUlgzCQkoX01YNTNfUEFEX0ZFQ19UWEQxX19FU0FJMV9UWDJfUlgzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1RYRDFfX01MQl9NTEJDTEsJCShfTVg1M19QQURfRkVDX1RYRDFfX01MQl9NTEJDTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfVFhEMV9fUlRDX0NFX1JUQ19QUlNDX0NMSwkJKF9NWDUzX1BBRF9GRUNfVFhEMV9fUlRDX0NFX1JUQ19QUlNDX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19UWEQwX19GRUNfVERBVEFfMAkJKF9NWDUzX1BBRF9GRUNfVFhEMF9fRkVDX1REQVRBXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfVFhEMF9fR1BJTzFfMzAJCShfTVg1M19QQURfRkVDX1RYRDBfX0dQSU8xXzMwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1RYRDBfX0VTQUkxX1RYNF9SWDEJCShfTVg1M19QQURfRkVDX1RYRDBfX0VTQUkxX1RYNF9SWDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfVFhEMF9fVVNCUEhZMl9EQVRBT1VUXzAJCShfTVg1M19QQURfRkVDX1RYRDBfX1VTQlBIWTJfREFUQU9VVF8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX01EQ19fRkVDX01EQwkJKF9NWDUzX1BBRF9GRUNfTURDX19GRUNfTURDIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRkVDX01EQ19fR1BJTzFfMzEJCShfTVg1M19QQURfRkVDX01EQ19fR1BJTzFfMzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfTURDX19FU0FJMV9UWDVfUlgwCQkoX01YNTNfUEFEX0ZFQ19NRENfX0VTQUkxX1RYNV9SWDAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfTURDX19NTEJfTUxCREFUCQkoX01YNTNfUEFEX0ZFQ19NRENfX01MQl9NTEJEQVQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfTURDX19SVENfQ0VfUlRDX0FMQVJNMV9UUklHCQkoX01YNTNfUEFEX0ZFQ19NRENfX1JUQ19DRV9SVENfQUxBUk0xX1RSSUcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9GRUNfTURDX19VU0JQSFkyX0RBVEFPVVRfMQkJKF9NWDUzX1BBRF9GRUNfTURDX19VU0JQSFkyX0RBVEFPVVRfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfRElPV19fUEFUQV9ESU9XCQkoX01YNTNfUEFEX1BBVEFfRElPV19fUEFUQV9ESU9XIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9ESU9XX19HUElPNl8xNwkJKF9NWDUzX1BBRF9QQVRBX0RJT1dfX0dQSU82XzE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9ESU9XX19VQVJUMV9UWERfTVVYCQkoX01YNTNfUEFEX1BBVEFfRElPV19fVUFSVDFfVFhEX01VWCB8IE1VWF9QQURfQ1RSTChNWDUzX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RJT1dfX1VTQlBIWTJfREFUQU9VVF8yCQkoX01YNTNfUEFEX1BBVEFfRElPV19fVVNCUEhZMl9EQVRBT1VUXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RNQUNLX19QQVRBX0RNQUNLCQkoX01YNTNfUEFEX1BBVEFfRE1BQ0tfX1BBVEFfRE1BQ0sgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RNQUNLX19HUElPNl8xOAkJKF9NWDUzX1BBRF9QQVRBX0RNQUNLX19HUElPNl8xOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfRE1BQ0tfX1VBUlQxX1JYRF9NVVgJCShfTVg1M19QQURfUEFUQV9ETUFDS19fVUFSVDFfUlhEX01VWCB8IE1VWF9QQURfQ1RSTChNWDUzX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RNQUNLX19VU0JQSFkyX0RBVEFPVVRfMwkJKF9NWDUzX1BBRF9QQVRBX0RNQUNLX19VU0JQSFkyX0RBVEFPVVRfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfRE1BUlFfX1BBVEFfRE1BUlEJCShfTVg1M19QQURfUEFUQV9ETUFSUV9fUEFUQV9ETUFSUSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfRE1BUlFfX0dQSU83XzAJCShfTVg1M19QQURfUEFUQV9ETUFSUV9fR1BJTzdfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfRE1BUlFfX1VBUlQyX1RYRF9NVVgJCShfTVg1M19QQURfUEFUQV9ETUFSUV9fVUFSVDJfVFhEX01VWCB8IE1VWF9QQURfQ1RSTChNWDUzX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RNQVJRX19DQ01fQ0NNX09VVF8wCQkoX01YNTNfUEFEX1BBVEFfRE1BUlFfX0NDTV9DQ01fT1VUXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RNQVJRX19VU0JQSFkyX0RBVEFPVVRfNAkJKF9NWDUzX1BBRF9QQVRBX0RNQVJRX19VU0JQSFkyX0RBVEFPVVRfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19QQVRBX0JVRkZFUl9FTgkJKF9NWDUzX1BBRF9QQVRBX0JVRkZFUl9FTl9fUEFUQV9CVUZGRVJfRU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0JVRkZFUl9FTl9fR1BJTzdfMQkJKF9NWDUzX1BBRF9QQVRBX0JVRkZFUl9FTl9fR1BJTzdfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19VQVJUMl9SWERfTVVYCQkoX01YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19VQVJUMl9SWERfTVVYIHwgTVVYX1BBRF9DVFJMKE1YNTNfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19DQ01fQ0NNX09VVF8xCQkoX01YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19DQ01fQ0NNX09VVF8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9CVUZGRVJfRU5fX1VTQlBIWTJfREFUQU9VVF81CQkoX01YNTNfUEFEX1BBVEFfQlVGRkVSX0VOX19VU0JQSFkyX0RBVEFPVVRfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfSU5UUlFfX1BBVEFfSU5UUlEJCShfTVg1M19QQURfUEFUQV9JTlRSUV9fUEFUQV9JTlRSUSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfSU5UUlFfX0dQSU83XzIJCShfTVg1M19QQURfUEFUQV9JTlRSUV9fR1BJTzdfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfSU5UUlFfX1VBUlQyX0NUUwkJKF9NWDUzX1BBRF9QQVRBX0lOVFJRX19VQVJUMl9DVFMgfCBNVVhfUEFEX0NUUkwoTVg1M19VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9JTlRSUV9fQ0FOMV9UWENBTgkJKF9NWDUzX1BBRF9QQVRBX0lOVFJRX19DQU4xX1RYQ0FOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9JTlRSUV9fQ0NNX0NDTV9PVVRfMgkJKF9NWDUzX1BBRF9QQVRBX0lOVFJRX19DQ01fQ0NNX09VVF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9JTlRSUV9fVVNCUEhZMl9EQVRBT1VUXzYJCShfTVg1M19QQURfUEFUQV9JTlRSUV9fVVNCUEhZMl9EQVRBT1VUXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RJT1JfX1BBVEFfRElPUgkJKF9NWDUzX1BBRF9QQVRBX0RJT1JfX1BBVEFfRElPUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfRElPUl9fR1BJTzdfMwkJKF9NWDUzX1BBRF9QQVRBX0RJT1JfX0dQSU83XzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RJT1JfX1VBUlQyX1JUUwkJKF9NWDUzX1BBRF9QQVRBX0RJT1JfX1VBUlQyX1JUUyB8IE1VWF9QQURfQ1RSTChNWDUzX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RJT1JfX0NBTjFfUlhDQU4JCShfTVg1M19QQURfUEFUQV9ESU9SX19DQU4xX1JYQ0FOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9ESU9SX19VU0JQSFkyX0RBVEFPVVRfNwkJKF9NWDUzX1BBRF9QQVRBX0RJT1JfX1VTQlBIWTJfREFUQU9VVF83IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9SRVNFVF9CX19QQVRBX1BBVEFfUkVTRVRfQgkJKF9NWDUzX1BBRF9QQVRBX1JFU0VUX0JfX1BBVEFfUEFUQV9SRVNFVF9CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9SRVNFVF9CX19HUElPN180CQkoX01YNTNfUEFEX1BBVEFfUkVTRVRfQl9fR1BJTzdfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfUkVTRVRfQl9fRVNESEMzX0NNRAkJKF9NWDUzX1BBRF9QQVRBX1JFU0VUX0JfX0VTREhDM19DTUQgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9SRVNFVF9CX19VQVJUMV9DVFMJCShfTVg1M19QQURfUEFUQV9SRVNFVF9CX19VQVJUMV9DVFMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX1JFU0VUX0JfX0NBTjJfVFhDQU4JCShfTVg1M19QQURfUEFUQV9SRVNFVF9CX19DQU4yX1RYQ0FOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9SRVNFVF9CX19VU0JQSFkxX0RBVEFPVVRfMAkJKF9NWDUzX1BBRF9QQVRBX1JFU0VUX0JfX1VTQlBIWTFfREFUQU9VVF8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9JT1JEWV9fUEFUQV9JT1JEWQkJKF9NWDUzX1BBRF9QQVRBX0lPUkRZX19QQVRBX0lPUkRZIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9JT1JEWV9fR1BJTzdfNQkJKF9NWDUzX1BBRF9QQVRBX0lPUkRZX19HUElPN181IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9JT1JEWV9fRVNESEMzX0NMSwkJKF9NWDUzX1BBRF9QQVRBX0lPUkRZX19FU0RIQzNfQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfSU9SRFlfX1VBUlQxX1JUUwkJKF9NWDUzX1BBRF9QQVRBX0lPUkRZX19VQVJUMV9SVFMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0lPUkRZX19DQU4yX1JYQ0FOCQkoX01YNTNfUEFEX1BBVEFfSU9SRFlfX0NBTjJfUlhDQU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0lPUkRZX19VU0JQSFkxX0RBVEFPVVRfMQkJKF9NWDUzX1BBRF9QQVRBX0lPUkRZX19VU0JQSFkxX0RBVEFPVVRfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFfMF9fUEFUQV9EQV8wCQkoX01YNTNfUEFEX1BBVEFfREFfMF9fUEFUQV9EQV8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQV8wX19HUElPN182CQkoX01YNTNfUEFEX1BBVEFfREFfMF9fR1BJTzdfNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFfMF9fRVNESEMzX1JTVAkJKF9NWDUzX1BBRF9QQVRBX0RBXzBfX0VTREhDM19SU1QgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBXzBfX09XSVJFX0xJTkUJCShfTVg1M19QQURfUEFUQV9EQV8wX19PV0lSRV9MSU5FIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQV8wX19VU0JQSFkxX0RBVEFPVVRfMgkJKF9NWDUzX1BBRF9QQVRBX0RBXzBfX1VTQlBIWTFfREFUQU9VVF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQV8xX19QQVRBX0RBXzEJCShfTVg1M19QQURfUEFUQV9EQV8xX19QQVRBX0RBXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBXzFfX0dQSU83XzcJCShfTVg1M19QQURfUEFUQV9EQV8xX19HUElPN183IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQV8xX19FU0RIQzRfQ01ECQkoX01YNTNfUEFEX1BBVEFfREFfMV9fRVNESEM0X0NNRCB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBXzFfX1VBUlQzX0NUUwkJKF9NWDUzX1BBRF9QQVRBX0RBXzFfX1VBUlQzX0NUUyB8IE1VWF9QQURfQ1RSTChNWDUzX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBXzFfX1VTQlBIWTFfREFUQU9VVF8zCQkoX01YNTNfUEFEX1BBVEFfREFfMV9fVVNCUEhZMV9EQVRBT1VUXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBXzJfX1BBVEFfREFfMgkJKF9NWDUzX1BBRF9QQVRBX0RBXzJfX1BBVEFfREFfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFfMl9fR1BJTzdfOAkJKF9NWDUzX1BBRF9QQVRBX0RBXzJfX0dQSU83XzggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBXzJfX0VTREhDNF9DTEsJCShfTVg1M19QQURfUEFUQV9EQV8yX19FU0RIQzRfQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFfMl9fVUFSVDNfUlRTCQkoX01YNTNfUEFEX1BBVEFfREFfMl9fVUFSVDNfUlRTIHwgTVVYX1BBRF9DVFJMKE1YNTNfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFfMl9fVVNCUEhZMV9EQVRBT1VUXzQJCShfTVg1M19QQURfUEFUQV9EQV8yX19VU0JQSFkxX0RBVEFPVVRfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfQ1NfMF9fUEFUQV9DU18wCQkoX01YNTNfUEFEX1BBVEFfQ1NfMF9fUEFUQV9DU18wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9DU18wX19HUElPN185CQkoX01YNTNfUEFEX1BBVEFfQ1NfMF9fR1BJTzdfOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfQ1NfMF9fVUFSVDNfVFhEX01VWAkJKF9NWDUzX1BBRF9QQVRBX0NTXzBfX1VBUlQzX1RYRF9NVVggfCBNVVhfUEFEX0NUUkwoTVg1M19VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9DU18wX19VU0JQSFkxX0RBVEFPVVRfNQkJKF9NWDUzX1BBRF9QQVRBX0NTXzBfX1VTQlBIWTFfREFUQU9VVF81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9DU18xX19QQVRBX0NTXzEJCShfTVg1M19QQURfUEFUQV9DU18xX19QQVRBX0NTXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0NTXzFfX0dQSU83XzEwCQkoX01YNTNfUEFEX1BBVEFfQ1NfMV9fR1BJTzdfMTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0NTXzFfX1VBUlQzX1JYRF9NVVgJCShfTVg1M19QQURfUEFUQV9DU18xX19VQVJUM19SWERfTVVYIHwgTVVYX1BBRF9DVFJMKE1YNTNfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfQ1NfMV9fVVNCUEhZMV9EQVRBT1VUXzYJCShfTVg1M19QQURfUEFUQV9DU18xX19VU0JQSFkxX0RBVEFPVVRfNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTBfX1BBVEFfREFUQV8wCQkoX01YNTNfUEFEX1BBVEFfREFUQTBfX1BBVEFfREFUQV8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMF9fR1BJTzJfMAkJKF9NWDUzX1BBRF9QQVRBX0RBVEEwX19HUElPMl8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMF9fRU1JX05BTkRGX0RfMAkJKF9NWDUzX1BBRF9QQVRBX0RBVEEwX19FTUlfTkFOREZfRF8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMF9fRVNESEMzX0RBVDQJCShfTVg1M19QQURfUEFUQV9EQVRBMF9fRVNESEMzX0RBVDQgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMF9fR1BVM2RfR1BVX0RFQlVHX09VVF8wCQkoX01YNTNfUEFEX1BBVEFfREFUQTBfX0dQVTNkX0dQVV9ERUJVR19PVVRfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTBfX0lQVV9ESUFHX0JVU18wCQkoX01YNTNfUEFEX1BBVEFfREFUQTBfX0lQVV9ESUFHX0JVU18wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMF9fVVNCUEhZMV9EQVRBT1VUXzcJCShfTVg1M19QQURfUEFUQV9EQVRBMF9fVVNCUEhZMV9EQVRBT1VUXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExX19QQVRBX0RBVEFfMQkJKF9NWDUzX1BBRF9QQVRBX0RBVEExX19QQVRBX0RBVEFfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTFfX0dQSU8yXzEJCShfTVg1M19QQURfUEFUQV9EQVRBMV9fR1BJTzJfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTFfX0VNSV9OQU5ERl9EXzEJCShfTVg1M19QQURfUEFUQV9EQVRBMV9fRU1JX05BTkRGX0RfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTFfX0VTREhDM19EQVQ1CQkoX01YNTNfUEFEX1BBVEFfREFUQTFfX0VTREhDM19EQVQ1IHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTFfX0dQVTNkX0dQVV9ERUJVR19PVVRfMQkJKF9NWDUzX1BBRF9QQVRBX0RBVEExX19HUFUzZF9HUFVfREVCVUdfT1VUXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExX19JUFVfRElBR19CVVNfMQkJKF9NWDUzX1BBRF9QQVRBX0RBVEExX19JUFVfRElBR19CVVNfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTJfX1BBVEFfREFUQV8yCQkoX01YNTNfUEFEX1BBVEFfREFUQTJfX1BBVEFfREFUQV8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMl9fR1BJTzJfMgkJKF9NWDUzX1BBRF9QQVRBX0RBVEEyX19HUElPMl8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMl9fRU1JX05BTkRGX0RfMgkJKF9NWDUzX1BBRF9QQVRBX0RBVEEyX19FTUlfTkFOREZfRF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMl9fRVNESEMzX0RBVDYJCShfTVg1M19QQURfUEFUQV9EQVRBMl9fRVNESEMzX0RBVDYgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMl9fR1BVM2RfR1BVX0RFQlVHX09VVF8yCQkoX01YNTNfUEFEX1BBVEFfREFUQTJfX0dQVTNkX0dQVV9ERUJVR19PVVRfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTJfX0lQVV9ESUFHX0JVU18yCQkoX01YNTNfUEFEX1BBVEFfREFUQTJfX0lQVV9ESUFHX0JVU18yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBM19fUEFUQV9EQVRBXzMJCShfTVg1M19QQURfUEFUQV9EQVRBM19fUEFUQV9EQVRBXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEEzX19HUElPMl8zCQkoX01YNTNfUEFEX1BBVEFfREFUQTNfX0dQSU8yXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEEzX19FTUlfTkFOREZfRF8zCQkoX01YNTNfUEFEX1BBVEFfREFUQTNfX0VNSV9OQU5ERl9EXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEEzX19FU0RIQzNfREFUNwkJKF9NWDUzX1BBRF9QQVRBX0RBVEEzX19FU0RIQzNfREFUNyB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEEzX19HUFUzZF9HUFVfREVCVUdfT1VUXzMJCShfTVg1M19QQURfUEFUQV9EQVRBM19fR1BVM2RfR1BVX0RFQlVHX09VVF8zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBM19fSVBVX0RJQUdfQlVTXzMJCShfTVg1M19QQURfUEFUQV9EQVRBM19fSVBVX0RJQUdfQlVTXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE0X19QQVRBX0RBVEFfNAkJKF9NWDUzX1BBRF9QQVRBX0RBVEE0X19QQVRBX0RBVEFfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTRfX0dQSU8yXzQJCShfTVg1M19QQURfUEFUQV9EQVRBNF9fR1BJTzJfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTRfX0VNSV9OQU5ERl9EXzQJCShfTVg1M19QQURfUEFUQV9EQVRBNF9fRU1JX05BTkRGX0RfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTRfX0VTREhDNF9EQVQ0CQkoX01YNTNfUEFEX1BBVEFfREFUQTRfX0VTREhDNF9EQVQ0IHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTRfX0dQVTNkX0dQVV9ERUJVR19PVVRfNAkJKF9NWDUzX1BBRF9QQVRBX0RBVEE0X19HUFUzZF9HUFVfREVCVUdfT1VUXzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE0X19JUFVfRElBR19CVVNfNAkJKF9NWDUzX1BBRF9QQVRBX0RBVEE0X19JUFVfRElBR19CVVNfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTVfX1BBVEFfREFUQV81CQkoX01YNTNfUEFEX1BBVEFfREFUQTVfX1BBVEFfREFUQV81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBNV9fR1BJTzJfNQkJKF9NWDUzX1BBRF9QQVRBX0RBVEE1X19HUElPMl81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBNV9fRU1JX05BTkRGX0RfNQkJKF9NWDUzX1BBRF9QQVRBX0RBVEE1X19FTUlfTkFOREZfRF81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBNV9fRVNESEM0X0RBVDUJCShfTVg1M19QQURfUEFUQV9EQVRBNV9fRVNESEM0X0RBVDUgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBNV9fR1BVM2RfR1BVX0RFQlVHX09VVF81CQkoX01YNTNfUEFEX1BBVEFfREFUQTVfX0dQVTNkX0dQVV9ERUJVR19PVVRfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTVfX0lQVV9ESUFHX0JVU181CQkoX01YNTNfUEFEX1BBVEFfREFUQTVfX0lQVV9ESUFHX0JVU181IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBNl9fUEFUQV9EQVRBXzYJCShfTVg1M19QQURfUEFUQV9EQVRBNl9fUEFUQV9EQVRBXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE2X19HUElPMl82CQkoX01YNTNfUEFEX1BBVEFfREFUQTZfX0dQSU8yXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE2X19FTUlfTkFOREZfRF82CQkoX01YNTNfUEFEX1BBVEFfREFUQTZfX0VNSV9OQU5ERl9EXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE2X19FU0RIQzRfREFUNgkJKF9NWDUzX1BBRF9QQVRBX0RBVEE2X19FU0RIQzRfREFUNiB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE2X19HUFUzZF9HUFVfREVCVUdfT1VUXzYJCShfTVg1M19QQURfUEFUQV9EQVRBNl9fR1BVM2RfR1BVX0RFQlVHX09VVF82IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBNl9fSVBVX0RJQUdfQlVTXzYJCShfTVg1M19QQURfUEFUQV9EQVRBNl9fSVBVX0RJQUdfQlVTXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE3X19QQVRBX0RBVEFfNwkJKF9NWDUzX1BBRF9QQVRBX0RBVEE3X19QQVRBX0RBVEFfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTdfX0dQSU8yXzcJCShfTVg1M19QQURfUEFUQV9EQVRBN19fR1BJTzJfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTdfX0VNSV9OQU5ERl9EXzcJCShfTVg1M19QQURfUEFUQV9EQVRBN19fRU1JX05BTkRGX0RfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTdfX0VTREhDNF9EQVQ3CQkoX01YNTNfUEFEX1BBVEFfREFUQTdfX0VTREhDNF9EQVQ3IHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTdfX0dQVTNkX0dQVV9ERUJVR19PVVRfNwkJKF9NWDUzX1BBRF9QQVRBX0RBVEE3X19HUFUzZF9HUFVfREVCVUdfT1VUXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE3X19JUFVfRElBR19CVVNfNwkJKF9NWDUzX1BBRF9QQVRBX0RBVEE3X19JUFVfRElBR19CVVNfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQThfX1BBVEFfREFUQV84CQkoX01YNTNfUEFEX1BBVEFfREFUQThfX1BBVEFfREFUQV84IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBOF9fR1BJTzJfOAkJKF9NWDUzX1BBRF9QQVRBX0RBVEE4X19HUElPMl84IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBOF9fRVNESEMxX0RBVDQJCShfTVg1M19QQURfUEFUQV9EQVRBOF9fRVNESEMxX0RBVDQgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBOF9fRU1JX05BTkRGX0RfOAkJKF9NWDUzX1BBRF9QQVRBX0RBVEE4X19FTUlfTkFOREZfRF84IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBOF9fRVNESEMzX0RBVDAJCShfTVg1M19QQURfUEFUQV9EQVRBOF9fRVNESEMzX0RBVDAgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBOF9fR1BVM2RfR1BVX0RFQlVHX09VVF84CQkoX01YNTNfUEFEX1BBVEFfREFUQThfX0dQVTNkX0dQVV9ERUJVR19PVVRfOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQThfX0lQVV9ESUFHX0JVU184CQkoX01YNTNfUEFEX1BBVEFfREFUQThfX0lQVV9ESUFHX0JVU184IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBOV9fUEFUQV9EQVRBXzkJCShfTVg1M19QQURfUEFUQV9EQVRBOV9fUEFUQV9EQVRBXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE5X19HUElPMl85CQkoX01YNTNfUEFEX1BBVEFfREFUQTlfX0dQSU8yXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE5X19FU0RIQzFfREFUNQkJKF9NWDUzX1BBRF9QQVRBX0RBVEE5X19FU0RIQzFfREFUNSB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE5X19FTUlfTkFOREZfRF85CQkoX01YNTNfUEFEX1BBVEFfREFUQTlfX0VNSV9OQU5ERl9EXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE5X19FU0RIQzNfREFUMQkJKF9NWDUzX1BBRF9QQVRBX0RBVEE5X19FU0RIQzNfREFUMSB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEE5X19HUFUzZF9HUFVfREVCVUdfT1VUXzkJCShfTVg1M19QQURfUEFUQV9EQVRBOV9fR1BVM2RfR1BVX0RFQlVHX09VVF85IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBOV9fSVBVX0RJQUdfQlVTXzkJCShfTVg1M19QQURfUEFUQV9EQVRBOV9fSVBVX0RJQUdfQlVTXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExMF9fUEFUQV9EQVRBXzEwCQkoX01YNTNfUEFEX1BBVEFfREFUQTEwX19QQVRBX0RBVEFfMTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExMF9fR1BJTzJfMTAJCShfTVg1M19QQURfUEFUQV9EQVRBMTBfX0dQSU8yXzEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTBfX0VTREhDMV9EQVQ2CQkoX01YNTNfUEFEX1BBVEFfREFUQTEwX19FU0RIQzFfREFUNiB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExMF9fRU1JX05BTkRGX0RfMTAJCShfTVg1M19QQURfUEFUQV9EQVRBMTBfX0VNSV9OQU5ERl9EXzEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTBfX0VTREhDM19EQVQyCQkoX01YNTNfUEFEX1BBVEFfREFUQTEwX19FU0RIQzNfREFUMiB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExMF9fR1BVM2RfR1BVX0RFQlVHX09VVF8xMAkJKF9NWDUzX1BBRF9QQVRBX0RBVEExMF9fR1BVM2RfR1BVX0RFQlVHX09VVF8xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTEwX19JUFVfRElBR19CVVNfMTAJCShfTVg1M19QQURfUEFUQV9EQVRBMTBfX0lQVV9ESUFHX0JVU18xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTExX19QQVRBX0RBVEFfMTEJCShfTVg1M19QQURfUEFUQV9EQVRBMTFfX1BBVEFfREFUQV8xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTExX19HUElPMl8xMQkJKF9NWDUzX1BBRF9QQVRBX0RBVEExMV9fR1BJTzJfMTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExMV9fRVNESEMxX0RBVDcJCShfTVg1M19QQURfUEFUQV9EQVRBMTFfX0VTREhDMV9EQVQ3IHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTExX19FTUlfTkFOREZfRF8xMQkJKF9NWDUzX1BBRF9QQVRBX0RBVEExMV9fRU1JX05BTkRGX0RfMTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExMV9fRVNESEMzX0RBVDMJCShfTVg1M19QQURfUEFUQV9EQVRBMTFfX0VTREhDM19EQVQzIHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTExX19HUFUzZF9HUFVfREVCVUdfT1VUXzExCQkoX01YNTNfUEFEX1BBVEFfREFUQTExX19HUFUzZF9HUFVfREVCVUdfT1VUXzExIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTFfX0lQVV9ESUFHX0JVU18xMQkJKF9NWDUzX1BBRF9QQVRBX0RBVEExMV9fSVBVX0RJQUdfQlVTXzExIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTJfX1BBVEFfREFUQV8xMgkJKF9NWDUzX1BBRF9QQVRBX0RBVEExMl9fUEFUQV9EQVRBXzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTJfX0dQSU8yXzEyCQkoX01YNTNfUEFEX1BBVEFfREFUQTEyX19HUElPMl8xMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTEyX19FU0RIQzJfREFUNAkJKF9NWDUzX1BBRF9QQVRBX0RBVEExMl9fRVNESEMyX0RBVDQgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTJfX0VNSV9OQU5ERl9EXzEyCQkoX01YNTNfUEFEX1BBVEFfREFUQTEyX19FTUlfTkFOREZfRF8xMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTEyX19FU0RIQzRfREFUMAkJKF9NWDUzX1BBRF9QQVRBX0RBVEExMl9fRVNESEM0X0RBVDAgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTJfX0dQVTNkX0dQVV9ERUJVR19PVVRfMTIJCShfTVg1M19QQURfUEFUQV9EQVRBMTJfX0dQVTNkX0dQVV9ERUJVR19PVVRfMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExMl9fSVBVX0RJQUdfQlVTXzEyCQkoX01YNTNfUEFEX1BBVEFfREFUQTEyX19JUFVfRElBR19CVVNfMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExM19fUEFUQV9EQVRBXzEzCQkoX01YNTNfUEFEX1BBVEFfREFUQTEzX19QQVRBX0RBVEFfMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExM19fR1BJTzJfMTMJCShfTVg1M19QQURfUEFUQV9EQVRBMTNfX0dQSU8yXzEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTNfX0VTREhDMl9EQVQ1CQkoX01YNTNfUEFEX1BBVEFfREFUQTEzX19FU0RIQzJfREFUNSB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExM19fRU1JX05BTkRGX0RfMTMJCShfTVg1M19QQURfUEFUQV9EQVRBMTNfX0VNSV9OQU5ERl9EXzEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTNfX0VTREhDNF9EQVQxCQkoX01YNTNfUEFEX1BBVEFfREFUQTEzX19FU0RIQzRfREFUMSB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExM19fR1BVM2RfR1BVX0RFQlVHX09VVF8xMwkJKF9NWDUzX1BBRF9QQVRBX0RBVEExM19fR1BVM2RfR1BVX0RFQlVHX09VVF8xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTEzX19JUFVfRElBR19CVVNfMTMJCShfTVg1M19QQURfUEFUQV9EQVRBMTNfX0lQVV9ESUFHX0JVU18xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTE0X19QQVRBX0RBVEFfMTQJCShfTVg1M19QQURfUEFUQV9EQVRBMTRfX1BBVEFfREFUQV8xNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTE0X19HUElPMl8xNAkJKF9NWDUzX1BBRF9QQVRBX0RBVEExNF9fR1BJTzJfMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExNF9fRVNESEMyX0RBVDYJCShfTVg1M19QQURfUEFUQV9EQVRBMTRfX0VTREhDMl9EQVQ2IHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTE0X19FTUlfTkFOREZfRF8xNAkJKF9NWDUzX1BBRF9QQVRBX0RBVEExNF9fRU1JX05BTkRGX0RfMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExNF9fRVNESEM0X0RBVDIJCShfTVg1M19QQURfUEFUQV9EQVRBMTRfX0VTREhDNF9EQVQyIHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTE0X19HUFUzZF9HUFVfREVCVUdfT1VUXzE0CQkoX01YNTNfUEFEX1BBVEFfREFUQTE0X19HUFUzZF9HUFVfREVCVUdfT1VUXzE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTRfX0lQVV9ESUFHX0JVU18xNAkJKF9NWDUzX1BBRF9QQVRBX0RBVEExNF9fSVBVX0RJQUdfQlVTXzE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTVfX1BBVEFfREFUQV8xNQkJKF9NWDUzX1BBRF9QQVRBX0RBVEExNV9fUEFUQV9EQVRBXzE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTVfX0dQSU8yXzE1CQkoX01YNTNfUEFEX1BBVEFfREFUQTE1X19HUElPMl8xNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTE1X19FU0RIQzJfREFUNwkJKF9NWDUzX1BBRF9QQVRBX0RBVEExNV9fRVNESEMyX0RBVDcgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTVfX0VNSV9OQU5ERl9EXzE1CQkoX01YNTNfUEFEX1BBVEFfREFUQTE1X19FTUlfTkFOREZfRF8xNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1BBVEFfREFUQTE1X19FU0RIQzRfREFUMwkJKF9NWDUzX1BBRF9QQVRBX0RBVEExNV9fRVNESEM0X0RBVDMgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfUEFUQV9EQVRBMTVfX0dQVTNkX0dQVV9ERUJVR19PVVRfMTUJCShfTVg1M19QQURfUEFUQV9EQVRBMTVfX0dQVTNkX0dQVV9ERUJVR19PVVRfMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9QQVRBX0RBVEExNV9fSVBVX0RJQUdfQlVTXzE1CQkoX01YNTNfUEFEX1BBVEFfREFUQTE1X19JUFVfRElBR19CVVNfMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTBfX0VTREhDMV9EQVQwCQkoX01YNTNfUEFEX1NEMV9EQVRBMF9fRVNESEMxX0RBVDAgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEwX19HUElPMV8xNgkJKF9NWDUzX1BBRF9TRDFfREFUQTBfX0dQSU8xXzE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEwX19HUFRfQ0FQSU4xCQkoX01YNTNfUEFEX1NEMV9EQVRBMF9fR1BUX0NBUElOMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBMF9fQ1NQSV9NSVNPCQkoX01YNTNfUEFEX1NEMV9EQVRBMF9fQ1NQSV9NSVNPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEwX19DQ01fUExMM19CWVAJCShfTVg1M19QQURfU0QxX0RBVEEwX19DQ01fUExMM19CWVAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTFfX0VTREhDMV9EQVQxCQkoX01YNTNfUEFEX1NEMV9EQVRBMV9fRVNESEMxX0RBVDEgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEExX19HUElPMV8xNwkJKF9NWDUzX1BBRF9TRDFfREFUQTFfX0dQSU8xXzE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEExX19HUFRfQ0FQSU4yCQkoX01YNTNfUEFEX1NEMV9EQVRBMV9fR1BUX0NBUElOMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBMV9fQ1NQSV9TUzAJCShfTVg1M19QQURfU0QxX0RBVEExX19DU1BJX1NTMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBMV9fQ0NNX1BMTDRfQllQCQkoX01YNTNfUEFEX1NEMV9EQVRBMV9fQ0NNX1BMTDRfQllQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0NNRF9fRVNESEMxX0NNRAkJKF9NWDUzX1BBRF9TRDFfQ01EX19FU0RIQzFfQ01EIHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9DTURfX0dQSU8xXzE4CQkoX01YNTNfUEFEX1NEMV9DTURfX0dQSU8xXzE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0NNRF9fR1BUX0NNUE9VVDEJCShfTVg1M19QQURfU0QxX0NNRF9fR1BUX0NNUE9VVDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfQ01EX19DU1BJX01PU0kJCShfTVg1M19QQURfU0QxX0NNRF9fQ1NQSV9NT1NJIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0NNRF9fQ0NNX1BMTDFfQllQCQkoX01YNTNfUEFEX1NEMV9DTURfX0NDTV9QTEwxX0JZUCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBMl9fRVNESEMxX0RBVDIJCShfTVg1M19QQURfU0QxX0RBVEEyX19FU0RIQzFfREFUMiB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTJfX0dQSU8xXzE5CQkoX01YNTNfUEFEX1NEMV9EQVRBMl9fR1BJTzFfMTkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTJfX0dQVF9DTVBPVVQyCQkoX01YNTNfUEFEX1NEMV9EQVRBMl9fR1BUX0NNUE9VVDIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTJfX1BXTTJfUFdNTwkJKF9NWDUzX1BBRF9TRDFfREFUQTJfX1BXTTJfUFdNTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBMl9fV0RPRzFfV0RPR19CCQkoX01YNTNfUEFEX1NEMV9EQVRBMl9fV0RPRzFfV0RPR19CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEyX19DU1BJX1NTMQkJKF9NWDUzX1BBRF9TRDFfREFUQTJfX0NTUElfU1MxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEyX19XRE9HMV9XRE9HX1JTVF9CX0RFQgkJKF9NWDUzX1BBRF9TRDFfREFUQTJfX1dET0cxX1dET0dfUlNUX0JfREVCIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEyX19DQ01fUExMMl9CWVAJCShfTVg1M19QQURfU0QxX0RBVEEyX19DQ01fUExMMl9CWVAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfQ0xLX19FU0RIQzFfQ0xLCQkoX01YNTNfUEFEX1NEMV9DTEtfX0VTREhDMV9DTEsgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0NMS19fR1BJTzFfMjAJCShfTVg1M19QQURfU0QxX0NMS19fR1BJTzFfMjAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfQ0xLX19PU0MzMmtfMzJLX09VVAkJKF9NWDUzX1BBRF9TRDFfQ0xLX19PU0MzMmtfMzJLX09VVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9DTEtfX0dQVF9DTEtJTgkJKF9NWDUzX1BBRF9TRDFfQ0xLX19HUFRfQ0xLSU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfQ0xLX19DU1BJX1NDTEsJCShfTVg1M19QQURfU0QxX0NMS19fQ1NQSV9TQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0NMS19fU0FUQV9QSFlfRFRCXzAJCShfTVg1M19QQURfU0QxX0NMS19fU0FUQV9QSFlfRFRCXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTNfX0VTREhDMV9EQVQzCQkoX01YNTNfUEFEX1NEMV9EQVRBM19fRVNESEMxX0RBVDMgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEzX19HUElPMV8yMQkJKF9NWDUzX1BBRF9TRDFfREFUQTNfX0dQSU8xXzIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEzX19HUFRfQ01QT1VUMwkJKF9NWDUzX1BBRF9TRDFfREFUQTNfX0dQVF9DTVBPVVQzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEzX19QV00xX1BXTU8JCShfTVg1M19QQURfU0QxX0RBVEEzX19QV00xX1BXTU8gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTNfX1dET0cyX1dET0dfQgkJKF9NWDUzX1BBRF9TRDFfREFUQTNfX1dET0cyX1dET0dfQiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBM19fQ1NQSV9TUzIJCShfTVg1M19QQURfU0QxX0RBVEEzX19DU1BJX1NTMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBM19fV0RPRzJfV0RPR19SU1RfQl9ERUIJCShfTVg1M19QQURfU0QxX0RBVEEzX19XRE9HMl9XRE9HX1JTVF9CX0RFQiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBM19fU0FUQV9QSFlfRFRCXzEJCShfTVg1M19QQURfU0QxX0RBVEEzX19TQVRBX1BIWV9EVEJfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9DTEtfX0VTREhDMl9DTEsJCShfTVg1M19QQURfU0QyX0NMS19fRVNESEMyX0NMSyB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfQ0xLX19HUElPMV8xMAkJKF9NWDUzX1BBRF9TRDJfQ0xLX19HUElPMV8xMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9DTEtfX0tQUF9DT0xfNQkJKF9NWDUzX1BBRF9TRDJfQ0xLX19LUFBfQ09MXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfQ0xLX19BVURNVVhfQVVENF9SWEZTCQkoX01YNTNfUEFEX1NEMl9DTEtfX0FVRE1VWF9BVUQ0X1JYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfQ0xLX19DU1BJX1NDTEsJCShfTVg1M19QQURfU0QyX0NMS19fQ1NQSV9TQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0NMS19fU0NDX1JBTkRPTV9WCQkoX01YNTNfUEFEX1NEMl9DTEtfX1NDQ19SQU5ET01fViB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9DTURfX0VTREhDMl9DTUQJCShfTVg1M19QQURfU0QyX0NNRF9fRVNESEMyX0NNRCB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfQ01EX19HUElPMV8xMQkJKF9NWDUzX1BBRF9TRDJfQ01EX19HUElPMV8xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9DTURfX0tQUF9ST1dfNQkJKF9NWDUzX1BBRF9TRDJfQ01EX19LUFBfUk9XXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfQ01EX19BVURNVVhfQVVENF9SWEMJCShfTVg1M19QQURfU0QyX0NNRF9fQVVETVVYX0FVRDRfUlhDIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0NNRF9fQ1NQSV9NT1NJCQkoX01YNTNfUEFEX1NEMl9DTURfX0NTUElfTU9TSSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9DTURfX1NDQ19SQU5ET00JCShfTVg1M19QQURfU0QyX0NNRF9fU0NDX1JBTkRPTSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBM19fRVNESEMyX0RBVDMJCShfTVg1M19QQURfU0QyX0RBVEEzX19FU0RIQzJfREFUMyB8IE1VWF9QQURfQ1RSTChNWDUzX1NESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTNfX0dQSU8xXzEyCQkoX01YNTNfUEFEX1NEMl9EQVRBM19fR1BJTzFfMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTNfX0tQUF9DT0xfNgkJKF9NWDUzX1BBRF9TRDJfREFUQTNfX0tQUF9DT0xfNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBM19fQVVETVVYX0FVRDRfVFhDCQkoX01YNTNfUEFEX1NEMl9EQVRBM19fQVVETVVYX0FVRDRfVFhDIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEEzX19DU1BJX1NTMgkJKF9NWDUzX1BBRF9TRDJfREFUQTNfX0NTUElfU1MyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEEzX19TSkNfRE9ORQkJKF9NWDUzX1BBRF9TRDJfREFUQTNfX1NKQ19ET05FIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEEyX19FU0RIQzJfREFUMgkJKF9NWDUzX1BBRF9TRDJfREFUQTJfX0VTREhDMl9EQVQyIHwgTVVYX1BBRF9DVFJMKE1YNTNfU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBMl9fR1BJTzFfMTMJCShfTVg1M19QQURfU0QyX0RBVEEyX19HUElPMV8xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBMl9fS1BQX1JPV182CQkoX01YNTNfUEFEX1NEMl9EQVRBMl9fS1BQX1JPV182IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEEyX19BVURNVVhfQVVENF9UWEQJCShfTVg1M19QQURfU0QyX0RBVEEyX19BVURNVVhfQVVENF9UWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTJfX0NTUElfU1MxCQkoX01YNTNfUEFEX1NEMl9EQVRBMl9fQ1NQSV9TUzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTJfX1NKQ19GQUlMCQkoX01YNTNfUEFEX1NEMl9EQVRBMl9fU0pDX0ZBSUwgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTFfX0VTREhDMl9EQVQxCQkoX01YNTNfUEFEX1NEMl9EQVRBMV9fRVNESEMyX0RBVDEgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEExX19HUElPMV8xNAkJKF9NWDUzX1BBRF9TRDJfREFUQTFfX0dQSU8xXzE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEExX19LUFBfQ09MXzcJCShfTVg1M19QQURfU0QyX0RBVEExX19LUFBfQ09MXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTFfX0FVRE1VWF9BVUQ0X1RYRlMJCShfTVg1M19QQURfU0QyX0RBVEExX19BVURNVVhfQVVENF9UWEZTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEExX19DU1BJX1NTMAkJKF9NWDUzX1BBRF9TRDJfREFUQTFfX0NTUElfU1MwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEExX19SVElDX1NFQ19WSU8JCShfTVg1M19QQURfU0QyX0RBVEExX19SVElDX1NFQ19WSU8gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTBfX0VTREhDMl9EQVQwCQkoX01YNTNfUEFEX1NEMl9EQVRBMF9fRVNESEMyX0RBVDAgfCBNVVhfUEFEX0NUUkwoTVg1M19TREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEEwX19HUElPMV8xNQkJKF9NWDUzX1BBRF9TRDJfREFUQTBfX0dQSU8xXzE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEEwX19LUFBfUk9XXzcJCShfTVg1M19QQURfU0QyX0RBVEEwX19LUFBfUk9XXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfREFUQTBfX0FVRE1VWF9BVUQ0X1JYRAkJKF9NWDUzX1BBRF9TRDJfREFUQTBfX0FVRE1VWF9BVUQ0X1JYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBMF9fQ1NQSV9NSVNPCQkoX01YNTNfUEFEX1NEMl9EQVRBMF9fQ1NQSV9NSVNPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0RBVEEwX19SVElDX0RPTkVfSU5UCQkoX01YNTNfUEFEX1NEMl9EQVRBMF9fUlRJQ19ET05FX0lOVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMF9fQ0NNX0NMS08JCShfTVg1M19QQURfR1BJT18wX19DQ01fQ0xLTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMF9fR1BJTzFfMAkJKF9NWDUzX1BBRF9HUElPXzBfX0dQSU8xXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzBfX0tQUF9DT0xfNQkJKF9NWDUzX1BBRF9HUElPXzBfX0tQUF9DT0xfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMF9fQ0NNX1NTSV9FWFQxX0NMSwkJKF9NWDUzX1BBRF9HUElPXzBfX0NDTV9TU0lfRVhUMV9DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzBfX0VQSVQxX0VQSVRPCQkoX01YNTNfUEFEX0dQSU9fMF9fRVBJVDFfRVBJVE8gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzBfX1NSVENfQUxBUk1fREVCCQkoX01YNTNfUEFEX0dQSU9fMF9fU1JUQ19BTEFSTV9ERUIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzBfX1VTQk9IM19VU0JIMV9QV1IJCShfTVg1M19QQURfR1BJT18wX19VU0JPSDNfVVNCSDFfUFdSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18wX19DU1VfVEQJCShfTVg1M19QQURfR1BJT18wX19DU1VfVEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzFfX0VTQUkxX1NDS1IJCShfTVg1M19QQURfR1BJT18xX19FU0FJMV9TQ0tSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xX19HUElPMV8xCQkoX01YNTNfUEFEX0dQSU9fMV9fR1BJTzFfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMV9fS1BQX1JPV181CQkoX01YNTNfUEFEX0dQSU9fMV9fS1BQX1JPV181IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xX19DQ01fU1NJX0VYVDJfQ0xLCQkoX01YNTNfUEFEX0dQSU9fMV9fQ0NNX1NTSV9FWFQyX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMV9fUFdNMl9QV01PCQkoX01YNTNfUEFEX0dQSU9fMV9fUFdNMl9QV01PIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xX19XRE9HMl9XRE9HX0IJCShfTVg1M19QQURfR1BJT18xX19XRE9HMl9XRE9HX0IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzFfX0VTREhDMV9DRAkJKF9NWDUzX1BBRF9HUElPXzFfX0VTREhDMV9DRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMV9fU1JDX1RFU1RFUl9BQ0sJCShfTVg1M19QQURfR1BJT18xX19TUkNfVEVTVEVSX0FDSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fOV9fRVNBSTFfRlNSCQkoX01YNTNfUEFEX0dQSU9fOV9fRVNBSTFfRlNSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT185X19HUElPMV85CQkoX01YNTNfUEFEX0dQSU9fOV9fR1BJTzFfOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fOV9fS1BQX0NPTF82CQkoX01YNTNfUEFEX0dQSU9fOV9fS1BQX0NPTF82IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT185X19DQ01fUkVGX0VOX0IJCShfTVg1M19QQURfR1BJT185X19DQ01fUkVGX0VOX0IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzlfX1BXTTFfUFdNTwkJKF9NWDUzX1BBRF9HUElPXzlfX1BXTTFfUFdNTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fOV9fV0RPRzFfV0RPR19CCQkoX01YNTNfUEFEX0dQSU9fOV9fV0RPRzFfV0RPR19CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT185X19FU0RIQzFfV1AJCShfTVg1M19QQURfR1BJT185X19FU0RIQzFfV1AgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzlfX1NDQ19GQUlMX1NUQVRFCQkoX01YNTNfUEFEX0dQSU9fOV9fU0NDX0ZBSUxfU1RBVEUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzNfX0VTQUkxX0hDS1IJCShfTVg1M19QQURfR1BJT18zX19FU0FJMV9IQ0tSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18zX19HUElPMV8zCQkoX01YNTNfUEFEX0dQSU9fM19fR1BJTzFfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fM19fSTJDM19TQ0wJCShfTVg1M19QQURfR1BJT18zX19JMkMzX1NDTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fM19fRFBMTElQMV9UT0dfRU4JCShfTVg1M19QQURfR1BJT18zX19EUExMSVAxX1RPR19FTiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fM19fQ0NNX0NMS08yCQkoX01YNTNfUEFEX0dQSU9fM19fQ0NNX0NMS08yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18zX19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUMAkJKF9NWDUzX1BBRF9HUElPXzNfX09CU0VSVkVfTVVYX09CU1JWX0lOVF9PVVQwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18zX19VU0JPSDNfVVNCSDFfT0MJCShfTVg1M19QQURfR1BJT18zX19VU0JPSDNfVVNCSDFfT0MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzNfX01MQl9NTEJDTEsJCShfTVg1M19QQURfR1BJT18zX19NTEJfTUxCQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT182X19FU0FJMV9TQ0tUCQkoX01YNTNfUEFEX0dQSU9fNl9fRVNBSTFfU0NLVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNl9fR1BJTzFfNgkJKF9NWDUzX1BBRF9HUElPXzZfX0dQSU8xXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzZfX0kyQzNfU0RBCQkoX01YNTNfUEFEX0dQSU9fNl9fSTJDM19TREEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzZfX0NDTV9DQ01fT1VUXzAJCShfTVg1M19QQURfR1BJT182X19DQ01fQ0NNX09VVF8wIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT182X19DU1VfQ1NVX0lOVF9ERUIJCShfTVg1M19QQURfR1BJT182X19DU1VfQ1NVX0lOVF9ERUIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzZfX09CU0VSVkVfTVVYX09CU1JWX0lOVF9PVVQxCQkoX01YNTNfUEFEX0dQSU9fNl9fT0JTRVJWRV9NVVhfT0JTUlZfSU5UX09VVDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzZfX0VTREhDMl9MQ1RMCQkoX01YNTNfUEFEX0dQSU9fNl9fRVNESEMyX0xDVEwgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzZfX01MQl9NTEJTSUcJCShfTVg1M19QQURfR1BJT182X19NTEJfTUxCU0lHIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18yX19FU0FJMV9GU1QJCShfTVg1M19QQURfR1BJT18yX19FU0FJMV9GU1QgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzJfX0dQSU8xXzIJCShfTVg1M19QQURfR1BJT18yX19HUElPMV8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18yX19LUFBfUk9XXzYJCShfTVg1M19QQURfR1BJT18yX19LUFBfUk9XXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzJfX0NDTV9DQ01fT1VUXzEJCShfTVg1M19QQURfR1BJT18yX19DQ01fQ0NNX09VVF8xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18yX19DU1VfQ1NVX0FMQVJNX0FVVF8wCQkoX01YNTNfUEFEX0dQSU9fMl9fQ1NVX0NTVV9BTEFSTV9BVVRfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMl9fT0JTRVJWRV9NVVhfT0JTUlZfSU5UX09VVDIJCShfTVg1M19QQURfR1BJT18yX19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMl9fRVNESEMyX1dQCQkoX01YNTNfUEFEX0dQSU9fMl9fRVNESEMyX1dQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18yX19NTEJfTUxCREFUCQkoX01YNTNfUEFEX0dQSU9fMl9fTUxCX01MQkRBVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNF9fRVNBSTFfSENLVAkJKF9NWDUzX1BBRF9HUElPXzRfX0VTQUkxX0hDS1QgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzRfX0dQSU8xXzQJCShfTVg1M19QQURfR1BJT180X19HUElPMV80IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT180X19LUFBfQ09MXzcJCShfTVg1M19QQURfR1BJT180X19LUFBfQ09MXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzRfX0NDTV9DQ01fT1VUXzIJCShfTVg1M19QQURfR1BJT180X19DQ01fQ0NNX09VVF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT180X19DU1VfQ1NVX0FMQVJNX0FVVF8xCQkoX01YNTNfUEFEX0dQSU9fNF9fQ1NVX0NTVV9BTEFSTV9BVVRfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNF9fT0JTRVJWRV9NVVhfT0JTUlZfSU5UX09VVDMJCShfTVg1M19QQURfR1BJT180X19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNF9fRVNESEMyX0NECQkoX01YNTNfUEFEX0dQSU9fNF9fRVNESEMyX0NEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT180X19TQ0NfU0VDX1NUQVRFCQkoX01YNTNfUEFEX0dQSU9fNF9fU0NDX1NFQ19TVEFURSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNV9fRVNBSTFfVFgyX1JYMwkJKF9NWDUzX1BBRF9HUElPXzVfX0VTQUkxX1RYMl9SWDMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzVfX0dQSU8xXzUJCShfTVg1M19QQURfR1BJT181X19HUElPMV81IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT181X19LUFBfUk9XXzcJCShfTVg1M19QQURfR1BJT181X19LUFBfUk9XXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzVfX0NDTV9DTEtPCQkoX01YNTNfUEFEX0dQSU9fNV9fQ0NNX0NMS08gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzVfX0NTVV9DU1VfQUxBUk1fQVVUXzIJCShfTVg1M19QQURfR1BJT181X19DU1VfQ1NVX0FMQVJNX0FVVF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT181X19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUNAkJKF9NWDUzX1BBRF9HUElPXzVfX09CU0VSVkVfTVVYX09CU1JWX0lOVF9PVVQ0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT181X19JMkMzX1NDTAkJKF9NWDUzX1BBRF9HUElPXzVfX0kyQzNfU0NMIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT181X19DQ01fUExMMV9CWVAJCShfTVg1M19QQURfR1BJT181X19DQ01fUExMMV9CWVAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzdfX0VTQUkxX1RYNF9SWDEJCShfTVg1M19QQURfR1BJT183X19FU0FJMV9UWDRfUlgxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT183X19HUElPMV83CQkoX01YNTNfUEFEX0dQSU9fN19fR1BJTzFfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fN19fRVBJVDFfRVBJVE8JCShfTVg1M19QQURfR1BJT183X19FUElUMV9FUElUTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fN19fQ0FOMV9UWENBTgkJKF9NWDUzX1BBRF9HUElPXzdfX0NBTjFfVFhDQU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzdfX1VBUlQyX1RYRF9NVVgJCShfTVg1M19QQURfR1BJT183X19VQVJUMl9UWERfTVVYIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT183X19GSVJJX1JYRAkJKF9NWDUzX1BBRF9HUElPXzdfX0ZJUklfUlhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT183X19TUERJRl9QTE9DSwkJKF9NWDUzX1BBRF9HUElPXzdfX1NQRElGX1BMT0NLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT183X19DQ01fUExMMl9CWVAJCShfTVg1M19QQURfR1BJT183X19DQ01fUExMMl9CWVAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzhfX0VTQUkxX1RYNV9SWDAJCShfTVg1M19QQURfR1BJT184X19FU0FJMV9UWDVfUlgwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT184X19HUElPMV84CQkoX01YNTNfUEFEX0dQSU9fOF9fR1BJTzFfOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fOF9fRVBJVDJfRVBJVE8JCShfTVg1M19QQURfR1BJT184X19FUElUMl9FUElUTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fOF9fQ0FOMV9SWENBTgkJKF9NWDUzX1BBRF9HUElPXzhfX0NBTjFfUlhDQU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzhfX1VBUlQyX1JYRF9NVVgJCShfTVg1M19QQURfR1BJT184X19VQVJUMl9SWERfTVVYIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT184X19GSVJJX1RYRAkJKF9NWDUzX1BBRF9HUElPXzhfX0ZJUklfVFhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT184X19TUERJRl9TUkNMSwkJKF9NWDUzX1BBRF9HUElPXzhfX1NQRElGX1NSQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT184X19DQ01fUExMM19CWVAJCShfTVg1M19QQURfR1BJT184X19DQ01fUExMM19CWVAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE2X19FU0FJMV9UWDNfUlgyCQkoX01YNTNfUEFEX0dQSU9fMTZfX0VTQUkxX1RYM19SWDIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE2X19HUElPN18xMQkJKF9NWDUzX1BBRF9HUElPXzE2X19HUElPN18xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTZfX1RaSUNfUFdSRkFJTF9JTlQJCShfTVg1M19QQURfR1BJT18xNl9fVFpJQ19QV1JGQUlMX0lOVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTZfX1JUQ19DRV9SVENfRVhUX1RSSUcxCQkoX01YNTNfUEFEX0dQSU9fMTZfX1JUQ19DRV9SVENfRVhUX1RSSUcxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xNl9fU1BESUZfSU4xCQkoX01YNTNfUEFEX0dQSU9fMTZfX1NQRElGX0lOMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTZfX0kyQzNfU0RBCQkoX01YNTNfUEFEX0dQSU9fMTZfX0kyQzNfU0RBIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xNl9fU0pDX0RFX0IJCShfTVg1M19QQURfR1BJT18xNl9fU0pDX0RFX0IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE3X19FU0FJMV9UWDAJCShfTVg1M19QQURfR1BJT18xN19fRVNBSTFfVFgwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xN19fR1BJTzdfMTIJCShfTVg1M19QQURfR1BJT18xN19fR1BJTzdfMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE3X19TRE1BX0VYVF9FVkVOVF8wCQkoX01YNTNfUEFEX0dQSU9fMTdfX1NETUFfRVhUX0VWRU5UXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE3X19HUENfUE1JQ19SRFkJCShfTVg1M19QQURfR1BJT18xN19fR1BDX1BNSUNfUkRZIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xN19fUlRDX0NFX1JUQ19GU1ZfVFJJRwkJKF9NWDUzX1BBRF9HUElPXzE3X19SVENfQ0VfUlRDX0ZTVl9UUklHIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xN19fU1BESUZfT1VUMQkJKF9NWDUzX1BBRF9HUElPXzE3X19TUERJRl9PVVQxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xN19fSVBVX1NOT09QMgkJKF9NWDUzX1BBRF9HUElPXzE3X19JUFVfU05PT1AyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xN19fU0pDX0pUQUdfQUNUCQkoX01YNTNfUEFEX0dQSU9fMTdfX1NKQ19KVEFHX0FDVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMThfX0VTQUkxX1RYMQkJKF9NWDUzX1BBRF9HUElPXzE4X19FU0FJMV9UWDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE4X19HUElPN18xMwkJKF9NWDUzX1BBRF9HUElPXzE4X19HUElPN18xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMThfX1NETUFfRVhUX0VWRU5UXzEJCShfTVg1M19QQURfR1BJT18xOF9fU0RNQV9FWFRfRVZFTlRfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMThfX09XSVJFX0xJTkUJCShfTVg1M19QQURfR1BJT18xOF9fT1dJUkVfTElORSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMThfX1JUQ19DRV9SVENfQUxBUk0yX1RSSUcJCShfTVg1M19QQURfR1BJT18xOF9fUlRDX0NFX1JUQ19BTEFSTTJfVFJJRyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMThfX0NDTV9BU1JDX0VYVF9DTEsJCShfTVg1M19QQURfR1BJT18xOF9fQ0NNX0FTUkNfRVhUX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMThfX0VTREhDMV9MQ1RMCQkoX01YNTNfUEFEX0dQSU9fMThfX0VTREhDMV9MQ1RMIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xOF9fU1JDX1NZU1RFTV9SU1QJCShfTVg1M19QQURfR1BJT18xOF9fU1JDX1NZU1RFTV9SU1QgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogCiAjZW5kaWYJLyogX19NQUNIX0lPTVVYX01YNTNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXhjOTEyMzEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teGM5MTIzMS5oCmluZGV4IDE1ZDU5NTEuLmJmMjhkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teGM5MTIzMS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teGM5MTIzMS5oCkBAIC00NiwxMiArNDYsMTIgQEAKICAqIAktIHNldHVwcyB0aGUgaW9tdXggYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmF0aW9uCiAgKiAJLSBpZiB0aGUgcGluIGlzIGNvbmZpZ3VyZWQgYXMgYSBHUElPLCB3ZSBjbGFpbSBpdCB0aHJvdWdoIGtlcm5lbCBncGlvbGliCiAgKi8KLWludCBteGNfaW9tdXhfYWxsb2NfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW5fbW9kZSwgY29uc3QgY2hhciAqbGFiZWwpOworaW50IG14Y19pb211eF9hbGxvY19waW4odW5zaWduZWQgaW50IHBpbl9tb2RlLCBjb25zdCBjaGFyICpsYWJlbCk7CiAvKgogICogc2V0dXBzIG11dGxpcGxlIHBpbnMKICAqIGNvbnZlbmllbnQgd2F5IHRvIGNhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uIHdpdGggdGFibGVzCiAgKi8KLWludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKK2ludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhjb25zdCB1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKIAkJY29uc3QgY2hhciAqbGFiZWwpOwogCiAvKgpAQCAtNjAsMTIgKzYwLDEyIEBACiAgKiAJLSBmcmVlcyB0aGUgR1BJTyBpZiB0aGUgcGluIHdhcyBjb25maWd1cmVkIGFzIEdQSU8KICAqIAktIERPRVMgTk9UIHJlY29uZmlndXJlIHRoZSBJT01VWCBpbiBpdHMgcmVzZXQgc3RhdGUKICAqLwotdm9pZCBteGNfaW9tdXhfcmVsZWFzZV9waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbl9tb2RlKTsKK3ZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfcGluKHVuc2lnbmVkIGludCBwaW5fbW9kZSk7CiAvKgogICogcmVsZWFzZXMgbXVsdGlwbGUgcGlucwogICogY29udmVudmllbnQgd2F5IHRvIGNhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uIHdpdGggdGFibGVzCiAgKi8KLXZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpOwordm9pZCBteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKGNvbnN0IHVuc2lnbmVkIGludCAqcGluX2xpc3QsIGludCBjb3VudCk7CiAKICNkZWZpbmUgTVVYX1NJREVfQVAJCSgwKQogI2RlZmluZSBNVVhfU0lERV9TUAkJKDEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtdjEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12MS5oCmluZGV4IDg4NGY1NzUuLmMwN2QzMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12MS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12MS5oCkBAIC0xMDAsNCArMTAwLDYgQEAKIAkJY29uc3QgY2hhciAqbGFiZWwpOwogZXh0ZXJuIHZvaWQgbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKGNvbnN0IGludCAqcGluX2xpc3QsIGludCBjb3VudCk7CiAKK2V4dGVybiBpbnQgX19pbml0IGlteF9pb211eHYxX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgbnVtcG9ydHMpOworCiAjZW5kaWYgLyogX19NQUNIX0lPTVVYX1YxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYmE2NWM5Mi4uYTNkOTMwZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMjMsMTcgKzIzLDE3IEBACiAjZGVmaW5lIE1YQ19HUElPX0lSUV9TVEFSVAlNWENfSU5URVJOQUxfSVJRUwogCiAvKiB0aGVzZSBhcmUgb3JkZXJlZCBieSBzaXplIHRvIHN1cHBvcnQgbXVsdGktU29DIGtlcm5lbHMgKi8KLSNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YNTMKKyNpZiBkZWZpbmVkIENPTkZJR19TT0NfSU1YNTMKICNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogNykKICNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyCiAjZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDYpCi0jZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YNTAKKyNlbGlmIGRlZmluZWQgQ09ORklHX1NPQ19JTVg1MAogI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA2KQogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDEKICNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogNCkKICNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyNQogI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQotI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDUxCisjZWxpZiBkZWZpbmVkIENPTkZJR19TT0NfSU1YNTEKICNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogNCkKICNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVhDOTEyMzEKICNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogNCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaAppbmRleCA3NWQ5NjIxLi45N2IxOWU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MS5oCkBAIC01NCwxMyArNTQsMTMgQEAKICNkZWZpbmUgTVgxX0FJUEkyX0JBU0VfQUREUgkJKDB4MTAwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQogI2RlZmluZSBNWDFfU0lNX0JBU0VfQUREUgkJKDB4MTEwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQogI2RlZmluZSBNWDFfVVNCRF9CQVNFX0FERFIJCSgweDEyMDAwICsgTVgxX0lPX0JBU0VfQUREUikKLSNkZWZpbmUgTVgxX1NQSTFfQkFTRV9BRERSCQkoMHgxMzAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9DU1BJMV9CQVNFX0FERFIJCSgweDEzMDAwICsgTVgxX0lPX0JBU0VfQUREUikKICNkZWZpbmUgTVgxX01NQ19CQVNFX0FERFIJCSgweDE0MDAwICsgTVgxX0lPX0JBU0VfQUREUikKICNkZWZpbmUgTVgxX0FTUF9CQVNFX0FERFIJCSgweDE1MDAwICsgTVgxX0lPX0JBU0VfQUREUikKICNkZWZpbmUgTVgxX0JUQV9CQVNFX0FERFIJCSgweDE2MDAwICsgTVgxX0lPX0JBU0VfQUREUikKICNkZWZpbmUgTVgxX0kyQ19CQVNFX0FERFIJCSgweDE3MDAwICsgTVgxX0lPX0JBU0VfQUREUikKICNkZWZpbmUgTVgxX1NTSV9CQVNFX0FERFIJCSgweDE4MDAwICsgTVgxX0lPX0JBU0VfQUREUikKLSNkZWZpbmUgTVgxX1NQSTJfQkFTRV9BRERSCQkoMHgxOTAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9DU1BJMl9CQVNFX0FERFIJCSgweDE5MDAwICsgTVgxX0lPX0JBU0VfQUREUikKICNkZWZpbmUgTVgxX01TSENfQkFTRV9BRERSCQkoMHgxQTAwMCArIE1YMV9JT19CQVNFX0FERFIpCiAjZGVmaW5lIE1YMV9DQ01fQkFTRV9BRERSCQkoMHgxQjAwMCArIE1YMV9JT19CQVNFX0FERFIpCiAjZGVmaW5lIE1YMV9TQ01fQkFTRV9BRERSCQkoMHgxQjgwNCArIE1YMV9JT19CQVNFX0FERFIpCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIE1YMV9HUElPX0lOVF9QT1JUQQkxMQogI2RlZmluZSBNWDFfR1BJT19JTlRfUE9SVEIJMTIKICNkZWZpbmUgTVgxX0dQSU9fSU5UX1BPUlRDCTEzCi0jZGVmaW5lIE1YMV9MQ0RDX0lOVAkJMTQKKyNkZWZpbmUgTVgxX0lOVF9MQ0RDCQkxNAogI2RlZmluZSBNWDFfU0lNX0lOVAkJMTUKICNkZWZpbmUgTVgxX1NJTV9EQVRBX0lOVAkxNgogI2RlZmluZSBNWDFfUlRDX0lOVAkJMTcKQEAgLTExMiw3ICsxMTIsOCBAQAogI2RlZmluZSBNWDFfUFdNX0lOVAkJMzQKICNkZWZpbmUgTVgxX1NESENfSU5UCQkzNQogI2RlZmluZSBNWDFfSU5UX0kyQwkJMzkKLSNkZWZpbmUgTVgxX0NTUElfSU5UCQk0MQorI2RlZmluZSBNWDFfSU5UX0NTUEkyCQk0MAorI2RlZmluZSBNWDFfSU5UX0NTUEkxCQk0MQogI2RlZmluZSBNWDFfU1NJX1RYX0lOVAkJNDIKICNkZWZpbmUgTVgxX1NTSV9UWF9FUlJfSU5UCTQzCiAjZGVmaW5lIE1YMV9TU0lfUlhfSU5UCQk0NApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214NTMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDUzLmgKaW5kZXggZDdhOGU1Mi4uYWNlMTc4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214NTMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXg1My5oCkBAIC03OSw3ICs3OSw3IEBACiAjZGVmaW5lIE1YNTNfR1BJTzNfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwOEMwMDApCiAjZGVmaW5lIE1YNTNfR1BJTzRfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwOTAwMDApCiAjZGVmaW5lIE1YNTNfS1BQX0JBU0VfQUREUgkoTVg1M19BSVBTMV9CQVNFX0FERFIgKyAweDAwMDk0MDAwKQotI2RlZmluZSBNWDUzX1dET0dfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwOTgwMDApCisjZGVmaW5lIE1YNTNfV0RPRzFfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwOTgwMDApCiAjZGVmaW5lIE1YNTNfV0RPRzJfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwOUMwMDApCiAjZGVmaW5lIE1YNTNfR1BUMV9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBMDAwMCkKICNkZWZpbmUgTVg1M19TUlRDX0JBU0VfQUREUgkoTVg1M19BSVBTMV9CQVNFX0FERFIgKyAweDAwMEE0MDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oCmluZGV4IDA0YzdhMjYuLjdlMDcyNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogIyBkZWZpbmUgY3B1X2lzX214MjcoKQkJKDApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX01YMzEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCiAjIGlmZGVmIG14Y19jcHVfdHlwZQogIyAgdW5kZWYgbXhjX2NwdV90eXBlCiAjICBkZWZpbmUgbXhjX2NwdV90eXBlIF9fbXhjX2NwdV90eXBlCkBAIC0xMTUsNyArMTE1LDcgQEAKICMgZGVmaW5lIGNwdV9pc19teDMxKCkJCSgwKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CisjaWZkZWYgQ09ORklHX1NPQ19JTVgzNQogIyBpZmRlZiBteGNfY3B1X3R5cGUKICMgIHVuZGVmIG14Y19jcHVfdHlwZQogIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQpAQCAtMTI3LDcgKzEyNyw3IEBACiAjIGRlZmluZSBjcHVfaXNfbXgzNSgpCQkoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVg1MAorI2lmZGVmIENPTkZJR19TT0NfSU1YNTAKICMgaWZkZWYgbXhjX2NwdV90eXBlCiAjICB1bmRlZiBteGNfY3B1X3R5cGUKICMgIGRlZmluZSBteGNfY3B1X3R5cGUgX19teGNfY3B1X3R5cGUKQEAgLTEzOSw3ICsxMzksNyBAQAogIyBkZWZpbmUgY3B1X2lzX214NTAoKQkJKDApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX01YNTEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCiAjIGlmZGVmIG14Y19jcHVfdHlwZQogIyAgdW5kZWYgbXhjX2NwdV90eXBlCiAjICBkZWZpbmUgbXhjX2NwdV90eXBlIF9fbXhjX2NwdV90eXBlCkBAIC0xNTEsNyArMTUxLDcgQEAKICMgZGVmaW5lIGNwdV9pc19teDUxKCkJCSgwKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDUzCisjaWZkZWYgQ09ORklHX1NPQ19JTVg1MwogIyBpZmRlZiBteGNfY3B1X3R5cGUKICMgIHVuZGVmIG14Y19jcHVfdHlwZQogIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19laGNpLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX2VoY2kuaAppbmRleCBhNTIzYTQwLi4yYzE1OWRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX2VoY2kuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX2VoY2kuaApAQCAtNDQsMTEgKzQ0LDE0IEBACiAJaW50ICgqZXhpdCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKIAl1bnNpZ25lZCBpbnQJCSBwb3J0c2M7Ci0JdW5zaWduZWQgaW50CQkgZmxhZ3M7CiAJc3RydWN0IG90Z190cmFuc2NlaXZlcgkqb3RnOwogfTsKIAotaW50IG14Y19pbml0aWFsaXplX3VzYl9odyhpbnQgcG9ydCwgdW5zaWduZWQgaW50IGZsYWdzKTsKK2ludCBteDUxX2luaXRpYWxpemVfdXNiX2h3KGludCBwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IG14MjVfaW5pdGlhbGl6ZV91c2JfaHcoaW50IHBvcnQsIHVuc2lnbmVkIGludCBmbGFncyk7CitpbnQgbXgzMV9pbml0aWFsaXplX3VzYl9odyhpbnQgcG9ydCwgdW5zaWduZWQgaW50IGZsYWdzKTsKK2ludCBteDM1X2luaXRpYWxpemVfdXNiX2h3KGludCBwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IG14MjdfaW5pdGlhbGl6ZV91c2JfaHcoaW50IHBvcnQsIHVuc2lnbmVkIGludCBmbGFncyk7CiAKICNlbmRpZiAvKiBfX0lOQ0xVREVfQVNNX0FSQ0hfTVhDX0VIQ0lfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdWxwaS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VscGkuaAppbmRleCA5NmI2YWI0Li5mOTE2MWM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdWxwaS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bHBpLmgKQEAgLTEsNiArMSwxNSBAQAogI2lmbmRlZiBfX01BQ0hfVUxQSV9ICiAjZGVmaW5lIF9fTUFDSF9VTFBJX0gKIAorI2lmZGVmIENPTkZJR19VU0JfVUxQSQorc3RydWN0IG90Z190cmFuc2NlaXZlciAqaW14X290Z191bHBpX2NyZWF0ZSh1bnNpZ25lZCBpbnQgZmxhZ3MpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG90Z190cmFuc2NlaXZlciAqaW14X290Z191bHBpX2NyZWF0ZSh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKwogZXh0ZXJuIHN0cnVjdCBvdGdfaW9fYWNjZXNzX29wcyBteGNfdWxwaV9hY2Nlc3Nfb3BzOwogCiAjZW5kaWYgLyogX19NQUNIX1VMUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggZmY0NjljNC4uNDg2NGIwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC02Miw2ICs2Miw3IEBACiAjZGVmaW5lIE1YMlhfVUFSVDFfQkFTRV9BRERSCTB4MTAwMGEwMDAKICNkZWZpbmUgTVgzWF9VQVJUMV9CQVNFX0FERFIJMHg0M0Y5MDAwMAogI2RlZmluZSBNWDNYX1VBUlQyX0JBU0VfQUREUgkweDQzRjk0MDAwCisjZGVmaW5lIE1YM1hfVUFSVDVfQkFTRV9BRERSCTB4NDNGQjQwMDAKICNkZWZpbmUgTVg1MV9VQVJUMV9CQVNFX0FERFIJMHg3M2ZiYzAwMAogI2RlZmluZSBNWDUwX1VBUlQxX0JBU0VfQUREUgkweDUzZmJjMDAwCiAjZGVmaW5lIE1YNTNfVUFSVDFfQkFTRV9BRERSCTB4NTNmYmMwMDAKQEAgLTgzLDYgKzg0LDcgQEAKIAljYXNlIE1BQ0hfVFlQRV9NWDIxQURTOgogCWNhc2UgTUFDSF9UWVBFX1BDQTEwMDoKIAljYXNlIE1BQ0hfVFlQRV9NWFRfVEQ2MDoKKwljYXNlIE1BQ0hfVFlQRV9JTVgyN0lQQ0FNOgogCQl1YXJ0X2Jhc2UgPSBNWDJYX1VBUlQxX0JBU0VfQUREUjsKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTVgzMUxJVEU6CkBAIC0xMDEsNiArMTAzLDkgQEAKIAljYXNlIE1BQ0hfVFlQRV9NQUdYX1pONToKIAkJdWFydF9iYXNlID0gTVgzWF9VQVJUMl9CQVNFX0FERFI7CiAJCWJyZWFrOworCWNhc2UgTUFDSF9UWVBFX0JVRzoKKwkJdWFydF9iYXNlID0gTVgzWF9VQVJUNV9CQVNFX0FERFI7CisJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01YNTFfQkFCQkFHRToKIAljYXNlIE1BQ0hfVFlQRV9FVUtSRUFfQ1BVSU1YNTFTRDoKIAljYXNlIE1BQ0hfVFlQRV9NWDUxXzNEUzoKQEAgLTExMCw2ICsxMTUsOCBAQAogCQl1YXJ0X2Jhc2UgPSBNWDUwX1VBUlQxX0JBU0VfQUREUjsKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTVg1M19FVks6CisJY2FzZSBNQUNIX1RZUEVfTVg1M19MT0NPOgorCWNhc2UgTUFDSF9UWVBFX01YNTNfU01EOgogCQl1YXJ0X2Jhc2UgPSBNWDUzX1VBUlQxX0JBU0VfQUREUjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LXYxLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC12MS5jCmluZGV4IDk2MGEwMmMuLjMyMzhjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LXYxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtdjEuYwpAQCAtMjExLDI4ICsyMTEsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0wobXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKTsKIAotc3RhdGljIGludCBpbXhfaW9tdXh2MV9pbml0KHZvaWQpCitpbnQgX19pbml0IGlteF9pb211eHYxX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgbnVtcG9ydHMpCiB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfTVgxCi0JaWYgKGNwdV9pc19teDEoKSkgewotCQlpbXhfaW9tdXh2MV9iYXNlYWRkciA9IE1YMV9JT19BRERSRVNTKE1YMV9HUElPX0JBU0VfQUREUik7Ci0JCWlteF9pb211eHYxX251bXBvcnRzID0gTVgxX05VTV9HUElPX1BPUlQ7Ci0JfSBlbHNlCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCi0JaWYgKGNwdV9pc19teDIxKCkpIHsKLQkJaW14X2lvbXV4djFfYmFzZWFkZHIgPSBNWDIxX0lPX0FERFJFU1MoTVgyMV9HUElPX0JBU0VfQUREUik7Ci0JCWlteF9pb211eHYxX251bXBvcnRzID0gTVgyMV9OVU1fR1BJT19QT1JUOwotCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotCWlmIChjcHVfaXNfbXgyNygpKSB7Ci0JCWlteF9pb211eHYxX2Jhc2VhZGRyID0gTVgyN19JT19BRERSRVNTKE1YMjdfR1BJT19CQVNFX0FERFIpOwotCQlpbXhfaW9tdXh2MV9udW1wb3J0cyA9IE1YMjdfTlVNX0dQSU9fUE9SVDsKLQl9IGVsc2UKLSNlbmRpZgotCQlyZXR1cm4gLUVOT0RFVjsKKwlpbXhfaW9tdXh2MV9iYXNlYWRkciA9IGJhc2U7CisJaW14X2lvbXV4djFfbnVtcG9ydHMgPSBudW1wb3J0czsKIAogCXJldHVybiAwOwogfQotcHVyZV9pbml0Y2FsbChpbXhfaW9tdXh2MV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3VscGkuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3VscGkuYwppbmRleCA1ODJjNmRmLi40NzdlNDViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy91bHBpLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvdWxwaS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgogCiAjaW5jbHVkZSA8bWFjaC91bHBpLmg+CiAKQEAgLTExMSwzICsxMTIsNyBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKG14Y191bHBpX2FjY2Vzc19vcHMpOwogCitzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICppbXhfb3RnX3VscGlfY3JlYXRlKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2dwaW8uYwppbmRleCAxZTg4ZWNiLi43MDYyMDQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9ncGlvLmMKQEAgLTMwLDIzICszMCwzOSBAQAogLyoKICAqIFRoZSBHUElPIG1vZHVsZSBpbiB0aGUgTm9tYWRpayBmYW1pbHkgb2YgU3lzdGVtcy1vbi1DaGlwIGlzIGFuCiAgKiBBTUJBIGRldmljZSwgbWFuYWdpbmcgMzIgcGlucyBhbmQgYWx0ZXJuYXRlIGZ1bmN0aW9ucy4gIFRoZSBsb2dpYyBibG9jawotICogaXMgY3VycmVudGx5IG9ubHkgdXNlZCBpbiB0aGUgTm9tYWRpay4KKyAqIGlzIGN1cnJlbnRseSB1c2VkIGluIHRoZSBOb21hZGlrIGFuZCB1eDUwMC4KICAqCiAgKiBTeW1ib2xzIGluIHRoaXMgZmlsZSBhcmUgY2FsbGVkICJubWtfZ3BpbyIgZm9yICJub21hZGlrIGdwaW8iCiAgKi8KIAotI2RlZmluZSBOTUtfR1BJT19QRVJfQ0hJUCAzMgorI2RlZmluZSBOTUtfR1BJT19QRVJfQ0hJUAkzMgorCiBzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCB7CiAJc3RydWN0IGdwaW9fY2hpcCBjaGlwOwogCXZvaWQgX19pb21lbSAqYWRkcjsKIAlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgaW50IGJhbms7CiAJdW5zaWduZWQgaW50IHBhcmVudF9pcnE7CisJaW50IHNlY29uZGFyeV9wYXJlbnRfaXJxOworCXUzMiAoKmdldF9zZWNvbmRhcnlfc3RhdHVzKSh1bnNpZ25lZCBpbnQgYmFuayk7CisJdm9pZCAoKnNldF9pb2ZvcmNlKShib29sIGVuYWJsZSk7CiAJc3BpbmxvY2tfdCBsb2NrOwogCS8qIEtlZXAgdHJhY2sgb2YgY29uZmlndXJlZCBlZGdlcyAqLwogCXUzMiBlZGdlX3Jpc2luZzsKIAl1MzIgZWRnZV9mYWxsaW5nOworCXUzMiByZWFsX3dha2U7CisJdTMyIHJ3aW1zYzsKKwl1MzIgZndpbXNjOworCXUzMiBzbHBtOwogfTsKIAorc3RhdGljIHN0cnVjdCBubWtfZ3Bpb19jaGlwICoKK25ta19ncGlvX2NoaXBzW0RJVl9ST1VORF9VUChBUkNIX05SX0dQSU9TLCBOTUtfR1BJT19QRVJfQ0hJUCldOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ta19ncGlvX3NscG1fbG9jayk7CisKKyNkZWZpbmUgTlVNX0JBTktTIEFSUkFZX1NJWkUobm1rX2dwaW9fY2hpcHMpCisKIHN0YXRpYyB2b2lkIF9fbm1rX2dwaW9fc2V0X21vZGUoc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwLAogCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IGdwaW9fbW9kZSkKIHsKQEAgLTExOCw4ICsxMzQsMzUgQEAKIAlfX25ta19ncGlvX3NldF9vdXRwdXQobm1rX2NoaXAsIG9mZnNldCwgdmFsKTsKIH0KIAorc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19zZXRfbW9kZV9zYWZlKHN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IGdwaW9fbW9kZSwKKwkJCQkgICAgIGJvb2wgZ2xpdGNoKQoreworCXUzMiByd2ltc2MgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1JXSU1TQyk7CisJdTMyIGZ3aW1zYyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKKworCWlmIChnbGl0Y2ggJiYgbm1rX2NoaXAtPnNldF9pb2ZvcmNlKSB7CisJCXUzMiBiaXQgPSBCSVQob2Zmc2V0KTsKKworCQkvKiBQcmV2ZW50IHNwdXJpb3VzIHdha2V1cHMgKi8KKwkJd3JpdGVsKHJ3aW1zYyAmIH5iaXQsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fUldJTVNDKTsKKwkJd3JpdGVsKGZ3aW1zYyAmIH5iaXQsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKKworCQlubWtfY2hpcC0+c2V0X2lvZm9yY2UodHJ1ZSk7CisJfQorCisJX19ubWtfZ3Bpb19zZXRfbW9kZShubWtfY2hpcCwgb2Zmc2V0LCBncGlvX21vZGUpOworCisJaWYgKGdsaXRjaCAmJiBubWtfY2hpcC0+c2V0X2lvZm9yY2UpIHsKKwkJbm1rX2NoaXAtPnNldF9pb2ZvcmNlKGZhbHNlKTsKKworCQl3cml0ZWwocndpbXNjLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1JXSU1TQyk7CisJCXdyaXRlbChmd2ltc2MsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIF9fbm1rX2NvbmZpZ19waW4oc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwLCB1bnNpZ25lZCBvZmZzZXQsCi0JCQkgICAgIHBpbl9jZmdfdCBjZmcsIGJvb2wgc2xlZXApCisJCQkgICAgIHBpbl9jZmdfdCBjZmcsIGJvb2wgc2xlZXAsIHVuc2lnbmVkIGludCAqc2xwbXJlZ3MpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmFmbmFtZXNbXSA9IHsKIAkJW05NS19HUElPX0FMVF9HUElPXQk9ICJHUElPIiwKQEAgLTE0NCw2ICsxODcsNyBAQAogCWludCBzbHBtID0gUElOX1NMUE0oY2ZnKTsKIAlpbnQgb3V0cHV0ID0gUElOX0RJUihjZmcpOwogCWludCB2YWwgPSBQSU5fVkFMKGNmZyk7CisJYm9vbCBnbGl0Y2ggPSBhZiA9PSBOTUtfR1BJT19BTFRfQzsKIAogCWRldl9kYmcobm1rX2NoaXAtPmNoaXAuZGV2LCAicGluICVkIFslI2x4XTogYWYgJXMsIHB1bGwgJXMsIHNscG0gJXMgKCVzJXMpXG4iLAogCQlwaW4sIGNmZywgYWZuYW1lc1thZl0sIHB1bGxuYW1lc1twdWxsXSwgc2xwbW5hbWVzW3NscG1dLApAQCAtMTU1LDYgKzE5OSw4IEBACiAJCWludCBzbHBtX291dHB1dCA9IFBJTl9TTFBNX0RJUihjZmcpOwogCQlpbnQgc2xwbV92YWwgPSBQSU5fU0xQTV9WQUwoY2ZnKTsKIAorCQlhZiA9IE5NS19HUElPX0FMVF9HUElPOworCiAJCS8qCiAJCSAqIFRoZSBTTFBNXyogdmFsdWVzIGFyZSBub3JtYWwgdmFsdWVzICsgMSB0byBhbGxvdyB6ZXJvIHRvCiAJCSAqIG1lYW4gInNhbWUgYXMgbm9ybWFsIi4KQEAgLTE4MCw4ICsyMjYsMTE2IEBACiAJCV9fbm1rX2dwaW9fc2V0X3B1bGwobm1rX2NoaXAsIG9mZnNldCwgcHVsbCk7CiAJfQogCi0JX19ubWtfZ3Bpb19zZXRfc2xwbShubWtfY2hpcCwgb2Zmc2V0LCBzbHBtKTsKLQlfX25ta19ncGlvX3NldF9tb2RlKG5ta19jaGlwLCBvZmZzZXQsIGFmKTsKKwkvKgorCSAqIElmIHdlJ3ZlIGJhY2tlZCB1cCB0aGUgU0xQTSByZWdpc3RlcnMgKGdsaXRjaCB3b3JrYXJvdW5kKSwgbW9kaWZ5CisJICogdGhlIGJhY2t1cHMgc2luY2UgdGhleSB3aWxsIGJlIHJlc3RvcmVkLgorCSAqLworCWlmIChzbHBtcmVncykgeworCQlpZiAoc2xwbSA9PSBOTUtfR1BJT19TTFBNX05PQ0hBTkdFKQorCQkJc2xwbXJlZ3Nbbm1rX2NoaXAtPmJhbmtdIHw9IEJJVChvZmZzZXQpOworCQllbHNlCisJCQlzbHBtcmVnc1tubWtfY2hpcC0+YmFua10gJj0gfkJJVChvZmZzZXQpOworCX0gZWxzZQorCQlfX25ta19ncGlvX3NldF9zbHBtKG5ta19jaGlwLCBvZmZzZXQsIHNscG0pOworCisJX19ubWtfZ3Bpb19zZXRfbW9kZV9zYWZlKG5ta19jaGlwLCBvZmZzZXQsIGFmLCBnbGl0Y2gpOworfQorCisvKgorICogU2FmZSBzZXF1ZW5jZSB1c2VkIHRvIHN3aXRjaCBJT3MgYmV0d2VlbiBHUElPIGFuZCBBbHRlcm5hdGUtQyBtb2RlOgorICogIC0gU2F2ZSBTTFBNIHJlZ2lzdGVycworICogIC0gU2V0IFNMUE09MCBmb3IgdGhlIElPcyB5b3Ugd2FudCB0byBzd2l0Y2ggYW5kIG90aGVycyB0byAxCisgKiAgLSBDb25maWd1cmUgdGhlIEdQSU8gcmVnaXN0ZXJzIGZvciB0aGUgSU9zIHRoYXQgYXJlIGJlaW5nIHN3aXRjaGVkCisgKiAgLSBTZXQgSU9GT1JDRT0xCisgKiAgLSBNb2RpZnkgdGhlIEFGTFNBL0IgcmVnaXN0ZXJzIGZvciB0aGUgSU9zIHRoYXQgYXJlIGJlaW5nIHN3aXRjaGVkCisgKiAgLSBTZXQgSU9GT1JDRT0wCisgKiAgLSBSZXN0b3JlIFNMUE0gcmVnaXN0ZXJzCisgKiAgLSBBbnkgc3B1cmlvdXMgd2FrZSB1cCBldmVudCBkdXJpbmcgc3dpdGNoIHNlcXVlbmNlIHRvIGJlIGlnbm9yZWQgYW5kCisgKiAgICBjbGVhcmVkCisgKi8KK3N0YXRpYyB2b2lkIG5ta19ncGlvX2dsaXRjaF9zbHBtX2luaXQodW5zaWduZWQgaW50ICpzbHBtKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9CQU5LUzsgaSsrKSB7CisJCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpjaGlwID0gbm1rX2dwaW9fY2hpcHNbaV07CisJCXVuc2lnbmVkIGludCB0ZW1wID0gc2xwbVtpXTsKKworCQlpZiAoIWNoaXApCisJCQlicmVhazsKKworCQlzbHBtW2ldID0gcmVhZGwoY2hpcC0+YWRkciArIE5NS19HUElPX1NMUEMpOworCQl3cml0ZWwodGVtcCwgY2hpcC0+YWRkciArIE5NS19HUElPX1NMUEMpOworCX0KK30KKworc3RhdGljIHZvaWQgbm1rX2dwaW9fZ2xpdGNoX3NscG1fcmVzdG9yZSh1bnNpZ25lZCBpbnQgKnNscG0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JBTktTOyBpKyspIHsKKwkJc3RydWN0IG5ta19ncGlvX2NoaXAgKmNoaXAgPSBubWtfZ3Bpb19jaGlwc1tpXTsKKworCQlpZiAoIWNoaXApCisJCQlicmVhazsKKworCQl3cml0ZWwoc2xwbVtpXSwgY2hpcC0+YWRkciArIE5NS19HUElPX1NMUEMpOworCX0KK30KKworc3RhdGljIGludCBfX25ta19jb25maWdfcGlucyhwaW5fY2ZnX3QgKmNmZ3MsIGludCBudW0sIGJvb2wgc2xlZXApCit7CisJc3RhdGljIHVuc2lnbmVkIGludCBzbHBtW05VTV9CQU5LU107CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGdsaXRjaCA9IGZhbHNlOworCWludCByZXQgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmIChQSU5fQUxUKGNmZ3NbaV0pID09IE5NS19HUElPX0FMVF9DKSB7CisJCQlnbGl0Y2ggPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2dwaW9fc2xwbV9sb2NrLCBmbGFncyk7CisKKwlpZiAoZ2xpdGNoKSB7CisJCW1lbXNldChzbHBtLCAweGZmLCBzaXplb2Yoc2xwbSkpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQkJaW50IHBpbiA9IFBJTl9OVU0oY2Znc1tpXSk7CisJCQlpbnQgb2Zmc2V0ID0gcGluICUgTk1LX0dQSU9fUEVSX0NISVA7CisKKwkJCWlmIChQSU5fQUxUKGNmZ3NbaV0pID09IE5NS19HUElPX0FMVF9DKQorCQkJCXNscG1bcGluIC8gTk1LX0dQSU9fUEVSX0NISVBdICY9IH5CSVQob2Zmc2V0KTsKKwkJfQorCisJCW5ta19ncGlvX2dsaXRjaF9zbHBtX2luaXQoc2xwbSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwkJaW50IHBpbiA9IFBJTl9OVU0oY2Znc1tpXSk7CisKKwkJbm1rX2NoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShOT01BRElLX0dQSU9fVE9fSVJRKHBpbikpOworCQlpZiAoIW5ta19jaGlwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlzcGluX2xvY2soJm5ta19jaGlwLT5sb2NrKTsKKwkJX19ubWtfY29uZmlnX3BpbihubWtfY2hpcCwgcGluIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSwKKwkJCQkgY2Znc1tpXSwgc2xlZXAsIGdsaXRjaCA/IHNscG0gOiBOVUxMKTsKKwkJc3Bpbl91bmxvY2soJm5ta19jaGlwLT5sb2NrKTsKKwl9CisKKwlpZiAoZ2xpdGNoKQorCQlubWtfZ3Bpb19nbGl0Y2hfc2xwbV9yZXN0b3JlKHNscG0pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2dwaW9fc2xwbV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTIwMCwxOSArMzU0LDcgQEAKICAqLwogaW50IG5ta19jb25maWdfcGluKHBpbl9jZmdfdCBjZmcsIGJvb2wgc2xlZXApCiB7Ci0Jc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOwotCWludCBncGlvID0gUElOX05VTShjZmcpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlubWtfY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKE5PTUFESUtfR1BJT19UT19JUlEoZ3BpbykpOwotCWlmICghbm1rX2NoaXApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7Ci0JX19ubWtfY29uZmlnX3BpbihubWtfY2hpcCwgZ3BpbyAtIG5ta19jaGlwLT5jaGlwLmJhc2UsIGNmZywgc2xlZXApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19ubWtfY29uZmlnX3BpbnMoJmNmZywgMSwgc2xlZXApOwogfQogRVhQT1JUX1NZTUJPTChubWtfY29uZmlnX3Bpbik7CiAKQEAgLTIyNiwzMSArMzY4LDEzIEBACiAgKi8KIGludCBubWtfY29uZmlnX3BpbnMocGluX2NmZ190ICpjZmdzLCBpbnQgbnVtKQogewotCWludCByZXQgPSAwOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCXJldCA9IG5ta19jb25maWdfcGluKGNmZ3NbaV0sIGZhbHNlKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIF9fbm1rX2NvbmZpZ19waW5zKGNmZ3MsIG51bSwgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTChubWtfY29uZmlnX3BpbnMpOwogCiBpbnQgbm1rX2NvbmZpZ19waW5zX3NsZWVwKHBpbl9jZmdfdCAqY2ZncywgaW50IG51bSkKIHsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlyZXQgPSBubWtfY29uZmlnX3BpbihjZmdzW2ldLCB0cnVlKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIF9fbm1rX2NvbmZpZ19waW5zKGNmZ3MsIG51bSwgdHJ1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKG5ta19jb25maWdfcGluc19zbGVlcCk7CiAKQEAgLTI3Nyw5ICs0MDEsMTMgQEAKIAlpZiAoIW5ta19jaGlwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZubWtfZ3Bpb19zbHBtX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJm5ta19jaGlwLT5sb2NrKTsKKwogCV9fbm1rX2dwaW9fc2V0X3NscG0obm1rX2NoaXAsIGdwaW8gLSBubWtfY2hpcC0+Y2hpcC5iYXNlLCBtb2RlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCisJc3Bpbl91bmxvY2soJm5ta19jaGlwLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubWtfZ3Bpb19zbHBtX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzE0LDYgKzQ0MiwxNSBAQAogfQogCiAvKiBNb2RlIGZ1bmN0aW9ucyAqLworLyoqCisgKiBubWtfZ3Bpb19zZXRfbW9kZSgpIC0gc2V0IHRoZSBtdXggbW9kZSBvZiBhIGdwaW8gcGluCisgKiBAZ3BpbzogcGluIG51bWJlcgorICogQGdwaW9fbW9kZTogb25lIG9mIE5NS19HUElPX0FMVF9HUElPLCBOTUtfR1BJT19BTFRfQSwKKyAqCSAgICAgICBOTUtfR1BJT19BTFRfQiwgYW5kIE5NS19HUElPX0FMVF9DCisgKgorICogU2V0cyB0aGUgbW9kZSBvZiB0aGUgc3BlY2lmaWVkIHBpbiB0byBvbmUgb2YgdGhlIGFsdGVybmF0ZSBmdW5jdGlvbnMgb3IKKyAqIHBsYWluIEdQSU8uCisgKi8KIGludCBubWtfZ3Bpb19zZXRfbW9kZShpbnQgZ3BpbywgaW50IGdwaW9fbW9kZSkKIHsKIAlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CkBAIC00MDEsOCArNTM4LDIwIEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5ta19ncGlvX2lycV9tb2RpZnkoc3RydWN0IGlycV9kYXRhICpkLCBlbnVtIG5ta19ncGlvX2lycV90eXBlIHdoaWNoLAotCQkJICAgICAgIGJvb2wgZW5hYmxlKQorc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19zZXRfd2FrZShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCisJCQkJaW50IGdwaW8sIGJvb2wgb24pCit7CisjaWZkZWYgQ09ORklHX0FSQ0hfVTg1MDAKKwlpZiAoY3B1X2lzX3U4NTAwdjIoKSkgeworCQlfX25ta19ncGlvX3NldF9zbHBtKG5ta19jaGlwLCBncGlvIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSwKKwkJCQkgICAgb24gPyBOTUtfR1BJT19TTFBNX1dBS0VVUF9FTkFCTEUKKwkJCQkgICAgICAgOiBOTUtfR1BJT19TTFBNX1dBS0VVUF9ESVNBQkxFKTsKKwl9CisjZW5kaWYKKwlfX25ta19ncGlvX2lycV9tb2RpZnkobm1rX2NoaXAsIGdwaW8sIFdBS0UsIG9uKTsKK30KKworc3RhdGljIGludCBubWtfZ3Bpb19pcnFfbWFza3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQsIGJvb2wgZW5hYmxlKQogewogCWludCBncGlvOwogCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKQEAgLTQxNSw0NCArNTY0LDU4IEBACiAJaWYgKCFubWtfY2hpcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKLQlfX25ta19ncGlvX2lycV9tb2RpZnkobm1rX2NoaXAsIGdwaW8sIHdoaWNoLCBlbmFibGUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm5ta19ncGlvX3NscG1fbG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmbm1rX2NoaXAtPmxvY2spOworCisJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBOT1JNQUwsIGVuYWJsZSk7CisKKwlpZiAoIShubWtfY2hpcC0+cmVhbF93YWtlICYgYml0bWFzaykpCisJCV9fbm1rX2dwaW9fc2V0X3dha2Uobm1rX2NoaXAsIGdwaW8sIGVuYWJsZSk7CisKKwlzcGluX3VubG9jaygmbm1rX2NoaXAtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19ncGlvX3NscG1fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlubWtfZ3Bpb19pcnFfbW9kaWZ5KGQsIE5PUk1BTCwgZmFsc2UpOworCW5ta19ncGlvX2lycV9tYXNrdW5tYXNrKGQsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jbm1rX2dwaW9faXJxX21vZGlmeShkLCBOT1JNQUwsIHRydWUpOworCW5ta19ncGlvX2lycV9tYXNrdW5tYXNrKGQsIHRydWUpOwogfQogCiBzdGF0aWMgaW50IG5ta19ncGlvX2lycV9zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBvbikKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhkLT5pcnEpOworCWJvb2wgZW5hYmxlZCA9ICEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKTsKIAlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYml0bWFzazsKIAlpbnQgZ3BpbzsKIAogCWdwaW8gPSBOT01BRElLX0lSUV9UT19HUElPKGQtPmlycSk7CiAJbm1rX2NoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlpZiAoIW5ta19jaGlwKQogCQlyZXR1cm4gLUVJTlZBTDsKKwliaXRtYXNrID0gbm1rX2dwaW9fZ2V0X2JpdG1hc2soZ3Bpbyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKLSNpZmRlZiBDT05GSUdfQVJDSF9VODUwMAotCWlmIChjcHVfaXNfdTg1MDB2MigpKSB7Ci0JCV9fbm1rX2dwaW9fc2V0X3NscG0obm1rX2NoaXAsIGdwaW8sCi0JCQkJICAgIG9uID8gTk1LX0dQSU9fU0xQTV9XQUtFVVBfRU5BQkxFCi0JCQkJICAgICAgIDogTk1LX0dQSU9fU0xQTV9XQUtFVVBfRElTQUJMRSk7Ci0JfQotI2VuZGlmCi0JX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBXQUtFLCBvbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2dwaW9fc2xwbV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZubWtfY2hpcC0+bG9jayk7CisKKwlpZiAoIWVuYWJsZWQpCisJCV9fbm1rX2dwaW9fc2V0X3dha2Uobm1rX2NoaXAsIGdwaW8sIG9uKTsKKworCWlmIChvbikKKwkJbm1rX2NoaXAtPnJlYWxfd2FrZSB8PSBiaXRtYXNrOworCWVsc2UKKwkJbm1rX2NoaXAtPnJlYWxfd2FrZSAmPSB+Yml0bWFzazsKKworCXNwaW5fdW5sb2NrKCZubWtfY2hpcC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2dwaW9fc2xwbV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4Myw3ICs2NDYsNyBAQAogCWlmIChlbmFibGVkKQogCQlfX25ta19ncGlvX2lycV9tb2RpZnkobm1rX2NoaXAsIGdwaW8sIE5PUk1BTCwgZmFsc2UpOwogCi0JaWYgKHdha2UpCisJaWYgKGVuYWJsZWQgfHwgd2FrZSkKIAkJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBXQUtFLCBmYWxzZSk7CiAKIAlubWtfY2hpcC0+ZWRnZV9yaXNpbmcgJj0gfmJpdG1hc2s7CkBAIC00OTcsNyArNjYwLDcgQEAKIAlpZiAoZW5hYmxlZCkKIAkJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBOT1JNQUwsIHRydWUpOwogCi0JaWYgKHdha2UpCisJaWYgKGVuYWJsZWQgfHwgd2FrZSkKIAkJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBncGlvLCBXQUtFLCB0cnVlKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7CkBAIC01MTQsMTIgKzY3NywxMSBAQAogCS5pcnFfc2V0X3dha2UJPSBubWtfZ3Bpb19pcnFfc2V0X3dha2UsCiB9OwogCi1zdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCitzdGF0aWMgdm9pZCBfX25ta19ncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCQkgICB1MzIgc3RhdHVzKQogewogCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmhvc3RfY2hpcCA9IGdldF9pcnFfY2hpcChpcnEpOwotCXVuc2lnbmVkIGludCBncGlvX2lycTsKLQl1MzIgcGVuZGluZzsKIAl1bnNpZ25lZCBpbnQgZmlyc3RfaXJxOwogCiAJaWYgKGhvc3RfY2hpcC0+aXJxX21hc2tfYWNrKQpAQCAtNTMyLDI5ICs2OTQsNTYgQEAKIAogCW5ta19jaGlwID0gZ2V0X2lycV9kYXRhKGlycSk7CiAJZmlyc3RfaXJxID0gTk9NQURJS19HUElPX1RPX0lSUShubWtfY2hpcC0+Y2hpcC5iYXNlKTsKLQl3aGlsZSAoIChwZW5kaW5nID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19JUykpICkgewotCQlncGlvX2lycSA9IGZpcnN0X2lycSArIF9fZmZzKHBlbmRpbmcpOwotCQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnEpOworCXdoaWxlIChzdGF0dXMpIHsKKwkJaW50IGJpdCA9IF9fZmZzKHN0YXR1cyk7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGZpcnN0X2lycSArIGJpdCk7CisJCXN0YXR1cyAmPSB+QklUKGJpdCk7CiAJfQogCiAJaG9zdF9jaGlwLT5pcnFfdW5tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKK3N0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1MzIgc3RhdHVzID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19JUyk7CisKKwlfX25ta19ncGlvX2lycV9oYW5kbGVyKGlycSwgZGVzYywgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgbm1rX2dwaW9fc2Vjb25kYXJ5X2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1MzIgc3RhdHVzID0gbm1rX2NoaXAtPmdldF9zZWNvbmRhcnlfc3RhdHVzKG5ta19jaGlwLT5iYW5rKTsKKworCV9fbm1rX2dwaW9faXJxX2hhbmRsZXIoaXJxLCBkZXNjLCBzdGF0dXMpOworfQorCiBzdGF0aWMgaW50IG5ta19ncGlvX2luaXRfaXJxKHN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCkKIHsKIAl1bnNpZ25lZCBpbnQgZmlyc3RfaXJxOwogCWludCBpOwogCiAJZmlyc3RfaXJxID0gTk9NQURJS19HUElPX1RPX0lSUShubWtfY2hpcC0+Y2hpcC5iYXNlKTsKLQlmb3IgKGkgPSBmaXJzdF9pcnE7IGkgPCBmaXJzdF9pcnEgKyBOTUtfR1BJT19QRVJfQ0hJUDsgaSsrKSB7CisJZm9yIChpID0gZmlyc3RfaXJxOyBpIDwgZmlyc3RfaXJxICsgbm1rX2NoaXAtPmNoaXAubmdwaW87IGkrKykgewogCQlzZXRfaXJxX2NoaXAoaSwgJm5ta19ncGlvX2lycV9jaGlwKTsKIAkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9lZGdlX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CiAJCXNldF9pcnFfY2hpcF9kYXRhKGksIG5ta19jaGlwKTsKIAkJc2V0X2lycV90eXBlKGksIElSUV9UWVBFX0VER0VfRkFMTElORyk7CiAJfQorCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIobm1rX2NoaXAtPnBhcmVudF9pcnEsIG5ta19ncGlvX2lycV9oYW5kbGVyKTsKIAlzZXRfaXJxX2RhdGEobm1rX2NoaXAtPnBhcmVudF9pcnEsIG5ta19jaGlwKTsKKworCWlmIChubWtfY2hpcC0+c2Vjb25kYXJ5X3BhcmVudF9pcnEgPj0gMCkgeworCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihubWtfY2hpcC0+c2Vjb25kYXJ5X3BhcmVudF9pcnEsCisJCQkJCW5ta19ncGlvX3NlY29uZGFyeV9pcnFfaGFuZGxlcik7CisJCXNldF9pcnFfZGF0YShubWtfY2hpcC0+c2Vjb25kYXJ5X3BhcmVudF9pcnEsIG5ta19jaGlwKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjA1LDYgKzc5NCw5NyBAQAogCXJldHVybiBOT01BRElLX0dQSU9fVE9fSVJRKG5ta19jaGlwLT5jaGlwLmJhc2UpICsgb2Zmc2V0OwogfQogCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdGF0aWMgdm9pZCBubWtfZ3Bpb19kYmdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCit7CisJaW50IG1vZGU7CisJdW5zaWduZWQJCWk7CisJdW5zaWduZWQJCWdwaW8gPSBjaGlwLT5iYXNlOworCWludAkJCWlzX291dDsKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPQorCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG5ta19ncGlvX2NoaXAsIGNoaXApOworCWNvbnN0IGNoYXIgKm1vZGVzW10gPSB7CisJCVtOTUtfR1BJT19BTFRfR1BJT10JPSAiZ3BpbyIsCisJCVtOTUtfR1BJT19BTFRfQV0JPSAiYWx0QSIsCisJCVtOTUtfR1BJT19BTFRfQl0JPSAiYWx0QiIsCisJCVtOTUtfR1BJT19BTFRfQ10JPSAiYWx0QyIsCisJfTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5uZ3BpbzsgaSsrLCBncGlvKyspIHsKKwkJY29uc3QgY2hhciAqbGFiZWwgPSBncGlvY2hpcF9pc19yZXF1ZXN0ZWQoY2hpcCwgaSk7CisJCWJvb2wgcHVsbDsKKwkJdTMyIGJpdCA9IDEgPDwgaTsKKworCQlpZiAoIWxhYmVsKQorCQkJY29udGludWU7CisKKwkJaXNfb3V0ID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19ESVIpICYgYml0OworCQlwdWxsID0gIShyZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1BESVMpICYgYml0KTsKKwkJbW9kZSA9IG5ta19ncGlvX2dldF9tb2RlKGdwaW8pOworCQlzZXFfcHJpbnRmKHMsICIgZ3Bpby0lLTNkICglLTIwLjIwcykgJXMgJXMgJXMgJXMiLAorCQkJZ3BpbywgbGFiZWwsCisJCQlpc19vdXQgPyAib3V0IiA6ICJpbiAiLAorCQkJY2hpcC0+Z2V0CisJCQkJPyAoY2hpcC0+Z2V0KGNoaXAsIGkpID8gImhpIiA6ICJsbyIpCisJCQkJOiAiPyAgIiwKKwkJCShtb2RlIDwgMCkgPyAidW5rbm93biIgOiBtb2Rlc1ttb2RlXSwKKwkJCXB1bGwgPyAicHVsbCIgOiAibm9uZSIpOworCisJCWlmICghaXNfb3V0KSB7CisJCQlpbnQJCWlycSA9IGdwaW9fdG9faXJxKGdwaW8pOworCQkJc3RydWN0IGlycV9kZXNjCSpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCQkJLyogVGhpcyByYWNlcyB3aXRoIHJlcXVlc3RfaXJxKCksIHNldF9pcnFfdHlwZSgpLAorCQkJICogYW5kIHNldF9pcnFfd2FrZSgpIC4uLiBidXQgdGhvc2UgYXJlICJyYXJlIi4KKwkJCSAqCisJCQkgKiBNb3JlIHNpZ25pZmljYW50bHksIHRyaWdnZXIgdHlwZSBmbGFncyBhcmVuJ3QKKwkJCSAqIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IGdlbmlycS4KKwkJCSAqLworCQkJaWYgKGlycSA+PSAwICYmIGRlc2MtPmFjdGlvbikgeworCQkJCWNoYXIgKnRyaWdnZXI7CisKKwkJCQlzd2l0Y2ggKGRlc2MtPnN0YXR1cyAmIElSUV9UWVBFX1NFTlNFX01BU0spIHsKKwkJCQljYXNlIElSUV9UWVBFX05PTkU6CisJCQkJCXRyaWdnZXIgPSAiKGRlZmF1bHQpIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6CisJCQkJCXRyaWdnZXIgPSAiZWRnZS1mYWxsaW5nIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKKwkJCQkJdHJpZ2dlciA9ICJlZGdlLXJpc2luZyI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgorCQkJCQl0cmlnZ2VyID0gImVkZ2UtYm90aCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKKwkJCQkJdHJpZ2dlciA9ICJsZXZlbC1oaWdoIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6CisJCQkJCXRyaWdnZXIgPSAibGV2ZWwtbG93IjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJdHJpZ2dlciA9ICI/dHJpZ2dlcj8iOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlzZXFfcHJpbnRmKHMsICIgaXJxLSVkICVzJXMiLAorCQkJCQlpcnEsIHRyaWdnZXIsCisJCQkJCShkZXNjLT5zdGF0dXMgJiBJUlFfV0FLRVVQKQorCQkJCQkJPyAiIHdha2V1cCIgOiAiIik7CisJCQl9CisJCX0KKworCQlzZXFfcHJpbnRmKHMsICJcbiIpOworCX0KK30KKworI2Vsc2UKKyNkZWZpbmUgbm1rX2dwaW9fZGJnX3Nob3cJTlVMTAorI2VuZGlmCisKIC8qIFRoaXMgc3RydWN0dXJlIGlzIHJlcGxpY2F0ZWQgZm9yIGVhY2ggR1BJTyBibG9jayBhbGxvY2F0ZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgbm1rX2dwaW9fdGVtcGxhdGUgPSB7CiAJLmRpcmVjdGlvbl9pbnB1dAk9IG5ta19ncGlvX21ha2VfaW5wdXQsCkBAIC02MTIsMTAgKzg5Miw2NCBAQAogCS5kaXJlY3Rpb25fb3V0cHV0CT0gbm1rX2dwaW9fbWFrZV9vdXRwdXQsCiAJLnNldAkJCT0gbm1rX2dwaW9fc2V0X291dHB1dCwKIAkudG9faXJxCQkJPSBubWtfZ3Bpb190b19pcnEsCi0JLm5ncGlvCQkJPSBOTUtfR1BJT19QRVJfQ0hJUCwKKwkuZGJnX3Nob3cJCT0gbm1rX2dwaW9fZGJnX3Nob3csCiAJLmNhbl9zbGVlcAkJPSAwLAogfTsKIAorLyoKKyAqIENhbGxlZCBmcm9tIHRoZSBzdXNwZW5kL3Jlc3VtZSBwYXRoIHRvIG9ubHkga2VlcCB0aGUgcmVhbCB3YWtldXAgaW50ZXJydXB0cworICogKHRob3NlIHRoYXQgaGF2ZSBoYWQgc2V0X2lycV93YWtlKCkgY2FsbGVkIG9uIHRoZW0pIGFzIHdha2V1cCBpbnRlcnJ1cHRzLAorICogYW5kIG5vdCB0aGUgcmVzdCBvZiB0aGUgaW50ZXJydXB0cyB3aGljaCB3ZSBuZWVkZWQgdG8gaGF2ZSBhcyB3YWtldXBzIGZvcgorICogY3B1aWRsZS4KKyAqCisgKiBQTSBvcHMgYXJlIG5vdCB1c2VkIHNpbmNlIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhdCB0aGUgZW5kLCBhZnRlciBhbGwgdGhlCisgKiBvdGhlciBkcml2ZXJzIGFyZSBkb25lIHdpdGggdGhlaXIgc3VzcGVuZCBjYWxsYmFja3MuCisgKi8KK3ZvaWQgbm1rX2dwaW9fd2FrZXVwc19zdXNwZW5kKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JBTktTOyBpKyspIHsKKwkJc3RydWN0IG5ta19ncGlvX2NoaXAgKmNoaXAgPSBubWtfZ3Bpb19jaGlwc1tpXTsKKworCQlpZiAoIWNoaXApCisJCQlicmVhazsKKworCQljaGlwLT5yd2ltc2MgPSByZWFkbChjaGlwLT5hZGRyICsgTk1LX0dQSU9fUldJTVNDKTsKKwkJY2hpcC0+ZndpbXNjID0gcmVhZGwoY2hpcC0+YWRkciArIE5NS19HUElPX0ZXSU1TQyk7CisKKwkJd3JpdGVsKGNoaXAtPnJ3aW1zYyAmIGNoaXAtPnJlYWxfd2FrZSwKKwkJICAgICAgIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19SV0lNU0MpOworCQl3cml0ZWwoY2hpcC0+ZndpbXNjICYgY2hpcC0+cmVhbF93YWtlLAorCQkgICAgICAgY2hpcC0+YWRkciArIE5NS19HUElPX0ZXSU1TQyk7CisKKwkJaWYgKGNwdV9pc191ODUwMHYyKCkpIHsKKwkJCWNoaXAtPnNscG0gPSByZWFkbChjaGlwLT5hZGRyICsgTk1LX0dQSU9fU0xQQyk7CisKKwkJCS8qIDAgLT4gd2FrZXVwIGVuYWJsZSAqLworCQkJd3JpdGVsKH5jaGlwLT5yZWFsX3dha2UsIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19TTFBDKTsKKwkJfQorCX0KK30KKwordm9pZCBubWtfZ3Bpb193YWtldXBzX3Jlc3VtZSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9CQU5LUzsgaSsrKSB7CisJCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpjaGlwID0gbm1rX2dwaW9fY2hpcHNbaV07CisKKwkJaWYgKCFjaGlwKQorCQkJYnJlYWs7CisKKwkJd3JpdGVsKGNoaXAtPnJ3aW1zYywgY2hpcC0+YWRkciArIE5NS19HUElPX1JXSU1TQyk7CisJCXdyaXRlbChjaGlwLT5md2ltc2MsIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19GV0lNU0MpOworCisJCWlmIChjcHVfaXNfdTg1MDB2MigpKQorCQkJd3JpdGVsKGNoaXAtPnNscG0sIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19TTFBDKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IG5ta19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgbm1rX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtNjIzLDYgKzk1Nyw3IEBACiAJc3RydWN0IGdwaW9fY2hpcCAqY2hpcDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHNlY29uZGFyeV9pcnE7CiAJaW50IGlycTsKIAlpbnQgcmV0OwogCkBAIC02NDEsNiArOTc2LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXNlY29uZGFyeV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMSk7CisJaWYgKHNlY29uZGFyeV9pcnEgPj0gMCAmJiAhcGRhdGEtPmdldF9zZWNvbmRhcnlfc3RhdHVzKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJICAgICAgIGRldl9uYW1lKCZkZXYtPmRldikpID09IE5VTEwpIHsKIAkJcmV0ID0gLUVCVVNZOwpAQCAtNjY0LDE0ICsxMDA1LDE5IEBACiAJICogVGhlIHZpcnQgYWRkcmVzcyBpbiBubWtfY2hpcC0+YWRkciBpcyBpbiB0aGUgbm9tYWRpayByZWdpc3RlciBzcGFjZSwKIAkgKiBzbyB3ZSBjYW4gc2ltcGx5IGNvbnZlcnQgdGhlIHJlc291cmNlIGFkZHJlc3MsIHdpdGhvdXQgcmVtYXBwaW5nCiAJICovCisJbm1rX2NoaXAtPmJhbmsgPSBkZXYtPmlkOwogCW5ta19jaGlwLT5jbGsgPSBjbGs7CiAJbm1rX2NoaXAtPmFkZHIgPSBpb19wMnYocmVzLT5zdGFydCk7CiAJbm1rX2NoaXAtPmNoaXAgPSBubWtfZ3Bpb190ZW1wbGF0ZTsKIAlubWtfY2hpcC0+cGFyZW50X2lycSA9IGlycTsKKwlubWtfY2hpcC0+c2Vjb25kYXJ5X3BhcmVudF9pcnEgPSBzZWNvbmRhcnlfaXJxOworCW5ta19jaGlwLT5nZXRfc2Vjb25kYXJ5X3N0YXR1cyA9IHBkYXRhLT5nZXRfc2Vjb25kYXJ5X3N0YXR1czsKKwlubWtfY2hpcC0+c2V0X2lvZm9yY2UgPSBwZGF0YS0+c2V0X2lvZm9yY2U7CiAJc3Bpbl9sb2NrX2luaXQoJm5ta19jaGlwLT5sb2NrKTsKIAogCWNoaXAgPSAmbm1rX2NoaXAtPmNoaXA7CiAJY2hpcC0+YmFzZSA9IHBkYXRhLT5maXJzdF9ncGlvOworCWNoaXAtPm5ncGlvID0gcGRhdGEtPm51bV9ncGlvOwogCWNoaXAtPmxhYmVsID0gcGRhdGEtPm5hbWUgPzogZGV2X25hbWUoJmRldi0+ZGV2KTsKIAljaGlwLT5kZXYgPSAmZGV2LT5kZXY7CiAJY2hpcC0+b3duZXIgPSBUSElTX01PRFVMRTsKQEAgLTY4MCw2ICsxMDI2LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlOwogCisJQlVHX09OKG5ta19jaGlwLT5iYW5rID49IEFSUkFZX1NJWkUobm1rX2dwaW9fY2hpcHMpKTsKKworCW5ta19ncGlvX2NoaXBzW25ta19jaGlwLT5iYW5rXSA9IG5ta19jaGlwOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgbm1rX2NoaXApOwogCiAJbm1rX2dwaW9faW5pdF9pcnEobm1rX2NoaXApOwpAQCAtNzA1LDEwICsxMDU0LDggQEAKIAkuZHJpdmVyID0gewogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm5hbWUgPSAiZ3BpbyIsCi0JCX0sCisJfSwKIAkucHJvYmUgPSBubWtfZ3Bpb19wcm9iZSwKLQkuc3VzcGVuZCA9IE5VTEwsIC8qIHRvIGJlIGRvbmUgKi8KLQkucmVzdW1lID0gTlVMTCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG5ta19ncGlvX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmgKaW5kZXggNjdiMTEzZC4uMWI5ZjZmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTc1LDYgKzc1LDkgQEAKIGV4dGVybiBpbnQgbm1rX2dwaW9fc2V0X21vZGUoaW50IGdwaW8sIGludCBncGlvX21vZGUpOwogZXh0ZXJuIGludCBubWtfZ3Bpb19nZXRfbW9kZShpbnQgZ3Bpbyk7CiAKK2V4dGVybiB2b2lkIG5ta19ncGlvX3dha2V1cHNfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiB2b2lkIG5ta19ncGlvX3dha2V1cHNfcmVzdW1lKHZvaWQpOworCiAvKgogICogUGxhdGZvcm0gZGF0YSB0byByZWdpc3RlciBhIGJsb2NrOiBvbmx5IHRoZSBpbml0aWFsIGdwaW8vaXJxIG51bWJlci4KICAqLwpAQCAtODIsNiArODUsOSBAQAogCWNoYXIgKm5hbWU7CiAJaW50IGZpcnN0X2dwaW87CiAJaW50IGZpcnN0X2lycTsKKwlpbnQgbnVtX2dwaW87CisJdTMyICgqZ2V0X3NlY29uZGFyeV9zdGF0dXMpKHVuc2lnbmVkIGludCBiYW5rKTsKKwl2b2lkICgqc2V0X2lvZm9yY2UpKGJvb2wgZW5hYmxlKTsKIH07CiAKICNlbmRpZiAvKiBfX0FTTV9QTEFUX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9zdGVfZG1hNDAuaCBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvc3RlX2RtYTQwLmgKaW5kZXggNGQ2ZGQ0Yy4uYzQ0ODg2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9zdGVfZG1hNDAuaAorKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L3N0ZV9kbWE0MC5oCkBAIC0xMDQsNiArMTA0LDggQEAKICAqCiAgKiBAZGlyOiBNRU0gMiBNRU0sIFBFUklQSCAyIE1FTSAsIE1FTSAyIFBFUklQSCwgUEVSSVBIIDIgUEVSSVBICiAgKiBAaGlnaF9wcmlvcml0eTogdHJ1ZSBpZiBoaWdoLXByaW9yaXR5CisgKiBAcmVhbHRpbWU6IHRydWUgaWYgcmVhbHRpbWUgbW9kZSBpcyB0byBiZSBlbmFibGVkLiAgT25seSBhdmFpbGFibGUgb24gRE1BNDAKKyAqIHZlcnNpb24gMyssIGkuZSBEQjg1MDB2MisKICAqIEBtb2RlOiBjaGFubmVsIG1vZGU6IHBoeXNpY2FsLCBsb2dpY2FsLCBvciBvcGVyYXRpb24KICAqIEBtb2RlX29wdDogb3B0aW9ucyBmb3IgdGhlIGNob3NlbiBjaGFubmVsIG1vZGUKICAqIEBzcmNfZGV2X3R5cGU6IFNyYyBkZXZpY2UgdHlwZQpAQCAtMTE5LDYgKzEyMSw3IEBACiBzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgewogCWVudW0gc3RlZG1hNDBfeGZlcl9kaXIJCQkgZGlyOwogCWJvb2wJCQkJCSBoaWdoX3ByaW9yaXR5OworCWJvb2wJCQkJCSByZWFsdGltZTsKIAllbnVtIHN0ZWRtYTQwX21vZGUJCQkgbW9kZTsKIAllbnVtIHN0ZWRtYTQwX21vZGVfb3B0CQkJIG1vZGVfb3B0OwogCWludAkJCQkJIHNyY19kZXZfdHlwZTsKQEAgLTE2OSwyNSArMTcyLDYgQEAKIGJvb2wgc3RlZG1hNDBfZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqZGF0YSk7CiAKIC8qKgotICogc3RlZG1hNDBfbWVtY3B5X3NnKCkgLSBleHRlbnNpb24gb2YgdGhlIGRtYSBmcmFtZXdvcmssIG1lbWNweSB0by9mcm9tCi0gKiBzY2F0dGVyZ2F0dGVyIGxpc3RzLgotICoKLSAqIEBjaGFuOiBkbWFlbmdpbmUgaGFuZGxlCi0gKiBAc2dsX2RzdDogRGVzdGluYXRpb24gc2NhdHRlciBsaXN0Ci0gKiBAc2dsX3NyYzogU291cmNlIHNjYXR0ZXIgbGlzdAotICogQHNnbF9sZW46IFRoZSBsZW5ndGggb2YgZWFjaCBzY2F0dGVybGlzdC4gQm90aCBsaXN0cyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aAotICogYW5kIGVhY2ggZWxlbWVudCBtdXN0IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaW4gdGhlIG90aGVyIHNjYXR0ZXIKLSAqIGxpc3QuCi0gKiBAZmxhZ3M6IGlzIGFjdHVhbGx5IGVudW0gZG1hX2N0cmxfZmxhZ3MuIFNlZSBkbWFlbmdpbmUuaAotICovCi0KLXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqc3RlZG1hNDBfbWVtY3B5X3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKLQkJCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsX2RzdCwKLQkJCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsX3NyYywKLQkJCQkJCSAgIHVuc2lnbmVkIGludCBzZ2xfbGVuLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0KLS8qKgogICogc3RlZG1hNDBfc2xhdmVfbWVtKCkgLSBUcmFuc2ZlcnMgYSByYXcgZGF0YSBidWZmZXIgdG8gb3IgZnJvbSBhIHNsYXZlCiAgKiAoPWRldmljZSkKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IGI2MzMzYWUuLmNkNWY5OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC01NCw3ICs1NCw3IEBACiAJICB1c2VyIG11c3Qgd3JpdGUgMSB0bwogCQkvZGVidWcvdm9sdGFnZS92ZGRfPFg+L3NtYXJ0cmVmbGV4L2F1dG9jb21wLAogCSAgd2hlcmUgWCBpcyBtcHUgb3IgY29yZSBmb3IgT01BUDMuCi0JICBPcHRpb25hbGxseSBhdXRvY29tcGVuc2F0aW9uIGNhbiBiZSBlbmFibGVkIGluIHRoZSBrZXJuZWwKKwkgIE9wdGlvbmFsbHkgYXV0b2NvbXBlbnNhdGlvbiBjYW4gYmUgZW5hYmxlZCBpbiB0aGUga2VybmVsCiAJICBieSBkZWZhdWx0IGR1cmluZyBzeXN0ZW0gaW5pdCB2aWEgdGhlIGVuYWJsZV9vbl9pbml0IGZsYWcKIAkgIHdoaWNoIGFuIGJlIHBhc3NlZCBhcyBwbGF0Zm9ybSBkYXRhIHRvIHRoZSBzbWFydHJlZmxleCBkcml2ZXIuCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKaW5kZXggZmM2MmZiNS4uYzkxMjJkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKQEAgLTM3LDE0ICszNywxNiBAQAogaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAogCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoIWFyY2hfY2xvY2sgfHwgIWFyY2hfY2xvY2stPmNsa19lbmFibGUpCisJCXJldHVybiAtRUlOVkFMOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCWlmIChhcmNoX2Nsb2NrLT5jbGtfZW5hYmxlKQotCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfZW5hYmxlKGNsayk7CisJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX2VuYWJsZShjbGspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTU4LDYgKzYwLDkgQEAKIAlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCiAJCXJldHVybjsKIAorCWlmICghYXJjaF9jbG9jayB8fCAhYXJjaF9jbG9jay0+Y2xrX2Rpc2FibGUpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoY2xrLT51c2Vjb3VudCA9PSAwKSB7CiAJCXByX2VycigiVHJ5aW5nIGRpc2FibGUgY2xvY2sgJXMgd2l0aCAwIHVzZWNvdW50XG4iLApAQCAtNjYsOCArNzEsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoYXJjaF9jbG9jay0+Y2xrX2Rpc2FibGUpCi0JCWFyY2hfY2xvY2stPmNsa19kaXNhYmxlKGNsayk7CisJYXJjaF9jbG9jay0+Y2xrX2Rpc2FibGUoY2xrKTsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwpAQCAtNzcsNyArODEsNyBAQAogdW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcmV0OwogCiAJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQogCQlyZXR1cm4gMDsKQEAgLTk3LDE0ICsxMDEsMTYgQEAKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIHJldCA9IDA7CisJbG9uZyByZXQ7CiAKIAlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAwOworCisJaWYgKCFhcmNoX2Nsb2NrIHx8ICFhcmNoX2Nsb2NrLT5jbGtfcm91bmRfcmF0ZSkKKwkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JaWYgKGFyY2hfY2xvY2stPmNsa19yb3VuZF9yYXRlKQotCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfcm91bmRfcmF0ZShjbGssIHJhdGUpOworCXJldCA9IGFyY2hfY2xvY2stPmNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTE5LDE0ICsxMjUsMTMgQEAKIAlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCiAJCXJldHVybiByZXQ7CiAKKwlpZiAoIWFyY2hfY2xvY2sgfHwgIWFyY2hfY2xvY2stPmNsa19zZXRfcmF0ZSkKKwkJcmV0dXJuIHJldDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlpZiAoYXJjaF9jbG9jay0+Y2xrX3NldF9yYXRlKQotCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKLQlpZiAocmV0ID09IDApIHsKLQkJaWYgKGNsay0+cmVjYWxjKQotCQkJY2xrLT5yYXRlID0gY2xrLT5yZWNhbGMoY2xrKTsKKwlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKKwlpZiAocmV0ID09IDApCiAJCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci0JfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTE0MSwxNSArMTQ2LDE0IEBACiAJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspIHx8IHBhcmVudCA9PSBOVUxMIHx8IElTX0VSUihwYXJlbnQpKQogCQlyZXR1cm4gcmV0OwogCisJaWYgKCFhcmNoX2Nsb2NrIHx8ICFhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKKwkJcmV0dXJuIHJldDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoY2xrLT51c2Vjb3VudCA9PSAwKSB7Ci0JCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKLQkJCXJldCA9IGFyY2hfY2xvY2stPmNsa19zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlpZiAoY2xrLT5yZWNhbGMpCi0JCQkJY2xrLT5yYXRlID0gY2xrLT5yZWNhbGMoY2xrKTsKKwkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX3NldF9wYXJlbnQoY2xrLCBwYXJlbnQpOworCQlpZiAocmV0ID09IDApCiAJCQlwcm9wYWdhdGVfcmF0ZShjbGspOwotCQl9CiAJfSBlbHNlCiAJCXJldCA9IC1FQlVTWTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKQEAgLTMzNSw2ICszMzksMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgb21hcF9jbGtfZW5hYmxlX2F1dG9pZGxlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNsb2Nrcywgbm9kZSkKKwkJaWYgKGMtPm9wcy0+YWxsb3dfaWRsZSkKKwkJCWMtPm9wcy0+YWxsb3dfaWRsZShjKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBvbWFwX2Nsa19kaXNhYmxlX2F1dG9pZGxlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNsb2Nrcywgbm9kZSkKKwkJaWYgKGMtPm9wcy0+ZGVueV9pZGxlKQorCQkJYy0+b3BzLT5kZW55X2lkbGUoYyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogTG93IGxldmVsIGhlbHBlcnMKICAqLwpAQCAtMzY3LDkgKzQwMywxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIWFyY2hfY2xvY2sgfHwgIWFyY2hfY2xvY2stPmNsa19pbml0X2NwdWZyZXFfdGFibGUpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlpZiAoYXJjaF9jbG9jay0+Y2xrX2luaXRfY3B1ZnJlcV90YWJsZSkKLQkJYXJjaF9jbG9jay0+Y2xrX2luaXRfY3B1ZnJlcV90YWJsZSh0YWJsZSk7CisJYXJjaF9jbG9jay0+Y2xrX2luaXRfY3B1ZnJlcV90YWJsZSh0YWJsZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTM3Nyw5ICs0MTUsMTEgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCFhcmNoX2Nsb2NrIHx8ICFhcmNoX2Nsb2NrLT5jbGtfZXhpdF9jcHVmcmVxX3RhYmxlKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JaWYgKGFyY2hfY2xvY2stPmNsa19leGl0X2NwdWZyZXFfdGFibGUpCi0JCWFyY2hfY2xvY2stPmNsa19leGl0X2NwdWZyZXFfdGFibGUodGFibGUpOworCWFyY2hfY2xvY2stPmNsa19leGl0X2NwdWZyZXFfdGFibGUodGFibGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogfQogI2VuZGlmCkBAIC0zOTcsNiArNDM3LDkgQEAKIAlzdHJ1Y3QgY2xrICpjazsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCFhcmNoX2Nsb2NrIHx8ICFhcmNoX2Nsb2NrLT5jbGtfZGlzYWJsZV91bnVzZWQpCisJCXJldHVybiAwOworCiAJcHJfaW5mbygiY2xvY2s6IGRpc2FibGluZyB1bnVzZWQgY2xvY2tzIHRvIHNhdmUgcG93ZXJcbiIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ssICZjbG9ja3MsIG5vZGUpIHsKIAkJaWYgKGNrLT5vcHMgPT0gJmNsa29wc19udWxsKQpAQCAtNDA2LDE0ICs0NDksMTQgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQkJaWYgKGFyY2hfY2xvY2stPmNsa19kaXNhYmxlX3VudXNlZCkKLQkJCWFyY2hfY2xvY2stPmNsa19kaXNhYmxlX3VudXNlZChjayk7CisJCWFyY2hfY2xvY2stPmNsa19kaXNhYmxlX3VudXNlZChjayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiAwOwogfQogbGF0ZV9pbml0Y2FsbChjbGtfZGlzYWJsZV91bnVzZWQpOworbGF0ZV9pbml0Y2FsbChvbWFwX2Nsa19lbmFibGVfYXV0b2lkbGVfYWxsKTsKICNlbmRpZgogCiBpbnQgX19pbml0IGNsa19pbml0KHN0cnVjdCBjbGtfZnVuY3Rpb25zICogY3VzdG9tX2Nsb2NrcykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwppbmRleCBmMDQ3MzE4Li5kOWYxMGEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCkBAIC0yNCwxMCArMjQsMTEgQEAKIAogI2RlZmluZSBOT19MRU5HVEhfQ0hFQ0sgMHhmZmZmZmZmZgogCi1zdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsICpvbWFwX2JvYXJkX2NvbmZpZzsKK3N0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgKm9tYXBfYm9hcmRfY29uZmlnIF9faW5pdGRhdGE7CiBpbnQgb21hcF9ib2FyZF9jb25maWdfc2l6ZTsKIAotc3RhdGljIGNvbnN0IHZvaWQgKmdldF9jb25maWcodTE2IHRhZywgc2l6ZV90IGxlbiwgaW50IHNraXAsIHNpemVfdCAqbGVuX291dCkKK3N0YXRpYyBjb25zdCB2b2lkICpfX2luaXQgZ2V0X2NvbmZpZyh1MTYgdGFnLCBzaXplX3QgbGVuLAorCQlpbnQgc2tpcCwgc2l6ZV90ICpsZW5fb3V0KQogewogCXN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgKmtpbmZvID0gTlVMTDsKIAlpbnQgaTsKQEAgLTQ5LDE3ICs1MCwxNSBAQAogCXJldHVybiBraW5mby0+ZGF0YTsKIH0KIAotY29uc3Qgdm9pZCAqX19vbWFwX2dldF9jb25maWcodTE2IHRhZywgc2l6ZV90IGxlbiwgaW50IG5yKQorY29uc3Qgdm9pZCAqX19pbml0IF9fb21hcF9nZXRfY29uZmlnKHUxNiB0YWcsIHNpemVfdCBsZW4sIGludCBucikKIHsKICAgICAgICAgcmV0dXJuIGdldF9jb25maWcodGFnLCBsZW4sIG5yLCBOVUxMKTsKIH0KLUVYUE9SVF9TWU1CT0woX19vbWFwX2dldF9jb25maWcpOwogCi1jb25zdCB2b2lkICpvbWFwX2dldF92YXJfY29uZmlnKHUxNiB0YWcsIHNpemVfdCAqbGVuKQorY29uc3Qgdm9pZCAqX19pbml0IG9tYXBfZ2V0X3Zhcl9jb25maWcodTE2IHRhZywgc2l6ZV90ICpsZW4pCiB7CiAgICAgICAgIHJldHVybiBnZXRfY29uZmlnKHRhZywgTk9fTEVOR1RIX0NIRUNLLCAwLCBsZW4pOwogfQotRVhQT1JUX1NZTUJPTChvbWFwX2dldF92YXJfY29uZmlnKTsKIAogdm9pZCBfX2luaXQgb21hcF9yZXNlcnZlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCmluZGV4IDg2MmRkYTkuLmY3ZmVkNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCkBAIC01NCw3ICs1NCw3IEBACiAjZGVmaW5lIG9tYXAxNnh4XzMya19yZWFkCU5VTEwKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDIwCiBzdGF0aWMgY3ljbGVfdCBub3RyYWNlIG9tYXAyNDIwXzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDI0MjBfMzJLU1lOQ1RfQkFTRSArIDB4MTApIC0gb2Zmc2V0XzMyazsKQEAgLTYzLDcgKzYzLDcgQEAKICNkZWZpbmUgb21hcDI0MjBfMzJrX3JlYWQJTlVMTAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorI2lmZGVmIENPTkZJR19TT0NfT01BUDI0MzAKIHN0YXRpYyBjeWNsZV90IG5vdHJhY2Ugb21hcDI0MzBfMzJrX3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlyZXR1cm4gb21hcF9yZWFkbChPTUFQMjQzMF8zMktTWU5DVF9CQVNFICsgMHgxMCkgLSBvZmZzZXRfMzJrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYwppbmRleCAxMWM1NGVjLi5kYTRmNjhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgX19jcHVpbml0IG9tYXBfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCmluZGV4IDEwMjQ1YjguLjdkOWY4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwpAQCAtMzUsOCArMzUsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKm9tYXBfbWNic3BfZGV2aWNlczsKIAotdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpjb25maWcsCi0JCQkJCWludCBzaXplKQordm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IHJlc19jb3VudCwKKwkJCXN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgKmNvbmZpZywgaW50IHNpemUpCiB7CiAJaW50IGk7CiAKQEAgLTU0LDYgKzU0LDggQEAKIAkJbmV3X21jYnNwID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJvbWFwLW1jYnNwIiwgaSArIDEpOwogCQlpZiAoIW5ld19tY2JzcCkKIAkJCWNvbnRpbnVlOworCQlwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhuZXdfbWNic3AsICZyZXNbaSAqIHJlc19jb3VudF0sCisJCQkJCXJlc19jb3VudCk7CiAJCW5ld19tY2JzcC0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmY29uZmlnW2ldOwogCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG5ld19tY2JzcCk7CiAJCWlmIChyZXQpIHsKQEAgLTY1LDggKzY3LDggQEAKIH0KIAogI2Vsc2UKLXZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqY29uZmlnLAotCQkJCQlpbnQgc2l6ZSkKK3ZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNfY291bnQsCisJCQlzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpjb25maWcsIGludCBzaXplKQogeyAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCA4NTM2MzA4Li4yZWMzYjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAvKiBSZXR1cm5zIDEgaWYgdGhlIERNQSBtb2R1bGUgaXMgaW4gT01BUDE1MTAtY29tcGF0aWJsZSBtb2RlLCAwIG90aGVyd2lzZSAqLwotaW50IG9tYXBfZG1hX2luXzE1MTBfbW9kZSh2b2lkKQorc3RhdGljIGludCBvbWFwX2RtYV9pbl8xNTEwX21vZGUodm9pZCkKIHsKIAlyZXR1cm4gZW5hYmxlXzE1MTBfbW9kZTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCmluZGV4IDFkNzA2Y2YuLmVlOWY2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwpAQCAtMzQyLDYgKzM0MiwxMCBAQAogCWwgfD0gMHgwMiA8PCAzOyAgLyogU2V0IHRvIHNtYXJ0LWlkbGUgbW9kZSAqLwogCWwgfD0gMHgyIDw8IDg7ICAgLyogU2V0IGNsb2NrIGFjdGl2aXR5IHRvIHBlcnNlcnZlIGYtY2xvY2sgb24gaWRsZSAqLwogCisJLyogRW5hYmxlIGF1dG9pZGxlIG9uIE9NQVAyIC8gT01BUDMgKi8KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpCisJCWwgfD0gMHgxIDw8IDA7CisKIAkvKgogCSAqIEVuYWJsZSB3YWtlLXVwIG9uIE9NQVAyIENQVXMuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKaW5kZXggYTRmODAwMy4uMzM0MWNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYwpAQCAtMTEyLDYgKzExMiw3IEBACiB9CiAKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwogLyoKICAqIFhYWCBUaGlzIGZ1bmN0aW9uIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgd3JhcHBlciAtIG9ubHkKICAqIG5lZWRlZCB1bnRpbCB0aGUgSTJDIGRyaXZlciBjYW4gYmUgY29udmVydGVkIHRvIGNhbGwKQEAgLTEzMCw3ICsxMzEsNiBAQAogCX0sCiB9OwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiBzdGF0aWMgaW5saW5lIGludCBvbWFwMl9pMmNfYWRkX2J1cyhpbnQgYnVzX2lkKQogewogCWludCBsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ib2FyZC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ib2FyZC5oCmluZGV4IDNjZjRmYTIuLjk3MTI2ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvYm9hcmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2JvYXJkLmgKQEAgLTE1MSwxNCArMTUxLDE0IEBACiAJY29uc3Qgdm9pZCAqZGF0YTsKIH07CiAKLWV4dGVybiBjb25zdCB2b2lkICpfX29tYXBfZ2V0X2NvbmZpZyh1MTYgdGFnLCBzaXplX3QgbGVuLCBpbnQgbnIpOworZXh0ZXJuIGNvbnN0IHZvaWQgKl9faW5pdCBfX29tYXBfZ2V0X2NvbmZpZyh1MTYgdGFnLCBzaXplX3QgbGVuLCBpbnQgbnIpOwogCiAjZGVmaW5lIG9tYXBfZ2V0X2NvbmZpZyh0YWcsIHR5cGUpIFwKIAkoKGNvbnN0IHR5cGUgKikgX19vbWFwX2dldF9jb25maWcoKHRhZyksIHNpemVvZih0eXBlKSwgMCkpCiAjZGVmaW5lIG9tYXBfZ2V0X25yX2NvbmZpZyh0YWcsIHR5cGUsIG5yKSBcCiAJKChjb25zdCB0eXBlICopIF9fb21hcF9nZXRfY29uZmlnKCh0YWcpLCBzaXplb2YodHlwZSksIChucikpKQogCi1leHRlcm4gY29uc3Qgdm9pZCAqb21hcF9nZXRfdmFyX2NvbmZpZyh1MTYgdGFnLCBzaXplX3QgKmxlbik7CitleHRlcm4gY29uc3Qgdm9pZCAqX19pbml0IG9tYXBfZ2V0X3Zhcl9jb25maWcodTE2IHRhZywgc2l6ZV90ICpsZW4pOwogCiBleHRlcm4gc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCAqb21hcF9ib2FyZF9jb25maWc7CiBleHRlcm4gaW50IG9tYXBfYm9hcmRfY29uZmlnX3NpemU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsa2Rldl9vbWFwLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsa2Rldl9vbWFwLmgKaW5kZXggMjU2YWIzZi4uZjE4OTlhM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xrZGV2X29tYXAuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsa2Rldl9vbWFwLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgQ0tfMzUxNwkJKDEgPDwgOSkKICNkZWZpbmUgQ0tfMzZYWAkJKDEgPDwgMTApCS8qIDM2eHgvMzd4eC1zcGVjaWZpYyBjbG9ja3MgKi8KICNkZWZpbmUgQ0tfNDQzWAkJKDEgPDwgMTEpCisjZGVmaW5lIENLX1RJODE2WAkoMSA8PCAxMikKIAogCiAjZGVmaW5lIENLXzM0WFgJCShDS18zNDMwRVMxIHwgQ0tfMzQzMEVTMlBMVVMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKaW5kZXggOGViMGFkYS4uMDA2ZTU5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaApAQCAtMjUsNiArMjUsOCBAQAogICogQGRpc2FibGU6IGZuIHB0ciB0aGF0IGVuYWJsZXMgdGhlIGN1cnJlbnQgY2xvY2sgaW4gaGFyZHdhcmUKICAqIEBmaW5kX2lkbGVzdDogZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBJRExFU1QgcmVnaXN0ZXIgZm9yIHRoZSBjbG9jaydzIElQIGJsawogICogQGZpbmRfY29tcGFuaW9uOiBmdW5jdGlvbiByZXR1cm5pbmcgdGhlICJjb21wYW5pb24iIGNsayByZWcgZm9yIHRoZSBjbG9jaworICogQGFsbG93X2lkbGU6IGZuIHB0ciB0aGF0IGVuYWJsZXMgYXV0b2lkbGUgZm9yIHRoZSBjdXJyZW50IGNsb2NrIGluIGhhcmR3YXJlCisgKiBAZGVueV9pZGxlOiBmbiBwdHIgdGhhdCBkaXNhYmxlcyBhdXRvaWRsZSBmb3IgdGhlIGN1cnJlbnQgY2xvY2sgaW4gaGFyZHdhcmUKICAqCiAgKiBBICJjb21wYW5pb24iIGNsayBpcyBhbiBhY2NvbXBhbnlpbmcgY2xvY2sgdG8gdGhlIG9uZSBiZWluZyBxdWVyaWVkCiAgKiB0aGF0IG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIElQIG1vZHVsZSBjb25uZWN0ZWQgdG8gdGhlIGNsb2NrIHRvCkBAIC00Miw2ICs0NCw4IEBACiAJCQkJCSAgICAgICB1OCAqLCB1OCAqKTsKIAl2b2lkCQkJKCpmaW5kX2NvbXBhbmlvbikoc3RydWN0IGNsayAqLCB2b2lkIF9faW9tZW0gKiosCiAJCQkJCQkgIHU4ICopOworCXZvaWQJCQkoKmFsbG93X2lkbGUpKHN0cnVjdCBjbGsgKik7CisJdm9pZAkJCSgqZGVueV9pZGxlKShzdHJ1Y3QgY2xrICopOwogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwpAQCAtNTMsNiArNTcsNyBAQAogI2RlZmluZSBSQVRFX0lOXzM0MzBFUzJQTFVTCSgxIDw8IDMpCS8qIDM0MzAgRVMgPj0gMiByYXRlcyBvbmx5ICovCiAjZGVmaW5lIFJBVEVfSU5fMzZYWAkJKDEgPDwgNCkKICNkZWZpbmUgUkFURV9JTl80NDMwCQkoMSA8PCA1KQorI2RlZmluZSBSQVRFX0lOX1RJODE2WAkJKDEgPDwgNikKIAogI2RlZmluZSBSQVRFX0lOXzI0WFgJCShSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpCiAjZGVmaW5lIFJBVEVfSU5fMzRYWAkJKFJBVEVfSU5fMzQzMEVTMSB8IFJBVEVfSU5fMzQzMEVTMlBMVVMpCkBAIC0xMDQsNyArMTA5LDYgQEAKICAqIEBjbGtfcmVmOiBzdHJ1Y3QgY2xrIHBvaW50ZXIgdG8gdGhlIGNsb2NrJ3MgcmVmZXJlbmNlIGNsb2NrIGlucHV0CiAgKiBAY29udHJvbF9yZWc6IHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIERQTEwgbW9kZSBiaXRmaWVsZAogICogQGVuYWJsZV9tYXNrOiBtYXNrIG9mIHRoZSBEUExMIG1vZGUgYml0ZmllbGQgaW4gQGNvbnRyb2xfcmVnCi0gKiBAcmF0ZV90b2xlcmFuY2U6IG1heGltdW0gdmFyaWFuY2UgYWxsb3dlZCBmcm9tIHRhcmdldCByYXRlIChpbiBIeikKICAqIEBsYXN0X3JvdW5kZWRfcmF0ZTogY2FjaGUgb2YgdGhlIGxhc3QgcmF0ZSByZXN1bHQgb2Ygb21hcDJfZHBsbF9yb3VuZF9yYXRlKCkKICAqIEBsYXN0X3JvdW5kZWRfbTogY2FjaGUgb2YgdGhlIGxhc3QgTSByZXN1bHQgb2Ygb21hcDJfZHBsbF9yb3VuZF9yYXRlKCkKICAqIEBtYXhfbXVsdGlwbGllcjogbWF4aW11bSB2YWxpZCBub24tYnlwYXNzIG11bHRpcGxpZXIgdmFsdWUgKGFjdHVhbCkKQEAgLTEzMCwxMiArMTM0LDkgQEAKICAqIFhYWCBTb21lIERQTExzIGhhdmUgbXVsdGlwbGUgYnlwYXNzIGlucHV0cywgc28gaXQncyBub3QgdGVjaG5pY2FsbHkKICAqIGNvcnJlY3QgdG8gb25seSBoYXZlIG9uZSBAY2xrX2J5cGFzcyBwb2ludGVyLgogICoKLSAqIFhYWCBAcmF0ZV90b2xlcmFuY2Ugc2hvdWxkIHByb2JhYmx5IGJlIGRlcHJlY2F0ZWQgLSBjdXJyZW50bHkgdGhlcmUKLSAqIGRvbid0IHNlZW0gdG8gYmUgYW55IHVzZWNhc2VzIGZvciBEUExMIHJvdW5kaW5nIHRoYXQgaXMgbm90IGV4YWN0LgotICoKICAqIFhYWCBUaGUgcnVudGltZS12YXJpYWJsZSBmaWVsZHMgKEBsYXN0X3JvdW5kZWRfcmF0ZSwgQGxhc3Rfcm91bmRlZF9tLAogICogQGxhc3Rfcm91bmRlZF9uKSBzaG91bGQgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHJ1bnRpbWUtZml4ZWQgZmllbGRzCi0gKiBhbmQgcGxhY2VkIGludG8gYSBkaWZmZXJlbmN0IHN0cnVjdHVyZSwgc28gdGhhdCB0aGUgcnVudGltZS1maXhlZCBkYXRhCisgKiBhbmQgcGxhY2VkIGludG8gYSBkaWZmZXJlbnQgc3RydWN0dXJlLCBzbyB0aGF0IHRoZSBydW50aW1lLWZpeGVkIGRhdGEKICAqIGNhbiBiZSBwbGFjZWQgaW50byByZWFkLW9ubHkgc3BhY2UuCiAgKi8KIHN0cnVjdCBkcGxsX2RhdGEgewpAQCAtMTQ2LDcgKzE0Nyw2IEBACiAJc3RydWN0IGNsawkJKmNsa19yZWY7CiAJdm9pZCBfX2lvbWVtCQkqY29udHJvbF9yZWc7CiAJdTMyCQkJZW5hYmxlX21hc2s7Ci0JdW5zaWduZWQgaW50CQlyYXRlX3RvbGVyYW5jZTsKIAl1bnNpZ25lZCBsb25nCQlsYXN0X3JvdW5kZWRfcmF0ZTsKIAl1MTYJCQlsYXN0X3JvdW5kZWRfbTsKIAl1MTYJCQltYXhfbXVsdGlwbGllcjsKQEAgLTE3MSwxMiArMTcxLDI0IEBACiAKICNlbmRpZgogCi0vKiBzdHJ1Y3QgY2xrLmZsYWdzIHBvc3NpYmlsaXRpZXMgKi8KKy8qCisgKiBzdHJ1Y3QgY2xrLmZsYWdzIHBvc3NpYmlsaXRpZXMKKyAqCisgKiBYWFggZG9jdW1lbnQgdGhlIHJlc3Qgb2YgdGhlIGNsb2NrIGZsYWdzIGhlcmUKKyAqCisgKiBDTE9DS19DTEtPVVRYMjogKE9NQVA0IG9ubHkpIERQTEwgQ0xLT1VUIGFuZCBDTEtPVVRYMiBHQVRFX0NUUkwKKyAqICAgICBiaXRzIHNoYXJlIHRoZSBzYW1lIHJlZ2lzdGVyLiAgVGhpcyBmbGFnIGFsbG93cyB0aGUKKyAqICAgICBvbWFwNF9kcGxsbXgqKCkgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggR0FURV9DVFJMIGJpdCBmaWVsZAorICogICAgIHNob3VsZCBiZSB1c2VkLiAgVGhpcyBpcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiAtIGEgYmV0dGVyIGFwcHJvYWNoCisgKiAgICAgd291bGQgYmUgdG8gYXNzb2NpYXRlIGNsb2NrIHR5cGUtc3BlY2lmaWMgZGF0YSB3aXRoIHRoZSBjbG9jaywKKyAqICAgICBzaW1pbGFyIHRvIHRoZSBzdHJ1Y3QgZHBsbF9kYXRhIGFwcHJvYWNoLgorICovCiAjZGVmaW5lIEVOQUJMRV9SRUdfMzJCSVQJKDEgPDwgMCkJLyogVXNlIDMyLWJpdCBhY2Nlc3MgKi8KICNkZWZpbmUgQ0xPQ0tfSURMRV9DT05UUk9MCSgxIDw8IDEpCiAjZGVmaW5lIENMT0NLX05PX0lETEVfUEFSRU5UCSgxIDw8IDIpCiAjZGVmaW5lIEVOQUJMRV9PTl9JTklUCQkoMSA8PCAzKQkvKiBFbmFibGUgdXBvbiBmcmFtZXdvcmsgaW5pdCAqLwogI2RlZmluZSBJTlZFUlRfRU5BQkxFCQkoMSA8PCA0KQkvKiAwIGVuYWJsZXMsIDEgZGlzYWJsZXMgKi8KKyNkZWZpbmUgQ0xPQ0tfQ0xLT1VUWDIJCSgxIDw8IDUpCiAKIC8qKgogICogc3RydWN0IGNsayAtIE9NQVAgc3RydWN0IGNsawpAQCAtMjkyLDYgKzMwNCw4IEBACiBleHRlcm4gdm9pZCBjbGtfZXhpdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKTsKICNlbmRpZgogZXh0ZXJuIHN0cnVjdCBjbGsgKm9tYXBfY2xrX2dldF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIGludCBvbWFwX2Nsa19lbmFibGVfYXV0b2lkbGVfYWxsKHZvaWQpOworZXh0ZXJuIGludCBvbWFwX2Nsa19kaXNhYmxlX2F1dG9pZGxlX2FsbCh2b2lkKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX251bGw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCmluZGV4IDI5YjJhZmIuLjUyODgxMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaApAQCAtNTYsMTYgKzU2LDEzIEBACiAJdW5zaWduZWQgbG9uZyAgIHBybTsgICAgICAgICAgICAvKiBQb3dlciBhbmQgUmVzZXQgTWFuYWdlbWVudCAqLwogCXVuc2lnbmVkIGxvbmcgICBjbTsgICAgICAgICAgICAgLyogQ2xvY2sgTWFuYWdlbWVudCAqLwogCXVuc2lnbmVkIGxvbmcgICBjbTI7Ci0JdW5zaWduZWQgbG9uZwl1YXJ0MV9waHlzOwotCXVuc2lnbmVkIGxvbmcJdWFydDJfcGh5czsKLQl1bnNpZ25lZCBsb25nCXVhcnQzX3BoeXM7Ci0JdW5zaWduZWQgbG9uZwl1YXJ0NF9waHlzOwogfTsKIAogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18yNDJ4KHZvaWQpOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18yNDN4KHZvaWQpOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18zeHh4KHZvaWQpOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc180NDN4KHZvaWQpOwordm9pZCBvbWFwMl9zZXRfZ2xvYmFsc190aTgxNngodm9pZCk7CiAKIC8qIFRoZXNlIGdldCBjYWxsZWQgZnJvbSBvbWFwMl9zZXRfZ2xvYmFsc194eHh4KCksIGRvIG5vdCBjYWxsIHRoZXNlICovCiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3RhcChzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jcHUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY3B1LmgKaW5kZXggM2ZkOGI0MC4uODE5OGJiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jcHUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NwdS5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0xMSBUZXhhcyBJbnN0cnVtZW50cy4KICAqCiAgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnkubGluZGdyZW5Abm9raWEuY29tPgogICoKQEAgLTEwNSw2ICsxMDUsMTIgQEAKIAlyZXR1cm4gKEdFVF9PTUFQX1NVQkNMQVNTID09IChpZCkpID8gMSA6IDA7CVwKIH0KIAorI2RlZmluZSBJU19USV9TVUJDTEFTUyhzdWJjbGFzcywgaWQpCQkJXAorc3RhdGljIGlubGluZSBpbnQgaXNfdGkgIyNzdWJjbGFzcyAodm9pZCkJCVwKK3sJCQkJCQkJXAorCXJldHVybiAoR0VUX09NQVBfU1VCQ0xBU1MgPT0gKGlkKSkgPyAxIDogMDsJXAorfQorCiBJU19PTUFQX0NMQVNTKDd4eCwgMHgwNykKIElTX09NQVBfQ0xBU1MoMTV4eCwgMHgxNSkKIElTX09NQVBfQ0xBU1MoMTZ4eCwgMHgxNikKQEAgLTExOCw2ICsxMjQsOCBAQAogSVNfT01BUF9TVUJDTEFTUygzNjN4LCAweDM2MykKIElTX09NQVBfU1VCQ0xBU1MoNDQzeCwgMHg0NDMpCiAKK0lTX1RJX1NVQkNMQVNTKDgxNngsIDB4ODE2KQorCiAjZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNnh4KCkJCTAKQEAgLTEyNiw2ICsxMzQsNyBAQAogI2RlZmluZSBjcHVfaXNfb21hcDI0M3goKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDM0eHgoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDM0M3goKQkJMAorI2RlZmluZSBjcHVfaXNfdGk4MTZ4KCkJCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwNDR4eCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwNDQzeCgpCQkwCiAKQEAgLTE3MCwxMSArMTc5LDExIEBACiAjICB1bmRlZiAgY3B1X2lzX29tYXAyNHh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNHh4KCkJCWlzX29tYXAyNHh4KCkKICMgZW5kaWYKLSMgaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfT01BUDI0MjApCisjIGlmIGRlZmluZWQgKENPTkZJR19TT0NfT01BUDI0MjApCiAjICB1bmRlZiAgY3B1X2lzX29tYXAyNDJ4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNDJ4KCkJCWlzX29tYXAyNDJ4KCkKICMgZW5kaWYKLSMgaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfT01BUDI0MzApCisjIGlmIGRlZmluZWQgKENPTkZJR19TT0NfT01BUDI0MzApCiAjICB1bmRlZiAgY3B1X2lzX29tYXAyNDN4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNDN4KCkJCWlzX29tYXAyNDN4KCkKICMgZW5kaWYKQEAgLTE4OSwxMSArMTk4LDExIEBACiAjICB1bmRlZiAgY3B1X2lzX29tYXAyNHh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNHh4KCkJCTEKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKyMgaWYgZGVmaW5lZChDT05GSUdfU09DX09NQVAyNDIwKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQyeAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMjQyeCgpCQkxCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCisjIGlmIGRlZmluZWQoQ09ORklHX1NPQ19PTUFQMjQzMCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDI0M3gKICMgIGRlZmluZSBjcHVfaXNfb21hcDI0M3goKQkJMQogIyBlbmRpZgpAQCAtMjAxLDcgKzIxMCw3IEBACiAjICB1bmRlZiAgY3B1X2lzX29tYXAzNHh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAzNHh4KCkJCTEKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzQzMCkKKyMgaWYgZGVmaW5lZChDT05GSUdfU09DX09NQVAzNDMwKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMzQzeAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMzQzeCgpCQkxCiAjIGVuZGlmCkBAIC0zMzAsNiArMzM5LDcgQEAKICMgdW5kZWYgY3B1X2lzX29tYXAzNTMwCiAjIHVuZGVmIGNwdV9pc19vbWFwMzUwNQogIyB1bmRlZiBjcHVfaXNfb21hcDM1MTcKKyMgdW5kZWYgY3B1X2lzX3RpODE2eAogIyBkZWZpbmUgY3B1X2lzX29tYXAzNDMwKCkJCWlzX29tYXAzNDMwKCkKICMgZGVmaW5lIGNwdV9pc19vbWFwMzUwMygpCQkoY3B1X2lzX29tYXAzNDMwKCkgJiYJCVwKIAkJCQkJCSghb21hcDNfaGFzX2l2YSgpKSAmJglcCkBAIC0zNDUsNiArMzU1LDcgQEAKICMgZGVmaW5lIGNwdV9pc19vbWFwMzUxNygpCQlpc19vbWFwMzUxNygpCiAjIHVuZGVmIGNwdV9pc19vbWFwMzYzMAogIyBkZWZpbmUgY3B1X2lzX29tYXAzNjMwKCkJCWlzX29tYXAzNjN4KCkKKyMgZGVmaW5lIGNwdV9pc190aTgxNngoKQkJaXNfdGk4MTZ4KCkKICNlbmRpZgogCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCkBAIC0zODksOSArNDAwLDE1IEBACiAjZGVmaW5lIE9NQVAzNTA1X1JFVih2KQkJKE9NQVAzNVhYX0NMQVNTIHwgKDB4MzUwNSA8PCAxNikgfCAodiA8PCA4KSkKICNkZWZpbmUgT01BUDM1MTdfUkVWKHYpCQkoT01BUDM1WFhfQ0xBU1MgfCAoMHgzNTE3IDw8IDE2KSB8ICh2IDw8IDgpKQogCisjZGVmaW5lIFRJODE2WF9DTEFTUwkJMHg4MTYwMDAzNAorI2RlZmluZSBUSTgxNjhfUkVWX0VTMV8wCVRJODE2WF9DTEFTUworI2RlZmluZSBUSTgxNjhfUkVWX0VTMV8xCShUSTgxNlhfQ0xBU1MgfCAoT01BUF9SRVZCSVRTXzAxIDw8IDgpKQorCiAjZGVmaW5lIE9NQVA0NDNYX0NMQVNTCQkweDQ0MzAwMDQ0Ci0jZGVmaW5lIE9NQVA0NDMwX1JFVl9FUzFfMAlPTUFQNDQzWF9DTEFTUwotI2RlZmluZSBPTUFQNDQzMF9SRVZfRVMyXzAJMHg0NDMwMTA0NAorI2RlZmluZSBPTUFQNDQzMF9SRVZfRVMxXzAJKE9NQVA0NDNYX0NMQVNTIHwgKDB4MTAgPDwgOCkpCisjZGVmaW5lIE9NQVA0NDMwX1JFVl9FUzJfMAkoT01BUDQ0M1hfQ0xBU1MgfCAoMHgyMCA8PCA4KSkKKyNkZWZpbmUgT01BUDQ0MzBfUkVWX0VTMl8xCShPTUFQNDQzWF9DTEFTUyB8ICgweDIxIDw8IDgpKQorI2RlZmluZSBPTUFQNDQzMF9SRVZfRVMyXzIJKE9NQVA0NDNYX0NMQVNTIHwgKDB4MjIgPDwgOCkpCiAKIC8qCiAgKiBvbWFwX2NoaXAgYml0cwpAQCAtNDE5LDExICs0MzYsMTYgQEAKICNkZWZpbmUgQ0hJUF9JU19PTUFQMzYzMEVTMV8xICAgICAgICAgICAoMSA8PCA5KQogI2RlZmluZSBDSElQX0lTX09NQVAzNjMwRVMxXzIgICAgICAgICAgICgxIDw8IDEwKQogI2RlZmluZSBDSElQX0lTX09NQVA0NDMwRVMyCQkoMSA8PCAxMSkKKyNkZWZpbmUgQ0hJUF9JU19PTUFQNDQzMEVTMl8xCQkoMSA8PCAxMikKKyNkZWZpbmUgQ0hJUF9JU19PTUFQNDQzMEVTMl8yCQkoMSA8PCAxMykKKyNkZWZpbmUgQ0hJUF9JU19USTgxNlgJCQkoMSA8PCAxNCkKIAogI2RlZmluZSBDSElQX0lTX09NQVAyNFhYCQkoQ0hJUF9JU19PTUFQMjQyMCB8IENISVBfSVNfT01BUDI0MzApCiAKLSNkZWZpbmUgQ0hJUF9JU19PTUFQNDQzMAkJKENISVBfSVNfT01BUDQ0MzBFUzEgfCBcCi0JCQkJCQkgQ0hJUF9JU19PTUFQNDQzMEVTMikKKyNkZWZpbmUgQ0hJUF9JU19PTUFQNDQzMAkJKENISVBfSVNfT01BUDQ0MzBFUzEgfAkJXAorCQkJCQkgQ0hJUF9JU19PTUFQNDQzMEVTMiB8CQlcCisJCQkJCSBDSElQX0lTX09NQVA0NDMwRVMyXzEgfAlcCisJCQkJCSBDSElQX0lTX09NQVA0NDMwRVMyXzIpCiAKIC8qCiAgKiAiR0UiIGhlcmUgcmVwcmVzZW50cyAiZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIiBpbiB0ZXJtcyBvZiBFUwpAQCAtNDU1LDYgKzQ3Nyw3IEBACiAjZGVmaW5lIE9NQVAzX0hBU19JU1AJCQlCSVQoNCkKICNkZWZpbmUgT01BUDNfSEFTXzE5Mk1IWl9DTEsJCUJJVCg1KQogI2RlZmluZSBPTUFQM19IQVNfSU9fV0FLRVVQCQlCSVQoNikKKyNkZWZpbmUgT01BUDNfSEFTX1NEUkMJCQlCSVQoNykKIAogI2RlZmluZSBPTUFQM19IQVNfRkVBVFVSRShmZWF0LGZsYWcpCQkJXAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb21hcDNfaGFzXyAjI2ZlYXQodm9pZCkJXApAQCAtNDY5LDUgKzQ5Miw2IEBACiBPTUFQM19IQVNfRkVBVFVSRShpc3AsIElTUCkKIE9NQVAzX0hBU19GRUFUVVJFKDE5Mm1oel9jbGssIDE5Mk1IWl9DTEspCiBPTUFQM19IQVNfRkVBVFVSRShpb193YWtldXAsIElPX1dBS0VVUCkKK09NQVAzX0hBU19GRUFUVVJFKHNkcmMsIFNEUkMpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kaXNwbGF5LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Rpc3BsYXkuaAppbmRleCA1MzdmNGU0Li4wZjE0MGVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Rpc3BsYXkuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Rpc3BsYXkuaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjZGVmaW5lIERJU1BDX0lSUV9GUkFNRURPTkUJCSgxIDw8IDApCkBAIC0yMjYsNiArMjI3LDE2IEBACiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGVmYXVsdF9kZXZpY2U7CiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfT01BUDJfRFNTX01PRFVMRSkgfHwgZGVmaW5lZChDT05GSUdfT01BUDJfRFNTKQorLyogSW5pdCB3aXRoIHRoZSBib2FyZCBpbmZvICovCitleHRlcm4gaW50IG9tYXBfZGlzcGxheV9pbml0KHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvICpib2FyZF9kYXRhKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBvbWFwX2Rpc3BsYXlfaW5pdChzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyAqYm9hcmRfZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIHsKIAkvKiBVbml0OiBwaXhlbHMgKi8KIAl1MTYgeF9yZXM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtdGltZXIuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG10aW1lci5oCmluZGV4IGRmYTNhZmYuLmQ2YzcwZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG10aW1lci5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG10aW1lci5oCkBAIC0zLDYgKzMsMTIgQEAKICAqCiAgKiBPTUFQIER1YWwtTW9kZSBUaW1lcnMKICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBUYXJ1biBLYW50aSBEZWJCYXJtYSA8dGFydW4ua2FudGlAdGkuY29tPgorICogVGhhcmEgR29waW5hdGggPHRoYXJhQHRpLmNvbT4KKyAqCisgKiBQbGF0Zm9ybSBkZXZpY2UgY29udmVyc2lvbiBhbmQgaHdtb2Qgc3VwcG9ydC4KKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KICAqIEF1dGhvcjogTGF1cmkgTGV1a2t1bmVuIDxsYXVyaS5sZXVra3VuZW5Abm9raWEuY29tPgogICogUFdNIGFuZCBjbG9jayBmcmFtd29yayBzdXBwb3J0IGJ5IFRpbW8gVGVyYXMuCkBAIC00NCw2ICs1MCwxMSBAQAogI2RlZmluZSBPTUFQX1RJTUVSX1RSSUdHRVJfT1ZFUkZMT1cJCTB4MDEKICNkZWZpbmUgT01BUF9USU1FUl9UUklHR0VSX09WRVJGTE9XX0FORF9DT01QQVJFCTB4MDIKIAorLyoKKyAqIElQIHJldmlzaW9uIGlkZW50aWZpZXIgc28gdGhhdCBIaWdobGFuZGVyIElQCisgKiBpbiBPTUFQNCBjYW4gYmUgZGlzdGluZ3Vpc2hlZC4KKyAqLworI2RlZmluZSBPTUFQX1RJTUVSX0lQX1ZFUlNJT05fMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MQogc3RydWN0IG9tYXBfZG1fdGltZXI7CiBleHRlcm4gc3RydWN0IG9tYXBfZG1fdGltZXIgKmdwdGltZXJfd2FrZXVwOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZnBnYS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mcGdhLmgKaW5kZXggYWUzOWJjYi4uYmQzYzYzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mcGdhLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mcGdhLmgKQEAgLTMwLDE4ICszMCwxOCBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qIG1hcHMgaW4gdGhlIEZQR0EgcmVnaXN0ZXJzIGFuZCB0aGUgRVRIUiByZWdpc3RlcnMgKi8KLSNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CQVNFCQlJT01FTSgweEU4MDAwMDAwKQkvKiBWQSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX0JBU0UJCTB4RTgwMDAwMDAJCS8qIFZBICovCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfU0laRQkJU1pfNEsJCQkvKiBTSVpFICovCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfU1RBUlQJCTB4MDQwMDAwMDAJCS8qIFBBICovCiAKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9FVEhSX1NUQVJUCShIMlAyX0RCR19GUEdBX1NUQVJUICsgMHgzMDApCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfRlBHQV9SRVYJCShIMlAyX0RCR19GUEdBX0JBU0UgKyAweDEwKQkvKiBGUEdBIFJldmlzaW9uICovCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfQk9BUkRfUkVWCQkoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxMikJLyogQm9hcmQgUmV2aXNpb24gKi8KLSNkZWZpbmUgSDJQMl9EQkdfRlBHQV9HUElPCQkoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxNCkJLyogR1BJTyBvdXRwdXRzICovCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEUwkJKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTYpCS8qIExFRHMgb3V0cHV0cyAqLwotI2RlZmluZSBIMlAyX0RCR19GUEdBX01JU0NfSU5QVVRTCShIMlAyX0RCR19GUEdBX0JBU0UgKyAweDE4KQkvKiBNaXNjIGlucHV0cyAqLwotI2RlZmluZSBIMlAyX0RCR19GUEdBX0xBTl9TVEFUVVMJKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MUEpCS8qIExBTiBTdGF0dXMgbGluZSAqLwotI2RlZmluZSBIMlAyX0RCR19GUEdBX0xBTl9SRVNFVAkJKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MUMpCS8qIExBTiBSZXNldCBsaW5lICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfRlBHQV9SRVYJCUlPTUVNKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTApCS8qIEZQR0EgUmV2aXNpb24gKi8KKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CT0FSRF9SRVYJCUlPTUVNKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTIpCS8qIEJvYXJkIFJldmlzaW9uICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfR1BJTwkJSU9NRU0oSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxNCkJLyogR1BJTyBvdXRwdXRzICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEUwkJSU9NRU0oSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxNikJLyogTEVEcyBvdXRwdXRzICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTUlTQ19JTlBVVFMJSU9NRU0oSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxOCkJLyogTWlzYyBpbnB1dHMgKi8KKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MQU5fU1RBVFVTCUlPTUVNKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MUEpCS8qIExBTiBTdGF0dXMgbGluZSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX0xBTl9SRVNFVAkJSU9NRU0oSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxQykJLyogTEFOIFJlc2V0IGxpbmUgKi8KIAogLyogTk9URTogIG1vc3QgYm9hcmRzIGRvbid0IGhhdmUgYSBzdGF0aWMgbWFwcGluZyBmb3IgdGhlIEZQR0EgLi4uICovCiBzdHJ1Y3QgaDJwMl9kYmdfZnBnYSB7CkBAIC04MSw1NSArODEsNTUgQEAKICAqICBPTUFQLTE1MTAgRlBHQQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9CQVNFCQlJT01FTSgweEU4MDAwMDAwKQkvKiBWQSAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0JBU0UJCTB4RTgwMDAwMDAJCS8qIFZBICovCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU0laRQkJU1pfNEsKICNkZWZpbmUgT01BUDE1MTBfRlBHQV9TVEFSVAkJMHgwODAwMDAwMAkJLyogUEEgKi8KIAogLyogUmV2aXNpb24gKi8KLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVZfTE9XCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MCkKLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVZfSElHSAkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDEpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVWX0xPVwkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVZfSElHSAkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MSkKIAotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0xDRF9QQU5FTF9DT05UUk9MCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyKQotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0xFRF9ESUdJVAkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDMpCi0jZGVmaW5lIElOTk9WQVRPUl9GUEdBX0hJRF9TUEkJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg0KQotI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BPV0VSCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9MQ0RfUEFORUxfQ09OVFJPTAkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0xFRF9ESUdJVAkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MykKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfSElEX1NQSQkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QT1dFUgkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NSkKIAogLyogSW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0lTUl9MTwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDYpCi0jZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSVNSX0hJCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NykKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9JU1JfTE8JCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDYpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSVNSX0hJCQkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHg3KQogCiAvKiBJbnRlcnJ1cHQgbWFzayAqLwotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0lNUl9MTwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDgpCi0jZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSU1SX0hJCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4OSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9JTVJfTE8JCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDgpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSU1SX0hJCQkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHg5KQogCiAvKiBSZXNldCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9IT1NUX1JFU0VUCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhhKQotI2RlZmluZSBPTUFQMTUxMF9GUEdBX1JTVAkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGIpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSE9TVF9SRVNFVAkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHhhKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1JTVAkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4YikKIAotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0FVRElPCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4YykKLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9ESVAJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhlKQotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0ZQR0FfSU8JCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhmKQotI2RlZmluZSBPTUFQMTUxMF9GUEdBX1VBUlQxCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTQpCi0jZGVmaW5lIE9NQVAxNTEwX0ZQR0FfVUFSVDIJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxNSkKLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9PTUFQMTUxMF9TVEFUVVMJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDE2KQotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0JPQVJEX1JFVgkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDE4KQotI2RlZmluZSBPTUFQMTUxMFAxX1BQVF9EQVRBCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTAwKQotI2RlZmluZSBPTUFQMTUxMFAxX1BQVF9TVEFUVVMJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxMDEpCi0jZGVmaW5lIE9NQVAxNTEwUDFfUFBUX0NPTlRST0wJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxMDIpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQVVESU8JCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGMpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfRElQCQkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHhlKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0ZQR0FfSU8JCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGYpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfVUFSVDEJCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDE0KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1VBUlQyCQkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxNSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9PTUFQMTUxMF9TVEFUVVMJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTYpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQk9BUkRfUkVWCQkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxOCkKKyNkZWZpbmUgT01BUDE1MTBQMV9QUFRfREFUQQkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTAwKQorI2RlZmluZSBPTUFQMTUxMFAxX1BQVF9TVEFUVVMJCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDEwMSkKKyNkZWZpbmUgT01BUDE1MTBQMV9QUFRfQ09OVFJPTAkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTAyKQogCi0jZGVmaW5lIE9NQVAxNTEwX0ZQR0FfVE9VQ0hTQ1JFRU4JCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwNCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9UT1VDSFNDUkVFTgkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDQpCiAKLSNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfSU5GTwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwNSkKLSNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTENEX0JSSUdIVF9MTwkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA2KQotI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MQ0RfQlJJR0hUX0hJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDcpCi0jZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xFRF9HUk5fTE8JCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwOCkKLSNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTEVEX0dSTl9ISQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA5KQotI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfUkVEX0xPCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGEpCi0jZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xFRF9SRURfSEkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwYikKLSNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGMpCi0jZGVmaW5lIElOTk9WQVRPUl9GUEdBX0VYUF9DT05UUk9MCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGQpCi0jZGVmaW5lIElOTk9WQVRPUl9GUEdBX0lTUjIJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGUpCi0jZGVmaW5lIElOTk9WQVRPUl9GUEdBX0lNUjIJCQkoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMTApCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0lORk8JCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwNSkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTENEX0JSSUdIVF9MTwkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDYpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xDRF9CUklHSFRfSEkJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA3KQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfR1JOX0xPCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwOCkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTEVEX0dSTl9ISQkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDkpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xFRF9SRURfTE8JCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjBhKQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfUkVEX0hJCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwYikKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwYykKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfRVhQX0NPTlRST0wJCUlPTUVNKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjBkKQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9JU1IyCQkJSU9NRU0oT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGUpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0lNUjIJCQlJT01FTShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIxMCkKIAogI2RlZmluZSBPTUFQMTUxMF9GUEdBX0VUSFJfU1RBUlQJCShPTUFQMTUxMF9GUEdBX1NUQVJUICsgMHgzMDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKaW5kZXggODVkZWQ1OS4uMTJiMzE2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKQEAgLTQxLDYgKzQxLDggQEAKICNkZWZpbmUgR1BNQ19OQU5EX0FERFJFU1MJMHgwMDAwMDAwYgogI2RlZmluZSBHUE1DX05BTkRfREFUQQkJMHgwMDAwMDAwYwogCisjZGVmaW5lIEdQTUNfRU5BQkxFX0lSUQkJMHgwMDAwMDAwZAorCiAvKiBFQ0MgY29tbWFuZHMgKi8KICNkZWZpbmUgR1BNQ19FQ0NfUkVBRAkJMCAvKiBSZXNldCBIYXJkd2FyZSBFQ0MgZm9yIHJlYWQgKi8KICNkZWZpbmUgR1BNQ19FQ0NfV1JJVEUJCTEgLyogUmVzZXQgSGFyZHdhcmUgRUNDIGZvciB3cml0ZSAqLwpAQCAtNzgsNiArODAsMTkgQEAKICNkZWZpbmUgV1JfUkRfUElOX01PTklUT1JJTkcJCTB4MDA2MDAwMDAKICNkZWZpbmUgR1BNQ19QUkVGRVRDSF9TVEFUVVNfRklGT19DTlQodmFsKQkoKHZhbCA+PiAyNCkgJiAweDdGKQogI2RlZmluZSBHUE1DX1BSRUZFVENIX1NUQVRVU19DT1VOVCh2YWwpCSh2YWwgJiAweDAwMDAzZmZmKQorI2RlZmluZSBHUE1DX0lSUV9GSUZPRVZFTlRFTkFCTEUJMHgwMQorI2RlZmluZSBHUE1DX0lSUV9DT1VOVF9FVkVOVAkJMHgwMgorCisjZGVmaW5lIFBSRUZFVENIX0ZJRk9USFJFU0hPTERfTUFYCTB4NDAKKyNkZWZpbmUgUFJFRkVUQ0hfRklGT1RIUkVTSE9MRCh2YWwpCSgodmFsKSA8PCA4KQorCitlbnVtIG9tYXBfZWNjIHsKKwkJLyogMS1iaXQgZWNjOiBzdG9yZWQgYXQgZW5kIG9mIHNwYXJlIGFyZWEgKi8KKwlPTUFQX0VDQ19IQU1NSU5HX0NPREVfREVGQVVMVCA9IDAsIC8qIERlZmF1bHQsIHMvdyBtZXRob2QgKi8KKwlPTUFQX0VDQ19IQU1NSU5HX0NPREVfSFcsIC8qIGdwbWMgdG8gZGV0ZWN0IHRoZSBlcnJvciAqLworCQkvKiAxLWJpdCBlY2M6IHN0b3JlZCBhdCBiZWdpbmluZyBvZiBzcGFyZSBhcmVhIGFzIHJvbWNvZGUgKi8KKwlPTUFQX0VDQ19IQU1NSU5HX0NPREVfSFdfUk9NQ09ERSwgLyogZ3BtYyBtZXRob2QgJiByb21jb2RlIGxheW91dCAqLworfTsKIAogLyoKICAqIE5vdGUgdGhhdCBhbGwgdmFsdWVzIGluIHRoaXMgc3RydWN0IGFyZSBpbiBuYW5vc2Vjb25kcyBleGNlcHQgc3luY19jbGsKQEAgLTEzMCwxMiArMTQ1LDExIEBACiBleHRlcm4gdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKTsKIGV4dGVybiBpbnQgZ3BtY19jc19zZXRfcmVzZXJ2ZWQoaW50IGNzLCBpbnQgcmVzZXJ2ZWQpOwogZXh0ZXJuIGludCBncG1jX2NzX3Jlc2VydmVkKGludCBjcyk7Ci1leHRlcm4gaW50IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGludCBjcywgaW50IGRtYV9tb2RlLAorZXh0ZXJuIGludCBncG1jX3ByZWZldGNoX2VuYWJsZShpbnQgY3MsIGludCBmaWZvX3RoLCBpbnQgZG1hX21vZGUsCiAJCQkJCXVuc2lnbmVkIGludCB1MzJfY291bnQsIGludCBpc193cml0ZSk7CiBleHRlcm4gaW50IGdwbWNfcHJlZmV0Y2hfcmVzZXQoaW50IGNzKTsKIGV4dGVybiB2b2lkIG9tYXAzX2dwbWNfc2F2ZV9jb250ZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDNfZ3BtY19yZXN0b3JlX2NvbnRleHQodm9pZCk7Ci1leHRlcm4gdm9pZCBncG1jX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGdwbWNfcmVhZF9zdGF0dXMoaW50IGNtZCk7CiBleHRlcm4gaW50IGdwbWNfY3NfY29uZmlndXJlKGludCBjcywgaW50IGNtZCwgaW50IHd2YWwpOwogZXh0ZXJuIGludCBncG1jX25hbmRfcmVhZChpbnQgY3MsIGludCBjbWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9oYXJkd2FyZS5oCmluZGV4IGQ1YjI2YWQuLmU4N2VmZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2hhcmR3YXJlLmgKQEAgLTI4Niw1ICsyODYsNiBAQAogI2luY2x1ZGUgPHBsYXQvb21hcDI0eHguaD4KICNpbmNsdWRlIDxwbGF0L29tYXAzNHh4Lmg+CiAjaW5jbHVkZSA8cGxhdC9vbWFwNDR4eC5oPgorI2luY2x1ZGUgPHBsYXQvdGk4MTZ4Lmg+CiAKICNlbmRpZgkvKiBfX0FTTV9BUkNIX09NQVBfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pby5oCmluZGV4IGVmNDEwNmMuLmQ3MmVjODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvLmgKQEAgLTI1OSw3ICsyNTksNyBAQAogZXh0ZXJuIHZvaWQgb21hcDFfbWFwX2NvbW1vbl9pbyh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAxX2luaXRfY29tbW9uX2h3KHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDIwCiBleHRlcm4gdm9pZCBvbWFwMjQyeF9tYXBfY29tbW9uX2lvKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMjQyeF9tYXBfY29tbW9uX2lvKHZvaWQpCkBAIC0yNjcsNyArMjY3LDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDMwCiBleHRlcm4gdm9pZCBvbWFwMjQzeF9tYXBfY29tbW9uX2lvKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMjQzeF9tYXBfY29tbW9uX2lvKHZvaWQpCkBAIC0yODMsNiArMjgzLDE0IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TT0NfT01BUFRJODE2WAorZXh0ZXJuIHZvaWQgb21hcHRpODE2eF9tYXBfY29tbW9uX2lvKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwdGk4MTZ4X21hcF9jb21tb25faW8odm9pZCkKK3sKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKIGV4dGVybiB2b2lkIG9tYXA0NHh4X21hcF9jb21tb25faW8odm9pZCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb21tdS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb21tdS5oCmluZGV4IDY5MjMwZDYuLjE3NGYxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW9tbXUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvbW11LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAlzdHJ1Y3QgY2xrCSpjbGs7CiAJdm9pZCBfX2lvbWVtCSpyZWdiYXNlOwogCXN0cnVjdCBkZXZpY2UJKmRldjsKKwl2b2lkCQkqaXNyX3ByaXY7CiAKIAl1bnNpZ25lZCBpbnQJcmVmY291bnQ7CiAJc3RydWN0IG11dGV4CWlvbW11X2xvY2s7CS8qIGdsb2JhbCBmb3IgdGhpcyB3aG9sZSBvYmplY3QgKi8KQEAgLTQ3LDcgKzQ4LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCW1tYXA7CiAJc3RydWN0IG11dGV4CQltbWFwX2xvY2s7IC8qIHByb3RlY3QgbW1hcCAqLwogCi0JaW50ICgqaXNyKShzdHJ1Y3QgaW9tbXUgKm9iaik7CisJaW50ICgqaXNyKShzdHJ1Y3QgaW9tbXUgKm9iaiwgdTMyIGRhLCB1MzIgaW9tbXVfZXJycywgdm9pZCAqcHJpdik7CiAKIAl2b2lkICpjdHg7IC8qIGlvbW11IGNvbnRleHQ6IHJlZ2lzdHJlcyBzYXZlZCBhcmVhICovCiAJdTMyIGRhX3N0YXJ0OwpAQCAtMTA5LDYgKzExMCwxMyBAQAogCXUzMiBkYV9lbmQ7CiB9OwogCisvKiBJT01NVSBlcnJvcnMgKi8KKyNkZWZpbmUgT01BUF9JT01NVV9FUlJfVExCX01JU1MJCSgxIDw8IDApCisjZGVmaW5lIE9NQVBfSU9NTVVfRVJSX1RSQU5TX0ZBVUxUCSgxIDw8IDEpCisjZGVmaW5lIE9NQVBfSU9NTVVfRVJSX0VNVV9NSVNTCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQX0lPTU1VX0VSUl9UQkxXQUxLX0ZBVUxUCSgxIDw8IDMpCisjZGVmaW5lIE9NQVBfSU9NTVVfRVJSX01VTFRJSElUX0ZBVUxUCSgxIDw8IDQpCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQogI2Vycm9yICJpb21tdSBmb3IgdGhpcyBwcm9jZXNzb3Igbm90IGltcGxlbWVudGVkIHlldCIKICNlbHNlCkBAIC0xNTQsMTEgKzE2MiwxNyBAQAogZXh0ZXJuIHZvaWQgZmx1c2hfaW90bGJfYWxsKHN0cnVjdCBpb21tdSAqb2JqKTsKIAogZXh0ZXJuIGludCBpb3BndGFibGVfc3RvcmVfZW50cnkoc3RydWN0IGlvbW11ICpvYmosIHN0cnVjdCBpb3RsYl9lbnRyeSAqZSk7CitleHRlcm4gdm9pZCBpb3BndGFibGVfbG9va3VwX2VudHJ5KHN0cnVjdCBpb21tdSAqb2JqLCB1MzIgZGEsIHUzMiAqKnBwZ2QsCisJCQkJICAgdTMyICoqcHB0ZSk7CiBleHRlcm4gc2l6ZV90IGlvcGd0YWJsZV9jbGVhcl9lbnRyeShzdHJ1Y3QgaW9tbXUgKm9iaiwgdTMyIGlvdmEpOwogCiBleHRlcm4gaW50IGlvbW11X3NldF9kYV9yYW5nZShzdHJ1Y3QgaW9tbXUgKm9iaiwgdTMyIHN0YXJ0LCB1MzIgZW5kKTsKIGV4dGVybiBzdHJ1Y3QgaW9tbXUgKmlvbW11X2dldChjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGlvbW11X3B1dChzdHJ1Y3QgaW9tbXUgKm9iaik7CitleHRlcm4gaW50IGlvbW11X3NldF9pc3IoY29uc3QgY2hhciAqbmFtZSwKKwkJCSBpbnQgKCppc3IpKHN0cnVjdCBpb21tdSAqb2JqLCB1MzIgZGEsIHUzMiBpb21tdV9lcnJzLAorCQkJCSAgICB2b2lkICpwcml2KSwKKwkJCSB2b2lkICppc3JfcHJpdik7CiAKIGV4dGVybiB2b2lkIGlvbW11X3NhdmVfY3R4KHN0cnVjdCBpb21tdSAqb2JqKTsKIGV4dGVybiB2b2lkIGlvbW11X3Jlc3RvcmVfY3R4KHN0cnVjdCBpb21tdSAqb2JqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW92bW0uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW92bW0uaAppbmRleCBiZGM3Y2U1Li4zMmEyZjZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb3ZtbS5oCkBAIC03MSw4ICs3MSw2IEBACiAjZGVmaW5lIElPVk1GX0xJTkVBUl9NQVNLCSgzIDw8ICgyICsgSU9WTUZfU1dfU0hJRlQpKQogCiAjZGVmaW5lIElPVk1GX0RBX0ZJWEVECQkoMSA8PCAoNCArIElPVk1GX1NXX1NISUZUKSkKLSNkZWZpbmUgSU9WTUZfREFfQU5PTgkJKDIgPDwgKDQgKyBJT1ZNRl9TV19TSElGVCkpCi0jZGVmaW5lIElPVk1GX0RBX01BU0sJCSgzIDw8ICg0ICsgSU9WTUZfU1dfU0hJRlQpKQogCiAKIGV4dGVybiBzdHJ1Y3QgaW92bV9zdHJ1Y3QgKmZpbmRfaW92bV9hcmVhKHN0cnVjdCBpb21tdSAqb2JqLCB1MzIgZGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pcnFzLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaAppbmRleCAyOTEwZGU5Li5kNzc5MjgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaApAQCAtMzE1LDkgKzMxNSwxMiBAQAogI2RlZmluZSBJTlRfMzRYWF9TU01fQUJPUlRfSVJRCTYKICNkZWZpbmUgSU5UXzM0WFhfU1lTX05JUlEJNwogI2RlZmluZSBJTlRfMzRYWF9EMkRfRldfSVJRCTgKKyNkZWZpbmUgSU5UXzM0WFhfTDNfREJHX0lSUSAgICAgOQorI2RlZmluZSBJTlRfMzRYWF9MM19BUFBfSVJRICAgICAxMAogI2RlZmluZSBJTlRfMzRYWF9QUkNNX01QVV9JUlEJMTEKICNkZWZpbmUgSU5UXzM0WFhfTUNCU1AxX0lSUQkxNgogI2RlZmluZSBJTlRfMzRYWF9NQ0JTUDJfSVJRCTE3CisjZGVmaW5lIElOVF8zNFhYX0dQTUNfSVJRCTIwCiAjZGVmaW5lIElOVF8zNFhYX01DQlNQM19JUlEJMjIKICNkZWZpbmUgSU5UXzM0WFhfTUNCU1A0X0lSUQkyMwogI2RlZmluZSBJTlRfMzRYWF9DQU1fSVJRCTI0CkBAIC00MTEsNyArNDE0LDEzIEBACiAjZGVmaW5lIFRXTF9JUlFfRU5ECQlUV0w2MDMwX0lSUV9FTkQKICNlbmRpZgogCi0jZGVmaW5lIE5SX0lSUVMJCQlUV0xfSVJRX0VORAorLyogR1BNQyByZWxhdGVkICovCisjZGVmaW5lIE9NQVBfR1BNQ19JUlFfQkFTRQkoVFdMX0lSUV9FTkQpCisjZGVmaW5lIE9NQVBfR1BNQ19OUl9JUlFTCTcKKyNkZWZpbmUgT01BUF9HUE1DX0lSUV9FTkQJKE9NQVBfR1BNQ19JUlFfQkFTRSArIE9NQVBfR1BNQ19OUl9JUlFTKQorCisKKyNkZWZpbmUgTlJfSVJRUwkJCU9NQVBfR1BNQ19JUlFfRU5ECiAKICNkZWZpbmUgT01BUF9JUlFfQklUKGlycSkJKDEgPDwgKChpcnEpICUgMzIpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2wzXzJ4eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbDNfMnh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YjU2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2wzXzJ4eHguaApAQCAtMCwwICsxLDIwIEBACisvKgorICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9sM18yeHh4LmggLSBMMyBmaXJld2FsbCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCVN1bWl0IFNlbXdhbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaWZuZGVmIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVfUExBVF9MM18yWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9QTEFUX0wzXzJYWFhfSAorCisvKiBMMyBDT05OSURzICovCisvKiBEaXNwbGF5IFN1YiBzeXN0ZW0gKERTUykgKi8KKyNkZWZpbmUgT01BUDJfTDNfQ09SRV9GV19DT05OSURfRFNTCQkJOAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbDNfM3h4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9sM18zeHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlMTkzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbDNfM3h4eC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2wzXzN4eHguaCAtIEwzIGZpcmV3YWxsIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoJU3VtaXQgU2Vtd2FsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9QTEFUX0wzXzNYWFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX1BMQVRfTDNfM1hYWF9ICisKKy8qIEwzIEluaXRpYXRvciBJRHMgKi8KKy8qIERpc3BsYXkgU3ViIHN5c3RlbSAoRFNTKSAqLworI2RlZmluZSBPTUFQM19MM19DT1JFX0ZXX0lOSVRfSURfRFNTCQkJMjkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2w0XzJ4eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbDRfMnh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzljZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2w0XzJ4eHguaApAQCAtMCwwICsxLDI0IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9sNF8yeHh4LmggLSBMNCBmaXJld2FsbCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCVN1bWl0IFNlbXdhbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaWZuZGVmIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVfUExBVF9MNF8yWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9QTEFUX0w0XzJYWFhfSAorCisvKiBMNCBDT1JFICovCisvKiBEaXNwbGF5IFN1YiBzeXN0ZW0gKERTUykgKi8KKyNkZWZpbmUgT01BUDI0MjBfTDRfQ09SRV9GV19EU1NfQ09SRV9SRUdJT04JCQkyOAorI2RlZmluZSBPTUFQMjQyMF9MNF9DT1JFX0ZXX0RTU19ESVNQQ19SRUdJT04JCQkyOQorI2RlZmluZSBPTUFQMjQyMF9MNF9DT1JFX0ZXX0RTU19SRkJJX1JFR0lPTgkJCTMwCisjZGVmaW5lIE9NQVAyNDIwX0w0X0NPUkVfRldfRFNTX1ZFTkNfUkVHSU9OCQkJMzEKKyNkZWZpbmUgT01BUDI0MjBfTDRfQ09SRV9GV19EU1NfVEFfUkVHSU9OCQkJMzIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2w0XzN4eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbDRfM3h4eC5oCmluZGV4IDVlMTk0OTMuLjg4MWE4NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbDRfM3h4eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbDRfM3h4eC5oCkBAIC0yMSw0ICsyMSwxNCBAQAogI2RlZmluZSBPTUFQM19MNF9DT1JFX0ZXX0kyQzNfUkVHSU9OCQkJCTczCiAjZGVmaW5lIE9NQVAzX0w0X0NPUkVfRldfSTJDM19UQV9SRUdJT04JCQkJNzQKIAorLyogRGlzcGxheSBTdWIgc3lzdGVtIChEU1MpICovCisjZGVmaW5lIE9NQVAzX0w0X0NPUkVfRldfRFNTX1BST1RfR1JPVVAJCQkJMgorCisjZGVmaW5lIE9NQVAzX0w0X0NPUkVfRldfRFNTX0RTSV9SRUdJT04JCQkJMTA0CisjZGVmaW5lIE9NQVAzRVMxX0w0X0NPUkVfRldfRFNTX0NPUkVfUkVHSU9OCQkJMworI2RlZmluZSBPTUFQM19MNF9DT1JFX0ZXX0RTU19DT1JFX1JFR0lPTgkJCTQKKyNkZWZpbmUgT01BUDNfTDRfQ09SRV9GV19EU1NfRElTUENfUkVHSU9OCQkJNAorI2RlZmluZSBPTUFQM19MNF9DT1JFX0ZXX0RTU19SRkJJX1JFR0lPTgkJCTUKKyNkZWZpbmUgT01BUDNfTDRfQ09SRV9GV19EU1NfVkVOQ19SRUdJT04JCQk2CisjZGVmaW5lIE9NQVAzX0w0X0NPUkVfRldfRFNTX1RBX1JFR0lPTgkJCQk3CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWNic3AuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWNic3AuaAppbmRleCBiODdkODNjLi5mOGY2OTBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21jYnNwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tY2JzcC5oCkBAIC0zNyw2ICszNywxMCBAQAogCS5pZAk9IE9NQVBfTUNCU1AjI3BvcnRfbnIsCQkJXAogfQogCisjZGVmaW5lIE1DQlNQX0NPTkZJR19UWVBFMgkweDIKKyNkZWZpbmUgTUNCU1BfQ09ORklHX1RZUEUzCTB4MworI2RlZmluZSBNQ0JTUF9DT05GSUdfVFlQRTQJMHg0CisKICNkZWZpbmUgT01BUDdYWF9NQ0JTUDFfQkFTRQkweGZmZmIxMDAwCiAjZGVmaW5lIE9NQVA3WFhfTUNCU1AyX0JBU0UJMHhmZmZiMTgwMAogCkBAIC00OCwzMiArNTIsMTQgQEAKICNkZWZpbmUgT01BUDE2MTBfTUNCU1AyX0JBU0UJMHhmZmZiMTAwMAogI2RlZmluZSBPTUFQMTYxMF9NQ0JTUDNfQkFTRQkweGUxMDE3MDAwCiAKLSNkZWZpbmUgT01BUDI0WFhfTUNCU1AxX0JBU0UJMHg0ODA3NDAwMAotI2RlZmluZSBPTUFQMjRYWF9NQ0JTUDJfQkFTRQkweDQ4MDc2MDAwCi0jZGVmaW5lIE9NQVAyNDMwX01DQlNQM19CQVNFCTB4NDgwOGMwMDAKLSNkZWZpbmUgT01BUDI0MzBfTUNCU1A0X0JBU0UJMHg0ODA4ZTAwMAotI2RlZmluZSBPTUFQMjQzMF9NQ0JTUDVfQkFTRQkweDQ4MDk2MDAwCi0KLSNkZWZpbmUgT01BUDM0WFhfTUNCU1AxX0JBU0UJMHg0ODA3NDAwMAotI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDJfQkFTRQkweDQ5MDIyMDAwCi0jZGVmaW5lIE9NQVAzNFhYX01DQlNQMl9TVF9CQVNFCTB4NDkwMjgwMDAKLSNkZWZpbmUgT01BUDM0WFhfTUNCU1AzX0JBU0UJMHg0OTAyNDAwMAotI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDNfU1RfQkFTRQkweDQ5MDJBMDAwCi0jZGVmaW5lIE9NQVAzNFhYX01DQlNQM19CQVNFCTB4NDkwMjQwMDAKLSNkZWZpbmUgT01BUDM0WFhfTUNCU1A0X0JBU0UJMHg0OTAyNjAwMAotI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDVfQkFTRQkweDQ4MDk2MDAwCi0KLSNkZWZpbmUgT01BUDQ0WFhfTUNCU1AxX0JBU0UJMHg0OTAyMjAwMAotI2RlZmluZSBPTUFQNDRYWF9NQ0JTUDJfQkFTRQkweDQ5MDI0MDAwCi0jZGVmaW5lIE9NQVA0NFhYX01DQlNQM19CQVNFCTB4NDkwMjYwMDAKLSNkZWZpbmUgT01BUDQ0WFhfTUNCU1A0X0JBU0UJMHg0ODA5NjAwMAotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIyCTB4MDAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMQkweDAyCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RYUjIJMHgwNAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EWFIxCTB4MDYKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSCTB4MDIKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFhSCTB4MDYKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1BDUjIJMHgwOAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19TUENSMQkweDBhCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDUjIJMHgwYwpAQCAtMTA2LDEzICs5Miw2IEBACiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDQ1IJMHgwMAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ0NSCTB4MDAKIAotI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBV1JJVEUJKE9NQVAxNTEwX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSMSkKLSNkZWZpbmUgQVVESU9fTUNCU1BfREFUQVJFQUQJKE9NQVAxNTEwX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSMSkKLQotI2RlZmluZSBBVURJT19NQ0JTUAkJT01BUF9NQ0JTUDEKLSNkZWZpbmUgQVVESU9fRE1BX1RYCQlPTUFQX0RNQV9NQ0JTUDFfVFgKLSNkZWZpbmUgQVVESU9fRE1BX1JYCQlPTUFQX0RNQV9NQ0JTUDFfUlgKLQogI2Vsc2UKIAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIyCTB4MDAKQEAgLTE2OCwxMyArMTQ3LDYgQEAKICNkZWZpbmUgT01BUF9TVF9SRUdfU0ZJUkNSCTB4MjgKICNkZWZpbmUgT01BUF9TVF9SRUdfU1NFTENSCTB4MkMKIAotI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBV1JJVEUJKE9NQVAyNFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSMSkKLSNkZWZpbmUgQVVESU9fTUNCU1BfREFUQVJFQUQJKE9NQVAyNFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSMSkKLQotI2RlZmluZSBBVURJT19NQ0JTUAkJT01BUF9NQ0JTUDIKLSNkZWZpbmUgQVVESU9fRE1BX1RYCQlPTUFQMjRYWF9ETUFfTUNCU1AyX1RYCi0jZGVmaW5lIEFVRElPX0RNQV9SWAkJT01BUDI0WFhfRE1BX01DQlNQMl9SWAotCiAjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNQQ1IxIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQyOCw4ICs0MDAsOSBAQAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiAJLyogU2lkZXRvbmUgYmxvY2sgZm9yIE1jQlNQIDIgYW5kIDMgKi8KIAl1bnNpZ25lZCBsb25nIHBoeXNfYmFzZV9zdDsKLQl1MTYgYnVmZmVyX3NpemU7CiAjZW5kaWYKKwl1MTYgYnVmZmVyX3NpemU7CisJdW5zaWduZWQgaW50IG1jYnNwX2NvbmZpZ190eXBlOwogfTsKIAogc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSB7CkBAIC00NDUsNiArNDE4LDcgQEAKIHN0cnVjdCBvbWFwX21jYnNwIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBwaHlzX2RtYV9iYXNlOwogCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAl1OCBpZDsKIAl1OCBmcmVlOwpAQCAtNDcxLDcgKzQ0NSw2IEBACiAJLyogUHJvdGVjdCB0aGUgZmllbGQgLmZyZWUsIHdoaWxlIGNoZWNraW5nIGlmIHRoZSBtY2JzcCBpcyBpbiB1c2UgKi8KIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IGNsayAqaWNsazsKIAlzdHJ1Y3QgY2xrICpmY2xrOwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiAJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YTsKQEAgLTQ4MCw3ICs0NTMsMTcgQEAKIAl1MTYgbWF4X3J4X3RocmVzOwogI2VuZGlmCiAJdm9pZCAqcmVnX2NhY2hlOworCXVuc2lnbmVkIGludCBtY2JzcF9jb25maWdfdHlwZTsKIH07CisKKy8qKgorICogb21hcF9tY2JzcF9kZXZfYXR0ciAtIE9NQVAgTWNCU1AgZGV2aWNlIGF0dHJpYnV0ZXMgZm9yIG9tYXBfaHdtb2QKKyAqIEBzaWRldG9uZTogbmFtZSBvZiB0aGUgc2lkZXRvbmUgZGV2aWNlCisgKi8KK3N0cnVjdCBvbWFwX21jYnNwX2Rldl9hdHRyIHsKKwljb25zdCBjaGFyICpzaWRldG9uZTsKK307CisKIGV4dGVybiBzdHJ1Y3Qgb21hcF9tY2JzcCAqKm1jYnNwX3B0cjsKIGV4dGVybiBpbnQgb21hcF9tY2JzcF9jb3VudCwgb21hcF9tY2JzcF9jYWNoZV9zaXplOwogCkBAIC00ODgsOCArNDcxLDggQEAKICNkZWZpbmUgaWRfdG9fbWNic3BfcHRyKGlkKQkJbWNic3BfcHRyW2lkXTsKIAogaW50IG9tYXBfbWNic3BfaW5pdCh2b2lkKTsKLXZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqY29uZmlnLAotCQkJCQlpbnQgc2l6ZSk7Cit2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LAorCQkJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqY29uZmlnLCBpbnQgc2l6ZSk7CiB2b2lkIG9tYXBfbWNic3BfY29uZmlnKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqIGNvbmZpZyk7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIHZvaWQgb21hcF9tY2JzcF9zZXRfdHhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCwgdTE2IHRocmVzaG9sZCk7CkBAIC01MzksNiArNTIyLDkgQEAKIHZvaWQgb21hcDJfbWNic3AxX211eF9jbGtyX3NyYyh1OCBtdXgpOwogdm9pZCBvbWFwMl9tY2JzcDFfbXV4X2Zzcl9zcmModTggbXV4KTsKIAoraW50IG9tYXBfbWNic3BfZG1hX2NoX3BhcmFtcyh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBzdHJlYW0pOworaW50IG9tYXBfbWNic3BfZG1hX3JlZ19wYXJhbXModW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgc3RyZWFtKTsKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiAvKiBTaWRldG9uZSBzcGVjaWZpYyBBUEkgKi8KIGludCBvbWFwX3N0X3NldF9jaGdhaW4odW5zaWduZWQgaW50IGlkLCBpbnQgY2hhbm5lbCwgczE2IGNoZ2Fpbik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21jc3BpLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21jc3BpLmgKaW5kZXggMTI1NGU0OS4uM2Q1MWIxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tY3NwaS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWNzcGkuaApAQCAtMSw4ICsxLDE5IEBACiAjaWZuZGVmIF9PTUFQMl9NQ1NQSV9ICiAjZGVmaW5lIF9PTUFQMl9NQ1NQSV9ICiAKKyNkZWZpbmUgT01BUDJfTUNTUElfUkVWIDAKKyNkZWZpbmUgT01BUDNfTUNTUElfUkVWIDEKKyNkZWZpbmUgT01BUDRfTUNTUElfUkVWIDIKKworI2RlZmluZSBPTUFQNF9NQ1NQSV9SRUdfT0ZGU0VUIDB4MTAwCisKIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgewogCXVuc2lnbmVkIHNob3J0CW51bV9jczsKKwl1bnNpZ25lZCBpbnQgcmVnc19vZmZzZXQ7Cit9OworCitzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2X2F0dHIgeworCXVuc2lnbmVkIHNob3J0IG51bV9jaGlwc2VsZWN0OwogfTsKIAogc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKaW5kZXggZjU3ZjM2YS4uZjM4ZmVmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCkBAIC0yNCwyNSArMjQsMTkgQEAKICNkZWZpbmUgT01BUDFfTU1DMl9CQVNFCQkweGZmZmI3YzAwCS8qIG9tYXAxNnh4IG9ubHkgKi8KIAogI2RlZmluZSBPTUFQMjRYWF9OUl9NTUMJCTIKLSNkZWZpbmUgT01BUDM0WFhfTlJfTU1DCQkzCi0jZGVmaW5lIE9NQVA0NFhYX05SX01NQwkJNQogI2RlZmluZSBPTUFQMjQyMF9NTUNfU0laRQlPTUFQMV9NTUNfU0laRQotI2RlZmluZSBPTUFQM19IU01NQ19TSVpFCTB4MjAwCi0jZGVmaW5lIE9NQVA0X0hTTU1DX1NJWkUJMHgxMDAwCiAjZGVmaW5lIE9NQVAyX01NQzFfQkFTRQkJMHg0ODA5YzAwMAotI2RlZmluZSBPTUFQMl9NTUMyX0JBU0UJCTB4NDgwYjQwMDAKLSNkZWZpbmUgT01BUDNfTU1DM19CQVNFCQkweDQ4MGFkMDAwCi0jZGVmaW5lIE9NQVA0X01NQzRfQkFTRQkJMHg0ODBkMTAwMAotI2RlZmluZSBPTUFQNF9NTUM1X0JBU0UJCTB4NDgwZDUwMDAKKwogI2RlZmluZSBPTUFQNF9NTUNfUkVHX09GRlNFVAkweDEwMAotI2RlZmluZSBIU01NQzUJCQkoMSA8PCA0KQotI2RlZmluZSBIU01NQzQJCQkoMSA8PCAzKQotI2RlZmluZSBIU01NQzMJCQkoMSA8PCAyKQotI2RlZmluZSBIU01NQzIJCQkoMSA8PCAxKQotI2RlZmluZSBIU01NQzEJCQkoMSA8PCAwKQogCiAjZGVmaW5lIE9NQVBfTU1DX01BWF9TTE9UUwkyCiAKKyNkZWZpbmUgT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQJQklUKDEpCisKK3N0cnVjdCBvbWFwX21tY19kZXZfYXR0ciB7CisJdTggZmxhZ3M7Cit9OworCiBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSB7CiAJLyogYmFjay1saW5rIHRvIGRldmljZSAqLwogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTcxLDYgKzY1LDkgQEAKIAogCXU2NCBkbWFfbWFzazsKIAorCS8qIEludGVncmF0aW5nIGF0dHJpYnV0ZXMgZnJvbSB0aGUgb21hcF9od21vZCBsYXllciAqLworCXU4IGNvbnRyb2xsZXJfZmxhZ3M7CisKIAkvKiBSZWdpc3RlciBvZmZzZXQgZGV2aWF0aW9uICovCiAJdTE2IHJlZ19vZmZzZXQ7CiAKQEAgLTE1OSw4ICsxNTYsNyBAQAogCWRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IU19NT0RVTEUpCiB2b2lkIG9tYXAxX2luaXRfbW1jKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICoqbW1jX2RhdGEsCiAJCQkJaW50IG5yX2NvbnRyb2xsZXJzKTsKLXZvaWQgb21hcDJfaW5pdF9tbWMoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKiptbWNfZGF0YSwKLQkJCQlpbnQgbnJfY29udHJvbGxlcnMpOwordm9pZCBvbWFwMjQyeF9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhKTsKIGludCBvbWFwX21tY19hZGQoY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLCB1bnNpZ25lZCBsb25nIGJhc2UsCiAJCQkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgaXJxLAogCQkJCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpkYXRhKTsKQEAgLTE2OSw4ICsxNjUsNyBAQAogCQkJCWludCBucl9jb250cm9sbGVycykKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhLAotCQkJCWludCBucl9jb250cm9sbGVycykKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMjQyeF9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhKQogewogfQogc3RhdGljIGlubGluZSBpbnQgb21hcF9tbWNfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCwgdW5zaWduZWQgbG9uZyBiYXNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdWx0aS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdWx0aS5oCmluZGV4IGZmZDkwOWYuLjk5OWZmYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbXVsdGkuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211bHRpLmgKQEAgLTY2LDcgKzY2LDcgQEAKICMgIGVycm9yICJPTUFQMSBhbmQgT01BUDJQTFVTIGNhbid0IGJlIHNlbGVjdGVkIGF0IHRoZSBzYW1lIHRpbWUiCiAjIGVuZGlmCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAorI2lmZGVmIENPTkZJR19TT0NfT01BUDI0MjAKICMgaWZkZWYgT01BUF9OQU1FCiAjICB1bmRlZiAgTVVMVElfT01BUDIKICMgIGRlZmluZSBNVUxUSV9PTUFQMgpAQCAtNzQsNyArNzQsNyBAQAogIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMjQyMAogIyBlbmRpZgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKyNpZmRlZiBDT05GSUdfU09DX09NQVAyNDMwCiAjIGlmZGVmIE9NQVBfTkFNRQogIyAgdW5kZWYgIE1VTFRJX09NQVAyCiAjICBkZWZpbmUgTVVMVElfT01BUDIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKaW5kZXggNjU2MmNkMC4uZDg2ZDFlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKQEAgLTgsOCArOCwxNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKK2VudW0gbmFuZF9pbyB7CisJTkFORF9PTUFQX1BSRUZFVENIX1BPTExFRCA9IDAsCS8qIHByZWZldGNoIHBvbGxlZCBtb2RlLCBkZWZhdWx0ICovCisJTkFORF9PTUFQX1BPTExFRCwJCS8qIHBvbGxlZCBtb2RlLCB3aXRob3V0IHByZWZldGNoICovCisJTkFORF9PTUFQX1BSRUZFVENIX0RNQSwJCS8qIHByZWZldGNoIGVuYWJsZWQgc0RNQSBtb2RlICovCisJTkFORF9PTUFQX1BSRUZFVENIX0lSUQkJLyogcHJlZmV0Y2ggZW5hYmxlZCBpcnEgbW9kZSAqLworfTsKKwogc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJCW9wdGlvbnM7CiAJaW50CQkJY3M7CkBAIC0yMCw4ICsyOCwxMSBAQAogCWludAkJCSgqbmFuZF9zZXR1cCkodm9pZCk7CiAJaW50CQkJKCpkZXZfcmVhZHkpKHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqKTsKIAlpbnQJCQlkbWFfY2hhbm5lbDsKKwlpbnQJCQlncG1jX2lycTsKKwllbnVtIG5hbmRfaW8JCXhmZXJfdHlwZTsKIAl1bnNpZ25lZCBsb25nCQlwaHlzX2Jhc2U7CiAJaW50CQkJZGV2c2l6ZTsKKwllbnVtIG9tYXBfZWNjICAgICAgICAgICBlY2Nfb3B0OwogfTsKIAogLyogbWluaW11bSBzaXplIGZvciBJTyBtYXBwaW5nICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCmluZGV4IDFlZWU4NWEuLjFhZGVhOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG9tYXBfaHdtb2QgbWFjcm9zLCBzdHJ1Y3R1cmVzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIE5va2lhIENvcnBvcmF0aW9uCiAgKiBQYXVsIFdhbG1zbGV5CiAgKgogICogQ3JlYXRlZCBpbiBjb2xsYWJvcmF0aW9uIHdpdGggKGFscGhhYmV0aWNhbCBvcmRlcik6IEJlbm/DrnQgQ291c3NvbiwKQEAgLTMwLDExICszMCwxMSBAQAogI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX01BQ0hfT01BUF9IV01PRF9ICiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxwbGF0L3ZvbHRhZ2UuaD4KIAogc3RydWN0IG9tYXBfZGV2aWNlOwogCkBAIC05MCw2ICs5MCw5IEBACiBzdHJ1Y3Qgb21hcF9od21vZF9tdXhfaW5mbyB7CiAJaW50CQkJCW5yX3BhZHM7CiAJc3RydWN0IG9tYXBfZGV2aWNlX3BhZAkJKnBhZHM7CisJaW50CQkJCW5yX3BhZHNfZHluYW1pYzsKKwlzdHJ1Y3Qgb21hcF9kZXZpY2VfcGFkCQkqKnBhZHNfZHluYW1pYzsKKwlib29sCQkJCWVuYWJsZWQ7CiB9OwogCiAvKioKQEAgLTEyNCw2ICsxMjcsNyBAQAogICogc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gLSBJUHMgcmVzZXQgbGluZXMgdXNlIGJ5IGh3bW9kCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgcmVzZXQgbGluZSAobW9kdWxlIGxvY2FsIG5hbWUpCiAgKiBAcnN0X3NoaWZ0OiBPZmZzZXQgb2YgdGhlIHJlc2V0IGJpdAorICogQHN0X3NoaWZ0OiBPZmZzZXQgb2YgdGhlIHJlc2V0IHN0YXR1cyBiaXQgKE9NQVAyLzMgb25seSkKICAqCiAgKiBAbmFtZSBzaG91bGQgYmUgc29tZXRoaW5nIHNob3J0LCBlLmcuLCAiY3B1MCIgb3IgInJzdCIuIEl0IGlzIGRlZmluZWQKICAqIGxvY2FsbHkgdG8gdGhlIGh3bW9kLgpAQCAtMTMxLDYgKzEzNSw3IEBACiBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyB7CiAJY29uc3QgY2hhcgkqbmFtZTsKIAl1OAkJcnN0X3NoaWZ0OworCXU4CQlzdF9zaGlmdDsKIH07CiAKIC8qKgpAQCAtMTc4LDcgKzE4Myw4IEBACiAjZGVmaW5lIEFERFJfVFlQRV9SVAkJKDEgPDwgMSkKIAogLyoqCi0gKiBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIC0gTVBVIGFkZHJlc3Mgc3BhY2UgaGFuZGxlZCBieSB0aGUgaHdtb2QKKyAqIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2UgLSBhZGRyZXNzIHNwYWNlIGhhbmRsZWQgYnkgdGhlIGh3bW9kCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgYWRkcmVzcyBzcGFjZQogICogQHBhX3N0YXJ0OiBzdGFydGluZyBwaHlzaWNhbCBhZGRyZXNzCiAgKiBAcGFfZW5kOiBlbmRpbmcgcGh5c2ljYWwgYWRkcmVzcwogICogQGZsYWdzOiAoc2VlIG9tYXBfaHdtb2RfYWRkcl9zcGFjZS5mbGFncyBtYWNyb3MgYWJvdmUpCkBAIC0xODcsNiArMTkzLDcgQEAKICAqIHN0cnVjdHVyZS4gIEdQTUMgaXMgb25lIGV4YW1wbGUuCiAgKi8KIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2UgeworCWNvbnN0IGNoYXIgKm5hbWU7CiAJdTMyIHBhX3N0YXJ0OwogCXUzMiBwYV9lbmQ7CiAJdTggZmxhZ3M7CkBAIC0zNzAsOSArMzc3LDExIEBACiAgKiAgICAgb2Ygc3RhbmRieSwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBtb2R1bGUgc21hcnQtc3RhbmRieQogICogSFdNT0RfSU5JVF9OT19SRVNFVDogZG9uJ3QgcmVzZXQgdGhpcyBtb2R1bGUgYXQgYm9vdCAtIGltcG9ydGFudCBmb3IKICAqICAgICBTRFJBTSBjb250cm9sbGVyLCBldGMuIFhYWCBwcm9iYWJseSBiZWxvbmdzIG91dHNpZGUgdGhlIG1haW4gaHdtb2QgZmlsZQorICogICAgIFhYWCBTaG91bGQgYmUgSFdNT0RfU0VUVVBfTk9fUkVTRVQKICAqIEhXTU9EX0lOSVRfTk9fSURMRTogZG9uJ3QgaWRsZSB0aGlzIG1vZHVsZSBhdCBib290IC0gaW1wb3J0YW50IGZvciBTRFJBTQogICogICAgIGNvbnRyb2xsZXIsIGV0Yy4gWFhYIHByb2JhYmx5IGJlbG9uZ3Mgb3V0c2lkZSB0aGUgbWFpbiBod21vZCBmaWxlCi0gKiBIV01PRF9OT19BVVRPSURMRTogZGlzYWJsZSBtb2R1bGUgYXV0b2lkbGUgKE9DUF9TWVNDT05GSUcuQVVUT0lETEUpCisgKiAgICAgWFhYIFNob3VsZCBiZSBIV01PRF9TRVRVUF9OT19JRExFCisgKiBIV01PRF9OT19PQ1BfQVVUT0lETEU6IGRpc2FibGUgbW9kdWxlIGF1dG9pZGxlIChPQ1BfU1lTQ09ORklHLkFVVE9JRExFKQogICogICAgIHdoZW4gbW9kdWxlIGlzIGVuYWJsZWQsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0LCB3aGljaCBpcyB0bwogICogICAgIGVuYWJsZSBhdXRvaWRsZQogICogSFdNT0RfU0VUX0RFRkFVTFRfQ0xPQ0tBQ1Q6IHByb2dyYW0gQ0xPQ0tBQ1RJVklUWSBiaXRzIGF0IHN0YXJ0dXAKQEAgLTUzNSwxMSArNTQ0LDEyIEBACiAJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZAlvbWFwX2NoaXA7CiB9OwogCi1pbnQgb21hcF9od21vZF9pbml0KHN0cnVjdCBvbWFwX2h3bW9kICoqb2hzKTsKK2ludCBvbWFwX2h3bW9kX3JlZ2lzdGVyKHN0cnVjdCBvbWFwX2h3bW9kICoqb2hzKTsKIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwX2h3bW9kX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKIGludCBvbWFwX2h3bW9kX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHZvaWQgKmRhdGEpLAogCQkJdm9pZCAqZGF0YSk7Ci1pbnQgb21hcF9od21vZF9sYXRlX2luaXQodm9pZCk7CisKK2ludCBfX2luaXQgb21hcF9od21vZF9zZXR1cF9vbmUoY29uc3QgY2hhciAqbmFtZSk7CiAKIGludCBvbWFwX2h3bW9kX2VuYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogaW50IF9vbWFwX2h3bW9kX2VuYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwpAQCAtNTU1LDYgKzU2NSw3IEBACiBpbnQgb21hcF9od21vZF9kaXNhYmxlX2Nsb2NrcyhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogCiBpbnQgb21hcF9od21vZF9zZXRfc2xhdmVfaWRsZW1vZGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBpZGxlbW9kZSk7CitpbnQgb21hcF9od21vZF9zZXRfb2NwX2F1dG9pZGxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTggYXV0b2lkbGUpOwogCiBpbnQgb21hcF9od21vZF9yZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogdm9pZCBvbWFwX2h3bW9kX29jcF9iYXJyaWVyKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CkBAIC01ODksNiArNjAwLDggQEAKIGludCBvbWFwX2h3bW9kX3NldF9wb3N0c2V0dXBfc3RhdGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBzdGF0ZSk7CiB1MzIgb21hcF9od21vZF9nZXRfY29udGV4dF9sb3NzX2NvdW50KHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiAKK2ludCBvbWFwX2h3bW9kX25vX3NldHVwX3Jlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CisKIC8qCiAgKiBDaGlwIHZhcmlhbnQtc3BlY2lmaWMgaHdtb2QgaW5pdCByb3V0aW5lcyAtIFhYWCBzaG91bGQgYmUgY29udmVydGVkCiAgKiB0byB1c2UgaW5pdGNhbGxzIG9uY2UgdGhlIGluaXRpYWwgYm9vdCBvcmRlcmluZyBpcyBzdHJhaWdodGVuZWQgb3V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29uZW5hbmQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb25lbmFuZC5oCmluZGV4IGFmZmU4N2UuLmNiZTg5N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb25lbmFuZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb25lbmFuZC5oCkBAIC0xNSwxMiArMTUsMjAgQEAKICNkZWZpbmUgT05FTkFORF9TWU5DX1JFQUQJKDEgPDwgMCkKICNkZWZpbmUgT05FTkFORF9TWU5DX1JFQURXUklURQkoMSA8PCAxKQogCitzdHJ1Y3Qgb25lbmFuZF9mcmVxX2luZm8geworCXUxNgkJCW1hZl9pZDsKKwl1MTYJCQlkZXZfaWQ7CisJdTE2CQkJdmVyX2lkOworfTsKKwogc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQJCQljczsKIAlpbnQJCQlncGlvX2lycTsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CiAJaW50CQkJbnJfcGFydHM7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgKCpvbmVuYW5kX3NldHVwKSh2b2lkIF9faW9tZW0gKiwgaW50IGZyZXEpOworCWludAkJCSgqb25lbmFuZF9zZXR1cCkodm9pZCBfX2lvbWVtICosIGludCAqZnJlcV9wdHIpOworCWludAkJKCpnZXRfZnJlcSkoY29uc3Qgc3RydWN0IG9uZW5hbmRfZnJlcV9pbmZvICpmcmVxX2luZm8sCisJCQkJICAgIGJvb2wgKmNsa19kZXApOwogCWludAkJCWRtYV9jaGFubmVsOwogCXU4CQkJZmxhZ3M7CiAJdTgJCQlyZWd1bGF0b3JfY2FuX3NsZWVwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wcmNtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ByY20uaAppbmRleCAyZmRmOGM4Li4yNjdmNDNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ByY20uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ByY20uaApAQCAtMjgsNyArMjgsNiBAQAogI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9PTUFQX1BSQ01fSAogCiB1MzIgb21hcF9wcmNtX2dldF9yZXNldF9zb3VyY2VzKHZvaWQpOwotdm9pZCBvbWFwX3ByY21fYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCk7CiBpbnQgb21hcDJfY21fd2FpdF9pZGxlc3Qodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1OCBpZGxlc3QsCiAJCQkgY29uc3QgY2hhciAqbmFtZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc2RyYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZHJjLmgKaW5kZXggZWZkODdjOC4uOTI1YjEyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZHJjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZHJjLmgKQEAgLTEyNCw4ICsxMjQsMTQgQEAKIAl1MzIgbXI7CiB9OwogCi12b2lkIF9faW5pdCBvbWFwMl9zZHJjX2luaXQoc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MwLAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCit2b2lkIG9tYXAyX3NkcmNfaW5pdChzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczAsCiAJCQkgICAgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG9tYXAyX3NkcmNfaW5pdChzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczAsCisJCQkJCSAgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxKSB7fTsKKyNlbmRpZgorCiBpbnQgb21hcDJfc2RyY19nZXRfcGFyYW1zKHVuc2lnbmVkIGxvbmcgciwKIAkJCSAgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKipzZHJjX2NzMCwKIAkJCSAgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKipzZHJjX2NzMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZXJpYWwuaAppbmRleCA4ZmY2MDVjLi4yNzIzZjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc2VyaWFsLmgKQEAgLTUxLDYgKzUxLDExIEBACiAjZGVmaW5lIE9NQVA0X1VBUlQzX0JBU0UJMHg0ODAyMDAwMAogI2RlZmluZSBPTUFQNF9VQVJUNF9CQVNFCTB4NDgwNmUwMDAKIAorLyogVEk4MTZYIHNlcmlhbCBwb3J0cyAqLworI2RlZmluZSBUSTgxNlhfVUFSVDFfQkFTRQkweDQ4MDIwMDAwCisjZGVmaW5lIFRJODE2WF9VQVJUMl9CQVNFCTB4NDgwMjIwMDAKKyNkZWZpbmUgVEk4MTZYX1VBUlQzX0JBU0UJMHg0ODAyNDAwMAorCiAvKiBFeHRlcm5hbCBwb3J0IG9uIFpvb20yLzMgKi8KICNkZWZpbmUgWk9PTV9VQVJUX0JBU0UJCTB4MTAwMDAwMDAKICNkZWZpbmUgWk9PTV9VQVJUX1ZJUlQJCTB4ZmE0MDAwMDAKQEAgLTgxLDYgKzg2LDkgQEAKICNkZWZpbmUgT01BUDRVQVJUMgkJT01BUDJVQVJUMgogI2RlZmluZSBPTUFQNFVBUlQzCQk0MwogI2RlZmluZSBPTUFQNFVBUlQ0CQk0NAorI2RlZmluZSBUSTgxNlhVQVJUMQkJODEKKyNkZWZpbmUgVEk4MTZYVUFSVDIJCTgyCisjZGVmaW5lIFRJODE2WFVBUlQzCQk4MwogI2RlZmluZSBaT09NX1VBUlQJCTk1CQkvKiBPbmx5IG9uIHpvb20yLzMgKi8KIAogLyogVGhpcyBpcyBvbmx5IHVzZWQgYnkgODI1MC5jIGZvciBvbWFwMTUxMCAqLwpAQCAtOTYsNyArMTA0LDYgQEAKIAogc3RydWN0IG9tYXBfYm9hcmRfZGF0YTsKIAotZXh0ZXJuIHZvaWQgX19pbml0IG9tYXBfc2VyaWFsX2Vhcmx5X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdF9wb3J0KHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgKmJkYXRhKTsKIGV4dGVybiBpbnQgb21hcF91YXJ0X2Nhbl9zbGVlcCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3N5c3RlbS5oCmluZGV4IGQwYTExOWYuLmM1ZmE5ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zeXN0ZW0uaApAQCAtNCw0OCArNCwxNCBAQAogICovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3ByY20uaD4KLQotI2lmbmRlZiBDT05GSUdfTUFDSF9WT0lDRUJMVUUKLSNkZWZpbmUgdm9pY2VibHVlX3Jlc2V0KCkJCWRvIHt9IHdoaWxlICgwKQotI2Vsc2UKLWV4dGVybiB2b2lkIHZvaWNlYmx1ZV9yZXNldCh2b2lkKTsKLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9tYXAxX2FyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCi17Ci0JLyoKLQkgKiBXb3JrYXJvdW5kIGZvciA1OTEyLzE2MTFiIGJ1ZyBtZW50aW9uZWQgaW4gc3ByejIwOWQucGRmIHAuIDI4Ci0JICogIkdsb2JhbCBTb2Z0d2FyZSBSZXNldCBBZmZlY3RzIFRyYWZmaWMgQ29udHJvbGxlciBGcmVxdWVuY3kiLgotCSAqLwotCWlmIChjcHVfaXNfb21hcDU5MTIoKSkgewotCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KERQTExfQ1RMKSAmIH4oMSA8PCA0KSwKLQkJCQkgRFBMTF9DVEwpOwotCQlvbWFwX3dyaXRldygweDgsIEFSTV9SU1RDVDEpOwotCX0KLQotCWlmIChtYWNoaW5lX2lzX3ZvaWNlYmx1ZSgpKQotCQl2b2ljZWJsdWVfcmVzZXQoKTsKLQllbHNlCi0JCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlpZiAoIWNwdV9jbGFzc19pc19vbWFwMigpKQotCQlvbWFwMV9hcmNoX3Jlc2V0KG1vZGUsIGNtZCk7Ci0JZWxzZQotCQlvbWFwX3ByY21fYXJjaF9yZXNldChtb2RlLCBjbWQpOwotfQorZXh0ZXJuIHZvaWQgKCphcmNoX3Jlc2V0KShjaGFyLCBjb25zdCBjaGFyICopOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdGk4MTZ4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3RpODE2eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNTEwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3RpODE2eC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGFkZHJlc3MgZGF0YSBmb3IgdmFyaW91cyBUSTgxNlggbW9kdWxlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4gLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVEk4MTZYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USTgxNlhfSAorCisjZGVmaW5lIEw0X1NMT1dfVEk4MTZYX0JBU0UJMHg0ODAwMDAwMAorCisjZGVmaW5lIFRJODE2WF9TQ01fQkFTRQkJMHg0ODE0MDAwMAorI2RlZmluZSBUSTgxNlhfQ1RSTF9CQVNFCVRJODE2WF9TQ01fQkFTRQorI2RlZmluZSBUSTgxNlhfUFJDTV9CQVNFCTB4NDgxODAwMDAKKworI2RlZmluZSBUSTgxNlhfQVJNX0lOVENfQkFTRQkweDQ4MjAwMDAwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJODE2WF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCmluZGV4IGFkOThiODUuLjMwYjg5MWM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaApAQCAtOTMsNiArOTMsMTAgQEAKICNkZWZpbmUgREVCVUdfTExfWk9PTShtYWNoKQkJCQkJCVwKIAlfREVCVUdfTExfRU5UUlkobWFjaCwgWk9PTV9VQVJUX0JBU0UsIFpPT01fUE9SVF9TSElGVCwgWk9PTV9VQVJUKQogCisjZGVmaW5lIERFQlVHX0xMX1RJODE2WChwLCBtYWNoKQkJCQkJXAorCV9ERUJVR19MTF9FTlRSWShtYWNoLCBUSTgxNlhfVUFSVCMjcCMjX0JBU0UsIE9NQVBfUE9SVF9TSElGVCwJXAorCQlUSTgxNlhVQVJUIyNwKQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX19hcmNoX2RlY29tcF9zZXR1cCh1bnNpZ25lZCBsb25nIGFyY2hfaWQpCiB7CiAJaW50IHBvcnQgPSAwOwpAQCAtMTY2LDYgKzE3MCw5IEBACiAJCURFQlVHX0xMX1pPT00ob21hcF96b29tMik7CiAJCURFQlVHX0xMX1pPT00ob21hcF96b29tMyk7CiAKKwkJLyogVEk4MTY4IGJhc2UgYm9hcmRzIHVzaW5nIFVBUlQzICovCisJCURFQlVHX0xMX1RJODE2WCgzLCB0aTgxNjhldm0pOworCiAJfSB3aGlsZSAoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdXNiLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VzYi5oCmluZGV4IGZlNDQ5ZjEuLjAyYjk2YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdXNiLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91c2IuaApAQCAtMTEwLDYgKzExMCwxMSBAQAogZXh0ZXJuIGludCBvbWFwNDQzMF9waHlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdXNwZW5kKTsKICNlbmRpZgogCitleHRlcm4gdm9pZCBhbTM1eF9tdXNiX3Jlc2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgYW0zNXhfbXVzYl9waHlfcG93ZXIodTggb24pOworZXh0ZXJuIHZvaWQgYW0zNXhfbXVzYl9jbGVhcl9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBhbTM1eF9tdXNiX3NldF9tb2RlKHU4IG11c2JfbW9kZSk7CisKIC8qCiAgKiBGSVhNRSBjb3JyZWN0IGFuc3dlciBkZXBlbmRzIG9uIGhtY19tb2RlLAogICogYXMgZG9lcyAob24gb21hcDEpIGFueSBub256ZXJvIHZhbHVlIGZvciBjb25maWctPm90ZyBwb3J0IG51bWJlcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwppbmRleCBmMTI5NWZhLi5mMWVjZmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwpAQCAtODUsNyArODUsMTAgQEAKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCWlmIChjcHVfaXNfdGk4MTZ4KCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfMzRYWF9QSFlTLCBMNF8zNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEw0XzM0WFhfUEhZUywgTDRfMzRYWF9WSVJUKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCWlmIChCRVRXRUVOKHAsIEwzXzM0WFhfUEhZUywgTDNfMzRYWF9TSVpFKSkKIAkJCXJldHVybiBYTEFURShwLCBMM18zNFhYX1BIWVMsIEwzXzM0WFhfVklSVCk7CiAJCWlmIChCRVRXRUVOKHAsIEw0XzM0WFhfUEhZUywgTDRfMzRYWF9TSVpFKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggYjExMDdjMC4uOGE1MWZkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTEwNCw2ICsxMDQsOSBAQAogCWlmICghb2JqKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghYXJjaF9pb21tdSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAljbGtfZW5hYmxlKG9iai0+Y2xrKTsKIAogCWVyciA9IGFyY2hfaW9tbXUtPmVuYWJsZShvYmopOwpAQCAtNzgwLDI1ICs3ODMsMTkgQEAKICAqLwogc3RhdGljIGlycXJldHVybl90IGlvbW11X2ZhdWx0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQl1MzIgc3RhdCwgZGE7CisJdTMyIGRhLCBlcnJzOwogCXUzMiAqaW9wZ2QsICppb3B0ZTsKLQlpbnQgZXJyID0gLUVJTzsKIAlzdHJ1Y3QgaW9tbXUgKm9iaiA9IGRhdGE7CiAKIAlpZiAoIW9iai0+cmVmY291bnQpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCS8qIER5bmFtaWMgbG9hZGluZyBUTEIgb3IgUFRFICovCi0JaWYgKG9iai0+aXNyKQotCQllcnIgPSBvYmotPmlzcihvYmopOwotCi0JaWYgKCFlcnIpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQogCWNsa19lbmFibGUob2JqLT5jbGspOwotCXN0YXQgPSBpb21tdV9yZXBvcnRfZmF1bHQob2JqLCAmZGEpOworCWVycnMgPSBpb21tdV9yZXBvcnRfZmF1bHQob2JqLCAmZGEpOwogCWNsa19kaXNhYmxlKG9iai0+Y2xrKTsKLQlpZiAoIXN0YXQpCisKKwkvKiBGYXVsdCBjYWxsYmFjayBvciBUTEIvUFRFIER5bmFtaWMgbG9hZGluZyAqLworCWlmIChvYmotPmlzciAmJiAhb2JqLT5pc3Iob2JqLCBkYSwgZXJycywgb2JqLT5pc3JfcHJpdikpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAogCWlvbW11X2Rpc2FibGUob2JqKTsKQEAgLTgwNiwxNSArODAzLDE2IEBACiAJaW9wZ2QgPSBpb3BnZF9vZmZzZXQob2JqLCBkYSk7CiAKIAlpZiAoIWlvcGdkX2lzX3RhYmxlKCppb3BnZCkpIHsKLQkJZGV2X2VycihvYmotPmRldiwgIiVzOiBkYTolMDh4IHBnZDolcCAqcGdkOiUwOHhcbiIsIF9fZnVuY19fLAotCQkJZGEsIGlvcGdkLCAqaW9wZ2QpOworCQlkZXZfZXJyKG9iai0+ZGV2LCAiJXM6IGVycnM6MHglMDh4IGRhOjB4JTA4eCBwZ2Q6MHglcCAiCisJCQkiKnBnZDpweCUwOHhcbiIsIG9iai0+bmFtZSwgZXJycywgZGEsIGlvcGdkLCAqaW9wZ2QpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCiAJaW9wdGUgPSBpb3B0ZV9vZmZzZXQoaW9wZ2QsIGRhKTsKIAotCWRldl9lcnIob2JqLT5kZXYsICIlczogZGE6JTA4eCBwZ2Q6JXAgKnBnZDolMDh4IHB0ZTolcCAqcHRlOiUwOHhcbiIsCi0JCV9fZnVuY19fLCBkYSwgaW9wZ2QsICppb3BnZCwgaW9wdGUsICppb3B0ZSk7CisJZGV2X2VycihvYmotPmRldiwgIiVzOiBlcnJzOjB4JTA4eCBkYToweCUwOHggcGdkOjB4JXAgKnBnZDoweCUwOHggIgorCQkicHRlOjB4JXAgKnB0ZToweCUwOHhcbiIsIG9iai0+bmFtZSwgZXJycywgZGEsIGlvcGdkLCAqaW9wZ2QsCisJCWlvcHRlLCAqaW9wdGUpOwogCiAJcmV0dXJuIElSUV9OT05FOwogfQpAQCAtOTE3LDYgKzkxNSwzMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tbXVfcHV0KTsKIAoraW50IGlvbW11X3NldF9pc3IoY29uc3QgY2hhciAqbmFtZSwKKwkJICBpbnQgKCppc3IpKHN0cnVjdCBpb21tdSAqb2JqLCB1MzIgZGEsIHUzMiBpb21tdV9lcnJzLAorCQkJICAgICB2b2lkICpwcml2KSwKKwkJICB2b2lkICppc3JfcHJpdikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGlvbW11ICpvYmo7CisKKwlkZXYgPSBkcml2ZXJfZmluZF9kZXZpY2UoJm9tYXBfaW9tbXVfZHJpdmVyLmRyaXZlciwgTlVMTCwgKHZvaWQgKiluYW1lLAorCQkJCSBkZXZpY2VfbWF0Y2hfYnlfYWxpYXMpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IHRvX2lvbW11KGRldik7CisJbXV0ZXhfbG9jaygmb2JqLT5pb21tdV9sb2NrKTsKKwlpZiAob2JqLT5yZWZjb3VudCAhPSAwKSB7CisJCW11dGV4X3VubG9jaygmb2JqLT5pb21tdV9sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJb2JqLT5pc3IgPSBpc3I7CisJb2JqLT5pc3JfcHJpdiA9IGlzcl9wcml2OworCW11dGV4X3VubG9jaygmb2JqLT5pb21tdV9sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW9tbXVfc2V0X2lzcik7CisKIC8qCiAgKglPTUFQIERldmljZSBNTVUoSU9NTVUpIGRldGVjdGlvbgogICovCkBAIC05NTcsMTEgKzk4Miw2IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX21lbTsKIAl9Ci0Jb2JqLT5yZWdiYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWlmICghb2JqLT5yZWdiYXNlKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX21lbTsKLQl9CiAKIAlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCSBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CkBAIC05NzAsNiArOTkwLDEyIEBACiAJCWdvdG8gZXJyX21lbTsKIAl9CiAKKwlvYmotPnJlZ2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFvYmotPnJlZ2Jhc2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPCAwKSB7CiAJCWVyciA9IC1FTk9ERVY7CkBAIC05OTgsOCArMTAyNCw5IEBACiBlcnJfcGdkOgogCWZyZWVfaXJxKGlycSwgb2JqKTsKIGVycl9pcnE6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaW91bm1hcChvYmotPnJlZ2Jhc2UpOworZXJyX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiBlcnJfbWVtOgogCWNsa19wdXQob2JqLT5jbGspOwogZXJyX2NsazoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKaW5kZXggNmRjMTI5Ni4uNTFlZjQzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKQEAgLTI3MSwyMCArMjcxLDIxIEBACiAJCQkJCSAgIHNpemVfdCBieXRlcywgdTMyIGZsYWdzKQogewogCXN0cnVjdCBpb3ZtX3N0cnVjdCAqbmV3LCAqdG1wOwotCXUzMiBzdGFydCwgcHJldl9lbmQsIGFsaWduZW1lbnQ7CisJdTMyIHN0YXJ0LCBwcmV2X2VuZCwgYWxpZ25tZW50OwogCiAJaWYgKCFvYmogfHwgIWJ5dGVzKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCXN0YXJ0ID0gZGE7Ci0JYWxpZ25lbWVudCA9IFBBR0VfU0laRTsKKwlhbGlnbm1lbnQgPSBQQUdFX1NJWkU7CiAKLQlpZiAoZmxhZ3MgJiBJT1ZNRl9EQV9BTk9OKSB7Ci0JCXN0YXJ0ID0gb2JqLT5kYV9zdGFydDsKKwlpZiAofmZsYWdzICYgSU9WTUZfREFfRklYRUQpIHsKKwkJLyogRG9uJ3QgbWFwIGFkZHJlc3MgMCAqLworCQlzdGFydCA9IG9iai0+ZGFfc3RhcnQgPyBvYmotPmRhX3N0YXJ0IDogYWxpZ25tZW50OwogCiAJCWlmIChmbGFncyAmIElPVk1GX0xJTkVBUikKLQkJCWFsaWduZW1lbnQgPSBpb3Bnc3pfbWF4KGJ5dGVzKTsKLQkJc3RhcnQgPSByb3VuZHVwKHN0YXJ0LCBhbGlnbmVtZW50KTsKKwkJCWFsaWdubWVudCA9IGlvcGdzel9tYXgoYnl0ZXMpOworCQlzdGFydCA9IHJvdW5kdXAoc3RhcnQsIGFsaWdubWVudCk7CiAJfSBlbHNlIGlmIChzdGFydCA8IG9iai0+ZGFfc3RhcnQgfHwgc3RhcnQgPiBvYmotPmRhX2VuZCB8fAogCQkJCQlvYmotPmRhX2VuZCAtIHN0YXJ0IDwgYnl0ZXMpIHsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0zMDMsOCArMzA0LDggQEAKIAkJaWYgKHRtcC0+ZGFfc3RhcnQgPiBzdGFydCAmJiAodG1wLT5kYV9zdGFydCAtIHN0YXJ0KSA+PSBieXRlcykKIAkJCWdvdG8gZm91bmQ7CiAKLQkJaWYgKHRtcC0+ZGFfZW5kID49IHN0YXJ0ICYmIGZsYWdzICYgSU9WTUZfREFfQU5PTikKLQkJCXN0YXJ0ID0gcm91bmR1cCh0bXAtPmRhX2VuZCArIDEsIGFsaWduZW1lbnQpOworCQlpZiAodG1wLT5kYV9lbmQgPj0gc3RhcnQgJiYgfmZsYWdzICYgSU9WTUZfREFfRklYRUQpCisJCQlzdGFydCA9IHJvdW5kdXAodG1wLT5kYV9lbmQgKyAxLCBhbGlnbm1lbnQpOwogCiAJCXByZXZfZW5kID0gdG1wLT5kYV9lbmQ7CiAJfQpAQCAtNjUwLDcgKzY1MSw2IEBACiAJZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX01NSU87Ci0JZmxhZ3MgfD0gKGRhID8gSU9WTUZfREFfRklYRUQgOiBJT1ZNRl9EQV9BTk9OKTsKIAogCWRhID0gX19pb21tdV92bWFwKG9iaiwgZGEsIHNndCwgdmEsIGJ5dGVzLCBmbGFncyk7CiAJaWYgKElTX0VSUl9WQUxVRShkYSkpCkBAIC02OTAsNyArNjkwLDcgQEAKICAqIEBmbGFnczoJaW92bWEgYW5kIHBhZ2UgcHJvcGVydHkKICAqCiAgKiBBbGxvY2F0ZSBAYnl0ZXMgbGluZWFybHkgYW5kIGNyZWF0ZXMgMS1uLTEgbWFwcGluZyBhbmQgcmV0dXJucwotICogQGRhIGFnYWluLCB3aGljaCBtaWdodCBiZSBhZGp1c3RlZCBpZiAnSU9WTUZfREFfQU5PTicgaXMgc2V0LgorICogQGRhIGFnYWluLCB3aGljaCBtaWdodCBiZSBhZGp1c3RlZCBpZiAnSU9WTUZfREFfRklYRUQnIGlzIG5vdCBzZXQuCiAgKi8KIHUzMiBpb21tdV92bWFsbG9jKHN0cnVjdCBpb21tdSAqb2JqLCB1MzIgZGEsIHNpemVfdCBieXRlcywgdTMyIGZsYWdzKQogewpAQCAtNzA5LDcgKzcwOSw2IEBACiAJZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX0FMTE9DOwotCWZsYWdzIHw9IChkYSA/IElPVk1GX0RBX0ZJWEVEIDogSU9WTUZfREFfQU5PTik7CiAKIAlzZ3QgPSBzZ3RhYmxlX2FsbG9jKGJ5dGVzLCBmbGFncywgZGEsIDApOwogCWlmIChJU19FUlIoc2d0KSkgewpAQCAtNzgwLDcgKzc3OSw3IEBACiAgKiBAZmxhZ3M6CWlvdm1hIGFuZCBwYWdlIHByb3BlcnR5CiAgKgogICogQ3JlYXRlcyAxLTEtMSBtYXBwaW5nIGFuZCByZXR1cm5zIEBkYSBhZ2Fpbiwgd2hpY2ggY2FuIGJlCi0gKiBhZGp1c3RlZCBpZiAnSU9WTUZfREFfQU5PTicgaXMgc2V0LgorICogYWRqdXN0ZWQgaWYgJ0lPVk1GX0RBX0ZJWEVEJyBpcyBub3Qgc2V0LgogICovCiB1MzIgaW9tbXVfa21hcChzdHJ1Y3QgaW9tbXUgKm9iaiwgdTMyIGRhLCB1MzIgcGEsIHNpemVfdCBieXRlcywKIAkJIHUzMiBmbGFncykKQEAgLTc5OSw3ICs3OTgsNiBAQAogCWZsYWdzICY9IElPVk1GX0hXX01BU0s7CiAJZmxhZ3MgfD0gSU9WTUZfTElORUFSOwogCWZsYWdzIHw9IElPVk1GX01NSU87Ci0JZmxhZ3MgfD0gKGRhID8gSU9WTUZfREFfRklYRUQgOiBJT1ZNRl9EQV9BTk9OKTsKIAogCWRhID0gX19pb21tdV9rbWFwKG9iaiwgZGEsIHBhLCB2YSwgYnl0ZXMsIGZsYWdzKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKGRhKSkKQEAgLTgzOCw3ICs4MzYsNyBAQAogICogQGZsYWdzOglpb3ZtYSBhbmQgcGFnZSBwcm9wZXJ0eQogICoKICAqIEFsbG9jYXRlIEBieXRlcyBsaW5lYXJseSBhbmQgY3JlYXRlcyAxLTEtMSBtYXBwaW5nIGFuZCByZXR1cm5zCi0gKiBAZGEgYWdhaW4sIHdoaWNoIG1pZ2h0IGJlIGFkanVzdGVkIGlmICdJT1ZNRl9EQV9BTk9OJyBpcyBzZXQuCisgKiBAZGEgYWdhaW4sIHdoaWNoIG1pZ2h0IGJlIGFkanVzdGVkIGlmICdJT1ZNRl9EQV9GSVhFRCcgaXMgbm90IHNldC4KICAqLwogdTMyIGlvbW11X2ttYWxsb2Moc3RydWN0IGlvbW11ICpvYmosIHUzMiBkYSwgc2l6ZV90IGJ5dGVzLCB1MzIgZmxhZ3MpCiB7CkBAIC04NTgsNyArODU2LDYgQEAKIAlmbGFncyAmPSBJT1ZNRl9IV19NQVNLOwogCWZsYWdzIHw9IElPVk1GX0xJTkVBUjsKIAlmbGFncyB8PSBJT1ZNRl9BTExPQzsKLQlmbGFncyB8PSAoZGEgPyBJT1ZNRl9EQV9GSVhFRCA6IElPVk1GX0RBX0FOT04pOwogCiAJZGEgPSBfX2lvbW11X2ttYXAob2JqLCBkYSwgcGEsIHZhLCBieXRlcywgZmxhZ3MpOwogCWlmIChJU19FUlJfVkFMVUUoZGEpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCBiNWE2ZTE3Li5kNTk4ZDlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L21jYnNwLmg+CisjaW5jbHVkZSA8cGxhdC9vbWFwX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogLyogWFhYIFRoZXNlICJzaWRld2F5cyIgaW5jbHVkZXMgYXJlIGEgc2lnbiB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZyAqLwogI2luY2x1ZGUgIi4uL21hY2gtb21hcDIvY20yeHh4XzN4eHguaCIKQEAgLTIyNywxMCArMjI5LDgzIEBACiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfY29uZmlnKTsKIAorLyoqCisgKiBvbWFwX21jYnNwX2RtYV9wYXJhbXMgLSByZXR1cm5zIHRoZSBkbWEgY2hhbm5lbCBudW1iZXIKKyAqIEBpZCAtIG1jYnNwIGlkCisgKiBAc3RyZWFtIC0gaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gb2YgZGF0YSBmbG93IChyeCBvciB0eCkKKyAqCisgKiBSZXR1cm5zIHRoZSBkbWEgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSByeCBjaGFubmVsIG9yIHR4IGNoYW5uZWwKKyAqIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBAc3RyZWFtIGZvciB0aGUgcmVxdWVzdGVkIG1jYnNwIGdpdmVuIGJ5IEBpZAorICovCitpbnQgb21hcF9tY2JzcF9kbWFfY2hfcGFyYW1zKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHN0cmVhbSkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisKKwlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisKKwlpZiAoc3RyZWFtKQorCQlyZXR1cm4gbWNic3AtPmRtYV9yeF9zeW5jOworCWVsc2UKKwkJcmV0dXJuIG1jYnNwLT5kbWFfdHhfc3luYzsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9kbWFfY2hfcGFyYW1zKTsKKworLyoqCisgKiBvbWFwX21jYnNwX2RtYV9yZWdfcGFyYW1zIC0gcmV0dXJucyB0aGUgYWRkcmVzcyBvZiBtY2JzcCBkYXRhIHJlZ2lzdGVyCisgKiBAaWQgLSBtY2JzcCBpZAorICogQHN0cmVhbSAtIGluZGljYXRlcyB0aGUgZGlyZWN0aW9uIG9mIGRhdGEgZmxvdyAocnggb3IgdHgpCisgKgorICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiBtY2JzcCBkYXRhIHRyYW5zbWl0IHJlZ2lzdGVyIG9yIGRhdGEgcmVjZWl2ZSByZWdpc3RlcgorICogdG8gYmUgdXNlZCBieSBETUEgZm9yIHRyYW5zZmVycmluZy9yZWNlaXZpbmcgZGF0YSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YKKyAqIEBzdHJlYW0gZm9yIHRoZSByZXF1ZXN0ZWQgbWNic3AgZ2l2ZW4gYnkgQGlkCisgKi8KK2ludCBvbWFwX21jYnNwX2RtYV9yZWdfcGFyYW1zKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHN0cmVhbSkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJaW50IGRhdGFfcmVnOworCisJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCisJZGF0YV9yZWcgPSBtY2JzcC0+cGh5c19kbWFfYmFzZTsKKworCWlmIChtY2JzcC0+bWNic3BfY29uZmlnX3R5cGUgPCBNQ0JTUF9DT05GSUdfVFlQRTIpIHsKKwkJaWYgKHN0cmVhbSkKKwkJCWRhdGFfcmVnICs9IE9NQVBfTUNCU1BfUkVHX0RSUjE7CisJCWVsc2UKKwkJCWRhdGFfcmVnICs9IE9NQVBfTUNCU1BfUkVHX0RYUjE7CisJfSBlbHNlIHsKKwkJaWYgKHN0cmVhbSkKKwkJCWRhdGFfcmVnICs9IE9NQVBfTUNCU1BfUkVHX0RSUjsKKwkJZWxzZQorCQkJZGF0YV9yZWcgKz0gT01BUF9NQ0JTUF9SRUdfRFhSOworCX0KKworCXJldHVybiBkYXRhX3JlZzsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9kbWFfcmVnX3BhcmFtcyk7CisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworc3RhdGljIHN0cnVjdCBvbWFwX2RldmljZSAqZmluZF9vbWFwX2RldmljZV9ieV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBjb250YWluZXJfb2YoZGV2LAorCQkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXJldHVybiBjb250YWluZXJfb2YocGRldiwgc3RydWN0IG9tYXBfZGV2aWNlLCBwZGV2KTsKK30KKwogc3RhdGljIHZvaWQgb21hcF9zdF9vbihzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApCiB7CiAJdW5zaWduZWQgaW50IHc7CisJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKKworCW9kID0gZmluZF9vbWFwX2RldmljZV9ieV9kZXYobWNic3AtPmRldik7CiAKIAkvKgogCSAqIFNpZGV0b25lIHVzZXMgTWNCU1AgSUNMSyAtIHdoaWNoIG11c3Qgbm90IGlkbGUgd2hlbiBzaWRldG9uZXMKQEAgLTI0NCw5ICszMTksNiBAQAogCXcgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTU0VMQ1IpOwogCU1DQlNQX1dSSVRFKG1jYnNwLCBTU0VMQ1IsIHcgfCBTSURFVE9ORUVOKTsKIAotCXcgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTWVNDT05GSUcpOwotCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTWVNDT05GSUcsIHcgJiB+KFNUX0FVVE9JRExFKSk7Ci0KIAkvKiBFbmFibGUgU2lkZXRvbmUgZnJvbSBTaWRldG9uZSBDb3JlICovCiAJdyA9IE1DQlNQX1NUX1JFQUQobWNic3AsIFNTRUxDUik7CiAJTUNCU1BfU1RfV1JJVEUobWNic3AsIFNTRUxDUiwgdyB8IFNUX1NJREVUT05FRU4pOwpAQCAtMjU1LDEzICszMjcsMTMgQEAKIHN0YXRpYyB2b2lkIG9tYXBfc3Rfb2ZmKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKIHsKIAl1bnNpZ25lZCBpbnQgdzsKKwlzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kOworCisJb2QgPSBmaW5kX29tYXBfZGV2aWNlX2J5X2RldihtY2JzcC0+ZGV2KTsKIAogCXcgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTU0VMQ1IpOwogCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTU0VMQ1IsIHcgJiB+KFNUX1NJREVUT05FRU4pKTsKIAotCXcgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTWVNDT05GSUcpOwotCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTWVNDT05GSUcsIHcgfCBTVF9BVVRPSURMRSk7Ci0KIAl3ID0gTUNCU1BfUkVBRChtY2JzcCwgU1NFTENSKTsKIAlNQ0JTUF9XUklURShtY2JzcCwgU1NFTENSLCB3ICYgfihTSURFVE9ORUVOKSk7CiAKQEAgLTI3Myw5ICszNDUsOSBAQAogc3RhdGljIHZvaWQgb21hcF9zdF9maXJfd3JpdGUoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwLCBzMTYgKmZpcikKIHsKIAl1MTYgdmFsLCBpOworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CiAKLQl2YWwgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTWVNDT05GSUcpOwotCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTWVNDT05GSUcsIHZhbCAmIH4oU1RfQVVUT0lETEUpKTsKKwlvZCA9IGZpbmRfb21hcF9kZXZpY2VfYnlfZGV2KG1jYnNwLT5kZXYpOwogCiAJdmFsID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1NFTENSKTsKIApAQCAtMzAzLDkgKzM3NSw5IEBACiB7CiAJdTE2IHc7CiAJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YSA9IG1jYnNwLT5zdF9kYXRhOworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CiAKLQl3ID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1lTQ09ORklHKTsKLQlNQ0JTUF9TVF9XUklURShtY2JzcCwgU1lTQ09ORklHLCB3ICYgfihTVF9BVVRPSURMRSkpOworCW9kID0gZmluZF9vbWFwX2RldmljZV9ieV9kZXYobWNic3AtPmRldik7CiAKIAl3ID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1NFTENSKTsKIApAQCAtNjQ4LDQ4ICs3MjAsMzMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXAzNHh4X21jYnNwX3JlcXVlc3Qoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKQogeworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CisKKwlvZCA9IGZpbmRfb21hcF9kZXZpY2VfYnlfZGV2KG1jYnNwLT5kZXYpOwogCS8qCiAJICogRW5hYmxlIHdha3VwIGJlaGF2aW9yLCBzbWFydCBpZGxlIGFuZCBhbGwgd2FrZXVwcwogCSAqIFJFVklTSVQ6IHNvbWUgd2FrZXVwcyBtYXkgYmUgdW5uZWNlc3NhcnkKIAkgKi8KIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJdTE2IHN5c2NvbjsKLQotCQlzeXNjb24gPSBNQ0JTUF9SRUFEKG1jYnNwLCBTWVNDT04pOwotCQlzeXNjb24gJj0gfihFTkFXQUtFVVAgfCBTSURMRU1PREUoMHgwMykgfCBDTE9DS0FDVElWSVRZKDB4MDMpKTsKLQotCQlpZiAobWNic3AtPmRtYV9vcF9tb2RlID09IE1DQlNQX0RNQV9NT0RFX1RIUkVTSE9MRCkgewotCQkJc3lzY29uIHw9IChFTkFXQUtFVVAgfCBTSURMRU1PREUoMHgwMikgfAotCQkJCQlDTE9DS0FDVElWSVRZKDB4MDIpKTsKLQkJCU1DQlNQX1dSSVRFKG1jYnNwLCBXQUtFVVBFTiwgWFJEWUVOIHwgUlJEWUVOKTsKLQkJfSBlbHNlIHsKLQkJCXN5c2NvbiB8PSBTSURMRU1PREUoMHgwMSk7Ci0JCX0KLQotCQlNQ0JTUF9XUklURShtY2JzcCwgU1lTQ09OLCBzeXNjb24pOworCQlNQ0JTUF9XUklURShtY2JzcCwgV0FLRVVQRU4sIFhSRFlFTiB8IFJSRFlFTik7CiAJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcDM0eHhfbWNic3BfZnJlZShzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApCiB7CisJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKKworCW9kID0gZmluZF9vbWFwX2RldmljZV9ieV9kZXYobWNic3AtPmRldik7CisKIAkvKgogCSAqIERpc2FibGUgd2FrdXAgYmVoYXZpb3IsIHNtYXJ0IGlkbGUgYW5kIGFsbCB3YWtldXBzCiAJICovCiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCXUxNiBzeXNjb247Ci0KLQkJc3lzY29uID0gTUNCU1BfUkVBRChtY2JzcCwgU1lTQ09OKTsKLQkJc3lzY29uICY9IH4oRU5BV0FLRVVQIHwgU0lETEVNT0RFKDB4MDMpIHwgQ0xPQ0tBQ1RJVklUWSgweDAzKSk7CiAJCS8qCiAJCSAqIEhXIGJ1ZyB3b3JrYXJvdW5kIC0gSWYgbm9faWRsZSBtb2RlIGlzIHRha2VuLCB3ZSBuZWVkIHRvCiAJCSAqIGdvIHRvIHNtYXJ0X2lkbGUgYmVmb3JlIGdvaW5nIHRvIGFsd2F5c19pZGxlLCBvciB0aGUKIAkJICogZGV2aWNlIHdpbGwgbm90IGhpdCByZXRlbnRpb24gYW55bW9yZS4KIAkJICovCi0JCXN5c2NvbiB8PSBTSURMRU1PREUoMHgwMik7Ci0JCU1DQlNQX1dSSVRFKG1jYnNwLCBTWVNDT04sIHN5c2Nvbik7Ci0KLQkJc3lzY29uICY9IH4oU0lETEVNT0RFKDB4MDMpKTsKLQkJTUNCU1BfV1JJVEUobWNic3AsIFNZU0NPTiwgc3lzY29uKTsKIAogCQlNQ0JTUF9XUklURShtY2JzcCwgV0FLRVVQRU4sIDApOwogCX0KQEAgLTc2NCw4ICs4MjEsNyBAQAogCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QpCiAJCW1jYnNwLT5wZGF0YS0+b3BzLT5yZXF1ZXN0KGlkKTsKIAotCWNsa19lbmFibGUobWNic3AtPmljbGspOwotCWNsa19lbmFibGUobWNic3AtPmZjbGspOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMobWNic3AtPmRldik7CiAKIAkvKiBEbyBwcm9jZWR1cmUgc3BlY2lmaWMgdG8gb21hcDM0eHggYXJjaCwgaWYgYXBwbGljYWJsZSAqLwogCW9tYXAzNHh4X21jYnNwX3JlcXVlc3QobWNic3ApOwpAQCAtODEzLDggKzg2OSw3IEBACiAJLyogRG8gcHJvY2VkdXJlIHNwZWNpZmljIHRvIG9tYXAzNHh4IGFyY2gsIGlmIGFwcGxpY2FibGUgKi8KIAlvbWFwMzR4eF9tY2JzcF9mcmVlKG1jYnNwKTsKIAotCWNsa19kaXNhYmxlKG1jYnNwLT5mY2xrKTsKLQljbGtfZGlzYWJsZShtY2JzcC0+aWNsayk7CisJcG1fcnVudGltZV9wdXRfc3luYyhtY2JzcC0+ZGV2KTsKIAogCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOwogCW1jYnNwLT5mcmVlID0gdHJ1ZTsKQEAgLTg0NCw4ICs4OTksNyBAQAogCS8qIERvIHByb2NlZHVyZSBzcGVjaWZpYyB0byBvbWFwMzR4eCBhcmNoLCBpZiBhcHBsaWNhYmxlICovCiAJb21hcDM0eHhfbWNic3BfZnJlZShtY2JzcCk7CiAKLQljbGtfZGlzYWJsZShtY2JzcC0+ZmNsayk7Ci0JY2xrX2Rpc2FibGUobWNic3AtPmljbGspOworCXBtX3J1bnRpbWVfcHV0X3N5bmMobWNic3AtPmRldik7CiAKIAlpZiAobWNic3AtPmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKIAkJLyogRnJlZSBJUlFzICovCkBAIC0xNjQ5LDcgKzE3MDMsOCBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwX3N0X2FkZChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApCiB7Ci0Jc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBtY2JzcC0+cGRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhOwogCWludCBlcnI7CiAKQEAgLTE2NTksNyArMTcxNCwxMCBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0Jc3RfZGF0YS0+aW9fYmFzZV9zdCA9IGlvcmVtYXAocGRhdGEtPnBoeXNfYmFzZV9zdCwgU1pfNEspOworCXBkZXYgPSBjb250YWluZXJfb2YobWNic3AtPmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJzaWRldG9uZSIpOworCXN0X2RhdGEtPmlvX2Jhc2Vfc3QgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFzdF9kYXRhLT5pb19iYXNlX3N0KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyMjsKQEAgLTE3NDgsNiArMTgwNiw3IEBACiAJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CiAJaW50IGlkID0gcGRldi0+aWQgLSAxOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFwZGF0YSkgewpAQCAtMTc3Nyw0NyArMTgzNiw3OCBAQAogCW1jYnNwLT5kbWFfdHhfbGNoID0gLTE7CiAJbWNic3AtPmRtYV9yeF9sY2ggPSAtMTsKIAotCW1jYnNwLT5waHlzX2Jhc2UgPSBwZGF0YS0+cGh5c19iYXNlOwotCW1jYnNwLT5pb19iYXNlID0gaW9yZW1hcChwZGF0YS0+cGh5c19iYXNlLCBTWl80Syk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgIm1wdSIpOworCWlmICghcmVzKSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJCWlmICghcmVzKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczptY2JzcCVkIGhhcyBpbnZhbGlkIG1lbW9yeSIKKwkJCQkJInJlc291cmNlXG4iLCBfX2Z1bmNfXywgcGRldi0+aWQpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKwltY2JzcC0+cGh5c19iYXNlID0gcmVzLT5zdGFydDsKKwlvbWFwX21jYnNwX2NhY2hlX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisJbWNic3AtPmlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFtY2JzcC0+aW9fYmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJkbWEiKTsKKwlpZiAoIXJlcykKKwkJbWNic3AtPnBoeXNfZG1hX2Jhc2UgPSBtY2JzcC0+cGh5c19iYXNlOworCWVsc2UKKwkJbWNic3AtPnBoeXNfZG1hX2Jhc2UgPSByZXMtPnN0YXJ0OworCiAJLyogRGVmYXVsdCBJL08gaXMgSVJRIGJhc2VkICovCiAJbWNic3AtPmlvX3R5cGUgPSBPTUFQX01DQlNQX0lSUV9JTzsKLQltY2JzcC0+dHhfaXJxID0gcGRhdGEtPnR4X2lycTsKLQltY2JzcC0+cnhfaXJxID0gcGRhdGEtPnJ4X2lycTsKLQltY2JzcC0+ZG1hX3J4X3N5bmMgPSBwZGF0YS0+ZG1hX3J4X3N5bmM7Ci0JbWNic3AtPmRtYV90eF9zeW5jID0gcGRhdGEtPmRtYV90eF9zeW5jOwogCi0JbWNic3AtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKLQlpZiAoSVNfRVJSKG1jYnNwLT5pY2xrKSkgewotCQlyZXQgPSBQVFJfRVJSKG1jYnNwLT5pY2xrKTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBpY2s6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9pY2xrOworCW1jYnNwLT50eF9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAidHgiKTsKKwltY2JzcC0+cnhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInJ4Iik7CisKKwkvKiBGcm9tIE9NQVA0IHRoZXJlIHdpbGwgYmUgYSBzaW5nbGUgaXJxIGxpbmUgKi8KKwlpZiAobWNic3AtPnR4X2lycSA9PSAtRU5YSU8pCisJCW1jYnNwLT50eF9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgInJ4Iik7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6bWNic3AlZCBoYXMgaW52YWxpZCByeCBETUEgY2hhbm5lbFxuIiwKKwkJCQkJX19mdW5jX18sIHBkZXYtPmlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVzOwogCX0KKwltY2JzcC0+ZG1hX3J4X3N5bmMgPSByZXMtPnN0YXJ0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgInR4Iik7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6bWNic3AlZCBoYXMgaW52YWxpZCB0eCBETUEgY2hhbm5lbFxuIiwKKwkJCQkJX19mdW5jX18sIHBkZXYtPmlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVzOworCX0KKwltY2JzcC0+ZG1hX3R4X3N5bmMgPSByZXMtPnN0YXJ0OwogCiAJbWNic3AtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKIAlpZiAoSVNfRVJSKG1jYnNwLT5mY2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKG1jYnNwLT5mY2xrKTsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBmY2s6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9mY2xrOworCQlnb3RvIGVycl9yZXM7CiAJfQogCiAJbWNic3AtPnBkYXRhID0gcGRhdGE7CiAJbWNic3AtPmRldiA9ICZwZGV2LT5kZXY7CiAJbWNic3BfcHRyW2lkXSA9IG1jYnNwOworCW1jYnNwLT5tY2JzcF9jb25maWdfdHlwZSA9IHBkYXRhLT5tY2JzcF9jb25maWdfdHlwZTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtY2JzcCk7CisJcG1fcnVudGltZV9lbmFibGUobWNic3AtPmRldik7CiAKIAkvKiBJbml0aWFsaXplIG1jYnNwIHByb3BlcnRpZXMgZm9yIE9NQVAzNFhYIGlmIG5lZWRlZCAvIGFwcGxpY2FibGUgKi8KIAlvbWFwMzR4eF9kZXZpY2VfaW5pdChtY2JzcCk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2ZjbGs6Ci0JY2xrX3B1dChtY2JzcC0+aWNsayk7Ci1lcnJfaWNsazoKK2Vycl9yZXM6CiAJaW91bm1hcChtY2JzcC0+aW9fYmFzZSk7CiBlcnJfaW9yZW1hcDoKIAlrZnJlZShtY2JzcCk7CkBAIC0xODM5LDcgKzE5MjksNiBAQAogCQlvbWFwMzR4eF9kZXZpY2VfZXhpdChtY2JzcCk7CiAKIAkJY2xrX3B1dChtY2JzcC0+ZmNsayk7Ci0JCWNsa19wdXQobWNic3AtPmljbGspOwogCiAJCWlvdW5tYXAobWNic3AtPmlvX2Jhc2UpOwogCQlrZnJlZShtY2JzcCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCmluZGV4IDU3YWRiMjcuLjliYmRhOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCkBAIC04Myw5ICs4MywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKICNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CiAjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogCiAvKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gX29tYXBfZGV2aWNlX3tkZSx9YWN0aXZhdGUoKSAqLwogI2RlZmluZSBVU0VfV0FLRVVQX0xBVAkJCTAKQEAgLTIzOSwxMiArMjQxLDEyIEBACiB9CiAKIC8qKgotICogX2FkZF9vcHRpb25hbF9jbG9ja19hbGlhcyAtIEFkZCBjbG9jayBhbGlhcyBmb3IgaHdtb2Qgb3B0aW9uYWwgY2xvY2tzCisgKiBfYWRkX29wdGlvbmFsX2Nsb2NrX2Nsa2RldiAtIEFkZCBjbGtkZXYgZW50cnkgZm9yIGh3bW9kIG9wdGlvbmFsIGNsb2NrcwogICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kCiAgKgogICogRm9yIGV2ZXJ5IG9wdGlvbmFsIGNsb2NrIHByZXNlbnQgcGVyIGh3bW9kIHBlciBvbWFwX2RldmljZSwgdGhpcyBmdW5jdGlvbgotICogYWRkcyBhbiBlbnRyeSBpbiB0aGUgY2xvY2tzIGxpc3Qgb2YgdGhlIGZvcm0gPGRldi1pZD1kZXZfbmFtZSwgY29uLWlkPXJvbGU+Ci0gKiBpZiBhbiBlbnRyeSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gaXQgd2l0aCB0aGUgZm9ybSA8ZGV2LWlkPU5VTEwsIGNvbi1pZD1yb2xlPgorICogYWRkcyBhbiBlbnRyeSBpbiB0aGUgY2xrZGV2IHRhYmxlIG9mIHRoZSBmb3JtIDxkZXYtaWQ9ZGV2X25hbWUsIGNvbi1pZD1yb2xlPgorICogaWYgaXQgZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4KICAqCiAgKiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gaW5zaWRlIG9tYXBfZGV2aWNlX2J1aWxkX3NzKCksIGFmdGVyCiAgKiBvbWFwX2RldmljZV9yZWdpc3Rlci4KQEAgLTI1NCwyNSArMjU2LDM5IEBACiAgKgogICogTm8gcmV0dXJuIHZhbHVlLgogICovCi1zdGF0aWMgdm9pZCBfYWRkX29wdGlvbmFsX2Nsb2NrX2FsaWFzKHN0cnVjdCBvbWFwX2RldmljZSAqb2QsCitzdGF0aWMgdm9pZCBfYWRkX29wdGlvbmFsX2Nsb2NrX2Nsa2RldihzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kLAogCQkJCSAgICAgIHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBvaC0+b3B0X2Nsa3NfY250OyBpKyspIHsKIAkJc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayAqb2M7Ci0JCWludCByOworCQlzdHJ1Y3QgY2xrICpyOworCQlzdHJ1Y3QgY2xrX2xvb2t1cCAqbDsKIAogCQlvYyA9ICZvaC0+b3B0X2Nsa3NbaV07CiAKIAkJaWYgKCFvYy0+X2NsaykKIAkJCWNvbnRpbnVlOwogCi0JCXIgPSBjbGtfYWRkX2FsaWFzKG9jLT5yb2xlLCBkZXZfbmFtZSgmb2QtPnBkZXYuZGV2KSwKLQkJCQkgIChjaGFyICopb2MtPmNsaywgJm9kLT5wZGV2LmRldik7Ci0JCWlmIChyKQotCQkJcHJfZXJyKCJvbWFwX2RldmljZTogJXM6IGNsa19hZGRfYWxpYXMgZm9yICVzIGZhaWxlZFxuIiwKKwkJciA9IGNsa19nZXRfc3lzKGRldl9uYW1lKCZvZC0+cGRldi5kZXYpLCBvYy0+cm9sZSk7CisJCWlmICghSVNfRVJSKHIpKQorCQkJY29udGludWU7IC8qIGNsa2RldiBlbnRyeSBleGlzdHMgKi8KKworCQlyID0gb21hcF9jbGtfZ2V0X2J5X25hbWUoKGNoYXIgKilvYy0+Y2xrKTsKKwkJaWYgKElTX0VSUihyKSkgeworCQkJcHJfZXJyKCJvbWFwX2RldmljZTogJXM6IG9tYXBfY2xrX2dldF9ieV9uYW1lIGZvciAlcyBmYWlsZWRcbiIsCisJCQkgICAgICAgZGV2X25hbWUoJm9kLT5wZGV2LmRldiksIG9jLT5jbGspOworCQkJY29udGludWU7CisJCX0KKworCQlsID0gY2xrZGV2X2FsbG9jKHIsIG9jLT5yb2xlLCBkZXZfbmFtZSgmb2QtPnBkZXYuZGV2KSk7CisJCWlmICghbCkgeworCQkJcHJfZXJyKCJvbWFwX2RldmljZTogJXM6IGNsa2Rldl9hbGxvYyBmb3IgJXMgZmFpbGVkXG4iLAogCQkJICAgICAgIGRldl9uYW1lKCZvZC0+cGRldi5kZXYpLCBvYy0+cm9sZSk7CisJCQlyZXR1cm47CisJCX0KKwkJY2xrZGV2X2FkZChsKTsKIAl9CiB9CiAKQEAgLTQ4MCw3ICs0OTYsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG9oX2NudDsgaSsrKSB7CiAJCWh3bW9kc1tpXS0+b2QgPSBvZDsKLQkJX2FkZF9vcHRpb25hbF9jbG9ja19hbGlhcyhvZCwgaHdtb2RzW2ldKTsKKwkJX2FkZF9vcHRpb25hbF9jbG9ja19jbGtkZXYob2QsIGh3bW9kc1tpXSk7CiAJfQogCiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IDY4ZmNjN2QuLmEzZjUwYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMzE2LDcgKzMxNiw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisjaWZkZWYgQ09ORklHX1NPQ19PTUFQMjQyMAogc3RhdGljIGludCBfX2luaXQgb21hcDI0Mnhfc3JhbV9pbml0KHZvaWQpCiB7CiAJX29tYXAyX3NyYW1fZGRyX2luaXQgPSBvbWFwX3NyYW1fcHVzaChvbWFwMjQyeF9zcmFtX2Rkcl9pbml0LApAQCAtMzM3LDcgKzMzNyw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisjaWZkZWYgQ09ORklHX1NPQ19PTUFQMjQzMAogc3RhdGljIGludCBfX2luaXQgb21hcDI0M3hfc3JhbV9pbml0KHZvaWQpCiB7CiAJX29tYXAyX3NyYW1fZGRyX2luaXQgPSBvbWFwX3NyYW1fcHVzaChvbWFwMjQzeF9zcmFtX2Rkcl9pbml0LApAQCAtNDA5LDIwICs0MDksNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotc3RhdGljIGludCBfX2luaXQgb21hcDQ0eHhfc3JhbV9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fRVJSICJGSVhNRTogJXMgbm90IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBvbWFwNDR4eF9zcmFtX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBpbnQgX19pbml0IG9tYXBfc3JhbV9pbml0KHZvaWQpCiB7CiAJb21hcF9kZXRlY3Rfc3JhbSgpOwpAQCAtNDM2LDggKzQyMiw2IEBACiAJCW9tYXAyNDN4X3NyYW1faW5pdCgpOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlvbWFwMzR4eF9zcmFtX2luaXQoKTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJb21hcDQ0eHhfc3JhbV9pbml0KCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMKaW5kZXggNWYzNTIyMy4uMDc4ODk0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMKQEAgLTE3LDU1ICsxNywxMjMgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Bpb192YWxpZF9pbnB1dFtCSVRTX1RPX0xPTkdTKEdQSU9fTUFYKV07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3ZhbGlkX291dHB1dFtCSVRTX1RPX0xPTkdTKEdQSU9fTUFYKV07CisvKgorICogR1BJTyB1bml0IHJlZ2lzdGVyIG9mZnNldHMuCisgKi8KKyNkZWZpbmUgR1BJT19PVVRfT0ZGCQkweDAwMDAKKyNkZWZpbmUgR1BJT19JT19DT05GX09GRgkweDAwMDQKKyNkZWZpbmUgR1BJT19CTElOS19FTl9PRkYJMHgwMDA4CisjZGVmaW5lIEdQSU9fSU5fUE9MX09GRgkJMHgwMDBjCisjZGVmaW5lIEdQSU9fREFUQV9JTl9PRkYJMHgwMDEwCisjZGVmaW5lIEdQSU9fRURHRV9DQVVTRV9PRkYJMHgwMDE0CisjZGVmaW5lIEdQSU9fRURHRV9NQVNLX09GRgkweDAwMTgKKyNkZWZpbmUgR1BJT19MRVZFTF9NQVNLX09GRgkweDAwMWMKIAotc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2RpcmVjdGlvbih1bnNpZ25lZCBwaW4sIGludCBpbnB1dCkKK3N0cnVjdCBvcmlvbl9ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKKwlzcGlubG9ja190CQlsb2NrOworCXZvaWQgX19pb21lbQkJKmJhc2U7CisJdW5zaWduZWQgbG9uZwkJdmFsaWRfaW5wdXQ7CisJdW5zaWduZWQgbG9uZwkJdmFsaWRfb3V0cHV0OworCWludAkJCW1hc2tfb2Zmc2V0OworCWludAkJCXNlY29uZGFyeV9pcnFfYmFzZTsKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKkdQSU9fT1VUKHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwKQoreworCXJldHVybiBvY2hpcC0+YmFzZSArIEdQSU9fT1VUX09GRjsKK30KKworc3RhdGljIHZvaWQgX19pb21lbSAqR1BJT19JT19DT05GKHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwKQoreworCXJldHVybiBvY2hpcC0+YmFzZSArIEdQSU9fSU9fQ09ORl9PRkY7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKkdQSU9fQkxJTktfRU4oc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXApCit7CisJcmV0dXJuIG9jaGlwLT5iYXNlICsgR1BJT19CTElOS19FTl9PRkY7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKkdQSU9fSU5fUE9MKHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwKQoreworCXJldHVybiBvY2hpcC0+YmFzZSArIEdQSU9fSU5fUE9MX09GRjsKK30KKworc3RhdGljIHZvaWQgX19pb21lbSAqR1BJT19EQVRBX0lOKHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwKQoreworCXJldHVybiBvY2hpcC0+YmFzZSArIEdQSU9fREFUQV9JTl9PRkY7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKkdQSU9fRURHRV9DQVVTRShzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCkKK3sKKwlyZXR1cm4gb2NoaXAtPmJhc2UgKyBHUElPX0VER0VfQ0FVU0VfT0ZGOworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpHUElPX0VER0VfTUFTSyhzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCkKK3sKKwlyZXR1cm4gb2NoaXAtPmJhc2UgKyBvY2hpcC0+bWFza19vZmZzZXQgKyBHUElPX0VER0VfTUFTS19PRkY7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKkdQSU9fTEVWRUxfTUFTSyhzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCkKK3sKKwlyZXR1cm4gb2NoaXAtPmJhc2UgKyBvY2hpcC0+bWFza19vZmZzZXQgKyBHUElPX0xFVkVMX01BU0tfT0ZGOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwIG9yaW9uX2dwaW9fY2hpcHNbMl07CitzdGF0aWMgaW50IG9yaW9uX2dwaW9fY2hpcF9jb3VudDsKKworc3RhdGljIGlubGluZSB2b2lkCitfX3NldF9kaXJlY3Rpb24oc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXAsIHVuc2lnbmVkIHBpbiwgaW50IGlucHV0KQogewogCXUzMiB1OwogCi0JdSA9IHJlYWRsKEdQSU9fSU9fQ09ORihwaW4pKTsKKwl1ID0gcmVhZGwoR1BJT19JT19DT05GKG9jaGlwKSk7CiAJaWYgKGlucHV0KQotCQl1IHw9IDEgPDwgKHBpbiAmIDMxKTsKKwkJdSB8PSAxIDw8IHBpbjsKIAllbHNlCi0JCXUgJj0gfigxIDw8IChwaW4gJiAzMSkpOwotCXdyaXRlbCh1LCBHUElPX0lPX0NPTkYocGluKSk7CisJCXUgJj0gfigxIDw8IHBpbik7CisJd3JpdGVsKHUsIEdQSU9fSU9fQ09ORihvY2hpcCkpOwogfQogCi1zdGF0aWMgdm9pZCBfX3NldF9sZXZlbCh1bnNpZ25lZCBwaW4sIGludCBoaWdoKQorc3RhdGljIHZvaWQgX19zZXRfbGV2ZWwoc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXAsIHVuc2lnbmVkIHBpbiwgaW50IGhpZ2gpCiB7CiAJdTMyIHU7CiAKLQl1ID0gcmVhZGwoR1BJT19PVVQocGluKSk7CisJdSA9IHJlYWRsKEdQSU9fT1VUKG9jaGlwKSk7CiAJaWYgKGhpZ2gpCi0JCXUgfD0gMSA8PCAocGluICYgMzEpOworCQl1IHw9IDEgPDwgcGluOwogCWVsc2UKLQkJdSAmPSB+KDEgPDwgKHBpbiAmIDMxKSk7Ci0Jd3JpdGVsKHUsIEdQSU9fT1VUKHBpbikpOworCQl1ICY9IH4oMSA8PCBwaW4pOworCXdyaXRlbCh1LCBHUElPX09VVChvY2hpcCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfYmxpbmtpbmcodW5zaWduZWQgcGluLCBpbnQgYmxpbmspCitzdGF0aWMgaW5saW5lIHZvaWQKK19fc2V0X2JsaW5raW5nKHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwLCB1bnNpZ25lZCBwaW4sIGludCBibGluaykKIHsKIAl1MzIgdTsKIAotCXUgPSByZWFkbChHUElPX0JMSU5LX0VOKHBpbikpOworCXUgPSByZWFkbChHUElPX0JMSU5LX0VOKG9jaGlwKSk7CiAJaWYgKGJsaW5rKQotCQl1IHw9IDEgPDwgKHBpbiAmIDMxKTsKKwkJdSB8PSAxIDw8IHBpbjsKIAllbHNlCi0JCXUgJj0gfigxIDw8IChwaW4gJiAzMSkpOwotCXdyaXRlbCh1LCBHUElPX0JMSU5LX0VOKHBpbikpOworCQl1ICY9IH4oMSA8PCBwaW4pOworCXdyaXRlbCh1LCBHUElPX0JMSU5LX0VOKG9jaGlwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9yaW9uX2dwaW9faXNfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgbW9kZSkKK3N0YXRpYyBpbmxpbmUgaW50Citvcmlvbl9ncGlvX2lzX3ZhbGlkKHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwLCB1bnNpZ25lZCBwaW4sIGludCBtb2RlKQogewotCWlmIChwaW4gPCBHUElPX01BWCkgewotCQlpZiAoKG1vZGUgJiBHUElPX0lOUFVUX09LKSAmJiAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkX2lucHV0KSkKLQkJCWdvdG8gZXJyX291dDsKLQkJaWYgKChtb2RlICYgR1BJT19PVVRQVVRfT0spICYmICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWRfb3V0cHV0KSkKLQkJCWdvdG8gZXJyX291dDsKLQkJcmV0dXJuIHRydWU7Ci0JfQorCWlmIChwaW4gPj0gb2NoaXAtPmNoaXAubmdwaW8pCisJCWdvdG8gZXJyX291dDsKKworCWlmICgobW9kZSAmIEdQSU9fSU5QVVRfT0spICYmICF0ZXN0X2JpdChwaW4sICZvY2hpcC0+dmFsaWRfaW5wdXQpKQorCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAoKG1vZGUgJiBHUElPX09VVFBVVF9PSykgJiYgIXRlc3RfYml0KHBpbiwgJm9jaGlwLT52YWxpZF9vdXRwdXQpKQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZXR1cm4gMTsKIAogZXJyX291dDoKIAlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CkBAIC03NSwxMzQgKzE0MywxNTUgQEAKIC8qCiAgKiBHRU5FUklDX0dQSU8gcHJpbWl0aXZlcy4KICAqLwotc3RhdGljIGludCBvcmlvbl9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghb3Jpb25fZ3Bpb19pc192YWxpZChwaW4sIEdQSU9fSU5QVVRfT0spKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCS8qIENvbmZpZ3VyZSBHUElPIGRpcmVjdGlvbi4gKi8KLQlfX3NldF9kaXJlY3Rpb24ocGluLCAxKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpb25fZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQotewotCWludCB2YWw7Ci0KLQlpZiAocmVhZGwoR1BJT19JT19DT05GKHBpbikpICYgKDEgPDwgKHBpbiAmIDMxKSkpCi0JCXZhbCA9IHJlYWRsKEdQSU9fREFUQV9JTihwaW4pKSBeIHJlYWRsKEdQSU9fSU5fUE9MKHBpbikpOwotCWVsc2UKLQkJdmFsID0gcmVhZGwoR1BJT19PVVQocGluKSk7Ci0KLQlyZXR1cm4gKHZhbCA+PiAocGluICYgMzEpKSAmIDE7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpb25fZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbiwKLQlpbnQgdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghb3Jpb25fZ3Bpb19pc192YWxpZChwaW4sIEdQSU9fT1VUUFVUX09LKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0KLQkvKiBEaXNhYmxlIGJsaW5raW5nLiAqLwotCV9fc2V0X2JsaW5raW5nKHBpbiwgMCk7Ci0KLQkvKiBDb25maWd1cmUgR1BJTyBvdXRwdXQgdmFsdWUuICovCi0JX19zZXRfbGV2ZWwocGluLCB2YWx1ZSk7Ci0KLQkvKiBDb25maWd1cmUgR1BJTyBkaXJlY3Rpb24uICovCi0JX19zZXRfZGlyZWN0aW9uKHBpbiwgMCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBvcmlvbl9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4sCi0JaW50IHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0KLQkvKiBDb25maWd1cmUgR1BJTyBvdXRwdXQgdmFsdWUuICovCi0JX19zZXRfbGV2ZWwocGluLCB2YWx1ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBvcmlvbl9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQogewotCWlmIChvcmlvbl9ncGlvX2lzX3ZhbGlkKHBpbiwgR1BJT19JTlBVVF9PSykgfHwKLQkgICAgb3Jpb25fZ3Bpb19pc192YWxpZChwaW4sIEdQSU9fT1VUUFVUX09LKSkKKwlzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwLCBjaGlwKTsKKworCWlmIChvcmlvbl9ncGlvX2lzX3ZhbGlkKG9jaGlwLCBwaW4sIEdQSU9fSU5QVVRfT0spIHx8CisJICAgIG9yaW9uX2dwaW9faXNfdmFsaWQob2NoaXAsIHBpbiwgR1BJT19PVVRQVVRfT0spKQogCQlyZXR1cm4gMDsKKwogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBvcmlvbl9ncGlvY2hpcCA9IHsKLQkubGFiZWwJCQk9ICJvcmlvbl9ncGlvIiwKLQkuZGlyZWN0aW9uX2lucHV0CT0gb3Jpb25fZ3Bpb19kaXJlY3Rpb25faW5wdXQsCi0JLmdldAkJCT0gb3Jpb25fZ3Bpb19nZXRfdmFsdWUsCi0JLmRpcmVjdGlvbl9vdXRwdXQJPSBvcmlvbl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCi0JLnNldAkJCT0gb3Jpb25fZ3Bpb19zZXRfdmFsdWUsCi0JLnJlcXVlc3QJCT0gb3Jpb25fZ3Bpb19yZXF1ZXN0LAotCS5iYXNlCQkJPSAwLAotCS5uZ3BpbwkJCT0gR1BJT19NQVgsCi0JLmNhbl9zbGVlcAkJPSAwLAotfTsKLQotdm9pZCBfX2luaXQgb3Jpb25fZ3Bpb19pbml0KHZvaWQpCitzdGF0aWMgaW50IG9yaW9uX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKIHsKLQlncGlvY2hpcF9hZGQoJm9yaW9uX2dwaW9jaGlwKTsKKwlzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwLCBjaGlwKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFvcmlvbl9ncGlvX2lzX3ZhbGlkKG9jaGlwLCBwaW4sIEdQSU9fSU5QVVRfT0spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvY2hpcC0+bG9jaywgZmxhZ3MpOworCV9fc2V0X2RpcmVjdGlvbihvY2hpcCwgcGluLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY2hpcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb3Jpb25fZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQoreworCXN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwID0KKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAsIGNoaXApOworCWludCB2YWw7CisKKwlpZiAocmVhZGwoR1BJT19JT19DT05GKG9jaGlwKSkgJiAoMSA8PCBwaW4pKSB7CisJCXZhbCA9IHJlYWRsKEdQSU9fREFUQV9JTihvY2hpcCkpIF4gcmVhZGwoR1BJT19JTl9QT0wob2NoaXApKTsKKwl9IGVsc2UgeworCQl2YWwgPSByZWFkbChHUElPX09VVChvY2hpcCkpOworCX0KKworCXJldHVybiAodmFsID4+IHBpbikgJiAxOworfQorCitzdGF0aWMgaW50Citvcmlvbl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXAgPQorCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG9yaW9uX2dwaW9fY2hpcCwgY2hpcCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghb3Jpb25fZ3Bpb19pc192YWxpZChvY2hpcCwgcGluLCBHUElPX09VVFBVVF9PSykpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9jaGlwLT5sb2NrLCBmbGFncyk7CisJX19zZXRfYmxpbmtpbmcob2NoaXAsIHBpbiwgMCk7CisJX19zZXRfbGV2ZWwob2NoaXAsIHBpbiwgdmFsdWUpOworCV9fc2V0X2RpcmVjdGlvbihvY2hpcCwgcGluLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY2hpcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW9uX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQoreworCXN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwID0KKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAsIGNoaXApOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2NoaXAtPmxvY2ssIGZsYWdzKTsKKwlfX3NldF9sZXZlbChvY2hpcCwgcGluLCB2YWx1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2NoaXAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBvcmlvbl9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4pCit7CisJc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXAgPQorCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG9yaW9uX2dwaW9fY2hpcCwgY2hpcCk7CisKKwlyZXR1cm4gb2NoaXAtPnNlY29uZGFyeV9pcnFfYmFzZSArIHBpbjsKK30KKworCiAvKgogICogT3Jpb24tc3BlY2lmaWMgR1BJTyBBUEkgZXh0ZW5zaW9ucy4KICAqLworc3RhdGljIHN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9yaW9uX2dwaW9fY2hpcF9maW5kKGludCBwaW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgb3Jpb25fZ3Bpb19jaGlwX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXAgPSBvcmlvbl9ncGlvX2NoaXBzICsgaTsKKwkJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9ICZvY2hpcC0+Y2hpcDsKKworCQlpZiAocGluID49IGNoaXAtPmJhc2UgJiYgcGluIDwgY2hpcC0+YmFzZSArIGNoaXAtPm5ncGlvKQorCQkJcmV0dXJuIG9jaGlwOworCX0KKworCXJldHVybiBOVUxMOworfQorCiB2b2lkIF9faW5pdCBvcmlvbl9ncGlvX3NldF91bnVzZWQodW5zaWduZWQgcGluKQogeworCXN0cnVjdCBvcmlvbl9ncGlvX2NoaXAgKm9jaGlwID0gb3Jpb25fZ3Bpb19jaGlwX2ZpbmQocGluKTsKKworCWlmIChvY2hpcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlwaW4gLT0gb2NoaXAtPmNoaXAuYmFzZTsKKwogCS8qIENvbmZpZ3VyZSBhcyBvdXRwdXQsIGRyaXZlIGxvdy4gKi8KLQlfX3NldF9sZXZlbChwaW4sIDApOwotCV9fc2V0X2RpcmVjdGlvbihwaW4sIDApOworCV9fc2V0X2xldmVsKG9jaGlwLCBwaW4sIDApOworCV9fc2V0X2RpcmVjdGlvbihvY2hpcCwgcGluLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgbW9kZSkKIHsKKwlzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCA9IG9yaW9uX2dwaW9fY2hpcF9maW5kKHBpbik7CisKKwlpZiAob2NoaXAgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcGluIC09IG9jaGlwLT5jaGlwLmJhc2U7CisKIAlpZiAobW9kZSA9PSAxKQogCQltb2RlID0gR1BJT19JTlBVVF9PSyB8IEdQSU9fT1VUUFVUX09LOworCiAJaWYgKG1vZGUgJiBHUElPX0lOUFVUX09LKQotCQlfX3NldF9iaXQocGluLCBncGlvX3ZhbGlkX2lucHV0KTsKKwkJX19zZXRfYml0KHBpbiwgJm9jaGlwLT52YWxpZF9pbnB1dCk7CiAJZWxzZQotCQlfX2NsZWFyX2JpdChwaW4sIGdwaW9fdmFsaWRfaW5wdXQpOworCQlfX2NsZWFyX2JpdChwaW4sICZvY2hpcC0+dmFsaWRfaW5wdXQpOworCiAJaWYgKG1vZGUgJiBHUElPX09VVFBVVF9PSykKLQkJX19zZXRfYml0KHBpbiwgZ3Bpb192YWxpZF9vdXRwdXQpOworCQlfX3NldF9iaXQocGluLCAmb2NoaXAtPnZhbGlkX291dHB1dCk7CiAJZWxzZQotCQlfX2NsZWFyX2JpdChwaW4sIGdwaW9fdmFsaWRfb3V0cHV0KTsKKwkJX19jbGVhcl9iaXQocGluLCAmb2NoaXAtPnZhbGlkX291dHB1dCk7CiB9CiAKIHZvaWQgb3Jpb25fZ3Bpb19zZXRfYmxpbmsodW5zaWduZWQgcGluLCBpbnQgYmxpbmspCiB7CisJc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXAgPSBvcmlvbl9ncGlvX2NoaXBfZmluZChwaW4pOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJaWYgKG9jaGlwID09IE5VTEwpCisJCXJldHVybjsKIAotCS8qIFNldCBvdXRwdXQgdmFsdWUgdG8gemVyby4gKi8KLQlfX3NldF9sZXZlbChwaW4sIDApOwotCi0JLyogU2V0IGJsaW5raW5nLiAqLwotCV9fc2V0X2JsaW5raW5nKHBpbiwgYmxpbmspOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9jaGlwLT5sb2NrLCBmbGFncyk7CisJX19zZXRfbGV2ZWwob2NoaXAsIHBpbiwgMCk7CisJX19zZXRfYmxpbmtpbmcob2NoaXAsIHBpbiwgYmxpbmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jaGlwLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKG9yaW9uX2dwaW9fc2V0X2JsaW5rKTsKIApAQCAtMjM0LDU5ICszMjMsNzggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgZ3Bpb19pcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgdHlwZSA9IGlycV9kZXNjW2QtPmlycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKKwlzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCB0eXBlOworCisJdHlwZSA9IGlycV9kZXNjW2QtPmlycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKIAlpZiAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpIHsKLQkJaW50IHBpbiA9IGlycV90b19ncGlvKGQtPmlycSk7Ci0JCXdyaXRlbCh+KDEgPDwgKHBpbiAmIDMxKSksIEdQSU9fRURHRV9DQVVTRShwaW4pKTsKKwkJaW50IHBpbiA9IGQtPmlycSAtIG9jaGlwLT5zZWNvbmRhcnlfaXJxX2Jhc2U7CisKKwkJd3JpdGVsKH4oMSA8PCBwaW4pLCBHUElPX0VER0VfQ0FVU0Uob2NoaXApKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9faXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBwaW4gPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwotCWludCB0eXBlID0gaXJxX2Rlc2NbZC0+aXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOwotCXUzMiByZWcgPSAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpID8KLQkJR1BJT19FREdFX01BU0socGluKSA6IEdQSU9fTEVWRUxfTUFTSyhwaW4pOwotCXUzMiB1ID0gcmVhZGwocmVnKTsKLQl1ICY9IH4oMSA8PCAocGluICYgMzEpKTsKLQl3cml0ZWwodSwgcmVnKTsKKwlzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCB0eXBlOworCXZvaWQgX19pb21lbSAqcmVnOworCWludCBwaW47CisKKwl0eXBlID0gaXJxX2Rlc2NbZC0+aXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOworCWlmICh0eXBlICYgKElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSkKKwkJcmVnID0gR1BJT19FREdFX01BU0sob2NoaXApOworCWVsc2UKKwkJcmVnID0gR1BJT19MRVZFTF9NQVNLKG9jaGlwKTsKKworCXBpbiA9IGQtPmlycSAtIG9jaGlwLT5zZWNvbmRhcnlfaXJxX2Jhc2U7CisKKwl3cml0ZWwocmVhZGwocmVnKSAmIH4oMSA8PCBwaW4pLCByZWcpOwogfQogCiBzdGF0aWMgdm9pZCBncGlvX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBwaW4gPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwotCWludCB0eXBlID0gaXJxX2Rlc2NbZC0+aXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOwotCXUzMiByZWcgPSAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpID8KLQkJR1BJT19FREdFX01BU0socGluKSA6IEdQSU9fTEVWRUxfTUFTSyhwaW4pOwotCXUzMiB1ID0gcmVhZGwocmVnKTsKLQl1IHw9IDEgPDwgKHBpbiAmIDMxKTsKLQl3cml0ZWwodSwgcmVnKTsKKwlzdHJ1Y3Qgb3Jpb25fZ3Bpb19jaGlwICpvY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCB0eXBlOworCXZvaWQgX19pb21lbSAqcmVnOworCWludCBwaW47CisKKwl0eXBlID0gaXJxX2Rlc2NbZC0+aXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOworCWlmICh0eXBlICYgKElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSkKKwkJcmVnID0gR1BJT19FREdFX01BU0sob2NoaXApOworCWVsc2UKKwkJcmVnID0gR1BJT19MRVZFTF9NQVNLKG9jaGlwKTsKKworCXBpbiA9IGQtPmlycSAtIG9jaGlwLT5zZWNvbmRhcnlfaXJxX2Jhc2U7CisKKwl3cml0ZWwocmVhZGwocmVnKSB8ICgxIDw8IHBpbiksIHJlZyk7CiB9CiAKIHN0YXRpYyBpbnQgZ3Bpb19pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1MzIgdHlwZSkKIHsKLQlpbnQgcGluID0gaXJxX3RvX2dwaW8oZC0+aXJxKTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlpbnQgcGluOwogCXUzMiB1OwogCi0JdSA9IHJlYWRsKEdQSU9fSU9fQ09ORihwaW4pKSAmICgxIDw8IChwaW4gJiAzMSkpOworCXBpbiA9IGQtPmlycSAtIG9jaGlwLT5zZWNvbmRhcnlfaXJxX2Jhc2U7CisKKwl1ID0gcmVhZGwoR1BJT19JT19DT05GKG9jaGlwKSkgJiAoMSA8PCBwaW4pOwogCWlmICghdSkgewogCQlwcmludGsoS0VSTl9FUlIgIm9yaW9uIGdwaW9faXJxX3NldF90eXBlIGZhaWxlZCAiCiAJCQkJIihpcnEgJWQsIHBpbiAlZCkuXG4iLCBkLT5pcnEsIHBpbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRlc2MgPSBpcnFfZGVzYyArIGQtPmlycTsKLQogCS8qCiAJICogU2V0IGVkZ2UvbGV2ZWwgdHlwZS4KIAkgKi8KIAlpZiAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpIHsKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKKwkJc2V0X2lycV9oYW5kbGVyKGQtPmlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKIAl9IGVsc2UgaWYgKHR5cGUgJiAoSVJRX1RZUEVfTEVWRUxfSElHSCB8IElSUV9UWVBFX0xFVkVMX0xPVykpIHsKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7CisJCXNldF9pcnFfaGFuZGxlcihkLT5pcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCBpcnE9JWQgKHR5cGU9JWQpXG4iLCBkLT5pcnEsIHR5cGUpOworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgaXJxPSVkICh0eXBlPSVkKVxuIiwKKwkJICAgICAgIGQtPmlycSwgdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjk0LDMxICs0MDIsMjkgQEAKIAkgKiBDb25maWd1cmUgaW50ZXJydXB0IHBvbGFyaXR5LgogCSAqLwogCWlmICh0eXBlID09IElSUV9UWVBFX0VER0VfUklTSU5HIHx8IHR5cGUgPT0gSVJRX1RZUEVfTEVWRUxfSElHSCkgewotCQl1ID0gcmVhZGwoR1BJT19JTl9QT0wocGluKSk7Ci0JCXUgJj0gfigxIDw8IChwaW4gJiAzMSkpOwotCQl3cml0ZWwodSwgR1BJT19JTl9QT0wocGluKSk7CisJCXUgPSByZWFkbChHUElPX0lOX1BPTChvY2hpcCkpOworCQl1ICY9IH4oMSA8PCBwaW4pOworCQl3cml0ZWwodSwgR1BJT19JTl9QT0wob2NoaXApKTsKIAl9IGVsc2UgaWYgKHR5cGUgPT0gSVJRX1RZUEVfRURHRV9GQUxMSU5HIHx8IHR5cGUgPT0gSVJRX1RZUEVfTEVWRUxfTE9XKSB7Ci0JCXUgPSByZWFkbChHUElPX0lOX1BPTChwaW4pKTsKLQkJdSB8PSAxIDw8IChwaW4gJiAzMSk7Ci0JCXdyaXRlbCh1LCBHUElPX0lOX1BPTChwaW4pKTsKKwkJdSA9IHJlYWRsKEdQSU9fSU5fUE9MKG9jaGlwKSk7CisJCXUgfD0gMSA8PCBwaW47CisJCXdyaXRlbCh1LCBHUElPX0lOX1BPTChvY2hpcCkpOwogCX0gZWxzZSBpZiAodHlwZSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpIHsKIAkJdTMyIHY7CiAKLQkJdiA9IHJlYWRsKEdQSU9fSU5fUE9MKHBpbikpIF4gcmVhZGwoR1BJT19EQVRBX0lOKHBpbikpOworCQl2ID0gcmVhZGwoR1BJT19JTl9QT0wob2NoaXApKSBeIHJlYWRsKEdQSU9fREFUQV9JTihvY2hpcCkpOwogCiAJCS8qCiAJCSAqIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwKIAkJICovCi0JCXUgPSByZWFkbChHUElPX0lOX1BPTChwaW4pKTsKLQkJaWYgKHYgJiAoMSA8PCAocGluICYgMzEpKSkKLQkJCXUgfD0gMSA8PCAocGluICYgMzEpOwkJLyogZmFsbGluZyAqLworCQl1ID0gcmVhZGwoR1BJT19JTl9QT0wob2NoaXApKTsKKwkJaWYgKHYgJiAoMSA8PCBwaW4pKQorCQkJdSB8PSAxIDw8IHBpbjsJCS8qIGZhbGxpbmcgKi8KIAkJZWxzZQotCQkJdSAmPSB+KDEgPDwgKHBpbiAmIDMxKSk7CS8qIHJpc2luZyAqLwotCQl3cml0ZWwodSwgR1BJT19JTl9QT0wocGluKSk7CisJCQl1ICY9IH4oMSA8PCBwaW4pOwkvKiByaXNpbmcgKi8KKwkJd3JpdGVsKHUsIEdQSU9fSU5fUE9MKG9jaGlwKSk7CiAJfQogCi0JZGVzYy0+c3RhdHVzID0gKGRlc2MtPnN0YXR1cyAmIH5JUlFfVFlQRV9TRU5TRV9NQVNLKSB8IHR5cGU7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMwLDI5ICs0MzYsODcgQEAKIAkuaXJxX3NldF90eXBlCT0gZ3Bpb19pcnFfc2V0X3R5cGUsCiB9OwogCit2b2lkIF9faW5pdCBvcmlvbl9ncGlvX2luaXQoaW50IGdwaW9fYmFzZSwgaW50IG5ncGlvLAorCQkJICAgIHUzMiBiYXNlLCBpbnQgbWFza19vZmZzZXQsIGludCBzZWNvbmRhcnlfaXJxX2Jhc2UpCit7CisJc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXA7CisJaW50IGk7CisKKwlpZiAob3Jpb25fZ3Bpb19jaGlwX2NvdW50ID09IEFSUkFZX1NJWkUob3Jpb25fZ3Bpb19jaGlwcykpCisJCXJldHVybjsKKworCW9jaGlwID0gb3Jpb25fZ3Bpb19jaGlwcyArIG9yaW9uX2dwaW9fY2hpcF9jb3VudDsKKwlvY2hpcC0+Y2hpcC5sYWJlbCA9ICJvcmlvbl9ncGlvIjsKKwlvY2hpcC0+Y2hpcC5yZXF1ZXN0ID0gb3Jpb25fZ3Bpb19yZXF1ZXN0OworCW9jaGlwLT5jaGlwLmRpcmVjdGlvbl9pbnB1dCA9IG9yaW9uX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCW9jaGlwLT5jaGlwLmdldCA9IG9yaW9uX2dwaW9fZ2V0OworCW9jaGlwLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSBvcmlvbl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJb2NoaXAtPmNoaXAuc2V0ID0gb3Jpb25fZ3Bpb19zZXQ7CisJb2NoaXAtPmNoaXAudG9faXJxID0gb3Jpb25fZ3Bpb190b19pcnE7CisJb2NoaXAtPmNoaXAuYmFzZSA9IGdwaW9fYmFzZTsKKwlvY2hpcC0+Y2hpcC5uZ3BpbyA9IG5ncGlvOworCW9jaGlwLT5jaGlwLmNhbl9zbGVlcCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJm9jaGlwLT5sb2NrKTsKKwlvY2hpcC0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKiliYXNlOworCW9jaGlwLT52YWxpZF9pbnB1dCA9IDA7CisJb2NoaXAtPnZhbGlkX291dHB1dCA9IDA7CisJb2NoaXAtPm1hc2tfb2Zmc2V0ID0gbWFza19vZmZzZXQ7CisJb2NoaXAtPnNlY29uZGFyeV9pcnFfYmFzZSA9IHNlY29uZGFyeV9pcnFfYmFzZTsKKworCWdwaW9jaGlwX2FkZCgmb2NoaXAtPmNoaXApOworCisJb3Jpb25fZ3Bpb19jaGlwX2NvdW50Kys7CisKKwkvKgorCSAqIE1hc2sgYW5kIGNsZWFyIEdQSU8gaW50ZXJydXB0cy4KKwkgKi8KKwl3cml0ZWwoMCwgR1BJT19FREdFX0NBVVNFKG9jaGlwKSk7CisJd3JpdGVsKDAsIEdQSU9fRURHRV9NQVNLKG9jaGlwKSk7CisJd3JpdGVsKDAsIEdQSU9fTEVWRUxfTUFTSyhvY2hpcCkpOworCisJZm9yIChpID0gMDsgaSA8IG5ncGlvOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycSA9IHNlY29uZGFyeV9pcnFfYmFzZSArIGk7CisKKwkJc2V0X2lycV9jaGlwKGlycSwgJm9yaW9uX2dwaW9faXJxX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBvY2hpcCk7CisJCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9MRVZFTDsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCX0KK30KKwogdm9pZCBvcmlvbl9ncGlvX2lycV9oYW5kbGVyKGludCBwaW5vZmYpCiB7CisJc3RydWN0IG9yaW9uX2dwaW9fY2hpcCAqb2NoaXA7CiAJdTMyIGNhdXNlOwotCWludCBwaW47CisJaW50IGk7CiAKLQljYXVzZSA9IHJlYWRsKEdQSU9fREFUQV9JTihwaW5vZmYpKSAmIHJlYWRsKEdQSU9fTEVWRUxfTUFTSyhwaW5vZmYpKTsKLQljYXVzZSB8PSByZWFkbChHUElPX0VER0VfQ0FVU0UocGlub2ZmKSkgJiByZWFkbChHUElPX0VER0VfTUFTSyhwaW5vZmYpKTsKKwlvY2hpcCA9IG9yaW9uX2dwaW9fY2hpcF9maW5kKHBpbm9mZik7CisJaWYgKG9jaGlwID09IE5VTEwpCisJCXJldHVybjsKIAotCWZvciAocGluID0gcGlub2ZmOyBwaW4gPCBwaW5vZmYgKyA4OyBwaW4rKykgewotCQlpbnQgaXJxID0gZ3Bpb190b19pcnEocGluKTsKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJY2F1c2UgPSByZWFkbChHUElPX0RBVEFfSU4ob2NoaXApKSAmIHJlYWRsKEdQSU9fTEVWRUxfTUFTSyhvY2hpcCkpOworCWNhdXNlIHw9IHJlYWRsKEdQSU9fRURHRV9DQVVTRShvY2hpcCkpICYgcmVhZGwoR1BJT19FREdFX01BU0sob2NoaXApKTsKIAotCQlpZiAoIShjYXVzZSAmICgxIDw8IChwaW4gJiAzMSkpKSkKKwlmb3IgKGkgPSAwOyBpIDwgb2NoaXAtPmNoaXAubmdwaW87IGkrKykgeworCQlpbnQgaXJxOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwkJaXJxID0gb2NoaXAtPnNlY29uZGFyeV9pcnFfYmFzZSArIGk7CisKKwkJaWYgKCEoY2F1c2UgJiAoMSA8PCBpKSkpCiAJCQljb250aW51ZTsKIAorCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgPT0gSVJRX1RZUEVfRURHRV9CT1RIKSB7CiAJCQkvKiBTd2FwIHBvbGFyaXR5IChyYWNlIHdpdGggR1BJTyBsaW5lKSAqLwogCQkJdTMyIHBvbGFyaXR5OwogCi0JCQlwb2xhcml0eSA9IHJlYWRsKEdQSU9fSU5fUE9MKHBpbikpOwotCQkJcG9sYXJpdHkgXj0gMSA8PCAocGluICYgMzEpOwotCQkJd3JpdGVsKHBvbGFyaXR5LCBHUElPX0lOX1BPTChwaW4pKTsKKwkJCXBvbGFyaXR5ID0gcmVhZGwoR1BJT19JTl9QT0wob2NoaXApKTsKKwkJCXBvbGFyaXR5IF49IDEgPDwgaTsKKwkJCXdyaXRlbChwb2xhcml0eSwgR1BJT19JTl9QT0wob2NoaXApKTsKIAkJfQorCiAJCWRlc2NfaGFuZGxlX2lycShpcnEsIGRlc2MpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaAppbmRleCAwN2M0MzBmLi41NTc4Yjk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZ3Bpby5oCkBAIC0xMiw2ICsxMiw3IEBACiAjZGVmaW5lIF9fUExBVF9HUElPX0gKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CiAKIC8qCiAgKiBHRU5FUklDX0dQSU8gcHJpbWl0aXZlcy4KQEAgLTE5LDYgKzIwLDcgQEAKICNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUgIF9fZ3Bpb19nZXRfdmFsdWUKICNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUgIF9fZ3Bpb19zZXRfdmFsdWUKICNkZWZpbmUgZ3Bpb19jYW5zbGVlcCAgIF9fZ3Bpb19jYW5zbGVlcAorI2RlZmluZSBncGlvX3RvX2lycSAgICAgX19ncGlvX3RvX2lycQogCiAvKgogICogT3Jpb24tc3BlY2lmaWMgR1BJTyBBUEkgZXh0ZW5zaW9ucy4KQEAgLTMxLDcgKzMzLDggQEAKIHZvaWQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgbW9kZSk7CiAKIC8qIEluaXRpYWxpemUgZ3Bpb2xpYi4gKi8KLXZvaWQgX19pbml0IG9yaW9uX2dwaW9faW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IG9yaW9uX2dwaW9faW5pdChpbnQgZ3Bpb19iYXNlLCBpbnQgbmdwaW8sCisJCQkgICAgdTMyIGJhc2UsIGludCBtYXNrX29mZnNldCwgaW50IHNlY29uZGFyeV9pcnFfYmFzZSk7CiAKIC8qCiAgKiBHUElPIGludGVycnVwdCBoYW5kbGluZy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L3RpbWUuaCBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L3RpbWUuaAppbmRleCBjMDZjYTM1Li40ZDVmMWY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC90aW1lLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvdGltZS5oCkBAIC0xMSw3ICsxMSwxMCBAQAogI2lmbmRlZiBfX1BMQVRfVElNRV9ICiAjZGVmaW5lIF9fUExBVF9USU1FX0gKIAotdm9pZCBvcmlvbl90aW1lX2luaXQodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHRjbGspOwordm9pZCBvcmlvbl90aW1lX3NldF9iYXNlKHUzMiB0aW1lcl9iYXNlKTsKKwordm9pZCBvcmlvbl90aW1lX2luaXQodTMyIGJyaWRnZV9iYXNlLCB1MzIgYnJpZGdlX3RpbWVyMV9jbHJfbWFzaywKKwkJICAgICB1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdGNsayk7CiAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vdGltZS5jCmluZGV4IGMzZGEyNDcuLjc0MmIwMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vdGltZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vdGltZS5jCkBAIC0xOCwyOCArMTgsNDIgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vc2NoZWRfY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8bWFjaC9icmlkZ2UtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyoKLSAqIE51bWJlciBvZiB0aW1lciB0aWNrcyBwZXIgamlmZnkuCisgKiBNQnVzIGJyaWRnZSBibG9jayByZWdpc3RlcnMuCiAgKi8KLXN0YXRpYyB1MzIgdGlja3NfcGVyX2ppZmZ5OworI2RlZmluZSBCUklER0VfQ0FVU0VfT0ZGCTB4MDExMAorI2RlZmluZSBCUklER0VfTUFTS19PRkYJCTB4MDExNAorI2RlZmluZSAgQlJJREdFX0lOVF9USU1FUjAJIDB4MDAwMgorI2RlZmluZSAgQlJJREdFX0lOVF9USU1FUjEJIDB4MDAwNAogCiAKIC8qCiAgKiBUaW1lciBibG9jayByZWdpc3RlcnMuCiAgKi8KLSNkZWZpbmUgVElNRVJfQ1RSTAkJKFRJTUVSX1ZJUlRfQkFTRSArIDB4MDAwMCkKLSNkZWZpbmUgIFRJTUVSMF9FTgkJMHgwMDAxCi0jZGVmaW5lICBUSU1FUjBfUkVMT0FEX0VOCTB4MDAwMgotI2RlZmluZSAgVElNRVIxX0VOCQkweDAwMDQKLSNkZWZpbmUgIFRJTUVSMV9SRUxPQURfRU4JMHgwMDA4Ci0jZGVmaW5lIFRJTUVSMF9SRUxPQUQJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMTApCi0jZGVmaW5lIFRJTUVSMF9WQUwJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMTQpCi0jZGVmaW5lIFRJTUVSMV9SRUxPQUQJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMTgpCi0jZGVmaW5lIFRJTUVSMV9WQUwJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMWMpCisjZGVmaW5lIFRJTUVSX0NUUkxfT0ZGCQkweDAwMDAKKyNkZWZpbmUgIFRJTUVSMF9FTgkJIDB4MDAwMQorI2RlZmluZSAgVElNRVIwX1JFTE9BRF9FTgkgMHgwMDAyCisjZGVmaW5lICBUSU1FUjFfRU4JCSAweDAwMDQKKyNkZWZpbmUgIFRJTUVSMV9SRUxPQURfRU4JIDB4MDAwOAorI2RlZmluZSBUSU1FUjBfUkVMT0FEX09GRgkweDAwMTAKKyNkZWZpbmUgVElNRVIwX1ZBTF9PRkYJCTB4MDAxNAorI2RlZmluZSBUSU1FUjFfUkVMT0FEX09GRgkweDAwMTgKKyNkZWZpbmUgVElNRVIxX1ZBTF9PRkYJCTB4MDAxYworCisKKy8qCisgKiBTb0Mtc3BlY2lmaWMgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgX19pb21lbSAqYnJpZGdlX2Jhc2U7CitzdGF0aWMgdTMyIGJyaWRnZV90aW1lcjFfY2xyX21hc2s7CitzdGF0aWMgdm9pZCBfX2lvbWVtICp0aW1lcl9iYXNlOworCisKKy8qCisgKiBOdW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIGppZmZ5LgorICovCitzdGF0aWMgdTMyIHRpY2tzX3Blcl9qaWZmeTsKIAogCiAvKgpAQCAtNTAsMTQgKzY0LDE0IEBACiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JdTMyIGN5YyA9IDB4ZmZmZmZmZmYgLSByZWFkbChUSU1FUjBfVkFMKTsKKwl1MzIgY3ljID0gfnJlYWRsKHRpbWVyX2Jhc2UgKyBUSU1FUjBfVkFMX09GRik7CiAJcmV0dXJuIGN5Y190b19zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7CiB9CiAKIAogc3RhdGljIHZvaWQgbm90cmFjZSBvcmlvbl91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKIHsKLQl1MzIgY3ljID0gMHhmZmZmZmZmZiAtIHJlYWRsKFRJTUVSMF9WQUwpOworCXUzMiBjeWMgPSB+cmVhZGwodGltZXJfYmFzZSArIFRJTUVSMF9WQUxfT0ZGKTsKIAl1cGRhdGVfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOwogfQogCkBAIC03MSw3ICs4NSw3IEBACiAgKi8KIHN0YXRpYyBjeWNsZV90IG9yaW9uX2Nsa3NyY19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7Ci0JcmV0dXJuIDB4ZmZmZmZmZmYgLSByZWFkbChUSU1FUjBfVkFMKTsKKwlyZXR1cm4gMHhmZmZmZmZmZiAtIHJlYWRsKHRpbWVyX2Jhc2UgKyBUSU1FUjBfVkFMX09GRik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Ugb3Jpb25fY2xrc3JjID0gewpAQCAtMTAxLDIzICsxMTUsMjMgQEAKIAkvKgogCSAqIENsZWFyIGFuZCBlbmFibGUgY2xvY2tldmVudCB0aW1lciBpbnRlcnJ1cHQuCiAJICovCi0Jd3JpdGVsKEJSSURHRV9JTlRfVElNRVIxX0NMUiwgQlJJREdFX0NBVVNFKTsKKwl3cml0ZWwoYnJpZGdlX3RpbWVyMV9jbHJfbWFzaywgYnJpZGdlX2Jhc2UgKyBCUklER0VfQ0FVU0VfT0ZGKTsKIAotCXUgPSByZWFkbChCUklER0VfTUFTSyk7CisJdSA9IHJlYWRsKGJyaWRnZV9iYXNlICsgQlJJREdFX01BU0tfT0ZGKTsKIAl1IHw9IEJSSURHRV9JTlRfVElNRVIxOwotCXdyaXRlbCh1LCBCUklER0VfTUFTSyk7CisJd3JpdGVsKHUsIGJyaWRnZV9iYXNlICsgQlJJREdFX01BU0tfT0ZGKTsKIAogCS8qCiAJICogU2V0dXAgbmV3IGNsb2NrZXZlbnQgdGltZXIgdmFsdWUuCiAJICovCi0Jd3JpdGVsKGRlbHRhLCBUSU1FUjFfVkFMKTsKKwl3cml0ZWwoZGVsdGEsIHRpbWVyX2Jhc2UgKyBUSU1FUjFfVkFMX09GRik7CiAKIAkvKgogCSAqIEVuYWJsZSB0aGUgdGltZXIuCiAJICovCi0JdSA9IHJlYWRsKFRJTUVSX0NUUkwpOworCXUgPSByZWFkbCh0aW1lcl9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOwogCXUgPSAodSAmIH5USU1FUjFfUkVMT0FEX0VOKSB8IFRJTUVSMV9FTjsKLQl3cml0ZWwodSwgVElNRVJfQ1RSTCk7CisJd3JpdGVsKHUsIHRpbWVyX2Jhc2UgKyBUSU1FUl9DVFJMX09GRik7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKQEAgLTEzNSwzNyArMTQ5LDM4IEBACiAJCS8qCiAJCSAqIFNldHVwIHRpbWVyIHRvIGZpcmUgYXQgMS9IWiBpbnRlcnZhbHMuCiAJCSAqLwotCQl3cml0ZWwodGlja3NfcGVyX2ppZmZ5IC0gMSwgVElNRVIxX1JFTE9BRCk7Ci0JCXdyaXRlbCh0aWNrc19wZXJfamlmZnkgLSAxLCBUSU1FUjFfVkFMKTsKKwkJd3JpdGVsKHRpY2tzX3Blcl9qaWZmeSAtIDEsIHRpbWVyX2Jhc2UgKyBUSU1FUjFfUkVMT0FEX09GRik7CisJCXdyaXRlbCh0aWNrc19wZXJfamlmZnkgLSAxLCB0aW1lcl9iYXNlICsgVElNRVIxX1ZBTF9PRkYpOwogCiAJCS8qCiAJCSAqIEVuYWJsZSB0aW1lciBpbnRlcnJ1cHQuCiAJCSAqLwotCQl1ID0gcmVhZGwoQlJJREdFX01BU0spOwotCQl3cml0ZWwodSB8IEJSSURHRV9JTlRfVElNRVIxLCBCUklER0VfTUFTSyk7CisJCXUgPSByZWFkbChicmlkZ2VfYmFzZSArIEJSSURHRV9NQVNLX09GRik7CisJCXdyaXRlbCh1IHwgQlJJREdFX0lOVF9USU1FUjEsIGJyaWRnZV9iYXNlICsgQlJJREdFX01BU0tfT0ZGKTsKIAogCQkvKgogCQkgKiBFbmFibGUgdGltZXIuCiAJCSAqLwotCQl1ID0gcmVhZGwoVElNRVJfQ1RSTCk7Ci0JCXdyaXRlbCh1IHwgVElNRVIxX0VOIHwgVElNRVIxX1JFTE9BRF9FTiwgVElNRVJfQ1RSTCk7CisJCXUgPSByZWFkbCh0aW1lcl9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOworCQl3cml0ZWwodSB8IFRJTUVSMV9FTiB8IFRJTUVSMV9SRUxPQURfRU4sCisJCSAgICAgICB0aW1lcl9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIERpc2FibGUgdGltZXIuCiAJCSAqLwotCQl1ID0gcmVhZGwoVElNRVJfQ1RSTCk7Ci0JCXdyaXRlbCh1ICYgflRJTUVSMV9FTiwgVElNRVJfQ1RSTCk7CisJCXUgPSByZWFkbCh0aW1lcl9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOworCQl3cml0ZWwodSAmIH5USU1FUjFfRU4sIHRpbWVyX2Jhc2UgKyBUSU1FUl9DVFJMX09GRik7CiAKIAkJLyoKIAkJICogRGlzYWJsZSB0aW1lciBpbnRlcnJ1cHQuCiAJCSAqLwotCQl1ID0gcmVhZGwoQlJJREdFX01BU0spOwotCQl3cml0ZWwodSAmIH5CUklER0VfSU5UX1RJTUVSMSwgQlJJREdFX01BU0spOworCQl1ID0gcmVhZGwoYnJpZGdlX2Jhc2UgKyBCUklER0VfTUFTS19PRkYpOworCQl3cml0ZWwodSAmIH5CUklER0VfSU5UX1RJTUVSMSwgYnJpZGdlX2Jhc2UgKyBCUklER0VfTUFTS19PRkYpOwogCiAJCS8qCiAJCSAqIEFDSyBwZW5kaW5nIHRpbWVyIGludGVycnVwdC4KIAkJICovCi0JCXdyaXRlbChCUklER0VfSU5UX1RJTUVSMV9DTFIsIEJSSURHRV9DQVVTRSk7CisJCXdyaXRlbChicmlkZ2VfdGltZXIxX2Nscl9tYXNrLCBicmlkZ2VfYmFzZSArIEJSSURHRV9DQVVTRV9PRkYpOwogCiAJfQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTE4NSw3ICsyMDAsNyBAQAogCS8qCiAJICogQUNLIHRpbWVyIGludGVycnVwdCBhbmQgY2FsbCBldmVudCBoYW5kbGVyLgogCSAqLwotCXdyaXRlbChCUklER0VfSU5UX1RJTUVSMV9DTFIsIEJSSURHRV9DQVVTRSk7CisJd3JpdGVsKGJyaWRnZV90aW1lcjFfY2xyX21hc2ssIGJyaWRnZV9iYXNlICsgQlJJREdFX0NBVVNFX09GRik7CiAJb3Jpb25fY2xrZXZ0LmV2ZW50X2hhbmRsZXIoJm9yaW9uX2Nsa2V2dCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xOTcsMzEgKzIxMiw0NSBAQAogCS5oYW5kbGVyCT0gb3Jpb25fdGltZXJfaW50ZXJydXB0CiB9OwogCi12b2lkIF9faW5pdCBvcmlvbl90aW1lX2luaXQodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHRjbGspCit2b2lkIF9faW5pdAorb3Jpb25fdGltZV9zZXRfYmFzZSh1MzIgX3RpbWVyX2Jhc2UpCit7CisJdGltZXJfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilfdGltZXJfYmFzZTsKK30KKwordm9pZCBfX2luaXQKK29yaW9uX3RpbWVfaW5pdCh1MzIgX2JyaWRnZV9iYXNlLCB1MzIgX2JyaWRnZV90aW1lcjFfY2xyX21hc2ssCisJCXVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0Y2xrKQogewogCXUzMiB1OwogCisJLyoKKwkgKiBTZXQgU29DLXNwZWNpZmljIGRhdGEuCisJICovCisJYnJpZGdlX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopX2JyaWRnZV9iYXNlOworCWJyaWRnZV90aW1lcjFfY2xyX21hc2sgPSBfYnJpZGdlX3RpbWVyMV9jbHJfbWFzazsKKwogCXRpY2tzX3Blcl9qaWZmeSA9ICh0Y2xrICsgSFovMikgLyBIWjsKIAogCS8qCi0JICogU2V0IHNjYWxlIGFuZCB0aW1lciBmb3Igc2NoZWRfY2xvY2sKKwkgKiBTZXQgc2NhbGUgYW5kIHRpbWVyIGZvciBzY2hlZF9jbG9jay4KIAkgKi8KIAlzZXR1cF9zY2hlZF9jbG9jayh0Y2xrKTsKIAogCS8qCiAJICogU2V0dXAgZnJlZS1ydW5uaW5nIGNsb2Nrc291cmNlIHRpbWVyIChpbnRlcnJ1cHRzCi0JICogZGlzYWJsZWQuKQorCSAqIGRpc2FibGVkKS4KIAkgKi8KLQl3cml0ZWwoMHhmZmZmZmZmZiwgVElNRVIwX1ZBTCk7Ci0Jd3JpdGVsKDB4ZmZmZmZmZmYsIFRJTUVSMF9SRUxPQUQpOwotCXUgPSByZWFkbChCUklER0VfTUFTSyk7Ci0Jd3JpdGVsKHUgJiB+QlJJREdFX0lOVF9USU1FUjAsIEJSSURHRV9NQVNLKTsKLQl1ID0gcmVhZGwoVElNRVJfQ1RSTCk7Ci0Jd3JpdGVsKHUgfCBUSU1FUjBfRU4gfCBUSU1FUjBfUkVMT0FEX0VOLCBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiwgdGltZXJfYmFzZSArIFRJTUVSMF9WQUxfT0ZGKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiwgdGltZXJfYmFzZSArIFRJTUVSMF9SRUxPQURfT0ZGKTsKKwl1ID0gcmVhZGwoYnJpZGdlX2Jhc2UgKyBCUklER0VfTUFTS19PRkYpOworCXdyaXRlbCh1ICYgfkJSSURHRV9JTlRfVElNRVIwLCBicmlkZ2VfYmFzZSArIEJSSURHRV9NQVNLX09GRik7CisJdSA9IHJlYWRsKHRpbWVyX2Jhc2UgKyBUSU1FUl9DVFJMX09GRik7CisJd3JpdGVsKHUgfCBUSU1FUjBfRU4gfCBUSU1FUjBfUkVMT0FEX0VOLCB0aW1lcl9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOwogCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZvcmlvbl9jbGtzcmMsIHRjbGspOwogCiAJLyoKLQkgKiBTZXR1cCBjbG9ja2V2ZW50IHRpbWVyIChpbnRlcnJ1cHQtZHJpdmVuLikKKwkgKiBTZXR1cCBjbG9ja2V2ZW50IHRpbWVyIChpbnRlcnJ1cHQtZHJpdmVuKS4KIAkgKi8KIAlzZXR1cF9pcnEoaXJxLCAmb3Jpb25fdGltZXJfaXJxKTsKIAlvcmlvbl9jbGtldnQubXVsdCA9IGRpdl9zYyh0Y2xrLCBOU0VDX1BFUl9TRUMsIG9yaW9uX2Nsa2V2dC5zaGlmdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnCmluZGV4IGViMTA1ZTYuLmQ5YzQwOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnCkBAIC01NiwxMyArNTYsNiBAQAogCWhlbHAKIAkgIENsb2NrIGNvZGUgZm9yIHN1cHBvcnRpbmcgRENMSy9DTEtPVVQgb24gUzNDMjRYWCBhcmNoaXRlY3R1cmVzCiAKLWNvbmZpZyBTM0MyNFhYX1BXTQotCWJvb2wgIlBXTSBkZXZpY2Ugc3VwcG9ydCIKLQlzZWxlY3QgSEFWRV9QV00KLQloZWxwCi0JICBTdXBwb3J0IGZvciBleHBvcnRpbmcgdGhlIFBXTSB0aW1lciBibG9ja3MgdmlhIHRoZSBwd20gZGV2aWNlCi0JICBzeXN0ZW0uCi0KICMgZ3BpbyBjb25maWd1cmF0aW9ucwogCiBjb25maWcgUzNDMjRYWF9HUElPX0VYVFJBCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZwppbmRleCA1NTdmOGM1Li44NDkyMjk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcKQEAgLTcsMTAgKzcsMTAgQEAKIAogY29uZmlnIFBMQVRfUzVQCiAJYm9vbAotCWRlcGVuZHMgb24gKEFSQ0hfUzVQNjRYMCB8fCBBUkNIX1M1UDY0NDIgfHwgQVJDSF9TNVBDMTAwIHx8IEFSQ0hfUzVQVjIxMCB8fCBBUkNIX1M1UFYzMTApCisJZGVwZW5kcyBvbiAoQVJDSF9TNVA2NFgwIHx8IEFSQ0hfUzVQNjQ0MiB8fCBBUkNIX1M1UEMxMDAgfHwgQVJDSF9TNVBWMjEwIHx8IEFSQ0hfRVhZTk9TNCkKIAlkZWZhdWx0IHkKLQlzZWxlY3QgQVJNX1ZJQyBpZiAhQVJDSF9TNVBWMzEwCi0Jc2VsZWN0IEFSTV9HSUMgaWYgQVJDSF9TNVBWMzEwCisJc2VsZWN0IEFSTV9WSUMgaWYgIUFSQ0hfRVhZTk9TNAorCXNlbGVjdCBBUk1fR0lDIGlmIEFSQ0hfRVhZTk9TNAogCXNlbGVjdCBOT19JT1BPUlQKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgUzNDX0dQSU9fVFJBQ0sKQEAgLTM3LDExICszNywxNiBAQAogCWhlbHAKIAkgIENvbW1vbiBjb2RlIGZvciB0aGUgR1BJTyBpbnRlcnJ1cHRzIChvdGhlciB0aGFuIGV4dGVybmFsIGludGVycnVwdHMuKQogCitjb25maWcgUzVQX0hSVAorCWJvb2wKKwloZWxwCisJICBVc2UgdGhlIEhpZ2ggUmVzb2x1dGlvbiB0aW1lciBzdXBwb3J0CisKIGNvbW1lbnQgIlN5c3RlbSBNTVUiCiAKIGNvbmZpZyBTNVBfU1lTVEVNX01NVQogCWJvb2wgIlM1UCBTWVNURU0gTU1VIgotCWRlcGVuZHMgb24gQVJDSF9TNVBWMzEwCisJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUzQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBTeXN0ZW0gTU1VCiAKQEAgLTYwLDYgKzY1LDExIEBACiAJaGVscAogCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIEZJTUMgY29udHJvbGxlciAyCiAKK2NvbmZpZyBTNVBfREVWX0ZJTUMzCisJYm9vbAorCWhlbHAKKwkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBGSU1DIGNvbnRyb2xsZXIgMworCiBjb25maWcgUzVQX0RFVl9PTkVOQU5ECiAJYm9vbAogCWhlbHAKQEAgLTc0LDMgKzg0LDggQEAKIAlib29sCiAJaGVscAogCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIE1JUEktQ1NJUyBjaGFubmVsIDEKKworY29uZmlnIFM1UF9TRVRVUF9NSVBJUEhZCisJYm9vbAorCWhlbHAKKwkgIENvbXBpbGUgaW4gY29tbW9uIHNldHVwIGNvZGUgZm9yIE1JUEktQ1NJUyBhbmQgTUlQSS1EU0lNIGRldmljZXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zNXAvTWFrZWZpbGUKaW5kZXggNGJkNWNmOS4uNDJhZmZmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvTWFrZWZpbGUKQEAgLTIyLDEyICsyMiwxNSBAQAogb2JqLSQoQ09ORklHX1M1UF9TWVNURU1fTU1VKQkrPSBzeXNtbXUubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gaXJxLXBtLm8KK29iai0kKENPTkZJR19TNVBfSFJUKSAJCSs9IHM1cC10aW1lLm8KIAogIyBkZXZpY2VzCiAKIG9iai0kKENPTkZJR19TNVBfREVWX0ZJTUMwKQkrPSBkZXYtZmltYzAubwogb2JqLSQoQ09ORklHX1M1UF9ERVZfRklNQzEpCSs9IGRldi1maW1jMS5vCiBvYmotJChDT05GSUdfUzVQX0RFVl9GSU1DMikJKz0gZGV2LWZpbWMyLm8KK29iai0kKENPTkZJR19TNVBfREVWX0ZJTUMzKQkrPSBkZXYtZmltYzMubwogb2JqLSQoQ09ORklHX1M1UF9ERVZfT05FTkFORCkJKz0gZGV2LW9uZW5hbmQubwogb2JqLSQoQ09ORklHX1M1UF9ERVZfQ1NJUzApCSs9IGRldi1jc2lzMC5vCiBvYmotJChDT05GSUdfUzVQX0RFVl9DU0lTMSkJKz0gZGV2LWNzaXMxLm8KK29iai0kKENPTkZJR19TNVBfU0VUVVBfTUlQSVBIWSkJKz0gc2V0dXAtbWlwaXBoeS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczVwL2NwdS5jCmluZGV4IDA0N2QzMWMuLmMzYmZlOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2NwdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2NwdS5jCkBAIC0xLDcgKzEsNyBAQAogLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvY3B1LmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCiAgKgogICogUzVQIENQVSBTdXBwb3J0CiAgKgpAQCAtMTIsMTcgKzEyLDIwIEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvczVwNjQ0MC5oPgogI2luY2x1ZGUgPHBsYXQvczVwNjQ0Mi5oPgogI2luY2x1ZGUgPHBsYXQvczVwNjQ1MC5oPgogI2luY2x1ZGUgPHBsYXQvczVwYzEwMC5oPgogI2luY2x1ZGUgPHBsYXQvczVwdjIxMC5oPgotI2luY2x1ZGUgPHBsYXQvczVwdjMxMC5oPgorI2luY2x1ZGUgPHBsYXQvZXh5bm9zNC5oPgogCiAvKiB0YWJsZSBvZiBzdXBwb3J0ZWQgQ1BVcyAqLwogCkBAIC0zMSw3ICszNCw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3M1cDY0NTBbXSA9ICJTNVA2NDUwIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczVwYzEwMFtdID0gIlM1UEMxMDAiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zNXB2MjEwW10gPSAiUzVQVjIxMC9TNVBDMTEwIjsKLXN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczVwdjMxMFtdID0gIlM1UFYzMTAiOworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9leHlub3M0MjEwW10gPSAiRVhZTk9TNDIxMCI7CiAKIHN0YXRpYyBzdHJ1Y3QgY3B1X3RhYmxlIGNwdV9pZHNbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTc1LDEzICs3OCwxMyBAQAogCQkuaW5pdAkJPSBzNXB2MjEwX2luaXQsCiAJCS5uYW1lCQk9IG5hbWVfczVwdjIxMCwKIAl9LCB7Ci0JCS5pZGNvZGUJCT0gMHg0MzIwMDAwMCwKKwkJLmlkY29kZQkJPSAweDQzMjEwMDAwLAogCQkuaWRtYXNrCQk9IDB4ZmZmZmYwMDAsCi0JCS5tYXBfaW8JCT0gczVwdjMxMF9tYXBfaW8sCi0JCS5pbml0X2Nsb2Nrcwk9IHM1cHYzMTBfaW5pdF9jbG9ja3MsCi0JCS5pbml0X3VhcnRzCT0gczVwdjMxMF9pbml0X3VhcnRzLAotCQkuaW5pdAkJPSBzNXB2MzEwX2luaXQsCi0JCS5uYW1lCQk9IG5hbWVfczVwdjMxMCwKKwkJLm1hcF9pbwkJPSBleHlub3M0X21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gZXh5bm9zNF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBleHlub3M0X2luaXRfdWFydHMsCisJCS5pbml0CQk9IGV4eW5vczRfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9leHlub3M0MjEwLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtY3NpczAuYyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1jc2lzMC5jCmluZGV4IGRmYWIxYzguLmUzYWFiZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1jc2lzMC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1jc2lzMC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoKICAqIFM1UCBzZXJpZXMgZGV2aWNlIGRlZmluaXRpb24gZm9yIE1JUEktQ1NJUyBjaGFubmVsIDAKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtY3NpczEuYyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1jc2lzMS5jCmluZGV4IGUzMDUzZjIuLjA4YjkxYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1jc2lzMS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1jc2lzMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoKICAqIFM1UCBzZXJpZXMgZGV2aWNlIGRlZmluaXRpb24gZm9yIE1JUEktQ1NJUyBjaGFubmVsIDEKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtZmltYzMuYyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1maW1jMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzFiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtZmltYzMuYwpAQCAtMCwwICsxLDQzIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9kZXYtZmltYzMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogQmFzZSBTNVAgRklNQzMgcmVzb3VyY2UgYW5kIGRldmljZSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBfZmltYzNfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFM1UF9QQV9GSU1DMywKKwkJLmVuZAk9IFM1UF9QQV9GSU1DMyArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9GSU1DMywKKwkJLmVuZAk9IElSUV9GSU1DMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgczVwX2ZpbWMzX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXBfZGV2aWNlX2ZpbWMzID0geworCS5uYW1lCQk9ICJzNXAtZmltYyIsCisJLmlkCQk9IDMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cF9maW1jM19yZXNvdXJjZSksCisJLnJlc291cmNlCT0gczVwX2ZpbWMzX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sJCT0gJnM1cF9maW1jM19kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9jYW1wb3J0LmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvY2FtcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjg4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvY2FtcG9ydC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBTNVAgc2VyaWVzIGNhbWVyYSBpbnRlcmZhY2UgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBQTEFUX1M1UF9DQU1QT1JUX0hfCisjZGVmaW5lIFBMQVRfUzVQX0NBTVBPUlRfSF8gX19GSUxFX18KKworZW51bSBzNXBfY2FtcG9ydF9pZCB7CisJUzVQX0NBTVBPUlRfQSwKKwlTNVBfQ0FNUE9SVF9CLAorfTsKKworLyoKKyAqIFRoZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGNvbmZpZ3VyZSBHUElPIGZvciB0aGUgY2FtZXJhIHBhcmFsbGVsIGJ1cy4KKyAqIFRoZSBjYW1lcmEgcG9ydCBjYW4gYmUgbXVsdGlwbGV4ZWQgd2l0aCBhbnkgRklNQyBlbnRpdHksIGV2ZW4gbXVsdGlwbGUKKyAqIEZJTUMgZW50aXRpZXMgYXJlIGFsbG93ZWQgdG8gYmUgYXR0YWNoZWQgdG8gYSBzaW5nbGUgcG9ydCBzaW11bHRhbmVvdXNseS4KKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdG8gYmUgdXNlZCBpbiB0aGUgYm9hcmQgc2V0dXAgY29kZS4KKyAqLworaW50IHM1cHYyMTBfZmltY19zZXR1cF9ncGlvKGVudW0gczVwX2NhbXBvcnRfaWQgaWQpOworaW50IGV4eW5vczRfZmltY19zZXR1cF9ncGlvKGVudW0gczVwX2NhbXBvcnRfaWQgaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9jc2lzLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvY3Npcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWUzMDhjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9jc2lzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBTNVAgc2VyaWVzIE1JUEkgQ1NJIHNsYXZlIGRldmljZSBzdXBwb3J0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIFBMQVRfUzVQX0NTSVNfSF8KLSNkZWZpbmUgUExBVF9TNVBfQ1NJU19IXyBfX0ZJTEVfXwotCi0vKioKLSAqIHN0cnVjdCBzNXBfcGxhdGZvcm1fbWlwaV9jc2lzIC0gcGxhdGZvcm0gZGF0YSBmb3IgTUlQSS1DU0lTCi0gKiBAY2xrX3JhdGU6IGJ1cyBjbG9jayBmcmVxdWVuY3kKLSAqIEBsYW5lczogbnVtYmVyIG9mIGRhdGEgbGFuZXMgdXNlZAotICogQGFsaWdubWVudDogZGF0YSBhbGlnbm1lbnQgaW4gYml0cwotICogQGhzX3NldHRsZTogSFMtUlggc2V0dGxlIHRpbWUKLSAqLwotc3RydWN0IHM1cF9wbGF0Zm9ybV9taXBpX2NzaXMgewotCXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7Ci0JdTggbGFuZXM7Ci0JdTggYWxpZ25tZW50OwotCXU4IGhzX3NldHRsZTsKLX07Ci0KLSNlbmRpZiAvKiBQTEFUX1M1UF9DU0lTX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvZXh5bm9zNC5oIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L2V4eW5vczQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDdjYWFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L2V4eW5vczQuaApAQCAtMCwwICsxLDM0IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvZXh5bm9zNC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogSGVhZGVyIGZpbGUgZm9yIGV4eW5vczQgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogQ29tbW9uIGluaXQgY29kZSBmb3IgRVhZTk9TNCByZWxhdGVkIFNvQ3MgKi8KKworZXh0ZXJuIHZvaWQgZXh5bm9zNF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CitleHRlcm4gdm9pZCBleHlub3M0X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIGV4eW5vczRfc2V0dXBfY2xvY2tzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0NQVV9FWFlOT1M0MjEwCisKK2V4dGVybiAgaW50IGV4eW5vczRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGV4eW5vczRfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBleHlub3M0X21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIGV4eW5vczRfaW5pdF9jbG9ja3MoaW50IHh0YWwpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgZXh5bm9zNF90aW1lcjsKKworI2RlZmluZSBleHlub3M0X2luaXRfdWFydHMgZXh5bm9zNF9jb21tb25faW5pdF91YXJ0cworCisjZWxzZQorI2RlZmluZSBleHlub3M0X2luaXRfY2xvY2tzIE5VTEwKKyNkZWZpbmUgZXh5bm9zNF9pbml0X3VhcnRzIE5VTEwKKyNkZWZpbmUgZXh5bm9zNF9tYXBfaW8gTlVMTAorI2RlZmluZSBleHlub3M0X2luaXQgTlVMTAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWlwaV9jc2lzLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWlwaV9jc2lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkMjU0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9taXBpX2NzaXMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBTNVAgc2VyaWVzIE1JUEkgQ1NJIHNsYXZlIGRldmljZSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIFBMQVRfUzVQX01JUElfQ1NJU19IXworI2RlZmluZSBQTEFUX1M1UF9NSVBJX0NTSVNfSF8gX19GSUxFX18KKworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKKworLyoqCisgKiBzdHJ1Y3QgczVwX3BsYXRmb3JtX21pcGlfY3NpcyAtIHBsYXRmb3JtIGRhdGEgZm9yIFM1UCBNSVBJLUNTSVMgZHJpdmVyCisgKiBAY2xrX3JhdGU6IGJ1cyBjbG9jayBmcmVxdWVuY3kKKyAqIEBsYW5lczogbnVtYmVyIG9mIGRhdGEgbGFuZXMgdXNlZAorICogQGFsaWdubWVudDogZGF0YSBhbGlnbm1lbnQgaW4gYml0cworICogQGhzX3NldHRsZTogSFMtUlggc2V0dGxlIHRpbWUKKyAqIEBmaXhlZF9waHlfdmRkOiBmYWxzZSB0byBlbmFibGUgZXh0ZXJuYWwgRC1QSFkgcmVndWxhdG9yIG1hbmFnZW1lbnQgaW4gdGhlCisgKgkJICAgZHJpdmVyIG9yIHRydWUgaW4gY2FzZSB0aGlzIHJlZ3VsYXRvciBoYXMgbm8gZW5hYmxlIGZ1bmN0aW9uCisgKiBAcGh5X2VuYWJsZTogcG9pbnRlciB0byBhIGNhbGxiYWNrIGNvbnRyb2xsaW5nIEQtUEhZIGVuYWJsZS9yZXNldAorICovCitzdHJ1Y3QgczVwX3BsYXRmb3JtX21pcGlfY3NpcyB7CisJdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKKwl1OCBsYW5lczsKKwl1OCBhbGlnbm1lbnQ7CisJdTggaHNfc2V0dGxlOworCWJvb2wgZml4ZWRfcGh5X3ZkZDsKKwlpbnQgKCpwaHlfZW5hYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBib29sIG9uKTsKK307CisKKy8qKgorICogczVwX2NzaXNfcGh5X2VuYWJsZSAtIGdsb2JhbCBNSVBJLUNTSSByZWNlaXZlciBELVBIWSBjb250cm9sCisgKiBAcGRldjogTUlQSS1DU0lTIHBsYXRmb3JtIGRldmljZQorICogQG9uOiB0cnVlIHRvIGVuYWJsZSBELVBIWSBhbmQgZGVhc3NlcnQgaXRzIHJlc2V0CisgKglmYWxzZSB0byBkaXNhYmxlIEQtUEhZCisgKi8KK2ludCBzNXBfY3Npc19waHlfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGJvb2wgb24pOworCisjZW5kaWYgLyogUExBVF9TNVBfTUlQSV9DU0lTX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwLXRpbWUuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXAtdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NWU4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwLXRpbWUuaApAQCAtMCwwICsxLDQwIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwLXRpbWUuaAorICoKKyAqIENvcHlyaWdodCAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgczVwIHRpbWUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfUzVQX1RJTUVfSAorI2RlZmluZSBfX0FTTV9QTEFUX1M1UF9USU1FX0ggX19GSUxFX18KKworLyogUzVQIEhSLVRpbWVyIENsb2NrIG1vZGUgKi8KK2VudW0gczVwX3RpbWVyX21vZGUgeworCVM1UF9QV00wLAorCVM1UF9QV00xLAorCVM1UF9QV00yLAorCVM1UF9QV00zLAorCVM1UF9QV000LAorfTsKKworc3RydWN0IHM1cF90aW1lcl9zb3VyY2UgeworCXVuc2lnbmVkIGludCBldmVudF9pZDsKKwl1bnNpZ25lZCBpbnQgc291cmNlX2lkOworfTsKKworLyogQmUgYWJsZSB0byBzbGVlcCBmb3IgYXRsZWFzdCA0IHNlY29uZHMgKHVzdWFsbHkgbW9yZSkgKi8KKyNkZWZpbmUgUzVQVElNRVJfTUlOX1JBTkdFCTQKKworI2RlZmluZSBUQ05UX01BWAkJMHhmZmZmZmZmZgorI2RlZmluZSBOT05fUEVSSU9ESUMJCTAKKyNkZWZpbmUgUEVSSU9ESUMJCTEKKworZXh0ZXJuIHZvaWQgX19pbml0IHM1cF9zZXRfdGltZXJfc291cmNlKGVudW0gczVwX3RpbWVyX21vZGUgZXZlbnQsCisJCQkJCWVudW0gczVwX3RpbWVyX21vZGUgc291cmNlKTsKK2V4dGVybglzdHJ1Y3Qgc3lzX3RpbWVyIHM1cF90aW1lcjsKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX1M1UF9USU1FX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXB2MzEwLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwdjMxMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjljOTkxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXB2MzEwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwdjMxMC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KLSAqCi0gKiBIZWFkZXIgZmlsZSBmb3IgczVwdjMxMCBjcHUgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0vKiBDb21tb24gaW5pdCBjb2RlIGZvciBTNVBWMzEwIHJlbGF0ZWQgU29DcyAqLwotCi1leHRlcm4gdm9pZCBzNXB2MzEwX2NvbW1vbl9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKLWV4dGVybiB2b2lkIHM1cHYzMTBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpOwotZXh0ZXJuIHZvaWQgczVwdjMxMF9zZXR1cF9jbG9ja3Modm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX1M1UFYzMTAKLQotZXh0ZXJuICBpbnQgczVwdjMxMF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgczVwdjMxMF9pbml0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIHM1cHYzMTBfbWFwX2lvKHZvaWQpOwotZXh0ZXJuIHZvaWQgczVwdjMxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7Ci1leHRlcm4gc3RydWN0IHN5c190aW1lciBzNXB2MzEwX3RpbWVyOwotCi0jZGVmaW5lIHM1cHYzMTBfaW5pdF91YXJ0cyBzNXB2MzEwX2NvbW1vbl9pbml0X3VhcnRzCi0KLSNlbHNlCi0jZGVmaW5lIHM1cHYzMTBfaW5pdF9jbG9ja3MgTlVMTAotI2RlZmluZSBzNXB2MzEwX2luaXRfdWFydHMgTlVMTAotI2RlZmluZSBzNXB2MzEwX21hcF9pbyBOVUxMCi0jZGVmaW5lIHM1cHYzMTBfaW5pdCBOVUxMCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zeXNtbXUuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zeXNtbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUyODNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zeXNtbXUuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIFNhbXN1bmcgU3lzdGVtIE1NVSBkcml2ZXIgZm9yIFM1UCBwbGF0Zm9ybQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX19QTEFUX1NZU01NVV9ICisjZGVmaW5lIF9fQVNNX19QTEFUX1NZU01NVV9IIF9fRklMRV9fCisKK2VudW0gUzVQX1NZU01NVV9JTlRFUlJVUFRfVFlQRSB7CisJU1lTTU1VX1BBR0VGQVVMVCwKKwlTWVNNTVVfQVJfTVVMVElISVQsCisJU1lTTU1VX0FXX01VTFRJSElULAorCVNZU01NVV9CVVNFUlJPUiwKKwlTWVNNTVVfQVJfU0VDVVJJVFksCisJU1lTTU1VX0FSX0FDQ0VTUywKKwlTWVNNTVVfQVdfU0VDVVJJVFksCisJU1lTTU1VX0FXX1BST1RFQ1RJT04sIC8qIDcgKi8KKwlTWVNNTVVfRkFVTFRTX05VTQorfTsKKworI2lmZGVmIENPTkZJR19TNVBfU1lTVEVNX01NVQorCisjaW5jbHVkZSA8bWFjaC9zeXNtbXUuaD4KKworLyoqCisgKiBzNXBfc3lzbW11X2VuYWJsZSgpIC0gZW5hYmxlIHN5c3RlbSBtbXUgb2YgaXAKKyAqIEBpcHM6IFRoZSBpcCBjb25uZWN0ZWQgc3lzdGVtIG1tdS4KKyAqICNwZ2Q6IEJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgMXN0IGxldmVsIHBhZ2UgdGFibGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZSBzeXN0ZW0gbW11IHRvIHRyYW5zZmVyIGFkZHJlc3MKKyAqIGZyb20gdmlydHVhbCBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MKKyAqLwordm9pZCBzNXBfc3lzbW11X2VuYWJsZShzeXNtbXVfaXBzIGlwcywgdW5zaWduZWQgbG9uZyBwZ2QpOworCisvKioKKyAqIHM1cF9zeXNtbXVfZGlzYWJsZSgpIC0gZGlzYWJsZSBzeXNtbXUgbW11IG9mIGlwCisgKiBAaXBzOiBUaGUgaXAgY29ubmVjdGVkIHN5c3RlbSBtbXUuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHN5c3RlbSBtbXUgdG8gdHJhbnNmZXIgYWRkcmVzcworICogZnJvbSB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRkcmVzcworICovCit2b2lkIHM1cF9zeXNtbXVfZGlzYWJsZShzeXNtbXVfaXBzIGlwcyk7CisKKy8qKgorICogczVwX3N5c21tdV9zZXRfdGFibGViYXNlX3BnZCgpIC0gc2V0IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzIHRvIHJlZmVyIHBhZ2UgdGFibGUKKyAqIEBpcHM6IFRoZSBpcCBjb25uZWN0ZWQgc3lzdGVtIG1tdS4KKyAqIEBwZ2Q6IFRoZSBwYWdlIHRhYmxlIGJhc2UgYWRkcmVzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldCBwYWdlIHRhYmxlIGJhc2UgYWRkcmVzcworICogV2hlbiBzeXN0ZW0gbW11IHRyYW5zZmVyIGFkZHJlc3MgZnJvbSB2aXJ0YXVsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRkcmVzcywKKyAqIHN5c3RlbSBtbXUgcmVmZXIgYWRkcmVzcyBpbmZvcm1hdGlvbiBmcm9tIHBhZ2UgdGFibGUKKyAqLwordm9pZCBzNXBfc3lzbW11X3NldF90YWJsZWJhc2VfcGdkKHN5c21tdV9pcHMgaXBzLCB1bnNpZ25lZCBsb25nIHBnZCk7CisKKy8qKgorICogczVwX3N5c21tdV90bGJfaW52YWxpZGF0ZSgpIC0gZmx1c2ggYWxsIFRMQiBlbnRyeSBpbiBzeXN0ZW0gbW11CisgKiBAaXBzOiBUaGUgaXAgY29ubmVjdGVkIHN5c3RlbSBtbXUuCisgKgorICogVGhpcyBmdW5jdGlvbiBmbHVzaCBhbGwgVExCIGVudHJ5IGluIHN5c3RlbSBtbXUKKyAqLwordm9pZCBzNXBfc3lzbW11X3RsYl9pbnZhbGlkYXRlKHN5c21tdV9pcHMgaXBzKTsKKworLyoqIHM1cF9zeXNtbXVfc2V0X2ZhdWx0X2hhbmRsZXIoKSAtIEZhdWx0IGhhbmRsZXIgZm9yIFN5c3RlbSBNTVVzCisgKiBAaXR5cGU6IHR5cGUgb2YgZmF1bHQuCisgKiBAcGd0YWJsZV9iYXNlOiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBwYWdlIHRhYmxlIGJhc2UuIFRoaXMgaXMgMCBpZiBAaXBzIGlzCisgKiAgICAgICAgICAgICAgIFNZU01NVV9CVVNFUlJPUi4KKyAqIEBmYXVsdF9hZGRyOiB0aGUgZGV2aWNlICh2aXJ0dWFsKSBhZGRyZXNzIHRoYXQgdGhlIFN5c3RlbSBNTVUgdHJpZWQgdG8KKyAqICAgICAgICAgICAgIHRyYW5zbGF0ZWQuIFRoaXMgaXMgMCBpZiBAaXBzIGlzIFNZU01NVV9CVVNFUlJPUi4KKyAqIENhbGxlZCB3aGVuIGludGVycnVwdCBvY2N1cnJlZCBieSB0aGUgU3lzdGVtIE1NVXMKKyAqIFRoZSBkZXZpY2UgZHJpdmVycyBvZiBwZXJpcGhlcmFsIGRldmljZXMgdGhhdCBoYXMgYSBTeXN0ZW0gTU1VIGNhbiBpbXBsZW1lbnQKKyAqIGEgZmF1bHQgaGFuZGxlciB0byByZXNvbHZlIGFkZHJlc3MgdHJhbnNsYXRpb24gZmF1bHQgYnkgU3lzdGVtIE1NVS4KKyAqIFRoZSBtZWFuaW5ncyBvZiByZXR1cm4gdmFsdWUgYW5kIHBhcmFtZXRlcnMgYXJlIGRlc2NyaWJlZCBiZWxvdy4KKworICogcmV0dXJuIHZhbHVlOiBub24temVybyBpZiB0aGUgZmF1bHQgaXMgY29ycmVjdGx5IHJlc29sdmVkLgorICogICAgICAgICB6ZXJvIGlmIHRoZSBmYXVsdCBpcyBub3QgaGFuZGxlZC4KKyAqLwordm9pZCBzNXBfc3lzbW11X3NldF9mYXVsdF9oYW5kbGVyKHN5c21tdV9pcHMgaXBzLAorCQkJaW50ICgqaGFuZGxlcikoZW51bSBTNVBfU1lTTU1VX0lOVEVSUlVQVF9UWVBFIGl0eXBlLAorCQkJCQl1bnNpZ25lZCBsb25nIHBndGFibGVfYmFzZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyKSk7CisjZWxzZQorI2RlZmluZSBzNXBfc3lzbW11X2VuYWJsZShpcHMsIHBnZCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzNXBfc3lzbW11X2Rpc2FibGUoaXBzKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHM1cF9zeXNtbXVfc2V0X3RhYmxlYmFzZV9wZ2QoaXBzLCBwZ2QpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgczVwX3N5c21tdV90bGJfaW52YWxpZGF0ZShpcHMpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgczVwX3N5c21tdV9zZXRfZmF1bHRfaGFuZGxlcihpcHMsIGhhbmRsZXIpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmIC8qIF9fQVNNX1BMQVRfU1lTTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS1ncGlvaW50LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9pcnEtZ3Bpb2ludC5jCmluZGV4IDNiNmJmODkuLmNkODdkMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS1ncGlvaW50LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLWdwaW9pbnQuYwpAQCAtMTcsODIgKzE3LDc5IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY29yZS5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KIAotI2RlZmluZSBTNVBfR1BJT1JFRyh4KQkJCShTNVBfVkFfR1BJTyArICh4KSkKKyNkZWZpbmUgR1BJT19CQVNFKGNoaXApCQkoKCh1bnNpZ25lZCBsb25nKShjaGlwKS0+YmFzZSkgJiAweEZGRkZGMDAwdSkKIAotI2RlZmluZSBHUElPSU5UX0NPTl9PRkZTRVQJCTB4NzAwCi0jZGVmaW5lIEdQSU9JTlRfTUFTS19PRkZTRVQJCTB4OTAwCi0jZGVmaW5lIEdQSU9JTlRfUEVORF9PRkZTRVQJCTB4QTAwCisjZGVmaW5lIENPTl9PRkZTRVQJCTB4NzAwCisjZGVmaW5lIE1BU0tfT0ZGU0VUCQkweDkwMAorI2RlZmluZSBQRU5EX09GRlNFVAkJMHhBMDAKKyNkZWZpbmUgUkVHX09GRlNFVCh4KQkJKCh4KSA8PCAyKQogCi1zdGF0aWMgc3RydWN0IHMzY19ncGlvX2NoaXAgKmlycV9jaGlwc1tTNVBfR1BJT0lOVF9HUk9VUF9NQVhOUl07CitzdHJ1Y3QgczVwX2dwaW9pbnRfYmFuayB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWludAkJCXN0YXJ0OworCWludAkJCW5yX2dyb3VwczsKKwlpbnQJCQlpcnE7CisJc3RydWN0IHMzY19ncGlvX2NoaXAJKipjaGlwczsKKwl2b2lkCQkJKCpoYW5kbGVyKSh1bnNpZ25lZCBpbnQsIHN0cnVjdCBpcnFfZGVzYyAqKTsKK307CiAKLXN0YXRpYyBpbnQgczVwX2dwaW9pbnRfZ2V0X2dyb3VwKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9kYXRhKGRhdGEpOwotCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpzM2NfY2hpcCA9IGNvbnRhaW5lcl9vZihjaGlwLAotCQkJc3RydWN0IHMzY19ncGlvX2NoaXAsIGNoaXApOwotCWludCBncm91cDsKLQotCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IFM1UF9HUElPSU5UX0dST1VQX01BWE5SOyBncm91cCsrKQotCQlpZiAoczNjX2NoaXAgPT0gaXJxX2NoaXBzW2dyb3VwXSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIGdyb3VwOwotfQorTElTVF9IRUFEKGJhbmtzKTsKIAogc3RhdGljIGludCBzNXBfZ3Bpb2ludF9nZXRfb2Zmc2V0KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9kYXRhKGRhdGEpOwotCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpzM2NfY2hpcCA9IGNvbnRhaW5lcl9vZihjaGlwLAotCQkJc3RydWN0IHMzY19ncGlvX2NoaXAsIGNoaXApOwotCi0JcmV0dXJuIGRhdGEtPmlycSAtIHMzY19jaGlwLT5pcnFfYmFzZTsKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfZGF0YShkYXRhKTsKKwlyZXR1cm4gZGF0YS0+aXJxIC0gY2hpcC0+aXJxX2Jhc2U7CiB9CiAKIHN0YXRpYyB2b2lkIHM1cF9ncGlvaW50X2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2RhdGEoZGF0YSk7CiAJaW50IGdyb3VwLCBvZmZzZXQsIHBlbmRfb2Zmc2V0OwogCXVuc2lnbmVkIGludCB2YWx1ZTsKIAotCWdyb3VwID0gczVwX2dwaW9pbnRfZ2V0X2dyb3VwKGRhdGEpOworCWdyb3VwID0gY2hpcC0+Z3JvdXA7CiAJb2Zmc2V0ID0gczVwX2dwaW9pbnRfZ2V0X29mZnNldChkYXRhKTsKLQlwZW5kX29mZnNldCA9IGdyb3VwIDw8IDI7CisJcGVuZF9vZmZzZXQgPSBSRUdfT0ZGU0VUKGdyb3VwKTsKIAotCXZhbHVlID0gX19yYXdfcmVhZGwoUzVQX0dQSU9SRUcoR1BJT0lOVF9QRU5EX09GRlNFVCkgKyBwZW5kX29mZnNldCk7Ci0JdmFsdWUgfD0gMSA8PCBvZmZzZXQ7Ci0JX19yYXdfd3JpdGVsKHZhbHVlLCBTNVBfR1BJT1JFRyhHUElPSU5UX1BFTkRfT0ZGU0VUKSArIHBlbmRfb2Zmc2V0KTsKKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKEdQSU9fQkFTRShjaGlwKSArIFBFTkRfT0ZGU0VUICsgcGVuZF9vZmZzZXQpOworCXZhbHVlIHw9IEJJVChvZmZzZXQpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgR1BJT19CQVNFKGNoaXApICsgUEVORF9PRkZTRVQgKyBwZW5kX29mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIHM1cF9ncGlvaW50X21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQogeworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9kYXRhKGRhdGEpOwogCWludCBncm91cCwgb2Zmc2V0LCBtYXNrX29mZnNldDsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAKLQlncm91cCA9IHM1cF9ncGlvaW50X2dldF9ncm91cChkYXRhKTsKKwlncm91cCA9IGNoaXAtPmdyb3VwOwogCW9mZnNldCA9IHM1cF9ncGlvaW50X2dldF9vZmZzZXQoZGF0YSk7Ci0JbWFza19vZmZzZXQgPSBncm91cCA8PCAyOworCW1hc2tfb2Zmc2V0ID0gUkVHX09GRlNFVChncm91cCk7CiAKLQl2YWx1ZSA9IF9fcmF3X3JlYWRsKFM1UF9HUElPUkVHKEdQSU9JTlRfTUFTS19PRkZTRVQpICsgbWFza19vZmZzZXQpOwotCXZhbHVlIHw9IDEgPDwgb2Zmc2V0OwotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgUzVQX0dQSU9SRUcoR1BJT0lOVF9NQVNLX09GRlNFVCkgKyBtYXNrX29mZnNldCk7CisJdmFsdWUgPSBfX3Jhd19yZWFkbChHUElPX0JBU0UoY2hpcCkgKyBNQVNLX09GRlNFVCArIG1hc2tfb2Zmc2V0KTsKKwl2YWx1ZSB8PSBCSVQob2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIEdQSU9fQkFTRShjaGlwKSArIE1BU0tfT0ZGU0VUICsgbWFza19vZmZzZXQpOwogfQogCiBzdGF0aWMgdm9pZCBzNXBfZ3Bpb2ludF91bm1hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQogeworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9kYXRhKGRhdGEpOwogCWludCBncm91cCwgb2Zmc2V0LCBtYXNrX29mZnNldDsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAKLQlncm91cCA9IHM1cF9ncGlvaW50X2dldF9ncm91cChkYXRhKTsKKwlncm91cCA9IGNoaXAtPmdyb3VwOwogCW9mZnNldCA9IHM1cF9ncGlvaW50X2dldF9vZmZzZXQoZGF0YSk7Ci0JbWFza19vZmZzZXQgPSBncm91cCA8PCAyOworCW1hc2tfb2Zmc2V0ID0gUkVHX09GRlNFVChncm91cCk7CiAKLQl2YWx1ZSA9IF9fcmF3X3JlYWRsKFM1UF9HUElPUkVHKEdQSU9JTlRfTUFTS19PRkZTRVQpICsgbWFza19vZmZzZXQpOwotCXZhbHVlICY9IH4oMSA8PCBvZmZzZXQpOwotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgUzVQX0dQSU9SRUcoR1BJT0lOVF9NQVNLX09GRlNFVCkgKyBtYXNrX29mZnNldCk7CisJdmFsdWUgPSBfX3Jhd19yZWFkbChHUElPX0JBU0UoY2hpcCkgKyBNQVNLX09GRlNFVCArIG1hc2tfb2Zmc2V0KTsKKwl2YWx1ZSAmPSB+QklUKG9mZnNldCk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBHUElPX0JBU0UoY2hpcCkgKyBNQVNLX09GRlNFVCArIG1hc2tfb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgczVwX2dwaW9pbnRfbWFza19hY2soc3RydWN0IGlycV9kYXRhICpkYXRhKQpAQCAtMTAzLDEyICsxMDAsMTMgQEAKIAogc3RhdGljIGludCBzNXBfZ3Bpb2ludF9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCB0eXBlKQogeworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9kYXRhKGRhdGEpOwogCWludCBncm91cCwgb2Zmc2V0LCBjb25fb2Zmc2V0OwogCXVuc2lnbmVkIGludCB2YWx1ZTsKIAotCWdyb3VwID0gczVwX2dwaW9pbnRfZ2V0X2dyb3VwKGRhdGEpOworCWdyb3VwID0gY2hpcC0+Z3JvdXA7CiAJb2Zmc2V0ID0gczVwX2dwaW9pbnRfZ2V0X29mZnNldChkYXRhKTsKLQljb25fb2Zmc2V0ID0gZ3JvdXAgPDwgMjsKKwljb25fb2Zmc2V0ID0gUkVHX09GRlNFVChncm91cCk7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgpAQCAtMTMyLDE1ICsxMzAsMTUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdmFsdWUgPSBfX3Jhd19yZWFkbChTNVBfR1BJT1JFRyhHUElPSU5UX0NPTl9PRkZTRVQpICsgY29uX29mZnNldCk7CisJdmFsdWUgPSBfX3Jhd19yZWFkbChHUElPX0JBU0UoY2hpcCkgKyBDT05fT0ZGU0VUICsgY29uX29mZnNldCk7CiAJdmFsdWUgJj0gfigweDcgPDwgKG9mZnNldCAqIDB4NCkpOwogCXZhbHVlIHw9ICh0eXBlIDw8IChvZmZzZXQgKiAweDQpKTsKLQlfX3Jhd193cml0ZWwodmFsdWUsIFM1UF9HUElPUkVHKEdQSU9JTlRfQ09OX09GRlNFVCkgKyBjb25fb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIEdQSU9fQkFTRShjaGlwKSArIENPTl9PRkZTRVQgKyBjb25fb2Zmc2V0KTsKIAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgaXJxX2NoaXAgczVwX2dwaW9pbnQgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHM1cF9ncGlvaW50ID0gewogCS5uYW1lCQk9ICJzNXBfZ3Bpb2ludCIsCiAJLmlycV9hY2sJPSBzNXBfZ3Bpb2ludF9hY2ssCiAJLmlycV9tYXNrCT0gczVwX2dwaW9pbnRfbWFzaywKQEAgLTE1MSwzMCArMTQ5LDI5IEBACiAKIHN0YXRpYyB2b2lkIHM1cF9ncGlvaW50X2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCWludCBncm91cCwgb2Zmc2V0LCBwZW5kX29mZnNldCwgbWFza19vZmZzZXQ7Ci0JaW50IHJlYWxfaXJxOworCXN0cnVjdCBzNXBfZ3Bpb2ludF9iYW5rICpiYW5rID0gZ2V0X2lycV9kYXRhKGlycSk7CisJaW50IGdyb3VwLCBwZW5kX29mZnNldCwgbWFza19vZmZzZXQ7CiAJdW5zaWduZWQgaW50IHBlbmQsIG1hc2s7CiAKLQlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBTNVBfR1BJT0lOVF9HUk9VUF9NQVhOUjsgZ3JvdXArKykgewotCQlwZW5kX29mZnNldCA9IGdyb3VwIDw8IDI7Ci0JCXBlbmQgPSBfX3Jhd19yZWFkbChTNVBfR1BJT1JFRyhHUElPSU5UX1BFTkRfT0ZGU0VUKSArCi0JCQkJcGVuZF9vZmZzZXQpOworCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGJhbmstPm5yX2dyb3VwczsgZ3JvdXArKykgeworCQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCA9IGJhbmstPmNoaXBzW2dyb3VwXTsKKwkJaWYgKCFjaGlwKQorCQkJY29udGludWU7CisKKwkJcGVuZF9vZmZzZXQgPSBSRUdfT0ZGU0VUKGdyb3VwKTsKKwkJcGVuZCA9IF9fcmF3X3JlYWRsKEdQSU9fQkFTRShjaGlwKSArIFBFTkRfT0ZGU0VUICsgcGVuZF9vZmZzZXQpOwogCQlpZiAoIXBlbmQpCiAJCQljb250aW51ZTsKIAotCQltYXNrX29mZnNldCA9IGdyb3VwIDw8IDI7Ci0JCW1hc2sgPSBfX3Jhd19yZWFkbChTNVBfR1BJT1JFRyhHUElPSU5UX01BU0tfT0ZGU0VUKSArCi0JCQkJbWFza19vZmZzZXQpOworCQltYXNrX29mZnNldCA9IFJFR19PRkZTRVQoZ3JvdXApOworCQltYXNrID0gX19yYXdfcmVhZGwoR1BJT19CQVNFKGNoaXApICsgTUFTS19PRkZTRVQgKyBtYXNrX29mZnNldCk7CiAJCXBlbmQgJj0gfm1hc2s7CiAKLQkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCA4OyBvZmZzZXQrKykgewotCQkJaWYgKHBlbmQgJiAoMSA8PCBvZmZzZXQpKSB7Ci0JCQkJc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAgPSBpcnFfY2hpcHNbZ3JvdXBdOwotCQkJCWlmIChjaGlwKSB7Ci0JCQkJCXJlYWxfaXJxID0gY2hpcC0+aXJxX2Jhc2UgKyBvZmZzZXQ7Ci0JCQkJCWdlbmVyaWNfaGFuZGxlX2lycShyZWFsX2lycSk7Ci0JCQkJfQotCQkJfQorCQl3aGlsZSAocGVuZCkgeworCQkJaW50IG9mZnNldCA9IGZscyhwZW5kKSAtIDE7CisJCQlpbnQgcmVhbF9pcnEgPSBjaGlwLT5pcnFfYmFzZSArIG9mZnNldDsKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShyZWFsX2lycSk7CisJCQlwZW5kICY9IH5CSVQob2Zmc2V0KTsKIAkJfQogCX0KIH0KQEAgLTE4MiwyNyArMTc5LDQ4IEBACiBzdGF0aWMgX19pbml0IGludCBzNXBfZ3Bpb2ludF9hZGQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCiB7CiAJc3RhdGljIGludCB1c2VkX2dwaW9pbnRfZ3JvdXBzID0gMDsKLQlzdGF0aWMgYm9vbCBoYW5kbGVyX3JlZ2lzdGVyZWQgPSAwOwogCWludCBpcnEsIGdyb3VwID0gY2hpcC0+Z3JvdXA7CiAJaW50IGk7CisJc3RydWN0IHM1cF9ncGlvaW50X2JhbmsgKmJhbmsgPSBOVUxMOwogCiAJaWYgKHVzZWRfZ3Bpb2ludF9ncm91cHMgPj0gUzVQX0dQSU9JTlRfR1JPVVBfQ09VTlQpCiAJCXJldHVybiAtRU5PTUVNOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShiYW5rLCAmYmFua3MsIGxpc3QpIHsKKwkJaWYgKGdyb3VwID49IGJhbmstPnN0YXJ0ICYmCisJCSAgICBncm91cCA8IGJhbmstPnN0YXJ0ICsgYmFuay0+bnJfZ3JvdXBzKQorCQkJYnJlYWs7CisJfQorCWlmICghYmFuaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWJhbmstPmhhbmRsZXIpIHsKKwkJYmFuay0+Y2hpcHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqKSAqCisJCQkJICAgICAgYmFuay0+bnJfZ3JvdXBzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiYW5rLT5jaGlwcykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGJhbmstPmlycSwgczVwX2dwaW9pbnRfaGFuZGxlcik7CisJCXNldF9pcnFfZGF0YShiYW5rLT5pcnEsIGJhbmspOworCQliYW5rLT5oYW5kbGVyID0gczVwX2dwaW9pbnRfaGFuZGxlcjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJlZCBjaGFpbmVkIGdwaW8gaW50IGhhbmRsZXIgZm9yIGludGVycnVwdCAlZC5cbiIsCisJCSAgICAgICBiYW5rLT5pcnEpOworCX0KKworCS8qCisJICogY2hhaW5lZCBHUElPIGlycSBoYXMgYmVlbiBzdWNlc3NmdWxseSByZWdpc3RlcmVkLCBhbGxvY2F0ZSBuZXcgZ3BpbworCSAqIGludCBncm91cCBhbmQgYXNzaWduIGlycSBudWJtZXJzCisJICovCisKIAljaGlwLT5pcnFfYmFzZSA9IFM1UF9HUElPSU5UX0JBU0UgKwogCQkJIHVzZWRfZ3Bpb2ludF9ncm91cHMgKiBTNVBfR1BJT0lOVF9HUk9VUF9TSVpFOwogCXVzZWRfZ3Bpb2ludF9ncm91cHMrKzsKIAotCWlmICghaGFuZGxlcl9yZWdpc3RlcmVkKSB7Ci0JCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPSU5ULCBzNXBfZ3Bpb2ludF9oYW5kbGVyKTsKLQkJaGFuZGxlcl9yZWdpc3RlcmVkID0gMTsKLQl9Ci0KLQlpcnFfY2hpcHNbZ3JvdXBdID0gY2hpcDsKKwliYW5rLT5jaGlwc1tncm91cCAtIGJhbmstPnN0YXJ0XSA9IGNoaXA7CiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPmNoaXAubmdwaW87IGkrKykgewogCQlpcnEgPSBjaGlwLT5pcnFfYmFzZSArIGk7CiAJCXNldF9pcnFfY2hpcChpcnEsICZzNXBfZ3Bpb2ludCk7Ci0JCXNldF9pcnFfZGF0YShpcnEsICZjaGlwLT5jaGlwKTsKKwkJc2V0X2lycV9kYXRhKGlycSwgY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CiAJfQpAQCAtMjM1LDMgKzI1MywxOSBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQorCitpbnQgX19pbml0IHM1cF9yZWdpc3Rlcl9ncGlvaW50X2JhbmsoaW50IGNoYWluX2lycSwgaW50IHN0YXJ0LCBpbnQgbnJfZ3JvdXBzKQoreworCXN0cnVjdCBzNXBfZ3Bpb2ludF9iYW5rICpiYW5rOworCisJYmFuayA9IGt6YWxsb2Moc2l6ZW9mKCpiYW5rKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiYW5rKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJhbmstPnN0YXJ0ID0gc3RhcnQ7CisJYmFuay0+bnJfZ3JvdXBzID0gbnJfZ3JvdXBzOworCWJhbmstPmlycSA9IGNoYWluX2lycTsKKworCWxpc3RfYWRkX3RhaWwoJmJhbmstPmxpc3QsICZiYW5rcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9zNXAtdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvczVwLXRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDkwNDAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvczVwLXRpbWUuYwpAQCAtMCwwICsxLDQ0OCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvczVwLXRpbWUuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQIC0gQ29tbW9uIGhyLXRpbWVyIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL3NtcF90d2QuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cC10aW1lLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0aW5fZXZlbnQ7CitzdGF0aWMgc3RydWN0IGNsayAqdGluX3NvdXJjZTsKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0ZGl2X2V2ZW50Oworc3RhdGljIHN0cnVjdCBjbGsgKnRkaXZfc291cmNlOworc3RhdGljIHN0cnVjdCBjbGsgKnRpbWVyY2xrOworc3RhdGljIHN0cnVjdCBzNXBfdGltZXJfc291cmNlIHRpbWVyX3NvdXJjZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsb2NrX2NvdW50X3Blcl90aWNrOworc3RhdGljIHZvaWQgczVwX3RpbWVyX3Jlc3VtZSh2b2lkKTsKKworc3RhdGljIHZvaWQgczVwX3RpbWVfc3RvcChlbnVtIHM1cF90aW1lcl9tb2RlIG1vZGUpCit7CisJdW5zaWduZWQgbG9uZyB0Y29uOworCisJdGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENPTik7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFM1UF9QV00wOgorCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDBTVEFSVDsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9QV00xOgorCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDFTVEFSVDsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9QV00yOgorCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDJTVEFSVDsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9QV00zOgorCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDNTVEFSVDsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9QV000OgorCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDRTVEFSVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgVGltZXIgJWRcbiIsIG1vZGUpOworCQlicmVhazsKKwl9CisJX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF90aW1lX3NldHVwKGVudW0gczVwX3RpbWVyX21vZGUgbW9kZSwgdW5zaWduZWQgbG9uZyB0Y250KQoreworCXVuc2lnbmVkIGxvbmcgdGNvbjsKKworCXRjb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDT04pOworCisJdGNudC0tOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBTNVBfUFdNMDoKKwkJdGNvbiAmPSB+KDB4MGYgPDwgMCk7CisJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1QwTUFOVUFMVVBEOworCQlicmVhazsKKworCWNhc2UgUzVQX1BXTTE6CisJCXRjb24gJj0gfigweDBmIDw8IDgpOworCQl0Y29uIHw9IFMzQzI0MTBfVENPTl9UMU1BTlVBTFVQRDsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9QV00yOgorCQl0Y29uICY9IH4oMHgwZiA8PCAxMik7CisJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1QyTUFOVUFMVVBEOworCQlicmVhazsKKworCWNhc2UgUzVQX1BXTTM6CisJCXRjb24gJj0gfigweDBmIDw8IDE2KTsKKwkJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDNNQU5VQUxVUEQ7CisJCWJyZWFrOworCisJY2FzZSBTNVBfUFdNNDoKKwkJdGNvbiAmPSB+KDB4MDcgPDwgMjApOworCQl0Y29uIHw9IFMzQzI0MTBfVENPTl9UNE1BTlVBTFVQRDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgVGltZXIgJWRcbiIsIG1vZGUpOworCQlicmVhazsKKwl9CisKKwlfX3Jhd193cml0ZWwodGNudCwgUzNDMjQxMF9UQ05UQihtb2RlKSk7CisJX19yYXdfd3JpdGVsKHRjbnQsIFMzQzI0MTBfVENNUEIobW9kZSkpOworCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOworfQorCitzdGF0aWMgdm9pZCBzNXBfdGltZV9zdGFydChlbnVtIHM1cF90aW1lcl9tb2RlIG1vZGUsIGJvb2wgcGVyaW9kaWMpCit7CisJdW5zaWduZWQgbG9uZyB0Y29uOworCisJdGNvbiAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDT04pOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBTNVBfUFdNMDoKKwkJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDBTVEFSVDsKKwkJdGNvbiAmPSB+UzNDMjQxMF9UQ09OX1QwTUFOVUFMVVBEOworCisJCWlmIChwZXJpb2RpYykKKwkJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1QwUkVMT0FEOworCQllbHNlCisJCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDBSRUxPQUQ7CisJCWJyZWFrOworCisJY2FzZSBTNVBfUFdNMToKKwkJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDFTVEFSVDsKKwkJdGNvbiAmPSB+UzNDMjQxMF9UQ09OX1QxTUFOVUFMVVBEOworCisJCWlmIChwZXJpb2RpYykKKwkJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1QxUkVMT0FEOworCQllbHNlCisJCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDFSRUxPQUQ7CisJCWJyZWFrOworCisJY2FzZSBTNVBfUFdNMjoKKwkJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDJTVEFSVDsKKwkJdGNvbiAmPSB+UzNDMjQxMF9UQ09OX1QyTUFOVUFMVVBEOworCisJCWlmIChwZXJpb2RpYykKKwkJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1QyUkVMT0FEOworCQllbHNlCisJCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDJSRUxPQUQ7CisJCWJyZWFrOworCisJY2FzZSBTNVBfUFdNMzoKKwkJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDNTVEFSVDsKKwkJdGNvbiAmPSB+UzNDMjQxMF9UQ09OX1QzTUFOVUFMVVBEOworCisJCWlmIChwZXJpb2RpYykKKwkJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1QzUkVMT0FEOworCQllbHNlCisJCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDNSRUxPQUQ7CisJCWJyZWFrOworCisJY2FzZSBTNVBfUFdNNDoKKwkJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDRTVEFSVDsKKwkJdGNvbiAmPSB+UzNDMjQxMF9UQ09OX1Q0TUFOVUFMVVBEOworCisJCWlmIChwZXJpb2RpYykKKwkJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1Q0UkVMT0FEOworCQllbHNlCisJCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDRSRUxPQUQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIFRpbWVyICVkXG4iLCBtb2RlKTsKKwkJYnJlYWs7CisJfQorCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOworfQorCitzdGF0aWMgaW50IHM1cF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGN5Y2xlcywKKwkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJczVwX3RpbWVfc2V0dXAodGltZXJfc291cmNlLmV2ZW50X2lkLCBjeWNsZXMpOworCXM1cF90aW1lX3N0YXJ0KHRpbWVyX3NvdXJjZS5ldmVudF9pZCwgTk9OX1BFUklPRElDKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzNXBfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXM1cF90aW1lX3N0b3AodGltZXJfc291cmNlLmV2ZW50X2lkKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCXM1cF90aW1lX3NldHVwKHRpbWVyX3NvdXJjZS5ldmVudF9pZCwgY2xvY2tfY291bnRfcGVyX3RpY2spOworCQlzNXBfdGltZV9zdGFydCh0aW1lcl9zb3VyY2UuZXZlbnRfaWQsIFBFUklPRElDKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJczVwX3RpbWVyX3Jlc3VtZSgpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHM1cF90aW1lcl9yZXN1bWUodm9pZCkKK3sKKwkvKiBldmVudCB0aW1lciByZXN0YXJ0ICovCisJczVwX3RpbWVfc2V0dXAodGltZXJfc291cmNlLmV2ZW50X2lkLCBjbG9ja19jb3VudF9wZXJfdGljayk7CisJczVwX3RpbWVfc3RhcnQodGltZXJfc291cmNlLmV2ZW50X2lkLCBQRVJJT0RJQyk7CisKKwkvKiBzb3VyY2UgdGltZXIgcmVzdGFydCAqLworCXM1cF90aW1lX3NldHVwKHRpbWVyX3NvdXJjZS5zb3VyY2VfaWQsIFRDTlRfTUFYKTsKKwlzNXBfdGltZV9zdGFydCh0aW1lcl9zb3VyY2Uuc291cmNlX2lkLCBQRVJJT0RJQyk7Cit9CisKK3ZvaWQgX19pbml0IHM1cF9zZXRfdGltZXJfc291cmNlKGVudW0gczVwX3RpbWVyX21vZGUgZXZlbnQsCisJCQkJIGVudW0gczVwX3RpbWVyX21vZGUgc291cmNlKQoreworCXMzY19kZXZpY2VfdGltZXJbZXZlbnRdLmRldi5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGU7CisJczNjX2RldmljZV90aW1lcltzb3VyY2VdLmRldi5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGU7CisKKwl0aW1lcl9zb3VyY2UuZXZlbnRfaWQgPSBldmVudDsKKwl0aW1lcl9zb3VyY2Uuc291cmNlX2lkID0gc291cmNlOworfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSB0aW1lX2V2ZW50X2RldmljZSA9IHsKKwkubmFtZQkJPSAiczVwX2V2ZW50X3RpbWVyIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnJhdGluZwkJPSAyMDAsCisJLnNldF9uZXh0X2V2ZW50CT0gczVwX3NldF9uZXh0X2V2ZW50LAorCS5zZXRfbW9kZQk9IHM1cF9zZXRfbW9kZSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzNXBfY2xvY2tfZXZlbnRfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gczVwX2Nsb2NrX2V2ZW50X2lycSA9IHsKKwkubmFtZQkJPSAiczVwX3RpbWVfaXJxIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIJPSBzNXBfY2xvY2tfZXZlbnRfaXNyLAorCS5kZXZfaWQJCT0gJnRpbWVfZXZlbnRfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHM1cF9jbG9ja2V2ZW50X2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBjbGs7CisJdW5zaWduZWQgbG9uZyBjbG9ja19yYXRlOworCXVuc2lnbmVkIGludCBpcnFfbnVtYmVyOworCXN0cnVjdCBjbGsgKnRzY2FsZXI7CisKKwlwY2xrID0gY2xrX2dldF9yYXRlKHRpbWVyY2xrKTsKKworCXRzY2FsZXIgPSBjbGtfZ2V0X3BhcmVudCh0ZGl2X2V2ZW50KTsKKworCWNsa19zZXRfcmF0ZSh0c2NhbGVyLCBwY2xrIC8gMik7CisJY2xrX3NldF9yYXRlKHRkaXZfZXZlbnQsIHBjbGsgLyAyKTsKKwljbGtfc2V0X3BhcmVudCh0aW5fZXZlbnQsIHRkaXZfZXZlbnQpOworCisJY2xvY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZSh0aW5fZXZlbnQpOworCWNsb2NrX2NvdW50X3Blcl90aWNrID0gY2xvY2tfcmF0ZSAvIEhaOworCisJY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KCZ0aW1lX2V2ZW50X2RldmljZSwKKwkJCQkgICAgY2xvY2tfcmF0ZSwgUzVQVElNRVJfTUlOX1JBTkdFKTsKKwl0aW1lX2V2ZW50X2RldmljZS5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKC0xLCAmdGltZV9ldmVudF9kZXZpY2UpOworCXRpbWVfZXZlbnRfZGV2aWNlLm1pbl9kZWx0YV9ucyA9CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMSwgJnRpbWVfZXZlbnRfZGV2aWNlKTsKKworCXRpbWVfZXZlbnRfZGV2aWNlLmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmdGltZV9ldmVudF9kZXZpY2UpOworCisJaXJxX251bWJlciA9IHRpbWVyX3NvdXJjZS5ldmVudF9pZCArIElSUV9USU1FUjA7CisJc2V0dXBfaXJxKGlycV9udW1iZXIsICZzNXBfY2xvY2tfZXZlbnRfaXJxKTsKK30KKworc3RhdGljIGN5Y2xlX3QgczVwX3RpbWVyX3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisKKwlzd2l0Y2ggKHRpbWVyX3NvdXJjZS5zb3VyY2VfaWQpIHsKKwljYXNlIFM1UF9QV00wOgorCWNhc2UgUzVQX1BXTTE6CisJY2FzZSBTNVBfUFdNMjoKKwljYXNlIFM1UF9QV00zOgorCQlvZmZzZXQgPSAodGltZXJfc291cmNlLnNvdXJjZV9pZCAqIDB4MGMpICsgMHgxNDsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9QV000OgorCQlvZmZzZXQgPSAweDQwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBUaW1lciAlZFxuIiwgdGltZXJfc291cmNlLnNvdXJjZV9pZCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAoY3ljbGVfdCkgfl9fcmF3X3JlYWRsKFMzQ19USU1FUlJFRyhvZmZzZXQpKTsKK30KKworLyoKKyAqIE92ZXJyaWRlIHRoZSBnbG9iYWwgd2VhayBzY2hlZF9jbG9jayBzeW1ib2wgd2l0aCB0aGlzCisgKiBsb2NhbCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIHRoZSBjbG9ja3NvdXJjZSB0byBnZXQgc29tZQorICogYmV0dGVyIHJlc29sdXRpb24gd2hlbiBzY2hlZHVsaW5nIHRoZSBrZXJuZWwuIFdlIGFjY2VwdCB0aGF0CisgKiB0aGlzIHdyYXBzIGFyb3VuZCBmb3Igbm93LCBzaW5jZSBpdCBpcyBqdXN0IGEgcmVsYXRpdmUgdGltZQorICogc3RhbXAuIChJbnNwaXJlZCBieSBVMzAwIGltcGxlbWVudGF0aW9uLikKKyAqLworc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKKwordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKworCXN3aXRjaCAodGltZXJfc291cmNlLnNvdXJjZV9pZCkgeworCWNhc2UgUzVQX1BXTTA6CisJY2FzZSBTNVBfUFdNMToKKwljYXNlIFM1UF9QV00yOgorCWNhc2UgUzVQX1BXTTM6CisJCW9mZnNldCA9ICh0aW1lcl9zb3VyY2Uuc291cmNlX2lkICogMHgwYykgKyAweDE0OworCQlicmVhazsKKworCWNhc2UgUzVQX1BXTTQ6CisJCW9mZnNldCA9IDB4NDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIFRpbWVyICVkXG4iLCB0aW1lcl9zb3VyY2Uuc291cmNlX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY3ljID0gfl9fcmF3X3JlYWRsKFMzQ19USU1FUlJFRyhvZmZzZXQpKTsKKwlyZXR1cm4gY3ljX3RvX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKK30KKworc3RhdGljIHZvaWQgbm90cmFjZSBzNXBfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YzsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisKKwlzd2l0Y2ggKHRpbWVyX3NvdXJjZS5zb3VyY2VfaWQpIHsKKwljYXNlIFM1UF9QV00wOgorCWNhc2UgUzVQX1BXTTE6CisJY2FzZSBTNVBfUFdNMjoKKwljYXNlIFM1UF9QV00zOgorCQlvZmZzZXQgPSAodGltZXJfc291cmNlLnNvdXJjZV9pZCAqIDB4MGMpICsgMHgxNDsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9QV000OgorCQlvZmZzZXQgPSAweDQwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBUaW1lciAlZFxuIiwgdGltZXJfc291cmNlLnNvdXJjZV9pZCk7CisJfQorCisJY3ljID0gfl9fcmF3X3JlYWRsKFMzQ19USU1FUlJFRyhvZmZzZXQpKTsKKwl1cGRhdGVfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOworfQorCitzdHJ1Y3QgY2xvY2tzb3VyY2UgdGltZV9jbG9ja3NvdXJjZSA9IHsKKwkubmFtZQkJPSAiczVwX2Nsb2Nrc291cmNlX3RpbWVyIiwKKwkucmF0aW5nCQk9IDI1MCwKKwkucmVhZAkJPSBzNXBfdGltZXJfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgczVwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBjbGs7CisJdW5zaWduZWQgbG9uZyBjbG9ja19yYXRlOworCisJcGNsayA9IGNsa19nZXRfcmF0ZSh0aW1lcmNsayk7CisKKwljbGtfc2V0X3JhdGUodGRpdl9zb3VyY2UsIHBjbGsgLyAyKTsKKwljbGtfc2V0X3BhcmVudCh0aW5fc291cmNlLCB0ZGl2X3NvdXJjZSk7CisKKwljbG9ja19yYXRlID0gY2xrX2dldF9yYXRlKHRpbl9zb3VyY2UpOworCisJaW5pdF9zY2hlZF9jbG9jaygmY2QsIHM1cF91cGRhdGVfc2NoZWRfY2xvY2ssIDMyLCBjbG9ja19yYXRlKTsKKworCXM1cF90aW1lX3NldHVwKHRpbWVyX3NvdXJjZS5zb3VyY2VfaWQsIFRDTlRfTUFYKTsKKwlzNXBfdGltZV9zdGFydCh0aW1lcl9zb3VyY2Uuc291cmNlX2lkLCBQRVJJT0RJQyk7CisKKwlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnRpbWVfY2xvY2tzb3VyY2UsIGNsb2NrX3JhdGUpKQorCQlwYW5pYygiJXM6IGNhbid0IHJlZ2lzdGVyIGNsb2Nrc291cmNlXG4iLCB0aW1lX2Nsb2Nrc291cmNlLm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgczVwX3RpbWVyX3Jlc291cmNlcyh2b2lkKQoreworCisJdW5zaWduZWQgbG9uZyBldmVudF9pZCA9IHRpbWVyX3NvdXJjZS5ldmVudF9pZDsKKwl1bnNpZ25lZCBsb25nIHNvdXJjZV9pZCA9IHRpbWVyX3NvdXJjZS5zb3VyY2VfaWQ7CisKKwl0aW1lcmNsayA9IGNsa19nZXQoTlVMTCwgInRpbWVycyIpOworCWlmIChJU19FUlIodGltZXJjbGspKQorCQlwYW5pYygiZmFpbGVkIHRvIGdldCB0aW1lcnMgY2xvY2sgZm9yIHRpbWVyIik7CisKKwljbGtfZW5hYmxlKHRpbWVyY2xrKTsKKworCXRpbl9ldmVudCA9IGNsa19nZXQoJnMzY19kZXZpY2VfdGltZXJbZXZlbnRfaWRdLmRldiwgInB3bS10aW4iKTsKKwlpZiAoSVNfRVJSKHRpbl9ldmVudCkpCisJCXBhbmljKCJmYWlsZWQgdG8gZ2V0IHB3bS10aW4gY2xvY2sgZm9yIGV2ZW50IHRpbWVyIik7CisKKwl0ZGl2X2V2ZW50ID0gY2xrX2dldCgmczNjX2RldmljZV90aW1lcltldmVudF9pZF0uZGV2LCAicHdtLXRkaXYiKTsKKwlpZiAoSVNfRVJSKHRkaXZfZXZlbnQpKQorCQlwYW5pYygiZmFpbGVkIHRvIGdldCBwd20tdGRpdiBjbG9jayBmb3IgZXZlbnQgdGltZXIiKTsKKworCWNsa19lbmFibGUodGluX2V2ZW50KTsKKworCXRpbl9zb3VyY2UgPSBjbGtfZ2V0KCZzM2NfZGV2aWNlX3RpbWVyW3NvdXJjZV9pZF0uZGV2LCAicHdtLXRpbiIpOworCWlmIChJU19FUlIodGluX3NvdXJjZSkpCisJCXBhbmljKCJmYWlsZWQgdG8gZ2V0IHB3bS10aW4gY2xvY2sgZm9yIHNvdXJjZSB0aW1lciIpOworCisJdGRpdl9zb3VyY2UgPSBjbGtfZ2V0KCZzM2NfZGV2aWNlX3RpbWVyW3NvdXJjZV9pZF0uZGV2LCAicHdtLXRkaXYiKTsKKwlpZiAoSVNfRVJSKHRkaXZfc291cmNlKSkKKwkJcGFuaWMoImZhaWxlZCB0byBnZXQgcHdtLXRkaXYgY2xvY2sgZm9yIHNvdXJjZSB0aW1lciIpOworCisJY2xrX2VuYWJsZSh0aW5fc291cmNlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHM1cF90aW1lcl9pbml0KHZvaWQpCit7CisJczVwX3RpbWVyX3Jlc291cmNlcygpOworCXM1cF9jbG9ja2V2ZW50X2luaXQoKTsKKwlzNXBfY2xvY2tzb3VyY2VfaW5pdCgpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHM1cF90aW1lciA9IHsKKwkuaW5pdAkJPSBzNXBfdGltZXJfaW5pdCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9zZXR1cC1taXBpcGh5LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9zZXR1cC1taXBpcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYzQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL3NldHVwLW1pcGlwaHkuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgorICogUzVQIC0gSGVscGVyIGZ1bmN0aW9ucyBmb3IgTUlQSS1DU0lTIGFuZCBNSVBJLURTSU0gRC1QSFkgY29udHJvbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKworc3RhdGljIGludCBfX3M1cF9taXBpX3BoeV9jb250cm9sKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJICBib29sIG9uLCB1MzIgcmVzZXQpCit7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcGlkOworCXUzMiBjZmc7CisKKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJcGlkID0gKHBkZXYtPmlkID09IC0xKSA/IDAgOiBwZGV2LT5pZDsKKworCWlmIChwaWQgIT0gMCAmJiBwaWQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZGRyID0gUzVQX01JUElfRFBIWV9DT05UUk9MKHBpZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jaywgZmxhZ3MpOworCisJY2ZnID0gX19yYXdfcmVhZGwoYWRkcik7CisJY2ZnID0gb24gPyAoY2ZnIHwgcmVzZXQpIDogKGNmZyAmIH5yZXNldCk7CisJX19yYXdfd3JpdGVsKGNmZywgYWRkcik7CisKKwlpZiAob24pIHsKKwkJY2ZnIHw9IFM1UF9NSVBJX0RQSFlfRU5BQkxFOworCX0gZWxzZSBpZiAoIShjZmcgJiAoUzVQX01JUElfRFBIWV9TUkVTRVROIHwKKwkJCSAgICBTNVBfTUlQSV9EUEhZX01SRVNFVE4pICYgfnJlc2V0KSkgeworCQljZmcgJj0gflM1UF9NSVBJX0RQSFlfRU5BQkxFOworCX0KKworCV9fcmF3X3dyaXRlbChjZmcsIGFkZHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQgczVwX2NzaXNfcGh5X2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBib29sIG9uKQoreworCXJldHVybiBfX3M1cF9taXBpX3BoeV9jb250cm9sKHBkZXYsIG9uLCBTNVBfTUlQSV9EUEhZX1NSRVNFVE4pOworfQorCitpbnQgczVwX2RzaW1fcGh5X2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBib29sIG9uKQoreworCXJldHVybiBfX3M1cF9taXBpX3BoeV9jb250cm9sKHBkZXYsIG9uLCBTNVBfTUlQSV9EUEhZX01SRVNFVE4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvc3lzbW11LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYwppbmRleCBmZmU4YTQ4Li41NGY1ZWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYwpAQCAtMTIsMjgwICsxMiwyNjYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zeXNtbXUuaD4KLSNpbmNsdWRlIDxtYWNoL3N5c21tdS5oPgorI2luY2x1ZGUgPHBsYXQvc3lzbW11Lmg+CiAKLXN0cnVjdCBzeXNtbXVfY29udHJvbGxlciBzNXBfc3lzbW11X2NudGxyc1tTNVBfU1lTTU1VX1RPVEFMX0lQTlVNXTsKKyNkZWZpbmUgQ1RSTF9FTkFCTEUJMHg1CisjZGVmaW5lIENUUkxfQkxPQ0sJMHg3CisjZGVmaW5lIENUUkxfRElTQUJMRQkweDAKIAotdm9pZCBzNXBfc3lzbW11X3JlZ2lzdGVyKHN0cnVjdCBzeXNtbXVfY29udHJvbGxlciAqc3lzbW11Y29ucCkKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkZXY7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBmYXVsdF9yZWdfb2Zmc2V0W1NZU01NVV9GQVVMVFNfTlVNXSA9IHsKKwlTNVBfUEFHRV9GQVVMVF9BRERSLAorCVM1UF9BUl9GQVVMVF9BRERSLAorCVM1UF9BV19GQVVMVF9BRERSLAorCVM1UF9ERUZBVUxUX1NMQVZFX0FERFIsCisJUzVQX0FSX0ZBVUxUX0FERFIsCisJUzVQX0FSX0ZBVUxUX0FERFIsCisJUzVQX0FXX0ZBVUxUX0FERFIsCisJUzVQX0FXX0ZBVUxUX0FERFIKK307CisKK3N0YXRpYyBjaGFyICpzeXNtbXVfZmF1bHRfbmFtZVtTWVNNTVVfRkFVTFRTX05VTV0gPSB7CisJIlBBR0UgRkFVTFQiLAorCSJBUiBNVUxUSS1ISVQgRkFVTFQiLAorCSJBVyBNVUxUSS1ISVQgRkFVTFQiLAorCSJCVVMgRVJST1IiLAorCSJBUiBTRUNVUklUWSBQUk9URUNUSU9OIEZBVUxUIiwKKwkiQVIgQUNDRVNTIFBST1RFQ1RJT04gRkFVTFQiLAorCSJBVyBTRUNVUklUWSBQUk9URUNUSU9OIEZBVUxUIiwKKwkiQVcgQUNDRVNTIFBST1RFQ1RJT04gRkFVTFQiCit9OworCitzdGF0aWMgaW50ICgqZmF1bHRfaGFuZGxlcnNbUzVQX1NZU01NVV9UT1RBTF9JUE5VTV0pKAorCQllbnVtIFM1UF9TWVNNTVVfSU5URVJSVVBUX1RZUEUgaXR5cGUsCisJCXVuc2lnbmVkIGxvbmcgcGd0YWJsZV9iYXNlLAorCQl1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIpOworCisvKgorICogSWYgYWRqYWNlbnQgMiBiaXRzIGFyZSB0cnVlLCB0aGUgc3lzdGVtIE1NVSBpcyBlbmFibGVkLgorICogVGhlIHN5c3RlbSBNTVUgaXMgZGlzYWJsZWQsIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzbW11X3N0YXRlczsKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zeXNtbXVfYWN0aXZlKHN5c21tdV9pcHMgaXBzKQogewotCXVuc2lnbmVkIGludCByZWdfbW11X2N0cmw7Ci0JdW5zaWduZWQgaW50IHJlZ19tbXVfc3RhdHVzOwotCXVuc2lnbmVkIGludCByZWdfcHRfYmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCByZWdfaW50X3N0YXR1czsKLQl1bnNpZ25lZCBpbnQgcmVnX3BhZ2VfZnRfYWRkcjsKKwlzeXNtbXVfc3RhdGVzIHw9IDMgPDwgKGlwcyAqIDIpOworfQogCi0JcmVnX2ludF9zdGF0dXMgPSBfX3Jhd19yZWFkbChzeXNtbXVjb25wLT5yZWdzICsgUzVQX0lOVF9TVEFUVVMpOwotCXJlZ19tbXVfY3RybCA9IF9fcmF3X3JlYWRsKHN5c21tdWNvbnAtPnJlZ3MgKyBTNVBfTU1VX0NUUkwpOwotCXJlZ19tbXVfc3RhdHVzID0gX19yYXdfcmVhZGwoc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfU1RBVFVTKTsKLQlyZWdfcHRfYmFzZV9hZGRyID0gX19yYXdfcmVhZGwoc3lzbW11Y29ucC0+cmVncyArIFM1UF9QVF9CQVNFX0FERFIpOwotCXJlZ19wYWdlX2Z0X2FkZHIgPSBfX3Jhd19yZWFkbChzeXNtbXVjb25wLT5yZWdzICsgUzVQX1BBR0VfRkFVTFRfQUREUik7CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N5c21tdV9pbmFjdGl2ZShzeXNtbXVfaXBzIGlwcykKK3sKKwlzeXNtbXVfc3RhdGVzICY9IH4oMyA8PCAoaXBzICogMikpOworfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlwczolc1xuIiwgX19mdW5jX18sIHN5c21tdWNvbnAtPm5hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBNTVVfQ1RSTDoweCVYLCAiLCBfX2Z1bmNfXywgcmVnX21tdV9jdHJsKTsKLQlwcmludGsoS0VSTl9JTkZPICJNTVVfU1RBVFVTOjB4JVgsIFBUX0JBU0VfQUREUjoweCVYXG4iLCByZWdfbW11X3N0YXR1cywgcmVnX3B0X2Jhc2VfYWRkcik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElOVF9TVEFUVVM6MHglWCwgUEFHRV9GQVVMVF9BRERSOjB4JVhcbiIsIF9fZnVuY19fLCByZWdfaW50X3N0YXR1cywgcmVnX3BhZ2VfZnRfYWRkcik7CitzdGF0aWMgaW5saW5lIGludCBpc19zeXNtbXVfYWN0aXZlKHN5c21tdV9pcHMgaXBzKQoreworCXJldHVybiBzeXNtbXVfc3RhdGVzICYgKDMgPDwgKGlwcyAqIDIpKTsKK30KIAotCXN3aXRjaCAocmVnX2ludF9zdGF0dXMgJiAweEZGKSB7Ci0JY2FzZSAweDE6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYWdlIGZhdWx0XG4iLCBfX2Z1bmNfXyk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBWaXJ0dWFsIGFkZHJlc3MgY2F1c2luZyBsYXN0IHBhZ2UgZmF1bHQgb3IgYnVzIGVycm9yIDogMHgleFxuIiwgX19mdW5jX18gLCByZWdfcGFnZV9mdF9hZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDI6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBBUiBtdWx0aS1oaXQgZmF1bHRcbiIsIF9fZnVuY19fKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBBVyBtdWx0aS1oaXQgZmF1bHRcbiIsIF9fZnVuY19fKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDg6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBCdXMgZXJyb3JcbiIsIF9fZnVuY19fKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDEwOgotCQlwcmludGsoS0VSTl9JTkZPICIlczogQVIgU2VjdXJpdHkgcHJvdGVjdGlvbiBmYXVsdFxuIiwgX19mdW5jX18pOwotCQlicmVhazsKLQljYXNlIDB4MjA6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBBUiBBY2Nlc3MgcHJvdGVjdGlvbiBmYXVsdFxuIiwgX19mdW5jX18pOwotCQlicmVhazsKLQljYXNlIDB4NDA6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBBVyBTZWN1cml0eSBwcm90ZWN0aW9uIGZhdWx0XG4iLCBfX2Z1bmNfXyk7Ci0JCWJyZWFrOwotCWNhc2UgMHg4MDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFXIEFjY2VzcyBwcm90ZWN0aW9uIGZhdWx0XG4iLCBfX2Z1bmNfXyk7Ci0JCWJyZWFrOworc3RhdGljIHZvaWQgX19pb21lbSAqc3lzbW11c2Zyc1tTNVBfU1lTTU1VX1RPVEFMX0lQTlVNXTsKKworc3RhdGljIGlubGluZSB2b2lkIHN5c21tdV9ibG9jayhzeXNtbXVfaXBzIGlwcykKK3sKKwlfX3Jhd193cml0ZWwoQ1RSTF9CTE9DSywgc3lzbW11c2Zyc1tpcHNdICsgUzVQX01NVV9DVFJMKTsKKwlkZXZfZGJnKGRldiwgIiVzIGlzIGJsb2NrZWQuXG4iLCBzeXNtbXVfaXBzX25hbWVbaXBzXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNtbXVfdW5ibG9jayhzeXNtbXVfaXBzIGlwcykKK3sKKwlfX3Jhd193cml0ZWwoQ1RSTF9FTkFCTEUsIHN5c21tdXNmcnNbaXBzXSArIFM1UF9NTVVfQ1RSTCk7CisJZGV2X2RiZyhkZXYsICIlcyBpcyB1bmJsb2NrZWQuXG4iLCBzeXNtbXVfaXBzX25hbWVbaXBzXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c21tdV90bGJfaW52YWxpZGF0ZShzeXNtbXVfaXBzIGlwcykKK3sKKwlfX3Jhd193cml0ZWwoMHgxLCBzeXNtbXVzZnJzW2lwc10gKyBTNVBfTU1VX0ZMVVNIKTsKKwlkZXZfZGJnKGRldiwgIlRMQiBvZiAlcyBpcyBpbnZhbGlkYXRlZC5cbiIsIHN5c21tdV9pcHNfbmFtZVtpcHNdKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc3lzbW11X3NldF9wdGJhc2Uoc3lzbW11X2lwcyBpcHMsIHVuc2lnbmVkIGxvbmcgcGdkKQoreworCWlmICh1bmxpa2VseShwZ2QgPT0gMCkpIHsKKwkJcGdkID0gKHVuc2lnbmVkIGxvbmcpWkVST19QQUdFKDApOworCQlfX3Jhd193cml0ZWwoMHgyMCwgc3lzbW11c2Zyc1tpcHNdICsgUzVQX01NVV9DRkcpOyAvKiA0S0IgTFYxICovCisJfSBlbHNlIHsKKwkJX19yYXdfd3JpdGVsKDB4MCwgc3lzbW11c2Zyc1tpcHNdICsgUzVQX01NVV9DRkcpOyAvKiAxNktCIExWMSAqLwogCX0KKworCV9fcmF3X3dyaXRlbChwZ2QsIHN5c21tdXNmcnNbaXBzXSArIFM1UF9QVF9CQVNFX0FERFIpOworCisJZGV2X2RiZyhkZXYsICJQYWdlIHRhYmxlIGJhc2Ugb2YgJXMgaXMgaW5pdGlhbGl6ZWQgd2l0aCAweCUwOGxYLlxuIiwKKwkJCQkJCXN5c21tdV9pcHNfbmFtZVtpcHNdLCBwZ2QpOworCV9fc3lzbW11X3RsYl9pbnZhbGlkYXRlKGlwcyk7Cit9CisKK3ZvaWQgc3lzbW11X3NldF9mYXVsdF9oYW5kbGVyKHN5c21tdV9pcHMgaXBzLAorCQkJaW50ICgqaGFuZGxlcikoZW51bSBTNVBfU1lTTU1VX0lOVEVSUlVQVF9UWVBFIGl0eXBlLAorCQkJCQl1bnNpZ25lZCBsb25nIHBndGFibGVfYmFzZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyKSkKK3sKKwlCVUdfT04oISgoaXBzID49IFNZU01NVV9NRE1BKSAmJiAoaXBzIDwgUzVQX1NZU01NVV9UT1RBTF9JUE5VTSkpKTsKKwlmYXVsdF9oYW5kbGVyc1tpcHNdID0gaGFuZGxlcjsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHM1cF9zeXNtbXVfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgcmVnX2ludF9zdGF0dXM7Ci0Jc3RydWN0IHN5c21tdV9jb250cm9sbGVyICpzeXNtbXVjb25wOworCS8qIFNZU01NVSBpcyBpbiBibG9ja2VkIHdoZW4gaW50ZXJydXB0IG9jY3VycmVkLiAqLworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IDA7CisJc3lzbW11X2lwcyBpcHMgPSAoc3lzbW11X2lwcylkZXZfaWQ7CisJZW51bSBTNVBfU1lTTU1VX0lOVEVSUlVQVF9UWVBFIGl0eXBlOwogCi0JZm9yIChpID0gMDsgaSA8IFM1UF9TWVNNTVVfVE9UQUxfSVBOVU07IGkrKykgewotCQlzeXNtbXVjb25wID0gJnM1cF9zeXNtbXVfY250bHJzW2ldOworCWl0eXBlID0gKGVudW0gUzVQX1NZU01NVV9JTlRFUlJVUFRfVFlQRSkKKwkJX19mZnMoX19yYXdfcmVhZGwoc3lzbW11c2Zyc1tpcHNdICsgUzVQX0lOVF9TVEFUVVMpKTsKIAotCQlpZiAoc3lzbW11Y29ucC0+ZW5hYmxlID09IHRydWUpIHsKLQkJCXJlZ19pbnRfc3RhdHVzID0gX19yYXdfcmVhZGwoc3lzbW11Y29ucC0+cmVncyArIFM1UF9JTlRfU1RBVFVTKTsKKwlCVUdfT04oISgoaXR5cGUgPj0gMCkgJiYgKGl0eXBlIDwgOCkpKTsKIAotCQkJaWYgKHJlZ19pbnRfc3RhdHVzICYgMHhGRikKLQkJCQlzNXBfc3lzbW11X3JlZ2lzdGVyKHN5c21tdWNvbnApOworCWRldl9hbGVydChkZXYsICIlcyBvY2N1cnJlZCBieSAlcy5cbiIsIHN5c21tdV9mYXVsdF9uYW1lW2l0eXBlXSwKKwkJCQkJCQlzeXNtbXVfaXBzX25hbWVbaXBzXSk7CisKKwlpZiAoZmF1bHRfaGFuZGxlcnNbaXBzXSkgeworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwkJYmFzZSA9IF9fcmF3X3JlYWRsKHN5c21tdXNmcnNbaXBzXSArIFM1UF9QVF9CQVNFX0FERFIpOworCQlhZGRyID0gX19yYXdfcmVhZGwoc3lzbW11c2Zyc1tpcHNdICsgZmF1bHRfcmVnX29mZnNldFtpdHlwZV0pOworCisJCWlmIChmYXVsdF9oYW5kbGVyc1tpcHNdKGl0eXBlLCBiYXNlLCBhZGRyKSkgeworCQkJX19yYXdfd3JpdGVsKDEgPDwgaXR5cGUsCisJCQkJCXN5c21tdXNmcnNbaXBzXSArIFM1UF9JTlRfQ0xFQVIpOworCQkJZGV2X25vdGljZShkZXYsICIlcyBmcm9tICVzIGlzIHJlc29sdmVkLiIKKwkJCQkJIiBSZXRyeWluZyB0cmFuc2xhdGlvbi5cbiIsCisJCQkJc3lzbW11X2ZhdWx0X25hbWVbaXR5cGVdLCBzeXNtbXVfaXBzX25hbWVbaXBzXSk7CisJCX0gZWxzZSB7CisJCQliYXNlID0gMDsKIAkJfQogCX0KKworCXN5c21tdV91bmJsb2NrKGlwcyk7CisKKwlpZiAoIWJhc2UpCisJCWRldl9ub3RpY2UoZGV2LCAiJXMgZnJvbSAlcyBpcyBub3QgaGFuZGxlZC5cbiIsCisJCQlzeXNtbXVfZmF1bHRfbmFtZVtpdHlwZV0sIHN5c21tdV9pcHNfbmFtZVtpcHNdKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotaW50IHM1cF9zeXNtbXVfc2V0X3RhYmxlYmFzZV9wZ2Qoc3lzbW11X2lwcyBpcHMsIHVuc2lnbmVkIGxvbmcgcGdkKQordm9pZCBzNXBfc3lzbW11X3NldF90YWJsZWJhc2VfcGdkKHN5c21tdV9pcHMgaXBzLCB1bnNpZ25lZCBsb25nIHBnZCkKIHsKLQlzdHJ1Y3Qgc3lzbW11X2NvbnRyb2xsZXIgKnN5c21tdWNvbnAgPSBOVUxMOwotCi0Jc3lzbW11Y29ucCA9ICZzNXBfc3lzbW11X2NudGxyc1tpcHNdOwotCi0JaWYgKHN5c21tdWNvbnAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgaXAncyBzeXNtbXUgaW5mb1xuIik7Ci0JCXJldHVybiAxOworCWlmIChpc19zeXNtbXVfYWN0aXZlKGlwcykpIHsKKwkJc3lzbW11X2Jsb2NrKGlwcyk7CisJCV9fc3lzbW11X3NldF9wdGJhc2UoaXBzLCBwZ2QpOworCQlzeXNtbXVfdW5ibG9jayhpcHMpOworCX0gZWxzZSB7CisJCWRldl9kYmcoZGV2LCAiJXMgaXMgZGlzYWJsZWQuICIKKwkJCSJTa2lwcGluZyBpbml0aWFsaXppbmcgcGFnZSB0YWJsZSBiYXNlLlxuIiwKKwkJCQkJCXN5c21tdV9pcHNfbmFtZVtpcHNdKTsKIAl9Ci0KLQkvKiBTZXQgc3lzbW11IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzICovCi0JX19yYXdfd3JpdGVsKHBnZCwgc3lzbW11Y29ucC0+cmVncyArIFM1UF9QVF9CQVNFX0FERFIpOwotCi0JaWYgKHM1cF9zeXNtbXVfdGxiX2ludmFsaWRhdGUoaXBzKSAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCBzNXBfc3lzbW11X3RsYl9pbnZhbGlkYXRlXG4iKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1cF9zeXNtbXVfc2V0X3RhYmxlYmFzZShzeXNtbXVfaXBzIGlwcykKK3ZvaWQgczVwX3N5c21tdV9lbmFibGUoc3lzbW11X2lwcyBpcHMsIHVuc2lnbmVkIGxvbmcgcGdkKQogewotCXVuc2lnbmVkIGludCBwZzsKLQlzdHJ1Y3Qgc3lzbW11X2NvbnRyb2xsZXIgKnN5c21tdWNvbnA7CisJaWYgKCFpc19zeXNtbXVfYWN0aXZlKGlwcykpIHsKKwkJc3lzbW11X2Nsa19lbmFibGUoaXBzKTsKIAotCXN5c21tdWNvbnAgPSAmczVwX3N5c21tdV9jbnRscnNbaXBzXTsKKwkJX19zeXNtbXVfc2V0X3B0YmFzZShpcHMsIHBnZCk7CiAKLQlpZiAoc3lzbW11Y29ucCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBpcCdzIHN5c21tdSBpbmZvXG4iKTsKLQkJcmV0dXJuIDE7CisJCV9fcmF3X3dyaXRlbChDVFJMX0VOQUJMRSwgc3lzbW11c2Zyc1tpcHNdICsgUzVQX01NVV9DVFJMKTsKKworCQlzZXRfc3lzbW11X2FjdGl2ZShpcHMpOworCQlkZXZfZGJnKGRldiwgIiVzIGlzIGVuYWJsZWQuXG4iLCBzeXNtbXVfaXBzX25hbWVbaXBzXSk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhkZXYsICIlcyBpcyBhbHJlYWR5IGVuYWJsZWQuXG4iLCBzeXNtbXVfaXBzX25hbWVbaXBzXSk7CiAJfQotCi0JX19hc21fXygibXJjCXAxNSwgMCwgJTAsIGMyLCBjMCwgMCIJXAotCQk6ICI9ciIgKHBnKSA6IDogImNjIik7CQlcCi0JCXBnICY9IH4weDNmZmY7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogQ1AxNSBUVEJSMCA6IDB4JXhcbiIsIF9fZnVuY19fLCBwZyk7Ci0KLQkvKiBTZXQgc3lzbW11IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzICovCi0JX19yYXdfd3JpdGVsKHBnLCBzeXNtbXVjb25wLT5yZWdzICsgUzVQX1BUX0JBU0VfQUREUik7Ci0KLQlyZXR1cm4gMDsKIH0KIAotaW50IHM1cF9zeXNtbXVfZW5hYmxlKHN5c21tdV9pcHMgaXBzKQordm9pZCBzNXBfc3lzbW11X2Rpc2FibGUoc3lzbW11X2lwcyBpcHMpCiB7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCXN0cnVjdCBzeXNtbXVfY29udHJvbGxlciAqc3lzbW11Y29ucDsKLQotCXN5c21tdWNvbnAgPSAmczVwX3N5c21tdV9jbnRscnNbaXBzXTsKLQotCWlmIChzeXNtbXVjb25wID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGlwJ3Mgc3lzbW11IGluZm9cbiIpOwotCQlyZXR1cm4gMTsKKwlpZiAoaXNfc3lzbW11X2FjdGl2ZShpcHMpKSB7CisJCV9fcmF3X3dyaXRlbChDVFJMX0RJU0FCTEUsIHN5c21tdXNmcnNbaXBzXSArIFM1UF9NTVVfQ1RSTCk7CisJCXNldF9zeXNtbXVfaW5hY3RpdmUoaXBzKTsKKwkJc3lzbW11X2Nsa19kaXNhYmxlKGlwcyk7CisJCWRldl9kYmcoZGV2LCAiJXMgaXMgZGlzYWJsZWQuXG4iLCBzeXNtbXVfaXBzX25hbWVbaXBzXSk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhkZXYsICIlcyBpcyBhbHJlYWR5IGRpc2FibGVkLlxuIiwgc3lzbW11X2lwc19uYW1lW2lwc10pOwogCX0KLQotCXM1cF9zeXNtbXVfc2V0X3RhYmxlYmFzZShpcHMpOwotCi0JLyogcmVwbGFjZW1lbnQgcG9saWN5IDogTFJVICovCi0JcmVnID0gX19yYXdfcmVhZGwoc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfQ0ZHKTsKLQlyZWcgfD0gMHgxOwotCV9fcmF3X3dyaXRlbChyZWcsIHN5c21tdWNvbnAtPnJlZ3MgKyBTNVBfTU1VX0NGRyk7Ci0KLQkvKiBFbmFibGUgaW50ZXJydXB0LCBFbmFibGUgTU1VICovCi0JcmVnID0gX19yYXdfcmVhZGwoc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfQ1RSTCk7Ci0JcmVnIHw9ICgweDEgPDwgMikgfCAoMHgxIDw8IDApOwotCi0JX19yYXdfd3JpdGVsKHJlZywgc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfQ1RSTCk7Ci0KLQlzeXNtbXVjb25wLT5lbmFibGUgPSB0cnVlOwotCi0JcmV0dXJuIDA7CiB9CiAKLWludCBzNXBfc3lzbW11X2Rpc2FibGUoc3lzbW11X2lwcyBpcHMpCit2b2lkIHM1cF9zeXNtbXVfdGxiX2ludmFsaWRhdGUoc3lzbW11X2lwcyBpcHMpCiB7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCXN0cnVjdCBzeXNtbXVfY29udHJvbGxlciAqc3lzbW11Y29ucCA9IE5VTEw7Ci0KLQlpZiAoaXBzID4gUzVQX1NZU01NVV9UT1RBTF9JUE5VTSkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGlwcyBwYXJhbWV0ZXJcbiIpOwotCi0Jc3lzbW11Y29ucCA9ICZzNXBfc3lzbW11X2NudGxyc1tpcHNdOwotCi0JaWYgKHN5c21tdWNvbnAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgaXAncyBzeXNtbXUgaW5mb1xuIik7Ci0JCXJldHVybiAxOworCWlmIChpc19zeXNtbXVfYWN0aXZlKGlwcykpIHsKKwkJc3lzbW11X2Jsb2NrKGlwcyk7CisJCV9fc3lzbW11X3RsYl9pbnZhbGlkYXRlKGlwcyk7CisJCXN5c21tdV91bmJsb2NrKGlwcyk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhkZXYsICIlcyBpcyBkaXNhYmxlZC4gIgorCQkJIlNraXBwaW5nIGludmFsaWRhdGluZyBUTEIuXG4iLCBzeXNtbXVfaXBzX25hbWVbaXBzXSk7CiAJfQotCi0JcmVnID0gX19yYXdfcmVhZGwoc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfQ0ZHKTsKLQotCS8qIHJlcGxhY2VtZW50IHBvbGljeSA6IExSVSAqLwotCXJlZyB8PSAweDE7Ci0JX19yYXdfd3JpdGVsKHJlZywgc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfQ0ZHKTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKHN5c21tdWNvbnAtPnJlZ3MgKyBTNVBfTU1VX0NUUkwpOwotCi0JLyogRGlzYWJsZSBNTVUgKi8KLQlyZWcgJj0gfjB4MTsKLQlfX3Jhd193cml0ZWwocmVnLCBzeXNtbXVjb25wLT5yZWdzICsgUzVQX01NVV9DVFJMKTsKLQotCXN5c21tdWNvbnAtPmVuYWJsZSA9IGZhbHNlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzNXBfc3lzbW11X3RsYl9pbnZhbGlkYXRlKHN5c21tdV9pcHMgaXBzKQotewotCXVuc2lnbmVkIGludCByZWc7Ci0Jc3RydWN0IHN5c21tdV9jb250cm9sbGVyICpzeXNtbXVjb25wID0gTlVMTDsKLQotCXN5c21tdWNvbnAgPSAmczVwX3N5c21tdV9jbnRscnNbaXBzXTsKLQotCWlmIChzeXNtbXVjb25wID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGlwJ3Mgc3lzbW11IGluZm9cbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBzZXQgQmxvY2sgTU1VIGZvciBmbHVzaCBUTEIgKi8KLQlyZWcgPSBfX3Jhd19yZWFkbChzeXNtbXVjb25wLT5yZWdzICsgUzVQX01NVV9DVFJMKTsKLQlyZWcgfD0gMHgxIDw8IDE7Ci0JX19yYXdfd3JpdGVsKHJlZywgc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfQ1RSTCk7Ci0KLQkvKiBmbHVzaCBhbGwgVExCIGVudHJ5ICovCi0JX19yYXdfd3JpdGVsKDB4MSwgc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfRkxVU0gpOwotCi0JLyogc2V0IFVuLWJsb2NrIE1NVSBhZnRlciBmbHVzaCBUTEIgKi8KLQlyZWcgPSBfX3Jhd19yZWFkbChzeXNtbXVjb25wLT5yZWdzICsgUzVQX01NVV9DVFJMKTsKLQlyZWcgJj0gfigweDEgPDwgMSk7Ci0JX19yYXdfd3JpdGVsKHJlZywgc3lzbW11Y29ucC0+cmVncyArIFM1UF9NTVVfQ1RSTCk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzNXBfc3lzbW11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IGk7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3Qgc3lzbW11X2NvbnRyb2xsZXIgKnN5c21tdWNvbnA7Ci0Jc3lzbW11X2lwcyBpcHM7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKm1lbTsKKworCWRldiA9ICZwZGV2LT5kZXY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUzVQX1NZU01NVV9UT1RBTF9JUE5VTTsgaSsrKSB7Ci0JCXN5c21tdWNvbnAgPSAmczVwX3N5c21tdV9jbnRscnNbaV07Ci0JCWlmIChzeXNtbXVjb25wID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBpcCdzIHN5c21tdSBpbmZvXG4iKTsKLQkJCXJldCA9IC1FTk9FTlQ7Ci0JCQlnb3RvIGVycl9yZXM7Ci0JCX0KKwkJaW50IGlycTsKIAotCQlzeXNtbXVjb25wLT5uYW1lID0gc3lzbW11X2lwc19uYW1lW2ldOworCQlzeXNtbXVfY2xrX2luaXQoZGV2LCBpKTsKKwkJc3lzbW11X2Nsa19kaXNhYmxlKGkpOwogCiAJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgaSk7CiAJCWlmICghcmVzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgc3lzbW11IHJlc291cmNlXG4iKTsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCB0aGUgcmVzb3VyY2Ugb2YgJXMuXG4iLAorCQkJCQkJCXN5c21tdV9pcHNfbmFtZVtpXSk7CiAJCQlyZXQgPSAtRU5PREVWOwogCQkJZ290byBlcnJfcmVzOwogCQl9CiAKLQkJc3lzbW11Y29ucC0+bWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsCisJCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LAogCQkJCSgocmVzLT5lbmQpIC0gKHJlcy0+c3RhcnQpKSArIDEsIHBkZXYtPm5hbWUpOwotCQlpZiAoIXN5c21tdWNvbnAtPm1lbSkgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVxdWVzdCBzeXNtbXUgbWVtb3J5IHJlZ2lvblxuIik7CisJCWlmICghbWVtKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHRoZSBtZW1vcnkgcmVnaW9uIG9mICVzLlxuIiwKKwkJCQkJCQlzeXNtbXVfaXBzX25hbWVbaV0pOwogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBlcnJfcmVzOwogCQl9CiAKLQkJc3lzbW11Y29ucC0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7Ci0JCWlmICghc3lzbW11Y29ucC0+cmVncykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gc3lzbW11IGlvcmVtYXBcbiIpOworCQlzeXNtbXVzZnJzW2ldID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwkJaWYgKCFzeXNtbXVzZnJzW2ldKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwKCkgZm9yICVzLlxuIiwKKwkJCQkJCQlzeXNtbXVfaXBzX25hbWVbaV0pOwogCQkJcmV0ID0gLUVOWElPOwogCQkJZ290byBlcnJfcmVnOwogCQl9CiAKLQkJc3lzbW11Y29ucC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsKLQkJaWYgKHN5c21tdWNvbnAtPmlycSA8PSAwKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgc3lzbW11IGlycSByZXNvdXJjZVxuIik7CisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7CisJCWlmIChpcnEgPD0gMCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IHRoZSBJUlEgcmVzb3VyY2Ugb2YgJXMuXG4iLAorCQkJCQkJCXN5c21tdV9pcHNfbmFtZVtpXSk7CiAJCQlyZXQgPSAtRU5PRU5UOwogCQkJZ290byBlcnJfbWFwOwogCQl9CiAKLQkJcmV0ID0gcmVxdWVzdF9pcnEoc3lzbW11Y29ucC0+aXJxLCBzNXBfc3lzbW11X2lycSwgSVJRRl9ESVNBQkxFRCwgcGRldi0+bmFtZSwgc3lzbW11Y29ucCk7Ci0JCWlmIChyZXQpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHJlcXVlc3QgaXJxXG4iKTsKKwkJaWYgKHJlcXVlc3RfaXJxKGlycSwgczVwX3N5c21tdV9pcnEsIElSUUZfRElTQUJMRUQsCisJCQkJCQlwZGV2LT5uYW1lLCAodm9pZCAqKWkpKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUSBmb3IgJXMuXG4iLAorCQkJCQkJCXN5c21tdV9pcHNfbmFtZVtpXSk7CiAJCQlyZXQgPSAtRU5PRU5UOwogCQkJZ290byBlcnJfbWFwOwogCQl9Ci0KLQkJaXBzID0gKHN5c21tdV9pcHMpaTsKLQotCQlzeXNtbXVjb25wLT5pcHMgPSBpcHM7CiAJfQogCiAJcmV0dXJuIDA7CiAKLWVycl9yZWc6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKChyZXNvdXJjZV9zaXplX3Qpc3lzbW11Y29ucC0+bWVtLCAocmVzb3VyY2Vfc2l6ZV90KSgocmVzLT5lbmQpIC0gKHJlcy0+c3RhcnQpICsgMSkpOwogZXJyX21hcDoKLQlpb3VubWFwKHN5c21tdWNvbnAtPnJlZ3MpOworCWlvdW5tYXAoc3lzbW11c2Zyc1tpXSk7CitlcnJfcmVnOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOwogZXJyX3JlczoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvS2NvbmZpZwppbmRleCAzMmJlMDVjLi5iZTcyMTAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvS2NvbmZpZwpAQCAtMjczLDYgKzI3MywxOSBAQAogCWhlbHAKIAkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBrZXlwYWQKIAorY29uZmlnIFNBTVNVTkdfREVWX1BXTQorCWJvb2wKKwlkZWZhdWx0IHkgaWYgQVJDSF9TM0MyNDEwCisJaGVscAorCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgUFdNIFRpbWVyCisKK2NvbmZpZyBTM0MyNFhYX1BXTQorCWJvb2wgIlBXTSBkZXZpY2Ugc3VwcG9ydCIKKwlzZWxlY3QgSEFWRV9QV00KKwloZWxwCisJICBTdXBwb3J0IGZvciBleHBvcnRpbmcgdGhlIFBXTSB0aW1lciBibG9ja3MgdmlhIHRoZSBwd20gZGV2aWNlCisJICBzeXN0ZW0KKwogIyBETUEKIAogY29uZmlnIFMzQ19ETUEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZQppbmRleCAyOTkzMmY4Li5lOWRlNThhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlCkBAIC01OSw2ICs1OSw3IEBACiBvYmotJChDT05GSUdfU0FNU1VOR19ERVZfSURFKQkrPSBkZXYtaWRlLm8KIG9iai0kKENPTkZJR19TQU1TVU5HX0RFVl9UUykJKz0gZGV2LXRzLm8KIG9iai0kKENPTkZJR19TQU1TVU5HX0RFVl9LRVlQQUQpCSs9IGRldi1rZXlwYWQubworb2JqLSQoQ09ORklHX1NBTVNVTkdfREVWX1BXTSkJKz0gZGV2LXB3bS5vCiAKICMgRE1BIHN1cHBvcnQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1wd20uYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtcHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiNDdiMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtcHdtLmMKQEAgLTAsMCArMSw1MyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1wd20uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQmVuIERvb2tzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+LCA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqCisgKiBTM0Mgc2VyaWVzIGRldmljZSBkZWZpbml0aW9uIGZvciB0aGUgUFdNIHRpbWVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorCisjZGVmaW5lIFRJTUVSX1JFU09VUkNFX1NJWkUgKDEpCisKKyNkZWZpbmUgVElNRVJfUkVTT1VSQ0UoX3RtciwgX2lycSkJCQlcCisJKHN0cnVjdCByZXNvdXJjZSBbVElNRVJfUkVTT1VSQ0VfU0laRV0pIHsJXAorCQlbMF0gPSB7CQkJCQlcCisJCQkuc3RhcnQJPSBfaXJxLAkJCVwKKwkJCS5lbmQJPSBfaXJxLAkJCVwKKwkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCVwKKwkJfQkJCQkJXAorCX0KKworI2RlZmluZSBERUZJTkVfUzNDX1RJTUVSKF90bXJfbm8sIF9pcnEpCQkJXAorCS5uYW1lCQk9ICJzM2MyNHh4LXB3bSIsCQlcCisJLmlkCQk9IF90bXJfbm8sCQkJXAorCS5udW1fcmVzb3VyY2VzCT0gVElNRVJfUkVTT1VSQ0VfU0laRSwJCVwKKwkucmVzb3VyY2UJPSBUSU1FUl9SRVNPVVJDRShfdG1yX25vLCBfaXJxKSwJXAorCisvKgorICogc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGFuIHN0YXRpYyBtYXBwaW5nIGZvciB0aGUgdGltZXIsCisgKiB3ZSBkbyBub3QgYm90aGVyIHNldHRpbmcgYW55IElPIHJlc291cmNlIGZvciB0aGUgYmFzZS4KKyAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdGltZXJbXSA9IHsKKwlbMF0gPSB7IERFRklORV9TM0NfVElNRVIoMCwgSVJRX1RJTUVSMCkgfSwKKwlbMV0gPSB7IERFRklORV9TM0NfVElNRVIoMSwgSVJRX1RJTUVSMSkgfSwKKwlbMl0gPSB7IERFRklORV9TM0NfVElNRVIoMiwgSVJRX1RJTUVSMikgfSwKKwlbM10gPSB7IERFRklORV9TM0NfVElNRVIoMywgSVJRX1RJTUVSMykgfSwKKwlbNF0gPSB7IERFRklORV9TM0NfVElNRVIoNCwgSVJRX1RJTUVSNCkgfSwKK307CitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfdGltZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY3B1LmgKaW5kZXggOWFkZGIzZC4uY2VkZmZmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS5oCkBAIC04Miw2ICs4Miw3IEBACiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzNXA2NHgwX3N5c2NsYXNzOwogZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczVwNjQ0Ml9zeXNjbGFzczsKIGV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHM1cHYyMTBfc3lzY2xhc3M7CitleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBleHlub3M0X3N5c2NsYXNzOwogCiBleHRlcm4gdm9pZCAoKnM1cGMxeHhfaWRsZSkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGV2cy5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKaW5kZXggYjRkMjA4Yi4uZjBkYTZiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKQEAgLTEsNSArMSw4IEBACiAvKiBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaAogICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgpAQCAtOTYsMTUgKzk5LDE2IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MjEwX2RldmljZV9paXMyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjIxMF9kZXZpY2Vfc3BkaWY7CiAKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX2FjOTc7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9wY20wOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfcGNtMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX3BjbTI7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9pMnMwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfaTJzMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX2kyczI7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9zcGRpZjsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX3BkW107CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9hYzk3OworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2VfcGNtMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV4eW5vczRfZGV2aWNlX3BjbTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9wY20yOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2VfaTJzMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV4eW5vczRfZGV2aWNlX2kyczE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9pMnMyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2Vfc3BkaWY7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9wZFtdOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2VfYWhjaTsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjQ0Ml9kZXZpY2VfcGNtMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NDJfZGV2aWNlX3BjbTE7CkBAIC0xMzMsMTEgKzEzNywxMiBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwX2RldmljZV9maW1jMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cF9kZXZpY2VfZmltYzE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXBfZGV2aWNlX2ZpbWMyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwX2RldmljZV9maW1jMzsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwX2RldmljZV9taXBpX2NzaXMwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwX2RldmljZV9taXBpX2NzaXMxOwogCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9zeXNtbXU7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3M0X2RldmljZV9zeXNtbXU7CiAKIC8qIHMzYzI0NDAgc3BlY2lmaWMgZGV2aWNlcyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZpbWMtY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9maW1jLWNvcmUuaAppbmRleCA4MWEzYmZlLi45NDVhOTlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZpbWMtY29yZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZmltYy1jb3JlLmgKQEAgLTM4LDYgKzM4LDExIEBACiAJCXM1cF9kZXZpY2VfZmltYzIubmFtZSA9IG5hbWU7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1M1UF9ERVZfRklNQzMKKwljYXNlIDM6CisJCXM1cF9kZXZpY2VfZmltYzMubmFtZSA9IG5hbWU7CisJCWJyZWFrOworI2VuZGlmCiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLmgKaW5kZXggZTRiNWNmMS4uNWUwNGZhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaApAQCAtMjI1LDQgKzIyNSwyMCBAQAogICovCiBleHRlcm4gaW50IHM1cF9yZWdpc3Rlcl9ncGlvX2ludGVycnVwdChpbnQgcGluKTsKIAorLyoqIHM1cF9yZWdpc3Rlcl9ncGlvaW50X2JhbmsoKSAtIGFkZCBncGlvIGJhbmsgZm9yIGZ1cnRoZXIgZ3BpbyBpbnRlcnJ1cHQKKyAqIHJlZ2lzdHJhdGlvbiAoc2VlIHM1cF9yZWdpc3Rlcl9ncGlvX2ludGVycnVwdCBmdW5jdGlvbikKKyAqIEBjaGFpbl9pcnE6IGNoYWluZWQgaXJxIG51bWJlciBmb3IgdGhlIGdwaW8gaW50IGhhbmRsZXIgZm9yIHRoaXMgYmFuaworICogQHN0YXJ0OiBzdGFydCBncGlvIGdyb3VwIG51bWJlciBvZiB0aGlzIGJhbmsKKyAqIEBucl9ncm91cHM6IG51bWJlciBvZiBncGlvIGdyb3VwcyBoYW5kbGVkIGJ5IHRoaXMgYmFuaworICoKKyAqIFRoaXMgZnVuY3Rpb25zIHJlZ2lzdGVycyBpbml0aWFsIGluZm9ybWF0aW9uIGFib3V0IGdwaW8gYmFua3MgdGhhdAorICogY2FuIGJlIGxhdGVyIHVzZWQgYnkgdGhlIHM1cF9yZWdpc3Rlcl9ncGlvX2ludGVycnVwdCgpIGZ1bmN0aW9uIHRvCisgKiBlbmFibGUgc3VwcG9ydCBmb3IgZ3BpbyBpbnRlcnJ1cHQgZm9yIHBhcnRpY3VsYXIgZ3BpbyBncm91cC4KKyAqLworI2lmZGVmIENPTkZJR19TNVBfR1BJT19JTlQKK2V4dGVybiBpbnQgczVwX3JlZ2lzdGVyX2dwaW9pbnRfYmFuayhpbnQgY2hhaW5faXJxLCBpbnQgc3RhcnQsIGludCBucl9ncm91cHMpOworI2Vsc2UKKyNkZWZpbmUgczVwX3JlZ2lzdGVyX2dwaW9pbnRfYmFuayhjaGFpbl9pcnEsIHN0YXJ0LCBucl9ncm91cHMpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAjZW5kaWYgLyogX19QTEFUX0dQSU9fQ0ZHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcGQuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcGQuaAppbmRleCA1ZjBhZDg1Li5hYmI0YmMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wZC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wZC5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTcsNyArMTcsNyBAQAogCXZvaWQgX19pb21lbSAqYmFzZTsKIH07CiAKLWVudW0gczVwdjMxMF9wZF9ibG9jayB7CitlbnVtIGV4eW5vczRfcGRfYmxvY2sgewogCVBEX01GQywKIAlQRF9HM0QsCiAJUERfTENEMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaAppbmRleCA1YTQxYTBiLi5iMGJkZjE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3NkaGNpLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9zZGhjaS5oCkBAIC0xLDQgKzEsNyBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3NkaGNpLmgKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCiAgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgogICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCkBAIC0xMTksMTAgKzEyMiwxMCBAQAogZXh0ZXJuIHZvaWQgczVwdjIxMF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7CiBleHRlcm4gdm9pZCBzNXB2MjEwX3NldHVwX3NkaGNpMl9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKIGV4dGVybiB2b2lkIHM1cHYyMTBfc2V0dXBfc2RoY2kzX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOwotZXh0ZXJuIHZvaWQgczVwdjMxMF9zZXR1cF9zZGhjaTBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7Ci1leHRlcm4gdm9pZCBzNXB2MzEwX3NldHVwX3NkaGNpMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKLWV4dGVybiB2b2lkIHM1cHYzMTBfc2V0dXBfc2RoY2kyX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOwotZXh0ZXJuIHZvaWQgczVwdjMxMF9zZXR1cF9zZGhjaTNfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7CitleHRlcm4gdm9pZCBleHlub3M0X3NldHVwX3NkaGNpMF9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKK2V4dGVybiB2b2lkIGV4eW5vczRfc2V0dXBfc2RoY2kxX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOworZXh0ZXJuIHZvaWQgZXh5bm9zNF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7CitleHRlcm4gdm9pZCBleHlub3M0X3NldHVwX3NkaGNpM19jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKIAogLyogUzNDMjQxNiBTREhDSSBzZXR1cCAqLwogCkBAIC0zMzQsNTcgKzMzNyw1NyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1M1UFYyMTBfU0VUVVBfU0RIQ0kgKi8KIAotLyogUzVQVjMxMCBTREhDSSBzZXR1cCAqLwotI2lmZGVmIENPTkZJR19TNVBWMzEwX1NFVFVQX1NESENJCi1leHRlcm4gY2hhciAqczVwdjMxMF9oc21tY19jbGtzcmNzWzRdOworLyogRVhZTk9TNCBTREhDSSBzZXR1cCAqLworI2lmZGVmIENPTkZJR19FWFlOT1M0X1NFVFVQX1NESENJCitleHRlcm4gY2hhciAqZXh5bm9zNF9oc21tY19jbGtzcmNzWzRdOwogCi1leHRlcm4gdm9pZCBzNXB2MzEwX3NldHVwX3NkaGNpX2NmZ19jYXJkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKK2V4dGVybiB2b2lkIGV4eW5vczRfc2V0dXBfc2RoY2lfY2ZnX2NhcmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCQkgICB2b2lkIF9faW9tZW0gKnIsCiAJCQkJCSAgIHN0cnVjdCBtbWNfaW9zICppb3MsCiAJCQkJCSAgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MzEwX2RlZmF1bHRfc2RoY2kwKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgZXh5bm9zNF9kZWZhdWx0X3NkaGNpMCh2b2lkKQogewogI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DCi0JczNjX2hzbW1jMF9kZWZfcGxhdGRhdGEuY2xvY2tzID0gczVwdjMxMF9oc21tY19jbGtzcmNzOwotCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gczVwdjMxMF9zZXR1cF9zZGhjaTBfY2ZnX2dwaW87Ci0JczNjX2hzbW1jMF9kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBzNXB2MzEwX3NldHVwX3NkaGNpX2NmZ19jYXJkOworCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IGV4eW5vczRfaHNtbWNfY2xrc3JjczsKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IGV4eW5vczRfc2V0dXBfc2RoY2kwX2NmZ19ncGlvOworCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gZXh5bm9zNF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwdjMxMF9kZWZhdWx0X3NkaGNpMSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGV4eW5vczRfZGVmYXVsdF9zZGhjaTEodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzEKLQlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzNXB2MzEwX2hzbW1jX2Nsa3NyY3M7Ci0JczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzNXB2MzEwX3NldHVwX3NkaGNpMV9jZmdfZ3BpbzsKLQlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHM1cHYzMTBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7CisJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2xvY2tzID0gZXh5bm9zNF9oc21tY19jbGtzcmNzOworCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gZXh5bm9zNF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW87CisJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBleHlub3M0X3NldHVwX3NkaGNpX2NmZ19jYXJkOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MzEwX2RlZmF1bHRfc2RoY2kyKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgZXh5bm9zNF9kZWZhdWx0X3NkaGNpMih2b2lkKQogewogI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMgotCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHM1cHYzMTBfaHNtbWNfY2xrc3JjczsKLQlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHM1cHYzMTBfc2V0dXBfc2RoY2kyX2NmZ19ncGlvOwotCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwdjMxMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKKwlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBleHlub3M0X2hzbW1jX2Nsa3NyY3M7CisJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBleHlub3M0X3NldHVwX3NkaGNpMl9jZmdfZ3BpbzsKKwlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IGV4eW5vczRfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7CiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHM1cHYzMTBfZGVmYXVsdF9zZGhjaTModm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHlub3M0X2RlZmF1bHRfc2RoY2kzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMzCi0JczNjX2hzbW1jM19kZWZfcGxhdGRhdGEuY2xvY2tzID0gczVwdjMxMF9oc21tY19jbGtzcmNzOwotCXMzY19oc21tYzNfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gczVwdjMxMF9zZXR1cF9zZGhjaTNfY2ZnX2dwaW87Ci0JczNjX2hzbW1jM19kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBzNXB2MzEwX3NldHVwX3NkaGNpX2NmZ19jYXJkOworCXMzY19oc21tYzNfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IGV4eW5vczRfaHNtbWNfY2xrc3JjczsKKwlzM2NfaHNtbWMzX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IGV4eW5vczRfc2V0dXBfc2RoY2kzX2NmZ19ncGlvOworCXMzY19oc21tYzNfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gZXh5bm9zNF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKICNlbmRpZgogfQogCiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHM1cHYzMTBfZGVmYXVsdF9zZGhjaTAodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgczVwdjMxMF9kZWZhdWx0X3NkaGNpMSh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MzEwX2RlZmF1bHRfc2RoY2kyKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHM1cHYzMTBfZGVmYXVsdF9zZGhjaTModm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZXh5bm9zNF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBleHlub3M0X2RlZmF1bHRfc2RoY2kxKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGV4eW5vczRfZGVmYXVsdF9zZGhjaTIodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZXh5bm9zNF9kZWZhdWx0X3NkaGNpMyh2b2lkKSB7IH0KIAotI2VuZGlmIC8qIENPTkZJR19TNVBWMzEwX1NFVFVQX1NESENJICovCisjZW5kaWYgLyogQ09ORklHX0VYWU5PUzRfU0VUVVBfU0RIQ0kgKi8KIAogI2VuZGlmIC8qIF9fUExBVF9TM0NfU0RIQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3B3bS5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3B3bS5jCmluZGV4IDJlZWI0OWZhLi5mMzc0NTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcHdtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3B3bS5jCkBAIC0yMCwxMCArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CiAKIHN0cnVjdCBwd21fZGV2aWNlIHsKQEAgLTQ3LDM3ICs0NSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc2NhbGVyWzJdOwogCi0vKiBTdGFuZGFyZCBzZXR1cCBmb3IgYSB0aW1lciBibG9jay4gKi8KLQotI2RlZmluZSBUSU1FUl9SRVNPVVJDRV9TSVpFICgxKQotCi0jZGVmaW5lIFRJTUVSX1JFU09VUkNFKF90bXIsIF9pcnEpCQkJXAotCShzdHJ1Y3QgcmVzb3VyY2UgW1RJTUVSX1JFU09VUkNFX1NJWkVdKSB7CVwKLQkJWzBdID0gewkJCQkJXAotCQkJLnN0YXJ0CT0gX2lycSwJCQlcCi0JCQkuZW5kCT0gX2lycSwJCQlcCi0JCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQlcCi0JCX0JCQkJCVwKLQl9Ci0KLSNkZWZpbmUgREVGSU5FX1MzQ19USU1FUihfdG1yX25vLCBfaXJxKQkJCVwKLQkubmFtZQkJPSAiczNjMjR4eC1wd20iLAkJXAotCS5pZAkJPSBfdG1yX25vLAkJCVwKLQkubnVtX3Jlc291cmNlcwk9IFRJTUVSX1JFU09VUkNFX1NJWkUsCQlcCi0JLnJlc291cmNlCT0gVElNRVJfUkVTT1VSQ0UoX3Rtcl9ubywgX2lycSksCVwKLQotLyogc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGFuIHN0YXRpYyBtYXBwaW5nIGZvciB0aGUgdGltZXIsIHdlIGRvIG5vdAotICogYm90aGVyIHNldHRpbmcgYW55IElPIHJlc291cmNlIGZvciB0aGUgYmFzZS4KLSAqLwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdGltZXJbXSA9IHsKLQlbMF0gPSB7IERFRklORV9TM0NfVElNRVIoMCwgSVJRX1RJTUVSMCkgfSwKLQlbMV0gPSB7IERFRklORV9TM0NfVElNRVIoMSwgSVJRX1RJTUVSMSkgfSwKLQlbMl0gPSB7IERFRklORV9TM0NfVElNRVIoMiwgSVJRX1RJTUVSMikgfSwKLQlbM10gPSB7IERFRklORV9TM0NfVElNRVIoMywgSVJRX1RJTUVSMykgfSwKLQlbNF0gPSB7IERFRklORV9TM0NfVElNRVIoNCwgSVJRX1RJTUVSNCkgfSwKLX07Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHB3bV9pc190ZGl2KHN0cnVjdCBwd21fZGV2aWNlICpwd20pCiB7CiAJcmV0dXJuIGNsa19nZXRfcGFyZW50KHB3bS0+Y2xrKSA9PSBwd20tPmNsa19kaXY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvTWFrZWZpbGUgYi9hcmNoL2FybS92ZnAvTWFrZWZpbGUKaW5kZXggMzlmNmQ4ZS4uNmRlNzNhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3ZmcC9NYWtlZmlsZQpAQCAtNCw4ICs0LDggQEAKICMgQ29weXJpZ2h0IChDKSAyMDAxIEFSTSBMaW1pdGVkCiAjCiAKLSMgRVhUUkFfQ0ZMQUdTIDo9IC1EREVCVUcKLSMgRVhUUkFfQUZMQUdTIDo9IC1EREVCVUcKKyMgY2NmbGFncy15IDo9IC1EREVCVUcKKyMgYXNmbGFncy15IDo9IC1EREVCVUcKIAogS0JVSUxEX0FGTEFHUwk6PSQoS0JVSUxEX0FGTEFHUzotbXNvZnQtZmxvYXQ9LVdhLC1tZnB1PXNvZnR2ZnArdmZwKQogTERGTEFHUwkJKz0tLW5vLXdhcm4tbWlzbWF0Y2gKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGY3ZGQ1ZjcuLjcyNDQ0ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMjk5LDggKzI5OSw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLWF0b21pYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC1sZS5oPgogCiAjZW5kaWYgLyogX19BU01fQVZSMzJfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdHlwZXMuaAppbmRleCA5Y2VmZGE2Li43MjY2N2EzIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC0yMywxNCArMjMsNiBAQAogCiAjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogRG1hIGFkZHJlc3NlcyBhcmUgMzItYml0cyB3aWRlLiAgKi8KLQotdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2F2cjMyX2tzeW1zLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9hdnIzMl9rc3ltcy5jCmluZGV4IDExZTMxMGMuLmQ5M2VhZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL2F2cjMyX2tzeW1zLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvYXZyMzJfa3N5bXMuYwpAQCAtNTgsOCArNTgsOCBAQAogRVhQT1JUX1NZTUJPTChmaW5kX25leHRfemVyb19iaXQpOwogRVhQT1JUX1NZTUJPTChmaW5kX2ZpcnN0X2JpdCk7CiBFWFBPUlRfU1lNQk9MKGZpbmRfbmV4dF9iaXQpOwotRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbmRfbmV4dF9sZV9iaXQpOwotRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdCk7CitFWFBPUlRfU1lNQk9MKGZpbmRfbmV4dF9iaXRfbGUpOworRVhQT1JUX1NZTUJPTChmaW5kX25leHRfemVyb19iaXRfbGUpOwogCiAvKiBJL08gcHJpbWl0aXZlcyAobGliL2lvLSouUykgKi8KIEVYUE9SVF9TWU1CT0woX19yYXdfcmVhZHNiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbGliL2ZpbmRiaXQuUyBiL2FyY2gvYXZyMzIvbGliL2ZpbmRiaXQuUwppbmRleCA5OTdiMzNiLi5iOTM1ODY0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2xpYi9maW5kYml0LlMKKysrIGIvYXJjaC9hdnIzMi9saWIvZmluZGJpdC5TCkBAIC0xMjMsNyArMTIzLDcgQEAKIAlicmd0CTFiCiAJcmV0YWwJcjExCiAKLUVOVFJZKGdlbmVyaWNfZmluZF9uZXh0X2xlX2JpdCkKK0VOVFJZKGZpbmRfbmV4dF9iaXRfbGUpCiAJbHNyCXI4LCByMTAsIDUKIAlzdWIJcjksIHIxMSwgcjEwCiAJcmV0bGUJcjExCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlicmd0CTFiCiAJcmV0YWwJcjExCiAKLUVOVFJZKGdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KQorRU5UUlkoZmluZF9uZXh0X3plcm9fYml0X2xlKQogCWxzcglyOCwgcjEwLCA1CiAJc3ViCXI5LCByMTEsIHIxMAogCXJldGxlCXIxMQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwppbmRleCBlNjdjOTk5Li5iZmM5ZDA3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwpAQCAtMjA0OCw2ICsyMDQ4LDExIEBACiAJCXJ4X2R3cy0+cmVnX3dpZHRoID0gRFdfRE1BX1NMQVZFX1dJRFRIXzE2QklUOwogCQlyeF9kd3MtPmNmZ19oaSA9IERXQ19DRkdIX1NSQ19QRVIoMyk7CiAJCXJ4X2R3cy0+Y2ZnX2xvICY9IH4oRFdDX0NGR0xfSFNfRFNUX1BPTCB8IERXQ19DRkdMX0hTX1NSQ19QT0wpOworCQlyeF9kd3MtPnNyY19tYXN0ZXIgPSAwOworCQlyeF9kd3MtPmRzdF9tYXN0ZXIgPSAxOworCQlyeF9kd3MtPnNyY19tc2l6ZSA9IERXX0RNQV9NU0laRV8xOworCQlyeF9kd3MtPmRzdF9tc2l6ZSA9IERXX0RNQV9NU0laRV8xOworCQlyeF9kd3MtPmZjID0gRFdfRE1BX0ZDX0RfUDJNOwogCX0KIAogCS8qIENoZWNrIGlmIERNQSBzbGF2ZSBpbnRlcmZhY2UgZm9yIHBsYXliYWNrIHNob3VsZCBiZSBjb25maWd1cmVkLiAqLwpAQCAtMjA1Niw2ICsyMDYxLDExIEBACiAJCXR4X2R3cy0+cmVnX3dpZHRoID0gRFdfRE1BX1NMQVZFX1dJRFRIXzE2QklUOwogCQl0eF9kd3MtPmNmZ19oaSA9IERXQ19DRkdIX0RTVF9QRVIoNCk7CiAJCXR4X2R3cy0+Y2ZnX2xvICY9IH4oRFdDX0NGR0xfSFNfRFNUX1BPTCB8IERXQ19DRkdMX0hTX1NSQ19QT0wpOworCQl0eF9kd3MtPnNyY19tYXN0ZXIgPSAwOworCQl0eF9kd3MtPmRzdF9tYXN0ZXIgPSAxOworCQl0eF9kd3MtPnNyY19tc2l6ZSA9IERXX0RNQV9NU0laRV8xOworCQl0eF9kd3MtPmRzdF9tc2l6ZSA9IERXX0RNQV9NU0laRV8xOworCQl0eF9kd3MtPmZjID0gRFdfRE1BX0ZDX0RfTTJQOwogCX0KIAogCWlmIChwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgZGF0YSwKQEAgLTIxMjgsNiArMjEzOCwxMSBAQAogCWR3cy0+cmVnX3dpZHRoID0gRFdfRE1BX1NMQVZFX1dJRFRIXzMyQklUOwogCWR3cy0+Y2ZnX2hpID0gRFdDX0NGR0hfRFNUX1BFUigyKTsKIAlkd3MtPmNmZ19sbyAmPSB+KERXQ19DRkdMX0hTX0RTVF9QT0wgfCBEV0NfQ0ZHTF9IU19TUkNfUE9MKTsKKwlkd3MtPnNyY19tYXN0ZXIgPSAwOworCWR3cy0+ZHN0X21hc3RlciA9IDE7CisJZHdzLT5zcmNfbXNpemUgPSBEV19ETUFfTVNJWkVfMTsKKwlkd3MtPmRzdF9tc2l6ZSA9IERXX0RNQV9NU0laRV8xOworCWR3cy0+ZmMgPSBEV19ETUFfRkNfRF9NMlA7CiAKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsCiAJCQkJc2l6ZW9mKHN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9jYWNoZS5jIGIvYXJjaC9hdnIzMi9tbS9jYWNoZS5jCmluZGV4IDI0YTc0ZDEuLjZhNDZlY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vY2FjaGUuYworKysgYi9hcmNoL2F2cjMyL21tL2NhY2hlLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogfQogCiAvKgotICogVGhpcyBvbmUgaXMgY2FsbGVkIGZyb20gZG9fbm9fcGFnZSgpLCBkb19zd2FwX3BhZ2UoKSBhbmQgaW5zdGFsbF9wYWdlKCkuCisgKiBUaGlzIG9uZSBpcyBjYWxsZWQgZnJvbSBfX2RvX2ZhdWx0KCkgYW5kIGRvX3N3YXBfcGFnZSgpLgogICovCiB2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwppbmRleCBjMDk1NzdkLi4wMTYxNWQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCkBAIC0zMyw2ICszMyw3IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUwogCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQogCXNlbGVjdCBJUlFfUEVSX0NQVSBpZiBTTVAKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECiAKIGNvbmZpZyBHRU5FUklDX0NTVU0KIAlkZWZfYm9vbCB5CkBAIC02OTAsMTMgKzY5MSwxMyBAQAogCiAKIG1lbnUgIkJsYWNrZmluIEtlcm5lbCBPcHRpbWl6YXRpb25zIgotCWRlcGVuZHMgb24gIVNNUAogCiBjb21tZW50ICJNZW1vcnkgT3B0aW1pemF0aW9ucyIKIAogY29uZmlnIElfRU5UUllfTDEKIAlib29sICJMb2NhdGUgaW50ZXJydXB0IGVudHJ5IGNvZGUgaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gIVNNUAogCWhlbHAKIAkgIElmIGVuYWJsZWQsIGludGVycnVwdCBlbnRyeSBjb2RlIChTVE9SRS9SRVNUT1JFIENPTlRFWFQpIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCkBAIC03MDQsNiArNzA1LDcgQEAKIGNvbmZpZyBFWENQVF9JUlFfU1lTQ19MMQogCWJvb2wgIkxvY2F0ZSBlbnRpcmUgQVNNIGxvd2xldmVsIGV4Y2VwdGlvbiAvIGludGVycnVwdCAtIFN5c2NhbGwgYW5kIENQTEIgaGFuZGxlciBjb2RlIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uICFTTVAKIAloZWxwCiAJICBJZiBlbmFibGVkLCB0aGUgZW50aXJlIEFTTSBsb3dsZXZlbCBleGNlcHRpb24gYW5kIGludGVycnVwdCBlbnRyeSBjb2RlCiAJICAoU1RPUkUvUkVTVE9SRSBDT05URVhUKSBpcyBsaW5rZWQgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuCkBAIC03MTIsNiArNzE0LDcgQEAKIGNvbmZpZyBET19JUlFfTDEKIAlib29sICJMb2NhdGUgZnJlcXVlbnRseSBjYWxsZWQgZG9faXJxIGRpc3BhdGNoZXIgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gIVNNUAogCWhlbHAKIAkgIElmIGVuYWJsZWQsIHRoZSBmcmVxdWVudGx5IGNhbGxlZCBkb19pcnEgZGlzcGF0Y2hlciBmdW5jdGlvbiBpcyBsaW5rZWQKIAkgIGludG8gTDEgaW5zdHJ1Y3Rpb24gbWVtb3J5LiAobGVzcyBsYXRlbmN5KQpAQCAtNzE5LDYgKzcyMiw3IEBACiBjb25maWcgQ09SRV9USU1FUl9JUlFfTDEKIAlib29sICJMb2NhdGUgZnJlcXVlbnRseSBjYWxsZWQgdGltZXJfaW50ZXJydXB0KCkgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gIVNNUAogCWhlbHAKIAkgIElmIGVuYWJsZWQsIHRoZSBmcmVxdWVudGx5IGNhbGxlZCB0aW1lcl9pbnRlcnJ1cHQoKSBmdW5jdGlvbiBpcyBsaW5rZWQKIAkgIGludG8gTDEgaW5zdHJ1Y3Rpb24gbWVtb3J5LiAobGVzcyBsYXRlbmN5KQpAQCAtNzI2LDYgKzczMCw3IEBACiBjb25maWcgSURMRV9MMQogCWJvb2wgIkxvY2F0ZSBmcmVxdWVudGx5IGlkbGUgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gIVNNUAogCWhlbHAKIAkgIElmIGVuYWJsZWQsIHRoZSBmcmVxdWVudGx5IGNhbGxlZCBpZGxlIGZ1bmN0aW9uIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCkBAIC03MzMsNiArNzM4LDcgQEAKIGNvbmZpZyBTQ0hFRFVMRV9MMQogCWJvb2wgIkxvY2F0ZSBrZXJuZWwgc2NoZWR1bGUgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gIVNNUAogCWhlbHAKIAkgIElmIGVuYWJsZWQsIHRoZSBmcmVxdWVudGx5IGNhbGxlZCBrZXJuZWwgc2NoZWR1bGUgaXMgbGlua2VkCiAJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKQEAgLTc0MCw2ICs3NDYsNyBAQAogY29uZmlnIEFSSVRITUVUSUNfT1BTX0wxCiAJYm9vbCAiTG9jYXRlIGtlcm5lbCBvd25lZCBhcml0aG1ldGljIGZ1bmN0aW9ucyBpbiBMMSBNZW1vcnkiCiAJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiAhU01QCiAJaGVscAogCSAgSWYgZW5hYmxlZCwgYXJpdGhtZXRpYyBmdW5jdGlvbnMgYXJlIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCkBAIC03NDcsNiArNzU0LDcgQEAKIGNvbmZpZyBBQ0NFU1NfT0tfTDEKIAlib29sICJMb2NhdGUgYWNjZXNzX29rIGZ1bmN0aW9uIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uICFTTVAKIAloZWxwCiAJICBJZiBlbmFibGVkLCB0aGUgYWNjZXNzX29rIGZ1bmN0aW9uIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCkBAIC03NTQsNiArNzYyLDcgQEAKIGNvbmZpZyBNRU1TRVRfTDEKIAlib29sICJMb2NhdGUgbWVtc2V0IGZ1bmN0aW9uIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uICFTTVAKIAloZWxwCiAJICBJZiBlbmFibGVkLCB0aGUgbWVtc2V0IGZ1bmN0aW9uIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCkBAIC03NjEsNiArNzcwLDcgQEAKIGNvbmZpZyBNRU1DUFlfTDEKIAlib29sICJMb2NhdGUgbWVtY3B5IGZ1bmN0aW9uIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uICFTTVAKIAloZWxwCiAJICBJZiBlbmFibGVkLCB0aGUgbWVtY3B5IGZ1bmN0aW9uIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCkBAIC03NjgsNiArNzc4LDcgQEAKIGNvbmZpZyBTVFJDTVBfTDEKIAlib29sICJsb2NhdGUgc3RyY21wIGZ1bmN0aW9uIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uICFTTVAKIAloZWxwCiAJICBJZiBlbmFibGVkLCB0aGUgc3RyY21wIGZ1bmN0aW9uIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkgKGxlc3MgbGF0ZW5jeSkuCkBAIC03NzUsNiArNzg2LDcgQEAKIGNvbmZpZyBTVFJOQ01QX0wxCiAJYm9vbCAibG9jYXRlIHN0cm5jbXAgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gIVNNUAogCWhlbHAKIAkgIElmIGVuYWJsZWQsIHRoZSBzdHJuY21wIGZ1bmN0aW9uIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkgKGxlc3MgbGF0ZW5jeSkuCkBAIC03ODIsNiArNzk0LDcgQEAKIGNvbmZpZyBTVFJDUFlfTDEKIAlib29sICJsb2NhdGUgc3RyY3B5IGZ1bmN0aW9uIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uICFTTVAKIAloZWxwCiAJICBJZiBlbmFibGVkLCB0aGUgc3RyY3B5IGZ1bmN0aW9uIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkgKGxlc3MgbGF0ZW5jeSkuCkBAIC03ODksNiArODAyLDcgQEAKIGNvbmZpZyBTVFJOQ1BZX0wxCiAJYm9vbCAibG9jYXRlIHN0cm5jcHkgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gIVNNUAogCWhlbHAKIAkgIElmIGVuYWJsZWQsIHRoZSBzdHJuY3B5IGZ1bmN0aW9uIGlzIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkgKGxlc3MgbGF0ZW5jeSkuCkBAIC03OTYsNiArODEwLDcgQEAKIGNvbmZpZyBTWVNfQkZJTl9TUElOTE9DS19MMQogCWJvb2wgIkxvY2F0ZSBzeXNfYmZpbl9zcGlubG9jayBmdW5jdGlvbiBpbiBMMSBNZW1vcnkiCiAJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiAhU01QCiAJaGVscAogCSAgSWYgZW5hYmxlZCwgc3lzX2JmaW5fc3BpbmxvY2sgZnVuY3Rpb24gaXMgbGlua2VkCiAJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKQEAgLTgwMyw2ICs4MTgsNyBAQAogY29uZmlnIElQX0NIRUNLU1VNX0wxCiAJYm9vbCAiTG9jYXRlIElQIENoZWNrc3VtIGZ1bmN0aW9uIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uICFTTVAKIAloZWxwCiAJICBJZiBlbmFibGVkLCB0aGUgSVAgQ2hlY2tzdW0gZnVuY3Rpb24gaXMgbGlua2VkCiAJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKQEAgLTgxMSw3ICs4MjcsNyBAQAogCWJvb2wgIkxvY2F0ZSBjYWNoZWxpbmVfYWxpZ25lZCBkYXRhIHRvIEwxIERhdGEgTWVtb3J5IgogCWRlZmF1bHQgeSBpZiAhQkY1NHgKIAlkZWZhdWx0IG4gaWYgQkY1NHgKLQlkZXBlbmRzIG9uICFCRjUzMQorCWRlcGVuZHMgb24gIVNNUCAmJiAhQkY1MzEKIAloZWxwCiAJICBJZiBlbmFibGVkLCBjYWNoZWxpbmVfYWxpZ25lZCBkYXRhIGlzIGxpbmtlZAogCSAgaW50byBMMSBkYXRhIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKQEAgLTgxOSw3ICs4MzUsNyBAQAogY29uZmlnIFNZU0NBTExfVEFCX0wxCiAJYm9vbCAiTG9jYXRlIFN5c2NhbGwgVGFibGUgTDEgRGF0YSBNZW1vcnkiCiAJZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiAhQkY1MzEKKwlkZXBlbmRzIG9uICFTTVAgJiYgIUJGNTMxCiAJaGVscAogCSAgSWYgZW5hYmxlZCwgdGhlIFN5c2NhbGwgTFVUIGlzIGxpbmtlZAogCSAgaW50byBMMSBkYXRhIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKQEAgLTgyNywxNiArODQzLDE2IEBACiBjb25maWcgQ1BMQl9TV0lUQ0hfVEFCX0wxCiAJYm9vbCAiTG9jYXRlIENQTEIgU3dpdGNoIFRhYmxlcyBMMSBEYXRhIE1lbW9yeSIKIAlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uICFCRjUzMQorCWRlcGVuZHMgb24gIVNNUCAmJiAhQkY1MzEKIAloZWxwCiAJICBJZiBlbmFibGVkLCB0aGUgQ1BMQiBTd2l0Y2ggVGFibGVzIGFyZSBsaW5rZWQKIAkgIGludG8gTDEgZGF0YSBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCiAKLWNvbmZpZyBDQUNIRV9GTFVTSF9MMQotCWJvb2wgIkxvY2F0ZSBjYWNoZSBmbHVzaCBmdW5jcyBpbiBMMSBJbnN0IE1lbW9yeSIKK2NvbmZpZyBJQ0FDSEVfRkxVU0hfTDEKKwlib29sICJMb2NhdGUgaWNhY2hlIGZsdXNoIGZ1bmNzIGluIEwxIEluc3QgTWVtb3J5IgogCWRlZmF1bHQgeQogCWhlbHAKLQkgIElmIGVuYWJsZWQsIHRoZSBCbGFja2ZpbiBjYWNoZSBmbHVzaGluZyBmdW5jdGlvbnMgYXJlIGxpbmtlZAorCSAgSWYgZW5hYmxlZCwgdGhlIEJsYWNrZmluIGljYWNoZSBmbHVzaGluZyBmdW5jdGlvbnMgYXJlIGxpbmtlZAogCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuCiAKIAkgIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IGJlIHJlcXVpcmVkIHRvIGFkZHJlc3MgYW5vbWFsaWVzLCBidXQKQEAgLTg0NCw5ICs4NjAsMTggQEAKIAkgIElmIHlvdSBhcmUgdXNpbmcgYSBwcm9jZXNzb3IgYWZmZWN0ZWQgYnkgYW4gYW5vbWFseSwgdGhlIGJ1aWxkCiAJICBzeXN0ZW0gd2lsbCBkb3VibGUgY2hlY2sgZm9yIHlvdSBhbmQgcHJldmVudCBpdC4KIAorY29uZmlnIERDQUNIRV9GTFVTSF9MMQorCWJvb2wgIkxvY2F0ZSBkY2FjaGUgZmx1c2ggZnVuY3MgaW4gTDEgSW5zdCBNZW1vcnkiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiAhU01QCisJaGVscAorCSAgSWYgZW5hYmxlZCwgdGhlIEJsYWNrZmluIGRjYWNoZSBmbHVzaGluZyBmdW5jdGlvbnMgYXJlIGxpbmtlZAorCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuCisKIGNvbmZpZyBBUFBfU1RBQ0tfTDEKIAlib29sICJTdXBwb3J0IGxvY2F0aW5nIGFwcGxpY2F0aW9uIHN0YWNrIGluIEwxIFNjcmF0Y2ggTWVtb3J5IgogCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gIVNNUAogCWhlbHAKIAkgIElmIGVuYWJsZWQgdGhlIGFwcGxpY2F0aW9uIHN0YWNrIGNhbiBiZSBsb2NhdGVkIGluIEwxCiAJICBzY3JhdGNoIG1lbW9yeSAobGVzcyBsYXRlbmN5KS4KQEAgLTg1Niw3ICs4ODEsNyBAQAogY29uZmlnIEVYQ0VQVElPTl9MMV9TQ1JBVENICiAJYm9vbCAiTG9jYXRlIGV4Y2VwdGlvbiBzdGFjayBpbiBMMSBTY3JhdGNoIE1lbW9yeSIKIAlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uICFBUFBfU1RBQ0tfTDEKKwlkZXBlbmRzIG9uICFTTVAgJiYgIUFQUF9TVEFDS19MMQogCWhlbHAKIAkgIFdoZW5ldmVyIGFuIGV4Y2VwdGlvbiBvY2N1cnMsIHVzZSB0aGUgTDEgU2NyYXRjaCBtZW1vcnkgZm9yCiAJICBzdGFjayBzdG9yYWdlLiAgWW91IGNhbm5vdCBwbGFjZSB0aGUgc3RhY2tzIG9mIEZMQVQgYmluYXJpZXMKQEAgLTg2OCw2ICs4OTMsNyBAQAogY29uZmlnIEJGSU5fSU5TX0xPV09WRVJIRUFECiAJYm9vbCAiaW5zW2J3bF0gbG93IG92ZXJoZWFkLCBoaWdoZXIgaW50ZXJydXB0IGxhdGVuY3kiCiAJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiAhU01QCiAJaGVscAogCSAgUmVhZHMgb24gdGhlIEJsYWNrZmluIGFyZSBzcGVjdWxhdGl2ZS4gSW4gQmxhY2tmaW4gdGVybXMsIHRoaXMgbWVhbnMKIAkgIHRoZXkgY2FuIGJlIGludGVycnVwdGVkIGF0IGFueSB0aW1lIChldmVuIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGlzc3VlZApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MThGLUVaQlJEX2RlZmNvbmZpZwppbmRleCBkYjhkMzhhLi41ZWRjYjU4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MThGLUVaQlJEX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MThGLUVaQlJEX2RlZmNvbmZpZwpAQCAtMTE1LDYgKzExNSw3IEBACiBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0NPTVBSRVNTSU9OX09ORT15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DUExCX0lORk89eQorQ09ORklHX0JGSU5fUFNFVURPREJHX0lOU05TPXkKIENPTkZJR19DUllQVE89eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSQ19DQ0lUVD1tCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwppbmRleCAzZTUwZDc4Li4yZTU0OTU3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcKQEAgLTE1Myw2ICsxNTMsNyBAQAogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9PTkU9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKK0NPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUz15CiBDT05GSUdfQ1JZUFRPPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfQ0NJVFQ9bQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lULVYyX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVC1WMl9kZWZjb25maWcKaW5kZXggMDIzZmYwZC4uOTVjZjJiYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lULVYyX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVQtVjJfZGVmY29uZmlnCkBAIC0xODMsNSArMTgzLDYgQEAKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT05fT05FPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NQTEJfSU5GTz15CitDT05GSUdfQkZJTl9QU0VVRE9EQkdfSU5TTlM9eQogQ09ORklHX0NSWVBUTz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwppbmRleCA0ZTVhMTIxLi44YmU4ZTMzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKQEAgLTE3NSw1ICsxNzUsNiBAQAogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9PTkU9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKK0NPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUz15CiBDT05GSUdfQ1JZUFRPPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCmluZGV4IDlmOGZjODQuLmE3ZWI1NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZwpAQCAtMTA4LDUgKzEwOCw2IEBACiBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0NPTVBSRVNTSU9OX09ORT15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DUExCX0lORk89eQorQ09ORklHX0JGSU5fUFNFVURPREJHX0lOU05TPXkKIENPTkZJR19DUllQVE89eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKaW5kZXggY2NjNDMyYi4uMGFhZmRlNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCkBAIC0xMjIsNSArMTIyLDYgQEAKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT05fT05FPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NQTEJfSU5GTz15CitDT05GSUdfQkZJTl9QU0VVRE9EQkdfSU5TTlM9eQogQ09ORklHX0NSWVBUTz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZwppbmRleCA1NjY2OTU0Li5jOTA3N2ZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKQEAgLTEzMyw1ICsxMzMsNiBAQAogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9PTkU9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKK0NPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUz15CiBDT05GSUdfQ1JZUFRPPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzOC1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnCmluZGV4IGFjMjIxMjQuLjY4ODM4MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzOC1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZwpAQCAtMTMxLDUgKzEzMSw2IEBACiBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0NPTVBSRVNTSU9OX09ORT15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DUExCX0lORk89eQorQ09ORklHX0JGSU5fUFNFVURPREJHX0lOU05TPXkKIENPTkZJR19DUllQVE89eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKaW5kZXggOTQ0NDA0Yi4uNTYxNTFiNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCkBAIC0yMDUsNSArMjA1LDYgQEAKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT05fT05FPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NQTEJfSU5GTz15CitDT05GSUdfQkZJTl9QU0VVRE9EQkdfSU5TTlM9eQogQ09ORklHX0NSWVBUTz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVQtU01QX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVC1TTVBfZGVmY29uZmlnCmluZGV4IDdlNjdiYTMuLmY1ZWQzNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVC1TTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVC1TTVBfZGVmY29uZmlnCkBAIC0xMDksNSArMTA5LDYgQEAKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT05fT05FPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NQTEJfSU5GTz15CitDT05GSUdfQkZJTl9QU0VVRE9EQkdfSU5TTlM9eQogQ09ORklHX0NSWVBUTz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwppbmRleCAxNDFlNTkzLi4xYzBhODJhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKQEAgLTExMSw1ICsxMTEsNiBAQAogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9PTkU9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKK0NPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUz15CiBDT05GSUdfQ1JZUFRPPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDI5ZjRmZDguLjQ5NzYyYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMjUsOSArMjUsOCBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9jb25zdF9od2VpZ2h0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KIAogI2lmbmRlZiBDT05GSUdfU01QCiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaAppbmRleCBlM2YwZjRjLi43NjAwZmUwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RlZl9MUEJsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kZWZfTFBCbGFja2Zpbi5oCkBAIC01OCwxNCArNTgsMjYgQEAKICAgICAoeyBCVUcoKTsgMDsgfSk7IFwKIH0pCiAjZGVmaW5lIGJmaW5fd3JpdGUoYWRkciwgdmFsKSBcCi0oeyBcCitkbyB7IFwKIAlzd2l0Y2ggKHNpemVvZigqKGFkZHIpKSkgeyBcCiAJY2FzZSAxOiBiZmluX3dyaXRlOChhZGRyLCB2YWwpOyAgYnJlYWs7IFwKIAljYXNlIDI6IGJmaW5fd3JpdGUxNihhZGRyLCB2YWwpOyBicmVhazsgXAogCWNhc2UgNDogYmZpbl93cml0ZTMyKGFkZHIsIHZhbCk7IGJyZWFrOyBcCiAJZGVmYXVsdDogQlVHKCk7IFwKIAl9IFwKLX0pCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmaW5fd3JpdGVfb3IoYWRkciwgYml0cykgXAorZG8geyBcCisJdm9pZCAqX19hZGRyID0gKHZvaWQgKikoYWRkcik7IFwKKwliZmluX3dyaXRlKF9fYWRkciwgYmZpbl9yZWFkKF9fYWRkcikgfCAoYml0cykpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmaW5fd3JpdGVfYW5kKGFkZHIsIGJpdHMpIFwKK2RvIHsgXAorCXZvaWQgKl9fYWRkciA9ICh2b2lkICopKGFkZHIpOyBcCisJYmZpbl93cml0ZShfX2FkZHIsIGJmaW5fcmVhZChfX2FkZHIpICYgKGJpdHMpKTsgXAorfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RwbWMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCmluZGV4IDMwNDcxMjAuLmVkZjJhMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCkBAIC0xMjUsNiArMTI1LDkgQEAKIAogI2RlZmluZSBWUlBBSVIodmxldiwgZnJlcSkgKCgodmxldikgPDwgMTYpIHwgKChmcmVxKSA+PiAxNikpCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKyNkZWZpbmUgQ1BVRlJFUV9DUFUgMAorI2VuZGlmCiBzdHJ1Y3QgYmZpbl9kcG1jX3BsYXRmb3JtX2RhdGEgewogCWNvbnN0IHVuc2lnbmVkIGludCAqdHVwbGVfdGFiOwogCXVuc2lnbmVkIHNob3J0IHRhYnNpemU7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lwaXBlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lwaXBlLmgKaW5kZXggNDBmOTRhNy4uOWUwY2MwZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXBpcGUuaApAQCAtMzQsMTEgKzM0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vYml0c3BlcmxvbmcuaD4KIAotI2RlZmluZSBJUElQRV9BUkNIX1NUUklORyAgICAgIjEuMTItMDAiCisjZGVmaW5lIElQSVBFX0FSQ0hfU1RSSU5HICAgICAiMS4xNi0wMSIKICNkZWZpbmUgSVBJUEVfTUFKT1JfTlVNQkVSICAgIDEKLSNkZWZpbmUgSVBJUEVfTUlOT1JfTlVNQkVSICAgIDEyCi0jZGVmaW5lIElQSVBFX1BBVENIX05VTUJFUiAgICAwCisjZGVmaW5lIElQSVBFX01JTk9SX05VTUJFUiAgICAxNgorI2RlZmluZSBJUElQRV9QQVRDSF9OVU1CRVIgICAgMQogCiAjaWZkZWYgQ09ORklHX1NNUAogI2Vycm9yICJJLXBpcGUvYmxhY2tmaW46IFNNUCBub3QgaW1wbGVtZW50ZWQiCkBAIC01NSwyNSArNTYsMTkgQEAKICNkZWZpbmUgdGFza19oaWphY2tlZChwKQkJCQkJCVwKIAkoewkJCQkJCQkJXAogCQlpbnQgX194X18gPSBfX2lwaXBlX3Jvb3RfZG9tYWluX3A7CQkJXAotCQlfX2NsZWFyX2JpdChJUElQRV9TWU5DX0ZMQUcsICZpcGlwZV9yb290X2NwdWRvbV92YXIoc3RhdHVzKSk7IFwKIAkJaWYgKF9feF9fKQkJCQkJCVwKLQkJCWhhcmRfbG9jYWxfaXJxX2VuYWJsZSgpOwkJCQlcCisJCQloYXJkX2xvY2FsX2lycV9lbmFibGUoKTsJCQlcCiAJCSFfX3hfXzsJCQkJCQkJXAogCX0pCiAKIHN0cnVjdCBpcGlwZV9kb21haW47CiAKIHN0cnVjdCBpcGlwZV9zeXNpbmZvIHsKLQotCWludCBuY3B1czsJCS8qIE51bWJlciBvZiBDUFVzIG9uIGJvYXJkICovCi0JdTY0IGNwdWZyZXE7CQkvKiBDUFUgZnJlcXVlbmN5IChpbiBIeikgKi8KLQotCS8qIEFyY2gtZGVwZW5kZW50IGJsb2NrICovCi0KLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCB0bWlycTsJLyogVGltZXIgdGljayBJUlEgKi8KLQkJdTY0IHRtZnJlcTsJLyogVGltZXIgZnJlcXVlbmN5ICovCi0JfSBhcmNoZGVwOworCWludCBzeXNfbnJfY3B1czsJLyogTnVtYmVyIG9mIENQVXMgb24gYm9hcmQgKi8KKwlpbnQgc3lzX2hydGltZXJfaXJxOwkvKiBocnRpbWVyIGRldmljZSBJUlEgKi8KKwl1NjQgc3lzX2hydGltZXJfZnJlcTsJLyogaHJ0aW1lciBkZXZpY2UgZnJlcXVlbmN5ICovCisJdTY0IHN5c19ocmNsb2NrX2ZyZXE7CS8qIGhyY2xvY2sgZGV2aWNlIGZyZXF1ZW5jeSAqLworCXU2NCBzeXNfY3B1X2ZyZXE7CS8qIENQVSBmcmVxdWVuY3kgKEh6KSAqLwogfTsKIAogI2RlZmluZSBpcGlwZV9yZWFkX3RzYyh0KQkJCQkJXApAQCAtMTE1LDkgKzExMCwxOSBAQAogdm9pZCBfX2lwaXBlX2Rpc2FibGVfaXJxZGVzYyhzdHJ1Y3QgaXBpcGVfZG9tYWluICppcGQsCiAJCQkgICAgIHVuc2lnbmVkIGlycSk7CiAKLSNkZWZpbmUgX19pcGlwZV9lbmFibGVfaXJxKGlycSkJCShpcnFfZGVzY1tpcnFdLmNoaXAtPnVubWFzayhpcnEpKQorI2RlZmluZSBfX2lwaXBlX2VuYWJsZV9pcnEoaXJxKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CQlcCisJCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwlcCisJCWNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsJCQlcCisJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX2lwaXBlX2Rpc2FibGVfaXJxKGlycSkJKGlycV9kZXNjW2lycV0uY2hpcC0+bWFzayhpcnEpKQorI2RlZmluZSBfX2lwaXBlX2Rpc2FibGVfaXJxKGlycSkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CQlcCisJCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwlcCisJCWNoaXAtPmlycV9tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CQkJXAorCX0gd2hpbGUgKDApCiAKIHN0YXRpYyBpbmxpbmUgaW50IF9faXBpcGVfY2hlY2tfdGlja2Rldihjb25zdCBjaGFyICpkZXZuYW1lKQogewpAQCAtMTI4LDEyICsxMzMsMTEgQEAKIAogI2RlZmluZSBfX2lwaXBlX2hvb2tfY3JpdGljYWxfaXBpKGlwZCkgZG8geyB9IHdoaWxlICgwKQogCi0jZGVmaW5lIF9faXBpcGVfc3luY19waXBlbGluZSAgX19faXBpcGVfc3luY19waXBlbGluZQotdm9pZCBfX19pcGlwZV9zeW5jX3BpcGVsaW5lKHVuc2lnbmVkIGxvbmcgc3luY21hc2spOwordm9pZCBfX19pcGlwZV9zeW5jX3BpcGVsaW5lKHZvaWQpOwogCiB2b2lkIF9faXBpcGVfaGFuZGxlX2lycSh1bnNpZ25lZCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotaW50IF9faXBpcGVfZ2V0X2lycV9wcmlvcml0eSh1bnNpZ25lZCBpcnEpOworaW50IF9faXBpcGVfZ2V0X2lycV9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxKTsKIAogdm9pZCBfX2lwaXBlX3NlcmlhbF9kZWJ1Zyhjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKQEAgLTE1Miw3ICsxNTYsMTAgQEAKIAlyZXR1cm4gZmZzKHVsKSAtIDE7CiB9CiAKLSNkZWZpbmUgX19pcGlwZV9ydW5faXJxdGFpbCgpICAvKiBNdXN0IGJlIGEgbWFjcm8gKi8JCQlcCisjZGVmaW5lIF9faXBpcGVfZG9fcm9vdF94aXJxKGlwZCwgaXJxKQkJCQkJXAorCSgoaXBkKS0+aXJxc1tpcnFdLmhhbmRsZXIoaXJxLCAmX19yYXdfZ2V0X2NwdV92YXIoX19pcGlwZV90aWNrX3JlZ3MpKSkKKworI2RlZmluZSBfX2lwaXBlX3J1bl9pcnF0YWlsKGlycSkgIC8qIE11c3QgYmUgYSBtYWNybyAqLwkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCXVuc2lnbmVkIGxvbmcgX19wZW5kaW5nOwkJCQlcCiAJCUNTWU5DKCk7CQkJCQkJXApAQCAtMTY0LDQyICsxNzEsOCBAQAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIF9faXBpcGVfcnVuX2lzcihpcGQsIGlycSkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICghX19pcGlwZV9waXBlbGluZV9oZWFkX3AoaXBkKSkJCQlcCi0JCQloYXJkX2xvY2FsX2lycV9lbmFibGUoKTsJCQkJXAotCQlpZiAoaXBkID09IGlwaXBlX3Jvb3RfZG9tYWluKSB7CQkJCVwKLQkJCWlmICh1bmxpa2VseShpcGlwZV92aXJ0dWFsX2lycV9wKGlycSkpKSB7CVwKLQkJCQlpcnFfZW50ZXIoKTsJCQkJXAotCQkJCWlwZC0+aXJxc1tpcnFdLmhhbmRsZXIoaXJxLCBpcGQtPmlycXNbaXJxXS5jb29raWUpOyBcCi0JCQkJaXJxX2V4aXQoKTsJCQkJXAotCQkJfSBlbHNlIAkJCQkJCVwKLQkJCQlpcGQtPmlycXNbaXJxXS5oYW5kbGVyKGlycSwgJl9fcmF3X2dldF9jcHVfdmFyKF9faXBpcGVfdGlja19yZWdzKSk7IFwKLQkJfSBlbHNlIHsJCQkJCQlcCi0JCQlfX2NsZWFyX2JpdChJUElQRV9TWU5DX0ZMQUcsICZpcGlwZV9jcHVkb21fdmFyKGlwZCwgc3RhdHVzKSk7IFwKLQkJCWlwZC0+aXJxc1tpcnFdLmhhbmRsZXIoaXJxLCBpcGQtPmlycXNbaXJxXS5jb29raWUpOyBcCi0JCQkvKiBBdHRlbXB0IHRvIGV4aXQgdGhlIG91dGVyIGludGVycnVwdCBsZXZlbCBiZWZvcmUgXAotCQkJICogc3RhcnRpbmcgdGhlIGRlZmVycmVkIElSUSBwcm9jZXNzaW5nLiAqLwlcCi0JCQlfX2lwaXBlX3J1bl9pcnF0YWlsKCk7CQkJCVwKLQkJCV9fc2V0X2JpdChJUElQRV9TWU5DX0ZMQUcsICZpcGlwZV9jcHVkb21fdmFyKGlwZCwgc3RhdHVzKSk7IFwKLQkJfQkJCQkJCQlcCi0JCWhhcmRfbG9jYWxfaXJxX2Rpc2FibGUoKTsJCQkJCVwKLQl9IHdoaWxlICgwKQotCiAjZGVmaW5lIF9faXBpcGVfc3lzY2FsbF93YXRjaGVkX3AocCwgc2MpCVwKLQkoKChwKS0+ZmxhZ3MgJiBQRl9FVk5PVElGWSkgfHwgKHVuc2lnbmVkIGxvbmcpc2MgPj0gTlJfc3lzY2FsbHMpCi0KLXZvaWQgaXBpcGVfaW5pdF9pcnFfdGhyZWFkcyh2b2lkKTsKLQotaW50IGlwaXBlX3N0YXJ0X2lycV90aHJlYWQodW5zaWduZWQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwotCi0jaWZkZWYgQ09ORklHX1RJQ0tTT1VSQ0VfQ09SRVRNUgotI2RlZmluZSBJUlFfU1lTVE1SCQlJUlFfQ09SRVRNUgotI2RlZmluZSBJUlFfUFJJT1RNUgkJSVJRX0NPUkVUTVIKLSNlbHNlCi0jZGVmaW5lIElSUV9TWVNUTVIJCUlSUV9USU1FUjAKLSNkZWZpbmUgSVJRX1BSSU9UTVIJCUNPTkZJR19JUlFfVElNRVIwCi0jZW5kaWYKKwkoaXBpcGVfbm90aWZpZXJfZW5hYmxlZF9wKHApIHx8ICh1bnNpZ25lZCBsb25nKXNjID49IE5SX3N5c2NhbGxzKQogCiAjaWZkZWYgQ09ORklHX0JGNTYxCiAjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRElTQUJMRSh2YWwpCWJmaW5fd3JpdGVfVE1SUzhfRElTQUJMRSh2YWwpCkBAIC0yMTksMTEgKzE5MiwxMSBAQAogCiAjZGVmaW5lIHRhc2tfaGlqYWNrZWQocCkJCTAKICNkZWZpbmUgaXBpcGVfdHJhcF9ub3RpZnkodCwgcikgIAkwCisjZGVmaW5lIF9faXBpcGVfcm9vdF90aWNrX3AocmVncykJMQogCi0jZGVmaW5lIGlwaXBlX2luaXRfaXJxX3RocmVhZHMoKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBpcGlwZV9zdGFydF9pcnFfdGhyZWFkKGlycSwgZGVzYykJMAorI2VuZGlmIC8qICFDT05GSUdfSVBJUEUgKi8KIAotI2lmbmRlZiBDT05GSUdfVElDS1NPVVJDRV9HUFRNUjAKKyNpZmRlZiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SCiAjZGVmaW5lIElSUV9TWVNUTVIJCUlSUV9DT1JFVE1SCiAjZGVmaW5lIElSUV9QUklPVE1SCQlJUlFfQ09SRVRNUgogI2Vsc2UKQEAgLTIzMSwxMCArMjA0LDYgQEAKICNkZWZpbmUgSVJRX1BSSU9UTVIJCUNPTkZJR19JUlFfVElNRVIwCiAjZW5kaWYKIAotI2RlZmluZSBfX2lwaXBlX3Jvb3RfdGlja19wKHJlZ3MpCTEKLQotI2VuZGlmIC8qICFDT05GSUdfSVBJUEUgKi8KLQogI2RlZmluZSBpcGlwZV91cGRhdGVfdGlja19ldnRkZXYoZXZ0ZGV2KQlkbyB7IH0gd2hpbGUgKDApCiAKICNlbmRpZgkvKiAhX19BU01fQkxBQ0tGSU5fSVBJUEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZV9iYXNlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lwaXBlX2Jhc2UuaAppbmRleCAwMDQwOTIwLi44NGE0ZmZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lwaXBlX2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lwaXBlX2Jhc2UuaApAQCAtMjQsOCArMjQsMTAgQEAKIAogI2lmZGVmIENPTkZJR19JUElQRQogCisjaW5jbHVkZSA8YXNtL2JpdHNwZXJsb25nLmg+CisjaW5jbHVkZSA8bWFjaC9pcnEuaD4KKwogI2RlZmluZSBJUElQRV9OUl9YSVJRUwkJTlJfSVJRUwotI2RlZmluZSBJUElQRV9JUlFfSVNISUZUCTUJLyogMl41IGZvciAzMmJpdHMgYXJjaC4gKi8KIAogLyogQmxhY2tmaW4tc3BlY2lmaWMsIHBlci1jcHUgcGlwZWxpbmUgc3RhdHVzICovCiAjZGVmaW5lIElQSVBFX1NZTkNERUZFUl9GTEFHCTE1CkBAIC00MiwxMSArNDQsMTQgQEAKICNkZWZpbmUgSVBJUEVfRVZFTlRfSU5JVAkoSVBJUEVfRklSU1RfRVZFTlQgKyA0KQogI2RlZmluZSBJUElQRV9FVkVOVF9FWElUCShJUElQRV9GSVJTVF9FVkVOVCArIDUpCiAjZGVmaW5lIElQSVBFX0VWRU5UX0NMRUFOVVAJKElQSVBFX0ZJUlNUX0VWRU5UICsgNikKLSNkZWZpbmUgSVBJUEVfTEFTVF9FVkVOVAlJUElQRV9FVkVOVF9DTEVBTlVQCisjZGVmaW5lIElQSVBFX0VWRU5UX1JFVFVSTgkoSVBJUEVfRklSU1RfRVZFTlQgKyA3KQorI2RlZmluZSBJUElQRV9MQVNUX0VWRU5UCUlQSVBFX0VWRU5UX1JFVFVSTgogI2RlZmluZSBJUElQRV9OUl9FVkVOVFMJCShJUElQRV9MQVNUX0VWRU5UICsgMSkKIAogI2RlZmluZSBJUElQRV9USU1FUl9JUlEJCUlSUV9DT1JFVE1SCiAKKyNkZWZpbmUgX19JUElQRV9GRUFUVVJFX1NZU0lORk9fVjIJMQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2lwaXBlX3Jvb3Rfc3RhdHVzOyAvKiBBbGlhcyB0byBpcGlwZV9yb290X2NwdWRvbV92YXIoc3RhdHVzKSAqLwpAQCAtNjMsNiArNjgsOCBAQAogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCisjZGVmaW5lIF9fSVBJUEVfRkVBVFVSRV9TWVNJTkZPX1YyCTEKKwogI2VuZGlmIC8qIENPTkZJR19JUElQRSAqLwogCiAjZW5kaWYgLyogIV9fQVNNX0JMQUNLRklOX0lQSVBFX0JBU0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCmluZGV4IDMzNjVjYjkuLmI0YmJiNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTg5LDE1ICs4OSwzMyBAQAogI2lmZGVmIENPTkZJR19JUElQRQogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pcGlwZV9iYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvaXBpcGVfdHJhY2UuaD4KKy8qCisgKiBXYXkgdG9vIG1hbnkgaW50ZXItZGVwcyBiZXR3ZWVuIGxvdy1sZXZlbCBoZWFkZXJzIGluIHRoaXMgcG9ydCwgc28KKyAqIHdlIHJlZGVjbGFyZSB0aGUgcmVxdWlyZWQgYml0cyB3ZSBjYW5ub3QgcGljayBmcm9tCisgKiA8YXNtL2lwaXBlX2Jhc2UuaD4gdG8gcHJldmVudCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCisgKi8KK3ZvaWQgX19pcGlwZV9zdGFsbF9yb290KHZvaWQpOwordm9pZCBfX2lwaXBlX3Vuc3RhbGxfcm9vdCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgX19pcGlwZV90ZXN0X3Jvb3Qodm9pZCk7Cit1bnNpZ25lZCBsb25nIF9faXBpcGVfdGVzdF9hbmRfc3RhbGxfcm9vdCh2b2lkKTsKK3ZvaWQgX19pcGlwZV9yZXN0b3JlX3Jvb3QodW5zaWduZWQgbG9uZyBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfSVBJUEVfREVCVUdfQ09OVEVYVAorc3RydWN0IGlwaXBlX2RvbWFpbjsKK2V4dGVybiBzdHJ1Y3QgaXBpcGVfZG9tYWluIGlwaXBlX3Jvb3Q7Cit2b2lkIGlwaXBlX2NoZWNrX2NvbnRleHQoc3RydWN0IGlwaXBlX2RvbWFpbiAqaXBkKTsKKyNkZWZpbmUgX19jaGVja19pcnFvcF9jb250ZXh0KGlwZCkgIGlwaXBlX2NoZWNrX2NvbnRleHQoJmlwaXBlX3Jvb3QpCisjZWxzZSAvKiAhQ09ORklHX0lQSVBFX0RFQlVHX0NPTlRFWFQgKi8KKyNkZWZpbmUgX19jaGVja19pcnFvcF9jb250ZXh0KGlwZCkgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiAhQ09ORklHX0lQSVBFX0RFQlVHX0NPTlRFWFQgKi8KIAogLyoKICAqIEludGVycnVwdCBwaXBlIGludGVyZmFjZSB0byBsaW51eC9pcnFmbGFncy5oLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQogewotCWlwaXBlX2NoZWNrX2NvbnRleHQoaXBpcGVfcm9vdF9kb21haW4pOworCV9fY2hlY2tfaXJxb3BfY29udGV4dCgpOwogCV9faXBpcGVfc3RhbGxfcm9vdCgpOwogCWJhcnJpZXIoKTsKIH0KQEAgLTEwNSw3ICsxMjMsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewogCWJhcnJpZXIoKTsKLQlpcGlwZV9jaGVja19jb250ZXh0KGlwaXBlX3Jvb3RfZG9tYWluKTsKKwlfX2NoZWNrX2lycW9wX2NvbnRleHQoKTsKIAlfX2lwaXBlX3Vuc3RhbGxfcm9vdCgpOwogfQogCkBAIC0xMTksMTYgKzEzNywyMSBAQAogCXJldHVybiBmbGFncyA9PSBiZmluX25vX2lycXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2xvY2FsX2lycV9zYXZlX3B0cih1bnNpZ25lZCBsb25nICpfZmxhZ3MpCi17Ci0JeCA9IF9faXBpcGVfdGVzdF9hbmRfc3RhbGxfcm9vdCgpID8gYmZpbl9ub19pcnFzIDogYmZpbl9pcnFfZmxhZ3M7Ci0JYmFycmllcigpOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF9sb2NhbF9pcnFfc2F2ZSh2b2lkKQogewotCWlwaXBlX2NoZWNrX2NvbnRleHQoaXBpcGVfcm9vdF9kb21haW4pOwotCXJldHVybiBfX2hhcmRfbG9jYWxfaXJxX3NhdmUoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJX19jaGVja19pcnFvcF9jb250ZXh0KCk7CisJZmxhZ3MgPSBfX2lwaXBlX3Rlc3RfYW5kX3N0YWxsX3Jvb3QoKSA/IGJmaW5fbm9faXJxcyA6IGJmaW5faXJxX2ZsYWdzOworCWJhcnJpZXIoKTsKKworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlfX2NoZWNrX2lycW9wX2NvbnRleHQoKTsKKwlfX2lwaXBlX3Jlc3RvcmVfcm9vdChmbGFncyA9PSBiZmluX25vX2lycXMpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF9tYW5nbGVfaXJxX2JpdHMoaW50IHZpcnQsIHVuc2lnbmVkIGxvbmcgcmVhbCkKQEAgLTE5Miw3ICsyMTUsMTAgQEAKICMgZGVmaW5lIGhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCV9faGFyZF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncykKICNlbmRpZiAvKiAhQ09ORklHX0lQSVBFX1RSQUNFX0lSUVNPRkYgKi8KIAotI2Vsc2UgLyogQ09ORklHX0lQSVBFICovCisjZGVmaW5lIGhhcmRfbG9jYWxfaXJxX3NhdmVfY29uZCgpCQloYXJkX2xvY2FsX2lycV9zYXZlKCkKKyNkZWZpbmUgaGFyZF9sb2NhbF9pcnFfcmVzdG9yZV9jb25kKGZsYWdzKQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQorCisjZWxzZSAvKiAhQ09ORklHX0lQSVBFICovCiAKIC8qCiAgKiBEaXJlY3QgaW50ZXJmYWNlIHRvIGxpbnV4L2lycWZsYWdzLmguCkBAIC0yMTIsNyArMjM4LDQ4IEBACiAjZGVmaW5lIGhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCV9faGFyZF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncykKICNkZWZpbmUgaGFyZF9sb2NhbF9pcnFfZW5hYmxlKCkJCV9faGFyZF9sb2NhbF9pcnFfZW5hYmxlKCkKICNkZWZpbmUgaGFyZF9sb2NhbF9pcnFfZGlzYWJsZSgpCV9faGFyZF9sb2NhbF9pcnFfZGlzYWJsZSgpCi0KKyNkZWZpbmUgaGFyZF9sb2NhbF9pcnFfc2F2ZV9jb25kKCkJCWhhcmRfbG9jYWxfc2F2ZV9mbGFncygpCisjZGVmaW5lIGhhcmRfbG9jYWxfaXJxX3Jlc3RvcmVfY29uZChmbGFncykJZG8geyAodm9pZCkoZmxhZ3MpOyB9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogIUNPTkZJR19JUElQRSAqLworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBoYXJkX2xvY2FsX2lycV9zYXZlX3NtcCgpCQloYXJkX2xvY2FsX2lycV9zYXZlKCkKKyNkZWZpbmUgaGFyZF9sb2NhbF9pcnFfcmVzdG9yZV9zbXAoZmxhZ3MpCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCisjZWxzZQorI2RlZmluZSBoYXJkX2xvY2FsX2lycV9zYXZlX3NtcCgpCQloYXJkX2xvY2FsX3NhdmVfZmxhZ3MoKQorI2RlZmluZSBoYXJkX2xvY2FsX2lycV9yZXN0b3JlX3NtcChmbGFncykJZG8geyAodm9pZCkoZmxhZ3MpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBSZW1hcCB0aGUgYXJjaC1uZXV0cmFsIElSUSBzdGF0ZSBtYW5pcHVsYXRpb24gbWFjcm9zIHRvIHRoZQorICogYmxhY2tmaW4tc3BlY2lmaWMgaGFyZF9sb2NhbF9pcnFfKiBBUEkuCisgKi8KKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpCQkJXAorCWRvIHsJCQkJCQlcCisJCShmbGFncykgPSBoYXJkX2xvY2FsX2lycV9zYXZlKCk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncykJCVwKKwlkbyB7CQkJCQlcCisJCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGVfaHcoKQkJCVwKKwlkbyB7CQkJCQlcCisJCWhhcmRfbG9jYWxfaXJxX2Rpc2FibGUoKTsJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGVfaHcoKQkJCVwKKwlkbyB7CQkJCQlcCisJCWhhcmRfbG9jYWxfaXJxX2VuYWJsZSgpOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmVfaHdfbm90cmFjZShmbGFncykJCVwKKwlkbyB7CQkJCQkJXAorCQkoZmxhZ3MpID0gX19oYXJkX2xvY2FsX2lycV9zYXZlKCk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZV9od19ub3RyYWNlKGZsYWdzKQkJXAorCWRvIHsJCQkJCQlcCisJCV9faGFyZF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGlycXNfZGlzYWJsZWRfaHcoKQloYXJkX2lycXNfZGlzYWJsZWQoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IGY1YjUzNzkuLmFmNmMwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMTcsNyArMTcsMTIgQEAKIAogI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpICBibGFja2Zpbl9jb3JlX2lkKCkKIAotZXh0ZXJuIGNoYXIgY29yZWJfdHJhbXBvbGluZV9zdGFydCwgY29yZWJfdHJhbXBvbGluZV9lbmQ7CitleHRlcm4gdm9pZCBiZmluX3JlbG9jYXRlX2NvcmViX2wxX21lbSh2b2lkKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfSUNBQ0hFX0ZMVVNIX0wxKQorYXNtbGlua2FnZSB2b2lkIGJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZV9sMSh1bnNpZ25lZCBsb25nICpwdHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYmxhY2tmaW5faWZsdXNoX2wxX2VudHJ5W05SX0NQVVNdOworI2VuZGlmCiAKIHN0cnVjdCBjb3JlbG9ja19zbG90IHsKIAlpbnQgbG9jazsKQEAgLTM0LDcgKzM5LDcgQEAKIHZvaWQgc21wX2ljYWNoZV9mbHVzaF9yYW5nZV9vdGhlcnModW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCQkgICB1bnNpZ25lZCBsb25nIGVuZCk7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi12b2lkIGNvcmViX3NsZWVwKHUzMiBzaWNfaXdyMCwgdTMyIHNpY19pd3IxLCB1MzIgc2ljX2l3cjIpOwordm9pZCBjb3JlYl9kaWUodm9pZCk7CiB2b2lkIGNwdV9kaWUodm9pZCk7CiB2b2lkIHBsYXRmb3JtX2NwdV9kaWUodm9pZCk7CiBpbnQgX19jcHVfZGlzYWJsZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDkyOGFlOTcuLmM5NzQ5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzkzLDggKzM5MywxMSBAQAogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsJMzcyCiAjZGVmaW5lIF9fTlJfcHJsaW1pdDY0CQkzNzMKICNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkzNzQKKyNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdAkzNzUKKyNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdAkzNzYKKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCTM3NwogCi0jZGVmaW5lIF9fTlJfc3lzY2FsbAkJMzc1CisjZGVmaW5lIF9fTlJfc3lzY2FsbAkJMzc4CiAjZGVmaW5lIE5SX3N5c2NhbGxzCQlfX05SX3N5c2NhbGwKIAogLyogT2xkIG9wdGlvbmFsIHN0dWZmIG5vIG9uZSBhY3R1YWxseSB1c2VzICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCmluZGV4IDFlNDg1ZGYuLjZjZThkY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCkBAIC04NCw2ICs4NCwyNCBAQAogbGF0ZV9pbml0Y2FsbChwcm9jX2RtYV9pbml0KTsKICNlbmRpZgogCitzdGF0aWMgdm9pZCBzZXRfZG1hX3BlcmlwaGVyYWxfbWFwKHVuc2lnbmVkIGludCBjaGFubmVsLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpCit7CisjaWZkZWYgQ09ORklHX0JGNTR4CisJdW5zaWduZWQgaW50IHBlcl9tYXA7CisKKwlzd2l0Y2ggKGNoYW5uZWwpIHsKKwkJY2FzZSBDSF9VQVJUMl9SWDogcGVyX21hcCA9IDB4QyA8PCAxMjsgYnJlYWs7CisJCWNhc2UgQ0hfVUFSVDJfVFg6IHBlcl9tYXAgPSAweEQgPDwgMTI7IGJyZWFrOworCQljYXNlIENIX1VBUlQzX1JYOiBwZXJfbWFwID0gMHhFIDw8IDEyOyBicmVhazsKKwkJY2FzZSBDSF9VQVJUM19UWDogcGVyX21hcCA9IDB4RiA8PCAxMjsgYnJlYWs7CisJCWRlZmF1bHQ6ICAgICAgICAgIHJldHVybjsKKwl9CisKKwlpZiAoc3RybmNtcChkZXZpY2VfaWQsICJCRklOX1VBUlQiLCA5KSA9PSAwKQorCQlkbWFfY2hbY2hhbm5lbF0ucmVncy0+cGVyaXBoZXJhbF9tYXAgPSBwZXJfbWFwOworI2VuZGlmCit9CisKIC8qKgogICoJcmVxdWVzdF9kbWEgLSByZXF1ZXN0IGEgRE1BIGNoYW5uZWwKICAqCkBAIC0xMTEsMTkgKzEyOSw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0jaWZkZWYgQ09ORklHX0JGNTR4Ci0JaWYgKGNoYW5uZWwgPj0gQ0hfVUFSVDJfUlggJiYgY2hhbm5lbCA8PSBDSF9VQVJUM19UWCkgewotCQl1bnNpZ25lZCBpbnQgcGVyX21hcDsKLQkJcGVyX21hcCA9IGRtYV9jaFtjaGFubmVsXS5yZWdzLT5wZXJpcGhlcmFsX21hcCAmIDB4RkZGOwotCQlpZiAoc3RybmNtcChkZXZpY2VfaWQsICJCRklOX1VBUlQiLCA5KSA9PSAwKQotCQkJZG1hX2NoW2NoYW5uZWxdLnJlZ3MtPnBlcmlwaGVyYWxfbWFwID0gcGVyX21hcCB8Ci0JCQkJKChjaGFubmVsIC0gQ0hfVUFSVDJfUlggKyAweEMpPDwxMik7Ci0JCWVsc2UKLQkJCWRtYV9jaFtjaGFubmVsXS5yZWdzLT5wZXJpcGhlcmFsX21hcCA9IHBlcl9tYXAgfAotCQkJCSgoY2hhbm5lbCAtIENIX1VBUlQyX1JYICsgMHg2KTw8MTIpOwotCX0KLSNlbmRpZgotCisJc2V0X2RtYV9wZXJpcGhlcmFsX21hcChjaGFubmVsLCBkZXZpY2VfaWQpOwogCWRtYV9jaFtjaGFubmVsXS5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJZG1hX2NoW2NoYW5uZWxdLmlycSA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lwaXBlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcGlwZS5jCmluZGV4IDNiMWRhNGEuLmYzNzAxOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lwaXBlLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXBpcGUuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJICogcGVuZGluZyBmb3IgaXQuCiAJICovCiAJaWYgKHRlc3RfYml0KElQSVBFX0FIRUFEX0ZMQUcsICZ0aGlzX2RvbWFpbi0+ZmxhZ3MpICYmCi0JICAgIGlwaXBlX2hlYWRfY3B1ZG9tX3ZhcihpcnFwZW5kX2hpbWFzaykgPT0gMCkKKwkgICAgIV9faXBpcGVfaXBlbmRpbmdfcChpcGlwZV9oZWFkX2NwdWRvbV9wdHIoKSkpCiAJCWdvdG8gb3V0OwogCiAJX19pcGlwZV93YWxrX3BpcGVsaW5lKGhlYWQpOwpAQCAtMTg1LDI1ICsxODUsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0woX19pcGlwZV9kaXNhYmxlX2lycWRlc2MpOwogCi1pbnQgX19pcGlwZV9zeXNjYWxsX3Jvb3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIGludCBfX2lwaXBlX3N5c2NhbGxfcm9vdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgaXBpcGVfcGVyY3B1X2RvbWFpbl9kYXRhICpwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAoKmhvb2spKHZvaWQpOwogCWludCByZXQ7CiAKLQkvKgotCSAqIFdlIG5lZWQgdG8gcnVuIHRoZSBJUlEgdGFpbCBob29rIHdoZW5ldmVyIHdlIGRvbid0Ci0JICogcHJvcGFnYXRlIGEgc3lzY2FsbCB0byBoaWdoZXIgZG9tYWlucywgYmVjYXVzZSB3ZSBrbm93IHRoYXQKLQkgKiBpbXBvcnRhbnQgb3BlcmF0aW9ucyBtaWdodCBiZSBwZW5kaW5nIHRoZXJlIChlLmcuIFhlbm9tYWkKLQkgKiBkZWZlcnJlZCByZXNjaGVkdWxpbmcpLgotCSAqLworCVdBUk5fT05fT05DRShpcnFzX2Rpc2FibGVkX2h3KCkpOwogCi0JaWYgKHJlZ3MtPm9yaWdfcDAgPCBOUl9zeXNjYWxscykgewotCQl2b2lkICgqaG9vaykodm9pZCkgPSAodm9pZCAoKikodm9pZCkpX19pcGlwZV9pcnFfdGFpbF9ob29rOwotCQlob29rKCk7Ci0JCWlmICgoY3VycmVudC0+ZmxhZ3MgJiBQRl9FVk5PVElGWSkgPT0gMCkKLQkJCXJldHVybiAwOwotCX0KKwkvKgorCSAqIFdlIG5lZWQgdG8gcnVuIHRoZSBJUlEgdGFpbCBob29rIGVhY2ggdGltZSB3ZSBpbnRlcmNlcHQgYQorCSAqIHN5c2NhbGwsIGJlY2F1c2Ugd2Uga25vdyB0aGF0IGltcG9ydGFudCBvcGVyYXRpb25zIG1pZ2h0IGJlCisJICogcGVuZGluZyB0aGVyZSAoZS5nLiBYZW5vbWFpIGRlZmVycmVkIHJlc2NoZWR1bGluZykuCisJICovCisJaG9vayA9IChfX3R5cGVvZl9fKGhvb2spKV9faXBpcGVfaXJxX3RhaWxfaG9vazsKKwlob29rKCk7CiAKIAkvKgogCSAqIFRoaXMgcm91dGluZSBlaXRoZXIgcmV0dXJuczoKQEAgLTIxNCw1MSArMjEwLDQ3IEBACiAJICogdGFpbCB3b3JrIGhhcyB0byBiZSBwZXJmb3JtZWQgKGZvciBoYW5kbGluZyBzaWduYWxzIGV0YykuCiAJICovCiAKLQlpZiAoIV9faXBpcGVfZXZlbnRfbW9uaXRvcmVkX3AoSVBJUEVfRVZFTlRfU1lTQ0FMTCkpCisJaWYgKCFfX2lwaXBlX3N5c2NhbGxfd2F0Y2hlZF9wKGN1cnJlbnQsIHJlZ3MtPm9yaWdfcDApIHx8CisJICAgICFfX2lwaXBlX2V2ZW50X21vbml0b3JlZF9wKElQSVBFX0VWRU5UX1NZU0NBTEwpKQogCQlyZXR1cm4gMDsKIAogCXJldCA9IF9faXBpcGVfZGlzcGF0Y2hfZXZlbnQoSVBJUEVfRVZFTlRfU1lTQ0FMTCwgcmVncyk7CiAKLQlmbGFncyA9IGhhcmRfbG9jYWxfaXJxX3NhdmUoKTsKKwloYXJkX2xvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlpZiAoIV9faXBpcGVfcm9vdF9kb21haW5fcCkgewotCQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuIDE7CisJLyoKKwkgKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIHN5c2NhbGwgcGF0aCwgc28gd2UgbWF5CisJICogc2FmZWx5IGFzc3VtZSBhIHZhbGlkIExpbnV4IHRhc2sgc3RhY2sgaGVyZS4KKwkgKi8KKwlpZiAoY3VycmVudC0+aXBpcGVfZmxhZ3MgJiBQRl9FVlRSRVQpIHsKKwkJY3VycmVudC0+aXBpcGVfZmxhZ3MgJj0gflBGX0VWVFJFVDsKKwkJX19pcGlwZV9kaXNwYXRjaF9ldmVudChJUElQRV9FVkVOVF9SRVRVUk4sIHJlZ3MpOwogCX0KIAotCXAgPSBpcGlwZV9yb290X2NwdWRvbV9wdHIoKTsKLQlpZiAoKHAtPmlycXBlbmRfaGltYXNrICYgSVBJUEVfSVJRTUFTS19WSVJUKSAhPSAwKQotCQlfX2lwaXBlX3N5bmNfcGlwZWxpbmUoSVBJUEVfSVJRTUFTS19WSVJUKTsKKwlpZiAoIV9faXBpcGVfcm9vdF9kb21haW5fcCkKKwkJcmV0ID0gLTE7CisJZWxzZSB7CisJCXAgPSBpcGlwZV9yb290X2NwdWRvbV9wdHIoKTsKKwkJaWYgKF9faXBpcGVfaXBlbmRpbmdfcChwKSkKKwkJCV9faXBpcGVfc3luY19waXBlbGluZSgpOworCX0KIAotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWhhcmRfbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJcmV0dXJuIC1yZXQ7CiB9CiAKLXVuc2lnbmVkIGxvbmcgaXBpcGVfY3JpdGljYWxfZW50ZXIodm9pZCAoKnN5bmNmbikgKHZvaWQpKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlmbGFncyA9IGhhcmRfbG9jYWxfaXJxX3NhdmUoKTsKLQotCXJldHVybiBmbGFnczsKLX0KLQotdm9pZCBpcGlwZV9jcml0aWNhbF9leGl0KHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JaGFyZF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faXBpcGVfbm9faXJxdGFpbCh2b2lkKQogewogfQogCiBpbnQgaXBpcGVfZ2V0X3N5c2luZm8oc3RydWN0IGlwaXBlX3N5c2luZm8gKmluZm8pCiB7Ci0JaW5mby0+bmNwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKLQlpbmZvLT5jcHVmcmVxID0gaXBpcGVfY3B1X2ZyZXEoKTsKLQlpbmZvLT5hcmNoZGVwLnRtaXJxID0gSVBJUEVfVElNRVJfSVJROwotCWluZm8tPmFyY2hkZXAudG1mcmVxID0gaW5mby0+Y3B1ZnJlcTsKKwlpbmZvLT5zeXNfbnJfY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOworCWluZm8tPnN5c19jcHVfZnJlcSA9IGlwaXBlX2NwdV9mcmVxKCk7CisJaW5mby0+c3lzX2hydGltZXJfaXJxID0gSVBJUEVfVElNRVJfSVJROworCWluZm8tPnN5c19ocnRpbWVyX2ZyZXEgPSBfX2lwaXBlX2NvcmVfY2xvY2s7CisJaW5mby0+c3lzX2hyY2xvY2tfZnJlcSA9IF9faXBpcGVfY29yZV9jbG9jazsKIAogCXJldHVybiAwOwogfQpAQCAtMjg5LDYgKzI4MSw3IEBACiBhc21saW5rYWdlIHZvaWQgX19pcGlwZV9zeW5jX3Jvb3Qodm9pZCkKIHsKIAl2b2lkICgqaXJxX3RhaWxfaG9vaykodm9pZCkgPSAodm9pZCAoKikodm9pZCkpX19pcGlwZV9pcnFfdGFpbF9ob29rOworCXN0cnVjdCBpcGlwZV9wZXJjcHVfZG9tYWluX2RhdGEgKnA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihpcnFzX2Rpc2FibGVkKCkpOwpAQCAtMzAwLDE5ICsyOTMsMjAgQEAKIAogCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JUlFfU1lOQyk7CiAKLQlpZiAoaXBpcGVfcm9vdF9jcHVkb21fdmFyKGlycXBlbmRfaGltYXNrKSAhPSAwKQotCQlfX2lwaXBlX3N5bmNfcGlwZWxpbmUoSVBJUEVfSVJRTUFTS19BTlkpOworCXAgPSBpcGlwZV9yb290X2NwdWRvbV9wdHIoKTsKKwlpZiAoX19pcGlwZV9pcGVuZGluZ19wKHApKQorCQlfX2lwaXBlX3N5bmNfcGlwZWxpbmUoKTsKIAogCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi12b2lkIF9fX2lwaXBlX3N5bmNfcGlwZWxpbmUodW5zaWduZWQgbG9uZyBzeW5jbWFzaykKK3ZvaWQgX19faXBpcGVfc3luY19waXBlbGluZSh2b2lkKQogewogCWlmIChfX2lwaXBlX3Jvb3RfZG9tYWluX3AgJiYKIAkgICAgdGVzdF9iaXQoSVBJUEVfU1lOQ0RFRkVSX0ZMQUcsICZpcGlwZV9yb290X2NwdWRvbV92YXIoc3RhdHVzKSkpCiAJCXJldHVybjsKIAotCV9faXBpcGVfc3luY19zdGFnZShzeW5jbWFzayk7CisJX19pcGlwZV9zeW5jX3N0YWdlKCk7CiB9CiAKIHZvaWQgX19pcGlwZV9kaXNhYmxlX3Jvb3RfaXJxc19odyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCmluZGV4IDY0Y2ZmNTQuLjhmMDc5MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKQEAgLTM5LDIxICszOSwyMyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7Ci0JCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHNraXA7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwotCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlOHMiLCBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKS0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCiAJCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKICBza2lwOgotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7CiAJCXNlcV9wcmludGYocCwgIk5NSTogIik7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYwppbmRleCBlYjkyNTkyLi5iOGNmZTM0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCkBAIC00MjIsMTEgKzQyMiw3IEBACiAKIHN0cnVjdCBrZ2RiX2FyY2ggYXJjaF9rZ2RiX29wcyA9IHsKIAkuZ2RiX2JwdF9pbnN0ciA9IHsweGExfSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLmZsYWdzID0gS0dEQl9IV19CUkVBS1BPSU5UfEtHREJfVEhSX1BST0NfU1dBUCwKLSNlbHNlCiAJLmZsYWdzID0gS0dEQl9IV19CUkVBS1BPSU5ULAotI2VuZGlmCiAJLnNldF9od19icmVha3BvaW50ID0gYmZpbl9zZXRfaHdfYnJlYWssCiAJLnJlbW92ZV9od19icmVha3BvaW50ID0gYmZpbl9yZW1vdmVfaHdfYnJlYWssCiAJLmRpc2FibGVfaHdfYnJlYWsgPSBiZmluX2Rpc2FibGVfaHdfZGVidWcsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwppbmRleCBhYzcxZGMxLi44MDVjNjEzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKQEAgLTIxNSwxMSArMjE1LDQ4IEBACiAKIAllYXJseV9kbWFfbWVtY3B5X2RvbmUoKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfSUNBQ0hFX0ZMVVNIX0wxKQorCWJsYWNrZmluX2lmbHVzaF9sMV9lbnRyeVswXSA9ICh1bnNpZ25lZCBsb25nKWJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZV9sMTsKKyNlbmRpZgorCiAJLyogaWYgbmVjZXNzYXJ5LCBjb3B5IEwyIHRleHQvZGF0YSB0byBMMiBTUkFNICovCiAJaWYgKEwyX0xFTkdUSCAmJiBsMl9sZW4pCiAJCW1lbWNweShfc3RleHRfbDIsIF9sMl9sbWEsIGwyX2xlbik7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIF9faW5pdCBiZmluX3JlbG9jYXRlX2NvcmViX2wxX21lbSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGV4dF9sMV9sZW4gPSAodW5zaWduZWQgbG9uZylfdGV4dF9sMV9sZW47CisJdW5zaWduZWQgbG9uZyBkYXRhX2wxX2xlbiA9ICh1bnNpZ25lZCBsb25nKV9kYXRhX2wxX2xlbjsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYl9sMV9sZW4gPSAodW5zaWduZWQgbG9uZylfZGF0YV9iX2wxX2xlbjsKKworCWJsYWNrZmluX2RtYV9lYXJseV9pbml0KCk7CisKKwkvKiBpZiBuZWNlc3NhcnksIGNvcHkgTDEgdGV4dCB0byBMMSBpbnN0cnVjdGlvbiBTUkFNICovCisJaWYgKEwxX0NPREVfTEVOR1RIICYmIHRleHRfbDFfbGVuKQorCQllYXJseV9kbWFfbWVtY3B5KCh2b2lkICopQ09SRUJfTDFfQ09ERV9TVEFSVCwgX3RleHRfbDFfbG1hLAorCQkJCXRleHRfbDFfbGVuKTsKKworCS8qIGlmIG5lY2Vzc2FyeSwgY29weSBMMSBkYXRhIHRvIEwxIGRhdGEgYmFuayBBIFNSQU0gKi8KKwlpZiAoTDFfREFUQV9BX0xFTkdUSCAmJiBkYXRhX2wxX2xlbikKKwkJZWFybHlfZG1hX21lbWNweSgodm9pZCAqKUNPUkVCX0wxX0RBVEFfQV9TVEFSVCwgX2RhdGFfbDFfbG1hLAorCQkJCWRhdGFfbDFfbGVuKTsKKworCS8qIGlmIG5lY2Vzc2FyeSwgY29weSBMMSBkYXRhIEIgdG8gTDEgZGF0YSBiYW5rIEIgU1JBTSAqLworCWlmIChMMV9EQVRBX0JfTEVOR1RIICYmIGRhdGFfYl9sMV9sZW4pCisJCWVhcmx5X2RtYV9tZW1jcHkoKHZvaWQgKilDT1JFQl9MMV9EQVRBX0JfU1RBUlQsIF9kYXRhX2JfbDFfbG1hLAorCQkJCWRhdGFfYl9sMV9sZW4pOworCisJZWFybHlfZG1hX21lbWNweV9kb25lKCk7CisKKyNpZmRlZiBDT05GSUdfSUNBQ0hFX0ZMVVNIX0wxCisJYmxhY2tmaW5faWZsdXNoX2wxX2VudHJ5WzFdID0gKHVuc2lnbmVkIGxvbmcpYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlX2wxIC0KKwkJCSh1bnNpZ25lZCBsb25nKV9zdGV4dF9sMSArIENPUkVCX0wxX0NPREVfU1RBUlQ7CisjZW5kaWYKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1JPTUtFUk5FTAogdm9pZCBfX2luaXQgYmZpbl9yZWxvY2F0ZV94aXBfZGF0YSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYzQwZDA3Zi4uODU0ZmE0OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMzYsNyArMTM2LDcgQEAKIAogCS4gPSBBTElHTigxNik7CiAJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCi0JUEVSQ1BVKDMyLCA0KQorCVBFUkNQVSgzMiwgUEFHRV9TSVpFKQogCiAJLmV4aXQuZGF0YSA6CiAJewpAQCAtMTc2LDYgKzE3Niw3IEBACiAJewogCQkuID0gQUxJR04oNCk7CiAJCV9fc3RleHRfbDEgPSAuOworCQkqKC5sMS50ZXh0LmhlYWQpCiAJCSooLmwxLnRleHQpCiAjaWZkZWYgQ09ORklHX1NDSEVEVUxFX0wxCiAJCVNDSEVEX1RFWFQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTIuaAppbmRleCAyNzI4NTgyLi5jYjExNzJmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oCkBAIC0xMjAxLDI1ICsxMjAxLDYgQEAKICNkZWZpbmUJUEdURV9QUEkJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFBQSSBEMTU6MTMJCQkqLwogI2RlZmluZQlQR1RFX1NQT1JUCQkweDA4MDAJCQkvKiAJCUVuYWJsZSBEVDFQUkkvVEZTMS9UU0NMSzEJKi8KIAotCi0vKiAgKioqKioqKioqKioqKioqKioqICBIQU5EU0hBS0UgRE1BIChIRE1BKSBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqLwotLyogSERNQXhfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlITURNQUVOCQkweDAwMDEJLyogRW5hYmxlIEhhbmRzaGFrZSBETUEgMC8xCQkJCQkqLwotI2RlZmluZQlSRVAJCQkweDAwMDIJLyogSERNQSBSZXF1ZXN0IFBvbGFyaXR5CQkJCQkqLwotI2RlZmluZQlVVEUJCQkweDAwMDQJLyogVXJnZW5jeSBUaHJlc2hvbGQgRW5hYmxlCQkJCQkqLwotI2RlZmluZQlPSUUJCQkweDAwMTAJLyogT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZQkJCQkqLwotI2RlZmluZQlCRElFCQkweDAwMjAJLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlCQkJCSovCi0jZGVmaW5lCU1CREkJCTB4MDA0MAkvKiBNYXNrIEJsb2NrIERvbmUgSVJRIElmIFBlbmRpbmcgRUNOVAkJKi8KLSNkZWZpbmUJRFJRCQkJMHgwMzAwCS8qIEhETUEgUmVxdWVzdCBUeXBlCQkJCQkJKi8KLSNkZWZpbmUJRFJRX05PTkUJMHgwMDAwCS8qIAkJTm8gUmVxdWVzdAkJCQkJCQkqLwotI2RlZmluZQlEUlFfU0lOR0xFCTB4MDEwMAkvKiAJCUNoYW5uZWxzIFJlcXVlc3QgU2luZ2xlCQkJCSovCi0jZGVmaW5lCURSUV9NVUxUSQkweDAyMDAJLyogCQlDaGFubmVscyBSZXF1ZXN0IE11bHRpIChEZWZhdWx0KQkqLwotI2RlZmluZQlEUlFfVVJHRU5UCTB4MDMwMAkvKiAJCUNoYW5uZWxzIFJlcXVlc3QgTXVsdGkgVXJnZW50CQkqLwotI2RlZmluZQlSQkMJCQkweDEwMDAJLyogUmVsb2FkIEJDTlQgV2l0aCBJQkNOVAkJCQkJKi8KLSNkZWZpbmUJUFMJCQkweDIwMDAJLyogSERNQSBQaW4gU3RhdHVzCQkJCQkJCSovCi0jZGVmaW5lCU9JCQkJMHg0MDAwCS8qIE92ZXJmbG93IEludGVycnVwdCBHZW5lcmF0ZWQJCQkJKi8KLSNkZWZpbmUJQkRJCQkJMHg4MDAwCS8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEdlbmVyYXRlZAkJCSovCi0KIC8qIGVudHJ5IGFkZHJlc3NlcyBvZiB0aGUgdXNlci1jYWxsYWJsZSBCb290IFJPTSBmdW5jdGlvbnMgKi8KIAogI2RlZmluZSBfQk9PVFJPTV9SRVNFVCAweEVGMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmgKaW5kZXggODlmNTQyMC4uODRlZjExZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaApAQCAtMTIwNCwyNSArMTIwNCw2IEBACiAjZGVmaW5lCVBHVEVfUFBJCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBQUEkgRDE1OjEzCQkJKi8KICNkZWZpbmUJUEdURV9TUE9SVAkJMHgwODAwCQkJLyogCQlFbmFibGUgRFQxUFJJL1RGUzEvVFNDTEsxCSovCiAKLQotLyogICoqKioqKioqKioqKioqKioqKiAgSEFORFNIQUtFIERNQSAoSERNQSkgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKi8KLS8qIEhETUF4X0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJSE1ETUFFTgkJMHgwMDAxCS8qIEVuYWJsZSBIYW5kc2hha2UgRE1BIDAvMQkJCQkJKi8KLSNkZWZpbmUJUkVQCQkJMHgwMDAyCS8qIEhETUEgUmVxdWVzdCBQb2xhcml0eQkJCQkJKi8KLSNkZWZpbmUJVVRFCQkJMHgwMDA0CS8qIFVyZ2VuY3kgVGhyZXNob2xkIEVuYWJsZQkJCQkJKi8KLSNkZWZpbmUJT0lFCQkJMHgwMDEwCS8qIE92ZXJmbG93IEludGVycnVwdCBFbmFibGUJCQkJKi8KLSNkZWZpbmUJQkRJRQkJMHgwMDIwCS8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEVuYWJsZQkJCQkqLwotI2RlZmluZQlNQkRJCQkweDAwNDAJLyogTWFzayBCbG9jayBEb25lIElSUSBJZiBQZW5kaW5nIEVDTlQJCSovCi0jZGVmaW5lCURSUQkJCTB4MDMwMAkvKiBIRE1BIFJlcXVlc3QgVHlwZQkJCQkJCSovCi0jZGVmaW5lCURSUV9OT05FCTB4MDAwMAkvKiAJCU5vIFJlcXVlc3QJCQkJCQkJKi8KLSNkZWZpbmUJRFJRX1NJTkdMRQkweDAxMDAJLyogCQlDaGFubmVscyBSZXF1ZXN0IFNpbmdsZQkJCQkqLwotI2RlZmluZQlEUlFfTVVMVEkJMHgwMjAwCS8qIAkJQ2hhbm5lbHMgUmVxdWVzdCBNdWx0aSAoRGVmYXVsdCkJKi8KLSNkZWZpbmUJRFJRX1VSR0VOVAkweDAzMDAJLyogCQlDaGFubmVscyBSZXF1ZXN0IE11bHRpIFVyZ2VudAkJKi8KLSNkZWZpbmUJUkJDCQkJMHgxMDAwCS8qIFJlbG9hZCBCQ05UIFdpdGggSUJDTlQJCQkJCSovCi0jZGVmaW5lCVBTCQkJMHgyMDAwCS8qIEhETUEgUGluIFN0YXR1cwkJCQkJCQkqLwotI2RlZmluZQlPSQkJCTB4NDAwMAkvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgR2VuZXJhdGVkCQkJCSovCi0jZGVmaW5lCUJESQkJCTB4ODAwMAkvKiBCbG9jayBEb25lIEludGVycnVwdCBHZW5lcmF0ZWQJCQkqLwotCiAvKiBlbnRyeSBhZGRyZXNzZXMgb2YgdGhlIHVzZXItY2FsbGFibGUgQm9vdCBST00gZnVuY3Rpb25zICovCiAKICNkZWZpbmUgX0JPT1RST01fUkVTRVQgMHhFRjAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwppbmRleCBmODY5YTM3Li5hMzc3ZDhhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwpAQCAtMjg5LDggKzI4OSw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlwMHhfaW5pdCh2b2lkKQogewotCWludCBpOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogcmVnaXN0ZXJpbmcgZGV2aWNlIHJlc291cmNlc1xuIiwgX19mdW5jX18pOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlwMHhfZGV2aWNlcywgQVJSQVlfU0laRShpcDB4X2RldmljZXMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzdlLmMKaW5kZXggMmM3NzZlMS4uZDU4MmI4MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jCkBAIC03NzUsNyArNzc1LDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9QTEFURk9STSkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9QTEFURk9STV9NT0RVTEUpCi0JaXJxX2Rlc2NbUEFUQV9JTlRdLnN0YXR1cyB8PSBJUlFfTk9BVVRPRU47CisJaXJxX3NldF9zdGF0dXNfZmxhZ3MoUEFUQV9JTlQsIElSUV9OT0FVVE9FTik7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jCmluZGV4IDA4NTY2MTEuLmNiYjgwOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk0pIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk1fTU9EVUxFKQotCWlycV9kZXNjW1BBVEFfSU5UXS5zdGF0dXMgfD0gSVJRX05PQVVUT0VOOworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKFBBVEFfSU5ULCBJUlFfTk9BVVRPRU4pOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2RucDUzNzAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZG5wNTM3MC5jCmluZGV4IGUxZTllYTAuLjZiNGZmNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZG5wNTM3MC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZG5wNTM3MC5jCkBAIC0xMjgsMzAgKzEyOCwxMSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCiAKLSNkZWZpbmUgTU1DX1NQSV9DQVJEX0RFVEVDVF9JTlQgSVJRX1BGNQotCi1zdGF0aWMgaW50IGJmaW5fbW1jX3NwaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQlpcnFyZXR1cm5fdCAoKmRldGVjdF9pbnQpKGludCwgdm9pZCAqKSwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoTU1DX1NQSV9DQVJEX0RFVEVDVF9JTlQsIGRldGVjdF9pbnQsCi0JCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCAibW1jLXNwaS1kZXRlY3QiLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgYmZpbl9tbWNfc3BpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWZyZWVfaXJxKE1NQ19TUElfQ0FSRF9ERVRFQ1RfSU5ULCBkYXRhKTsKLX0KLQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIG1tY19zcGlfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hICAgID0gMCwJIC8qIHVzZSBubyBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLwogCS5iaXRzX3Blcl93b3JkID0gOCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbW1jX3NwaV9wbGF0Zm9ybV9kYXRhIGJmaW5fbW1jX3NwaV9wZGF0YSA9IHsKLQkuaW5pdCA9IGJmaW5fbW1jX3NwaV9pbml0LAotCS5leGl0ID0gYmZpbl9tbWNfc3BpX2V4aXQsCi0JLmRldGVjdF9kZWxheSA9IDEwMCwgLyogbXNlY3MgKi8KLX07CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpIHx8IGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0hfTU9EVUxFKQpAQCAtMTkyLDcgKzE3Myw2IEBACiAJCS5tYXhfc3BlZWRfaHogICAgPSAyMDAwMDAwMCwKIAkJLmJ1c19udW0JID0gMCwKIAkJLmNoaXBfc2VsZWN0ICAgICA9IDEsCi0JCS5wbGF0Zm9ybV9kYXRhICAgPSAmYmZpbl9tbWNfc3BpX3BkYXRhLAogCQkuY29udHJvbGxlcl9kYXRhID0gJm1tY19zcGlfY2hpcF9pbmZvLAogCQkubW9kZQkgICAgICAgICA9IFNQSV9NT0RFXzMsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCmluZGV4IDA3NjFiMjAuLjE2NGE3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYwpAQCAtNzQyLDcgKzc0Miw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk0pIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk1fTU9EVUxFKQotCWlycV9kZXNjW1BBVEFfSU5UXS5zdGF0dXMgfD0gSVJRX05PQVVUT0VOOworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKFBBVEFfSU5ULCBJUlFfTk9BVVRPRU4pOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKaW5kZXggNzI1YmIzNS4uNGEwMzFkZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaApAQCAtMTUyMCwyNCArMTUyMCw2IEBACiAjZGVmaW5lCVBHVEVfUFBJCQkweDAwMDAJLyogICAgICAgICAgICAgIEVuYWJsZSBQUEkgRDE1OjEzICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZQlQR1RFX1NQT1JUCQkweDA4MDAJLyogICAgICAgICAgICAgIEVuYWJsZSBEVDFQUkkvVEZTMS9UU0NMSzEgICAgICAgKi8KIAotLyogICoqKioqKioqKioqKioqKioqKiAgSEFORFNIQUtFIERNQSAoSERNQSkgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKi8KLS8qIEhETUF4X0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJSE1ETUFFTgkJMHgwMDAxCS8qIEVuYWJsZSBIYW5kc2hha2UgRE1BIDAvMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSRVAJCQkweDAwMDIJLyogSERNQSBSZXF1ZXN0IFBvbGFyaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVVURQkJCTB4MDAwNAkvKiBVcmdlbmN5IFRocmVzaG9sZCBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJT0lFCQkJMHgwMDEwCS8qIE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQkRJRQkJMHgwMDIwCS8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJTUJESQkJMHgwMDQwCS8qIE1hc2sgQmxvY2sgRG9uZSBJUlEgSWYgUGVuZGluZyBFQ05UICAgICAgICAgICovCi0jZGVmaW5lCURSUQkJCTB4MDMwMAkvKiBIRE1BIFJlcXVlc3QgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJRFJRX05PTkUJMHgwMDAwCS8qICAgICAgICAgICAgICBObyBSZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJRFJRX1NJTkdMRQkweDAxMDAJLyogICAgICAgICAgICAgIENoYW5uZWxzIFJlcXVlc3QgU2luZ2xlICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCURSUV9NVUxUSQkweDAyMDAJLyogICAgICAgICAgICAgIENoYW5uZWxzIFJlcXVlc3QgTXVsdGkgKERlZmF1bHQpICAgICAgICAqLwotI2RlZmluZQlEUlFfVVJHRU5UCTB4MDMwMAkvKiAgICAgICAgICAgICAgQ2hhbm5lbHMgUmVxdWVzdCBNdWx0aSBVcmdlbnQgICAgICAgICAgICovCi0jZGVmaW5lCVJCQwkJCTB4MTAwMAkvKiBSZWxvYWQgQkNOVCBXaXRoIElCQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJUFMJCQkweDIwMDAJLyogSERNQSBQaW4gU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJT0kJCQkweDQwMDAJLyogT3ZlcmZsb3cgSW50ZXJydXB0IEdlbmVyYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlCREkJCQkweDgwMDAJLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgR2VuZXJhdGVkICAgICAgICAgICAgICAgICAgICAgICAqLwotCiAvKiBlbnRyeSBhZGRyZXNzZXMgb2YgdGhlIHVzZXItY2FsbGFibGUgQm9vdCBST00gZnVuY3Rpb25zICovCiAKICNkZWZpbmUgX0JPT1RST01fUkVTRVQgMHhFRjAwMDAwMCAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L0tjb25maWcKaW5kZXggNzAxODlhMC4uOTRhY2I1OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L0tjb25maWcKQEAgLTQyLDYgKzQyLDY1IEBACiAJICBhc3luYyBhZGRyZXNzIG9yIEdQSU8gcG9ydCBGIGFuZCBHLiBTZWxlY3QgeSB0byByb3V0ZSBpdAogCSAgdG8gR1BJTy4KIAorY2hvaWNlCisJcHJvbXB0ICJVQVJUMiBETUEgY2hhbm5lbCBzZWxlY3Rpb24iCisJZGVwZW5kcyBvbiBTRVJJQUxfQkZJTl9VQVJUMgorCWRlZmF1bHQgVUFSVDJfRE1BX1JYX09OX0RNQTE4CisJaGVscAorCQlVQVJUMiBETUEgY2hhbm5lbCBzZWxlY3Rpb24KKwkJUlggLT4gRE1BMTgKKwkJVFggLT4gRE1BMTkKKwkJb3IKKwkJUlggLT4gRE1BMTMKKwkJVFggLT4gRE1BMTQKKworY29uZmlnIFVBUlQyX0RNQV9SWF9PTl9ETUExOAorCWJvb2wgIlVBUlQyIERNQSBSWCAtPiBETUExOCBUWCAtPiBETUExOSIKKwloZWxwCisJCVVBUlQyIERNQSBjaGFubmVsIGFzc2lnbm1lbnQKKwkJUlggLT4gRE1BMTgKKwkJVFggLT4gRE1BMTkKKwkJdXNlIFNQT1JUMiBkZWZhdWx0IERNQSBjaGFubmVsCisKK2NvbmZpZyBVQVJUMl9ETUFfUlhfT05fRE1BMTMKKwlib29sICJVQVJUMiBETUEgUlggLT4gRE1BMTMgVFggLT4gRE1BMTQiCisJaGVscAorCQlVQVJUMiBETUEgY2hhbm5lbCBhc3NpZ25tZW50CisJCVJYIC0+IERNQTEzCisJCVRYIC0+IERNQTE0CisJCXVzZSBFUFBJMSBFUFBJMiBkZWZhdWx0IERNQSBjaGFubmVsCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJVQVJUMyBETUEgY2hhbm5lbCBzZWxlY3Rpb24iCisJZGVwZW5kcyBvbiBTRVJJQUxfQkZJTl9VQVJUMworCWRlZmF1bHQgVUFSVDNfRE1BX1JYX09OX0RNQTIwCisJaGVscAorCQlVQVJUMyBETUEgY2hhbm5lbCBzZWxlY3Rpb24KKwkJUlggLT4gRE1BMjAKKwkJVFggLT4gRE1BMjEKKwkJb3IKKwkJUlggLT4gRE1BMTUKKwkJVFggLT4gRE1BMTYKKworY29uZmlnIFVBUlQzX0RNQV9SWF9PTl9ETUEyMAorCWJvb2wgIlVBUlQzIERNQSBSWCAtPiBETUEyMCBUWCAtPiBETUEyMSIKKwloZWxwCisJCVVBUlQzIERNQSBjaGFubmVsIGFzc2lnbm1lbnQKKwkJUlggLT4gRE1BMjAKKwkJVFggLT4gRE1BMjEKKwkJdXNlIFNQT1JUMyBkZWZhdWx0IERNQSBjaGFubmVsCisKK2NvbmZpZyBVQVJUM19ETUFfUlhfT05fRE1BMTUKKwlib29sICJVQVJUMyBETUEgUlggLT4gRE1BMTUgVFggLT4gRE1BMTYiCisJaGVscAorCQlVQVJUMyBETUEgY2hhbm5lbCBhc3NpZ25tZW50CisJCVJYIC0+IERNQTE1CisJCVRYIC0+IERNQTE2CisJCXVzZSBQSVhDIGRlZmF1bHQgRE1BIGNoYW5uZWwKKworZW5kY2hvaWNlCisKIGNvbW1lbnQgIkludGVycnVwdCBQcmlvcml0eSBBc3NpZ25tZW50IgogbWVudSAiUHJpb3JpdHkiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwppbmRleCBjZTVhMmJiLi45M2UxOWE1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCkBAIC03NzgsMTEgKzc3OCwxMiBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DQU5fQkZJTikgfHwgZGVmaW5lZChDT05GSUdfQ0FOX0JGSU5fTU9EVUxFKQotc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fY2FuX3BlcmlwaGVyYWxzW10gPSB7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX2NhbjBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX0NBTjBfUlgsIFBfQ0FOMF9UWCwgMAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2Nhbl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9jYW4wX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gMHhGRkMwMkEwMCwKIAkJLmVuZCA9IDB4RkZDMDJGRkYsCkBAIC04MDUsMTQgKzgwNiw1MyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2Nhbl9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2NhbjBfZGV2aWNlID0gewogCS5uYW1lID0gImJmaW5fY2FuIiwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9jYW5fcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBiZmluX2Nhbl9yZXNvdXJjZXMsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9jYW4wX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gYmZpbl9jYW4wX3Jlc291cmNlcywKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2Nhbl9wZXJpcGhlcmFscywgLyogUGFzc2VkIHRvIGRyaXZlciAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2NhbjBfcGVyaXBoZXJhbHMsIC8qIFBhc3NlZCB0byBkcml2ZXIgKi8KIAl9LAogfTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fY2FuMV9wZXJpcGhlcmFsc1tdID0geworCVBfQ0FOMV9SWCwgUF9DQU4xX1RYLCAwCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fY2FuMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IDB4RkZDMDMyMDAsCisJCS5lbmQgPSAweEZGQzAzN0ZGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gSVJRX0NBTjFfUlgsCisJCS5lbmQgPSBJUlFfQ0FOMV9SWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IElSUV9DQU4xX1RYLAorCQkuZW5kID0gSVJRX0NBTjFfVFgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBJUlFfQ0FOMV9FUlJPUiwKKwkJLmVuZCA9IElSUV9DQU4xX0VSUk9SLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9jYW4xX2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluX2NhbiIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9jYW4xX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gYmZpbl9jYW4xX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2NhbjFfcGVyaXBoZXJhbHMsIC8qIFBhc3NlZCB0byBkcml2ZXIgKi8KKwl9LAorfTsKKwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQVRBX0JGNTRYKSB8fCBkZWZpbmVkKENPTkZJR19QQVRBX0JGNTRYX01PRFVMRSkKQEAgLTEzNjYsNyArMTQwNiw4IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0NBTl9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19DQU5fQkZJTl9NT0RVTEUpCi0JJmJmaW5fY2FuX2RldmljZSwKKwkmYmZpbl9jYW4wX2RldmljZSwKKwkmYmZpbl9jYW4xX2RldmljZSwKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WCkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WF9NT0RVTEUpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKaW5kZXggNjQyNDY4Yy4uYmNjY2FiMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaApAQCAtNjU3LDIyICs2NTcsNCBAQAogCiAvKiBCaXQgbWFza3MgZm9yIEVQUEkwIGFyZSBvYnRhaW5lZCBmcm9tIGNvbW1vbiBiYXNlIGhlYWRlciBmb3IgRVBQSXggKEVQUEkxIGFuZCBFUFBJMikgKi8KIAotLyogQml0IG1hc2tzIGZvciBITURNQXhfQ09OVFJPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEhNRE1BRU4gIDB4MSAgICAgICAgLyogSGFuZHNoYWtlIE1ETUEgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSRVAgIDB4MiAgICAgICAgLyogSGFuZHNoYWtlIE1ETUEgUmVxdWVzdCBQb2xhcml0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVRFICAweDggICAgICAgIC8qIFVyZ2VuY3kgVGhyZXNob2xkIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgT0lFICAweDEwICAgICAgIC8qIE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQkRJRSAgMHgyMCAgICAgICAvKiBCbG9jayBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUJESSAgMHg0MCAgICAgICAvKiBNYXNrIEJsb2NrIERvbmUgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBEUlEgIDB4MzAwICAgICAgLyogSGFuZHNoYWtlIE1ETUEgUmVxdWVzdCBUeXBlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSQkMgIDB4MTAwMCAgICAgLyogRm9yY2UgUmVsb2FkIG9mIEJDT1VOVCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBTICAweDIwMDAgICAgIC8qIFBpbiBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBPSSAgMHg0MDAwICAgICAvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgR2VuZXJhdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBCREkgIDB4ODAwMCAgICAgLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgR2VuZXJhdGVkICovCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qICAgICBNVUxUSSBCSVQgTUFDUk8gRU5VTUVSQVRJT05TICAgICAgICAgICAgKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQogI2VuZGlmIC8qIF9ERUZfQkY1NDRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCmluZGV4IDJmMzMzN2MuLjFjYmJhMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKQEAgLTEwNjMsMjMgKzEwNjMsNCBAQAogCiAjZGVmaW5lICAgICAgICAgICAgIERNQV9DT1VOVF9MT1cgIDB4ZmZmZiAgICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgSE1ETUF4X0NPTlRST0wgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBITURNQUVOICAweDEgICAgICAgIC8qIEhhbmRzaGFrZSBNRE1BIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUkVQICAweDIgICAgICAgIC8qIEhhbmRzaGFrZSBNRE1BIFJlcXVlc3QgUG9sYXJpdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVURSAgMHg4ICAgICAgICAvKiBVcmdlbmN5IFRocmVzaG9sZCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9JRSAgMHgxMCAgICAgICAvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJESUUgIDB4MjAgICAgICAgLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1CREkgIDB4NDAgICAgICAgLyogTWFzayBCbG9jayBEb25lIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRFJRICAweDMwMCAgICAgIC8qIEhhbmRzaGFrZSBNRE1BIFJlcXVlc3QgVHlwZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUkJDICAweDEwMDAgICAgIC8qIEZvcmNlIFJlbG9hZCBvZiBCQ09VTlQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQUyAgMHgyMDAwICAgICAvKiBQaW4gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT0kgIDB4NDAwMCAgICAgLyogT3ZlcmZsb3cgSW50ZXJydXB0IEdlbmVyYXRlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQkRJICAweDgwMDAgICAgIC8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEdlbmVyYXRlZCAqLwotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiAgICAgTVVMVEkgQklUIE1BQ1JPIEVOVU1FUkFUSU9OUyAgICAgICAgICAgICovCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLQogI2VuZGlmIC8qIF9ERUZfQkY1NDdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggYTMwZDI0Mi4uMWExMDkxYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC0yNywxNyArMjcsMzcgQEAKICNkZWZpbmUgQ0hfUElYQ19PVkVSTEFZCQkxNgogI2RlZmluZSBDSF9QSVhDX09VVFBVVAkJMTcKICNkZWZpbmUgQ0hfU1BPUlQyX1JYCQkxOAotI2RlZmluZSBDSF9VQVJUMl9SWAkJMTgKICNkZWZpbmUgQ0hfU1BPUlQyX1RYCQkxOQotI2RlZmluZSBDSF9VQVJUMl9UWAkJMTkKICNkZWZpbmUgQ0hfU1BPUlQzX1JYCQkyMAotI2RlZmluZSBDSF9VQVJUM19SWAkJMjAKICNkZWZpbmUgQ0hfU1BPUlQzX1RYCQkyMQotI2RlZmluZSBDSF9VQVJUM19UWAkJMjEKICNkZWZpbmUgQ0hfU0RICQkJMjIKICNkZWZpbmUgQ0hfTkZDCQkJMjIKICNkZWZpbmUgQ0hfU1BJMgkJCTIzCiAKKyNpZiBkZWZpbmVkKENPTkZJR19VQVJUMl9ETUFfUlhfT05fRE1BMTMpCisjZGVmaW5lIENIX1VBUlQyX1JYCQkxMworI2RlZmluZSBJUlFfVUFSVDJfUlgJCUJGSU5fSVJRKDM3KQkvKiBVQVJUMiBSWCBVU0UgRVBQMSAoRE1BMTMpIEludGVycnVwdCAqLworI2RlZmluZSBDSF9VQVJUMl9UWAkJMTQKKyNkZWZpbmUgSVJRX1VBUlQyX1RYCQlCRklOX0lSUSgzOCkJLyogVUFSVDIgUlggVVNFIEVQUDEgKERNQTE0KSBJbnRlcnJ1cHQgKi8KKyNlbHNlCQkJCQkJLyogRGVmYXVsdCBVU0UgU1BPUlQyJ3MgRE1BIENoYW5uZWwgKi8KKyNkZWZpbmUgQ0hfVUFSVDJfUlgJCTE4CisjZGVmaW5lIElSUV9VQVJUMl9SWAkJQkZJTl9JUlEoMzMpCS8qIFVBUlQyIFJYIChETUExOCkgSW50ZXJydXB0ICovCisjZGVmaW5lIENIX1VBUlQyX1RYCQkxOQorI2RlZmluZSBJUlFfVUFSVDJfVFgJCUJGSU5fSVJRKDM0KQkvKiBVQVJUMiBUWCAoRE1BMTkpIEludGVycnVwdCAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19VQVJUM19ETUFfUlhfT05fRE1BMTUpCisjZGVmaW5lIENIX1VBUlQzX1JYCQkxNQorI2RlZmluZSBJUlFfVUFSVDNfUlgJCUJGSU5fSVJRKDY0KQkvKiBVQVJUMyBSWCBVU0UgUElYQyBJTjAgKERNQTE1KSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ0hfVUFSVDNfVFgJCTE2CisjZGVmaW5lIElSUV9VQVJUM19UWAkJQkZJTl9JUlEoNjUpCS8qIFVBUlQzIFRYIFVTRSBQSVhDIElOMSAoRE1BMTYpIEludGVycnVwdCAqLworI2Vsc2UJCQkJCQkvKiBEZWZhdWx0IFVTRSBTUE9SVDMncyBETUEgQ2hhbm5lbCAqLworI2RlZmluZSBDSF9VQVJUM19SWAkJMjAKKyNkZWZpbmUgSVJRX1VBUlQzX1JYCQlCRklOX0lSUSgzNSkJLyogVUFSVDMgUlggKERNQTIwKSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ0hfVUFSVDNfVFgJCTIxCisjZGVmaW5lIElSUV9VQVJUM19UWAkJQkZJTl9JUlEoMzYpCS8qIFVBUlQzIFRYIChETUEyMSkgSW50ZXJydXB0ICovCisjZW5kaWYKKwogI2RlZmluZSBDSF9NRU1fU1RSRUFNMF9ERVNUCTI0CiAjZGVmaW5lIENIX01FTV9TVFJFQU0wX1NSQwkyNQogI2RlZmluZSBDSF9NRU1fU1RSRUFNMV9ERVNUCTI2CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCA5OWZkMWIyLi43Zjg3Nzg3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTc0LDEzICs3NCw5IEBACiAjZGVmaW5lIElSUV9VQVJUMl9FUlJPUgkJQkZJTl9JUlEoMzEpCS8qIFVBUlQyIFN0YXR1cyAoRXJyb3IpIEludGVycnVwdCAqLwogI2RlZmluZSBJUlFfQ0FOMF9FUlJPUgkJQkZJTl9JUlEoMzIpCS8qIENBTjAgU3RhdHVzIChFcnJvcikgSW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9TUE9SVDJfUlgJCUJGSU5fSVJRKDMzKQkvKiBTUE9SVDIgUlggKERNQTE4KSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSVJRX1VBUlQyX1JYCQlCRklOX0lSUSgzMykJLyogVUFSVDIgUlggKERNQTE4KSBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVJRX1NQT1JUMl9UWAkJQkZJTl9JUlEoMzQpCS8qIFNQT1JUMiBUWCAoRE1BMTkpIEludGVycnVwdCAqLwotI2RlZmluZSBJUlFfVUFSVDJfVFgJCUJGSU5fSVJRKDM0KQkvKiBVQVJUMiBUWCAoRE1BMTkpIEludGVycnVwdCAqLwogI2RlZmluZSBJUlFfU1BPUlQzX1JYCQlCRklOX0lSUSgzNSkJLyogU1BPUlQzIFJYIChETUEyMCkgSW50ZXJydXB0ICovCi0jZGVmaW5lIElSUV9VQVJUM19SWAkJQkZJTl9JUlEoMzUpCS8qIFVBUlQzIFJYIChETUEyMCkgSW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9TUE9SVDNfVFgJCUJGSU5fSVJRKDM2KQkvKiBTUE9SVDMgVFggKERNQTIxKSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSVJRX1VBUlQzX1RYCQlCRklOX0lSUSgzNikJLyogVUFSVDMgVFggKERNQTIxKSBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVJRX0VQUEkxCQlCRklOX0lSUSgzNykJLyogRVBQMSAoRE1BMTMpIEludGVycnVwdCAqLwogI2RlZmluZSBJUlFfRVBQSTIJCUJGSU5fSVJRKDM4KQkvKiBFUFAyIChETUExNCkgSW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9TUEkxCQlCRklOX0lSUSgzOSkJLyogU1BJMSAoRE1BNSkgSW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMKaW5kZXggM2I2NzkyOS4uODc1OTVjZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9jbV9iZjU2MS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYwpAQCAtNTQxLDcgKzU0MSw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk0pIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk1fTU9EVUxFKQotCWlycV9kZXNjW1BBVEFfSU5UXS5zdGF0dXMgfD0gSVJRX05PQVVUT0VOOworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKFBBVEFfSU5ULCBJUlFfTk9BVVRPRU4pOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaG90cGx1Zy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hvdHBsdWcuYwppbmRleCA0Y2QzYjI4Li40MmZjMDg1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaG90cGx1Zy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ob3RwbHVnLmMKQEAgLTUsMzAgKzUsMjcgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLQotI2RlZmluZSBTSUNfU1lTSVJRKGlycSkJKGlycSAtIChJUlFfQ09SRVRNUiArIDEpKQorI2luY2x1ZGUgPG1hY2gvcGxsLmg+CiAKIGludCBob3RwbHVnX2NvcmViOwogCiB2b2lkIHBsYXRmb3JtX2NwdV9kaWUodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGl3clsyXSA9IHswLCAwfTsKLQl1bnNpZ25lZCBsb25nIGJhbmsgPSBTSUNfU1lTSVJRKElSUV9TVVBQTEVfMCkgLyAzMjsKLQl1bnNpZ25lZCBsb25nIGJpdCA9IDEgPDwgKFNJQ19TWVNJUlEoSVJRX1NVUFBMRV8wKSAlIDMyKTsKLQorCXVuc2lnbmVkIGxvbmcgaXdyOwogCWhvdHBsdWdfY29yZWIgPSAxOwogCi0JaXdyW2JhbmtdID0gYml0OwotCiAJLyogZGlzYWJsZSBjb3JlIHRpbWVyICovCiAJYmZpbl93cml0ZV9UQ05UTCgwKTsKIAotCS8qIGNsZWFyIGlwaSBpbnRlcnJ1cHQgSVJRX1NVUFBMRV8wICovCisJLyogY2xlYXIgaXBpIGludGVycnVwdCBJUlFfU1VQUExFXzAgb2YgQ29yZUIgKi8KIAliZmluX3dyaXRlX1NJQ0JfU1lTQ1IoYmZpbl9yZWFkX1NJQ0JfU1lTQ1IoKSB8ICgxIDw8ICgxMCArIDEpKSk7CiAJU1NZTkMoKTsKIAotCWNvcmViX3NsZWVwKGl3clswXSwgaXdyWzFdLCAwKTsKKwkvKiBzZXQgQ29yZUIgd2FrZXVwIGJ5IGlwaTAsIGl3ciB3aWxsIGJlIGRpc2NhcmRlZCAqLworCWJmaW5faXdyX3NldF9zdXAwKCZpd3IsICZpd3IsICZpd3IpOworCVNTWU5DKCk7CisKKwljb3JlYl9kaWUoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUwppbmRleCA0NjI0ZWViLi40YzQ2MjgzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NlY29uZGFyeS5TCkBAIC0xMyw3ICsxMywxMSBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS90cmFjZS5oPgogCi1fX0lOSVQKKy8qCisgKiBUaGlzIGNvZGUgbXVzdCBjb21lIGZpcnN0IGFzIENvcmVCIGlzIGhhcmRjb2RlZCAoaW4gaGFyZHdhcmUpCisgKiB0byBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGl0cyBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuCisgKi8KKy5zZWN0aW9uIC5sMS50ZXh0LmhlYWQKIAogLyogTGF5IHRoZSBpbml0aWFsIHN0YWNrIGludG8gdGhlIEwxIHNjcmF0Y2ggYXJlYSBvZiBDb3JlIEIgKi8KICNkZWZpbmUgSU5JVElBTF9TVEFDSwkoQ09SRUJfTDFfU0NSQVRDSF9TVEFSVCArIEwxX1NDUkFUQ0hfTEVOR1RIIC0gMTIpCkBAIC0xNjAsNDMgKzE2NCwzNCBAQAogLkxXQUlUX0hFUkU6CiAJanVtcCAuTFdBSVRfSEVSRTsKIEVORFBST0MoX2NvcmViX3RyYW1wb2xpbmVfc3RhcnQpCi1FTlRSWShfY29yZWJfdHJhbXBvbGluZV9lbmQpCiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIC5zZWN0aW9uICIudGV4dCIKLUVOVFJZKF9zZXRfc2ljYl9pd3IpCi0JUDAuSCA9IGhpKFNJQ0JfSVdSMCk7Ci0JUDAuTCA9IGxvKFNJQ0JfSVdSMCk7Ci0JUDEuSCA9IGhpKFNJQ0JfSVdSMSk7Ci0JUDEuTCA9IGxvKFNJQ0JfSVdSMSk7Ci0JW1AwXSA9IFIwOwotCVtQMV0gPSBSMTsKLQlTU1lOQzsKLQlSVFM7Ci1FTkRQUk9DKF9zZXRfc2ljYl9pd3IpCi0KLUVOVFJZKF9jb3JlYl9zbGVlcCkKK0VOVFJZKF9jb3JlYl9kaWUpCiAJc3AubCA9IGxvKElOSVRJQUxfU1RBQ0spOwogCXNwLmggPSBoaShJTklUSUFMX1NUQUNLKTsKIAlmcCA9IHNwOwogCXVzcCA9IHNwOwogCi0JY2FsbCBfc2V0X3NpY2JfaXdyOwotCiAJQ0xJIFIyOwogCVNTWU5DOwogCUlETEU7CiAJU1RJIFIyOwogCiAJUjAgPSBJV1JfRElTQUJMRV9BTEw7Ci0JUjEgPSBJV1JfRElTQUJMRV9BTEw7Ci0JY2FsbCBfc2V0X3NpY2JfaXdyOworCVAwLkggPSBoaShTWVNNTVJfQkFTRSk7CisJUDAuTCA9IGxvKFNZU01NUl9CQVNFKTsKKwlbUDAgKyAoU0lDQl9JV1IwIC0gU1lTTU1SX0JBU0UpXSA9IFIwOworCVtQMCArIChTSUNCX0lXUjEgLSBTWVNNTVJfQkFTRSldID0gUjA7CisJU1NZTkM7CiAKIAlwMC5oID0gaGkoQ09SRUJfTDFfQ09ERV9TVEFSVCk7CiAJcDAubCA9IGxvKENPUkVCX0wxX0NPREVfU1RBUlQpOwogCWp1bXAgKHAwKTsKLUVORFBST0MoX2NvcmViX3NsZWVwKQorRU5EUFJPQyhfY29yZWJfZGllKQorI2VuZGlmCiAKLV9fQ1BVSU5JVAorX19JTklUCiBFTlRSWShfY29yZWJfc3RhcnQpCiAJWy0tc3BdID0gcmV0aTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jCmluZGV4IDEwNzRhN2UuLjVkNjhiZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKQEAgLTMwLDE4ICszMCwxMSBAQAogCiB2b2lkIF9faW5pdCBwbGF0Zm9ybV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewotCWludCBsZW47Ci0KLQlsZW4gPSAmY29yZWJfdHJhbXBvbGluZV9lbmQgLSAmY29yZWJfdHJhbXBvbGluZV9zdGFydCArIDE7Ci0JQlVHX09OKGxlbiA+IEwxX0NPREVfTEVOR1RIKTsKLQotCWRtYV9tZW1jcHkoKHZvaWQgKilDT1JFQl9MMV9DT0RFX1NUQVJULCAmY29yZWJfdHJhbXBvbGluZV9zdGFydCwgbGVuKTsKKwliZmluX3JlbG9jYXRlX2NvcmViX2wxX21lbSgpOwogCiAJLyogQm90aCBjb3JlcyBvdWdodCB0byBiZSBwcmVzZW50IG9uIGEgYmY1NjEhICovCiAJY3B1X3NldCgwLCBjcHVfcHJlc2VudF9tYXApOyAvKiBDb3JlQSAqLwogCWNwdV9zZXQoMSwgY3B1X3ByZXNlbnRfbWFwKTsgLyogQ29yZUIgKi8KLQotCXByaW50ayhLRVJOX0lORk8gIkNvcmVCIGJvb3RzdHJhcCBjb2RlIHRvIFNSQU0gJXAgdmlhIERNQS5cbiIsICh2b2lkICopQ09SRUJfTDFfQ09ERV9TVEFSVCk7CiB9CiAKIGludCBfX2luaXQgc2V0dXBfcHJvZmlsaW5nX3RpbWVyKHVuc2lnbmVkIGludCBtdWx0aXBsaWVyKSAvKiBub3Qgc3VwcG9ydGVkICovCkBAIC0xNjEsOSArMTU0LDEzIEBACiB2b2lkIF9fY3B1aW5pdCBiZmluX2xvY2FsX3RpbWVyX3NldHVwKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SKQorCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcChJUlFfQ09SRVRNUik7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoSVJRX0NPUkVUTVIpOworCiAJYmZpbl9jb3JldG1yX2luaXQoKTsKIAliZmluX2NvcmV0bXJfY2xvY2tldmVudF9pbml0KCk7Ci0JZ2V0X2lycV9jaGlwKElSUV9DT1JFVE1SKS0+dW5tYXNrKElSUV9DT1JFVE1SKTsKKworCWNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKICNlbHNlCiAJLyogUG93ZXIgZG93biB0aGUgY29yZSB0aW1lciwganVzdCB0byBwbGF5IHNhZmUuICovCiAJYmZpbl93cml0ZV9UQ05UTCgwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYwppbmRleCBiY2ViOTgxLi5kODY0M2ZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCkBAIC02MSw2ICs2MSw2IEBACiAjIGVycm9yICJBbm9tYWx5IDA1MDAwMjIwIGRvZXMgbm90IGFsbG93IHlvdSB0byB1c2UgV3JpdGUgQmFjayBjYWNoZSB3aXRoIEwyIG9yIEV4dGVybmFsIE1lbW9yeSIKICNlbmRpZgogCi0jaWYgQU5PTUFMWV8wNTAwMDQ5MSAmJiAhZGVmaW5lZChDT05GSUdfQ0FDSEVfRkxVU0hfTDEpCisjaWYgQU5PTUFMWV8wNTAwMDQ5MSAmJiAhZGVmaW5lZChDT05GSUdfSUNBQ0hFX0ZMVVNIX0wxKQogIyBlcnJvciBZb3UgbmVlZCBJRkxVU0ggaW4gTDEgaW5zdCB3aGlsZSBBbm9tYWx5IDA1MDAwNDkxIGFwcGxpZXMKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCmluZGV4IGFiNGE5MjUuLjlmNGRkMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKQEAgLTExLDEyICsxMSw2IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2lmZGVmIENPTkZJR19DQUNIRV9GTFVTSF9MMQotLnNlY3Rpb24gLmwxLnRleHQKLSNlbHNlCi0udGV4dAotI2VuZGlmCi0KIC8qIDA1MDAwNDQzIC0gSUZMVVNIIGNhbm5vdCBiZSBsYXN0IGluc3RydWN0aW9uIGluIGhhcmR3YXJlIGxvb3AgKi8KICNpZiBBTk9NQUxZXzA1MDAwNDQzCiAjIGRlZmluZSBCUk9LX0ZMVVNIX0lOU1QgIklGTFVTSCIKQEAgLTY4LDExICs2Miw0MyBAQAogCVJUUzsKIC5lbmRtCiAKKyNpZmRlZiBDT05GSUdfSUNBQ0hFX0ZMVVNIX0wxCisuc2VjdGlvbiAubDEudGV4dAorI2Vsc2UKKy50ZXh0CisjZW5kaWYKKwogLyogSW52YWxpZGF0ZSBhbGwgaW5zdHJ1Y3Rpb24gY2FjaGUgbGluZXMgYXNzb2NvaWF0ZWQgd2l0aCB0aGlzIG1lbW9yeSBhcmVhICovCisjaWZkZWYgQ09ORklHX1NNUAorIyBkZWZpbmUgX2JsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSBfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlX2wxCisjZW5kaWYKIEVOVFJZKF9ibGFja2Zpbl9pY2FjaGVfZmx1c2hfcmFuZ2UpCiAJZG9fZmx1c2ggSUZMVVNICiBFTkRQUk9DKF9ibGFja2Zpbl9pY2FjaGVfZmx1c2hfcmFuZ2UpCiAKKyNpZmRlZiBDT05GSUdfU01QCisudGV4dAorIyB1bmRlZiBfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlCitFTlRSWShfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKQorCXAwLkwgPSBMTyhEU1BJRCk7CisJcDAuSCA9IEhJKERTUElEKTsKKwlyMyA9IFtwMF07CisJcjMgPSByMy5iICh6KTsKKwlwMiA9IHIzOworCXAwLkwgPSBfYmxhY2tmaW5faWZsdXNoX2wxX2VudHJ5OworCXAwLkggPSBfYmxhY2tmaW5faWZsdXNoX2wxX2VudHJ5OworCXAwID0gcDAgKyAocDIgPDwgMik7CisJcDEgPSBbcDBdOworCWp1bXAgKHAxKTsKK0VORFBST0MoX2JsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RDQUNIRV9GTFVTSF9MMQorLnNlY3Rpb24gLmwxLnRleHQKKyNlbHNlCisudGV4dAorI2VuZGlmCisKIC8qIFRocm93IGF3YXkgYWxsIEQtY2FjaGVkIGRhdGEgaW4gc3BlY2lmaWVkIHJlZ2lvbiB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIHRvCiAgKiB3cml0ZSB0aGVtIGJhY2suICBTaW5jZSB0aGUgQmxhY2tmaW4gSVNBIGRvZXMgbm90IGhhdmUgYW4gImludmFsaWRhdGUiCiAgKiBpbnN0cnVjdGlvbiwgd2UgdXNlIGZsdXNoL2ludmFsaWRhdGUuICBQZXJoYXBzIGFzIGEgc3BlZWQgb3B0aW1pemF0aW9uIHdlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCmluZGV4IGY0Y2YxMWQuLjg1ZGM2ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEJsYWNrZmluIGNvcmUgY2xvY2sgc2NhbGluZwogICoKLSAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCkBAIC0xNiwxMCArMTYsOCBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2RwbWMuaD4KIAotI2RlZmluZSBDUFVGUkVRX0NQVSAwCi0KIC8qIHRoaXMgaXMgdGhlIHRhYmxlIG9mIENDTEsgZnJlcXVlbmNpZXMsIGluIEh6ICovCi0vKiAuaW5kZXggaXMgdGhlIGVudHJ5IGluIHRoZSBhdXhpbGxhcnkgZHBtX3N0YXRlX3RhYmxlW10gKi8KKy8qIC5pbmRleCBpcyB0aGUgZW50cnkgaW4gdGhlIGF1eGlsaWFyeSBkcG1fc3RhdGVfdGFibGVbXSAqLwogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBiZmluX2ZyZXFfdGFibGVbXSA9IHsKIAl7CiAJCS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORCwKQEAgLTQ2LDcgKzQ0LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRSkKIC8qCi0gKiBub3JtYWxpemVkIHRvIG1heGltdW0gZnJlcXVuY3kgb2Zmc2V0IGZvciBDWUNMRVMsCisgKiBub3JtYWxpemVkIHRvIG1heGltdW0gZnJlcXVlbmN5IG9mZnNldCBmb3IgQ1lDTEVTLAogICogdXNlZCBpbiB0aW1lLXRzIGN5Y2xlcyBjbG9jayBzb3VyY2UsIGJ1dCBjb3VsZCBiZSB1c2VkCiAgKiBzb21ld2hlcmUgYWxzby4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9kcG1jLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuYwppbmRleCAwMmM3ZWZkLi4zODIwOTlmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuYwpAQCAtNjEsMTcgKzYxLDYzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKyMgaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIHZvaWQgYmZpbl9pZGxlX3RoaXNfY3B1KHZvaWQgKmluZm8pCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyBpd3IwLCBpd3IxLCBpd3IyOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CisJYmZpbl9pd3Jfc2V0X3N1cDAoJml3cjAsICZpd3IxLCAmaXdyMik7CisKKwlwbGF0Zm9ybV9jbGVhcl9pcGkoY3B1LCBJUlFfU1VQUExFXzApOworCVNTWU5DKCk7CisJYXNtKCJJRExFOyIpOworCWJmaW5faXdyX3Jlc3RvcmUoaXdyMCwgaXdyMSwgaXdyMik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGJmaW5faWRsZV9jcHUodm9pZCkKK3sKKwlzbXBfY2FsbF9mdW5jdGlvbihiZmluX2lkbGVfdGhpc19jcHUsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBiZmluX3dha2V1cF9jcHUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCXVuc2lnbmVkIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOworCisJY3B1X2NsZWFyKHRoaXNfY3B1LCBtYXNrKTsKKwlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spCisJCXBsYXRmb3JtX3NlbmRfaXBpX2NwdShjcHUsIElSUV9TVVBQTEVfMCk7Cit9CisKKyMgZWxzZQorc3RhdGljIHZvaWQgYmZpbl9pZGxlX2NwdSh2b2lkKSB7fQorc3RhdGljIHZvaWQgYmZpbl93YWtldXBfY3B1KHZvaWQpIHt9CisjIGVuZGlmCisKIHN0YXRpYyBpbnQKIHZyZWdfY3B1ZnJlcV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CiAKKwlpZiAoZnJlcS0+Y3B1ICE9IENQVUZSRVFfQ1BVKQorCQlyZXR1cm4gMDsKKwogCWlmICh2YWwgPT0gQ1BVRlJFUV9QUkVDSEFOR0UgJiYgZnJlcS0+b2xkIDwgZnJlcS0+bmV3KSB7CisJCWJmaW5faWRsZV9jcHUoKTsKIAkJYmZpbl9zZXRfdmxldihiZmluX2dldF92bGV2KGZyZXEtPm5ldykpOwogCQl1ZGVsYXkocGRhdGEtPnZyX3NldHRsaW5nX3RpbWUpOyAvKiBXYWl0IHVudGlsIFZvbGF0Z2Ugc2V0dGxlZCAqLwotCi0JfSBlbHNlIGlmICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGZyZXEtPm9sZCA+IGZyZXEtPm5ldykKKwkJYmZpbl93YWtldXBfY3B1KCk7CisJfSBlbHNlIGlmICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGZyZXEtPm9sZCA+IGZyZXEtPm5ldykgeworCQliZmluX2lkbGVfY3B1KCk7CiAJCWJmaW5fc2V0X3ZsZXYoYmZpbl9nZXRfdmxldihmcmVxLT5uZXcpKTsKKwkJYmZpbl93YWtldXBfY3B1KCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKaW5kZXggYmMwOGM5OC4uNzU3OTQzZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwpAQCAtOTUyLDggKzk1MiwxNyBAQAogI2lmZGVmIENPTkZJR19JUElQRQogCiBfcmVzdW1lX2tlcm5lbF9mcm9tX2ludDoKKwlyMSA9IExPKH4weDgwMDApIChaKTsKKwlyMSA9IHIwICYgcjE7CisJcjAgPSAxOworCXIwID0gcjEgLSByMDsKKwlyMiA9IHIxICYgcjA7CisJY2MgPSByMiA9PSAwOworCS8qIFN5bmMgdGhlIHJvb3Qgc3RhZ2Ugb25seSBmcm9tIHRoZSBvdXRlciBpbnRlcnJ1cHQgbGV2ZWwuICovCisJaWYgIWNjIGp1bXAgLkxub3N5bmM7CiAJcjAubCA9IF9fX2lwaXBlX3N5bmNfcm9vdDsKIAlyMC5oID0gX19faXBpcGVfc3luY19yb290OworCVstLXNwXSA9IHJldGk7CiAJWy0tc3BdID0gcmV0czsKIAlbLS1zcF0gPSAoIHI3OjQsIHA1OjMgKTsKIAlTUCArPSAtMTI7CkBAIC05NjEsNiArOTcwLDggQEAKIAlTUCArPSAxMjsKIAkoIHI3OjQsIHA1OjMgKSA9IFtzcCsrXTsKIAlyZXRzID0gW3NwKytdOworCXJldGkgPSBbc3ArK107CisuTG5vc3luYzoKIAlydHMKICNlbGlmIGRlZmluZWQoQ09ORklHX1BSRUVNUFQpCiAKQEAgLTE3MzgsNiArMTc0OSw5IEBACiAJLmxvbmcgX3N5c19mYW5vdGlmeV9tYXJrCiAJLmxvbmcgX3N5c19wcmxpbWl0NjQKIAkubG9uZyBfc3lzX2NhY2hlZmx1c2gKKwkubG9uZyBfc3lzX25hbWVfdG9faGFuZGxlX2F0CS8qIDM3NSAqLworCS5sb25nIF9zeXNfb3Blbl9ieV9oYW5kbGVfYXQKKwkubG9uZyBfc3lzX2Nsb2NrX2FkanRpbWUKIAogCS5yZXB0IE5SX3N5c2NhbGxzLSguLV9zeXNfY2FsbF90YWJsZSkvNAogCS5sb25nIF9zeXNfbmlfc3lzY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUwppbmRleCA0MzkxNjIxLi41ODFlMmIwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUwpAQCAtMzEsNiArMzEsNyBAQAogRU5UUlkoX19zdGFydCkKIAkvKiBSMDogYXJndW1lbnQgb2YgY29tbWFuZCBsaW5lIHN0cmluZywgcGFzc2VkIGZyb20gdWJvb3QsIHNhdmUgaXQgKi8KIAlSNyA9IFIwOworCiAJLyogRW5hYmxlIEN5Y2xlIENvdW50ZXIgYW5kIE5lc3RpbmcgT2YgSW50ZXJydXB0cyAqLwogI2lmZGVmIENPTkZJR19CRklOX1NDUkFUQ0hfUkVHX0NZQ0xFUwogCVIwID0gU1lTQ0ZHX1NORU47CkBAIC0zOCw3NiArMzksNDkgQEAKIAlSMCA9IFNZU0NGR19TTkVOIHwgU1lTQ0ZHX0NDRU47CiAjZW5kaWYKIAlTWVNDRkcgPSBSMDsKLQlSMCA9IDA7CiAKLQkvKiBDbGVhciBPdXQgQWxsIHRoZSBkYXRhIGFuZCBwb2ludGVyIFJlZ2lzdGVycyAqLwotCVIxID0gUjA7Ci0JUjIgPSBSMDsKLQlSMyA9IFIwOwotCVI0ID0gUjA7Ci0JUjUgPSBSMDsKLQlSNiA9IFIwOworCS8qIE9wdGltaXphdGlvbiByZWdpc3RlciB0cmlja3M6IGtlZXAgYSBiYXNlIHZhbHVlIGluIHRoZQorCSAqIHJlc2VydmVkIFAgcmVnaXN0ZXJzIHNvIHdlIHVzZSB0aGUgbG9hZC9zdG9yZSB3aXRoIGFuCisJICogb2Zmc2V0IHN5bnRheC4gIFIwID0gW1A1ICsgPGNvbnN0YW50Pl07CisJICogICBQNSAtIGNvcmUgTU1SIGJhc2UKKwkgKiAgIFI2IC0gMAorCSAqLworCXI2ID0gMDsKKwlwNS5sID0gMDsKKwlwNS5oID0gaGkoQ09SRU1NUl9CQVNFKTsKIAotCVAwID0gUjA7Ci0JUDEgPSBSMDsKLQlQMiA9IFIwOwotCVAzID0gUjA7Ci0JUDQgPSBSMDsKLQlQNSA9IFIwOworCS8qIFplcm8gb3V0IHJlZ2lzdGVycyByZXF1aXJlZCBieSBCbGFja2ZpbiBBQkkgKi8KIAotCUxDMCA9IHIwOwotCUxDMSA9IHIwOwotCUwwID0gcjA7Ci0JTDEgPSByMDsKLQlMMiA9IHIwOwotCUwzID0gcjA7CisJLyogRGlzYWJsZSBjaXJjdWxhciBidWZmZXJzICovCisJTDAgPSByNjsKKwlMMSA9IHI2OworCUwyID0gcjY7CisJTDMgPSByNjsKIAotCS8qIENsZWFyIE91dCBBbGwgdGhlIERBRyBSZWdpc3RlcnMgKi8KLQlCMCA9IHIwOwotCUIxID0gcjA7Ci0JQjIgPSByMDsKLQlCMyA9IHIwOwotCi0JSTAgPSByMDsKLQlJMSA9IHIwOwotCUkyID0gcjA7Ci0JSTMgPSByMDsKLQotCU0wID0gcjA7Ci0JTTEgPSByMDsKLQlNMiA9IHIwOwotCU0zID0gcjA7CisJLyogRGlzYWJsZSBoYXJkd2FyZSBsb29wcyBpbiBjYXNlIHdlIHdlcmUgc3RhcnRlZCBieSAnZ28nICovCisJTEMwID0gcjY7CisJTEMxID0gcjY7CiAKIAkvKgogCSAqIENsZWFyIElURVNUX0NPTU1BTkQgYW5kIERURVNUX0NPTU1BTkQgcmVnaXN0ZXJzLAogCSAqIExlYXZpbmcgdGhlc2UgYXMgbm9uLXplcm8gY2FuIGNvbmZ1c2UgdGhlIGVtdWxhdG9yCiAJICovCi0JcDAuTCA9IExPKERURVNUX0NPTU1BTkQpOwotCXAwLkggPSBISShEVEVTVF9DT01NQU5EKTsKLQlbcDBdID0gUjA7Ci0JW3AwICsgKElURVNUX0NPTU1BTkQgLSBEVEVTVF9DT01NQU5EKV0gPSBSMDsKKwlbcDUgKyAoRFRFU1RfQ09NTUFORCAtIENPUkVNTVJfQkFTRSldID0gcjY7CisJW3A1ICsgKElURVNUX0NPTU1BTkQgLSBDT1JFTU1SX0JBU0UpXSA9IHI2OwogCUNTWU5DOwogCiAJdHJhY2VfYnVmZmVyX2luaXQocDAscjApOwotCVAwID0gUjE7Ci0JUjAgPSBSMTsKIAogCS8qIFR1cm4gb2ZmIHRoZSBpY2FjaGUgKi8KLQlwMC5sID0gTE8oSU1FTV9DT05UUk9MKTsKLQlwMC5oID0gSEkoSU1FTV9DT05UUk9MKTsKLQlSMSA9IFtwMF07Ci0JUjAgPSB+RU5JQ1BMQjsKLQlSMCA9IFIwICYgUjE7Ci0JW3AwXSA9IFIwOworCXIxID0gW3A1ICsgKElNRU1fQ09OVFJPTCAtIENPUkVNTVJfQkFTRSldOworCUJJVENMUiAocjEsIEVOSUNQTEJfUCk7CisJW3A1ICsgKElNRU1fQ09OVFJPTCAtIENPUkVNTVJfQkFTRSldID0gcjE7CiAJU1NZTkM7CiAKIAkvKiBUdXJuIG9mZiB0aGUgZGNhY2hlICovCi0JcDAubCA9IExPKERNRU1fQ09OVFJPTCk7Ci0JcDAuaCA9IEhJKERNRU1fQ09OVFJPTCk7Ci0JUjEgPSBbcDBdOwotCVIwID0gfkVORENQTEI7Ci0JUjAgPSBSMCAmIFIxOwotCVtwMF0gPSBSMDsKKwlyMSA9IFtwNSArIChETUVNX0NPTlRST0wgLSBDT1JFTU1SX0JBU0UpXTsKKwlCSVRDTFIgKHIxLCBFTkRDUExCX1ApOworCVtwNSArIChETUVNX0NPTlRST0wgLSBDT1JFTU1SX0JBU0UpXSA9IHIxOwogCVNTWU5DOwogCiAJLyogaW4gY2FzZSBvZiBkb3VibGUgZmF1bHRzLCBzYXZlIGEgZmV3IHRoaW5ncyAqLwpAQCAtMTIyLDI1ICs5NiwyNSBAQAogCSAqIGJlbG93CiAJICovCiAJR0VUX1BEQShwMCwgcjApOwotCXI2ID0gW3AwICsgUERBX0RGX1JFVFhdOworCXI1ID0gW3AwICsgUERBX0RGX1JFVFhdOwogCXAxLmwgPSBfaW5pdF9zYXZlZF9yZXR4OwogCXAxLmggPSBfaW5pdF9zYXZlZF9yZXR4OwotCVtwMV0gPSByNjsKKwlbcDFdID0gcjU7CiAKLQlyNiA9IFtwMCArIFBEQV9ERl9EQ1BMQl07CisJcjUgPSBbcDAgKyBQREFfREZfRENQTEJdOwogCXAxLmwgPSBfaW5pdF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyOwogCXAxLmggPSBfaW5pdF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyOwotCVtwMV0gPSByNjsKKwlbcDFdID0gcjU7CiAKLQlyNiA9IFtwMCArIFBEQV9ERl9JQ1BMQl07CisJcjUgPSBbcDAgKyBQREFfREZfSUNQTEJdOwogCXAxLmwgPSBfaW5pdF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOwogCXAxLmggPSBfaW5pdF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOwotCVtwMV0gPSByNjsKKwlbcDFdID0gcjU7CiAKLQlyNiA9IFtwMCArIFBEQV9ERl9TRVFTVEFUXTsKKwlyNSA9IFtwMCArIFBEQV9ERl9TRVFTVEFUXTsKIAlwMS5sID0gX2luaXRfc2F2ZWRfc2Vxc3RhdDsKIAlwMS5oID0gX2luaXRfc2F2ZWRfc2Vxc3RhdDsKLQlbcDFdID0gcjY7CisJW3AxXSA9IHI1OwogI2VuZGlmCiAKIAkvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXIgKi8KQEAgLTE1NSw3ICsxMjksNyBAQAogCXN0aSByMDsKICNlbmRpZgogCi0JcjAgPSAwICh4KTsKKwlyMCA9IHI2OwogCS8qIFplcm8gb3V0IGFsbCBvZiB0aGUgZnVuIGJzcyByZWdpb25zICovCiAjaWYgTDFfREFUQV9BX0xFTkdUSCA+IDAKIAlyMS5sID0gX19zYnNzX2wxOwpAQCAtMjEwLDExICsxODQsOSBAQAogCiAJLyogRVZUMTUgPSBfcmVhbF9zdGFydCAqLwogCi0JcDAubCA9IGxvKEVWVDE1KTsKLQlwMC5oID0gaGkoRVZUMTUpOwogCXAxLmwgPSBfcmVhbF9zdGFydDsKIAlwMS5oID0gX3JlYWxfc3RhcnQ7Ci0JW3AwXSA9IHAxOworCVtwNSArIChFVlQxNSAtIENPUkVNTVJfQkFTRSldID0gcDE7CiAJY3N5bmM7CiAKICNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwppbmRleCAyZGYzN2RiLi40NjljZTcyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKQEAgLTI3NCwxNiArMjc0LDE2IEBACiAgKiBsZXZlbCB0byBFVlQxNCB0byBwcmVwYXJlIHRoZSBjYWxsZXIgZm9yIGEgbm9ybWFsIGludGVycnVwdAogICogcmV0dXJuIHRocm91Z2ggUlRJLgogICoKLSAqIFdlIGN1cnJlbnRseSB1c2UgdGhpcyBmYWNpbGl0eSBpbiB0d28gb2NjYXNpb25zOgorICogV2UgY3VycmVudGx5IHVzZSB0aGlzIGZlYXR1cmUgaW4gdHdvIG9jY2FzaW9uczoKICAqCi0gKiAtIHRvIGJyYW5jaCB0byBfX2lwaXBlX2lycV90YWlsX2hvb2sgYXMgcmVxdWVzdGVkIGJ5IGEgaGlnaAorICogLSBiZWZvcmUgYnJhbmNoaW5nIHRvIF9faXBpcGVfaXJxX3RhaWxfaG9vayBhcyByZXF1ZXN0ZWQgYnkgYSBoaWdoCiAgKiAgIHByaW9yaXR5IGRvbWFpbiBhZnRlciB0aGUgcGlwZWxpbmUgZGVsaXZlcmVkIGFuIGludGVycnVwdCwKICAqICAgZS5nLiBzdWNoIGFzIFhlbm9tYWksIGluIG9yZGVyIHRvIHN0YXJ0IGl0cyByZXNjaGVkdWxpbmcKICAqICAgcHJvY2VkdXJlLCBzaW5jZSB3ZSBtYXkgbm90IHN3aXRjaCB0YXNrcyB3aGVuIElSUSBsZXZlbHMgYXJlCiAgKiAgIG5lc3RlZCBvbiB0aGUgQmxhY2tmaW4sIHNvIHdlIGhhdmUgdG8gZmFrZSBhbiBpbnRlcnJ1cHQgcmV0dXJuCiAgKiAgIHNvIHRoYXQgd2UgbWF5IHJlc2NoZWR1bGUgaW1tZWRpYXRlbHkuCiAgKgotICogLSB0byBicmFuY2ggdG8gc3luY19yb290X2lycXMsIGluIG9yZGVyIHRvIHBsYXkgYW55IGludGVycnVwdAorICogLSBiZWZvcmUgYnJhbmNoaW5nIHRvIF9faXBpcGVfc3luY19yb290KCksIGluIG9yZGVyIHRvIHBsYXkgYW55IGludGVycnVwdAogICogICBwZW5kaW5nIGZvciB0aGUgcm9vdCBkb21haW4gKGkuZS4gdGhlIExpbnV4IGtlcm5lbCkuIFRoaXMgbG93ZXJzCiAgKiAgIHRoZSBjb3JlIHByaW9yaXR5IGxldmVsIGVub3VnaCBzbyB0aGF0IExpbnV4IElSUSBoYW5kbGVycyBtYXkKICAqICAgbmV2ZXIgZGVsYXkgaW50ZXJydXB0cyBoYW5kbGVkIGJ5IGhpZ2ggcHJpb3JpdHkgZG9tYWluczsgd2UgZGVmZXIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKaW5kZXggYTYwNGYxOS4uNmNkNTIzOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpZmRlZiBDT05GSUdfSVBJUEUKICNpbmNsdWRlIDxsaW51eC9pcGlwZS5oPgogI2VuZGlmCkBAIC0xMjQsMjEgKzEyNSwyMSBAQAogICogVGhpcyBpcyBmb3IgY29yZSBpbnRlcm5hbCBJUlFzCiAgKi8KIAotc3RhdGljIHZvaWQgYmZpbl9hY2tfbm9vcCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYmZpbl9hY2tfbm9vcChzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyogRHVtbXkgZnVuY3Rpb24uICAqLwogfQogCi1zdGF0aWMgdm9pZCBiZmluX2NvcmVfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGJmaW5fY29yZV9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JYmZpbl9pcnFfZmxhZ3MgJj0gfigxIDw8IGlycSk7CisJYmZpbl9pcnFfZmxhZ3MgJj0gfigxIDw8IGQtPmlycSk7CiAJaWYgKCFoYXJkX2lycXNfZGlzYWJsZWQoKSkKIAkJaGFyZF9sb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fY29yZV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBiZmluX2NvcmVfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JYmZpbl9pcnFfZmxhZ3MgfD0gMSA8PCBpcnE7CisJYmZpbl9pcnFfZmxhZ3MgfD0gMSA8PCBkLT5pcnE7CiAJLyoKIAkgKiBJZiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLCBJTUFTSyBtdXN0IGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUKIAkgKiBhcyBiZmluX2lycV9mbGFncy4gIE1ha2Ugc3VyZSB0aGF0IGludmFyaWFudCBob2xkcy4gIElmIGludGVycnVwdHMKQEAgLTE3Niw2ICsxNzcsMTEgQEAKIAloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgYmZpbl9pbnRlcm5hbF9tYXNrX2lycV9jaGlwKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwliZmluX2ludGVybmFsX21hc2tfaXJxKGQtPmlycSk7Cit9CisKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdm9pZCBiZmluX2ludGVybmFsX3VubWFza19pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwKIAkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KQpAQCAtMjExLDE5ICsyMTcsMjQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIGJmaW5faW50ZXJuYWxfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYmZpbl9pbnRlcm5hbF91bm1hc2tfaXJxX2NoaXAoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0JYmZpbl9pbnRlcm5hbF91bm1hc2tfaXJxX2FmZmluaXR5KGlycSwgZGVzYy0+YWZmaW5pdHkpOworCWJmaW5faW50ZXJuYWxfdW5tYXNrX2lycV9hZmZpbml0eShkLT5pcnEsIGQtPmFmZmluaXR5KTsKIH0KIAotc3RhdGljIGludCBiZmluX2ludGVybmFsX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3N0YXRpYyBpbnQgYmZpbl9pbnRlcm5hbF9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBib29sIGZvcmNlKQogewotCWJmaW5faW50ZXJuYWxfbWFza19pcnEoaXJxKTsKLQliZmluX2ludGVybmFsX3VubWFza19pcnFfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwliZmluX2ludGVybmFsX21hc2tfaXJxKGQtPmlycSk7CisJYmZpbl9pbnRlcm5hbF91bm1hc2tfaXJxX2FmZmluaXR5KGQtPmlycSwgbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KKyNlbHNlCitzdGF0aWMgdm9pZCBiZmluX2ludGVybmFsX3VubWFza19pcnFfY2hpcChzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJYmZpbl9pbnRlcm5hbF91bm1hc2tfaXJxKGQtPmlycSk7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMjc5LDI4ICsyOTAsMzMgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IGJmaW5faW50ZXJuYWxfc2V0X3dha2VfY2hpcChzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwlyZXR1cm4gYmZpbl9pbnRlcm5hbF9zZXRfd2FrZShkLT5pcnEsIHN0YXRlKTsKK30KICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJmaW5fY29yZV9pcnFjaGlwID0gewogCS5uYW1lID0gIkNPUkUiLAotCS5hY2sgPSBiZmluX2Fja19ub29wLAotCS5tYXNrID0gYmZpbl9jb3JlX21hc2tfaXJxLAotCS51bm1hc2sgPSBiZmluX2NvcmVfdW5tYXNrX2lycSwKKwkuaXJxX2FjayA9IGJmaW5fYWNrX25vb3AsCisJLmlycV9tYXNrID0gYmZpbl9jb3JlX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gYmZpbl9jb3JlX3VubWFza19pcnEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJmaW5faW50ZXJuYWxfaXJxY2hpcCA9IHsKIAkubmFtZSA9ICJJTlROIiwKLQkuYWNrID0gYmZpbl9hY2tfbm9vcCwKLQkubWFzayA9IGJmaW5faW50ZXJuYWxfbWFza19pcnEsCi0JLnVubWFzayA9IGJmaW5faW50ZXJuYWxfdW5tYXNrX2lycSwKLQkubWFza19hY2sgPSBiZmluX2ludGVybmFsX21hc2tfaXJxLAotCS5kaXNhYmxlID0gYmZpbl9pbnRlcm5hbF9tYXNrX2lycSwKLQkuZW5hYmxlID0gYmZpbl9pbnRlcm5hbF91bm1hc2tfaXJxLAorCS5pcnFfYWNrID0gYmZpbl9hY2tfbm9vcCwKKwkuaXJxX21hc2sgPSBiZmluX2ludGVybmFsX21hc2tfaXJxX2NoaXAsCisJLmlycV91bm1hc2sgPSBiZmluX2ludGVybmFsX3VubWFza19pcnFfY2hpcCwKKwkuaXJxX21hc2tfYWNrID0gYmZpbl9pbnRlcm5hbF9tYXNrX2lycV9jaGlwLAorCS5pcnFfZGlzYWJsZSA9IGJmaW5faW50ZXJuYWxfbWFza19pcnFfY2hpcCwKKwkuaXJxX2VuYWJsZSA9IGJmaW5faW50ZXJuYWxfdW5tYXNrX2lycV9jaGlwLAogI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5ID0gYmZpbl9pbnRlcm5hbF9zZXRfYWZmaW5pdHksCisJLmlycV9zZXRfYWZmaW5pdHkgPSBiZmluX2ludGVybmFsX3NldF9hZmZpbml0eSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19QTQotCS5zZXRfd2FrZSA9IGJmaW5faW50ZXJuYWxfc2V0X3dha2UsCisJLmlycV9zZXRfd2FrZSA9IGJmaW5faW50ZXJuYWxfc2V0X3dha2VfY2hpcCwKICNlbmRpZgogfTsKIApAQCAtMzEyLDMzICszMjgsMzIgQEAKIAlfX2lwaXBlX2hhbmRsZV9pcnEoaXJxLCAmcmVncyk7CiAJaXBpcGVfdHJhY2VfaXJxX2V4aXQoaXJxKTsKICNlbHNlIC8qICFDT05GSUdfSVBJUEUgKi8KLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQlkZXNjLT5oYW5kbGVfaXJxKGlycSwgZGVzYyk7CisJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CiAjZW5kaWYgIC8qICFDT05GSUdfSVBJUEUgKi8KIH0KIAogI2lmZGVmIEJGNTM3X0dFTkVSSUNfRVJST1JfSU5UX0RFTVVYCiBzdGF0aWMgaW50IGVycm9yX2ludF9tYXNrOwogCi1zdGF0aWMgdm9pZCBiZmluX2dlbmVyaWNfZXJyb3JfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGJmaW5fZ2VuZXJpY19lcnJvcl9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JZXJyb3JfaW50X21hc2sgJj0gfigxTCA8PCAoaXJxIC0gSVJRX1BQSV9FUlJPUikpOworCWVycm9yX2ludF9tYXNrICY9IH4oMUwgPDwgKGQtPmlycSAtIElSUV9QUElfRVJST1IpKTsKIAlpZiAoIWVycm9yX2ludF9tYXNrKQogCQliZmluX2ludGVybmFsX21hc2tfaXJxKElSUV9HRU5FUklDX0VSUk9SKTsKIH0KIAotc3RhdGljIHZvaWQgYmZpbl9nZW5lcmljX2Vycm9yX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGJmaW5fZ2VuZXJpY19lcnJvcl91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAliZmluX2ludGVybmFsX3VubWFza19pcnEoSVJRX0dFTkVSSUNfRVJST1IpOwotCWVycm9yX2ludF9tYXNrIHw9IDFMIDw8IChpcnEgLSBJUlFfUFBJX0VSUk9SKTsKKwllcnJvcl9pbnRfbWFzayB8PSAxTCA8PCAoZC0+aXJxIC0gSVJRX1BQSV9FUlJPUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmZpbl9nZW5lcmljX2Vycm9yX2lycWNoaXAgPSB7CiAJLm5hbWUgPSAiRVJST1IiLAotCS5hY2sgPSBiZmluX2Fja19ub29wLAotCS5tYXNrX2FjayA9IGJmaW5fZ2VuZXJpY19lcnJvcl9tYXNrX2lycSwKLQkubWFzayA9IGJmaW5fZ2VuZXJpY19lcnJvcl9tYXNrX2lycSwKLQkudW5tYXNrID0gYmZpbl9nZW5lcmljX2Vycm9yX3VubWFza19pcnEsCisJLmlycV9hY2sgPSBiZmluX2Fja19ub29wLAorCS5pcnFfbWFza19hY2sgPSBiZmluX2dlbmVyaWNfZXJyb3JfbWFza19pcnEsCisJLmlycV9tYXNrID0gYmZpbl9nZW5lcmljX2Vycm9yX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gYmZpbl9nZW5lcmljX2Vycm9yX3VubWFza19pcnEsCiB9OwogCiBzdGF0aWMgdm9pZCBiZmluX2RlbXV4X2Vycm9yX2lycSh1bnNpZ25lZCBpbnQgaW50X2Vycl9pcnEsCkBAIC00NDgsOCArNDYzLDEwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBiZmluX21hY19zdGF0dXNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGJmaW5fbWFjX3N0YXR1c19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwogCW1hY19zdGF0X2ludF9tYXNrICY9IH4oMUwgPDwgKGlycSAtIElSUV9NQUNfUEhZSU5UKSk7CiAjaWZkZWYgQkY1MzdfR0VORVJJQ19FUlJPUl9JTlRfREVNVVgKIAlzd2l0Y2ggKGlycSkgewpAQCAtNDY2LDggKzQ4MywxMCBAQAogCWJmaW5fbWFjX3N0YXR1c19hY2tfaXJxKGlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fbWFjX3N0YXR1c191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBiZmluX21hY19zdGF0dXNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwogI2lmZGVmIEJGNTM3X0dFTkVSSUNfRVJST1JfSU5UX0RFTVVYCiAJc3dpdGNoIChpcnEpIHsKIAljYXNlIElSUV9NQUNfUEhZSU5UOgpAQCAtNDg0LDcgKzUwMyw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLWludCBiZmluX21hY19zdGF0dXNfc2V0X3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHN0YXRlKQoraW50IGJmaW5fbWFjX3N0YXR1c19zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKICNpZmRlZiBCRjUzN19HRU5FUklDX0VSUk9SX0lOVF9ERU1VWAogCXJldHVybiBiZmluX2ludGVybmFsX3NldF93YWtlKElSUV9HRU5FUklDX0VSUk9SLCBzdGF0ZSk7CkBAIC00OTYsMTIgKzUxNSwxMiBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJmaW5fbWFjX3N0YXR1c19pcnFjaGlwID0gewogCS5uYW1lID0gIk1BQ1NUIiwKLQkuYWNrID0gYmZpbl9hY2tfbm9vcCwKLQkubWFza19hY2sgPSBiZmluX21hY19zdGF0dXNfbWFza19pcnEsCi0JLm1hc2sgPSBiZmluX21hY19zdGF0dXNfbWFza19pcnEsCi0JLnVubWFzayA9IGJmaW5fbWFjX3N0YXR1c191bm1hc2tfaXJxLAorCS5pcnFfYWNrID0gYmZpbl9hY2tfbm9vcCwKKwkuaXJxX21hc2tfYWNrID0gYmZpbl9tYWNfc3RhdHVzX21hc2tfaXJxLAorCS5pcnFfbWFzayA9IGJmaW5fbWFjX3N0YXR1c19tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IGJmaW5fbWFjX3N0YXR1c191bm1hc2tfaXJxLAogI2lmZGVmIENPTkZJR19QTQotCS5zZXRfd2FrZSA9IGJmaW5fbWFjX3N0YXR1c19zZXRfd2FrZSwKKwkuaXJxX3NldF93YWtlID0gYmZpbl9tYWNfc3RhdHVzX3NldF93YWtlLAogI2VuZGlmCiB9OwogCkBAIC01MzgsMTMgKzU1Nyw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYmZpbl9zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlKQogewogI2lmZGVmIENPTkZJR19JUElQRQotCV9zZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLSNlbHNlCi0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JLyogTWF5IG5vdCBjYWxsIGdlbmVyaWMgc2V0X2lycV9oYW5kbGVyKCkgZHVlIHRvIHNwaW5sb2NrCi0JICAgcmVjdXJzaW9uLiAqLwotCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGU7CisJaGFuZGxlID0gaGFuZGxlX2xldmVsX2lycTsKICNlbmRpZgorCV9fc2V0X2lycV9oYW5kbGVyX3VubG9ja2VkKGlycSwgaGFuZGxlKTsKIH0KIAogc3RhdGljIERFQ0xBUkVfQklUTUFQKGdwaW9fZW5hYmxlZCwgTUFYX0JMQUNLRklOX0dQSU9TKTsKQEAgLTU1MiwxNyArNTY3LDE4IEBACiAKICNpZiAhZGVmaW5lZChDT05GSUdfQkY1NHgpCiAKLXN0YXRpYyB2b2lkIGJmaW5fZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBiZmluX2dwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyogQUZBSUsgYWNrX2lycSBpbiBjYXNlIG1hc2tfYWNrIGlzIHByb3ZpZGVkCiAJICogZ2V0J3Mgb25seSBjYWxsZWQgZm9yIGVkZ2Ugc2Vuc2UgaXJxcwogCSAqLwotCXNldF9ncGlvX2RhdGEoaXJxX3RvX2dwaW8oaXJxKSwgMCk7CisJc2V0X2dwaW9fZGF0YShpcnFfdG9fZ3BpbyhkLT5pcnEpLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgYmZpbl9ncGlvX21hc2tfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYmZpbl9ncGlvX21hc2tfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXUzMiBncGlvbnIgPSBpcnFfdG9fZ3BpbyhpcnEpOwogCiAJaWYgKGRlc2MtPmhhbmRsZV9pcnEgPT0gaGFuZGxlX2VkZ2VfaXJxKQpAQCAtNTcxLDM5ICs1ODcsNDAgQEAKIAlzZXRfZ3Bpb19tYXNrYShncGlvbnIsIDApOwogfQogCi1zdGF0aWMgdm9pZCBiZmluX2dwaW9fbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGJmaW5fZ3Bpb19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc2V0X2dwaW9fbWFza2EoaXJxX3RvX2dwaW8oaXJxKSwgMCk7CisJc2V0X2dwaW9fbWFza2EoaXJxX3RvX2dwaW8oZC0+aXJxKSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fZ3Bpb191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBiZmluX2dwaW9fdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc2V0X2dwaW9fbWFza2EoaXJxX3RvX2dwaW8oaXJxKSwgMSk7CisJc2V0X2dwaW9fbWFza2EoaXJxX3RvX2dwaW8oZC0+aXJxKSwgMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmZpbl9ncGlvX2lycV9zdGFydHVwKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdW5zaWduZWQgaW50IGJmaW5fZ3Bpb19pcnFfc3RhcnR1cChzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdTMyIGdwaW9uciA9IGlycV90b19ncGlvKGlycSk7CisJdTMyIGdwaW9uciA9IGlycV90b19ncGlvKGQtPmlycSk7CiAKIAlpZiAoX190ZXN0X2FuZF9zZXRfYml0KGdwaW9uciwgZ3Bpb19lbmFibGVkKSkKIAkJYmZpbl9ncGlvX2lycV9wcmVwYXJlKGdwaW9ucik7CiAKLQliZmluX2dwaW9fdW5tYXNrX2lycShpcnEpOworCWJmaW5fZ3Bpb191bm1hc2tfaXJxKGQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fZ3Bpb19pcnFfc2h1dGRvd24odW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGJmaW5fZ3Bpb19pcnFfc2h1dGRvd24oc3RydWN0IGlycV9kYXRhICpkKQogewotCXUzMiBncGlvbnIgPSBpcnFfdG9fZ3BpbyhpcnEpOworCXUzMiBncGlvbnIgPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwogCi0JYmZpbl9ncGlvX21hc2tfaXJxKGlycSk7CisJYmZpbl9ncGlvX21hc2tfaXJxKGQpOwogCV9fY2xlYXJfYml0KGdwaW9uciwgZ3Bpb19lbmFibGVkKTsKIAliZmluX2dwaW9faXJxX2ZyZWUoZ3Bpb25yKTsKIH0KIAotc3RhdGljIGludCBiZmluX2dwaW9faXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCitzdGF0aWMgaW50IGJmaW5fZ3Bpb19pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJaW50IHJldDsKIAljaGFyIGJ1ZlsxNl07CiAJdTMyIGdwaW9uciA9IGlycV90b19ncGlvKGlycSk7CkBAIC02NjQsOSArNjgxLDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotaW50IGJmaW5fZ3Bpb19zZXRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgc3RhdGUpCitpbnQgYmZpbl9ncGlvX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IHN0YXRlKQogewotCXJldHVybiBncGlvX3BtX3dha2V1cF9jdHJsKGlycV90b19ncGlvKGlycSksIHN0YXRlKTsKKwlyZXR1cm4gZ3Bpb19wbV93YWtldXBfY3RybChpcnFfdG9fZ3BpbyhkLT5pcnEpLCBzdGF0ZSk7CiB9CiAjZW5kaWYKIApAQCAtODE4LDEwICs4MzUsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBiZmluX2dwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JdTMyIHBpbnRfdmFsID0gaXJxMnBpbnRfbHV0W2lycSAtIFNZU19JUlFTXTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhkLT5pcnEpOworCXUzMiBwaW50X3ZhbCA9IGlycTJwaW50X2x1dFtkLT5pcnEgLSBTWVNfSVJRU107CiAJdTMyIHBpbnRiaXQgPSBQSU5UX0JJVChwaW50X3ZhbCk7CiAJdTMyIGJhbmsgPSBQSU5UXzJfQkFOSyhwaW50X3ZhbCk7CiAKQEAgLTgzNSwxMCArODUyLDEwIEBACiAKIH0KIAotc3RhdGljIHZvaWQgYmZpbl9ncGlvX21hc2tfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYmZpbl9ncGlvX21hc2tfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JdTMyIHBpbnRfdmFsID0gaXJxMnBpbnRfbHV0W2lycSAtIFNZU19JUlFTXTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhkLT5pcnEpOworCXUzMiBwaW50X3ZhbCA9IGlycTJwaW50X2x1dFtkLT5pcnEgLSBTWVNfSVJRU107CiAJdTMyIHBpbnRiaXQgPSBQSU5UX0JJVChwaW50X3ZhbCk7CiAJdTMyIGJhbmsgPSBQSU5UXzJfQkFOSyhwaW50X3ZhbCk7CiAKQEAgLTg1MywyNCArODcwLDI1IEBACiAJcGludFtiYW5rXS0+bWFza19jbGVhciA9IHBpbnRiaXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fZ3Bpb19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYmZpbl9ncGlvX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1MzIgcGludF92YWwgPSBpcnEycGludF9sdXRbaXJxIC0gU1lTX0lSUVNdOworCXUzMiBwaW50X3ZhbCA9IGlycTJwaW50X2x1dFtkLT5pcnEgLSBTWVNfSVJRU107CiAKIAlwaW50W1BJTlRfMl9CQU5LKHBpbnRfdmFsKV0tPm1hc2tfY2xlYXIgPSBQSU5UX0JJVChwaW50X3ZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fZ3Bpb191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBiZmluX2dwaW9fdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdTMyIHBpbnRfdmFsID0gaXJxMnBpbnRfbHV0W2lycSAtIFNZU19JUlFTXTsKKwl1MzIgcGludF92YWwgPSBpcnEycGludF9sdXRbZC0+aXJxIC0gU1lTX0lSUVNdOwogCXUzMiBwaW50Yml0ID0gUElOVF9CSVQocGludF92YWwpOwogCXUzMiBiYW5rID0gUElOVF8yX0JBTksocGludF92YWwpOwogCiAJcGludFtiYW5rXS0+bWFza19zZXQgPSBwaW50Yml0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGJmaW5fZ3Bpb19pcnFfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHVuc2lnbmVkIGludCBiZmluX2dwaW9faXJxX3N0YXJ0dXAoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJdTMyIGdwaW9uciA9IGlycV90b19ncGlvKGlycSk7CiAJdTMyIHBpbnRfdmFsID0gaXJxMnBpbnRfbHV0W2lycSAtIFNZU19JUlFTXTsKIApAQCAtODg0LDIyICs5MDIsMjMgQEAKIAlpZiAoX190ZXN0X2FuZF9zZXRfYml0KGdwaW9uciwgZ3Bpb19lbmFibGVkKSkKIAkJYmZpbl9ncGlvX2lycV9wcmVwYXJlKGdwaW9ucik7CiAKLQliZmluX2dwaW9fdW5tYXNrX2lycShpcnEpOworCWJmaW5fZ3Bpb191bm1hc2tfaXJxKGQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJmaW5fZ3Bpb19pcnFfc2h1dGRvd24odW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGJmaW5fZ3Bpb19pcnFfc2h1dGRvd24oc3RydWN0IGlycV9kYXRhICpkKQogewotCXUzMiBncGlvbnIgPSBpcnFfdG9fZ3BpbyhpcnEpOworCXUzMiBncGlvbnIgPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwogCi0JYmZpbl9ncGlvX21hc2tfaXJxKGlycSk7CisJYmZpbl9ncGlvX21hc2tfaXJxKGQpOwogCV9fY2xlYXJfYml0KGdwaW9uciwgZ3Bpb19lbmFibGVkKTsKIAliZmluX2dwaW9faXJxX2ZyZWUoZ3Bpb25yKTsKIH0KIAotc3RhdGljIGludCBiZmluX2dwaW9faXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCitzdGF0aWMgaW50IGJmaW5fZ3Bpb19pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJaW50IHJldDsKIAljaGFyIGJ1ZlsxNl07CiAJdTMyIGdwaW9uciA9IGlycV90b19ncGlvKGlycSk7CkBAIC05NjEsMTAgKzk4MCwxMCBAQAogdTMyIHBpbnRfc2F2ZWRfbWFza3NbTlJfUElOVF9TWVNfSVJRU107CiB1MzIgcGludF93YWtldXBfbWFza3NbTlJfUElOVF9TWVNfSVJRU107CiAKLWludCBiZmluX2dwaW9fc2V0X3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHN0YXRlKQoraW50IGJmaW5fZ3Bpb19zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKIAl1MzIgcGludF9pcnE7Ci0JdTMyIHBpbnRfdmFsID0gaXJxMnBpbnRfbHV0W2lycSAtIFNZU19JUlFTXTsKKwl1MzIgcGludF92YWwgPSBpcnEycGludF9sdXRbZC0+aXJxIC0gU1lTX0lSUVNdOwogCXUzMiBiYW5rID0gUElOVF8yX0JBTksocGludF92YWwpOwogCXUzMiBwaW50Yml0ID0gUElOVF9CSVQocGludF92YWwpOwogCkBAIC0xMDY2LDE3ICsxMDg1LDE3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmZpbl9ncGlvX2lycWNoaXAgPSB7CiAJLm5hbWUgPSAiR1BJTyIsCi0JLmFjayA9IGJmaW5fZ3Bpb19hY2tfaXJxLAotCS5tYXNrID0gYmZpbl9ncGlvX21hc2tfaXJxLAotCS5tYXNrX2FjayA9IGJmaW5fZ3Bpb19tYXNrX2Fja19pcnEsCi0JLnVubWFzayA9IGJmaW5fZ3Bpb191bm1hc2tfaXJxLAotCS5kaXNhYmxlID0gYmZpbl9ncGlvX21hc2tfaXJxLAotCS5lbmFibGUgPSBiZmluX2dwaW9fdW5tYXNrX2lycSwKLQkuc2V0X3R5cGUgPSBiZmluX2dwaW9faXJxX3R5cGUsCi0JLnN0YXJ0dXAgPSBiZmluX2dwaW9faXJxX3N0YXJ0dXAsCi0JLnNodXRkb3duID0gYmZpbl9ncGlvX2lycV9zaHV0ZG93biwKKwkuaXJxX2FjayA9IGJmaW5fZ3Bpb19hY2tfaXJxLAorCS5pcnFfbWFzayA9IGJmaW5fZ3Bpb19tYXNrX2lycSwKKwkuaXJxX21hc2tfYWNrID0gYmZpbl9ncGlvX21hc2tfYWNrX2lycSwKKwkuaXJxX3VubWFzayA9IGJmaW5fZ3Bpb191bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IGJmaW5fZ3Bpb19tYXNrX2lycSwKKwkuaXJxX2VuYWJsZSA9IGJmaW5fZ3Bpb191bm1hc2tfaXJxLAorCS5pcnFfc2V0X3R5cGUgPSBiZmluX2dwaW9faXJxX3R5cGUsCisJLmlycV9zdGFydHVwID0gYmZpbl9ncGlvX2lycV9zdGFydHVwLAorCS5pcnFfc2h1dGRvd24gPSBiZmluX2dwaW9faXJxX3NodXRkb3duLAogI2lmZGVmIENPTkZJR19QTQotCS5zZXRfd2FrZSA9IGJmaW5fZ3Bpb19zZXRfd2FrZSwKKwkuaXJxX3NldF93YWtlID0gYmZpbl9ncGlvX3NldF93YWtlLAogI2VuZGlmCiB9OwogCkBAIC0xMzczLDcgKzEzOTIsNyBAQAogCXN0cnVjdCBpcGlwZV9kb21haW4gKnRoaXNfZG9tYWluID0gX19pcGlwZV9jdXJyZW50X2RvbWFpbjsKIAlzdHJ1Y3QgaXZneCAqaXZnX3N0b3AgPSBpdmc3XzEzW3ZlYy1JVkc3XS5pc3RvcDsKIAlzdHJ1Y3QgaXZneCAqaXZnID0gaXZnN18xM1t2ZWMtSVZHN10uaWZpcnN0OwotCWludCBpcnEsIHM7CisJaW50IGlycSwgcyA9IDA7CiAKIAlpZiAobGlrZWx5KHZlYyA9PSBFVlRfSVZUTVJfUCkpCiAJCWlycSA9IElSUV9DT1JFVE1SOwpAQCAtMTQyMyw2ICsxNDQyLDIxIEBACiAJCQlfX3Jhd19nZXRfY3B1X3ZhcihfX2lwaXBlX3RpY2tfcmVncykuaXBlbmQgfD0gMHgxMDsKIAl9CiAKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgTGludXggaW50ZXJydXB0IGhhbmRsZXJzIHRvIHJ1biBhdCB0aGUKKwkgKiBjdXJyZW50IGNvcmUgcHJpb3JpdHkgbGV2ZWwgKGkuZS4gPCBFVlQxNSksIHNpbmNlIHRoaXMKKwkgKiBtaWdodCBkZWxheSBvdGhlciBpbnRlcnJ1cHRzIGhhbmRsZWQgYnkgYSBoaWdoIHByaW9yaXR5CisJICogZG9tYWluLiBIZXJlIGlzIHdoYXQgd2UgZG8gaW5zdGVhZDoKKwkgKgorCSAqIC0gd2UgcmFpc2UgdGhlIFNZTkNERUZFUiBiaXQgdG8gcHJldmVudAorCSAqIF9faXBpcGVfaGFuZGxlX2lycSgpIHRvIHN5bmMgdGhlIHBpcGVsaW5lIGZvciB0aGUgcm9vdAorCSAqIHN0YWdlIGZvciB0aGUgaW5jb21pbmcgaW50ZXJydXB0LiBVcG9uIHJldHVybiwgdGhhdCBJUlEgaXMKKwkgKiBwZW5kaW5nIGluIHRoZSBpbnRlcnJ1cHQgbG9nLgorCSAqCisJICogLSB3ZSByYWlzZSB0aGUgVElGX0lSUV9TWU5DIGJpdCBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLCBzbworCSAqIHRoYXQgX3NjaGVkdWxlX2FuZF9zaWduYWxfZnJvbV9pbnQgd2lsbCBldmVudHVhbGx5IHN5bmMgdGhlCisJICogcGlwZWxpbmUgZnJvbSBFVlQxNS4KKwkgKi8KIAlpZiAodGhpc19kb21haW4gPT0gaXBpcGVfcm9vdF9kb21haW4pIHsKIAkJcyA9IF9fdGVzdF9hbmRfc2V0X2JpdChJUElQRV9TWU5DREVGRVJfRkxBRywgJnAtPnN0YXR1cyk7CiAJCWJhcnJpZXIoKTsKQEAgLTE0MzIsNiArMTQ2NiwyNCBAQAogCV9faXBpcGVfaGFuZGxlX2lycShpcnEsIHJlZ3MpOwogCWlwaXBlX3RyYWNlX2lycV9leGl0KGlycSk7CiAKKwlpZiAodXNlcl9tb2RlKHJlZ3MpICYmCisJICAgICFpcGlwZV90ZXN0X2ZvcmVpZ25fc3RhY2soKSAmJgorCSAgICAoY3VycmVudC0+aXBpcGVfZmxhZ3MgJiBQRl9FVlRSRVQpICE9IDApIHsKKwkJLyoKKwkJICogVGVzdGluZyBmb3IgdXNlcl9yZWdzKCkgZG9lcyBOT1QgZnVsbHkgZWxpbWluYXRlCisJCSAqIGZvcmVpZ24gc3RhY2sgY29udGV4dHMsIGJlY2F1c2Ugb2YgdGhlIGZvcmdlZAorCQkgKiBpbnRlcnJ1cHQgcmV0dXJucyB3ZSBkbyB0aHJvdWdoCisJCSAqIF9faXBpcGVfY2FsbF9pcnF0YWlsLiBJbiB0aGF0IGNhc2UsIHdlIG1pZ2h0IGhhdmUKKwkJICogcHJlZW1wdGVkIGEgZm9yZWlnbiBzdGFjayBjb250ZXh0IGluIGEgaGlnaAorCQkgKiBwcmlvcml0eSBkb21haW4sIHdpdGggYSBzaW5nbGUgaW50ZXJydXB0IGxldmVsIG5vdworCQkgKiBwZW5kaW5nIGFmdGVyIHRoZSBpcnF0YWlsIHVud2luZGluZyBpcyBkb25lLiBJbgorCQkgKiB3aGljaCBjYXNlIHVzZXJfbW9kZSgpIGlzIG5vdyB0cnVlLCBhbmQgdGhlIGV2ZW50CisJCSAqIGdldHMgZGlzcGF0Y2hlZCBzcHVyaW91c2x5LgorCQkgKi8KKwkJY3VycmVudC0+aXBpcGVfZmxhZ3MgJj0gflBGX0VWVFJFVDsKKwkJX19pcGlwZV9kaXNwYXRjaF9ldmVudChJUElQRV9FVkVOVF9SRVRVUk4sIHJlZ3MpOworCX0KKwogCWlmICh0aGlzX2RvbWFpbiA9PSBpcGlwZV9yb290X2RvbWFpbikgewogCQlzZXRfdGhyZWFkX2ZsYWcoVElGX0lSUV9TWU5DKTsKIAkJaWYgKCFzKSB7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYwppbmRleCA5ZjI1MTQwLi42ZTE3YTI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKQEAgLTQwLDYgKzQwLDEwIEBACiAgKi8KIHN0cnVjdCBjb3JlbG9ja19zbG90IGNvcmVsb2NrIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygiLmwyLmJzcyIpKSk7CiAKKyNpZmRlZiBDT05GSUdfSUNBQ0hFX0ZMVVNIX0wxCit1bnNpZ25lZCBsb25nIGJsYWNrZmluX2lmbHVzaF9sMV9lbnRyeVtOUl9DUFVTXTsKKyNlbmRpZgorCiB2b2lkIF9fY3B1aW5pdGRhdGEgKmluaXRfcmV0eF9jb3JlYiwgKmluaXRfc2F2ZWRfcmV0eF9jb3JlYiwKIAkqaW5pdF9zYXZlZF9zZXFzdGF0X2NvcmViLCAqaW5pdF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyX2NvcmViLAogCSppbml0X3NhdmVkX2RjcGxiX2ZhdWx0X2FkZHJfY29yZWI7CkBAIC0xMDUsMTAgKzEwOSwxMCBAQAogCXN0cnVjdCBibGFja2Zpbl9mbHVzaF9kYXRhICpmZGF0YSA9IGluZm87CiAKIAkvKiBJbnZhbGlkYXRlIHRoZSBtZW1vcnkgaG9sZGluZyB0aGUgYm91bmRzIG9mIHRoZSBmbHVzaGVkIHJlZ2lvbi4gKi8KLQlibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZSgodW5zaWduZWQgbG9uZylmZGF0YSwKLQkJCQkJICh1bnNpZ25lZCBsb25nKWZkYXRhICsgc2l6ZW9mKCpmZGF0YSkpOworCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWZkYXRhLAorCQkodW5zaWduZWQgbG9uZylmZGF0YSArIHNpemVvZigqZmRhdGEpKTsKIAotCWJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZShmZGF0YS0+c3RhcnQsIGZkYXRhLT5lbmQpOworCWZsdXNoX2ljYWNoZV9yYW5nZShmZGF0YS0+c3RhcnQsIGZkYXRhLT5lbmQpOwogfQogCiBzdGF0aWMgdm9pZCBpcGlfY2FsbF9mdW5jdGlvbih1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaXBpX21lc3NhZ2UgKm1zZykKQEAgLTI0NCwxMiArMjQ4LDEzIEBACiB7CiAJY3B1bWFza190IGNhbGxtYXA7CiAKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAljYWxsbWFwID0gY3B1X29ubGluZV9tYXA7CiAJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY2FsbG1hcCk7Ci0JaWYgKGNwdXNfZW1wdHkoY2FsbG1hcCkpCi0JCXJldHVybiAwOworCWlmICghY3B1c19lbXB0eShjYWxsbWFwKSkKKwkJc21wX3NlbmRfbWVzc2FnZShjYWxsbWFwLCBCRklOX0lQSV9DQUxMX0ZVTkMsIGZ1bmMsIGluZm8sIHdhaXQpOwogCi0Jc21wX3NlbmRfbWVzc2FnZShjYWxsbWFwLCBCRklOX0lQSV9DQUxMX0ZVTkMsIGZ1bmMsIGluZm8sIHdhaXQpOworCXByZWVtcHRfZW5hYmxlKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NiwxMiArMjkxLDEzIEBACiB7CiAJY3B1bWFza190IGNhbGxtYXA7CiAKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAljYWxsbWFwID0gY3B1X29ubGluZV9tYXA7CiAJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY2FsbG1hcCk7Ci0JaWYgKGNwdXNfZW1wdHkoY2FsbG1hcCkpCi0JCXJldHVybjsKKwlpZiAoIWNwdXNfZW1wdHkoY2FsbG1hcCkpCisJCXNtcF9zZW5kX21lc3NhZ2UoY2FsbG1hcCwgQkZJTl9JUElfQ1BVX1NUT1AsIE5VTEwsIE5VTEwsIDApOwogCi0Jc21wX3NlbmRfbWVzc2FnZShjYWxsbWFwLCBCRklOX0lQSV9DUFVfU1RPUCwgTlVMTCwgTlVMTCwgMCk7CisJcHJlZW1wdF9lbmFibGUoKTsKIAogCXJldHVybjsKIH0KQEAgLTM2MSw4ICszNjcsNiBAQAogCSAqLwogCWluaXRfZXhjZXB0aW9uX3ZlY3RvcnMoKTsKIAotCWJmaW5fc2V0dXBfY2FjaGVzKGNwdSk7Ci0KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCiAJLyogQXR0YWNoIHRoZSBuZXcgaWRsZSB0YXNrIHRvIHRoZSBnbG9iYWwgbW0uICovCkBAIC0zODEsNiArMzg1LDggQEAKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAorCWJmaW5fc2V0dXBfY2FjaGVzKGNwdSk7CisKIAkvKgogCSAqIENhbGlicmF0ZSBsb29wcyBwZXIgamlmZnkgdmFsdWUuCiAJICogSVJRcyBuZWVkIHRvIGJlIGVuYWJsZWQgaGVyZSAtIEQtY2FjaGUgY2FuIGJlIGludmFsaWRhdGVkCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvS2NvbmZpZyBiL2FyY2gvY3Jpcy9LY29uZmlnCmluZGV4IDBhN2E0YzEuLjRkYjViNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9LY29uZmlnCkBAIC01Niw2ICs1Niw3IEBACiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUwogCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX0RFUFJFQ0FURUQKKwlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwogCiBjb25maWcgSFoKIAlpbnQKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCmluZGV4IDczMjhhN2MuLjkwN2NmYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIAkvKiBJbml0aWFsaXplIElSUSBoYW5kbGVyIGRlc2NyaXB0b3JzLiAqLwogCWZvcihpID0gMjsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2Rlc2NfYW5kX2hhbmRsZXIoaSwgJmNyaXN2MTBfaXJxX3R5cGUsCisJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpLCAmY3Jpc3YxMF9pcnFfdHlwZSwKIAkJCQkJIGhhbmRsZV9zaW1wbGVfaXJxKTsKIAkJc2V0X2ludF92ZWN0b3IoaSwgaW50ZXJydXB0W2ldKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvbW0vaW5pdC5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL21tL2luaXQuYwppbmRleCBiYWE3NDZjLi5lN2Y4MDY2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvbW0vaW5pdC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9tbS9pbml0LmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogfQogCiAvKiBEdWUgdG8gYSBidWcgaW4gRXRyYXgxMDAoTFgpIGFsbCB2ZXJzaW9ucywgcmVjZWl2aW5nIERNQSBidWZmZXJzCi0gKiB3aWxsIG9jY2F0aW9uYWxseSBjb3JydXB0IGNlcnRhaW4gQ1BVIHdyaXRlcyBpZiB0aGUgRE1BIGJ1ZmZlcnMKKyAqIHdpbGwgb2NjYXNpb25hbGx5IGNvcnJ1cHQgY2VydGFpbiBDUFUgd3JpdGVzIGlmIHRoZSBETUEgYnVmZmVycwogICogaGFwcGVuIHRvIGJlIGhvdCBpbiB0aGUgY2FjaGUuCiAgKiAKICAqIEFzIGEgd29ya2Fyb3VuZCwgd2UgaGF2ZSB0byBmbHVzaCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGNhY2hlCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYwppbmRleCAwYWQ5ZGI1Li44MDIzMTc2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKQEAgLTQ1MSwxNiArNDUxLDE2IEBACiAKIAkvKiBQb2ludCBhbGwgSVJRJ3MgdG8gYmFkIGhhbmRsZXJzLiAqLwogCWZvciAoaSA9IEZJUlNUX0lSUSwgaiA9IDA7IGogPCBOUl9JUlFTOyBpKyssIGorKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaiwgJmNyaXN2MzJfaXJxX3R5cGUsCisJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihqLCAmY3Jpc3YzMl9pcnFfdHlwZSwKIAkJCQkJIGhhbmRsZV9zaW1wbGVfaXJxKTsKIAkJc2V0X2V4Y2VwdGlvbl92ZWN0b3IoaSwgaW50ZXJydXB0W2pdKTsKIAl9CiAKLSAgICAgICAgLyogTWFyayBUaW1lciBhbmQgSVBJIElSUXMgYXMgQ1BVIGxvY2FsICovCisJLyogTWFyayBUaW1lciBhbmQgSVBJIElSUXMgYXMgQ1BVIGxvY2FsICovCiAJaXJxX2FsbG9jYXRpb25zW1RJTUVSMF9JTlRSX1ZFQ1QgLSBGSVJTVF9JUlFdLmNwdSA9IENQVV9GSVhFRDsKLQlpcnFfZGVzY1tUSU1FUjBfSU5UUl9WRUNUXS5zdGF0dXMgfD0gSVJRX1BFUl9DUFU7CisJaXJxX3NldF9zdGF0dXNfZmxhZ3MoVElNRVIwX0lOVFJfVkVDVCwgSVJRX1BFUl9DUFUpOwogCWlycV9hbGxvY2F0aW9uc1tJUElfSU5UUl9WRUNUIC0gRklSU1RfSVJRXS5jcHUgPSBDUFVfRklYRUQ7Ci0JaXJxX2Rlc2NbSVBJX0lOVFJfVkVDVF0uc3RhdHVzIHw9IElSUV9QRVJfQ1BVOworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKElQSV9JTlRSX1ZFQ1QsIElSUV9QRVJfQ1BVKTsKIAogCXNldF9leGNlcHRpb25fdmVjdG9yKDB4MDAsIG5taV9pbnRlcnJ1cHQpOwogCXNldF9leGNlcHRpb25fdmVjdG9yKDB4MzAsIG11bHRpcGxlX2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggOWU2OWNmYi4uMzEwZTBkZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTU0LDEyICsxNTQsMTEgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+CiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xlLmg+CiAKICNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsLG4sYSkgICB0ZXN0X2FuZF9zZXRfYml0KG4sYSkKICNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGwsbixhKSB0ZXN0X2FuZF9jbGVhcl9iaXQobixhKQogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDkxNzc2MDYuLjI5Yjc0YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC02OCw3ICs2OCw3IEBACiAjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQogCiAvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLwotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spICgoc3RydWN0IHRocmVhZF9pbmZvICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwxKSkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrLCBub2RlKSAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsMSkpCiAjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpICh0aSksIDEpCiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IDU3OTAyNjIuLjU1MWExMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC0xNiwxNSArMTYsNiBAQAogCiAjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogRG1hIGFkZHJlc3NlcyBhcmUgMzItYml0cyB3aWRlLCBqdXN0IGxpa2Ugb3VyIG90aGVyIGFkZHJlc3Nlcy4gICovCi0gCi10eXBlZGVmIHUzMiBkbWFfYWRkcl90OwotdHlwZWRlZiB1MzIgZG1hNjRfYWRkcl90OwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKaW5kZXggYzM0Njk1Mi4uNzg4ZWIyMiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCkBAIC0zNyw0NSArMzcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLWludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQotewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsaik7Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotCX0KLQotCWlmIChpIDwgTlJfSVJRUykgewotCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwotCQlpZiAoIWFjdGlvbikKLQkJCWdvdG8gc2tpcDsKLQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7Ci0jZWxzZQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKLSNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmlycV9kYXRhLmNoaXAtPm5hbWUpOwotCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKLQotCQlmb3IgKGFjdGlvbj1hY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQotCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0KLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci1za2lwOgotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCiAvKiBjYWxsZWQgYnkgdGhlIGFzc2VtYmxlciBJUlEgZW50cnkgZnVuY3Rpb25zIGRlZmluZWQgaW4gaXJxLmgKICAqIHRvIGRpc3BhdGNoIHRoZSBpbnRlcnJ1cHRzIHRvIHJlZ2lzdGVyZWQgaGFuZGxlcnMKICAqIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVwb24gZW50cnkgLSBkZXBlbmRpbmcgb24gaWYgdGhlCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9LY29uZmlnIGIvYXJjaC9mcnYvS2NvbmZpZwppbmRleCA3NDc0OTlhLi5mNjAzN2IyIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9LY29uZmlnCisrKyBiL2FyY2gvZnJ2L0tjb25maWcKQEAgLTIyLDYgKzIyLDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19GSU5EX0JJVF9MRQorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggNTBhZTkxYi4uYTFkMDBiMCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTQwMSwxMyArNDAxLDExIEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogCiAjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jayxucixhZGRyKQl0ZXN0X2FuZF9zZXRfYml0ICAoKG5yKSBeIDB4MTgsIChhZGRyKSkKICNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssbnIsYWRkcikJdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiAweDE4LCAoYWRkcikpCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXgtbGUuaD4KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMzc0NGYyZS4uNGI3ODlhYiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTEzNyw3ICsxMzcsNyBAQAogI2RlZmluZQlLU1RLX0VTUCh0c2spCSgodHNrKS0+dGhyZWFkLmZyYW1lMC0+c3ApCiAKIC8qIEFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgYmFzaWMgdGFzayByZXNvdXJjZXMuICovCi1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICphbGxvY190YXNrX3N0cnVjdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFsbG9jX3Rhc2tfc3RydWN0X25vZGUoaW50IG5vZGUpOwogZXh0ZXJuIHZvaWQgZnJlZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiAjZGVmaW5lIGNwdV9yZWxheCgpICAgIGJhcnJpZXIoKQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMTFmMzNlYS4uODU4MmU5YyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04NCwxNiArODQsMTEgQEAKIAogLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAotCSh7CQkJCQkJCVwKLQkJc3RydWN0IHRocmVhZF9pbmZvICpyZXQ7CQkJXAotCQkJCQkJCQlcCi0JCXJldCA9IGt6YWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpOwkJXAotCQkJCQkJCQlcCi0JCXJldDsJCQkJCQlcCi0JfSkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm9fbm9kZSh0c2ssIG5vZGUpCQkJXAorCQlremFsbG9jX25vZGUoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwsIG5vZGUpCiAjZWxzZQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCWttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvX25vZGUodHNrKQkJCQlcCisJCWttYWxsb2Nfbm9kZShUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCwgbm9kZSkKICNlbmRpZgogCiAjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8oaW5mbykJa2ZyZWUoaW5mbykKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IDYxM2JmMWUuLmFhM2U3ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtMjcsMTQgKzI3LDYgQEAKIAogI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qIERtYSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZS4gICovCi0KLXR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZWZhZDEyMC4uOWQzNTk3NSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00NCw5ICs0NCwxMCBAQAogdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCk7CiBFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CiAKLXN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Qodm9pZCkKK3N0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShpbnQgbm9kZSkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBrbWFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBrbWFsbG9jX25vZGUoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwsIG5vZGUpOworCiAJaWYgKHApCiAJCWF0b21pY19zZXQoKGF0b21pY190ICopKHArMSksIDEpOwogCXJldHVybiBwOwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnIGIvYXJjaC9oODMwMC9LY29uZmlnCmluZGV4IDZkZjY5MmQuLjk2MjRkYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvS2NvbmZpZworKysgYi9hcmNoL2g4MzAwL0tjb25maWcKQEAgLTQ1LDYgKzQ1LDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19GSU5EX0JJVF9MRQorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9oODMwMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggZDYxODllMC4uNjc0NWNiMSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9oODMwMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAjCiAKIHRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogaGVhZC5vIG1pc2MubyBwaWdneS5vCi1FWFRSQV9BRkxBR1MJOj0gLXRyYWRpdGlvbmFsCithc2ZsYWdzLXkJOj0gLXRyYWRpdGlvbmFsCiAKIE9CSkVDVFMgPSAkKG9iaikvaGVhZC5vICQob2JqKS9taXNjLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggY2I5ZGRmNS4uZTg1NmMxYiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0yMDAsOSArMjAwLDggQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLWF0b21pYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggMTI4NzUxOS4uYmIyYzkxYSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtMjIsMTAgKzIyLDYgQEAKIAogI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCiAKLS8qIERtYSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZS4gICovCi0KLXR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Ci0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA5ZGEzZGY2Li5iNzZmN2UwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC00NTYsMTIgKzQ1NiwxMSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogCiAjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobCxuLGEpCXRlc3RfYW5kX3NldF9iaXQobixhKQogI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobCxuLGEpCXRlc3RfYW5kX2NsZWFyX2JpdChuLGEpCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZXJmbW9uLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGVyZm1vbi5oCmluZGV4IDdmMzMzM2QuLmQ1NTExODMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZXJmbW9uLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmZtb24uaApAQCAtNyw3ICs3LDcgQEAKICNkZWZpbmUgX0FTTV9JQTY0X1BFUkZNT05fSAogCiAvKgotICogcGVyZm1vbiBjb21hbW5kcyBzdXBwb3J0ZWQgb24gYWxsIENQVSBtb2RlbHMKKyAqIHBlcmZtb24gY29tbWFuZHMgc3VwcG9ydGVkIG9uIGFsbCBDUFUgbW9kZWxzCiAgKi8KICNkZWZpbmUgUEZNX1dSSVRFX1BNQ1MJCTB4MDEKICNkZWZpbmUgUEZNX1dSSVRFX1BNRFMJCTB4MDIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggYjZhNWJhMi4uZmYwY2M4NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTU5LDExICs1OSwxMiBAQAogI2lmbmRlZiBBU01fT0ZGU0VUU19DCiAvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLwogI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgKChjaGFyICopIGN1cnJlbnQgKyBJQTY0X1RBU0tfU0laRSkpCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgKChjaGFyICopICh0c2spICsgSUE2NF9UQVNLX1NJWkUpKQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mb19ub2RlKHRzaywgbm9kZSkJXAorCQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKGNoYXIgKikgKHRzaykgKyBJQTY0X1RBU0tfU0laRSkpCiAjZGVmaW5lIHRhc2tfdGhyZWFkX2luZm8odHNrKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKGNoYXIgKikgKHRzaykgKyBJQTY0X1RBU0tfU0laRSkpCiAjZWxzZQogI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgMCkKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAwKQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mb19ub2RlKHRzaywgbm9kZSkJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgMCkKICNkZWZpbmUgdGFza190aHJlYWRfaW5mbyh0c2spCSgoc3RydWN0IHRocmVhZF9pbmZvICopIDApCiAjZW5kaWYKICNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkJLyogbm90aGluZyAqLwpAQCAtODQsNyArODUsMTQgQEAKICNkZWZpbmUgZW5kX29mX3N0YWNrKHApICh1bnNpZ25lZCBsb25nICopKCh2b2lkICopKHApICsgSUE2NF9SQlNfT0ZGU0VUKQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1RBU0tfU1RSVUNUX0FMTE9DQVRPUgotI2RlZmluZSBhbGxvY190YXNrX3N0cnVjdCgpCSgoc3RydWN0IHRhc2tfc3RydWN0ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgS0VSTkVMX1NUQUNLX1NJWkVfT1JERVIpKQorI2RlZmluZSBhbGxvY190YXNrX3N0cnVjdF9ub2RlKG5vZGUpCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwJXAorCQkJCQkgICAgIEtFUk5FTF9TVEFDS19TSVpFX09SREVSKTsJCVwKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJldCA9IHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMOwkJXAorCQkJCQkJCQkJCVwKKwlyZXQ7CQkJCQkJCQkJXAorfSkKICNkZWZpbmUgZnJlZV90YXNrX3N0cnVjdCh0c2spCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpICh0c2spLCBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUikKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IDkzNzczZmQuLjgyYjM5MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC00MCw5ICs0MCw2IEBACiAJdW5zaWduZWQgbG9uZyBncDsKIH07CiAKLS8qIERNQSBhZGRyZXNzZXMgYXJlIDY0LWJpdHMgd2lkZSwgaW4gZ2VuZXJhbC4gICovCi10eXBlZGVmIHU2NCBkbWFfYWRkcl90OwotCiAjIGVuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggMjNlOTEyOS4uYzhjOTI5OCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaF9kdW1wLmMKQEAgLTEzLDkgKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLS8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwotdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7Ci0KIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwppbmRleCBhMGYwMDE5Li42ZmMwM2FmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggOTExY2Y5Ny4uNWUyYzcyNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtNDc5LDI1ICs0NzksNyBAQAogfQogZWFybHlfcGFyYW0oIm5vbWNhIiwgc2V0dXBfbm9tY2EpOwogCi0vKgotICogTm90ZTogZWxmY29yZWhkcl9hZGRyIGlzIG5vdCBqdXN0IGxpbWl0ZWQgdG8gdm1jb3JlLiBJdCBpcyBhbHNvIHVzZWQgYnkKLSAqIGlzX2tkdW1wX2tlcm5lbCgpIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYm9vdGluZyBhZnRlciBhIHBhbmljLiBIZW5jZQotICogaWZkZWYgaXQgdW5kZXIgQ09ORklHX0NSQVNIX0RVTVAgYW5kIG5vdCBDT05GSUdfUFJPQ19WTUNPUkUuCi0gKi8KICNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAotLyogZWxmY29yZWhkcj0gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBlbGYgY29yZSBoZWFkZXIKLSAqIHN0b3JlZCBieSB0aGUgY3Jhc2hlZCBrZXJuZWwuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2VsZmNvcmVoZHIoY2hhciAqYXJnKQotewotCWlmICghYXJnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotICAgICAgICBlbGZjb3JlaGRyX2FkZHIgPSBtZW1wYXJzZShhcmcsICZhcmcpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImVsZmNvcmVoZHIiLCBwYXJzZV9lbGZjb3JlaGRyKTsKLQogaW50IF9faW5pdCByZXNlcnZlX2VsZmNvcmVoZHIodTY0ICpzdGFydCwgdTY0ICplbmQpCiB7CiAJdTY0IGxlbmd0aDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vTWFrZWZpbGUgYi9hcmNoL2lhNjQva3ZtL01ha2VmaWxlCmluZGV4IDEwODliM2UuLmRiM2Q3YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2t2bS9NYWtlZmlsZQpAQCAtNDUsOCArNDUsOCBAQAogIyBNYWtlZmlsZSBmb3IgS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSBtb2R1bGUKICMKIAotRVhUUkFfQ0ZMQUdTICs9IC1JdmlydC9rdm0gLUlhcmNoL2lhNjQva3ZtLwotRVhUUkFfQUZMQUdTICs9IC1JdmlydC9rdm0gLUlhcmNoL2lhNjQva3ZtLworY2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL2lhNjQva3ZtLworYXNmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL2lhNjQva3ZtLwogCiBjb21tb24tb2JqcyA9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubyBpb2FwaWMubyBcCiAJCWNvYWxlc2NlZF9tbWlvLm8gaXJxX2NvbW0ubyBhc3NpZ25lZC1kZXYubykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQvc24va2VybmVsL01ha2VmaWxlCmluZGV4IDA1OTEwMzguLmQyN2RmMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKICMgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDEtMjAwNiwyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAjCiAKLUVYVFJBX0NGTEFHUyArPSAtSWFyY2gvaWE2NC9zbi9pbmNsdWRlCitjY2ZsYWdzLXkgOj0gLUlhcmNoL2lhNjQvc24vaW5jbHVkZQogCiBvYmoteQkJCQkrPSBzZXR1cC5vIGJ0ZS5vIGJ0ZV9lcnJvci5vIGlycS5vIG1jYS5vIGlkbGUubyBcCiAJCQkJICAgaHViZXJyb3IubyBpb19hY3BpX2luaXQubyBpb19jb21tb24ubyBcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9NYWtlZmlsZSBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL01ha2VmaWxlCmluZGV4IDA4ZTY1NjUuLjNkMDkxMDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQAogIyBzbjIgc3BlY2lmaWMga2VybmVsIGZpbGVzCiAjCiAKLUVYVFJBX0NGTEFHUyArPSAtSWFyY2gvaWE2NC9zbi9pbmNsdWRlCitjY2ZsYWdzLXkgOj0gLUlhcmNoL2lhNjQvc24vaW5jbHVkZQogCiBvYmoteSArPSBjYWNoZS5vIGlvLm8gcHRjX2RlYWRsb2NrLm8gc24yX3NtcC5vIHNuX3Byb2NfZnMubyBcCiAJIHByb21pbmZvX3Byb2MubyB0aW1lci5vIHRpbWVyX2ludGVycnVwdC5vIHNuX2h3cGVyZi5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL01ha2VmaWxlIGIvYXJjaC9pYTY0L3NuL3BjaS9NYWtlZmlsZQppbmRleCBhZDRlZjM0Li5kZjJhOTAxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvTWFrZWZpbGUKQEAgLTcsNiArNyw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgc24gcGNpIGdlbmVyYWwgcm91dGluZXMuCiAKLUVYVFJBX0NGTEFHUyArPSAtSWFyY2gvaWE2NC9zbi9pbmNsdWRlCitjY2ZsYWdzLXkgOj0gLUlhcmNoL2lhNjQvc24vaW5jbHVkZQogCiBvYmoteSA6PSBwY2lfZG1hLm8gdGlvY2FfcHJvdmlkZXIubyB0aW9jZV9wcm92aWRlci5vIHBjaWJyLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9NYWtlZmlsZSBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvTWFrZWZpbGUKaW5kZXggMDExOTJkMy4uMzk2YmNhZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIHNuMiBpbyByb3V0aW5lcy4KIAotRVhUUkFfQ0ZMQUdTICs9IC1JYXJjaC9pYTY0L3NuL2luY2x1ZGUKK2NjZmxhZ3MteSA6PSAtSWFyY2gvaWE2NC9zbi9pbmNsdWRlCiAKIG9iai15CQkJCSs9ICBwY2licl9kbWEubyBwY2licl9yZWcubyBcCiAJCQkJICAgIHBjaWJyX2F0ZS5vIHBjaWJyX3Byb3ZpZGVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC91di9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQvdXYva2VybmVsL01ha2VmaWxlCmluZGV4IDhkOTJiNDYuLjEyNGU0NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC91di9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L3V2L2tlcm5lbC9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAjCiAKLUVYVFJBX0NGTEFHUyArPSAtSWFyY2gvaWE2NC9zbi9pbmNsdWRlCitjY2ZsYWdzLXkgOj0gLUlhcmNoL2lhNjQvc24vaW5jbHVkZQogCiBvYmoteQkJCQkrPSBzZXR1cC5vCiBvYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSAgICAgICs9IG1hY2h2ZWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCBlZjRjMWU0Li42MmFmZTIzIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtMjYwLDYgKzI2MCwxMCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfRklORF9CSVRfTEUKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggYWFkZGYwZC4uNjMwMGYyMiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMjY2LDkgKzI2Niw4IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xlLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNzFmYWZmNS4uMDIyN2RiYSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTk2LDE2ICs5NiwxMSBAQAogCiAvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLwogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCQkJCQlcCi0JKHsJCQkJCQkJXAotCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQlcCi0JIAkJCQkJCQlcCi0JIAlyZXQgPSBremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKTsJCVwKLQkJCQkJCQkJXAotCSAJcmV0OwkJCQkJCVwKLQkgfSkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm9fbm9kZSh0c2ssIG5vZGUpCQkJXAorCQlremFsbG9jX25vZGUoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwsIG5vZGUpCiAjZWxzZQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvX25vZGUodHNrLCBub2RlKQkJCVwKKwkJa21hbGxvY19ub2RlKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMLCBub2RlKQogI2VuZGlmCiAKICNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyhpbmZvKSBrZnJlZShpbmZvKQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vdHlwZXMuaAppbmRleCBiYzlmN2ZmLi5iZDAwMzU1IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtMTYsMTUgKzE2LDYgQEAKIAogI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qIERNQSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZS4gICovCi0KLXR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Ci10eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fTTMyUl9UWVBFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzX21tLmgKaW5kZXggYjRlY2RhYS4uOWQ2OWY2ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2JpdG9wc19tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9iaXRvcHNfbW0uaApAQCAtMzI1LDU4ICszMjUsNDUgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+CiAKLS8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtICovCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgbGl0dGxlIGVuZGlhbiBiaXRtYXAuICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfYml0X2xlKGludCBuciwgdm9pZCAqYWRkcikKIHsKLQljb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOwotCWludCByZXM7Ci0JdW5zaWduZWQgc2hvcnQgbnVtOwotCi0JaWYgKCFzaXplKQotCQlyZXR1cm4gMDsKLQotCXNpemUgPSAoc2l6ZSA+PiA0KSArICgoc2l6ZSAmIDE1KSA+IDApOwotCXdoaWxlICgqcCsrID09IDB4ZmZmZikKLQl7Ci0JCWlmICgtLXNpemUgPT0gMCkKLQkJCXJldHVybiAocCAtIGFkZHIpIDw8IDQ7Ci0JfQotCi0JbnVtID0gfiotLXA7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmZmbyAlMXsjMTYsIzE2fSwlMCIKLQkJCSAgICAgIDogIj1kIiAocmVzKSA6ICJkIiAobnVtICYgLW51bSkpOwotCXJldHVybiAoKHAgLSBhZGRyKSA8PCA0KSArIChyZXMgXiAzMSk7CisJX19zZXRfYml0KG5yIF4gMjQsIGFkZHIpOwogfQogCi0jZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCV9fdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gMTYsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpCQkJX19zZXRfYml0KChucikgXiAxNiwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCi0jZGVmaW5lIG1pbml4X3Rlc3RfYW5kX2NsZWFyX2JpdChuciwgYWRkcikJX190ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDE2LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKLQotc3RhdGljIGlubGluZSBpbnQgbWluaXhfdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2lkICp2YWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCiB7Ci0JY29uc3QgdW5zaWduZWQgc2hvcnQgKnAgPSB2YWRkcjsKLQlyZXR1cm4gKHBbbnIgPj4gNF0gJiAoMVUgPDwgKG5yICYgMTUpKSkgIT0gMDsKKwlfX2NsZWFyX2JpdChuciBeIDI0LCBhZGRyKTsKIH0KIAotLyogQml0bWFwIGZ1bmN0aW9ucyBmb3IgdGhlIGV4dDIgZmlsZXN5c3RlbS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfc2V0X2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIF9fdGVzdF9hbmRfc2V0X2JpdChuciBeIDI0LCBhZGRyKTsKK30KIAotI2RlZmluZSBleHQyX3NldF9iaXQobnIsIGFkZHIpCQkJX190ZXN0X2FuZF9zZXRfYml0KChucikgXiAyNCwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCi0jZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCXRlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDI0LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKLSNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQobnIsIGFkZHIpCQlfX3Rlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMjQsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMjQsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotI2RlZmluZSBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdChhZGRyLCBzaXplLCBvZmZzZXQpIFwKLQlnZW5lcmljX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHNpemUsIG9mZnNldCkKLSNkZWZpbmUgZXh0Ml9maW5kX25leHRfYml0KGFkZHIsIHNpemUsIG9mZnNldCkgXAotCWdlbmVyaWNfZmluZF9uZXh0X2xlX2JpdCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHNpemUsIG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KG5yIF4gMjQsIGFkZHIpOworfQogCi1zdGF0aWMgaW5saW5lIGludCBleHQyX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9pZCAqdmFkZHIpCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIF9fdGVzdF9hbmRfY2xlYXJfYml0KG5yIF4gMjQsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCXJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQobnIgXiAyNCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYml0X2xlKGludCBuciwgY29uc3Qgdm9pZCAqdmFkZHIpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHZhZGRyOwogCXJldHVybiAocFtuciA+PiAzXSAmICgxVSA8PCAobnIgJiA3KSkpICE9IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfZmlyc3RfemVyb19iaXRfbGUoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOwogCWludCByZXM7CkBAIC0zOTMsMzMgKzM4MCwzNiBAQAogCiAJLS1wOwogCWZvciAocmVzID0gMDsgcmVzIDwgMzI7IHJlcysrKQotCQlpZiAoIWV4dDJfdGVzdF9iaXQgKHJlcywgcCkpCisJCWlmICghdGVzdF9iaXRfbGUocmVzLCBwKSkKIAkJCWJyZWFrOwogCXJldHVybiAocCAtIGFkZHIpICogMzIgKyByZXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZW5lcmljX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF96ZXJvX2JpdF9sZShjb25zdCB2b2lkICphZGRyLAogCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgKG9mZnNldCA+PiA1KTsKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gYWRkcjsKIAlpbnQgYml0ID0gb2Zmc2V0ICYgMzFVTCwgcmVzOwogCiAJaWYgKG9mZnNldCA+PSBzaXplKQogCQlyZXR1cm4gc2l6ZTsKIAorCXAgKz0gb2Zmc2V0ID4+IDU7CisKIAlpZiAoYml0KSB7CisJCW9mZnNldCAtPSBiaXQ7CiAJCS8qIExvb2sgZm9yIHplcm8gaW4gZmlyc3QgbG9uZ3dvcmQgKi8KIAkJZm9yIChyZXMgPSBiaXQ7IHJlcyA8IDMyOyByZXMrKykKLQkJCWlmICghZXh0Ml90ZXN0X2JpdCAocmVzLCBwKSkKLQkJCQlyZXR1cm4gKHAgLSBhZGRyKSAqIDMyICsgcmVzOworCQkJaWYgKCF0ZXN0X2JpdF9sZShyZXMsIHApKQorCQkJCXJldHVybiBvZmZzZXQgKyByZXM7CiAJCXArKzsKKwkJb2Zmc2V0ICs9IDMyOwogCX0KIAkvKiBObyB6ZXJvIHlldCwgc2VhcmNoIHJlbWFpbmluZyBmdWxsIGJ5dGVzIGZvciBhIHplcm8gKi8KLQlyZXMgPSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQgKHAsIHNpemUgLSAzMiAqIChwIC0gYWRkcikpOwotCXJldHVybiAocCAtIGFkZHIpICogMzIgKyByZXM7CisJcmV0dXJuIG9mZnNldCArIGZpbmRfZmlyc3RfemVyb19iaXRfbGUocCwgc2l6ZSAtIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGV4dDJfZmluZF9maXJzdF9iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCitzdGF0aWMgaW5saW5lIGludCBmaW5kX2ZpcnN0X2JpdF9sZShjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKIHsKIAljb25zdCB1bnNpZ25lZCBsb25nICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7CiAJaW50IHJlczsKQEAgLTQzNSwzMiArNDI1LDQyIEBACiAKIAktLXA7CiAJZm9yIChyZXMgPSAwOyByZXMgPCAzMjsgcmVzKyspCi0JCWlmIChleHQyX3Rlc3RfYml0KHJlcywgcCkpCisJCWlmICh0ZXN0X2JpdF9sZShyZXMsIHApKQogCQkJYnJlYWs7CiAJcmV0dXJuIChwIC0gYWRkcikgKiAzMiArIHJlczsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdlbmVyaWNfZmluZF9uZXh0X2xlX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF9iaXRfbGUoY29uc3Qgdm9pZCAqYWRkciwKIAkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQljb25zdCB1bnNpZ25lZCBsb25nICpwID0gYWRkciArIChvZmZzZXQgPj4gNSk7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IGFkZHI7CiAJaW50IGJpdCA9IG9mZnNldCAmIDMxVUwsIHJlczsKIAogCWlmIChvZmZzZXQgPj0gc2l6ZSkKIAkJcmV0dXJuIHNpemU7CiAKKwlwICs9IG9mZnNldCA+PiA1OworCiAJaWYgKGJpdCkgeworCQlvZmZzZXQgLT0gYml0OwogCQkvKiBMb29rIGZvciBvbmUgaW4gZmlyc3QgbG9uZ3dvcmQgKi8KIAkJZm9yIChyZXMgPSBiaXQ7IHJlcyA8IDMyOyByZXMrKykKLQkJCWlmIChleHQyX3Rlc3RfYml0KHJlcywgcCkpCi0JCQkJcmV0dXJuIChwIC0gYWRkcikgKiAzMiArIHJlczsKKwkJCWlmICh0ZXN0X2JpdF9sZShyZXMsIHApKQorCQkJCXJldHVybiBvZmZzZXQgKyByZXM7CiAJCXArKzsKKwkJb2Zmc2V0ICs9IDMyOwogCX0KIAkvKiBObyBzZXQgYml0IHlldCwgc2VhcmNoIHJlbWFpbmluZyBmdWxsIGJ5dGVzIGZvciBhIHNldCBiaXQgKi8KLQlyZXMgPSBleHQyX2ZpbmRfZmlyc3RfYml0KHAsIHNpemUgLSAzMiAqIChwIC0gYWRkcikpOwotCXJldHVybiAocCAtIGFkZHIpICogMzIgKyByZXM7CisJcmV0dXJuIG9mZnNldCArIGZpbmRfZmlyc3RfYml0X2xlKHAsIHNpemUgLSBvZmZzZXQpOwogfQogCisvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgZXh0MiBmaWxlc3lzdGVtLiAqLworCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCVwKKwl0ZXN0X2FuZF9zZXRfYml0X2xlKG5yLCBhZGRyKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCVwKKwl0ZXN0X2FuZF9jbGVhcl9iaXRfbGUobnIsIGFkZHIpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTTY4S19CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2JpdG9wc19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2JpdG9wc19uby5oCmluZGV4IDlkM2NiZTUuLjdkMzc3OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9iaXRvcHNfbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzX25vLmgKQEAgLTE5Niw3ICsxOTYsMTkgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBleHQyX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKKyNkZWZpbmUgQklUT1BfTEVfU1dJWlpMRQkoKEJJVFNfUEVSX0xPTkctMSkgJiB+MHg3KQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfYml0X2xlKGludCBuciwgdm9pZCAqYWRkcikKK3sKKwlfX3NldF9iaXQobnIgXiBCSVRPUF9MRV9TV0laWkxFLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2xlYXJfYml0X2xlKGludCBuciwgdm9pZCAqYWRkcikKK3sKKwlfX2NsZWFyX2JpdChuciBeIEJJVE9QX0xFX1NXSVpaTEUsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX3NldF9iaXRfbGUoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewogCWNoYXIgcmV0dmFsOwogCkBAIC0yMTUsNyArMjI3LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgZXh0Ml9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0X2xlKGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKIHsKIAljaGFyIHJldHZhbDsKIApAQCAtMjM4LDcgKzI1MCw3IEBACiAJKHsJCQkJCQlcCiAJCWludCByZXQ7CQkJCVwKIAkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKLQkJcmV0ID0gZXh0Ml9zZXRfYml0KChuciksIChhZGRyKSk7CVwKKwkJcmV0ID0gX190ZXN0X2FuZF9zZXRfYml0X2xlKChuciksIChhZGRyKSk7CVwKIAkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAogCQlyZXQ7CQkJCQlcCiAJfSkKQEAgLTI0NywxMiArMjU5LDEyIEBACiAJKHsJCQkJCQlcCiAJCWludCByZXQ7CQkJCVwKIAkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKLQkJcmV0ID0gZXh0Ml9jbGVhcl9iaXQoKG5yKSwgKGFkZHIpKTsJXAorCQlyZXQgPSBfX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZSgobnIpLCAoYWRkcikpOwlcCiAJCXNwaW5fdW5sb2NrKGxvY2spOwkJCVwKIAkJcmV0OwkJCQkJXAogCX0pCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBleHQyX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2JpdF9sZShpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHIpCiB7CiAJY2hhciByZXR2YWw7CiAKQEAgLTI3MSwxMCArMjgzLDEwIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAotICAgICAgICBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdF9sZShhZGRyLCBzaXplKQlcCisJZmluZF9uZXh0X3plcm9fYml0X2xlKChhZGRyKSwgKHNpemUpLCAwKQogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X3plcm9fYml0X2xlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CiAJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKQEAgLTMyNCwxMCArMzM2LDYgQEAKIAlyZXR1cm4gcmVzdWx0ICsgZmZ6KF9fc3dhYjMyKHRtcCkpOwogfQogCi0jZGVmaW5lIGV4dDJfZmluZF9uZXh0X2JpdChhZGRyLCBzaXplLCBvZmYpIFwKLQlnZW5lcmljX2ZpbmRfbmV4dF9sZV9iaXQoKHVuc2lnbmVkIGxvbmcgKikoYWRkciksIChzaXplKSwgKG9mZikpCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+Ci0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IDY0NDFjYjUuLmIxN2ZkMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC0yMywxNSArMjMsNiBAQAogCiAjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogRE1BIGFkZHJlc3NlcyBhcmUgYWx3YXlzIDMyLWJpdHMgd2lkZSAqLwotCi10eXBlZGVmIHUzMiBkbWFfYWRkcl90OwotdHlwZWRlZiB1MzIgZG1hNjRfYWRkcl90OwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTTY4S19UWVBFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCmluZGV4IDkyMmM0MTkuLjVmMGNmMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCkBAIC0zNyw2ICszNyw5IEBACiBjb25maWcgR0VORVJJQ19GSU5EX05FWFRfQklUCiAJZGVmX2Jvb2wgeQogCitjb25maWcgR0VORVJJQ19GSU5EX0JJVF9MRQorCWRlZl9ib29sIHkKKwogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCA1OWNjN2JjLi5mY2VlZDRlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIENGTEFHU19SRU1PVkVfY2FjaGUubyA9IC1wZwogZW5kaWYKIAotRVhUUkFfQ0ZMQUdTICs9IC1EQ1BVX01BSk9SPSQoQ1BVX01BSk9SKSAtRENQVV9NSU5PUj0kKENQVV9NSU5PUikgXAorY2NmbGFncy15IDo9IC1EQ1BVX01BSk9SPSQoQ1BVX01BSk9SKSAtRENQVV9NSU5PUj0kKENQVV9NSU5PUikgXAogCQktRENQVV9SRVY9JChDUFVfUkVWKQogCiBvYmoteSArPSBjYWNoZS5vIGNwdWluZm8ubyBjcHVpbmZvLXB2ci1mdWxsLm8gY3B1aW5mby1zdGF0aWMubyBtYi5vIHB2ci5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGQ4ODk4MzUuLjk5MDVlMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC03NzcsNiArNzc3LDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19GSU5EX0JJVF9MRQorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTIzNDAsNiArMjM0NCwxNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZyIKIAorY29uZmlnIFJBUElESU8KKwlib29sICJSYXBpZElPIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgZHJpdmVycyBhbmQKKwkgIGluZnJhc3RydWN0dXJlIGNvZGUgdG8gc3VwcG9ydCBSYXBpZElPIGludGVyY29ubmVjdCBkZXZpY2VzLgorCitzb3VyY2UgImRyaXZlcnMvcmFwaWRpby9LY29uZmlnIgorCiBlbmRtZW51CiAKIG1lbnUgIkV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzIgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDdjMTEwMmUuLmFjMWQ1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTI4NiwxMSArMjg2LDExIEBACiBhcmNocHJlcGFyZToKIGlmZGVmIENPTkZJR19NSVBTMzJfTjMyCiAJQGVjaG8gJyAgQ2hlY2tpbmcgbWlzc2luZy1zeXNjYWxscyBmb3IgTjMyJwotCSQoUSkkKE1BS0UpICQoYnVpbGQpPS4gbWlzc2luZy1zeXNjYWxscyBFWFRSQV9DRkxBR1M9Ii1tYWJpPW4zMiIKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0uIG1pc3Npbmctc3lzY2FsbHMgY2NmbGFncy15PSItbWFiaT1uMzIiCiBlbmRpZgogaWZkZWYgQ09ORklHX01JUFMzMl9PMzIKIAlAZWNobyAnICBDaGVja2luZyBtaXNzaW5nLXN5c2NhbGxzIGZvciBPMzInCi0JJChRKSQoTUFLRSkgJChidWlsZCk9LiBtaXNzaW5nLXN5c2NhbGxzIEVYVFJBX0NGTEFHUz0iLW1hYmk9MzIiCisJJChRKSQoTUFLRSkgJChidWlsZCk9LiBtaXNzaW5nLXN5c2NhbGxzIGNjZmxhZ3MteT0iLW1hYmk9MzIiCiBlbmRpZgogCiBpbnN0YWxsOgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL01ha2VmaWxlCmluZGV4IGU1Y2M4NmQuLjlmNjRmYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACiBvYmotJChDT05GSUdfQk9BUkRfQkNNOTYzWFgpCQkrPSBib2FyZF9iY205NjN4eC5vCiAKLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCitjY2ZsYWdzLXkgOj0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Z3L2FyYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9mdy9hcmMvTWFrZWZpbGUKaW5kZXggZTBhYWFkNC4uNTMxNGIzNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Z3L2FyYy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvZncvYXJjL01ha2VmaWxlCkBAIC05LDQgKzksNCBAQAogbGliLSQoQ09ORklHX0FSQ19DT05TT0xFKQkrPSBhcmNfY29uLm8KIGxpYi0kKENPTkZJR19BUkNfUFJPTUxJQikJKz0gcHJvbWxpYi5vCiAKLUVYVFJBX0NGTEFHUwkJCSs9IC1XZXJyb3IKK2NjZmxhZ3MteQkJCTo9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA1MGI0ZWYyLi4yZTFhZDRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC02NzYsOSArNjc2LDggQEAKICNpbmNsdWRlIDxhc20vYXJjaF9od2VpZ2h0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2NvbnN0X2h3ZWlnaHQuaD4KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBkMzA5NTU2Li5kNzExNjBkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODgsOSArODgsMTEgQEAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSBremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mb19ub2RlKHRzaywgbm9kZSkgXAorCQlremFsbG9jX25vZGUoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwsIG5vZGUpCiAjZWxzZQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvX25vZGUodHNrLCBub2RlKSBcCisJCWttYWxsb2Nfbm9kZShUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCwgbm9kZSkKICNlbmRpZgogCiAjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8oaW5mbykga2ZyZWUoaW5mbykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggNTQ0YTI4NS4uNTMzODEyYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTMzLDE0ICszMyw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2lmIChkZWZpbmVkKENPTkZJR19ISUdITUVNKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpKSBcCi0gICAgfHwgZGVmaW5lZChDT05GSUdfNjRCSVQpCi10eXBlZGVmIHU2NCBkbWFfYWRkcl90OwotI2Vsc2UKLXR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Ci0jZW5kaWYKLXR5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKLQogLyoKICAqIERvbid0IHVzZSBwaHlzX3QuICBZb3UndmUgYmVlbiB3YXJuZWQuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvano0NzQwL01ha2VmaWxlCmluZGV4IGE2MDRlYWUuLmE5ZGZmMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9NYWtlZmlsZQpAQCAtMTcsNCArMTcsNCBAQAogCiBvYmotJChDT05GSUdfUE0pICs9IHBtLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IgLVdhbGwKK2NjZmxhZ3MteSA6PSAtV2Vycm9yIC1XYWxsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvTWFrZWZpbGUgYi9hcmNoL21pcHMvb3Byb2ZpbGUvTWFrZWZpbGUKaW5kZXggMDJjYzY1ZS4uNGI5ZDcwNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLUVYVFJBX0NGTEFHUyA6PSAtV2Vycm9yCitjY2ZsYWdzLXkgOj0gLVdlcnJvcgogCiBvYmotJChDT05GSUdfT1BST0ZJTEUpICs9IG9wcm9maWxlLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQppbmRleCBiMTZmOTVjLi4wMmY1ZmI5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQpAQCAtNiw0ICs2LDQgQEAKIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCiAKLUVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCitjY2ZsYWdzLXkgOj0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG93ZXJ0di9NYWtlZmlsZQppbmRleCBiYWY2ZTkwLi4zNDhkMmU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9NYWtlZmlsZQpAQCAtMjgsNCArMjgsNCBAQAogCiBvYmotJChDT05GSUdfVVNCKSArPSBwb3dlcnR2LXVzYi5vCiAKLUVYVFJBX0NGTEFHUyArPSAtV2FsbAorY2NmbGFncy15IDo9IC1XYWxsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL01ha2VmaWxlIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9NYWtlZmlsZQppbmRleCBmMGU5NWRjLi5kODEwYTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvTWFrZWZpbGUKQEAgLTIwLDQgKzIwLDQgQEAKIAlhc2ljX2RldmljZXMubyBhc2ljX2ludC5vIGlycV9hc2ljLm8gcHJlYWxsb2MtY2FsbGlvcGUubyBcCiAJcHJlYWxsb2MtY3JvbnVzLm8gcHJlYWxsb2MtY3JvbnVzbGl0ZS5vIHByZWFsbG9jLWdhaWEubyBwcmVhbGxvYy16ZXVzLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1XYWxsIC1XZXJyb3IKK2NjZmxhZ3MteSA6PSAtV2FsbCAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9wY2kvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG93ZXJ0di9wY2kvTWFrZWZpbGUKaW5kZXggZjVjNjI0Ni4uNTc4MzIwMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3BjaS9NYWtlZmlsZQpAQCAtMTgsNCArMTgsNCBAQAogCiBvYmotJChDT05GSUdfUENJKQkrPSBmaXh1cC1wb3dlcnR2Lm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1XYWxsIC1XZXJyb3IKK2NjZmxhZ3MteSA6PSAtV2FsbCAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvS2NvbmZpZyBiL2FyY2gvbW4xMDMwMC9LY29uZmlnCmluZGV4IDI0M2JmYTIuLjEwOTcxYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9LY29uZmlnCisrKyBiL2FyY2gvbW4xMDMwMC9LY29uZmlnCkBAIC0xLDcgKzEsOCBAQAogY29uZmlnIE1OMTAzMDAKIAlkZWZfYm9vbCB5CiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRUworCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECiAKIGNvbmZpZyBBTTMzXzIKIAlkZWZfYm9vbCBuCkBAIC01MywyMSArNTQsNiBAQAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxECi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwotCi1jb25maWcgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKLQlib29sCi0KLWNvbmZpZyBDRVZUX01OMTAzMDAKLSAgICAgICBkZWZfYm9vbCB5Ci0gICAgICAgZGVwZW5kcyBvbiBHRU5FUklDX0NMT0NLRVZFTlRTCi0KLWNvbmZpZyBDU1JDX01OMTAzMDAKLSAgICAgICBkZWZfYm9vbCB5Ci0gICAgICAgZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUKLQogY29uZmlnIEdFTkVSSUNfQlVHCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggM2I4YTg2ODEuLjA5Mzk0NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTIzMyw4ICsyMzMsNyBAQAogI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpIFwKIAl0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSwgKGFkZHIpKQogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC1sZS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW50Y3RsLXJlZ3MuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9pbnRjdGwtcmVncy5oCmluZGV4IDU4NWI3MDguLmQ2NWJiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9pbnRjdGwtcmVncy5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9pbnRjdGwtcmVncy5oCkBAIC02MCwxMSArNjAsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHZvaWQgc2V0X2ludHJfbGV2ZWwoaW50IGlycSwgdTE2IGxldmVsKTsKLWV4dGVybiB2b2lkIG1uMTAzMDBfaW50Y19zZXRfbGV2ZWwodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGxldmVsKTsKLWV4dGVybiB2b2lkIG1uMTAzMDBfaW50Y19jbGVhcih1bnNpZ25lZCBpbnQgaXJxKTsKLWV4dGVybiB2b2lkIG1uMTAzMDBfaW50Y19zZXQodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gdm9pZCBtbjEwMzAwX2ludGNfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpOwotZXh0ZXJuIHZvaWQgbW4xMDMwMF9pbnRjX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdm9pZCBtbjEwMzAwX3NldF9sYXRlYWNrX2lycV90eXBlKGludCBpcnEpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggYWEwN2E0YS4uOGQ1M2YwOSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTEyNCw5ICsxMjQsMTEgQEAKIAogLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSBremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mb19ub2RlKHRzaywgbm9kZSkJCQlcCisJCWt6YWxsb2Nfbm9kZShUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCwgbm9kZSkKICNlbHNlCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm9fbm9kZSh0c2ssIG5vZGUpCQkJXAorCQlrbWFsbG9jX25vZGUoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwsIG5vZGUpCiAjZW5kaWYKIAogI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKQlrZnJlZSgodGkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdHlwZXMuaAppbmRleCA3YjlmMDEwLi5jMTgzM2ViIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtMjYsMTMgKzI2LDYgQEAKIAogI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qIERtYSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZS4gICovCi10eXBlZGVmIHUzMiBkbWFfYWRkcl90OwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21uMTAzMDAva2VybmVsL01ha2VmaWxlCmluZGV4IDhmNWYxZTguLmEwNmEyZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9NYWtlZmlsZQpAQCAtOCw3ICs4LDggQEAKIAogb2JqLXkgICA6PSBwcm9jZXNzLm8gc2lnbmFsLm8gZW50cnkubyB0cmFwcy5vIGlycS5vIFwKIAkgICBwdHJhY2UubyBzZXR1cC5vIHRpbWUubyBzeXNfbW4xMDMwMC5vIGlvLm8ga3RocmVhZC5vIFwKLQkgICBzd2l0Y2hfdG8ubyBtbjEwMzAwX2tzeW1zLm8ga2VybmVsX2V4ZWN2ZS5vICQoZnB1LW9iai15KQorCSAgIHN3aXRjaF90by5vIG1uMTAzMDBfa3N5bXMubyBrZXJuZWxfZXhlY3ZlLm8gJChmcHUtb2JqLXkpIFwKKwkgICBjc3JjLW1uMTAzMDAubyBjZXZ0LW1uMTAzMDAubwogCiBvYmotJChDT05GSUdfU01QKSArPSBzbXAubyBzbXAtbG93Lm8KIApAQCAtMjgsNSArMjksMyBAQAogb2JqLSQoQ09ORklHX1BST0ZJTEUpICs9IHByb2ZpbGUubyBwcm9maWxlLWxvdy5vCiBvYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8KIG9iai0kKENPTkZJR19LUFJPQkVTKSArPSBrcHJvYmVzLm8KLW9iai0kKENPTkZJR19DU1JDX01OMTAzMDApICs9IGNzcmMtbW4xMDMwMC5vCi1vYmotJChDT05GSUdfQ0VWVF9NTjEwMzAwKSArPSBjZXZ0LW1uMTAzMDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9jZXZ0LW1uMTAzMDAuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvY2V2dC1tbjEwMzAwLmMKaW5kZXggZDRjYjUzNS4uNjljYWUwMiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9jZXZ0LW1uMTAzMDAuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL2NldnQtbW4xMDMwMC5jCkBAIC04OSw5ICs4OSwxMCBAQAogCWNkLT5uYW1lCQk9ICJUaW1lc3RhbXAiOwogCWNkLT5mZWF0dXJlcwkJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOwogCi0JLyogQ2FsY3VsYXRlIHRoZSBtaW4gLyBtYXggZGVsdGEgKi8KLQljbG9ja2V2ZW50X3NldF9jbG9jayhjZCwgTU4xMDMwMF9KQ0NMSyk7CisJLyogQ2FsY3VsYXRlIHNoaWZ0L211bHQuIFdlIHdhbnQgdG8gc3Bhd24gYXQgbGVhc3QgMSBzZWNvbmQgKi8KKwljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoY2QsIE1OMTAzMDBfSkNDTEssIDEpOwogCisJLyogQ2FsY3VsYXRlIHRoZSBtaW4gLyBtYXggZGVsdGEgKi8KIAljZC0+bWF4X2RlbHRhX25zCT0gY2xvY2tldmVudF9kZWx0YTJucyhUTUpDQlJfTUFYLCBjZCk7CiAJY2QtPm1pbl9kZWx0YV9ucwk9IGNsb2NrZXZlbnRfZGVsdGEybnMoMTAwLCBjZCk7CiAKQEAgLTExMCw5ICsxMTEsOSBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUKQogCS8qIHNldHVwIHRpbWVyIGlycSBhZmZpbml0eSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhpcyBjcHUgKi8KIAl7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQkJZGVzYyA9IGlycV90b19kZXNjKGNkLT5pcnEpOwotCQljcHVtYXNrX2NvcHkoZGVzYy0+YWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7CisJCXN0cnVjdCBpcnFfZGF0YSAqZGF0YTsKKwkJZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEoY2QtPmlycSk7CisJCWNwdW1hc2tfY29weShkYXRhLT5hZmZpbml0eSwgY3B1bWFza19vZihjcHUpKTsKIAkJaWFjdC0+ZmxhZ3MgfD0gSVJRRl9OT0JBTEFOQ0lORzsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvY3NyYy1tbjEwMzAwLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL2NzcmMtbW4xMDMwMC5jCmluZGV4IGJhMmYwYzQuLjQ1NjQ0Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvY3NyYy1tbjEwMzAwLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9jc3JjLW1uMTAzMDAuYwpAQCAtMjksNyArMjksNiBAQAogaW50IF9faW5pdCBpbml0X2Nsb2Nrc291cmNlKHZvaWQpCiB7CiAJc3RhcnR1cF90aW1lc3RhbXBfY291bnRlcigpOwotCWNsb2Nrc291cmNlX3NldF9jbG9jaygmY2xvY2tzb3VyY2VfbW4xMDMwMCwgTU4xMDMwMF9UU0NDTEspOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9tbjEwMzAwKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfbW4xMDMwMCwgTU4xMDMwMF9UU0NDTEspOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9pbnRlcm5hbC5oIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9pbnRlcm5hbC5oCmluZGV4IDZhMDY0YWIuLmVhOTQ2NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvaW50ZXJuYWwuaAorKysgYi9hcmNoL21uMTAzMDAva2VybmVsL2ludGVybmFsLmgKQEAgLTMzLDEzICszMywzIEBACiAgKiB0aW1lLmMKICAqLwogZXh0ZXJuIGlycXJldHVybl90IGxvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKLQotLyoKLSAqIHRpbWUuYwotICovCi0jaWZkZWYgQ09ORklHX0NFVlRfTU4xMDMwMAotZXh0ZXJuIHZvaWQgY2xvY2tldmVudF9zZXRfY2xvY2soc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqLCB1bnNpZ25lZCBpbnQpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0NTUkNfTU4xMDMwMAotZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKHN0cnVjdCBjbG9ja3NvdXJjZSAqLCB1bnNpZ25lZCBpbnQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYwppbmRleCBhYzExNzU0Li5mMDlmZWQ1IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMKQEAgLTM3LDggKzM3LDkgQEAKIC8qCiAgKiBNTjEwMzAwIGludGVycnVwdCBjb250cm9sbGVyIG9wZXJhdGlvbnMKICAqLwotc3RhdGljIHZvaWQgbW4xMDMwMF9jcHVwaWNfYWNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtbjEwMzAwX2NwdXBpY19hY2soc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgdG1wOwogCkBAIC02MSwxMyArNjIsMTQgQEAKIAlhcmNoX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgbW4xMDMwMF9jcHVwaWNfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbW4xMDMwMF9jcHVwaWNfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JX19tYXNrX2FuZF9zZXRfaWNyKGlycSwgR3hJQ1JfTEVWRUwsIDApOworCV9fbWFza19hbmRfc2V0X2ljcihkLT5pcnEsIEd4SUNSX0xFVkVMLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgbW4xMDMwMF9jcHVwaWNfbWFza19hY2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1uMTAzMDBfY3B1cGljX21hc2tfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiB0bXA7CkBAIC04NSw3ICs4Nyw3IEBACiAJCXRtcDIgPSBHeElDUihpcnEpOwogCiAJCWlycV9hZmZpbml0eV9vbmxpbmVbaXJxXSA9Ci0JCQlhbnlfb25saW5lX2NwdSgqaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSk7CisJCQlhbnlfb25saW5lX2NwdSgqZC0+YWZmaW5pdHkpOwogCQlDUk9TU19HeElDUihpcnEsIGlycV9hZmZpbml0eV9vbmxpbmVbaXJxXSkgPQogCQkJKHRtcCAmIChHeElDUl9MRVZFTCB8IEd4SUNSX0VOQUJMRSkpIHwgR3hJQ1JfREVURUNUOwogCQl0bXAgPSBDUk9TU19HeElDUihpcnEsIGlycV9hZmZpbml0eV9vbmxpbmVbaXJxXSk7CkBAIC05NywxMyArOTksMTQgQEAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiB9CiAKLXN0YXRpYyB2b2lkIG1uMTAzMDBfY3B1cGljX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbW4xMDMwMF9jcHVwaWNfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlfX21hc2tfYW5kX3NldF9pY3IoaXJxLCBHeElDUl9MRVZFTCwgR3hJQ1JfRU5BQkxFKTsKKwlfX21hc2tfYW5kX3NldF9pY3IoZC0+aXJxLCBHeElDUl9MRVZFTCwgR3hJQ1JfRU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgbW4xMDMwMF9jcHVwaWNfdW5tYXNrX2NsZWFyKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtbjEwMzAwX2NwdXBpY191bm1hc2tfY2xlYXIoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJLyogdGhlIE1OMTAzMDAgUElDIGxhdGNoZXMgaXRzIGludGVycnVwdCByZXF1ZXN0IGJpdCwgZXZlbiBhZnRlciB0aGUKIAkgKiBkZXZpY2UgaGFzIGNlYXNlZCB0byBhc3NlcnQgaXRzIGludGVycnVwdCBsaW5lIGFuZCB0aGUgaW50ZXJydXB0CiAJICogY2hhbm5lbCBoYXMgYmVlbiBkaXNhYmxlZCBpbiB0aGUgUElDLCBzbyBmb3IgbGV2ZWwtdHJpZ2dlcmVkCkBAIC0xMjEsNyArMTI0LDcgQEAKIAl9IGVsc2UgewogCQl0bXAgPSBHeElDUihpcnEpOwogCi0JCWlycV9hZmZpbml0eV9vbmxpbmVbaXJxXSA9IGFueV9vbmxpbmVfY3B1KCppcnFfZGVzY1tpcnFdLmFmZmluaXR5KTsKKwkJaXJxX2FmZmluaXR5X29ubGluZVtpcnFdID0gYW55X29ubGluZV9jcHUoKmQtPmFmZmluaXR5KTsKIAkJQ1JPU1NfR3hJQ1IoaXJxLCBpcnFfYWZmaW5pdHlfb25saW5lW2lycV0pID0gKHRtcCAmIEd4SUNSX0xFVkVMKSB8IEd4SUNSX0VOQUJMRSB8IEd4SUNSX0RFVEVDVDsKIAkJdG1wID0gQ1JPU1NfR3hJQ1IoaXJxLCBpcnFfYWZmaW5pdHlfb25saW5lW2lycV0pOwogCX0KQEAgLTEzNCw3ICsxMzcsOCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGludAotbW4xMDMwMF9jcHVwaWNfc2V0YWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCittbjEwMzAwX2NwdXBpY19zZXRhZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJICAgYm9vbCBmb3JjZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CkBAIC0xNDIsNyArMTQ2LDcgQEAKIAlmbGFncyA9IGFyY2hfbG9jYWxfY2xpX3NhdmUoKTsKIAogCS8qIGNoZWNrIGlycSBubyAqLwotCXN3aXRjaCAoaXJxKSB7CisJc3dpdGNoIChkLT5pcnEpIHsKIAljYXNlIFRNSkNJUlE6CiAJY2FzZSBSRVNDSEVEVUxFX0lQSToKIAljYXNlIENBTExfRlVOQ19TSU5HTEVfSVBJOgpAQCAtMTgxLDcgKzE4NSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJc2V0X2JpdChpcnEsIGlycV9hZmZpbml0eV9yZXF1ZXN0KTsKKwkJc2V0X2JpdChkLT5pcnEsIGlycV9hZmZpbml0eV9yZXF1ZXN0KTsKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJfQpAQCAtMjAyLDE1ICsyMDYsMTUgQEAKICAqIG1hc2tfYWNrKCkgaXMgcHJvdmlkZWQpLCBhbmQgbWFza19hY2soKSBqdXN0IG1hc2tzLgogICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1uMTAzMDBfY3B1X3BpY19sZXZlbCA9IHsKLQkubmFtZQkJPSAiY3B1X2wiLAotCS5kaXNhYmxlCT0gbW4xMDMwMF9jcHVwaWNfbWFzaywKLQkuZW5hYmxlCQk9IG1uMTAzMDBfY3B1cGljX3VubWFza19jbGVhciwKLQkuYWNrCQk9IE5VTEwsCi0JLm1hc2sJCT0gbW4xMDMwMF9jcHVwaWNfbWFzaywKLQkubWFza19hY2sJPSBtbjEwMzAwX2NwdXBpY19tYXNrLAotCS51bm1hc2sJCT0gbW4xMDMwMF9jcHVwaWNfdW5tYXNrX2NsZWFyLAorCS5uYW1lCQkJPSAiY3B1X2wiLAorCS5pcnFfZGlzYWJsZQkJPSBtbjEwMzAwX2NwdXBpY19tYXNrLAorCS5pcnFfZW5hYmxlCQk9IG1uMTAzMDBfY3B1cGljX3VubWFza19jbGVhciwKKwkuaXJxX2FjawkJPSBOVUxMLAorCS5pcnFfbWFzawkJPSBtbjEwMzAwX2NwdXBpY19tYXNrLAorCS5pcnFfbWFza19hY2sJCT0gbW4xMDMwMF9jcHVwaWNfbWFzaywKKwkuaXJxX3VubWFzawkJPSBtbjEwMzAwX2NwdXBpY191bm1hc2tfY2xlYXIsCiAjaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBtbjEwMzAwX2NwdXBpY19zZXRhZmZpbml0eSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IG1uMTAzMDBfY3B1cGljX3NldGFmZmluaXR5LAogI2VuZGlmCiB9OwogCkBAIC0yMjAsMTUgKzIyNCwxNSBAQAogICogV2UgdXNlIHRoZSBsYXRjaCBjbGVhcmluZyBmdW5jdGlvbiBvZiB0aGUgUElDIGFzIHRoZSAnQUNLJyBmdW5jdGlvbi4KICAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtbjEwMzAwX2NwdV9waWNfZWRnZSA9IHsKLQkubmFtZQkJPSAiY3B1X2UiLAotCS5kaXNhYmxlCT0gbW4xMDMwMF9jcHVwaWNfbWFzaywKLQkuZW5hYmxlCQk9IG1uMTAzMDBfY3B1cGljX3VubWFzaywKLQkuYWNrCQk9IG1uMTAzMDBfY3B1cGljX2FjaywKLQkubWFzawkJPSBtbjEwMzAwX2NwdXBpY19tYXNrLAotCS5tYXNrX2Fjawk9IG1uMTAzMDBfY3B1cGljX21hc2tfYWNrLAotCS51bm1hc2sJCT0gbW4xMDMwMF9jcHVwaWNfdW5tYXNrLAorCS5uYW1lCQkJPSAiY3B1X2UiLAorCS5pcnFfZGlzYWJsZQkJPSBtbjEwMzAwX2NwdXBpY19tYXNrLAorCS5pcnFfZW5hYmxlCQk9IG1uMTAzMDBfY3B1cGljX3VubWFzaywKKwkuaXJxX2FjawkJPSBtbjEwMzAwX2NwdXBpY19hY2ssCisJLmlycV9tYXNrCQk9IG1uMTAzMDBfY3B1cGljX21hc2ssCisJLmlycV9tYXNrX2FjawkJPSBtbjEwMzAwX2NwdXBpY19tYXNrX2FjaywKKwkuaXJxX3VubWFzawkJPSBtbjEwMzAwX2NwdXBpY191bm1hc2ssCiAjaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBtbjEwMzAwX2NwdXBpY19zZXRhZmZpbml0eSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IG1uMTAzMDBfY3B1cGljX3NldGFmZmluaXR5LAogI2VuZGlmCiB9OwogCkBAIC0yNTIsMzEgKzI1Niw2IEBACiAJX19tYXNrX2FuZF9zZXRfaWNyKGlycSwgR3hJQ1JfRU5BQkxFLCBsZXZlbCk7CiB9CiAKLXZvaWQgbW4xMDMwMF9pbnRjX3NldF9sZXZlbCh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0Jc2V0X2ludHJfbGV2ZWwoaXJxLCBOVU0yR3hJQ1JfTEVWRUwobGV2ZWwpICYgR3hJQ1JfTEVWRUwpOwotfQotCi12b2lkIG1uMTAzMDBfaW50Y19jbGVhcih1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fbWFza19hbmRfc2V0X2ljcihpcnEsIEd4SUNSX0xFVkVMIHwgR3hJQ1JfRU5BQkxFLCBHeElDUl9ERVRFQ1QpOwotfQotCi12b2lkIG1uMTAzMDBfaW50Y19zZXQodW5zaWduZWQgaW50IGlycSkKLXsKLQlfX21hc2tfYW5kX3NldF9pY3IoaXJxLCAwLCBHeElDUl9SRVFVRVNUIHwgR3hJQ1JfREVURUNUKTsKLX0KLQotdm9pZCBtbjEwMzAwX2ludGNfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JbW4xMDMwMF9jcHVwaWNfdW5tYXNrKGlycSk7Ci19Ci0KLXZvaWQgbW4xMDMwMF9pbnRjX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKLXsKLQltbjEwMzAwX2NwdXBpY19tYXNrKGlycSk7Ci19Ci0KIC8qCiAgKiBtYXJrIGFuIGludGVycnVwdCB0byBiZSBBQ0snZCBhZnRlciBpbnRlcnJ1cHQgaGFuZGxlcnMgaGF2ZSBiZWVuIHJ1biByYXRoZXIKICAqIHRoYW4gYmVmb3JlCkBAIC0yOTYsNyArMjc1LDcgQEAKIAlpbnQgaXJxOwogCiAJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykKLQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcCA9PSAmbm9faXJxX2NoaXApCisJCWlmIChnZXRfaXJxX2NoaXAoaXJxKSA9PSAmbm9faXJxX2NoaXApCiAJCQkvKiBkdWUgdG8gdGhlIFBJQyBsYXRjaGluZyBpbnRlcnJ1cHQgcmVxdWVzdHMsIGV2ZW4KIAkJCSAqIHdoZW4gdGhlIElSUSBpcyBkaXNhYmxlZCwgSVJRX1BFTkRJTkcgaXMgc3VwZXJmbHVvdXMKIAkJCSAqIGFuZCB3ZSBjYW4gdXNlIGhhbmRsZV9sZXZlbF9pcnEoKSBmb3IgZWRnZS10cmlnZ2VyZWQKQEAgLTM4NCwxMiArMzYzLDEyIEBACiAKIAkJCWlmIChpIDwgTlJfQ1BVX0lSUVMpCiAJCQkJc2VxX3ByaW50ZihwLCAiICUxNHMuJXUiLAotCQkJCQkgICBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lLAorCQkJCQkgICBpcnFfZGVzY1tpXS5pcnFfZGF0YS5jaGlwLT5uYW1lLAogCQkJCQkgICAoR3hJQ1IoaSkgJiBHeElDUl9MRVZFTCkgPj4KIAkJCQkJICAgR3hJQ1JfTEVWRUxfU0hJRlQpOwogCQkJZWxzZQogCQkJCXNlcV9wcmludGYocCwgIiAlMTRzIiwKLQkJCQkJICAgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CisJCQkJCSAgIGlycV9kZXNjW2ldLmlycV9kYXRhLmNoaXAtPm5hbWUpOwogCiAJCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXNlcmlhbC5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXNlcmlhbC5jCmluZGV4IDk5NjM4NGQuLjkzYzUzNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvbW4xMDMwMC1zZXJpYWwuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtc2VyaWFsLmMKQEAgLTM4NCwxNyArMzg0LDIxIEBACiAJYXJjaF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIG1uMTAzMDBfc2VyaWFsX25vcCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbW4xMDMwMF9zZXJpYWxfY2hpcF9tYXNrX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJbW4xMDMwMF9zZXJpYWxfbWFza19hY2soZC0+aXJxKTsKK30KKworc3RhdGljIHZvaWQgbW4xMDMwMF9zZXJpYWxfbm9wKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtbjEwMzAwX3NlcmlhbF9waWMgPSB7CiAJLm5hbWUJCT0gIm1uc2VyaWFsIiwKLQkuYWNrCQk9IG1uMTAzMDBfc2VyaWFsX21hc2tfYWNrLAotCS5tYXNrCQk9IG1uMTAzMDBfc2VyaWFsX21hc2tfYWNrLAotCS5tYXNrX2Fjawk9IG1uMTAzMDBfc2VyaWFsX21hc2tfYWNrLAotCS51bm1hc2sJCT0gbW4xMDMwMF9zZXJpYWxfbm9wLAotCS5lbmQJCT0gbW4xMDMwMF9zZXJpYWxfbm9wLAorCS5pcnFfYWNrCT0gbW4xMDMwMF9zZXJpYWxfY2hpcF9tYXNrX2FjaywKKwkuaXJxX21hc2sJPSBtbjEwMzAwX3NlcmlhbF9jaGlwX21hc2tfYWNrLAorCS5pcnFfbWFza19hY2sJPSBtbjEwMzAwX3NlcmlhbF9jaGlwX21hc2tfYWNrLAorCS5pcnFfdW5tYXNrCT0gbW4xMDMwMF9zZXJpYWxfbm9wLAogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3NtcC5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9zbXAuYwppbmRleCAwZGNkMWM2Li4xZWJiNzlmIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvc21wLmMKQEAgLTExMywxNSArMTEzLDE3IEBACiAgKi8KIHN0YXRpYyB2b2lkIG1uMTAzMDBfaXBpX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSk7CiBzdGF0aWMgdm9pZCBtbjEwMzAwX2lwaV9lbmFibGUodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBtbjEwMzAwX2lwaV9hY2sodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBtbjEwMzAwX2lwaV9ub3AodW5zaWduZWQgaW50IGlycSk7CitzdGF0aWMgdm9pZCBtbjEwMzAwX2lwaV9jaGlwX2Rpc2FibGUoc3RydWN0IGlycV9kYXRhICpkKTsKK3N0YXRpYyB2b2lkIG1uMTAzMDBfaXBpX2NoaXBfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCk7CitzdGF0aWMgdm9pZCBtbjEwMzAwX2lwaV9hY2soc3RydWN0IGlycV9kYXRhICpkKTsKK3N0YXRpYyB2b2lkIG1uMTAzMDBfaXBpX25vcChzdHJ1Y3QgaXJxX2RhdGEgKmQpOwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1uMTAzMDBfaXBpX3R5cGUgPSB7CiAJLm5hbWUJCT0gImNwdV9pcGkiLAotCS5kaXNhYmxlCT0gbW4xMDMwMF9pcGlfZGlzYWJsZSwKLQkuZW5hYmxlCQk9IG1uMTAzMDBfaXBpX2VuYWJsZSwKLQkuYWNrCQk9IG1uMTAzMDBfaXBpX2FjaywKLQkuZW9pCQk9IG1uMTAzMDBfaXBpX25vcAorCS5pcnFfZGlzYWJsZQk9IG1uMTAzMDBfaXBpX2NoaXBfZGlzYWJsZSwKKwkuaXJxX2VuYWJsZQk9IG1uMTAzMDBfaXBpX2NoaXBfZW5hYmxlLAorCS5pcnFfYWNrCT0gbW4xMDMwMF9pcGlfYWNrLAorCS5pcnFfZW9pCT0gbW4xMDMwMF9pcGlfbm9wCiB9OwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc21wX3Jlc2NoZWR1bGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CkBAIC0yMzYsNiArMjM4LDExIEBACiAJYXJjaF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIG1uMTAzMDBfaXBpX2NoaXBfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwltbjEwMzAwX2lwaV9lbmFibGUoZC0+aXJxKTsKK30KKwogLyoqCiAgKiBtbjEwMzAwX2lwaV9kaXNhYmxlIC0gRGlzYWJsZSBhbiBJUEkKICAqIEBpcnE6IFRoZSBJUEkgdG8gYmUgZGlzYWJsZWQuCkBAIC0yNTQsNiArMjYxLDEyIEBACiAJYXJjaF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIG1uMTAzMDBfaXBpX2NoaXBfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJbW4xMDMwMF9pcGlfZGlzYWJsZShkLT5pcnEpOworfQorCisKIC8qKgogICogbW4xMDMwMF9pcGlfYWNrIC0gQWNrbm93bGVkZ2UgYW4gSVBJIGludGVycnVwdCBpbiB0aGUgUElDCiAgKiBAaXJxOiBUaGUgSVBJIHRvIGJlIGFja25vd2xlZGdlZC4KQEAgLTI2MSw4ICsyNzQsOSBAQAogICogQ2xlYXIgdGhlIGludGVycnVwdCBkZXRlY3Rpb24gZmxhZyBmb3IgdGhlIElQSSBvbiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJydXB0CiAgKiBjaGFubmVsIGluIHRoZSBQSUMuCiAgKi8KLXN0YXRpYyB2b2lkIG1uMTAzMDBfaXBpX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbW4xMDMwMF9pcGlfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHRtcDsKIApAQCAtMjc2LDcgKzI5MCw3IEBACiAgKiBtbjEwMzAwX2lwaV9ub3AgLSBEdW1teSBJUEkgYWN0aW9uCiAgKiBAaXJxOiBUaGUgSVBJIHRvIGJlIGFjdGVkIHVwb24uCiAgKi8KLXN0YXRpYyB2b2lkIG1uMTAzMDBfaXBpX25vcCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbW4xMDMwMF9pcGlfbm9wKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC90aW1lLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYwppbmRleCA1Yjk1NTAwLi42N2M2NDE2IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYwpAQCAtOTMsNzkgKzkzLDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQotLyoKLSAqIGFkdmFuY2UgdGhlIGtlcm5lbCdzIHRpbWUga2VlcGluZyBjbG9ja3MgKHh0aW1lIGFuZCBqaWZmaWVzKQotICogLSB3ZSB1c2UgVGltZXIgMCAmIDEgY2FzY2FkZWQgYXMgYSBjbG9jayB0byBudWRnZSB1cyB0aGUgbmV4dCB0aW1lCi0gKiAgIHRoZXJlJ3MgYSBuZWVkIHRvIHVwZGF0ZQotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQl1bnNpZ25lZCB0c2MsIGVsYXBzZTsKLQlpcnFyZXR1cm5fdCByZXQ7Ci0KLQl3aGlsZSAodHNjID0gZ2V0X2N5Y2xlcygpLAotCSAgICAgICBlbGFwc2UgPSB0c2MgLSBtbjEwMzAwX2xhc3RfdHNjLCAvKiB0aW1lIGVsYXBzZWQgc2luY2UgbGFzdAotCQkJCQkJICogdGljayAqLwotCSAgICAgICBlbGFwc2UgPiBNTjEwMzAwX1RTQ19QRVJfSFoKLQkgICAgICAgKSB7Ci0JCW1uMTAzMDBfbGFzdF90c2MgKz0gTU4xMDMwMF9UU0NfUEVSX0haOwotCi0JCS8qIGFkdmFuY2UgdGhlIGtlcm5lbCdzIHRpbWUgdHJhY2tpbmcgc3lzdGVtICovCi0JCXh0aW1lX3VwZGF0ZSgxKTsKLQl9Ci0KLQlyZXQgPSBsb2NhbF90aW1lcl9pbnRlcnJ1cHQoKTsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc2VuZF9JUElfYWxsYnV0c2VsZihMT0NBTF9USU1FUl9JUEkpOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxID0gewotCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQgfCBJUlFGX1RJTUVSLAotCS5uYW1lCQk9ICJ0aW1lciIsCi19OwotI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX1RJTUUgKi8KLQotI2lmZGVmIENPTkZJR19DU1JDX01OMTAzMDAKLXZvaWQgX19pbml0IGNsb2Nrc291cmNlX3NldF9jbG9jayhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1bnNpZ25lZCBpbnQgY2xvY2spCi17Ci0JdTY0IHRlbXA7Ci0JdTMyIHNoaWZ0OwotCi0JLyogRmluZCBhIHNoaWZ0IHZhbHVlICovCi0JZm9yIChzaGlmdCA9IDMyOyBzaGlmdCA+IDA7IHNoaWZ0LS0pIHsKLQkJdGVtcCA9ICh1NjQpIE5TRUNfUEVSX1NFQyA8PCBzaGlmdDsKLQkJZG9fZGl2KHRlbXAsIGNsb2NrKTsKLQkJaWYgKCh0ZW1wID4+IDMyKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCWNzLT5zaGlmdCA9IHNoaWZ0OwotCWNzLT5tdWx0ID0gKHUzMikgdGVtcDsKLX0KLSNlbmRpZgotCi0jaWYgQ09ORklHX0NFVlRfTU4xMDMwMAotdm9pZCBfX2NwdWluaXQgY2xvY2tldmVudF9zZXRfY2xvY2soc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QsCi0JCQkJICAgIHVuc2lnbmVkIGludCBjbG9jaykKLXsKLQl1NjQgdGVtcDsKLQl1MzIgc2hpZnQ7Ci0KLQkvKiBGaW5kIGEgc2hpZnQgdmFsdWUgKi8KLQlmb3IgKHNoaWZ0ID0gMzI7IHNoaWZ0ID4gMDsgc2hpZnQtLSkgewotCQl0ZW1wID0gKHU2NCkgY2xvY2sgPDwgc2hpZnQ7Ci0JCWRvX2Rpdih0ZW1wLCBOU0VDX1BFUl9TRUMpOwotCQlpZiAoKHRlbXAgPj4gMzIpID09IDApCi0JCQlicmVhazsKLQl9Ci0JY2QtPnNoaWZ0ID0gc2hpZnQ7Ci0JY2QtPm11bHQgPSAodTMyKSB0ZW1wOwotfQotI2VuZGlmCi0KIC8qCiAgKiBpbml0aWFsaXNlIHRoZSB2YXJpb3VzIHRpbWVycyB1c2VkIGJ5IHRoZSBtYWluIHBhcnQgb2YgdGhlIGtlcm5lbAogICovCkBAIC0xNzcsMTEgKzEwNCw3IEBACiAJICovCiAJVE1QU0NOVCB8PSBUTVBTQ05UX0VOQUJMRTsKIAotI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIAlpbml0X2Nsb2Nrc291cmNlKCk7Ci0jZWxzZQotCXN0YXJ0dXBfdGltZXN0YW1wX2NvdW50ZXIoKTsKLSNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAidGltZXN0YW1wIGNvdW50ZXIgSS9PIGNsb2NrIHJ1bm5pbmcgYXQgJWx1LiUwMmx1IgpAQCAtMTkwLDEyICsxMTMsNyBAQAogCiAJbW4xMDMwMF9sYXN0X3RzYyA9IHJlYWRfdGltZXN0YW1wX2NvdW50ZXIoKTsKIAotI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiAJaW5pdF9jbG9ja2V2ZW50cygpOwotI2Vsc2UKLQlyZWxvYWRfamlmZmllc19jb3VudGVyKE1OMTAzMDBfSkNfUEVSX0haIC0gMSk7Ci0Jc2V0dXBfamlmZmllc19pbnRlcnJ1cHQoVE1KQ0lSUSwgJnRpbWVyX2lycSwgQ09ORklHX1RJTUVSX0lSUV9MRVZFTCk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19NTjEwMzAwX1dEX1RJTUVSCiAJLyogc3RhcnQgdGhlIHdhdGNoZG9nIHRpbWVyICovCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzY0L2luY2x1ZGUvdW5pdC9mcGdhLXJlZ3MuaCBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzNjQvaW5jbHVkZS91bml0L2ZwZ2EtcmVncy5oCmluZGV4IDdjZjEyMDUuLjMzZjEwMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzNjQvaW5jbHVkZS91bml0L2ZwZ2EtcmVncy5oCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzNjQvaW5jbHVkZS91bml0L2ZwZ2EtcmVncy5oCkBAIC0xNCw3ICsxNCw3IEBACiAjZGVmaW5lIEFTQjIzNjRfRlBHQV9SRUdfUkVTRVRfVVNCCV9fU1lTUkVHKDB4YTkwMDEzMGMsIHUxNikKICNkZWZpbmUgQVNCMjM2NF9GUEdBX1JFR19SRVNFVF9BVglfX1NZU1JFRygweGE5MDAxMzEwLCB1MTYpCiAKLSNkZWZpbmUgQVNCMjM2NF9GUEdBX1JFR19JUlEoWCkJCV9fU1lTUkVHKDB4YTkwMDE1OTArKChYKSo0KSwgdTE2KQorI2RlZmluZSBBU0IyMzY0X0ZQR0FfUkVHX0lSUShYKQkJX19TWVNSRUcoMHhhOTAwMTUxMCsoKFgpKjQpLCB1MTYpCiAjZGVmaW5lIEFTQjIzNjRfRlBHQV9SRUdfSVJRX0xBTglBU0IyMzY0X0ZQR0FfUkVHX0lSUSgwKQogI2RlZmluZSBBU0IyMzY0X0ZQR0FfUkVHX0lSUV9VQVJUCUFTQjIzNjRfRlBHQV9SRUdfSVJRKDEpCiAjZGVmaW5lIEFTQjIzNjRfRlBHQV9SRUdfSVJRX0kyQwlBU0IyMzY0X0ZQR0FfUkVHX0lSUSgyKQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjM2NC9pbmNsdWRlL3VuaXQvc2VyaWFsLmggYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzY0L2luY2x1ZGUvdW5pdC9zZXJpYWwuaAppbmRleCA3ZjA0OGJiLi45MmYyMjRhIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzY0L2luY2x1ZGUvdW5pdC9zZXJpYWwuaAorKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzY0L2luY2x1ZGUvdW5pdC9zZXJpYWwuaApAQCAtNTksMTggKzU5LDE4IEBACiAjZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMgLyogc3RvbGVuIGJ5IGdkYi1zdHViICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19HREJTVFVCX09OX1RUWVMwKQotI2RlZmluZSBHREJQT1JUX1NFUklBTF9SWAlfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9SWCAgKiA0LCB1OCkKLSNkZWZpbmUgR0RCUE9SVF9TRVJJQUxfVFgJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfVFggICogNCwgdTgpCi0jZGVmaW5lIEdEQlBPUlRfU0VSSUFMX0RMTAlfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9ETEwgKiA0LCB1OCkKLSNkZWZpbmUgR0RCUE9SVF9TRVJJQUxfRExNCV9fU1lTUkVHKFNFUklBTF9QT1JUMF9CQVNFX0FERFJFU1MgKyBVQVJUX0RMTSAqIDQsIHU4KQotI2RlZmluZSBHREJQT1JUX1NFUklBTF9JRVIJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfSUVSICogNCwgdTgpCi0jZGVmaW5lIEdEQlBPUlRfU0VSSUFMX0lJUglfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9JSVIgKiA0LCB1OCkKLSNkZWZpbmUgR0RCUE9SVF9TRVJJQUxfRkNSCV9fU1lTUkVHKFNFUklBTF9QT1JUMF9CQVNFX0FERFJFU1MgKyBVQVJUX0ZDUiAqIDQsIHU4KQotI2RlZmluZSBHREJQT1JUX1NFUklBTF9MQ1IJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfTENSICogNCwgdTgpCi0jZGVmaW5lIEdEQlBPUlRfU0VSSUFMX01DUglfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9NQ1IgKiA0LCB1OCkKLSNkZWZpbmUgR0RCUE9SVF9TRVJJQUxfTFNSCV9fU1lTUkVHKFNFUklBTF9QT1JUMF9CQVNFX0FERFJFU1MgKyBVQVJUX0xTUiAqIDQsIHU4KQotI2RlZmluZSBHREJQT1JUX1NFUklBTF9NU1IJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfTVNSICogNCwgdTgpCi0jZGVmaW5lIEdEQlBPUlRfU0VSSUFMX1NDUglfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9TQ1IgKiA0LCB1OCkKKyNkZWZpbmUgR0RCUE9SVF9TRVJJQUxfUlgJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfUlggICogMiwgdTgpCisjZGVmaW5lIEdEQlBPUlRfU0VSSUFMX1RYCV9fU1lTUkVHKFNFUklBTF9QT1JUMF9CQVNFX0FERFJFU1MgKyBVQVJUX1RYICAqIDIsIHU4KQorI2RlZmluZSBHREJQT1JUX1NFUklBTF9ETEwJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfRExMICogMiwgdTgpCisjZGVmaW5lIEdEQlBPUlRfU0VSSUFMX0RMTQlfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9ETE0gKiAyLCB1OCkKKyNkZWZpbmUgR0RCUE9SVF9TRVJJQUxfSUVSCV9fU1lTUkVHKFNFUklBTF9QT1JUMF9CQVNFX0FERFJFU1MgKyBVQVJUX0lFUiAqIDIsIHU4KQorI2RlZmluZSBHREJQT1JUX1NFUklBTF9JSVIJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfSUlSICogMiwgdTgpCisjZGVmaW5lIEdEQlBPUlRfU0VSSUFMX0ZDUglfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9GQ1IgKiAyLCB1OCkKKyNkZWZpbmUgR0RCUE9SVF9TRVJJQUxfTENSCV9fU1lTUkVHKFNFUklBTF9QT1JUMF9CQVNFX0FERFJFU1MgKyBVQVJUX0xDUiAqIDIsIHU4KQorI2RlZmluZSBHREJQT1JUX1NFUklBTF9NQ1IJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfTUNSICogMiwgdTgpCisjZGVmaW5lIEdEQlBPUlRfU0VSSUFMX0xTUglfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9MU1IgKiAyLCB1OCkKKyNkZWZpbmUgR0RCUE9SVF9TRVJJQUxfTVNSCV9fU1lTUkVHKFNFUklBTF9QT1JUMF9CQVNFX0FERFJFU1MgKyBVQVJUX01TUiAqIDIsIHU4KQorI2RlZmluZSBHREJQT1JUX1NFUklBTF9TQ1IJX19TWVNSRUcoU0VSSUFMX1BPUlQwX0JBU0VfQUREUkVTUyArIFVBUlRfU0NSICogMiwgdTgpCiAjZGVmaW5lIEdEQlBPUlRfU0VSSUFMX0lSUQlTRVJJQUxfSVJRCiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0dEQlNUVUJfT05fVFRZUzEpCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzY0L2lycS1mcGdhLmMgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzY0L2lycS1mcGdhLmMKaW5kZXggZmNmMjk3NS4uZWU4NGU2MiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjM2NC9pcnEtZnBnYS5jCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzNjQvaXJxLWZwZ2EuYwpAQCAtMTcsMzggKzE3LDM4IEBACiAvKgogICogRlBHQSBQSUMgb3BlcmF0aW9ucwogICovCi1zdGF0aWMgdm9pZCBhc2IyMzY0X2ZwZ2FfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYXNiMjM2NF9mcGdhX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCUFTQjIzNjRfRlBHQV9SRUdfTUFTSyhpcnEgLSBOUl9DUFVfSVJRUykgPSAweDAwMDE7CisJQVNCMjM2NF9GUEdBX1JFR19NQVNLKGQtPmlycSAtIE5SX0NQVV9JUlFTKSA9IDB4MDAwMTsKIAlTeW5jRXhCdXMoKTsKIH0KIAotc3RhdGljIHZvaWQgYXNiMjM2NF9mcGdhX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYXNiMjM2NF9mcGdhX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JQVNCMjM2NF9GUEdBX1JFR19JUlEoaXJxIC0gTlJfQ1BVX0lSUVMpID0gMHgwMDAxOworCUFTQjIzNjRfRlBHQV9SRUdfSVJRKGQtPmlycSAtIE5SX0NQVV9JUlFTKSA9IDB4MDAwMTsKIAlTeW5jRXhCdXMoKTsKIH0KIAotc3RhdGljIHZvaWQgYXNiMjM2NF9mcGdhX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBhc2IyMzY0X2ZwZ2FfbWFza19hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCUFTQjIzNjRfRlBHQV9SRUdfTUFTSyhpcnEgLSBOUl9DUFVfSVJRUykgPSAweDAwMDE7CisJQVNCMjM2NF9GUEdBX1JFR19NQVNLKGQtPmlycSAtIE5SX0NQVV9JUlFTKSA9IDB4MDAwMTsKIAlTeW5jRXhCdXMoKTsKLQlBU0IyMzY0X0ZQR0FfUkVHX0lSUShpcnEgLSBOUl9DUFVfSVJRUykgPSAweDAwMDE7CisJQVNCMjM2NF9GUEdBX1JFR19JUlEoZC0+aXJxIC0gTlJfQ1BVX0lSUVMpID0gMHgwMDAxOwogCVN5bmNFeEJ1cygpOwogfQogCi1zdGF0aWMgdm9pZCBhc2IyMzY0X2ZwZ2FfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBhc2IyMzY0X2ZwZ2FfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlBU0IyMzY0X0ZQR0FfUkVHX01BU0soaXJxIC0gTlJfQ1BVX0lSUVMpID0gMHgwMDAwOworCUFTQjIzNjRfRlBHQV9SRUdfTUFTSyhkLT5pcnEgLSBOUl9DUFVfSVJRUykgPSAweDAwMDA7CiAJU3luY0V4QnVzKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYXNiMjM2NF9mcGdhX3BpYyA9IHsKIAkubmFtZQkJPSAiZnBnYSIsCi0JLmFjawkJPSBhc2IyMzY0X2ZwZ2FfYWNrLAotCS5tYXNrCQk9IGFzYjIzNjRfZnBnYV9tYXNrLAotCS5tYXNrX2Fjawk9IGFzYjIzNjRfZnBnYV9tYXNrX2FjaywKLQkudW5tYXNrCQk9IGFzYjIzNjRfZnBnYV91bm1hc2ssCisJLmlycV9hY2sJPSBhc2IyMzY0X2ZwZ2FfYWNrLAorCS5pcnFfbWFzawk9IGFzYjIzNjRfZnBnYV9tYXNrLAorCS5pcnFfbWFza19hY2sJPSBhc2IyMzY0X2ZwZ2FfbWFza19hY2ssCisJLmlycV91bm1hc2sJPSBhc2IyMzY0X2ZwZ2FfdW5tYXNrLAogfTsKIAogLyoKQEAgLTg4LDYgKzg4LDE3IEBACiB7CiAJaW50IGlycTsKIAorCUFTQjIzNjRfRlBHQV9SRUdfTUFTS19MQU4gID0gMHgwMDAxOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfTUFTS19VQVJUID0gMHgwMDAxOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfTUFTS19JMkMgID0gMHgwMDAxOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfTUFTS19VU0IgID0gMHgwMDAxOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfTUFTS19GUEdBID0gMHgwMDAxOworCVN5bmNFeEJ1cygpOworCiAJZm9yIChpcnEgPSBOUl9DUFVfSVJRUzsgaXJxIDwgTlJfSVJRUzsgaXJxKyspCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZhc2IyMzY0X2ZwZ2FfcGljLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjM2NC91bml0LWluaXQuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzNjQvdW5pdC1pbml0LmMKaW5kZXggMTE0NDA4MC4uNjM1OWI0MSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjM2NC91bml0LWluaXQuYworKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzY0L3VuaXQtaW5pdC5jCkBAIC0yMCwxMyArMjAsNDEgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pbnRjdGwtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9zZXJpYWwtcmVncy5oPgogI2luY2x1ZGUgPHVuaXQvZnBnYS1yZWdzLmg+CisjaW5jbHVkZSA8dW5pdC9zZXJpYWwuaD4KKyNpbmNsdWRlIDx1bml0L3Ntc2M5MTF4Lmg+CisKKyNkZWZpbmUgVFRZUzBfU0VSSUFMX0lFUglfX1NZU1JFRyhTRVJJQUxfUE9SVDBfQkFTRV9BRERSRVNTICsgVUFSVF9JRVIgKiAyLCB1OCkKKyNkZWZpbmUgTEFOX0lSUV9DRkcJCV9fU1lTUkVHKFNNU0M5MTFYX0JBU0UgKyAweDU0LCB1MzIpCisjZGVmaW5lIExBTl9JTlRfRU4JCV9fU1lTUkVHKFNNU0M5MTFYX0JBU0UgKyAweDVjLCB1MzIpCiAKIC8qCiAgKiBpbml0aWFsaXNlIHNvbWUgb2YgdGhlIHVuaXQgaGFyZHdhcmUgYmVmb3JlIGdkYnN0dWIgaXMgc2V0IHVwCiAgKi8KIGFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgdW5pdF9pbml0KHZvaWQpCiB7CisJLyogTWFrZSBzdXJlIHdlIGFyZW4ndCBnb2luZyB0byBnZXQgdW5leHBlY3RlZCBpbnRlcnJ1cHRzICovCisJVFRZUzBfU0VSSUFMX0lFUiA9IDA7CisJU0MwUlhJQ1IgPSAwOworCVNDMFRYSUNSID0gMDsKKwlTQzFSWElDUiA9IDA7CisJU0MxVFhJQ1IgPSAwOworCVNDMlJYSUNSID0gMDsKKwlTQzJUWElDUiA9IDA7CisKKwkvKiBBdHRlbXB0IHRvIHJlc2V0IHRoZSBGUEdBIGF0dGFjaGVkIHBlcmlwaGVyYWxzICovCisJQVNCMjM2NF9GUEdBX1JFR19SRVNFVF9MQU4gPSAweDAwMDA7CisJU3luY0V4QnVzKCk7CisJQVNCMjM2NF9GUEdBX1JFR19SRVNFVF9VQVJUID0gMHgwMDAwOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfUkVTRVRfSTJDID0gMHgwMDAwOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfUkVTRVRfVVNCID0gMHgwMDAwOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfUkVTRVRfQVYgPSAweDAwMDA7CisJU3luY0V4QnVzKCk7CisKIAkvKiBzZXQgdXAgdGhlIGV4dGVybmFsIGludGVycnVwdHMgKi8KIAogCS8qIFhJUlFbMF06IE5BTkQgUlhCWSAqLwpAQCAtNTYsNyArODQsMjMgQEAKICAqLwogYXNtbGlua2FnZSB2b2lkIF9faW5pdCB1bml0X3NldHVwKHZvaWQpCiB7CisJLyogUmVsZWFzZSB0aGUgcmVzZXQgb24gdGhlIFNNU0M5MTFYIHNvIHRoYXQgaXQgaXMgcmVhZHkgYnkgdGhlIHRpbWUgd2UKKwkgKiBuZWVkIGl0ICovCisJQVNCMjM2NF9GUEdBX1JFR19SRVNFVF9MQU4gPSAweDAwMDE7CisJU3luY0V4QnVzKCk7CisJQVNCMjM2NF9GUEdBX1JFR19SRVNFVF9VQVJUID0gMHgwMDAxOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfUkVTRVRfSTJDID0gMHgwMDAxOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfUkVTRVRfVVNCID0gMHgwMDAxOworCVN5bmNFeEJ1cygpOworCUFTQjIzNjRfRlBHQV9SRUdfUkVTRVRfQVYgPSAweDAwMDE7CisJU3luY0V4QnVzKCk7CiAKKwkvKiBNYWtlIHN1cmUgdGhlIGV0aGVybmV0IGNoaXBzZXQgaXNuJ3QgZ29pbmcgdG8gZ2l2ZSB1cyBhbiBpbnRlcnJ1cHQKKwkgKiBzdG9ybSBmcm9tIHN0dWZmIGl0IHdhcyBkb2luZyBwcmUtcmVzZXQgKi8KKwlMQU5fSVJRX0NGRyA9IDA7CisJTEFOX0lOVF9FTiA9IDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCBmZWQyOTQ2Li45YjFmNDI3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTE1LDYgKzE1LDcgQEAKIAlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCiAJc2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFCiAJc2VsZWN0IElSUV9QRVJfQ1BVCisJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fREVQUkVDQVRFRAogCiAJaGVscAogCSAgVGhlIFBBLVJJU0MgbWljcm9wcm9jZXNzb3IgaXMgZGVzaWduZWQgYnkgSGV3bGV0dC1QYWNrYXJkIGFuZCB1c2VkCkBAIC01MSw2ICs1MiwxMCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfRklORF9CSVRfTEUKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBHRU5FUklDX0JVRwogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggN2E2ZWExMC4uNDNjNTE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTIyMiw3ICsyMjIsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogCiAvKiAnMycgaXMgYml0cyBwZXIgYnl0ZSAqLwogI2RlZmluZSBMRV9CWVRFX0FERFIgKChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKSA8PCAzKQpAQCAtMjM0LDYgKzIzNCw0IEBACiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXgtbGUuaD4KLQogI2VuZGlmIC8qIF9QQVJJU0NfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBmMzg4YTg1Li5kMTgzMjhiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0yNiw4ICsyNiw2IEBACiB2b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2VfYXNtKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogdm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2VfYXNtKHZvaWQgKik7CiB2b2lkIGZsdXNoX2tlcm5lbF9pY2FjaGVfcGFnZSh2b2lkICopOwotdm9pZCBmbHVzaF91c2VyX2RjYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcpOwotdm9pZCBmbHVzaF91c2VyX2ljYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcpOwogdm9pZCBmbHVzaF91c2VyX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIHZvaWQgZmx1c2hfdXNlcl9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKQEAgLTM3LDYgKzM1LDEzIEBACiB2b2lkIGZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCisjZGVmaW5lIEFSQ0hfSEFTX0ZMVVNIX0tFUk5FTF9EQ0FDSEVfUEFHRQordm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2VfYWRkcih2b2lkICphZGRyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJZmx1c2hfa2VybmVsX2RjYWNoZV9wYWdlX2FkZHIocGFnZV9hZGRyZXNzKHBhZ2UpKTsKK30KKwogI2RlZmluZSBmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlKHN0YXJ0LHNpemUpIFwKIAlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbSgoc3RhcnQpLCAoc3RhcnQpKyhzaXplKSk7CiAvKiB2bWFwIHJhbmdlIGZsdXNoZXMgYW5kIGludmFsaWRhdGVzLiAgQXJjaGl0ZWN0dXJhbGx5LCB3ZSBkb24ndCBuZWVkCkBAIC01MCw2ICs1NSwxNiBAQAogfQogc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQogeworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKKwl2b2lkICpjdXJzb3IgPSB2YWRkcjsKKworCWZvciAoIDsgY3Vyc29yIDwgdmFkZHIgKyBzaXplOyBjdXJzb3IgKz0gUEFHRV9TSVpFKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gdm1hbGxvY190b19wYWdlKGN1cnNvcik7CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncykpCisJCQlmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2UocGFnZSk7CisJfQorCWZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2VfYXNtKHN0YXJ0LCBzdGFydCArIHNpemUpOwogfQogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCkBAIC05MCwxOSArMTA1LDE1IEBACiB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiAKKy8qIGRlZmluZWQgaW4gcGFjYWNoZS5TIGV4cG9ydGVkIGluIGNhY2hlLmMgdXNlZCBieSBmbHVzaF9hbm9uX3BhZ2UgKi8KK3ZvaWQgZmx1c2hfZGNhY2hlX3BhZ2VfYXNtKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKKwogI2RlZmluZSBBUkNIX0hBU19GTFVTSF9BTk9OX1BBR0UKIHN0YXRpYyBpbmxpbmUgdm9pZAogZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7CiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKQotCQlmbHVzaF91c2VyX2RjYWNoZV9wYWdlKHZtYWRkcik7Ci19Ci0KLSNkZWZpbmUgQVJDSF9IQVNfRkxVU0hfS0VSTkVMX0RDQUNIRV9QQUdFCi12b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZV9hZGRyKHZvaWQgKmFkZHIpOwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2VfYWRkcihwYWdlX2FkZHJlc3MocGFnZSkpOworCQlmbHVzaF9kY2FjaGVfcGFnZV9hc20ocGFnZV90b19waHlzKHBhZ2UpLCB2bWFkZHIpOwogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCBjNjdkY2NmLi4xMDczNTk5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMzIsMTUgKzMyLDEwIEBACiB9CiAKIHN0cnVjdCBpcnFfY2hpcDsKK3N0cnVjdCBpcnFfZGF0YTsKIAotLyoKLSAqIFNvbWUgdXNlZnVsICJ3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGhlcmUiIGhhbmRsZXJzLiAgU2hvdWxkCi0gKiBwcm9iYWJseSBiZSBwcm92aWRlZCBieSB0aGUgZ2VuZXJpYyBjb2RlLgotICovCi12b2lkIG5vX2Fja19pcnEodW5zaWduZWQgaW50IGlycSk7Ci12b2lkIG5vX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci12b2lkIGNwdV9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotdm9pZCBjcHVfZW9pX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK3ZvaWQgY3B1X2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKTsKK3ZvaWQgY3B1X2VvaV9pcnEoc3RydWN0IGlycV9kYXRhICpkKTsKIAogZXh0ZXJuIGludCB0eG5fYWxsb2NfaXJxKHVuc2lnbmVkIGludCBuYml0cyk7CiBleHRlcm4gaW50IHR4bl9jbGFpbV9pcnEoaW50KTsKQEAgLTQ5LDcgKzQ0LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHR4bl9hZmZpbml0eV9hZGRyKHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOwogCiBleHRlcm4gaW50IGNwdV9jbGFpbV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9jaGlwICosIHZvaWQgKik7Ci1leHRlcm4gaW50IGNwdV9jaGVja19hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCk7CitleHRlcm4gaW50IGNwdV9jaGVja19hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KTsKIAogLyogc29mdCBwb3dlciBzd2l0Y2ggc3VwcG9ydCAocG93ZXIuYykgKi8KIGV4dGVybiBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcG93ZXJfdGFza2xldDsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA2ZjFmNjVkLi41ZDdiOGNlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMzgsOCArMTM4LDcgQEAKICNkZWZpbmUgX1BBR0VfTk9fQ0FDSEVfQklUIDI0ICAgLyogKDB4MDgwKSBVbmNhY2hlZCBQYWdlIChVIGJpdCkgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRURfQklUIDIzICAgLyogKDB4MTAwKSBTb2Z0d2FyZTogUGFnZSBBY2Nlc3NlZCAqLwogI2RlZmluZSBfUEFHRV9QUkVTRU5UX0JJVCAgMjIgICAvKiAoMHgyMDApIFNvZnR3YXJlOiB0cmFuc2xhdGlvbiB2YWxpZCAqLwotI2RlZmluZSBfUEFHRV9GTFVTSF9CSVQgICAgMjEgICAvKiAoMHg0MDApIFNvZnR3YXJlOiB0cmFuc2xhdGlvbiB2YWxpZCAqLwotCQkJCS8qICAgICAgICAgICAgIGZvciBjYWNoZSBmbHVzaGluZyBvbmx5ICovCisvKiBiaXQgMjEgd2FzIGZvcm1lcmx5IHRoZSBGTFVTSCBiaXQgYnV0IGlzIG5vdyB1bnVzZWQgKi8KICNkZWZpbmUgX1BBR0VfVVNFUl9CSVQgICAgIDIwICAgLyogKDB4ODAwKSBTb2Z0d2FyZTogVXNlciBhY2Nlc3NpYmxlIHBhZ2UgKi8KIAogLyogTi5CLiBUaGUgYml0cyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBhIDMyIGJpdCB3b3JkIGFib3ZlLCBzbyB0aGUgKi8KQEAgLTE3Myw3ICsxNzIsNiBAQAogI2RlZmluZSBfUEFHRV9OT19DQUNIRSAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9OT19DQUNIRV9CSVQpKQogI2RlZmluZSBfUEFHRV9BQ0NFU1NFRCAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9BQ0NFU1NFRF9CSVQpKQogI2RlZmluZSBfUEFHRV9QUkVTRU5UICAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9QUkVTRU5UX0JJVCkpCi0jZGVmaW5lIF9QQUdFX0ZMVVNIICAgICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX0ZMVVNIX0JJVCkpCiAjZGVmaW5lIF9QQUdFX1VTRVIgICAgICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX1VTRVJfQklUKSkKICNkZWZpbmUgX1BBR0VfRklMRSAgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfRklMRV9CSVQpKQogCkBAIC0yMTMsNyArMjExLDYgQEAKICNkZWZpbmUgUEFHRV9LRVJORUxfUk8JX19wZ3Byb3QoX1BBR0VfS0VSTkVMICYgfl9QQUdFX1dSSVRFKQogI2RlZmluZSBQQUdFX0tFUk5FTF9VTkMJX19wZ3Byb3QoX1BBR0VfS0VSTkVMIHwgX1BBR0VfTk9fQ0FDSEUpCiAjZGVmaW5lIFBBR0VfR0FURVdBWSAgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfR0FURVdBWXwgX1BBR0VfUkVBRCkKLSNkZWZpbmUgUEFHRV9GTFVTSCAgICAgIF9fcGdwcm90KF9QQUdFX0ZMVVNIKQogCiAKIC8qCkBAIC0yNjEsNyArMjU4LDcgQEAKIAogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpICh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlKSkKIAotI2RlZmluZSBwdGVfbm9uZSh4KSAgICAgKChwdGVfdmFsKHgpID09IDApIHx8IChwdGVfdmFsKHgpICYgX1BBR0VfRkxVU0gpKQorI2RlZmluZSBwdGVfbm9uZSh4KSAgICAgKHB0ZV92YWwoeCkgPT0gMCkKICNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKHB0ZV92YWwoeCkgJiBfUEFHRV9QUkVTRU5UKQogI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkJZG8geyBwdGVfdmFsKCooeHApKSA9IDA7IH0gd2hpbGUgKDApCiAKQEAgLTQ0NCwxMyArNDQxLDEwIEBACiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKIAlwdGVfdCBvbGRfcHRlOwotCXB0ZV90IHB0ZTsKIAogCXNwaW5fbG9jaygmcGFfZGJpdF9sb2NrKTsKLQlwdGUgPSBvbGRfcHRlID0gKnB0ZXA7Ci0JcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9QUkVTRU5UOwotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9GTFVTSDsKLQlzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGUpOworCW9sZF9wdGUgPSAqcHRlcDsKKwlwdGVfY2xlYXIobW0sYWRkcixwdGVwKTsKIAlzcGluX3VubG9jaygmcGFfZGJpdF9sb2NrKTsKIAogCXJldHVybiBvbGRfcHRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggMjAxMzVjYy4uODBlNDE1YyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC05LDIwICs5LDQgQEAKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0vKgotICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKLSAqLwotI2lmZGVmIF9fS0VSTkVMX18KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogRG1hIGFkZHJlc3NlcyBhcmUgMzItYml0cyB3aWRlLiAgKi8KLQotdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKLXR5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKaW5kZXggZDA1NGYzZC4uM2YxMTMzMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKQEAgLTI3LDEyICsyNywxNyBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogCiBpbnQgc3BsaXRfdGxiIF9fcmVhZF9tb3N0bHk7CiBpbnQgZGNhY2hlX3N0cmlkZSBfX3JlYWRfbW9zdGx5OwogaW50IGljYWNoZV9zdHJpZGUgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0woZGNhY2hlX3N0cmlkZSk7CiAKK3ZvaWQgZmx1c2hfZGNhY2hlX3BhZ2VfYXNtKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKK0VYUE9SVF9TWU1CT0woZmx1c2hfZGNhY2hlX3BhZ2VfYXNtKTsKK3ZvaWQgZmx1c2hfaWNhY2hlX3BhZ2VfYXNtKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKKwogCiAvKiBPbiBzb21lIG1hY2hpbmVzIChlLmcuIG9uZXMgd2l0aCB0aGUgTWVyY2VkIGJ1cyksIHRoZXJlIGNhbiBiZQogICogb25seSBhIHNpbmdsZSBQeFRMQiBicm9hZGNhc3QgYXQgYSB0aW1lOyB0aGlzIG11c3QgYmUgZ3VhcmFudGVlZApAQCAtMjU5LDgxICsyNjQsMTMgQEAKIAkJcGFuaWMoIlNwYWNlSUQgaGFzaGluZyBpcyBzdGlsbCBvbiFcbiIpOwogfQogCi0vKiBTaW1wbGUgZnVuY3Rpb24gdG8gd29yayBvdXQgaWYgd2UgaGF2ZSBhbiBleGlzdGluZyBhZGRyZXNzIHRyYW5zbGF0aW9uCi0gKiBmb3IgYSB1c2VyIHNwYWNlIHZtYS4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRyYW5zbGF0aW9uX2V4aXN0cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHIpOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgcHRlOwotCi0JaWYocGdkX25vbmUoKnBnZCkpCi0JCXJldHVybiAwOwotCi0JcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHIpOwotCWlmKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9iYWQoKnBtZCkpCi0JCXJldHVybiAwOwotCi0JLyogV2UgY2Fubm90IHRha2UgdGhlIHB0ZSBsb2NrIGhlcmU6IGZsdXNoX2NhY2hlX3BhZ2UgaXMgdXN1YWxseQotCSAqIGNhbGxlZCB3aXRoIHB0ZSBsb2NrIGFscmVhZHkgaGVsZC4gIFdoZXJlYXMgZmx1c2hfZGNhY2hlX3BhZ2UKLQkgKiB0YWtlcyBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrLCB3aGljaCBpcyBsb3dlciBpbiB0aGUgaGllcmFyY2h5OgotCSAqIHRoZSB2bWEgaXRzZWxmIGlzIHNlY3VyZSwgYnV0IHRoZSBwdGUgbWlnaHQgY29tZSBvciBnbyByYWNpbHkuCi0JICovCi0JcHRlID0gKnB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7Ci0JLyogQnV0IHB0ZV91bm1hcCgpIGRvZXMgbm90aGluZyBvbiB0aGlzIGFyY2hpdGVjdHVyZSAqLwotCi0JLyogRmlsdGVyIG91dCBjb2luY2lkZW50YWwgZmlsZSBlbnRyaWVzIGFuZCBzd2FwIGVudHJpZXMgKi8KLQlpZiAoIShwdGVfdmFsKHB0ZSkgJiAoX1BBR0VfRkxVU0h8X1BBR0VfUFJFU0VOVCkpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBwdGVfcGZuKHB0ZSkgPT0gcGZuOwotfQotCi0vKiBQcml2YXRlIGZ1bmN0aW9uIHRvIGZsdXNoIGEgcGFnZSBmcm9tIHRoZSBjYWNoZSBvZiBhIG5vbi1jdXJyZW50Ci0gKiBwcm9jZXNzLiAgY3IyNSBjb250YWlucyB0aGUgUGFnZSBEaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgdXNlcgotICogcHJvY2Vzczsgd2UncmUgZ29pbmcgdG8gaGlqYWNrIGJvdGggaXQgYW5kIHRoZSB1c2VyIHNwYWNlICVzcjMgdG8KLSAqIHRlbXBvcmFyaWx5IG1ha2UgdGhlIG5vbi1jdXJyZW50IHByb2Nlc3MgY3VycmVudC4gIFdlIGhhdmUgdG8gZG8KLSAqIHRoaXMgYmVjYXVzZSBjYWNoZSBmbHVzaGluZyBtYXkgY2F1c2UgYSBub24tYWNjZXNzIHRsYiBtaXNzIHdoaWNoCi0gKiB0aGUgaGFuZGxlcnMgaGF2ZSB0byBmaWxsIGluIGZyb20gdGhlIHBnZCBvZiB0aGUgbm9uLWN1cnJlbnQKLSAqIHByb2Nlc3MuICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLWZsdXNoX3VzZXJfY2FjaGVfcGFnZV9ub25fY3VycmVudChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQorX19mbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkciwKKwkJICAgdW5zaWduZWQgbG9uZyBwaHlzYWRkcikKIHsKLQkvKiBzYXZlIHRoZSBjdXJyZW50IHByb2Nlc3Mgc3BhY2UgYW5kIHBnZCAqLwotCXVuc2lnbmVkIGxvbmcgc3BhY2UgPSBtZnNwKDMpLCBwZ2QgPSBtZmN0bCgyNSk7Ci0KLQkvKiB3ZSBkb24ndCBtaW5kIHRha2luZyBpbnRlcnJ1cHRzIHNpbmNlIHRoZXkgbWF5IG5vdAotCSAqIGRvIGFueXRoaW5nIHdpdGggdXNlciBzcGFjZSwgYnV0IHdlIGNhbid0Ci0JICogYmUgcHJlZW1wdGVkIGhlcmUgKi8KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCS8qIG1ha2UgdXMgY3VycmVudCAqLwotCW10Y3RsKF9fcGEodm1hLT52bV9tbS0+cGdkKSwgMjUpOwotCW10c3Aodm1hLT52bV9tbS0+Y29udGV4dCwgMyk7Ci0KLQlmbHVzaF91c2VyX2RjYWNoZV9wYWdlKHZtYWRkcik7Ci0JaWYodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCi0JCWZsdXNoX3VzZXJfaWNhY2hlX3BhZ2Uodm1hZGRyKTsKLQotCS8qIHB1dCB0aGUgb2xkIGN1cnJlbnQgcHJvY2VzcyBiYWNrICovCi0JbXRzcChzcGFjZSwgMyk7Ci0JbXRjdGwocGdkLCAyNSk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9fZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCi17Ci0JaWYgKGxpa2VseSh2bWEtPnZtX21tLT5jb250ZXh0ID09IG1mc3AoMykpKSB7Ci0JCWZsdXNoX3VzZXJfZGNhY2hlX3BhZ2Uodm1hZGRyKTsKLQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQotCQkJZmx1c2hfdXNlcl9pY2FjaGVfcGFnZSh2bWFkZHIpOwotCX0gZWxzZSB7Ci0JCWZsdXNoX3VzZXJfY2FjaGVfcGFnZV9ub25fY3VycmVudCh2bWEsIHZtYWRkcik7Ci0JfQorCWZsdXNoX2RjYWNoZV9wYWdlX2FzbShwaHlzYWRkciwgdm1hZGRyKTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCWZsdXNoX2ljYWNoZV9wYWdlX2FzbShwaHlzYWRkciwgdm1hZGRyKTsKIH0KIAogdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTM0MiwxMCArMjc5LDggQEAKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1wbnQ7CiAJc3RydWN0IHByaW9fdHJlZV9pdGVyIGl0ZXI7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgYWRkciwgb2xkX2FkZHIgPSAwOwogCXBnb2ZmX3QgcGdvZmY7Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKLQogCiAJaWYgKG1hcHBpbmcgJiYgIW1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKSB7CiAJCXNldF9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpOwpAQCAtMzY5LDIwICszMDQsMTEgQEAKIAkJb2Zmc2V0ID0gKHBnb2ZmIC0gbXBudC0+dm1fcGdvZmYpIDw8IFBBR0VfU0hJRlQ7CiAJCWFkZHIgPSBtcG50LT52bV9zdGFydCArIG9mZnNldDsKIAotCQkvKiBGbHVzaCBpbnN0cnVjdGlvbnMgcHJvZHVjZSBub24gYWNjZXNzIHRsYiBtaXNzZXMuCi0JCSAqIE9uIFBBLCB3ZSBudWxsaWZ5IHRoZXNlIGluc3RydWN0aW9ucyByYXRoZXIgdGhhbgotCQkgKiB0YWtpbmcgYSBwYWdlIGZhdWx0IGlmIHRoZSBwdGUgZG9lc24ndCBleGlzdC4KLQkJICogVGhpcyBpcyBqdXN0IGZvciBzcGVlZC4gIElmIHRoZSBwYWdlIHRyYW5zbGF0aW9uCi0JCSAqIGlzbid0IHRoZXJlLCB0aGVyZSdzIG5vIHBvaW50IGV4Y2l0aW5nIHRoZQotCQkgKiBuYWR0bGIgaGFuZGxlciBpbnRvIGEgbnVsbGlmaWNhdGlvbiBmcmVuenkuCi0JCSAqCi0JCSAqIE1ha2Ugc3VyZSB3ZSByZWFsbHkgaGF2ZSB0aGlzIHBhZ2U6IHRoZSBwcml2YXRlCi0JCSAqIG1hcHBpbmdzIG1heSBjb3ZlciB0aGlzIGFyZWEgYnV0IGhhdmUgQ09XJ2QgdGhpcwotCQkgKiBwYXJ0aWN1bGFyIHBhZ2UuCi0JCSAqLwotICAJCWlmICh0cmFuc2xhdGlvbl9leGlzdHMobXBudCwgYWRkciwgcGZuKSkgewotCQkJX19mbHVzaF9jYWNoZV9wYWdlKG1wbnQsIGFkZHIpOwotCQkJYnJlYWs7CisJCWlmIChvbGRfYWRkciA9PSAwIHx8IChvbGRfYWRkciAmIChTSE1MQkEgLSAxKSkgIT0gKGFkZHIgJiAoU0hNTEJBIC0gMSkpKSB7CisJCQlfX2ZsdXNoX2NhY2hlX3BhZ2UobXBudCwgYWRkciwgcGFnZV90b19waHlzKHBhZ2UpKTsKKwkJCWlmIChvbGRfYWRkcikKKwkJCQlwcmludGsoS0VSTl9FUlIgIklORVFVSVZBTEVOVCBBTElBU0VTIDB4JWx4IGFuZCAweCVseCBpbiBmaWxlICVzXG4iLCBvbGRfYWRkciwgYWRkciwgbXBudC0+dm1fZmlsZSA/IG1wbnQtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lIDogIihudWxsKSIpOworCQkJb2xkX2FkZHIgPSBhZGRyOwogCQl9CiAJfQogCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKQEAgLTU3Myw3ICs0OTksNiBAQAogewogCUJVR19PTighdm1hLT52bV9tbS0+Y29udGV4dCk7CiAKLQlpZiAobGlrZWx5KHRyYW5zbGF0aW9uX2V4aXN0cyh2bWEsIHZtYWRkciwgcGZuKSkpCi0JCV9fZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkcik7CisJX19mbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwYWdlX3RvX3BoeXMocGZuX3RvX3BhZ2UocGZuKSkpOwogCiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDYzMzdhZGUuLmU1NDc3MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCkBAIC0yMjUsMjIgKzIyNSwxMyBAQAogI2lmbmRlZiBDT05GSUdfNjRCSVQKIAkvKgogCSAqIG5haXRsYiBtaXNzIGludGVycnVwdGlvbiBoYW5kbGVyIChwYXJpc2MgMS4xIC0gMzIgYml0KQotCSAqCi0JICogTm90ZTogbmFpdGxiIG1pc3NlcyB3aWxsIGJlIHRyZWF0ZWQKLQkgKiBhcyBhbiBvcmRpbmFyeSBpdGxiIG1pc3MgZm9yIG5vdy4KLQkgKiBIb3dldmVyLCBub3RlIHRoYXQgbmFpdGxiIG1pc3NlcwotCSAqIGhhdmUgdGhlIGZhdWx0aW5nIGFkZHJlc3MgaW4gdGhlCi0JICogSU9SL0lTUi4KIAkgKi8KIAogCS5tYWNybwluYWl0bGJfMTEgY29kZQogCiAJbWZjdGwJJWlzcixzcGMKLQliCWl0bGJfbWlzc18xMQorCWIJbmFpdGxiX21pc3NfMTEKIAltZmN0bCAJJWlvcix2YQotCS8qIEZJWE1FOiBJZiB1c2VyIGNhdXNlcyBhIG5haXRsYiBtaXNzLCB0aGUgcHJpdiBsZXZlbCBtYXkgbm90IGJlIGluCi0JICogbG93ZXIgYml0cyBvZiB2YSwgd2hlcmUgdGhlIGl0bGIgbWlzcyBoYW5kbGVyIGlzIGV4cGVjdGluZyB0aGVtCi0JICovCiAKIAkuYWxpZ24JCTMyCiAJLmVuZG0KQEAgLTI0OCwyNiArMjM5LDE3IEBACiAJCiAJLyoKIAkgKiBuYWl0bGIgbWlzcyBpbnRlcnJ1cHRpb24gaGFuZGxlciAocGFyaXNjIDIuMCkKLQkgKgotCSAqIE5vdGU6IG5haXRsYiBtaXNzZXMgd2lsbCBiZSB0cmVhdGVkCi0JICogYXMgYW4gb3JkaW5hcnkgaXRsYiBtaXNzIGZvciBub3cuCi0JICogSG93ZXZlciwgbm90ZSB0aGF0IG5haXRsYiBtaXNzZXMKLQkgKiBoYXZlIHRoZSBmYXVsdGluZyBhZGRyZXNzIGluIHRoZQotCSAqIElPUi9JU1IuCiAJICovCiAKIAkubWFjcm8JbmFpdGxiXzIwIGNvZGUKIAogCW1mY3RsCSVpc3Isc3BjCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JYiAgICAgICBpdGxiX21pc3NfMjB3CisJYiAgICAgICBuYWl0bGJfbWlzc18yMHcKICNlbHNlCi0JYglpdGxiX21pc3NfMjAKKwliCW5haXRsYl9taXNzXzIwCiAjZW5kaWYKIAltZmN0bCAJJWlvcix2YQotCS8qIEZJWE1FOiBJZiB1c2VyIGNhdXNlcyBhIG5haXRsYiBtaXNzLCB0aGUgcHJpdiBsZXZlbCBtYXkgbm90IGJlIGluCi0JICogbG93ZXIgYml0cyBvZiB2YSwgd2hlcmUgdGhlIGl0bGIgbWlzcyBoYW5kbGVyIGlzIGV4cGVjdGluZyB0aGVtCi0JICovCiAKIAkuYWxpZ24JCTMyCiAJLmVuZG0KQEAgLTU4MSw3ICs1NjMsMjQgQEAKIAljb3B5CQlcdmEsXHRtcDEKIAlkZXBpCQkwLDMxLDIzLFx0bXAxCiAJY21wYixDT05EKDw+KSxuCVx0bXAsXHRtcDEsXGZhdWx0Ci0JbGRpCQkoX1BBR0VfRElSVFl8X1BBR0VfV1JJVEV8X1BBR0VfUkVBRCksXHByb3QKKwltZmN0bAkJJWNyMTksXHRtcAkvKiBpaXIgKi8KKwkvKiBnZXQgdGhlIG9wY29kZSAoZmlyc3Qgc2l4IGJpdHMpIGludG8gXHRtcCAqLworCWV4dHJ3LHUJCVx0bXAsNSw2LFx0bXAKKwkvKgorCSAqIE9ubHkgc2V0dGluZyB0aGUgVCBiaXQgcHJldmVudHMgZGF0YSBjYWNoZSBtb3ZlaW4KKwkgKiBTZXR0aW5nIGFjY2VzcyByaWdodHMgdG8gemVybyBwcmV2ZW50cyBpbnN0cnVjdGlvbiBjYWNoZSBtb3ZlaW4KKwkgKgorCSAqIE5vdGUgc3VidGxldHkgaGVyZTogX1BBR0VfR0FURVdBWSwgX1BBR0VfRVhFQyBhbmQgX1BBR0VfV1JJVEUgZ28KKwkgKiB0byB0eXBlIGZpZWxkIGFuZCBfUEFHRV9SRUFEIGdvZXMgdG8gdG9wIGJpdCBvZiBQTDEKKwkgKi8KKwlsZGkJCShfUEFHRV9SRUZUUkFQfF9QQUdFX1JFQUR8X1BBR0VfV1JJVEUpLFxwcm90CisJLyoKKwkgKiBzbyBpZiB0aGUgb3Bjb2RlIGlzIG9uZSAoaS5lLiB0aGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQKKwkgKiBpbnN0cnVjdGlvbikgbnVsbGlmeSB0aGUgbmV4dCBsb2FkIHNvIFxwcm90IGlzIG9ubHkgVC4KKwkgKiBPdGhlcndpc2UgdGhpcyBpcyBhIG5vcm1hbCBkYXRhIG9wZXJhdGlvbgorCSAqLworCWNtcGljbHIsPQkweDAxLFx0bXAsJXIwCisJbGRpCQkoX1BBR0VfRElSVFl8X1BBR0VfUkVBRHxfUEFHRV9XUklURSksXHByb3QKIAlkZXBkLHoJCVxwcm90LDgsNyxccHJvdAogCS8qCiAJICogT0ssIGl0IGlzIGluIHRoZSB0ZW1wIGFsaWFzIHJlZ2lvbiwgY2hlY2sgd2hldGhlciAiZnJvbSIgb3IgInRvIi4KQEAgLTYzMSwxMSArNjMwLDcgQEAKIAlkZWYJCTEzCiAJZGVmCQkxNAogCWR0bGJfMjAJCTE1Ci0jaWYgMAogCW5haXRsYl8yMAkxNgotI2Vsc2UKLQlkZWYgICAgICAgICAgICAgMTYKLSNlbmRpZgogCW5hZHRsYl8yMAkxNwogCWRlZgkJMTgKIAlkZWYJCTE5CkBAIC02NzgsMTEgKzY3Myw3IEBACiAJZGVmCQkxMwogCWRlZgkJMTQKIAlkdGxiXzExCQkxNQotI2lmIDAKIAluYWl0bGJfMTEJMTYKLSNlbHNlCi0JZGVmICAgICAgICAgICAgIDE2Ci0jZW5kaWYKIAluYWR0bGJfMTEJMTcKIAlkZWYJCTE4CiAJZGVmCQkxOQpAQCAtMTIwMyw3ICsxMTk0LDcgQEAKIAlnZXRfcGdkCQlzcGMscHRwCiAJc3BhY2VfY2hlY2sJc3BjLHQwLG5hZHRsYl9mYXVsdAogCi0JTDNfcHRlcAkJcHRwLHB0ZSx0MCx2YSxuYWR0bGJfY2hlY2tfZmx1c2hfMjB3CisJTDNfcHRlcAkJcHRwLHB0ZSx0MCx2YSxuYWR0bGJfY2hlY2tfYWxpYXNfMjB3CiAKIAl1cGRhdGVfcHRlcAlwdHAscHRlLHQwLHQxCiAKQEAgLTEyMTQsMTYgKzEyMDUsOCBAQAogCXJmaXIKIAlub3AKIAotbmFkdGxiX2NoZWNrX2ZsdXNoXzIwdzoKLQliYiw+PSxuICAgICAgICAgIHB0ZSxfUEFHRV9GTFVTSF9CSVQsbmFkdGxiX2VtdWxhdGUKLQotCS8qIEluc2VydCBhICJmbHVzaCBvbmx5IiB0cmFuc2xhdGlvbiAqLwotCi0JZGVwZGkseiAgICAgICAgIDcsNywzLHByb3QKLQlkZXBkaSAgICAgICAgICAgMSwxMCwxLHByb3QKLQotCS8qIERyb3AgcHJvdCBiaXRzIGZyb20gcHRlIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWR0bGJ0ICovCi0JY29udmVydF9mb3JfdGxiX2luc2VydDIwIHB0ZQorbmFkdGxiX2NoZWNrX2FsaWFzXzIwdzoKKwlkb19hbGlhcwlzcGMsdDAsdDEsdmEscHRlLHByb3QsbmFkdGxiX2VtdWxhdGUKIAogCWlkdGxidCAgICAgICAgICBwdGUscHJvdAogCkBAIC0xMjU1LDI1ICsxMjM4LDcgQEAKIAlub3AKIAogZHRsYl9jaGVja19hbGlhc18xMToKLQotCS8qIENoZWNrIHRvIHNlZSBpZiBmYXVsdCBpcyBpbiB0aGUgdGVtcG9yYXJ5IGFsaWFzIHJlZ2lvbiAqLwotCi0JY21waWIsPD4sbiAgICAgIDAsc3BjLGR0bGJfZmF1bHQgLyogZm9yd2FyZCAqLwotCWxkaWwgICAgICAgICAgICBMJShUTVBBTElBU19NQVBfU1RBUlQpLHQwCi0JY29weSAgICAgICAgICAgIHZhLHQxCi0JZGVwd2kgICAgICAgICAgIDAsMzEsMjMsdDEKLQljbXBiLDw+LG4gICAgICAgdDAsdDEsZHRsYl9mYXVsdCAvKiBmb3J3YXJkICovCi0JbGRpICAgICAgICAgICAgIChfUEFHRV9ESVJUWXxfUEFHRV9XUklURXxfUEFHRV9SRUFEKSxwcm90Ci0JZGVwdyx6ICAgICAgICAgIHByb3QsOCw3LHByb3QKLQotCS8qCi0JICogT0ssIGl0IGlzIGluIHRoZSB0ZW1wIGFsaWFzIHJlZ2lvbiwgY2hlY2sgd2hldGhlciAiZnJvbSIgb3IgInRvIi4KLQkgKiBDaGVjayAic3VidGxlIiBub3RlIGluIHBhY2FjaGUuUyByZTogcjIzL3IyNi4KLQkgKi8KLQotCWV4dHJ3LHUsPSAgICAgICB2YSw5LDEscjAKLQlvcix0ciAgICAgICAgICAgJXIyMywlcjAscHRlICAgIC8qIElmICJmcm9tIiB1c2UgImZyb20iIHBhZ2UgKi8KLQlvciAgICAgICAgICAgICAgJXIyNiwlcjAscHRlICAgIC8qIGVsc2UgInRvIiwgdXNlICJ0byIgcGFnZSAgKi8KKwlkb19hbGlhcwlzcGMsdDAsdDEsdmEscHRlLHByb3QsZHRsYl9mYXVsdAogCiAJaWR0bGJhICAgICAgICAgIHB0ZSwodmEpCiAJaWR0bGJwICAgICAgICAgIHByb3QsKHZhKQpAQCAtMTI4Niw3ICsxMjUxLDcgQEAKIAogCXNwYWNlX2NoZWNrCXNwYyx0MCxuYWR0bGJfZmF1bHQKIAotCUwyX3B0ZXAJCXB0cCxwdGUsdDAsdmEsbmFkdGxiX2NoZWNrX2ZsdXNoXzExCisJTDJfcHRlcAkJcHRwLHB0ZSx0MCx2YSxuYWR0bGJfY2hlY2tfYWxpYXNfMTEKIAogCXVwZGF0ZV9wdGVwCXB0cCxwdGUsdDAsdDEKIApAQCAtMTMwNCwyNiArMTI2OSwxMSBAQAogCXJmaXIKIAlub3AKIAotbmFkdGxiX2NoZWNrX2ZsdXNoXzExOgotCWJiLD49LG4gICAgICAgICAgcHRlLF9QQUdFX0ZMVVNIX0JJVCxuYWR0bGJfZW11bGF0ZQorbmFkdGxiX2NoZWNrX2FsaWFzXzExOgorCWRvX2FsaWFzCXNwYyx0MCx0MSx2YSxwdGUscHJvdCxuYWR0bGJfZW11bGF0ZQogCi0JLyogSW5zZXJ0IGEgImZsdXNoIG9ubHkiIHRyYW5zbGF0aW9uICovCi0KLQl6ZGVwaSAgICAgICAgICAgNyw3LDMscHJvdAotCWRlcGkgICAgICAgICAgICAxLDEwLDEscHJvdAotCi0JLyogR2V0IHJpZCBvZiBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpZHRsYmEgKi8KLQotCWRlcGkJCTAsMzEsQVNNX1BGTl9QVEVfU0hJRlQscHRlCi0JU0hSUkVHCQlwdGUsKEFTTV9QRk5fUFRFX1NISUZULSgzMS0yNikpLHB0ZQotCi0JbWZzcAkJJXNyMSx0MCAgLyogU2F2ZSBzcjEgc28gd2UgY2FuIHVzZSBpdCBpbiB0bGIgaW5zZXJ0cyAqLwotCW10c3AJCXNwYywlc3IxCi0KLQlpZHRsYmEJCXB0ZSwoJXNyMSx2YSkKLQlpZHRsYnAJCXByb3QsKCVzcjEsdmEpCi0KLQltdHNwCQl0MCwgJXNyMQkvKiBSZXN0b3JlIHNyMSAqLworCWlkdGxiYSAgICAgICAgICBwdGUsKHZhKQorCWlkdGxicCAgICAgICAgICBwcm90LCh2YSkKIAogCXJmaXIKIAlub3AKQEAgLTEzNTksNyArMTMwOSw3IEBACiAKIAlzcGFjZV9jaGVjawlzcGMsdDAsbmFkdGxiX2ZhdWx0CiAKLQlMMl9wdGVwCQlwdHAscHRlLHQwLHZhLG5hZHRsYl9jaGVja19mbHVzaF8yMAorCUwyX3B0ZXAJCXB0cCxwdGUsdDAsdmEsbmFkdGxiX2NoZWNrX2FsaWFzXzIwCiAKIAl1cGRhdGVfcHRlcAlwdHAscHRlLHQwLHQxCiAKQEAgLTEzNzIsMjEgKzEzMjIsMTQgQEAKIAlyZmlyCiAJbm9wCiAKLW5hZHRsYl9jaGVja19mbHVzaF8yMDoKLQliYiw+PSxuICAgICAgICAgIHB0ZSxfUEFHRV9GTFVTSF9CSVQsbmFkdGxiX2VtdWxhdGUKLQotCS8qIEluc2VydCBhICJmbHVzaCBvbmx5IiB0cmFuc2xhdGlvbiAqLwotCi0JZGVwZGkseiAgICAgICAgIDcsNywzLHByb3QKLQlkZXBkaSAgICAgICAgICAgMSwxMCwxLHByb3QKLQotCS8qIERyb3AgcHJvdCBiaXRzIGZyb20gcHRlIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWR0bGJ0ICovCi0JY29udmVydF9mb3JfdGxiX2luc2VydDIwIHB0ZQorbmFkdGxiX2NoZWNrX2FsaWFzXzIwOgorCWRvX2FsaWFzCXNwYyx0MCx0MSx2YSxwdGUscHJvdCxuYWR0bGJfZW11bGF0ZQogCiAJaWR0bGJ0ICAgICAgICAgIHB0ZSxwcm90CiAKIAlyZmlyCiAJbm9wCisKICNlbmRpZgogCiBuYWR0bGJfZW11bGF0ZToKQEAgLTE0ODQsNiArMTQyNywzNiBAQAogCXJmaXIKIAlub3AKIAorbmFpdGxiX21pc3NfMjB3OgorCisJLyoKKwkgKiBJIG1pc3MgaXMgYSBsaXR0bGUgZGlmZmVyZW50LCBzaW5jZSB3ZSBhbGxvdyB1c2VycyB0byBmYXVsdAorCSAqIG9uIHRoZSBnYXRld2F5IHBhZ2Ugd2hpY2ggaXMgaW4gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgorCSAqLworCisJc3BhY2VfYWRqdXN0CXNwYyx2YSx0MAorCWdldF9wZ2QJCXNwYyxwdHAKKwlzcGFjZV9jaGVjawlzcGMsdDAsbmFpdGxiX2ZhdWx0CisKKwlMM19wdGVwCQlwdHAscHRlLHQwLHZhLG5haXRsYl9jaGVja19hbGlhc18yMHcKKworCXVwZGF0ZV9wdGVwCXB0cCxwdGUsdDAsdDEKKworCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QKKworCWlpdGxidCAgICAgICAgICBwdGUscHJvdAorCisJcmZpcgorCW5vcAorCituYWl0bGJfY2hlY2tfYWxpYXNfMjB3OgorCWRvX2FsaWFzCXNwYyx0MCx0MSx2YSxwdGUscHJvdCxuYWl0bGJfZmF1bHQKKworCWlpdGxidAkJcHRlLHByb3QKKworCXJmaXIKKwlub3AKKwogI2Vsc2UKIAogaXRsYl9taXNzXzExOgpAQCAtMTUwOCw2ICsxNDgxLDM4IEBACiAJcmZpcgogCW5vcAogCituYWl0bGJfbWlzc18xMToKKwlnZXRfcGdkCQlzcGMscHRwCisKKwlzcGFjZV9jaGVjawlzcGMsdDAsbmFpdGxiX2ZhdWx0CisKKwlMMl9wdGVwCQlwdHAscHRlLHQwLHZhLG5haXRsYl9jaGVja19hbGlhc18xMQorCisJdXBkYXRlX3B0ZXAJcHRwLHB0ZSx0MCx0MQorCisJbWFrZV9pbnNlcnRfdGxiXzExCXNwYyxwdGUscHJvdAorCisJbWZzcAkJJXNyMSx0MCAgLyogU2F2ZSBzcjEgc28gd2UgY2FuIHVzZSBpdCBpbiB0bGIgaW5zZXJ0cyAqLworCW10c3AJCXNwYywlc3IxCisKKwlpaXRsYmEJCXB0ZSwoJXNyMSx2YSkKKwlpaXRsYnAJCXByb3QsKCVzcjEsdmEpCisKKwltdHNwCQl0MCwgJXNyMQkvKiBSZXN0b3JlIHNyMSAqLworCisJcmZpcgorCW5vcAorCituYWl0bGJfY2hlY2tfYWxpYXNfMTE6CisJZG9fYWxpYXMJc3BjLHQwLHQxLHZhLHB0ZSxwcm90LGl0bGJfZmF1bHQKKworCWlpdGxiYSAgICAgICAgICBwdGUsKCVzcjAsIHZhKQorCWlpdGxicCAgICAgICAgICBwcm90LCglc3IwLCB2YSkKKworCXJmaXIKKwlub3AKKworCiBpdGxiX21pc3NfMjA6CiAJZ2V0X3BnZAkJc3BjLHB0cAogCkBAIC0xNTI2LDYgKzE1MzEsMzIgQEAKIAlyZmlyCiAJbm9wCiAKK25haXRsYl9taXNzXzIwOgorCWdldF9wZ2QJCXNwYyxwdHAKKworCXNwYWNlX2NoZWNrCXNwYyx0MCxuYWl0bGJfZmF1bHQKKworCUwyX3B0ZXAJCXB0cCxwdGUsdDAsdmEsbmFpdGxiX2NoZWNrX2FsaWFzXzIwCisKKwl1cGRhdGVfcHRlcAlwdHAscHRlLHQwLHQxCisKKwltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90CisKKwlmX2V4dGVuZAlwdGUsdDAKKworCWlpdGxidCAgICAgICAgICBwdGUscHJvdAorCisJcmZpcgorCW5vcAorCituYWl0bGJfY2hlY2tfYWxpYXNfMjA6CisJZG9fYWxpYXMJc3BjLHQwLHQxLHZhLHB0ZSxwcm90LG5haXRsYl9mYXVsdAorCisJaWl0bGJ0ICAgICAgICAgIHB0ZSxwcm90CisKKwlyZmlyCisJbm9wCisKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHXzY0QklUCkBAIC0xNjYyLDYgKzE2OTMsMTAgQEAKIAliICAgICAgICAgICAgICAgaW50cl9zYXZlCiAJbGRpICAgICAgICAgICAgIDE3LCVyOAogCituYWl0bGJfZmF1bHQ6CisJYiAgICAgICAgICAgICAgIGludHJfc2F2ZQorCWxkaSAgICAgICAgICAgICAxNiwlcjgKKwogZHRsYl9mYXVsdDoKIAliICAgICAgICAgICAgICAgaW50cl9zYXZlCiAJbGRpICAgICAgICAgICAgIDE1LCVyOApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCmluZGV4IGQ3ZDk0YjguLmNiNDUwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKQEAgLTUyLDkgKzUyLDkgQEAKICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbG9jYWxfYWNrX2VpZW0pID0gfjBVTDsKIAotc3RhdGljIHZvaWQgY3B1X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBjcHVfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXVuc2lnbmVkIGxvbmcgZWlycl9iaXQgPSBFSUVNX01BU0soaXJxKTsKKwl1bnNpZ25lZCBsb25nIGVpcnJfYml0ID0gRUlFTV9NQVNLKGQtPmlycSk7CiAKIAljcHVfZWllbSAmPSB+ZWlycl9iaXQ7CiAJLyogRG8gbm90aGluZyBvbiB0aGUgb3RoZXIgQ1BVcy4gIElmIHRoZXkgZ2V0IHRoaXMgaW50ZXJydXB0LApAQCAtNjMsNyArNjMsNyBAQAogCSAqIHRoZW4gZ2V0cyBkaXNhYmxlZCAqLwogfQogCi1zdGF0aWMgdm9pZCBjcHVfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgX19jcHVfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZWlycl9iaXQgPSBFSUVNX01BU0soaXJxKTsKIApAQCAtNzUsOSArNzUsMTQgQEAKIAlzbXBfc2VuZF9hbGxfbm9wKCk7CiB9CiAKLXZvaWQgY3B1X2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGNwdV91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBFSUVNX01BU0soaXJxKTsKKwlfX2NwdV91bm1hc2tfaXJxKGQtPmlycSk7Cit9CisKK3ZvaWQgY3B1X2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEVJRU1fTUFTSyhkLT5pcnEpOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBDbGVhciBpbiBFSUVNIHNvIHdlIGNhbiBubyBsb25nZXIgcHJvY2VzcyAqLwpAQCAtOTAsOSArOTUsOSBAQAogCW10Y3RsKG1hc2ssIDIzKTsKIH0KIAotdm9pZCBjcHVfZW9pX2lycSh1bnNpZ25lZCBpbnQgaXJxKQordm9pZCBjcHVfZW9pX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gRUlFTV9NQVNLKGlycSk7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gRUlFTV9NQVNLKGQtPmlycSk7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIHNldCBpdCBpbiB0aGUgZWllbXMtLS1pdCdzIG5vIGxvbmdlciBpbiBwcm9jZXNzICovCkBAIC0xMDMsMTUgKzEwOCwxNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotaW50IGNwdV9jaGVja19hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKK2ludCBjcHVfY2hlY2tfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKIHsKIAlpbnQgY3B1X2Rlc3Q7CiAKIAkvKiB0aW1lciBhbmQgaXBpIGhhdmUgdG8gYWx3YXlzIGJlIHJlY2VpdmVkIG9uIGFsbCBDUFVzICovCi0JaWYgKENIRUNLX0lSUV9QRVJfQ1BVKGlycSkpIHsKKwlpZiAoQ0hFQ0tfSVJRX1BFUl9DUFUoaXJxX3RvX2Rlc2MoZC0+aXJxKS0+c3RhdHVzKSkgewogCQkvKiBCYWQgbGludXggZGVzaWduIGRlY2lzaW9uLiAgVGhlIG1hc2sgaGFzIGFscmVhZHkKLQkJICogYmVlbiBzZXQ7IHdlIG11c3QgcmVzZXQgaXQgKi8KLQkJY3B1bWFza19zZXRhbGwoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSk7CisJCSAqIGJlZW4gc2V0OyB3ZSBtdXN0IHJlc2V0IGl0LiBXaWxsIGZpeCAtIHRnbHgKKwkJICovCisJCWNwdW1hc2tfc2V0YWxsKGQtPmFmZmluaXR5KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMjEsMzMgKzEyNywzNCBAQAogCXJldHVybiBjcHVfZGVzdDsKIH0KIAotc3RhdGljIGludCBjcHVfc2V0X2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKK3N0YXRpYyBpbnQgY3B1X3NldF9hZmZpbml0eV9pcnEoc3RydWN0IGlycV9kYXRhICpkLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCwKKwkJCQlib29sIGZvcmNlKQogewogCWludCBjcHVfZGVzdDsKIAotCWNwdV9kZXN0ID0gY3B1X2NoZWNrX2FmZmluaXR5KGlycSwgZGVzdCk7CisJY3B1X2Rlc3QgPSBjcHVfY2hlY2tfYWZmaW5pdHkoZCwgZGVzdCk7CiAJaWYgKGNwdV9kZXN0IDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksIGRlc3QpOworCWNwdW1hc2tfY29weShkLT5hZmZpbml0eSwgZGVzdCk7CiAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwdV9pbnRlcnJ1cHRfdHlwZSA9IHsKLQkubmFtZQkJPSAiQ1BVIiwKLQkubWFzawkJPSBjcHVfbWFza19pcnEsCi0JLnVubWFzawkJPSBjcHVfdW5tYXNrX2lycSwKLQkuYWNrCQk9IGNwdV9hY2tfaXJxLAotCS5lb2kJCT0gY3B1X2VvaV9pcnEsCisJLm5hbWUJCQk9ICJDUFUiLAorCS5pcnFfbWFzawkJPSBjcHVfbWFza19pcnEsCisJLmlycV91bm1hc2sJCT0gY3B1X3VubWFza19pcnEsCisJLmlycV9hY2sJCT0gY3B1X2Fja19pcnEsCisJLmlycV9lb2kJCT0gY3B1X2VvaV9pcnEsCiAjaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBjcHVfc2V0X2FmZmluaXR5X2lycSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IGNwdV9zZXRfYWZmaW5pdHlfaXJxLAogI2VuZGlmCiAJLyogWFhYOiBOZWVkcyB0byBiZSB3cml0dGVuLiAgV2UgbWFuYWdlZCB3aXRob3V0IGl0IHNvIGZhciwgYnV0CiAJICogd2UgcmVhbGx5IG91Z2h0IHRvIHdyaXRlIGl0LgogCSAqLwotCS5yZXRyaWdnZXIJPSBOVUxMLAorCS5pcnFfcmV0cmlnZ2VyCT0gTlVMTCwKIH07CiAKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQpAQCAtMTgxLDcgKzE4OCw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZW5kaWYKIAotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmlycV9kYXRhLmNoaXAtPm5hbWUpOwogI2lmbmRlZiBQQVJJU0NfSVJRX0NSMTZfQ09VTlRTCiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCkBAIC0yMzMsMTQgKzI0MCwxNCBAQAogewogCWlmIChpcnFfZGVzY1tpcnFdLmFjdGlvbikKIAkJcmV0dXJuIC1FQlVTWTsKLQlpZiAoaXJxX2Rlc2NbaXJxXS5jaGlwICE9ICZjcHVfaW50ZXJydXB0X3R5cGUpCisJaWYgKGdldF9pcnFfY2hpcChpcnEpICE9ICZjcHVfaW50ZXJydXB0X3R5cGUpCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBmb3IgaW9zYXBpYyBpbnRlcnJ1cHRzICovCiAJaWYgKHR5cGUpIHsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgdHlwZSwgaGFuZGxlX3BlcmNwdV9pcnEpOwogCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGRhdGEpOwotCQljcHVfdW5tYXNrX2lycShpcnEpOworCQlfX2NwdV91bm1hc2tfaXJxKGlycSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjg5LDcgKzI5Niw4IEBACiB1bnNpZ25lZCBsb25nIHR4bl9hZmZpbml0eV9hZGRyKHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCWNwdW1hc2tfY29weShpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBjcHVtYXNrX29mKGNwdSkpOworCXN0cnVjdCBpcnFfZGF0YSAqZCA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKKwljcHVtYXNrX2NvcHkoZC0+YWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7CiAjZW5kaWYKIAogCXJldHVybiBwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLnR4bl9hZGRyOwpAQCAtMzMzLDYgKzM0MSw3IEBACiAJdW5zaWduZWQgbG9uZyBlaXJyX3ZhbDsKIAlpbnQgaXJxLCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAjaWZkZWYgQ09ORklHX1NNUAorCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAljcHVtYXNrX3QgZGVzdDsKICNlbmRpZgogCkBAIC0zNDYsOCArMzU1LDkgQEAKIAlpcnEgPSBlaXJyX3RvX2lycShlaXJyX3ZhbCk7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JY3B1bWFza19jb3B5KCZkZXN0LCBpcnFfZGVzY1tpcnFdLmFmZmluaXR5KTsKLQlpZiAoQ0hFQ0tfSVJRX1BFUl9DUFUoaXJxX2Rlc2NbaXJxXS5zdGF0dXMpICYmCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJY3B1bWFza19jb3B5KCZkZXN0LCBkZXNjLT5pcnFfZGF0YS5hZmZpbml0eSk7CisJaWYgKENIRUNLX0lSUV9QRVJfQ1BVKGRlc2MtPnN0YXR1cykgJiYKIAkgICAgIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGRlc3QpKSB7CiAJCWludCBjcHUgPSBmaXJzdF9jcHUoZGVzdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFjYWNoZS5TCmluZGV4IDA5Yjc3YjIuLmE4NTgyMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhY2FjaGUuUwpAQCAtNjA4LDYgKzYwOCwxMzAgQEAKIAkucHJvY2VuZAogRU5EUFJPQyhfX2NsZWFyX3VzZXJfcGFnZV9hc20pCiAKK0VOVFJZKGZsdXNoX2RjYWNoZV9wYWdlX2FzbSkKKwkucHJvYworCS5jYWxsaW5mbyBOT19DQUxMUworCS5lbnRyeQorCisJbGRpbAkJTCUoVE1QQUxJQVNfTUFQX1NUQVJUKSwgJXIyOAorI2lmZGVmIENPTkZJR182NEJJVAorI2lmIChUTVBBTElBU19NQVBfU1RBUlQgPj0gMHg4MDAwMDAwMCkKKwlkZXBkaQkJMCwgMzEsMzIsICVyMjgJCS8qIGNsZWFyIGFueSBzaWduIGV4dGVuc2lvbiAqLworCS8qIEZJWE1FOiBwYWdlIHNpemUgZGVwZW5kZW5kICovCisjZW5kaWYKKwlleHRyZCx1CQklcjI2LCA1NiwzMiwgJXIyNgkvKiBjb252ZXJ0IHBoeXMgYWRkciB0byB0bGIgaW5zZXJ0IGZvcm1hdCAqLworCWRlcGQJCSVyMjUsIDYzLDIyLCAlcjI4CS8qIEZvcm0gYWxpYXNlZCB2aXJ0dWFsIGFkZHJlc3MgJ3RvJyAqLworCWRlcGRpCQkwLCA2MywxMiwgJXIyOAkJLyogQ2xlYXIgYW55IG9mZnNldCBiaXRzICovCisjZWxzZQorCWV4dHJ3LHUJCSVyMjYsIDI0LDI1LCAlcjI2CS8qIGNvbnZlcnQgcGh5cyBhZGRyIHRvIHRsYiBpbnNlcnQgZm9ybWF0ICovCisJZGVwdwkJJXIyNSwgMzEsMjIsICVyMjgJLyogRm9ybSBhbGlhc2VkIHZpcnR1YWwgYWRkcmVzcyAndG8nICovCisJZGVwd2kJCTAsIDMxLDEyLCAlcjI4CQkvKiBDbGVhciBhbnkgb2Zmc2V0IGJpdHMgKi8KKyNlbmRpZgorCisJLyogUHVyZ2UgYW55IG9sZCB0cmFuc2xhdGlvbiAqLworCisJcGR0bGIJCTAoJXIyOCkKKworCWxkaWwJCUwlZGNhY2hlX3N0cmlkZSwgJXIxCisJbGR3CQlSJWRjYWNoZV9zdHJpZGUoJXIxKSwgJXIxCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlkZXBkaSx6CQkxLCA2My1QQUdFX1NISUZULDEsICVyMjUKKyNlbHNlCisJZGVwd2ksegkJMSwgMzEtUEFHRV9TSElGVCwxLCAlcjI1CisjZW5kaWYKKwlhZGQJCSVyMjgsICVyMjUsICVyMjUKKwlzdWIJCSVyMjUsICVyMSwgJXIyNQorCisKKzE6ICAgICAgZmRjLG0JCSVyMSglcjI4KQorCWZkYyxtCQklcjEoJXIyOCkKKwlmZGMsbQkJJXIxKCVyMjgpCisJZmRjLG0JCSVyMSglcjI4KQorCWZkYyxtCQklcjEoJXIyOCkKKwlmZGMsbQkJJXIxKCVyMjgpCisJZmRjLG0JCSVyMSglcjI4KQorCWZkYyxtCQklcjEoJXIyOCkKKwlmZGMsbQkJJXIxKCVyMjgpCisJZmRjLG0JCSVyMSglcjI4KQorCWZkYyxtCQklcjEoJXIyOCkKKwlmZGMsbQkJJXIxKCVyMjgpCisJZmRjLG0JCSVyMSglcjI4KQorCWZkYyxtCQklcjEoJXIyOCkKKwlmZGMsbQkJJXIxKCVyMjgpCisJY21wYixDT05EKDw8KQkJJXIyOCwgJXIyNSwxYgorCWZkYyxtCQklcjEoJXIyOCkKKworCXN5bmMKKwlidgkJJXIwKCVyMikKKwlwZHRsYgkJKCVyMjUpCisJLmV4aXQKKworCS5wcm9jZW5kCitFTkRQUk9DKGZsdXNoX2RjYWNoZV9wYWdlX2FzbSkKKworRU5UUlkoZmx1c2hfaWNhY2hlX3BhZ2VfYXNtKQorCS5wcm9jCisJLmNhbGxpbmZvIE5PX0NBTExTCisJLmVudHJ5CisKKwlsZGlsCQlMJShUTVBBTElBU19NQVBfU1RBUlQpLCAlcjI4CisjaWZkZWYgQ09ORklHXzY0QklUCisjaWYgKFRNUEFMSUFTX01BUF9TVEFSVCA+PSAweDgwMDAwMDAwKQorCWRlcGRpCQkwLCAzMSwzMiwgJXIyOAkJLyogY2xlYXIgYW55IHNpZ24gZXh0ZW5zaW9uICovCisJLyogRklYTUU6IHBhZ2Ugc2l6ZSBkZXBlbmRlbmQgKi8KKyNlbmRpZgorCWV4dHJkLHUJCSVyMjYsIDU2LDMyLCAlcjI2CS8qIGNvbnZlcnQgcGh5cyBhZGRyIHRvIHRsYiBpbnNlcnQgZm9ybWF0ICovCisJZGVwZAkJJXIyNSwgNjMsMjIsICVyMjgJLyogRm9ybSBhbGlhc2VkIHZpcnR1YWwgYWRkcmVzcyAndG8nICovCisJZGVwZGkJCTAsIDYzLDEyLCAlcjI4CQkvKiBDbGVhciBhbnkgb2Zmc2V0IGJpdHMgKi8KKyNlbHNlCisJZXh0cncsdQkJJXIyNiwgMjQsMjUsICVyMjYJLyogY29udmVydCBwaHlzIGFkZHIgdG8gdGxiIGluc2VydCBmb3JtYXQgKi8KKwlkZXB3CQklcjI1LCAzMSwyMiwgJXIyOAkvKiBGb3JtIGFsaWFzZWQgdmlydHVhbCBhZGRyZXNzICd0bycgKi8KKwlkZXB3aQkJMCwgMzEsMTIsICVyMjgJCS8qIENsZWFyIGFueSBvZmZzZXQgYml0cyAqLworI2VuZGlmCisKKwkvKiBQdXJnZSBhbnkgb2xkIHRyYW5zbGF0aW9uICovCisKKwlwaXRsYgkJKCVzcjAsJXIyOCkKKworCWxkaWwJCUwlaWNhY2hlX3N0cmlkZSwgJXIxCisJbGR3CQlSJWljYWNoZV9zdHJpZGUoJXIxKSwgJXIxCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlkZXBkaSx6CQkxLCA2My1QQUdFX1NISUZULDEsICVyMjUKKyNlbHNlCisJZGVwd2ksegkJMSwgMzEtUEFHRV9TSElGVCwxLCAlcjI1CisjZW5kaWYKKwlhZGQJCSVyMjgsICVyMjUsICVyMjUKKwlzdWIJCSVyMjUsICVyMSwgJXIyNQorCisKKzE6ICAgICAgZmljLG0JCSVyMSglcjI4KQorCWZpYyxtCQklcjEoJXIyOCkKKwlmaWMsbQkJJXIxKCVyMjgpCisJZmljLG0JCSVyMSglcjI4KQorCWZpYyxtCQklcjEoJXIyOCkKKwlmaWMsbQkJJXIxKCVyMjgpCisJZmljLG0JCSVyMSglcjI4KQorCWZpYyxtCQklcjEoJXIyOCkKKwlmaWMsbQkJJXIxKCVyMjgpCisJZmljLG0JCSVyMSglcjI4KQorCWZpYyxtCQklcjEoJXIyOCkKKwlmaWMsbQkJJXIxKCVyMjgpCisJZmljLG0JCSVyMSglcjI4KQorCWZpYyxtCQklcjEoJXIyOCkKKwlmaWMsbQkJJXIxKCVyMjgpCisJY21wYixDT05EKDw8KQkJJXIyOCwgJXIyNSwxYgorCWZpYyxtCQklcjEoJXIyOCkKKworCXN5bmMKKwlidgkJJXIwKCVyMikKKwlwaXRsYgkJKCVzcjAsJXIyNSkKKwkuZXhpdAorCisJLnByb2NlbmQKK0VORFBST0MoZmx1c2hfaWNhY2hlX3BhZ2VfYXNtKQorCiBFTlRSWShmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2VfYXNtKQogCS5wcm9jCiAJLmNhbGxpbmZvIE5PX0NBTExTCkBAIC02NTAsOTMgKzc3NCw2IEBACiAKIAkucHJvY2VuZAogRU5EUFJPQyhmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2VfYXNtKQotCQotRU5UUlkoZmx1c2hfdXNlcl9kY2FjaGVfcGFnZSkKLQkucHJvYwotCS5jYWxsaW5mbyBOT19DQUxMUwotCS5lbnRyeQotCi0JbGRpbAkJTCVkY2FjaGVfc3RyaWRlLCAlcjEKLQlsZHcJCVIlZGNhY2hlX3N0cmlkZSglcjEpLCAlcjIzCi0KLSNpZmRlZiBDT05GSUdfNjRCSVQKLQlkZXBkaSx6CQkxLDYzLVBBR0VfU0hJRlQsMSwgJXIyNQotI2Vsc2UKLQlkZXB3aSx6CQkxLDMxLVBBR0VfU0hJRlQsMSwgJXIyNQotI2VuZGlmCi0JYWRkCQklcjI2LCAlcjI1LCAlcjI1Ci0Jc3ViCQklcjI1LCAlcjIzLCAlcjI1Ci0KLQotMTogICAgICBmZGMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZkYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmRjLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmZGMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZkYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmRjLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmZGMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZkYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmRjLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmZGMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZkYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmRjLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmZGMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZkYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmRjLG0JCSVyMjMoJXNyMywgJXIyNikKLQljbXBiLENPTkQoPDwpCQklcjI2LCAlcjI1LDFiCi0JZmRjLG0JCSVyMjMoJXNyMywgJXIyNikKLQotCXN5bmMKLQlidgkJJXIwKCVyMikKLQlub3AKLQkuZXhpdAotCi0JLnByb2NlbmQKLUVORFBST0MoZmx1c2hfdXNlcl9kY2FjaGVfcGFnZSkKLQotRU5UUlkoZmx1c2hfdXNlcl9pY2FjaGVfcGFnZSkKLQkucHJvYwotCS5jYWxsaW5mbyBOT19DQUxMUwotCS5lbnRyeQotCi0JbGRpbAkJTCVkY2FjaGVfc3RyaWRlLCAlcjEKLQlsZHcJCVIlZGNhY2hlX3N0cmlkZSglcjEpLCAlcjIzCi0KLSNpZmRlZiBDT05GSUdfNjRCSVQKLQlkZXBkaSx6CQkxLCA2My1QQUdFX1NISUZULDEsICVyMjUKLSNlbHNlCi0JZGVwd2ksegkJMSwgMzEtUEFHRV9TSElGVCwxLCAlcjI1Ci0jZW5kaWYKLQlhZGQJCSVyMjYsICVyMjUsICVyMjUKLQlzdWIJCSVyMjUsICVyMjMsICVyMjUKLQotCi0xOiAgICAgIGZpYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmljLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmaWMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZpYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmljLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmaWMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZpYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmljLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmaWMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZpYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmljLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmaWMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWZpYyxtCQklcjIzKCVzcjMsICVyMjYpCi0JZmljLG0JCSVyMjMoJXNyMywgJXIyNikKLQlmaWMsbQkJJXIyMyglc3IzLCAlcjI2KQotCWNtcGIsQ09ORCg8PCkJCSVyMjYsICVyMjUsMWIKLQlmaWMsbQkJJXIyMyglc3IzLCAlcjI2KQotCi0Jc3luYwotCWJ2CQklcjAoJXIyKQotCW5vcAotCS5leGl0Ci0KLQkucHJvY2VuZAotRU5EUFJPQyhmbHVzaF91c2VyX2ljYWNoZV9wYWdlKQotCiAKIEVOVFJZKHB1cmdlX2tlcm5lbF9kY2FjaGVfcGFnZSkKIAkucHJvYwpAQCAtNzgwLDY5ICs4MTcsNiBAQAogCS5wcm9jZW5kCiBFTkRQUk9DKHB1cmdlX2tlcm5lbF9kY2FjaGVfcGFnZSkKIAotI2lmIDAKLQkvKiBDdXJyZW50bHkgbm90IHVzZWQsIGJ1dCBpdCBzdGlsbCBpcyBhIHBvc3NpYmxlIGFsdGVybmF0ZQotCSAqIHNvbHV0aW9uLgotCSAqLwotCi1FTlRSWShmbHVzaF9hbGlhc19wYWdlKQotCS5wcm9jCi0JLmNhbGxpbmZvIE5PX0NBTExTCi0JLmVudHJ5Ci0KLQl0b3BoeXNfcjEJCSVyMjYKLQotCWxkaWwJCUwlKFRNUEFMSUFTX01BUF9TVEFSVCksICVyMjgKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQlleHRyZCx1CQklcjI2LCA1NiwzMiwgJXIyNgkvKiBjb252ZXJ0IHBoeXMgYWRkciB0byB0bGIgaW5zZXJ0IGZvcm1hdCAqLwotCWRlcGQJCSVyMjUsIDYzLDIyLCAlcjI4CS8qIEZvcm0gYWxpYXNlZCB2aXJ0dWFsIGFkZHJlc3MgJ3RvJyAqLwotCWRlcGRpCQkwLCA2MywxMiwgJXIyOAkJLyogQ2xlYXIgYW55IG9mZnNldCBiaXRzICovCi0jZWxzZQotCWV4dHJ3LHUJCSVyMjYsIDI0LDI1LCAlcjI2CS8qIGNvbnZlcnQgcGh5cyBhZGRyIHRvIHRsYiBpbnNlcnQgZm9ybWF0ICovCi0JZGVwdwkJJXIyNSwgMzEsMjIsICVyMjgJLyogRm9ybSBhbGlhc2VkIHZpcnR1YWwgYWRkcmVzcyAndG8nICovCi0JZGVwd2kJCTAsIDMxLDEyLCAlcjI4CQkvKiBDbGVhciBhbnkgb2Zmc2V0IGJpdHMgKi8KLSNlbmRpZgotCi0JLyogUHVyZ2UgYW55IG9sZCB0cmFuc2xhdGlvbiAqLwotCi0JcGR0bGIJCTAoJXIyOCkKLQotCWxkaWwJCUwlZGNhY2hlX3N0cmlkZSwgJXIxCi0JbGR3CQlSJWRjYWNoZV9zdHJpZGUoJXIxKSwgJXIyMwotCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JZGVwZGksegkJMSwgNjMtUEFHRV9TSElGVCwxLCAlcjI5Ci0jZWxzZQotCWRlcHdpLHoJCTEsIDMxLVBBR0VfU0hJRlQsMSwgJXIyOQotI2VuZGlmCi0JYWRkCQklcjI4LCAlcjI5LCAlcjI5Ci0Jc3ViCQklcjI5LCAlcjIzLCAlcjI5Ci0KLTE6ICAgICAgZmRjLG0JCSVyMjMoJXIyOCkKLQlmZGMsbQkJJXIyMyglcjI4KQotCWZkYyxtCQklcjIzKCVyMjgpCi0JZmRjLG0JCSVyMjMoJXIyOCkKLQlmZGMsbQkJJXIyMyglcjI4KQotCWZkYyxtCQklcjIzKCVyMjgpCi0JZmRjLG0JCSVyMjMoJXIyOCkKLQlmZGMsbQkJJXIyMyglcjI4KQotCWZkYyxtCQklcjIzKCVyMjgpCi0JZmRjLG0JCSVyMjMoJXIyOCkKLQlmZGMsbQkJJXIyMyglcjI4KQotCWZkYyxtCQklcjIzKCVyMjgpCi0JZmRjLG0JCSVyMjMoJXIyOCkKLQlmZGMsbQkJJXIyMyglcjI4KQotCWZkYyxtCQklcjIzKCVyMjgpCi0JY21wYixDT05EKDw8KQkJJXIyOCwgJXIyOSwgMWIKLQlmZGMsbQkJJXIyMyglcjI4KQotCi0Jc3luYwotCWJ2CQklcjAoJXIyKQotCW5vcAotCS5leGl0Ci0KLQkucHJvY2VuZAotI2VuZGlmCiAKIAkuZXhwb3J0IGZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlX2FzbQogCkBAIC04NjUsNyArODM5LDYgQEAKIAkuZXhpdAogCiAJLnByb2NlbmQKLUVORFBST0MoZmx1c2hfYWxpYXNfcGFnZSkKIAogRU5UUlkoZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZV9hc20pCiAJLnByb2MKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggN2Q2OWU5Yi4uMzU4NGU0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTk1LDYgKzk1LDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19GSU5EX0JJVF9MRQorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIEdFTkVSSUNfR1BJTwogCWJvb2wKIAloZWxwCkBAIC0xMzQsNiArMTM4LDcgQEAKIAlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCiAJc2VsZWN0IEhBVkVfU1BBUlNFX0lSUQogCXNlbGVjdCBJUlFfUEVSX0NQVQorCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX0RFUFJFQ0FURUQKIAogY29uZmlnIEVBUkxZX1BSSU5USwogCWJvb2wKQEAgLTc2NywxMSArNzcyLDE5IEBACiAKIGNvbmZpZyBSQVBJRElPCiAJYm9vbCAiUmFwaWRJTyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSEFTX1JBUElESU8KKwlkZXBlbmRzIG9uIEhBU19SQVBJRElPIHx8IFBDSQogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBkcml2ZXJzIGFuZAogCSAgaW5mcmFzdHJ1Y3R1cmUgY29kZSB0byBzdXBwb3J0IFJhcGlkSU8gaW50ZXJjb25uZWN0IGRldmljZXMuCiAKK2NvbmZpZyBGU0xfUklPCisJYm9vbCAiRnJlZXNjYWxlIEVtYmVkZGVkIFNSSU8gQ29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUkFQSURJTyAmJiBIQVNfUkFQSURJTworCWRlZmF1bHQgIm4iCisJLS0taGVscC0tLQorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBSYXBpZElPIGNvbnRyb2xsZXIgb24gRnJlZXNjYWxlIGVtYmVkZGVkCisJICBwcm9jZXNzb3JzIChNUEM4NTQ4LCBNUEM4NjQxLCBldGMpLgorCiBzb3VyY2UgImRyaXZlcnMvcmFwaWRpby9LY29uZmlnIgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwppbmRleCA1YjI3YTRiLi4yNzc5ZjA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKQEAgLTE3Miw2ICsxNzIsMTkgQEAKIAkJCWludGVycnVwdHMgPSA8MHgxZSA0PjsKIAkJfTsKIAorCQlVU0JPVEcwOiB1c2JvdGdAYmZmODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLGR3Yy1vdGciOworCQkJcmVnID0gPDB4NCAweGJmZjgwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVVNCT1RHMD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgwIDB4MSAweDI+OworCQkJaW50ZXJydXB0LW1hcCA9IDwvKiBVU0ItT1RHICovIDB4MCAmVUlDMiAweDFjIDB4NAorCQkJCQkgLyogSElHSC1QT1dFUiAqLyAweDEgJlVJQzEgMHgxYSAweDgKKwkJCQkJIC8qIERNQSAqLyAweDIgJlVJQzAgMHhjIDB4ND47CisJCX07CisKIAkJU0FUQTA6IHNhdGFAYmZmZDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJhbWNjLHNhdGEtNDYwZXgiOwogCQkJcmVnID0gPDQgMHhiZmZkMTAwMCAweDgwMCA0IDB4YmZmZDA4MDAgMHg0MDA+OwpAQCAtMjMzLDYgKzI0NiwxMSBAQAogCQkJCQl9OwogCQkJCX07CiAKKwkJCQljcGxkQDIsMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYW1jYyxwcGM0NjBleC1iY3NyIjsKKwkJCQkJcmVnID0gPDIgMHgwIDB4OT47CisJCQkJfTsKKwogCQkJCW5kZmNAMywwIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJpYm0sbmRmYyI7CiAJCQkJCXJlZyA9IDwweDAwMDAwMDAzIDB4MDAwMDAwMDAgMHgwMDAwMjAwMD47CkBAIC0zMDcsNiArMzI1LDEyIEBACiAJCQkJaW50ZXJydXB0cyA9IDwweDMgMHg0PjsKIAkJCX07CiAKKwkJCUdQSU8wOiBncGlvQGVmNjAwYjAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxwcGM0eHgtZ3BpbyI7CisJCQkJcmVnID0gPDB4ZWY2MDBiMDAgMHgwMDAwMDA0OD47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJfTsKKwogCQkJWk1JSTA6IGVtYWMtem1paUBlZjYwMGQwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sem1paS00NjBleCIsICJpYm0sem1paSI7CiAJCQkJcmVnID0gPDB4ZWY2MDBkMDAgMHgwMDAwMDAwYz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva21ldGVyMS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva21ldGVyMS5kdHMKaW5kZXggZDhiNWQxMi4uZDE2YmFlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ttZXRlcjEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rbWV0ZXIxLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBLZXltaWxlIEtNRVRFUjEgRGV2aWNlIFRyZWUgU291cmNlCiAgKgotICogMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqIDIwMDgtMjAxMSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtNzAsMTEgKzcwLDExIEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzEzLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMTM3LDYgKzEzNywxMyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1wYXJfaW8iOwogCQkJbnVtLXBvcnRzID0gPDc+OwogCisJCQlxZV9waW9fYzogZ3Bpby1jb250cm9sbGVyQDMwIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLXFlLXBhcmlvLWJhbmsiLAorCQkJCQkgICAgICJmc2wsbXBjODMyMy1xZS1wYXJpby1iYW5rIjsKKwkJCQlyZWcgPSA8MHgxNDMwIDB4MTg+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CiAJCQlwaW9fdWNjMTogdWNjX3BpbkAwIHsKIAkJCQlyZWcgPSA8MD47CiAKQEAgLTQ3Miw3ICs0NzksMTcgQEAKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OwotCQkJCWludGVycnVwdHMgPSA8MzIgOCAzMyA4PjsKKwkJCQliaWctZW5kaWFuOworCQkJCWludGVycnVwdHMgPSA8CisJCQkJCTMyIDB4OAorCQkJCQkzMyAweDgKKwkJCQkJMzQgMHg4CisJCQkJCTM1IDB4OAorCQkJCQk0MCAweDgKKwkJCQkJNDEgMHg4CisJCQkJCTQyIDB4OAorCQkJCQk0MyAweDgKKwkJCQk+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJfTsKIAkJfTsKQEAgLTQ4NCw0MyArNTAxLDMxIEBACiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtbG9jYWxidXMiLCAiZnNsLHBxMnByby1sb2NhbGJ1cyIsCiAJCQkgICAgICJzaW1wbGUtYnVzIjsKIAkJcmVnID0gPDB4ZTAwMDUwMDAgMHhkOD47Ci0JCXJhbmdlcyA9IDwwIDAgMHhmMDAwMDAwMCAweDA0MDAwMDAwPjsJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQlyYW5nZXMgPSA8MCAwIDB4ZjAwMDAwMDAgMHgwNDAwMDAwMAkvKiBMQiAwICovCisJCQkgIDEgMCAweGU4MDAwMDAwIDB4MDEwMDAwMDAJLyogTEIgMSAqLworCQkJICAzIDAgMHhhMDAwMDAwMCAweDEwMDAwMDAwPjsJLyogTEIgMyAqLwogCi0JCWZsYXNoQGYwMDAwMDAwLDAgeworCQlmbGFzaEAwLDAgewogCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOwotCQkJLyoKLQkJCSAqIFRoZSBJbnRlbCBQMzAgY2hpcCBoYXMgMiBub24taWRlbnRpY2FsIGNoaXBzIG9uCi0JCQkgKiBvbmUgZGllLCBzbyB3ZSBuZWVkIHRvIGRlZmluZSAyIHNlcGFyYXRlIHJlZ2lvbnMKLQkJCSAqIHRoYXQgYXJlIHNjYW5uZWQgYnkgcGh5c21hcF9vZiBpbmRlcGVuZGFudGx5LgotCQkJICovCi0JCQlyZWcgPSA8MCAweDAwMDAwMDAwIDB4MDIwMDAwMDAKLQkJCSAgICAgICAwIDB4MDIwMDAwMDAgMHgwMjAwMDAwMD47CS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KLQkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlyZWcgPSA8MCAwIDB4MDQwMDAwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCXBhcnRpdGlvbkAwIHsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlwYXJ0aXRpb25AMCB7IC8qIDc2OEtCICovCiAJCQkJbGFiZWwgPSAidS1ib290IjsKLQkJCQlyZWcgPSA8MCAweDQwMDAwPjsKKwkJCQlyZWcgPSA8MCAweEMwMDAwPjsKIAkJCX07Ci0JCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJcGFydGl0aW9uQGMwMDAwIHsgLyogMTI4S0IgKi8KIAkJCQlsYWJlbCA9ICJlbnYiOwotCQkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJCXJlZyA9IDwweEMwMDAwIDB4MjAwMDA+OwogCQkJfTsKLQkJCXBhcnRpdGlvbkA4MDAwMCB7Ci0JCQkJbGFiZWwgPSAiZHRiIjsKLQkJCQlyZWcgPSA8MHg4MDAwMCAweDIwMDAwPjsKKwkJCXBhcnRpdGlvbkBlMDAwMCB7IC8qIDEyOEtCICovCisJCQkJbGFiZWwgPSAiZW52cmVkIjsKKwkJCQlyZWcgPSA8MHhFMDAwMCAweDIwMDAwPjsKIAkJCX07Ci0JCQlwYXJ0aXRpb25AYTAwMDAgewotCQkJCWxhYmVsID0gImtlcm5lbCI7Ci0JCQkJcmVnID0gPDB4YTAwMDAgMHgzMDAwMDA+OwotCQkJfTsKLQkJCXBhcnRpdGlvbkAzYTAwMDAgewotCQkJCWxhYmVsID0gInJhbWRpc2siOwotCQkJCXJlZyA9IDwweDNhMDAwMCAweDgwMDAwMD47Ci0JCQl9OwotCQkJcGFydGl0aW9uQGJhMDAwMCB7Ci0JCQkJbGFiZWwgPSAidXNlciI7Ci0JCQkJcmVnID0gPDB4YmEwMDAwIDB4MzQ2MDAwMD47CisJCQlwYXJ0aXRpb25AMTAwMDAwIHsgLyogNjQ1MTJLQiAqLworCQkJCWxhYmVsID0gInViaTAiOworCQkJCXJlZyA9IDwweDEwMDAwMCAweDNGMDAwMDA+OwogCQkJfTsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21nY29nZS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cwppbmRleCAwY2U5NjY0Li4xMzYwZDJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cwpAQCAtMTMsNyArMTMsNyBAQAogL2R0cy12MS87CiAvIHsKIAltb2RlbCA9ICJNR0NPR0UiOwotCWNvbXBhdGlibGUgPSAia2V5bWlsZSxtZ2NvZ2UiOworCWNvbXBhdGlibGUgPSAia2V5bWlsZSxrbTgyeHgiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwogCkBAIC00OCw4ICs0OCwxMCBAQAogCQlyZWcgPSA8MHhmMDAxMDEwMCAweDQwPjsKIAogCQlyYW5nZXMgPSA8MCAwIDB4ZmUwMDAwMDAgMHgwMDQwMDAwMAotCQkJICA1IDAgMHg1MDAwMDAwMCAweDIwMDAwMDAwCi0JCQk+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkgIDEgMCAweDMwMDAwMDAwIDB4MDAwMTAwMDAKKwkJCSAgMiAwIDB4NDAwMDAwMDAgMHgwMDAxMDAwMAorCQkJICA1IDAgMHg1MDAwMDAwMCAweDA0MDAwMDAwCisJCQk+OwogCiAJCWZsYXNoQDAsMCB7CiAJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CkBAIC02MCwzNiArNjIsMzIgQEAKIAkJCWRldmljZS13aWR0aCA9IDwxPjsKIAkJCXBhcnRpdGlvbkAwIHsKIAkJCQlsYWJlbCA9ICJ1LWJvb3QiOwotCQkJCXJlZyA9IDwwIDB4NDAwMDA+OworCQkJCXJlZyA9IDwweDAwMDAwIDB4QzAwMDA+OwogCQkJfTsKLQkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQlwYXJ0aXRpb25AMSB7CiAJCQkJbGFiZWwgPSAiZW52IjsKLQkJCQlyZWcgPSA8MHg0MDAwMCAweDIwMDAwPjsKKwkJCQlyZWcgPSA8MHhDMDAwMCAweDIwMDAwPjsKIAkJCX07Ci0JCQlwYXJ0aXRpb25ANjAwMDAgewotCQkJCWxhYmVsID0gImtlcm5lbCI7Ci0JCQkJcmVnID0gPDB4NjAwMDAgMHgyMjAwMDA+OworCQkJcGFydGl0aW9uQDIgeworCQkJCWxhYmVsID0gImVudnJlZCI7CisJCQkJcmVnID0gPDB4RTAwMDAgMHgyMDAwMD47CiAJCQl9OwotCQkJcGFydGl0aW9uQDI4MDAwMCB7Ci0JCQkJbGFiZWwgPSAiZHRiIjsKLQkJCQlyZWcgPSA8MHgyODAwMDAgMHgyMDAwMD47CisJCQlwYXJ0aXRpb25AMyB7CisJCQkJbGFiZWwgPSAiZnJlZSI7CisJCQkJcmVnID0gPDB4MTAwMDAwIDB4MzAwMDAwPjsKIAkJCX07CiAJCX07CiAKIAkJZmxhc2hANSwwIHsKIAkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKLQkJCXJlZyA9IDw1IDB4MCAweDIwMDAwMDA+OworCQkJcmVnID0gPDUgMHgwMDAwMDAwMCAweDAyMDAwMDAwCisJCQkgICAgICAgNSAweDAyMDAwMDAwIDB4MDIwMDAwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWJhbmstd2lkdGggPSA8Mj47Ci0JCQlkZXZpY2Utd2lkdGggPSA8Mj47Ci0JCQlwYXJ0aXRpb25AMCB7Ci0JCQkJbGFiZWwgPSAicmFtZGlzayI7Ci0JCQkJcmVnID0gPDAgMHg3YTAwMDA+OwotCQkJfTsKLQkJCXBhcnRpdGlvbkA3YTAwMDAgewotCQkJCWxhYmVsID0gInVzZXIiOwotCQkJCXJlZyA9IDwweDdhMDAwMCAweDE4NjAwMDA+OworCQkJcGFydGl0aW9uQGFwcCB7IC8qIDY0IE1CeXRlcyAqLworCQkJCWxhYmVsID0gInViaTAiOworCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDQwMDAwMDA+OwogCQkJfTsKIAkJfTsKIAl9OwpAQCAtMjE3LDYgKzIxNSwxMyBAQAogCQkJfTsKIAkJfTsKIAorCQljcG0yX3Bpb19jOiBncGlvLWNvbnRyb2xsZXJAMTBkNDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxjcG0yLXBhcmlvLWJhbmsiOworCQkJcmVnID0gPDB4MTBkNDAgMHgxND47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKIAkJUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMGMwMCB7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdzdXZkLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ3N1dmQuZHRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGZjNTNhLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ3N1dmQuZHRzCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBNR1NVVkQgRGV2aWNlIFRyZWUgU291cmNlCi0gKgotICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICi0gKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLS9kdHMtdjEvOwotLyB7Ci0JbW9kZWwgPSAiTUdTVVZEIjsKLQljb21wYXRpYmxlID0gImtleW1pbGUsbWdzdXZkIjsKLQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkjc2l6ZS1jZWxscyA9IDwxPjsKLQotCWNwdXMgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0KLQkJUG93ZXJQQyw4NTJAMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDA+OwotCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MTY+OwotCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MTY+OwotCQkJZC1jYWNoZS1zaXplID0gPDgxOTI+OwotCQkJaS1jYWNoZS1zaXplID0gPDgxOTI+OwotCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvKiBGaWxsZWQgaW4gYnkgdS1ib290ICovCi0JCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLwotCQkJaW50ZXJydXB0cyA9IDwxNSAyPjsJCS8qIGRlY3JlbWVudGVyIGludGVycnVwdCAqLwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKLQkJfTsKLQl9OwotCi0JbWVtb3J5IHsKLQkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAwMDAwMDAwIDB4NDAwMDAwMD47ICAvKiBGaWxsZWQgaW4gYnkgdS1ib290ICovCi0JfTsKLQotCWxvY2FsYnVzQGZmZjAwMTAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUyLWxvY2FsYnVzIiwgImZzbCxwcTEtbG9jYWxidXMiLCAic2ltcGxlLWJ1cyI7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDI+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDB4ZmZmMDAxMDAgMHg0MD47Ci0KLQkJcmFuZ2VzID0gPDAgMCAweGYwMDAwMDAwIDB4MDEwMDAwMDA+OyAgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLwotCi0JCWZsYXNoQDAsMCB7Ci0JCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7Ci0JCQlyZWcgPSA8MCAwIDB4MTAwMDAwMD47Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJYmFuay13aWR0aCA9IDwxPjsKLQkJCWRldmljZS13aWR0aCA9IDwxPjsKLQkJCXBhcnRpdGlvbkAwIHsKLQkJCQlsYWJlbCA9ICJ1LWJvb3QiOwotCQkJCXJlZyA9IDwwIDB4ODAwMDA+OwotCQkJfTsKLQkJCXBhcnRpdGlvbkA4MDAwMCB7Ci0JCQkJbGFiZWwgPSAiZW52IjsKLQkJCQlyZWcgPSA8MHg4MDAwMCAweDIwMDAwPjsKLQkJCX07Ci0JCQlwYXJ0aXRpb25AYTAwMDAgewotCQkJCWxhYmVsID0gImtlcm5lbCI7Ci0JCQkJcmVnID0gPDB4YTAwMDAgMHgxZTAwMDA+OwotCQkJfTsKLQkJCXBhcnRpdGlvbkAyODAwMDAgewotCQkJCWxhYmVsID0gImR0YiI7Ci0JCQkJcmVnID0gPDB4MjgwMDAwIDB4MjAwMDA+OwotCQkJfTsKLQkJCXBhcnRpdGlvbkAyYTAwMDAgewotCQkJICAgICAgICBsYWJlbCA9ICJyb290IjsKLQkJCSAgICAgICAgcmVnID0gPDB4MmEwMDAwIDB4NTAwMDAwPjsKLQkJCX07Ci0JCQlwYXJ0aXRpb25AN2EwMDAwIHsKLQkJCSAgICAgICAgbGFiZWwgPSAidXNlciI7Ci0JCQkgICAgICAgIHJlZyA9IDwweDdhMDAwMCAweDg2MDAwMD47Ci0JCQl9OwotCQl9OwotCX07Ci0KLQlzb2NAZmZmMDAwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTIiLCAiZnNsLHBxMS1zb2MiLCAic2ltcGxlLWJ1cyI7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJZGV2aWNlX3R5cGUgPSAic29jIjsKLQkJcmFuZ2VzID0gPDAgMHhmZmYwMDAwMCAweDAwMDA0MDAwPjsKLQotCQlQSUM6IGludGVycnVwdC1jb250cm9sbGVyQDAgewotCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDAgMjQ+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUyLXBpYyIsICJmc2wscHExLXBpYyI7Ci0JCX07Ci0KLQkJY3BtQDljMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUyLWNwbSIsICJmc2wsY3BtMSIsICJzaW1wbGUtYnVzIjsKLQkJCWludGVycnVwdHMgPSA8MD47CS8qIGNwbSBlcnJvciBpbnRlcnJ1cHQgKi8KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OwotCQkJcmVnID0gPDB4OWMwIDEwPjsKLQkJCXJhbmdlczsKLQotCQkJbXVyYW1AMjAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtLW11cmFtIjsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyYW5nZXMgPSA8MCAweDIwMDAgMHgyMDAwPjsKLQotCQkJCWRhdGFAMCB7Ci0JCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKLQkJCQkJcmVnID0gPDB4ODAwIDB4MTgwMD47Ci0JCQkJfTsKLQkJCX07Ci0KLQkJCWJyZ0A5ZjAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1Mi1icmciLAotCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTEtYnJnIiwKLQkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKLQkJCQlyZWcgPSA8MHg5ZjAgMHgxMD47Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgdS1ib290ICovCi0JCQl9OwotCi0JCQlDUE1fUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckA5MzAgewotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDIgMCAyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwotCQkJCXJlZyA9IDwweDkzMCAweDIwPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxjcG0xLXBpYyI7Ci0JCQl9OwotCi0JCQkvKiBNT04tMSAqLwotCQkJc2VyaWFsQGE4MCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxjcG0xLXNtYy11YXJ0IjsKLQkJCQlyZWcgPSA8MHhhODAgMHgxMCAweDNmYzAgMHg0MD47Ci0JCQkJaW50ZXJydXB0cyA9IDw0PjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKLQkJCQlmc2wsY3BtLWJyZyA9IDwxPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHgwMDkwPjsKLQkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgdS1ib290ICovCi0JCQl9OwotCi0JCQlldGhlcm5ldEBhNDAgewotCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJCWNvbXBhdGlibGUgID0gImZzbCxtcGM4NjYtc2NjLWVuZXQiLAotCQkJCSAgICAgICAgICAgICAgImZzbCxjcG0xLXNjYy1lbmV0IjsKLQkJCQlyZWcgPSA8MHhhNDAgMHgxOCAweDNlMDAgMHgxMDA+OwotCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOyAgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLwotCQkJCWludGVycnVwdHMgPSA8Mjg+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OwotCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDgwPjsKLQkJCQlmaXhlZC1saW5rID0gPDAgMCAxMCAwIDA+OwotCQkJfTsKLQkJfTsKLQl9OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cwppbmRleCA2OTQyMmViLi41OWVmNDA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjJkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIyZHMuZHRzCkBAIC00NzUsMTQgKzQ3NSwxNCBAQAogCQl9OwogCiAJCXNhdGFAMTgwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1zYXRhIiwgImZzbCxwcS1zYXRhIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLXNhdGEiLCAiZnNsLHBxLXNhdGEtdjIiOwogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlpbnRlcnJ1cHRzID0gPDc0IDB4Mj47CiAJCX07CiAKIAkJc2F0YUAxOTAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LXNhdGEiLCAiZnNsLHBxLXNhdGEiOworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItc2F0YSIsICJmc2wscHEtc2F0YS12MiI7CiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWludGVycnVwdHMgPSA8NDEgMHgyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCmluZGV4IDdhN2I3MzEuLjA3ZTFiYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZwpAQCAtMiw2ICsyLDcgQEAKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKQEAgLTE4LDcgKzE5LDYgQEAKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTM3LDcgKzM3LDYgQEAKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9PRl9QQVJUUz15CiBDT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CkBAIC00OSwxMyArNDgsMTIgQEAKIENPTkZJR19NVERfVUJJX0dMVUVCST15CiBDT05GSUdfTVREX1VCSV9ERUJVRz15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQogQ09ORklHX1RVTj15CitDT05GSUdfTUlJPXkKIENPTkZJR19NQVJWRUxMX1BIWT15CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX1VDQ19HRVRIPXkKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0FOPXkKQEAgLTc3LDcgKzc1LDYgQEAKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VSU89eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19ORlNfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKaW5kZXggMzk1MThlOS4uNmNiNTg4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCkBAIC0xLDQgKzEsNSBAQAogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMCw3ICsxMSw2IEBACiBDT05GSUdfUFBDXzgyeHg9eQogQ09ORklHX01HQ09HRT15CiBDT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtMzAsNyArMzAsNiBAQAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9DRkk9eQpAQCAtNDMsNyArNDIsNiBAQAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0ZJWEVEX1BIWT15CkBAIC02Nyw3ICs2NSw2IEBACiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfQVVUT0ZTNF9GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQpAQCAtODgsMTMgKzg1LDkgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0JESV9TV0lUQ0g9eQotQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE0OTA2Mi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotQ09ORklHX1BQQ184eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRVhQRVJUPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01HU1VWRD15Ci1DT05GSUdfOHh4X0NPUFlCQUNLPXkKLUNPTkZJR184eHhfQ1BVNj15Ci1DT05GSUdfSTJDX1NQSV9TTUMxX1VDT0RFX1BBVENIPXkKLUNPTkZJR19IWl8xMDAwPXkKLUNPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15Ci0jIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX01URD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX1NUQUE9eQotQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRklYRURfUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX0ZTX0VORVQ9eQotIyBDT05GSUdfRlNfRU5FVF9IQVNfRkVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NQTT15Ci1DT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19DUkFNRlM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDhhN2U5MzE0Li4yZTU2MTg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0yODEsNjggKzI4MSw1NiBAQAogCiAvKiBMaXR0bGUtZW5kaWFuIHZlcnNpb25zICovCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2xlX2JpdCh1bnNpZ25lZCBsb25nIG5yLAotCQkJCSAgX19jb25zdF9fIHVuc2lnbmVkIGxvbmcgKmFkZHIpCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9iaXRfbGUodW5zaWduZWQgbG9uZyBuciwKKwkJCQkgIF9fY29uc3RfXyB2b2lkICphZGRyKQogewogCV9fY29uc3RfXyB1bnNpZ25lZCBjaGFyCSp0bXAgPSAoX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKIAlyZXR1cm4gKHRtcFtuciA+PiAzXSA+PiAobnIgJiA3KSkgJiAxOwogfQogCi0jZGVmaW5lIF9fc2V0X2xlX2JpdChuciwgYWRkcikgXAotCV9fc2V0X2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQotI2RlZmluZSBfX2NsZWFyX2xlX2JpdChuciwgYWRkcikgXAotCV9fY2xlYXJfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfYml0X2xlKGludCBuciwgdm9pZCAqYWRkcikKK3sKKwlfX3NldF9iaXQobnIgXiBCSVRPUF9MRV9TV0laWkxFLCBhZGRyKTsKK30KIAotI2RlZmluZSB0ZXN0X2FuZF9zZXRfbGVfYml0KG5yLCBhZGRyKSBcCi0JdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQotI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9sZV9iaXQobnIsIGFkZHIpIFwKLQl0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJX19jbGVhcl9iaXQobnIgXiBCSVRPUF9MRV9TV0laWkxFLCBhZGRyKTsKK30KIAotI2RlZmluZSBfX3Rlc3RfYW5kX3NldF9sZV9iaXQobnIsIGFkZHIpIFwKLQlfX3Rlc3RfYW5kX3NldF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKLSNkZWZpbmUgX190ZXN0X2FuZF9jbGVhcl9sZV9iaXQobnIsIGFkZHIpIFwKLQlfX3Rlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQorc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQobnIgXiBCSVRPUF9MRV9TV0laWkxFLCBhZGRyKTsKK30KIAotI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fbGVfYml0KGFkZHIsIHNpemUpIGdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KChhZGRyKSwgKHNpemUpLCAwKQotdW5zaWduZWQgbG9uZyBnZW5lcmljX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0X2xlKGludCBuciwgdm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KG5yIF4gQklUT1BfTEVfU1dJWlpMRSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGVzdF9hbmRfc2V0X2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIF9fdGVzdF9hbmRfc2V0X2JpdChuciBeIEJJVE9QX0xFX1NXSVpaTEUsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIF9fdGVzdF9hbmRfY2xlYXJfYml0KG5yIF4gQklUT1BfTEVfU1dJWlpMRSwgYWRkcik7Cit9CisKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdF9sZShhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X3plcm9fYml0X2xlKChhZGRyKSwgKHNpemUpLCAwKQordW5zaWduZWQgbG9uZyBmaW5kX25leHRfemVyb19iaXRfbGUoY29uc3Qgdm9pZCAqYWRkciwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAKLXVuc2lnbmVkIGxvbmcgZ2VuZXJpY19maW5kX25leHRfbGVfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCit1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF9iaXRfbGUoY29uc3Qgdm9pZCAqYWRkciwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAvKiBCaXRtYXAgZnVuY3Rpb25zIGZvciB0aGUgZXh0MiBmaWxlc3lzdGVtICovCiAKLSNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLGFkZHIpIFwKLQlfX3Rlc3RfYW5kX3NldF9sZV9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcqKWFkZHIpCi0jZGVmaW5lIGV4dDJfY2xlYXJfYml0KG5yLCBhZGRyKSBcCi0JX190ZXN0X2FuZF9jbGVhcl9sZV9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcqKWFkZHIpCi0KICNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikgXAotCXRlc3RfYW5kX3NldF9sZV9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcqKWFkZHIpCisJdGVzdF9hbmRfc2V0X2JpdF9sZSgobnIpLCAodW5zaWduZWQgbG9uZyopYWRkcikKICNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKSBcCi0JdGVzdF9hbmRfY2xlYXJfbGVfYml0KChuciksICh1bnNpZ25lZCBsb25nKilhZGRyKQotCi0jZGVmaW5lIGV4dDJfdGVzdF9iaXQobnIsIGFkZHIpICAgICAgdGVzdF9sZV9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyopYWRkcikKLQotI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAotCWZpbmRfZmlyc3RfemVyb19sZV9iaXQoKHVuc2lnbmVkIGxvbmcqKWFkZHIsIHNpemUpCi0jZGVmaW5lIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KGFkZHIsIHNpemUsIG9mZikgXAotCWdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KCh1bnNpZ25lZCBsb25nKilhZGRyLCBzaXplLCBvZmYpCi0KLSNkZWZpbmUgZXh0Ml9maW5kX25leHRfYml0KGFkZHIsIHNpemUsIG9mZikgXAotCWdlbmVyaWNfZmluZF9uZXh0X2xlX2JpdCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHNpemUsIG9mZikKLS8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLiAgKi8KLQotI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLGFkZHIpIFwKLQlfX3Rlc3RfYW5kX3NldF9sZV9iaXQobnIsICh1bnNpZ25lZCBsb25nICopYWRkcikKLSNkZWZpbmUgbWluaXhfc2V0X2JpdChucixhZGRyKSBcCi0JX19zZXRfbGVfYml0KG5yLCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCi0jZGVmaW5lIG1pbml4X3Rlc3RfYW5kX2NsZWFyX2JpdChucixhZGRyKSBcCi0JX190ZXN0X2FuZF9jbGVhcl9sZV9iaXQobnIsICh1bnNpZ25lZCBsb25nICopYWRkcikKLSNkZWZpbmUgbWluaXhfdGVzdF9iaXQobnIsYWRkcikgXAotCXRlc3RfbGVfYml0KG5yLCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCi0KLSNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpIFwKLQlmaW5kX2ZpcnN0X3plcm9fbGVfYml0KCh1bnNpZ25lZCBsb25nICopYWRkciwgc2l6ZSkKKwl0ZXN0X2FuZF9jbGVhcl9iaXRfbGUoKG5yKSwgKHVuc2lnbmVkIGxvbmcqKWFkZHIpCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAppbmRleCBmMGEyMTFkLi5iZTNjZGY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaApAQCAtMTU0LDYgKzE1NCw3IEBACiAjZGVmaW5lIENQVV9GVFJfTkFQX0RJU0FCTEVfTDJfUFIJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMjAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9EVUFMX1BMTF83NTBGWAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwNDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9OT19EUE0JCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDA4MDAwKQorI2RlZmluZSBDUFVfRlRSXzQ3Nl9ERDIJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDEwMDAwKQogI2RlZmluZSBDUFVfRlRSX05FRURfQ09IRVJFTlQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCiAjZGVmaW5lIENQVV9GVFJfTk9fQlRJQwkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwNDAwMDApCiAjZGVmaW5lIENQVV9GVFJfTk9EU0lTUkFMSUdOCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMTAwMDAwKQpAQCAtNDY1LDcgKzQ2Niw3IEBACiAJICAgIENQVV9GVFJTXzQ0WCB8IENQVV9GVFJTXzQ0MHg2IHwKICNlbmRpZgogI2lmZGVmIENPTkZJR19QUENfNDd4Ci0JICAgIENQVV9GVFJTXzQ3WCB8CisJICAgIENQVV9GVFJTXzQ3WCB8IENQVV9GVFJfNDc2X0REMiB8CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRTIwMAogCSAgICBDUFVfRlRSU19FMjAwIHwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCBmZjA4YjcwLi5iYjcxMmM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC0xNDEsNiArMTQxLDggQEAKIAogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCisjZGVmaW5lIEFSQ0hfSVJRX0lOSVRfRkxBR1MJSVJRX05PUkVRVUVTVAorCiAvKgogICogaW50ZXJydXB0LXJldHJpZ2dlcjogc2hvdWxkIHdlIGhhbmRsZSB0aGlzIHZpYSBsb3N0IGludGVycnVwdHMgYW5kIElQSXMKICAqIG9yIHNob3VsZCB3ZSBub3QgY2FyZSBsaWtlIHdlIGRvIG5vdyA/IC0tQmVuSC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCmluZGV4IGUwMDBjY2UuLjcwMDVlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaApAQCAtMzY3LDYgKzM2NywxMCBAQAogI2RlZmluZSBNUElDX1NJTkdMRV9ERVNUX0NQVQkJMHgwMDAwMTAwMAogLyogRW5hYmxlIENvcmVJbnQgZGVsaXZlcnkgb2YgaW50ZXJydXB0cyAqLwogI2RlZmluZSBNUElDX0VOQUJMRV9DT1JFSU5UCQkweDAwMDAyMDAwCisvKiBEaXNhYmxlIHJlc2V0dGluZyBvZiB0aGUgTVBJQy4KKyAqIE5PVEU6IFRoaXMgZmxhZyB0cnVtcHMgTVBJQ19XQU5UU19SRVNFVC4KKyAqLworI2RlZmluZSBNUElDX05PX1JFU0VUCQkJMHgwMDAwNDAwMAogCiAvKiBNUElDIEhXIG1vZGlmaWNhdGlvbiBJRCAqLwogI2RlZmluZSBNUElDX1JFR1NFVF9NQVNLCQkweGYwMDAwMDAwCkBAIC00NjcsMTEgKzQ3MSwxMSBAQAogdm9pZCBzbXBfbXBpY19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZyk7CiAKIC8qIFVubWFzayBhIHNwZWNpZmljIHZpcnEgKi8KLWV4dGVybiB2b2lkIG1waWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIG1waWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpOwogLyogTWFzayBhIHNwZWNpZmljIHZpcnEgKi8KLWV4dGVybiB2b2lkIG1waWNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBtcGljX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCk7CiAvKiBFT0kgYSBzcGVjaWZpYyB2aXJxICovCi1leHRlcm4gdm9pZCBtcGljX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBtcGljX2VuZF9pcnEoc3RydWN0IGlycV9kYXRhICpkKTsKIAogLyogRmV0Y2ggaW50ZXJydXB0IGZyb20gYSBnaXZlbiBtcGljICovCiBleHRlcm4gdW5zaWduZWQgaW50IG1waWNfZ2V0X29uZV9pcnEoc3RydWN0IG1waWMgKm1waWMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL252cmFtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaAppbmRleCA5MmVmZTY3Li45ZDFhYWZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaApAQCAtNTEsNyArNTEsOCBAQAogZXh0ZXJuIGludCBfX2luaXQgbnZyYW1fc2Nhbl9wYXJ0aXRpb25zKHZvaWQpOwogZXh0ZXJuIGxvZmZfdCBudnJhbV9jcmVhdGVfcGFydGl0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGludCBzaWcsCiAJCQkJICAgICBpbnQgcmVxX3NpemUsIGludCBtaW5fc2l6ZSk7Ci1leHRlcm4gaW50IG52cmFtX3JlbW92ZV9wYXJ0aXRpb24oY29uc3QgY2hhciAqbmFtZSwgaW50IHNpZyk7CitleHRlcm4gaW50IG52cmFtX3JlbW92ZV9wYXJ0aXRpb24oY29uc3QgY2hhciAqbmFtZSwgaW50IHNpZywKKwkJCQkJY29uc3QgY2hhciAqZXhjZXB0aW9uc1tdKTsKIGV4dGVybiBpbnQgbnZyYW1fZ2V0X3BhcnRpdGlvbl9zaXplKGxvZmZfdCBkYXRhX2luZGV4KTsKIGV4dGVybiBsb2ZmX3QgbnZyYW1fZmluZF9wYXJ0aXRpb24oY29uc3QgY2hhciAqbmFtZSwgaW50IHNpZywgaW50ICpvdXRfc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDg5ZjE1ODcuLjg4YjBiZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTcwLDYgKzE3MCw3IEBACiAjZGVmaW5lIHBncHJvdF9jYWNoZWRfd3RocnUocHJvdCkgKF9fcGdwcm90KChwZ3Byb3RfdmFsKHByb3QpICYgfl9QQUdFX0NBQ0hFX0NUTCkgfCBcCiAJCQkJICAgICAgICAgICAgX1BBR0VfQ09IRVJFTlQgfCBfUEFHRV9XUklURVRIUlUpKQogCisjZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUgcGdwcm90X25vbmNhY2hlZF93YwogCiBzdHJ1Y3QgZmlsZTsKIGV4dGVybiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMDE3NWE2Ny4uNDgyMjNmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTI1LDggKzEyNSwxMCBAQAogI2VuZGlmIC8qICEgX19wb3dlcnBjNjRfXyAqLwogI2RlZmluZSBUUkFQKHJlZ3MpCQkoKHJlZ3MpLT50cmFwICYgfjB4RikKICNpZmRlZiBfX3Bvd2VycGM2NF9fCisjZGVmaW5lIE5WX1JFR19QT0lTT04JCTB4ZGVhZGJlZWZkZWFkYmVlZlVMCiAjZGVmaW5lIENIRUNLX0ZVTExfUkVHUyhyZWdzKQlCVUdfT04ocmVncy0+dHJhcCAmIDEpCiAjZWxzZQorI2RlZmluZSBOVl9SRUdfUE9JU09OCQkweGRlYWRiZWVmCiAjZGVmaW5lIENIRUNLX0ZVTExfUkVHUyhyZWdzKQkJCQkJCSAgICAgIFwKIGRvIHsJCQkJCQkJCQkgICAgICBcCiAJaWYgKChyZWdzKS0+dHJhcCAmIDEpCQkJCQkJICAgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3FlX2ljLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcWVfaWMuaAppbmRleCBjZjUxOTY2Li45ZTJjYjIwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3FlX2ljLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3FlX2ljLmgKQEAgLTgxLDcgKzgxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBxZV9pY19jYXNjYWRlX2xvd19pcGljKHVuc2lnbmVkIGludCBpcnEsCiAJCQkJCSAgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBxZV9pYyAqcWVfaWMgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisJc3RydWN0IHFlX2ljICpxZV9pYyA9IGdldF9pcnFfZGVzY19kYXRhKGRlc2MpOwogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IHFlX2ljX2dldF9sb3dfaXJxKHFlX2ljKTsKIAogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCkBAIC05MSw3ICs5MSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcWVfaWNfY2FzY2FkZV9oaWdoX2lwaWModW5zaWduZWQgaW50IGlycSwKIAkJCQkJICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBxZV9pYyAqcWVfaWMgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisJc3RydWN0IHFlX2ljICpxZV9pYyA9IGdldF9pcnFfZGVzY19kYXRhKGRlc2MpOwogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IHFlX2ljX2dldF9oaWdoX2lycShxZV9pYyk7CiAKIAlpZiAoY2FzY2FkZV9pcnEgIT0gTk9fSVJRKQpAQCAtMTAxLDMyICsxMDEsMzUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBxZV9pY19jYXNjYWRlX2xvd19tcGljKHVuc2lnbmVkIGludCBpcnEsCiAJCQkJCSAgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBxZV9pYyAqcWVfaWMgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisJc3RydWN0IHFlX2ljICpxZV9pYyA9IGdldF9pcnFfZGVzY19kYXRhKGRlc2MpOwogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IHFlX2ljX2dldF9sb3dfaXJxKHFlX2ljKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CiAKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBxZV9pY19jYXNjYWRlX2hpZ2hfbXBpYyh1bnNpZ25lZCBpbnQgaXJxLAogCQkJCQkgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IHFlX2ljICpxZV9pYyA9IGRlc2MtPmhhbmRsZXJfZGF0YTsKKwlzdHJ1Y3QgcWVfaWMgKnFlX2ljID0gZ2V0X2lycV9kZXNjX2RhdGEoZGVzYyk7CiAJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxID0gcWVfaWNfZ2V0X2hpZ2hfaXJxKHFlX2ljKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CiAKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBxZV9pY19jYXNjYWRlX211eGVkX21waWModW5zaWduZWQgaW50IGlycSwKIAkJCQkJICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgcWVfaWMgKnFlX2ljID0gZGVzYy0+aGFuZGxlcl9kYXRhOworCXN0cnVjdCBxZV9pYyAqcWVfaWMgPSBnZXRfaXJxX2Rlc2NfZGF0YShkZXNjKTsKIAl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnE7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CiAKIAljYXNjYWRlX2lycSA9IHFlX2ljX2dldF9oaWdoX2lycShxZV9pYyk7CiAJaWYgKGNhc2NhZGVfaXJxID09IE5PX0lSUSkKQEAgLTEzNSw3ICsxMzgsNyBAQAogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CiAKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUUVfSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCmluZGV4IDEyNWZjMWEuLjdlNGFiZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKQEAgLTE3MCw2ICsxNzAsMTYgQEAKICNkZWZpbmUgU1BFRlNDUl9GUk1DIAkweDAwMDAwMDAzCS8qIEVtYmVkZGVkIEZQIHJvdW5kaW5nIG1vZGUgY29udHJvbCAqLwogCiAvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXJzIChTUFJOcykqLworCisjaWZkZWYgQ09ORklHXzQweAorI2RlZmluZSBTUFJOX1BJRAkweDNCMQkvKiBQcm9jZXNzIElEICovCisjZWxzZQorI2RlZmluZSBTUFJOX1BJRAkweDAzMAkvKiBQcm9jZXNzIElEICovCisjaWZkZWYgQ09ORklHX0JPT0tFCisjZGVmaW5lIFNQUk5fUElEMAlTUFJOX1BJRC8qIFByb2Nlc3MgSUQgUmVnaXN0ZXIgMCAqLworI2VuZGlmCisjZW5kaWYKKwogI2RlZmluZSBTUFJOX0NUUgkweDAwOQkvKiBDb3VudCBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0RTQ1IJMHgxMQogI2RlZmluZSBTUFJOX0NUUkxGCTB4MDg4CkBAIC04NTIsNiArODYyLDggQEAKICNkZWZpbmUgUFZSXzc0NTAJMHg4MDAwMDAwMAogI2RlZmluZSBQVlJfODU0MAkweDgwMjAwMDAwCiAjZGVmaW5lIFBWUl84NTYwCTB4ODAyMDAwMDAKKyNkZWZpbmUgUFZSX1ZFUl9FNTAwVjEJMHg4MDIwCisjZGVmaW5lIFBWUl9WRVJfRTUwMFYyCTB4ODAyMQogLyoKICAqIEZvciB0aGUgOHh4IHByb2Nlc3NvcnMsIGFsbCBvZiB0aGVtIHJlcG9ydCB0aGUgc2FtZSBQVlIgZmFtaWx5IGZvcgogICogdGhlIFBvd2VyUEMgY29yZS4gVGhlIHZhcmlvdXMgdmVyc2lvbnMgb2YgdGhlc2UgcHJvY2Vzc29ycyBtdXN0IGJlCkBAIC04ODAsNiArODkyLDcgQEAKICNkZWZpbmUgUFZfOTcwCQkweDAwMzkKICNkZWZpbmUgUFZfUE9XRVI1CTB4MDAzQQogI2RlZmluZSBQVl9QT1dFUjVwCTB4MDAzQgorI2RlZmluZSBQVl9QT1dFUjcJMHgwMDNGCiAjZGVmaW5lIFBWXzk3MEZYCTB4MDAzQwogI2RlZmluZSBQVl82MzAJCTB4MDA0MAogI2RlZmluZSBQVl82MzBwCTB4MDA0MQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCmluZGV4IGU2OGM2OWIuLjg2YWQ4MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKQEAgLTE1MCw4ICsxNTAsNiBAQAogICogb3IgSUJNIDQweC4KICAqLwogI2lmZGVmIENPTkZJR19CT09LRQotI2RlZmluZSBTUFJOX1BJRAkweDAzMAkvKiBQcm9jZXNzIElEICovCi0jZGVmaW5lIFNQUk5fUElEMAlTUFJOX1BJRC8qIFByb2Nlc3MgSUQgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBTUFJOX0NTUlIwCTB4MDNBCS8qIENyaXRpY2FsIFNhdmUgYW5kIFJlc3RvcmUgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBTUFJOX0NTUlIxCTB4MDNCCS8qIENyaXRpY2FsIFNhdmUgYW5kIFJlc3RvcmUgUmVnaXN0ZXIgMSAqLwogI2RlZmluZSBTUFJOX0RFQVIJMHgwM0QJLyogRGF0YSBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCkBAIC0xNjgsNyArMTY2LDYgQEAKICNkZWZpbmUgU1BSTl9UQ1IJMHgxNTQJLyogVGltZXIgQ29udHJvbCBSZWdpc3RlciAqLwogI2VuZGlmIC8qIEJvb2sgRSAqLwogI2lmZGVmIENPTkZJR180MHgKLSNkZWZpbmUgU1BSTl9QSUQJMHgzQjEJLyogUHJvY2VzcyBJRCAqLwogI2RlZmluZSBTUFJOX0RCQ1IxCTB4M0JECS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgMSAqLwkJCiAjZGVmaW5lIFNQUk5fRVNSCTB4M0Q0CS8qIEV4Y2VwdGlvbiBTeW5kcm9tZSBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0RFQVIJMHgzRDUJLyogRGF0YSBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDY1ZWI4NTkuLmQ4NTI5ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC03Miw3ICs3Miw3IEBACiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKLWV4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvX25vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKTsKIGV4dGVybiB2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSk7CiAKICNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IGE1YWVhMGMuLjg5NDdiOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC00NCwxMyArNDQsNiBAQAogCiB0eXBlZGVmIF9fdmVjdG9yMTI4IHZlY3RvcjEyODsKIAotI2lmIGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgZGVmaW5lZChDT05GSUdfUEhZU182NEJJVCkKLXR5cGVkZWYgdTY0IGRtYV9hZGRyX3Q7Ci0jZWxzZQotdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKLSNlbmRpZgotdHlwZWRlZiB1NjQgZG1hNjRfYWRkcl90OwotCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBlbnRyeTsKIAl1bnNpZ25lZCBsb25nIHRvYzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKaW5kZXggNWM1MThhZC4uOTEzNjExMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKQEAgLTY0LDcgKzY0LDcgQEAKIAlibAlfX2U1MDBfaWNhY2hlX3NldHVwCiAJYmwJX19lNTAwX2RjYWNoZV9zZXR1cAogCWJsCV9fc2V0dXBfZTUwMF9pdm9ycwotI2lmZGVmIENPTkZJR19SQVBJRElPCisjaWZkZWYgQ09ORklHX0ZTTF9SSU8KIAkvKiBFbnN1cmUgdGhhdCBSRlhFIGlzIHNldCAqLwogCW1mc3ByCXIzLFNQUk5fSElEMQogCW9yaXMJcjMscjMsSElEMV9SRlhFQGgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCBlOGU5MTVjLi5jOWI2OGQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0xODExLDExICsxODExLDExIEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKIAkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAogCX0sCi0JeyAvKiA0NzYgY29yZSAqLwotCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKLQkJLnB2cl92YWx1ZQkJPSAweDExYTUwMDAwLAorCXsgLyogNDc2IEREMiBjb3JlICovCisJCS5wdnJfbWFzawkJPSAweGZmZmZmZmZmLAorCQkucHZyX3ZhbHVlCQk9IDB4MTFhNTIwODAsCiAJCS5jcHVfbmFtZQkJPSAiNDc2IiwKLQkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180N1gsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfNDdYIHwgQ1BVX0ZUUl80NzZfREQyLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9CT09LRSB8CiAJCQlQUENfRkVBVFVSRV9IQVNfRlBVLAogCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80N3ggfApAQCAtMTgzOSw2ICsxODM5LDIwIEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDd4LAogCQkucGxhdGZvcm0JCT0gInBwYzQ3MCIsCiAJfSwKKwl7IC8qIDQ3NiBvdGhlcnMgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCisJCS5wdnJfdmFsdWUJCT0gMHgxMWE1MDAwMCwKKwkJLmNwdV9uYW1lCQk9ICI0NzYiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQ3WCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfQk9PS0UgfAorCQkJUFBDX0ZFQVRVUkVfSEFTX0ZQVSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfNDd4IHwKKwkJCU1NVV9GVFJfVVNFX1RMQklWQVhfQkNBU1QgfCBNTVVfRlRSX0xPQ0tfQkNBU1RfSU5WQUwsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAorCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrXzQ3eCwKKwkJLnBsYXRmb3JtCQk9ICJwcGM0NzAiLAorCX0sCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCiAJCS5wdnJfbWFzawkJPSAweDAwMDAwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDAwMDAwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IDBhMmFmNTAuLjQyNGFmYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC0yOCw5ICsyOCw2IEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAotLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCi11bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKLQogI2lmbmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKIHZvaWQgX19pbml0IHJlc2VydmVfa2R1bXBfdHJhbXBvbGluZSh2b2lkKQogewpAQCAtNzIsMjAgKzY5LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUkVMT0NBVEFCTEUgKi8KIAotLyoKLSAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5Ci0gKiBpc19rZHVtcF9rZXJuZWwoKSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYy4gSGVuY2UKLSAqIGlmZGVmIGl0IHVuZGVyIENPTkZJR19DUkFTSF9EVU1QIGFuZCBub3QgQ09ORklHX1BST0NfVk1DT1JFLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9lbGZjb3JlaGRyKGNoYXIgKnApCi17Ci0JaWYgKHApCi0JCWVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKHAsICZwKTsKLQotCXJldHVybiAxOwotfQotX19zZXR1cCgiZWxmY29yZWhkcj0iLCBwYXJzZV9lbGZjb3JlaGRyKTsKLQogc3RhdGljIGludCBfX2luaXQgcGFyc2Vfc2F2ZW1heG1lbShjaGFyICpwKQogewogCWlmIChwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggY2U1NTdmNi4uMGE1NTcwMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtMjM3LDYgKzIzNyw3IEBACiAJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqLCBwcmVjOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9jaGlwICpjaGlwOwogCiAJaWYgKGkgPiBucl9pcnFzKQogCQlyZXR1cm4gMDsKQEAgLTI3MCw4ICsyNzEsOSBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAKLQlpZiAoZGVzYy0+Y2hpcCkKLQkJc2VxX3ByaW50ZihwLCAiICAlLTE2cyIsIGRlc2MtPmNoaXAtPm5hbWUpOworCWNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKKwlpZiAoY2hpcCkKKwkJc2VxX3ByaW50ZihwLCAiICAlLTE2cyIsIGNoaXAtPm5hbWUpOwogCWVsc2UKIAkJc2VxX3ByaW50ZihwLCAiICAlLTE2cyIsICJOb25lIik7CiAJc2VxX3ByaW50ZihwLCAiICUtOHMiLCAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCIgOiAiRWRnZSIpOwpAQCAtMzEzLDYgKzMxNSw4IEBACiAJYWxsb2NfY3B1bWFza192YXIoJm1hc2ssIEdGUF9LRVJORUwpOwogCiAJZm9yX2VhY2hfaXJxKGlycSkgeworCQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CisKIAkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJCWlmICghZGVzYykKIAkJCWNvbnRpbnVlOwpAQCAtMzIwLDEzICszMjQsMTUgQEAKIAkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9QRVJfQ1BVKQogCQkJY29udGludWU7CiAKLQkJY3B1bWFza19hbmQobWFzaywgZGVzYy0+YWZmaW5pdHksIG1hcCk7CisJCWNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKKworCQljcHVtYXNrX2FuZChtYXNrLCBkZXNjLT5pcnFfZGF0YS5hZmZpbml0eSwgbWFwKTsKIAkJaWYgKGNwdW1hc2tfYW55KG1hc2spID49IG5yX2NwdV9pZHMpIHsKIAkJCXByaW50aygiQnJlYWtpbmcgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKIAkJCWNwdW1hc2tfY29weShtYXNrLCBtYXApOwogCQl9Ci0JCWlmIChkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCi0JCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwkJaWYgKGNoaXAtPmlycV9zZXRfYWZmaW5pdHkpCisJCQljaGlwLT5pcnFfc2V0X2FmZmluaXR5KCZkZXNjLT5pcnFfZGF0YSwgbWFzaywgdHJ1ZSk7CiAJCWVsc2UgaWYgKGRlc2MtPmFjdGlvbiAmJiAhKHdhcm5lZCsrKSkKIAkJCXByaW50aygiQ2Fubm90IHNldCBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCX0KQEAgLTY3OCwxNiArNjg0LDE1IEBACiBzdGF0aWMgaW50IGlycV9zZXR1cF92aXJxKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZpcnEsCiAJCQkgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgcmVzOwogCi0JZGVzYyA9IGlycV90b19kZXNjX2FsbG9jX25vZGUodmlycSwgMCk7Ci0JaWYgKCFkZXNjKSB7CisJcmVzID0gaXJxX2FsbG9jX2Rlc2NfYXQodmlycSwgMCk7CisJaWYgKHJlcyAhPSB2aXJxKSB7CiAJCXByX2RlYnVnKCJpcnE6IC0+IGFsbG9jYXRpbmcgZGVzYyBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCS8qIENsZWFyIElSUV9OT1JFUVVFU1QgZmxhZyAqLwotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX05PUkVRVUVTVDsKKwlpcnFfY2xlYXJfc3RhdHVzX2ZsYWdzKHZpcnEsIElSUV9OT1JFUVVFU1QpOwogCiAJLyogbWFwIGl0ICovCiAJc21wX3dtYigpOwpAQCAtNjk2LDExICs3MDEsMTMgQEAKIAogCWlmIChob3N0LT5vcHMtPm1hcChob3N0LCB2aXJxLCBod2lycSkpIHsKIAkJcHJfZGVidWcoImlycTogLT4gbWFwcGluZyBmYWlsZWQsIGZyZWVpbmdcbiIpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGVycmRlc2M7CiAJfQogCiAJcmV0dXJuIDA7CiAKK2VycmRlc2M6CisJaXJxX2ZyZWVfZGVzY3ModmlycSwgMSk7CiBlcnJvcjoKIAlpcnFfZnJlZV92aXJ0KHZpcnEsIDEpOwogCXJldHVybiAtMTsKQEAgLTg3OSw5ICs4ODYsOSBAQAogCXNtcF9tYigpOwogCWlycV9tYXBbdmlycV0uaHdpcnEgPSBob3N0LT5pbnZhbF9pcnE7CiAKLQkvKiBTZXQgc29tZSBmbGFncyAqLwotCWlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVDsKKwlpcnFfc2V0X3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTk9SRVFVRVNUKTsKIAorCWlycV9mcmVlX2Rlc2NzKHZpcnEsIDEpOwogCS8qIEZyZWUgaXQgKi8KIAlpcnFfZnJlZV92aXJ0KHZpcnEsIDEpOwogfQpAQCAtMTA3NCwyMSArMTA4MSw2IEBACiAKIGludCBhcmNoX2Vhcmx5X2lycV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlkZXNjID0gaXJxX3RvX2Rlc2MoaSk7Ci0JCWlmIChkZXNjKQotCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9OT1JFUVVFU1Q7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBhcmNoX2luaXRfY2hpcF9kYXRhKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IG5vZGUpCi17Ci0JZGVzYy0+c3RhdHVzIHw9IElSUV9OT1JFUVVFU1Q7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNTksMTEgKzExNTEsMTQgQEAKIAkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAKIAkJaWYgKGRlc2MtPmFjdGlvbiAmJiBkZXNjLT5hY3Rpb24tPmhhbmRsZXIpIHsKKwkJCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKKwogCQkJc2VxX3ByaW50ZihtLCAiJTVkICAiLCBpKTsKIAkJCXNlcV9wcmludGYobSwgIjB4JTA1bHggICIsIHZpcnFfdG9faHcoaSkpOwogCi0JCQlpZiAoZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5uYW1lKQotCQkJCXAgPSBkZXNjLT5jaGlwLT5uYW1lOworCQkJY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOworCQkJaWYgKGNoaXAgJiYgY2hpcC0+bmFtZSkKKwkJCQlwID0gY2hpcC0+bmFtZTsKIAkJCWVsc2UKIAkJCQlwID0gbm9uZTsKIAkJCXNlcV9wcmludGYobSwgIiUtMTVzICAiLCBwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggYTVmODY3Mi4uYmQxZTFmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTI2LDIwICsyNiwyMyBAQAogCiAJZm9yX2VhY2hfaXJxKGkpIHsKIAkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisJCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKIAotCQlpZiAoIWRlc2MgfHwgIWRlc2MtPmNoaXApCisJCWlmICghZGVzYykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChkZXNjLT5jaGlwLT5lb2kgJiYKLQkJICAgIGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKQotCQkJZGVzYy0+Y2hpcC0+ZW9pKGkpOworCQljaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CisJCWlmICghY2hpcCkKKwkJCWNvbnRpbnVlOwogCi0JCWlmIChkZXNjLT5jaGlwLT5tYXNrKQotCQkJZGVzYy0+Y2hpcC0+bWFzayhpKTsKKwkJaWYgKGNoaXAtPmlycV9lb2kgJiYgZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpCisJCQljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiAKLQkJaWYgKGRlc2MtPmNoaXAtPmRpc2FibGUgJiYKLQkJICAgICEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkKLQkJCWRlc2MtPmNoaXAtPmRpc2FibGUoaSk7CisJCWlmIChjaGlwLT5pcnFfbWFzaykKKwkJCWNoaXAtPmlycV9tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CisKKwkJaWYgKGNoaXAtPmlycV9kaXNhYmxlICYmICEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkKKwkJCWNoaXAtPmlycV9kaXNhYmxlKCZkZXNjLT5pcnFfZGF0YSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKaW5kZXggYmIxMmIzMi4uYmVjMWU5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYwpAQCAtMjM3LDIyICsyMzcsNDUgQEAKIAlyZXR1cm4gY19zdW07CiB9CiAKKy8qCisgKiBQZXIgdGhlIGNyaXRlcmlhIHBhc3NlZCB2aWEgbnZyYW1fcmVtb3ZlX3BhcnRpdGlvbigpLCBzaG91bGQgdGhpcworICogcGFydGl0aW9uIGJlIHJlbW92ZWQ/ICAxPXJlbW92ZSwgMD1rZWVwCisgKi8KK3N0YXRpYyBpbnQgbnZyYW1fY2FuX3JlbW92ZV9wYXJ0aXRpb24oc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqcGFydCwKKwkJY29uc3QgY2hhciAqbmFtZSwgaW50IHNpZywgY29uc3QgY2hhciAqZXhjZXB0aW9uc1tdKQoreworCWlmIChwYXJ0LT5oZWFkZXIuc2lnbmF0dXJlICE9IHNpZykKKwkJcmV0dXJuIDA7CisJaWYgKG5hbWUpIHsKKwkJaWYgKHN0cm5jbXAobmFtZSwgcGFydC0+aGVhZGVyLm5hbWUsIDEyKSkKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAoZXhjZXB0aW9ucykgeworCQljb25zdCBjaGFyICoqZXhjZXB0OworCQlmb3IgKGV4Y2VwdCA9IGV4Y2VwdGlvbnM7ICpleGNlcHQ7IGV4Y2VwdCsrKSB7CisJCQlpZiAoIXN0cm5jbXAoKmV4Y2VwdCwgcGFydC0+aGVhZGVyLm5hbWUsIDEyKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKwogLyoqCiAgKiBudnJhbV9yZW1vdmVfcGFydGl0aW9uIC0gUmVtb3ZlIG9uZSBvciBtb3JlIHBhcnRpdGlvbnMgaW4gbnZyYW0KICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwYXJ0aXRpb24gdG8gcmVtb3ZlLCBvciBOVUxMIGZvciBhCiAgKiAgICAgICAgc2lnbmF0dXJlIG9ubHkgbWF0Y2gKICAqIEBzaWc6IHNpZ25hdHVyZSBvZiB0aGUgcGFydGl0aW9uKHMpIHRvIHJlbW92ZQorICogQGV4Y2VwdGlvbnM6IFdoZW4gcmVtb3ZpbmcgYWxsIHBhcnRpdGlvbnMgd2l0aCBhIG1hdGNoaW5nIHNpZ25hdHVyZSwKKyAqICAgICAgICBsZWF2ZSB0aGVzZSBhbG9uZS4KICAqLwogCi1pbnQgX19pbml0IG52cmFtX3JlbW92ZV9wYXJ0aXRpb24oY29uc3QgY2hhciAqbmFtZSwgaW50IHNpZykKK2ludCBfX2luaXQgbnZyYW1fcmVtb3ZlX3BhcnRpdGlvbihjb25zdCBjaGFyICpuYW1lLCBpbnQgc2lnLAorCQkJCQkJY29uc3QgY2hhciAqZXhjZXB0aW9uc1tdKQogewogCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKnBhcnQsICpwcmV2LCAqdG1wOwogCWludCByYzsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydCwgJm52cmFtX3BhcnRpdGlvbnMsIHBhcnRpdGlvbikgewotCQlpZiAocGFydC0+aGVhZGVyLnNpZ25hdHVyZSAhPSBzaWcpCi0JCQljb250aW51ZTsKLQkJaWYgKG5hbWUgJiYgc3RybmNtcChuYW1lLCBwYXJ0LT5oZWFkZXIubmFtZSwgMTIpKQorCQlpZiAoIW52cmFtX2Nhbl9yZW1vdmVfcGFydGl0aW9uKHBhcnQsIG5hbWUsIHNpZywgZXhjZXB0aW9ucykpCiAJCQljb250aW51ZTsKIAogCQkvKiBNYWtlIHBhcnRpdGlvbiBhIGZyZWUgcGFydGl0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9kbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfZG4uYwppbmRleCAyOTg1MjY4Li5kMjI1ZDk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9kbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2RuLmMKQEAgLTE3NiwxMSArMTc2LDE0IEBACiAgKi8KIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmV0Y2hfZGV2X2RuKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpvcmlnX2RuID0gZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYiA9IGRldi0+c3lzZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwogCXVuc2lnbmVkIGxvbmcgc2VhcmNodmFsID0gKGRldi0+YnVzLT5udW1iZXIgPDwgOCkgfCBkZXYtPmRldmZuOwogCi0JZG4gPSB0cmF2ZXJzZV9wY2lfZGV2aWNlcyhvcmlnX2RuLCBpc19kZXZmbl9ub2RlLCAodm9pZCAqKXNlYXJjaHZhbCk7CisJaWYgKFdBUk5fT04oIXBoYikpCisJCXJldHVybiBOVUxMOworCisJZG4gPSB0cmF2ZXJzZV9wY2lfZGV2aWNlcyhwaGItPmRuLCBpc19kZXZmbl9ub2RlLCAodm9pZCAqKXNlYXJjaHZhbCk7CiAJaWYgKGRuKQogCQlkZXYtPmRldi5vZl9ub2RlID0gZG47CiAJcmV0dXJuIGRuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBhYjZmNmJlLi45N2UwYWU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTI2OSw2ICsxMjY5LDI4IEBACiAJcmV0dXJuIGlwOwogfQogCitzdGF0aWMgYm9vbCBwbWNfb3ZlcmZsb3codW5zaWduZWQgbG9uZyB2YWwpCit7CisJaWYgKChpbnQpdmFsIDwgMCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIEV2ZW50cyBvbiBQT1dFUjcgY2FuIHJvbGwgYmFjayBpZiBhIHNwZWN1bGF0aXZlIGV2ZW50IGRvZXNuJ3QKKwkgKiBldmVudHVhbGx5IGNvbXBsZXRlLiBVbmZvcnR1bmF0ZWx5IGluIHNvbWUgcmFyZSBjYXNlcyB0aGV5IHdpbGwKKwkgKiByYWlzZSBhIHBlcmZvcm1hbmNlIG1vbml0b3IgZXhjZXB0aW9uLiBXZSBuZWVkIHRvIGNhdGNoIHRoaXMgdG8KKwkgKiBlbnN1cmUgd2UgcmVzZXQgdGhlIFBNQy4gSW4gYWxsIGNhc2VzIHRoZSBQTUMgd2lsbCBiZSAyNTYgb3IgbGVzcworCSAqIGN5Y2xlcyBmcm9tIG92ZXJmbG93LgorCSAqCisJICogV2Ugb25seSBkbyB0aGlzIGlmIHRoZSBmaXJzdCBwYXNzIGZhaWxzIHRvIGZpbmQgYW55IG92ZXJmbG93aW5nCisJICogUE1DcyBiZWNhdXNlIGEgdXNlciBtaWdodCBzZXQgYSBwZXJpb2Qgb2YgbGVzcyB0aGFuIDI1NiBhbmQgd2UKKwkgKiBkb24ndCB3YW50IHRvIG1pc3Rha2VubHkgcmVzZXQgdGhlbS4KKwkgKi8KKwlpZiAoX19pc19wcm9jZXNzb3IoUFZfUE9XRVI3KSAmJiAoKDB4ODAwMDAwMDAgLSB2YWwpIDw9IDI1NikpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogUGVyZm9ybWFuY2UgbW9uaXRvciBpbnRlcnJ1cHQgc3R1ZmYKICAqLwpAQCAtMTMxNiw3ICsxMzM4LDcgQEAKIAkJCWlmIChpc19saW1pdGVkX3BtYyhpICsgMSkpCiAJCQkJY29udGludWU7CiAJCQl2YWwgPSByZWFkX3BtYyhpICsgMSk7Ci0JCQlpZiAoKGludCl2YWwgPCAwKQorCQkJaWYgKHBtY19vdmVyZmxvdyh2YWwpKQogCQkJCXdyaXRlX3BtYyhpICsgMSwgMCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDgzMDNhNmMuLmY3NGYzNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMjE4LDExICsxMjE4LDExIEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGhyZWFkX2luZm9fY2FjaGU7CiAKLXN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvX25vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CiAKLQl0aSA9IGttZW1fY2FjaGVfYWxsb2ModGhyZWFkX2luZm9fY2FjaGUsIEdGUF9LRVJORUwpOworCXRpID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKHRocmVhZF9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMLCBub2RlKTsKIAlpZiAodW5saWtlbHkodGkgPT0gTlVMTCkpCiAJCXJldHVybiBOVUxMOwogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCA3MTg1ZjBkLi4wNWI3MTM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtOTcsNyArOTcsNyBAQAogCXN0YXJ0ID0gX19wYShpbml0aWFsX2Jvb3RfcGFyYW1zKTsKIAlzaXplID0gYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+dG90YWxzaXplKTsKIAotCWlmICgobWVtb3J5X2xpbWl0ICYmIChzdGFydCArIHNpemUpID4gbWVtb3J5X2xpbWl0KSB8fAorCWlmICgobWVtb3J5X2xpbWl0ICYmIChzdGFydCArIHNpemUpID4gUEhZU0lDQUxfU1RBUlQgKyBtZW1vcnlfbGltaXQpIHx8CiAJCQlvdmVybGFwc19jcmFzaGtlcm5lbChzdGFydCwgc2l6ZSkpIHsKIAkJcCA9IF9fdmEobWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKSk7CiAJCW1lbWNweShwLCBpbml0aWFsX2Jvb3RfcGFyYW1zLCBzaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IDkwNjUzNjkuLjg5NWIwODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjI5LDEyICsyMjksMTYgQEAKIAkJICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAogCQkgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKIHsKLQlpbnQgcmV0OworCWludCBpLCByZXQ7CiAKIAlpZiAodGFyZ2V0LT50aHJlYWQucmVncyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTzsKIAotCUNIRUNLX0ZVTExfUkVHUyh0YXJnZXQtPnRocmVhZC5yZWdzKTsKKwlpZiAoIUZVTExfUkVHUyh0YXJnZXQtPnRocmVhZC5yZWdzKSkgeworCQkvKiBXZSBoYXZlIGEgcGFydGlhbCByZWdpc3RlciBzZXQuICBGaWxsIDE0LTMxIHdpdGggYm9ndXMgdmFsdWVzICovCisJCWZvciAoaSA9IDE0OyBpIDwgMzI7IGkrKykKKwkJCXRhcmdldC0+dGhyZWFkLnJlZ3MtPmdwcltpXSA9IE5WX1JFR19QT0lTT047CisJfQogCiAJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKIAkJCQkgIHRhcmdldC0+dGhyZWFkLnJlZ3MsCkBAIC02NDEsMTEgKzY0NSwxNiBAQAogCWNvbXBhdF91bG9uZ190ICprID0ga2J1ZjsKIAljb21wYXRfdWxvbmdfdCBfX3VzZXIgKnUgPSB1YnVmOwogCWNvbXBhdF91bG9uZ190IHJlZzsKKwlpbnQgaTsKIAogCWlmICh0YXJnZXQtPnRocmVhZC5yZWdzID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCi0JQ0hFQ0tfRlVMTF9SRUdTKHRhcmdldC0+dGhyZWFkLnJlZ3MpOworCWlmICghRlVMTF9SRUdTKHRhcmdldC0+dGhyZWFkLnJlZ3MpKSB7CisJCS8qIFdlIGhhdmUgYSBwYXJ0aWFsIHJlZ2lzdGVyIHNldC4gIEZpbGwgMTQtMzEgd2l0aCBib2d1cyB2YWx1ZXMgKi8KKwkJZm9yIChpID0gMTQ7IGkgPCAzMjsgaSsrKQorCQkJdGFyZ2V0LT50aHJlYWQucmVncy0+Z3ByW2ldID0gTlZfUkVHX1BPSVNPTjsgCisJfQogCiAJcG9zIC89IHNpemVvZihyZWcpOwogCWNvdW50IC89IHNpemVvZihyZWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzZC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzZC5jCmluZGV4IDA0OWRiZWMuLjc5ODBlYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc2QuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNkLmMKQEAgLTQxMiw3ICs0MTIsOCBAQAogCiAJZ2V0X29ubGluZV9jcHVzKCk7CiAKLQljcHUgPSBjcHVtYXNrX25leHQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hc2spOworCS8qIHJhd18gT0sgYmVjYXVzZSBqdXN0IHVzaW5nIENQVSBhcyBzdGFydGluZyBwb2ludC4gKi8KKwljcHUgPSBjcHVtYXNrX25leHQocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXNrKTsKICAgICAgICAgaWYgKGNwdSA+PSBucl9jcHVfaWRzKSB7CiAJCWNwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21hdGhfZWZwLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aF9lZnAuYwppbmRleCA0MWY0ZWYzLi42MjI3OTIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aF9lZnAuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aF9lZnAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aF9lZnAuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIEF1dGhvcjogRWJvbnkgWmh1LAk8ZWJvbnkuemh1QGZyZWVzY2FsZS5jb20+CiAgKiAgICAgICAgIFl1IExpdSwJPHl1LmxpdUBmcmVlc2NhbGUuY29tPgpAQCAtMTA0LDYgKzEwNCw4IEBACiAjZGVmaW5lIEZQX0VYX01BU0sJKEZQX0VYX0lORVhBQ1QgfCBGUF9FWF9JTlZBTElEIHwgRlBfRVhfRElWWkVSTyB8IFwKIAkJCUZQX0VYX1VOREVSRkxPVyB8IEZQX0VYX09WRVJGTE9XKQogCitzdGF0aWMgaW50IGhhdmVfZTUwMF9jcHVfYTAwNV9lcnJhdHVtOworCiB1bmlvbiBkd191bmlvbiB7CiAJdTY0IGRwWzFdOwogCXUzMiB3cFsyXTsKQEAgLTMyMCw3ICszMjIsOCBAQAogCQkJfSBlbHNlIHsKIAkJCQlfRlBfUk9VTkRfWkVSTygxLCBTQik7CiAJCQl9Ci0JCQlGUF9UT19JTlRfUyh2Yy53cFsxXSwgU0IsIDMyLCAoKGZ1bmMgJiAweDMpICE9IDApKTsKKwkJCUZQX1RPX0lOVF9TKHZjLndwWzFdLCBTQiwgMzIsCisJCQkJCSgoKGZ1bmMgJiAweDMpICE9IDApIHx8IFNCX3MpKTsKIAkJCWdvdG8gdXBkYXRlX3JlZ3M7CiAKIAkJZGVmYXVsdDoKQEAgLTQ1OCw3ICs0NjEsOCBAQAogCQkJfSBlbHNlIHsKIAkJCQlfRlBfUk9VTkRfWkVSTygyLCBEQik7CiAJCQl9Ci0JCQlGUF9UT19JTlRfRCh2Yy53cFsxXSwgREIsIDMyLCAoKGZ1bmMgJiAweDMpICE9IDApKTsKKwkJCUZQX1RPX0lOVF9EKHZjLndwWzFdLCBEQiwgMzIsCisJCQkJCSgoKGZ1bmMgJiAweDMpICE9IDApIHx8IERCX3MpKTsKIAkJCWdvdG8gdXBkYXRlX3JlZ3M7CiAKIAkJZGVmYXVsdDoKQEAgLTU4OSw4ICs1OTMsMTAgQEAKIAkJCQlfRlBfUk9VTkRfWkVSTygxLCBTQjApOwogCQkJCV9GUF9ST1VORF9aRVJPKDEsIFNCMSk7CiAJCQl9Ci0JCQlGUF9UT19JTlRfUyh2Yy53cFswXSwgU0IwLCAzMiwgKChmdW5jICYgMHgzKSAhPSAwKSk7Ci0JCQlGUF9UT19JTlRfUyh2Yy53cFsxXSwgU0IxLCAzMiwgKChmdW5jICYgMHgzKSAhPSAwKSk7CisJCQlGUF9UT19JTlRfUyh2Yy53cFswXSwgU0IwLCAzMiwKKwkJCQkJKCgoZnVuYyAmIDB4MykgIT0gMCkgfHwgU0IwX3MpKTsKKwkJCUZQX1RPX0lOVF9TKHZjLndwWzFdLCBTQjEsIDMyLAorCQkJCQkoKChmdW5jICYgMHgzKSAhPSAwKSB8fCBTQjFfcykpOwogCQkJZ290byB1cGRhdGVfcmVnczsKIAogCQlkZWZhdWx0OgpAQCAtNjUyLDYgKzY1OCwxNSBAQAogCXJldHVybiAwOwogCiBpbGxlZ2FsOgorCWlmIChoYXZlX2U1MDBfY3B1X2EwMDVfZXJyYXR1bSkgeworCQkvKiBhY2NvcmRpbmcgdG8gZTUwMCBjcHUgYTAwNSBlcnJhdHVtLCByZWlzc3VlIGVmcCBpbnN0ICovCisJCXJlZ3MtPm5pcCAtPSA0OworI2lmZGVmIERFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJyZS1pc3N1ZSBlZnAgaW5zdDogJTA4bHhcbiIsIHNwZWluc24pOworI2VuZGlmCisJCXJldHVybiAwOworCX0KKwogCXByaW50ayhLRVJOX0VSUiAiXG5Pb29wcyEgSUVFRS03NTQgY29tcGxpYW5jZSBoYW5kbGVyIGVuY291bnRlcmVkIHVuLXN1cHBvcnRlZCBpbnN0cnVjdGlvbi5cbmluc3QgY29kZTogJTA4bHhcbiIsIHNwZWluc24pOwogCXJldHVybiAtRU5PU1lTOwogfQpAQCAtNzE4LDMgKzczMyw0MyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK2ludCBfX2luaXQgc3BlX21hdGhlbXVfaW5pdCh2b2lkKQoreworCXUzMiBwdnIsIG1haiwgbWluOworCisJcHZyID0gbWZzcHIoU1BSTl9QVlIpOworCisJaWYgKChQVlJfVkVSKHB2cikgPT0gUFZSX1ZFUl9FNTAwVjEpIHx8CisJICAgIChQVlJfVkVSKHB2cikgPT0gUFZSX1ZFUl9FNTAwVjIpKSB7CisJCW1haiA9IFBWUl9NQUoocHZyKTsKKwkJbWluID0gUFZSX01JTihwdnIpOworCisJCS8qCisJCSAqIEU1MDAgcmV2aXNpb24gYmVsb3cgMS4xLCAyLjMsIDMuMSwgNC4xLCA1LjEKKwkJICogbmVlZCBjcHUgYTAwNSBlcnJhdGEgd29ya2Fyb3VuZAorCQkgKi8KKwkJc3dpdGNoIChtYWopIHsKKwkJY2FzZSAxOgorCQkJaWYgKG1pbiA8IDEpCisJCQkJaGF2ZV9lNTAwX2NwdV9hMDA1X2VycmF0dW0gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWlmIChtaW4gPCAzKQorCQkJCWhhdmVfZTUwMF9jcHVfYTAwNV9lcnJhdHVtID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJY2FzZSA1OgorCQkJaWYgKG1pbiA8IDEpCisJCQkJaGF2ZV9lNTAwX2NwdV9hMDA1X2VycmF0dW0gPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChzcGVfbWF0aGVtdV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCmluZGV4IDc0MmRhNDMuLmQ2NWI1OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCWxvd21lbV9lbmRfYWRkciA9IG1lbXN0YXJ0X2FkZHIgKyB0b3RhbF9sb3dtZW07CiAjaWZuZGVmIENPTkZJR19ISUdITUVNCiAJCXRvdGFsX21lbW9yeSA9IHRvdGFsX2xvd21lbTsKLQkJbWVtYmxvY2tfZW5mb3JjZV9tZW1vcnlfbGltaXQobG93bWVtX2VuZF9hZGRyKTsKKwkJbWVtYmxvY2tfZW5mb3JjZV9tZW1vcnlfbGltaXQodG90YWxfbG93bWVtKTsKIAkJbWVtYmxvY2tfYW5hbHl6ZSgpOwogI2VuZGlmIC8qIENPTkZJR19ISUdITUVNICovCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2hfbG93LlMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUwppbmRleCBhZjQwNWVlLi43YzYzYzBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUwpAQCAtMTg5LDYgKzE4OSwxMyBAQAogCWJscgogCiAjaWZkZWYgQ09ORklHX1BQQ180N3gKKworLyoKKyAqIDQ3eCB2YXJpYW50IG9mIGljYnQKKyAqLworIyBkZWZpbmUgSUNCVChDVCxSQSxSQikJXAorCS5sb25nCTB4N2MwMDAwMmMgfCAoKENUKSA8PCAyMSkgfCAoKFJBKSA8PCAxNikgfCAoKFJCKSA8PCAxMSkKKwogLyoKICAqIF90bGJpdmF4X2JjYXN0IGlzIG9ubHkgb24gNDd4LiBXZSBkb24ndCBib3RoZXIgZG9pbmcgYSBydW50aW1lCiAgKiBjaGVjayB0aG91Z2gsIGl0IHdpbGwgYmxvdyB1cCBzb29uIGVub3VnaCBpZiB3ZSBtaXN0YWtlbmx5IHRyeQpAQCAtMjA2LDkgKzIxMywzNyBAQAogCWlzeW5jCiAJZWllaW8KIAl0bGJzeW5jCitCRUdJTl9GVFJfU0VDVElPTgorCWIJMWYKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSXzQ3Nl9ERDIpCiAJc3luYwogCXdydGVlCXIxMAogCWJscgorLyoKKyAqIEREMiBIVyBjb3VsZCBoYW5nIGlmIGluIGluc3RydWN0aW9uIGZldGNoIGhhcHBlbnMgYmVmb3JlIG1zeW5jIGNvbXBsZXRlcy4KKyAqIFRvdWNoIGVub3VnaCBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lcyB0byBlbnN1cmUgY2FjaGUgaGl0cworICovCisxOgltZmxyCXI5CisJYmwJMmYKKzI6CW1mbHIJcjYKKwlsaQlyNywzMgorCUlDQlQoMCxyNixyNykJCS8qIHRvdWNoIG5leHQgY2FjaGUgbGluZSAqLworCWFkZAlyNixyNixyNworCUlDQlQoMCxyNixyNykJCS8qIHRvdWNoIG5leHQgY2FjaGUgbGluZSAqLworCWFkZAlyNixyNixyNworCUlDQlQoMCxyNixyNykJCS8qIHRvdWNoIG5leHQgY2FjaGUgbGluZSAqLworCXN5bmMKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwltdGxyCXI5CisJd3J0ZWUJcjEwCisJYmxyCiAjZW5kaWYgLyogQ09ORklHX1BQQ180N3ggKi8KIAogI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvNDR4LmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC80NHguaAppbmRleCBkYmM0ZDJiLi42M2Y3MDNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC80NHguaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC80NHguaApAQCAtNCw0ICs0LDggQEAKIGV4dGVybiB1OCBhczFfcmVhZGIodm9sYXRpbGUgdTggX19pb21lbSAgKmFkZHIpOwogZXh0ZXJuIHZvaWQgYXMxX3dyaXRlYih1OCBkYXRhLCB2b2xhdGlsZSB1OCBfX2lvbWVtICphZGRyKTsKIAorI2RlZmluZSBHUElPMF9PU1JICTB4QworI2RlZmluZSBHUElPMF9UU1JICTB4MTQKKyNkZWZpbmUgR1BJTzBfSVNSMUgJMHgzNAorCiAjZW5kaWYgLyogX19QT1dFUlBDX1BMQVRGT1JNU180NFhfNDRYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCmluZGV4IDBmOTc5YzUuLmY0ODVmYzVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKQEAgLTExNSw3ICsxMTUsNiBAQAogCWJvb2wgIkNhbnlvbmxhbmRzIgogCWRlcGVuZHMgb24gNDR4CiAJZGVmYXVsdCBuCi0Jc2VsZWN0IFBQQzQ0eF9TSU1QTEUKIAlzZWxlY3QgNDYwRVgKIAlzZWxlY3QgUENJCiAJc2VsZWN0IFBQQzR4eF9QQ0lfRVhQUkVTUwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9NYWtlZmlsZQppbmRleCBjMDRkMTZkLi41NTNkYjYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9NYWtlZmlsZQpAQCAtOSwzICs5LDQgQEAKIG9iai0kKENPTkZJR19YSUxJTlhfVklSVEVYXzVfRlhUKSArPSB2aXJ0ZXgubwogb2JqLSQoQ09ORklHX1hJTElOWF9NTDUxMCkgKz0gdmlydGV4X21sNTEwLm8KIG9iai0kKENPTkZJR19JU1M0eHgpCSs9IGlzczR4eC5vCitvYmotJChDT05GSUdfQ0FOWU9OTEFORFMpKz0gY2FueW9ubGFuZHMubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvY2FueW9ubGFuZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2NhbnlvbmxhbmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjNWU4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2NhbnlvbmxhbmRzLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBUaGlzIGNvbnRhaW4gcGxhdGZvcm0gc3BlY2lmaWMgY29kZSBmb3IgQVBNIFBQQzQ2MEVYIGJhc2VkIENhbnlvbmxhbmRzCisgKiBib2FyZC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogUnVwanlvdGkgU2FybWFoIDxyc2FybWFoQGFwbS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL3VpYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICI0NHguaCIKKworI2RlZmluZSBCQ1NSX1VTQl9FTgkweDExCisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgcHBjNDYwZXhfb2ZfYnVzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcGM0NjBleF9kZXZpY2VfcHJvYmUodm9pZCkKK3sKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgcHBjNDYwZXhfb2ZfYnVzLCBOVUxMKTsKKworCXJldHVybiAwOworfQorbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoY2FueW9ubGFuZHMsIHBwYzQ2MGV4X2RldmljZV9wcm9iZSk7CisKKy8qIFVzaW5nIHRoaXMgY29kZSBvbmx5IGZvciB0aGUgQ2FueW9ubGFuZHMgYm9hcmQuICAqLworCitzdGF0aWMgaW50IF9faW5pdCBwcGM0NjBleF9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJhbWNjLGNhbnlvbmxhbmRzIikpIHsKKwkJcHBjX3BjaV9zZXRfZmxhZ3MoUFBDX1BDSV9SRUFTU0lHTl9BTExfUlNSQyk7CisJCXJldHVybiAxOworCQl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFVTQiBQSFkgZml4dXAgY29kZSBvbiBDYW55b25sYW5kcyBraXQuICovCisKK3N0YXRpYyBpbnQgX19pbml0IHBwYzQ2MGV4X2NhbnlvbmxhbmRzX2ZpeHVwKHZvaWQpCit7CisJdTggX19pb21lbSAqYmNzciA7CisJdm9pZCBfX2lvbWVtICp2YWRkcjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCByZXQgPSAwOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYW1jYyxwcGM0NjBleC1iY3NyIik7CisJaWYgKCFucCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCBkaWQgbm90IGZpbmQgYW1jYywgcHBjNDYwZXggYmNzciBub2RlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYmNzciA9IG9mX2lvbWFwKG5wLCAwKTsKKwlvZl9ub2RlX3B1dChucCk7CisKKwlpZiAoIWJjc3IpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiQ291bGQgbm90IHJlbWFwIGJjc3JcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9iY3NyOworCX0KKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImlibSxwcGM0eHgtZ3BpbyIpOworCWlmICghbnApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgZGlkIG5vdCBmaW5kIGlibSxwcGM0eHgtZ3BpbyBub2RlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdmFkZHIgPSBvZl9pb21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworCisJaWYgKCF2YWRkcikgeworCQlwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgZ2V0IGdwaW8gbm9kZSBhZGRyZXNzXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZ3BpbzsKKwl9CisJLyogRGlzYWJsZSBVU0IsIHRocm91Z2ggdGhlIEJDU1I3IGJpdHMgKi8KKwlzZXRiaXRzOCgmYmNzcls3XSwgQkNTUl9VU0JfRU4pOworCisJLyogV2FpdCBmb3IgYSB3aGlsZSBhZnRlciByZXNldCAqLworCW1zbGVlcCgxMDApOworCisJLyogRW5hYmxlIFVTQiBoZXJlICovCisJY2xyYml0czgoJmJjc3JbN10sIEJDU1JfVVNCX0VOKTsKKworCS8qCisJICogQ29uZmlndXJlIG11bHRpcGxleGVkIGdwaW8xNiBhbmQgZ3BpbzE5IGFzIGFsdGVybmF0ZTEgb3V0cHV0CisJICogc291cmNlIGFmdGVyIFVTQiByZXNldC4gSW4gdGhpcyBjb25maWd1cmF0aW9uIGdwaW8xNiB3aWxsIGJlCisJICogVVNCMkhTdG9wIGFuZCBncGlvMTkgd2lsbCBiZSBVU0IyRFN0b3AuIEZvciBtb3JlIGRldGFpbHMgcmVmZXIgdG8KKwkgKiB0YWJsZSAzNC03IG9mIFBQQzQ2MEVYIHVzZXIgbWFudWFsLgorCSAqLworCXNldGJpdHMzMigodmFkZHIgKyBHUElPMF9PU1JIKSwgMHg0MjAwMDAwMCk7CisJc2V0Yml0czMyKCh2YWRkciArIEdQSU8wX1RTUkgpLCAweDQyMDAwMDAwKTsKK2Vycl9ncGlvOgorCWlvdW5tYXAodmFkZHIpOworZXJyX2Jjc3I6CisJaW91bm1hcChiY3NyKTsKKwlyZXR1cm4gcmV0OworfQorbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoY2FueW9ubGFuZHMsIHBwYzQ2MGV4X2NhbnlvbmxhbmRzX2ZpeHVwKTsKK2RlZmluZV9tYWNoaW5lKGNhbnlvbmxhbmRzKSB7CisJLm5hbWUgPSAiQ2FueW9ubGFuZHMiLAorCS5wcm9iZSA9IHBwYzQ2MGV4X3Byb2JlLAorCS5wcm9ncmVzcyA9IHVkYmdfcHJvZ3Jlc3MsCisJLmluaXRfSVJRID0gdWljX2luaXRfdHJlZSwKKwkuZ2V0X2lycSA9IHVpY19nZXRfaXJxLAorCS5yZXN0YXJ0ID0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKKwkuY2FsaWJyYXRlX2RlY3IgPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYwppbmRleCA3ZGRjYmEzLi5jODFjMTljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jCkBAIC01Myw3ICs1Myw2IEBACiAJImFtY2MsYXJjaGVzIiwKIAkiYW1jYyxiYW1ib28iLAogCSJhbWNjLGJsdWVzdG9uZSIsCi0JImFtY2MsY2FueW9ubGFuZHMiLAogCSJhbWNjLGdsYWNpZXIiLAogCSJpYm0sZWJvbnkiLAogCSJhbWNjLGVpZ2VyIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCmluZGV4IDRlY2Y0Y2YuLmZkZTBlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYwpAQCAtNTksOSArNTksOSBAQAogfQogCiBzdGF0aWMgdm9pZAotY3BsZF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorY3BsZF9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbGRfaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2lycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IGNwbGRfaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAJdm9pZCBfX2lvbWVtICpwaWNfbWFzayA9IGlycV90b19waWNfbWFzayhjcGxkX2lycSk7CiAKIAlvdXRfOChwaWNfbWFzaywKQEAgLTY5LDkgKzY5LDkgQEAKIH0KIAogc3RhdGljIHZvaWQKLWNwbGRfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorY3BsZF91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3BsZF9pcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbaXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgY3BsZF9pcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAl2b2lkIF9faW9tZW0gKnBpY19tYXNrID0gaXJxX3RvX3BpY19tYXNrKGNwbGRfaXJxKTsKIAogCW91dF84KHBpY19tYXNrLApAQCAtODAsOSArODAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbGRfcGljID0gewogCS5uYW1lID0gIkNQTEQgUElDIiwKLQkubWFzayA9IGNwbGRfbWFza19pcnEsCi0JLmFjayA9IGNwbGRfbWFza19pcnEsCi0JLnVubWFzayA9IGNwbGRfdW5tYXNrX2lycSwKKwkuaXJxX21hc2sgPSBjcGxkX21hc2tfaXJxLAorCS5pcnFfYWNrID0gY3BsZF9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IGNwbGRfdW5tYXNrX2lycSwKIH07CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYwppbmRleCAyYzc3ODBjLi4yYmQxZTZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jCkBAIC00OSw0NSArNDksNDYgQEAKIH07CiBzdHJ1Y3QgbWVkaWE1MjAwX2lycSBtZWRpYTUyMDBfaXJxOwogCi1zdGF0aWMgdm9pZCBtZWRpYTUyMDBfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1lZGlhNTIwMF9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB2YWw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWVkaWE1MjAwX2lycS5sb2NrLCBmbGFncyk7CiAJdmFsID0gaW5fYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSk7Ci0JdmFsIHw9IDEgPDwgKE1FRElBNTIwMF9JUlFfU0hJRlQgKyBpcnFfbWFwW3ZpcnFdLmh3aXJxKTsKKwl2YWwgfD0gMSA8PCAoTUVESUE1MjAwX0lSUV9TSElGVCArIGlycV9tYXBbZC0+aXJxXS5od2lycSk7CiAJb3V0X2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUsIHZhbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWVkaWE1MjAwX2lycS5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIG1lZGlhNTIwMF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1lZGlhNTIwMF9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdmFsOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOwogCXZhbCA9IGluX2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUpOwotCXZhbCAmPSB+KDEgPDwgKE1FRElBNTIwMF9JUlFfU0hJRlQgKyBpcnFfbWFwW3ZpcnFdLmh3aXJxKSk7CisJdmFsICY9IH4oMSA8PCAoTUVESUE1MjAwX0lSUV9TSElGVCArIGlycV9tYXBbZC0+aXJxXS5od2lycSkpOwogCW91dF9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFLCB2YWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1lZGlhNTIwMF9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJNZWRpYTUyMDAgRlBHQSIsCi0JLnVubWFzayA9IG1lZGlhNTIwMF9pcnFfdW5tYXNrLAotCS5tYXNrID0gbWVkaWE1MjAwX2lycV9tYXNrLAotCS5tYXNrX2FjayA9IG1lZGlhNTIwMF9pcnFfbWFzaywKKwkuaXJxX3VubWFzayA9IG1lZGlhNTIwMF9pcnFfdW5tYXNrLAorCS5pcnFfbWFzayA9IG1lZGlhNTIwMF9pcnFfbWFzaywKKwkuaXJxX21hc2tfYWNrID0gbWVkaWE1MjAwX2lycV9tYXNrLAogfTsKIAogdm9pZCBtZWRpYTUyMDBfaXJxX2Nhc2NhZGUodW5zaWduZWQgaW50IHZpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAlpbnQgc3ViX3ZpcnEsIHZhbDsKIAl1MzIgc3RhdHVzLCBlbmFibGU7CiAKIAkvKiBNYXNrIG9mZiB0aGUgY2FzY2FkZWQgSVJRICovCiAJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JZGVzYy0+Y2hpcC0+bWFzayh2aXJxKTsKKwljaGlwLT5pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOwogCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAKIAkvKiBBc2sgdGhlIEZQR0EgZm9yIElSUSBzdGF0dXMuICBJZiAndmFsJyBpcyAwLCB0aGVuIG5vIGlycXMKQEAgLTEwNSw5ICsxMDYsOSBAQAogCiAJLyogUHJvY2Vzc2luZyBkb25lOyBjYW4gcmVlbmFibGUgdGhlIGNhc2NhZGUgbm93ICovCiAJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JZGVzYy0+Y2hpcC0+YWNrKHZpcnEpOworCWNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsKIAlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKQotCQlkZXNjLT5jaGlwLT51bm1hc2sodmlycSk7CisJCWNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKIAlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwdC5jCmluZGV4IDg1OWFiZjEuLjZkYTQ0ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwdC5jCkBAIC0xMzUsOSArMTM1LDkgQEAKICAqIENhc2NhZGVkIGludGVycnVwdCBjb250cm9sbGVyIGhvb2tzCiAgKi8KIAotc3RhdGljIHZvaWQgbXBjNTJ4eF9ncHRfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1wYzUyeHhfZ3B0X2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKQEAgLTE0NSw5ICsxNDUsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBtcGM1Mnh4X2dwdF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1wYzUyeHhfZ3B0X2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CkBAIC0xNTUsMjAgKzE1NSwyMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBtcGM1Mnh4X2dwdF9pcnFfYWNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjNTJ4eF9ncHRfaXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCW91dF9iZTMyKCZncHQtPnJlZ3MtPnN0YXR1cywgTVBDNTJ4eF9HUFRfU1RBVFVTX0lSUU1BU0spOwogfQogCi1zdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfaXJxX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHJlZzsKIAotCWRldl9kYmcoZ3B0LT5kZXYsICIlczogdmlycT0laSB0eXBlPSV4XG4iLCBfX2Z1bmNfXywgdmlycSwgZmxvd190eXBlKTsKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IHZpcnE9JWkgdHlwZT0leFxuIiwgX19mdW5jX18sIGQtPmlycSwgZmxvd190eXBlKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKIAlyZWcgPSBpbl9iZTMyKCZncHQtPnJlZ3MtPm1vZGUpICYgfk1QQzUyeHhfR1BUX01PREVfSUNUX01BU0s7CkBAIC0xODQsMTAgKzE4NCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzUyeHhfZ3B0X2lycV9jaGlwID0gewogCS5uYW1lID0gIk1QQzUyeHggR1BUIiwKLQkudW5tYXNrID0gbXBjNTJ4eF9ncHRfaXJxX3VubWFzaywKLQkubWFzayA9IG1wYzUyeHhfZ3B0X2lycV9tYXNrLAotCS5hY2sgPSBtcGM1Mnh4X2dwdF9pcnFfYWNrLAotCS5zZXRfdHlwZSA9IG1wYzUyeHhfZ3B0X2lycV9zZXRfdHlwZSwKKwkuaXJxX3VubWFzayA9IG1wYzUyeHhfZ3B0X2lycV91bm1hc2ssCisJLmlycV9tYXNrID0gbXBjNTJ4eF9ncHRfaXJxX21hc2ssCisJLmlycV9hY2sgPSBtcGM1Mnh4X2dwdF9pcnFfYWNrLAorCS5pcnFfc2V0X3R5cGUgPSBtcGM1Mnh4X2dwdF9pcnFfc2V0X3R5cGUsCiB9OwogCiB2b2lkIG1wYzUyeHhfZ3B0X2lycV9jYXNjYWRlKHVuc2lnbmVkIGludCB2aXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BpYy5jCmluZGV4IDRiZjRiZjcuLjlmM2VkNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BpYy5jCkBAIC0xNTUsNDcgKzE1NSw0NyBAQAogLyoKICAqIElSUVswLTNdIGludGVycnVwdCBpcnFfY2hpcAogICovCi1zdGF0aWMgdm9pZCBtcGM1Mnh4X2V4dGlycV9tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjNTJ4eF9leHRpcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaW50IGlycTsKIAlpbnQgbDJpcnE7CiAKLQlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKIAlpb19iZV9jbHJiaXQoJmludHItPmN0cmwsIDExIC0gbDJpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBtcGM1Mnh4X2V4dGlycV91bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBtcGM1Mnh4X2V4dGlycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCWludCBpcnE7CiAJaW50IGwyaXJxOwogCi0JaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKKwlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5jdHJsLCAxMSAtIGwyaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgbXBjNTJ4eF9leHRpcnFfYWNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjNTJ4eF9leHRpcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQgaXJxOwogCWludCBsMmlycTsKIAotCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CisJaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAogCWlvX2JlX3NldGJpdCgmaW50ci0+Y3RybCwgMjctbDJpcnEpOwogfQogCi1zdGF0aWMgaW50IG1wYzUyeHhfZXh0aXJxX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQorc3RhdGljIGludCBtcGM1Mnh4X2V4dGlycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7CiAJdTMyIGN0cmxfcmVnLCB0eXBlOwogCWludCBpcnE7CiAJaW50IGwyaXJxOwogCXZvaWQgKmhhbmRsZXIgPSBoYW5kbGVfbGV2ZWxfaXJxOwogCi0JaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKKwlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCiAJcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkIGZsb3dfdHlwZT0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEsIGZsb3dfdHlwZSk7CkBAIC0yMTQsNDQgKzIxNCw0NCBAQAogCWN0cmxfcmVnIHw9ICh0eXBlIDw8ICgyMiAtIChsMmlycSAqIDIpKSk7CiAJb3V0X2JlMzIoJmludHItPmN0cmwsIGN0cmxfcmVnKTsKIAotCV9fc2V0X2lycV9oYW5kbGVyX3VubG9ja2VkKHZpcnEsIGhhbmRsZXIpOworCV9fc2V0X2lycV9oYW5kbGVyX3VubG9ja2VkKGQtPmlycSwgaGFuZGxlcik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM1Mnh4X2V4dGlycV9pcnFjaGlwID0gewogCS5uYW1lID0gIk1QQzUyeHggRXh0ZXJuYWwiLAotCS5tYXNrID0gbXBjNTJ4eF9leHRpcnFfbWFzaywKLQkudW5tYXNrID0gbXBjNTJ4eF9leHRpcnFfdW5tYXNrLAotCS5hY2sgPSBtcGM1Mnh4X2V4dGlycV9hY2ssCi0JLnNldF90eXBlID0gbXBjNTJ4eF9leHRpcnFfc2V0X3R5cGUsCisJLmlycV9tYXNrID0gbXBjNTJ4eF9leHRpcnFfbWFzaywKKwkuaXJxX3VubWFzayA9IG1wYzUyeHhfZXh0aXJxX3VubWFzaywKKwkuaXJxX2FjayA9IG1wYzUyeHhfZXh0aXJxX2FjaywKKwkuaXJxX3NldF90eXBlID0gbXBjNTJ4eF9leHRpcnFfc2V0X3R5cGUsCiB9OwogCiAvKgogICogTWFpbiBpbnRlcnJ1cHQgaXJxX2NoaXAKICAqLwotc3RhdGljIGludCBtcGM1Mnh4X251bGxfc2V0X3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCitzdGF0aWMgaW50IG1wYzUyeHhfbnVsbF9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7CiAJcmV0dXJuIDA7IC8qIERvIG5vdGhpbmcgc28gdGhhdCB0aGUgc2Vuc2UgbWFzayB3aWxsIGdldCB1cGRhdGVkICovCiB9CiAKLXN0YXRpYyB2b2lkIG1wYzUyeHhfbWFpbl9tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjNTJ4eF9tYWluX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCWludCBpcnE7CiAJaW50IGwyaXJxOwogCi0JaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKKwlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5tYWluX21hc2ssIDE2IC0gbDJpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBtcGM1Mnh4X21haW5fdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjNTJ4eF9tYWluX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaW50IGlycTsKIAlpbnQgbDJpcnE7CiAKLQlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKIAlpb19iZV9jbHJiaXQoJmludHItPm1haW5fbWFzaywgMTYgLSBsMmlycSk7CkBAIC0yNTksMzIgKzI1OSwzMiBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzUyeHhfbWFpbl9pcnFjaGlwID0gewogCS5uYW1lID0gIk1QQzUyeHggTWFpbiIsCi0JLm1hc2sgPSBtcGM1Mnh4X21haW5fbWFzaywKLQkubWFza19hY2sgPSBtcGM1Mnh4X21haW5fbWFzaywKLQkudW5tYXNrID0gbXBjNTJ4eF9tYWluX3VubWFzaywKLQkuc2V0X3R5cGUgPSBtcGM1Mnh4X251bGxfc2V0X3R5cGUsCisJLmlycV9tYXNrID0gbXBjNTJ4eF9tYWluX21hc2ssCisJLmlycV9tYXNrX2FjayA9IG1wYzUyeHhfbWFpbl9tYXNrLAorCS5pcnFfdW5tYXNrID0gbXBjNTJ4eF9tYWluX3VubWFzaywKKwkuaXJxX3NldF90eXBlID0gbXBjNTJ4eF9udWxsX3NldF90eXBlLAogfTsKIAogLyoKICAqIFBlcmlwaGVyYWxzIGludGVycnVwdCBpcnFfY2hpcAogICovCi1zdGF0aWMgdm9pZCBtcGM1Mnh4X3BlcmlwaF9tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjNTJ4eF9wZXJpcGhfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaW50IGlycTsKIAlpbnQgbDJpcnE7CiAKLQlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKIAlpb19iZV9zZXRiaXQoJmludHItPnBlcl9tYXNrLCAzMSAtIGwyaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgbXBjNTJ4eF9wZXJpcGhfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjNTJ4eF9wZXJpcGhfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQgaXJxOwogCWludCBsMmlycTsKIAotCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CisJaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAogCWlvX2JlX2NscmJpdCgmaW50ci0+cGVyX21hc2ssIDMxIC0gbDJpcnEpOwpAQCAtMjkyLDQzICsyOTIsNDMgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM1Mnh4X3BlcmlwaF9pcnFjaGlwID0gewogCS5uYW1lID0gIk1QQzUyeHggUGVyaXBoZXJhbHMiLAotCS5tYXNrID0gbXBjNTJ4eF9wZXJpcGhfbWFzaywKLQkubWFza19hY2sgPSBtcGM1Mnh4X3BlcmlwaF9tYXNrLAotCS51bm1hc2sgPSBtcGM1Mnh4X3BlcmlwaF91bm1hc2ssCi0JLnNldF90eXBlID0gbXBjNTJ4eF9udWxsX3NldF90eXBlLAorCS5pcnFfbWFzayA9IG1wYzUyeHhfcGVyaXBoX21hc2ssCisJLmlycV9tYXNrX2FjayA9IG1wYzUyeHhfcGVyaXBoX21hc2ssCisJLmlycV91bm1hc2sgPSBtcGM1Mnh4X3BlcmlwaF91bm1hc2ssCisJLmlycV9zZXRfdHlwZSA9IG1wYzUyeHhfbnVsbF9zZXRfdHlwZSwKIH07CiAKIC8qCiAgKiBTRE1BIGludGVycnVwdCBpcnFfY2hpcAogICovCi1zdGF0aWMgdm9pZCBtcGM1Mnh4X3NkbWFfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1wYzUyeHhfc2RtYV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQgaXJxOwogCWludCBsMmlycTsKIAotCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CisJaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAogCWlvX2JlX3NldGJpdCgmc2RtYS0+SW50TWFzaywgbDJpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBtcGM1Mnh4X3NkbWFfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjNTJ4eF9zZG1hX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaW50IGlycTsKIAlpbnQgbDJpcnE7CiAKLQlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKIAlpb19iZV9jbHJiaXQoJnNkbWEtPkludE1hc2ssIGwyaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgbXBjNTJ4eF9zZG1hX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1wYzUyeHhfc2RtYV9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCWludCBpcnE7CiAJaW50IGwyaXJxOwogCi0JaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKKwlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCiAJb3V0X2JlMzIoJnNkbWEtPkludFBlbmQsIDEgPDwgbDJpcnEpOwpAQCAtMzM2LDEwICszMzYsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM1Mnh4X3NkbWFfaXJxY2hpcCA9IHsKIAkubmFtZSA9ICJNUEM1Mnh4IFNETUEiLAotCS5tYXNrID0gbXBjNTJ4eF9zZG1hX21hc2ssCi0JLnVubWFzayA9IG1wYzUyeHhfc2RtYV91bm1hc2ssCi0JLmFjayA9IG1wYzUyeHhfc2RtYV9hY2ssCi0JLnNldF90eXBlID0gbXBjNTJ4eF9udWxsX3NldF90eXBlLAorCS5pcnFfbWFzayA9IG1wYzUyeHhfc2RtYV9tYXNrLAorCS5pcnFfdW5tYXNrID0gbXBjNTJ4eF9zZG1hX3VubWFzaywKKwkuaXJxX2FjayA9IG1wYzUyeHhfc2RtYV9hY2ssCisJLmlycV9zZXRfdHlwZSA9IG1wYzUyeHhfbnVsbF9zZXRfdHlwZSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L01ha2VmaWxlCmluZGV4IGQ5ODI3OTMuLjQ1NWZlMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvTWFrZWZpbGUKQEAgLTYsNCArNiw0IEBACiBvYmotJChDT05GSUdfUFEyX0FEU19QQ0lfUElDKSArPSBwcTJhZHMtcGNpLXBpYy5vCiBvYmotJChDT05GSUdfUFEyRkFEUykgKz0gcHEyZmFkcy5vCiBvYmotJChDT05GSUdfRVA4MjQ4RSkgKz0gZXA4MjQ4ZS5vCi1vYmotJChDT05GSUdfTUdDT0dFKSArPSBtZ2NvZ2Uubworb2JqLSQoQ09ORklHX01HQ09HRSkgKz0ga204Mnh4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9tZ2NvZ2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9rbTgyeHguYwpzaW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9rbTgyeHguYwppbmRleCA3YTVkZTllLi40MjhjNWUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2ttODJ4eC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIEtleW1pbGUgbWdjb2dlIHN1cHBvcnQKLSAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogS2V5bWlsZSBrbTgyeHggc3VwcG9ydAorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKICAqIEF1dGhvcjogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CiAgKgogICogYmFzZWQgb24gY29kZSBmcm9tOgpAQCAtMzEsOSArMzEsMTAgQEAKIAogI2luY2x1ZGUgInBxMi5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWdjb2dlX3BpY19pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQga204Mnh4X3BpY19pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wscHEyLXBpYyIpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJCQkJCSJmc2wscHEyLXBpYyIpOwogCWlmICghbnApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQSUMgaW5pdDogY2FuIG5vdCBmaW5kIGNwbS1waWMgbm9kZVxuIik7CiAJCXJldHVybjsKQEAgLTQ3LDEyICs0OCwxOCBAQAogCWludCBwb3J0LCBwaW4sIGZsYWdzOwogfTsKIAotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGNwbV9waW4gbWdjb2dlX3BpbnNbXSA9IHsKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBjcG1fcGluIGttODJ4eF9waW5zW10gPSB7CiAKIAkvKiBTTUMyICovCiAJezAsIDgsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAogCXswLCA5LCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCiAKKwkvKiBTQ0MxICovCisJezIsIDIxLCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MiwgMTUsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXszLCAzMSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezMsIDMwLCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fU0VDT05EQVJZfSwKKwogCS8qIFNDQzQgKi8KIAl7MiwgMjUsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAogCXsyLCAyNCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCkBAIC0xMDcsMzAgKzExNCw0OSBAQAogCXszLCAxNCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fU0VDT05EQVJZIHwgQ1BNX1BJTl9PUEVORFJBSU59LAogCXszLCAxNSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fU0VDT05EQVJZIHwgQ1BNX1BJTl9PUEVORFJBSU59LAogI2VuZGlmCisKKwkvKiBVU0IgKi8KKwl7MCwgMTAsIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9HUElPfSwgICAgLyogRlVMTF9TUEVFRCAqLworCXswLCAxMSwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX0dQSU99LCAgICAvKi9TTEFWRSAqLworCXsyLCAxMCwgQ1BNX1BJTl9JTlBVVCAgfCBDUE1fUElOX1BSSU1BUll9LCAvKiBSWE4gKi8KKwl7MiwgMTEsIENQTV9QSU5fSU5QVVQgIHwgQ1BNX1BJTl9QUklNQVJZfSwgLyogUlhQICovCisJezIsIDIwLCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sIC8qIC9PRSAqLworCXsyLCAyNywgQ1BNX1BJTl9JTlBVVCAgfCBDUE1fUElOX1BSSU1BUll9LCAvKiBSWENMSyAqLworCXszLCAyMywgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LCAvKiBUWFAgKi8KKwl7MywgMjQsIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwgLyogVFhOICovCisJezMsIDI1LCBDUE1fUElOX0lOUFVUICB8IENQTV9QSU5fUFJJTUFSWX0sIC8qIFJYRCAqLwogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfaW9wb3J0cyh2b2lkKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWdjb2dlX3BpbnMpOyBpKyspIHsKLQkJY29uc3Qgc3RydWN0IGNwbV9waW4gKnBpbiA9ICZtZ2NvZ2VfcGluc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrbTgyeHhfcGlucyk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY3BtX3BpbiAqcGluID0gJmttODJ4eF9waW5zW2ldOwogCQljcG0yX3NldF9waW4ocGluLT5wb3J0LCBwaW4tPnBpbiwgcGluLT5mbGFncyk7CiAJfQogCiAJY3BtMl9zbWNfY2xrX3NldHVwKENQTV9DTEtfU01DMiwgQ1BNX0JSRzgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMSwgQ1BNX0NMSzExLCBDUE1fQ0xLX1JYKTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzEsIENQTV9DTEsxMSwgQ1BNX0NMS19UWCk7CisJY3BtMl9jbGtfc2V0dXAoQ1BNX0NMS19TQ0MzLCBDUE1fQ0xLNSwgQ1BNX0NMS19SVFgpOwogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDNCwgQ1BNX0NMSzcsIENQTV9DTEtfUlgpOwogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDNCwgQ1BNX0NMSzgsIENQTV9DTEtfVFgpOwogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfRkNDMSwgQ1BNX0NMSzEwLCBDUE1fQ0xLX1JYKTsKIAljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX0ZDQzEsIENQTV9DTEs5LCAgQ1BNX0NMS19UWCk7CiAJY3BtMl9jbGtfc2V0dXAoQ1BNX0NMS19GQ0MyLCBDUE1fQ0xLMTMsIENQTV9DTEtfUlgpOwogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfRkNDMiwgQ1BNX0NMSzE0LCBDUE1fQ0xLX1RYKTsKKworCS8qIEZvcmNlIFVTQiBGVUxMIFNQRUVEIGJpdCB0byAnMScgKi8KKwlzZXRiaXRzMzIoJmNwbTJfaW1tci0+aW1faW9wb3J0LmlvcF9wZGF0YSwgMSA8PCAoMzEgLSAxMCkpOworCS8qIGNsZWFyIFVTQl9TTEFWRSAqLworCWNscmJpdHMzMigmY3BtMl9pbW1yLT5pbV9pb3BvcnQuaW9wX3BkYXRhLCAxIDw8ICgzMSAtIDExKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtZ2NvZ2Vfc2V0dXBfYXJjaCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGttODJ4eF9zZXR1cF9hcmNoKHZvaWQpCiB7CiAJaWYgKHBwY19tZC5wcm9ncmVzcykKLQkJcHBjX21kLnByb2dyZXNzKCJtZ2NvZ2Vfc2V0dXBfYXJjaCgpIiwgMCk7CisJCXBwY19tZC5wcm9ncmVzcygia204Mnh4X3NldHVwX2FyY2goKSIsIDApOwogCiAJY3BtMl9yZXNldCgpOwogCkBAIC0xNDIsNyArMTY4LDcgQEAKIAlpbml0X2lvcG9ydHMoKTsKIAogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCi0JCXBwY19tZC5wcm9ncmVzcygibWdjb2dlX3NldHVwX2FyY2goKSwgZmluaXNoIiwgMCk7CisJCXBwY19tZC5wcm9ncmVzcygia204Mnh4X3NldHVwX2FyY2goKSwgZmluaXNoIiwgMCk7CiB9CiAKIHN0YXRpYyAgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKQEAgLTE1NiwyMyArMTgyLDIzIEBACiAKIAlyZXR1cm4gMDsKIH0KLW1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKG1nY29nZSwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGttODJ4eCwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKIAogLyoKICAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAogICovCi1zdGF0aWMgaW50IF9faW5pdCBtZ2NvZ2VfcHJvYmUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGttODJ4eF9wcm9iZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKLQlyZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJrZXltaWxlLG1nY29nZSIpOworCXJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImtleW1pbGUsa204Mnh4Iik7CiB9CiAKLWRlZmluZV9tYWNoaW5lKG1nY29nZSkKK2RlZmluZV9tYWNoaW5lKGttODJ4eCkKIHsKLQkubmFtZSA9ICJLZXltaWxlIE1HQ09HRSIsCi0JLnByb2JlID0gbWdjb2dlX3Byb2JlLAotCS5zZXR1cF9hcmNoID0gbWdjb2dlX3NldHVwX2FyY2gsCi0JLmluaXRfSVJRID0gbWdjb2dlX3BpY19pbml0LAorCS5uYW1lID0gIktleW1pbGUga204Mnh4IiwKKwkucHJvYmUgPSBrbTgyeHhfcHJvYmUsCisJLnNldHVwX2FyY2ggPSBrbTgyeHhfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEgPSBrbTgyeHhfcGljX2luaXQsCiAJLmdldF9pcnEgPSBjcG0yX2dldF9pcnEsCiAJLmNhbGlicmF0ZV9kZWNyID0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIAkucmVzdGFydCA9IHBxMl9yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L3BxMmFkcy1wY2ktcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYwppbmRleCA1YTU1ZDg3Li45MjZkZmRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYwpAQCAtMzksMTAgKzM5LDEwIEBACiAKICNkZWZpbmUgTlVNX0lSUVMgMzIKIAotc3RhdGljIHZvaWQgcHEyYWRzX3BjaV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHBxMmFkc19wY2lfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwcTJhZHNfcGNpX3BpYyAqcHJpdiA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOwotCWludCBpcnEgPSBOVU1fSVJRUyAtIHZpcnFfdG9faHcodmlycSkgLSAxOworCXN0cnVjdCBwcTJhZHNfcGNpX3BpYyAqcHJpdiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCBpcnEgPSBOVU1fSVJRUyAtIHZpcnFfdG9faHcoZC0+aXJxKSAtIDE7CiAKIAlpZiAoaXJxICE9IC0xKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01NSwxMCArNTUsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBxMmFkc19wY2lfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHBxMmFkc19wY2lfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHBxMmFkc19wY2lfcGljICpwcml2ID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7Ci0JaW50IGlycSA9IE5VTV9JUlFTIC0gdmlycV90b19odyh2aXJxKSAtIDE7CisJc3RydWN0IHBxMmFkc19wY2lfcGljICpwcml2ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJaW50IGlycSA9IE5VTV9JUlFTIC0gdmlycV90b19odyhkLT5pcnEpIC0gMTsKIAogCWlmIChpcnEgIT0gLTEpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTcxLDE4ICs3MSwxNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBxMmFkc19wY2lfaWMgPSB7CiAJLm5hbWUgPSAiUFEyIEFEUyBQQ0kiLAotCS5lbmQgPSBwcTJhZHNfcGNpX3VubWFza19pcnEsCi0JLm1hc2sgPSBwcTJhZHNfcGNpX21hc2tfaXJxLAotCS5tYXNrX2FjayA9IHBxMmFkc19wY2lfbWFza19pcnEsCi0JLmFjayA9IHBxMmFkc19wY2lfbWFza19pcnEsCi0JLnVubWFzayA9IHBxMmFkc19wY2lfdW5tYXNrX2lycSwKLQkuZW5hYmxlID0gcHEyYWRzX3BjaV91bm1hc2tfaXJxLAotCS5kaXNhYmxlID0gcHEyYWRzX3BjaV9tYXNrX2lycQorCS5pcnFfbWFzayA9IHBxMmFkc19wY2lfbWFza19pcnEsCisJLmlycV9tYXNrX2FjayA9IHBxMmFkc19wY2lfbWFza19pcnEsCisJLmlycV9hY2sgPSBwcTJhZHNfcGNpX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gcHEyYWRzX3BjaV91bm1hc2tfaXJxLAorCS5pcnFfZW5hYmxlID0gcHEyYWRzX3BjaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBxMmFkc19wY2lfbWFza19pcnEKIH07CiAKIHN0YXRpYyB2b2lkIHBxMmFkc19wY2lfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgcHEyYWRzX3BjaV9waWMgKnByaXYgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisJc3RydWN0IHBxMmFkc19wY2lfcGljICpwcml2ID0gZ2V0X2lycV9kZXNjX2RhdGEoZGVzYyk7CiAJdTMyIHN0YXQsIG1hc2ssIHBlbmQ7CiAJaW50IGJpdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L01ha2VmaWxlCmluZGV4IDZlOGJiYmIuLmVkOTViZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUKQEAgLTE2LDQgKzE2LDQgQEAKIG9iai0kKENPTkZJR19TQkM4MzR4KQkJKz0gc2JjODM0eC5vCiBvYmotJChDT05GSUdfTVBDODM3eF9SREIpCSs9IG1wYzgzN3hfcmRiLm8KIG9iai0kKENPTkZJR19BU1A4MzR4KQkJKz0gYXNwODM0eC5vCi1vYmotJChDT05GSUdfS01FVEVSMSkJCSs9IGttZXRlcjEubworb2JqLSQoQ09ORklHX0tNRVRFUjEpCQkrPSBrbTgzeHgubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L2ttZXRlcjEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9rbTgzeHguYwpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgva21ldGVyMS5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgva204M3h4LmMKaW5kZXggOTAzYWNmZC4uYTJiOWI5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L2ttZXRlcjEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgva204M3h4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKiBDb3B5cmlnaHQgMjAwOC0yMDExIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAogICogQXV0aG9yOiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KICAqCiAgKiBEZXNjcmlwdGlvbjoKQEAgLTQ5LDEyICs0OSwxMiBAQAogICogU2V0dXAgdGhlIGFyY2hpdGVjdHVyZQogICoKICAqLwotc3RhdGljIHZvaWQgX19pbml0IGttZXRlcjFfc2V0dXBfYXJjaCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG1wYzgzeHhfa21fc2V0dXBfYXJjaCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKIAlpZiAocHBjX21kLnByb2dyZXNzKQotCQlwcGNfbWQucHJvZ3Jlc3MoImttZXRlcjFfc2V0dXBfYXJjaCgpIiwgMCk7CisJCXBwY19tZC5wcm9ncmVzcygia21wYmVjODN4eF9zZXR1cF9hcmNoKCkiLCAwKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzNDktcGNpIikKQEAgLTY5LDYgKzY5LDkgQEAKIAkJcGFyX2lvX2luaXQobnApOwogCQlvZl9ub2RlX3B1dChucCk7CiAKKwkJZm9yX2VhY2hfbm9kZV9ieV9uYW1lKG5wLCAic3BpIikKKwkJCXBhcl9pb19vZl9jb25maWcobnApOworCiAJCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShucCwgInVjYyIpKSAhPSBOVUxMOykKIAkJCXBhcl9pb19vZl9jb25maWcobnApOwogCX0KQEAgLTExOSw3ICsxMjIsNyBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19RVUlDQ19FTkdJTkUgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQga21ldGVyX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQga21wYmVjODN4eF9pZHNbXSA9IHsKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCkBAIC0xMzEsMTMgKzEzNCwxMyBAQAogc3RhdGljIGludCBfX2luaXQga21ldGVyX2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQogewogCS8qIFB1Ymxpc2ggdGhlIFFFIGRldmljZXMgKi8KLQlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwga21ldGVyX2lkcywgTlVMTCk7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIGttcGJlYzgzeHhfaWRzLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoa21ldGVyMSwga21ldGVyX2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChtcGM4M3h4X2ttLCBrbWV0ZXJfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKIAotc3RhdGljIHZvaWQgX19pbml0IGttZXRlcjFfaW5pdF9JUlEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4M3h4X2ttX2luaXRfSVJRKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIApAQCAtMTY4LDIxICsxNzEsMzQgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfUVVJQ0NfRU5HSU5FICovCiB9CiAKKy8qIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBib2FyZHMgKi8KK3N0YXRpYyBjaGFyICpib2FyZFtdIF9faW5pdGRhdGEgPSB7CisJIktleW1pbGUsS01FVEVSMSIsCisJIktleW1pbGUsa21wYmVjODMyMSIsCisJTlVMTAorfTsKKwogLyoKICAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBNTVUgaXMgb2ZmLCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAogICovCi1zdGF0aWMgaW50IF9faW5pdCBrbWV0ZXIxX3Byb2JlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtcGM4M3h4X2ttX3Byb2JlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCXVuc2lnbmVkIGxvbmcgbm9kZSA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKwlpbnQgaSA9IDA7CiAKLQlyZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJrZXltaWxlLEtNRVRFUjEiKTsKKwl3aGlsZSAoYm9hcmRbaV0pIHsKKwkJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShub2RlLCBib2FyZFtpXSkpCisJCQlicmVhazsKKwkJaSsrOworCX0KKwlyZXR1cm4gKGJvYXJkW2ldICE9IE5VTEwpOwogfQogCi1kZWZpbmVfbWFjaGluZShrbWV0ZXIxKSB7Ci0JLm5hbWUJCT0gIktNRVRFUjEiLAotCS5wcm9iZQkJPSBrbWV0ZXIxX3Byb2JlLAotCS5zZXR1cF9hcmNoCT0ga21ldGVyMV9zZXR1cF9hcmNoLAotCS5pbml0X0lSUQk9IGttZXRlcjFfaW5pdF9JUlEsCitkZWZpbmVfbWFjaGluZShtcGM4M3h4X2ttKSB7CisJLm5hbWUJCT0gIm1wYzgzeHgta20tcGxhdGZvcm0iLAorCS5wcm9iZQkJPSBtcGM4M3h4X2ttX3Byb2JlLAorCS5zZXR1cF9hcmNoCT0gbXBjODN4eF9rbV9zZXR1cF9hcmNoLAorCS5pbml0X0lSUQk9IG1wYzgzeHhfa21faW5pdF9JUlEsCiAJLmdldF9pcnEJPSBpcGljX2dldF9pcnEsCiAJLnJlc3RhcnQJPSBtcGM4M3h4X3Jlc3RhcnQsCiAJLnRpbWVfaW5pdAk9IG1wYzgzeHhfdGltZV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMKaW5kZXggZjRkMzZiNS4uNjQ0NDdlNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgva3NpODU2MC5jCkBAIC01NiwxMiArNTYsMTMgQEAKIAogc3RhdGljIHZvaWQgY3BtMl9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAlpbnQgY2FzY2FkZV9pcnE7CiAKIAl3aGlsZSAoKGNhc2NhZGVfaXJxID0gY3BtMl9nZXRfaXJxKCkpID49IDApCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CiAKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBrc2k4NTYwX3BpY19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCmluZGV4IDk0MzhhODkyLi4xMzUyZDExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwpAQCAtNTAsMTIgKzUwLDEzIEBACiAKIHN0YXRpYyB2b2lkIGNwbTJfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CiAJaW50IGNhc2NhZGVfaXJxOwogCiAJd2hpbGUgKChjYXNjYWRlX2lycSA9IGNwbTJfZ2V0X2lycSgpKSA+PSAwKQogCQlnZW5lcmljX2hhbmRsZV9pcnEoY2FzY2FkZV9pcnEpOwogCi0JZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisJY2hpcC0+aXJxX2VvaSgmZGVzYy0+aXJxX2RhdGEpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX0NQTTIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCmluZGV4IDgxOTBiYzIuLjc5M2VhZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYwpAQCAtNDcsMTIgKzQ3LDEzIEBACiAjaWZkZWYgQ09ORklHX1BQQ19JODI1OQogc3RhdGljIHZvaWQgbXBjODV4eF84MjU5X2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IGk4MjU5X2lycSgpOwogCiAJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkgewogCQlnZW5lcmljX2hhbmRsZV9pcnEoY2FzY2FkZV9pcnEpOwogCX0KLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAjZW5kaWYJLyogQ09ORklHX1BQQ19JODI1OSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwppbmRleCBhNWFkMWM3Li5kN2UyOGVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKQEAgLTQxLDEyICs0MSwxMyBAQAogCiBzdGF0aWMgdm9pZCBjcG0yX2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwogCWludCBjYXNjYWRlX2lycTsKIAogCXdoaWxlICgoY2FzY2FkZV9pcnEgPSBjcG0yX2dldF9pcnEoKSkgPj0gMCkKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKIAotCWRlc2MtPmNoaXAtPmVvaShpcnEpOworCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19DUE0yICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKaW5kZXggNWM5MWE5OS4uMGQwMGZmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwpAQCAtOTEsMTAgKzkxLDE0IEBACiAJd2hpbGUgKChfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlICE9IG5yKSAmJiAoKytuIDwgMTAwMCkpCiAJCW1kZWxheSgxKTsKICNlbHNlCisJc21wX2dlbmVyaWNfa2lja19jcHUobnIpOworCiAJb3V0X2JlNjQoKHU2NCAqKShicHRyX3ZhZGRyICsgQk9PVF9FTlRSWV9BRERSX1VQUEVSKSwKIAkJX19wYSgodTY0KSooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBnZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdCkpKTsKIAotCXNtcF9nZW5lcmljX2tpY2tfY3B1KG5yKTsKKwlpZiAoIWlvcmVtYXBwYWJsZSkKKwkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bG9uZylicHRyX3ZhZGRyLAorCQkJCSh1bG9uZykoYnB0cl92YWRkciArIFNJWkVfQk9PVF9FTlRSWSkpOwogI2VuZGlmCiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCmluZGV4IGQ0ODUyN2YuLjc5ZDg1YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC05Myw2ICs5Myw3IEBACiAKIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CiAJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxOwogCiAJLyoKQEAgLTEwMywxNyArMTA0LDE2IEBACiAKIAlpZiAoY2FzY2FkZV9pcnEgIT0gTk9fSVJRKQogCQlnZW5lcmljX2hhbmRsZV9pcnEoY2FzY2FkZV9pcnEpOwotCWRlc2MtPmNoaXAtPmVvaShpcnEpOwotCisJY2hpcC0+aXJxX2VvaSgmZGVzYy0+aXJxX2RhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19hY2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGh3aXJxLCBpcnFfbGluZTsKIAl1aW50MzJfdCBtYXNrOwogCi0JaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KGQtPmlycSk7CiAKIAlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CkBAIC0xMjQsMTQgKzEyNCwxNCBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX21hc2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBod2lycTsKIAlpbnQgaXJxX2xpbmU7CiAJdTMyIG1hc2s7CiAKLQlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKIAogCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKQEAgLTE0MiwxNCArMTQyLDE0IEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfbWFza19hY2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19tYXNrX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaHdpcnE7CiAJaW50IGlycV9saW5lOwogCXUzMiBtYXNrOwogCi0JaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KGQtPmlycSk7CiAKIAlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CkBAIC0xNjEsMTQgKzE2MSwxNCBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX3VubWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaHdpcnE7CiAJaW50IGlycV9saW5lOwogCXUzMiBtYXNrOwogCi0JaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KGQtPmlycSk7CiAKIAlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CkBAIC0xNzksMTQgKzE3OSwxNCBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX2VvaSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaHdpcnE7CiAJaW50IGlycV9saW5lOwogCXUzMiBtYXNrOwogCi0JaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KGQtPmlycSk7CiAKIAlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CkBAIC0xOTcsNyArMTk3LDcgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLAorc3RhdGljIGludCBzb2NyYXRlc19mcGdhX3BpY19zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsCiAJCXVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwNSw3ICsyMDUsNyBAQAogCWludCBwb2xhcml0eTsKIAl1MzIgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyhkLT5pcnEpOwogCiAJaWYgKGZwZ2FfaXJxc1tod2lycV0udHlwZSAhPSBJUlFfVFlQRV9OT05FKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzMywxMiArMjMzLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc29jcmF0ZXNfZnBnYV9waWNfY2hpcCA9IHsKIAkubmFtZQkJPSAiRlBHQS1QSUMiLAotCS5hY2sJCT0gc29jcmF0ZXNfZnBnYV9waWNfYWNrLAotCS5tYXNrICAgICAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2ssCi0JLm1hc2tfYWNrICAgICAgID0gc29jcmF0ZXNfZnBnYV9waWNfbWFza19hY2ssCi0JLnVubWFzayAgICAgICAgID0gc29jcmF0ZXNfZnBnYV9waWNfdW5tYXNrLAotCS5lb2kJCT0gc29jcmF0ZXNfZnBnYV9waWNfZW9pLAotCS5zZXRfdHlwZQk9IHNvY3JhdGVzX2ZwZ2FfcGljX3NldF90eXBlLAorCS5pcnFfYWNrCT0gc29jcmF0ZXNfZnBnYV9waWNfYWNrLAorCS5pcnFfbWFzawk9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2ssCisJLmlycV9tYXNrX2Fjawk9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2tfYWNrLAorCS5pcnFfdW5tYXNrCT0gc29jcmF0ZXNfZnBnYV9waWNfdW5tYXNrLAorCS5pcnFfZW9pCT0gc29jcmF0ZXNfZnBnYV9waWNfZW9pLAorCS5pcnFfc2V0X3R5cGUJPSBzb2NyYXRlc19mcGdhX3BpY19zZXRfdHlwZSwKIH07CiAKIHN0YXRpYyBpbnQgc29jcmF0ZXNfZnBnYV9waWNfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCmluZGV4IGJjMzNkMTguLjJiNjJiMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwpAQCAtNDYsMTIgKzQ2LDEzIEBACiAKIHN0YXRpYyB2b2lkIGNwbTJfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CiAJaW50IGNhc2NhZGVfaXJxOwogCiAJd2hpbGUgKChjYXNjYWRlX2lycSA9IGNwbTJfZ2V0X2lycSgpKSA+PSAwKQogCQlnZW5lcmljX2hhbmRsZV9pcnEoY2FzY2FkZV9pcnEpOwogCi0JZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisJY2hpcC0+aXJxX2VvaSgmZGVzYy0+aXJxX2RhdGEpOwogfQogI2VuZGlmIC8qIENPTkZJR19DUE0yICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCmluZGV4IDVlODQ3ZDAuLjIyNjViNjhlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKQEAgLTQ0LDEyICs0NCwxMyBAQAogCiBzdGF0aWMgdm9pZCBjcG0yX2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwogCWludCBjYXNjYWRlX2lycTsKIAogCXdoaWxlICgoY2FzY2FkZV9pcnEgPSBjcG0yX2dldF9pcnEoKSkgPj0gMCkKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKIAotCWRlc2MtPmNoaXAtPmVvaShpcnEpOworCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQ1BNMiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwppbmRleCA2ZGY5ZTI1Li4wYWRmZTNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmMKQEAgLTk1LDYgKzk1LDcgQEAKIAogdm9pZCBnZWZfcGljX2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycTsKIAogCS8qCkBAIC0xMDYsMTcgKzEwNywxNiBAQAogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CiAKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKLQorCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VmX3BpY19tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgZ2VmX3BpY19tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBod2lycTsKIAl1MzIgbWFzazsKIAotCWh3aXJxID0gZ2VmX2lycV90b19odyh2aXJxKTsKKwlod2lycSA9IGdlZl9pcnFfdG9faHcoZC0+aXJxKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CkBAIC0xMjUsMjEgKzEyNSwyMSBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VmX3BpY19tYXNrX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIGdlZl9waWNfbWFza19hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCS8qIERvbid0IHRoaW5rIHdlIGFjdHVhbGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgdG8gYWNrIGFuIGludGVycnVwdCwKIAkgKiB3ZSBqdXN0IG5lZWQgdG8gY2xlYXIgZG93biB0aGUgZGV2aWNlcyBpbnRlcnJ1cHQgYW5kIGl0IHdpbGwgZ28gYXdheQogCSAqLwotCWdlZl9waWNfbWFzayh2aXJxKTsKKwlnZWZfcGljX21hc2soZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlZl9waWNfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgZ2VmX3BpY191bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGh3aXJxOwogCXUzMiBtYXNrOwogCi0JaHdpcnEgPSBnZWZfaXJxX3RvX2h3KHZpcnEpOworCWh3aXJxID0gZ2VmX2lycV90b19odyhkLT5pcnEpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gaW5fYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfSU5UUl9NQVNLKDApKTsKQEAgLTE1MCw5ICsxNTAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdlZl9waWNfY2hpcCA9IHsKIAkubmFtZQkJPSAiZ2VmcCIsCi0JLm1hc2sJCT0gZ2VmX3BpY19tYXNrLAotCS5tYXNrX2Fjawk9IGdlZl9waWNfbWFza19hY2ssCi0JLnVubWFzawkJPSBnZWZfcGljX3VubWFzaywKKwkuaXJxX21hc2sJPSBnZWZfcGljX21hc2ssCisJLmlycV9tYXNrX2Fjawk9IGdlZl9waWNfbWFza19hY2ssCisJLmlycV91bm1hc2sJPSBnZWZfcGljX3VubWFzaywKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L3BpYy5jCmluZGV4IDY2ODI3NWQuLmNiZTMzNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvcGljLmMKQEAgLTE5LDEwICsxOSwxMyBAQAogI2lmZGVmIENPTkZJR19QUENfSTgyNTkKIHN0YXRpYyB2b2lkIG1wYzg2eHhfODI1OV9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEgPSBpODI1OV9pcnEoKTsKKwogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7Ci0JZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAjZW5kaWYJLyogQ09ORklHX1BQQ19JODI1OSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZwppbmRleCBkZDM1Y2UwLi5lZTU2YTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWcKQEAgLTQ5LDEyICs0OSw2IEBACiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFuYWxvZ3VlICYgTWljcm8gQWRkZXIgODc1CiAJICBib2FyZC4KIAotY29uZmlnIFBQQ19NR1NVVkQKLQlib29sICJNR1NVVkQiCi0Jc2VsZWN0IENQTTEKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEtleW1pbGUgTUdTVVZEIGJvYXJkLgotCiBjb25maWcgVFFNOFhYCiAJYm9vbCAiVFFNOFhYIgogCXNlbGVjdCBDUE0xCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCmluZGV4IGE0OTFmZTYuLjc2YTgxYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCkBAIC02LDUgKzYsNCBAQAogb2JqLSQoQ09ORklHX01QQzg2WEFEUykgICArPSBtcGM4NnhhZHNfc2V0dXAubwogb2JqLSQoQ09ORklHX1BQQ19FUDg4WEMpICArPSBlcDg4eGMubwogb2JqLSQoQ09ORklHX1BQQ19BRERFUjg3NSkgKz0gYWRkZXI4NzUubwotb2JqLSQoQ09ORklHX1BQQ19NR1NVVkQpICs9IG1nc3V2ZC5vCiBvYmotJChDT05GSUdfVFFNOFhYKSAgICAgICs9IHRxbTh4eF9zZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tOHh4X3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tOHh4X3NldHVwLmMKaW5kZXggNjAxNjhjMS4uZmFiYjEwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbTh4eF9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYwpAQCAtMjE4LDE1ICsyMTgsMjAgQEAKIAogc3RhdGljIHZvaWQgY3BtX2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKIAlpbnQgY2FzY2FkZV9pcnE7CiAKIAlpZiAoKGNhc2NhZGVfaXJxID0gY3BtX2dldF9pcnEoKSkgPj0gMCkgewogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmNkZXNjID0gaXJxX3RvX2Rlc2MoY2FzY2FkZV9pcnEpOwogCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7Ci0JCWNkZXNjLT5jaGlwLT5lb2koY2FzY2FkZV9pcnEpOworCisJCWNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChjZGVzYyk7CisJCWNoaXAtPmlycV9lb2koJmNkZXNjLT5pcnFfZGF0YSk7CiAJfQotCWRlc2MtPmNoaXAtPmVvaShpcnEpOworCisJY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOworCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIH0KIAogLyogSW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXJzLiAgVGhlIG51bWJlciBvZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbWdzdXZkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tZ3N1dmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EzY2IwNy4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tZ3N1dmQuYworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKgotICogUGxhdGZvcm0gc2V0dXAgZm9yIHRoZSBLZXltaWxlIG1nc3V2ZCBib2FyZAotICoKLSAqIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgotICoKLSAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQotICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vY3BtMS5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL2ZzX3BkLmg+Ci0KLSNpbmNsdWRlICJtcGM4eHguaCIKLQotc3RydWN0IGNwbV9waW4gewotCWludCBwb3J0LCBwaW4sIGZsYWdzOwotfTsKLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGNwbV9waW4gbWdzdXZkX3BpbnNbXSA9IHsKLQkvKiBTTUMxICovCi0Je0NQTV9QT1JUQiwgMjQsIENQTV9QSU5fSU5QVVR9LCAvKiBSWCAqLwotCXtDUE1fUE9SVEIsIDI1LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LCAvKiBUWCAqLwotCi0JLyogU0NDMyAqLwotCXtDUE1fUE9SVEEsIDEwLCBDUE1fUElOX0lOUFVUfSwKLQl7Q1BNX1BPUlRBLCAxMSwgQ1BNX1BJTl9JTlBVVH0sCi0Je0NQTV9QT1JUQSwgMywgQ1BNX1BJTl9JTlBVVH0sCi0Je0NQTV9QT1JUQSwgMiwgQ1BNX1BJTl9JTlBVVH0sCi0Je0NQTV9QT1JUQywgMTMsIENQTV9QSU5fSU5QVVR9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfaW9wb3J0cyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWdzdXZkX3BpbnMpOyBpKyspIHsKLQkJc3RydWN0IGNwbV9waW4gKnBpbiA9ICZtZ3N1dmRfcGluc1tpXTsKLQkJY3BtMV9zZXRfcGluKHBpbi0+cG9ydCwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOwotCX0KLQotCXNldGJpdHMxNigmbXBjOHh4X2ltbXItPmltX2lvcG9ydC5pb3BfcGNzbywgMHgzMDApOwotCWNwbTFfY2xrX3NldHVwKENQTV9DTEtfU0NDMywgQ1BNX0NMSzUsIENQTV9DTEtfUlgpOwotCWNwbTFfY2xrX3NldHVwKENQTV9DTEtfU0NDMywgQ1BNX0NMSzYsIENQTV9DTEtfVFgpOwotCWNwbTFfY2xrX3NldHVwKENQTV9DTEtfU01DMSwgQ1BNX0JSRzEsIENQTV9DTEtfUlRYKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG1nc3V2ZF9zZXR1cF9hcmNoKHZvaWQpCi17Ci0JY3BtX3Jlc2V0KCk7Ci0JaW5pdF9pb3BvcnRzKCk7Ci19Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIgfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9idXNfaWRzLCBOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLW1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKG1nc3V2ZCwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKLQotc3RhdGljIGludCBfX2luaXQgbWdzdXZkX3Byb2JlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCXJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImtleW1pbGUsbWdzdXZkIik7Ci19Ci0KLWRlZmluZV9tYWNoaW5lKG1nc3V2ZCkgewotCS5uYW1lICAgICAgICAgICA9ICJNR1NVVkQiLAotCS5wcm9iZSAgICAgICAgICA9IG1nc3V2ZF9wcm9iZSwKLQkuc2V0dXBfYXJjaCAgICAgPSBtZ3N1dmRfc2V0dXBfYXJjaCwKLQkuaW5pdF9JUlEgICAgICAgPSBtcGM4eHhfcGljc19pbml0LAotCS5nZXRfaXJxICAgICAgICA9IG1wYzh4eF9nZXRfaXJxLAotCS5yZXN0YXJ0ICAgICAgICA9IG1wYzh4eF9yZXN0YXJ0LAotCS5jYWxpYnJhdGVfZGVjciA9IG1wYzh4eF9jYWxpYnJhdGVfZGVjciwKLQkuc2V0X3J0Y190aW1lICAgPSBtcGM4eHhfc2V0X3J0Y190aW1lLAotCS5nZXRfcnRjX3RpbWUgICA9IG1wYzh4eF9nZXRfcnRjX3RpbWUsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYwppbmRleCBjMzUwOTlhLi5jNDhiNjZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYwpAQCAtOTMsNiArOTMsNyBAQAogCiBzdGF0aWMgdm9pZCBheG9uX21zaV9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAlzdHJ1Y3QgYXhvbl9tc2ljICptc2ljID0gZ2V0X2lycV9kYXRhKGlycSk7CiAJdTMyIHdyaXRlX29mZnNldCwgbXNpOwogCWludCBpZHg7CkBAIC0xNDUsNyArMTQ2LDcgQEAKIAkJbXNpYy0+cmVhZF9vZmZzZXQgJj0gTVNJQ19GSUZPX1NJWkVfTUFTSzsKIAl9CiAKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXhvbl9tc2ljICpmaW5kX21zaV90cmFuc2xhdG9yKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCmluZGV4IDY4MmFmOTcuLjBiOGY3ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCkBAIC02MSw1OSArNjEsNTkgQEAKIAkJcGFuaWMoIkZhaWxlZCB0byBzZXQgbWFzayBJUlEhIik7CiB9CiAKLXN0YXRpYyB2b2lkIGJlYXRpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX3BsdWcpCitzdGF0aWMgdm9pZCBiZWF0aWNfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7Ci0JYmVhdGljX2lycV9tYXNrX2VuYWJsZVtpcnFfcGx1Zy82NF0gJj0gfigxVUwgPDwgKDYzIC0gKGlycV9wbHVnJTY0KSkpOwotCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOworCWJlYXRpY19pcnFfbWFza19lbmFibGVbZC0+aXJxLzY0XSAmPSB+KDFVTCA8PCAoNjMgLSAoZC0+aXJxJTY0KSkpOworCWJlYXRpY191cGRhdGVfaXJxX21hc2soZC0+aXJxKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgYmVhdGljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycV9wbHVnKQorc3RhdGljIHZvaWQgYmVhdGljX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7Ci0JYmVhdGljX2lycV9tYXNrX2VuYWJsZVtpcnFfcGx1Zy82NF0gfD0gMVVMIDw8ICg2MyAtIChpcnFfcGx1ZyU2NCkpOwotCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOworCWJlYXRpY19pcnFfbWFza19lbmFibGVbZC0+aXJxLzY0XSB8PSAxVUwgPDwgKDYzIC0gKGQtPmlycSU2NCkpOworCWJlYXRpY191cGRhdGVfaXJxX21hc2soZC0+aXJxKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgYmVhdGljX2Fja19pcnEodW5zaWduZWQgaW50IGlycV9wbHVnKQorc3RhdGljIHZvaWQgYmVhdGljX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7Ci0JYmVhdGljX2lycV9tYXNrX2Fja1tpcnFfcGx1Zy82NF0gJj0gfigxVUwgPDwgKDYzIC0gKGlycV9wbHVnJTY0KSkpOwotCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOworCWJlYXRpY19pcnFfbWFza19hY2tbZC0+aXJxLzY0XSAmPSB+KDFVTCA8PCAoNjMgLSAoZC0+aXJxJTY0KSkpOworCWJlYXRpY191cGRhdGVfaXJxX21hc2soZC0+aXJxKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgYmVhdGljX2VuZF9pcnEodW5zaWduZWQgaW50IGlycV9wbHVnKQorc3RhdGljIHZvaWQgYmVhdGljX2VuZF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXM2NCBlcnI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWVyciA9IGJlYXRfZG93bmNvdW50X29mX2ludGVycnVwdChpcnFfcGx1Zyk7CisJZXJyID0gYmVhdF9kb3duY291bnRfb2ZfaW50ZXJydXB0KGQtPmlycSk7CiAJaWYgKGVyciAhPSAwKSB7CiAJCWlmICgoZXJyICYgMHhGRkZGRkZGRikgIT0gMHhGRkZGRkZGNSkgLyogLTExOiB3cm9uZyBzdGF0ZSAqLwogCQkJcGFuaWMoIkZhaWxlZCB0byBkb3duY291bnQgSVJRISBFcnJvciA9ICUxNmxseCIsIGVycik7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICJJUlEgb3Zlci1kb3duY291bnRlZCwgcGx1ZyAlZFxuIiwgaXJxX3BsdWcpOworCQlwcmludGsoS0VSTl9FUlIgIklSUSBvdmVyLWRvd25jb3VudGVkLCBwbHVnICVkXG4iLCBkLT5pcnEpOwogCX0KIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7Ci0JYmVhdGljX2lycV9tYXNrX2Fja1tpcnFfcGx1Zy82NF0gfD0gMVVMIDw8ICg2MyAtIChpcnFfcGx1ZyU2NCkpOwotCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOworCWJlYXRpY19pcnFfbWFza19hY2tbZC0+aXJxLzY0XSB8PSAxVUwgPDwgKDYzIC0gKGQtPmlycSU2NCkpOworCWJlYXRpY191cGRhdGVfaXJxX21hc2soZC0+aXJxKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiZWF0aWNfcGljID0gewogCS5uYW1lID0gIkNFTEwtQkVBVCIsCi0JLnVubWFzayA9IGJlYXRpY191bm1hc2tfaXJxLAotCS5tYXNrID0gYmVhdGljX21hc2tfaXJxLAotCS5lb2kgPSBiZWF0aWNfZW5kX2lycSwKKwkuaXJxX3VubWFzayA9IGJlYXRpY191bm1hc2tfaXJxLAorCS5pcnFfbWFzayA9IGJlYXRpY19tYXNrX2lycSwKKwkuaXJxX2VvaSA9IGJlYXRpY19lbmRfaXJxLAogfTsKIAogLyoKQEAgLTIzMiw3ICsyMzIsNyBAQAogCiAJcmV0ID0gYmVhdGljX2dldF9pcnFfcGx1ZygpOwogCWlmIChyZXQgIT0gTk9fSVJRKQotCQliZWF0aWNfYWNrX2lycShyZXQpOworCQliZWF0aWNfYWNrX2lycShpcnFfZ2V0X2lycV9kYXRhKHJldCkpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCAxMGViMWE0Li42MjRkMjZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC03MiwxNSArNzIsMTUgQEAKIAkJcmV0dXJuIChub2RlIDw8IElJQ19JUlFfTk9ERV9TSElGVCkgfCAoY2xhc3MgPDwgNCkgfCB1bml0OwogfQogCi1zdGF0aWMgdm9pZCBpaWNfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaWljX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogfQogCi1zdGF0aWMgdm9pZCBpaWNfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBpaWNfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIH0KIAotc3RhdGljIHZvaWQgaWljX2VvaSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaWljX2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IGlpYyAqaWljID0gJl9fZ2V0X2NwdV92YXIoY3B1X2lpYyk7CiAJb3V0X2JlNjQoJmlpYy0+cmVncy0+cHJpbywgaWljLT5lb2lfc3RhY2tbLS1paWMtPmVvaV9wdHJdKTsKQEAgLTg5LDE5ICs4OSwyMSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlpY19jaGlwID0gewogCS5uYW1lID0gIkNFTEwtSUlDIiwKLQkubWFzayA9IGlpY19tYXNrLAotCS51bm1hc2sgPSBpaWNfdW5tYXNrLAotCS5lb2kgPSBpaWNfZW9pLAorCS5pcnFfbWFzayA9IGlpY19tYXNrLAorCS5pcnFfdW5tYXNrID0gaWljX3VubWFzaywKKwkuaXJxX2VvaSA9IGlpY19lb2ksCiB9OwogCiAKLXN0YXRpYyB2b2lkIGlpY19pb2V4Y19lb2kodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGlpY19pb2V4Y19lb2koc3RydWN0IGlycV9kYXRhICpkKQogewogfQogCiBzdGF0aWMgdm9pZCBpaWNfaW9leGNfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IGNiZV9paWNfcmVncyBfX2lvbWVtICpub2RlX2lpYyA9ICh2b2lkIF9faW9tZW0gKilkZXNjLT5oYW5kbGVyX2RhdGE7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CisJc3RydWN0IGNiZV9paWNfcmVncyBfX2lvbWVtICpub2RlX2lpYyA9CisJCSh2b2lkIF9faW9tZW0gKilnZXRfaXJxX2Rlc2NfZGF0YShkZXNjKTsKIAl1bnNpZ25lZCBpbnQgYmFzZSA9IChpcnEgJiAweGZmZmZmZjAwKSB8IElJQ19JUlFfVFlQRV9JT0VYQzsKIAl1bnNpZ25lZCBsb25nIGJpdHMsIGFjazsKIAlpbnQgY2FzY2FkZTsKQEAgLTEyOCwxNSArMTMwLDE1IEBACiAJCWlmIChhY2spCiAJCQlvdXRfYmU2NCgmbm9kZV9paWMtPmlpY19pcywgYWNrKTsKIAl9Ci0JZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisJY2hpcC0+aXJxX2VvaSgmZGVzYy0+aXJxX2RhdGEpOwogfQogCiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaWljX2lvZXhjX2NoaXAgPSB7CiAJLm5hbWUgPSAiQ0VMTC1JT0VYIiwKLQkubWFzayA9IGlpY19tYXNrLAotCS51bm1hc2sgPSBpaWNfdW5tYXNrLAotCS5lb2kgPSBpaWNfaW9leGNfZW9pLAorCS5pcnFfbWFzayA9IGlpY19tYXNrLAorCS5pcnFfdW5tYXNrID0gaWljX3VubWFzaywKKwkuaXJxX2VvaSA9IGlpY19pb2V4Y19lb2ksCiB9OwogCiAvKiBHZXQgYW4gSVJRIG51bWJlciBmcm9tIHRoZSBwZW5kaW5nIHN0YXRlIHJlZ2lzdGVyIG9mIHRoZSBJSUMgKi8KQEAgLTIzNyw2ICsyMzksOCBAQAogCiBzdGF0aWMgdm9pZCBoYW5kbGVfaWljX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CisKIAlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7CkBAIC0yNzUsNyArMjc5LDcgQEAKIAogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7CiBvdXRfZW9pOgotCWRlc2MtPmNoaXAtPmVvaShpcnEpOworCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIAlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCmluZGV4IDY5MTk5NTcuLjZhMjhkMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCkBAIC0xODcsMTMgKzE4NywxNSBAQAogCiBzdGF0aWMgdm9pZCBjZWxsX21waWNfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CisJc3RydWN0IG1waWMgKm1waWMgPSBnZXRfaXJxX2Rlc2NfZGF0YShkZXNjKTsKIAl1bnNpZ25lZCBpbnQgdmlycTsKIAogCXZpcnEgPSBtcGljX2dldF9vbmVfaXJxKG1waWMpOwogCWlmICh2aXJxICE9IE5PX0lSUSkKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOwotCWRlc2MtPmNoaXAtPmVvaShpcnEpOworCisJY2hpcC0+aXJxX2VvaSgmZGVzYy0+aXJxX2RhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBpY19pbml0X0lSUSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKaW5kZXggM2YyZTU1Ny4uYjM4Y2RmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCkBAIC03OSwzMCArNzksMzAgQEAKIAlyZXR1cm4gcGljLT5yZWdzICsgVElSX0NGR0EgKyA4ICogc3JjOwogfQogCi1zdGF0aWMgdm9pZCBzcGlkZXJfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHNwaWRlcl91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX3ZpcnFfdG9fcGljKHZpcnEpOwotCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaXJxX21hcFt2aXJxXS5od2lycSk7CisJc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOworCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaXJxX21hcFtkLT5pcnFdLmh3aXJxKTsKIAogCW91dF9iZTMyKGNmZywgaW5fYmUzMihjZmcpIHwgMHgzMDAwMDAwMHUpOwogfQogCi1zdGF0aWMgdm9pZCBzcGlkZXJfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBzcGlkZXJfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBzcGlkZXJfcGljICpwaWMgPSBzcGlkZXJfdmlycV90b19waWModmlycSk7Ci0Jdm9pZCBfX2lvbWVtICpjZmcgPSBzcGlkZXJfZ2V0X2lycV9jb25maWcocGljLCBpcnFfbWFwW3ZpcnFdLmh3aXJxKTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX3ZpcnFfdG9fcGljKGQtPmlycSk7CisJdm9pZCBfX2lvbWVtICpjZmcgPSBzcGlkZXJfZ2V0X2lycV9jb25maWcocGljLCBpcnFfbWFwW2QtPmlycV0uaHdpcnEpOwogCiAJb3V0X2JlMzIoY2ZnLCBpbl9iZTMyKGNmZykgJiB+MHgzMDAwMDAwMHUpOwogfQogCi1zdGF0aWMgdm9pZCBzcGlkZXJfYWNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHNwaWRlcl9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX3ZpcnFfdG9fcGljKHZpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworCXN0cnVjdCBzcGlkZXJfcGljICpwaWMgPSBzcGlkZXJfdmlycV90b19waWMoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCiAJLyogUmVzZXQgZWRnZSBkZXRlY3Rpb24gbG9naWMgaWYgbmVjZXNzYXJ5CiAJICovCi0JaWYgKGlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpCisJaWYgKGlycV90b19kZXNjKGQtPmlycSktPnN0YXR1cyAmIElSUV9MRVZFTCkKIAkJcmV0dXJuOwogCiAJLyogT25seSBpbnRlcnJ1cHRzIDQ3IHRvIDUwIGNhbiBiZSBzZXQgdG8gZWRnZSAqLwpAQCAtMTEzLDEzICsxMTMsMTMgQEAKIAlvdXRfYmUzMihwaWMtPnJlZ3MgKyBUSVJfRURDLCAweDEwMCB8IChzcmMgJiAweGYpKTsKIH0KIAotc3RhdGljIGludCBzcGlkZXJfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3N0YXRpYyBpbnQgc3BpZGVyX3NldF9pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQogewogCXVuc2lnbmVkIGludCBzZW5zZSA9IHR5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOwotCXN0cnVjdCBzcGlkZXJfcGljICpwaWMgPSBzcGlkZXJfdmlycV90b19waWModmlycSk7Ci0JdW5zaWduZWQgaW50IGh3ID0gaXJxX21hcFt2aXJxXS5od2lycTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX3ZpcnFfdG9fcGljKGQtPmlycSk7CisJdW5zaWduZWQgaW50IGh3ID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaHcpOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGQtPmlycSk7CiAJdTMyIG9sZF9tYXNrOwogCXUzMiBpYzsKIApAQCAtMTY5LDEwICsxNjksMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzcGlkZXJfcGljID0gewogCS5uYW1lID0gIlNQSURFUiIsCi0JLnVubWFzayA9IHNwaWRlcl91bm1hc2tfaXJxLAotCS5tYXNrID0gc3BpZGVyX21hc2tfaXJxLAotCS5hY2sgPSBzcGlkZXJfYWNrX2lycSwKLQkuc2V0X3R5cGUgPSBzcGlkZXJfc2V0X2lycV90eXBlLAorCS5pcnFfdW5tYXNrID0gc3BpZGVyX3VubWFza19pcnEsCisJLmlycV9tYXNrID0gc3BpZGVyX21hc2tfaXJxLAorCS5pcnFfYWNrID0gc3BpZGVyX2Fja19pcnEsCisJLmlycV9zZXRfdHlwZSA9IHNwaWRlcl9zZXRfaXJxX3R5cGUsCiB9OwogCiBzdGF0aWMgaW50IHNwaWRlcl9ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLApAQCAtMjA3LDcgKzIwNyw4IEBACiAKIHN0YXRpYyB2b2lkIHNwaWRlcl9pcnFfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IGRlc2MtPmhhbmRsZXJfZGF0YTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gZ2V0X2lycV9kZXNjX2RhdGEoZGVzYyk7CiAJdW5zaWduZWQgaW50IGNzLCB2aXJxOwogCiAJY3MgPSBpbl9iZTMyKHBpYy0+cmVncyArIFRJUl9DUykgPj4gMjQ7CkBAIC0yMTUsOSArMjE2LDExIEBACiAJCXZpcnEgPSBOT19JUlE7CiAJZWxzZQogCQl2aXJxID0gaXJxX2xpbmVhcl9yZXZtYXAocGljLT5ob3N0LCBjcyk7CisKIAlpZiAodmlycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIH0KIAogLyogRm9yIGhvb2tpbmcgdXAgdGhlIGNhc2NhY2Ugd2UgaGF2ZSBhIHByb2JsZW0uIE91ciBkZXZpY2UtdHJlZSBpcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwppbmRleCA4NTUzY2M0Li40YzEyODg0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwpAQCAtMzY1LDEwICszNjUsMTMgQEAKIAogc3RhdGljIHZvaWQgY2hycF84MjU5X2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IGk4MjU5X2lycSgpOworCiAJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYwppbmRleCBjMjc4YmQzLi4wYWNhMGUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jCkBAIC00NiwxMCArNDYsMTAgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgZmxpcHBlcl9waWNfbWFza19hbmRfYWNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgZmxpcHBlcl9waWNfbWFza19hbmRfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyh2aXJxKTsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXUzMiBtYXNrID0gMSA8PCBpcnE7CiAKIAljbHJiaXRzMzIoaW9fYmFzZSArIEZMSVBQRVJfSU1SLCBtYXNrKTsKQEAgLTU3LDI3ICs1NywyNyBAQAogCW91dF9iZTMyKGlvX2Jhc2UgKyBGTElQUEVSX0lDUiwgbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsaXBwZXJfcGljX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIGZsaXBwZXJfcGljX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7Ci0Jdm9pZCBfX2lvbWVtICppb19iYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJaW50IGlycSA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCS8qIHRoaXMgaXMgYXQgbGVhc3QgbmVlZGVkIGZvciBSU1cgKi8KIAlvdXRfYmUzMihpb19iYXNlICsgRkxJUFBFUl9JQ1IsIDEgPDwgaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgZmxpcHBlcl9waWNfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIGZsaXBwZXJfcGljX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KHZpcnEpOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAljbHJiaXRzMzIoaW9fYmFzZSArIEZMSVBQRVJfSU1SLCAxIDw8IGlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsaXBwZXJfcGljX3VubWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIGZsaXBwZXJfcGljX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7Ci0Jdm9pZCBfX2lvbWVtICppb19iYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJaW50IGlycSA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCXNldGJpdHMzMihpb19iYXNlICsgRkxJUFBFUl9JTVIsIDEgPDwgaXJxKTsKIH0KQEAgLTg1LDEwICs4NSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGZsaXBwZXJfcGljID0gewogCS5uYW1lCQk9ICJmbGlwcGVyLXBpYyIsCi0JLmFjawkJPSBmbGlwcGVyX3BpY19hY2ssCi0JLm1hc2tfYWNrCT0gZmxpcHBlcl9waWNfbWFza19hbmRfYWNrLAotCS5tYXNrCQk9IGZsaXBwZXJfcGljX21hc2ssCi0JLnVubWFzawkJPSBmbGlwcGVyX3BpY191bm1hc2ssCisJLmlycV9hY2sJPSBmbGlwcGVyX3BpY19hY2ssCisJLmlycV9tYXNrX2Fjawk9IGZsaXBwZXJfcGljX21hc2tfYW5kX2FjaywKKwkuaXJxX21hc2sJPSBmbGlwcGVyX3BpY19tYXNrLAorCS5pcnFfdW5tYXNrCT0gZmxpcHBlcl9waWNfdW5tYXNrLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYwppbmRleCBhNzcxZjkxLi4zNWU0NDhiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jCkBAIC00MSwzNiArNDEsMzYgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgaGx3ZF9waWNfbWFza19hbmRfYWNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgaGx3ZF9waWNfbWFza19hbmRfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyh2aXJxKTsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXUzMiBtYXNrID0gMSA8PCBpcnE7CiAKIAljbHJiaXRzMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lNUiwgbWFzayk7CiAJb3V0X2JlMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lDUiwgbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGhsd2RfcGljX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIGhsd2RfcGljX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7Ci0Jdm9pZCBfX2lvbWVtICppb19iYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJaW50IGlycSA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCW91dF9iZTMyKGlvX2Jhc2UgKyBIV19CUk9BRFdBWV9JQ1IsIDEgPDwgaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgaGx3ZF9waWNfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIGhsd2RfcGljX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KHZpcnEpOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAljbHJiaXRzMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lNUiwgMSA8PCBpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBobHdkX3BpY191bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBobHdkX3BpY191bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KHZpcnEpOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlzZXRiaXRzMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lNUiwgMSA8PCBpcnEpOwogfQpAQCAtNzgsMTAgKzc4LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaGx3ZF9waWMgPSB7CiAJLm5hbWUJCT0gImhsd2QtcGljIiwKLQkuYWNrCQk9IGhsd2RfcGljX2FjaywKLQkubWFza19hY2sJPSBobHdkX3BpY19tYXNrX2FuZF9hY2ssCi0JLm1hc2sJCT0gaGx3ZF9waWNfbWFzaywKLQkudW5tYXNrCQk9IGhsd2RfcGljX3VubWFzaywKKwkuaXJxX2Fjawk9IGhsd2RfcGljX2FjaywKKwkuaXJxX21hc2tfYWNrCT0gaGx3ZF9waWNfbWFza19hbmRfYWNrLAorCS5pcnFfbWFzawk9IGhsd2RfcGljX21hc2ssCisJLmlycV91bm1hc2sJPSBobHdkX3BpY191bm1hc2ssCiB9OwogCiAvKgpAQCAtMTI5LDExICsxMjksMTIgQEAKIHN0YXRpYyB2b2lkIGhsd2RfcGljX2lycV9jYXNjYWRlKHVuc2lnbmVkIGludCBjYXNjYWRlX3ZpcnEsCiAJCQkJICAgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwogCXN0cnVjdCBpcnFfaG9zdCAqaXJxX2hvc3QgPSBnZXRfaXJxX2RhdGEoY2FzY2FkZV92aXJxKTsKIAl1bnNpZ25lZCBpbnQgdmlycTsKIAogCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwotCWRlc2MtPmNoaXAtPm1hc2soY2FzY2FkZV92aXJxKTsgLyogSVJRX0xFVkVMICovCisJY2hpcC0+aXJxX21hc2soJmRlc2MtPmlycV9kYXRhKTsgLyogSVJRX0xFVkVMICovCiAJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCXZpcnEgPSBfX2hsd2RfcGljX2dldF9pcnEoaXJxX2hvc3QpOwpAQCAtMTQzLDkgKzE0NCw5IEBACiAJCXByX2Vycigic3B1cmlvdXMgaW50ZXJydXB0IVxuIik7CiAKIAlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKLQlkZXNjLT5jaGlwLT5hY2soY2FzY2FkZV92aXJxKTsgLyogSVJRX0xFVkVMICovCi0JaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSAmJiBkZXNjLT5jaGlwLT51bm1hc2spCi0JCWRlc2MtPmNoaXAtPnVubWFzayhjYXNjYWRlX3ZpcnEpOworCWNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsgLyogSVJRX0xFVkVMICovCisJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSAmJiBjaGlwLT5pcnFfdW5tYXNrKQorCQljaGlwLT5pcnFfdW5tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CiAJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCmluZGV4IGJhNDQ2YmYuLjRmYjk2ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKQEAgLTE2NywxMSArMTY3LDExIEBACiAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIGJ5IGRldmljZSBkcml2ZXJzICh2aWEgZW5hYmxlX0lSUSkKICAqIHRvIGVuYWJsZSBJTlRBIGluIHRoZSBicmlkZ2UgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KICAqLwotc3RhdGljIHZvaWQgaXNlcmllc19lbmFibGVfSVJRKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBpc2VyaWVzX2VuYWJsZV9JUlEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXUzMiBidXMsIGRldl9pZCwgZnVuY3Rpb24sIG1hc2s7CiAJY29uc3QgdTMyIHN1Yl9idXMgPSAwOwotCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2lycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCS8qIFRoZSBJUlEgaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgYnkgdGhlIGNhbGxlciAqLwogCWJ1cyA9IFJFQUxfSVJRX1RPX0JVUyhyaXJxKTsKQEAgLTE4NCwyMyArMTg0LDIzIEBACiB9CiAKIC8qIFRoaXMgaXMgY2FsbGVkIGJ5IGlzZXJpZXNfYWN0aXZhdGVfSVJRcyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpc2VyaWVzX3N0YXJ0dXBfSVJRKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdW5zaWduZWQgaW50IGlzZXJpZXNfc3RhcnR1cF9JUlEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXUzMiBidXMsIGRldl9pZCwgZnVuY3Rpb24sIG1hc2s7CiAJY29uc3QgdTMyIHN1Yl9idXMgPSAwOwotCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2lycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCWJ1cyA9IFJFQUxfSVJRX1RPX0JVUyhyaXJxKTsKIAlmdW5jdGlvbiA9IFJFQUxfSVJRX1RPX0ZVTkMocmlycSk7CiAJZGV2X2lkID0gKFJFQUxfSVJRX1RPX0lEU0VMKHJpcnEpIDw8IDQpICsgZnVuY3Rpb247CiAKIAkvKiBMaW5rIHRoZSBJUlEgbnVtYmVyIHRvIHRoZSBicmlkZ2UgKi8KLQlIdkNhbGxYbV9jb25uZWN0QnVzVW5pdChidXMsIHN1Yl9idXMsIGRldl9pZCwgaXJxKTsKKwlIdkNhbGxYbV9jb25uZWN0QnVzVW5pdChidXMsIHN1Yl9idXMsIGRldl9pZCwgZC0+aXJxKTsKIAogCS8qIFVubWFzayBicmlkZ2UgaW50ZXJydXB0cyBpbiB0aGUgRklTUiAqLwogCW1hc2sgPSAweDAxMDEwMDAwIDw8IGZ1bmN0aW9uOwogCUh2Q2FsbFBjaV91bm1hc2tGaXNyKGJ1cywgc3ViX2J1cywgZGV2X2lkLCBtYXNrKTsKLQlpc2VyaWVzX2VuYWJsZV9JUlEoaXJxKTsKKwlpc2VyaWVzX2VuYWJsZV9JUlEoZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNSwyMSArMjE1LDI2IEBACiAKIAlmb3JfZWFjaF9pcnEgKGlycSkgewogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CiAKLQkJaWYgKGRlc2MgJiYgZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5zdGFydHVwKSB7CisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOworCisJCWNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKKwkJaWYgKGNoaXAgJiYgY2hpcC0+aXJxX3N0YXJ0dXApIHsKIAkJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJZGVzYy0+Y2hpcC0+c3RhcnR1cChpcnEpOworCQkJY2hpcC0+aXJxX3N0YXJ0dXAoJmRlc2MtPmlycV9kYXRhKTsKIAkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCX0KIAl9CiB9CiAKIC8qICB0aGlzIGlzIG5vdCBjYWxsZWQgYW55d2hlcmUgY3VycmVudGx5ICovCi1zdGF0aWMgdm9pZCBpc2VyaWVzX3NodXRkb3duX0lSUSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaXNlcmllc19zaHV0ZG93bl9JUlEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXUzMiBidXMsIGRldl9pZCwgZnVuY3Rpb24sIG1hc2s7CiAJY29uc3QgdTMyIHN1Yl9idXMgPSAwOwotCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2lycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCS8qIGlycSBzaG91bGQgYmUgbG9ja2VkIGJ5IHRoZSBjYWxsZXIgKi8KIAlidXMgPSBSRUFMX0lSUV9UT19CVVMocmlycSk7CkBAIC0yNDgsMTEgKzI1MywxMSBAQAogICogVGhpcyB3aWxsIGJlIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVycyAodmlhIGRpc2FibGVfSVJRKQogICogdG8gZGlzYWJsZSBJTlRBIGluIHRoZSBicmlkZ2UgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KICAqLwotc3RhdGljIHZvaWQgaXNlcmllc19kaXNhYmxlX0lSUSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaXNlcmllc19kaXNhYmxlX0lSUShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdTMyIGJ1cywgZGV2X2lkLCBmdW5jdGlvbiwgbWFzazsKIAljb25zdCB1MzIgc3ViX2J1cyA9IDA7Ci0JdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbaXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgcmlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCiAJLyogVGhlIElSUSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBieSB0aGUgY2FsbGVyICovCiAJYnVzID0gUkVBTF9JUlFfVE9fQlVTKHJpcnEpOwpAQCAtMjY0LDkgKzI2OSw5IEBACiAJSHZDYWxsUGNpX21hc2tJbnRlcnJ1cHRzKGJ1cywgc3ViX2J1cywgZGV2X2lkLCBtYXNrKTsKIH0KIAotc3RhdGljIHZvaWQgaXNlcmllc19lbmRfSVJRKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBpc2VyaWVzX2VuZF9JUlEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2lycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCUh2Q2FsbFBjaV9lb2koUkVBTF9JUlFfVE9fQlVTKHJpcnEpLCBSRUFMX0lSUV9UT19TVUJCVVMocmlycSksCiAJCShSRUFMX0lSUV9UT19JRFNFTChyaXJxKSA8PCA0KSArIFJFQUxfSVJRX1RPX0ZVTkMocmlycSkpOwpAQCAtMjc0LDExICsyNzksMTEgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpc2VyaWVzX3BpYyA9IHsKIAkubmFtZQkJPSAiaVNlcmllcyIsCi0JLnN0YXJ0dXAJPSBpc2VyaWVzX3N0YXJ0dXBfSVJRLAotCS5zaHV0ZG93bgk9IGlzZXJpZXNfc2h1dGRvd25fSVJRLAotCS51bm1hc2sJCT0gaXNlcmllc19lbmFibGVfSVJRLAotCS5tYXNrCQk9IGlzZXJpZXNfZGlzYWJsZV9JUlEsCi0JLmVvaQkJPSBpc2VyaWVzX2VuZF9JUlEKKwkuaXJxX3N0YXJ0dXAJPSBpc2VyaWVzX3N0YXJ0dXBfSVJRLAorCS5pcnFfc2h1dGRvd24JPSBpc2VyaWVzX3NodXRkb3duX0lSUSwKKwkuaXJxX3VubWFzawk9IGlzZXJpZXNfZW5hYmxlX0lSUSwKKwkuaXJxX21hc2sJPSBpc2VyaWVzX2Rpc2FibGVfSVJRLAorCS5pcnFfZW9pCT0gaXNlcmllc19lbmRfSVJRCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3NldHVwLmMKaW5kZXggZjM3MmVjMS4uYTYwNjdiMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9zZXR1cC5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJbm1pX3ZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoTlVMTCwgKm5taXByb3ApOwogCQltcGljX2lycV9zZXRfcHJpb3JpdHkobm1pX3ZpcnEsIDE1KTsKIAkJc2V0X2lycV90eXBlKG5taV92aXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0JCW1waWNfdW5tYXNrX2lycShubWlfdmlycSk7CisJCW1waWNfdW5tYXNrX2lycShpcnFfZ2V0X2lycV9kYXRhKG5taV92aXJxKSk7CiAJfQogCiAJb2Zfbm9kZV9wdXQobXBpY19ub2RlKTsKQEAgLTI2Niw3ICsyNjYsNyBAQAogCWlmIChubWlfdmlycSAhPSBOT19JUlEgJiYgbXBpY19nZXRfbWNpcnEoKSA9PSBubWlfdmlycSkgewogCQlwcmludGsoS0VSTl9FUlIgIk5NSSBkZWxpdmVyZWRcbiIpOwogCQlkZWJ1Z2dlcihyZWdzKTsKLQkJbXBpY19lbmRfaXJxKG5taV92aXJxKTsKKwkJbXBpY19lbmRfaXJxKGlycV9nZXRfaXJxX2RhdGEobm1pX3ZpcnEpKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCA4OTBkNWY3Li5jNTU4MTJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTgyLDkgKzgyLDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBtYWNfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHBtYWNfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKHNyYyAmIDB4MWYpOwogICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTA0LDkgKzEwNCw5IEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcG1hY19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgcG1hY19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFt2aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNDksMTUgKzE0OSwxNSBAQAogLyogV2hlbiBhbiBpcnEgZ2V0cyByZXF1ZXN0ZWQgZm9yIHRoZSBmaXJzdCBjbGllbnQsIGlmIGl0J3MgYW4KICAqIGVkZ2UgaW50ZXJydXB0LCB3ZSBjbGVhciBhbnkgcHJldmlvdXMgb25lIG9uIHRoZSBjb250cm9sbGVyCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG1hY19zdGFydHVwX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG1hY19zdGFydHVwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFt2aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKLQlpZiAoKGlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpID09IDApCisJaWYgKChpcnFfdG9fZGVzYyhkLT5pcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpID09IDApCiAJCW91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOwogICAgICAgICBfX3NldF9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgX19wbWFjX3NldF9pcnFfbWFzayhzcmMsIDApOwpAQCAtMTY2LDEwICsxNjYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcG1hY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHBtYWNfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBfX2NsZWFyX2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwpAQCAtMTc3LDEwICsxNzcsMTAgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBwbWFjX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBwbWFjX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCV9fc2V0X2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwpAQCAtMTg4LDI0ICsxODgsMjQgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHBtYWNfcmV0cmlnZ2VyKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIGludCBwbWFjX3JldHJpZ2dlcihzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwotCV9fcG1hY19yZXRyaWdnZXIoaXJxX21hcFt2aXJxXS5od2lycSk7CisJX19wbWFjX3JldHJpZ2dlcihpcnFfbWFwW2QtPmlycV0uaHdpcnEpOwogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcG1hY19waWMgPSB7CiAJLm5hbWUJCT0gIlBNQUMtUElDIiwKLQkuc3RhcnR1cAk9IHBtYWNfc3RhcnR1cF9pcnEsCi0JLm1hc2sJCT0gcG1hY19tYXNrX2lycSwKLQkuYWNrCQk9IHBtYWNfYWNrX2lycSwKLQkubWFza19hY2sJPSBwbWFjX21hc2tfYW5kX2Fja19pcnEsCi0JLnVubWFzawkJPSBwbWFjX3VubWFza19pcnEsCi0JLnJldHJpZ2dlcgk9IHBtYWNfcmV0cmlnZ2VyLAorCS5pcnFfc3RhcnR1cAk9IHBtYWNfc3RhcnR1cF9pcnEsCisJLmlycV9tYXNrCT0gcG1hY19tYXNrX2lycSwKKwkuaXJxX2Fjawk9IHBtYWNfYWNrX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gcG1hY19tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gcG1hY191bm1hc2tfaXJxLAorCS5pcnFfcmV0cmlnZ2VyCT0gcG1hY19yZXRyaWdnZXIsCiB9OwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZ2F0d2lja19hY3Rpb24oaW50IGNwbCwgdm9pZCAqZGV2X2lkKQpAQCAtNDcyLDEyICs0NzIsMTQgQEAKIAogc3RhdGljIHZvaWQgcG1hY191M19jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgbXBpYyAqbXBpYyA9IGRlc2MtPmhhbmRsZXJfZGF0YTsKLQorCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOworCXN0cnVjdCBtcGljICptcGljID0gZ2V0X2lycV9kZXNjX2RhdGEoZGVzYyk7CiAJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxID0gbXBpY19nZXRfb25lX2lycShtcGljKTsKKwogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7Ci0JZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwbWFjX3BpY19zZXR1cF9tcGljX25taShzdHJ1Y3QgbXBpYyAqbXBpYykKQEAgLTcwNyw3ICs3MDksNyBAQAogCW1iKCk7CiAJZm9yIChpID0gMDsgaSA8IG1heF9yZWFsX2lycXM7ICsraSkKIAkJaWYgKHRlc3RfYml0KGksIHNsZWVwX3NhdmVfbWFzaykpCi0JCQlwbWFjX3VubWFza19pcnEoaSk7CisJCQlwbWFjX3VubWFza19pcnEoaXJxX2dldF9pcnFfZGF0YShpKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKaW5kZXggOTIyOTBmZi4uMzk4OGM4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKQEAgLTk5LDE2ICs5OSwxNiBAQAogICogU2V0cyBwczNfYm1wLm1hc2sgYW5kIGNhbGxzIGx2MV9kaWRfdXBkYXRlX2ludGVycnVwdF9tYXNrKCkuCiAgKi8KIAotc3RhdGljIHZvaWQgcHMzX2NoaXBfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHBzM19jaGlwX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwczNfcHJpdmF0ZSAqcGQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwlzdHJ1Y3QgcHMzX3ByaXZhdGUgKnBkID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXByX2RlYnVnKCIlczolZDogdGhyZWFkX2lkICVsbHUsIHZpcnEgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKLQkJcGQtPnRocmVhZF9pZCwgdmlycSk7CisJCXBkLT50aHJlYWRfaWQsIGQtPmlycSk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY2xlYXJfYml0KDYzIC0gdmlycSwgJnBkLT5ibXAubWFzayk7CisJY2xlYXJfYml0KDYzIC0gZC0+aXJxLCAmcGQtPmJtcC5tYXNrKTsKIAlsdjFfZGlkX3VwZGF0ZV9pbnRlcnJ1cHRfbWFzayhwZC0+cHBlX2lkLCBwZC0+dGhyZWFkX2lkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0xMjAsMTYgKzEyMCwxNiBAQAogICogQ2xlYXJzIHBzM19ibXAubWFzayBhbmQgY2FsbHMgbHYxX2RpZF91cGRhdGVfaW50ZXJydXB0X21hc2soKS4KICAqLwogCi1zdGF0aWMgdm9pZCBwczNfY2hpcF91bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBwczNfY2hpcF91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwczNfcHJpdmF0ZSAqcGQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwlzdHJ1Y3QgcHMzX3ByaXZhdGUgKnBkID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXByX2RlYnVnKCIlczolZDogdGhyZWFkX2lkICVsbHUsIHZpcnEgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKLQkJcGQtPnRocmVhZF9pZCwgdmlycSk7CisJCXBkLT50aHJlYWRfaWQsIGQtPmlycSk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Jc2V0X2JpdCg2MyAtIHZpcnEsICZwZC0+Ym1wLm1hc2spOworCXNldF9iaXQoNjMgLSBkLT5pcnEsICZwZC0+Ym1wLm1hc2spOwogCWx2MV9kaWRfdXBkYXRlX2ludGVycnVwdF9tYXNrKHBkLT5wcGVfaWQsIHBkLT50aHJlYWRfaWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTE0MSwxMCArMTQxLDEwIEBACiAgKiBDYWxscyBsdjFfZW5kX29mX2ludGVycnVwdF9leHQoKS4KICAqLwogCi1zdGF0aWMgdm9pZCBwczNfY2hpcF9lb2kodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBwczNfY2hpcF9lb2koc3RydWN0IGlycV9kYXRhICpkKQogewotCWNvbnN0IHN0cnVjdCBwczNfcHJpdmF0ZSAqcGQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKLQlsdjFfZW5kX29mX2ludGVycnVwdF9leHQocGQtPnBwZV9pZCwgcGQtPnRocmVhZF9pZCwgdmlycSk7CisJY29uc3Qgc3RydWN0IHBzM19wcml2YXRlICpwZCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWx2MV9lbmRfb2ZfaW50ZXJydXB0X2V4dChwZC0+cHBlX2lkLCBwZC0+dGhyZWFkX2lkLCBkLT5pcnEpOwogfQogCiAvKioKQEAgLTE1Myw5ICsxNTMsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBzM19pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJwczMiLAotCS5tYXNrID0gcHMzX2NoaXBfbWFzaywKLQkudW5tYXNrID0gcHMzX2NoaXBfdW5tYXNrLAotCS5lb2kgPSBwczNfY2hpcF9lb2ksCisJLmlycV9tYXNrID0gcHMzX2NoaXBfbWFzaywKKwkuaXJxX3VubWFzayA9IHBzM19jaGlwX3VubWFzaywKKwkuaXJxX2VvaSA9IHBzM19jaGlwX2VvaSwKIH07CiAKIC8qKgpAQCAtMjAyLDcgKzIwMiw3IEBACiAJCWdvdG8gZmFpbF9zZXQ7CiAJfQogCi0JcHMzX2NoaXBfbWFzaygqdmlycSk7CisJcHMzX2NoaXBfbWFzayhpcnFfZ2V0X2lycV9kYXRhKCp2aXJxKSk7CiAKIAlyZXR1cm4gcmVzdWx0OwogCkBAIC0yOTYsNyArMjk2LDcgQEAKIAlwcl9kZWJ1ZygiJXM6JWQ6IHBwZV9pZCAlbGx1LCB0aHJlYWRfaWQgJWxsdSwgdmlycSAldVxuIiwgX19mdW5jX18sCiAJCV9fTElORV9fLCBwZC0+cHBlX2lkLCBwZC0+dGhyZWFkX2lkLCB2aXJxKTsKIAotCXBzM19jaGlwX21hc2sodmlycSk7CisJcHMzX2NoaXBfbWFzayhpcnFfZ2V0X2lycV9kYXRhKHZpcnEpKTsKIAogCXJlc3VsdCA9IGx2MV9kaXNjb25uZWN0X2lycV9wbHVnX2V4dChwZC0+cHBlX2lkLCBwZC0+dGhyZWFkX2lkLCB2aXJxKTsKIApAQCAtMzU3LDcgKzM1Nyw3IEBACiAKIAlwcl9kZWJ1ZygiIC0+ICVzOiVkIHZpcnEgJXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgdmlycSk7CiAKLQlwczNfY2hpcF9tYXNrKHZpcnEpOworCXBzM19jaGlwX21hc2soaXJxX2dldF9pcnFfZGF0YSh2aXJxKSk7CiAKIAlyZXN1bHQgPSBsdjFfZGVzdHJ1Y3RfZXZlbnRfcmVjZWl2ZV9wb3J0KHZpcnFfdG9faHcodmlycSkpOwogCkBAIC00OTIsNyArNDkyLDcgQEAKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGxvbmcgb3V0bGV0ID0gdmlycV90b19odyh2aXJxKTsKIAotCXBzM19jaGlwX21hc2sodmlycSk7CisJcHMzX2NoaXBfbWFzayhpcnFfZ2V0X2lycV9kYXRhKHZpcnEpKTsKIAogCS8qCiAJICogbHYxX2Rlc3RydWN0X2lvX2lycV9vdXRsZXQoKSB3aWxsIGRlc3Ryb3kgdGhlIElSUSBwbHVnLApAQCAtNTUzLDcgKzU1Myw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXBzM19jaGlwX21hc2sodmlycSk7CisJcHMzX2NoaXBfbWFzayhpcnFfZ2V0X2lycV9kYXRhKHZpcnEpKTsKIAlyZXN1bHQgPSBsdjFfZGVjb25maWd1cmVfdmlydHVhbF91YXJ0X2lycSgpOwogCiAJaWYgKHJlc3VsdCkgewpAQCAtNjA1LDcgKzYwNSw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXBzM19jaGlwX21hc2sodmlycSk7CisJcHMzX2NoaXBfbWFzayhpcnFfZ2V0X2lycV9kYXRhKHZpcnEpKTsKIAogCXJlc3VsdCA9IHBzM19pcnFfcGx1Z19kZXN0cm95KHZpcnEpOwogCUJVR19PTihyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jCmluZGV4IGY0ODAzODYuLjNjYWZjMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKQEAgLTUwOCwxMiArNTA4LDcgQEAKIAlpZiAoYWN0aW9uID09IE1FTV9JU09MQVRFX0NPVU5UKQogCQlyZXQgPSBjbW1fY291bnRfcGFnZXMoYXJnKTsKIAotCWlmIChyZXQpCi0JCXJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKLQllbHNlCi0JCXJldCA9IE5PVElGWV9PSzsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbW1fbWVtX2lzb2xhdGVfbmIgPSB7CkBAIC02MzUsMTIgKzYzMCw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChyZXQpCi0JCXJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKLQllbHNlCi0JCXJldCA9IE5PVElGWV9PSzsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbW1fbWVtX25iID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IDE3YTExYzguLjNjYzRkMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTg3Niw3ICs4NzYsNyBAQAogICoKICAqIFNhdmUgdGhlIHZhbHVlcyBvZiB0aGUgZGV2aWNlIGJhcnMuIFVubGlrZSB0aGUgcmVzdG9yZQogICogcm91dGluZSwgdGhpcyByb3V0aW5lIGlzICpub3QqIHJlY3Vyc2l2ZS4gVGhpcyBpcyBiZWNhdXNlCi0gKiBQQ0kgZGV2aWNlcyBhcmUgYWRkZWQgaW5kaXZpZHVhbGxseTsgYnV0LCBmb3IgdGhlIHJlc3RvcmUsCisgKiBQQ0kgZGV2aWNlcyBhcmUgYWRkZWQgaW5kaXZpZHVhbGx5OyBidXQsIGZvciB0aGUgcmVzdG9yZSwKICAqIGFuIGVudGlyZSBzbG90IGlzIHJlc2V0IGF0IGEgdGltZS4KICAqLwogc3RhdGljIHZvaWQgZWVoX3NhdmVfYmFycyhzdHJ1Y3QgcGNpX2RuICpwZG4pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IGVkZWE2MGIuLjE1NGM0NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS90Y2UuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCiAjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKIApAQCAtMjcwLDYgKzI3MiwxNTIgQEAKIAlyZXR1cm4gdGNlX3JldDsKIH0KIAorLyogdGhpcyBpcyBjb21wYXRhYmxlIHdpdGggY2VsbHMgZm9yIHRoZSBkZXZpY2UgdHJlZSBwcm9wZXJ0eSAqLworc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wIHsKKwlfX2JlMzIJbGlvYm47CQkvKiB0Y2UgdGFibGUgbnVtYmVyICovCisJX19iZTY0CWRtYV9iYXNlOwkvKiBhZGRyZXNzIGhpLGxvICovCisJX19iZTMyCXRjZV9zaGlmdDsJLyogaWxvZzIodGNlX3BhZ2Vfc2l6ZSkgKi8KKwlfX2JlMzIJd2luZG93X3NoaWZ0OwkvKiBpbG9nMih0Y2Vfd2luZG93X3NpemUpICovCit9OworCitzdHJ1Y3QgZGlyZWN0X3dpbmRvdyB7CisJc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2U7CisJY29uc3Qgc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wICpwcm9wOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKy8qIER5bmFtaWMgRE1BIFdpbmRvdyBzdXBwb3J0ICovCitzdHJ1Y3QgZGR3X3F1ZXJ5X3Jlc3BvbnNlIHsKKwl1MzIgd2luZG93c19hdmFpbGFibGU7CisJdTMyIGxhcmdlc3RfYXZhaWxhYmxlX2Jsb2NrOworCXUzMiBwYWdlX3NpemU7CisJdTMyIG1pZ3JhdGlvbl9jYXBhYmxlOworfTsKKworc3RydWN0IGRkd19jcmVhdGVfcmVzcG9uc2UgeworCXUzMiBsaW9ibjsKKwl1MzIgYWRkcl9oaTsKKwl1MzIgYWRkcl9sbzsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoZGlyZWN0X3dpbmRvd19saXN0KTsKKy8qIHByZXZlbnRzIHJhY2VzIGJldHdlZW4gbWVtb3J5IG9uL29mZmxpbmUgYW5kIHdpbmRvdyBjcmVhdGlvbiAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CisvKiBwcm90ZWN0cyBpbml0aWFsaXppbmcgd2luZG93IHR3aWNlIGZvciBzYW1lIGRldmljZSAqLworc3RhdGljIERFRklORV9NVVRFWChkaXJlY3Rfd2luZG93X2luaXRfbXV0ZXgpOworI2RlZmluZSBESVJFQ1Q2NF9QUk9QTkFNRSAibGludXgsZGlyZWN0NjQtZGRyLXdpbmRvdy1pbmZvIgorCitzdGF0aWMgaW50IHRjZV9jbGVhcnJhbmdlX211bHRpX3BTZXJpZXNMUCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJdW5zaWduZWQgbG9uZyBudW1fcGZuLCBjb25zdCB2b2lkICphcmcpCit7CisJY29uc3Qgc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wICptYXByYW5nZSA9IGFyZzsKKwlpbnQgcmM7CisJdTY0IHRjZV9zaXplLCBudW1fdGNlLCBkbWFfb2Zmc2V0LCBuZXh0OworCXUzMiB0Y2Vfc2hpZnQ7CisJbG9uZyBsaW1pdDsKKworCXRjZV9zaGlmdCA9IGJlMzJfdG9fY3B1KG1hcHJhbmdlLT50Y2Vfc2hpZnQpOworCXRjZV9zaXplID0gMVVMTCA8PCB0Y2Vfc2hpZnQ7CisJbmV4dCA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOworCW51bV90Y2UgPSBudW1fcGZuIDw8IFBBR0VfU0hJRlQ7CisKKwkvKiByb3VuZCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRjZSBwYWdlIHNpemUgKi8KKwludW1fdGNlICs9IG5leHQgJiAodGNlX3NpemUgLSAxKTsKKwluZXh0ICY9IH4odGNlX3NpemUgLSAxKTsKKworCS8qIGNvdmVydCB0byBudW1iZXIgb2YgdGNlcyAqLworCW51bV90Y2UgfD0gdGNlX3NpemUgLSAxOworCW51bV90Y2UgPj49IHRjZV9zaGlmdDsKKworCWRvIHsKKwkJLyoKKwkJICogU2V0IHVwIHRoZSBwYWdlIHdpdGggVENFIGRhdGEsIGxvb3BpbmcgdGhyb3VnaCBhbmQgc2V0dGluZworCQkgKiB0aGUgdmFsdWVzLgorCQkgKi8KKwkJbGltaXQgPSBtaW5fdChsb25nLCBudW1fdGNlLCA1MTIpOworCQlkbWFfb2Zmc2V0ID0gbmV4dCArIGJlNjRfdG9fY3B1KG1hcHJhbmdlLT5kbWFfYmFzZSk7CisKKwkJcmMgPSBwbHBhcl90Y2Vfc3R1ZmYoKHU2NCliZTMyX3RvX2NwdShtYXByYW5nZS0+bGlvYm4pLAorCQkJCQkgICAgIGRtYV9vZmZzZXQsCisJCQkJCSAgICAgMCwgbGltaXQpOworCQludW1fdGNlIC09IGxpbWl0OworCX0gd2hpbGUgKG51bV90Y2UgPiAwICYmICFyYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdGNlX3NldHJhbmdlX211bHRpX3BTZXJpZXNMUCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJdW5zaWduZWQgbG9uZyBudW1fcGZuLCBjb25zdCB2b2lkICphcmcpCit7CisJY29uc3Qgc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wICptYXByYW5nZSA9IGFyZzsKKwl1NjQgKnRjZXAsIHRjZV9zaXplLCBudW1fdGNlLCBkbWFfb2Zmc2V0LCBuZXh0LCBwcm90b190Y2UsIGxpb2JuOworCXUzMiB0Y2Vfc2hpZnQ7CisJdTY0IHJjID0gMDsKKwlsb25nIGwsIGxpbWl0OworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsJLyogdG8gcHJvdGVjdCB0Y2VwIGFuZCB0aGUgcGFnZSBiZWhpbmQgaXQgKi8KKwl0Y2VwID0gX19nZXRfY3B1X3Zhcih0Y2VfcGFnZSk7CisKKwlpZiAoIXRjZXApIHsKKwkJdGNlcCA9ICh1NjQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7CisJCWlmICghdGNlcCkgeworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJX19nZXRfY3B1X3Zhcih0Y2VfcGFnZSkgPSB0Y2VwOworCX0KKworCXByb3RvX3RjZSA9IFRDRV9QQ0lfUkVBRCB8IFRDRV9QQ0lfV1JJVEU7CisKKwlsaW9ibiA9ICh1NjQpYmUzMl90b19jcHUobWFwcmFuZ2UtPmxpb2JuKTsKKwl0Y2Vfc2hpZnQgPSBiZTMyX3RvX2NwdShtYXByYW5nZS0+dGNlX3NoaWZ0KTsKKwl0Y2Vfc2l6ZSA9IDFVTEwgPDwgdGNlX3NoaWZ0OworCW5leHQgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKwludW1fdGNlID0gbnVtX3BmbiA8PCBQQUdFX1NISUZUOworCisJLyogcm91bmQgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0Y2UgcGFnZSBzaXplICovCisJbnVtX3RjZSArPSBuZXh0ICYgKHRjZV9zaXplIC0gMSk7CisJbmV4dCAmPSB+KHRjZV9zaXplIC0gMSk7CisKKwkvKiBjb3ZlcnQgdG8gbnVtYmVyIG9mIHRjZXMgKi8KKwludW1fdGNlIHw9IHRjZV9zaXplIC0gMTsKKwludW1fdGNlID4+PSB0Y2Vfc2hpZnQ7CisKKwkvKiBXZSBjYW4gbWFwIG1heCBvbmUgcGFnZWZ1bCBvZiBUQ0VzIGF0IGEgdGltZSAqLworCWRvIHsKKwkJLyoKKwkJICogU2V0IHVwIHRoZSBwYWdlIHdpdGggVENFIGRhdGEsIGxvb3BpbmcgdGhyb3VnaCBhbmQgc2V0dGluZworCQkgKiB0aGUgdmFsdWVzLgorCQkgKi8KKwkJbGltaXQgPSBtaW5fdChsb25nLCBudW1fdGNlLCA0MDk2L1RDRV9FTlRSWV9TSVpFKTsKKwkJZG1hX29mZnNldCA9IG5leHQgKyBiZTY0X3RvX2NwdShtYXByYW5nZS0+ZG1hX2Jhc2UpOworCisJCWZvciAobCA9IDA7IGwgPCBsaW1pdDsgbCsrKSB7CisJCQl0Y2VwW2xdID0gcHJvdG9fdGNlIHwgbmV4dDsKKwkJCW5leHQgKz0gdGNlX3NpemU7CisJCX0KKworCQlyYyA9IHBscGFyX3RjZV9wdXRfaW5kaXJlY3QobGlvYm4sCisJCQkJCSAgICBkbWFfb2Zmc2V0LAorCQkJCQkgICAgKHU2NCl2aXJ0X3RvX2Ficyh0Y2VwKSwKKwkJCQkJICAgIGxpbWl0KTsKKworCQludW1fdGNlIC09IGxpbWl0OworCX0gd2hpbGUgKG51bV90Y2UgPiAwICYmICFyYyk7CisKKwkvKiBlcnJvciBjbGVhbnVwOiBjYWxsZXIgd2lsbCBjbGVhciB3aG9sZSByYW5nZSAqLworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB0Y2Vfc2V0cmFuZ2VfbXVsdGlfcFNlcmllc0xQX3dhbGsodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCXVuc2lnbmVkIGxvbmcgbnVtX3Bmbiwgdm9pZCAqYXJnKQoreworCXJldHVybiB0Y2Vfc2V0cmFuZ2VfbXVsdGlfcFNlcmllc0xQKHN0YXJ0X3BmbiwgbnVtX3BmbiwgYXJnKTsKK30KKworCiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHZvaWQgaW9tbXVfdGFibGVfc2V0cGFybXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGIsCiAJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sCkBAIC00OTUsNiArNjQzLDMyOSBAQAogCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CiB9CiAKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSBkaXNhYmxlX2RkdzsKKworc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9kZHdfc2V0dXAoY2hhciAqc3RyKQoreworCWRpc2FibGVfZGR3ID0gMTsKKwlwcmludGsoS0VSTl9JTkZPICJwcGMgaW9tbXU6IGRpc2FibGluZyBkZHcuXG4iKTsKKworCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgiZGlzYWJsZV9kZHciLCBkaXNhYmxlX2Rkd19zZXR1cCk7CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9kZHcoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZHluYW1pY19kbWFfd2luZG93X3Byb3AgKmR3cDsKKwlzdHJ1Y3QgcHJvcGVydHkgKndpbjY0OworCWNvbnN0IHUzMiAqZGRyX2F2YWlsOworCXU2NCBsaW9ibjsKKwlpbnQgbGVuLCByZXQ7CisKKwlkZHJfYXZhaWwgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0sZGR3LWFwcGxpY2FibGUiLCAmbGVuKTsKKwl3aW42NCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsIERJUkVDVDY0X1BST1BOQU1FLCBOVUxMKTsKKwlpZiAoIXdpbjY0IHx8ICFkZHJfYXZhaWwgfHwgbGVuIDwgMyAqIHNpemVvZih1MzIpKQorCQlyZXR1cm47CisKKwlkd3AgPSB3aW42NC0+dmFsdWU7CisJbGlvYm4gPSAodTY0KWJlMzJfdG9fY3B1KGR3cC0+bGlvYm4pOworCisJLyogY2xlYXIgdGhlIHdob2xlIHdpbmRvdywgbm90ZSB0aGUgYXJnIGlzIGluIGtlcm5lbCBwYWdlcyAqLworCXJldCA9IHRjZV9jbGVhcnJhbmdlX211bHRpX3BTZXJpZXNMUCgwLAorCQkxVUxMIDw8IChiZTMyX3RvX2NwdShkd3AtPndpbmRvd19zaGlmdCkgLSBQQUdFX1NISUZUKSwgZHdwKTsKKwlpZiAocmV0KQorCQlwcl93YXJuaW5nKCIlcyBmYWlsZWQgdG8gY2xlYXIgdGNlcyBpbiB3aW5kb3cuXG4iLAorCQkJIG5wLT5mdWxsX25hbWUpOworCWVsc2UKKwkJcHJfZGVidWcoIiVzIHN1Y2Nlc3NmdWxseSBjbGVhcmVkIHRjZXMgaW4gd2luZG93LlxuIiwKKwkJCSBucC0+ZnVsbF9uYW1lKTsKKworCXJldCA9IHJ0YXNfY2FsbChkZHJfYXZhaWxbMl0sIDEsIDEsIE5VTEwsIGxpb2JuKTsKKwlpZiAocmV0KQorCQlwcl93YXJuaW5nKCIlczogZmFpbGVkIHRvIHJlbW92ZSBkaXJlY3Qgd2luZG93OiBydGFzIHJldHVybmVkICIKKwkJCSIlZCB0byBpYm0scmVtb3ZlLXBlLWRtYS13aW5kb3coJXgpICVsbHhcbiIsCisJCQlucC0+ZnVsbF9uYW1lLCByZXQsIGRkcl9hdmFpbFsyXSwgbGlvYm4pOworCWVsc2UKKwkJcHJfZGVidWcoIiVzOiBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBkaXJlY3Qgd2luZG93OiBydGFzIHJldHVybmVkICIKKwkJCSIlZCB0byBpYm0scmVtb3ZlLXBlLWRtYS13aW5kb3coJXgpICVsbHhcbiIsCisJCQlucC0+ZnVsbF9uYW1lLCByZXQsIGRkcl9hdmFpbFsyXSwgbGlvYm4pOworfQorCisKK3N0YXRpYyBpbnQgZHVwZV9kZHdfaWZfYWxyZWFkeV9jcmVhdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGRuKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJc3RydWN0IHBjaV9kbiAqcGNpZG47CisJc3RydWN0IGRpcmVjdF93aW5kb3cgKndpbmRvdzsKKwljb25zdCBzdHJ1Y3QgZHluYW1pY19kbWFfd2luZG93X3Byb3AgKmRpcmVjdDY0OworCXU2NCBkbWFfYWRkciA9IDA7CisKKwlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCXBjaWRuID0gUENJX0ROKGRuKTsKKwlzcGluX2xvY2soJmRpcmVjdF93aW5kb3dfbGlzdF9sb2NrKTsKKwkvKiBjaGVjayBpZiB3ZSBhbHJlYWR5IGNyZWF0ZWQgYSB3aW5kb3cgYW5kIGR1cGUgdGhhdCBjb25maWcgaWYgc28gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdpbmRvdywgJmRpcmVjdF93aW5kb3dfbGlzdCwgbGlzdCkgeworCQlpZiAod2luZG93LT5kZXZpY2UgPT0gcGRuKSB7CisJCQlkaXJlY3Q2NCA9IHdpbmRvdy0+cHJvcDsKKwkJCWRtYV9hZGRyID0gZGlyZWN0NjQtPmRtYV9iYXNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmRpcmVjdF93aW5kb3dfbGlzdF9sb2NrKTsKKworCXJldHVybiBkbWFfYWRkcjsKK30KKworc3RhdGljIHU2NCBkdXBlX2Rkd19pZl9rZXhlYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBkbikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCXN0cnVjdCBwY2lfZG4gKnBjaWRuOworCWludCBsZW47CisJc3RydWN0IGRpcmVjdF93aW5kb3cgKndpbmRvdzsKKwljb25zdCBzdHJ1Y3QgZHluYW1pY19kbWFfd2luZG93X3Byb3AgKmRpcmVjdDY0OworCXU2NCBkbWFfYWRkciA9IDA7CisKKwlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCXBjaWRuID0gUENJX0ROKGRuKTsKKwlkaXJlY3Q2NCA9IG9mX2dldF9wcm9wZXJ0eShwZG4sIERJUkVDVDY0X1BST1BOQU1FLCAmbGVuKTsKKwlpZiAoZGlyZWN0NjQpIHsKKwkJd2luZG93ID0ga3phbGxvYyhzaXplb2YoKndpbmRvdyksIEdGUF9LRVJORUwpOworCQlpZiAoIXdpbmRvdykgeworCQkJcmVtb3ZlX2RkdyhwZG4pOworCQl9IGVsc2UgeworCQkJd2luZG93LT5kZXZpY2UgPSBwZG47CisJCQl3aW5kb3ctPnByb3AgPSBkaXJlY3Q2NDsKKwkJCXNwaW5fbG9jaygmZGlyZWN0X3dpbmRvd19saXN0X2xvY2spOworCQkJbGlzdF9hZGQoJndpbmRvdy0+bGlzdCwgJmRpcmVjdF93aW5kb3dfbGlzdCk7CisJCQlzcGluX3VubG9jaygmZGlyZWN0X3dpbmRvd19saXN0X2xvY2spOworCQkJZG1hX2FkZHIgPSBkaXJlY3Q2NC0+ZG1hX2Jhc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gZG1hX2FkZHI7Cit9CisKK3N0YXRpYyBpbnQgcXVlcnlfZGR3KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHUzMiAqZGRyX2F2YWlsLAorCQkJc3RydWN0IGRkd19xdWVyeV9yZXNwb25zZSAqcXVlcnkpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwlzdHJ1Y3QgcGNpX2RuICpwY2lkbjsKKwl1MzIgY2ZnX2FkZHI7CisJdTY0IGJ1aWQ7CisJaW50IHJldDsKKworCS8qCisJICogR2V0IHRoZSBjb25maWcgYWRkcmVzcyBhbmQgcGhiIGJ1aWQgb2YgdGhlIFBFIHdpbmRvdy4KKwkgKiBSZWx5IG9uIGVlaCB0byByZXRyaWV2ZSB0aGlzIGZvciB1cy4KKwkgKiBSZXRyaWV2ZSB0aGVtIGZyb20gdGhlIHBjaSBkZXZpY2UsIG5vdCB0aGUgbm9kZSB3aXRoIHRoZQorCSAqIGRtYS13aW5kb3cgcHJvcGVydHkKKwkgKi8KKwlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCXBjaWRuID0gUENJX0ROKGRuKTsKKwljZmdfYWRkciA9IHBjaWRuLT5lZWhfY29uZmlnX2FkZHI7CisJaWYgKHBjaWRuLT5lZWhfcGVfY29uZmlnX2FkZHIpCisJCWNmZ19hZGRyID0gcGNpZG4tPmVlaF9wZV9jb25maWdfYWRkcjsKKwlidWlkID0gcGNpZG4tPnBoYi0+YnVpZDsKKwlyZXQgPSBydGFzX2NhbGwoZGRyX2F2YWlsWzBdLCAzLCA1LCAodTMyICopcXVlcnksCisJCSAgY2ZnX2FkZHIsIEJVSURfSEkoYnVpZCksIEJVSURfTE8oYnVpZCkpOworCWRldl9pbmZvKCZkZXYtPmRldiwgImlibSxxdWVyeS1wZS1kbWEtd2luZG93cygleCkgJXggJXggJXgiCisJCSIgcmV0dXJuZWQgJWRcbiIsIGRkcl9hdmFpbFswXSwgY2ZnX2FkZHIsIEJVSURfSEkoYnVpZCksCisJCUJVSURfTE8oYnVpZCksIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjcmVhdGVfZGR3KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHUzMiAqZGRyX2F2YWlsLAorCQkJc3RydWN0IGRkd19jcmVhdGVfcmVzcG9uc2UgKmNyZWF0ZSwgaW50IHBhZ2Vfc2hpZnQsCisJCQlpbnQgd2luZG93X3NoaWZ0KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJc3RydWN0IHBjaV9kbiAqcGNpZG47CisJdTMyIGNmZ19hZGRyOworCXU2NCBidWlkOworCWludCByZXQ7CisKKwkvKgorCSAqIEdldCB0aGUgY29uZmlnIGFkZHJlc3MgYW5kIHBoYiBidWlkIG9mIHRoZSBQRSB3aW5kb3cuCisJICogUmVseSBvbiBlZWggdG8gcmV0cmlldmUgdGhpcyBmb3IgdXMuCisJICogUmV0cmlldmUgdGhlbSBmcm9tIHRoZSBwY2kgZGV2aWNlLCBub3QgdGhlIG5vZGUgd2l0aCB0aGUKKwkgKiBkbWEtd2luZG93IHByb3BlcnR5CisJICovCisJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwlwY2lkbiA9IFBDSV9ETihkbik7CisJY2ZnX2FkZHIgPSBwY2lkbi0+ZWVoX2NvbmZpZ19hZGRyOworCWlmIChwY2lkbi0+ZWVoX3BlX2NvbmZpZ19hZGRyKQorCQljZmdfYWRkciA9IHBjaWRuLT5lZWhfcGVfY29uZmlnX2FkZHI7CisJYnVpZCA9IHBjaWRuLT5waGItPmJ1aWQ7CisKKwlkbyB7CisJCS8qIGV4dHJhIG91dHB1dHMgYXJlIExJT0JOIGFuZCBkbWEtYWRkciAoaGksIGxvKSAqLworCQlyZXQgPSBydGFzX2NhbGwoZGRyX2F2YWlsWzFdLCA1LCA0LCAodTMyICopY3JlYXRlLCBjZmdfYWRkciwKKwkJCQlCVUlEX0hJKGJ1aWQpLCBCVUlEX0xPKGJ1aWQpLCBwYWdlX3NoaWZ0LCB3aW5kb3dfc2hpZnQpOworCX0gd2hpbGUgKHJ0YXNfYnVzeV9kZWxheShyZXQpKTsKKwlkZXZfaW5mbygmZGV2LT5kZXYsCisJCSJpYm0sY3JlYXRlLXBlLWRtYS13aW5kb3coJXgpICV4ICV4ICV4ICV4ICV4IHJldHVybmVkICVkICIKKwkJIihsaW9ibiA9IDB4JXggc3RhcnRpbmcgYWRkciA9ICV4ICV4KVxuIiwgZGRyX2F2YWlsWzFdLAorCQkgY2ZnX2FkZHIsIEJVSURfSEkoYnVpZCksIEJVSURfTE8oYnVpZCksIHBhZ2Vfc2hpZnQsCisJCSB3aW5kb3dfc2hpZnQsIHJldCwgY3JlYXRlLT5saW9ibiwgY3JlYXRlLT5hZGRyX2hpLCBjcmVhdGUtPmFkZHJfbG8pOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElmIHRoZSBQRSBzdXBwb3J0cyBkeW5hbWljIGRtYSB3aW5kb3dzLCBhbmQgdGhlcmUgaXMgc3BhY2UgZm9yIGEgdGFibGUKKyAqIHRoYXQgY2FuIG1hcCBhbGwgcGFnZXMgaW4gYSBsaW5lYXIgb2Zmc2V0LCB0aGVuIHNldHVwIHN1Y2ggYSB0YWJsZSwKKyAqIGFuZCByZWNvcmQgdGhlIGRtYS1vZmZzZXQgaW4gdGhlIHN0cnVjdCBkZXZpY2UuCisgKgorICogZGV2OiB0aGUgcGNpIGRldmljZSB3ZSBhcmUgY2hlY2tpbmcKKyAqIHBkbjogdGhlIHBhcmVudCBwZSBub2RlIHdpdGggdGhlIGlibSxkbWFfd2luZG93IHByb3BlcnR5CisgKiBGdXR1cmU6IGFsc28gY2hlY2sgaWYgd2UgY2FuIHJlbWFwIHRoZSBiYXNlIHdpbmRvdyBmb3Igb3VyIGJhc2UgcGFnZSBzaXplCisgKgorICogcmV0dXJucyB0aGUgZG1hIG9mZnNldCBmb3IgdXNlIGJ5IGRtYV9zZXRfbWFzaworICovCitzdGF0aWMgdTY0IGVuYWJsZV9kZHcoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpwZG4pCit7CisJaW50IGxlbiwgcmV0OworCXN0cnVjdCBkZHdfcXVlcnlfcmVzcG9uc2UgcXVlcnk7CisJc3RydWN0IGRkd19jcmVhdGVfcmVzcG9uc2UgY3JlYXRlOworCWludCBwYWdlX3NoaWZ0OworCXU2NCBkbWFfYWRkciwgbWF4X2FkZHI7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwljb25zdCB1MzIgKnVuaW5pdGlhbGl6ZWRfdmFyKGRkcl9hdmFpbCk7CisJc3RydWN0IGRpcmVjdF93aW5kb3cgKndpbmRvdzsKKwlzdHJ1Y3QgcHJvcGVydHkgKnVuaW5pdGlhbGl6ZWRfdmFyKHdpbjY0KTsKKwlzdHJ1Y3QgZHluYW1pY19kbWFfd2luZG93X3Byb3AgKmRkd3Byb3A7CisKKwltdXRleF9sb2NrKCZkaXJlY3Rfd2luZG93X2luaXRfbXV0ZXgpOworCisJZG1hX2FkZHIgPSBkdXBlX2Rkd19pZl9hbHJlYWR5X2NyZWF0ZWQoZGV2LCBwZG4pOworCWlmIChkbWFfYWRkciAhPSAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlkbWFfYWRkciA9IGR1cGVfZGR3X2lmX2tleGVjKGRldiwgcGRuKTsKKwlpZiAoZG1hX2FkZHIgIT0gMCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyoKKwkgKiB0aGUgaWJtLGRkdy1hcHBsaWNhYmxlIHByb3BlcnR5IGhvbGRzIHRoZSB0b2tlbnMgZm9yOgorCSAqIGlibSxxdWVyeS1wZS1kbWEtd2luZG93CisJICogaWJtLGNyZWF0ZS1wZS1kbWEtd2luZG93CisJICogaWJtLHJlbW92ZS1wZS1kbWEtd2luZG93CisJICogZm9yIHRoZSBnaXZlbiBub2RlIGluIHRoYXQgb3JkZXIuCisJICogdGhlIHByb3BlcnR5IGlzIGFjdHVhbGx5IGluIHRoZSBwYXJlbnQsIG5vdCB0aGUgUEUKKwkgKi8KKwlkZHJfYXZhaWwgPSBvZl9nZXRfcHJvcGVydHkocGRuLCAiaWJtLGRkdy1hcHBsaWNhYmxlIiwgJmxlbik7CisJaWYgKCFkZHJfYXZhaWwgfHwgbGVuIDwgMyAqIHNpemVvZih1MzIpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKyAgICAgICAvKgorCSAqIFF1ZXJ5IGlmIHRoZXJlIGlzIGEgc2Vjb25kIHdpbmRvdyBvZiBzaXplIHRvIG1hcCB0aGUKKwkgKiB3aG9sZSBwYXJ0aXRpb24uICBRdWVyeSByZXR1cm5zIG51bWJlciBvZiB3aW5kb3dzLCBsYXJnZXN0CisJICogYmxvY2sgYXNzaWduZWQgdG8gUEUgKHBhcnRpdGlvbiBlbmRwb2ludCksIGFuZCB0d28gYml0bWFza3MKKwkgKiBvZiBwYWdlIHNpemVzOiBzdXBwb3J0ZWQgYW5kIHN1cHBvcnRlZCBmb3IgbWlncmF0ZS1kbWEuCisJICovCisJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwlyZXQgPSBxdWVyeV9kZHcoZGV2LCBkZHJfYXZhaWwsICZxdWVyeSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAocXVlcnkud2luZG93c19hdmFpbGFibGUgPT0gMCkgeworCQkvKgorCQkgKiBubyBhZGRpdGlvbmFsIHdpbmRvd3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBkZXZpY2UuCisJCSAqIFdlIG1pZ2h0IGJlIGFibGUgdG8gcmVhbGxvY2F0ZSB0aGUgZXhpc3Rpbmcgd2luZG93LAorCQkgKiB0cmFkaW5nIGluIGZvciBhIGxhcmdlciBwYWdlIHNpemUuCisJCSAqLworCQlkZXZfZGJnKCZkZXYtPmRldiwgIm5vIGZyZWUgZHluYW1pYyB3aW5kb3dzIik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJaWYgKHF1ZXJ5LnBhZ2Vfc2l6ZSAmIDQpIHsKKwkJcGFnZV9zaGlmdCA9IDI0OyAvKiAxNk1CICovCisJfSBlbHNlIGlmIChxdWVyeS5wYWdlX3NpemUgJiAyKSB7CisJCXBhZ2Vfc2hpZnQgPSAxNjsgLyogNjRrQiAqLworCX0gZWxzZSBpZiAocXVlcnkucGFnZV9zaXplICYgMSkgeworCQlwYWdlX3NoaWZ0ID0gMTI7IC8qIDRrQiAqLworCX0gZWxzZSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAibm8gc3VwcG9ydGVkIGRpcmVjdCBwYWdlIHNpemUgaW4gbWFzayAleCIsCisJCQkgIHF1ZXJ5LnBhZ2Vfc2l6ZSk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJLyogdmVyaWZ5IHRoZSB3aW5kb3cgKiBudW1iZXIgb2YgcHRlcyB3aWxsIG1hcCB0aGUgcGFydGl0aW9uICovCisJLyogY2hlY2sgbGFyZ2VzdCBibG9jayAqIHBhZ2Ugc2l6ZSA+IG1heCBtZW1vcnkgaG90cGx1ZyBhZGRyICovCisJbWF4X2FkZHIgPSBtZW1vcnlfaG90cGx1Z19tYXgoKTsKKwlpZiAocXVlcnkubGFyZ2VzdF9hdmFpbGFibGVfYmxvY2sgPCAobWF4X2FkZHIgPj4gcGFnZV9zaGlmdCkpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJjYW4ndCBtYXAgcGFydGl0b24gbWF4IDB4JWxseCB3aXRoICV1ICIKKwkJCSAgIiVsbHUtc2l6ZWQgcGFnZXNcbiIsIG1heF9hZGRyLCAgcXVlcnkubGFyZ2VzdF9hdmFpbGFibGVfYmxvY2ssCisJCQkgIDFVTEwgPDwgcGFnZV9zaGlmdCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJbGVuID0gb3JkZXJfYmFzZV8yKG1heF9hZGRyKTsKKwl3aW42NCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSksIEdGUF9LRVJORUwpOworCWlmICghd2luNjQpIHsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJImNvdWxkbid0IGFsbG9jYXRlIHByb3BlcnR5IGZvciA2NGJpdCBkbWEgd2luZG93XG4iKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwl3aW42NC0+bmFtZSA9IGtzdHJkdXAoRElSRUNUNjRfUFJPUE5BTUUsIEdGUF9LRVJORUwpOworCXdpbjY0LT52YWx1ZSA9IGRkd3Byb3AgPSBrbWFsbG9jKHNpemVvZigqZGR3cHJvcCksIEdGUF9LRVJORUwpOworCWlmICghd2luNjQtPm5hbWUgfHwgIXdpbjY0LT52YWx1ZSkgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkiY291bGRuJ3QgYWxsb2NhdGUgcHJvcGVydHkgbmFtZSBhbmQgdmFsdWVcbiIpOworCQlnb3RvIG91dF9mcmVlX3Byb3A7CisJfQorCisJcmV0ID0gY3JlYXRlX2RkdyhkZXYsIGRkcl9hdmFpbCwgJmNyZWF0ZSwgcGFnZV9zaGlmdCwgbGVuKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0X2ZyZWVfcHJvcDsKKworCWRkd3Byb3AtPmxpb2JuID0gY3B1X3RvX2JlMzIoY3JlYXRlLmxpb2JuKTsKKwlkZHdwcm9wLT5kbWFfYmFzZSA9IGNwdV90b19iZTY0KG9mX3JlYWRfbnVtYmVyKCZjcmVhdGUuYWRkcl9oaSwgMikpOworCWRkd3Byb3AtPnRjZV9zaGlmdCA9IGNwdV90b19iZTMyKHBhZ2Vfc2hpZnQpOworCWRkd3Byb3AtPndpbmRvd19zaGlmdCA9IGNwdV90b19iZTMyKGxlbik7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgImNyZWF0ZWQgdGNlIHRhYmxlIExJT0JOIDB4JXggZm9yICVzXG4iLAorCQkgIGNyZWF0ZS5saW9ibiwgZG4tPmZ1bGxfbmFtZSk7CisKKwl3aW5kb3cgPSBremFsbG9jKHNpemVvZigqd2luZG93KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3aW5kb3cpCisJCWdvdG8gb3V0X2NsZWFyX3dpbmRvdzsKKworCXJldCA9IHdhbGtfc3lzdGVtX3JhbV9yYW5nZSgwLCBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpID4+IFBBR0VfU0hJRlQsCisJCQl3aW42NC0+dmFsdWUsIHRjZV9zZXRyYW5nZV9tdWx0aV9wU2VyaWVzTFBfd2Fsayk7CisJaWYgKHJldCkgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIGRpcmVjdCB3aW5kb3cgZm9yICVzOiAlZFxuIiwKKwkJCSBkbi0+ZnVsbF9uYW1lLCByZXQpOworCQlnb3RvIG91dF9jbGVhcl93aW5kb3c7CisJfQorCisJcmV0ID0gcHJvbV9hZGRfcHJvcGVydHkocGRuLCB3aW42NCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byBhZGQgZG1hIHdpbmRvdyBwcm9wZXJ0eSBmb3IgJXM6ICVkIiwKKwkJCSBwZG4tPmZ1bGxfbmFtZSwgcmV0KTsKKwkJZ290byBvdXRfY2xlYXJfd2luZG93OworCX0KKworCXdpbmRvdy0+ZGV2aWNlID0gcGRuOworCXdpbmRvdy0+cHJvcCA9IGRkd3Byb3A7CisJc3Bpbl9sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CisJbGlzdF9hZGQoJndpbmRvdy0+bGlzdCwgJmRpcmVjdF93aW5kb3dfbGlzdCk7CisJc3Bpbl91bmxvY2soJmRpcmVjdF93aW5kb3dfbGlzdF9sb2NrKTsKKworCWRtYV9hZGRyID0gb2ZfcmVhZF9udW1iZXIoJmNyZWF0ZS5hZGRyX2hpLCAyKTsKKwlnb3RvIG91dF91bmxvY2s7CisKK291dF9jbGVhcl93aW5kb3c6CisJcmVtb3ZlX2RkdyhwZG4pOworCitvdXRfZnJlZV9wcm9wOgorCWtmcmVlKHdpbjY0LT5uYW1lKTsKKwlrZnJlZSh3aW42NC0+dmFsdWUpOworCWtmcmVlKHdpbjY0KTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmRpcmVjdF93aW5kb3dfaW5pdF9tdXRleCk7CisJcmV0dXJuIGRtYV9hZGRyOworfQorCiBzdGF0aWMgdm9pZCBwY2lfZG1hX2Rldl9zZXR1cF9wU2VyaWVzTFAoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBkbiwgKmRuOwpAQCAtNTQxLDIzICsxMDEyLDEzNyBAQAogCiAJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJmRldi0+ZGV2LCBwY2ktPmlvbW11X3RhYmxlKTsKIH0KKworc3RhdGljIGludCBkbWFfc2V0X21hc2tfcFNlcmllc0xQKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQoreworCWJvb2wgZGR3X2VuYWJsZWQgPSBmYWxzZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBkbiwgKmRuOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCWNvbnN0IHZvaWQgKmRtYV93aW5kb3cgPSBOVUxMOworCXU2NCBkbWFfb2Zmc2V0OworCisJaWYgKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgZG1hX21hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIG9ubHkgYXR0ZW1wdCB0byB1c2UgYSBuZXcgd2luZG93IGlmIDY0LWJpdCBETUEgaXMgcmVxdWVzdGVkICovCisJaWYgKCFkaXNhYmxlX2RkdyAmJiBkbWFfbWFzayA9PSBETUFfQklUX01BU0soNjQpKSB7CisJCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwkJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CisJCWRldl9kYmcoZGV2LCAibm9kZSBpcyAlc1xuIiwgZG4tPmZ1bGxfbmFtZSk7CisKKwkJLyoKKwkJICogdGhlIGRldmljZSB0cmVlIG1pZ2h0IGNvbnRhaW4gdGhlIGRtYS13aW5kb3cgcHJvcGVydGllcworCQkgKiBwZXItZGV2aWNlIGFuZCBub3QgbmVjY2VzYXJpbHkgZm9yIHRoZSBidXMuIFNvIHdlIG5lZWQgdG8KKwkJICogc2VhcmNoIHVwd2FyZHMgaW4gdGhlIHRyZWUgdW50aWwgd2UgZWl0aGVyIGhpdCBhIGRtYS13aW5kb3cKKwkJICogcHJvcGVydHksIE9SIGZpbmQgYSBwYXJlbnQgd2l0aCBhIHRhYmxlIGFscmVhZHkgYWxsb2NhdGVkLgorCQkgKi8KKwkJZm9yIChwZG4gPSBkbjsgcGRuICYmIFBDSV9ETihwZG4pICYmICFQQ0lfRE4ocGRuKS0+aW9tbXVfdGFibGU7CisJCQkJcGRuID0gcGRuLT5wYXJlbnQpIHsKKwkJCWRtYV93aW5kb3cgPSBvZl9nZXRfcHJvcGVydHkocGRuLCAiaWJtLGRtYS13aW5kb3ciLCBOVUxMKTsKKwkJCWlmIChkbWFfd2luZG93KQorCQkJCWJyZWFrOworCQl9CisJCWlmIChwZG4gJiYgUENJX0ROKHBkbikpIHsKKwkJCWRtYV9vZmZzZXQgPSBlbmFibGVfZGR3KHBkZXYsIHBkbik7CisJCQlpZiAoZG1hX29mZnNldCAhPSAwKSB7CisJCQkJZGV2X2luZm8oZGV2LCAiVXNpbmcgNjQtYml0IGRpcmVjdCBETUEgYXQgb2Zmc2V0ICVsbHhcbiIsIGRtYV9vZmZzZXQpOworCQkJCXNldF9kbWFfb2Zmc2V0KGRldiwgZG1hX29mZnNldCk7CisJCQkJc2V0X2RtYV9vcHMoZGV2LCAmZG1hX2RpcmVjdF9vcHMpOworCQkJCWRkd19lbmFibGVkID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCS8qIGZhbGwtdGhyb3VnaCB0byBpb21tdSBvcHMgKi8KKwlpZiAoIWRkd19lbmFibGVkKSB7CisJCWRldl9pbmZvKGRldiwgIlVzaW5nIDMyLWJpdCBETUEgdmlhIGlvbW11XG4iKTsKKwkJc2V0X2RtYV9vcHMoZGV2LCAmZG1hX2lvbW11X29wcyk7CisJfQorCisJKmRldi0+ZG1hX21hc2sgPSBkbWFfbWFzazsKKwlyZXR1cm4gMDsKK30KKwogI2Vsc2UgIC8qIENPTkZJR19QQ0kgKi8KICNkZWZpbmUgcGNpX2RtYV9idXNfc2V0dXBfcFNlcmllcwlOVUxMCiAjZGVmaW5lIHBjaV9kbWFfZGV2X3NldHVwX3BTZXJpZXMJTlVMTAogI2RlZmluZSBwY2lfZG1hX2J1c19zZXR1cF9wU2VyaWVzTFAJTlVMTAogI2RlZmluZSBwY2lfZG1hX2Rldl9zZXR1cF9wU2VyaWVzTFAJTlVMTAorI2RlZmluZSBkbWFfc2V0X21hc2tfcFNlcmllc0xQCQlOVUxMCiAjZW5kaWYgLyogIUNPTkZJR19QQ0kgKi8KIAorc3RhdGljIGludCBpb21tdV9tZW1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRpcmVjdF93aW5kb3cgKndpbmRvdzsKKwlzdHJ1Y3QgbWVtb3J5X25vdGlmeSAqYXJnID0gZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fR09JTkdfT05MSU5FOgorCQlzcGluX2xvY2soJmRpcmVjdF93aW5kb3dfbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW5kb3csICZkaXJlY3Rfd2luZG93X2xpc3QsIGxpc3QpIHsKKwkJCXJldCB8PSB0Y2Vfc2V0cmFuZ2VfbXVsdGlfcFNlcmllc0xQKGFyZy0+c3RhcnRfcGZuLAorCQkJCQlhcmctPm5yX3BhZ2VzLCB3aW5kb3ctPnByb3ApOworCQkJLyogWFhYIGxvZyBlcnJvciAqLworCQl9CisJCXNwaW5fdW5sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CisJCWJyZWFrOworCWNhc2UgTUVNX0NBTkNFTF9PTkxJTkU6CisJY2FzZSBNRU1fT0ZGTElORToKKwkJc3Bpbl9sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCAmZGlyZWN0X3dpbmRvd19saXN0LCBsaXN0KSB7CisJCQlyZXQgfD0gdGNlX2NsZWFycmFuZ2VfbXVsdGlfcFNlcmllc0xQKGFyZy0+c3RhcnRfcGZuLAorCQkJCQlhcmctPm5yX3BhZ2VzLCB3aW5kb3ctPnByb3ApOworCQkJLyogWFhYIGxvZyBlcnJvciAqLworCQl9CisJCXNwaW5fdW5sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAocmV0ICYmIGFjdGlvbiAhPSBNRU1fQ0FOQ0VMX09OTElORSkKKwkJcmV0dXJuIE5PVElGWV9CQUQ7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGlvbW11X21lbV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGlvbW11X21lbV9ub3RpZmllciwKK307CisKIHN0YXRpYyBpbnQgaW9tbXVfcmVjb25maWdfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKm5vZGUpCiB7CiAJaW50IGVyciA9IE5PVElGWV9PSzsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gbm9kZTsKIAlzdHJ1Y3QgcGNpX2RuICpwY2kgPSBQQ0lfRE4obnApOworCXN0cnVjdCBkaXJlY3Rfd2luZG93ICp3aW5kb3c7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgUFNFUklFU19SRUNPTkZJR19SRU1PVkU6CiAJCWlmIChwY2kgJiYgcGNpLT5pb21tdV90YWJsZSkKIAkJCWlvbW11X2ZyZWVfdGFibGUocGNpLT5pb21tdV90YWJsZSwgbnAtPmZ1bGxfbmFtZSk7CisKKwkJc3Bpbl9sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCAmZGlyZWN0X3dpbmRvd19saXN0LCBsaXN0KSB7CisJCQlpZiAod2luZG93LT5kZXZpY2UgPT0gbnApIHsKKwkJCQlsaXN0X2RlbCgmd2luZG93LT5saXN0KTsKKwkJCQlrZnJlZSh3aW5kb3cpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CisKKwkJLyoKKwkJICogQmVjYXVzZSB0aGUgbm90aWZpZXIgcnVucyBhZnRlciBpc29sYXRpb24gb2YgdGhlCisJCSAqIHNsb3QsIHdlIGFyZSBndWFyYW50ZWVkIGFueSBETUEgd2luZG93IGhhcyBhbHJlYWR5CisJCSAqIGJlZW4gcmV2b2tlZCBhbmQgdGhlIFRDRXMgaGF2ZSBiZWVuIG1hcmtlZCBpbnZhbGlkLAorCQkgKiBzbyB3ZSBkb24ndCBuZWVkIGEgY2FsbCB0byByZW1vdmVfZGR3KG5wKS4gSG93ZXZlciwKKwkJICogaWYgYW4gYWRkaXRpb25hbCBub3RpZmllciBhY3Rpb24gaXMgYWRkZWQgYmVmb3JlIHRoZQorCQkgKiBpc29sYXRlIGNhbGwsIHdlIHNob3VsZCB1cGRhdGUgdGhpcyBjb2RlIGZvcgorCQkgKiBjb21wbGV0ZW5lc3Mgd2l0aCBzdWNoIGEgY2FsbC4KKwkJICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IE5PVElGWV9ET05FOwpAQCAtNTg3LDYgKzExNzIsNyBAQAogCQlwcGNfbWQudGNlX2dldCAgID0gdGNlX2dldF9wU2VyaWVzTFA7CiAJCXBwY19tZC5wY2lfZG1hX2J1c19zZXR1cCA9IHBjaV9kbWFfYnVzX3NldHVwX3BTZXJpZXNMUDsKIAkJcHBjX21kLnBjaV9kbWFfZGV2X3NldHVwID0gcGNpX2RtYV9kZXZfc2V0dXBfcFNlcmllc0xQOworCQlwcGNfbWQuZG1hX3NldF9tYXNrID0gZG1hX3NldF9tYXNrX3BTZXJpZXNMUDsKIAl9IGVsc2UgewogCQlwcGNfbWQudGNlX2J1aWxkID0gdGNlX2J1aWxkX3BTZXJpZXM7CiAJCXBwY19tZC50Y2VfZnJlZSAgPSB0Y2VfZnJlZV9wU2VyaWVzOwpAQCAtNTk3LDYgKzExODMsNyBAQAogCiAKIAlwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3JlZ2lzdGVyKCZpb21tdV9yZWNvbmZpZ19uYik7CisJcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCZpb21tdV9tZW1fbmIpOwogCiAJc2V0X3BjaV9kbWFfb3BzKCZkbWFfaW9tbXVfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwppbmRleCAxMTY0YzM0Li4xOGFjODAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCkBAIC05Myw4ICs5MywxOCBAQAogCWlmICghcGRuKQogCQlyZXR1cm47CiAKLQlpZiAocnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfRk4sIDApICE9IDApCi0JCXByX2RlYnVnKCJydGFzX21zaTogU2V0dGluZyBNU0lzIHRvIDAgZmFpbGVkIVxuIik7CisJLyoKKwkgKiBkaXNhYmxpbmcgTVNJIHdpdGggdGhlIGV4cGxpY2l0IGludGVyZmFjZSBhbHNvIGRpc2FibGVzIE1TSS1YCisJICovCisJaWYgKHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX01TSV9GTiwgMCkgIT0gMCkgeworCQkvKiAKKwkJICogbWF5IGhhdmUgZmFpbGVkIGJlY2F1c2UgZXhwbGljaXQgaW50ZXJmYWNlIGlzIG5vdAorCQkgKiBwcmVzZW50CisJCSAqLworCQlpZiAocnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfRk4sIDApICE9IDApIHsKKwkJCXByX2RlYnVnKCJydGFzX21zaTogU2V0dGluZyBNU0lzIHRvIDAgZmFpbGVkIVxuIik7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBpbnQgcnRhc19xdWVyeV9pcnFfbnVtYmVyKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IG9mZnNldCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9udnJhbS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL252cmFtLmMKaW5kZXggN2U4MjhiYS4uNDE5NzA3YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL252cmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL252cmFtLmMKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rbXNnX2R1bXAuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9udnJhbS5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CkBAIC0zMCwxNyArMzIsNTQgQEAKIHN0YXRpYyBjaGFyIG52cmFtX2J1ZltOVlJXX0NOVF07CS8qIGFzc3VtZSB0aGlzIGlzIGluIHRoZSBmaXJzdCA0R0IgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobnZyYW1fbG9jayk7CiAKLXN0YXRpYyBsb25nIG52cmFtX2Vycm9yX2xvZ19pbmRleCA9IC0xOwotc3RhdGljIGxvbmcgbnZyYW1fZXJyb3JfbG9nX3NpemUgPSAwOwotCiBzdHJ1Y3QgZXJyX2xvZ19pbmZvIHsKIAlpbnQgZXJyb3JfdHlwZTsKIAl1bnNpZ25lZCBpbnQgc2VxX251bTsKIH07Ci0jZGVmaW5lIE5WUkFNX01BWF9SRVEJCTIwNzkKLSNkZWZpbmUgTlZSQU1fTUlOX1JFUQkJMTA1NQogCi0jZGVmaW5lIE5WUkFNX0xPR19QQVJUX05BTUUJImlibSxydGFzLWxvZyIKK3N0cnVjdCBudnJhbV9vc19wYXJ0aXRpb24geworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHJlcV9zaXplOwkvKiBkZXNpcmVkIHNpemUsIGluIGJ5dGVzICovCisJaW50IG1pbl9zaXplOwkvKiBtaW5pbXVtIGFjY2VwdGFibGUgc2l6ZSAoMCBtZWFucyByZXFfc2l6ZSkgKi8KKwlsb25nIHNpemU7CS8qIHNpemUgb2YgZGF0YSBwb3J0aW9uIChleGNsdWRpbmcgZXJyX2xvZ19pbmZvKSAqLworCWxvbmcgaW5kZXg7CS8qIG9mZnNldCBvZiBkYXRhIHBvcnRpb24gb2YgcGFydGl0aW9uICovCit9OworCitzdGF0aWMgc3RydWN0IG52cmFtX29zX3BhcnRpdGlvbiBydGFzX2xvZ19wYXJ0aXRpb24gPSB7CisJLm5hbWUgPSAiaWJtLHJ0YXMtbG9nIiwKKwkucmVxX3NpemUgPSAyMDc5LAorCS5taW5fc2l6ZSA9IDEwNTUsCisJLmluZGV4ID0gLTEKK307CisKK3N0YXRpYyBzdHJ1Y3QgbnZyYW1fb3NfcGFydGl0aW9uIG9vcHNfbG9nX3BhcnRpdGlvbiA9IHsKKwkubmFtZSA9ICJsbngsb29wcy1sb2ciLAorCS5yZXFfc2l6ZSA9IDQwMDAsCisJLm1pbl9zaXplID0gMjAwMCwKKwkuaW5kZXggPSAtMQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnBzZXJpZXNfbnZyYW1fb3NfcGFydGl0aW9uc1tdID0geworCSJpYm0scnRhcy1sb2ciLAorCSJsbngsb29wcy1sb2ciLAorCU5VTEwKK307CisKK3N0YXRpYyB2b2lkIG9vcHNfdG9fbnZyYW0oc3RydWN0IGttc2dfZHVtcGVyICpkdW1wZXIsCisJCWVudW0ga21zZ19kdW1wX3JlYXNvbiByZWFzb24sCisJCWNvbnN0IGNoYXIgKm9sZF9tc2dzLCB1bnNpZ25lZCBsb25nIG9sZF9sZW4sCisJCWNvbnN0IGNoYXIgKm5ld19tc2dzLCB1bnNpZ25lZCBsb25nIG5ld19sZW4pOworCitzdGF0aWMgc3RydWN0IGttc2dfZHVtcGVyIG52cmFtX2ttc2dfZHVtcGVyID0geworCS5kdW1wID0gb29wc190b19udnJhbQorfTsKKworLyogU2VlIGNsb2JiZXJpbmdfdW5yZWFkX3J0YXNfZXZlbnQoKSAqLworI2RlZmluZSBOVlJBTV9SVEFTX1JFQURfVElNRU9VVCA1CQkvKiBzZWNvbmRzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3VucmVhZF9ydGFzX2V2ZW50OwkvKiB0aW1lc3RhbXAgKi8KKworLyogV2UgcHJlYWxsb2NhdGUgb29wc19idWYgZHVyaW5nIGluaXQgdG8gYXZvaWQga21hbGxvYyBkdXJpbmcgb29wcy9wYW5pYy4gKi8KK3N0YXRpYyBjaGFyICpvb3BzX2J1ZjsKIAogc3RhdGljIHNzaXplX3QgcFNlcmllc19udnJhbV9yZWFkKGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmluZGV4KQogewpAQCAtMTM0LDcgKzE3Myw3IEBACiB9CiAKIAotLyogbnZyYW1fd3JpdGVfZXJyb3JfbG9nCisvKiBudnJhbV93cml0ZV9vc19wYXJ0aXRpb24sIG52cmFtX3dyaXRlX2Vycm9yX2xvZwogICoKICAqIFdlIG5lZWQgdG8gYnVmZmVyIHRoZSBlcnJvciBsb2dzIGludG8gbnZyYW0gdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZQogICogdGhlIGZhaWx1cmUgaW5mb3JtYXRpb24gdG8gZGVjb2RlLiAgSWYgd2UgaGF2ZSBhIHNldmVyZSBlcnJvciB0aGVyZQpAQCAtMTU2LDQ4ICsxOTUsNTggQEAKICAqIFRoZSAnZGF0YScgc2VjdGlvbiB3b3VsZCBsb29rIGxpa2UgKGluIGJ5dGVzKToKICAqICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgKiB8IGV2ZW50X2xvZ2dlZCB8IHNlcXVlbmNlICMgfCBlcnJvciBsb2cgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogfDAgICAgICAgICAgICAzfDQgICAgICAgICAgN3w4ICAgICAgICAgICAgbnZyYW1fZXJyb3JfbG9nX3NpemUtMXwKKyAqIHwwICAgICAgICAgICAgM3w0ICAgICAgICAgIDd8OCAgICAgICAgICAgICAgICAgIGVycm9yX2xvZ19zaXplLTF8CiAgKiArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICoKICAqIGV2ZW50X2xvZ2dlZDogMCBpZiBldmVudCBoYXMgbm90IGJlZW4gbG9nZ2VkIHRvIHN5c2xvZywgMSBpZiBpdCBoYXMKICAqIHNlcXVlbmNlICM6IFRoZSB1bmlxdWUgc2VxdWVuY2UgIyBmb3IgZWFjaCBldmVudC4gKHVudGlsIGl0IHdyYXBzKQogICogZXJyb3IgbG9nOiBUaGUgZXJyb3IgbG9nIGZyb20gZXZlbnRfc2NhbgogICovCi1pbnQgbnZyYW1fd3JpdGVfZXJyb3JfbG9nKGNoYXIgKiBidWZmLCBpbnQgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXJyX3R5cGUsIHVuc2lnbmVkIGludCBlcnJvcl9sb2dfY250KQoraW50IG52cmFtX3dyaXRlX29zX3BhcnRpdGlvbihzdHJ1Y3QgbnZyYW1fb3NfcGFydGl0aW9uICpwYXJ0LCBjaGFyICogYnVmZiwKKwkJaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IGVycl90eXBlLCB1bnNpZ25lZCBpbnQgZXJyb3JfbG9nX2NudCkKIHsKIAlpbnQgcmM7CiAJbG9mZl90IHRtcF9pbmRleDsKIAlzdHJ1Y3QgZXJyX2xvZ19pbmZvIGluZm87CiAJCi0JaWYgKG52cmFtX2Vycm9yX2xvZ19pbmRleCA9PSAtMSkgeworCWlmIChwYXJ0LT5pbmRleCA9PSAtMSkgewogCQlyZXR1cm4gLUVTUElQRTsKIAl9CiAKLQlpZiAobGVuZ3RoID4gbnZyYW1fZXJyb3JfbG9nX3NpemUpIHsKLQkJbGVuZ3RoID0gbnZyYW1fZXJyb3JfbG9nX3NpemU7CisJaWYgKGxlbmd0aCA+IHBhcnQtPnNpemUpIHsKKwkJbGVuZ3RoID0gcGFydC0+c2l6ZTsKIAl9CiAKIAlpbmZvLmVycm9yX3R5cGUgPSBlcnJfdHlwZTsKIAlpbmZvLnNlcV9udW0gPSBlcnJvcl9sb2dfY250OwogCi0JdG1wX2luZGV4ID0gbnZyYW1fZXJyb3JfbG9nX2luZGV4OworCXRtcF9pbmRleCA9IHBhcnQtPmluZGV4OwogCiAJcmMgPSBwcGNfbWQubnZyYW1fd3JpdGUoKGNoYXIgKikmaW5mbywgc2l6ZW9mKHN0cnVjdCBlcnJfbG9nX2luZm8pLCAmdG1wX2luZGV4KTsKIAlpZiAocmMgPD0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX3dyaXRlX2Vycm9yX2xvZzogRmFpbGVkIG52cmFtX3dyaXRlICglZClcbiIsIHJjKTsKKwkJcHJfZXJyKCIlczogRmFpbGVkIG52cmFtX3dyaXRlICglZClcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJcmMgPSBwcGNfbWQubnZyYW1fd3JpdGUoYnVmZiwgbGVuZ3RoLCAmdG1wX2luZGV4KTsKIAlpZiAocmMgPD0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX3dyaXRlX2Vycm9yX2xvZzogRmFpbGVkIG52cmFtX3dyaXRlICglZClcbiIsIHJjKTsKKwkJcHJfZXJyKCIlczogRmFpbGVkIG52cmFtX3dyaXRlICglZClcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCQogCXJldHVybiAwOwogfQogCitpbnQgbnZyYW1fd3JpdGVfZXJyb3JfbG9nKGNoYXIgKiBidWZmLCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXJyX3R5cGUsIHVuc2lnbmVkIGludCBlcnJvcl9sb2dfY250KQoreworCWludCByYyA9IG52cmFtX3dyaXRlX29zX3BhcnRpdGlvbigmcnRhc19sb2dfcGFydGl0aW9uLCBidWZmLCBsZW5ndGgsCisJCQkJCQllcnJfdHlwZSwgZXJyb3JfbG9nX2NudCk7CisJaWYgKCFyYykKKwkJbGFzdF91bnJlYWRfcnRhc19ldmVudCA9IGdldF9zZWNvbmRzKCk7CisJcmV0dXJuIHJjOworfQorCiAvKiBudnJhbV9yZWFkX2Vycm9yX2xvZwogICoKICAqIFJlYWRzIG52cmFtIGZvciBlcnJvciBsb2cgZm9yIGF0IG1vc3QgJ2xlbmd0aCcKQEAgLTIwOSwxMyArMjU4LDEzIEBACiAJbG9mZl90IHRtcF9pbmRleDsKIAlzdHJ1Y3QgZXJyX2xvZ19pbmZvIGluZm87CiAJCi0JaWYgKG52cmFtX2Vycm9yX2xvZ19pbmRleCA9PSAtMSkKKwlpZiAocnRhc19sb2dfcGFydGl0aW9uLmluZGV4ID09IC0xKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAobGVuZ3RoID4gbnZyYW1fZXJyb3JfbG9nX3NpemUpCi0JCWxlbmd0aCA9IG52cmFtX2Vycm9yX2xvZ19zaXplOworCWlmIChsZW5ndGggPiBydGFzX2xvZ19wYXJ0aXRpb24uc2l6ZSkKKwkJbGVuZ3RoID0gcnRhc19sb2dfcGFydGl0aW9uLnNpemU7CiAKLQl0bXBfaW5kZXggPSBudnJhbV9lcnJvcl9sb2dfaW5kZXg7CisJdG1wX2luZGV4ID0gcnRhc19sb2dfcGFydGl0aW9uLmluZGV4OwogCiAJcmMgPSBwcGNfbWQubnZyYW1fcmVhZCgoY2hhciAqKSZpbmZvLCBzaXplb2Yoc3RydWN0IGVycl9sb2dfaW5mbyksICZ0bXBfaW5kZXgpOwogCWlmIChyYyA8PSAwKSB7CkBAIC0yNDQsMzcgKzI5Myw0MCBAQAogCWludCBjbGVhcl93b3JkID0gRVJSX0ZMQUdfQUxSRUFEWV9MT0dHRUQ7CiAJaW50IHJjOwogCi0JaWYgKG52cmFtX2Vycm9yX2xvZ19pbmRleCA9PSAtMSkKKwlpZiAocnRhc19sb2dfcGFydGl0aW9uLmluZGV4ID09IC0xKQogCQlyZXR1cm4gLTE7CiAKLQl0bXBfaW5kZXggPSBudnJhbV9lcnJvcl9sb2dfaW5kZXg7CisJdG1wX2luZGV4ID0gcnRhc19sb2dfcGFydGl0aW9uLmluZGV4OwogCQogCXJjID0gcHBjX21kLm52cmFtX3dyaXRlKChjaGFyICopJmNsZWFyX3dvcmQsIHNpemVvZihpbnQpLCAmdG1wX2luZGV4KTsKIAlpZiAocmMgPD0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NsZWFyX2Vycm9yX2xvZzogRmFpbGVkIG52cmFtX3dyaXRlICglZClcbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KKwlsYXN0X3VucmVhZF9ydGFzX2V2ZW50ID0gMDsKIAogCXJldHVybiAwOwogfQogCi0vKiBwc2VyaWVzX252cmFtX2luaXRfbG9nX3BhcnRpdGlvbgorLyogcHNlcmllc19udnJhbV9pbml0X29zX3BhcnRpdGlvbgogICoKLSAqIFRoaXMgd2lsbCBzZXR1cCB0aGUgcGFydGl0aW9uIHdlIG5lZWQgZm9yIGJ1ZmZlcmluZyB0aGUKLSAqIGVycm9yIGxvZ3MgYW5kIGNsZWFudXAgcGFydGl0aW9ucyBpZiBuZWVkZWQuCisgKiBUaGlzIHNldHMgdXAgYSBwYXJ0aXRpb24gd2l0aCBhbiAiT1MiIHNpZ25hdHVyZS4KICAqCiAgKiBUaGUgZ2VuZXJhbCBzdHJhdGVneSBpcyB0aGUgZm9sbG93aW5nOgotICogMS4pIElmIHRoZXJlIGlzIGxvZyBwYXJ0aXRpb24gbGFyZ2UgZW5vdWdoIHRoZW4gdXNlIGl0LgotICogMi4pIElmIHRoZXJlIGlzIG5vbmUgbGFyZ2UgZW5vdWdoLCBzZWFyY2gKLSAqIGZvciBhIGZyZWUgcGFydGl0aW9uIHRoYXQgaXMgbGFyZ2UgZW5vdWdoLgotICogMy4pIElmIHRoZXJlIGlzIG5vdCBhIGZyZWUgcGFydGl0aW9uIGxhcmdlIGVub3VnaCByZW1vdmUgCi0gKiBfYWxsXyBPUyBwYXJ0aXRpb25zIGFuZCBjb25zb2xpZGF0ZSB0aGUgc3BhY2UuCi0gKiA0LikgV2lsbCBmaXJzdCB0cnkgZ2V0dGluZyBhIGNodW5rIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBtYXhpbXVtCi0gKiBlcnJvciBsb2cgc2l6ZSAoTlZSQU1fTUFYX1JFUSkuCi0gKiA1LikgSWYgdGhlIG1heCBjaHVuayBjYW5ub3QgYmUgYWxsb2NhdGVkIHRoZW4gdHJ5IGZpbmRpbmcgYSBjaHVuawotICogdGhhdCB3aWxsIHNhdGlzZnkgdGhlIG1pbnVtIG5lZWRlZCAoTlZSQU1fTUlOX1JFUSkuCisgKiAxLikgSWYgYSBwYXJ0aXRpb24gd2l0aCB0aGUgaW5kaWNhdGVkIG5hbWUgYWxyZWFkeSBleGlzdHMuLi4KKyAqCS0gSWYgaXQncyBsYXJnZSBlbm91Z2gsIHVzZSBpdC4KKyAqCS0gT3RoZXJ3aXNlLCByZWN5Y2xlIGl0IGFuZCBrZWVwIGdvaW5nLgorICogMi4pIFNlYXJjaCBmb3IgYSBmcmVlIHBhcnRpdGlvbiB0aGF0IGlzIGxhcmdlIGVub3VnaC4KKyAqIDMuKSBJZiB0aGVyZSdzIG5vdCBhIGZyZWUgcGFydGl0aW9uIGxhcmdlIGVub3VnaCwgcmVjeWNsZSBhbnkgb2Jzb2xldGUKKyAqIE9TIHBhcnRpdGlvbnMgYW5kIHRyeSBhZ2Fpbi4KKyAqIDQuKSBXaWxsIGZpcnN0IHRyeSBnZXR0aW5nIGEgY2h1bmsgdGhhdCB3aWxsIHNhdGlzZnkgdGhlIHJlcXVlc3RlZCBzaXplLgorICogNS4pIElmIGEgY2h1bmsgb2YgdGhlIHJlcXVlc3RlZCBzaXplIGNhbm5vdCBiZSBhbGxvY2F0ZWQsIHRoZW4gdHJ5IGZpbmRpbmcKKyAqIGEgY2h1bmsgdGhhdCB3aWxsIHNhdGlzZnkgdGhlIG1pbnVtIG5lZWRlZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSAtMS4KICAqLwotc3RhdGljIGludCBfX2luaXQgcHNlcmllc19udnJhbV9pbml0X2xvZ19wYXJ0aXRpb24odm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfbnZyYW1faW5pdF9vc19wYXJ0aXRpb24oc3RydWN0IG52cmFtX29zX3BhcnRpdGlvbgorCQkJCQkJCQkJKnBhcnQpCiB7CiAJbG9mZl90IHA7CiAJaW50IHNpemU7CkBAIC0yODIsNDcgKzMzNCw3NiBAQAogCS8qIFNjYW4gbnZyYW0gZm9yIHBhcnRpdGlvbnMgKi8KIAludnJhbV9zY2FuX3BhcnRpdGlvbnMoKTsKIAotCS8qIExvb2tnIGZvciBvdXJzICovCi0JcCA9IG52cmFtX2ZpbmRfcGFydGl0aW9uKE5WUkFNX0xPR19QQVJUX05BTUUsIE5WUkFNX1NJR19PUywgJnNpemUpOworCS8qIExvb2sgZm9yIG91cnMgKi8KKwlwID0gbnZyYW1fZmluZF9wYXJ0aXRpb24ocGFydC0+bmFtZSwgTlZSQU1fU0lHX09TLCAmc2l6ZSk7CiAKIAkvKiBGb3VuZCBvbmUgYnV0IHRvbyBzbWFsbCwgcmVtb3ZlIGl0ICovCi0JaWYgKHAgJiYgc2l6ZSA8IE5WUkFNX01JTl9SRVEpIHsKLQkJcHJfaW5mbygibnZyYW06IEZvdW5kIHRvbyBzbWFsbCAiTlZSQU1fTE9HX1BBUlRfTkFNRSIgcGFydGl0aW9uIgotCQkJIixyZW1vdmluZyBpdC4uLiIpOwotCQludnJhbV9yZW1vdmVfcGFydGl0aW9uKE5WUkFNX0xPR19QQVJUX05BTUUsIE5WUkFNX1NJR19PUyk7CisJaWYgKHAgJiYgc2l6ZSA8IHBhcnQtPm1pbl9zaXplKSB7CisJCXByX2luZm8oIm52cmFtOiBGb3VuZCB0b28gc21hbGwgJXMgcGFydGl0aW9uLCIKKwkJCQkJIiByZW1vdmluZyBpdC4uLlxuIiwgcGFydC0+bmFtZSk7CisJCW52cmFtX3JlbW92ZV9wYXJ0aXRpb24ocGFydC0+bmFtZSwgTlZSQU1fU0lHX09TLCBOVUxMKTsKIAkJcCA9IDA7CiAJfQogCiAJLyogQ3JlYXRlIG9uZSBpZiB3ZSBkaWRuJ3QgZmluZCAqLwogCWlmICghcCkgewotCQlwID0gbnZyYW1fY3JlYXRlX3BhcnRpdGlvbihOVlJBTV9MT0dfUEFSVF9OQU1FLCBOVlJBTV9TSUdfT1MsCi0JCQkJCSAgIE5WUkFNX01BWF9SRVEsIE5WUkFNX01JTl9SRVEpOwotCQkvKiBObyByb29tIGZvciBpdCwgdHJ5IHRvIGdldCByaWQgb2YgYW55IE9TIHBhcnRpdGlvbgotCQkgKiBhbmQgdHJ5IGFnYWluCi0JCSAqLworCQlwID0gbnZyYW1fY3JlYXRlX3BhcnRpdGlvbihwYXJ0LT5uYW1lLCBOVlJBTV9TSUdfT1MsCisJCQkJCXBhcnQtPnJlcV9zaXplLCBwYXJ0LT5taW5fc2l6ZSk7CiAJCWlmIChwID09IC1FTk9TUEMpIHsKLQkJCXByX2luZm8oIm52cmFtOiBObyByb29tIHRvIGNyZWF0ZSAiTlZSQU1fTE9HX1BBUlRfTkFNRQotCQkJCSIgcGFydGl0aW9uLCBkZWxldGluZyBhbGwgT1MgcGFydGl0aW9ucy4uLiIpOwotCQkJbnZyYW1fcmVtb3ZlX3BhcnRpdGlvbihOVUxMLCBOVlJBTV9TSUdfT1MpOwotCQkJcCA9IG52cmFtX2NyZWF0ZV9wYXJ0aXRpb24oTlZSQU1fTE9HX1BBUlRfTkFNRSwKLQkJCQkJCSAgIE5WUkFNX1NJR19PUywgTlZSQU1fTUFYX1JFUSwKLQkJCQkJCSAgIE5WUkFNX01JTl9SRVEpOworCQkJcHJfaW5mbygibnZyYW06IE5vIHJvb20gdG8gY3JlYXRlICVzIHBhcnRpdGlvbiwgIgorCQkJCSJkZWxldGluZyBhbnkgb2Jzb2xldGUgT1MgcGFydGl0aW9ucy4uLlxuIiwKKwkJCQlwYXJ0LT5uYW1lKTsKKwkJCW52cmFtX3JlbW92ZV9wYXJ0aXRpb24oTlVMTCwgTlZSQU1fU0lHX09TLAorCQkJCQkJcHNlcmllc19udnJhbV9vc19wYXJ0aXRpb25zKTsKKwkJCXAgPSBudnJhbV9jcmVhdGVfcGFydGl0aW9uKHBhcnQtPm5hbWUsIE5WUkFNX1NJR19PUywKKwkJCQkJcGFydC0+cmVxX3NpemUsIHBhcnQtPm1pbl9zaXplKTsKIAkJfQogCX0KIAogCWlmIChwIDw9IDApIHsKLQkJcHJfZXJyKCJudnJhbTogRmFpbGVkIHRvIGZpbmQgb3IgY3JlYXRlICJOVlJBTV9MT0dfUEFSVF9OQU1FCi0JCSAgICAgICAiIHBhcnRpdGlvbiwgZXJyICVkXG4iLCAoaW50KXApOwotCQlyZXR1cm4gMDsKKwkJcHJfZXJyKCJudnJhbTogRmFpbGVkIHRvIGZpbmQgb3IgY3JlYXRlICVzIgorCQkgICAgICAgIiBwYXJ0aXRpb24sIGVyciAlZFxuIiwgcGFydC0+bmFtZSwgKGludClwKTsKKwkJcmV0dXJuIC0xOwogCX0KIAotCW52cmFtX2Vycm9yX2xvZ19pbmRleCA9IHA7Ci0JbnZyYW1fZXJyb3JfbG9nX3NpemUgPSBudnJhbV9nZXRfcGFydGl0aW9uX3NpemUocCkgLQotCQlzaXplb2Yoc3RydWN0IGVycl9sb2dfaW5mbyk7CisJcGFydC0+aW5kZXggPSBwOworCXBhcnQtPnNpemUgPSBudnJhbV9nZXRfcGFydGl0aW9uX3NpemUocCkgLSBzaXplb2Yoc3RydWN0IGVycl9sb2dfaW5mbyk7CiAJCiAJcmV0dXJuIDA7CiB9Ci1tYWNoaW5lX2FyY2hfaW5pdGNhbGwocHNlcmllcywgcHNlcmllc19udnJhbV9pbml0X2xvZ19wYXJ0aXRpb24pOworCitzdGF0aWMgdm9pZCBfX2luaXQgbnZyYW1faW5pdF9vb3BzX3BhcnRpdGlvbihpbnQgcnRhc19wYXJ0aXRpb25fZXhpc3RzKQoreworCWludCByYzsKKworCXJjID0gcHNlcmllc19udnJhbV9pbml0X29zX3BhcnRpdGlvbigmb29wc19sb2dfcGFydGl0aW9uKTsKKwlpZiAocmMgIT0gMCkgeworCQlpZiAoIXJ0YXNfcGFydGl0aW9uX2V4aXN0cykKKwkJCXJldHVybjsKKwkJcHJfbm90aWNlKCJudnJhbTogVXNpbmcgJXMgcGFydGl0aW9uIHRvIGxvZyBib3RoIgorCQkJIiBSVEFTIGVycm9ycyBhbmQgb29wcy9wYW5pYyByZXBvcnRzXG4iLAorCQkJcnRhc19sb2dfcGFydGl0aW9uLm5hbWUpOworCQltZW1jcHkoJm9vcHNfbG9nX3BhcnRpdGlvbiwgJnJ0YXNfbG9nX3BhcnRpdGlvbiwKKwkJCQkJCXNpemVvZihydGFzX2xvZ19wYXJ0aXRpb24pKTsKKwl9CisJb29wc19idWYgPSBrbWFsbG9jKG9vcHNfbG9nX3BhcnRpdGlvbi5zaXplLCBHRlBfS0VSTkVMKTsKKwlyYyA9IGttc2dfZHVtcF9yZWdpc3RlcigmbnZyYW1fa21zZ19kdW1wZXIpOworCWlmIChyYyAhPSAwKSB7CisJCXByX2VycigibnZyYW06IGttc2dfZHVtcF9yZWdpc3RlcigpIGZhaWxlZDsgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKwkJa2ZyZWUob29wc19idWYpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX252cmFtX2luaXRfbG9nX3BhcnRpdGlvbnModm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHBzZXJpZXNfbnZyYW1faW5pdF9vc19wYXJ0aXRpb24oJnJ0YXNfbG9nX3BhcnRpdGlvbik7CisJbnZyYW1faW5pdF9vb3BzX3BhcnRpdGlvbihyYyA9PSAwKTsKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfYXJjaF9pbml0Y2FsbChwc2VyaWVzLCBwc2VyaWVzX252cmFtX2luaXRfbG9nX3BhcnRpdGlvbnMpOwogCiBpbnQgX19pbml0IHBTZXJpZXNfbnZyYW1faW5pdCh2b2lkKQogewpAQCAtMzUzLDMgKzQzNCw1OSBAQAogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBUcnkgdG8gY2FwdHVyZSB0aGUgbGFzdCBjYXB0dXJlX2xlbiBieXRlcyBvZiB0aGUgcHJpbnRrIGJ1ZmZlci4gIFJldHVybgorICogdGhlIGFtb3VudCBhY3R1YWxseSBjYXB0dXJlZC4KKyAqLworc3RhdGljIHNpemVfdCBjYXB0dXJlX2xhc3RfbXNncyhjb25zdCBjaGFyICpvbGRfbXNncywgc2l6ZV90IG9sZF9sZW4sCisJCQkJY29uc3QgY2hhciAqbmV3X21zZ3MsIHNpemVfdCBuZXdfbGVuLAorCQkJCWNoYXIgKmNhcHR1cmVkLCBzaXplX3QgY2FwdHVyZV9sZW4pCit7CisJaWYgKG5ld19sZW4gPj0gY2FwdHVyZV9sZW4pIHsKKwkJbWVtY3B5KGNhcHR1cmVkLCBuZXdfbXNncyArIChuZXdfbGVuIC0gY2FwdHVyZV9sZW4pLAorCQkJCQkJCQljYXB0dXJlX2xlbik7CisJCXJldHVybiBjYXB0dXJlX2xlbjsKKwl9IGVsc2UgeworCQkvKiBHcmFiIHRoZSBlbmQgb2Ygb2xkX21zZ3MuICovCisJCXNpemVfdCBvbGRfdGFpbF9sZW4gPSBtaW4ob2xkX2xlbiwgY2FwdHVyZV9sZW4gLSBuZXdfbGVuKTsKKwkJbWVtY3B5KGNhcHR1cmVkLCBvbGRfbXNncyArIChvbGRfbGVuIC0gb2xkX3RhaWxfbGVuKSwKKwkJCQkJCQkJb2xkX3RhaWxfbGVuKTsKKwkJbWVtY3B5KGNhcHR1cmVkICsgb2xkX3RhaWxfbGVuLCBuZXdfbXNncywgbmV3X2xlbik7CisJCXJldHVybiBvbGRfdGFpbF9sZW4gKyBuZXdfbGVuOworCX0KK30KKworLyoKKyAqIEFyZSB3ZSB1c2luZyB0aGUgaWJtLHJ0YXMtbG9nIGZvciBvb3BzL3BhbmljIHJlcG9ydHM/ICBBbmQgaWYgc28sCisgKiB3b3VsZCBsb2dnaW5nIHRoaXMgb29wcy9wYW5pYyBvdmVyd3JpdGUgYW4gUlRBUyBldmVudCB0aGF0IHJ0YXNfZXJyZAorICogaGFzbid0IGhhZCBhIGNoYW5jZSB0byByZWFkIGFuZCBwcm9jZXNzPyAgUmV0dXJuIDEgaWYgc28sIGVsc2UgMC4KKyAqCisgKiBXZSBhc3N1bWUgdGhhdCBpZiBydGFzX2VycmQgaGFzbid0IHJlYWQgdGhlIFJUQVMgZXZlbnQgaW4KKyAqIE5WUkFNX1JUQVNfUkVBRF9USU1FT1VUIHNlY29uZHMsIGl0J3MgcHJvYmFibHkgbm90IGdvaW5nIHRvLgorICovCitzdGF0aWMgaW50IGNsb2JiZXJpbmdfdW5yZWFkX3J0YXNfZXZlbnQodm9pZCkKK3sKKwlyZXR1cm4gKG9vcHNfbG9nX3BhcnRpdGlvbi5pbmRleCA9PSBydGFzX2xvZ19wYXJ0aXRpb24uaW5kZXgKKwkJJiYgbGFzdF91bnJlYWRfcnRhc19ldmVudAorCQkmJiBnZXRfc2Vjb25kcygpIC0gbGFzdF91bnJlYWRfcnRhc19ldmVudCA8PQorCQkJCQkJTlZSQU1fUlRBU19SRUFEX1RJTUVPVVQpOworfQorCisvKiBvdXIga21zZ19kdW1wIGNhbGxiYWNrICovCitzdGF0aWMgdm9pZCBvb3BzX3RvX252cmFtKHN0cnVjdCBrbXNnX2R1bXBlciAqZHVtcGVyLAorCQllbnVtIGttc2dfZHVtcF9yZWFzb24gcmVhc29uLAorCQljb25zdCBjaGFyICpvbGRfbXNncywgdW5zaWduZWQgbG9uZyBvbGRfbGVuLAorCQljb25zdCBjaGFyICpuZXdfbXNncywgdW5zaWduZWQgbG9uZyBuZXdfbGVuKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgb29wc19jb3VudCA9IDA7CisJc2l6ZV90IHRleHRfbGVuOworCisJaWYgKGNsb2JiZXJpbmdfdW5yZWFkX3J0YXNfZXZlbnQoKSkKKwkJcmV0dXJuOworCisJdGV4dF9sZW4gPSBjYXB0dXJlX2xhc3RfbXNncyhvbGRfbXNncywgb2xkX2xlbiwgbmV3X21zZ3MsIG5ld19sZW4sCisJCQkJCW9vcHNfYnVmLCBvb3BzX2xvZ19wYXJ0aXRpb24uc2l6ZSk7CisJKHZvaWQpIG52cmFtX3dyaXRlX29zX3BhcnRpdGlvbigmb29wc19sb2dfcGFydGl0aW9uLCBvb3BzX2J1ZiwKKwkJKGludCkgdGV4dF9sZW4sIEVSUl9UWVBFX0tFUk5FTF9QQU5JQywgKytvb3BzX2NvdW50KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggZDM0NWJmZC4uMmEwMDg5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTExNCwxMCArMTE0LDEzIEBACiAKIHN0YXRpYyB2b2lkIHBzZXJpZXNfODI1OV9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEgPSBpODI1OV9pcnEoKTsKKwogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7Ci0JZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisKKwljaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwc2VyaWVzX3NldHVwX2k4MjU5X2Nhc2NhZGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IDdiOTZlNWEuLjAxZmVhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtMjAyLDIwICsyMDIsMjAgQEAKICNkZWZpbmUgZ2V0X2lycV9zZXJ2ZXIodmlycSwgY3B1bWFzaywgc3RyaWN0X2NoZWNrKSAoZGVmYXVsdF9zZXJ2ZXIpCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgeGljc191bm1hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgeGljc191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWludCBjYWxsX3N0YXR1czsKIAlpbnQgc2VydmVyOwogCi0JcHJfZGV2ZWwoInhpY3M6IHVubWFzayB2aXJxICVkXG4iLCB2aXJxKTsKKwlwcl9kZXZlbCgieGljczogdW5tYXNrIHZpcnEgJWRcbiIsIGQtPmlycSk7CiAKLQlpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnE7CisJaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAJcHJfZGV2ZWwoIiAtPiBtYXAgdG8gaHdpcnEgMHgleFxuIiwgaXJxKTsKIAlpZiAoaXJxID09IFhJQ1NfSVBJIHx8IGlycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKIAkJcmV0dXJuOwogCi0Jc2VydmVyID0gZ2V0X2lycV9zZXJ2ZXIodmlycSwgaXJxX3RvX2Rlc2ModmlycSktPmFmZmluaXR5LCAwKTsKKwlzZXJ2ZXIgPSBnZXRfaXJxX3NlcnZlcihkLT5pcnEsIGQtPmFmZmluaXR5LCAwKTsKIAogCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9zZXRfeGl2ZSwgMywgMSwgTlVMTCwgaXJxLCBzZXJ2ZXIsCiAJCQkJREVGQVVMVF9QUklPUklUWSk7CkBAIC0yMzUsNjEgKzIzNSw2MSBAQAogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX3N0YXJ0dXAodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdW5zaWduZWQgaW50IHhpY3Nfc3RhcnR1cChzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyoKIAkgKiBUaGUgZ2VuZXJpYyBNU0kgY29kZSByZXR1cm5zIHdpdGggdGhlIGludGVycnVwdCBkaXNhYmxlZCBvbiB0aGUKIAkgKiBjYXJkLCB1c2luZyB0aGUgTVNJIG1hc2sgYml0cy4gRmlybXdhcmUgZG9lc24ndCBhcHBlYXIgdG8gdW5tYXNrCiAJICogYXQgdGhhdCBsZXZlbCwgc28gd2UgZG8gaXQgaGVyZSBieSBoYW5kLgogCSAqLwotCWlmIChpcnFfdG9fZGVzYyh2aXJxKS0+bXNpX2Rlc2MpCi0JCXVubWFza19tc2lfaXJxKGlycV9nZXRfaXJxX2RhdGEodmlycSkpOworCWlmIChkLT5tc2lfZGVzYykKKwkJdW5tYXNrX21zaV9pcnEoZCk7CiAKIAkvKiB1bm1hc2sgaXQgKi8KLQl4aWNzX3VubWFza19pcnEodmlycSk7CisJeGljc191bm1hc2tfaXJxKGQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB4aWNzX21hc2tfcmVhbF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHhpY3NfbWFza19yZWFsX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaW50IGNhbGxfc3RhdHVzOwogCi0JaWYgKGlycSA9PSBYSUNTX0lQSSkKKwlpZiAoZC0+aXJxID09IFhJQ1NfSVBJKQogCQlyZXR1cm47CiAKLQljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1faW50X29mZiwgMSwgMSwgTlVMTCwgaXJxKTsKKwljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1faW50X29mZiwgMSwgMSwgTlVMTCwgZC0+aXJxKTsKIAlpZiAoY2FsbF9zdGF0dXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm1faW50X29mZiBpcnE9JXUgcmV0dXJuZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgaXJxLCBjYWxsX3N0YXR1cyk7CisJCQlfX2Z1bmNfXywgZC0+aXJxLCBjYWxsX3N0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBIYXZlIHRvIHNldCBYSVZFIHRvIDB4ZmYgdG8gYmUgYWJsZSB0byByZW1vdmUgYSBzbG90ICovCi0JY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBpcnEsCisJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBkLT5pcnEsCiAJCQkJZGVmYXVsdF9zZXJ2ZXIsIDB4ZmYpOwogCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9zZXRfeGl2ZSgweGZmKSBpcnE9JXUgcmV0dXJuZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgaXJxLCBjYWxsX3N0YXR1cyk7CisJCQlfX2Z1bmNfXywgZC0+aXJxLCBjYWxsX3N0YXR1cyk7CiAJCXJldHVybjsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHhpY3NfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCB4aWNzX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCi0JcHJfZGV2ZWwoInhpY3M6IG1hc2sgdmlycSAlZFxuIiwgdmlycSk7CisJcHJfZGV2ZWwoInhpY3M6IG1hc2sgdmlycSAlZFxuIiwgZC0+aXJxKTsKIAotCWlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKKwlpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAlpZiAoaXJxID09IFhJQ1NfSVBJIHx8IGlycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKIAkJcmV0dXJuOwotCXhpY3NfbWFza19yZWFsX2lycShpcnEpOworCXhpY3NfbWFza19yZWFsX2lycShkKTsKIH0KIAogc3RhdGljIHZvaWQgeGljc19tYXNrX3Vua25vd25fdmVjKHVuc2lnbmVkIGludCB2ZWMpCiB7CiAJcHJpbnRrKEtFUk5fRVJSICJJbnRlcnJ1cHQgJXUgKHJlYWwpIGlzIGludmFsaWQsIGRpc2FibGluZyBpdC5cbiIsIHZlYyk7Ci0JeGljc19tYXNrX3JlYWxfaXJxKHZlYyk7CisJeGljc19tYXNrX3JlYWxfaXJxKGlycV9nZXRfaXJxX2RhdGEodmVjKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhpY3NfeGlycl92ZWN0b3IodW5zaWduZWQgaW50IHhpcnIpCkBAIC0zNzEsMzAgKzM3MSwzMSBAQAogCXJldHVybiBvc19jcHByLT5zdGFja1stLW9zX2NwcHItPmluZGV4XTsKIH0KIAotc3RhdGljIHZvaWQgeGljc19lb2lfZGlyZWN0KHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgeGljc19lb2lfZGlyZWN0KHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCWlvc3luYygpOwogCWRpcmVjdF94aXJyX2luZm9fc2V0KChwb3BfY3BwcigpIDw8IDI0KSB8IGlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIHhpY3NfZW9pX2xwYXIodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCB4aWNzX2VvaV9scGFyKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCWlvc3luYygpOwogCWxwYXJfeGlycl9pbmZvX3NldCgocG9wX2NwcHIoKSA8PCAyNCkgfCBpcnEpOwogfQogCi1zdGF0aWMgaW50IHhpY3Nfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCB2aXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKK3N0YXRpYyBpbnQKK3hpY3Nfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssIGJvb2wgZm9yY2UpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgc3RhdHVzOwogCWludCB4aWNzX3N0YXR1c1syXTsKIAlpbnQgaXJxX3NlcnZlcjsKIAotCWlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKKwlpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAlpZiAoaXJxID09IFhJQ1NfSVBJIHx8IGlycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKIAkJcmV0dXJuIC0xOwogCkBAIC00MDYsMTMgKzQwNywxMyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaXJxX3NlcnZlciA9IGdldF9pcnFfc2VydmVyKHZpcnEsIGNwdW1hc2ssIDEpOworCWlycV9zZXJ2ZXIgPSBnZXRfaXJxX3NlcnZlcihkLT5pcnEsIGNwdW1hc2ssIDEpOwogCWlmIChpcnFfc2VydmVyID09IC0xKSB7CiAJCWNoYXIgY3B1bGlzdFsxMjhdOwogCQljcHVtYXNrX3NjbnByaW50ZihjcHVsaXN0LCBzaXplb2YoY3B1bGlzdCksIGNwdW1hc2spOwogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiJXM6IE5vIG9ubGluZSBjcHVzIGluIHRoZSBtYXNrICVzIGZvciBpcnEgJWRcbiIsCi0JCQlfX2Z1bmNfXywgY3B1bGlzdCwgdmlycSk7CisJCQlfX2Z1bmNfXywgY3B1bGlzdCwgZC0+aXJxKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDMwLDIwICs0MzEsMjAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19kaXJlY3QgPSB7CiAJLm5hbWUgPSAiWElDUyIsCi0JLnN0YXJ0dXAgPSB4aWNzX3N0YXJ0dXAsCi0JLm1hc2sgPSB4aWNzX21hc2tfaXJxLAotCS51bm1hc2sgPSB4aWNzX3VubWFza19pcnEsCi0JLmVvaSA9IHhpY3NfZW9pX2RpcmVjdCwKLQkuc2V0X2FmZmluaXR5ID0geGljc19zZXRfYWZmaW5pdHkKKwkuaXJxX3N0YXJ0dXAgPSB4aWNzX3N0YXJ0dXAsCisJLmlycV9tYXNrID0geGljc19tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKKwkuaXJxX2VvaSA9IHhpY3NfZW9pX2RpcmVjdCwKKwkuaXJxX3NldF9hZmZpbml0eSA9IHhpY3Nfc2V0X2FmZmluaXR5CiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2xwYXIgPSB7CiAJLm5hbWUgPSAiWElDUyIsCi0JLnN0YXJ0dXAgPSB4aWNzX3N0YXJ0dXAsCi0JLm1hc2sgPSB4aWNzX21hc2tfaXJxLAotCS51bm1hc2sgPSB4aWNzX3VubWFza19pcnEsCi0JLmVvaSA9IHhpY3NfZW9pX2xwYXIsCi0JLnNldF9hZmZpbml0eSA9IHhpY3Nfc2V0X2FmZmluaXR5CisJLmlycV9zdGFydHVwID0geGljc19zdGFydHVwLAorCS5pcnFfbWFzayA9IHhpY3NfbWFza19pcnEsCisJLmlycV91bm1hc2sgPSB4aWNzX3VubWFza19pcnEsCisJLmlycV9lb2kgPSB4aWNzX2VvaV9scGFyLAorCS5pcnFfc2V0X2FmZmluaXR5ID0geGljc19zZXRfYWZmaW5pdHkKIH07CiAKIApAQCAtODkwLDYgKzg5MSw3IEBACiAKIAlmb3JfZWFjaF9pcnEodmlycSkgewogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKIAkJaW50IHhpY3Nfc3RhdHVzWzJdOwogCQlpbnQgc3RhdHVzOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTAzLDEyICs5MDUsMTUgQEAKIAkJLyogV2UgbmVlZCB0byBnZXQgSVBJcyBzdGlsbC4gKi8KIAkJaWYgKGlycSA9PSBYSUNTX0lQSSB8fCBpcnEgPT0gWElDU19JUlFfU1BVUklPVVMpCiAJCQljb250aW51ZTsKKwogCQlkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7CiAKIAkJLyogV2Ugb25seSBuZWVkIHRvIG1pZ3JhdGUgZW5hYmxlZCBJUlFTICovCi0JCWlmIChkZXNjID09IE5VTEwgfHwgZGVzYy0+Y2hpcCA9PSBOVUxMCi0JCSAgICB8fCBkZXNjLT5hY3Rpb24gPT0gTlVMTAotCQkgICAgfHwgZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5ID09IE5VTEwpCisJCWlmIChkZXNjID09IE5VTEwgfHwgZGVzYy0+YWN0aW9uID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQljaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CisJCWlmIChjaGlwID09IE5VTEwgfHwgY2hpcC0+aXJxX3NldF9hZmZpbml0eSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC05MzQsOCArOTM5LDggQEAKIAkJCSAgICAgICB2aXJxLCBjcHUpOwogCiAJCS8qIFJlc2V0IGFmZmluaXR5IHRvIGFsbCBjcHVzICovCi0JCWNwdW1hc2tfc2V0YWxsKGlycV90b19kZXNjKHZpcnEpLT5hZmZpbml0eSk7Ci0JCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSh2aXJxLCBjcHVfYWxsX21hc2spOworCQljcHVtYXNrX3NldGFsbChkZXNjLT5pcnFfZGF0YS5hZmZpbml0eSk7CisJCWNoaXAtPmlycV9zZXRfYWZmaW5pdHkoJmRlc2MtPmlycV9kYXRhLCBjcHVfYWxsX21hc2ssIHRydWUpOwogdW5sb2NrOgogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCmluZGV4IDljMjk3MzQuLjFlMGM5MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNyBAQAogb2JqLSQoQ09ORklHX01QQzh4eHhfR1BJTykJKz0gbXBjOHh4eF9ncGlvLm8KIG9iai0kKENPTkZJR19GU0xfODVYWF9DQUNIRV9TUkFNKQkrPSBmc2xfODV4eF9sMmN0bHIubyBmc2xfODV4eF9jYWNoZV9zcmFtLm8KIG9iai0kKENPTkZJR19TSU1QTEVfR1BJTykJKz0gc2ltcGxlX2dwaW8ubwotb2JqLSQoQ09ORklHX1JBUElESU8pCQkrPSBmc2xfcmlvLm8KK29iai0kKENPTkZJR19GU0xfUklPKQkJKz0gZnNsX3Jpby5vCiBvYmotJChDT05GSUdfVFNJMTA4X0JSSURHRSkJKz0gdHNpMTA4X3BjaS5vIHRzaTEwOF9kZXYubwogb2JqLSQoQ09ORklHX1FVSUNDX0VOR0lORSkJKz0gcWVfbGliLwogb2JqLSQoQ09ORklHX1BQQ19CRVNUQ09NTSkJKz0gYmVzdGNvbW0vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IDAwODUyMTIuLjA0NzZiY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC01NiwzMiArNTYsMzIgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqY3BtX3BpY19ob3N0OwogCi1zdGF0aWMgdm9pZCBjcG1fbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGNwbV9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbV92ZWMgPSAodW5zaWduZWQgaW50KWlycV9tYXBbaXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCiAJY2xyYml0czMyKCZjcGljX3JlZy0+Y3BpY19jaW1yLCAoMSA8PCBjcG1fdmVjKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNwbV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBjcG1fdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbV92ZWMgPSAodW5zaWduZWQgaW50KWlycV9tYXBbaXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCiAJc2V0Yml0czMyKCZjcGljX3JlZy0+Y3BpY19jaW1yLCAoMSA8PCBjcG1fdmVjKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNwbV9lbmRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBjcG1fZW5kX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbV92ZWMgPSAodW5zaWduZWQgaW50KWlycV9tYXBbaXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOwogCiAJb3V0X2JlMzIoJmNwaWNfcmVnLT5jcGljX2Npc3IsICgxIDw8IGNwbV92ZWMpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcG1fcGljID0gewogCS5uYW1lID0gIkNQTSBQSUMiLAotCS5tYXNrID0gY3BtX21hc2tfaXJxLAotCS51bm1hc2sgPSBjcG1fdW5tYXNrX2lycSwKLQkuZW9pID0gY3BtX2VuZF9pcnEsCisJLmlycV9tYXNrID0gY3BtX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gY3BtX3VubWFza19pcnEsCisJLmlycV9lb2kgPSBjcG1fZW5kX2lycSwKIH07CiAKIGludCBjcG1fZ2V0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCmluZGV4IGZjZWE0ZmYuLjQ3MzAzMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKQEAgLTc4LDEwICs3OCwxMCBAQAogCTI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKIH07CiAKLXN0YXRpYyB2b2lkIGNwbTJfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBjcG0yX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KHZpcnEpOworCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KGQtPmlycSk7CiAKIAliaXQgPSBpcnFfdG9fc2l1Yml0W2lycV9ucl07CiAJd29yZCA9IGlycV90b19zaXVyZWdbaXJxX25yXTsKQEAgLTkwLDEwICs5MCwxMCBAQAogCW91dF9iZTMyKCZjcG0yX2ludGN0bC0+aWNfc2ltcmggKyB3b3JkLCBwcGNfY2FjaGVkX2lycV9tYXNrW3dvcmRdKTsKIH0KIAotc3RhdGljIHZvaWQgY3BtMl91bm1hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgY3BtMl91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KHZpcnEpOworCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KGQtPmlycSk7CiAKIAliaXQgPSBpcnFfdG9fc2l1Yml0W2lycV9ucl07CiAJd29yZCA9IGlycV90b19zaXVyZWdbaXJxX25yXTsKQEAgLTEwMiwxMCArMTAyLDEwIEBACiAJb3V0X2JlMzIoJmNwbTJfaW50Y3RsLT5pY19zaW1yaCArIHdvcmQsIHBwY19jYWNoZWRfaXJxX21hc2tbd29yZF0pOwogfQogCi1zdGF0aWMgdm9pZCBjcG0yX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIGNwbTJfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KHZpcnEpOworCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KGQtPmlycSk7CiAKIAliaXQgPSBpcnFfdG9fc2l1Yml0W2lycV9ucl07CiAJd29yZCA9IGlycV90b19zaXVyZWdbaXJxX25yXTsKQEAgLTExMywxMSArMTEzLDExIEBACiAJb3V0X2JlMzIoJmNwbTJfaW50Y3RsLT5pY19zaXBucmggKyB3b3JkLCAxIDw8IGJpdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNwbTJfZW5kX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIGNwbTJfZW5kX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludAliaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9IHZpcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgaW50IGlycV9uciA9IHZpcnFfdG9faHcoZC0+aXJxKTsKIAogCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnFfbnIpOwogCWlmICghKGRlc2MtPnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKQpAQCAtMTM3LDEwICsxMzcsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY3BtMl9zZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCitzdGF0aWMgaW50IGNwbTJfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyh2aXJxKTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhkLT5pcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGQtPmlycSk7CiAJdW5zaWduZWQgaW50IHZvbGQsIHZuZXcsIGVkaWJpdDsKIAogCS8qIFBvcnQgQyBpbnRlcnJ1cHRzIGFyZSBlaXRoZXIgSVJRX1RZUEVfRURHRV9GQUxMSU5HIG9yCkBAIC0xOTksMTEgKzE5OSwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbTJfcGljID0gewogCS5uYW1lID0gIkNQTTIgU0lVIiwKLQkubWFzayA9IGNwbTJfbWFza19pcnEsCi0JLnVubWFzayA9IGNwbTJfdW5tYXNrX2lycSwKLQkuYWNrID0gY3BtMl9hY2ssCi0JLmVvaSA9IGNwbTJfZW5kX2lycSwKLQkuc2V0X3R5cGUgPSBjcG0yX3NldF9pcnFfdHlwZSwKKwkuaXJxX21hc2sgPSBjcG0yX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gY3BtMl91bm1hc2tfaXJxLAorCS5pcnFfYWNrID0gY3BtMl9hY2ssCisJLmlycV9lb2kgPSBjcG0yX2VuZF9pcnEsCisJLmlycV9zZXRfdHlwZSA9IGNwbTJfc2V0X2lycV90eXBlLAogfTsKIAogdW5zaWduZWQgaW50IGNwbTJfZ2V0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfODV4eF9sMmN0bHIuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsXzg1eHhfbDJjdGxyLmMKaW5kZXggMmI5ZjBjOS4uNWY4ODc5NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfODV4eF9sMmN0bHIuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF84NXh4X2wyY3Rsci5jCkBAIC05MywxNCArOTMsMTQgQEAKIAlsMmNhY2hlX3NpemUgPSAqcHJvcDsKIAogCXNyYW1fcGFyYW1zLnNyYW1fc2l6ZSAgPSBnZXRfY2FjaGVfc3JhbV9zaXplKCk7Ci0JaWYgKHNyYW1fcGFyYW1zLnNyYW1fc2l6ZSA8PSAwKSB7CisJaWYgKChpbnQpc3JhbV9wYXJhbXMuc3JhbV9zaXplIDw9IDApIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsCiAJCQkiRW50aXJlIEwyIGFzIGNhY2hlLCBBYm9ydGluZyBDYWNoZS1TUkFNIHN0dWZmXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc3JhbV9wYXJhbXMuc3JhbV9vZmZzZXQgID0gZ2V0X2NhY2hlX3NyYW1fb2Zmc2V0KCk7Ci0JaWYgKHNyYW1fcGFyYW1zLnNyYW1fb2Zmc2V0IDw9IDApIHsKKwlpZiAoKGludDY0X3Qpc3JhbV9wYXJhbXMuc3JhbV9vZmZzZXQgPD0gMCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCSJFbnRpcmUgTDIgYXMgY2FjaGUsIHByb3ZpZGUgYSB2YWxpZCBzcmFtIG9mZnNldFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYwppbmRleCBlZTZhOGE1Li41OGUwOWIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBBdXRob3I6IFRvbnkgTGkgPHRvbnkubGlAZnJlZXNjYWxlLmNvbT4KICAqCSAgIEphc29uIEppbiA8SmFzb24uamluQGZyZWVzY2FsZS5jb20+CkBAIC00NywxNCArNDcsMTQgQEAKICAqIFdlIGRvIG5vdCBuZWVkIHRoaXMgYWN0dWFsbHkuIFRoZSBNU0lSIHJlZ2lzdGVyIGhhcyBiZWVuIHJlYWQgb25jZQogICogaW4gdGhlIGNhc2NhZGUgaW50ZXJydXB0LiBTbywgdGhpcyBNU0kgaW50ZXJydXB0IGhhcyBiZWVuIGFja2VkCiAqLwotc3RhdGljIHZvaWQgZnNsX21zaV9lbmRfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgZnNsX21zaV9lbmRfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBmc2xfbXNpX2NoaXAgPSB7CiAJLmlycV9tYXNrCT0gbWFza19tc2lfaXJxLAogCS5pcnFfdW5tYXNrCT0gdW5tYXNrX21zaV9pcnEsCi0JLmFjawkJPSBmc2xfbXNpX2VuZF9pcnEsCisJLmlycV9hY2sJPSBmc2xfbXNpX2VuZF9pcnEsCiAJLm5hbWUJCT0gIkZTTC1NU0kiLAogfTsKIApAQCAtMTgzLDYgKzE4Myw3IEBACiAKIHN0YXRpYyB2b2lkIGZzbF9tc2lfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyk7CiAJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxOwogCXN0cnVjdCBmc2xfbXNpICptc2lfZGF0YTsKIAlpbnQgbXNpcl9pbmRleCA9IC0xOwpAQCAtMTk2LDExICsxOTcsMTEgQEAKIAogCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWlmICgobXNpX2RhdGEtPmZlYXR1cmUgJiAgRlNMX1BJQ19JUF9NQVNLKSA9PSBGU0xfUElDX0lQX0lQSUMpIHsKLQkJaWYgKGRlc2MtPmNoaXAtPm1hc2tfYWNrKQotCQkJZGVzYy0+Y2hpcC0+bWFza19hY2soaXJxKTsKKwkJaWYgKGNoaXAtPmlycV9tYXNrX2FjaykKKwkJCWNoaXAtPmlycV9tYXNrX2FjaygmZGVzYy0+aXJxX2RhdGEpOwogCQllbHNlIHsKLQkJCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKLQkJCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCQkJY2hpcC0+aXJxX21hc2soJmRlc2MtPmlycV9kYXRhKTsKKwkJCWNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsKIAkJfQogCX0KIApAQCAtMjM4LDExICsyMzksMTEgQEAKIAogCXN3aXRjaCAobXNpX2RhdGEtPmZlYXR1cmUgJiBGU0xfUElDX0lQX01BU0spIHsKIAljYXNlIEZTTF9QSUNfSVBfTVBJQzoKLQkJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisJCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0xfUElDX0lQX0lQSUM6Ci0JCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgZGVzYy0+Y2hpcC0+dW5tYXNrKQotCQkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgY2hpcC0+aXJxX3VubWFzaykKKwkJCWNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKIAkJYnJlYWs7CiAJfQogdW5sb2NrOgpAQCAtMjczLDE4ICsyNzQsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQgZnNsX21zaV9zZXR1cF9od2lycShzdHJ1Y3QgZnNsX21zaSAqbXNpLAorCQkJCQkgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCQkgaW50IG9mZnNldCwgaW50IGlycV9pbmRleCkKK3sKKwlzdHJ1Y3QgZnNsX21zaV9jYXNjYWRlX2RhdGEgKmNhc2NhZGVfZGF0YSA9IE5VTEw7CisJaW50IHZpcnRfbXNpcjsKKworCXZpcnRfbXNpciA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+ZGV2Lm9mX25vZGUsIGlycV9pbmRleCk7CisJaWYgKHZpcnRfbXNpciA9PSBOT19JUlEpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogQ2Fubm90IHRyYW5zbGF0ZSBJUlEgaW5kZXggJWRcbiIsCisJCQlfX2Z1bmNfXywgaXJxX2luZGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzY2FkZV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzbF9tc2lfY2FzY2FkZV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXNjYWRlX2RhdGEpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJObyBtZW1vcnkgZm9yIE1TSSBjYXNjYWRlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltc2ktPm1zaV92aXJxc1tpcnFfaW5kZXhdID0gdmlydF9tc2lyOworCWNhc2NhZGVfZGF0YS0+aW5kZXggPSBvZmZzZXQgKyBpcnFfaW5kZXg7CisJY2FzY2FkZV9kYXRhLT5tc2lfZGF0YSA9IG1zaTsKKwlzZXRfaXJxX2RhdGEodmlydF9tc2lyLCBjYXNjYWRlX2RhdGEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHZpcnRfbXNpciwgZnNsX21zaV9jYXNjYWRlKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfb2ZfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNsX21zaSAqbXNpOwogCXN0cnVjdCByZXNvdXJjZSByZXM7Ci0JaW50IGVyciwgaSwgY291bnQ7CisJaW50IGVyciwgaSwgaiwgaXJxX2luZGV4LCBjb3VudDsKIAlpbnQgcmM7Ci0JaW50IHZpcnRfbXNpcjsKIAljb25zdCB1MzIgKnA7CiAJc3RydWN0IGZzbF9tc2lfZmVhdHVyZSAqZmVhdHVyZXM7Ci0Jc3RydWN0IGZzbF9tc2lfY2FzY2FkZV9kYXRhICpjYXNjYWRlX2RhdGEgPSBOVUxMOwogCWludCBsZW47CiAJdTMyIG9mZnNldDsKKwlzdGF0aWMgY29uc3QgdTMyIGFsbF9hdmFpbFtdID0geyAwLCBOUl9NU0lfSVJRUyB9OwogCiAJaWYgKCFkZXYtPmRldi5vZl9tYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMzUsNDIgKzM2NCwzNCBAQAogCQlnb3RvIGVycm9yX291dDsKIAl9CiAKLQlwID0gb2ZfZ2V0X3Byb3BlcnR5KGRldi0+ZGV2Lm9mX25vZGUsICJpbnRlcnJ1cHRzIiwgJmNvdW50KTsKLQlpZiAoIXApIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJubyBpbnRlcnJ1cHRzIHByb3BlcnR5IGZvdW5kIG9uICVzXG4iLAotCQkJCWRldi0+ZGV2Lm9mX25vZGUtPmZ1bGxfbmFtZSk7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3Jfb3V0OwotCX0KLQlpZiAoY291bnQgJSA4ICE9IDApIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJNYWxmb3JtZWQgaW50ZXJydXB0cyBwcm9wZXJ0eSBvbiAlc1xuIiwKLQkJCQlkZXYtPmRldi5vZl9ub2RlLT5mdWxsX25hbWUpOworCXAgPSBvZl9nZXRfcHJvcGVydHkoZGV2LT5kZXYub2Zfbm9kZSwgIm1zaS1hdmFpbGFibGUtcmFuZ2VzIiwgJmxlbik7CisJaWYgKHAgJiYgbGVuICUgKDIgKiBzaXplb2YodTMyKSkgIT0gMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBNYWxmb3JtZWQgbXNpLWF2YWlsYWJsZS1yYW5nZXMgcHJvcGVydHlcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KLQlvZmZzZXQgPSAwOwotCXAgPSBvZl9nZXRfcHJvcGVydHkoZGV2LT5kZXYub2Zfbm9kZSwgIm1zaS1hdmFpbGFibGUtcmFuZ2VzIiwgJmxlbik7Ci0JaWYgKHApCi0JCW9mZnNldCA9ICpwIC8gSVJRU19QRVJfTVNJX1JFRzsKIAotCWNvdW50IC89IHNpemVvZih1MzIpOwotCWZvciAoaSA9IDA7IGkgPCBtaW4oY291bnQgLyAyLCBOUl9NU0lfUkVHKTsgaSsrKSB7Ci0JCXZpcnRfbXNpciA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+ZGV2Lm9mX25vZGUsIGkpOwotCQlpZiAodmlydF9tc2lyICE9IE5PX0lSUSkgewotCQkJY2FzY2FkZV9kYXRhID0ga3phbGxvYygKLQkJCQkJc2l6ZW9mKHN0cnVjdCBmc2xfbXNpX2Nhc2NhZGVfZGF0YSksCi0JCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCFjYXNjYWRlX2RhdGEpIHsKLQkJCQlkZXZfZXJyKCZkZXYtPmRldiwKLQkJCQkJIk5vIG1lbW9yeSBmb3IgTVNJIGNhc2NhZGUgZGF0YVxuIik7Ci0JCQkJZXJyID0gLUVOT01FTTsKKwlpZiAoIXApCisJCXAgPSBhbGxfYXZhaWw7CisKKwlmb3IgKGlycV9pbmRleCA9IDAsIGkgPSAwOyBpIDwgbGVuIC8gKDIgKiBzaXplb2YodTMyKSk7IGkrKykgeworCQlpZiAocFtpICogMl0gJSBJUlFTX1BFUl9NU0lfUkVHIHx8CisJCSAgICBwW2kgKiAyICsgMV0gJSBJUlFTX1BFUl9NU0lfUkVHKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXM6IG1zaSBhdmFpbGFibGUgcmFuZ2Ugb2YgJXUgYXQgJXUgaXMgbm90IElSUS1hbGlnbmVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBkZXYtPmRldi5vZl9ub2RlLT5mdWxsX25hbWUsCisJCQkgICAgICAgcFtpICogMiArIDFdLCBwW2kgKiAyXSk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKworCQlvZmZzZXQgPSBwW2kgKiAyXSAvIElSUVNfUEVSX01TSV9SRUc7CisJCWNvdW50ID0gcFtpICogMiArIDFdIC8gSVJRU19QRVJfTVNJX1JFRzsKKworCQlmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKywgaXJxX2luZGV4KyspIHsKKwkJCWVyciA9IGZzbF9tc2lfc2V0dXBfaHdpcnEobXNpLCBkZXYsIG9mZnNldCwgaXJxX2luZGV4KTsKKwkJCWlmIChlcnIpCiAJCQkJZ290byBlcnJvcl9vdXQ7Ci0JCQl9Ci0JCQltc2ktPm1zaV92aXJxc1tpXSA9IHZpcnRfbXNpcjsKLQkJCWNhc2NhZGVfZGF0YS0+aW5kZXggPSBpICsgb2Zmc2V0OwotCQkJY2FzY2FkZV9kYXRhLT5tc2lfZGF0YSA9IG1zaTsKLQkJCXNldF9pcnFfZGF0YSh2aXJ0X21zaXIsICh2b2lkICopY2FzY2FkZV9kYXRhKTsKLQkJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHZpcnRfbXNpciwgZnNsX21zaV9jYXNjYWRlKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwppbmRleCA4MThmN2M2Li5mOGY3ZjI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNUEM4M3h4Lzg1eHgvODZ4eCBQQ0kvUENJRSBzdXBwb3J0IHJvdXRpbmcuCiAgKgotICogQ29weXJpZ2h0IDIwMDctMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICogQ29weXJpZ2h0IDIwMDgtMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgogICogSW5pdGlhbCBhdXRob3I6IFhpYW5naHVhIFhpYW8gPHgueGlhb0BmcmVlc2NhbGUuY29tPgpAQCAtOTksNyArOTksNyBAQAogCQkJCSAgc3RydWN0IHJlc291cmNlICpyc3JjKQogewogCXN0cnVjdCBjY3NyX3BjaSBfX2lvbWVtICpwY2k7Ci0JaW50IGksIGosIG4sIG1lbV9sb2csIHdpbl9pZHggPSAyOworCWludCBpLCBqLCBuLCBtZW1fbG9nLCB3aW5faWR4ID0gMywgc3RhcnRfaWR4ID0gMSwgZW5kX2lkeCA9IDQ7CiAJdTY0IG1lbSwgc3osIHBhZGRyX2hpID0gMDsKIAl1NjQgcGFkZHJfbG8gPSBVTExPTkdfTUFYOwogCXUzMiBwY2ljc3JiYXIgPSAwLCBwY2ljc3JiYXJfc3o7CkBAIC0xMDksNiArMTA5LDEzIEBACiAKIAlwcl9kZWJ1ZygiUENJIG1lbW9yeSBtYXAgc3RhcnQgMHglMDE2bGx4LCBzaXplIDB4JTAxNmxseFxuIiwKIAkJICAgICh1NjQpcnNyYy0+c3RhcnQsICh1NjQpcnNyYy0+ZW5kIC0gKHU2NClyc3JjLT5zdGFydCArIDEpOworCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGhvc2UtPmRuLCAiZnNsLHFvcmlxLXBjaWUtdjIuMiIpKSB7CisJCXdpbl9pZHggPSAyOworCQlzdGFydF9pZHggPSAwOworCQllbmRfaWR4ID0gMzsKKwl9CisKIAlwY2kgPSBpb3JlbWFwKHJzcmMtPnN0YXJ0LCByc3JjLT5lbmQgLSByc3JjLT5zdGFydCArIDEpOwogCWlmICghcGNpKSB7CiAJICAgIGRldl9lcnIoaG9zZS0+cGFyZW50LCAiVW5hYmxlIHRvIG1hcCBBVE1VIHJlZ2lzdGVyc1xuIik7CkBAIC0xMTgsNyArMTI1LDcgQEAKIAkvKiBEaXNhYmxlIGFsbCB3aW5kb3dzIChleGNlcHQgcG93YXIwIHNpbmNlIGl0J3MgaWdub3JlZCkgKi8KIAlmb3IoaSA9IDE7IGkgPCA1OyBpKyspCiAJCW91dF9iZTMyKCZwY2ktPnBvd1tpXS5wb3dhciwgMCk7Ci0JZm9yKGkgPSAwOyBpIDwgMzsgaSsrKQorCWZvciAoaSA9IHN0YXJ0X2lkeDsgaSA8IGVuZF9pZHg7IGkrKykKIAkJb3V0X2JlMzIoJnBjaS0+cGl3W2ldLnBpd2FyLCAwKTsKIAogCS8qIFNldHVwIG91dGJvdW5kIE1FTSB3aW5kb3cgKi8KQEAgLTIwNCw3ICsyMTEsNyBAQAogCQkJbWVtX2xvZysrOwogCQl9CiAKLQkJcGl3YXIgfD0gKG1lbV9sb2cgLSAxKTsKKwkJcGl3YXIgfD0gKChtZW1fbG9nIC0gMSkgJiBQSVdBUl9TWl9NQVNLKTsKIAogCQkvKiBTZXR1cCBpbmJvdW5kIG1lbW9yeSB3aW5kb3cgKi8KIAkJb3V0X2JlMzIoJnBjaS0+cGl3W3dpbl9pZHhdLnBpdGFyLCAgMHgwMDAwMDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5oCmluZGV4IDhhZDcyYTEuLmEzOWVkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE1QQzg1eHgvODZ4eCBQQ0kgRXhwcmVzcyBzdHJ1Y3R1cmUgZGVmaW5lCiAgKgotICogQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYworICogQ29weXJpZ2h0IDIwMDcsMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUElXQVJfVEdJX0xPQ0FMCQkweDAwZjAwMDAwCS8qIHRhcmdldCAtIGxvY2FsIG1lbW9yeSAqLwogI2RlZmluZSBQSVdBUl9SRUFEX1NOT09QCTB4MDAwNTAwMDAKICNkZWZpbmUgUElXQVJfV1JJVEVfU05PT1AJMHgwMDAwNTAwMAorI2RlZmluZSBQSVdBUl9TWl9NQVNLICAgICAgICAgIDB4MDAwMDAwM2YKIAogLyogUENJL1BDSSBFeHByZXNzIG91dGJvdW5kIHdpbmRvdyByZWcgKi8KIHN0cnVjdCBwY2lfb3V0Ym91bmRfd2luZG93X3JlZ3MgewpAQCAtNDksNyArNTAsOSBAQAogCV9fYmUzMglpbnRfYWNrOwkJLyogMHguMDA4IC0gUENJIEludGVycnVwdCBBY2tub3dsZWRnZSBSZWdpc3RlciAqLwogCV9fYmUzMglwZXhfb3RiX2NwbF90b3I7CS8qIDB4LjAwYyAtIFBDSUUgT3V0Ym91bmQgY29tcGxldGlvbiB0aW1lb3V0IHJlZ2lzdGVyICovCiAJX19iZTMyCXBleF9jb25mX3RvcjsJCS8qIDB4LjAxMCAtIFBDSUUgY29uZmlndXJhdGlvbiB0aW1lb3V0IHJlZ2lzdGVyICovCi0JdTgJcmVzMlsxMl07CisJX19iZTMyCXBleF9jb25maWc7CQkvKiAweC4wMTQgLSBQQ0lFIENPTkZJRyBSZWdpc3RlciAqLworCV9fYmUzMglwZXhfaW50X3N0YXR1czsJCS8qIDB4LjAxOCAtIFBDSUUgaW50ZXJydXB0IHN0YXR1cyAqLworCXU4CXJlczJbNF07CiAJX19iZTMyCXBleF9wbWVfbWVzX2RyOwkJLyogMHguMDIwIC0gUENJRSBQTUUgYW5kIG1lc3NhZ2UgZGV0ZWN0IHJlZ2lzdGVyICovCiAJX19iZTMyCXBleF9wbWVfbWVzX2Rpc3I7CS8qIDB4LjAyNCAtIFBDSUUgUE1FIGFuZCBtZXNzYWdlIGRpc2FibGUgcmVnaXN0ZXIgKi8KIAlfX2JlMzIJcGV4X3BtZV9tZXNfaWVyOwkvKiAweC4wMjggLSBQQ0lFIFBNRSBhbmQgbWVzc2FnZSBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCkBAIC02MiwxNCArNjUsMTQgQEAKICAqIGluIGFsbCBvZiB0aGUgb3RoZXIgb3V0Ym91bmQgd2luZG93cy4KICAqLwogCXN0cnVjdCBwY2lfb3V0Ym91bmRfd2luZG93X3JlZ3MgcG93WzVdOwotCi0JdTgJcmVzMTRbMjU2XTsKLQotLyogUENJL1BDSSBFeHByZXNzIGluYm91bmQgd2luZG93IDMtMQorCXU4CXJlczE0Wzk2XTsKKwlzdHJ1Y3QgcGNpX2luYm91bmRfd2luZG93X3JlZ3MJcG1pdDsJLyogMHhkMDAgLSAweGQ5YyBJbmJvdW5kIE1TSSAqLworCXU4CXJlczZbOTZdOworLyogUENJL1BDSSBFeHByZXNzIGluYm91bmQgd2luZG93IDMtMAogICogaW5ib3VuZCB3aW5kb3cgMSBzdXBwb3J0cyBvbmx5IGEgMzItYml0IGJhc2UgYWRkcmVzcyBhbmQgZG9lcyBub3QKICAqIGRlZmluZSBhbiBpbmJvdW5kIHdpbmRvdyBiYXNlIGV4dGVuZGVkIGFkZHJlc3MgcmVnaXN0ZXIuCiAgKi8KLQlzdHJ1Y3QgcGNpX2luYm91bmRfd2luZG93X3JlZ3MgcGl3WzNdOworCXN0cnVjdCBwY2lfaW5ib3VuZF93aW5kb3dfcmVncyBwaXdbNF07CiAKIAlfX2JlMzIJcGV4X2Vycl9kcjsJCS8qIDB4LmUwMCAtIFBDSS9QQ0lFIGVycm9yIGRldGVjdCByZWdpc3RlciAqLwogCXU4CXJlczIxWzRdOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9yaW8uYwppbmRleCAzZWZmMmMzLi4xNDIzMmQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9yaW8uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9yaW8uYwpAQCAtNDgyLDcgKzQ4Miw3IEBACiB9CiAKIC8qKgotICogcmlvX2h3X2FkZF9vdXRiX21lc3NhZ2UgLSBBZGQgbWVzc2FnZSB0byB0aGUgTVBDODV4eCBvdXRib3VuZCBtZXNzYWdlIHF1ZXVlCisgKiBmc2xfYWRkX291dGJfbWVzc2FnZSAtIEFkZCBtZXNzYWdlIHRvIHRoZSBNUEM4NXh4IG91dGJvdW5kIG1lc3NhZ2UgcXVldWUKICAqIEBtcG9ydDogTWFzdGVyIHBvcnQgd2l0aCBvdXRib3VuZCBtZXNzYWdlIHF1ZXVlCiAgKiBAcmRldjogVGFyZ2V0IG9mIG91dGJvdW5kIG1lc3NhZ2UKICAqIEBtYm94OiBPdXRib3VuZCBtYWlsYm94CkBAIC00OTIsOCArNDkyLDggQEAKICAqIEFkZHMgdGhlIEBidWZmZXIgbWVzc2FnZSB0byB0aGUgTVBDODV4eCBvdXRib3VuZCBtZXNzYWdlIHF1ZXVlLiBSZXR1cm5zCiAgKiAlMCBvbiBzdWNjZXNzIG9yICUtRUlOVkFMIG9uIGZhaWx1cmUuCiAgKi8KLWludAotcmlvX2h3X2FkZF9vdXRiX21lc3NhZ2Uoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHN0cnVjdCByaW9fZGV2ICpyZGV2LCBpbnQgbWJveCwKK3N0YXRpYyBpbnQKK2ZzbF9hZGRfb3V0Yl9tZXNzYWdlKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBzdHJ1Y3QgcmlvX2RldiAqcmRldiwgaW50IG1ib3gsCiAJCQl2b2lkICpidWZmZXIsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHJpb19wcml2ICpwcml2ID0gbXBvcnQtPnByaXY7CkBAIC01MDIsOSArNTAyLDggQEAKIAkJCQkJKyBwcml2LT5tc2dfdHhfcmluZy50eF9zbG90OwogCWludCByZXQgPSAwOwogCi0JcHJfZGVidWcKLQkgICAgKCJSSU86IHJpb19od19hZGRfb3V0Yl9tZXNzYWdlKCk6IGRlc3RpZCAlNC40eCBtYm94ICVkIGJ1ZmZlciAlOC44eCBsZW4gJTguOHhcbiIsCi0JICAgICByZGV2LT5kZXN0aWQsIG1ib3gsIChpbnQpYnVmZmVyLCBsZW4pOworCXByX2RlYnVnKCJSSU86IGZzbF9hZGRfb3V0Yl9tZXNzYWdlKCk6IGRlc3RpZCAlNC40eCBtYm94ICVkIGJ1ZmZlciAiIFwKKwkJICIlOC44eCBsZW4gJTguOHhcbiIsIHJkZXYtPmRlc3RpZCwgbWJveCwgKGludClidWZmZXIsIGxlbik7CiAKIAlpZiAoKGxlbiA8IDgpIHx8IChsZW4gPiBSSU9fTUFYX01TR19TSVpFKSkgewogCQlyZXQgPSAtRUlOVkFMOwpAQCAtNTU0LDggKzU1Myw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwocmlvX2h3X2FkZF9vdXRiX21lc3NhZ2UpOwotCiAvKioKICAqIGZzbF9yaW9fdHhfaGFuZGxlciAtIE1QQzg1eHggb3V0Ym91bmQgbWVzc2FnZSBpbnRlcnJ1cHQgaGFuZGxlcgogICogQGlycTogTGludXggaW50ZXJydXB0IG51bWJlcgpAQCAtNjAwLDcgKzU5Nyw3IEBACiB9CiAKIC8qKgotICogcmlvX29wZW5fb3V0Yl9tYm94IC0gSW5pdGlhbGl6ZSBNUEM4NXh4IG91dGJvdW5kIG1haWxib3gKKyAqIGZzbF9vcGVuX291dGJfbWJveCAtIEluaXRpYWxpemUgTVBDODV4eCBvdXRib3VuZCBtYWlsYm94CiAgKiBAbXBvcnQ6IE1hc3RlciBwb3J0IGltcGxlbWVudGluZyB0aGUgb3V0Ym91bmQgbWVzc2FnZSB1bml0CiAgKiBAZGV2X2lkOiBEZXZpY2Ugc3BlY2lmaWMgcG9pbnRlciB0byBwYXNzIG9uIGV2ZW50CiAgKiBAbWJveDogTWFpbGJveCB0byBvcGVuCkBAIC02MTAsNyArNjA3LDggQEAKICAqIGFuZCBlbmFibGVzIHRoZSBvdXRib3VuZCBtZXNzYWdlIHVuaXQuIFJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQKICAqICUtRUlOVkFMIG9yICUtRU5PTUVNIG9uIGZhaWx1cmUuCiAgKi8KLWludCByaW9fb3Blbl9vdXRiX21ib3goc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHZvaWQgKmRldl9pZCwgaW50IG1ib3gsIGludCBlbnRyaWVzKQorc3RhdGljIGludAorZnNsX29wZW5fb3V0Yl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCB2b2lkICpkZXZfaWQsIGludCBtYm94LCBpbnQgZW50cmllcykKIHsKIAlpbnQgaSwgaiwgcmMgPSAwOwogCXN0cnVjdCByaW9fcHJpdiAqcHJpdiA9IG1wb3J0LT5wcml2OwpAQCAtNzA2LDE0ICs3MDQsMTQgQEAKIH0KIAogLyoqCi0gKiByaW9fY2xvc2Vfb3V0Yl9tYm94IC0gU2h1dCBkb3duIE1QQzg1eHggb3V0Ym91bmQgbWFpbGJveAorICogZnNsX2Nsb3NlX291dGJfbWJveCAtIFNodXQgZG93biBNUEM4NXh4IG91dGJvdW5kIG1haWxib3gKICAqIEBtcG9ydDogTWFzdGVyIHBvcnQgaW1wbGVtZW50aW5nIHRoZSBvdXRib3VuZCBtZXNzYWdlIHVuaXQKICAqIEBtYm94OiBNYWlsYm94IHRvIGNsb3NlCiAgKgogICogRGlzYWJsZXMgdGhlIG91dGJvdW5kIG1lc3NhZ2UgdW5pdCwgZnJlZSBhbGwgYnVmZmVycywgYW5kCiAgKiBmcmVlcyB0aGUgb3V0Ym91bmQgbWVzc2FnZSBpbnRlcnJ1cHQuCiAgKi8KLXZvaWQgcmlvX2Nsb3NlX291dGJfbWJveChzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCwgaW50IG1ib3gpCitzdGF0aWMgdm9pZCBmc2xfY2xvc2Vfb3V0Yl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgbWJveCkKIHsKIAlzdHJ1Y3QgcmlvX3ByaXYgKnByaXYgPSBtcG9ydC0+cHJpdjsKIAkvKiBEaXNhYmxlIGluYm91bmQgbWVzc2FnZSB1bml0ICovCkBAIC03NzAsNyArNzY4LDcgQEAKIH0KIAogLyoqCi0gKiByaW9fb3Blbl9pbmJfbWJveCAtIEluaXRpYWxpemUgTVBDODV4eCBpbmJvdW5kIG1haWxib3gKKyAqIGZzbF9vcGVuX2luYl9tYm94IC0gSW5pdGlhbGl6ZSBNUEM4NXh4IGluYm91bmQgbWFpbGJveAogICogQG1wb3J0OiBNYXN0ZXIgcG9ydCBpbXBsZW1lbnRpbmcgdGhlIGluYm91bmQgbWVzc2FnZSB1bml0CiAgKiBAZGV2X2lkOiBEZXZpY2Ugc3BlY2lmaWMgcG9pbnRlciB0byBwYXNzIG9uIGV2ZW50CiAgKiBAbWJveDogTWFpbGJveCB0byBvcGVuCkBAIC03ODAsNyArNzc4LDggQEAKICAqIGFuZCBlbmFibGVzIHRoZSBpbmJvdW5kIG1lc3NhZ2UgdW5pdC4gUmV0dXJucyAlMCBvbiBzdWNjZXNzCiAgKiBhbmQgJS1FSU5WQUwgb3IgJS1FTk9NRU0gb24gZmFpbHVyZS4KICAqLwotaW50IHJpb19vcGVuX2luYl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCB2b2lkICpkZXZfaWQsIGludCBtYm94LCBpbnQgZW50cmllcykKK3N0YXRpYyBpbnQKK2ZzbF9vcGVuX2luYl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCB2b2lkICpkZXZfaWQsIGludCBtYm94LCBpbnQgZW50cmllcykKIHsKIAlpbnQgaSwgcmMgPSAwOwogCXN0cnVjdCByaW9fcHJpdiAqcHJpdiA9IG1wb3J0LT5wcml2OwpAQCAtODQ0LDE0ICs4NDMsMTQgQEAKIH0KIAogLyoqCi0gKiByaW9fY2xvc2VfaW5iX21ib3ggLSBTaHV0IGRvd24gTVBDODV4eCBpbmJvdW5kIG1haWxib3gKKyAqIGZzbF9jbG9zZV9pbmJfbWJveCAtIFNodXQgZG93biBNUEM4NXh4IGluYm91bmQgbWFpbGJveAogICogQG1wb3J0OiBNYXN0ZXIgcG9ydCBpbXBsZW1lbnRpbmcgdGhlIGluYm91bmQgbWVzc2FnZSB1bml0CiAgKiBAbWJveDogTWFpbGJveCB0byBjbG9zZQogICoKICAqIERpc2FibGVzIHRoZSBpbmJvdW5kIG1lc3NhZ2UgdW5pdCwgZnJlZSBhbGwgYnVmZmVycywgYW5kCiAgKiBmcmVlcyB0aGUgaW5ib3VuZCBtZXNzYWdlIGludGVycnVwdC4KICAqLwotdm9pZCByaW9fY2xvc2VfaW5iX21ib3goc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIGludCBtYm94KQorc3RhdGljIHZvaWQgZnNsX2Nsb3NlX2luYl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgbWJveCkKIHsKIAlzdHJ1Y3QgcmlvX3ByaXYgKnByaXYgPSBtcG9ydC0+cHJpdjsKIAkvKiBEaXNhYmxlIGluYm91bmQgbWVzc2FnZSB1bml0ICovCkBAIC04NjYsNyArODY1LDcgQEAKIH0KIAogLyoqCi0gKiByaW9faHdfYWRkX2luYl9idWZmZXIgLSBBZGQgYnVmZmVyIHRvIHRoZSBNUEM4NXh4IGluYm91bmQgbWVzc2FnZSBxdWV1ZQorICogZnNsX2FkZF9pbmJfYnVmZmVyIC0gQWRkIGJ1ZmZlciB0byB0aGUgTVBDODV4eCBpbmJvdW5kIG1lc3NhZ2UgcXVldWUKICAqIEBtcG9ydDogTWFzdGVyIHBvcnQgaW1wbGVtZW50aW5nIHRoZSBpbmJvdW5kIG1lc3NhZ2UgdW5pdAogICogQG1ib3g6IEluYm91bmQgbWFpbGJveCBudW1iZXIKICAqIEBidWY6IEJ1ZmZlciB0byBhZGQgdG8gaW5ib3VuZCBxdWV1ZQpAQCAtODc0LDEyICs4NzMsMTIgQEAKICAqIEFkZHMgdGhlIEBidWYgYnVmZmVyIHRvIHRoZSBNUEM4NXh4IGluYm91bmQgbWVzc2FnZSBxdWV1ZS4gUmV0dXJucwogICogJTAgb24gc3VjY2VzcyBvciAlLUVJTlZBTCBvbiBmYWlsdXJlLgogICovCi1pbnQgcmlvX2h3X2FkZF9pbmJfYnVmZmVyKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgbWJveCwgdm9pZCAqYnVmKQorc3RhdGljIGludCBmc2xfYWRkX2luYl9idWZmZXIoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIGludCBtYm94LCB2b2lkICpidWYpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgcmlvX3ByaXYgKnByaXYgPSBtcG9ydC0+cHJpdjsKIAotCXByX2RlYnVnKCJSSU86IHJpb19od19hZGRfaW5iX2J1ZmZlcigpLCBtc2dfcnhfcmluZy5yeF9zbG90ICVkXG4iLAorCXByX2RlYnVnKCJSSU86IGZzbF9hZGRfaW5iX2J1ZmZlcigpLCBtc2dfcnhfcmluZy5yeF9zbG90ICVkXG4iLAogCQkgcHJpdi0+bXNnX3J4X3Jpbmcucnhfc2xvdCk7CiAKIAlpZiAocHJpdi0+bXNnX3J4X3JpbmcudmlydF9idWZmZXJbcHJpdi0+bXNnX3J4X3Jpbmcucnhfc2xvdF0pIHsKQEAgLTg5OCwxNyArODk3LDE1IEBACiAJcmV0dXJuIHJjOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChyaW9faHdfYWRkX2luYl9idWZmZXIpOwotCiAvKioKLSAqIHJpb19od19nZXRfaW5iX21lc3NhZ2UgLSBGZXRjaCBpbmJvdW5kIG1lc3NhZ2UgZnJvbSB0aGUgTVBDODV4eCBtZXNzYWdlIHVuaXQKKyAqIGZzbF9nZXRfaW5iX21lc3NhZ2UgLSBGZXRjaCBpbmJvdW5kIG1lc3NhZ2UgZnJvbSB0aGUgTVBDODV4eCBtZXNzYWdlIHVuaXQKICAqIEBtcG9ydDogTWFzdGVyIHBvcnQgaW1wbGVtZW50aW5nIHRoZSBpbmJvdW5kIG1lc3NhZ2UgdW5pdAogICogQG1ib3g6IEluYm91bmQgbWFpbGJveCBudW1iZXIKICAqCiAgKiBHZXRzIHRoZSBuZXh0IGF2YWlsYWJsZSBpbmJvdW5kIG1lc3NhZ2UgZnJvbSB0aGUgaW5ib3VuZCBtZXNzYWdlIHF1ZXVlLgogICogQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIGlzIHJldHVybmVkIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBmYWlsdXJlLgogICovCi12b2lkICpyaW9faHdfZ2V0X2luYl9tZXNzYWdlKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgbWJveCkKK3N0YXRpYyB2b2lkICpmc2xfZ2V0X2luYl9tZXNzYWdlKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgbWJveCkKIHsKIAlzdHJ1Y3QgcmlvX3ByaXYgKnByaXYgPSBtcG9ydC0+cHJpdjsKIAl1MzIgcGh5c19idWYsIHZpcnRfYnVmOwpAQCAtOTQ1LDggKzk0Miw2IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwocmlvX2h3X2dldF9pbmJfbWVzc2FnZSk7Ci0KIC8qKgogICogZnNsX3Jpb19kYmVsbF9oYW5kbGVyIC0gTVBDODV4eCBkb29yYmVsbCBpbnRlcnJ1cHQgaGFuZGxlcgogICogQGlycTogTGludXggaW50ZXJydXB0IG51bWJlcgpAQCAtMTI5MywyOCArMTI4OCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgY2hhciAqY21kbGluZSA9IE5VTEw7Ci0KLXN0YXRpYyBpbnQgZnNsX3Jpb19nZXRfaGRpZChpbnQgaW5kZXgpCi17Ci0JLyogWFhYIE5lZWQgdG8gcGFyc2UgbXVsdGlwbGUgZW50cmllcyBpbiBzb21lIGZvcm1hdCAqLwotCWlmICghY21kbGluZSkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIHNpbXBsZV9zdHJ0b2woY21kbGluZSwgTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX3Jpb19nZXRfY21kbGluZShjaGFyICpzKQotewotCWlmICghcykKLQkJcmV0dXJuIDA7Ci0KLQljbWRsaW5lID0gczsKLQlyZXR1cm4gMTsKLX0KLQotX19zZXR1cCgicmlvaGRpZD0iLCBmc2xfcmlvX2dldF9jbWRsaW5lKTsKLQogc3RhdGljIGlubGluZSB2b2lkIGZzbF9yaW9faW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBjY3NyKQogewogCWNvbnN0IGNoYXIgKnN0cjsKQEAgLTE0MzEsMTMgKzE0MDQsMTkgQEAKIAlvcHMtPmN3cml0ZSA9IGZzbF9yaW9fY29uZmlnX3dyaXRlOwogCW9wcy0+ZHNlbmQgPSBmc2xfcmlvX2Rvb3JiZWxsX3NlbmQ7CiAJb3BzLT5wd2VuYWJsZSA9IGZzbF9yaW9fcHdfZW5hYmxlOworCW9wcy0+b3Blbl9vdXRiX21ib3ggPSBmc2xfb3Blbl9vdXRiX21ib3g7CisJb3BzLT5vcGVuX2luYl9tYm94ID0gZnNsX29wZW5faW5iX21ib3g7CisJb3BzLT5jbG9zZV9vdXRiX21ib3ggPSBmc2xfY2xvc2Vfb3V0Yl9tYm94OworCW9wcy0+Y2xvc2VfaW5iX21ib3ggPSBmc2xfY2xvc2VfaW5iX21ib3g7CisJb3BzLT5hZGRfb3V0Yl9tZXNzYWdlID0gZnNsX2FkZF9vdXRiX21lc3NhZ2U7CisJb3BzLT5hZGRfaW5iX2J1ZmZlciA9IGZzbF9hZGRfaW5iX2J1ZmZlcjsKKwlvcHMtPmdldF9pbmJfbWVzc2FnZSA9IGZzbF9nZXRfaW5iX21lc3NhZ2U7CiAKIAlwb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJpb19tcG9ydCksIEdGUF9LRVJORUwpOwogCWlmICghcG9ydCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3BvcnQ7CiAJfQotCXBvcnQtPmlkID0gMDsKIAlwb3J0LT5pbmRleCA9IDA7CiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJpb19wcml2KSwgR0ZQX0tFUk5FTCk7CkBAIC0xNDUzLDYgKzE0MzIsMTQgQEAKIAlwb3J0LT5pb3Jlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCXBvcnQtPmlvcmVzLm5hbWUgPSAicmlvX2lvX3dpbiI7CiAKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZwb3J0LT5pb3JlcykgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiUklPOiBFcnJvciByZXF1ZXN0aW5nIG1hc3RlciBwb3J0IHJlZ2lvbiIKKwkJCSIgMHglMDE2bGx4LTB4JTAxNmxseFxuIiwKKwkJCSh1NjQpcG9ydC0+aW9yZXMuc3RhcnQsICh1NjQpcG9ydC0+aW9yZXMuZW5kKTsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3JlczsKKwl9CisKIAlwcml2LT5wd2lycSAgID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5kZXYub2Zfbm9kZSwgMCk7CiAJcHJpdi0+YmVsbGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+ZGV2Lm9mX25vZGUsIDIpOwogCXByaXYtPnR4aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5kZXYub2Zfbm9kZSwgMyk7CkBAIC0xNDY4LDggKzE0NTUsNiBAQAogCXByaXYtPmRldiA9ICZkZXYtPmRldjsKIAogCXBvcnQtPm9wcyA9IG9wczsKLQlwb3J0LT5ob3N0X2RldmljZWlkID0gZnNsX3Jpb19nZXRfaGRpZChwb3J0LT5pZCk7Ci0KIAlwb3J0LT5wcml2ID0gcHJpdjsKIAlwb3J0LT5waHlzX2VmcHRyID0gMHgxMDA7CiAJcmlvX3JlZ2lzdGVyX21wb3J0KHBvcnQpOwpAQCAtMTU1OSw2ICsxNTQ0LDcgQEAKIAlyZXR1cm4gMDsKIGVycjoKIAlpb3VubWFwKHByaXYtPnJlZ3Nfd2luKTsKK2Vycl9yZXM6CiAJa2ZyZWUocHJpdik7CiBlcnJfcHJpdjoKIAlrZnJlZShwb3J0KTsKQEAgLTE1NzIsMTggKzE1NTgsMTAgQEAKICAqLwogc3RhdGljIGludCBfX2RldmluaXQgZnNsX29mX3Jpb19ycG5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWludCByYzsKIAlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIHVwIFJhcGlkSU8gcGVlci10by1wZWVyIG5ldHdvcmsgJXNcbiIsCiAJCQlkZXYtPmRldi5vZl9ub2RlLT5mdWxsX25hbWUpOwogCi0JcmMgPSBmc2xfcmlvX3NldHVwKGRldik7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKLQotCS8qIEVudW1lcmF0ZSBhbGwgcmVnaXN0ZXJlZCBwb3J0cyAqLwotCXJjID0gcmlvX2luaXRfbXBvcnRzKCk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOworCXJldHVybiBmc2xfcmlvX3NldHVwKGRldik7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfb2ZfcmlvX3Jwbl9pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYwppbmRleCA2MzIzZTcwLi5hZWRhNGM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCkBAIC03OCwxOSArNzgsMTkgQEAKIAlyZXR1cm4gaXJxOwogfQogCi1zdGF0aWMgdm9pZCBpODI1OV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCitzdGF0aWMgdm9pZCBpODI1OV9tYXNrX2FuZF9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7Ci0JaWYgKGlycV9uciA+IDcpIHsKLQkJY2FjaGVkX0ExIHw9IDEgPDwgKGlycV9uci04KTsKKwlpZiAoZC0+aXJxID4gNykgeworCQljYWNoZWRfQTEgfD0gMSA8PCAoZC0+aXJxLTgpOwogCQlpbmIoMHhBMSk7IAkvKiBEVU1NWSAqLwogCQlvdXRiKGNhY2hlZF9BMSwgMHhBMSk7CiAJCW91dGIoMHgyMCwgMHhBMCk7CS8qIE5vbi1zcGVjaWZpYyBFT0kgKi8KIAkJb3V0YigweDIwLCAweDIwKTsJLyogTm9uLXNwZWNpZmljIEVPSSB0byBjYXNjYWRlICovCiAJfSBlbHNlIHsKLQkJY2FjaGVkXzIxIHw9IDEgPDwgaXJxX25yOworCQljYWNoZWRfMjEgfD0gMSA8PCBkLT5pcnE7CiAJCWluYigweDIxKTsgCS8qIERVTU1ZICovCiAJCW91dGIoY2FjaGVkXzIxLCAweDIxKTsKIAkJb3V0YigweDIwLCAweDIwKTsJLyogTm9uLXNwZWNpZmljIEVPSSAqLwpAQCAtMTA0LDQyICsxMDQsNDIgQEAKIAlvdXRiKGNhY2hlZF8yMSwweDIxKTsKIH0KIAotc3RhdGljIHZvaWQgaTgyNTlfbWFza19pcnEodW5zaWduZWQgaW50IGlycV9ucikKK3N0YXRpYyB2b2lkIGk4MjU5X21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcHJfZGVidWcoImk4MjU5X21hc2tfaXJxKCVkKVxuIiwgaXJxX25yKTsKKwlwcl9kZWJ1ZygiaTgyNTlfbWFza19pcnEoJWQpXG4iLCBkLT5pcnEpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7Ci0JaWYgKGlycV9uciA8IDgpCi0JCWNhY2hlZF8yMSB8PSAxIDw8IGlycV9ucjsKKwlpZiAoZC0+aXJxIDwgOCkKKwkJY2FjaGVkXzIxIHw9IDEgPDwgZC0+aXJxOwogCWVsc2UKLQkJY2FjaGVkX0ExIHw9IDEgPDwgKGlycV9uci04KTsKLQlpODI1OV9zZXRfaXJxX21hc2soaXJxX25yKTsKKwkJY2FjaGVkX0ExIHw9IDEgPDwgKGQtPmlycS04KTsKKwlpODI1OV9zZXRfaXJxX21hc2soZC0+aXJxKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBpODI1OV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCitzdGF0aWMgdm9pZCBpODI1OV91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcHJfZGVidWcoImk4MjU5X3VubWFza19pcnEoJWQpXG4iLCBpcnFfbnIpOworCXByX2RlYnVnKCJpODI1OV91bm1hc2tfaXJxKCVkKVxuIiwgZC0+aXJxKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwotCWlmIChpcnFfbnIgPCA4KQotCQljYWNoZWRfMjEgJj0gfigxIDw8IGlycV9ucik7CisJaWYgKGQtPmlycSA8IDgpCisJCWNhY2hlZF8yMSAmPSB+KDEgPDwgZC0+aXJxKTsKIAllbHNlCi0JCWNhY2hlZF9BMSAmPSB+KDEgPDwgKGlycV9uci04KSk7Ci0JaTgyNTlfc2V0X2lycV9tYXNrKGlycV9ucik7CisJCWNhY2hlZF9BMSAmPSB+KDEgPDwgKGQtPmlycS04KSk7CisJaTgyNTlfc2V0X2lycV9tYXNrKGQtPmlycSk7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpODI1OV9waWMgPSB7CiAJLm5hbWUJCT0gImk4MjU5IiwKLQkubWFzawkJPSBpODI1OV9tYXNrX2lycSwKLQkuZGlzYWJsZQk9IGk4MjU5X21hc2tfaXJxLAotCS51bm1hc2sJCT0gaTgyNTlfdW5tYXNrX2lycSwKLQkubWFza19hY2sJPSBpODI1OV9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfbWFzawk9IGk4MjU5X21hc2tfaXJxLAorCS5pcnFfZGlzYWJsZQk9IGk4MjU5X21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gaTgyNTlfdW5tYXNrX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaTgyNTlfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGljMV9pb3JlcyA9IHsKQEAgLTE4OCw3ICsxODgsNyBAQAogc3RhdGljIHZvaWQgaTgyNTlfaG9zdF91bm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxKQogewogCS8qIE1ha2Ugc3VyZSBpcnEgaXMgbWFza2VkIGluIGhhcmR3YXJlICovCi0JaTgyNTlfbWFza19pcnEodmlycSk7CisJaTgyNTlfbWFza19pcnEoaXJxX2dldF9pcnFfZGF0YSh2aXJxKSk7CiAKIAkvKiByZW1vdmUgY2hpcCBhbmQgaGFuZGxlciAqLwogCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKaW5kZXggZDdiOWI5Yy4uNDk3MDQ3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKQEAgLTUyMywxMCArNTIzLDEwIEBACiAKICNkZWZpbmUgaXBpY19pcnFfdG9faHcodmlycSkJKCh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycSkKIAotc3RhdGljIHZvaWQgaXBpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgaXBpY191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlwaWNfaXJxX3RvX2h3KHZpcnEpOworCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyhkLT5pcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKQEAgLTUzOSwxMCArNTM5LDEwIEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBpcGljX21hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgaXBpY19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKHZpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyh2aXJxKTsKKwlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcoZC0+aXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCkBAIC01NTksMTAgKzU1OSwxMCBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaXBpY19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgaXBpY19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlwaWNfaXJxX3RvX2h3KHZpcnEpOworCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyhkLT5pcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKQEAgLTU3OCwxMCArNTc4LDEwIEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBpcGljX21hc2tfaXJxX2FuZF9hY2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBpcGljX21hc2tfaXJxX2FuZF9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycSh2aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcodmlycSk7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlwaWNfaXJxX3RvX2h3KGQtPmlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIApAQCAtNjAxLDExICs2MDEsMTEgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgaXBpY19zZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCitzdGF0aWMgaW50IGlwaWNfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlwaWNfaXJxX3RvX2h3KHZpcnEpOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOworCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyhkLT5pcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGQtPmlycSk7CiAJdW5zaWduZWQgaW50IHZvbGQsIHZuZXcsIGVkaWJpdDsKIAogCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKQEAgLTYzMCwxMCArNjMwLDEwIEBACiAJaWYgKGZsb3dfdHlwZSAmIElSUV9UWVBFX0xFVkVMX0xPVykgIHsKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7Ci0JCWRlc2MtPmNoaXAgPSAmaXBpY19sZXZlbF9pcnFfY2hpcDsKKwkJZGVzYy0+aXJxX2RhdGEuY2hpcCA9ICZpcGljX2xldmVsX2lycV9jaGlwOwogCX0gZWxzZSB7CiAJCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7Ci0JCWRlc2MtPmNoaXAgPSAmaXBpY19lZGdlX2lycV9jaGlwOworCQlkZXNjLT5pcnFfZGF0YS5jaGlwID0gJmlwaWNfZWRnZV9pcnFfY2hpcDsKIAl9CiAKIAkvKiBvbmx5IEVYVCBJUlEgc2Vuc2VzIGFyZSBwcm9ncmFtbWFibGUgb24gaXBpYwpAQCAtNjYxLDE5ICs2NjEsMTkgQEAKIC8qIGxldmVsIGludGVycnVwdHMgYW5kIGVkZ2UgaW50ZXJydXB0cyBoYXZlIGRpZmZlcmVudCBhY2sgb3BlcmF0aW9ucyAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcGljX2xldmVsX2lycV9jaGlwID0gewogCS5uYW1lCQk9ICJJUElDIiwKLQkudW5tYXNrCQk9IGlwaWNfdW5tYXNrX2lycSwKLQkubWFzawkJPSBpcGljX21hc2tfaXJxLAotCS5tYXNrX2Fjawk9IGlwaWNfbWFza19pcnEsCi0JLnNldF90eXBlCT0gaXBpY19zZXRfaXJxX3R5cGUsCisJLmlycV91bm1hc2sJPSBpcGljX3VubWFza19pcnEsCisJLmlycV9tYXNrCT0gaXBpY19tYXNrX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaXBpY19tYXNrX2lycSwKKwkuaXJxX3NldF90eXBlCT0gaXBpY19zZXRfaXJxX3R5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwaWNfZWRnZV9pcnFfY2hpcCA9IHsKIAkubmFtZQkJPSAiSVBJQyIsCi0JLnVubWFzawkJPSBpcGljX3VubWFza19pcnEsCi0JLm1hc2sJCT0gaXBpY19tYXNrX2lycSwKLQkubWFza19hY2sJPSBpcGljX21hc2tfaXJxX2FuZF9hY2ssCi0JLmFjawkJPSBpcGljX2Fja19pcnEsCi0JLnNldF90eXBlCT0gaXBpY19zZXRfaXJxX3R5cGUsCisJLmlycV91bm1hc2sJPSBpcGljX3VubWFza19pcnEsCisJLmlycV9tYXNrCT0gaXBpY19tYXNrX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaXBpY19tYXNrX2lycV9hbmRfYWNrLAorCS5pcnFfYWNrCT0gaXBpY19hY2tfaXJxLAorCS5pcnFfc2V0X3R5cGUJPSBpcGljX3NldF9pcnFfdHlwZSwKIH07CiAKIHN0YXRpYyBpbnQgaXBpY19ob3N0X21hdGNoKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eF9waWMuYwppbmRleCA4YzI3ZDI2Li4xYTc1YTdmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eF9waWMuYwpAQCAtMjUsMTAgKzI1LDEwIEBACiAKIGludCBjcG1fZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXN0YXRpYyB2b2lkIG1wYzh4eF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjOHh4X3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCWludAliaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAKIAliaXQgPSBpcnFfbnIgJiAweDFmOwogCXdvcmQgPSBpcnFfbnIgPj4gNTsKQEAgLTM3LDEwICszNywxMCBAQAogCW91dF9iZTMyKCZzaXVfcmVnLT5zY19zaW1hc2ssIHBwY19jYWNoZWRfaXJxX21hc2tbd29yZF0pOwogfQogCi1zdGF0aWMgdm9pZCBtcGM4eHhfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBtcGM4eHhfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCWludAliaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAKIAliaXQgPSBpcnFfbnIgJiAweDFmOwogCXdvcmQgPSBpcnFfbnIgPj4gNTsKQEAgLTQ5LDE5ICs0OSwxOSBAQAogCW91dF9iZTMyKCZzaXVfcmVnLT5zY19zaW1hc2ssIHBwY19jYWNoZWRfaXJxX21hc2tbd29yZF0pOwogfQogCi1zdGF0aWMgdm9pZCBtcGM4eHhfYWNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjOHh4X2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaW50CWJpdDsKLQl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBpcnFfbnIgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKIAogCWJpdCA9IGlycV9uciAmIDB4MWY7CiAJb3V0X2JlMzIoJnNpdV9yZWctPnNjX3NpcGVuZCwgMSA8PCAoMzEtYml0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wYzh4eF9lbmRfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXBjOHh4X2VuZF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCWludCBiaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAKIAliaXQgPSBpcnFfbnIgJiAweDFmOwogCXdvcmQgPSBpcnFfbnIgPj4gNTsKQEAgLTcwLDkgKzcwLDkgQEAKIAlvdXRfYmUzMigmc2l1X3JlZy0+c2Nfc2ltYXNrLCBwcGNfY2FjaGVkX2lycV9tYXNrW3dvcmRdKTsKIH0KIAotc3RhdGljIGludCBtcGM4eHhfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQorc3RhdGljIGludCBtcGM4eHhfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhkLT5pcnEpOwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9MRVZFTCk7CiAJZGVzYy0+c3RhdHVzIHw9IGZsb3dfdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7CkBAIC04MCw3ICs4MCw3IEBACiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAKIAlpZiAoZmxvd190eXBlICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSB7Ci0JCWlycV9od19udW1iZXJfdCBodyA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKKwkJaXJxX2h3X251bWJlcl90IGh3ID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CiAJCXVuc2lnbmVkIGludCBzaWVsID0gaW5fYmUzMigmc2l1X3JlZy0+c2Nfc2llbCk7CiAKIAkJLyogb25seSBleHRlcm5hbCBJUlEgc2Vuc2VzIGFyZSBwcm9ncmFtbWFibGUgKi8KQEAgLTk1LDExICs5NSwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzh4eF9waWMgPSB7CiAJLm5hbWUgPSAiTVBDOFhYIFNJVSIsCi0JLnVubWFzayA9IG1wYzh4eF91bm1hc2tfaXJxLAotCS5tYXNrID0gbXBjOHh4X21hc2tfaXJxLAotCS5hY2sgPSBtcGM4eHhfYWNrLAotCS5lb2kgPSBtcGM4eHhfZW5kX2lycSwKLQkuc2V0X3R5cGUgPSBtcGM4eHhfc2V0X2lycV90eXBlLAorCS5pcnFfdW5tYXNrID0gbXBjOHh4X3VubWFza19pcnEsCisJLmlycV9tYXNrID0gbXBjOHh4X21hc2tfaXJxLAorCS5pcnFfYWNrID0gbXBjOHh4X2FjaywKKwkuaXJxX2VvaSA9IG1wYzh4eF9lbmRfaXJxLAorCS5pcnFfc2V0X3R5cGUgPSBtcGM4eHhfc2V0X2lycV90eXBlLAogfTsKIAogdW5zaWduZWQgaW50IG1wYzh4eF9nZXRfaXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYwppbmRleCBjNDhjZDgxLi4yMzJlNzAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKQEAgLTE1NSw0MyArMTU1LDQzIEBACiAJCQkJCQkgICAgIDMyIC0gZmZzKG1hc2spKSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wYzh4eHhfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1wYzh4eHhfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSAmbXBjOHh4eF9nYy0+bW1fZ2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7CiAKLQlzZXRiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lNUiwgbXBjOHh4eF9ncGlvMm1hc2sodmlycV90b19odyh2aXJxKSkpOworCXNldGJpdHMzMihtbS0+cmVncyArIEdQSU9fSU1SLCBtcGM4eHh4X2dwaW8ybWFzayh2aXJxX3RvX2h3KGQtPmlycSkpKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgbXBjOHh4eF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1wYzh4eHhfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gJm1wYzh4eHhfZ2MtPm1tX2djOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCi0JY2xyYml0czMyKG1tLT5yZWdzICsgR1BJT19JTVIsIG1wYzh4eHhfZ3BpbzJtYXNrKHZpcnFfdG9faHcodmlycSkpKTsKKwljbHJiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lNUiwgbXBjOHh4eF9ncGlvMm1hc2sodmlycV90b19odyhkLT5pcnEpKSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wYzh4eHhfaXJxX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG1wYzh4eHhfaXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSAmbXBjOHh4eF9nYy0+bW1fZ2M7CiAKLQlvdXRfYmUzMihtbS0+cmVncyArIEdQSU9fSUVSLCBtcGM4eHh4X2dwaW8ybWFzayh2aXJxX3RvX2h3KHZpcnEpKSk7CisJb3V0X2JlMzIobW0tPnJlZ3MgKyBHUElPX0lFUiwgbXBjOHh4eF9ncGlvMm1hc2sodmlycV90b19odyhkLT5pcnEpKSk7CiB9CiAKLXN0YXRpYyBpbnQgbXBjOHh4eF9pcnFfc2V0X3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCitzdGF0aWMgaW50IG1wYzh4eHhfaXJxX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbSA9ICZtcGM4eHh4X2djLT5tbV9nYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xOTksMTQgKzE5OSwxNCBAQAogCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCQlzZXRiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lDUiwKLQkJCSAgbXBjOHh4eF9ncGlvMm1hc2sodmlycV90b19odyh2aXJxKSkpOworCQkJICBtcGM4eHh4X2dwaW8ybWFzayh2aXJxX3RvX2h3KGQtPmlycSkpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAogCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCQljbHJiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lDUiwKLQkJCSAgbXBjOHh4eF9ncGlvMm1hc2sodmlycV90b19odyh2aXJxKSkpOworCQkJICBtcGM4eHh4X2dwaW8ybWFzayh2aXJxX3RvX2h3KGQtPmlycSkpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIApAQCAtMjE3LDExICsyMTcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtcGM1MTJ4X2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3N0YXRpYyBpbnQgbXBjNTEyeF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewotCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gJm1wYzh4eHhfZ2MtPm1tX2djOwotCXVuc2lnbmVkIGxvbmcgZ3BpbyA9IHZpcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgbG9uZyBncGlvID0gdmlycV90b19odyhkLT5pcnEpOwogCXZvaWQgX19pb21lbSAqcmVnOwogCXVuc2lnbmVkIGludCBzaGlmdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjY0LDEwICsyNjQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM4eHh4X2lycV9jaGlwID0gewogCS5uYW1lCQk9ICJtcGM4eHh4LWdwaW8iLAotCS51bm1hc2sJCT0gbXBjOHh4eF9pcnFfdW5tYXNrLAotCS5tYXNrCQk9IG1wYzh4eHhfaXJxX21hc2ssCi0JLmFjawkJPSBtcGM4eHh4X2lycV9hY2ssCi0JLnNldF90eXBlCT0gbXBjOHh4eF9pcnFfc2V0X3R5cGUsCisJLmlycV91bm1hc2sJPSBtcGM4eHh4X2lycV91bm1hc2ssCisJLmlycV9tYXNrCT0gbXBjOHh4eF9pcnFfbWFzaywKKwkuaXJxX2Fjawk9IG1wYzh4eHhfaXJxX2FjaywKKwkuaXJxX3NldF90eXBlCT0gbXBjOHh4eF9pcnFfc2V0X3R5cGUsCiB9OwogCiBzdGF0aWMgaW50IG1wYzh4eHhfZ3Bpb19pcnFfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSBoLT5ob3N0X2RhdGE7CiAKIAlpZiAobXBjOHh4eF9nYy0+b2ZfZGV2X2lkX2RhdGEpCi0JCW1wYzh4eHhfaXJxX2NoaXAuc2V0X3R5cGUgPSBtcGM4eHh4X2djLT5vZl9kZXZfaWRfZGF0YTsKKwkJbXBjOHh4eF9pcnFfY2hpcC5pcnFfc2V0X3R5cGUgPSBtcGM4eHh4X2djLT5vZl9kZXZfaWRfZGF0YTsKIAogCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsIGgtPmhvc3RfZGF0YSk7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZtcGM4eHh4X2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKQEAgLTMxMCw2ICszMTAsNyBAQAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1ncGlvIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWdwaW8iLCAuZGF0YSA9IG1wYzUxMnhfaXJxX3NldF90eXBlLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLHFvcmlxLWdwaW8iLCAgIH0sCiAJe30KIH07CiAKQEAgLTM4OSw5ICszOTAsNiBAQAogCWZvcl9lYWNoX21hdGNoaW5nX25vZGUobnAsIG1wYzh4eHhfZ3Bpb19pZHMpCiAJCW1wYzh4eHhfYWRkX2NvbnRyb2xsZXIobnApOwogCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZnNsLHFvcmlxLWdwaW8iKQotCQltcGM4eHh4X2FkZF9jb250cm9sbGVyKG5wKTsKLQogCXJldHVybiAwOwogfQogYXJjaF9pbml0Y2FsbChtcGM4eHh4X2FkZF9ncGlvY2hpcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCBiMGM4NDY5Li4wZjdjNjcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwpAQCAtMTQ3LDYgKzE0NywxNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX01QSUNfV0VJUkQgKi8KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbXBpY19wcm9jZXNzb3JfaWQoc3RydWN0IG1waWMgKm1waWMpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IDA7CisKKwlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX1BSSU1BUlkpCisJCWNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJcmV0dXJuIGNwdTsKK30KKwogLyoKICAqIFJlZ2lzdGVyIGFjY2Vzc29yIGZ1bmN0aW9ucwogICovCkBAIC0yMTAsMTkgKzIyMCwxNCBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBfbXBpY19jcHVfcmVhZChzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IHJlZykKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gbXBpY19wcm9jZXNzb3JfaWQobXBpYyk7CiAKLQlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX1BSSU1BUlkpCi0JCWNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXJldHVybiBfbXBpY19yZWFkKG1waWMtPnJlZ190eXBlLCAmbXBpYy0+Y3B1cmVnc1tjcHVdLCByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX21waWNfY3B1X3dyaXRlKHN0cnVjdCBtcGljICptcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsdWUpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IDA7Ci0KLQlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX1BSSU1BUlkpCi0JCWNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBjcHUgPSBtcGljX3Byb2Nlc3Nvcl9pZChtcGljKTsKIAogCV9tcGljX3dyaXRlKG1waWMtPnJlZ190eXBlLCAmbXBpYy0+Y3B1cmVnc1tjcHVdLCByZWcsIHZhbHVlKTsKIH0KQEAgLTYxMSw3ICs2MTYsNyBAQAogCWlmIChpcnEgPCBOVU1fSVNBX0lOVEVSUlVQVFMpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGlycV90b19kZXNjKGlycSktPmNoaXBfZGF0YTsKKwlyZXR1cm4gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIH0KIAogLyogRGV0ZXJtaW5lIGlmIHRoZSBsaW51eCBpcnEgaXMgYW4gSVBJICovCkBAIC02MzYsMTYgKzY0MSwyMiBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogLyogR2V0IHRoZSBtcGljIHN0cnVjdHVyZSBmcm9tIHRoZSBJUEkgbnVtYmVyICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtcGljICogbXBpY19mcm9tX2lwaSh1bnNpZ25lZCBpbnQgaXBpKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBpYyAqIG1waWNfZnJvbV9pcGkoc3RydWN0IGlycV9kYXRhICpkKQogewotCXJldHVybiBpcnFfdG9fZGVzYyhpcGkpLT5jaGlwX2RhdGE7CisJcmV0dXJuIGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogfQogI2VuZGlmCiAKIC8qIEdldCB0aGUgbXBpYyBzdHJ1Y3R1cmUgZnJvbSB0aGUgaXJxIG51bWJlciAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBpYyAqIG1waWNfZnJvbV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gaXJxX3RvX2Rlc2MoaXJxKS0+Y2hpcF9kYXRhOworCXJldHVybiBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworfQorCisvKiBHZXQgdGhlIG1waWMgc3RydWN0dXJlIGZyb20gdGhlIGlycSBkYXRhICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtcGljICogbXBpY19mcm9tX2lycV9kYXRhKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlyZXR1cm4gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiB9CiAKIC8qIFNlbmQgYW4gRU9JICovCkBAIC02NjAsMTMgKzY3MSwxMyBAQAogICovCiAKIAotdm9pZCBtcGljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3ZvaWQgbXBpY191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgbG9vcHMgPSAxMDAwMDA7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKGlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CiAKLQlEQkcoIiVwOiAlczogZW5hYmxlX2lycTogJWQgKHNyYyAlZClcbiIsIG1waWMsIG1waWMtPm5hbWUsIGlycSwgc3JjKTsKKwlEQkcoIiVwOiAlczogZW5hYmxlX2lycTogJWQgKHNyYyAlZClcbiIsIG1waWMsIG1waWMtPm5hbWUsIGQtPmlycSwgc3JjKTsKIAogCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSwKIAkJICAgICAgIG1waWNfaXJxX3JlYWQoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpKSAmCkBAIC02ODEsMTMgKzY5MiwxMyBAQAogCX0gd2hpbGUobXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSkpICYgTVBJQ19WRUNQUklfTUFTSyk7CiB9CiAKLXZvaWQgbXBpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQordm9pZCBtcGljX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgbG9vcHMgPSAxMDAwMDA7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKGlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CiAKLQlEQkcoIiVzOiBkaXNhYmxlX2lycTogJWQgKHNyYyAlZClcbiIsIG1waWMtPm5hbWUsIGlycSwgc3JjKTsKKwlEQkcoIiVzOiBkaXNhYmxlX2lycTogJWQgKHNyYyAlZClcbiIsIG1waWMtPm5hbWUsIGQtPmlycSwgc3JjKTsKIAogCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSwKIAkJICAgICAgIG1waWNfaXJxX3JlYWQoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpKSB8CkBAIC03MDMsMTIgKzcxNCwxMiBAQAogCX0gd2hpbGUoIShtcGljX2lycV9yZWFkKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSkgJiBNUElDX1ZFQ1BSSV9NQVNLKSk7CiB9CiAKLXZvaWQgbXBpY19lbmRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit2b2lkIG1waWNfZW5kX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKGlycSk7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7CiAKICNpZmRlZiBERUJVR19JUlEKLQlEQkcoIiVzOiBlbmRfaXJxOiAlZFxuIiwgbXBpYy0+bmFtZSwgaXJxKTsKKwlEQkcoIiVzOiBlbmRfaXJxOiAlZFxuIiwgbXBpYy0+bmFtZSwgZC0+aXJxKTsKICNlbmRpZgogCS8qIFdlIGFsd2F5cyBFT0kgb24gZW5kX2lycSgpIGV2ZW4gZm9yIGVkZ2UgaW50ZXJydXB0cyBzaW5jZSB0aGF0CiAJICogc2hvdWxkIG9ubHkgbG93ZXIgdGhlIHByaW9yaXR5LCB0aGUgTVBJQyBzaG91bGQgaGF2ZSBwcm9wZXJseQpAQCAtNzIwLDUxICs3MzEsNTEgQEAKIAogI2lmZGVmIENPTkZJR19NUElDX1UzX0hUX0lSUVMKIAotc3RhdGljIHZvaWQgbXBpY191bm1hc2tfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtcGljX3VubWFza19odF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOworCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOworCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOwogCi0JbXBpY191bm1hc2tfaXJxKGlycSk7CisJbXBpY191bm1hc2tfaXJxKGQpOwogCi0JaWYgKGlycV90b19kZXNjKGlycSktPnN0YXR1cyAmIElSUV9MRVZFTCkKKwlpZiAoaXJxX3RvX2Rlc2MoZC0+aXJxKS0+c3RhdHVzICYgSVJRX0xFVkVMKQogCQltcGljX2h0X2VuZF9pcnEobXBpYywgc3JjKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBtcGljX3N0YXJ0dXBfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdW5zaWduZWQgaW50IG1waWNfc3RhcnR1cF9odF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOworCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOworCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOwogCi0JbXBpY191bm1hc2tfaXJxKGlycSk7Ci0JbXBpY19zdGFydHVwX2h0X2ludGVycnVwdChtcGljLCBzcmMsIGlycV90b19kZXNjKGlycSktPnN0YXR1cyk7CisJbXBpY191bm1hc2tfaXJxKGQpOworCW1waWNfc3RhcnR1cF9odF9pbnRlcnJ1cHQobXBpYywgc3JjLCBpcnFfdG9fZGVzYyhkLT5pcnEpLT5zdGF0dXMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1waWNfc2h1dGRvd25faHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtcGljX3NodXRkb3duX2h0X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKGlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CiAKLQltcGljX3NodXRkb3duX2h0X2ludGVycnVwdChtcGljLCBzcmMsIGlycV90b19kZXNjKGlycSktPnN0YXR1cyk7Ci0JbXBpY19tYXNrX2lycShpcnEpOworCW1waWNfc2h1dGRvd25faHRfaW50ZXJydXB0KG1waWMsIHNyYywgaXJxX3RvX2Rlc2MoZC0+aXJxKS0+c3RhdHVzKTsKKwltcGljX21hc2tfaXJxKGQpOwogfQogCi1zdGF0aWMgdm9pZCBtcGljX2VuZF9odF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1waWNfZW5kX2h0X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKGlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CiAKICNpZmRlZiBERUJVR19JUlEKLQlEQkcoIiVzOiBlbmRfaXJxOiAlZFxuIiwgbXBpYy0+bmFtZSwgaXJxKTsKKwlEQkcoIiVzOiBlbmRfaXJxOiAlZFxuIiwgbXBpYy0+bmFtZSwgZC0+aXJxKTsKICNlbmRpZgogCS8qIFdlIGFsd2F5cyBFT0kgb24gZW5kX2lycSgpIGV2ZW4gZm9yIGVkZ2UgaW50ZXJydXB0cyBzaW5jZSB0aGF0CiAJICogc2hvdWxkIG9ubHkgbG93ZXIgdGhlIHByaW9yaXR5LCB0aGUgTVBJQyBzaG91bGQgaGF2ZSBwcm9wZXJseQogCSAqIGxhdGNoZWQgYW5vdGhlciBlZGdlIGludGVycnVwdCBjb21pbmcgaW4gYW55d2F5CiAJICovCiAKLQlpZiAoaXJxX3RvX2Rlc2MoaXJxKS0+c3RhdHVzICYgSVJRX0xFVkVMKQorCWlmIChpcnFfdG9fZGVzYyhkLT5pcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpCiAJCW1waWNfaHRfZW5kX2lycShtcGljLCBzcmMpOwogCW1waWNfZW9pKG1waWMpOwogfQpAQCAtNzcyLDIzICs3ODMsMjMgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAotc3RhdGljIHZvaWQgbXBpY191bm1hc2tfaXBpKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtcGljX3VubWFza19pcGkoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lwaShpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpIC0gbXBpYy0+aXBpX3ZlY3NbMF07CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXBpKGQpOworCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpIC0gbXBpYy0+aXBpX3ZlY3NbMF07CiAKLQlEQkcoIiVzOiBlbmFibGVfaXBpOiAlZCAoaXBpICVkKVxuIiwgbXBpYy0+bmFtZSwgaXJxLCBzcmMpOworCURCRygiJXM6IGVuYWJsZV9pcGk6ICVkIChpcGkgJWQpXG4iLCBtcGljLT5uYW1lLCBkLT5pcnEsIHNyYyk7CiAJbXBpY19pcGlfd3JpdGUoc3JjLCBtcGljX2lwaV9yZWFkKHNyYykgJiB+TVBJQ19WRUNQUklfTUFTSyk7CiB9CiAKLXN0YXRpYyB2b2lkIG1waWNfbWFza19pcGkodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1waWNfbWFza19pcGkoc3RydWN0IGlycV9kYXRhICpkKQogewogCS8qIE5FVkVSIGRpc2FibGUgYW4gSVBJLi4uIHRoYXQncyBqdXN0IHBsYWluIHdyb25nISAqLwogfQogCi1zdGF0aWMgdm9pZCBtcGljX2VuZF9pcGkodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1waWNfZW5kX2lwaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXBpKGlycSk7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXBpKGQpOwogCiAJLyoKIAkgKiBJUElzIGFyZSBtYXJrZWQgSVJRX1BFUl9DUFUuIFRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZgpAQCAtODAyLDEwICs4MTMsMTEgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotaW50IG1waWNfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoraW50IG1waWNfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCSAgICAgIGJvb2wgZm9yY2UpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKGlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CiAKIAlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX1NJTkdMRV9ERVNUX0NQVSkgewogCQlpbnQgY3B1aWQgPSBpcnFfY2hvb3NlX2NwdShjcHVtYXNrKTsKQEAgLTg0OCwxNSArODYwLDE1IEBACiAJfQogfQogCi1pbnQgbXBpY19zZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCitpbnQgbXBpY19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewotCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycSh2aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcodmlycSk7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoZC0+aXJxKTsKIAl1bnNpZ25lZCBpbnQgdmVjcHJpLCB2b2xkLCB2bmV3OwogCiAJREJHKCJtcGljOiBzZXRfaXJxX3R5cGUobXBpYzpAJXAsdmlycTolZCxzcmM6MHgleCx0eXBlOjB4JXgpXG4iLAotCSAgICBtcGljLCB2aXJxLCBzcmMsIGZsb3dfdHlwZSk7CisJICAgIG1waWMsIGQtPmlycSwgc3JjLCBmbG93X3R5cGUpOwogCiAJaWYgKHNyYyA+PSBtcGljLT5pcnFfY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTA2LDI5ICs5MTgsNDMgQEAKIAltcGljX2lycV93cml0ZShzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSksIHZlY3ByaSk7CiB9CiAKK3ZvaWQgbXBpY19zZXRfZGVzdGluYXRpb24odW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBjcHVpZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnEodmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KHZpcnEpOworCisJREJHKCJtcGljOiBzZXRfZGVzdGluYXRpb24obXBpYzpAJXAsdmlycTolZCxzcmM6JWQsY3B1aWQ6MHgleClcbiIsCisJICAgIG1waWMsIHZpcnEsIHNyYywgY3B1aWQpOworCisJaWYgKHNyYyA+PSBtcGljLT5pcnFfY291bnQpCisJCXJldHVybjsKKworCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JTkZPKElSUV9ERVNUSU5BVElPTiksIDEgPDwgY3B1aWQpOworfQorCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1waWNfaXJxX2NoaXAgPSB7Ci0JLm1hc2sJCT0gbXBpY19tYXNrX2lycSwKLQkudW5tYXNrCQk9IG1waWNfdW5tYXNrX2lycSwKLQkuZW9pCQk9IG1waWNfZW5kX2lycSwKLQkuc2V0X3R5cGUJPSBtcGljX3NldF9pcnFfdHlwZSwKKwkuaXJxX21hc2sJPSBtcGljX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gbXBpY191bm1hc2tfaXJxLAorCS5pcnFfZW9pCT0gbXBpY19lbmRfaXJxLAorCS5pcnFfc2V0X3R5cGUJPSBtcGljX3NldF9pcnFfdHlwZSwKIH07CiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1waWNfaXBpX2NoaXAgPSB7Ci0JLm1hc2sJCT0gbXBpY19tYXNrX2lwaSwKLQkudW5tYXNrCQk9IG1waWNfdW5tYXNrX2lwaSwKLQkuZW9pCQk9IG1waWNfZW5kX2lwaSwKKwkuaXJxX21hc2sJPSBtcGljX21hc2tfaXBpLAorCS5pcnFfdW5tYXNrCT0gbXBpY191bm1hc2tfaXBpLAorCS5pcnFfZW9pCT0gbXBpY19lbmRfaXBpLAogfTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKICNpZmRlZiBDT05GSUdfTVBJQ19VM19IVF9JUlFTCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1waWNfaXJxX2h0X2NoaXAgPSB7Ci0JLnN0YXJ0dXAJPSBtcGljX3N0YXJ0dXBfaHRfaXJxLAotCS5zaHV0ZG93bgk9IG1waWNfc2h1dGRvd25faHRfaXJxLAotCS5tYXNrCQk9IG1waWNfbWFza19pcnEsCi0JLnVubWFzawkJPSBtcGljX3VubWFza19odF9pcnEsCi0JLmVvaQkJPSBtcGljX2VuZF9odF9pcnEsCi0JLnNldF90eXBlCT0gbXBpY19zZXRfaXJxX3R5cGUsCisJLmlycV9zdGFydHVwCT0gbXBpY19zdGFydHVwX2h0X2lycSwKKwkuaXJxX3NodXRkb3duCT0gbXBpY19zaHV0ZG93bl9odF9pcnEsCisJLmlycV9tYXNrCT0gbXBpY19tYXNrX2lycSwKKwkuaXJxX3VubWFzawk9IG1waWNfdW5tYXNrX2h0X2lycSwKKwkuaXJxX2VvaQk9IG1waWNfZW5kX2h0X2lycSwKKwkuaXJxX3NldF90eXBlCT0gbXBpY19zZXRfaXJxX3R5cGUsCiB9OwogI2VuZGlmIC8qIENPTkZJR19NUElDX1UzX0hUX0lSUVMgKi8KIApAQCAtOTg2LDYgKzEwMTIsMTYgQEAKIAkvKiBTZXQgZGVmYXVsdCBpcnEgdHlwZSAqLwogCXNldF9pcnFfdHlwZSh2aXJxLCBJUlFfVFlQRV9OT05FKTsKIAorCS8qIElmIHRoZSBNUElDIHdhcyByZXNldCwgdGhlbiBhbGwgdmVjdG9ycyBoYXZlIGFscmVhZHkgYmVlbgorCSAqIGluaXRpYWxpemVkLiAgT3RoZXJ3aXNlLCBhIHBlciBzb3VyY2UgbGF6eSBpbml0aWFsaXphdGlvbgorCSAqIGlzIGRvbmUgaGVyZS4KKwkgKi8KKwlpZiAoIW1waWNfaXNfaXBpKG1waWMsIGh3KSAmJiAobXBpYy0+ZmxhZ3MgJiBNUElDX05PX1JFU0VUKSkgeworCQltcGljX3NldF92ZWN0b3IodmlycSwgaHcpOworCQltcGljX3NldF9kZXN0aW5hdGlvbih2aXJxLCBtcGljX3Byb2Nlc3Nvcl9pZChtcGljKSk7CisJCW1waWNfaXJxX3NldF9wcmlvcml0eSh2aXJxLCA4KTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzMyw2ICsxMDY5LDExIEBACiAJLnhsYXRlID0gbXBpY19ob3N0X3hsYXRlLAogfTsKIAorc3RhdGljIGludCBtcGljX3Jlc2V0X3Byb2hpYml0ZWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXJldHVybiBub2RlICYmIG9mX2dldF9wcm9wZXJ0eShub2RlLCAicGljLW5vLXJlc2V0IiwgTlVMTCk7Cit9CisKIC8qCiAgKiBFeHBvcnRlZCBmdW5jdGlvbnMKICAqLwpAQCAtMTA2MCwxMiArMTEwMSwxMiBAQAogCW1waWMtPmhjX2lycSA9IG1waWNfaXJxX2NoaXA7CiAJbXBpYy0+aGNfaXJxLm5hbWUgPSBuYW1lOwogCWlmIChmbGFncyAmIE1QSUNfUFJJTUFSWSkKLQkJbXBpYy0+aGNfaXJxLnNldF9hZmZpbml0eSA9IG1waWNfc2V0X2FmZmluaXR5OworCQltcGljLT5oY19pcnEuaXJxX3NldF9hZmZpbml0eSA9IG1waWNfc2V0X2FmZmluaXR5OwogI2lmZGVmIENPTkZJR19NUElDX1UzX0hUX0lSUVMKIAltcGljLT5oY19odF9pcnEgPSBtcGljX2lycV9odF9jaGlwOwogCW1waWMtPmhjX2h0X2lycS5uYW1lID0gbmFtZTsKIAlpZiAoZmxhZ3MgJiBNUElDX1BSSU1BUlkpCi0JCW1waWMtPmhjX2h0X2lycS5zZXRfYWZmaW5pdHkgPSBtcGljX3NldF9hZmZpbml0eTsKKwkJbXBpYy0+aGNfaHRfaXJxLmlycV9zZXRfYWZmaW5pdHkgPSBtcGljX3NldF9hZmZpbml0eTsKICNlbmRpZiAvKiBDT05GSUdfTVBJQ19VM19IVF9JUlFTICovCiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMTUzLDcgKzExOTQsMTUgQEAKIAltcGljX21hcChtcGljLCBub2RlLCBwYWRkciwgJm1waWMtPnRtcmVncywgTVBJQ19JTkZPKFRJTUVSX0JBU0UpLCAweDEwMDApOwogCiAJLyogUmVzZXQgKi8KLQlpZiAoZmxhZ3MgJiBNUElDX1dBTlRTX1JFU0VUKSB7CisKKwkvKiBXaGVuIHVzaW5nIGEgZGV2aWNlLW5vZGUsIHJlc2V0IHJlcXVlc3RzIGFyZSBvbmx5IGhvbm9yZWQgaWYgdGhlIE1QSUMKKwkgKiBpcyBhbGxvd2VkIHRvIHJlc2V0LgorCSAqLworCWlmIChtcGljX3Jlc2V0X3Byb2hpYml0ZWQobm9kZSkpCisJCW1waWMtPmZsYWdzIHw9IE1QSUNfTk9fUkVTRVQ7CisKKwlpZiAoKGZsYWdzICYgTVBJQ19XQU5UU19SRVNFVCkgJiYgIShtcGljLT5mbGFncyAmIE1QSUNfTk9fUkVTRVQpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtcGljOiBSZXNldHRpbmdcbiIpOwogCQltcGljX3dyaXRlKG1waWMtPmdyZWdzLCBNUElDX0lORk8oR1JFR19HTE9CQUxfQ09ORl8wKSwKIAkJCSAgIG1waWNfcmVhZChtcGljLT5ncmVncywgTVBJQ19JTkZPKEdSRUdfR0xPQkFMX0NPTkZfMCkpCiAJCQkgICB8IE1QSUNfR1JFR19HQ09ORl9SRVNFVCk7CkBAIC0xMzEzLDIyICsxMzYyLDIxIEBACiAKIAltcGljX3Bhc2VtaV9tc2lfaW5pdChtcGljKTsKIAotCWlmIChtcGljLT5mbGFncyAmIE1QSUNfUFJJTUFSWSkKLQkJY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZWxzZQotCQljcHUgPSAwOworCWNwdSA9IG1waWNfcHJvY2Vzc29yX2lkKG1waWMpOwogCi0JZm9yIChpID0gMDsgaSA8IG1waWMtPm51bV9zb3VyY2VzOyBpKyspIHsKLQkJLyogc3RhcnQgd2l0aCB2ZWN0b3IgPSBzb3VyY2UgbnVtYmVyLCBhbmQgbWFza2VkICovCi0JCXUzMiB2ZWNwcmkgPSBNUElDX1ZFQ1BSSV9NQVNLIHwgaSB8Ci0JCQkoOCA8PCBNUElDX1ZFQ1BSSV9QUklPUklUWV9TSElGVCk7CisJaWYgKCEobXBpYy0+ZmxhZ3MgJiBNUElDX05PX1JFU0VUKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbXBpYy0+bnVtX3NvdXJjZXM7IGkrKykgeworCQkJLyogc3RhcnQgd2l0aCB2ZWN0b3IgPSBzb3VyY2UgbnVtYmVyLCBhbmQgbWFza2VkICovCisJCQl1MzIgdmVjcHJpID0gTVBJQ19WRUNQUklfTUFTSyB8IGkgfAorCQkJCSg4IDw8IE1QSUNfVkVDUFJJX1BSSU9SSVRZX1NISUZUKTsKIAkJCi0JCS8qIGNoZWNrIGlmIHByb3RlY3RlZCAqLwotCQlpZiAobXBpYy0+cHJvdGVjdGVkICYmIHRlc3RfYml0KGksIG1waWMtPnByb3RlY3RlZCkpCi0JCQljb250aW51ZTsKLQkJLyogaW5pdCBodyAqLwotCQltcGljX2lycV93cml0ZShpLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpLCB2ZWNwcmkpOwotCQltcGljX2lycV93cml0ZShpLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSwgMSA8PCBjcHUpOworCQkJLyogY2hlY2sgaWYgcHJvdGVjdGVkICovCisJCQlpZiAobXBpYy0+cHJvdGVjdGVkICYmIHRlc3RfYml0KGksIG1waWMtPnByb3RlY3RlZCkpCisJCQkJY29udGludWU7CisJCQkvKiBpbml0IGh3ICovCisJCQltcGljX2lycV93cml0ZShpLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpLCB2ZWNwcmkpOworCQkJbXBpY19pcnFfd3JpdGUoaSwgTVBJQ19JTkZPKElSUV9ERVNUSU5BVElPTiksIDEgPDwgY3B1KTsKKwkJfQogCX0KIAkKIAkvKiBJbml0IHNwdXJpb3VzIHZlY3RvciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaAppbmRleCBlNGE2ZGY3Li4xM2YzZTg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaApAQCAtMzQsOSArMzQsMTAgQEAKIH0KICNlbmRpZgogCi1leHRlcm4gaW50IG1waWNfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKK2V4dGVybiBpbnQgbXBpY19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKIGV4dGVybiB2b2lkIG1waWNfc2V0X3ZlY3Rvcih1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IHZlY3Rvcik7Ci1leHRlcm4gaW50IG1waWNfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKTsKK2V4dGVybiBpbnQgbXBpY19zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgYm9vbCBmb3JjZSk7CiBleHRlcm4gdm9pZCBtcGljX3Jlc2V0X2NvcmUoaW50IGNwdSk7CiAKICNlbmRpZiAvKiBfUE9XRVJQQ19TWVNERVZfTVBJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYwppbmRleCAzMjBhZDVhLi4wYjc3OTRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKQEAgLTQzLDI0ICs0MywyNCBAQAogewogCXByX2RlYnVnKCJtcGljX3Bhc2VtaV9tc2lfbWFza19pcnEgJWRcbiIsIGRhdGEtPmlycSk7CiAJbWFza19tc2lfaXJxKGRhdGEpOwotCW1waWNfbWFza19pcnEoZGF0YS0+aXJxKTsKKwltcGljX21hc2tfaXJxKGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBtcGljX3Bhc2VtaV9tc2lfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJcHJfZGVidWcoIm1waWNfcGFzZW1pX21zaV91bm1hc2tfaXJxICVkXG4iLCBkYXRhLT5pcnEpOwotCW1waWNfdW5tYXNrX2lycShkYXRhLT5pcnEpOworCW1waWNfdW5tYXNrX2lycShkYXRhKTsKIAl1bm1hc2tfbXNpX2lycShkYXRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGljX3Bhc2VtaV9tc2lfY2hpcCA9IHsKLQkuaXJxX3NodXRkb3duCT0gbXBpY19wYXNlbWlfbXNpX21hc2tfaXJxLAotCS5pcnFfbWFzawk9IG1waWNfcGFzZW1pX21zaV9tYXNrX2lycSwKLQkuaXJxX3VubWFzawk9IG1waWNfcGFzZW1pX21zaV91bm1hc2tfaXJxLAotCS5lb2kJCT0gbXBpY19lbmRfaXJxLAotCS5zZXRfdHlwZQk9IG1waWNfc2V0X2lycV90eXBlLAotCS5zZXRfYWZmaW5pdHkJPSBtcGljX3NldF9hZmZpbml0eSwKLQkubmFtZQkJPSAiUEFTRU1JLU1TSSIsCisJLmlycV9zaHV0ZG93bgkJPSBtcGljX3Bhc2VtaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrCQk9IG1waWNfcGFzZW1pX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzawkJPSBtcGljX3Bhc2VtaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2VvaQkJPSBtcGljX2VuZF9pcnEsCisJLmlycV9zZXRfdHlwZQkJPSBtcGljX3NldF9pcnFfdHlwZSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IG1waWNfc2V0X2FmZmluaXR5LAorCS5uYW1lCQkJPSAiUEFTRU1JLU1TSSIsCiB9OwogCiBzdGF0aWMgaW50IHBhc2VtaV9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCmluZGV4IGEyYjAyOGIuLjcxOTAwYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCkBAIC0yNiwyMyArMjYsMjMgQEAKIHN0YXRpYyB2b2lkIG1waWNfdTNtc2lfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCW1hc2tfbXNpX2lycShkYXRhKTsKLQltcGljX21hc2tfaXJxKGRhdGEtPmlycSk7CisJbXBpY19tYXNrX2lycShkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgbXBpY191M21zaV91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQltcGljX3VubWFza19pcnEoZGF0YS0+aXJxKTsKKwltcGljX3VubWFza19pcnEoZGF0YSk7CiAJdW5tYXNrX21zaV9pcnEoZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBpY191M21zaV9jaGlwID0gewotCS5pcnFfc2h1dGRvd24JPSBtcGljX3UzbXNpX21hc2tfaXJxLAotCS5pcnFfbWFzawk9IG1waWNfdTNtc2lfbWFza19pcnEsCi0JLmlycV91bm1hc2sJPSBtcGljX3UzbXNpX3VubWFza19pcnEsCi0JLmVvaQkJPSBtcGljX2VuZF9pcnEsCi0JLnNldF90eXBlCT0gbXBpY19zZXRfaXJxX3R5cGUsCi0JLnNldF9hZmZpbml0eQk9IG1waWNfc2V0X2FmZmluaXR5LAotCS5uYW1lCQk9ICJNUElDLVUzTVNJIiwKKwkuaXJxX3NodXRkb3duCQk9IG1waWNfdTNtc2lfbWFza19pcnEsCisJLmlycV9tYXNrCQk9IG1waWNfdTNtc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sJCT0gbXBpY191M21zaV91bm1hc2tfaXJxLAorCS5pcnFfZW9pCQk9IG1waWNfZW5kX2lycSwKKwkuaXJxX3NldF90eXBlCQk9IG1waWNfc2V0X2lycV90eXBlLAorCS5pcnFfc2V0X2FmZmluaXR5CT0gbXBpY19zZXRfYWZmaW5pdHksCisJLm5hbWUJCQk9ICJNUElDLVUzTVNJIiwKIH07CiAKIHN0YXRpYyB1NjQgcmVhZF9odF9tYWdpY19hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcG9zKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCmluZGV4IGZlYWVlNDAuLjBmNmFmNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKQEAgLTM0Niw3ICszNDYsNyBAQAogCWlmIChwcm9wKQogCQlwZGF0YS5mcmVxX20gPSAqcHJvcDsKIAotCXBkYXRhLmZyZXFfbSA9IDM7CS8qIGRlZmF1bHQgKi8KKwlwZGF0YS5mcmVxX24gPSAzOwkvKiBkZWZhdWx0ICovCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImZyZXFfbiIsIE5VTEwpOwogCWlmIChwcm9wKQogCQlwZGF0YS5mcmVxX24gPSAqcHJvcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYwppbmRleCA0ODViOTI0Li5iYzYxZWJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BpYy5jCkBAIC03Niw5ICs3Niw5IEBACiAgKiBtdjY0eDYwX2NoaXBfbG93IGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyB2b2lkIG12NjR4NjBfbWFza19sb3codW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBtdjY0eDYwX21hc2tfbG93KHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFt2aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJaW50IGxldmVsMiA9IGlycV9tYXBbZC0+aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTg5LDkgKzg5LDkgQEAKIAkodm9pZClpbl9sZTMyKG12NjR4NjBfaXJxX3JlZ19iYXNlICsgTVY2NFg2MF9JQ19DUFUwX0lOVFJfTUFTS19MTyk7CiB9CiAKLXN0YXRpYyB2b2lkIG12NjR4NjBfdW5tYXNrX2xvdyh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG12NjR4NjBfdW5tYXNrX2xvdyhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGxldmVsMiA9IGlycV9tYXBbdmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCWludCBsZXZlbDIgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CkBAIC0xMDQsMTggKzEwNCwxOCBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG12NjR4NjBfY2hpcF9sb3cgPSB7CiAJLm5hbWUJCT0gIm12NjR4NjBfbG93IiwKLQkubWFzawkJPSBtdjY0eDYwX21hc2tfbG93LAotCS5tYXNrX2Fjawk9IG12NjR4NjBfbWFza19sb3csCi0JLnVubWFzawkJPSBtdjY0eDYwX3VubWFza19sb3csCisJLmlycV9tYXNrCT0gbXY2NHg2MF9tYXNrX2xvdywKKwkuaXJxX21hc2tfYWNrCT0gbXY2NHg2MF9tYXNrX2xvdywKKwkuaXJxX3VubWFzawk9IG12NjR4NjBfdW5tYXNrX2xvdywKIH07CiAKIC8qCiAgKiBtdjY0eDYwX2NoaXBfaGlnaCBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgdm9pZCBtdjY0eDYwX21hc2tfaGlnaCh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG12NjR4NjBfbWFza19oaWdoKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFt2aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJaW50IGxldmVsMiA9IGlycV9tYXBbZC0+aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTEyNiw5ICsxMjYsOSBAQAogCSh2b2lkKWluX2xlMzIobXY2NHg2MF9pcnFfcmVnX2Jhc2UgKyBNVjY0WDYwX0lDX0NQVTBfSU5UUl9NQVNLX0hJKTsKIH0KIAotc3RhdGljIHZvaWQgbXY2NHg2MF91bm1hc2tfaGlnaCh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG12NjR4NjBfdW5tYXNrX2hpZ2goc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBsZXZlbDIgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKKwlpbnQgbGV2ZWwyID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOwpAQCAtMTQxLDE4ICsxNDEsMTggQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdjY0eDYwX2NoaXBfaGlnaCA9IHsKIAkubmFtZQkJPSAibXY2NHg2MF9oaWdoIiwKLQkubWFzawkJPSBtdjY0eDYwX21hc2tfaGlnaCwKLQkubWFza19hY2sJPSBtdjY0eDYwX21hc2tfaGlnaCwKLQkudW5tYXNrCQk9IG12NjR4NjBfdW5tYXNrX2hpZ2gsCisJLmlycV9tYXNrCT0gbXY2NHg2MF9tYXNrX2hpZ2gsCisJLmlycV9tYXNrX2Fjawk9IG12NjR4NjBfbWFza19oaWdoLAorCS5pcnFfdW5tYXNrCT0gbXY2NHg2MF91bm1hc2tfaGlnaCwKIH07CiAKIC8qCiAgKiBtdjY0eDYwX2NoaXBfZ3BwIGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyB2b2lkIG12NjR4NjBfbWFza19ncHAodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBtdjY0eDYwX21hc2tfZ3BwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFt2aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJaW50IGxldmVsMiA9IGlycV9tYXBbZC0+aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTE2Myw5ICsxNjMsOSBAQAogCSh2b2lkKWluX2xlMzIobXY2NHg2MF9ncHBfcmVnX2Jhc2UgKyBNVjY0eDYwX0dQUF9JTlRSX01BU0spOwogfQogCi1zdGF0aWMgdm9pZCBtdjY0eDYwX21hc2tfYWNrX2dwcCh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIG12NjR4NjBfbWFza19hY2tfZ3BwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFt2aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJaW50IGxldmVsMiA9IGlycV9tYXBbZC0+aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTE3OCw5ICsxNzgsOSBAQAogCSh2b2lkKWluX2xlMzIobXY2NHg2MF9ncHBfcmVnX2Jhc2UgKyBNVjY0eDYwX0dQUF9JTlRSX0NBVVNFKTsKIH0KIAotc3RhdGljIHZvaWQgbXY2NHg2MF91bm1hc2tfZ3BwKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgbXY2NHg2MF91bm1hc2tfZ3BwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFt2aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJaW50IGxldmVsMiA9IGlycV9tYXBbZC0+aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTE5Myw5ICsxOTMsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG12NjR4NjBfY2hpcF9ncHAgPSB7CiAJLm5hbWUJCT0gIm12NjR4NjBfZ3BwIiwKLQkubWFzawkJPSBtdjY0eDYwX21hc2tfZ3BwLAotCS5tYXNrX2Fjawk9IG12NjR4NjBfbWFza19hY2tfZ3BwLAotCS51bm1hc2sJCT0gbXY2NHg2MF91bm1hc2tfZ3BwLAorCS5pcnFfbWFzawk9IG12NjR4NjBfbWFza19ncHAsCisJLmlycV9tYXNrX2Fjawk9IG12NjR4NjBfbWFza19hY2tfZ3BwLAorCS5pcnFfdW5tYXNrCT0gbXY2NHg2MF91bm1hc2tfZ3BwLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCmluZGV4IDU0MWJhOTguLjhjOWRlZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYwpAQCAtMTg5LDE1ICsxODksMjAgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcWVfaWMgKnFlX2ljX2Zyb21faXJxKHVuc2lnbmVkIGludCB2aXJxKQogewotCXJldHVybiBpcnFfdG9fZGVzYyh2aXJxKS0+Y2hpcF9kYXRhOworCXJldHVybiBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcWVfaWMgKnFlX2ljX2Zyb21faXJxX2RhdGEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXJldHVybiBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIH0KIAogI2RlZmluZSB2aXJxX3RvX2h3KHZpcnEpCSgodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnEpCiAKLXN0YXRpYyB2b2lkIHFlX2ljX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCBxZV9pY191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgcWVfaWMgKnFlX2ljID0gcWVfaWNfZnJvbV9pcnEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcodmlycSk7CisJc3RydWN0IHFlX2ljICpxZV9pYyA9IHFlX2ljX2Zyb21faXJxX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcoZC0+aXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCkBAIC0yMTAsMTAgKzIxNSwxMCBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZV9pY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHFlX2ljX21hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgcWVfaWNfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBxZV9pYyAqcWVfaWMgPSBxZV9pY19mcm9tX2lycSh2aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyh2aXJxKTsKKwlzdHJ1Y3QgcWVfaWMgKnFlX2ljID0gcWVfaWNfZnJvbV9pcnFfZGF0YShkKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhkLT5pcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKQEAgLTIzOCw5ICsyNDMsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHFlX2ljX2lycV9jaGlwID0gewogCS5uYW1lID0gIlFFSUMiLAotCS51bm1hc2sgPSBxZV9pY191bm1hc2tfaXJxLAotCS5tYXNrID0gcWVfaWNfbWFza19pcnEsCi0JLm1hc2tfYWNrID0gcWVfaWNfbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBxZV9pY191bm1hc2tfaXJxLAorCS5pcnFfbWFzayA9IHFlX2ljX21hc2tfaXJxLAorCS5pcnFfbWFza19hY2sgPSBxZV9pY19tYXNrX2lycSwKIH07CiAKIHN0YXRpYyBpbnQgcWVfaWNfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKaW5kZXggMGFiOTI4MS4uMDJjOTFkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKQEAgLTM0MywyNCArMzQzLDkgQEAKICAqIExpbnV4IGRlc2NyaXB0b3IgbGV2ZWwgY2FsbGJhY2tzCiAgKi8KIAotc3RhdGljIHZvaWQgdHNpMTA4X3BjaV9pcnFfZW5hYmxlKHVfaW50IGlycSkKK3N0YXRpYyB2b2lkIHRzaTEwOF9wY2lfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdHNpMTA4X3BjaV9pbnRfdW5tYXNrKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRzaTEwOF9wY2lfaXJxX2Rpc2FibGUodV9pbnQgaXJxKQotewotCXRzaTEwOF9wY2lfaW50X21hc2soaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgdHNpMTA4X3BjaV9pcnFfYWNrKHVfaW50IGlycSkKLXsKLQl0c2kxMDhfcGNpX2ludF9tYXNrKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRzaTEwOF9wY2lfaXJxX2VuZCh1X2ludCBpcnEpCi17Ci0JdHNpMTA4X3BjaV9pbnRfdW5tYXNrKGlycSk7CisJdHNpMTA4X3BjaV9pbnRfdW5tYXNrKGQtPmlycSk7CiAKIAkvKiBFbmFibGUgaW50ZXJydXB0cyBmcm9tIFBDSSBibG9jayAqLwogCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9FTkFCTEUsCkBAIC0zNzAsMTYgKzM1NSwyNSBAQAogCW1iKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRzaTEwOF9wY2lfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQoreworCXRzaTEwOF9wY2lfaW50X21hc2soZC0+aXJxKTsKK30KKworc3RhdGljIHZvaWQgdHNpMTA4X3BjaV9pcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl0c2kxMDhfcGNpX2ludF9tYXNrKGQtPmlycSk7Cit9CisKIC8qCiAgKiBJbnRlcnJ1cHQgY29udHJvbGxlciBkZXNjcmlwdG9yIGZvciBjYXNjYWRlZCBQQ0kgaW50ZXJydXB0IGNvbnRyb2xsZXIuCiAgKi8KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0c2kxMDhfcGNpX2lycSA9IHsKIAkubmFtZSA9ICJ0c2kxMDhfUENJX2ludCIsCi0JLm1hc2sgPSB0c2kxMDhfcGNpX2lycV9kaXNhYmxlLAotCS5hY2sgPSB0c2kxMDhfcGNpX2lycV9hY2ssCi0JLmVuZCA9IHRzaTEwOF9wY2lfaXJxX2VuZCwKLQkudW5tYXNrID0gdHNpMTA4X3BjaV9pcnFfZW5hYmxlLAorCS5pcnFfbWFzayA9IHRzaTEwOF9wY2lfaXJxX21hc2ssCisJLmlycV9hY2sgPSB0c2kxMDhfcGNpX2lycV9hY2ssCisJLmlycV91bm1hc2sgPSB0c2kxMDhfcGNpX2lycV91bm1hc2ssCiB9OwogCiBzdGF0aWMgaW50IHBjaV9pcnFfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCkBAIC00MzcsOCArNDMxLDExIEBACiAKIHZvaWQgdHNpMTA4X2lycV9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEgPSBnZXRfcGNpX3NvdXJjZSgpOworCiAJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCWNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCmluZGV4IDAwMzhmYjcuLjgzNWY3OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYwpAQCAtNTUsMTEgKzU1LDExIEBACiAJc3RydWN0IGlycV9ob3N0CSppcnFob3N0OwogfTsKIAotc3RhdGljIHZvaWQgdWljX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCB1aWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7Ci0Jc3RydWN0IHVpYyAqdWljID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcodmlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoZC0+aXJxKTsKKwlzdHJ1Y3QgdWljICp1aWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdWljX2lycV90b19odyhkLT5pcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGVyLCBzcjsKIApAQCAtNzQsMTAgKzc0LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWljLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHVpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHVpY19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHVpYyAqdWljID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcodmlycSk7CisJc3RydWN0IHVpYyAqdWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcoZC0+aXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBlcjsKIApAQCAtODgsMTAgKzg4LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWljLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHVpY19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgdWljX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCB1aWMgKnVpYyA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSB1aWNfaXJxX3RvX2h3KHZpcnEpOworCXN0cnVjdCB1aWMgKnVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVuc2lnbmVkIGludCBzcmMgPSB1aWNfaXJxX3RvX2h3KGQtPmlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1aWMtPmxvY2ssIGZsYWdzKTsKQEAgLTk5LDExICs5OSwxMSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpYy0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCB1aWNfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgdWljX21hc2tfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7Ci0Jc3RydWN0IHVpYyAqdWljID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcodmlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoZC0+aXJxKTsKKwlzdHJ1Y3QgdWljICp1aWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdWljX2lycV90b19odyhkLT5pcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGVyLCBzcjsKIApAQCAtMTI1LDE4ICsxMjUsMTggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWMtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCB1aWNfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQorc3RhdGljIGludCB1aWNfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQlzdHJ1Y3QgdWljICp1aWMgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gdWljX2lycV90b19odyh2aXJxKTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKKwlzdHJ1Y3QgdWljICp1aWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdWljX2lycV90b19odyhkLT5pcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGQtPmlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdHJpZ2dlciwgcG9sYXJpdHk7CiAJdTMyIHRyLCBwciwgbWFzazsKIAogCXN3aXRjaCAoZmxvd190eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgewogCWNhc2UgSVJRX1RZUEVfTk9ORToKLQkJdWljX21hc2tfaXJxKHZpcnEpOworCQl1aWNfbWFza19pcnEoZCk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKQEAgLTE3OCwxMSArMTc4LDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdWljX2lycV9jaGlwID0gewogCS5uYW1lCQk9ICJVSUMiLAotCS51bm1hc2sJCT0gdWljX3VubWFza19pcnEsCi0JLm1hc2sJCT0gdWljX21hc2tfaXJxLAotIAkubWFza19hY2sJPSB1aWNfbWFza19hY2tfaXJxLAotCS5hY2sJCT0gdWljX2Fja19pcnEsCi0JLnNldF90eXBlCT0gdWljX3NldF9pcnFfdHlwZSwKKwkuaXJxX3VubWFzawk9IHVpY191bm1hc2tfaXJxLAorCS5pcnFfbWFzawk9IHVpY19tYXNrX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gdWljX21hc2tfYWNrX2lycSwKKwkuaXJxX2Fjawk9IHVpY19hY2tfaXJxLAorCS5pcnFfc2V0X3R5cGUJPSB1aWNfc2V0X2lycV90eXBlLAogfTsKIAogc3RhdGljIGludCB1aWNfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKQEAgLTIyMCw2ICsyMjAsNyBAQAogCiB2b2lkIHVpY19pcnFfY2FzY2FkZSh1bnNpZ25lZCBpbnQgdmlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfZGVzY19jaGlwKGRlc2MpOwogCXN0cnVjdCB1aWMgKnVpYyA9IGdldF9pcnFfZGF0YSh2aXJxKTsKIAl1MzIgbXNyOwogCWludCBzcmM7CkBAIC0yMjcsOSArMjI4LDkgQEAKIAogCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpCi0JCWRlc2MtPmNoaXAtPm1hc2sodmlycSk7CisJCWNoaXAtPmlycV9tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CiAJZWxzZQotCQlkZXNjLT5jaGlwLT5tYXNrX2Fjayh2aXJxKTsKKwkJY2hpcC0+aXJxX21hc2tfYWNrKCZkZXNjLT5pcnFfZGF0YSk7CiAJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCW1zciA9IG1mZGNyKHVpYy0+ZGNyYmFzZSArIFVJQ19NU1IpOwpAQCAtMjQ0LDkgKzI0NSw5IEBACiB1aWNfaXJxX3JldDoKIAlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKQotCQlkZXNjLT5jaGlwLT5hY2sodmlycSk7Ci0JaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSAmJiBkZXNjLT5jaGlwLT51bm1hc2spCi0JCWRlc2MtPmNoaXAtPnVubWFzayh2aXJxKTsKKwkJY2hpcC0+aXJxX2FjaygmZGVzYy0+aXJxX2RhdGEpOworCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgY2hpcC0+aXJxX3VubWFzaykKKwkJY2hpcC0+aXJxX3VubWFzaygmZGVzYy0+aXJxX2RhdGEpOwogCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGlsaW54X2ludGMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGlsaW54X2ludGMuYwppbmRleCAxZTBjY2ZhLi43NDM2ZjNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpbGlueF9pbnRjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWxpbnhfaW50Yy5jCkBAIC02OSwxNyArNjksMTcgQEAKICAqCiAgKiBJUlEgQ2hpcCBjb21tb24gKGFjcm9zcyBsZXZlbCBhbmQgZWRnZSkgb3BlcmF0aW9ucwogICovCi1zdGF0aWMgdm9pZCB4aWxpbnhfaW50Y19tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgeGlsaW54X2ludGNfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7Ci0Jdm9pZCAqIHJlZ3MgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCXZvaWQgKiByZWdzID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJcHJfZGVidWcoIm1hc2s6ICVkXG4iLCBpcnEpOwogCW91dF9iZTMyKHJlZ3MgKyBYSU5UQ19DSUUsIDEgPDwgaXJxKTsKIH0KIAotc3RhdGljIGludCB4aWxpbnhfaW50Y19zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3N0YXRpYyBpbnQgeGlsaW54X2ludGNfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGQtPmlycSk7CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX0xFVkVMKTsKIAlkZXNjLT5zdGF0dXMgfD0gZmxvd190eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKQEAgLTkxLDEwICs5MSwxMCBAQAogLyoKICAqIElSUSBDaGlwIGxldmVsIG9wZXJhdGlvbnMKICAqLwotc3RhdGljIHZvaWQgeGlsaW54X2ludGNfbGV2ZWxfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgeGlsaW54X2ludGNfbGV2ZWxfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyh2aXJxKTsKLQl2b2lkICogcmVncyA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdm9pZCAqIHJlZ3MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlwcl9kZWJ1ZygidW5tYXNrOiAlZFxuIiwgaXJxKTsKIAlvdXRfYmUzMihyZWdzICsgWElOVENfU0lFLCAxIDw8IGlycSk7CiAKQEAgLTEwNywzNyArMTA3LDM3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGlsaW54X2ludGNfbGV2ZWxfaXJxY2hpcCA9IHsKIAkubmFtZSA9ICJYaWxpbnggTGV2ZWwgSU5UQyIsCi0JLm1hc2sgPSB4aWxpbnhfaW50Y19tYXNrLAotCS5tYXNrX2FjayA9IHhpbGlueF9pbnRjX21hc2ssCi0JLnVubWFzayA9IHhpbGlueF9pbnRjX2xldmVsX3VubWFzaywKLQkuc2V0X3R5cGUgPSB4aWxpbnhfaW50Y19zZXRfdHlwZSwKKwkuaXJxX21hc2sgPSB4aWxpbnhfaW50Y19tYXNrLAorCS5pcnFfbWFza19hY2sgPSB4aWxpbnhfaW50Y19tYXNrLAorCS5pcnFfdW5tYXNrID0geGlsaW54X2ludGNfbGV2ZWxfdW5tYXNrLAorCS5pcnFfc2V0X3R5cGUgPSB4aWxpbnhfaW50Y19zZXRfdHlwZSwKIH07CiAKIC8qCiAgKiBJUlEgQ2hpcCBlZGdlIG9wZXJhdGlvbnMKICAqLwotc3RhdGljIHZvaWQgeGlsaW54X2ludGNfZWRnZV91bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCB4aWxpbnhfaW50Y19lZGdlX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7Ci0Jdm9pZCAqcmVncyA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdm9pZCAqcmVncyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXByX2RlYnVnKCJ1bm1hc2s6ICVkXG4iLCBpcnEpOwogCW91dF9iZTMyKHJlZ3MgKyBYSU5UQ19TSUUsIDEgPDwgaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgeGlsaW54X2ludGNfZWRnZV9hY2sodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCB4aWxpbnhfaW50Y19lZGdlX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7Ci0Jdm9pZCAqIHJlZ3MgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCXZvaWQgKiByZWdzID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJcHJfZGVidWcoImFjazogJWRcbiIsIGlycSk7CiAJb3V0X2JlMzIocmVncyArIFhJTlRDX0lBUiwgMSA8PCBpcnEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpbGlueF9pbnRjX2VkZ2VfaXJxY2hpcCA9IHsKIAkubmFtZSA9ICJYaWxpbnggRWRnZSAgSU5UQyIsCi0JLm1hc2sgPSB4aWxpbnhfaW50Y19tYXNrLAotCS51bm1hc2sgPSB4aWxpbnhfaW50Y19lZGdlX3VubWFzaywKLQkuYWNrID0geGlsaW54X2ludGNfZWRnZV9hY2ssCi0JLnNldF90eXBlID0geGlsaW54X2ludGNfc2V0X3R5cGUsCisJLmlycV9tYXNrID0geGlsaW54X2ludGNfbWFzaywKKwkuaXJxX3VubWFzayA9IHhpbGlueF9pbnRjX2VkZ2VfdW5tYXNrLAorCS5pcnFfYWNrID0geGlsaW54X2ludGNfZWRnZV9hY2ssCisJLmlycV9zZXRfdHlwZSA9IHhpbGlueF9pbnRjX3NldF90eXBlLAogfTsKIAogLyoKQEAgLTIyOSwxMiArMjI5LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIHhpbGlueF9pODI1OV9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKTsKIAl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEgPSBpODI1OV9pcnEoKTsKKwogCWlmIChjYXNjYWRlX2lycSkKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKIAogCS8qIExldCB4aWxpbnhfaW50YyBlbmQgdGhlIGludGVycnVwdCAqLwotCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCWNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHhpbGlueF9pODI1OV9zZXR1cF9jYXNjYWRlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZSBiL2FyY2gvczM5MC9ib290L01ha2VmaWxlCmluZGV4IDg4MDBjZjA5Li42MzVkNjc3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAkJCXRyIC1jICdbMC05QS1aYS16XScgJ18nYF9fYGRhdGUgfCBcCiAJCQl0ciAtYyAnWzAtOUEtWmEtel0nICdfJ2BfdAogCi1FWFRSQV9DRkxBR1MgIDo9IC1EQ09NUElMRV9WRVJTSU9OPSQoQ09NUElMRV9WRVJTSU9OKSAtZ3N0YWJzIC1JLgorY2NmbGFncy15ICA6PSAtRENPTVBJTEVfVkVSU0lPTj0kKENPTVBJTEVfVkVSU0lPTikgLWdzdGFicyAtSS4KIAogdGFyZ2V0cyA6PSBpbWFnZQogdGFyZ2V0cyArPSBiekltYWdlCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggMmUwNTk3Mi4uZTFjOGYzYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtNzQyLDE4ICs3NDIsNDIgQEAKICAqICAgIDIzIDIyIDIxIDIwIDE5IDE4IDE3IDE2IDMxIDMwIDI5IDI4IDI3IDI2IDI1IDI0CiAgKi8KIAotI2RlZmluZSBleHQyX3NldF9iaXQobnIsIGFkZHIpICAgICAgIFwKLQlfX3Rlc3RfYW5kX3NldF9iaXQoKG5yKV4oX19CSVRPUFNfV09SRFNJWkUgLSA4KSwgKHVuc2lnbmVkIGxvbmcgKilhZGRyKQotI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKSAgICAgICBcCi0JdGVzdF9hbmRfc2V0X2JpdCgobnIpXihfX0JJVE9QU19XT1JEU0laRSAtIDgpLCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCi0jZGVmaW5lIGV4dDJfY2xlYXJfYml0KG5yLCBhZGRyKSAgICAgXAotCV9fdGVzdF9hbmRfY2xlYXJfYml0KChucileKF9fQklUT1BTX1dPUkRTSVpFIC0gOCksICh1bnNpZ25lZCBsb25nICopYWRkcikKLSNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKSAgICAgXAotCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpXihfX0JJVE9QU19XT1JEU0laRSAtIDgpLCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCi0jZGVmaW5lIGV4dDJfdGVzdF9iaXQobnIsIGFkZHIpICAgICAgXAotCXRlc3RfYml0KChucileKF9fQklUT1BTX1dPUkRTSVpFIC0gOCksICh1bnNpZ25lZCBsb25nICopYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXRfbGUodW5zaWduZWQgbG9uZyBuciwgdm9pZCAqYWRkcikKK3sKKwlfX3NldF9iaXQobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSwgYWRkcik7Cit9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdCh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXRfbGUodW5zaWduZWQgbG9uZyBuciwgdm9pZCAqYWRkcikKK3sKKwlfX2NsZWFyX2JpdChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9zZXRfYml0X2xlKHVuc2lnbmVkIGxvbmcgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIF9fdGVzdF9hbmRfc2V0X2JpdChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdF9sZSh1bnNpZ25lZCBsb25nIG5yLCB2b2lkICphZGRyKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCksIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZSh1bnNpZ25lZCBsb25nIG5yLCB2b2lkICphZGRyKQoreworCXJldHVybiBfX3Rlc3RfYW5kX2NsZWFyX2JpdChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0X2xlKHVuc2lnbmVkIGxvbmcgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9iaXRfbGUodW5zaWduZWQgbG9uZyBuciwgY29uc3Qgdm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gdGVzdF9iaXQobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfZmlyc3RfemVyb19iaXRfbGUodm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgYnl0ZXMsIGJpdHM7CiAKQEAgLTc2NCw3ICs3ODgsNyBAQAogCXJldHVybiAoYml0cyA8IHNpemUpID8gYml0cyA6IHNpemU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGV4dDJfZmluZF9uZXh0X3plcm9fYml0KHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfemVyb19iaXRfbGUodm9pZCAqdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyAqYWRkciA9IHZhZGRyLCAqcDsKQEAgLTc5MCwxMSArODE0LDEwIEBACiAJCXNpemUgLT0gX19CSVRPUFNfV09SRFNJWkU7CiAJCXArKzsKICAgICAgICAgfQotCXJldHVybiBvZmZzZXQgKyBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQocCwgc2l6ZSk7CisJcmV0dXJuIG9mZnNldCArIGZpbmRfZmlyc3RfemVyb19iaXRfbGUocCwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBleHQyX2ZpbmRfZmlyc3RfYml0KHZvaWQgKnZhZGRyLAotCQkJCQkJdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbmRfZmlyc3RfYml0X2xlKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBieXRlcywgYml0czsKIApAQCAtODA1LDcgKzgyOCw3IEBACiAJcmV0dXJuIChiaXRzIDwgc2l6ZSkgPyBiaXRzIDogc2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZXh0Ml9maW5kX25leHRfYml0KHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYml0X2xlKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAl1bnNpZ25lZCBsb25nICphZGRyID0gdmFkZHIsICpwOwpAQCAtODMxLDEwICs4NTQsMTQgQEAKIAkJc2l6ZSAtPSBfX0JJVE9QU19XT1JEU0laRTsKIAkJcCsrOwogCX0KLQlyZXR1cm4gb2Zmc2V0ICsgZXh0Ml9maW5kX2ZpcnN0X2JpdChwLCBzaXplKTsKKwlyZXR1cm4gb2Zmc2V0ICsgZmluZF9maXJzdF9iaXRfbGUocCwgc2l6ZSk7CiB9CiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KKyNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikJXAorCXRlc3RfYW5kX3NldF9iaXRfbGUobnIsIGFkZHIpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikJXAorCXRlc3RfYW5kX2NsZWFyX2JpdF9sZShuciwgYWRkcikKKwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IDA0ZDZiOTUuLmVlYjUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC0zMCwxNCArMzAsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi10eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7Ci0jaWZkZWYgX19zMzkweF9fCi0vKiBETUEgYWRkcmVzc2VzIGNvbWUgaW4gMzItYml0IGFuZCA2NC1iaXQgZmxhdm91cnMuICovCi10eXBlZGVmIHU2NCBkbWFfYWRkcl90OwotI2Vsc2UKLXR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Ci0jZW5kaWYKLQogI2lmbmRlZiBfX3MzOTB4X18KIHR5cGVkZWYgdW5pb24gewogCXVuc2lnbmVkIGxvbmcgbG9uZyBwYWlyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9NYWtlZmlsZSBiL2FyY2gvczM5MC9rdm0vTWFrZWZpbGUKaW5kZXggZTUyMjFlYy4uODYwZDI2NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAva3ZtL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogCiBjb21tb24tb2JqcyA9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubykKIAotRVhUUkFfQ0ZMQUdTICs9IC1JdmlydC9rdm0gLUlhcmNoL3MzOTAva3ZtCitjY2ZsYWdzLXkgOj0gLUl2aXJ0L2t2bSAtSWFyY2gvczM5MC9rdm0KIAoga3ZtLW9ianMgOj0gJChjb21tb24tb2Jqcykga3ZtLXMzOTAubyBzaWU2NGEubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vIGRpYWcubwogb2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tYXRoLWVtdS9NYWtlZmlsZSBiL2FyY2gvczM5MC9tYXRoLWVtdS9NYWtlZmlsZQppbmRleCBjODQ4OTAzLi41MWQzOTk1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbWF0aC1lbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL21hdGgtZW11L01ha2VmaWxlCkBAIC00LDQgKzQsNCBAQAogCiBvYmotJChDT05GSUdfTUFUSEVNVSkgOj0gbWF0aC5vCiAKLUVYVFJBX0NGTEFHUyA6PSAtSSQoc3JjKSAtSWluY2x1ZGUvbWF0aC1lbXUgLXcKK2NjZmxhZ3MteSA6PSAtSSQoc3JjKSAtSWluY2x1ZGUvbWF0aC1lbXUgLXcKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9vcHJvZmlsZS9NYWtlZmlsZSBiL2FyY2gvczM5MC9vcHJvZmlsZS9NYWtlZmlsZQppbmRleCA1MzdiMmQ4Li5kNjk4Y2RkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvb3Byb2ZpbGUvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL29wcm9maWxlL01ha2VmaWxlCkBAIC02LDQgKzYsNCBAQAogCQlvcHJvZmlsZWZzLm8gb3Byb2ZpbGVfc3RhdHMubyAgXAogCQl0aW1lcl9pbnQubyApCiAKLW9wcm9maWxlLXkJCQkJOj0gJChEUklWRVJfT0JKUykgaW5pdC5vIGJhY2t0cmFjZS5vCitvcHJvZmlsZS15IDo9CSQoRFJJVkVSX09CSlMpIGluaXQubyBiYWNrdHJhY2UubyBod3NhbXBsZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jIGIvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDhmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmMKQEAgLTAsMCArMSwxMjU2IEBACisvKioKKyAqIGFyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuYworICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMAorICogQXV0aG9yOiBIZWlueiBHcmFhbGZzIDxncmFhbGZzQGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9vb20uaD4KKyNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KKworI2luY2x1ZGUgImh3c2FtcGxlci5oIgorCisjZGVmaW5lIE1BWF9OVU1fU0RCIDUxMQorI2RlZmluZSBNSU5fTlVNX1NEQiAxCisKKyNkZWZpbmUgQUxFUlRfUkVRX01BU0sgICAweDQwMDAwMDAwMDAwMDAwMDB1bAorI2RlZmluZSBCVUZGRVJfRlVMTF9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMHVsCisKKyNkZWZpbmUgRUlfSUVBICAgICAgKDEgPDwgMzEpCS8qIGludmFsaWQgZW50cnkgYWRkcmVzcyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUlfSVNFICAgICAgKDEgPDwgMzApCS8qIGluY29ycmVjdCBTREJUIGVudHJ5ICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUlfUFJBICAgICAgKDEgPDwgMjkpCS8qIHByb2dyYW0gcmVxdWVzdCBhbGVydCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUlfU0FDQSAgICAgKDEgPDwgMjMpCS8qIHNhbXBsZXIgYXV0aG9yaXphdGlvbiBjaGFuZ2UgYWxlcnQgKi8KKyNkZWZpbmUgRUlfTFNEQSAgICAgKDEgPDwgMjIpCS8qIGxvc3Mgb2Ygc2FtcGxlIGRhdGEgYWxlcnQgICAgICAgICAgKi8KKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBod3NfY3B1X2J1ZmZlciwgc2FtcGxlcl9jcHVfYnVmZmVyKTsKKworc3RydWN0IGh3c19leGVjdXRlX3Bhcm1zIHsKKwl2b2lkICpidWZmZXI7CisJc2lnbmVkIGludCByYzsKK307CisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBod3NfY3B1X2J1ZmZlciwgc2FtcGxlcl9jcHVfYnVmZmVyKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChzYW1wbGVyX2NwdV9idWZmZXIpOworCitzdGF0aWMgREVGSU5FX01VVEVYKGh3c19zZW0pOworc3RhdGljIERFRklORV9NVVRFWChod3Nfc2VtX29vbSk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGh3c19mbHVzaF9hbGw7CitzdGF0aWMgdW5zaWduZWQgaW50IGh3c19vb207CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmh3c193cTsKKworc3RhdGljIHVuc2lnbmVkIGludCBod3Nfc3RhdGU7CitlbnVtIHsKKwlIV1NfSU5JVCA9IDEsCisJSFdTX0RFQUxMT0NBVEVELAorCUhXU19TVE9QUEVELAorCUhXU19TVEFSVEVELAorCUhXU19TVE9QUElORyB9OworCisvKiBzZXQgdG8gMSBpZiBjYWxsZWQgYnkga2VybmVsIGR1cmluZyBtZW1vcnkgYWxsb2NhdGlvbiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgb29tX2tpbGxlcl93YXNfYWN0aXZlOworLyogc2l6ZSBvZiBTREJUIGFuZCBTREIgYXMgb2YgYWxsb2NhdGUgQVBJICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fc2RidCA9IDEwMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG51bV9zZGIgPSA1MTE7CisvKiBzYW1wbGluZyBpbnRlcnZhbCAobWFjaGluZSBjeWNsZXMpICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWluX3NhbXBsZXJfcmF0ZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9zYW1wbGVyX3JhdGU7CisKK3N0YXRpYyBpbnQgc3NjdGwodm9pZCAqYnVmZmVyKQoreworCWludCBjYzsKKworCS8qIHNldCBpbiBvcmRlciB0byBkZXRlY3QgYSBwcm9ncmFtIGNoZWNrICovCisJY2MgPSAxOworCisJYXNtIHZvbGF0aWxlKAorCQkiMDogLmluc24gcywweEIyODcwMDAwLDAoJTEpXG4iCisJCSIxOiBpcG0gJTBcbiIKKwkJIiAgIHNybCAlMCwyOFxuIgorCQkiMjpcbiIKKwkJRVhfVEFCTEUoMGIsIDJiKSBFWF9UQUJMRSgxYiwgMmIpCisJCTogIitkIiAoY2MpLCAiK2EiIChidWZmZXIpCisJCTogIm0iICgqKChzdHJ1Y3QgaHdzX3NzY3RsX3JlcXVlc3RfYmxvY2sgKilidWZmZXIpKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiBjYyA/IC1FSU5WQUwgOiAwIDsKK30KKworc3RhdGljIGludCBxc2kodm9pZCAqYnVmZmVyKQoreworCWludCBjYzsKKwljYyA9IDE7CisKKwlhc20gdm9sYXRpbGUoCisJCSIwOiAuaW5zbiBzLDB4QjI4NjAwMDAsMCglMSlcbiIKKwkJIjE6IGxoaSAlMCwwXG4iCisJCSIyOlxuIgorCQlFWF9UQUJMRSgwYiwgMmIpIEVYX1RBQkxFKDFiLCAyYikKKwkJOiAiPWQiIChjYyksICIrYSIgKGJ1ZmZlcikKKwkJOiAibSIgKCooKHN0cnVjdCBod3NfcXNpX2luZm9fYmxvY2sgKilidWZmZXIpKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiBjYyA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgdm9pZCBleGVjdXRlX3FzaSh2b2lkICpwYXJtcykKK3sKKwlzdHJ1Y3QgaHdzX2V4ZWN1dGVfcGFybXMgKmVwID0gcGFybXM7CisKKwllcC0+cmMgPSBxc2koZXAtPmJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWN1dGVfc3NjdGwodm9pZCAqcGFybXMpCit7CisJc3RydWN0IGh3c19leGVjdXRlX3Bhcm1zICplcCA9IHBhcm1zOworCisJZXAtPnJjID0gc3NjdGwoZXAtPmJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgc21wX2N0bF9zc2N0bF9zdG9wKGludCBjcHUpCit7CisJaW50IHJjOworCXN0cnVjdCBod3NfZXhlY3V0ZV9wYXJtcyBlcDsKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CisKKwljYi0+c3NjdGwuZXMgPSAwOworCWNiLT5zc2N0bC5jcyA9IDA7CisKKwllcC5idWZmZXIgPSAmY2ItPnNzY3RsOworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGV4ZWN1dGVfc3NjdGwsICZlcCwgMSk7CisJcmMgPSBlcC5yYzsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJod3NhbXBsZXI6IENQVSAlZCBDUFVNRiBTU0NUTCBmYWlsZWQuXG4iLCBjcHUpOworCQlkdW1wX3N0YWNrKCk7CisJfQorCisJZXAuYnVmZmVyID0gJmNiLT5xc2k7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZXhlY3V0ZV9xc2ksICZlcCwgMSk7CisKKwlpZiAoY2ItPnFzaS5lcyB8fCBjYi0+cXNpLmNzKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICJDUFVNRiBzYW1wbGluZyBkaWQgbm90IHN0b3AgcHJvcGVybHkuXG4iKTsKKwkJZHVtcF9zdGFjaygpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzbXBfY3RsX3NzY3RsX2RlYWN0aXZhdGUoaW50IGNwdSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IGh3c19leGVjdXRlX3Bhcm1zIGVwOworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKworCWNiLT5zc2N0bC5lcyA9IDE7CisJY2ItPnNzY3RsLmNzID0gMDsKKworCWVwLmJ1ZmZlciA9ICZjYi0+c3NjdGw7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZXhlY3V0ZV9zc2N0bCwgJmVwLCAxKTsKKwlyYyA9IGVwLnJjOworCWlmIChyYykKKwkJcHJpbnRrKEtFUk5fRVJSICJod3NhbXBsZXI6IENQVSAlZCBDUFVNRiBTU0NUTCBmYWlsZWQuXG4iLCBjcHUpOworCisJZXAuYnVmZmVyID0gJmNiLT5xc2k7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZXhlY3V0ZV9xc2ksICZlcCwgMSk7CisKKwlpZiAoY2ItPnFzaS5jcykKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIkNQVU1GIHNhbXBsaW5nIHdhcyBub3Qgc2V0IGluYWN0aXZlLlxuIik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc21wX2N0bF9zc2N0bF9lbmFibGVfYWN0aXZhdGUoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBpbnRlcnZhbCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IGh3c19leGVjdXRlX3Bhcm1zIGVwOworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKworCWNiLT5zc2N0bC5oID0gMTsKKwljYi0+c3NjdGwudGVhciA9IGNiLT5maXJzdF9zZGJ0OworCWNiLT5zc2N0bC5kZWFyID0gKih1bnNpZ25lZCBsb25nICopIGNiLT5maXJzdF9zZGJ0OworCWNiLT5zc2N0bC5pbnRlcnZhbCA9IGludGVydmFsOworCWNiLT5zc2N0bC5lcyA9IDE7CisJY2ItPnNzY3RsLmNzID0gMTsKKworCWVwLmJ1ZmZlciA9ICZjYi0+c3NjdGw7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZXhlY3V0ZV9zc2N0bCwgJmVwLCAxKTsKKwlyYyA9IGVwLnJjOworCWlmIChyYykKKwkJcHJpbnRrKEtFUk5fRVJSICJod3NhbXBsZXI6IENQVSAlZCBDUFVNRiBTU0NUTCBmYWlsZWQuXG4iLCBjcHUpOworCisJZXAuYnVmZmVyID0gJmNiLT5xc2k7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZXhlY3V0ZV9xc2ksICZlcCwgMSk7CisJaWYgKGVwLnJjKQorCQlwcmludGsoS0VSTl9FUlIgImh3c2FtcGxlcjogQ1BVICVkIENQVU1GIFFTSSBmYWlsZWQuXG4iLCBjcHUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNtcF9jdGxfcXNpKGludCBjcHUpCit7CisJc3RydWN0IGh3c19leGVjdXRlX3Bhcm1zIGVwOworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKworCWVwLmJ1ZmZlciA9ICZjYi0+cXNpOworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGV4ZWN1dGVfcXNpLCAmZXAsIDEpOworCisJcmV0dXJuIGVwLnJjOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnRyYWlsZXJfZW50cnlfcHRyKHVuc2lnbmVkIGxvbmcgdikKK3sKKwl2b2lkICpyZXQ7CisKKwlyZXQgPSAodm9pZCAqKXY7CisJcmV0ICs9IFBBR0VfU0laRTsKKwlyZXQgLT0gc2l6ZW9mKHN0cnVjdCBod3NfdHJhaWxlcl9lbnRyeSk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgcmV0OworfQorCisvKiBwcm90b3R5cGVzIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgd29ya2VyICovCitzdGF0aWMgdm9pZCBod3NfZXh0X2hhbmRsZXIodW5zaWduZWQgaW50IGV4dF9pbnRfY29kZSwKKwkJCQl1bnNpZ25lZCBpbnQgcGFyYW0zMiwgdW5zaWduZWQgbG9uZyBwYXJhbTY0KTsKKworc3RhdGljIHZvaWQgd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3N0YXRpYyB2b2lkIGFkZF9zYW1wbGVzX3RvX29wcm9maWxlKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgbG9uZyAqLAorCQkJCXVuc2lnbmVkIGxvbmcgKmRlYXIpOworCitzdGF0aWMgdm9pZCBpbml0X2FsbF9jcHVfYnVmZmVycyh2b2lkKQoreworCWludCBjcHU7CisJc3RydWN0IGh3c19jcHVfYnVmZmVyICpjYjsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWNiID0gJnBlcl9jcHUoc2FtcGxlcl9jcHVfYnVmZmVyLCBjcHUpOworCQltZW1zZXQoY2IsIDAsIHNpemVvZihzdHJ1Y3QgaHdzX2NwdV9idWZmZXIpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNfbGlua19lbnRyeSh1bnNpZ25lZCBsb25nICpzKQoreworCXJldHVybiAqcyAmIDB4MXVsID8gMSA6IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpnZXRfbmV4dF9zZGJ0KHVuc2lnbmVkIGxvbmcgKnMpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nICopICgqcyAmIH4weDF1bCk7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9jcHVfYnVmZmVycyh2b2lkKQoreworCWludCBjcHU7CisJaW50IHJjOworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwlyYyA9IDA7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CisJCWF0b21pY19zZXQoJmNiLT5leHRfcGFyYW1zLCAwKTsKKwkJY2ItPndvcmtlcl9lbnRyeSA9IDA7CisJCWNiLT5zYW1wbGVfb3ZlcmZsb3cgPSAwOworCQljYi0+cmVxX2FsZXJ0ID0gMDsKKwkJY2ItPmluY29ycmVjdF9zZGJ0X2VudHJ5ID0gMDsKKwkJY2ItPmludmFsaWRfZW50cnlfYWRkcmVzcyA9IDA7CisJCWNiLT5sb3NzX29mX3NhbXBsZV9kYXRhID0gMDsKKwkJY2ItPnNhbXBsZV9hdXRoX2NoYW5nZV9hbGVydCA9IDA7CisJCWNiLT5maW5pc2ggPSAwOworCQljYi0+b29tID0gMDsKKwkJY2ItPnN0b3BfbW9kZSA9IDA7CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKgorICogYWxsb2NhdGVfc2RidCgpIC0gYWxsb2NhdGUgc2FtcGxlciBtZW1vcnkKKyAqIEBjcHU6IHRoZSBjcHUgZm9yIHdoaWNoIHNhbXBsZXIgbWVtb3J5IGlzIGFsbG9jYXRlZAorICoKKyAqIEEgNEsgcGFnZSBpcyBhbGxvY2F0ZWQgZm9yIGVhY2ggcmVxdWVzdGVkIFNEQlQuCisgKiBBIG1heGltdW0gb2YgNTExIDRLIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgZm9yIHRoZSBTREJzIGluIGVhY2ggb2YgdGhlIFNEQlRzLgorICogU2V0IEFMRVJUX1JFUSBtYXNrIGluIGVhY2ggU0RCcyB0cmFpbGVyLgorICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIDwwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBhbGxvY2F0ZV9zZGJ0KGludCBjcHUpCit7CisJaW50IGosIGssIHJjOworCXVuc2lnbmVkIGxvbmcgKnNkYnQ7CisJdW5zaWduZWQgbG9uZyAgc2RiOworCXVuc2lnbmVkIGxvbmcgKnRhaWw7CisJdW5zaWduZWQgbG9uZyAqdHJhaWxlcjsKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CisKKwlpZiAoY2ItPmZpcnN0X3NkYnQpCisJCXJldHVybiAtRUlOVkFMOworCisJc2RidCA9IE5VTEw7CisJdGFpbCA9IHNkYnQ7CisKKwlmb3IgKGogPSAwOyBqIDwgbnVtX3NkYnQ7IGorKykgeworCQlzZGJ0ID0gKHVuc2lnbmVkIGxvbmcgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisKKwkJbXV0ZXhfbG9jaygmaHdzX3NlbV9vb20pOworCQkvKiBPT00ga2lsbGVyIG1pZ2h0IGhhdmUgYmVlbiBhY3RpdmF0ZWQgKi8KKwkJYmFycmllcigpOworCQlpZiAob29tX2tpbGxlcl93YXNfYWN0aXZlIHx8ICFzZGJ0KSB7CisJCQlpZiAoc2RidCkKKwkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2RidCk7CisKKwkJCWdvdG8gYWxsb2NhdGVfc2RidF9lcnJvcjsKKwkJfQorCQlpZiAoY2ItPmZpcnN0X3NkYnQgPT0gMCkKKwkJCWNiLT5maXJzdF9zZGJ0ID0gKHVuc2lnbmVkIGxvbmcpc2RidDsKKworCQkvKiBsaW5rIGN1cnJlbnQgcGFnZSB0byB0YWlsIG9mIGNoYWluICovCisJCWlmICh0YWlsKQorCQkJKnRhaWwgPSAodW5zaWduZWQgbG9uZykodm9pZCAqKXNkYnQgKyAxOworCisJCW11dGV4X3VubG9jaygmaHdzX3NlbV9vb20pOworCisJCWZvciAoayA9IDA7IGsgPCBudW1fc2RiOyBrKyspIHsKKwkJCS8qIGdldCBhbmQgc2V0IFNEQiBwYWdlICovCisJCQlzZGIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisKKwkJCW11dGV4X2xvY2soJmh3c19zZW1fb29tKTsKKwkJCS8qIE9PTSBraWxsZXIgbWlnaHQgaGF2ZSBiZWVuIGFjdGl2YXRlZCAqLworCQkJYmFycmllcigpOworCQkJaWYgKG9vbV9raWxsZXJfd2FzX2FjdGl2ZSB8fCAhc2RiKSB7CisJCQkJaWYgKHNkYikKKwkJCQkJZnJlZV9wYWdlKHNkYik7CisKKwkJCQlnb3RvIGFsbG9jYXRlX3NkYnRfZXJyb3I7CisJCQl9CisJCQkqc2RidCA9IHNkYjsKKwkJCXRyYWlsZXIgPSB0cmFpbGVyX2VudHJ5X3B0cigqc2RidCk7CisJCQkqdHJhaWxlciA9IEFMRVJUX1JFUV9NQVNLOworCQkJc2RidCsrOworCQkJbXV0ZXhfdW5sb2NrKCZod3Nfc2VtX29vbSk7CisJCX0KKwkJdGFpbCA9IHNkYnQ7CisJfQorCW11dGV4X2xvY2soJmh3c19zZW1fb29tKTsKKwlpZiAob29tX2tpbGxlcl93YXNfYWN0aXZlKQorCQlnb3RvIGFsbG9jYXRlX3NkYnRfZXJyb3I7CisKKwlyYyA9IDA7CisJaWYgKHRhaWwpCisJCSp0YWlsID0gKHVuc2lnbmVkIGxvbmcpCisJCQkoKHZvaWQgKiljYi0+Zmlyc3Rfc2RidCkgKyAxOworCithbGxvY2F0ZV9zZGJ0X2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZod3Nfc2VtX29vbSk7CisJcmV0dXJuIHJjOworCithbGxvY2F0ZV9zZGJ0X2Vycm9yOgorCXJjID0gLUVOT01FTTsKKwlnb3RvIGFsbG9jYXRlX3NkYnRfZXhpdDsKK30KKworLyoKKyAqIGRlYWxsb2NhdGVfc2RidCgpIC0gZGVhbGxvY2F0ZSBhbGwgc2FtcGxlciBtZW1vcnkKKyAqCisgKiBGb3IgZWFjaCBvbmxpbmUgQ1BVIGFsbCBTREJUIHRyZWVzIGFyZSBkZWFsbG9jYXRlZC4KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlZCBwYWdlcy4KKyAqLworc3RhdGljIGludCBkZWFsbG9jYXRlX3NkYnQodm9pZCkKK3sKKwlpbnQgY3B1OworCWludCBjb3VudGVyOworCisJY291bnRlciA9IDA7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0OworCQl1bnNpZ25lZCBsb25nIHNkYnQ7CisJCXVuc2lnbmVkIGxvbmcgKmN1cnI7CisJCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwkJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CisKKwkJaWYgKCFjYi0+Zmlyc3Rfc2RidCkKKwkJCWNvbnRpbnVlOworCisJCXNkYnQgPSBjYi0+Zmlyc3Rfc2RidDsKKwkJY3VyciA9ICh1bnNpZ25lZCBsb25nICopIHNkYnQ7CisJCXN0YXJ0ID0gc2RidDsKKworCQkvKiB3ZSdsbCBmcmVlIHRoZSBTREJUIGFmdGVyIGFsbCBTREJzIGFyZSBwcm9jZXNzZWQuLi4gKi8KKwkJd2hpbGUgKDEpIHsKKwkJCWlmICghKmN1cnIgfHwgIXNkYnQpCisJCQkJYnJlYWs7CisKKwkJCS8qIHdhdGNoIGZvciBsaW5rIGVudHJ5IHJlc2V0IGlmIGZvdW5kICovCisJCQlpZiAoaXNfbGlua19lbnRyeShjdXJyKSkgeworCQkJCWN1cnIgPSBnZXRfbmV4dF9zZGJ0KGN1cnIpOworCQkJCWlmIChzZGJ0KQorCQkJCQlmcmVlX3BhZ2Uoc2RidCk7CisKKwkJCQkvKiB3ZSBhcmUgZG9uZSBpZiB3ZSByZWFjaCB0aGUgc3RhcnQgKi8KKwkJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGN1cnIgPT0gc3RhcnQpCisJCQkJCWJyZWFrOworCQkJCWVsc2UKKwkJCQkJc2RidCA9ICh1bnNpZ25lZCBsb25nKSBjdXJyOworCQkJfSBlbHNlIHsKKwkJCQkvKiBwcm9jZXNzIFNEQiBwb2ludGVyICovCisJCQkJaWYgKCpjdXJyKSB7CisJCQkJCWZyZWVfcGFnZSgqY3Vycik7CisJCQkJCWN1cnIrKzsKKwkJCQl9CisJCQl9CisJCQljb3VudGVyKys7CisJCX0KKwkJY2ItPmZpcnN0X3NkYnQgPSAwOworCX0KKwlyZXR1cm4gY291bnRlcjsKK30KKworc3RhdGljIGludCBzdGFydF9zYW1wbGluZyhpbnQgY3B1KQoreworCWludCByYzsKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CisJcmMgPSBzbXBfY3RsX3NzY3RsX2VuYWJsZV9hY3RpdmF0ZShjcHUsIGludGVydmFsKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHdzYW1wbGVyOiBDUFUgJWQgc3NjdGwgZmFpbGVkLlxuIiwgY3B1KTsKKwkJZ290byBzdGFydF9leGl0OworCX0KKworCXJjID0gLUVJTlZBTDsKKwlpZiAoIWNiLT5xc2kuZXMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHdzYW1wbGVyOiBDUFUgJWQgc3NjdGwgbm90IGVuYWJsZWQuXG4iLCBjcHUpOworCQlnb3RvIHN0YXJ0X2V4aXQ7CisJfQorCisJaWYgKCFjYi0+cXNpLmNzKSB7CisJCXByaW50ayhLRVJOX0lORk8gImh3c2FtcGxlcjogQ1BVICVkIHNzY3RsIG5vdCBhY3RpdmUuXG4iLCBjcHUpOworCQlnb3RvIHN0YXJ0X2V4aXQ7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTworCQkiaHdzYW1wbGVyOiBDUFUgJWQsIENQVU1GIFNhbXBsaW5nIHN0YXJ0ZWQsIGludGVydmFsICVsdS5cbiIsCisJCWNwdSwgaW50ZXJ2YWwpOworCisJcmMgPSAwOworCitzdGFydF9leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzdG9wX3NhbXBsaW5nKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyB2OworCWludCByYzsKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJcmMgPSBzbXBfY3RsX3FzaShjcHUpOworCVdBUk5fT04ocmMpOworCisJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CisJaWYgKCFyYyAmJiAhY2ItPnFzaS5lcykKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHdzYW1wbGVyOiBDUFUgJWQsIGFscmVhZHkgc3RvcHBlZC5cbiIsIGNwdSk7CisKKwlyYyA9IHNtcF9jdGxfc3NjdGxfc3RvcChjcHUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9JTkZPICJod3NhbXBsZXI6IENQVSAlZCwgc3NjdGwgc3RvcCBlcnJvciAlZC5cbiIsCisJCQkJY3B1LCByYyk7CisJCWdvdG8gc3RvcF9leGl0OworCX0KKworCXByaW50ayhLRVJOX0lORk8gImh3c2FtcGxlcjogQ1BVICVkLCBDUFVNRiBTYW1wbGluZyBzdG9wcGVkLlxuIiwgY3B1KTsKKworc3RvcF9leGl0OgorCXYgPSBjYi0+cmVxX2FsZXJ0OworCWlmICh2KQorCQlwcmludGsoS0VSTl9FUlIgImh3c2FtcGxlcjogQ1BVICVkIENQVU1GIFJlcXVlc3QgYWxlcnQsIgorCQkJCSIgY291bnQ9JWx1LlxuIiwgY3B1LCB2KTsKKworCXYgPSBjYi0+bG9zc19vZl9zYW1wbGVfZGF0YTsKKwlpZiAodikKKwkJcHJpbnRrKEtFUk5fRVJSICJod3NhbXBsZXI6IENQVSAlZCBDUFVNRiBMb3NzIG9mIHNhbXBsZSBkYXRhLCIKKwkJCQkiIGNvdW50PSVsdS5cbiIsIGNwdSwgdik7CisKKwl2ID0gY2ItPmludmFsaWRfZW50cnlfYWRkcmVzczsKKwlpZiAodikKKwkJcHJpbnRrKEtFUk5fRVJSICJod3NhbXBsZXI6IENQVSAlZCBDUFVNRiBJbnZhbGlkIGVudHJ5IGFkZHJlc3MsIgorCQkJCSIgY291bnQ9JWx1LlxuIiwgY3B1LCB2KTsKKworCXYgPSBjYi0+aW5jb3JyZWN0X3NkYnRfZW50cnk7CisJaWYgKHYpCisJCXByaW50ayhLRVJOX0VSUgorCQkJCSJod3NhbXBsZXI6IENQVSAlZCBDUFVNRiBJbmNvcnJlY3QgU0RCVCBhZGRyZXNzLCIKKwkJCQkiIGNvdW50PSVsdS5cbiIsIGNwdSwgdik7CisKKwl2ID0gY2ItPnNhbXBsZV9hdXRoX2NoYW5nZV9hbGVydDsKKwlpZiAodikKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImh3c2FtcGxlcjogQ1BVICVkIENQVU1GIFNhbXBsZSBhdXRob3JpemF0aW9uIGNoYW5nZSwiCisJCQkJIiBjb3VudD0lbHUuXG4iLCBjcHUsIHYpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNoZWNrX2hhcmR3YXJlX3ByZXJlcXVpc2l0ZXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZmFjaWxpdHlfYml0c1syXTsKKworCW1lbWNweShmYWNpbGl0eV9iaXRzLCBTMzkwX2xvd2NvcmUuc3RmbGVfZmFjX2xpc3QsIDMyKTsKKwlpZiAoIShmYWNpbGl0eV9iaXRzWzFdICYgKDFVTEwgPDwgNTkpKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIDA7Cit9CisvKgorICogaHdzX29vbV9jYWxsYmFjaygpIC0gdGhlIE9PTSBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEluIGNhc2UgdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZvciB0aGUKKyAqICBodyBzYW1wbGVyLCBhbGwgb2J0YWluZWQgbWVtb3J5IGlzIGRlYWxsb2NhdGVkIGFuZCBhIGZsYWcgaXMgc2V0CisgKiAgc28gbWFpbiBzYW1wbGVyIG1lbW9yeSBhbGxvY2F0aW9uIGNhbiBleGl0IHdpdGggYSBmYWlsdXJlIGNvZGUuCisgKiBJbiBjYXNlIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkIGR1cmluZyBzYW1wbGluZyB0aGUgaHcgc2FtcGxlcgorICogIGlzIGRlYWN0aXZhdGVkIGZvciBhbGwgQ1BVcy4KKyAqLworc3RhdGljIGludCBod3Nfb29tX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCXVuc2lnbmVkIGxvbmcgZHVtbXksIHZvaWQgKnBhcm0pCit7CisJdW5zaWduZWQgbG9uZyAqZnJlZWQ7CisJaW50IGNwdTsKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJZnJlZWQgPSBwYXJtOworCisJbXV0ZXhfbG9jaygmaHdzX3NlbV9vb20pOworCisJaWYgKGh3c19zdGF0ZSA9PSBIV1NfREVBTExPQ0FURUQpIHsKKwkJLyogZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uICovCisJCWlmIChvb21fa2lsbGVyX3dhc19hY3RpdmUgPT0gMCkgeworCQkJb29tX2tpbGxlcl93YXNfYWN0aXZlID0gMTsKKwkJCSpmcmVlZCArPSBkZWFsbG9jYXRlX3NkYnQoKTsKKwkJfQorCX0gZWxzZSB7CisJCWludCBpOworCQljcHUgPSBnZXRfY3B1KCk7CisJCWNiID0gJnBlcl9jcHUoc2FtcGxlcl9jcHVfYnVmZmVyLCBjcHUpOworCisJCWlmICghY2ItPm9vbSkgeworCQkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCQkJc21wX2N0bF9zc2N0bF9kZWFjdGl2YXRlKGkpOworCQkJCWNiLT5vb20gPSAxOworCQkJfQorCQkJY2ItPmZpbmlzaCA9IDE7CisKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkiaHdzYW1wbGVyOiBDUFUgJWQsIE9PTSBub3RpZnkgZHVyaW5nIENQVU1GIFNhbXBsaW5nLlxuIiwKKwkJCQljcHUpOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZod3Nfc2VtX29vbSk7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGh3c19vb21fbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBod3Nfb29tX2NhbGxiYWNrCit9OworCitzdGF0aWMgaW50IGh3c19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJLyogV2UgZG8gbm90IGhhdmUgc2FtcGxlciBzcGFjZSBhdmFpbGFibGUgZm9yIGFsbCBwb3NzaWJsZSBDUFVzLgorCSAgIEFsbCBDUFVzIHNob3VsZCBiZSBvbmxpbmUgd2hlbiBodyBzYW1wbGluZyBpcyBhY3RpdmF0ZWQuICovCisJcmV0dXJuIE5PVElGWV9CQUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaHdzX2NwdV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGh3c19jcHVfY2FsbGJhY2sKK307CisKKy8qKgorICogaHdzYW1wbGVyX2RlYWN0aXZhdGUoKSAtIHNldCBoYXJkd2FyZSBzYW1wbGluZyB0ZW1wb3JhcmlseSBpbmFjdGl2ZQorICogQGNwdTogIHNwZWNpZmllcyB0aGUgQ1BVIHRvIGJlIHNldCBpbmFjdGl2ZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgITAgb24gZmFpbHVyZS4KKyAqLworaW50IGh3c2FtcGxlcl9kZWFjdGl2YXRlKHVuc2lnbmVkIGludCBjcHUpCit7CisJLyoKKwkgKiBEZWFjdGl2YXRlIGh3IHNhbXBsaW5nIHRlbXBvcmFyaWx5IGFuZCBmbHVzaCB0aGUgYnVmZmVyCisJICogYnkgcHVzaGluZyBhbGwgdGhlIHBlbmRpbmcgc2FtcGxlcyB0byBvcHJvZmlsZSBidWZmZXIuCisJICoKKwkgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdW5kZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKwkgKiAgICAgTWVtb3J5IHVubWFwLCB0YXNrIGlzIGV4aXRpbmcuCisJICovCisJaW50IHJjOworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwlyYyA9IDA7CisJbXV0ZXhfbG9jaygmaHdzX3NlbSk7CisKKwljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKwlpZiAoaHdzX3N0YXRlID09IEhXU19TVEFSVEVEKSB7CisJCXJjID0gc21wX2N0bF9xc2koY3B1KTsKKwkJV0FSTl9PTihyYyk7CisJCWlmIChjYi0+cXNpLmNzKSB7CisJCQlyYyA9IHNtcF9jdGxfc3NjdGxfZGVhY3RpdmF0ZShjcHUpOworCQkJaWYgKHJjKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSJod3NhbXBsZXI6IENQVSAlZCwgQ1BVTUYgRGVhY3RpdmF0aW9uIGZhaWxlZC5cbiIsIGNwdSk7CisJCQkJY2ItPmZpbmlzaCA9IDE7CisJCQkJaHdzX3N0YXRlID0gSFdTX1NUT1BQSU5HOworCQkJfSBlbHNlICB7CisJCQkJaHdzX2ZsdXNoX2FsbCA9IDE7CisJCQkJLyogQWRkIHdvcmsgdG8gcXVldWUgdG8gcmVhZCBwZW5kaW5nIHNhbXBsZXMuKi8KKwkJCQlxdWV1ZV93b3JrX29uKGNwdSwgaHdzX3dxLCAmY2ItPndvcmtlcik7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZod3Nfc2VtKTsKKworCWlmIChod3Nfd3EpCisJCWZsdXNoX3dvcmtxdWV1ZShod3Nfd3EpOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGh3c2FtcGxlcl9hY3RpdmF0ZSgpIC0gYWN0aXZhdGUvcmVzdW1lIGhhcmR3YXJlIHNhbXBsaW5nIHdoaWNoIHdhcyBkZWFjdGl2YXRlZAorICogQGNwdTogIHNwZWNpZmllcyB0aGUgQ1BVIHRvIGJlIHNldCBhY3RpdmUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsICEwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBod3NhbXBsZXJfYWN0aXZhdGUodW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKgorCSAqIFJlLWFjdGl2YXRlIGh3IHNhbXBsaW5nLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgaW4gcGFpciB3aXRoCisJICogaHdzYW1wbGVyX2RlYWN0aXZhdGUoKS4KKwkgKi8KKwlpbnQgcmM7CisJc3RydWN0IGh3c19jcHVfYnVmZmVyICpjYjsKKworCXJjID0gMDsKKwltdXRleF9sb2NrKCZod3Nfc2VtKTsKKworCWNiID0gJnBlcl9jcHUoc2FtcGxlcl9jcHVfYnVmZmVyLCBjcHUpOworCWlmIChod3Nfc3RhdGUgPT0gSFdTX1NUQVJURUQpIHsKKwkJcmMgPSBzbXBfY3RsX3FzaShjcHUpOworCQlXQVJOX09OKHJjKTsKKwkJaWYgKCFjYi0+cXNpLmNzKSB7CisJCQlod3NfZmx1c2hfYWxsID0gMDsKKwkJCXJjID0gc21wX2N0bF9zc2N0bF9lbmFibGVfYWN0aXZhdGUoY3B1LCBpbnRlcnZhbCk7CisJCQlpZiAocmMpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiQ1BVICVkLCBDUFVNRiBhY3RpdmF0ZSBzYW1wbGluZyBmYWlsZWQuXG4iLAorCQkJCQkgY3B1KTsKKwkJCX0KKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmaHdzX3NlbSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGh3c19leHRfaGFuZGxlcih1bnNpZ25lZCBpbnQgZXh0X2ludF9jb2RlLAorCQkJICAgIHVuc2lnbmVkIGludCBwYXJhbTMyLCB1bnNpZ25lZCBsb25nIHBhcmFtNjQpCit7CisJaW50IGNwdTsKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWNiID0gJnBlcl9jcHUoc2FtcGxlcl9jcHVfYnVmZmVyLCBjcHUpOworCisJYXRvbWljX3hjaGcoCisJCQkmY2ItPmV4dF9wYXJhbXMsCisJCQlhdG9taWNfcmVhZCgmY2ItPmV4dF9wYXJhbXMpCisJCQkJfCBTMzkwX2xvd2NvcmUuZXh0X3BhcmFtcyk7CisKKwlpZiAoaHdzX3dxKQorCQlxdWV1ZV93b3JrKGh3c193cSwgJmNiLT53b3JrZXIpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3FzaV9vbl9zZXR1cCh2b2lkKQoreworCWludCByYzsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKwkJcmMgPSBzbXBfY3RsX3FzaShjcHUpOworCQlXQVJOX09OKHJjKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCWlmICghY2ItPnFzaS5hcykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiaHdzYW1wbGVyOiBDUFVNRiBzYW1wbGluZyBpcyBub3QgYXV0aG9yaXplZC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY2ItPnFzaS5lcykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdzYW1wbGVyOiBDUFVNRiBpcyBzdGlsbCBlbmFibGVkLlxuIik7CisJCQlyYyA9IHNtcF9jdGxfc3NjdGxfc3RvcChjcHUpOworCQkJaWYgKHJjKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJIkNQVSAlZCwgQ1BVTUYgU2FtcGxpbmcgc3RvcHBlZCBub3cuXG4iLCBjcHUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX3FzaV9vbl9zdGFydCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IHJjOworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKwkJcmMgPSBzbXBfY3RsX3FzaShjcHUpOworCQlXQVJOX09OKHJjKTsKKworCQlpZiAoIWNiLT5xc2kuYXMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY2ItPnFzaS5lcykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjYi0+cXNpLmNzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3b3JrZXJfb25fc3RhcnQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CisJY2ItPndvcmtlcl9lbnRyeSA9IGNiLT5maXJzdF9zZGJ0OworfQorCitzdGF0aWMgaW50IHdvcmtlcl9jaGVja19lcnJvcih1bnNpZ25lZCBpbnQgY3B1LCBpbnQgZXh0X3BhcmFtcykKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyAqc2RidDsKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJcmMgPSAwOworCWNiID0gJnBlcl9jcHUoc2FtcGxlcl9jcHVfYnVmZmVyLCBjcHUpOworCXNkYnQgPSAodW5zaWduZWQgbG9uZyAqKSBjYi0+d29ya2VyX2VudHJ5OworCisJaWYgKCFzZGJ0IHx8ICEqc2RidCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZXh0X3BhcmFtcyAmIEVJX0lFQSkKKwkJY2ItPnJlcV9hbGVydCsrOworCisJaWYgKGV4dF9wYXJhbXMgJiBFSV9MU0RBKQorCQljYi0+bG9zc19vZl9zYW1wbGVfZGF0YSsrOworCisJaWYgKGV4dF9wYXJhbXMgJiBFSV9JRUEpIHsKKwkJY2ItPmludmFsaWRfZW50cnlfYWRkcmVzcysrOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJaWYgKGV4dF9wYXJhbXMgJiBFSV9JU0UpIHsKKwkJY2ItPmluY29ycmVjdF9zZGJ0X2VudHJ5Kys7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoZXh0X3BhcmFtcyAmIEVJX1NBQ0EpIHsKKwkJY2ItPnNhbXBsZV9hdXRoX2NoYW5nZV9hbGVydCsrOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCB3b3JrZXJfb25fZmluaXNoKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IHJjLCBpOworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKworCWlmIChjYi0+ZmluaXNoKSB7CisJCXJjID0gc21wX2N0bF9xc2koY3B1KTsKKwkJV0FSTl9PTihyYyk7CisJCWlmIChjYi0+cXNpLmVzKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJImh3c2FtcGxlcjogQ1BVICVkLCBDUFVNRiBTdG9wL0RlYWN0aXZhdGUgc2FtcGxpbmcuXG4iLAorCQkJCWNwdSk7CisJCQlyYyA9IHNtcF9jdGxfc3NjdGxfc3RvcChjcHUpOworCQkJaWYgKHJjKQorCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJImh3c2FtcGxlcjogQ1BVICVkLCBDUFVNRiBEZWFjdGl2YXRpb24gZmFpbGVkLlxuIiwKKwkJCQkJY3B1KTsKKworCQkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCQkJaWYgKGkgPT0gY3B1KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoIWNiLT5maW5pc2gpIHsKKwkJCQkJY2ItPmZpbmlzaCA9IDE7CisJCQkJCXF1ZXVlX3dvcmtfb24oaSwgaHdzX3dxLAorCQkJCQkJJmNiLT53b3JrZXIpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgd29ya2VyX29uX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgKnNkYnQ7CisJdW5zaWduZWQgY2hhciBkb25lOworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKworCXNkYnQgPSAodW5zaWduZWQgbG9uZyAqKSBjYi0+d29ya2VyX2VudHJ5OworCisJZG9uZSA9IDA7CisJLyogZG8gbm90IHByb2NlZWQgaWYgc3RvcCB3YXMgZW50ZXJlZCwKKwkgKiBmb3JnZXQgdGhlIGJ1ZmZlcnMgbm90IHlldCBwcm9jZXNzZWQgKi8KKwl3aGlsZSAoIWRvbmUgJiYgIWNiLT5zdG9wX21vZGUpIHsKKwkJdW5zaWduZWQgbG9uZyAqdHJhaWxlcjsKKwkJc3RydWN0IGh3c190cmFpbGVyX2VudHJ5ICp0ZTsKKwkJdW5zaWduZWQgbG9uZyAqZGVhciA9IDA7CisKKwkJdHJhaWxlciA9IHRyYWlsZXJfZW50cnlfcHRyKCpzZGJ0KTsKKwkJLyogbGVhdmUgbG9vcCBpZiBubyBtb3JlIHdvcmsgdG8gZG8gKi8KKwkJaWYgKCEoKnRyYWlsZXIgJiBCVUZGRVJfRlVMTF9NQVNLKSkgeworCQkJZG9uZSA9IDE7CisJCQlpZiAoIWh3c19mbHVzaF9hbGwpCisJCQkJY29udGludWU7CisJCX0KKworCQl0ZSA9IChzdHJ1Y3QgaHdzX3RyYWlsZXJfZW50cnkgKil0cmFpbGVyOworCQljYi0+c2FtcGxlX292ZXJmbG93ICs9IHRlLT5vdmVyZmxvdzsKKworCQlhZGRfc2FtcGxlc190b19vcHJvZmlsZShjcHUsIHNkYnQsIGRlYXIpOworCisJCS8qIHJlc2V0IHRyYWlsZXIgKi8KKwkJeGNoZygodW5zaWduZWQgY2hhciAqKSB0ZSwgMHg0MCk7CisKKwkJLyogYWR2YW5jZSB0byBuZXh0IHNkYiBzbG90IGluIGN1cnJlbnQgc2RidCAqLworCQlzZGJ0Kys7CisJCS8qIGluIGNhc2UgbGluayBiaXQgaXMgc2V0IHVzZSBhZGRyZXNzIHcvbyBsaW5rIGJpdCAqLworCQlpZiAoaXNfbGlua19lbnRyeShzZGJ0KSkKKwkJCXNkYnQgPSBnZXRfbmV4dF9zZGJ0KHNkYnQpOworCisJCWNiLT53b3JrZXJfZW50cnkgPSAodW5zaWduZWQgbG9uZylzZGJ0OworCX0KK30KKworc3RhdGljIHZvaWQgYWRkX3NhbXBsZXNfdG9fb3Byb2ZpbGUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyAqc2RidCwKKwkJdW5zaWduZWQgbG9uZyAqZGVhcikKK3sKKwlzdHJ1Y3QgaHdzX2RhdGFfZW50cnkgKnNhbXBsZV9kYXRhX3B0cjsKKwl1bnNpZ25lZCBsb25nICp0cmFpbGVyOworCisJdHJhaWxlciA9IHRyYWlsZXJfZW50cnlfcHRyKCpzZGJ0KTsKKwlpZiAoZGVhcikgeworCQlpZiAoZGVhciA+IHRyYWlsZXIpCisJCQlyZXR1cm47CisJCXRyYWlsZXIgPSBkZWFyOworCX0KKworCXNhbXBsZV9kYXRhX3B0ciA9IChzdHJ1Y3QgaHdzX2RhdGFfZW50cnkgKikoKnNkYnQpOworCisJd2hpbGUgKCh1bnNpZ25lZCBsb25nICopc2FtcGxlX2RhdGFfcHRyIDwgdHJhaWxlcikgeworCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IE5VTEw7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gTlVMTDsKKworCQkvKgorCQkgKiBDaGVjayBzYW1wbGluZyBtb2RlLCAxIGluZGljYXRlcyBiYXNpYyAoPWN1c3RvbWVyKSBzYW1wbGluZworCQkgKiBtb2RlLgorCQkgKi8KKwkJaWYgKHNhbXBsZV9kYXRhX3B0ci0+ZGVmICE9IDEpIHsKKwkJCS8qIHNhbXBsZSBzbG90IGlzIG5vdCB5ZXQgd3JpdHRlbiAqLworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGl0IHR3aWNlLAorCQkJICogdGhlIG5leHQgdGltZSB0aGUgc2FtcGxlciB3aWxsIHNldCBpdCBhZ2FpbiAqLworCQkJc2FtcGxlX2RhdGFfcHRyLT5kZWYgPSAwOworCQl9CisKKwkJLyogR2V0IHB0X3JlZ3MuICovCisJCWlmIChzYW1wbGVfZGF0YV9wdHItPlAgPT0gMSkgeworCQkJLyogdXNlcnNwYWNlIHNhbXBsZSAqLworCQkJdW5zaWduZWQgaW50IHBpZCA9IHNhbXBsZV9kYXRhX3B0ci0+cHJpbV9hc247CisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQl0c2sgPSBwaWRfdGFzayhmaW5kX3ZwaWQocGlkKSwgUElEVFlQRV9QSUQpOworCQkJaWYgKHRzaykKKwkJCQlyZWdzID0gdGFza19wdF9yZWdzKHRzayk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGtlcm5lbHNwYWNlIHNhbXBsZSAqLworCQkJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKKwkJfQorCisJCW11dGV4X2xvY2soJmh3c19zZW0pOworCQlvcHJvZmlsZV9hZGRfZXh0X2h3X3NhbXBsZShzYW1wbGVfZGF0YV9wdHItPmlhLCByZWdzLCAwLAorCQkJCSFzYW1wbGVfZGF0YV9wdHItPlAsIHRzayk7CisJCW11dGV4X3VubG9jaygmaHdzX3NlbSk7CisKKwkJc2FtcGxlX2RhdGFfcHRyKys7CisJfQorfQorCitzdGF0aWMgdm9pZCB3b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGV4dF9wYXJhbXM7CisJc3RydWN0IGh3c19jcHVfYnVmZmVyICpjYjsKKworCWNiID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBod3NfY3B1X2J1ZmZlciwgd29ya2VyKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJZXh0X3BhcmFtcyA9IGF0b21pY194Y2hnKCZjYi0+ZXh0X3BhcmFtcywgMCk7CisKKwlpZiAoIWNiLT53b3JrZXJfZW50cnkpCisJCXdvcmtlcl9vbl9zdGFydChjcHUpOworCisJaWYgKHdvcmtlcl9jaGVja19lcnJvcihjcHUsIGV4dF9wYXJhbXMpKQorCQlyZXR1cm47CisKKwlpZiAoIWNiLT5maW5pc2gpCisJCXdvcmtlcl9vbl9pbnRlcnJ1cHQoY3B1KTsKKworCWlmIChjYi0+ZmluaXNoKQorCQl3b3JrZXJfb25fZmluaXNoKGNwdSk7Cit9CisKKy8qKgorICogaHdzYW1wbGVyX2FsbG9jYXRlKCkgLSBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBoYXJkd2FyZSBzYW1wbGVyCisgKiBAc2RidDogIG51bWJlciBvZiBTREJUcyBwZXIgb25saW5lIENQVSAobXVzdCBiZSA+IDApCisgKiBAc2RiOiAgIG51bWJlciBvZiBTREJzIHBlciBTREJUIChtaW5pbXVtIDEsIG1heGltdW0gNTExKQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAhMCBvbiBmYWlsdXJlLgorICovCitpbnQgaHdzYW1wbGVyX2FsbG9jYXRlKHVuc2lnbmVkIGxvbmcgc2RidCwgdW5zaWduZWQgbG9uZyBzZGIpCit7CisJaW50IGNwdSwgcmM7CisJbXV0ZXhfbG9jaygmaHdzX3NlbSk7CisKKwlyYyA9IC1FSU5WQUw7CisJaWYgKGh3c19zdGF0ZSAhPSBIV1NfREVBTExPQ0FURUQpCisJCWdvdG8gYWxsb2NhdGVfZXhpdDsKKworCWlmIChzZGJ0IDwgMSkKKwkJZ290byBhbGxvY2F0ZV9leGl0OworCisJaWYgKHNkYiA+IE1BWF9OVU1fU0RCIHx8IHNkYiA8IE1JTl9OVU1fU0RCKQorCQlnb3RvIGFsbG9jYXRlX2V4aXQ7CisKKwludW1fc2RidCA9IHNkYnQ7CisJbnVtX3NkYiA9IHNkYjsKKworCW9vbV9raWxsZXJfd2FzX2FjdGl2ZSA9IDA7CisJcmVnaXN0ZXJfb29tX25vdGlmaWVyKCZod3Nfb29tX25vdGlmaWVyKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmIChhbGxvY2F0ZV9zZGJ0KGNwdSkpIHsKKwkJCXVucmVnaXN0ZXJfb29tX25vdGlmaWVyKCZod3Nfb29tX25vdGlmaWVyKTsKKwkJCWdvdG8gYWxsb2NhdGVfZXJyb3I7CisJCX0KKwl9CisJdW5yZWdpc3Rlcl9vb21fbm90aWZpZXIoJmh3c19vb21fbm90aWZpZXIpOworCWlmIChvb21fa2lsbGVyX3dhc19hY3RpdmUpCisJCWdvdG8gYWxsb2NhdGVfZXJyb3I7CisKKwlod3Nfc3RhdGUgPSBIV1NfU1RPUFBFRDsKKwlyYyA9IDA7CisKK2FsbG9jYXRlX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZod3Nfc2VtKTsKKwlyZXR1cm4gcmM7CisKK2FsbG9jYXRlX2Vycm9yOgorCXJjID0gLUVOT01FTTsKKwlwcmludGsoS0VSTl9FUlIgImh3c2FtcGxlcjogQ1BVTUYgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJZ290byBhbGxvY2F0ZV9leGl0OworfQorCisvKioKKyAqIGh3c2FtcGxlcl9kZWFsbG9jYXRlKCkgLSBkZWFsbG9jYXRlIGhhcmR3YXJlIHNhbXBsZXIgbWVtb3J5CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsICEwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBod3NhbXBsZXJfZGVhbGxvY2F0ZSgpCit7CisJaW50IHJjOworCisJbXV0ZXhfbG9jaygmaHdzX3NlbSk7CisKKwlyYyA9IC1FSU5WQUw7CisJaWYgKGh3c19zdGF0ZSAhPSBIV1NfU1RPUFBFRCkKKwkJZ290byBkZWFsbG9jYXRlX2V4aXQ7CisKKwlzbXBfY3RsX2NsZWFyX2JpdCgwLCA1KTsgLyogc2V0IGJpdCA1OCBDUjAgb2ZmICovCisJZGVhbGxvY2F0ZV9zZGJ0KCk7CisKKwlod3Nfc3RhdGUgPSBIV1NfREVBTExPQ0FURUQ7CisJcmMgPSAwOworCitkZWFsbG9jYXRlX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZod3Nfc2VtKTsKKworCXJldHVybiByYzsKK30KKworbG9uZyBod3NhbXBsZXJfcXVlcnlfbWluX2ludGVydmFsKHZvaWQpCit7CisJaWYgKG1pbl9zYW1wbGVyX3JhdGUpCisJCXJldHVybiBtaW5fc2FtcGxlcl9yYXRlOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2xvbmcgaHdzYW1wbGVyX3F1ZXJ5X21heF9pbnRlcnZhbCh2b2lkKQoreworCWlmIChtYXhfc2FtcGxlcl9yYXRlKQorCQlyZXR1cm4gbWF4X3NhbXBsZXJfcmF0ZTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9nZXRfc2FtcGxlX292ZXJmbG93X2NvdW50KHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGh3c19jcHVfYnVmZmVyICpjYjsKKworCWNiID0gJnBlcl9jcHUoc2FtcGxlcl9jcHVfYnVmZmVyLCBjcHUpOworCisJcmV0dXJuIGNiLT5zYW1wbGVfb3ZlcmZsb3c7Cit9CisKK2ludCBod3NhbXBsZXJfc2V0dXAoKQoreworCWludCByYzsKKwlpbnQgY3B1OworCXN0cnVjdCBod3NfY3B1X2J1ZmZlciAqY2I7CisKKwltdXRleF9sb2NrKCZod3Nfc2VtKTsKKworCXJjID0gLUVJTlZBTDsKKwlpZiAoaHdzX3N0YXRlKQorCQlnb3RvIHNldHVwX2V4aXQ7CisKKwlod3Nfc3RhdGUgPSBIV1NfSU5JVDsKKworCWluaXRfYWxsX2NwdV9idWZmZXJzKCk7CisKKwlyYyA9IGNoZWNrX2hhcmR3YXJlX3ByZXJlcXVpc2l0ZXMoKTsKKwlpZiAocmMpCisJCWdvdG8gc2V0dXBfZXhpdDsKKworCXJjID0gY2hlY2tfcXNpX29uX3NldHVwKCk7CisJaWYgKHJjKQorCQlnb3RvIHNldHVwX2V4aXQ7CisKKwlyYyA9IC1FSU5WQUw7CisJaHdzX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgiaHdzYW1wbGVyIik7CisJaWYgKCFod3Nfd3EpCisJCWdvdG8gc2V0dXBfZXhpdDsKKworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaHdzX2NwdV9ub3RpZmllcik7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQljYiA9ICZwZXJfY3B1KHNhbXBsZXJfY3B1X2J1ZmZlciwgY3B1KTsKKwkJSU5JVF9XT1JLKCZjYi0+d29ya2VyLCB3b3JrZXIpOworCQlyYyA9IHNtcF9jdGxfcXNpKGNwdSk7CisJCVdBUk5fT04ocmMpOworCQlpZiAobWluX3NhbXBsZXJfcmF0ZSAhPSBjYi0+cXNpLm1pbl9zYW1wbF9yYXRlKSB7CisJCQlpZiAobWluX3NhbXBsZXJfcmF0ZSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJImh3c2FtcGxlcjogZGlmZmVyZW50IG1pbiBzYW1wbGVyIHJhdGUgdmFsdWVzLlxuIik7CisJCQkJaWYgKG1pbl9zYW1wbGVyX3JhdGUgPCBjYi0+cXNpLm1pbl9zYW1wbF9yYXRlKQorCQkJCQltaW5fc2FtcGxlcl9yYXRlID0KKwkJCQkJCWNiLT5xc2kubWluX3NhbXBsX3JhdGU7CisJCQl9IGVsc2UKKwkJCQltaW5fc2FtcGxlcl9yYXRlID0gY2ItPnFzaS5taW5fc2FtcGxfcmF0ZTsKKwkJfQorCQlpZiAobWF4X3NhbXBsZXJfcmF0ZSAhPSBjYi0+cXNpLm1heF9zYW1wbF9yYXRlKSB7CisJCQlpZiAobWF4X3NhbXBsZXJfcmF0ZSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJImh3c2FtcGxlcjogZGlmZmVyZW50IG1heCBzYW1wbGVyIHJhdGUgdmFsdWVzLlxuIik7CisJCQkJaWYgKG1heF9zYW1wbGVyX3JhdGUgPiBjYi0+cXNpLm1heF9zYW1wbF9yYXRlKQorCQkJCQltYXhfc2FtcGxlcl9yYXRlID0KKwkJCQkJCWNiLT5xc2kubWF4X3NhbXBsX3JhdGU7CisJCQl9IGVsc2UKKwkJCQltYXhfc2FtcGxlcl9yYXRlID0gY2ItPnFzaS5tYXhfc2FtcGxfcmF0ZTsKKwkJfQorCX0KKwlyZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgxNDA3LCBod3NfZXh0X2hhbmRsZXIpOworCisJaHdzX3N0YXRlID0gSFdTX0RFQUxMT0NBVEVEOworCXJjID0gMDsKKworc2V0dXBfZXhpdDoKKwltdXRleF91bmxvY2soJmh3c19zZW0pOworCXJldHVybiByYzsKK30KKworaW50IGh3c2FtcGxlcl9zaHV0ZG93bigpCit7CisJaW50IHJjOworCisJbXV0ZXhfbG9jaygmaHdzX3NlbSk7CisKKwlyYyA9IC1FSU5WQUw7CisJaWYgKGh3c19zdGF0ZSA9PSBIV1NfREVBTExPQ0FURUQgfHwgaHdzX3N0YXRlID09IEhXU19TVE9QUEVEKSB7CisJCW11dGV4X3VubG9jaygmaHdzX3NlbSk7CisKKwkJaWYgKGh3c193cSkKKwkJCWZsdXNoX3dvcmtxdWV1ZShod3Nfd3EpOworCisJCW11dGV4X2xvY2soJmh3c19zZW0pOworCisJCWlmIChod3Nfc3RhdGUgPT0gSFdTX1NUT1BQRUQpIHsKKwkJCXNtcF9jdGxfY2xlYXJfYml0KDAsIDUpOyAvKiBzZXQgYml0IDU4IENSMCBvZmYgKi8KKwkJCWRlYWxsb2NhdGVfc2RidCgpOworCQl9CisJCWlmIChod3Nfd3EpIHsKKwkJCWRlc3Ryb3lfd29ya3F1ZXVlKGh3c193cSk7CisJCQlod3Nfd3EgPSBOVUxMOworCQl9CisKKwkJdW5yZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgxNDA3LCBod3NfZXh0X2hhbmRsZXIpOworCQlod3Nfc3RhdGUgPSBIV1NfSU5JVDsKKwkJcmMgPSAwOworCX0KKwltdXRleF91bmxvY2soJmh3c19zZW0pOworCisJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmh3c19jcHVfbm90aWZpZXIpOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGh3c2FtcGxlcl9zdGFydF9hbGwoKSAtIHN0YXJ0IGhhcmR3YXJlIHNhbXBsaW5nIG9uIGFsbCBvbmxpbmUgQ1BVcworICogQHJhdGU6ICBzcGVjaWZpZXMgdGhlIHVzZWQgaW50ZXJ2YWwgd2hlbiBzYW1wbGVzIGFyZSB0YWtlbgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAhMCBvbiBmYWlsdXJlLgorICovCitpbnQgaHdzYW1wbGVyX3N0YXJ0X2FsbCh1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IHJjLCBjcHU7CisKKwltdXRleF9sb2NrKCZod3Nfc2VtKTsKKworCWh3c19vb20gPSAwOworCisJcmMgPSAtRUlOVkFMOworCWlmIChod3Nfc3RhdGUgIT0gSFdTX1NUT1BQRUQpCisJCWdvdG8gc3RhcnRfYWxsX2V4aXQ7CisKKwlpbnRlcnZhbCA9IHJhdGU7CisKKwkvKiBmYWlsIGlmIHJhdGUgaXMgbm90IHZhbGlkICovCisJaWYgKGludGVydmFsIDwgbWluX3NhbXBsZXJfcmF0ZSB8fCBpbnRlcnZhbCA+IG1heF9zYW1wbGVyX3JhdGUpCisJCWdvdG8gc3RhcnRfYWxsX2V4aXQ7CisKKwlyYyA9IGNoZWNrX3FzaV9vbl9zdGFydCgpOworCWlmIChyYykKKwkJZ290byBzdGFydF9hbGxfZXhpdDsKKworCXJjID0gcHJlcGFyZV9jcHVfYnVmZmVycygpOworCWlmIChyYykKKwkJZ290byBzdGFydF9hbGxfZXhpdDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXJjID0gc3RhcnRfc2FtcGxpbmcoY3B1KTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisJfQorCWlmIChyYykgeworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQkJc3RvcF9zYW1wbGluZyhjcHUpOworCQl9CisJCWdvdG8gc3RhcnRfYWxsX2V4aXQ7CisJfQorCWh3c19zdGF0ZSA9IEhXU19TVEFSVEVEOworCXJjID0gMDsKKworc3RhcnRfYWxsX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZod3Nfc2VtKTsKKworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmVnaXN0ZXJfb29tX25vdGlmaWVyKCZod3Nfb29tX25vdGlmaWVyKTsKKwlod3Nfb29tID0gMTsKKwlod3NfZmx1c2hfYWxsID0gMDsKKwkvKiBub3cgbGV0IHRoZW0gaW4sIDE0MDcgQ1BVTUYgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLworCXNtcF9jdGxfc2V0X2JpdCgwLCA1KTsgLyogc2V0IENSMCBiaXQgNTggKi8KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGh3c2FtcGxlcl9zdG9wX2FsbCgpIC0gc3RvcCBoYXJkd2FyZSBzYW1wbGluZyBvbiBhbGwgb25saW5lIENQVXMKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgITAgb24gZmFpbHVyZS4KKyAqLworaW50IGh3c2FtcGxlcl9zdG9wX2FsbCgpCit7CisJaW50IHRtcF9yYywgcmMsIGNwdTsKKwlzdHJ1Y3QgaHdzX2NwdV9idWZmZXIgKmNiOworCisJbXV0ZXhfbG9jaygmaHdzX3NlbSk7CisKKwlyYyA9IDA7CisJaWYgKGh3c19zdGF0ZSA9PSBIV1NfSU5JVCkgeworCQltdXRleF91bmxvY2soJmh3c19zZW0pOworCQlyZXR1cm4gcmM7CisJfQorCWh3c19zdGF0ZSA9IEhXU19TVE9QUElORzsKKwltdXRleF91bmxvY2soJmh3c19zZW0pOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJY2IgPSAmcGVyX2NwdShzYW1wbGVyX2NwdV9idWZmZXIsIGNwdSk7CisJCWNiLT5zdG9wX21vZGUgPSAxOworCQl0bXBfcmMgPSBzdG9wX3NhbXBsaW5nKGNwdSk7CisJCWlmICh0bXBfcmMpCisJCQlyYyA9IHRtcF9yYzsKKwl9CisKKwlpZiAoaHdzX3dxKQorCQlmbHVzaF93b3JrcXVldWUoaHdzX3dxKTsKKworCW11dGV4X2xvY2soJmh3c19zZW0pOworCWlmIChod3Nfb29tKSB7CisJCXVucmVnaXN0ZXJfb29tX25vdGlmaWVyKCZod3Nfb29tX25vdGlmaWVyKTsKKwkJaHdzX29vbSA9IDA7CisJfQorCWh3c19zdGF0ZSA9IEhXU19TVE9QUEVEOworCW11dGV4X3VubG9jaygmaHdzX3NlbSk7CisKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmggYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3MmI1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENQVU1GIEhXIHNhbXBsZXIgZnVuY3Rpb25zIGFuZCBpbnRlcm5hbCBzdHJ1Y3R1cmVzCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDEwCisgKiAgICBBdXRob3Iocyk6IEhlaW56IEdyYWFsZnMgPGdyYWFsZnNAZGUuaWJtLmNvbT4KKyAqLworCisjaWZuZGVmIEhXU0FNUExFUl9IXworI2RlZmluZSBIV1NBTVBMRVJfSF8KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCitzdHJ1Y3QgaHdzX3FzaV9pbmZvX2Jsb2NrICAgICAgICAgIC8qIFFVRVJZIFNBTVBMSU5HIGluZm9ybWF0aW9uIGJsb2NrICAqLworeyAvKiBCaXQocykgKi8KKwl1bnNpZ25lZCBpbnQgYjBfMTM6MTQ7ICAgICAgLyogMC0xMzogemVyb3MgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IGFzOjE7ICAgICAgICAgIC8qIDE0OiBzYW1wbGluZyBhdXRob3Jpc2F0aW9uIGNvbnRyb2wqLworCXVuc2lnbmVkIGludCBiMTVfMjE6NzsgICAgICAvKiAxNS0yMTogemVyb3MgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgZXM6MTsgICAgICAgICAgLyogMjI6IHNhbXBsaW5nIGVuYWJsZSBjb250cm9sICAgICAgICovCisJdW5zaWduZWQgaW50IGIyM18yOTo3OyAgICAgIC8qIDIzLTI5OiB6ZXJvcyAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCBjczoxOyAgICAgICAgICAvKiAzMDogc2FtcGxpbmcgYWN0aXZhdGlvbiBjb250cm9sICAgKi8KKwl1bnNpZ25lZCBpbnQ6MTsgICAgICAgICAgICAgLyogMzE6IHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IGJzZGVzOjE2OyAgICAgIC8qIDQtNTogc2l6ZSBvZiBzYW1wbGluZyBlbnRyeSAgICAgICAqLworCXVuc2lnbmVkIGludDoxNjsgICAgICAgICAgICAvKiA2LTc6IHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9zYW1wbF9yYXRlOyAvKiA4LTE1OiBtaW5pbXVtIHNhbXBsaW5nIGludGVydmFsICovCisJdW5zaWduZWQgbG9uZyBtYXhfc2FtcGxfcmF0ZTsgLyogMTYtMjM6IG1heGltdW0gc2FtcGxpbmcgaW50ZXJ2YWwqLworCXVuc2lnbmVkIGxvbmcgdGVhcjsgICAgICAgICAvKiAyNC0zMTogVEVBUiBjb250ZW50cyAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIGRlYXI7ICAgICAgICAgLyogMzItMzk6IERFQVIgY29udGVudHMgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IHJzdnJkMDsgICAgICAgIC8qIDQwLTQzOiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCBjcHVfc3BlZWQ7ICAgICAvKiA0NC00NzogQ1BVIHNwZWVkICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgcnN2cmQxOyAgLyogNDgtNTU6IHJlc2VydmVkICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyBsb25nIHJzdnJkMjsgIC8qIDU2LTYzOiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAqLworfTsKKworc3RydWN0IGh3c19zc2N0bF9yZXF1ZXN0X2Jsb2NrICAgICAvKiBTRVQgU0FNUExJTkcgQ09OVFJPTFMgcmVxIGJsb2NrICAgKi8KK3sgLyogYnl0ZXMgMCAtIDcgIEJpdChzKSAqLworCXVuc2lnbmVkIGludCBzOjE7ICAgICAgICAgICAvKiAwOiBtYXhpbXVtIGJ1ZmZlciBpbmRpY2F0b3IgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgaDoxOyAgICAgICAgICAgLyogMTogcGFydC4gbGV2ZWwgcmVzZXJ2ZWQgZm9yIFZNIHVzZSovCisJdW5zaWduZWQgbG9uZyBiMl81Mzo1MjsgICAgIC8qIDItNTM6IHplcm9zICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCBlczoxOyAgICAgICAgICAvKiA1NDogc2FtcGxpbmcgZW5hYmxlIGNvbnRyb2wgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgYjU1XzYxOjc7ICAgICAgLyogNTUtNjE6IC0gemVyb3MgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IGNzOjE7ICAgICAgICAgIC8qIDYyOiBzYW1wbGluZyBhY3RpdmF0aW9uIGNvbnRyb2wgICAqLworCXVuc2lnbmVkIGludCBiNjM6MTsgICAgICAgICAvKiA2MzogemVybyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIGludGVydmFsOyAgICAgLyogOC0xNTogc2FtcGxpbmcgaW50ZXJ2YWwgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyB0ZWFyOyAgICAgICAgIC8qIDE2LTIzOiBURUFSIGNvbnRlbnRzICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgZGVhcjsgICAgICAgICAvKiAyNC0zMTogREVBUiBjb250ZW50cyAgICAgICAgICAgICAgKi8KKwkvKiAzMi02MzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyByc3ZyZDE7ICAgICAgIC8qIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgcnN2cmQyOyAgICAgICAvKiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIHJzdnJkMzsgICAgICAgLyogcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyByc3ZyZDQ7ICAgICAgIC8qIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKKworc3RydWN0IGh3c19jcHVfYnVmZmVyIHsKKwl1bnNpZ25lZCBsb25nIGZpcnN0X3NkYnQ7ICAgICAgIC8qIEAgb2YgMXN0IFNEQi1UYWJsZSBmb3IgdGhpcyBDUCovCisJdW5zaWduZWQgbG9uZyB3b3JrZXJfZW50cnk7CisJdW5zaWduZWQgbG9uZyBzYW1wbGVfb3ZlcmZsb3c7ICAvKiB0YWtlbiBmcm9tIFNEQiAuLi4gICAgICAgICAgICAqLworCXN0cnVjdCBod3NfcXNpX2luZm9fYmxvY2sgcXNpOworCXN0cnVjdCBod3Nfc3NjdGxfcmVxdWVzdF9ibG9jayBzc2N0bDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya2VyOworCWF0b21pY190IGV4dF9wYXJhbXM7CisJdW5zaWduZWQgbG9uZyByZXFfYWxlcnQ7CisJdW5zaWduZWQgbG9uZyBsb3NzX29mX3NhbXBsZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgaW52YWxpZF9lbnRyeV9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgaW5jb3JyZWN0X3NkYnRfZW50cnk7CisJdW5zaWduZWQgbG9uZyBzYW1wbGVfYXV0aF9jaGFuZ2VfYWxlcnQ7CisJdW5zaWduZWQgaW50IGZpbmlzaDoxOworCXVuc2lnbmVkIGludCBvb206MTsKKwl1bnNpZ25lZCBpbnQgc3RvcF9tb2RlOjE7Cit9OworCitzdHJ1Y3QgaHdzX2RhdGFfZW50cnkgeworCXVuc2lnbmVkIGludCBkZWY6MTY7ICAgICAgICAvKiAwLTE1ICBEYXRhIEVudHJ5IEZvcm1hdCAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgUjo0OyAgICAgICAgICAgLyogMTYtMTkgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IFU6NDsgICAgICAgICAgIC8qIDIwLTIzIE51bWJlciBvZiB1bmlxdWUgaW5zdHJ1Y3QuICAqLworCXVuc2lnbmVkIGludCB6OjI7ICAgICAgICAgICAvKiB6ZXJvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgVDoxOyAgICAgICAgICAgLyogMjYgUFNXIERBVCBtb2RlICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IFc6MTsgICAgICAgICAgIC8qIDI3IFBTVyB3YWl0IHN0YXRlICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCBQOjE7ICAgICAgICAgICAvKiAyOCBQU1cgUHJvYmxlbSBzdGF0ZSAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgQVM6MjsgICAgICAgICAgLyogMjktMzAgUFNXIGFkZHJlc3Mtc3BhY2UgY29udHJvbCAgICovCisJdW5zaWduZWQgaW50IEk6MTsgICAgICAgICAgIC8qIDMxIGVudHJ5IHZhbGlkIG9yIGludmFsaWQgICAgICAgICAqLworCXVuc2lnbmVkIGludDoxNjsKKwl1bnNpZ25lZCBpbnQgcHJpbV9hc246MTY7ICAgLyogcHJpbWFyeSBBU04gICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyBsb25nIGlhOyAgICAgIC8qIEluc3RydWN0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBscHA7ICAgICAvKiBMb2dpY2FsLVBhcnRpdGlvbiBQcm9ncmFtIFBhcmFtLiAgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgdnBwOyAgICAgLyogVmlydHVhbC1NYWNoaW5lIFByb2dyYW0gUGFyYW0uICAgICovCit9OworCitzdHJ1Y3QgaHdzX3RyYWlsZXJfZW50cnkgeworCXVuc2lnbmVkIGludCBmOjE7ICAgICAgICAgICAvKiAwIC0gQmxvY2sgRnVsbCBJbmRpY2F0b3IgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgYToxOyAgICAgICAgICAgLyogMSAtIEFsZXJ0IHJlcXVlc3QgY29udHJvbCAgICAgICAgICovCisJdW5zaWduZWQgbG9uZzo2MjsgICAgICAgICAgIC8qIDIgLSA2MzogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgb3ZlcmZsb3c7ICAgICAvKiA2NCAtIHNhbXBsZSBPdmVyZmxvdyBjb3VudCAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsgICAgLyogMTYgLSB0aW1lLXN0YW1wICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAxOyAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQxOyAgICAvKiAzMiAtUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkMjsgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgbG9uZyBwcm9ndXNhZ2UxOyAgIC8qIDQ4IC0gcmVzZXJ2ZWQgZm9yIHByb2dyYW1taW5nIHVzZSAqLworCXVuc2lnbmVkIGxvbmcgcHJvZ3VzYWdlMjsgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK307CisKK2ludCBod3NhbXBsZXJfc2V0dXAodm9pZCk7CitpbnQgaHdzYW1wbGVyX3NodXRkb3duKHZvaWQpOworaW50IGh3c2FtcGxlcl9hbGxvY2F0ZSh1bnNpZ25lZCBsb25nIHNkYnQsIHVuc2lnbmVkIGxvbmcgc2RiKTsKK2ludCBod3NhbXBsZXJfZGVhbGxvY2F0ZSh2b2lkKTsKK2xvbmcgaHdzYW1wbGVyX3F1ZXJ5X21pbl9pbnRlcnZhbCh2b2lkKTsKK2xvbmcgaHdzYW1wbGVyX3F1ZXJ5X21heF9pbnRlcnZhbCh2b2lkKTsKK2ludCBod3NhbXBsZXJfc3RhcnRfYWxsKHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpOworaW50IGh3c2FtcGxlcl9zdG9wX2FsbCh2b2lkKTsKK2ludCBod3NhbXBsZXJfZGVhY3RpdmF0ZSh1bnNpZ25lZCBpbnQgY3B1KTsKK2ludCBod3NhbXBsZXJfYWN0aXZhdGUodW5zaWduZWQgaW50IGNwdSk7Cit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9nZXRfc2FtcGxlX292ZXJmbG93X2NvdW50KHVuc2lnbmVkIGludCBjcHUpOworCisjZW5kaWYgLypIV1NBTVBMRVJfSF8qLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL29wcm9maWxlL2luaXQuYyBiL2FyY2gvczM5MC9vcHJvZmlsZS9pbml0LmMKaW5kZXggN2E5OTUxMS4uMTZjNzZkZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL29wcm9maWxlL2luaXQuYworKysgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaW5pdC5jCkBAIC00LDIzICs0LDE4MiBAQAogICogUzM5MCBWZXJzaW9uCiAgKiAgIENvcHlyaWdodCAoQykgMjAwMyBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCiAgKiAgIEF1dGhvcihzKTogVGhvbWFzIFNwYXR6aWVyICh0c3BhdEBkZS5pYm0uY29tKQorICogICBBdXRob3Iocyk6IE1haGVzaCBTYWxnYW9ua2FyIChtYWhlc2hAbGludXgudm5ldC5pYm0uY29tKQorICogICBBdXRob3Iocyk6IEhlaW56IEdyYWFsZnMgKGdyYWFsZnNAbGludXgudm5ldC5pYm0uY29tKQogICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMi0yMDExIE9Qcm9maWxlIGF1dGhvcnMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KIAorI2luY2x1ZGUgIi4uLy4uLy4uL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuaCIKKyNpbmNsdWRlICJod3NhbXBsZXIuaCIKKworI2RlZmluZSBERUZBVUxUX0lOVEVSVkFMCTQwOTYKKworI2RlZmluZSBERUZBVUxUX1NEQlRfQkxPQ0tTCTEKKyNkZWZpbmUgREVGQVVMVF9TREJfQkxPQ0tTCTUxMQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvcHJvZmlsZV9od19pbnRlcnZhbCA9IERFRkFVTFRfSU5URVJWQUw7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvcHJvZmlsZV9taW5faW50ZXJ2YWw7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvcHJvZmlsZV9tYXhfaW50ZXJ2YWw7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9wcm9maWxlX3NkYnRfYmxvY2tzID0gREVGQVVMVF9TREJUX0JMT0NLUzsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9wcm9maWxlX3NkYl9ibG9ja3MgPSBERUZBVUxUX1NEQl9CTE9DS1M7CisKK3N0YXRpYyBpbnQgaHdzYW1wbGVyX2ZpbGU7CitzdGF0aWMgaW50IGh3c2FtcGxlcl9ydW5uaW5nOwkvKiBzdGFydF9tdXRleCBtdXN0IGJlIGhlbGQgdG8gY2hhbmdlICovCisKK3N0YXRpYyBzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyB0aW1lcl9vcHM7CiAKIGV4dGVybiB2b2lkIHMzOTBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywgdW5zaWduZWQgaW50IGRlcHRoKTsKIAotaW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMqIG9wcykKK3N0YXRpYyBpbnQgb3Byb2ZpbGVfaHdzYW1wbGVyX3N0YXJ0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCWh3c2FtcGxlcl9ydW5uaW5nID0gaHdzYW1wbGVyX2ZpbGU7CisKKwlpZiAoIWh3c2FtcGxlcl9ydW5uaW5nKQorCQlyZXR1cm4gdGltZXJfb3BzLnN0YXJ0KCk7CisKKwlyZXR2YWwgPSBod3NhbXBsZXJfYWxsb2NhdGUob3Byb2ZpbGVfc2RidF9ibG9ja3MsIG9wcm9maWxlX3NkYl9ibG9ja3MpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBod3NhbXBsZXJfc3RhcnRfYWxsKG9wcm9maWxlX2h3X2ludGVydmFsKTsKKwlpZiAocmV0dmFsKQorCQlod3NhbXBsZXJfZGVhbGxvY2F0ZSgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgb3Byb2ZpbGVfaHdzYW1wbGVyX3N0b3Aodm9pZCkKK3sKKwlpZiAoIWh3c2FtcGxlcl9ydW5uaW5nKSB7CisJCXRpbWVyX29wcy5zdG9wKCk7CisJCXJldHVybjsKKwl9CisKKwlod3NhbXBsZXJfc3RvcF9hbGwoKTsKKwlod3NhbXBsZXJfZGVhbGxvY2F0ZSgpOworCXJldHVybjsKK30KKworc3RhdGljIHNzaXplX3QgaHdzYW1wbGVyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCit7CisJcmV0dXJuIG9wcm9maWxlZnNfdWxvbmdfdG9fdXNlcihod3NhbXBsZXJfZmlsZSwgYnVmLCBjb3VudCwgb2Zmc2V0KTsKK30KKworc3RhdGljIHNzaXplX3QgaHdzYW1wbGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIGNvbnN0IF9fdXNlciAqYnVmLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXR2YWw7CisKKwlpZiAoKm9mZnNldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR2YWwgPSBvcHJvZmlsZWZzX3Vsb25nX2Zyb21fdXNlcigmdmFsLCBidWYsIGNvdW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKG9wcm9maWxlX3N0YXJ0ZWQpCisJCS8qCisJCSAqIHNhdmUgdG8gZG8gd2l0aG91dCBsb2NraW5nIGFzIHdlIHNldAorCQkgKiBod3NhbXBsZXJfcnVubmluZyBpbiBzdGFydCgpIHdoZW4gc3RhcnRfbXV0ZXggaXMKKwkJICogaGVsZAorCQkgKi8KKwkJcmV0dXJuIC1FQlVTWTsKKworCWh3c2FtcGxlcl9maWxlID0gdmFsOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBod3NhbXBsZXJfZm9wcyA9IHsKKwkucmVhZAkJPSBod3NhbXBsZXJfcmVhZCwKKwkud3JpdGUJCT0gaHdzYW1wbGVyX3dyaXRlLAorfTsKKworc3RhdGljIGludCBvcHJvZmlsZV9jcmVhdGVfaHdzYW1wbGluZ19maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkJc3RydWN0IGRlbnRyeSAqcm9vdCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpod19kaXI7CisKKwkvKiByZWluaXRpYWxpemUgZGVmYXVsdCB2YWx1ZXMgKi8KKwlod3NhbXBsZXJfZmlsZSA9IDE7CisKKwlod19kaXIgPSBvcHJvZmlsZWZzX21rZGlyKHNiLCByb290LCAiaHdzYW1wbGluZyIpOworCWlmICghaHdfZGlyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9wcm9maWxlZnNfY3JlYXRlX2ZpbGUoc2IsIGh3X2RpciwgImh3c2FtcGxlciIsICZod3NhbXBsZXJfZm9wcyk7CisJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGh3X2RpciwgImh3X2ludGVydmFsIiwKKwkJCQkmb3Byb2ZpbGVfaHdfaW50ZXJ2YWwpOworCW9wcm9maWxlZnNfY3JlYXRlX3JvX3Vsb25nKHNiLCBod19kaXIsICJod19taW5faW50ZXJ2YWwiLAorCQkJCSZvcHJvZmlsZV9taW5faW50ZXJ2YWwpOworCW9wcm9maWxlZnNfY3JlYXRlX3JvX3Vsb25nKHNiLCBod19kaXIsICJod19tYXhfaW50ZXJ2YWwiLAorCQkJCSZvcHJvZmlsZV9tYXhfaW50ZXJ2YWwpOworCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBod19kaXIsICJod19zZGJ0X2Jsb2NrcyIsCisJCQkJJm9wcm9maWxlX3NkYnRfYmxvY2tzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wcm9maWxlX2h3c2FtcGxlcl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCit7CisJaWYgKGh3c2FtcGxlcl9zZXR1cCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogY3JlYXRlIGh3c2FtcGxlciBmaWxlcyBvbmx5IGlmIGh3c2FtcGxlcl9zZXR1cCgpIHN1Y2NlZWRzLgorCSAqLworCW9wcm9maWxlX21pbl9pbnRlcnZhbCA9IGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwoKTsKKwlpZiAob3Byb2ZpbGVfbWluX2ludGVydmFsIDwgMCkgeworCQlvcHJvZmlsZV9taW5faW50ZXJ2YWwgPSAwOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJb3Byb2ZpbGVfbWF4X2ludGVydmFsID0gaHdzYW1wbGVyX3F1ZXJ5X21heF9pbnRlcnZhbCgpOworCWlmIChvcHJvZmlsZV9tYXhfaW50ZXJ2YWwgPCAwKSB7CisJCW9wcm9maWxlX21heF9pbnRlcnZhbCA9IDA7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChvcHJvZmlsZV90aW1lcl9pbml0KG9wcykpCisJCXJldHVybiAtRU5PREVWOworCisJcHJpbnRrKEtFUk5fSU5GTyAib3Byb2ZpbGU6IHVzaW5nIGhhcmR3YXJlIHNhbXBsaW5nXG4iKTsKKworCW1lbWNweSgmdGltZXJfb3BzLCBvcHMsIHNpemVvZih0aW1lcl9vcHMpKTsKKworCW9wcy0+c3RhcnQgPSBvcHJvZmlsZV9od3NhbXBsZXJfc3RhcnQ7CisJb3BzLT5zdG9wID0gb3Byb2ZpbGVfaHdzYW1wbGVyX3N0b3A7CisJb3BzLT5jcmVhdGVfZmlsZXMgPSBvcHJvZmlsZV9jcmVhdGVfaHdzYW1wbGluZ19maWxlczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvcHJvZmlsZV9od3NhbXBsZXJfZXhpdCh2b2lkKQoreworCW9wcm9maWxlX3RpbWVyX2V4aXQoKTsKKwlod3NhbXBsZXJfc2h1dGRvd24oKTsKK30KKworaW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKIAlvcHMtPmJhY2t0cmFjZSA9IHMzOTBfYmFja3RyYWNlOwotCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIG9wcm9maWxlX2h3c2FtcGxlcl9pbml0KG9wcyk7CiB9CiAKIHZvaWQgb3Byb2ZpbGVfYXJjaF9leGl0KHZvaWQpCiB7CisJb3Byb2ZpbGVfaHdzYW1wbGVyX2V4aXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA4NTcwZDA4Li4yMjA1YzYyIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC03MSw3ICs3MSw3IEBACiByZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKl9fY3VycmVudF90aHJlYWRfaW5mbyBfX2FzbV9fKCJyMjgiKTsKICNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCV9fY3VycmVudF90aHJlYWRfaW5mbwogCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm9fbm9kZSh0c2ssIG5vZGUpIGttYWxsb2Nfbm9kZShUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCwgbm9kZSkKICNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyhpbmZvKSBrZnJlZShpbmZvKQogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDJkMjY0ZmEuLjFmYmYwYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTc1LDYgKzc1LDkgQEAKIGNvbmZpZyBHRU5FUklDX0ZJTkRfTkVYVF9CSVQKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBHRU5FUklDX0ZJTkRfQklUX0xFCisJZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19IV0VJR0hUCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggM2I3MWQyMS4uZTQ0NDgwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtNzI1LDExICs3MjUsNyBAQAogCiAvKiBGU0kgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8gZnNpX2luZm8gPSB7Ci0JLnBvcnRiX2ZsYWdzID0gU0hfRlNJX0JSU19JTlYgfAotCQkgICAgICAgU0hfRlNJX09VVF9TTEFWRV9NT0RFIHwKLQkJICAgICAgIFNIX0ZTSV9JTl9TTEFWRV9NT0RFIHwKLQkJICAgICAgIFNIX0ZTSV9PRk1UKEkyUykgfAotCQkgICAgICAgU0hfRlNJX0lGTVQoSTJTKSwKKwkucG9ydGJfZmxhZ3MgPSBTSF9GU0lfQlJTX0lOViwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZnNpX3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYwppbmRleCA1Mjc2NzkzLi5jOGJjZjZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYwpAQCAtMjg2LDExICsyODYsNyBAQAogLyogRlNJICovCiAvKiBjaGFuZ2UgSjIwLCBKMjEsIEoyMiBwaW4gdG8gMS0yIGNvbm5lY3Rpb24gdG8gdXNlIHNsYXZlIG1vZGUgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8gZnNpX2luZm8gPSB7Ci0JLnBvcnRhX2ZsYWdzID0gU0hfRlNJX0JSU19JTlYgfAotCQkgICAgICAgU0hfRlNJX09VVF9TTEFWRV9NT0RFIHwKLQkJICAgICAgIFNIX0ZTSV9JTl9TTEFWRV9NT0RFIHwKLQkJICAgICAgIFNIX0ZTSV9PRk1UKFBDTSkgfAotCQkgICAgICAgU0hfRlNJX0lGTVQoUENNKSwKKwkucG9ydGFfZmxhZ3MgPSBTSF9GU0lfQlJTX0lOViwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZnNpX3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggOTg1MTFlNC4uOTBmYTNlNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC05NCw5ICs5NCw4IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL19fZmxzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggYzIyODk0NjkuLmVhMmQ1MDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTk1LDcgKzk1LDcgQEAKIAogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvX25vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKTsKIGV4dGVybiB2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSk7CiBleHRlcm4gdm9pZCBhcmNoX3Rhc2tfY2FjaGVfaW5pdCh2b2lkKTsKICNkZWZpbmUgYXJjaF90YXNrX2NhY2hlX2luaXQgYXJjaF90YXNrX2NhY2hlX2luaXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvc2gva2VybmVsL2NyYXNoX2R1bXAuYwppbmRleCAzN2M5N2Q0Li41NjllN2IxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC05LDI4ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLS8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwotdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7Ci0KLS8qCi0gKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQotICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCi0gKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KLSAqCi0gKiBlbGZjb3JlaGRyPSBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGVsZiBjb3JlIGhlYWRlcgotICogc3RvcmVkIGJ5IHRoZSBjcmFzaGVkIGtlcm5lbC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgcGFyc2VfZWxmY29yZWhkcihjaGFyICphcmcpCi17Ci0JaWYgKCFhcmcpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZWxmY29yZWhkcl9hZGRyID0gbWVtcGFyc2UoYXJnLCAmYXJnKTsKLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImVsZmNvcmVoZHIiLCBwYXJzZV9lbGZjb3JlaGRyKTsKLQogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwppbmRleCBkY2IxMjZkLi5mMzlhZDU3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMiwxNiArMzIsMTYgQEAKICNpZiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRocmVhZF9pbmZvX2NhY2hlOwogCi1zdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKLQotCXRpID0ga21lbV9jYWNoZV9hbGxvYyh0aHJlYWRfaW5mb19jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KHRpID09IE5VTEwpKQotCQlyZXR1cm4gTlVMTDsKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLQltZW1zZXQodGksIDAsIFRIUkVBRF9TSVpFKTsKKwlnZnBfdCBtYXNrID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk87CisjZWxzZQorCWdmcF90IG1hc2sgPSBHRlBfS0VSTkVMOwogI2VuZGlmCisKKwl0aSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSh0aHJlYWRfaW5mb19jYWNoZSwgbWFzaywgbm9kZSk7CiAJcmV0dXJuIHRpOwogfQogCkBAIC02NCw3ICs2NCw5IEBACiAjZWxzZQogCWdmcF90IG1hc2sgPSBHRlBfS0VSTkVMOwogI2VuZGlmCi0JcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKilfX2dldF9mcmVlX3BhZ2VzKG1hc2ssIFRIUkVBRF9TSVpFX09SREVSKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgbWFzaywgVEhSRUFEX1NJWkVfT1JERVIpOworCisJcmV0dXJuIHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMOwogfQogCiB2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCBlNDhmNDcxLi5mNzY2ZTZiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0xOTIsNiArMTkyLDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19GSU5EX0JJVF9MRQorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWJvb2wKIAlkZWZhdWx0IHkgaWYgIVVMVFJBX0hBU19QT1BVTEFUSU9OX0NPVU5UCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JpdG9wc18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9iaXRvcHNfMzIuaAppbmRleCA5Y2Y0YWUwLi4yNWE2NzY2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JpdG9wc18zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzMyLmgKQEAgLTEwMyw5ICsxMDMsOCBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9iaXRvcHNfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzY0LmgKaW5kZXggNzY2MTIxYS4uMzhlOWFhMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9iaXRvcHNfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JpdG9wc182NC5oCkBAIC04OSwxNSArODksMTMgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KIAogI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssbnIsYWRkcikgXAogCXRlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDB4MzgsKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCiAjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLG5yLGFkZHIpIFwKIAl0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIDB4MzgsKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIGRlZmluZWQoX1NQQVJDNjRfQklUT1BTX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaAppbmRleCBjYmY0ODAxLi5lY2VkM2UzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmgKQEAgLTEzLDQgKzEzLDcgQEAKICNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCiAKIGV4dGVybiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKTsKKworI2RlZmluZSBOT19JUlEJCTB4ZmZmZmZmZmYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfNjQuaAppbmRleCA0ZjA5NjY2Zi4uMTZkY2FlNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfNjQuaApAQCAtOTcsNCArOTcsNiBAQAogI2RlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKICNkZWZpbmUgQVJDSF9IQVNfTk1JX1dBVENIRE9HCiAKKyNkZWZpbmUgTk9fSVJRCQkweGZmZmZmZmZmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oCmluZGV4IDlkZDAzMTguLmZhNTc1MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzMyLmgKQEAgLTgyLDggKzgyLDggQEAKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKIAotQlRGSVhVUERFRl9DQUxMKHN0cnVjdCB0aHJlYWRfaW5mbyAqLCBhbGxvY190aHJlYWRfaW5mbywgdm9pZCkKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSBCVEZJWFVQX0NBTEwoYWxsb2NfdGhyZWFkX2luZm8pKCkKK0JURklYVVBERUZfQ0FMTChzdHJ1Y3QgdGhyZWFkX2luZm8gKiwgYWxsb2NfdGhyZWFkX2luZm9fbm9kZSwgaW50KQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mb19ub2RlKHRzaywgbm9kZSkgQlRGSVhVUF9DQUxMKGFsbG9jX3RocmVhZF9pbmZvX25vZGUpKG5vZGUpCiAKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBmcmVlX3RocmVhZF9pbmZvLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKikKICNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkgQlRGSVhVUF9DQUxMKGZyZWVfdGhyZWFkX2luZm8pKHRpKQpAQCAtOTIsNyArOTIsNyBAQAogCiAvKgogICogU2l6ZSBvZiBrZXJuZWwgc3RhY2sgZm9yIGVhY2ggcHJvY2Vzcy4KLSAqIE9ic2VydmUgdGhlIG9yZGVyIG9mIGdldF9mcmVlX3BhZ2VzKCkgaW4gYWxsb2NfdGhyZWFkX2luZm8oKS4KKyAqIE9ic2VydmUgdGhlIG9yZGVyIG9mIGdldF9mcmVlX3BhZ2VzKCkgaW4gYWxsb2NfdGhyZWFkX2luZm9fbm9kZSgpLgogICogVGhlIHN1bjQgaGFzIDhLIHN0YWNrIHRvbywgYmVjYXVzZSBpdCdzIHNob3J0IG9uIG1lbW9yeSwgYW5kIDE2SyBpcyBhIHdhc3RlLgogICovCiAjZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmgKaW5kZXggZmIyZWE3Ny4uNjBkODZiZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaApAQCAtMTQ2LDIxICsxNDYsMjEgQEAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAotKHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJXAotCQkJCQkJCQlcCi0JcmV0ID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQkJCQlcCi0JICBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIF9fVEhSRUFEX0lORk9fT1JERVIpOwlcCi0JaWYgKHJldCkJCQkJCQlcCi0JCW1lbXNldChyZXQsIDAsIFBBR0VfU0laRTw8X19USFJFQURfSU5GT19PUkRFUik7CVwKLQlyZXQ7CQkJCQkJCVwKLX0pCisjZGVmaW5lIFRIUkVBRF9GTEFHUyAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pCiAjZWxzZQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIFwKLQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgX19USFJFQURfSU5GT19PUkRFUikpCisjZGVmaW5lIFRIUkVBRF9GTEFHUyAoR0ZQX0tFUk5FTCkKICNlbmRpZgogCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvX25vZGUodHNrLCBub2RlKQkJCQlcCisoewkJCQkJCQkJCVwKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgVEhSRUFEX0ZMQUdTLAlcCisJCQkJCSAgICAgX19USFJFQURfSU5GT19PUkRFUik7CVwKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXQgPSBwYWdlID8gcGFnZV9hZGRyZXNzKHBhZ2UpIDogTlVMTDsJCQkJXAorCXJldDsJCQkJCQkJCVwKK30pCisKICNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkgXAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpKHRpKSxfX1RIUkVBRF9JTkZPX09SREVSKQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggMDljNzlhOS4uOTFlNWEwMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtMTgsMjggKzE4LDYgQEAKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKiBEbWEgYWRkcmVzc2VzIGNvbWUgaW4gZ2VuZXJpYyBhbmQgNjQtYml0IGZsYXZvdXJzLiAgKi8KLQotdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKLQotI2lmIGRlZmluZWQoX19hcmNoNjRfXykKLQotLyoqKiBTUEFSQyA2NCBiaXQgKioqLwotdHlwZWRlZiB1NjQgZG1hNjRfYWRkcl90OwotI2Vsc2UKLS8qKiogU1BBUkMgMzIgYml0ICoqKi8KLXR5cGVkZWYgdTMyIGRtYTY0X2FkZHJfdDsKLQotI2VuZGlmIC8qIGRlZmluZWQoX19hcmNoNjRfXykgKi8KLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjZW5kaWYgLyogZGVmaW5lZChfX3NwYXJjX18pICovCiAKICNlbmRpZiAvKiBkZWZpbmVkKF9TUEFSQ19UWVBFU19IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMDNlYjVhOC4uMmY0NzVkNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00MDAsOCArNDAwLDExIEBACiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdAkzMjkKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrCTMzMAogI2RlZmluZSBfX05SX3BybGltaXQ2NAkJMzMxCisjZGVmaW5lIF9fTlJfbmFtZV90b19oYW5kbGVfYXQJMzMyCisjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJMzMzCisjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkzMzQKIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzMyCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzMzUKIAogI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KIC8qIFNwYXJjIDMyLWJpdCBvbmx5IGhhcyB0aGUgInNldHJlc3VpZDMyIiwgImdldHJlc3VpZDMyIiB2YXJpYW50cywKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV9jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV9jb21tb24uYwppbmRleCA0OWRkZmY1Li5jYjE1YmJmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlX2NvbW1vbi5jCkBAIC0yMiw2ICsyMiwzMyBAQAogfQogRVhQT1JUX1NZTUJPTChpcnFfb2ZfcGFyc2VfYW5kX21hcCk7CiAKK2ludCBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgaW50IGluZGV4LAorCQkJICAgc3RydWN0IHJlc291cmNlICpyKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShub2RlKTsKKworCWlmICghb3AgfHwgaW5kZXggPj0gb3AtPm51bV9yZXNvdXJjZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KHIsICZvcC0+YXJjaGRhdGEucmVzb3VyY2VbaW5kZXhdLCBzaXplb2YoKnIpKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UpOworCit2b2lkIF9faW9tZW0gKm9mX2lvbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgaW50IGluZGV4KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShub2RlKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisKKwlpZiAoIW9wIHx8IGluZGV4ID49IG9wLT5udW1fcmVzb3VyY2VzKQorCQlyZXR1cm4gTlVMTDsKKworCXIgPSAmb3AtPmFyY2hkYXRhLnJlc291cmNlW2luZGV4XTsKKworCXJldHVybiBvZl9pb3JlbWFwKHIsIDAsIHJlc291cmNlX3NpemUociksIChjaGFyICopIHItPm5hbWUpOworfQorRVhQT1JUX1NZTUJPTChvZl9pb21hcCk7CisKIC8qIFRha2UgdGhlIGFyY2hkYXRhIHZhbHVlcyBmb3IgSU9NTVUsIFNUQywgYW5kIEhPU1REQVRBIGZvdW5kIGluCiAgKiBCVVMgYW5kIHByb3BhZ2F0ZSB0byBhbGwgY2hpbGQgcGxhdGZvcm1fZGV2aWNlIG9iamVjdHMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUwppbmRleCBlYzM5NmUxLi40Yjg2ZWFmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TCkBAIC04Myw1ICs4Myw1IEBACiAvKjMxNSovCS5sb25nIHN5c190aW1lcmZkX3NldHRpbWUsIHN5c190aW1lcmZkX2dldHRpbWUsIHN5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLmxvbmcgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBzeXNfcHJlYWR2CiAvKjMyNSovCS5sb25nIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2V2ZW50X29wZW4sIHN5c19yZWN2bW1zZywgc3lzX2Zhbm90aWZ5X2luaXQKLS8qMzMwKi8JLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmssIHN5c19wcmxpbWl0NjQKKy8qMzMwKi8JLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmssIHN5c19wcmxpbWl0NjQsIHN5c19uYW1lX3RvX2hhbmRsZV9hdCwgc3lzX29wZW5fYnlfaGFuZGxlX2F0LCBzeXNfY2xvY2tfYWRqdGltZQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKaW5kZXggOGNmY2FhNS4uMDMzMWJhZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwpAQCAtODQsNyArODQsNyBAQAogCS53b3JkIGNvbXBhdF9zeXNfdGltZXJmZF9zZXR0aW1lLCBjb21wYXRfc3lzX3RpbWVyZmRfZ2V0dGltZSwgY29tcGF0X3N5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLndvcmQgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBjb21wYXRfc3lzX3ByZWFkdgogCS53b3JkIGNvbXBhdF9zeXNfcHdyaXRldiwgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfZXZlbnRfb3BlbiwgY29tcGF0X3N5c19yZWN2bW1zZywgc3lzX2Zhbm90aWZ5X2luaXQKLS8qMzMwKi8JLndvcmQgc3lzMzJfZmFub3RpZnlfbWFyaywgc3lzX3BybGltaXQ2NAorLyozMzAqLwkud29yZCBzeXMzMl9mYW5vdGlmeV9tYXJrLCBzeXNfcHJsaW1pdDY0LCBzeXNfbmFtZV90b19oYW5kbGVfYXQsIGNvbXBhdF9zeXNfb3Blbl9ieV9oYW5kbGVfYXQsIGNvbXBhdF9zeXNfY2xvY2tfYWRqdGltZQogCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCkBAIC0xNjAsNCArMTYwLDQgQEAKIAkud29yZCBzeXNfdGltZXJmZF9zZXR0aW1lLCBzeXNfdGltZXJmZF9nZXR0aW1lLCBzeXNfc2lnbmFsZmQ0LCBzeXNfZXZlbnRmZDIsIHN5c19lcG9sbF9jcmVhdGUxCiAvKjMyMCovCS53b3JkIHN5c19kdXAzLCBzeXNfcGlwZTIsIHN5c19pbm90aWZ5X2luaXQxLCBzeXNfYWNjZXB0NCwgc3lzX3ByZWFkdgogCS53b3JkIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2V2ZW50X29wZW4sIHN5c19yZWN2bW1zZywgc3lzX2Zhbm90aWZ5X2luaXQKLS8qMzMwKi8JLndvcmQgc3lzX2Zhbm90aWZ5X21hcmssIHN5c19wcmxpbWl0NjQKKy8qMzMwKi8JLndvcmQgc3lzX2Zhbm90aWZ5X21hcmssIHN5c19wcmxpbWl0NjQsIHN5c19uYW1lX3RvX2hhbmRsZV9hdCwgc3lzX29wZW5fYnlfaGFuZGxlX2F0LCBzeXNfY2xvY2tfYWRqdGltZQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCmluZGV4IDkyMzE5YWEuLmZlMDlmZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYworKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKQEAgLTY1MCw3ICs2NTAsNyBAQAogICogbWFwcGluZ3Mgb24gdGhlIGtlcm5lbCBzdGFjayB3aXRob3V0IGFueSBzcGVjaWFsIGNvZGUgYXMgd2UgZGlkCiAgKiBuZWVkIG9uIHRoZSBzdW40Yy4KICAqLwotc3RhdGljIHN0cnVjdCB0aHJlYWRfaW5mbyAqc3JtbXVfYWxsb2NfdGhyZWFkX2luZm8odm9pZCkKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX2luZm8gKnNybW11X2FsbG9jX3RocmVhZF9pbmZvX25vZGUoaW50IG5vZGUpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICpyZXQ7CiAKQEAgLTIyNzEsNyArMjI3MSw3IEBACiAKIAlCVEZJWFVQU0VUX0NBTEwobW11X2luZm8sIHNybW11X21tdV9pbmZvLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAotCUJURklYVVBTRVRfQ0FMTChhbGxvY190aHJlYWRfaW5mbywgc3JtbXVfYWxsb2NfdGhyZWFkX2luZm8sIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChhbGxvY190aHJlYWRfaW5mb19ub2RlLCBzcm1tdV9hbGxvY190aHJlYWRfaW5mb19ub2RlLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoZnJlZV90aHJlYWRfaW5mbywgc3JtbXVfZnJlZV90aHJlYWRfaW5mbywgQlRGSVhVUENBTExfTk9STSk7CiAKIAlCVEZJWFVQU0VUX0NBTEwocHRlX3RvX3Bnb2ZmLCBzcm1tdV9wdGVfdG9fcGdvZmYsIEJURklYVVBDQUxMX05PUk0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCmluZGV4IGI1MTM3Y2MuLmEyMzUwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogCWZyZWVfbG9ja2VkX3NlZ21lbnQoQlVDS0VUX0FERFIoZW50cnkpKTsKIH0KIAotc3RhdGljIHN0cnVjdCB0aHJlYWRfaW5mbyAqc3VuNGNfYWxsb2NfdGhyZWFkX2luZm8odm9pZCkKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX2luZm8gKnN1bjRjX2FsbG9jX3RocmVhZF9pbmZvX25vZGUoaW50IG5vZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBwYWdlczsKIAlpbnQgZW50cnk7CkBAIC0yMTU1LDcgKzIxNTUsNyBAQAogCUJURklYVVBTRVRfQ0FMTChfX3N3cF9vZmZzZXQsIHN1bjRjX3N3cF9vZmZzZXQsIEJURklYVVBDQUxMX05PUk0pOwogCUJURklYVVBTRVRfQ0FMTChfX3N3cF9lbnRyeSwgc3VuNGNfc3dwX2VudHJ5LCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAotCUJURklYVVBTRVRfQ0FMTChhbGxvY190aHJlYWRfaW5mbywgc3VuNGNfYWxsb2NfdGhyZWFkX2luZm8sIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChhbGxvY190aHJlYWRfaW5mb19ub2RlLCBzdW40Y19hbGxvY190aHJlYWRfaW5mb19ub2RlLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoZnJlZV90aHJlYWRfaW5mbywgc3VuNGNfZnJlZV90aHJlYWRfaW5mbywgQlRGSVhVUENBTExfTk9STSk7CiAKIAlCVEZJWFVQU0VUX0NBTEwobW11X2luZm8sIHN1bjRjX21tdV9pbmZvLCBCVEZJWFVQQ0FMTF9OT1JNKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9LY29uZmlnIGIvYXJjaC90aWxlL0tjb25maWcKaW5kZXggMDg5NDhlNC4uZjNiNzg3MCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL0tjb25maWcKKysrIGIvYXJjaC90aWxlL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiAjIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBzeW50YXggb2YgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUsCi0jIHNlZSBEb2N1bWVudGF0aW9uL2tidWlsZC9jb25maWctbGFuZ3VhZ2UudHh0LgorIyBzZWUgRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQuCiAKIGNvbmZpZyBUSUxFCiAJZGVmX2Jvb2wgeQpAQCAtMTEsMTcgKzExLDE4IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUwogCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQogCXNlbGVjdCBHRU5FUklDX1BFTkRJTkdfSVJRIGlmIFNNUAorCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX0RFUFJFQ0FURUQKIAogIyBGSVhNRTogaW52ZXN0aWdhdGUgd2hldGhlciB3ZSBuZWVkL3dhbnQgdGhlc2Ugb3B0aW9ucy4KICMJc2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UCi0jICAgICAgIHNlbGVjdCBIQVZFX09QVFBST0JFUwotIyAgICAgICBzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCi0jICAgICAgIHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQKLSMgICAgICAgc2VsZWN0IFBFUkZfRVZFTlRTCi0jICAgICAgIHNlbGVjdCBIQVZFX1VTRVJfUkVUVVJOX05PVElGSUVSCi0jICAgICAgIGNvbmZpZyBOT19CT09UTUVNCi0jICAgICAgIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwotIyAgICAgICBjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEUKKyMJc2VsZWN0IEhBVkVfT1BUUFJPQkVTCisjCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKKyMJc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAorIwlzZWxlY3QgUEVSRl9FVkVOVFMKKyMJc2VsZWN0IEhBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVIKKyMJY29uZmlnIE5PX0JPT1RNRU0KKyMJY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisjCWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRQogCiBjb25maWcgTU1VCiAJZGVmX2Jvb2wgeQpAQCAtMzksNyArNDAsNyBAQAogCWRlZl9ib29sIHkKIAogY29uZmlnIE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCi0gICAgICAgIGRlZl9ib29sIHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTCiAJZGVmX2Jvb2wgeQpAQCAtMjAxLDEyICsyMDIsNiBAQAogCSAgQnkgZGVmYXVsdCwgMiwgaS5lLiAyXjIgPT0gNCBERFIyIGNvbnRyb2xsZXJzLgogCSAgSW4gYSBzeXN0ZW0gd2l0aCBtb3JlIGNvbnRyb2xsZXJzLCB0aGlzIHZhbHVlIHNob3VsZCBiZSByYWlzZWQuCiAKLSMgTmVlZCAxNk1CIGFyZWFzIHRvIGVuYWJsZSBodWdldGxiCi0jIFNlZSBidWlsZC10aW1lIGNoZWNrIGluIGFyY2gvdGlsZS9tbS9pbml0LmMuCi1jb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgotCWludAotCWRlZmF1bHQgOQotCiBjaG9pY2UKIAlkZXBlbmRzIG9uICFUSUxFR1gKIAlwcm9tcHQgIk1lbW9yeSBzcGxpdCIgaWYgRVhQRVJUCkBAIC0yMzMsOCArMjI4LDEyIEBACiAJCWJvb2wgIjMuNUcvMC41RyB1c2VyL2tlcm5lbCBzcGxpdCIKIAljb25maWcgVk1TUExJVF8zRwogCQlib29sICIzRy8xRyB1c2VyL2tlcm5lbCBzcGxpdCIKLQljb25maWcgVk1TUExJVF8zR19PUFQKLQkJYm9vbCAiM0cvMUcgdXNlci9rZXJuZWwgc3BsaXQgKGZvciBmdWxsIDFHIGxvdyBtZW1vcnkpIgorCWNvbmZpZyBWTVNQTElUXzJfNzVHCisJCWJvb2wgIjIuNzVHLzEuMjVHIHVzZXIva2VybmVsIHNwbGl0IChmb3IgZnVsbCAxRyBsb3cgbWVtb3J5KSIKKwljb25maWcgVk1TUExJVF8yXzVHCisJCWJvb2wgIjIuNUcvMS41RyB1c2VyL2tlcm5lbCBzcGxpdCIKKwljb25maWcgVk1TUExJVF8yXzI1RworCQlib29sICIyLjI1Ry8xLjc1RyB1c2VyL2tlcm5lbCBzcGxpdCIKIAljb25maWcgVk1TUExJVF8yRwogCQlib29sICIyRy8yRyB1c2VyL2tlcm5lbCBzcGxpdCIKIAljb25maWcgVk1TUExJVF8xRwpAQCAtMjQ1LDcgKzI0NCw5IEBACiAJaGV4CiAJZGVmYXVsdCAweEYwMDAwMDAwIGlmIFZNU1BMSVRfM183NUcKIAlkZWZhdWx0IDB4RTAwMDAwMDAgaWYgVk1TUExJVF8zXzVHCi0JZGVmYXVsdCAweEIwMDAwMDAwIGlmIFZNU1BMSVRfM0dfT1BUCisJZGVmYXVsdCAweEIwMDAwMDAwIGlmIFZNU1BMSVRfMl83NUcKKwlkZWZhdWx0IDB4QTAwMDAwMDAgaWYgVk1TUExJVF8yXzVHCisJZGVmYXVsdCAweDkwMDAwMDAwIGlmIFZNU1BMSVRfMl8yNUcKIAlkZWZhdWx0IDB4ODAwMDAwMDAgaWYgVk1TUExJVF8yRwogCWRlZmF1bHQgMHg0MDAwMDAwMCBpZiBWTVNQTElUXzFHCiAJZGVmYXVsdCAweEMwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2ludGVycnVwdHNfMzIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvaW50ZXJydXB0c18zMi5oCmluZGV4IDlkMGJmYTcuLjk2YjU3MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvaW50ZXJydXB0c18zMi5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvaW50ZXJydXB0c18zMi5oCkBAIC0xNiwxMCArMTYsMTEgQEAKICNkZWZpbmUgX19BUkNIX0lOVEVSUlVQVFNfSF9fCiAKIC8qKiBNYXNrIGZvciBhbiBpbnRlcnJ1cHQuICovCi0jaWZkZWYgX19BU1NFTUJMRVJfXwogLyogTm90ZTogbXVzdCBoYW5kbGUgYnJlYWtpbmcgaW50ZXJydXB0cyBpbnRvIGhpZ2ggYW5kIGxvdyB3b3JkcyBtYW51YWxseS4gKi8KLSNkZWZpbmUgSU5UX01BU0soaW50bm8pICgxIDw8IChpbnRubykpCi0jZWxzZQorI2RlZmluZSBJTlRfTUFTS19MTyhpbnRubykgKDEgPDwgKGludG5vKSkKKyNkZWZpbmUgSU5UX01BU0tfSEkoaW50bm8pICgxIDw8ICgoaW50bm8pIC0gMzIpKQorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KICNkZWZpbmUgSU5UX01BU0soaW50bm8pICgxVUxMIDw8IChpbnRubykpCiAjZW5kaWYKIApAQCAtODksNiArOTAsNyBAQAogCiAjZGVmaW5lIE5VTV9JTlRFUlJVUFRTIDQ5CiAKKyNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2RlZmluZSBRVUVVRURfSU5URVJSVVBUUyAoIFwKICAgICBJTlRfTUFTSyhJTlRfTUVNX0VSUk9SKSB8IFwKICAgICBJTlRfTUFTSyhJTlRfRE1BVExCX01JU1MpIHwgXApAQCAtMzAxLDQgKzMwMyw1IEBACiAgICAgSU5UX01BU0soSU5UX0RPVUJMRV9GQVVMVCkgfCBcCiAgICAgSU5UX01BU0soSU5UX0FVWF9QRVJGX0NPVU5UKSB8IFwKICAgICAwKQorI2VuZGlmIC8qICFfX0FTU0VNQkxFUl9fICovCiAjZW5kaWYgLyogIV9fQVJDSF9JTlRFUlJVUFRTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9zaW0uaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvc2ltLmgKaW5kZXggNzRiN2MxNi4uZTU0YjdiMCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9zaW0uaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL3NpbS5oCkBAIC0xNTIsMTYgKzE1MiwzMyBAQAogLyoqCiAgKiBQcmludCBhIHN0cmluZyB0byB0aGUgc2ltdWxhdG9yIHN0ZG91dC4KICAqCi0gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gYmUgd3JpdHRlbjsgYSBuZXdsaW5lIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQuCisgKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gYmUgd3JpdHRlbi4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK3NpbV9wcmludChjb25zdCBjaGFyKiBzdHIpCit7CisgIGZvciAoIDsgKnN0ciAhPSAnXDAnOyBzdHIrKykKKyAgeworICAgIF9faW5zbl9tdHNwcihTUFJfU0lNX0NPTlRST0wsIFNJTV9DT05UUk9MX1BVVEMgfAorICAgICAgICAgICAgICAgICAoKnN0ciA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpOworICB9CisgIF9faW5zbl9tdHNwcihTUFJfU0lNX0NPTlRST0wsIFNJTV9DT05UUk9MX1BVVEMgfAorICAgICAgICAgICAgICAgKFNJTV9QVVRDX0ZMVVNIX0JJTkFSWSA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpOworfQorCisKKy8qKgorICogUHJpbnQgYSBzdHJpbmcgdG8gdGhlIHNpbXVsYXRvciBzdGRvdXQuCisgKgorICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGJlIHdyaXR0ZW4gKGEgbmV3bGluZSBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkKS4KICAqLwogc3RhdGljIF9faW5saW5lIHZvaWQKIHNpbV9wcmludF9zdHJpbmcoY29uc3QgY2hhciogc3RyKQogewotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgc3RyW2ldICE9IDA7IGkrKykKKyAgZm9yICggOyAqc3RyICE9ICdcMCc7IHN0cisrKQogICB7CiAgICAgX19pbnNuX210c3ByKFNQUl9TSU1fQ09OVFJPTCwgU0lNX0NPTlRST0xfUFVUQyB8Ci0gICAgICAgICAgICAgICAgIChzdHJbaV0gPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpKTsKKyAgICAgICAgICAgICAgICAgKCpzdHIgPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpKTsKICAgfQogICBfX2luc25fbXRzcHIoU1BSX1NJTV9DT05UUk9MLCBTSU1fQ09OVFJPTF9QVVRDIHwKICAgICAgICAgICAgICAgIChTSU1fUFVUQ19GTFVTSF9TVFJJTkcgPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpKTsKQEAgLTIwMyw3ICsyMjAsNyBAQAogICogd2UgYXJlIHBhc3NpbmcgdG8gdGhlIHNpbXVsYXRvciBhcmUgYWN0dWFsbHkgdmFsaWQgaW4gdGhlIHJlZ2lzdGVycwogICogKGkuZS4gcmV0dXJuZWQgZnJvbSBtZW1vcnkpIHByaW9yIHRvIHRoZSBTSU1fQ09OVFJPTCBzcHIuCiAgKi8KLXN0YXRpYyBfX2lubGluZSBpbnQgX3NpbV9zeXNjYWxsMChpbnQgdmFsKQorc3RhdGljIF9faW5saW5lIGxvbmcgX3NpbV9zeXNjYWxsMChpbnQgdmFsKQogewogICBsb25nIHJlc3VsdDsKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtdHNwciBTSU1fQ09OVFJPTCwgcjAiCkBAIC0yMTEsNyArMjI4LDcgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIF9faW5saW5lIGludCBfc2ltX3N5c2NhbGwxKGludCB2YWwsIGxvbmcgYXJnMSkKK3N0YXRpYyBfX2lubGluZSBsb25nIF9zaW1fc3lzY2FsbDEoaW50IHZhbCwgbG9uZyBhcmcxKQogewogICBsb25nIHJlc3VsdDsKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ7IGFuZCB6ZXJvLCByMSwgcjE7IG10c3ByIFNJTV9DT05UUk9MLCByMCB9IgpAQCAtMjE5LDcgKzIzNiw3IEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBfX2lubGluZSBpbnQgX3NpbV9zeXNjYWxsMihpbnQgdmFsLCBsb25nIGFyZzEsIGxvbmcgYXJnMikKK3N0YXRpYyBfX2lubGluZSBsb25nIF9zaW1fc3lzY2FsbDIoaW50IHZhbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpCiB7CiAgIGxvbmcgcmVzdWx0OwogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInsgYW5kIHplcm8sIHIxLCByMjsgbXRzcHIgU0lNX0NPTlRST0wsIHIwIH0iCkBAIC0yMzMsNyArMjUwLDcgQEAKICAgIHRoZSByZWdpc3RlciB2YWx1ZXMgZm9yIGFyZ3VtZW50cyAzIGFuZCB1cCBtYXkgc3RpbGwgYmUgaW4gZmxpZ2h0CiAgICB0byB0aGUgY29yZSBmcm9tIGEgc3RhY2sgZnJhbWUgcmVsb2FkLiAqLwogCi1zdGF0aWMgX19pbmxpbmUgaW50IF9zaW1fc3lzY2FsbDMoaW50IHZhbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMykKK3N0YXRpYyBfX2lubGluZSBsb25nIF9zaW1fc3lzY2FsbDMoaW50IHZhbCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsIGxvbmcgYXJnMykKIHsKICAgbG9uZyByZXN1bHQ7CiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgieyBhbmQgemVybywgcjMsIHIzIH07IgpAQCAtMjQ0LDcgKzI2MSw3IEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBfX2lubGluZSBpbnQgX3NpbV9zeXNjYWxsNChpbnQgdmFsLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwgbG9uZyBhcmczLAorc3RhdGljIF9faW5saW5lIGxvbmcgX3NpbV9zeXNjYWxsNChpbnQgdmFsLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwgbG9uZyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNCkKIHsKICAgbG9uZyByZXN1bHQ7CkBAIC0yNTYsNyArMjczLDcgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIF9faW5saW5lIGludCBfc2ltX3N5c2NhbGw1KGludCB2YWwsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLCBsb25nIGFyZzMsCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfc2ltX3N5c2NhbGw1KGludCB2YWwsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLCBsb25nIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmc0LCBsb25nIGFyZzUpCiB7CiAgIGxvbmcgcmVzdWx0OwpAQCAtMjY4LDcgKzI4NSw2IEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQogLyoqCiAgKiBNYWtlIGEgc3BlY2lhbCBzeXNjYWxsIHRvIHRoZSBzaW11bGF0b3IgaXRzZWxmLCBpZiBydW5uaW5nIHVuZGVyCiAgKiBzaW11bGF0aW9uLiBUaGlzIGlzIHVzZWQgYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIG90aGVyIGZ1bmN0aW9ucwpAQCAtMjgxLDcgKzI5Nyw4IEBACiAgKi8KICNkZWZpbmUgX3NpbV9zeXNjYWxsKHN5c2NhbGxfbnVtLCBuciwgYXJncy4uLikgXAogICBfc2ltX3N5c2NhbGwjI25yKCBcCi0gICAgKChzeXNjYWxsX251bSkgPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpIHwgU0lNX0NPTlRST0xfU1lTQ0FMTCwgYXJncykKKyAgICAoKHN5c2NhbGxfbnVtKSA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykgfCBTSU1fQ09OVFJPTF9TWVNDQUxMLCBcCisgICAgIyNhcmdzKQogCiAKIC8qIFZhbHVlcyBmb3IgdGhlICJhY2Nlc3NfbWFzayIgcGFyYW1ldGVycyBiZWxvdy4gKi8KQEAgLTM2NSw2ICszODIsMTMgQEAKIH0KIAogCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgQ1BVIHNwZWVkIGluIGN5Y2xlcyBwZXIgc2Vjb25kLiAqLworc3RhdGljIF9faW5saW5lIGxvbmcKK3NpbV9xdWVyeV9jcHVfc3BlZWQodm9pZCkKK3sKKyAgcmV0dXJuIF9zaW1fc3lzY2FsbChTSU1fU1lTQ0FMTF9RVUVSWV9DUFVfU1BFRUQsIDApOworfQorCiAjZW5kaWYgLyogIV9fRE9YWUdFTl9fICovCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9zaW1fZGVmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL3NpbV9kZWYuaAppbmRleCA3YTE3MDgyLi40YjQ0YTJiIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL3NpbV9kZWYuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL3NpbV9kZWYuaApAQCAtMjQzLDYgKzI0Myw5IEBACiAgKi8KICNkZWZpbmUgU0lNX1NZU0NBTExfVkFMSURBVEVfTElORVNfRVZJQ1RFRCA1CiAKKy8qKiBTeXNjYWxsIG51bWJlciBmb3Igc2ltX3F1ZXJ5X2NwdV9zcGVlZCgpLiAqLworI2RlZmluZSBTSU1fU1lTQ0FMTF9RVUVSWV9DUFVfU1BFRUQgNgorCiAKIC8qCiAgKiBCaXQgbWFza3Mgd2hpY2ggY2FuIGJlIHNoaWZ0ZWQgYnkgOCwgY29tYmluZWQgd2l0aApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL0tidWlsZCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggM2I4ZjU1Yi4uODQ5YWIyZiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vS2J1aWxkCkBAIC0xLDMgKzEsNCBAQAogaW5jbHVkZSBpbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KIAogaGVhZGVyLXkgKz0gdWNvbnRleHQuaAoraGVhZGVyLXkgKz0gaGFyZHdhbGwuaApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGI4YzQ5ZjkuLjc1YTE2MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTMyLDcgKzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3JlYWQoY29uc3QgYXRvbWljX3QgKnYpCiB7Ci0gICAgICAgcmV0dXJuIHYtPmNvdW50ZXI7CisJcmV0dXJuIEFDQ0VTU19PTkNFKHYtPmNvdW50ZXIpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA2ZDRmMGZmLi4xMzJlNmJiIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0xMjIsNyArMTIyLDYgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogCiAjZW5kaWYgLyogX0FTTV9USUxFX0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYml0b3BzXzMyLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYml0b3BzXzMyLmgKaW5kZXggN2E5M2MwMC4uMjYzOGJlNSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JpdG9wc18zMi5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHNfMzIuaApAQCAtMTIyLDcgKzEyMiw3IEBACiAJcmV0dXJuIChfYXRvbWljX3hvcihhZGRyLCBtYXNrKSAmIG1hc2spICE9IDA7CiB9CiAKLS8qIFNlZSBkaXNjdXNzaW9uIGF0IHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKSBpbiA8YXNtL2F0b21pYy5oPi4gKi8KKy8qIFNlZSBkaXNjdXNzaW9uIGF0IHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKSBpbiA8YXNtL2F0b21pY18zMi5oPi4gKi8KICNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJc21wX21iKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQlkbyB7fSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCAwOGEyODE1Li4zOTJlNTMzIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBJTlRFUk5PREVfQ0FDSEVfQllURVMgICBMMl9DQUNIRV9CWVRFUwogCiAvKiBHcm91cCB0b2dldGhlciByZWFkLW1vc3RseSB0aGluZ3MgdG8gYXZvaWQgY2FjaGUgZmFsc2Ugc2hhcmluZyAqLwotI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKyNkZWZpbmUgX19yZWFkX21vc3RseSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuLnJlYWRfbW9zdGx5IikpKQogCiAvKgogICogQXR0cmlidXRlIGZvciBkYXRhIHRoYXQgaXMga2VwdCByZWFkL3dyaXRlIGNvaGVyZW50IHVudGlsIHRoZSBlbmQgb2YKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDE0YTNmODUuLjEyZmIwZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMTM4LDU1ICsxMzgsMTIgQEAKIH0KIAogLyoKLSAqIEZsdXNoICYgaW52YWxpZGF0ZSBhIFZBIHJhbmdlIHRoYXQgaXMgaG9tZWQgcmVtb3RlbHkgb24gYSBzaW5nbGUgY29yZSwKLSAqIHdhaXRpbmcgdW50aWwgdGhlIG1lbW9yeSBjb250cm9sbGVyIGhvbGRzIHRoZSBmbHVzaGVkIHZhbHVlcy4KKyAqIEZsdXNoIGFuZCBpbnZhbGlkYXRlIGEgVkEgcmFuZ2UgdGhhdCBpcyBob21lZCByZW1vdGVseSwgd2FpdGluZworICogdW50aWwgdGhlIG1lbW9yeSBjb250cm9sbGVyIGhvbGRzIHRoZSBmbHVzaGVkIHZhbHVlcy4gIElmICJoZmgiIGlzCisgKiB0cnVlLCB3ZSB3aWxsIGRvIGEgbW9yZSBleHBlbnNpdmUgZmx1c2ggaW52b2x2aW5nIGFkZGl0aW9uYWwgbG9hZHMKKyAqIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRvdWNoZWQgYWxsIHRoZSBwb3NzaWJsZSBob21lIGNwdXMgb2YgYSBidWZmZXIKKyAqIHRoYXQgaXMgaG9tZWQgd2l0aCAiaGFzaCBmb3IgaG9tZSIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaW52X2J1ZmZlcl9yZW1vdGUodm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLQljaGFyICpwOwotCWludCBpOwotCi0JLyoKLQkgKiBGbHVzaCBhbmQgaW52YWxpZGF0ZSB0aGUgYnVmZmVyIG91dCBvZiB0aGUgbG9jYWwgTDEvTDIKLQkgKiBhbmQgcmVxdWVzdCB0aGUgaG9tZSBjYWNoZSB0byBmbHVzaCBhbmQgaW52YWxpZGF0ZSBhcyB3ZWxsLgotCSAqLwotCV9fZmludl9idWZmZXIoYnVmZmVyLCBzaXplKTsKLQotCS8qCi0JICogV2FpdCBmb3IgdGhlIGhvbWUgY2FjaGUgdG8gYWNrbm93bGVkZ2UgdGhhdCBpdCBoYXMgcHJvY2Vzc2VkCi0JICogYWxsIHRoZSBmbHVzaC1hbmQtaW52YWxpZGF0ZSByZXF1ZXN0cy4gIFRoaXMgZG9lcyBub3QgbWVhbgotCSAqIHRoYXQgdGhlIGZsdXNoZWQgZGF0YSBoYXMgcmVhY2hlZCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgeWV0LAotCSAqIGJ1dCBpdCBkb2VzIG1lYW4gdGhlIGhvbWUgY2FjaGUgaXMgcHJvY2Vzc2luZyB0aGUgZmx1c2hlcy4KLQkgKi8KLQlfX2luc25fbWYoKTsKLQotCS8qCi0JICogSXNzdWUgYSBsb2FkIHRvIHRoZSBsYXN0IGNhY2hlIGxpbmUsIHdoaWNoIGNhbid0IGNvbXBsZXRlCi0JICogdW50aWwgYWxsIHRoZSBwcmV2aW91c2x5LWlzc3VlZCBmbHVzaGVzIHRvIHRoZSBzYW1lIG1lbW9yeQotCSAqIGNvbnRyb2xsZXIgaGF2ZSBhbHNvIGNvbXBsZXRlZC4gIElmIHdlIHdlcmVuJ3Qgc3RyaXBpbmcKLQkgKiBtZW1vcnksIHRoYXQgb25lIGxvYWQgd291bGQgYmUgc3VmZmljaWVudCwgYnV0IHNpbmNlIHdlIG1heQotCSAqIGJlLCB3ZSBhbHNvIG5lZWQgdG8gYmFjayB1cCB0byB0aGUgbGFzdCBsb2FkIGlzc3VlZCB0bwotCSAqIGFub3RoZXIgbWVtb3J5IGNvbnRyb2xsZXIsIHdoaWNoIHdvdWxkIGJlIHRoZSBwb2ludCB3aGVyZQotCSAqIHdlIGNyb3NzZWQgYW4gOEtCIGJvdW5kYXJ5ICh0aGUgZ3JhbnVsYXJpdHkgb2Ygc3RyaXBpbmcKLQkgKiBhY3Jvc3MgbWVtb3J5IGNvbnRyb2xsZXJzKS4gIEtlZXAgYmFja2luZyB1cCBhbmQgZG9pbmcgdGhpcwotCSAqIHVudGlsIHdlIGFyZSBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLCBvciBoYXZlCi0JICogaGl0IGFsbCB0aGUgY29udHJvbGxlcnMuCi0JICovCi0JZm9yIChpID0gMCwgcCA9IChjaGFyICopYnVmZmVyICsgc2l6ZSAtIDE7Ci0JICAgICBpIDwgKDEgPDwgQ0hJUF9MT0dfTlVNX01TSElNUygpKSAmJiBwID49IChjaGFyICopYnVmZmVyOwotCSAgICAgKytpKSB7Ci0JCWNvbnN0IHVuc2lnbmVkIGxvbmcgU1RSSVBFX1dJRFRIID0gODE5MjsKLQotCQkvKiBGb3JjZSBhIGxvYWQgaW5zdHJ1Y3Rpb24gdG8gaXNzdWUuICovCi0JCSoodm9sYXRpbGUgY2hhciAqKXA7Ci0KLQkJLyogSnVtcCB0byBlbmQgb2YgcHJldmlvdXMgc3RyaXBlLiAqLwotCQlwIC09IFNUUklQRV9XSURUSDsKLQkJcCA9IChjaGFyICopKCh1bnNpZ25lZCBsb25nKXAgfCAoU1RSSVBFX1dJRFRIIC0gMSkpOwotCX0KLQotCS8qIFdhaXQgZm9yIHRoZSBsb2FkcyAoYW5kIHRodXMgZmx1c2hlcykgdG8gaGF2ZSBjb21wbGV0ZWQuICovCi0JX19pbnNuX21mKCk7Ci19Cit2b2lkIGZpbnZfYnVmZmVyX3JlbW90ZSh2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgaGZoKTsKIAogI2VuZGlmIC8qIF9BU01fVElMRV9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9lZGFjLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZWRhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZmM4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZWRhYy5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfRURBQ19ICisjZGVmaW5lIF9BU01fVElMRV9FREFDX0gKKworLyogRUNDIGF0b21pYywgRE1BLCBTTVAgYW5kIGludGVycnVwdCBzYWZlIHNjcnViIGZ1bmN0aW9uICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2NydWIodm9pZCAqdmEsIHUzMiBzaXplKQoreworCS8qCisJICogVGhlc2UgaXMgbm90aGluZyB0byBiZSBkb25lIGhlcmUgYmVjYXVzZSBDRSBpcworCSAqIGNvcnJlY3RlZCBieSB0aGUgbXNoaW0uCisJICovCisJcmV0dXJuOworfQorCisjZW5kaWYgLyogX0FTTV9USUxFX0VEQUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9odWdldGxiLmgKaW5kZXggMDUyMWMyNy4uZDM5NmQxOCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaHVnZXRsYi5oCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKLQlzZXRfcHRlX29yZGVyKHB0ZXAsIHB0ZSwgSFVHRVRMQl9QQUdFX09SREVSKTsKKwlzZXRfcHRlKHB0ZXAsIHB0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCmluZGV4IDY0MWU0ZmYuLjVkYjBjZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8YXJjaC9pbnRlcnJ1cHRzLmg+CiAjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CiAKKyNpZiAhZGVmaW5lZChfX3RpbGVneF9fKSAmJiBkZWZpbmVkKF9fQVNTRU1CTFlfXykKKwogLyoKICAqIFRoZSBzZXQgb2YgaW50ZXJydXB0cyB3ZSB3YW50IHRvIGFsbG93IHdoZW4gaW50ZXJydXB0cyBhcmUgbm9taW5hbGx5CiAgKiBkaXNhYmxlZC4gIFRoZSByZW1haW5kZXIgYXJlIGVmZmVjdGl2ZWx5ICJOTUkiIGludGVycnVwdHMgZnJvbQpAQCAtMjUsNiArMjcsMTYgQEAKICAqIGludGVycnVwdHMgKGFrYSAibm9uLXF1ZXVlZCIpIGFyZSBub3QgYmxvY2tlZCBieSB0aGUgbWFzayBpbiBhbnkgY2FzZS4KICAqLwogI2lmIENISVBfSEFTX0FVWF9QRVJGX0NPVU5URVJTKCkKKyNkZWZpbmUgTElOVVhfTUFTS0FCTEVfSU5URVJSVVBUU19ISSBcCisgICAgICAgKH4oSU5UX01BU0tfSEkoSU5UX1BFUkZfQ09VTlQpIHwgSU5UX01BU0tfSEkoSU5UX0FVWF9QRVJGX0NPVU5UKSkpCisjZWxzZQorI2RlZmluZSBMSU5VWF9NQVNLQUJMRV9JTlRFUlJVUFRTX0hJIFwKKyAgICAgICAofihJTlRfTUFTS19ISShJTlRfUEVSRl9DT1VOVCkpKQorI2VuZGlmCisKKyNlbHNlCisKKyNpZiBDSElQX0hBU19BVVhfUEVSRl9DT1VOVEVSUygpCiAjZGVmaW5lIExJTlVYX01BU0tBQkxFX0lOVEVSUlVQVFMgXAogCSh+KElOVF9NQVNLKElOVF9QRVJGX0NPVU5UKSB8IElOVF9NQVNLKElOVF9BVVhfUEVSRl9DT1VOVCkpKQogI2Vsc2UKQEAgLTMyLDYgKzQ0LDggQEAKIAkofihJTlRfTUFTSyhJTlRfUEVSRl9DT1VOVCkpKQogI2VuZGlmCiAKKyNlbmRpZgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKiBOT1RFOiB3ZSBjYW4ndCBpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4gZHVlIHRvICNpbmNsdWRlIGRlcGVuZGVuY2llcy4gKi8KQEAgLTIyNCwxMSArMjM4LDExIEBACiAjZGVmaW5lIElSUV9ESVNBQkxFKHRtcDAsIHRtcDEpCQkJCQlcCiAJewkJCQkJCQlcCiAJIG1vdmVpICB0bXAwLCAtMTsJCQkJCVwKLQkgbW92ZWxpIHRtcDEsIGxvMTYoTElOVVhfTUFTS0FCTEVfSU5URVJSVVBUUykJCVwKKwkgbW92ZWxpIHRtcDEsIGxvMTYoTElOVVhfTUFTS0FCTEVfSU5URVJSVVBUU19ISSkJXAogCX07CQkJCQkJCVwKIAl7CQkJCQkJCVwKIAkgbXRzcHIgIFNQUl9JTlRFUlJVUFRfTUFTS19TRVRfS18wLCB0bXAwOwkJXAotCSBhdWxpICAgdG1wMSwgdG1wMSwgaGExNihMSU5VWF9NQVNLQUJMRV9JTlRFUlJVUFRTKQlcCisJIGF1bGkgICB0bXAxLCB0bXAxLCBoYTE2KExJTlVYX01BU0tBQkxFX0lOVEVSUlVQVFNfSEkpCVwKIAl9OwkJCQkJCQlcCiAJbXRzcHIgICBTUFJfSU5URVJSVVBUX01BU0tfU0VUX0tfMSwgdG1wMQogCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA3OTc5YTQ1Li4zZWI1MzUyIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTE2LDEwICsxNiwxMSBAQAogI2RlZmluZSBfQVNNX1RJTEVfUEFHRV9ICiAKICNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorI2luY2x1ZGUgPGh2L3BhZ2VzaXplLmg+CiAKIC8qIFBBR0VfU0hJRlQgYW5kIEhQQUdFX1NISUZUIGRldGVybWluZSB0aGUgcGFnZSBzaXplcy4gKi8KLSNkZWZpbmUgUEFHRV9TSElGVAkxNgotI2RlZmluZSBIUEFHRV9TSElGVAkyNAorI2RlZmluZSBQQUdFX1NISUZUCUhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMCisjZGVmaW5lIEhQQUdFX1NISUZUCUhWX0xPRzJfUEFHRV9TSVpFX0xBUkdFCiAKICNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSwgVUwpIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIEhQQUdFX1NJWkUJKF9BQygxLCBVTCkgPDwgSFBBR0VfU0hJRlQpCkBAIC0yOSwyNSArMzAsMTggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorLyoKKyAqIElmIHRoZSBLY29uZmlnIGRvZXNuJ3Qgc3BlY2lmeSwgc2V0IGEgbWF4aW11bSB6b25lIG9yZGVyIHRoYXQKKyAqIGlzIGVub3VnaCBzbyB0aGF0IHdlIGNhbiBjcmVhdGUgaHVnZSBwYWdlcyBmcm9tIHNtYWxsIHBhZ2VzIGdpdmVuCisgKiB0aGUgcmVzcGVjdGl2ZSBzaXplcyBvZiB0aGUgdHdvIHBhZ2UgdHlwZXMuICBTZWUgPGxpbnV4L21tem9uZS5oPi4KKyAqLworI2lmbmRlZiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUgorI2RlZmluZSBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUiAoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUICsgMSkKKyNlbmRpZgorCiAjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgogCi0vKgotICogVGhlIHssSH1QQUdFX1NISUZUIHZhbHVlcyBtdXN0IG1hdGNoIHRoZSBIVl9MT0cyX1BBR0VfU0laRV94eHgKLSAqIGRlZmluaXRpb25zIGluIDxodi9oeXBlcnZpc29yLmg+LiAgV2UgdmFsaWRhdGUgdGhpcyBhdCBidWlsZCB0aW1lCi0gKiBoZXJlLCBhbmQgYWdhaW4gYXQgcnVudGltZSBkdXJpbmcgZWFybHkgYm9vdC4gIFdlIHByb3ZpZGUgYQotICogc2VwYXJhdGUgZGVmaW5pdGlvbiBzaW5jZSB1c2Vyc3BhY2UgZG9lc24ndCBoYXZlIDxodi9oeXBlcnZpc29yLmg+LgotICoKLSAqIEJlIGNhcmVmdWwgdG8gZGlzdGluZ3Vpc2ggUEFHRV9TSElGVCBmcm9tIEhWX1BURV9JTkRFWF9QRk4sIHNpbmNlCi0gKiB0aGV5IGFyZSB0aGUgc2FtZSBvbiBpMzg2IGJ1dCBub3QgVElMRS4KLSAqLwotI2lmIEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMICE9IFBBR0VfU0hJRlQKLSMgZXJyb3IgU21hbGwgcGFnZSBzaXplIG1pc21hdGNoIGluIExpbnV4Ci0jZW5kaWYKLSNpZiBIVl9MT0cyX1BBR0VfU0laRV9MQVJHRSAhPSBIUEFHRV9TSElGVAotIyBlcnJvciBIdWdlIHBhZ2Ugc2l6ZSBtaXNtYXRjaCBpbiBMaW51eAotI2VuZGlmCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtODEsMTIgKzc1LDYgQEAKICAqIEh5cGVydmlzb3IgcGFnZSB0YWJsZXMgYXJlIG1hZGUgb2YgdGhlIHNhbWUgYmFzaWMgc3RydWN0dXJlLgogICovCiAKLXR5cGVkZWYgX191NjQgcHRldmFsX3Q7Ci10eXBlZGVmIF9fdTY0IHBtZHZhbF90OwotdHlwZWRlZiBfX3U2NCBwdWR2YWxfdDsKLXR5cGVkZWYgX191NjQgcGdkdmFsX3Q7Ci10eXBlZGVmIF9fdTY0IHBncHJvdHZhbF90OwotCiB0eXBlZGVmIEhWX1BURSBwdGVfdDsKIHR5cGVkZWYgSFZfUFRFIHBnZF90OwogdHlwZWRlZiBIVl9QVEUgcGdwcm90X3Q7CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCBjZjUyNzkxLi5lOTE5YzBiIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTQxLDkgKzQxLDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpCiB7CiAjaWZkZWYgQ09ORklHXzY0QklUCi0Jc2V0X3B0ZV9vcmRlcihwbWRwLCBwbWQsIEwyX1VTRVJfUEdUQUJMRV9PUkRFUik7CisJc2V0X3B0ZShwbWRwLCBwbWQpOwogI2Vsc2UKLQlzZXRfcHRlX29yZGVyKCZwbWRwLT5wdWQucGdkLCBwbWQucHVkLnBnZCwgTDJfVVNFUl9QR1RBQkxFX09SREVSKTsKKwlzZXRfcHRlKCZwbWRwLT5wdWQucGdkLCBwbWQucHVkLnBnZCk7CiAjZW5kaWYKIH0KIApAQCAtMTAwLDYgKzEwMCw5IEBACiAvKiBEdXJpbmcgaW5pdCwgd2UgY2FuIHNoYXR0ZXIga2VybmVsIGh1Z2UgcGFnZXMgaWYgbmVlZGVkLiAqLwogdm9pZCBzaGF0dGVyX3BtZChwbWRfdCAqcG1kKTsKIAorLyogQWZ0ZXIgaW5pdCwgYSBtb3JlIGNvbXBsZXggdGVjaG5pcXVlIGlzIHJlcXVpcmVkLiAqLwordm9pZCBzaGF0dGVyX2h1Z2VfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpOworCiAjaWZkZWYgX190aWxlZ3hfXwogLyogV2Ugc2hhcmUgYSBzaW5nbGUgcGFnZSBhbGxvY2F0b3IgZm9yIGJvdGggTDEgYW5kIEwyIHBhZ2UgdGFibGVzLiAqLwogI2lmIEhWX0wxX1NJWkUgIT0gSFZfTDJfU0laRQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYTY2MDRlOS4uMWEyMGI3ZSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yMzMsMTUgKzIzMywyMyBAQAogI2RlZmluZSBwZ2RfRVJST1IoZSkgXAogCXByX2VycigiJXM6JWQ6IGJhZCBwZ2QgMHglMDE2bGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQogCisvKiBSZXR1cm4gUEEgYW5kIHByb3RlY3Rpb24gaW5mbyBmb3IgYSBnaXZlbiBrZXJuZWwgVkEuICovCitpbnQgdmFfdG9fY3BhX2FuZF9wdGUodm9pZCAqdmEsIHBoeXNfYWRkcl90ICpjcGEsIHB0ZV90ICpwdGUpOworCiAvKgotICogc2V0X3B0ZV9vcmRlcigpIHNldHMgdGhlIGdpdmVuIFBURSBhbmQgYWxzbyBzYW5pdHktY2hlY2tzIHRoZQorICogX19zZXRfcHRlKCkgZW5zdXJlcyB3ZSB3cml0ZSB0aGUgNjQtYml0IFBURSB3aXRoIDMyLWJpdCB3b3JkcyBpbgorICogdGhlIHJpZ2h0IG9yZGVyIG9uIDMyLWJpdCBwbGF0Zm9ybXMgYW5kIGFsc28gYWxsb3dzIHVzIHRvIHdyaXRlCisgKiBob29rcyB0byBjaGVjayB2YWxpZCBQVEVzLCBldGMuLCBpZiB3ZSB3YW50LgorICovCit2b2lkIF9fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKKworLyoKKyAqIHNldF9wdGUoKSBzZXRzIHRoZSBnaXZlbiBQVEUgYW5kIGFsc28gc2FuaXR5LWNoZWNrcyB0aGUKICAqIHJlcXVlc3RlZCBQVEUgYWdhaW5zdCB0aGUgcGFnZSBob21lY2FjaGluZy4gIFVuc3BlY2lmaWVkIHBhcnRzCiAgKiBvZiB0aGUgUFRFIGFyZSBmaWxsZWQgaW4gd2hlbiBpdCBpcyB3cml0dGVuIHRvIG1lbW9yeSwgaS5lLiBhbGwKICAqIGNhY2hpbmcgYXR0cmlidXRlcyBpZiAiIWZvcmNlY2FjaGUiLCBvciB0aGUgaG9tZSBjcHUgaWYgImFueWhvbWUiLgogICovCi1leHRlcm4gdm9pZCBzZXRfcHRlX29yZGVyKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIGludCBvcmRlcik7Ci0KLSNkZWZpbmUgc2V0X3B0ZShwdGVwLCBwdGV2YWwpIHNldF9wdGVfb3JkZXIocHRlcCwgcHRldmFsLCAwKQorZXh0ZXJuIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKICNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRldmFsKSBzZXRfcHRlKHB0ZXAsIHB0ZXZhbCkKICNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcHRyLCBwdGV2YWwpIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpCiAKQEAgLTI5MywyMSArMzAxLDYgQEAKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHN3cCkJKChwdGVfdCkgeyAoKChsb25nIGxvbmcpICgoc3dwKS52YWwpKSA8PCAzMikgfSkKIAogLyoKLSAqIGNsb25lX3BnZF9yYW5nZShwZ2RfdCAqZHN0LCBwZ2RfdCAqc3JjLCBpbnQgY291bnQpOwotICoKLSAqICBkc3QgLSBwb2ludGVyIHRvIHBnZCByYW5nZSBhbndoZXJlIG9uIGEgcGdkIHBhZ2UKLSAqICBzcmMgLSAiIgotICogIGNvdW50IC0gdGhlIG51bWJlciBvZiBwZ2RzIHRvIGNvcHkuCi0gKgotICogZHN0IGFuZCBzcmMgY2FuIGJlIG9uIHRoZSBzYW1lIHBhZ2UsIGJ1dCB0aGUgcmFuZ2UgbXVzdCBub3Qgb3ZlcmxhcCwKLSAqIGFuZCBtdXN0IG5vdCBjcm9zcyBhIHBhZ2UgYm91bmRhcnkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbG9uZV9wZ2RfcmFuZ2UocGdkX3QgKmRzdCwgcGdkX3QgKnNyYywgaW50IGNvdW50KQotewotICAgICAgIG1lbWNweShkc3QsIHNyYywgY291bnQgKiBzaXplb2YocGdkX3QpKTsKLX0KLQotLyoKICAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCiAgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAppbmRleCA1M2VjMzQ4Li45Zjk4NTI5IDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUEdESVJfU0laRQlIVl9QQUdFX1NJWkVfTEFSR0UKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgKDMyIC0gUEdESVJfU0hJRlQpKQorI2RlZmluZSBTSVpFT0ZfUEdECShQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKQogCiAvKgogICogVGhlIGxldmVsLTIgaW5kZXggaXMgZGVmaW5lZCBieSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBodWdlCkBAIC0zMyw2ICszNCw3IEBACiAgKiB0aGlzIG5vbWVuY2xhdHVyZSBpcyBzb21ld2hhdCBjb25mdXNpbmcuCiAgKi8KICNkZWZpbmUgUFRSU19QRVJfUFRFICgxIDw8IChIVl9MT0cyX1BBR0VfU0laRV9MQVJHRSAtIEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMKSkKKyNkZWZpbmUgU0laRU9GX1BURQkoUFRSU19QRVJfUFRFICogc2l6ZW9mKHB0ZV90KSkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtOTQsNyArOTYsNiBAQAogICovCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUgogCiBleHRlcm4gaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICopOwpAQCAtMTEwLDYgKzExMSwxMSBAQAogCXJldHVybiBwdGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZHZhbCkKK3sKKwlzZXRfcHRlKCZwbWRwLT5wdWQucGdkLCBwbWR2YWwucHVkLnBnZCk7Cit9CisKIC8qIENyZWF0ZSBhIHBtZCBmcm9tIGEgUFRGTi4gKi8KIHN0YXRpYyBpbmxpbmUgcG1kX3QgcHRmbl9wbWQodW5zaWduZWQgbG9uZyBwdGZuLCBwZ3Byb3RfdCBwcm90KQogewpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGE5ZTdjODcuLmU2ODg5NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTI2OSw3ICsyNjksNiBAQAogLyogRGF0YSBvbiB3aGljaCBwaHlzaWNhbCBtZW1vcnkgY29udHJvbGxlciBjb3JyZXNwb25kcyB0byB3aGljaCBOVU1BIG5vZGUuICovCiBleHRlcm4gaW50IG5vZGVfY29udHJvbGxlcltdOwogCi0KIC8qIERvIHdlIGR1bXAgaW5mb3JtYXRpb24gdG8gdGhlIGNvbnNvbGUgd2hlbiBhIHVzZXIgYXBwbGljYXRpb24gY3Jhc2hlcz8gKi8KIGV4dGVybiBpbnQgc2hvd19jcmFzaGluZm87CiAKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBhYzZkMzQzLi42YmUyMjQ2IDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xNDEsNiArMTQxLDkgQEAKIC8qIFNpbmdsZS1zdGVwIHRoZSBpbnN0cnVjdGlvbiBhdCByZWdzLT5wYyAqLwogZXh0ZXJuIHZvaWQgc2luZ2xlX3N0ZXBfb25jZShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKKy8qIENsZWFuIHVwIGFmdGVyIGV4ZWN2ZSgpLiAqLworZXh0ZXJuIHZvaWQgc2luZ2xlX3N0ZXBfZXhlY3ZlKHZvaWQpOworCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIGV4dGVybiB2b2lkIHNlbmRfc2lndHJhcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCmluZGV4IDg4ZWZkZGU4Li5hOGYyYzZlIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaApAQCAtNzgsMTMgKzc4LDYgQEAKICNkZWZpbmUgX1JEX0NPVU5UX1NISUZUIDI0CiAjZGVmaW5lIF9SRF9DT1VOVF9XSURUSCA4CiAKLS8qIEludGVybmFsIGZ1bmN0aW9uczsgZG8gbm90IHVzZS4gKi8KLXZvaWQgYXJjaF9yZWFkX2xvY2tfc2xvdyhhcmNoX3J3bG9ja190ICosIHUzMik7Ci1pbnQgYXJjaF9yZWFkX3RyeWxvY2tfc2xvdyhhcmNoX3J3bG9ja190ICopOwotdm9pZCBhcmNoX3JlYWRfdW5sb2NrX3Nsb3coYXJjaF9yd2xvY2tfdCAqKTsKLXZvaWQgYXJjaF93cml0ZV9sb2NrX3Nsb3coYXJjaF9yd2xvY2tfdCAqLCB1MzIpOwotdm9pZCBhcmNoX3dyaXRlX3VubG9ja19zbG93KGFyY2hfcndsb2NrX3QgKiwgdTMyKTsKLQogLyoqCiAgKiBhcmNoX3JlYWRfY2FuX2xvY2soKSAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/CiAgKi8KQEAgLTEwNCw5NCArOTcsMzIgQEAKIC8qKgogICogYXJjaF9yZWFkX2xvY2soKSAtIGFjcXVpcmUgYSByZWFkIGxvY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfbG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCi17Ci0JdTMyIHZhbCA9IF9faW5zbl90bnMoKGludCAqKSZyd2xvY2stPmxvY2spOwotCWlmICh1bmxpa2VseSh2YWwgPDwgX1JEX0NPVU5UX1dJRFRIKSkgewotCQlhcmNoX3JlYWRfbG9ja19zbG93KHJ3bG9jaywgdmFsKTsKLQkJcmV0dXJuOwotCX0KLQlyd2xvY2stPmxvY2sgPSB2YWwgKyAoMSA8PCBfUkRfQ09VTlRfU0hJRlQpOwotfQordm9pZCBhcmNoX3JlYWRfbG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spOwogCiAvKioKLSAqIGFyY2hfcmVhZF9sb2NrKCkgLSBhY3F1aXJlIGEgd3JpdGUgbG9jay4KKyAqIGFyY2hfd3JpdGVfbG9jaygpIC0gYWNxdWlyZSBhIHdyaXRlIGxvY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX2xvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKQotewotCXUzMiB2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKLQlpZiAodW5saWtlbHkodmFsICE9IDApKSB7Ci0JCWFyY2hfd3JpdGVfbG9ja19zbG93KHJ3bG9jaywgdmFsKTsKLQkJcmV0dXJuOwotCX0KLQlyd2xvY2stPmxvY2sgPSAxIDw8IF9XUl9ORVhUX1NISUZUOwotfQordm9pZCBhcmNoX3dyaXRlX2xvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKTsKIAogLyoqCiAgKiBhcmNoX3JlYWRfdHJ5bG9jaygpIC0gdHJ5IHRvIGFjcXVpcmUgYSByZWFkIGxvY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3bG9jaykKLXsKLQlpbnQgbG9ja2VkOwotCXUzMiB2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKLQlpZiAodW5saWtlbHkodmFsICYgMSkpCi0JCXJldHVybiBhcmNoX3JlYWRfdHJ5bG9ja19zbG93KHJ3bG9jayk7Ci0JbG9ja2VkID0gKHZhbCA8PCBfUkRfQ09VTlRfV0lEVEgpID09IDA7Ci0Jcndsb2NrLT5sb2NrID0gdmFsICsgKGxvY2tlZCA8PCBfUkRfQ09VTlRfU0hJRlQpOwotCXJldHVybiBsb2NrZWQ7Ci19CitpbnQgYXJjaF9yZWFkX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKTsKIAogLyoqCiAgKiBhcmNoX3dyaXRlX3RyeWxvY2soKSAtIHRyeSB0byBhY3F1aXJlIGEgd3JpdGUgbG9jay4KICAqLwotc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3bG9jaykKLXsKLQl1MzIgdmFsID0gX19pbnNuX3RucygoaW50ICopJnJ3bG9jay0+bG9jayk7Ci0KLQkvKgotCSAqIElmIGEgdG5zIGlzIGluIHByb2dyZXNzLCBvciB0aGVyZSdzIGEgd2FpdGluZyBvciBhY3RpdmUgbG9ja2VyLAotCSAqIG9yIGFjdGl2ZSByZWFkZXJzLCB3ZSBjYW4ndCB0YWtlIHRoZSBsb2NrLCBzbyBnaXZlIHVwLgotCSAqLwotCWlmICh1bmxpa2VseSh2YWwgIT0gMCkpIHsKLQkJaWYgKCEodmFsICYgMSkpCi0JCQlyd2xvY2stPmxvY2sgPSB2YWw7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFNldCB0aGUgIm5leHQiIGZpZWxkIHRvIG1hcmsgaXQgbG9ja2VkLiAqLwotCXJ3bG9jay0+bG9jayA9IDEgPDwgX1dSX05FWFRfU0hJRlQ7Ci0JcmV0dXJuIDE7Ci19CitpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3bG9jayk7CiAKIC8qKgogICogYXJjaF9yZWFkX3VubG9jaygpIC0gcmVsZWFzZSBhIHJlYWQgbG9jay4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKQotewotCXUzMiB2YWw7Ci0JbWIoKTsgIC8qIGd1YXJhbnRlZSBhbnl0aGluZyBtb2RpZmllZCB1bmRlciB0aGUgbG9jayBpcyB2aXNpYmxlICovCi0JdmFsID0gX19pbnNuX3RucygoaW50ICopJnJ3bG9jay0+bG9jayk7Ci0JaWYgKHVubGlrZWx5KHZhbCAmIDEpKSB7Ci0JCWFyY2hfcmVhZF91bmxvY2tfc2xvdyhyd2xvY2spOwotCQlyZXR1cm47Ci0JfQotCXJ3bG9jay0+bG9jayA9IHZhbCAtICgxIDw8IF9SRF9DT1VOVF9TSElGVCk7Ci19Cit2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKTsKIAogLyoqCiAgKiBhcmNoX3dyaXRlX3VubG9jaygpIC0gcmVsZWFzZSBhIHdyaXRlIGxvY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCi17Ci0JdTMyIHZhbDsKLQltYigpOyAgLyogZ3VhcmFudGVlIGFueXRoaW5nIG1vZGlmaWVkIHVuZGVyIHRoZSBsb2NrIGlzIHZpc2libGUgKi8KLQl2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKLQlpZiAodW5saWtlbHkodmFsICE9ICgxIDw8IF9XUl9ORVhUX1NISUZUKSkpIHsKLQkJYXJjaF93cml0ZV91bmxvY2tfc2xvdyhyd2xvY2ssIHZhbCk7Ci0JCXJldHVybjsKLQl9Ci0Jcndsb2NrLT5sb2NrID0gMDsKLX0KK3ZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKTsKIAogI2RlZmluZSBhcmNoX3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9yZWFkX2xvY2sobG9jaykKICNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3dyaXRlX2xvY2sobG9jaykKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zdGFjay5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N0YWNrLmgKaW5kZXggZjkwODQ3My4uNGQ5N2EyZCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N0YWNrLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N0YWNrLmgKQEAgLTE4LDEzICsxOCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vYmFja3RyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CiAKIC8qIEV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGEgYmFja3RyYWNlIGl0ZXJhdGlvbiAqLwogc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciB7CiAJQmFja3RyYWNlSXRlcmF0b3IgaXQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOyAgICAgLyogdGFzayB3ZSBhcmUgYmFja3RyYWNpbmcgKi8KLQlIVl9QVEUgKnBndGFibGU7CSAgICAgIC8qIHBhZ2UgdGFibGUgZm9yIHVzZXIgc3BhY2UgYWNjZXNzICovCisJcHRlX3QgKnBndGFibGU7CQkgICAgICAvKiBwYWdlIHRhYmxlIGZvciB1c2VyIHNwYWNlIGFjY2VzcyAqLwogCWludCBlbmQ7CQkgICAgICAvKiBpdGVyYXRpb24gY29tcGxldGUuICovCiAJaW50IG5ld19jb250ZXh0OyAgICAgICAgICAgICAgLyogbmV3IGNvbnRleHQgaXMgc3RhcnRpbmcgKi8KIAlpbnQgcHJvZmlsZTsgICAgICAgICAgICAgICAgICAvKiBwcm9maWxpbmcsIHNvIHN0b3Agb24gYXN5bmMgaW50cnB0ICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggNTM4ODg1MC4uMjNkMTg0MiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtOTAsNyArOTAsMjQgQEAKICNlbmRpZgogCiAjaWYgIUNISVBfSEFTX01GX1dBSVRTX0ZPUl9WSUNUSU1TKCkKLWludCBfX21iX2luY29oZXJlbnQodm9pZCk7ICAvKiBIZWxwZXIgcm91dGluZSBmb3IgbWJfaW5jb2hlcmVudCgpLiAqLworI2luY2x1ZGUgPGh2L3N5c2NhbGxfcHVibGljLmg+CisvKgorICogSXNzdWUgYW4gdW5jYWNoZWFibGUgbG9hZCB0byBlYWNoIG1lbW9yeSBjb250cm9sbGVyLCB0aGVuCisgKiB3YWl0IHVudGlsIHRob3NlIGxvYWRzIGhhdmUgY29tcGxldGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19tYl9pbmNvaGVyZW50KHZvaWQpCit7CisJbG9uZyBjbG9iYmVyX3IxMDsKKwlhc20gdm9sYXRpbGUoInN3aW50MiIKKwkJICAgICA6ICI9UjEwIiAoY2xvYmJlcl9yMTApCisJCSAgICAgOiAiUjEwIiAoSFZfU1lTX2ZlbmNlX2luY29oZXJlbnQpCisJCSAgICAgOiAicjAiLCAicjEiLCAicjIiLCAicjMiLCAicjQiLAorCQkgICAgICAgInI1IiwgInI2IiwgInI3IiwgInI4IiwgInI5IiwKKwkJICAgICAgICJyMTEiLCAicjEyIiwgInIxMyIsICJyMTQiLAorCQkgICAgICAgInIxNSIsICJyMTYiLCAicjE3IiwgInIxOCIsICJyMTkiLAorCQkgICAgICAgInIyMCIsICJyMjEiLCAicjIyIiwgInIyMyIsICJyMjQiLAorCQkgICAgICAgInIyNSIsICJyMjYiLCAicjI3IiwgInIyOCIsICJyMjkiKTsKK30KICNlbmRpZgogCiAvKiBGZW5jZSB0byBndWFyYW50ZWUgdmlzaWJpbGl0eSBvZiBzdG9yZXMgdG8gaW5jb2hlcmVudCBtZW1vcnkuICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDM4NzJmMmIuLjM0MDViNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC02OCw2ICs2OCw3IEBACiAjZWxzZQogI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiAoMCkKICNlbmRpZgorI2RlZmluZSBUSFJFQURfU0laRV9QQUdFUyAoMSA8PCBUSFJFQURfU0laRV9PUkRFUikKIAogI2RlZmluZSBUSFJFQURfU0laRSAoUEFHRV9TSVpFIDw8IFRIUkVBRF9TSVpFX09SREVSKQogI2RlZmluZSBMT0cyX1RIUkVBRF9TSVpFIChQQUdFX1NISUZUICsgVEhSRUFEX1NJWkVfT1JERVIpCkBAIC04Myw3ICs4NCw3IEBACiAgICgoc3RydWN0IHRocmVhZF9pbmZvICopKHN0YWNrX3BvaW50ZXIgJiAtVEhSRUFEX1NJWkUpKQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgotZXh0ZXJuIHN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvX25vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgbm9kZSk7CiBleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqaW5mbyk7CiAKIC8qIFNpdCBvbiBhIG5hcCBpbnN0cnVjdGlvbiB1bnRpbCBpbnRlcnJ1cHRlZC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90aW1leC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RpbWV4LmgKaW5kZXggM2JhZjVmYy4uMjk5MjFmMCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RpbWV4LmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RpbWV4LmgKQEAgLTM4LDYgKzM4LDkgQEAKIAogY3ljbGVzX3QgZ2V0X2Nsb2NrX3JhdGUodm9pZCk7CiAKKy8qIENvbnZlcnQgbmFub3NlY29uZHMgdG8gY29yZSBjbG9jayBjeWNsZXMuICovCitjeWNsZXNfdCBuczJjeWNsZXModW5zaWduZWQgbG9uZyBuc2Vjcyk7CisKIC8qIENhbGxlZCBhdCBjcHUgaW5pdGlhbGl6YXRpb24gdG8gc2V0IHNvbWUgbG93LWxldmVsIGNvbnN0YW50cy4gKi8KIHZvaWQgc2V0dXBfY2xvY2sodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2Rydl9tc2hpbV9pbnRmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9kcnZfbXNoaW1faW50Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZWYzYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9kcnZfbXNoaW1faW50Zi5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBAZmlsZSBkcnZfbXNoaW1faW50Zi5oCisgKiBJbnRlcmZhY2UgZGVmaW5pdGlvbnMgZm9yIHRoZSBMaW51eCBFREFDIG1lbW9yeSBjb250cm9sbGVyIGRyaXZlci4KKyAqLworCisjaWZuZGVmIF9TWVNfSFZfSU5DTFVERV9EUlZfTVNISU1fSU5URl9ICisjZGVmaW5lIF9TWVNfSFZfSU5DTFVERV9EUlZfTVNISU1fSU5URl9ICisKKy8qKiBOdW1iZXIgb2YgbWVtb3J5IGNvbnRyb2xsZXJzIGluIHRoZSBwdWJsaWMgQVBJLiAqLworI2RlZmluZSBUSUxFX01BWF9NU0hJTVMgNAorCisvKiogTWVtb3J5IGluZm8gdW5kZXIgZWFjaCBtZW1vcnkgY29udHJvbGxlci4gKi8KK3N0cnVjdCBtc2hpbV9tZW1faW5mbworeworICB1aW50NjRfdCBtZW1fc2l6ZTsgICAgIC8qKjwgVG90YWwgbWVtb3J5IHNpemUgaW4gYnl0ZXMuICovCisgIHVpbnQ4X3QgbWVtX3R5cGU7ICAgICAgLyoqPCBNZW1vcnkgdHlwZSwgRERSMiBvciBERFIzLiAqLworICB1aW50OF90IG1lbV9lY2M7ICAgICAgIC8qKjwgTWVtb3J5IHN1cHBvcnRzIEVDQy4gKi8KK307CisKKy8qKgorICogRElNTSBlcnJvciBzdHJ1Y3R1cmUuCisgKiBGb3Igbm93LCBvbmx5IGNvcnJlY3RhYmxlIGVycm9ycyBhcmUgY291bnRlZCBhbmQgdGhlIG1zaGltIGRvZXNuJ3QgcmVjb3JkCisgKiB0aGUgZXJyb3IgUEEuIEhWIHRha2VzIHBhbmljIHVwb24gdW5jb3JyZWN0YWJsZSBlcnJvcnMuCisgKi8KK3N0cnVjdCBtc2hpbV9tZW1fZXJyb3IKK3sKKyAgdWludDMyX3Qgc2JlX2NvdW50OyAgICAgLyoqPCBOdW1iZXIgb2Ygc2luZ2xlLWJpdCBlcnJvcnMuICovCit9OworCisvKiogUmVhZCB0aGlzIG9mZnNldCB0byBnZXQgdGhlIG1lbW9yeSBpbmZvIHBlciBtc2hpbS4gKi8KKyNkZWZpbmUgTVNISU1fTUVNX0lORk9fT0ZGIDB4MTAwCisKKy8qKiBSZWFkIHRoaXMgb2Zmc2V0IHRvIGNoZWNrIERJTU0gZXJyb3IuICovCisjZGVmaW5lIE1TSElNX01FTV9FUlJPUl9PRkYgMHgyMDAKKworI2VuZGlmIC8qIF9TWVNfSFZfSU5DTFVERV9EUlZfTVNISU1fSU5URl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9odi9oeXBlcnZpc29yLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9oeXBlcnZpc29yLmgKaW5kZXggZjY3MjU0NC4uMWI4YmYwMyAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvaHYvaHlwZXJ2aXNvci5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2h5cGVydmlzb3IuaApAQCAtMzM4LDkgKzMzOCwxMCBAQAogI2RlZmluZSBIVl9FTk9UUkVBRFkgICAtODEyICAvKio8IERldmljZSBub3QgcmVhZHkgKi8KICNkZWZpbmUgSFZfRUlPICAgICAgICAgLTgxMyAgLyoqPCBJL08gZXJyb3IgKi8KICNkZWZpbmUgSFZfRU5PTUVNICAgICAgLTgxNCAgLyoqPCBPdXQgb2YgbWVtb3J5ICovCisjZGVmaW5lIEhWX0VBR0FJTiAgICAgIC04MTUgIC8qKjwgVHJ5IGFnYWluICovCiAKICNkZWZpbmUgSFZfRVJSX01BWCAgICAgLTgwMSAgLyoqPCBMYXJnZXN0IEhWIGVycm9yIGNvZGUgKi8KLSNkZWZpbmUgSFZfRVJSX01JTiAgICAgLTgxNCAgLyoqPCBTbWFsbGVzdCBIViBlcnJvciBjb2RlICovCisjZGVmaW5lIEhWX0VSUl9NSU4gICAgIC04MTUgIC8qKjwgU21hbGxlc3QgSFYgZXJyb3IgY29kZSAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIApAQCAtODY3LDYgKzg2OCw0MyBAQAogICovCiBIVl9QaHlzQWRkclJhbmdlIGh2X2lucXVpcmVfcGh5c2ljYWwoaW50IGlkeCk7CiAKKy8qKiBQb3NzaWJsZSBESU1NIHR5cGVzLiAqLwordHlwZWRlZiBlbnVtCit7CisgIE5PX0RJTU0gICAgICAgICAgICAgICAgICAgID0gMCwgIC8qKjwgTm8gRElNTSAqLworICBERFIyICAgICAgICAgICAgICAgICAgICAgICA9IDEsICAvKio8IEREUjIgKi8KKyAgRERSMyAgICAgICAgICAgICAgICAgICAgICAgPSAyICAgLyoqPCBERFIzICovCit9IEhWX0RJTU1fVHlwZTsKKworI2lmZGVmIF9fdGlsZWd4X18KKworLyoqIExvZzIgb2YgbWluaW11bSBESU1NIGJ5dGVzIHN1cHBvcnRlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuICovCisjZGVmaW5lIEhWX01TSF9NSU5fRElNTV9TSVpFX1NISUZUIDI5CisKKy8qKiBNYXggbnVtYmVyIG9mIERJTU1zIGNvbnRhaW5lZCBieSBvbmUgbWVtb3J5IGNvbnRyb2xsZXIuICovCisjZGVmaW5lIEhWX01TSF9NQVhfRElNTVMgOAorCisjZWxzZQorCisvKiogTG9nMiBvZiBtaW5pbXVtIERJTU0gYnl0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBtZW1vcnkgY29udHJvbGxlci4gKi8KKyNkZWZpbmUgSFZfTVNIX01JTl9ESU1NX1NJWkVfU0hJRlQgMjYKKworLyoqIE1heCBudW1iZXIgb2YgRElNTXMgY29udGFpbmVkIGJ5IG9uZSBtZW1vcnkgY29udHJvbGxlci4gKi8KKyNkZWZpbmUgSFZfTVNIX01BWF9ESU1NUyAyCisKKyNlbmRpZgorCisvKiogTnVtYmVyIG9mIGJpdHMgdG8gcmlnaHQtc2hpZnQgdG8gZ2V0IHRoZSBESU1NIHR5cGUuICovCisjZGVmaW5lIEhWX0RJTU1fVFlQRV9TSElGVCAwCisKKy8qKiBCaXRzIHRvIG1hc2sgdG8gZ2V0IHRoZSBESU1NIHR5cGUuICovCisjZGVmaW5lIEhWX0RJTU1fVFlQRV9NQVNLIDB4ZgorCisvKiogTnVtYmVyIG9mIGJpdHMgdG8gcmlnaHQtc2hpZnQgdG8gZ2V0IHRoZSBESU1NIHNpemUuICovCisjZGVmaW5lIEhWX0RJTU1fU0laRV9TSElGVCA0CisKKy8qKiBCaXRzIHRvIG1hc2sgdG8gZ2V0IHRoZSBESU1NIHNpemUuICovCisjZGVmaW5lIEhWX0RJTU1fU0laRV9NQVNLIDB4ZgogCiAvKiogTWVtb3J5IGNvbnRyb2xsZXIgaW5mb3JtYXRpb24uICovCiB0eXBlZGVmIHN0cnVjdApAQCAtOTY0LDYgKzEwMDIsMTEgQEAKIAogLyoqIFdhaXRzIGZvciBhdCBsZWFzdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBuYW5vc2Vjb25kcyB0aGVuIHJldHVybnMuCiAgKgorICogTk9URTogdGhpcyBkZXByZWNhdGVkIGZ1bmN0aW9uIGN1cnJlbnRseSBhc3N1bWVzIGEgNzUwIE1IeiBjbG9jaywKKyAqIGFuZCBpcyB0aHVzIG5vdCBnZW5lcmFsbHkgc3VpdGFibGUgZm9yIHVzZS4gIE5ldyBjb2RlIHNob3VsZCBjYWxsCisgKiBodl9zeXNjb25mKEhWX1NZU0NPTkZfQ1BVX1NQRUVEKSwgY29tcHV0ZSBhIGN5Y2xlIGNvdW50IHRvIHdhaXQgZm9yLAorICogYW5kIGRlbGF5IGJ5IGxvb3Bpbmcgd2hpbGUgY2hlY2tpbmcgdGhlIGN5Y2xlIGNvdW50ZXIgU1BSLgorICoKICAqIEBwYXJhbSBuYW5vc2VjcyBUaGUgbnVtYmVyIG9mIG5hbm9zZWNvbmRzIHRvIHNsZWVwLgogICovCiB2b2lkIGh2X25hbm9zbGVlcChpbnQgbmFub3NlY3MpOwpAQCAtMTAzOCw2ICsxMDgxLDcgQEAKICAqICBkb3duY2FsbDoKICAqCiAgKiAgSU5UX01FU1NBR0VfUkNWX0RXTkNMICAgKGh5cGVydmlzb3IgbWVzc2FnZSBhdmFpbGFibGUpCisgKiAgSU5UX0RFVl9JTlRSX0RXTkNMICAgICAgKGRldmljZSBpbnRlcnJ1cHQpCiAgKiAgSU5UX0RNQVRMQl9NSVNTX0RXTkNMICAgKERNQSBUTEIgbWlzcykKICAqICBJTlRfU05JVExCX01JU1NfRFdOQ0wgICAoU05JIFRMQiBtaXNzKQogICogIElOVF9ETUFUTEJfQUNDRVNTX0RXTkNMIChETUEgVExCIGFjY2VzcyB2aW9sYXRpb24pCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL2VudHJ5LlMgYi9hcmNoL3RpbGUva2VybmVsL2VudHJ5LlMKaW5kZXggZmQ4ZGM0Mi4uNDMxZTlhZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3RpbGUva2VybmVsL2VudHJ5LlMKQEAgLTM4LDEyICszOCw2IEBACiAJanJwIGxyCiAJU1REX0VORFBST0Moa2VybmVsX2V4ZWN2ZSkKIAotLyogRGVsYXkgYSBmaXhlZCBudW1iZXIgb2YgY3ljbGVzLiAqLwotU1REX0VOVFJZKF9fZGVsYXkpCi0JeyBhZGRpIHIwLCByMCwgLTE7IGJuenQgcjAsIC4gfQotCWpycCBscgotCVNURF9FTkRQUk9DKF9fZGVsYXkpCi0KIC8qCiAgKiBXZSBkb24ndCBydW4gdGhpcyBmdW5jdGlvbiBkaXJlY3RseSwgYnV0IGluc3RlYWQgY29weSBpdCB0byBhIHBhZ2UKICAqIHdlIG1hcCBpbnRvIGV2ZXJ5IHVzZXIgcHJvY2Vzcy4gIFNlZSB2ZHNvX3NldHVwKCkuCkBAIC05NywyMyArOTEsMTcgQEAKIAogLyoKICAqIEVuYWJsZSBpbnRlcnJ1cHRzIHJhY2VsZXNzbHkgYW5kIHRoZW4gbmFwIHVudGlsIGludGVycnVwdGVkLgorICogQXJjaGl0ZWN0dXJhbGx5LCB3ZSBhcmUgZ3VhcmFudGVlZCB0aGF0IGVuYWJsaW5nIGludGVycnVwdHMgdmlhCisgKiBtdHNwciB0byBJTlRFUlJVUFRfQ1JJVElDQUxfU0VDVElPTiBvbmx5IGludGVycnVwdHMgYXQgdGhlIG5leHQgUEMuCiAgKiBUaGlzIGZ1bmN0aW9uJ3MgX2NwdV9pZGxlX25hcCBhZGRyZXNzIGlzIHNwZWNpYWw7IHNlZSBpbnR2ZWMuUy4KICAqIFdoZW4gaW50ZXJydXB0ZWQgYXQgX2NwdV9pZGxlX25hcCwgd2UgYnVtcCB0aGUgUEMgZm9yd2FyZCA4LCBhbmQKICAqIGFzIGEgcmVzdWx0IHJldHVybiB0byB0aGUgZnVuY3Rpb24gdGhhdCBjYWxsZWQgX2NwdV9pZGxlKCkuCiAgKi8KIFNURF9FTlRSWShfY3B1X2lkbGUpCi0JewotCSBsbmsgcjAKLQkgbW92ZWkgcjEsIEtFUk5FTF9QTAotCX0KLQl7Ci0JIGFkZGxpIHIwLCByMCwgX2NwdV9pZGxlX25hcCAtIC4KLQkgbXRzcHIgSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04sIHIxCi0JfQorCW1vdmVpIHIxLCAxCisJbXRzcHIgSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04sIHIxCiAJSVJRX0VOQUJMRShyMiwgcjMpICAgICAgICAgICAgIC8qIHVubWFzaywgYnV0IHN0aWxsIHdpdGggSUNTIHNldCAqLwotCW10c3ByIFNQUl9FWF9DT05URVhUX0tfMSwgcjEgICAvKiBLZXJuZWwgUEwsIElDUyBjbGVhciAqLwotCW10c3ByIFNQUl9FWF9DT05URVhUX0tfMCwgcjAKLQlpcmV0CisJbXRzcHIgSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04sIHplcm8KIAkuZ2xvYmFsIF9jcHVfaWRsZV9uYXAKIF9jcHVfaWRsZV9uYXA6CiAJbmFwCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvdGlsZS9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDkwZTdjNDQuLjFhMzliN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvaGVhZF8zMi5TCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl9CiAJRU5EUFJPQyhfc3RhcnQpCiAKLS5zZWN0aW9uICIuYnNzLnBhZ2VfYWxpZ25lZCIsInciCitfX1BBR0VfQUxJR05FRF9CU1MKIAkuYWxpZ24gUEFHRV9TSVpFCiBFTlRSWShlbXB0eV96ZXJvX3BhZ2UpCiAJLmZpbGwgUEFHRV9TSVpFLDEsMApAQCAtMTQ1LDEwICsxNDUsMTAgQEAKIAkuZW5kaWYKIAkud29yZCBIVl9QVEVfUEFHRSB8IEhWX1BURV9ESVJUWSB8IEhWX1BURV9QUkVTRU5UIHwgSFZfUFRFX0FDQ0VTU0VEIHwgXAogCSAgICAgIChIVl9QVEVfTU9ERV9DQUNIRV9OT19MMyA8PCBIVl9QVEVfSU5ERVhfTU9ERSkKLQkud29yZCAoXGJpdHMxKSB8IChIVl9DUEFfVE9fUEZOKFxjcGEpIDw8IEhWX1BURV9JTkRFWF9QRk4pCisJLndvcmQgKFxiaXRzMSkgfCAoSFZfQ1BBX1RPX1BGTihcY3BhKSA8PCAoSFZfUFRFX0lOREVYX1BGTiAtIDMyKSkKIAkuZW5kbQogCi0uc2VjdGlvbiAiLmRhdGEucGFnZV9hbGlnbmVkIiwid2EiCitfX1BBR0VfQUxJR05FRF9EQVRBCiAJLmFsaWduIFBBR0VfU0laRQogRU5UUlkoc3dhcHBlcl9wZ19kaXIpCiAJLyoKQEAgLTE1OCwxMiArMTU4LDE0IEBACiAJICovCiAJLnNldCBhZGRyLCAwCiAJLnJlcHQgKE1FTV9VU0VSX0lOVFJQVCAtIFBBR0VfT0ZGU0VUKSA+PiBQR0RJUl9TSElGVAotCVBURSBhZGRyICsgUEFHRV9PRkZTRVQsIGFkZHIsIEhWX1BURV9SRUFEQUJMRSB8IEhWX1BURV9XUklUQUJMRQorCVBURSBhZGRyICsgUEFHRV9PRkZTRVQsIGFkZHIsICgxIDw8IChIVl9QVEVfSU5ERVhfUkVBREFCTEUgLSAzMikpIHwgXAorCQkJCSAgICAgICgxIDw8IChIVl9QVEVfSU5ERVhfV1JJVEFCTEUgLSAzMikpCiAJLnNldCBhZGRyLCBhZGRyICsgUEdESVJfU0laRQogCS5lbmRyCiAKIAkvKiBUaGUgdHJ1ZSB0ZXh0IFZBcyBhcmUgbWFwcGVkIGFzIFZBID0gUEEgKyBNRU1fU1ZfSU5UUlBUICovCi0JUFRFIE1FTV9TVl9JTlRSUFQsIDAsIEhWX1BURV9SRUFEQUJMRSB8IEhWX1BURV9FWEVDVVRBQkxFCisJUFRFIE1FTV9TVl9JTlRSUFQsIDAsICgxIDw8IChIVl9QVEVfSU5ERVhfUkVBREFCTEUgLSAzMikpIHwgXAorCQkJICAgICAgKDEgPDwgKEhWX1BURV9JTkRFWF9FWEVDVVRBQkxFIC0gMzIpKQogCS5vcmcgc3dhcHBlcl9wZ19kaXIgKyBIVl9MMV9TSVpFCiAJRU5EKHN3YXBwZXJfcGdfZGlyKQogCkBAIC0xNzYsNiArMTc4LDcgQEAKIAlfX0lOSVREQVRBCiAJLmFsaWduIENISVBfTDJfTElORV9TSVpFKCkKIEVOVFJZKHN3YXBwZXJfcGdwcm90KQotCVBURQkwLCAwLCBIVl9QVEVfUkVBREFCTEUgfCBIVl9QVEVfV1JJVEFCTEUsIDEKKwlQVEUJMCwgMCwgKDEgPDwgKEhWX1BURV9JTkRFWF9SRUFEQUJMRSAtIDMyKSkgfCBcCisJCSAgICAgICgxIDw8IChIVl9QVEVfSU5ERVhfV1JJVEFCTEUgLSAzMikpLCAxCiAJLmFsaWduIENISVBfTDJfTElORV9TSVpFKCkKIAlFTkQoc3dhcHBlcl9wZ3Byb3QpCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL2ludHZlY18zMi5TIGIvYXJjaC90aWxlL2tlcm5lbC9pbnR2ZWNfMzIuUwppbmRleCA1ZWVkNGEwLi5mZmZjZmE2IDEwMDY0NAotLS0gYS9hcmNoL3RpbGUva2VybmVsL2ludHZlY18zMi5TCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvaW50dmVjXzMyLlMKQEAgLTMyLDEwICszMiw2IEBACiAjIGVycm9yICJObyBzdXBwb3J0IGZvciBrZXJuZWwgcHJlZW1wdGlvbiBjdXJyZW50bHkiCiAjZW5kaWYKIAotI2lmIElOVF9JTlRDVFJMX0sgPCAzMiB8fCBJTlRfSU5UQ1RSTF9LID49IDQ4Ci0jIGVycm9yIElOVF9JTlRDVFJMX0sgY29kZWQgdG8gc2V0IGhpZ2ggaW50ZXJydXB0IG1hc2sKLSNlbmRpZgotCiAjZGVmaW5lIFBUUkVHU19QVFIocmVnLCBwdHJlZykgYWRkbGkgcmVnLCBzcCwgQ19BQklfU0FWRV9BUkVBX1NJWkUgKyAocHRyZWcpCiAKICNkZWZpbmUgUFRSRUdTX09GRlNFVF9TWVNDQUxMIFBUUkVHU19PRkZTRVRfUkVHKFRSRUdfU1lTQ0FMTF9OUikKQEAgLTExOTksNDYgKzExOTUsNiBAQAogCVNURF9FTkRQUk9DKGludGVycnVwdF9yZXR1cm4pCiAKIAkvKgotCSAqIFRoaXMgaW50ZXJydXB0IHZhcmlhbnQgY2xlYXJzIHRoZSBJTlRfSU5UQ1RSTF9LIGludGVycnVwdCBtYXNrIGJpdAotCSAqIGJlZm9yZSByZXR1cm5pbmcsIHNvIHdlIGNhbiBwcm9wZXJseSBnZXQgbW9yZSBkb3duY2FsbHMuCi0JICovCi0JLnB1c2hzZWN0aW9uIC50ZXh0LmhhbmRsZV9pbnRlcnJ1cHRfZG93bmNhbGwsImF4IgotaGFuZGxlX2ludGVycnVwdF9kb3duY2FsbDoKLQlmaW5pc2hfaW50ZXJydXB0X3NhdmUgaGFuZGxlX2ludGVycnVwdF9kb3duY2FsbAotCWNoZWNrX3NpbmdsZV9zdGVwcGluZyBub3JtYWwsIC5MZGlzcGF0Y2hfZG93bmNhbGwKLS5MZGlzcGF0Y2hfZG93bmNhbGw6Ci0KLQkvKiBDbGVhciBJTlRDVFJMX0sgZnJvbSB0aGUgc2V0IG9mIGludGVycnVwdHMgd2UgZXZlciBlbmFibGUuICovCi0JR0VUX0lOVEVSUlVQVFNfRU5BQkxFRF9NQVNLX1BUUihyMzApCi0JewotCSBhZGRpICAgcjMwLCByMzAsIDQKLQkgbW92ZWkgIHIzMSwgSU5UX01BU0soSU5UX0lOVENUUkxfSykKLQl9Ci0JewotCSBsdyAgICAgcjIwLCByMzAKLQkgbm9yICAgIHIyMSwgcjMxLCB6ZXJvCi0JfQotCWFuZCAgICAgcjIwLCByMjAsIHIyMQotCXN3ICAgICAgcjMwLCByMjAKLQotCXsKLQkgamFsciAgIHIwCi0JIFBUUkVHU19QVFIocjAsIFBUUkVHU19PRkZTRVRfQkFTRSkKLQl9Ci0JRkVFREJBQ0tfUkVFTlRFUihoYW5kbGVfaW50ZXJydXB0X2Rvd25jYWxsKQotCi0JLyogQWxsb3cgSU5UQ1RSTF9LIHRvIGJlIGVuYWJsZWQgbmV4dCB0aW1lIHdlIGVuYWJsZSBpbnRlcnJ1cHRzLiAqLwotCWx3ICAgICAgcjIwLCByMzAKLQlvciAgICAgIHIyMCwgcjIwLCByMzEKLQlzdyAgICAgIHIzMCwgcjIwCi0KLQl7Ci0JIG1vdmVpICByMzAsIDAgICAvKiBub3QgYW4gTk1JICovCi0JIGogICAgICBpbnRlcnJ1cHRfcmV0dXJuCi0JfQotCVNURF9FTkRQUk9DKGhhbmRsZV9pbnRlcnJ1cHRfZG93bmNhbGwpCi0KLQkvKgogCSAqIFNvbWUgaW50ZXJydXB0cyBkb24ndCBjaGVjayBmb3Igc2luZ2xlIHN0ZXBwaW5nCiAJICovCiAJLnB1c2hzZWN0aW9uIC50ZXh0LmhhbmRsZV9pbnRlcnJ1cHRfbm9fc2luZ2xlX3N0ZXAsImF4IgpAQCAtMTYwMCw3ICsxNTU2LDEwIEBACiAJLmFsaWduIDY0CiAJLyogQWxpZ24gbXVjaCBsYXRlciBqdW1wIG9uIHRoZSBzdGFydCBvZiBhIGNhY2hlIGxpbmUuICovCiAjaWYgIUFUT01JQ19MT0NLU19GT1VORF9WSUFfVEFCTEUoKQotCW5vcDsgbm9wCisJbm9wCisjaWYgUEFHRV9TSVpFID49IDB4MTAwMDAKKwlub3AKKyNlbmRpZgogI2VuZGlmCiBFTlRSWShzeXNfY21weGNoZykKIApAQCAtMTYyOCw5ICsxNTg3LDEzIEBACiAJICogYWJvdXQgYWxpYXNpbmcgYW1vbmcgbXVsdGlwbGUgbWFwcGluZ3Mgb2YgdGhlIHNhbWUgcGh5c2ljYWwgcGFnZSwKIAkgKiBhbmQgd2UgaWdub3JlIHRoZSBsb3cgMyBiaXRzIHNvIHdlIGhhdmUgb25lIGxvY2sgdGhhdCBjb3ZlcnMKIAkgKiBib3RoIGEgY21weGNoZzY0KCkgYW5kIGEgY21weGNoZygpIG9uIGVpdGhlciBpdHMgbG93IG9yIGhpZ2ggd29yZC4KLQkgKiBOT1RFOiB0aGlzIGNvZGUgbXVzdCBtYXRjaCBfX2F0b21pY19oYXNoZWRfbG9jaygpIGluIGxpYi9hdG9taWMuYy4KKwkgKiBOT1RFOiB0aGlzIG11c3QgbWF0Y2ggX19hdG9taWNfaGFzaGVkX2xvY2soKSBpbiBsaWIvYXRvbWljXzMyLmMuCiAJICovCiAKKyNpZiAoUEFHRV9PRkZTRVQgJiAweGZmZmYpICE9IDAKKyMgZXJyb3IgQ29kZSBoZXJlIGFzc3VtZXMgUEFHRV9PRkZTRVQgY2FuIGJlIGxvYWRlZCB3aXRoIGp1c3QgaGkxNigpCisjZW5kaWYKKwogI2lmIEFUT01JQ19MT0NLU19GT1VORF9WSUFfVEFCTEUoKQogCXsKIAkgLyogQ2hlY2sgZm9yIHVuYWxpZ25lZCBpbnB1dC4gKi8KQEAgLTE3MjMsMTEgKzE2ODYsMTQgQEAKIAkgbHcJcjI2LCByMAogCX0KIAl7Ci0JIC8qIGF0b21pY19sb2NrcyBpcyBwYWdlIGFsaWduZWQgc28gdGhpcyBzdWZmaWNlcyB0byBnZXQgaXRzIGFkZHIuICovCi0JIGF1bGkJcjIxLCB6ZXJvLCBoaTE2KGF0b21pY19sb2NrcykKKwkgYXVsaQlyMjEsIHplcm8sIGhhMTYoYXRvbWljX2xvY2tzKQogCiAJIGJibnMgICByMjMsIC5MY21weGNoZ19iYWRhZGRyCiAJfQorI2lmIFBBR0VfU0laRSA8IDB4MTAwMDAKKwkvKiBhdG9taWNfbG9ja3MgaXMgcGFnZS1hbGlnbmVkIHNvIGZvciBiaWcgcGFnZXMgd2UgZG9uJ3QgbmVlZCB0aGlzLiAqLworCWFkZGxpICAgcjIxLCByMjEsIGxvMTYoYXRvbWljX2xvY2tzKQorI2VuZGlmCiAJewogCSAvKgogCSAgKiBJbnNlcnQgdGhlIGhhc2ggYml0cyBpbnRvIHRoZSBwYWdlLWFsaWduZWQgcG9pbnRlci4KQEAgLTE3NjIsNyArMTcyOCw3IEBACiAKIAkvKgogCSAqIFBlcmZvcm0gdGhlIGFjdHVhbCBjbXB4Y2hnIG9yIGF0b21pY191cGRhdGUuCi0JICogTm90ZSB0aGF0IF9fZnV0ZXhfbWFya191bmxvY2tlZCgpIGluIHVDbGliYyByZWxpZXMgb24KKwkgKiBOb3RlIHRoYXQgdGhlIHN5c3RlbSA8YXJjaC9hdG9taWMuaD4gaGVhZGVyIHJlbGllcyBvbgogCSAqIGF0b21pY191cGRhdGUoKSB0byBhbHdheXMgcGVyZm9ybSBhbiAibWYiLCBzbyBkb24ndCBtYWtlCiAJICogaXQgb3B0aW9uYWwgb3IgY29uZGl0aW9uYWwgd2l0aG91dCBtb2RpZnlpbmcgdGhhdCBjb2RlLgogCSAqLwpAQCAtMjAxNCwxNyArMTk4MCwxNyBAQAogI2VuZGlmCiAJaW50X2hhbmQgICAgIElOVF9JTlRDVFJMXzAsIElOVENUUkxfMCwgYmFkX2ludHIKIAlpbnRfaGFuZCAgICAgSU5UX01FU1NBR0VfUkNWX0RXTkNMLCBNRVNTQUdFX1JDVl9EV05DTCwgXAotCQkgICAgIGh2X21lc3NhZ2VfaW50ciwgaGFuZGxlX2ludGVycnVwdF9kb3duY2FsbAorCQkgICAgIGh2X21lc3NhZ2VfaW50cgogCWludF9oYW5kICAgICBJTlRfREVWX0lOVFJfRFdOQ0wsIERFVl9JTlRSX0RXTkNMLCBcCi0JCSAgICAgdGlsZV9kZXZfaW50ciwgaGFuZGxlX2ludGVycnVwdF9kb3duY2FsbAorCQkgICAgIHRpbGVfZGV2X2ludHIKIAlpbnRfaGFuZCAgICAgSU5UX0lfQVNJRCwgSV9BU0lELCBiYWRfaW50cgogCWludF9oYW5kICAgICBJTlRfRF9BU0lELCBEX0FTSUQsIGJhZF9pbnRyCiAJaW50X2hhbmQgICAgIElOVF9ETUFUTEJfTUlTU19EV05DTCwgRE1BVExCX01JU1NfRFdOQ0wsIFwKLQkJICAgICBkb19wYWdlX2ZhdWx0LCBoYW5kbGVfaW50ZXJydXB0X2Rvd25jYWxsCisJCSAgICAgZG9fcGFnZV9mYXVsdAogCWludF9oYW5kICAgICBJTlRfU05JVExCX01JU1NfRFdOQ0wsIFNOSVRMQl9NSVNTX0RXTkNMLCBcCi0JCSAgICAgZG9fcGFnZV9mYXVsdCwgaGFuZGxlX2ludGVycnVwdF9kb3duY2FsbAorCQkgICAgIGRvX3BhZ2VfZmF1bHQKIAlpbnRfaGFuZCAgICAgSU5UX0RNQVRMQl9BQ0NFU1NfRFdOQ0wsIERNQVRMQl9BQ0NFU1NfRFdOQ0wsIFwKLQkJICAgICBkb19wYWdlX2ZhdWx0LCBoYW5kbGVfaW50ZXJydXB0X2Rvd25jYWxsCisJCSAgICAgZG9fcGFnZV9mYXVsdAogCWludF9oYW5kICAgICBJTlRfU05fQ1BMLCBTTl9DUEwsIGJhZF9pbnRyCiAJaW50X2hhbmQgICAgIElOVF9ET1VCTEVfRkFVTFQsIERPVUJMRV9GQVVMVCwgZG9fdHJhcAogI2lmIENISVBfSEFTX0FVWF9QRVJGX0NPVU5URVJTKCkKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvaXJxLmMgYi9hcmNoL3RpbGUva2VybmVsL2lycS5jCmluZGV4IDEyODgwNWUuLjBiYWE3NTggMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9pcnEuYwpAQCAtMTc2LDQzICsxNzYsNDMgQEAKIEVYUE9SVF9TWU1CT0woZGlzYWJsZV9wZXJjcHVfaXJxKTsKIAogLyogTWFzayBhbiBpbnRlcnJ1cHQuICovCi1zdGF0aWMgdm9pZCB0aWxlX2lycV9jaGlwX21hc2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHRpbGVfaXJxX2NoaXBfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JbWFza19pcnFzKDFVTCA8PCBpcnEpOworCW1hc2tfaXJxcygxVUwgPDwgZC0+aXJxKTsKIH0KIAogLyogVW5tYXNrIGFuIGludGVycnVwdC4gKi8KLXN0YXRpYyB2b2lkIHRpbGVfaXJxX2NoaXBfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB0aWxlX2lycV9jaGlwX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5tYXNrX2lycXMoMVVMIDw8IGlycSk7CisJdW5tYXNrX2lycXMoMVVMIDw8IGQtPmlycSk7CiB9CiAKIC8qCiAgKiBDbGVhciBhbiBpbnRlcnJ1cHQgYmVmb3JlIHByb2Nlc3NpbmcgaXQgc28gdGhhdCBhbnkgbmV3IGFzc2VydGlvbnMKICAqIHdpbGwgdHJpZ2dlciBhbm90aGVyIGlycS4KICAqLwotc3RhdGljIHZvaWQgdGlsZV9pcnFfY2hpcF9hY2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHRpbGVfaXJxX2NoaXBfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpZiAoKHVuc2lnbmVkIGxvbmcpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKSAhPSBJU19IV19DTEVBUkVEKQotCQljbGVhcl9pcnFzKDFVTCA8PCBpcnEpOworCWlmICgodW5zaWduZWQgbG9uZylpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKSAhPSBJU19IV19DTEVBUkVEKQorCQljbGVhcl9pcnFzKDFVTCA8PCBkLT5pcnEpOwogfQogCiAvKgogICogRm9yIHBlci1jcHUgaW50ZXJydXB0cywgd2UgbmVlZCB0byBhdm9pZCB1bm1hc2tpbmcgYW55IGludGVycnVwdHMKICAqIHRoYXQgd2UgZGlzYWJsZWQgdmlhIGRpc2FibGVfcGVyY3B1X2lycSgpLgogICovCi1zdGF0aWMgdm9pZCB0aWxlX2lycV9jaGlwX2VvaSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgdGlsZV9pcnFfY2hpcF9lb2koc3RydWN0IGlycV9kYXRhICpkKQogewotCWlmICghKF9fZ2V0X2NwdV92YXIoaXJxX2Rpc2FibGVfbWFzaykgJiAoMVVMIDw8IGlycSkpKQotCQl1bm1hc2tfaXJxcygxVUwgPDwgaXJxKTsKKwlpZiAoIShfX2dldF9jcHVfdmFyKGlycV9kaXNhYmxlX21hc2spICYgKDFVTCA8PCBkLT5pcnEpKSkKKwkJdW5tYXNrX2lycXMoMVVMIDw8IGQtPmlycSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdGlsZV9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJ0aWxlX2lycV9jaGlwIiwKLQkuYWNrID0gdGlsZV9pcnFfY2hpcF9hY2ssCi0JLmVvaSA9IHRpbGVfaXJxX2NoaXBfZW9pLAotCS5tYXNrID0gdGlsZV9pcnFfY2hpcF9tYXNrLAotCS51bm1hc2sgPSB0aWxlX2lycV9jaGlwX3VubWFzaywKKwkuaXJxX2FjayA9IHRpbGVfaXJxX2NoaXBfYWNrLAorCS5pcnFfZW9pID0gdGlsZV9pcnFfY2hpcF9lb2ksCisJLmlycV9tYXNrID0gdGlsZV9pcnFfY2hpcF9tYXNrLAorCS5pcnFfdW5tYXNrID0gdGlsZV9pcnFfY2hpcF91bm1hc2ssCiB9OwogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQpAQCAtMjc3LDggKzI3NywxMCBAQAogCX0KIAogCWlmIChpIDwgTlJfSVJRUykgewotCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKKworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCQlpZiAoIWFjdGlvbikKIAkJCWdvdG8gc2tpcDsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKQEAgLTI4OCw3ICsyOTAsNyBAQAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGdldF9pcnFfZGVzY19jaGlwKGRlc2MpLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpAQCAtMjk2LDcgKzI5OCw3IEBACiAKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiBza2lwOgotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC90aWxlL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggMGQ4YjllOS4uZTAwZDcxNyAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTI0MCw4ICsyNDAsMTEgQEAKIAlwdGUgPSBodl9wdGUoX1BBR0VfS0VSTkVMIHwgX1BBR0VfSFVHRV9QQUdFKTsKIAlwdGUgPSBodl9wdGVfc2V0X21vZGUocHRlLCBIVl9QVEVfTU9ERV9DQUNIRV9OT19MMyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGdkX2luZGV4KFBBR0VfT0ZGU0VUKTsgaSsrKQotCQlwZ3RhYmxlW2ldID0gcGZuX3B0ZShpIDw8IChIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpLCBwdGUpOworCWZvciAoaSA9IDA7IGkgPCBwZ2RfaW5kZXgoUEFHRV9PRkZTRVQpOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBwZm4gPSBpIDw8IChIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpOworCQlpZiAocGZuX3ZhbGlkKHBmbikpCisJCQlfX3NldF9wdGUoJnBndGFibGVbaV0sIHBmbl9wdGUocGZuLCBwdGUpKTsKKwl9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3RpbGUva2VybmVsL3BjaS1kbWEuYwppbmRleCA1YWQ1ZTEzLi42NTg3NTJiMiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9wY2ktZG1hLmMKQEAgLTg2LDYgKzg2LDIxIEBACiAgKiBjYW4gY291bnQgb24gbm90aGluZyBoYXZpbmcgYmVlbiB0b3VjaGVkLgogICovCiAKKy8qIEZsdXNoIGEgUEEgcmFuZ2UgZnJvbSBjYWNoZSBwYWdlIGJ5IHBhZ2UuICovCitzdGF0aWMgdm9pZCBfX2RtYV9tYXBfcGFfcmFuZ2UoZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShQRk5fRE9XTihkbWFfYWRkcikpOworCXNpemVfdCBieXRlc2xlZnQgPSBQQUdFX1NJWkUgLSAoZG1hX2FkZHIgJiAoUEFHRV9TSVpFIC0gMSkpOworCisJd2hpbGUgKChzc2l6ZV90KXNpemUgPiAwKSB7CisJCS8qIEZsdXNoIHRoZSBwYWdlLiAqLworCQlob21lY2FjaGVfZmx1c2hfY2FjaGUocGFnZSsrLCAwKTsKKworCQkvKiBGaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gY29udGludWUgb24gdGhlIG5leHQgcGFnZS4gKi8KKwkJc2l6ZSAtPSBieXRlc2xlZnQ7CisJCWJ5dGVzbGVmdCA9IFBBR0VfU0laRTsKKwl9Cit9CiAKIC8qCiAgKiBkbWFfbWFwX3NpbmdsZSBjYW4gYmUgcGFzc2VkIGFueSBtZW1vcnkgYWRkcmVzcywgYW5kIHRoZXJlIGFwcGVhcgpAQCAtOTcsMjYgKzExMiwxMiBAQAogZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCiAJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlkbWFfYWRkcl90IGRtYV9hZGRyOwotCWludCB0aGlzcGFnZTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyID0gX19wYShwdHIpOwogCiAJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwogCVdBUk5fT04oc2l6ZSA9PSAwKTsKIAotCWRtYV9hZGRyID0gX19wYShwdHIpOwotCi0JLyogV2UgbWlnaHQgaGF2ZSBiZWVuIGhhbmRlZCBhIGJ1ZmZlciB0aGF0IHdyYXBzIGEgcGFnZSBib3VuZGFyeSAqLwotCXdoaWxlICgoaW50KXNpemUgPiAwKSB7Ci0JCS8qIFRoZSBhbW91bnQgdG8gZmx1c2ggdGhhdCdzIG9uIHRoaXMgcGFnZSAqLwotCQl0aGlzcGFnZSA9IFBBR0VfU0laRSAtICgodW5zaWduZWQgbG9uZylwdHIgJiAoUEFHRV9TSVpFIC0gMSkpOwotCQl0aGlzcGFnZSA9IG1pbigoaW50KXRoaXNwYWdlLCAoaW50KXNpemUpOwotCQkvKiBJcyB0aGlzIHZhbGlkIGZvciBhbnkgcGFnZSB3ZSBjb3VsZCBiZSBoYW5kZWQ/ICovCi0JCXBhZ2UgPSBwZm5fdG9fcGFnZShrYWRkcl90b19wZm4ocHRyKSk7Ci0JCWhvbWVjYWNoZV9mbHVzaF9jYWNoZShwYWdlLCAwKTsKLQkJcHRyICs9IHRoaXNwYWdlOwotCQlzaXplIC09IHRoaXNwYWdlOwotCX0KKwlfX2RtYV9tYXBfcGFfcmFuZ2UoZG1hX2FkZHIsIHNpemUpOwogCiAJcmV0dXJuIGRtYV9hZGRyOwogfQpAQCAtMTQwLDEwICsxNDEsOCBAQAogCVdBUk5fT04obmVudHMgPT0gMCB8fCBzZ2xpc3QtPmxlbmd0aCA9PSAwKTsKIAogCWZvcl9lYWNoX3NnKHNnbGlzdCwgc2csIG5lbnRzLCBpKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwogCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKTsKLQkJcGFnZSA9IHBmbl90b19wYWdlKHNnLT5kbWFfYWRkcmVzcyA+PiBQQUdFX1NISUZUKTsKLQkJaG9tZWNhY2hlX2ZsdXNoX2NhY2hlKHBhZ2UsIDApOworCQlfX2RtYV9tYXBfcGFfcmFuZ2Uoc2ctPmRtYV9hZGRyZXNzLCBzZy0+bGVuZ3RoKTsKIAl9CiAKIAlyZXR1cm4gbmVudHM7CkBAIC0xNjMsNiArMTYyLDcgQEAKIHsKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CiAKKwlCVUdfT04ob2Zmc2V0ICsgc2l6ZSA+IFBBR0VfU0laRSk7CiAJaG9tZWNhY2hlX2ZsdXNoX2NhY2hlKHBhZ2UsIDApOwogCiAJcmV0dXJuIHBhZ2VfdG9fcGEocGFnZSkgKyBvZmZzZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvdGlsZS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGU5MGViNTMuLmQwMDY1MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAl9CiB9CiAKLXN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mb19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IG5vZGUpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJZ2ZwX3QgZmxhZ3MgPSBHRlBfS0VSTkVMOwpAQCAtMTE4LDcgKzExOCw3IEBACiAJZmxhZ3MgfD0gX19HRlBfWkVSTzsKICNlbmRpZgogCi0JcGFnZSA9IGFsbG9jX3BhZ2VzKGZsYWdzLCBUSFJFQURfU0laRV9PUkRFUik7CisJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MsIFRIUkVBRF9TSVpFX09SREVSKTsKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJa2ZyZWUoc3RlcF9zdGF0ZSk7CiAJfQogCi0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWluZm8pOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpaW5mbywgVEhSRUFEX1NJWkVfT1JERVIpOwogfQogCiBzdGF0aWMgdm9pZCBzYXZlX2FyY2hfc3RhdGUoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpOwpAQCAtNTc0LDYgKzU3NCw4IEBACiAJCWdvdG8gb3V0OwogCWVycm9yID0gZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKIAlwdXRuYW1lKGZpbGVuYW1lKTsKKwlpZiAoZXJyb3IgPT0gMCkKKwkJc2luZ2xlX3N0ZXBfZXhlY3ZlKCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNTkzLDYgKzU5NSw4IEBACiAJCWdvdG8gb3V0OwogCWVycm9yID0gY29tcGF0X2RvX2V4ZWN2ZShmaWxlbmFtZSwgYXJndiwgZW52cCwgcmVncyk7CiAJcHV0bmFtZShmaWxlbmFtZSk7CisJaWYgKGVycm9yID09IDApCisJCXNpbmdsZV9zdGVwX2V4ZWN2ZSgpOwogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvdGlsZS9rZXJuZWwvc2V0dXAuYwppbmRleCBmMTg1NzM2Li4zNjk2YjE4IDEwMDY0NAotLS0gYS9hcmNoL3RpbGUva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9zZXR1cC5jCkBAIC01OSw2ICs1OSw4IEBACiB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZV9wZXJjcHVfcGZuW01BWF9OVU1OT0RFU107CiB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZV9mcmVlX3BmbltNQVhfTlVNTk9ERVNdOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG5vZGVfcGVyY3B1W01BWF9OVU1OT0RFU107CisKICNpZmRlZiBDT05GSUdfSElHSE1FTQogLyogUGFnZSBmcmFtZSBpbmRleCBvZiBlbmQgb2YgbG93bWVtIG9uIGVhY2ggY29udHJvbGxlci4gKi8KIHVuc2lnbmVkIGxvbmcgX19jcHVpbml0ZGF0YSBub2RlX2xvd21lbV9lbmRfcGZuW01BWF9OVU1OT0RFU107CkBAIC01NTQsNyArNTU2LDYgQEAKIAkJcmVzZXJ2ZV9ib290bWVtKGNyYXNoa19yZXMuc3RhcnQsCiAJCQljcmFzaGtfcmVzLmVuZCAtIGNyYXNoa19yZXMuc3RhcnQgKyAxLCAwKTsKICNlbmRpZgotCiB9CiAKIHZvaWQgKl9faW5pdCBhbGxvY19yZW1hcChpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNpemUpCkBAIC01NjgsMTEgKzU2OSwxMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwZXJjcHVfc2l6ZSh2b2lkKQogewotCWludCBzaXplID0gQUxJR04oX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCwgUEFHRV9TSVpFKTsKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCWlmIChzaXplIDwgUEVSQ1BVX0VOT1VHSF9ST09NKQotCQlzaXplID0gUEVSQ1BVX0VOT1VHSF9ST09NOwotI2VuZGlmCisJaW50IHNpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0OworCXNpemUgKz0gUEVSQ1BVX01PRFVMRV9SRVNFUlZFOworCXNpemUgKz0gUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0laRTsKKwlpZiAoc2l6ZSA8IFBDUFVfTUlOX1VOSVRfU0laRSkKKwkJc2l6ZSA9IFBDUFVfTUlOX1VOSVRfU0laRTsKKwlzaXplID0gcm91bmR1cChzaXplLCBQQUdFX1NJWkUpOworCiAJLyogSW4gc2V2ZXJhbCBwbGFjZXMgd2UgYXNzdW1lIHRoZSBwZXItY3B1IGRhdGEgZml0cyBvbiBhIGh1Z2UgcGFnZS4gKi8KIAlCVUdfT04oa2RhdGFfaHVnZSAmJiBzaXplID4gSFBBR0VfU0laRSk7CiAJcmV0dXJuIHNpemU7CkBAIC01ODksNyArNTkyLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCB6b25lX3NpemVzX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHsgMCB9OwotCXVuc2lnbmVkIGxvbmcgbm9kZV9wZXJjcHVbTUFYX05VTU5PREVTXSA9IHsgMCB9OwogCWludCBzaXplID0gcGVyY3B1X3NpemUoKTsKIAlpbnQgbnVtX2NwdXMgPSBzbXBfaGVpZ2h0ICogc21wX3dpZHRoOwogCWludCBpOwpAQCAtNjc0LDcgKzY3Niw3IEBACiAJCU5PREVfREFUQShpKS0+YmRhdGEgPSBOT0RFX0RBVEEoMCktPmJkYXRhOwogCiAJCWZyZWVfYXJlYV9pbml0X25vZGUoaSwgem9uZXNfc2l6ZSwgc3RhcnQsIE5VTEwpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiICBETUEgem9uZTogJWxkIHBlci1jcHUgcGFnZXNcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICIgIE5vcm1hbCB6b25lOiAlbGQgcGVyLWNwdSBwYWdlc1xuIiwKIAkJICAgICAgIFBGTl9VUChub2RlX3BlcmNwdVtpXSkpOwogCiAJCS8qIFRyYWNrIHRoZSB0eXBlIG9mIG1lbW9yeSBvbiBlYWNoIG5vZGUgKi8KQEAgLTEzMTIsNiArMTMxNCw4IEBACiAKIAlCVUdfT04oc2l6ZSAlIFBBR0VfU0laRSAhPSAwKTsKIAlwZm5fb2Zmc2V0W25pZF0gKz0gc2l6ZSAvIFBBR0VfU0laRTsKKwlCVUdfT04obm9kZV9wZXJjcHVbbmlkXSA8IHNpemUpOworCW5vZGVfcGVyY3B1W25pZF0gLT0gc2l6ZTsKIAlpZiAocGVyY3B1X3BmbltjcHVdID09IDApCiAJCXBlcmNwdV9wZm5bY3B1XSA9IHBmbjsKIAlyZXR1cm4gcGZuX3RvX2thZGRyKHBmbik7CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3NpbmdsZV9zdGVwLmMgYi9hcmNoL3RpbGUva2VybmVsL3NpbmdsZV9zdGVwLmMKaW5kZXggMWViM2IzOS4uODRhNzI5ZSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9zaW5nbGVfc3RlcC5jCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvc2luZ2xlX3N0ZXAuYwpAQCAtNTYsNyArNTYsNyBAQAogCU1FTU9QX1NUT1JFX1BPU1RJTkNSCiB9OwogCi1zdGF0aWMgaW5saW5lIHRpbGVfYnVuZGxlX2JpdHMgc2V0X0JyT2ZmX1gxKHRpbGVfYnVuZGxlX2JpdHMgbiwgaW50MzJfdCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHRpbGVfYnVuZGxlX2JpdHMgc2V0X0JyT2ZmX1gxKHRpbGVfYnVuZGxlX2JpdHMgbiwgczMyIG9mZnNldCkKIHsKIAl0aWxlX2J1bmRsZV9iaXRzIHJlc3VsdDsKIApAQCAtMjU0LDYgKzI1NCwxOCBAQAogCXJldHVybiBidW5kbGU7CiB9CiAKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgZXhlY3ZlKCkgaGFzIHN0YXJ0ZWQgdGhlIG5ldyBpbWFnZS4gIFRoaXMgYWxsb3dzIHVzCisgKiB0byByZXNldCB0aGUgaW5mbyBzdGF0ZS4gIE5vdGUgdGhhdCB0aGUgdGhlIG1tYXAnZWQgbWVtb3J5LCBpZiB0aGVyZQorICogd2FzIGFueSwgaGFzIGFscmVhZHkgYmVlbiB1bm1hcHBlZCBieSB0aGUgZXhlYy4KKyAqLwordm9pZCBzaW5nbGVfc3RlcF9leGVjdmUodm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCWtmcmVlKHRpLT5zdGVwX3N0YXRlKTsKKwl0aS0+c3RlcF9zdGF0ZSA9IE5VTEw7Cit9CisKIC8qKgogICogc2luZ2xlX3N0ZXBfb25jZSgpIC0gZW50cnkgcG9pbnQgd2hlbiBzaW5nbGUgc3RlcHBpbmcgaGFzIGJlZW4gdHJpZ2dlcmVkLgogICogQHJlZ3M6IFRoZSBtYWNoaW5lIHJlZ2lzdGVyIHN0YXRlCkBAIC0zNzMsNyArMzg1LDcgQEAKIAkJLyogYnJhbmNoZXMgKi8KIAkJY2FzZSBCUkFOQ0hfT1BDT0RFX1gxOgogCQl7Ci0JCQlpbnQzMl90IG9mZnNldCA9IHNpZ25FeHRlbmQxNyhnZXRfQnJPZmZfWDEoYnVuZGxlKSk7CisJCQlzMzIgb2Zmc2V0ID0gc2lnbkV4dGVuZDE3KGdldF9Cck9mZl9YMShidW5kbGUpKTsKIAogCQkJLyoKIAkJCSAqIEZvciBicmFuY2hlcywgd2UgdXNlIGEgcmV3cml0aW5nIHRyaWNrIHRvIGxldCB0aGUKQEAgLTczMSw0ICs3NDMsOSBAQAogCV9faW5zbl9tdHNwcihTUFJfU0lOR0xFX1NURVBfRU5fS19LLCAxIDw8IFVTRVJfUEwpOwogfQogCit2b2lkIHNpbmdsZV9zdGVwX2V4ZWN2ZSh2b2lkKQoreworCS8qIE5vdGhpbmcgKi8KK30KKwogI2VuZGlmIC8qICFfX3RpbGVneF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3NtcC5jIGIvYXJjaC90aWxlL2tlcm5lbC9zbXAuYwppbmRleCA5NTc1YjM3Li5hNDI5MzEwIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvc21wLmMKQEAgLTM2LDYgKzM2LDIyIEBACiAvKiBTZXQgYnkgc21wX3NlbmRfc3RvcCgpIHRvIGF2b2lkIHJlY3Vyc2l2ZSBwYW5pY3MuICovCiBzdGF0aWMgaW50IHN0b3BwaW5nX2NwdXM7CiAKK3N0YXRpYyB2b2lkIF9fc2VuZF9JUElfbWFueShIVl9SZWNpcGllbnQgKnJlY2lwLCBpbnQgbnJlY2lwLCBpbnQgdGFnKQoreworCWludCBzZW50ID0gMDsKKwl3aGlsZSAoc2VudCA8IG5yZWNpcCkgeworCQlpbnQgcmMgPSBodl9zZW5kX21lc3NhZ2UocmVjaXAsIG5yZWNpcCwKKwkJCQkJIChIVl9WaXJ0QWRkcikmdGFnLCBzaXplb2YodGFnKSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWlmICghc3RvcHBpbmdfY3B1cykgIC8qIGF2b2lkIHJlY3Vyc2l2ZSBwYW5pYyAqLworCQkJCXBhbmljKCJodl9zZW5kX21lc3NhZ2UgcmV0dXJuZWQgJWQiLCByYyk7CisJCQlicmVhazsKKwkJfQorCQlXQVJOX09OQ0UocmMgPT0gMCwgImh2X3NlbmRfbWVzc2FnZSgpIHJldHVybmVkIHplcm9cbiIpOworCQlzZW50ICs9IHJjOworCX0KK30KKwogdm9pZCBzZW5kX0lQSV9zaW5nbGUoaW50IGNwdSwgaW50IHRhZykKIHsKIAlIVl9SZWNpcGllbnQgcmVjaXAgPSB7CkBAIC00MywxNCArNTksMTMgQEAKIAkJLnggPSBjcHUgJSBzbXBfd2lkdGgsCiAJCS5zdGF0ZSA9IEhWX1RPX0JFX1NFTlQKIAl9OwotCWludCByYyA9IGh2X3NlbmRfbWVzc2FnZSgmcmVjaXAsIDEsIChIVl9WaXJ0QWRkcikmdGFnLCBzaXplb2YodGFnKSk7Ci0JQlVHX09OKHJjIDw9IDApOworCV9fc2VuZF9JUElfbWFueSgmcmVjaXAsIDEsIHRhZyk7CiB9CiAKIHZvaWQgc2VuZF9JUElfbWFueShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHRhZykKIHsKIAlIVl9SZWNpcGllbnQgcmVjaXBbTlJfQ1BVU107Ci0JaW50IGNwdSwgc2VudDsKKwlpbnQgY3B1OwogCWludCBucmVjaXAgPSAwOwogCWludCBteV9jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykgewpAQCAtNjEsMTcgKzc2LDcgQEAKIAkJci0+eCA9IGNwdSAlIHNtcF93aWR0aDsKIAkJci0+c3RhdGUgPSBIVl9UT19CRV9TRU5UOwogCX0KLQlzZW50ID0gMDsKLQl3aGlsZSAoc2VudCA8IG5yZWNpcCkgewotCQlpbnQgcmMgPSBodl9zZW5kX21lc3NhZ2UocmVjaXAsIG5yZWNpcCwKLQkJCQkJIChIVl9WaXJ0QWRkcikmdGFnLCBzaXplb2YodGFnKSk7Ci0JCWlmIChyYyA8PSAwKSB7Ci0JCQlpZiAoIXN0b3BwaW5nX2NwdXMpICAvKiBhdm9pZCByZWN1cnNpdmUgcGFuaWMgKi8KLQkJCQlwYW5pYygiaHZfc2VuZF9tZXNzYWdlIHJldHVybmVkICVkIiwgcmMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2VudCArPSByYzsKLQl9CisJX19zZW5kX0lQSV9tYW55KHJlY2lwLCBucmVjaXAsIHRhZyk7CiB9CiAKIHZvaWQgc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdGFnKQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9zdGFjay5jIGIvYXJjaC90aWxlL2tlcm5lbC9zdGFjay5jCmluZGV4IDBkNTQxMDZiLi5kZDgxNzEzIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUva2VybmVsL3N0YWNrLmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9zdGFjay5jCkBAIC00NCwxMyArNDQsNiBAQAogCXJldHVybiBzcCA+PSBrc3RhY2tfYmFzZSAmJiBzcCA8IGtzdGFja19iYXNlICsgVEhSRUFEX1NJWkU7CiB9CiAKLS8qIElzIGFkZHJlc3MgaW4gdGhlIHNwZWNpZmllZCBrZXJuZWwgY29kZT8gKi8KLXN0YXRpYyBpbnQgaW5fa2VybmVsX3RleHQoVmlydHVhbEFkZHJlc3MgYWRkcmVzcykKLXsKLQlyZXR1cm4gKGFkZHJlc3MgPj0gTUVNX1NWX0lOVFJQVCAmJgotCQlhZGRyZXNzIDwgTUVNX1NWX0lOVFJQVCArIEhQQUdFX1NJWkUpOwotfQotCiAvKiBJcyBhZGRyZXNzIHZhbGlkIGZvciByZWFkaW5nPyAqLwogc3RhdGljIGludCB2YWxpZF9hZGRyZXNzKHN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3IgKmtidCwgVmlydHVhbEFkZHJlc3MgYWRkcmVzcykKIHsKQEAgLTYzLDYgKzU2LDIzIEBACiAJaWYgKGwxX3BndGFibGUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CS8qIGNhbid0IHJlYWQgdXNlciBzcGFjZSBpbiBvdGhlciB0YXNrcyAqLwogCisjaWZkZWYgQ09ORklHXzY0QklUCisJLyogRmluZCB0aGUgcmVhbCBsMV9wZ3RhYmxlIGJ5IGxvb2tpbmcgaW4gdGhlIGwwX3BndGFibGUuICovCisJcHRlID0gbDFfcGd0YWJsZVtIVl9MMF9JTkRFWChhZGRyZXNzKV07CisJaWYgKCFodl9wdGVfZ2V0X3ByZXNlbnQocHRlKSkKKwkJcmV0dXJuIDA7CisJcGZuID0gaHZfcHRlX2dldF9wZm4ocHRlKTsKKwlpZiAocHRlX2h1Z2UocHRlKSkgeworCQlpZiAoIXBmbl92YWxpZChwZm4pKSB7CisJCQlwcl9lcnIoIkwwIGh1Z2UgcGFnZSBoYXMgYmFkIHBmbiAlI2x4XG4iLCBwZm4pOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIGh2X3B0ZV9nZXRfcHJlc2VudChwdGUpICYmIGh2X3B0ZV9nZXRfcmVhZGFibGUocHRlKTsKKwl9CisJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisJQlVHX09OKFBhZ2VIaWdoTWVtKHBhZ2UpKTsgIC8qIE5vIEhJR0hNRU0gb24gNjQtYml0LiAqLworCWwxX3BndGFibGUgPSAoSFZfUFRFICopcGZuX3RvX2thZGRyKHBmbik7CisjZW5kaWYKIAlwdGUgPSBsMV9wZ3RhYmxlW0hWX0wxX0lOREVYKGFkZHJlc3MpXTsKIAlpZiAoIWh2X3B0ZV9nZXRfcHJlc2VudChwdGUpKQogCQlyZXR1cm4gMDsKQEAgLTkyLDcgKzEwMiw3IEBACiB7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yICprYnQgPSAoc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciAqKXZrYnQ7Ci0JaWYgKGluX2tlcm5lbF90ZXh0KGFkZHJlc3MpKSB7CisJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyZXNzKSkgewogCQkvKiBPSyB0byByZWFkIGtlcm5lbCBjb2RlLiAqLwogCX0gZWxzZSBpZiAoYWRkcmVzcyA+PSBQQUdFX09GRlNFVCkgewogCQkvKiBXZSBvbmx5IHRvbGVyYXRlIGtlcm5lbC1zcGFjZSByZWFkcyBvZiB0aGlzIHRhc2sncyBzdGFjayAqLwpAQCAtMTMyLDcgKzE0Miw3IEBACiAJCX0KIAl9CiAJaWYgKEVYMV9QTChwLT5leDEpID09IEtFUk5FTF9QTCAmJgotCSAgICBpbl9rZXJuZWxfdGV4dChwLT5wYykgJiYKKwkgICAgX19rZXJuZWxfdGV4dF9hZGRyZXNzKHAtPnBjKSAmJgogCSAgICBpbl9rZXJuZWxfc3RhY2soa2J0LCBwLT5zcCkgJiYKIAkgICAgcC0+c3AgPj0gc3ApIHsKIAkJaWYgKGtidC0+dmVyYm9zZSkKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvdGltZS5jIGIvYXJjaC90aWxlL2tlcm5lbC90aW1lLmMKaW5kZXggZjJlMTU2ZS4uNDlhNjA1YiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC90aW1lLmMKQEAgLTIyNCwzICsyMjQsMTMgQEAKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KKworLyoKKyAqIFVzZSB0aGUgdGlsZSB0aW1lciB0byBjb252ZXJ0IG5zZWNzIHRvIGNvcmUgY2xvY2sgY3ljbGVzLCByZWx5aW5nCisgKiBvbiBpdCBoYXZpbmcgdGhlIHNhbWUgZnJlcXVlbmN5IGFzIFNQUl9DWUNMRS4KKyAqLworY3ljbGVzX3QgbnMyY3ljbGVzKHVuc2lnbmVkIGxvbmcgbnNlY3MpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2ID0gJl9fZ2V0X2NwdV92YXIodGlsZV90aW1lcik7CisJcmV0dXJuICgodTY0KW5zZWNzICogZGV2LT5tdWx0KSA+PiBkZXYtPnNoaWZ0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC90aWxlL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGM2Y2UzNzguLjM4ZjY0ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3RpbGUva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTU5LDEwICs1OSw3IEBACiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIFZNTElOVVhfU1lNQk9MKF9zaW5pdGRhdGEpID0gLjsKLSAgLmluaXQucGFnZSA6IEFUIChBRERSKC5pbml0LnBhZ2UpIC0gTE9BRF9PRkZTRVQpIHsKLSAgICAqKC5pbml0LnBhZ2UpCi0gIH0gOmRhdGEgPTAKLSAgSU5JVF9EQVRBX1NFQ1RJT04oMTYpCisgIElOSVRfREFUQV9TRUNUSU9OKDE2KSA6ZGF0YSA9MAogICBQRVJDUFUoTDJfQ0FDSEVfQllURVMsIFBBR0VfU0laRSkKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIFZNTElOVVhfU1lNQk9MKF9laW5pdGRhdGEpID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvTWFrZWZpbGUgYi9hcmNoL3RpbGUvbGliL01ha2VmaWxlCmluZGV4IDkzMTIyZDUuLjBjMjYwODYgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC90aWxlL2xpYi9NYWtlZmlsZQpAQCAtMiw5ICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIFRJTEUtc3BlY2lmaWMgbGlicmFyeSBmaWxlcy4uCiAjCiAKLWxpYi15ID0gY2FjaGVmbHVzaC5vIGNoZWNrc3VtLm8gY3B1bWFzay5vIGRlbGF5Lm8gXAotCW1iX2luY29oZXJlbnQubyB1YWNjZXNzLm8gbWVtbW92ZS5vIFwKLQltZW1jcHlfJChCSVRTKS5vIG1lbWNocl8kKEJJVFMpLm8gbWVtc2V0XyQoQklUUykubyBcCitsaWIteSA9IGNhY2hlZmx1c2gubyBjaGVja3N1bS5vIGNwdW1hc2subyBkZWxheS5vIHVhY2Nlc3MubyBcCisJbWVtbW92ZS5vIG1lbWNweV8kKEJJVFMpLm8gbWVtY2hyXyQoQklUUykubyBtZW1zZXRfJChCSVRTKS5vIFwKIAlzdHJjaHJfJChCSVRTKS5vIHN0cmxlbl8kKEJJVFMpLm8KIAogaWZlcSAoJChDT05GSUdfVElMRUdYKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2xpYi9hdG9taWNfMzIuYyBiL2FyY2gvdGlsZS9saWIvYXRvbWljXzMyLmMKaW5kZXggN2E1Y2M3MC4uNDY1NzAyMSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2xpYi9hdG9taWNfMzIuYworKysgYi9hcmNoL3RpbGUvbGliL2F0b21pY18zMi5jCkBAIC00NiwxNCArNDYsMTMgQEAKICNlbHNlIC8qIEFUT01JQ19MT0NLU19GT1VORF9WSUFfVEFCTEUoKSAqLwogCiAvKiBUaGlzIHBhZ2UgaXMgcmVtYXBwZWQgb24gc3RhcnR1cCB0byBiZSBoYXNoLWZvci1ob21lLiAqLwotaW50IGF0b21pY19sb2Nrc1tQQUdFX1NJWkUgLyBzaXplb2YoaW50KSAvKiBPbmx5IEFUT01JQ19IQVNIX1NJWkUgaXMgdXNlZCAqL10KLSAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJWkUpLCBzZWN0aW9uKCIuYnNzLnBhZ2VfYWxpZ25lZCIpKSk7CitpbnQgYXRvbWljX2xvY2tzW1BBR0VfU0laRSAvIHNpemVvZihpbnQpXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CiAKICNlbmRpZiAvKiBBVE9NSUNfTE9DS1NfRk9VTkRfVklBX1RBQkxFKCkgKi8KIAogc3RhdGljIGlubGluZSBpbnQgKl9fYXRvbWljX2hhc2hlZF9sb2NrKHZvbGF0aWxlIHZvaWQgKnYpCiB7Ci0JLyogTk9URTogdGhpcyBjb2RlIG11c3QgbWF0Y2ggInN5c19jbXB4Y2hnIiBpbiBrZXJuZWwvaW50dmVjLlMgKi8KKwkvKiBOT1RFOiB0aGlzIGNvZGUgbXVzdCBtYXRjaCAic3lzX2NtcHhjaGciIGluIGtlcm5lbC9pbnR2ZWNfMzIuUyAqLwogI2lmIEFUT01JQ19MT0NLU19GT1VORF9WSUFfVEFCTEUoKQogCXVuc2lnbmVkIGxvbmcgaSA9CiAJCSh1bnNpZ25lZCBsb25nKSB2ICYgKChQQUdFX1NJWkUtMSkgJiAtc2l6ZW9mKGxvbmcgbG9uZykpOwpAQCAtMjAzLDMyICsyMDIsMzIgQEAKIAlyZXR1cm4gX19hdG9taWNfaGFzaGVkX2xvY2soKGludCBfX2ZvcmNlICopdik7CiB9CiAKLXN0cnVjdCBfX2dldF91c2VyIGZ1dGV4X3NldChpbnQgX191c2VyICp2LCBpbnQgaSkKK3N0cnVjdCBfX2dldF91c2VyIGZ1dGV4X3NldCh1MzIgX191c2VyICp2LCBpbnQgaSkKIHsKIAlyZXR1cm4gX19hdG9taWNfeGNoZygoaW50IF9fZm9yY2UgKil2LCBfX2Z1dGV4X3NldHVwKHYpLCBpKTsKIH0KIAotc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfYWRkKGludCBfX3VzZXIgKnYsIGludCBuKQorc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfYWRkKHUzMiBfX3VzZXIgKnYsIGludCBuKQogewogCXJldHVybiBfX2F0b21pY194Y2hnX2FkZCgoaW50IF9fZm9yY2UgKil2LCBfX2Z1dGV4X3NldHVwKHYpLCBuKTsKIH0KIAotc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfb3IoaW50IF9fdXNlciAqdiwgaW50IG4pCitzdHJ1Y3QgX19nZXRfdXNlciBmdXRleF9vcih1MzIgX191c2VyICp2LCBpbnQgbikKIHsKIAlyZXR1cm4gX19hdG9taWNfb3IoKGludCBfX2ZvcmNlICopdiwgX19mdXRleF9zZXR1cCh2KSwgbik7CiB9CiAKLXN0cnVjdCBfX2dldF91c2VyIGZ1dGV4X2FuZG4oaW50IF9fdXNlciAqdiwgaW50IG4pCitzdHJ1Y3QgX19nZXRfdXNlciBmdXRleF9hbmRuKHUzMiBfX3VzZXIgKnYsIGludCBuKQogewogCXJldHVybiBfX2F0b21pY19hbmRuKChpbnQgX19mb3JjZSAqKXYsIF9fZnV0ZXhfc2V0dXAodiksIG4pOwogfQogCi1zdHJ1Y3QgX19nZXRfdXNlciBmdXRleF94b3IoaW50IF9fdXNlciAqdiwgaW50IG4pCitzdHJ1Y3QgX19nZXRfdXNlciBmdXRleF94b3IodTMyIF9fdXNlciAqdiwgaW50IG4pCiB7CiAJcmV0dXJuIF9fYXRvbWljX3hvcigoaW50IF9fZm9yY2UgKil2LCBfX2Z1dGV4X3NldHVwKHYpLCBuKTsKIH0KIAotc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfY21weGNoZyhpbnQgX191c2VyICp2LCBpbnQgbywgaW50IG4pCitzdHJ1Y3QgX19nZXRfdXNlciBmdXRleF9jbXB4Y2hnKHUzMiBfX3VzZXIgKnYsIGludCBvLCBpbnQgbikKIHsKIAlyZXR1cm4gX19hdG9taWNfY21weGNoZygoaW50IF9fZm9yY2UgKil2LCBfX2Z1dGV4X3NldHVwKHYpLCBvLCBuKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvYXRvbWljX2FzbV8zMi5TIGIvYXJjaC90aWxlL2xpYi9hdG9taWNfYXNtXzMyLlMKaW5kZXggNWE1NTE0Yi4uODJmNjRjYyAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2xpYi9hdG9taWNfYXNtXzMyLlMKKysrIGIvYXJjaC90aWxlL2xpYi9hdG9taWNfYXNtXzMyLlMKQEAgLTE0LDcgKzE0LDcgQEAKICAqIFN1cHBvcnQgcm91dGluZXMgZm9yIGF0b21pYyBvcGVyYXRpb25zLiAgRWFjaCBmdW5jdGlvbiB0YWtlczoKICAqCiAgKiByMDogYWRkcmVzcyB0byBtYW5pcHVsYXRlCi0gKiByMTogcG9pbnRlciB0byBhdG9taWMgbG9jayBndWFyZGluZyB0aGlzIG9wZXJhdGlvbiAoZm9yIEZVVEVYX0xPQ0tfUkVHKQorICogcjE6IHBvaW50ZXIgdG8gYXRvbWljIGxvY2sgZ3VhcmRpbmcgdGhpcyBvcGVyYXRpb24gKGZvciBBVE9NSUNfTE9DS19SRUcpCiAgKiByMjogbmV3IHZhbHVlIHRvIHdyaXRlLCBvciBmb3IgY21weGNoZy9hZGRfdW5sZXNzLCB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QKICAqIHIzOiAoY21weGNoZy94Y2hnX2FkZF91bmxlc3MpIG5ldyB2YWx1ZSB0byB3cml0ZSBvciBhZGQ7CiAgKiAgICAgKGF0b21pYzY0IG9wcykgaGlnaCB3b3JkIG9mIHZhbHVlIHRvIHdyaXRlCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL2NhY2hlZmx1c2guYyBiL2FyY2gvdGlsZS9saWIvY2FjaGVmbHVzaC5jCmluZGV4IDExYjYxNjQuLjM1YzFkOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9saWIvY2FjaGVmbHVzaC5jCisrKyBiL2FyY2gvdGlsZS9saWIvY2FjaGVmbHVzaC5jCkBAIC0yMSwzICsyMSwxMDUgQEAKIHsKIAlpbnZhbGlkYXRlX2ljYWNoZSgoY29uc3Qgdm9pZCAqKXN0YXJ0LCBlbmQgLSBzdGFydCwgUEFHRV9TSVpFKTsKIH0KKworCisvKiBGb3JjZSBhIGxvYWQgaW5zdHJ1Y3Rpb24gdG8gaXNzdWUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgZm9yY2VfbG9hZChjaGFyICpwKQoreworCSoodm9sYXRpbGUgY2hhciAqKXA7Cit9CisKKy8qCisgKiBGbHVzaCBhbmQgaW52YWxpZGF0ZSBhIFZBIHJhbmdlIHRoYXQgaXMgaG9tZWQgcmVtb3RlbHkgb24gYSBzaW5nbGUKKyAqIGNvcmUgKGlmICIhaGZoIikgb3IgaG9tZWQgdmlhIGhhc2gtZm9yLWhvbWUgKGlmICJoZmgiKSwgd2FpdGluZworICogdW50aWwgdGhlIG1lbW9yeSBjb250cm9sbGVyIGhvbGRzIHRoZSBmbHVzaGVkIHZhbHVlcy4KKyAqLwordm9pZCBmaW52X2J1ZmZlcl9yZW1vdGUodm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGhmaCkKK3sKKwljaGFyICpwLCAqYmFzZTsKKwlzaXplX3Qgc3RlcF9zaXplLCBsb2FkX2NvdW50OworCWNvbnN0IHVuc2lnbmVkIGxvbmcgU1RSSVBFX1dJRFRIID0gODE5MjsKKworCS8qCisJICogRmx1c2ggYW5kIGludmFsaWRhdGUgdGhlIGJ1ZmZlciBvdXQgb2YgdGhlIGxvY2FsIEwxL0wyCisJICogYW5kIHJlcXVlc3QgdGhlIGhvbWUgY2FjaGUgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUgYXMgd2VsbC4KKwkgKi8KKwlfX2ZpbnZfYnVmZmVyKGJ1ZmZlciwgc2l6ZSk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoZSBob21lIGNhY2hlIHRvIGFja25vd2xlZGdlIHRoYXQgaXQgaGFzIHByb2Nlc3NlZAorCSAqIGFsbCB0aGUgZmx1c2gtYW5kLWludmFsaWRhdGUgcmVxdWVzdHMuICBUaGlzIGRvZXMgbm90IG1lYW4KKwkgKiB0aGF0IHRoZSBmbHVzaGVkIGRhdGEgaGFzIHJlYWNoZWQgdGhlIG1lbW9yeSBjb250cm9sbGVyIHlldCwKKwkgKiBidXQgaXQgZG9lcyBtZWFuIHRoZSBob21lIGNhY2hlIGlzIHByb2Nlc3NpbmcgdGhlIGZsdXNoZXMuCisJICovCisJX19pbnNuX21mKCk7CisKKwkvKgorCSAqIElzc3VlIGEgbG9hZCB0byB0aGUgbGFzdCBjYWNoZSBsaW5lLCB3aGljaCBjYW4ndCBjb21wbGV0ZQorCSAqIHVudGlsIGFsbCB0aGUgcHJldmlvdXNseS1pc3N1ZWQgZmx1c2hlcyB0byB0aGUgc2FtZSBtZW1vcnkKKwkgKiBjb250cm9sbGVyIGhhdmUgYWxzbyBjb21wbGV0ZWQuICBJZiB3ZSB3ZXJlbid0IHN0cmlwaW5nCisJICogbWVtb3J5LCB0aGF0IG9uZSBsb2FkIHdvdWxkIGJlIHN1ZmZpY2llbnQsIGJ1dCBzaW5jZSB3ZSBtYXkKKwkgKiBiZSwgd2UgYWxzbyBuZWVkIHRvIGJhY2sgdXAgdG8gdGhlIGxhc3QgbG9hZCBpc3N1ZWQgdG8KKwkgKiBhbm90aGVyIG1lbW9yeSBjb250cm9sbGVyLCB3aGljaCB3b3VsZCBiZSB0aGUgcG9pbnQgd2hlcmUKKwkgKiB3ZSBjcm9zc2VkIGFuIDhLQiBib3VuZGFyeSAodGhlIGdyYW51bGFyaXR5IG9mIHN0cmlwaW5nCisJICogYWNyb3NzIG1lbW9yeSBjb250cm9sbGVycykuICBLZWVwIGJhY2tpbmcgdXAgYW5kIGRvaW5nIHRoaXMKKwkgKiB1bnRpbCB3ZSBhcmUgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciwgb3IgaGF2ZQorCSAqIGhpdCBhbGwgdGhlIGNvbnRyb2xsZXJzLgorCSAqCisJICogSWYgd2UgYXJlIGZsdXNoaW5nIGEgaGFzaC1mb3ItaG9tZSBidWZmZXIsIGl0J3MgZXZlbiB3b3JzZS4KKwkgKiBFYWNoIGxpbmUgbWF5IGJlIGhvbWVkIG9uIGEgZGlmZmVyZW50IHRpbGUsIGFuZCBlYWNoIHRpbGUKKwkgKiBtYXkgaGF2ZSB1cCB0byBmb3VyIGxpbmVzIHRoYXQgYXJlIG9uIGRpZmZlcmVudAorCSAqIGNvbnRyb2xsZXJzLiAgU28gYXMgd2Ugd2FsayBiYWNrd2FyZHMsIHdlIGhhdmUgdG8gdG91Y2gKKwkgKiBlbm91Z2ggY2FjaGUgbGluZXMgdG8gc2F0aXNmeSB0aGVzZSBjb25zdHJhaW50cy4gIEluCisJICogcHJhY3RpY2UgdGhpcyBlbmRzIHVwIGJlaW5nIGNsb3NlIGVub3VnaCB0byAibG9hZCBmcm9tCisJICogZXZlcnkgY2FjaGUgbGluZSBvbiBhIGZ1bGwgbWVtb3J5IHN0cmlwZSBvbiBlYWNoCisJICogY29udHJvbGxlciIgdGhhdCB3ZSBzaW1wbHkgZG8gdGhhdCwgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljLgorCSAqCisJICogRklYTUU6IFNlZSBidWcgOTUzNSBmb3Igc29tZSBpc3N1ZXMgd2l0aCB0aGlzIGNvZGUuCisJICovCisJaWYgKGhmaCkgeworCQlzdGVwX3NpemUgPSBMMl9DQUNIRV9CWVRFUzsKKwkJbG9hZF9jb3VudCA9IChTVFJJUEVfV0lEVEggLyBMMl9DQUNIRV9CWVRFUykgKgorCQkJICAgICAgKDEgPDwgQ0hJUF9MT0dfTlVNX01TSElNUygpKTsKKwl9IGVsc2UgeworCQlzdGVwX3NpemUgPSBTVFJJUEVfV0lEVEg7CisJCWxvYWRfY291bnQgPSAoMSA8PCBDSElQX0xPR19OVU1fTVNISU1TKCkpOworCX0KKworCS8qIExvYWQgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgYnVmZmVyLiAqLworCXAgPSAoY2hhciAqKWJ1ZmZlciArIHNpemUgLSAxOworCWZvcmNlX2xvYWQocCk7CisKKwkvKiBCdW1wIGRvd24gdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgc3RyaXBlIG9yIGNhY2hlIGxpbmUuICovCisJcCAtPSBzdGVwX3NpemU7CisJcCA9IChjaGFyICopKCh1bnNpZ25lZCBsb25nKXAgfCAoc3RlcF9zaXplIC0gMSkpOworCisJLyogRmlndXJlIG91dCBob3cgZmFyIGJhY2sgd2UgbmVlZCB0byBnby4gKi8KKwliYXNlID0gcCAtIChzdGVwX3NpemUgKiAobG9hZF9jb3VudCAtIDIpKTsKKwlpZiAoKGxvbmcpYmFzZSA8IChsb25nKWJ1ZmZlcikKKwkJYmFzZSA9IGJ1ZmZlcjsKKworCS8qCisJICogRmlyZSBhbGwgdGhlIGxvYWRzIHdlIG5lZWQuICBUaGUgTUFGIG9ubHkgaGFzIGVpZ2h0IGVudHJpZXMKKwkgKiBzbyB3ZSBjYW4gaGF2ZSBhdCBtb3N0IGVpZ2h0IG91dHN0YW5kaW5nIGxvYWRzLCBzbyB3ZQorCSAqIHVucm9sbCBieSB0aGF0IGFtb3VudC4KKwkgKi8KKyNwcmFnbWEgdW5yb2xsIDgKKwlmb3IgKDsgcCA+PSBiYXNlOyBwIC09IHN0ZXBfc2l6ZSkKKwkJZm9yY2VfbG9hZChwKTsKKworCS8qCisJICogUmVwZWF0LCBidXQgd2l0aCBpbnYncyBpbnN0ZWFkIG9mIGxvYWRzLCB0byBnZXQgcmlkIG9mIHRoZQorCSAqIGRhdGEgd2UganVzdCBsb2FkZWQgaW50byBvdXIgb3duIGNhY2hlIGFuZCB0aGUgb2xkIGhvbWUgTDMuCisJICogTm8gbmVlZCB0byB1bnJvbGwgc2luY2UgaW52J3MgZG9uJ3QgdGFyZ2V0IGEgcmVnaXN0ZXIuCisJICovCisJcCA9IChjaGFyICopYnVmZmVyICsgc2l6ZSAtIDE7CisJX19pbnNuX2ludihwKTsKKwlwIC09IHN0ZXBfc2l6ZTsKKwlwID0gKGNoYXIgKikoKHVuc2lnbmVkIGxvbmcpcCB8IChzdGVwX3NpemUgLSAxKSk7CisJZm9yICg7IHAgPj0gYmFzZTsgcCAtPSBzdGVwX3NpemUpCisJCV9faW5zbl9pbnYocCk7CisKKwkvKiBXYWl0IGZvciB0aGUgbG9hZCtpbnYncyAoYW5kIHRodXMgZmludnMpIHRvIGhhdmUgY29tcGxldGVkLiAqLworCV9faW5zbl9tZigpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2xpYi9kZWxheS5jIGIvYXJjaC90aWxlL2xpYi9kZWxheS5jCmluZGV4IDU4MDFiMDMuLmNkYWNkZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9saWIvZGVsYXkuYworKysgYi9hcmNoL3RpbGUvbGliL2RlbGF5LmMKQEAgLTE1LDIwICsxNSwzMSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS90aW1leC5oPgogCiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCiB7Ci0JaHZfbmFub3NsZWVwKHVzZWNzICogMTAwMCk7CisJaWYgKHVzZWNzID4gVUxPTkdfTUFYIC8gMTAwMCkgeworCQlXQVJOX09OX09OQ0UodXNlY3MgPiBVTE9OR19NQVggLyAxMDAwKTsKKwkJdXNlY3MgPSBVTE9OR19NQVggLyAxMDAwOworCX0KKwlfX25kZWxheSh1c2VjcyAqIDEwMDApOwogfQogRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CiAKIHZvaWQgX19uZGVsYXkodW5zaWduZWQgbG9uZyBuc2VjcykKIHsKLQlodl9uYW5vc2xlZXAobnNlY3MpOworCWN5Y2xlc190IHRhcmdldCA9IGdldF9jeWNsZXMoKTsKKwl0YXJnZXQgKz0gbnMyY3ljbGVzKG5zZWNzKTsKKwl3aGlsZSAoZ2V0X2N5Y2xlcygpIDwgdGFyZ2V0KQorCQljcHVfcmVsYXgoKTsKIH0KIEVYUE9SVF9TWU1CT0woX19uZGVsYXkpOwogCi0vKiBGSVhNRTogc2hvdWxkIGJlIGRlY2xhcmVkIGluIGEgaGVhZGVyIHNvbWV3aGVyZS4gKi8KK3ZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGN5Y2xlcykKK3sKKwljeWNsZXNfdCB0YXJnZXQgPSBnZXRfY3ljbGVzKCkgKyBjeWNsZXM7CisJd2hpbGUgKGdldF9jeWNsZXMoKSA8IHRhcmdldCkKKwkJY3B1X3JlbGF4KCk7Cit9CiBFWFBPUlRfU1lNQk9MKF9fZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2xpYi9leHBvcnRzLmMgYi9hcmNoL3RpbGUvbGliL2V4cG9ydHMuYwppbmRleCAxNTA5YzU1Li40OTI4NGZhIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbGliL2V4cG9ydHMuYworKysgYi9hcmNoL3RpbGUvbGliL2V4cG9ydHMuYwpAQCAtMjksNiArMjksOSBAQAogRVhQT1JUX1NZTUJPTChzdHJubGVuX3VzZXJfYXNtKTsKIEVYUE9SVF9TWU1CT0woc3RybmNweV9mcm9tX3VzZXJfYXNtKTsKIEVYUE9SVF9TWU1CT0woY2xlYXJfdXNlcl9hc20pOworRVhQT1JUX1NZTUJPTChmbHVzaF91c2VyX2FzbSk7CitFWFBPUlRfU1lNQk9MKGludl91c2VyX2FzbSk7CitFWFBPUlRfU1lNQk9MKGZpbnZfdXNlcl9hc20pOwogCiAvKiBhcmNoL3RpbGUva2VybmVsL2VudHJ5LlMgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQ1LDkgKzQ4LDYgQEAKIEVYUE9SVF9TWU1CT0woX19jb3B5X2luX3VzZXJfaW5hdG9taWMpOwogI2VuZGlmCiAKLS8qIGFyY2gvdGlsZS9saWIvbWJfaW5jb2hlcmVudC5TICovCi1FWFBPUlRfU1lNQk9MKF9fbWJfaW5jb2hlcmVudCk7Ci0KIC8qIGh5cGVydmlzb3IgZ2x1ZSAqLwogI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KIEVYUE9SVF9TWU1CT0woaHZfZGV2X29wZW4pOwpAQCAtODUsNCArODUsOCBAQAogRVhQT1JUX1NZTUJPTChfX211bGRpMyk7CiB1aW50NjRfdCBfX2xzaHJkaTModWludDY0X3QsIHVuc2lnbmVkIGludCk7CiBFWFBPUlRfU1lNQk9MKF9fbHNocmRpMyk7Cit1aW50NjRfdCBfX2FzaHJkaTModWludDY0X3QsIHVuc2lnbmVkIGludCk7CitFWFBPUlRfU1lNQk9MKF9fYXNocmRpMyk7Cit1aW50NjRfdCBfX2FzaGxkaTModWludDY0X3QsIHVuc2lnbmVkIGludCk7CitFWFBPUlRfU1lNQk9MKF9fYXNobGRpMyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvbWJfaW5jb2hlcmVudC5TIGIvYXJjaC90aWxlL2xpYi9tYl9pbmNvaGVyZW50LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4OWFkN2IuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2xpYi9tYl9pbmNvaGVyZW50LlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICoKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqICAgbW9yZSBkZXRhaWxzLgotICoKLSAqIEFzc2VtYmx5IGNvZGUgZm9yIGludm9raW5nIHRoZSBIVidzIGZlbmNlX2luY29oZXJlbnQgc3lzY2FsbC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGh2L3N5c2NhbGxfcHVibGljLmg+Ci0jaW5jbHVkZSA8YXJjaC9hYmkuaD4KLSNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KLQotI2lmICFDSElQX0hBU19NRl9XQUlUU19GT1JfVklDVElNUygpCi0KLS8qCi0gKiBJbnZva2UgdGhlIGh5cGVydmlzb3IncyBmZW5jZV9pbmNvaGVyZW50IHN5c2NhbGwsIHdoaWNoIGd1YXJhbnRlZXMKLSAqIHRoYXQgYWxsIHZpY3RpbXMgZm9yIGNhY2hlbGluZXMgaG9tZWQgb24gdGhpcyB0aWxlIGhhdmUgcmVhY2hlZCBtZW1vcnkuCi0gKi8KLVNURF9FTlRSWShfX21iX2luY29oZXJlbnQpCi0JbW92ZWxpIFRSRUdfU1lTQ0FMTF9OUl9OQU1FLCBIVl9TWVNfZmVuY2VfaW5jb2hlcmVudAotCXN3aW50MgotCWpycCBscgotCVNURF9FTkRQUk9DKF9fbWJfaW5jb2hlcmVudCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL21lbWNweV90aWxlNjQuYyBiL2FyY2gvdGlsZS9saWIvbWVtY3B5X3RpbGU2NC5jCmluZGV4IGY3ZDRhNmEuLmIyZmUxNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9saWIvbWVtY3B5X3RpbGU2NC5jCisrKyBiL2FyY2gvdGlsZS9saWIvbWVtY3B5X3RpbGU2NC5jCkBAIC05Niw3ICs5Niw3IEBACiAJbmV3c3JjID0gX19maXhfdG9fdmlydChpZHgpICsgKCh1bnNpZ25lZCBsb25nKXNvdXJjZSAmIChQQUdFX1NJWkUtMSkpOwogCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQocGdkX29mZnNldF9rKG5ld3NyYyksIG5ld3NyYyksIG5ld3NyYyk7CiAJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIG5ld3NyYyk7Ci0JKnB0ZXAgPSBzcmNfcHRlOyAgIC8qIHNldF9wdGUoKSB3b3VsZCBiZSBjb25mdXNlZCBieSB0aGlzICovCisJX19zZXRfcHRlKHB0ZXAsIHNyY19wdGUpOyAgIC8qIHNldF9wdGUoKSB3b3VsZCBiZSBjb25mdXNlZCBieSB0aGlzICovCiAJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgbmV3c3JjLCBQQUdFX1NJWkUpOwogCiAJLyogQWN0dWFsbHkgbW92ZSB0aGUgZGF0YS4gKi8KQEAgLTEwOSw3ICsxMDksNyBAQAogCSAqLwogCXNyY19wdGUgPSBodl9wdGVfc2V0X21vZGUoc3JjX3B0ZSwgSFZfUFRFX01PREVfQ0FDSEVfTk9fTDMpOwogCXNyY19wdGUgPSBodl9wdGVfc2V0X3dyaXRhYmxlKHNyY19wdGUpOyAvKiBuZWVkIHdyaXRlIGFjY2VzcyBmb3IgaW52ICovCi0JKnB0ZXAgPSBzcmNfcHRlOyAgIC8qIHNldF9wdGUoKSB3b3VsZCBiZSBjb25mdXNlZCBieSB0aGlzICovCisJX19zZXRfcHRlKHB0ZXAsIHNyY19wdGUpOyAgIC8qIHNldF9wdGUoKSB3b3VsZCBiZSBjb25mdXNlZCBieSB0aGlzICovCiAJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgbmV3c3JjLCBQQUdFX1NJWkUpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvc3BpbmxvY2tfMzIuYyBiL2FyY2gvdGlsZS9saWIvc3BpbmxvY2tfMzIuYwppbmRleCA1Y2QxYzQwLi5jYjA5OTlmIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbGliL3NwaW5sb2NrXzMyLmMKKysrIGIvYXJjaC90aWxlL2xpYi9zcGlubG9ja18zMi5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXJjaC9zcHJfZGVmLmg+CiAKICNpbmNsdWRlICJzcGlubG9ja19jb21tb24uaCIKIApAQCAtOTEsNzUgKzkyLDc1IEBACiAjZGVmaW5lIFJEX0NPVU5UX01BU0sgICAoKDEgPDwgUkRfQ09VTlRfV0lEVEgpIC0gMSkKIAogCi0vKiBMb2NrIHRoZSB3b3JkLCBzcGlubmluZyB1bnRpbCB0aGVyZSBhcmUgbm8gdG5zLWVycy4gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9yd2xvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKQorLyoKKyAqIFdlIGNhbiBnZXQgdGhlIHJlYWQgbG9jayBpZiBldmVyeXRoaW5nIGJ1dCB0aGUgcmVhZGVyIGJpdHMgKHdoaWNoCisgKiBhcmUgaW4gdGhlIGhpZ2ggcGFydCBvZiB0aGUgd29yZCkgaXMgemVybywgaS5lLiBubyBhY3RpdmUgb3IKKyAqIHdhaXRpbmcgd3JpdGVycywgbm8gdG5zLgorICoKKyAqIFdlIGd1YXJkIHRoZSB0bnMvc3RvcmUtYmFjayB3aXRoIGFuIGludGVycnVwdCBjcml0aWNhbCBzZWN0aW9uIHRvCisgKiBwcmVzZXJ2ZSB0aGUgc2VtYW50aWMgdGhhdCB0aGUgc2FtZSByZWFkIGxvY2sgY2FuIGJlIGFjcXVpcmVkIGluIGFuCisgKiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCiB7Ci0JdTMyIGl0ZXJhdGlvbnMgPSAwOwotCWZvciAoOzspIHsKLQkJdTMyIHZhbCA9IF9faW5zbl90bnMoKGludCAqKSZyd2xvY2stPmxvY2spOwotCQlpZiAodW5saWtlbHkodmFsICYgMSkpIHsKLQkJCWRlbGF5X2JhY2tvZmYoaXRlcmF0aW9ucysrKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXJldHVybiB2YWw7CisJdTMyIHZhbDsKKwlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCAxKTsKKwl2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKKwlpZiAobGlrZWx5KCh2YWwgPDwgX1JEX0NPVU5UX1dJRFRIKSA9PSAwKSkgeworCQl2YWwgKz0gMSA8PCBSRF9DT1VOVF9TSElGVDsKKwkJcndsb2NrLT5sb2NrID0gdmFsOworCQlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCAwKTsKKwkJQlVHX09OKHZhbCA9PSAwKTsgIC8qIHdlIGRvbid0IGV4cGVjdCB3cmFwYXJvdW5kICovCisJCXJldHVybiAxOwogCX0KKwlpZiAoKHZhbCAmIDEpID09IDApCisJCXJ3bG9jay0+bG9jayA9IHZhbDsKKwlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCAwKTsKKwlyZXR1cm4gMDsKIH0KLQotaW50IGFyY2hfcmVhZF90cnlsb2NrX3Nsb3coYXJjaF9yd2xvY2tfdCAqcndsb2NrKQotewotCXUzMiB2YWwgPSBnZXRfcndsb2NrKHJ3bG9jayk7Ci0JaW50IGxvY2tlZCA9ICh2YWwgPDwgUkRfQ09VTlRfV0lEVEgpID09IDA7Ci0Jcndsb2NrLT5sb2NrID0gdmFsICsgKGxvY2tlZCA8PCBSRF9DT1VOVF9TSElGVCk7Ci0JcmV0dXJuIGxvY2tlZDsKLX0KLUVYUE9SVF9TWU1CT0woYXJjaF9yZWFkX3RyeWxvY2tfc2xvdyk7Ci0KLXZvaWQgYXJjaF9yZWFkX3VubG9ja19zbG93KGFyY2hfcndsb2NrX3QgKnJ3bG9jaykKLXsKLQl1MzIgdmFsID0gZ2V0X3J3bG9jayhyd2xvY2spOwotCXJ3bG9jay0+bG9jayA9IHZhbCAtICgxIDw8IFJEX0NPVU5UX1NISUZUKTsKLX0KLUVYUE9SVF9TWU1CT0woYXJjaF9yZWFkX3VubG9ja19zbG93KTsKLQotdm9pZCBhcmNoX3dyaXRlX3VubG9ja19zbG93KGFyY2hfcndsb2NrX3QgKnJ3bG9jaywgdTMyIHZhbCkKLXsKLQl1MzIgZXEsIG1hc2sgPSAxIDw8IFdSX0NVUlJfU0hJRlQ7Ci0Jd2hpbGUgKHVubGlrZWx5KHZhbCAmIDEpKSB7Ci0JCS8qIExpbWl0ZWQgYmFja29mZiBzaW5jZSB3ZSBhcmUgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdGFzay4gKi8KLQkJcmVsYXgoNCk7Ci0JCXZhbCA9IF9faW5zbl90bnMoKGludCAqKSZyd2xvY2stPmxvY2spOwotCX0KLQl2YWwgPSBfX2luc25fYWRkYih2YWwsIG1hc2spOwotCWVxID0gX19pbnNuX3NlcWIodmFsLCB2YWwgPDwgKFdSX0NVUlJfU0hJRlQgLSBXUl9ORVhUX1NISUZUKSk7Ci0JdmFsID0gX19pbnNuX216KGVxICYgbWFzaywgdmFsKTsKLQlyd2xvY2stPmxvY2sgPSB2YWw7Ci19Ci1FWFBPUlRfU1lNQk9MKGFyY2hfd3JpdGVfdW5sb2NrX3Nsb3cpOworRVhQT1JUX1NZTUJPTChhcmNoX3JlYWRfdHJ5bG9jayk7CiAKIC8qCi0gKiBXZSBzcGluIHVudGlsIGV2ZXJ5dGhpbmcgYnV0IHRoZSByZWFkZXIgYml0cyAod2hpY2ggYXJlIGluIHRoZSBoaWdoCi0gKiBwYXJ0IG9mIHRoZSB3b3JkKSBhcmUgemVybywgaS5lLiBubyBhY3RpdmUgb3Igd2FpdGluZyB3cml0ZXJzLCBubyB0bnMuCi0gKgorICogU3BpbiBkb2luZyBhcmNoX3JlYWRfdHJ5bG9jaygpIHVudGlsIHdlIGFjcXVpcmUgdGhlIGxvY2suCiAgKiBJU1NVRTogVGhpcyBhcHByb2FjaCBjYW4gcGVybWFuZW50bHkgc3RhcnZlIHJlYWRlcnMuICBBIHJlYWRlciB3aG8gc2VlcwogICogYSB3cml0ZXIgY291bGQgaW5zdGVhZCB0YWtlIGEgdGlja2V0IGxvY2sgKGp1c3QgbGlrZSBhIHdyaXRlciB3b3VsZCksCiAgKiBhbmQgYXRvbWljYWxseSBlbnRlciByZWFkIG1vZGUgKHdpdGggMSByZWFkZXIpIHdoZW4gaXQgZ2V0cyB0aGUgdGlja2V0LgotICogVGhpcyB3YXkgYm90aCByZWFkZXJzIGFuZCB3cml0ZXJzIHdpbGwgYWx3YXlzIG1ha2UgZm9yd2FyZCBwcm9ncmVzcworICogVGhpcyB3YXkgYm90aCByZWFkZXJzIGFuZCB3cml0ZXJzIHdvdWxkIGFsd2F5cyBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MKICAqIGluIGEgZmluaXRlIHRpbWUuCiAgKi8KLXZvaWQgYXJjaF9yZWFkX2xvY2tfc2xvdyhhcmNoX3J3bG9ja190ICpyd2xvY2ssIHUzMiB2YWwpCit2b2lkIGFyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3bG9jaykKIHsKIAl1MzIgaXRlcmF0aW9ucyA9IDA7Ci0JZG8gewotCQlpZiAoISh2YWwgJiAxKSkKLQkJCXJ3bG9jay0+bG9jayA9IHZhbDsKKwl3aGlsZSAodW5saWtlbHkoIWFyY2hfcmVhZF90cnlsb2NrKHJ3bG9jaykpKQogCQlkZWxheV9iYWNrb2ZmKGl0ZXJhdGlvbnMrKyk7Ci0JCXZhbCA9IF9faW5zbl90bnMoKGludCAqKSZyd2xvY2stPmxvY2spOwotCX0gd2hpbGUgKCh2YWwgPDwgUkRfQ09VTlRfV0lEVEgpICE9IDApOwotCXJ3bG9jay0+bG9jayA9IHZhbCArICgxIDw8IFJEX0NPVU5UX1NISUZUKTsKIH0KLUVYUE9SVF9TWU1CT0woYXJjaF9yZWFkX2xvY2tfc2xvdyk7CitFWFBPUlRfU1lNQk9MKGFyY2hfcmVhZF9sb2NrKTsKIAotdm9pZCBhcmNoX3dyaXRlX2xvY2tfc2xvdyhhcmNoX3J3bG9ja190ICpyd2xvY2ssIHUzMiB2YWwpCit2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKQoreworCXUzMiB2YWwsIGl0ZXJhdGlvbnMgPSAwOworCisJbWIoKTsgIC8qIGd1YXJhbnRlZSBhbnl0aGluZyBtb2RpZmllZCB1bmRlciB0aGUgbG9jayBpcyB2aXNpYmxlICovCisJZm9yICg7OykgeworCQlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCAxKTsKKwkJdmFsID0gX19pbnNuX3RucygoaW50ICopJnJ3bG9jay0+bG9jayk7CisJCWlmIChsaWtlbHkodmFsICYgMSkgPT0gMCkgeworCQkJcndsb2NrLT5sb2NrID0gdmFsIC0gKDEgPDwgX1JEX0NPVU5UX1NISUZUKTsKKwkJCV9faW5zbl9tdHNwcihTUFJfSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04sIDApOworCQkJYnJlYWs7CisJCX0KKwkJX19pbnNuX210c3ByKFNQUl9JTlRFUlJVUFRfQ1JJVElDQUxfU0VDVElPTiwgMCk7CisJCWRlbGF5X2JhY2tvZmYoaXRlcmF0aW9ucysrKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGFyY2hfcmVhZF91bmxvY2spOworCisvKgorICogV2UgZG9uJ3QgbmVlZCBhbiBpbnRlcnJ1cHQgY3JpdGljYWwgc2VjdGlvbiBoZXJlICh1bmxpa2UgZm9yCisgKiBhcmNoX3JlYWRfbG9jaykgc2luY2Ugd2Ugc2hvdWxkIG5ldmVyIHVzZSBhIGJhcmUgd3JpdGUgbG9jayB3aGVyZQorICogaXQgY291bGQgYmUgaW50ZXJydXB0ZWQgYnkgY29kZSB0aGF0IGNvdWxkIHRyeSB0byByZS1hY3F1aXJlIGl0LgorICovCit2b2lkIGFyY2hfd3JpdGVfbG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCiB7CiAJLyoKIAkgKiBUaGUgdHJhaWxpbmcgdW5kZXJzY29yZSBvbiB0aGlzIHZhcmlhYmxlIChhbmQgY3Vycl8gYmVsb3cpCkBAIC0xNjgsNiArMTY5LDEyIEBACiAJICovCiAJdTMyIG15X3RpY2tldF87CiAJdTMyIGl0ZXJhdGlvbnMgPSAwOworCXUzMiB2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKKworCWlmIChsaWtlbHkodmFsID09IDApKSB7CisJCXJ3bG9jay0+bG9jayA9IDEgPDwgX1dSX05FWFRfU0hJRlQ7CisJCXJldHVybjsKKwl9CiAKIAkvKgogCSAqIFdhaXQgdW50aWwgdGhlcmUgYXJlIG5vIHJlYWRlcnMsIHRoZW4gYnVtcCB1cCB0aGUgbmV4dApAQCAtMjA2LDIzICsyMTMsNDcgQEAKIAkJCXJlbGF4KDQpOwogCX0KIH0KLUVYUE9SVF9TWU1CT0woYXJjaF93cml0ZV9sb2NrX3Nsb3cpOworRVhQT1JUX1NZTUJPTChhcmNoX3dyaXRlX2xvY2spOwogCi1pbnQgX190bnNfYXRvbWljX2FjcXVpcmUoYXRvbWljX3QgKmxvY2spCitpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3bG9jaykKIHsKLQlpbnQgcmV0OwotCXUzMiBpdGVyYXRpb25zID0gMDsKKwl1MzIgdmFsID0gX19pbnNuX3RucygoaW50ICopJnJ3bG9jay0+bG9jayk7CiAKLQlCVUdfT04oX19pbnNuX21mc3ByKFNQUl9JTlRFUlJVUFRfQ1JJVElDQUxfU0VDVElPTikpOwotCV9faW5zbl9tdHNwcihTUFJfSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04sIDEpOworCS8qCisJICogSWYgYSB0bnMgaXMgaW4gcHJvZ3Jlc3MsIG9yIHRoZXJlJ3MgYSB3YWl0aW5nIG9yIGFjdGl2ZSBsb2NrZXIsCisJICogb3IgYWN0aXZlIHJlYWRlcnMsIHdlIGNhbid0IHRha2UgdGhlIGxvY2ssIHNvIGdpdmUgdXAuCisJICovCisJaWYgKHVubGlrZWx5KHZhbCAhPSAwKSkgeworCQlpZiAoISh2YWwgJiAxKSkKKwkJCXJ3bG9jay0+bG9jayA9IHZhbDsKKwkJcmV0dXJuIDA7CisJfQogCi0Jd2hpbGUgKChyZXQgPSBfX2luc25fdG5zKCh2b2lkICopJmxvY2stPmNvdW50ZXIpKSA9PSAxKQotCQlkZWxheV9iYWNrb2ZmKGl0ZXJhdGlvbnMrKyk7Ci0JcmV0dXJuIHJldDsKKwkvKiBTZXQgdGhlICJuZXh0IiBmaWVsZCB0byBtYXJrIGl0IGxvY2tlZC4gKi8KKwlyd2xvY2stPmxvY2sgPSAxIDw8IF9XUl9ORVhUX1NISUZUOworCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTChhcmNoX3dyaXRlX3RyeWxvY2spOwogCi12b2lkIF9fdG5zX2F0b21pY19yZWxlYXNlKGF0b21pY190ICpwLCBpbnQgdikKK3ZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKQogewotCXAtPmNvdW50ZXIgPSB2OwotCV9faW5zbl9tdHNwcihTUFJfSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04sIDApOworCXUzMiB2YWwsIGVxLCBtYXNrOworCisJbWIoKTsgIC8qIGd1YXJhbnRlZSBhbnl0aGluZyBtb2RpZmllZCB1bmRlciB0aGUgbG9jayBpcyB2aXNpYmxlICovCisJdmFsID0gX19pbnNuX3RucygoaW50ICopJnJ3bG9jay0+bG9jayk7CisJaWYgKGxpa2VseSh2YWwgPT0gKDEgPDwgX1dSX05FWFRfU0hJRlQpKSkgeworCQlyd2xvY2stPmxvY2sgPSAwOworCQlyZXR1cm47CisJfQorCXdoaWxlICh1bmxpa2VseSh2YWwgJiAxKSkgeworCQkvKiBMaW1pdGVkIGJhY2tvZmYgc2luY2Ugd2UgYXJlIHRoZSBoaWdoZXN0LXByaW9yaXR5IHRhc2suICovCisJCXJlbGF4KDQpOworCQl2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKKwl9CisJbWFzayA9IDEgPDwgV1JfQ1VSUl9TSElGVDsKKwl2YWwgPSBfX2luc25fYWRkYih2YWwsIG1hc2spOworCWVxID0gX19pbnNuX3NlcWIodmFsLCB2YWwgPDwgKFdSX0NVUlJfU0hJRlQgLSBXUl9ORVhUX1NISUZUKSk7CisJdmFsID0gX19pbnNuX216KGVxICYgbWFzaywgdmFsKTsKKwlyd2xvY2stPmxvY2sgPSB2YWw7CiB9CitFWFBPUlRfU1lNQk9MKGFyY2hfd3JpdGVfdW5sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9tbS9mYXVsdC5jIGIvYXJjaC90aWxlL21tL2ZhdWx0LmMKaW5kZXggZGNlYmZjOC4uNzU4ZjU5NyAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL21tL2ZhdWx0LmMKKysrIGIvYXJjaC90aWxlL21tL2ZhdWx0LmMKQEAgLTY1NSwxNCArNjU1LDYgQEAKIAl9CiAKIAkvKgotCSAqIE5PVEU6IHRoZSBvbmUgb3RoZXIgdHlwZSBvZiBhY2Nlc3MgdGhhdCBtaWdodCBicmluZyB1cyBoZXJlCi0JICogYXJlIHRoZSBtZW1vcnkgb3BzIGluIF9fdG5zX2F0b21pY19hY3F1aXJlL19fdG5zX2F0b21pY19yZWxlYXNlLAotCSAqIGJ1dCB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHNwZWNpYWxseSBmb3IgdGhlbSBzaW5jZSB3ZSBjYW4KLQkgKiBhbHdheXMgc2FmZWx5IHJldHVybiB0byB0aGUgYWRkcmVzcyBvZiB0aGUgZmF1bHQgYW5kIHJldHJ5LAotCSAqIHNpbmNlIG5vIHNlcGFyYXRlIGF0b21pYyBsb2NrcyBhcmUgaW52b2x2ZWQuCi0JICovCi0KLQkvKgogCSAqIE5vdyB0aGF0IHdlIGhhdmUgcmVsZWFzZWQgdGhlIGF0b21pYyBsb2NrIChpZiBuZWNlc3NhcnkpLAogCSAqIGl0J3Mgc2FmZSB0byBzcGluIGlmIHRoZSBQVEUgdGhhdCBjYXVzZWQgdGhlIGZhdWx0IHdhcyBtaWdyYXRpbmcuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vaG9tZWNhY2hlLmMgYi9hcmNoL3RpbGUvbW0vaG9tZWNhY2hlLmMKaW5kZXggZDc4ZGYzYS4uY2JlNmY0ZiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL21tL2hvbWVjYWNoZS5jCisrKyBiL2FyY2gvdGlsZS9tbS9ob21lY2FjaGUuYwpAQCAtMTc5LDIzICsxNzksNDYgQEAKIAlwYW5pYygiVW5zYWZlIHRvIGNvbnRpbnVlLiIpOwogfQogCit2b2lkIGZsdXNoX3JlbW90ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCit7CisJaW50IGksIHBhZ2VzID0gKDEgPDwgb3JkZXIpOworCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgKytpLCArK3BhZ2UpIHsKKwkJdm9pZCAqcCA9IGttYXBfYXRvbWljKHBhZ2UpOworCQlpbnQgaGZoID0gMDsKKwkJaW50IGhvbWUgPSBwYWdlX2hvbWUocGFnZSk7CisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisJCWlmIChob21lID09IFBBR0VfSE9NRV9IQVNIKQorCQkJaGZoID0gMTsKKwkJZWxzZQorI2VuZGlmCisJCQlCVUdfT04oaG9tZSA8IDAgfHwgaG9tZSA+PSBOUl9DUFVTKTsKKwkJZmludl9idWZmZXJfcmVtb3RlKHAsIFBBR0VfU0laRSwgaGZoKTsKKwkJa3VubWFwX2F0b21pYyhwKTsKKwl9Cit9CisKIHZvaWQgaG9tZWNhY2hlX2V2aWN0KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewogCWZsdXNoX3JlbW90ZSgwLCBIVl9GTFVTSF9FVklDVF9MMiwgbWFzaywgMCwgMCwgMCwgTlVMTCwgTlVMTCwgMCk7CiB9CiAKLS8qIFJldHVybiBhIG1hc2sgb2YgdGhlIGNwdXMgd2hvc2UgY2FjaGVzIGN1cnJlbnRseSBvd24gdGhlc2UgcGFnZXMuICovCi1zdGF0aWMgdm9pZCBob21lY2FjaGVfbWFzayhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VzLAotCQkJICAgc3RydWN0IGNwdW1hc2sgKmhvbWVfbWFzaykKKy8qCisgKiBSZXR1cm4gYSBtYXNrIG9mIHRoZSBjcHVzIHdob3NlIGNhY2hlcyBjdXJyZW50bHkgb3duIHRoZXNlIHBhZ2VzLgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwYWdlcyBhcmUgYWxsIGNvaGVyZW50bHkgY2FjaGVkCisgKiAoaS5lLiBub25lIGFyZSBpbW11dGFibGUsIGluY29oZXJlbnQsIG9yIHVuY2FjaGVkKS4KKyAqLworc3RhdGljIGludCBob21lY2FjaGVfbWFzayhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VzLAorCQkJICBzdHJ1Y3QgY3B1bWFzayAqaG9tZV9tYXNrKQogewogCWludCBpOworCWludCBjYWNoZWRfY29oZXJlbnRseSA9IDE7CiAJY3B1bWFza19jbGVhcihob21lX21hc2spOwogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgKytpKSB7CiAJCWludCBob21lID0gcGFnZV9ob21lKCZwYWdlW2ldKTsKIAkJaWYgKGhvbWUgPT0gUEFHRV9IT01FX0lNTVVUQUJMRSB8fAogCQkgICAgaG9tZSA9PSBQQUdFX0hPTUVfSU5DT0hFUkVOVCkgewogCQkJY3B1bWFza19jb3B5KGhvbWVfbWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOwotCQkJcmV0dXJuOworCQkJcmV0dXJuIDA7CiAJCX0KICNpZiBDSElQX0hBU19DQk9YX0hPTUVfTUFQKCkKIAkJaWYgKGhvbWUgPT0gUEFHRV9IT01FX0hBU0gpIHsKQEAgLTIwMywxMSArMjI2LDE0IEBACiAJCQljb250aW51ZTsKIAkJfQogI2VuZGlmCi0JCWlmIChob21lID09IFBBR0VfSE9NRV9VTkNBQ0hFRCkKKwkJaWYgKGhvbWUgPT0gUEFHRV9IT01FX1VOQ0FDSEVEKSB7CisJCQljYWNoZWRfY29oZXJlbnRseSA9IDA7CiAJCQljb250aW51ZTsKKwkJfQogCQlCVUdfT04oaG9tZSA8IDAgfHwgaG9tZSA+PSBOUl9DUFVTKTsKIAkJY3B1bWFza19zZXRfY3B1KGhvbWUsIGhvbWVfbWFzayk7CiAJfQorCXJldHVybiBjYWNoZWRfY29oZXJlbnRseTsKIH0KIAogLyoKQEAgLTM4Niw3ICs0MTIsNyBAQAogCQlwdGVfdCAqcHRlcCA9IHZpcnRfdG9fcHRlKE5VTEwsIGt2YSk7CiAJCXB0ZV90IHB0ZXZhbCA9ICpwdGVwOwogCQlCVUdfT04oIXB0ZV9wcmVzZW50KHB0ZXZhbCkgfHwgcHRlX2h1Z2UocHRldmFsKSk7Ci0JCSpwdGVwID0gcHRlX3NldF9ob21lKHB0ZXZhbCwgaG9tZSk7CisJCV9fc2V0X3B0ZShwdGVwLCBwdGVfc2V0X2hvbWUocHRldmFsLCBob21lKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vaW5pdC5jIGIvYXJjaC90aWxlL21tL2luaXQuYwppbmRleCAwYjljZTY5Li5kNmU4N2ZkIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbW0vaW5pdC5jCisrKyBiL2FyY2gvdGlsZS9tbS9pbml0LmMKQEAgLTUzLDIyICs1MywxMSBAQAogCiAjaW5jbHVkZSAibWlncmF0ZS5oIgogCi0vKgotICogV2UgY291bGQgc2V0IEZPUkNFX01BWF9aT05FT1JERVIgdG8gIihIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQgKyAxKSIKLSAqIGluIHRoZSBUaWxlIEtjb25maWcsIGJ1dCB0aGlzIGdlbmVyYXRlcyBjb25maWd1cmUgd2FybmluZ3MuCi0gKiBEbyBpdCBoZXJlIGFuZCBmb3JjZSBwZW9wbGUgdG8gZ2V0IGl0IHJpZ2h0IHRvIGNvbXBpbGUgdGhpcyBmaWxlLgotICogVGhlIHByb2JsZW0gaXMgdGhhdCB3aXRoIDRLQiBzbWFsbCBwYWdlcyBhbmQgMTZNQiBodWdlIHBhZ2VzLAotICogdGhlIGRlZmF1bHQgdmFsdWUgZG9lc24ndCBhbGxvdyB1cyB0byBncm91cCBlbm91Z2ggc21hbGwgcGFnZXMKLSAqIHRvZ2V0aGVyIHRvIG1ha2UgdXAgYSBodWdlIHBhZ2UuCi0gKi8KLSNpZiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUiA8IEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCArIDEKLSMgZXJyb3IgIkNoYW5nZSBGT1JDRV9NQVhfWk9ORU9SREVSIGluIGFyY2gvdGlsZS9LY29uZmlnIHRvIG1hdGNoIHBhZ2Ugc2l6ZSIKLSNlbmRpZgotCiAjZGVmaW5lIGNsZWFyX3BnZChwbWRwdHIpICgqKHBtZHB0cikgPSBodl9wdGUoMCkpCiAKICNpZm5kZWYgX190aWxlZ3hfXwogdW5zaWduZWQgbG9uZyBWTUFMTE9DX1JFU0VSVkUgPSBDT05GSUdfVk1BTExPQ19SRVNFUlZFOworRVhQT1JUX1NZTUJPTChWTUFMTE9DX1JFU0VSVkUpOwogI2VuZGlmCiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CkBAIC00NDUsNyArNDM0LDcgQEAKIAogLyogVGVtcG9yYXJ5IHBhZ2UgdGFibGUgd2UgdXNlIGZvciBzdGFnaW5nLiAqLwogc3RhdGljIHBnZF90IHBndGFibGVzW1BUUlNfUEVSX1BHRF0KLSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuaW5pdC5wYWdlIikpKTsKKyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKEhWX1BBR0VfVEFCTEVfQUxJR04pKSk7CiAKIC8qCiAgKiBUaGlzIG1hcHMgdGhlIHBoeXNpY2FsIG1lbW9yeSB0byBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLCBhIHRvdGFsCkBAIC02NTMsNiArNjQyLDE3IEBACiAJbWVtY3B5KHBnZF9iYXNlLCBwZ3RhYmxlcywgc2l6ZW9mKHBndGFibGVzKSk7CiAJX19pbnN0YWxsX3BhZ2VfdGFibGUocGdkX2Jhc2UsIF9fZ2V0X2NwdV92YXIoY3VycmVudF9hc2lkKSwKIAkJCSAgICAgc3dhcHBlcl9wZ3Byb3QpOworCisJLyoKKwkgKiBXZSBqdXN0IHJlYWQgc3dhcHBlcl9wZ3Byb3QgYW5kIHRodXMgYnJvdWdodCBpdCBpbnRvIHRoZSBjYWNoZSwKKwkgKiB3aXRoIGl0cyBuZXcgaG9tZSAmIGNhY2hpbmcgbW9kZS4gIFdoZW4gd2Ugc3RhcnQgdGhlIG90aGVyIENQVXMsCisJICogdGhleSdyZSBnb2luZyB0byByZWZlcmVuY2Ugc3dhcHBlcl9wZ3Byb3QgdmlhIHRoZWlyIGluaXRpYWwgZmFrZQorCSAqIFZBLWlzLVBBIG1hcHBpbmdzLCB3aGljaCBjYWNoZSBldmVyeXRoaW5nIGxvY2FsbHkuICBBdCB0aGF0CisJICogdGltZSwgaWYgaXQncyBpbiBvdXIgY2FjaGUgd2l0aCBhIGNvbmZsaWN0aW5nIGhvbWUsIHRoZQorCSAqIHNpbXVsYXRvcidzIGNvaGVyZW5jZSBjaGVja2VyIHdpbGwgY29tcGxhaW4uICBTbywgZmx1c2ggaXQgb3V0CisJICogb2Ygb3VyIGNhY2hlOyB3ZSdyZSBub3QgZ29pbmcgdG8gZXZlciB1c2UgaXQgYWdhaW4gYW55d2F5LgorCSAqLworCV9faW5zbl9maW52KCZzd2FwcGVyX3BncHJvdCk7CiB9CiAKIC8qCkBAIC05NTAsMTEgKzk1MCw3IEBACiAKIHZvaWQgX19pbml0IHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKQogewotCXBnZF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwZ2QiLAotCQkJCVBUUlNfUEVSX1BHRCpzaXplb2YocGdkX3QpLAotCQkJCVBUUlNfUEVSX1BHRCpzaXplb2YocGdkX3QpLAotCQkJCTAsCi0JCQkJTlVMTCk7CisJcGdkX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBnZCIsIFNJWkVPRl9QR0QsIFNJWkVPRl9QR0QsIDAsIE5VTEwpOwogCWlmICghcGdkX2NhY2hlKQogCQlwYW5pYygicGd0YWJsZV9jYWNoZV9pbml0KCk6IENhbm5vdCBjcmVhdGUgcGdkIGNhY2hlIik7CiB9CkBAIC05ODksNyArOTg1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IHNldF9pbml0ZnJlZShjaGFyICpzdHIpCiB7CiAJbG9uZyB2YWw7Ci0JaWYgKHN0cmljdF9zdHJ0b2woc3RyLCAwLCAmdmFsKSkgeworCWlmIChzdHJpY3Rfc3RydG9sKHN0ciwgMCwgJnZhbCkgPT0gMCkgewogCQlpbml0ZnJlZSA9IHZhbDsKIAkJcHJfaW5mbygiaW5pdGZyZWU6ICVzIGZyZWUgaW5pdCBwYWdlc1xuIiwKIAkJCWluaXRmcmVlID8gIndpbGwiIDogIndvbid0Iik7CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vbWlncmF0ZV8zMi5TIGIvYXJjaC90aWxlL21tL21pZ3JhdGVfMzIuUwppbmRleCBmNzM4NzY1Li5hYzAxYTdjIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbW0vbWlncmF0ZV8zMi5TCisrKyBiL2FyY2gvdGlsZS9tbS9taWdyYXRlXzMyLlMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL3BndGFibGUuYyBiL2FyY2gvdGlsZS9tbS9wZ3RhYmxlLmMKaW5kZXggMWY1NDMwYy4uMWEyYjM2ZiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL21tL3BndGFibGUuYworKysgYi9hcmNoL3RpbGUvbW0vcGd0YWJsZS5jCkBAIC0xNDIsNiArMTQyLDc2IEBACiB9CiAjZW5kaWYKIAorLyoqCisgKiBzaGF0dGVyX2h1Z2VfcGFnZSgpIC0gZW5zdXJlIGEgZ2l2ZW4gYWRkcmVzcyBpcyBtYXBwZWQgYnkgYSBzbWFsbCBwYWdlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYSBodWdlIFBURSBtYXBwaW5nIGtlcm5lbCBMT1dNRU0gaW50byBhIGJ1bmNoCisgKiBvZiBzbWFsbCBQVEVzIHdpdGggdGhlIHNhbWUgY2FjaGluZy4gIE5vIGNhY2hlIGZsdXNoIHJlcXVpcmVkLCBidXQgd2UKKyAqIG11c3QgZG8gYSBnbG9iYWwgVExCIGZsdXNoLgorICoKKyAqIEFueSBjYWxsZXIgdGhhdCB3aXNoZXMgdG8gbW9kaWZ5IGEga2VybmVsIG1hcHBpbmcgdGhhdCBtaWdodAorICogaGF2ZSBiZWVuIG1hZGUgd2l0aCBhIGh1Z2UgcGFnZSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uLAorICogc2luY2UgZG9pbmcgc28gcHJvcGVybHkgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyB3aXRoIGluc3RhbGxpbmcgdGhlCisgKiBuZXdseS1zaGF0dGVyZWQgcGFnZSBhbmQgdGhlbiBmbHVzaGluZyBhbGwgdGhlIFRMQiBlbnRyaWVzLgorICoKKyAqIEBhZGRyOiBBZGRyZXNzIGF0IHdoaWNoIHRvIHNoYXR0ZXIgYW55IGV4aXN0aW5nIGh1Z2UgcGFnZS4KKyAqLwordm9pZCBzaGF0dGVyX2h1Z2VfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7ICAvKiBoYXBweSBjb21waWxlciAqLworI2lmZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisjZW5kaWYKKworCS8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIHBtZCBlbnRyeSB0aGF0IHdlIG5lZWQgdG8gY2hhbmdlLiAqLworCWFkZHIgJj0gSFBBR0VfTUFTSzsKKwlCVUdfT04ocGdkX2FkZHJfaW52YWxpZChhZGRyKSk7CisJQlVHX09OKGFkZHIgPCBQQUdFX09GRlNFVCk7ICAvKiBvbmx5IGZvciBrZXJuZWwgTE9XTUVNICovCisJcGdkID0gc3dhcHBlcl9wZ19kaXIgKyBwZ2RfaW5kZXgoYWRkcik7CisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCUJVR19PTighcHVkX3ByZXNlbnQoKnB1ZCkpOworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKKwlCVUdfT04oIXBtZF9wcmVzZW50KCpwbWQpKTsKKwlpZiAoIXBtZF9odWdlX3BhZ2UoKnBtZCkpCisJCXJldHVybjsKKworCS8qCisJICogR3JhYiB0aGUgcGdkX2xvY2ssIHNpbmNlIHdlIG1heSBuZWVkIGl0IHRvIHdhbGsgdGhlIHBnZF9saXN0LAorCSAqIGFuZCBzaW5jZSB3ZSBuZWVkIHNvbWUga2luZCBvZiBsb2NrIGhlcmUgdG8gYXZvaWQgcmFjZXMuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBnZF9sb2NrLCBmbGFncyk7CisJaWYgKCFwbWRfaHVnZV9wYWdlKCpwbWQpKSB7CisJCS8qIExvc3QgdGhlIHJhY2UgdG8gY29udmVydCB0aGUgaHVnZSBwYWdlLiAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogU2hhdHRlciB0aGUgaHVnZSBwYWdlIGludG8gdGhlIHByZWFsbG9jYXRlZCBMMiBwYWdlIHRhYmxlLiAqLworCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwKKwkJCSAgICBnZXRfcHJlYWxsb2NfcHRlKHB0ZV9wZm4oKihwdGVfdCAqKXBtZCkpKTsKKworI2lmZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKwkvKiBXYWxrIGV2ZXJ5IHBnZCBvbiB0aGUgc3lzdGVtIGFuZCB1cGRhdGUgdGhlIHBtZCB0aGVyZS4gKi8KKwlsaXN0X2Zvcl9lYWNoKHBvcywgJnBnZF9saXN0KSB7CisJCXBtZF90ICpjb3B5X3BtZDsKKwkJcGdkID0gbGlzdF90b19wZ2QocG9zKSArIHBnZF9pbmRleChhZGRyKTsKKwkJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCQljb3B5X3BtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKKwkJX19zZXRfcG1kKGNvcHlfcG1kLCAqcG1kKTsKKwl9CisjZW5kaWYKKworCS8qIFRlbGwgZXZlcnkgY3B1IHRvIG5vdGljZSB0aGUgY2hhbmdlLiAqLworCWZsdXNoX3JlbW90ZSgwLCAwLCBOVUxMLCBhZGRyLCBIUEFHRV9TSVpFLCBIUEFHRV9TSVpFLAorCQkgICAgIGNwdV9wb3NzaWJsZV9tYXNrLCBOVUxMLCAwKTsKKworCS8qIEhvbGQgdGhlIGxvY2sgdW50aWwgdGhlIFRMQiBmbHVzaCBpcyBmaW5pc2hlZCB0byBhdm9pZCByYWNlcy4gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOworfQorCiAvKgogICogTGlzdCBvZiBhbGwgcGdkJ3MgbmVlZGVkIHNvIGl0IGNhbiBpbnZhbGlkYXRlIGVudHJpZXMgaW4gYm90aCBjYWNoZWQKICAqIGFuZCB1bmNhY2hlZCBwZ2Qncy4gVGhpcyBpcyBlc3NlbnRpYWxseSBjb2RlcGF0aC1iYXNlZCBsb2NraW5nCkBAIC0xODQsOSArMjU0LDkgQEAKIAlCVUdfT04oKCh1NjQgKilzd2FwcGVyX3BnX2RpcilbcGdkX2luZGV4KE1FTV9VU0VSX0lOVFJQVCldICE9IDApOwogI2VuZGlmCiAKLQljbG9uZV9wZ2RfcmFuZ2UocGdkICsgS0VSTkVMX1BHRF9JTkRFWF9TVEFSVCwKLQkJCXN3YXBwZXJfcGdfZGlyICsgS0VSTkVMX1BHRF9JTkRFWF9TVEFSVCwKLQkJCUtFUk5FTF9QR0RfUFRSUyk7CisJbWVtY3B5KHBnZCArIEtFUk5FTF9QR0RfSU5ERVhfU1RBUlQsCisJICAgICAgIHN3YXBwZXJfcGdfZGlyICsgS0VSTkVMX1BHRF9JTkRFWF9TVEFSVCwKKwkgICAgICAgS0VSTkVMX1BHRF9QVFJTICogc2l6ZW9mKHBnZF90KSk7CiAKIAlwZ2RfbGlzdF9hZGQocGdkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOwpAQCAtMjIwLDggKzI5MCwxMSBAQAogCiBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCWdmcF90IGZsYWdzID0gR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVST3xfX0dGUF9DT01QOworCWdmcF90IGZsYWdzID0gR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTzsKIAlzdHJ1Y3QgcGFnZSAqcDsKKyNpZiBMMl9VU0VSX1BHVEFCTEVfT1JERVIgPiAwCisJaW50IGk7CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ISUdIUFRFCiAJZmxhZ3MgfD0gX19HRlBfSElHSE1FTTsKQEAgLTIzMSw2ICszMDQsMTggQEAKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAorI2lmIEwyX1VTRVJfUEdUQUJMRV9PUkRFUiA+IDAKKwkvKgorCSAqIE1ha2UgZXZlcnkgcGFnZSBoYXZlIGEgcGFnZV9jb3VudCgpIG9mIG9uZSwgbm90IGp1c3QgdGhlIGZpcnN0LgorCSAqIFdlIGRvbid0IHVzZSBfX0dGUF9DT01QIHNpbmNlIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0IHdvcmtzCisJICogY29ycmVjdGx5IHdpdGggdGxiX3JlbW92ZV9wYWdlKCkuCisJICovCisJZm9yIChpID0gMTsgaSA8IEwyX1VTRVJfUEdUQUJMRV9QQUdFUzsgKytpKSB7CisJCWluaXRfcGFnZV9jb3VudChwK2kpOworCQlpbmNfem9uZV9wYWdlX3N0YXRlKHAraSwgTlJfUEFHRVRBQkxFKTsKKwl9CisjZW5kaWYKKwogCXBndGFibGVfcGFnZV9jdG9yKHApOwogCXJldHVybiBwOwogfQpAQCAtMjQyLDggKzMyNywxNSBAQAogICovCiB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcCkKIHsKKwlpbnQgaTsKKwogCXBndGFibGVfcGFnZV9kdG9yKHApOwotCV9fZnJlZV9wYWdlcyhwLCBMMl9VU0VSX1BHVEFCTEVfT1JERVIpOworCV9fZnJlZV9wYWdlKHApOworCisJZm9yIChpID0gMTsgaSA8IEwyX1VTRVJfUEdUQUJMRV9QQUdFUzsgKytpKSB7CisJCV9fZnJlZV9wYWdlKHAraSk7CisJCWRlY196b25lX3BhZ2Vfc3RhdGUocCtpLCBOUl9QQUdFVEFCTEUpOworCX0KIH0KIAogdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcHRlLApAQCAtMjUyLDE4ICszNDQsMTEgQEAKIAlpbnQgaTsKIAogCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7Ci0JdGxiLT5uZWVkX2ZsdXNoID0gMTsKLQlpZiAodGxiX2Zhc3RfbW9kZSh0bGIpKSB7Ci0JCXN0cnVjdCBwYWdlICpwdGVfcGFnZXNbTDJfVVNFUl9QR1RBQkxFX1BBR0VTXTsKLQkJZm9yIChpID0gMDsgaSA8IEwyX1VTRVJfUEdUQUJMRV9QQUdFUzsgKytpKQotCQkJcHRlX3BhZ2VzW2ldID0gcHRlICsgaTsKLQkJZnJlZV9wYWdlc19hbmRfc3dhcF9jYWNoZShwdGVfcGFnZXMsIEwyX1VTRVJfUEdUQUJMRV9QQUdFUyk7Ci0JCXJldHVybjsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IEwyX1VTRVJfUEdUQUJMRV9QQUdFUzsgKytpKSB7Ci0JCXRsYi0+cGFnZXNbdGxiLT5ucisrXSA9IHB0ZSArIGk7Ci0JCWlmICh0bGItPm5yID49IEZSRUVfUFRFX05SKQotCQkJdGxiX2ZsdXNoX21tdSh0bGIsIDAsIDApOworCXRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgTDJfVVNFUl9QR1RBQkxFX1BBR0VTOyArK2kpIHsKKwkJdGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRlICsgaSk7CisJCWRlY196b25lX3BhZ2Vfc3RhdGUocHRlICsgaSwgTlJfUEFHRVRBQkxFKTsKIAl9CiB9CiAKQEAgLTM0NiwzNSArNDMxLDUxIEBACiAJcmV0dXJuIHggKyB5ICogc21wX3dpZHRoOwogfQogCi12b2lkIHNldF9wdGVfb3JkZXIocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgaW50IG9yZGVyKQorLyoKKyAqIENvbnZlcnQgYSBrZXJuZWwgVkEgdG8gYSBQQSBhbmQgaG9taW5nIGluZm9ybWF0aW9uLgorICovCitpbnQgdmFfdG9fY3BhX2FuZF9wdGUodm9pZCAqdmEsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY3BhLCBwdGVfdCAqcHRlKQogewotCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOwotCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZSh2YSk7CisJcHRlX3QgbnVsbF9wdGUgPSB7IDAgfTsKKworCSpjcGEgPSBfX3BhKHZhKTsKKworCS8qIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB3cml0aW5nIGEgcGFnZSB0YWJsZSwganVzdCByZXR1cm5pbmcgYSBwdGUuICovCisJKnB0ZSA9IHB0ZV9zZXRfaG9tZShudWxsX3B0ZSwgcGFnZV9ob21lKHBhZ2UpKTsKKworCXJldHVybiAwOyAvKiByZXR1cm4gbm9uLXplcm8gaWYgbm90IGhmaD8gKi8KK30KK0VYUE9SVF9TWU1CT0wodmFfdG9fY3BhX2FuZF9wdGUpOworCit2b2lkIF9fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworI2lmZGVmIF9fdGlsZWd4X18KKwkqcHRlcCA9IHB0ZTsKKyNlbHNlCisjIGlmIEhWX1BURV9JTkRFWF9QUkVTRU5UID49IDMyIHx8IEhWX1BURV9JTkRFWF9NSUdSQVRJTkcgPj0gMzIKKyMgIGVycm9yIE11c3Qgd3JpdGUgdGhlIHByZXNlbnQgYW5kIG1pZ3JhdGluZyBiaXRzIGxhc3QKKyMgZW5kaWYKKwlpZiAocHRlX3ByZXNlbnQocHRlKSkgeworCQkoKHUzMiAqKXB0ZXApWzFdID0gKHUzMikocHRlX3ZhbChwdGUpID4+IDMyKTsKKwkJYmFycmllcigpOworCQkoKHUzMiAqKXB0ZXApWzBdID0gKHUzMikocHRlX3ZhbChwdGUpKTsKKwl9IGVsc2UgeworCQkoKHUzMiAqKXB0ZXApWzBdID0gKHUzMikocHRlX3ZhbChwdGUpKTsKKwkJYmFycmllcigpOworCQkoKHUzMiAqKXB0ZXApWzFdID0gKHUzMikocHRlX3ZhbChwdGUpID4+IDMyKTsKKwl9CisjZW5kaWYgLyogX190aWxlZ3hfXyAqLworfQorCit2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSk7CiAKIAkvKiBVcGRhdGUgdGhlIGhvbWUgb2YgYSBQVEUgaWYgbmVjZXNzYXJ5ICovCiAJcHRlID0gcHRlX3NldF9ob21lKHB0ZSwgcGFnZV9ob21lKHBhZ2UpKTsKIAotI2lmZGVmIF9fdGlsZWd4X18KLQkqcHRlcCA9IHB0ZTsKLSNlbHNlCi0JLyoKLQkgKiBXaGVuIHNldHRpbmcgYSBQVEUsIHdyaXRlIHRoZSBoaWdoIGJpdHMgZmlyc3QsIHRoZW4gd3JpdGUKLQkgKiB0aGUgbG93IGJpdHMuICBUaGlzIHNldHMgdGhlICJwcmVzZW50IiBiaXQgb25seSBhZnRlciB0aGUKLQkgKiBvdGhlciBiaXRzIGFyZSBpbiBwbGFjZS4gIElmIGEgcGFydGljdWxhciBQVEUgdXBkYXRlCi0JICogaW52b2x2ZXMgdHJhbnNpdGlvbmluZyBmcm9tIG9uZSB2YWxpZCBQVEUgdG8gYW5vdGhlciwgaXQKLQkgKiBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNhbGwgc2V0X3B0ZV9vcmRlcigpIG1vcmUgdGhhbiBvbmNlLAotCSAqIHRyYW5zaXRpb25pbmcgdmlhIGEgc3VpdGFibGUgaW50ZXJtZWRpYXRlIHN0YXRlLgotCSAqIE5vdGUgdGhhdCB0aGlzIHNlcXVlbmNlIGFsc28gbWVhbnMgdGhhdCBpZiB3ZSBhcmUgdHJhbnNpdGlvbmluZwotCSAqIGZyb20gYW55IG1pZ3JhdGluZyBQVEUgdG8gYSBub24tbWlncmF0aW5nIG9uZSwgd2Ugd2lsbCBub3QKLQkgKiBzZWUgYSBoYWxmLXVwZGF0ZWQgUFRFIHdpdGggdGhlIG1pZ3JhdGluZyBiaXQgb2ZmLgotCSAqLwotI2lmIEhWX1BURV9JTkRFWF9QUkVTRU5UID49IDMyIHx8IEhWX1BURV9JTkRFWF9NSUdSQVRJTkcgPj0gMzIKLSMgZXJyb3IgTXVzdCB3cml0ZSB0aGUgcHJlc2VudCBhbmQgbWlncmF0aW5nIGJpdHMgbGFzdAotI2VuZGlmCi0JKCh1MzIgKilwdGVwKVsxXSA9ICh1MzIpKHB0ZV92YWwocHRlKSA+PiAzMik7Ci0JYmFycmllcigpOwotCSgodTMyICopcHRlcClbMF0gPSAodTMyKShwdGVfdmFsKHB0ZSkpOwotI2VuZGlmCisJX19zZXRfcHRlKHB0ZXAsIHB0ZSk7CiB9CiAKIC8qIENhbiB0aGlzIG1tIGxvYWQgYSBQVEUgd2l0aCBjYWNoZWRfcHJpb3JpdHkgc2V0PyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKaW5kZXggMDUwZTRkZC4uMzVkZDBiOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCkBAIC0yNTUsOCArMjU1LDggQEAKIAl7IEtEU0lHQUNDRVBULCBLRVJOX0lORk8sICAiS0RTSUdBQ0NFUFQiIH0sCiB9OwogCi1pbnQgbGluZV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCi0JICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoraW50IGxpbmVfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0OwogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wcm9jZXNzb3ItZ2VuZXJpYy5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wcm9jZXNzb3ItZ2VuZXJpYy5oCmluZGV4IGJlZDY2ODguLmQxZDFiMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLWdlbmVyaWMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1nZW5lcmljLmgKQEAgLTY2LDcgKzY2LDcgQEAKIAkucmVxdWVzdAkJPSB7IDAgfSBcCiB9CiAKLWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFsbG9jX3Rhc2tfc3RydWN0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShpbnQgbm9kZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2xpbmUuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbGluZS5oCmluZGV4IDMxMWEwZDMuLjcyZjRmMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbGluZS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbGluZS5oCkBAIC03Nyw4ICs3Nyw4IEBACiBleHRlcm4gdm9pZCBsaW5lX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIGxpbmVfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gaW50IGxpbmVfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLWV4dGVybiBpbnQgbGluZV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCi0JCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgbGluZV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiB2b2lkIGxpbmVfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gdm9pZCBsaW5lX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvYXNtL2VsZi5oIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vZWxmLmgKaW5kZXggYTk3OWEyMi4uZDk2NGE0MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9hc20vZWxmLmgKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vZWxmLmgKQEAgLTc1LDYgKzc1LDggQEAKIAlwcl9yZWdbMTZdID0gUFRfUkVHU19TUyhyZWdzKTsJCVwKIH0gd2hpbGUgKDApOwogCisjZGVmaW5lIHRhc2tfcHRfcmVncyh0KSAoJih0KS0+dGhyZWFkLnJlZ3MpCisKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAogZXh0ZXJuIGludCBlbGZfY29yZV9jb3B5X2ZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9mcHJlZ3NldF90ICpmcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtcHBjL01ha2VmaWxlIGIvYXJjaC91bS9zeXMtcHBjL01ha2VmaWxlCmluZGV4IGI4YmM4NDQuLjIwZDM2M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXBwYy9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy1wcGMvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiBPQkpTID0gcHRyYWNlLm8gc2lnY29udGV4dC5vIGNoZWNrc3VtLm8gbWlzY3RoaW5ncy5vIG1pc2MubyBcCiAJcHRyYWNlX3VzZXIubyBzeXNycS5vCiAKLUVYVFJBX0FGTEFHUyA6PSAtRENPTkZJR19QUEMzMiAtSS4gLUkkKHNyY3RyZWUpL2FyY2gvcHBjL2tlcm5lbAorYXNmbGFncy15IDo9IC1EQ09ORklHX1BQQzMyIC1JLiAtSSQoc3JjdHJlZSkvYXJjaC9wcGMva2VybmVsCiAKIGFsbDogJChPQkopCiAKQEAgLTE1LDEwICsxNSwxMCBAQAogCSQoTEQpICQoTElOS0ZMQUdTKSAtLXN0YXJ0LWdyb3VwICReIC0tZW5kLWdyb3VwIC1vICRACiAKIHB0cmFjZV91c2VyLm86IHB0cmFjZV91c2VyLmMKLQkkKENDKSAtRF9fS0VSTkVMX18gJChVU0VSX0NGTEFHUykgJChFWFRSQV9DRkxBR1MpIC1jIC1vICRAICQ8CisJJChDQykgLURfX0tFUk5FTF9fICQoVVNFUl9DRkxBR1MpICQoY2NmbGFncy15KSAtYyAtbyAkQCAkPAogCiBzaWdjb250ZXh0Lm86IHNpZ2NvbnRleHQuYwotCSQoQ0MpICQoVVNFUl9DRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAtYyAtbyAkQCAkPAorCSQoQ0MpICQoVVNFUl9DRkxBR1MpICQoY2NmbGFncy15KSAtYyAtbyAkQCAkPAogCiBjaGVja3N1bS5TOgogCXJtIC1mICRACkBAIC01MywxMyArNTMsMTMgQEAKIGNoZWNrc3VtLm86IGNoZWNrc3VtLlMKIAlybSAtZiBhc20KIAlsbiAtcyAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLXBwYyBhc20KLQkkKENDKSAkKEVYVFJBX0FGTEFHUykgJChLQlVJTERfQUZMQUdTKSAtRF9fQVNTRU1CTFlfXyAtRF9fVU1fUFBDX18gLWMgJDwgLW8gJCoubworCSQoQ0MpICQoYXNmbGFncy15KSAkKEtCVUlMRF9BRkxBR1MpIC1EX19BU1NFTUJMWV9fIC1EX19VTV9QUENfXyAtYyAkPCAtbyAkKi5vCiAJcm0gLWYgYXNtCiAKIG1pc2MubzogbWlzYy5TIHBwY19kZWZzLmgKIAlybSAtZiBhc20KIAlsbiAtcyAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLXBwYyBhc20KLQkkKENDKSAkKEVYVFJBX0FGTEFHUykgJChLQlVJTERfQUZMQUdTKSAtRF9fQVNTRU1CTFlfXyAtRF9fVU1fUFBDX18gLWMgJDwgLW8gJCoubworCSQoQ0MpICQoYXNmbGFncy15KSAkKEtCVUlMRF9BRkxBR1MpIC1EX19BU1NFTUJMWV9fIC1EX19VTV9QUENfXyAtYyAkPCAtbyAkKi5vCiAJcm0gLWYgYXNtCiAKIGNsZWFuLWZpbGVzIDo9ICQoT0JKUykgcHBjX2RlZnMuaCBjaGVja3N1bS5TIG1rX2RlZnMuYwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9lbGYuaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vZWxmLmgKaW5kZXggZDc2MDk2N2YuLmQ2ZDVhZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vZWxmLmgKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9lbGYuaApAQCAtOTUsNiArOTUsOCBAQAogCShwcl9yZWcpWzI1XSA9IDA7CQkJCQlcCiAJKHByX3JlZylbMjZdID0gMDsKIAorI2RlZmluZSB0YXNrX3B0X3JlZ3ModCkgKCYodCktPnRocmVhZC5yZWdzKQorCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIGV4dGVybiBpbnQgZWxmX2NvcmVfY29weV9mcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZnByZWdzZXRfdCAqZnB1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGUxZjY1YzQuLjE0MGUyNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19JU0FfRE1BCi0JZGVmX2Jvb2wgeQorCWRlZl9ib29sIElTQV9ETUFfQVBJCiAKIGNvbmZpZyBHRU5FUklDX0lPTUFQCiAJZGVmX2Jvb2wgeQpAQCAtMTQzLDcgKzE0Myw3IEBACiAJYm9vbAogCiBjb25maWcgQVJDSF9NQVlfSEFWRV9QQ19GREMKLQlkZWZfYm9vbCB5CisJZGVmX2Jvb2wgSVNBX0RNQV9BUEkKIAogY29uZmlnIFJXU0VNX0dFTkVSSUNfU1BJTkxPQ0sKIAlkZWZfYm9vbCAhWDg2X1hBREQKQEAgLTIwMDIsOSArMjAwMiwxMyBAQAogCiBzb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCiAKLSMgeDg2XzY0IGhhdmUgbm8gSVNBIHNsb3RzLCBidXQgZG8gaGF2ZSBJU0Etc3R5bGUgRE1BLgorIyB4ODZfNjQgaGF2ZSBubyBJU0Egc2xvdHMsIGJ1dCBjYW4gaGF2ZSBJU0Etc3R5bGUgRE1BLgogY29uZmlnIElTQV9ETUFfQVBJCi0JZGVmX2Jvb2wgeQorCWJvb2wgIklTQS1zdHlsZSBETUEgc3VwcG9ydCIgaWYgKFg4Nl82NCAmJiBFWFBFUlQpCisJZGVmYXVsdCB5CisJaGVscAorCSAgRW5hYmxlcyBJU0Etc3R5bGUgRE1BIHN1cHBvcnQgZm9yIGRldmljZXMgcmVxdWlyaW5nIHN1Y2ggY29udHJvbGxlcnMuCisJICBJZiB1bnN1cmUsIHNheSBZLgogCiBpZiBYODZfMzIKIApAQCAtMjA5Miw2ICsyMDk2LDE2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnIgogCitjb25maWcgUkFQSURJTworCWJvb2wgIlJhcGlkSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBkcml2ZXJzIGFuZAorCSAgaW5mcmFzdHJ1Y3R1cmUgY29kZSB0byBzdXBwb3J0IFJhcGlkSU8gaW50ZXJjb25uZWN0IGRldmljZXMuCisKK3NvdXJjZSAiZHJpdmVycy9yYXBpZGlvL0tjb25maWciCisKIGVuZG1lbnUKIAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGVkNDdlNmUuLmQxNjFlOTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC0zMjYsNyArMzI2LDcgQEAKIAkgIE9sZCBQZW50aXVtUHJvIG11bHRpcHJvY2Vzc29yIHN5c3RlbXMgaGFkIGVycmF0YSB0aGF0IGNvdWxkIGNhdXNlCiAJICBtZW1vcnkgb3BlcmF0aW9ucyB0byB2aW9sYXRlIHRoZSB4ODYgb3JkZXJpbmcgc3RhbmRhcmQgaW4gcmFyZSBjYXNlcy4KIAkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCBzb21lIChidXQgbm90IGFsbCkKLQkgIG9jY3VyYW5jZXMgb2YgdGhpcyBwcm9ibGVtLCBhdCB0aGUgY29zdCBvZiBtdWNoIGhlYXZpZXIgc3BpbmxvY2sgYW5kCisJICBvY2N1cnJlbmNlcyBvZiB0aGlzIHByb2JsZW0sIGF0IHRoZSBjb3N0IG9mIG11Y2ggaGVhdmllciBzcGlubG9jayBhbmQKIAkgIG1lbW9yeSBiYXJyaWVyIG9wZXJhdGlvbnMuCiAKIAkgIElmIHVuc3VyZSwgc2F5IG4gaGVyZS4gRXZlbiBkaXN0cm8ga2VybmVscyBzaG91bGQgdGhpbmsgdHdpY2UgYmVmb3JlCkBAIC0zNjYsNyArMzY2LDcgQEAKIAogY29uZmlnIFg4Nl9VU0VfUFBST19DSEVDS1NVTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTUVGRklDRU9OIHx8IE1HRU9ERV9MWCB8fCBNQ09SRTIgfHwgTUFUT00KKwlkZXBlbmRzIG9uIE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTVZJQUM3IHx8IE1FRkZJQ0VPTiB8fCBNR0VPREVfTFggfHwgTUNPUkUyIHx8IE1BVE9NCiAKIGNvbmZpZyBYODZfVVNFXzNETk9XCiAJZGVmX2Jvb2wgeQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TCmluZGV4IDhmZTJhNDkuLmFkY2Y3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9hc20uUworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMKQEAgLTEzNDYsNyArMTM0Niw3IEBACiAJYW5kCSQxNSwgJXIxMwkJCQkjICVyMTMgPSBhcmc0IChtb2QgMTYpCiAJamUJX211bHRpcGxlX29mXzE2X2J5dGVzX2RlY3J5cHQKIAotICAgICAgICAjIEhhbmRsZSB0aGUgbGFzdCA8MTYgYnl0ZSBibG9jayBzZXBlcmF0ZWx5CisgICAgICAgICMgSGFuZGxlIHRoZSBsYXN0IDwxNiBieXRlIGJsb2NrIHNlcGFyYXRlbHkKIAogCXBhZGRkIE9ORSglcmlwKSwgJXhtbTAgICAgICAgICAjIGluY3JlbWVudCBDTlQgdG8gZ2V0IFluCiAgICAgICAgIG1vdmRxYSBTSFVGX01BU0soJXJpcCksICV4bW0xMApAQCAtMTM1NSw3ICsxMzU1LDcgQEAKIAlFTkNSWVBUX1NJTkdMRV9CTE9DSyAgJXhtbTAsICV4bW0xICAgICMgRShLLCBZbikKIAlzdWIgJDE2LCAlcjExCiAJYWRkICVyMTMsICVyMTEKLQltb3ZkcXUgKCVhcmczLCVyMTEsMSksICV4bW0xICAgIyByZWNpZXZlIHRoZSBsYXN0IDwxNiBieXRlIGJsb2NrCisJbW92ZHF1ICglYXJnMywlcjExLDEpLCAleG1tMSAgICMgcmVjZWl2ZSB0aGUgbGFzdCA8MTYgYnl0ZSBibG9jawogCWxlYSBTSElGVF9NQVNLKzE2KCVyaXApLCAlcjEyCiAJc3ViICVyMTMsICVyMTIKICMgYWRqdXN0IHRoZSBzaHVmZmxlIG1hc2sgcG9pbnRlciB0byBiZSBhYmxlIHRvIHNoaWZ0IDE2LSVyMTMgYnl0ZXMKQEAgLTE2MDcsNyArMTYwNyw3IEBACiAJYW5kCSQxNSwgJXIxMwkJCSMgJXIxMyA9IGFyZzQgKG1vZCAxNikKIAlqZQlfbXVsdGlwbGVfb2ZfMTZfYnl0ZXNfZW5jcnlwdAogCi0gICAgICAgICAjIEhhbmRsZSB0aGUgbGFzdCA8MTYgQnl0ZSBibG9jayBzZXBlcmF0ZWx5CisgICAgICAgICAjIEhhbmRsZSB0aGUgbGFzdCA8MTYgQnl0ZSBibG9jayBzZXBhcmF0ZWx5CiAJcGFkZGQgT05FKCVyaXApLCAleG1tMCAgICAgICAgICAgICAgICAjIElOQ1IgQ05UIHRvIGdldCBZbgogICAgICAgICBtb3ZkcWEgU0hVRl9NQVNLKCVyaXApLCAleG1tMTAKIAlQU0hVRkJfWE1NICV4bW0xMCwgJXhtbTAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IDQzMDMxMmIuLjg0OWE5ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtODQ3LDQgKzg0Nyw1IEBACiAJLnF1YWQgc3lzX25hbWVfdG9faGFuZGxlX2F0CiAJLnF1YWQgY29tcGF0X3N5c19vcGVuX2J5X2hhbmRsZV9hdAogCS5xdWFkIGNvbXBhdF9zeXNfY2xvY2tfYWRqdGltZQorCS5xdWFkIHN5c19zeW5jZnMKIGlhMzJfc3lzY2FsbF9lbmQ6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDkwMzY4M2IwLi42OWQ1ODEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtNDU2LDE0ICs0NTYsMTIgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KIAogI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKQkJCVwKIAl0ZXN0X2FuZF9zZXRfYml0KChuciksICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQogI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQkJXAogCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpLCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fWDg2X0JJVE9QU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggNjJmMDg0NC4uNGUxMjY2OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNzEsNyArNzEsNyBAQAogICogUmVhZC9Xcml0ZSAgICA6IFJlYWRPbmx5LCBSZWFkV3JpdGUKICAqIFByZXNlbmNlICAgICAgOiBOb3RQcmVzZW50CiAgKgotICogV2l0aGluIGEgY2F0YWdvcnksIHRoZSBhdHRyaWJ1dGVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisgKiBXaXRoaW4gYSBjYXRlZ29yeSwgdGhlIGF0dHJpYnV0ZXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KICAqCiAgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBBUEkgd2lsbCB0YWtlIGNhcmUgb2YgdmFyaW91cyBhc3BlY3RzIHRoYXQKICAqIGFyZSBhc3NvY2lhdGVkIHdpdGggY2hhbmdpbmcgc3VjaCBhdHRyaWJ1dGVzLCBzdWNoIGFzOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCBjYTEwOThhLi45N2I2ZDgxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMTUxLDYgKzE1MSw3IEBACiAjZGVmaW5lIERNQV9BVVRPSU5JVAkJMHgxMAogCiAKKyNpZmRlZiBDT05GSUdfSVNBX0RNQV9BUEkKIGV4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKQEAgLTE2NCw2ICsxNjUsNyBAQAogewogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfSVNBX0RNQV9BUEkgKi8KIAogLyogZW5hYmxlL2Rpc2FibGUgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLwogc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQpAQCAtMzAzLDkgKzMwNSwxMSBAQAogfQogCiAKLS8qIFRoZXNlIGFyZSBpbiBrZXJuZWwvZG1hLmM6ICovCisvKiBUaGVzZSBhcmUgaW4ga2VybmVsL2RtYS5jIGJlY2F1c2UgeDg2IHVzZXMgQ09ORklHX0dFTkVSSUNfSVNBX0RNQSAqLworI2lmZGVmIENPTkZJR19JU0FfRE1BX0FQSQogZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKmRldmljZV9pZCk7CiBleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOworI2VuZGlmCiAKIC8qIEZyb20gUENJICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tkZWJ1Zy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2RlYnVnLmgKaW5kZXggNTE4YmJiYi4uZmUyY2M2ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va2RlYnVnLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2RlYnVnLmgKQEAgLTI2LDcgKzI2LDcgQEAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIF9fZGllKGNvbnN0IGNoYXIgKiwgc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CiBleHRlcm4gdm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nICpzcCk7CisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCk7CiBleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFsbCk7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb29wc19iZWdpbih2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKaW5kZXggMDdmNDYwMS4uNDg4NmE2OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTI5LDggKzI5LDggQEAKICAqIGV4dGVybmFsIG5taXMsIGJlY2F1c2UgdGhlIGxvY2FsIG9uZXMgYXJlIG1vcmUgZnJlcXVlbnQuCiAgKgogICogQWxzbyBzZXR1cCBzb21lIGRlZmF1bHQgaGlnaC9ub3JtYWwvbG93IHNldHRpbmdzIGZvcgotICogc3Vic3lzdGVtcyB0byByZWdpc3RlcnMgd2l0aC4gIFVzaW5nIDQgYml0cyB0byBzZXBlcmF0ZQotICogdGhlIHByaW9yaXRpZXMuICBUaGlzIGNhbiBnbyBhbG90IGhpZ2hlciBpZiBuZWVkZWQgYmUuCisgKiBzdWJzeXN0ZW1zIHRvIHJlZ2lzdGVycyB3aXRoLiAgVXNpbmcgNCBiaXRzIHRvIHNlcGFyYXRlCisgKiB0aGUgcHJpb3JpdGllcy4gIFRoaXMgY2FuIGdvIGEgbG90IGhpZ2hlciBpZiBuZWVkZWQgYmUuCiAgKi8KIAogI2RlZmluZSBOTUlfTE9DQUxfU0hJRlQJCTE2CS8qIHJhbmRvbWx5IHBpY2tlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm9wcy5oCmluZGV4IDZkODcyM2EuLmFmNzg4NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25vcHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ub3BzLmgKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgSzhfTk9QOAlLOF9OT1A0IEs4X05PUDQKIAogLyogSzcgbm9wcwotICAgdXNlcyBlYXggZGVwZW5kZW5jaWVzIChhcmJpdGFyeSBjaG9pY2UpCisgICB1c2VzIGVheCBkZXBlbmRlbmNpZXMgKGFyYml0cmFyeSBjaG9pY2UpCiAgICAxOiBub3AKICAgIDI6IG1vdmwgJWVheCwlZWF4CiAgICAzOiBsZWFsICgsJWVheCwxKSwlZWF4CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjLmgKaW5kZXggZjQ4MjAxMC4uNWNhNjgwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGMuaApAQCAtMjAsNyArMjAsNyBAQAogCiAvKgogICogT0xQQyBib2FyZCBJRHMgY29udGFpbiB0aGUgbWFqb3IgYnVpbGQgbnVtYmVyIHdpdGhpbiB0aGUgbWFzayAweDBmZjAsCi0gKiBhbmQgdGhlIG1pbm9yIGJ1aWxkIG51bWJlciB3aXRoaW5nIDB4MDAwZi4gIFByZS1idWlsZHMgaGF2ZSBhIG1pbm9yCisgKiBhbmQgdGhlIG1pbm9yIGJ1aWxkIG51bWJlciB3aXRoaW4gMHgwMDBmLiAgUHJlLWJ1aWxkcyBoYXZlIGEgbWlub3IKICAqIG51bWJlciBsZXNzIHRoYW4gOCwgYW5kIG5vcm1hbCBidWlsZHMgc3RhcnQgYXQgOC4gIEZvciBleGFtcGxlLCAweDBCMTAKICAqIGlzIGEgUHJlQjEsIGFuZCAweDBDMTggaXMgYSBDMS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCmluZGV4IGNjMjkwODYuLjU2ZmQ5ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogTmV0YnVyc3QgUGVyZm9tYW5jZSBFdmVudHMgKFA0LCBvbGQgWGVvbikKKyAqIE5ldGJ1cnN0IFBlcmZvcm1hbmNlIEV2ZW50cyAoUDQsIG9sZCBYZW9uKQogICovCiAKICNpZm5kZWYgUEVSRl9FVkVOVF9QNF9ICkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAvKgotICogTmV0QnVyc3QgaGFzIHBlcmZvbWFuY2UgTVNScyBzaGFyZWQgYmV0d2VlbgorICogTmV0QnVyc3QgaGFzIHBlcmZvcm1hbmNlIE1TUnMgc2hhcmVkIGJldHdlZW4KICAqIHRocmVhZHMgaWYgSFQgaXMgdHVybmVkIG9uLCBpZSBmb3IgYm90aCBsb2dpY2FsCiAgKiBwcm9jZXNzb3JzIChtZW06IGluIHR1cm4gaW4gQXRvbSB3aXRoIEhUIHN1cHBvcnQKICAqIHBlcmYtTVNScyBhcmUgbm90IHNoYXJlZCBhbmQgZXZlcnkgdGhyZWFkIGhhcyBpdHMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCmluZGV4IDk0Yjk3OWQuLmVmZmZmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaApAQCAtNjksOCArNjksNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX2NsZWFyKHB1ZF90ICpwdWRwKQogewotCXVuc2lnbmVkIGxvbmcgcGdkOwotCiAJc2V0X3B1ZChwdWRwLCBfX3B1ZCgwKSk7CiAKIAkvKgpAQCAtNzksMTMgKzc3LDEwIEBACiAJICogc2VjdGlvbiA4LjE6IGluIFBBRSBtb2RlIHdlIGV4cGxpY2l0bHkgaGF2ZSB0byBmbHVzaCB0aGUKIAkgKiBUTEIgdmlhIGNyMyBpZiB0aGUgdG9wLWxldmVsIHBnZCBpcyBjaGFuZ2VkLi4uCiAJICoKLQkgKiBNYWtlIHN1cmUgdGhlIHB1ZCBlbnRyeSB3ZSdyZSB1cGRhdGluZyBpcyB3aXRoaW4gdGhlCi0JICogY3VycmVudCBwZ2QgdG8gYXZvaWQgdW5uZWNlc3NhcnkgVExCIGZsdXNoZXMuCisJICogQ3VycmVudGx5IGFsbCBwbGFjZXMgd2hlcmUgcHVkX2NsZWFyKCkgaXMgY2FsbGVkIGVpdGhlciBoYXZlCisJICogZmx1c2hfdGxiX21tKCkgZm9sbG93ZWQgb3IgZG9uJ3QgbmVlZCBUTEIgZmx1c2ggKHg4Nl82NCBjb2RlIG9yCisJICogcHVkX2NsZWFyX2JhZCgpKSwgc28gd2UgZG9uJ3QgbmVlZCBUTEIgZmx1c2ggaGVyZS4KIAkgKi8KLQlwZ2QgPSByZWFkX2NyMygpOwotCWlmIChfX3BhKHB1ZHApID49IHBnZCAmJiBfX3BhKHB1ZHApIDwKLQkgICAgKHBnZCArIHNpemVvZihwZ2RfdCkqUFRSU19QRVJfUEdEKSkKLQkJd3JpdGVfY3IzKHBnZCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3ItZmxhZ3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1mbGFncy5oCmluZGV4IDdhM2U4MzYuLmE4OThhMmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1mbGFncy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1mbGFncy5oCkBAIC03LDcgKzcsNyBAQAogICovCiAjZGVmaW5lIFg4Nl9FRkxBR1NfQ0YJMHgwMDAwMDAwMSAvKiBDYXJyeSBGbGFnICovCiAjZGVmaW5lIFg4Nl9FRkxBR1NfUEYJMHgwMDAwMDAwNCAvKiBQYXJpdHkgRmxhZyAqLwotI2RlZmluZSBYODZfRUZMQUdTX0FGCTB4MDAwMDAwMTAgLyogQXV4aWxsYXJ5IGNhcnJ5IEZsYWcgKi8KKyNkZWZpbmUgWDg2X0VGTEFHU19BRgkweDAwMDAwMDEwIC8qIEF1eGlsaWFyeSBjYXJyeSBGbGFnICovCiAjZGVmaW5lIFg4Nl9FRkxBR1NfWkYJMHgwMDAwMDA0MCAvKiBaZXJvIEZsYWcgKi8KICNkZWZpbmUgWDg2X0VGTEFHU19TRgkweDAwMDAwMDgwIC8qIFNpZ24gRmxhZyAqLwogI2RlZmluZSBYODZfRUZMQUdTX1RGCTB4MDAwMDAxMDAgLyogVHJhcCBGbGFnICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UtYWJpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UtYWJpLmgKaW5kZXggNTJiMDk4YS4uN2IwYTU1YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLWFiaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS1hYmkuaApAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBSMTIgMjQKICNkZWZpbmUgUkJQIDMyCiAjZGVmaW5lIFJCWCA0MAotLyogYXJndW1lbnRzOiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRvIGhlcmUqLworLyogYXJndW1lbnRzOiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cCB0byBoZXJlKi8KICNkZWZpbmUgUjExIDQ4CiAjZGVmaW5lIFIxMCA1NgogI2RlZmluZSBSOSA2NApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA3OGNkMWVhLi4xYmFiZjhhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNzMsNyArNzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgcjEyOwogCXVuc2lnbmVkIGxvbmcgcmJwOwogCXVuc2lnbmVkIGxvbmcgcmJ4OwotLyogYXJndW1lbnRzOiBub24gaW50ZXJydXB0cy9ub24gdHJhY2luZyBzeXNjYWxscyBvbmx5IHNhdmUgdXB0byBoZXJlKi8KKy8qIGFyZ3VtZW50czogbm9uIGludGVycnVwdHMvbm9uIHRyYWNpbmcgc3lzY2FsbHMgb25seSBzYXZlIHVwIHRvIGhlcmUqLwogCXVuc2lnbmVkIGxvbmcgcjExOwogCXVuc2lnbmVkIGxvbmcgcjEwOwogCXVuc2lnbmVkIGxvbmcgcjk7CkBAIC0xMDMsNyArMTAzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHIxMjsKIAl1bnNpZ25lZCBsb25nIGJwOwogCXVuc2lnbmVkIGxvbmcgYng7Ci0vKiBhcmd1bWVudHM6IG5vbiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRvIGhlcmUqLworLyogYXJndW1lbnRzOiBub24gaW50ZXJydXB0cy9ub24gdHJhY2luZyBzeXNjYWxscyBvbmx5IHNhdmUgdXAgdG8gaGVyZSovCiAJdW5zaWduZWQgbG9uZyByMTE7CiAJdW5zaWduZWQgbG9uZyByMTA7CiAJdW5zaWduZWQgbG9uZyByOTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAppbmRleCA1MmI1YzdlLi5kN2U4OWM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCkBAIC00Nyw3ICs0Nyw3IEBACiB9OwogCiB2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQl1bnNpZ25lZCBsb25nICpzdGFjaywKKwkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCiAJCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhKTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTg2LDExICs4NiwxMSBAQAogCiBleHRlcm4gdm9pZAogc2hvd190cmFjZV9sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKnN0YWNrLCBjaGFyICpsb2dfbHZsKTsKKwkJICAgdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpOwogCiBleHRlcm4gdm9pZAogc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKnNwLCBjaGFyICpsb2dfbHZsKTsKKwkJICAgdW5zaWduZWQgbG9uZyAqc3AsIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IGNvZGVfYnl0ZXM7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGYwYjZlNWQuLjFmMmU2MWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMTYxLDggKzE2MSwxNCBAQAogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgogCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykJCQkJCQlcCi0JKChzdHJ1Y3QgdGhyZWFkX2luZm8gKilfX2dldF9mcmVlX3BhZ2VzKFRIUkVBRF9GTEFHUywgVEhSRUFEX09SREVSKSkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm9fbm9kZSh0c2ssIG5vZGUpCQkJCVwKKyh7CQkJCQkJCQkJXAorCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBUSFJFQURfRkxBR1MsCVwKKwkJCQkJICAgICBUSFJFQURfT1JERVIpOwkJXAorCXN0cnVjdCB0aHJlYWRfaW5mbyAqcmV0ID0gcGFnZSA/IHBhZ2VfYWRkcmVzcyhwYWdlKSA6IE5VTEw7CVwKKwkJCQkJCQkJCVwKKwlyZXQ7CQkJCQkJCQlcCit9KQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oCmluZGV4IDFjYTEzMmYuLjgzZTJlZmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oCkBAIC0zNSw3ICszNSw3IEBACiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGN5Y2xlc190IHZnZXRfY3ljbGVzKHZvaWQpCiB7CiAJLyoKLQkgKiBXZSBvbmx5IGRvIFZEU09zIG9uIFRTQyBjYXBhYmxlIENQVXMsIHNvIHRoaXMgc2hvdWxkbnQKKwkgKiBXZSBvbmx5IGRvIFZEU09zIG9uIFRTQyBjYXBhYmxlIENQVXMsIHNvIHRoaXMgc2hvdWxkbid0CiAJICogYWNjZXNzIGJvb3RfY3B1X2RhdGEgKHdoaWNoIGlzIG5vdCBWRFNPLXNhZmUpOgogCSAqLwogI2lmbmRlZiBDT05GSUdfWDg2X1RTQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggZGYxZGEyMC4uOGU4YzIzZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC0xLDIyICsxLDYgQEAKICNpZm5kZWYgX0FTTV9YODZfVFlQRVNfSAogI2RlZmluZSBfQVNNX1g4Nl9UWVBFU19ICiAKLSNkZWZpbmUgZG1hX2FkZHJfdAlkbWFfYWRkcl90Ci0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90eXBlcy5oPgogCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotdHlwZWRlZiB1NjQgZG1hNjRfYWRkcl90OwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSElHSE1FTTY0RykKLS8qIERNQSBhZGRyZXNzZXMgY29tZSBpbiAzMi1iaXQgYW5kIDY0LWJpdCBmbGF2b3Vycy4gKi8KLXR5cGVkZWYgdTY0IGRtYV9hZGRyX3Q7Ci0jZWxzZQotdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjZW5kaWYgLyogX0FTTV9YODZfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAppbmRleCBmZmFmMTgzLi5hNzU1ZWY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaApAQCAtMzQ5LDEwICszNDksMTEgQEAKICNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdAkzNDEKICNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdCAgMzQyCiAjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkzNDMKKyNkZWZpbmUgX19OUl9zeW5jZnMgICAgICAgICAgICAgMzQ0CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzQ0CisjZGVmaW5lIE5SX3N5c2NhbGxzIDM0NQogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IDU0NjZiZWEuLjE2MGZhNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC02NzUsNiArNjc1LDggQEAKIF9fU1lTQ0FMTChfX05SX29wZW5fYnlfaGFuZGxlX2F0LCBzeXNfb3Blbl9ieV9oYW5kbGVfYXQpCiAjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkJCTMwNQogX19TWVNDQUxMKF9fTlJfY2xvY2tfYWRqdGltZSwgc3lzX2Nsb2NrX2FkanRpbWUpCisjZGVmaW5lIF9fTlJfc3luY2ZzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDYKK19fU1lTQ0FMTChfX05SX3N5bmNmcywgc3lzX3N5bmNmcykKIAogI2lmbmRlZiBfX05PX1NUVUJTCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKaW5kZXggMWMxMGM4OC4uNWQ0OTIyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaApAQCAtODYsNyArODYsNyBAQAogICogVGhlIHByaXZpbGVnZSBsZXZlbCBzcGVjaWZpZXMgd2hpY2ggbW9kZXMgbWF5IGVudGVyIGEgdHJhcCB2aWEgYSBzb2Z0d2FyZQogICogaW50ZXJydXB0LiBPbiB4ODYvNjQsIHNpbmNlIHJpbmdzIDEgYW5kIDIgYXJlIHVuYXZhaWxhYmxlLCB3ZSBhbGxvY2F0ZQogICogcHJpdmlsZWdlIGxldmVscyBhcyBmb2xsb3dzOgotICogIExldmVsID09IDA6IE5vb25lIG1heSBlbnRlcgorICogIExldmVsID09IDA6IE5vIG9uZSBtYXkgZW50ZXIKICAqICBMZXZlbCA9PSAxOiBLZXJuZWwgbWF5IGVudGVyCiAgKiAgTGV2ZWwgPT0gMjogS2VybmVsIG1heSBlbnRlcgogICogIExldmVsID09IDM6IEV2ZXJ5b25lIG1heSBlbnRlcgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDc0MzY0MmYuLjczMzhlZjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTQxLDcgKzQxLDcgQEAKIG9iai0kKENPTkZJR19YODZfNjQpCSs9IHN5c194ODZfNjQubyB4ODY2NF9rc3ltc182NC5vCiBvYmotJChDT05GSUdfWDg2XzY0KQkrPSBzeXNjYWxsXzY0Lm8gdnN5c2NhbGxfNjQubwogb2JqLXkJCQkrPSBib290ZmxhZy5vIGU4MjAubwotb2JqLXkJCQkrPSBwY2ktZG1hLm8gcXVpcmtzLm8gaTgyMzcubyB0b3BvbG9neS5vIGtkZWJ1Z2ZzLm8KK29iai15CQkJKz0gcGNpLWRtYS5vIHF1aXJrcy5vIHRvcG9sb2d5Lm8ga2RlYnVnZnMubwogb2JqLXkJCQkrPSBhbHRlcm5hdGl2ZS5vIGk4MjUzLm8gcGNpLW5vbW11Lm8gaHdfYnJlYWtwb2ludC5vCiBvYmoteQkJCSs9IHRzYy5vIGlvX2RlbGF5Lm8gcnRjLm8KIG9iai15CQkJKz0gcGNpLWlvbW11X3RhYmxlLm8KQEAgLTU1LDYgKzU1LDcgQEAKIG9iai0kKENPTkZJR19JQTMyX0VNVUxBVElPTikJKz0gdGxzLm8KIG9iai15CQkJCSs9IHN0ZXAubwogb2JqLSQoQ09ORklHX0lOVEVMX1RYVCkJCSs9IHRib290Lm8KK29iai0kKENPTkZJR19JU0FfRE1BX0FQSSkJKz0gaTgyMzcubwogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwogb2JqLXkJCQkJKz0gY3B1Lwogb2JqLXkJCQkJKz0gYWNwaS8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggNGRiMzU1NC4uNGEyMzQ2NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCiAvKiBSZXBsYWNlIGluc3RydWN0aW9ucyB3aXRoIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIHRoaXMgQ1BVIHR5cGUuCiAgICBUaGlzIHJ1bnMgYmVmb3JlIFNNUCBpcyBpbml0aWFsaXplZCB0byBhdm9pZCBTTVAgcHJvYmxlbXMgd2l0aAotICAgc2VsZiBtb2RpZnlpbmcgY29kZS4gVGhpcyBpbXBsaWVzIHRoYXQgYXNzeW1ldHJpYyBzeXN0ZW1zIHdoZXJlCisgICBzZWxmIG1vZGlmeWluZyBjb2RlLiBUaGlzIGltcGxpZXMgdGhhdCBhc3ltbWV0cmljIHN5c3RlbXMgd2hlcmUKICAgIEFQcyBoYXZlIGxlc3MgY2FwYWJpbGl0aWVzIHRoYW4gdGhlIGJvb3QgcHJvY2Vzc29yIGFyZSBub3QgaGFuZGxlZC4KICAgIFRvdWdoLiBNYWtlIHN1cmUgeW91IGRpc2FibGUgc3VjaCBmZWF0dXJlcyBieSBoYW5kLiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCmluZGV4IDdiMWU4ZTEuLjg2ZDFhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCkBAIC03Myw3ICs3Myw3IEBACiAJLyoKIAkgKiB1c2luZyA1MTJNIGFzIGdvYWwsIGluIGNhc2Uga2V4ZWMgd2lsbCBsb2FkIGtlcm5lbF9iaWcKIAkgKiB0aGF0IHdpbGwgZG8gdGhlIG9uIHBvc2l0aW9uIGRlY29tcHJlc3MsIGFuZCAgY291bGQgb3ZlcmxhcCB3aXRoCi0JICogdGhhdCBwb3NpdG9uIHdpdGggZ2FydCB0aGF0IGlzIHVzZWQuCisJICogdGhhdCBwb3NpdGlvbiB3aXRoIGdhcnQgdGhhdCBpcyB1c2VkLgogCSAqIHNlcXVlbmRlOgogCSAqIGtlcm5lbF9zbWFsbAogCSAqID09PiBrZXhlYyAod2l0aCBrZHVtcCB0cmlnZ2VyIHBhdGggb3IgcHJldmlvdXMgZG9lc24ndCBzaHV0ZG93biBnYXJ0KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IDRiNWViZDIuLjE4MGNhMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTE4ODYsNyArMTg4Niw3IEBACiAJICoKIAkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGZvciBub3cgd2Ugd2lsbCB1c2UgdmlydHVhbCB3aXJlIEEgbW9kZSwKIAkgKiBhcyB2aXJ0dWFsIHdpcmUgQiBpcyBsaXR0bGUgY29tcGxleCAobmVlZCB0byBjb25maWd1cmUgYm90aAotCSAqIElPQVBJQyBSVEUgYXN3ZWxsIGFzIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cnkpLgorCSAqIElPQVBJQyBSVEUgYXMgd2VsbCBhcyBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIGVudHJ5KS4KIAkgKiBBcyB0aGlzIGdldHMgY2FsbGVkIGR1cmluZyBjcmFzaCBkdW1wLCBrZWVwIHRoaXMgc2ltcGxlIGZvciBub3cuCiAJICovCiAJaWYgKGlvYXBpY19pODI1OS5waW4gIT0gLTEgJiYgIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpIHsKQEAgLTI5MDUsNyArMjkwNSw3IEBACiB9CiAKIC8qCi0gKiAgICAgIENhbGxlZCBhZnRlciBhbGwgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUuIElmIHdlIGRpZG50IGZpbmQgYW55CisgKiAgICAgIENhbGxlZCBhZnRlciBhbGwgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUuIElmIHdlIGRpZG4ndCBmaW5kIGFueQogICogICAgICBBUElDIGJ1Z3MgdGhlbiB3ZSBjYW4gYWxsb3cgdGhlIG1vZGlmeSBmYXN0IHBhdGgKICAqLwogCkBAIC0zOTgzLDcgKzM5ODMsNyBAQAogc3RhdGljIF9faW5pdCBpbnQgYmFkX2lvYXBpYyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJaWYgKG5yX2lvYXBpY3MgPj0gTUFYX0lPX0FQSUNTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUklORzogTWF4ICMgb2YgSS9PIEFQSUNzICglZCkgZXhjZWVkZWQgIgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBNYXggIyBvZiBJL08gQVBJQ3MgKCVkKSBleGNlZWRlZCAiCiAJCSAgICAgICAiKGZvdW5kICVkKSwgc2tpcHBpbmdcbiIsIE1BWF9JT19BUElDUywgbnJfaW9hcGljcyk7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCA5MDc5OTI2Li4wYjRiZTQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC02Niw3ICs2Niw3IEBACiAgKiAgICAxLjU6IEZpeCBzZWdtZW50IHJlZ2lzdGVyIHJlbG9hZGluZyAoaW4gY2FzZSBvZiBiYWQgc2VnbWVudHMgc2F2ZWQKICAqICAgICAgICAgYWNyb3NzIEJJT1MgY2FsbCkuCiAgKiAgICAgICAgIFN0ZXBoZW4gUm90aHdlbGwKLSAqICAgIDEuNjogQ29wZSB3aXRoIGNvbXBsaWVyL2Fzc2VtYmxlciBkaWZmZXJlbmNlcy4KKyAqICAgIDEuNjogQ29wZSB3aXRoIGNvbXBpbGVyL2Fzc2VtYmxlciBkaWZmZXJlbmNlcy4KICAqICAgICAgICAgT25seSB0cnkgdG8gdHVybiBvZmYgdGhlIGZpcnN0IGRpc3BsYXkgZGV2aWNlLgogICogICAgICAgICBGaXggT09QUyBhdCBwb3dlciBvZmYgd2l0aCBubyBBUE0gQklPUyBieSBKYW4gRWNodGVybmFjaAogICogICAgICAgICAgICAgICAgICAgPGVjaHRlckBpbmZvcm1hdGlrLnVuaS1yb3N0b2NrLmRlPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwppbmRleCAwMzE2MmRhLi5jZjQ4Y2RkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBHZXQgbWF4IG11bHRpcGxpZXIgLSBhcyB3ZSBhbHdheXMgZGlkLgotCSAqIExvbmdoYXVsIE1TUiBpcyB1c2VmdWxsIG9ubHkgd2hlbiB2b2x0YWdlIHNjYWxpbmcgaXMgZW5hYmxlZC4KKwkgKiBMb25naGF1bCBNU1IgaXMgdXNlZnVsIG9ubHkgd2hlbiB2b2x0YWdlIHNjYWxpbmcgaXMgZW5hYmxlZC4KIAkgKiBDMyBpcyBib290aW5nIGF0IG1heCBhbnl3YXkuICovCiAJbWF4bXVsdCA9IG11bHQ7CiAJLyogR2V0IG1pbiBtdWx0aXBsaWVyICovCkBAIC0xMDExLDcgKzEwMTEsNyBAQAogICogdHJpZ2dlciBmcmVxdWVuY3kgdHJhbnNpdGlvbiBpbiBzb21lIGNhc2VzLiAqLwogbW9kdWxlX3BhcmFtKGRpc2FibGVfYWNwaV9jMywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9hY3BpX2MzLCAiRG9uJ3QgdXNlIEFDUEkgQzMgc3VwcG9ydCIpOwotLyogQ2hhbmdlIENQVSB2b2x0YWdlIHdpdGggZnJlcXVlbmN5LiBWZXJ5IHVzZWZ1bGwgdG8gc2F2ZQorLyogQ2hhbmdlIENQVSB2b2x0YWdlIHdpdGggZnJlcXVlbmN5LiBWZXJ5IHVzZWZ1bCB0byBzYXZlCiAgKiBwb3dlciwgYnV0IG1vc3QgVklBIEMzIHByb2Nlc3NvcnMgYXJlbid0IHN1cHBvcnRpbmcgaXQuICovCiBtb2R1bGVfcGFyYW0oc2NhbGVfdm9sdGFnZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc2NhbGVfdm9sdGFnZSwgIlNjYWxlIHZvbHRhZ2Ugb2YgcHJvY2Vzc29yIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDFhZTQxMzMuLjIzNjhlMzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0xMjc1LDcgKzEyNzUsNyBAQAogCiAJaWYgKHBvd2Vybm93X2s4X2NwdV9pbml0X2FjcGkoZGF0YSkpIHsKIAkJLyoKLQkJICogVXNlIHRoZSBQU0IgQklPUyBzdHJ1Y3R1cmUuIFRoaXMgaXMgb25seSBhdmFpbGFiZSBvbgorCQkgKiBVc2UgdGhlIFBTQiBCSU9TIHN0cnVjdHVyZS4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBvbgogCQkgKiBhbiBVUCB2ZXJzaW9uLCBhbmQgaXMgZGVwcmVjYXRlZCBieSBBTUQuCiAJCSAqLwogCQlpZiAobnVtX29ubGluZV9jcHVzKCkgIT0gMSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKaW5kZXggOGFiZDg2OS4uOTFiYzI1YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCkBAIC0yOTIsNyArMjkyLDcgQEAKIAogCXJlc3VsdCA9IHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwKCk7CiAJaWYgKHJlc3VsdCkgewotCQlkcHJpbnRrKCJmYWlscyBpbiBhcXVpcmluZyBvd25lcnNoaXAgb2YgYSBTTUkgaW50ZXJmYWNlLlxuIik7CisJCWRwcmludGsoImZhaWxzIGluIGFjcXVpcmluZyBvd25lcnNoaXAgb2YgYSBTTUkgaW50ZXJmYWNlLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzYwLDcgKzM2MCw3IEBACiAJaW50IHJlc3VsdCA9IHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwKCk7CiAKIAlpZiAocmVzdWx0KQotCQlkcHJpbnRrKCJmYWlscyBpbiByZS1hcXVpcmluZyBvd25lcnNoaXAgb2YgYSBTTUkgaW50ZXJmYWNlLlxuIik7CisJCWRwcmludGsoImZhaWxzIGluIHJlLWFjcXVpcmluZyBvd25lcnNoaXAgb2YgYSBTTUkgaW50ZXJmYWNlLlxuIik7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jCmluZGV4IGE3Nzk3MTkuLjBlZDYzM2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIHsKIAlzdHJ1Y3QgbWNlICppID0gJnBlcl9jcHUoaW5qZWN0bSwgbS0+ZXh0Y3B1KTsKIAotCS8qIE1ha2Ugc3VyZSBub29uZSByZWFkcyBwYXJ0aWFsbHkgd3JpdHRlbiBpbmplY3RtICovCisJLyogTWFrZSBzdXJlIG5vIG9uZSByZWFkcyBwYXJ0aWFsbHkgd3JpdHRlbiBpbmplY3RtICovCiAJaS0+ZmluaXNoZWQgPSAwOwogCW1iKCk7CiAJbS0+ZmluaXNoZWQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCBkOTE2MTgzLi5hYjExMjI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtODgxLDcgKzg4MSw3IEBACiAgKiBDaGVjayBpZiB0aGUgYWRkcmVzcyByZXBvcnRlZCBieSB0aGUgQ1BVIGlzIGluIGEgZm9ybWF0IHdlIGNhbiBwYXJzZS4KICAqIEl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGFkZCBjb2RlIGZvciBtb3N0IG90aGVyIGNhc2VzLCBidXQgYWxsIHdvdWxkCiAgKiBiZSBzb21ld2hhdCBjb21wbGljYXRlZCAoZS5nLiBzZWdtZW50IG9mZnNldCB3b3VsZCByZXF1aXJlIGFuIGluc3RydWN0aW9uCi0gKiBwYXJzZXIpLiBTbyBvbmx5IHN1cHBvcnQgcGh5c2ljYWwgYWRkcmVzc2VzIHVwdG8gcGFnZSBncmFudWFsaXR5IGZvciBub3cuCisgKiBwYXJzZXIpLiBTbyBvbmx5IHN1cHBvcnQgcGh5c2ljYWwgYWRkcmVzc2VzIHVwIHRvIHBhZ2UgZ3JhbnVhbGl0eSBmb3Igbm93LgogICovCiBzdGF0aWMgaW50IG1jZV91c2FibGVfYWRkcmVzcyhzdHJ1Y3QgbWNlICptKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKaW5kZXggOWYyNzIyOC4uYTcxZWZjZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBUaGlzIG9ubHkgaGFuZGxlcyAzMmJpdCBNVFJSIG9uIDMyYml0IGhvc3RzLiBUaGlzIGlzIHN0cmljdGx5IHdyb25nCi0gKiBiZWNhdXNlIE1UUlJzIGNhbiBzcGFuIHVwdG8gNDAgYml0cyAoMzZiaXRzIG9uIG1vc3QgbW9kZXJuIHg4NikKKyAqIGJlY2F1c2UgTVRSUnMgY2FuIHNwYW4gdXAgdG8gNDAgYml0cyAoMzZiaXRzIG9uIG1vc3QgbW9kZXJuIHg4NikKICAqLwogI2RlZmluZSBERUJVRwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IDI2NjA0MTguLjg3ZWFiNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCkBAIC0xNzgsOCArMTc4LDYgQEAKICAqLwogI2RlZmluZSBJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVChjLCBuKQlcCiAJRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBJTlRFTF9BUkNIX0VWRU5UX01BU0spCi0jZGVmaW5lIFBFQlNfRVZFTlRfQ09OU1RSQUlOVChjLCBuKQlcCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoYywgbikKIAogI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UX0VORAkJXAogCUVWRU5UX0NPTlNUUkFJTlQoMCwgMCwgMCkKQEAgLTExMTEsNyArMTEwOSw3IEBACiAKIAkvKgogCSAqIElmIGdyb3VwIGV2ZW50cyBzY2hlZHVsaW5nIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLAotCSAqIHNraXAgdGhlIHNjaGVkdWxhYmlsaXR5IHRlc3QgaGVyZSwgaXQgd2lsbCBiZSBwZWZvcm1lZAorCSAqIHNraXAgdGhlIHNjaGVkdWxhYmlsaXR5IHRlc3QgaGVyZSwgaXQgd2lsbCBiZSBwZXJmb3JtZWQKIAkgKiBhdCBjb21taXQgdGltZSAoLT5jb21taXRfdHhuKSBhcyBhIHdob2xlCiAJICovCiAJaWYgKGNwdWMtPmdyb3VwX2ZsYWcgJiBQRVJGX0VWRU5UX1RYTikKQEAgLTE3OTIsNyArMTc5MCw3IEBACiAKIAlwZXJmX2NhbGxjaGFpbl9zdG9yZShlbnRyeSwgcmVncy0+aXApOwogCi0JZHVtcF90cmFjZShOVUxMLCByZWdzLCBOVUxMLCAmYmFja3RyYWNlX29wcywgZW50cnkpOworCWR1bXBfdHJhY2UoTlVMTCwgcmVncywgTlVMTCwgMCwgJmJhY2t0cmFjZV9vcHMsIGVudHJ5KTsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKaW5kZXggYjk1YzY2YS4uYmFiNDkxYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKQEAgLTM2Miw4NyArMzYyLDY5IEBACiAgKiBQRUJTCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlMl9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMHgxKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweGZlYzEsIDB4MSksIC8qIFg4N19PUFNfUkVUSVJFRC5BTlkgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwMGM1LCAweDEpLCAvKiBCUl9JTlNUX1JFVElSRUQuTUlTUFJFRCAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDFmYzcsIDB4MSksIC8qIFNJTURfSU5TVF9SRVRVUkVELkFOWSAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMHgxKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4ZmVjMSwgMHgxKSwgLyogWDg3X09QU19SRVRJUkVELkFOWSAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjNSwgMHgxKSwgLyogQlJfSU5TVF9SRVRJUkVELk1JU1BSRUQgKi8KKwlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDFmYzcsIDB4MSksIC8qIFNJTURfSU5TVF9SRVRVUkVELkFOWSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9hdG9tX3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAweDEpLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MDBjNSwgMHgxKSwgLyogTUlTUFJFRElDVEVEX0JSQU5DSF9SRVRJUkVEICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweDEpLCAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCisJSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAweDEpLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCisJSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGM1LCAweDEpLCAvKiBNSVNQUkVESUNURURfQlJBTkNIX1JFVElSRUQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLwogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCiBzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDBiLCAweGYpLCAgLyogTUVNX0lOU1RfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDBmLCAweGYpLCAgLyogTUVNX1VOQ09SRV9SRVRJUkVELiogKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwMTBjLCAweGYpLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsIDB4ZiksICAvKiBJTlNUX1JFVElSRUQuQU5ZICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGMyLCAweGYpLCAgLyogVU9QU19SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzQsIDB4ZiksICAvKiBCUl9JTlNUX1JFVElSRUQuKiAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDAyYzUsIDB4ZiksIC8qIEJSX01JU1BfUkVUSVJFRC5ORUFSX0NBTEwgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzcsIDB4ZiksICAvKiBTU0VYX1VPUFNfUkVUSVJFRC4qICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MjBjOCwgMHhmKSwgLyogSVRMQl9NSVNTX1JFVElSRUQgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4ZiksICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4ZjcsIDB4ZiksICAvKiBGUF9BU1NJU1QuKiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgwYiwgMHhmKSwgICAgLyogTUVNX0lOU1RfUkVUSVJFRC4qICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDBmLCAweGYpLCAgICAvKiBNRU1fVU5DT1JFX1JFVElSRUQuKiAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDEwYywgMHhmKSwgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAweGYpLCAgICAvKiBJTlNUX1JFVElSRUQuQU5ZICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGMyLCAweGYpLCAgICAvKiBVT1BTX1JFVElSRUQuKiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjNCwgMHhmKSwgICAgLyogQlJfSU5TVF9SRVRJUkVELiogKi8KKwlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAyYzUsIDB4ZiksIC8qIEJSX01JU1BfUkVUSVJFRC5ORUFSX0NBTEwgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzcsIDB4ZiksICAgIC8qIFNTRVhfVU9QU19SRVRJUkVELiogKi8KKwlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDIwYzgsIDB4ZiksIC8qIElUTEJfTUlTU19SRVRJUkVEICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweGYpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4ZjcsIDB4ZiksICAgIC8qIEZQX0FTU0lTVC4qICovCiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF93ZXN0bWVyZV9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDBiLCAweGYpLCAgLyogTUVNX0lOU1RfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDBmLCAweGYpLCAgLyogTUVNX1VOQ09SRV9SRVRJUkVELiogKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwMTBjLCAweGYpLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsIDB4ZiksICAvKiBJTlNUUl9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzIsIDB4ZiksICAvKiBVT1BTX1JFVElSRUQuKiAqLwotCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGM0LCAweGYpLCAgLyogQlJfSU5TVF9SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzUsIDB4ZiksICAvKiBCUl9NSVNQX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjNywgMHhmKSwgIC8qIFNTRVhfVU9QU19SRVRJUkVELiogKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgyMGM4LCAweGYpLCAvKiBJVExCX01JU1NfUkVUSVJFRCAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHhmKSwgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhmNywgMHhmKSwgIC8qIEZQX0FTU0lTVC4qICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDBiLCAweGYpLCAgICAvKiBNRU1fSU5TVF9SRVRJUkVELiogKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MGYsIDB4ZiksICAgIC8qIE1FTV9VTkNPUkVfUkVUSVJFRC4qICovCisJSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMTBjLCAweGYpLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsIDB4ZiksICAgIC8qIElOU1RSX1JFVElSRUQuKiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMiwgMHhmKSwgICAgLyogVU9QU19SRVRJUkVELiogKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzQsIDB4ZiksICAgIC8qIEJSX0lOU1RfUkVUSVJFRC4qICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGM1LCAweGYpLCAgICAvKiBCUl9NSVNQX1JFVElSRUQuKiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjNywgMHhmKSwgICAgLyogU1NFWF9VT1BTX1JFVElSRUQuKiAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MjBjOCwgMHhmKSwgLyogSVRMQl9NSVNTX1JFVElSRUQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4ZiksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhmNywgMHhmKSwgICAgLyogRlBfQVNTSVNULiogKi8KIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIAogc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3NuYl9wZWJzX2V2ZW50c1tdID0gewotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDAxYzAsIDB4MiksIC8qIElOU1RfUkVUSVJFRC5QUkVDRElTVCAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDAxYzIsIDB4ZiksIC8qIFVPUFNfUkVUSVJFRC5BTEwgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwMmMyLCAweGYpLCAvKiBVT1BTX1JFVElSRUQuUkVUSVJFX1NMT1RTICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MDFjNCwgMHhmKSwgLyogQlJfSU5TVF9SRVRJUkVELkNPTkRJVElPTkFMICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MDJjNCwgMHhmKSwgLyogQlJfSU5TVF9SRVRJUkVELk5FQVJfQ0FMTCAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDA0YzQsIDB4ZiksIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwOGM0LCAweGYpLCAvKiBCUl9JTlNUX1JFVElSRUQuTkVBUl9SRVRVUk4gKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgxMGM0LCAweGYpLCAvKiBCUl9JTlNUX1JFVElSRUQuTk9UX1RBS0VOICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MjBjNCwgMHhmKSwgLyogQlJfSU5TVF9SRVRJUkVELk5FQVJfVEFLRU4gKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHg0MGM0LCAweGYpLCAvKiBCUl9JTlNUX1JFVElSRUQuRkFSX0JSQU5DSCAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDAxYzUsIDB4ZiksIC8qIEJSX01JU1BfUkVUSVJFRC5DT05ESVRJT05BTCAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDAyYzUsIDB4ZiksIC8qIEJSX01JU1BfUkVUSVJFRC5ORUFSX0NBTEwgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwNGM1LCAweGYpLCAvKiBCUl9NSVNQX1JFVElSRUQuQUxMX0JSQU5DSEVTICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MTBjNSwgMHhmKSwgLyogQlJfTUlTUF9SRVRJUkVELk5PVF9UQUtFTiAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDIwYzUsIDB4ZiksIC8qIEJSX01JU1BfUkVUSVJFRC5UQUtFTiAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDAxY2QsIDB4OCksIC8qIE1FTV9UUkFOU19SRVRJUkVELkxPQURfTEFURU5DWSAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDAyY2QsIDB4OCksIC8qIE1FTV9UUkFOU19SRVRJUkVELlBSRUNJU0VfU1RPUkUgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgxMWQwLCAweGYpLCAvKiBNRU1fVU9QX1JFVElSRUQuU1RMQl9NSVNTX0xPQURTICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MTJkMCwgMHhmKSwgLyogTUVNX1VPUF9SRVRJUkVELlNUTEJfTUlTU19TVE9SRVMgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgyMWQwLCAweGYpLCAvKiBNRU1fVU9QX1JFVElSRUQuTE9DS19MT0FEUyAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDIyZDAsIDB4ZiksIC8qIE1FTV9VT1BfUkVUSVJFRC5MT0NLX1NUT1JFUyAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDQxZDAsIDB4ZiksIC8qIE1FTV9VT1BfUkVUSVJFRC5TUExJVF9MT0FEUyAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDQyZDAsIDB4ZiksIC8qIE1FTV9VT1BfUkVUSVJFRC5TUExJVF9TVE9SRVMgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHg4MWQwLCAweGYpLCAvKiBNRU1fVU9QX1JFVElSRUQuQU5ZX0xPQURTICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4ODJkMCwgMHhmKSwgLyogTUVNX1VPUF9SRVRJUkVELkFOWV9TVE9SRVMgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwMWQxLCAweGYpLCAvKiBNRU1fTE9BRF9VT1BTX1JFVElSRUQuTDFfSElUICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4MDJkMSwgMHhmKSwgLyogTUVNX0xPQURfVU9QU19SRVRJUkVELkwyX0hJVCAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDA0ZDEsIDB4ZiksIC8qIE1FTV9MT0FEX1VPUFNfUkVUSVJFRC5MTENfSElUICovCi0JUEVCU19FVkVOVF9DT05TVFJBSU5UKDB4NDBkMSwgMHhmKSwgLyogTUVNX0xPQURfVU9QU19SRVRJUkVELkhJVF9MRkIgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwMWQyLCAweGYpLCAvKiBNRU1fTE9BRF9VT1BTX0xMQ19ISVRfUkVUSVJFRC5YU05QX01JU1MgKi8KLQlQRUJTX0VWRU5UX0NPTlNUUkFJTlQoMHgwMmQyLCAweGYpLCAvKiBNRU1fTE9BRF9VT1BTX0xMQ19ISVRfUkVUSVJFRC5YU05QX0hJVCAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDA0ZDIsIDB4ZiksIC8qIE1FTV9MT0FEX1VPUFNfTExDX0hJVF9SRVRJUkVELlhTTlBfSElUTSAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDA4ZDIsIDB4ZiksIC8qIE1FTV9MT0FEX1VPUFNfTExDX0hJVF9SRVRJUkVELlhTTlBfTk9ORSAqLwotCVBFQlNfRVZFTlRfQ09OU1RSQUlOVCgweDAyZDQsIDB4ZiksIC8qIE1FTV9MT0FEX1VPUFNfTUlTQ19SRVRJUkVELkxMQ19NSVNTICovCisJSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMWMwLCAweDIpLCAvKiBJTlNUX1JFVElSRUQuUFJFQ0RJU1QgKi8KKwlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAxYzIsIDB4ZiksIC8qIFVPUFNfUkVUSVJFRC5BTEwgKi8KKwlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAyYzIsIDB4ZiksIC8qIFVPUFNfUkVUSVJFRC5SRVRJUkVfU0xPVFMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzQsIDB4ZiksICAgIC8qIEJSX0lOU1RfUkVUSVJFRC4qICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGM1LCAweGYpLCAgICAvKiBCUl9NSVNQX1JFVElSRUQuKiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjZCwgMHg4KSwgICAgLyogTUVNX1RSQU5TX1JFVElSRUQuKiAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MTFkMCwgMHhmKSwgLyogTUVNX1VPUF9SRVRJUkVELlNUTEJfTUlTU19MT0FEUyAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MTJkMCwgMHhmKSwgLyogTUVNX1VPUF9SRVRJUkVELlNUTEJfTUlTU19TVE9SRVMgKi8KKwlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDIxZDAsIDB4ZiksIC8qIE1FTV9VT1BfUkVUSVJFRC5MT0NLX0xPQURTICovCisJSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgyMmQwLCAweGYpLCAvKiBNRU1fVU9QX1JFVElSRUQuTE9DS19TVE9SRVMgKi8KKwlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDQxZDAsIDB4ZiksIC8qIE1FTV9VT1BfUkVUSVJFRC5TUExJVF9MT0FEUyAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4NDJkMCwgMHhmKSwgLyogTUVNX1VPUF9SRVRJUkVELlNQTElUX1NUT1JFUyAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4ODFkMCwgMHhmKSwgLyogTUVNX1VPUF9SRVRJUkVELkFOWV9MT0FEUyAqLworCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4ODJkMCwgMHhmKSwgLyogTUVNX1VPUF9SRVRJUkVELkFOWV9TVE9SRVMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4ZDEsIDB4ZiksICAgIC8qIE1FTV9MT0FEX1VPUFNfUkVUSVJFRC4qICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGQyLCAweGYpLCAgICAvKiBNRU1fTE9BRF9VT1BTX0xMQ19ISVRfUkVUSVJFRC4qICovCisJSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMmQ0LCAweGYpLCAvKiBNRU1fTE9BRF9VT1BTX01JU0NfUkVUSVJFRC5MTENfTUlTUyAqLwogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCmluZGV4IDM3NjlhYzgyLi4wODExZjVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBOZXRidXJzdCBQZXJmb21hbmNlIEV2ZW50cyAoUDQsIG9sZCBYZW9uKQorICogTmV0YnVyc3QgUGVyZm9ybWFuY2UgRXZlbnRzIChQNCwgb2xkIFhlb24pCiAgKgogICogIENvcHlyaWdodCAoQykgMjAxMCBQYXJhbGxlbHMsIEluYy4sIEN5cmlsbCBHb3JjdW5vdiA8Z29yY3Vub3ZAb3BlbnZ6Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24sIExpbiBNaW5nIDxtaW5nLm0ubGluQGludGVsLmNvbT4KQEAgLTY3OSw3ICs2NzksNyBAQAogCSAqLwogCiAJLyoKLQkgKiBpZiBhbiBldmVudCBpcyBzaGFyZWQgYWNjcm9zcyB0aGUgbG9naWNhbCB0aHJlYWRzCisJICogaWYgYW4gZXZlbnQgaXMgc2hhcmVkIGFjcm9zcyB0aGUgbG9naWNhbCB0aHJlYWRzCiAJICogdGhlIHVzZXIgbmVlZHMgc3BlY2lhbCBwZXJtaXNzaW9ucyB0byBiZSBhYmxlIHRvIHVzZSBpdAogCSAqLwogCWlmIChwNF9odF9hY3RpdmUoKSAmJiBwNF9ldmVudF9iaW5kX21hcFt2XS5zaGFyZWQpIHsKQEAgLTc5MCwxMyArNzkwLDEzIEBACiAJICoKIAkgKiBJdCdzIHN0aWxsIGFsbG93ZWQgdGhhdCB0d28gdGhyZWFkcyBzZXR1cCBzYW1lIGNhY2hlCiAJICogZXZlbnRzIHNvIHdlIGNhbid0IHNpbXBseSBjbGVhciBtZXRyaWNzIHVudGlsIHdlIGtuZXcKLQkgKiBub29uZSBpcyBkZXBlbmRpbmcgb24gdXMsIHNvIHdlIG5lZWQga2luZCBvZiBjb3VudGVyCisJICogbm8gb25lIGlzIGRlcGVuZGluZyBvbiB1cywgc28gd2UgbmVlZCBraW5kIG9mIGNvdW50ZXIKIAkgKiBmb3IgIlJlcGxheUV2ZW50IiB1c2Vycy4KIAkgKgogCSAqIFdoYXQgaXMgbW9yZSBjb21wbGV4IC0tIFJBVyBldmVudHMsIGlmIHVzZXIgKGZvciBzb21lCiAJICogcmVhc29uKSB3aWxsIHBhc3Mgc29tZSBjYWNoZSBldmVudCBtZXRyaWMgd2l0aCBpbXByb3BlcgogCSAqIGV2ZW50IG9wY29kZSAtLSBpdCdzIGZpbmUgZnJvbSBoYXJkd2FyZSBwb2ludCBvZiB2aWV3Ci0JICogYnV0IGNvbXBsZXRlbHkgbm9uc2VuY2UgZnJvbSAibWVhbmluZyIgb2Ygc3VjaCBhY3Rpb24uCisJICogYnV0IGNvbXBsZXRlbHkgbm9uc2Vuc2UgZnJvbSAibWVhbmluZyIgb2Ygc3VjaCBhY3Rpb24uCiAJICoKIAkgKiBTbyBhdCBtb21lbnQgbGV0IGxlYXZlIG1ldHJpY3MgdHVybmVkIG9uIGZvcmV2ZXIgLS0gaXQncwogCSAqIG9rIGZvciBub3cgYnV0IG5lZWQgdG8gYmUgcmV2aXNpdGVkIQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKaW5kZXggMjI3YjA0NDguLmQyMmQwYzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYwpAQCAtODYsNyArODYsNyBAQAogfQogCiAvKgotICogV2hpbGUgY2hlY2tpbmcgdGhlIGRtaSBzdHJpbmcgaW5mb21hdGlvbiwganVzdCBjaGVja2luZyB0aGUgcHJvZHVjdAorICogV2hpbGUgY2hlY2tpbmcgdGhlIGRtaSBzdHJpbmcgaW5mb3JtYXRpb24sIGp1c3QgY2hlY2tpbmcgdGhlIHByb2R1Y3QKICAqIHNlcmlhbCBrZXkgc2hvdWxkIGJlIGVub3VnaCwgYXMgdGhpcyB3aWxsIGFsd2F5cyBoYXZlIGEgVk13YXJlCiAgKiBzcGVjaWZpYyBzdHJpbmcgd2hlbiBydW5uaW5nIHVuZGVyIFZNd2FyZSBoeXBlcnZpc29yLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwppbmRleCBkNWNkMTM5Li42NDJmNzVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKQEAgLTE0LDkgKzE0LDYgQEAKIAogc3RhdGljIHZvaWQgKmtkdW1wX2J1Zl9wYWdlOwogCi0vKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwotCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfY3Jhc2hlZF9wZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pCiB7CiAjaWZuZGVmIENPTkZJR19YODZfUEFFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYwppbmRleCA5OTQ4Mjg4Li5hZmE2NGFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzY0LmMKQEAgLTEwLDkgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCi11bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKLQogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCAyMjBhMWMxLi44MWFjNmM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCkBAIC0xNzUsMjEgKzE3NSwyMSBAQAogCiB2b2lkCiBzaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIGNoYXIgKmxvZ19sdmwpCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQogewogCXByaW50aygiJXNDYWxsIFRyYWNlOlxuIiwgbG9nX2x2bCk7Ci0JZHVtcF90cmFjZSh0YXNrLCByZWdzLCBzdGFjaywgJnByaW50X3RyYWNlX29wcywgbG9nX2x2bCk7CisJZHVtcF90cmFjZSh0YXNrLCByZWdzLCBzdGFjaywgYnAsICZwcmludF90cmFjZV9vcHMsIGxvZ19sdmwpOwogfQogCiB2b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2spCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwKQogewotCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzdGFjaywgIiIpOworCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzdGFjaywgYnAsICIiKTsKIH0KIAogdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3ApCiB7Ci0Jc2hvd19zdGFja19sb2dfbHZsKHRhc2ssIE5VTEwsIHNwLCAiIik7CisJc2hvd19zdGFja19sb2dfbHZsKHRhc2ssIE5VTEwsIHNwLCAwLCAiIik7CiB9CiAKIC8qCkBAIC0xOTcsMTQgKzE5NywxNiBAQAogICovCiB2b2lkIGR1bXBfc3RhY2sodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGJwOwogCXVuc2lnbmVkIGxvbmcgc3RhY2s7CiAKKwlicCA9IHN0YWNrX2ZyYW1lKGN1cnJlbnQsIE5VTEwpOwogCXByaW50aygiUGlkOiAlZCwgY29tbTogJS4yMHMgJXMgJXMgJS4qc1xuIiwKIAkJY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCBwcmludF90YWludGVkKCksCiAJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQkoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCiAJCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKLQlzaG93X3RyYWNlKE5VTEwsIE5VTEwsICZzdGFjayk7CisJc2hvd190cmFjZShOVUxMLCBOVUxMLCAmc3RhY2ssIGJwKTsKIH0KIEVYUE9SVF9TWU1CT0woZHVtcF9zdGFjayk7CiAKQEAgLTMyMCwxNiArMzIyLDYgQEAKIAlvb3BzX2VuZChmbGFncywgcmVncywgc2lnKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb29wc19zZXR1cChjaGFyICpzKQotewotCWlmICghcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFzdHJjbXAocywgInBhbmljIikpCi0JCXBhbmljX29uX29vcHMgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm9vcHMiLCBvb3BzX3NldHVwKTsKLQogc3RhdGljIGludCBfX2luaXQga3N0YWNrX3NldHVwKGNoYXIgKnMpCiB7CiAJaWYgKCFzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCmluZGV4IDc0Y2MxZWQuLjNiOTdhODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKQEAgLTE3LDEyICsxNywxMSBAQAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKIAotdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgKnN0YWNrLAordm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAogCQljb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSkKIHsKIAlpbnQgZ3JhcGggPSAwOwotCXVuc2lnbmVkIGxvbmcgYnA7CiAKIAlpZiAoIXRhc2spCiAJCXRhc2sgPSBjdXJyZW50OwpAQCAtMzUsNyArMzQsOSBAQAogCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKIAl9CiAKLQlicCA9IHN0YWNrX2ZyYW1lKHRhc2ssIHJlZ3MpOworCWlmICghYnApCisJCWJwID0gc3RhY2tfZnJhbWUodGFzaywgcmVncyk7CisKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCB0aHJlYWRfaW5mbyAqY29udGV4dDsKIApAQCAtNTUsNyArNTYsNyBAQAogCiB2b2lkCiBzaG93X3N0YWNrX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJICAgdW5zaWduZWQgbG9uZyAqc3AsIGNoYXIgKmxvZ19sdmwpCisJCSAgIHVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQogewogCXVuc2lnbmVkIGxvbmcgKnN0YWNrOwogCWludCBpOwpAQCAtNzcsNyArNzgsNyBAQAogCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKIAl9CiAJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQlzaG93X3RyYWNlX2xvZ19sdmwodGFzaywgcmVncywgc3AsIGxvZ19sdmwpOworCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzcCwgYnAsIGxvZ19sdmwpOwogfQogCiAKQEAgLTEwMiw3ICsxMDMsNyBAQAogCQl1OCAqaXA7CiAKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIlN0YWNrOlxuIik7Ci0JCXNob3dfc3RhY2tfbG9nX2x2bChOVUxMLCByZWdzLCAmcmVncy0+c3AsIEtFUk5fRU1FUkcpOworCQlzaG93X3N0YWNrX2xvZ19sdmwoTlVMTCwgcmVncywgJnJlZ3MtPnNwLCAwLCBLRVJOX0VNRVJHKTsKIAogCQlwcmludGsoS0VSTl9FTUVSRyAiQ29kZTogIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCBhNmI2ZmNmLi5lNzFjOThkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xMzksOCArMTM5LDggQEAKICAqIHNldmVyZSBleGNlcHRpb24gKGRvdWJsZSBmYXVsdCwgbm1pLCBzdGFjayBmYXVsdCwgZGVidWcsIG1jZSkgaGFyZHdhcmUgc3RhY2sKICAqLwogCi12b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyAqc3RhY2ssCit2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCiAJCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhKQogewogCWNvbnN0IHVuc2lnbmVkIGNwdSA9IGdldF9jcHUoKTsKQEAgLTE1MCw3ICsxNTAsNiBAQAogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm87CiAJaW50IGdyYXBoID0gMDsKIAl1bnNpZ25lZCBsb25nIGR1bW15OwotCXVuc2lnbmVkIGxvbmcgYnA7CiAKIAlpZiAoIXRhc2spCiAJCXRhc2sgPSBjdXJyZW50OwpAQCAtMTYxLDcgKzE2MCw4IEBACiAJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLnNwOwogCX0KIAotCWJwID0gc3RhY2tfZnJhbWUodGFzaywgcmVncyk7CisJaWYgKCFicCkKKwkJYnAgPSBzdGFja19mcmFtZSh0YXNrLCByZWdzKTsKIAkvKgogCSAqIFByaW50IGZ1bmN0aW9uIGNhbGwgZW50cmllcyBpbiBhbGwgc3RhY2tzLCBzdGFydGluZyBhdCB0aGUKIAkgKiBjdXJyZW50IHN0YWNrIGFkZHJlc3MuIElmIHRoZSBzdGFja3MgY29uc2lzdCBvZiBuZXN0ZWQKQEAgLTIyNSw3ICsyMjUsNyBAQAogCiB2b2lkCiBzaG93X3N0YWNrX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJICAgdW5zaWduZWQgbG9uZyAqc3AsIGNoYXIgKmxvZ19sdmwpCisJCSAgIHVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQogewogCXVuc2lnbmVkIGxvbmcgKmlycV9zdGFja19lbmQ7CiAJdW5zaWduZWQgbG9uZyAqaXJxX3N0YWNrOwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIAogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0Jc2hvd190cmFjZV9sb2dfbHZsKHRhc2ssIHJlZ3MsIHNwLCBsb2dfbHZsKTsKKwlzaG93X3RyYWNlX2xvZ19sdmwodGFzaywgcmVncywgc3AsIGJwLCBsb2dfbHZsKTsKIH0KIAogdm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTI5OCw3ICsyOTgsNyBAQAogCiAJCXByaW50ayhLRVJOX0VNRVJHICJTdGFjazpcbiIpOwogCQlzaG93X3N0YWNrX2xvZ19sdmwoTlVMTCwgcmVncywgKHVuc2lnbmVkIGxvbmcgKilzcCwKLQkJCQkgICBLRVJOX0VNRVJHKTsKKwkJCQkgICAwLCBLRVJOX0VNRVJHKTsKIAogCQlwcmludGsoS0VSTl9FTUVSRyAiQ29kZTogIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IGNkZjViZmQuLjNlMmVmODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwppbmRleCBiNzJiNGE2Li44YTQ0NWEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwpAQCAtMTgsNyArMTgsNyBAQAogICogQSBub3RlIG9uIHRlcm1pbm9sb2d5OgogICogLSB0b3Agb2Ygc3RhY2s6IEFyY2hpdGVjdHVyZSBkZWZpbmVkIGludGVycnVwdCBmcmFtZSBmcm9tIFNTIHRvIFJJUAogICogYXQgdGhlIHRvcCBvZiB0aGUga2VybmVsIHByb2Nlc3Mgc3RhY2suCi0gKiAtIHBhcnRpYWwgc3RhY2sgZnJhbWU6IHBhcnRpYWxseSBzYXZlZCByZWdpc3RlcnMgdXB0byBSMTEuCisgKiAtIHBhcnRpYWwgc3RhY2sgZnJhbWU6IHBhcnRpYWxseSBzYXZlZCByZWdpc3RlcnMgdXAgdG8gUjExLgogICogLSBmdWxsIHN0YWNrIGZyYW1lOiBMaWtlIHBhcnRpYWwgc3RhY2sgZnJhbWUsIGJ1dCBhbGwgcmVnaXN0ZXIgc2F2ZWQuCiAgKgogICogU29tZSBtYWNybyB1c2FnZToKQEAgLTQyMiw3ICs0MjIsNyBAQAogRU5EKHJldF9mcm9tX2ZvcmspCiAKIC8qCi0gKiBTeXN0ZW0gY2FsbCBlbnRyeS4gVXB0byA2IGFyZ3VtZW50cyBpbiByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZC4KKyAqIFN5c3RlbSBjYWxsIGVudHJ5LiBVcCB0byA2IGFyZ3VtZW50cyBpbiByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZC4KICAqCiAgKiBTWVNDQUxMIGRvZXMgbm90IHNhdmUgYW55dGhpbmcgb24gdGhlIHN0YWNrIGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlCiAgKiBzdGFjayBwb2ludGVyLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCmluZGV4IDJkMjY3M2MuLjU2NTVjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKQEAgLTc3LDkgKzc3LDYgQEAKIAkvKiBNYWtlIE5VTEwgcG9pbnRlcnMgc2VnZmF1bHQgKi8KIAl6YXBfaWRlbnRpdHlfbWFwcGluZ3MoKTsKIAotCS8qIENsZWFudXAgdGhlIG92ZXIgbWFwcGVkIGhpZ2ggYWxpYXMgKi8KLQljbGVhbnVwX2hpZ2htYXAoKTsKLQogCW1heF9wZm5fbWFwcGVkID0gS0VSTkVMX0lNQUdFX1NJWkUgPj4gUEFHRV9TSElGVDsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRVhDRVBUSU9OX1ZFQ1RPUlM7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2kzODcuYyBiL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKaW5kZXggZTYwYzM4Yy4uMTJhZmYyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2kzODcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAqIFRoZSBfY3VycmVudF8gdGFzayBpcyB1c2luZyB0aGUgRlBVIGZvciB0aGUgZmlyc3QgdGltZQogICogc28gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0IHRoZSBteGNzciB0byBpdHMgZGVmYXVsdAogICogdmFsdWUgYXQgcmVzZXQgaWYgd2Ugc3VwcG9ydCBYTU0gaW5zdHJ1Y3Rpb25zIGFuZCB0aGVuCi0gKiByZW1lYmVyIHRoZSBjdXJyZW50IHRhc2sgaGFzIHVzZWQgdGhlIEZQVS4KKyAqIHJlbWVtYmVyIHRoZSBjdXJyZW50IHRhc2sgaGFzIHVzZWQgdGhlIEZQVS4KICAqLwogaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCmluZGV4IDk5NzRkMjEuLjcyMDkwNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAJCWNhbGxfb25fc3RhY2soX19kb19zb2Z0aXJxLCBpc3ApOwogCQkvKgotCQkgKiBTaG91bGRudCBoYXBwZW4sIHdlIHJldHVybmVkIGFib3ZlIGlmIGluX2ludGVycnVwdCgpOgorCQkgKiBTaG91bGRuJ3QgaGFwcGVuLCB3ZSByZXR1cm5lZCBhYm92ZSBpZiBpbl9pbnRlcnJ1cHQoKToKIAkJICovCiAJCVdBUk5fT05fT05DRShzb2Z0aXJxX2NvdW50KCkpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCmluZGV4IDdjNjRjNDIuLmRiYTBiMzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2tnZGIuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCXBldmVudCA9IHBlcl9jcHVfcHRyKGJyZWFraW5mb1ticmVha25vXS5wZXYsIGNwdSk7CiAJCWlmIChkYmdfcmVsZWFzZV9icF9zbG90KCpwZXZlbnQpKQogCQkJLyoKLQkJCSAqIFRoZSBkZWJ1Z2dlciBpcyByZXNwb25pc2JsZSBmb3IgaGFuZGluZyB0aGUgcmV0cnkgb24KKwkJCSAqIFRoZSBkZWJ1Z2dlciBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGluZyB0aGUgcmV0cnkgb24KIAkJCSAqIHJlbW92ZSBmYWlsdXJlLgogCQkJICovCiAJCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWNhXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWNhXzMyLmMKaW5kZXggNjNlYWY2NS4uMTc3MTgzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21jYV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tY2FfMzIuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJLyoKIAkgKiBXQVJOSU5HOiBCZSBjYXJlZnVsIHdoZW4gbWFraW5nIGNoYW5nZXMgaGVyZS4gUHV0dGluZyBhbiBhZGFwdGVyCiAJICogYW5kIHRoZSBtb3RoZXJib2FyZCBzaW11bHRhbmVvdXNseSBpbnRvIHNldHVwIG1vZGUgbWF5IHJlc3VsdCBpbgotCSAqIGRhbWFnZSB0byBjaGlwcyAoYWNjb3JkaW5nIHRvIFRoZSBJbmRpc3BlbnNpYmxlIFBDIEhhcmR3YXJlIEJvb2sKKwkgKiBkYW1hZ2UgdG8gY2hpcHMgKGFjY29yZGluZyB0byBUaGUgSW5kaXNwZW5zYWJsZSBQQyBIYXJkd2FyZSBCb29rCiAJICogYnkgSGFucy1QZXRlciBNZXNzbWVyKS4gQWxzbywgd2UgZGlzYWJsZSBzeXN0ZW0gaW50ZXJydXB0cyAoc28KIAkgKiB0aGF0IHdlIGFyZSBub3QgZGlzdHVyYmVkIGluIHRoZSBtaWRkbGUgb2YgdGhpcykuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwppbmRleCAwMWIwZjZkLi42Zjc4OWE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTg4Myw3ICs4ODMsNyBAQAogCiAJaWYgKCFtcGNfbmV3X3BoeXMpIHsKIAkJdW5zaWduZWQgY2hhciBvbGQsIG5ldzsKLQkJLyogY2hlY2sgaWYgd2UgY2FuIGNoYW5nZSB0aGUgcG9zdGlvbiAqLworCQkvKiBjaGVjayBpZiB3ZSBjYW4gY2hhbmdlIHRoZSBwb3NpdGlvbiAqLwogCQltcGMtPmNoZWNrc3VtID0gMDsKIAkJb2xkID0gbXBmX2NoZWNrc3VtKCh1bnNpZ25lZCBjaGFyICopbXBjLCBtcGMtPmxlbmd0aCk7CiAJCW1wYy0+Y2hlY2tzdW0gPSAweGZmOwpAQCAtODkyLDcgKzg5Miw3IEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJtcGMgaXMgcmVhZG9ubHksIHBsZWFzZSB0cnkgYWxsb2NfbXB0YWJsZSBpbnN0ZWFkXG4iKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gInVzZSBpbi1wb3NpdG9uIHJlcGxhY2luZ1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gInVzZSBpbi1wb3NpdGlvbiByZXBsYWNpbmdcbiIpOwogCX0gZWxzZSB7CiAJCW1wZi0+cGh5c3B0ciA9IG1wY19uZXdfcGh5czsKIAkJbXBjX25ldyA9IHBoeXNfdG9fdmlydChtcGNfbmV3X3BoeXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYwppbmRleCBmNTZhMTE3Li5lOGMzM2EzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKIAogCWlmIChwY2lfZGV2ID09IFBDSV9ERVZJQ0VfSURfSUJNX0NBTElPQzIpIHsKIAkJLyoKLQkJICogRklYTUU6IHByb3Blcmx5IHNjYW4gZm9yIGRldmljZXMgYWNjcm9zcyB0aGUKKwkJICogRklYTUU6IHByb3Blcmx5IHNjYW4gZm9yIGRldmljZXMgYWNyb3NzIHRoZQogCQkgKiBQQ0ktdG8tUENJIGJyaWRnZSBvbiBldmVyeSBDYWxJT0MyIHBvcnQuCiAJCSAqLwogCQlyZXR1cm4gMTsKQEAgLTEyOTUsNyArMTI5NSw3IEBACiAKIC8qCiAgKiBjYWxnYXJ5X2luaXRfYml0bWFwX2Zyb21fdGNlX3RhYmxlKCk6Ci0gKiBGdW50aW9uIGZvciBrZHVtcCBjYXNlLiBJbiB0aGUgc2Vjb25kL2tkdW1wIGtlcm5lbCBpbml0aWFsaXplCisgKiBGdW5jdGlvbiBmb3Iga2R1bXAgY2FzZS4gSW4gdGhlIHNlY29uZC9rZHVtcCBrZXJuZWwgaW5pdGlhbGl6ZQogICogdGhlIGJpdG1hcCBiYXNlZCBvbiB0aGUgdGNlIHRhYmxlIGVudHJpZXMgb2J0YWluZWQgZnJvbSBmaXJzdCBrZXJuZWwKICAqLwogc3RhdGljIHZvaWQgY2FsZ2FyeV9pbml0X2JpdG1hcF9mcm9tX3RjZV90YWJsZShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDk5ZmEzYWQuLmQ0NmNiZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtODcsNyArODcsNyBAQAogdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc2hvd19yZWdpc3RlcnMocmVncyk7Ci0Jc2hvd190cmFjZShOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpKTsKKwlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICh1bnNpZ25lZCBsb25nICopa2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyksIDApOwogfQogCiB2b2lkIHNob3dfcmVnc19jb21tb24odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggOWQ0M2IyOC4uNWEwNDg0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTI5NCwzMCArMjk0LDExIEBACiAJZWxzZQogCQlkaXJlY3RfZ2JwYWdlcyA9IDA7CiB9Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjbGVhbnVwX2hpZ2htYXBfYnJrX2VuZCh2b2lkKQotewotCXB1ZF90ICpwdWQ7Ci0JcG1kX3QgKnBtZDsKLQotCW1tdV9jcjRfZmVhdHVyZXMgPSByZWFkX2NyNCgpOwotCi0JLyoKLQkgKiBfYnJrX2VuZCBjYW5ub3QgY2hhbmdlIGFueW1vcmUsIGJ1dCBpdCBhbmQgX2VuZCBtYXkgYmUKLQkgKiBsb2NhdGVkIG9uIGRpZmZlcmVudCAyTSBwYWdlcy4gY2xlYW51cF9oaWdobWFwKCksIGhvd2V2ZXIsCi0JICogY2FuIG9ubHkgY29uc2lkZXIgX2VuZCB3aGVuIGl0IHJ1bnMsIHNvIGRlc3Ryb3kgYW55Ci0JICogbWFwcGluZ3MgYmV5b25kIF9icmtfZW5kIGhlcmUuCi0JICovCi0JcHVkID0gcHVkX29mZnNldChwZ2Rfb2Zmc2V0X2soX2Jya19lbmQpLCBfYnJrX2VuZCk7Ci0JcG1kID0gcG1kX29mZnNldChwdWQsIF9icmtfZW5kIC0gMSk7Ci0Jd2hpbGUgKCsrcG1kIDw9IHBtZF9vZmZzZXQocHVkLCAodW5zaWduZWQgbG9uZylfZW5kIC0gMSkpCi0JCXBtZF9jbGVhcihwbWQpOwotfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2dicGFnZXModm9pZCkKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbnVwX2hpZ2htYXBfYnJrX2VuZCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGNsZWFudXBfaGlnaG1hcCh2b2lkKQogewogfQogI2VuZGlmCkBAIC0zMzAsOCArMzExLDYgQEAKIAkvKiBNYXJrIGJyayBhcmVhIGFzIGxvY2tlZCBkb3duIGFuZCBubyBsb25nZXIgdGFraW5nIGFueQogCSAgIG5ldyBhbGxvY2F0aW9ucyAqLwogCV9icmtfc3RhcnQgPSAwOwotCi0JY2xlYW51cF9oaWdobWFwX2Jya19lbmQoKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApAQCAtNjQwLDI4ICs2MTksNiBAQAogCiB9CiAKLS8qCi0gKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQotICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCi0gKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KLSAqLwotCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLS8qIGVsZmNvcmVoZHI9IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgZWxmIGNvcmUgaGVhZGVyCi0gKiBzdG9yZWQgYnkgdGhlIGNyYXNoZWQga2VybmVsLiBUaGlzIG9wdGlvbiB3aWxsIGJlIHBhc3NlZAotICogYnkga2V4ZWMgbG9hZGVyIHRvIHRoZSBjYXB0dXJlIGtlcm5lbC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgc2V0dXBfZWxmY29yZWhkcihjaGFyICphcmcpCi17Ci0JY2hhciAqZW5kOwotCWlmICghYXJnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbGZjb3JlaGRyX2FkZHIgPSBtZW1wYXJzZShhcmcsICZlbmQpOwotCXJldHVybiBlbmQgPiBhcmcgPyAwIDogLUVJTlZBTDsKLX0KLWVhcmx5X3BhcmFtKCJlbGZjb3JlaGRyIiwgc2V0dXBfZWxmY29yZWhkcik7Ci0jZW5kaWYKLQogc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfaWJmdF9yZWdpb24odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemUgPSAwOwpAQCAtOTUwLDYgKzkwNyw4IEBACiAJICovCiAJcmVzZXJ2ZV9icmsoKTsKIAorCWNsZWFudXBfaGlnaG1hcCgpOworCiAJbWVtYmxvY2suY3VycmVudF9saW1pdCA9IGdldF9tYXhfbWFwcGVkKCk7CiAJbWVtYmxvY2tfeDg2X2ZpbGwoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggOTM4YzhlMS4uNjUxNTczMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC03Myw3ICs3Myw3IEBACiAgKi8KIHZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQogewotCWR1bXBfdHJhY2UoY3VycmVudCwgTlVMTCwgTlVMTCwgJnNhdmVfc3RhY2tfb3BzLCB0cmFjZSk7CisJZHVtcF90cmFjZShjdXJyZW50LCBOVUxMLCBOVUxMLCAwLCAmc2F2ZV9zdGFja19vcHMsIHRyYWNlKTsKIAlpZiAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpCiAJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gVUxPTkdfTUFYOwogfQpAQCAtODEsMTQgKzgxLDE0IEBACiAKIHZvaWQgc2F2ZV9zdGFja190cmFjZV9yZWdzKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWR1bXBfdHJhY2UoY3VycmVudCwgcmVncywgTlVMTCwgJnNhdmVfc3RhY2tfb3BzLCB0cmFjZSk7CisJZHVtcF90cmFjZShjdXJyZW50LCByZWdzLCBOVUxMLCAwLCAmc2F2ZV9zdGFja19vcHMsIHRyYWNlKTsKIAlpZiAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpCiAJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gVUxPTkdfTUFYOwogfQogCiB2b2lkIHNhdmVfc3RhY2tfdHJhY2VfdHNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQogewotCWR1bXBfdHJhY2UodHNrLCBOVUxMLCBOVUxMLCAmc2F2ZV9zdGFja19vcHNfbm9zY2hlZCwgdHJhY2UpOworCWR1bXBfdHJhY2UodHNrLCBOVUxMLCBOVUxMLCAwLCAmc2F2ZV9zdGFja19vcHNfbm9zY2hlZCwgdHJhY2UpOwogCWlmICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcykKIAkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBVTE9OR19NQVg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jIGIvYXJjaC94ODYva2VybmVsL3N0ZXAuYwppbmRleCA1OGRlNDVlLi43OTc3ZjBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGVwLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCSAqIE1ha2Ugc3VyZSBibG9jayBzdGVwcGluZyAoQlRGKSBpcyBub3QgZW5hYmxlZCB1bmxlc3MgaXQgc2hvdWxkIGJlLgogCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCB0cnkgdG8gd29ycnkgYWJvdXQgYW55IGlzX3NldHRpbmdfdHJhcF9mbGFnKCkKIAkgKiBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIGZpcnN0IHdoZW4gdXNpbmcgYmxvY2sgc3RlcHBpbmcuCi0JICogU28gbm9vbmUgc2hvdWxkIHRyeSB0byB1c2UgZGVidWdnZXIgYmxvY2sgc3RlcHBpbmcgaW4gYSBwcm9ncmFtCisJICogU28gbm8gb25lIHNob3VsZCB0cnkgdG8gdXNlIGRlYnVnZ2VyIGJsb2NrIHN0ZXBwaW5nIGluIGEgcHJvZ3JhbQogCSAqIHRoYXQgdXNlcyB1c2VyLW1vZGUgc2luZ2xlIHN0ZXBwaW5nIGl0c2VsZi4KIAkgKi8KIAlpZiAoZW5hYmxlX3NpbmdsZV9zdGVwKGNoaWxkKSAmJiBibG9jaykgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKaW5kZXggNWYxODE3NC4uYWJjZTM0ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCkBAIC0zNDMsMyArMzQzLDQgQEAKIAkubG9uZyBzeXNfbmFtZV90b19oYW5kbGVfYXQKIAkubG9uZyBzeXNfb3Blbl9ieV9oYW5kbGVfYXQKIAkubG9uZyBzeXNfY2xvY2tfYWRqdGltZQorCS5sb25nIHN5c19zeW5jZnMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggN2U0NTE1OS4uODkyNzQ4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKQEAgLTM5LDcgKzM5LDcgQEAKIAkvKgogCSAqIENQVTAgY2Fubm90IGJlIG9mZmxpbmVkIGR1ZSB0byBzZXZlcmFsCiAJICogcmVzdHJpY3Rpb25zIGFuZCBhc3N1bXB0aW9ucyBpbiBrZXJuZWwuIFRoaXMgYmFzaWNhbGx5Ci0JICogZG9lc250IGFkZCBhIGNvbnRyb2wgZmlsZSwgb25lIGNhbm5vdCBhdHRlbXB0IHRvIG9mZmxpbmUKKwkgKiBkb2Vzbid0IGFkZCBhIGNvbnRyb2wgZmlsZSwgb25lIGNhbm5vdCBhdHRlbXB0IHRvIG9mZmxpbmUKIAkgKiBCU1AuCiAJICoKIAkgKiBBbHNvIGNlcnRhaW4gUENJIHF1aXJrcyByZXF1aXJlIG5vdCB0byBlbmFibGUgaG90cGx1ZyBjb250cm9sCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggZmZlNTc1NS4uOTMzNWJmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJICogdGhlIGRlbHRhIHRvIHRoZSBwcmV2aW91cyByZWFkLiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBtaW4KIAkgKiBhbmQgbWF4IHZhbHVlcyBvZiB0aGF0IGRlbHRhLiBUaGUgZGVsdGEgaXMgbW9zdGx5IGRlZmluZWQKIAkgKiBieSB0aGUgSU8gdGltZSBvZiB0aGUgUElUIGFjY2Vzcywgc28gd2UgY2FuIGRldGVjdCB3aGVuIGEKLQkgKiBTTUkvU01NIGRpc3R1cmJhbmNlIGhhcHBlbmQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzLiBJZiB0aGUKKwkgKiBTTUkvU01NIGRpc3R1cmJhbmNlIGhhcHBlbmVkIGJldHdlZW4gdGhlIHR3byByZWFkcy4gSWYgdGhlCiAJICogbWF4aW11bSB0aW1lIGlzIHNpZ25pZmljYW50bHkgbGFyZ2VyIHRoYW4gdGhlIG1pbmltdW0gdGltZSwKIAkgKiB0aGVuIHdlIGRpc2NhcmQgdGhlIHJlc3VsdCBhbmQgaGF2ZSBhbm90aGVyIHRyeS4KIAkgKgpAQCAtOTAwLDcgKzkwMCw3IEBACiAgKiB0aW1lciBiYXNlZCwgaW5zdGVhZCBvZiBsb29wIGJhc2VkLCB3ZSBkb24ndCBibG9jayB0aGUgYm9vdAogICogcHJvY2VzcyB3aGlsZSB0aGlzIGxvbmdlciBjYWxpYnJhdGlvbiBpcyBkb25lLgogICoKLSAqIElmIHRoZXJlIGFyZSBhbnkgY2FsaWJyYXRpb24gYW5vbW9saWVzICh0b28gbWFueSBTTUlzLCBldGMpLAorICogSWYgdGhlcmUgYXJlIGFueSBjYWxpYnJhdGlvbiBhbm9tYWxpZXMgKHRvbyBtYW55IFNNSXMsIGV0YyksCiAgKiBvciB0aGUgcmVmaW5lZCBjYWxpYnJhdGlvbiBpcyBvZmYgYnkgMSUgb2YgdGhlIGZhc3QgZWFybHkKICAqIGNhbGlicmF0aW9uLCB3ZSB0aHJvdyBvdXQgdGhlIG5ldyBjYWxpYnJhdGlvbiBhbmQgdXNlIHRoZQogICogZWFybHkgY2FsaWJyYXRpb24uCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdmVyaWZ5X2NwdS5TIGIvYXJjaC94ODYva2VybmVsL3ZlcmlmeV9jcHUuUwppbmRleCAwZWRlZmMxLi5iOTI0MmJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmVyaWZ5X2NwdS5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92ZXJpZnlfY3B1LlMKQEAgLTE4LDcgKzE4LDcgQEAKICAqCVRoaXMgZmlsZSBpcyBleHBlY3RlZCB0byBydW4gaW4gMzJiaXQgY29kZS4gIEN1cnJlbnRseToKICAqCiAgKglhcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TOiBCb290IGNwdSB2ZXJpZmljYXRpb24KLSAqCWFyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlM6IHNlY29uZGFyeSBwcm9jZXNzb3IgdmVyZmljYXRpb24KKyAqCWFyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlM6IHNlY29uZGFyeSBwcm9jZXNzb3IgdmVyaWZpY2F0aW9uCiAgKglhcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TOiBwcm9jZXNzb3Igc3RhcnR1cAogICoKICAqCXZlcmlmeV9jcHUsIHJldHVybnMgdGhlIHN0YXR1cyBvZiBsb25nbW9kZSBhbmQgU1NFIGluIHJlZ2lzdGVyICVlYXguCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYyBiL2FyY2gveDg2L2tlcm5lbC94c2F2ZS5jCmluZGV4IDU0NzEyODUuLmEzOTExMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94c2F2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC94c2F2ZS5jCkBAIC01Myw3ICs1Myw3IEBACiAKIAkvKgogCSAqIE5vbmUgb2YgdGhlIGZlYXR1cmUgYml0cyBhcmUgaW4gaW5pdCBzdGF0ZS4gU28gbm90aGluZyBlbHNlCi0JICogdG8gZG8gZm9yIHVzLCBhcyB0aGUgbWVtb3J5IGxheW91dCBpcyB1cHRvIGRhdGUuCisJICogdG8gZG8gZm9yIHVzLCBhcyB0aGUgbWVtb3J5IGxheW91dCBpcyB1cCB0byBkYXRlLgogCSAqLwogCWlmICgoeHN0YXRlX2J2ICYgcGNudHh0X21hc2spID09IHBjbnR4dF9tYXNrKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDc1MTQwNTAuLmM2Mzk3NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiB3ZSBjYWxsIG1tdV9zZXRfc3B0ZSgpIHdpdGggaG9zdF93cml0YWJsZSA9IHRydWUgYmVhY3VzZSB0aGF0CisJICogd2UgY2FsbCBtbXVfc2V0X3NwdGUoKSB3aXRoIGhvc3Rfd3JpdGFibGUgPSB0cnVlIGJlY2F1c2UgdGhhdAogCSAqIHZjcHUtPmFyY2gudXBkYXRlX3B0ZS5wZm4gd2FzIGZldGNoZWQgZnJvbSBnZXRfdXNlcl9wYWdlcyh3cml0ZSA9IDEpLgogCSAqLwogCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlLCBzcC0+cm9sZS5hY2Nlc3MsIHB0ZV9hY2Nlc3MsIDAsIDAsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdGltZXIuYyBiL2FyY2gveDg2L2t2bS90aW1lci5jCmluZGV4IGZjN2ExMDEuLmFiZDg2ZTg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdGltZXIuYworKysgYi9hcmNoL3g4Ni9rdm0vdGltZXIuYwpAQCAtMjUsNyArMjUsNyBAQAogCiAJLyoKIAkgKiBUaGVyZSBpcyBhIHJhY2Ugd2luZG93IGJldHdlZW4gcmVhZGluZyBhbmQgaW5jcmVtZW50aW5nLCBidXQgd2UgZG8KLQkgKiBub3QgY2FyZSBhYm91dCBwb3RlbnRpYWxseSBsb29zaW5nIHRpbWVyIGV2ZW50cyBpbiB0aGUgIXJlaW5qZWN0CisJICogbm90IGNhcmUgYWJvdXQgcG90ZW50aWFsbHkgbG9zaW5nIHRpbWVyIGV2ZW50cyBpbiB0aGUgIXJlaW5qZWN0CiAJICogY2FzZSBhbnl3YXkuIE5vdGU6IEtWTV9SRVFfUEVORElOR19USU1FUiBpcyBpbXBsaWNpdGx5IGNoZWNrZWQKIAkgKiBpbiB2Y3B1X2VudGVyX2d1ZXN0LgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IGYxZTQwMjUuLjU4ZjUxN2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTEwMzEsNyArMTAzMSw3IEBACiAJLyoKIAkgKiBTcGVjaWFsIGNhc2U6IGNsb3NlIHdyaXRlIHRvIFRTQyB3aXRoaW4gNSBzZWNvbmRzIG9mCiAJICogYW5vdGhlciBDUFUgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gYXR0ZW1wdCB0byBzeW5jaHJvbml6ZQotCSAqIFRoZSA1IHNlY29uZHMgaXMgdG8gYWNjb21vZGF0ZSBob3N0IGxvYWQgLyBzd2FwcGluZyBhcworCSAqIFRoZSA1IHNlY29uZHMgaXMgdG8gYWNjb21tb2RhdGUgaG9zdCBsb2FkIC8gc3dhcHBpbmcgYXMKIAkgKiB3ZWxsIGFzIGFueSByZXNldCBvZiBUU0MgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuCiAJICoKIAkgKiBJbiB0aGF0IGNhc2UsIGZvciBhIHJlbGlhYmxlIFRTQywgd2UgY2FuIG1hdGNoIFRTQyBvZmZzZXRzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggYjllYzFjNy4uMWNkNjA4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC0zOTcsNyArMzk3LDcgQEAKICAqIGluc3RlYWQgd2UganVzdCB1c2UgdGhlIHJlYWwgImNwdWlkIiBpbnN0cnVjdGlvbi4gIFRoZW4gSSBwcmV0dHkgbXVjaCB0dXJuZWQKICAqIG9mZiBmZWF0dXJlIGJpdHMgdW50aWwgdGhlIEd1ZXN0IGJvb3RlZC4gIChEb24ndCBzYXkgdGhhdDogeW91J2xsIGRhbWFnZQogICogbGd1ZXN0IHNhbGVzISkgIFNodXQgdXAsIGlubmVyIHZvaWNlISAgKEhleSwganVzdCBwb2ludGluZyBvdXQgdGhhdCB0aGlzIGlzCi0gKiBoYXJkbHkgZnV0dXJlIHByb29mLikgIE5vb25lJ3MgbGlzdGVuaW5nISAgVGhleSBkb24ndCBsaWtlIHlvdSBhbnl3YXksCisgKiBoYXJkbHkgZnV0dXJlIHByb29mLikgIE5vIG9uZSdzIGxpc3RlbmluZyEgIFRoZXkgZG9uJ3QgbGlrZSB5b3UgYW55d2F5LAogICogcGFyZW50aGV0aWMgd2VpcmRvIQogICoKICAqIFJlcGxhY2luZyB0aGUgY3B1aWQgc28gd2UgY2FuIHR1cm4gZmVhdHVyZXMgb2ZmIGlzIGdyZWF0IGZvciB0aGUga2VybmVsLCBidXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUyBiL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUwppbmRleCBhNDYwMTU4Li45OWU0ODI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKKysrIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCkBAIC0xMTcsNyArMTE3LDcgQEAKICAqIHJkeCBjb3VudAogICoKICAqIE91dHB1dDoKLSAqIGVheCB1bmNvcGllZCBieXRlcyBvciAwIGlmIHN1Y2Nlc3NmdWxsLgorICogZWF4IHVuY29waWVkIGJ5dGVzIG9yIDAgaWYgc3VjY2Vzc2Z1bC4KICAqLwogRU5UUlkoY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQpCiAJQ0ZJX1NUQVJUUFJPQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NzdW0tY29weV82NC5TIGIvYXJjaC94ODYvbGliL2NzdW0tY29weV82NC5TCmluZGV4IGYwZGJhMzYuLmZiOTAzYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9jc3VtLWNvcHlfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvY3N1bS1jb3B5XzY0LlMKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDIsMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCi0gKgkKKyAqIENvcHlyaWdodCAyMDAyLCAyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KKyAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuIE5vIHdhcnJhbnR5IGZvciBhbnl0aGluZyBnaXZlbiBhdCBhbGwuCkBAIC0xMSw4MiArMTEsODIgQEAKIAogLyoKICAqIENoZWNrc3VtIGNvcHkgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcuCi0gKiBPbiBleGNlcHRpb25zIHNyY19lcnJfcHRyIG9yIGRzdF9lcnJfcHRyIGlzIHNldCB0byAtRUZBVUxUIGFuZCB0aGUgCisgKiBPbiBleGNlcHRpb25zIHNyY19lcnJfcHRyIG9yIGRzdF9lcnJfcHRyIGlzIHNldCB0byAtRUZBVUxUIGFuZCB0aGUKICAqIGRlc3RpbmF0aW9uIGlzIHplcm9lZC4KLSAqIAorICoKICAqIElucHV0CiAgKiByZGkgIHNvdXJjZQogICogcnNpICBkZXN0aW5hdGlvbgogICogZWR4ICBsZW4gKDMyYml0KQotICogZWN4ICBzdW0gKDMyYml0KSAKKyAqIGVjeCAgc3VtICgzMmJpdCkKICAqIHI4ICAgc3JjX2Vycl9wdHIgKGludCkKICAqIHI5ICAgZHN0X2Vycl9wdHIgKGludCkKICAqCiAgKiBPdXRwdXQKICAqIGVheCAgNjRiaXQgc3VtLiB1bmRlZmluZWQgaW4gY2FzZSBvZiBleGNlcHRpb24uCi0gKiAKLSAqIFdyYXBwZXJzIG5lZWQgdG8gdGFrZSBjYXJlIG9mIHZhbGlkIGV4Y2VwdGlvbiBzdW0gYW5kIHplcm9pbmcuCQkgCisgKgorICogV3JhcHBlcnMgbmVlZCB0byB0YWtlIGNhcmUgb2YgdmFsaWQgZXhjZXB0aW9uIHN1bSBhbmQgemVyb2luZy4KICAqIFRoZXkgYWxzbyBzaG91bGQgYWxpZ24gc291cmNlIG9yIGRlc3RpbmF0aW9uIHRvIDggYnl0ZXMuCiAgKi8KIAogCS5tYWNybyBzb3VyY2UKIDEwOgotCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLnNlY3Rpb24gX19leF90YWJsZSwgImEiCiAJLmFsaWduIDgKLQkucXVhZCAxMGIsLkxiYWRfc291cmNlCisJLnF1YWQgMTBiLCAuTGJhZF9zb3VyY2UKIAkucHJldmlvdXMKIAkuZW5kbQotCQkKKwogCS5tYWNybyBkZXN0CiAyMDoKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgogCS5hbGlnbiA4Ci0JLnF1YWQgMjBiLC5MYmFkX2Rlc3QKKwkucXVhZCAyMGIsIC5MYmFkX2Rlc3QKIAkucHJldmlvdXMKIAkuZW5kbQotCQkJCisKIAkubWFjcm8gaWdub3JlIEw9LkxpZ25vcmUKIDMwOgotCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLnNlY3Rpb24gX19leF90YWJsZSwgImEiCiAJLmFsaWduIDgKLQkucXVhZCAzMGIsXEwKKwkucXVhZCAzMGIsIFxMCiAJLnByZXZpb3VzCiAJLmVuZG0KLQkKLQkJCQkKKworCiBFTlRSWShjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKQogCUNGSV9TVEFSVFBST0MKLQljbXBsCSAkMyo2NCwlZWR4Ci0JamxlCSAuTGlnbm9yZQorCWNtcGwJJDMqNjQsICVlZHgKKwlqbGUJLkxpZ25vcmUKIAotLkxpZ25vcmU6CQkKLQlzdWJxICAkNyo4LCVyc3AKKy5MaWdub3JlOgorCXN1YnEgICQ3KjgsICVyc3AKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNyo4Ci0JbW92cSAgJXJieCwyKjgoJXJzcCkKKwltb3ZxICAlcmJ4LCAyKjgoJXJzcCkKIAlDRklfUkVMX09GRlNFVCByYngsIDIqOAotCW1vdnEgICVyMTIsMyo4KCVyc3ApCisJbW92cSAgJXIxMiwgMyo4KCVyc3ApCiAJQ0ZJX1JFTF9PRkZTRVQgcjEyLCAzKjgKLQltb3ZxICAlcjE0LDQqOCglcnNwKQorCW1vdnEgICVyMTQsIDQqOCglcnNwKQogCUNGSV9SRUxfT0ZGU0VUIHIxNCwgNCo4Ci0JbW92cSAgJXIxMyw1KjgoJXJzcCkKKwltb3ZxICAlcjEzLCA1KjgoJXJzcCkKIAlDRklfUkVMX09GRlNFVCByMTMsIDUqOAotCW1vdnEgICVyYnAsNio4KCVyc3ApCisJbW92cSAgJXJicCwgNio4KCVyc3ApCiAJQ0ZJX1JFTF9PRkZTRVQgcmJwLCA2KjgKIAotCW1vdnEgICVyOCwoJXJzcCkKLQltb3ZxICAlcjksMSo4KCVyc3ApCi0JCi0JbW92bCAgJWVjeCwlZWF4Ci0JbW92bCAgJWVkeCwlZWN4CisJbW92cSAgJXI4LCAoJXJzcCkKKwltb3ZxICAlcjksIDEqOCglcnNwKQogCi0JeG9ybCAgJXI5ZCwlcjlkCi0JbW92cSAgJXJjeCwlcjEyCisJbW92bCAgJWVjeCwgJWVheAorCW1vdmwgICVlZHgsICVlY3gKIAotCXNocnEgICQ2LCVyMTIKLQlqeiAgICAuTGhhbmRsZV90YWlsICAgICAgIC8qIDwgNjQgKi8KKwl4b3JsICAlcjlkLCAlcjlkCisJbW92cSAgJXJjeCwgJXIxMgorCisJc2hycSAgJDYsICVyMTIKKwlqegkuTGhhbmRsZV90YWlsICAgICAgIC8qIDwgNjQgKi8KIAogCWNsYwotCQorCiAJLyogbWFpbiBsb29wLiBjbGVhciBpbiA2NCBieXRlIGJsb2NrcyAqLwogCS8qIHI5OiB6ZXJvLCByODogdGVtcDIsIHJieDogdGVtcDEsIHJheDogc3VtLCByY3g6IHNhdmVkIGxlbmd0aCAqLwogCS8qIHIxMToJdGVtcDMsIHJkeDogdGVtcDQsIHIxMiBsb29wY250ICovCkBAIC05NCwxNTYgKzk0LDE1NiBAQAogCS5wMmFsaWduIDQKIC5MbG9vcDoKIAlzb3VyY2UKLQltb3ZxICAoJXJkaSksJXJieAorCW1vdnEgICglcmRpKSwgJXJieAogCXNvdXJjZQotCW1vdnEgIDgoJXJkaSksJXI4CisJbW92cSAgOCglcmRpKSwgJXI4CiAJc291cmNlCi0JbW92cSAgMTYoJXJkaSksJXIxMQorCW1vdnEgIDE2KCVyZGkpLCAlcjExCiAJc291cmNlCi0JbW92cSAgMjQoJXJkaSksJXJkeAorCW1vdnEgIDI0KCVyZGkpLCAlcmR4CiAKIAlzb3VyY2UKLQltb3ZxICAzMiglcmRpKSwlcjEwCisJbW92cSAgMzIoJXJkaSksICVyMTAKIAlzb3VyY2UKLQltb3ZxICA0MCglcmRpKSwlcmJwCisJbW92cSAgNDAoJXJkaSksICVyYnAKIAlzb3VyY2UKLQltb3ZxICA0OCglcmRpKSwlcjE0CisJbW92cSAgNDgoJXJkaSksICVyMTQKIAlzb3VyY2UKLQltb3ZxICA1NiglcmRpKSwlcjEzCi0JCQorCW1vdnEgIDU2KCVyZGkpLCAlcjEzCisKIAlpZ25vcmUgMmYKIAlwcmVmZXRjaHQwIDUqNjQoJXJkaSkKLTI6CQkJCQkJCQotCWFkY3EgICVyYngsJXJheAotCWFkY3EgICVyOCwlcmF4Ci0JYWRjcSAgJXIxMSwlcmF4Ci0JYWRjcSAgJXJkeCwlcmF4Ci0JYWRjcSAgJXIxMCwlcmF4Ci0JYWRjcSAgJXJicCwlcmF4Ci0JYWRjcSAgJXIxNCwlcmF4Ci0JYWRjcSAgJXIxMywlcmF4CisyOgorCWFkY3EgICVyYngsICVyYXgKKwlhZGNxICAlcjgsICVyYXgKKwlhZGNxICAlcjExLCAlcmF4CisJYWRjcSAgJXJkeCwgJXJheAorCWFkY3EgICVyMTAsICVyYXgKKwlhZGNxICAlcmJwLCAlcmF4CisJYWRjcSAgJXIxNCwgJXJheAorCWFkY3EgICVyMTMsICVyYXgKIAogCWRlY2wgJXIxMmQKLQkKLQlkZXN0Ci0JbW92cSAlcmJ4LCglcnNpKQotCWRlc3QKLQltb3ZxICVyOCw4KCVyc2kpCi0JZGVzdAotCW1vdnEgJXIxMSwxNiglcnNpKQotCWRlc3QKLQltb3ZxICVyZHgsMjQoJXJzaSkKIAogCWRlc3QKLQltb3ZxICVyMTAsMzIoJXJzaSkKKwltb3ZxICVyYngsICglcnNpKQogCWRlc3QKLQltb3ZxICVyYnAsNDAoJXJzaSkKKwltb3ZxICVyOCwgOCglcnNpKQogCWRlc3QKLQltb3ZxICVyMTQsNDgoJXJzaSkKKwltb3ZxICVyMTEsIDE2KCVyc2kpCiAJZGVzdAotCW1vdnEgJXIxMyw1NiglcnNpKQotCQorCW1vdnEgJXJkeCwgMjQoJXJzaSkKKworCWRlc3QKKwltb3ZxICVyMTAsIDMyKCVyc2kpCisJZGVzdAorCW1vdnEgJXJicCwgNDAoJXJzaSkKKwlkZXN0CisJbW92cSAlcjE0LCA0OCglcnNpKQorCWRlc3QKKwltb3ZxICVyMTMsIDU2KCVyc2kpCisKIDM6Ci0JCi0JbGVhcSA2NCglcmRpKSwlcmRpCi0JbGVhcSA2NCglcnNpKSwlcnNpCiAKLQlqbnogICAuTGxvb3AKKwlsZWFxIDY0KCVyZGkpLCAlcmRpCisJbGVhcSA2NCglcnNpKSwgJXJzaQogCi0JYWRjcSAgJXI5LCVyYXgKKwlqbnoJLkxsb29wCiAKLQkvKiBkbyBsYXN0IHVwdG8gNTYgYnl0ZXMgKi8KKwlhZGNxICAlcjksICVyYXgKKworCS8qIGRvIGxhc3QgdXAgdG8gNTYgYnl0ZXMgKi8KIC5MaGFuZGxlX3RhaWw6CiAJLyogZWN4Ogljb3VudCAqLwotCW1vdmwgJWVjeCwlcjEwZAotCWFuZGwgJDYzLCVlY3gKLQlzaHJsICQzLCVlY3gKLQlqeiAJIC5MZm9sZAorCW1vdmwgJWVjeCwgJXIxMGQKKwlhbmRsICQ2MywgJWVjeAorCXNocmwgJDMsICVlY3gKKwlqegkuTGZvbGQKIAljbGMKIAkucDJhbGlnbiA0Ci0uTGxvb3BfODoJCisuTGxvb3BfODoKIAlzb3VyY2UKLQltb3ZxICglcmRpKSwlcmJ4Ci0JYWRjcSAlcmJ4LCVyYXgKKwltb3ZxICglcmRpKSwgJXJieAorCWFkY3EgJXJieCwgJXJheAogCWRlY2wgJWVjeAogCWRlc3QKLQltb3ZxICVyYngsKCVyc2kpCi0JbGVhcSA4KCVyc2kpLCVyc2kgLyogcHJlc2VydmUgY2FycnkgKi8KLQlsZWFxIDgoJXJkaSksJXJkaQorCW1vdnEgJXJieCwgKCVyc2kpCisJbGVhcSA4KCVyc2kpLCAlcnNpIC8qIHByZXNlcnZlIGNhcnJ5ICovCisJbGVhcSA4KCVyZGkpLCAlcmRpCiAJam56CS5MbG9vcF84Ci0JYWRjcSAlcjksJXJheAkvKiBhZGQgaW4gY2FycnkgKi8KKwlhZGNxICVyOSwgJXJheAkvKiBhZGQgaW4gY2FycnkgKi8KIAogLkxmb2xkOgogCS8qIHJlZHVjZSBjaGVja3N1bSB0byAzMmJpdHMgKi8KLQltb3ZsICVlYXgsJWVieAotCXNocnEgJDMyLCVyYXgKLQlhZGRsICVlYngsJWVheAotCWFkY2wgJXI5ZCwlZWF4CisJbW92bCAlZWF4LCAlZWJ4CisJc2hycSAkMzIsICVyYXgKKwlhZGRsICVlYngsICVlYXgKKwlhZGNsICVyOWQsICVlYXgKIAotCS8qIGRvIGxhc3QgdXB0byA2IGJ5dGVzICovCQorCS8qIGRvIGxhc3QgdXAgdG8gNiBieXRlcyAqLwogLkxoYW5kbGVfNzoKLQltb3ZsICVyMTBkLCVlY3gKLQlhbmRsICQ3LCVlY3gKLQlzaHJsICQxLCVlY3gKKwltb3ZsICVyMTBkLCAlZWN4CisJYW5kbCAkNywgJWVjeAorCXNocmwgJDEsICVlY3gKIAlqeiAgIC5MaGFuZGxlXzEKLQltb3ZsICQyLCVlZHgKLQl4b3JsICVlYngsJWVieAotCWNsYyAgCisJbW92bCAkMiwgJWVkeAorCXhvcmwgJWVieCwgJWVieAorCWNsYwogCS5wMmFsaWduIDQKLS5MbG9vcF8xOgkKKy5MbG9vcF8xOgogCXNvdXJjZQotCW1vdncgKCVyZGkpLCVieAotCWFkY2wgJWVieCwlZWF4CisJbW92dyAoJXJkaSksICVieAorCWFkY2wgJWVieCwgJWVheAogCWRlY2wgJWVjeAogCWRlc3QKLQltb3Z3ICVieCwoJXJzaSkKLQlsZWFxIDIoJXJkaSksJXJkaQotCWxlYXEgMiglcnNpKSwlcnNpCisJbW92dyAlYngsICglcnNpKQorCWxlYXEgMiglcmRpKSwgJXJkaQorCWxlYXEgMiglcnNpKSwgJXJzaQogCWpueiAuTGxvb3BfMQotCWFkY2wgJXI5ZCwlZWF4CS8qIGFkZCBpbiBjYXJyeSAqLwotCQorCWFkY2wgJXI5ZCwgJWVheAkvKiBhZGQgaW4gY2FycnkgKi8KKwogCS8qIGhhbmRsZSBsYXN0IG9kZCBieXRlICovCiAuTGhhbmRsZV8xOgotCXRlc3RsICQxLCVyMTBkCisJdGVzdGwgJDEsICVyMTBkCiAJanogICAgLkxlbmRlCi0JeG9ybCAgJWVieCwlZWJ4CisJeG9ybCAgJWVieCwgJWVieAogCXNvdXJjZQotCW1vdmIgKCVyZGkpLCVibAorCW1vdmIgKCVyZGkpLCAlYmwKIAlkZXN0Ci0JbW92YiAlYmwsKCVyc2kpCi0JYWRkbCAlZWJ4LCVlYXgKLQlhZGNsICVyOWQsJWVheAkJLyogY2FycnkgKi8KLQkJCQorCW1vdmIgJWJsLCAoJXJzaSkKKwlhZGRsICVlYngsICVlYXgKKwlhZGNsICVyOWQsICVlYXgJCS8qIGNhcnJ5ICovCisKIAlDRklfUkVNRU1CRVJfU1RBVEUKIC5MZW5kZToKLQltb3ZxIDIqOCglcnNwKSwlcmJ4CisJbW92cSAyKjgoJXJzcCksICVyYngKIAlDRklfUkVTVE9SRSByYngKLQltb3ZxIDMqOCglcnNwKSwlcjEyCisJbW92cSAzKjgoJXJzcCksICVyMTIKIAlDRklfUkVTVE9SRSByMTIKLQltb3ZxIDQqOCglcnNwKSwlcjE0CisJbW92cSA0KjgoJXJzcCksICVyMTQKIAlDRklfUkVTVE9SRSByMTQKLQltb3ZxIDUqOCglcnNwKSwlcjEzCisJbW92cSA1KjgoJXJzcCksICVyMTMKIAlDRklfUkVTVE9SRSByMTMKLQltb3ZxIDYqOCglcnNwKSwlcmJwCisJbW92cSA2KjgoJXJzcCksICVyYnAKIAlDRklfUkVTVE9SRSByYnAKLQlhZGRxICQ3KjgsJXJzcAorCWFkZHEgJDcqOCwgJXJzcAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNyo4CiAJcmV0CiAJQ0ZJX1JFU1RPUkVfU1RBVEUKIAogCS8qIEV4Y2VwdGlvbiBoYW5kbGVycy4gVmVyeSBzaW1wbGUsIHplcm9pbmcgaXMgZG9uZSBpbiB0aGUgd3JhcHBlcnMgKi8KIC5MYmFkX3NvdXJjZToKLQltb3ZxICglcnNwKSwlcmF4Ci0JdGVzdHEgJXJheCwlcmF4CisJbW92cSAoJXJzcCksICVyYXgKKwl0ZXN0cSAlcmF4LCAlcmF4CiAJanogICAuTGVuZGUKLQltb3ZsICQtRUZBVUxULCglcmF4KQorCW1vdmwgJC1FRkFVTFQsICglcmF4KQogCWptcCAgLkxlbmRlCi0JCisKIC5MYmFkX2Rlc3Q6Ci0JbW92cSA4KCVyc3ApLCVyYXgKLQl0ZXN0cSAlcmF4LCVyYXgKLQlqeiAgIC5MZW5kZQkKLQltb3ZsICQtRUZBVUxULCglcmF4KQorCW1vdnEgOCglcnNwKSwgJXJheAorCXRlc3RxICVyYXgsICVyYXgKKwlqeiAgIC5MZW5kZQorCW1vdmwgJC1FRkFVTFQsICglcmF4KQogCWptcCAuTGVuZGUKIAlDRklfRU5EUFJPQwogRU5EUFJPQyhjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NzdW0tcGFydGlhbF82NC5jIGIvYXJjaC94ODYvbGliL2NzdW0tcGFydGlhbF82NC5jCmluZGV4IGJmNTExNDQuLjk4NDUzNzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9jc3VtLXBhcnRpYWxfNjQuYworKysgYi9hcmNoL3g4Ni9saWIvY3N1bS1wYXJ0aWFsXzY0LmMKQEAgLTg0LDcgKzg0LDcgQEAKIAkJCQljb3VudDY0LS07CiAJCQl9CiAKLQkJCS8qIGxhc3QgdXB0byA3IDhieXRlIGJsb2NrcyAqLworCQkJLyogbGFzdCB1cCB0byA3IDhieXRlIGJsb2NrcyAqLwogCQkJY291bnQgJT0gODsgCiAJCQl3aGlsZSAoY291bnQpIHsgCiAJCQkJYXNtKCJhZGRxICUxLCUwXG5cdCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jCmluZGV4IDA2OWNlN2MuLmQ0MjAzOTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMzI2LDcgKzMyNiw3IEBACiAJaWYgKG1tLT5mcmVlX2FyZWFfY2FjaGUgPCBsZW4pCiAJCWdvdG8gZmFpbDsKIAotCS8qIGVpdGhlciBubyBhZGRyZXNzIHJlcXVlc3RlZCBvciBjYW50IGZpdCBpbiByZXF1ZXN0ZWQgYWRkcmVzcyBob2xlICovCisJLyogZWl0aGVyIG5vIGFkZHJlc3MgcmVxdWVzdGVkIG9yIGNhbid0IGZpdCBpbiByZXF1ZXN0ZWQgYWRkcmVzcyBob2xlICovCiAJYWRkciA9IChtbS0+ZnJlZV9hcmVhX2NhY2hlIC0gbGVuKSAmIGh1Z2VfcGFnZV9tYXNrKGgpOwogCWRvIHsKIAkJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfMzIuYyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwppbmRleCA3M2FkN2ViLi44MDA4OGY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCkBAIC05MTcsNyArOTE3LDcgQEAKIHsKIAkvKgogCSAqIFdoZW4gdGhpcyBjYWxsZWQsIGluaXQgaGFzIGFscmVhZHkgYmVlbiBleGVjdXRlZCBhbmQgcmVsZWFzZWQsCi0JICogc28gZXZlcnl0aGluZyBwYXN0IF9ldGV4dCBzb3VsZCBiZSBOWC4KKwkgKiBzbyBldmVyeXRoaW5nIHBhc3QgX2V0ZXh0IHNob3VsZCBiZSBOWC4KIAkgKi8KIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF9ldGV4dCk7CiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCAwYWEzNDY2Li4yMzYyYjY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW5pdC5oPgogI2luY2x1ZGUgPGFzbS91di91di5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9kaXJlY3RfZ2JwYWdlc19vZmYoY2hhciAqYXJnKQogewpAQCAtMjk0LDE4ICsyOTUsMTggQEAKICAqIHRvIHRoZSBjb21waWxlIHRpbWUgZ2VuZXJhdGVkIHBtZHMuIFRoaXMgcmVzdWx0cyBpbiBpbnZhbGlkIHBtZHMgdXAKICAqIHRvIHRoZSBwb2ludCB3aGVyZSB3ZSBoaXQgdGhlIHBoeXNhZGRyIDAgbWFwcGluZy4KICAqCi0gKiBXZSBsaW1pdCB0aGUgbWFwcGluZ3MgdG8gdGhlIHJlZ2lvbiBmcm9tIF90ZXh0IHRvIF9lbmQuICBfZW5kIGlzCi0gKiByb3VuZGVkIHVwIHRvIHRoZSAyTUIgYm91bmRhcnkuIFRoaXMgY2F0Y2hlcyB0aGUgaW52YWxpZCBwbWRzIGFzCisgKiBXZSBsaW1pdCB0aGUgbWFwcGluZ3MgdG8gdGhlIHJlZ2lvbiBmcm9tIF90ZXh0IHRvIF9icmtfZW5kLiAgX2Jya19lbmQKKyAqIGlzIHJvdW5kZWQgdXAgdG8gdGhlIDJNQiBib3VuZGFyeS4gVGhpcyBjYXRjaGVzIHRoZSBpbnZhbGlkIHBtZHMgYXMKICAqIHdlbGwsIGFzIHRoZXkgYXJlIGxvY2F0ZWQgYmVmb3JlIF90ZXh0OgogICovCiB2b2lkIF9faW5pdCBjbGVhbnVwX2hpZ2htYXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gX19TVEFSVF9LRVJORUxfbWFwOwotCXVuc2lnbmVkIGxvbmcgZW5kID0gcm91bmR1cCgodW5zaWduZWQgbG9uZylfZW5kLCBQTURfU0laRSkgLSAxOworCXVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kID0gX19TVEFSVF9LRVJORUxfbWFwICsgKG1heF9wZm5fbWFwcGVkIDw8IFBBR0VfU0hJRlQpOworCXVuc2lnbmVkIGxvbmcgZW5kID0gcm91bmR1cCgodW5zaWduZWQgbG9uZylfYnJrX2VuZCwgUE1EX1NJWkUpIC0gMTsKIAlwbWRfdCAqcG1kID0gbGV2ZWwyX2tlcm5lbF9wZ3Q7Ci0JcG1kX3QgKmxhc3RfcG1kID0gcG1kICsgUFRSU19QRVJfUE1EOwogCi0JZm9yICg7IHBtZCA8IGxhc3RfcG1kOyBwbWQrKywgdmFkZHIgKz0gUE1EX1NJWkUpIHsKKwlmb3IgKDsgdmFkZHIgKyBQTURfU0laRSAtIDEgPCB2YWRkcl9lbmQ7IHBtZCsrLCB2YWRkciArPSBQTURfU0laRSkgewogCQlpZiAocG1kX25vbmUoKnBtZCkpCiAJCQljb250aW51ZTsKIAkJaWYgKHZhZGRyIDwgKHVuc2lnbmVkIGxvbmcpIF90ZXh0IHx8IHZhZGRyID4gZW5kKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IDllYzBmMjAuLmU4YzAwY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogICogQGRpc3RhbmNlOiBOVU1BIGRpc3RhbmNlCiAgKgogICogU2V0IHRoZSBkaXN0YW5jZSBmcm9tIG5vZGUgQGZyb20gdG8gQHRvIHRvIEBkaXN0YW5jZS4gIElmIGRpc3RhbmNlIHRhYmxlCi0gKiBkb2Vzbid0IGV4aXN0LCBvbmUgd2hpY2ggaXMgbGFyZ2UgZW5vdWdoIHRvIGFjY29tb2RhdGUgYWxsIHRoZSBjdXJyZW50bHkKKyAqIGRvZXNuJ3QgZXhpc3QsIG9uZSB3aGljaCBpcyBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgYWxsIHRoZSBjdXJyZW50bHkKICAqIGtub3duIG5vZGVzIHdpbGwgYmUgY3JlYXRlZC4KICAqCiAgKiBJZiBzdWNoIHRhYmxlIGNhbm5vdCBiZSBhbGxvY2F0ZWQsIGEgd2FybmluZyBpcyBwcmludGVkIGFuZCBmdXJ0aGVyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwppbmRleCA5MDgyNWYyLi5mOWU1MjY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCQkgKiB0aGVzZSBzaGFyZWQgbWFwcGluZ3MgYXJlIG1hZGUgb2Ygc21hbGwgcGFnZSBtYXBwaW5ncy4KIAkJICogVGh1cyB0aGlzIGRvbid0IGVuZm9yY2UgIVJXIG1hcHBpbmcgZm9yIHNtYWxsIHBhZ2Uga2VybmVsCiAJCSAqIHRleHQgbWFwcGluZyBsb2dpYyB3aWxsIGhlbHAgTGludXggWGVuIHBhcnZpcnQgZ3Vlc3QgYm9vdAotCQkgKiBhc3dlbGwuCisJCSAqIGFzIHdlbGwuCiAJCSAqLwogCQlpZiAobG9va3VwX2FkZHJlc3MoYWRkcmVzcywgJmxldmVsKSAmJiAobGV2ZWwgIT0gUEdfTEVWRUxfNEspKQogCQkJcGdwcm90X3ZhbChmb3JiaWRkZW4pIHw9IF9QQUdFX1JXOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCmluZGV4IDAxMTNkMTkuLjg1NzNiODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuYworKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKQEAgLTE2OCw4ICsxNjgsNyBAQAogCSAqIHNlY3Rpb24gOC4xOiBpbiBQQUUgbW9kZSB3ZSBleHBsaWNpdGx5IGhhdmUgdG8gZmx1c2ggdGhlCiAJICogVExCIHZpYSBjcjMgaWYgdGhlIHRvcC1sZXZlbCBwZ2QgaXMgY2hhbmdlZC4uLgogCSAqLwotCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCi0JCXdyaXRlX2NyMyhyZWFkX2NyMygpKTsKKwlmbHVzaF90bGJfbW0obW0pOwogfQogI2Vsc2UgIC8qICFDT05GSUdfWDg2X1BBRSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYyBiL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IDcyY2JlYzEuLjJkNDlkNGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkgewogCQl1bnNpZ25lZCBsb25nIHN0YWNrID0ga2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyk7CiAJCWlmIChkZXB0aCkKLQkJCWR1bXBfdHJhY2UoTlVMTCwgcmVncywgKHVuc2lnbmVkIGxvbmcgKilzdGFjaywKKwkJCWR1bXBfdHJhY2UoTlVMTCwgcmVncywgKHVuc2lnbmVkIGxvbmcgKilzdGFjaywgMCwKIAkJCQkgICAmYmFja3RyYWNlX29wcywgJmRlcHRoKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCmluZGV4IDlmYWRlYzAuLjk4YWIxMzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwpAQCAtNTAsNyArNTAsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIGFkZHJfaW5jcmVtZW50KHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBhZGRyX2luY3JlbWVudCh2b2lkKQogewogI2lmZGVmIENPTkZJR19TTVAKIAlyZXR1cm4gc21wX251bV9zaWJsaW5ncyA9PSAyID8gMiA6IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jIGIvYXJjaC94ODYvcGNpL2kzODYuYwppbmRleCBiMTgwNWI3Li40OTRmMmU3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jCisrKyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCWU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXNfbGF0ZSgpOwogCS8qCiAJICogSW5zZXJ0IHRoZSBJTyBBUElDIHJlc291cmNlcyBhZnRlciBQQ0kgaW5pdGlhbGl6YXRpb24gaGFzCi0JICogb2NjdXJlZCB0byBoYW5kbGUgSU8gQVBJQ1MgdGhhdCBhcmUgbWFwcGVkIGluIG9uIGEgQkFSIGluCisJICogb2NjdXJyZWQgdG8gaGFuZGxlIElPIEFQSUNTIHRoYXQgYXJlIG1hcHBlZCBpbiBvbiBhIEJBUiBpbgogCSAqIFBDSSBzcGFjZSwgYnV0IGJlZm9yZSB0cnlpbmcgdG8gYXNzaWduIHVuYXNzaWduZWQgcGNpIHJlcy4KIAkgKi8KIAlpb2FwaWNfaW5zZXJ0X3Jlc291cmNlcygpOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJCS8qCiAJCSAqIGlvcmVtYXAoKSBhbmQgaW9yZW1hcF9ub2NhY2hlKCkgZGVmYXVsdHMgdG8gVUMgTUlOVVMgZm9yIG5vdy4KIAkJICogVG8gYXZvaWQgYXR0cmlidXRlIGNvbmZsaWN0cywgcmVxdWVzdCBVQyBNSU5VUyBoZXJlCi0JCSAqIGFzd2VsbC4KKwkJICogYXMgd2VsbC4KIAkJICovCiAJCXByb3QgfD0gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pcnEuYyBiL2FyY2gveDg2L3BjaS9pcnEuYwppbmRleCA4N2U2YzgzLi44MjAxMTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC94ODYvcGNpL2lycS5jCkBAIC01OTcsMjEgKzU5NywxOCBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoKGRldmljZSA+PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfTFBDX01JTikgJiYgCi0JCShkZXZpY2UgPD0gUENJX0RFVklDRV9JRF9JTlRFTF81XzM0MDBfU0VSSUVTX0xQQ19NQVgpKSB7CisJaWYgKChkZXZpY2UgPj0gUENJX0RFVklDRV9JRF9JTlRFTF81XzM0MDBfU0VSSUVTX0xQQ19NSU4gJiYgCisJICAgICBkZXZpY2UgPD0gUENJX0RFVklDRV9JRF9JTlRFTF81XzM0MDBfU0VSSUVTX0xQQ19NQVgpIAorCXx8ICAoZGV2aWNlID49IFBDSV9ERVZJQ0VfSURfSU5URUxfQ09VR0FSUE9JTlRfTFBDX01JTiAmJiAKKwkgICAgIGRldmljZSA8PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX0xQQ19NQVgpCisJfHwgIChkZXZpY2UgPj0gUENJX0RFVklDRV9JRF9JTlRFTF9ESDg5WFhDQ19MUENfTUlOICYmCisJICAgICBkZXZpY2UgPD0gUENJX0RFVklDRV9JRF9JTlRFTF9ESDg5WFhDQ19MUENfTUFYKSkgewogCQlyLT5uYW1lID0gIlBJSVgvSUNIIjsKIAkJci0+Z2V0ID0gcGlycV9waWl4X2dldDsKIAkJci0+c2V0ID0gcGlycV9waWl4X3NldDsKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChkZXZpY2UgPj0gUENJX0RFVklDRV9JRF9JTlRFTF9DT1VHQVJQT0lOVF9MUENfTUlOKSAmJiAKLQkJKGRldmljZSA8PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX0xQQ19NQVgpKSB7Ci0JCXItPm5hbWUgPSAiUElJWC9JQ0giOwotCQlyLT5nZXQgPSBwaXJxX3BpaXhfZ2V0OwotCQlyLT5zZXQgPSBwaXJxX3BpaXhfc2V0OwotCQlyZXR1cm4gMTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCA1Njk1ZmE2Li5jODJkZjZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xNDg3LDEwICsxNDg3LDEyIEBACiAJLyoKIAkgKiBJZiB0aGUgbmV3IHBmbiBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQKIAkgKiBrZXJuZWwgcGFnZXRhYmxlLCBhbmQgaXQgaXNuJ3QgYmVpbmcgbWFwcGVkIGludG8gYW4KLQkgKiBlYXJseV9pb3JlbWFwIGZpeG1hcCBzbG90LCBtYWtlIHN1cmUgaXQgaXMgUk8uCisJICogZWFybHlfaW9yZW1hcCBmaXhtYXAgc2xvdCBhcyBhIGZyZXNobHkgYWxsb2NhdGVkIHBhZ2UsIG1ha2Ugc3VyZQorCSAqIGl0IGlzIFJPLgogCSAqLwotCWlmICghaXNfZWFybHlfaW9yZW1hcF9wdGVwKHB0ZXApICYmCi0JICAgIHBmbiA+PSBwZ3RfYnVmX3N0YXJ0ICYmIHBmbiA8IHBndF9idWZfZW5kKQorCWlmICgoKCFpc19lYXJseV9pb3JlbWFwX3B0ZXAocHRlcCkgJiYKKwkJCXBmbiA+PSBwZ3RfYnVmX3N0YXJ0ICYmIHBmbiA8IHBndF9idWZfZW5kKSkgfHwKKwkJCShpc19lYXJseV9pb3JlbWFwX3B0ZXAocHRlcCkgJiYgcGZuICE9IChwZ3RfYnVmX2VuZCAtIDEpKSkKIAkJcHRlID0gcHRlX3dycHJvdGVjdChwdGUpOwogCiAJcmV0dXJuIHB0ZTsKQEAgLTE3MDAsOSArMTcwMiw2IEBACiAJCWZvciAocHRlaWR4ID0gMDsgcHRlaWR4IDwgUFRSU19QRVJfUFRFOyBwdGVpZHgrKywgcGZuKyspIHsKIAkJCXB0ZV90IHB0ZTsKIAotCQkJaWYgKHBmbiA+IG1heF9wZm5fbWFwcGVkKQotCQkJCW1heF9wZm5fbWFwcGVkID0gcGZuOwotCiAJCQlpZiAoIXB0ZV9ub25lKHB0ZV9wYWdlW3B0ZWlkeF0pKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xNzQ0LDcgKzE3NDMsNyBAQAogfQogCiAvKgotICogU2V0IHVwIHRoZSBpbml0YWwga2VybmVsIHBhZ2V0YWJsZS4KKyAqIFNldCB1cCB0aGUgaW5pdGlhbCBrZXJuZWwgcGFnZXRhYmxlLgogICoKICAqIFdlIGNhbiBjb25zdHJ1Y3QgdGhpcyBieSBncmFmdGluZyB0aGUgWGVuIHByb3ZpZGVkIHBhZ2V0YWJsZSBpbnRvCiAgKiBoZWFkXzY0LlMncyBwcmVjb25zdHJ1Y3RlZCBwYWdldGFibGVzLiAgV2UgY29weSB0aGUgWGVuIEwyJ3MgaW50bwpAQCAtMTc2MCw2ICsxNzU5LDEyIEBACiAJcHVkX3QgKmwzOwogCXBtZF90ICpsMjsKIAorCS8qIG1heF9wZm5fbWFwcGVkIGlzIHRoZSBsYXN0IHBmbiBtYXBwZWQgaW4gdGhlIGluaXRpYWwgbWVtb3J5CisJICogbWFwcGluZ3MuIENvbnNpZGVyaW5nIHRoYXQgb24gWGVuIGFmdGVyIHRoZSBrZXJuZWwgbWFwcGluZ3Mgd2UKKwkgKiBoYXZlIHRoZSBtYXBwaW5ncyBvZiBzb21lIHBhZ2VzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gcGZuIHNwYWNlLCB3ZQorCSAqIHNldCBtYXhfcGZuX21hcHBlZCB0byB0aGUgbGFzdCByZWFsIHBmbiBtYXBwZWQuICovCisJbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihfX3BhKHhlbl9zdGFydF9pbmZvLT5tZm5fbGlzdCkpOworCiAJLyogWmFwIGlkZW50aXR5IG1hcHBpbmcgKi8KIAlpbml0X2xldmVsNF9wZ3RbMF0gPSBfX3BnZCgwKTsKIApAQCAtMTg2NCw5ICsxODY5LDcgQEAKIAlpbml0aWFsX2tlcm5lbF9wbWQgPQogCQlleHRlbmRfYnJrKHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQsIFBBR0VfU0laRSk7CiAKLQltYXhfcGZuX21hcHBlZCA9IFBGTl9ET1dOKF9fcGEoeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UpICsKLQkJCQkgIHhlbl9zdGFydF9pbmZvLT5ucl9wdF9mcmFtZXMgKiBQQUdFX1NJWkUgKwotCQkJCSAgNTEyKjEwMjQpOworCW1heF9wZm5fbWFwcGVkID0gUEZOX0RPV04oX19wYSh4ZW5fc3RhcnRfaW5mby0+bWZuX2xpc3QpKTsKIAogCWtlcm5lbF9wbWQgPSBtMnYocGdkW0tFUk5FTF9QR0RfQk9VTkRBUlldLnBnZCk7CiAJbWVtY3B5KGluaXRpYWxfa2VybmVsX3BtZCwga2VybmVsX3BtZCwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9LY29uZmlnIGIvYXJjaC94dGVuc2EvS2NvbmZpZwppbmRleCBkMzczZDE1Li43MjgzOTE5IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9LY29uZmlnCisrKyBiL2FyY2gveHRlbnNhL0tjb25maWcKQEAgLTIxLDYgKzIxLDkgQEAKIGNvbmZpZyBHRU5FUklDX0ZJTkRfTkVYVF9CSVQKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBHRU5FUklDX0ZJTkRfQklUX0xFCisJZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19IV0VJR0hUCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9ib290L01ha2VmaWxlIGIvYXJjaC94dGVuc2EvYm9vdC9NYWtlZmlsZQppbmRleCA0MGFhNTViLi43MGZkMTQ1IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9ib290L01ha2VmaWxlCisrKyBiL2FyY2gveHRlbnNhL2Jvb3QvTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAKIAogQklHX0VORElBTgk6PSAkKHNoZWxsIGVjaG8gLWUgX19YVEVOU0FfRUJfXyB8ICQoQ0MpIC1FIC0gfCBncmVwIC12ICJcIyIpCiAKLWV4cG9ydCBFWFRSQV9DRkxBR1MKK2V4cG9ydCBjY2ZsYWdzLXkKIGV4cG9ydCBCSUdfRU5ESUFOCiAKIHN1YmRpci15CTo9IGxpYgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvYm9vdC9saWIvTWFrZWZpbGUgYi9hcmNoL3h0ZW5zYS9ib290L2xpYi9NYWtlZmlsZQppbmRleCBkM2QyYWEyLi5hZDg5NTJlIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9ib290L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3h0ZW5zYS9ib290L2xpYi9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogbGliLXkJKz0gJCh6bGliOi5jPS5vKSB6bWVtLm8KIAotRVhUUkFfQ0ZMQUdTCSs9IC1JbGliL3psaWJfaW5mbGF0ZQorY2NmbGFncy15CTo9IC1JbGliL3psaWJfaW5mbGF0ZQogCiBxdWlldF9jbWRfY29weV96bGliID0gQ09QWSAgICAkQAogICAgICAgY21kX2NvcHlfemxpYiA9IGNhdCAkPCA+ICRACmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9jb25maWdzL3M2MTA1X2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCmluZGV4IDA5NWNkODAuLjQyYjdmZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCisrKyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCkBAIC01OTgsNyArNTk4LDcgQEAKICMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggNmMzOTMwMy4uYzhmYWM4ZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xlLmg+CiAKICNpZmRlZiBfX1hURU5TQV9FTF9fCiAjIGRlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssbnIsYWRkcikJCQkJXApAQCAtMTI1LDcgKzEyNSw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdHlwZXMuaAppbmRleCBjODk1NjlhLi5iMWM5ODFlIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTMyLDEwICszMiw2IEBACiAKICNkZWZpbmUgQklUU19QRVJfTE9ORyAzMgogCi0vKiBEbWEgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIHdpZGUuICAqLwotCi10eXBlZGVmIHUzMiBkbWFfYWRkcl90OwotCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9kZWZsYXRlLmMgYi9jcnlwdG8vZGVmbGF0ZS5jCmluZGV4IGNiYzdhMzMuLmI1Y2NhZTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kZWZsYXRlLmMKKysrIGIvY3J5cHRvL2RlZmxhdGUuYwpAQCAtNDgsNyArNDgsOCBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKIAotCXN0cmVhbS0+d29ya3NwYWNlID0gdnphbGxvYyh6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKKwlzdHJlYW0tPndvcmtzcGFjZSA9IHZ6YWxsb2MoemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoCisJCQkJLURFRkxBVEVfREVGX1dJTkJJVFMsIERFRkxBVEVfREVGX01FTUxFVkVMKSk7CiAJaWYgKCFzdHJlYW0tPndvcmtzcGFjZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2NyeXB0by96bGliLmMgYi9jcnlwdG8vemxpYi5jCmluZGV4IDczOWI4ZmMuLmQxMWQ3NjEgMTAwNjQ0Ci0tLSBhL2NyeXB0by96bGliLmMKKysrIGIvY3J5cHRvL3psaWIuYwpAQCAtODUsNiArODUsNyBAQAogCXN0cnVjdCB6bGliX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKIAlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+Y29tcF9zdHJlYW07CiAJc3RydWN0IG5sYXR0ciAqdGJbWkxJQl9DT01QX01BWCArIDFdOworCWludCB3aW5kb3dfYml0cywgbWVtX2xldmVsOwogCXNpemVfdCB3b3Jrc3BhY2VzaXplOwogCWludCByZXQ7CiAKQEAgLTk0LDcgKzk1LDE0IEBACiAKIAl6bGliX2NvbXBfZXhpdChjdHgpOwogCi0Jd29ya3NwYWNlc2l6ZSA9IHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKCk7CisJd2luZG93X2JpdHMgPSB0YltaTElCX0NPTVBfV0lORE9XQklUU10KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfV0lORE9XQklUU10pCisJCQkJCTogTUFYX1dCSVRTOworCW1lbV9sZXZlbCA9IHRiW1pMSUJfQ09NUF9NRU1MRVZFTF0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfTUVNTEVWRUxdKQorCQkJCQk6IERFRl9NRU1fTEVWRUw7CisKKwl3b3Jrc3BhY2VzaXplID0gemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUod2luZG93X2JpdHMsIG1lbV9sZXZlbCk7CiAJc3RyZWFtLT53b3Jrc3BhY2UgPSB2emFsbG9jKHdvcmtzcGFjZXNpemUpOwogCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTA2LDEyICsxMTQsOCBAQAogCQkJCXRiW1pMSUJfQ09NUF9NRVRIT0RdCiAJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX01FVEhPRF0pCiAJCQkJCTogWl9ERUZMQVRFRCwKLQkJCQl0YltaTElCX0NPTVBfV0lORE9XQklUU10KLQkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfV0lORE9XQklUU10pCi0JCQkJCTogTUFYX1dCSVRTLAotCQkJCXRiW1pMSUJfQ09NUF9NRU1MRVZFTF0KLQkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfTUVNTEVWRUxdKQotCQkJCQk6IERFRl9NRU1fTEVWRUwsCisJCQkJd2luZG93X2JpdHMsCisJCQkJbWVtX2xldmVsLAogCQkJCXRiW1pMSUJfQ09NUF9TVFJBVEVHWV0KIAkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfU1RSQVRFR1ldKQogCQkJCQk6IFpfREVGQVVMVF9TVFJBVEVHWSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggOWJmYjcxZi4uMTc3YzdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMTE3LDQgKzExNyw2IEBACiBzb3VyY2UgImRyaXZlcnMvcGxhdGZvcm0vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2Nsay9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvaHdzcGlubG9jay9LY29uZmlnIgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggYjQyM2JiMS4uM2YxMzViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0xMTcsMyArMTE3LDUgQEAKIG9iai15CQkJCSs9IGllZWU4MDIxNTQvCiAjY29tbW9uIGNsayBjb2RlCiBvYmoteQkJCQkrPSBjbGsvCisKK29iai0kKENPTkZJR19IV1NQSU5MT0NLKQkrPSBod3NwaW5sb2NrLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCA5MGY4Zjc2Li5hMThlNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtNzgyLDYgKzc4Miw5IEBACiAKIAlpZiAoYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpKSB7CiAJCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKwkJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJCWFjcGlfaGFuZGxlIGFjcGlfcGFyZW50OworCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBOVUxMOwogCQlpbnQgcmVzdWx0OwogCQlzdGF0aWMgaW50IGNvdW50ID0gMDsKIAkJY2hhciAqbmFtZTsKQEAgLTc5NCw5ICs3OTcsMjAgQEAKIAkJCXJldHVybjsKIAkJY291bnQrKzsKIAorCQlhY3BpX2dldF9wYXJlbnQoZGV2aWNlLT5kZXYtPmhhbmRsZSwgJmFjcGlfcGFyZW50KTsKKworCQlwZGV2ID0gYWNwaV9nZXRfcGNpX2RldihhY3BpX3BhcmVudCk7CisJCWlmIChwZGV2KSB7CisJCQlwYXJlbnQgPSAmcGRldi0+ZGV2OworCQkJcGNpX2Rldl9wdXQocGRldik7CisJCX0KKwogCQltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfRklSTVdBUkU7CiAJCXByb3BzLm1heF9icmlnaHRuZXNzID0gZGV2aWNlLT5icmlnaHRuZXNzLT5jb3VudCAtIDM7Ci0JCWRldmljZS0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBOVUxMLCBkZXZpY2UsCisJCWRldmljZS0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLAorCQkJCQkJCSAgICAgIHBhcmVudCwKKwkJCQkJCQkgICAgICBkZXZpY2UsCiAJCQkJCQkJICAgICAgJmFjcGlfYmFja2xpZ2h0X29wcywKIAkJCQkJCQkgICAgICAmcHJvcHMpOwogCQlrZnJlZShuYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCmluZGV4IGVmM2NlMjYuLjBmOTFlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwpAQCAtNiw3ICs2LDcgQEAKICAqIEF1dGhvcjogQXNoaXNoIEthbHJhIDxhc2hpc2gua2FscmFAZnJlZXNjYWxlLmNvbT4KICAqIExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3LCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE1Nyw3ICsxNTcsOCBAQAogCSAgICBJRV9PTl9TSU5HTF9ERVZJQ0VfRVJSIHwgSUVfT05fQ01EX0NPTVBMRVRFLAogCiAJRVhUX0lORElSRUNUX1NFR19QUkRfRkxBRyA9ICgxIDw8IDMxKSwKLQlEQVRBX1NOT09QX0VOQUJMRSA9ICgxIDw8IDIyKSwKKwlEQVRBX1NOT09QX0VOQUJMRV9WMSA9ICgxIDw8IDIyKSwKKwlEQVRBX1NOT09QX0VOQUJMRV9WMiA9ICgxIDw8IDI4KSwKIH07CiAKIC8qCkBAIC0yNjAsNiArMjYxLDcgQEAKIAl2b2lkIF9faW9tZW0gKnNzcl9iYXNlOwogCXZvaWQgX19pb21lbSAqY3NyX2Jhc2U7CiAJaW50IGlycTsKKwlpbnQgZGF0YV9zbm9vcDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNhdGFfZnNsX3RhZyh1bnNpZ25lZCBpbnQgdGFnLApAQCAtMzEyLDcgKzMxNCw4IEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2F0YV9mc2xfZmlsbF9zZyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCB2b2lkICpjbWRfZGVzYywKLQkJCQkgICAgIHUzMiAqdHRsLCBkbWFfYWRkcl90IGNtZF9kZXNjX3BhZGRyKQorCQkJCSAgICAgdTMyICp0dGwsIGRtYV9hZGRyX3QgY21kX2Rlc2NfcGFkZHIsCisJCQkJICAgICBpbnQgZGF0YV9zbm9vcCkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCBudW1fcHJkZSA9IDA7CkBAIC0zNjIsOCArMzY1LDcgQEAKIAogCQl0dGxfZHdvcmRzICs9IHNnX2xlbjsKIAkJcHJkLT5kYmEgPSBjcHVfdG9fbGUzMihzZ19hZGRyKTsKLQkJcHJkLT5kZGNfYW5kX2V4dCA9Ci0JCSAgICBjcHVfdG9fbGUzMihEQVRBX1NOT09QX0VOQUJMRSB8IChzZ19sZW4gJiB+MHgwMykpOworCQlwcmQtPmRkY19hbmRfZXh0ID0gY3B1X3RvX2xlMzIoZGF0YV9zbm9vcCB8IChzZ19sZW4gJiB+MHgwMykpOwogCiAJCVZQUklOVEsoInNnX2ZpbGwsIHR0bD0lZCwgZGJhPTB4JXgsIGRkYz0weCV4XG4iLAogCQkJdHRsX2R3b3JkcywgcHJkLT5kYmEsIHByZC0+ZGRjX2FuZF9leHQpOwpAQCAtMzc4LDcgKzM4MCw3IEBACiAJCS8qIHNldCBpbmRpcmVjdCBleHRlbnNpb24gZmxhZyBhbG9uZyB3aXRoIGluZGlyZWN0IGV4dC4gc2l6ZSAqLwogCQlwcmRfcHRyX3RvX2luZGlyZWN0X2V4dC0+ZGRjX2FuZF9leHQgPQogCQkgICAgY3B1X3RvX2xlMzIoKEVYVF9JTkRJUkVDVF9TRUdfUFJEX0ZMQUcgfAotCQkJCSBEQVRBX1NOT09QX0VOQUJMRSB8CisJCQkJIGRhdGFfc25vb3AgfAogCQkJCSAoaW5kaXJlY3RfZXh0X3NlZ21lbnRfc3ogJiB+MHgwMykpKTsKIAl9CiAKQEAgLTQyMSw3ICs0MjMsOCBAQAogCiAJaWYgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKQogCQludW1fcHJkZSA9IHNhdGFfZnNsX2ZpbGxfc2cocWMsICh2b2lkICopY2QsCi0JCQkJCSAgICAmdHRsX2R3b3JkcywgY2RfcGFkZHIpOworCQkJCQkgICAgJnR0bF9kd29yZHMsIGNkX3BhZGRyLAorCQkJCQkgICAgaG9zdF9wcml2LT5kYXRhX3Nub29wKTsKIAogCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfTkNRKQogCQlkZXNjX2luZm8gfD0gRlBETUFfUVVFVUVEX0NNRDsKQEAgLTEzNDksNiArMTM1MiwxMSBAQAogCX0KIAlob3N0X3ByaXYtPmlycSA9IGlycTsKIAorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShvZmRldi0+ZGV2Lm9mX25vZGUsICJmc2wscHEtc2F0YS12MiIpKQorCQlob3N0X3ByaXYtPmRhdGFfc25vb3AgPSBEQVRBX1NOT09QX0VOQUJMRV9WMjsKKwllbHNlCisJCWhvc3RfcHJpdi0+ZGF0YV9zbm9vcCA9IERBVEFfU05PT1BfRU5BQkxFX1YxOworCiAJLyogYWxsb2NhdGUgaG9zdCBzdHJ1Y3R1cmUgKi8KIAlob3N0ID0gYXRhX2hvc3RfYWxsb2NfcGluZm8oJm9mZGV2LT5kZXYsIHBwaSwgU0FUQV9GU0xfTUFYX1BPUlRTKTsKIApAQCAtMTQzMSw2ICsxNDM5LDkgQEAKIAl7CiAJCS5jb21wYXRpYmxlID0gImZzbCxwcS1zYXRhIiwKIAl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLHBxLXNhdGEtdjIiLAorCX0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKaW5kZXggN2Q5MTJiYWYuLjA0OTY1MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYworKysgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKQEAgLTEwMzEsNyArMTAzMSw3IEBACiAJCS8qIFdlIG5vdyB1c2UgdGhlICJzdWJtaXRfY29tbWFuZCIgZnVuY3Rpb24gdG8gc3VibWl0IGNvbW1hbmRzIHRvCiAJCSAgIHRoZSBmaXJlc3RyZWFtLiBUaGVyZSBpcyBhIGRlZmluZSB1cCBuZWFyIHRoZSBkZWZpbml0aW9uIG9mCiAJCSAgIHRoYXQgcm91dGluZSB0aGF0IHN3aXRjaGVzIHRoaXMgcm91dGluZSBiZXR3ZWVuIGltbWVkaWF0ZSB3cml0ZQotCQkgICB0byB0aGUgaW1tZWRpYXRlIGNvbWFtbmQgcmVnaXN0ZXJzIGFuZCBxdWV1aW5nIHRoZSBjb21tYW5kcyBpbgorCQkgICB0byB0aGUgaW1tZWRpYXRlIGNvbW1hbmQgcmVnaXN0ZXJzIGFuZCBxdWV1aW5nIHRoZSBjb21tYW5kcyBpbgogCQkgICB0aGUgSFBUWFEgZm9yIGV4ZWN1dGlvbi4gVGhpcyBsYXN0IHRlY2huaXF1ZSBtaWdodCBiZSBtb3JlCiAJCSAgIGVmZmljaWVudCBpZiB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvIHN1Ym1pdCBhIHdob2xlIGxvdCBvZgogCQkgICBjb21tYW5kcyBpbiBvbmUgZ28sIGJ1dCB0aGlzIGRyaXZlciBpcyBub3Qgc2V0dXAgdG8gYmUgYWJsZSB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9yYmQuYyBiL2RyaXZlcnMvYmxvY2svcmJkLmMKaW5kZXggZTFlMzhiMS4uMTZkYzM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9yYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvY2VwaC9vc2RfY2xpZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvY2VwaC9tb25fY2xpZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvY2VwaC9kZWNvZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtNTQsNiArNTUsOCBAQAogCiAjZGVmaW5lIERFVl9OQU1FX0xFTgkJMzIKIAorI2RlZmluZSBSQkRfTk9USUZZX1RJTUVPVVRfREVGQVVMVCAxMAorCiAvKgogICogYmxvY2sgZGV2aWNlIGltYWdlIG1ldGFkYXRhIChpbi1tZW1vcnkgdmVyc2lvbikKICAqLwpAQCAtNzEsNiArNzQsMTIgQEAKIAogCWNoYXIgKnNuYXBfbmFtZXM7CiAJdTY0ICpzbmFwX3NpemVzOworCisJdTY0IG9ial92ZXJzaW9uOworfTsKKworc3RydWN0IHJiZF9vcHRpb25zIHsKKwlpbnQJbm90aWZ5X3RpbWVvdXQ7CiB9OwogCiAvKgpAQCAtNzgsNiArODcsNyBAQAogICovCiBzdHJ1Y3QgcmJkX2NsaWVudCB7CiAJc3RydWN0IGNlcGhfY2xpZW50CSpjbGllbnQ7CisJc3RydWN0IHJiZF9vcHRpb25zCSpyYmRfb3B0czsKIAlzdHJ1Y3Qga3JlZgkJa3JlZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CiB9OwpAQCAtMTI0LDYgKzEzNCw5IEBACiAJY2hhcgkJCXBvb2xfbmFtZVtSQkRfTUFYX1BPT0xfTkFNRV9MRU5dOwogCWludAkJCXBvb2xpZDsKIAorCXN0cnVjdCBjZXBoX29zZF9ldmVudCAgICp3YXRjaF9ldmVudDsKKwlzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqd2F0Y2hfcmVxdWVzdDsKKwogCWNoYXIgICAgICAgICAgICAgICAgICAgIHNuYXBfbmFtZVtSQkRfTUFYX1NOQVBfTkFNRV9MRU5dOwogCXUzMiBjdXJfc25hcDsJLyogaW5kZXgrMSBvZiBjdXJyZW50IHNuYXBzaG90IHdpdGhpbiBzbmFwIGNvbnRleHQKIAkJCSAgIDAgLSBmb3IgdGhlIGhlYWQgKi8KQEAgLTE3Nyw2ICsxOTAsOCBAQAogCXB1dF9kZXZpY2UoJnJiZF9kZXYtPmRldik7CiB9CiAKK3N0YXRpYyBpbnQgX19yYmRfdXBkYXRlX3NuYXBzKHN0cnVjdCByYmRfZGV2aWNlICpyYmRfZGV2KTsKKwogc3RhdGljIGludCByYmRfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwpAQCAtMjExLDcgKzIyNiw4IEBACiAgKiBJbml0aWFsaXplIGFuIHJiZCBjbGllbnQgaW5zdGFuY2UuCiAgKiBXZSBvd24gKm9wdC4KICAqLwotc3RhdGljIHN0cnVjdCByYmRfY2xpZW50ICpyYmRfY2xpZW50X2NyZWF0ZShzdHJ1Y3QgY2VwaF9vcHRpb25zICpvcHQpCitzdGF0aWMgc3RydWN0IHJiZF9jbGllbnQgKnJiZF9jbGllbnRfY3JlYXRlKHN0cnVjdCBjZXBoX29wdGlvbnMgKm9wdCwKKwkJCQkJICAgIHN0cnVjdCByYmRfb3B0aW9ucyAqcmJkX29wdHMpCiB7CiAJc3RydWN0IHJiZF9jbGllbnQgKnJiZGM7CiAJaW50IHJldCA9IC1FTk9NRU07CkBAIC0yMzMsNiArMjQ5LDggQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfZXJyOwogCisJcmJkYy0+cmJkX29wdHMgPSByYmRfb3B0czsKKwogCXNwaW5fbG9jaygmbm9kZV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZyYmRjLT5ub2RlLCAmcmJkX2NsaWVudF9saXN0KTsKIAlzcGluX3VubG9jaygmbm9kZV9sb2NrKTsKQEAgLTI2Nyw2ICsyODUsNTkgQEAKIH0KIAogLyoKKyAqIG1vdW50IG9wdGlvbnMKKyAqLworZW51bSB7CisJT3B0X25vdGlmeV90aW1lb3V0LAorCU9wdF9sYXN0X2ludCwKKwkvKiBpbnQgYXJncyBhYm92ZSAqLworCU9wdF9sYXN0X3N0cmluZywKKwkvKiBzdHJpbmcgYXJncyBhYm92ZSAqLworfTsKKworc3RhdGljIG1hdGNoX3RhYmxlX3QgcmJkb3B0X3Rva2VucyA9IHsKKwl7T3B0X25vdGlmeV90aW1lb3V0LCAibm90aWZ5X3RpbWVvdXQ9JWQifSwKKwkvKiBpbnQgYXJncyBhYm92ZSAqLworCS8qIHN0cmluZyBhcmdzIGFib3ZlICovCisJey0xLCBOVUxMfQorfTsKKworc3RhdGljIGludCBwYXJzZV9yYmRfb3B0c190b2tlbihjaGFyICpjLCB2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCByYmRfb3B0aW9ucyAqcmJkb3B0ID0gcHJpdmF0ZTsKKwlzdWJzdHJpbmdfdCBhcmdzdHJbTUFYX09QVF9BUkdTXTsKKwlpbnQgdG9rZW4sIGludHZhbCwgcmV0OworCisJdG9rZW4gPSBtYXRjaF90b2tlbigoY2hhciAqKWMsIHJiZG9wdF90b2tlbnMsIGFyZ3N0cik7CisJaWYgKHRva2VuIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodG9rZW4gPCBPcHRfbGFzdF9pbnQpIHsKKwkJcmV0ID0gbWF0Y2hfaW50KCZhcmdzdHJbMF0sICZpbnR2YWwpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCJiYWQgbW91bnQgb3B0aW9uIGFyZyAobm90IGludCkgIgorCQkJICAgICAgICJhdCAnJXMnXG4iLCBjKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZG91dCgiZ290IGludCB0b2tlbiAlZCB2YWwgJWRcbiIsIHRva2VuLCBpbnR2YWwpOworCX0gZWxzZSBpZiAodG9rZW4gPiBPcHRfbGFzdF9pbnQgJiYgdG9rZW4gPCBPcHRfbGFzdF9zdHJpbmcpIHsKKwkJZG91dCgiZ290IHN0cmluZyB0b2tlbiAlZCB2YWwgJXNcbiIsIHRva2VuLAorCQkgICAgIGFyZ3N0clswXS5mcm9tKTsKKwl9IGVsc2UgeworCQlkb3V0KCJnb3QgdG9rZW4gJWRcbiIsIHRva2VuKTsKKwl9CisKKwlzd2l0Y2ggKHRva2VuKSB7CisJY2FzZSBPcHRfbm90aWZ5X3RpbWVvdXQ6CisJCXJiZG9wdC0+bm90aWZ5X3RpbWVvdXQgPSBpbnR2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTih0b2tlbik7CisJfQorCXJldHVybiAwOworfQorCisvKgogICogR2V0IGEgY2VwaCBjbGllbnQgd2l0aCBzcGVjaWZpYyBhZGRyIGFuZCBjb25maWd1cmF0aW9uLCBpZiBvbmUgZG9lcwogICogbm90IGV4aXN0IGNyZWF0ZSBpdC4KICAqLwpAQCAtMjc2LDExICszNDcsMTggQEAKIAlzdHJ1Y3QgcmJkX2NsaWVudCAqcmJkYzsKIAlzdHJ1Y3QgY2VwaF9vcHRpb25zICpvcHQ7CiAJaW50IHJldDsKKwlzdHJ1Y3QgcmJkX29wdGlvbnMgKnJiZF9vcHRzOworCisJcmJkX29wdHMgPSBremFsbG9jKHNpemVvZigqcmJkX29wdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJiZF9vcHRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJiZF9vcHRzLT5ub3RpZnlfdGltZW91dCA9IFJCRF9OT1RJRllfVElNRU9VVF9ERUZBVUxUOwogCiAJcmV0ID0gY2VwaF9wYXJzZV9vcHRpb25zKCZvcHQsIG9wdGlvbnMsIG1vbl9hZGRyLAotCQkJCSBtb25fYWRkciArIHN0cmxlbihtb25fYWRkciksIE5VTEwsIE5VTEwpOworCQkJCSBtb25fYWRkciArIHN0cmxlbihtb25fYWRkciksIHBhcnNlX3JiZF9vcHRzX3Rva2VuLCByYmRfb3B0cyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZG9uZV9lcnI7CiAKIAlzcGluX2xvY2soJm5vZGVfbG9jayk7CiAJcmJkYyA9IF9fcmJkX2NsaWVudF9maW5kKG9wdCk7CkBAIC0yOTYsMTMgKzM3NCwxOCBAQAogCX0KIAlzcGluX3VubG9jaygmbm9kZV9sb2NrKTsKIAotCXJiZGMgPSByYmRfY2xpZW50X2NyZWF0ZShvcHQpOwotCWlmIChJU19FUlIocmJkYykpCi0JCXJldHVybiBQVFJfRVJSKHJiZGMpOworCXJiZGMgPSByYmRfY2xpZW50X2NyZWF0ZShvcHQsIHJiZF9vcHRzKTsKKwlpZiAoSVNfRVJSKHJiZGMpKSB7CisJCXJldCA9IFBUUl9FUlIocmJkYyk7CisJCWdvdG8gZG9uZV9lcnI7CisJfQogCiAJcmJkX2Rldi0+cmJkX2NsaWVudCA9IHJiZGM7CiAJcmJkX2Rldi0+Y2xpZW50ID0gcmJkYy0+Y2xpZW50OwogCXJldHVybiAwOworZG9uZV9lcnI6CisJa2ZyZWUocmJkX29wdHMpOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0zMTgsNiArNDAxLDcgQEAKIAlzcGluX3VubG9jaygmbm9kZV9sb2NrKTsKIAogCWNlcGhfZGVzdHJveV9jbGllbnQocmJkYy0+Y2xpZW50KTsKKwlrZnJlZShyYmRjLT5yYmRfb3B0cyk7CiAJa2ZyZWUocmJkYyk7CiB9CiAKQEAgLTY2Niw3ICs3NTAsOSBAQAogCQkJICBzdHJ1Y3QgY2VwaF9vc2RfcmVxX29wICpvcHMsCiAJCQkgIGludCBudW1fcmVwbHksCiAJCQkgIHZvaWQgKCpyYmRfY2IpKHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEsCi0JCQkJCSBzdHJ1Y3QgY2VwaF9tc2cgKm1zZykpCisJCQkJCSBzdHJ1Y3QgY2VwaF9tc2cgKm1zZyksCisJCQkgIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICoqbGluZ2VyX3JlcSwKKwkJCSAgdTY0ICp2ZXIpCiB7CiAJc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgY2VwaF9maWxlX2xheW91dCAqbGF5b3V0OwpAQCAtNzI5LDEyICs4MTUsMjAgQEAKIAkJCQlyZXEtPnJfb2lkLCByZXEtPnJfb2lkX2xlbik7CiAJdXBfcmVhZCgmaGVhZGVyLT5zbmFwX3J3c2VtKTsKIAorCWlmIChsaW5nZXJfcmVxKSB7CisJCWNlcGhfb3NkY19zZXRfcmVxdWVzdF9saW5nZXIoJmRldi0+Y2xpZW50LT5vc2RjLCByZXEpOworCQkqbGluZ2VyX3JlcSA9IHJlcTsKKwl9CisKIAlyZXQgPSBjZXBoX29zZGNfc3RhcnRfcmVxdWVzdCgmZGV2LT5jbGllbnQtPm9zZGMsIHJlcSwgZmFsc2UpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGRvbmVfZXJyOwogCiAJaWYgKCFyYmRfY2IpIHsKIAkJcmV0ID0gY2VwaF9vc2RjX3dhaXRfcmVxdWVzdCgmZGV2LT5jbGllbnQtPm9zZGMsIHJlcSk7CisJCWlmICh2ZXIpCisJCQkqdmVyID0gbGU2NF90b19jcHUocmVxLT5yX3JlYXNzZXJ0X3ZlcnNpb24udmVyc2lvbik7CisJCWRvdXQoInJlYXNzZXJ0X3Zlcj0lbGxkXG4iLCBsZTY0X3RvX2NwdShyZXEtPnJfcmVhc3NlcnRfdmVyc2lvbi52ZXJzaW9uKSk7CiAJCWNlcGhfb3NkY19wdXRfcmVxdWVzdChyZXEpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNzg5LDYgKzg4MywxMSBAQAogCWtmcmVlKHJlcV9kYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgcmJkX3NpbXBsZV9yZXFfY2Ioc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcSwgc3RydWN0IGNlcGhfbXNnICptc2cpCit7CisJY2VwaF9vc2RjX3B1dF9yZXF1ZXN0KHJlcSk7Cit9CisKIC8qCiAgKiBEbyBhIHN5bmNocm9ub3VzIGNlcGggb3NkIG9wZXJhdGlvbgogICovCkBAIC04MDEsNyArOTAwLDkgQEAKIAkJCSAgIGludCBudW1fcmVwbHksCiAJCQkgICBjb25zdCBjaGFyICpvYmosCiAJCQkgICB1NjQgb2ZzLCB1NjQgbGVuLAotCQkJICAgY2hhciAqYnVmKQorCQkJICAgY2hhciAqYnVmLAorCQkJICAgc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKipsaW5nZXJfcmVxLAorCQkJICAgdTY0ICp2ZXIpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwpAQCAtODMzLDcgKzkzNCw4IEBACiAJCQkgIGZsYWdzLAogCQkJICBvcHMsCiAJCQkgIDIsCi0JCQkgIE5VTEwpOworCQkJICBOVUxMLAorCQkJICBsaW5nZXJfcmVxLCB2ZXIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGRvbmVfb3BzOwogCkBAIC04OTMsNyArOTk1LDcgQEAKIAkJCSAgICAgZmxhZ3MsCiAJCQkgICAgIG9wcywKIAkJCSAgICAgbnVtX3JlcGx5LAotCQkJICAgICByYmRfcmVxX2NiKTsKKwkJCSAgICAgcmJkX3JlcV9jYiwgMCwgTlVMTCk7CiBkb25lOgogCWtmcmVlKHNlZ19uYW1lKTsKIAlyZXR1cm4gcmV0OwpAQCAtOTQwLDE4ICsxMDQyLDE3NCBAQAogCQkJICB1NjQgc25hcGlkLAogCQkJICBjb25zdCBjaGFyICpvYmosCiAJCQkgIHU2NCBvZnMsIHU2NCBsZW4sCi0JCQkgIGNoYXIgKmJ1ZikKKwkJCSAgY2hhciAqYnVmLAorCQkJICB1NjQgKnZlcikKIHsKIAlyZXR1cm4gcmJkX3JlcV9zeW5jX29wKGRldiwgTlVMTCwKIAkJCSAgICAgICAoc25hcGlkID8gc25hcGlkIDogQ0VQSF9OT1NOQVApLAogCQkJICAgICAgIENFUEhfT1NEX09QX1JFQUQsCiAJCQkgICAgICAgQ0VQSF9PU0RfRkxBR19SRUFELAogCQkJICAgICAgIE5VTEwsCi0JCQkgICAgICAgMSwgb2JqLCBvZnMsIGxlbiwgYnVmKTsKKwkJCSAgICAgICAxLCBvYmosIG9mcywgbGVuLCBidWYsIE5VTEwsIHZlcik7CiB9CiAKIC8qCi0gKiBSZXF1ZXN0IHN5bmMgb3NkIHJlYWQKKyAqIFJlcXVlc3Qgc3luYyBvc2Qgd2F0Y2gKKyAqLworc3RhdGljIGludCByYmRfcmVxX3N5bmNfbm90aWZ5X2FjayhzdHJ1Y3QgcmJkX2RldmljZSAqZGV2LAorCQkJCSAgIHU2NCB2ZXIsCisJCQkJICAgdTY0IG5vdGlmeV9pZCwKKwkJCQkgICBjb25zdCBjaGFyICpvYmopCit7CisJc3RydWN0IGNlcGhfb3NkX3JlcV9vcCAqb3BzOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCWludCByZXQgPSByYmRfY3JlYXRlX3J3X29wcygmb3BzLCAxLCBDRVBIX09TRF9PUF9OT1RJRllfQUNLLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW9wc1swXS53YXRjaC52ZXIgPSBjcHVfdG9fbGU2NChkZXYtPmhlYWRlci5vYmpfdmVyc2lvbik7CisJb3BzWzBdLndhdGNoLmNvb2tpZSA9IG5vdGlmeV9pZDsKKwlvcHNbMF0ud2F0Y2guZmxhZyA9IDA7CisKKwlyZXQgPSByYmRfZG9fcmVxdWVzdChOVUxMLCBkZXYsIE5VTEwsIENFUEhfTk9TTkFQLAorCQkJICBvYmosIDAsIDAsIE5VTEwsCisJCQkgIHBhZ2VzLCAwLAorCQkJICBDRVBIX09TRF9GTEFHX1JFQUQsCisJCQkgIG9wcywKKwkJCSAgMSwKKwkJCSAgcmJkX3NpbXBsZV9yZXFfY2IsIDAsIE5VTEwpOworCisJcmJkX2Rlc3Ryb3lfb3BzKG9wcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmJkX3dhdGNoX2NiKHU2NCB2ZXIsIHU2NCBub3RpZnlfaWQsIHU4IG9wY29kZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmJkX2RldmljZSAqZGV2ID0gKHN0cnVjdCByYmRfZGV2aWNlICopZGF0YTsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJZG91dCgicmJkX3dhdGNoX2NiICVzIG5vdGlmeV9pZD0lbGxkIG9wY29kZT0lZFxuIiwgZGV2LT5vYmpfbWRfbmFtZSwKKwkJbm90aWZ5X2lkLCAoaW50KW9wY29kZSk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmN0bF9tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCV9fcmJkX3VwZGF0ZV9zbmFwcyhkZXYpOworCW11dGV4X3VubG9jaygmY3RsX211dGV4KTsKKworCXJiZF9yZXFfc3luY19ub3RpZnlfYWNrKGRldiwgdmVyLCBub3RpZnlfaWQsIGRldi0+b2JqX21kX25hbWUpOworfQorCisvKgorICogUmVxdWVzdCBzeW5jIG9zZCB3YXRjaAorICovCitzdGF0aWMgaW50IHJiZF9yZXFfc3luY193YXRjaChzdHJ1Y3QgcmJkX2RldmljZSAqZGV2LAorCQkJICAgICAgY29uc3QgY2hhciAqb2JqLAorCQkJICAgICAgdTY0IHZlcikKK3sKKwlzdHJ1Y3QgY2VwaF9vc2RfcmVxX29wICpvcHM7CisJc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYyA9ICZkZXYtPmNsaWVudC0+b3NkYzsKKworCWludCByZXQgPSByYmRfY3JlYXRlX3J3X29wcygmb3BzLCAxLCBDRVBIX09TRF9PUF9XQVRDSCwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZXBoX29zZGNfY3JlYXRlX2V2ZW50KG9zZGMsIHJiZF93YXRjaF9jYiwgMCwKKwkJCQkgICAgICh2b2lkICopZGV2LCAmZGV2LT53YXRjaF9ldmVudCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbDsKKworCW9wc1swXS53YXRjaC52ZXIgPSBjcHVfdG9fbGU2NCh2ZXIpOworCW9wc1swXS53YXRjaC5jb29raWUgPSBjcHVfdG9fbGU2NChkZXYtPndhdGNoX2V2ZW50LT5jb29raWUpOworCW9wc1swXS53YXRjaC5mbGFnID0gMTsKKworCXJldCA9IHJiZF9yZXFfc3luY19vcChkZXYsIE5VTEwsCisJCQkgICAgICBDRVBIX05PU05BUCwKKwkJCSAgICAgIDAsCisJCQkgICAgICBDRVBIX09TRF9GTEFHX1dSSVRFIHwgQ0VQSF9PU0RfRkxBR19PTkRJU0ssCisJCQkgICAgICBvcHMsCisJCQkgICAgICAxLCBvYmosIDAsIDAsIE5VTEwsCisJCQkgICAgICAmZGV2LT53YXRjaF9yZXF1ZXN0LCBOVUxMKTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxfZXZlbnQ7CisKKwlyYmRfZGVzdHJveV9vcHMob3BzKTsKKwlyZXR1cm4gMDsKKworZmFpbF9ldmVudDoKKwljZXBoX29zZGNfY2FuY2VsX2V2ZW50KGRldi0+d2F0Y2hfZXZlbnQpOworCWRldi0+d2F0Y2hfZXZlbnQgPSBOVUxMOworZmFpbDoKKwlyYmRfZGVzdHJveV9vcHMob3BzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcmJkX25vdGlmeV9pbmZvIHsKKwlzdHJ1Y3QgcmJkX2RldmljZSAqZGV2OworfTsKKworc3RhdGljIHZvaWQgcmJkX25vdGlmeV9jYih1NjQgdmVyLCB1NjQgbm90aWZ5X2lkLCB1OCBvcGNvZGUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJiZF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgcmJkX2RldmljZSAqKWRhdGE7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWRvdXQoInJiZF9ub3RpZnlfY2IgJXMgbm90aWZ5X2lkPSVsbGQgb3Bjb2RlPSVkXG4iLCBkZXYtPm9ial9tZF9uYW1lLAorCQlub3RpZnlfaWQsIChpbnQpb3Bjb2RlKTsKK30KKworLyoKKyAqIFJlcXVlc3Qgc3luYyBvc2Qgbm90aWZ5CisgKi8KK3N0YXRpYyBpbnQgcmJkX3JlcV9zeW5jX25vdGlmeShzdHJ1Y3QgcmJkX2RldmljZSAqZGV2LAorCQkgICAgICAgICAgY29uc3QgY2hhciAqb2JqKQoreworCXN0cnVjdCBjZXBoX29zZF9yZXFfb3AgKm9wczsKKwlzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjID0gJmRldi0+Y2xpZW50LT5vc2RjOworCXN0cnVjdCBjZXBoX29zZF9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJiZF9ub3RpZnlfaW5mbyBpbmZvOworCWludCBwYXlsb2FkX2xlbiA9IHNpemVvZih1MzIpICsgc2l6ZW9mKHUzMik7CisJaW50IHJldDsKKworCXJldCA9IHJiZF9jcmVhdGVfcndfb3BzKCZvcHMsIDEsIENFUEhfT1NEX09QX05PVElGWSwgcGF5bG9hZF9sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaW5mby5kZXYgPSBkZXY7CisKKwlyZXQgPSBjZXBoX29zZGNfY3JlYXRlX2V2ZW50KG9zZGMsIHJiZF9ub3RpZnlfY2IsIDEsCisJCQkJICAgICAodm9pZCAqKSZpbmZvLCAmZXZlbnQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlvcHNbMF0ud2F0Y2gudmVyID0gMTsKKwlvcHNbMF0ud2F0Y2guZmxhZyA9IDE7CisJb3BzWzBdLndhdGNoLmNvb2tpZSA9IGV2ZW50LT5jb29raWU7CisJb3BzWzBdLndhdGNoLnByb3RfdmVyID0gUkFET1NfTk9USUZZX1ZFUjsKKwlvcHNbMF0ud2F0Y2gudGltZW91dCA9IDEyOworCisJcmV0ID0gcmJkX3JlcV9zeW5jX29wKGRldiwgTlVMTCwKKwkJCSAgICAgICBDRVBIX05PU05BUCwKKwkJCSAgICAgICAwLAorCQkJICAgICAgIENFUEhfT1NEX0ZMQUdfV1JJVEUgfCBDRVBIX09TRF9GTEFHX09ORElTSywKKwkJCSAgICAgICBvcHMsCisJCQkgICAgICAgMSwgb2JqLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsX2V2ZW50OworCisJcmV0ID0gY2VwaF9vc2RjX3dhaXRfZXZlbnQoZXZlbnQsIENFUEhfT1NEX1RJTUVPVVRfREVGQVVMVCk7CisJZG91dCgiY2VwaF9vc2RjX3dhaXRfZXZlbnQgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJcmJkX2Rlc3Ryb3lfb3BzKG9wcyk7CisJcmV0dXJuIDA7CisKK2ZhaWxfZXZlbnQ6CisJY2VwaF9vc2RjX2NhbmNlbF9ldmVudChldmVudCk7CitmYWlsOgorCXJiZF9kZXN0cm95X29wcyhvcHMpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXF1ZXN0IHN5bmMgb3NkIHJvbGxiYWNrCiAgKi8KIHN0YXRpYyBpbnQgcmJkX3JlcV9zeW5jX3JvbGxiYWNrX29iaihzdHJ1Y3QgcmJkX2RldmljZSAqZGV2LAogCQkJCSAgICAgdTY0IHNuYXBpZCwKQEAgLTk2OSwxMyArMTIyNywxMCBAQAogCQkJICAgICAgIDAsCiAJCQkgICAgICAgQ0VQSF9PU0RfRkxBR19XUklURSB8IENFUEhfT1NEX0ZMQUdfT05ESVNLLAogCQkJICAgICAgIG9wcywKLQkJCSAgICAgICAxLCBvYmosIDAsIDAsIE5VTEwpOworCQkJICAgICAgIDEsIG9iaiwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAKIAlyYmRfZGVzdHJveV9vcHMob3BzKTsKIAotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTg3LDcgKzEyNDIsOCBAQAogCQkJICAgICBjb25zdCBjaGFyICpjbHMsCiAJCQkgICAgIGNvbnN0IGNoYXIgKm1ldGhvZCwKIAkJCSAgICAgY29uc3QgY2hhciAqZGF0YSwKLQkJCSAgICAgaW50IGxlbikKKwkJCSAgICAgaW50IGxlbiwKKwkJCSAgICAgdTY0ICp2ZXIpCiB7CiAJc3RydWN0IGNlcGhfb3NkX3JlcV9vcCAqb3BzOwogCWludCBjbHNfbGVuID0gc3RybGVuKGNscyk7CkBAIC0xMDEwLDcgKzEyNjYsNyBAQAogCQkJICAgICAgIDAsCiAJCQkgICAgICAgQ0VQSF9PU0RfRkxBR19XUklURSB8IENFUEhfT1NEX0ZMQUdfT05ESVNLLAogCQkJICAgICAgIG9wcywKLQkJCSAgICAgICAxLCBvYmosIDAsIDAsIE5VTEwpOworCQkJICAgICAgIDEsIG9iaiwgMCwgMCwgTlVMTCwgTlVMTCwgdmVyKTsKIAogCXJiZF9kZXN0cm95X29wcyhvcHMpOwogCkBAIC0xMTU2LDYgKzE0MTIsNyBAQAogCXN0cnVjdCByYmRfaW1hZ2VfaGVhZGVyX29uZGlzayAqZGg7CiAJaW50IHNuYXBfY291bnQgPSAwOwogCXU2NCBzbmFwX25hbWVzX2xlbiA9IDA7CisJdTY0IHZlcjsKIAogCXdoaWxlICgxKSB7CiAJCWludCBsZW4gPSBzaXplb2YoKmRoKSArCkBAIC0xMTcxLDcgKzE0MjgsNyBAQAogCQkJCSAgICAgICBOVUxMLCBDRVBIX05PU05BUCwKIAkJCQkgICAgICAgcmJkX2Rldi0+b2JqX21kX25hbWUsCiAJCQkJICAgICAgIDAsIGxlbiwKLQkJCQkgICAgICAgKGNoYXIgKilkaCk7CisJCQkJICAgICAgIChjaGFyICopZGgsICZ2ZXIpOwogCQlpZiAocmMgPCAwKQogCQkJZ290byBvdXRfZGg7CiAKQEAgLTExODgsNiArMTQ0NSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJfQorCWhlYWRlci0+b2JqX3ZlcnNpb24gPSB2ZXI7CiAKIG91dF9kaDoKIAlrZnJlZShkaCk7CkBAIC0xMjA1LDYgKzE0NjMsNyBAQAogCXU2NCBuZXdfc25hcGlkOwogCWludCByZXQ7CiAJdm9pZCAqZGF0YSwgKmRhdGFfc3RhcnQsICpkYXRhX2VuZDsKKwl1NjQgdmVyOwogCiAJLyogd2Ugc2hvdWxkIGNyZWF0ZSBhIHNuYXBzaG90IG9ubHkgaWYgd2UncmUgcG9pbnRpbmcgYXQgdGhlIGhlYWQgKi8KIAlpZiAoZGV2LT5jdXJfc25hcCkKQEAgLTEyMjcsNyArMTQ4Niw3IEBACiAJY2VwaF9lbmNvZGVfNjRfc2FmZSgmZGF0YSwgZGF0YV9lbmQsIG5ld19zbmFwaWQsIGJhZCk7CiAKIAlyZXQgPSByYmRfcmVxX3N5bmNfZXhlYyhkZXYsIGRldi0+b2JqX21kX25hbWUsICJyYmQiLCAic25hcF9hZGQiLAotCQkJCWRhdGFfc3RhcnQsIGRhdGEgLSBkYXRhX3N0YXJ0KTsKKwkJCQlkYXRhX3N0YXJ0LCBkYXRhIC0gZGF0YV9zdGFydCwgJnZlcik7CiAKIAlrZnJlZShkYXRhX3N0YXJ0KTsKIApAQCAtMTI1OSw2ICsxNTE4LDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCByYmRfaW1hZ2VfaGVhZGVyIGg7CiAJdTY0IHNuYXBfc2VxOworCWludCBmb2xsb3dfc2VxID0gMDsKIAogCXJldCA9IHJiZF9yZWFkX2hlYWRlcihyYmRfZGV2LCAmaCk7CiAJaWYgKHJldCA8IDApCkBAIC0xMjY3LDYgKzE1MjcsMTEgQEAKIAlkb3duX3dyaXRlKCZyYmRfZGV2LT5oZWFkZXIuc25hcF9yd3NlbSk7CiAKIAlzbmFwX3NlcSA9IHJiZF9kZXYtPmhlYWRlci5zbmFwYy0+c2VxOworCWlmIChyYmRfZGV2LT5oZWFkZXIudG90YWxfc25hcHMgJiYKKwkgICAgcmJkX2Rldi0+aGVhZGVyLnNuYXBjLT5zbmFwc1swXSA9PSBzbmFwX3NlcSkKKwkJLyogcG9pbnRpbmcgYXQgdGhlIGhlYWQsIHdpbGwgbmVlZCB0byBmb2xsb3cgdGhhdAorCQkgICBpZiBoZWFkIG1vdmVzICovCisJCWZvbGxvd19zZXEgPSAxOwogCiAJa2ZyZWUocmJkX2Rldi0+aGVhZGVyLnNuYXBjKTsKIAlrZnJlZShyYmRfZGV2LT5oZWFkZXIuc25hcF9uYW1lcyk7CkBAIC0xMjc3LDcgKzE1NDIsMTAgQEAKIAlyYmRfZGV2LT5oZWFkZXIuc25hcF9uYW1lcyA9IGguc25hcF9uYW1lczsKIAlyYmRfZGV2LT5oZWFkZXIuc25hcF9uYW1lc19sZW4gPSBoLnNuYXBfbmFtZXNfbGVuOwogCXJiZF9kZXYtPmhlYWRlci5zbmFwX3NpemVzID0gaC5zbmFwX3NpemVzOwotCXJiZF9kZXYtPmhlYWRlci5zbmFwYy0+c2VxID0gc25hcF9zZXE7CisJaWYgKGZvbGxvd19zZXEpCisJCXJiZF9kZXYtPmhlYWRlci5zbmFwYy0+c2VxID0gcmJkX2Rldi0+aGVhZGVyLnNuYXBjLT5zbmFwc1swXTsKKwllbHNlCisJCXJiZF9kZXYtPmhlYWRlci5zbmFwYy0+c2VxID0gc25hcF9zZXE7CiAKIAlyZXQgPSBfX3JiZF9pbml0X3NuYXBzX2hlYWRlcihyYmRfZGV2KTsKIApAQCAtMTY5OSw3ICsxOTY3LDI4IEBACiAJZGV2aWNlX3VucmVnaXN0ZXIoJnJiZF9kZXYtPmRldik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHJiZF9hZGQoc3RydWN0IGJ1c190eXBlICpidXMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIGludCByYmRfaW5pdF93YXRjaF9kZXYoc3RydWN0IHJiZF9kZXZpY2UgKnJiZF9kZXYpCit7CisJaW50IHJldCwgcmM7CisKKwlkbyB7CisJCXJldCA9IHJiZF9yZXFfc3luY193YXRjaChyYmRfZGV2LCByYmRfZGV2LT5vYmpfbWRfbmFtZSwKKwkJCQkJIHJiZF9kZXYtPmhlYWRlci5vYmpfdmVyc2lvbik7CisJCWlmIChyZXQgPT0gLUVSQU5HRSkgeworCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJmN0bF9tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCQkJcmMgPSBfX3JiZF91cGRhdGVfc25hcHMocmJkX2Rldik7CisJCQltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCX0gd2hpbGUgKHJldCA9PSAtRVJBTkdFKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJiZF9hZGQoc3RydWN0IGJ1c190eXBlICpidXMsCisJCSAgICAgICBjb25zdCBjaGFyICpidWYsCisJCSAgICAgICBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYzsKIAlzdHJ1Y3QgcmJkX2RldmljZSAqcmJkX2RldjsKQEAgLTE3OTcsNiArMjA4NiwxMCBAQAogCWlmIChyYykKIAkJZ290byBlcnJfb3V0X2J1czsKIAorCXJjID0gcmJkX2luaXRfd2F0Y2hfZGV2KHJiZF9kZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfb3V0X2J1czsKKwogCXJldHVybiBjb3VudDsKIAogZXJyX291dF9idXM6CkBAIC0xODQ5LDYgKzIxNDIsMTIgQEAKIAlzdHJ1Y3QgcmJkX2RldmljZSAqcmJkX2RldiA9CiAJCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcmJkX2RldmljZSwgZGV2KTsKIAorCWlmIChyYmRfZGV2LT53YXRjaF9yZXF1ZXN0KQorCQljZXBoX29zZGNfdW5yZWdpc3Rlcl9saW5nZXJfcmVxdWVzdCgmcmJkX2Rldi0+Y2xpZW50LT5vc2RjLAorCQkJCQkJICAgIHJiZF9kZXYtPndhdGNoX3JlcXVlc3QpOworCWlmIChyYmRfZGV2LT53YXRjaF9ldmVudCkKKwkJY2VwaF9vc2RjX2NhbmNlbF9ldmVudChyYmRfZGV2LT53YXRjaF9ldmVudCk7CisKIAlyYmRfcHV0X2NsaWVudChyYmRfZGV2KTsKIAogCS8qIGNsZWFuIHVwIGFuZCBmcmVlIGJsa2RldiAqLwpAQCAtMTkxNCwxNCArMjIxMywyNCBAQAogCXJldCA9IHJiZF9oZWFkZXJfYWRkX3NuYXAocmJkX2RldiwKIAkJCQkgIG5hbWUsIEdGUF9LRVJORUwpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGRvbmVfdW5sb2NrOworCQlnb3RvIGVycl91bmxvY2s7CiAKIAlyZXQgPSBfX3JiZF91cGRhdGVfc25hcHMocmJkX2Rldik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZG9uZV91bmxvY2s7CisJCWdvdG8gZXJyX3VubG9jazsKKworCS8qIHNob3VsZG4ndCBob2xkIGN0bF9tdXRleCB3aGVuIG5vdGlmeWluZy4uIG5vdGlmeSBtaWdodAorCSAgIHRyaWdnZXIgYSB3YXRjaCBjYWxsYmFjayB0aGF0IHdvdWxkIG5lZWQgdG8gZ2V0IHRoYXQgbXV0ZXggKi8KKwltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CisKKwkvKiBtYWtlIGEgYmVzdCBlZmZvcnQsIGRvbid0IGVycm9yIGlmIGZhaWxlZCAqLworCXJiZF9yZXFfc3luY19ub3RpZnkocmJkX2RldiwgcmJkX2Rldi0+b2JqX21kX25hbWUpOwogCiAJcmV0ID0gY291bnQ7Ci1kb25lX3VubG9jazoKKwlrZnJlZShuYW1lKTsKKwlyZXR1cm4gcmV0OworCitlcnJfdW5sb2NrOgogCW11dGV4X3VubG9jaygmY3RsX211dGV4KTsKIAlrZnJlZShuYW1lKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zbWFydDEsMi5oIGIvZHJpdmVycy9ibG9jay9zbWFydDEsMi5oCmluZGV4IGEwYjQwM2EuLmU1NTY1ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc21hcnQxLDIuaAorKysgYi9kcml2ZXJzL2Jsb2NrL3NtYXJ0MSwyLmgKQEAgLTk1LDcgKzk1LDcgQEAKICAvKgogICogIFRoaXMgaGFyZHdhcmUgcmV0dXJucyBpbnRlcnJ1cHQgcGVuZGluZyBhdCBhIGRpZmZlcmVudCBwbGFjZSBhbmQgCiAgKiAgaXQgZG9lcyBub3QgdGVsbCB1cyBpZiB0aGUgZmlmbyBpcyBlbXB0eSwgd2Ugd2lsbCBoYXZlIGNoZWNrICAKLSAqICB0aGF0IGJ5IGdldHRpbmcgYSAwIGJhY2sgZnJvbSB0aGUgY29tYW1uZF9jb21wbGV0ZWQgY2FsbC4gCisgKiAgdGhhdCBieSBnZXR0aW5nIGEgMCBiYWNrIGZyb20gdGhlIGNvbW1hbmRfY29tcGxldGVkIGNhbGwuIAogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbWFydDRfaW50cl9wZW5kaW5nKGN0bHJfaW5mb190ICpoKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggN2UwZWJkNC4uODY2ODExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBfX2ZpbGxfaXNvY19kZXNjcmlwdG9yKHN0cnVjdCB1cmIgKnVyYiwgaW50IGxlbiwgaW50IG10dSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbGxfaXNvY19kZXNjcmlwdG9yKHN0cnVjdCB1cmIgKnVyYiwgaW50IGxlbiwgaW50IG10dSkKIHsKIAlpbnQgaSwgb2Zmc2V0ID0gMDsKIApAQCAtNzgwLDcgKzc4MCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGlubGluZSBfX3NldF9pc29jX2ludGVyZmFjZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IGFsdHNldHRpbmcpCitzdGF0aWMgaW5saW5lIGludCBfX3NldF9pc29jX2ludGVyZmFjZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IGFsdHNldHRpbmcpCiB7CiAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSBoZGV2LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IGRhdGEtPmlzb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDA0ZjhiMmQwLi5hZDU5YjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtNjA4LDUgKzYwOCwxMyBAQAogCSAgVGhpcyBlbmFibGVzIHBhbmljIGFuZCBvb3BzIG1lc3NhZ2VzIHRvIGJlIGxvZ2dlZCB0byBhIGNpcmN1bGFyCiAJICBidWZmZXIgaW4gUkFNIHdoZXJlIGl0IGNhbiBiZSByZWFkIGJhY2sgYXQgc29tZSBsYXRlciBwb2ludC4KIAorY29uZmlnIE1TTV9TTURfUEtUCisJYm9vbCAiRW5hYmxlIGRldmljZSBpbnRlcmZhY2UgZm9yIHNvbWUgU01EIHBhY2tldCBwb3J0cyIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIE1TTV9TTUQKKwloZWxwCisJICBFbmFibGVzIHVzZXJzcGFjZSBjbGllbnRzIHRvIHJlYWQgYW5kIHdyaXRlIHRvIHNvbWUgcGFja2V0IFNNRAorCSAgcG9ydHMgdmlhIGRldmljZSBpbnRlcmZhY2UgZm9yIE1TTSBjaGlwc2V0LgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQppbmRleCAwNTdmNjU0Li43YTAwNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogb2JqLSQoQ09ORklHX1ZJUlRJT19DT05TT0xFKQkrPSB2aXJ0aW9fY29uc29sZS5vCiBvYmotJChDT05GSUdfUkFXX0RSSVZFUikJKz0gcmF3Lm8KIG9iai0kKENPTkZJR19TR0lfU05TQykJCSs9IHNuc2MubyBzbnNjX2V2ZW50Lm8KK29iai0kKENPTkZJR19NU01fU01EX1BLVCkJKz0gbXNtX3NtZF9wa3Qubwogb2JqLSQoQ09ORklHX01TUEVDKQkJKz0gbXNwZWMubwogb2JqLSQoQ09ORklHX01NVElNRVIpCQkrPSBtbXRpbWVyLm8KIG9iai0kKENPTkZJR19VVl9NTVRJTUVSKQkrPSB1dl9tbXRpbWVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggYzg2ZDQzYi4uZDI4YjQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTM1MjEsNyArMzUyMSw3IEBACiAJa2ZyZWUodG9fY2xlYW4pOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9pcG1pX3NpKHZvaWQpCitzdGF0aWMgdm9pZCBjbGVhbnVwX2lwbWlfc2kodm9pZCkKIHsKIAlzdHJ1Y3Qgc21pX2luZm8gKmUsICp0bXBfZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDEyNTY0NTQuLjQzNmE5OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTQ3LDEwICs0Nyw3IEBACiAjaWZuZGVmIEFSQ0hfSEFTX1ZBTElEX1BIWVNfQUREUl9SQU5HRQogc3RhdGljIGlubGluZSBpbnQgdmFsaWRfcGh5c19hZGRyX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGNvdW50KQogewotCWlmIChhZGRyICsgY291bnQgPiBfX3BhKGhpZ2hfbWVtb3J5KSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gYWRkciArIGNvdW50IDw9IF9fcGEoaGlnaF9tZW1vcnkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB2YWxpZF9tbWFwX3BoeXNfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgc2l6ZV90IHNpemUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXNtX3NtZF9wa3QuYyBiL2RyaXZlcnMvY2hhci9tc21fc21kX3BrdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjhhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvbXNtX3NtZF9wa3QuYwpAQCAtMCwwICsxLDQ2NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisvKgorICogU01EIFBhY2tldCBEcml2ZXIgLS0gUHJvdmlkZXMgdXNlcnNwYWNlIGludGVyZmFjZSB0byBTTUQgcGFja2V0IHBvcnRzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKworI2luY2x1ZGUgPG1hY2gvbXNtX3NtZC5oPgorCisjZGVmaW5lIE5VTV9TTURfUEtUX1BPUlRTIDkKKyNkZWZpbmUgREVWSUNFX05BTUUgInNtZHBrdCIKKyNkZWZpbmUgTUFYX0JVRl9TSVpFIDIwNDgKKworc3RydWN0IHNtZF9wa3RfZGV2IHsKKwlzdHJ1Y3QgY2RldiBjZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldmljZXA7CisKKwlzdHJ1Y3Qgc21kX2NoYW5uZWwgKmNoOworCWludCBvcGVuX2NvdW50OworCXN0cnVjdCBtdXRleCBjaF9sb2NrOworCXN0cnVjdCBtdXRleCByeF9sb2NrOworCXN0cnVjdCBtdXRleCB0eF9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90IGNoX3JlYWRfd2FpdF9xdWV1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBjaF9vcGVuZWRfd2FpdF9xdWV1ZTsKKworCWludCBpOworCisJdW5zaWduZWQgY2hhciB0eF9idWZbTUFYX0JVRl9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIHJ4X2J1ZltNQVhfQlVGX1NJWkVdOworCWludCByZW1vdGVfb3BlbjsKKworfSAqc21kX3BrdF9kZXZwW05VTV9TTURfUEtUX1BPUlRTXTsKKworc3RydWN0IGNsYXNzICpzbWRfcGt0X2NsYXNzcDsKK3N0YXRpYyBkZXZfdCBzbWRfcGt0X251bWJlcjsKKworc3RhdGljIGludCBtc21fc21kX3BrdF9kZWJ1Z19lbmFibGU7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfZW5hYmxlLCBtc21fc21kX3BrdF9kZWJ1Z19lbmFibGUsCisJCSAgIGludCwgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQKTsKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERfRFVNUF9CVUZGRVIocHJlc3RyLCBjbnQsIGJ1ZikgZG8gewkJCVwKKwkJaW50IGk7CQkJCQkJXAorCQlpZiAobXNtX3NtZF9wa3RfZGVidWdfZW5hYmxlKSB7CQkJXAorCQkJcHJfZGVidWcoIiVzIiwgcHJlc3RyKTsJCQlcCisJCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCQlcCisJCQkJcHJfZGVidWcoIiUuMngiLCBidWZbaV0pOwlcCisJCQlwcl9kZWJ1ZygiXG4iKTsJCQkJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEX0RVTVBfQlVGRkVSKHByZXN0ciwgY250LCBidWYpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoeC4uLikgZG8gewkJCVwKKwlpZiAobXNtX3NtZF9wa3RfZGVidWdfZW5hYmxlKQlcCisJCXByX2RlYnVnKHgpOwkJXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEQkcoeC4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgY2hlY2tfYW5kX3dha2V1cF9yZWFkZXIoc3RydWN0IHNtZF9wa3RfZGV2ICpzbWRfcGt0X2RldnApCit7CisJaW50IHN6OworCisJaWYgKCFzbWRfcGt0X2RldnAgfHwgIXNtZF9wa3RfZGV2cC0+Y2gpCisJCXJldHVybjsKKworCXN6ID0gc21kX2N1cl9wYWNrZXRfc2l6ZShzbWRfcGt0X2RldnAtPmNoKTsKKwlpZiAoc3ogPT0gMCkgeworCQlEQkcoIm5vIHBhY2tldFxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKHN6ID4gc21kX3JlYWRfYXZhaWwoc21kX3BrdF9kZXZwLT5jaCkpIHsKKwkJREJHKCJpbmNvbXBsZXRlIHBhY2tldFxuIik7CisJCXJldHVybjsKKwl9CisKKwlEQkcoIndha2luZyB1cCByZWFkZXJcbiIpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc21kX3BrdF9kZXZwLT5jaF9yZWFkX3dhaXRfcXVldWUpOworfQorCitzdGF0aWMgaW50IHNtZF9wa3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCByLCBieXRlc19yZWFkOworCXN0cnVjdCBzbWRfcGt0X2RldiAqc21kX3BrdF9kZXZwOworCXN0cnVjdCBzbWRfY2hhbm5lbCAqY2hsOworCisJREJHKCJyZWFkICVkIGJ5dGVzXG4iLCBjb3VudCk7CisJaWYgKGNvdW50ID4gTUFYX0JVRl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNtZF9wa3RfZGV2cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoIXNtZF9wa3RfZGV2cCB8fCAhc21kX3BrdF9kZXZwLT5jaCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljaGwgPSBzbWRfcGt0X2RldnAtPmNoOword2FpdF9mb3JfcGFja2V0OgorCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc21kX3BrdF9kZXZwLT5jaF9yZWFkX3dhaXRfcXVldWUsCisJCQkJICAgICAoc21kX2N1cl9wYWNrZXRfc2l6ZShjaGwpID4gMCAmJgorCQkJCSAgICAgIHNtZF9yZWFkX2F2YWlsKGNobCkgPj0KKwkJCQkgICAgICBzbWRfY3VyX3BhY2tldF9zaXplKGNobCkpKTsKKworCWlmIChyIDwgMCkgeworCQlpZiAociAhPSAtRVJFU1RBUlRTWVMpCisJCQlwcl9lcnIoIndhaXQgcmV0dXJuZWQgJWRcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwltdXRleF9sb2NrKCZzbWRfcGt0X2RldnAtPnJ4X2xvY2spOworCisJYnl0ZXNfcmVhZCA9IHNtZF9jdXJfcGFja2V0X3NpemUoc21kX3BrdF9kZXZwLT5jaCk7CisJaWYgKGJ5dGVzX3JlYWQgPT0gMCB8fAorCSAgICBieXRlc19yZWFkIDwgc21kX3JlYWRfYXZhaWwoc21kX3BrdF9kZXZwLT5jaCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzbWRfcGt0X2RldnAtPnJ4X2xvY2spOworCQlEQkcoIk5vdGhpbmcgdG8gcmVhZFxuIik7CisJCWdvdG8gd2FpdF9mb3JfcGFja2V0OworCX0KKworCWlmIChieXRlc19yZWFkID4gY291bnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzbWRfcGt0X2RldnAtPnJ4X2xvY2spOworCQlwcl9pbmZvKCJwYWNrZXQgc2l6ZSAlZCA+IGJ1ZmZlciBzaXplICVkIiwgYnl0ZXNfcmVhZCwgY291bnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyID0gc21kX3JlYWQoc21kX3BrdF9kZXZwLT5jaCwgc21kX3BrdF9kZXZwLT5yeF9idWYsIGJ5dGVzX3JlYWQpOworCWlmIChyICE9IGJ5dGVzX3JlYWQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzbWRfcGt0X2RldnAtPnJ4X2xvY2spOworCQlwcl9lcnIoInNtZF9yZWFkIGZhaWxlZCB0byByZWFkICVkIGJ5dGVzOiAlZFxuIiwgYnl0ZXNfcmVhZCwgcik7CisJCXJldHVybiAtRUlPOworCX0KKworCURfRFVNUF9CVUZGRVIoInJlYWQ6ICIsIGJ5dGVzX3JlYWQsIHNtZF9wa3RfZGV2cC0+cnhfYnVmKTsKKwlyID0gY29weV90b191c2VyKGJ1Ziwgc21kX3BrdF9kZXZwLT5yeF9idWYsIGJ5dGVzX3JlYWQpOworCW11dGV4X3VubG9jaygmc21kX3BrdF9kZXZwLT5yeF9sb2NrKTsKKwlpZiAocikgeworCQlwcl9lcnIoImNvcHlfdG9fdXNlciBmYWlsZWQgJWRcbiIsIHIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlEQkcoInJlYWQgY29tcGxldGUgJWQgYnl0ZXNcbiIsIGJ5dGVzX3JlYWQpOworCWNoZWNrX2FuZF93YWtldXBfcmVhZGVyKHNtZF9wa3RfZGV2cCk7CisKKwlyZXR1cm4gYnl0ZXNfcmVhZDsKK30KKworc3RhdGljIGludCBzbWRfcGt0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCByOworCXN0cnVjdCBzbWRfcGt0X2RldiAqc21kX3BrdF9kZXZwOworCisJaWYgKGNvdW50ID4gTUFYX0JVRl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCURCRygid3JpdHRpbmcgJWQgYnl0ZXNcbiIsIGNvdW50KTsKKworCXNtZF9wa3RfZGV2cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoIXNtZF9wa3RfZGV2cCB8fCAhc21kX3BrdF9kZXZwLT5jaCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzbWRfcGt0X2RldnAtPnR4X2xvY2spOworCWlmIChzbWRfd3JpdGVfYXZhaWwoc21kX3BrdF9kZXZwLT5jaCkgPCBjb3VudCkgeworCQltdXRleF91bmxvY2soJnNtZF9wa3RfZGV2cC0+dHhfbG9jayk7CisJCURCRygiTm90IGVub3VnaCBzcGFjZSB0byB3cml0ZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCURfRFVNUF9CVUZGRVIoIndyaXRlOiAiLCBjb3VudCwgYnVmKTsKKwlyID0gY29weV9mcm9tX3VzZXIoc21kX3BrdF9kZXZwLT50eF9idWYsIGJ1ZiwgY291bnQpOworCWlmIChyKSB7CisJCW11dGV4X3VubG9jaygmc21kX3BrdF9kZXZwLT50eF9sb2NrKTsKKwkJcHJfZXJyKCJjb3B5X2Zyb21fdXNlciBmYWlsZWQgJWRcbiIsIHIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyID0gc21kX3dyaXRlKHNtZF9wa3RfZGV2cC0+Y2gsIHNtZF9wa3RfZGV2cC0+dHhfYnVmLCBjb3VudCk7CisJaWYgKHIgIT0gY291bnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzbWRfcGt0X2RldnAtPnR4X2xvY2spOworCQlwcl9lcnIoInNtZF93cml0ZSBmYWlsZWQgdG8gd3JpdGUgJWQgYnl0ZXM6ICVkLlxuIiwgY291bnQsIHIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzbWRfcGt0X2RldnAtPnR4X2xvY2spOworCisJREJHKCJ3cm90ZSAlZCBieXRlc1xuIiwgY291bnQpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzbWRfcGt0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNtZF9wa3RfZGV2ICpzbWRfcGt0X2RldnA7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJc21kX3BrdF9kZXZwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmICghc21kX3BrdF9kZXZwKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCURCRygicG9sbCB3YWl0aW5nXG4iKTsKKwlwb2xsX3dhaXQoZmlsZSwgJnNtZF9wa3RfZGV2cC0+Y2hfcmVhZF93YWl0X3F1ZXVlLCB3YWl0KTsKKwlpZiAoc21kX3JlYWRfYXZhaWwoc21kX3BrdF9kZXZwLT5jaCkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCURCRygicG9sbCByZXR1cm5cbiIpOworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgdm9pZCBzbWRfcGt0X2NoX25vdGlmeSh2b2lkICpwcml2LCB1bnNpZ25lZCBldmVudCkKK3sKKwlzdHJ1Y3Qgc21kX3BrdF9kZXYgKnNtZF9wa3RfZGV2cCA9IHByaXY7CisKKwlpZiAoc21kX3BrdF9kZXZwLT5jaCA9PSAwKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTURfRVZFTlRfREFUQToKKwkJREJHKCJkYXRhXG4iKTsKKwkJY2hlY2tfYW5kX3dha2V1cF9yZWFkZXIoc21kX3BrdF9kZXZwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNNRF9FVkVOVF9PUEVOOgorCQlEQkcoInJlbW90ZSBvcGVuXG4iKTsKKwkJc21kX3BrdF9kZXZwLT5yZW1vdGVfb3BlbiA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc21kX3BrdF9kZXZwLT5jaF9vcGVuZWRfd2FpdF9xdWV1ZSk7CisJCWJyZWFrOworCisJY2FzZSBTTURfRVZFTlRfQ0xPU0U6CisJCXNtZF9wa3RfZGV2cC0+cmVtb3RlX29wZW4gPSAwOworCQlwcl9pbmZvKCJyZW1vdGUgY2xvc2VkXG4iKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9lcnIoInVua25vd24gZXZlbnQgJWRcbiIsIGV2ZW50KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgY2hhciAqc21kX3BrdF9kZXZfbmFtZVtdID0geworCSJzbWRjbnRsMCIsCisJInNtZGNudGwxIiwKKwkic21kY250bDIiLAorCSJzbWRjbnRsMyIsCisJInNtZGNudGw0IiwKKwkic21kY250bDUiLAorCSJzbWRjbnRsNiIsCisJInNtZGNudGw3IiwKKwkic21kMjIiLAorfTsKKworc3RhdGljIGNoYXIgKnNtZF9jaF9uYW1lW10gPSB7CisJIkRBVEE1X0NOVEwiLAorCSJEQVRBNl9DTlRMIiwKKwkiREFUQTdfQ05UTCIsCisJIkRBVEE4X0NOVEwiLAorCSJEQVRBOV9DTlRMIiwKKwkiREFUQTEyX0NOVEwiLAorCSJEQVRBMTNfQ05UTCIsCisJIkRBVEExNF9DTlRMIiwKKwkiREFUQTIyIiwKK307CisKK3N0YXRpYyBpbnQgc21kX3BrdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qgc21kX3BrdF9kZXYgKnNtZF9wa3RfZGV2cDsKKworCXNtZF9wa3RfZGV2cCA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3Qgc21kX3BrdF9kZXYsIGNkZXYpOworCWlmICghc21kX3BrdF9kZXZwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNtZF9wa3RfZGV2cDsKKworCW11dGV4X2xvY2soJnNtZF9wa3RfZGV2cC0+Y2hfbG9jayk7CisJaWYgKHNtZF9wa3RfZGV2cC0+b3Blbl9jb3VudCA9PSAwKSB7CisJCXIgPSBzbWRfb3BlbihzbWRfY2hfbmFtZVtzbWRfcGt0X2RldnAtPmldLAorCQkJICAgICAmc21kX3BrdF9kZXZwLT5jaCwgc21kX3BrdF9kZXZwLAorCQkJICAgICBzbWRfcGt0X2NoX25vdGlmeSk7CisJCWlmIChyIDwgMCkgeworCQkJcHJfZXJyKCJzbWRfb3BlbiBmYWlsZWQgZm9yICVzLCAlZFxuIiwKKwkJCSAgICAgICBzbWRfY2hfbmFtZVtzbWRfcGt0X2RldnAtPmldLCByKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJCXNtZF9wa3RfZGV2cC0+Y2hfb3BlbmVkX3dhaXRfcXVldWUsCisJCQkJc21kX3BrdF9kZXZwLT5yZW1vdGVfb3BlbiwKKwkJCQltc2Vjc190b19qaWZmaWVzKDIgKiBIWikpOworCQlpZiAociA9PSAwKQorCQkJciA9IC1FVElNRURPVVQ7CisKKwkJaWYgKHIgPCAwKSB7CisJCQlwcl9lcnIoIndhaXQgcmV0dXJuZWQgJWRcbiIsIHIpOworCQkJc21kX2Nsb3NlKHNtZF9wa3RfZGV2cC0+Y2gpOworCQkJc21kX3BrdF9kZXZwLT5jaCA9IDA7CisJCX0gZWxzZSB7CisJCQlzbWRfcGt0X2RldnAtPm9wZW5fY291bnQrKzsKKwkJCXIgPSAwOworCQl9CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmc21kX3BrdF9kZXZwLT5jaF9sb2NrKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBzbWRfcGt0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHIgPSAwOworCXN0cnVjdCBzbWRfcGt0X2RldiAqc21kX3BrdF9kZXZwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFzbWRfcGt0X2RldnApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc21kX3BrdF9kZXZwLT5jaF9sb2NrKTsKKwlpZiAoLS1zbWRfcGt0X2RldnAtPm9wZW5fY291bnQgPT0gMCkgeworCQlyID0gc21kX2Nsb3NlKHNtZF9wa3RfZGV2cC0+Y2gpOworCQlzbWRfcGt0X2RldnAtPmNoID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzbWRfcGt0X2RldnAtPmNoX2xvY2spOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNtZF9wa3RfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHNtZF9wa3Rfb3BlbiwKKwkucmVsZWFzZSA9IHNtZF9wa3RfcmVsZWFzZSwKKwkucmVhZCA9IHNtZF9wa3RfcmVhZCwKKwkud3JpdGUgPSBzbWRfcGt0X3dyaXRlLAorCS5wb2xsID0gc21kX3BrdF9wb2xsLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc21kX3BrdF9pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHI7CisKKwlyID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmc21kX3BrdF9udW1iZXIsIDAsCisJCQkJTlVNX1NNRF9QS1RfUE9SVFMsIERFVklDRV9OQU1FKTsKKwlpZiAocikgeworCQlwcl9lcnIoImFsbG9jX2NocmRldl9yZWdpb24oKSBmYWlsZWQgJWRcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlzbWRfcGt0X2NsYXNzcCA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgREVWSUNFX05BTUUpOworCWlmIChJU19FUlIoc21kX3BrdF9jbGFzc3ApKSB7CisJCXIgPSBQVFJfRVJSKHNtZF9wa3RfY2xhc3NwKTsKKwkJcHJfZXJyKCJjbGFzc19jcmVhdGUoKSBmYWlsZWQgJWRcbiIsIHIpOworCQlnb3RvIHVucmVnX2NoYXJkZXY7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE5VTV9TTURfUEtUX1BPUlRTOyArK2kpIHsKKwkJc21kX3BrdF9kZXZwW2ldID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNtZF9wa3RfZGV2KSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwkJaWYgKElTX0VSUihzbWRfcGt0X2RldnBbaV0pKSB7CisJCQlyID0gUFRSX0VSUihzbWRfcGt0X2RldnBbaV0pOworCQkJcHJfZXJyKCJrbWFsbG9jKCkgZmFpbGVkICVkXG4iLCByKTsKKwkJCWdvdG8gY2xlYW5fY2RldnM7CisJCX0KKworCQlzbWRfcGt0X2RldnBbaV0tPmkgPSBpOworCisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNtZF9wa3RfZGV2cFtpXS0+Y2hfcmVhZF93YWl0X3F1ZXVlKTsKKwkJc21kX3BrdF9kZXZwW2ldLT5yZW1vdGVfb3BlbiA9IDA7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNtZF9wa3RfZGV2cFtpXS0+Y2hfb3BlbmVkX3dhaXRfcXVldWUpOworCisJCW11dGV4X2luaXQoJnNtZF9wa3RfZGV2cFtpXS0+Y2hfbG9jayk7CisJCW11dGV4X2luaXQoJnNtZF9wa3RfZGV2cFtpXS0+cnhfbG9jayk7CisJCW11dGV4X2luaXQoJnNtZF9wa3RfZGV2cFtpXS0+dHhfbG9jayk7CisKKwkJY2Rldl9pbml0KCZzbWRfcGt0X2RldnBbaV0tPmNkZXYsICZzbWRfcGt0X2ZvcHMpOworCQlzbWRfcGt0X2RldnBbaV0tPmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKworCQlyID0gY2Rldl9hZGQoJnNtZF9wa3RfZGV2cFtpXS0+Y2RldiwKKwkJCSAgICAgKHNtZF9wa3RfbnVtYmVyICsgaSksIDEpOworCQlpZiAocikgeworCQkJcHJfZXJyKCJjZGV2X2FkZCgpIGZhaWxlZCAlZFxuIiwgcik7CisJCQlrZnJlZShzbWRfcGt0X2RldnBbaV0pOworCQkJZ290byBjbGVhbl9jZGV2czsKKwkJfQorCisJCXNtZF9wa3RfZGV2cFtpXS0+ZGV2aWNlcCA9CisJCQlkZXZpY2VfY3JlYXRlKHNtZF9wa3RfY2xhc3NwLCBOVUxMLAorCQkJCSAgICAgIChzbWRfcGt0X251bWJlciArIGkpLCBOVUxMLAorCQkJCSAgICAgIHNtZF9wa3RfZGV2X25hbWVbaV0pOworCQlpZiAoSVNfRVJSKHNtZF9wa3RfZGV2cFtpXS0+ZGV2aWNlcCkpIHsKKwkJCXIgPSBQVFJfRVJSKHNtZF9wa3RfZGV2cFtpXS0+ZGV2aWNlcCk7CisJCQlwcl9lcnIoImRldmljZV9jcmVhdGUoKSBmYWlsZWQgJWRcbiIsIHIpOworCQkJY2Rldl9kZWwoJnNtZF9wa3RfZGV2cFtpXS0+Y2Rldik7CisJCQlrZnJlZShzbWRfcGt0X2RldnBbaV0pOworCQkJZ290byBjbGVhbl9jZGV2czsKKwkJfQorCisJfQorCisJcHJfaW5mbygiU01EIFBhY2tldCBQb3J0IERyaXZlciBJbml0aWFsaXplZC5cbiIpOworCXJldHVybiAwOworCitjbGVhbl9jZGV2czoKKwlpZiAoaSA+IDApIHsKKwkJd2hpbGUgKC0taSA+PSAwKSB7CisJCQltdXRleF9kZXN0cm95KCZzbWRfcGt0X2RldnBbaV0tPmNoX2xvY2spOworCQkJbXV0ZXhfZGVzdHJveSgmc21kX3BrdF9kZXZwW2ldLT5yeF9sb2NrKTsKKwkJCW11dGV4X2Rlc3Ryb3koJnNtZF9wa3RfZGV2cFtpXS0+dHhfbG9jayk7CisJCQljZGV2X2RlbCgmc21kX3BrdF9kZXZwW2ldLT5jZGV2KTsKKwkJCWtmcmVlKHNtZF9wa3RfZGV2cFtpXSk7CisJCQlkZXZpY2VfZGVzdHJveShzbWRfcGt0X2NsYXNzcCwKKwkJCQkgICAgICAgTUtERVYoTUFKT1Ioc21kX3BrdF9udW1iZXIpLCBpKSk7CisJCX0KKwl9CisKKwljbGFzc19kZXN0cm95KHNtZF9wa3RfY2xhc3NwKTsKK3VucmVnX2NoYXJkZXY6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1BSk9SKHNtZF9wa3RfbnVtYmVyKSwgTlVNX1NNRF9QS1RfUE9SVFMpOworCXJldHVybiByOworfQorbW9kdWxlX2luaXQoc21kX3BrdF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNtZF9wa3RfY2xlYW51cCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9TTURfUEtUX1BPUlRTOyArK2kpIHsKKwkJbXV0ZXhfZGVzdHJveSgmc21kX3BrdF9kZXZwW2ldLT5jaF9sb2NrKTsKKwkJbXV0ZXhfZGVzdHJveSgmc21kX3BrdF9kZXZwW2ldLT5yeF9sb2NrKTsKKwkJbXV0ZXhfZGVzdHJveSgmc21kX3BrdF9kZXZwW2ldLT50eF9sb2NrKTsKKwkJY2Rldl9kZWwoJnNtZF9wa3RfZGV2cFtpXS0+Y2Rldik7CisJCWtmcmVlKHNtZF9wa3RfZGV2cFtpXSk7CisJCWRldmljZV9kZXN0cm95KHNtZF9wa3RfY2xhc3NwLAorCQkJICAgICAgIE1LREVWKE1BSk9SKHNtZF9wa3RfbnVtYmVyKSwgaSkpOworCX0KKworCWNsYXNzX2Rlc3Ryb3koc21kX3BrdF9jbGFzc3ApOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNQUpPUihzbWRfcGt0X251bWJlciksIE5VTV9TTURfUEtUX1BPUlRTKTsKK30KK21vZHVsZV9leGl0KHNtZF9wa3RfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTVNNIFNoYXJlZCBNZW1vcnkgUGFja2V0IFBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9td2F2ZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9td2F2ZS9NYWtlZmlsZQppbmRleCAyNmI0ZmNlLi5lZmE2YTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXdhdmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL213YXZlL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQAogbXdhdmUteSA6PSBtd2F2ZWRkLm8gc21hcGkubyB0cDM3ODBpLm8gMzc4MGkubwogCiAjIFRvIGhhdmUgdGhlIG13YXZlIGRyaXZlciBkaXNhYmxlIG90aGVyIHVhcnRzIGlmIG5lY2Vzc2FyeQotIyBFWFRSQV9DRkxBR1MgKz0gLURNV0FWRV9GVVRaX1dJVEhfT1RIRVJfREVWSUNFUworIyBjY2ZsYWdzLXkgOj0gLURNV0FWRV9GVVRaX1dJVEhfT1RIRVJfREVWSUNFUwogCiAjIFRvIGNvbXBpbGUgaW4gbG90cyAofjIwIEtpQikgb2YgcnVuLXRpbWUgZW5hYmxhYmxlIHByaW50aygpcyBmb3IgZGVidWdnaW5nOgotY2NmbGFncy15IDo9IC1ETVdfVFJBQ0UKK2NjZmxhZ3MteSArPSAtRE1XX1RSQUNFCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXdhdmUvUkVBRE1FIGIvZHJpdmVycy9jaGFyL213YXZlL1JFQURNRQppbmRleCA0ODAyNTFmLi5jMmE1OGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXdhdmUvUkVBRE1FCisrKyBiL2RyaXZlcnMvY2hhci9td2F2ZS9SRUFETUUKQEAgLTExLDcgKzExLDcgQEAKIAkweDAwMDggdHAzNzgwaSB0cmFjaW5nCiAKICAgICAgICAgVHJhY2luZyBvbmx5IG9jY3VycyBpZiB0aGUgZHJpdmVyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggdGhlCi0gICAgICAgIE1XX1RSQUNFIG1hY3JvICNkZWZpbmVkICAoaS5lLiBsZXQgRVhUUkFfQ0ZMQUdTICs9IC1ETVdfVFJBQ0UKKyAgICAgICAgTVdfVFJBQ0UgbWFjcm8gI2RlZmluZWQgIChpLmUuIGxldCBjY2ZsYWdzLXkgOj0gLURNV19UUkFDRQogICAgICAgICBpbiB0aGUgTWFrZWZpbGUpLgogCiAgIG13YXZlXzM3ODBpX2lycT01LzcvMTAvMTEvMTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9zeXNmcy5jIGIvZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMKaW5kZXggMDMxMGZmYS4uYmU3OTE3ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9zeXNmcy5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAkucmVsZWFzZSA9IGNwdWlkbGVfc3RhdGVfc3lzZnNfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyB2b2lkIGlubGluZSBjcHVpZGxlX2ZyZWVfc3RhdGVfa29iaihzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldmljZSwgaW50IGkpCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV9mcmVlX3N0YXRlX2tvYmooc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXZpY2UsIGludCBpKQogewogCWtvYmplY3RfcHV0KCZkZXZpY2UtPmtvYmpzW2ldLT5rb2JqKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXZpY2UtPmtvYmpzW2ldLT5rb2JqX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kY2EvZGNhLWNvcmUuYyBiL2RyaXZlcnMvZGNhL2RjYS1jb3JlLmMKaW5kZXggYzQ2MWVkYS4uNGFiZDA4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kY2EvZGNhLWNvcmUuYworKysgYi9kcml2ZXJzL2RjYS9kY2EtY29yZS5jCkBAIC0xMTEsMTAgKzExMSw4IEBACiAJLyogYXQgdGhpcyBwb2ludCBvbmx5IG9uZSBkb21haW4gaW4gdGhlIGxpc3QgaXMgZXhwZWN0ZWQgKi8KIAlkb21haW4gPSBsaXN0X2ZpcnN0X2VudHJ5KCZkY2FfZG9tYWlucywgc3RydWN0IGRjYV9kb21haW4sIG5vZGUpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRjYSwgX2RjYSwgJmRvbWFpbi0+ZGNhX3Byb3ZpZGVycywgbm9kZSkgewotCQlsaXN0X2RlbCgmZGNhLT5ub2RlKTsKLQkJbGlzdF9hZGQoJmRjYS0+bm9kZSwgJnVucmVnaXN0ZXJlZF9wcm92aWRlcnMpOwotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGNhLCBfZGNhLCAmZG9tYWluLT5kY2FfcHJvdmlkZXJzLCBub2RlKQorCQlsaXN0X21vdmUoJmRjYS0+bm9kZSwgJnVucmVnaXN0ZXJlZF9wcm92aWRlcnMpOwogCiAJZGNhX2ZyZWVfZG9tYWluKGRvbWFpbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL0tjb25maWcgYi9kcml2ZXJzL2RtYS9LY29uZmlnCmluZGV4IDFjMjg4MTYuLmE1NzI2MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtODIsNyArODIsNyBAQAogCiBjb25maWcgRFdfRE1BQwogCXRyaXN0YXRlICJTeW5vcHN5cyBEZXNpZ25XYXJlIEFIQiBETUEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFWUjMyCisJZGVwZW5kcyBvbiBIQVZFX0NMSwogCXNlbGVjdCBETUFfRU5HSU5FCiAJZGVmYXVsdCB5IGlmIENQVV9BVDMyQVA3MDAwCiAJaGVscApAQCAtMjIxLDEyICsyMjEsMjAgQEAKIAogY29uZmlnIElNWF9ETUEKIAl0cmlzdGF0ZSAiaS5NWCBETUEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfTVgxIHx8IEFSQ0hfTVgyMSB8fCBNQUNIX01YMjcKKwlkZXBlbmRzIG9uIElNWF9IQVZFX0RNQV9WMQogCXNlbGVjdCBETUFfRU5HSU5FCiAJaGVscAogCSAgU3VwcG9ydCB0aGUgaS5NWCBETUEgZW5naW5lLiBUaGlzIGVuZ2luZSBpcyBpbnRlZ3JhdGVkIGludG8KIAkgIEZyZWVzY2FsZSBpLk1YMS8yMS8yNyBjaGlwcy4KIAorY29uZmlnIE1YU19ETUEKKwlib29sICJNWFMgRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfSU1YMjMgfHwgU09DX0lNWDI4CisJc2VsZWN0IERNQV9FTkdJTkUKKwloZWxwCisJICBTdXBwb3J0IHRoZSBNWFMgRE1BIGVuZ2luZS4gVGhpcyBlbmdpbmUgaW5jbHVkaW5nIEFQQkgtRE1BCisJICBhbmQgQVBCWC1ETUEgaXMgaW50ZWdyYXRlZCBpbnRvIEZyZWVzY2FsZSBpLk1YMjMvMjggY2hpcHMuCisKIGNvbmZpZyBETUFfRU5HSU5FCiAJYm9vbAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IDY0YjIxZjUuLjgzNjA5NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCkBAIC0xLDkgKzEsNSBAQAotaWZlcSAoJChDT05GSUdfRE1BREVWSUNFU19ERUJVRykseSkKLQljY2ZsYWdzLXkJKz0gLURERUJVRwotZW5kaWYKLWlmZXEgKCQoQ09ORklHX0RNQURFVklDRVNfVkRFQlVHKSx5KQotCWNjZmxhZ3MteQkrPSAtRFZFUkJPU0VfREVCVUcKLWVuZGlmCitjY2ZsYWdzLSQoQ09ORklHX0RNQURFVklDRVNfREVCVUcpICA6PSAtRERFQlVHCitjY2ZsYWdzLSQoQ09ORklHX0RNQURFVklDRVNfVkRFQlVHKSArPSAtRFZFUkJPU0VfREVCVUcKIAogb2JqLSQoQ09ORklHX0RNQV9FTkdJTkUpICs9IGRtYWVuZ2luZS5vCiBvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gaW92bG9jay5vCkBAIC0yMyw2ICsxOSw3IEBACiBvYmotJChDT05GSUdfQU1DQ19QUEM0NDBTUEVfQURNQSkgKz0gcHBjNHh4Lwogb2JqLSQoQ09ORklHX0lNWF9TRE1BKSArPSBpbXgtc2RtYS5vCiBvYmotJChDT05GSUdfSU1YX0RNQSkgKz0gaW14LWRtYS5vCitvYmotJChDT05GSUdfTVhTX0RNQSkgKz0gbXhzLWRtYS5vCiBvYmotJChDT05GSUdfVElNQl9ETUEpICs9IHRpbWJfZG1hLm8KIG9iai0kKENPTkZJR19TVEVfRE1BNDApICs9IHN0ZV9kbWE0MC5vIHN0ZV9kbWE0MF9sbC5vCiBvYmotJChDT05GSUdfUEwzMzBfRE1BKSArPSBwbDMzMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYyBiL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCmluZGV4IGE2NjU2ODMuLjAwZGVhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCisrKyBiL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCkBAIC04NDksNyArODQ5LDcgQEAKIAogCQkJCS8qIE11c3QgY2xlYXIgVEMgaW50ZXJydXB0IGJlZm9yZSBjYWxsaW5nCiAJCQkJICogZG1hX3RjX2hhbmRsZQotCQkJCSAqIGluIGNhc2UgdGNfaGFuZGxlIGluaXRhdGUgYSBuZXcgZG1hIGpvYgorCQkJCSAqIGluIGNhc2UgdGNfaGFuZGxlIGluaXRpYXRlIGEgbmV3IGRtYSBqb2IKIAkJCQkgKi8KIAkJCQlfX3NldF9iaXQoaSwgdmlydGJhc2UgKyBDT0g5MDEzMThfVENfSU5UX0NMRUFSMSk7CiAKQEAgLTg5NCw3ICs4OTQsNyBAQAogCQkJCX0KIAkJCQkvKiBNdXN0IGNsZWFyIFRDIGludGVycnVwdCBiZWZvcmUgY2FsbGluZwogCQkJCSAqIGRtYV90Y19oYW5kbGUKLQkJCQkgKiBpbiBjYXNlIHRjX2hhbmRsZSBpbml0YXRlIGEgbmV3IGRtYSBqb2IKKwkJCQkgKiBpbiBjYXNlIHRjX2hhbmRsZSBpbml0aWF0ZSBhIG5ldyBkbWEgam9iCiAJCQkJICovCiAJCQkJX19zZXRfYml0KGksIHZpcnRiYXNlICsgQ09IOTAxMzE4X1RDX0lOVF9DTEVBUjIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKaW5kZXggNTU4OTM1OC4uZTA4ODhjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwpAQCAtNTQsNiArNTQsMTEgQEAKIE1PRFVMRV9QQVJNX0RFU0MocHFfc291cmNlcywKIAkJIk51bWJlciBvZiBwK3Egc291cmNlIGJ1ZmZlcnMgKGRlZmF1bHQ6IDMpIik7CiAKK3N0YXRpYyBpbnQgdGltZW91dCA9IDMwMDA7Cittb2R1bGVfcGFyYW0odGltZW91dCwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJUcmFuc2ZlciBUaW1lb3V0IGluIG1zZWMgKGRlZmF1bHQ6IDMwMDApLCBcCisJCVBhc3MgLTEgZm9yIGluZmluaXRlIHRpbWVvdXQiKTsKKwogLyoKICAqIEluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBBbGwgYnl0ZXMgaW4gdGhlIHNvdXJjZSBidWZmZXIgaGFzIGJpdCA3CiAgKiBzZXQsIGFsbCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGhhcyBiaXQgNyBjbGVhcmVkLgpAQCAtMjg1LDcgKzI5MCwxMiBAQAogCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAxMCk7CiAKLQlmbGFncyA9IERNQV9DVFJMX0FDSyB8IERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVAgfCBETUFfUFJFUF9JTlRFUlJVUFQ7CisJLyoKKwkgKiBzcmMgYnVmZmVycyBhcmUgZnJlZWQgYnkgdGhlIERNQUVuZ2luZSBjb2RlIHdpdGggZG1hX3VubWFwX3NpbmdsZSgpCisJICogZHN0IGJ1ZmZlcnMgYXJlIGZyZWVkIGJ5IG91cnNlbHZlcyBiZWxvdworCSAqLworCWZsYWdzID0gRE1BX0NUUkxfQUNLIHwgRE1BX1BSRVBfSU5URVJSVVBUCisJICAgICAgfCBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQIHwgRE1BX0NPTVBMX1NSQ19VTk1BUF9TSU5HTEU7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKQogCSAgICAgICAmJiAhKGl0ZXJhdGlvbnMgJiYgdG90YWxfdGVzdHMgPj0gaXRlcmF0aW9ucykpIHsKQEAgLTI5NCw3ICszMDQsNyBAQAogCQlkbWFfYWRkcl90IGRtYV9zcmNzW3NyY19jbnRdOwogCQlkbWFfYWRkcl90IGRtYV9kc3RzW2RzdF9jbnRdOwogCQlzdHJ1Y3QgY29tcGxldGlvbiBjbXA7Ci0JCXVuc2lnbmVkIGxvbmcgdG1vID0gbXNlY3NfdG9famlmZmllcygzMDAwKTsKKwkJdW5zaWduZWQgbG9uZyB0bW8gPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwogCQl1OCBhbGlnbiA9IDA7CiAKIAkJdG90YWxfdGVzdHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCBhMzk5MWFiLi45YzI1YzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0zMiwyNiArMzIsMzAgQEAKICAqIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgZGVzY3JpcHRvciB3cml0ZWJhY2suCiAgKi8KIAotLyogTk9URTogIERNUytTTVMgaXMgc3lzdGVtLXNwZWNpZmljLiBXZSBzaG91bGQgZ2V0IHRoaXMgaW5mb3JtYXRpb24KLSAqIGZyb20gdGhlIHBsYXRmb3JtIGNvZGUgc29tZWhvdy4KLSAqLwotI2RlZmluZSBEV0NfREVGQVVMVF9DVExMTwkoRFdDX0NUTExfRFNUX01TSVpFKDApCQlcCi0JCQkJfCBEV0NfQ1RMTF9TUkNfTVNJWkUoMCkJCVwKLQkJCQl8IERXQ19DVExMX0RNUygwKQkJXAotCQkJCXwgRFdDX0NUTExfU01TKDEpCQlcCi0JCQkJfCBEV0NfQ1RMTF9MTFBfRF9FTgkJXAotCQkJCXwgRFdDX0NUTExfTExQX1NfRU4pCisjZGVmaW5lIERXQ19ERUZBVUxUX0NUTExPKHByaXZhdGUpICh7CQkJCVwKKwkJc3RydWN0IGR3X2RtYV9zbGF2ZSAqX19zbGF2ZSA9IChwcml2YXRlKTsJXAorCQlpbnQgZG1zID0gX19zbGF2ZSA/IF9fc2xhdmUtPmRzdF9tYXN0ZXIgOiAwOwlcCisJCWludCBzbXMgPSBfX3NsYXZlID8gX19zbGF2ZS0+c3JjX21hc3RlciA6IDE7CVwKKwkJdTggc21zaXplID0gX19zbGF2ZSA/IF9fc2xhdmUtPnNyY19tc2l6ZSA6IERXX0RNQV9NU0laRV8xNjsgXAorCQl1OCBkbXNpemUgPSBfX3NsYXZlID8gX19zbGF2ZS0+ZHN0X21zaXplIDogRFdfRE1BX01TSVpFXzE2OyBcCisJCQkJCQkJCVwKKwkJKERXQ19DVExMX0RTVF9NU0laRShkbXNpemUpCQkJXAorCQkgfCBEV0NfQ1RMTF9TUkNfTVNJWkUoc21zaXplKQkJCVwKKwkJIHwgRFdDX0NUTExfTExQX0RfRU4JCQkJXAorCQkgfCBEV0NfQ1RMTF9MTFBfU19FTgkJCQlcCisJCSB8IERXQ19DVExMX0RNUyhkbXMpCQkJCVwKKwkJIHwgRFdDX0NUTExfU01TKHNtcykpOwkJCQlcCisJfSkKIAogLyoKICAqIFRoaXMgaXMgY29uZmlndXJhdGlvbi1kZXBlbmRlbnQgYW5kIHVzdWFsbHkgYSBmdW5ueSBzaXplIGxpa2UgNDA5NS4KLSAqIExldCdzIHJvdW5kIGl0IGRvd24gdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgdHdvLgogICoKICAqIE5vdGUgdGhhdCB0aGlzIGlzIGEgdHJhbnNmZXIgY291bnQsIGkuZS4gaWYgd2UgdHJhbnNmZXIgMzItYml0Ci0gKiB3b3Jkcywgd2UgY2FuIGRvIDgxOTIgYnl0ZXMgcGVyIGRlc2NyaXB0b3IuCisgKiB3b3Jkcywgd2UgY2FuIGRvIDE2MzgwIGJ5dGVzIHBlciBkZXNjcmlwdG9yLgogICoKICAqIFRoaXMgcGFyYW1ldGVyIGlzIGFsc28gc3lzdGVtLXNwZWNpZmljLgogICovCi0jZGVmaW5lIERXQ19NQVhfQ09VTlQJMjA0OFUKKyNkZWZpbmUgRFdDX01BWF9DT1VOVAk0MDk1VQogCiAvKgogICogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIGFsbG9jYXRlIGZvciBlYWNoIGNoYW5uZWwuIFRoaXMgc2hvdWxkIGJlCkBAIC04NCwxMSArODgsNiBAQAogCXJldHVybiBsaXN0X2VudHJ5KGR3Yy0+YWN0aXZlX2xpc3QubmV4dCwgc3RydWN0IGR3X2Rlc2MsIGRlc2Nfbm9kZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHdfZGVzYyAqZHdjX2ZpcnN0X3F1ZXVlZChzdHJ1Y3QgZHdfZG1hX2NoYW4gKmR3YykKLXsKLQlyZXR1cm4gbGlzdF9lbnRyeShkd2MtPnF1ZXVlLm5leHQsIHN0cnVjdCBkd19kZXNjLCBkZXNjX25vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IGR3X2Rlc2MgKmR3Y19kZXNjX2dldChzdHJ1Y3QgZHdfZG1hX2NoYW4gKmR3YykKIHsKIAlzdHJ1Y3QgZHdfZGVzYyAqZGVzYywgKl9kZXNjOwpAQCAtMjAxLDYgKzIwMCw3IEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrCQljYWxsYmFjazsKIAl2b2lkCQkJCSpwYXJhbTsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJKnR4ZCA9ICZkZXNjLT50eGQ7CisJc3RydWN0IGR3X2Rlc2MJCQkqY2hpbGQ7CiAKIAlkZXZfdmRiZyhjaGFuMmRldigmZHdjLT5jaGFuKSwgImRlc2NyaXB0b3IgJXUgY29tcGxldGVcbiIsIHR4ZC0+Y29va2llKTsKIApAQCAtMjA5LDYgKzIwOSwxMiBAQAogCXBhcmFtID0gdHhkLT5jYWxsYmFja19wYXJhbTsKIAogCWR3Y19zeW5jX2Rlc2NfZm9yX2NwdShkd2MsIGRlc2MpOworCisJLyogYXN5bmNfdHhfYWNrICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJmRlc2MtPnR4X2xpc3QsIGRlc2Nfbm9kZSkKKwkJYXN5bmNfdHhfYWNrKCZjaGlsZC0+dHhkKTsKKwlhc3luY190eF9hY2soJmRlc2MtPnR4ZCk7CisKIAlsaXN0X3NwbGljZV9pbml0KCZkZXNjLT50eF9saXN0LCAmZHdjLT5mcmVlX2xpc3QpOwogCWxpc3RfbW92ZSgmZGVzYy0+ZGVzY19ub2RlLCAmZHdjLT5mcmVlX2xpc3QpOwogCkBAIC0yNTksMTAgKzI2NSwxMSBAQAogCSAqIFN1Ym1pdCBxdWV1ZWQgZGVzY3JpcHRvcnMgQVNBUCwgaS5lLiBiZWZvcmUgd2UgZ28gdGhyb3VnaAogCSAqIHRoZSBjb21wbGV0ZWQgb25lcy4KIAkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmR3Yy0+cXVldWUpKQotCQlkd2NfZG9zdGFydChkd2MsIGR3Y19maXJzdF9xdWV1ZWQoZHdjKSk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmZHdjLT5hY3RpdmVfbGlzdCwgJmxpc3QpOwotCWxpc3Rfc3BsaWNlX2luaXQoJmR3Yy0+cXVldWUsICZkd2MtPmFjdGl2ZV9saXN0KTsKKwlpZiAoIWxpc3RfZW1wdHkoJmR3Yy0+cXVldWUpKSB7CisJCWxpc3RfbW92ZShkd2MtPnF1ZXVlLm5leHQsICZkd2MtPmFjdGl2ZV9saXN0KTsKKwkJZHdjX2Rvc3RhcnQoZHdjLCBkd2NfZmlyc3RfYWN0aXZlKGR3YykpOworCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJmxpc3QsIGRlc2Nfbm9kZSkKIAkJZHdjX2Rlc2NyaXB0b3JfY29tcGxldGUoZHdjLCBkZXNjKTsKQEAgLTI5MSw2ICsyOTgsOSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKGxpc3RfZW1wdHkoJmR3Yy0+YWN0aXZlX2xpc3QpKQorCQlyZXR1cm47CisKIAlkZXZfdmRiZyhjaGFuMmRldigmZHdjLT5jaGFuKSwgInNjYW5fZGVzY3JpcHRvcnM6IGxscD0weCV4XG4iLCBsbHApOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmZHdjLT5hY3RpdmVfbGlzdCwgZGVzY19ub2RlKSB7CkBAIC0zMTksOCArMzI5LDggQEAKIAkJY3B1X3JlbGF4KCk7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmR3Yy0+cXVldWUpKSB7Ci0JCWR3Y19kb3N0YXJ0KGR3YywgZHdjX2ZpcnN0X3F1ZXVlZChkd2MpKTsKLQkJbGlzdF9zcGxpY2VfaW5pdCgmZHdjLT5xdWV1ZSwgJmR3Yy0+YWN0aXZlX2xpc3QpOworCQlsaXN0X21vdmUoZHdjLT5xdWV1ZS5uZXh0LCAmZHdjLT5hY3RpdmVfbGlzdCk7CisJCWR3Y19kb3N0YXJ0KGR3YywgZHdjX2ZpcnN0X2FjdGl2ZShkd2MpKTsKIAl9CiB9CiAKQEAgLTM0Niw3ICszNTYsNyBAQAogCSAqLwogCWJhZF9kZXNjID0gZHdjX2ZpcnN0X2FjdGl2ZShkd2MpOwogCWxpc3RfZGVsX2luaXQoJmJhZF9kZXNjLT5kZXNjX25vZGUpOwotCWxpc3Rfc3BsaWNlX2luaXQoJmR3Yy0+cXVldWUsIGR3Yy0+YWN0aXZlX2xpc3QucHJldik7CisJbGlzdF9tb3ZlKGR3Yy0+cXVldWUubmV4dCwgZHdjLT5hY3RpdmVfbGlzdC5wcmV2KTsKIAogCS8qIENsZWFyIHRoZSBlcnJvciBmbGFnIGFuZCB0cnkgdG8gcmVzdGFydCB0aGUgY29udHJvbGxlciAqLwogCWRtYV93cml0ZWwoZHcsIENMRUFSLkVSUk9SLCBkd2MtPm1hc2spOwpAQCAtNTQxLDggKzU1MSw4IEBACiAJaWYgKGxpc3RfZW1wdHkoJmR3Yy0+YWN0aXZlX2xpc3QpKSB7CiAJCWRldl92ZGJnKGNoYW4yZGV2KHR4LT5jaGFuKSwgInR4X3N1Ym1pdDogc3RhcnRlZCAldVxuIiwKIAkJCQlkZXNjLT50eGQuY29va2llKTsKLQkJZHdjX2Rvc3RhcnQoZHdjLCBkZXNjKTsKIAkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+ZGVzY19ub2RlLCAmZHdjLT5hY3RpdmVfbGlzdCk7CisJCWR3Y19kb3N0YXJ0KGR3YywgZHdjX2ZpcnN0X2FjdGl2ZShkd2MpKTsKIAl9IGVsc2UgewogCQlkZXZfdmRiZyhjaGFuMmRldih0eC0+Y2hhbiksICJ0eF9zdWJtaXQ6IHF1ZXVlZCAldVxuIiwKIAkJCQlkZXNjLT50eGQuY29va2llKTsKQEAgLTU4MSwxNCArNTkxLDE2IEBACiAJICogV2UgY2FuIGJlIGEgbG90IG1vcmUgY2xldmVyIGhlcmUsIGJ1dCB0aGlzIHNob3VsZCB0YWtlIGNhcmUKIAkgKiBvZiB0aGUgbW9zdCBjb21tb24gb3B0aW1pemF0aW9uLgogCSAqLwotCWlmICghKChzcmMgfCBkZXN0ICB8IGxlbikgJiAzKSkKKwlpZiAoISgoc3JjIHwgZGVzdCAgfCBsZW4pICYgNykpCisJCXNyY193aWR0aCA9IGRzdF93aWR0aCA9IDM7CisJZWxzZSBpZiAoISgoc3JjIHwgZGVzdCAgfCBsZW4pICYgMykpCiAJCXNyY193aWR0aCA9IGRzdF93aWR0aCA9IDI7CiAJZWxzZSBpZiAoISgoc3JjIHwgZGVzdCB8IGxlbikgJiAxKSkKIAkJc3JjX3dpZHRoID0gZHN0X3dpZHRoID0gMTsKIAllbHNlCiAJCXNyY193aWR0aCA9IGRzdF93aWR0aCA9IDA7CiAKLQljdGxsbyA9IERXQ19ERUZBVUxUX0NUTExPCisJY3RsbG8gPSBEV0NfREVGQVVMVF9DVExMTyhjaGFuLT5wcml2YXRlKQogCQkJfCBEV0NfQ1RMTF9EU1RfV0lEVEgoZHN0X3dpZHRoKQogCQkJfCBEV0NfQ1RMTF9TUkNfV0lEVEgoc3JjX3dpZHRoKQogCQkJfCBEV0NfQ1RMTF9EU1RfSU5DCkBAIC02NjksMTEgKzY4MSwxMSBAQAogCiAJc3dpdGNoIChkaXJlY3Rpb24pIHsKIAljYXNlIERNQV9UT19ERVZJQ0U6Ci0JCWN0bGxvID0gKERXQ19ERUZBVUxUX0NUTExPCisJCWN0bGxvID0gKERXQ19ERUZBVUxUX0NUTExPKGNoYW4tPnByaXZhdGUpCiAJCQkJfCBEV0NfQ1RMTF9EU1RfV0lEVEgocmVnX3dpZHRoKQogCQkJCXwgRFdDX0NUTExfRFNUX0ZJWAogCQkJCXwgRFdDX0NUTExfU1JDX0lOQwotCQkJCXwgRFdDX0NUTExfRkNfTTJQKTsKKwkJCQl8IERXQ19DVExMX0ZDKGR3cy0+ZmMpKTsKIAkJcmVnID0gZHdzLT50eF9yZWc7CiAJCWZvcl9lYWNoX3NnKHNnbCwgc2csIHNnX2xlbiwgaSkgewogCQkJc3RydWN0IGR3X2Rlc2MJKmRlc2M7CkBAIC03MTQsMTEgKzcyNiwxMSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgRE1BX0ZST01fREVWSUNFOgotCQljdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTworCQljdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTyhjaGFuLT5wcml2YXRlKQogCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKIAkJCQl8IERXQ19DVExMX0RTVF9JTkMKIAkJCQl8IERXQ19DVExMX1NSQ19GSVgKLQkJCQl8IERXQ19DVExMX0ZDX1AyTSk7CisJCQkJfCBEV0NfQ1RMTF9GQyhkd3MtPmZjKSk7CiAKIAkJcmVnID0gZHdzLT5yeF9yZWc7CiAJCWZvcl9lYWNoX3NnKHNnbCwgc2csIHNnX2xlbiwgaSkgewpAQCAtODM0LDcgKzg0Niw5IEBACiAKIAlyZXQgPSBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOwogCWlmIChyZXQgIT0gRE1BX1NVQ0NFU1MpIHsKKwkJc3Bpbl9sb2NrX2JoKCZkd2MtPmxvY2spOwogCQlkd2Nfc2Nhbl9kZXNjcmlwdG9ycyh0b19kd19kbWEoY2hhbi0+ZGV2aWNlKSwgZHdjKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CiAKIAkJbGFzdF9jb21wbGV0ZSA9IGR3Yy0+Y29tcGxldGVkOwogCQlsYXN0X3VzZWQgPSBjaGFuLT5jb29raWU7CkBAIC04ODksOCArOTAzLDExIEBACiAJCUJVR19PTighZHdzLT5kbWFfZGV2IHx8IGR3cy0+ZG1hX2RldiAhPSBkdy0+ZG1hLmRldik7CiAKIAkJY2ZnaGkgPSBkd3MtPmNmZ19oaTsKLQkJY2ZnbG8gPSBkd3MtPmNmZ19sbzsKKwkJY2ZnbG8gPSBkd3MtPmNmZ19sbyAmIH5EV0NfQ0ZHTF9DSF9QUklPUl9NQVNLOwogCX0KKworCWNmZ2xvIHw9IERXQ19DRkdMX0NIX1BSSU9SKGR3Yy0+cHJpb3JpdHkpOworCiAJY2hhbm5lbF93cml0ZWwoZHdjLCBDRkdfTE8sIGNmZ2xvKTsKIAljaGFubmVsX3dyaXRlbChkd2MsIENGR19ISSwgY2ZnaGkpOwogCkBAIC0xMTI2LDIzICsxMTQzLDIzIEBACiAJCWNhc2UgRE1BX1RPX0RFVklDRToKIAkJCWRlc2MtPmxsaS5kYXIgPSBkd3MtPnR4X3JlZzsKIAkJCWRlc2MtPmxsaS5zYXIgPSBidWZfYWRkciArIChwZXJpb2RfbGVuICogaSk7Ci0JCQlkZXNjLT5sbGkuY3RsbG8gPSAoRFdDX0RFRkFVTFRfQ1RMTE8KKwkJCWRlc2MtPmxsaS5jdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTyhjaGFuLT5wcml2YXRlKQogCQkJCQl8IERXQ19DVExMX0RTVF9XSURUSChyZWdfd2lkdGgpCiAJCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKIAkJCQkJfCBEV0NfQ1RMTF9EU1RfRklYCiAJCQkJCXwgRFdDX0NUTExfU1JDX0lOQwotCQkJCQl8IERXQ19DVExMX0ZDX00yUAorCQkJCQl8IERXQ19DVExMX0ZDKGR3cy0+ZmMpCiAJCQkJCXwgRFdDX0NUTExfSU5UX0VOKTsKIAkJCWJyZWFrOwogCQljYXNlIERNQV9GUk9NX0RFVklDRToKIAkJCWRlc2MtPmxsaS5kYXIgPSBidWZfYWRkciArIChwZXJpb2RfbGVuICogaSk7CiAJCQlkZXNjLT5sbGkuc2FyID0gZHdzLT5yeF9yZWc7Ci0JCQlkZXNjLT5sbGkuY3RsbG8gPSAoRFdDX0RFRkFVTFRfQ1RMTE8KKwkJCWRlc2MtPmxsaS5jdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTyhjaGFuLT5wcml2YXRlKQogCQkJCQl8IERXQ19DVExMX1NSQ19XSURUSChyZWdfd2lkdGgpCiAJCQkJCXwgRFdDX0NUTExfRFNUX1dJRFRIKHJlZ193aWR0aCkKIAkJCQkJfCBEV0NfQ1RMTF9EU1RfSU5DCiAJCQkJCXwgRFdDX0NUTExfU1JDX0ZJWAotCQkJCQl8IERXQ19DVExMX0ZDX1AyTQorCQkJCQl8IERXQ19DVExMX0ZDKGR3cy0+ZmMpCiAJCQkJCXwgRFdDX0NUTExfSU5UX0VOKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTMwNyw3ICsxMzI0LDE3IEBACiAJCWR3Yy0+Y2hhbi5kZXZpY2UgPSAmZHctPmRtYTsKIAkJZHdjLT5jaGFuLmNvb2tpZSA9IGR3Yy0+Y29tcGxldGVkID0gMTsKIAkJZHdjLT5jaGFuLmNoYW5faWQgPSBpOwotCQlsaXN0X2FkZF90YWlsKCZkd2MtPmNoYW4uZGV2aWNlX25vZGUsICZkdy0+ZG1hLmNoYW5uZWxzKTsKKwkJaWYgKHBkYXRhLT5jaGFuX2FsbG9jYXRpb25fb3JkZXIgPT0gQ0hBTl9BTExPQ0FUSU9OX0FTQ0VORElORykKKwkJCWxpc3RfYWRkX3RhaWwoJmR3Yy0+Y2hhbi5kZXZpY2Vfbm9kZSwKKwkJCQkJJmR3LT5kbWEuY2hhbm5lbHMpOworCQllbHNlCisJCQlsaXN0X2FkZCgmZHdjLT5jaGFuLmRldmljZV9ub2RlLCAmZHctPmRtYS5jaGFubmVscyk7CisKKwkJLyogNyBpcyBoaWdoZXN0IHByaW9yaXR5ICYgMCBpcyBsb3dlc3QuICovCisJCWlmIChwZGF0YS0+Y2hhbl9wcmlvcml0eSA9PSBDSEFOX1BSSU9SSVRZX0FTQ0VORElORykKKwkJCWR3Yy0+cHJpb3JpdHkgPSA3IC0gaTsKKwkJZWxzZQorCQkJZHdjLT5wcmlvcml0eSA9IGk7CiAKIAkJZHdjLT5jaF9yZWdzID0gJl9fZHdfcmVncyhkdyktPkNIQU5baV07CiAJCXNwaW5fbG9ja19pbml0KCZkd2MtPmxvY2spOwpAQCAtMTMzNSw2ICsxMzYyLDggQEAKIAogCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGR3LT5kbWEuY2FwX21hc2spOwogCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgZHctPmRtYS5jYXBfbWFzayk7CisJaWYgKHBkYXRhLT5pc19wcml2YXRlKQorCQlkbWFfY2FwX3NldChETUFfUFJJVkFURSwgZHctPmRtYS5jYXBfbWFzayk7CiAJZHctPmRtYS5kZXYgPSAmcGRldi0+ZGV2OwogCWR3LT5kbWEuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gZHdjX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwogCWR3LT5kbWEuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBkd2NfZnJlZV9jaGFuX3Jlc291cmNlczsKQEAgLTE0NDcsNyArMTQ3Niw3IEBACiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZHdfZHJpdmVyLCBkd19wcm9iZSk7CiB9Ci1tb2R1bGVfaW5pdChkd19pbml0KTsKK3N1YnN5c19pbml0Y2FsbChkd19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGR3X2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oIGIvZHJpdmVycy9kbWEvZHdfZG1hY19yZWdzLmgKaW5kZXggZDlhOTM5Zi4uNzIwZjgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZHdfZG1hY19yZWdzLmgKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hY19yZWdzLmgKQEAgLTg2LDYgKzg2LDcgQEAKICNkZWZpbmUgRFdDX0NUTExfU1JDX01TSVpFKG4pCSgobik8PDE0KQogI2RlZmluZSBEV0NfQ1RMTF9TX0dBVEhfRU4JKDEgPDwgMTcpCS8qIHNyYyBnYXRoZXIsICFGSVggKi8KICNkZWZpbmUgRFdDX0NUTExfRF9TQ0FUX0VOCSgxIDw8IDE4KQkvKiBkc3Qgc2NhdHRlciwgIUZJWCAqLworI2RlZmluZSBEV0NfQ1RMTF9GQyhuKQkJKChuKSA8PCAyMCkKICNkZWZpbmUgRFdDX0NUTExfRkNfTTJNCQkoMCA8PCAyMCkJLyogbWVtLXRvLW1lbSAqLwogI2RlZmluZSBEV0NfQ1RMTF9GQ19NMlAJCSgxIDw8IDIwKQkvKiBtZW0tdG8tcGVyaXBoICovCiAjZGVmaW5lIERXQ19DVExMX0ZDX1AyTQkJKDIgPDwgMjApCS8qIHBlcmlwaC10by1tZW0gKi8KQEAgLTEwMSw2ICsxMDIsOCBAQAogI2RlZmluZSBEV0NfQ1RMSF9CTE9DS19UU19NQVNLCTB4MDAwMDBmZmYKIAogLyogQml0ZmllbGRzIGluIENGR19MTy4gUGxhdGZvcm0tY29uZmlndXJhYmxlIGJpdHMgYXJlIGluIDxsaW51eC9kd19kbWFjLmg+ICovCisjZGVmaW5lIERXQ19DRkdMX0NIX1BSSU9SX01BU0sJKDB4NyA8PCA1KQkvKiBwcmlvcml0eSBtYXNrICovCisjZGVmaW5lIERXQ19DRkdMX0NIX1BSSU9SKHgpCSgoeCkgPDwgNSkJLyogcHJpb3JpdHkgKi8KICNkZWZpbmUgRFdDX0NGR0xfQ0hfU1VTUAkoMSA8PCA4KQkvKiBwYXVzZSB4ZmVyICovCiAjZGVmaW5lIERXQ19DRkdMX0ZJRk9fRU1QVFkJKDEgPDwgOSkJLyogcGF1c2UgeGZlciAqLwogI2RlZmluZSBEV0NfQ0ZHTF9IU19EU1QJCSgxIDw8IDEwKQkvKiBoYW5kc2hha2Ugdy9kc3QgKi8KQEAgLTEzNCw2ICsxMzcsNyBAQAogCXN0cnVjdCBkbWFfY2hhbgkJY2hhbjsKIAl2b2lkIF9faW9tZW0JCSpjaF9yZWdzOwogCXU4CQkJbWFzazsKKwl1OAkJCXByaW9yaXR5OwogCiAJc3BpbmxvY2tfdAkJbG9jazsKIApAQCAtMTU1LDkgKzE1OSw5IEBACiB9CiAKICNkZWZpbmUgY2hhbm5lbF9yZWFkbChkd2MsIG5hbWUpIFwKLQlfX3Jhd19yZWFkbCgmKF9fZHdjX3JlZ3MoZHdjKS0+bmFtZSkpCisJcmVhZGwoJihfX2R3Y19yZWdzKGR3YyktPm5hbWUpKQogI2RlZmluZSBjaGFubmVsX3dyaXRlbChkd2MsIG5hbWUsIHZhbCkgXAotCV9fcmF3X3dyaXRlbCgodmFsKSwgJihfX2R3Y19yZWdzKGR3YyktPm5hbWUpKQorCXdyaXRlbCgodmFsKSwgJihfX2R3Y19yZWdzKGR3YyktPm5hbWUpKQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkd19kbWFfY2hhbiAqdG9fZHdfZG1hX2NoYW4oc3RydWN0IGRtYV9jaGFuICpjaGFuKQogewpAQCAtMTgxLDkgKzE4NSw5IEBACiB9CiAKICNkZWZpbmUgZG1hX3JlYWRsKGR3LCBuYW1lKSBcCi0JX19yYXdfcmVhZGwoJihfX2R3X3JlZ3MoZHcpLT5uYW1lKSkKKwlyZWFkbCgmKF9fZHdfcmVncyhkdyktPm5hbWUpKQogI2RlZmluZSBkbWFfd3JpdGVsKGR3LCBuYW1lLCB2YWwpIFwKLQlfX3Jhd193cml0ZWwoKHZhbCksICYoX19kd19yZWdzKGR3KS0+bmFtZSkpCisJd3JpdGVsKCh2YWwpLCAmKF9fZHdfcmVncyhkdyktPm5hbWUpKQogCiAjZGVmaW5lIGNoYW5uZWxfc2V0X2JpdChkdywgcmVnLCBtYXNrKSBcCiAJZG1hX3dyaXRlbChkdywgcmVnLCAoKG1hc2spIDw8IDgpIHwgKG1hc2spKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsZG1hLmMgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwppbmRleCBlMzg1NGE4Li42YjM5Njc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2xkbWEuYworKysgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwpAQCAtMzcsMzUgKzM3LDE2IEBACiAKICNpbmNsdWRlICJmc2xkbWEuaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgbXNnX2xkX29vbVtdID0gIk5vIGZyZWUgbWVtb3J5IGZvciBsaW5rIGRlc2NyaXB0b3JcbiI7CisjZGVmaW5lIGNoYW5fZGJnKGNoYW4sIGZtdCwgYXJnLi4uKQkJCQkJXAorCWRldl9kYmcoY2hhbi0+ZGV2LCAiJXM6ICIgZm10LCBjaGFuLT5uYW1lLCAjI2FyZykKKyNkZWZpbmUgY2hhbl9lcnIoY2hhbiwgZm10LCBhcmcuLi4pCQkJCQlcCisJZGV2X2VycihjaGFuLT5kZXYsICIlczogIiBmbXQsIGNoYW4tPm5hbWUsICMjYXJnKQogCi1zdGF0aWMgdm9pZCBkbWFfaW5pdChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCi17Ci0JLyogUmVzZXQgdGhlIGNoYW5uZWwgKi8KLQlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgMCwgMzIpOworc3RhdGljIGNvbnN0IGNoYXIgbXNnX2xkX29vbVtdID0gIk5vIGZyZWUgbWVtb3J5IGZvciBsaW5rIGRlc2NyaXB0b3IiOwogCi0Jc3dpdGNoIChjaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSB7Ci0JY2FzZSBGU0xfRE1BX0lQXzg1WFg6Ci0JCS8qIFNldCB0aGUgY2hhbm5lbCB0byBiZWxvdyBtb2RlczoKLQkJICogRUlFIC0gRXJyb3IgaW50ZXJydXB0IGVuYWJsZQotCQkgKiBFT1NJRSAtIEVuZCBvZiBzZWdtZW50cyBpbnRlcnJ1cHQgZW5hYmxlIChiYXNpYyBtb2RlKQotCQkgKiBFT0xOSUUgLSBFbmQgb2YgbGlua3MgaW50ZXJydXB0IGVuYWJsZQotCQkgKiBCV0MgLSBCYW5kd2lkdGggc2hhcmluZyBhbW9uZyBjaGFubmVscwotCQkgKi8KLQkJRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIEZTTF9ETUFfTVJfQldDCi0JCQkJfCBGU0xfRE1BX01SX0VJRSB8IEZTTF9ETUFfTVJfRU9MTklFCi0JCQkJfCBGU0xfRE1BX01SX0VPU0lFLCAzMik7Ci0JCWJyZWFrOwotCWNhc2UgRlNMX0RNQV9JUF84M1hYOgotCQkvKiBTZXQgdGhlIGNoYW5uZWwgdG8gYmVsb3cgbW9kZXM6Ci0JCSAqIEVPVElFIC0gRW5kLW9mLXRyYW5zZmVyIGludGVycnVwdCBlbmFibGUKLQkJICogUFJDX1JNIC0gUENJIHJlYWQgbXVsdGlwbGUKLQkJICovCi0JCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCBGU0xfRE1BX01SX0VPVElFCi0JCQkJfCBGU0xfRE1BX01SX1BSQ19STSwgMzIpOwotCQlicmVhazsKLQl9Ci19CisvKgorICogUmVnaXN0ZXIgSGVscGVycworICovCiAKIHN0YXRpYyB2b2lkIHNldF9zcihzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sIHUzMiB2YWwpCiB7CkBAIC03Nyw0MiArNTgsNiBAQAogCXJldHVybiBETUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3MtPnNyLCAzMik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kZXNjX2NudChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sCi0JCQkJc3RydWN0IGZzbF9kbWFfbGRfaHcgKmh3LCB1MzIgY291bnQpCi17Ci0JaHctPmNvdW50ID0gQ1BVX1RPX0RNQShjaGFuLCBjb3VudCwgMzIpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfZGVzY19zcmMoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAotCQkJCXN0cnVjdCBmc2xfZG1hX2xkX2h3ICpodywgZG1hX2FkZHJfdCBzcmMpCi17Ci0JdTY0IHNub29wX2JpdHM7Ci0KLQlzbm9vcF9iaXRzID0gKChjaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSA9PSBGU0xfRE1BX0lQXzg1WFgpCi0JCT8gKCh1NjQpRlNMX0RNQV9TQVRSX1NSRUFEVFlQRV9TTk9PUF9SRUFEIDw8IDMyKSA6IDA7Ci0JaHctPnNyY19hZGRyID0gQ1BVX1RPX0RNQShjaGFuLCBzbm9vcF9iaXRzIHwgc3JjLCA2NCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9kZXNjX2RzdChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sCi0JCQkJc3RydWN0IGZzbF9kbWFfbGRfaHcgKmh3LCBkbWFfYWRkcl90IGRzdCkKLXsKLQl1NjQgc25vb3BfYml0czsKLQotCXNub29wX2JpdHMgPSAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkKLQkJPyAoKHU2NClGU0xfRE1BX0RBVFJfRFdSSVRFVFlQRV9TTk9PUF9XUklURSA8PCAzMikgOiAwOwotCWh3LT5kc3RfYWRkciA9IENQVV9UT19ETUEoY2hhbiwgc25vb3BfYml0cyB8IGRzdCwgNjQpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfZGVzY19uZXh0KHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwKLQkJCQlzdHJ1Y3QgZnNsX2RtYV9sZF9odyAqaHcsIGRtYV9hZGRyX3QgbmV4dCkKLXsKLQl1NjQgc25vb3BfYml0czsKLQotCXNub29wX2JpdHMgPSAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODNYWCkKLQkJPyBGU0xfRE1BX1NORU4gOiAwOwotCWh3LT5uZXh0X2xuX2FkZHIgPSBDUFVfVE9fRE1BKGNoYW4sIHNub29wX2JpdHMgfCBuZXh0LCA2NCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldF9jZGFyKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBhZGRyKQogewogCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPmNkYXIsIGFkZHIgfCBGU0xfRE1BX1NORU4sIDY0KTsKQEAgLTEyMyw3MCArNjgsNzcgQEAKIAlyZXR1cm4gRE1BX0lOKGNoYW4sICZjaGFuLT5yZWdzLT5jZGFyLCA2NCkgJiB+RlNMX0RNQV9TTkVOOwogfQogCi1zdGF0aWMgZG1hX2FkZHJfdCBnZXRfbmRhcihzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCi17Ci0JcmV0dXJuIERNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+bmRhciwgNjQpOwotfQotCiBzdGF0aWMgdTMyIGdldF9iY3Ioc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQogewogCXJldHVybiBETUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3MtPmJjciwgMzIpOwogfQogCi1zdGF0aWMgaW50IGRtYV9pc19pZGxlKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbikKKy8qCisgKiBEZXNjcmlwdG9yIEhlbHBlcnMKKyAqLworCitzdGF0aWMgdm9pZCBzZXRfZGVzY19jbnQoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAorCQkJCXN0cnVjdCBmc2xfZG1hX2xkX2h3ICpodywgdTMyIGNvdW50KQogewotCXUzMiBzciA9IGdldF9zcihjaGFuKTsKLQlyZXR1cm4gKCEoc3IgJiBGU0xfRE1BX1NSX0NCKSkgfHwgKHNyICYgRlNMX0RNQV9TUl9DSCk7CisJaHctPmNvdW50ID0gQ1BVX1RPX0RNQShjaGFuLCBjb3VudCwgMzIpOwogfQogCi1zdGF0aWMgdm9pZCBkbWFfc3RhcnQoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQorc3RhdGljIHUzMiBnZXRfZGVzY19jbnQoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MpCiB7Ci0JdTMyIG1vZGU7Ci0KLQltb2RlID0gRE1BX0lOKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgMzIpOwotCi0JaWYgKChjaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSA9PSBGU0xfRE1BX0lQXzg1WFgpIHsKLQkJaWYgKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0NIQU5fUEFVU0VfRVhUKSB7Ci0JCQlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5iY3IsIDAsIDMyKTsKLQkJCW1vZGUgfD0gRlNMX0RNQV9NUl9FTVBfRU47Ci0JCX0gZWxzZSB7Ci0JCQltb2RlICY9IH5GU0xfRE1BX01SX0VNUF9FTjsKLQkJfQotCX0KLQotCWlmIChjaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9DSEFOX1NUQVJUX0VYVCkKLQkJbW9kZSB8PSBGU0xfRE1BX01SX0VNU19FTjsKLQllbHNlCi0JCW1vZGUgfD0gRlNMX0RNQV9NUl9DUzsKLQotCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCBtb2RlLCAzMik7CisJcmV0dXJuIERNQV9UT19DUFUoY2hhbiwgZGVzYy0+aHcuY291bnQsIDMyKTsKIH0KIAotc3RhdGljIHZvaWQgZG1hX2hhbHQoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQorc3RhdGljIHZvaWQgc2V0X2Rlc2Nfc3JjKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwKKwkJCSBzdHJ1Y3QgZnNsX2RtYV9sZF9odyAqaHcsIGRtYV9hZGRyX3Qgc3JjKQogewotCXUzMiBtb2RlOwotCWludCBpOworCXU2NCBzbm9vcF9iaXRzOwogCi0JbW9kZSA9IERNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+bXIsIDMyKTsKLQltb2RlIHw9IEZTTF9ETUFfTVJfQ0E7Ci0JRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIG1vZGUsIDMyKTsKLQotCW1vZGUgJj0gfihGU0xfRE1BX01SX0NTIHwgRlNMX0RNQV9NUl9FTVNfRU4gfCBGU0xfRE1BX01SX0NBKTsKLQlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgbW9kZSwgMzIpOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCWlmIChkbWFfaXNfaWRsZShjaGFuKSkKLQkJCXJldHVybjsKLQotCQl1ZGVsYXkoMTApOwotCX0KLQotCWlmICghZG1hX2lzX2lkbGUoY2hhbikpCi0JCWRldl9lcnIoY2hhbi0+ZGV2LCAiRE1BIGhhbHQgdGltZW91dCFcbiIpOworCXNub29wX2JpdHMgPSAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkKKwkJPyAoKHU2NClGU0xfRE1BX1NBVFJfU1JFQURUWVBFX1NOT09QX1JFQUQgPDwgMzIpIDogMDsKKwlody0+c3JjX2FkZHIgPSBDUFVfVE9fRE1BKGNoYW4sIHNub29wX2JpdHMgfCBzcmMsIDY0KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X2xkX2VvbChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sCi0JCQlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MpCitzdGF0aWMgZG1hX2FkZHJfdCBnZXRfZGVzY19zcmMoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAorCQkJICAgICAgIHN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYykKK3sKKwl1NjQgc25vb3BfYml0czsKKworCXNub29wX2JpdHMgPSAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkKKwkJPyAoKHU2NClGU0xfRE1BX1NBVFJfU1JFQURUWVBFX1NOT09QX1JFQUQgPDwgMzIpIDogMDsKKwlyZXR1cm4gRE1BX1RPX0NQVShjaGFuLCBkZXNjLT5ody5zcmNfYWRkciwgNjQpICYgfnNub29wX2JpdHM7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZXNjX2RzdChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sCisJCQkgc3RydWN0IGZzbF9kbWFfbGRfaHcgKmh3LCBkbWFfYWRkcl90IGRzdCkKK3sKKwl1NjQgc25vb3BfYml0czsKKworCXNub29wX2JpdHMgPSAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkKKwkJPyAoKHU2NClGU0xfRE1BX0RBVFJfRFdSSVRFVFlQRV9TTk9PUF9XUklURSA8PCAzMikgOiAwOworCWh3LT5kc3RfYWRkciA9IENQVV9UT19ETUEoY2hhbiwgc25vb3BfYml0cyB8IGRzdCwgNjQpOworfQorCitzdGF0aWMgZG1hX2FkZHJfdCBnZXRfZGVzY19kc3Qoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAorCQkJICAgICAgIHN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYykKK3sKKwl1NjQgc25vb3BfYml0czsKKworCXNub29wX2JpdHMgPSAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkKKwkJPyAoKHU2NClGU0xfRE1BX0RBVFJfRFdSSVRFVFlQRV9TTk9PUF9XUklURSA8PCAzMikgOiAwOworCXJldHVybiBETUFfVE9fQ1BVKGNoYW4sIGRlc2MtPmh3LmRzdF9hZGRyLCA2NCkgJiB+c25vb3BfYml0czsKK30KKworc3RhdGljIHZvaWQgc2V0X2Rlc2NfbmV4dChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sCisJCQkgIHN0cnVjdCBmc2xfZG1hX2xkX2h3ICpodywgZG1hX2FkZHJfdCBuZXh0KQoreworCXU2NCBzbm9vcF9iaXRzOworCisJc25vb3BfYml0cyA9ICgoY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgPT0gRlNMX0RNQV9JUF84M1hYKQorCQk/IEZTTF9ETUFfU05FTiA6IDA7CisJaHctPm5leHRfbG5fYWRkciA9IENQVV9UT19ETUEoY2hhbiwgc25vb3BfYml0cyB8IG5leHQsIDY0KTsKK30KKworc3RhdGljIHZvaWQgc2V0X2xkX2VvbChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYykKIHsKIAl1NjQgc25vb3BfYml0czsKIApAQCAtMTk4LDYgKzE1MCwxMDggQEAKIAkJCXwgc25vb3BfYml0cywgNjQpOwogfQogCisvKgorICogRE1BIEVuZ2luZSBIYXJkd2FyZSBDb250cm9sIEhlbHBlcnMKKyAqLworCitzdGF0aWMgdm9pZCBkbWFfaW5pdChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCit7CisJLyogUmVzZXQgdGhlIGNoYW5uZWwgKi8KKwlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgMCwgMzIpOworCisJc3dpdGNoIChjaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSB7CisJY2FzZSBGU0xfRE1BX0lQXzg1WFg6CisJCS8qIFNldCB0aGUgY2hhbm5lbCB0byBiZWxvdyBtb2RlczoKKwkJICogRUlFIC0gRXJyb3IgaW50ZXJydXB0IGVuYWJsZQorCQkgKiBFT0xOSUUgLSBFbmQgb2YgbGlua3MgaW50ZXJydXB0IGVuYWJsZQorCQkgKiBCV0MgLSBCYW5kd2lkdGggc2hhcmluZyBhbW9uZyBjaGFubmVscworCQkgKi8KKwkJRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIEZTTF9ETUFfTVJfQldDCisJCQkJfCBGU0xfRE1BX01SX0VJRSB8IEZTTF9ETUFfTVJfRU9MTklFLCAzMik7CisJCWJyZWFrOworCWNhc2UgRlNMX0RNQV9JUF84M1hYOgorCQkvKiBTZXQgdGhlIGNoYW5uZWwgdG8gYmVsb3cgbW9kZXM6CisJCSAqIEVPVElFIC0gRW5kLW9mLXRyYW5zZmVyIGludGVycnVwdCBlbmFibGUKKwkJICogUFJDX1JNIC0gUENJIHJlYWQgbXVsdGlwbGUKKwkJICovCisJCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCBGU0xfRE1BX01SX0VPVElFCisJCQkJfCBGU0xfRE1BX01SX1BSQ19STSwgMzIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG1hX2lzX2lkbGUoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQoreworCXUzMiBzciA9IGdldF9zcihjaGFuKTsKKwlyZXR1cm4gKCEoc3IgJiBGU0xfRE1BX1NSX0NCKSkgfHwgKHNyICYgRlNMX0RNQV9TUl9DSCk7Cit9CisKKy8qCisgKiBTdGFydCB0aGUgRE1BIGNvbnRyb2xsZXIKKyAqCisgKiBQcmVjb25kaXRpb25zOgorICogLSB0aGUgQ0RBUiByZWdpc3RlciBtdXN0IHBvaW50IHRvIHRoZSBzdGFydCBkZXNjcmlwdG9yCisgKiAtIHRoZSBNUm5bQ1NdIGJpdCBtdXN0IGJlIGNsZWFyZWQKKyAqLworc3RhdGljIHZvaWQgZG1hX3N0YXJ0KHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbikKK3sKKwl1MzIgbW9kZTsKKworCW1vZGUgPSBETUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCAzMik7CisKKwlpZiAoY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfQ0hBTl9QQVVTRV9FWFQpIHsKKwkJRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+YmNyLCAwLCAzMik7CisJCW1vZGUgfD0gRlNMX0RNQV9NUl9FTVBfRU47CisJfSBlbHNlIHsKKwkJbW9kZSAmPSB+RlNMX0RNQV9NUl9FTVBfRU47CisJfQorCisJaWYgKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0NIQU5fU1RBUlRfRVhUKSB7CisJCW1vZGUgfD0gRlNMX0RNQV9NUl9FTVNfRU47CisJfSBlbHNlIHsKKwkJbW9kZSAmPSB+RlNMX0RNQV9NUl9FTVNfRU47CisJCW1vZGUgfD0gRlNMX0RNQV9NUl9DUzsKKwl9CisKKwlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgbW9kZSwgMzIpOworfQorCitzdGF0aWMgdm9pZCBkbWFfaGFsdChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCit7CisJdTMyIG1vZGU7CisJaW50IGk7CisKKwkvKiByZWFkIHRoZSBtb2RlIHJlZ2lzdGVyICovCisJbW9kZSA9IERNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+bXIsIDMyKTsKKworCS8qCisJICogVGhlIDg1eHggY29udHJvbGxlciBzdXBwb3J0cyBjaGFubmVsIGFib3J0LCB3aGljaCB3aWxsIHN0b3AKKwkgKiB0aGUgY3VycmVudCB0cmFuc2Zlci4gT24gODN4eCwgdGhpcyBiaXQgaXMgdGhlIHRyYW5zZmVyIGVycm9yCisJICogbWFzayBiaXQsIHdoaWNoIHNob3VsZCBub3QgYmUgY2hhbmdlZC4KKwkgKi8KKwlpZiAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkgeworCQltb2RlIHw9IEZTTF9ETUFfTVJfQ0E7CisJCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCBtb2RlLCAzMik7CisKKwkJbW9kZSAmPSB+RlNMX0RNQV9NUl9DQTsKKwl9CisKKwkvKiBzdG9wIHRoZSBETUEgY29udHJvbGxlciAqLworCW1vZGUgJj0gfihGU0xfRE1BX01SX0NTIHwgRlNMX0RNQV9NUl9FTVNfRU4pOworCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCBtb2RlLCAzMik7CisKKwkvKiB3YWl0IGZvciB0aGUgRE1BIGNvbnRyb2xsZXIgdG8gYmVjb21lIGlkbGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJaWYgKGRtYV9pc19pZGxlKGNoYW4pKQorCQkJcmV0dXJuOworCisJCXVkZWxheSgxMCk7CisJfQorCisJaWYgKCFkbWFfaXNfaWRsZShjaGFuKSkKKwkJY2hhbl9lcnIoY2hhbiwgIkRNQSBoYWx0IHRpbWVvdXQhXG4iKTsKK30KKwogLyoqCiAgKiBmc2xfY2hhbl9zZXRfc3JjX2xvb3Bfc2l6ZSAtIFNldCBzb3VyY2UgYWRkcmVzcyBob2xkIHRyYW5zZmVyIHNpemUKICAqIEBjaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCkBAIC0zMjEsOCArMzc1LDcgQEAKIAkJY2hhbi0+ZmVhdHVyZSAmPSB+RlNMX0RNQV9DSEFOX1NUQVJUX0VYVDsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kX2xkX3F1ZXVlKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwKLQkJCSAgICBzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MpCitzdGF0aWMgdm9pZCBhcHBlbmRfbGRfcXVldWUoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MpCiB7CiAJc3RydWN0IGZzbF9kZXNjX3N3ICp0YWlsID0gdG9fZnNsX2Rlc2MoY2hhbi0+bGRfcGVuZGluZy5wcmV2KTsKIApAQCAtMzYzLDggKzQxNiw4IEBACiAJY29va2llID0gY2hhbi0+Y29tbW9uLmNvb2tpZTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZGVzYy0+dHhfbGlzdCwgbm9kZSkgewogCQljb29raWUrKzsKLQkJaWYgKGNvb2tpZSA8IDApCi0JCQljb29raWUgPSAxOworCQlpZiAoY29va2llIDwgRE1BX01JTl9DT09LSUUpCisJCQljb29raWUgPSBETUFfTUlOX0NPT0tJRTsKIAogCQljaGlsZC0+YXN5bmNfdHguY29va2llID0gY29va2llOwogCX0KQEAgLTM4NSwxNSArNDM4LDE0IEBACiAgKgogICogUmV0dXJuIC0gVGhlIGRlc2NyaXB0b3IgYWxsb2NhdGVkLiBOVUxMIGZvciBmYWlsZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmZzbF9kbWFfYWxsb2NfZGVzY3JpcHRvcigKLQkJCQkJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQorc3RhdGljIHN0cnVjdCBmc2xfZGVzY19zdyAqZnNsX2RtYV9hbGxvY19kZXNjcmlwdG9yKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2M7CiAJZG1hX2FkZHJfdCBwZGVzYzsKIAogCWRlc2MgPSBkbWFfcG9vbF9hbGxvYyhjaGFuLT5kZXNjX3Bvb2wsIEdGUF9BVE9NSUMsICZwZGVzYyk7CiAJaWYgKCFkZXNjKSB7Ci0JCWRldl9kYmcoY2hhbi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBmb3IgbGluayBkZXNjXG4iKTsKKwkJY2hhbl9kYmcoY2hhbiwgIm91dCBvZiBtZW1vcnkgZm9yIGxpbmsgZGVzY3JpcHRvclxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNDAzLDEwICs0NTUsMTMgQEAKIAlkZXNjLT5hc3luY190eC50eF9zdWJtaXQgPSBmc2xfZG1hX3R4X3N1Ym1pdDsKIAlkZXNjLT5hc3luY190eC5waHlzID0gcGRlc2M7CiAKKyNpZmRlZiBGU0xfRE1BX0xEX0RFQlVHCisJY2hhbl9kYmcoY2hhbiwgIkxEICVwIGFsbG9jYXRlZFxuIiwgZGVzYyk7CisjZW5kaWYKKwogCXJldHVybiBkZXNjOwogfQogCi0KIC8qKgogICogZnNsX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyAtIEFsbG9jYXRlIHJlc291cmNlcyBmb3IgRE1BIGNoYW5uZWwuCiAgKiBAY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbApAQCAtNDI3LDEzICs0ODIsMTEgQEAKIAkgKiBXZSBuZWVkIHRoZSBkZXNjcmlwdG9yIHRvIGJlIGFsaWduZWQgdG8gMzJieXRlcwogCSAqIGZvciBtZWV0aW5nIEZTTCBETUEgc3BlY2lmaWNhdGlvbiByZXF1aXJlbWVudC4KIAkgKi8KLQljaGFuLT5kZXNjX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoImZzbF9kbWFfZW5naW5lX2Rlc2NfcG9vbCIsCi0JCQkJCSAgY2hhbi0+ZGV2LAorCWNoYW4tPmRlc2NfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZShjaGFuLT5uYW1lLCBjaGFuLT5kZXYsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBmc2xfZGVzY19zdyksCiAJCQkJCSAgX19hbGlnbm9mX18oc3RydWN0IGZzbF9kZXNjX3N3KSwgMCk7CiAJaWYgKCFjaGFuLT5kZXNjX3Bvb2wpIHsKLQkJZGV2X2VycihjaGFuLT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgY2hhbm5lbCAlZCAiCi0JCQkJICAgImRlc2NyaXB0b3IgcG9vbFxuIiwgY2hhbi0+aWQpOworCQljaGFuX2VycihjaGFuLCAidW5hYmxlIHRvIGFsbG9jYXRlIGRlc2NyaXB0b3IgcG9vbFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNDU1LDYgKzUwOCw5IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsIGxpc3QsIG5vZGUpIHsKIAkJbGlzdF9kZWwoJmRlc2MtPm5vZGUpOworI2lmZGVmIEZTTF9ETUFfTERfREVCVUcKKwkJY2hhbl9kYmcoY2hhbiwgIkxEICVwIGZyZWVcbiIsIGRlc2MpOworI2VuZGlmCiAJCWRtYV9wb29sX2ZyZWUoY2hhbi0+ZGVzY19wb29sLCBkZXNjLCBkZXNjLT5hc3luY190eC5waHlzKTsKIAl9CiB9CkBAIC00NjYsNiArNTIyLDkgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGRlc2MsIF9kZXNjLCBsaXN0LCBub2RlKSB7CiAJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKyNpZmRlZiBGU0xfRE1BX0xEX0RFQlVHCisJCWNoYW5fZGJnKGNoYW4sICJMRCAlcCBmcmVlXG4iLCBkZXNjKTsKKyNlbmRpZgogCQlkbWFfcG9vbF9mcmVlKGNoYW4tPmRlc2NfcG9vbCwgZGVzYywgZGVzYy0+YXN5bmNfdHgucGh5cyk7CiAJfQogfQpAQCAtNDc5LDcgKzUzOCw3IEBACiAJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuID0gdG9fZnNsX2NoYW4oZGNoYW4pOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZXZfZGJnKGNoYW4tPmRldiwgIkZyZWUgYWxsIGNoYW5uZWwgcmVzb3VyY2VzLlxuIik7CisJY2hhbl9kYmcoY2hhbiwgImZyZWUgYWxsIGNoYW5uZWwgcmVzb3VyY2VzXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CiAJZnNsZG1hX2ZyZWVfZGVzY19saXN0KGNoYW4sICZjaGFuLT5sZF9wZW5kaW5nKTsKIAlmc2xkbWFfZnJlZV9kZXNjX2xpc3QoY2hhbiwgJmNoYW4tPmxkX3J1bm5pbmcpOwpAQCAtNTAyLDcgKzU2MSw3IEBACiAKIAluZXcgPSBmc2xfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoY2hhbik7CiAJaWYgKCFuZXcpIHsKLQkJZGV2X2VycihjaGFuLT5kZXYsIG1zZ19sZF9vb20pOworCQljaGFuX2VycihjaGFuLCAiJXNcbiIsIG1zZ19sZF9vb20pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTUxMiwxNCArNTcxLDE1IEBACiAJLyogSW5zZXJ0IHRoZSBsaW5rIGRlc2NyaXB0b3IgdG8gdGhlIExEIHJpbmcgKi8KIAlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZuZXctPnR4X2xpc3QpOwogCi0JLyogU2V0IEVuZC1vZi1saW5rIHRvIHRoZSBsYXN0IGxpbmsgZGVzY3JpcHRvciBvZiBuZXcgbGlzdCovCisJLyogU2V0IEVuZC1vZi1saW5rIHRvIHRoZSBsYXN0IGxpbmsgZGVzY3JpcHRvciBvZiBuZXcgbGlzdCAqLwogCXNldF9sZF9lb2woY2hhbiwgbmV3KTsKIAogCXJldHVybiAmbmV3LT5hc3luY190eDsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2RtYV9wcmVwX21lbWNweSgKLQlzdHJ1Y3QgZG1hX2NoYW4gKmRjaGFuLCBkbWFfYWRkcl90IGRtYV9kc3QsIGRtYV9hZGRyX3QgZG1hX3NyYywKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgorZnNsX2RtYV9wcmVwX21lbWNweShzdHJ1Y3QgZG1hX2NoYW4gKmRjaGFuLAorCWRtYV9hZGRyX3QgZG1hX2RzdCwgZG1hX2FkZHJfdCBkbWFfc3JjLAogCXNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuOwpAQCAtNTM5LDEyICs1OTksOSBAQAogCQkvKiBBbGxvY2F0ZSB0aGUgbGluayBkZXNjcmlwdG9yIGZyb20gRE1BIHBvb2wgKi8KIAkJbmV3ID0gZnNsX2RtYV9hbGxvY19kZXNjcmlwdG9yKGNoYW4pOwogCQlpZiAoIW5ldykgewotCQkJZGV2X2VycihjaGFuLT5kZXYsIG1zZ19sZF9vb20pOworCQkJY2hhbl9lcnIoY2hhbiwgIiVzXG4iLCBtc2dfbGRfb29tKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQotI2lmZGVmIEZTTF9ETUFfTERfREVCVUcKLQkJZGV2X2RiZyhjaGFuLT5kZXYsICJuZXcgbGluayBkZXNjIGFsbG9jICVwXG4iLCBuZXcpOwotI2VuZGlmCiAKIAkJY29weSA9IG1pbihsZW4sIChzaXplX3QpRlNMX0RNQV9CQ1JfTUFYX0NOVCk7CiAKQEAgLTU3Miw3ICs2MjksNyBAQAogCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsgLyogY2xpZW50IGlzIGluIGNvbnRyb2wgb2YgdGhpcyBhY2sgKi8KIAluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKIAotCS8qIFNldCBFbmQtb2YtbGluayB0byB0aGUgbGFzdCBsaW5rIGRlc2NyaXB0b3Igb2YgbmV3IGxpc3QqLworCS8qIFNldCBFbmQtb2YtbGluayB0byB0aGUgbGFzdCBsaW5rIGRlc2NyaXB0b3Igb2YgbmV3IGxpc3QgKi8KIAlzZXRfbGRfZW9sKGNoYW4sIG5ldyk7CiAKIAlyZXR1cm4gJmZpcnN0LT5hc3luY190eDsKQEAgLTYyNywxMiArNjg0LDkgQEAKIAkJLyogYWxsb2NhdGUgYW5kIHBvcHVsYXRlIHRoZSBkZXNjcmlwdG9yICovCiAJCW5ldyA9IGZzbF9kbWFfYWxsb2NfZGVzY3JpcHRvcihjaGFuKTsKIAkJaWYgKCFuZXcpIHsKLQkJCWRldl9lcnIoY2hhbi0+ZGV2LCBtc2dfbGRfb29tKTsKKwkJCWNoYW5fZXJyKGNoYW4sICIlc1xuIiwgbXNnX2xkX29vbSk7CiAJCQlnb3RvIGZhaWw7CiAJCX0KLSNpZmRlZiBGU0xfRE1BX0xEX0RFQlVHCi0JCWRldl9kYmcoY2hhbi0+ZGV2LCAibmV3IGxpbmsgZGVzYyBhbGxvYyAlcFxuIiwgbmV3KTsKLSNlbmRpZgogCiAJCXNldF9kZXNjX2NudChjaGFuLCAmbmV3LT5odywgbGVuKTsKIAkJc2V0X2Rlc2Nfc3JjKGNoYW4sICZuZXctPmh3LCBzcmMpOwpAQCAtNzQ0LDE0ICs3OTgsMTUgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBETUFfVEVSTUlOQVRFX0FMTDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCiAJCS8qIEhhbHQgdGhlIERNQSBlbmdpbmUgKi8KIAkJZG1hX2hhbHQoY2hhbik7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwotCiAJCS8qIFJlbW92ZSBhbmQgZnJlZSBhbGwgb2YgdGhlIGRlc2NyaXB0b3JzIGluIHRoZSBMRCBxdWV1ZSAqLwogCQlmc2xkbWFfZnJlZV9kZXNjX2xpc3QoY2hhbiwgJmNoYW4tPmxkX3BlbmRpbmcpOwogCQlmc2xkbWFfZnJlZV9kZXNjX2xpc3QoY2hhbiwgJmNoYW4tPmxkX3J1bm5pbmcpOworCQljaGFuLT5pZGxlID0gdHJ1ZTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CkBAIC03ODksMTQwICs4NDQsODcgQEAKIH0KIAogLyoqCi0gKiBmc2xfZG1hX3VwZGF0ZV9jb21wbGV0ZWRfY29va2llIC0gVXBkYXRlIHRoZSBjb21wbGV0ZWQgY29va2llLgotICogQGNoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKLSAqCi0gKiBDT05URVhUOiBoYXJkaXJxCi0gKi8KLXN0YXRpYyB2b2lkIGZzbF9kbWFfdXBkYXRlX2NvbXBsZXRlZF9jb29raWUoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWRtYV9jb29raWVfdCBjb29raWU7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmY2hhbi0+bGRfcnVubmluZykpIHsKLQkJZGV2X2RiZyhjaGFuLT5kZXYsICJubyBydW5uaW5nIGRlc2NyaXB0b3JzXG4iKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCS8qIEdldCB0aGUgbGFzdCBkZXNjcmlwdG9yLCB1cGRhdGUgdGhlIGNvb2tpZSB0byB0aGF0ICovCi0JZGVzYyA9IHRvX2ZzbF9kZXNjKGNoYW4tPmxkX3J1bm5pbmcucHJldik7Ci0JaWYgKGRtYV9pc19pZGxlKGNoYW4pKQotCQljb29raWUgPSBkZXNjLT5hc3luY190eC5jb29raWU7Ci0JZWxzZSB7Ci0JCWNvb2tpZSA9IGRlc2MtPmFzeW5jX3R4LmNvb2tpZSAtIDE7Ci0JCWlmICh1bmxpa2VseShjb29raWUgPCBETUFfTUlOX0NPT0tJRSkpCi0JCQljb29raWUgPSBETUFfTUFYX0NPT0tJRTsKLQl9Ci0KLQljaGFuLT5jb21wbGV0ZWRfY29va2llID0gY29va2llOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwotfQotCi0vKioKLSAqIGZzbGRtYV9kZXNjX3N0YXR1cyAtIENoZWNrIHRoZSBzdGF0dXMgb2YgYSBkZXNjcmlwdG9yCisgKiBmc2xkbWFfY2xlYW51cF9kZXNjcmlwdG9yIC0gY2xlYW51cCBhbmQgZnJlZSBhIHNpbmdsZSBsaW5rIGRlc2NyaXB0b3IKICAqIEBjaGFuOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKLSAqIEBkZXNjOiBETUEgU1cgZGVzY3JpcHRvcgorICogQGRlc2M6IGRlc2NyaXB0b3IgdG8gY2xlYW51cCBhbmQgZnJlZQogICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvcgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9uIGEgZGVzY3JpcHRvciB3aGljaCBoYXMgYmVlbiBleGVjdXRlZCBieSB0aGUgRE1BCisgKiBjb250cm9sbGVyLiBJdCB3aWxsIHJ1biBhbnkgY2FsbGJhY2tzLCBzdWJtaXQgYW55IGRlcGVuZGVuY2llcywgYW5kIHRoZW4KKyAqIGZyZWUgdGhlIGRlc2NyaXB0b3IuCiAgKi8KLXN0YXRpYyBlbnVtIGRtYV9zdGF0dXMgZnNsZG1hX2Rlc2Nfc3RhdHVzKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwKLQkJCQkJICBzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MpCitzdGF0aWMgdm9pZCBmc2xkbWFfY2xlYW51cF9kZXNjcmlwdG9yKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwKKwkJCQkgICAgICBzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MpCiB7Ci0JcmV0dXJuIGRtYV9hc3luY19pc19jb21wbGV0ZShkZXNjLT5hc3luY190eC5jb29raWUsCi0JCQkJICAgICBjaGFuLT5jb21wbGV0ZWRfY29va2llLAotCQkJCSAgICAgY2hhbi0+Y29tbW9uLmNvb2tpZSk7Ci19CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQgPSAmZGVzYy0+YXN5bmNfdHg7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY2hhbi0+Y29tbW9uLmRldmljZS0+ZGV2OworCWRtYV9hZGRyX3Qgc3JjID0gZ2V0X2Rlc2Nfc3JjKGNoYW4sIGRlc2MpOworCWRtYV9hZGRyX3QgZHN0ID0gZ2V0X2Rlc2NfZHN0KGNoYW4sIGRlc2MpOworCXUzMiBsZW4gPSBnZXRfZGVzY19jbnQoY2hhbiwgZGVzYyk7CiAKLS8qKgotICogZnNsX2NoYW5fbGRfY2xlYW51cCAtIENsZWFuIHVwIGxpbmsgZGVzY3JpcHRvcnMKLSAqIEBjaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCi0gKgotICogVGhpcyBmdW5jdGlvbiBjbGVhbiB1cCB0aGUgbGRfcXVldWUgb2YgRE1BIGNoYW5uZWwuCi0gKi8KLXN0YXRpYyB2b2lkIGZzbF9jaGFuX2xkX2NsZWFudXAoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYywgKl9kZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7Ci0KLQlkZXZfZGJnKGNoYW4tPmRldiwgImNoYW4gY29tcGxldGVkX2Nvb2tpZSA9ICVkXG4iLCBjaGFuLT5jb21wbGV0ZWRfY29va2llKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZjaGFuLT5sZF9ydW5uaW5nLCBub2RlKSB7Ci0JCWRtYV9hc3luY190eF9jYWxsYmFjayBjYWxsYmFjazsKLQkJdm9pZCAqY2FsbGJhY2tfcGFyYW07Ci0KLQkJaWYgKGZzbGRtYV9kZXNjX3N0YXR1cyhjaGFuLCBkZXNjKSA9PSBETUFfSU5fUFJPR1JFU1MpCi0JCQlicmVhazsKLQotCQkvKiBSZW1vdmUgZnJvbSB0aGUgbGlzdCBvZiBydW5uaW5nIHRyYW5zYWN0aW9ucyAqLwotCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7Ci0KLQkJLyogUnVuIHRoZSBsaW5rIGRlc2NyaXB0b3IgY2FsbGJhY2sgZnVuY3Rpb24gKi8KLQkJY2FsbGJhY2sgPSBkZXNjLT5hc3luY190eC5jYWxsYmFjazsKLQkJY2FsbGJhY2tfcGFyYW0gPSBkZXNjLT5hc3luY190eC5jYWxsYmFja19wYXJhbTsKLQkJaWYgKGNhbGxiYWNrKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKLQkJCWRldl9kYmcoY2hhbi0+ZGV2LCAiTEQgJXAgY2FsbGJhY2tcbiIsIGRlc2MpOwotCQkJY2FsbGJhY2soY2FsbGJhY2tfcGFyYW0pOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwotCQl9Ci0KLQkJLyogUnVuIGFueSBkZXBlbmRlbmNpZXMsIHRoZW4gZnJlZSB0aGUgZGVzY3JpcHRvciAqLwotCQlkbWFfcnVuX2RlcGVuZGVuY2llcygmZGVzYy0+YXN5bmNfdHgpOwotCQlkbWFfcG9vbF9mcmVlKGNoYW4tPmRlc2NfcG9vbCwgZGVzYywgZGVzYy0+YXN5bmNfdHgucGh5cyk7CisJLyogUnVuIHRoZSBsaW5rIGRlc2NyaXB0b3IgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKwlpZiAodHhkLT5jYWxsYmFjaykgeworI2lmZGVmIEZTTF9ETUFfTERfREVCVUcKKwkJY2hhbl9kYmcoY2hhbiwgIkxEICVwIGNhbGxiYWNrXG4iLCBkZXNjKTsKKyNlbmRpZgorCQl0eGQtPmNhbGxiYWNrKHR4ZC0+Y2FsbGJhY2tfcGFyYW0pOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCS8qIFJ1biBhbnkgZGVwZW5kZW5jaWVzICovCisJZG1hX3J1bl9kZXBlbmRlbmNpZXModHhkKTsKKworCS8qIFVubWFwIHRoZSBkc3QgYnVmZmVyLCBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoISh0eGQtPmZsYWdzICYgRE1BX0NPTVBMX1NLSVBfREVTVF9VTk1BUCkpIHsKKwkJaWYgKHR4ZC0+ZmxhZ3MgJiBETUFfQ09NUExfREVTVF9VTk1BUF9TSU5HTEUpCisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZHN0LCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCWVsc2UKKwkJCWRtYV91bm1hcF9wYWdlKGRldiwgZHN0LCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJfQorCisJLyogVW5tYXAgdGhlIHNyYyBidWZmZXIsIGlmIHJlcXVlc3RlZCAqLworCWlmICghKHR4ZC0+ZmxhZ3MgJiBETUFfQ09NUExfU0tJUF9TUkNfVU5NQVApKSB7CisJCWlmICh0eGQtPmZsYWdzICYgRE1BX0NPTVBMX1NSQ19VTk1BUF9TSU5HTEUpCisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgc3JjLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCQllbHNlCisJCQlkbWFfdW5tYXBfcGFnZShkZXYsIHNyYywgbGVuLCBETUFfVE9fREVWSUNFKTsKKwl9CisKKyNpZmRlZiBGU0xfRE1BX0xEX0RFQlVHCisJY2hhbl9kYmcoY2hhbiwgIkxEICVwIGZyZWVcbiIsIGRlc2MpOworI2VuZGlmCisJZG1hX3Bvb2xfZnJlZShjaGFuLT5kZXNjX3Bvb2wsIGRlc2MsIHR4ZC0+cGh5cyk7CiB9CiAKIC8qKgogICogZnNsX2NoYW5feGZlcl9sZF9xdWV1ZSAtIHRyYW5zZmVyIGFueSBwZW5kaW5nIHRyYW5zYWN0aW9ucwogICogQGNoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKICAqCi0gKiBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgYW55IHBlbmRpbmcgdHJhbnNhY3Rpb25zIHdpbGwgYmUgcnVuLgotICogSWYgdGhlIERNQSBjb250cm9sbGVyIGlzIGlkbGUsIGl0IHdpbGwgYmUgc3RhcnRlZC4gT3RoZXJ3aXNlLAotICogdGhlIERNQSBjb250cm9sbGVyJ3MgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBzdGFydCBhbnkgcGVuZGluZwotICogdHJhbnNhY3Rpb25zIHdoZW4gaXQgYmVjb21lcyBpZGxlLgorICogSEFSRFdBUkUgU1RBVEU6IGlkbGUKKyAqIExPQ0tJTkc6IG11c3QgaG9sZCBjaGFuLT5kZXNjX2xvY2sKICAqLwogc3RhdGljIHZvaWQgZnNsX2NoYW5feGZlcl9sZF9xdWV1ZShzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IGZzbF9kZXNjX3N3ICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIElmIHRoZSBsaXN0IG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgaXMgZW1wdHksIHRoZW4gd2UKIAkgKiBkb24ndCBuZWVkIHRvIGRvIGFueSB3b3JrIGF0IGFsbAogCSAqLwogCWlmIChsaXN0X2VtcHR5KCZjaGFuLT5sZF9wZW5kaW5nKSkgewotCQlkZXZfZGJnKGNoYW4tPmRldiwgIm5vIHBlbmRpbmcgTERzXG4iKTsKLQkJZ290byBvdXRfdW5sb2NrOworCQljaGFuX2RiZyhjaGFuLCAibm8gcGVuZGluZyBMRHNcbiIpOworCQlyZXR1cm47CiAJfQogCiAJLyoKLQkgKiBUaGUgRE1BIGNvbnRyb2xsZXIgaXMgbm90IGlkbGUsIHdoaWNoIG1lYW5zIHRoZSBpbnRlcnJ1cHQKLQkgKiBoYW5kbGVyIHdpbGwgc3RhcnQgYW55IHF1ZXVlZCB0cmFuc2FjdGlvbnMgd2hlbiBpdCBydW5zCi0JICogYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbgorCSAqIFRoZSBETUEgY29udHJvbGxlciBpcyBub3QgaWRsZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgaW50ZXJydXB0CisJICogaGFuZGxlciB3aWxsIHN0YXJ0IGFueSBxdWV1ZWQgdHJhbnNhY3Rpb25zIHdoZW4gaXQgcnVucyBhZnRlcgorCSAqIHRoaXMgdHJhbnNhY3Rpb24gZmluaXNoZXMKIAkgKi8KLQlpZiAoIWRtYV9pc19pZGxlKGNoYW4pKSB7Ci0JCWRldl9kYmcoY2hhbi0+ZGV2LCAiRE1BIGNvbnRyb2xsZXIgc3RpbGwgYnVzeVxuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwlpZiAoIWNoYW4tPmlkbGUpIHsKKwkJY2hhbl9kYmcoY2hhbiwgIkRNQSBjb250cm9sbGVyIHN0aWxsIGJ1c3lcbiIpOworCQlyZXR1cm47CiAJfQogCiAJLyoKLQkgKiBUT0RPOgotCSAqIG1ha2Ugc3VyZSB0aGUgZG1hX2hhbHQoKSBmdW5jdGlvbiByZWFsbHkgdW4td2VkZ2VzIHRoZQotCSAqIGNvbnRyb2xsZXIgYXMgbXVjaCBhcyBwb3NzaWJsZQotCSAqLwotCWRtYV9oYWx0KGNoYW4pOwotCi0JLyoKIAkgKiBJZiB0aGVyZSBhcmUgc29tZSBsaW5rIGRlc2NyaXB0b3JzIHdoaWNoIGhhdmUgbm90IGJlZW4KIAkgKiB0cmFuc2ZlcnJlZCwgd2UgbmVlZCB0byBzdGFydCB0aGUgY29udHJvbGxlcgogCSAqLwpAQCAtOTMxLDE4ICs5MzMsMzIgQEAKIAkgKiBNb3ZlIGFsbCBlbGVtZW50cyBmcm9tIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIHRyYW5zYWN0aW9ucwogCSAqIG9udG8gdGhlIGxpc3Qgb2YgcnVubmluZyB0cmFuc2FjdGlvbnMKIAkgKi8KKwljaGFuX2RiZyhjaGFuLCAiaWRsZSwgc3RhcnRpbmcgY29udHJvbGxlclxuIik7CiAJZGVzYyA9IGxpc3RfZmlyc3RfZW50cnkoJmNoYW4tPmxkX3BlbmRpbmcsIHN0cnVjdCBmc2xfZGVzY19zdywgbm9kZSk7CiAJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZjaGFuLT5sZF9wZW5kaW5nLCAmY2hhbi0+bGRfcnVubmluZyk7CiAKIAkvKgorCSAqIFRoZSA4NXh4IERNQSBjb250cm9sbGVyIGRvZXNuJ3QgY2xlYXIgdGhlIGNoYW5uZWwgc3RhcnQgYml0CisJICogYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIGEgdHJhbnNmZXIuIFRoZXJlZm9yZSB3ZSBtdXN0IGNsZWFyCisJICogaXQgaW4gc29mdHdhcmUgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0cmFuc2Zlci4KKwkgKi8KKwlpZiAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkgeworCQl1MzIgbW9kZTsKKworCQltb2RlID0gRE1BX0lOKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgMzIpOworCQltb2RlICY9IH5GU0xfRE1BX01SX0NTOworCQlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgbW9kZSwgMzIpOworCX0KKworCS8qCiAJICogUHJvZ3JhbSB0aGUgZGVzY3JpcHRvcidzIGFkZHJlc3MgaW50byB0aGUgRE1BIGNvbnRyb2xsZXIsCiAJICogdGhlbiBzdGFydCB0aGUgRE1BIHRyYW5zYWN0aW9uCiAJICovCiAJc2V0X2NkYXIoY2hhbiwgZGVzYy0+YXN5bmNfdHgucGh5cyk7Ci0JZG1hX3N0YXJ0KGNoYW4pOworCWdldF9jZGFyKGNoYW4pOwogCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCWRtYV9zdGFydChjaGFuKTsKKwljaGFuLT5pZGxlID0gZmFsc2U7CiB9CiAKIC8qKgpAQCAtOTUyLDcgKzk2OCwxMSBAQAogc3RhdGljIHZvaWQgZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmRjaGFuKQogewogCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiA9IHRvX2ZzbF9jaGFuKGRjaGFuKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwogCWZzbF9jaGFuX3hmZXJfbGRfcXVldWUoY2hhbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtOTY0LDE2ICs5ODQsMTggQEAKIAkJCQkJc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKIHsKIAlzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4gPSB0b19mc2xfY2hhbihkY2hhbik7Ci0JZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKIAlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKKwlkbWFfY29va2llX3QgbGFzdF91c2VkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlmc2xfY2hhbl9sZF9jbGVhbnVwKGNoYW4pOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIAotCWxhc3RfdXNlZCA9IGRjaGFuLT5jb29raWU7CiAJbGFzdF9jb21wbGV0ZSA9IGNoYW4tPmNvbXBsZXRlZF9jb29raWU7CisJbGFzdF91c2VkID0gZGNoYW4tPmNvb2tpZTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwogCiAJZG1hX3NldF90eF9zdGF0ZSh0eHN0YXRlLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQsIDApOwotCiAJcmV0dXJuIGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIGxhc3RfY29tcGxldGUsIGxhc3RfdXNlZCk7CiB9CiAKQEAgLTk4NCwyMSArMTAwNiwyMCBAQAogc3RhdGljIGlycXJldHVybl90IGZzbGRtYV9jaGFuX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiA9IGRhdGE7Ci0JaW50IHVwZGF0ZV9jb29raWUgPSAwOwotCWludCB4ZmVyX2xkX3EgPSAwOwogCXUzMiBzdGF0OwogCiAJLyogc2F2ZSBhbmQgY2xlYXIgdGhlIHN0YXR1cyByZWdpc3RlciAqLwogCXN0YXQgPSBnZXRfc3IoY2hhbik7CiAJc2V0X3NyKGNoYW4sIHN0YXQpOwotCWRldl9kYmcoY2hhbi0+ZGV2LCAiaXJxOiBjaGFubmVsICVkLCBzdGF0ID0gMHgleFxuIiwgY2hhbi0+aWQsIHN0YXQpOworCWNoYW5fZGJnKGNoYW4sICJpcnE6IHN0YXQgPSAweCV4XG4iLCBzdGF0KTsKIAorCS8qIGNoZWNrIHRoYXQgdGhpcyB3YXMgcmVhbGx5IG91ciBkZXZpY2UgKi8KIAlzdGF0ICY9IH4oRlNMX0RNQV9TUl9DQiB8IEZTTF9ETUFfU1JfQ0gpOwogCWlmICghc3RhdCkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKHN0YXQgJiBGU0xfRE1BX1NSX1RFKQotCQlkZXZfZXJyKGNoYW4tPmRldiwgIlRyYW5zZmVyIEVycm9yIVxuIik7CisJCWNoYW5fZXJyKGNoYW4sICJUcmFuc2ZlciBFcnJvciFcbiIpOwogCiAJLyoKIAkgKiBQcm9ncmFtbWluZyBFcnJvcgpAQCAtMTAwNiwyOSArMTAyNywxMCBAQAogCSAqIHRyaWdlciBhIFBFIGludGVycnVwdC4KIAkgKi8KIAlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfUEUpIHsKLQkJZGV2X2RiZyhjaGFuLT5kZXYsICJpcnE6IFByb2dyYW1taW5nIEVycm9yIElOVFxuIik7Ci0JCWlmIChnZXRfYmNyKGNoYW4pID09IDApIHsKLQkJCS8qIEJDUiByZWdpc3RlciBpcyAwLCB0aGlzIGlzIGEgRE1BX0lOVEVSUlVQVCBhc3luY190eC4KLQkJCSAqIE5vdywgdXBkYXRlIHRoZSBjb21wbGV0ZWQgY29va2llLCBhbmQgY29udGludWUgdGhlCi0JCQkgKiBuZXh0IHVuY29tcGxldGVkIHRyYW5zZmVyLgotCQkJICovCi0JCQl1cGRhdGVfY29va2llID0gMTsKLQkJCXhmZXJfbGRfcSA9IDE7Ci0JCX0KKwkJY2hhbl9kYmcoY2hhbiwgImlycTogUHJvZ3JhbW1pbmcgRXJyb3IgSU5UXG4iKTsKIAkJc3RhdCAmPSB+RlNMX0RNQV9TUl9QRTsKLQl9Ci0KLQkvKgotCSAqIElmIHRoZSBsaW5rIGRlc2NyaXB0b3Igc2VnbWVudCB0cmFuc2ZlciBmaW5pc2hlcywKLQkgKiB3ZSB3aWxsIHJlY3ljbGUgdGhlIHVzZWQgZGVzY3JpcHRvci4KLQkgKi8KLQlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfRU9TSSkgewotCQlkZXZfZGJnKGNoYW4tPmRldiwgImlycTogRW5kLW9mLXNlZ21lbnRzIElOVFxuIik7Ci0JCWRldl9kYmcoY2hhbi0+ZGV2LCAiaXJxOiBjbG5kYXIgMHglbGx4LCBubG5kYXIgMHglbGx4XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylnZXRfY2RhcihjaGFuKSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZ2V0X25kYXIoY2hhbikpOwotCQlzdGF0ICY9IH5GU0xfRE1BX1NSX0VPU0k7Ci0JCXVwZGF0ZV9jb29raWUgPSAxOworCQlpZiAoZ2V0X2JjcihjaGFuKSAhPSAwKQorCQkJY2hhbl9lcnIoY2hhbiwgIlByb2dyYW1taW5nIEVycm9yIVxuIik7CiAJfQogCiAJLyoKQEAgLTEwMzYsMTAgKzEwMzgsOCBAQAogCSAqIGFuZCBzdGFydCB0aGUgbmV4dCB0cmFuc2ZlciBpZiBpdCBleGlzdC4KIAkgKi8KIAlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfRU9DREkpIHsKLQkJZGV2X2RiZyhjaGFuLT5kZXYsICJpcnE6IEVuZC1vZi1DaGFpbiBsaW5rIElOVFxuIik7CisJCWNoYW5fZGJnKGNoYW4sICJpcnE6IEVuZC1vZi1DaGFpbiBsaW5rIElOVFxuIik7CiAJCXN0YXQgJj0gfkZTTF9ETUFfU1JfRU9DREk7Ci0JCXVwZGF0ZV9jb29raWUgPSAxOwotCQl4ZmVyX2xkX3EgPSAxOwogCX0KIAogCS8qCkBAIC0xMDQ4LDI3ICsxMDQ4LDc5IEBACiAJICogcHJlcGFyZSBuZXh0IHRyYW5zZmVyLgogCSAqLwogCWlmIChzdGF0ICYgRlNMX0RNQV9TUl9FT0xOSSkgewotCQlkZXZfZGJnKGNoYW4tPmRldiwgImlycTogRW5kLW9mLWxpbmsgSU5UXG4iKTsKKwkJY2hhbl9kYmcoY2hhbiwgImlycTogRW5kLW9mLWxpbmsgSU5UXG4iKTsKIAkJc3RhdCAmPSB+RlNMX0RNQV9TUl9FT0xOSTsKLQkJeGZlcl9sZF9xID0gMTsKIAl9CiAKLQlpZiAodXBkYXRlX2Nvb2tpZSkKLQkJZnNsX2RtYV91cGRhdGVfY29tcGxldGVkX2Nvb2tpZShjaGFuKTsKLQlpZiAoeGZlcl9sZF9xKQotCQlmc2xfY2hhbl94ZmVyX2xkX3F1ZXVlKGNoYW4pOwotCWlmIChzdGF0KQotCQlkZXZfZGJnKGNoYW4tPmRldiwgImlycTogdW5oYW5kbGVkIHNyIDB4JTAyeFxuIiwgc3RhdCk7CisJLyogY2hlY2sgdGhhdCB0aGUgRE1BIGNvbnRyb2xsZXIgaXMgcmVhbGx5IGlkbGUgKi8KKwlpZiAoIWRtYV9pc19pZGxlKGNoYW4pKQorCQljaGFuX2VycihjaGFuLCAiaXJxOiBjb250cm9sbGVyIG5vdCBpZGxlIVxuIik7CiAKLQlkZXZfZGJnKGNoYW4tPmRldiwgImlycTogRXhpdFxuIik7CisJLyogY2hlY2sgdGhhdCB3ZSBoYW5kbGVkIGFsbCBvZiB0aGUgYml0cyAqLworCWlmIChzdGF0KQorCQljaGFuX2VycihjaGFuLCAiaXJxOiB1bmhhbmRsZWQgc3IgMHglMDh4XG4iLCBzdGF0KTsKKworCS8qCisJICogU2NoZWR1bGUgdGhlIHRhc2tsZXQgdG8gaGFuZGxlIGFsbCBjbGVhbnVwIG9mIHRoZSBjdXJyZW50CisJICogdHJhbnNhY3Rpb24uIEl0IHdpbGwgc3RhcnQgYSBuZXcgdHJhbnNhY3Rpb24gaWYgdGhlcmUgaXMKKwkgKiBvbmUgcGVuZGluZy4KKwkgKi8KIAl0YXNrbGV0X3NjaGVkdWxlKCZjaGFuLT50YXNrbGV0KTsKKwljaGFuX2RiZyhjaGFuLCAiaXJxOiBFeGl0XG4iKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYV9kb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4gPSAoc3RydWN0IGZzbGRtYV9jaGFuICopZGF0YTsKLQlmc2xfY2hhbl9sZF9jbGVhbnVwKGNoYW4pOworCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYywgKl9kZXNjOworCUxJU1RfSEVBRChsZF9jbGVhbnVwKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY2hhbl9kYmcoY2hhbiwgInRhc2tsZXQgZW50cnlcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCisJLyogdXBkYXRlIHRoZSBjb29raWUgaWYgd2UgaGF2ZSBzb21lIGRlc2NyaXB0b3JzIHRvIGNsZWFudXAgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmNoYW4tPmxkX3J1bm5pbmcpKSB7CisJCWRtYV9jb29raWVfdCBjb29raWU7CisKKwkJZGVzYyA9IHRvX2ZzbF9kZXNjKGNoYW4tPmxkX3J1bm5pbmcucHJldik7CisJCWNvb2tpZSA9IGRlc2MtPmFzeW5jX3R4LmNvb2tpZTsKKworCQljaGFuLT5jb21wbGV0ZWRfY29va2llID0gY29va2llOworCQljaGFuX2RiZyhjaGFuLCAiY29tcGxldGVkX2Nvb2tpZT0lZFxuIiwgY29va2llKTsKKwl9CisKKwkvKgorCSAqIG1vdmUgdGhlIGRlc2NyaXB0b3JzIHRvIGEgdGVtcG9yYXJ5IGxpc3Qgc28gd2UgY2FuIGRyb3AgdGhlIGxvY2sKKwkgKiBkdXJpbmcgdGhlIGVudGlyZSBjbGVhbnVwIG9wZXJhdGlvbgorCSAqLworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmY2hhbi0+bGRfcnVubmluZywgJmxkX2NsZWFudXApOworCisJLyogdGhlIGhhcmR3YXJlIGlzIG5vdyBpZGxlIGFuZCByZWFkeSBmb3IgbW9yZSAqLworCWNoYW4tPmlkbGUgPSB0cnVlOworCisJLyoKKwkgKiBTdGFydCBhbnkgcGVuZGluZyB0cmFuc2FjdGlvbnMgYXV0b21hdGljYWxseQorCSAqCisJICogSW4gdGhlIGlkZWFsIGNhc2UsIHdlIGtlZXAgdGhlIERNQSBjb250cm9sbGVyIGJ1c3kgd2hpbGUgd2UgZ28KKwkgKiBhaGVhZCBhbmQgZnJlZSB0aGUgZGVzY3JpcHRvcnMgYmVsb3cuCisJICovCisJZnNsX2NoYW5feGZlcl9sZF9xdWV1ZShjaGFuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKworCS8qIFJ1biB0aGUgY2FsbGJhY2sgZm9yIGVhY2ggZGVzY3JpcHRvciwgaW4gb3JkZXIgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZsZF9jbGVhbnVwLCBub2RlKSB7CisKKwkJLyogUmVtb3ZlIGZyb20gdGhlIGxpc3Qgb2YgdHJhbnNhY3Rpb25zICovCisJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKworCQkvKiBSdW4gYWxsIGNsZWFudXAgZm9yIHRoaXMgZGVzY3JpcHRvciAqLworCQlmc2xkbWFfY2xlYW51cF9kZXNjcmlwdG9yKGNoYW4sIGRlc2MpOworCX0KKworCWNoYW5fZGJnKGNoYW4sICJ0YXNrbGV0IGV4aXRcbiIpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZnNsZG1hX2N0cmxfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCkBAIC0xMTE2LDcgKzExNjgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFOyBpKyspIHsKIAkJY2hhbiA9IGZkZXYtPmNoYW5baV07CiAJCWlmIChjaGFuICYmIGNoYW4tPmlycSAhPSBOT19JUlEpIHsKLQkJCWRldl9kYmcoZmRldi0+ZGV2LCAiZnJlZSBjaGFubmVsICVkIElSUVxuIiwgY2hhbi0+aWQpOworCQkJY2hhbl9kYmcoY2hhbiwgImZyZWUgcGVyLWNoYW5uZWwgSVJRXG4iKTsKIAkJCWZyZWVfaXJxKGNoYW4tPmlycSwgY2hhbik7CiAJCX0KIAl9CkBAIC0xMTQzLDE5ICsxMTk1LDE2IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoY2hhbi0+aXJxID09IE5PX0lSUSkgewotCQkJZGV2X2VycihmZGV2LT5kZXYsICJubyBpbnRlcnJ1cHRzIHByb3BlcnR5IGRlZmluZWQgZm9yICIKLQkJCQkJICAgIkRNQSBjaGFubmVsICVkLiBQbGVhc2UgZml4IHlvdXIgIgotCQkJCQkgICAiZGV2aWNlIHRyZWVcbiIsIGNoYW4tPmlkKTsKKwkJCWNoYW5fZXJyKGNoYW4sICJpbnRlcnJ1cHRzIHByb3BlcnR5IG1pc3NpbmcgaW4gZGV2aWNlIHRyZWVcbiIpOwogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0X3Vud2luZDsKIAkJfQogCi0JCWRldl9kYmcoZmRldi0+ZGV2LCAicmVxdWVzdCBjaGFubmVsICVkIElSUVxuIiwgY2hhbi0+aWQpOworCQljaGFuX2RiZyhjaGFuLCAicmVxdWVzdCBwZXItY2hhbm5lbCBJUlFcbiIpOwogCQlyZXQgPSByZXF1ZXN0X2lycShjaGFuLT5pcnEsIGZzbGRtYV9jaGFuX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkJICAiZnNsZG1hLWNoYW4iLCBjaGFuKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X2VycihmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgZm9yIERNQSAiCi0JCQkJCSAgICJjaGFubmVsICVkXG4iLCBjaGFuLT5pZCk7CisJCQljaGFuX2VycihjaGFuLCAidW5hYmxlIHRvIHJlcXVlc3QgcGVyLWNoYW5uZWwgSVJRXG4iKTsKIAkJCWdvdG8gb3V0X3Vud2luZDsKIAkJfQogCX0KQEAgLTEyMzAsNiArMTI3OSw3IEBACiAKIAlmZGV2LT5jaGFuW2NoYW4tPmlkXSA9IGNoYW47CiAJdGFza2xldF9pbml0KCZjaGFuLT50YXNrbGV0LCBkbWFfZG9fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpY2hhbik7CisJc25wcmludGYoY2hhbi0+bmFtZSwgc2l6ZW9mKGNoYW4tPm5hbWUpLCAiY2hhbiVkIiwgY2hhbi0+aWQpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY2hhbm5lbCAqLwogCWRtYV9pbml0KGNoYW4pOwpAQCAtMTI1MCw2ICsxMzAwLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmY2hhbi0+ZGVzY19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmY2hhbi0+bGRfcGVuZGluZyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNoYW4tPmxkX3J1bm5pbmcpOworCWNoYW4tPmlkbGUgPSB0cnVlOwogCiAJY2hhbi0+Y29tbW9uLmRldmljZSA9ICZmZGV2LT5jb21tb247CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5oIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKaW5kZXggYmE5ZjQwMy4uOWNiNWFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKQEAgLTEwMiw4ICsxMDIsOCBAQAogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpOwogCiBzdHJ1Y3QgZnNsZG1hX2NoYW5fcmVncyB7Ci0JdTMyIG1yOwkvKiAweDAwIC0gTW9kZSBSZWdpc3RlciAqLwotCXUzMiBzcjsJLyogMHgwNCAtIFN0YXR1cyBSZWdpc3RlciAqLworCXUzMiBtcjsJCS8qIDB4MDAgLSBNb2RlIFJlZ2lzdGVyICovCisJdTMyIHNyOwkJLyogMHgwNCAtIFN0YXR1cyBSZWdpc3RlciAqLwogCXU2NCBjZGFyOwkvKiAweDA4IC0gQ3VycmVudCBkZXNjcmlwdG9yIGFkZHJlc3MgcmVnaXN0ZXIgKi8KIAl1NjQgc2FyOwkvKiAweDEwIC0gU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KIAl1NjQgZGFyOwkvKiAweDE4IC0gRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciAqLwpAQCAtMTM1LDYgKzEzNSw3IEBACiAjZGVmaW5lIEZTTF9ETUFfQ0hBTl9TVEFSVF9FWFQJMHgwMDAwMjAwMAogCiBzdHJ1Y3QgZnNsZG1hX2NoYW4geworCWNoYXIgbmFtZVs4XTsJCQkvKiBDaGFubmVsIG5hbWUgKi8KIAlzdHJ1Y3QgZnNsZG1hX2NoYW5fcmVncyBfX2lvbWVtICpyZWdzOwogCWRtYV9jb29raWVfdCBjb21wbGV0ZWRfY29va2llOwkvKiBUaGUgbWF4aW11bSBjb29raWUgY29tcGxldGVkICovCiAJc3BpbmxvY2tfdCBkZXNjX2xvY2s7CQkvKiBEZXNjcmlwdG9yIG9wZXJhdGlvbiBsb2NrICovCkBAIC0xNDcsNiArMTQ4LDcgQEAKIAlpbnQgaWQ7CQkJCS8qIFJhdyBpZCBvZiB0aGlzIGNoYW5uZWwgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKIAl1MzIgZmVhdHVyZTsKKwlib29sIGlkbGU7CQkJLyogRE1BIGNvbnRyb2xsZXIgaXMgaWRsZSAqLwogCiAJdm9pZCAoKnRvZ2dsZV9leHRfcGF1c2UpKHN0cnVjdCBmc2xkbWFfY2hhbiAqZnNsX2NoYW4sIGludCBlbmFibGUpOwogCXZvaWQgKCp0b2dnbGVfZXh0X3N0YXJ0KShzdHJ1Y3QgZnNsZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL214cy1kbWEuYyBiL2RyaXZlcnMvZG1hL214cy1kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGFhZDRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvbXhzLWRtYS5jCkBAIC0wLDAgKzEsNzI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWZlciB0byBkcml2ZXJzL2RtYS9pbXgtc2RtYS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvbXhzLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorCisvKgorICogTk9URTogVGhlIHRlcm0gIlBJTyIgdGhyb3VnaG91dCB0aGUgbXhzLWRtYSBpbXBsZW1lbnRhdGlvbiBtZWFucworICogUElPIG1vZGUgb2YgbXhzIGFwYmgtZG1hIGFuZCBhcGJ4LWRtYS4gIFdpdGggdGhpcyB3b3JraW5nIG1vZGUsCisgKiBkbWEgY2FuIHByb2dyYW0gdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIG9mIHBlcmlwaGVyYWwgZGV2aWNlcy4KKyAqLworCisjZGVmaW5lIE1YU19ETUFfQVBCSAkJMAorI2RlZmluZSBNWFNfRE1BX0FQQlgJCTEKKyNkZWZpbmUgZG1hX2lzX2FwYmgoKQkJKG14c19kbWEtPmRldl9pZCA9PSBNWFNfRE1BX0FQQkgpCisKKyNkZWZpbmUgQVBCSF9WRVJTSU9OX0xBVEVTVAkzCisjZGVmaW5lIGFwYmhfaXNfb2xkKCkJCShteHNfZG1hLT52ZXJzaW9uIDwgQVBCSF9WRVJTSU9OX0xBVEVTVCkKKworI2RlZmluZSBIV19BUEJIWF9DVFJMMAkJCQkweDAwMAorI2RlZmluZSBCTV9BUEJIX0NUUkwwX0FQQl9CVVJTVDhfRU4JCSgxIDw8IDI5KQorI2RlZmluZSBCTV9BUEJIX0NUUkwwX0FQQl9CVVJTVF9FTgkJKDEgPDwgMjgpCisjZGVmaW5lIEJQX0FQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMCQk4CisjZGVmaW5lIEJQX0FQQkhfQ1RSTDBfUkVTRVRfQ0hBTk5FTAkJMTYKKyNkZWZpbmUgSFdfQVBCSFhfQ1RSTDEJCQkJMHgwMTAKKyNkZWZpbmUgSFdfQVBCSFhfQ1RSTDIJCQkJMHgwMjAKKyNkZWZpbmUgSFdfQVBCSFhfQ0hBTk5FTF9DVFJMCQkJMHgwMzAKKyNkZWZpbmUgQlBfQVBCSFhfQ0hBTk5FTF9DVFJMX1JFU0VUX0NIQU5ORUwJMTYKKyNkZWZpbmUgSFdfQVBCSF9WRVJTSU9OCQkJCShjcHVfaXNfbXgyMygpID8gMHgzZjAgOiAweDgwMCkKKyNkZWZpbmUgSFdfQVBCWF9WRVJTSU9OCQkJCTB4ODAwCisjZGVmaW5lIEJQX0FQQkhYX1ZFUlNJT05fTUFKT1IJCQkyNAorI2RlZmluZSBIV19BUEJIWF9DSG5fTlhUQ01EQVIobikgXAorCSgoKGRtYV9pc19hcGJoKCkgJiYgYXBiaF9pc19vbGQoKSkgPyAweDA1MCA6IDB4MTEwKSArIChuKSAqIDB4NzApCisjZGVmaW5lIEhXX0FQQkhYX0NIbl9TRU1BKG4pIFwKKwkoKChkbWFfaXNfYXBiaCgpICYmIGFwYmhfaXNfb2xkKCkpID8gMHgwODAgOiAweDE0MCkgKyAobikgKiAweDcwKQorCisvKgorICogY2N3IGJpdHMgZGVmaW5pdGlvbnMKKyAqCisgKiBDT01NQU5EOgkJMC4uMQkoMikKKyAqIENIQUlOOgkJMgkoMSkKKyAqIElSUToJCQkzCSgxKQorICogTkFORF9MT0NLOgkJNAkoMSkgLSBub3QgaW1wbGVtZW50ZWQKKyAqIE5BTkRfV0FJVDRSRUFEWToJNQkoMSkgLSBub3QgaW1wbGVtZW50ZWQKKyAqIERFQ19TRU06CQk2CSgxKQorICogV0FJVDRFTkQ6CQk3CSgxKQorICogSEFMVF9PTl9URVJNSU5BVEU6CTgJKDEpCisgKiBURVJNSU5BVEVfRkxVU0g6CTkJKDEpCisgKiBSRVNFUlZFRDoJCTEwLi4xMQkoMikKKyAqIFBJT19OVU06CQkxMi4uMTUJKDQpCisgKi8KKyNkZWZpbmUgQlBfQ0NXX0NPTU1BTkQJCTAKKyNkZWZpbmUgQk1fQ0NXX0NPTU1BTkQJCSgzIDw8IDApCisjZGVmaW5lIENDV19DSEFJTgkJKDEgPDwgMikKKyNkZWZpbmUgQ0NXX0lSUQkJCSgxIDw8IDMpCisjZGVmaW5lIENDV19ERUNfU0VNCQkoMSA8PCA2KQorI2RlZmluZSBDQ1dfV0FJVDRFTkQJCSgxIDw8IDcpCisjZGVmaW5lIENDV19IQUxUX09OX1RFUk0JKDEgPDwgOCkKKyNkZWZpbmUgQ0NXX1RFUk1fRkxVU0gJCSgxIDw8IDkpCisjZGVmaW5lIEJQX0NDV19QSU9fTlVNCQkxMgorI2RlZmluZSBCTV9DQ1dfUElPX05VTQkJKDB4ZiA8PCAxMikKKworI2RlZmluZSBCRl9DQ1codmFsdWUsIGZpZWxkKQkoKCh2YWx1ZSkgPDwgQlBfQ0NXXyMjZmllbGQpICYgQk1fQ0NXXyMjZmllbGQpCisKKyNkZWZpbmUgTVhTX0RNQV9DTURfTk9fWEZFUgkwCisjZGVmaW5lIE1YU19ETUFfQ01EX1dSSVRFCTEKKyNkZWZpbmUgTVhTX0RNQV9DTURfUkVBRAkyCisjZGVmaW5lIE1YU19ETUFfQ01EX0RNQV9TRU5TRQkzCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworCitzdHJ1Y3QgbXhzX2RtYV9jY3cgeworCXUzMgkJbmV4dDsKKwl1MTYJCWJpdHM7CisJdTE2CQl4ZmVyX2J5dGVzOworI2RlZmluZSBNQVhfWEZFUl9CWVRFUwkweGZmMDAKKwl1MzIJCWJ1ZmFkZHI7CisjZGVmaW5lIE1YU19QSU9fV09SRFMJMTYKKwl1MzIJCXBpb193b3Jkc1tNWFNfUElPX1dPUkRTXTsKK307CisKKyNkZWZpbmUgTlVNX0NDVwkoaW50KShQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IG14c19kbWFfY2N3KSkKKworc3RydWN0IG14c19kbWFfY2hhbiB7CisJc3RydWN0IG14c19kbWFfZW5naW5lCQkqbXhzX2RtYTsKKwlzdHJ1Y3QgZG1hX2NoYW4JCQljaGFuOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcglkZXNjOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJdGFza2xldDsKKwlpbnQJCQkJY2hhbl9pcnE7CisJc3RydWN0IG14c19kbWFfY2N3CQkqY2N3OworCWRtYV9hZGRyX3QJCQljY3dfcGh5czsKKwlkbWFfY29va2llX3QJCQlsYXN0X2NvbXBsZXRlZDsKKwllbnVtIGRtYV9zdGF0dXMJCQlzdGF0dXM7CisJdW5zaWduZWQgaW50CQkJZmxhZ3M7CisjZGVmaW5lIE1YU19ETUFfU0dfTE9PUAkJCSgxIDw8IDApCit9OworCisjZGVmaW5lIE1YU19ETUFfQ0hBTk5FTFMJCTE2CisjZGVmaW5lIE1YU19ETUFfQ0hBTk5FTFNfTUFTSwkJMHhmZmZmCisKK3N0cnVjdCBteHNfZG1hX2VuZ2luZSB7CisJaW50CQkJCWRldl9pZDsKKwl1bnNpZ25lZCBpbnQJCQl2ZXJzaW9uOworCXZvaWQgX19pb21lbQkJCSpiYXNlOworCXN0cnVjdCBjbGsJCQkqY2xrOworCXN0cnVjdCBkbWFfZGV2aWNlCQlkbWFfZGV2aWNlOworCXN0cnVjdCBkZXZpY2VfZG1hX3BhcmFtZXRlcnMJZG1hX3Bhcm1zOworCXN0cnVjdCBteHNfZG1hX2NoYW4JCW14c19jaGFuc1tNWFNfRE1BX0NIQU5ORUxTXTsKK307CisKK3N0YXRpYyB2b2lkIG14c19kbWFfcmVzZXRfY2hhbihzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbikKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9lbmdpbmUgKm14c19kbWEgPSBteHNfY2hhbi0+bXhzX2RtYTsKKwlpbnQgY2hhbl9pZCA9IG14c19jaGFuLT5jaGFuLmNoYW5faWQ7CisKKwlpZiAoZG1hX2lzX2FwYmgoKSAmJiBhcGJoX2lzX29sZCgpKQorCQl3cml0ZWwoMSA8PCAoY2hhbl9pZCArIEJQX0FQQkhfQ1RSTDBfUkVTRVRfQ0hBTk5FTCksCisJCQlteHNfZG1hLT5iYXNlICsgSFdfQVBCSFhfQ1RSTDAgKyBNWFNfU0VUX0FERFIpOworCWVsc2UKKwkJd3JpdGVsKDEgPDwgKGNoYW5faWQgKyBCUF9BUEJIWF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTCksCisJCQlteHNfZG1hLT5iYXNlICsgSFdfQVBCSFhfQ0hBTk5FTF9DVFJMICsgTVhTX1NFVF9BRERSKTsKK30KKworc3RhdGljIHZvaWQgbXhzX2RtYV9lbmFibGVfY2hhbihzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbikKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9lbmdpbmUgKm14c19kbWEgPSBteHNfY2hhbi0+bXhzX2RtYTsKKwlpbnQgY2hhbl9pZCA9IG14c19jaGFuLT5jaGFuLmNoYW5faWQ7CisKKwkvKiBzZXQgY21kX2FkZHIgdXAgKi8KKwl3cml0ZWwobXhzX2NoYW4tPmNjd19waHlzLAorCQlteHNfZG1hLT5iYXNlICsgSFdfQVBCSFhfQ0huX05YVENNREFSKGNoYW5faWQpKTsKKworCS8qIGVuYWJsZSBhcGJoIGNoYW5uZWwgY2xvY2sgKi8KKwlpZiAoZG1hX2lzX2FwYmgoKSkgeworCQlpZiAoYXBiaF9pc19vbGQoKSkKKwkJCXdyaXRlbCgxIDw8IChjaGFuX2lkICsgQlBfQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUwpLAorCQkJCW14c19kbWEtPmJhc2UgKyBIV19BUEJIWF9DVFJMMCArIE1YU19DTFJfQUREUik7CisJCWVsc2UKKwkJCXdyaXRlbCgxIDw8IGNoYW5faWQsCisJCQkJbXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NUUkwwICsgTVhTX0NMUl9BRERSKTsKKwl9CisKKwkvKiB3cml0ZSAxIHRvIFNFTUEgdG8ga2ljayBvZmYgdGhlIGNoYW5uZWwgKi8KKwl3cml0ZWwoMSwgbXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NIbl9TRU1BKGNoYW5faWQpKTsKK30KKworc3RhdGljIHZvaWQgbXhzX2RtYV9kaXNhYmxlX2NoYW4oc3RydWN0IG14c19kbWFfY2hhbiAqbXhzX2NoYW4pCit7CisJc3RydWN0IG14c19kbWFfZW5naW5lICpteHNfZG1hID0gbXhzX2NoYW4tPm14c19kbWE7CisJaW50IGNoYW5faWQgPSBteHNfY2hhbi0+Y2hhbi5jaGFuX2lkOworCisJLyogZGlzYWJsZSBhcGJoIGNoYW5uZWwgY2xvY2sgKi8KKwlpZiAoZG1hX2lzX2FwYmgoKSkgeworCQlpZiAoYXBiaF9pc19vbGQoKSkKKwkJCXdyaXRlbCgxIDw8IChjaGFuX2lkICsgQlBfQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUwpLAorCQkJCW14c19kbWEtPmJhc2UgKyBIV19BUEJIWF9DVFJMMCArIE1YU19TRVRfQUREUik7CisJCWVsc2UKKwkJCXdyaXRlbCgxIDw8IGNoYW5faWQsCisJCQkJbXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NUUkwwICsgTVhTX1NFVF9BRERSKTsKKwl9CisKKwlteHNfY2hhbi0+c3RhdHVzID0gRE1BX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIG14c19kbWFfcGF1c2VfY2hhbihzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbikKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9lbmdpbmUgKm14c19kbWEgPSBteHNfY2hhbi0+bXhzX2RtYTsKKwlpbnQgY2hhbl9pZCA9IG14c19jaGFuLT5jaGFuLmNoYW5faWQ7CisKKwkvKiBmcmVlemUgdGhlIGNoYW5uZWwgKi8KKwlpZiAoZG1hX2lzX2FwYmgoKSAmJiBhcGJoX2lzX29sZCgpKQorCQl3cml0ZWwoMSA8PCBjaGFuX2lkLAorCQkJbXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NUUkwwICsgTVhTX1NFVF9BRERSKTsKKwllbHNlCisJCXdyaXRlbCgxIDw8IGNoYW5faWQsCisJCQlteHNfZG1hLT5iYXNlICsgSFdfQVBCSFhfQ0hBTk5FTF9DVFJMICsgTVhTX1NFVF9BRERSKTsKKworCW14c19jaGFuLT5zdGF0dXMgPSBETUFfUEFVU0VEOworfQorCitzdGF0aWMgdm9pZCBteHNfZG1hX3Jlc3VtZV9jaGFuKHN0cnVjdCBteHNfZG1hX2NoYW4gKm14c19jaGFuKQoreworCXN0cnVjdCBteHNfZG1hX2VuZ2luZSAqbXhzX2RtYSA9IG14c19jaGFuLT5teHNfZG1hOworCWludCBjaGFuX2lkID0gbXhzX2NoYW4tPmNoYW4uY2hhbl9pZDsKKworCS8qIHVuZnJlZXplIHRoZSBjaGFubmVsICovCisJaWYgKGRtYV9pc19hcGJoKCkgJiYgYXBiaF9pc19vbGQoKSkKKwkJd3JpdGVsKDEgPDwgY2hhbl9pZCwKKwkJCW14c19kbWEtPmJhc2UgKyBIV19BUEJIWF9DVFJMMCArIE1YU19DTFJfQUREUik7CisJZWxzZQorCQl3cml0ZWwoMSA8PCBjaGFuX2lkLAorCQkJbXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NIQU5ORUxfQ1RSTCArIE1YU19DTFJfQUREUik7CisKKwlteHNfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworfQorCitzdGF0aWMgZG1hX2Nvb2tpZV90IG14c19kbWFfYXNzaWduX2Nvb2tpZShzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbikKK3sKKwlkbWFfY29va2llX3QgY29va2llID0gbXhzX2NoYW4tPmNoYW4uY29va2llOworCisJaWYgKCsrY29va2llIDwgMCkKKwkJY29va2llID0gMTsKKworCW14c19jaGFuLT5jaGFuLmNvb2tpZSA9IGNvb2tpZTsKKwlteHNfY2hhbi0+ZGVzYy5jb29raWUgPSBjb29raWU7CisKKwlyZXR1cm4gY29va2llOworfQorCitzdGF0aWMgc3RydWN0IG14c19kbWFfY2hhbiAqdG9fbXhzX2RtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBteHNfZG1hX2NoYW4sIGNoYW4pOworfQorCitzdGF0aWMgZG1hX2Nvb2tpZV90IG14c19kbWFfdHhfc3VibWl0KHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCit7CisJc3RydWN0IG14c19kbWFfY2hhbiAqbXhzX2NoYW4gPSB0b19teHNfZG1hX2NoYW4odHgtPmNoYW4pOworCisJbXhzX2RtYV9lbmFibGVfY2hhbihteHNfY2hhbik7CisKKwlyZXR1cm4gbXhzX2RtYV9hc3NpZ25fY29va2llKG14c19jaGFuKTsKK30KKworc3RhdGljIHZvaWQgbXhzX2RtYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbiA9IChzdHJ1Y3QgbXhzX2RtYV9jaGFuICopIGRhdGE7CisKKwlpZiAobXhzX2NoYW4tPmRlc2MuY2FsbGJhY2spCisJCW14c19jaGFuLT5kZXNjLmNhbGxiYWNrKG14c19jaGFuLT5kZXNjLmNhbGxiYWNrX3BhcmFtKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG14c19kbWFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBteHNfZG1hX2VuZ2luZSAqbXhzX2RtYSA9IGRldl9pZDsKKwl1MzIgc3RhdDEsIHN0YXQyOworCisJLyogY29tcGxldGlvbiBzdGF0dXMgKi8KKwlzdGF0MSA9IHJlYWRsKG14c19kbWEtPmJhc2UgKyBIV19BUEJIWF9DVFJMMSk7CisJc3RhdDEgJj0gTVhTX0RNQV9DSEFOTkVMU19NQVNLOworCXdyaXRlbChzdGF0MSwgbXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NUUkwxICsgTVhTX0NMUl9BRERSKTsKKworCS8qIGVycm9yIHN0YXR1cyAqLworCXN0YXQyID0gcmVhZGwobXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NUUkwyKTsKKwl3cml0ZWwoc3RhdDIsIG14c19kbWEtPmJhc2UgKyBIV19BUEJIWF9DVFJMMiArIE1YU19DTFJfQUREUik7CisKKwkvKgorCSAqIFdoZW4gYm90aCBjb21wbGV0aW9uIGFuZCBlcnJvciBvZiB0ZXJtaW5hdGlvbiBiaXRzIHNldCBhdCB0aGUKKwkgKiBzYW1lIHRpbWUsIHdlIGRvIG5vdCB0YWtlIGl0IGFzIGFuIGVycm9yLiAgSU9XLCBpdCBvbmx5IGJlY29tZXMKKwkgKiBhbiBlcnJvciB3ZSBuZWVkIHRvIGhhbmRsZXIgaGVyZSBpbiBjYXNlIG9mIGV0aGVyIGl0J3MgKDEpIGFuIGJ1cworCSAqIGVycm9yIG9yICgyKSBhIHRlcm1pbmF0aW9uIGVycm9yIHdpdGggbm8gY29tcGxldGlvbi4KKwkgKi8KKwlzdGF0MiA9ICgoc3RhdDIgPj4gTVhTX0RNQV9DSEFOTkVMUykgJiBzdGF0MikgfCAvKiAoMSkgKi8KKwkJKH4oc3RhdDIgPj4gTVhTX0RNQV9DSEFOTkVMUykgJiBzdGF0MiAmIH5zdGF0MSk7IC8qICgyKSAqLworCisJLyogY29tYmluZSBlcnJvciBhbmQgY29tcGxldGlvbiBzdGF0dXMgZm9yIGNoZWNraW5nICovCisJc3RhdDEgPSAoc3RhdDIgPDwgTVhTX0RNQV9DSEFOTkVMUykgfCBzdGF0MTsKKwl3aGlsZSAoc3RhdDEpIHsKKwkJaW50IGNoYW5uZWwgPSBmbHMoc3RhdDEpIC0gMTsKKwkJc3RydWN0IG14c19kbWFfY2hhbiAqbXhzX2NoYW4gPQorCQkJJm14c19kbWEtPm14c19jaGFuc1tjaGFubmVsICUgTVhTX0RNQV9DSEFOTkVMU107CisKKwkJaWYgKGNoYW5uZWwgPj0gTVhTX0RNQV9DSEFOTkVMUykgeworCQkJZGV2X2RiZyhteHNfZG1hLT5kbWFfZGV2aWNlLmRldiwKKwkJCQkiJXM6IGVycm9yIGluIGNoYW5uZWwgJWRcbiIsIF9fZnVuY19fLAorCQkJCWNoYW5uZWwgLSBNWFNfRE1BX0NIQU5ORUxTKTsKKwkJCW14c19jaGFuLT5zdGF0dXMgPSBETUFfRVJST1I7CisJCQlteHNfZG1hX3Jlc2V0X2NoYW4obXhzX2NoYW4pOworCQl9IGVsc2UgeworCQkJaWYgKG14c19jaGFuLT5mbGFncyAmIE1YU19ETUFfU0dfTE9PUCkKKwkJCQlteHNfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworCQkJZWxzZQorCQkJCW14c19jaGFuLT5zdGF0dXMgPSBETUFfU1VDQ0VTUzsKKwkJfQorCisJCXN0YXQxICY9IH4oMSA8PCBjaGFubmVsKTsKKworCQlpZiAobXhzX2NoYW4tPnN0YXR1cyA9PSBETUFfU1VDQ0VTUykKKwkJCW14c19jaGFuLT5sYXN0X2NvbXBsZXRlZCA9IG14c19jaGFuLT5kZXNjLmNvb2tpZTsKKworCQkvKiBzY2hlZHVsZSB0YXNrbGV0IG9uIHRoaXMgY2hhbm5lbCAqLworCQl0YXNrbGV0X3NjaGVkdWxlKCZteHNfY2hhbi0+dGFza2xldCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG14c19kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBteHNfZG1hX2NoYW4gKm14c19jaGFuID0gdG9fbXhzX2RtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBteHNfZG1hX2RhdGEgKmRhdGEgPSBjaGFuLT5wcml2YXRlOworCXN0cnVjdCBteHNfZG1hX2VuZ2luZSAqbXhzX2RtYSA9IG14c19jaGFuLT5teHNfZG1hOworCWludCByZXQ7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJbXhzX2NoYW4tPmNoYW5faXJxID0gZGF0YS0+Y2hhbl9pcnE7CisKKwlteHNfY2hhbi0+Y2N3ID0gZG1hX2FsbG9jX2NvaGVyZW50KG14c19kbWEtPmRtYV9kZXZpY2UuZGV2LCBQQUdFX1NJWkUsCisJCQkJJm14c19jaGFuLT5jY3dfcGh5cywgR0ZQX0tFUk5FTCk7CisJaWYgKCFteHNfY2hhbi0+Y2N3KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jOworCX0KKworCW1lbXNldChteHNfY2hhbi0+Y2N3LCAwLCBQQUdFX1NJWkUpOworCisJcmV0ID0gcmVxdWVzdF9pcnEobXhzX2NoYW4tPmNoYW5faXJxLCBteHNfZG1hX2ludF9oYW5kbGVyLAorCQkJCTAsICJteHMtZG1hIiwgbXhzX2RtYSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaXJxOworCisJcmV0ID0gY2xrX2VuYWJsZShteHNfZG1hLT5jbGspOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NsazsKKworCW14c19kbWFfcmVzZXRfY2hhbihteHNfY2hhbik7CisKKwlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZteHNfY2hhbi0+ZGVzYywgY2hhbik7CisJbXhzX2NoYW4tPmRlc2MudHhfc3VibWl0ID0gbXhzX2RtYV90eF9zdWJtaXQ7CisKKwkvKiB0aGUgZGVzY3JpcHRvciBpcyByZWFkeSAqLworCWFzeW5jX3R4X2FjaygmbXhzX2NoYW4tPmRlc2MpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGs6CisJZnJlZV9pcnEobXhzX2NoYW4tPmNoYW5faXJxLCBteHNfZG1hKTsKK2Vycl9pcnE6CisJZG1hX2ZyZWVfY29oZXJlbnQobXhzX2RtYS0+ZG1hX2RldmljZS5kZXYsIFBBR0VfU0laRSwKKwkJCW14c19jaGFuLT5jY3csIG14c19jaGFuLT5jY3dfcGh5cyk7CitlcnJfYWxsb2M6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXhzX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbiA9IHRvX214c19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgbXhzX2RtYV9lbmdpbmUgKm14c19kbWEgPSBteHNfY2hhbi0+bXhzX2RtYTsKKworCW14c19kbWFfZGlzYWJsZV9jaGFuKG14c19jaGFuKTsKKworCWZyZWVfaXJxKG14c19jaGFuLT5jaGFuX2lycSwgbXhzX2RtYSk7CisKKwlkbWFfZnJlZV9jb2hlcmVudChteHNfZG1hLT5kbWFfZGV2aWNlLmRldiwgUEFHRV9TSVpFLAorCQkJbXhzX2NoYW4tPmNjdywgbXhzX2NoYW4tPmNjd19waHlzKTsKKworCWNsa19kaXNhYmxlKG14c19kbWEtPmNsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKm14c19kbWFfcHJlcF9zbGF2ZV9zZygKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25lZCBsb25nIGFwcGVuZCkKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbiA9IHRvX214c19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgbXhzX2RtYV9lbmdpbmUgKm14c19kbWEgPSBteHNfY2hhbi0+bXhzX2RtYTsKKwlzdHJ1Y3QgbXhzX2RtYV9jY3cgKmNjdzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBpLCBqOworCXUzMiAqcGlvOworCXN0YXRpYyBpbnQgaWR4OworCisJaWYgKG14c19jaGFuLT5zdGF0dXMgPT0gRE1BX0lOX1BST0dSRVNTICYmICFhcHBlbmQpCisJCXJldHVybiBOVUxMOworCisJaWYgKHNnX2xlbiArIChhcHBlbmQgPyBpZHggOiAwKSA+IE5VTV9DQ1cpIHsKKwkJZGV2X2VycihteHNfZG1hLT5kbWFfZGV2aWNlLmRldiwKKwkJCQkibWF4aW11bSBudW1iZXIgb2Ygc2cgZXhjZWVkZWQ6ICVkID4gJWRcbiIsCisJCQkJc2dfbGVuLCBOVU1fQ0NXKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCW14c19jaGFuLT5zdGF0dXMgPSBETUFfSU5fUFJPR1JFU1M7CisJbXhzX2NoYW4tPmZsYWdzID0gMDsKKworCS8qCisJICogSWYgdGhlIHNnIGlzIHByZXBhcmVkIHdpdGggYXBwZW5kIGZsYWcgc2V0LCB0aGUgc2cKKwkgKiB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBsYXN0IHByZXBhcmVkIHNnLgorCSAqLworCWlmIChhcHBlbmQpIHsKKwkJQlVHX09OKGlkeCA8IDEpOworCQljY3cgPSAmbXhzX2NoYW4tPmNjd1tpZHggLSAxXTsKKwkJY2N3LT5uZXh0ID0gbXhzX2NoYW4tPmNjd19waHlzICsgc2l6ZW9mKCpjY3cpICogaWR4OworCQljY3ctPmJpdHMgfD0gQ0NXX0NIQUlOOworCQljY3ctPmJpdHMgJj0gfkNDV19JUlE7CisJCWNjdy0+Yml0cyAmPSB+Q0NXX0RFQ19TRU07CisJCWNjdy0+Yml0cyAmPSB+Q0NXX1dBSVQ0RU5EOworCX0gZWxzZSB7CisJCWlkeCA9IDA7CisJfQorCisJaWYgKGRpcmVjdGlvbiA9PSBETUFfTk9ORSkgeworCQljY3cgPSAmbXhzX2NoYW4tPmNjd1tpZHgrK107CisJCXBpbyA9ICh1MzIgKikgc2dsOworCisJCWZvciAoaiA9IDA7IGogPCBzZ19sZW47KQorCQkJY2N3LT5waW9fd29yZHNbaisrXSA9ICpwaW8rKzsKKworCQljY3ctPmJpdHMgPSAwOworCQljY3ctPmJpdHMgfD0gQ0NXX0lSUTsKKwkJY2N3LT5iaXRzIHw9IENDV19ERUNfU0VNOworCQljY3ctPmJpdHMgfD0gQ0NXX1dBSVQ0RU5EOworCQljY3ctPmJpdHMgfD0gQ0NXX0hBTFRfT05fVEVSTTsKKwkJY2N3LT5iaXRzIHw9IENDV19URVJNX0ZMVVNIOworCQljY3ctPmJpdHMgfD0gQkZfQ0NXKHNnX2xlbiwgUElPX05VTSk7CisJCWNjdy0+Yml0cyB8PSBCRl9DQ1coTVhTX0RNQV9DTURfTk9fWEZFUiwgQ09NTUFORCk7CisJfSBlbHNlIHsKKwkJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7CisJCQlpZiAoc2ctPmxlbmd0aCA+IE1BWF9YRkVSX0JZVEVTKSB7CisJCQkJZGV2X2VycihteHNfZG1hLT5kbWFfZGV2aWNlLmRldiwgIm1heGltdW0gYnl0ZXMgZm9yIHNnIGVudHJ5IGV4Y2VlZGVkOiAlZCA+ICVkXG4iLAorCQkJCQkJc2ctPmxlbmd0aCwgTUFYX1hGRVJfQllURVMpOworCQkJCWdvdG8gZXJyX291dDsKKwkJCX0KKworCQkJY2N3ID0gJm14c19jaGFuLT5jY3dbaWR4KytdOworCisJCQljY3ctPm5leHQgPSBteHNfY2hhbi0+Y2N3X3BoeXMgKyBzaXplb2YoKmNjdykgKiBpZHg7CisJCQljY3ctPmJ1ZmFkZHIgPSBzZy0+ZG1hX2FkZHJlc3M7CisJCQljY3ctPnhmZXJfYnl0ZXMgPSBzZy0+bGVuZ3RoOworCisJCQljY3ctPmJpdHMgPSAwOworCQkJY2N3LT5iaXRzIHw9IENDV19DSEFJTjsKKwkJCWNjdy0+Yml0cyB8PSBDQ1dfSEFMVF9PTl9URVJNOworCQkJY2N3LT5iaXRzIHw9IENDV19URVJNX0ZMVVNIOworCQkJY2N3LT5iaXRzIHw9IEJGX0NDVyhkaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFID8KKwkJCQkJTVhTX0RNQV9DTURfV1JJVEUgOiBNWFNfRE1BX0NNRF9SRUFELAorCQkJCQlDT01NQU5EKTsKKworCQkJaWYgKGkgKyAxID09IHNnX2xlbikgeworCQkJCWNjdy0+Yml0cyAmPSB+Q0NXX0NIQUlOOworCQkJCWNjdy0+Yml0cyB8PSBDQ1dfSVJROworCQkJCWNjdy0+Yml0cyB8PSBDQ1dfREVDX1NFTTsKKwkJCQljY3ctPmJpdHMgfD0gQ0NXX1dBSVQ0RU5EOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuICZteHNfY2hhbi0+ZGVzYzsKKworZXJyX291dDoKKwlteHNfY2hhbi0+c3RhdHVzID0gRE1BX0VSUk9SOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpteHNfZG1hX3ByZXBfZG1hX2N5Y2xpYygKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3QgYnVmX2xlbiwKKwkJc2l6ZV90IHBlcmlvZF9sZW4sIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbiA9IHRvX214c19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgbXhzX2RtYV9lbmdpbmUgKm14c19kbWEgPSBteHNfY2hhbi0+bXhzX2RtYTsKKwlpbnQgbnVtX3BlcmlvZHMgPSBidWZfbGVuIC8gcGVyaW9kX2xlbjsKKwlpbnQgaSA9IDAsIGJ1ZiA9IDA7CisKKwlpZiAobXhzX2NoYW4tPnN0YXR1cyA9PSBETUFfSU5fUFJPR1JFU1MpCisJCXJldHVybiBOVUxMOworCisJbXhzX2NoYW4tPnN0YXR1cyA9IERNQV9JTl9QUk9HUkVTUzsKKwlteHNfY2hhbi0+ZmxhZ3MgfD0gTVhTX0RNQV9TR19MT09QOworCisJaWYgKG51bV9wZXJpb2RzID4gTlVNX0NDVykgeworCQlkZXZfZXJyKG14c19kbWEtPmRtYV9kZXZpY2UuZGV2LAorCQkJCSJtYXhpbXVtIG51bWJlciBvZiBzZyBleGNlZWRlZDogJWQgPiAlZFxuIiwKKwkJCQludW1fcGVyaW9kcywgTlVNX0NDVyk7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAocGVyaW9kX2xlbiA+IE1BWF9YRkVSX0JZVEVTKSB7CisJCWRldl9lcnIobXhzX2RtYS0+ZG1hX2RldmljZS5kZXYsCisJCQkJIm1heGltdW0gcGVyaW9kIHNpemUgZXhjZWVkZWQ6ICVkID4gJWRcbiIsCisJCQkJcGVyaW9kX2xlbiwgTUFYX1hGRVJfQllURVMpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJd2hpbGUgKGJ1ZiA8IGJ1Zl9sZW4pIHsKKwkJc3RydWN0IG14c19kbWFfY2N3ICpjY3cgPSAmbXhzX2NoYW4tPmNjd1tpXTsKKworCQlpZiAoaSArIDEgPT0gbnVtX3BlcmlvZHMpCisJCQljY3ctPm5leHQgPSBteHNfY2hhbi0+Y2N3X3BoeXM7CisJCWVsc2UKKwkJCWNjdy0+bmV4dCA9IG14c19jaGFuLT5jY3dfcGh5cyArIHNpemVvZigqY2N3KSAqIChpICsgMSk7CisKKwkJY2N3LT5idWZhZGRyID0gZG1hX2FkZHI7CisJCWNjdy0+eGZlcl9ieXRlcyA9IHBlcmlvZF9sZW47CisKKwkJY2N3LT5iaXRzID0gMDsKKwkJY2N3LT5iaXRzIHw9IENDV19DSEFJTjsKKwkJY2N3LT5iaXRzIHw9IENDV19JUlE7CisJCWNjdy0+Yml0cyB8PSBDQ1dfSEFMVF9PTl9URVJNOworCQljY3ctPmJpdHMgfD0gQ0NXX1RFUk1fRkxVU0g7CisJCWNjdy0+Yml0cyB8PSBCRl9DQ1coZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSA/CisJCQkJTVhTX0RNQV9DTURfV1JJVEUgOiBNWFNfRE1BX0NNRF9SRUFELCBDT01NQU5EKTsKKworCQlkbWFfYWRkciArPSBwZXJpb2RfbGVuOworCQlidWYgKz0gcGVyaW9kX2xlbjsKKworCQlpKys7CisJfQorCisJcmV0dXJuICZteHNfY2hhbi0+ZGVzYzsKKworZXJyX291dDoKKwlteHNfY2hhbi0+c3RhdHVzID0gRE1BX0VSUk9SOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IG14c19kbWFfY29udHJvbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGVudW0gZG1hX2N0cmxfY21kIGNtZCwKKwkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG14c19kbWFfY2hhbiAqbXhzX2NoYW4gPSB0b19teHNfZG1hX2NoYW4oY2hhbik7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRE1BX1RFUk1JTkFURV9BTEw6CisJCW14c19kbWFfZGlzYWJsZV9jaGFuKG14c19jaGFuKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfUEFVU0U6CisJCW14c19kbWFfcGF1c2VfY2hhbihteHNfY2hhbik7CisJCWJyZWFrOworCWNhc2UgRE1BX1JFU1VNRToKKwkJbXhzX2RtYV9yZXN1bWVfY2hhbihteHNfY2hhbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVudW0gZG1hX3N0YXR1cyBteHNfZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQlkbWFfY29va2llX3QgY29va2llLCBzdHJ1Y3QgZG1hX3R4X3N0YXRlICp0eHN0YXRlKQoreworCXN0cnVjdCBteHNfZG1hX2NoYW4gKm14c19jaGFuID0gdG9fbXhzX2RtYV9jaGFuKGNoYW4pOworCWRtYV9jb29raWVfdCBsYXN0X3VzZWQ7CisKKwlsYXN0X3VzZWQgPSBjaGFuLT5jb29raWU7CisJZG1hX3NldF90eF9zdGF0ZSh0eHN0YXRlLCBteHNfY2hhbi0+bGFzdF9jb21wbGV0ZWQsIGxhc3RfdXNlZCwgMCk7CisKKwlyZXR1cm4gbXhzX2NoYW4tPnN0YXR1czsKK30KKworc3RhdGljIHZvaWQgbXhzX2RtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwkvKgorCSAqIE5vdGhpbmcgdG8gZG8uIFdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBkZXNjcmlwdG9yLgorCSAqLworfQorCitzdGF0aWMgaW50IF9faW5pdCBteHNfZG1hX2luaXQoc3RydWN0IG14c19kbWFfZW5naW5lICpteHNfZG1hKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfZW5hYmxlKG14c19kbWEtPmNsayk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfb3V0OworCisJcmV0ID0gbXhzX3Jlc2V0X2Jsb2NrKG14c19kbWEtPmJhc2UpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX291dDsKKworCS8qIG9ubHkgbWFqb3IgdmVyc2lvbiBtYXR0ZXJzICovCisJbXhzX2RtYS0+dmVyc2lvbiA9IHJlYWRsKG14c19kbWEtPmJhc2UgKworCQkJCSgobXhzX2RtYS0+ZGV2X2lkID09IE1YU19ETUFfQVBCWCkgPworCQkJCUhXX0FQQlhfVkVSU0lPTiA6IEhXX0FQQkhfVkVSU0lPTikpID4+CisJCQkJQlBfQVBCSFhfVkVSU0lPTl9NQUpPUjsKKworCS8qIGVuYWJsZSBhcGJoIGJ1cnN0ICovCisJaWYgKGRtYV9pc19hcGJoKCkpIHsKKwkJd3JpdGVsKEJNX0FQQkhfQ1RSTDBfQVBCX0JVUlNUX0VOLAorCQkJbXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NUUkwwICsgTVhTX1NFVF9BRERSKTsKKwkJd3JpdGVsKEJNX0FQQkhfQ1RSTDBfQVBCX0JVUlNUOF9FTiwKKwkJCW14c19kbWEtPmJhc2UgKyBIV19BUEJIWF9DVFJMMCArIE1YU19TRVRfQUREUik7CisJfQorCisJLyogZW5hYmxlIGlycSBmb3IgYWxsIHRoZSBjaGFubmVscyAqLworCXdyaXRlbChNWFNfRE1BX0NIQU5ORUxTX01BU0sgPDwgTVhTX0RNQV9DSEFOTkVMUywKKwkJbXhzX2RtYS0+YmFzZSArIEhXX0FQQkhYX0NUUkwxICsgTVhTX1NFVF9BRERSKTsKKworCWNsa19kaXNhYmxlKG14c19kbWEtPmNsayk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBteHNfZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfZW50cnkgPQorCQkJCXBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldik7CisJc3RydWN0IG14c19kbWFfZW5naW5lICpteHNfZG1hOworCXN0cnVjdCByZXNvdXJjZSAqaW9yZXM7CisJaW50IHJldCwgaTsKKworCW14c19kbWEgPSBremFsbG9jKHNpemVvZigqbXhzX2RtYSksIEdGUF9LRVJORUwpOworCWlmICghbXhzX2RtYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlteHNfZG1hLT5kZXZfaWQgPSBpZF9lbnRyeS0+ZHJpdmVyX2RhdGE7CisKKwlpb3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpb3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoaW9yZXMpLAorCQkJCXBkZXYtPm5hbWUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfcmVxdWVzdF9yZWdpb247CisJfQorCisJbXhzX2RtYS0+YmFzZSA9IGlvcmVtYXAoaW9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlvcmVzKSk7CisJaWYgKCFteHNfZG1hLT5iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJbXhzX2RtYS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKG14c19kbWEtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihteHNfZG1hLT5jbGspOworCQlnb3RvIGVycl9jbGs7CisJfQorCisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBteHNfZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfQ1lDTElDLCBteHNfZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKKworCUlOSVRfTElTVF9IRUFEKCZteHNfZG1hLT5kbWFfZGV2aWNlLmNoYW5uZWxzKTsKKworCS8qIEluaXRpYWxpemUgY2hhbm5lbCBwYXJhbWV0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IE1YU19ETUFfQ0hBTk5FTFM7IGkrKykgeworCQlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpteHNfY2hhbiA9ICZteHNfZG1hLT5teHNfY2hhbnNbaV07CisKKwkJbXhzX2NoYW4tPm14c19kbWEgPSBteHNfZG1hOworCQlteHNfY2hhbi0+Y2hhbi5kZXZpY2UgPSAmbXhzX2RtYS0+ZG1hX2RldmljZTsKKworCQl0YXNrbGV0X2luaXQoJm14c19jaGFuLT50YXNrbGV0LCBteHNfZG1hX3Rhc2tsZXQsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSBteHNfY2hhbik7CisKKworCQkvKiBBZGQgdGhlIGNoYW5uZWwgdG8gbXhzX2NoYW4gbGlzdCAqLworCQlsaXN0X2FkZF90YWlsKCZteHNfY2hhbi0+Y2hhbi5kZXZpY2Vfbm9kZSwKKwkJCSZteHNfZG1hLT5kbWFfZGV2aWNlLmNoYW5uZWxzKTsKKwl9CisKKwlyZXQgPSBteHNfZG1hX2luaXQobXhzX2RtYSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaW5pdDsKKworCW14c19kbWEtPmRtYV9kZXZpY2UuZGV2ID0gJnBkZXYtPmRldjsKKworCS8qIG14c19kbWEgZ2V0cyA2NTUzNSBieXRlcyBtYXhpbXVtIHNnIHNpemUgKi8KKwlteHNfZG1hLT5kbWFfZGV2aWNlLmRldi0+ZG1hX3Bhcm1zID0gJm14c19kbWEtPmRtYV9wYXJtczsKKwlkbWFfc2V0X21heF9zZWdfc2l6ZShteHNfZG1hLT5kbWFfZGV2aWNlLmRldiwgTUFYX1hGRVJfQllURVMpOworCisJbXhzX2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPSBteHNfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCW14c19kbWEtPmRtYV9kZXZpY2UuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBteHNfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisJbXhzX2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfdHhfc3RhdHVzID0gbXhzX2RtYV90eF9zdGF0dXM7CisJbXhzX2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IG14c19kbWFfcHJlcF9zbGF2ZV9zZzsKKwlteHNfZG1hLT5kbWFfZGV2aWNlLmRldmljZV9wcmVwX2RtYV9jeWNsaWMgPSBteHNfZG1hX3ByZXBfZG1hX2N5Y2xpYzsKKwlteHNfZG1hLT5kbWFfZGV2aWNlLmRldmljZV9jb250cm9sID0gbXhzX2RtYV9jb250cm9sOworCW14c19kbWEtPmRtYV9kZXZpY2UuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBteHNfZG1hX2lzc3VlX3BlbmRpbmc7CisKKwlyZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZteHNfZG1hLT5kbWFfZGV2aWNlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIobXhzX2RtYS0+ZG1hX2RldmljZS5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOworCQlnb3RvIGVycl9pbml0OworCX0KKworCWRldl9pbmZvKG14c19kbWEtPmRtYV9kZXZpY2UuZGV2LCAiaW5pdGlhbGl6ZWRcbiIpOworCisJcmV0dXJuIDA7CisKK2Vycl9pbml0OgorCWNsa19wdXQobXhzX2RtYS0+Y2xrKTsKK2Vycl9jbGs6CisJaW91bm1hcChteHNfZG1hLT5iYXNlKTsKK2Vycl9pb3JlbWFwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihpb3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoaW9yZXMpKTsKK2Vycl9yZXF1ZXN0X3JlZ2lvbjoKKwlrZnJlZShteHNfZG1hKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBteHNfZG1hX3R5cGVbXSA9IHsKKwl7CisJCS5uYW1lID0gIm14cy1kbWEtYXBiaCIsCisJCS5kcml2ZXJfZGF0YSA9IE1YU19ETUFfQVBCSCwKKwl9LCB7CisJCS5uYW1lID0gIm14cy1kbWEtYXBieCIsCisJCS5kcml2ZXJfZGF0YSA9IE1YU19ETUFfQVBCWCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteHNfZG1hX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXhzLWRtYSIsCisJfSwKKwkuaWRfdGFibGUJPSBteHNfZG1hX3R5cGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBteHNfZG1hX21vZHVsZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXhzX2RtYV9kcml2ZXIsIG14c19kbWFfcHJvYmUpOworfQorc3Vic3lzX2luaXRjYWxsKG14c19kbWFfbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvcGNoX2RtYS5jIGIvZHJpdmVycy9kbWEvcGNoX2RtYS5jCmluZGV4IDFjMzg0MTguLjhkOGZlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3BjaF9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9wY2hfZG1hLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAl1MzIJZG1hX3N0czE7CiAJdTMyCXJlc2VydmVkMjsKIAl1MzIJcmVzZXJ2ZWQzOwotCXN0cnVjdCBwY2hfZG1hX2Rlc2NfcmVncyBkZXNjWzBdOworCXN0cnVjdCBwY2hfZG1hX2Rlc2NfcmVncyBkZXNjW01BWF9DSEFOX05SXTsKIH07CiAKIHN0cnVjdCBwY2hfZG1hX2Rlc2MgewpAQCAtMTI0LDcgKzEyNCw3IEBACiAJc3RydWN0IHBjaV9wb29sCQkqcG9vbDsKIAlzdHJ1Y3QgcGNoX2RtYV9yZWdzCXJlZ3M7CiAJc3RydWN0IHBjaF9kbWFfZGVzY19yZWdzIGNoX3JlZ3NbTUFYX0NIQU5fTlJdOwotCXN0cnVjdCBwY2hfZG1hX2NoYW4JY2hhbm5lbHNbMF07CisJc3RydWN0IHBjaF9kbWFfY2hhbgljaGFubmVsc1tNQVhfQ0hBTl9OUl07CiB9OwogCiAjZGVmaW5lIFBDSF9ETUFfQ1RMMAkweDAwCkBAIC0zNjYsNyArMzY2LDcgQEAKIAlzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuID0gdG9fcGRfY2hhbih0eGQtPmNoYW4pOwogCWRtYV9jb29raWVfdCBjb29raWU7CiAKLQlzcGluX2xvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCXNwaW5fbG9jaygmcGRfY2hhbi0+bG9jayk7CiAJY29va2llID0gcGRjX2Fzc2lnbl9jb29raWUocGRfY2hhbiwgZGVzYyk7CiAKIAlpZiAobGlzdF9lbXB0eSgmcGRfY2hhbi0+YWN0aXZlX2xpc3QpKSB7CkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+ZGVzY19ub2RlLCAmcGRfY2hhbi0+cXVldWUpOwogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlzcGluX3VubG9jaygmcGRfY2hhbi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4Niw3ICszODYsNyBAQAogCXN0cnVjdCBwY2hfZG1hICpwZCA9IHRvX3BkKGNoYW4tPmRldmljZSk7CiAJZG1hX2FkZHJfdCBhZGRyOwogCi0JZGVzYyA9IHBjaV9wb29sX2FsbG9jKHBkLT5wb29sLCBHRlBfS0VSTkVMLCAmYWRkcik7CisJZGVzYyA9IHBjaV9wb29sX2FsbG9jKHBkLT5wb29sLCBmbGFncywgJmFkZHIpOwogCWlmIChkZXNjKSB7CiAJCW1lbXNldChkZXNjLCAwLCBzaXplb2Yoc3RydWN0IHBjaF9kbWFfZGVzYykpOwogCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+dHhfbGlzdCk7CkBAIC00MDUsNyArNDA1LDcgQEAKIAlzdHJ1Y3QgcGNoX2RtYV9kZXNjICpyZXQgPSBOVUxMOwogCWludCBpOwogCi0Jc3Bpbl9sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlzcGluX2xvY2soJnBkX2NoYW4tPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZCwgJnBkX2NoYW4tPmZyZWVfbGlzdCwgZGVzY19ub2RlKSB7CiAJCWkrKzsKIAkJaWYgKGFzeW5jX3R4X3Rlc3RfYWNrKCZkZXNjLT50eGQpKSB7CkBAIC00MTUsMTUgKzQxNSwxNSBAQAogCQl9CiAJCWRldl9kYmcoY2hhbjJkZXYoJnBkX2NoYW4tPmNoYW4pLCAiZGVzYyAlcCBub3QgQUNLZWRcbiIsIGRlc2MpOwogCX0KLQlzcGluX3VubG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJc3Bpbl91bmxvY2soJnBkX2NoYW4tPmxvY2spOwogCWRldl9kYmcoY2hhbjJkZXYoJnBkX2NoYW4tPmNoYW4pLCAic2Nhbm5lZCAlZCBkZXNjcmlwdG9yc1xuIiwgaSk7CiAKIAlpZiAoIXJldCkgewogCQlyZXQgPSBwZGNfYWxsb2NfZGVzYygmcGRfY2hhbi0+Y2hhbiwgR0ZQX05PSU8pOwogCQlpZiAocmV0KSB7Ci0JCQlzcGluX2xvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCQkJc3Bpbl9sb2NrKCZwZF9jaGFuLT5sb2NrKTsKIAkJCXBkX2NoYW4tPmRlc2NzX2FsbG9jYXRlZCsrOwotCQkJc3Bpbl91bmxvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCQkJc3Bpbl91bmxvY2soJnBkX2NoYW4tPmxvY2spOwogCQl9IGVsc2UgewogCQkJZGV2X2VycihjaGFuMmRldigmcGRfY2hhbi0+Y2hhbiksCiAJCQkJImZhaWxlZCB0byBhbGxvYyBkZXNjXG4iKTsKQEAgLTQzNywxMCArNDM3LDEwIEBACiAJCQkgc3RydWN0IHBjaF9kbWFfZGVzYyAqZGVzYykKIHsKIAlpZiAoZGVzYykgewotCQlzcGluX2xvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCQlzcGluX2xvY2soJnBkX2NoYW4tPmxvY2spOwogCQlsaXN0X3NwbGljZV9pbml0KCZkZXNjLT50eF9saXN0LCAmcGRfY2hhbi0+ZnJlZV9saXN0KTsKIAkJbGlzdF9hZGQoJmRlc2MtPmRlc2Nfbm9kZSwgJnBkX2NoYW4tPmZyZWVfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnBkX2NoYW4tPmxvY2spOwogCX0KIH0KIApAQCAtNTMwLDkgKzUzMCw5IEBACiAJc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbiA9IHRvX3BkX2NoYW4oY2hhbik7CiAKIAlpZiAocGRjX2lzX2lkbGUocGRfY2hhbikpIHsKLQkJc3Bpbl9sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZwZF9jaGFuLT5sb2NrKTsKIAkJcGRjX2FkdmFuY2Vfd29yayhwZF9jaGFuKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCQlzcGluX3VubG9jaygmcGRfY2hhbi0+bG9jayk7CiAJfQogfQogCkBAIC01OTIsNyArNTkyLDYgQEAKIAkJCWdvdG8gZXJyX2Rlc2NfZ2V0OwogCQl9CiAKLQogCQlpZiAoIWZpcnN0KSB7CiAJCQlmaXJzdCA9IGRlc2M7CiAJCX0gZWxzZSB7CkBAIC02NDEsMTMgKzY0MCwxMyBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJnBkX2NoYW4tPmxvY2spOwogCi0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcGRjX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4gPSAoc3RydWN0IHBjaF9kbWFfY2hhbiAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcGRjX2lzX2lkbGUocGRfY2hhbikpIHsKIAkJZGV2X2VycihjaGFuMmRldigmcGRfY2hhbi0+Y2hhbiksCkBAIC02NTUsMTIgKzY1NCwxMiBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3Bpbl9sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRfY2hhbi0+bG9jaywgZmxhZ3MpOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJnBkX2NoYW4tPmVycl9zdGF0dXMpKQogCQlwZGNfaGFuZGxlX2Vycm9yKHBkX2NoYW4pOwogCWVsc2UKIAkJcGRjX2FkdmFuY2Vfd29yayhwZF9jaGFuKTsKLQlzcGluX3VubG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRfY2hhbi0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcGRfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKQpAQCAtNjk0LDYgKzY5Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmCUNPTkZJR19QTQogc3RhdGljIHZvaWQgcGNoX2RtYV9zYXZlX3JlZ3Moc3RydWN0IHBjaF9kbWEgKnBkKQogewogCXN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW47CkBAIC03NzEsNiArNzcxLDcgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBjaF9kbWFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc2hkbWEuYyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKaW5kZXggMjg3MjBkMy4uNjQ1MWI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc2hkbWEuYworKysgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCkBAIC03NTAsNyArNzUwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIEZpbmQgdGhlIGZpcnN0IG5vdCB0cmFuc2ZlcnJlZCBkZXNjaXB0b3IgKi8KKwkvKiBGaW5kIHRoZSBmaXJzdCBub3QgdHJhbnNmZXJyZWQgZGVzY3JpcHRvciAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKQogCQlpZiAoZGVzYy0+bWFyayA9PSBERVNDX1NVQk1JVFRFRCkgewogCQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJRdWV1ZSAjJWQgdG8gJWQ6ICV1QCV4IC0+ICV4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMgYi9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYwppbmRleCA2ZTFkNDZhLi5hZjk1NWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYworKysgYi9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYwpAQCAtNjgsNiArNjgsNyBAQAogICogQGJhc2U6IFBvaW50ZXIgdG8gbWVtb3J5IGFyZWEgd2hlbiB0aGUgcHJlX2FsbG9jX2xsaSdzIGFyZSBub3QgbGFyZ2UKICAqIGVub3VnaCwgSUUgYmlnZ2VyIHRoYW4gdGhlIG1vc3QgY29tbW9uIGNhc2UsIDEgZHN0IGFuZCAxIHNyYy4gTlVMTCBpZgogICogcHJlX2FsbG9jX2xsaSBpcyB1c2VkLgorICogQGRtYV9hZGRyOiBETUEgYWRkcmVzcywgaWYgbWFwcGVkCiAgKiBAc2l6ZTogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIG1lbW9yeSBhdCBiYXNlIG9yIHRoZSBzaXplIG9mIHByZV9hbGxvY19sbGkuCiAgKiBAcHJlX2FsbG9jX2xsaTogUHJlIGFsbG9jYXRlZCBhcmVhIGZvciB0aGUgbW9zdCBjb21tb24gY2FzZSBvZiB0cmFuc2ZlcnMsCiAgKiBvbmUgYnVmZmVyIHRvIG9uZSBidWZmZXIuCkBAIC03NSw2ICs3Niw3IEBACiBzdHJ1Y3QgZDQwX2xsaV9wb29sIHsKIAl2b2lkCSpiYXNlOwogCWludAkgc2l6ZTsKKwlkbWFfYWRkcl90CWRtYV9hZGRyOwogCS8qIFNwYWNlIGZvciBkc3QgYW5kIHNyYywgcGx1cyBhbiBleHRyYSBmb3IgcGFkZGluZyAqLwogCXU4CSBwcmVfYWxsb2NfbGxpWzMgKiBzaXplb2Yoc3RydWN0IGQ0MF9waHlfbGxpKV07CiB9OwpAQCAtOTQsNyArOTYsNiBAQAogICogZHVyaW5nIGEgdHJhbnNmZXIuCiAgKiBAbm9kZTogTGlzdCBlbnRyeS4KICAqIEBpc19pbl9jbGllbnRfbGlzdDogdHJ1ZSBpZiB0aGUgY2xpZW50IG93bnMgdGhpcyBkZXNjcmlwdG9yLgotICogQGlzX2h3X2xpbmtlZDogdHJ1ZSBpZiB0aGlzIGpvYiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29udGludWVkIGZvcgogICogdGhlIHByZXZpb3VzIG9uZS4KICAqCiAgKiBUaGlzIGRlc2NyaXB0b3IgaXMgdXNlZCBmb3IgYm90aCBsb2dpY2FsIGFuZCBwaHlzaWNhbCB0cmFuc2ZlcnMuCkBAIC0xMTQsNyArMTE1LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQkgbm9kZTsKIAogCWJvb2wJCQkJIGlzX2luX2NsaWVudF9saXN0OwotCWJvb2wJCQkJIGlzX2h3X2xpbmtlZDsKKwlib29sCQkJCSBjeWNsaWM7CiB9OwogCiAvKioKQEAgLTEzMCw2ICsxMzEsNyBAQAogICovCiBzdHJ1Y3QgZDQwX2xjbGFfcG9vbCB7CiAJdm9pZAkJKmJhc2U7CisJZG1hX2FkZHJfdAlkbWFfYWRkcjsKIAl2b2lkCQkqYmFzZV91bmFsaWduZWQ7CiAJaW50CQkgcGFnZXM7CiAJc3BpbmxvY2tfdAkgbG9jazsKQEAgLTMwMyw5ICszMDUsMzcgQEAKIAl1bnNpZ25lZCBpbnQgdmFsOwogfTsKIAotc3RhdGljIGludCBkNDBfcG9vbF9sbGlfYWxsb2Moc3RydWN0IGQ0MF9kZXNjICpkNDBkLAotCQkJICAgICAgaW50IGxsaV9sZW4sIGJvb2wgaXNfbG9nKQorc3RhdGljIHN0cnVjdCBkZXZpY2UgKmNoYW4yZGV2KHN0cnVjdCBkNDBfY2hhbiAqZDQwYykKIHsKKwlyZXR1cm4gJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2U7Cit9CisKK3N0YXRpYyBib29sIGNoYW5faXNfcGh5c2ljYWwoc3RydWN0IGQ0MF9jaGFuICpjaGFuKQoreworCXJldHVybiBjaGFuLT5sb2dfbnVtID09IEQ0MF9QSFlfQ0hBTjsKK30KKworc3RhdGljIGJvb2wgY2hhbl9pc19sb2dpY2FsKHN0cnVjdCBkNDBfY2hhbiAqY2hhbikKK3sKKwlyZXR1cm4gIWNoYW5faXNfcGh5c2ljYWwoY2hhbik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNoYW5fYmFzZShzdHJ1Y3QgZDQwX2NoYW4gKmNoYW4pCit7CisJcmV0dXJuIGNoYW4tPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKKwkgICAgICAgY2hhbi0+cGh5X2NoYW4tPm51bSAqIEQ0MF9EUkVHX1BDREVMVEE7Cit9CisKKyNkZWZpbmUgZDQwX2VycihkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAorCWRldl9lcnIoZGV2LCAiWyVzXSAiIGZvcm1hdCwgX19mdW5jX18sICMjIGFyZykKKworI2RlZmluZSBjaGFuX2VycihkNDBjLCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkNDBfZXJyKGNoYW4yZGV2KGQ0MGMpLCBmb3JtYXQsICMjIGFyZykKKworc3RhdGljIGludCBkNDBfcG9vbF9sbGlfYWxsb2Moc3RydWN0IGQ0MF9jaGFuICpkNDBjLCBzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MGQsCisJCQkgICAgICBpbnQgbGxpX2xlbikKK3sKKwlib29sIGlzX2xvZyA9IGNoYW5faXNfbG9naWNhbChkNDBjKTsKIAl1MzIgYWxpZ247CiAJdm9pZCAqYmFzZTsKIApAQCAtMzE5LDcgKzM0OSw3IEBACiAJCWQ0MGQtPmxsaV9wb29sLnNpemUgPSBzaXplb2YoZDQwZC0+bGxpX3Bvb2wucHJlX2FsbG9jX2xsaSk7CiAJCWQ0MGQtPmxsaV9wb29sLmJhc2UgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCWQ0MGQtPmxsaV9wb29sLnNpemUgPSBBTElHTihsbGlfbGVuICogMiAqIGFsaWduLCBhbGlnbik7CisJCWQ0MGQtPmxsaV9wb29sLnNpemUgPSBsbGlfbGVuICogMiAqIGFsaWduOwogCiAJCWJhc2UgPSBrbWFsbG9jKGQ0MGQtPmxsaV9wb29sLnNpemUgKyBhbGlnbiwgR0ZQX05PV0FJVCk7CiAJCWQ0MGQtPmxsaV9wb29sLmJhc2UgPSBiYXNlOwpAQCAtMzI5LDIyICszNTksMzcgQEAKIAl9CiAKIAlpZiAoaXNfbG9nKSB7Ci0JCWQ0MGQtPmxsaV9sb2cuc3JjID0gUFRSX0FMSUdOKChzdHJ1Y3QgZDQwX2xvZ19sbGkgKikgYmFzZSwKLQkJCQkJICAgICAgYWxpZ24pOwotCQlkNDBkLT5sbGlfbG9nLmRzdCA9IFBUUl9BTElHTihkNDBkLT5sbGlfbG9nLnNyYyArIGxsaV9sZW4sCi0JCQkJCSAgICAgIGFsaWduKTsKKwkJZDQwZC0+bGxpX2xvZy5zcmMgPSBQVFJfQUxJR04oYmFzZSwgYWxpZ24pOworCQlkNDBkLT5sbGlfbG9nLmRzdCA9IGQ0MGQtPmxsaV9sb2cuc3JjICsgbGxpX2xlbjsKKworCQlkNDBkLT5sbGlfcG9vbC5kbWFfYWRkciA9IDA7CiAJfSBlbHNlIHsKLQkJZDQwZC0+bGxpX3BoeS5zcmMgPSBQVFJfQUxJR04oKHN0cnVjdCBkNDBfcGh5X2xsaSAqKWJhc2UsCi0JCQkJCSAgICAgIGFsaWduKTsKLQkJZDQwZC0+bGxpX3BoeS5kc3QgPSBQVFJfQUxJR04oZDQwZC0+bGxpX3BoeS5zcmMgKyBsbGlfbGVuLAotCQkJCQkgICAgICBhbGlnbik7CisJCWQ0MGQtPmxsaV9waHkuc3JjID0gUFRSX0FMSUdOKGJhc2UsIGFsaWduKTsKKwkJZDQwZC0+bGxpX3BoeS5kc3QgPSBkNDBkLT5sbGlfcGh5LnNyYyArIGxsaV9sZW47CisKKwkJZDQwZC0+bGxpX3Bvb2wuZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkNDBjLT5iYXNlLT5kZXYsCisJCQkJCQkJIGQ0MGQtPmxsaV9waHkuc3JjLAorCQkJCQkJCSBkNDBkLT5sbGlfcG9vbC5zaXplLAorCQkJCQkJCSBETUFfVE9fREVWSUNFKTsKKworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZDQwYy0+YmFzZS0+ZGV2LAorCQkJCSAgICAgIGQ0MGQtPmxsaV9wb29sLmRtYV9hZGRyKSkgeworCQkJa2ZyZWUoZDQwZC0+bGxpX3Bvb2wuYmFzZSk7CisJCQlkNDBkLT5sbGlfcG9vbC5iYXNlID0gTlVMTDsKKwkJCWQ0MGQtPmxsaV9wb29sLmRtYV9hZGRyID0gMDsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGQ0MF9wb29sX2xsaV9mcmVlKHN0cnVjdCBkNDBfZGVzYyAqZDQwZCkKK3N0YXRpYyB2b2lkIGQ0MF9wb29sX2xsaV9mcmVlKHN0cnVjdCBkNDBfY2hhbiAqZDQwYywgc3RydWN0IGQ0MF9kZXNjICpkNDBkKQogeworCWlmIChkNDBkLT5sbGlfcG9vbC5kbWFfYWRkcikKKwkJZG1hX3VubWFwX3NpbmdsZShkNDBjLT5iYXNlLT5kZXYsIGQ0MGQtPmxsaV9wb29sLmRtYV9hZGRyLAorCQkJCSBkNDBkLT5sbGlfcG9vbC5zaXplLCBETUFfVE9fREVWSUNFKTsKKwogCWtmcmVlKGQ0MGQtPmxsaV9wb29sLmJhc2UpOwogCWQ0MGQtPmxsaV9wb29sLmJhc2UgPSBOVUxMOwogCWQ0MGQtPmxsaV9wb29sLnNpemUgPSAwOwpAQCAtMzkxLDcgKzQzNiw3IEBACiAJaW50IGk7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlpZiAoZDQwYy0+bG9nX251bSA9PSBENDBfUEhZX0NIQU4pCisJaWYgKGNoYW5faXNfcGh5c2ljYWwoZDQwYykpCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmJhc2UtPmxjbGFfcG9vbC5sb2NrLCBmbGFncyk7CkBAIC00MzAsNyArNDc1LDcgQEAKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZCwgX2QsICZkNDBjLT5jbGllbnQsIG5vZGUpCiAJCQlpZiAoYXN5bmNfdHhfdGVzdF9hY2soJmQtPnR4ZCkpIHsKLQkJCQlkNDBfcG9vbF9sbGlfZnJlZShkKTsKKwkJCQlkNDBfcG9vbF9sbGlfZnJlZShkNDBjLCBkKTsKIAkJCQlkNDBfZGVzY19yZW1vdmUoZCk7CiAJCQkJZGVzYyA9IGQ7CiAJCQkJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOwpAQCAtNDUwLDYgKzQ5NSw3IEBACiBzdGF0aWMgdm9pZCBkNDBfZGVzY19mcmVlKHN0cnVjdCBkNDBfY2hhbiAqZDQwYywgc3RydWN0IGQ0MF9kZXNjICpkNDBkKQogewogCisJZDQwX3Bvb2xfbGxpX2ZyZWUoZDQwYywgZDQwZCk7CiAJZDQwX2xjbGFfZnJlZV9hbGwoZDQwYywgZDQwZCk7CiAJa21lbV9jYWNoZV9mcmVlKGQ0MGMtPmJhc2UtPmRlc2Nfc2xhYiwgZDQwZCk7CiB9CkBAIC00NTksNTcgKzUwNSwxMjggQEAKIAlsaXN0X2FkZF90YWlsKCZkZXNjLT5ub2RlLCAmZDQwYy0+YWN0aXZlKTsKIH0KIAotc3RhdGljIHZvaWQgZDQwX2Rlc2NfbG9hZChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMsIHN0cnVjdCBkNDBfZGVzYyAqZDQwZCkKK3N0YXRpYyB2b2lkIGQ0MF9waHlfbGxpX2xvYWQoc3RydWN0IGQ0MF9jaGFuICpjaGFuLCBzdHJ1Y3QgZDQwX2Rlc2MgKmRlc2MpCiB7Ci0JaW50IGN1cnJfbGNsYSA9IC1FSU5WQUwsIG5leHRfbGNsYTsKKwlzdHJ1Y3QgZDQwX3BoeV9sbGkgKmxsaV9kc3QgPSBkZXNjLT5sbGlfcGh5LmRzdDsKKwlzdHJ1Y3QgZDQwX3BoeV9sbGkgKmxsaV9zcmMgPSBkZXNjLT5sbGlfcGh5LnNyYzsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBjaGFuX2Jhc2UoY2hhbik7CiAKLQlpZiAoZDQwYy0+bG9nX251bSA9PSBENDBfUEhZX0NIQU4pIHsKLQkJZDQwX3BoeV9sbGlfd3JpdGUoZDQwYy0+YmFzZS0+dmlydGJhc2UsCi0JCQkJICBkNDBjLT5waHlfY2hhbi0+bnVtLAotCQkJCSAgZDQwZC0+bGxpX3BoeS5kc3QsCi0JCQkJICBkNDBkLT5sbGlfcGh5LnNyYyk7Ci0JCWQ0MGQtPmxsaV9jdXJyZW50ID0gZDQwZC0+bGxpX2xlbjsKLQl9IGVsc2UgeworCXdyaXRlbChsbGlfc3JjLT5yZWdfY2ZnLCBiYXNlICsgRDQwX0NIQU5fUkVHX1NTQ0ZHKTsKKwl3cml0ZWwobGxpX3NyYy0+cmVnX2VsdCwgYmFzZSArIEQ0MF9DSEFOX1JFR19TU0VMVCk7CisJd3JpdGVsKGxsaV9zcmMtPnJlZ19wdHIsIGJhc2UgKyBENDBfQ0hBTl9SRUdfU1NQVFIpOworCXdyaXRlbChsbGlfc3JjLT5yZWdfbG5rLCBiYXNlICsgRDQwX0NIQU5fUkVHX1NTTE5LKTsKIAotCQlpZiAoKGQ0MGQtPmxsaV9sZW4gLSBkNDBkLT5sbGlfY3VycmVudCkgPiAxKQotCQkJY3Vycl9sY2xhID0gZDQwX2xjbGFfYWxsb2Nfb25lKGQ0MGMsIGQ0MGQpOworCXdyaXRlbChsbGlfZHN0LT5yZWdfY2ZnLCBiYXNlICsgRDQwX0NIQU5fUkVHX1NEQ0ZHKTsKKwl3cml0ZWwobGxpX2RzdC0+cmVnX2VsdCwgYmFzZSArIEQ0MF9DSEFOX1JFR19TREVMVCk7CisJd3JpdGVsKGxsaV9kc3QtPnJlZ19wdHIsIGJhc2UgKyBENDBfQ0hBTl9SRUdfU0RQVFIpOworCXdyaXRlbChsbGlfZHN0LT5yZWdfbG5rLCBiYXNlICsgRDQwX0NIQU5fUkVHX1NETE5LKTsKK30KIAotCQlkNDBfbG9nX2xsaV9sY3BhX3dyaXRlKGQ0MGMtPmxjcGEsCi0JCQkJICAgICAgICZkNDBkLT5sbGlfbG9nLmRzdFtkNDBkLT5sbGlfY3VycmVudF0sCi0JCQkJICAgICAgICZkNDBkLT5sbGlfbG9nLnNyY1tkNDBkLT5sbGlfY3VycmVudF0sCi0JCQkJICAgICAgIGN1cnJfbGNsYSk7CitzdGF0aWMgdm9pZCBkNDBfbG9nX2xsaV90b19sY3hhKHN0cnVjdCBkNDBfY2hhbiAqY2hhbiwgc3RydWN0IGQ0MF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBkNDBfbGNsYV9wb29sICpwb29sID0gJmNoYW4tPmJhc2UtPmxjbGFfcG9vbDsKKwlzdHJ1Y3QgZDQwX2xvZ19sbGlfYmlkaXIgKmxsaSA9ICZkZXNjLT5sbGlfbG9nOworCWludCBsbGlfY3VycmVudCA9IGRlc2MtPmxsaV9jdXJyZW50OworCWludCBsbGlfbGVuID0gZGVzYy0+bGxpX2xlbjsKKwlib29sIGN5Y2xpYyA9IGRlc2MtPmN5Y2xpYzsKKwlpbnQgY3Vycl9sY2xhID0gLUVJTlZBTDsKKwlpbnQgZmlyc3RfbGNsYSA9IDA7CisJYm9vbCBsaW5rYmFjazsKIAotCQlkNDBkLT5sbGlfY3VycmVudCsrOwotCQlmb3IgKDsgZDQwZC0+bGxpX2N1cnJlbnQgPCBkNDBkLT5sbGlfbGVuOyBkNDBkLT5sbGlfY3VycmVudCsrKSB7Ci0JCQlzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxjbGE7CisJLyoKKwkgKiBXZSBtYXkgaGF2ZSBwYXJ0aWFsbHkgcnVubmluZyBjeWNsaWMgdHJhbnNmZXJzLCBpbiBjYXNlIHdlIGRpZCd0IGdldAorCSAqIGVub3VnaCBMQ0xBIGVudHJpZXMuCisJICovCisJbGlua2JhY2sgPSBjeWNsaWMgJiYgbGxpX2N1cnJlbnQgPT0gMDsKIAotCQkJaWYgKGQ0MGQtPmxsaV9jdXJyZW50ICsgMSA8IGQ0MGQtPmxsaV9sZW4pCi0JCQkJbmV4dF9sY2xhID0gZDQwX2xjbGFfYWxsb2Nfb25lKGQ0MGMsIGQ0MGQpOwotCQkJZWxzZQotCQkJCW5leHRfbGNsYSA9IC1FSU5WQUw7CisJLyoKKwkgKiBGb3IgbGlua2JhY2ssIHdlIG5lZWQgb25lIExDTEEgZXZlbiB3aXRoIG9ubHkgb25lIGxpbmssIGJlY2F1c2Ugd2UKKwkgKiBjYW4ndCBsaW5rIGJhY2sgdG8gdGhlIG9uZSBpbiBMQ1BBIHNwYWNlCisJICovCisJaWYgKGxpbmtiYWNrIHx8IChsbGlfbGVuIC0gbGxpX2N1cnJlbnQgPiAxKSkgeworCQljdXJyX2xjbGEgPSBkNDBfbGNsYV9hbGxvY19vbmUoY2hhbiwgZGVzYyk7CisJCWZpcnN0X2xjbGEgPSBjdXJyX2xjbGE7CisJfQogCi0JCQlsY2xhID0gZDQwYy0+YmFzZS0+bGNsYV9wb29sLmJhc2UgKwotCQkJCWQ0MGMtPnBoeV9jaGFuLT5udW0gKiAxMDI0ICsKLQkJCQk4ICogY3Vycl9sY2xhICogMjsKKwkvKgorCSAqIEZvciBsaW5rYmFjaywgd2Ugbm9ybWFsbHkgbG9hZCB0aGUgTENQQSBpbiB0aGUgbG9vcCBzaW5jZSB3ZSBuZWVkIHRvCisJICogbGluayBpdCB0byB0aGUgc2Vjb25kIExDTEEgYW5kIG5vdCB0aGUgZmlyc3QuICBIb3dldmVyLCBpZiB3ZQorCSAqIGNvdWxkbid0IGV2ZW4gZ2V0IGEgZmlyc3QgTENMQSwgdGhlbiB3ZSBoYXZlIHRvIHJ1biBpbiBMQ1BBIGFuZAorCSAqIHJlbG9hZCBtYW51YWxseS4KKwkgKi8KKwlpZiAoIWxpbmtiYWNrIHx8IGN1cnJfbGNsYSA9PSAtRUlOVkFMKSB7CisJCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CiAKLQkJCWQ0MF9sb2dfbGxpX2xjbGFfd3JpdGUobGNsYSwKLQkJCQkJICAgICAgICZkNDBkLT5sbGlfbG9nLmRzdFtkNDBkLT5sbGlfY3VycmVudF0sCi0JCQkJCSAgICAgICAmZDQwZC0+bGxpX2xvZy5zcmNbZDQwZC0+bGxpX2N1cnJlbnRdLAotCQkJCQkgICAgICAgbmV4dF9sY2xhKTsKKwkJaWYgKGN1cnJfbGNsYSA9PSAtRUlOVkFMKQorCQkJZmxhZ3MgfD0gTExJX1RFUk1fSU5UOwogCi0JCQkodm9pZCkgZG1hX21hcF9zaW5nbGUoZDQwYy0+YmFzZS0+ZGV2LCBsY2xhLAotCQkJCQkgICAgICAyICogc2l6ZW9mKHN0cnVjdCBkNDBfbG9nX2xsaSksCi0JCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOworCQlkNDBfbG9nX2xsaV9sY3BhX3dyaXRlKGNoYW4tPmxjcGEsCisJCQkJICAgICAgICZsbGktPmRzdFtsbGlfY3VycmVudF0sCisJCQkJICAgICAgICZsbGktPnNyY1tsbGlfY3VycmVudF0sCisJCQkJICAgICAgIGN1cnJfbGNsYSwKKwkJCQkgICAgICAgZmxhZ3MpOworCQlsbGlfY3VycmVudCsrOworCX0KIAotCQkJY3Vycl9sY2xhID0gbmV4dF9sY2xhOworCWlmIChjdXJyX2xjbGEgPCAwKQorCQlnb3RvIG91dDsKIAotCQkJaWYgKGN1cnJfbGNsYSA9PSAtRUlOVkFMKSB7Ci0JCQkJZDQwZC0+bGxpX2N1cnJlbnQrKzsKLQkJCQlicmVhazsKLQkJCX0KKwlmb3IgKDsgbGxpX2N1cnJlbnQgPCBsbGlfbGVuOyBsbGlfY3VycmVudCsrKSB7CisJCXVuc2lnbmVkIGludCBsY2xhX29mZnNldCA9IGNoYW4tPnBoeV9jaGFuLT5udW0gKiAxMDI0ICsKKwkJCQkJICAgOCAqIGN1cnJfbGNsYSAqIDI7CisJCXN0cnVjdCBkNDBfbG9nX2xsaSAqbGNsYSA9IHBvb2wtPmJhc2UgKyBsY2xhX29mZnNldDsKKwkJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwkJaW50IG5leHRfbGNsYTsKIAorCQlpZiAobGxpX2N1cnJlbnQgKyAxIDwgbGxpX2xlbikKKwkJCW5leHRfbGNsYSA9IGQ0MF9sY2xhX2FsbG9jX29uZShjaGFuLCBkZXNjKTsKKwkJZWxzZQorCQkJbmV4dF9sY2xhID0gbGlua2JhY2sgPyBmaXJzdF9sY2xhIDogLUVJTlZBTDsKKworCQlpZiAoY3ljbGljIHx8IG5leHRfbGNsYSA9PSAtRUlOVkFMKQorCQkJZmxhZ3MgfD0gTExJX1RFUk1fSU5UOworCisJCWlmIChsaW5rYmFjayAmJiBjdXJyX2xjbGEgPT0gZmlyc3RfbGNsYSkgeworCQkJLyogRmlyc3QgbGluayBnb2VzIGluIGJvdGggTENQQSBhbmQgTENMQSAqLworCQkJZDQwX2xvZ19sbGlfbGNwYV93cml0ZShjaGFuLT5sY3BhLAorCQkJCQkgICAgICAgJmxsaS0+ZHN0W2xsaV9jdXJyZW50XSwKKwkJCQkJICAgICAgICZsbGktPnNyY1tsbGlfY3VycmVudF0sCisJCQkJCSAgICAgICBuZXh0X2xjbGEsIGZsYWdzKTsKKwkJfQorCisJCS8qCisJCSAqIE9uZSB1bnVzZWQgTENMQSBpbiB0aGUgY3ljbGljIGNhc2UgaWYgdGhlIHZlcnkgZmlyc3QKKwkJICogbmV4dF9sY2xhIGZhaWxzLi4uCisJCSAqLworCQlkNDBfbG9nX2xsaV9sY2xhX3dyaXRlKGxjbGEsCisJCQkJICAgICAgICZsbGktPmRzdFtsbGlfY3VycmVudF0sCisJCQkJICAgICAgICZsbGktPnNyY1tsbGlfY3VycmVudF0sCisJCQkJICAgICAgIG5leHRfbGNsYSwgZmxhZ3MpOworCisJCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGNoYW4tPmJhc2UtPmRldiwKKwkJCQkJcG9vbC0+ZG1hX2FkZHIsIGxjbGFfb2Zmc2V0LAorCQkJCQkyICogc2l6ZW9mKHN0cnVjdCBkNDBfbG9nX2xsaSksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCisJCWN1cnJfbGNsYSA9IG5leHRfbGNsYTsKKworCQlpZiAoY3Vycl9sY2xhID09IC1FSU5WQUwgfHwgY3Vycl9sY2xhID09IGZpcnN0X2xjbGEpIHsKKwkJCWxsaV9jdXJyZW50Kys7CisJCQlicmVhazsKIAkJfQogCX0KKworb3V0OgorCWRlc2MtPmxsaV9jdXJyZW50ID0gbGxpX2N1cnJlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGQ0MF9kZXNjX2xvYWQoc3RydWN0IGQ0MF9jaGFuICpkNDBjLCBzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MGQpCit7CisJaWYgKGNoYW5faXNfcGh5c2ljYWwoZDQwYykpIHsKKwkJZDQwX3BoeV9sbGlfbG9hZChkNDBjLCBkNDBkKTsKKwkJZDQwZC0+bGxpX2N1cnJlbnQgPSBkNDBkLT5sbGlfbGVuOworCX0gZWxzZQorCQlkNDBfbG9nX2xsaV90b19sY3hhKGQ0MGMsIGQ0MGQpOwogfQogCiBzdGF0aWMgc3RydWN0IGQ0MF9kZXNjICpkNDBfZmlyc3RfYWN0aXZlX2dldChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMpCkBAIC01NDMsMTggKzY2MCw2IEBACiAJcmV0dXJuIGQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MF9sYXN0X3F1ZXVlZChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMpCi17Ci0Jc3RydWN0IGQ0MF9kZXNjICpkOwotCi0JaWYgKGxpc3RfZW1wdHkoJmQ0MGMtPnF1ZXVlKSkKLQkJcmV0dXJuIE5VTEw7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmZDQwYy0+cXVldWUsIG5vZGUpCi0JCWlmIChsaXN0X2lzX2xhc3QoJmQtPm5vZGUsICZkNDBjLT5xdWV1ZSkpCi0JCQlicmVhazsKLQlyZXR1cm4gZDsKLX0KLQogc3RhdGljIGludCBkNDBfcHNpemVfMl9idXJzdF9zaXplKGJvb2wgaXNfbG9nLCBpbnQgcHNpemUpCiB7CiAJaWYgKGlzX2xvZykgewpAQCAtNjY2LDkgKzc3MSw5IEBACiAJCX0KIAogCQlpZiAoaSA9PSBENDBfU1VTUEVORF9NQVhfSVQpIHsKLQkJCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkJIlslc106IHVuYWJsZSB0byBzdXNwZW5kIHRoZSBjaGwgJWQgKGxvZzogJWQpIHN0YXR1cyAleFxuIiwKLQkJCQlfX2Z1bmNfXywgZDQwYy0+cGh5X2NoYW4tPm51bSwgZDQwYy0+bG9nX251bSwKKwkJCWNoYW5fZXJyKGQ0MGMsCisJCQkJInVuYWJsZSB0byBzdXNwZW5kIHRoZSBjaGwgJWQgKGxvZzogJWQpIHN0YXR1cyAleFxuIiwKKwkJCQlkNDBjLT5waHlfY2hhbi0+bnVtLCBkNDBjLT5sb2dfbnVtLAogCQkJCXN0YXR1cyk7CiAJCQlkdW1wX3N0YWNrKCk7CiAJCQlyZXQgPSAtRUJVU1k7CkBAIC03MDEsMTcgKzgwNiw0NSBAQAogCWQ0MGMtPmJ1c3kgPSBmYWxzZTsKIH0KIAorc3RhdGljIHZvaWQgX19kNDBfY29uZmlnX3NldF9ldmVudChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMsIGJvb2wgZW5hYmxlLAorCQkJCSAgIHUzMiBldmVudCwgaW50IHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBjaGFuX2Jhc2UoZDQwYykgKyByZWc7CisJaW50IHRyaWVzOworCisJaWYgKCFlbmFibGUpIHsKKwkJd3JpdGVsKChENDBfREVBQ1RJVkFURV9FVkVOVExJTkUgPDwgRDQwX0VWRU5UTElORV9QT1MoZXZlbnQpKQorCQkgICAgICAgfCB+RDQwX0VWRU5UTElORV9NQVNLKGV2ZW50KSwgYWRkcik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFRoZSBoYXJkd2FyZSBzb21ldGltZXMgZG9lc24ndCByZWdpc3RlciB0aGUgZW5hYmxlIHdoZW4gc3JjIGFuZCBkc3QKKwkgKiBldmVudCBsaW5lcyBhcmUgYWN0aXZlIG9uIHRoZSBzYW1lIGxvZ2ljYWwgY2hhbm5lbC4gIFJldHJ5IHRvIGVuc3VyZQorCSAqIGl0IGRvZXMuICBVc3VhbGx5IG9ubHkgb25lIHJldHJ5IGlzIHN1ZmZpY2llbnQuCisJICovCisJdHJpZXMgPSAxMDA7CisJd2hpbGUgKC0tdHJpZXMpIHsKKwkJd3JpdGVsKChENDBfQUNUSVZBVEVfRVZFTlRMSU5FIDw8IEQ0MF9FVkVOVExJTkVfUE9TKGV2ZW50KSkKKwkJICAgICAgIHwgfkQ0MF9FVkVOVExJTkVfTUFTSyhldmVudCksIGFkZHIpOworCisJCWlmIChyZWFkbChhZGRyKSAmIEQ0MF9FVkVOVExJTkVfTUFTSyhldmVudCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAodHJpZXMgIT0gOTkpCisJCWRldl9kYmcoY2hhbjJkZXYoZDQwYyksCisJCQkiWyVzXSB3b3JrYXJvdW5kIGVuYWJsZSBTJWNMTksgKCVkIHRyaWVzKVxuIiwKKwkJCV9fZnVuY19fLCByZWcgPT0gRDQwX0NIQU5fUkVHX1NTTE5LID8gJ1MnIDogJ0QnLAorCQkJMTAwIC0gdHJpZXMpOworCisJV0FSTl9PTighdHJpZXMpOworfQorCiBzdGF0aWMgdm9pZCBkNDBfY29uZmlnX3NldF9ldmVudChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMsIGJvb2wgZG9fZW5hYmxlKQogewotCXUzMiB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIE5vdGljZSwgdGhhdCBkaXNhYmxlIHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBjaGFubmVsIHRvIGJlIHN0b3BwZWQgKi8KLQlpZiAoZG9fZW5hYmxlKQotCQl2YWwgPSBENDBfQUNUSVZBVEVfRVZFTlRMSU5FOwotCWVsc2UKLQkJdmFsID0gRDQwX0RFQUNUSVZBVEVfRVZFTlRMSU5FOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPnBoeV9jaGFuLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBFbmFibGUgZXZlbnQgbGluZSBjb25uZWN0ZWQgdG8gZGV2aWNlIChvciBtZW1jcHkpICovCkBAIC03MTksMjAgKzg1MiwxNSBAQAogCSAgICAoZDQwYy0+ZG1hX2NmZy5kaXIgPT0gU1RFRE1BNDBfUEVSSVBIX1RPX1BFUklQSCkpIHsKIAkJdTMyIGV2ZW50ID0gRDQwX1RZUEVfVE9fRVZFTlQoZDQwYy0+ZG1hX2NmZy5zcmNfZGV2X3R5cGUpOwogCi0JCXdyaXRlbCgodmFsIDw8IEQ0MF9FVkVOVExJTkVfUE9TKGV2ZW50KSkgfAotCQkgICAgICAgfkQ0MF9FVkVOVExJTkVfTUFTSyhldmVudCksCi0JCSAgICAgICBkNDBjLT5iYXNlLT52aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JCSAgICAgICBkNDBjLT5waHlfY2hhbi0+bnVtICogRDQwX0RSRUdfUENERUxUQSArCi0JCSAgICAgICBENDBfQ0hBTl9SRUdfU1NMTkspOworCQlfX2Q0MF9jb25maWdfc2V0X2V2ZW50KGQ0MGMsIGRvX2VuYWJsZSwgZXZlbnQsCisJCQkJICAgICAgIEQ0MF9DSEFOX1JFR19TU0xOSyk7CiAJfQorCiAJaWYgKGQ0MGMtPmRtYV9jZmcuZGlyICE9ICBTVEVETUE0MF9QRVJJUEhfVE9fTUVNKSB7CiAJCXUzMiBldmVudCA9IEQ0MF9UWVBFX1RPX0VWRU5UKGQ0MGMtPmRtYV9jZmcuZHN0X2Rldl90eXBlKTsKIAotCQl3cml0ZWwoKHZhbCA8PCBENDBfRVZFTlRMSU5FX1BPUyhldmVudCkpIHwKLQkJICAgICAgIH5ENDBfRVZFTlRMSU5FX01BU0soZXZlbnQpLAotCQkgICAgICAgZDQwYy0+YmFzZS0+dmlydGJhc2UgKyBENDBfRFJFR19QQ0JBU0UgKwotCQkgICAgICAgZDQwYy0+cGh5X2NoYW4tPm51bSAqIEQ0MF9EUkVHX1BDREVMVEEgKwotCQkgICAgICAgRDQwX0NIQU5fUkVHX1NETE5LKTsKKwkJX19kNDBfY29uZmlnX3NldF9ldmVudChkNDBjLCBkb19lbmFibGUsIGV2ZW50LAorCQkJCSAgICAgICBENDBfQ0hBTl9SRUdfU0RMTkspOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPnBoeV9jaGFuLT5sb2NrLCBmbGFncyk7CkBAIC03NDAsMTUgKzg2OCwxMiBAQAogCiBzdGF0aWMgdTMyIGQ0MF9jaGFuX2hhc19ldmVudHMoc3RydWN0IGQ0MF9jaGFuICpkNDBjKQogeworCXZvaWQgX19pb21lbSAqY2hhbmJhc2UgPSBjaGFuX2Jhc2UoZDQwYyk7CiAJdTMyIHZhbDsKIAotCXZhbCA9IHJlYWRsKGQ0MGMtPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkJICAgIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiBENDBfRFJFR19QQ0RFTFRBICsKLQkJICAgIEQ0MF9DSEFOX1JFR19TU0xOSyk7CisJdmFsID0gcmVhZGwoY2hhbmJhc2UgKyBENDBfQ0hBTl9SRUdfU1NMTkspOworCXZhbCB8PSByZWFkbChjaGFuYmFzZSArIEQ0MF9DSEFOX1JFR19TRExOSyk7CiAKLQl2YWwgfD0gcmVhZGwoZDQwYy0+YmFzZS0+dmlydGJhc2UgKyBENDBfRFJFR19QQ0JBU0UgKwotCQkgICAgIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiBENDBfRFJFR19QQ0RFTFRBICsKLQkJICAgICBENDBfQ0hBTl9SRUdfU0RMTkspOwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTc3MSw3ICs4OTYsNyBAQAogCQkJPSBENDBfRFJFR19QUk1PX0xDSEFOX1NSQ19MT0dfRFNUX0xPRywKIAl9OwogCi0JaWYgKGQ0MGMtPmxvZ19udW0gPT0gRDQwX1BIWV9DSEFOKQorCWlmIChjaGFuX2lzX3BoeXNpY2FsKGQ0MGMpKQogCQlyZXR1cm4gcGh5X21hcFtkNDBjLT5kbWFfY2ZnLm1vZGVfb3B0XTsKIAllbHNlCiAJCXJldHVybiBsb2dfbWFwW2Q0MGMtPmRtYV9jZmcubW9kZV9vcHRdOwpAQCAtNzg1LDcgKzkxMCw3IEBACiAJLyogT2RkIGFkZHJlc3NlcyBhcmUgZXZlbiBhZGRyZXNzZXMgKyA0ICovCiAJYWRkcl9iYXNlID0gKGQ0MGMtPnBoeV9jaGFuLT5udW0gJSAyKSAqIDQ7CiAJLyogU2V0dXAgY2hhbm5lbCBtb2RlIHRvIGxvZ2ljYWwgb3IgcGh5c2ljYWwgKi8KLQl2YXIgPSAoKHUzMikoZDQwYy0+bG9nX251bSAhPSBENDBfUEhZX0NIQU4pICsgMSkgPDwKKwl2YXIgPSAoKHUzMikoY2hhbl9pc19sb2dpY2FsKGQ0MGMpKSArIDEpIDw8CiAJCUQ0MF9DSEFOX1BPUyhkNDBjLT5waHlfY2hhbi0+bnVtKTsKIAl3cml0ZWwodmFyLCBkNDBjLT5iYXNlLT52aXJ0YmFzZSArIEQ0MF9EUkVHX1BSTVNFICsgYWRkcl9iYXNlKTsKIApAQCAtNzk0LDMwICs5MTksMTggQEAKIAogCXdyaXRlbCh2YXIsIGQ0MGMtPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfUFJNT0UgKyBhZGRyX2Jhc2UpOwogCi0JaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKSB7CisJaWYgKGNoYW5faXNfbG9naWNhbChkNDBjKSkgeworCQlpbnQgbGlkeCA9IChkNDBjLT5waHlfY2hhbi0+bnVtIDw8IEQ0MF9TUkVHX0VMRU1fTE9HX0xJRFhfUE9TKQorCQkJICAgJiBENDBfU1JFR19FTEVNX0xPR19MSURYX01BU0s7CisJCXZvaWQgX19pb21lbSAqY2hhbmJhc2UgPSBjaGFuX2Jhc2UoZDQwYyk7CisKIAkJLyogU2V0IGRlZmF1bHQgY29uZmlnIGZvciBDRkcgcmVnICovCi0JCXdyaXRlbChkNDBjLT5zcmNfZGVmX2NmZywKLQkJICAgICAgIGQ0MGMtPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkJICAgICAgIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiBENDBfRFJFR19QQ0RFTFRBICsKLQkJICAgICAgIEQ0MF9DSEFOX1JFR19TU0NGRyk7Ci0JCXdyaXRlbChkNDBjLT5kc3RfZGVmX2NmZywKLQkJICAgICAgIGQ0MGMtPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkJICAgICAgIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiBENDBfRFJFR19QQ0RFTFRBICsKLQkJICAgICAgIEQ0MF9DSEFOX1JFR19TRENGRyk7CisJCXdyaXRlbChkNDBjLT5zcmNfZGVmX2NmZywgY2hhbmJhc2UgKyBENDBfQ0hBTl9SRUdfU1NDRkcpOworCQl3cml0ZWwoZDQwYy0+ZHN0X2RlZl9jZmcsIGNoYW5iYXNlICsgRDQwX0NIQU5fUkVHX1NEQ0ZHKTsKIAogCQkvKiBTZXQgTElEWCBmb3IgbGNsYSAqLwotCQl3cml0ZWwoKGQ0MGMtPnBoeV9jaGFuLT5udW0gPDwgRDQwX1NSRUdfRUxFTV9MT0dfTElEWF9QT1MpICYKLQkJICAgICAgIEQ0MF9TUkVHX0VMRU1fTE9HX0xJRFhfTUFTSywKLQkJICAgICAgIGQ0MGMtPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkJICAgICAgIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiBENDBfRFJFR19QQ0RFTFRBICsKLQkJICAgICAgIEQ0MF9DSEFOX1JFR19TREVMVCk7Ci0KLQkJd3JpdGVsKChkNDBjLT5waHlfY2hhbi0+bnVtIDw8IEQ0MF9TUkVHX0VMRU1fTE9HX0xJRFhfUE9TKSAmCi0JCSAgICAgICBENDBfU1JFR19FTEVNX0xPR19MSURYX01BU0ssCi0JCSAgICAgICBkNDBjLT5iYXNlLT52aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JCSAgICAgICBkNDBjLT5waHlfY2hhbi0+bnVtICogRDQwX0RSRUdfUENERUxUQSArCi0JCSAgICAgICBENDBfQ0hBTl9SRUdfU1NFTFQpOwotCisJCXdyaXRlbChsaWR4LCBjaGFuYmFzZSArIEQ0MF9DSEFOX1JFR19TU0VMVCk7CisJCXdyaXRlbChsaWR4LCBjaGFuYmFzZSArIEQ0MF9DSEFOX1JFR19TREVMVCk7CiAJfQogfQogCkBAIC04MjUsMTUgKzkzOCwxNSBAQAogewogCXUzMiBudW1fZWx0OwogCi0JaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQorCWlmIChjaGFuX2lzX2xvZ2ljYWwoZDQwYykpCiAJCW51bV9lbHQgPSAocmVhZGwoJmQ0MGMtPmxjcGEtPmxjc3AyKSAmIEQ0MF9NRU1fTENTUDJfRUNOVF9NQVNLKQogCQkJPj4gRDQwX01FTV9MQ1NQMl9FQ05UX1BPUzsKLQllbHNlCi0JCW51bV9lbHQgPSAocmVhZGwoZDQwYy0+YmFzZS0+dmlydGJhc2UgKyBENDBfRFJFR19QQ0JBU0UgKwotCQkJCSBkNDBjLT5waHlfY2hhbi0+bnVtICogRDQwX0RSRUdfUENERUxUQSArCi0JCQkJIEQ0MF9DSEFOX1JFR19TREVMVCkgJgotCQkJICAgRDQwX1NSRUdfRUxFTV9QSFlfRUNOVF9NQVNLKSA+PgotCQkJRDQwX1NSRUdfRUxFTV9QSFlfRUNOVF9QT1M7CisJZWxzZSB7CisJCXUzMiB2YWwgPSByZWFkbChjaGFuX2Jhc2UoZDQwYykgKyBENDBfQ0hBTl9SRUdfU0RFTFQpOworCQludW1fZWx0ID0gKHZhbCAmIEQ0MF9TUkVHX0VMRU1fUEhZX0VDTlRfTUFTSykKKwkJCSAgPj4gRDQwX1NSRUdfRUxFTV9QSFlfRUNOVF9QT1M7CisJfQorCiAJcmV0dXJuIG51bV9lbHQgKiAoMSA8PCBkNDBjLT5kbWFfY2ZnLmRzdF9pbmZvLmRhdGFfd2lkdGgpOwogfQogCkBAIC04NDEsMjAgKzk1NCwxNyBAQAogewogCWJvb2wgaXNfbGluazsKIAotCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikKKwlpZiAoY2hhbl9pc19sb2dpY2FsKGQ0MGMpKQogCQlpc19saW5rID0gcmVhZGwoJmQ0MGMtPmxjcGEtPmxjc3AzKSAmICBENDBfTUVNX0xDU1AzX0RMT1NfTUFTSzsKIAllbHNlCi0JCWlzX2xpbmsgPSByZWFkbChkNDBjLT5iYXNlLT52aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JCQkJZDQwYy0+cGh5X2NoYW4tPm51bSAqIEQ0MF9EUkVHX1BDREVMVEEgKwotCQkJCUQ0MF9DSEFOX1JFR19TRExOSykgJgotCQkJRDQwX1NSRUdfTE5LX1BIWVNfTE5LX01BU0s7CisJCWlzX2xpbmsgPSByZWFkbChjaGFuX2Jhc2UoZDQwYykgKyBENDBfQ0hBTl9SRUdfU0RMTkspCisJCQkgICYgRDQwX1NSRUdfTE5LX1BIWVNfTE5LX01BU0s7CisKIAlyZXR1cm4gaXNfbGluazsKIH0KIAotc3RhdGljIGludCBkNDBfcGF1c2Uoc3RydWN0IGRtYV9jaGFuICpjaGFuKQorc3RhdGljIGludCBkNDBfcGF1c2Uoc3RydWN0IGQ0MF9jaGFuICpkNDBjKQogewotCXN0cnVjdCBkNDBfY2hhbiAqZDQwYyA9Ci0JCWNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZDQwX2NoYW4sIGNoYW4pOwogCWludCByZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTg2NSw3ICs5NzUsNyBAQAogCiAJcmVzID0gZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKGQ0MGMsIEQ0MF9ETUFfU1VTUEVORF9SRVEpOwogCWlmIChyZXMgPT0gMCkgewotCQlpZiAoZDQwYy0+bG9nX251bSAhPSBENDBfUEhZX0NIQU4pIHsKKwkJaWYgKGNoYW5faXNfbG9naWNhbChkNDBjKSkgewogCQkJZDQwX2NvbmZpZ19zZXRfZXZlbnQoZDQwYywgZmFsc2UpOwogCQkJLyogUmVzdW1lIHRoZSBvdGhlciBsb2dpY2FsIGNoYW5uZWxzIGlmIGFueSAqLwogCQkJaWYgKGQ0MF9jaGFuX2hhc19ldmVudHMoZDQwYykpCkBAIC04NzgsMTAgKzk4OCw4IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBkNDBfcmVzdW1lKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3N0YXRpYyBpbnQgZDQwX3Jlc3VtZShzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMpCiB7Ci0Jc3RydWN0IGQ0MF9jaGFuICpkNDBjID0KLQkJY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBkNDBfY2hhbiwgY2hhbik7CiAJaW50IHJlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtODkxLDcgKzk5OSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChkNDBjLT5iYXNlLT5yZXYgPT0gMCkKLQkJaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKSB7CisJCWlmIChjaGFuX2lzX2xvZ2ljYWwoZDQwYykpIHsKIAkJCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLAogCQkJCQkJCSAgRDQwX0RNQV9TVVNQRU5EX1JFUSk7CiAJCQlnb3RvIG5vX3N1c3BlbmQ7CkBAIC05MDAsNyArMTAwOCw3IEBACiAJLyogSWYgYnl0ZXMgbGVmdCB0byB0cmFuc2ZlciBvciBsaW5rZWQgdHggcmVzdW1lIGpvYiAqLwogCWlmIChkNDBfcmVzaWR1ZShkNDBjKSB8fCBkNDBfdHhfaXNfbGlua2VkKGQ0MGMpKSB7CiAKLQkJaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQorCQlpZiAoY2hhbl9pc19sb2dpY2FsKGQ0MGMpKQogCQkJZDQwX2NvbmZpZ19zZXRfZXZlbnQoZDQwYywgdHJ1ZSk7CiAKIAkJcmVzID0gZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKGQ0MGMsIEQ0MF9ETUFfUlVOKTsKQEAgLTkxMSw3NSArMTAxOSwyMCBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGQ0MF90eF9zdWJtaXRfbG9nKHN0cnVjdCBkNDBfY2hhbiAqZDQwYywgc3RydWN0IGQ0MF9kZXNjICpkNDBkKQorc3RhdGljIGludCBkNDBfdGVybWluYXRlX2FsbChzdHJ1Y3QgZDQwX2NoYW4gKmNoYW4pCiB7Ci0JLyogVE9ETzogV3JpdGUgKi8KLX0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOwogCi1zdGF0aWMgdm9pZCBkNDBfdHhfc3VibWl0X3BoeShzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMsIHN0cnVjdCBkNDBfZGVzYyAqZDQwZCkKLXsKLQlzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MGRfcHJldiA9IE5VTEw7Ci0JaW50IGk7Ci0JdTMyIHZhbDsKKwlyZXQgPSBkNDBfcGF1c2UoY2hhbik7CisJaWYgKCFyZXQgJiYgY2hhbl9pc19waHlzaWNhbChjaGFuKSkKKwkJcmV0ID0gZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKGNoYW4sIEQ0MF9ETUFfU1RPUCk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmQ0MGMtPnF1ZXVlKSkKLQkJZDQwZF9wcmV2ID0gZDQwX2xhc3RfcXVldWVkKGQ0MGMpOwotCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZkNDBjLT5hY3RpdmUpKQotCQlkNDBkX3ByZXYgPSBkNDBfZmlyc3RfYWN0aXZlX2dldChkNDBjKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCWQ0MF90ZXJtX2FsbChjaGFuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWQ0MGRfcHJldikKLQkJcmV0dXJuOwotCi0JLyogSGVyZSB3ZSB0cnkgdG8gam9pbiB0aGlzIGpvYiB3aXRoIHByZXZpb3VzIGpvYnMgKi8KLQl2YWwgPSByZWFkbChkNDBjLT5iYXNlLT52aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JCSAgICBkNDBjLT5waHlfY2hhbi0+bnVtICogRDQwX0RSRUdfUENERUxUQSArCi0JCSAgICBENDBfQ0hBTl9SRUdfU1NMTkspOwotCi0JLyogRmlndXJlIG91dCB3aGljaCBsaW5rIHdlJ3JlIGN1cnJlbnRseSB0cmFuc21pdHRpbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZDQwZF9wcmV2LT5sbGlfbGVuOyBpKyspCi0JCWlmICh2YWwgPT0gZDQwZF9wcmV2LT5sbGlfcGh5LnNyY1tpXS5yZWdfbG5rKQotCQkJYnJlYWs7Ci0KLQl2YWwgPSByZWFkbChkNDBjLT5iYXNlLT52aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JCSAgICBkNDBjLT5waHlfY2hhbi0+bnVtICogRDQwX0RSRUdfUENERUxUQSArCi0JCSAgICBENDBfQ0hBTl9SRUdfU1NFTFQpID4+IEQ0MF9TUkVHX0VMRU1fTE9HX0VDTlRfUE9TOwotCi0JaWYgKGkgPT0gKGQ0MGRfcHJldi0+bGxpX2xlbiAtIDEpICYmIHZhbCA+IDApIHsKLQkJLyogQ2hhbmdlIHRoZSBjdXJyZW50IG9uZSAqLwotCQl3cml0ZWwodmlydF90b19waHlzKGQ0MGQtPmxsaV9waHkuc3JjKSwKLQkJICAgICAgIGQ0MGMtPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkJICAgICAgIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiBENDBfRFJFR19QQ0RFTFRBICsKLQkJICAgICAgIEQ0MF9DSEFOX1JFR19TU0xOSyk7Ci0JCXdyaXRlbCh2aXJ0X3RvX3BoeXMoZDQwZC0+bGxpX3BoeS5kc3QpLAotCQkgICAgICAgZDQwYy0+YmFzZS0+dmlydGJhc2UgKyBENDBfRFJFR19QQ0JBU0UgKwotCQkgICAgICAgZDQwYy0+cGh5X2NoYW4tPm51bSAqIEQ0MF9EUkVHX1BDREVMVEEgKwotCQkgICAgICAgRDQwX0NIQU5fUkVHX1NETE5LKTsKLQotCQlkNDBkLT5pc19od19saW5rZWQgPSB0cnVlOwotCi0JfSBlbHNlIGlmIChpIDwgZDQwZF9wcmV2LT5sbGlfbGVuKSB7Ci0JCSh2b2lkKSBkbWFfdW5tYXBfc2luZ2xlKGQ0MGMtPmJhc2UtPmRldiwKLQkJCQkJdmlydF90b19waHlzKGQ0MGRfcHJldi0+bGxpX3BoeS5zcmMpLAotCQkJCQlkNDBkX3ByZXYtPmxsaV9wb29sLnNpemUsCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCi0JCS8qIEtlZXAgdGhlIHNldHRpbmdzICovCi0JCXZhbCA9IGQ0MGRfcHJldi0+bGxpX3BoeS5zcmNbZDQwZF9wcmV2LT5sbGlfbGVuIC0gMV0ucmVnX2xuayAmCi0JCQl+RDQwX1NSRUdfTE5LX1BIWVNfTE5LX01BU0s7Ci0JCWQ0MGRfcHJldi0+bGxpX3BoeS5zcmNbZDQwZF9wcmV2LT5sbGlfbGVuIC0gMV0ucmVnX2xuayA9Ci0JCQl2YWwgfCB2aXJ0X3RvX3BoeXMoZDQwZC0+bGxpX3BoeS5zcmMpOwotCi0JCXZhbCA9IGQ0MGRfcHJldi0+bGxpX3BoeS5kc3RbZDQwZF9wcmV2LT5sbGlfbGVuIC0gMV0ucmVnX2xuayAmCi0JCQl+RDQwX1NSRUdfTE5LX1BIWVNfTE5LX01BU0s7Ci0JCWQ0MGRfcHJldi0+bGxpX3BoeS5kc3RbZDQwZF9wcmV2LT5sbGlfbGVuIC0gMV0ucmVnX2xuayA9Ci0JCQl2YWwgfCB2aXJ0X3RvX3BoeXMoZDQwZC0+bGxpX3BoeS5kc3QpOwotCi0JCSh2b2lkKSBkbWFfbWFwX3NpbmdsZShkNDBjLT5iYXNlLT5kZXYsCi0JCQkJICAgICAgZDQwZF9wcmV2LT5sbGlfcGh5LnNyYywKLQkJCQkgICAgICBkNDBkX3ByZXYtPmxsaV9wb29sLnNpemUsCi0JCQkJICAgICAgRE1BX1RPX0RFVklDRSk7Ci0JCWQ0MGQtPmlzX2h3X2xpbmtlZCA9IHRydWU7Ci0JfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBkbWFfY29va2llX3QgZDQwX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQpAQCAtOTkwLDggKzEwNDMsNiBAQAogCXN0cnVjdCBkNDBfZGVzYyAqZDQwZCA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGQ0MF9kZXNjLCB0eGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkodm9pZCkgZDQwX3BhdXNlKCZkNDBjLT5jaGFuKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZkNDBjLT5sb2NrLCBmbGFncyk7CiAKIAlkNDBjLT5jaGFuLmNvb2tpZSsrOwpAQCAtMTAwMSwxNyArMTA1MiwxMCBAQAogCiAJZDQwZC0+dHhkLmNvb2tpZSA9IGQ0MGMtPmNoYW4uY29va2llOwogCi0JaWYgKGQ0MGMtPmxvZ19udW0gPT0gRDQwX1BIWV9DSEFOKQotCQlkNDBfdHhfc3VibWl0X3BoeShkNDBjLCBkNDBkKTsKLQllbHNlCi0JCWQ0MF90eF9zdWJtaXRfbG9nKGQ0MGMsIGQ0MGQpOwotCiAJZDQwX2Rlc2NfcXVldWUoZDQwYywgZDQwZCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7CiAKLQkodm9pZCkgZDQwX3Jlc3VtZSgmZDQwYy0+Y2hhbik7Ci0KIAlyZXR1cm4gdHgtPmNvb2tpZTsKIH0KIApAQCAtMTAyMCw3ICsxMDY0LDcgQEAKIAlpZiAoZDQwYy0+YmFzZS0+cmV2ID09IDApIHsKIAkJaW50IGVycjsKIAotCQlpZiAoZDQwYy0+bG9nX251bSAhPSBENDBfUEhZX0NIQU4pIHsKKwkJaWYgKGNoYW5faXNfbG9naWNhbChkNDBjKSkgewogCQkJZXJyID0gZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKGQ0MGMsCiAJCQkJCQkJICBENDBfRE1BX1NVU1BFTkRfUkVRKTsKIAkJCWlmIChlcnIpCkBAIC0xMDI4LDcgKzEwNzIsNyBAQAogCQl9CiAJfQogCi0JaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQorCWlmIChjaGFuX2lzX2xvZ2ljYWwoZDQwYykpCiAJCWQ0MF9jb25maWdfc2V0X2V2ZW50KGQ0MGMsIHRydWUpOwogCiAJcmV0dXJuIGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLCBENDBfRE1BX1JVTik7CkBAIC0xMDUxLDIxICsxMDk1LDE0IEBACiAJCS8qIEFkZCB0byBhY3RpdmUgcXVldWUgKi8KIAkJZDQwX2Rlc2Nfc3VibWl0KGQ0MGMsIGQ0MGQpOwogCi0JCS8qCi0JCSAqIElmIHRoaXMgam9iIGlzIGFscmVhZHkgbGlua2VkIGluIGh3LAotCQkgKiBkbyBub3Qgc3VibWl0IGl0LgotCQkgKi8KKwkJLyogSW5pdGlhdGUgRE1BIGpvYiAqLworCQlkNDBfZGVzY19sb2FkKGQ0MGMsIGQ0MGQpOwogCi0JCWlmICghZDQwZC0+aXNfaHdfbGlua2VkKSB7Ci0JCQkvKiBJbml0aWF0ZSBETUEgam9iICovCi0JCQlkNDBfZGVzY19sb2FkKGQ0MGMsIGQ0MGQpOworCQkvKiBTdGFydCBkbWEgam9iICovCisJCWVyciA9IGQ0MF9zdGFydChkNDBjKTsKIAotCQkJLyogU3RhcnQgZG1hIGpvYiAqLwotCQkJZXJyID0gZDQwX3N0YXJ0KGQ0MGMpOwotCi0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBOVUxMOwotCQl9CisJCWlmIChlcnIpCisJCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlyZXR1cm4gZDQwZDsKQEAgLTEwODIsMTggKzExMTksMzcgQEAKIAlpZiAoZDQwZCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlkNDBfbGNsYV9mcmVlX2FsbChkNDBjLCBkNDBkKTsKKwlpZiAoZDQwZC0+Y3ljbGljKSB7CisJCS8qCisJCSAqIElmIHRoaXMgd2FzIGEgcGFyaXRpYWxseSBsb2FkZWQgbGlzdCwgd2UgbmVlZCB0byByZWxvYWRlZAorCQkgKiBpdCwgYW5kIG9ubHkgd2hlbiB0aGUgbGlzdCBpcyBjb21wbGV0ZWQuICBXZSBuZWVkIHRvIGNoZWNrCisJCSAqIGZvciBkb25lIGJlY2F1c2UgdGhlIGludGVycnVwdCB3aWxsIGhpdCBmb3IgZXZlcnkgbGluaywgYW5kCisJCSAqIG5vdCBqdXN0IHRoZSBsYXN0IG9uZS4KKwkJICovCisJCWlmIChkNDBkLT5sbGlfY3VycmVudCA8IGQ0MGQtPmxsaV9sZW4KKwkJICAgICYmICFkNDBfdHhfaXNfbGlua2VkKGQ0MGMpCisJCSAgICAmJiAhZDQwX3Jlc2lkdWUoZDQwYykpIHsKKwkJCWQ0MF9sY2xhX2ZyZWVfYWxsKGQ0MGMsIGQ0MGQpOworCQkJZDQwX2Rlc2NfbG9hZChkNDBjLCBkNDBkKTsKKwkJCSh2b2lkKSBkNDBfc3RhcnQoZDQwYyk7CiAKLQlpZiAoZDQwZC0+bGxpX2N1cnJlbnQgPCBkNDBkLT5sbGlfbGVuKSB7Ci0JCWQ0MF9kZXNjX2xvYWQoZDQwYywgZDQwZCk7Ci0JCS8qIFN0YXJ0IGRtYSBqb2IgKi8KLQkJKHZvaWQpIGQ0MF9zdGFydChkNDBjKTsKLQkJcmV0dXJuOworCQkJaWYgKGQ0MGQtPmxsaV9jdXJyZW50ID09IGQ0MGQtPmxsaV9sZW4pCisJCQkJZDQwZC0+bGxpX2N1cnJlbnQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJZDQwX2xjbGFfZnJlZV9hbGwoZDQwYywgZDQwZCk7CisKKwkJaWYgKGQ0MGQtPmxsaV9jdXJyZW50IDwgZDQwZC0+bGxpX2xlbikgeworCQkJZDQwX2Rlc2NfbG9hZChkNDBjLCBkNDBkKTsKKwkJCS8qIFN0YXJ0IGRtYSBqb2IgKi8KKwkJCSh2b2lkKSBkNDBfc3RhcnQoZDQwYyk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoZDQwX3F1ZXVlX3N0YXJ0KGQ0MGMpID09IE5VTEwpCisJCQlkNDBjLT5idXN5ID0gZmFsc2U7CiAJfQogCi0JaWYgKGQ0MF9xdWV1ZV9zdGFydChkNDBjKSA9PSBOVUxMKQotCQlkNDBjLT5idXN5ID0gZmFsc2U7Ci0KIAlkNDBjLT5wZW5kaW5nX3R4Kys7CiAJdGFza2xldF9zY2hlZHVsZSgmZDQwYy0+dGFza2xldCk7CiAKQEAgLTExMTEsMTEgKzExNjcsMTEgQEAKIAogCS8qIEdldCBmaXJzdCBhY3RpdmUgZW50cnkgZnJvbSBsaXN0ICovCiAJZDQwZCA9IGQ0MF9maXJzdF9hY3RpdmVfZ2V0KGQ0MGMpOwotCiAJaWYgKGQ0MGQgPT0gTlVMTCkKIAkJZ290byBlcnI7CiAKLQlkNDBjLT5jb21wbGV0ZWQgPSBkNDBkLT50eGQuY29va2llOworCWlmICghZDQwZC0+Y3ljbGljKQorCQlkNDBjLT5jb21wbGV0ZWQgPSBkNDBkLT50eGQuY29va2llOwogCiAJLyoKIAkgKiBJZiB0ZXJtaW5hdGluZyBhIGNoYW5uZWwgcGVuZGluZ190eCBpcyBzZXQgdG8gemVyby4KQEAgLTExMzAsMTYgKzExODYsMTggQEAKIAljYWxsYmFjayA9IGQ0MGQtPnR4ZC5jYWxsYmFjazsKIAljYWxsYmFja19wYXJhbSA9IGQ0MGQtPnR4ZC5jYWxsYmFja19wYXJhbTsKIAotCWlmIChhc3luY190eF90ZXN0X2FjaygmZDQwZC0+dHhkKSkgewotCQlkNDBfcG9vbF9sbGlfZnJlZShkNDBkKTsKLQkJZDQwX2Rlc2NfcmVtb3ZlKGQ0MGQpOwotCQlkNDBfZGVzY19mcmVlKGQ0MGMsIGQ0MGQpOwotCX0gZWxzZSB7Ci0JCWlmICghZDQwZC0+aXNfaW5fY2xpZW50X2xpc3QpIHsKKwlpZiAoIWQ0MGQtPmN5Y2xpYykgeworCQlpZiAoYXN5bmNfdHhfdGVzdF9hY2soJmQ0MGQtPnR4ZCkpIHsKKwkJCWQ0MF9wb29sX2xsaV9mcmVlKGQ0MGMsIGQ0MGQpOwogCQkJZDQwX2Rlc2NfcmVtb3ZlKGQ0MGQpOwotCQkJZDQwX2xjbGFfZnJlZV9hbGwoZDQwYywgZDQwZCk7Ci0JCQlsaXN0X2FkZF90YWlsKCZkNDBkLT5ub2RlLCAmZDQwYy0+Y2xpZW50KTsKLQkJCWQ0MGQtPmlzX2luX2NsaWVudF9saXN0ID0gdHJ1ZTsKKwkJCWQ0MF9kZXNjX2ZyZWUoZDQwYywgZDQwZCk7CisJCX0gZWxzZSB7CisJCQlpZiAoIWQ0MGQtPmlzX2luX2NsaWVudF9saXN0KSB7CisJCQkJZDQwX2Rlc2NfcmVtb3ZlKGQ0MGQpOworCQkJCWQ0MF9sY2xhX2ZyZWVfYWxsKGQ0MGMsIGQ0MGQpOworCQkJCWxpc3RfYWRkX3RhaWwoJmQ0MGQtPm5vZGUsICZkNDBjLT5jbGllbnQpOworCQkJCWQ0MGQtPmlzX2luX2NsaWVudF9saXN0ID0gdHJ1ZTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMTIxNiw5ICsxMjc0LDggQEAKIAkJaWYgKCFpbFtyb3ddLmlzX2Vycm9yKQogCQkJZG1hX3RjX2hhbmRsZShkNDBjKTsKIAkJZWxzZQotCQkJZGV2X2VycihiYXNlLT5kZXYsCi0JCQkJIlslc10gSVJRIGNoYW46ICVsZCBvZmZzZXQgJWQgaWR4ICVkXG4iLAotCQkJCV9fZnVuY19fLCBjaGFuLCBpbFtyb3ddLm9mZnNldCwgaWR4KTsKKwkJCWQ0MF9lcnIoYmFzZS0+ZGV2LCAiSVJRIGNoYW46ICVsZCBvZmZzZXQgJWQgaWR4ICVkXG4iLAorCQkJCWNoYW4sIGlsW3Jvd10ub2Zmc2V0LCBpZHgpOwogCiAJCXNwaW5fdW5sb2NrKCZkNDBjLT5sb2NrKTsKIAl9CkBAIC0xMjM3LDggKzEyOTQsNyBAQAogCWJvb2wgaXNfbG9nID0gY29uZi0+bW9kZSA9PSBTVEVETUE0MF9NT0RFX0xPR0lDQUw7CiAKIAlpZiAoIWNvbmYtPmRpcikgewotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLCAiWyVzXSBJbnZhbGlkIGRpcmVjdGlvbi5cbiIsCi0JCQlfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJJbnZhbGlkIGRpcmVjdGlvbi5cbiIpOwogCQlyZXMgPSAtRUlOVkFMOwogCX0KIApAQCAtMTI0Niw0NiArMTMwMiw0MCBAQAogCSAgICBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmRldl90eFtjb25mLT5kc3RfZGV2X3R5cGVdID09IDAgJiYKIAkgICAgZDQwYy0+cnVudGltZV9hZGRyID09IDApIHsKIAotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gSW52YWxpZCBUWCBjaGFubmVsIGFkZHJlc3MgKCVkKVxuIiwKLQkJCV9fZnVuY19fLCBjb25mLT5kc3RfZGV2X3R5cGUpOworCQljaGFuX2VycihkNDBjLCAiSW52YWxpZCBUWCBjaGFubmVsIGFkZHJlc3MgKCVkKVxuIiwKKwkJCSBjb25mLT5kc3RfZGV2X3R5cGUpOwogCQlyZXMgPSAtRUlOVkFMOwogCX0KIAogCWlmIChjb25mLT5zcmNfZGV2X3R5cGUgIT0gU1RFRE1BNDBfREVWX1NSQ19NRU1PUlkgJiYKIAkgICAgZDQwYy0+YmFzZS0+cGxhdF9kYXRhLT5kZXZfcnhbY29uZi0+c3JjX2Rldl90eXBlXSA9PSAwICYmCiAJICAgIGQ0MGMtPnJ1bnRpbWVfYWRkciA9PSAwKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkiWyVzXSBJbnZhbGlkIFJYIGNoYW5uZWwgYWRkcmVzcyAoJWQpXG4iLAotCQkJX19mdW5jX18sIGNvbmYtPnNyY19kZXZfdHlwZSk7CisJCWNoYW5fZXJyKGQ0MGMsICJJbnZhbGlkIFJYIGNoYW5uZWwgYWRkcmVzcyAoJWQpXG4iLAorCQkJY29uZi0+c3JjX2Rldl90eXBlKTsKIAkJcmVzID0gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY29uZi0+ZGlyID09IFNURURNQTQwX01FTV9UT19QRVJJUEggJiYKIAkgICAgZHN0X2V2ZW50X2dyb3VwID09IFNURURNQTQwX0RFVl9EU1RfTUVNT1JZKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsICJbJXNdIEludmFsaWQgZHN0XG4iLAotCQkJX19mdW5jX18pOworCQljaGFuX2VycihkNDBjLCAiSW52YWxpZCBkc3RcbiIpOwogCQlyZXMgPSAtRUlOVkFMOwogCX0KIAogCWlmIChjb25mLT5kaXIgPT0gU1RFRE1BNDBfUEVSSVBIX1RPX01FTSAmJgogCSAgICBzcmNfZXZlbnRfZ3JvdXAgPT0gU1RFRE1BNDBfREVWX1NSQ19NRU1PUlkpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwgIlslc10gSW52YWxpZCBzcmNcbiIsCi0JCQlfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJJbnZhbGlkIHNyY1xuIik7CiAJCXJlcyA9IC1FSU5WQUw7CiAJfQogCiAJaWYgKHNyY19ldmVudF9ncm91cCA9PSBTVEVETUE0MF9ERVZfU1JDX01FTU9SWSAmJgogCSAgICBkc3RfZXZlbnRfZ3JvdXAgPT0gU1RFRE1BNDBfREVWX0RTVF9NRU1PUlkgJiYgaXNfbG9nKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkiWyVzXSBObyBldmVudCBsaW5lXG4iLCBfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJObyBldmVudCBsaW5lXG4iKTsKIAkJcmVzID0gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY29uZi0+ZGlyID09IFNURURNQTQwX1BFUklQSF9UT19QRVJJUEggJiYKIAkgICAgKHNyY19ldmVudF9ncm91cCAhPSBkc3RfZXZlbnRfZ3JvdXApKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkiWyVzXSBJbnZhbGlkIGV2ZW50IGdyb3VwXG4iLCBfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJJbnZhbGlkIGV2ZW50IGdyb3VwXG4iKTsKIAkJcmVzID0gLUVJTlZBTDsKIAl9CiAKQEAgLTEyOTQsOSArMTM0NCw3IEBACiAJCSAqIERNQUMgSFcgc3VwcG9ydHMgaXQuIFdpbGwgYmUgYWRkZWQgdG8gdGhpcyBkcml2ZXIsCiAJCSAqIGluIGNhc2UgYW55IGRtYSBjbGllbnQgcmVxdWlyZXMgaXQuCiAJCSAqLwotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gcGVyaXBoIHRvIHBlcmlwaCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJX19mdW5jX18pOworCQljaGFuX2VycihkNDBjLCAicGVyaXBoIHRvIHBlcmlwaCBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmVzID0gLUVJTlZBTDsKIAl9CiAKQEAgLTEzMDksOSArMTM1Nyw3IEBACiAJCSAqIHNyYyAoYnVyc3QgeCB3aWR0aCkgPT0gZHN0IChidXJzdCB4IHdpZHRoKQogCQkgKi8KIAotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gc3JjIChidXJzdCB4IHdpZHRoKSAhPSBkc3QgKGJ1cnN0IHggd2lkdGgpXG4iLAotCQkJX19mdW5jX18pOworCQljaGFuX2VycihkNDBjLCAic3JjIChidXJzdCB4IHdpZHRoKSAhPSBkc3QgKGJ1cnN0IHggd2lkdGgpXG4iKTsKIAkJcmVzID0gLUVJTlZBTDsKIAl9CiAKQEAgLTE1MTQsOCArMTU2MCw3IEBACiAJCSAgIGRtYV9oYXNfY2FwKERNQV9TTEFWRSwgY2FwKSkgewogCQlkNDBjLT5kbWFfY2ZnID0gKmQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+bWVtY3B5X2NvbmZfcGh5OwogCX0gZWxzZSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsICJbJXNdIE5vIG1lbWNweVxuIiwKLQkJCV9fZnVuY19fKTsKKwkJY2hhbl9lcnIoZDQwYywgIk5vIG1lbWNweVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTU0MCwyMSArMTU4NSwxOSBAQAogCS8qIFJlbGVhc2UgY2xpZW50IG93bmVkIGRlc2NyaXB0b3JzICovCiAJaWYgKCFsaXN0X2VtcHR5KCZkNDBjLT5jbGllbnQpKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZCwgX2QsICZkNDBjLT5jbGllbnQsIG5vZGUpIHsKLQkJCWQ0MF9wb29sX2xsaV9mcmVlKGQpOworCQkJZDQwX3Bvb2xfbGxpX2ZyZWUoZDQwYywgZCk7CiAJCQlkNDBfZGVzY19yZW1vdmUoZCk7CiAJCQlkNDBfZGVzY19mcmVlKGQ0MGMsIGQpOwogCQl9CiAKIAlpZiAocGh5ID09IE5VTEwpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwgIlslc10gcGh5ID09IG51bGxcbiIsCi0JCQlfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJwaHkgPT0gbnVsbFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChwaHktPmFsbG9jYXRlZF9zcmMgPT0gRDQwX0FMTE9DX0ZSRUUgJiYKIAkgICAgcGh5LT5hbGxvY2F0ZWRfZHN0ID09IEQ0MF9BTExPQ19GUkVFKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsICJbJXNdIGNoYW5uZWwgYWxyZWFkeSBmcmVlXG4iLAotCQkJX19mdW5jX18pOworCQljaGFuX2VycihkNDBjLCAiY2hhbm5lbCBhbHJlYWR5IGZyZWVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1NjYsMTkgKzE2MDksMTcgQEAKIAkJZXZlbnQgPSBENDBfVFlQRV9UT19FVkVOVChkNDBjLT5kbWFfY2ZnLnNyY19kZXZfdHlwZSk7CiAJCWlzX3NyYyA9IHRydWU7CiAJfSBlbHNlIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCSJbJXNdIFVua25vd24gZGlyZWN0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJVbmtub3duIGRpcmVjdGlvblxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLCBENDBfRE1BX1NVU1BFTkRfUkVRKTsKIAlpZiAocmVzKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsICJbJXNdIHN1c3BlbmQgZmFpbGVkXG4iLAotCQkJX19mdW5jX18pOworCQljaGFuX2VycihkNDBjLCAic3VzcGVuZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmVzOwogCX0KIAotCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikgeworCWlmIChjaGFuX2lzX2xvZ2ljYWwoZDQwYykpIHsKIAkJLyogUmVsZWFzZSBsb2dpY2FsIGNoYW5uZWwsIGRlYWN0aXZhdGUgdGhlIGV2ZW50IGxpbmUgKi8KIAogCQlkNDBfY29uZmlnX3NldF9ldmVudChkNDBjLCBmYWxzZSk7CkBAIC0xNTk0LDkgKzE2MzUsOCBAQAogCQkJCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLAogCQkJCQkJCQkgIEQ0MF9ETUFfUlVOKTsKIAkJCQlpZiAocmVzKSB7Ci0JCQkJCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkJCQkiWyVzXSBFeGVjdXRpbmcgUlVOIGNvbW1hbmRcbiIsCi0JCQkJCQlfX2Z1bmNfXyk7CisJCQkJCWNoYW5fZXJyKGQ0MGMsCisJCQkJCQkiRXhlY3V0aW5nIFJVTiBjb21tYW5kXG4iKTsKIAkJCQkJcmV0dXJuIHJlczsKIAkJCQl9CiAJCQl9CkBAIC0xNjA5LDggKzE2NDksNyBAQAogCS8qIFJlbGVhc2UgcGh5c2ljYWwgY2hhbm5lbCAqLwogCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLCBENDBfRE1BX1NUT1ApOwogCWlmIChyZXMpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCSJbJXNdIEZhaWxlZCB0byBzdG9wIGNoYW5uZWxcbiIsIF9fZnVuY19fKTsKKwkJY2hhbl9lcnIoZDQwYywgIkZhaWxlZCB0byBzdG9wIGNoYW5uZWxcbiIpOwogCQlyZXR1cm4gcmVzOwogCX0KIAlkNDBjLT5waHlfY2hhbiA9IE5VTEw7CkBAIC0xNjIyLDYgKzE2NjEsNyBAQAogCiBzdGF0aWMgYm9vbCBkNDBfaXNfcGF1c2VkKHN0cnVjdCBkNDBfY2hhbiAqZDQwYykKIHsKKwl2b2lkIF9faW9tZW0gKmNoYW5iYXNlID0gY2hhbl9iYXNlKGQ0MGMpOwogCWJvb2wgaXNfcGF1c2VkID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkIF9faW9tZW0gKmFjdGl2ZV9yZWc7CkBAIC0xNjMwLDcgKzE2NzAsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChkNDBjLT5sb2dfbnVtID09IEQ0MF9QSFlfQ0hBTikgeworCWlmIChjaGFuX2lzX3BoeXNpY2FsKGQ0MGMpKSB7CiAJCWlmIChkNDBjLT5waHlfY2hhbi0+bnVtICUgMiA9PSAwKQogCQkJYWN0aXZlX3JlZyA9IGQ0MGMtPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfQUNUSVZFOwogCQllbHNlCkBAIC0xNjQ4LDE3ICsxNjg4LDEyIEBACiAJaWYgKGQ0MGMtPmRtYV9jZmcuZGlyID09IFNURURNQTQwX01FTV9UT19QRVJJUEggfHwKIAkgICAgZDQwYy0+ZG1hX2NmZy5kaXIgPT0gU1RFRE1BNDBfTUVNX1RPX01FTSkgewogCQlldmVudCA9IEQ0MF9UWVBFX1RPX0VWRU5UKGQ0MGMtPmRtYV9jZmcuZHN0X2Rldl90eXBlKTsKLQkJc3RhdHVzID0gcmVhZGwoZDQwYy0+YmFzZS0+dmlydGJhc2UgKyBENDBfRFJFR19QQ0JBU0UgKwotCQkJICAgICAgIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiBENDBfRFJFR19QQ0RFTFRBICsKLQkJCSAgICAgICBENDBfQ0hBTl9SRUdfU0RMTkspOworCQlzdGF0dXMgPSByZWFkbChjaGFuYmFzZSArIEQ0MF9DSEFOX1JFR19TRExOSyk7CiAJfSBlbHNlIGlmIChkNDBjLT5kbWFfY2ZnLmRpciA9PSBTVEVETUE0MF9QRVJJUEhfVE9fTUVNKSB7CiAJCWV2ZW50ID0gRDQwX1RZUEVfVE9fRVZFTlQoZDQwYy0+ZG1hX2NmZy5zcmNfZGV2X3R5cGUpOwotCQlzdGF0dXMgPSByZWFkbChkNDBjLT5iYXNlLT52aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JCQkgICAgICAgZDQwYy0+cGh5X2NoYW4tPm51bSAqIEQ0MF9EUkVHX1BDREVMVEEgKwotCQkJICAgICAgIEQ0MF9DSEFOX1JFR19TU0xOSyk7CisJCXN0YXR1cyA9IHJlYWRsKGNoYW5iYXNlICsgRDQwX0NIQU5fUkVHX1NTTE5LKTsKIAl9IGVsc2UgewotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gVW5rbm93biBkaXJlY3Rpb25cbiIsIF9fZnVuY19fKTsKKwkJY2hhbl9lcnIoZDQwYywgIlVua25vd24gZGlyZWN0aW9uXG4iKTsKIAkJZ290byBfZXhpdDsKIAl9CiAKQEAgLTE2ODgsMTE0ICsxNzIzLDE4NCBAQAogCXJldHVybiBieXRlc19sZWZ0OwogfQogCi1zdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnN0ZWRtYTQwX21lbWNweV9zZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCi0JCQkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbF9kc3QsCi0JCQkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbF9zcmMsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgc2dsX2xlbiwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzKQorc3RhdGljIGludAorZDQwX3ByZXBfc2dfbG9nKHN0cnVjdCBkNDBfY2hhbiAqY2hhbiwgc3RydWN0IGQ0MF9kZXNjICpkZXNjLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsCisJCXVuc2lnbmVkIGludCBzZ19sZW4sIGRtYV9hZGRyX3Qgc3JjX2Rldl9hZGRyLAorCQlkbWFfYWRkcl90IGRzdF9kZXZfYWRkcikKIHsKLQlpbnQgcmVzOwotCXN0cnVjdCBkNDBfZGVzYyAqZDQwZDsKLQlzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMgPSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGQ0MF9jaGFuLAotCQkJCQkgICAgIGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnICpjZmcgPSAmY2hhbi0+ZG1hX2NmZzsKKwlzdHJ1Y3Qgc3RlZG1hNDBfaGFsZl9jaGFubmVsX2luZm8gKnNyY19pbmZvID0gJmNmZy0+c3JjX2luZm87CisJc3RydWN0IHN0ZWRtYTQwX2hhbGZfY2hhbm5lbF9pbmZvICpkc3RfaW5mbyA9ICZjZmctPmRzdF9pbmZvOworCWludCByZXQ7CiAKLQlpZiAoZDQwYy0+cGh5X2NoYW4gPT0gTlVMTCkgewotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gVW5hbGxvY2F0ZWQgY2hhbm5lbC5cbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQorCXJldCA9IGQ0MF9sb2dfc2dfdG9fbGxpKHNnX3NyYywgc2dfbGVuLAorCQkJCXNyY19kZXZfYWRkciwKKwkJCQlkZXNjLT5sbGlfbG9nLnNyYywKKwkJCQljaGFuLT5sb2dfZGVmLmxjc3AxLAorCQkJCXNyY19pbmZvLT5kYXRhX3dpZHRoLAorCQkJCWRzdF9pbmZvLT5kYXRhX3dpZHRoKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkNDBjLT5sb2NrLCBmbGFncyk7Ci0JZDQwZCA9IGQ0MF9kZXNjX2dldChkNDBjKTsKKwlyZXQgPSBkNDBfbG9nX3NnX3RvX2xsaShzZ19kc3QsIHNnX2xlbiwKKwkJCQlkc3RfZGV2X2FkZHIsCisJCQkJZGVzYy0+bGxpX2xvZy5kc3QsCisJCQkJY2hhbi0+bG9nX2RlZi5sY3NwMywKKwkJCQlkc3RfaW5mby0+ZGF0YV93aWR0aCwKKwkJCQlzcmNfaW5mby0+ZGF0YV93aWR0aCk7CiAKLQlpZiAoZDQwZCA9PSBOVUxMKQotCQlnb3RvIGVycjsKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CiAKLQlkNDBkLT5sbGlfbGVuID0gZDQwX3NnXzJfZG1hbGVuKHNnbF9kc3QsIHNnbF9sZW4sCi0JCQkJCWQ0MGMtPmRtYV9jZmcuc3JjX2luZm8uZGF0YV93aWR0aCwKLQkJCQkJZDQwYy0+ZG1hX2NmZy5kc3RfaW5mby5kYXRhX3dpZHRoKTsKLQlpZiAoZDQwZC0+bGxpX2xlbiA8IDApIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCSJbJXNdIFVuYWxpZ25lZCBzaXplXG4iLCBfX2Z1bmNfXyk7CitzdGF0aWMgaW50CitkNDBfcHJlcF9zZ19waHkoc3RydWN0IGQ0MF9jaGFuICpjaGFuLCBzdHJ1Y3QgZDQwX2Rlc2MgKmRlc2MsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwKKwkJdW5zaWduZWQgaW50IHNnX2xlbiwgZG1hX2FkZHJfdCBzcmNfZGV2X2FkZHIsCisJCWRtYV9hZGRyX3QgZHN0X2Rldl9hZGRyKQoreworCXN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyAqY2ZnID0gJmNoYW4tPmRtYV9jZmc7CisJc3RydWN0IHN0ZWRtYTQwX2hhbGZfY2hhbm5lbF9pbmZvICpzcmNfaW5mbyA9ICZjZmctPnNyY19pbmZvOworCXN0cnVjdCBzdGVkbWE0MF9oYWxmX2NoYW5uZWxfaW5mbyAqZHN0X2luZm8gPSAmY2ZnLT5kc3RfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpbnQgcmV0OworCisJaWYgKGRlc2MtPmN5Y2xpYykKKwkJZmxhZ3MgfD0gTExJX0NZQ0xJQyB8IExMSV9URVJNX0lOVDsKKworCXJldCA9IGQ0MF9waHlfc2dfdG9fbGxpKHNnX3NyYywgc2dfbGVuLCBzcmNfZGV2X2FkZHIsCisJCQkJZGVzYy0+bGxpX3BoeS5zcmMsCisJCQkJdmlydF90b19waHlzKGRlc2MtPmxsaV9waHkuc3JjKSwKKwkJCQljaGFuLT5zcmNfZGVmX2NmZywKKwkJCQlzcmNfaW5mbywgZHN0X2luZm8sIGZsYWdzKTsKKworCXJldCA9IGQ0MF9waHlfc2dfdG9fbGxpKHNnX2RzdCwgc2dfbGVuLCBkc3RfZGV2X2FkZHIsCisJCQkJZGVzYy0+bGxpX3BoeS5kc3QsCisJCQkJdmlydF90b19waHlzKGRlc2MtPmxsaV9waHkuZHN0KSwKKwkJCQljaGFuLT5kc3RfZGVmX2NmZywKKwkJCQlkc3RfaW5mbywgc3JjX2luZm8sIGZsYWdzKTsKKworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4tPmJhc2UtPmRldiwgZGVzYy0+bGxpX3Bvb2wuZG1hX2FkZHIsCisJCQkJICAgZGVzYy0+bGxpX3Bvb2wuc2l6ZSwgRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBkNDBfZGVzYyAqCitkNDBfcHJlcF9kZXNjKHN0cnVjdCBkNDBfY2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkgICAgICB1bnNpZ25lZCBpbnQgc2dfbGVuLCB1bnNpZ25lZCBsb25nIGRtYV9mbGFncykKK3sKKwlzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgKmNmZyA9ICZjaGFuLT5kbWFfY2ZnOworCXN0cnVjdCBkNDBfZGVzYyAqZGVzYzsKKwlpbnQgcmV0OworCisJZGVzYyA9IGQ0MF9kZXNjX2dldChjaGFuKTsKKwlpZiAoIWRlc2MpCisJCXJldHVybiBOVUxMOworCisJZGVzYy0+bGxpX2xlbiA9IGQ0MF9zZ18yX2RtYWxlbihzZywgc2dfbGVuLCBjZmctPnNyY19pbmZvLmRhdGFfd2lkdGgsCisJCQkJCWNmZy0+ZHN0X2luZm8uZGF0YV93aWR0aCk7CisJaWYgKGRlc2MtPmxsaV9sZW4gPCAwKSB7CisJCWNoYW5fZXJyKGNoYW4sICJVbmFsaWduZWQgc2l6ZVxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAotCWQ0MGQtPmxsaV9jdXJyZW50ID0gMDsKLQlkNDBkLT50eGQuZmxhZ3MgPSBkbWFfZmxhZ3M7Ci0KLQlpZiAoZDQwYy0+bG9nX251bSAhPSBENDBfUEhZX0NIQU4pIHsKLQotCQlpZiAoZDQwX3Bvb2xfbGxpX2FsbG9jKGQ0MGQsIGQ0MGQtPmxsaV9sZW4sIHRydWUpIDwgMCkgewotCQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCQkiWyVzXSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCSh2b2lkKSBkNDBfbG9nX3NnX3RvX2xsaShzZ2xfc3JjLAotCQkJCQkgc2dsX2xlbiwKLQkJCQkJIGQ0MGQtPmxsaV9sb2cuc3JjLAotCQkJCQkgZDQwYy0+bG9nX2RlZi5sY3NwMSwKLQkJCQkJIGQ0MGMtPmRtYV9jZmcuc3JjX2luZm8uZGF0YV93aWR0aCwKLQkJCQkJIGQ0MGMtPmRtYV9jZmcuZHN0X2luZm8uZGF0YV93aWR0aCk7Ci0KLQkJKHZvaWQpIGQ0MF9sb2dfc2dfdG9fbGxpKHNnbF9kc3QsCi0JCQkJCSBzZ2xfbGVuLAotCQkJCQkgZDQwZC0+bGxpX2xvZy5kc3QsCi0JCQkJCSBkNDBjLT5sb2dfZGVmLmxjc3AzLAotCQkJCQkgZDQwYy0+ZG1hX2NmZy5kc3RfaW5mby5kYXRhX3dpZHRoLAotCQkJCQkgZDQwYy0+ZG1hX2NmZy5zcmNfaW5mby5kYXRhX3dpZHRoKTsKLQl9IGVsc2UgewotCQlpZiAoZDQwX3Bvb2xfbGxpX2FsbG9jKGQ0MGQsIGQ0MGQtPmxsaV9sZW4sIGZhbHNlKSA8IDApIHsKLQkJCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkJIlslc10gT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQkJZ290byBlcnI7Ci0JCX0KLQotCQlyZXMgPSBkNDBfcGh5X3NnX3RvX2xsaShzZ2xfc3JjLAotCQkJCQlzZ2xfbGVuLAotCQkJCQkwLAotCQkJCQlkNDBkLT5sbGlfcGh5LnNyYywKLQkJCQkJdmlydF90b19waHlzKGQ0MGQtPmxsaV9waHkuc3JjKSwKLQkJCQkJZDQwYy0+c3JjX2RlZl9jZmcsCi0JCQkJCWQ0MGMtPmRtYV9jZmcuc3JjX2luZm8uZGF0YV93aWR0aCwKLQkJCQkJZDQwYy0+ZG1hX2NmZy5kc3RfaW5mby5kYXRhX3dpZHRoLAotCQkJCQlkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLnBzaXplKTsKLQotCQlpZiAocmVzIDwgMCkKLQkJCWdvdG8gZXJyOwotCi0JCXJlcyA9IGQ0MF9waHlfc2dfdG9fbGxpKHNnbF9kc3QsCi0JCQkJCXNnbF9sZW4sCi0JCQkJCTAsCi0JCQkJCWQ0MGQtPmxsaV9waHkuZHN0LAotCQkJCQl2aXJ0X3RvX3BoeXMoZDQwZC0+bGxpX3BoeS5kc3QpLAotCQkJCQlkNDBjLT5kc3RfZGVmX2NmZywKLQkJCQkJZDQwYy0+ZG1hX2NmZy5kc3RfaW5mby5kYXRhX3dpZHRoLAotCQkJCQlkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLmRhdGFfd2lkdGgsCi0JCQkJCWQ0MGMtPmRtYV9jZmcuZHN0X2luZm8ucHNpemUpOwotCi0JCWlmIChyZXMgPCAwKQotCQkJZ290byBlcnI7Ci0KLQkJKHZvaWQpIGRtYV9tYXBfc2luZ2xlKGQ0MGMtPmJhc2UtPmRldiwgZDQwZC0+bGxpX3BoeS5zcmMsCi0JCQkJICAgICAgZDQwZC0+bGxpX3Bvb2wuc2l6ZSwgRE1BX1RPX0RFVklDRSk7CisJcmV0ID0gZDQwX3Bvb2xfbGxpX2FsbG9jKGNoYW4sIGRlc2MsIGRlc2MtPmxsaV9sZW4pOworCWlmIChyZXQgPCAwKSB7CisJCWNoYW5fZXJyKGNoYW4sICJDb3VsZCBub3QgYWxsb2NhdGUgbGxpXG4iKTsKKwkJZ290byBlcnI7CiAJfQogCi0JZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmZDQwZC0+dHhkLCBjaGFuKTsKIAotCWQ0MGQtPnR4ZC50eF9zdWJtaXQgPSBkNDBfdHhfc3VibWl0OworCWRlc2MtPmxsaV9jdXJyZW50ID0gMDsKKwlkZXNjLT50eGQuZmxhZ3MgPSBkbWFfZmxhZ3M7CisJZGVzYy0+dHhkLnR4X3N1Ym1pdCA9IGQ0MF90eF9zdWJtaXQ7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7CisJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmZGVzYy0+dHhkLCAmY2hhbi0+Y2hhbik7CiAKLQlyZXR1cm4gJmQ0MGQtPnR4ZDsKKwlyZXR1cm4gZGVzYzsKKwogZXJyOgotCWlmIChkNDBkKQotCQlkNDBfZGVzY19mcmVlKGQ0MGMsIGQ0MGQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKKwlkNDBfZGVzY19mcmVlKGNoYW4sIGRlc2MpOwogCXJldHVybiBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChzdGVkbWE0MF9tZW1jcHlfc2cpOworCitzdGF0aWMgZG1hX2FkZHJfdAorZDQwX2dldF9kZXZfYWRkcihzdHJ1Y3QgZDQwX2NoYW4gKmNoYW4sIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3Qgc3RlZG1hNDBfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGNoYW4tPmJhc2UtPnBsYXRfZGF0YTsKKwlzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgKmNmZyA9ICZjaGFuLT5kbWFfY2ZnOworCWRtYV9hZGRyX3QgYWRkcjsKKworCWlmIChjaGFuLT5ydW50aW1lX2FkZHIpCisJCXJldHVybiBjaGFuLT5ydW50aW1lX2FkZHI7CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKKwkJYWRkciA9IHBsYXQtPmRldl9yeFtjZmctPnNyY19kZXZfdHlwZV07CisJZWxzZSBpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCWFkZHIgPSBwbGF0LT5kZXZfdHhbY2ZnLT5kc3RfZGV2X3R5cGVdOworCisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgorZDQwX3ByZXBfc2coc3RydWN0IGRtYV9jaGFuICpkY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMsCisJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCB1bnNpZ25lZCBpbnQgc2dfbGVuLAorCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzKQoreworCXN0cnVjdCBkNDBfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihkY2hhbiwgc3RydWN0IGQ0MF9jaGFuLCBjaGFuKTsKKwlkbWFfYWRkcl90IHNyY19kZXZfYWRkciA9IDA7CisJZG1hX2FkZHJfdCBkc3RfZGV2X2FkZHIgPSAwOworCXN0cnVjdCBkNDBfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlpZiAoIWNoYW4tPnBoeV9jaGFuKSB7CisJCWNoYW5fZXJyKGNoYW4sICJDYW5ub3QgcHJlcGFyZSB1bmFsbG9jYXRlZCBjaGFubmVsXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCisJZGVzYyA9IGQ0MF9wcmVwX2Rlc2MoY2hhbiwgc2dfc3JjLCBzZ19sZW4sIGRtYV9mbGFncyk7CisJaWYgKGRlc2MgPT0gTlVMTCkKKwkJZ290byBlcnI7CisKKwlpZiAoc2dfbmV4dCgmc2dfc3JjW3NnX2xlbiAtIDFdKSA9PSBzZ19zcmMpCisJCWRlc2MtPmN5Y2xpYyA9IHRydWU7CisKKwlpZiAoZGlyZWN0aW9uICE9IERNQV9OT05FKSB7CisJCWRtYV9hZGRyX3QgZGV2X2FkZHIgPSBkNDBfZ2V0X2Rldl9hZGRyKGNoYW4sIGRpcmVjdGlvbik7CisKKwkJaWYgKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCQlzcmNfZGV2X2FkZHIgPSBkZXZfYWRkcjsKKwkJZWxzZSBpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCQlkc3RfZGV2X2FkZHIgPSBkZXZfYWRkcjsKKwl9CisKKwlpZiAoY2hhbl9pc19sb2dpY2FsKGNoYW4pKQorCQlyZXQgPSBkNDBfcHJlcF9zZ19sb2coY2hhbiwgZGVzYywgc2dfc3JjLCBzZ19kc3QsCisJCQkJICAgICAgc2dfbGVuLCBzcmNfZGV2X2FkZHIsIGRzdF9kZXZfYWRkcik7CisJZWxzZQorCQlyZXQgPSBkNDBfcHJlcF9zZ19waHkoY2hhbiwgZGVzYywgc2dfc3JjLCBzZ19kc3QsCisJCQkJICAgICAgc2dfbGVuLCBzcmNfZGV2X2FkZHIsIGRzdF9kZXZfYWRkcik7CisKKwlpZiAocmV0KSB7CisJCWNoYW5fZXJyKGNoYW4sICJGYWlsZWQgdG8gcHJlcGFyZSAlcyBzZyBqb2I6ICVkXG4iLAorCQkJIGNoYW5faXNfbG9naWNhbChjaGFuKSA/ICJsb2ciIDogInBoeSIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAmZGVzYy0+dHhkOworCitlcnI6CisJaWYgKGRlc2MpCisJCWQ0MF9kZXNjX2ZyZWUoY2hhbiwgZGVzYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQogCiBib29sIHN0ZWRtYTQwX2ZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmRhdGEpCiB7CkBAIC0xODE4LDYgKzE5MjMsMzggQEAKIH0KIEVYUE9SVF9TWU1CT0woc3RlZG1hNDBfZmlsdGVyKTsKIAorc3RhdGljIHZvaWQgX19kNDBfc2V0X3ByaW9fcnQoc3RydWN0IGQ0MF9jaGFuICpkNDBjLCBpbnQgZGV2X3R5cGUsIGJvb2wgc3JjKQoreworCWJvb2wgcmVhbHRpbWUgPSBkNDBjLT5kbWFfY2ZnLnJlYWx0aW1lOworCWJvb2wgaGlnaHByaW8gPSBkNDBjLT5kbWFfY2ZnLmhpZ2hfcHJpb3JpdHk7CisJdTMyIHByaW9yZWcgPSBoaWdocHJpbyA/IEQ0MF9EUkVHX1BTRUcxIDogRDQwX0RSRUdfUENFRzE7CisJdTMyIHJ0cmVnID0gcmVhbHRpbWUgPyBENDBfRFJFR19SU0VHMSA6IEQ0MF9EUkVHX1JDRUcxOworCXUzMiBldmVudCA9IEQ0MF9UWVBFX1RPX0VWRU5UKGRldl90eXBlKTsKKwl1MzIgZ3JvdXAgPSBENDBfVFlQRV9UT19HUk9VUChkZXZfdHlwZSk7CisJdTMyIGJpdCA9IDEgPDwgZXZlbnQ7CisKKwkvKiBEZXN0aW5hdGlvbiBldmVudCBsaW5lcyBhcmUgc3RvcmVkIGluIHRoZSB1cHBlciBoYWxmd29yZCAqLworCWlmICghc3JjKQorCQliaXQgPDw9IDE2OworCisJd3JpdGVsKGJpdCwgZDQwYy0+YmFzZS0+dmlydGJhc2UgKyBwcmlvcmVnICsgZ3JvdXAgKiA0KTsKKwl3cml0ZWwoYml0LCBkNDBjLT5iYXNlLT52aXJ0YmFzZSArIHJ0cmVnICsgZ3JvdXAgKiA0KTsKK30KKworc3RhdGljIHZvaWQgZDQwX3NldF9wcmlvX3JlYWx0aW1lKHN0cnVjdCBkNDBfY2hhbiAqZDQwYykKK3sKKwlpZiAoZDQwYy0+YmFzZS0+cmV2IDwgMykKKwkJcmV0dXJuOworCisJaWYgKChkNDBjLT5kbWFfY2ZnLmRpciA9PSAgU1RFRE1BNDBfUEVSSVBIX1RPX01FTSkgfHwKKwkgICAgKGQ0MGMtPmRtYV9jZmcuZGlyID09IFNURURNQTQwX1BFUklQSF9UT19QRVJJUEgpKQorCQlfX2Q0MF9zZXRfcHJpb19ydChkNDBjLCBkNDBjLT5kbWFfY2ZnLnNyY19kZXZfdHlwZSwgdHJ1ZSk7CisKKwlpZiAoKGQ0MGMtPmRtYV9jZmcuZGlyID09ICBTVEVETUE0MF9NRU1fVE9fUEVSSVBIKSB8fAorCSAgICAoZDQwYy0+ZG1hX2NmZy5kaXIgPT0gU1RFRE1BNDBfUEVSSVBIX1RPX1BFUklQSCkpCisJCV9fZDQwX3NldF9wcmlvX3J0KGQ0MGMsIGQ0MGMtPmRtYV9jZmcuZHN0X2Rldl90eXBlLCBmYWxzZSk7Cit9CisKIC8qIERNQSBFTkdJTkUgZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IGQ0MF9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiB7CkBAIC0xODM0LDkgKzE5NzEsNyBAQAogCWlmICghZDQwYy0+Y29uZmlndXJlZCkgewogCQllcnIgPSBkNDBfY29uZmlnX21lbWNweShkNDBjKTsKIAkJaWYgKGVycikgewotCQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCQkiWyVzXSBGYWlsZWQgdG8gY29uZmlndXJlIG1lbWNweSBjaGFubmVsXG4iLAotCQkJCV9fZnVuY19fKTsKKwkJCWNoYW5fZXJyKGQ0MGMsICJGYWlsZWQgdG8gY29uZmlndXJlIG1lbWNweSBjaGFubmVsXG4iKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCX0KQEAgLTE4NDQsMTYgKzE5NzksMTcgQEAKIAogCWVyciA9IGQ0MF9hbGxvY2F0ZV9jaGFubmVsKGQ0MGMpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCSJbJXNdIEZhaWxlZCB0byBhbGxvY2F0ZSBjaGFubmVsXG4iLCBfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJGYWlsZWQgdG8gYWxsb2NhdGUgY2hhbm5lbFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAkvKiBGaWxsIGluIGJhc2ljIENGRyByZWdpc3RlciB2YWx1ZXMgKi8KIAlkNDBfcGh5X2NmZygmZDQwYy0+ZG1hX2NmZywgJmQ0MGMtPnNyY19kZWZfY2ZnLAotCQkgICAgJmQ0MGMtPmRzdF9kZWZfY2ZnLCBkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTik7CisJCSAgICAmZDQwYy0+ZHN0X2RlZl9jZmcsIGNoYW5faXNfbG9naWNhbChkNDBjKSk7CiAKLQlpZiAoZDQwYy0+bG9nX251bSAhPSBENDBfUEhZX0NIQU4pIHsKKwlkNDBfc2V0X3ByaW9fcmVhbHRpbWUoZDQwYyk7CisKKwlpZiAoY2hhbl9pc19sb2dpY2FsKGQ0MGMpKSB7CiAJCWQ0MF9sb2dfY2ZnKCZkNDBjLT5kbWFfY2ZnLAogCQkJICAgICZkNDBjLT5sb2dfZGVmLmxjc3AxLCAmZDQwYy0+bG9nX2RlZi5sY3NwMyk7CiAKQEAgLTE4ODYsOCArMjAyMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChkNDBjLT5waHlfY2hhbiA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkiWyVzXSBDYW5ub3QgZnJlZSB1bmFsbG9jYXRlZCBjaGFubmVsXG4iLCBfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJDYW5ub3QgZnJlZSB1bmFsbG9jYXRlZCBjaGFubmVsXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTg5Nyw4ICsyMDMyLDcgQEAKIAllcnIgPSBkNDBfZnJlZV9kbWEoZDQwYyk7CiAKIAlpZiAoZXJyKQotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gRmFpbGVkIHRvIGZyZWUgY2hhbm5lbFxuIiwgX19mdW5jX18pOworCQljaGFuX2VycihkNDBjLCAiRmFpbGVkIHRvIGZyZWUgY2hhbm5lbFxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0xOTA4LDI1MSArMjA0MiwzMSBAQAogCQkJCQkJICAgICAgIHNpemVfdCBzaXplLAogCQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzKQogewotCXN0cnVjdCBkNDBfZGVzYyAqZDQwZDsKLQlzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMgPSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGQ0MF9jaGFuLAotCQkJCQkgICAgIGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IGRzdF9zZzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc3JjX3NnOwogCi0JaWYgKGQ0MGMtPnBoeV9jaGFuID09IE5VTEwpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCSJbJXNdIENoYW5uZWwgaXMgbm90IGFsbG9jYXRlZC5cbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQorCXNnX2luaXRfdGFibGUoJmRzdF9zZywgMSk7CisJc2dfaW5pdF90YWJsZSgmc3JjX3NnLCAxKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkNDBjLT5sb2NrLCBmbGFncyk7Ci0JZDQwZCA9IGQ0MF9kZXNjX2dldChkNDBjKTsKKwlzZ19kbWFfYWRkcmVzcygmZHN0X3NnKSA9IGRzdDsKKwlzZ19kbWFfYWRkcmVzcygmc3JjX3NnKSA9IHNyYzsKIAotCWlmIChkNDBkID09IE5VTEwpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCSJbJXNdIERlc2NyaXB0b3IgaXMgTlVMTFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycjsKLQl9CisJc2dfZG1hX2xlbigmZHN0X3NnKSA9IHNpemU7CisJc2dfZG1hX2xlbigmc3JjX3NnKSA9IHNpemU7CiAKLQlkNDBkLT50eGQuZmxhZ3MgPSBkbWFfZmxhZ3M7Ci0JZDQwZC0+bGxpX2xlbiA9IGQ0MF9zaXplXzJfZG1hbGVuKHNpemUsCi0JCQkJCSAgZDQwYy0+ZG1hX2NmZy5zcmNfaW5mby5kYXRhX3dpZHRoLAotCQkJCQkgIGQ0MGMtPmRtYV9jZmcuZHN0X2luZm8uZGF0YV93aWR0aCk7Ci0JaWYgKGQ0MGQtPmxsaV9sZW4gPCAwKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkiWyVzXSBVbmFsaWduZWQgc2l6ZVxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycjsKLQl9Ci0KLQotCWRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoJmQ0MGQtPnR4ZCwgY2hhbik7Ci0KLQlkNDBkLT50eGQudHhfc3VibWl0ID0gZDQwX3R4X3N1Ym1pdDsKLQotCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikgewotCi0JCWlmIChkNDBfcG9vbF9sbGlfYWxsb2MoZDQwZCwgZDQwZC0+bGxpX2xlbiwgdHJ1ZSkgPCAwKSB7Ci0JCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJCSJbJXNdIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCWQ0MGQtPmxsaV9jdXJyZW50ID0gMDsKLQotCQlpZiAoZDQwX2xvZ19idWZfdG9fbGxpKGQ0MGQtPmxsaV9sb2cuc3JjLAotCQkJCSAgICAgICBzcmMsCi0JCQkJICAgICAgIHNpemUsCi0JCQkJICAgICAgIGQ0MGMtPmxvZ19kZWYubGNzcDEsCi0JCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuc3JjX2luZm8uZGF0YV93aWR0aCwKLQkJCQkgICAgICAgZDQwYy0+ZG1hX2NmZy5kc3RfaW5mby5kYXRhX3dpZHRoLAotCQkJCSAgICAgICB0cnVlKSA9PSBOVUxMKQotCQkJZ290byBlcnI7Ci0KLQkJaWYgKGQ0MF9sb2dfYnVmX3RvX2xsaShkNDBkLT5sbGlfbG9nLmRzdCwKLQkJCQkgICAgICAgZHN0LAotCQkJCSAgICAgICBzaXplLAotCQkJCSAgICAgICBkNDBjLT5sb2dfZGVmLmxjc3AzLAotCQkJCSAgICAgICBkNDBjLT5kbWFfY2ZnLmRzdF9pbmZvLmRhdGFfd2lkdGgsCi0JCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuc3JjX2luZm8uZGF0YV93aWR0aCwKLQkJCQkgICAgICAgdHJ1ZSkgPT0gTlVMTCkKLQkJCWdvdG8gZXJyOwotCi0JfSBlbHNlIHsKLQotCQlpZiAoZDQwX3Bvb2xfbGxpX2FsbG9jKGQ0MGQsIGQ0MGQtPmxsaV9sZW4sIGZhbHNlKSA8IDApIHsKLQkJCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkJIlslc10gT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQkJZ290byBlcnI7Ci0JCX0KLQotCQlpZiAoZDQwX3BoeV9idWZfdG9fbGxpKGQ0MGQtPmxsaV9waHkuc3JjLAotCQkJCSAgICAgICBzcmMsCi0JCQkJICAgICAgIHNpemUsCi0JCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuc3JjX2luZm8ucHNpemUsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgIGQ0MGMtPnNyY19kZWZfY2ZnLAotCQkJCSAgICAgICB0cnVlLAotCQkJCSAgICAgICBkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLmRhdGFfd2lkdGgsCi0JCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuZHN0X2luZm8uZGF0YV93aWR0aCwKLQkJCQkgICAgICAgZmFsc2UpID09IE5VTEwpCi0JCQlnb3RvIGVycjsKLQotCQlpZiAoZDQwX3BoeV9idWZfdG9fbGxpKGQ0MGQtPmxsaV9waHkuZHN0LAotCQkJCSAgICAgICBkc3QsCi0JCQkJICAgICAgIHNpemUsCi0JCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuZHN0X2luZm8ucHNpemUsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgIGQ0MGMtPmRzdF9kZWZfY2ZnLAotCQkJCSAgICAgICB0cnVlLAotCQkJCSAgICAgICBkNDBjLT5kbWFfY2ZnLmRzdF9pbmZvLmRhdGFfd2lkdGgsCi0JCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuc3JjX2luZm8uZGF0YV93aWR0aCwKLQkJCQkgICAgICAgZmFsc2UpID09IE5VTEwpCi0JCQlnb3RvIGVycjsKLQotCQkodm9pZCkgZG1hX21hcF9zaW5nbGUoZDQwYy0+YmFzZS0+ZGV2LCBkNDBkLT5sbGlfcGh5LnNyYywKLQkJCQkgICAgICBkNDBkLT5sbGlfcG9vbC5zaXplLCBETUFfVE9fREVWSUNFKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuICZkNDBkLT50eGQ7Ci0KLWVycjoKLQlpZiAoZDQwZCkKLQkJZDQwX2Rlc2NfZnJlZShkNDBjLCBkNDBkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIGQ0MF9wcmVwX3NnKGNoYW4sICZzcmNfc2csICZkc3Rfc2csIDEsIERNQV9OT05FLCBkbWFfZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKLWQ0MF9wcmVwX3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKLQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3Rfc2csIHVuc2lnbmVkIGludCBkc3RfbmVudHMsCi0JICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjX3NnLCB1bnNpZ25lZCBpbnQgc3JjX25lbnRzLAotCSAgICB1bnNpZ25lZCBsb25nIGRtYV9mbGFncykKK2Q0MF9wcmVwX21lbWNweV9zZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0X3NnLCB1bnNpZ25lZCBpbnQgZHN0X25lbnRzLAorCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyY19zZywgdW5zaWduZWQgaW50IHNyY19uZW50cywKKwkJICAgdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3MpCiB7CiAJaWYgKGRzdF9uZW50cyAhPSBzcmNfbmVudHMpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIHN0ZWRtYTQwX21lbWNweV9zZyhjaGFuLCBkc3Rfc2csIHNyY19zZywgZHN0X25lbnRzLCBkbWFfZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGQ0MF9wcmVwX3NsYXZlX3NnX2xvZyhzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MGQsCi0JCQkJIHN0cnVjdCBkNDBfY2hhbiAqZDQwYywKLQkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQkJIHVuc2lnbmVkIGludCBzZ19sZW4sCi0JCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3MpCi17Ci0JZG1hX2FkZHJfdCBkZXZfYWRkciA9IDA7Ci0JaW50IHRvdGFsX3NpemU7Ci0KLQlkNDBkLT5sbGlfbGVuID0gZDQwX3NnXzJfZG1hbGVuKHNnbCwgc2dfbGVuLAotCQkJCQlkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLmRhdGFfd2lkdGgsCi0JCQkJCWQ0MGMtPmRtYV9jZmcuZHN0X2luZm8uZGF0YV93aWR0aCk7Ci0JaWYgKGQ0MGQtPmxsaV9sZW4gPCAwKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkiWyVzXSBVbmFsaWduZWQgc2l6ZVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZDQwX3Bvb2xfbGxpX2FsbG9jKGQ0MGQsIGQ0MGQtPmxsaV9sZW4sIHRydWUpIDwgMCkgewotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlkNDBkLT5sbGlfY3VycmVudCA9IDA7Ci0KLQlpZiAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKLQkJaWYgKGQ0MGMtPnJ1bnRpbWVfYWRkcikKLQkJCWRldl9hZGRyID0gZDQwYy0+cnVudGltZV9hZGRyOwotCQllbHNlCi0JCQlkZXZfYWRkciA9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+ZGV2X3J4W2Q0MGMtPmRtYV9jZmcuc3JjX2Rldl90eXBlXTsKLQllbHNlIGlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKLQkJaWYgKGQ0MGMtPnJ1bnRpbWVfYWRkcikKLQkJCWRldl9hZGRyID0gZDQwYy0+cnVudGltZV9hZGRyOwotCQllbHNlCi0JCQlkZXZfYWRkciA9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+ZGV2X3R4W2Q0MGMtPmRtYV9jZmcuZHN0X2Rldl90eXBlXTsKLQotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0b3RhbF9zaXplID0gZDQwX2xvZ19zZ190b19kZXYoc2dsLCBzZ19sZW4sCi0JCQkJICAgICAgICZkNDBkLT5sbGlfbG9nLAotCQkJCSAgICAgICAmZDQwYy0+bG9nX2RlZiwKLQkJCQkgICAgICAgZDQwYy0+ZG1hX2NmZy5zcmNfaW5mby5kYXRhX3dpZHRoLAotCQkJCSAgICAgICBkNDBjLT5kbWFfY2ZnLmRzdF9pbmZvLmRhdGFfd2lkdGgsCi0JCQkJICAgICAgIGRpcmVjdGlvbiwKLQkJCQkgICAgICAgZGV2X2FkZHIpOwotCi0JaWYgKHRvdGFsX3NpemUgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGQ0MF9wcmVwX3NsYXZlX3NnX3BoeShzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MGQsCi0JCQkJIHN0cnVjdCBkNDBfY2hhbiAqZDQwYywKLQkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQkJIHVuc2lnbmVkIGludCBzZ2xfbGVuLAotCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJIHVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzKQotewotCWRtYV9hZGRyX3Qgc3JjX2Rldl9hZGRyOwotCWRtYV9hZGRyX3QgZHN0X2Rldl9hZGRyOwotCWludCByZXM7Ci0KLQlkNDBkLT5sbGlfbGVuID0gZDQwX3NnXzJfZG1hbGVuKHNnbCwgc2dsX2xlbiwKLQkJCQkJZDQwYy0+ZG1hX2NmZy5zcmNfaW5mby5kYXRhX3dpZHRoLAotCQkJCQlkNDBjLT5kbWFfY2ZnLmRzdF9pbmZvLmRhdGFfd2lkdGgpOwotCWlmIChkNDBkLT5sbGlfbGVuIDwgMCkgewotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gVW5hbGlnbmVkIHNpemVcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGQ0MF9wb29sX2xsaV9hbGxvYyhkNDBkLCBkNDBkLT5sbGlfbGVuLCBmYWxzZSkgPCAwKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkiWyVzXSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWQ0MGQtPmxsaV9jdXJyZW50ID0gMDsKLQotCWlmIChkaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7Ci0JCWRzdF9kZXZfYWRkciA9IDA7Ci0JCWlmIChkNDBjLT5ydW50aW1lX2FkZHIpCi0JCQlzcmNfZGV2X2FkZHIgPSBkNDBjLT5ydW50aW1lX2FkZHI7Ci0JCWVsc2UKLQkJCXNyY19kZXZfYWRkciA9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+ZGV2X3J4W2Q0MGMtPmRtYV9jZmcuc3JjX2Rldl90eXBlXTsKLQl9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7Ci0JCWlmIChkNDBjLT5ydW50aW1lX2FkZHIpCi0JCQlkc3RfZGV2X2FkZHIgPSBkNDBjLT5ydW50aW1lX2FkZHI7Ci0JCWVsc2UKLQkJCWRzdF9kZXZfYWRkciA9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+ZGV2X3R4W2Q0MGMtPmRtYV9jZmcuZHN0X2Rldl90eXBlXTsKLQkJc3JjX2Rldl9hZGRyID0gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXMgPSBkNDBfcGh5X3NnX3RvX2xsaShzZ2wsCi0JCQkJc2dsX2xlbiwKLQkJCQlzcmNfZGV2X2FkZHIsCi0JCQkJZDQwZC0+bGxpX3BoeS5zcmMsCi0JCQkJdmlydF90b19waHlzKGQ0MGQtPmxsaV9waHkuc3JjKSwKLQkJCQlkNDBjLT5zcmNfZGVmX2NmZywKLQkJCQlkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLmRhdGFfd2lkdGgsCi0JCQkJZDQwYy0+ZG1hX2NmZy5kc3RfaW5mby5kYXRhX3dpZHRoLAotCQkJCWQ0MGMtPmRtYV9jZmcuc3JjX2luZm8ucHNpemUpOwotCWlmIChyZXMgPCAwKQotCQlyZXR1cm4gcmVzOwotCi0JcmVzID0gZDQwX3BoeV9zZ190b19sbGkoc2dsLAotCQkJCXNnbF9sZW4sCi0JCQkJZHN0X2Rldl9hZGRyLAotCQkJCWQ0MGQtPmxsaV9waHkuZHN0LAotCQkJCXZpcnRfdG9fcGh5cyhkNDBkLT5sbGlfcGh5LmRzdCksCi0JCQkJZDQwYy0+ZHN0X2RlZl9jZmcsCi0JCQkJZDQwYy0+ZG1hX2NmZy5kc3RfaW5mby5kYXRhX3dpZHRoLAotCQkJCWQ0MGMtPmRtYV9jZmcuc3JjX2luZm8uZGF0YV93aWR0aCwKLQkJCQlkNDBjLT5kbWFfY2ZnLmRzdF9pbmZvLnBzaXplKTsKLQlpZiAocmVzIDwgMCkKLQkJcmV0dXJuIHJlczsKLQotCSh2b2lkKSBkbWFfbWFwX3NpbmdsZShkNDBjLT5iYXNlLT5kZXYsIGQ0MGQtPmxsaV9waHkuc3JjLAotCQkJICAgICAgZDQwZC0+bGxpX3Bvb2wuc2l6ZSwgRE1BX1RPX0RFVklDRSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGQ0MF9wcmVwX3NnKGNoYW4sIHNyY19zZywgZHN0X3NnLCBzcmNfbmVudHMsIERNQV9OT05FLCBkbWFfZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkNDBfcHJlcF9zbGF2ZV9zZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCkBAIC0yMTYxLDUyICsyMDc1LDQwIEBACiAJCQkJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkgdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3MpCiB7Ci0Jc3RydWN0IGQ0MF9kZXNjICpkNDBkOwotCXN0cnVjdCBkNDBfY2hhbiAqZDQwYyA9IGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZDQwX2NoYW4sCi0JCQkJCSAgICAgY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOworCWlmIChkaXJlY3Rpb24gIT0gRE1BX0ZST01fREVWSUNFICYmIGRpcmVjdGlvbiAhPSBETUFfVE9fREVWSUNFKQorCQlyZXR1cm4gTlVMTDsKIAotCWlmIChkNDBjLT5waHlfY2hhbiA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCi0JCQkiWyVzXSBDYW5ub3QgcHJlcGFyZSB1bmFsbG9jYXRlZCBjaGFubmVsXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXJldHVybiBkNDBfcHJlcF9zZyhjaGFuLCBzZ2wsIHNnbCwgc2dfbGVuLCBkaXJlY3Rpb24sIGRtYV9mbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgorZG1hNDBfcHJlcF9kbWFfY3ljbGljKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJICAgICBzaXplX3QgYnVmX2xlbiwgc2l6ZV90IHBlcmlvZF9sZW4sCisJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBwZXJpb2RzID0gYnVmX2xlbiAvIHBlcmlvZF9sZW47CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaTsKKworCXNnID0ga2NhbGxvYyhwZXJpb2RzICsgMSwgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksIEdGUF9LRVJORUwpOworCWZvciAoaSA9IDA7IGkgPCBwZXJpb2RzOyBpKyspIHsKKwkJc2dfZG1hX2FkZHJlc3MoJnNnW2ldKSA9IGRtYV9hZGRyOworCQlzZ19kbWFfbGVuKCZzZ1tpXSkgPSBwZXJpb2RfbGVuOworCQlkbWFfYWRkciArPSBwZXJpb2RfbGVuOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkNDBjLT5sb2NrLCBmbGFncyk7Ci0JZDQwZCA9IGQ0MF9kZXNjX2dldChkNDBjKTsKKwlzZ1twZXJpb2RzXS5vZmZzZXQgPSAwOworCXNnW3BlcmlvZHNdLmxlbmd0aCA9IDA7CisJc2dbcGVyaW9kc10ucGFnZV9saW5rID0KKwkJKCh1bnNpZ25lZCBsb25nKXNnIHwgMHgwMSkgJiB+MHgwMjsKIAotCWlmIChkNDBkID09IE5VTEwpCi0JCWdvdG8gZXJyOworCXR4ZCA9IGQ0MF9wcmVwX3NnKGNoYW4sIHNnLCBzZywgcGVyaW9kcywgZGlyZWN0aW9uLAorCQkJICBETUFfUFJFUF9JTlRFUlJVUFQpOwogCi0JaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQotCQllcnIgPSBkNDBfcHJlcF9zbGF2ZV9zZ19sb2coZDQwZCwgZDQwYywgc2dsLCBzZ19sZW4sCi0JCQkJCSAgICBkaXJlY3Rpb24sIGRtYV9mbGFncyk7Ci0JZWxzZQotCQllcnIgPSBkNDBfcHJlcF9zbGF2ZV9zZ19waHkoZDQwZCwgZDQwYywgc2dsLCBzZ19sZW4sCi0JCQkJCSAgICBkaXJlY3Rpb24sIGRtYV9mbGFncyk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gRmFpbGVkIHRvIHByZXBhcmUgJXMgc2xhdmUgc2cgam9iOiAlZFxuIiwKLQkJCV9fZnVuY19fLAotCQkJZDQwYy0+bG9nX251bSAhPSBENDBfUEhZX0NIQU4gPyAibG9nIiA6ICJwaHkiLCBlcnIpOwotCQlnb3RvIGVycjsKLQl9CisJa2ZyZWUoc2cpOwogCi0JZDQwZC0+dHhkLmZsYWdzID0gZG1hX2ZsYWdzOwotCi0JZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmZDQwZC0+dHhkLCBjaGFuKTsKLQotCWQ0MGQtPnR4ZC50eF9zdWJtaXQgPSBkNDBfdHhfc3VibWl0OwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAmZDQwZC0+dHhkOwotCi1lcnI6Ci0JaWYgKGQ0MGQpCi0JCWQ0MF9kZXNjX2ZyZWUoZDQwYywgZDQwZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBOVUxMOworCXJldHVybiB0eGQ7CiB9CiAKIHN0YXRpYyBlbnVtIGRtYV9zdGF0dXMgZDQwX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCkBAIC0yMjE5LDkgKzIxMjEsNyBAQAogCWludCByZXQ7CiAKIAlpZiAoZDQwYy0+cGh5X2NoYW4gPT0gTlVMTCkgewotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gQ2Fubm90IHJlYWQgc3RhdHVzIG9mIHVuYWxsb2NhdGVkIGNoYW5uZWxcbiIsCi0JCQlfX2Z1bmNfXyk7CisJCWNoYW5fZXJyKGQ0MGMsICJDYW5ub3QgcmVhZCBzdGF0dXMgb2YgdW5hbGxvY2F0ZWQgY2hhbm5lbFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjI0NSw4ICsyMTQ1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGQ0MGMtPnBoeV9jaGFuID09IE5VTEwpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCSJbJXNdIENoYW5uZWwgaXMgbm90IGFsbG9jYXRlZCFcbiIsIF9fZnVuY19fKTsKKwkJY2hhbl9lcnIoZDQwYywgIkNoYW5uZWwgaXMgbm90IGFsbG9jYXRlZCFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMzM5LDcgKzIyMzgsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKSB7CisJaWYgKGNoYW5faXNfbG9naWNhbChkNDBjKSkgewogCQlpZiAoY29uZmlnX21heGJ1cnN0ID49IDE2KQogCQkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfMTY7CiAJCWVsc2UgaWYgKGNvbmZpZ19tYXhidXJzdCA+PSA4KQpAQCAtMjM3Miw3ICsyMjcxLDcgQEAKIAljZmctPmRzdF9pbmZvLmZsb3dfY3RybCA9IFNURURNQTQwX05PX0ZMT1dfQ1RSTDsKIAogCS8qIEZpbGwgaW4gcmVnaXN0ZXIgdmFsdWVzICovCi0JaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQorCWlmIChjaGFuX2lzX2xvZ2ljYWwoZDQwYykpCiAJCWQ0MF9sb2dfY2ZnKGNmZywgJmQ0MGMtPmxvZ19kZWYubGNzcDEsICZkNDBjLT5sb2dfZGVmLmxjc3AzKTsKIAllbHNlCiAJCWQ0MF9waHlfY2ZnKGNmZywgJmQ0MGMtPnNyY19kZWZfY2ZnLApAQCAtMjM5MywyNSArMjI5MiwyMCBAQAogc3RhdGljIGludCBkNDBfY29udHJvbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGVudW0gZG1hX2N0cmxfY21kIGNtZCwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGQ0MF9jaGFuICpkNDBjID0gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBkNDBfY2hhbiwgY2hhbik7CiAKIAlpZiAoZDQwYy0+cGh5X2NoYW4gPT0gTlVMTCkgewotCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkJIlslc10gQ2hhbm5lbCBpcyBub3QgYWxsb2NhdGVkIVxuIiwgX19mdW5jX18pOworCQljaGFuX2VycihkNDBjLCAiQ2hhbm5lbCBpcyBub3QgYWxsb2NhdGVkIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBETUFfVEVSTUlOQVRFX0FMTDoKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKLQkJZDQwX3Rlcm1fYWxsKGQ0MGMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZDQwX3Rlcm1pbmF0ZV9hbGwoZDQwYyk7CiAJY2FzZSBETUFfUEFVU0U6Ci0JCXJldHVybiBkNDBfcGF1c2UoY2hhbik7CisJCXJldHVybiBkNDBfcGF1c2UoZDQwYyk7CiAJY2FzZSBETUFfUkVTVU1FOgotCQlyZXR1cm4gZDQwX3Jlc3VtZShjaGFuKTsKKwkJcmV0dXJuIGQ0MF9yZXN1bWUoZDQwYyk7CiAJY2FzZSBETUFfU0xBVkVfQ09ORklHOgogCQlkNDBfc2V0X3J1bnRpbWVfY29uZmlnKGNoYW4sCiAJCQkoc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgKikgYXJnKTsKQEAgLTI0NTYsNiArMjM1MCwzNSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZDQwX29wc19pbml0KHN0cnVjdCBkNDBfYmFzZSAqYmFzZSwgc3RydWN0IGRtYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoZG1hX2hhc19jYXAoRE1BX1NMQVZFLCBkZXYtPmNhcF9tYXNrKSkKKwkJZGV2LT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IGQ0MF9wcmVwX3NsYXZlX3NnOworCisJaWYgKGRtYV9oYXNfY2FwKERNQV9NRU1DUFksIGRldi0+Y2FwX21hc2spKSB7CisJCWRldi0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9IGQ0MF9wcmVwX21lbWNweTsKKworCQkvKgorCQkgKiBUaGlzIGNvbnRyb2xsZXIgY2FuIG9ubHkgYWNjZXNzIGFkZHJlc3MgYXQgZXZlbgorCQkgKiAzMmJpdCBib3VuZGFyaWVzLCBpLmUuIDJeMgorCQkgKi8KKwkJZGV2LT5jb3B5X2FsaWduID0gMjsKKwl9CisKKwlpZiAoZG1hX2hhc19jYXAoRE1BX1NHLCBkZXYtPmNhcF9tYXNrKSkKKwkJZGV2LT5kZXZpY2VfcHJlcF9kbWFfc2cgPSBkNDBfcHJlcF9tZW1jcHlfc2c7CisKKwlpZiAoZG1hX2hhc19jYXAoRE1BX0NZQ0xJQywgZGV2LT5jYXBfbWFzaykpCisJCWRldi0+ZGV2aWNlX3ByZXBfZG1hX2N5Y2xpYyA9IGRtYTQwX3ByZXBfZG1hX2N5Y2xpYzsKKworCWRldi0+ZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gZDQwX2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCWRldi0+ZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBkNDBfZnJlZV9jaGFuX3Jlc291cmNlczsKKwlkZXYtPmRldmljZV9pc3N1ZV9wZW5kaW5nID0gZDQwX2lzc3VlX3BlbmRpbmc7CisJZGV2LT5kZXZpY2VfdHhfc3RhdHVzID0gZDQwX3R4X3N0YXR1czsKKwlkZXYtPmRldmljZV9jb250cm9sID0gZDQwX2NvbnRyb2w7CisJZGV2LT5kZXYgPSBiYXNlLT5kZXY7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGQ0MF9kbWFlbmdpbmVfaW5pdChzdHJ1Y3QgZDQwX2Jhc2UgKmJhc2UsCiAJCQkJICAgICBpbnQgbnVtX3Jlc2VydmVkX2NoYW5zKQogewpAQCAtMjQ2NiwyMyArMjM4OSwxNCBAQAogCiAJZG1hX2NhcF96ZXJvKGJhc2UtPmRtYV9zbGF2ZS5jYXBfbWFzayk7CiAJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBiYXNlLT5kbWFfc2xhdmUuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIGJhc2UtPmRtYV9zbGF2ZS5jYXBfbWFzayk7CiAKLQliYXNlLT5kbWFfc2xhdmUuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gZDQwX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwotCWJhc2UtPmRtYV9zbGF2ZS5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9IGQ0MF9mcmVlX2NoYW5fcmVzb3VyY2VzOwotCWJhc2UtPmRtYV9zbGF2ZS5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gZDQwX3ByZXBfbWVtY3B5OwotCWJhc2UtPmRtYV9zbGF2ZS5kZXZpY2VfcHJlcF9kbWFfc2cgPSBkNDBfcHJlcF9zZzsKLQliYXNlLT5kbWFfc2xhdmUuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBkNDBfcHJlcF9zbGF2ZV9zZzsKLQliYXNlLT5kbWFfc2xhdmUuZGV2aWNlX3R4X3N0YXR1cyA9IGQ0MF90eF9zdGF0dXM7Ci0JYmFzZS0+ZG1hX3NsYXZlLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gZDQwX2lzc3VlX3BlbmRpbmc7Ci0JYmFzZS0+ZG1hX3NsYXZlLmRldmljZV9jb250cm9sID0gZDQwX2NvbnRyb2w7Ci0JYmFzZS0+ZG1hX3NsYXZlLmRldiA9IGJhc2UtPmRldjsKKwlkNDBfb3BzX2luaXQoYmFzZSwgJmJhc2UtPmRtYV9zbGF2ZSk7CiAKIAllcnIgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZiYXNlLT5kbWFfc2xhdmUpOwogCiAJaWYgKGVycikgewotCQlkZXZfZXJyKGJhc2UtPmRldiwKLQkJCSJbJXNdIEZhaWxlZCB0byByZWdpc3RlciBzbGF2ZSBjaGFubmVsc1xuIiwKLQkJCV9fZnVuY19fKTsKKwkJZDQwX2VycihiYXNlLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgc2xhdmUgY2hhbm5lbHNcbiIpOwogCQlnb3RvIGZhaWx1cmUxOwogCX0KIApAQCAtMjQ5MSwyOSArMjQwNSwxNSBAQAogCiAJZG1hX2NhcF96ZXJvKGJhc2UtPmRtYV9tZW1jcHkuY2FwX21hc2spOwogCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGJhc2UtPmRtYV9tZW1jcHkuY2FwX21hc2spOwotCWRtYV9jYXBfc2V0KERNQV9TRywgYmFzZS0+ZG1hX3NsYXZlLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0csIGJhc2UtPmRtYV9tZW1jcHkuY2FwX21hc2spOwogCi0JYmFzZS0+ZG1hX21lbWNweS5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPSBkNDBfYWxsb2NfY2hhbl9yZXNvdXJjZXM7Ci0JYmFzZS0+ZG1hX21lbWNweS5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9IGQ0MF9mcmVlX2NoYW5fcmVzb3VyY2VzOwotCWJhc2UtPmRtYV9tZW1jcHkuZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9IGQ0MF9wcmVwX21lbWNweTsKLQliYXNlLT5kbWFfc2xhdmUuZGV2aWNlX3ByZXBfZG1hX3NnID0gZDQwX3ByZXBfc2c7Ci0JYmFzZS0+ZG1hX21lbWNweS5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IGQ0MF9wcmVwX3NsYXZlX3NnOwotCWJhc2UtPmRtYV9tZW1jcHkuZGV2aWNlX3R4X3N0YXR1cyA9IGQ0MF90eF9zdGF0dXM7Ci0JYmFzZS0+ZG1hX21lbWNweS5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGQ0MF9pc3N1ZV9wZW5kaW5nOwotCWJhc2UtPmRtYV9tZW1jcHkuZGV2aWNlX2NvbnRyb2wgPSBkNDBfY29udHJvbDsKLQliYXNlLT5kbWFfbWVtY3B5LmRldiA9IGJhc2UtPmRldjsKLQkvKgotCSAqIFRoaXMgY29udHJvbGxlciBjYW4gb25seSBhY2Nlc3MgYWRkcmVzcyBhdCBldmVuCi0JICogMzJiaXQgYm91bmRhcmllcywgaS5lLiAyXjIKLQkgKi8KLQliYXNlLT5kbWFfbWVtY3B5LmNvcHlfYWxpZ24gPSAyOworCWQ0MF9vcHNfaW5pdChiYXNlLCAmYmFzZS0+ZG1hX21lbWNweSk7CiAKIAllcnIgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZiYXNlLT5kbWFfbWVtY3B5KTsKIAogCWlmIChlcnIpIHsKLQkJZGV2X2VycihiYXNlLT5kZXYsCi0JCQkiWyVzXSBGYWlsZWQgdG8gcmVnc2l0ZXIgbWVtY3B5IG9ubHkgY2hhbm5lbHNcbiIsCi0JCQlfX2Z1bmNfXyk7CisJCWQ0MF9lcnIoYmFzZS0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWdzaXRlciBtZW1jcHkgb25seSBjaGFubmVsc1xuIik7CiAJCWdvdG8gZmFpbHVyZTI7CiAJfQogCkBAIC0yNTIzLDI0ICsyNDIzLDE1IEBACiAJZG1hX2NhcF96ZXJvKGJhc2UtPmRtYV9ib3RoLmNhcF9tYXNrKTsKIAlkbWFfY2FwX3NldChETUFfU0xBVkUsIGJhc2UtPmRtYV9ib3RoLmNhcF9tYXNrKTsKIAlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBiYXNlLT5kbWFfYm90aC5jYXBfbWFzayk7Ci0JZG1hX2NhcF9zZXQoRE1BX1NHLCBiYXNlLT5kbWFfc2xhdmUuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9TRywgYmFzZS0+ZG1hX2JvdGguY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIGJhc2UtPmRtYV9zbGF2ZS5jYXBfbWFzayk7CiAKLQliYXNlLT5kbWFfYm90aC5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPSBkNDBfYWxsb2NfY2hhbl9yZXNvdXJjZXM7Ci0JYmFzZS0+ZG1hX2JvdGguZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBkNDBfZnJlZV9jaGFuX3Jlc291cmNlczsKLQliYXNlLT5kbWFfYm90aC5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gZDQwX3ByZXBfbWVtY3B5OwotCWJhc2UtPmRtYV9zbGF2ZS5kZXZpY2VfcHJlcF9kbWFfc2cgPSBkNDBfcHJlcF9zZzsKLQliYXNlLT5kbWFfYm90aC5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IGQ0MF9wcmVwX3NsYXZlX3NnOwotCWJhc2UtPmRtYV9ib3RoLmRldmljZV90eF9zdGF0dXMgPSBkNDBfdHhfc3RhdHVzOwotCWJhc2UtPmRtYV9ib3RoLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gZDQwX2lzc3VlX3BlbmRpbmc7Ci0JYmFzZS0+ZG1hX2JvdGguZGV2aWNlX2NvbnRyb2wgPSBkNDBfY29udHJvbDsKLQliYXNlLT5kbWFfYm90aC5kZXYgPSBiYXNlLT5kZXY7Ci0JYmFzZS0+ZG1hX2JvdGguY29weV9hbGlnbiA9IDI7CisJZDQwX29wc19pbml0KGJhc2UsICZiYXNlLT5kbWFfYm90aCk7CiAJZXJyID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmYmFzZS0+ZG1hX2JvdGgpOwogCiAJaWYgKGVycikgewotCQlkZXZfZXJyKGJhc2UtPmRldiwKLQkJCSJbJXNdIEZhaWxlZCB0byByZWdpc3RlciBsb2dpY2FsIGFuZCBwaHlzaWNhbCBjYXBhYmxlIGNoYW5uZWxzXG4iLAotCQkJX19mdW5jX18pOworCQlkNDBfZXJyKGJhc2UtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgbG9naWNhbCBhbmQgcGh5c2ljYWwgY2FwYWJsZSBjaGFubmVsc1xuIik7CiAJCWdvdG8gZmFpbHVyZTM7CiAJfQogCXJldHVybiAwOwpAQCAtMjYxNiw5ICsyNTA3LDEwIEBACiAJCXsgLnJlZyA9IEQ0MF9EUkVHX1BFUklQSElEMSwgLnZhbCA9IDB4MDAwMH0sCiAJCS8qCiAJCSAqIEQ0MF9EUkVHX1BFUklQSElEMiBEZXBlbmRzIG9uIEhXIHJldmlzaW9uOgotCQkgKiAgTU9QNTAwL0hSRUYgRUQgaGFzIDB4MDAwOCwKKwkJICogIERCODUwMGVkIGhhcyAweDAwMDgsCiAJCSAqICA/IGhhcyAweDAwMTgsCi0JCSAqICBIUkVGIFYxIGhhcyAweDAwMjgKKwkJICogIERCODUwMHYxIGhhcyAweDAwMjgKKwkJICogIERCODUwMHYyIGhhcyAweDAwMzgKIAkJICovCiAJCXsgLnJlZyA9IEQ0MF9EUkVHX1BFUklQSElEMywgLnZhbCA9IDB4MDAwMH0sCiAKQEAgLTI2NDIsOCArMjUzNCw3IEBACiAJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAogCWlmIChJU19FUlIoY2xrKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJbJXNdIE5vIG1hdGNoaW5nIGNsb2NrIGZvdW5kXG4iLAotCQkJX19mdW5jX18pOworCQlkNDBfZXJyKCZwZGV2LT5kZXYsICJObyBtYXRjaGluZyBjbG9jayBmb3VuZFxuIik7CiAJCWdvdG8gZmFpbHVyZTsKIAl9CiAKQEAgLTI2NjYsOSArMjU1Nyw4IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1hX2lkX3JlZ3MpOyBpKyspIHsKIAkJaWYgKGRtYV9pZF9yZWdzW2ldLnZhbCAhPQogCQkgICAgcmVhZGwodmlydGJhc2UgKyBkbWFfaWRfcmVnc1tpXS5yZWcpKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJIlslc10gVW5rbm93biBoYXJkd2FyZSEgRXhwZWN0ZWQgMHgleCBhdCAweCV4IGJ1dCBnb3QgMHgleFxuIiwKLQkJCQlfX2Z1bmNfXywKKwkJCWQ0MF9lcnIoJnBkZXYtPmRldiwKKwkJCQkiVW5rbm93biBoYXJkd2FyZSEgRXhwZWN0ZWQgMHgleCBhdCAweCV4IGJ1dCBnb3QgMHgleFxuIiwKIAkJCQlkbWFfaWRfcmVnc1tpXS52YWwsCiAJCQkJZG1hX2lkX3JlZ3NbaV0ucmVnLAogCQkJCXJlYWRsKHZpcnRiYXNlICsgZG1hX2lkX3JlZ3NbaV0ucmVnKSk7CkBAIC0yNjgxLDkgKzI1NzEsOCBAQAogCiAJaWYgKCh2YWwgJiBENDBfRFJFR19QRVJJUEhJRDJfREVTSUdORVJfTUFTSykgIT0KIAkgICAgRDQwX0hXX0RFU0lHTkVSKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJbJXNdIFVua25vd24gZGVzaWduZXIhIEdvdCAleCB3YW50ZWQgJXhcbiIsCi0JCQlfX2Z1bmNfXywgdmFsICYgRDQwX0RSRUdfUEVSSVBISUQyX0RFU0lHTkVSX01BU0ssCisJCWQ0MF9lcnIoJnBkZXYtPmRldiwgIlVua25vd24gZGVzaWduZXIhIEdvdCAleCB3YW50ZWQgJXhcbiIsCisJCQl2YWwgJiBENDBfRFJFR19QRVJJUEhJRDJfREVTSUdORVJfTUFTSywKIAkJCUQ0MF9IV19ERVNJR05FUik7CiAJCWdvdG8gZmFpbHVyZTsKIAl9CkBAIC0yNzEzLDcgKzI2MDIsNyBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkNDBfY2hhbiksIEdGUF9LRVJORUwpOwogCiAJaWYgKGJhc2UgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJbJXNdIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJZDQwX2VycigmcGRldi0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZmFpbHVyZTsKIAl9CiAKQEAgLTI4NjAsNiArMjc0OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGQ0MF9sY2xhX2FsbG9jYXRlKHN0cnVjdCBkNDBfYmFzZSAqYmFzZSkKIHsKKwlzdHJ1Y3QgZDQwX2xjbGFfcG9vbCAqcG9vbCA9ICZiYXNlLT5sY2xhX3Bvb2w7CiAJdW5zaWduZWQgbG9uZyAqcGFnZV9saXN0OwogCWludCBpLCBqOwogCWludCByZXQgPSAwOwpAQCAtMjg4NSw5ICsyNzc1LDggQEAKIAkJCQkJCWJhc2UtPmxjbGFfcG9vbC5wYWdlcyk7CiAJCWlmICghcGFnZV9saXN0W2ldKSB7CiAKLQkJCWRldl9lcnIoYmFzZS0+ZGV2LAotCQkJCSJbJXNdIEZhaWxlZCB0byBhbGxvY2F0ZSAlZCBwYWdlcy5cbiIsCi0JCQkJX19mdW5jX18sIGJhc2UtPmxjbGFfcG9vbC5wYWdlcyk7CisJCQlkNDBfZXJyKGJhc2UtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBwYWdlcy5cbiIsCisJCQkJYmFzZS0+bGNsYV9wb29sLnBhZ2VzKTsKIAogCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKIAkJCQlmcmVlX3BhZ2VzKHBhZ2VfbGlzdFtqXSwgYmFzZS0+bGNsYV9wb29sLnBhZ2VzKTsKQEAgLTI5MjUsNiArMjgxNCwxNSBAQAogCQkJCQkJIExDTEFfQUxJR05NRU5UKTsKIAl9CiAKKwlwb29sLT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGJhc2UtPmRldiwgcG9vbC0+YmFzZSwKKwkJCQkJU1pfMUsgKiBiYXNlLT5udW1fcGh5X2NoYW5zLAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoYmFzZS0+ZGV2LCBwb29sLT5kbWFfYWRkcikpIHsKKwkJcG9vbC0+ZG1hX2FkZHIgPSAwOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWx1cmU7CisJfQorCiAJd3JpdGVsKHZpcnRfdG9fcGh5cyhiYXNlLT5sY2xhX3Bvb2wuYmFzZSksCiAJICAgICAgIGJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfTENMQSk7CiBmYWlsdXJlOgpAQCAtMjk1Nyw5ICsyODU1LDcgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAibGNwYSIpOwogCWlmICghcmVzKSB7CiAJCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJbJXNdIE5vIFwibGNwYVwiIG1lbW9yeSByZXNvdXJjZVxuIiwKLQkJCV9fZnVuY19fKTsKKwkJZDQwX2VycigmcGRldi0+ZGV2LCAiTm8gXCJsY3BhXCIgbWVtb3J5IHJlc291cmNlXG4iKTsKIAkJZ290byBmYWlsdXJlOwogCX0KIAliYXNlLT5sY3BhX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CkBAIC0yOTY4LDkgKzI4NjQsOSBAQAogCWlmIChyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJICAgICAgIEQ0MF9OQU1FICIgSS9PIGxjcGEiKSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FQlVTWTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIlslc10gRmFpbGVkIHRvIHJlcXVlc3QgTENQQSByZWdpb24gMHgleC0weCV4XG4iLAotCQkJX19mdW5jX18sIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJZDQwX2VycigmcGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byByZXF1ZXN0IExDUEEgcmVnaW9uIDB4JXgtMHgleFxuIiwKKwkJCXJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKIAkJZ290byBmYWlsdXJlOwogCX0KIApAQCAtMjk4NiwxNiArMjg4MiwxMyBAQAogCWJhc2UtPmxjcGFfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIWJhc2UtPmxjcGFfYmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiWyVzXSBGYWlsZWQgdG8gaW9yZW1hcCBMQ1BBIHJlZ2lvblxuIiwKLQkJCV9fZnVuY19fKTsKKwkJZDQwX2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgTENQQSByZWdpb25cbiIpOwogCQlnb3RvIGZhaWx1cmU7CiAJfQogCiAJcmV0ID0gZDQwX2xjbGFfYWxsb2NhdGUoYmFzZSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJbJXNdIEZhaWxlZCB0byBhbGxvY2F0ZSBMQ0xBIGFyZWFcbiIsCi0JCQlfX2Z1bmNfXyk7CisJCWQ0MF9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBMQ0xBIGFyZWFcbiIpOwogCQlnb3RvIGZhaWx1cmU7CiAJfQogCkBAIC0zMDA0LDkgKzI4OTcsOCBAQAogCWJhc2UtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShiYXNlLT5pcnEsIGQ0MF9oYW5kbGVfaW50ZXJydXB0LCAwLCBENDBfTkFNRSwgYmFzZSk7Ci0KIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlslc10gTm8gSVJRIGRlZmluZWRcbiIsIF9fZnVuY19fKTsKKwkJZDQwX2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGRlZmluZWRcbiIpOwogCQlnb3RvIGZhaWx1cmU7CiAJfQogCkBAIC0zMDI1LDYgKzI5MTcsMTIgQEAKIAkJCWttZW1fY2FjaGVfZGVzdHJveShiYXNlLT5kZXNjX3NsYWIpOwogCQlpZiAoYmFzZS0+dmlydGJhc2UpCiAJCQlpb3VubWFwKGJhc2UtPnZpcnRiYXNlKTsKKworCQlpZiAoYmFzZS0+bGNsYV9wb29sLmRtYV9hZGRyKQorCQkJZG1hX3VubWFwX3NpbmdsZShiYXNlLT5kZXYsIGJhc2UtPmxjbGFfcG9vbC5kbWFfYWRkciwKKwkJCQkJIFNaXzFLICogYmFzZS0+bnVtX3BoeV9jaGFucywKKwkJCQkJIERNQV9UT19ERVZJQ0UpOworCiAJCWlmICghYmFzZS0+bGNsYV9wb29sLmJhc2VfdW5hbGlnbmVkICYmIGJhc2UtPmxjbGFfcG9vbC5iYXNlKQogCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyliYXNlLT5sY2xhX3Bvb2wuYmFzZSwKIAkJCQkgICBiYXNlLT5sY2xhX3Bvb2wucGFnZXMpOwpAQCAtMzA0OSw3ICsyOTQ3LDcgQEAKIAkJa2ZyZWUoYmFzZSk7CiAJfQogCi0JZGV2X2VycigmcGRldi0+ZGV2LCAiWyVzXSBwcm9iZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwlkNDBfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSBmYWlsZWRcbiIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMwNjAsNyArMjk1OCw3IEBACiAJfSwKIH07CiAKLWludCBfX2luaXQgc3RlZG1hNDBfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc3RlZG1hNDBfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmQ0MF9kcml2ZXIsIGQ0MF9wcm9iZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zdGVfZG1hNDBfbGwuYyBiL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MF9sbC5jCmluZGV4IDBiMDk2YTMuLmNhZDllMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MF9sbC5jCisrKyBiL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MF9sbC5jCkBAIC0xMjUsMTMgKzEyNSwxNSBAQAogc3RhdGljIGludCBkNDBfcGh5X2ZpbGxfbGxpKHN0cnVjdCBkNDBfcGh5X2xsaSAqbGxpLAogCQkJICAgIGRtYV9hZGRyX3QgZGF0YSwKIAkJCSAgICB1MzIgZGF0YV9zaXplLAotCQkJICAgIGludCBwc2l6ZSwKIAkJCSAgICBkbWFfYWRkcl90IG5leHRfbGxpLAogCQkJICAgIHUzMiByZWdfY2ZnLAotCQkJICAgIGJvb2wgdGVybV9pbnQsCi0JCQkgICAgdTMyIGRhdGFfd2lkdGgsCi0JCQkgICAgYm9vbCBpc19kZXZpY2UpCisJCQkgICAgc3RydWN0IHN0ZWRtYTQwX2hhbGZfY2hhbm5lbF9pbmZvICppbmZvLAorCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKKwlib29sIGFkZHJfaW5jID0gZmxhZ3MgJiBMTElfQUREUl9JTkM7CisJYm9vbCB0ZXJtX2ludCA9IGZsYWdzICYgTExJX1RFUk1fSU5UOworCXVuc2lnbmVkIGludCBkYXRhX3dpZHRoID0gaW5mby0+ZGF0YV93aWR0aDsKKwlpbnQgcHNpemUgPSBpbmZvLT5wc2l6ZTsKIAlpbnQgbnVtX2VsZW1zOwogCiAJaWYgKHBzaXplID09IFNURURNQTQwX1BTSVpFX1BIWV8xKQpAQCAtMTU0LDcgKzE1Niw3IEBACiAJICogRGlzdGFuY2UgdG8gbmV4dCBlbGVtZW50IHNpemVkIGVudHJ5LgogCSAqIFVzdWFsbHkgdGhlIHNpemUgb2YgdGhlIGVsZW1lbnQgdW5sZXNzIHlvdSB3YW50IGdhcHMuCiAJICovCi0JaWYgKCFpc19kZXZpY2UpCisJaWYgKGFkZHJfaW5jKQogCQlsbGktPnJlZ19lbHQgfD0gKDB4MSA8PCBkYXRhX3dpZHRoKSA8PAogCQkJRDQwX1NSRUdfRUxFTV9QSFlfRUlEWF9QT1M7CiAKQEAgLTE5OCw0NyArMjAwLDUxIEBACiAJcmV0dXJuIHNlZ19tYXg7CiB9CiAKLXN0cnVjdCBkNDBfcGh5X2xsaSAqZDQwX3BoeV9idWZfdG9fbGxpKHN0cnVjdCBkNDBfcGh5X2xsaSAqbGxpLAotCQkJCSAgICAgICBkbWFfYWRkcl90IGFkZHIsCi0JCQkJICAgICAgIHUzMiBzaXplLAotCQkJCSAgICAgICBpbnQgcHNpemUsCi0JCQkJICAgICAgIGRtYV9hZGRyX3QgbGxpX3BoeXMsCi0JCQkJICAgICAgIHUzMiByZWdfY2ZnLAotCQkJCSAgICAgICBib29sIHRlcm1faW50LAotCQkJCSAgICAgICB1MzIgZGF0YV93aWR0aDEsCi0JCQkJICAgICAgIHUzMiBkYXRhX3dpZHRoMiwKLQkJCQkgICAgICAgYm9vbCBpc19kZXZpY2UpCitzdGF0aWMgc3RydWN0IGQ0MF9waHlfbGxpICoKK2Q0MF9waHlfYnVmX3RvX2xsaShzdHJ1Y3QgZDQwX3BoeV9sbGkgKmxsaSwgZG1hX2FkZHJfdCBhZGRyLCB1MzIgc2l6ZSwKKwkJICAgZG1hX2FkZHJfdCBsbGlfcGh5cywgZG1hX2FkZHJfdCBmaXJzdF9waHlzLCB1MzIgcmVnX2NmZywKKwkJICAgc3RydWN0IHN0ZWRtYTQwX2hhbGZfY2hhbm5lbF9pbmZvICppbmZvLAorCQkgICBzdHJ1Y3Qgc3RlZG1hNDBfaGFsZl9jaGFubmVsX2luZm8gKm90aGVyaW5mbywKKwkJICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwlib29sIGxhc3RsaW5rID0gZmxhZ3MgJiBMTElfTEFTVF9MSU5LOworCWJvb2wgYWRkcl9pbmMgPSBmbGFncyAmIExMSV9BRERSX0lOQzsKKwlib29sIHRlcm1faW50ID0gZmxhZ3MgJiBMTElfVEVSTV9JTlQ7CisJYm9vbCBjeWNsaWMgPSBmbGFncyAmIExMSV9DWUNMSUM7CiAJaW50IGVycjsKIAlkbWFfYWRkcl90IG5leHQgPSBsbGlfcGh5czsKIAlpbnQgc2l6ZV9yZXN0ID0gc2l6ZTsKIAlpbnQgc2l6ZV9zZWcgPSAwOwogCisJLyoKKwkgKiBUaGlzIHBpZWNlIG1heSBiZSBzcGxpdCB1cCBiYXNlZCBvbiBkNDBfc2VnX3NpemUoKTsgd2Ugb25seSB3YW50IHRoZQorCSAqIHRlcm0gaW50IG9uIHRoZSBsYXN0IHBhcnQuCisJICovCisJaWYgKHRlcm1faW50KQorCQlmbGFncyAmPSB+TExJX1RFUk1fSU5UOworCiAJZG8gewotCQlzaXplX3NlZyA9IGQ0MF9zZWdfc2l6ZShzaXplX3Jlc3QsIGRhdGFfd2lkdGgxLCBkYXRhX3dpZHRoMik7CisJCXNpemVfc2VnID0gZDQwX3NlZ19zaXplKHNpemVfcmVzdCwgaW5mby0+ZGF0YV93aWR0aCwKKwkJCQkJb3RoZXJpbmZvLT5kYXRhX3dpZHRoKTsKIAkJc2l6ZV9yZXN0IC09IHNpemVfc2VnOwogCi0JCWlmICh0ZXJtX2ludCAmJiBzaXplX3Jlc3QgPT0gMCkKLQkJCW5leHQgPSAwOworCQlpZiAoc2l6ZV9yZXN0ID09IDAgJiYgdGVybV9pbnQpCisJCQlmbGFncyB8PSBMTElfVEVSTV9JTlQ7CisKKwkJaWYgKHNpemVfcmVzdCA9PSAwICYmIGxhc3RsaW5rKQorCQkJbmV4dCA9IGN5Y2xpYyA/IGZpcnN0X3BoeXMgOiAwOwogCQllbHNlCiAJCQluZXh0ID0gQUxJR04obmV4dCArIHNpemVvZihzdHJ1Y3QgZDQwX3BoeV9sbGkpLAogCQkJCSAgICAgRDQwX0xMSV9BTElHTik7CiAKLQkJZXJyID0gZDQwX3BoeV9maWxsX2xsaShsbGksCi0JCQkJICAgICAgIGFkZHIsCi0JCQkJICAgICAgIHNpemVfc2VnLAotCQkJCSAgICAgICBwc2l6ZSwKLQkJCQkgICAgICAgbmV4dCwKLQkJCQkgICAgICAgcmVnX2NmZywKLQkJCQkgICAgICAgIW5leHQsCi0JCQkJICAgICAgIGRhdGFfd2lkdGgxLAotCQkJCSAgICAgICBpc19kZXZpY2UpOworCQllcnIgPSBkNDBfcGh5X2ZpbGxfbGxpKGxsaSwgYWRkciwgc2l6ZV9zZWcsIG5leHQsCisJCQkJICAgICAgIHJlZ19jZmcsIGluZm8sIGZsYWdzKTsKIAogCQlpZiAoZXJyKQogCQkJZ290byBlcnI7CiAKIAkJbGxpKys7Ci0JCWlmICghaXNfZGV2aWNlKQorCQlpZiAoYWRkcl9pbmMpCiAJCQlhZGRyICs9IHNpemVfc2VnOwogCX0gd2hpbGUgKHNpemVfcmVzdCk7CiAKQEAgLTI1NCwzOSArMjYwLDM1IEBACiAJCSAgICAgIHN0cnVjdCBkNDBfcGh5X2xsaSAqbGxpX3NnLAogCQkgICAgICBkbWFfYWRkcl90IGxsaV9waHlzLAogCQkgICAgICB1MzIgcmVnX2NmZywKLQkJICAgICAgdTMyIGRhdGFfd2lkdGgxLAotCQkgICAgICB1MzIgZGF0YV93aWR0aDIsCi0JCSAgICAgIGludCBwc2l6ZSkKKwkJICAgICAgc3RydWN0IHN0ZWRtYTQwX2hhbGZfY2hhbm5lbF9pbmZvICppbmZvLAorCQkgICAgICBzdHJ1Y3Qgc3RlZG1hNDBfaGFsZl9jaGFubmVsX2luZm8gKm90aGVyaW5mbywKKwkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlpbnQgdG90YWxfc2l6ZSA9IDA7CiAJaW50IGk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJyZW50X3NnID0gc2c7Ci0JZG1hX2FkZHJfdCBkc3Q7CiAJc3RydWN0IGQ0MF9waHlfbGxpICpsbGkgPSBsbGlfc2c7CiAJZG1hX2FkZHJfdCBsX3BoeXMgPSBsbGlfcGh5czsKIAorCWlmICghdGFyZ2V0KQorCQlmbGFncyB8PSBMTElfQUREUl9JTkM7CisKIAlmb3JfZWFjaF9zZyhzZywgY3VycmVudF9zZywgc2dfbGVuLCBpKSB7CisJCWRtYV9hZGRyX3Qgc2dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKGN1cnJlbnRfc2cpOworCQl1bnNpZ25lZCBpbnQgbGVuID0gc2dfZG1hX2xlbihjdXJyZW50X3NnKTsKKwkJZG1hX2FkZHJfdCBkc3QgPSB0YXJnZXQgPzogc2dfYWRkcjsKIAogCQl0b3RhbF9zaXplICs9IHNnX2RtYV9sZW4oY3VycmVudF9zZyk7CiAKLQkJaWYgKHRhcmdldCkKLQkJCWRzdCA9IHRhcmdldDsKLQkJZWxzZQotCQkJZHN0ID0gc2dfcGh5cyhjdXJyZW50X3NnKTsKKwkJaWYgKGkgPT0gc2dfbGVuIC0gMSkKKwkJCWZsYWdzIHw9IExMSV9URVJNX0lOVCB8IExMSV9MQVNUX0xJTks7CiAKIAkJbF9waHlzID0gQUxJR04obGxpX3BoeXMgKyAobGxpIC0gbGxpX3NnKSAqCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkNDBfcGh5X2xsaSksIEQ0MF9MTElfQUxJR04pOwogCi0JCWxsaSA9IGQ0MF9waHlfYnVmX3RvX2xsaShsbGksCi0JCQkJCSBkc3QsCi0JCQkJCSBzZ19kbWFfbGVuKGN1cnJlbnRfc2cpLAotCQkJCQkgcHNpemUsCi0JCQkJCSBsX3BoeXMsCi0JCQkJCSByZWdfY2ZnLAotCQkJCQkgc2dfbGVuIC0gMSA9PSBpLAotCQkJCQkgZGF0YV93aWR0aDEsCi0JCQkJCSBkYXRhX3dpZHRoMiwKLQkJCQkJIHRhcmdldCA9PSBkc3QpOworCQlsbGkgPSBkNDBfcGh5X2J1Zl90b19sbGkobGxpLCBkc3QsIGxlbiwgbF9waHlzLCBsbGlfcGh5cywKKwkJCQkJIHJlZ19jZmcsIGluZm8sIG90aGVyaW5mbywgZmxhZ3MpOworCiAJCWlmIChsbGkgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI5NSw0NSArMjk3LDIyIEBACiB9CiAKIAotdm9pZCBkNDBfcGh5X2xsaV93cml0ZSh2b2lkIF9faW9tZW0gKnZpcnRiYXNlLAotCQkgICAgICAgdTMyIHBoeV9jaGFuX251bSwKLQkJICAgICAgIHN0cnVjdCBkNDBfcGh5X2xsaSAqbGxpX2RzdCwKLQkJICAgICAgIHN0cnVjdCBkNDBfcGh5X2xsaSAqbGxpX3NyYykKLXsKLQotCXdyaXRlbChsbGlfc3JjLT5yZWdfY2ZnLCB2aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JICAgICAgIHBoeV9jaGFuX251bSAqIEQ0MF9EUkVHX1BDREVMVEEgKyBENDBfQ0hBTl9SRUdfU1NDRkcpOwotCXdyaXRlbChsbGlfc3JjLT5yZWdfZWx0LCB2aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JICAgICAgIHBoeV9jaGFuX251bSAqIEQ0MF9EUkVHX1BDREVMVEEgKyBENDBfQ0hBTl9SRUdfU1NFTFQpOwotCXdyaXRlbChsbGlfc3JjLT5yZWdfcHRyLCB2aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JICAgICAgIHBoeV9jaGFuX251bSAqIEQ0MF9EUkVHX1BDREVMVEEgKyBENDBfQ0hBTl9SRUdfU1NQVFIpOwotCXdyaXRlbChsbGlfc3JjLT5yZWdfbG5rLCB2aXJ0YmFzZSArIEQ0MF9EUkVHX1BDQkFTRSArCi0JICAgICAgIHBoeV9jaGFuX251bSAqIEQ0MF9EUkVHX1BDREVMVEEgKyBENDBfQ0hBTl9SRUdfU1NMTkspOwotCi0Jd3JpdGVsKGxsaV9kc3QtPnJlZ19jZmcsIHZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkgICAgICAgcGh5X2NoYW5fbnVtICogRDQwX0RSRUdfUENERUxUQSArIEQ0MF9DSEFOX1JFR19TRENGRyk7Ci0Jd3JpdGVsKGxsaV9kc3QtPnJlZ19lbHQsIHZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkgICAgICAgcGh5X2NoYW5fbnVtICogRDQwX0RSRUdfUENERUxUQSArIEQ0MF9DSEFOX1JFR19TREVMVCk7Ci0Jd3JpdGVsKGxsaV9kc3QtPnJlZ19wdHIsIHZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkgICAgICAgcGh5X2NoYW5fbnVtICogRDQwX0RSRUdfUENERUxUQSArIEQ0MF9DSEFOX1JFR19TRFBUUik7Ci0Jd3JpdGVsKGxsaV9kc3QtPnJlZ19sbmssIHZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkgICAgICAgcGh5X2NoYW5fbnVtICogRDQwX0RSRUdfUENERUxUQSArIEQ0MF9DSEFOX1JFR19TRExOSyk7Ci0KLX0KLQogLyogRE1BIGxvZ2ljYWwgbGxpIG9wZXJhdGlvbnMgKi8KIAogc3RhdGljIHZvaWQgZDQwX2xvZ19sbGlfbGluayhzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9kc3QsCiAJCQkgICAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX3NyYywKLQkJCSAgICAgaW50IG5leHQpCisJCQkgICAgIGludCBuZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CisJYm9vbCBpbnRlcnJ1cHQgPSBmbGFncyAmIExMSV9URVJNX0lOVDsKIAl1MzIgc2xvcyA9IDA7CiAJdTMyIGRsb3MgPSAwOwogCiAJaWYgKG5leHQgIT0gLUVJTlZBTCkgewogCQlzbG9zID0gbmV4dCAqIDI7CiAJCWRsb3MgPSBuZXh0ICogMiArIDE7Ci0JfSBlbHNlIHsKKwl9CisKKwlpZiAoaW50ZXJydXB0KSB7CiAJCWxsaV9kc3QtPmxjc3AxMyB8PSBENDBfTUVNX0xDU1AxX1NDRkdfVElNX01BU0s7CiAJCWxsaV9kc3QtPmxjc3AxMyB8PSBENDBfTUVNX0xDU1AzX0RUQ1BfTUFTSzsKIAl9CkBAIC0zNDgsOSArMzI3LDkgQEAKIHZvaWQgZDQwX2xvZ19sbGlfbGNwYV93cml0ZShzdHJ1Y3QgZDQwX2xvZ19sbGlfZnVsbCAqbGNwYSwKIAkJCSAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX2RzdCwKIAkJCSAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX3NyYywKLQkJCSAgIGludCBuZXh0KQorCQkJICAgaW50IG5leHQsIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlkNDBfbG9nX2xsaV9saW5rKGxsaV9kc3QsIGxsaV9zcmMsIG5leHQpOworCWQ0MF9sb2dfbGxpX2xpbmsobGxpX2RzdCwgbGxpX3NyYywgbmV4dCwgZmxhZ3MpOwogCiAJd3JpdGVsKGxsaV9zcmMtPmxjc3AwMiwgJmxjcGFbMF0ubGNzcDApOwogCXdyaXRlbChsbGlfc3JjLT5sY3NwMTMsICZsY3BhWzBdLmxjc3AxKTsKQEAgLTM2MSw5ICszNDAsOSBAQAogdm9pZCBkNDBfbG9nX2xsaV9sY2xhX3dyaXRlKHN0cnVjdCBkNDBfbG9nX2xsaSAqbGNsYSwKIAkJCSAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX2RzdCwKIAkJCSAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX3NyYywKLQkJCSAgIGludCBuZXh0KQorCQkJICAgaW50IG5leHQsIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlkNDBfbG9nX2xsaV9saW5rKGxsaV9kc3QsIGxsaV9zcmMsIG5leHQpOworCWQ0MF9sb2dfbGxpX2xpbmsobGxpX2RzdCwgbGxpX3NyYywgbmV4dCwgZmxhZ3MpOwogCiAJd3JpdGVsKGxsaV9zcmMtPmxjc3AwMiwgJmxjbGFbMF0ubGNzcDAyKTsKIAl3cml0ZWwobGxpX3NyYy0+bGNzcDEzLCAmbGNsYVswXS5sY3NwMTMpOwpAQCAtMzc1LDggKzM1NCwxMCBAQAogCQkJICAgICBkbWFfYWRkcl90IGRhdGEsIHUzMiBkYXRhX3NpemUsCiAJCQkgICAgIHUzMiByZWdfY2ZnLAogCQkJICAgICB1MzIgZGF0YV93aWR0aCwKLQkJCSAgICAgYm9vbCBhZGRyX2luYykKKwkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogeworCWJvb2wgYWRkcl9pbmMgPSBmbGFncyAmIExMSV9BRERSX0lOQzsKKwogCWxsaS0+bGNzcDEzID0gcmVnX2NmZzsKIAogCS8qIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdHJhbnNmZXIgKi8KQEAgLTM5NSw2NyArMzc2LDE1IEBACiAKIH0KIAotaW50IGQ0MF9sb2dfc2dfdG9fZGV2KHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICAgIGludCBzZ19sZW4sCi0JCSAgICAgIHN0cnVjdCBkNDBfbG9nX2xsaV9iaWRpciAqbGxpLAotCQkgICAgICBzdHJ1Y3QgZDQwX2RlZl9sY3NwICpsY3NwLAotCQkgICAgICB1MzIgc3JjX2RhdGFfd2lkdGgsCi0JCSAgICAgIHUzMiBkc3RfZGF0YV93aWR0aCwKLQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkgICAgICBkbWFfYWRkcl90IGRldl9hZGRyKQotewotCWludCB0b3RhbF9zaXplID0gMDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmN1cnJlbnRfc2cgPSBzZzsKLQlpbnQgaTsKLQlzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9zcmMgPSBsbGktPnNyYzsKLQlzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9kc3QgPSBsbGktPmRzdDsKLQotCWZvcl9lYWNoX3NnKHNnLCBjdXJyZW50X3NnLCBzZ19sZW4sIGkpIHsKLQkJdG90YWxfc2l6ZSArPSBzZ19kbWFfbGVuKGN1cnJlbnRfc2cpOwotCi0JCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewotCQkJbGxpX3NyYyA9Ci0JCQkJZDQwX2xvZ19idWZfdG9fbGxpKGxsaV9zcmMsCi0JCQkJCQkgICBzZ19waHlzKGN1cnJlbnRfc2cpLAotCQkJCQkJICAgc2dfZG1hX2xlbihjdXJyZW50X3NnKSwKLQkJCQkJCSAgIGxjc3AtPmxjc3AxLCBzcmNfZGF0YV93aWR0aCwKLQkJCQkJCSAgIGRzdF9kYXRhX3dpZHRoLAotCQkJCQkJICAgdHJ1ZSk7Ci0JCQlsbGlfZHN0ID0KLQkJCQlkNDBfbG9nX2J1Zl90b19sbGkobGxpX2RzdCwKLQkJCQkJCSAgIGRldl9hZGRyLAotCQkJCQkJICAgc2dfZG1hX2xlbihjdXJyZW50X3NnKSwKLQkJCQkJCSAgIGxjc3AtPmxjc3AzLCBkc3RfZGF0YV93aWR0aCwKLQkJCQkJCSAgIHNyY19kYXRhX3dpZHRoLAotCQkJCQkJICAgZmFsc2UpOwotCQl9IGVsc2UgewotCQkJbGxpX2RzdCA9Ci0JCQkJZDQwX2xvZ19idWZfdG9fbGxpKGxsaV9kc3QsCi0JCQkJCQkgICBzZ19waHlzKGN1cnJlbnRfc2cpLAotCQkJCQkJICAgc2dfZG1hX2xlbihjdXJyZW50X3NnKSwKLQkJCQkJCSAgIGxjc3AtPmxjc3AzLCBkc3RfZGF0YV93aWR0aCwKLQkJCQkJCSAgIHNyY19kYXRhX3dpZHRoLAotCQkJCQkJICAgdHJ1ZSk7Ci0JCQlsbGlfc3JjID0KLQkJCQlkNDBfbG9nX2J1Zl90b19sbGkobGxpX3NyYywKLQkJCQkJCSAgIGRldl9hZGRyLAotCQkJCQkJICAgc2dfZG1hX2xlbihjdXJyZW50X3NnKSwKLQkJCQkJCSAgIGxjc3AtPmxjc3AxLCBzcmNfZGF0YV93aWR0aCwKLQkJCQkJCSAgIGRzdF9kYXRhX3dpZHRoLAotCQkJCQkJICAgZmFsc2UpOwotCQl9Ci0JfQotCXJldHVybiB0b3RhbF9zaXplOwotfQotCi1zdHJ1Y3QgZDQwX2xvZ19sbGkgKmQ0MF9sb2dfYnVmX3RvX2xsaShzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9zZywKK3N0YXRpYyBzdHJ1Y3QgZDQwX2xvZ19sbGkgKmQ0MF9sb2dfYnVmX3RvX2xsaShzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9zZywKIAkJCQkgICAgICAgZG1hX2FkZHJfdCBhZGRyLAogCQkJCSAgICAgICBpbnQgc2l6ZSwKIAkJCQkgICAgICAgdTMyIGxjc3AxMywgLyogc3JjIG9yIGRzdCovCiAJCQkJICAgICAgIHUzMiBkYXRhX3dpZHRoMSwKIAkJCQkgICAgICAgdTMyIGRhdGFfd2lkdGgyLAotCQkJCSAgICAgICBib29sIGFkZHJfaW5jKQorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CisJYm9vbCBhZGRyX2luYyA9IGZsYWdzICYgTExJX0FERFJfSU5DOwogCXN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpID0gbGxpX3NnOwogCWludCBzaXplX3Jlc3QgPSBzaXplOwogCWludCBzaXplX3NlZyA9IDA7CkBAIC00NjgsNyArMzk3LDcgQEAKIAkJCQkgYWRkciwKIAkJCQkgc2l6ZV9zZWcsCiAJCQkJIGxjc3AxMywgZGF0YV93aWR0aDEsCi0JCQkJIGFkZHJfaW5jKTsKKwkJCQkgZmxhZ3MpOwogCQlpZiAoYWRkcl9pbmMpCiAJCQlhZGRyICs9IHNpemVfc2VnOwogCQlsbGkrKzsKQEAgLTQ3OSw2ICs0MDgsNyBAQAogCiBpbnQgZDQwX2xvZ19zZ190b19sbGkoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKIAkJICAgICAgaW50IHNnX2xlbiwKKwkJICAgICAgZG1hX2FkZHJfdCBkZXZfYWRkciwKIAkJICAgICAgc3RydWN0IGQ0MF9sb2dfbGxpICpsbGlfc2csCiAJCSAgICAgIHUzMiBsY3NwMTMsIC8qIHNyYyBvciBkc3QqLwogCQkgICAgICB1MzIgZGF0YV93aWR0aDEsIHUzMiBkYXRhX3dpZHRoMikKQEAgLTQ4NywxNCArNDE3LDI0IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJyZW50X3NnID0gc2c7CiAJaW50IGk7CiAJc3RydWN0IGQ0MF9sb2dfbGxpICpsbGkgPSBsbGlfc2c7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlpZiAoIWRldl9hZGRyKQorCQlmbGFncyB8PSBMTElfQUREUl9JTkM7CiAKIAlmb3JfZWFjaF9zZyhzZywgY3VycmVudF9zZywgc2dfbGVuLCBpKSB7CisJCWRtYV9hZGRyX3Qgc2dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKGN1cnJlbnRfc2cpOworCQl1bnNpZ25lZCBpbnQgbGVuID0gc2dfZG1hX2xlbihjdXJyZW50X3NnKTsKKwkJZG1hX2FkZHJfdCBhZGRyID0gZGV2X2FkZHIgPzogc2dfYWRkcjsKKwogCQl0b3RhbF9zaXplICs9IHNnX2RtYV9sZW4oY3VycmVudF9zZyk7Ci0JCWxsaSA9IGQ0MF9sb2dfYnVmX3RvX2xsaShsbGksCi0JCQkJCSBzZ19waHlzKGN1cnJlbnRfc2cpLAotCQkJCQkgc2dfZG1hX2xlbihjdXJyZW50X3NnKSwKKworCQlsbGkgPSBkNDBfbG9nX2J1Zl90b19sbGkobGxpLCBhZGRyLCBsZW4sCiAJCQkJCSBsY3NwMTMsCi0JCQkJCSBkYXRhX3dpZHRoMSwgZGF0YV93aWR0aDIsIHRydWUpOworCQkJCQkgZGF0YV93aWR0aDEsCisJCQkJCSBkYXRhX3dpZHRoMiwKKwkJCQkJIGZsYWdzKTsKIAl9CisKIAlyZXR1cm4gdG90YWxfc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MF9sbC5oIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmgKaW5kZXggOWNjNDM0OS4uMTk1ZWU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmgKKysrIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmgKQEAgLTE2Myw2ICsxNjMsMjIgQEAKICNkZWZpbmUgRDQwX0RSRUdfTENFSVMxCQkweDBCNAogI2RlZmluZSBENDBfRFJFR19MQ0VJUzIJCTB4MEI4CiAjZGVmaW5lIEQ0MF9EUkVHX0xDRUlTMwkJMHgwQkMKKyNkZWZpbmUgRDQwX0RSRUdfUFNFRzEJCTB4MTEwCisjZGVmaW5lIEQ0MF9EUkVHX1BTRUcyCQkweDExNAorI2RlZmluZSBENDBfRFJFR19QU0VHMwkJMHgxMTgKKyNkZWZpbmUgRDQwX0RSRUdfUFNFRzQJCTB4MTFDCisjZGVmaW5lIEQ0MF9EUkVHX1BDRUcxCQkweDEyMAorI2RlZmluZSBENDBfRFJFR19QQ0VHMgkJMHgxMjQKKyNkZWZpbmUgRDQwX0RSRUdfUENFRzMJCTB4MTI4CisjZGVmaW5lIEQ0MF9EUkVHX1BDRUc0CQkweDEyQworI2RlZmluZSBENDBfRFJFR19SU0VHMQkJMHgxMzAKKyNkZWZpbmUgRDQwX0RSRUdfUlNFRzIJCTB4MTM0CisjZGVmaW5lIEQ0MF9EUkVHX1JTRUczCQkweDEzOAorI2RlZmluZSBENDBfRFJFR19SU0VHNAkJMHgxM0MKKyNkZWZpbmUgRDQwX0RSRUdfUkNFRzEJCTB4MTQwCisjZGVmaW5lIEQ0MF9EUkVHX1JDRUcyCQkweDE0NAorI2RlZmluZSBENDBfRFJFR19SQ0VHMwkJMHgxNDgKKyNkZWZpbmUgRDQwX0RSRUdfUkNFRzQJCTB4MTRDCiAjZGVmaW5lIEQ0MF9EUkVHX1NURlUJCTB4RkM4CiAjZGVmaW5lIEQ0MF9EUkVHX0lDRkcJCTB4RkNDCiAjZGVmaW5lIEQ0MF9EUkVHX1BFUklQSElEMAkweEZFMApAQCAtMjc3LDYgKzI5MywxMyBAQAogCiAvKiBQaHlzaWNhbCBjaGFubmVscyAqLwogCitlbnVtIGQ0MF9sbGlfZmxhZ3MgeworCUxMSV9BRERSX0lOQwk9IDEgPDwgMCwKKwlMTElfVEVSTV9JTlQJPSAxIDw8IDEsCisJTExJX0NZQ0xJQwk9IDEgPDwgMiwKKwlMTElfTEFTVF9MSU5LCT0gMSA8PCAzLAorfTsKKwogdm9pZCBkNDBfcGh5X2NmZyhzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgKmNmZywKIAkJIHUzMiAqc3JjX2NmZywKIAkJIHUzMiAqZHN0X2NmZywKQEAgLTI5Miw0NiArMzE1LDE1IEBACiAJCSAgICAgIHN0cnVjdCBkNDBfcGh5X2xsaSAqbGxpLAogCQkgICAgICBkbWFfYWRkcl90IGxsaV9waHlzLAogCQkgICAgICB1MzIgcmVnX2NmZywKLQkJICAgICAgdTMyIGRhdGFfd2lkdGgxLAotCQkgICAgICB1MzIgZGF0YV93aWR0aDIsCi0JCSAgICAgIGludCBwc2l6ZSk7Ci0KLXN0cnVjdCBkNDBfcGh5X2xsaSAqZDQwX3BoeV9idWZfdG9fbGxpKHN0cnVjdCBkNDBfcGh5X2xsaSAqbGxpLAotCQkJCSAgICAgICBkbWFfYWRkcl90IGRhdGEsCi0JCQkJICAgICAgIHUzMiBkYXRhX3NpemUsCi0JCQkJICAgICAgIGludCBwc2l6ZSwKLQkJCQkgICAgICAgZG1hX2FkZHJfdCBuZXh0X2xsaSwKLQkJCQkgICAgICAgdTMyIHJlZ19jZmcsCi0JCQkJICAgICAgIGJvb2wgdGVybV9pbnQsCi0JCQkJICAgICAgIHUzMiBkYXRhX3dpZHRoMSwKLQkJCQkgICAgICAgdTMyIGRhdGFfd2lkdGgyLAotCQkJCSAgICAgICBib29sIGlzX2RldmljZSk7Ci0KLXZvaWQgZDQwX3BoeV9sbGlfd3JpdGUodm9pZCBfX2lvbWVtICp2aXJ0YmFzZSwKLQkJICAgICAgIHUzMiBwaHlfY2hhbl9udW0sCi0JCSAgICAgICBzdHJ1Y3QgZDQwX3BoeV9sbGkgKmxsaV9kc3QsCi0JCSAgICAgICBzdHJ1Y3QgZDQwX3BoeV9sbGkgKmxsaV9zcmMpOworCQkgICAgICBzdHJ1Y3Qgc3RlZG1hNDBfaGFsZl9jaGFubmVsX2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBzdGVkbWE0MF9oYWxmX2NoYW5uZWxfaW5mbyAqb3RoZXJpbmZvLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAogLyogTG9naWNhbCBjaGFubmVscyAqLwogCi1zdHJ1Y3QgZDQwX2xvZ19sbGkgKmQ0MF9sb2dfYnVmX3RvX2xsaShzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9zZywKLQkJCQkgICAgICAgZG1hX2FkZHJfdCBhZGRyLAotCQkJCSAgICAgICBpbnQgc2l6ZSwKLQkJCQkgICAgICAgdTMyIGxjc3AxMywgLyogc3JjIG9yIGRzdCovCi0JCQkJICAgICAgIHUzMiBkYXRhX3dpZHRoMSwgdTMyIGRhdGFfd2lkdGgyLAotCQkJCSAgICAgICBib29sIGFkZHJfaW5jKTsKLQotaW50IGQ0MF9sb2dfc2dfdG9fZGV2KHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICAgIGludCBzZ19sZW4sCi0JCSAgICAgIHN0cnVjdCBkNDBfbG9nX2xsaV9iaWRpciAqbGxpLAotCQkgICAgICBzdHJ1Y3QgZDQwX2RlZl9sY3NwICpsY3NwLAotCQkgICAgICB1MzIgc3JjX2RhdGFfd2lkdGgsCi0JCSAgICAgIHUzMiBkc3RfZGF0YV93aWR0aCwKLQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkgICAgICBkbWFfYWRkcl90IGRldl9hZGRyKTsKLQogaW50IGQ0MF9sb2dfc2dfdG9fbGxpKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCiAJCSAgICAgIGludCBzZ19sZW4sCisJCSAgICAgIGRtYV9hZGRyX3QgZGV2X2FkZHIsCiAJCSAgICAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX3NnLAogCQkgICAgICB1MzIgbGNzcDEzLCAvKiBzcmMgb3IgZHN0Ki8KIAkJICAgICAgdTMyIGRhdGFfd2lkdGgxLCB1MzIgZGF0YV93aWR0aDIpOwpAQCAtMzM5LDExICszMzEsMTEgQEAKIHZvaWQgZDQwX2xvZ19sbGlfbGNwYV93cml0ZShzdHJ1Y3QgZDQwX2xvZ19sbGlfZnVsbCAqbGNwYSwKIAkJCSAgICBzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9kc3QsCiAJCQkgICAgc3RydWN0IGQ0MF9sb2dfbGxpICpsbGlfc3JjLAotCQkJICAgIGludCBuZXh0KTsKKwkJCSAgICBpbnQgbmV4dCwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAogdm9pZCBkNDBfbG9nX2xsaV9sY2xhX3dyaXRlKHN0cnVjdCBkNDBfbG9nX2xsaSAqbGNsYSwKIAkJCSAgICBzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9kc3QsCiAJCQkgICAgc3RydWN0IGQ0MF9sb2dfbGxpICpsbGlfc3JjLAotCQkJICAgIGludCBuZXh0KTsKKwkJCSAgICBpbnQgbmV4dCwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAogI2VuZGlmIC8qIFNURV9ETUE0MF9MTElfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvdGltYl9kbWEuYyBiL2RyaXZlcnMvZG1hL3RpbWJfZG1hLmMKaW5kZXggM2I4OGE0ZS4uZjY5ZjkwYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3RpbWJfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvdGltYl9kbWEuYwpAQCAtNjI5LDcgKzYyOSw3IEBACiAJCWRlc2Nfbm9kZSkKIAkJbGlzdF9tb3ZlKCZ0ZF9kZXNjLT5kZXNjX25vZGUsICZ0ZF9jaGFuLT5mcmVlX2xpc3QpOwogCi0JLyogbm93IHRlYXIgZG93biB0aGUgcnVubm5pbmcgKi8KKwkvKiBub3cgdGVhciBkb3duIHRoZSBydW5uaW5nICovCiAJX190ZF9maW5pc2godGRfY2hhbik7CiAJc3Bpbl91bmxvY2tfYmgoJnRkX2NoYW4tPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCmluZGV4IGZlNzBhMzQuLmZhYzFhMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCkBAIC03LDcgKzcsNyBAQAogbWVudWNvbmZpZyBFREFDCiAJYm9vbCAiRURBQyAoRXJyb3IgRGV0ZWN0aW9uIEFuZCBDb3JyZWN0aW9uKSByZXBvcnRpbmciCiAJZGVwZW5kcyBvbiBIQVNfSU9NRU0KLQlkZXBlbmRzIG9uIFg4NiB8fCBQUEMKKwlkZXBlbmRzIG9uIFg4NiB8fCBQUEMgfHwgVElMRQogCWhlbHAKIAkgIEVEQUMgaXMgZGVzaWduZWQgdG8gcmVwb3J0IGVycm9ycyBpbiB0aGUgY29yZSBzeXN0ZW0uCiAJICBUaGVzZSBhcmUgbG93LWxldmVsIGVycm9ycyB0aGF0IGFyZSByZXBvcnRlZCBpbiB0aGUgQ1BVIG9yCkBAIC0yODIsNCArMjgyLDEyIEBACiAJICBhIGNvbXBhbmlvbiBjaGlwIHRvIHRoZSBQb3dlclBDIDk3MCBmYW1pbHkgb2YKIAkgIHByb2Nlc3NvcnMuCiAKK2NvbmZpZyBFREFDX1RJTEUKKwl0cmlzdGF0ZSAiVGlsZXJhIE1lbW9yeSBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gRURBQ19NTV9FREFDICYmIFRJTEUKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCisJICBUaWxlcmEgbWVtb3J5IGNvbnRyb2xsZXIuCisKIGVuZGlmICMgRURBQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL01ha2VmaWxlIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCmluZGV4IGJhMjg5OGIuLjNlMjM5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKQEAgLTU0LDMgKzU0LDQgQEAKIG9iai0kKENPTkZJR19FREFDX0FNRDgxMTEpCQkrPSBhbWQ4MTExX2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfQU1EODEzMSkJCSs9IGFtZDgxMzFfZWRhYy5vCiAKK29iai0kKENPTkZJR19FREFDX1RJTEUpCQkJKz0gdGlsZV9lZGFjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNzMwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTczMDBfZWRhYy5jCmluZGV4IDA1NTIzYjUuLjc2ZDFmNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNzMwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k3MzAwX2VkYWMuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAjZGVmaW5lIEFNQlBSRVNFTlRfMAkweDY0CiAjZGVmaW5lIEFNQlBSRVNFTlRfMQkweDY2CiAKLWNvbnN0IHN0YXRpYyB1MTYgbXRyX3JlZ3NbTUFYX1NMT1RTXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgbXRyX3JlZ3NbTUFYX1NMT1RTXSA9IHsKIAkweDgwLCAweDg0LCAweDg4LCAweDhjLAogCTB4ODIsIDB4ODYsIDB4OGEsIDB4OGUKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTgyOTc1eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTgyOTc1eF9lZGFjLmMKaW5kZXggMzIxODgxOS4uOTJlNjVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k4Mjk3NXhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pODI5NzV4X2VkYWMuYwpAQCAtMTYwLDggKzE2MCw4IEBACiAJCQkJCSAqIDM6MiAgUmFuayAxIGFyY2hpdGVjdHVyZQogCQkJCQkgKiAxOjAgIFJhbmsgMCBhcmNoaXRlY3R1cmUKIAkJCQkJICoKLQkJCQkJICogMDAgPT4geDE2IGRldmljZXM7IGkuZSA0IGJhbmtzCi0JCQkJCSAqIDAxID0+IHg4ICBkZXZpY2VzOyBpLmUgOCBiYW5rcworCQkJCQkgKiAwMCA9PiA0IGJhbmtzCisJCQkJCSAqIDAxID0+IDggYmFua3MKIAkJCQkJICovCiAjZGVmaW5lIEk4Mjk3NVhfQzBCTktBUkMJMHgxMGUKICNkZWZpbmUgSTgyOTc1WF9DMUJOS0FSQwkweDE4ZQpAQCAtMjc4LDYgKzI3OCw3IEBACiAJCXN0cnVjdCBpODI5NzV4X2Vycm9yX2luZm8gKmluZm8sIGludCBoYW5kbGVfZXJyb3JzKQogewogCWludCByb3csIG11bHRpX2NoYW4sIGNoYW47CisJdW5zaWduZWQgbG9uZyBvZmZzdCwgcGFnZTsKIAogCW11bHRpX2NoYW4gPSBtY2ktPmNzcm93c1swXS5ucl9jaGFubmVscyAtIDE7CiAKQEAgLTI5MiwxNyArMjkzLDE5IEBACiAJCWluZm8tPmVycnN0cyA9IGluZm8tPmVycnN0czI7CiAJfQogCi0JY2hhbiA9IGluZm8tPmVhcCAmIDE7Ci0JaW5mby0+ZWFwID4+PSAxOwotCWlmIChpbmZvLT54ZWFwICkKLQkJaW5mby0+ZWFwIHw9IDB4ODAwMDAwMDA7Ci0JaW5mby0+ZWFwID4+PSBQQUdFX1NISUZUOwotCXJvdyA9IGVkYWNfbWNfZmluZF9jc3Jvd19ieV9wYWdlKG1jaSwgaW5mby0+ZWFwKTsKKwlwYWdlID0gKHVuc2lnbmVkIGxvbmcpIGluZm8tPmVhcDsKKwlpZiAoaW5mby0+eGVhcCAmIDEpCisJCXBhZ2UgfD0gMHgxMDAwMDAwMDB1bDsKKwljaGFuID0gcGFnZSAmIDE7CisJcGFnZSA+Pj0gMTsKKwlvZmZzdCA9IHBhZ2UgJiAoKDEgPDwgUEFHRV9TSElGVCkgLSAxKTsKKwlwYWdlID4+PSBQQUdFX1NISUZUOworCXJvdyA9IGVkYWNfbWNfZmluZF9jc3Jvd19ieV9wYWdlKG1jaSwgcGFnZSk7CiAKIAlpZiAoaW5mby0+ZXJyc3RzICYgMHgwMDAyKQotCQllZGFjX21jX2hhbmRsZV91ZShtY2ksIGluZm8tPmVhcCwgMCwgcm93LCAiaTgyOTc1eCBVRSIpOworCQllZGFjX21jX2hhbmRsZV91ZShtY2ksIHBhZ2UsIG9mZnN0ICwgcm93LCAiaTgyOTc1eCBVRSIpOwogCWVsc2UKLQkJZWRhY19tY19oYW5kbGVfY2UobWNpLCBpbmZvLT5lYXAsIDAsIGluZm8tPmRlcnJzeW4sIHJvdywKKwkJZWRhY19tY19oYW5kbGVfY2UobWNpLCBwYWdlLCBvZmZzdCwgaW5mby0+ZGVycnN5biwgcm93LAogCQkJCW11bHRpX2NoYW4gPyBjaGFuIDogMCwKIAkJCQkiaTgyOTc1eCBDRSIpOwogCkBAIC0zNDQsMTEgKzM0Nyw3IEBACiBzdGF0aWMgZW51bSBkZXZfdHlwZSBpODI5NzV4X2RyYW1fdHlwZSh2b2lkIF9faW9tZW0gKm1jaF93aW5kb3csIGludCByYW5rKQogewogCS8qCi0JICogQVNVUyBQNVcgREggZWl0aGVyIGRvZXMgbm90IHByb2dyYW0gdGhpcyByZWdpc3RlciBvciBwcm9ncmFtcwotCSAqIGl0IHdyb25nIQotCSAqIEVDQyBpcyBwb3NzaWJsZSBvbiBpOTI5NzV4IE9OTFkgd2l0aCBERVZfWDggd2hpY2ggc2hvdWxkIG1lYW4gJ3ZhbCcKLQkgKiBmb3IgZWFjaCByYW5rIHNob3VsZCBiZSAwMWIgLSB0aGUgTFNCIG9mIHRoZSB3b3JkIHNob3VsZCBiZSAweDU1OwotCSAqIGJ1dCBpdCByZWFkcyAwIQorCSAqIEVDQyBpcyBwb3NzaWJsZSBvbiBpOTI5NzV4IE9OTFkgd2l0aCBERVZfWDgKIAkgKi8KIAlyZXR1cm4gREVWX1g4OwogfQpAQCAtMzU2LDExICszNTUsMTUgQEAKIHN0YXRpYyB2b2lkIGk4Mjk3NXhfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCBfX2lvbWVtICptY2hfd2luZG93KQogeworCXN0YXRpYyBjb25zdCBjaGFyICpsYWJlbHNbNF0gPSB7CisJCQkJCQkJIkRJTU0gQTEiLCAiRElNTSBBMiIsCisJCQkJCQkJIkRJTU0gQjEiLCAiRElNTSBCMiIKKwkJCQkJCX07CiAJc3RydWN0IGNzcm93X2luZm8gKmNzcm93OwogCXVuc2lnbmVkIGxvbmcgbGFzdF9jdW11bF9zaXplOwogCXU4IHZhbHVlOwogCXUzMiBjdW11bF9zaXplOwotCWludCBpbmRleDsKKwlpbnQgaW5kZXgsIGNoYW47CiAKIAlsYXN0X2N1bXVsX3NpemUgPSAwOwogCkBAIC0zNjksMTEgKzM3Miw3IEBACiAJICogVGhlIGRyYW0gcm93IGJvdW5kYXJ5IChEUkIpIHJlZyB2YWx1ZXMgYXJlIGJvdW5kYXJ5IGFkZHJlc3MKIAkgKiBmb3IgZWFjaCBEUkFNIHJvdyB3aXRoIGEgZ3JhbnVsYXJpdHkgb2YgMzIgb3IgNjRNQiAoc2luZ2xlL2R1YWwKIAkgKiBjaGFubmVsIG9wZXJhdGlvbikuICBEUkIgcmVncyBhcmUgY3VtdWxhdGl2ZTsgdGhlcmVmb3JlIERSQjcgd2lsbAotCSAqIGNvbnRhaW4gdGhlIHRvdGFsIG1lbW9yeSBjb250YWluZWQgaW4gYWxsIGVpZ2h0IHJvd3MuCi0JICoKLQkgKiBGSVhNRToKLQkgKiAgRURBQyBjdXJyZW50bHkgd29ya3MgZm9yIER1YWwtY2hhbm5lbCBJbnRlcmxlYXZlZCBjb25maWd1cmF0aW9uLgotCSAqICBPdGhlciBjb25maWd1cmF0aW9ucywgd2hpY2ggdGhlIGNoaXAgc3VwcG9ydHMsIG5lZWQgZml4aW5nL3Rlc3RpbmcuCisJICogY29udGFpbiB0aGUgdG90YWwgbWVtb3J5IGNvbnRhaW5lZCBpbiBhbGwgcm93cy4KIAkgKgogCSAqLwogCkBAIC0zODQsOCArMzgzLDI2IEBACiAJCQkJCSgoaW5kZXggPj0gNCkgPyAweDgwIDogMCkpOwogCQljdW11bF9zaXplID0gdmFsdWU7CiAJCWN1bXVsX3NpemUgPDw9IChJODI5NzVYX0RSQl9TSElGVCAtIFBBR0VfU0hJRlQpOworCQkvKgorCQkgKiBBZGp1c3QgY3VtdWxfc2l6ZSB3LnIudCBudW1iZXIgb2YgY2hhbm5lbHMKKwkJICoKKwkJICovCisJCWlmIChjc3Jvdy0+bnJfY2hhbm5lbHMgPiAxKQorCQkJY3VtdWxfc2l6ZSA8PD0gMTsKIAkJZGVidWdmMygiJXMoKTogKCVkKSBjdW11bF9zaXplIDB4JXhcbiIsIF9fZnVuY19fLCBpbmRleCwKIAkJCWN1bXVsX3NpemUpOworCisJCS8qCisJCSAqIEluaXRpYWxpc2UgZHJhbSBsYWJlbHMKKwkJICogaW5kZXggdmFsdWVzOgorCQkgKiAgIFswLTddIGZvciBzaW5nbGUtY2hhbm5lbDsgaS5lLiBjc3Jvdy0+bnJfY2hhbm5lbHMgPSAxCisJCSAqICAgWzAtM10gZm9yIGR1YWwtY2hhbm5lbDsgaS5lLiBjc3Jvdy0+bnJfY2hhbm5lbHMgPSAyCisJCSAqLworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgY3Nyb3ctPm5yX2NoYW5uZWxzOyBjaGFuKyspCisJCQlzdHJuY3B5KGNzcm93LT5jaGFubmVsc1tjaGFuXS5sYWJlbCwKKwkJCQkJbGFiZWxzWyhpbmRleCA+PiAxKSArIChjaGFuICogMildLAorCQkJCQlFREFDX01DX0xBQkVMX0xFTik7CisKIAkJaWYgKGN1bXVsX3NpemUgPT0gbGFzdF9jdW11bF9zaXplKQogCQkJY29udGludWU7CS8qIG5vdCBwb3B1bGF0ZWQgKi8KIApAQCAtMzkzLDggKzQxMCw4IEBACiAJCWNzcm93LT5sYXN0X3BhZ2UgPSBjdW11bF9zaXplIC0gMTsKIAkJY3Nyb3ctPm5yX3BhZ2VzID0gY3VtdWxfc2l6ZSAtIGxhc3RfY3VtdWxfc2l6ZTsKIAkJbGFzdF9jdW11bF9zaXplID0gY3VtdWxfc2l6ZTsKLQkJY3Nyb3ctPmdyYWluID0gMSA8PCA3OwkvKiBJODI5NzVYX0VBUCBoYXMgMTI4QiByZXNvbHV0aW9uICovCi0JCWNzcm93LT5tdHlwZSA9IE1FTV9ERFI7IC8qIGk4Mjk3NXggc3VwcG9ydHMgb25seSBERFIyICovCisJCWNzcm93LT5ncmFpbiA9IDEgPDwgNjsJLyogSTgyOTc1WF9FQVAgaGFzIDY0QiByZXNvbHV0aW9uICovCisJCWNzcm93LT5tdHlwZSA9IE1FTV9ERFIyOyAvKiBJODI5NzV4IHN1cHBvcnRzIG9ubHkgRERSMiAqLwogCQljc3Jvdy0+ZHR5cGUgPSBpODI5NzV4X2RyYW1fdHlwZShtY2hfd2luZG93LCBpbmRleCk7CiAJCWNzcm93LT5lZGFjX21vZGUgPSBFREFDX1NFQ0RFRDsgLyogb25seSBzdXBwb3J0ZWQgKi8KIAl9CkBAIC01MTUsMTggKzUzMiwyMCBAQAogCiAJZGVidWdmMygiJXMoKTogaW5pdCBtY2lcbiIsIF9fZnVuY19fKTsKIAltY2ktPmRldiA9ICZwZGV2LT5kZXY7Ci0JbWNpLT5tdHlwZV9jYXAgPSBNRU1fRkxBR19ERFI7CisJbWNpLT5tdHlwZV9jYXAgPSBNRU1fRkxBR19ERFIyOwogCW1jaS0+ZWRhY19jdGxfY2FwID0gRURBQ19GTEFHX05PTkUgfCBFREFDX0ZMQUdfU0VDREVEOwogCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZMQUdfTk9ORSB8IEVEQUNfRkxBR19TRUNERUQ7CiAJbWNpLT5tb2RfbmFtZSA9IEVEQUNfTU9EX1NUUjsKIAltY2ktPm1vZF92ZXIgPSBJODI5NzVYX1JFVklTSU9OOwogCW1jaS0+Y3RsX25hbWUgPSBpODI5NzV4X2RldnNbZGV2X2lkeF0uY3RsX25hbWU7CisJbWNpLT5kZXZfbmFtZSA9IHBjaV9uYW1lKHBkZXYpOwogCW1jaS0+ZWRhY19jaGVjayA9IGk4Mjk3NXhfY2hlY2s7CiAJbWNpLT5jdGxfcGFnZV90b19waHlzID0gTlVMTDsKIAlkZWJ1Z2YzKCIlcygpOiBpbml0IHB2dFxuIiwgX19mdW5jX18pOwogCXB2dCA9IChzdHJ1Y3QgaTgyOTc1eF9wdnQgKikgbWNpLT5wdnRfaW5mbzsKIAlwdnQtPm1jaF93aW5kb3cgPSBtY2hfd2luZG93OwogCWk4Mjk3NXhfaW5pdF9jc3Jvd3MobWNpLCBwZGV2LCBtY2hfd2luZG93KTsKKwltY2ktPnNjcnViX21vZGUgPSBTQ1JVQl9IV19TUkM7CiAJaTgyOTc1eF9nZXRfZXJyb3JfaW5mbyhtY2ksICZkaXNjYXJkKTsgIC8qIGNsZWFyIGNvdW50ZXJzICovCiAKIAkvKiBmaW5hbGl6ZSB0aGlzIGluc3RhbmNlIG9mIG1lbW9yeSBjb250cm9sbGVyIHdpdGggZWRhYyBjb3JlICovCkBAIC02NjQsNyArNjgzLDcgQEAKIG1vZHVsZV9leGl0KGk4Mjk3NXhfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkFydmluZCBSLiA8YXJ2aW5kQGFjYXJsYWIuY29tPiIpOworTU9EVUxFX0FVVEhPUigiQXJ2aW5kIFIuIDxhcnZpbm81NUBnbWFpbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1DIHN1cHBvcnQgZm9yIEludGVsIDgyOTc1IG1lbW9yeSBodWIgY29udHJvbGxlcnMiKTsKIAogbW9kdWxlX3BhcmFtKGVkYWNfb3Bfc3RhdGUsIGludCwgMDQ0NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvdGlsZV9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvdGlsZV9lZGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ1Y2YwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZWRhYy90aWxlX2VkYWMuYwpAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDExIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqIFRpbGVyYS1zcGVjaWZpYyBFREFDIGRyaXZlci4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGRlcml2ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGRyaXZlcjoKKyAqCisgKiBDZWxsIE1JQyBkcml2ZXIgZm9yIEVDQyBjb3VudGluZworICoKKyAqIENvcHlyaWdodCAyMDA3IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgorICogICAgICAgICAgICAgICAgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGh2L2Rydl9tc2hpbV9pbnRmLmg+CisKKyNpbmNsdWRlICJlZGFjX2NvcmUuaCIKKworI2RlZmluZSBEUlZfTkFNRQkidGlsZS1lZGFjIgorCisvKiBOdW1iZXIgb2YgY3Nfcm93cyBuZWVkZWQgcGVyIG1lbW9yeSBjb250cm9sbGVyIG9uIFRJTEVQcm8uICovCisjZGVmaW5lIFRJTEVfRURBQ19OUl9DU1JPV1MJMQorCisvKiBOdW1iZXIgb2YgY2hhbm5lbHMgcGVyIG1lbW9yeSBjb250cm9sbGVyIG9uIFRJTEVQcm8uICovCisjZGVmaW5lIFRJTEVfRURBQ19OUl9DSEFOUwkxCisKKy8qIEdyYW51bGFyaXR5IG9mIHJlcG9ydGVkIGVycm9yIGluIGJ5dGVzIG9uIFRJTEVQcm8uICovCisjZGVmaW5lIFRJTEVfRURBQ19FUlJPUl9HUkFJTgk4CisKKy8qIFRJTEUgcHJvY2Vzc29yIGhhcyBtdWx0aXBsZSBpbmRlcGVuZGVudCBtZW1vcnkgY29udHJvbGxlcnMuICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptc2hpbV9wZGV2W1RJTEVfTUFYX01TSElNU107CisKK3N0cnVjdCB0aWxlX2VkYWNfcHJpdiB7CisJaW50CQlodl9kZXZoZGw7CS8qIEh5cGVydmlzb3IgZGV2aWNlIGhhbmRsZS4gKi8KKwlpbnQJCW5vZGU7CQkvKiBNZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZSAjLiAqLworCXVuc2lnbmVkIGludAljZV9jb3VudDsJLyoKKwkJCQkJICogQ29ycmVjdGFibGUtZXJyb3IgY291bnRlcgorCQkJCQkgKiBrZXB0IGJ5IHRoZSBkcml2ZXIuCisJCQkJCSAqLworfTsKKworc3RhdGljIHZvaWQgdGlsZV9lZGFjX2NoZWNrKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKK3sKKwlzdHJ1Y3QgdGlsZV9lZGFjX3ByaXYJKnByaXYgPSBtY2ktPnB2dF9pbmZvOworCXN0cnVjdCBtc2hpbV9tZW1fZXJyb3IJbWVtX2Vycm9yOworCisJaWYgKGh2X2Rldl9wcmVhZChwcml2LT5odl9kZXZoZGwsIDAsIChIVl9WaXJ0QWRkcikmbWVtX2Vycm9yLAorCQlzaXplb2Yoc3RydWN0IG1zaGltX21lbV9lcnJvciksIE1TSElNX01FTV9FUlJPUl9PRkYpICE9CisJCXNpemVvZihzdHJ1Y3QgbXNoaW1fbWVtX2Vycm9yKSkgeworCQlwcl9lcnIoRFJWX05BTUUgIjogTVNISU1fTUVNX0VSUk9SX09GRiBwcmVhZCBmYWlsdXJlLlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgY3VycmVudCBlcnJvciBjb3VudCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2F2ZWQgb25lLiAqLworCWlmIChtZW1fZXJyb3Iuc2JlX2NvdW50ICE9IHByaXYtPmNlX2NvdW50KSB7CisJCWRldl9kYmcobWNpLT5kZXYsICJFQ0MgQ0UgZXJyIG9uIG5vZGUgJWRcbiIsIHByaXYtPm5vZGUpOworCQlwcml2LT5jZV9jb3VudCA9IG1lbV9lcnJvci5zYmVfY291bnQ7CisJCWVkYWNfbWNfaGFuZGxlX2NlKG1jaSwgMCwgMCwgMCwgMCwgMCwgbWNpLT5jdGxfbmFtZSk7CisJfQorfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgJ2Nzcm93cycgdGFibGUgd2l0aGluIHRoZSBtY2kgY29udHJvbCBzdHJ1Y3R1cmUgd2l0aCB0aGUKKyAqIGFkZHJlc3Npbmcgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0aWxlX2VkYWNfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQoreworCXN0cnVjdCBjc3Jvd19pbmZvCSpjc3JvdyA9ICZtY2ktPmNzcm93c1swXTsKKwlzdHJ1Y3QgdGlsZV9lZGFjX3ByaXYJKnByaXYgPSBtY2ktPnB2dF9pbmZvOworCXN0cnVjdCBtc2hpbV9tZW1faW5mbwltZW1faW5mbzsKKworCWlmIChodl9kZXZfcHJlYWQocHJpdi0+aHZfZGV2aGRsLCAwLCAoSFZfVmlydEFkZHIpJm1lbV9pbmZvLAorCQlzaXplb2Yoc3RydWN0IG1zaGltX21lbV9pbmZvKSwgTVNISU1fTUVNX0lORk9fT0ZGKSAhPQorCQlzaXplb2Yoc3RydWN0IG1zaGltX21lbV9pbmZvKSkgeworCQlwcl9lcnIoRFJWX05BTUUgIjogTVNISU1fTUVNX0lORk9fT0ZGIHByZWFkIGZhaWx1cmUuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChtZW1faW5mby5tZW1fZWNjKQorCQljc3Jvdy0+ZWRhY19tb2RlID0gRURBQ19TRUNERUQ7CisJZWxzZQorCQljc3Jvdy0+ZWRhY19tb2RlID0gRURBQ19OT05FOworCXN3aXRjaCAobWVtX2luZm8ubWVtX3R5cGUpIHsKKwljYXNlIEREUjI6CisJCWNzcm93LT5tdHlwZSA9IE1FTV9ERFIyOworCQlicmVhazsKKworCWNhc2UgRERSMzoKKwkJY3Nyb3ctPm10eXBlID0gTUVNX0REUjM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCWNzcm93LT5maXJzdF9wYWdlID0gMDsKKwljc3Jvdy0+bnJfcGFnZXMgPSBtZW1faW5mby5tZW1fc2l6ZSA+PiBQQUdFX1NISUZUOworCWNzcm93LT5sYXN0X3BhZ2UgPSBjc3Jvdy0+Zmlyc3RfcGFnZSArIGNzcm93LT5ucl9wYWdlcyAtIDE7CisJY3Nyb3ctPmdyYWluID0gVElMRV9FREFDX0VSUk9SX0dSQUlOOworCWNzcm93LT5kdHlwZSA9IERFVl9VTktOT1dOOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbGVfZWRhY19tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNoYXIJCQlodl9maWxlWzMyXTsKKwlpbnQJCQlodl9kZXZoZGw7CisJc3RydWN0IG1lbV9jdGxfaW5mbwkqbWNpOworCXN0cnVjdCB0aWxlX2VkYWNfcHJpdgkqcHJpdjsKKwlpbnQJCQlyYzsKKworCXNwcmludGYoaHZfZmlsZSwgIm1zaGltLyVkIiwgcGRldi0+aWQpOworCWh2X2RldmhkbCA9IGh2X2Rldl9vcGVuKChIVl9WaXJ0QWRkcilodl9maWxlLCAwKTsKKwlpZiAoaHZfZGV2aGRsIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBBIFRJTEUgTUMgaGFzIGEgc2luZ2xlIGNoYW5uZWwgYW5kIG9uZSBjaGlwLXNlbGVjdCByb3cuICovCisJbWNpID0gZWRhY19tY19hbGxvYyhzaXplb2Yoc3RydWN0IHRpbGVfZWRhY19wcml2KSwKKwkJVElMRV9FREFDX05SX0NTUk9XUywgVElMRV9FREFDX05SX0NIQU5TLCBwZGV2LT5pZCk7CisJaWYgKG1jaSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwcml2ID0gbWNpLT5wdnRfaW5mbzsKKwlwcml2LT5ub2RlID0gcGRldi0+aWQ7CisJcHJpdi0+aHZfZGV2aGRsID0gaHZfZGV2aGRsOworCisJbWNpLT5kZXYgPSAmcGRldi0+ZGV2OworCW1jaS0+bXR5cGVfY2FwID0gTUVNX0ZMQUdfRERSMjsKKwltY2ktPmVkYWNfY3RsX2NhcCA9IEVEQUNfRkxBR19TRUNERUQ7CisKKwltY2ktPm1vZF9uYW1lID0gRFJWX05BTUU7CisJbWNpLT5jdGxfbmFtZSA9ICJUSUxFUHJvX01lbW9yeV9Db250cm9sbGVyIjsKKwltY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CisJbWNpLT5lZGFjX2NoZWNrID0gdGlsZV9lZGFjX2NoZWNrOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBNQyBjb250cm9sIHN0cnVjdHVyZSAnY3Nyb3dzJyB0YWJsZQorCSAqIHdpdGggdGhlIG1hcHBpbmcgYW5kIGNvbnRyb2wgaW5mb3JtYXRpb24uCisJICovCisJaWYgKHRpbGVfZWRhY19pbml0X2Nzcm93cyhtY2kpKSB7CisJCS8qIE5vIGNzcm93cyBmb3VuZC4gKi8KKwkJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19OT05FOworCX0gZWxzZSB7CisJCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZMQUdfU0VDREVEOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jaSk7CisKKwkvKiBSZWdpc3RlciB3aXRoIEVEQUMgY29yZSAqLworCXJjID0gZWRhY19tY19hZGRfbWMobWNpKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggRURBQyBjb3JlXG4iKTsKKwkJZWRhY19tY19mcmVlKG1jaSk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGlsZV9lZGFjX21jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZWRhY19tY19kZWxfbWMoJnBkZXYtPmRldik7CisJaWYgKG1jaSkKKwkJZWRhY19tY19mcmVlKG1jaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRpbGVfZWRhY19tY19kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJWX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbGVfZWRhY19tY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRpbGVfZWRhY19tY19yZW1vdmUpLAorfTsKKworLyoKKyAqIERyaXZlciBpbml0IHJvdXRpbmUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRpbGVfZWRhY19pbml0KHZvaWQpCit7CisJY2hhcglodl9maWxlWzMyXTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCBpLCBlcnIsIG51bSA9IDA7CisKKwkvKiBPbmx5IHN1cHBvcnQgUE9MTCBtb2RlLiAqLworCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfUE9MTDsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGlsZV9lZGFjX21jX2RyaXZlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBUSUxFX01BWF9NU0hJTVM7IGkrKykgeworCQkvKgorCQkgKiBOb3QgYWxsIG1lbW9yeSBjb250cm9sbGVycyBhcmUgY29uZmlndXJlZCBzdWNoIGFzIGluIHRoZQorCQkgKiBjYXNlIG9mIGEgc2ltdWxhdG9yLiBTbyB3ZSByZWdpc3RlciBvbmx5IHRob3NlIG1zaGltcworCQkgKiB0aGF0IGFyZSBjb25maWd1cmVkIGJ5IHRoZSBoeXBlcnZpc29yLgorCQkgKi8KKwkJc3ByaW50Zihodl9maWxlLCAibXNoaW0vJWQiLCBpKTsKKwkJaWYgKGh2X2Rldl9vcGVuKChIVl9WaXJ0QWRkcilodl9maWxlLCAwKSA8IDApCisJCQljb250aW51ZTsKKworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZfTkFNRSwgaSwgTlVMTCwgMCk7CisJCWlmIChJU19FUlIocGRldikpCisJCQljb250aW51ZTsKKwkJbXNoaW1fcGRldltpXSA9IHBkZXY7CisJCW51bSsrOworCX0KKworCWlmIChudW0gPT0gMCkgeworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGlsZV9lZGFjX21jX2RyaXZlcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERyaXZlciBjbGVhbnVwIHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCB0aWxlX2VkYWNfZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFRJTEVfTUFYX01TSElNUzsgaSsrKSB7CisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBtc2hpbV9wZGV2W2ldOworCQlpZiAoIXBkZXYpCisJCQljb250aW51ZTsKKworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJfQorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aWxlX2VkYWNfbWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodGlsZV9lZGFjX2luaXQpOworbW9kdWxlX2V4aXQodGlsZV9lZGFjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnIGIvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCmluZGV4IDBjNTY5ODkuLjJiZTZmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKQEAgLTc1LDcgKzc1LDggQEAKIAkgIFRoZSBmb2xsb3dpbmcgY2FyZHMgYXJlIGtub3duIHRvIGJlIGJhc2VkIG9uIFBDSUx5bnggb3IgUENJTHlueC0yOgogCSAgSU9JIElPSS0xMzk0VFQgKFBDSSBjYXJkKSwgVW5pYnJhaW4gRmlyZWJvYXJkIDQwMCBQQ0kgTHlueC0yCiAJICAoUENJIGNhcmQpLCBOZXdlciBUZWNobm9sb2d5IEZpcmVXaXJlIDIgR28gKENhcmRCdXMgY2FyZCksCi0JICBBcHBsZSBQb3dlciBNYWMgRzMgYmx1ZSAmIHdoaXRlIChvbmJvYXJkIGNvbnRyb2xsZXIpLgorCSAgQXBwbGUgUG93ZXIgTWFjIEczIGJsdWUgJiB3aGl0ZSBhbmQgRzQgd2l0aCBQQ0kgZ3JhcGhpY3MKKwkgIChvbmJvYXJkIGNvbnRyb2xsZXIpLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlOiAgVGhlIG1vZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgbm9zeS4gIFNvdXJjZSBjb2RlIG9mIGEgdXNlcnNwYWNlIGludGVyZmFjZSB0byBub3N5LCBjYWxsZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jCmluZGV4IDI0ZmYzNTUuLjNjNDRmYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMKQEAgLTc1LDYgKzc1LDEzIEBACiAjZGVmaW5lIEJJQl9JUk1DCQkoKDEpIDw8IDMxKQogI2RlZmluZSBOT0RFX0NBUEFCSUxJVElFUwkweDBjMDA4M2MwIC8qIHBlciBJRUVFIDEzOTQgY2xhdXNlIDguMy4yLjYuNS4yICovCiAKKy8qCisgKiBJRUVFLTEzOTQgc3BlY2lmaWVzIGEgZGVmYXVsdCBTUExJVF9USU1FT1VUIHZhbHVlIG9mIDgwMCBjeWNsZXMgKDEwMCBtcyksCisgKiBidXQgd2UgaGF2ZSB0byBtYWtlIGl0IGxvbmdlciBiZWNhdXNlIHRoZXJlIGFyZSBtYW55IGRldmljZXMgd2hvc2UgZmlybXdhcmUKKyAqIGlzIGp1c3QgdG9vIHNsb3cgZm9yIHRoYXQuCisgKi8KKyNkZWZpbmUgREVGQVVMVF9TUExJVF9USU1FT1VUCSgyICogODAwMCkKKwogI2RlZmluZSBDQU5PTl9PVUkJCTB4MDAwMDg1CiAKIHN0YXRpYyB2b2lkIGdlbmVyYXRlX2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIF9fYmUzMiAqY29uZmlnX3JvbSkKQEAgLTIzMyw3ICsyNDAsNyBAQAogCiAJLyogRGVsYXkgZm9yIDJzIGFmdGVyIGxhc3QgcmVzZXQgcGVyIElFRUUgMTM5NCBjbGF1c2UgOC4yLjEuICovCiAJaWYgKGNhcmQtPnJlc2V0X2ppZmZpZXMgIT0gMCAmJgotCSAgICB0aW1lX2lzX2FmdGVyX2ppZmZpZXMoY2FyZC0+cmVzZXRfamlmZmllcyArIDIgKiBIWikpIHsKKwkgICAgdGltZV9iZWZvcmU2NChnZXRfamlmZmllc182NCgpLCBjYXJkLT5yZXNldF9qaWZmaWVzICsgMiAqIEhaKSkgewogCQlpZiAoIXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2FyZC0+YnJfd29yaywgMiAqIEhaKSkKIAkJCWZ3X2NhcmRfcHV0KGNhcmQpOwogCQlyZXR1cm47CkBAIC0zMTYsNyArMzIzLDggQEAKIAlpcm1faWQgICA9IGNhcmQtPmlybV9ub2RlLT5ub2RlX2lkOwogCWxvY2FsX2lkID0gY2FyZC0+bG9jYWxfbm9kZS0+bm9kZV9pZDsKIAotCWdyYWNlID0gdGltZV9hZnRlcihqaWZmaWVzLCBjYXJkLT5yZXNldF9qaWZmaWVzICsgRElWX1JPVU5EX1VQKEhaLCA4KSk7CisJZ3JhY2UgPSB0aW1lX2FmdGVyNjQoZ2V0X2ppZmZpZXNfNjQoKSwKKwkJCSAgICAgY2FyZC0+cmVzZXRfamlmZmllcyArIERJVl9ST1VORF9VUChIWiwgOCkpOwogCiAJaWYgKChpc19uZXh0X2dlbmVyYXRpb24oZ2VuZXJhdGlvbiwgY2FyZC0+Ym1fZ2VuZXJhdGlvbikgJiYKIAkgICAgICFjYXJkLT5ibV9hYmRpY2F0ZSkgfHwKQEAgLTUxMSwxMCArNTE5LDExIEBACiAJY2FyZC0+ZGV2aWNlID0gZGV2aWNlOwogCWNhcmQtPmN1cnJlbnRfdGxhYmVsID0gMDsKIAljYXJkLT50bGFiZWxfbWFzayA9IDA7Ci0JY2FyZC0+c3BsaXRfdGltZW91dF9oaSA9IDA7Ci0JY2FyZC0+c3BsaXRfdGltZW91dF9sbyA9IDgwMCA8PCAxOTsKLQljYXJkLT5zcGxpdF90aW1lb3V0X2N5Y2xlcyA9IDgwMDsKLQljYXJkLT5zcGxpdF90aW1lb3V0X2ppZmZpZXMgPSBESVZfUk9VTkRfVVAoSFosIDEwKTsKKwljYXJkLT5zcGxpdF90aW1lb3V0X2hpID0gREVGQVVMVF9TUExJVF9USU1FT1VUIC8gODAwMDsKKwljYXJkLT5zcGxpdF90aW1lb3V0X2xvID0gKERFRkFVTFRfU1BMSVRfVElNRU9VVCAlIDgwMDApIDw8IDE5OworCWNhcmQtPnNwbGl0X3RpbWVvdXRfY3ljbGVzID0gREVGQVVMVF9TUExJVF9USU1FT1VUOworCWNhcmQtPnNwbGl0X3RpbWVvdXRfamlmZmllcyA9CisJCQlESVZfUk9VTkRfVVAoREVGQVVMVF9TUExJVF9USU1FT1VUICogSFosIDgwMDApOwogCWNhcmQtPmNvbG9yID0gMDsKIAljYXJkLT5icm9hZGNhc3RfY2hhbm5lbCA9IEJST0FEQ0FTVF9DSEFOTkVMX0lOSVRJQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCmluZGV4IDQ4YWU3MTIuLjYyYWMxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwpAQCAtNjQsNiArNjQsNyBAQAogCXN0cnVjdCBpZHIgcmVzb3VyY2VfaWRyOwogCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHR4X2ZsdXNoX3dhaXQ7CiAJdTY0IGJ1c19yZXNldF9jbG9zdXJlOwogCiAJc3RydWN0IGZ3X2lzb19jb250ZXh0ICppc29fY29udGV4dDsKQEAgLTI1MSw2ICsyNTIsNyBAQAogCWlkcl9pbml0KCZjbGllbnQtPnJlc291cmNlX2lkcik7CiAJSU5JVF9MSVNUX0hFQUQoJmNsaWVudC0+ZXZlbnRfbGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2xpZW50LT53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjbGllbnQtPnR4X2ZsdXNoX3dhaXQpOwogCUlOSVRfTElTVF9IRUFEKCZjbGllbnQtPnBoeV9yZWNlaXZlcl9saW5rKTsKIAlrcmVmX2luaXQoJmNsaWVudC0+a3JlZik7CiAKQEAgLTUyMCwxMCArNTIyLDYgQEAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfdHJhbnNhY3Rpb24oc3RydWN0IGNsaWVudCAqY2xpZW50LAogCQkJCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQogewotCXN0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwKLQkJCXN0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSwgcmVzb3VyY2UpOwotCi0JZndfY2FuY2VsX3RyYW5zYWN0aW9uKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCAmci0+dHJhbnNhY3Rpb24pOwogfQogCiBzdGF0aWMgdm9pZCBjb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLApAQCAtNTQwLDIyICs1MzgsOSBAQAogCQltZW1jcHkocnNwLT5kYXRhLCBwYXlsb2FkLCByc3AtPmxlbmd0aCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiAxLiBJZiBjYWxsZWQgd2hpbGUgaW4gc2h1dGRvd24sIHRoZSBpZHIgdHJlZSBtdXN0IGJlIGxlZnQgdW50b3VjaGVkLgotCSAqICAgIFRoZSBpZHIgaGFuZGxlIHdpbGwgYmUgcmVtb3ZlZCBhbmQgdGhlIGNsaWVudCByZWZlcmVuY2Ugd2lsbCBiZQotCSAqICAgIGRyb3BwZWQgbGF0ZXIuCi0JICogMi4gSWYgdGhlIGNhbGwgY2hhaW4gd2FzIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlIC0+Ci0JICogICAgcmVsZWFzZV90cmFuc2FjdGlvbiAtPiBjb21wbGV0ZV90cmFuc2FjdGlvbiAoaW5zdGVhZCBvZiBhIG5vcm1hbAotCSAqICAgIGNvbmNsdXNpb24gb2YgdGhlIHRyYW5zYWN0aW9uKSwgaS5lLiBpZiB0aGlzIHJlc291cmNlIHdhcyBhbHJlYWR5Ci0JICogICAgdW5yZWdpc3RlcmVkIGZyb20gdGhlIGlkciwgdGhlIGNsaWVudCByZWZlcmVuY2Ugd2lsbCBiZSBkcm9wcGVkCi0JICogICAgYnkgcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UgYW5kIHdlIG11c3Qgbm90IGRyb3AgaXQgaGVyZS4KLQkgKi8KLQlpZiAoIWNsaWVudC0+aW5fc2h1dGRvd24gJiYKLQkgICAgaWRyX2ZpbmQoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBlLT5yLnJlc291cmNlLmhhbmRsZSkpIHsKLQkJaWRyX3JlbW92ZSgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIGUtPnIucmVzb3VyY2UuaGFuZGxlKTsKLQkJLyogRHJvcCB0aGUgaWRyJ3MgcmVmZXJlbmNlICovCi0JCWNsaWVudF9wdXQoY2xpZW50KTsKLQl9CisJaWRyX3JlbW92ZSgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIGUtPnIucmVzb3VyY2UuaGFuZGxlKTsKKwlpZiAoY2xpZW50LT5pbl9zaHV0ZG93bikKKwkJd2FrZV91cCgmY2xpZW50LT50eF9mbHVzaF93YWl0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKIAogCXJzcC0+dHlwZSA9IEZXX0NERVZfRVZFTlRfUkVTUE9OU0U7CkBAIC01NzUsNyArNTYwLDcgQEAKIAkJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsIHJzcCwgc2l6ZW9mKCpyc3ApICsgcnNwLT5sZW5ndGgsCiAJCQkgICAgTlVMTCwgMCk7CiAKLQkvKiBEcm9wIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjaydzIHJlZmVyZW5jZSAqLworCS8qIERyb3AgdGhlIGlkcidzIHJlZmVyZW5jZSAqLwogCWNsaWVudF9wdXQoY2xpZW50KTsKIH0KIApAQCAtNjE0LDkgKzU5OSw2IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZmFpbGVkOwogCi0JLyogR2V0IGEgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgKi8KLQljbGllbnRfZ2V0KGNsaWVudCk7Ci0KIAlmd19zZW5kX3JlcXVlc3QoY2xpZW50LT5kZXZpY2UtPmNhcmQsICZlLT5yLnRyYW5zYWN0aW9uLAogCQkJcmVxdWVzdC0+dGNvZGUsIGRlc3RpbmF0aW9uX2lkLCByZXF1ZXN0LT5nZW5lcmF0aW9uLAogCQkJc3BlZWQsIHJlcXVlc3QtPm9mZnNldCwgZS0+cmVzcG9uc2UuZGF0YSwKQEAgLTEyMjMsNyArMTIwNSw4IEBACiAJdG9kbyA9IHItPnRvZG87CiAJLyogQWxsb3cgMTAwMG1zIGdyYWNlIHBlcmlvZCBmb3Igb3RoZXIgcmVhbGxvY2F0aW9ucy4gKi8KIAlpZiAodG9kbyA9PSBJU09fUkVTX0FMTE9DICYmCi0JICAgIHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhjbGllbnQtPmRldmljZS0+Y2FyZC0+cmVzZXRfamlmZmllcyArIEhaKSkgeworCSAgICB0aW1lX2JlZm9yZTY0KGdldF9qaWZmaWVzXzY0KCksCisJCQkgIGNsaWVudC0+ZGV2aWNlLT5jYXJkLT5yZXNldF9qaWZmaWVzICsgSFopKSB7CiAJCXNjaGVkdWxlX2lzb19yZXNvdXJjZShyLCBESVZfUk9VTkRfVVAoSFosIDMpKTsKIAkJc2tpcCA9IHRydWU7CiAJfSBlbHNlIHsKQEAgLTE2NzgsNiArMTY2MSwyNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgaXNfb3V0Ym91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlID0gcDsKKworCXJldHVybiByZXNvdXJjZS0+cmVsZWFzZSA9PSByZWxlYXNlX3RyYW5zYWN0aW9uOworfQorCitzdGF0aWMgaW50IGhhc19vdXRib3VuZF90cmFuc2FjdGlvbnMoc3RydWN0IGNsaWVudCAqY2xpZW50KQoreworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCXJldCA9IGlkcl9mb3JfZWFjaCgmY2xpZW50LT5yZXNvdXJjZV9pZHIsCisJCQkgICBpc19vdXRib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBzaHV0ZG93bl9yZXNvdXJjZShpbnQgaWQsIHZvaWQgKnAsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UgPSBwOwpAQCAtMTcxMyw2ICsxNzE1LDggQEAKIAljbGllbnQtPmluX3NodXRkb3duID0gdHJ1ZTsKIAlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7CiAKKwl3YWl0X2V2ZW50KGNsaWVudC0+dHhfZmx1c2hfd2FpdCwgIWhhc19vdXRib3VuZF90cmFuc2FjdGlvbnMoY2xpZW50KSk7CisKIAlpZHJfZm9yX2VhY2goJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBzaHV0ZG93bl9yZXNvdXJjZSwgY2xpZW50KTsKIAlpZHJfcmVtb3ZlX2FsbCgmY2xpZW50LT5yZXNvdXJjZV9pZHIpOwogCWlkcl9kZXN0cm95KCZjbGllbnQtPnJlc291cmNlX2lkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMKaW5kZXggNjExM2I4OS4uOWEyNjI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYwpAQCAtNzQ3LDcgKzc0Nyw4IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZndfZGV2aWNlLCB3b3JrLndvcmspOwogCWludCBtaW5vciA9IE1JTk9SKGRldmljZS0+ZGV2aWNlLmRldnQpOwogCi0JaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhkZXZpY2UtPmNhcmQtPnJlc2V0X2ppZmZpZXMgKyBTSFVURE9XTl9ERUxBWSkKKwlpZiAodGltZV9iZWZvcmU2NChnZXRfamlmZmllc182NCgpLAorCQkJICBkZXZpY2UtPmNhcmQtPnJlc2V0X2ppZmZpZXMgKyBTSFVURE9XTl9ERUxBWSkKIAkgICAgJiYgIWxpc3RfZW1wdHkoJmRldmljZS0+Y2FyZC0+bGluaykpIHsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFNIVVRET1dOX0RFTEFZKTsKIAkJcmV0dXJuOwpAQCAtOTU0LDggKzk1NSw5IEBACiAJCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcysrOwogCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFJFVFJZX0RFTEFZKTsKIAkJfSBlbHNlIHsKLQkJCWZ3X25vdGlmeSgiZ2l2aW5nIHVwIG9uIGNvbmZpZyByb20gZm9yIG5vZGUgaWQgJXhcbiIsCi0JCQkJICBkZXZpY2UtPm5vZGVfaWQpOworCQkJaWYgKGRldmljZS0+bm9kZS0+bGlua19vbikKKwkJCQlmd19ub3RpZnkoImdpdmluZyB1cCBvbiBjb25maWcgcm9tIGZvciBub2RlIGlkICV4XG4iLAorCQkJCQkgIGRldmljZS0+bm9kZV9pZCk7CiAJCQlpZiAoZGV2aWNlLT5ub2RlID09IGRldmljZS0+Y2FyZC0+cm9vdF9ub2RlKQogCQkJCWZ3X3NjaGVkdWxlX2JtX3dvcmsoZGV2aWNlLT5jYXJkLCAwKTsKIAkJCWZ3X2RldmljZV9yZWxlYXNlKCZkZXZpY2UtPmRldmljZSk7CkBAIC0xMTY4LDkgKzExNzAsMTIgQEAKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEZXX05PREVfQ1JFQVRFRDoKLQljYXNlIEZXX05PREVfTElOS19PTjoKLQkJaWYgKCFub2RlLT5saW5rX29uKQotCQkJYnJlYWs7CisJCS8qCisJCSAqIEF0dGVtcHQgdG8gc2NhbiB0aGUgbm9kZSwgcmVnYXJkbGVzcyB3aGV0aGVyIGl0cyBzZWxmIElEIGhhcworCQkgKiB0aGUgTCAobGluayBhY3RpdmUpIGZsYWcgc2V0IG9yIG5vdC4gIFNvbWUgYnJva2VuIGRldmljZXMKKwkJICogc2VuZCBMPTAgYnV0IGhhdmUgYW4gdXAtYW5kLXJ1bm5pbmcgbGluazsgb3RoZXJzIHNlbmQgTD0xCisJCSAqIHdpdGhvdXQgYWN0dWFsbHkgaGF2aW5nIGEgbGluay4KKwkJICovCiAgY3JlYXRlOgogCQlkZXZpY2UgPSBremFsbG9jKHNpemVvZigqZGV2aWNlKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChkZXZpY2UgPT0gTlVMTCkKQEAgLTEyMTMsNiArMTIxOCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBGV19OT0RFX0lOSVRJQVRFRF9SRVNFVDoKKwljYXNlIEZXX05PREVfTElOS19PTjoKIAkJZGV2aWNlID0gbm9kZS0+ZGF0YTsKIAkJaWYgKGRldmljZSA9PSBOVUxMKQogCQkJZ290byBjcmVhdGU7CkBAIC0xMjMwLDEwICsxMjM2LDEwIEBACiAJCWJyZWFrOwogCiAJY2FzZSBGV19OT0RFX1VQREFURUQ6Ci0JCWlmICghbm9kZS0+bGlua19vbiB8fCBub2RlLT5kYXRhID09IE5VTEwpCisJCWRldmljZSA9IG5vZGUtPmRhdGE7CisJCWlmIChkZXZpY2UgPT0gTlVMTCkKIAkJCWJyZWFrOwogCi0JCWRldmljZSA9IG5vZGUtPmRhdGE7CiAJCWRldmljZS0+bm9kZV9pZCA9IG5vZGUtPm5vZGVfaWQ7CiAJCXNtcF93bWIoKTsgIC8qIHVwZGF0ZSBub2RlX2lkIGJlZm9yZSBnZW5lcmF0aW9uICovCiAJCWRldmljZS0+Z2VuZXJhdGlvbiA9IGNhcmQtPmdlbmVyYXRpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMKaW5kZXggYzAwM2ZhNC4uNDgxMDU2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYwpAQCAtMjM1LDQ1ICsyMzUsNDUgQEAKIHN0YXRpYyBpbnQgbWFuYWdlX2NoYW5uZWwoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBpcm1faWQsIGludCBnZW5lcmF0aW9uLAogCQl1MzIgY2hhbm5lbHNfbWFzaywgdTY0IG9mZnNldCwgYm9vbCBhbGxvY2F0ZSwgX19iZTMyIGRhdGFbMl0pCiB7Ci0JX19iZTMyIGMsIGFsbCwgb2xkOwotCWludCBpLCByZXQgPSAtRUlPLCByZXRyeSA9IDU7CisJX19iZTMyIGJpdCwgYWxsLCBvbGQ7CisJaW50IGNoYW5uZWwsIHJldCA9IC1FSU8sIHJldHJ5ID0gNTsKIAogCW9sZCA9IGFsbCA9IGFsbG9jYXRlID8gY3B1X3RvX2JlMzIofjApIDogMDsKIAotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCWlmICghKGNoYW5uZWxzX21hc2sgJiAxIDw8IGkpKQorCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCAzMjsgY2hhbm5lbCsrKSB7CisJCWlmICghKGNoYW5uZWxzX21hc2sgJiAxIDw8IGNoYW5uZWwpKQogCQkJY29udGludWU7CiAKIAkJcmV0ID0gLUVCVVNZOwogCi0JCWMgPSBjcHVfdG9fYmUzMigxIDw8ICgzMSAtIGkpKTsKLQkJaWYgKChvbGQgJiBjKSAhPSAoYWxsICYgYykpCisJCWJpdCA9IGNwdV90b19iZTMyKDEgPDwgKDMxIC0gY2hhbm5lbCkpOworCQlpZiAoKG9sZCAmIGJpdCkgIT0gKGFsbCAmIGJpdCkpCiAJCQljb250aW51ZTsKIAogCQlkYXRhWzBdID0gb2xkOwotCQlkYXRhWzFdID0gb2xkIF4gYzsKKwkJZGF0YVsxXSA9IG9sZCBeIGJpdDsKIAkJc3dpdGNoIChmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCiAJCQkJCSAgIGlybV9pZCwgZ2VuZXJhdGlvbiwgU0NPREVfMTAwLAogCQkJCQkgICBvZmZzZXQsIGRhdGEsIDgpKSB7CiAJCWNhc2UgUkNPREVfR0VORVJBVElPTjoKIAkJCS8qIEEgZ2VuZXJhdGlvbiBjaGFuZ2UgZnJlZXMgYWxsIGNoYW5uZWxzLiAqLwotCQkJcmV0dXJuIGFsbG9jYXRlID8gLUVBR0FJTiA6IGk7CisJCQlyZXR1cm4gYWxsb2NhdGUgPyAtRUFHQUlOIDogY2hhbm5lbDsKIAogCQljYXNlIFJDT0RFX0NPTVBMRVRFOgogCQkJaWYgKGRhdGFbMF0gPT0gb2xkKQotCQkJCXJldHVybiBpOworCQkJCXJldHVybiBjaGFubmVsOwogCiAJCQlvbGQgPSBkYXRhWzBdOwogCiAJCQkvKiBJcyB0aGUgSVJNIDEzOTRhLTIwMDAgY29tcGxpYW50PyAqLwotCQkJaWYgKChkYXRhWzBdICYgYykgPT0gKGRhdGFbMV0gJiBjKSkKKwkJCWlmICgoZGF0YVswXSAmIGJpdCkgPT0gKGRhdGFbMV0gJiBiaXQpKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiAxMzk0LTE5OTUgSVJNLCBmYWxsIHRocm91Z2ggdG8gcmV0cnkuICovCiAJCWRlZmF1bHQ6CiAJCQlpZiAocmV0cnkpIHsKIAkJCQlyZXRyeS0tOwotCQkJCWktLTsKKwkJCQljaGFubmVsLS07CiAJCQl9IGVsc2UgewogCQkJCXJldCA9IC1FSU87CiAJCQl9CkBAIC0zNjIsMyArMzYyLDQgQEAKIAkJKmNoYW5uZWwgPSByZXQ7CiAJfQogfQorRVhQT1JUX1NZTUJPTChmd19pc29fcmVzb3VyY2VfbWFuYWdlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10b3BvbG9neS5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRvcG9sb2d5LmMKaW5kZXggMDliZTFhNi4uMTkzZWQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRvcG9sb2d5LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRvcG9sb2d5LmMKQEAgLTU0NSw3ICs1NDUsNyBAQAogCSAqLwogCXNtcF93bWIoKTsKIAljYXJkLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKLQljYXJkLT5yZXNldF9qaWZmaWVzID0gamlmZmllczsKKwljYXJkLT5yZXNldF9qaWZmaWVzID0gZ2V0X2ppZmZpZXNfNjQoKTsKIAljYXJkLT5ibV9ub2RlX2lkICA9IDB4ZmZmZjsKIAljYXJkLT5ibV9hYmRpY2F0ZSA9IGJtX2FiZGljYXRlOwogCWZ3X3NjaGVkdWxlX2JtX3dvcmsoY2FyZCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUuaCBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCmluZGV4IGY4ZGZjZjEuLjI1ZTcyOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCkBAIC0xNDcsOSArMTQ3LDYgQEAKIC8qIC1pc28gKi8KIAogaW50IGZ3X2lzb19idWZmZXJfbWFwKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLXZvaWQgZndfaXNvX3Jlc291cmNlX21hbmFnZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGdlbmVyYXRpb24sCi0JCQkgICAgdTY0IGNoYW5uZWxzX21hc2ssIGludCAqY2hhbm5lbCwgaW50ICpiYW5kd2lkdGgsCi0JCQkgICAgYm9vbCBhbGxvY2F0ZSwgX19iZTMyIGJ1ZmZlclsyXSk7CiAKIAogLyogLXRvcG9sb2d5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IGJkM2M2MWIuLmY5MDNkN2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwpAQCAtMjA4LDkgKzIwOCwxMSBAQAogCXN0cnVjdCBjb250ZXh0IGF0X3JlcXVlc3RfY3R4OwogCXN0cnVjdCBjb250ZXh0IGF0X3Jlc3BvbnNlX2N0eDsKIAorCXUzMiBpdF9jb250ZXh0X3N1cHBvcnQ7CiAJdTMyIGl0X2NvbnRleHRfbWFzazsgICAgIC8qIHVub2NjdXBpZWQgSVQgY29udGV4dHMgKi8KIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKml0X2NvbnRleHRfbGlzdDsKIAl1NjQgaXJfY29udGV4dF9jaGFubmVsczsgLyogdW5vY2N1cGllZCBjaGFubmVscyAqLworCXUzMiBpcl9jb250ZXh0X3N1cHBvcnQ7CiAJdTMyIGlyX2NvbnRleHRfbWFzazsgICAgIC8qIHVub2NjdXBpZWQgSVIgY29udGV4dHMgKi8KIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmlyX2NvbnRleHRfbGlzdDsKIAl1NjQgbWNfY2hhbm5lbHM7IC8qIGNoYW5uZWxzIGluIHVzZSBieSB0aGUgbXVsdGljaGFubmVsIElSIGNvbnRleHQgKi8KQEAgLTMzOCw3ICszNDAsNyBAQAogCSAgICAhKGV2dCAmIE9IQ0kxMzk0X2J1c1Jlc2V0KSkKIAkJcmV0dXJuOwogCi0JZndfbm90aWZ5KCJJUlEgJTA4eCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXNcbiIsIGV2dCwKKwlmd19ub3RpZnkoIklSUSAlMDh4JXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBldnQsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X3NlbGZJRENvbXBsZXRlCT8gIiBzZWxmSUQiCQk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9SUVBrdAkJPyAiIEFSX3JlcSIJCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X1JTUGt0CQk/ICIgQVJfcmVzcCIJCTogIiIsCkBAIC0zNTEsNiArMzUzLDcgQEAKIAkgICAgZXZ0ICYgT0hDSTEzOTRfY3ljbGU2NFNlY29uZHMJPyAiIGN5Y2xlNjRTZWNvbmRzIgk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9jeWNsZUluY29uc2lzdGVudAk/ICIgY3ljbGVJbmNvbnNpc3RlbnQiCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X3JlZ0FjY2Vzc0ZhaWwJPyAiIHJlZ0FjY2Vzc0ZhaWwiCTogIiIsCisJICAgIGV2dCAmIE9IQ0kxMzk0X3VucmVjb3ZlcmFibGVFcnJvcgk/ICIgdW5yZWNvdmVyYWJsZUVycm9yIgk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9idXNSZXNldAkJPyAiIGJ1c1Jlc2V0IgkJOiAiIiwKIAkgICAgZXZ0ICYgfihPSENJMTM5NF9zZWxmSURDb21wbGV0ZSB8IE9IQ0kxMzk0X1JRUGt0IHwKIAkJICAgIE9IQ0kxMzk0X1JTUGt0IHwgT0hDSTEzOTRfcmVxVHhDb21wbGV0ZSB8CkBAIC0xMzI2LDIxICsxMzI5LDggQEAKIAkJCQkgICAgIERFU0NSSVBUT1JfSVJRX0FMV0FZUyB8CiAJCQkJICAgICBERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMpOwogCi0JLyoKLQkgKiBJZiB0aGUgY29udHJvbGxlciBhbmQgcGFja2V0IGdlbmVyYXRpb25zIGRvbid0IG1hdGNoLCB3ZSBuZWVkIHRvCi0JICogYmFpbCBvdXQgYW5kIHRyeSBhZ2Fpbi4gIElmIEludEV2ZW50LmJ1c1Jlc2V0IGlzIHNldCwgdGhlIEFUIGNvbnRleHQKLQkgKiBpcyBoYWx0ZWQsIHNvIGFwcGVuZGluZyB0byB0aGUgY29udGV4dCBhbmQgdHJ5aW5nIHRvIHJ1biBpdCBpcwotCSAqIGZ1dGlsZS4gIE1vc3QgY29udHJvbGxlcnMgZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBqdXN0IGZsdXNoIHRoZSBBVAotCSAqIHF1ZXVlIChwZXIgc2VjdGlvbiA3LjIuMy4yIG9mIHRoZSBPSENJIDEuMSBzcGVjaWZpY2F0aW9uKSwgYnV0Ci0JICogc29tZSBjb250cm9sbGVycyAobGlrZSBhIEpNaWNyb24gSk1CMzgxIFBDSS1lKSBtaXNiZWhhdmUgYW5kIHdpbmQKLQkgKiB1cCBzdGFsbGluZyBvdXQuICBTbyB3ZSBqdXN0IGJhaWwgb3V0IGluIHNvZnR3YXJlIGFuZCB0cnkgYWdhaW4KLQkgKiBsYXRlciwgYW5kIGV2ZXJ5b25lIGlzIGhhcHB5LgotCSAqIEZJWE1FOiBUZXN0IG9mIEludEV2ZW50LmJ1c1Jlc2V0IG1heSBubyBsb25nZXIgYmUgbmVjZXNzYXJ5IHNpbmNlIHdlCi0JICogICAgICAgIGZsdXNoIEFUIHF1ZXVlcyBpbiBidXNfcmVzZXRfdGFza2xldC4KLQkgKiBGSVhNRTogRG9jdW1lbnQgaG93IHRoZSBsb2NraW5nIHdvcmtzLgotCSAqLwotCWlmIChvaGNpLT5nZW5lcmF0aW9uICE9IHBhY2tldC0+Z2VuZXJhdGlvbiB8fAotCSAgICByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9JbnRFdmVudFNldCkgJiBPSENJMTM5NF9idXNSZXNldCkgeworCS8qIEZJWE1FOiBEb2N1bWVudCBob3cgdGhlIGxvY2tpbmcgd29ya3MuICovCisJaWYgKG9oY2ktPmdlbmVyYXRpb24gIT0gcGFja2V0LT5nZW5lcmF0aW9uKSB7CiAJCWlmIChwYWNrZXQtPnBheWxvYWRfbWFwcGVkKQogCQkJZG1hX3VubWFwX3NpbmdsZShvaGNpLT5jYXJkLmRldmljZSwgcGF5bG9hZF9idXMsCiAJCQkJCSBwYWNrZXQtPnBheWxvYWRfbGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKQEAgLTE1OTAsNiArMTU4MCw0NyBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIGRldGVjdF9kZWFkX2NvbnRleHQoc3RydWN0IGZ3X29oY2kgKm9oY2ksCisJCQkJY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHJlZ3MpCit7CisJdTMyIGN0bDsKKworCWN0bCA9IHJlZ19yZWFkKG9oY2ksIENPTlRST0xfU0VUKHJlZ3MpKTsKKwlpZiAoY3RsICYgQ09OVEVYVF9ERUFEKSB7CisjaWZkZWYgQ09ORklHX0ZJUkVXSVJFX09IQ0lfREVCVUcKKwkJZndfZXJyb3IoIkRNQSBjb250ZXh0ICVzIGhhcyBzdG9wcGVkLCBlcnJvciBjb2RlOiAlc1xuIiwKKwkJCSBuYW1lLCBldnRzW2N0bCAmIDB4MWZdKTsKKyNlbHNlCisJCWZ3X2Vycm9yKCJETUEgY29udGV4dCAlcyBoYXMgc3RvcHBlZCwgZXJyb3IgY29kZTogJSN4XG4iLAorCQkJIG5hbWUsIGN0bCAmIDB4MWYpOworI2VuZGlmCisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZGVhZF9jb250ZXh0cyhzdHJ1Y3QgZndfb2hjaSAqb2hjaSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwljaGFyIG5hbWVbOF07CisKKwlkZXRlY3RfZGVhZF9jb250ZXh0KG9oY2ksICJBVFJlcSIsIE9IQ0kxMzk0X0FzUmVxVHJDb250ZXh0QmFzZSk7CisJZGV0ZWN0X2RlYWRfY29udGV4dChvaGNpLCAiQVRSc3AiLCBPSENJMTM5NF9Bc1JzcFRyQ29udGV4dEJhc2UpOworCWRldGVjdF9kZWFkX2NvbnRleHQob2hjaSwgIkFSUmVxIiwgT0hDSTEzOTRfQXNSZXFSY3ZDb250ZXh0QmFzZSk7CisJZGV0ZWN0X2RlYWRfY29udGV4dChvaGNpLCAiQVJSc3AiLCBPSENJMTM5NF9Bc1JzcFJjdkNvbnRleHRCYXNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkgeworCQlpZiAoIShvaGNpLT5pdF9jb250ZXh0X3N1cHBvcnQgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJc3ByaW50ZihuYW1lLCAiSVQldSIsIGkpOworCQlkZXRlY3RfZGVhZF9jb250ZXh0KG9oY2ksIG5hbWUsIE9IQ0kxMzk0X0lzb1htaXRDb250ZXh0QmFzZShpKSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCAzMjsgKytpKSB7CisJCWlmICghKG9oY2ktPmlyX2NvbnRleHRfc3VwcG9ydCAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCQlzcHJpbnRmKG5hbWUsICJJUiV1IiwgaSk7CisJCWRldGVjdF9kZWFkX2NvbnRleHQob2hjaSwgbmFtZSwgT0hDSTEzOTRfSXNvUmN2Q29udGV4dEJhc2UoaSkpOworCX0KKwkvKiBUT0RPOiBtYXliZSB0cnkgdG8gZmx1c2ggYW5kIHJlc3RhcnQgdGhlIGRlYWQgY29udGV4dHMgKi8KK30KKwogc3RhdGljIHUzMiBjeWNsZV90aW1lcl90aWNrcyh1MzIgY3ljbGVfdGltZXIpCiB7CiAJdTMyIHRpY2tzOwpAQCAtMTkwNCw2ICsxOTM1LDkgQEAKIAkJCWZ3X25vdGlmeSgiaXNvY2hyb25vdXMgY3ljbGUgaW5jb25zaXN0ZW50XG4iKTsKIAl9CiAKKwlpZiAodW5saWtlbHkoZXZlbnQgJiBPSENJMTM5NF91bnJlY292ZXJhYmxlRXJyb3IpKQorCQloYW5kbGVfZGVhZF9jb250ZXh0cyhvaGNpKTsKKwogCWlmIChldmVudCAmIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzKSB7CiAJCXNwaW5fbG9jaygmb2hjaS0+bG9jayk7CiAJCXVwZGF0ZV9idXNfdGltZShvaGNpKTsKQEAgLTIxNDEsNyArMjE3NSw5IEBACiAJCU9IQ0kxMzk0X3NlbGZJRENvbXBsZXRlIHwKIAkJT0hDSTEzOTRfcmVnQWNjZXNzRmFpbCB8CiAJCU9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzIHwKLQkJT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQgfCBPSENJMTM5NF9jeWNsZVRvb0xvbmcgfAorCQlPSENJMTM5NF9jeWNsZUluY29uc2lzdGVudCB8CisJCU9IQ0kxMzk0X3VucmVjb3ZlcmFibGVFcnJvciB8CisJCU9IQ0kxMzk0X2N5Y2xlVG9vTG9uZyB8CiAJCU9IQ0kxMzk0X21hc3RlckludEVuYWJsZTsKIAlpZiAocGFyYW1fZGVidWcgJiBPSENJX1BBUkFNX0RFQlVHX0JVU1JFU0VUUykKIAkJaXJxcyB8PSBPSENJMTM5NF9idXNSZXNldDsKQEAgLTI2NTcsNiArMjY5MywxMCBAQAogCXUzMiBjb250cm9sID0gSVJfQ09OVEVYVF9JU09DSF9IRUFERVIsIG1hdGNoOwogCWludCBpbmRleDsKIAorCS8qIHRoZSBjb250cm9sbGVyIGNhbm5vdCBzdGFydCB3aXRob3V0IGFueSBxdWV1ZWQgcGFja2V0cyAqLworCWlmIChjdHgtPmNvbnRleHQubGFzdC0+YnJhbmNoX2FkZHJlc3MgPT0gMCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCiAJc3dpdGNoIChjdHgtPmJhc2UudHlwZSkgewogCWNhc2UgRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQ6CiAJCWluZGV4ID0gY3R4IC0gb2hjaS0+aXRfY29udGV4dF9saXN0OwpAQCAtMjcxNSw2ICsyNzU1LDcgQEAKIAl9CiAJZmx1c2hfd3JpdGVzKG9oY2kpOwogCWNvbnRleHRfc3RvcCgmY3R4LT5jb250ZXh0KTsKKwl0YXNrbGV0X2tpbGwoJmN0eC0+Y29udGV4dC50YXNrbGV0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzIwNywxNSArMzI0OCwxNyBAQAogCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrU2V0LCB+MCk7CiAJb2hjaS0+aXJfY29udGV4dF9jaGFubmVscyA9IH4wVUxMOwotCW9oY2ktPmlyX2NvbnRleHRfbWFzayA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrU2V0KTsKKwlvaGNpLT5pcl9jb250ZXh0X3N1cHBvcnQgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza1NldCk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrQ2xlYXIsIH4wKTsKKwlvaGNpLT5pcl9jb250ZXh0X21hc2sgPSBvaGNpLT5pcl9jb250ZXh0X3N1cHBvcnQ7CiAJb2hjaS0+bl9pciA9IGh3ZWlnaHQzMihvaGNpLT5pcl9jb250ZXh0X21hc2spOwogCXNpemUgPSBzaXplb2Yoc3RydWN0IGlzb19jb250ZXh0KSAqIG9oY2ktPm5faXI7CiAJb2hjaS0+aXJfY29udGV4dF9saXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCwgfjApOwotCW9oY2ktPml0X2NvbnRleHRfbWFzayA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrU2V0KTsKKwlvaGNpLT5pdF9jb250ZXh0X3N1cHBvcnQgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrQ2xlYXIsIH4wKTsKKwlvaGNpLT5pdF9jb250ZXh0X21hc2sgPSBvaGNpLT5pdF9jb250ZXh0X3N1cHBvcnQ7CiAJb2hjaS0+bl9pdCA9IGh3ZWlnaHQzMihvaGNpLT5pdF9jb250ZXh0X21hc2spOwogCXNpemUgPSBzaXplb2Yoc3RydWN0IGlzb19jb250ZXh0KSAqIG9oY2ktPm5faXQ7CiAJb2hjaS0+aXRfY29udGV4dF9saXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTMyNjYsNyArMzMwOSw3IEBACiAgZmFpbF9kaXNhYmxlOgogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogIGZhaWxfZnJlZToKLQlrZnJlZSgmb2hjaS0+Y2FyZCk7CisJa2ZyZWUob2hjaSk7CiAJcG1hY19vaGNpX29mZihkZXYpOwogIGZhaWw6CiAJaWYgKGVyciA9PSAtRU5PTUVNKQpAQCAtMzMxMCw3ICszMzUzLDcgQEAKIAlwY2lfaW91bm1hcChkZXYsIG9oY2ktPnJlZ2lzdGVycyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9uKGRldiwgMCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci0Ja2ZyZWUoJm9oY2ktPmNhcmQpOworCWtmcmVlKG9oY2kpOwogCXBtYWNfb2hjaV9vZmYoZGV2KTsKIAogCWZ3X25vdGlmeSgiUmVtb3ZlZCBmdy1vaGNpIGRldmljZS5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCBhZmE1NzZhLi43N2VkNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtNDcyLDE4ICs0NzIsMTIgQEAKIAkgKiBTbyB0aGlzIGNhbGxiYWNrIG9ubHkgc2V0cyB0aGUgcmNvZGUgaWYgaXQgaGFzbid0IGFscmVhZHkKIAkgKiBiZWVuIHNldCBhbmQgb25seSBkb2VzIHRoZSBjbGVhbnVwIGlmIHRoZSB0cmFuc2FjdGlvbgogCSAqIGZhaWxlZCBhbmQgd2UgZGlkbid0IGFscmVhZHkgZ2V0IGEgc3RhdHVzIHdyaXRlLgotCSAqCi0JICogSGVyZSB3ZSB0cmVhdCBSQ09ERV9DQU5DRUxMRUQgbGlrZSBSQ09ERV9DT01QTEVURSBiZWNhdXNlIHNvbWUKLQkgKiBPWFVGOTM2UVNFIGZpcm13YXJlcyBvY2Nhc2lvbmFsbHkgcmVzcG9uZCBhZnRlciBTcGxpdF9UaW1lb3V0IGFuZAotCSAqIGNvbXBsZXRlIHRoZSBPUkIganVzdCBmaW5lLiAgTm90ZSwgd2UgYWxzbyBnZXQgUkNPREVfQ0FOQ0VMTEVECi0JICogZnJvbSBzYnAyX2NhbmNlbF9vcmJzKCkgaWYgZndfY2FuY2VsX3RyYW5zYWN0aW9uKCkgPT0gMC4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG9yYi0+cmNvZGUgPT0gLTEpCiAJCW9yYi0+cmNvZGUgPSByY29kZTsKLQotCWlmIChvcmItPnJjb2RlICE9IFJDT0RFX0NPTVBMRVRFICYmIG9yYi0+cmNvZGUgIT0gUkNPREVfQ0FOQ0VMTEVEKSB7CisJaWYgKG9yYi0+cmNvZGUgIT0gUkNPREVfQ09NUExFVEUpIHsKIAkJbGlzdF9kZWwoJm9yYi0+bGluayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIApAQCAtNTMyLDcgKzUyNiw4IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob3JiLCBuZXh0LCAmbGlzdCwgbGluaykgewogCQlyZXR2YWwgPSAwOwotCQlmd19jYW5jZWxfdHJhbnNhY3Rpb24oZGV2aWNlLT5jYXJkLCAmb3JiLT50KTsKKwkJaWYgKGZ3X2NhbmNlbF90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsICZvcmItPnQpID09IDApCisJCQljb250aW51ZTsKIAogCQlvcmItPnJjb2RlID0gUkNPREVfQ0FOQ0VMTEVEOwogCQlvcmItPmNhbGxiYWNrKG9yYiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL0tjb25maWcKaW5kZXggM2M1NmFmYy4uYjNhMjVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZwpAQCAtMTQ1LDQgKzE0NSwxNiBAQAogCSAgZGV0ZWN0IGlTQ1NJIGJvb3QgcGFyYW1ldGVycyBkeW5hbWljYWxseSBkdXJpbmcgc3lzdGVtIGJvb3QsIHNheSBZLgogCSAgT3RoZXJ3aXNlLCBzYXkgTi4KIAorY29uZmlnIFNJR01BCisJdHJpc3RhdGUgIlNpZ21hU3R1ZGlvIGZpcm13YXJlIGxvYWRlciIKKwlkZXBlbmRzIG9uIEkyQworCXNlbGVjdCBDUkMzMgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIEVuYWJsZSBoZWxwZXIgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggQW5hbG9nIERldmljZXMgU2lnbWFEU1AKKwkgIHBhcnRzIGFuZCBiaW5hcnkgZmlybXdhcmVzIHByb2R1Y2VkIGJ5IEFuYWxvZyBEZXZpY2VzIFNpZ21hU3R1ZGlvLgorCisJICBJZiB1bnN1cmUsIHNheSBOIGhlcmUuICBEcml2ZXJzIHRoYXQgbmVlZCB0aGVzZSBoZWxwZXJzIHdpbGwgc2VsZWN0CisJICB0aGlzIG9wdGlvbiBhdXRvbWF0aWNhbGx5LgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZQppbmRleCAyMGMxN2ZjLi4wMGJiMGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTEyLDMgKzEyLDQgQEAKIG9iai0kKENPTkZJR19JU0NTSV9JQkZUX0ZJTkQpCSs9IGlzY3NpX2liZnRfZmluZC5vCiBvYmotJChDT05GSUdfSVNDU0lfSUJGVCkJKz0gaXNjc2lfaWJmdC5vCiBvYmotJChDT05GSUdfRklSTVdBUkVfTUVNTUFQKQkrPSBtZW1tYXAubworb2JqLSQoQ09ORklHX1NJR01BKQkJKz0gc2lnbWEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYyBiL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMKaW5kZXggNjlhZDUyOS4uZWE1YWMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jCkBAIC0yNjgsOCArMjY4LDEwIEBACiAJfQogCiAJLyogZ2VuZXJhdGUgU01JICovCisJLyogaW5iIHRvIGZvcmNlIHBvc3RlZCB3cml0ZSB0aHJvdWdoIGFuZCBtYWtlIFNNSSBoYXBwZW4gbm93ICovCiAJYXNtIHZvbGF0aWxlICgKLQkJIm91dGIgJWIwLCV3MSIKKwkJIm91dGIgJWIwLCV3MVxuIgorCQkiaW5iICV3MSIKIAkJOiAvKiBubyBvdXRwdXQgYXJncyAqLwogCQk6ICJhIiAoc21pX2NtZC0+Y29tbWFuZF9jb2RlKSwKIAkJICAiZCIgKHNtaV9jbWQtPmNvbW1hbmRfYWRkcmVzcyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL3NpZ21hLmMgYi9kcml2ZXJzL2Zpcm13YXJlL3NpZ21hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5Y2QyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvc2lnbWEuYwpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIExvYWQgQW5hbG9nIERldmljZXMgU2lnbWFTdHVkaW8gZmlybXdhcmUgZmlsZXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ21hLmg+CisKKy8qIFJldHVybjogMD09T0ssIDwwPT1lcnJvciwgPTEgPT1ubyBtb3JlIGFjdGlvbnMgKi8KK3N0YXRpYyBpbnQKK3Byb2Nlc3Nfc2lnbWFfYWN0aW9uKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBzaWdtYV9maXJtd2FyZSAqc3NmdykKK3sKKwlzdHJ1Y3Qgc2lnbWFfYWN0aW9uICpzYSA9ICh2b2lkICopKHNzZnctPmZ3LT5kYXRhICsgc3Nmdy0+cG9zKTsKKwlzaXplX3QgbGVuID0gc2lnbWFfYWN0aW9uX2xlbihzYSk7CisJaW50IHJldCA9IDA7CisKKwlwcl9kZWJ1ZygiJXM6IGluc3RyOiVpIGFkZHI6JSN4IGxlbjolenVcbiIsIF9fZnVuY19fLAorCQlzYS0+aW5zdHIsIHNhLT5hZGRyLCBsZW4pOworCisJc3dpdGNoIChzYS0+aW5zdHIpIHsKKwljYXNlIFNJR01BX0FDVElPTl9XUklURVhCWVRFUzoKKwljYXNlIFNJR01BX0FDVElPTl9XUklURVNJTkdMRToKKwljYXNlIFNJR01BX0FDVElPTl9XUklURVNBRkVMT0FEOgorCQlpZiAoc3Nmdy0+ZnctPnNpemUgPCBzc2Z3LT5wb3MgKyBsZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgKHZvaWQgKikmc2EtPmFkZHIsIGxlbik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCisJY2FzZSBTSUdNQV9BQ1RJT05fREVMQVk6CisJCXJldCA9IDA7CisJCXVkZWxheShsZW4pOworCQlsZW4gPSAwOworCQlicmVhazsKKworCWNhc2UgU0lHTUFfQUNUSU9OX0VORDoKKwkJcmV0dXJuIDE7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB3aGVuIGFycml2ZSBoZXJlIHJldD0wIG9yIHNlbnQgZGF0YSAqLworCXNzZnctPnBvcyArPSBzaWdtYV9hY3Rpb25fc2l6ZShzYSwgbGVuKTsKKwlyZXR1cm4gc3Nmdy0+cG9zID09IHNzZnctPmZ3LT5zaXplOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX3NpZ21hX2FjdGlvbnMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHNpZ21hX2Zpcm13YXJlICpzc2Z3KQoreworCXByX2RlYnVnKCIlczogcHJvY2Vzc2luZyAlcFxuIiwgX19mdW5jX18sIHNzZncpOworCisJd2hpbGUgKDEpIHsKKwkJaW50IHJldCA9IHByb2Nlc3Nfc2lnbWFfYWN0aW9uKGNsaWVudCwgc3Nmdyk7CisJCXByX2RlYnVnKCIlczogYWN0aW9uIHJldHVybmVkICVpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJaWYgKHJldCA9PSAxKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorfQorCitpbnQgcHJvY2Vzc19zaWdtYV9maXJtd2FyZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCByZXQ7CisJc3RydWN0IHNpZ21hX2Zpcm13YXJlX2hlYWRlciAqc3Nmd19oZWFkOworCXN0cnVjdCBzaWdtYV9maXJtd2FyZSBzc2Z3OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJdTMyIGNyYzsKKworCXByX2RlYnVnKCIlczogbG9hZGluZyBmaXJtd2FyZSAlc1xuIiwgX19mdW5jX18sIG5hbWUpOworCisJLyogZmlyc3QgbG9hZCB0aGUgYmxvYiAqLworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBuYW1lLCAmY2xpZW50LT5kZXYpOworCWlmIChyZXQpIHsKKwkJcHJfZGVidWcoIiVzOiByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkIHdpdGggJWlcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlzc2Z3LmZ3ID0gZnc7CisKKwkvKiB0aGVuIHZlcmlmeSB0aGUgaGVhZGVyICovCisJcmV0ID0gLUVJTlZBTDsKKwlpZiAoZnctPnNpemUgPCBzaXplb2YoKnNzZndfaGVhZCkpCisJCWdvdG8gZG9uZTsKKworCXNzZndfaGVhZCA9ICh2b2lkICopZnctPmRhdGE7CisJaWYgKG1lbWNtcChzc2Z3X2hlYWQtPm1hZ2ljLCBTSUdNQV9NQUdJQywgQVJSQVlfU0laRShzc2Z3X2hlYWQtPm1hZ2ljKSkpCisJCWdvdG8gZG9uZTsKKworCWNyYyA9IGNyYzMyKDAsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJcHJfZGVidWcoIiVzOiBjcmM9JXhcbiIsIF9fZnVuY19fLCBjcmMpOworCWlmIChjcmMgIT0gc3Nmd19oZWFkLT5jcmMpCisJCWdvdG8gZG9uZTsKKworCXNzZncucG9zID0gc2l6ZW9mKCpzc2Z3X2hlYWQpOworCisJLyogZmluYWxseSBwcm9jZXNzIGFsbCBvZiB0aGUgYWN0aW9ucyAqLworCXJldCA9IHByb2Nlc3Nfc2lnbWFfYWN0aW9ucyhjbGllbnQsICZzc2Z3KTsKKworIGRvbmU6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlwcl9kZWJ1ZygiJXM6IGxvYWRlZCAlc1xuIiwgX19mdW5jX18sIG5hbWUpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocHJvY2Vzc19zaWdtYV9maXJtd2FyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vNzR4MTY0LmMgYi9kcml2ZXJzL2dwaW8vNzR4MTY0LmMKaW5kZXggZDkxZmY0Yy4uODRlMDcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvLzc0eDE2NC5jCisrKyBiL2RyaXZlcnMvZ3Bpby83NHgxNjQuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBnZW5fNzR4MTY0X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIGludCBfX2RldmV4aXQgZ2VuXzc0eDE2NF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgZ2VuXzc0eDE2NF9jaGlwICpjaGlwOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDY2NDY2MGUuLmI0NjQ0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogY29uZmlnIEdQSU9fU0NICiAJdHJpc3RhdGUgIkludGVsIFNDSCBHUElPIgotCWRlcGVuZHMgb24gR1BJT0xJQiAmJiBQQ0kKKwlkZXBlbmRzIG9uIEdQSU9MSUIgJiYgUENJICYmIFg4NgogCXNlbGVjdCBNRkRfQ09SRQogCXNlbGVjdCBMUENfU0NICiAJaGVscApAQCAtMzIxLDEzICszMjEsMTMgQEAKIAogY29uZmlnIEdQSU9fTEFOR1dFTEwKIAlib29sICJJbnRlbCBMYW5nd2VsbC9QZW53ZWxsIEdQSU8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFg4NgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCBJbnRlbCBMYW5nd2VsbC9QZW53ZWxsIEdQSU8uCiAKIGNvbmZpZyBHUElPX1BDSAogCXRyaXN0YXRlICJQQ0ggR1BJTyBvZiBJbnRlbCBUb3BjbGlmZiIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFg4NgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0goUGxhdGZvcm0gY29udHJvbGxlciBIdWIpIEdQSU8gb2YgSW50ZWwgVG9wY2xpZmYKIAkgIHdoaWNoIGlzIGFuIElPSChJbnB1dC9PdXRwdXQgSHViKSBmb3IgeDg2IGVtYmVkZGVkIHByb2Nlc3Nvci4KQEAgLTM2OCwxMSArMzY4LDExIEBACiAJICBHUElPIGRyaXZlciBmb3IgTWF4aW0gTUFYNzMwMSBTUEktYmFzZWQgR1BJTyBleHBhbmRlci4KIAogY29uZmlnIEdQSU9fTUNQMjNTMDgKLQl0cmlzdGF0ZSAiTWljcm9jaGlwIE1DUDIzUzA4IEkvTyBleHBhbmRlciIKKwl0cmlzdGF0ZSAiTWljcm9jaGlwIE1DUDIzU3h4IEkvTyBleHBhbmRlciIKIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIKIAloZWxwCi0JICBTUEkgZHJpdmVyIGZvciBNaWNyb2NoaXAgTUNQMjNTMDggSS9PIGV4cGFuZGVyLiAgVGhpcyBwcm92aWRlcwotCSAgYSBHUElPIGludGVyZmFjZSBzdXBwb3J0aW5nIGlucHV0cyBhbmQgb3V0cHV0cy4KKwkgIFNQSSBkcml2ZXIgZm9yIE1pY3JvY2hpcCBNQ1AyM1MwOC9NUEMyM1MxNyBJL08gZXhwYW5kZXJzLgorCSAgVGhpcyBwcm92aWRlcyBhIEdQSU8gaW50ZXJmYWNlIHN1cHBvcnRpbmcgaW5wdXRzIGFuZCBvdXRwdXRzLgogCiBjb25maWcgR1BJT19NQzMzODgwCiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBNQzMzODgwIGhpZ2gtc2lkZS9sb3ctc2lkZSBzd2l0Y2giCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vY3M1NTM1LWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCmluZGV4IDBkMDVlYTcuLjZlMTZjYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCkBAIC0zNzMsNyArMzczLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY3M1NTM1X2dwaW9fZHJ2ID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY3M1NTM1X2dwaW9fZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gRFJWX05BTUUsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtMzg0LDEyICszODQsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3M1NTM1X2dwaW9faW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNzNTUzNV9ncGlvX2Rydik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY3M1NTM1X2dwaW9fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNzNTUzNV9ncGlvX2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY3M1NTM1X2dwaW9fZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY3M1NTM1X2dwaW9fZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY3M1NTM1X2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYwppbmRleCA1NGQ3MGE0Li41NjBhYjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKQEAgLTE4NywzMSArMTg3LDI4IEBACiAKIHN0YXRpYyB2b2lkIGxud19pcnFfaGFuZGxlcih1bnNpZ25lZCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGdldF9pcnFfZGF0YShpcnEpOwotCXUzMiBiYXNlLCBncGlvOworCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSA9IGlycV9kZXNjX2dldF9pcnFfZGF0YShkZXNjKTsKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGlycV9kYXRhX2dldF9pcnFfaGFuZGxlcl9kYXRhKGRhdGEpOworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcChkYXRhKTsKKwl1MzIgYmFzZSwgZ3BpbywgbWFzazsKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmc7CiAJdm9pZCBfX2lvbWVtICpnZWRyOwotCXUzMiBnZWRyX3Y7CiAKIAkvKiBjaGVjayBHUElPIGNvbnRyb2xsZXIgdG8gY2hlY2sgd2hpY2ggcGluIHRyaWdnZXJlZCB0aGUgaW50ZXJydXB0ICovCiAJZm9yIChiYXNlID0gMDsgYmFzZSA8IGxudy0+Y2hpcC5uZ3BpbzsgYmFzZSArPSAzMikgewogCQlnZWRyID0gZ3Bpb19yZWcoJmxudy0+Y2hpcCwgYmFzZSwgR0VEUik7Ci0JCWdlZHJfdiA9IHJlYWRsKGdlZHIpOwotCQlpZiAoIWdlZHJfdikKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGdwaW8gPSBiYXNlOyBncGlvIDwgYmFzZSArIDMyOyBncGlvKyspCi0JCQlpZiAoZ2Vkcl92ICYgQklUKGdwaW8gJSAzMikpIHsKLQkJCQlwcl9kZWJ1ZygicGluICVkIHRyaWdnZXJlZFxuIiwgZ3Bpbyk7Ci0JCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGxudy0+aXJxX2Jhc2UgKyBncGlvKTsKLQkJCX0KLQkJLyogY2xlYXIgdGhlIGVkZ2UgZGV0ZWN0IHN0YXR1cyBiaXQgKi8KLQkJd3JpdGVsKGdlZHJfdiwgZ2Vkcik7CisJCXBlbmRpbmcgPSByZWFkbChnZWRyKTsKKwkJd2hpbGUgKHBlbmRpbmcpIHsKKwkJCWdwaW8gPSBfX2ZmcyhwZW5kaW5nKSAtIDE7CisJCQltYXNrID0gQklUKGdwaW8pOworCQkJcGVuZGluZyAmPSB+bWFzazsKKwkJCS8qIENsZWFyIGJlZm9yZSBoYW5kbGluZyBzbyB3ZSBjYW4ndCBsb3NlIGFuIGVkZ2UgKi8KKwkJCXdyaXRlbChtYXNrLCBnZWRyKTsKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShsbnctPmlycV9iYXNlICsgYmFzZSArIGdwaW8pOworCQl9CiAJfQogCi0JaWYgKGRlc2MtPmNoaXAtPmlycV9lb2kpCi0JCWRlc2MtPmNoaXAtPmlycV9lb2koaXJxX2dldF9pcnFfZGF0YShpcnEpKTsKLQllbHNlCi0JCWRldl93YXJuKGxudy0+Y2hpcC5kZXYsICJtaXNzaW5nIEVPSSBoYW5kbGVyIGZvciBpcnEgJWRcbiIsIGlycSk7Ci0KKwljaGlwLT5pcnFfZW9pKGRhdGEpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBsbndfZ3Bpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTI3OSwxMiArMjc2LDEyIEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImxhbmd3ZWxsIGdwaW9jaGlwX2FkZCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKIAkJZ290byBlcnI1OwogCX0KLQlzZXRfaXJxX2RhdGEocGRldi0+aXJxLCBsbncpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBkZXYtPmlycSwgbG53X2lycV9oYW5kbGVyKTsKKwlpcnFfc2V0X2hhbmRsZXJfZGF0YShwZGV2LT5pcnEsIGxudyk7CisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIocGRldi0+aXJxLCBsbndfaXJxX2hhbmRsZXIpOwogCWZvciAoaSA9IDA7IGkgPCBsbnctPmNoaXAubmdwaW87IGkrKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpICsgbG53LT5pcnFfYmFzZSwgJmxud19pcnFjaGlwLAotCQkJCQloYW5kbGVfc2ltcGxlX2lycSwgImRlbXV4Iik7Ci0JCXNldF9pcnFfY2hpcF9kYXRhKGkgKyBsbnctPmlycV9iYXNlLCBsbncpOworCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpICsgbG53LT5pcnFfYmFzZSwgJmxud19pcnFjaGlwLAorCQkJCQkgICAgICBoYW5kbGVfc2ltcGxlX2lycSwgImRlbXV4Iik7CisJCWlycV9zZXRfY2hpcF9kYXRhKGkgKyBsbnctPmlycV9iYXNlLCBsbncpOwogCX0KIAogCXNwaW5fbG9ja19pbml0KCZsbnctPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21jMzM4ODAuYyBiL2RyaXZlcnMvZ3Bpby9tYzMzODgwLmMKaW5kZXggOTM1NDc5ZC4uMDBmNmQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21jMzM4ODAuYworKysgYi9kcml2ZXJzL2dwaW8vbWMzMzg4MC5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1jMzM4ODBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYzMzODgwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBtYzMzODgwICptYzsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21jcDIzczA4LmMgYi9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYwppbmRleCA2OWY2ZjE5Li40MGUwNzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYworKysgYi9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYwpAQCAtMTAsNyArMTAsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL21jcDIzczA4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAorLyoqCisgKiBNQ1AgdHlwZXMgc3VwcG9ydGVkIGJ5IGRyaXZlcgorICovCisjZGVmaW5lIE1DUF9UWVBFX1MwOAkwCisjZGVmaW5lIE1DUF9UWVBFX1MxNwkxCiAKIC8qIFJlZ2lzdGVycyBhcmUgYWxsIDggYml0cyB3aWRlLgogICoKQEAgLTM1LDI3ICs0MSwzOCBAQAogI2RlZmluZSBNQ1BfR1BJTwkweDA5CiAjZGVmaW5lIE1DUF9PTEFUCTB4MGEKIAorc3RydWN0IG1jcDIzczA4OworCitzdHJ1Y3QgbWNwMjNzMDhfb3BzIHsKKwlpbnQJKCpyZWFkKShzdHJ1Y3QgbWNwMjNzMDggKm1jcCwgdW5zaWduZWQgcmVnKTsKKwlpbnQJKCp3cml0ZSkoc3RydWN0IG1jcDIzczA4ICptY3AsIHVuc2lnbmVkIHJlZywgdW5zaWduZWQgdmFsKTsKKwlpbnQJKCpyZWFkX3JlZ3MpKHN0cnVjdCBtY3AyM3MwOCAqbWNwLCB1bnNpZ25lZCByZWcsCisJCQkgICAgIHUxNiAqdmFscywgdW5zaWduZWQgbik7Cit9OworCiBzdHJ1Y3QgbWNwMjNzMDggewogCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CiAJdTgJCQlhZGRyOwogCi0JdTgJCQljYWNoZVsxMV07CisJdTE2CQkJY2FjaGVbMTFdOwogCS8qIGxvY2sgcHJvdGVjdHMgdGhlIGNhY2hlZCB2YWx1ZXMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAKIAlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKKworCWNvbnN0IHN0cnVjdCBtY3AyM3MwOF9vcHMJKm9wczsKIH07CiAKLS8qIEEgZ2l2ZW4gc3BpX2RldmljZSBjYW4gcmVwcmVzZW50IHVwIHRvIGZvdXIgbWNwMjNzMDggY2hpcHMKKy8qIEEgZ2l2ZW4gc3BpX2RldmljZSBjYW4gcmVwcmVzZW50IHVwIHRvIGVpZ2h0IG1jcDIzc3h4IGNoaXBzCiAgKiBzaGFyaW5nIHRoZSBzYW1lIGNoaXBzZWxlY3QgYnV0IHVzaW5nIGRpZmZlcmVudCBhZGRyZXNzZXMKICAqIChlLmcuIGNoaXBzICMwIGFuZCAjMyBtaWdodCBiZSBwb3B1bGF0ZWQsIGJ1dCBub3QgIzEgb3IgJDIpLgogICogRHJpdmVyIGRhdGEgaG9sZHMgYWxsIHRoZSBwZXItY2hpcCBkYXRhLgogICovCiBzdHJ1Y3QgbWNwMjNzMDhfZHJpdmVyX2RhdGEgewogCXVuc2lnbmVkCQluZ3BpbzsKLQlzdHJ1Y3QgbWNwMjNzMDgJCSptY3BbNF07CisJc3RydWN0IG1jcDIzczA4CQkqbWNwWzhdOwogCXN0cnVjdCBtY3AyM3MwOAkJY2hpcFtdOwogfTsKIApAQCAtNzAsNyArODcsNyBAQAogCXJldHVybiAoc3RhdHVzIDwgMCkgPyBzdGF0dXMgOiByeFswXTsKIH0KIAotc3RhdGljIGludCBtY3AyM3MwOF93cml0ZShzdHJ1Y3QgbWNwMjNzMDggKm1jcCwgdW5zaWduZWQgcmVnLCB1OCB2YWwpCitzdGF0aWMgaW50IG1jcDIzczA4X3dyaXRlKHN0cnVjdCBtY3AyM3MwOCAqbWNwLCB1bnNpZ25lZCByZWcsIHVuc2lnbmVkIHZhbCkKIHsKIAl1OAl0eFszXTsKIApAQCAtODEsMTcgKzk4LDgxIEBACiB9CiAKIHN0YXRpYyBpbnQKLW1jcDIzczA4X3JlYWRfcmVncyhzdHJ1Y3QgbWNwMjNzMDggKm1jcCwgdW5zaWduZWQgcmVnLCB1OCAqdmFscywgdW5zaWduZWQgbikKK21jcDIzczA4X3JlYWRfcmVncyhzdHJ1Y3QgbWNwMjNzMDggKm1jcCwgdW5zaWduZWQgcmVnLCB1MTYgKnZhbHMsIHVuc2lnbmVkIG4pCiB7Ci0JdTgJdHhbMl07CisJdTgJdHhbMl0sICp0bXA7CisJaW50CXN0YXR1czsKIAogCWlmICgobiArIHJlZykgPiBzaXplb2YgbWNwLT5jYWNoZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdHhbMF0gPSBtY3AtPmFkZHIgfCAweDAxOwogCXR4WzFdID0gcmVnOwotCXJldHVybiBzcGlfd3JpdGVfdGhlbl9yZWFkKG1jcC0+c3BpLCB0eCwgc2l6ZW9mIHR4LCB2YWxzLCBuKTsKKworCXRtcCA9ICh1OCAqKXZhbHM7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChtY3AtPnNwaSwgdHgsIHNpemVvZiB0eCwgdG1wLCBuKTsKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJd2hpbGUgKG4tLSkKKwkJCXZhbHNbbl0gPSB0bXBbbl07IC8qIGV4cGFuZCB0byAxNmJpdCAqLworCX0KKwlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG1jcDIzczE3X3JlYWQoc3RydWN0IG1jcDIzczA4ICptY3AsIHVuc2lnbmVkIHJlZykKK3sKKwl1OAl0eFsyXSwgcnhbMl07CisJaW50CXN0YXR1czsKKworCXR4WzBdID0gbWNwLT5hZGRyIHwgMHgwMTsKKwl0eFsxXSA9IHJlZyA8PCAxOworCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQobWNwLT5zcGksIHR4LCBzaXplb2YgdHgsIHJ4LCBzaXplb2YgcngpOworCXJldHVybiAoc3RhdHVzIDwgMCkgPyBzdGF0dXMgOiAocnhbMF0gfCAocnhbMV0gPDwgOCkpOworfQorCitzdGF0aWMgaW50IG1jcDIzczE3X3dyaXRlKHN0cnVjdCBtY3AyM3MwOCAqbWNwLCB1bnNpZ25lZCByZWcsIHVuc2lnbmVkIHZhbCkKK3sKKwl1OAl0eFs0XTsKKworCXR4WzBdID0gbWNwLT5hZGRyOworCXR4WzFdID0gcmVnIDw8IDE7CisJdHhbMl0gPSB2YWw7CisJdHhbM10gPSB2YWwgPj4gODsKKwlyZXR1cm4gc3BpX3dyaXRlX3RoZW5fcmVhZChtY3AtPnNwaSwgdHgsIHNpemVvZiB0eCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK21jcDIzczE3X3JlYWRfcmVncyhzdHJ1Y3QgbWNwMjNzMDggKm1jcCwgdW5zaWduZWQgcmVnLCB1MTYgKnZhbHMsIHVuc2lnbmVkIG4pCit7CisJdTgJdHhbMl07CisJaW50CXN0YXR1czsKKworCWlmICgobiArIHJlZykgPiBzaXplb2YgbWNwLT5jYWNoZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdHhbMF0gPSBtY3AtPmFkZHIgfCAweDAxOworCXR4WzFdID0gcmVnIDw8IDE7CisKKwlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKG1jcC0+c3BpLCB0eCwgc2l6ZW9mIHR4LAorCQkJCSAgICAgKHU4ICopdmFscywgbiAqIDIpOworCWlmIChzdGF0dXMgPj0gMCkgeworCQl3aGlsZSAobi0tKQorCQkJdmFsc1tuXSA9IF9fbGUxNl90b19jcHUoKF9fbGUxNil2YWxzW25dKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1jcDIzczA4X29wcyBtY3AyM3MwOF9vcHMgPSB7CisJLnJlYWQJCT0gbWNwMjNzMDhfcmVhZCwKKwkud3JpdGUJCT0gbWNwMjNzMDhfd3JpdGUsCisJLnJlYWRfcmVncwk9IG1jcDIzczA4X3JlYWRfcmVncywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWNwMjNzMDhfb3BzIG1jcDIzczE3X29wcyA9IHsKKwkucmVhZAkJPSBtY3AyM3MxN19yZWFkLAorCS53cml0ZQkJPSBtY3AyM3MxN193cml0ZSwKKwkucmVhZF9yZWdzCT0gbWNwMjNzMTdfcmVhZF9yZWdzLAorfTsKKworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IG1jcDIzczA4X2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCkBAIC0xMDEsNyArMTgyLDcgQEAKIAogCW11dGV4X2xvY2soJm1jcC0+bG9jayk7CiAJbWNwLT5jYWNoZVtNQ1BfSU9ESVJdIHw9ICgxIDw8IG9mZnNldCk7Ci0Jc3RhdHVzID0gbWNwMjNzMDhfd3JpdGUobWNwLCBNQ1BfSU9ESVIsIG1jcC0+Y2FjaGVbTUNQX0lPRElSXSk7CisJc3RhdHVzID0gbWNwLT5vcHMtPndyaXRlKG1jcCwgTUNQX0lPRElSLCBtY3AtPmNhY2hlW01DUF9JT0RJUl0pOwogCW11dGV4X3VubG9jaygmbWNwLT5sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTE0LDcgKzE5NSw3IEBACiAJbXV0ZXhfbG9jaygmbWNwLT5sb2NrKTsKIAogCS8qIFJFVklTSVQgcmVhZGluZyB0aGlzIGNsZWFycyBhbnkgSVJRIC4uLiAqLwotCXN0YXR1cyA9IG1jcDIzczA4X3JlYWQobWNwLCBNQ1BfR1BJTyk7CisJc3RhdHVzID0gbWNwLT5vcHMtPnJlYWQobWNwLCBNQ1BfR1BJTyk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXN0YXR1cyA9IDA7CiAJZWxzZSB7CkBAIC0xMjcsMjAgKzIwOCwyMCBAQAogCiBzdGF0aWMgaW50IF9fbWNwMjNzMDhfc2V0KHN0cnVjdCBtY3AyM3MwOCAqbWNwLCB1bnNpZ25lZCBtYXNrLCBpbnQgdmFsdWUpCiB7Ci0JdTggb2xhdCA9IG1jcC0+Y2FjaGVbTUNQX09MQVRdOworCXVuc2lnbmVkIG9sYXQgPSBtY3AtPmNhY2hlW01DUF9PTEFUXTsKIAogCWlmICh2YWx1ZSkKIAkJb2xhdCB8PSBtYXNrOwogCWVsc2UKIAkJb2xhdCAmPSB+bWFzazsKIAltY3AtPmNhY2hlW01DUF9PTEFUXSA9IG9sYXQ7Ci0JcmV0dXJuIG1jcDIzczA4X3dyaXRlKG1jcCwgTUNQX09MQVQsIG9sYXQpOworCXJldHVybiBtY3AtPm9wcy0+d3JpdGUobWNwLCBNQ1BfT0xBVCwgb2xhdCk7CiB9CiAKIHN0YXRpYyB2b2lkIG1jcDIzczA4X3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgbWNwMjNzMDgJKm1jcCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWNwMjNzMDgsIGNoaXApOwotCXU4IG1hc2sgPSAxIDw8IG9mZnNldDsKKwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CiAKIAltdXRleF9sb2NrKCZtY3AtPmxvY2spOwogCV9fbWNwMjNzMDhfc2V0KG1jcCwgbWFzaywgdmFsdWUpOwpAQCAtMTUxLDE0ICsyMzIsMTQgQEAKIG1jcDIzczA4X2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IG1jcDIzczA4CSptY3AgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1jcDIzczA4LCBjaGlwKTsKLQl1OCBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OwogCWludCBzdGF0dXM7CiAKIAltdXRleF9sb2NrKCZtY3AtPmxvY2spOwogCXN0YXR1cyA9IF9fbWNwMjNzMDhfc2V0KG1jcCwgbWFzaywgdmFsdWUpOwogCWlmIChzdGF0dXMgPT0gMCkgewogCQltY3AtPmNhY2hlW01DUF9JT0RJUl0gJj0gfm1hc2s7Ci0JCXN0YXR1cyA9IG1jcDIzczA4X3dyaXRlKG1jcCwgTUNQX0lPRElSLCBtY3AtPmNhY2hlW01DUF9JT0RJUl0pOworCQlzdGF0dXMgPSBtY3AtPm9wcy0+d3JpdGUobWNwLCBNQ1BfSU9ESVIsIG1jcC0+Y2FjaGVbTUNQX0lPRElSXSk7CiAJfQogCW11dGV4X3VubG9jaygmbWNwLT5sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTg0LDE2ICsyNjUsMTYgQEAKIAltY3AgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1jcDIzczA4LCBjaGlwKTsKIAogCS8qIE5PVEU6IHdlIG9ubHkgaGFuZGxlIG9uZSBiYW5rIGZvciBub3cgLi4uICovCi0JYmFuayA9ICcwJyArICgobWNwLT5hZGRyID4+IDEpICYgMHgzKTsKKwliYW5rID0gJzAnICsgKChtY3AtPmFkZHIgPj4gMSkgJiAweDcpOwogCiAJbXV0ZXhfbG9jaygmbWNwLT5sb2NrKTsKLQl0ID0gbWNwMjNzMDhfcmVhZF9yZWdzKG1jcCwgMCwgbWNwLT5jYWNoZSwgc2l6ZW9mIG1jcC0+Y2FjaGUpOworCXQgPSBtY3AtPm9wcy0+cmVhZF9yZWdzKG1jcCwgMCwgbWNwLT5jYWNoZSwgQVJSQVlfU0laRShtY3AtPmNhY2hlKSk7CiAJaWYgKHQgPCAwKSB7CiAJCXNlcV9wcmludGYocywgIiBJL08gRVJST1IgJWRcbiIsIHQpOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JZm9yICh0ID0gMCwgbWFzayA9IDE7IHQgPCA4OyB0KyssIG1hc2sgPDw9IDEpIHsKKwlmb3IgKHQgPSAwLCBtYXNrID0gMTsgdCA8IGNoaXAtPm5ncGlvOyB0KyssIG1hc2sgPDw9IDEpIHsKIAkJY29uc3QgY2hhcgkqbGFiZWw7CiAKIAkJbGFiZWwgPSBncGlvY2hpcF9pc19yZXF1ZXN0ZWQoY2hpcCwgdCk7CkBAIC0yMTksMjggKzMwMCwzMyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBtY3AyM3MwOF9wcm9iZV9vbmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgYWRkciwKLQkJdW5zaWduZWQgYmFzZSwgdW5zaWduZWQgcHVsbHVwcykKKwkJCSAgICAgIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIHB1bGx1cHMpCiB7CiAJc3RydWN0IG1jcDIzczA4X2RyaXZlcl9kYXRhCSpkYXRhID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAJc3RydWN0IG1jcDIzczA4CQkJKm1jcCA9IGRhdGEtPm1jcFthZGRyXTsKIAlpbnQJCQkJc3RhdHVzOwotCWludAkJCQlkb191cGRhdGUgPSAwOwogCiAJbXV0ZXhfaW5pdCgmbWNwLT5sb2NrKTsKIAogCW1jcC0+c3BpID0gc3BpOwogCW1jcC0+YWRkciA9IDB4NDAgfCAoYWRkciA8PCAxKTsKIAotCW1jcC0+Y2hpcC5sYWJlbCA9ICJtY3AyM3MwOCIsCi0KIAltY3AtPmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gbWNwMjNzMDhfZGlyZWN0aW9uX2lucHV0OwogCW1jcC0+Y2hpcC5nZXQgPSBtY3AyM3MwOF9nZXQ7CiAJbWNwLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSBtY3AyM3MwOF9kaXJlY3Rpb25fb3V0cHV0OwogCW1jcC0+Y2hpcC5zZXQgPSBtY3AyM3MwOF9zZXQ7CiAJbWNwLT5jaGlwLmRiZ19zaG93ID0gbWNwMjNzMDhfZGJnX3Nob3c7CiAKKwlpZiAodHlwZSA9PSBNQ1BfVFlQRV9TMTcpIHsKKwkJbWNwLT5vcHMgPSAmbWNwMjNzMTdfb3BzOworCQltY3AtPmNoaXAubmdwaW8gPSAxNjsKKwkJbWNwLT5jaGlwLmxhYmVsID0gIm1jcDIzczE3IjsKKwl9IGVsc2UgeworCQltY3AtPm9wcyA9ICZtY3AyM3MwOF9vcHM7CisJCW1jcC0+Y2hpcC5uZ3BpbyA9IDg7CisJCW1jcC0+Y2hpcC5sYWJlbCA9ICJtY3AyM3MwOCI7CisJfQogCW1jcC0+Y2hpcC5iYXNlID0gYmFzZTsKLQltY3AtPmNoaXAubmdwaW8gPSA4OwogCW1jcC0+Y2hpcC5jYW5fc2xlZXAgPSAxOwogCW1jcC0+Y2hpcC5kZXYgPSAmc3BpLT5kZXY7CiAJbWNwLT5jaGlwLm93bmVyID0gVEhJU19NT0RVTEU7CkBAIC0yNDgsNDUgKzMzNCwzOSBAQAogCS8qIHZlcmlmeSBNQ1BfSU9DT04uU0VRT1AgPSAwLCBzbyBzZXF1ZW50aWFsIHJlYWRzIHdvcmssCiAJICogYW5kIE1DUF9JT0NPTi5IQUVOID0gMSwgc28gd2Ugd29yayB3aXRoIGFsbCBjaGlwcy4KIAkgKi8KLQlzdGF0dXMgPSBtY3AyM3MwOF9yZWFkKG1jcCwgTUNQX0lPQ09OKTsKKwlzdGF0dXMgPSBtY3AtPm9wcy0+cmVhZChtY3AsIE1DUF9JT0NPTik7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAlpZiAoKHN0YXR1cyAmIElPQ09OX1NFUU9QKSB8fCAhKHN0YXR1cyAmIElPQ09OX0hBRU4pKSB7Ci0JCXN0YXR1cyAmPSB+SU9DT05fU0VRT1A7Ci0JCXN0YXR1cyB8PSBJT0NPTl9IQUVOOwotCQlzdGF0dXMgPSBtY3AyM3MwOF93cml0ZShtY3AsIE1DUF9JT0NPTiwgKHU4KSBzdGF0dXMpOworCQkvKiBtY3AyM3MxNyBoYXMgSU9DT04gdHdpY2UsIG1ha2Ugc3VyZSB0aGV5IGFyZSBpbiBzeW5jICovCisJCXN0YXR1cyAmPSB+KElPQ09OX1NFUU9QIHwgKElPQ09OX1NFUU9QIDw8IDgpKTsKKwkJc3RhdHVzIHw9IElPQ09OX0hBRU4gfCAoSU9DT05fSEFFTiA8PCA4KTsKKwkJc3RhdHVzID0gbWNwLT5vcHMtPndyaXRlKG1jcCwgTUNQX0lPQ09OLCBzdGF0dXMpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWdvdG8gZmFpbDsKIAl9CiAKIAkvKiBjb25maWd1cmUgfjEwMEsgcHVsbHVwcyAqLwotCXN0YXR1cyA9IG1jcDIzczA4X3dyaXRlKG1jcCwgTUNQX0dQUFUsIHB1bGx1cHMpOworCXN0YXR1cyA9IG1jcC0+b3BzLT53cml0ZShtY3AsIE1DUF9HUFBVLCBwdWxsdXBzKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCi0Jc3RhdHVzID0gbWNwMjNzMDhfcmVhZF9yZWdzKG1jcCwgMCwgbWNwLT5jYWNoZSwgc2l6ZW9mIG1jcC0+Y2FjaGUpOworCXN0YXR1cyA9IG1jcC0+b3BzLT5yZWFkX3JlZ3MobWNwLCAwLCBtY3AtPmNhY2hlLCBBUlJBWV9TSVpFKG1jcC0+Y2FjaGUpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCiAJLyogZGlzYWJsZSBpbnZlcnRlciBvbiBpbnB1dCAqLwogCWlmIChtY3AtPmNhY2hlW01DUF9JUE9MXSAhPSAwKSB7CiAJCW1jcC0+Y2FjaGVbTUNQX0lQT0xdID0gMDsKLQkJZG9fdXBkYXRlID0gMTsKKwkJc3RhdHVzID0gbWNwLT5vcHMtPndyaXRlKG1jcCwgTUNQX0lQT0wsIDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZmFpbDsKIAl9CiAKIAkvKiBkaXNhYmxlIGlycXMgKi8KIAlpZiAobWNwLT5jYWNoZVtNQ1BfR1BJTlRFTl0gIT0gMCkgewogCQltY3AtPmNhY2hlW01DUF9HUElOVEVOXSA9IDA7Ci0JCWRvX3VwZGF0ZSA9IDE7Ci0JfQotCi0JaWYgKGRvX3VwZGF0ZSkgewotCQl1OCB0eFs0XTsKLQotCQl0eFswXSA9IG1jcC0+YWRkcjsKLQkJdHhbMV0gPSBNQ1BfSVBPTDsKLQkJbWVtY3B5KCZ0eFsyXSwgJm1jcC0+Y2FjaGVbTUNQX0lQT0xdLCBzaXplb2YodHgpIC0gMik7Ci0JCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQobWNwLT5zcGksIHR4LCBzaXplb2YgdHgsIE5VTEwsIDApOworCQlzdGF0dXMgPSBtY3AtPm9wcy0+d3JpdGUobWNwLCBNQ1BfR1BJTlRFTiwgMCk7CiAJCWlmIChzdGF0dXMgPCAwKQogCQkJZ290byBmYWlsOwogCX0KQEAgLTMwNSwxOSArMzg1LDI2IEBACiAJdW5zaWduZWQJCQlhZGRyOwogCXVuc2lnbmVkCQkJY2hpcHMgPSAwOwogCXN0cnVjdCBtY3AyM3MwOF9kcml2ZXJfZGF0YQkqZGF0YTsKLQlpbnQJCQkJc3RhdHVzOworCWludAkJCQlzdGF0dXMsIHR5cGU7CiAJdW5zaWduZWQJCQliYXNlOwogCisJdHlwZSA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPmRyaXZlcl9kYXRhOworCiAJcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmICghcGRhdGEgfHwgIWdwaW9faXNfdmFsaWQocGRhdGEtPmJhc2UpKSB7CiAJCWRldl9kYmcoJnNwaS0+ZGV2LCAiaW52YWxpZCBvciBtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgNDsgYWRkcisrKSB7CisJZm9yIChhZGRyID0gMDsgYWRkciA8IEFSUkFZX1NJWkUocGRhdGEtPmNoaXApOyBhZGRyKyspIHsKIAkJaWYgKCFwZGF0YS0+Y2hpcFthZGRyXS5pc19wcmVzZW50KQogCQkJY29udGludWU7CiAJCWNoaXBzKys7CisJCWlmICgodHlwZSA9PSBNQ1BfVFlQRV9TMDgpICYmIChhZGRyID4gMykpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LAorCQkJCSJtY3AyM3MwOCBvbmx5IHN1cHBvcnRzIGFkZHJlc3MgMC4uM1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAlpZiAoIWNoaXBzKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTMyOSwxNiArNDE2LDE3IEBACiAJc3BpX3NldF9kcnZkYXRhKHNwaSwgZGF0YSk7CiAKIAliYXNlID0gcGRhdGEtPmJhc2U7Ci0JZm9yIChhZGRyID0gMDsgYWRkciA8IDQ7IGFkZHIrKykgeworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBBUlJBWV9TSVpFKHBkYXRhLT5jaGlwKTsgYWRkcisrKSB7CiAJCWlmICghcGRhdGEtPmNoaXBbYWRkcl0uaXNfcHJlc2VudCkKIAkJCWNvbnRpbnVlOwogCQljaGlwcy0tOwogCQlkYXRhLT5tY3BbYWRkcl0gPSAmZGF0YS0+Y2hpcFtjaGlwc107Ci0JCXN0YXR1cyA9IG1jcDIzczA4X3Byb2JlX29uZShzcGksIGFkZHIsIGJhc2UsCi0JCQkJcGRhdGEtPmNoaXBbYWRkcl0ucHVsbHVwcyk7CisJCXN0YXR1cyA9IG1jcDIzczA4X3Byb2JlX29uZShzcGksIGFkZHIsIHR5cGUsIGJhc2UsCisJCQkJCSAgICBwZGF0YS0+Y2hpcFthZGRyXS5wdWxsdXBzKTsKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlnb3RvIGZhaWw7Ci0JCWJhc2UgKz0gODsKKworCQliYXNlICs9ICh0eXBlID09IE1DUF9UWVBFX1MxNykgPyAxNiA6IDg7CiAJfQogCWRhdGEtPm5ncGlvID0gYmFzZSAtIHBkYXRhLT5iYXNlOwogCkBAIC0zNTgsNyArNDQ2LDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgNDsgYWRkcisrKSB7CisJZm9yIChhZGRyID0gMDsgYWRkciA8IEFSUkFZX1NJWkUoZGF0YS0+bWNwKTsgYWRkcisrKSB7CiAJCWludCB0bXA7CiAKIAkJaWYgKCFkYXRhLT5tY3BbYWRkcl0pCkBAIC0zODgsNyArNDc2LDcgQEAKIAkJfQogCX0KIAotCWZvciAoYWRkciA9IDA7IGFkZHIgPCA0OyBhZGRyKyspIHsKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgQVJSQVlfU0laRShkYXRhLT5tY3ApOyBhZGRyKyspIHsKIAkJaW50IHRtcDsKIAogCQlpZiAoIWRhdGEtPm1jcFthZGRyXSkKQEAgLTQwNSw5ICs0OTMsMTcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgbWNwMjNzMDhfaWRzW10gPSB7CisJeyAibWNwMjNzMDgiLCBNQ1BfVFlQRV9TMDggfSwKKwl7ICJtY3AyM3MxNyIsIE1DUF9UWVBFX1MxNyB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgbWNwMjNzMDhfaWRzKTsKKwogc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG1jcDIzczA4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbWNwMjNzMDhfcHJvYmUsCiAJLnJlbW92ZQkJPSBtY3AyM3MwOF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gbWNwMjNzMDhfaWRzLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gIm1jcDIzczA4IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCkBAIC00MzIsNCArNTI4LDMgQEAKIG1vZHVsZV9leGl0KG1jcDIzczA4X2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVMoInNwaTptY3AyM3MwOCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggYjQ3MzQyOWUuLjJmYzI1ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtNDYyLDcgKzQ2Miw4IEBACiB7CiAJc3RydWN0IHBjYTk1M3hfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCWNvbnN0IHVpbnQxNl90ICp2YWw7CisJY29uc3QgX19iZTMyICp2YWw7CisJaW50IHNpemU7CiAKIAlub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKIAlpZiAobm9kZSA9PSBOVUxMKQpAQCAtNDc1LDEzICs0NzYsMTMgQEAKIAl9CiAKIAlwZGF0YS0+Z3Bpb19iYXNlID0gLTE7Ci0JdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJsaW51eCxncGlvLWJhc2UiLCBOVUxMKTsKKwl2YWwgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgImxpbnV4LGdwaW8tYmFzZSIsICZzaXplKTsKIAlpZiAodmFsKSB7Ci0JCWlmICgqdmFsIDwgMCkKLQkJCWRldl93YXJuKCZjbGllbnQtPmRldiwKLQkJCQkgImludmFsaWQgZ3Bpby1iYXNlIGluIGRldmljZSB0cmVlXG4iKTsKKwkJaWYgKHNpemUgIT0gc2l6ZW9mKCp2YWwpKQorCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiJXM6IHdyb25nIGxpbnV4LGdwaW8tYmFzZVxuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKIAkJZWxzZQotCQkJcGRhdGEtPmdwaW9fYmFzZSA9ICp2YWw7CisJCQlwZGF0YS0+Z3Bpb19iYXNlID0gYmUzMl90b19jcHVwKHZhbCk7CiAJfQogCiAJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJwb2xhcml0eSIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3N4MTUweC5jIGIvZHJpdmVycy9ncGlvL3N4MTUweC5jCmluZGV4IGU2MGJlMDAuLmQyZjg3NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9zeDE1MHguYworKysgYi9kcml2ZXJzL2dwaW8vc3gxNTB4LmMKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvc3gxNTB4Lmg+CiAKKyNkZWZpbmUgTk9fVVBEQVRFX1BFTkRJTkcJLTEKKwogc3RydWN0IHN4MTUweF9kZXZpY2VfZGF0YSB7CiAJdTggcmVnX3B1bGx1cDsKIAl1OCByZWdfcHVsbGRuOwpAQCAtNDcsOCArNDksMTEgQEAKIAljb25zdCBzdHJ1Y3Qgc3gxNTB4X2RldmljZV9kYXRhICpkZXZfY2ZnOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9zdW1tYXJ5OwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9iYXNlOworCWludAkJCQkgaXJxX3VwZGF0ZTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfc2Vuc2U7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICAgaXJxX3NldF90eXBlX3BlbmRpbmc7CisJdTMyCQkJCSBpcnFfbWFza2VkOworCXUzMgkJCQkgZGV2X3NlbnNlOworCXUzMgkJCQkgZGV2X21hc2tlZDsKIAlzdHJ1Y3QgaXJxX2NoaXAgICAgICAgICAgICAgICAgICBpcnFfY2hpcDsKIAlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgICBsb2NrOwogfTsKQEAgLTMxMiw5ICszMTcsOCBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihpYywgc3RydWN0IHN4MTUweF9jaGlwLCBpcnFfY2hpcCk7CiAJbiA9IGQtPmlycSAtIGNoaXAtPmlycV9iYXNlOwotCi0Jc3gxNTB4X3dyaXRlX2NmZyhjaGlwLCBuLCAxLCBjaGlwLT5kZXZfY2ZnLT5yZWdfaXJxX21hc2ssIDEpOwotCXN4MTUweF93cml0ZV9jZmcoY2hpcCwgbiwgMiwgY2hpcC0+ZGV2X2NmZy0+cmVnX3NlbnNlLCAwKTsKKwljaGlwLT5pcnFfbWFza2VkIHw9ICgxIDw8IG4pOworCWNoaXAtPmlycV91cGRhdGUgPSBuOwogfQogCiBzdGF0aWMgdm9pZCBzeDE1MHhfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCkBAIC0zMjYsOSArMzMwLDggQEAKIAljaGlwID0gY29udGFpbmVyX29mKGljLCBzdHJ1Y3Qgc3gxNTB4X2NoaXAsIGlycV9jaGlwKTsKIAluID0gZC0+aXJxIC0gY2hpcC0+aXJxX2Jhc2U7CiAKLQlzeDE1MHhfd3JpdGVfY2ZnKGNoaXAsIG4sIDEsIGNoaXAtPmRldl9jZmctPnJlZ19pcnFfbWFzaywgMCk7Ci0Jc3gxNTB4X3dyaXRlX2NmZyhjaGlwLCBuLCAyLCBjaGlwLT5kZXZfY2ZnLT5yZWdfc2Vuc2UsCi0JCQkgY2hpcC0+aXJxX3NlbnNlID4+IChuICogMikpOworCWNoaXAtPmlycV9tYXNrZWQgJj0gfigxIDw8IG4pOworCWNoaXAtPmlycV91cGRhdGUgPSBuOwogfQogCiBzdGF0aWMgaW50IHN4MTUweF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQpAQCAtMzUwLDcgKzM1Myw3IEBACiAKIAljaGlwLT5pcnFfc2Vuc2UgJj0gfigzVUwgPDwgKG4gKiAyKSk7CiAJY2hpcC0+aXJxX3NlbnNlIHw9IHZhbCA8PCAobiAqIDIpOwotCWNoaXAtPmlycV9zZXRfdHlwZV9wZW5kaW5nIHw9IEJJVChuKTsKKwljaGlwLT5pcnFfdXBkYXRlID0gbjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA0LDE1ICs0MDcsMjkgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoaWMsIHN0cnVjdCBzeDE1MHhfY2hpcCwgaXJxX2NoaXApOwogCi0Jd2hpbGUgKGNoaXAtPmlycV9zZXRfdHlwZV9wZW5kaW5nKSB7Ci0JCW4gPSBfX2ZmcyhjaGlwLT5pcnFfc2V0X3R5cGVfcGVuZGluZyk7Ci0JCWNoaXAtPmlycV9zZXRfdHlwZV9wZW5kaW5nICY9IH5CSVQobik7Ci0JCWlmICghKGlycV90b19kZXNjKG4gKyBjaGlwLT5pcnFfYmFzZSktPnN0YXR1cyAmIElSUV9NQVNLRUQpKQotCQkJc3gxNTB4X3dyaXRlX2NmZyhjaGlwLCBuLCAyLAotCQkJCQljaGlwLT5kZXZfY2ZnLT5yZWdfc2Vuc2UsCi0JCQkJCWNoaXAtPmlycV9zZW5zZSA+PiAobiAqIDIpKTsKLQl9CisJaWYgKGNoaXAtPmlycV91cGRhdGUgPT0gTk9fVVBEQVRFX1BFTkRJTkcpCisJCWdvdG8gb3V0OwogCisJbiA9IGNoaXAtPmlycV91cGRhdGU7CisJY2hpcC0+aXJxX3VwZGF0ZSA9IE5PX1VQREFURV9QRU5ESU5HOworCisJLyogQXZvaWQgdXBkYXRlcyBpZiBub3RoaW5nIGNoYW5nZWQgKi8KKwlpZiAoY2hpcC0+ZGV2X3NlbnNlID09IGNoaXAtPmlycV9zZW5zZSAmJgorCSAgICBjaGlwLT5kZXZfc2Vuc2UgPT0gY2hpcC0+aXJxX21hc2tlZCkKKwkJZ290byBvdXQ7CisKKwljaGlwLT5kZXZfc2Vuc2UgPSBjaGlwLT5pcnFfc2Vuc2U7CisJY2hpcC0+ZGV2X21hc2tlZCA9IGNoaXAtPmlycV9tYXNrZWQ7CisKKwlpZiAoY2hpcC0+aXJxX21hc2tlZCAmICgxIDw8IG4pKSB7CisJCXN4MTUweF93cml0ZV9jZmcoY2hpcCwgbiwgMSwgY2hpcC0+ZGV2X2NmZy0+cmVnX2lycV9tYXNrLCAxKTsKKwkJc3gxNTB4X3dyaXRlX2NmZyhjaGlwLCBuLCAyLCBjaGlwLT5kZXZfY2ZnLT5yZWdfc2Vuc2UsIDApOworCX0gZWxzZSB7CisJCXN4MTUweF93cml0ZV9jZmcoY2hpcCwgbiwgMSwgY2hpcC0+ZGV2X2NmZy0+cmVnX2lycV9tYXNrLCAwKTsKKwkJc3gxNTB4X3dyaXRlX2NmZyhjaGlwLCBuLCAyLCBjaGlwLT5kZXZfY2ZnLT5yZWdfc2Vuc2UsCisJCQkJIGNoaXAtPmlycV9zZW5zZSA+PiAobiAqIDIpKTsKKwl9CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKIH0KIApAQCAtNDQ1LDggKzQ2MiwxMSBAQAogCWNoaXAtPmlycV9jaGlwLmlycV9idXNfc3luY191bmxvY2sgPSBzeDE1MHhfaXJxX2J1c19zeW5jX3VubG9jazsKIAljaGlwLT5pcnFfc3VtbWFyeSAgICAgICAgICAgICAgICAgID0gLTE7CiAJY2hpcC0+aXJxX2Jhc2UgICAgICAgICAgICAgICAgICAgICA9IC0xOworCWNoaXAtPmlycV9tYXNrZWQgICAgICAgICAgICAgICAgICAgPSB+MDsKIAljaGlwLT5pcnFfc2Vuc2UgICAgICAgICAgICAgICAgICAgID0gMDsKLQljaGlwLT5pcnFfc2V0X3R5cGVfcGVuZGluZyAgICAgICAgID0gMDsKKwljaGlwLT5kZXZfbWFza2VkICAgICAgICAgICAgICAgICAgID0gfjA7CisJY2hpcC0+ZGV2X3NlbnNlICAgICAgICAgICAgICAgICAgICA9IDA7CisJY2hpcC0+aXJxX3VwZGF0ZQkJICAgPSBOT19VUERBVEVfUEVORElORzsKIH0KIAogc3RhdGljIGludCBzeDE1MHhfaW5pdF9pbyhzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAsIHU4IGJhc2UsIHUxNiBjZmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3NtYW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc21hbi5jCmluZGV4IDQ2M2FlZDkuLjM0NjY0NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc21hbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc21hbi5jCkBAIC01OSw5ICs1OSw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlzbWFuLT5tbSA9IChzdHJ1Y3QgZHJtX3NtYW5fbW0gKikga2NhbGxvYyhudW1fbWFuYWdlcnMsCi0JCQkJCQkgIHNpemVvZigqc21hbi0+bW0pLAotCQkJCQkJICBHRlBfS0VSTkVMKTsKKwlzbWFuLT5tbSA9IGtjYWxsb2MobnVtX21hbmFnZXJzLCBzaXplb2YoKnNtYW4tPm1tKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzbWFuLT5tbSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDQ0OTY1MDUuLjUwMDQ3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMzgzLDYgKzM4Myw3IEBACiAJdTMyIHNhdmVEU1BBQ05UUjsKIAl1MzIgc2F2ZURTUEJDTlRSOwogCXUzMiBzYXZlRFNQQVJCOworCXUzMiBzYXZlSFdTOwogCXUzMiBzYXZlUElQRUFDT05GOwogCXUzMiBzYXZlUElQRUJDT05GOwogCXUzMiBzYXZlUElQRUFTUkM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCmluZGV4IDdlOTkyYTguLmRhNDc0MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCkBAIC03OTYsNiArNzk2LDkgQEAKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGRldiwgTEJCLCAmZGV2X3ByaXYtPnNhdmVMQkIpOwogCisJLyogSGFyZHdhcmUgc3RhdHVzIHBhZ2UgKi8KKwlkZXZfcHJpdi0+c2F2ZUhXUyA9IEk5MTVfUkVBRChIV1NfUEdBKTsKKwogCWk5MTVfc2F2ZV9kaXNwbGF5KGRldik7CiAKIAkvKiBJbnRlcnJ1cHQgc3RhdGUgKi8KQEAgLTg0Miw2ICs4NDUsOSBAQAogCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldi0+cGRldiwgTEJCLCBkZXZfcHJpdi0+c2F2ZUxCQik7CiAKKwkvKiBIYXJkd2FyZSBzdGF0dXMgcGFnZSAqLworCUk5MTVfV1JJVEUoSFdTX1BHQSwgZGV2X3ByaXYtPnNhdmVIV1MpOworCiAJaTkxNV9yZXN0b3JlX2Rpc3BsYXkoZGV2KTsKIAogCS8qIEludGVycnVwdCBzdGF0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmFja2xpZ2h0LmMKaW5kZXggZDNhOWM2ZS4uMDBhNTVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JhY2tsaWdodC5jCkBAIC04OCwxOCArODgsMjAgQEAKIAkudXBkYXRlX3N0YXR1cyA9IG52NTBfc2V0X2ludGVuc2l0eSwKIH07CiAKLXN0YXRpYyBpbnQgbm91dmVhdV9udjQwX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG5vdXZlYXVfbnY0MF9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwogCiAJaWYgKCEobnZfcmQzMihkZXYsIE5WNDBfUE1DX0JBQ0tMSUdIVCkgJiBOVjQwX1BNQ19CQUNLTElHSFRfTUFTSykpCiAJCXJldHVybiAwOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gMzE7Ci0JYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJudl9iYWNrbGlnaHQiLCAmZGV2LT5wZGV2LT5kZXYsIGRldiwKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm52X2JhY2tsaWdodCIsICZjb25uZWN0b3ItPmtkZXYsIGRldiwKIAkJCQkgICAgICAgJm52NDBfYmxfb3BzLCAmcHJvcHMpOwogCWlmIChJU19FUlIoYmQpKQogCQlyZXR1cm4gUFRSX0VSUihiZCk7CkBAIC0xMTEsMTggKzExMywyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5vdXZlYXVfbnY1MF9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBub3V2ZWF1X252NTBfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKIAogCWlmICghbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfU09SX0JBQ0tMSUdIVCkpCiAJCXJldHVybiAwOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gMTAyNTsKLQliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm52X2JhY2tsaWdodCIsICZkZXYtPnBkZXYtPmRldiwgZGV2LAorCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigibnZfYmFja2xpZ2h0IiwgJmNvbm5lY3Rvci0+a2RldiwgZGV2LAogCQkJCSAgICAgICAmbnY1MF9ibF9vcHMsICZwcm9wcyk7CiAJaWYgKElTX0VSUihiZCkpCiAJCXJldHVybiBQVFJfRVJSKGJkKTsKQEAgLTEzMyw4ICsxMzcsOSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbm91dmVhdV9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoraW50IG5vdXZlYXVfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogI2lmZGVmIENPTkZJR19BQ1BJCkBAIC0xNDcsOSArMTUyLDkgQEAKIAogCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgewogCWNhc2UgTlZfNDA6Ci0JCXJldHVybiBub3V2ZWF1X252NDBfYmFja2xpZ2h0X2luaXQoZGV2KTsKKwkJcmV0dXJuIG5vdXZlYXVfbnY0MF9iYWNrbGlnaHRfaW5pdChjb25uZWN0b3IpOwogCWNhc2UgTlZfNTA6Ci0JCXJldHVybiBub3V2ZWF1X252NTBfYmFja2xpZ2h0X2luaXQoZGV2KTsKKwkJcmV0dXJuIG5vdXZlYXVfbnY1MF9iYWNrbGlnaHRfaW5pdChjb25uZWN0b3IpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTE1Nyw4ICsxNjIsOSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG5vdXZlYXVfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3ZvaWQgbm91dmVhdV9iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJaWYgKGRldl9wcml2LT5iYWNrbGlnaHQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCmluZGV4IDM5MGQ4MmMuLjdhZTE1MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYwpAQCAtMTE2LDYgKzExNiwxMCBAQAogCQkJCSAgICAgIG5vdXZlYXVfY29ubmVjdG9yX2hvdHBsdWcsIGNvbm5lY3Rvcik7CiAJfQogCisJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFMgfHwKKwkgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKQorCQlub3V2ZWF1X2JhY2tsaWdodF9leGl0KGNvbm5lY3Rvcik7CisKIAlrZnJlZShudl9jb25uZWN0b3ItPmVkaWQpOwogCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGNvbm5lY3Rvcik7CiAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CkBAIC04OTQsNiArODk4LDExIEBACiAJfQogCiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKKworCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTIHx8CisJICAgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkKKwkJbm91dmVhdV9iYWNrbGlnaHRfaW5pdChjb25uZWN0b3IpOworCiAJZGNiLT5kcm0gPSBjb25uZWN0b3I7CiAJcmV0dXJuIGRjYi0+ZHJtOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCAwNjExMTg4Li5mZmYxODBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTk5OSwxNSArOTk5LDE1IEBACiAKIC8qIG5vdXZlYXVfYmFja2xpZ2h0LmMgKi8KICNpZmRlZiBDT05GSUdfRFJNX05PVVZFQVVfQkFDS0xJR0hUCi1leHRlcm4gaW50IG5vdXZlYXVfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7Ci1leHRlcm4gdm9pZCBub3V2ZWF1X2JhY2tsaWdodF9leGl0KHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIGludCBub3V2ZWF1X2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICopOworZXh0ZXJuIHZvaWQgbm91dmVhdV9iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBub3V2ZWF1X2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBub3V2ZWF1X2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpkZXYpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBub3V2ZWF1X2JhY2tsaWdodF9leGl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIG5vdXZlYXVfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmRldikgeyB9CiAjZW5kaWYKIAogLyogbm91dmVhdV9iaW9zLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwppbmRleCAwNTI5NDkxLi40ZmNiZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCkBAIC03MDQsMTAgKzcwNCw2IEBACiAJCQlnb3RvIG91dF9mZW5jZTsKIAl9CiAKLQlyZXQgPSBub3V2ZWF1X2JhY2tsaWdodF9pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJTlZfRVJST1IoZGV2LCAiRXJyb3IgJWQgcmVnaXN0ZXJpbmcgYmFja2xpZ2h0XG4iLCByZXQpOwotCiAJbm91dmVhdV9mYmNvbl9pbml0KGRldik7CiAJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRldik7CiAJcmV0dXJuIDA7CkBAIC03NTksOCArNzU1LDYgQEAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2VuZ2luZSAqZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7CiAKLQlub3V2ZWF1X2JhY2tsaWdodF9leGl0KGRldik7Ci0KIAlpZiAoIWVuZ2luZS0+Z3JhcGguYWNjZWxfYmxvY2tlZCkgewogCQlub3V2ZWF1X2ZlbmNlX2ZpbmkoZGV2KTsKIAkJbm91dmVhdV9jaGFubmVsX3B1dF91bmxvY2tlZCgmZGV2X3ByaXYtPmNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCmluZGV4IDFjMDJkMjMuLjk3NDZmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgRFJNX1JBREVPTl9LTVMKIAlib29sICJFbmFibGUgbW9kZXNldHRpbmcgb24gcmFkZW9uIGJ5IGRlZmF1bHQgLSBORVcgRFJJVkVSIgogCWRlcGVuZHMgb24gRFJNX1JBREVPTgorCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGtlcm5lbCBtb2Rlc2V0dGluZyBlbmFibGVkIGJ5IGRlZmF1bHQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCmluZGV4IGI5NDI3ZTYuLjk0MTA4MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwpAQCAtMjk4Nyw3ICsyOTg3LDcgQEAKIAogCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CisJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCBmY2MyM2U0ZS4uZjIyMDRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTM2MTcsNyArMzYxNyw3IEBACiAJaWYgKGkgPCByZGV2LT51c2VjX3RpbWVvdXQpIHsKIAkJRFJNX0lORk8oImliIHRlc3Qgc3VjY2VlZGVkIGluICV1IHVzZWNzXG4iLCBpKTsKIAl9IGVsc2UgewotCQlEUk1fRVJST1IoInJhZGVvbjogaWIgdGVzdCBmYWlsZWQgKHNyYWN0aCgweCUwNFgpPTB4JTA4WClcbiIsCisJCURSTV9FUlJPUigicmFkZW9uOiBpYiB0ZXN0IGZhaWxlZCAoc2NyYXRjaCgweCUwNFgpPTB4JTA4WClcbiIsCiAJCQkgIHNjcmF0Y2gsIHRtcCk7CiAJCXIgPSAtRUlOVkFMOwogCX0KQEAgLTM2MzcsMTMgKzM2MzcsMTMgQEAKIAogCXIgPSByYWRlb25faWJfcG9vbF9pbml0KHJkZXYpOwogCWlmIChyKSB7Ci0JCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgcG9vbCAoJWQpLlxuIiwgcik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKIAkJcjEwMF9pYl9maW5pKHJkZXYpOwogCQlyZXR1cm4gcjsKIAl9CiAJciA9IHIxMDBfaWJfdGVzdChyZGV2KTsKIAlpZiAocikgewotCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQlyMTAwX2liX2ZpbmkocmRldik7CiAJCXJldHVybiByOwogCX0KQEAgLTM3OTksMTIgKzM3OTksMTIgQEAKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7Ci0JCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKIAlpZiAocikgewotCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCAwNjllZmE4Li44NzEzNzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtMTQwMSwxMiArMTQwMSwxMiBAQAogCS8qIDFNIHJpbmcgYnVmZmVyICovCiAJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CiAJaWYgKHIpIHsKLQkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KIAlyID0gcjEwMF9pYl9pbml0KHJkZXYpOwogCWlmIChyKSB7Ci0JCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IDBiNTllZDcuLjQxN2ZhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC0yNjAsMTMgKzI2MCwxMyBAQAogCS8qIDFNIHJpbmcgYnVmZmVyICovCiAJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CiAJaWYgKHIpIHsKLQkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KIAlyNDIwX2NwX2VycmF0YV9pbml0KHJkZXYpOwogCXIgPSByMTAwX2liX2luaXQocmRldik7CiAJaWYgKHIpIHsKLQkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggMmNlODBkOS4uMzA4MWQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTE5MywxMiArMTkzLDEyIEBACiAJLyogMU0gcmluZyBidWZmZXIgKi8KIAlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKIAlpZiAocikgewotCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCXIgPSByMTAwX2liX2luaXQocmRldik7CiAJaWYgKHIpIHsKLQkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggMTJmZGViZi4uYmUyNzFjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTI0NjQsNyArMjQ2NCw3IEBACiAKIAlyID0gcjYwMF9pYl90ZXN0KHJkZXYpOwogCWlmIChyKSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwppbmRleCAzZjNjOWFhLi4yOGM3OTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCkBAIC00MCw2ICs0MCwxMCBAQAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJICAgICAgIGJvb2wgY29ubmVjdGVkKTsKIAorZXh0ZXJuIHZvaWQKK3JhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X2luaXQoc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciwKKwkJCSAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmRybV9jb25uZWN0b3IpOworCiB2b2lkIHJhZGVvbl9jb25uZWN0b3JfaG90cGx1ZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKQEAgLTE1MjYsNiArMTUzMCwxNyBAQAogCQljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CiAJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uc3VicGl4ZWxfb3JkZXIgPSBzdWJwaXhlbF9vcmRlcjsKIAlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOworCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUykgeworCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmNvZGVyOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJtX2VuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlcjsKKworCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2Rlcihkcm1fZW5jb2Rlcik7CisJCQlpZiAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQgPT0gRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZEUykKKwkJCQlyYWRlb25fbGVnYWN5X2JhY2tsaWdodF9pbml0KHJhZGVvbl9lbmNvZGVyLCBjb25uZWN0b3IpOworCQl9CisJfQogCXJldHVybjsKIAogZmFpbGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwppbmRleCA1OWY4MzRiLi41YjU0MjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwpAQCAtMjgsNiArMjgsMTAgQEAKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAiYXRvbS5oIgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAorI2luY2x1ZGUgPGFzbS9iYWNrbGlnaHQuaD4KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CkBAIC0zOSw3ICs0Myw3IEBACiAJcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgPSAwOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X2x2ZHNfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQorc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9sdmRzX3VwZGF0ZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNDcsMTUgKzUxLDIzIEBACiAJdWludDMyX3QgbHZkc19nZW5fY250bCwgbHZkc19wbGxfY250bCwgcGl4Y2xrc19jbnRsLCBkaXNwX3B3cl9tYW47CiAJaW50IHBhbmVsX3B3cl9kZWxheSA9IDIwMDA7CiAJYm9vbCBpc19tYWMgPSBmYWxzZTsKKwl1aW50OF90IGJhY2tsaWdodF9sZXZlbDsKIAlEUk1fREVCVUdfS01TKCJcbiIpOwogCisJbHZkc19nZW5fY250bCA9IFJSRUczMihSQURFT05fTFZEU19HRU5fQ05UTCk7CisJYmFja2xpZ2h0X2xldmVsID0gKGx2ZHNfZ2VuX2NudGwgPj4gUkFERU9OX0xWRFNfQkxfTU9EX0xFVkVMX1NISUZUKSAmIDB4ZmY7CisKIAlpZiAocmFkZW9uX2VuY29kZXItPmVuY19wcml2KSB7CiAJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKIAkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqbHZkcyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKIAkJCXBhbmVsX3B3cl9kZWxheSA9IGx2ZHMtPnBhbmVsX3B3cl9kZWxheTsKKwkJCWlmIChsdmRzLT5ibF9kZXYpCisJCQkJYmFja2xpZ2h0X2xldmVsID0gbHZkcy0+YmFja2xpZ2h0X2xldmVsOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2x2ZHMgKmx2ZHMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CiAJCQlwYW5lbF9wd3JfZGVsYXkgPSBsdmRzLT5wYW5lbF9wd3JfZGVsYXk7CisJCQlpZiAobHZkcy0+YmxfZGV2KQorCQkJCWJhY2tsaWdodF9sZXZlbCA9IGx2ZHMtPmJhY2tsaWdodF9sZXZlbDsKIAkJfQogCX0KIApAQCAtODIsMTEgKzk0LDEzIEBACiAJCWx2ZHNfcGxsX2NudGwgJj0gflJBREVPTl9MVkRTX1BMTF9SRVNFVDsKIAkJV1JFRzMyKFJBREVPTl9MVkRTX1BMTF9DTlRMLCBsdmRzX3BsbF9jbnRsKTsKIAotCQlsdmRzX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9MVkRTX0dFTl9DTlRMKTsKLQkJbHZkc19nZW5fY250bCB8PSAoUkFERU9OX0xWRFNfT04gfCBSQURFT05fTFZEU19FTiB8IFJBREVPTl9MVkRTX0RJR09OIHwgUkFERU9OX0xWRFNfQkxPTik7CisJCWx2ZHNfZ2VuX2NudGwgJj0gfihSQURFT05fTFZEU19ESVNQTEFZX0RJUyB8CisJCQkJICAgUkFERU9OX0xWRFNfQkxfTU9EX0xFVkVMX01BU0spOworCQlsdmRzX2dlbl9jbnRsIHw9IChSQURFT05fTFZEU19PTiB8IFJBREVPTl9MVkRTX0VOIHwKKwkJCQkgIFJBREVPTl9MVkRTX0RJR09OIHwgUkFERU9OX0xWRFNfQkxPTiB8CisJCQkJICAoYmFja2xpZ2h0X2xldmVsIDw8IFJBREVPTl9MVkRTX0JMX01PRF9MRVZFTF9TSElGVCkpOwogCQlpZiAoaXNfbWFjKQogCQkJbHZkc19nZW5fY250bCB8PSBSQURFT05fTFZEU19CTF9NT0RfRU47Ci0JCWx2ZHNfZ2VuX2NudGwgJj0gfihSQURFT05fTFZEU19ESVNQTEFZX0RJUyk7CiAJCXVkZWxheShwYW5lbF9wd3JfZGVsYXkgKiAxMDAwKTsKIAkJV1JFRzMyKFJBREVPTl9MVkRTX0dFTl9DTlRMLCBsdmRzX2dlbl9jbnRsKTsKIAkJYnJlYWs7CkBAIC05NSw3ICsxMDksNiBAQAogCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CiAJCXBpeGNsa3NfY250bCA9IFJSRUczMl9QTEwoUkFERU9OX1BJWENMS1NfQ05UTCk7CiAJCVdSRUczMl9QTExfUChSQURFT05fUElYQ0xLU19DTlRMLCAwLCB+UkFERU9OX1BJWENMS19MVkRTX0FMV0FZU19PTmIpOwotCQlsdmRzX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9MVkRTX0dFTl9DTlRMKTsKIAkJbHZkc19nZW5fY250bCB8PSBSQURFT05fTFZEU19ESVNQTEFZX0RJUzsKIAkJaWYgKGlzX21hYykgewogCQkJbHZkc19nZW5fY250bCAmPSB+UkFERU9OX0xWRFNfQkxfTU9EX0VOOwpAQCAtMTE5LDYgKzEzMiwyNSBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfbHZkc19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCit7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBlbmNvZGVyLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlpZiAocmFkZW9uX2VuY29kZXItPmVuY19wcml2KSB7CisJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqbHZkcyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJCWx2ZHMtPmRwbXNfbW9kZSA9IG1vZGU7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfbHZkcyAqbHZkcyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJCWx2ZHMtPmRwbXNfbW9kZSA9IG1vZGU7CisJCX0KKwl9CisKKwlyYWRlb25fbGVnYWN5X2x2ZHNfdXBkYXRlKGVuY29kZXIsIG1vZGUpOworfQorCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X2x2ZHNfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBlbmNvZGVyLT5kZXYtPmRldl9wcml2YXRlOwpAQCAtMjM3LDkgKzI2OSwyMjIgQEAKIAkuZGlzYWJsZSA9IHJhZGVvbl9sZWdhY3lfZW5jb2Rlcl9kaXNhYmxlLAogfTsKIAorI2lmZGVmIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFCisKKyNkZWZpbmUgTUFYX1JBREVPTl9MRVZFTCAweEZGCisKK3N0cnVjdCByYWRlb25fYmFja2xpZ2h0X3ByaXZkYXRhIHsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXI7CisJdWludDhfdCBuZWdhdGl2ZTsKK307CisKK3N0YXRpYyB1aW50OF90IHJhZGVvbl9sZWdhY3lfbHZkc19sZXZlbChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJc3RydWN0IHJhZGVvbl9iYWNrbGlnaHRfcHJpdmRhdGEgKnBkYXRhID0gYmxfZ2V0X2RhdGEoYmQpOworCXVpbnQ4X3QgbGV2ZWw7CisKKwkvKiBDb252ZXJ0IGJyaWdodG5lc3MgdG8gaGFyZHdhcmUgbGV2ZWwgKi8KKwlpZiAoYmQtPnByb3BzLmJyaWdodG5lc3MgPCAwKQorCQlsZXZlbCA9IDA7CisJZWxzZSBpZiAoYmQtPnByb3BzLmJyaWdodG5lc3MgPiBNQVhfUkFERU9OX0xFVkVMKQorCQlsZXZlbCA9IE1BWF9SQURFT05fTEVWRUw7CisJZWxzZQorCQlsZXZlbCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOworCisJaWYgKHBkYXRhLT5uZWdhdGl2ZSkKKwkJbGV2ZWwgPSBNQVhfUkFERU9OX0xFVkVMIC0gbGV2ZWw7CisKKwlyZXR1cm4gbGV2ZWw7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX2xlZ2FjeV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJc3RydWN0IHJhZGVvbl9iYWNrbGlnaHRfcHJpdmRhdGEgKnBkYXRhID0gYmxfZ2V0X2RhdGEoYmQpOworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSBwZGF0YS0+ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmFkZW9uX2VuY29kZXItPmJhc2UuZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PTjsKKworCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpIHsKKwkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpsdmRzID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJZHBtc19tb2RlID0gbHZkcy0+ZHBtc19tb2RlOworCQkJbHZkcy0+YmFja2xpZ2h0X2xldmVsID0gcmFkZW9uX2xlZ2FjeV9sdmRzX2xldmVsKGJkKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9sdmRzICpsdmRzID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJZHBtc19tb2RlID0gbHZkcy0+ZHBtc19tb2RlOworCQkJbHZkcy0+YmFja2xpZ2h0X2xldmVsID0gcmFkZW9uX2xlZ2FjeV9sdmRzX2xldmVsKGJkKTsKKwkJfQorCX0KKworCWlmIChiZC0+cHJvcHMuYnJpZ2h0bmVzcyA+IDApCisJCXJhZGVvbl9sZWdhY3lfbHZkc191cGRhdGUoJnJhZGVvbl9lbmNvZGVyLT5iYXNlLCBkcG1zX21vZGUpOworCWVsc2UKKwkJcmFkZW9uX2xlZ2FjeV9sdmRzX3VwZGF0ZSgmcmFkZW9uX2VuY29kZXItPmJhc2UsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2JhY2tsaWdodF9wcml2ZGF0YSAqcGRhdGEgPSBibF9nZXRfZGF0YShiZCk7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHBkYXRhLT5lbmNvZGVyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQ4X3QgYmFja2xpZ2h0X2xldmVsOworCisJYmFja2xpZ2h0X2xldmVsID0gKFJSRUczMihSQURFT05fTFZEU19HRU5fQ05UTCkgPj4KKwkJCSAgIFJBREVPTl9MVkRTX0JMX01PRF9MRVZFTF9TSElGVCkgJiAweGZmOworCisJcmV0dXJuIHBkYXRhLT5uZWdhdGl2ZSA/IE1BWF9SQURFT05fTEVWRUwgLSBiYWNrbGlnaHRfbGV2ZWwgOiBiYWNrbGlnaHRfbGV2ZWw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyByYWRlb25fYmFja2xpZ2h0X29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSByYWRlb25fbGVnYWN5X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKKwkudXBkYXRlX3N0YXR1cwk9IHJhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCit9OworCit2b2lkIHJhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X2luaXQoc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciwKKwkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpkcm1fY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CisJc3RydWN0IHJhZGVvbl9iYWNrbGlnaHRfcHJpdmRhdGEgKnBkYXRhOworCXVpbnQ4X3QgYmFja2xpZ2h0X2xldmVsOworCisJaWYgKCFyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpCisJCXJldHVybjsKKworI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAorCWlmICghcG1hY19oYXNfYmFja2xpZ2h0X3R5cGUoImF0aSIpICYmCisJICAgICFwbWFjX2hhc19iYWNrbGlnaHRfdHlwZSgibW5jYSIpKQorCQlyZXR1cm47CisjZW5kaWYKKworCXBkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9iYWNrbGlnaHRfcHJpdmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYXRhKSB7CisJCURSTV9FUlJPUigiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IE1BWF9SQURFT05fTEVWRUw7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CisJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJyYWRlb25fYmwiLCAmZHJtX2Nvbm5lY3Rvci0+a2RldiwKKwkJCQkgICAgICAgcGRhdGEsICZyYWRlb25fYmFja2xpZ2h0X29wcywgJnByb3BzKTsKKwlpZiAoSVNfRVJSKGJkKSkgeworCQlEUk1fRVJST1IoIkJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwZGF0YS0+ZW5jb2RlciA9IHJhZGVvbl9lbmNvZGVyOworCisJYmFja2xpZ2h0X2xldmVsID0gKFJSRUczMihSQURFT05fTFZEU19HRU5fQ05UTCkgPj4KKwkJCSAgIFJBREVPTl9MVkRTX0JMX01PRF9MRVZFTF9TSElGVCkgJiAweGZmOworCisJLyogRmlyc3QsIHRyeSB0byBkZXRlY3QgYmFja2xpZ2h0IGxldmVsIHNlbnNlIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uCisJICogdGhhdCBmaXJtd2FyZSBzZXQgaXQgdXAgYXQgZnVsbCBicmlnaHRuZXNzCisJICovCisJaWYgKGJhY2tsaWdodF9sZXZlbCA9PSAwKQorCQlwZGF0YS0+bmVnYXRpdmUgPSB0cnVlOworCWVsc2UgaWYgKGJhY2tsaWdodF9sZXZlbCA9PSAweGZmKQorCQlwZGF0YS0+bmVnYXRpdmUgPSBmYWxzZTsKKwllbHNlIHsKKwkJLyogWFhYIGhhY2suLi4gbWF5YmUgc29tZSBkYXkgd2UgY2FuIGZpZ3VyZSBvdXQgaW4gd2hhdCBkaXJlY3Rpb24KKwkJICogYmFja2xpZ2h0IHNob3VsZCB3b3JrIG9uIGEgZ2l2ZW4gcGFuZWw/CisJCSAqLworCQlwZGF0YS0+bmVnYXRpdmUgPSAocmRldi0+ZmFtaWx5ICE9IENISVBfUlYyMDAgJiYKKwkJCQkgICByZGV2LT5mYW1pbHkgIT0gQ0hJUF9SVjI1MCAmJgorCQkJCSAgIHJkZXYtPmZhbWlseSAhPSBDSElQX1JWMjgwICYmCisJCQkJICAgcmRldi0+ZmFtaWx5ICE9IENISVBfUlYzNTApOworCisjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCisJCXBkYXRhLT5uZWdhdGl2ZSA9IChwZGF0YS0+bmVnYXRpdmUgfHwKKwkJCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpIHx8CisJCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAorCQkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiw1IikpOworI2VuZGlmCisJfQorCisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmx2ZHMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCWx2ZHMtPmJsX2RldiA9IGJkOworCX0gZWxzZSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9sdmRzICpsdmRzID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQlsdmRzLT5ibF9kZXYgPSBiZDsKKwl9CisKKwliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IHJhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKGJkKTsKKwliZC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJkKTsKKworCURSTV9JTkZPKCJyYWRlb24gbGVnYWN5IExWRFMgYmFja2xpZ2h0IGluaXRpYWxpemVkXG4iKTsKKworCXJldHVybjsKKworZXJyb3I6CisJa2ZyZWUocGRhdGEpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IE5VTEw7CisKKwlpZiAoIXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdikKKwkJcmV0dXJuOworCisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmx2ZHMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCWJkID0gbHZkcy0+YmxfZGV2OworCQlsdmRzLT5ibF9kZXYgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9sdmRzICpsdmRzID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQliZCA9IGx2ZHMtPmJsX2RldjsKKwkJbHZkcy0+YmxfZGV2ID0gTlVMTDsKKwl9CisKKwlpZiAoYmQpIHsKKwkJc3RydWN0IHJhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X3ByaXZkYXRhICpwZGF0YTsKKworCQlwZGF0YSA9IGJsX2dldF9kYXRhKGJkKTsKKwkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJkKTsKKwkJa2ZyZWUocGRhdGEpOworCisJCURSTV9JTkZPKCJyYWRlb24gbGVnYWN5IExWRFMgYmFja2xpZ2h0IHVubG9hZGVkXG4iKTsKKwl9Cit9CisKKyNlbHNlIC8qICFDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAqLworCit2b2lkIHJhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X2luaXQoc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKQoreworfQorCitzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X2JhY2tsaWdodF9leGl0KHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlcikKK3sKK30KKworI2VuZGlmCisKKworc3RhdGljIHZvaWQgcmFkZW9uX2x2ZHNfZW5jX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKworCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpIHsKKwkJcmFkZW9uX2xlZ2FjeV9iYWNrbGlnaHRfZXhpdChyYWRlb25fZW5jb2Rlcik7CisJCWtmcmVlKHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdik7CisJfQorCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJa2ZyZWUocmFkZW9uX2VuY29kZXIpOworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHJhZGVvbl9sZWdhY3lfbHZkc19lbmNfZnVuY3MgPSB7Ci0JLmRlc3Ryb3kgPSByYWRlb25fZW5jX2Rlc3Ryb3ksCisJLmRlc3Ryb3kgPSByYWRlb25fbHZkc19lbmNfZGVzdHJveSwKIH07CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCmluZGV4IDUwNjdkMTguLmU0NTgyODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKQEAgLTMwMiw2ICszMDIsOSBAQAogCXVpbnQzMl90IGx2ZHNfZ2VuX2NudGw7CiAJLyogcGFuZWwgbW9kZSAqLwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibF9kZXY7CisJaW50ICAgICAgZHBtc19tb2RlOworCXVpbnQ4X3QgIGJhY2tsaWdodF9sZXZlbDsKIH07CiAKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgewpAQCAtMzU1LDYgKzM1OCw5IEBACiAJdWludDMyX3QgbGNkX3NzX2lkOwogCS8qIHBhbmVsIG1vZGUgKi8KIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxfZGV2OworCWludCBkcG1zX21vZGU7CisJdWludDhfdCBiYWNrbGlnaHRfbGV2ZWw7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCmluZGV4IDk5MmQ5OWQuLmJiYzljZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCS8qIDY0IGR3b3JkcyBzaG91bGQgYmUgZW5vdWdoIGZvciBmZW5jZSB0b28gKi8KIAlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCA2NCk7CiAJaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IHNjaGVkdWxpbmcgSUIgZmFpbGxlZCAoJWQpLlxuIiwgcik7CisJCURSTV9FUlJPUigicmFkZW9uOiBzY2hlZHVsaW5nIElCIGZhaWxlZCAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KIAlyYWRlb25fcmluZ19pYl9leGVjdXRlKHJkZXYsIGliKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwppbmRleCBjNzYyODNkLi5hYTZhNjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCkBAIC00MTIsMTIgKzQxMiwxMiBAQAogCS8qIDFNIHJpbmcgYnVmZmVyICovCiAJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CiAJaWYgKHIpIHsKLQkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KIAlyID0gcjEwMF9pYl9pbml0KHJkZXYpOwogCWlmIChyKSB7Ci0JCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKaW5kZXggOGFmNDY3OS4uMTk3NjNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtODY1LDEyICs4NjUsMTIgQEAKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7Ci0JCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKIAlpZiAocikgewotCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKaW5kZXggNjZjOTQ5Yi4uYTkwNDllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwpAQCAtNjI3LDEyICs2MjcsMTIgQEAKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7Ci0JCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKIAlpZiAocikgewotCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggNjRiNTdhZi4uNjYxM2VlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtMzk4LDEyICszOTgsMTIgQEAKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7Ci0JCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKIAlpZiAocikgewotCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCmluZGV4IDRjYzdiNzEuLmI5NzRhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKQEAgLTEyMDksNyArMTIwOSw3IEBACiAKIAlyID0gcjYwMF9pYl90ZXN0KHJkZXYpOwogCWlmIChyKSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDI1NjBmMDEuLmI3ZWM0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtNjgsOSArNjgsMTUgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgQTQgdGVjaCBYNSBhbmQgV09QLTM1IC8gVHJ1c3QgNDUwTCBtaWNlLgogCi1jb25maWcgSElEX0FDUlVYX0ZGCi0JdHJpc3RhdGUgIkFDUlVYIGZvcmNlIGZlZWRiYWNrIgorY29uZmlnIEhJRF9BQ1JVWAorCXRyaXN0YXRlICJBQ1JVWCBnYW1lIGNvbnRyb2xsZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgQUNSVVggZ2FtZSBjb250cm9sbGVycy4KKworY29uZmlnIEhJRF9BQ1JVWF9GRgorCXRyaXN0YXRlICJBQ1JVWCBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IgorCWRlcGVuZHMgb24gSElEX0FDUlVYCiAJc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MKIAktLS1oZWxwLS0tCiAJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgQUNSVVgKQEAgLTE0MCw3ICsxNDYsMTIgQEAKIAl0cmlzdGF0ZSAiRHJhZ29uUmlzZSBJbmMuIGdhbWUgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIFVTQl9ISUQKIAktLS1oZWxwLS0tCi0JU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBEcmFnb25SaXNlIEluYy5nYW1lIGNvbnRyb2xsZXJzLgorCVNheSBZIGhlcmUgaWYgeW91IGhhdmUgRHJhZ29uUmlzZSBJbmMuIGdhbWUgY29udHJvbGxlcnMuCisJVGhlc2UgbWlnaHQgYmUgYnJhbmRlZCBhczoKKwktIFRlc3VuIFVTQi03MDMKKwktIE1lZGlhLXRlY2ggTVQxNTA0ICJSb2d1ZSIKKwktIERWVGVjaCBKUzE5ICJHZWFyIgorCS0gRGVmZW5kZXIgR2FtZSBNYXN0ZXIKIAogY29uZmlnIERSQUdPTlJJU0VfRkYKIAlib29sICJEcmFnb25SaXNlIEluYy4gZm9yY2UgZmVlZGJhY2siCkBAIC0xNjAsMTMgKzE3MSw2IEBACiAJQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUga25vd24gdG8gYmUgc3VwcG9ydGVkOgogCSAtIFRyaW8gTGlua2VyIFBsdXMgSUkKIAotY29uZmlnIEhJRF9FR0FMQVgKLQl0cmlzdGF0ZSAiZUdhbGF4IG11bHRpLXRvdWNoIHBhbmVsIgotCWRlcGVuZHMgb24gVVNCX0hJRAotCS0tLWhlbHAtLS0KLQlTdXBwb3J0IGZvciB0aGUgZUdhbGF4IGR1YWwtdG91Y2ggcGFuZWxzLCBpbmNsdWRpbmcgdGhlCi0JSm9vam9vIGFuZCBXZXRhYiB0YWJsZXRzLgotCiBjb25maWcgSElEX0VMRUNPTQogCXRyaXN0YXRlICJFTEVDT00gQk0wODQgYmx1ZXRvb3RoIG1vdXNlIgogCWRlcGVuZHMgb24gQlRfSElEUApAQCAtMTgwLDYgKzE4NCwxNCBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBFemtleSBCVEMgODE5MyBrZXlib2FyZC4KIAorY29uZmlnIEhJRF9LRVlUT1VDSAorCXRyaXN0YXRlICJLZXlvdXRjaCBISUQgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgS2V5dG91Y2ggSElEIGRldmljZXMgbm90IGZ1bGx5IGNvbXBsaWFudCB3aXRoCisJdGhlIHNwZWNpZmljYXRpb24uIEN1cnJlbnRseSBzdXBwb3J0ZWQ6CisJCS0gS2V5dG91Y2ggSUVDIDYwOTQ1CisKIGNvbmZpZyBISURfS1lFCiAJdHJpc3RhdGUgIkt5ZS9HZW5pdXMgRXJnbyBNb3VzZSIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0yMTgsNiArMjMwLDEyIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIEtlbnNpbmd0b24gU2xpbWJsYWRlIFRyYWNrYmFsbC4KIAorY29uZmlnIEhJRF9MQ1BPV0VSCisJdHJpc3RhdGUgIkxDLVBvd2VyIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBMQy1Qb3dlciBSQzEwMDBNQ0UgUkYgcmVtb3RlIGNvbnRyb2wuCisKIGNvbmZpZyBISURfTE9HSVRFQ0gKIAl0cmlzdGF0ZSAiTG9naXRlY2ggZGV2aWNlcyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0zMDQsOCArMzIyLDExIEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGRldmljZXM6CiAJICAtIEN5cHJlc3MgVHJ1ZVRvdWNoIHBhbmVscwogCSAgLSBIYW52b24gZHVhbCB0b3VjaCBwYW5lbHMKKwkgIC0gSXJUb3VjaCBJbmZyYXJlZCBVU0IgcGFuZWxzCiAJICAtIFBpeGNpciBkdWFsIHRvdWNoIHBhbmVscwogCSAgLSAnU2Vuc2luZyBXaW43LVR3b0ZpbmdlcicgcGFuZWwgYnkgR2VuZXJhbFRvdWNoCisgICAgICAgICAgLSBlR2FsYXggZHVhbC10b3VjaCBwYW5lbHMsIGluY2x1ZGluZyB0aGUKKwkgICAgSm9vam9vIGFuZCBXZXRhYiB0YWJsZXRzCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKQEAgLTMxOSwxMCArMzQwLDEwIEBACiAJU3VwcG9ydCBmb3IgTi1UcmlnIHRvdWNoIHNjcmVlbi4KIAogY29uZmlnIEhJRF9PUlRFSwotCXRyaXN0YXRlICJPcnRlayBXS0ItMjAwMCB3aXJlbGVzcyBrZXlib2FyZCBhbmQgbW91c2UgdHJhY2twYWQiCisJdHJpc3RhdGUgIk9ydGVrIFBLQi0xNzAwL1dLQi0yMDAwIHdpcmVsZXNzIGtleWJvYXJkIGFuZCBtb3VzZSB0cmFja3BhZCIKIAlkZXBlbmRzIG9uIFVTQl9ISUQKIAktLS1oZWxwLS0tCi0JU3VwcG9ydCBmb3IgT3J0ZWsgV0tCLTIwMDAgd2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZC4KKwlTdXBwb3J0IGZvciBPcnRlayBQS0ItMTcwMC9XS0ItMjAwMCB3aXJlbGVzcyBrZXlib2FyZCArIG1vdXNlIHRyYWNrcGFkLgogCiBjb25maWcgSElEX1BBTlRIRVJMT1JECiAJdHJpc3RhdGUgIlBhbnRoZXJsb3JkL0dyZWVuQXNpYSBnYW1lIGNvbnRyb2xsZXIiCkBAIC00MTcsMTAgKzQzOCwyMiBAQAogCVNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSb2NjYXQgbW91c2Ugb3Iga2V5Ym9hcmQgYW5kIHdhbnQgT1NEIG9yCiAJbWFjcm8gZXhlY3V0aW9uIHN1cHBvcnQuCiAKK2NvbmZpZyBISURfUk9DQ0FUX0NPTU1PTgorCXRyaXN0YXRlCisKK2NvbmZpZyBISURfUk9DQ0FUX0FSVk8KKwl0cmlzdGF0ZSAiUm9jY2F0IEFydm8ga2V5Ym9hcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlzZWxlY3QgSElEX1JPQ0NBVAorCXNlbGVjdCBISURfUk9DQ0FUX0NPTU1PTgorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBSb2NjYXQgQXJ2byBrZXlib2FyZC4KKwogY29uZmlnIEhJRF9ST0NDQVRfS09ORQogCXRyaXN0YXRlICJSb2NjYXQgS29uZSBNb3VzZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX0hJRAogCXNlbGVjdCBISURfUk9DQ0FUCisJc2VsZWN0IEhJRF9ST0NDQVRfQ09NTU9OCiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFJvY2NhdCBLb25lIG1vdXNlLgogCkBAIC00MjgsMTMgKzQ2MSwyMyBAQAogCXRyaXN0YXRlICJSb2NjYXQgS29uZVsrXSBtb3VzZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX0hJRAogCXNlbGVjdCBISURfUk9DQ0FUCisJc2VsZWN0IEhJRF9ST0NDQVRfQ09NTU9OCiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFJvY2NhdCBLb25lWytdIG1vdXNlLgogCitjb25maWcgSElEX1JPQ0NBVF9LT1ZBUExVUworCXRyaXN0YXRlICJSb2NjYXQgS292YVsrXSBtb3VzZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0hJRAorCXNlbGVjdCBISURfUk9DQ0FUCisJc2VsZWN0IEhJRF9ST0NDQVRfQ09NTU9OCisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFJvY2NhdCBLb3ZhWytdIG1vdXNlLgorCiBjb25maWcgSElEX1JPQ0NBVF9QWVJBCiAJdHJpc3RhdGUgIlJvY2NhdCBQeXJhIG1vdXNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfSElECiAJc2VsZWN0IEhJRF9ST0NDQVQKKwlzZWxlY3QgSElEX1JPQ0NBVF9DT01NT04KIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgUm9jY2F0IFB5cmEgbW91c2UuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKaW5kZXggNmVmYzJhMC4uMDZjNjhhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKQEAgLTI3LDIxICsyNywyMiBAQAogCiBvYmotJChDT05GSUdfSElEXzNNX1BDVCkJKz0gaGlkLTNtLXBjdC5vCiBvYmotJChDT05GSUdfSElEX0E0VEVDSCkJKz0gaGlkLWE0dGVjaC5vCi1vYmotJChDT05GSUdfSElEX0FDUlVYX0ZGKQkrPSBoaWQtYXhmZi5vCitvYmotJChDT05GSUdfSElEX0FDUlVYKQkJKz0gaGlkLWF4ZmYubwogb2JqLSQoQ09ORklHX0hJRF9BUFBMRSkJCSs9IGhpZC1hcHBsZS5vCiBvYmotJChDT05GSUdfSElEX0JFTEtJTikJKz0gaGlkLWJlbGtpbi5vCiBvYmotJChDT05GSUdfSElEX0NBTkRPKQkJKz0gaGlkLWNhbmRvLm8KIG9iai0kKENPTkZJR19ISURfQ0hFUlJZKQkrPSBoaWQtY2hlcnJ5Lm8KIG9iai0kKENPTkZJR19ISURfQ0hJQ09OWSkJKz0gaGlkLWNoaWNvbnkubwogb2JqLSQoQ09ORklHX0hJRF9DWVBSRVNTKQkrPSBoaWQtY3lwcmVzcy5vCi1vYmotJChDT05GSUdfSElEX0RSQUdPTlJJU0UpCSs9IGhpZC1kcmZmLm8KK29iai0kKENPTkZJR19ISURfRFJBR09OUklTRSkJKz0gaGlkLWRyLm8KIG9iai0kKENPTkZJR19ISURfRU1TX0ZGKQkrPSBoaWQtZW1zZmYubwotb2JqLSQoQ09ORklHX0hJRF9FR0FMQVgpCSs9IGhpZC1lZ2FsYXgubwogb2JqLSQoQ09ORklHX0hJRF9FTEVDT00pCSs9IGhpZC1lbGVjb20ubwogb2JqLSQoQ09ORklHX0hJRF9FWktFWSkJCSs9IGhpZC1lemtleS5vCiBvYmotJChDT05GSUdfSElEX0dZUkFUSU9OKQkrPSBoaWQtZ3lyYXRpb24ubwogb2JqLSQoQ09ORklHX0hJRF9LRU5TSU5HVE9OKQkrPSBoaWQta2Vuc2luZ3Rvbi5vCitvYmotJChDT05GSUdfSElEX0tFWVRPVUNIKQkrPSBoaWQta2V5dG91Y2gubwogb2JqLSQoQ09ORklHX0hJRF9LWUUpCQkrPSBoaWQta3llLm8KK29iai0kKENPTkZJR19ISURfTENQT1dFUikgICAgICAgKz0gaGlkLWxjcG93ZXIubwogb2JqLSQoQ09ORklHX0hJRF9MT0dJVEVDSCkJKz0gaGlkLWxvZ2l0ZWNoLm8KIG9iai0kKENPTkZJR19ISURfTUFHSUNNT1VTRSkgICAgKz0gaGlkLW1hZ2ljbW91c2Uubwogb2JqLSQoQ09ORklHX0hJRF9NSUNST1NPRlQpCSs9IGhpZC1taWNyb3NvZnQubwpAQCAtNTYsOCArNTcsMTEgQEAKIG9iai0kKENPTkZJR19ISURfUEVUQUxZTlgpCSs9IGhpZC1wZXRhbHlueC5vCiBvYmotJChDT05GSUdfSElEX1BJQ09MQ0QpCSs9IGhpZC1waWNvbGNkLm8KIG9iai0kKENPTkZJR19ISURfUk9DQ0FUKQkrPSBoaWQtcm9jY2F0Lm8KK29iai0kKENPTkZJR19ISURfUk9DQ0FUX0NPTU1PTikJKz0gaGlkLXJvY2NhdC1jb21tb24ubworb2JqLSQoQ09ORklHX0hJRF9ST0NDQVRfQVJWTykJKz0gaGlkLXJvY2NhdC1hcnZvLm8KIG9iai0kKENPTkZJR19ISURfUk9DQ0FUX0tPTkUpCSs9IGhpZC1yb2NjYXQta29uZS5vCiBvYmotJChDT05GSUdfSElEX1JPQ0NBVF9LT05FUExVUykJKz0gaGlkLXJvY2NhdC1rb25lcGx1cy5vCitvYmotJChDT05GSUdfSElEX1JPQ0NBVF9LT1ZBUExVUykJKz0gaGlkLXJvY2NhdC1rb3ZhcGx1cy5vCiBvYmotJChDT05GSUdfSElEX1JPQ0NBVF9QWVJBKQkrPSBoaWQtcm9jY2F0LXB5cmEubwogb2JqLSQoQ09ORklHX0hJRF9TQU1TVU5HKQkrPSBoaWQtc2Ftc3VuZy5vCiBvYmotJChDT05GSUdfSElEX1NNQVJUSk9ZUExVUykJKz0gaGlkLXNqb3kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwppbmRleCA2MWFhNzEyLi5iODU3NDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwpAQCAtNDgxLDYgKzQ4MSwxMiBAQAogCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0pJUyksCiAJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX1JERVNDX0pJUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9BTlNJKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0lTTyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lTT19LRVlCT0FSRCB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9KSVMpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9SREVTQ19KSVMgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTXzIwMDlfQU5TSSksCiAJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDA5X0lTTyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYXhmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWF4ZmYuYwppbmRleCBlNWI5NjFkLi5iNDU1NDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYXhmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1heGZmLmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KIAogI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2lmZGVmIENPTkZJR19ISURfQUNSVVhfRkYKICNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCiAKIHN0cnVjdCBheGZmX2RldmljZSB7CkBAIC0xMDksNiArMTExLDEyIEBACiAJa2ZyZWUoYXhmZik7CiAJcmV0dXJuIGVycm9yOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGF4ZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgYXhfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKIHsKQEAgLTEzOSw5ICsxNDcsMjUgQEAKIAkJCSBlcnJvcik7CiAJfQogCisJLyoKKwkgKiBXZSBuZWVkIHRvIHN0YXJ0IHBvbGxpbmcgZGV2aWNlIHJpZ2h0IGF3YXksIG90aGVyd2lzZQorCSAqIGl0IHdpbGwgZ28gaW50byBhIGNvbWEuCisJICovCisJZXJyb3IgPSBoaWRfaHdfb3BlbihoZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgb3BlbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGF4X3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfaHdfY2xvc2UoaGRldik7CisJaGlkX2h3X3N0b3AoaGRldik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBheF9kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FDUlVYLCAweDA4MDIpLCB9LAogCXsgfQpAQCAtMTQ5LDkgKzE3MywxMCBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGF4X2RldmljZXMpOwogCiBzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgYXhfZHJpdmVyID0gewotCS5uYW1lID0gImFjcnV4IiwKLQkuaWRfdGFibGUgPSBheF9kZXZpY2VzLAotCS5wcm9iZSA9IGF4X3Byb2JlLAorCS5uYW1lCQk9ICJhY3J1eCIsCisJLmlkX3RhYmxlCT0gYXhfZGV2aWNlcywKKwkucHJvYmUJCT0gYXhfcHJvYmUsCisJLnJlbW92ZQkJPSBheF9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBheF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBkNjc4Y2YzLi5lOTY4Nzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTExNTksNiArMTE1OSwzMiBAQAogCXJldHVybiAhIWhpZF9tYXRjaF9pZChoZGV2LCBoaWRfaGlkZGV2X2xpc3QpOwogfQogCisKK3N0YXRpYyBzc2l6ZV90CityZWFkX3JlcG9ydF9kZXNjcmlwdG9yKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBoaWRfZGV2aWNlLCBkZXYpOworCisJaWYgKG9mZiA+PSBoZGV2LT5yc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2ZmICsgY291bnQgPiBoZGV2LT5yc2l6ZSkKKwkJY291bnQgPSBoZGV2LT5yc2l6ZSAtIG9mZjsKKworCW1lbWNweShidWYsIGhkZXYtPnJkZXNjICsgb2ZmLCBjb3VudCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBkZXZfYmluX2F0dHJfcmVwb3J0X2Rlc2MgPSB7CisJLmF0dHIgPSB7IC5uYW1lID0gInJlcG9ydF9kZXNjcmlwdG9yIiwgLm1vZGUgPSAwNDQ0IH0sCisJLnJlYWQgPSByZWFkX3JlcG9ydF9kZXNjcmlwdG9yLAorCS5zaXplID0gSElEX01BWF9ERVNDUklQVE9SX1NJWkUsCit9OworCiBpbnQgaGlkX2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHVuc2lnbmVkIGludCBjb25uZWN0X21hc2spCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKnR5cGVzW10gPSB7ICJEZXZpY2UiLCAiUG9pbnRlciIsICJNb3VzZSIsICJEZXZpY2UiLApAQCAtMTE2OSw2ICsxMTk1LDcgQEAKIAljaGFyIGJ1Zls2NF07CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGxlbjsKKwlpbnQgcmV0OwogCiAJaWYgKGhkZXYtPnF1aXJrcyAmIEhJRF9RVUlSS19ISURERVZfRk9SQ0UpCiAJCWNvbm5lY3RfbWFzayB8PSAoSElEX0NPTk5FQ1RfSElEREVWX0ZPUkNFIHwgSElEX0NPTk5FQ1RfSElEREVWKTsKQEAgLTEyMzAsNiArMTI1NywxMSBAQAogCQlidXMgPSAiPFVOS05PV04+IjsKIAl9CiAKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKCZoZGV2LT5kZXYsICZkZXZfYmluX2F0dHJfcmVwb3J0X2Rlc2MpOworCWlmIChyZXQpCisJCWhpZF93YXJuKGhkZXYsCisJCQkgImNhbid0IGNyZWF0ZSBzeXNmcyByZXBvcnQgZGVzY3JpcHRvciBhdHRyaWJ1dGUgZXJyOiAlZFxuIiwgcmV0KTsKKwogCWhpZF9pbmZvKGhkZXYsICIlczogJXMgSElEIHYleC4lMDJ4ICVzIFslc10gb24gJXNcbiIsCiAJCSBidWYsIGJ1cywgaGRldi0+dmVyc2lvbiA+PiA4LCBoZGV2LT52ZXJzaW9uICYgMHhmZiwKIAkJIHR5cGUsIGhkZXYtPm5hbWUsIGhkZXYtPnBoeXMpOwpAQCAtMTI0MCw2ICsxMjcyLDcgQEAKIAogdm9pZCBoaWRfZGlzY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKIHsKKwlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKCZoZGV2LT5kZXYsICZkZXZfYmluX2F0dHJfcmVwb3J0X2Rlc2MpOwogCWlmIChoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCiAJCWhpZGlucHV0X2Rpc2Nvbm5lY3QoaGRldik7CiAJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCkBAIC0xMjU2LDkgKzEyODksNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1dDUDMyUFUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfWDVfMDA1RCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9SUF82NDkpIH0sCi0jaWYgZGVmaW5lZChDT05GSUdfSElEX0FDUlVYX0ZGKSB8fCBkZWZpbmVkKENPTkZJR19ISURfQUNSVVhfRkZfTU9EVUxFKQogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BQ1JVWCwgMHgwODAyKSB9LAotI2VuZGlmCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01JR0hUWU1PVVNFKSB9LApAQCAtMTMwMiw2ICsxMzMzLDkgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0FOU0kpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9JU08pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0lTTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfSklTKSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9BTlNJKSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9JU08pIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDA5X0pJUykgfSwKQEAgLTEzMjgsNiArMTM2Miw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19NT1VTRSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX1RSVUVUT1VDSCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFJBR09OUklTRSwgMHgwMDA2KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EUkFHT05SSVNFLCAweDAwMTEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsIFVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIMSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIMikgfSwKQEAgLTEzNDUsOSArMTM4MCwxMiBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HWVJBVElPTiwgVVNCX0RFVklDRV9JRF9HWVJBVElPTl9SRU1PVEVfMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFXzMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0hBTlZPTiwgVVNCX0RFVklDRV9JRF9IQU5WT05fTVVMVElUT1VDSCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSVJUT1VDSFNZU1RFTVMsIFVTQl9ERVZJQ0VfSURfSVJUT1VDSF9JTkZSQVJFRF9VU0IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tFTlNJTkdUT04sIFVTQl9ERVZJQ0VfSURfS1NfU0xJTUJMQURFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LRVlUT1VDSCwgVVNCX0RFVklDRV9JRF9LRVlUT1VDSF9JRUMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfRVJHT181MjVWKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MQUJURUMsIFVTQl9ERVZJQ0VfSURfTEFCVEVDX1dJUkVMRVNTX0tFWUJPQVJEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MQ1BPV0VSLCBVU0JfREVWSUNFX0lEX0xDUE9XRVJfTEMxMDAwICkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIpIH0sCkBAIC0xMzY4LDYgKzE0MDYsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GTElHSFRfU1lTVEVNX0c5NDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9ERlBfV0hFRUwpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0cyNV9XSEVFTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lJX1dIRUVMKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyKSB9LApAQCAtMTQwMCwxMiArMTQzOSwxNSBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU5fMTYpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xNykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOXzE4KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PUlRFSywgVVNCX0RFVklDRV9JRF9PUlRFS19QS0IxNzAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PUlRFSywgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWCwgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsIFVTQl9ERVZJQ0VfSURfUVVBTlRBX09QVElDQUxfVE9VQ0gpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1JPQ0NBVCwgVVNCX0RFVklDRV9JRF9ST0NDQVRfS09ORSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUk9DQ0FULCBVU0JfREVWSUNFX0lEX1JPQ0NBVF9BUlZPKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPTkVQTFVTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPVkFQTFVTKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19XSVJFTEVTU19LQkRfTU9VU0UpIH0sCkBAIC0xODAxLDYgKzE4NDMsOSBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfQU5TSSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0lTTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfQU5TSSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9KSVMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX1RQX09OTFkpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjFfVFBfT05MWSkgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1kci5jIGIvZHJpdmVycy9oaWQvaGlkLWRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlZWNlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1kci5jCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgRHJhZ29uUmlzZSBJbmMuIGdhbWUgY29udHJvbGxlcnMKKyAqCisgKiBGcm9tIHdoYXQgSSBoYXZlIGdhdGhlcmVkLCB0aGVzZSBkZXZpY2VzIGFyZSBtYXNzIHByb2R1Y2VkIGluIENoaW5hIGFuZCBhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHNldmVyYWwgdmVuZG9ycy4gVGhleSBvZnRlbiBzaGFyZSB0aGUgc2FtZSBkZXNpZ24gYXMKKyAqIHRoZSBvcmlnaW5hbCBQbGF5U3RhdGlvbiBEdWFsU2hvY2sgY29udHJvbGxlci4KKyAqCisgKiAwMDc5OjAwMDYgIkRyYWdvblJpc2UgSW5jLiAgIEdlbmVyaWMgICBVU0IgIEpveXN0aWNrICAiCisgKiAgLSB0ZXN0ZWQgd2l0aCBhIFRlc3VuIFVTQi03MDMgZ2FtZSBjb250cm9sbGVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBSaWNoYXJkIFdhbG1zbGV5IDxyaWNod2FsbUBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCisjaWZkZWYgQ09ORklHX0RSQUdPTlJJU0VfRkYKKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisKK3N0cnVjdCBkcmZmX2RldmljZSB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKK307CisKK3N0YXRpYyBpbnQgZHJmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcmZmX2RldmljZSAqZHJmZiA9IGRhdGE7CisJaW50IHN0cm9uZywgd2VhazsKKworCXN0cm9uZyA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKKwl3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKworCWRiZ19oaWQoImNhbGxlZCB3aXRoIDB4JTA0eCAweCUwNHgiLCBzdHJvbmcsIHdlYWspOworCisJaWYgKHN0cm9uZyB8fCB3ZWFrKSB7CisJCXN0cm9uZyA9IHN0cm9uZyAqIDB4ZmYgLyAweGZmZmY7CisJCXdlYWsgPSB3ZWFrICogMHhmZiAvIDB4ZmZmZjsKKworCQkvKiBXaGlsZSByZXZlcnNlIGVuZ2luZWVyaW5nIHRoaXMgZGV2aWNlLCBJIGZvdW5kIHRoYXQgd2hlbgorCQkgICB0aGlzIHZhbHVlIGlzIHNldCwgaXQgY2F1c2VzIHRoZSBzdHJvbmcgcnVtYmxlIHRvIGZ1bmN0aW9uCisJCSAgIGF0IGEgbmVhciBtYXhpbXVtIHNwZWVkLCBzbyB3ZSdsbCBieXBhc3MgaXQuICovCisJCWlmICh3ZWFrID09IDB4MGEpCisJCQl3ZWFrID0gMHgwYjsKKworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NTE7CisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSB3ZWFrOworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IHN0cm9uZzsKKwkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBkcmZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZmE7CisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHhmZTsKKwl9IGVsc2UgeworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7CisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwl9CisKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNF0gPSAweDAwOworCWRiZ19oaWQoInJ1bm5pbmcgd2l0aCAweCUwMnggMHglMDJ4Iiwgc3Ryb25nLCB3ZWFrKTsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIGRyZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGRyZmZfZGV2aWNlICpkcmZmOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZoaWQtPmlucHV0cywKKwkJCQkJCXN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0KKwkJCSZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJaW50IGVycm9yOworCisJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CisJCWhpZF9lcnIoaGlkLCAibm8gb3V0cHV0IHJlcG9ydHMgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXBvcnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHJlcG9ydF9saXN0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisJaWYgKHJlcG9ydC0+bWF4ZmllbGQgPCAxKSB7CisJCWhpZF9lcnIoaGlkLCAibm8gZmllbGRzIGluIHRoZSByZXBvcnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgNykgeworCQloaWRfZXJyKGhpZCwgIm5vdCBlbm91Z2ggdmFsdWVzIGluIHRoZSBmaWVsZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRyZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyZmYpCisJCXJldHVybiAtRU5PTUVNOworCisJc2V0X2JpdChGRl9SVU1CTEUsIGRldi0+ZmZiaXQpOworCisJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIGRyZmYsIGRyZmZfcGxheSk7CisJaWYgKGVycm9yKSB7CisJCWtmcmVlKGRyZmYpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJZHJmZi0+cmVwb3J0ID0gcmVwb3J0OworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHhmMzsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gMHgwMDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNV0gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzZdID0gMHgwMDsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIGRyZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJaGlkX2luZm8oaGlkLCAiRm9yY2UgRmVlZGJhY2sgZm9yIERyYWdvblJpc2UgSW5jLiAiCisJCSAiZ2FtZSBjb250cm9sbGVycyBieSBSaWNoYXJkIFdhbG1zbGV5IDxyaWNod2FsbUBnbWFpbC5jb20+XG4iKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGRyZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBUaGUgb3JpZ2luYWwgZGVzY3JpcHRvciBvZiBqb3lzdGljayB3aXRoIFBJRCAweDAwMTEsIHJlcHJlc2VudGVkIGJ5IERWVGVjaCBQQworICogSlMxOS4gSXQgc2VlbXMgYm90aCBjb3BpZWQgZnJvbSBhbm90aGVyIGRldmljZSBhbmQgYSByZXN1bHQgb2YgY29uZnVzaW9uCisgKiBlaXRoZXIgYWJvdXQgdGhlIHNwZWNpZmljYXRpb24gb3IgYWJvdXQgdGhlIHByb2dyYW0gdXNlZCB0byBjcmVhdGUgdGhlCisgKiBkZXNjcmlwdG9yLiBJbiBhbnkgY2FzZSwgaXQncyBhIHdvbmRlciBpdCB3b3JrcyBvbiBXaW5kb3dzLgorICoKKyAqICBVc2FnZSBQYWdlIChEZXNrdG9wKSwgICAgICAgICAgICAgOyBHZW5lcmljIGRlc2t0b3AgY29udHJvbHMgKDAxaCkKKyAqICBVc2FnZSAoSm95c3RpayksICAgICAgICAgICAgICAgICAgOyBKb3lzdGlrICgwNGgsIGFwcGxpY2F0aW9uIGNvbGxlY3Rpb24pCisgKiAgQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pLAorICogICAgQ29sbGVjdGlvbiAoTG9naWNhbCksCisgKiAgICAgIFJlcG9ydCBTaXplICg4KSwKKyAqICAgICAgUmVwb3J0IENvdW50ICg1KSwKKyAqICAgICAgTG9naWNhbCBNaW5pbXVtICgwKSwKKyAqICAgICAgTG9naWNhbCBNYXhpbXVtICgyNTUpLAorICogICAgICBQaHlzaWNhbCBNaW5pbXVtICgwKSwKKyAqICAgICAgUGh5c2ljYWwgTWF4aW11bSAoMjU1KSwKKyAqICAgICAgVXNhZ2UgKFgpLCAgICAgICAgICAgICAgICAgICAgOyBYICgzMGgsIGR5bmFtaWMgdmFsdWUpCisgKiAgICAgIFVzYWdlIChYKSwgICAgICAgICAgICAgICAgICAgIDsgWCAoMzBoLCBkeW5hbWljIHZhbHVlKQorICogICAgICBVc2FnZSAoWCksICAgICAgICAgICAgICAgICAgICA7IFggKDMwaCwgZHluYW1pYyB2YWx1ZSkKKyAqICAgICAgVXNhZ2UgKFgpLCAgICAgICAgICAgICAgICAgICAgOyBYICgzMGgsIGR5bmFtaWMgdmFsdWUpCisgKiAgICAgIFVzYWdlIChZKSwgICAgICAgICAgICAgICAgICAgIDsgWSAoMzFoLCBkeW5hbWljIHZhbHVlKQorICogICAgICBJbnB1dCAoVmFyaWFibGUpLAorICogICAgICBSZXBvcnQgU2l6ZSAoNCksCisgKiAgICAgIFJlcG9ydCBDb3VudCAoMSksCisgKiAgICAgIExvZ2ljYWwgTWF4aW11bSAoNyksCisgKiAgICAgIFBoeXNpY2FsIE1heGltdW0gKDMxNSksCisgKiAgICAgIFVuaXQgKERlZ3JlZXMpLAorICogICAgICBVc2FnZSAoMDBoKSwKKyAqICAgICAgSW5wdXQgKFZhcmlhYmxlLCBOdWxsIFN0YXRlKSwKKyAqICAgICAgVW5pdCwKKyAqICAgICAgUmVwb3J0IFNpemUgKDEpLAorICogICAgICBSZXBvcnQgQ291bnQgKDEwKSwKKyAqICAgICAgTG9naWNhbCBNYXhpbXVtICgxKSwKKyAqICAgICAgUGh5c2ljYWwgTWF4aW11bSAoMSksCisgKiAgICAgIFVzYWdlIFBhZ2UgKEJ1dHRvbiksICAgICAgICAgIDsgQnV0dG9uICgwOWgpCisgKiAgICAgIFVzYWdlIE1pbmltdW0gKDAxaCksCisgKiAgICAgIFVzYWdlIE1heGltdW0gKDBBaCksCisgKiAgICAgIElucHV0IChWYXJpYWJsZSksCisgKiAgICAgIFVzYWdlIFBhZ2UgKEZGMDBoKSwgICAgICAgICAgIDsgRkYwMGgsIHZlbmRvci1kZWZpbmVkCisgKiAgICAgIFJlcG9ydCBTaXplICgxKSwKKyAqICAgICAgUmVwb3J0IENvdW50ICgxMCksCisgKiAgICAgIExvZ2ljYWwgTWF4aW11bSAoMSksCisgKiAgICAgIFBoeXNpY2FsIE1heGltdW0gKDEpLAorICogICAgICBVc2FnZSAoMDFoKSwKKyAqICAgICAgSW5wdXQgKFZhcmlhYmxlKSwKKyAqICAgIEVuZCBDb2xsZWN0aW9uLAorICogICAgQ29sbGVjdGlvbiAoTG9naWNhbCksCisgKiAgICAgIFJlcG9ydCBTaXplICg4KSwKKyAqICAgICAgUmVwb3J0IENvdW50ICg0KSwKKyAqICAgICAgUGh5c2ljYWwgTWF4aW11bSAoMjU1KSwKKyAqICAgICAgTG9naWNhbCBNYXhpbXVtICgyNTUpLAorICogICAgICBVc2FnZSAoMDJoKSwKKyAqICAgICAgT3V0cHV0IChWYXJpYWJsZSksCisgKiAgICBFbmQgQ29sbGVjdGlvbiwKKyAqICBFbmQgQ29sbGVjdGlvbgorICovCisKKy8qIFNpemUgb2YgdGhlIG9yaWdpbmFsIGRlc2NyaXB0b3Igb2YgdGhlIFBJRCAweDAwMTEgam95c3RpY2sgKi8KKyNkZWZpbmUgUElEMDAxMV9SREVTQ19PUklHX1NJWkUJMTAxCisKKy8qIEZpeGVkIHJlcG9ydCBkZXNjcmlwdG9yIGZvciBQSUQgMHgwMTEgam95c3RpY2sgKi8KK3N0YXRpYyBfX3U4IHBpZDAwMTFfcmRlc2NfZml4ZWRbXSA9IHsKKwkweDA1LCAweDAxLCAgICAgICAgIC8qICBVc2FnZSBQYWdlIChEZXNrdG9wKSwgICAgICAgICAgICovCisJMHgwOSwgMHgwNCwgICAgICAgICAvKiAgVXNhZ2UgKEpveXN0aWspLCAgICAgICAgICAgICAgICAqLworCTB4QTEsIDB4MDEsICAgICAgICAgLyogIENvbGxlY3Rpb24gKEFwcGxpY2F0aW9uKSwgICAgICAgKi8KKwkweEExLCAweDAyLCAgICAgICAgIC8qICAgICAgQ29sbGVjdGlvbiAoTG9naWNhbCksICAgICAgICovCisJMHgxNCwgICAgICAgICAgICAgICAvKiAgICAgICAgICBMb2dpY2FsIE1pbmltdW0gKDApLCAgICAqLworCTB4NzUsIDB4MDgsICAgICAgICAgLyogICAgICAgICAgUmVwb3J0IFNpemUgKDgpLCAgICAgICAgKi8KKwkweDk1LCAweDAzLCAgICAgICAgIC8qICAgICAgICAgIFJlcG9ydCBDb3VudCAoMyksICAgICAgICovCisJMHg4MSwgMHgwMSwgICAgICAgICAvKiAgICAgICAgICBJbnB1dCAoQ29uc3RhbnQpLCAgICAgICAqLworCTB4MjYsIDB4RkYsIDB4MDAsICAgLyogICAgICAgICAgTG9naWNhbCBNYXhpbXVtICgyNTUpLCAgKi8KKwkweDk1LCAweDAyLCAgICAgICAgIC8qICAgICAgICAgIFJlcG9ydCBDb3VudCAoMiksICAgICAgICovCisJMHgwOSwgMHgzMCwgICAgICAgICAvKiAgICAgICAgICBVc2FnZSAoWCksICAgICAgICAgICAgICAqLworCTB4MDksIDB4MzEsICAgICAgICAgLyogICAgICAgICAgVXNhZ2UgKFkpLCAgICAgICAgICAgICAgKi8KKwkweDgxLCAweDAyLCAgICAgICAgIC8qICAgICAgICAgIElucHV0IChWYXJpYWJsZSksICAgICAgICovCisJMHg3NSwgMHgwMSwgICAgICAgICAvKiAgICAgICAgICBSZXBvcnQgU2l6ZSAoMSksICAgICAgICAqLworCTB4OTUsIDB4MDQsICAgICAgICAgLyogICAgICAgICAgUmVwb3J0IENvdW50ICg0KSwgICAgICAgKi8KKwkweDgxLCAweDAxLCAgICAgICAgIC8qICAgICAgICAgIElucHV0IChDb25zdGFudCksICAgICAgICovCisJMHgyNSwgMHgwMSwgICAgICAgICAvKiAgICAgICAgICBMb2dpY2FsIE1heGltdW0gKDEpLCAgICAqLworCTB4OTUsIDB4MEEsICAgICAgICAgLyogICAgICAgICAgUmVwb3J0IENvdW50ICgxMCksICAgICAgKi8KKwkweDA1LCAweDA5LCAgICAgICAgIC8qICAgICAgICAgIFVzYWdlIFBhZ2UgKEJ1dHRvbiksICAgICovCisJMHgxOSwgMHgwMSwgICAgICAgICAvKiAgICAgICAgICBVc2FnZSBNaW5pbXVtICgwMWgpLCAgICAqLworCTB4MjksIDB4MEEsICAgICAgICAgLyogICAgICAgICAgVXNhZ2UgTWF4aW11bSAoMEFoKSwgICAgKi8KKwkweDgxLCAweDAyLCAgICAgICAgIC8qICAgICAgICAgIElucHV0IChWYXJpYWJsZSksICAgICAgICovCisJMHg5NSwgMHgwQSwgICAgICAgICAvKiAgICAgICAgICBSZXBvcnQgQ291bnQgKDEwKSwgICAgICAqLworCTB4ODEsIDB4MDEsICAgICAgICAgLyogICAgICAgICAgSW5wdXQgKENvbnN0YW50KSwgICAgICAgKi8KKwkweEMwLCAgICAgICAgICAgICAgIC8qICAgICAgRW5kIENvbGxlY3Rpb24sICAgICAgICAgICAgICovCisJMHhDMCAgICAgICAgICAgICAgICAvKiAgRW5kIENvbGxlY3Rpb24gICAgICAgICAgICAgICAgICAqLworfTsKKworc3RhdGljIF9fdTggKmRyX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCQkJdW5zaWduZWQgaW50ICpyc2l6ZSkKK3sKKwlzd2l0Y2ggKGhkZXYtPnByb2R1Y3QpIHsKKwljYXNlIDB4MDAxMToKKwkJaWYgKCpyc2l6ZSA9PSBQSUQwMDExX1JERVNDX09SSUdfU0laRSkgeworCQkJcmRlc2MgPSBwaWQwMDExX3JkZXNjX2ZpeGVkOworCQkJKnJzaXplID0gc2l6ZW9mKHBpZDAwMTFfcmRlc2NfZml4ZWQpOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmRlc2M7Cit9CisKK3N0YXRpYyBpbnQgZHJfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCisJZGV2X2RiZygmaGRldi0+ZGV2LCAiRHJhZ29uUmlzZSBJbmMuIEhJRCBoYXJkd2FyZSBwcm9iZS4uLiIpOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJc3dpdGNoIChoZGV2LT5wcm9kdWN0KSB7CisJY2FzZSAweDAwMDY6CisJCXJldCA9IGRyZmZfaW5pdChoZGV2KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmaGRldi0+ZGV2LCAiZm9yY2UgZmVlZGJhY2sgaW5pdCBmYWlsZWRcbiIpOworCQkJaGlkX2h3X3N0b3AoaGRldik7CisJCQlnb3RvIGVycjsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgZHJfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EUkFHT05SSVNFLCAweDAwMDYpLCAgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFJBR09OUklTRSwgMHgwMDExKSwgIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGRyX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgZHJfZHJpdmVyID0geworCS5uYW1lID0gImRyYWdvbnJpc2UiLAorCS5pZF90YWJsZSA9IGRyX2RldmljZXMsCisJLnJlcG9ydF9maXh1cCA9IGRyX3JlcG9ydF9maXh1cCwKKwkucHJvYmUgPSBkcl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZHJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRyX2luaXQpOworbW9kdWxlX2V4aXQoZHJfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZHJmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWRyZmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjZjNkNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZHJmZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBEcmFnb25SaXNlIEluYy4gZ2FtZSBjb250cm9sbGVycwotICoKLSAqIEZyb20gd2hhdCBJIGhhdmUgZ2F0aGVyZWQsIHRoZXNlIGRldmljZXMgYXJlIG1hc3MgcHJvZHVjZWQgaW4gQ2hpbmEgYW5kIGFyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgc2V2ZXJhbCB2ZW5kb3JzLiBUaGV5IG9mdGVuIHNoYXJlIHRoZSBzYW1lIGRlc2lnbiBhcwotICogdGhlIG9yaWdpbmFsIFBsYXlTdGF0aW9uIER1YWxTaG9jayBjb250cm9sbGVyLgotICoKLSAqIDAwNzk6MDAwNiAiRHJhZ29uUmlzZSBJbmMuICAgR2VuZXJpYyAgIFVTQiAgSm95c3RpY2sgICIKLSAqICAtIHRlc3RlZCB3aXRoIGEgVGVzdW4gVVNCLTcwMyBnYW1lIGNvbnRyb2xsZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFJpY2hhcmQgV2FsbXNsZXkgPHJpY2h3YWxtQGdtYWlsLmNvbT4KLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlkLmg+Ci0KLSNpbmNsdWRlICJoaWQtaWRzLmgiCi0KLSNpZmRlZiBDT05GSUdfRFJBR09OUklTRV9GRgotI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKLQotc3RydWN0IGRyZmZfZGV2aWNlIHsKLQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwotfTsKLQotc3RhdGljIGludCBkcmZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAotCQkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCi17Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGRyZmZfZGV2aWNlICpkcmZmID0gZGF0YTsKLQlpbnQgc3Ryb25nLCB3ZWFrOwotCi0Jc3Ryb25nID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOwotCXdlYWsgPSBlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlOwotCi0JZGJnX2hpZCgiY2FsbGVkIHdpdGggMHglMDR4IDB4JTA0eCIsIHN0cm9uZywgd2Vhayk7Ci0KLQlpZiAoc3Ryb25nIHx8IHdlYWspIHsKLQkJc3Ryb25nID0gc3Ryb25nICogMHhmZiAvIDB4ZmZmZjsKLQkJd2VhayA9IHdlYWsgKiAweGZmIC8gMHhmZmZmOwotCi0JCS8qIFdoaWxlIHJldmVyc2UgZW5naW5lZXJpbmcgdGhpcyBkZXZpY2UsIEkgZm91bmQgdGhhdCB3aGVuCi0JCSAgIHRoaXMgdmFsdWUgaXMgc2V0LCBpdCBjYXVzZXMgdGhlIHN0cm9uZyBydW1ibGUgdG8gZnVuY3Rpb24KLQkJICAgYXQgYSBuZWFyIG1heGltdW0gc3BlZWQsIHNvIHdlJ2xsIGJ5cGFzcyBpdC4gKi8KLQkJaWYgKHdlYWsgPT0gMHgwYSkKLQkJCXdlYWsgPSAweDBiOwotCi0JCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKLQkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOwotCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IHdlYWs7Ci0JCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gc3Ryb25nOwotCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIGRyZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCi0JCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHhmYTsKLQkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweGZlOwotCX0gZWxzZSB7Ci0JCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHhmMzsKLQkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOwotCX0KLQotCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gMHgwMDsKLQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7Ci0JZGJnX2hpZCgicnVubmluZyB3aXRoIDB4JTAyeCAweCUwMngiLCBzdHJvbmcsIHdlYWspOwotCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZHJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcmZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKLXsKLQlzdHJ1Y3QgZHJmZl9kZXZpY2UgKmRyZmY7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZmlyc3RfZW50cnkoJmhpZC0+aW5wdXRzLAotCQkJCQkJc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPQotCQkJJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OwotCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJaGlkX2VycihoaWQsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJlcG9ydCA9IGxpc3RfZmlyc3RfZW50cnkocmVwb3J0X2xpc3QsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKLQlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDEpIHsKLQkJaGlkX2VycihoaWQsICJubyBmaWVsZHMgaW4gdGhlIHJlcG9ydFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChyZXBvcnQtPmZpZWxkWzBdLT5yZXBvcnRfY291bnQgPCA3KSB7Ci0JCWhpZF9lcnIoaGlkLCAibm90IGVub3VnaCB2YWx1ZXMgaW4gdGhlIGZpZWxkXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZHJmZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcmZmX2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmICghZHJmZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgZHJmZiwgZHJmZl9wbGF5KTsKLQlpZiAoZXJyb3IpIHsKLQkJa2ZyZWUoZHJmZik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlkcmZmLT5yZXBvcnQgPSByZXBvcnQ7Ci0JZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweGYzOwotCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKLQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7Ci0JZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM10gPSAweDAwOwotCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gMHgwMDsKLQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs1XSA9IDB4MDA7Ci0JZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNl0gPSAweDAwOwotCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZHJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0KLQloaWRfaW5mbyhoaWQsICJGb3JjZSBGZWVkYmFjayBmb3IgRHJhZ29uUmlzZSBJbmMuICIKLQkJICJnYW1lIGNvbnRyb2xsZXJzIGJ5IFJpY2hhcmQgV2FsbXNsZXkgPHJpY2h3YWxtQGdtYWlsLmNvbT5cbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgZHJmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBkcl9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQotewotCWludCByZXQ7Ci0KLQlkZXZfZGJnKCZoZGV2LT5kZXYsICJEcmFnb25SaXNlIEluYy4gSElEIGhhcmR3YXJlIHByb2JlLi4uIik7Ci0KLQlyZXQgPSBoaWRfcGFyc2UoaGRldik7Ci0JaWYgKHJldCkgewotCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7Ci0JaWYgKHJldCkgewotCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlkcmZmX2luaXQoaGRldik7Ci0KLQlyZXR1cm4gMDsKLWVycjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgZHJfZGV2aWNlc1tdID0gewotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EUkFHT05SSVNFLCAweDAwMDYpLCAgfSwKLQl7IH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgZHJfZGV2aWNlcyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBkcl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZHJhZ29ucmlzZSIsCi0JLmlkX3RhYmxlID0gZHJfZGV2aWNlcywKLQkucHJvYmUgPSBkcl9wcm9iZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRyX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZHJfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGRyX2V4aXQodm9pZCkKLXsKLQloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGRyX2luaXQpOwotbW9kdWxlX2V4aXQoZHJfZXhpdCk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZWdhbGF4LmMgYi9kcml2ZXJzL2hpZC9oaWQtZWdhbGF4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYmVlMTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWVnYWxheC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLS8qCi0gKiAgSElEIGRyaXZlciBmb3IgZUdhbGF4IGR1YWwtdG91Y2ggcGFuZWxzCi0gKgotICogIENvcHlyaWdodCAoYykgMjAxMCBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgotICogIENvcHlyaWdodCAoYykgMjAxMCBIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BldXJvbWFpbC5zZT4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTAgQ2Fub25pY2FsLCBMdGQuCi0gKgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC9tdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCi0KLU1PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oImVHYWxheCBkdWFsLXRvdWNoIHBhbmVsIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNpbmNsdWRlICJoaWQtaWRzLmgiCi0KLSNkZWZpbmUgTUFYX1NMT1RTCQkyCi0KLS8qIGVzdGltYXRlZCBzaWduYWwtdG8tbm9pc2UgcmF0aW9zICovCi0jZGVmaW5lIFNOX01PVkUJCQk0MDk2Ci0jZGVmaW5lIFNOX1BSRVNTVVJFCQkzMgotCi1zdHJ1Y3QgZWdhbGF4X2RhdGEgewotCWludCB2YWxpZDsKLQlpbnQgc2xvdDsKLQlpbnQgdG91Y2g7Ci0JaW50IHgsIHksIHo7Ci19OwotCi1zdGF0aWMgdm9pZCBzZXRfYWJzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCB1bnNpZ25lZCBpbnQgY29kZSwKLQkJICAgIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBpbnQgc25yYXRpbykKLXsKLQlpbnQgZm1pbiA9IGZpZWxkLT5sb2dpY2FsX21pbmltdW07Ci0JaW50IGZtYXggPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOwotCWludCBmdXp6ID0gc25yYXRpbyA/IChmbWF4IC0gZm1pbikgLyBzbnJhdGlvIDogMDsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgY29kZSwgZm1pbiwgZm1heCwgZnV6eiwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgZWdhbGF4X2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAotCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCi0JCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gaGktPmlucHV0OwotCi0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKLQotCWNhc2UgSElEX1VQX0dFTkRFU0s6Ci0JCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCQljYXNlIEhJRF9HRF9YOgotCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IDMyNzYwOwotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKLQkJCXNldF9hYnMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCBmaWVsZCwgU05fTU9WRSk7Ci0JCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQkJCXNldF9hYnMoaW5wdXQsIEFCU19YLCBmaWVsZCwgU05fTU9WRSk7Ci0JCQlyZXR1cm4gMTsKLQkJY2FzZSBISURfR0RfWToKLQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0gPSAzMjc2MDsKLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKLQkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSk7Ci0JCQlzZXRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgZmllbGQsIFNOX01PVkUpOwotCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCi0JCQlzZXRfYWJzKGlucHV0LCBBQlNfWSwgZmllbGQsIFNOX01PVkUpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIEhJRF9VUF9ESUdJVElaRVI6Ci0JCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6Ci0JCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOwotCQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNIKTsKLQkJCXJldHVybiAxOwotCQljYXNlIEhJRF9ER19JTlJBTkdFOgotCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgotCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RNQVg6Ci0JCQlyZXR1cm4gLTE7Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKLQkJCWlucHV0X210X2luaXRfc2xvdHMoaW5wdXQsIE1BWF9TTE9UUyk7Ci0JCQlyZXR1cm4gMTsKLQkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6Ci0JCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtID0gMDsKLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKLQkJCQkJRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUpOwotCQkJc2V0X2FicyhpbnB1dCwgQUJTX01UX1BSRVNTVVJFLCBmaWVsZCwgU05fUFJFU1NVUkUpOwotCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCi0JCQlzZXRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIGZpZWxkLCBTTl9QUkVTU1VSRSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBpZ25vcmUgb3RoZXJzIChmcm9tIG90aGVyIHJlcG9ydHMgd2Ugd29uJ3QgZ2V0IGFueXdheSkgKi8KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgZWdhbGF4X2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCi0JCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKLQkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCi17Ci0JLyogdGVsbCBoaWQtaW5wdXQgdG8gc2tpcCBzZXR1cCBvZiB0aGVzZSBldmVudCB0eXBlcyAqLwotCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQotCQlzZXRfYml0KHVzYWdlLT50eXBlLCBoaS0+aW5wdXQtPmV2Yml0KTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgZmluZ2VyIGhhcyBiZWVuIHBhcnNlZCwKLSAqIHNvIHRoYXQgaXQgY2FuIGRlY2lkZSB3aGF0IHRvIHNlbmQgdG8gdGhlIGlucHV0IGxheWVyLgotICovCi1zdGF0aWMgdm9pZCBlZ2FsYXhfZmlsdGVyX2V2ZW50KHN0cnVjdCBlZ2FsYXhfZGF0YSAqdGQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQotewotCWlucHV0X210X3Nsb3QoaW5wdXQsIHRkLT5zbG90KTsKLQlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShpbnB1dCwgTVRfVE9PTF9GSU5HRVIsIHRkLT50b3VjaCk7Ci0JaWYgKHRkLT50b3VjaCkgewotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgdGQtPngpOwotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgdGQtPnkpOwotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUsIHRkLT56KTsKLQl9Ci0JaW5wdXRfbXRfcmVwb3J0X3BvaW50ZXJfZW11bGF0aW9uKGlucHV0LCB0cnVlKTsKLX0KLQotc3RhdGljIGludCBlZ2FsYXhfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCi0JCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQotewotCXN0cnVjdCBlZ2FsYXhfZGF0YSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKLQotCS8qIE5vdGUsIGVHYWxheCBoYXMgdHdvIHByb2R1Y3QgbGluZXM6IHRoZSBmaXJzdCBpcyByZXNpc3RpdmUgYW5kCi0JICogdXNlcyBhIHN0YW5kYXJkIHBhcmFsbGVsIG11bHRpdG91Y2ggcHJvdG9jb2wgKHByb2R1Y3QgSUQgPT0KLQkgKiA0OHh4KS4gIFRoZSBzZWNvbmQgaXMgY2FwYWNpdGl2ZSBhbmQgdXNlcyBhbiB1bnVzdWFsICJzZXJpYWwiCi0JICogcHJvdG9jb2wgd2l0aCBhIGRpZmZlcmVudCBtZXNzYWdlIGZvciBlYWNoIG11bHRpdG91Y2ggZmluZ2VyCi0JICogKHByb2R1Y3QgSUQgPT0gNzJ4eCkuCi0JICovCi0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7Ci0JCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKLQotCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKLQkJY2FzZSBISURfREdfSU5SQU5HRToKLQkJCXRkLT52YWxpZCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6Ci0JCQkvKiBhdm9pZCBpbnRlcmZlcmVuY2UgZnJvbSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCi0JCQlicmVhazsKLQkJY2FzZSBISURfREdfVElQU1dJVENIOgotCQkJdGQtPnRvdWNoID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6Ci0JCQl0ZC0+eiA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKLQkJCXRkLT5zbG90ID0gY2xhbXBfdmFsKHZhbHVlLCAwLCBNQVhfU0xPVFMgLSAxKTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9HRF9YOgotCQkJdGQtPnggPSB2YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9HRF9ZOgotCQkJdGQtPnkgPSB2YWx1ZTsKLQkJCS8qIHRoaXMgaXMgdGhlIGxhc3QgZmllbGQgaW4gYSBmaW5nZXIgKi8KLQkJCWlmICh0ZC0+dmFsaWQpCi0JCQkJZWdhbGF4X2ZpbHRlcl9ldmVudCh0ZCwgaW5wdXQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKLQkJCS8qIHRvdWNoIGVtdWxhdGlvbjogdGhpcyBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIGZyYW1lICovCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJLyogZmFsbGJhY2sgdG8gdGhlIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KLQlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKLQkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBlZ2FsYXhfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBlZ2FsYXhfZGF0YSAqdGQ7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLQotCXRkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVnYWxheF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0ZCkgewotCQloaWRfZXJyKGhkZXYsICJjYW5ub3QgYWxsb2NhdGUgZUdhbGF4IGRhdGFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JaGlkX3NldF9kcnZkYXRhKGhkZXYsIHRkKTsKLQotCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGVuZDsKLQotCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKLQlpZiAocmV0KQotCQlnb3RvIGVuZDsKLQotCXJlcG9ydCA9IGhkZXYtPnJlcG9ydF9lbnVtW0hJRF9GRUFUVVJFX1JFUE9SVF0ucmVwb3J0X2lkX2hhc2hbNV07IAotCWlmIChyZXBvcnQpIHsKLQkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAyOwotCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoZGV2LCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKLQl9Ci0KLWVuZDoKLQlpZiAocmV0KQotCQlrZnJlZSh0ZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBlZ2FsYXhfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQotewotCWhpZF9od19zdG9wKGhkZXYpOwotCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7Ci0JaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgZWdhbGF4X2RldmljZXNbXSA9IHsKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwKLQkJCVVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSCkgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwKLQkJCVVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDEpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsCi0JCQlVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0gyKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLAotCQkJVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIMykgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwKLQkJCVVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDQpIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGVnYWxheF9kZXZpY2VzKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgZWdhbGF4X2dyYWJiZWRfdXNhZ2VzW10gPSB7Ci0JeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCi0JeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQotfTsKLQotc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGVnYWxheF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZWdhbGF4LXRvdWNoIiwKLQkuaWRfdGFibGUgPSBlZ2FsYXhfZGV2aWNlcywKLQkucHJvYmUgPSBlZ2FsYXhfcHJvYmUsCi0JLnJlbW92ZSA9IGVnYWxheF9yZW1vdmUsCi0JLmlucHV0X21hcHBpbmcgPSBlZ2FsYXhfaW5wdXRfbWFwcGluZywKLQkuaW5wdXRfbWFwcGVkID0gZWdhbGF4X2lucHV0X21hcHBlZCwKLQkudXNhZ2VfdGFibGUgPSBlZ2FsYXhfZ3JhYmJlZF91c2FnZXMsCi0JLmV2ZW50ID0gZWdhbGF4X2V2ZW50LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZWdhbGF4X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZWdhbGF4X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBlZ2FsYXhfZXhpdCh2b2lkKQotewotCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmZWdhbGF4X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGVnYWxheF9pbml0KTsKLW1vZHVsZV9leGl0KGVnYWxheF9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWd5cmF0aW9uLmMgYi9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYwppbmRleCAzOTc1ZTAzLi5lODhiOTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYwpAQCAtNDMsNiArNDMsMTEgQEAKIAljYXNlIDB4MDQ4OiBneV9tYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CWJyZWFrOwogCWNhc2UgMHgwNDk6IGd5X21hcF9rZXlfY2xlYXIoS0VZX0NBTUVSQSk7CWJyZWFrOwogCWNhc2UgMHgwNGE6IGd5X21hcF9rZXlfY2xlYXIoS0VZX1ZJREVPKTsJYnJlYWs7CisJY2FzZSAweDA1YTogZ3lfbWFwX2tleV9jbGVhcihLRVlfVEVYVCk7CQlicmVhazsKKwljYXNlIDB4MDViOiBneV9tYXBfa2V5X2NsZWFyKEtFWV9SRUQpOwkJYnJlYWs7CisJY2FzZSAweDA1YzogZ3lfbWFwX2tleV9jbGVhcihLRVlfR1JFRU4pOwlicmVhazsKKwljYXNlIDB4MDVkOiBneV9tYXBfa2V5X2NsZWFyKEtFWV9ZRUxMT1cpOwlicmVhazsKKwljYXNlIDB4MDVlOiBneV9tYXBfa2V5X2NsZWFyKEtFWV9CTFVFKTsJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKaW5kZXggOTJhMGQ2MS4uNjVhYzUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtMTAzLDYgKzEwMyw5IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0FOU0kJMHgwMjQyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0lTTwkweDAyNDMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfSklTCTB4MDI0NAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0FOU0kJMHgwMjQ1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfSVNPCTB4MDI0NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0pJUwkweDAyNDcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9BTlNJICAweDAyMzkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9JU08gICAweDAyM2EKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9KSVMgICAweDAyM2IKQEAgLTMzMyw2ICszMzYsOSBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0lNQVRJT04JCTB4MDcxOAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0RJU0NfU1RBS0tBCTB4ZDAwMAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfSVJUT1VDSFNZU1RFTVMJMHg2NjE1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSVJUT1VDSF9JTkZSQVJFRF9VU0IJMHgwMDcwCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9KRVNTCQkweDBjNDUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9KRVNTX1lVUkVYCTB4MTAxMAogCkBAIC0zNDUsNiArMzUxLDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LV09STEQJCTB4MWI4MAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0tXT1JMRF9SQURJT19GTTcwMAkweGQ3MDAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0tFWVRPVUNICQkweDA5MjYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9LRVlUT1VDSF9JRUMJMHgzMzMzCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LWUUJCTB4MDQ1OAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9FUkdPXzUyNVYJMHgwMDg3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1lFX0dQRU5fNTYwCTB4NTAwMwpAQCAtMzUyLDYgKzM2MSw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTEFCVEVDCQkweDEwMjAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MQUJURUNfV0lSRUxFU1NfS0VZQk9BUkQJMHgwMDA2CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MQ1BPV0VSCQkweDEyNDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MQ1BPV0VSX0xDMTAwMAkweGY3NjcKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0xECQkweDBmMTEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9DQVNTWQkJMHgxMDAwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfUE9DS0VUQ0FTU1kJMHgxMDEwCkBAIC0zODMsNiArMzk1LDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSEVFTAkweGMyOTQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRwkweGMyOTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMCTB4YzI5NQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0RGUF9XSEVFTAkweGMyOTgKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9HMjVfV0hFRUwJMHhjMjk5CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lJX1dIRUVMCTB4YzI5YwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VMSVRFX0tCRAkweGMzMGEKQEAgLTQ2Niw2ICs0NzksNyBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAJMHgwMDY0CiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9PUlRFSwkJMHgwNWE0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfT1JURUtfUEtCMTcwMAkweDE3MDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwCTB4MjAwMAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEFOSklUCQkweDEzNGMKQEAgLTQ5Niw4ICs1MTAsMTAgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4JMHgzMDAxCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ST0NDQVQJCTB4MWU3ZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1JPQ0NBVF9BUlZPCTB4MzBkNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1JPQ0NBVF9LT05FCTB4MmNlZAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1JPQ0NBVF9LT05FUExVUwkweDJkNTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ST0NDQVRfS09WQVBMVVMJMHgyZDUwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUQJMHgyYzI0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUxFU1MJMHgyY2Y2CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKaW5kZXggN2Y1NTJiZi4uMzNkZGU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKQEAgLTI5MCwxNCArMjkwLDYgQEAKIAkJZ290byBpZ25vcmU7CiAJfQogCi0JaWYgKGZpZWxkLT5yZXBvcnRfdHlwZSA9PSBISURfRkVBVFVSRV9SRVBPUlQpIHsKLQkJaWYgKGRldmljZS0+ZHJpdmVyLT5mZWF0dXJlX21hcHBpbmcpIHsKLQkJCWRldmljZS0+ZHJpdmVyLT5mZWF0dXJlX21hcHBpbmcoZGV2aWNlLCBoaWRpbnB1dCwgZmllbGQsCi0JCQkJdXNhZ2UpOwotCQl9Ci0JCWdvdG8gaWdub3JlOwotCX0KLQogCWlmIChkZXZpY2UtPmRyaXZlci0+aW5wdXRfbWFwcGluZykgewogCQlpbnQgcmV0ID0gZGV2aWNlLT5kcml2ZXItPmlucHV0X21hcHBpbmcoZGV2aWNlLCBoaWRpbnB1dCwgZmllbGQsCiAJCQkJdXNhZ2UsICZiaXQsICZtYXgpOwpAQCAtODM1LDYgKzgyNywyNCBAQAogCWhpZF9od19jbG9zZShoaWQpOwogfQogCitzdGF0aWMgdm9pZCByZXBvcnRfZmVhdHVyZXMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqZHJ2ID0gaGlkLT5kcml2ZXI7CisJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwX2VudW07CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcDsKKwlpbnQgaSwgajsKKworCWlmICghZHJ2LT5mZWF0dXJlX21hcHBpbmcpCisJCXJldHVybjsKKworCXJlcF9lbnVtID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX0ZFQVRVUkVfUkVQT1JUXTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcCwgJnJlcF9lbnVtLT5yZXBvcnRfbGlzdCwgbGlzdCkKKwkJZm9yIChpID0gMDsgaSA8IHJlcC0+bWF4ZmllbGQ7IGkrKykKKwkJCWZvciAoaiA9IDA7IGogPCByZXAtPmZpZWxkW2ldLT5tYXh1c2FnZTsgaisrKQorCQkJCWRydi0+ZmVhdHVyZV9tYXBwaW5nKGhpZCwgcmVwLT5maWVsZFtpXSwKKwkJCQkJCSAgICAgcmVwLT5maWVsZFtpXS0+dXNhZ2UgKyBqKTsKK30KKwogLyoKICAqIFJlZ2lzdGVyIHRoZSBpbnB1dCBkZXZpY2U7IHByaW50IGEgbWVzc2FnZS4KICAqIENvbmZpZ3VyZSB0aGUgaW5wdXQgbGF5ZXIgaW50ZXJmYWNlCkBAIC04NjMsNyArODczLDkgQEAKIAkJCXJldHVybiAtMTsKIAl9CiAKLQlmb3IgKGsgPSBISURfSU5QVVRfUkVQT1JUOyBrIDw9IEhJRF9GRUFUVVJFX1JFUE9SVDsgaysrKSB7CisJcmVwb3J0X2ZlYXR1cmVzKGhpZCk7CisKKwlmb3IgKGsgPSBISURfSU5QVVRfUkVQT1JUOyBrIDw9IEhJRF9PVVRQVVRfUkVQT1JUOyBrKyspIHsKIAkJaWYgKGsgPT0gSElEX09VVFBVVF9SRVBPUlQgJiYKIAkJCWhpZC0+cXVpcmtzICYgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMpCiAJCQljb250aW51ZTsKQEAgLTg4OCw4ICs5MDAsOCBAQAogCQkJCQloaWQtPmxsX2RyaXZlci0+aGlkaW5wdXRfaW5wdXRfZXZlbnQ7CiAJCQkJaW5wdXRfZGV2LT5vcGVuID0gaGlkaW5wdXRfb3BlbjsKIAkJCQlpbnB1dF9kZXYtPmNsb3NlID0gaGlkaW5wdXRfY2xvc2U7Ci0JCQkJaW5wdXRfZGV2LT5zZXRrZXljb2RlX25ldyA9IGhpZGlucHV0X3NldGtleWNvZGU7Ci0JCQkJaW5wdXRfZGV2LT5nZXRrZXljb2RlX25ldyA9IGhpZGlucHV0X2dldGtleWNvZGU7CisJCQkJaW5wdXRfZGV2LT5zZXRrZXljb2RlID0gaGlkaW5wdXRfc2V0a2V5Y29kZTsKKwkJCQlpbnB1dF9kZXYtPmdldGtleWNvZGUgPSBoaWRpbnB1dF9nZXRrZXljb2RlOwogCiAJCQkJaW5wdXRfZGV2LT5uYW1lID0gaGlkLT5uYW1lOwogCQkJCWlucHV0X2Rldi0+cGh5cyA9IGhpZC0+cGh5czsKQEAgLTkyOCw2ICs5NDAsNyBAQAogCXJldHVybiAwOwogCiBvdXRfY2xlYW51cDoKKwlsaXN0X2RlbCgmaGlkaW5wdXQtPmxpc3QpOwogCWlucHV0X2ZyZWVfZGV2aWNlKGhpZGlucHV0LT5pbnB1dCk7CiAJa2ZyZWUoaGlkaW5wdXQpOwogb3V0X3Vud2luZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1rZXl0b3VjaC5jIGIvZHJpdmVycy9oaWQvaGlkLWtleXRvdWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjZDgyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1rZXl0b3VjaC5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgS2V5dG91Y2ggZGV2aWNlcyBub3QgZnVsbHkgY29tcGxpYW50IHdpdGggSElEIHN0YW5kYXJkCisgKgorICogIENvcHlyaWdodCAoYykgMjAxMSBKaXJpIEtvc2luYQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworLyogUmVwbGFjZSB0aGUgYnJva2VuIHJlcG9ydCBkZXNjcmlwdG9yIG9mIHRoaXMgZGV2aWNlIHdpdGggcmF0aGVyCisgKiBhIGRlZmF1bHQgb25lICovCitzdGF0aWMgX191OCBrZXl0b3VjaF9maXhlZF9yZGVzY1tdID0geworMHgwNSwgMHgwMSwgMHgwOSwgMHgwNiwgMHhhMSwgMHgwMSwgMHgwNSwgMHgwNywgMHgxOSwgMHhlMCwgMHgyOSwgMHhlNywgMHgxNSwKKzB4MDAsIDB4MjUsIDB4MDEsIDB4NzUsIDB4MDEsIDB4OTUsIDB4MDgsIDB4ODEsIDB4MDIsIDB4OTUsIDB4MDEsIDB4NzUsIDB4MDgsCisweDgxLCAweDAxLCAweDk1LCAweDAzLCAweDc1LCAweDAxLCAweDA1LCAweDA4LCAweDE5LCAweDAxLCAweDI5LCAweDAzLCAweDkxLAorMHgwMiwgMHg5NSwgMHgwNSwgMHg3NSwgMHgwMSwgMHg5MSwgMHgwMSwgMHg5NSwgMHgwNiwgMHg3NSwgMHgwOCwgMHgxNSwgMHgwMCwKKzB4MjYsIDB4ZmYsIDB4MDAsIDB4MDUsIDB4MDcsIDB4MTksIDB4MDAsIDB4MmEsIDB4ZmYsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YzAKK307CisKK3N0YXRpYyBfX3U4ICprZXl0b3VjaF9yZXBvcnRfZml4dXAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKnJkZXNjLAorCQl1bnNpZ25lZCBpbnQgKnJzaXplKQoreworCWhpZF9pbmZvKGhkZXYsICJmaXhpbmcgdXAgS2V5dG91Y2ggSUVDIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKKworCXJkZXNjID0ga2V5dG91Y2hfZml4ZWRfcmRlc2M7CisJKnJzaXplID0gc2l6ZW9mKGtleXRvdWNoX2ZpeGVkX3JkZXNjKTsKKworCXJldHVybiByZGVzYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGtleXRvdWNoX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS0VZVE9VQ0gsIFVTQl9ERVZJQ0VfSURfS0VZVE9VQ0hfSUVDKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBrZXl0b3VjaF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGtleXRvdWNoX2RyaXZlciA9IHsKKwkubmFtZSA9ICJrZXl0b3VjaCIsCisJLmlkX3RhYmxlID0ga2V5dG91Y2hfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0ga2V5dG91Y2hfcmVwb3J0X2ZpeHVwLAorfTsKKworc3RhdGljIGludCBfX2luaXQga2V5dG91Y2hfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZrZXl0b3VjaF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQga2V5dG91Y2hfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigma2V5dG91Y2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa2V5dG91Y2hfaW5pdCk7Cittb2R1bGVfZXhpdChrZXl0b3VjaF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkppcmkgS29zaW5hIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGNwb3dlci5jIGIvZHJpdmVycy9oaWQvaGlkLWxjcG93ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGZlOWJkMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sY3Bvd2VyLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBMQyBQb3dlciBNb2RlbCBSQzEwMDBNQ0UKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDExIENocmlzIFNjaGx1bmQgCisgKiAgYmFzZWQgb24gaGlkLXRvcHNlZWQgbW9kdWxlCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCisjZGVmaW5lIHRzX21hcF9rZXlfY2xlYXIoYykJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBcCisJCQkJCUVWX0tFWSwgKGMpKQorc3RhdGljIGludCB0c19pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gMHgwZmZiYzAwMDApCisJCXJldHVybiAwOworCisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisgICAgICAgIGNhc2UgMHgwNDY6IHRzX21hcF9rZXlfY2xlYXIoS0VZX1lFTExPVyk7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNDc6IHRzX21hcF9rZXlfY2xlYXIoS0VZX0dSRUVOKTsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNDk6IHRzX21hcF9rZXlfY2xlYXIoS0VZX0JMVUUpOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNGE6IHRzX21hcF9rZXlfY2xlYXIoS0VZX1JFRCk7CQkgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDBkOiB0c19tYXBfa2V5X2NsZWFyKEtFWV9IT01FKTsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDI1OiB0c19tYXBfa2V5X2NsZWFyKEtFWV9UVik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDQ4OiB0c19tYXBfa2V5X2NsZWFyKEtFWV9WQ1IpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDI0OiB0c19tYXBfa2V5X2NsZWFyKEtFWV9NRU5VKTsgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHRzX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX0xDUE9XRVIsIFVTQl9ERVZJQ0VfSURfTENQT1dFUl9MQzEwMDApIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHRzX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgdHNfZHJpdmVyID0geworCS5uYW1lID0gIkxDIFJDMTAwME1DRSIsCisJLmlkX3RhYmxlID0gdHNfZGV2aWNlcywKKwkuaW5wdXRfbWFwcGluZyA9IHRzX2lucHV0X21hcHBpbmcsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0c19pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnRzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0c19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZ0c19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0c19pbml0KTsKK21vZHVsZV9leGl0KHRzX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwppbmRleCBhZWY0MTA0Li4zZGE5MDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtMzc3LDYgKzM3Nyw4IEBACiAJCS5kcml2ZXJfZGF0YSA9IExHX0ZGIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0cyNV9XSEVFTCksCiAJCS5kcml2ZXJfZGF0YSA9IExHX0ZGIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0RGUF9XSEVFTCksCisJCS5kcml2ZXJfZGF0YSA9IExHX0ZGIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJSV9XSEVFTCksCiAJCS5kcml2ZXJfZGF0YSA9IExHX0ZGNCB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRyApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYyBiL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKaW5kZXggNjk4ZTY0NS4uMzE4Y2M0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RSQUNLSU5HX0lELCBpZCk7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UT1VDSF9NQUpPUiwgdG91Y2hfbWFqb3IgPDwgMik7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UT1VDSF9NSU5PUiwgdG91Y2hfbWlub3IgPDwgMik7Ci0JCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9PUklFTlRBVElPTiwgb3JpZW50YXRpb24pOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sIC1vcmllbnRhdGlvbik7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCB4KTsKIAkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksIHkpOwogCkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9UUkFDS0lOR19JRCwgMCwgMTUsIDAsIDApOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLCAwLCAyNTUsIDQsIDApOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RPVUNIX01JTk9SLCAwLCAyNTUsIDQsIDApOwotCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX09SSUVOVEFUSU9OLCAtMzIsIDMxLCAxLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9PUklFTlRBVElPTiwgLTMxLCAzMiwgMSwgMCk7CiAKIAkJLyogTm90ZTogVG91Y2ggWSBwb3NpdGlvbiBmcm9tIHRoZSBkZXZpY2UgaXMgaW52ZXJ0ZWQgcmVsYXRpdmUKIAkJICogdG8gaG93IHBvaW50ZXIgbW90aW9uIGlzIHJlcG9ydGVkIChhbmQgcmVsYXRpdmUgdG8gaG93IFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW11bHRpdG91Y2guYyBiL2RyaXZlcnMvaGlkL2hpZC1tdWx0aXRvdWNoLmMKaW5kZXggMDdkMzE4My4uZWUwMWU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW11bHRpdG91Y2guYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbXVsdGl0b3VjaC5jCkBAIC01LDYgKzUsMTIgQEAKICAqICBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBCZW5qYW1pbiBUaXNzb2lyZXMgPGJlbmphbWluLnRpc3NvaXJlc0BnbWFpbC5jb20+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgRWNvbGUgTmF0aW9uYWxlIGRlIGwnQXZpYXRpb24gQ2l2aWxlLCBGcmFuY2UKICAqCisgKiAgVGhpcyBjb2RlIGlzIHBhcnRseSBiYXNlZCBvbiBoaWQtZWdhbGF4LmM6CisgKgorICogIENvcHlyaWdodCAoYykgMjAxMCBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICogIENvcHlyaWdodCAoYykgMjAxMCBIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BldXJvbWFpbC5zZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgQ2Fub25pY2FsLCBMdGQuCisgKgogICovCiAKIC8qCkBAIC0yNCw2ICszMCw3IEBACiAKIAogTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKK01PRFVMRV9BVVRIT1IoIkJlbmphbWluIFRpc3NvaXJlcyA8YmVuamFtaW4udGlzc29pcmVzQGdtYWlsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSElEIG11bHRpdG91Y2ggcGFuZWxzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTM2LDYgKzQzLDcgQEAKICNkZWZpbmUgTVRfUVVJUktfU0xPVF9JU19DT05UQUNUTlVNQkVSCSgxIDw8IDMpCiAjZGVmaW5lIE1UX1FVSVJLX1ZBTElEX0lTX0lOUkFOR0UJKDEgPDwgNCkKICNkZWZpbmUgTVRfUVVJUktfVkFMSURfSVNfQ09ORklERU5DRQkoMSA8PCA1KQorI2RlZmluZSBNVF9RVUlSS19FR0FMQVhfWFlaX0ZJWFVQCSgxIDw8IDYpCiAKIHN0cnVjdCBtdF9zbG90IHsKIAlfX3MzMiB4LCB5LCBwLCB3LCBoOwpAQCAtNjUsMTAgKzczLDExIEBACiB9OwogCiAvKiBjbGFzc2VzIG9mIGRldmljZSBiZWhhdmlvciAqLwotI2RlZmluZSBNVF9DTFNfREVGQVVMVAkxCi0jZGVmaW5lIE1UX0NMU19EVUFMMQkyCi0jZGVmaW5lIE1UX0NMU19EVUFMMgkzCi0jZGVmaW5lIE1UX0NMU19DWVBSRVNTCTQKKyNkZWZpbmUgTVRfQ0xTX0RFRkFVTFQJCQkJMQorI2RlZmluZSBNVF9DTFNfRFVBTF9JTlJBTkdFX0NPTlRBQ1RJRAkJMgorI2RlZmluZSBNVF9DTFNfRFVBTF9JTlJBTkdFX0NPTlRBQ1ROVU1CRVIJMworI2RlZmluZSBNVF9DTFNfQ1lQUkVTUwkJCQk0CisjZGVmaW5lIE1UX0NMU19FR0FMQVgJCQkJNQogCiAvKgogICogdGhlc2UgZGV2aWNlLWRlcGVuZGVudCBmdW5jdGlvbnMgZGV0ZXJtaW5lIHdoYXQgc2xvdCBjb3JyZXNwb25kcwpAQCAtMTA0LDEzICsxMTMsMTMgQEAKIAogc3RydWN0IG10X2NsYXNzIG10X2NsYXNzZXNbXSA9IHsKIAl7IC5uYW1lID0gTVRfQ0xTX0RFRkFVTFQsCi0JCS5xdWlya3MgPSBNVF9RVUlSS19WQUxJRF9JU19JTlJBTkdFLAorCQkucXVpcmtzID0gTVRfUVVJUktfTk9UX1NFRU5fTUVBTlNfVVAsCiAJCS5tYXhjb250YWN0cyA9IDEwIH0sCi0JeyAubmFtZSA9IE1UX0NMU19EVUFMMSwKKwl7IC5uYW1lID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQsCiAJCS5xdWlya3MgPSBNVF9RVUlSS19WQUxJRF9JU19JTlJBTkdFIHwKIAkJCU1UX1FVSVJLX1NMT1RfSVNfQ09OVEFDVElELAogCQkubWF4Y29udGFjdHMgPSAyIH0sCi0JeyAubmFtZSA9IE1UX0NMU19EVUFMMiwKKwl7IC5uYW1lID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUTlVNQkVSLAogCQkucXVpcmtzID0gTVRfUVVJUktfVkFMSURfSVNfSU5SQU5HRSB8CiAJCQlNVF9RVUlSS19TTE9UX0lTX0NPTlRBQ1ROVU1CRVIsCiAJCS5tYXhjb250YWN0cyA9IDIgfSwKQEAgLTExOSwxMCArMTI4LDE4IEBACiAJCQlNVF9RVUlSS19DWVBSRVNTLAogCQkubWF4Y29udGFjdHMgPSAxMCB9LAogCisJeyAubmFtZSA9IE1UX0NMU19FR0FMQVgsCisJCS5xdWlya3MgPSAgTVRfUVVJUktfU0xPVF9JU19DT05UQUNUSUQgfAorCQkJTVRfUVVJUktfVkFMSURfSVNfSU5SQU5HRSB8CisJCQlNVF9RVUlSS19FR0FMQVhfWFlaX0ZJWFVQLAorCQkubWF4Y29udGFjdHMgPSAyLAorCQkuc25fbW92ZSA9IDQwOTYsCisJCS5zbl9wcmVzc3VyZSA9IDMyLAorCX0sCiAJeyB9CiB9OwogCi1zdGF0aWMgdm9pZCBtdF9mZWF0dXJlX21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorc3RhdGljIHZvaWQgbXRfZmVhdHVyZV9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAogCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UpCiB7CiAJaWYgKHVzYWdlLT5oaWQgPT0gSElEX0RHX0lOUFVUTU9ERSkgewpAQCAtMTQ2LDExICsxNjMsMTUgQEAKIHsKIAlzdHJ1Y3QgbXRfZGV2aWNlICp0ZCA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKIAlzdHJ1Y3QgbXRfY2xhc3MgKmNscyA9IHRkLT5tdGNsYXNzOworCV9fczMyIHF1aXJrcyA9IGNscy0+cXVpcmtzOworCiAJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKIAogCWNhc2UgSElEX1VQX0dFTkRFU0s6CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQljYXNlIEhJRF9HRF9YOgorCQkJaWYgKHF1aXJrcyAmIE1UX1FVSVJLX0VHQUxBWF9YWVpfRklYVVApCisJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IDMyNzYwOwogCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAogCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKIAkJCXNldF9hYnMoaGktPmlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwgZmllbGQsCkBAIC0xNjAsNiArMTgxLDggQEAKIAkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0dEX1k6CisJCQlpZiAocXVpcmtzICYgTVRfUVVJUktfRUdBTEFYX1hZWl9GSVhVUCkKKwkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtID0gMzI3NjA7CiAJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCiAJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOwogCQkJc2V0X2FicyhoaS0+aW5wdXQsIEFCU19NVF9QT1NJVElPTl9ZLCBmaWVsZCwKQEAgLTIwMyw2ICsyMjYsOCBAQAogCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6CisJCQlpZiAocXVpcmtzICYgTVRfUVVJUktfRUdBTEFYX1hZWl9GSVhVUCkKKwkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtID0gMDsKIAkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKIAkJCQkJRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUpOwogCQkJc2V0X2FicyhoaS0+aW5wdXQsIEFCU19NVF9QUkVTU1VSRSwgZmllbGQsCkBAIC0zNjMsOCArMzg4LDExIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCWlmICh1c2FnZS0+aGlkID09IHRkLT5sYXN0X3Nsb3RfZmllbGQpCisJCWlmICh1c2FnZS0+aGlkID09IHRkLT5sYXN0X3Nsb3RfZmllbGQpIHsKIAkJCW10X2NvbXBsZXRlX3Nsb3QodGQpOworCQkJaWYgKCF0ZC0+bGFzdF9maWVsZF9pbmRleCkKKwkJCQltdF9lbWl0X2V2ZW50KHRkLCBmaWVsZC0+aGlkaW5wdXQtPmlucHV0KTsKKwkJfQogCiAJCWlmIChmaWVsZC0+aW5kZXggPT0gdGQtPmxhc3RfZmllbGRfaW5kZXgKIAkJCSYmIHRkLT5udW1fcmVjZWl2ZWQgPj0gdGQtPm51bV9leHBlY3RlZCkKQEAgLTQ2NiwxOCArNDk0LDQyIEBACiAJCQlVU0JfREVWSUNFX0lEX0NZUFJFU1NfVFJVRVRPVUNIKSB9LAogCiAJLyogR2VuZXJhbFRvdWNoIHBhbmVsICovCi0JeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfRFVBTDIsCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfRFVBTF9JTlJBTkdFX0NPTlRBQ1ROVU1CRVIsCiAJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSCwKIAkJCVVTQl9ERVZJQ0VfSURfR0VORVJBTF9UT1VDSF9XSU43X1RXT0ZJTkdFUlMpIH0sCiAKKwkvKiBJUlRPVUNIIHBhbmVscyAqLworCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQsCisJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSVJUT1VDSFNZU1RFTVMsCisJCQlVU0JfREVWSUNFX0lEX0lSVE9VQ0hfSU5GUkFSRURfVVNCKSB9LAorCiAJLyogUGl4Q2lyLWJhc2VkIHBhbmVscyAqLwotCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUwxLAorCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQsCiAJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSEFOVk9OLAogCQkJVVNCX0RFVklDRV9JRF9IQU5WT05fTVVMVElUT1VDSCkgfSwKLQl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19EVUFMMSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19EVUFMX0lOUkFOR0VfQ09OVEFDVElELAogCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLAogCQkJVVNCX0RFVklDRV9JRF9DQU5ET19QSVhDSVJfTVVMVElfVE9VQ0gpIH0sCiAKKwkvKiBSZXNpc3RpdmUgZUdhbGF4IGRldmljZXMgKi8KKwl7ICAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfRUdBTEFYLAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsCisJCQlVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0gpIH0sCisJeyAgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0VHQUxBWCwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLAorCQkJVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIMykgfSwKKworCS8qIENhcGFjaXRpdmUgZUdhbGF4IGRldmljZXMgKi8KKwl7ICAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfRUdBTEFYLAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsCisJCQlVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0gxKSB9LAorCXsgIC5kcml2ZXJfZGF0YSA9IE1UX0NMU19FR0FMQVgsCisJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwKKwkJCVVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDIpIH0sCisJeyAgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0VHQUxBWCwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLAorCQkJVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNINCkgfSwKKwogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtdF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKaW5kZXggYmViNDAzNC4uOWZhZTJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKQEAgLTExMCw2ICsxMTAsMzYgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldS4ldS4ldS4ldS4ldSIsIGEsIGIsIGMsIGQsIGUpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBudHJpZ19nZXRfbW9kZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0ID0gaGRldi0+cmVwb3J0X2VudW1bSElEX0ZFQVRVUkVfUkVQT1JUXS4KKwkJCQkgICAgcmVwb3J0X2lkX2hhc2hbMHgwZF07CisKKwlpZiAoIXJlcG9ydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoZGV2LCByZXBvcnQsIFVTQl9ESVJfSU4pOworCXVzYmhpZF93YWl0X2lvKGhkZXYpOworCXJldHVybiAoaW50KXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbnRyaWdfc2V0X21vZGUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IGludCBtb2RlKQoreworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJX191OCBtb2RlX2NvbW1hbmRzWzRdID0geyAweGUsIDB4ZiwgMHgxYiwgMHgxMCB9OworCisJaWYgKG1vZGUgPCAwIHx8IG1vZGUgPiAzKQorCQlyZXR1cm47CisKKwlyZXBvcnQgPSBoZGV2LT5yZXBvcnRfZW51bVtISURfRkVBVFVSRV9SRVBPUlRdLgorCQkgcmVwb3J0X2lkX2hhc2hbbW9kZV9jb21tYW5kc1ttb2RlXV07CisKKwlpZiAoIXJlcG9ydCkKKwkJcmV0dXJuOworCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGRldiwgcmVwb3J0LCBVU0JfRElSX0lOKTsKK30KKwogc3RhdGljIHZvaWQgbnRyaWdfcmVwb3J0X3ZlcnNpb24oc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCiB7CiAJaW50IHJldDsKQEAgLTUzOSwyNzcgKzU2OSwyODggQEAKIHN0YXRpYyBpbnQgbnRyaWdfZXZlbnQgKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAogCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQogewotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKIAlzdHJ1Y3QgbnRyaWdfZGF0YSAqbmQgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKworCS8qIFNraXAgcHJvY2Vzc2luZyBpZiBub3QgYSBjbGFpbWVkIGlucHV0ICovCisJaWYgKCEoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpKQorCQlnb3RvIG5vdF9jbGFpbWVkX2lucHV0OworCisJLyogVGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYmVmb3JlIHRoZSBzdHJ1Y3R1cmVzIGFyZSBmdWxseQorCSAqIGluaXRpYWxpemVkICovCisJaWYoIShmaWVsZC0+aGlkaW5wdXQgJiYgZmllbGQtPmhpZGlucHV0LT5pbnB1dCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OwogCiAJLyogTm8gc3BlY2lhbCBoYW5kbGluZyBuZWVkZWQgZm9yIHRoZSBwZW4gKi8KIAlpZiAoZmllbGQtPmFwcGxpY2F0aW9uID09IEhJRF9ER19QRU4pCiAJCXJldHVybiAwOwogCi0gICAgICAgIGlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgewotCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKLQkJY2FzZSAweGZmMDAwMDAxOgotCQkJLyogVGFnIGluZGljYXRpbmcgdGhlIHN0YXJ0IG9mIGEgbXVsdGl0b3VjaCBncm91cCAqLwotCQkJbmQtPnJlYWRpbmdfbXQgPSAxOwotCQkJbmQtPmZpcnN0X2NvbnRhY3RfdG91Y2ggPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKLQkJCW5kLT50aXBzd2l0Y2ggPSB2YWx1ZTsKLQkJCS8qIFByZXZlbnQgZW1pc3Npb24gb2YgdG91Y2ggdW50aWwgdmFsaWRhdGVkICovCi0JCQlyZXR1cm4gMTsKLQkJY2FzZSBISURfREdfQ09ORklERU5DRToKLQkJCW5kLT5jb25maWRlbmNlID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfR0RfWDoKLQkJCW5kLT54ID0gdmFsdWU7Ci0JCQkvKiBDbGVhciB0aGUgY29udGFjdCBmb290ZXIgKi8KLQkJCW5kLT5tdF9mb290X2NvdW50ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9HRF9ZOgotCQkJbmQtPnkgPSB2YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6Ci0JCQluZC0+aWQgPSB2YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9ER19XSURUSDoKLQkJCW5kLT53ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfREdfSEVJR0hUOgotCQkJbmQtPmggPSB2YWx1ZTsKKwlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwljYXNlIDB4ZmYwMDAwMDE6CisJCS8qIFRhZyBpbmRpY2F0aW5nIHRoZSBzdGFydCBvZiBhIG11bHRpdG91Y2ggZ3JvdXAgKi8KKwkJbmQtPnJlYWRpbmdfbXQgPSAxOworCQluZC0+Zmlyc3RfY29udGFjdF90b3VjaCA9IDA7CisJCWJyZWFrOworCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJbmQtPnRpcHN3aXRjaCA9IHZhbHVlOworCQkvKiBQcmV2ZW50IGVtaXNzaW9uIG9mIHRvdWNoIHVudGlsIHZhbGlkYXRlZCAqLworCQlyZXR1cm4gMTsKKwljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQluZC0+Y29uZmlkZW5jZSA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIEhJRF9HRF9YOgorCQluZC0+eCA9IHZhbHVlOworCQkvKiBDbGVhciB0aGUgY29udGFjdCBmb290ZXIgKi8KKwkJbmQtPm10X2Zvb3RfY291bnQgPSAwOworCQlicmVhazsKKwljYXNlIEhJRF9HRF9ZOgorCQluZC0+eSA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCW5kLT5pZCA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIEhJRF9ER19XSURUSDoKKwkJbmQtPncgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBISURfREdfSEVJR0hUOgorCQluZC0+aCA9IHZhbHVlOworCQkvKgorCQkgKiB3aGVuIGluIHNpbmdsZSB0b3VjaCBtb2RlLCB0aGlzIGlzIHRoZSBsYXN0CisJCSAqIHJlcG9ydCByZWNlaXZlZCBpbiBhIGZpbmdlciBldmVudC4gV2Ugd2FudAorCQkgKiB0byBlbWl0IGEgbm9ybWFsIChYLCBZKSBwb3NpdGlvbgorCQkgKi8KKwkJaWYgKCFuZC0+cmVhZGluZ19tdCkgewogCQkJLyoKLQkJCSAqIHdoZW4gaW4gc2luZ2xlIHRvdWNoIG1vZGUsIHRoaXMgaXMgdGhlIGxhc3QKLQkJCSAqIHJlcG9ydCByZWNlaXZlZCBpbiBhIGZpbmdlciBldmVudC4gV2Ugd2FudAotCQkJICogdG8gZW1pdCBhIG5vcm1hbCAoWCwgWSkgcG9zaXRpb24KKwkJCSAqIFRpcFN3aXRjaCBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlIG9mIGEKKwkJCSAqIGZpbmdlciBpbiBzaW5nbGUgdG91Y2ggbW9kZS4KIAkJCSAqLwotCQkJaWYgKCFuZC0+cmVhZGluZ19tdCkgewotCQkJCS8qCi0JCQkJICogVGlwU3dpdGNoIGluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb2YgYQotCQkJCSAqIGZpbmdlciBpbiBzaW5nbGUgdG91Y2ggbW9kZS4KLQkJCQkgKi8KLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsCi0JCQkJCQkgbmQtPnRpcHN3aXRjaCk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxFVEFQLAotCQkJCQkJIG5kLT50aXBzd2l0Y2gpOwotCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBuZC0+eCk7Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKLQkJCX0KKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwKKwkJCQkJIG5kLT50aXBzd2l0Y2gpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxFVEFQLAorCQkJCQkgbmQtPnRpcHN3aXRjaCk7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4ZmYwMDAwMDI6CisJCS8qCisJCSAqIHdlIHJlY2VpdmUgdGhpcyB3aGVuIHRoZSBkZXZpY2UgaXMgaW4gbXVsdGl0b3VjaAorCQkgKiBtb2RlLiBUaGUgZmlyc3Qgb2YgdGhlIHRocmVlIHZhbHVlcyB0YWdnZWQgd2l0aAorCQkgKiB0aGlzIHVzYWdlIHRlbGxzIGlmIHRoZSBjb250YWN0IHBvaW50IGlzIHJlYWwKKwkJICogb3IgYSBwbGFjZWhvbGRlcgorCQkgKi8KKworCQkvKiBTaG91bGRuJ3QgZ2V0IG1vcmUgdGhhbiA0IGZvb3RlciBwYWNrZXRzLCBzbyBza2lwICovCisJCWlmIChuZC0+bXRfZm9vdF9jb3VudCA+PSA0KQogCQkJYnJlYWs7Ci0JCWNhc2UgMHhmZjAwMDAwMjoKKworCQluZC0+bXRfZm9vdGVyW25kLT5tdF9mb290X2NvdW50KytdID0gdmFsdWU7CisKKwkJLyogaWYgdGhlIGZvb3RlciBpc24ndCBjb21wbGV0ZSBicmVhayAqLworCQlpZiAobmQtPm10X2Zvb3RfY291bnQgIT0gNCkKKwkJCWJyZWFrOworCisJCS8qIFBlbiBhY3Rpdml0eSBzaWduYWwuICovCisJCWlmIChuZC0+bXRfZm9vdGVyWzJdKSB7CiAJCQkvKgotCQkJICogd2UgcmVjZWl2ZSB0aGlzIHdoZW4gdGhlIGRldmljZSBpcyBpbiBtdWx0aXRvdWNoCi0JCQkgKiBtb2RlLiBUaGUgZmlyc3Qgb2YgdGhlIHRocmVlIHZhbHVlcyB0YWdnZWQgd2l0aAotCQkJICogdGhpcyB1c2FnZSB0ZWxscyBpZiB0aGUgY29udGFjdCBwb2ludCBpcyByZWFsCi0JCQkgKiBvciBhIHBsYWNlaG9sZGVyCisJCQkgKiBXaGVuIHRoZSBwZW4gZGVhY3RpdmF0ZXMgdG91Y2gsIHdlIHNlZSBhCisJCQkgKiBib2d1cyBmcmFtZSB3aXRoIENvbnRhY3RDb3VudCA+IDAuCisJCQkgKiBXZSBjYW4KKwkJCSAqIHNhdmUgYSBiaXQgb2Ygd29yayBieSBlbnN1cmluZyBhY3Rfc3RhdGUgPCAwCisJCQkgKiBldmVuIGlmIGRlYWN0aXZhdGlvbiBzbGFjayBpcyB0dXJuZWQgb2ZmLgogCQkJICovCisJCQluZC0+YWN0X3N0YXRlID0gZGVhY3RpdmF0ZV9zbGFjayAtIDE7CisJCQluZC0+Y29uZmlkZW5jZSA9IDA7CisJCQlicmVhazsKKwkJfQogCi0JCQkvKiBTaG91bGRuJ3QgZ2V0IG1vcmUgdGhhbiA0IGZvb3RlciBwYWNrZXRzLCBzbyBza2lwICovCi0JCQlpZiAobmQtPm10X2Zvb3RfY291bnQgPj0gNCkKLQkJCQlicmVhazsKLQotCQkJbmQtPm10X2Zvb3RlcltuZC0+bXRfZm9vdF9jb3VudCsrXSA9IHZhbHVlOwotCi0JCQkvKiBpZiB0aGUgZm9vdGVyIGlzbid0IGNvbXBsZXRlIGJyZWFrICovCi0JCQlpZiAobmQtPm10X2Zvb3RfY291bnQgIT0gNCkKLQkJCQlicmVhazsKLQotCQkJLyogUGVuIGFjdGl2aXR5IHNpZ25hbC4gKi8KLQkJCWlmIChuZC0+bXRfZm9vdGVyWzJdKSB7Ci0JCQkJLyoKLQkJCQkgKiBXaGVuIHRoZSBwZW4gZGVhY3RpdmF0ZXMgdG91Y2gsIHdlIHNlZSBhCi0JCQkJICogYm9ndXMgZnJhbWUgd2l0aCBDb250YWN0Q291bnQgPiAwLgotCQkJCSAqIFdlIGNhbgotCQkJCSAqIHNhdmUgYSBiaXQgb2Ygd29yayBieSBlbnN1cmluZyBhY3Rfc3RhdGUgPCAwCi0JCQkJICogZXZlbiBpZiBkZWFjdGl2YXRpb24gc2xhY2sgaXMgdHVybmVkIG9mZi4KLQkJCQkgKi8KLQkJCQluZC0+YWN0X3N0YXRlID0gZGVhY3RpdmF0ZV9zbGFjayAtIDE7CisJCS8qCisJCSAqIFRoZSBmaXJzdCBmb290ZXIgdmFsdWUgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiBhCisJCSAqIGZpbmdlci4KKwkJICovCisJCWlmIChuZC0+bXRfZm9vdGVyWzBdKSB7CisJCQkvKgorCQkJICogV2UgZG8gbm90IHdhbnQgdG8gcHJvY2VzcyBjb250YWN0cyB1bmRlcgorCQkJICogdGhlIHNpemUgdGhyZXNob2xkLCBidXQgZG8gbm90IHdhbnQgdG8KKwkJCSAqIGlnbm9yZSB0aGVtIGZvciBhY3RpdmF0aW9uIHN0YXRlCisJCQkgKi8KKwkJCWlmIChuZC0+dyA8IG5kLT5taW5fd2lkdGggfHwKKwkJCSAgICBuZC0+aCA8IG5kLT5taW5faGVpZ2h0KQogCQkJCW5kLT5jb25maWRlbmNlID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIFRoZSBmaXJzdCBmb290ZXIgdmFsdWUgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiBhCi0JCQkgKiBmaW5nZXIuCi0JCQkgKi8KLQkJCWlmIChuZC0+bXRfZm9vdGVyWzBdKSB7Ci0JCQkJLyoKLQkJCQkgKiBXZSBkbyBub3Qgd2FudCB0byBwcm9jZXNzIGNvbnRhY3RzIHVuZGVyCi0JCQkJICogdGhlIHNpemUgdGhyZXNob2xkLCBidXQgZG8gbm90IHdhbnQgdG8KLQkJCQkgKiBpZ25vcmUgdGhlbSBmb3IgYWN0aXZhdGlvbiBzdGF0ZQotCQkJCSAqLwotCQkJCWlmIChuZC0+dyA8IG5kLT5taW5fd2lkdGggfHwKLQkJCQkgICAgbmQtPmggPCBuZC0+bWluX2hlaWdodCkKLQkJCQkJbmQtPmNvbmZpZGVuY2UgPSAwOwotCQkJfSBlbHNlCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChuZC0+YWN0X3N0YXRlID4gMCkgewotCQkJCS8qCi0JCQkJICogQ29udGFjdCBtZWV0cyB0aGUgYWN0aXZhdGlvbiBzaXplIHRocmVzaG9sZAotCQkJCSAqLwotCQkJCWlmIChuZC0+dyA+PSBuZC0+YWN0aXZhdGlvbl93aWR0aCAmJgotCQkJCSAgICBuZC0+aCA+PSBuZC0+YWN0aXZhdGlvbl9oZWlnaHQpIHsKLQkJCQkJaWYgKG5kLT5pZCkKLQkJCQkJCS8qCi0JCQkJCQkgKiBmaXJzdCBjb250YWN0LCBhY3RpdmF0ZSBub3cKLQkJCQkJCSAqLwotCQkJCQkJbmQtPmFjdF9zdGF0ZSA9IDA7Ci0JCQkJCWVsc2UgewotCQkJCQkJLyoKLQkJCQkJCSAqIGF2b2lkIGNvcnJ1cHRpbmcgdGhpcyBmcmFtZQotCQkJCQkJICogYnV0IGVuc3VyZSBuZXh0IGZyYW1lIHdpbGwKLQkJCQkJCSAqIGJlIGFjdGl2ZQotCQkJCQkJICovCi0JCQkJCQluZC0+YWN0X3N0YXRlID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfSBlbHNlCi0JCQkJCS8qCi0JCQkJCSAqIERlZmVyIGFkanVzdGluZyB0aGUgYWN0aXZhdGlvbiBzdGF0ZQotCQkJCQkgKiB1bnRpbCB0aGUgZW5kIG9mIHRoZSBmcmFtZS4KLQkJCQkJICovCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBEaXNjYXJkaW5nIHRoaXMgY29udGFjdCAqLwotCQkJaWYgKCFuZC0+Y29uZmlkZW5jZSkKLQkJCQlicmVhazsKLQotCQkJLyogZW1pdCBhIG5vcm1hbCAoWCwgWSkgZm9yIHRoZSBmaXJzdCBwb2ludCBvbmx5ICovCi0JCQlpZiAobmQtPmlkID09IDApIHsKLQkJCQkvKgotCQkJCSAqIFRpcFN3aXRjaCBpcyBzdXBlcmZsdW91cyBpbiBtdWx0aXRvdWNoCi0JCQkJICogbW9kZS4gIFRoZSBmb290ZXIgZXZlbnRzIHRlbGwgdXMKLQkJCQkgKiBpZiB0aGVyZSBpcyBhIGZpbmdlciBvbiB0aGUgc2NyZWVuIG9yCi0JCQkJICogbm90LgotCQkJCSAqLwotCQkJCW5kLT5maXJzdF9jb250YWN0X3RvdWNoID0gbmQtPmNvbmZpZGVuY2U7Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIG5kLT54KTsKLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgbmQtPnkpOwotCQkJfQotCi0JCQkvKiBFbWl0IE1UIGV2ZW50cyAqLwotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIG5kLT54KTsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBuZC0+eSk7Ci0KLQkJCS8qCi0JCQkgKiBUcmFuc2xhdGUgZnJvbSBoZWlnaHQgYW5kIHdpZHRoIHRvIHNpemUKLQkJCSAqIGFuZCBvcmllbnRhdGlvbi4KLQkJCSAqLwotCQkJaWYgKG5kLT53ID4gbmQtPmgpIHsKLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLAotCQkJCQkJQUJTX01UX09SSUVOVEFUSU9OLCAxKTsKLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLAotCQkJCQkJQUJTX01UX1RPVUNIX01BSk9SLCBuZC0+dyk7Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywKLQkJCQkJCUFCU19NVF9UT1VDSF9NSU5PUiwgbmQtPmgpOwotCQkJfSBlbHNlIHsKLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLAotCQkJCQkJQUJTX01UX09SSUVOVEFUSU9OLCAwKTsKLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLAotCQkJCQkJQUJTX01UX1RPVUNIX01BSk9SLCBuZC0+aCk7Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywKLQkJCQkJCUFCU19NVF9UT1VDSF9NSU5PUiwgbmQtPncpOwotCQkJfQotCQkJaW5wdXRfbXRfc3luYyhmaWVsZC0+aGlkaW5wdXQtPmlucHV0KTsKKwkJfSBlbHNlCiAJCQlicmVhazsKIAotCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6IC8qIEVuZCBvZiBhIG11bHRpdG91Y2ggZ3JvdXAgKi8KLQkJCWlmICghbmQtPnJlYWRpbmdfbXQpIC8qIEp1c3QgdG8gYmUgc3VyZSAqLwotCQkJCWJyZWFrOwotCi0JCQluZC0+cmVhZGluZ19tdCA9IDA7Ci0KLQorCQlpZiAobmQtPmFjdF9zdGF0ZSA+IDApIHsKIAkJCS8qCi0JCQkgKiBBY3RpdmF0aW9uIHN0YXRlIG1hY2hpbmUgbG9naWM6Ci0JCQkgKgotCQkJICogRnVuZGFtZW50YWwgc3RhdGVzOgotCQkJICoJc3RhdGUgPiAgMDogSW5hY3RpdmUKLQkJCSAqCXN0YXRlIDw9IDA6IEFjdGl2ZQotCQkJICoJc3RhdGUgPCAgLWRlYWN0aXZhdGVfc2xhY2s6Ci0JCQkgKgkJIFBlbiB0ZXJtaW5hdGlvbiBvZiB0b3VjaAotCQkJICoKLQkJCSAqIFNwZWNpZmljIHZhbHVlcyBvZiBpbnRlcmVzdAotCQkJICoJc3RhdGUgPT0gYWN0aXZhdGVfc2xhY2sKLQkJCSAqCQkgbm8gdmFsaWQgaW5wdXQgc2luY2UgdGhlIGxhc3QgcmVzZXQKLQkJCSAqCi0JCQkgKglzdGF0ZSA9PSAwCi0JCQkgKgkJIGdlbmVyYWwgb3BlcmF0aW9uYWwgc3RhdGUKLQkJCSAqCi0JCQkgKglzdGF0ZSA9PSAtZGVhY3RpdmF0ZV9zbGFjawotCQkJICoJCSByZWFkIHN1ZmZpY2llbnQgZW1wdHkgZnJhbWVzIHRvIGFjY2VwdAotCQkJICoJCSB0aGUgZW5kIG9mIGlucHV0IGFuZCByZXNldAorCQkJICogQ29udGFjdCBtZWV0cyB0aGUgYWN0aXZhdGlvbiBzaXplIHRocmVzaG9sZAogCQkJICovCi0KLQkJCWlmIChuZC0+YWN0X3N0YXRlID4gMCkgeyAvKiBDdXJyZW50bHkgaW5hY3RpdmUgKi8KLQkJCQlpZiAodmFsdWUpCisJCQlpZiAobmQtPncgPj0gbmQtPmFjdGl2YXRpb25fd2lkdGggJiYKKwkJCSAgICBuZC0+aCA+PSBuZC0+YWN0aXZhdGlvbl9oZWlnaHQpIHsKKwkJCQlpZiAobmQtPmlkKQogCQkJCQkvKgotCQkJCQkgKiBDb25zaWRlciBlYWNoIGxpdmUgY29udGFjdCBhcwotCQkJCQkgKiBldmlkZW5jZSBvZiBpbnRlbnRpb25hbCBhY3Rpdml0eS4KLQkJCQkJICovCi0JCQkJCW5kLT5hY3Rfc3RhdGUgPSAobmQtPmFjdF9zdGF0ZSA+IHZhbHVlKQotCQkJCQkJCT8gbmQtPmFjdF9zdGF0ZSAtIHZhbHVlCi0JCQkJCQkJOiAwOwotCQkJCWVsc2UKLQkJCQkJLyoKLQkJCQkJICogRW1wdHkgZnJhbWUgYmVmb3JlIHdlIGhpdCB0aGUKLQkJCQkJICogYWN0aXZpdHkgdGhyZXNob2xkLCByZXNldC4KLQkJCQkJICovCi0JCQkJCW5kLT5hY3Rfc3RhdGUgPSBuZC0+YWN0aXZhdGVfc2xhY2s7Ci0KLQkJCQkvKgotCQkJCSAqIEVudGVyZWQgdGhpcyBibG9jayBpbmFjdGl2ZSBhbmQgbm8KLQkJCQkgKiBjb29yZGluYXRlcyBzZW50IHRoaXMgZnJhbWUsIHNvIGhvbGQgb2ZmCi0JCQkJICogb24gYnV0dG9uIHN0YXRlLgotCQkJCSAqLwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsgLyogQ3VycmVudGx5IGFjdGl2ZSAqLwotCQkJCWlmICh2YWx1ZSAmJiBuZC0+YWN0X3N0YXRlID49Ci0JCQkJCSAgICAgbmQtPmRlYWN0aXZhdGVfc2xhY2spCi0JCQkJCS8qCi0JCQkJCSAqIExpdmUgcG9pbnQ6IGNsZWFyIGFjY3VtdWxhdGVkCi0JCQkJCSAqIGRlYWN0aXZhdGlvbiBjb3VudC4KKwkJCQkJICogZmlyc3QgY29udGFjdCwgYWN0aXZhdGUgbm93CiAJCQkJCSAqLwogCQkJCQluZC0+YWN0X3N0YXRlID0gMDsKLQkJCQllbHNlIGlmIChuZC0+YWN0X3N0YXRlIDw9IG5kLT5kZWFjdGl2YXRlX3NsYWNrKQorCQkJCWVsc2UgewogCQkJCQkvKgotCQkJCQkgKiBXZSd2ZSBjb25zdW1lZCB0aGUgZGVhY3RpdmF0aW9uCi0JCQkJCSAqIHNsYWNrLCB0aW1lIHRvIGRlYWN0aXZhdGUgYW5kIHJlc2V0LgorCQkJCQkgKiBhdm9pZCBjb3JydXB0aW5nIHRoaXMgZnJhbWUKKwkJCQkJICogYnV0IGVuc3VyZSBuZXh0IGZyYW1lIHdpbGwKKwkJCQkJICogYmUgYWN0aXZlCiAJCQkJCSAqLwotCQkJCQluZC0+YWN0X3N0YXRlID0KLQkJCQkJCW5kLT5hY3RpdmF0ZV9zbGFjazsKLQkJCQllbHNlIHsgLyogTW92ZSB0b3dhcmRzIGRlYWN0aXZhdGlvbiAqLwotCQkJCQluZC0+YWN0X3N0YXRlLS07CisJCQkJCW5kLT5hY3Rfc3RhdGUgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChuZC0+Zmlyc3RfY29udGFjdF90b3VjaCAmJiBuZC0+YWN0X3N0YXRlIDw9IDApIHsKKwkJCX0gZWxzZQogCQkJCS8qCi0JCQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHJlYWR5IHRvIHN0YXJ0Ci0JCQkJICogZW1pdHRpbmcgdG91Y2ggZXZlbnRzLgotCQkJCSAqCi0JCQkJICogTm90ZTogYWN0aXZhdGlvbiBzbGFjayB3aWxsIGRlY3JlYXNlIG92ZXIKLQkJCQkgKiB0aGUgY291cnNlIG9mIHRoZSBmcmFtZSwgYW5kIGl0IHdpbGwgYmUKLQkJCQkgKiBpbmNvbnNpc3RlbnQgZnJvbSB0aGUgc3RhcnQgdG8gdGhlIGVuZCBvZgotCQkJCSAqIHRoZSBmcmFtZS4gIEhvd2V2ZXIgaWYgdGhlIGZyYW1lIHN0YXJ0cwotCQkJCSAqIHdpdGggc2xhY2ssIGZpcnN0X2NvbnRhY3RfdG91Y2ggd2lsbCBzdGlsbAotCQkJCSAqIGJlIDAgYW5kIHdlIHdpbGwgbm90IGdldCB0byB0aGlzIHBvaW50LgorCQkJCSAqIERlZmVyIGFkanVzdGluZyB0aGUgYWN0aXZhdGlvbiBzdGF0ZQorCQkJCSAqIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZyYW1lLgogCQkJCSAqLwotCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMSk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxFVEFQLCAwKTsKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDApOwotCQkJfQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogRGlzY2FyZGluZyB0aGlzIGNvbnRhY3QgKi8KKwkJaWYgKCFuZC0+Y29uZmlkZW5jZSkKIAkJCWJyZWFrOwogCi0JCWRlZmF1bHQ6Ci0JCQkvKiBmYWxsLWJhY2sgdG8gdGhlIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KLQkJCXJldHVybiAwOworCQkvKiBlbWl0IGEgbm9ybWFsIChYLCBZKSBmb3IgdGhlIGZpcnN0IHBvaW50IG9ubHkgKi8KKwkJaWYgKG5kLT5pZCA9PSAwKSB7CisJCQkvKgorCQkJICogVGlwU3dpdGNoIGlzIHN1cGVyZmx1b3VzIGluIG11bHRpdG91Y2gKKwkJCSAqIG1vZGUuICBUaGUgZm9vdGVyIGV2ZW50cyB0ZWxsIHVzCisJCQkgKiBpZiB0aGVyZSBpcyBhIGZpbmdlciBvbiB0aGUgc2NyZWVuIG9yCisJCQkgKiBub3QuCisJCQkgKi8KKwkJCW5kLT5maXJzdF9jb250YWN0X3RvdWNoID0gbmQtPmNvbmZpZGVuY2U7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKIAkJfQorCisJCS8qIEVtaXQgTVQgZXZlbnRzICovCisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCBuZC0+eCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBuZC0+eSk7CisKKwkJLyoKKwkJICogVHJhbnNsYXRlIGZyb20gaGVpZ2h0IGFuZCB3aWR0aCB0byBzaXplCisJCSAqIGFuZCBvcmllbnRhdGlvbi4KKwkJICovCisJCWlmIChuZC0+dyA+IG5kLT5oKSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLAorCQkJCQlBQlNfTVRfT1JJRU5UQVRJT04sIDEpOworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywKKwkJCQkJQUJTX01UX1RPVUNIX01BSk9SLCBuZC0+dyk7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLAorCQkJCQlBQlNfTVRfVE9VQ0hfTUlOT1IsIG5kLT5oKTsKKwkJfSBlbHNlIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsCisJCQkJCUFCU19NVF9PUklFTlRBVElPTiwgMCk7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLAorCQkJCQlBQlNfTVRfVE9VQ0hfTUFKT1IsIG5kLT5oKTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsCisJCQkJCUFCU19NVF9UT1VDSF9NSU5PUiwgbmQtPncpOworCQl9CisJCWlucHV0X210X3N5bmMoZmllbGQtPmhpZGlucHV0LT5pbnB1dCk7CisJCWJyZWFrOworCisJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOiAvKiBFbmQgb2YgYSBtdWx0aXRvdWNoIGdyb3VwICovCisJCWlmICghbmQtPnJlYWRpbmdfbXQpIC8qIEp1c3QgdG8gYmUgc3VyZSAqLworCQkJYnJlYWs7CisKKwkJbmQtPnJlYWRpbmdfbXQgPSAwOworCisKKwkJLyoKKwkJICogQWN0aXZhdGlvbiBzdGF0ZSBtYWNoaW5lIGxvZ2ljOgorCQkgKgorCQkgKiBGdW5kYW1lbnRhbCBzdGF0ZXM6CisJCSAqCXN0YXRlID4gIDA6IEluYWN0aXZlCisJCSAqCXN0YXRlIDw9IDA6IEFjdGl2ZQorCQkgKglzdGF0ZSA8ICAtZGVhY3RpdmF0ZV9zbGFjazoKKwkJICoJCSBQZW4gdGVybWluYXRpb24gb2YgdG91Y2gKKwkJICoKKwkJICogU3BlY2lmaWMgdmFsdWVzIG9mIGludGVyZXN0CisJCSAqCXN0YXRlID09IGFjdGl2YXRlX3NsYWNrCisJCSAqCQkgbm8gdmFsaWQgaW5wdXQgc2luY2UgdGhlIGxhc3QgcmVzZXQKKwkJICoKKwkJICoJc3RhdGUgPT0gMAorCQkgKgkJIGdlbmVyYWwgb3BlcmF0aW9uYWwgc3RhdGUKKwkJICoKKwkJICoJc3RhdGUgPT0gLWRlYWN0aXZhdGVfc2xhY2sKKwkJICoJCSByZWFkIHN1ZmZpY2llbnQgZW1wdHkgZnJhbWVzIHRvIGFjY2VwdAorCQkgKgkJIHRoZSBlbmQgb2YgaW5wdXQgYW5kIHJlc2V0CisJCSAqLworCisJCWlmIChuZC0+YWN0X3N0YXRlID4gMCkgeyAvKiBDdXJyZW50bHkgaW5hY3RpdmUgKi8KKwkJCWlmICh2YWx1ZSkKKwkJCQkvKgorCQkJCSAqIENvbnNpZGVyIGVhY2ggbGl2ZSBjb250YWN0IGFzCisJCQkJICogZXZpZGVuY2Ugb2YgaW50ZW50aW9uYWwgYWN0aXZpdHkuCisJCQkJICovCisJCQkJbmQtPmFjdF9zdGF0ZSA9IChuZC0+YWN0X3N0YXRlID4gdmFsdWUpCisJCQkJCQk/IG5kLT5hY3Rfc3RhdGUgLSB2YWx1ZQorCQkJCQkJOiAwOworCQkJZWxzZQorCQkJCS8qCisJCQkJICogRW1wdHkgZnJhbWUgYmVmb3JlIHdlIGhpdCB0aGUKKwkJCQkgKiBhY3Rpdml0eSB0aHJlc2hvbGQsIHJlc2V0LgorCQkJCSAqLworCQkJCW5kLT5hY3Rfc3RhdGUgPSBuZC0+YWN0aXZhdGVfc2xhY2s7CisKKwkJCS8qCisJCQkgKiBFbnRlcmVkIHRoaXMgYmxvY2sgaW5hY3RpdmUgYW5kIG5vCisJCQkgKiBjb29yZGluYXRlcyBzZW50IHRoaXMgZnJhbWUsIHNvIGhvbGQgb2ZmCisJCQkgKiBvbiBidXR0b24gc3RhdGUuCisJCQkgKi8KKwkJCWJyZWFrOworCQl9IGVsc2UgeyAvKiBDdXJyZW50bHkgYWN0aXZlICovCisJCQlpZiAodmFsdWUgJiYgbmQtPmFjdF9zdGF0ZSA+PQorCQkJCSAgICAgbmQtPmRlYWN0aXZhdGVfc2xhY2spCisJCQkJLyoKKwkJCQkgKiBMaXZlIHBvaW50OiBjbGVhciBhY2N1bXVsYXRlZAorCQkJCSAqIGRlYWN0aXZhdGlvbiBjb3VudC4KKwkJCQkgKi8KKwkJCQluZC0+YWN0X3N0YXRlID0gMDsKKwkJCWVsc2UgaWYgKG5kLT5hY3Rfc3RhdGUgPD0gbmQtPmRlYWN0aXZhdGVfc2xhY2spCisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBjb25zdW1lZCB0aGUgZGVhY3RpdmF0aW9uCisJCQkJICogc2xhY2ssIHRpbWUgdG8gZGVhY3RpdmF0ZSBhbmQgcmVzZXQuCisJCQkJICovCisJCQkJbmQtPmFjdF9zdGF0ZSA9CisJCQkJCW5kLT5hY3RpdmF0ZV9zbGFjazsKKwkJCWVsc2UgeyAvKiBNb3ZlIHRvd2FyZHMgZGVhY3RpdmF0aW9uICovCisJCQkJbmQtPmFjdF9zdGF0ZS0tOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG5kLT5maXJzdF9jb250YWN0X3RvdWNoICYmIG5kLT5hY3Rfc3RhdGUgPD0gMCkgeworCQkJLyoKKwkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSByZWFkeSB0byBzdGFydAorCQkJICogZW1pdHRpbmcgdG91Y2ggZXZlbnRzLgorCQkJICoKKwkJCSAqIE5vdGU6IGFjdGl2YXRpb24gc2xhY2sgd2lsbCBkZWNyZWFzZSBvdmVyCisJCQkgKiB0aGUgY291cnNlIG9mIHRoZSBmcmFtZSwgYW5kIGl0IHdpbGwgYmUKKwkJCSAqIGluY29uc2lzdGVudCBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kIG9mCisJCQkgKiB0aGUgZnJhbWUuICBIb3dldmVyIGlmIHRoZSBmcmFtZSBzdGFydHMKKwkJCSAqIHdpdGggc2xhY2ssIGZpcnN0X2NvbnRhY3RfdG91Y2ggd2lsbCBzdGlsbAorCQkJICogYmUgMCBhbmQgd2Ugd2lsbCBub3QgZ2V0IHRvIHRoaXMgcG9pbnQuCisJCQkgKi8KKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMSk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDEpOworCQl9IGVsc2UgeworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxFVEFQLCAwKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBmYWxsLWJhY2sgdG8gdGhlIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KKwkJcmV0dXJuIDA7CiAJfQogCitub3RfY2xhaW1lZF9pbnB1dDoKKwogCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCiAJaWYgKChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKIAkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CkBAIC04MjYsNyArODY3LDggQEAKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSkKLQkJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19NVUxUSV9JTlBVVDsKKwkJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19NVUxUSV9JTlBVVAorCQkJCXwgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUzsKIAogCW5kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50cmlnX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5kKSB7CkBAIC04OTMsOCArOTM1LDE5IEBACiAKIAkvKiBUaGlzIGlzIG5lZWRlZCBmb3IgZGV2aWNlcyB3aXRoIG1vcmUgcmVjZW50IGZpcm13YXJlIHZlcnNpb25zICovCiAJcmVwb3J0ID0gaGRldi0+cmVwb3J0X2VudW1bSElEX0ZFQVRVUkVfUkVQT1JUXS5yZXBvcnRfaWRfaGFzaFsweDBhXTsKLQlpZiAocmVwb3J0KQotCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoZGV2LCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKKwlpZiAocmVwb3J0KSB7CisJCS8qIExldCB0aGUgZGV2aWNlIHNldHRsZSB0byBlbnN1cmUgdGhlIHdha2V1cCBtZXNzYWdlIGdldHMKKwkJICogdGhyb3VnaCAqLworCQl1c2JoaWRfd2FpdF9pbyhoZGV2KTsKKwkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGRldiwgcmVwb3J0LCBVU0JfRElSX0lOKTsKKworCQkvKgorCQkgKiBTYW5pdHkgY2hlY2s6IGlmIHRoZSBjdXJyZW50IG1vZGUgaXMgaW52YWxpZCByZXNldCBpdCB0bworCQkgKiBzb21ldGhpbmcgcmVhc29uYWJsZS4KKwkJICovCisJCWlmIChudHJpZ19nZXRfbW9kZShoZGV2KSA+PSA0KQorCQkJbnRyaWdfc2V0X21vZGUoaGRldiwgMyk7CisJfQogCiAJbnRyaWdfcmVwb3J0X3ZlcnNpb24oaGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1vcnRlay5jIGIvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKaW5kZXggZTkwZWRmYy4uZjliN2RkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKQEAgLTEsNyArMSw2IEBACiAvKgotICogIEhJRCBkcml2ZXIgZm9yIE9ydGVrIFdLQi0yMDAwICh3aXJlbGVzcyBrZXlib2FyZCArIG1vdXNlIHRyYWNrcGFkKS4KLSAqICBGaXhlcyBMb2dpY2FsTWF4aW11bSBlcnJvciBpbiBVU0IgcmVwb3J0IGRlc2NyaXB0aW9uLCBzZWUKLSAqICBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODcKKyAqICBISUQgZHJpdmVyIGZvciBPcnRlayBQS0ItMTcwMC9XS0ItMjAwMCAod2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZCkuCisgKiAgRml4ZXMgTG9naWNhbE1heGltdW0gZXJyb3IgaW4gSElEIHJlcG9ydCBkZXNjcmlwdGlvbi4KICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDEwIEpvaG5hdGhvbiBIYXJyaXMgPGptaGFycmlzQGdtYWlsLmNvbT4KICAqLwpAQCAtMzAsNiArMjksNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgb3J0ZWtfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PUlRFSywgVVNCX0RFVklDRV9JRF9PUlRFS19QS0IxNzAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PUlRFSywgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwKSB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMgYi9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jCmluZGV4IGRlOWNmMjFiLi42NTdkYTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMKQEAgLTk0NCw2ICs5NDQsNyBAQAogCX0KIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihwcm9wcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gMHhmZjsKIAliZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihkZXZfbmFtZShkZXYpLCBkZXYsIGRhdGEsCiAJCQkmcGljb2xjZF9ibG9wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwNzQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogUm9jY2F0IEFydm8gZHJpdmVyIGZvciBMaW51eAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBSb2NjYXQgQXJ2byBpcyBhIGdhbWVyIGtleWJvYXJkIHdpdGggNSBtYWNybyBrZXlzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgaW4KKyAqIDUgcHJvZmlsZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC1yb2NjYXQuaD4KKyNpbmNsdWRlICJoaWQtaWRzLmgiCisjaW5jbHVkZSAiaGlkLXJvY2NhdC1jb21tb24uaCIKKyNpbmNsdWRlICJoaWQtcm9jY2F0LWFydm8uaCIKKworc3RhdGljIHN0cnVjdCBjbGFzcyAqYXJ2b19jbGFzczsKKworc3RhdGljIHNzaXplX3QgYXJ2b19zeXNmc19zaG93X21vZGVfa2V5KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYXJ2b19kZXZpY2UgKmFydm8gPQorCQkJaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudC0+cGFyZW50KSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPQorCQkJaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKKwlzdHJ1Y3QgYXJ2b19tb2RlX2tleSB0ZW1wX2J1ZjsKKwlpbnQgcmV0dmFsOworCisJbXV0ZXhfbG9jaygmYXJ2by0+YXJ2b19sb2NrKTsKKwlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3JlY2VpdmUodXNiX2RldiwgQVJWT19VU0JfQ09NTUFORF9NT0RFX0tFWSwKKwkJCSZ0ZW1wX2J1Ziwgc2l6ZW9mKHN0cnVjdCBhcnZvX21vZGVfa2V5KSk7CisJbXV0ZXhfdW5sb2NrKCZhcnZvLT5hcnZvX2xvY2spOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdGVtcF9idWYuc3RhdGUpOworfQorCitzdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3NldF9tb2RlX2tleShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBhcnZvX2RldmljZSAqYXJ2byA9CisJCQloaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9CisJCQlpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2LT5wYXJlbnQtPnBhcmVudCkpOworCXN0cnVjdCBhcnZvX21vZGVfa2V5IHRlbXBfYnVmOworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZzdGF0ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXRlbXBfYnVmLmNvbW1hbmQgPSBBUlZPX0NPTU1BTkRfTU9ERV9LRVk7CisJdGVtcF9idWYuc3RhdGUgPSBzdGF0ZTsKKworCW11dGV4X2xvY2soJmFydm8tPmFydm9fbG9jayk7CisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9zZW5kKHVzYl9kZXYsIEFSVk9fVVNCX0NPTU1BTkRfTU9ERV9LRVksCisJCQkmdGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19tb2RlX2tleSkpOworCW11dGV4X3VubG9jaygmYXJ2by0+YXJ2b19sb2NrKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2hvd19rZXlfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFydm9fZGV2aWNlICphcnZvID0KKwkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0KKwkJCWludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYtPnBhcmVudC0+cGFyZW50KSk7CisJc3RydWN0IGFydm9fa2V5X21hc2sgdGVtcF9idWY7CisJaW50IHJldHZhbDsKKworCW11dGV4X2xvY2soJmFydm8tPmFydm9fbG9jayk7CisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9yZWNlaXZlKHVzYl9kZXYsIEFSVk9fVVNCX0NPTU1BTkRfS0VZX01BU0ssCisJCQkmdGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19rZXlfbWFzaykpOworCW11dGV4X3VubG9jaygmYXJ2by0+YXJ2b19sb2NrKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHRlbXBfYnVmLmtleV9tYXNrKTsKK30KKworc3RhdGljIHNzaXplX3QgYXJ2b19zeXNmc19zZXRfa2V5X21hc2soc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgYXJ2b19kZXZpY2UgKmFydm8gPQorCQkJaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudC0+cGFyZW50KSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPQorCQkJaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKKwlzdHJ1Y3QgYXJ2b19rZXlfbWFzayB0ZW1wX2J1ZjsKKwl1bnNpZ25lZCBsb25nIGtleV9tYXNrOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAma2V5X21hc2spOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwl0ZW1wX2J1Zi5jb21tYW5kID0gQVJWT19DT01NQU5EX0tFWV9NQVNLOworCXRlbXBfYnVmLmtleV9tYXNrID0ga2V5X21hc2s7CisKKwltdXRleF9sb2NrKCZhcnZvLT5hcnZvX2xvY2spOworCXJldHZhbCA9IHJvY2NhdF9jb21tb25fc2VuZCh1c2JfZGV2LCBBUlZPX1VTQl9DT01NQU5EX0tFWV9NQVNLLAorCQkJJnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fa2V5X21hc2spKTsKKwltdXRleF91bmxvY2soJmFydm8tPmFydm9fbG9jayk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiBzaXplOworfQorCisvKiByZXR2YWwgaXMgMS01IG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvciAqLworc3RhdGljIGludCBhcnZvX2dldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKK3sKKwlzdHJ1Y3QgYXJ2b19hY3R1YWxfcHJvZmlsZSB0ZW1wX2J1ZjsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9yZWNlaXZlKHVzYl9kZXYsIEFSVk9fVVNCX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUsCisJCQkmdGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19hY3R1YWxfcHJvZmlsZSkpOworCisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiB0ZW1wX2J1Zi5hY3R1YWxfcHJvZmlsZTsKK30KKworc3RhdGljIHNzaXplX3QgYXJ2b19zeXNmc19zaG93X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYXJ2b19kZXZpY2UgKmFydm8gPQorCQkJaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudC0+cGFyZW50KSk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgYXJ2by0+YWN0dWFsX3Byb2ZpbGUpOworfQorCitzdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBhcnZvX2RldmljZSAqYXJ2byA9CisJCQloaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9CisJCQlpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2LT5wYXJlbnQtPnBhcmVudCkpOworCXN0cnVjdCBhcnZvX2FjdHVhbF9wcm9maWxlIHRlbXBfYnVmOworCXVuc2lnbmVkIGxvbmcgcHJvZmlsZTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnByb2ZpbGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwl0ZW1wX2J1Zi5jb21tYW5kID0gQVJWT19DT01NQU5EX0FDVFVBTF9QUk9GSUxFOworCXRlbXBfYnVmLmFjdHVhbF9wcm9maWxlID0gcHJvZmlsZTsKKworCW11dGV4X2xvY2soJmFydm8tPmFydm9fbG9jayk7CisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9zZW5kKHVzYl9kZXYsIEFSVk9fVVNCX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUsCisJCQkmdGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19hY3R1YWxfcHJvZmlsZSkpOworCWlmICghcmV0dmFsKSB7CisJCWFydm8tPmFjdHVhbF9wcm9maWxlID0gcHJvZmlsZTsKKwkJcmV0dmFsID0gc2l6ZTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZhcnZvLT5hcnZvX2xvY2spOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLAorCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgdm9pZCBjb25zdCAqYnVmLAorCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQsIHNpemVfdCByZWFsX3NpemUsIHVpbnQgY29tbWFuZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPQorCQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5wYXJlbnQtPnBhcmVudDsKKwlzdHJ1Y3QgYXJ2b19kZXZpY2UgKmFydm8gPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCByZXR2YWw7CisKKwlpZiAob2ZmICE9IDAgfHwgY291bnQgIT0gcmVhbF9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmFydm8tPmFydm9fbG9jayk7CisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTsKKwltdXRleF91bmxvY2soJmFydm8tPmFydm9fbG9jayk7CisKKwlyZXR1cm4gKHJldHZhbCA/IHJldHZhbCA6IHJlYWxfc2l6ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsCisJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCB2b2lkICpidWYsIGxvZmZfdCBvZmYsCisJCXNpemVfdCBjb3VudCwgc2l6ZV90IHJlYWxfc2l6ZSwgdWludCBjb21tYW5kKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OworCXN0cnVjdCBhcnZvX2RldmljZSAqYXJ2byA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJaW50IHJldHZhbDsKKworCWlmIChvZmYgPj0gcmVhbF9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmIChvZmYgIT0gMCB8fCBjb3VudCAhPSByZWFsX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmYXJ2by0+YXJ2b19sb2NrKTsKKwlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3JlY2VpdmUodXNiX2RldiwgY29tbWFuZCwgYnVmLCByZWFsX3NpemUpOworCW11dGV4X3VubG9jaygmYXJ2by0+YXJ2b19sb2NrKTsKKworCXJldHVybiAocmV0dmFsID8gcmV0dmFsIDogcmVhbF9zaXplKTsKK30KKworc3RhdGljIHNzaXplX3QgYXJ2b19zeXNmc193cml0ZV9idXR0b24oc3RydWN0IGZpbGUgKmZwLAorCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKKwkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhcnZvX3N5c2ZzX3dyaXRlKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsCisJCQlzaXplb2Yoc3RydWN0IGFydm9fYnV0dG9uKSwgQVJWT19VU0JfQ09NTUFORF9CVVRUT04pOworfQorCitzdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3JlYWRfaW5mbyhzdHJ1Y3QgZmlsZSAqZnAsCisJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAorCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFydm9fc3lzZnNfcmVhZChmcCwga29iaiwgYnVmLCBvZmYsIGNvdW50LAorCQkJc2l6ZW9mKHN0cnVjdCBhcnZvX2luZm8pLCBBUlZPX1VTQl9DT01NQU5EX0lORk8pOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhcnZvX2F0dHJpYnV0ZXNbXSA9IHsKKwlfX0FUVFIobW9kZV9rZXksIDA2NjAsCisJCQlhcnZvX3N5c2ZzX3Nob3dfbW9kZV9rZXksIGFydm9fc3lzZnNfc2V0X21vZGVfa2V5KSwKKwlfX0FUVFIoa2V5X21hc2ssIDA2NjAsCisJCQlhcnZvX3N5c2ZzX3Nob3dfa2V5X21hc2ssIGFydm9fc3lzZnNfc2V0X2tleV9tYXNrKSwKKwlfX0FUVFIoYWN0dWFsX3Byb2ZpbGUsIDA2NjAsCisJCQlhcnZvX3N5c2ZzX3Nob3dfYWN0dWFsX3Byb2ZpbGUsCisJCQlhcnZvX3N5c2ZzX3NldF9hY3R1YWxfcHJvZmlsZSksCisJX19BVFRSX05VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBhcnZvX2Jpbl9hdHRyaWJ1dGVzW10gPSB7CisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAiYnV0dG9uIiwgLm1vZGUgPSAwMjIwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBhcnZvX2J1dHRvbiksCisJCS53cml0ZSA9IGFydm9fc3lzZnNfd3JpdGVfYnV0dG9uCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJpbmZvIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBhcnZvX2luZm8pLAorCQkucmVhZCA9IGFydm9fc3lzZnNfcmVhZF9pbmZvCisJfSwKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIGludCBhcnZvX2luaXRfYXJ2b19kZXZpY2Vfc3RydWN0KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQlzdHJ1Y3QgYXJ2b19kZXZpY2UgKmFydm8pCit7CisJaW50IHJldHZhbDsKKworCW11dGV4X2luaXQoJmFydm8tPmFydm9fbG9jayk7CisKKwlyZXR2YWwgPSBhcnZvX2dldF9hY3R1YWxfcHJvZmlsZSh1c2JfZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwlhcnZvLT5hY3R1YWxfcHJvZmlsZSA9IHJldHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFydm9faW5pdF9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoaGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBhcnZvX2RldmljZSAqYXJ2bzsKKwlpbnQgcmV0dmFsOworCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbAorCQkJPT0gVVNCX0lOVEVSRkFDRV9QUk9UT0NPTF9LRVlCT0FSRCkgeworCQloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7CisJCXJldHVybiAwOworCX0KKworCWFydm8gPSBremFsbG9jKHNpemVvZigqYXJ2byksIEdGUF9LRVJORUwpOworCWlmICghYXJ2bykgeworCQloaWRfZXJyKGhkZXYsICJjYW4ndCBhbGxvYyBkZXZpY2UgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwloaWRfc2V0X2RydmRhdGEoaGRldiwgYXJ2byk7CisKKwlyZXR2YWwgPSBhcnZvX2luaXRfYXJ2b19kZXZpY2Vfc3RydWN0KHVzYl9kZXYsIGFydm8pOworCWlmIChyZXR2YWwpIHsKKwkJaGlkX2VycihoZGV2LCAiY291bGRuJ3QgaW5pdCBzdHJ1Y3QgYXJ2b19kZXZpY2VcbiIpOworCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisKKwlyZXR2YWwgPSByb2NjYXRfY29ubmVjdChhcnZvX2NsYXNzLCBoZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCBhcnZvX3JvY2NhdF9yZXBvcnQpKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQloaWRfZXJyKGhkZXYsICJjb3VsZG4ndCBpbml0IGNoYXIgZGV2XG4iKTsKKwl9IGVsc2UgeworCQlhcnZvLT5jaHJkZXZfbWlub3IgPSByZXR2YWw7CisJCWFydm8tPnJvY2NhdF9jbGFpbWVkID0gMTsKKwl9CisKKwlyZXR1cm4gMDsKK2V4aXRfZnJlZToKKwlrZnJlZShhcnZvKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBhcnZvX3JlbW92ZV9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoaGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGFydm9fZGV2aWNlICphcnZvOworCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbAorCQkJPT0gVVNCX0lOVEVSRkFDRV9QUk9UT0NPTF9LRVlCT0FSRCkKKwkJcmV0dXJuOworCisJYXJ2byA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwlpZiAoYXJ2by0+cm9jY2F0X2NsYWltZWQpCisJCXJvY2NhdF9kaXNjb25uZWN0KGFydm8tPmNocmRldl9taW5vcik7CisJa2ZyZWUoYXJ2byk7Cit9CisKK3N0YXRpYyBpbnQgYXJ2b19wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldHZhbCkgeworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXR2YWwpIHsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IGFydm9faW5pdF9zcGVjaWFscyhoZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWhpZF9lcnIoaGRldiwgImNvdWxkbid0IGluc3RhbGwga2V5Ym9hcmRcbiIpOworCQlnb3RvIGV4aXRfc3RvcDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9zdG9wOgorCWhpZF9od19zdG9wKGhkZXYpOworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBhcnZvX3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlhcnZvX3JlbW92ZV9zcGVjaWFscyhoZGV2KTsKKwloaWRfaHdfc3RvcChoZGV2KTsKK30KKworc3RhdGljIHZvaWQgYXJ2b19yZXBvcnRfdG9fY2hyZGV2KHN0cnVjdCBhcnZvX2RldmljZSBjb25zdCAqYXJ2bywKKwkJdTggY29uc3QgKmRhdGEpCit7CisJc3RydWN0IGFydm9fc3BlY2lhbF9yZXBvcnQgY29uc3QgKnNwZWNpYWxfcmVwb3J0OworCXN0cnVjdCBhcnZvX3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDsKKworCXNwZWNpYWxfcmVwb3J0ID0gKHN0cnVjdCBhcnZvX3NwZWNpYWxfcmVwb3J0IGNvbnN0ICopZGF0YTsKKworCXJvY2NhdF9yZXBvcnQucHJvZmlsZSA9IGFydm8tPmFjdHVhbF9wcm9maWxlOworCXJvY2NhdF9yZXBvcnQuYnV0dG9uID0gc3BlY2lhbF9yZXBvcnQtPmV2ZW50ICYKKwkJCUFSVk9fU1BFQ0lBTF9SRVBPUlRfRVZFTlRfTUFTS19CVVRUT047CisJaWYgKChzcGVjaWFsX3JlcG9ydC0+ZXZlbnQgJiBBUlZPX1NQRUNJQUxfUkVQT1JUX0VWRU5UX01BU0tfQUNUSU9OKSA9PQorCQkJQVJWT19TUEVDSUFMX1JFUE9SVF9FVkVOVF9BQ1RJT05fUFJFU1MpCisJCXJvY2NhdF9yZXBvcnQuYWN0aW9uID0gQVJWT19ST0NDQVRfUkVQT1JUX0FDVElPTl9QUkVTUzsKKwllbHNlCisJCXJvY2NhdF9yZXBvcnQuYWN0aW9uID0gQVJWT19ST0NDQVRfUkVQT1JUX0FDVElPTl9SRUxFQVNFOworCisJcm9jY2F0X3JlcG9ydF9ldmVudChhcnZvLT5jaHJkZXZfbWlub3IsCisJCQkodWludDhfdCBjb25zdCAqKSZyb2NjYXRfcmVwb3J0KTsKK30KKworc3RhdGljIGludCBhcnZvX3Jhd19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdTggKmRhdGEsIGludCBzaXplKQoreworCXN0cnVjdCBhcnZvX2RldmljZSAqYXJ2byA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmIChzaXplICE9IDMpCisJCXJldHVybiAwOworCisJaWYgKGFydm8tPnJvY2NhdF9jbGFpbWVkKQorCQlhcnZvX3JlcG9ydF90b19jaHJkZXYoYXJ2bywgZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGFydm9fZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0FSVk8pIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgYXJ2b19kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGFydm9fZHJpdmVyID0geworCS5uYW1lID0gImFydm8iLAorCS5pZF90YWJsZSA9IGFydm9fZGV2aWNlcywKKwkucHJvYmUgPSBhcnZvX3Byb2JlLAorCS5yZW1vdmUgPSBhcnZvX3JlbW92ZSwKKwkucmF3X2V2ZW50ID0gYXJ2b19yYXdfZXZlbnQKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFydm9faW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlhcnZvX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiYXJ2byIpOworCWlmIChJU19FUlIoYXJ2b19jbGFzcykpCisJCXJldHVybiBQVFJfRVJSKGFydm9fY2xhc3MpOworCWFydm9fY2xhc3MtPmRldl9hdHRycyA9IGFydm9fYXR0cmlidXRlczsKKwlhcnZvX2NsYXNzLT5kZXZfYmluX2F0dHJzID0gYXJ2b19iaW5fYXR0cmlidXRlczsKKworCXJldHZhbCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmFydm9fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQljbGFzc19kZXN0cm95KGFydm9fY2xhc3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcnZvX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmFydm9fZHJpdmVyKTsKKwljbGFzc19kZXN0cm95KGFydm9fY2xhc3MpOworfQorCittb2R1bGVfaW5pdChhcnZvX2luaXQpOworbW9kdWxlX2V4aXQoYXJ2b19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU3RlZmFuIEFjaGF0eiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0IgUm9jY2F0IEFydm8gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaCBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODRhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaApAQCAtMCwwICsxLDk4IEBACisjaWZuZGVmIF9fSElEX1JPQ0NBVF9BUlZPX0gKKyNkZWZpbmUgX19ISURfUk9DQ0FUX0FSVk9fSAorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBhcnZvX21vZGVfa2V5IHsgLyogMiBieXRlcyAqLworCXVpbnQ4X3QgY29tbWFuZDsgLyogQVJWT19DT01NQU5EX01PREVfS0VZICovCisJdWludDhfdCBzdGF0ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcnZvX2J1dHRvbiB7CisJdWludDhfdCB1bmtub3duWzI0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcnZvX2luZm8geworCXVpbnQ4X3QgdW5rbm93bls4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcnZvX2tleV9tYXNrIHsgLyogMiBieXRlcyAqLworCXVpbnQ4X3QgY29tbWFuZDsgLyogQVJWT19DT01NQU5EX0tFWV9NQVNLICovCisJdWludDhfdCBrZXlfbWFzazsKK30gX19wYWNrZWQ7CisKKy8qIHNlbGVjdGVkIHByb2ZpbGUgaXMgcGVyc2lzdGVudCAqLworc3RydWN0IGFydm9fYWN0dWFsX3Byb2ZpbGUgeyAvKiAyIGJ5dGVzICovCisJdWludDhfdCBjb21tYW5kOyAvKiBBUlZPX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUgKi8KKwl1aW50OF90IGFjdHVhbF9wcm9maWxlOworfSBfX3BhY2tlZDsKKworZW51bSBhcnZvX2NvbW1hbmRzIHsKKwlBUlZPX0NPTU1BTkRfTU9ERV9LRVkgPSAweDMsCisJQVJWT19DT01NQU5EX0JVVFRPTiA9IDB4NCwKKwlBUlZPX0NPTU1BTkRfSU5GTyA9IDB4NSwKKwlBUlZPX0NPTU1BTkRfS0VZX01BU0sgPSAweDYsCisJQVJWT19DT01NQU5EX0FDVFVBTF9QUk9GSUxFID0gMHg3LAorfTsKKworZW51bSBhcnZvX3VzYl9jb21tYW5kcyB7CisJQVJWT19VU0JfQ09NTUFORF9NT0RFX0tFWSA9IDB4MzAzLAorCS8qCisJICogcmVhZC93cml0ZQorCSAqIFJlYWQgdXNlcyBib3RoIGluZGV4IGJ5dGVzIGFzIHByb2ZpbGUva2V5IGluZGV4ZXMKKwkgKiBXcml0ZSBoYXMgaW5kZXggMCwgcHJvZmlsZS9rZXkgaXMgZGV0ZXJtaW5lZCBieSBwYXlsb2FkCisJICovCisJQVJWT19VU0JfQ09NTUFORF9CVVRUT04gPSAweDMwNCwKKwlBUlZPX1VTQl9DT01NQU5EX0lORk8gPSAweDMwNSwKKwlBUlZPX1VTQl9DT01NQU5EX0tFWV9NQVNLID0gMHgzMDYsCisJQVJWT19VU0JfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSA9IDB4MzA3LAorfTsKKworc3RydWN0IGFydm9fc3BlY2lhbF9yZXBvcnQgeworCXVpbnQ4X3QgdW5rbm93bjE7IC8qIGFsd2F5cyAweDAxICovCisJdWludDhfdCBldmVudDsKKwl1aW50OF90IHVua25vd24yOyAvKiBhbHdheXMgMHg3MCAqLworfSBfX3BhY2tlZDsKKworZW51bSBhcnZvX3NwZWNpYWxfcmVwb3J0X2V2ZW50cyB7CisJQVJWT19TUEVDSUFMX1JFUE9SVF9FVkVOVF9BQ1RJT05fUFJFU1MgPSAweDEwLAorCUFSVk9fU1BFQ0lBTF9SRVBPUlRfRVZFTlRfQUNUSU9OX1JFTEVBU0UgPSAweDAsCit9OworCitlbnVtIGFydm9fc3BlY2lhbF9yZXBvcnRfZXZlbnRfbWFza3MgeworCUFSVk9fU1BFQ0lBTF9SRVBPUlRfRVZFTlRfTUFTS19BQ1RJT04gPSAweGYwLAorCUFSVk9fU1BFQ0lBTF9SRVBPUlRfRVZFTlRfTUFTS19CVVRUT04gPSAweDBmLAorfTsKKworc3RydWN0IGFydm9fcm9jY2F0X3JlcG9ydCB7CisJdWludDhfdCBwcm9maWxlOworCXVpbnQ4X3QgYnV0dG9uOworCXVpbnQ4X3QgYWN0aW9uOworfSBfX3BhY2tlZDsKKworZW51bSBhcnZvX3JvY2NhdF9yZXBvcnRfYWN0aW9uIHsKKwlBUlZPX1JPQ0NBVF9SRVBPUlRfQUNUSU9OX1JFTEVBU0UgPSAwLAorCUFSVk9fUk9DQ0FUX1JFUE9SVF9BQ1RJT05fUFJFU1MgPSAxLAorfTsKKworc3RydWN0IGFydm9fZGV2aWNlIHsKKwlpbnQgcm9jY2F0X2NsYWltZWQ7CisJaW50IGNocmRldl9taW5vcjsKKworCXN0cnVjdCBtdXRleCBhcnZvX2xvY2s7CisKKwlpbnQgYWN0dWFsX3Byb2ZpbGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjFlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBSb2NjYXQgY29tbW9uIGZ1bmN0aW9ucyBmb3IgZGV2aWNlIHNwZWNpZmljIGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImhpZC1yb2NjYXQtY29tbW9uLmgiCisKK2ludCByb2NjYXRfY29tbW9uX3JlY2VpdmUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgdXNiX2NvbW1hbmQsCisJCXZvaWQgKmRhdGEsIHVpbnQgc2l6ZSkKK3sKKwljaGFyICpidWY7CisJaW50IGxlbjsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxlbiA9IHVzYl9jb250cm9sX21zZyh1c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCksCisJCQlVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCisJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAorCQkJdXNiX2NvbW1hbmQsIDAsIGJ1Ziwgc2l6ZSwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJbWVtY3B5KGRhdGEsIGJ1Ziwgc2l6ZSk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gKChsZW4gPCAwKSA/IGxlbiA6ICgobGVuICE9IHNpemUpID8gLUVJTyA6IDApKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb21tb25fcmVjZWl2ZSk7CisKK2ludCByb2NjYXRfY29tbW9uX3NlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgdXNiX2NvbW1hbmQsCisJCXZvaWQgY29uc3QgKmRhdGEsIHVpbnQgc2l6ZSkKK3sKKwljaGFyICpidWY7CisJaW50IGxlbjsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShidWYsIGRhdGEsIHNpemUpOworCisJbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKKwkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCisJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCXVzYl9jb21tYW5kLCAwLCBidWYsIHNpemUsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKworCWtmcmVlKGJ1Zik7CisJcmV0dXJuICgobGVuIDwgMCkgPyBsZW4gOiAoKGxlbiAhPSBzaXplKSA/IC1FSU8gOiAwKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uX3NlbmQpOworCitNT0RVTEVfQVVUSE9SKCJTdGVmYW4gQWNoYXR6Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlVTQiBSb2NjYXQgY29tbW9uIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaCBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0NWZhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0hJRF9ST0NDQVRfQ09NTU9OX0gKKyNkZWZpbmUgX19ISURfUk9DQ0FUX0NPTU1PTl9ICisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworaW50IHJvY2NhdF9jb21tb25fcmVjZWl2ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCB1c2JfY29tbWFuZCwKKwkJdm9pZCAqZGF0YSwgdWludCBzaXplKTsKK2ludCByb2NjYXRfY29tbW9uX3NlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgdXNiX2NvbW1hbmQsCisJCXZvaWQgY29uc3QgKmRhdGEsIHVpbnQgc2l6ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYwppbmRleCBjYmQ4Y2M0Li5hNTc4MzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYwpAQCAtMjgsMTEgKzI4LDExIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLXJvY2NhdC5oPgogI2luY2x1ZGUgImhpZC1pZHMuaCIKLSNpbmNsdWRlICJoaWQtcm9jY2F0LmgiCisjaW5jbHVkZSAiaGlkLXJvY2NhdC1jb21tb24uaCIKICNpbmNsdWRlICJoaWQtcm9jY2F0LWtvbmUuaCIKIAogc3RhdGljIHVpbnQgcHJvZmlsZV9udW1iZXJzWzVdID0gezAsIDEsIDIsIDMsIDR9OwpAQCAtNTgsMTIgKzU4LDggQEAKICAqLwogc3RhdGljIGludCBrb25lX2NoZWNrX3dyaXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQogewotCWludCBsZW47Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQotCWRhdGEgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaW50IHJldHZhbDsKKwl1aW50OF90IGRhdGE7CiAKIAlkbyB7CiAJCS8qCkBAIC03Miw1NiArNjgsMzYgQEAKIAkJICovCiAJCW1zbGVlcCg4MCk7CiAKLQkJbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JfZGV2LCAwKSwKLQkJCQlVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCi0JCQkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwKLQkJCQlVU0JfRElSX0lOLAotCQkJCWtvbmVfY29tbWFuZF9jb25maXJtX3dyaXRlLCAwLCBkYXRhLCAxLAotCQkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKLQotCQlpZiAobGVuICE9IDEpIHsKLQkJCWtmcmVlKGRhdGEpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KKwkJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9yZWNlaXZlKHVzYl9kZXYsCisJCQkJa29uZV9jb21tYW5kX2NvbmZpcm1fd3JpdGUsICZkYXRhLCAxKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CiAKIAkJLyoKIAkJICogdmFsdWUgb2YgMyBzZWVtcyB0byBtZWFuIHNvbWV0aGluZyBsaWtlCiAJCSAqICJub3QgZmluaXNoZWQgeWV0LCBidXQgaXQgbG9va3MgZ29vZCIKIAkJICogU28gY2hlY2sgYWdhaW4gYWZ0ZXIgYSBtb21lbnQuCiAJCSAqLwotCX0gd2hpbGUgKCpkYXRhID09IDMpOworCX0gd2hpbGUgKGRhdGEgPT0gMyk7CiAKLQlpZiAoKmRhdGEgPT0gMSkgeyAvKiBldmVyeXRoaW5nIGFscmlnaHQgKi8KLQkJa2ZyZWUoZGF0YSk7CisJaWYgKGRhdGEgPT0gMSkgLyogZXZlcnl0aGluZyBhbHJpZ2h0ICovCiAJCXJldHVybiAwOwotCX0gZWxzZSB7IC8qIHVua25vd24gYW5zd2VyICovCi0JCWhpZF9lcnIodXNiX2RldiwgImdvdCByZXR2YWwgJWQgd2hlbiBjaGVja2luZyB3cml0ZVxuIiwgKmRhdGEpOwotCQlrZnJlZShkYXRhKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCisJLyogdW5rbm93biBhbnN3ZXIgKi8KKwloaWRfZXJyKHVzYl9kZXYsICJnb3QgcmV0dmFsICVkIHdoZW4gY2hlY2tpbmcgd3JpdGVcbiIsIGRhdGEpOworCXJldHVybiAtRUlPOwogfQogCiAvKgogICogUmVhZHMgc2V0dGluZ3MgZnJvbSBtb3VzZSBhbmQgc3RvcmVzIGl0IGluIEBidWYKLSAqIEBidWYgaGFzIHRvIGJlIGFsbG9jZWQgd2l0aCBHRlBfS0VSTkVMCiAgKiBPbiBzdWNjZXNzIHJldHVybnMgMAogICogT24gZmFpbHVyZSByZXR1cm5zIGVycm5vCiAgKi8KIHN0YXRpYyBpbnQga29uZV9nZXRfc2V0dGluZ3Moc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCiAJCXN0cnVjdCBrb25lX3NldHRpbmdzICpidWYpCiB7Ci0JaW50IGxlbjsKLQotCWxlbiA9IHVzYl9jb250cm9sX21zZyh1c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCksCi0JCQlVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCi0JCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAotCQkJa29uZV9jb21tYW5kX3NldHRpbmdzLCAwLCBidWYsCi0JCQlzaXplb2Yoc3RydWN0IGtvbmVfc2V0dGluZ3MpLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0KLQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qga29uZV9zZXR0aW5ncykpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBrb25lX2NvbW1hbmRfc2V0dGluZ3MsIGJ1ZiwKKwkJCXNpemVvZihzdHJ1Y3Qga29uZV9zZXR0aW5ncykpOwogfQogCiAvKgpAQCAtMTMyLDIyICsxMDgsMTIgQEAKIHN0YXRpYyBpbnQga29uZV9zZXRfc2V0dGluZ3Moc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCiAJCXN0cnVjdCBrb25lX3NldHRpbmdzIGNvbnN0ICpzZXR0aW5ncykKIHsKLQlpbnQgbGVuOwotCi0JbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKLQkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCi0JCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKLQkJCWtvbmVfY29tbWFuZF9zZXR0aW5ncywgMCwgKGNoYXIgKilzZXR0aW5ncywKLQkJCXNpemVvZihzdHJ1Y3Qga29uZV9zZXR0aW5ncyksCi0JCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0KLQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qga29uZV9zZXR0aW5ncykpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKGtvbmVfY2hlY2tfd3JpdGUodXNiX2RldikpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIDA7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3NlbmQodXNiX2Rldiwga29uZV9jb21tYW5kX3NldHRpbmdzLAorCQkJc2V0dGluZ3MsIHNpemVvZihzdHJ1Y3Qga29uZV9zZXR0aW5ncykpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dXJuIGtvbmVfY2hlY2tfd3JpdGUodXNiX2Rldik7CiB9CiAKIC8qCkBAIC0xOTMsNyArMTU5LDcgQEAKIAlsZW4gPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHVzYl9kZXYsIDApLAogCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKIAkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQkJa29uZV9jb21tYW5kX3Byb2ZpbGUsIG51bWJlciwgKGNoYXIgKilwcm9maWxlLAorCQkJa29uZV9jb21tYW5kX3Byb2ZpbGUsIG51bWJlciwgKHZvaWQgKilwcm9maWxlLAogCQkJc2l6ZW9mKHN0cnVjdCBrb25lX3Byb2ZpbGUpLAogCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCkBAIC0yMTMsMjQgKzE3OSwxNSBAQAogICovCiBzdGF0aWMgaW50IGtvbmVfZ2V0X3dlaWdodChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgaW50ICpyZXN1bHQpCiB7Ci0JaW50IGxlbjsKLQl1aW50OF90ICpkYXRhOworCWludCByZXR2YWw7CisJdWludDhfdCBkYXRhOwogCi0JZGF0YSA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3JlY2VpdmUodXNiX2Rldiwga29uZV9jb21tYW5kX3dlaWdodCwgJmRhdGEsIDEpOwogCi0JbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JfZGV2LCAwKSwKLQkJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKLQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfSU4sCi0JCQlrb25lX2NvbW1hbmRfd2VpZ2h0LCAwLCBkYXRhLCAxLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAotCWlmIChsZW4gIT0gMSkgewotCQlrZnJlZShkYXRhKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCSpyZXN1bHQgPSAoaW50KSpkYXRhOwotCWtmcmVlKGRhdGEpOworCSpyZXN1bHQgPSAoaW50KWRhdGE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MSwyNSArMTk4LDE1IEBACiAgKi8KIHN0YXRpYyBpbnQga29uZV9nZXRfZmlybXdhcmVfdmVyc2lvbihzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgaW50ICpyZXN1bHQpCiB7Ci0JaW50IGxlbjsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOworCWludCByZXR2YWw7CisJdWludDE2X3QgZGF0YTsKIAotCWRhdGEgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9yZWNlaXZlKHVzYl9kZXYsIGtvbmVfY29tbWFuZF9maXJtd2FyZV92ZXJzaW9uLAorCQkJJmRhdGEsIDIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAKLQlsZW4gPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgdXNiX3JjdmN0cmxwaXBlKHVzYl9kZXYsIDApLAotCQkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAotCQkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTiwKLQkJCWtvbmVfY29tbWFuZF9maXJtd2FyZV92ZXJzaW9uLCAwLCBkYXRhLCAyLAotCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwotCi0JaWYgKGxlbiAhPSAyKSB7Ci0JCWtmcmVlKGRhdGEpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JKnJlc3VsdCA9IGxlMTZfdG9fY3B1KCpkYXRhKTsKLQlrZnJlZShkYXRhKTsKKwkqcmVzdWx0ID0gbGUxNl90b19jcHUoZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNSwyMyArMzgyLDkgQEAKIAogc3RhdGljIGludCBrb25lX3RjdV9jb21tYW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBpbnQgbnVtYmVyKQogewotCWludCBsZW47Ci0JY2hhciAqdmFsdWU7Ci0KLQl2YWx1ZSA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2YWx1ZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkqdmFsdWUgPSBudW1iZXI7Ci0KLQlsZW4gPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHVzYl9kZXYsIDApLAotCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKLQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQkJa29uZV9jb21tYW5kX2NhbGlicmF0ZSwgMCwgdmFsdWUsIDEsCi0JCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0KLQlrZnJlZSh2YWx1ZSk7Ci0JcmV0dXJuICgobGVuICE9IDEpID8gLUVJTyA6IDApOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJdmFsdWUgPSBudW1iZXI7CisJcmV0dXJuIHJvY2NhdF9jb21tb25fc2VuZCh1c2JfZGV2LCBrb25lX2NvbW1hbmRfY2FsaWJyYXRlLCAmdmFsdWUsIDEpOwogfQogCiAvKgpAQCAtNzI3LDcgKzY2MCw4IEBACiAJCQlnb3RvIGV4aXRfZnJlZTsKIAkJfQogCi0JCXJldHZhbCA9IHJvY2NhdF9jb25uZWN0KGtvbmVfY2xhc3MsIGhkZXYpOworCQlyZXR2YWwgPSByb2NjYXRfY29ubmVjdChrb25lX2NsYXNzLCBoZGV2LAorCQkJCXNpemVvZihzdHJ1Y3Qga29uZV9yb2NjYXRfcmVwb3J0KSk7CiAJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQloaWRfZXJyKGhkZXYsICJjb3VsZG4ndCBpbml0IGNoYXIgZGV2XG4iKTsKIAkJCS8qIGJlIHRvbGVyYW50IGFib3V0IG5vdCBnZXR0aW5nIGNocmRldiAqLwpAQCAtODI3LDggKzc2MSw3IEBACiAJCXJvY2NhdF9yZXBvcnQudmFsdWUgPSBldmVudC0+dmFsdWU7CiAJCXJvY2NhdF9yZXBvcnQua2V5ID0gMDsKIAkJcm9jY2F0X3JlcG9ydF9ldmVudChrb25lLT5jaHJkZXZfbWlub3IsCi0JCQkJKHVpbnQ4X3QgKikmcm9jY2F0X3JlcG9ydCwKLQkJCQlzaXplb2Yoc3RydWN0IGtvbmVfcm9jY2F0X3JlcG9ydCkpOworCQkJCSh1aW50OF90ICopJnJvY2NhdF9yZXBvcnQpOwogCQlicmVhazsKIAljYXNlIGtvbmVfbW91c2VfZXZlbnRfY2FsbF9vdmVybG9uZ19tYWNybzoKIAkJaWYgKGV2ZW50LT52YWx1ZSA9PSBrb25lX2tleXN0cm9rZV9hY3Rpb25fcHJlc3MpIHsKQEAgLTgzNiw4ICs3NjksNyBAQAogCQkJcm9jY2F0X3JlcG9ydC52YWx1ZSA9IGtvbmUtPmFjdHVhbF9wcm9maWxlOwogCQkJcm9jY2F0X3JlcG9ydC5rZXkgPSBldmVudC0+bWFjcm9fa2V5OwogCQkJcm9jY2F0X3JlcG9ydF9ldmVudChrb25lLT5jaHJkZXZfbWlub3IsCi0JCQkJCSh1aW50OF90ICopJnJvY2NhdF9yZXBvcnQsCi0JCQkJCXNpemVvZihzdHJ1Y3Qga29uZV9yb2NjYXRfcmVwb3J0KSk7CisJCQkJCSh1aW50OF90ICopJnJvY2NhdF9yZXBvcnQpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTkxMiw4ICs4NDQsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQga29uZV9leGl0KHZvaWQpCiB7Ci0JY2xhc3NfZGVzdHJveShrb25lX2NsYXNzKTsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmtvbmVfZHJpdmVyKTsKKwljbGFzc19kZXN0cm95KGtvbmVfY2xhc3MpOwogfQogCiBtb2R1bGVfaW5pdChrb25lX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jCmluZGV4IDE2MDhjOGQuLjMzZWVjNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMKQEAgLTE5LDExICsxOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC1yb2NjYXQuaD4KICNpbmNsdWRlICJoaWQtaWRzLmgiCi0jaW5jbHVkZSAiaGlkLXJvY2NhdC5oIgorI2luY2x1ZGUgImhpZC1yb2NjYXQtY29tbW9uLmgiCiAjaW5jbHVkZSAiaGlkLXJvY2NhdC1rb25lcGx1cy5oIgogCiBzdGF0aWMgdWludCBwcm9maWxlX251bWJlcnNbNV0gPSB7MCwgMSwgMiwgMywgNH07CkBAIC0zOSwxMTAgKzM5LDYzIEBACiBzdGF0aWMgaW50IGtvbmVwbHVzX3NlbmRfY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCB2YWx1ZSwKIAkJZW51bSBrb25lcGx1c19jb250cm9sX3JlcXVlc3RzIHJlcXVlc3QpCiB7Ci0JaW50IGxlbjsKLQlzdHJ1Y3Qga29uZXBsdXNfY29udHJvbCAqY29udHJvbDsKKwlzdHJ1Y3Qga29uZXBsdXNfY29udHJvbCBjb250cm9sOwogCiAJaWYgKChyZXF1ZXN0ID09IEtPTkVQTFVTX0NPTlRST0xfUkVRVUVTVF9QUk9GSUxFX1NFVFRJTkdTIHx8CiAJCQlyZXF1ZXN0ID09IEtPTkVQTFVTX0NPTlRST0xfUkVRVUVTVF9QUk9GSUxFX0JVVFRPTlMpICYmCiAJCQl2YWx1ZSA+IDQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY29udHJvbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19jb250cm9sKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb250cm9sKQotCQlyZXR1cm4gLUVOT01FTTsKKwljb250cm9sLmNvbW1hbmQgPSBLT05FUExVU19DT01NQU5EX0NPTlRST0w7CisJY29udHJvbC52YWx1ZSA9IHZhbHVlOworCWNvbnRyb2wucmVxdWVzdCA9IHJlcXVlc3Q7CiAKLQljb250cm9sLT5jb21tYW5kID0gS09ORVBMVVNfQ09NTUFORF9DT05UUk9MOwotCWNvbnRyb2wtPnZhbHVlID0gdmFsdWU7Ci0JY29udHJvbC0+cmVxdWVzdCA9IHJlcXVlc3Q7Ci0KLQlsZW4gPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHVzYl9kZXYsIDApLAotCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKLQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQkJS09ORVBMVVNfVVNCX0NPTU1BTkRfQ09OVFJPTCwgMCwgY29udHJvbCwKLQkJCXNpemVvZihzdHJ1Y3Qga29uZXBsdXNfY29udHJvbCksCi0JCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0KLQlrZnJlZShjb250cm9sKTsKLQotCWlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19jb250cm9sKSkKLQkJcmV0dXJuIGxlbjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGtvbmVwbHVzX3JlY2VpdmUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgdXNiX2NvbW1hbmQsCi0JCXZvaWQgKmJ1ZiwgdWludCBzaXplKSB7Ci0JaW50IGxlbjsKLQotCWxlbiA9IHVzYl9jb250cm9sX21zZyh1c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCksCi0JCQlVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCi0JCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAotCQkJdXNiX2NvbW1hbmQsIDAsIGJ1Ziwgc2l6ZSwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwotCi0JcmV0dXJuIChsZW4gIT0gc2l6ZSkgPyAtRUlPIDogMDsKKwlyZXR1cm4gcm9jY2F0X2NvbW1vbl9zZW5kKHVzYl9kZXYsIEtPTkVQTFVTX1VTQl9DT01NQU5EX0NPTlRST0wsCisJCQkmY29udHJvbCwgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19jb250cm9sKSk7CiB9CiAKIHN0YXRpYyBpbnQga29uZXBsdXNfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKIHsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCBrb25lcGx1c19jb250cm9sICpjb250cm9sOwotCi0JY29udHJvbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19jb250cm9sKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb250cm9sKQotCQlyZXR1cm4gLUVOT01FTTsKKwlzdHJ1Y3Qga29uZXBsdXNfY29udHJvbCBjb250cm9sOwogCiAJZG8gewotCQlyZXR2YWwgPSBrb25lcGx1c19yZWNlaXZlKHVzYl9kZXYsIEtPTkVQTFVTX1VTQl9DT01NQU5EX0NPTlRST0wsCi0JCQkJY29udHJvbCwgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19jb250cm9sKSk7CisJCXJldHZhbCA9IHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9DT05UUk9MLAorCQkJCSZjb250cm9sLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX2NvbnRyb2wpKTsKIAogCQkvKiBjaGVjayBpZiB3ZSBnZXQgYSBjb21wbGV0ZWx5IHdyb25nIGFuc3dlciAqLwogCQlpZiAocmV0dmFsKQotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gcmV0dmFsOwogCi0JCWlmIChjb250cm9sLT52YWx1ZSA9PSBLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX09LKSB7Ci0JCQlyZXR2YWwgPSAwOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJaWYgKGNvbnRyb2wudmFsdWUgPT0gS09ORVBMVVNfQ09OVFJPTF9SRVFVRVNUX1NUQVRVU19PSykKKwkJCXJldHVybiAwOwogCiAJCS8qIGluZGljYXRlcyB0aGF0IGhhcmR3YXJlIG5lZWRzIHNvbWUgbW9yZSB0aW1lIHRvIGNvbXBsZXRlIGFjdGlvbiAqLwotCQlpZiAoY29udHJvbC0+dmFsdWUgPT0gS09ORVBMVVNfQ09OVFJPTF9SRVFVRVNUX1NUQVRVU19XQUlUKSB7CisJCWlmIChjb250cm9sLnZhbHVlID09IEtPTkVQTFVTX0NPTlRST0xfUkVRVUVTVF9TVEFUVVNfV0FJVCkgewogCQkJbXNsZWVwKDUwMCk7IC8qIHdpbmRvd3MgZHJpdmVyIHVzZXMgMTAwMCAqLwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBzZWVtcyB0byBiZSBjcml0aWNhbCAtIHJlcGx1ZyBuZWNlc3NhcnkgKi8KLQkJaWYgKGNvbnRyb2wtPnZhbHVlID09IEtPTkVQTFVTX0NPTlRST0xfUkVRVUVTVF9TVEFUVVNfT1ZFUkxPQUQpIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQlpZiAoY29udHJvbC52YWx1ZSA9PSBLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX09WRVJMT0FEKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZGV2X2VycigmdXNiX2Rldi0+ZGV2LCAia29uZXBsdXNfcmVjZWl2ZV9jb250cm9sX3N0YXR1czogIgotCQkJCSJ1bmtub3duIHJlc3BvbnNlIHZhbHVlIDB4JXhcbiIsIGNvbnRyb2wtPnZhbHVlKTsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0KKwkJaGlkX2Vycih1c2JfZGV2LCAia29uZXBsdXNfcmVjZWl2ZV9jb250cm9sX3N0YXR1czogIgorCQkJCSJ1bmtub3duIHJlc3BvbnNlIHZhbHVlIDB4JXhcbiIsIGNvbnRyb2wudmFsdWUpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9IHdoaWxlICgxKTsKLW91dDoKLQlrZnJlZShjb250cm9sKTsKLQlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IGtvbmVwbHVzX3NlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgY29tbWFuZCwKLQkJdm9pZCAqYnVmLCB1aW50IHNpemUpIHsKLQlpbnQgbGVuOworCQl2b2lkIGNvbnN0ICpidWYsIHVpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0dmFsOwogCi0JbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKLQkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCi0JCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKLQkJCWNvbW1hbmQsIDAsIGJ1Ziwgc2l6ZSwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCXJldHZhbCA9IHJvY2NhdF9jb21tb25fc2VuZCh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHNpemUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAKLQlpZiAobGVuICE9IHNpemUpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKGtvbmVwbHVzX3JlY2VpdmVfY29udHJvbF9zdGF0dXModXNiX2RldikpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGtvbmVwbHVzX3JlY2VpdmVfY29udHJvbF9zdGF0dXModXNiX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQga29uZXBsdXNfc2VsZWN0X3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgbnVtYmVyLApAQCAtMTY3LDcgKzEyMCw3IEBACiBzdGF0aWMgaW50IGtvbmVwbHVzX2dldF9pbmZvKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAogCQlzdHJ1Y3Qga29uZXBsdXNfaW5mbyAqYnVmKQogewotCXJldHVybiBrb25lcGx1c19yZWNlaXZlKHVzYl9kZXYsIEtPTkVQTFVTX1VTQl9DT01NQU5EX0lORk8sCisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9JTkZPLAogCQkJYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX2luZm8pKTsKIH0KIApAQCAtMTgxLDcgKzEzNCw3IEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHVybiBrb25lcGx1c19yZWNlaXZlKHVzYl9kZXYsIEtPTkVQTFVTX1VTQl9DT01NQU5EX1BST0ZJTEVfU0VUVElOR1MsCisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX1NFVFRJTkdTLAogCQkJYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpKTsKIH0KIApAQCAtMTg5LDcgKzE0Miw3IEBACiAJCXN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzIGNvbnN0ICpzZXR0aW5ncykKIHsKIAlyZXR1cm4ga29uZXBsdXNfc2VuZCh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX1NFVFRJTkdTLAotCQkJKHZvaWQgKilzZXR0aW5ncywgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzKSk7CisJCQlzZXR0aW5ncywgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzKSk7CiB9CiAKIHN0YXRpYyBpbnQga29uZXBsdXNfZ2V0X3Byb2ZpbGVfYnV0dG9ucyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKQEAgLTIwMiw3ICsxNTUsNyBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR1cm4ga29uZXBsdXNfcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX0JVVFRPTlMsCisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX0JVVFRPTlMsCiAJCQlidWYsIHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9idXR0b25zKSk7CiB9CiAKQEAgLTIxMCwyNyArMTYzLDE5IEBACiAJCXN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMgY29uc3QgKmJ1dHRvbnMpCiB7CiAJcmV0dXJuIGtvbmVwbHVzX3NlbmQodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfUFJPRklMRV9CVVRUT05TLAotCQkJKHZvaWQgKilidXR0b25zLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOworCQkJYnV0dG9ucywgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMpKTsKIH0KIAogLyogcmV0dmFsIGlzIDAtNCBvbiBzdWNjZXNzLCA8IDAgb24gZXJyb3IgKi8KIHN0YXRpYyBpbnQga29uZXBsdXNfZ2V0X3N0YXJ0dXBfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKIHsKLQlzdHJ1Y3Qga29uZXBsdXNfc3RhcnR1cF9wcm9maWxlICpidWY7CisJc3RydWN0IGtvbmVwbHVzX3N0YXJ0dXBfcHJvZmlsZSBidWY7CiAJaW50IHJldHZhbDsKIAotCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19zdGFydHVwX3Byb2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3JlY2VpdmUodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfU1RBUlRVUF9QUk9GSUxFLAorCQkJJmJ1Ziwgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19zdGFydHVwX3Byb2ZpbGUpKTsKIAotCXJldHZhbCA9IGtvbmVwbHVzX3JlY2VpdmUodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfU1RBUlRVUF9QUk9GSUxFLAotCQkJYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3N0YXJ0dXBfcHJvZmlsZSkpOwotCi0JaWYgKHJldHZhbCkKLQkJZ290byBvdXQ7Ci0KLQlyZXR2YWwgPSBidWYtPnN0YXJ0dXBfcHJvZmlsZTsKLW91dDoKLQlrZnJlZShidWYpOwotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGJ1Zi5zdGFydHVwX3Byb2ZpbGU7CiB9CiAKIHN0YXRpYyBpbnQga29uZXBsdXNfc2V0X3N0YXJ0dXBfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKQEAgLTI0Myw3ICsxODgsNyBAQAogCWJ1Zi5zdGFydHVwX3Byb2ZpbGUgPSBzdGFydHVwX3Byb2ZpbGU7CiAKIAlyZXR1cm4ga29uZXBsdXNfc2VuZCh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9TVEFSVFVQX1BST0ZJTEUsCi0JCQkoY2hhciAqKSZidWYsIHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9idXR0b25zKSk7CisJCQkmYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOwogfQogCiBzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19yZWFkKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC0yNTYsMTEgKzIwMSwxNCBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldikpOwogCWludCByZXR2YWw7CiAKKwlpZiAob2ZmID49IHJlYWxfc2l6ZSkKKwkJcmV0dXJuIDA7CisKIAlpZiAob2ZmICE9IDAgfHwgY291bnQgIT0gcmVhbF9zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKLQlyZXR2YWwgPSBrb25lcGx1c19yZWNlaXZlKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTsKKwlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3JlY2VpdmUodXNiX2RldiwgY29tbWFuZCwgYnVmLCByZWFsX3NpemUpOwogCW11dGV4X3VubG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOwogCiAJaWYgKHJldHZhbCkKQEAgLTI4Myw3ICsyMzEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKLQlyZXR2YWwgPSBrb25lcGx1c19zZW5kKHVzYl9kZXYsIGNvbW1hbmQsICh2b2lkICopYnVmLCByZWFsX3NpemUpOworCXJldHZhbCA9IGtvbmVwbHVzX3NlbmQodXNiX2RldiwgY29tbWFuZCwgYnVmLCByZWFsX3NpemUpOwogCW11dGV4X3VubG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOwogCiAJaWYgKHJldHZhbCkKQEAgLTM0Nyw3ICsyOTUsNyBAQAogCQljb3VudCA9IHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9zZXR0aW5ncykgLSBvZmY7CiAKIAltdXRleF9sb2NrKCZrb25lcGx1cy0+a29uZXBsdXNfbG9jayk7Ci0JbWVtY3B5KGJ1ZiwgKCh2b2lkIGNvbnN0ICopJmtvbmVwbHVzLT5wcm9maWxlX3NldHRpbmdzWyoodWludCAqKShhdHRyLT5wcml2YXRlKV0pICsgb2ZmLAorCW1lbWNweShidWYsICgoY2hhciBjb25zdCAqKSZrb25lcGx1cy0+cHJvZmlsZV9zZXR0aW5nc1sqKHVpbnQgKikoYXR0ci0+cHJpdmF0ZSldKSArIG9mZiwKIAkJCWNvdW50KTsKIAltdXRleF91bmxvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKIApAQCAtNDA2LDcgKzM1NCw3IEBACiAJCWNvdW50ID0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMpIC0gb2ZmOwogCiAJbXV0ZXhfbG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOwotCW1lbWNweShidWYsICgodm9pZCBjb25zdCAqKSZrb25lcGx1cy0+cHJvZmlsZV9idXR0b25zWyoodWludCAqKShhdHRyLT5wcml2YXRlKV0pICsgb2ZmLAorCW1lbWNweShidWYsICgoY2hhciBjb25zdCAqKSZrb25lcGx1cy0+cHJvZmlsZV9idXR0b25zWyoodWludCAqKShhdHRyLT5wcml2YXRlKV0pICsgb2ZmLAogCQkJY291bnQpOwogCW11dGV4X3VubG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOwogCkBAIC01MTIsNyArNDYwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGtvbmVwbHVzX2Jpbl9hdHRyaWJ1dGVzW10gPSB7CiAJewotCQkuYXR0ciA9IHsgLm5hbWUgPSAic2Vuc29yIiwgLm1vZGUgPSAwMjIwIH0sCisJCS5hdHRyID0geyAubmFtZSA9ICJzZW5zb3IiLCAubW9kZSA9IDA2NjAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3NlbnNvciksCiAJCS5yZWFkID0ga29uZXBsdXNfc3lzZnNfcmVhZF9zZW5zb3IsCiAJCS53cml0ZSA9IGtvbmVwbHVzX3N5c2ZzX3dyaXRlX3NlbnNvcgpAQCAtNjA5LDExICs1NTcsMTMgQEAKIAkJc3RydWN0IGtvbmVwbHVzX2RldmljZSAqa29uZXBsdXMpCiB7CiAJaW50IHJldHZhbCwgaTsKLQlzdGF0aWMgdWludCB3YWl0ID0gNzA7IC8qIGRldmljZSB3aWxsIGZyZWV6ZSB3aXRoIGp1c3QgNjAgKi8KKwlzdGF0aWMgdWludCB3YWl0ID0gMTAwOyAvKiBkZXZpY2Ugd2lsbCBmcmVlemUgd2l0aCBqdXN0IDYwICovCiAKIAltdXRleF9pbml0KCZrb25lcGx1cy0+a29uZXBsdXNfbG9jayk7CiAKIAlrb25lcGx1cy0+c3RhcnR1cF9wcm9maWxlID0ga29uZXBsdXNfZ2V0X3N0YXJ0dXBfcHJvZmlsZSh1c2JfZGV2KTsKKwlpZiAoa29uZXBsdXMtPnN0YXJ0dXBfcHJvZmlsZSA8IDApCisJCXJldHVybiBrb25lcGx1cy0+c3RhcnR1cF9wcm9maWxlOwogCiAJbXNsZWVwKHdhaXQpOwogCXJldHZhbCA9IGtvbmVwbHVzX2dldF9pbmZvKHVzYl9kZXYsICZrb25lcGx1cy0+aW5mbyk7CkBAIC02NTEsMjEgKzYwMSwyMSBAQAogCiAJCWtvbmVwbHVzID0ga3phbGxvYyhzaXplb2YoKmtvbmVwbHVzKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICgha29uZXBsdXMpIHsKLQkJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGRldmljZSBkZXNjcmlwdG9yXG4iKTsKKwkJCWhpZF9lcnIoaGRldiwgImNhbid0IGFsbG9jIGRldmljZSBkZXNjcmlwdG9yXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBrb25lcGx1cyk7CiAKIAkJcmV0dmFsID0ga29uZXBsdXNfaW5pdF9rb25lcGx1c19kZXZpY2Vfc3RydWN0KHVzYl9kZXYsIGtvbmVwbHVzKTsKIAkJaWYgKHJldHZhbCkgewotCQkJZGV2X2VycigmaGRldi0+ZGV2LAotCQkJCQkiY291bGRuJ3QgaW5pdCBzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlXG4iKTsKKwkJCWhpZF9lcnIoaGRldiwgImNvdWxkbid0IGluaXQgc3RydWN0IGtvbmVwbHVzX2RldmljZVxuIik7CiAJCQlnb3RvIGV4aXRfZnJlZTsKIAkJfQogCi0JCXJldHZhbCA9IHJvY2NhdF9jb25uZWN0KGtvbmVwbHVzX2NsYXNzLCBoZGV2KTsKKwkJcmV0dmFsID0gcm9jY2F0X2Nvbm5lY3Qoa29uZXBsdXNfY2xhc3MsIGhkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19yb2NjYXRfcmVwb3J0KSk7CiAJCWlmIChyZXR2YWwgPCAwKSB7Ci0JCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjb3VsZG4ndCBpbml0IGNoYXIgZGV2XG4iKTsKKwkJCWhpZF9lcnIoaGRldiwgImNvdWxkbid0IGluaXQgY2hhciBkZXZcbiIpOwogCQl9IGVsc2UgewogCQkJa29uZXBsdXMtPmNocmRldl9taW5vciA9IHJldHZhbDsKIAkJCWtvbmVwbHVzLT5yb2NjYXRfY2xhaW1lZCA9IDE7CkBAIC03MDEsMTkgKzY1MSwxOSBAQAogCiAJcmV0dmFsID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAogCXJldHZhbCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlyZXR2YWwgPSBrb25lcGx1c19pbml0X3NwZWNpYWxzKGhkZXYpOwogCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY291bGRuJ3QgaW5zdGFsbCBtb3VzZVxuIik7CisJCWhpZF9lcnIoaGRldiwgImNvdWxkbid0IGluc3RhbGwgbW91c2VcbiIpOwogCQlnb3RvIGV4aXRfc3RvcDsKIAl9CiAKQEAgLTc2OSw4ICs3MTksNyBAQAogCXJvY2NhdF9yZXBvcnQuZGF0YTIgPSBidXR0b25fcmVwb3J0LT5kYXRhMjsKIAlyb2NjYXRfcmVwb3J0LnByb2ZpbGUgPSBrb25lcGx1cy0+YWN0dWFsX3Byb2ZpbGUgKyAxOwogCXJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZXBsdXMtPmNocmRldl9taW5vciwKLQkJCSh1aW50OF90IGNvbnN0ICopJnJvY2NhdF9yZXBvcnQsCi0JCQlzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3JvY2NhdF9yZXBvcnQpKTsKKwkJCSh1aW50OF90IGNvbnN0ICopJnJvY2NhdF9yZXBvcnQpOwogfQogCiBzdGF0aWMgaW50IGtvbmVwbHVzX3Jhd19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKQEAgLTgyNSw4ICs3NzQsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQga29uZXBsdXNfZXhpdCh2b2lkKQogewotCWNsYXNzX2Rlc3Ryb3koa29uZXBsdXNfY2xhc3MpOwogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigma29uZXBsdXNfZHJpdmVyKTsKKwljbGFzc19kZXN0cm95KGtvbmVwbHVzX2NsYXNzKTsKIH0KIAogbW9kdWxlX2luaXQoa29uZXBsdXNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvdmFwbHVzLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvdmFwbHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0YmUyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta292YXBsdXMuYwpAQCAtMCwwICsxLDcxNSBAQAorLyoKKyAqIFJvY2NhdCBLb3ZhWytdIGRyaXZlciBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICogUm9jY2F0IEtvdmFbK10gaXMgYSBiaWdnZXIgdmVyc2lvbiBvZiB0aGUgUHlyYSB3aXRoIHR3byBtb3JlIHNpZGUgYnV0dG9ucy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLXJvY2NhdC5oPgorI2luY2x1ZGUgImhpZC1pZHMuaCIKKyNpbmNsdWRlICJoaWQtcm9jY2F0LWNvbW1vbi5oIgorI2luY2x1ZGUgImhpZC1yb2NjYXQta292YXBsdXMuaCIKKworc3RhdGljIHVpbnQgcHJvZmlsZV9udW1iZXJzWzVdID0gezAsIDEsIDIsIDMsIDR9OworCitzdGF0aWMgc3RydWN0IGNsYXNzICprb3ZhcGx1c19jbGFzczsKKworc3RhdGljIHVpbnQga292YXBsdXNfY29udmVydF9ldmVudF9jcGkodWludCB2YWx1ZSkKK3sKKwlyZXR1cm4gKHZhbHVlID09IDcgPyA0IDogKHZhbHVlID09IDQgPyAzIDogdmFsdWUpKTsKK30KKworc3RhdGljIHZvaWQga292YXBsdXNfcHJvZmlsZV9hY3RpdmF0ZWQoc3RydWN0IGtvdmFwbHVzX2RldmljZSAqa292YXBsdXMsCisJCXVpbnQgbmV3X3Byb2ZpbGVfaW5kZXgpCit7CisJa292YXBsdXMtPmFjdHVhbF9wcm9maWxlID0gbmV3X3Byb2ZpbGVfaW5kZXg7CisJa292YXBsdXMtPmFjdHVhbF9jcGkgPSBrb3ZhcGx1cy0+cHJvZmlsZV9zZXR0aW5nc1tuZXdfcHJvZmlsZV9pbmRleF0uY3BpX3N0YXJ0dXBfbGV2ZWw7CisJa292YXBsdXMtPmFjdHVhbF94X3NlbnNpdGl2aXR5ID0ga292YXBsdXMtPnByb2ZpbGVfc2V0dGluZ3NbbmV3X3Byb2ZpbGVfaW5kZXhdLnNlbnNpdGl2aXR5X3g7CisJa292YXBsdXMtPmFjdHVhbF95X3NlbnNpdGl2aXR5ID0ga292YXBsdXMtPnByb2ZpbGVfc2V0dGluZ3NbbmV3X3Byb2ZpbGVfaW5kZXhdLnNlbnNpdGl2aXR5X3k7Cit9CisKK3N0YXRpYyBpbnQga292YXBsdXNfc2VuZF9jb250cm9sKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHZhbHVlLAorCQllbnVtIGtvdmFwbHVzX2NvbnRyb2xfcmVxdWVzdHMgcmVxdWVzdCkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBrb3ZhcGx1c19jb250cm9sIGNvbnRyb2w7CisKKwlpZiAoKHJlcXVlc3QgPT0gS09WQVBMVVNfQ09OVFJPTF9SRVFVRVNUX1BST0ZJTEVfU0VUVElOR1MgfHwKKwkJCXJlcXVlc3QgPT0gS09WQVBMVVNfQ09OVFJPTF9SRVFVRVNUX1BST0ZJTEVfQlVUVE9OUykgJiYKKwkJCXZhbHVlID4gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb250cm9sLmNvbW1hbmQgPSBLT1ZBUExVU19DT01NQU5EX0NPTlRST0w7CisJY29udHJvbC52YWx1ZSA9IHZhbHVlOworCWNvbnRyb2wucmVxdWVzdCA9IHJlcXVlc3Q7CisKKwlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3NlbmQodXNiX2RldiwgS09WQVBMVVNfVVNCX0NPTU1BTkRfQ09OVFJPTCwKKwkJCSZjb250cm9sLCBzaXplb2Yoc3RydWN0IGtvdmFwbHVzX2NvbnRyb2wpKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQga292YXBsdXNfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBrb3ZhcGx1c19jb250cm9sIGNvbnRyb2w7CisKKwlkbyB7CisJCXJldHZhbCA9IHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBLT1ZBUExVU19VU0JfQ09NTUFORF9DT05UUk9MLAorCQkJCSZjb250cm9sLCBzaXplb2Yoc3RydWN0IGtvdmFwbHVzX2NvbnRyb2wpKTsKKworCQkvKiBjaGVjayBpZiB3ZSBnZXQgYSBjb21wbGV0ZWx5IHdyb25nIGFuc3dlciAqLworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQlpZiAoY29udHJvbC52YWx1ZSA9PSBLT1ZBUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX09LKQorCQkJcmV0dXJuIDA7CisKKwkJLyogaW5kaWNhdGVzIHRoYXQgaGFyZHdhcmUgbmVlZHMgc29tZSBtb3JlIHRpbWUgdG8gY29tcGxldGUgYWN0aW9uICovCisJCWlmIChjb250cm9sLnZhbHVlID09IEtPVkFQTFVTX0NPTlRST0xfUkVRVUVTVF9TVEFUVVNfV0FJVCkgeworCQkJbXNsZWVwKDUwMCk7IC8qIHdpbmRvd3MgZHJpdmVyIHVzZXMgMTAwMCAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzZWVtcyB0byBiZSBjcml0aWNhbCAtIHJlcGx1ZyBuZWNlc3NhcnkgKi8KKwkJaWYgKGNvbnRyb2wudmFsdWUgPT0gS09WQVBMVVNfQ09OVFJPTF9SRVFVRVNUX1NUQVRVU19PVkVSTE9BRCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWhpZF9lcnIodXNiX2RldiwgImtvdmFwbHVzX3JlY2VpdmVfY29udHJvbF9zdGF0dXM6ICIKKwkJCQkidW5rbm93biByZXNwb25zZSB2YWx1ZSAweCV4XG4iLCBjb250cm9sLnZhbHVlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSB3aGlsZSAoMSk7Cit9CisKK3N0YXRpYyBpbnQga292YXBsdXNfc2VuZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCBjb21tYW5kLAorCQl2b2lkIGNvbnN0ICpidWYsIHVpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1Ziwgc2l6ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCW1zbGVlcCgxMDApOworCisJcmV0dXJuIGtvdmFwbHVzX3JlY2VpdmVfY29udHJvbF9zdGF0dXModXNiX2Rldik7Cit9CisKK3N0YXRpYyBpbnQga292YXBsdXNfc2VsZWN0X3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgbnVtYmVyLAorCQllbnVtIGtvdmFwbHVzX2NvbnRyb2xfcmVxdWVzdHMgcmVxdWVzdCkKK3sKKwlyZXR1cm4ga292YXBsdXNfc2VuZF9jb250cm9sKHVzYl9kZXYsIG51bWJlciwgcmVxdWVzdCk7Cit9CisKK3N0YXRpYyBpbnQga292YXBsdXNfZ2V0X2luZm8oc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCXN0cnVjdCBrb3ZhcGx1c19pbmZvICpidWYpCit7CisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBLT1ZBUExVU19VU0JfQ09NTUFORF9JTkZPLAorCQkJYnVmLCBzaXplb2Yoc3RydWN0IGtvdmFwbHVzX2luZm8pKTsKK30KKworc3RhdGljIGludCBrb3ZhcGx1c19nZXRfcHJvZmlsZV9zZXR0aW5ncyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfc2V0dGluZ3MgKmJ1ZiwgdWludCBudW1iZXIpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGtvdmFwbHVzX3NlbGVjdF9wcm9maWxlKHVzYl9kZXYsIG51bWJlciwKKwkJCUtPVkFQTFVTX0NPTlRST0xfUkVRVUVTVF9QUk9GSUxFX1NFVFRJTkdTKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBLT1ZBUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX1NFVFRJTkdTLAorCQkJYnVmLCBzaXplb2Yoc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpKTsKK30KKworc3RhdGljIGludCBrb3ZhcGx1c19zZXRfcHJvZmlsZV9zZXR0aW5ncyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfc2V0dGluZ3MgY29uc3QgKnNldHRpbmdzKQoreworCXJldHVybiBrb3ZhcGx1c19zZW5kKHVzYl9kZXYsIEtPVkFQTFVTX1VTQl9DT01NQU5EX1BST0ZJTEVfU0VUVElOR1MsCisJCQlzZXR0aW5ncywgc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKSk7Cit9CisKK3N0YXRpYyBpbnQga292YXBsdXNfZ2V0X3Byb2ZpbGVfYnV0dG9ucyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfYnV0dG9ucyAqYnVmLCBpbnQgbnVtYmVyKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBrb3ZhcGx1c19zZWxlY3RfcHJvZmlsZSh1c2JfZGV2LCBudW1iZXIsCisJCQlLT1ZBUExVU19DT05UUk9MX1JFUVVFU1RfUFJPRklMRV9CVVRUT05TKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBLT1ZBUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX0JVVFRPTlMsCisJCQlidWYsIHNpemVvZihzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9idXR0b25zKSk7Cit9CisKK3N0YXRpYyBpbnQga292YXBsdXNfc2V0X3Byb2ZpbGVfYnV0dG9ucyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfYnV0dG9ucyBjb25zdCAqYnV0dG9ucykKK3sKKwlyZXR1cm4ga292YXBsdXNfc2VuZCh1c2JfZGV2LCBLT1ZBUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX0JVVFRPTlMsCisJCQlidXR0b25zLCBzaXplb2Yoc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOworfQorCisvKiByZXR2YWwgaXMgMC00IG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvciAqLworc3RhdGljIGludCBrb3ZhcGx1c19nZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpCit7CisJc3RydWN0IGtvdmFwbHVzX2FjdHVhbF9wcm9maWxlIGJ1ZjsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9yZWNlaXZlKHVzYl9kZXYsIEtPVkFQTFVTX1VTQl9DT01NQU5EX0FDVFVBTF9QUk9GSUxFLAorCQkJJmJ1Ziwgc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19hY3R1YWxfcHJvZmlsZSkpOworCisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGJ1Zi5hY3R1YWxfcHJvZmlsZTsKK30KKworc3RhdGljIGludCBrb3ZhcGx1c19zZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCWludCBuZXdfcHJvZmlsZSkKK3sKKwlzdHJ1Y3Qga292YXBsdXNfYWN0dWFsX3Byb2ZpbGUgYnVmOworCisJYnVmLmNvbW1hbmQgPSBLT1ZBUExVU19DT01NQU5EX0FDVFVBTF9QUk9GSUxFOworCWJ1Zi5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19hY3R1YWxfcHJvZmlsZSk7CisJYnVmLmFjdHVhbF9wcm9maWxlID0gbmV3X3Byb2ZpbGU7CisKKwlyZXR1cm4ga292YXBsdXNfc2VuZCh1c2JfZGV2LCBLT1ZBUExVU19VU0JfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSwKKwkJCSZidWYsIHNpemVvZihzdHJ1Y3Qga292YXBsdXNfYWN0dWFsX3Byb2ZpbGUpKTsKK30KKworc3RhdGljIHNzaXplX3Qga292YXBsdXNfc3lzZnNfcmVhZF9wcm9maWxleF9zZXR0aW5ncyhzdHJ1Y3QgZmlsZSAqZnAsCisJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAorCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKS0+cGFyZW50LT5wYXJlbnQ7CisJc3RydWN0IGtvdmFwbHVzX2RldmljZSAqa292YXBsdXMgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOworCisJaWYgKG9mZiA+PSBzaXplb2Yoc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpKQorCQlyZXR1cm4gMDsKKworCWlmIChvZmYgKyBjb3VudCA+IHNpemVvZihzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9zZXR0aW5ncykpCisJCWNvdW50ID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKSAtIG9mZjsKKworCW11dGV4X2xvY2soJmtvdmFwbHVzLT5rb3ZhcGx1c19sb2NrKTsKKwltZW1jcHkoYnVmLCAoKGNoYXIgY29uc3QgKikma292YXBsdXMtPnByb2ZpbGVfc2V0dGluZ3NbKih1aW50ICopKGF0dHItPnByaXZhdGUpXSkgKyBvZmYsCisJCQljb3VudCk7CisJbXV0ZXhfdW5sb2NrKCZrb3ZhcGx1cy0+a292YXBsdXNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGtvdmFwbHVzX3N5c2ZzX3dyaXRlX3Byb2ZpbGVfc2V0dGluZ3Moc3RydWN0IGZpbGUgKmZwLAorCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKKwkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OworCXN0cnVjdCBrb3ZhcGx1c19kZXZpY2UgKmtvdmFwbHVzID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgZGlmZmVyZW5jZTsKKwlpbnQgcHJvZmlsZV9pbmRleDsKKwlzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9zZXR0aW5ncyAqcHJvZmlsZV9zZXR0aW5nczsKKworCWlmIChvZmYgIT0gMCB8fCBjb3VudCAhPSBzaXplb2Yoc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByb2ZpbGVfaW5kZXggPSAoKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzIGNvbnN0ICopYnVmKS0+cHJvZmlsZV9pbmRleDsKKwlwcm9maWxlX3NldHRpbmdzID0gJmtvdmFwbHVzLT5wcm9maWxlX3NldHRpbmdzW3Byb2ZpbGVfaW5kZXhdOworCisJbXV0ZXhfbG9jaygma292YXBsdXMtPmtvdmFwbHVzX2xvY2spOworCWRpZmZlcmVuY2UgPSBtZW1jbXAoYnVmLCBwcm9maWxlX3NldHRpbmdzLAorCQkJc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKSk7CisJaWYgKGRpZmZlcmVuY2UpIHsKKwkJcmV0dmFsID0ga292YXBsdXNfc2V0X3Byb2ZpbGVfc2V0dGluZ3ModXNiX2RldiwKKwkJCQkoc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfc2V0dGluZ3MgY29uc3QgKilidWYpOworCQlpZiAoIXJldHZhbCkKKwkJCW1lbWNweShwcm9maWxlX3NldHRpbmdzLCBidWYsCisJCQkJCXNpemVvZihzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9zZXR0aW5ncykpOworCX0KKwltdXRleF91bmxvY2soJmtvdmFwbHVzLT5rb3ZhcGx1c19sb2NrKTsKKworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKTsKK30KKworc3RhdGljIHNzaXplX3Qga292YXBsdXNfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zKHN0cnVjdCBmaWxlICpmcCwKKwkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPQorCQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5wYXJlbnQtPnBhcmVudDsKKwlzdHJ1Y3Qga292YXBsdXNfZGV2aWNlICprb3ZhcGx1cyA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisKKwlpZiAob2ZmID49IHNpemVvZihzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9idXR0b25zKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2ZmICsgY291bnQgPiBzaXplb2Yoc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfYnV0dG9ucykpCisJCWNvdW50ID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMpIC0gb2ZmOworCisJbXV0ZXhfbG9jaygma292YXBsdXMtPmtvdmFwbHVzX2xvY2spOworCW1lbWNweShidWYsICgoY2hhciBjb25zdCAqKSZrb3ZhcGx1cy0+cHJvZmlsZV9idXR0b25zWyoodWludCAqKShhdHRyLT5wcml2YXRlKV0pICsgb2ZmLAorCQkJY291bnQpOworCW11dGV4X3VubG9jaygma292YXBsdXMtPmtvdmFwbHVzX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBrb3ZhcGx1c19zeXNmc193cml0ZV9wcm9maWxlX2J1dHRvbnMoc3RydWN0IGZpbGUgKmZwLAorCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKKwkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OworCXN0cnVjdCBrb3ZhcGx1c19kZXZpY2UgKmtvdmFwbHVzID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgZGlmZmVyZW5jZTsKKwl1aW50IHByb2ZpbGVfaW5kZXg7CisJc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfYnV0dG9ucyAqcHJvZmlsZV9idXR0b25zOworCisJaWYgKG9mZiAhPSAwIHx8IGNvdW50ICE9IHNpemVvZihzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9idXR0b25zKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcm9maWxlX2luZGV4ID0gKChzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9idXR0b25zIGNvbnN0ICopYnVmKS0+cHJvZmlsZV9pbmRleDsKKwlwcm9maWxlX2J1dHRvbnMgPSAma292YXBsdXMtPnByb2ZpbGVfYnV0dG9uc1twcm9maWxlX2luZGV4XTsKKworCW11dGV4X2xvY2soJmtvdmFwbHVzLT5rb3ZhcGx1c19sb2NrKTsKKwlkaWZmZXJlbmNlID0gbWVtY21wKGJ1ZiwgcHJvZmlsZV9idXR0b25zLAorCQkJc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMpKTsKKwlpZiAoZGlmZmVyZW5jZSkgeworCQlyZXR2YWwgPSBrb3ZhcGx1c19zZXRfcHJvZmlsZV9idXR0b25zKHVzYl9kZXYsCisJCQkJKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMgY29uc3QgKilidWYpOworCQlpZiAoIXJldHZhbCkKKwkJCW1lbWNweShwcm9maWxlX2J1dHRvbnMsIGJ1ZiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMpKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZrb3ZhcGx1cy0+a292YXBsdXNfbG9jayk7CisKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9idXR0b25zKTsKK30KKworc3RhdGljIHNzaXplX3Qga292YXBsdXNfc3lzZnNfc2hvd19hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGtvdmFwbHVzX2RldmljZSAqa292YXBsdXMgPQorCQkJaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudC0+cGFyZW50KSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGtvdmFwbHVzLT5hY3R1YWxfcHJvZmlsZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGtvdmFwbHVzX3N5c2ZzX3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBrb3ZhcGx1c19kZXZpY2UgKmtvdmFwbHVzOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXVuc2lnbmVkIGxvbmcgcHJvZmlsZTsKKwlpbnQgcmV0dmFsOworCisJZGV2ID0gZGV2LT5wYXJlbnQtPnBhcmVudDsKKwlrb3ZhcGx1cyA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKworCXJldHZhbCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZwcm9maWxlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKHByb2ZpbGUgPj0gNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZrb3ZhcGx1cy0+a292YXBsdXNfbG9jayk7CisJcmV0dmFsID0ga292YXBsdXNfc2V0X2FjdHVhbF9wcm9maWxlKHVzYl9kZXYsIHByb2ZpbGUpOworCWtvdmFwbHVzLT5hY3R1YWxfcHJvZmlsZSA9IHByb2ZpbGU7CisJbXV0ZXhfdW5sb2NrKCZrb3ZhcGx1cy0+a292YXBsdXNfbG9jayk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3NpemVfdCBrb3ZhcGx1c19zeXNmc19zaG93X2FjdHVhbF9jcGkoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBrb3ZhcGx1c19kZXZpY2UgKmtvdmFwbHVzID0KKwkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBrb3ZhcGx1cy0+YWN0dWFsX2NwaSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGtvdmFwbHVzX3N5c2ZzX3Nob3dfYWN0dWFsX3NlbnNpdGl2aXR5X3goc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBrb3ZhcGx1c19kZXZpY2UgKmtvdmFwbHVzID0KKwkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBrb3ZhcGx1cy0+YWN0dWFsX3hfc2Vuc2l0aXZpdHkpOworfQorCitzdGF0aWMgc3NpemVfdCBrb3ZhcGx1c19zeXNmc19zaG93X2FjdHVhbF9zZW5zaXRpdml0eV95KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qga292YXBsdXNfZGV2aWNlICprb3ZhcGx1cyA9CisJCQloaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwga292YXBsdXMtPmFjdHVhbF95X3NlbnNpdGl2aXR5KTsKK30KKworc3RhdGljIHNzaXplX3Qga292YXBsdXNfc3lzZnNfc2hvd19maXJtd2FyZV92ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qga292YXBsdXNfZGV2aWNlICprb3ZhcGx1cyA9CisJCQloaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwga292YXBsdXMtPmluZm8uZmlybXdhcmVfdmVyc2lvbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBrb3ZhcGx1c19hdHRyaWJ1dGVzW10gPSB7CisJX19BVFRSKGFjdHVhbF9jcGksIDA0NDAsCisJCWtvdmFwbHVzX3N5c2ZzX3Nob3dfYWN0dWFsX2NwaSwgTlVMTCksCisJX19BVFRSKGZpcm13YXJlX3ZlcnNpb24sIDA0NDAsCisJCWtvdmFwbHVzX3N5c2ZzX3Nob3dfZmlybXdhcmVfdmVyc2lvbiwgTlVMTCksCisJX19BVFRSKGFjdHVhbF9wcm9maWxlLCAwNjYwLAorCQlrb3ZhcGx1c19zeXNmc19zaG93X2FjdHVhbF9wcm9maWxlLAorCQlrb3ZhcGx1c19zeXNmc19zZXRfYWN0dWFsX3Byb2ZpbGUpLAorCV9fQVRUUihhY3R1YWxfc2Vuc2l0aXZpdHlfeCwgMDQ0MCwKKwkJa292YXBsdXNfc3lzZnNfc2hvd19hY3R1YWxfc2Vuc2l0aXZpdHlfeCwgTlVMTCksCisJX19BVFRSKGFjdHVhbF9zZW5zaXRpdml0eV95LCAwNDQwLAorCQlrb3ZhcGx1c19zeXNmc19zaG93X2FjdHVhbF9zZW5zaXRpdml0eV95LCBOVUxMKSwKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGtvdmFwbHVzX2Jpbl9hdHRyaWJ1dGVzW10gPSB7CisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZV9zZXR0aW5ncyIsIC5tb2RlID0gMDIyMCB9LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9zZXR0aW5ncyksCisJCS53cml0ZSA9IGtvdmFwbHVzX3N5c2ZzX3dyaXRlX3Byb2ZpbGVfc2V0dGluZ3MKKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUxX3NldHRpbmdzIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKSwKKwkJLnJlYWQgPSBrb3ZhcGx1c19zeXNmc19yZWFkX3Byb2ZpbGV4X3NldHRpbmdzLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMF0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUyX3NldHRpbmdzIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKSwKKwkJLnJlYWQgPSBrb3ZhcGx1c19zeXNmc19yZWFkX3Byb2ZpbGV4X3NldHRpbmdzLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMV0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUzX3NldHRpbmdzIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKSwKKwkJLnJlYWQgPSBrb3ZhcGx1c19zeXNmc19yZWFkX3Byb2ZpbGV4X3NldHRpbmdzLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMl0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGU0X3NldHRpbmdzIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKSwKKwkJLnJlYWQgPSBrb3ZhcGx1c19zeXNmc19yZWFkX3Byb2ZpbGV4X3NldHRpbmdzLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbM10KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGU1X3NldHRpbmdzIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzKSwKKwkJLnJlYWQgPSBrb3ZhcGx1c19zeXNmc19yZWFkX3Byb2ZpbGV4X3NldHRpbmdzLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbNF0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGVfYnV0dG9ucyIsIC5tb2RlID0gMDIyMCB9LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9idXR0b25zKSwKKwkJLndyaXRlID0ga292YXBsdXNfc3lzZnNfd3JpdGVfcHJvZmlsZV9idXR0b25zCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlMV9idXR0b25zIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMpLAorCQkucmVhZCA9IGtvdmFwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzBdCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlMl9idXR0b25zIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMpLAorCQkucmVhZCA9IGtvdmFwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzFdCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlM19idXR0b25zIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMpLAorCQkucmVhZCA9IGtvdmFwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzJdCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlNF9idXR0b25zIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMpLAorCQkucmVhZCA9IGtvdmFwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzNdCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlNV9idXR0b25zIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMpLAorCQkucmVhZCA9IGtvdmFwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzRdCisJfSwKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIGludCBrb3ZhcGx1c19pbml0X2tvdmFwbHVzX2RldmljZV9zdHJ1Y3Qoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCXN0cnVjdCBrb3ZhcGx1c19kZXZpY2UgKmtvdmFwbHVzKQoreworCWludCByZXR2YWwsIGk7CisJc3RhdGljIHVpbnQgd2FpdCA9IDcwOyAvKiBkZXZpY2Ugd2lsbCBmcmVlemUgd2l0aCBqdXN0IDYwICovCisKKwltdXRleF9pbml0KCZrb3ZhcGx1cy0+a292YXBsdXNfbG9jayk7CisKKwlyZXR2YWwgPSBrb3ZhcGx1c19nZXRfaW5mbyh1c2JfZGV2LCAma292YXBsdXMtPmluZm8pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7CisJCW1zbGVlcCh3YWl0KTsKKwkJcmV0dmFsID0ga292YXBsdXNfZ2V0X3Byb2ZpbGVfc2V0dGluZ3ModXNiX2RldiwKKwkJCQkma292YXBsdXMtPnByb2ZpbGVfc2V0dGluZ3NbaV0sIGkpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQltc2xlZXAod2FpdCk7CisJCXJldHZhbCA9IGtvdmFwbHVzX2dldF9wcm9maWxlX2J1dHRvbnModXNiX2RldiwKKwkJCQkma292YXBsdXMtPnByb2ZpbGVfYnV0dG9uc1tpXSwgaSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCW1zbGVlcCh3YWl0KTsKKwlyZXR2YWwgPSBrb3ZhcGx1c19nZXRfYWN0dWFsX3Byb2ZpbGUodXNiX2Rldik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJa292YXBsdXNfcHJvZmlsZV9hY3RpdmF0ZWQoa292YXBsdXMsIHJldHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrb3ZhcGx1c19pbml0X3NwZWNpYWxzKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShoZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IGtvdmFwbHVzX2RldmljZSAqa292YXBsdXM7CisJaW50IHJldHZhbDsKKworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wKKwkJCT09IFVTQl9JTlRFUkZBQ0VfUFJPVE9DT0xfTU9VU0UpIHsKKworCQlrb3ZhcGx1cyA9IGt6YWxsb2Moc2l6ZW9mKCprb3ZhcGx1cyksIEdGUF9LRVJORUwpOworCQlpZiAoIWtvdmFwbHVzKSB7CisJCQloaWRfZXJyKGhkZXYsICJjYW4ndCBhbGxvYyBkZXZpY2UgZGVzY3JpcHRvclxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQloaWRfc2V0X2RydmRhdGEoaGRldiwga292YXBsdXMpOworCisJCXJldHZhbCA9IGtvdmFwbHVzX2luaXRfa292YXBsdXNfZGV2aWNlX3N0cnVjdCh1c2JfZGV2LCBrb3ZhcGx1cyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWhpZF9lcnIoaGRldiwgImNvdWxkbid0IGluaXQgc3RydWN0IGtvdmFwbHVzX2RldmljZVxuIik7CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCisJCXJldHZhbCA9IHJvY2NhdF9jb25uZWN0KGtvdmFwbHVzX2NsYXNzLCBoZGV2LAorCQkJCXNpemVvZihzdHJ1Y3Qga292YXBsdXNfcm9jY2F0X3JlcG9ydCkpOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJaGlkX2VycihoZGV2LCAiY291bGRuJ3QgaW5pdCBjaGFyIGRldlxuIik7CisJCX0gZWxzZSB7CisJCQlrb3ZhcGx1cy0+Y2hyZGV2X21pbm9yID0gcmV0dmFsOworCQkJa292YXBsdXMtPnJvY2NhdF9jbGFpbWVkID0gMTsKKwkJfQorCisJfSBlbHNlIHsKKwkJaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOworCX0KKworCXJldHVybiAwOworZXhpdF9mcmVlOgorCWtmcmVlKGtvdmFwbHVzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBrb3ZhcGx1c19yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBrb3ZhcGx1c19kZXZpY2UgKmtvdmFwbHVzOworCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbAorCQkJPT0gVVNCX0lOVEVSRkFDRV9QUk9UT0NPTF9NT1VTRSkgeworCQlrb3ZhcGx1cyA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwkJaWYgKGtvdmFwbHVzLT5yb2NjYXRfY2xhaW1lZCkKKwkJCXJvY2NhdF9kaXNjb25uZWN0KGtvdmFwbHVzLT5jaHJkZXZfbWlub3IpOworCQlrZnJlZShrb3ZhcGx1cyk7CisJfQorfQorCitzdGF0aWMgaW50IGtvdmFwbHVzX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQljb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWhpZF9lcnIoaGRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisJaWYgKHJldHZhbCkgeworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0ga292YXBsdXNfaW5pdF9zcGVjaWFscyhoZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWhpZF9lcnIoaGRldiwgImNvdWxkbid0IGluc3RhbGwgbW91c2VcbiIpOworCQlnb3RvIGV4aXRfc3RvcDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9zdG9wOgorCWhpZF9od19zdG9wKGhkZXYpOworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBrb3ZhcGx1c19yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJa292YXBsdXNfcmVtb3ZlX3NwZWNpYWxzKGhkZXYpOworCWhpZF9od19zdG9wKGhkZXYpOworfQorCitzdGF0aWMgdm9pZCBrb3ZhcGx1c19rZWVwX3ZhbHVlc191cF90b19kYXRlKHN0cnVjdCBrb3ZhcGx1c19kZXZpY2UgKmtvdmFwbHVzLAorCQl1OCBjb25zdCAqZGF0YSkKK3sKKwlzdHJ1Y3Qga292YXBsdXNfbW91c2VfcmVwb3J0X2J1dHRvbiBjb25zdCAqYnV0dG9uX3JlcG9ydDsKKworCWlmIChkYXRhWzBdICE9IEtPVkFQTFVTX01PVVNFX1JFUE9SVF9OVU1CRVJfQlVUVE9OKQorCQlyZXR1cm47CisKKwlidXR0b25fcmVwb3J0ID0gKHN0cnVjdCBrb3ZhcGx1c19tb3VzZV9yZXBvcnRfYnV0dG9uIGNvbnN0ICopZGF0YTsKKworCXN3aXRjaCAoYnV0dG9uX3JlcG9ydC0+dHlwZSkgeworCWNhc2UgS09WQVBMVVNfTU9VU0VfUkVQT1JUX0JVVFRPTl9UWVBFX1BST0ZJTEVfMToKKwkJa292YXBsdXNfcHJvZmlsZV9hY3RpdmF0ZWQoa292YXBsdXMsIGJ1dHRvbl9yZXBvcnQtPmRhdGExIC0gMSk7CisJCWJyZWFrOworCWNhc2UgS09WQVBMVVNfTU9VU0VfUkVQT1JUX0JVVFRPTl9UWVBFX0NQSToKKwkJa292YXBsdXMtPmFjdHVhbF9jcGkgPSBrb3ZhcGx1c19jb252ZXJ0X2V2ZW50X2NwaShidXR0b25fcmVwb3J0LT5kYXRhMSk7CisJY2FzZSBLT1ZBUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfU0VOU0lUSVZJVFk6CisJCWtvdmFwbHVzLT5hY3R1YWxfeF9zZW5zaXRpdml0eSA9IGJ1dHRvbl9yZXBvcnQtPmRhdGExOworCQlrb3ZhcGx1cy0+YWN0dWFsX3lfc2Vuc2l0aXZpdHkgPSBidXR0b25fcmVwb3J0LT5kYXRhMjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGtvdmFwbHVzX3JlcG9ydF90b19jaHJkZXYoc3RydWN0IGtvdmFwbHVzX2RldmljZSBjb25zdCAqa292YXBsdXMsCisJCXU4IGNvbnN0ICpkYXRhKQoreworCXN0cnVjdCBrb3ZhcGx1c19yb2NjYXRfcmVwb3J0IHJvY2NhdF9yZXBvcnQ7CisJc3RydWN0IGtvdmFwbHVzX21vdXNlX3JlcG9ydF9idXR0b24gY29uc3QgKmJ1dHRvbl9yZXBvcnQ7CisKKwlpZiAoZGF0YVswXSAhPSBLT1ZBUExVU19NT1VTRV9SRVBPUlRfTlVNQkVSX0JVVFRPTikKKwkJcmV0dXJuOworCisJYnV0dG9uX3JlcG9ydCA9IChzdHJ1Y3Qga292YXBsdXNfbW91c2VfcmVwb3J0X2J1dHRvbiBjb25zdCAqKWRhdGE7CisKKwlpZiAoYnV0dG9uX3JlcG9ydC0+dHlwZSA9PSBLT1ZBUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfUFJPRklMRV8yKQorCQlyZXR1cm47CisKKwlyb2NjYXRfcmVwb3J0LnR5cGUgPSBidXR0b25fcmVwb3J0LT50eXBlOworCXJvY2NhdF9yZXBvcnQucHJvZmlsZSA9IGtvdmFwbHVzLT5hY3R1YWxfcHJvZmlsZSArIDE7CisKKwlpZiAocm9jY2F0X3JlcG9ydC50eXBlID09IEtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9NQUNSTyB8fAorCQkJcm9jY2F0X3JlcG9ydC50eXBlID09IEtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9TSE9SVENVVCB8fAorCQkJcm9jY2F0X3JlcG9ydC50eXBlID09IEtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9RVUlDS0xBVU5DSCB8fAorCQkJcm9jY2F0X3JlcG9ydC50eXBlID09IEtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9USU1FUikKKwkJcm9jY2F0X3JlcG9ydC5idXR0b24gPSBidXR0b25fcmVwb3J0LT5kYXRhMTsKKwllbHNlCisJCXJvY2NhdF9yZXBvcnQuYnV0dG9uID0gMDsKKworCWlmIChyb2NjYXRfcmVwb3J0LnR5cGUgPT0gS09WQVBMVVNfTU9VU0VfUkVQT1JUX0JVVFRPTl9UWVBFX0NQSSkKKwkJcm9jY2F0X3JlcG9ydC5kYXRhMSA9IGtvdmFwbHVzX2NvbnZlcnRfZXZlbnRfY3BpKGJ1dHRvbl9yZXBvcnQtPmRhdGExKTsKKwllbHNlCisJCXJvY2NhdF9yZXBvcnQuZGF0YTEgPSBidXR0b25fcmVwb3J0LT5kYXRhMTsKKworCXJvY2NhdF9yZXBvcnQuZGF0YTIgPSBidXR0b25fcmVwb3J0LT5kYXRhMjsKKworCXJvY2NhdF9yZXBvcnRfZXZlbnQoa292YXBsdXMtPmNocmRldl9taW5vciwKKwkJCSh1aW50OF90IGNvbnN0ICopJnJvY2NhdF9yZXBvcnQpOworfQorCitzdGF0aWMgaW50IGtvdmFwbHVzX3Jhd19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdTggKmRhdGEsIGludCBzaXplKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShoZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qga292YXBsdXNfZGV2aWNlICprb3ZhcGx1cyA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wKKwkJCSE9IFVTQl9JTlRFUkZBQ0VfUFJPVE9DT0xfTU9VU0UpCisJCXJldHVybiAwOworCisJa292YXBsdXNfa2VlcF92YWx1ZXNfdXBfdG9fZGF0ZShrb3ZhcGx1cywgZGF0YSk7CisKKwlpZiAoa292YXBsdXMtPnJvY2NhdF9jbGFpbWVkKQorCQlrb3ZhcGx1c19yZXBvcnRfdG9fY2hyZGV2KGtvdmFwbHVzLCBkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQga292YXBsdXNfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPVkFQTFVTKSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGtvdmFwbHVzX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIga292YXBsdXNfZHJpdmVyID0geworCQkubmFtZSA9ICJrb3ZhcGx1cyIsCisJCS5pZF90YWJsZSA9IGtvdmFwbHVzX2RldmljZXMsCisJCS5wcm9iZSA9IGtvdmFwbHVzX3Byb2JlLAorCQkucmVtb3ZlID0ga292YXBsdXNfcmVtb3ZlLAorCQkucmF3X2V2ZW50ID0ga292YXBsdXNfcmF3X2V2ZW50Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBrb3ZhcGx1c19pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCWtvdmFwbHVzX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAia292YXBsdXMiKTsKKwlpZiAoSVNfRVJSKGtvdmFwbHVzX2NsYXNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoa292YXBsdXNfY2xhc3MpOworCWtvdmFwbHVzX2NsYXNzLT5kZXZfYXR0cnMgPSBrb3ZhcGx1c19hdHRyaWJ1dGVzOworCWtvdmFwbHVzX2NsYXNzLT5kZXZfYmluX2F0dHJzID0ga292YXBsdXNfYmluX2F0dHJpYnV0ZXM7CisKKwlyZXR2YWwgPSBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZrb3ZhcGx1c19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWNsYXNzX2Rlc3Ryb3koa292YXBsdXNfY2xhc3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrb3ZhcGx1c19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZrb3ZhcGx1c19kcml2ZXIpOworCWNsYXNzX2Rlc3Ryb3koa292YXBsdXNfY2xhc3MpOworfQorCittb2R1bGVfaW5pdChrb3ZhcGx1c19pbml0KTsKK21vZHVsZV9leGl0KGtvdmFwbHVzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTdGVmYW4gQWNoYXR6Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlVTQiBSb2NjYXQgS292YVsrXSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta292YXBsdXMuaCBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta292YXBsdXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQwNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oCkBAIC0wLDAgKzEsMTU3IEBACisjaWZuZGVmIF9fSElEX1JPQ0NBVF9LT1ZBUExVU19ICisjZGVmaW5lIF9fSElEX1JPQ0NBVF9LT1ZBUExVU19ICisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGtvdmFwbHVzX2NvbnRyb2wgeworCXVpbnQ4X3QgY29tbWFuZDsgLyogS09WQVBMVVNfQ09NTUFORF9DT05UUk9MICovCisJdWludDhfdCB2YWx1ZTsKKwl1aW50OF90IHJlcXVlc3Q7Cit9IF9fcGFja2VkOworCitlbnVtIGtvdmFwbHVzX2NvbnRyb2xfcmVxdWVzdHMgeworCS8qIHJlYWQgYWZ0ZXIgd3JpdGU7IHZhbHVlID0gMSAqLworCUtPVkFQTFVTX0NPTlRST0xfUkVRVUVTVF9TVEFUVVMgPSAweDAsCisJLyogd3JpdGU7IHZhbHVlID0gcHJvZmlsZSBudW1iZXIgcmFuZ2UgMC00ICovCisJS09WQVBMVVNfQ09OVFJPTF9SRVFVRVNUX1BST0ZJTEVfU0VUVElOR1MgPSAweDEwLAorCS8qIHdyaXRlOyB2YWx1ZSA9IHByb2ZpbGUgbnVtYmVyIHJhbmdlIDAtNCAqLworCUtPVkFQTFVTX0NPTlRST0xfUkVRVUVTVF9QUk9GSUxFX0JVVFRPTlMgPSAweDIwLAorfTsKKworZW51bSBrb3ZhcGx1c19jb250cm9sX3ZhbHVlcyB7CisJS09WQVBMVVNfQ09OVFJPTF9SRVFVRVNUX1NUQVRVU19PVkVSTE9BRCA9IDAsIC8qIHN1cHBvc2VkICovCisJS09WQVBMVVNfQ09OVFJPTF9SRVFVRVNUX1NUQVRVU19PSyA9IDEsCisJS09WQVBMVVNfQ09OVFJPTF9SRVFVRVNUX1NUQVRVU19XQUlUID0gMywgLyogc3VwcG9zZWQgKi8KK307CisKK3N0cnVjdCBrb3ZhcGx1c19hY3R1YWxfcHJvZmlsZSB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT1ZBUExVU19DT01NQU5EX0FDVFVBTF9QUk9GSUxFICovCisJdWludDhfdCBzaXplOyAvKiBhbHdheXMgMyAqLworCXVpbnQ4X3QgYWN0dWFsX3Byb2ZpbGU7IC8qIFJhbmdlIDAtNCEgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBrb3ZhcGx1c19wcm9maWxlX3NldHRpbmdzIHsKKwl1aW50OF90IGNvbW1hbmQ7IC8qIEtPVkFQTFVTX0NPTU1BTkRfUFJPRklMRV9TRVRUSU5HUyAqLworCXVpbnQ4X3Qgc2l6ZTsgLyogMTYgKi8KKwl1aW50OF90IHByb2ZpbGVfaW5kZXg7IC8qIHJhbmdlIDAtNCAqLworCXVpbnQ4X3QgdW5rbm93bjE7CisJdWludDhfdCBzZW5zaXRpdml0eV94OyAvKiByYW5nZSAxLTEwICovCisJdWludDhfdCBzZW5zaXRpdml0eV95OyAvKiByYW5nZSAxLTEwICovCisJdWludDhfdCBjcGlfbGV2ZWxzX2VuYWJsZWQ7CisJdWludDhfdCBjcGlfc3RhcnR1cF9sZXZlbDsgLyogcmFuZ2UgMS00ICovCisJdWludDhfdCBkYXRhWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGtvdmFwbHVzX3Byb2ZpbGVfYnV0dG9ucyB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT1ZBUExVU19DT01NQU5EX1BST0ZJTEVfQlVUVE9OUyAqLworCXVpbnQ4X3Qgc2l6ZTsgLyogMjMgKi8KKwl1aW50OF90IHByb2ZpbGVfaW5kZXg7IC8qIHJhbmdlIDAtNCAqLworCXVpbnQ4X3QgZGF0YVsyMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qga292YXBsdXNfaW5mbyB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT1ZBUExVU19DT01NQU5EX0lORk8gKi8KKwl1aW50OF90IHNpemU7IC8qIDYgKi8KKwl1aW50OF90IGZpcm13YXJlX3ZlcnNpb247CisJdWludDhfdCB1bmtub3duWzNdOworfSBfX3BhY2tlZDsKKworLyogd3JpdGVzIDEgb24gcGx1Z2luICovCitzdHJ1Y3Qga292YXBsdXNfYSB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT1ZBUExVU19DT01NQU5EX0EgKi8KKwl1aW50OF90IHNpemU7IC8qIDMgKi8KKwl1aW50OF90IHVua25vd247Cit9IF9fcGFja2VkOworCitlbnVtIGtvdmFwbHVzX2NvbW1hbmRzIHsKKwlLT1ZBUExVU19DT01NQU5EX0NPTlRST0wgPSAweDQsCisJS09WQVBMVVNfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSA9IDB4NSwKKwlLT1ZBUExVU19DT01NQU5EX1BST0ZJTEVfU0VUVElOR1MgPSAweDYsCisJS09WQVBMVVNfQ09NTUFORF9QUk9GSUxFX0JVVFRPTlMgPSAweDcsCisJS09WQVBMVVNfQ09NTUFORF9JTkZPID0gMHg5LAorCUtPVkFQTFVTX0NPTU1BTkRfQSA9IDB4YSwKK307CisKK2VudW0ga292YXBsdXNfdXNiX2NvbW1hbmRzIHsKKwlLT1ZBUExVU19VU0JfQ09NTUFORF9DT05UUk9MID0gMHgzMDQsCisJS09WQVBMVVNfVVNCX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUgPSAweDMwNSwKKwlLT1ZBUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX1NFVFRJTkdTID0gMHgzMDYsCisJS09WQVBMVVNfVVNCX0NPTU1BTkRfUFJPRklMRV9CVVRUT05TID0gMHgzMDcsCisJS09WQVBMVVNfVVNCX0NPTU1BTkRfSU5GTyA9IDB4MzA5LAorCUtPVkFQTFVTX1VTQl9DT01NQU5EX0EgPSAweDMwYSwKK307CisKK2VudW0ga292YXBsdXNfbW91c2VfcmVwb3J0X251bWJlcnMgeworCUtPVkFQTFVTX01PVVNFX1JFUE9SVF9OVU1CRVJfTU9VU0UgPSAxLAorCUtPVkFQTFVTX01PVVNFX1JFUE9SVF9OVU1CRVJfQVVESU8gPSAyLAorCUtPVkFQTFVTX01PVVNFX1JFUE9SVF9OVU1CRVJfQlVUVE9OID0gMywKKwlLT1ZBUExVU19NT1VTRV9SRVBPUlRfTlVNQkVSX0tCRCA9IDQsCit9OworCitzdHJ1Y3Qga292YXBsdXNfbW91c2VfcmVwb3J0X2J1dHRvbiB7CisJdWludDhfdCByZXBvcnRfbnVtYmVyOyAvKiBLT1ZBUExVU19NT1VTRV9SRVBPUlRfTlVNQkVSX0JVVFRPTiAqLworCXVpbnQ4X3QgdW5rbm93bjE7CisJdWludDhfdCB0eXBlOworCXVpbnQ4X3QgZGF0YTE7CisJdWludDhfdCBkYXRhMjsKK30gX19wYWNrZWQ7CisKK2VudW0ga292YXBsdXNfbW91c2VfcmVwb3J0X2J1dHRvbl90eXBlcyB7CisJLyogZGF0YTEgPSBwcm9maWxlX251bWJlciByYW5nZSAxLTU7IG5vIHJlbGVhc2UgZXZlbnQgKi8KKwlLT1ZBUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfUFJPRklMRV8xID0gMHgyMCwKKwkvKiBkYXRhMSA9IHByb2ZpbGVfbnVtYmVyIHJhbmdlIDEtNTsgbm8gcmVsZWFzZSBldmVudCAqLworCUtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9QUk9GSUxFXzIgPSAweDMwLAorCS8qIGRhdGExID0gYnV0dG9uX251bWJlciByYW5nZSAxLTE4OyBkYXRhMiA9IGFjdGlvbiAqLworCUtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9NQUNSTyA9IDB4NDAsCisJLyogZGF0YTEgPSBidXR0b25fbnVtYmVyIHJhbmdlIDEtMTg7IGRhdGEyID0gYWN0aW9uICovCisJS09WQVBMVVNfTU9VU0VfUkVQT1JUX0JVVFRPTl9UWVBFX1NIT1JUQ1VUID0gMHg1MCwKKwkvKiBkYXRhMSA9IGJ1dHRvbl9udW1iZXIgcmFuZ2UgMS0xODsgZGF0YTIgPSBhY3Rpb24gKi8KKwlLT1ZBUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfUVVJQ0tMQVVOQ0ggPSAweDYwLAorCS8qIGRhdGExID0gYnV0dG9uX251bWJlciByYW5nZSAxLTE4OyBkYXRhMiA9IGFjdGlvbiAqLworCUtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9USU1FUiA9IDB4ODAsCisJLyogZGF0YTEgPSAxID0gNDAwLCAyID0gODAwLCA0ID0gMTYwMCwgNyA9IDMyMDA7IG5vIHJlbGVhc2UgZXZlbnQgKi8KKwlLT1ZBUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfQ1BJID0gMHhiMCwKKwkvKiBkYXRhMSArIGRhdGEyID0gc2Vuc2UgcmFuZ2UgMS0xMDsgbm8gcmVsZWFzZSBldmVudCAqLworCUtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9TRU5TSVRJVklUWSA9IDB4YzAsCisJLyogZGF0YTEgPSB0eXBlIGFzIGluIHByb2ZpbGVfYnV0dG9uczsgZGF0YTIgPSBhY3Rpb24gKi8KKwlLT1ZBUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfTVVMVElNRURJQSA9IDB4ZjAsCit9OworCitlbnVtIGtvdmFwbHVzX21vdXNlX3JlcG9ydF9idXR0b25fYWN0aW9ucyB7CisJS09WQVBMVVNfTU9VU0VfUkVQT1JUX0JVVFRPTl9BQ1RJT05fUFJFU1MgPSAwLAorCUtPVkFQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fQUNUSU9OX1JFTEVBU0UgPSAxLAorfTsKKworc3RydWN0IGtvdmFwbHVzX3JvY2NhdF9yZXBvcnQgeworCXVpbnQ4X3QgdHlwZTsKKwl1aW50OF90IHByb2ZpbGU7CisJdWludDhfdCBidXR0b247CisJdWludDhfdCBkYXRhMTsKKwl1aW50OF90IGRhdGEyOworfSBfX3BhY2tlZDsKKworc3RydWN0IGtvdmFwbHVzX2RldmljZSB7CisJaW50IGFjdHVhbF9wcm9maWxlOworCWludCBhY3R1YWxfY3BpOworCWludCBhY3R1YWxfeF9zZW5zaXRpdml0eTsKKwlpbnQgYWN0dWFsX3lfc2Vuc2l0aXZpdHk7CisJaW50IHJvY2NhdF9jbGFpbWVkOworCWludCBjaHJkZXZfbWlub3I7CisJc3RydWN0IG11dGV4IGtvdmFwbHVzX2xvY2s7CisJc3RydWN0IGtvdmFwbHVzX2luZm8gaW5mbzsKKwlzdHJ1Y3Qga292YXBsdXNfcHJvZmlsZV9zZXR0aW5ncyBwcm9maWxlX3NldHRpbmdzWzVdOworCXN0cnVjdCBrb3ZhcGx1c19wcm9maWxlX2J1dHRvbnMgcHJvZmlsZV9idXR0b25zWzVdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5jCmluZGV4IDAyYzU4ZTAuLjE2MGY0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5jCkBAIC0yMCwxMSArMjAsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQtcm9jY2F0Lmg+CiAjaW5jbHVkZSAiaGlkLWlkcy5oIgotI2luY2x1ZGUgImhpZC1yb2NjYXQuaCIKKyNpbmNsdWRlICJoaWQtcm9jY2F0LWNvbW1vbi5oIgogI2luY2x1ZGUgImhpZC1yb2NjYXQtcHlyYS5oIgogCiBzdGF0aWMgdWludCBwcm9maWxlX251bWJlcnNbNV0gPSB7MCwgMSwgMiwgMywgNH07CkBAIC00Miw3ICs0Miw2IEBACiBzdGF0aWMgaW50IHB5cmFfc2VuZF9jb250cm9sKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBpbnQgdmFsdWUsCiAJCWVudW0gcHlyYV9jb250cm9sX3JlcXVlc3RzIHJlcXVlc3QpCiB7Ci0JaW50IGxlbjsKIAlzdHJ1Y3QgcHlyYV9jb250cm9sIGNvbnRyb2w7CiAKIAlpZiAoKHJlcXVlc3QgPT0gUFlSQV9DT05UUk9MX1JFUVVFU1RfUFJPRklMRV9TRVRUSU5HUyB8fApAQCAtNTQsNDcgKzUzLDMxIEBACiAJY29udHJvbC52YWx1ZSA9IHZhbHVlOwogCWNvbnRyb2wucmVxdWVzdCA9IHJlcXVlc3Q7CiAKLQlsZW4gPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHVzYl9kZXYsIDApLAotCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKLQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQkJUFlSQV9VU0JfQ09NTUFORF9DT05UUk9MLCAwLCAoY2hhciAqKSZjb250cm9sLAotCQkJc2l6ZW9mKHN0cnVjdCBweXJhX2NvbnRyb2wpLAotCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwotCi0JaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHB5cmFfY29udHJvbCkpCi0JCXJldHVybiBsZW47Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcm9jY2F0X2NvbW1vbl9zZW5kKHVzYl9kZXYsIFBZUkFfVVNCX0NPTU1BTkRfQ09OVFJPTCwKKwkJCSZjb250cm9sLCBzaXplb2Yoc3RydWN0IHB5cmFfY29udHJvbCkpOwogfQogCiBzdGF0aWMgaW50IHB5cmFfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKIHsKLQlpbnQgbGVuOworCWludCByZXR2YWw7CiAJc3RydWN0IHB5cmFfY29udHJvbCBjb250cm9sOwogCiAJZG8gewogCQltc2xlZXAoMTApOwotCi0JCWxlbiA9IHVzYl9jb250cm9sX21zZyh1c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCksCi0JCQkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAotCQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8Ci0JCQkJVVNCX0RJUl9JTiwKLQkJCQlQWVJBX1VTQl9DT01NQU5EX0NPTlRST0wsIDAsIChjaGFyICopJmNvbnRyb2wsCi0JCQkJc2l6ZW9mKHN0cnVjdCBweXJhX2NvbnRyb2wpLAotCQkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9yZWNlaXZlKHVzYl9kZXYsIFBZUkFfVVNCX0NPTU1BTkRfQ09OVFJPTCwKKwkJCQkmY29udHJvbCwgc2l6ZW9mKHN0cnVjdCBweXJhX2NvbnRyb2wpKTsKIAogCQkvKiByZXF1ZXN0ZWQgdG9vIGVhcmx5LCB0cnkgYWdhaW4gKi8KLQl9IHdoaWxlIChsZW4gPT0gLUVQUk9UTyk7CisJfSB3aGlsZSAocmV0dmFsID09IC1FUFJPVE8pOwogCi0JaWYgKGxlbiA9PSBzaXplb2Yoc3RydWN0IHB5cmFfY29udHJvbCkgJiYKLQkJCWNvbnRyb2wuY29tbWFuZCA9PSBQWVJBX0NPTU1BTkRfQ09OVFJPTCAmJgorCWlmICghcmV0dmFsICYmIGNvbnRyb2wuY29tbWFuZCA9PSBQWVJBX0NPTU1BTkRfQ09OVFJPTCAmJgogCQkJY29udHJvbC5yZXF1ZXN0ID09IFBZUkFfQ09OVFJPTF9SRVFVRVNUX1NUQVRVUyAmJgogCQkJY29udHJvbC52YWx1ZSA9PSAxKQotCQkJcmV0dXJuIDA7CisJCXJldHVybiAwOwogCWVsc2UgewogCQloaWRfZXJyKHVzYl9kZXYsICJyZWNlaXZlIGNvbnRyb2wgc3RhdHVzOiB1bmtub3duIHJlc3BvbnNlIDB4JXggMHgleFxuIiwKIAkJCWNvbnRyb2wucmVxdWVzdCwgY29udHJvbC52YWx1ZSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogLUVJTlZBTDsKIAl9CiB9CiAKQEAgLTEwMiwxMjUgKzg1LDcyIEBACiAJCXN0cnVjdCBweXJhX3Byb2ZpbGVfc2V0dGluZ3MgKmJ1ZiwgaW50IG51bWJlcikKIHsKIAlpbnQgcmV0dmFsOwotCiAJcmV0dmFsID0gcHlyYV9zZW5kX2NvbnRyb2wodXNiX2RldiwgbnVtYmVyLAogCQkJUFlSQV9DT05UUk9MX1JFUVVFU1RfUFJPRklMRV9TRVRUSU5HUyk7Ci0KIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JfZGV2LCAwKSwKLQkJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKLQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfSU4sCi0JCQlQWVJBX1VTQl9DT01NQU5EX1BST0ZJTEVfU0VUVElOR1MsIDAsIChjaGFyICopYnVmLAotCQkJc2l6ZW9mKHN0cnVjdCBweXJhX3Byb2ZpbGVfc2V0dGluZ3MpLAotCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwotCi0JaWYgKHJldHZhbCAhPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9zZXR0aW5ncykpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcm9jY2F0X2NvbW1vbl9yZWNlaXZlKHVzYl9kZXYsIFBZUkFfVVNCX0NPTU1BTkRfUFJPRklMRV9TRVRUSU5HUywKKwkJCWJ1Ziwgc2l6ZW9mKHN0cnVjdCBweXJhX3Byb2ZpbGVfc2V0dGluZ3MpKTsKIH0KIAogc3RhdGljIGludCBweXJhX2dldF9wcm9maWxlX2J1dHRvbnMoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCiAJCXN0cnVjdCBweXJhX3Byb2ZpbGVfYnV0dG9ucyAqYnVmLCBpbnQgbnVtYmVyKQogewogCWludCByZXR2YWw7Ci0KIAlyZXR2YWwgPSBweXJhX3NlbmRfY29udHJvbCh1c2JfZGV2LCBudW1iZXIsCiAJCQlQWVJBX0NPTlRST0xfUkVRVUVTVF9QUk9GSUxFX0JVVFRPTlMpOwotCiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCksCi0JCQlVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCi0JCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAotCQkJUFlSQV9VU0JfQ09NTUFORF9QUk9GSUxFX0JVVFRPTlMsIDAsIChjaGFyICopYnVmLAotCQkJc2l6ZW9mKHN0cnVjdCBweXJhX3Byb2ZpbGVfYnV0dG9ucyksCi0JCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0KLQlpZiAocmV0dmFsICE9IHNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX2J1dHRvbnMpKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBQWVJBX1VTQl9DT01NQU5EX1BST0ZJTEVfQlVUVE9OUywKKwkJCWJ1Ziwgc2l6ZW9mKHN0cnVjdCBweXJhX3Byb2ZpbGVfYnV0dG9ucykpOwogfQogCiBzdGF0aWMgaW50IHB5cmFfZ2V0X3NldHRpbmdzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAogCQlzdHJ1Y3QgcHlyYV9zZXR0aW5ncyAqYnVmKQogewotCWludCBsZW47Ci0JbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JfZGV2LCAwKSwKLQkJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKLQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfSU4sCi0JCQlQWVJBX1VTQl9DT01NQU5EX1NFVFRJTkdTLCAwLCBidWYsCi0JCQlzaXplb2Yoc3RydWN0IHB5cmFfc2V0dGluZ3MpLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0JaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHB5cmFfc2V0dGluZ3MpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcm9jY2F0X2NvbW1vbl9yZWNlaXZlKHVzYl9kZXYsIFBZUkFfVVNCX0NPTU1BTkRfU0VUVElOR1MsCisJCQlidWYsIHNpemVvZihzdHJ1Y3QgcHlyYV9zZXR0aW5ncykpOwogfQogCiBzdGF0aWMgaW50IHB5cmFfZ2V0X2luZm8oc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHN0cnVjdCBweXJhX2luZm8gKmJ1ZikKIHsKLQlpbnQgbGVuOwotCWxlbiA9IHVzYl9jb250cm9sX21zZyh1c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCksCi0JCQlVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCi0JCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAotCQkJUFlSQV9VU0JfQ09NTUFORF9JTkZPLCAwLCBidWYsCi0JCQlzaXplb2Yoc3RydWN0IHB5cmFfaW5mbyksIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKLQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgcHlyYV9pbmZvKSkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJvY2NhdF9jb21tb25fcmVjZWl2ZSh1c2JfZGV2LCBQWVJBX1VTQl9DT01NQU5EX0lORk8sCisJCQlidWYsIHNpemVvZihzdHJ1Y3QgcHlyYV9pbmZvKSk7Cit9CisKK3N0YXRpYyBpbnQgcHlyYV9zZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IGNvbW1hbmQsCisJCXZvaWQgY29uc3QgKmJ1ZiwgdWludCBzaXplKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gcm9jY2F0X2NvbW1vbl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1Ziwgc2l6ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gcHlyYV9yZWNlaXZlX2NvbnRyb2xfc3RhdHVzKHVzYl9kZXYpOwogfQogCiBzdGF0aWMgaW50IHB5cmFfc2V0X3Byb2ZpbGVfc2V0dGluZ3Moc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCiAJCXN0cnVjdCBweXJhX3Byb2ZpbGVfc2V0dGluZ3MgY29uc3QgKnNldHRpbmdzKQogewotCWludCBsZW47Ci0JbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKLQkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCi0JCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKLQkJCVBZUkFfVVNCX0NPTU1BTkRfUFJPRklMRV9TRVRUSU5HUywgMCwgKGNoYXIgKilzZXR0aW5ncywKLQkJCXNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX3NldHRpbmdzKSwKLQkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKLQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX3NldHRpbmdzKSkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKHB5cmFfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyh1c2JfZGV2KSkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHB5cmFfc2VuZCh1c2JfZGV2LCBQWVJBX1VTQl9DT01NQU5EX1BST0ZJTEVfU0VUVElOR1MsIHNldHRpbmdzLAorCQkJc2l6ZW9mKHN0cnVjdCBweXJhX3Byb2ZpbGVfc2V0dGluZ3MpKTsKIH0KIAogc3RhdGljIGludCBweXJhX3NldF9wcm9maWxlX2J1dHRvbnMoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCiAJCXN0cnVjdCBweXJhX3Byb2ZpbGVfYnV0dG9ucyBjb25zdCAqYnV0dG9ucykKIHsKLQlpbnQgbGVuOwotCWxlbiA9IHVzYl9jb250cm9sX21zZyh1c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiX2RldiwgMCksCi0JCQlVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLAotCQkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCi0JCQlQWVJBX1VTQl9DT01NQU5EX1BST0ZJTEVfQlVUVE9OUywgMCwgKGNoYXIgKilidXR0b25zLAotCQkJc2l6ZW9mKHN0cnVjdCBweXJhX3Byb2ZpbGVfYnV0dG9ucyksCi0JCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0JaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9idXR0b25zKSkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKHB5cmFfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyh1c2JfZGV2KSkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHB5cmFfc2VuZCh1c2JfZGV2LCBQWVJBX1VTQl9DT01NQU5EX1BST0ZJTEVfQlVUVE9OUywgYnV0dG9ucywKKwkJCXNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX2J1dHRvbnMpKTsKIH0KIAogc3RhdGljIGludCBweXJhX3NldF9zZXR0aW5ncyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKIAkJc3RydWN0IHB5cmFfc2V0dGluZ3MgY29uc3QgKnNldHRpbmdzKQogewotCWludCBsZW47Ci0JbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKLQkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCi0JCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKLQkJCVBZUkFfVVNCX0NPTU1BTkRfU0VUVElOR1MsIDAsIChjaGFyICopc2V0dGluZ3MsCi0JCQlzaXplb2Yoc3RydWN0IHB5cmFfc2V0dGluZ3MpLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0JaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHB5cmFfc2V0dGluZ3MpKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAocHlyYV9yZWNlaXZlX2NvbnRyb2xfc3RhdHVzKHVzYl9kZXYpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHJvY2NhdF9jb21tb25fc2VuZCh1c2JfZGV2LCBQWVJBX1VTQl9DT01NQU5EX1NFVFRJTkdTLCBzZXR0aW5ncywKKwkJCXNpemVvZihzdHJ1Y3QgcHlyYV9zZXR0aW5ncykpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHB5cmFfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyh1c2JfZGV2KTsKIH0KIAogc3RhdGljIHNzaXplX3QgcHlyYV9zeXNmc19yZWFkX3Byb2ZpbGV4X3NldHRpbmdzKHN0cnVjdCBmaWxlICpmcCwKQEAgLTUyMSwyMSArNDUxLDE2IEBACiBzdGF0aWMgaW50IHB5cmFfaW5pdF9weXJhX2RldmljZV9zdHJ1Y3Qoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCiAJCXN0cnVjdCBweXJhX2RldmljZSAqcHlyYSkKIHsKLQlzdHJ1Y3QgcHlyYV9pbmZvICppbmZvOworCXN0cnVjdCBweXJhX2luZm8gaW5mbzsKIAlpbnQgcmV0dmFsLCBpOwogCiAJbXV0ZXhfaW5pdCgmcHlyYS0+cHlyYV9sb2NrKTsKIAotCWluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHlyYV9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXR2YWwgPSBweXJhX2dldF9pbmZvKHVzYl9kZXYsIGluZm8pOwotCWlmIChyZXR2YWwpIHsKLQkJa2ZyZWUoaW5mbyk7CisJcmV0dmFsID0gcHlyYV9nZXRfaW5mbyh1c2JfZGV2LCAmaW5mbyk7CisJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQl9Ci0JcHlyYS0+ZmlybXdhcmVfdmVyc2lvbiA9IGluZm8tPmZpcm13YXJlX3ZlcnNpb247Ci0Ja2ZyZWUoaW5mbyk7CisKKwlweXJhLT5maXJtd2FyZV92ZXJzaW9uID0gaW5mby5maXJtd2FyZV92ZXJzaW9uOwogCiAJcmV0dmFsID0gcHlyYV9nZXRfc2V0dGluZ3ModXNiX2RldiwgJnB5cmEtPnNldHRpbmdzKTsKIAlpZiAocmV0dmFsKQpAQCAtNTgxLDcgKzUwNiw4IEBACiAJCQlnb3RvIGV4aXRfZnJlZTsKIAkJfQogCi0JCXJldHZhbCA9IHJvY2NhdF9jb25uZWN0KHB5cmFfY2xhc3MsIGhkZXYpOworCQlyZXR2YWwgPSByb2NjYXRfY29ubmVjdChweXJhX2NsYXNzLCBoZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgcHlyYV9yb2NjYXRfcmVwb3J0KSk7CiAJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQloaWRfZXJyKGhkZXYsICJjb3VsZG4ndCBpbml0IGNoYXIgZGV2XG4iKTsKIAkJfSBlbHNlIHsKQEAgLTY4NSw4ICs2MTEsNyBAQAogCQlyb2NjYXRfcmVwb3J0LnZhbHVlID0gYnV0dG9uX2V2ZW50LT5kYXRhMTsKIAkJcm9jY2F0X3JlcG9ydC5rZXkgPSAwOwogCQlyb2NjYXRfcmVwb3J0X2V2ZW50KHB5cmEtPmNocmRldl9taW5vciwKLQkJCQkodWludDhfdCBjb25zdCAqKSZyb2NjYXRfcmVwb3J0LAotCQkJCXNpemVvZihzdHJ1Y3QgcHlyYV9yb2NjYXRfcmVwb3J0KSk7CisJCQkJKHVpbnQ4X3QgY29uc3QgKikmcm9jY2F0X3JlcG9ydCk7CiAJCWJyZWFrOwogCWNhc2UgUFlSQV9NT1VTRV9FVkVOVF9CVVRUT05fVFlQRV9NQUNSTzoKIAljYXNlIFBZUkFfTU9VU0VfRVZFTlRfQlVUVE9OX1RZUEVfU0hPUlRDVVQ6CkBAIC03MDAsOCArNjI1LDcgQEAKIAkJCSAqLwogCQkJcm9jY2F0X3JlcG9ydC52YWx1ZSA9IHB5cmEtPmFjdHVhbF9wcm9maWxlICsgMTsKIAkJCXJvY2NhdF9yZXBvcnRfZXZlbnQocHlyYS0+Y2hyZGV2X21pbm9yLAotCQkJCQkodWludDhfdCBjb25zdCAqKSZyb2NjYXRfcmVwb3J0LAotCQkJCQlzaXplb2Yoc3RydWN0IHB5cmFfcm9jY2F0X3JlcG9ydCkpOworCQkJCQkodWludDhfdCBjb25zdCAqKSZyb2NjYXRfcmVwb3J0KTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC03NjEsOCArNjg1LDggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHB5cmFfZXhpdCh2b2lkKQogewotCWNsYXNzX2Rlc3Ryb3kocHlyYV9jbGFzcyk7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZweXJhX2RyaXZlcik7CisJY2xhc3NfZGVzdHJveShweXJhX2NsYXNzKTsKIH0KIAogbW9kdWxlX2luaXQocHlyYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYwppbmRleCBhMTRjNTc5Li41NjY2ZTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0jaW5jbHVkZSAiaGlkLXJvY2NhdC5oIgorI2luY2x1ZGUgPGxpbnV4L2hpZC1yb2NjYXQuaD4KIAogI2RlZmluZSBST0NDQVRfRklSU1RfTUlOT1IgMAogI2RlZmluZSBST0NDQVRfTUFYX0RFVklDRVMgOApAQCAtMzcsMTEgKzM2LDExIEBACiAKIHN0cnVjdCByb2NjYXRfcmVwb3J0IHsKIAl1aW50OF90ICp2YWx1ZTsKLQlpbnQgbGVuOwogfTsKIAogc3RydWN0IHJvY2NhdF9kZXZpY2UgewogCXVuc2lnbmVkIGludCBtaW5vcjsKKwlpbnQgcmVwb3J0X3NpemU7CiAJaW50IG9wZW47CiAJaW50IGV4aXN0OwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CkBAIC0xMjMsNyArMTIyLDcgQEAKIAkgKiBJZiByZXBvcnQgaXMgbGFyZ2VyIHRoYW4gcmVxdWVzdGVkIGFtb3VudCBvZiBkYXRhLCByZXN0IG9mIHJlcG9ydAogCSAqIGlzIGxvc3QhCiAJICovCi0JbGVuID0gcmVwb3J0LT5sZW4gPiBjb3VudCA/IGNvdW50IDogcmVwb3J0LT5sZW47CisJbGVuID0gZGV2aWNlLT5yZXBvcnRfc2l6ZSA+IGNvdW50ID8gY291bnQgOiBkZXZpY2UtPnJlcG9ydF9zaXplOwogCiAJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIHJlcG9ydC0+dmFsdWUsIGxlbikpIHsKIAkJcmV0dmFsID0gLUVGQVVMVDsKQEAgLTI0OCwyNiArMjQ3LDI1IEBACiAgKgogICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqLwotaW50IHJvY2NhdF9yZXBvcnRfZXZlbnQoaW50IG1pbm9yLCB1OCBjb25zdCAqZGF0YSwgaW50IGxlbikKK2ludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpCiB7CiAJc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyOwogCXN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7CiAJdWludDhfdCAqbmV3X3ZhbHVlOwogCi0JbmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBsZW4sIEdGUF9BVE9NSUMpOworCWRldmljZSA9IGRldmljZXNbbWlub3JdOworCisJbmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtPnJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld192YWx1ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTsKLQogCXJlcG9ydCA9ICZkZXZpY2UtPmNidWZbZGV2aWNlLT5jYnVmX2VuZF07CiAKIAkvKiBwYXNzaW5nIE5VTEwgaXMgc2FmZSAqLwogCWtmcmVlKHJlcG9ydC0+dmFsdWUpOwogCiAJcmVwb3J0LT52YWx1ZSA9IG5ld192YWx1ZTsKLQlyZXBvcnQtPmxlbiA9IGxlbjsKIAlkZXZpY2UtPmNidWZfZW5kID0gKGRldmljZS0+Y2J1Zl9lbmQgKyAxKSAlIFJPQ0NBVF9DQlVGX1NJWkU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlYWRlciwgJmRldmljZS0+cmVhZGVycywgbm9kZSkgewpAQCAtMjk1LDcgKzI5Myw3IEBACiAgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvbgogICogc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KLWludCByb2NjYXRfY29ubmVjdChzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoraW50IHJvY2NhdF9jb25uZWN0KHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnRfc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgbWlub3I7CiAJc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTsKQEAgLTM0Myw2ICszNDEsNyBAQAogCWRldmljZS0+aGlkID0gaGlkOwogCWRldmljZS0+ZXhpc3QgPSAxOwogCWRldmljZS0+Y2J1Zl9lbmQgPSAwOworCWRldmljZS0+cmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTsKIAogCXJldHVybiBtaW5vcjsKIH0KQEAgLTM1NywxMyArMzU2LDE2IEBACiAKIAltdXRleF9sb2NrKCZkZXZpY2VzX2xvY2spOwogCWRldmljZSA9IGRldmljZXNbbWlub3JdOwotCWRldmljZXNbbWlub3JdID0gTlVMTDsKIAltdXRleF91bmxvY2soJmRldmljZXNfbG9jayk7CiAKIAlkZXZpY2UtPmV4aXN0ID0gMDsgLyogVE9ETyBleGlzdCBtYXliZSBub3QgbmVlZGVkICovCiAKIAlkZXZpY2VfZGVzdHJveShkZXZpY2UtPmRldi0+Y2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTsKIAorCW11dGV4X2xvY2soJmRldmljZXNfbG9jayk7CisJZGV2aWNlc1ttaW5vcl0gPSBOVUxMOworCW11dGV4X3VubG9jaygmZGV2aWNlc19sb2NrKTsKKwkKIAlpZiAoZGV2aWNlLT5vcGVuKSB7CiAJCWhpZF9od19jbG9zZShkZXZpY2UtPmhpZCk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2aWNlLT53YWl0KTsKQEAgLTM3Myw2ICszNzUsMzQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTsKIAorc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlOworCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJbG9uZyByZXR2YWwgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2aWNlc19sb2NrKTsKKworCWRldmljZSA9IGRldmljZXNbbWlub3JdOworCWlmICghZGV2aWNlKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBST0NDQVRJT0NHUkVQU0laRToKKwkJaWYgKHB1dF91c2VyKGRldmljZS0+cmVwb3J0X3NpemUsIChpbnQgX191c2VyICopYXJnKSkKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FTk9UVFk7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmZGV2aWNlc19sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb2NjYXRfb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gcm9jY2F0X3JlYWQsCkBAIC0zODAsNiArNDEwLDcgQEAKIAkub3BlbiA9IHJvY2NhdF9vcGVuLAogCS5yZWxlYXNlID0gcm9jY2F0X3JlbGVhc2UsCiAJLmxsc2VlayA9IG5vb3BfbGxzZWVrLAorCS51bmxvY2tlZF9pb2N0bCA9IHJvY2NhdF9pb2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJvY2NhdF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmggYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ODQyODEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBfX0hJRF9ST0NDQVRfSAotI2RlZmluZSBfX0hJRF9ST0NDQVRfSAotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0gKi8KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19ISURfUk9DQ0FUKSB8fCBkZWZpbmVkKENPTkZJR19ISURfUk9DQ0FUX01PRFVMRSkKLWludCByb2NjYXRfY29ubmVjdChzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKLXZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKTsKLWludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEsIGludCBsZW4pOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHJvY2NhdF9jb25uZWN0KHN0cnVjdCBjbGFzcyAqa2xhc3MsCi0JCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgcmV0dXJuIC0xOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKSB7fQotc3RhdGljIGlubGluZSBpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhLCBpbnQgbGVuKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNvbnkuYyBiL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKaW5kZXggNjhkN2IzNi4uOTM4MTlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXNvbnkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCkBAIC00Niw2ICs0NiwxNiBAQAogCXJldHVybiByZGVzYzsKIH0KIAorLyoKKyAqIFRoZSBTb255IFNpeGF4aXMgZG9lcyBub3QgaGFuZGxlIEhJRCBPdXRwdXQgUmVwb3J0cyBvbiB0aGUgSW50ZXJydXB0IEVQCisgKiBsaWtlIGl0IHNob3VsZCBhY2NvcmRpbmcgdG8gdXNiaGlkL2hpZC1jb3JlLmM6OnVzYmhpZF9vdXRwdXRfcmF3X3JlcG9ydCgpCisgKiBzbyB3ZSBuZWVkIHRvIG92ZXJyaWRlIHRoYXQgZm9yY2luZyBISUQgT3V0cHV0IFJlcG9ydHMgb24gdGhlIENvbnRyb2wgRVAuCisgKgorICogVGhlcmUgaXMgYWxzbyBhbm90aGVyIGlzc3VlIGFib3V0IEhJRCBPdXRwdXQgUmVwb3J0cyB2aWEgVVNCLCB0aGUgU2l4YXhpcworICogZG9lcyBub3Qgd2FudCB0aGUgcmVwb3J0X2lkIGFzIHBhcnQgb2YgdGhlIGRhdGEgcGFja2V0LCBzbyB3ZSBoYXZlIHRvCisgKiBkaXNjYXJkIGJ1ZlswXSB3aGVuIHNlbmRpbmcgdGhlIGFjdHVhbCBjb250cm9sIG1lc3NhZ2UsIGV2ZW4gZm9yIG51bWJlcmVkCisgKiByZXBvcnRzLCBodW1wZiEKKyAqLwogc3RhdGljIGludCBzaXhheGlzX3VzYl9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3U4ICpidWYsCiAJCXNpemVfdCBjb3VudCwgdW5zaWduZWQgY2hhciByZXBvcnRfdHlwZSkKIHsKQEAgLTU1LDYgKzY1LDEyIEBACiAJaW50IHJlcG9ydF9pZCA9IGJ1ZlswXTsKIAlpbnQgcmV0OwogCisJaWYgKHJlcG9ydF90eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSB7CisJCS8qIERvbid0IHNlbmQgdGhlIFJlcG9ydCBJRCAqLworCQlidWYrKzsKKwkJY291bnQtLTsKKwl9CisKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKIAkJSElEX1JFUV9TRVRfUkVQT1JULAogCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKQEAgLTYyLDYgKzc4LDEwIEBACiAJCWludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBidWYsIGNvdW50LAogCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CiAKKwkvKiBDb3VudCBhbHNvIHRoZSBSZXBvcnQgSUQsIGluIGNhc2Ugb2YgYW4gT3V0cHV0IHJlcG9ydC4gKi8KKwlpZiAocmV0ID4gMCAmJiByZXBvcnRfdHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkKKwkJcmV0Kys7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDQ2OGU4N2IuLjU0NDA5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC05MSw3ICs5MSw3IEBACiAJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJcmV0ICs9IGxlbjsKKwkJcmV0ID0gbGVuOwogCiAJCWtmcmVlKGxpc3QtPmJ1ZmZlcltsaXN0LT50YWlsXS52YWx1ZSk7CiAJCWxpc3QtPnRhaWwgPSAobGlzdC0+dGFpbCArIDEpICYgKEhJRFJBV19CVUZGRVJfU0laRSAtIDEpOwpAQCAtMTAyLDE1ICsxMDIsMTQgQEAKIH0KIAogLyogdGhlIGZpcnN0IGJ5dGUgaXMgZXhwZWN0ZWQgdG8gYmUgYSByZXBvcnQgbnVtYmVyICovCi1zdGF0aWMgc3NpemVfdCBoaWRyYXdfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorLyogVGhpcyBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgd2l0aCB0aGUgbWlub3JzX2xvY2sgbXV0ZXggaGVsZCAqLworc3RhdGljIHNzaXplX3QgaGlkcmF3X3NlbmRfcmVwb3J0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGNoYXIgcmVwb3J0X3R5cGUpCiB7CiAJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBoaWRfZGV2aWNlICpkZXY7CiAJX191OCAqYnVmOwogCWludCByZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmbWlub3JzX2xvY2spOwotCiAJaWYgKCFoaWRyYXdfdGFibGVbbWlub3JdKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwpAQCAtMTQ4LDE0ICsxNDcsOTIgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQlyZXQgPSBkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChkZXYsIGJ1ZiwgY291bnQsIEhJRF9PVVRQVVRfUkVQT1JUKTsKKwlyZXQgPSBkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChkZXYsIGJ1ZiwgY291bnQsIHJlcG9ydF90eXBlKTsKIG91dF9mcmVlOgogCWtmcmVlKGJ1Zik7CiBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyogdGhlIGZpcnN0IGJ5dGUgaXMgZXhwZWN0ZWQgdG8gYmUgYSByZXBvcnQgbnVtYmVyICovCitzdGF0aWMgc3NpemVfdCBoaWRyYXdfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXNzaXplX3QgcmV0OworCW11dGV4X2xvY2soJm1pbm9yc19sb2NrKTsKKwlyZXQgPSBoaWRyYXdfc2VuZF9yZXBvcnQoZmlsZSwgYnVmZmVyLCBjb3VudCwgSElEX09VVFBVVF9SRVBPUlQpOwogCW11dGV4X3VubG9jaygmbWlub3JzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKKworLyogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIEdldF9SZXBvcnQgdHJhbnNmZXIgb3ZlciB0aGUgY29udHJvbCBlbmRwb2ludAorICAgcGVyIHNlY3Rpb24gNy4yLjEgb2YgdGhlIEhJRCBzcGVjaWZpY2F0aW9uLCB2ZXJzaW9uIDEuMS4gIFRoZSBmaXJzdCBieXRlCisgICBvZiBidWZmZXIgaXMgdGhlIHJlcG9ydCBudW1iZXIgdG8gcmVxdWVzdCwgb3IgMHgwIGlmIHRoZSBkZWZpY2UgZG9lcyBub3QKKyAgIHVzZSBudW1iZXJlZCByZXBvcnRzLiBUaGUgcmVwb3J0X3R5cGUgcGFyYW1ldGVyIGNhbiBiZSBISURfRkVBVFVSRV9SRVBPUlQKKyAgIG9yIEhJRF9JTlBVVF9SRVBPUlQuICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBtaW5vcnNfbG9jaworICAgbXV0ZXggaGVsZC4gICovCitzdGF0aWMgc3NpemVfdCBoaWRyYXdfZ2V0X3JlcG9ydChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQoreworCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2OworCV9fdTggKmJ1ZjsKKwlpbnQgcmV0ID0gMCwgbGVuOworCXVuc2lnbmVkIGNoYXIgcmVwb3J0X251bWJlcjsKKworCWRldiA9IGhpZHJhd190YWJsZVttaW5vcl0tPmhpZDsKKworCWlmICghZGV2LT5oaWRfZ2V0X3Jhd19yZXBvcnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNvdW50ID4gSElEX01BWF9CVUZGRVJfU0laRSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJoaWRyYXc6IHBpZCAlZCBwYXNzZWQgdG9vIGxhcmdlIHJlcG9ydFxuIiwKKwkJCQl0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjb3VudCA8IDIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGlkcmF3OiBwaWQgJWQgcGFzc2VkIHRvbyBzaG9ydCByZXBvcnRcbiIsCisJCQkJdGFza19waWRfbnIoY3VycmVudCkpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlidWYgPSBrbWFsbG9jKGNvdW50ICogc2l6ZW9mKF9fdTgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBSZWFkIHRoZSBmaXJzdCBieXRlIGZyb20gdGhlIHVzZXIuIFRoaXMgaXMgdGhlIHJlcG9ydCBudW1iZXIsCisJICAgd2hpY2ggaXMgcGFzc2VkIHRvIGRldi0+aGlkX2dldF9yYXdfcmVwb3J0KCkuICovCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXBvcnRfbnVtYmVyLCBidWZmZXIsIDEpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcmV0ID0gZGV2LT5oaWRfZ2V0X3Jhd19yZXBvcnQoZGV2LCByZXBvcnRfbnVtYmVyLCBidWYsIGNvdW50LCByZXBvcnRfdHlwZSk7CisKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZTsKKworCWxlbiA9IChyZXQgPCBjb3VudCkgPyByZXQgOiBjb3VudDsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBidWYsIGxlbikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXQgPSBsZW47CisKK291dF9mcmVlOgorCWtmcmVlKGJ1Zik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBoaWRyYXdfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgaGlkcmF3X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0yOTUsNyArMzcyLDI0IEBACiAJCWRlZmF1bHQ6CiAJCQl7CiAJCQkJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+aGlkOwotCQkJCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnSCcgfHwgX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQpIHsKKwkJCQlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gJ0gnKSB7CisJCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihISURJT0NTRkVBVFVSRSgwKSkpIHsKKwkJCQkJaW50IGxlbiA9IF9JT0NfU0laRShjbWQpOworCQkJCQlyZXQgPSBoaWRyYXdfc2VuZF9yZXBvcnQoZmlsZSwgdXNlcl9hcmcsIGxlbiwgSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihISURJT0NHRkVBVFVSRSgwKSkpIHsKKwkJCQkJaW50IGxlbiA9IF9JT0NfU0laRShjbWQpOworCQkJCQlyZXQgPSBoaWRyYXdfZ2V0X3JlcG9ydChmaWxlLCB1c2VyX2FyZywgbGVuLCBISURfRkVBVFVSRV9SRVBPUlQpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQkvKiBCZWdpbiBSZWFkLW9ubHkgaW9jdGxzLiAqLworCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfUkVBRCkgewogCQkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC0zMjcsNyArNDIxLDcgQEAKIAkJCQkJCS1FRkFVTFQgOiBsZW47CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJfQorCQkJfQogCiAJCXJldCA9IC1FTk9UVFk7CiAJfQpAQCAtNDI4LDEyICs1MjIsMTIgQEAKIAogCWhpZHJhdy0+ZXhpc3QgPSAwOwogCisJZGV2aWNlX2Rlc3Ryb3koaGlkcmF3X2NsYXNzLCBNS0RFVihoaWRyYXdfbWFqb3IsIGhpZHJhdy0+bWlub3IpKTsKKwogCW11dGV4X2xvY2soJm1pbm9yc19sb2NrKTsKIAloaWRyYXdfdGFibGVbaGlkcmF3LT5taW5vcl0gPSBOVUxMOwogCW11dGV4X3VubG9jaygmbWlub3JzX2xvY2spOwogCi0JZGV2aWNlX2Rlc3Ryb3koaGlkcmF3X2NsYXNzLCBNS0RFVihoaWRyYXdfbWFqb3IsIGhpZHJhdy0+bWlub3IpKTsKLQogCWlmIChoaWRyYXctPm9wZW4pIHsKIAkJaGlkX2h3X2Nsb3NlKGhpZCk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGlkcmF3LT53YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKaW5kZXggYjMzNmRkOC4uMzhjMjYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKQEAgLTc5OSw2ICs3OTksNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1c2JoaWRfZ2V0X3Jhd19yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwKKwkJdW5zaWduZWQgY2hhciByZXBvcnRfbnVtYmVyLCBfX3U4ICpidWYsIHNpemVfdCBjb3VudCwKKwkJdW5zaWduZWQgY2hhciByZXBvcnRfdHlwZSkKK3sKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHVzYmhpZC0+aW50ZjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlpbnQgc2tpcHBlZF9yZXBvcnRfaWQgPSAwOworCWludCByZXQ7CisKKwkvKiBCeXRlIDAgaXMgdGhlIHJlcG9ydCBudW1iZXIuIFJlcG9ydCBkYXRhIHN0YXJ0cyBhdCBieXRlIDEuKi8KKwlidWZbMF0gPSByZXBvcnRfbnVtYmVyOworCWlmIChyZXBvcnRfbnVtYmVyID09IDB4MCkgeworCQkvKiBPZmZzZXQgdGhlIHJldHVybiBidWZmZXIgYnkgMSwgc28gdGhhdCB0aGUgcmVwb3J0IElECisJCSAgIHdpbGwgcmVtYWluIGluIGJ5dGUgMC4gKi8KKwkJYnVmKys7CisJCWNvdW50LS07CisJCXNraXBwZWRfcmVwb3J0X2lkID0gMTsKKwl9CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCUhJRF9SRVFfR0VUX1JFUE9SVCwKKwkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJKChyZXBvcnRfdHlwZSArIDEpIDw8IDgpIHwgcmVwb3J0X251bWJlciwKKwkJaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIGJ1ZiwgY291bnQsCisJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKworCS8qIGNvdW50IGFsc28gdGhlIHJlcG9ydCBpZCAqLworCWlmIChyZXQgPiAwICYmIHNraXBwZWRfcmVwb3J0X2lkKQorCQlyZXQrKzsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQl1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQogewpAQCAtMTEzOSw2ICsxMTczLDcgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgaGlkKTsKIAloaWQtPmxsX2RyaXZlciA9ICZ1c2JfaGlkX2RyaXZlcjsKKwloaWQtPmhpZF9nZXRfcmF3X3JlcG9ydCA9IHVzYmhpZF9nZXRfcmF3X3JlcG9ydDsKIAloaWQtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydCA9IHVzYmhpZF9vdXRwdXRfcmF3X3JlcG9ydDsKIAloaWQtPmZmX2luaXQgPSBoaWRfcGlkZmZfaW5pdDsKICNpZmRlZiBDT05GSUdfVVNCX0hJRERFVgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDFiZmI0NDMuLmU0YmQxM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTUyMSw3ICs1MjEsNyBAQAogCQktIERhbGxhcyBTZW1pY29uZHVjdG9yIERTNzUgYW5kIERTMTc3NQogCQktIE1heGltIE1BWDY2MjUgYW5kIE1BWDY2MjYKIAkJLSBNaWNyb2NoaXAgTUNQOTgweAotCQktIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE03NQorCQktIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE03NSwgTE03NUEKIAkJLSBOWFAncyBMTTc1QQogCQktIFNUIE1pY3JvZWxlY3Ryb25pY3MgU1REUzc1CiAJCS0gVGVsQ29tIChub3cgTWljcm9jaGlwKSBUQ043NQpAQCAtOTU5LDYgKzk1OSwyNSBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc21zYzQ3YjM5Ny4KIAorY29uZmlnIFNFTlNPUlNfU0NINTYyNworCXRyaXN0YXRlICJTTVNDIFNDSDU2MjciCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBtb25pdG9yaW5nCisJICBmZWF0dXJlcyBvZiB0aGUgU01TQyBTQ0g1NjI3IFN1cGVyLUkvTyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzY2g1NjI3LgorCitjb25maWcgU0VOU09SU19BRFMxMDE1CisJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIEFEUzEwMTUiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgQURTMTAxNQorCSAgMTItYml0IDQtaW5wdXQgQURDIGRldmljZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYWRzMTAxNS4KKwogY29uZmlnIFNFTlNPUlNfQURTNzgyOAogCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBBRFM3ODI4IgogCWRlcGVuZHMgb24gSTJDCkBAIC0xMjE1LDQwICsxMjM0LDYgQEAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBVbHRyYTQ1IHdvcmtzdGF0aW9uIGVudmlyb25tZW50YWwKIAkgIHNlbnNvcnMuCiAKLWNvbmZpZyBTRU5TT1JTX0xJUzNfU1BJCi0JdHJpc3RhdGUgIlNUTWljcm9lbGV0cm9uaWNzIExJUzNMVjAyRHggdGhyZWUtYXhpcyBkaWdpdGFsIGFjY2VsZXJvbWV0ZXIgKFNQSSkiCi0JZGVwZW5kcyBvbiAhQUNQSSAmJiBTUElfTUFTVEVSICYmIElOUFVUCi0Jc2VsZWN0IElOUFVUX1BPTExERVYKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTElTM0xWMDJEeCBhY2NlbGVyb21ldGVyIGNvbm5lY3RlZAotCSAgdmlhIFNQSS4gVGhlIGFjY2VsZXJvbWV0ZXIgZGF0YSBpcyByZWFkYWJsZSB2aWEKLQkgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9saXMzbHYwMmQuCi0KLQkgIFRoaXMgZHJpdmVyIGFsc28gcHJvdmlkZXMgYW4gYWJzb2x1dGUgaW5wdXQgY2xhc3MgZGV2aWNlLCBhbGxvd2luZwotCSAgdGhlIGxhcHRvcCB0byBhY3QgYXMgYSBwaW5iYWxsIG1hY2hpbmUtZXNxdWUgam95c3RpY2suCi0KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIG1vZHVsZXMuICBJZiBzbywgdGhlIGNvcmUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBsaXMzbHYwMmQgYW5kIGEgc3BlY2lmaWMgbW9kdWxlIGZvciB0aGUgU1BJIHRyYW5zcG9ydAotCSAgaXMgY2FsbGVkIGxpczNsdjAyZF9zcGkuCi0KLWNvbmZpZyBTRU5TT1JTX0xJUzNfSTJDCi0JdHJpc3RhdGUgIlNUTWljcm9lbGV0cm9uaWNzIExJUzNMVjAyRHggdGhyZWUtYXhpcyBkaWdpdGFsIGFjY2VsZXJvbWV0ZXIgKEkyQykiCi0JZGVwZW5kcyBvbiBJMkMgJiYgSU5QVVQKLQlzZWxlY3QgSU5QVVRfUE9MTERFVgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBMSVMzTFYwMkR4IGFjY2VsZXJvbWV0ZXIgY29ubmVjdGVkCi0JICB2aWEgSTJDLiBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYQotCSAgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4KLQotCSAgVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCi0JICB0aGUgZGV2aWNlIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgbW9kdWxlcy4gIElmIHNvLCB0aGUgY29yZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIGxpczNsdjAyZCBhbmQgYSBzcGVjaWZpYyBtb2R1bGUgZm9yIHRoZSBJMkMgdHJhbnNwb3J0Ci0JICBpcyBjYWxsZWQgbGlzM2x2MDJkX2kyYy4KLQogY29uZmlnIFNFTlNPUlNfQVBQTEVTTUMKIAl0cmlzdGF0ZSAiQXBwbGUgU01DIChNb3Rpb24gc2Vuc29yLCBsaWdodCBzZW5zb3IsIGtleWJvYXJkIGJhY2tsaWdodCkiCiAJZGVwZW5kcyBvbiBJTlBVVCAmJiBYODYKQEAgLTEyOTYsMzYgKzEyODEsNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhc3VzX2F0azAxMTAuCiAKLWNvbmZpZyBTRU5TT1JTX0xJUzNMVjAyRAotCXRyaXN0YXRlICJTVE1pY3JvZWxldHJvbmljcyBMSVMzKiB0aHJlZS1heGlzIGRpZ2l0YWwgYWNjZWxlcm9tZXRlciIKLQlkZXBlbmRzIG9uIElOUFVUCi0Jc2VsZWN0IElOUFVUX1BPTExERVYKLQlzZWxlY3QgTkVXX0xFRFMKLQlzZWxlY3QgTEVEU19DTEFTUwotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBMSVMzKiBhY2NlbGVyb21ldGVycywgc3VjaCBhcyB0aGUKLQkgIExJUzNMVjAyREwgb3IgdGhlIExJUzMzMURMLiBJbiBwYXJ0aWN1bGFyLCBpdCBjYW4gYmUgZm91bmQgaW4gYSBudW1iZXIKLQkgIG9mIEhQIGxhcHRvcHMsIHdoaWNoIGhhdmUgdGhlICJNb2JpbGUgRGF0YSBQcm90ZWN0aW9uIFN5c3RlbSAzRCIgb3IKLQkgICIzRCBEcml2ZUd1YXJkIiBmZWF0dXJlLiBPbiBzdWNoIHN5c3RlbXMgdGhlIGRyaXZlciBzaG91bGQgbG9hZAotCSAgYXV0b21hdGljYWxseSAodmlhIEFDUEkgYWxpYXMpLiBUaGUgYWNjZWxlcm9tZXRlciBtaWdodCBhbHNvIGJlIGZvdW5kCi0JICBpbiBvdGhlciBzeXN0ZW1zLCBjb25uZWN0ZWQgdmlhIFNQSSBvciBJMkMuIFRoZSBhY2NlbGVyb21ldGVyIGRhdGEgaXMKLQkgIHJlYWRhYmxlIHZpYSAvc3lzL2RldmljZXMvcGxhdGZvcm0vbGlzM2x2MDJkLgotCi0JICBUaGlzIGRyaXZlciBhbHNvIHByb3ZpZGVzIGFuIGFic29sdXRlIGlucHV0IGNsYXNzIGRldmljZSwgYWxsb3dpbmcKLQkgIGEgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4gSXQgcHJvdmlkZXMgYWxzbwotCSAgYSBtaXNjIGRldmljZSB3aGljaCBjYW4gYmUgdXNlZCB0byBkZXRlY3QgZnJlZS1mYWxsLiBPbiBIUCBsYXB0b3BzLAotCSAgaWYgdGhlIGxlZCBpbmZyYXN0cnVjdHVyZSBpcyBhY3RpdmF0ZWQsIHN1cHBvcnQgZm9yIGEgbGVkIGluZGljYXRpbmcKLQkgIGRpc2sgcHJvdGVjdGlvbiB3aWxsIGJlIHByb3ZpZGVkIGFzIGhwOjpoZGRwcm90ZWN0LiBGb3IgbW9yZQotCSAgaW5mb3JtYXRpb24gb24gdGhlIGZlYXR1cmUsIHJlZmVyIHRvIERvY3VtZW50YXRpb24vaHdtb24vbGlzM2x2MDJkLgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBtb2R1bGVzLiAgSWYgc28sIHRoZSBjb3JlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgbGlzM2x2MDJkIGFuZCBhIHNwZWNpZmljIG1vZHVsZSBmb3IgSFAgbGFwdG9wcyB3aWxsIGJlCi0JICBjYWxsZWQgaHBfYWNjZWwuCi0KLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gYXBwbGljYWJsZSBsYXB0b3AgYW5kIHdhbnQgdG8gZXhwZXJpZW5jZQotCSAgdGhlIGF3ZXNvbWUgcG93ZXIgb2YgbGlzM2x2MDJkLgotCiBlbmRpZiAjIEFDUEkKIAogZW5kaWYgIyBIV01PTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKaW5kZXggYmQwNDEwZS4uNTRjYTU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19BRE0xMDI5KQkrPSBhZG0xMDI5Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FETTEwMzEpCSs9IGFkbTEwMzEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNOTI0MCkJKz0gYWRtOTI0MC5vCitvYmotJChDT05GSUdfU0VOU09SU19BRFMxMDE1KQkrPSBhZHMxMDE1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FEUzc4MjgpCSs9IGFkczc4Mjgubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURTNzg3MSkJKz0gYWRzNzg3MS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRFQ3NDExKQkrPSBhZHQ3NDExLm8KQEAgLTYzLDkgKzY0LDYgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0s4VEVNUCkJKz0gazh0ZW1wLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0sxMFRFTVApCSs9IGsxMHRlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTElORUFHRSkJKz0gbGluZWFnZS1wZW0ubwotb2JqLSQoQ09ORklHX1NFTlNPUlNfTElTM0xWMDJEKSArPSBsaXMzbHYwMmQubyBocF9hY2NlbC5vCi1vYmotJChDT05GSUdfU0VOU09SU19MSVMzX1NQSSkJKz0gbGlzM2x2MDJkLm8gbGlzM2x2MDJkX3NwaS5vCi1vYmotJChDT05GSUdfU0VOU09SU19MSVMzX0kyQykJKz0gbGlzM2x2MDJkLm8gbGlzM2x2MDJkX2kyYy5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTYzKQkrPSBsbTYzLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xNNzApCSs9IGxtNzAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE03MykJKz0gbG03My5vCkBAIC05Myw2ICs5MSw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3KQkrPSBwYzg3NDI3Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1OTEpCSs9IHBjZjg1OTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUzNDKQkrPSBzM2MtaHdtb24ubworb2JqLSQoQ09ORklHX1NFTlNPUlNfU0NINTYyNykJKz0gc2NoNTYyNy5vCiBvYmotJChDT05GSUdfU0VOU09SU19TSFQxNSkJKz0gc2h0MTUubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU0hUMjEpCSs9IHNodDIxLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1NJUzU1OTUpCSs9IHNpczU1OTUubwpAQCAtMTIyLDcgKzEyMSw1IEBACiBvYmotJChDT05GSUdfU0VOU09SU19NQVgzNDQ0MCkJKz0gbWF4MzQ0NDAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYODY4OCkJKz0gbWF4ODY4OC5vCiAKLWlmZXEgKCQoQ09ORklHX0hXTU9OX0RFQlVHX0NISVApLHkpCi1FWFRSQV9DRkxBR1MgKz0gLURERUJVRwotZW5kaWYKK2NjZmxhZ3MtJChDT05GSUdfSFdNT05fREVCVUdfQ0hJUCkgOj0gLURERUJVRwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYwppbmRleCA4ZjA3YTlkLi4wZTA1YWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICAgIGFiaXR1Z3VydS5jIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IEhhbnMgZGUgR29lZGUgPGoudy5yLmRlZ29lZGVAaGhzLm5sPgorICAgIGFiaXR1Z3VydS5jIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNTA1LDcgKzE1MDUsNyBAQAogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhYml0dWd1cnVfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiSGFucyBkZSBHb2VkZSA8ai53LnIuZGVnb2VkZUBoaHMubmw+Iik7CitNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBYml0IHVHdXJ1IFNlbnNvciBkZXZpY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMgYi9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydTMuYwppbmRleCA0OGQyMWUyLi4wMzRjZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydTMuYworKysgYi9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydTMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICAgYWJpdHVndXJ1My5jCiAKLSAgICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBIYW5zIGRlIEdvZWRlIDxqLncuci5kZWdvZWRlQGhocy5ubD4KKyAgICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICAgIENvcHlyaWdodCAoYykgMjAwOCBBbGlzdGFpciBKb2huIFN0cmFjaGFuIDxhbGlzdGFpckBkZXZ6ZXJvLmNvLnVrPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEyNjYsNyArMTI2Niw3IEBACiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFiaXR1Z3VydTNfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiSGFucyBkZSBHb2VkZSA8ai53LnIuZGVnb2VkZUBoaHMubmw+Iik7CitNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBYml0IHVHdXJ1MyBTZW5zb3IgZGV2aWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRzMTAxNS5jIGIvZHJpdmVycy9od21vbi9hZHMxMDE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliZWVkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vYWRzMTAxNS5jCkBAIC0wLDAgKzEsMzM3IEBACisvKgorICogYWRzMTAxNS5jIC0gbG1fc2Vuc29ycyBkcml2ZXIgZm9yIGFkczEwMTUgMTItYml0IDQtaW5wdXQgQURDCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIERpcmsgRWliYWNoLCBHdW50ZXJtYW5uICYgRHJ1bmNrIEdtYkggPGVpYmFjaEBnZHN5cy5kZT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgYWRzNzgyOCBkcml2ZXIgYnkgU3RldmUgSGFyZHkuCisgKgorICogRGF0YXNoZWV0IGF2YWlsYWJsZSBhdDogaHR0cDovL2ZvY3VzLnRpLmNvbS9saXQvZHMvc3ltbGluay9hZHMxMDE1LnBkZgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy9hZHMxMDE1Lmg+CisKKy8qIEFEUzEwMTUgcmVnaXN0ZXJzICovCitlbnVtIHsKKwlBRFMxMDE1X0NPTlZFUlNJT04gPSAwLAorCUFEUzEwMTVfQ09ORklHID0gMSwKK307CisKKy8qIFBHQSBmdWxsc2NhbGUgdm9sdGFnZXMgaW4gbVYgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZnVsbHNjYWxlX3RhYmxlWzhdID0geworCTYxNDQsIDQwOTYsIDIwNDgsIDEwMjQsIDUxMiwgMjU2LCAyNTYsIDI1NiB9OworCisvKiBEYXRhIHJhdGVzIGluIHNhbXBsZXMgcGVyIHNlY29uZCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkYXRhX3JhdGVfdGFibGVbOF0gPSB7CisJMTI4LCAyNTAsIDQ5MCwgOTIwLCAxNjAwLCAyNDAwLCAzMzAwLCAzMzAwIH07CisKKyNkZWZpbmUgQURTMTAxNV9ERUZBVUxUX0NIQU5ORUxTIDB4ZmYKKyNkZWZpbmUgQURTMTAxNV9ERUZBVUxUX1BHQSAyCisjZGVmaW5lIEFEUzEwMTVfREVGQVVMVF9EQVRBX1JBVEUgNAorCitzdHJ1Y3QgYWRzMTAxNV9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOyAvKiBtdXRleCBwcm90ZWN0IHVwZGF0ZXMgKi8KKwlzdHJ1Y3QgYWRzMTAxNV9jaGFubmVsX2RhdGEgY2hhbm5lbF9kYXRhW0FEUzEwMTVfQ0hBTk5FTFNdOworfTsKKworc3RhdGljIHMzMiBhZHMxMDE1X3JlYWRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCByZWcpCit7CisJczMyIGRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCByZWcpOworCisJcmV0dXJuIChkYXRhIDwgMCkgPyBkYXRhIDogc3dhYjE2KGRhdGEpOworfQorCitzdGF0aWMgczMyIGFkczEwMTVfd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHUxNiB2YWwpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCByZWcsIHN3YWIxNih2YWwpKTsKK30KKworc3RhdGljIGludCBhZHMxMDE1X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJCQkgICAgICBpbnQgKnZhbHVlKQoreworCXUxNiBjb25maWc7CisJczE2IGNvbnZlcnNpb247CisJc3RydWN0IGFkczEwMTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGludCBwZ2EgPSBkYXRhLT5jaGFubmVsX2RhdGFbY2hhbm5lbF0ucGdhOworCWludCBmdWxsc2NhbGU7CisJdW5zaWduZWQgaW50IGRhdGFfcmF0ZSA9IGRhdGEtPmNoYW5uZWxfZGF0YVtjaGFubmVsXS5kYXRhX3JhdGU7CisJdW5zaWduZWQgaW50IGNvbnZlcnNpb25fdGltZV9tczsKKwlpbnQgcmVzOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyogZ2V0IGNoYW5uZWwgcGFyYW1ldGVycyAqLworCXJlcyA9IGFkczEwMTVfcmVhZF9yZWcoY2xpZW50LCBBRFMxMDE1X0NPTkZJRyk7CisJaWYgKHJlcyA8IDApCisJCWdvdG8gZXJyX3VubG9jazsKKwljb25maWcgPSByZXM7CisJZnVsbHNjYWxlID0gZnVsbHNjYWxlX3RhYmxlW3BnYV07CisJY29udmVyc2lvbl90aW1lX21zID0gRElWX1JPVU5EX1VQKDEwMDAsIGRhdGFfcmF0ZV90YWJsZVtkYXRhX3JhdGVdKTsKKworCS8qIHNldHVwIGFuZCBzdGFydCBzaW5nbGUgY29udmVyc2lvbiAqLworCWNvbmZpZyAmPSAweDAwMWY7CisJY29uZmlnIHw9ICgxIDw8IDE1KSB8ICgxIDw8IDgpOworCWNvbmZpZyB8PSAoY2hhbm5lbCAmIDB4MDAwNykgPDwgMTI7CisJY29uZmlnIHw9IChwZ2EgJiAweDAwMDcpIDw8IDk7CisJY29uZmlnIHw9IChkYXRhX3JhdGUgJiAweDAwMDcpIDw8IDU7CisKKwlyZXMgPSBhZHMxMDE1X3dyaXRlX3JlZyhjbGllbnQsIEFEUzEwMTVfQ09ORklHLCBjb25maWcpOworCWlmIChyZXMgPCAwKQorCQlnb3RvIGVycl91bmxvY2s7CisKKwkvKiB3YWl0IHVudGlsIGNvbnZlcnNpb24gZmluaXNoZWQgKi8KKwltc2xlZXAoY29udmVyc2lvbl90aW1lX21zKTsKKwlyZXMgPSBhZHMxMDE1X3JlYWRfcmVnKGNsaWVudCwgQURTMTAxNV9DT05GSUcpOworCWlmIChyZXMgPCAwKQorCQlnb3RvIGVycl91bmxvY2s7CisJY29uZmlnID0gcmVzOworCWlmICghKGNvbmZpZyAmICgxIDw8IDE1KSkpIHsKKwkJLyogY29udmVyc2lvbiBub3QgZmluaXNoZWQgaW4gdGltZSAqLworCQlyZXMgPSAtRUlPOworCQlnb3RvIGVycl91bmxvY2s7CisJfQorCisJcmVzID0gYWRzMTAxNV9yZWFkX3JlZyhjbGllbnQsIEFEUzEwMTVfQ09OVkVSU0lPTik7CisJaWYgKHJlcyA8IDApCisJCWdvdG8gZXJyX3VubG9jazsKKwljb252ZXJzaW9uID0gcmVzOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkqdmFsdWUgPSBESVZfUk9VTkRfQ0xPU0VTVChjb252ZXJzaW9uICogZnVsbHNjYWxlLCAweDdmZjApOworCisJcmV0dXJuIDA7CisKK2Vycl91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworLyogc3lzZnMgY2FsbGJhY2sgZnVuY3Rpb24gKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlpbnQgaW47CisJaW50IHJlczsKKworCXJlcyA9IGFkczEwMTVfcmVhZF92YWx1ZShjbGllbnQsIGF0dHItPmluZGV4LCAmaW4pOworCisJcmV0dXJuIChyZXMgPCAwKSA/IHJlcyA6IHNwcmludGYoYnVmLCAiJWRcbiIsIGluKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBhZHMxMDE1X2luW10gPSB7CisJU0VOU09SX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUihpbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKGluMl9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIoaW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKGluNV9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIoaW42X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihpbjdfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDcpLAorfTsKKworLyoKKyAqIERyaXZlciBpbnRlcmZhY2UKKyAqLworCitzdGF0aWMgaW50IGFkczEwMTVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkczEwMTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBrOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlmb3IgKGsgPSAwOyBrIDwgQURTMTAxNV9DSEFOTkVMUzsgKytrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmYWRzMTAxNV9pbltrXS5kZXZfYXR0cik7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBpbnQgYWRzMTAxNV9nZXRfY2hhbm5lbHNfY29uZmlnX29mKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkczEwMTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCWlmICghY2xpZW50LT5kZXYub2Zfbm9kZQorCSAgICB8fCAhb2ZfZ2V0X25leHRfY2hpbGQoY2xpZW50LT5kZXYub2Zfbm9kZSwgTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShjbGllbnQtPmRldi5vZl9ub2RlLCBub2RlKSB7CisJCWNvbnN0IF9fYmUzMiAqcHJvcGVydHk7CisJCWludCBsZW47CisJCXVuc2lnbmVkIGludCBjaGFubmVsOworCQl1bnNpZ25lZCBpbnQgcGdhID0gQURTMTAxNV9ERUZBVUxUX1BHQTsKKwkJdW5zaWduZWQgaW50IGRhdGFfcmF0ZSA9IEFEUzEwMTVfREVGQVVMVF9EQVRBX1JBVEU7CisKKwkJcHJvcGVydHkgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInJlZyIsICZsZW4pOworCQlpZiAoIXByb3BlcnR5IHx8IGxlbiAhPSBzaXplb2YoaW50KSkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpbnZhbGlkIHJlZyBvbiAlc1xuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQljaGFubmVsID0gYmUzMl90b19jcHVwKHByb3BlcnR5KTsKKwkJaWYgKGNoYW5uZWwgPiBBRFMxMDE1X0NIQU5ORUxTKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiaW52YWxpZCBjaGFubmVsIGluZGV4ICVkIG9uICVzXG4iLAorCQkJCWNoYW5uZWwsIG5vZGUtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXByb3BlcnR5ID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJ0aSxnYWluIiwgJmxlbik7CisJCWlmIChwcm9wZXJ0eSAmJiBsZW4gPT0gc2l6ZW9mKGludCkpIHsKKwkJCXBnYSA9IGJlMzJfdG9fY3B1cChwcm9wZXJ0eSk7CisJCQlpZiAocGdhID4gNikgeworCQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCQkiaW52YWxpZCBnYWluIG9uICVzXG4iLAorCQkJCQlub2RlLT5mdWxsX25hbWUpOworCQkJfQorCQl9CisKKwkJcHJvcGVydHkgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInRpLGRhdGFyYXRlIiwgJmxlbik7CisJCWlmIChwcm9wZXJ0eSAmJiBsZW4gPT0gc2l6ZW9mKGludCkpIHsKKwkJCWRhdGFfcmF0ZSA9IGJlMzJfdG9fY3B1cChwcm9wZXJ0eSk7CisJCQlpZiAoZGF0YV9yYXRlID4gNykgeworCQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCQkiaW52YWxpZCBkYXRhX3JhdGUgb24gJXNcbiIsCisJCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQl9CisJCX0KKworCQlkYXRhLT5jaGFubmVsX2RhdGFbY2hhbm5lbF0uZW5hYmxlZCA9IHRydWU7CisJCWRhdGEtPmNoYW5uZWxfZGF0YVtjaGFubmVsXS5wZ2EgPSBwZ2E7CisJCWRhdGEtPmNoYW5uZWxfZGF0YVtjaGFubmVsXS5kYXRhX3JhdGUgPSBkYXRhX3JhdGU7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYWRzMTAxNV9nZXRfY2hhbm5lbHNfY29uZmlnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJdW5zaWduZWQgaW50IGs7CisJc3RydWN0IGFkczEwMTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBhZHMxMDE1X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOworCisJLyogcHJlZmVyIHBsYXRmb3JtIGRhdGEgKi8KKwlpZiAocGRhdGEpIHsKKwkJbWVtY3B5KGRhdGEtPmNoYW5uZWxfZGF0YSwgcGRhdGEtPmNoYW5uZWxfZGF0YSwKKwkJICAgICAgIHNpemVvZihkYXRhLT5jaGFubmVsX2RhdGEpKTsKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIENPTkZJR19PRgorCWlmICghYWRzMTAxNV9nZXRfY2hhbm5lbHNfY29uZmlnX29mKGNsaWVudCkpCisJCXJldHVybjsKKyNlbmRpZgorCisJLyogZmFsbGJhY2sgb24gZGVmYXVsdCBjb25maWd1cmF0aW9uICovCisJZm9yIChrID0gMDsgayA8IEFEUzEwMTVfQ0hBTk5FTFM7ICsraykgeworCQlkYXRhLT5jaGFubmVsX2RhdGFba10uZW5hYmxlZCA9IHRydWU7CisJCWRhdGEtPmNoYW5uZWxfZGF0YVtrXS5wZ2EgPSBBRFMxMDE1X0RFRkFVTFRfUEdBOworCQlkYXRhLT5jaGFubmVsX2RhdGFba10uZGF0YV9yYXRlID0gQURTMTAxNV9ERUZBVUxUX0RBVEFfUkFURTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWRzMTAxNV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYWRzMTAxNV9kYXRhICpkYXRhOworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGs7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkczEwMTVfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyogYnVpbGQgc3lzZnMgYXR0cmlidXRlIGdyb3VwICovCisJYWRzMTAxNV9nZXRfY2hhbm5lbHNfY29uZmlnKGNsaWVudCk7CisJZm9yIChrID0gMDsgayA8IEFEUzEwMTVfQ0hBTk5FTFM7ICsraykgeworCQlpZiAoIWRhdGEtPmNoYW5uZWxfZGF0YVtrXS5lbmFibGVkKQorCQkJY29udGludWU7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZhZHMxMDE1X2luW2tdLmRldl9hdHRyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfcmVtb3ZlOgorCWZvciAoayA9IDA7IGsgPCBBRFMxMDE1X0NIQU5ORUxTOyArK2spCisJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZhZHMxMDE1X2luW2tdLmRldl9hdHRyKTsKK2V4aXRfZnJlZToKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkczEwMTVfaWRbXSA9IHsKKwl7ICJhZHMxMDE1IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHMxMDE1X2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkczEwMTVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFkczEwMTUiLAorCX0sCisJLnByb2JlID0gYWRzMTAxNV9wcm9iZSwKKwkucmVtb3ZlID0gYWRzMTAxNV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYWRzMTAxNV9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfYWRzMTAxNV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZhZHMxMDE1X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZW5zb3JzX2FkczEwMTVfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhZHMxMDE1X2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkRpcmsgRWliYWNoIDxlaWJhY2hAZ2RzeXMuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFEUzEwMTUgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHNlbnNvcnNfYWRzMTAxNV9pbml0KTsKK21vZHVsZV9leGl0KHNlbnNvcnNfYWRzMTAxNV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03NS5jIGIvZHJpdmVycy9od21vbi9sbTc1LmMKaW5kZXggZjM2ZWI4MC4uZWY5MDJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTc1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTc1LmMKQEAgLTIzMiwxMyArMjMyLDE2IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtNzVfaWRzKTsKIAorI2RlZmluZSBMTTc1QV9JRCAweEExCisKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwogc3RhdGljIGludCBsbTc1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwKIAkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXdfY2xpZW50LT5hZGFwdGVyOwogCWludCBpOwotCWludCBjdXIsIGNvbmYsIGh5c3QsIG9zOworCWludCBjb25mLCBoeXN0LCBvczsKKwlib29sIGlzX2xtNzVhID0gMDsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwKIAkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCkBAIC0yNTAsMzcgKzI1Myw1OCBAQAogCSAgIGFkZHJlc3NlcyAweDA0LTB4MDcgcmV0dXJuaW5nIHRoZSBsYXN0IHJlYWQgdmFsdWUuCiAJICAgVGhlIGN5Y2xpbmcrdW51c2VkIGFkZHJlc3NlcyBjb21iaW5hdGlvbiBpcyBub3QgdGVzdGVkLAogCSAgIHNpbmNlIGl0IHdvdWxkIHNpZ25pZmljYW50bHkgc2xvdyB0aGUgZGV0ZWN0aW9uIGRvd24gYW5kIHdvdWxkCi0JICAgaGFyZGx5IGFkZCBhbnkgdmFsdWUuICovCisJICAgaGFyZGx5IGFkZCBhbnkgdmFsdWUuCiAKLQkvKiBVbnVzZWQgYWRkcmVzc2VzICovCi0JY3VyID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKG5ld19jbGllbnQsIDApOwotCWNvbmYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgMSk7Ci0JaHlzdCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShuZXdfY2xpZW50LCAyKTsKLQlpZiAoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKG5ld19jbGllbnQsIDQpICE9IGh5c3QKLQkgfHwgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKG5ld19jbGllbnQsIDUpICE9IGh5c3QKLQkgfHwgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKG5ld19jbGllbnQsIDYpICE9IGh5c3QKLQkgfHwgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKG5ld19jbGllbnQsIDcpICE9IGh5c3QpCi0JCXJldHVybiAtRU5PREVWOwotCW9zID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKG5ld19jbGllbnQsIDMpOwotCWlmIChpMmNfc21idXNfcmVhZF93b3JkX2RhdGEobmV3X2NsaWVudCwgNCkgIT0gb3MKLQkgfHwgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKG5ld19jbGllbnQsIDUpICE9IG9zCi0JIHx8IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShuZXdfY2xpZW50LCA2KSAhPSBvcwotCSB8fCBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEobmV3X2NsaWVudCwgNykgIT0gb3MpCi0JCXJldHVybiAtRU5PREVWOworCSAgIFRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNNzVBIGlzIGRpZmZlcmVudCB0aGFuIGVhcmxpZXIKKwkgICBMTTc1cy4gIEl0IGhhcyBhbiBJRCBieXRlIG9mIDB4YVggKHdoZXJlIFggaXMgdGhlIGNoaXAKKwkgICByZXZpc2lvbiwgd2l0aCAxIGJlaW5nIHRoZSBvbmx5IHJldmlzaW9uIGluIGV4aXN0ZW5jZSkgaW4KKwkgICByZWdpc3RlciA3LCBhbmQgdW51c2VkIHJlZ2lzdGVycyByZXR1cm4gMHhmZiByYXRoZXIgdGhhbiB0aGUKKwkgICBsYXN0IHJlYWQgdmFsdWUuICovCiAKIAkvKiBVbnVzZWQgYml0cyAqLworCWNvbmYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgMSk7CiAJaWYgKGNvbmYgJiAweGUwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIEFkZHJlc3NlcyBjeWNsaW5nICovCi0JZm9yIChpID0gODsgaSA8IDB4ZmY7IGkgKz0gOCkgewotCQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIGkgKyAxKSAhPSBjb25mCi0JCSB8fCBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEobmV3X2NsaWVudCwgaSArIDIpICE9IGh5c3QKLQkJIHx8IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShuZXdfY2xpZW50LCBpICsgMykgIT0gb3MpCisJLyogRmlyc3QgY2hlY2sgZm9yIExNNzVBICovCisJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCA3KSA9PSBMTTc1QV9JRCkgeworCQkvKiBMTTc1QSByZXR1cm5zIDB4ZmYgb24gdW51c2VkIHJlZ2lzdGVycyBzbworCQkgICBqdXN0IHRvIGJlIHN1cmUgd2UgY2hlY2sgZm9yIHRoYXQgdG9vLiAqLworCQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIDQpICE9IDB4ZmYKKwkJIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCA1KSAhPSAweGZmCisJCSB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgNikgIT0gMHhmZikKKwkJCXJldHVybiAtRU5PREVWOworCQlpc19sbTc1YSA9IDE7CisJCWh5c3QgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgMik7CisJCW9zID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIDMpOworCX0gZWxzZSB7IC8qIFRyYWRpdGlvbmFsIHN0eWxlIExNNzUgZGV0ZWN0aW9uICovCisJCS8qIFVudXNlZCBhZGRyZXNzZXMgKi8KKwkJaHlzdCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCAyKTsKKwkJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCA0KSAhPSBoeXN0CisJCSB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgNSkgIT0gaHlzdAorCQkgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIDYpICE9IGh5c3QKKwkJIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCA3KSAhPSBoeXN0KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCW9zID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIDMpOworCQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIDQpICE9IG9zCisJCSB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgNSkgIT0gb3MKKwkJIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCA2KSAhPSBvcworCQkgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIDcpICE9IG9zKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0Jc3RybGNweShpbmZvLT50eXBlLCAibG03NSIsIEkyQ19OQU1FX1NJWkUpOworCS8qIEFkZHJlc3NlcyBjeWNsaW5nICovCisJZm9yIChpID0gODsgaSA8PSAyNDg7IGkgKz0gNDApIHsKKwkJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCBpICsgMSkgIT0gY29uZgorCQkgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIGkgKyAyKSAhPSBoeXN0CisJCSB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgaSArIDMpICE9IG9zKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChpc19sbTc1YSAmJiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgaSArIDcpCisJCQkJIT0gTE03NUFfSUQpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzdHJsY3B5KGluZm8tPnR5cGUsIGlzX2xtNzVhID8gImxtNzVhIiA6ICJsbTc1IiwgSTJDX05BTUVfU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc2NoNTYyNy5jIGIvZHJpdmVycy9od21vbi9zY2g1NjI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE1MWRjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vc2NoNTYyNy5jCkBAIC0wLDAgKzEsODU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjZGVmaW5lIERSVk5BTUUgInNjaDU2MjciCisjZGVmaW5lIERFVk5BTUUgRFJWTkFNRSAvKiBXZSBvbmx5IHN1cHBvcnQgb25lIG1vZGVsICovCisKKyNkZWZpbmUgU0lPX1NDSDU2MjdfRU1fTEQJMHgwQwkvKiBFbWJlZGRlZCBNaWNyb2NvbnRyb2xsZXIgTEQgKi8KKyNkZWZpbmUgU0lPX1VOTE9DS19LRVkJCTB4NTUJLyogS2V5IHRvIGVuYWJsZSBTdXBlci1JL08gKi8KKyNkZWZpbmUgU0lPX0xPQ0tfS0VZCQkweEFBCS8qIEtleSB0byBkaXNhYmxlIFN1cGVyLUkvTyAqLworCisjZGVmaW5lIFNJT19SRUdfTERTRUwJCTB4MDcJLyogTG9naWNhbCBkZXZpY2Ugc2VsZWN0ICovCisjZGVmaW5lIFNJT19SRUdfREVWSUQJCTB4MjAJLyogRGV2aWNlIElEICovCisjZGVmaW5lIFNJT19SRUdfRU5BQkxFCQkweDMwCS8qIExvZ2ljYWwgZGV2aWNlIGVuYWJsZSAqLworI2RlZmluZSBTSU9fUkVHX0FERFIJCTB4NjYJLyogTG9naWNhbCBkZXZpY2UgYWRkcmVzcyAoMiBieXRlcykgKi8KKworI2RlZmluZSBTSU9fU0NINTYyN19JRAkJMHhDNgkvKiBDaGlwc2V0IElEICovCisKKyNkZWZpbmUgUkVHSU9OX0xFTkdUSAkJOQorCisjZGVmaW5lIFNDSDU2MjdfSFdNT05fSUQJCTB4YTUKKyNkZWZpbmUgU0NINTYyN19DT01QQU5ZX0lECQkweDVjCisjZGVmaW5lIFNDSDU2MjdfUFJJTUFSWV9JRAkJMHhhMAorCisjZGVmaW5lIFNDSDU2MjdfUkVHX0JVSUxEX0NPREUJCTB4MzkKKyNkZWZpbmUgU0NINTYyN19SRUdfQlVJTERfSUQJCTB4M2EKKyNkZWZpbmUgU0NINTYyN19SRUdfSFdNT05fSUQJCTB4M2MKKyNkZWZpbmUgU0NINTYyN19SRUdfSFdNT05fUkVWCQkweDNkCisjZGVmaW5lIFNDSDU2MjdfUkVHX0NPTVBBTllfSUQJCTB4M2UKKyNkZWZpbmUgU0NINTYyN19SRUdfUFJJTUFSWV9JRAkJMHgzZgorI2RlZmluZSBTQ0g1NjI3X1JFR19DVFJMCQkweDQwCisKKyNkZWZpbmUgU0NINTYyN19OT19URU1QUwkJOAorI2RlZmluZSBTQ0g1NjI3X05PX0ZBTlMJCQk0CisjZGVmaW5lIFNDSDU2MjdfTk9fSU4JCQk1CisKK3N0YXRpYyBjb25zdCB1MTYgU0NINTYyN19SRUdfVEVNUF9NU0JbU0NINTYyN19OT19URU1QU10gPSB7CisJMHgyQiwgMHgyNiwgMHgyNywgMHgyOCwgMHgyOSwgMHgyQSwgMHgxODAsIDB4MTgxIH07CitzdGF0aWMgY29uc3QgdTE2IFNDSDU2MjdfUkVHX1RFTVBfTFNOW1NDSDU2MjdfTk9fVEVNUFNdID0geworCTB4RTIsIDB4RTEsIDB4RTEsIDB4RTUsIDB4RTUsIDB4RTYsIDB4MTgyLCAweDE4MiB9Oworc3RhdGljIGNvbnN0IHUxNiBTQ0g1NjI3X1JFR19URU1QX0hJR0hfTklCQkxFW1NDSDU2MjdfTk9fVEVNUFNdID0geworCTAsIDAsIDEsIDEsIDAsIDAsIDAsIDEgfTsKK3N0YXRpYyBjb25zdCB1MTYgU0NINTYyN19SRUdfVEVNUF9ISUdIW1NDSDU2MjdfTk9fVEVNUFNdID0geworCTB4NjEsIDB4NTcsIDB4NTksIDB4NUIsIDB4NUQsIDB4NUYsIDB4MTg0LCAweDE4NiB9Oworc3RhdGljIGNvbnN0IHUxNiBTQ0g1NjI3X1JFR19URU1QX0FCU1tTQ0g1NjI3X05PX1RFTVBTXSA9IHsKKwkweDlCLCAweDk2LCAweDk3LCAweDk4LCAweDk5LCAweDlBLCAweDFBOCwgMHgxQTkgfTsKKworc3RhdGljIGNvbnN0IHUxNiBTQ0g1NjI3X1JFR19GQU5bU0NINTYyN19OT19GQU5TXSA9IHsKKwkweDJDLCAweDJFLCAweDMwLCAweDMyIH07CitzdGF0aWMgY29uc3QgdTE2IFNDSDU2MjdfUkVHX0ZBTl9NSU5bU0NINTYyN19OT19GQU5TXSA9IHsKKwkweDYyLCAweDY0LCAweDY2LCAweDY4IH07CisKK3N0YXRpYyBjb25zdCB1MTYgU0NINTYyN19SRUdfSU5fTVNCW1NDSDU2MjdfTk9fSU5dID0geworCTB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MTg5IH07CitzdGF0aWMgY29uc3QgdTE2IFNDSDU2MjdfUkVHX0lOX0xTTltTQ0g1NjI3X05PX0lOXSA9IHsKKwkweEU0LCAweEU0LCAweEUzLCAweEUzLCAweDE4QSB9Oworc3RhdGljIGNvbnN0IHUxNiBTQ0g1NjI3X1JFR19JTl9ISUdIX05JQkJMRVtTQ0g1NjI3X05PX0lOXSA9IHsKKwkxLCAwLCAxLCAwLCAxIH07CitzdGF0aWMgY29uc3QgdTE2IFNDSDU2MjdfUkVHX0lOX0ZBQ1RPUltTQ0g1NjI3X05PX0lOXSA9IHsKKwkxMDc0NSwgMzY2MCwgOTc2NSwgMTA3NDUsIDM2NjAgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgU0NINTYyN19JTl9MQUJFTFNbU0NINTYyN19OT19JTl0gPSB7CisJIlZDQyIsICJWVFQiLCAiVkJBVCIsICJWVFIiLCAiVl9JTiIgfTsKKworc3RydWN0IHNjaDU2MjdfZGF0YSB7CisJdW5zaWduZWQgc2hvcnQgYWRkcjsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJdTggdGVtcF9tYXhbU0NINTYyN19OT19URU1QU107CisJdTggdGVtcF9jcml0W1NDSDU2MjdfTk9fVEVNUFNdOworCXUxNiBmYW5fbWluW1NDSDU2MjdfTk9fRkFOU107CisKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJY2hhciB2YWxpZDsJCQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLworCXUxNiB0ZW1wW1NDSDU2MjdfTk9fVEVNUFNdOworCXUxNiBmYW5bU0NINTYyN19OT19GQU5TXTsKKwl1MTYgaW5bU0NINTYyN19OT19JTl07Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2NoNTYyN19wZGV2OworCisvKiBTdXBlciBJL08gZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIGludCBzdXBlcmlvX2luYihpbnQgYmFzZSwgaW50IHJlZykKK3sKKwlvdXRiKHJlZywgYmFzZSk7CisJcmV0dXJuIGluYihiYXNlICsgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN1cGVyaW9fZW50ZXIoaW50IGJhc2UpCit7CisJLyogRG9uJ3Qgc3RlcCBvbiBvdGhlciBkcml2ZXJzJyBJL08gc3BhY2UgYnkgYWNjaWRlbnQgKi8KKwlpZiAoIXJlcXVlc3RfbXV4ZWRfcmVnaW9uKGJhc2UsIDIsIERSVk5BTUUpKSB7CisJCXByX2VycigiSS9PIGFkZHJlc3MgMHglMDR4IGFscmVhZHkgaW4gdXNlXG4iLCBiYXNlKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlvdXRiKFNJT19VTkxPQ0tfS0VZLCBiYXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19zZWxlY3QoaW50IGJhc2UsIGludCBsZCkKK3sKKwlvdXRiKFNJT19SRUdfTERTRUwsIGJhc2UpOworCW91dGIobGQsIGJhc2UgKyAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fZXhpdChpbnQgYmFzZSkKK3sKKwlvdXRiKFNJT19MT0NLX0tFWSwgYmFzZSk7CisJcmVsZWFzZV9yZWdpb24oYmFzZSwgMik7Cit9CisKK3N0YXRpYyBpbnQgc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnKHN0cnVjdCBzY2g1NjI3X2RhdGEgKmRhdGEsIHUxNiByZWcpCit7CisJdTggdmFsOworCWludCBpOworCS8qCisJICogQWNjb3JkaW5nIHRvIFNNU0MgZm9yIHRoZSBjb21tYW5kcyB3ZSB1c2UgdGhlIG1heGltdW0gdGltZSBmb3IKKwkgKiB0aGUgRU0gdG8gcmVzcG9uZCBpcyAxNSBtcywgYnV0IHRlc3Rpbmcgc2hvd3MgaW4gcHJhY3RpY2UgaXQKKwkgKiByZXNwb25kcyB3aXRoaW4gMTUtMzIgcmVhZHMsIHNvIHdlIGZpcnN0IGJ1c3kgcG9sbCwgYW5kIGlmCisJICogdGhhdCBmYWlscyBzbGVlcCBhIGJpdCBhbmQgdHJ5IGFnYWluIHVudGlsIHdlIGFyZSB3YXkgcGFzdAorCSAqIHRoZSAxNSBtcyBtYXhpbXVtIHJlc3BvbnNlIHRpbWUuCisJICovCisJY29uc3QgaW50IG1heF9idXN5X3BvbGxzID0gNjQ7CisJY29uc3QgaW50IG1heF9sYXp5X3BvbGxzID0gMzI7CisKKwkvKiAoT3B0aW9uYWwpIFdyaXRlLUNsZWFyIHRoZSBFQyB0byBIb3N0IE1haWxib3ggUmVnaXN0ZXIgKi8KKwl2YWwgPSBpbmIoZGF0YS0+YWRkciArIDEpOworCW91dGIodmFsLCBkYXRhLT5hZGRyICsgMSk7CisKKwkvKiBTZXQgTWFpbGJveCBBZGRyZXNzIFBvaW50ZXIgdG8gZmlyc3QgbG9jYXRpb24gaW4gUmVnaW9uIDEgKi8KKwlvdXRiKDB4MDAsIGRhdGEtPmFkZHIgKyAyKTsKKwlvdXRiKDB4ODAsIGRhdGEtPmFkZHIgKyAzKTsKKworCS8qIFdyaXRlIFJlcXVlc3QgUGFja2V0IEhlYWRlciAqLworCW91dGIoMHgwMiwgZGF0YS0+YWRkciArIDQpOyAvKiBBY2Nlc3MgVHlwZTogVlJFRyByZWFkICovCisJb3V0YigweDAxLCBkYXRhLT5hZGRyICsgNSk7IC8qICMgb2YgRW50cmllczogMSBCeXRlICg4LWJpdCkgKi8KKwlvdXRiKDB4MDQsIGRhdGEtPmFkZHIgKyAyKTsgLyogTWFpbGJveCBBUCB0byBmaXJzdCBkYXRhIGVudHJ5IGxvYy4gKi8KKworCS8qIFdyaXRlIEFkZHJlc3MgZmllbGQgKi8KKwlvdXRiKHJlZyAmIDB4ZmYsIGRhdGEtPmFkZHIgKyA2KTsKKwlvdXRiKHJlZyA+PiA4LCBkYXRhLT5hZGRyICsgNyk7CisKKwkvKiBFeGVjdXRlIHRoZSBSYW5kb20gQWNjZXNzIENvbW1hbmQgKi8KKwlvdXRiKDB4MDEsIGRhdGEtPmFkZHIpOyAvKiBXcml0ZSAwMWggdG8gdGhlIEhvc3QtdG8tRUMgcmVnaXN0ZXIgKi8KKworCS8qIEVNIEludGVyZmFjZSBQb2xsaW5nICJBbGdvcml0aG0iICovCisJZm9yIChpID0gMDsgaSA8IG1heF9idXN5X3BvbGxzICsgbWF4X2xhenlfcG9sbHM7IGkrKykgeworCQlpZiAoaSA+PSBtYXhfYnVzeV9wb2xscykKKwkJCW1zbGVlcCgxKTsKKwkJLyogUmVhZCBJbnRlcnJ1cHQgc291cmNlIFJlZ2lzdGVyICovCisJCXZhbCA9IGluYihkYXRhLT5hZGRyICsgOCk7CisJCS8qIFdyaXRlIENsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlIGJpdHMgKi8KKwkJaWYgKHZhbCkKKwkJCW91dGIodmFsLCBkYXRhLT5hZGRyICsgOCk7CisJCS8qIENvbW1hbmQgQ29tcGxldGVkID8gKi8KKwkJaWYgKHZhbCAmIDB4MDEpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gbWF4X2J1c3lfcG9sbHMgKyBtYXhfbGF6eV9wb2xscykgeworCQlwcl9lcnIoIk1heCByZXRyaWVzIGV4Y2VlZGVkIHJlYWRpbmcgdmlydHVhbCAiCisJCSAgICAgICAicmVnaXN0ZXIgMHglMDRoeCAoJWQpXG4iLCByZWcsIDEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKgorCSAqIEFjY29yZGluZyB0byBTTVNDIHdlIG1heSBuZWVkIHRvIHJldHJ5IHRoaXMsIGJ1dCBzb2ZhciBJJ3ZlIGFsd2F5cworCSAqIHNlZW4gdGhpcyBzdWNjZWVkIGluIDEgdHJ5LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfYnVzeV9wb2xsczsgaSsrKSB7CisJCS8qIFJlYWQgRUMtdG8tSG9zdCBSZWdpc3RlciAqLworCQl2YWwgPSBpbmIoZGF0YS0+YWRkciArIDEpOworCQkvKiBDb21tYW5kIENvbXBsZXRlZCA/ICovCisJCWlmICh2YWwgPT0gMHgwMSkKKwkJCWJyZWFrOworCisJCWlmIChpID09IDApCisJCQlwcl93YXJuKCJFQyByZXBvcnRzOiAweCUwMnggcmVhZGluZyB2aXJ0dWFsIHJlZ2lzdGVyICIKKwkJCQkiMHglMDRoeFxuIiwgKHVuc2lnbmVkIGludCl2YWwsIHJlZyk7CisJfQorCWlmIChpID09IG1heF9idXN5X3BvbGxzKSB7CisJCXByX2VycigiTWF4IHJldHJpZXMgZXhjZWVkZWQgcmVhZGluZyB2aXJ0dWFsICIKKwkJICAgICAgICJyZWdpc3RlciAweCUwNGh4ICglZClcbiIsIHJlZywgMik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qCisJICogQWNjb3JkaW5nIHRvIHRoZSBTTVNDIGFwcCBub3RlIHdlIHNob3VsZCBub3cgZG86CisJICoKKwkgKiBTZXQgTWFpbGJveCBBZGRyZXNzIFBvaW50ZXIgdG8gZmlyc3QgbG9jYXRpb24gaW4gUmVnaW9uIDEgKgorCSAqIG91dGIoMHgwMCwgZGF0YS0+YWRkciArIDIpOworCSAqIG91dGIoMHg4MCwgZGF0YS0+YWRkciArIDMpOworCSAqCisJICogQnV0IGlmIHdlIGRvIHRoYXQgdGhpbmdzIGRvbid0IHdvcmssIHNvIGxldCdzIG5vdC4KKwkgKi8KKworCS8qIFJlYWQgRGF0YSBmcm9tIE1haWxib3ggKi8KKwlyZXR1cm4gaW5iKGRhdGEtPmFkZHIgKyA0KTsKK30KKworc3RhdGljIGludCBzY2g1NjI3X3JlYWRfdmlydHVhbF9yZWcxNihzdHJ1Y3Qgc2NoNTYyN19kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCWludCBsc2IsIG1zYjsKKworCS8qIFJlYWQgTFNCIGZpcnN0LCB0aGlzIHdpbGwgY2F1c2UgdGhlIG1hdGNoaW5nIE1TQiB0byBiZSBsYXRjaGVkICovCisJbHNiID0gc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnKGRhdGEsIHJlZyk7CisJaWYgKGxzYiA8IDApCisJCXJldHVybiBsc2I7CisKKwltc2IgPSBzY2g1NjI3X3JlYWRfdmlydHVhbF9yZWcoZGF0YSwgcmVnICsgMSk7CisJaWYgKG1zYiA8IDApCisJCXJldHVybiBtc2I7CisKKwlyZXR1cm4gbHNiIHwgKG1zYiA8PCA4KTsKK30KKworc3RhdGljIGludCBzY2g1NjI3X3JlYWRfdmlydHVhbF9yZWcxMihzdHJ1Y3Qgc2NoNTYyN19kYXRhICpkYXRhLCB1MTYgbXNiX3JlZywKKwkJCQkgICAgICB1MTYgbHNuX3JlZywgaW50IGhpZ2hfbmliYmxlKQoreworCWludCBtc2IsIGxzbjsKKworCS8qIFJlYWQgTVNCIGZpcnN0LCB0aGlzIHdpbGwgY2F1c2UgdGhlIG1hdGNoaW5nIExTTiB0byBiZSBsYXRjaGVkICovCisJbXNiID0gc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnKGRhdGEsIG1zYl9yZWcpOworCWlmIChtc2IgPCAwKQorCQlyZXR1cm4gbXNiOworCisJbHNuID0gc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnKGRhdGEsIGxzbl9yZWcpOworCWlmIChsc24gPCAwKQorCQlyZXR1cm4gbHNuOworCisJaWYgKGhpZ2hfbmliYmxlKQorCQlyZXR1cm4gKG1zYiA8PCA0KSB8IChsc24gPj4gNCk7CisJZWxzZQorCQlyZXR1cm4gKG1zYiA8PCA0KSB8IChsc24gJiAweDBmKTsKK30KKworc3RhdGljIHN0cnVjdCBzY2g1NjI3X2RhdGEgKnNjaDU2MjdfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNjaDU2MjdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzY2g1NjI3X2RhdGEgKnJldCA9IGRhdGE7CisJaW50IGksIHZhbDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qIENhY2hlIHRoZSB2YWx1ZXMgZm9yIDEgc2Vjb25kICovCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopIHx8ICFkYXRhLT52YWxpZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgU0NINTYyN19OT19URU1QUzsgaSsrKSB7CisJCQl2YWwgPSBzY2g1NjI3X3JlYWRfdmlydHVhbF9yZWcxMihkYXRhLAorCQkJCVNDSDU2MjdfUkVHX1RFTVBfTVNCW2ldLAorCQkJCVNDSDU2MjdfUkVHX1RFTVBfTFNOW2ldLAorCQkJCVNDSDU2MjdfUkVHX1RFTVBfSElHSF9OSUJCTEVbaV0pOworCQkJaWYgKHVubGlrZWx5KHZhbCA8IDApKSB7CisJCQkJcmV0ID0gRVJSX1BUUih2YWwpOworCQkJCWdvdG8gYWJvcnQ7CisJCQl9CisJCQlkYXRhLT50ZW1wW2ldID0gdmFsOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IFNDSDU2MjdfTk9fRkFOUzsgaSsrKSB7CisJCQl2YWwgPSBzY2g1NjI3X3JlYWRfdmlydHVhbF9yZWcxNihkYXRhLAorCQkJCQkJCSBTQ0g1NjI3X1JFR19GQU5baV0pOworCQkJaWYgKHVubGlrZWx5KHZhbCA8IDApKSB7CisJCQkJcmV0ID0gRVJSX1BUUih2YWwpOworCQkJCWdvdG8gYWJvcnQ7CisJCQl9CisJCQlkYXRhLT5mYW5baV0gPSB2YWw7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgU0NINTYyN19OT19JTjsgaSsrKSB7CisJCQl2YWwgPSBzY2g1NjI3X3JlYWRfdmlydHVhbF9yZWcxMihkYXRhLAorCQkJCVNDSDU2MjdfUkVHX0lOX01TQltpXSwKKwkJCQlTQ0g1NjI3X1JFR19JTl9MU05baV0sCisJCQkJU0NINTYyN19SRUdfSU5fSElHSF9OSUJCTEVbaV0pOworCQkJaWYgKHVubGlrZWx5KHZhbCA8IDApKSB7CisJCQkJcmV0ID0gRVJSX1BUUih2YWwpOworCQkJCWdvdG8gYWJvcnQ7CisJCQl9CisJCQlkYXRhLT5pbltpXSA9IHZhbDsKKwkJfQorCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzY2g1NjI3X3JlYWRfbGltaXRzKHN0cnVjdCBzY2g1NjI3X2RhdGEgKmRhdGEpCit7CisJaW50IGksIHZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBTQ0g1NjI3X05PX1RFTVBTOyBpKyspIHsKKwkJLyoKKwkJICogTm90ZSB3aGF0IFNNU0MgY2FsbHMgQUJTLCBpcyB3aGF0IGxtX3NlbnNvcnMgY2FsbHMgbWF4CisJCSAqIChha2EgaGlnaCksIGFuZCBISUdIIGlzIHdoYXQgbG1fc2Vuc29ycyBjYWxscyBjcml0LgorCQkgKi8KKwkJdmFsID0gc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnKGRhdGEsIFNDSDU2MjdfUkVHX1RFTVBfQUJTW2ldKTsKKwkJaWYgKHZhbCA8IDApCisJCQlyZXR1cm4gdmFsOworCQlkYXRhLT50ZW1wX21heFtpXSA9IHZhbDsKKworCQl2YWwgPSBzY2g1NjI3X3JlYWRfdmlydHVhbF9yZWcoZGF0YSwgU0NINTYyN19SRUdfVEVNUF9ISUdIW2ldKTsKKwkJaWYgKHZhbCA8IDApCisJCQlyZXR1cm4gdmFsOworCQlkYXRhLT50ZW1wX2NyaXRbaV0gPSB2YWw7CisJfQorCWZvciAoaSA9IDA7IGkgPCBTQ0g1NjI3X05PX0ZBTlM7IGkrKykgeworCQl2YWwgPSBzY2g1NjI3X3JlYWRfdmlydHVhbF9yZWcxNihkYXRhLCBTQ0g1NjI3X1JFR19GQU5fTUlOW2ldKTsKKwkJaWYgKHZhbCA8IDApCisJCQlyZXR1cm4gdmFsOworCQlkYXRhLT5mYW5fbWluW2ldID0gdmFsOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZ190b190ZW1wKHUxNiByZWcpCit7CisJcmV0dXJuIChyZWcgKiA2MjUpIC8gMTAgLSA2NDAwMDsKK30KKworc3RhdGljIGludCByZWdfdG9fdGVtcF9saW1pdCh1OCByZWcpCit7CisJcmV0dXJuIChyZWcgLSA2NCkgKiAxMDAwOworfQorCitzdGF0aWMgaW50IHJlZ190b19ycG0odTE2IHJlZykKK3sKKwlpZiAocmVnID09IDApCisJCXJldHVybiAtRUlPOworCWlmIChyZWcgPT0gMHhmZmZmKQorCQlyZXR1cm4gMDsKKworCXJldHVybiA1NDAwNTQwIC8gcmVnOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwljaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIERFVk5BTUUpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCSpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBzY2g1NjI3X2RhdGEgKmRhdGEgPSBzY2g1NjI3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgdmFsOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwl2YWwgPSByZWdfdG9fdGVtcChkYXRhLT50ZW1wW2F0dHItPmluZGV4XSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9mYXVsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHNjaDU2MjdfZGF0YSAqZGF0YSA9IHNjaDU2MjdfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZGF0YS0+dGVtcFthdHRyLT5pbmRleF0gPT0gMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9tYXgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCSpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBzY2g1NjI3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgdmFsOworCisJdmFsID0gcmVnX3RvX3RlbXBfbGltaXQoZGF0YS0+dGVtcF9tYXhbYXR0ci0+aW5kZXhdKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX2NyaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCSpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBzY2g1NjI3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgdmFsOworCisJdmFsID0gcmVnX3RvX3RlbXBfbGltaXQoZGF0YS0+dGVtcF9jcml0W2F0dHItPmluZGV4XSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3Qgc2NoNTYyN19kYXRhICpkYXRhID0gc2NoNTYyN191cGRhdGVfZGV2aWNlKGRldik7CisJaW50IHZhbDsKKworCWlmIChJU19FUlIoZGF0YSkpCisJCXJldHVybiBQVFJfRVJSKGRhdGEpOworCisJdmFsID0gcmVnX3RvX3JwbShkYXRhLT5mYW5bYXR0ci0+aW5kZXhdKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9mYXVsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHNjaDU2MjdfZGF0YSAqZGF0YSA9IHNjaDU2MjdfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCWRhdGEtPmZhblthdHRyLT5pbmRleF0gPT0gMHhmZmZmKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3Qgc2NoNTYyN19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHZhbCA9IHJlZ190b19ycG0oZGF0YS0+ZmFuX21pblthdHRyLT5pbmRleF0pOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCSpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBzY2g1NjI3X2RhdGEgKmRhdGEgPSBzY2g1NjI3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgdmFsOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwl2YWwgPSBESVZfUk9VTkRfQ0xPU0VTVCgKKwkJZGF0YS0+aW5bYXR0ci0+aW5kZXhdICogU0NINTYyN19SRUdfSU5fRkFDVE9SW2F0dHItPmluZGV4XSwKKwkJMTAwMDApOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2luX2xhYmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAorCQkJU0NINTYyN19JTl9MQUJFTFNbYXR0ci0+aW5kZXhdKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA0X2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDZfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgNSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA3X2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wOF9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19mYXVsdCwgU19JUlVHTywgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDRfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA1X2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNl9mYXVsdCwgU19JUlVHTywgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDdfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA4X2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNV9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNl9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wN19tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wOF9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lSVUdPLCBzaG93X3RlbXBfY3JpdCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcF9jcml0LCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfY3JpdCwgU19JUlVHTywgc2hvd190ZW1wX2NyaXQsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9jcml0LCBTX0lSVUdPLCBzaG93X3RlbXBfY3JpdCwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA1X2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcF9jcml0LCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDZfY3JpdCwgU19JUlVHTywgc2hvd190ZW1wX2NyaXQsIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wN19jcml0LCBTX0lSVUdPLCBzaG93X3RlbXBfY3JpdCwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA4X2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcF9jcml0LCBOVUxMLCA3KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfZmF1bHQsIFNfSVJVR08sIHNob3dfZmFuX2ZhdWx0LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9mYXVsdCwgU19JUlVHTywgc2hvd19mYW5fZmF1bHQsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjRfZmF1bHQsIFNfSVJVR08sIHNob3dfZmFuX2ZhdWx0LCBOVUxMLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVJVR08sIHNob3dfZmFuX21pbiwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfbWluLCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX21pbiwgU19JUlVHTywgc2hvd19mYW5fbWluLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9taW4sIFNfSVJVR08sIHNob3dfZmFuX21pbiwgTlVMTCwgMyk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2xhYmVsLCBTX0lSVUdPLCBzaG93X2luX2xhYmVsLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2xhYmVsLCBTX0lSVUdPLCBzaG93X2luX2xhYmVsLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2xhYmVsLCBTX0lSVUdPLCBzaG93X2luX2xhYmVsLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX2xhYmVsLCBTX0lSVUdPLCBzaG93X2luX2xhYmVsLCBOVUxMLCAzKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNjaDU2MjdfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDZfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA3X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wOF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDdfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA4X2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDZfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wN19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA4X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDZfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDdfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDhfY3JpdC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X21pbi5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2xhYmVsLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbGFiZWwuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9sYWJlbC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2xhYmVsLmRldl9hdHRyLmF0dHIsCisJLyogTm8gaW40X2xhYmVsIGFzIGluNCBpcyBhIGdlbmVyaWMgaW5wdXQgcGluICovCisKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzY2g1NjI3X2dyb3VwID0geworCS5hdHRycyA9IHNjaDU2MjdfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBpbnQgc2NoNTYyN19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2NoNTYyN19kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoZGF0YS0+aHdtb25fZGV2KQorCQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNjaDU2MjdfZ3JvdXApOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNjaDU2MjdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2NoNTYyN19kYXRhICpkYXRhOworCWludCBlcnIsIGJ1aWxkX2NvZGUsIGJ1aWxkX2lkLCBod21vbl9yZXYsIHZhbDsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NoNTYyN19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPmFkZHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCktPnN0YXJ0OworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKKworCXZhbCA9IHNjaDU2MjdfcmVhZF92aXJ0dWFsX3JlZyhkYXRhLCBTQ0g1NjI3X1JFR19IV01PTl9JRCk7CisJaWYgKHZhbCA8IDApIHsKKwkJZXJyID0gdmFsOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAodmFsICE9IFNDSDU2MjdfSFdNT05fSUQpIHsKKwkJcHJfZXJyKCJpbnZhbGlkICVzIGlkOiAweCUwMlggKGV4cGVjdGVkIDB4JTAyWClcbiIsICJod21vbiIsCisJCSAgICAgICB2YWwsIFNDSDU2MjdfSFdNT05fSUQpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKworCXZhbCA9IHNjaDU2MjdfcmVhZF92aXJ0dWFsX3JlZyhkYXRhLCBTQ0g1NjI3X1JFR19DT01QQU5ZX0lEKTsKKwlpZiAodmFsIDwgMCkgeworCQllcnIgPSB2YWw7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICh2YWwgIT0gU0NINTYyN19DT01QQU5ZX0lEKSB7CisJCXByX2VycigiaW52YWxpZCAlcyBpZDogMHglMDJYIChleHBlY3RlZCAweCUwMlgpXG4iLCAiY29tcGFueSIsCisJCSAgICAgICB2YWwsIFNDSDU2MjdfQ09NUEFOWV9JRCk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCisJdmFsID0gc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnKGRhdGEsIFNDSDU2MjdfUkVHX1BSSU1BUllfSUQpOworCWlmICh2YWwgPCAwKSB7CisJCWVyciA9IHZhbDsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKHZhbCAhPSBTQ0g1NjI3X1BSSU1BUllfSUQpIHsKKwkJcHJfZXJyKCJpbnZhbGlkICVzIGlkOiAweCUwMlggKGV4cGVjdGVkIDB4JTAyWClcbiIsICJwcmltYXJ5IiwKKwkJICAgICAgIHZhbCwgU0NINTYyN19QUklNQVJZX0lEKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlidWlsZF9jb2RlID0gc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnKGRhdGEsIFNDSDU2MjdfUkVHX0JVSUxEX0NPREUpOworCWlmIChidWlsZF9jb2RlIDwgMCkgeworCQllcnIgPSBidWlsZF9jb2RlOworCQlnb3RvIGVycm9yOworCX0KKworCWJ1aWxkX2lkID0gc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnMTYoZGF0YSwgU0NINTYyN19SRUdfQlVJTERfSUQpOworCWlmIChidWlsZF9pZCA8IDApIHsKKwkJZXJyID0gYnVpbGRfaWQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaHdtb25fcmV2ID0gc2NoNTYyN19yZWFkX3ZpcnR1YWxfcmVnKGRhdGEsIFNDSDU2MjdfUkVHX0hXTU9OX1JFVik7CisJaWYgKGh3bW9uX3JldiA8IDApIHsKKwkJZXJyID0gaHdtb25fcmV2OworCQlnb3RvIGVycm9yOworCX0KKworCXZhbCA9IHNjaDU2MjdfcmVhZF92aXJ0dWFsX3JlZyhkYXRhLCBTQ0g1NjI3X1JFR19DVFJMKTsKKwlpZiAodmFsIDwgMCkgeworCQllcnIgPSB2YWw7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICghKHZhbCAmIDB4MDEpKSB7CisJCXByX2VycigiaGFyZHdhcmUgbW9uaXRvcmluZyBub3QgZW5hYmxlZFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBSZWFkIGxpbWl0cywgd2UgZG8gdGhpcyBvbmx5IG9uY2UgYXMgcmVhZGluZyBhIHJlZ2lzdGVyIG9uCisJICogdGhlIHNjaDU2MjcgaXMgcXVpdGUgZXhwZW5zaXZlIChhbmQgdGhleSBkb24ndCBjaGFuZ2UpLgorCSAqLworCWVyciA9IHNjaDU2MjdfcmVhZF9saW1pdHMoZGF0YSk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCXByX2luZm8oImZpcm13YXJlIGJ1aWxkOiBjb2RlIDB4JTAyWCwgaWQgMHglMDRYLCBod21vbjogcmV2IDB4JTAyWFxuIiwKKwkJYnVpbGRfY29kZSwgYnVpbGRfaWQsIGh3bW9uX3Jldik7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBpbnRlcmZhY2UgZmlsZXMgKi8KKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc2NoNTYyN19ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlkYXRhLT5od21vbl9kZXYgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHVybiAwOworCitlcnJvcjoKKwlzY2g1NjI3X3JlbW92ZShwZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzY2g1NjI3X2ZpbmQoaW50IHNpb2FkZHIsIHVuc2lnbmVkIHNob3J0ICphZGRyZXNzKQoreworCXU4IGRldmlkOworCWludCBlcnIgPSBzdXBlcmlvX2VudGVyKHNpb2FkZHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlkZXZpZCA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfREVWSUQpOworCWlmIChkZXZpZCAhPSBTSU9fU0NINTYyN19JRCkgeworCQlwcl9kZWJ1ZygiVW5zdXBwb3J0ZWQgZGV2aWNlIGlkOiAweCUwMnhcbiIsCisJCQkgKHVuc2lnbmVkIGludClkZXZpZCk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdXBlcmlvX3NlbGVjdChzaW9hZGRyLCBTSU9fU0NINTYyN19FTV9MRCk7CisKKwlpZiAoIShzdXBlcmlvX2luYihzaW9hZGRyLCBTSU9fUkVHX0VOQUJMRSkgJiAweDAxKSkgeworCQlwcl93YXJuKCJEZXZpY2Ugbm90IGFjdGl2YXRlZFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKgorCSAqIFdhcm5pbmcgdGhlIG9yZGVyIG9mIHRoZSBsb3cgLyBoaWdoIGJ5dGUgaXMgdGhlIG90aGVyIHdheSBhcm91bmQKKwkgKiBhcyBvbiBtb3N0IG90aGVyIHN1cGVyaW8gZGV2aWNlcyEhCisJICovCisJKmFkZHJlc3MgPSBzdXBlcmlvX2luYihzaW9hZGRyLCBTSU9fUkVHX0FERFIpIHwKKwkJICAgc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPX1JFR19BRERSICsgMSkgPDwgODsKKwlpZiAoKmFkZHJlc3MgPT0gMCkgeworCQlwcl93YXJuKCJCYXNlIGFkZHJlc3Mgbm90IHNldFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcl9pbmZvKCJGb3VuZCAlcyBjaGlwIGF0ICUjaHhcbiIsIERFVk5BTUUsICphZGRyZXNzKTsKK2V4aXQ6CisJc3VwZXJpb19leGl0KHNpb2FkZHIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNjaDU2MjdfZGV2aWNlX2FkZCh1bnNpZ25lZCBzaG9ydCBhZGRyZXNzKQoreworCXN0cnVjdCByZXNvdXJjZSByZXMgPSB7CisJCS5zdGFydAk9IGFkZHJlc3MsCisJCS5lbmQJPSBhZGRyZXNzICsgUkVHSU9OX0xFTkdUSCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfTsKKwlpbnQgZXJyOworCisJc2NoNTYyN19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVk5BTUUsIGFkZHJlc3MpOworCWlmICghc2NoNTYyN19wZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcy5uYW1lID0gc2NoNTYyN19wZGV2LT5uYW1lOworCWVyciA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoJnJlcyk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhzY2g1NjI3X3BkZXYsICZyZXMsIDEpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJEZXZpY2UgcmVzb3VyY2UgYWRkaXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisJfQorCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChzY2g1NjI3X3BkZXYpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJEZXZpY2UgYWRkaXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfZGV2aWNlX3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNjaDU2MjdfcGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzY2g1NjI3X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUlZOQU1FLAorCX0sCisJLnByb2JlCQk9IHNjaDU2MjdfcHJvYmUsCisJLnJlbW92ZQkJPSBzY2g1NjI3X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNjaDU2MjdfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAtRU5PREVWOworCXVuc2lnbmVkIHNob3J0IGFkZHJlc3M7CisKKwlpZiAoc2NoNTYyN19maW5kKDB4NGUsICZhZGRyZXNzKSAmJiBzY2g1NjI3X2ZpbmQoMHgyZSwgJmFkZHJlc3MpKQorCQlnb3RvIGV4aXQ7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNjaDU2MjdfZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwllcnIgPSBzY2g1NjI3X2RldmljZV9hZGQoYWRkcmVzcyk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RyaXZlcjsKKworCXJldHVybiAwOworCitleGl0X2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2NoNTYyN19kcml2ZXIpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2NoNTYyN19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc2NoNTYyN19wZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2NoNTYyN19kcml2ZXIpOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIlNNU0MgU0NINTYyNyBIYXJkd2FyZSBNb25pdG9yaW5nIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSGFucyBkZSBHb2VkZSAoaGRlZ29lZGVAcmVkaGF0LmNvbSkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoc2NoNTYyN19pbml0KTsKK21vZHVsZV9leGl0KHNjaDU2MjdfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMgYi9kcml2ZXJzL2h3bW9uL3NodDE1LmMKaW5kZXggYTYxMGU3OC4uMWE5YzMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zaHQxNS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwpAQCAtMzMzLDExICszMzMsMTEgQEAKIAogCWNvbnN0IGludCBjMSA9IC00OwogCWNvbnN0IGludCBjMiA9IDQwNTAwOyAvKiB4IDEwIF4gLTYgKi8KLQljb25zdCBpbnQgYzMgPSAtMjgwMDsgLyogeDEwIF4gLTkgKi8KKwljb25zdCBpbnQgYzMgPSAtMjg7IC8qIHggMTAgXiAtNyAqLwogCiAJUkhsaW5lYXIgPSBjMSoxMDAwCiAJCSsgYzIgKiBkYXRhLT52YWxfaHVtaWQvMTAwMAotCQkrIChkYXRhLT52YWxfaHVtaWQgKiBkYXRhLT52YWxfaHVtaWQgKiBjMykvMTAwMDAwMDsKKwkJKyAoZGF0YS0+dmFsX2h1bWlkICogZGF0YS0+dmFsX2h1bWlkICogYzMpIC8gMTAwMDA7CiAJcmV0dXJuICh0ZW1wIC0gMjUwMDApICogKDEwMDAwICsgODAgKiBkYXRhLT52YWxfaHVtaWQpCiAJCS8gMTAwMDAwMCArIFJIbGluZWFyOwogfQpAQCAtNjEwLDcgKzYxMCw3IEBACiAJc3RydWN0IHNodDE1X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCS8qIE1ha2Ugc3VyZSBhbnkgcmVhZHMgZnJvbSB0aGUgZGV2aWNlIGFyZSBkb25lIGFuZAotCSAqIHByZXZlbnQgbmV3IG9uZXMgYmVnaW5ubmluZyAqLworCSAqIHByZXZlbnQgbmV3IG9uZXMgZnJvbSBiZWdpbm5pbmcgKi8KIAltdXRleF9sb2NrKCZkYXRhLT5yZWFkX2xvY2spOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNodDE1X2F0dHJfZ3JvdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od3NwaW5sb2NrL0tjb25maWcgYi9kcml2ZXJzL2h3c3BpbmxvY2svS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjRhZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od3NwaW5sb2NrL0tjb25maWcKQEAgLTAsMCArMSwyMiBAQAorIworIyBHZW5lcmljIEhXU1BJTkxPQ0sgZnJhbWV3b3JrCisjCisKK2NvbmZpZyBIV1NQSU5MT0NLCisJdHJpc3RhdGUgIkdlbmVyaWMgSGFyZHdhcmUgU3BpbmxvY2sgZnJhbWV3b3JrIgorCWhlbHAKKwkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgZ2VuZXJpYyBoYXJkd2FyZSBzcGlubG9jayBmcmFtZXdvcmsuCisJICBZb3Ugb25seSBuZWVkIHRvIGVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGhhcmR3YXJlIHNwaW5sb2NrIG1vZHVsZQorCSAgb24geW91ciBzeXN0ZW0gKHVzdWFsbHkgb25seSByZWxldmFudCBpZiB5b3VyIHN5c3RlbSBoYXMgcmVtb3RlIHNsYXZlCisJICBjb3Byb2Nlc3NvcnMpLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSFdTUElOTE9DS19PTUFQCisJdHJpc3RhdGUgIk9NQVAgSGFyZHdhcmUgU3BpbmxvY2sgZGV2aWNlIgorCWRlcGVuZHMgb24gSFdTUElOTE9DSyAmJiBBUkNIX09NQVA0CisJaGVscAorCSAgU2F5IHkgaGVyZSB0byBzdXBwb3J0IHRoZSBPTUFQIEhhcmR3YXJlIFNwaW5sb2NrIGRldmljZSAoZmlyc3RseQorCSAgaW50cm9kdWNlZCBpbiBPTUFQNCkuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3c3BpbmxvY2svTWFrZWZpbGUgYi9kcml2ZXJzL2h3c3BpbmxvY2svTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyOWEzZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdzcGlubG9jay9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgR2VuZXJpYyBIYXJkd2FyZSBTcGlubG9jayBmcmFtZXdvcmsKKyMKKworb2JqLSQoQ09ORklHX0hXU1BJTkxPQ0spCQkrPSBod3NwaW5sb2NrX2NvcmUubworb2JqLSQoQ09ORklHX0hXU1BJTkxPQ0tfT01BUCkJCSs9IG9tYXBfaHdzcGlubG9jay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3c3BpbmxvY2svaHdzcGlubG9ja19jb3JlLmMgYi9kcml2ZXJzL2h3c3BpbmxvY2svaHdzcGlubG9ja19jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhNjI3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdzcGlubG9jay9od3NwaW5sb2NrX2NvcmUuYwpAQCAtMCwwICsxLDU0OCBAQAorLyoKKyAqIEhhcmR3YXJlIHNwaW5sb2NrIGZyYW1ld29yaworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQorICoKKyAqIENvbnRhY3Q6IE9oYWQgQmVuLUNvaGVuIDxvaGFkQHdpemVyeS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgICAgIiVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvcmFkaXgtdHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3c3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJod3NwaW5sb2NrX2ludGVybmFsLmgiCisKKy8qIHJhZGl4IHRyZWUgdGFncyAqLworI2RlZmluZSBIV1NQSU5MT0NLX1VOVVNFRAkoMCkgLyogdGFncyBhbiBod3NwaW5sb2NrIGFzIHVudXNlZCAqLworCisvKgorICogQSByYWRpeCB0cmVlIGlzIHVzZWQgdG8gbWFpbnRhaW4gdGhlIGF2YWlsYWJsZSBod3NwaW5sb2NrIGluc3RhbmNlcy4KKyAqIFRoZSB0cmVlIGFzc29jaWF0ZXMgaHdzcGlubG9jayBwb2ludGVycyB3aXRoIHRoZWlyIGludGVnZXIga2V5IGlkLAorICogYW5kIHByb3ZpZGVzIGVhc3ktdG8tdXNlIEFQSSB3aGljaCBtYWtlcyB0aGUgaHdzcGlubG9jayBjb3JlIGNvZGUgc2ltcGxlCisgKiBhbmQgZWFzeSB0byByZWFkLgorICoKKyAqIFJhZGl4IHRyZWVzIGFyZSBxdWljayBvbiBsb29rdXBzLCBhbmQgcmVhc29uYWJseSBlZmZpY2llbnQgaW4gdGVybXMgb2YKKyAqIHN0b3JhZ2UsIGVzcGVjaWFsbHkgd2l0aCBoaWdoIGRlbnNpdHkgdXNhZ2VzIHN1Y2ggYXMgdGhpcyBmcmFtZXdvcmsKKyAqIHJlcXVpcmVzIChhIGNvbnRpbnVvdXMgcmFuZ2Ugb2YgaW50ZWdlciBrZXlzLCBiZWdpbm5pbmcgd2l0aCB6ZXJvLCBpcworICogdXNlZCBhcyB0aGUgSUQncyBvZiB0aGUgaHdzcGlubG9jayBpbnN0YW5jZXMpLgorICoKKyAqIFRoZSByYWRpeCB0cmVlIEFQSSBzdXBwb3J0cyB0YWdnaW5nIGl0ZW1zIGluIHRoZSB0cmVlLCB3aGljaCB0aGlzCisgKiBmcmFtZXdvcmsgdXNlcyB0byBtYXJrIHVudXNlZCBod3NwaW5sb2NrIGluc3RhbmNlcyAoc2VlIHRoZQorICogSFdTUElOTE9DS19VTlVTRUQgdGFnIGFib3ZlKS4gQXMgYSByZXN1bHQsIHRoZSBwcm9jZXNzIG9mIHF1ZXJ5aW5nIHRoZQorICogdHJlZSwgbG9va2luZyBmb3IgYW4gdW51c2VkIGh3c3BpbmxvY2sgaW5zdGFuY2UsIGlzIG5vdyByZWR1Y2VkIHRvIGEKKyAqIHNpbmdsZSByYWRpeCB0cmVlIEFQSSBjYWxsLgorICovCitzdGF0aWMgUkFESVhfVFJFRShod3NwaW5sb2NrX3RyZWUsIEdGUF9LRVJORUwpOworCisvKgorICogU3luY2hyb25pemF0aW9uIG9mIGFjY2VzcyB0byB0aGUgdHJlZSBpcyBhY2hpZXZlZCB1c2luZyB0aGlzIHNwaW5sb2NrLAorICogYXMgdGhlIHJhZGl4LXRyZWUgQVBJIHJlcXVpcmVzIHRoYXQgdXNlcnMgcHJvdmlkZSBhbGwgc3luY2hyb25pc2F0aW9uLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh3c3BpbmxvY2tfdHJlZV9sb2NrKTsKKworLyoqCisgKiBfX2h3c3Bpbl90cnlsb2NrKCkgLSBhdHRlbXB0IHRvIGxvY2sgYSBzcGVjaWZpYyBod3NwaW5sb2NrCisgKiBAaHdsb2NrOiBhbiBod3NwaW5sb2NrIHdoaWNoIHdlIHdhbnQgdG8gdHJ5bG9jaworICogQG1vZGU6IGNvbnRyb2xzIHdoZXRoZXIgbG9jYWwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgb3Igbm90CisgKiBAZmxhZ3M6IGEgcG9pbnRlciB3aGVyZSB0aGUgY2FsbGVyJ3MgaW50ZXJydXB0IHN0YXRlIHdpbGwgYmUgc2F2ZWQgYXQgKGlmCisgKiAgICAgICAgIHJlcXVlc3RlZCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGxvY2sgYW4gaHdzcGlubG9jaywgYW5kIHdpbGwgaW1tZWRpYXRlbHkKKyAqIGZhaWwgaWYgdGhlIGh3c3BpbmxvY2sgaXMgYWxyZWFkeSB0YWtlbi4KKyAqCisgKiBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBwcmVlbXB0aW9uIChhbmQgcG9zc2libHkKKyAqIGludGVycnVwdHMpIGlzIGRpc2FibGVkLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IHNsZWVwLCBhbmQgaXMgYWR2aXNlZCB0bworICogcmVsZWFzZSB0aGUgaHdzcGlubG9jayBhcyBzb29uIGFzIHBvc3NpYmxlLiBUaGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvCisgKiBtaW5pbWl6ZSByZW1vdGUgY29yZXMgcG9sbGluZyBvbiB0aGUgaGFyZHdhcmUgaW50ZXJjb25uZWN0LgorICoKKyAqIFRoZSB1c2VyIGRlY2lkZXMgd2hldGhlciBsb2NhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvciBub3QsIGFuZCBpZiB5ZXMsCisgKiB3aGV0aGVyIGhlIHdhbnRzIHRoZWlyIHByZXZpb3VzIHN0YXRlIHRvIGJlIHNhdmVkLiBJdCBpcyB1cCB0byB0aGUgdXNlcgorICogdG8gY2hvb3NlIHRoZSBhcHByb3ByaWF0ZSBAbW9kZSBvZiBvcGVyYXRpb24sIGV4YWN0bHkgdGhlIHNhbWUgd2F5IHVzZXJzCisgKiBzaG91bGQgZGVjaWRlIGJldHdlZW4gc3Bpbl90cnlsb2NrLCBzcGluX3RyeWxvY2tfaXJxIGFuZAorICogc3Bpbl90cnlsb2NrX2lycXNhdmUuCisgKgorICogUmV0dXJucyAwIGlmIHdlIHN1Y2Nlc3NmdWxseSBsb2NrZWQgdGhlIGh3c3BpbmxvY2sgb3IgLUVCVVNZIGlmCisgKiB0aGUgaHdzcGlubG9jayB3YXMgYWxyZWFkeSB0YWtlbi4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciBzbGVlcC4KKyAqLworaW50IF9faHdzcGluX3RyeWxvY2soc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaywgaW50IG1vZGUsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCWludCByZXQ7CisKKwlCVUdfT04oIWh3bG9jayk7CisJQlVHX09OKCFmbGFncyAmJiBtb2RlID09IEhXTE9DS19JUlFTVEFURSk7CisKKwkvKgorCSAqIFRoaXMgc3Bpbl9sb2Nre19pcnEsIF9pcnFzYXZlfSBzZXJ2ZXMgdGhyZWUgcHVycG9zZXM6CisJICoKKwkgKiAxLiBEaXNhYmxlIHByZWVtcHRpb24sIGluIG9yZGVyIHRvIG1pbmltaXplIHRoZSBwZXJpb2Qgb2YgdGltZQorCSAqICAgIGluIHdoaWNoIHRoZSBod3NwaW5sb2NrIGlzIHRha2VuLiBUaGlzIGlzIGltcG9ydGFudCBpbiBvcmRlcgorCSAqICAgIHRvIG1pbmltaXplIHRoZSBwb3NzaWJsZSBwb2xsaW5nIG9uIHRoZSBoYXJkd2FyZSBpbnRlcmNvbm5lY3QKKwkgKiAgICBieSBhIHJlbW90ZSB1c2VyIG9mIHRoaXMgbG9jay4KKwkgKiAyLiBNYWtlIHRoZSBod3NwaW5sb2NrIFNNUC1zYWZlIChzbyB3ZSBjYW4gdGFrZSBpdCBmcm9tCisJICogICAgYWRkaXRpb25hbCBjb250ZXh0cyBvbiB0aGUgbG9jYWwgaG9zdCkuCisJICogMy4gRW5zdXJlIHRoYXQgaW5fYXRvbWljL21pZ2h0X3NsZWVwIGNoZWNrcyBjYXRjaCBwb3RlbnRpYWwKKwkgKiAgICBwcm9ibGVtcyB3aXRoIGh3c3BpbmxvY2sgdXNhZ2UgKGUuZy4gc2NoZWR1bGVyIGNoZWNrcyBsaWtlCisJICogICAgJ3NjaGVkdWxpbmcgd2hpbGUgYXRvbWljJyBldGMuKQorCSAqLworCWlmIChtb2RlID09IEhXTE9DS19JUlFTVEFURSkKKwkJcmV0ID0gc3Bpbl90cnlsb2NrX2lycXNhdmUoJmh3bG9jay0+bG9jaywgKmZsYWdzKTsKKwllbHNlIGlmIChtb2RlID09IEhXTE9DS19JUlEpCisJCXJldCA9IHNwaW5fdHJ5bG9ja19pcnEoJmh3bG9jay0+bG9jayk7CisJZWxzZQorCQlyZXQgPSBzcGluX3RyeWxvY2soJmh3bG9jay0+bG9jayk7CisKKwkvKiBpcyBsb2NrIGFscmVhZHkgdGFrZW4gYnkgYW5vdGhlciBjb250ZXh0IG9uIHRoZSBsb2NhbCBjcHUgPyAqLworCWlmICghcmV0KQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogdHJ5IHRvIHRha2UgdGhlIGh3c3BpbmxvY2sgZGV2aWNlICovCisJcmV0ID0gaHdsb2NrLT5vcHMtPnRyeWxvY2soaHdsb2NrKTsKKworCS8qIGlmIGh3bG9jayBpcyBhbHJlYWR5IHRha2VuLCB1bmRvIHNwaW5fdHJ5bG9ja18qIGFuZCBleGl0ICovCisJaWYgKCFyZXQpIHsKKwkJaWYgKG1vZGUgPT0gSFdMT0NLX0lSUVNUQVRFKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdsb2NrLT5sb2NrLCAqZmxhZ3MpOworCQllbHNlIGlmIChtb2RlID09IEhXTE9DS19JUlEpCisJCQlzcGluX3VubG9ja19pcnEoJmh3bG9jay0+bG9jayk7CisJCWVsc2UKKwkJCXNwaW5fdW5sb2NrKCZod2xvY2stPmxvY2spOworCisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyoKKwkgKiBXZSBjYW4gYmUgc3VyZSB0aGUgb3RoZXIgY29yZSdzIG1lbW9yeSBvcGVyYXRpb25zCisJICogYXJlIG9ic2VydmFibGUgdG8gdXMgb25seSBfYWZ0ZXJfIHdlIHN1Y2Nlc3NmdWxseSB0YWtlCisJICogdGhlIGh3c3BpbmxvY2ssIGFuZCB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHN1YnNlcXVlbnQgbWVtb3J5CisJICogb3BlcmF0aW9ucyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSB3aWxsIG5vdCBiZSByZW9yZGVyZWQgYmVmb3JlCisJICogd2UgYWN0dWFsbHkgdG9vayB0aGUgaHdzcGlubG9jay4KKwkgKgorCSAqIE5vdGU6IHRoZSBpbXBsaWNpdCBtZW1vcnkgYmFycmllciBvZiB0aGUgc3BpbmxvY2sgYWJvdmUgaXMgdG9vCisJICogZWFybHksIHNvIHdlIG5lZWQgdGhpcyBhZGRpdGlvbmFsIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVyLgorCSAqLworCW1iKCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9faHdzcGluX3RyeWxvY2spOworCisvKioKKyAqIF9faHdzcGluX2xvY2tfdGltZW91dCgpIC0gbG9jayBhbiBod3NwaW5sb2NrIHdpdGggdGltZW91dCBsaW1pdAorICogQGh3bG9jazogdGhlIGh3c3BpbmxvY2sgdG8gYmUgbG9ja2VkCisgKiBAdGltZW91dDogdGltZW91dCB2YWx1ZSBpbiBtc2VjcworICogQG1vZGU6IG1vZGUgd2hpY2ggY29udHJvbHMgd2hldGhlciBsb2NhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvciBub3QKKyAqIEBmbGFnczogYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBjYWxsZXIncyBpbnRlcnJ1cHQgc3RhdGUgd2lsbCBiZSBzYXZlZCBhdCAoaWYKKyAqICAgICAgICAgcmVxdWVzdGVkKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgdGhlIGdpdmVuIEBod2xvY2suIElmIHRoZSBAaHdsb2NrCisgKiBpcyBhbHJlYWR5IHRha2VuLCB0aGUgZnVuY3Rpb24gd2lsbCBidXN5IGxvb3Agd2FpdGluZyBmb3IgaXQgdG8KKyAqIGJlIHJlbGVhc2VkLCBidXQgZ2l2ZSB1cCBhZnRlciBAdGltZW91dCBtc2VjcyBoYXZlIGVsYXBzZWQuCisgKgorICogVXBvbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZAorICogKGFuZCBwb3NzaWJseSBsb2NhbCBpbnRlcnJ1cHRzLCB0b28pLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IHNsZWVwLAorICogYW5kIGlzIGFkdmlzZWQgdG8gcmVsZWFzZSB0aGUgaHdzcGlubG9jayBhcyBzb29uIGFzIHBvc3NpYmxlLgorICogVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBtaW5pbWl6ZSByZW1vdGUgY29yZXMgcG9sbGluZyBvbiB0aGUKKyAqIGhhcmR3YXJlIGludGVyY29ubmVjdC4KKyAqCisgKiBUaGUgdXNlciBkZWNpZGVzIHdoZXRoZXIgbG9jYWwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgb3Igbm90LCBhbmQgaWYgeWVzLAorICogd2hldGhlciBoZSB3YW50cyB0aGVpciBwcmV2aW91cyBzdGF0ZSB0byBiZSBzYXZlZC4gSXQgaXMgdXAgdG8gdGhlIHVzZXIKKyAqIHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUgQG1vZGUgb2Ygb3BlcmF0aW9uLCBleGFjdGx5IHRoZSBzYW1lIHdheSB1c2VycworICogc2hvdWxkIGRlY2lkZSBiZXR3ZWVuIHNwaW5fbG9jaywgc3Bpbl9sb2NrX2lycSBhbmQgc3Bpbl9sb2NrX2lycXNhdmUuCisgKgorICogUmV0dXJucyAwIHdoZW4gdGhlIEBod2xvY2sgd2FzIHN1Y2Nlc3NmdWxseSB0YWtlbiwgYW5kIGFuIGFwcHJvcHJpYXRlCisgKiBlcnJvciBjb2RlIG90aGVyd2lzZSAobW9zdCBub3RhYmx5IC1FVElNRURPVVQgaWYgdGhlIEBod2xvY2sgaXMgc3RpbGwKKyAqIGJ1c3kgYWZ0ZXIgQHRpbWVvdXQgbXNlY3MpLiBUaGUgZnVuY3Rpb24gd2lsbCBuZXZlciBzbGVlcC4KKyAqLworaW50IF9faHdzcGluX2xvY2tfdGltZW91dChzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLCB1bnNpZ25lZCBpbnQgdG8sCisJCQkJCWludCBtb2RlLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZXhwaXJlOworCisJZXhwaXJlID0gbXNlY3NfdG9famlmZmllcyh0bykgKyBqaWZmaWVzOworCisJZm9yICg7OykgeworCQkvKiBUcnkgdG8gdGFrZSB0aGUgaHdzcGlubG9jayAqLworCQlyZXQgPSBfX2h3c3Bpbl90cnlsb2NrKGh3bG9jaywgbW9kZSwgZmxhZ3MpOworCQlpZiAocmV0ICE9IC1FQlVTWSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFRoZSBsb2NrIGlzIGFscmVhZHkgdGFrZW4sIGxldCdzIGNoZWNrIGlmIHRoZSB1c2VyIHdhbnRzCisJCSAqIHVzIHRvIHRyeSBhZ2FpbgorCQkgKi8KKwkJaWYgKHRpbWVfaXNfYmVmb3JlX2VxX2ppZmZpZXMoZXhwaXJlKSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCisJCS8qCisJCSAqIEFsbG93IHBsYXRmb3JtLXNwZWNpZmljIHJlbGF4IGhhbmRsZXJzIHRvIHByZXZlbnQKKwkJICogaG9nZ2luZyB0aGUgaW50ZXJjb25uZWN0IChubyBzbGVlcGluZywgdGhvdWdoKQorCQkgKi8KKwkJaWYgKGh3bG9jay0+b3BzLT5yZWxheCkKKwkJCWh3bG9jay0+b3BzLT5yZWxheChod2xvY2spOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2h3c3Bpbl9sb2NrX3RpbWVvdXQpOworCisvKioKKyAqIF9faHdzcGluX3VubG9jaygpIC0gdW5sb2NrIGEgc3BlY2lmaWMgaHdzcGlubG9jaworICogQGh3bG9jazogYSBwcmV2aW91c2x5LWFjcXVpcmVkIGh3c3BpbmxvY2sgd2hpY2ggd2Ugd2FudCB0byB1bmxvY2sKKyAqIEBtb2RlOiBjb250cm9scyB3aGV0aGVyIGxvY2FsIGludGVycnVwdHMgbmVlZHMgdG8gYmUgcmVzdG9yZWQgb3Igbm90CisgKiBAZmxhZ3M6IHByZXZpb3VzIGNhbGxlcidzIGludGVycnVwdCBzdGF0ZSB0byByZXN0b3JlIChpZiByZXF1ZXN0ZWQpCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHVubG9jayBhIHNwZWNpZmljIGh3c3BpbmxvY2ssIGVuYWJsZSBwcmVlbXB0aW9uIGFuZAorICogKHBvc3NpYmx5KSBlbmFibGUgaW50ZXJydXB0cyBvciByZXN0b3JlIHRoZWlyIHByZXZpb3VzIHN0YXRlLgorICogQGh3bG9jayBtdXN0IGJlIGFscmVhZHkgbG9ja2VkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb246IGl0IGlzIGEgYnVnCisgKiB0byBjYWxsIHVubG9jayBvbiBhIEBod2xvY2sgdGhhdCBpcyBhbHJlYWR5IHVubG9ja2VkLgorICoKKyAqIFRoZSB1c2VyIGRlY2lkZXMgd2hldGhlciBsb2NhbCBpbnRlcnJ1cHRzIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdCwgYW5kCisgKiBpZiB5ZXMsIHdoZXRoZXIgaGUgd2FudHMgdGhlaXIgcHJldmlvdXMgc3RhdGUgdG8gYmUgcmVzdG9yZWQuIEl0IGlzIHVwCisgKiB0byB0aGUgdXNlciB0byBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlIEBtb2RlIG9mIG9wZXJhdGlvbiwgZXhhY3RseSB0aGUKKyAqIHNhbWUgd2F5IHVzZXJzIGRlY2lkZSBiZXR3ZWVuIHNwaW5fdW5sb2NrLCBzcGluX3VubG9ja19pcnEgYW5kCisgKiBzcGluX3VubG9ja19pcnFyZXN0b3JlLgorICoKKyAqIFRoZSBmdW5jdGlvbiB3aWxsIG5ldmVyIHNsZWVwLgorICovCit2b2lkIF9faHdzcGluX3VubG9jayhzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLCBpbnQgbW9kZSwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJQlVHX09OKCFod2xvY2spOworCUJVR19PTighZmxhZ3MgJiYgbW9kZSA9PSBIV0xPQ0tfSVJRU1RBVEUpOworCisJLyoKKwkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IG1lbW9yeSBvcGVyYXRpb25zIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpLAorCSAqIGRvbmUgYmVmb3JlIHVubG9ja2luZyB0aGUgaHdzcGlubG9jaywgd2lsbCBub3QgYmUgcmVvcmRlcmVkCisJICogYWZ0ZXIgdGhlIGxvY2sgaXMgcmVsZWFzZWQuCisJICoKKwkgKiBUaGF0J3MgdGhlIHB1cnBvc2Ugb2YgdGhpcyBleHBsaWNpdCBtZW1vcnkgYmFycmllci4KKwkgKgorCSAqIE5vdGU6IHRoZSBtZW1vcnkgYmFycmllciBpbmR1Y2VkIGJ5IHRoZSBzcGluX3VubG9jayBiZWxvdyBpcyB0b28KKwkgKiBsYXRlOyB0aGUgb3RoZXIgY29yZSBpcyBnb2luZyB0byBhY2Nlc3MgbWVtb3J5IHNvb24gYWZ0ZXIgaXQgd2lsbAorCSAqIHRha2UgdGhlIGh3c3BpbmxvY2ssIGFuZCBieSB0aGVuIHdlIHdhbnQgdG8gYmUgc3VyZSBvdXIgbWVtb3J5CisJICogb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBvYnNlcnZhYmxlLgorCSAqLworCW1iKCk7CisKKwlod2xvY2stPm9wcy0+dW5sb2NrKGh3bG9jayk7CisKKwkvKiBVbmRvIHRoZSBzcGluX3RyeWxvY2t7X2lycSwgX2lycXNhdmV9IGNhbGxlZCB3aGlsZSBsb2NraW5nICovCisJaWYgKG1vZGUgPT0gSFdMT0NLX0lSUVNUQVRFKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2xvY2stPmxvY2ssICpmbGFncyk7CisJZWxzZSBpZiAobW9kZSA9PSBIV0xPQ0tfSVJRKQorCQlzcGluX3VubG9ja19pcnEoJmh3bG9jay0+bG9jayk7CisJZWxzZQorCQlzcGluX3VubG9jaygmaHdsb2NrLT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9faHdzcGluX3VubG9jayk7CisKKy8qKgorICogaHdzcGluX2xvY2tfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IGh3IHNwaW5sb2NrCisgKiBAaHdsb2NrOiBod3NwaW5sb2NrIHRvIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtLXNwZWNpZmljCisgKiBpbXBsZW1lbnRhdGlvbiwgdG8gcmVnaXN0ZXIgYSBuZXcgaHdzcGlubG9jayBpbnN0YW5jZS4KKyAqCisgKiBDYW4gYmUgY2FsbGVkIGZyb20gYW4gYXRvbWljIGNvbnRleHQgKHdpbGwgbm90IHNsZWVwKSBidXQgbm90IGZyb20KKyAqIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK2ludCBod3NwaW5fbG9ja19yZWdpc3RlcihzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKQoreworCXN0cnVjdCBod3NwaW5sb2NrICp0bXA7CisJaW50IHJldDsKKworCWlmICghaHdsb2NrIHx8ICFod2xvY2stPm9wcyB8fAorCQkhaHdsb2NrLT5vcHMtPnRyeWxvY2sgfHwgIWh3bG9jay0+b3BzLT51bmxvY2spIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmaHdsb2NrLT5sb2NrKTsKKworCXNwaW5fbG9jaygmaHdzcGlubG9ja190cmVlX2xvY2spOworCisJcmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoJmh3c3BpbmxvY2tfdHJlZSwgaHdsb2NrLT5pZCwgaHdsb2NrKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIG1hcmsgdGhpcyBod3NwaW5sb2NrIGFzIGF2YWlsYWJsZSAqLworCXRtcCA9IHJhZGl4X3RyZWVfdGFnX3NldCgmaHdzcGlubG9ja190cmVlLCBod2xvY2stPmlkLAorCQkJCQkJCUhXU1BJTkxPQ0tfVU5VU0VEKTsKKworCS8qIHNlbGYtc2FuaXR5IGNoZWNrIHdoaWNoIHNob3VsZCBuZXZlciBmYWlsICovCisJV0FSTl9PTih0bXAgIT0gaHdsb2NrKTsKKworb3V0OgorCXNwaW5fdW5sb2NrKCZod3NwaW5sb2NrX3RyZWVfbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGh3c3Bpbl9sb2NrX3JlZ2lzdGVyKTsKKworLyoqCisgKiBod3NwaW5fbG9ja191bnJlZ2lzdGVyKCkgLSB1bnJlZ2lzdGVyIGFuIGh3IHNwaW5sb2NrCisgKiBAaWQ6IGluZGV4IG9mIHRoZSBzcGVjaWZpYyBod3NwaW5sb2NrIHRvIHVucmVnaXN0ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybS1zcGVjaWZpYworICogaW1wbGVtZW50YXRpb24sIHRvIHVucmVnaXN0ZXIgYW4gZXhpc3RpbmcgKGFuZCB1bnVzZWQpIGh3c3BpbmxvY2suCisgKgorICogQ2FuIGJlIGNhbGxlZCBmcm9tIGFuIGF0b21pYyBjb250ZXh0ICh3aWxsIG5vdCBzbGVlcCkgYnV0IG5vdCBmcm9tCisgKiB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiBod3NwaW5sb2NrIEBpZCBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RydWN0IGh3c3BpbmxvY2sgKmh3c3Bpbl9sb2NrX3VucmVnaXN0ZXIodW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBod3NwaW5sb2NrICpod2xvY2sgPSBOVUxMOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJmh3c3BpbmxvY2tfdHJlZV9sb2NrKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgaHdzcGlubG9jayBpcyBub3QgaW4gdXNlICh0YWcgaXMgc2V0KSAqLworCXJldCA9IHJhZGl4X3RyZWVfdGFnX2dldCgmaHdzcGlubG9ja190cmVlLCBpZCwgSFdTUElOTE9DS19VTlVTRUQpOworCWlmIChyZXQgPT0gMCkgeworCQlwcl9lcnIoImh3c3BpbmxvY2sgJWQgc3RpbGwgaW4gdXNlIChvciBub3QgcHJlc2VudClcbiIsIGlkKTsKKwkJZ290byBvdXQ7CisJfQorCisJaHdsb2NrID0gcmFkaXhfdHJlZV9kZWxldGUoJmh3c3BpbmxvY2tfdHJlZSwgaWQpOworCWlmICghaHdsb2NrKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGRlbGV0ZSBod3NwaW5sb2NrICVkXG4iLCBpZCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrKCZod3NwaW5sb2NrX3RyZWVfbG9jayk7CisJcmV0dXJuIGh3bG9jazsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGh3c3Bpbl9sb2NrX3VucmVnaXN0ZXIpOworCisvKioKKyAqIF9faHdzcGluX2xvY2tfcmVxdWVzdCgpIC0gdGFnIGFuIGh3c3BpbmxvY2sgYXMgdXNlZCBhbmQgcG93ZXIgaXQgdXAKKyAqCisgKiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIHRoYXQgcHJlcGFyZXMgYW4gaHdzcGlubG9jayBpbnN0YW5jZQorICogYmVmb3JlIGl0IGlzIGdpdmVuIHRvIHRoZSB1c2VyLiBUaGUgZnVuY3Rpb24gYXNzdW1lcyB0aGF0CisgKiBod3NwaW5sb2NrX3RyZWVfbG9jayBpcyB0YWtlbi4KKyAqCisgKiBSZXR1cm5zIDAgb3IgcG9zaXRpdmUgdG8gaW5kaWNhdGUgc3VjY2VzcywgYW5kIGEgbmVnYXRpdmUgdmFsdWUgdG8KKyAqIGluZGljYXRlIGFuIGVycm9yICh3aXRoIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlKQorICovCitzdGF0aWMgaW50IF9faHdzcGluX2xvY2tfcmVxdWVzdChzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKQoreworCXN0cnVjdCBod3NwaW5sb2NrICp0bXA7CisJaW50IHJldDsKKworCS8qIHByZXZlbnQgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIHJlbW92ZWQgKi8KKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGh3bG9jay0+b3duZXIpKSB7CisJCWRldl9lcnIoaHdsb2NrLT5kZXYsICIlczogY2FuJ3QgZ2V0IG93bmVyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIG5vdGlmeSBQTSBjb3JlIHRoYXQgcG93ZXIgaXMgbm93IG5lZWRlZCAqLworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoaHdsb2NrLT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaHdsb2NrLT5kZXYsICIlczogY2FuJ3QgcG93ZXIgb24gZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogbWFyayBod3NwaW5sb2NrIGFzIHVzZWQsIHNob3VsZCBub3QgZmFpbCAqLworCXRtcCA9IHJhZGl4X3RyZWVfdGFnX2NsZWFyKCZod3NwaW5sb2NrX3RyZWUsIGh3bG9jay0+aWQsCisJCQkJCQkJSFdTUElOTE9DS19VTlVTRUQpOworCisJLyogc2VsZi1zYW5pdHkgY2hlY2sgdGhhdCBzaG91bGQgbmV2ZXIgZmFpbCAqLworCVdBUk5fT04odG1wICE9IGh3bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGh3c3Bpbl9sb2NrX2dldF9pZCgpIC0gcmV0cmlldmUgaWQgbnVtYmVyIG9mIGEgZ2l2ZW4gaHdzcGlubG9jaworICogQGh3bG9jazogYSB2YWxpZCBod3NwaW5sb2NrIGluc3RhbmNlCisgKgorICogUmV0dXJucyB0aGUgaWQgbnVtYmVyIG9mIGEgZ2l2ZW4gQGh3bG9jaywgb3IgLUVJTlZBTCBpZiBAaHdsb2NrIGlzIGludmFsaWQuCisgKi8KK2ludCBod3NwaW5fbG9ja19nZXRfaWQoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaykKK3sKKwlpZiAoIWh3bG9jaykgeworCQlwcl9lcnIoImludmFsaWQgaHdsb2NrXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGh3bG9jay0+aWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChod3NwaW5fbG9ja19nZXRfaWQpOworCisvKioKKyAqIGh3c3Bpbl9sb2NrX3JlcXVlc3QoKSAtIHJlcXVlc3QgYW4gaHdzcGlubG9jaworICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBieSB1c2VycyBvZiB0aGUgaHdzcGlubG9jayBkZXZpY2UsCisgKiBpbiBvcmRlciB0byBkeW5hbWljYWxseSBhc3NpZ24gdGhlbSBhbiB1bnVzZWQgaHdzcGlubG9jay4KKyAqIFVzdWFsbHkgdGhlIHVzZXIgb2YgdGhpcyBsb2NrIHdpbGwgdGhlbiBoYXZlIHRvIGNvbW11bmljYXRlIHRoZSBsb2NrJ3MgaWQKKyAqIHRvIHRoZSByZW1vdGUgY29yZSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiAodG8gZ2V0IHRoZQorICogaWQgb2YgYSBnaXZlbiBod2xvY2ssIHVzZSBod3NwaW5fbG9ja19nZXRfaWQoKSkuCisgKgorICogQ2FuIGJlIGNhbGxlZCBmcm9tIGFuIGF0b21pYyBjb250ZXh0ICh3aWxsIG5vdCBzbGVlcCkgYnV0IG5vdCBmcm9tCisgKiB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQgKHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHVzZSBjYXNlIGZvcgorICogdGhhdCB5ZXQpLgorICoKKyAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFzc2lnbmVkIGh3c3BpbmxvY2ssIG9yIE5VTEwgb24gZXJyb3IKKyAqLworc3RydWN0IGh3c3BpbmxvY2sgKmh3c3Bpbl9sb2NrX3JlcXVlc3Qodm9pZCkKK3sKKwlzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJmh3c3BpbmxvY2tfdHJlZV9sb2NrKTsKKworCS8qIGxvb2sgZm9yIGFuIHVudXNlZCBsb2NrICovCisJcmV0ID0gcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF90YWcoJmh3c3BpbmxvY2tfdHJlZSwgKHZvaWQgKiopJmh3bG9jaywKKwkJCQkJCTAsIDEsIEhXU1BJTkxPQ0tfVU5VU0VEKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcHJfd2FybigiYSBmcmVlIGh3c3BpbmxvY2sgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCWh3bG9jayA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHNhbml0eSBjaGVjayB0aGF0IHNob3VsZCBuZXZlciBmYWlsICovCisJV0FSTl9PTihyZXQgPiAxKTsKKworCS8qIG1hcmsgYXMgdXNlZCBhbmQgcG93ZXIgdXAgKi8KKwlyZXQgPSBfX2h3c3Bpbl9sb2NrX3JlcXVlc3QoaHdsb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJaHdsb2NrID0gTlVMTDsKKworb3V0OgorCXNwaW5fdW5sb2NrKCZod3NwaW5sb2NrX3RyZWVfbG9jayk7CisJcmV0dXJuIGh3bG9jazsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGh3c3Bpbl9sb2NrX3JlcXVlc3QpOworCisvKioKKyAqIGh3c3Bpbl9sb2NrX3JlcXVlc3Rfc3BlY2lmaWMoKSAtIHJlcXVlc3QgZm9yIGEgc3BlY2lmaWMgaHdzcGlubG9jaworICogQGlkOiBpbmRleCBvZiB0aGUgc3BlY2lmaWMgaHdzcGlubG9jayB0aGF0IGlzIHJlcXVlc3RlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBieSB1c2VycyBvZiB0aGUgaHdzcGlubG9jayBtb2R1bGUsCisgKiBpbiBvcmRlciB0byBhc3NpZ24gdGhlbSBhIHNwZWNpZmljIGh3c3BpbmxvY2suCisgKiBVc3VhbGx5IGVhcmx5IGJvYXJkIGNvZGUgd2lsbCBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaW4gb3JkZXIgdG8KKyAqIHJlc2VydmUgc3BlY2lmaWMgaHdzcGlubG9jayBpZHMgZm9yIHByZWRlZmluZWQgcHVycG9zZXMuCisgKgorICogQ2FuIGJlIGNhbGxlZCBmcm9tIGFuIGF0b21pYyBjb250ZXh0ICh3aWxsIG5vdCBzbGVlcCkgYnV0IG5vdCBmcm9tCisgKiB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQgKHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHVzZSBjYXNlIGZvcgorICogdGhhdCB5ZXQpLgorICoKKyAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFzc2lnbmVkIGh3c3BpbmxvY2ssIG9yIE5VTEwgb24gZXJyb3IKKyAqLworc3RydWN0IGh3c3BpbmxvY2sgKmh3c3Bpbl9sb2NrX3JlcXVlc3Rfc3BlY2lmaWModW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBod3NwaW5sb2NrICpod2xvY2s7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmaHdzcGlubG9ja190cmVlX2xvY2spOworCisJLyogbWFrZSBzdXJlIHRoaXMgaHdzcGlubG9jayBleGlzdHMgKi8KKwlod2xvY2sgPSByYWRpeF90cmVlX2xvb2t1cCgmaHdzcGlubG9ja190cmVlLCBpZCk7CisJaWYgKCFod2xvY2spIHsKKwkJcHJfd2FybigiaHdzcGlubG9jayAldSBkb2VzIG5vdCBleGlzdFxuIiwgaWQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2sgKHRoaXMgc2hvdWxkbid0IGhhcHBlbikgKi8KKwlXQVJOX09OKGh3bG9jay0+aWQgIT0gaWQpOworCisJLyogbWFrZSBzdXJlIHRoaXMgaHdzcGlubG9jayBpcyB1bnVzZWQgKi8KKwlyZXQgPSByYWRpeF90cmVlX3RhZ19nZXQoJmh3c3BpbmxvY2tfdHJlZSwgaWQsIEhXU1BJTkxPQ0tfVU5VU0VEKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcHJfd2FybigiaHdzcGlubG9jayAldSBpcyBhbHJlYWR5IGluIHVzZVxuIiwgaWQpOworCQlod2xvY2sgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBtYXJrIGFzIHVzZWQgYW5kIHBvd2VyIHVwICovCisJcmV0ID0gX19od3NwaW5fbG9ja19yZXF1ZXN0KGh3bG9jayk7CisJaWYgKHJldCA8IDApCisJCWh3bG9jayA9IE5VTEw7CisKK291dDoKKwlzcGluX3VubG9jaygmaHdzcGlubG9ja190cmVlX2xvY2spOworCXJldHVybiBod2xvY2s7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChod3NwaW5fbG9ja19yZXF1ZXN0X3NwZWNpZmljKTsKKworLyoqCisgKiBod3NwaW5fbG9ja19mcmVlKCkgLSBmcmVlIGEgc3BlY2lmaWMgaHdzcGlubG9jaworICogQGh3bG9jazogdGhlIHNwZWNpZmljIGh3c3BpbmxvY2sgdG8gZnJlZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFyayBAaHdsb2NrIGFzIGZyZWUgYWdhaW4uCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBhbiBAaHdsb2NrIHRoYXQgd2FzIHJldHJpZXZlZCBmcm9tCisgKiBhbiBlYXJsaWVyIGNhbGwgdG8gb21hcF9od3NwaW5fbG9ja19yZXF1ZXN0e19zcGVjaWZpY30uCisgKgorICogQ2FuIGJlIGNhbGxlZCBmcm9tIGFuIGF0b21pYyBjb250ZXh0ICh3aWxsIG5vdCBzbGVlcCkgYnV0IG5vdCBmcm9tCisgKiB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQgKHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHVzZSBjYXNlIGZvcgorICogdGhhdCB5ZXQpLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworaW50IGh3c3Bpbl9sb2NrX2ZyZWUoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaykKK3sKKwlzdHJ1Y3QgaHdzcGlubG9jayAqdG1wOworCWludCByZXQ7CisKKwlpZiAoIWh3bG9jaykgeworCQlwcl9lcnIoImludmFsaWQgaHdsb2NrXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrKCZod3NwaW5sb2NrX3RyZWVfbG9jayk7CisKKwkvKiBtYWtlIHN1cmUgdGhlIGh3c3BpbmxvY2sgaXMgdXNlZCAqLworCXJldCA9IHJhZGl4X3RyZWVfdGFnX2dldCgmaHdzcGlubG9ja190cmVlLCBod2xvY2stPmlkLAorCQkJCQkJCUhXU1BJTkxPQ0tfVU5VU0VEKTsKKwlpZiAocmV0ID09IDEpIHsKKwkJZGV2X2Vycihod2xvY2stPmRldiwgIiVzOiBod2xvY2sgaXMgYWxyZWFkeSBmcmVlXG4iLCBfX2Z1bmNfXyk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbm90aWZ5IHRoZSB1bmRlcmx5aW5nIGRldmljZSB0aGF0IHBvd2VyIGlzIG5vdCBuZWVkZWQgKi8KKwlyZXQgPSBwbV9ydW50aW1lX3B1dChod2xvY2stPmRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogbWFyayB0aGlzIGh3c3BpbmxvY2sgYXMgYXZhaWxhYmxlICovCisJdG1wID0gcmFkaXhfdHJlZV90YWdfc2V0KCZod3NwaW5sb2NrX3RyZWUsIGh3bG9jay0+aWQsCisJCQkJCQkJSFdTUElOTE9DS19VTlVTRUQpOworCisJLyogc2FuaXR5IGNoZWNrICh0aGlzIHNob3VsZG4ndCBoYXBwZW4pICovCisJV0FSTl9PTih0bXAgIT0gaHdsb2NrKTsKKworCW1vZHVsZV9wdXQoaHdsb2NrLT5vd25lcik7CisKK291dDoKKwlzcGluX3VubG9jaygmaHdzcGlubG9ja190cmVlX2xvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChod3NwaW5fbG9ja19mcmVlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJIYXJkd2FyZSBzcGlubG9jayBpbnRlcmZhY2UiKTsKK01PRFVMRV9BVVRIT1IoIk9oYWQgQmVuLUNvaGVuIDxvaGFkQHdpemVyeS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3c3BpbmxvY2svaHdzcGlubG9ja19pbnRlcm5hbC5oIGIvZHJpdmVycy9od3NwaW5sb2NrL2h3c3BpbmxvY2tfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTkzNWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od3NwaW5sb2NrL2h3c3BpbmxvY2tfaW50ZXJuYWwuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogSGFyZHdhcmUgc3BpbmxvY2tzIGludGVybmFsIGhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQorICoKKyAqIENvbnRhY3Q6IE9oYWQgQmVuLUNvaGVuIDxvaGFkQHdpemVyeS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19IV1NQSU5MT0NLX0hXU1BJTkxPQ0tfSAorI2RlZmluZSBfX0hXU1BJTkxPQ0tfSFdTUElOTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisvKioKKyAqIHN0cnVjdCBod3NwaW5sb2NrX29wcyAtIHBsYXRmb3JtLXNwZWNpZmljIGh3c3BpbmxvY2sgaGFuZGxlcnMKKyAqCisgKiBAdHJ5bG9jazogbWFrZSBhIHNpbmdsZSBhdHRlbXB0IHRvIHRha2UgdGhlIGxvY2suIHJldHVybnMgMCBvbgorICoJICAgICBmYWlsdXJlIGFuZCB0cnVlIG9uIHN1Y2Nlc3MuIG1heSBfbm90XyBzbGVlcC4KKyAqIEB1bmxvY2s6ICByZWxlYXNlIHRoZSBsb2NrLiBhbHdheXMgc3VjY2VlZC4gbWF5IF9ub3RfIHNsZWVwLgorICogQHJlbGF4OiAgIG9wdGlvbmFsLCBwbGF0Zm9ybS1zcGVjaWZpYyByZWxheCBoYW5kbGVyLCBjYWxsZWQgYnkgaHdzcGlubG9jaworICoJICAgICBjb3JlIHdoaWxlIHNwaW5uaW5nIG9uIGEgbG9jaywgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZQorICoJICAgICBpbnZvY2F0aW9ucyBvZiBAdHJ5bG9jay4gbWF5IF9ub3RfIHNsZWVwLgorICovCitzdHJ1Y3QgaHdzcGlubG9ja19vcHMgeworCWludCAoKnRyeWxvY2spKHN0cnVjdCBod3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqdW5sb2NrKShzdHJ1Y3QgaHdzcGlubG9jayAqbG9jayk7CisJdm9pZCAoKnJlbGF4KShzdHJ1Y3QgaHdzcGlubG9jayAqbG9jayk7Cit9OworCisvKioKKyAqIHN0cnVjdCBod3NwaW5sb2NrIC0gdGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyBhIHNpbmdsZSBod3NwaW5sb2NrIGluc3RhbmNlCisgKgorICogQGRldjogdW5kZXJseWluZyBkZXZpY2UsIHdpbGwgYmUgdXNlZCB0byBpbnZva2UgcnVudGltZSBQTSBhcGkKKyAqIEBvcHM6IHBsYXRmb3JtLXNwZWNpZmljIGh3c3BpbmxvY2sgaGFuZGxlcnMKKyAqIEBpZDogYSBnbG9iYWwsIHVuaXF1ZSwgc3lzdGVtLXdpZGUsIGluZGV4IG9mIHRoZSBsb2NrLgorICogQGxvY2s6IGluaXRpYWxpemVkIGFuZCB1c2VkIGJ5IGh3c3BpbmxvY2sgY29yZQorICogQG93bmVyOiB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIG1vZHVsZSwgdXNlZCB0byBtYWludGFpbiBtb2R1bGUgcmVmIGNvdW50CisgKgorICogTm90ZTogY3VycmVudGx5IHNpbXBsaWNpdHkgd2FzIG9wdGVkIGZvciwgYnV0IGxhdGVyIHdlIGNhbiBzcXVlZXplIHNvbWUKKyAqIG1lbW9yeSBieXRlcyBieSBncm91cGluZyB0aGUgZGV2LCBvcHMgYW5kIG93bmVyIG1lbWJlcnMgaW4gYSBzaW5nbGUKKyAqIHBlci1wbGF0Zm9ybSBzdHJ1Y3QsIGFuZCBoYXZlIGFsbCBod3NwaW5sb2NrcyBwb2ludCBhdCBpdC4KKyAqLworc3RydWN0IGh3c3BpbmxvY2sgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwljb25zdCBzdHJ1Y3QgaHdzcGlubG9ja19vcHMgKm9wczsKKwlpbnQgaWQ7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworI2VuZGlmIC8qIF9fSFdTUElOTE9DS19IV1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdzcGlubG9jay9vbWFwX2h3c3BpbmxvY2suYyBiL2RyaXZlcnMvaHdzcGlubG9jay9vbWFwX2h3c3BpbmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYwMjczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od3NwaW5sb2NrL29tYXBfaHdzcGlubG9jay5jCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogT01BUCBoYXJkd2FyZSBzcGlubG9jayBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20KKyAqCisgKiBDb250YWN0OiBTaW1vbiBRdWUgPHNxdWVAdGkuY29tPgorICogICAgICAgICAgSGFyaSBLYW5pZ2VyaSA8aC1rYW5pZ2VyaTJAdGkuY29tPgorICogICAgICAgICAgT2hhZCBCZW4tQ29oZW4gPG9oYWRAd2l6ZXJ5LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaHdzcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAiaHdzcGlubG9ja19pbnRlcm5hbC5oIgorCisvKiBTcGlubG9jayByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFNZU1NUQVRVU19PRkZTRVQJCTB4MDAxNAorI2RlZmluZSBMT0NLX0JBU0VfT0ZGU0VUCQkweDA4MDAKKworI2RlZmluZSBTUElOTE9DS19OVU1MT0NLU19CSVRfT0ZGU0VUCSgyNCkKKworLyogUG9zc2libGUgdmFsdWVzIG9mIFNQSU5MT0NLX0xPQ0tfUkVHICovCisjZGVmaW5lIFNQSU5MT0NLX05PVFRBS0VOCQkoMCkJLyogZnJlZSAqLworI2RlZmluZSBTUElOTE9DS19UQUtFTgkJCSgxKQkvKiBsb2NrZWQgKi8KKworI2RlZmluZSB0b19vbWFwX2h3c3BpbmxvY2sobG9jaykJXAorCWNvbnRhaW5lcl9vZihsb2NrLCBzdHJ1Y3Qgb21hcF9od3NwaW5sb2NrLCBsb2NrKQorCitzdHJ1Y3Qgb21hcF9od3NwaW5sb2NrIHsKKwlzdHJ1Y3QgaHdzcGlubG9jayBsb2NrOworCXZvaWQgX19pb21lbSAqYWRkcjsKK307CisKK3N0cnVjdCBvbWFwX2h3c3BpbmxvY2tfc3RhdGUgeworCWludCBudW1fbG9ja3M7CQkJLyogVG90YWwgbnVtYmVyIG9mIGxvY2tzIGluIHN5c3RlbSAqLworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsJCS8qIE1hcHBlZCBiYXNlIGFkZHJlc3MgKi8KK307CisKK3N0YXRpYyBpbnQgb21hcF9od3NwaW5sb2NrX3RyeWxvY2soc3RydWN0IGh3c3BpbmxvY2sgKmxvY2spCit7CisJc3RydWN0IG9tYXBfaHdzcGlubG9jayAqb21hcF9sb2NrID0gdG9fb21hcF9od3NwaW5sb2NrKGxvY2spOworCisJLyogYXR0ZW1wdCB0byBhY3F1aXJlIHRoZSBsb2NrIGJ5IHJlYWRpbmcgaXRzIHZhbHVlICovCisJcmV0dXJuIChTUElOTE9DS19OT1RUQUtFTiA9PSByZWFkbChvbWFwX2xvY2stPmFkZHIpKTsKK30KKworc3RhdGljIHZvaWQgb21hcF9od3NwaW5sb2NrX3VubG9jayhzdHJ1Y3QgaHdzcGlubG9jayAqbG9jaykKK3sKKwlzdHJ1Y3Qgb21hcF9od3NwaW5sb2NrICpvbWFwX2xvY2sgPSB0b19vbWFwX2h3c3BpbmxvY2sobG9jayk7CisKKwkvKiByZWxlYXNlIHRoZSBsb2NrIGJ5IHdyaXRpbmcgMCB0byBpdCAqLworCXdyaXRlbChTUElOTE9DS19OT1RUQUtFTiwgb21hcF9sb2NrLT5hZGRyKTsKK30KKworLyoKKyAqIHJlbGF4IHRoZSBPTUFQIGludGVyY29ubmVjdCB3aGlsZSBzcGlubmluZyBvbiBpdC4KKyAqCisgKiBUaGUgc3BlY3MgcmVjb21tZW5kZWQgdGhhdCB0aGUgcmV0cnkgZGVsYXkgdGltZSB3aWxsIGJlCisgKiBqdXN0IG92ZXIgaGFsZiBvZiB0aGUgdGltZSB0aGF0IGEgcmVxdWVzdGVyIHdvdWxkIGJlCisgKiBleHBlY3RlZCB0byBob2xkIHRoZSBsb2NrLgorICoKKyAqIFRoZSBudW1iZXIgYmVsb3cgaXMgdGFrZW4gZnJvbSBhbiBoYXJkd2FyZSBzcGVjcyBleGFtcGxlLAorICogb2J2aW91c2x5IGl0IGlzIHNvbWV3aGF0IGFyYml0cmFyeS4KKyAqLworc3RhdGljIHZvaWQgb21hcF9od3NwaW5sb2NrX3JlbGF4KHN0cnVjdCBod3NwaW5sb2NrICpsb2NrKQoreworCW5kZWxheSg1MCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdzcGlubG9ja19vcHMgb21hcF9od3NwaW5sb2NrX29wcyA9IHsKKwkudHJ5bG9jayA9IG9tYXBfaHdzcGlubG9ja190cnlsb2NrLAorCS51bmxvY2sgPSBvbWFwX2h3c3BpbmxvY2tfdW5sb2NrLAorCS5yZWxheCA9IG9tYXBfaHdzcGlubG9ja19yZWxheCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBfaHdzcGlubG9ja19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwX2h3c3BpbmxvY2sgKm9tYXBfbG9jazsKKwlzdHJ1Y3Qgb21hcF9od3NwaW5sb2NrX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgaHdzcGlubG9jayAqbG9jazsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CisJaW50IGksIHJldDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PREVWOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFpb19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9zdGF0ZTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGxvY2tzICovCisJaSA9IHJlYWRsKGlvX2Jhc2UgKyBTWVNTVEFUVVNfT0ZGU0VUKTsKKwlpID4+PSBTUElOTE9DS19OVU1MT0NLU19CSVRfT0ZGU0VUOworCisJLyogb25lIG9mIHRoZSBmb3VyIGxzYidzIG11c3QgYmUgc2V0LCBhbmQgbm90aGluZyBlbHNlICovCisJaWYgKGh3ZWlnaHRfbG9uZyhpICYgMHhmKSAhPSAxIHx8IGkgPiA4KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gaW91bm1hcF9iYXNlOworCX0KKworCXN0YXRlLT5udW1fbG9ja3MgPSBpICogMzI7CisJc3RhdGUtPmlvX2Jhc2UgPSBpb19iYXNlOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc3RhdGUpOworCisJLyoKKwkgKiBydW50aW1lIFBNIHdpbGwgbWFrZSBzdXJlIHRoZSBjbG9jayBvZiB0aGlzIG1vZHVsZSBpcworCSAqIGVuYWJsZWQgaWZmIGF0IGxlYXN0IG9uZSBsb2NrIGlzIHJlcXVlc3RlZAorCSAqLworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fbG9ja3M7IGkrKykgeworCQlvbWFwX2xvY2sgPSBremFsbG9jKHNpemVvZigqb21hcF9sb2NrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghb21hcF9sb2NrKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX2xvY2tzOworCQl9CisKKwkJb21hcF9sb2NrLT5sb2NrLmRldiA9ICZwZGV2LT5kZXY7CisJCW9tYXBfbG9jay0+bG9jay5vd25lciA9IFRISVNfTU9EVUxFOworCQlvbWFwX2xvY2stPmxvY2suaWQgPSBpOworCQlvbWFwX2xvY2stPmxvY2sub3BzID0gJm9tYXBfaHdzcGlubG9ja19vcHM7CisJCW9tYXBfbG9jay0+YWRkciA9IGlvX2Jhc2UgKyBMT0NLX0JBU0VfT0ZGU0VUICsgc2l6ZW9mKHUzMikgKiBpOworCisJCXJldCA9IGh3c3Bpbl9sb2NrX3JlZ2lzdGVyKCZvbWFwX2xvY2stPmxvY2spOworCQlpZiAocmV0KSB7CisJCQlrZnJlZShvbWFwX2xvY2spOworCQkJZ290byBmcmVlX2xvY2tzOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2ZyZWVfbG9ja3M6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCWxvY2sgPSBod3NwaW5fbG9ja191bnJlZ2lzdGVyKGkpOworCQkvKiB0aGlzIHNob3VsZCd0IGhhcHBlbiwgYnV0IGxldCdzIGdpdmUgb3VyIGJlc3QgZWZmb3J0ICovCisJCWlmICghbG9jaykgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IGNsZWFudXBzIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJY29udGludWU7CisJCX0KKwkJb21hcF9sb2NrID0gdG9fb21hcF9od3NwaW5sb2NrKGxvY2spOworCQlrZnJlZShvbWFwX2xvY2spOworCX0KKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Citpb3VubWFwX2Jhc2U6CisJaW91bm1hcChpb19iYXNlKTsKK2ZyZWVfc3RhdGU6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9od3NwaW5sb2NrX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwX2h3c3BpbmxvY2tfc3RhdGUgKnN0YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGh3c3BpbmxvY2sgKmxvY2s7CisJc3RydWN0IG9tYXBfaHdzcGlubG9jayAqb21hcF9sb2NrOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fbG9ja3M7IGkrKykgeworCQlsb2NrID0gaHdzcGluX2xvY2tfdW5yZWdpc3RlcihpKTsKKwkJLyogdGhpcyBzaG91bGRuJ3QgaGFwcGVuIGF0IHRoaXMgcG9pbnQuIGlmIGl0IGRvZXMsIGF0IGxlYXN0CisJCSAqIGRvbid0IGNvbnRpbnVlIHdpdGggdGhlIHJlbW92ZSAqLworCQlpZiAoIWxvY2spIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBmYWlsZWQgb24gJWRcbiIsIF9fZnVuY19fLCBpKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlvbWFwX2xvY2sgPSB0b19vbWFwX2h3c3BpbmxvY2sobG9jayk7CisJCWtmcmVlKG9tYXBfbG9jayk7CisJfQorCisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCWlvdW5tYXAoc3RhdGUtPmlvX2Jhc2UpOworCWtmcmVlKHN0YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2h3c3BpbmxvY2tfZHJpdmVyID0geworCS5wcm9iZQkJPSBvbWFwX2h3c3BpbmxvY2tfcHJvYmUsCisJLnJlbW92ZQkJPSBvbWFwX2h3c3BpbmxvY2tfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJvbWFwX2h3c3BpbmxvY2siLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2h3c3BpbmxvY2tfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfaHdzcGlubG9ja19kcml2ZXIpOworfQorLyogYm9hcmQgaW5pdCBjb2RlIG1pZ2h0IG5lZWQgdG8gcmVzZXJ2ZSBod3NwaW5sb2NrcyBmb3IgcHJlZGVmaW5lZCBwdXJwb3NlcyAqLworcG9zdGNvcmVfaW5pdGNhbGwob21hcF9od3NwaW5sb2NrX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcF9od3NwaW5sb2NrX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9od3NwaW5sb2NrX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChvbWFwX2h3c3BpbmxvY2tfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSGFyZHdhcmUgc3BpbmxvY2sgZHJpdmVyIGZvciBPTUFQIik7CitNT0RVTEVfQVVUSE9SKCJTaW1vbiBRdWUgPHNxdWVAdGkuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSGFyaSBLYW5pZ2VyaSA8aC1rYW5pZ2VyaTJAdGkuY29tPiIpOworTU9EVUxFX0FVVEhPUigiT2hhZCBCZW4tQ29oZW4gPG9oYWRAd2l6ZXJ5LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvTWFrZWZpbGUKaW5kZXggMjNhYzYxZS4uYmVlZTZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvTWFrZWZpbGUKQEAgLTEwLDMgKzEwLDQgQEAKIG9iai15CQkJCSs9IGFsZ29zLyBidXNzZXMvIG11eGVzLwogCiBjY2ZsYWdzLSQoQ09ORklHX0kyQ19ERUJVR19DT1JFKSA6PSAtRERFQlVHCitDRkxBR1NfaTJjLWNvcmUubyA6PSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDIzMDYwMWUuLjMyNjY1MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC05OCw4ICs5OCw5IEBACiAJICAgIEVQODA1NzkgKFRvbGFwYWkpCiAJICAgIElDSDEwCiAJICAgIDUvMzQwMCBTZXJpZXMgKFBDSCkKLQkgICAgQ291Z2FyIFBvaW50IChQQ0gpCisJICAgIDYgU2VyaWVzIChQQ0gpCiAJICAgIFBhdHNidXJnIChQQ0gpCisJICAgIERIODl4eENDIChQQ0gpCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1pODAxLgpAQCAtNTQ2LDE1ICs1NDcsMTggQEAKIAogY29uZmlnIEkyQ19QWEEKIAl0cmlzdGF0ZSAiSW50ZWwgUFhBMlhYIEkyQyBhZGFwdGVyIgotCWRlcGVuZHMgb24gQVJDSF9QWEEgfHwgQVJDSF9NTVAKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBIHx8IEFSQ0hfTU1QIHx8IChYODZfMzIgJiYgUENJICYmIE9GKQogCWhlbHAKIAkgIElmIHlvdSBoYXZlIGRldmljZXMgaW4gdGhlIFBYQSBJMkMgYnVzLCBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLgogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXB4YS4KIAorY29uZmlnIEkyQ19QWEFfUENJCisJZGVmX2Jvb2wgSTJDX1BYQSAmJiBYODZfMzIgJiYgUENJICYmIE9GCisKIGNvbmZpZyBJMkNfUFhBX1NMQVZFCiAJYm9vbCAiSW50ZWwgUFhBMlhYIEkyQyBTbGF2ZSBjb21tcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSTJDX1BYQQorCWRlcGVuZHMgb24gSTJDX1BYQSAmJiAhWDg2XzMyCiAJaGVscAogCSAgU3VwcG9ydCBJMkMgc2xhdmUgbW9kZSBjb21tdW5pY2F0aW9ucyBvbiB0aGUgUFhBIEkyQyBidXMuICBUaGlzCiAJICBpcyBuZWNlc3NhcnkgZm9yIHN5c3RlbXMgd2hlcmUgdGhlIFBYQSBtYXkgYmUgYSB0YXJnZXQgb24gdGhlCkBAIC02NjcsMTUgKzY3MSwyOCBAQAogCSAgd2lsbCBiZSBjYWxsZWQgeGlsaW54X2kyYy4KIAogY29uZmlnIEkyQ19FRzIwVAotICAgICAgICB0cmlzdGF0ZSAiUENIIEkyQyBvZiBJbnRlbCBFRzIwVCIKLSAgICAgICAgZGVwZW5kcyBvbiBQQ0kKLSAgICAgICAgaGVscAotICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0goUGxhdGZvcm0gY29udHJvbGxlciBIdWIpIEkyQyBvZiBFRzIwVCB3aGljaAotICAgICAgICAgIGlzIGFuIElPSChJbnB1dC9PdXRwdXQgSHViKSBmb3IgeDg2IGVtYmVkZGVkIHByb2Nlc3Nvci4KLSAgICAgICAgICBUaGlzIGRyaXZlciBjYW4gYWNjZXNzIFBDSCBJMkMgYnVzIGRldmljZS4KKwl0cmlzdGF0ZSAiSW50ZWwgRUcyMFQgUENIL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0giCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIGRyaXZlciBpcyBmb3IgUENIKFBsYXRmb3JtIGNvbnRyb2xsZXIgSHViKSBJMkMgb2YgRUcyMFQgd2hpY2gKKwkgIGlzIGFuIElPSChJbnB1dC9PdXRwdXQgSHViKSBmb3IgeDg2IGVtYmVkZGVkIHByb2Nlc3Nvci4KKwkgIFRoaXMgZHJpdmVyIGNhbiBhY2Nlc3MgUENIIEkyQyBidXMgZGV2aWNlLgorCisJICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBNTDcyMTMsIGEgY29tcGFuaW9uIGNoaXAgZm9yIHRoZQorCSAgQXRvbSBFNnh4IHNlcmllcyBhbmQgY29tcGF0aWJsZSB3aXRoIHRoZSBJbnRlbCBFRzIwVCBQQ0guCiAKIGNvbW1lbnQgIkV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMiCiAKK2NvbmZpZyBJMkNfRElPTEFOX1UyQworCXRyaXN0YXRlICJEaW9sYW4gVTJDLTEyIFVTQiBhZGFwdGVyIgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgRGlvbGFuCisJICBVMkMtMTIsIGEgVVNCIHRvIEkyQyBpbnRlcmZhY2UuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1kaW9sYW4tdTJjLgorCiBjb25maWcgSTJDX1BBUlBPUlQKIAl0cmlzdGF0ZSAiUGFyYWxsZWwgcG9ydCBhZGFwdGVyIgogCWRlcGVuZHMgb24gUEFSUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDM4NzhjOTU5Li5lNmNmMjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCkBAIC01NCw2ICs1NCw3IEBACiBvYmotJChDT05GSUdfSTJDX1BOWCkJCSs9IGkyYy1wbngubwogb2JqLSQoQ09ORklHX0kyQ19QVVYzKQkJKz0gaTJjLXB1djMubwogb2JqLSQoQ09ORklHX0kyQ19QWEEpCQkrPSBpMmMtcHhhLm8KK29iai0kKENPTkZJR19JMkNfUFhBX1BDSSkJKz0gaTJjLXB4YS1wY2kubwogb2JqLSQoQ09ORklHX0kyQ19TM0MyNDEwKQkrPSBpMmMtczNjMjQxMC5vCiBvYmotJChDT05GSUdfSTJDX1M2MDAwKQkJKz0gaTJjLXM2MDAwLm8KIG9iai0kKENPTkZJR19JMkNfU0g3NzYwKQkrPSBpMmMtc2g3NzYwLm8KQEAgLTY3LDYgKzY4LDcgQEAKIG9iai0kKENPTkZJR19JMkNfRUcyMFQpICAgICAgICAgKz0gaTJjLWVnMjB0Lm8KIAogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCitvYmotJChDT05GSUdfSTJDX0RJT0xBTl9VMkMpCSs9IGkyYy1kaW9sYW4tdTJjLm8KIG9iai0kKENPTkZJR19JMkNfUEFSUE9SVCkJKz0gaTJjLXBhcnBvcnQubwogb2JqLSQoQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUKQkrPSBpMmMtcGFycG9ydC1saWdodC5vCiBvYmotJChDT05GSUdfSTJDX1RBT1NfRVZNKQkrPSBpMmMtdGFvcy1ldm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kaW9sYW4tdTJjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRpb2xhbi11MmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjM2NjcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kaW9sYW4tdTJjLmMKQEAgLTAsMCArMSw1MzUgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBEaW9sYW4gdTJjLTEyIFVTQi1JMkMgYWRhcHRlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIEVyaWNzc29uIEFCCisgKgorICogRGVyaXZlZCBmcm9tOgorICogIGkyYy10aW55LXVzYi5jCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgVGlsbCBIYXJiYXVtIChUaWxsQEhhcmJhdW0ub3JnKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FCQkiaTJjLWRpb2xhbi11MmMiCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ESU9MQU4JCTB4MGFiZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0RJT0xBTl9VMkMJMHgzMzcwCisKKyNkZWZpbmUgRElPTEFOX09VVF9FUAkJMHgwMgorI2RlZmluZSBESU9MQU5fSU5fRVAJCTB4ODQKKworLyogY29tbWFuZHMgdmlhIFVTQiwgbXVzdCBtYXRjaCBjb21tYW5kIGlkcyBpbiB0aGUgZmlybXdhcmUgKi8KKyNkZWZpbmUgQ01EX0kyQ19SRUFECQkweDAxCisjZGVmaW5lIENNRF9JMkNfV1JJVEUJCTB4MDIKKyNkZWZpbmUgQ01EX0kyQ19TQ0FOCQkweDAzCS8qIFJldHVybnMgbGlzdCBvZiBkZXRlY3RlZCBkZXZpY2VzICovCisjZGVmaW5lIENNRF9JMkNfUkVMRUFTRV9TREEJMHgwNAorI2RlZmluZSBDTURfSTJDX1JFTEVBU0VfU0NMCTB4MDUKKyNkZWZpbmUgQ01EX0kyQ19EUk9QX1NEQQkweDA2CisjZGVmaW5lIENNRF9JMkNfRFJPUF9TQ0wJMHgwNworI2RlZmluZSBDTURfSTJDX1JFQURfU0RBCTB4MDgKKyNkZWZpbmUgQ01EX0kyQ19SRUFEX1NDTAkweDA5CisjZGVmaW5lIENNRF9HRVRfRldfVkVSU0lPTgkweDBhCisjZGVmaW5lIENNRF9HRVRfU0VSSUFMCQkweDBiCisjZGVmaW5lIENNRF9JMkNfU1RBUlQJCTB4MGMKKyNkZWZpbmUgQ01EX0kyQ19TVE9QCQkweDBkCisjZGVmaW5lIENNRF9JMkNfUkVQRUFURURfU1RBUlQJMHgwZQorI2RlZmluZSBDTURfSTJDX1BVVF9CWVRFCTB4MGYKKyNkZWZpbmUgQ01EX0kyQ19HRVRfQllURQkweDEwCisjZGVmaW5lIENNRF9JMkNfUFVUX0FDSwkJMHgxMQorI2RlZmluZSBDTURfSTJDX0dFVF9BQ0sJCTB4MTIKKyNkZWZpbmUgQ01EX0kyQ19QVVRfQllURV9BQ0sJMHgxMworI2RlZmluZSBDTURfSTJDX0dFVF9CWVRFX0FDSwkweDE0CisjZGVmaW5lIENNRF9JMkNfU0VUX1NQRUVECTB4MWIKKyNkZWZpbmUgQ01EX0kyQ19HRVRfU1BFRUQJMHgxYworI2RlZmluZSBDTURfSTJDX1NFVF9DTEtfU1lOQwkweDI0CisjZGVmaW5lIENNRF9JMkNfR0VUX0NMS19TWU5DCTB4MjUKKyNkZWZpbmUgQ01EX0kyQ19TRVRfQ0xLX1NZTkNfVE8JMHgyNgorI2RlZmluZSBDTURfSTJDX0dFVF9DTEtfU1lOQ19UTwkweDI3CisKKyNkZWZpbmUgUkVTUF9PSwkJCTB4MDAKKyNkZWZpbmUgUkVTUF9GQUlMRUQJCTB4MDEKKyNkZWZpbmUgUkVTUF9CQURfTUVNQUREUgkweDA0CisjZGVmaW5lIFJFU1BfREFUQV9FUlIJCTB4MDUKKyNkZWZpbmUgUkVTUF9OT1RfSU1QTEVNRU5URUQJMHgwNgorI2RlZmluZSBSRVNQX05BQ0sJCTB4MDcKKyNkZWZpbmUgUkVTUF9USU1FT1VUCQkweDA5CisKKyNkZWZpbmUgVTJDX0kyQ19TUEVFRF9GQVNUCTAJLyogNDAwIGtIeiAqLworI2RlZmluZSBVMkNfSTJDX1NQRUVEX1NURAkxCS8qIDEwMCBrSHogKi8KKyNkZWZpbmUgVTJDX0kyQ19TUEVFRF8yS0haCTI0MgkvKiAyIGtIeiwgbWluaW11bSBzcGVlZCAqLworI2RlZmluZSBVMkNfSTJDX1NQRUVEKGYpCSgoRElWX1JPVU5EX1VQKDEwMDAwMDAsIChmKSkgLSAxMCkgLyAyICsgMSkKKworI2RlZmluZSBVMkNfSTJDX0ZSRVFfRkFTVAk0MDAwMDAKKyNkZWZpbmUgVTJDX0kyQ19GUkVRX1NURAkxMDAwMDAKKyNkZWZpbmUgVTJDX0kyQ19GUkVRKHMpCQkoMTAwMDAwMCAvICgyICogKHMgLSAxKSArIDEwKSkKKworI2RlZmluZSBESU9MQU5fVVNCX1RJTUVPVVQJMTAwCS8qIGluIG1zICovCisjZGVmaW5lIERJT0xBTl9TWU5DX1RJTUVPVVQJMjAJLyogaW4gbXMgKi8KKworI2RlZmluZSBESU9MQU5fT1VUQlVGX0xFTgkxMjgKKyNkZWZpbmUgRElPTEFOX0ZMVVNIX0xFTgkoRElPTEFOX09VVEJVRl9MRU4gLSA0KQorI2RlZmluZSBESU9MQU5fSU5CVUZfTEVOCTI1NgkvKiBNYXhpbXVtIHN1cHBvcnRlZCByZWNlaXZlIGxlbmd0aCAqLworCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IGkyY19kaW9sYW5fdTJjIHsKKwl1OCBvYnVmZmVyW0RJT0xBTl9PVVRCVUZfTEVOXTsJLyogb3V0cHV0IGJ1ZmZlciAqLworCXU4IGlidWZmZXJbRElPTEFOX0lOQlVGX0xFTl07CS8qIGlucHV0IGJ1ZmZlciAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwkvKiB0aGUgdXNiIGRldmljZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOy8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXB0ZXI7CS8qIGkyYyByZWxhdGVkIHRoaW5ncyAqLworCWludCBvbGVuOwkJCS8qIE91dHB1dCBidWZmZXIgbGVuZ3RoICovCisJaW50IG9jb3VudDsJCQkvKiBOdW1iZXIgb2YgZW5xdWV1ZWQgbWVzc2FnZXMgKi8KK307CisKK3N0YXRpYyB1aW50IGZyZXF1ZW5jeSA9IFUyQ19JMkNfRlJFUV9TVEQ7CS8qIEkyQyBjbG9jayBmcmVxdWVuY3kgaW4gSHogKi8KKworbW9kdWxlX3BhcmFtKGZyZXF1ZW5jeSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhmcmVxdWVuY3ksICJJMkMgY2xvY2sgZnJlcXVlbmN5IGluIGhlcnR6Iik7CisKKy8qIHVzYiBsYXllciAqLworCisvKiBTZW5kIGNvbW1hbmQgdG8gZGV2aWNlLCBhbmQgZ2V0IHJlc3BvbnNlLiAqLworc3RhdGljIGludCBkaW9sYW5fdXNiX3RyYW5zZmVyKHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2KQoreworCWludCByZXQgPSAwOworCWludCBhY3R1YWw7CisJaW50IGk7CisKKwlpZiAoIWRldi0+b2xlbiB8fCAhZGV2LT5vY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gdXNiX2J1bGtfbXNnKGRldi0+dXNiX2RldiwKKwkJCSAgIHVzYl9zbmRidWxrcGlwZShkZXYtPnVzYl9kZXYsIERJT0xBTl9PVVRfRVApLAorCQkJICAgZGV2LT5vYnVmZmVyLCBkZXYtPm9sZW4sICZhY3R1YWwsCisJCQkgICBESU9MQU5fVVNCX1RJTUVPVVQpOworCWlmICghcmV0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm9jb3VudDsgaSsrKSB7CisJCQlpbnQgdG1wcmV0OworCisJCQl0bXByZXQgPSB1c2JfYnVsa19tc2coZGV2LT51c2JfZGV2LAorCQkJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51c2JfZGV2LAorCQkJCQkJCSAgICAgIERJT0xBTl9JTl9FUCksCisJCQkJCSAgICAgIGRldi0+aWJ1ZmZlciwKKwkJCQkJICAgICAgc2l6ZW9mKGRldi0+aWJ1ZmZlciksICZhY3R1YWwsCisJCQkJCSAgICAgIERJT0xBTl9VU0JfVElNRU9VVCk7CisJCQkvKgorCQkJICogU3RvcCBjb21tYW5kIHByb2Nlc3NpbmcgaWYgYSBwcmV2aW91cyBjb21tYW5kCisJCQkgKiByZXR1cm5lZCBhbiBlcnJvci4KKwkJCSAqIE5vdGUgdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIHJldHJpZXZlIGFsbCBtZXNzYWdlcy4KKwkJCSAqLworCQkJaWYgKHJldCA8IDApCisJCQkJY29udGludWU7CisJCQlyZXQgPSB0bXByZXQ7CisJCQlpZiAocmV0ID09IDAgJiYgYWN0dWFsID4gMCkgeworCQkJCXN3aXRjaCAoZGV2LT5pYnVmZmVyW2FjdHVhbCAtIDFdKSB7CisJCQkJY2FzZSBSRVNQX05BQ0s6CisJCQkJCS8qCisJCQkJCSAqIFJldHVybiBFTlhJTyBpZiBOQUNLIHdhcyByZWNlaXZlZCBhcworCQkJCQkgKiByZXNwb25zZSB0byB0aGUgYWRkcmVzcyBwaGFzZSwKKwkJCQkJICogRUlPIG90aGVyd2lzZQorCQkJCQkgKi8KKwkJCQkJcmV0ID0gaSA9PSAxID8gLUVOWElPIDogLUVJTzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBSRVNQX1RJTUVPVVQ6CisJCQkJCXJldCA9IC1FVElNRURPVVQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUkVTUF9PSzoKKwkJCQkJLyogc3RyaXAgb2ZmIHJldHVybiBjb2RlICovCisJCQkJCXJldCA9IGFjdHVhbCAtIDE7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXJldCA9IC1FSU87CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlkZXYtPm9sZW4gPSAwOworCWRldi0+b2NvdW50ID0gMDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpb2xhbl93cml0ZV9jbWQoc3RydWN0IGkyY19kaW9sYW5fdTJjICpkZXYsIGJvb2wgZmx1c2gpCit7CisJaWYgKGZsdXNoIHx8IGRldi0+b2xlbiA+PSBESU9MQU5fRkxVU0hfTEVOKQorCQlyZXR1cm4gZGlvbGFuX3VzYl90cmFuc2ZlcihkZXYpOworCXJldHVybiAwOworfQorCisvKiBTZW5kIGNvbW1hbmQgKG5vIGRhdGEpICovCitzdGF0aWMgaW50IGRpb2xhbl91c2JfY21kKHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2LCB1OCBjb21tYW5kLCBib29sIGZsdXNoKQoreworCWRldi0+b2J1ZmZlcltkZXYtPm9sZW4rK10gPSBjb21tYW5kOworCWRldi0+b2NvdW50Kys7CisJcmV0dXJuIGRpb2xhbl93cml0ZV9jbWQoZGV2LCBmbHVzaCk7Cit9CisKKy8qIFNlbmQgY29tbWFuZCB3aXRoIG9uZSBieXRlIG9mIGRhdGEgKi8KK3N0YXRpYyBpbnQgZGlvbGFuX3VzYl9jbWRfZGF0YShzdHJ1Y3QgaTJjX2Rpb2xhbl91MmMgKmRldiwgdTggY29tbWFuZCwgdTggZGF0YSwKKwkJCSAgICAgICBib29sIGZsdXNoKQoreworCWRldi0+b2J1ZmZlcltkZXYtPm9sZW4rK10gPSBjb21tYW5kOworCWRldi0+b2J1ZmZlcltkZXYtPm9sZW4rK10gPSBkYXRhOworCWRldi0+b2NvdW50Kys7CisJcmV0dXJuIGRpb2xhbl93cml0ZV9jbWQoZGV2LCBmbHVzaCk7Cit9CisKKy8qIFNlbmQgY29tbWFuZCB3aXRoIHR3byBieXRlcyBvZiBkYXRhICovCitzdGF0aWMgaW50IGRpb2xhbl91c2JfY21kX2RhdGEyKHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2LCB1OCBjb21tYW5kLCB1OCBkMSwKKwkJCQl1OCBkMiwgYm9vbCBmbHVzaCkKK3sKKwlkZXYtPm9idWZmZXJbZGV2LT5vbGVuKytdID0gY29tbWFuZDsKKwlkZXYtPm9idWZmZXJbZGV2LT5vbGVuKytdID0gZDE7CisJZGV2LT5vYnVmZmVyW2Rldi0+b2xlbisrXSA9IGQyOworCWRldi0+b2NvdW50Kys7CisJcmV0dXJuIGRpb2xhbl93cml0ZV9jbWQoZGV2LCBmbHVzaCk7Cit9CisKKy8qCisgKiBGbHVzaCBpbnB1dCBxdWV1ZS4KKyAqIElmIHdlIGRvbid0IGRvIHRoaXMgYXQgc3RhcnR1cCBhbmQgdGhlIGNvbnRyb2xsZXIgaGFzIHF1ZXVlZCB1cAorICogbWVzc2FnZXMgd2hpY2ggd2VyZSBub3QgcmV0cmlldmVkLCBpdCB3aWxsIHN0b3AgcmVzcG9uZGluZworICogYXQgc29tZSBwb2ludC4KKyAqLworc3RhdGljIHZvaWQgZGlvbGFuX2ZsdXNoX2lucHV0KHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJaW50IGFjdHVhbCA9IDA7CisJCWludCByZXQ7CisKKwkJcmV0ID0gdXNiX2J1bGtfbXNnKGRldi0+dXNiX2RldiwKKwkJCQkgICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51c2JfZGV2LCBESU9MQU5fSU5fRVApLAorCQkJCSAgIGRldi0+aWJ1ZmZlciwgc2l6ZW9mKGRldi0+aWJ1ZmZlciksICZhY3R1YWwsCisJCQkJICAgRElPTEFOX1VTQl9USU1FT1VUKTsKKwkJaWYgKHJldCA8IDAgfHwgYWN0dWFsID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gMTApCisJCWRldl9lcnIoJmRldi0+aW50ZXJmYWNlLT5kZXYsICJGYWlsZWQgdG8gZmx1c2ggaW5wdXQgYnVmZmVyXG4iKTsKK30KKworc3RhdGljIGludCBkaW9sYW5faTJjX3N0YXJ0KHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2KQoreworCXJldHVybiBkaW9sYW5fdXNiX2NtZChkZXYsIENNRF9JMkNfU1RBUlQsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBkaW9sYW5faTJjX3JlcGVhdGVkX3N0YXJ0KHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2KQoreworCXJldHVybiBkaW9sYW5fdXNiX2NtZChkZXYsIENNRF9JMkNfUkVQRUFURURfU1RBUlQsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBkaW9sYW5faTJjX3N0b3Aoc3RydWN0IGkyY19kaW9sYW5fdTJjICpkZXYpCit7CisJcmV0dXJuIGRpb2xhbl91c2JfY21kKGRldiwgQ01EX0kyQ19TVE9QLCB0cnVlKTsKK30KKworc3RhdGljIGludCBkaW9sYW5faTJjX2dldF9ieXRlX2FjayhzdHJ1Y3QgaTJjX2Rpb2xhbl91MmMgKmRldiwgYm9vbCBhY2ssCisJCQkJICAgdTggKmJ5dGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGRpb2xhbl91c2JfY21kX2RhdGEoZGV2LCBDTURfSTJDX0dFVF9CWVRFX0FDSywgYWNrLCB0cnVlKTsKKwlpZiAocmV0ID4gMCkKKwkJKmJ5dGUgPSBkZXYtPmlidWZmZXJbMF07CisJZWxzZSBpZiAocmV0ID09IDApCisJCXJldCA9IC1FSU87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpb2xhbl9pMmNfcHV0X2J5dGVfYWNrKHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2LCB1OCBieXRlKQoreworCXJldHVybiBkaW9sYW5fdXNiX2NtZF9kYXRhKGRldiwgQ01EX0kyQ19QVVRfQllURV9BQ0ssIGJ5dGUsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBkaW9sYW5fc2V0X3NwZWVkKHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2LCB1OCBzcGVlZCkKK3sKKwlyZXR1cm4gZGlvbGFuX3VzYl9jbWRfZGF0YShkZXYsIENNRF9JMkNfU0VUX1NQRUVELCBzcGVlZCwgdHJ1ZSk7Cit9CisKKy8qIEVuYWJsZSBvciBkaXNhYmxlIGNsb2NrIHN5bmNocm9uaXphdGlvbiAoc3RyZXRjaGluZykgKi8KK3N0YXRpYyBpbnQgZGlvbGFuX3NldF9jbG9ja19zeW5jaChzdHJ1Y3QgaTJjX2Rpb2xhbl91MmMgKmRldiwgYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIGRpb2xhbl91c2JfY21kX2RhdGEoZGV2LCBDTURfSTJDX1NFVF9DTEtfU1lOQywgZW5hYmxlLCB0cnVlKTsKK30KKworLyogU2V0IGNsb2NrIHN5bmNocm9uaXphdGlvbiB0aW1lb3V0IGluIG1zICovCitzdGF0aWMgaW50IGRpb2xhbl9zZXRfY2xvY2tfc3luY2hfdGltZW91dChzdHJ1Y3QgaTJjX2Rpb2xhbl91MmMgKmRldiwgaW50IG1zKQoreworCWludCB0b192YWwgPSBtcyAqIDEwOworCisJcmV0dXJuIGRpb2xhbl91c2JfY21kX2RhdGEyKGRldiwgQ01EX0kyQ19TRVRfQ0xLX1NZTkNfVE8sCisJCQkJICAgIHRvX3ZhbCAmIDB4ZmYsICh0b192YWwgPj4gOCkgJiAweGZmLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgZGlvbGFuX2Z3X3ZlcnNpb24oc3RydWN0IGkyY19kaW9sYW5fdTJjICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGRpb2xhbl91c2JfY21kKGRldiwgQ01EX0dFVF9GV19WRVJTSU9OLCB0cnVlKTsKKwlpZiAocmV0ID49IDIpCisJCWRldl9pbmZvKCZkZXYtPmludGVyZmFjZS0+ZGV2LAorCQkJICJEaW9sYW4gVTJDIGZpcm13YXJlIHZlcnNpb24gJXUuJXVcbiIsCisJCQkgKHVuc2lnbmVkIGludClkZXYtPmlidWZmZXJbMF0sCisJCQkgKHVuc2lnbmVkIGludClkZXYtPmlidWZmZXJbMV0pOworfQorCitzdGF0aWMgdm9pZCBkaW9sYW5fZ2V0X3NlcmlhbChzdHJ1Y3QgaTJjX2Rpb2xhbl91MmMgKmRldikKK3sKKwlpbnQgcmV0OworCXUzMiBzZXJpYWw7CisKKwlyZXQgPSBkaW9sYW5fdXNiX2NtZChkZXYsIENNRF9HRVRfU0VSSUFMLCB0cnVlKTsKKwlpZiAocmV0ID49IDQpIHsKKwkJc2VyaWFsID0gbGUzMl90b19jcHUoKih1MzIgKilkZXYtPmlidWZmZXIpOworCQlkZXZfaW5mbygmZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJCSAiRGlvbGFuIFUyQyBzZXJpYWwgbnVtYmVyICV1XG4iLCBzZXJpYWwpOworCX0KK30KKworc3RhdGljIGludCBkaW9sYW5faW5pdChzdHJ1Y3QgaTJjX2Rpb2xhbl91MmMgKmRldikKK3sKKwlpbnQgc3BlZWQsIHJldDsKKworCWlmIChmcmVxdWVuY3kgPj0gMjAwMDAwKSB7CisJCXNwZWVkID0gVTJDX0kyQ19TUEVFRF9GQVNUOworCQlmcmVxdWVuY3kgPSBVMkNfSTJDX0ZSRVFfRkFTVDsKKwl9IGVsc2UgaWYgKGZyZXF1ZW5jeSA+PSAxMDAwMDAgfHwgZnJlcXVlbmN5ID09IDApIHsKKwkJc3BlZWQgPSBVMkNfSTJDX1NQRUVEX1NURDsKKwkJZnJlcXVlbmN5ID0gVTJDX0kyQ19GUkVRX1NURDsKKwl9IGVsc2UgeworCQlzcGVlZCA9IFUyQ19JMkNfU1BFRUQoZnJlcXVlbmN5KTsKKwkJaWYgKHNwZWVkID4gVTJDX0kyQ19TUEVFRF8yS0haKQorCQkJc3BlZWQgPSBVMkNfSTJDX1NQRUVEXzJLSFo7CisJCWZyZXF1ZW5jeSA9IFUyQ19JMkNfRlJFUShzcGVlZCk7CisJfQorCisJZGV2X2luZm8oJmRldi0+aW50ZXJmYWNlLT5kZXYsCisJCSAiRGlvbGFuIFUyQyBhdCBVU0IgYnVzICUwM2QgYWRkcmVzcyAlMDNkIHNwZWVkICVkIEh6XG4iLAorCQkgZGV2LT51c2JfZGV2LT5idXMtPmJ1c251bSwgZGV2LT51c2JfZGV2LT5kZXZudW0sIGZyZXF1ZW5jeSk7CisKKwlkaW9sYW5fZmx1c2hfaW5wdXQoZGV2KTsKKwlkaW9sYW5fZndfdmVyc2lvbihkZXYpOworCWRpb2xhbl9nZXRfc2VyaWFsKGRldik7CisKKwkvKiBTZXQgSTJDIHNwZWVkICovCisJcmV0ID0gZGlvbGFuX3NldF9zcGVlZChkZXYsIHNwZWVkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENvbmZpZ3VyZSBJMkMgY2xvY2sgc3luY2hyb25pemF0aW9uICovCisJcmV0ID0gZGlvbGFuX3NldF9jbG9ja19zeW5jaChkZXYsIHNwZWVkICE9IFUyQ19JMkNfU1BFRURfRkFTVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoc3BlZWQgIT0gVTJDX0kyQ19TUEVFRF9GQVNUKQorCQlyZXQgPSBkaW9sYW5fc2V0X2Nsb2NrX3N5bmNoX3RpbWVvdXQoZGV2LCBESU9MQU5fU1lOQ19USU1FT1VUKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGkyYyBsYXllciAqLworCitzdGF0aWMgaW50IGRpb2xhbl91c2JfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLAorCQkJICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgaTJjX2Rpb2xhbl91MmMgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IGkyY19tc2cgKnBtc2c7CisJaW50IGksIGo7CisJaW50IHJldCwgc3JldDsKKworCXJldCA9IGRpb2xhbl9pMmNfc3RhcnQoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlwbXNnID0gJm1zZ3NbaV07CisJCWlmIChpKSB7CisJCQlyZXQgPSBkaW9sYW5faTJjX3JlcGVhdGVkX3N0YXJ0KGRldik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGFib3J0OworCQl9CisJCWlmIChwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQlyZXQgPQorCQkJICAgIGRpb2xhbl9pMmNfcHV0X2J5dGVfYWNrKGRldiwgKHBtc2ctPmFkZHIgPDwgMSkgfCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gYWJvcnQ7CisJCQlmb3IgKGogPSAwOyBqIDwgcG1zZy0+bGVuOyBqKyspIHsKKwkJCQl1OCBieXRlOworCQkJCWJvb2wgYWNrID0gaiA8IHBtc2ctPmxlbiAtIDE7CisKKwkJCQkvKgorCQkJCSAqIERvbid0IHNlbmQgTkFDSyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBieXRlCisJCQkJICogb2YgYSBTTUJVU19CTE9DSyBtZXNzYWdlLgorCQkJCSAqLworCQkJCWlmIChqID09IDAgJiYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkVDVl9MRU4pKQorCQkJCQlhY2sgPSB0cnVlOworCisJCQkJcmV0ID0gZGlvbGFuX2kyY19nZXRfYnl0ZV9hY2soZGV2LCBhY2ssICZieXRlKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJZ290byBhYm9ydDsKKwkJCQkvKgorCQkJCSAqIEFkanVzdCBjb3VudCBpZiBmaXJzdCByZWNlaXZlZCBieXRlIGlzIGxlbmd0aAorCQkJCSAqLworCQkJCWlmIChqID09IDAgJiYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkVDVl9MRU4pKSB7CisJCQkJCWlmIChieXRlID09IDAKKwkJCQkJICAgIHx8IGJ5dGUgPiBJMkNfU01CVVNfQkxPQ0tfTUFYKSB7CisJCQkJCQlyZXQgPSAtRVBST1RPOworCQkJCQkJZ290byBhYm9ydDsKKwkJCQkJfQorCQkJCQlwbXNnLT5sZW4gKz0gYnl0ZTsKKwkJCQl9CisJCQkJcG1zZy0+YnVmW2pdID0gYnl0ZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJldCA9IGRpb2xhbl9pMmNfcHV0X2J5dGVfYWNrKGRldiwgcG1zZy0+YWRkciA8PCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gYWJvcnQ7CisJCQlmb3IgKGogPSAwOyBqIDwgcG1zZy0+bGVuOyBqKyspIHsKKwkJCQlyZXQgPSBkaW9sYW5faTJjX3B1dF9ieXRlX2FjayhkZXYsCisJCQkJCQkJICAgICAgcG1zZy0+YnVmW2pdKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJZ290byBhYm9ydDsKKwkJCX0KKwkJfQorCX0KK2Fib3J0OgorCXNyZXQgPSBkaW9sYW5faTJjX3N0b3AoZGV2KTsKKwlpZiAoc3JldCA8IDAgJiYgcmV0ID49IDApCisJCXJldCA9IHNyZXQ7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybiBsaXN0IG9mIHN1cHBvcnRlZCBmdW5jdGlvbmFsaXR5LgorICovCitzdGF0aWMgdTMyIGRpb2xhbl91c2JfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmEpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUwgfAorCSAgICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19CTE9DS19QUk9DX0NBTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkaW9sYW5fdXNiX2FsZ29yaXRobSA9IHsKKwkubWFzdGVyX3hmZXIgPSBkaW9sYW5fdXNiX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBkaW9sYW5fdXNiX2Z1bmMsCit9OworCisvKiBkZXZpY2UgbGF5ZXIgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRpb2xhbl91MmNfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ESU9MQU4sIFVTQl9ERVZJQ0VfSURfRElPTEFOX1UyQykgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkaW9sYW5fdTJjX3RhYmxlKTsKKworc3RhdGljIHZvaWQgZGlvbGFuX3UyY19mcmVlKHN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2KQoreworCXVzYl9wdXRfZGV2KGRldi0+dXNiX2Rldik7CisJa2ZyZWUoZGV2KTsKK30KKworc3RhdGljIGludCBkaW9sYW5fdTJjX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2OworCWludCByZXQ7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibm8gbWVtb3J5IGZvciBkZXZpY2Ugc3RhdGVcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCWRldi0+dXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisKKwkvKiBzYXZlIG91ciBkYXRhIHBvaW50ZXIgaW4gdGhpcyBpbnRlcmZhY2UgZGV2aWNlICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisKKwkvKiBzZXR1cCBpMmMgYWRhcHRlciBkZXNjcmlwdGlvbiAqLworCWRldi0+YWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOworCWRldi0+YWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKKwlkZXYtPmFkYXB0ZXIuYWxnbyA9ICZkaW9sYW5fdXNiX2FsZ29yaXRobTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmFkYXB0ZXIsIGRldik7CisJc25wcmludGYoZGV2LT5hZGFwdGVyLm5hbWUsIHNpemVvZihkZXYtPmFkYXB0ZXIubmFtZSksCisJCSBEUklWRVJfTkFNRSAiIGF0IGJ1cyAlMDNkIGRldmljZSAlMDNkIiwKKwkJIGRldi0+dXNiX2Rldi0+YnVzLT5idXNudW0sIGRldi0+dXNiX2Rldi0+ZGV2bnVtKTsKKworCWRldi0+YWRhcHRlci5kZXYucGFyZW50ID0gJmRldi0+aW50ZXJmYWNlLT5kZXY7CisKKwkvKiBpbml0aWFsaXplIGRpb2xhbiBpMmMgaW50ZXJmYWNlICovCisJcmV0ID0gZGlvbGFuX2luaXQoZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGFkYXB0ZXJcbiIpOworCQlnb3RvIGVycm9yX2ZyZWU7CisJfQorCisJLyogYW5kIGZpbmFsbHkgYXR0YWNoIHRvIGkyYyBsYXllciAqLworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmZGV2LT5hZGFwdGVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImZhaWxlZCB0byBhZGQgSTJDIGFkYXB0ZXJcbiIpOworCQlnb3RvIGVycm9yX2ZyZWU7CisJfQorCisJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJjb25uZWN0ZWQgIiBEUklWRVJfTkFNRSAiXG4iKTsKKworCXJldHVybiAwOworCitlcnJvcl9mcmVlOgorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwlkaW9sYW5fdTJjX2ZyZWUoZGV2KTsKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRpb2xhbl91MmNfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBpMmNfZGlvbGFuX3UyYyAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmFkYXB0ZXIpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwlkaW9sYW5fdTJjX2ZyZWUoZGV2KTsKKworCWRldl9kYmcoJmludGVyZmFjZS0+ZGV2LCAiZGlzY29ubmVjdGVkXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRpb2xhbl91MmNfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLnByb2JlID0gZGlvbGFuX3UyY19wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGRpb2xhbl91MmNfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkaW9sYW5fdTJjX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGlvbGFuX3UyY19pbml0KHZvaWQpCit7CisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmRpb2xhbl91MmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRpb2xhbl91MmNfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZkaW9sYW5fdTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRpb2xhbl91MmNfaW5pdCk7Cittb2R1bGVfZXhpdChkaW9sYW5fdTJjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfTkFNRSAiIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lZzIwdC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lZzIwdC5jCmluZGV4IDUwZWExZjQuLjg3OGExMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWcyMHQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVnMjB0LmMKQEAgLTEzMiw2ICsxMzIsMTMgQEAKICNkZWZpbmUgcGNoX3BjaV9kYmcocGRldiwgZm10LCBhcmcuLi4pICBcCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXMgOiIgZm10LCBfX2Z1bmNfXywgIyNhcmcpCiAKKy8qCitTZXQgdGhlIG51bWJlciBvZiBJMkMgaW5zdGFuY2UgbWF4CitJbnRlbCBFRzIwVCBQQ0ggOgkJMWNoCitPS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IIDoJMmNoCisqLworI2RlZmluZSBQQ0hfSTJDX01BWF9ERVYJCQkyCisKIC8qKgogICogc3RydWN0IGkyY19hbGdvX3BjaF9kYXRhIC0gZm9yIEkyQyBkcml2ZXIgZnVuY3Rpb25hbGl0aWVzCiAgKiBAcGNoX2FkYXB0ZXI6CQlzdG9yZXMgdGhlIHJlZmVyZW5jZSB0byBpMmNfYWRhcHRlciBzdHJ1Y3R1cmUKQEAgLTE1NiwxMiArMTYzLDE0IEBACiAgKiBAcGNoX2RhdGE6CQlzdG9yZXMgYSBsaXN0IG9mIGkyY19hbGdvX3BjaF9kYXRhCiAgKiBAcGNoX2kyY19zdXNwZW5kZWQ6CXNwZWNpZmllcyB3aGV0aGVyIHRoZSBzeXN0ZW0gaXMgc3VzcGVuZGVkIG9yIG5vdAogICoJCQlwZXJoYXBzIHdpdGggbW9yZSBsaW5lcyBhbmQgd29yZHMuCisgKiBAY2hfbnVtOgkJc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgaTJjIGluc3RhbmNlCiAgKgogICogcGNoX2RhdGEgaGFzIGFzIG1hbnkgZWxlbWVudHMgYXMgbWF4aW11bSBJMkMgY2hhbm5lbHMKICAqLwogc3RydWN0IGFkYXB0ZXJfaW5mbyB7Ci0Jc3RydWN0IGkyY19hbGdvX3BjaF9kYXRhIHBjaF9kYXRhOworCXN0cnVjdCBpMmNfYWxnb19wY2hfZGF0YSBwY2hfZGF0YVtQQ0hfSTJDX01BWF9ERVZdOwogCWJvb2wgcGNoX2kyY19zdXNwZW5kZWQ7CisJaW50IGNoX251bTsKIH07CiAKIApAQCAtMTcwLDggKzE3OSwxMyBAQAogc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IHBjaF9ldmVudDsKIHN0YXRpYyBERUZJTkVfTVVURVgocGNoX211dGV4KTsKIAorLyogRGVmaW5pdGlvbiBmb3IgTUw3MjEzIGJ5IE9LSSBTRU1JQ09ORFVDVE9SICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUk9ITQkJMHgxMERCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUw3MjEzX0kyQwkweDgwMkQKKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgcGNoX3BjaWRldl9pZFtdID0gewotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfUENIX0kyQyl9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIFBDSV9ERVZJQ0VfSURfUENIX0kyQyksICAgMSwgfSwKKwl7IFBDSV9WREVWSUNFKFJPSE0sIFBDSV9ERVZJQ0VfSURfTUw3MjEzX0kyQyksIDIsIH0sCiAJezAsfQogfTsKIApAQCAtMjEyLDggKzIyNiw3IEBACiAJLyogSW5pdGlhbGl6ZSBJMkMgcmVnaXN0ZXJzICovCiAJaW93cml0ZTMyKDB4MjEsIHAgKyBQQ0hfSTJDTkYpOwogCi0JcGNoX3NldGJpdChhZGFwLT5wY2hfYmFzZV9hZGRyZXNzLCBQQ0hfSTJDQ1RMLAotCQkJICBQQ0hfSTJDQ1RMX0kyQ01FTik7CisJcGNoX3NldGJpdChhZGFwLT5wY2hfYmFzZV9hZGRyZXNzLCBQQ0hfSTJDQ1RMLCBQQ0hfSTJDQ1RMX0kyQ01FTik7CiAKIAlpZiAocGNoX2kyY19zcGVlZCAhPSA0MDApCiAJCXBjaF9pMmNfc3BlZWQgPSAxMDA7CkBAIC0yNTUsNyArMjY4LDcgQEAKICAqIEB0aW1lb3V0Ogl3YWl0aW5nIHRpbWUgY291bnRlciAodXMpLgogICovCiBzdGF0aWMgczMyIHBjaF9pMmNfd2FpdF9mb3JfYnVzX2lkbGUoc3RydWN0IGkyY19hbGdvX3BjaF9kYXRhICphZGFwLAotCQkJCSBzMzIgdGltZW91dCkKKwkJCQkgICAgIHMzMiB0aW1lb3V0KQogewogCXZvaWQgX19pb21lbSAqcCA9IGFkYXAtPnBjaF9iYXNlX2FkZHJlc3M7CiAKQEAgLTQ3NSw4ICs0ODgsOCBAQAogICogQGxhc3Q6CXNwZWNpZmllcyB3aGV0aGVyIGxhc3QgbWVzc2FnZSBvciBub3QuCiAgKiBAZmlyc3Q6CXNwZWNpZmllcyB3aGV0aGVyIGZpcnN0IG1lc3NhZ2Ugb3Igbm90LgogICovCi1zMzIgcGNoX2kyY19yZWFkYnl0ZXMoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsCi0JCSAgdTMyIGxhc3QsIHUzMiBmaXJzdCkKK3N0YXRpYyBzMzIgcGNoX2kyY19yZWFkYnl0ZXMoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsCisJCQkgICAgIHUzMiBsYXN0LCB1MzIgZmlyc3QpCiB7CiAJc3RydWN0IGkyY19hbGdvX3BjaF9kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKIApAQCAtNTY5LDEwICs1ODIsMTAgQEAKIH0KIAogLyoqCi0gKiBwY2hfaTJjX2NiX2NoMCgpIC0gSW50ZXJydXB0IGhhbmRsZXIgQ2FsbCBiYWNrIGZ1bmN0aW9uCisgKiBwY2hfaTJjX2NiKCkgLSBJbnRlcnJ1cHQgaGFuZGxlciBDYWxsIGJhY2sgZnVuY3Rpb24KICAqIEBhZGFwOglQb2ludGVyIHRvIHN0cnVjdCBpMmNfYWxnb19wY2hfZGF0YS4KICAqLwotc3RhdGljIHZvaWQgcGNoX2kyY19jYl9jaDAoc3RydWN0IGkyY19hbGdvX3BjaF9kYXRhICphZGFwKQorc3RhdGljIHZvaWQgcGNoX2kyY19jYihzdHJ1Y3QgaTJjX2FsZ29fcGNoX2RhdGEgKmFkYXApCiB7CiAJdTMyIHN0czsKIAl2b2lkIF9faW9tZW0gKnAgPSBhZGFwLT5wY2hfYmFzZV9hZGRyZXNzOwpAQCAtNjAwLDI0ICs2MTMsMzAgQEAKICAqLwogc3RhdGljIGlycXJldHVybl90IHBjaF9pMmNfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwRGF0YSkKIHsKLQlzMzIgcmVnX3ZhbDsKKwl1MzIgcmVnX3ZhbDsKKwlpbnQgZmxhZzsKKwlpbnQgaTsKKwlzdHJ1Y3QgYWRhcHRlcl9pbmZvICphZGFwX2luZm8gPSBwRGF0YTsKKwl2b2lkIF9faW9tZW0gKnA7CisJdTMyIG1vZGU7CiAKLQlzdHJ1Y3QgaTJjX2FsZ29fcGNoX2RhdGEgKmFkYXBfZGF0YSA9IChzdHJ1Y3QgaTJjX2FsZ29fcGNoX2RhdGEgKilwRGF0YTsKLQl2b2lkIF9faW9tZW0gKnAgPSBhZGFwX2RhdGEtPnBjaF9iYXNlX2FkZHJlc3M7Ci0JdTMyIG1vZGUgPSBpb3JlYWQzMihwICsgUENIX0kyQ01PRCkgJiAoQlVGRkVSX01PREUgfCBFRVBST01fU1JfTU9ERSk7Ci0KLQlpZiAobW9kZSAhPSBOT1JNQUxfTU9ERSkgewotCQlwY2hfZXJyKGFkYXBfZGF0YSwgIkkyQyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gSVJRX05PTkU7CisJZm9yIChpID0gMCwgZmxhZyA9IDA7IGkgPCBhZGFwX2luZm8tPmNoX251bTsgaSsrKSB7CisJCXAgPSBhZGFwX2luZm8tPnBjaF9kYXRhW2ldLnBjaF9iYXNlX2FkZHJlc3M7CisJCW1vZGUgPSBpb3JlYWQzMihwICsgUENIX0kyQ01PRCk7CisJCW1vZGUgJj0gQlVGRkVSX01PREUgfCBFRVBST01fU1JfTU9ERTsKKwkJaWYgKG1vZGUgIT0gTk9STUFMX01PREUpIHsKKwkJCXBjaF9lcnIoYWRhcF9pbmZvLT5wY2hfZGF0YSwKKwkJCQkiSTJDLSVkIG1vZGUoJWQpIGlzIG5vdCBzdXBwb3J0ZWRcbiIsIG1vZGUsIGkpOworCQkJY29udGludWU7CisJCX0KKwkJcmVnX3ZhbCA9IGlvcmVhZDMyKHAgKyBQQ0hfSTJDU1IpOworCQlpZiAocmVnX3ZhbCAmIChJMkNNQUxfQklUIHwgSTJDTUNGX0JJVCB8IEkyQ01JRl9CSVQpKSB7CisJCQlwY2hfaTJjX2NiKCZhZGFwX2luZm8tPnBjaF9kYXRhW2ldKTsKKwkJCWZsYWcgPSAxOworCQl9CiAJfQogCi0JcmVnX3ZhbCA9IGlvcmVhZDMyKHAgKyBQQ0hfSTJDU1IpOwotCWlmIChyZWdfdmFsICYgKEkyQ01BTF9CSVQgfCBJMkNNQ0ZfQklUIHwgSTJDTUlGX0JJVCkpCi0JCXBjaF9pMmNfY2JfY2gwKGFkYXBfZGF0YSk7Ci0JZWxzZQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIGZsYWcgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOwogfQogCiAvKioKQEAgLTYyNyw3ICs2NDYsNyBAQAogICogQG51bToJbnVtYmVyIG9mIG1lc3NhZ2VzLgogICovCiBzdGF0aWMgczMyIHBjaF9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAotCQkgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIHMzMiBudW0pCisJCQlzdHJ1Y3QgaTJjX21zZyAqbXNncywgczMyIG51bSkKIHsKIAlzdHJ1Y3QgaTJjX21zZyAqcG1zZzsKIAl1MzIgaSA9IDA7CkBAIC03MTAsMTEgKzcyOSwxMyBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2hfaTJjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JczMyIHJldDsKKwlpbnQgcmV0OworCWludCBpLCBqOwogCXN0cnVjdCBhZGFwdGVyX2luZm8gKmFkYXBfaW5mbzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnBjaF9hZGFwOwogCiAJcGNoX3BjaV9kYmcocGRldiwgIkVudGVyZWQuXG4iKTsKIApAQCAtNzQ0LDQ0ICs3NjUsNDggQEAKIAkJZ290byBlcnJfcGNpX2lvbWFwOwogCX0KIAotCWFkYXBfaW5mby0+cGNoX2kyY19zdXNwZW5kZWQgPSBmYWxzZTsKKwkvKiBTZXQgdGhlIG51bWJlciBvZiBJMkMgY2hhbm5lbCBpbnN0YW5jZSAqLworCWFkYXBfaW5mby0+Y2hfbnVtID0gaWQtPmRyaXZlcl9kYXRhOwogCi0JYWRhcF9pbmZvLT5wY2hfZGF0YS5wX2FkYXB0ZXJfaW5mbyA9IGFkYXBfaW5mbzsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcF9pbmZvLT5jaF9udW07IGkrKykgeworCQlwY2hfYWRhcCA9ICZhZGFwX2luZm8tPnBjaF9kYXRhW2ldLnBjaF9hZGFwdGVyOworCQlhZGFwX2luZm8tPnBjaF9pMmNfc3VzcGVuZGVkID0gZmFsc2U7CiAKLQlhZGFwX2luZm8tPnBjaF9kYXRhLnBjaF9hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JYWRhcF9pbmZvLT5wY2hfZGF0YS5wY2hfYWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKLQlzdHJjcHkoYWRhcF9pbmZvLT5wY2hfZGF0YS5wY2hfYWRhcHRlci5uYW1lLCBLQlVJTERfTU9ETkFNRSk7Ci0JYWRhcF9pbmZvLT5wY2hfZGF0YS5wY2hfYWRhcHRlci5hbGdvID0gJnBjaF9hbGdvcml0aG07Ci0JYWRhcF9pbmZvLT5wY2hfZGF0YS5wY2hfYWRhcHRlci5hbGdvX2RhdGEgPQotCQkJCQkJJmFkYXBfaW5mby0+cGNoX2RhdGE7CisJCWFkYXBfaW5mby0+cGNoX2RhdGFbaV0ucF9hZGFwdGVyX2luZm8gPSBhZGFwX2luZm87CiAKLQkvKiAoaSAqIDB4ODApICsgYmFzZV9hZGRyOyAqLwotCWFkYXBfaW5mby0+cGNoX2RhdGEucGNoX2Jhc2VfYWRkcmVzcyA9IGJhc2VfYWRkcjsKKwkJcGNoX2FkYXAtPm93bmVyID0gVEhJU19NT0RVTEU7CisJCXBjaF9hZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKKwkJc3RyY3B5KHBjaF9hZGFwLT5uYW1lLCBLQlVJTERfTU9ETkFNRSk7CisJCXBjaF9hZGFwLT5hbGdvID0gJnBjaF9hbGdvcml0aG07CisJCXBjaF9hZGFwLT5hbGdvX2RhdGEgPSAmYWRhcF9pbmZvLT5wY2hfZGF0YVtpXTsKIAotCWFkYXBfaW5mby0+cGNoX2RhdGEucGNoX2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJCS8qIGJhc2VfYWRkciArIG9mZnNldDsgKi8KKwkJYWRhcF9pbmZvLT5wY2hfZGF0YVtpXS5wY2hfYmFzZV9hZGRyZXNzID0gYmFzZV9hZGRyICsgMHgxMDAgKiBpOwogCi0JcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCYoYWRhcF9pbmZvLT5wY2hfZGF0YS5wY2hfYWRhcHRlcikpOworCQlwY2hfYWRhcC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQlpZiAocmV0KSB7Ci0JCXBjaF9wY2lfZXJyKHBkZXYsICJpMmNfYWRkX2FkYXB0ZXIgRkFJTEVEXG4iKTsKLQkJZ290byBlcnJfaTJjX2FkZF9hZGFwdGVyOworCQlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIocGNoX2FkYXApOworCQlpZiAocmV0KSB7CisJCQlwY2hfcGNpX2VycihwZGV2LCAiaTJjX2FkZF9hZGFwdGVyW2NoOiVkXSBGQUlMRURcbiIsIGkpOworCQkJZ290byBlcnJfaTJjX2FkZF9hZGFwdGVyOworCQl9CisKKwkJcGNoX2kyY19pbml0KCZhZGFwX2luZm8tPnBjaF9kYXRhW2ldKTsKIAl9Ci0KLQlwY2hfaTJjX2luaXQoJmFkYXBfaW5mby0+cGNoX2RhdGEpOwogCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcGNoX2kyY19oYW5kbGVyLCBJUlFGX1NIQVJFRCwKLQkJICBLQlVJTERfTU9ETkFNRSwgJmFkYXBfaW5mby0+cGNoX2RhdGEpOworCQkgIEtCVUlMRF9NT0ROQU1FLCBhZGFwX2luZm8pOwogCWlmIChyZXQpIHsKIAkJcGNoX3BjaV9lcnIocGRldiwgInJlcXVlc3RfaXJxIEZBSUxFRFxuIik7Ci0JCWdvdG8gZXJyX3JlcXVlc3RfaXJxOworCQlnb3RvIGVycl9pMmNfYWRkX2FkYXB0ZXI7CiAJfQogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXBfaW5mbyk7CiAJcGNoX3BjaV9kYmcocGRldiwgInJldHVybnMgJWQuXG4iLCByZXQpOwogCXJldHVybiAwOwogCi1lcnJfcmVxdWVzdF9pcnE6Ci0JaTJjX2RlbF9hZGFwdGVyKCYoYWRhcF9pbmZvLT5wY2hfZGF0YS5wY2hfYWRhcHRlcikpOwogZXJyX2kyY19hZGRfYWRhcHRlcjoKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQlpMmNfZGVsX2FkYXB0ZXIoJmFkYXBfaW5mby0+cGNoX2RhdGFbal0ucGNoX2FkYXB0ZXIpOwogCXBjaV9pb3VubWFwKHBkZXYsIGJhc2VfYWRkcik7CiBlcnJfcGNpX2lvbWFwOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CkBAIC03OTQsMTcgKzgxOSwyMiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgcGNoX2kyY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJaW50IGk7CiAJc3RydWN0IGFkYXB0ZXJfaW5mbyAqYWRhcF9pbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JcGNoX2kyY19kaXNibF9pbnQoJmFkYXBfaW5mby0+cGNoX2RhdGEpOwotCWZyZWVfaXJxKHBkZXYtPmlycSwgJmFkYXBfaW5mby0+cGNoX2RhdGEpOwotCWkyY19kZWxfYWRhcHRlcigmKGFkYXBfaW5mby0+cGNoX2RhdGEucGNoX2FkYXB0ZXIpKTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGFkYXBfaW5mbyk7CiAKLQlpZiAoYWRhcF9pbmZvLT5wY2hfZGF0YS5wY2hfYmFzZV9hZGRyZXNzKSB7Ci0JCXBjaV9pb3VubWFwKHBkZXYsIGFkYXBfaW5mby0+cGNoX2RhdGEucGNoX2Jhc2VfYWRkcmVzcyk7Ci0JCWFkYXBfaW5mby0+cGNoX2RhdGEucGNoX2Jhc2VfYWRkcmVzcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGFkYXBfaW5mby0+Y2hfbnVtOyBpKyspIHsKKwkJcGNoX2kyY19kaXNibF9pbnQoJmFkYXBfaW5mby0+cGNoX2RhdGFbaV0pOworCQlpMmNfZGVsX2FkYXB0ZXIoJmFkYXBfaW5mby0+cGNoX2RhdGFbaV0ucGNoX2FkYXB0ZXIpOwogCX0KIAorCWlmIChhZGFwX2luZm8tPnBjaF9kYXRhWzBdLnBjaF9iYXNlX2FkZHJlc3MpCisJCXBjaV9pb3VubWFwKHBkZXYsIGFkYXBfaW5mby0+cGNoX2RhdGFbMF0ucGNoX2Jhc2VfYWRkcmVzcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcF9pbmZvLT5jaF9udW07IGkrKykKKwkJYWRhcF9pbmZvLT5wY2hfZGF0YVtpXS5wY2hfYmFzZV9hZGRyZXNzID0gMDsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CkBAIC04MTcsMTcgKzg0NywyMiBAQAogc3RhdGljIGludCBwY2hfaTJjX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgcmV0OworCWludCBpOwogCXN0cnVjdCBhZGFwdGVyX2luZm8gKmFkYXBfaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl2b2lkIF9faW9tZW0gKnAgPSBhZGFwX2luZm8tPnBjaF9kYXRhLnBjaF9iYXNlX2FkZHJlc3M7CisJdm9pZCBfX2lvbWVtICpwID0gYWRhcF9pbmZvLT5wY2hfZGF0YVswXS5wY2hfYmFzZV9hZGRyZXNzOwogCiAJYWRhcF9pbmZvLT5wY2hfaTJjX3N1c3BlbmRlZCA9IHRydWU7CiAKLQl3aGlsZSAoKGFkYXBfaW5mby0+cGNoX2RhdGEucGNoX2kyY194ZmVyX2luX3Byb2dyZXNzKSkgewotCQkvKiBXYWl0IHVudGlsIGFsbCBjaGFubmVsIHRyYW5zZmVycyBhcmUgY29tcGxldGVkICovCi0JCW1zbGVlcCgyMCk7CisJZm9yIChpID0gMDsgaSA8IGFkYXBfaW5mby0+Y2hfbnVtOyBpKyspIHsKKwkJd2hpbGUgKChhZGFwX2luZm8tPnBjaF9kYXRhW2ldLnBjaF9pMmNfeGZlcl9pbl9wcm9ncmVzcykpIHsKKwkJCS8qIFdhaXQgdW50aWwgYWxsIGNoYW5uZWwgdHJhbnNmZXJzIGFyZSBjb21wbGV0ZWQgKi8KKwkJCW1zbGVlcCgyMCk7CisJCX0KIAl9CisKIAkvKiBEaXNhYmxlIHRoZSBpMmMgaW50ZXJydXB0cyAqLwotCXBjaF9pMmNfZGlzYmxfaW50KCZhZGFwX2luZm8tPnBjaF9kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcF9pbmZvLT5jaF9udW07IGkrKykKKwkJcGNoX2kyY19kaXNibF9pbnQoJmFkYXBfaW5mby0+cGNoX2RhdGFbaV0pOwogCiAJcGNoX3BjaV9kYmcocGRldiwgIkkyQ1NSID0gJXggSTJDQlVGU1RBID0gJXggSTJDRVNSU1RBID0gJXggIgogCQkiaW52b2tlZCBmdW5jdGlvbiBwY2hfaTJjX2Rpc2JsX2ludCBzdWNjZXNzZnVsbHlcbiIsCkBAIC04NTAsNiArODg1LDcgQEAKIAogc3RhdGljIGludCBwY2hfaTJjX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKKwlpbnQgaTsKIAlzdHJ1Y3QgYWRhcHRlcl9pbmZvICphZGFwX2luZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CkBAIC04NjIsNyArODk4LDggQEAKIAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwogCi0JcGNoX2kyY19pbml0KCZhZGFwX2luZm8tPnBjaF9kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcF9pbmZvLT5jaF9udW07IGkrKykKKwkJcGNoX2kyY19pbml0KCZhZGFwX2luZm8tPnBjaF9kYXRhW2ldKTsKIAogCWFkYXBfaW5mby0+cGNoX2kyY19zdXNwZW5kZWQgPSBmYWxzZTsKIApAQCAtODk0LDcgKzkzMSw3IEBACiB9CiBtb2R1bGVfZXhpdChwY2hfcGNpX2V4aXQpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBDSCBJMkMgUENJIERyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBFRzIwVCBQQ0gvT0tJIFNFTUlDT05EVUNUT1IgTUw3MjEzIElPSCBJMkMgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJUb21veWEgTU9SSU5BR0EuIDx0b21veWEtbGludXhAZHNuLm9raXNlbWkuY29tPiIpOwogbW9kdWxlX3BhcmFtKHBjaF9pMmNfc3BlZWQsIGludCwgKFNfSVJVU1IgfCBTX0lXVVNSKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDc5NzlhZWY3ZS4uZWQyZTBjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTQ0LDExICs0NCwxMiBAQAogICBJQ0gxMCAgICAgICAgICAgICAgICAgMHgzYTMwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICBJQ0gxMCAgICAgICAgICAgICAgICAgMHgzYTYwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICA1LzM0MDAgU2VyaWVzIChQQ0gpICAgMHgzYjMwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwotICBDb3VnYXIgUG9pbnQgKFBDSCkgICAgMHgxYzIyICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcworICA2IFNlcmllcyAoUENIKSAgICAgICAgMHgxYzIyICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICBQYXRzYnVyZyAoUENIKSAgICAgICAgMHgxZDIyICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICBQYXRzYnVyZyAoUENIKSBJREYgICAgMHgxZDcwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICBQYXRzYnVyZyAoUENIKSBJREYgICAgMHgxZDcxICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICBQYXRzYnVyZyAoUENIKSBJREYgICAgMHgxZDcyICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcworICBESDg5eHhDQyAoUENIKSAgICAgICAgMHgyMzMwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogCiAgIEZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjoKICAgU29mdHdhcmUgUEVDICAgICAgICAgICAgICAgICAgICAgbm8KQEAgLTYyMSw2ICs2MjIsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTX0lERjApIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfUEFUU0JVUkdfU01CVVNfSURGMSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19TTUJVU19JREYyKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX1NNQlVTKSB9LAogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1teHMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXhzLmMKaW5kZXggODAyMmUyMy4uY2FmOTZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1teHMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW14cy5jCkBAIC0xMTgsNiArMTE4LDggQEAKIHsKIAlteHNfcmVzZXRfYmxvY2soaTJjLT5yZWdzKTsKIAl3cml0ZWwoTVhTX0kyQ19JUlFfTUFTSyA8PCA4LCBpMmMtPnJlZ3MgKyBNWFNfSTJDX0NUUkwxX1NFVCk7CisJd3JpdGVsKE1YU19JMkNfUVVFVUVDVFJMX1BJT19RVUVVRV9NT0RFLAorCQkJaTJjLT5yZWdzICsgTVhTX0kyQ19RVUVVRUNUUkxfU0VUKTsKIH0KIAogc3RhdGljIHZvaWQgbXhzX2kyY19waW9xX3NldHVwX3JlYWQoc3RydWN0IG14c19pMmNfZGV2ICppMmMsIHU4IGFkZHIsIGludCBsZW4sCkBAIC0zNDcsOCArMzQ5LDYgQEAKIAogCS8qIERvIHJlc2V0IHRvIGVuZm9yY2UgY29ycmVjdCBzdGFydHVwIGFmdGVyIHBpbm11eGluZyAqLwogCW14c19pMmNfcmVzZXQoaTJjKTsKLQl3cml0ZWwoTVhTX0kyQ19RVUVVRUNUUkxfUElPX1FVRVVFX01PREUsCi0JCQlpMmMtPnJlZ3MgKyBNWFNfSTJDX1FVRVVFQ1RSTF9TRVQpOwogCiAJYWRhcCA9ICZpMmMtPmFkYXB0ZXI7CiAJc3RybGNweShhZGFwLT5uYW1lLCAiTVhTIEkyQyBhZGFwdGVyIiwgc2l6ZW9mKGFkYXAtPm5hbWUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLXBjaS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1OWQyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLXBjaS5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogVGhlIENFNDEwMCdzIEkyQyBkZXZpY2UgaXMgbW9yZSBvciBsZXNzIHRoZSBzYW1lIG9uZSBhcyBmb3VuZCBvbiBQWEEuCisgKiBJdCBkb2VzIG5vdCBzdXBwb3J0IHNsYXZlIG1vZGUsIHRoZSByZWdpc3RlciBzbGlnaHRseSBtb3ZlZC4gVGhpcyBQQ0kKKyAqIGRldmljZSBwcm92aWRlcyB0aHJlZSBiYXJzLCBldmVyeSBjb250YWlucyBhIHNpbmdsZSBJMkMgY29udHJvbGxlci4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisKKyNkZWZpbmUgQ0U0MTAwX1BDSV9JMkNfREVWUwkzCisKK3N0cnVjdCBjZTQxMDBfZGV2aWNlcyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldltDRTQxMDBfUENJX0kyQ19ERVZTXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphZGRfaTJjX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgYmFyKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSBwZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisJc3RhdGljIGludCBkZXZudW07CisJaW50IHJldDsKKworCW1lbXNldCgmcGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhKSk7CisJbWVtc2V0KCZyZXMsIDAsIHNpemVvZihyZXMpKTsKKworCXJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCXJlc1swXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7CisJcmVzWzBdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQoZGV2LCBiYXIpOworCisJcmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CisJcmVzWzFdLnN0YXJ0ID0gZGV2LT5pcnE7CisJcmVzWzFdLmVuZCA9IGRldi0+aXJxOworCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPmRldi5vZl9ub2RlLCBjaGlsZCkgeworCQljb25zdCB2b2lkICpwcm9wOworCQlzdHJ1Y3QgcmVzb3VyY2UgcjsKKwkJaW50IHJldDsKKworCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGNoaWxkLCAwLCAmcik7CisJCWlmIChyZXQgPCAwKQorCQkJY29udGludWU7CisJCWlmIChyLnN0YXJ0ICE9IHJlc1swXS5zdGFydCkKKwkJCWNvbnRpbnVlOworCQlpZiAoci5lbmQgIT0gcmVzWzBdLmVuZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoci5mbGFncyAhPSByZXNbMF0uZmxhZ3MpCisJCQljb250aW51ZTsKKworCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAiZmFzdC1tb2RlIiwgTlVMTCk7CisJCWlmIChwcm9wKQorCQkJcGRhdGEuZmFzdF9tb2RlID0gMTsKKworCQlicmVhazsKKwl9CisKKwlpZiAoIWNoaWxkKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hdGNoIGEgRFQgbm9kZSBmb3IgYmFyICVkLlxuIiwKKwkJCQliYXIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJjZTQxMDAtaTJjIiwgZGV2bnVtKTsKKwlpZiAoIXBkZXYpIHsKKwkJb2Zfbm9kZV9wdXQoY2hpbGQpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJcGRldi0+ZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKKwlwZGV2LT5kZXYub2Zfbm9kZSA9IGNoaWxkOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBBUlJBWV9TSVpFKHJlcykpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsICZwZGF0YSwgc2l6ZW9mKHBkYXRhKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCWRldm51bSsrOworCXJldHVybiBwZGV2OworZXJyOgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY2U0MTAwX2kyY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCByZXQ7CisJaW50IGk7CisJc3RydWN0IGNlNDEwMF9kZXZpY2VzICpzZHM7CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0oZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFkZXYtPmRldi5vZl9ub2RlKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiTWlzc2luZyBkZXZpY2UgdHJlZSBub2RlLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzZHMgPSBremFsbG9jKHNpemVvZigqc2RzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZHMpCisJCWdvdG8gZXJyX21lbTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkcy0+cGRldik7IGkrKykgeworCQlzZHMtPnBkZXZbaV0gPSBhZGRfaTJjX2RldmljZShkZXYsIGkpOworCQlpZiAoSVNfRVJSKHNkcy0+cGRldltpXSkpIHsKKwkJCXdoaWxlICgtLWkgPj0gMCkKKwkJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzZHMtPnBkZXZbaV0pOworCQkJZ290byBlcnJfZGV2X2FkZDsKKwkJfQorCX0KKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBzZHMpOworCXJldHVybiAwOworCitlcnJfZGV2X2FkZDoKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShzZHMpOworZXJyX21lbToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2U0MTAwX2kyY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgY2U0MTAwX2RldmljZXMgKnNkczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXNkcyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RzLT5wZGV2KTsgaSsrKQorCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzZHMtPnBkZXZbaV0pOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJa2ZyZWUoc2RzKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNlNDEwMF9pMmNfZGV2aWNlc1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MmU2OCl9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2U0MTAwX2kyY19kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNlNDEwMF9pMmNfZHJpdmVyID0geworCS5uYW1lICAgICAgICAgICA9ICJjZTQxMDBfaTJjIiwKKwkuaWRfdGFibGUgICAgICAgPSBjZTQxMDBfaTJjX2RldmljZXMsCisJLnByb2JlICAgICAgICAgID0gY2U0MTAwX2kyY19wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChjZTQxMDBfaTJjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjZTQxMDBfaTJjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY2U0MTAwX2kyY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoY2U0MTAwX2kyY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNlNDEwMF9pMmNfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY2U0MTAwX2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoY2U0MTAwX2kyY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJDRTQxMDAgUENJLUkyQyBnbHVlIGNvZGUgZm9yIFBYQSdzIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiU2ViYXN0aWFuIEFuZHJ6ZWogU2lld2lvciA8YmlnZWFzeUBsaW51dHJvbml4LmRlPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggZjRjMTlhOS4uZjU5MjI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC0yOSwzOCArMjksNzUgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1weGEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisKKyNpZm5kZWYgQ09ORklHX0hBVkVfQ0xLCisjZGVmaW5lIGNsa19nZXQoZGV2LCBpZCkJTlVMTAorI2RlZmluZSBjbGtfcHV0KGNsaykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xrX2Rpc2FibGUoY2xrKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGNsa19lbmFibGUoY2xrKQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0cnVjdCBweGFfcmVnX2xheW91dCB7CisJdTMyIGlibXI7CisJdTMyIGlkYnI7CisJdTMyIGljcjsKKwl1MzIgaXNyOworCXUzMiBpc2FyOworfTsKKworZW51bSBweGFfaTJjX3R5cGVzIHsKKwlSRUdTX1BYQTJYWCwKKwlSRUdTX1BYQTNYWCwKKwlSRUdTX0NFNDEwMCwKK307CiAKIC8qCi0gKiBJMkMgcmVnaXN0ZXIgb2Zmc2V0cyB3aWxsIGJlIHNoaWZ0ZWQgMCBvciAxIGJpdCBsZWZ0LCBkZXBlbmRpbmcgb24KLSAqIGRpZmZlcmVudCBTb0NzCisgKiBJMkMgcmVnaXN0ZXJzIGRlZmluaXRpb25zCiAgKi8KLSNkZWZpbmUgUkVHX1NISUZUXzAJKDAgPDwgMCkKLSNkZWZpbmUgUkVHX1NISUZUXzEJKDEgPDwgMCkKLSNkZWZpbmUgUkVHX1NISUZUKGQpCSgoZCkgJiAweDEpCitzdGF0aWMgc3RydWN0IHB4YV9yZWdfbGF5b3V0IHB4YV9yZWdfbGF5b3V0W10gPSB7CisJW1JFR1NfUFhBMlhYXSA9IHsKKwkJLmlibXIgPQkweDAwLAorCQkuaWRiciA9CTB4MDgsCisJCS5pY3IgPQkweDEwLAorCQkuaXNyID0JMHgxOCwKKwkJLmlzYXIgPQkweDIwLAorCX0sCisJW1JFR1NfUFhBM1hYXSA9IHsKKwkJLmlibXIgPQkweDAwLAorCQkuaWRiciA9CTB4MDQsCisJCS5pY3IgPQkweDA4LAorCQkuaXNyID0JMHgwYywKKwkJLmlzYXIgPQkweDEwLAorCX0sCisJW1JFR1NfQ0U0MTAwXSA9IHsKKwkJLmlibXIgPQkweDE0LAorCQkuaWRiciA9CTB4MGMsCisJCS5pY3IgPQkweDAwLAorCQkuaXNyID0JMHgwNCwKKwkJLyogbm8gaXNhciByZWdpc3RlciAqLworCX0sCit9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBpMmNfcHhhX2lkX3RhYmxlW10gPSB7Ci0JeyAicHhhMnh4LWkyYyIsCQlSRUdfU0hJRlRfMSB9LAotCXsgInB4YTN4eC1wd3JpMmMiLAlSRUdfU0hJRlRfMCB9LAorCXsgInB4YTJ4eC1pMmMiLAkJUkVHU19QWEEyWFggfSwKKwl7ICJweGEzeHgtcHdyaTJjIiwJUkVHU19QWEEzWFggfSwKKwl7ICJjZTQxMDAtaTJjIiwJCVJFR1NfQ0U0MTAwIH0sCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIGkyY19weGFfaWRfdGFibGUpOwogCiAvKgotICogSTJDIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zCisgKiBJMkMgYml0IGRlZmluaXRpb25zCiAgKi8KLSNkZWZpbmUgSUJNUgkJKDB4MDApCi0jZGVmaW5lIElEQlIJCSgweDA4KQotI2RlZmluZSBJQ1IJCSgweDEwKQotI2RlZmluZSBJU1IJCSgweDE4KQotI2RlZmluZSBJU0FSCQkoMHgyMCkKIAogI2RlZmluZSBJQ1JfU1RBUlQJKDEgPDwgMCkJICAgLyogc3RhcnQgYml0ICovCiAjZGVmaW5lIElDUl9TVE9QCSgxIDw8IDEpCSAgIC8qIHN0b3AgYml0ICovCkBAIC0xMTEsNyArMTQ4LDExIEBACiAJdTMyCQkJaWNybG9nWzMyXTsKIAogCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOwotCXVuc2lnbmVkIGludAkJcmVnX3NoaWZ0OworCXZvaWQgX19pb21lbQkJKnJlZ19pYm1yOworCXZvaWQgX19pb21lbQkJKnJlZ19pZGJyOworCXZvaWQgX19pb21lbQkJKnJlZ19pY3I7CisJdm9pZCBfX2lvbWVtCQkqcmVnX2lzcjsKKwl2b2lkIF9faW9tZW0JCSpyZWdfaXNhcjsKIAogCXVuc2lnbmVkIGxvbmcJCWlvYmFzZTsKIAl1bnNpZ25lZCBsb25nCQlpb3NpemU7CkBAIC0xMjEsMTEgKzE2MiwxMSBAQAogCXVuc2lnbmVkIGludAkJZmFzdF9tb2RlIDoxOwogfTsKIAotI2RlZmluZSBfSUJNUihpMmMpCSgoaTJjKS0+cmVnX2Jhc2UgKyAoMHgwIDw8IChpMmMpLT5yZWdfc2hpZnQpKQotI2RlZmluZSBfSURCUihpMmMpCSgoaTJjKS0+cmVnX2Jhc2UgKyAoMHg0IDw8IChpMmMpLT5yZWdfc2hpZnQpKQotI2RlZmluZSBfSUNSKGkyYykJKChpMmMpLT5yZWdfYmFzZSArICgweDggPDwgKGkyYyktPnJlZ19zaGlmdCkpCi0jZGVmaW5lIF9JU1IoaTJjKQkoKGkyYyktPnJlZ19iYXNlICsgKDB4YyA8PCAoaTJjKS0+cmVnX3NoaWZ0KSkKLSNkZWZpbmUgX0lTQVIoaTJjKQkoKGkyYyktPnJlZ19iYXNlICsgKDB4MTAgPDwgKGkyYyktPnJlZ19zaGlmdCkpCisjZGVmaW5lIF9JQk1SKGkyYykJKChpMmMpLT5yZWdfaWJtcikKKyNkZWZpbmUgX0lEQlIoaTJjKQkoKGkyYyktPnJlZ19pZGJyKQorI2RlZmluZSBfSUNSKGkyYykJKChpMmMpLT5yZWdfaWNyKQorI2RlZmluZSBfSVNSKGkyYykJKChpMmMpLT5yZWdfaXNyKQorI2RlZmluZSBfSVNBUihpMmMpCSgoaTJjKS0+cmVnX2lzYXIpCiAKIC8qCiAgKiBJMkMgU2xhdmUgbW9kZSBhZGRyZXNzCkBAIC00MTgsNyArNDU5LDggQEAKIAl3cml0ZWwoSTJDX0lTUl9JTklULCBfSVNSKGkyYykpOwogCXdyaXRlbChyZWFkbChfSUNSKGkyYykpICYgfklDUl9VUiwgX0lDUihpMmMpKTsKIAotCXdyaXRlbChpMmMtPnNsYXZlX2FkZHIsIF9JU0FSKGkyYykpOworCWlmIChpMmMtPnJlZ19pc2FyKQorCQl3cml0ZWwoaTJjLT5zbGF2ZV9hZGRyLCBfSVNBUihpMmMpKTsKIAogCS8qIHNldCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyAqLwogCXdyaXRlbChJMkNfSUNSX0lOSVQgfCAoaTJjLT5mYXN0X21vZGUgPyBJQ1JfRk0gOiAwKSwgX0lDUihpMmMpKTsKQEAgLTcyOSw4ICs3NzEsMTAgQEAKIAkgKi8KIAlyZXQgPSBpMmMtPm1zZ19pZHg7CiAKLQlpZiAodGltZW91dCA9PSAwKQorCWlmICghdGltZW91dCAmJiBpMmMtPm1zZ19udW0pIHsKIAkJaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIoaTJjLCAidGltZW91dCIpOworCQlyZXQgPSBJMkNfUkVUUlk7CisJfQogCiAgb3V0OgogCXJldHVybiByZXQ7CkBAIC05MTUsMTEgKzk1OSwxNiBAQAogCXdyaXRlbChpY3IsIF9JQ1IoaTJjKSk7CiB9CiAKKyNkZWZpbmUgVkFMSURfSU5UX1NPVVJDRQkoSVNSX1NTRCB8IElTUl9BTEQgfCBJU1JfSVRFIHwgSVNSX0lSRiB8IFwKKwkJCQlJU1JfU0FEIHwgSVNSX0JFRCkKIHN0YXRpYyBpcnFyZXR1cm5fdCBpMmNfcHhhX2hhbmRsZXIoaW50IHRoaXNfaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHB4YV9pMmMgKmkyYyA9IGRldl9pZDsKIAl1MzIgaXNyID0gcmVhZGwoX0lTUihpMmMpKTsKIAorCWlmICghKGlzciAmIFZBTElEX0lOVF9TT1VSQ0UpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKIAlpZiAoaTJjX2RlYnVnID4gMiAmJiAwKSB7CiAJCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICIlczogSVNSPSUwOHgsIElDUj0lMDh4LCBJQk1SPSUwMnhcbiIsCiAJCQlfX2Z1bmNfXywgaXNyLCByZWFkbChfSUNSKGkyYykpLCByZWFkbChfSUJNUihpMmMpKSk7CkBAIC05MzQsNyArOTgzLDcgQEAKIAkvKgogCSAqIEFsd2F5cyBjbGVhciBhbGwgcGVuZGluZyBJUlFzLgogCSAqLwotCXdyaXRlbChpc3IgJiAoSVNSX1NTRHxJU1JfQUxEfElTUl9JVEV8SVNSX0lSRnxJU1JfU0FEfElTUl9CRUQpLCBfSVNSKGkyYykpOworCXdyaXRlbChpc3IgJiBWQUxJRF9JTlRfU09VUkNFLCBfSVNSKGkyYykpOwogCiAJaWYgKGlzciAmIElTUl9TQUQpCiAJCWkyY19weGFfc2xhdmVfc3RhcnQoaTJjLCBpc3IpOwpAQCAtMTAwMSw2ICsxMDUwLDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAljb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZCA9IHBsYXRmb3JtX2dldF9kZXZpY2VfaWQoZGV2KTsKKwllbnVtIHB4YV9pMmNfdHlwZXMgaTJjX3R5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CiAJaW50IHJldDsKIAlpbnQgaXJxOwogCkBAIC0xMDQ0LDcgKzEwOTQsMTMgQEAKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBlcmVtYXA7CiAJfQotCWkyYy0+cmVnX3NoaWZ0ID0gUkVHX1NISUZUKGlkLT5kcml2ZXJfZGF0YSk7CisKKwlpMmMtPnJlZ19pYm1yID0gaTJjLT5yZWdfYmFzZSArIHB4YV9yZWdfbGF5b3V0W2kyY190eXBlXS5pYm1yOworCWkyYy0+cmVnX2lkYnIgPSBpMmMtPnJlZ19iYXNlICsgcHhhX3JlZ19sYXlvdXRbaTJjX3R5cGVdLmlkYnI7CisJaTJjLT5yZWdfaWNyID0gaTJjLT5yZWdfYmFzZSArIHB4YV9yZWdfbGF5b3V0W2kyY190eXBlXS5pY3I7CisJaTJjLT5yZWdfaXNyID0gaTJjLT5yZWdfYmFzZSArIHB4YV9yZWdfbGF5b3V0W2kyY190eXBlXS5pc3I7CisJaWYgKGkyY190eXBlICE9IFJFR1NfQ0U0MTAwKQorCQlpMmMtPnJlZ19pc2FyID0gaTJjLT5yZWdfYmFzZSArIHB4YV9yZWdfbGF5b3V0W2kyY190eXBlXS5pc2FyOwogCiAJaTJjLT5pb2Jhc2UgPSByZXMtPnN0YXJ0OwogCWkyYy0+aW9zaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwpAQCAtMTA3Miw3ICsxMTI4LDcgQEAKIAkJaTJjLT5hZGFwLmFsZ28gPSAmaTJjX3B4YV9waW9fYWxnb3JpdGhtOwogCX0gZWxzZSB7CiAJCWkyYy0+YWRhcC5hbGdvID0gJmkyY19weGFfYWxnb3JpdGhtOwotCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGkyY19weGFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBpMmNfcHhhX2hhbmRsZXIsIElSUUZfU0hBUkVELAogCQkJCSAgaTJjLT5hZGFwLm5hbWUsIGkyYyk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVyZXFpcnE7CkBAIC0xMDgyLDEyICsxMTM4LDE5IEBACiAKIAlpMmMtPmFkYXAuYWxnb19kYXRhID0gaTJjOwogCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gJmRldi0+ZGV2OworI2lmZGVmIENPTkZJR19PRgorCWkyYy0+YWRhcC5kZXYub2Zfbm9kZSA9IGRldi0+ZGV2Lm9mX25vZGU7CisjZW5kaWYKIAotCXJldCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlpZiAoaTJjX3R5cGUgPT0gUkVHU19DRTQxMDApCisJCXJldCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwllbHNlCisJCXJldCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcigmaTJjLT5hZGFwKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJJMkM6IEZhaWxlZCB0byBhZGQgYnVzXG4iKTsKIAkJZ290byBlYWRhcHQ7CiAJfQorCW9mX2kyY19yZWdpc3Rlcl9kZXZpY2VzKCZpMmMtPmFkYXApOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpMmMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtYm9hcmRpbmZvLmMgYi9kcml2ZXJzL2kyYy9pMmMtYm9hcmRpbmZvLmMKaW5kZXggN2U2YTYzYi4uM2NhMmUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWJvYXJkaW5mby5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1ib2FyZGluZm8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpMmMtYm9hcmRpbmZvLmggLSBjb2xsZWN0IHByZS1kZWNsYXJhdGlvbnMgb2YgSTJDIGRldmljZXMKKyAqIGkyYy1ib2FyZGluZm8uYyAtIGNvbGxlY3QgcHJlLWRlY2xhcmF0aW9ucyBvZiBJMkMgZGV2aWNlcwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggMDQ1YmE2ZS4uZTVmNzZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC03OTcsNiArNzk3LDkgQEAKIAogCS8qIExldCBsZWdhY3kgZHJpdmVycyBzY2FuIHRoaXMgYnVzIGZvciBtYXRjaGluZyBkZXZpY2VzICovCiAJaWYgKGRyaXZlci0+YXR0YWNoX2FkYXB0ZXIpIHsKKwkJZGV2X3dhcm4oJmFkYXAtPmRldiwgImF0dGFjaF9hZGFwdGVyIG1ldGhvZCBpcyBkZXByZWNhdGVkXG4iKTsKKwkJZGV2X3dhcm4oJmFkYXAtPmRldiwgIlBsZWFzZSB1c2UgYW5vdGhlciB3YXkgdG8gaW5zdGFudGlhdGUgIgorCQkJICJ5b3VyIGkyY19jbGllbnRcbiIpOwogCQkvKiBXZSBpZ25vcmUgdGhlIHJldHVybiBjb2RlOyBpZiBpdCBmYWlscywgdG9vIGJhZCAqLwogCQlkcml2ZXItPmF0dGFjaF9hZGFwdGVyKGFkYXApOwogCX0KQEAgLTk4MSw2ICs5ODQsNyBAQAogCiAJaWYgKCFkcml2ZXItPmRldGFjaF9hZGFwdGVyKQogCQlyZXR1cm4gMDsKKwlkZXZfd2FybigmYWRhcHRlci0+ZGV2LCAiZGV0YWNoX2FkYXB0ZXIgbWV0aG9kIGlzIGRlcHJlY2F0ZWRcbiIpOwogCXJlcyA9IGRyaXZlci0+ZGV0YWNoX2FkYXB0ZXIoYWRhcHRlcik7CiAJaWYgKHJlcykKIAkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiZGV0YWNoX2FkYXB0ZXIgZmFpbGVkICglZCkgIgpAQCAtMTA5MSw2ICsxMDk1LDE4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAoraW50IGkyY19mb3JfZWFjaF9kZXYodm9pZCAqZGF0YSwgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSkKK3sKKwlpbnQgcmVzOworCisJbXV0ZXhfbG9jaygmY29yZV9sb2NrKTsKKwlyZXMgPSBidXNfZm9yX2VhY2hfZGV2KCZpMmNfYnVzX3R5cGUsIE5VTEwsIGRhdGEsIGZuKTsKKwltdXRleF91bmxvY2soJmNvcmVfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTJjX2Zvcl9lYWNoX2Rldik7CisKIHN0YXRpYyBpbnQgX19wcm9jZXNzX25ld19kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCWlmIChkZXYtPnR5cGUgIT0gJmkyY19hZGFwdGVyX3R5cGUpCkBAIC0xMTM0LDkgKzExNTAsNyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmRyaXZlci0+Y2xpZW50cyk7CiAJLyogV2FsayB0aGUgYWRhcHRlcnMgdGhhdCBhcmUgYWxyZWFkeSBwcmVzZW50ICovCi0JbXV0ZXhfbG9jaygmY29yZV9sb2NrKTsKLQlidXNfZm9yX2VhY2hfZGV2KCZpMmNfYnVzX3R5cGUsIE5VTEwsIGRyaXZlciwgX19wcm9jZXNzX25ld19kcml2ZXIpOwotCW11dGV4X3VubG9jaygmY29yZV9sb2NrKTsKKwlpMmNfZm9yX2VhY2hfZGV2KGRyaXZlciwgX19wcm9jZXNzX25ld19kcml2ZXIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTU2LDkgKzExNzAsNyBAQAogICovCiB2b2lkIGkyY19kZWxfZHJpdmVyKHN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXIpCiB7Ci0JbXV0ZXhfbG9jaygmY29yZV9sb2NrKTsKLQlidXNfZm9yX2VhY2hfZGV2KCZpMmNfYnVzX3R5cGUsIE5VTEwsIGRyaXZlciwgX19wcm9jZXNzX3JlbW92ZWRfZHJpdmVyKTsKLQltdXRleF91bmxvY2soJmNvcmVfbG9jayk7CisJaTJjX2Zvcl9lYWNoX2Rldihkcml2ZXIsIF9fcHJvY2Vzc19yZW1vdmVkX2RyaXZlcik7CiAKIAlkcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyLT5kcml2ZXIpOwogCXByX2RlYnVnKCJpMmMtY29yZTogZHJpdmVyIFslc10gdW5yZWdpc3RlcmVkXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKQEAgLTE1ODEsMTIgKzE1OTMsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGkyY19uZXdfcHJvYmVkX2RldmljZSk7CiAKLXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2dldF9hZGFwdGVyKGludCBpZCkKK3N0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2dldF9hZGFwdGVyKGludCBucikKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CiAKIAltdXRleF9sb2NrKCZjb3JlX2xvY2spOwotCWFkYXB0ZXIgPSBpZHJfZmluZCgmaTJjX2FkYXB0ZXJfaWRyLCBpZCk7CisJYWRhcHRlciA9IGlkcl9maW5kKCZpMmNfYWRhcHRlcl9pZHIsIG5yKTsKIAlpZiAoYWRhcHRlciAmJiAhdHJ5X21vZHVsZV9nZXQoYWRhcHRlci0+b3duZXIpKQogCQlhZGFwdGVyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWRldi5jIGIvZHJpdmVycy9pMmMvaTJjLWRldi5jCmluZGV4IGNlYzBmM2IuLmM5MGNlNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1kZXYuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzcsMTYgKzM5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY2Rldl9kcml2ZXI7Ci0KIC8qCiAgKiBBbiBpMmNfZGV2IHJlcHJlc2VudHMgYW4gaTJjX2FkYXB0ZXIgLi4uIGFuIEkyQyBvciBTTUJ1cyBtYXN0ZXIsIG5vdCBhCiAgKiBzbGF2ZSAoaTJjX2NsaWVudCkgd2l0aCB3aGljaCBtZXNzYWdlcyB3aWxsIGJlIGV4Y2hhbmdlZC4gIEl0J3MgY291cGxlZAogICogd2l0aCBhIGNoYXJhY3RlciBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYWNjZXNzZWQgYnkgdXNlciBtb2RlIGRyaXZlcnMuCiAgKgogICogVGhlIGxpc3Qgb2YgaTJjX2RldiBzdHJ1Y3R1cmVzIGlzIHBhcmFsbGVsIHRvIHRoZSBpMmNfYWRhcHRlciBsaXN0cwotICogbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyIG1vZGVsLCBhbmQgaXMgdXBkYXRlZCB1c2luZyBub3RpZmljYXRpb25zCi0gKiBkZWxpdmVyZWQgdG8gdGhlIGkyY2Rldl9kcml2ZXIuCisgKiBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIgbW9kZWwsIGFuZCBpcyB1cGRhdGVkIHVzaW5nIGJ1cyBub3RpZmljYXRpb25zLgogICovCiBzdHJ1Y3QgaTJjX2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtNDkxLDcgKzQ5MCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlzbnByaW50ZihjbGllbnQtPm5hbWUsIEkyQ19OQU1FX1NJWkUsICJpMmMtZGV2ICVkIiwgYWRhcC0+bnIpOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY2Rldl9kcml2ZXI7CiAKIAljbGllbnQtPmFkYXB0ZXIgPSBhZGFwOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNsaWVudDsKQEAgLTUyMiwxOSArNTIwLDE4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIFRoZSBsZWdhY3kgImkyY2Rldl9kcml2ZXIiIGlzIHVzZWQgcHJpbWFyaWx5IHRvIGdldCBub3RpZmljYXRpb25zIHdoZW4KLSAqIEkyQyBhZGFwdGVycyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCwgc28gdGhhdCBlYWNoIG9uZSBnZXRzIGFuIGkyY19kZXYKLSAqIGFuZCBpcyB0aHVzIG1hZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSBkcml2ZXIgY29kZS4KLSAqLwotCiBzdGF0aWMgc3RydWN0IGNsYXNzICppMmNfZGV2X2NsYXNzOwogCi1zdGF0aWMgaW50IGkyY2Rldl9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgaW50IGkyY2Rldl9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmR1bW15KQogeworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKIAlzdHJ1Y3QgaTJjX2RldiAqaTJjX2RldjsKIAlpbnQgcmVzOwogCisJaWYgKGRldi0+dHlwZSAhPSAmaTJjX2FkYXB0ZXJfdHlwZSkKKwkJcmV0dXJuIDA7CisJYWRhcCA9IHRvX2kyY19hZGFwdGVyKGRldik7CisKIAlpMmNfZGV2ID0gZ2V0X2ZyZWVfaTJjX2RldihhZGFwKTsKIAlpZiAoSVNfRVJSKGkyY19kZXYpKQogCQlyZXR1cm4gUFRSX0VSUihpMmNfZGV2KTsKQEAgLTU2MSwxMCArNTU4LDE1IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBpMmNkZXZfZGV0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorc3RhdGljIGludCBpMmNkZXZfZGV0YWNoX2FkYXB0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkdW1teSkKIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CiAJc3RydWN0IGkyY19kZXYgKmkyY19kZXY7CiAKKwlpZiAoZGV2LT50eXBlICE9ICZpMmNfYWRhcHRlcl90eXBlKQorCQlyZXR1cm4gMDsKKwlhZGFwID0gdG9faTJjX2FkYXB0ZXIoZGV2KTsKKwogCWkyY19kZXYgPSBpMmNfZGV2X2dldF9ieV9taW5vcihhZGFwLT5ucik7CiAJaWYgKCFpMmNfZGV2KSAvKiBhdHRhY2hfYWRhcHRlciBtdXN0IGhhdmUgZmFpbGVkICovCiAJCXJldHVybiAwOwpAQCAtNTc3LDEyICs1NzksMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY2Rldl9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiZGV2X2RyaXZlciIsCi0JfSwKLQkuYXR0YWNoX2FkYXB0ZXIJPSBpMmNkZXZfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9hZGFwdGVyCT0gaTJjZGV2X2RldGFjaF9hZGFwdGVyLAoraW50IGkyY2Rldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBCVVNfTk9USUZZX0FERF9ERVZJQ0U6CisJCXJldHVybiBpMmNkZXZfYXR0YWNoX2FkYXB0ZXIoZGV2LCBOVUxMKTsKKwljYXNlIEJVU19OT1RJRllfREVMX0RFVklDRToKKwkJcmV0dXJuIGkyY2Rldl9kZXRhY2hfYWRhcHRlcihkZXYsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGkyY2Rldl9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGkyY2Rldl9ub3RpZmllcl9jYWxsLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjA3LDEwICs2MjAsMTQgQEAKIAkJZ290byBvdXRfdW5yZWdfY2hyZGV2OwogCX0KIAotCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZpMmNkZXZfZHJpdmVyKTsKKwkvKiBLZWVwIHRyYWNrIG9mIGFkYXB0ZXJzIHdoaWNoIHdpbGwgYmUgYWRkZWQgb3IgcmVtb3ZlZCBsYXRlciAqLworCXJlcyA9IGJ1c19yZWdpc3Rlcl9ub3RpZmllcigmaTJjX2J1c190eXBlLCAmaTJjZGV2X25vdGlmaWVyKTsKIAlpZiAocmVzKQogCQlnb3RvIG91dF91bnJlZ19jbGFzczsKIAorCS8qIEJpbmQgdG8gYWxyZWFkeSBleGlzdGluZyBhZGFwdGVycyByaWdodCBhd2F5ICovCisJaTJjX2Zvcl9lYWNoX2RldihOVUxMLCBpMmNkZXZfYXR0YWNoX2FkYXB0ZXIpOworCiAJcmV0dXJuIDA7CiAKIG91dF91bnJlZ19jbGFzczoKQEAgLTYyNCw3ICs2NDEsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaTJjX2Rldl9leGl0KHZvaWQpCiB7Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY2Rldl9kcml2ZXIpOworCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKCZpMmNfYnVzX3R5cGUsICZpMmNkZXZfbm90aWZpZXIpOworCWkyY19mb3JfZWFjaF9kZXYoTlVMTCwgaTJjZGV2X2RldGFjaF9hZGFwdGVyKTsKIAljbGFzc19kZXN0cm95KGkyY19kZXZfY2xhc3MpOwogCXVucmVnaXN0ZXJfY2hyZGV2KEkyQ19NQUpPUiwgImkyYyIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQppbmRleCA4MWRmOTI1Li43Zjg3OWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgbGluayBvcmRlciBpcyBpbXBvcnRhbnQgaGVyZQogIwogCi1FWFRSQV9DRkxBR1MJCQkJKz0gLUlkcml2ZXJzL2lkZQorY2NmbGFncy15CQkJCTo9IC1JZHJpdmVycy9pZGUKIAogaWRlLWNvcmUteSArPSBpZGUubyBpZGUtaW9jdGxzLm8gaWRlLWlvLm8gaWRlLWlvcHMubyBpZGUtbGliLm8gaWRlLXByb2JlLm8gXAogCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXN5c2ZzLm8gaWRlLWRldnNldHMubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWU4MDIxNTQvTWFrZWZpbGUgYi9kcml2ZXJzL2llZWU4MDIxNTQvTWFrZWZpbGUKaW5kZXggZTBlOGUxYS4uNjg5OTkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlODAyMTU0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKIG9iai0kKENPTkZJR19JRUVFODAyMTU0X0ZBS0VIQVJEKSArPSBmYWtlaGFyZC5vCiAKLUVYVFJBX0NGTEFHUyArPSAtRERFQlVHIC1EQ09ORklHX0ZGRAorY2NmbGFncy15IDo9IC1EREVCVUcgLURDT05GSUdfRkZECmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L0tjb25maWcgYi9kcml2ZXJzL2lucHV0L0tjb25maWcKaW5kZXggMTkwM2MwZi4uMjNlODJlNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L0tjb25maWcKQEAgLTE2MSwxNiArMTYxLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFwbS1wb3dlci4KIAotY29uZmlnIFhFTl9LQkRERVZfRlJPTlRFTkQKLQl0cmlzdGF0ZSAiWGVuIHZpcnR1YWwga2V5Ym9hcmQgYW5kIG1vdXNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBYRU5fRkJERVZfRlJPTlRFTkQKLQlkZWZhdWx0IHkKLQlzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORAotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGZyb250LWVuZCBvZiB0aGUgWGVuIHZpcnR1YWwKLQkgIGtleWJvYXJkIGFuZCBtb3VzZSBkZXZpY2UgZHJpdmVyLiAgSXQgY29tbXVuaWNhdGVzIHdpdGggYSBiYWNrLWVuZAotCSAgaW4gYW5vdGhlciBkb21haW4uCi0KIGNvbW1lbnQgIklucHV0IERldmljZSBEcml2ZXJzIgogCiBzb3VyY2UgImRyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L01ha2VmaWxlCmluZGV4IDA5NjE0Y2UuLjBjNzg5NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9NYWtlZmlsZQpAQCAtMjQsNSArMjQsMyBAQAogb2JqLSQoQ09ORklHX0lOUFVUX01JU0MpCSs9IG1pc2MvCiAKIG9iai0kKENPTkZJR19JTlBVVF9BUE1QT1dFUikJKz0gYXBtLXBvd2VyLm8KLQotb2JqLSQoQ09ORklHX1hFTl9LQkRERVZfRlJPTlRFTkQpCSs9IHhlbi1rYmRmcm9udC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggYzg0NzFhMi4uN2Y0MmQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtMzIxLDYgKzMyMSw5IEBACiAJc3RydWN0IGlucHV0X2V2ZW50IGV2ZW50OwogCWludCByZXR2YWw7CiAKKwlpZiAoY291bnQgPCBpbnB1dF9ldmVudF9zaXplKCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZldmRldi0+bXV0ZXgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CkBAIC0zMzAsMTcgKzMzMywxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3aGlsZSAocmV0dmFsIDwgY291bnQpIHsKLQorCWRvIHsKIAkJaWYgKGlucHV0X2V2ZW50X2Zyb21fdXNlcihidWZmZXIgKyByZXR2YWwsICZldmVudCkpIHsKIAkJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKIAkJfQorCQlyZXR2YWwgKz0gaW5wdXRfZXZlbnRfc2l6ZSgpOwogCiAJCWlucHV0X2luamVjdF9ldmVudCgmZXZkZXYtPmhhbmRsZSwKIAkJCQkgICBldmVudC50eXBlLCBldmVudC5jb2RlLCBldmVudC52YWx1ZSk7Ci0JCXJldHZhbCArPSBpbnB1dF9ldmVudF9zaXplKCk7Ci0JfQorCX0gd2hpbGUgKHJldHZhbCArIGlucHV0X2V2ZW50X3NpemUoKSA8PSBjb3VudCk7CiAKICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZldmRldi0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC1wb2xsZGV2LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LXBvbGxkZXYuYwppbmRleCAwNTU5ZTMwLi4zMDM3ODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LXBvbGxkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LXBvbGxkZXYuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiB9OwogCiAvKioKLSAqIGlucHV0X2FsbG9jYXRlX3BvbGxlZF9kZXZpY2UgLSBhbGxvY2F0ZWQgbWVtb3J5IHBvbGxlZCBkZXZpY2UKKyAqIGlucHV0X2FsbG9jYXRlX3BvbGxlZF9kZXZpY2UgLSBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBvbGxlZCBkZXZpY2UKICAqCiAgKiBUaGUgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBwb2xsZWQgZGV2aWNlIGFuZCBhbHNvCiAgKiBmb3IgYW4gaW5wdXQgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvbGxlZCBkZXZpY2UuCkBAIC0yMzksNyArMjM5LDcgQEAKICAqIHdpdGggaW5wdXQgbGF5ZXIuIFRoZSBkZXZpY2Ugc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIGNhbGwgdG8KICAqIGlucHV0X2FsbG9jYXRlX3BvbGxlZF9kZXZpY2UoKS4gQ2FsbGVycyBzaG91bGQgYWxzbyBzZXQgdXAgcG9sbCgpCiAgKiBtZXRob2QgYW5kIHNldCB1cCBjYXBhYmlsaXRpZXMgKGlkLCBuYW1lLCBwaHlzLCBiaXRzKSBvZiB0aGUKLSAqIGNvcnJlc3BvbmluZyBpbnB1dF9kZXYgc3RydWN0dXJlLgorICogY29ycmVzcG9uZGluZyBpbnB1dF9kZXYgc3RydWN0dXJlLgogICovCiBpbnQgaW5wdXRfcmVnaXN0ZXJfcG9sbGVkX2RldmljZShzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IDExOTA1YjYuLmQ2ZThiZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTc5MSwyMiArNzkxLDkgQEAKIAlpbnQgcmV0dmFsOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGRldi0+Z2V0a2V5Y29kZSkgewotCQkvKgotCQkgKiBTdXBwb3J0IGZvciBsZWdhY3kgZHJpdmVycywgdGhhdCBkb24ndCBpbXBsZW1lbnQgdGhlIG5ldwotCQkgKiBpb2N0bHMKLQkJICovCi0JCXUzMiBzY2FuY29kZSA9IGtlLT5pbmRleDsKLQotCQltZW1jcHkoa2UtPnNjYW5jb2RlLCAmc2NhbmNvZGUsIHNpemVvZihzY2FuY29kZSkpOwotCQlrZS0+bGVuID0gc2l6ZW9mKHNjYW5jb2RlKTsKLQkJcmV0dmFsID0gZGV2LT5nZXRrZXljb2RlKGRldiwgc2NhbmNvZGUsICZrZS0+a2V5Y29kZSk7Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0gZGV2LT5nZXRrZXljb2RlX25ldyhkZXYsIGtlKTsKLQl9Ci0KKwlyZXR2YWwgPSBkZXYtPmdldGtleWNvZGUoZGV2LCBrZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTChpbnB1dF9nZXRfa2V5Y29kZSk7CkBAIC04MzEsMzUgKzgxOCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAKLQlpZiAoZGV2LT5zZXRrZXljb2RlKSB7Ci0JCS8qCi0JCSAqIFN1cHBvcnQgZm9yIGxlZ2FjeSBkcml2ZXJzLCB0aGF0IGRvbid0IGltcGxlbWVudCB0aGUgbmV3Ci0JCSAqIGlvY3RscwotCQkgKi8KLQkJdW5zaWduZWQgaW50IHNjYW5jb2RlOwotCi0JCXJldHZhbCA9IGlucHV0X3NjYW5jb2RlX3RvX3NjYWxhcihrZSwgJnNjYW5jb2RlKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gb3V0OwotCi0JCS8qCi0JCSAqIFdlIG5lZWQgdG8ga25vdyB0aGUgb2xkIHNjYW5jb2RlLCBpbiBvcmRlciB0byBnZW5lcmF0ZSBhCi0JCSAqIGtleXVwIGVmZmVjdCwgaWYgdGhlIHNldCBvcGVyYXRpb24gaGFwcGVucyBzdWNjZXNzZnVsbHkKLQkJICovCi0JCWlmICghZGV2LT5nZXRrZXljb2RlKSB7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlyZXR2YWwgPSBkZXYtPmdldGtleWNvZGUoZGV2LCBzY2FuY29kZSwgJm9sZF9rZXljb2RlKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gb3V0OwotCi0JCXJldHZhbCA9IGRldi0+c2V0a2V5Y29kZShkZXYsIHNjYW5jb2RlLCBrZS0+a2V5Y29kZSk7Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0gZGV2LT5zZXRrZXljb2RlX25ldyhkZXYsIGtlLCAmb2xkX2tleWNvZGUpOwotCX0KLQorCXJldHZhbCA9IGRldi0+c2V0a2V5Y29kZShkZXYsIGtlLCAmb2xkX2tleWNvZGUpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0xODQ2LDExICsxODA1LDExIEBACiAJCWRldi0+cmVwW1JFUF9QRVJJT0RdID0gMzM7CiAJfQogCi0JaWYgKCFkZXYtPmdldGtleWNvZGUgJiYgIWRldi0+Z2V0a2V5Y29kZV9uZXcpCi0JCWRldi0+Z2V0a2V5Y29kZV9uZXcgPSBpbnB1dF9kZWZhdWx0X2dldGtleWNvZGU7CisJaWYgKCFkZXYtPmdldGtleWNvZGUpCisJCWRldi0+Z2V0a2V5Y29kZSA9IGlucHV0X2RlZmF1bHRfZ2V0a2V5Y29kZTsKIAotCWlmICghZGV2LT5zZXRrZXljb2RlICYmICFkZXYtPnNldGtleWNvZGVfbmV3KQotCQlkZXYtPnNldGtleWNvZGVfbmV3ID0gaW5wdXRfZGVmYXVsdF9zZXRrZXljb2RlOworCWlmICghZGV2LT5zZXRrZXljb2RlKQorCQlkZXYtPnNldGtleWNvZGUgPSBpbnB1dF9kZWZhdWx0X3NldGtleWNvZGU7CiAKIAlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiaW5wdXQlbGQiLAogCQkgICAgICh1bnNpZ25lZCBsb25nKSBhdG9taWNfaW5jX3JldHVybigmaW5wdXRfbm8pIC0gMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKaW5kZXggYzdhOTIwMi4uYjE2YmVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwpAQCAtMTEyLDYgKzExMiwxNiBAQAogCSAgcmlnaHQtaGFuZCBjb2x1bW4gd2lsbCBiZSBpbnRlcnByZXRlZCBhcyB0aGUga2V5IHNob3duIGluIHRoZQogCSAgbGVmdC1oYW5kIGNvbHVtbi4KIAorY29uZmlnIEtFWUJPQVJEX1FUMTA3MAorICAgICAgIHRyaXN0YXRlICJBdG1lbCBBVDQyUVQxMDcwIFRvdWNoIFNlbnNvciBDaGlwIgorICAgICAgIGRlcGVuZHMgb24gSTJDCisgICAgICAgaGVscAorICAgICAgICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgQXRtZWwgQVQ0MlFUMTA3MCBRVG91Y2gKKyAgICAgICAgIFNlbnNvciBjaGlwIGFzIGlucHV0IGRldmljZS4KKworICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKyAgICAgICAgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcXQxMDcwCisKIGNvbmZpZyBLRVlCT0FSRF9RVDIxNjAKIAl0cmlzdGF0ZSAiQXRtZWwgQVQ0MlFUMjE2MCBUb3VjaCBTZW5zb3IgQ2hpcCIKIAlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCmluZGV4IDQ2OGM2MjcuLjg3OGU2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUykJKz0gb3BlbmNvcmVzLWtiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KQkJKz0gcHhhMjd4X2tleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfUFhBOTMwX1JPVEFSWSkJKz0gcHhhOTMwX3JvdGFyeS5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfUVQxMDcwKSAgICAgICAgICAgKz0gcXQxMDcwLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9RVDIxNjApCQkrPSBxdDIxNjAubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1NBTVNVTkcpCQkrPSBzYW1zdW5nLWtleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MpCQkrPSBzaF9rZXlzYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xtODMyMy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sbTgzMjMuYwppbmRleCBmN2MyYTE2Li5iNzMyODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xtODMyMy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG04MzIzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL2xtODMyMy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIApAQCAtODAyLDggKzgwMyw5IEBACiAgKiBXZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgc3VzcGVuZCB0aGUgY2hpcCwgYXMgaXQgYWxyZWFkeSBzd2l0Y2hlcyBvZmYKICAqIHdoZW4gdGhlcmUncyBubyBhY3Rpdml0eS4KICAqLwotc3RhdGljIGludCBsbTgzMjNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgbG04MzIzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGxtODMyM19jaGlwICpsbSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCkBAIC04MjEsOCArODIzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsbTgzMjNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGxtODMyM19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGxtODMyM19jaGlwICpsbSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCkBAIC04MzksMTEgKzg0MiwxMCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBsbTgzMjNfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIGxtODMyM19yZXN1bWUJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhsbTgzMjNfcG1fb3BzLCBsbTgzMjNfc3VzcGVuZCwgbG04MzIzX3Jlc3VtZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTgzMjNfaWRbXSA9IHsKIAl7ICJsbTgzMjMiLCAwIH0sCiAJeyB9CkBAIC04NTIsMTEgKzg1NCwxMCBAQAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtODMyM19pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImxtODMyMyIsCisJCS5wbQk9ICZsbTgzMjNfcG1fb3BzLAogCX0sCiAJLnByb2JlCQk9IGxtODMyM19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGxtODMyM19yZW1vdmUpLAotCS5zdXNwZW5kCT0gbG04MzIzX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBsbTgzMjNfcmVzdW1lLAogCS5pZF90YWJsZQk9IGxtODMyM19pZCwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG04MzIzX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWF4NzM1OV9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWF4NzM1OV9rZXlwYWQuYwppbmRleCA5MDkxZmY1Li41YWZlMzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21heDczNTlfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXg3MzU5X2tleXBhZC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAKQEAgLTI3MSw4ICsyNzIsMTAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBtYXg3MzU5X3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IG1heDczNTlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwogCW1heDczNTlfZmFsbF9kZWVwc2xlZXAoY2xpZW50KTsKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmY2xpZW50LT5kZXYpKQpAQCAtMjgxLDggKzI4NCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1heDczNTlfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG1heDczNTlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCiAJCWRpc2FibGVfaXJxX3dha2UoY2xpZW50LT5pcnEpOwogCkBAIC0yOTEsMTEgKzI5NiwxMCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBtYXg3MzU5X3N1c3BlbmQJTlVMTAotI2RlZmluZSBtYXg3MzU5X3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1heDczNTlfcG0sIG1heDczNTlfc3VzcGVuZCwgbWF4NzM1OV9yZXN1bWUpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbWF4NzM1OV9pZHNbXSA9IHsKIAl7ICJtYXg3MzU5IiwgMCB9LAogCXsgfQpAQCAtMzA1LDExICszMDksMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg3MzU5X2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAibWF4NzM1OSIsCisJCS5wbSAgID0gJm1heDczNTlfcG0sCiAJfSwKIAkucHJvYmUJCT0gbWF4NzM1OV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1heDczNTlfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IG1heDczNTlfc3VzcGVuZCwKLQkucmVzdW1lCQk9IG1heDczNTlfcmVzdW1lLAogCS5pZF90YWJsZQk9IG1heDczNTlfaWRzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tY3NfdG91Y2hrZXkuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWNzX3RvdWNoa2V5LmMKaW5kZXggNjNiODQ5ZC4uYWYxYWFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tY3NfdG91Y2hrZXkuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21jc190b3VjaGtleS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIG1jc190b3VjaGtleS5jIC0gVG91Y2hrZXkgZHJpdmVyIGZvciBNRUxGQVMgTUNTNTAwMC81MDgwIGNvbnRyb2xsZXIKKyAqIFRvdWNoa2V5IGRyaXZlciBmb3IgTUVMRkFTIE1DUzUwMDAvNTA4MCBjb250cm9sbGVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uTHRkCiAgKiBBdXRob3I6IEhldW5nSnVuIEtpbSA8cml2ZXJmdWwua2ltQHNhbXN1bmcuY29tPgpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKIC8qIE1DUzUwMDAgVG91Y2hrZXkgKi8KICNkZWZpbmUgTUNTNTAwMF9UT1VDSEtFWV9TVEFUVVMJCTB4MDQKQEAgLTQ1LDYgKzQ2LDggQEAKIH07CiAKIHN0cnVjdCBtY3NfdG91Y2hrZXlfZGF0YSB7CisJdm9pZCAoKnBvd2Vyb24pKGJvb2wpOworCiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJc3RydWN0IG1jc190b3VjaGtleV9jaGlwIGNoaXA7CkBAIC0xNjksNiArMTcyLDExIEBACiAJaWYgKHBkYXRhLT5jZmdfcGluKQogCQlwZGF0YS0+Y2ZnX3BpbigpOwogCisJaWYgKHBkYXRhLT5wb3dlcm9uKSB7CisJCWRhdGEtPnBvd2Vyb24gPSBwZGF0YS0+cG93ZXJvbjsKKwkJZGF0YS0+cG93ZXJvbih0cnVlKTsKKwl9CisKIAllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNsaWVudC0+aXJxLCBOVUxMLCBtY3NfdG91Y2hrZXlfaW50ZXJydXB0LAogCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsIGNsaWVudC0+ZGV2LmRyaXZlci0+bmFtZSwgZGF0YSk7CiAJaWYgKGVycm9yKSB7CkBAIC0xOTYsMTIgKzIwNCw1NyBAQAogCXN0cnVjdCBtY3NfdG91Y2hrZXlfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGRhdGEpOworCWlmIChkYXRhLT5wb3dlcm9uKQorCQlkYXRhLT5wb3dlcm9uKGZhbHNlKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkYXRhLT5pbnB1dF9kZXYpOwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG1jc190b3VjaGtleV9zaHV0ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtY3NfdG91Y2hrZXlfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKGRhdGEtPnBvd2Vyb24pCisJCWRhdGEtPnBvd2Vyb24oZmFsc2UpOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG1jc190b3VjaGtleV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWNzX3RvdWNoa2V5X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCisJLyogRGlzYWJsZSB0aGUgd29yayAqLworCWRpc2FibGVfaXJxKGNsaWVudC0+aXJxKTsKKworCS8qIEZpbmFsbHkgdHVybiBvZmYgdGhlIHBvd2VyICovCisJaWYgKGRhdGEtPnBvd2Vyb24pCisJCWRhdGEtPnBvd2Vyb24oZmFsc2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNzX3RvdWNoa2V5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1jc190b3VjaGtleV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKworCS8qIEVuYWJsZSB0aGUgZGV2aWNlIGZpcnN0ICovCisJaWYgKGRhdGEtPnBvd2Vyb24pCisJCWRhdGEtPnBvd2Vyb24odHJ1ZSk7CisKKwkvKiBFbmFibGUgaXJxIGFnYWluICovCisJZW5hYmxlX2lycShjbGllbnQtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobWNzX3RvdWNoa2V5X3BtX29wcywKKwkJCSBtY3NfdG91Y2hrZXlfc3VzcGVuZCwgbWNzX3RvdWNoa2V5X3Jlc3VtZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtY3NfdG91Y2hrZXlfaWRbXSA9IHsKIAl7ICJtY3M1MDAwX3RvdWNoa2V5IiwgTUNTNTAwMF9UT1VDSEtFWSB9LAogCXsgIm1jczUwODBfdG91Y2hrZXkiLCBNQ1M1MDgwX1RPVUNIS0VZIH0sCkBAIC0yMTMsOSArMjY2LDExIEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAibWNzX3RvdWNoa2V5IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZtY3NfdG91Y2hrZXlfcG1fb3BzLAogCX0sCiAJLnByb2JlCQk9IG1jc190b3VjaGtleV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1jc190b3VjaGtleV9yZW1vdmUpLAorCS5zaHV0ZG93biAgICAgICA9IG1jc190b3VjaGtleV9zaHV0ZG93biwKIAkuaWRfdGFibGUJPSBtY3NfdG91Y2hrZXlfaWQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXA0LWtleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwNC1rZXlwYWQuYwppbmRleCA0NWJkMDk3Li5jNTFhM2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXA0LWtleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcDQta2V5cGFkLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPHBsYXQvb21hcDQta2V5cGFkLmg+CiAKQEAgLTgwLDIwICs4MSw2IEBACiAJdW5zaWduZWQgc2hvcnQga2V5bWFwW107CiB9OwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgb21hcDRfa2V5cGFkX2NvbmZpZyhzdHJ1Y3Qgb21hcDRfa2V5cGFkICprZXlwYWRfZGF0YSkKLXsKLQlfX3Jhd193cml0ZWwoT01BUDRfVkFMX0ZVTkNUSU9OQUxDRkcsCi0JCQlrZXlwYWRfZGF0YS0+YmFzZSArIE9NQVA0X0tCRF9DVFJMKTsKLQlfX3Jhd193cml0ZWwoT01BUDRfVkFMX0RFQk9VTkNJTkdUSU1FLAotCQkJa2V5cGFkX2RhdGEtPmJhc2UgKyBPTUFQNF9LQkRfREVCT1VOQ0lOR1RJTUUpOwotCV9fcmF3X3dyaXRlbChPTUFQNF9WQUxfSVJRRElTQUJMRSwKLQkJCWtleXBhZF9kYXRhLT5iYXNlICsgT01BUDRfS0JEX0lSUVNUQVRVUyk7Ci0JX19yYXdfd3JpdGVsKE9NQVA0X0RFRl9JUlFFTkFCTEVfRVZFTlRFTiB8IE9NQVA0X0RFRl9JUlFFTkFCTEVfTE9OR0tFWSwKLQkJCWtleXBhZF9kYXRhLT5iYXNlICsgT01BUDRfS0JEX0lSUUVOQUJMRSk7Ci0JX19yYXdfd3JpdGVsKE9NQVA0X0RFRl9XVVBfRVZFTlRfRU5BIHwgT01BUDRfREVGX1dVUF9MT05HX0tFWV9FTkEsCi0JCQlrZXlwYWRfZGF0YS0+YmFzZSArIE9NQVA0X0tCRF9XQUtFVVBFTkFCTEUpOwotfQotCiAvKiBJbnRlcnJ1cHQgaGFuZGxlciAqLwogc3RhdGljIGlycXJldHVybl90IG9tYXA0X2tleXBhZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewpAQCAtMTQ0LDYgKzEzMSw0OSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGludCBvbWFwNF9rZXlwYWRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3Qgb21hcDRfa2V5cGFkICprZXlwYWRfZGF0YSA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaW5wdXQtPmRldi5wYXJlbnQpOworCisJZGlzYWJsZV9pcnEoa2V5cGFkX2RhdGEtPmlycSk7CisKKwlfX3Jhd193cml0ZWwoT01BUDRfVkFMX0ZVTkNUSU9OQUxDRkcsCisJCQlrZXlwYWRfZGF0YS0+YmFzZSArIE9NQVA0X0tCRF9DVFJMKTsKKwlfX3Jhd193cml0ZWwoT01BUDRfVkFMX0RFQk9VTkNJTkdUSU1FLAorCQkJa2V5cGFkX2RhdGEtPmJhc2UgKyBPTUFQNF9LQkRfREVCT1VOQ0lOR1RJTUUpOworCV9fcmF3X3dyaXRlbChPTUFQNF9WQUxfSVJRRElTQUJMRSwKKwkJCWtleXBhZF9kYXRhLT5iYXNlICsgT01BUDRfS0JEX0lSUVNUQVRVUyk7CisJX19yYXdfd3JpdGVsKE9NQVA0X0RFRl9JUlFFTkFCTEVfRVZFTlRFTiB8IE9NQVA0X0RFRl9JUlFFTkFCTEVfTE9OR0tFWSwKKwkJCWtleXBhZF9kYXRhLT5iYXNlICsgT01BUDRfS0JEX0lSUUVOQUJMRSk7CisJX19yYXdfd3JpdGVsKE9NQVA0X0RFRl9XVVBfRVZFTlRfRU5BIHwgT01BUDRfREVGX1dVUF9MT05HX0tFWV9FTkEsCisJCQlrZXlwYWRfZGF0YS0+YmFzZSArIE9NQVA0X0tCRF9XQUtFVVBFTkFCTEUpOworCisJZW5hYmxlX2lycShrZXlwYWRfZGF0YS0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwNF9rZXlwYWRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IG9tYXA0X2tleXBhZCAqa2V5cGFkX2RhdGEgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dCk7CisKKwlkaXNhYmxlX2lycShrZXlwYWRfZGF0YS0+aXJxKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCV9fcmF3X3dyaXRlbChPTUFQNF9WQUxfSVJRRElTQUJMRSwKKwkJICAgICBrZXlwYWRfZGF0YS0+YmFzZSArIE9NQVA0X0tCRF9JUlFFTkFCTEUpOworCisJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGtleXBhZF9kYXRhLT5iYXNlICsgT01BUDRfS0JEX0lSUVNUQVRVUyksCisJCQlrZXlwYWRfZGF0YS0+YmFzZSArIE9NQVA0X0tCRF9JUlFTVEFUVVMpOworCisJZW5hYmxlX2lycShrZXlwYWRfZGF0YS0+aXJxKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoaW5wdXQtPmRldi5wYXJlbnQpOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwNF9rZXlwYWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAljb25zdCBzdHJ1Y3Qgb21hcDRfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwpAQCAtMjI1LDYgKzI1NSw5IEBACiAJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gMHgwMDAxOwogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDAwMTsKIAorCWlucHV0X2Rldi0+b3BlbiA9IG9tYXA0X2tleXBhZF9vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSBvbWFwNF9rZXlwYWRfY2xvc2U7CisKIAlpbnB1dF9kZXYtPmtleWNvZGUJPSBrZXlwYWRfZGF0YS0+a2V5bWFwOwogCWlucHV0X2Rldi0+a2V5Y29kZXNpemUJPSBzaXplb2Yoa2V5cGFkX2RhdGEtPmtleW1hcFswXSk7CiAJaW5wdXRfZGV2LT5rZXljb2RlbWF4CT0gbWF4X2tleXM7CkBAIC0yMzksOCArMjcyLDYgQEAKIAltYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChwZGF0YS0+a2V5bWFwX2RhdGEsIHJvd19zaGlmdCwKIAkJCWlucHV0X2Rldi0+a2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCi0Jb21hcDRfa2V5cGFkX2NvbmZpZyhrZXlwYWRfZGF0YSk7Ci0KIAllcnJvciA9IHJlcXVlc3RfaXJxKGtleXBhZF9kYXRhLT5pcnEsIG9tYXA0X2tleXBhZF9pbnRlcnJ1cHQsCiAJCQkgICAgIElSUUZfVFJJR0dFUl9SSVNJTkcsCiAJCQkgICAgICJvbWFwNC1rZXlwYWQiLCBrZXlwYWRfZGF0YSk7CkBAIC0yNDksMTcgKzI4MCwxOSBAQAogCQlnb3RvIGVycl9mcmVlX2lucHV0OwogCX0KIAorCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoa2V5cGFkX2RhdGEtPmlucHV0KTsKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOwotCQlnb3RvIGVycl9mcmVlX2lycTsKKwkJZ290byBlcnJfcG1fZGlzYWJsZTsKIAl9CiAKLQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtleXBhZF9kYXRhKTsKIAlyZXR1cm4gMDsKIAotZXJyX2ZyZWVfaXJxOgorZXJyX3BtX2Rpc2FibGU6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCWZyZWVfaXJxKGtleXBhZF9kYXRhLT5pcnEsIGtleXBhZF9kYXRhKTsKIGVycl9mcmVlX2lucHV0OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CkBAIC0yNzgsNiArMzExLDkgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWZyZWVfaXJxKGtleXBhZF9kYXRhLT5pcnEsIGtleXBhZF9kYXRhKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtleXBhZF9kYXRhLT5pbnB1dCk7CiAKIAlpb3VubWFwKGtleXBhZF9kYXRhLT5iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcXQxMDcwLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3F0MTA3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTg0MDRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9xdDEwNzAuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqICBBdG1lbCBBVDQyUVQxMDcwIFFUb3VjaCBTZW5zb3IgQ29udHJvbGxlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgQXRtZWwKKyAqCisgKiAgQXV0aG9yczogQm8gU2hlbiA8dm9pY2Uuc2hlbkBhdG1lbC5jb20+CisgKgorICogIEJhc2Ugb24gQVQ0MlFUMjE2MCBkcml2ZXIgYnk6CisgKiAgUmFwaGFlbCBEZXJvc3NvIFBlcmVpcmEgPHJhcGhhZWxwZXJlaXJhQGdtYWlsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisvKiBBZGRyZXNzIGZvciBlYWNoIHJlZ2lzdGVyICovCisjZGVmaW5lIENISVBfSUQgICAgICAgICAgICAweDAwCisjZGVmaW5lIFFUMTA3MF9DSElQX0lEICAgICAweDJFCisKKyNkZWZpbmUgRldfVkVSU0lPTiAgICAgICAgIDB4MDEKKyNkZWZpbmUgUVQxMDcwX0ZXX1ZFUlNJT04gIDB4MTUKKworI2RlZmluZSBERVRfU1RBVFVTICAgICAgICAgMHgwMgorCisjZGVmaW5lIEtFWV9TVEFUVVMgICAgICAgICAweDAzCisKKy8qIENhbGlicmF0ZSAqLworI2RlZmluZSBDQUxJQlJBVEVfQ01EICAgICAgMHgzOAorI2RlZmluZSBRVDEwNzBfQ0FMX1RJTUUgICAgMjAwCisKKy8qIFJlc2V0ICovCisjZGVmaW5lIFJFU0VUICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIFFUMTA3MF9SRVNFVF9USU1FICAyNTUKKworLyogQVQ0MlFUMTA3MCBzdXBwb3J0IHVwIHRvIDcga2V5cyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHF0MTA3MF9rZXkyY29kZVtdID0geworCUtFWV8wLCBLRVlfMSwgS0VZXzIsIEtFWV8zLAorCUtFWV80LCBLRVlfNSwgS0VZXzYsCit9OworCitzdHJ1Y3QgcXQxMDcwX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tBUlJBWV9TSVpFKHF0MTA3MF9rZXkyY29kZSldOworCXU4IGxhc3Rfa2V5czsKK307CisKK3N0YXRpYyBpbnQgcXQxMDcwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJjYW4gbm90IHJlYWQgcmVnaXN0ZXIsIHJldHVybmVkICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBxdDEwNzBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiY2FuIG5vdCB3cml0ZSByZWdpc3RlciwgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBfX2RldmluaXQgcXQxMDcwX2lkZW50aWZ5KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IGlkLCB2ZXI7CisKKwkvKiBSZWFkIENoaXAgSUQgKi8KKwlpZCA9IHF0MTA3MF9yZWFkKGNsaWVudCwgQ0hJUF9JRCk7CisJaWYgKGlkICE9IFFUMTA3MF9DSElQX0lEKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiSUQgJWQgbm90IHN1cHBvcnRlZFxuIiwgaWQpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogUmVhZCBmaXJtd2FyZSB2ZXJzaW9uICovCisJdmVyID0gcXQxMDcwX3JlYWQoY2xpZW50LCBGV19WRVJTSU9OKTsKKwlpZiAodmVyIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImNvdWxkIG5vdCByZWFkIHRoZSBmaXJtd2FyZSB2ZXJzaW9uXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkFUNDJRVDEwNzAgZmlybXdhcmUgdmVyc2lvbiAleFxuIiwgdmVyKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcXQxMDcwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHF0MTA3MF9kYXRhICpkYXRhID0gZGV2X2lkOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBkYXRhLT5pbnB1dDsKKwlpbnQgaTsKKwl1OCBuZXdfa2V5cywga2V5dmFsLCBtYXNrID0gMHgwMTsKKworCS8qIFJlYWQgdGhlIGRldGVjdGVkIHN0YXR1cyByZWdpc3RlciwgdGh1cyBjbGVhcmluZyBpbnRlcnJ1cHQgKi8KKwlxdDEwNzBfcmVhZChjbGllbnQsIERFVF9TVEFUVVMpOworCisJLyogUmVhZCB3aGljaCBrZXkgY2hhbmdlZCAqLworCW5ld19rZXlzID0gcXQxMDcwX3JlYWQoY2xpZW50LCBLRVlfU1RBVFVTKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHF0MTA3MF9rZXkyY29kZSk7IGkrKykgeworCQlrZXl2YWwgPSBuZXdfa2V5cyAmIG1hc2s7CisJCWlmICgoZGF0YS0+bGFzdF9rZXlzICYgbWFzaykgIT0ga2V5dmFsKQorCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgZGF0YS0+a2V5Y29kZXNbaV0sIGtleXZhbCk7CisJCW1hc2sgPDw9IDE7CisJfQorCWlucHV0X3N5bmMoaW5wdXQpOworCisJZGF0YS0+bGFzdF9rZXlzID0gbmV3X2tleXM7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxdDEwNzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHF0MTA3MF9kYXRhICpkYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCWludCBpOworCWludCBlcnI7CisKKwllcnIgPSBpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEUpOworCWlmICghZXJyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXMgYWRhcHRlciBub3Qgc3VwcG9ydGVkXG4iLAorCQkJZGV2X2RyaXZlcl9zdHJpbmcoJmNsaWVudC0+YWRhcHRlci0+ZGV2KSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghY2xpZW50LT5pcnEpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJwbGVhc2UgYXNzaWduIHRoZSBpcnEgdG8gdGhpcyBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZGVudGlmeSB0aGUgcXQxMDcwIGNoaXAgKi8KKwlpZiAoIXF0MTA3MF9pZGVudGlmeShjbGllbnQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXQxMDcwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghZGF0YSB8fCAhaW5wdXQpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpbnN1ZmZpY2llbnQgbWVtb3J5XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCWRhdGEtPmlucHV0ID0gaW5wdXQ7CisJZGF0YS0+aXJxID0gY2xpZW50LT5pcnE7CisKKwlpbnB1dC0+bmFtZSA9ICJBVDQyUVQxMDcwIFFUb3VjaCBTZW5zb3IiOworCWlucHV0LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OworCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKworCS8qIEFkZCB0aGUga2V5Y29kZSAqLworCWlucHV0LT5rZXljb2RlID0gZGF0YS0+a2V5Y29kZXM7CisJaW5wdXQtPmtleWNvZGVzaXplID0gc2l6ZW9mKGRhdGEtPmtleWNvZGVzWzBdKTsKKwlpbnB1dC0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUocXQxMDcwX2tleTJjb2RlKTsKKworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShxdDEwNzBfa2V5MmNvZGUpOyBpKyspIHsKKwkJZGF0YS0+a2V5Y29kZXNbaV0gPSBxdDEwNzBfa2V5MmNvZGVbaV07CisJCV9fc2V0X2JpdChxdDEwNzBfa2V5MmNvZGVbaV0sIGlucHV0LT5rZXliaXQpOworCX0KKworCS8qIENhbGlicmF0ZSBkZXZpY2UgKi8KKwlxdDEwNzBfd3JpdGUoY2xpZW50LCBDQUxJQlJBVEVfQ01ELCAxKTsKKwltc2xlZXAoUVQxMDcwX0NBTF9USU1FKTsKKworCS8qIFNvZnQgcmVzZXQgKi8KKwlxdDEwNzBfd3JpdGUoY2xpZW50LCBSRVNFVCwgMSk7CisJbXNsZWVwKFFUMTA3MF9SRVNFVF9USU1FKTsKKworCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNsaWVudC0+aXJxLCBOVUxMLCBxdDEwNzBfaW50ZXJydXB0LAorCQlJUlFGX1RSSUdHRVJfTk9ORSwgY2xpZW50LT5kZXYuZHJpdmVyLT5uYW1lLCBkYXRhKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbCB0byByZXF1ZXN0IGlycVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCS8qIFJlZ2lzdGVyIHRoZSBpbnB1dCBkZXZpY2UgKi8KKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+aW5wdXQpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisKKwkvKiBSZWFkIHRvIGNsZWFyIHRoZSBjaGFuZyBsaW5lICovCisJcXQxMDcwX3JlYWQoY2xpZW50LCBERVRfU1RBVFVTKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGRhdGEpOworZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBxdDEwNzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHF0MTA3MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwkvKiBSZWxlYXNlIElSUSAqLworCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBkYXRhKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlucHV0KTsKKwlrZnJlZShkYXRhKTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBxdDEwNzBfaWRbXSA9IHsKKwl7ICJxdDEwNzAiLCAwIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHF0MTA3MF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAicXQxMDcwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuaWRfdGFibGUJPSBxdDEwNzBfaWQsCisJLnByb2JlCQk9IHF0MTA3MF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHF0MTA3MF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcXQxMDcwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnF0MTA3MF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQocXQxMDcwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcXQxMDcwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmcXQxMDcwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChxdDEwNzBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkJvIFNoZW4gPHZvaWNlLnNoZW5AYXRtZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFUNDJRVDEwNzAgUVRvdWNoIHNlbnNvciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90YzM1ODl4LWtleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90YzM1ODl4LWtleXBhZC5jCmluZGV4IGRiYmU3NjEuLjk5MTIyZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGMzNTg5eC1rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RjMzU4OXgta2V5cGFkLmMKQEAgLTQwMiw3ICs0MDIsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IHRjMzU4OXhfa2V5cGFkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKQEAgLTQzOSwxOSArNDM5LDE5IEBACiAKIAlyZXR1cm4gMDsKIH0KLQotc3RhdGljIGNvbnN0IFNJTVBMRV9ERVZfUE1fT1BTKHRjMzU4OXhfa2V5cGFkX2Rldl9wbV9vcHMsCi0JCQkgICAgICAgdGMzNTg5eF9rZXlwYWRfc3VzcGVuZCwgdGMzNTg5eF9rZXlwYWRfcmVzdW1lKTsKICNlbmRpZgogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModGMzNTg5eF9rZXlwYWRfZGV2X3BtX29wcywKKwkJCSB0YzM1ODl4X2tleXBhZF9zdXNwZW5kLCB0YzM1ODl4X2tleXBhZF9yZXN1bWUpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0YzM1ODl4X2tleXBhZF9kcml2ZXIgPSB7Ci0JLmRyaXZlci5uYW1lICA9ICJ0YzM1ODl4LWtleXBhZCIsCi0JLmRyaXZlci5vd25lciA9IFRISVNfTU9EVUxFLAotI2lmZGVmIENPTkZJR19QTQotCS5kcml2ZXIucG0gPSAmdGMzNTg5eF9rZXlwYWRfZGV2X3BtX29wcywKLSNlbmRpZgotCS5wcm9iZSA9IHRjMzU4OXhfa2V5cGFkX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0YzM1ODl4X2tleXBhZF9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInRjMzU4OXgta2V5cGFkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZ0YzM1ODl4X2tleXBhZF9kZXZfcG1fb3BzLAorCX0sCisJLnByb2JlCT0gdGMzNTg5eF9rZXlwYWRfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHRjMzU4OXhfa2V5cGFkX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB0YzM1ODl4X2tleXBhZF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RjYTY0MTYta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RjYTY0MTYta2V5cGFkLmMKaW5kZXggODAwZmJjYy4uM2FmZWEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90Y2E2NDE2LWtleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGNhNjQxNi1rZXlwYWQuYwpAQCAtMjk3LDYgKzI5Nyw3IEBACiAJfQogCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7CisJZGV2aWNlX2luaXRfd2FrZXVwKCZjbGllbnQtPmRldiwgMSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMzI2LDEwICszMjcsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCB0Y2E2NDE2X2tleXBhZF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB0Y2E2NDE2X2tleXBhZF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKGNoaXAtPmlycW51bSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0Y2E2NDE2X2tleXBhZF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHRjYTY0MTZfa2V5cGFkX2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQlkaXNhYmxlX2lycV93YWtlKGNoaXAtPmlycW51bSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModGNhNjQxNl9rZXlwYWRfZGV2X3BtX29wcywKKwkJCSB0Y2E2NDE2X2tleXBhZF9zdXNwZW5kLCB0Y2E2NDE2X2tleXBhZF9yZXN1bWUpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGNhNjQxNl9rZXlwYWRfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gInRjYTY0MTYta2V5cGFkIiwKKwkJLnBtCT0gJnRjYTY0MTZfa2V5cGFkX2Rldl9wbV9vcHMsCiAJfSwKIAkucHJvYmUJCT0gdGNhNjQxNl9rZXlwYWRfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0Y2E2NDE2X2tleXBhZF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCBiMGM2NzcyLi5mOWNmMDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtNDU0LDQgKzQ1NCwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY21hMzAwMF9kMHhfaTJjLgogCitjb25maWcgSU5QVVRfWEVOX0tCRERFVl9GUk9OVEVORAorCXRyaXN0YXRlICJYZW4gdmlydHVhbCBrZXlib2FyZCBhbmQgbW91c2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFhFTl9GQkRFVl9GUk9OVEVORAorCWRlZmF1bHQgeQorCXNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5ECisJaGVscAorCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyB0aGUgZnJvbnQtZW5kIG9mIHRoZSBYZW4gdmlydHVhbAorCSAga2V5Ym9hcmQgYW5kIG1vdXNlIGRldmljZSBkcml2ZXIuICBJdCBjb21tdW5pY2F0ZXMgd2l0aCBhIGJhY2stZW5kCisJICBpbiBhbm90aGVyIGRvbWFpbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeGVuLWtiZGZyb250LgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCmluZGV4IDliNDc5NzEuLmUzZjc5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKQEAgLTQyLDUgKzQyLDYgQEAKIG9iai0kKENPTkZJR19JTlBVVF9VSU5QVVQpCQkrPSB1aW5wdXQubwogb2JqLSQoQ09ORklHX0lOUFVUX1dJU1RST05fQlROUykJKz0gd2lzdHJvbl9idG5zLm8KIG9iai0kKENPTkZJR19JTlBVVF9XTTgzMVhfT04pCQkrPSB3bTgzMXgtb24ubworb2JqLSQoQ09ORklHX0lOUFVUX1hFTl9LQkRERVZfRlJPTlRFTkQpCSs9IHhlbi1rYmRmcm9udC5vCiBvYmotJChDT05GSUdfSU5QVVRfWUVBTElOSykJCSs9IHllYWxpbmsubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LWkyYy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2FkNzE0eC1pMmMuYwppbmRleCAyYmVmOGZhLi5lMjFkZWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LWkyYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHgtaTJjLmMKQEAgLTEwLDIzICsxMCwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlICJhZDcxNHguaCIKIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhZDcxNHhfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitzdGF0aWMgaW50IGFkNzE0eF9pMmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGFkNzE0eF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlyZXR1cm4gYWQ3MTR4X2Rpc2FibGUoaTJjX2dldF9jbGllbnRkYXRhKHRvX2kyY19jbGllbnQoZGV2KSkpOwogfQogCi1zdGF0aWMgaW50IGFkNzE0eF9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGFkNzE0eF9pMmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gYWQ3MTR4X2VuYWJsZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIGFkNzE0eF9lbmFibGUoaTJjX2dldF9jbGllbnRkYXRhKHRvX2kyY19jbGllbnQoZGV2KSkpOwogfQotI2Vsc2UKLSMgZGVmaW5lIGFkNzE0eF9pMmNfc3VzcGVuZCBOVUxMCi0jIGRlZmluZSBhZDcxNHhfaTJjX3Jlc3VtZSAgTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhhZDcxNHhfaTJjX3BtLCBhZDcxNHhfaTJjX3N1c3BlbmQsIGFkNzE0eF9pMmNfcmVzdW1lKTsKKwogc3RhdGljIGludCBhZDcxNHhfaTJjX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIHNob3J0IGRhdGEpCiB7CkBAIC0xMTQsMTEgKzExNCwxMCBAQAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkNzE0eF9pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gImFkNzE0eF9jYXB0b3VjaCIsCisJCS5wbSAgID0gJmFkNzE0eF9pMmNfcG0sCiAJfSwKIAkucHJvYmUgICAgPSBhZDcxNHhfaTJjX3Byb2JlLAogCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGFkNzE0eF9pMmNfcmVtb3ZlKSwKLQkuc3VzcGVuZCAgPSBhZDcxNHhfaTJjX3N1c3BlbmQsCi0JLnJlc3VtZQkgID0gYWQ3MTR4X2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gYWQ3MTR4X2lkLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2FkNzE0eC1zcGkuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHgtc3BpLmMKaW5kZXggN2Y4ZGVkZi4uNDEyMGRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2FkNzE0eC1zcGkuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LXNwaS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CS8qIEJVU19JMkMgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgImFkNzE0eC5oIgogCkBAIC0xNiwyMCArMTcsMTkgQEAKICNkZWZpbmUgQUQ3MTR4X1NQSV9SRUFEICAgICAgICAgICAgQklUKDEwKQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGFkNzE0eF9zcGlfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgYWQ3MTR4X3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gYWQ3MTR4X2Rpc2FibGUoc3BpX2dldF9kcnZkYXRhKHNwaSkpOworCXJldHVybiBhZDcxNHhfZGlzYWJsZShzcGlfZ2V0X2RydmRhdGEodG9fc3BpX2RldmljZShkZXYpKSk7CiB9CiAKLXN0YXRpYyBpbnQgYWQ3MTR4X3NwaV9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyBpbnQgYWQ3MTR4X3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBhZDcxNHhfZW5hYmxlKHNwaV9nZXRfZHJ2ZGF0YShzcGkpKTsKKwlyZXR1cm4gYWQ3MTR4X2VuYWJsZShzcGlfZ2V0X2RydmRhdGEodG9fc3BpX2RldmljZShkZXYpKSk7CiB9Ci0jZWxzZQotIyBkZWZpbmUgYWQ3MTR4X3NwaV9zdXNwZW5kIE5VTEwKLSMgZGVmaW5lIGFkNzE0eF9zcGlfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGFkNzE0eF9zcGlfcG0sIGFkNzE0eF9zcGlfc3VzcGVuZCwgYWQ3MTR4X3NwaV9yZXN1bWUpOworCiBzdGF0aWMgaW50IGFkNzE0eF9zcGlfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHJlZywKIAkJdW5zaWduZWQgc2hvcnQgKmRhdGEpCiB7CkBAIC03OSwxMSArNzksMTAgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJhZDcxNHhfY2FwdG91Y2giLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJmFkNzE0eF9zcGlfcG0sCiAJfSwKIAkucHJvYmUJCT0gYWQ3MTR4X3NwaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkNzE0eF9zcGlfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGFkNzE0eF9zcGlfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGFkNzE0eF9zcGlfcmVzdW1lLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgYWQ3MTR4X3NwaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC1pMmMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LWkyYy5jCmluZGV4IDA3Nzk3MjQuLmNjYWNmMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LWkyYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LWkyYy5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgImFkeGwzNHguaCIKIAogc3RhdGljIGludCBhZHhsMzR4X3NtYnVzX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlZykKQEAgLTEwNSw4ICsxMDYsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGFkeGwzNHhfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitzdGF0aWMgaW50IGFkeGwzNHhfaTJjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGFkeGwzNHggKmFjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlhZHhsMzR4X3N1c3BlbmQoYWMpOwpAQCAtMTE0LDE5ICsxMTYsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhZHhsMzR4X2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgYWR4bDM0eF9pMmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBhZHhsMzR4ICphYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJYWR4bDM0eF9yZXN1bWUoYWMpOwogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotIyBkZWZpbmUgYWR4bDM0eF9pMmNfc3VzcGVuZCBOVUxMCi0jIGRlZmluZSBhZHhsMzR4X2kyY19yZXN1bWUgIE5VTEwKICNlbmRpZgogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYWR4bDM0eF9pMmNfcG0sIGFkeGwzNHhfaTJjX3N1c3BlbmQsCisJCQkgYWR4bDM0eF9pMmNfcmVzdW1lKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkeGwzNHhfaWRbXSA9IHsKIAl7ICJhZHhsMzR4IiwgMCB9LAogCXsgfQpAQCAtMTM4LDExICsxNDEsMTAgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJhZHhsMzR4IiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZhZHhsMzR4X2kyY19wbSwKIAl9LAogCS5wcm9iZSAgICA9IGFkeGwzNHhfaTJjX3Byb2JlLAogCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGFkeGwzNHhfaTJjX3JlbW92ZSksCi0JLnN1c3BlbmQgID0gYWR4bDM0eF9pMmNfc3VzcGVuZCwKLQkucmVzdW1lICAgPSBhZHhsMzR4X2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gYWR4bDM0eF9pZCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LXNwaS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHgtc3BpLmMKaW5kZXggNzgyZGU5ZS4uZjI5ZGUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHgtc3BpLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHgtc3BpLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgkvKiBCVVNfU1BJICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJhZHhsMzR4LmgiCiAKQEAgLTU3LDcgKzU4LDcgQEAKIAlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhZHhsMzR4X2J1c19vcHMgYWR4MTM0eF9zcGlfYm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWR4bDM0eF9idXNfb3BzIGFkeGwzNHhfc3BpX2JvcHMgPSB7CiAJLmJ1c3R5cGUJPSBCVVNfU1BJLAogCS53cml0ZQkJPSBhZHhsMzR4X3NwaV93cml0ZSwKIAkucmVhZAkJPSBhZHhsMzR4X3NwaV9yZWFkLApAQCAtNzYsNyArNzcsNyBAQAogCiAJYWMgPSBhZHhsMzR4X3Byb2JlKCZzcGktPmRldiwgc3BpLT5pcnEsCiAJCQkgICBzcGktPm1heF9zcGVlZF9oeiA+IE1BWF9GUkVRX05PX0ZJRk9ERUxBWSwKLQkJCSAgICZhZHgxMzR4X3NwaV9ib3BzKTsKKwkJCSAgICZhZHhsMzR4X3NwaV9ib3BzKTsKIAogCWlmIChJU19FUlIoYWMpKQogCQlyZXR1cm4gUFRSX0VSUihhYyk7CkBAIC05NCw4ICs5NSw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgYWR4bDM0eF9zcGlfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgYWR4bDM0eF9zcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYWR4bDM0eCAqYWMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAogCWFkeGwzNHhfc3VzcGVuZChhYyk7CkBAIC0xMDMsMjkgKzEwNSwyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFkeGwzNHhfc3BpX3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIGludCBhZHhsMzR4X3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CiAJc3RydWN0IGFkeGwzNHggKmFjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAKIAlhZHhsMzR4X3Jlc3VtZShhYyk7CiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jIGRlZmluZSBhZHhsMzR4X3NwaV9zdXNwZW5kIE5VTEwKLSMgZGVmaW5lIGFkeGwzNHhfc3BpX3Jlc3VtZSAgTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhhZHhsMzR4X3NwaV9wbSwgYWR4bDM0eF9zcGlfc3VzcGVuZCwKKwkJCSBhZHhsMzR4X3NwaV9yZXN1bWUpOworCiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWR4bDM0eF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiYWR4bDM0eCIsCiAJCS5idXMgPSAmc3BpX2J1c190eXBlLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJmFkeGwzNHhfc3BpX3BtLAogCX0sCiAJLnByb2JlICAgPSBhZHhsMzR4X3NwaV9wcm9iZSwKIAkucmVtb3ZlICA9IF9fZGV2ZXhpdF9wKGFkeGwzNHhfc3BpX3JlbW92ZSksCi0JLnN1c3BlbmQgPSBhZHhsMzR4X3NwaV9zdXNwZW5kLAotCS5yZXN1bWUgID0gYWR4bDM0eF9zcGlfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWR4bDM0eF9zcGlfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYwppbmRleCAwYjBlOWJlLi45Y2NkYjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYwpAQCAtNjEyLDggKzYxMiw4IEBACiAJaWRldi0+b3BlbiA9IGF0aV9yZW1vdGUyX29wZW47CiAJaWRldi0+Y2xvc2UgPSBhdGlfcmVtb3RlMl9jbG9zZTsKIAotCWlkZXYtPmdldGtleWNvZGVfbmV3ID0gYXRpX3JlbW90ZTJfZ2V0a2V5Y29kZTsKLQlpZGV2LT5zZXRrZXljb2RlX25ldyA9IGF0aV9yZW1vdGUyX3NldGtleWNvZGU7CisJaWRldi0+Z2V0a2V5Y29kZSA9IGF0aV9yZW1vdGUyX2dldGtleWNvZGU7CisJaWRldi0+c2V0a2V5Y29kZSA9IGF0aV9yZW1vdGUyX3NldGtleWNvZGU7CiAKIAlpZGV2LT5uYW1lID0gYXIyLT5uYW1lOwogCWlkZXYtPnBoeXMgPSBhcjItPnBoeXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKaW5kZXggODI1NDJhMS4uMzY0YmRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwpAQCAtMzQ3LDggKzM0Nyw3IEBACiB7CiAJc3RydWN0IHVpbnB1dF91c2VyX2RldgkqdXNlcl9kZXY7CiAJc3RydWN0IGlucHV0X2RldgkqZGV2OwotCWNoYXIJCQkqbmFtZTsKLQlpbnQJCQlpLCBzaXplOworCWludAkJCWk7CiAJaW50CQkJcmV0dmFsOwogCiAJaWYgKGNvdW50ICE9IHNpemVvZihzdHJ1Y3QgdWlucHV0X3VzZXJfZGV2KSkKQEAgLTM2MiwzMCArMzYxLDI1IEBACiAKIAlkZXYgPSB1ZGV2LT5kZXY7CiAKLQl1c2VyX2RldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1aW5wdXRfdXNlcl9kZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVzZXJfZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcih1c2VyX2RldiwgYnVmZmVyLCBzaXplb2Yoc3RydWN0IHVpbnB1dF91c2VyX2RldikpKSB7Ci0JCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9CisJdXNlcl9kZXYgPSBtZW1kdXBfdXNlcihidWZmZXIsIHNpemVvZihzdHJ1Y3QgdWlucHV0X3VzZXJfZGV2KSk7CisJaWYgKElTX0VSUih1c2VyX2RldikpCisJCXJldHVybiBQVFJfRVJSKHVzZXJfZGV2KTsKIAogCXVkZXYtPmZmX2VmZmVjdHNfbWF4ID0gdXNlcl9kZXYtPmZmX2VmZmVjdHNfbWF4OwogCi0Jc2l6ZSA9IHN0cm5sZW4odXNlcl9kZXYtPm5hbWUsIFVJTlBVVF9NQVhfTkFNRV9TSVpFKSArIDE7Ci0JaWYgKCFzaXplKSB7CisJLyogRW5zdXJlIG5hbWUgaXMgZmlsbGVkIGluICovCisJaWYgKCF1c2VyX2Rldi0+bmFtZVswXSkgewogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJa2ZyZWUoZGV2LT5uYW1lKTsKLQlkZXYtPm5hbWUgPSBuYW1lID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5hbWUpIHsKKwlkZXYtPm5hbWUgPSBrc3RybmR1cCh1c2VyX2Rldi0+bmFtZSwgVUlOUFVUX01BWF9OQU1FX1NJWkUsCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5uYW1lKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdDsKIAl9Ci0Jc3RybGNweShuYW1lLCB1c2VyX2Rldi0+bmFtZSwgc2l6ZSk7CiAKIAlkZXYtPmlkLmJ1c3R5cGUJPSB1c2VyX2Rldi0+aWQuYnVzdHlwZTsKIAlkZXYtPmlkLnZlbmRvcgk9IHVzZXJfZGV2LT5pZC52ZW5kb3I7CkBAIC02MjIsNyArNjE2LDYgQEAKIAlzdHJ1Y3QgdWlucHV0X2ZmX3VwbG9hZCBmZl91cDsKIAlzdHJ1Y3QgdWlucHV0X2ZmX2VyYXNlICBmZl9lcmFzZTsKIAlzdHJ1Y3QgdWlucHV0X3JlcXVlc3QgICAqcmVxOwotCWludCAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKIAljaGFyCQkJKnBoeXM7CiAKIAlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnVkZXYtPm11dGV4KTsKQEAgLTY4OSwyNCArNjgyLDE1IEBACiAJCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWxlbmd0aCA9IHN0cm5sZW5fdXNlcihwLCAxMDI0KTsKLQkJCWlmIChsZW5ndGggPD0gMCkgewotCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7CisKKwkJCXBoeXMgPSBzdHJuZHVwX3VzZXIocCwgMTAyNCk7CisJCQlpZiAoSVNfRVJSKHBoeXMpKSB7CisJCQkJcmV0dmFsID0gUFRSX0VSUihwaHlzKTsKKwkJCQlnb3RvIG91dDsKIAkJCX0KKwogCQkJa2ZyZWUodWRldi0+ZGV2LT5waHlzKTsKLQkJCXVkZXYtPmRldi0+cGh5cyA9IHBoeXMgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXBoeXMpIHsKLQkJCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKHBoeXMsIHAsIGxlbmd0aCkpIHsKLQkJCQl1ZGV2LT5kZXYtPnBoeXMgPSBOVUxMOwotCQkJCWtmcmVlKHBoeXMpOwotCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlwaHlzW2xlbmd0aCAtIDFdID0gJ1wwJzsKKwkJCXVkZXYtPmRldi0+cGh5cyA9IHBoeXM7CiAJCQlicmVhazsKIAogCQljYXNlIFVJX0JFR0lOX0ZGX1VQTE9BRDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQveGVuLWtiZGZyb250LmMgYi9kcml2ZXJzL2lucHV0L21pc2MveGVuLWtiZGZyb250LmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gZHJpdmVycy9pbnB1dC94ZW4ta2JkZnJvbnQuYwpyZW5hbWUgdG8gZHJpdmVycy9pbnB1dC9taXNjL3hlbi1rYmRmcm9udC5jCmluZGV4IDdmODVhODYuLjcwNzdmOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQveGVuLWtiZGZyb250LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3hlbi1rYmRmcm9udC5jCkBAIC0xMSwxMiArMTEsNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0vKgotICogVE9ETzoKLSAqCi0gKiBTd2l0Y2ggdG8gZ3JhbnQgdGFibGVzIHRvZ2V0aGVyIHdpdGggeGVuLWZiZnJvbnQuYy4KLSAqLwotCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTMwLDYgKzI0LDggQEAKICNpbmNsdWRlIDx4ZW4veGVuLmg+CiAjaW5jbHVkZSA8eGVuL2V2ZW50cy5oPgogI2luY2x1ZGUgPHhlbi9wYWdlLmg+CisjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vZmJpZi5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8va2JkaWYuaD4KICNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CkBAIC0zOCw2ICszNCw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqa2JkOwogCXN0cnVjdCBpbnB1dF9kZXYgKnB0cjsKIAlzdHJ1Y3QgeGVua2JkX3BhZ2UgKnBhZ2U7CisJaW50IGdyZWY7CiAJaW50IGlycTsKIAlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGJkZXY7CiAJY2hhciBwaHlzWzMyXTsKQEAgLTExMCw3ICsxMDcsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgeGVua2JkX3Byb2JlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgeGVuYnVzX2RldmljZV9pZCAqaWQpCiB7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0LCBpLCBhYnM7CiAJc3RydWN0IHhlbmtiZF9pbmZvICppbmZvOwogCXN0cnVjdCBpbnB1dF9kZXYgKmtiZCwgKnB0cjsKIApAQCAtMTIyLDEyICsxMTksMTggQEAKIAlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKIAlpbmZvLT54YmRldiA9IGRldjsKIAlpbmZvLT5pcnEgPSAtMTsKKwlpbmZvLT5ncmVmID0gLTE7CiAJc25wcmludGYoaW5mby0+cGh5cywgc2l6ZW9mKGluZm8tPnBoeXMpLCAieGVuYnVzLyVzIiwgZGV2LT5ub2RlbmFtZSk7CiAKIAlpbmZvLT5wYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCWlmICghaW5mby0+cGFnZSkKIAkJZ290byBlcnJvcl9ub21lbTsKIAorCWlmICh4ZW5idXNfc2NhbmYoWEJUX05JTCwgZGV2LT5vdGhlcmVuZCwgImZlYXR1cmUtYWJzLXBvaW50ZXIiLCAiJWQiLCAmYWJzKSA8IDApCisJCWFicyA9IDA7CisJaWYgKGFicykKKwkJeGVuYnVzX3ByaW50ZihYQlRfTklMLCBkZXYtPm5vZGVuYW1lLCAicmVxdWVzdC1hYnMtcG9pbnRlciIsICIxIik7CisKIAkvKiBrZXlib2FyZCAqLwogCWtiZCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICgha2JkKQpAQCAtMTM3LDExICsxNDAsMTIgQEAKIAlrYmQtPmlkLmJ1c3R5cGUgPSBCVVNfUENJOwogCWtiZC0+aWQudmVuZG9yID0gMHg1ODUzOwogCWtiZC0+aWQucHJvZHVjdCA9IDB4ZmZmZjsKLQlrYmQtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7CisKKwlfX3NldF9iaXQoRVZfS0VZLCBrYmQtPmV2Yml0KTsKIAlmb3IgKGkgPSBLRVlfRVNDOyBpIDwgS0VZX1VOS05PV047IGkrKykKLQkJc2V0X2JpdChpLCBrYmQtPmtleWJpdCk7CisJCV9fc2V0X2JpdChpLCBrYmQtPmtleWJpdCk7CiAJZm9yIChpID0gS0VZX09LOyBpIDwgS0VZX01BWDsgaSsrKQotCQlzZXRfYml0KGksIGtiZC0+a2V5Yml0KTsKKwkJX19zZXRfYml0KGksIGtiZC0+a2V5Yml0KTsKIAogCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShrYmQpOwogCWlmIChyZXQpIHsKQEAgLTE2MCwxMiArMTY0LDIwIEBACiAJcHRyLT5pZC5idXN0eXBlID0gQlVTX1BDSTsKIAlwdHItPmlkLnZlbmRvciA9IDB4NTg1MzsKIAlwdHItPmlkLnByb2R1Y3QgPSAweGZmZmU7Ci0JcHRyLT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCkgfCBCSVQoRVZfQUJTKTsKKworCWlmIChhYnMpIHsKKwkJX19zZXRfYml0KEVWX0FCUywgcHRyLT5ldmJpdCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKHB0ciwgQUJTX1gsIDAsIFhFTkZCX1dJRFRILCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMocHRyLCBBQlNfWSwgMCwgWEVORkJfSEVJR0hULCAwLCAwKTsKKwl9IGVsc2UgeworCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShwdHIsIEVWX1JFTCwgUkVMX1gpOworCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShwdHIsIEVWX1JFTCwgUkVMX1kpOworCX0KKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShwdHIsIEVWX1JFTCwgUkVMX1dIRUVMKTsKKworCV9fc2V0X2JpdChFVl9LRVksIHB0ci0+ZXZiaXQpOwogCWZvciAoaSA9IEJUTl9MRUZUOyBpIDw9IEJUTl9UQVNLOyBpKyspCi0JCXNldF9iaXQoaSwgcHRyLT5rZXliaXQpOwotCXB0ci0+cmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSkgfCBCSVQoUkVMX1dIRUVMKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhwdHIsIEFCU19YLCAwLCBYRU5GQl9XSURUSCwgMCwgMCk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMocHRyLCBBQlNfWSwgMCwgWEVORkJfSEVJR0hULCAwLCAwKTsKKwkJX19zZXRfYml0KGksIHB0ci0+a2V5Yml0KTsKIAogCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShwdHIpOwogCWlmIChyZXQpIHsKQEAgLTIxOCwxNSArMjMwLDIwIEBACiAJaW50IHJldCwgZXZ0Y2huOwogCXN0cnVjdCB4ZW5idXNfdHJhbnNhY3Rpb24geGJ0OwogCisJcmV0ID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKGRldi0+b3RoZXJlbmRfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnRfdG9fbWZuKGluZm8tPnBhZ2UpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpbmZvLT5ncmVmID0gcmV0OworCiAJcmV0ID0geGVuYnVzX2FsbG9jX2V2dGNobihkZXYsICZldnRjaG4pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyb3JfZ3JhbnQ7CiAJcmV0ID0gYmluZF9ldnRjaG5fdG9faXJxaGFuZGxlcihldnRjaG4sIGlucHV0X2hhbmRsZXIsCiAJCQkJCTAsIGRldi0+ZGV2aWNldHlwZSwgaW5mbyk7CiAJaWYgKHJldCA8IDApIHsKLQkJeGVuYnVzX2ZyZWVfZXZ0Y2huKGRldiwgZXZ0Y2huKTsKIAkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIHJldCwgImJpbmRfZXZ0Y2huX3RvX2lycWhhbmRsZXIiKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJvcl9ldnRjaGFuOwogCX0KIAlpbmZvLT5pcnEgPSByZXQ7CiAKQEAgLTIzNCwxMiArMjUxLDE1IEBACiAJcmV0ID0geGVuYnVzX3RyYW5zYWN0aW9uX3N0YXJ0KCZ4YnQpOwogCWlmIChyZXQpIHsKIAkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIHJldCwgInN0YXJ0aW5nIHRyYW5zYWN0aW9uIik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyb3JfaXJxaDsKIAl9CiAJcmV0ID0geGVuYnVzX3ByaW50Zih4YnQsIGRldi0+bm9kZW5hbWUsICJwYWdlLXJlZiIsICIlbHUiLAogCQkJICAgIHZpcnRfdG9fbWZuKGluZm8tPnBhZ2UpKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3hlbmJ1czsKKwlyZXQgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwgInBhZ2UtZ3JlZiIsICIldSIsIGluZm8tPmdyZWYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfeGVuYnVzOwogCXJldCA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5vZGVuYW1lLCAiZXZlbnQtY2hhbm5lbCIsICIldSIsCiAJCQkgICAgZXZ0Y2huKTsKIAlpZiAocmV0KQpAQCAtMjQ5LDcgKzI2OSw3IEBACiAJCWlmIChyZXQgPT0gLUVBR0FJTikKIAkJCWdvdG8gYWdhaW47CiAJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCByZXQsICJjb21wbGV0aW5nIHRyYW5zYWN0aW9uIik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyb3JfaXJxaDsKIAl9CiAKIAl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVJbml0aWFsaXNlZCk7CkBAIC0yNTgsNiArMjc4LDE0IEBACiAgZXJyb3JfeGVuYnVzOgogCXhlbmJ1c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAxKTsKIAl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgcmV0LCAid3JpdGluZyB4ZW5zdG9yZSIpOworIGVycm9yX2lycWg6CisJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihpbmZvLT5pcnEsIGluZm8pOworCWluZm8tPmlycSA9IC0xOworIGVycm9yX2V2dGNoYW46CisJeGVuYnVzX2ZyZWVfZXZ0Y2huKGRldiwgZXZ0Y2huKTsKKyBlcnJvcl9ncmFudDoKKwlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihpbmZvLT5ncmVmLCAwKTsKKwlpbmZvLT5ncmVmID0gLTE7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjY2LDEzICsyOTQsMTYgQEAKIAlpZiAoaW5mby0+aXJxID49IDApCiAJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIoaW5mby0+aXJxLCBpbmZvKTsKIAlpbmZvLT5pcnEgPSAtMTsKKwlpZiAoaW5mby0+Z3JlZiA+PSAwKQorCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihpbmZvLT5ncmVmLCAwKTsKKwlpbmZvLT5ncmVmID0gLTE7CiB9CiAKIHN0YXRpYyB2b2lkIHhlbmtiZF9iYWNrZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiwKIAkJCQkgICBlbnVtIHhlbmJ1c19zdGF0ZSBiYWNrZW5kX3N0YXRlKQogewogCXN0cnVjdCB4ZW5rYmRfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwotCWludCByZXQsIHZhbDsKKwlpbnQgdmFsOwogCiAJc3dpdGNoIChiYWNrZW5kX3N0YXRlKSB7CiAJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZzoKQEAgLTI4NSwxNiArMzE2LDYgQEAKIAogCWNhc2UgWGVuYnVzU3RhdGVJbml0V2FpdDoKIEluaXRXYWl0OgotCQlyZXQgPSB4ZW5idXNfc2NhbmYoWEJUX05JTCwgaW5mby0+eGJkZXYtPm90aGVyZW5kLAotCQkJCSAgICJmZWF0dXJlLWFicy1wb2ludGVyIiwgIiVkIiwgJnZhbCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJdmFsID0gMDsKLQkJaWYgKHZhbCkgewotCQkJcmV0ID0geGVuYnVzX3ByaW50ZihYQlRfTklMLCBpbmZvLT54YmRldi0+bm9kZW5hbWUsCi0JCQkJCSAgICAicmVxdWVzdC1hYnMtcG9pbnRlciIsICIxIik7Ci0JCQlpZiAocmV0KQotCQkJCXByX3dhcm5pbmcoImNhbid0IHJlcXVlc3QgYWJzLXBvaW50ZXJcbiIpOwotCQl9CiAJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNvbm5lY3RlZCk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCmluZGV4IGVlODI4NTEuLjNhZWFkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCkBAIC02Myw2ICs2MywxMCBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9BTlNJCTB4MDI0MgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9JU08JMHgwMjQzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0pJUwkweDAyNDQKKy8qIE1hY2Jvb2s4ICh1bmlib2R5LCBNYXJjaCAyMDExKSAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0FOU0kJMHgwMjQ1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfSVNPCTB4MDI0NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0pJUwkweDAyNDcKIAogI2RlZmluZSBCQ001OTc0X0RFVklDRShwcm9kKSB7CQkJCQlcCiAJLm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwJCVwKQEAgLTk2LDYgKzEwMCwxMCBAQAogCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0FOU0kpLAogCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0lTTyksCiAJQkNNNTk3NF9ERVZJQ0UoVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfSklTKSwKKwkvKiBNYWNib29rUHJvOCAqLworCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfQU5TSSksCisJQkNNNTk3NF9ERVZJQ0UoVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9JU08pLAorCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfSklTKSwKIAkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogCXt9CiB9OwpAQCAtMjc0LDYgKzI4MiwxOCBAQAogCQl7IERJTV9YLCBESU1fWCAvIFNOX0NPT1JELCAtNDYxNiwgNTExMiB9LAogCQl7IERJTV9ZLCBESU1fWSAvIFNOX0NPT1JELCAtMTQyLCA1MjM0IH0KIAl9LAorCXsKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9BTlNJLAorCQlVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0lTTywKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9KSVMsCisJCUhBU19JTlRFR1JBVEVEX0JVVFRPTiwKKwkJMHg4NCwgc2l6ZW9mKHN0cnVjdCBidF9kYXRhKSwKKwkJMHg4MSwgVFlQRTIsIEZJTkdFUl9UWVBFMiwgRklOR0VSX1RZUEUyICsgU0laRU9GX0FMTF9GSU5HRVJTLAorCQl7IERJTV9QUkVTU1VSRSwgRElNX1BSRVNTVVJFIC8gU05fUFJFU1NVUkUsIDAsIDMwMCB9LAorCQl7IERJTV9XSURUSCwgRElNX1dJRFRIIC8gU05fV0lEVEgsIDAsIDIwNDggfSwKKwkJeyBESU1fWCwgRElNX1ggLyBTTl9DT09SRCwgLTQ0MTUsIDUwNTAgfSwKKwkJeyBESU1fWSwgRElNX1kgLyBTTl9DT09SRCwgLTU1LCA2NjgwIH0KKwl9LAogCXt9CiB9OwogCkBAIC00MzAsMTAgKzQ1MCw2IEBACiAJCXB0ZXN0ID0gaW50MmJvdW5kKCZjLT5wLCByYXdfcCk7CiAJCW9yaWdpbiA9IHJhdzJpbnQoZi0+b3JpZ2luKTsKIAotCQkvKiBzZXQgdGhlIGludGVncmF0ZWQgYnV0dG9uIGlmIGFwcGxpY2FibGUgKi8KLQkJaWYgKGMtPnRwX3R5cGUgPT0gVFlQRTIpCi0JCQlpYnQgPSByYXcyaW50KGRldi0+dHBfZGF0YVtCVVRUT05fVFlQRTJdKTsKLQogCQkvKiB3aGlsZSB0cmFja2luZyBmaW5nZXIgc3RpbGwgdmFsaWQsIGNvdW50IGFsbCBmaW5nZXJzICovCiAJCWlmIChwdGVzdCA+IFBSRVNTVVJFX0xPVyAmJiBvcmlnaW4pIHsKIAkJCWFic19wID0gcHRlc3Q7CkBAIC00NTIsNiArNDY4LDEwIEBACiAJCX0KIAl9CiAKKwkvKiBzZXQgdGhlIGludGVncmF0ZWQgYnV0dG9uIGlmIGFwcGxpY2FibGUgKi8KKwlpZiAoYy0+dHBfdHlwZSA9PSBUWVBFMikKKwkJaWJ0ID0gcmF3MmludChkZXYtPnRwX2RhdGFbQlVUVE9OX1RZUEUyXSk7CisKIAlpZiAoZGV2LT5maW5nZXJzIDwgbm1pbikKIAkJZGV2LT5maW5nZXJzID0gbm1pbjsKIAlpZiAoZGV2LT5maW5nZXJzID4gbm1heCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzX2kyYy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3NfaTJjLmMKaW5kZXggMGFlNjJmMC4uZjZhYTI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3NfaTJjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3NfaTJjLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkic3luYXB0aWNzX2kyYyIKIC8qIG1heGltdW0gcHJvZHVjdCBpZCBpcyAxNSBjaGFyYWN0ZXJzICovCkBAIC02MTksOCArNjIwLDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzeW5hcHRpY3NfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IHN5bmFwdGljc19pMmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3Qgc3luYXB0aWNzX2kyYyAqdG91Y2ggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdG91Y2gtPmR3b3JrKTsKQEAgLTYzMSw5ICs2MzMsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzeW5hcHRpY3NfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzeW5hcHRpY3NfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBzeW5hcHRpY3NfaTJjICp0b3VjaCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJcmV0ID0gc3luYXB0aWNzX2kyY19yZXNldF9jb25maWcoY2xpZW50KTsKQEAgLTY0NSwxMSArNjQ4LDExIEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHN5bmFwdGljc19pMmNfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHN5bmFwdGljc19pMmNfcmVzdW1lCU5VTEwKICNlbmRpZgogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoc3luYXB0aWNzX2kyY19wbSwgc3luYXB0aWNzX2kyY19zdXNwZW5kLAorCQkJIHN5bmFwdGljc19pMmNfcmVzdW1lKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHN5bmFwdGljc19pMmNfaWRfdGFibGVbXSA9IHsKIAl7ICJzeW5hcHRpY3NfaTJjIiwgMCB9LAogCXsgfSwKQEAgLTY2MCwxMyArNjYzLDEyIEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZzeW5hcHRpY3NfaTJjX3BtLAogCX0sCiAKIAkucHJvYmUJCT0gc3luYXB0aWNzX2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHN5bmFwdGljc19pMmNfcmVtb3ZlKSwKIAotCS5zdXNwZW5kCT0gc3luYXB0aWNzX2kyY19zdXNwZW5kLAotCS5yZXN1bWUJCT0gc3luYXB0aWNzX2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlCT0gc3luYXB0aWNzX2kyY19pZF90YWJsZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc3BhcnNlLWtleW1hcC5jIGIvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKaW5kZXggNzcyOWU1NC4uMzM3YmY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKQEAgLTIxMCw4ICsyMTAsOCBAQAogCiAJZGV2LT5rZXljb2RlID0gbWFwOwogCWRldi0+a2V5Y29kZW1heCA9IG1hcF9zaXplOwotCWRldi0+Z2V0a2V5Y29kZV9uZXcgPSBzcGFyc2Vfa2V5bWFwX2dldGtleWNvZGU7Ci0JZGV2LT5zZXRrZXljb2RlX25ldyA9IHNwYXJzZV9rZXltYXBfc2V0a2V5Y29kZTsKKwlkZXYtPmdldGtleWNvZGUgPSBzcGFyc2Vfa2V5bWFwX2dldGtleWNvZGU7CisJZGV2LT5zZXRrZXljb2RlID0gc3BhcnNlX2tleW1hcF9zZXRrZXljb2RlOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKaW5kZXggY2Y4ZmI5Zi4uNDQ5YzBhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKQEAgLTE5MywxNiArMTkzLDE2IEBACiAJCQljYXNlIEhJRF9VU0FHRV9YOgogCQkJCWlmICh1c2FnZSA9PSBXQ01fREVTS1RPUCkgewogCQkJCQlpZiAoZmluZ2VyKSB7Ci0JCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9ET1VCTEVUQVA7CisJCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9GSU5HRVI7CiAJCQkJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPT0gVEFCTEVUUEMyRkcpIHsKIAkJCQkJCQkvKiBuZWVkIHRvIHJlc2V0IGJhY2sgKi8KIAkJCQkJCQlmZWF0dXJlcy0+cGt0bGVuID0gV0FDT01fUEtHTEVOX1RQQzJGRzsKLQkJCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9UUklQTEVUQVA7CisJCQkJCQkJZmVhdHVyZXMtPmRldmljZV90eXBlID0gQlROX1RPT0xfRE9VQkxFVEFQOwogCQkJCQkJfQogCQkJCQkJaWYgKGZlYXR1cmVzLT50eXBlID09IEJBTUJPT19QVCkgewogCQkJCQkJCS8qIG5lZWQgdG8gcmVzZXQgYmFjayAqLwogCQkJCQkJCWZlYXR1cmVzLT5wa3RsZW4gPSBXQUNPTV9QS0dMRU5fQkJUT1VDSDsKLQkJCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9UUklQTEVUQVA7CisJCQkJCQkJZmVhdHVyZXMtPmRldmljZV90eXBlID0gQlROX1RPT0xfRE9VQkxFVEFQOwogCQkJCQkJCWZlYXR1cmVzLT54X3BoeSA9CiAJCQkJCQkJCWdldF91bmFsaWduZWRfbGUxNigmcmVwb3J0W2kgKyA1XSk7CiAJCQkJCQkJZmVhdHVyZXMtPnhfbWF4ID0KQEAgLTI0MSwxMSArMjQxLDExIEBACiAJCQljYXNlIEhJRF9VU0FHRV9ZOgogCQkJCWlmICh1c2FnZSA9PSBXQ01fREVTS1RPUCkgewogCQkJCQlpZiAoZmluZ2VyKSB7Ci0JCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9ET1VCTEVUQVA7CisJCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9GSU5HRVI7CiAJCQkJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPT0gVEFCTEVUUEMyRkcpIHsKIAkJCQkJCQkvKiBuZWVkIHRvIHJlc2V0IGJhY2sgKi8KIAkJCQkJCQlmZWF0dXJlcy0+cGt0bGVuID0gV0FDT01fUEtHTEVOX1RQQzJGRzsKLQkJCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9UUklQTEVUQVA7CisJCQkJCQkJZmVhdHVyZXMtPmRldmljZV90eXBlID0gQlROX1RPT0xfRE9VQkxFVEFQOwogCQkJCQkJCWZlYXR1cmVzLT55X21heCA9CiAJCQkJCQkJCWdldF91bmFsaWduZWRfbGUxNigmcmVwb3J0W2kgKyAzXSk7CiAJCQkJCQkJZmVhdHVyZXMtPnlfcGh5ID0KQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJCQkJfSBlbHNlIGlmIChmZWF0dXJlcy0+dHlwZSA9PSBCQU1CT09fUFQpIHsKIAkJCQkJCQkvKiBuZWVkIHRvIHJlc2V0IGJhY2sgKi8KIAkJCQkJCQlmZWF0dXJlcy0+cGt0bGVuID0gV0FDT01fUEtHTEVOX0JCVE9VQ0g7Ci0JCQkJCQkJZmVhdHVyZXMtPmRldmljZV90eXBlID0gQlROX1RPT0xfVFJJUExFVEFQOworCQkJCQkJCWZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9IEJUTl9UT09MX0RPVUJMRVRBUDsKIAkJCQkJCQlmZWF0dXJlcy0+eV9waHkgPQogCQkJCQkJCQlnZXRfdW5hbGlnbmVkX2xlMTYoJnJlcG9ydFtpICsgM10pOwogCQkJCQkJCWZlYXR1cmVzLT55X21heCA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCmluZGV4IDM2N2ZhODIuLjU1OTc2MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCkBAIC02NzUsMTY5ICs2NzUsODcgQEAKIAlyZXR1cm4gMTsKIH0KIAotCi1zdGF0aWMgdm9pZCB3YWNvbV90cGNfZmluZ2VyX2luKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCBjaGFyICpkYXRhLCBpbnQgaWR4KQorc3RhdGljIGludCB3YWNvbV90cGNfbXRfdG91Y2goc3RydWN0IHdhY29tX3dhYyAqd2Fjb20pCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB3YWNvbS0+aW5wdXQ7Ci0JaW50IGZpbmdlciA9IGlkeCArIDE7Ci0JaW50IHggPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSZkYXRhW2ZpbmdlciAqIDJdKSAmIDB4N2ZmZjsKLQlpbnQgeSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmRhdGFbNCArIGZpbmdlciAqIDJdKSAmIDB4N2ZmZjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJaW50IGNvbnRhY3Rfd2l0aF9ub19wZW5fZG93bl9jb3VudCA9IDA7CisJaW50IGk7CiAKLQkvKgotCSAqIFdvcmsgYXJvdW5kIGlucHV0IGNvcmUgc3VwcHJlc3NpbmcgImR1cGxpY2F0ZSIgZXZlbnRzIHNpbmNlCi0JICogd2UgYXJlIGFidXNpbmcgQUJTX1gvQUJTX1kgdG8gdHJhbnNtaXQgbXVsdGktZmluZ2VyIGRhdGEuCi0JICogVGhpcyBzaG91bGQgZ28gYXdheSBvbmNlIHdlIHN3aXRjaCB0byB0cnVlIG11bHRpdG91Y2gKLQkgKiBwcm90b2NvbC4KLQkgKi8KLQlpZiAod2Fjb20tPmxhc3RfZmluZ2VyICE9IGZpbmdlcikgewotCQlpZiAoeCA9PSBpbnB1dF9hYnNfZ2V0X3ZhbChpbnB1dCwgQUJTX1gpKQotCQkJeCsrOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaW50IHAgPSBkYXRhWzFdICYgKDEgPDwgaSk7CisJCWJvb2wgdG91Y2ggPSBwICYmICF3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5OwogCi0JCWlmICh5ID09IGlucHV0X2Fic19nZXRfdmFsKGlucHV0LCBBQlNfWSkpCi0JCQl5Kys7CisJCWlucHV0X210X3Nsb3QoaW5wdXQsIGkpOworCQlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShpbnB1dCwgTVRfVE9PTF9GSU5HRVIsIHRvdWNoKTsKKwkJaWYgKHRvdWNoKSB7CisJCQlpbnQgeCA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmRhdGFbaSAqIDIgKyAyXSkgJiAweDdmZmY7CisJCQlpbnQgeSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmRhdGFbaSAqIDIgKyA2XSkgJiAweDdmZmY7CisKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCB4KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9ZLCB5KTsKKwkJCWNvbnRhY3Rfd2l0aF9ub19wZW5fZG93bl9jb3VudCsrOworCQl9CiAJfQogCi0JaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIHgpOwotCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ZLCB5KTsKLQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTUlTQywgd2Fjb20tPmlkWzBdKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCB3YWNvbS0+dG9vbFtmaW5nZXJdLCAxKTsKLQlpZiAoIWlkeCkKLQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAxKTsKLQlpbnB1dF9ldmVudChpbnB1dCwgRVZfTVNDLCBNU0NfU0VSSUFMLCBmaW5nZXIpOwotCWlucHV0X3N5bmMoaW5wdXQpOworCS8qIGtlZXAgdG91Y2ggc3RhdGUgZm9yIHBlbiBldmVudCAqLworCXdhY29tLT5zaGFyZWQtPnRvdWNoX2Rvd24gPSAoY29udGFjdF93aXRoX25vX3Blbl9kb3duX2NvdW50ID4gMCk7CiAKLQl3YWNvbS0+bGFzdF9maW5nZXIgPSBmaW5nZXI7CisJaW5wdXRfbXRfcmVwb3J0X3BvaW50ZXJfZW11bGF0aW9uKGlucHV0LCB0cnVlKTsKKworCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCB3YWNvbV90cGNfdG91Y2hfb3V0KHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCBpbnQgaWR4KQotewotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gd2Fjb20tPmlucHV0OwotCWludCBmaW5nZXIgPSBpZHggKyAxOwotCi0JaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIDApOwotCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ZLCAwKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTUlTQywgMCk7Ci0JaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgd2Fjb20tPnRvb2xbZmluZ2VyXSwgMCk7Ci0JaWYgKCFpZHgpCi0JCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMCk7Ci0JaW5wdXRfZXZlbnQoaW5wdXQsIEVWX01TQywgTVNDX1NFUklBTCwgZmluZ2VyKTsKLQlpbnB1dF9zeW5jKGlucHV0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Fjb21fdHBjX3RvdWNoX2luKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCBzaXplX3QgbGVuKQorc3RhdGljIGludCB3YWNvbV90cGNfc2luZ2xlX3RvdWNoKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCBzaXplX3QgbGVuKQogewogCWNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHdhY29tLT5pbnB1dDsKKwlib29sIHByb3g7CisJaW50IHggPSAwLCB5ID0gMDsKIAotCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfRE9VQkxFVEFQOwotCXdhY29tLT5pZFswXSA9IFRPVUNIX0RFVklDRV9JRDsKLQl3YWNvbS0+dG9vbFsyXSA9IEJUTl9UT09MX1RSSVBMRVRBUDsKLQotCWlmIChsZW4gIT0gV0FDT01fUEtHTEVOX1RQQzFGRykgewotCi0JCXN3aXRjaCAoZGF0YVswXSkgewotCi0JCWNhc2UgV0FDT01fUkVQT1JUX1RQQzFGRzoKLQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19YLCBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSZkYXRhWzJdKSk7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWSwgbGUxNl90b19jcHVwKChfX2xlMTYgKikmZGF0YVs0XSkpOwotCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1BSRVNTVVJFLCBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSZkYXRhWzZdKSk7Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmRhdGFbNl0pKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NSVNDLCB3YWNvbS0+aWRbMF0pOwotCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgd2Fjb20tPnRvb2xbMV0sIDEpOwotCQkJaW5wdXRfc3luYyhpbnB1dCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdBQ09NX1JFUE9SVF9UUEMyRkc6Ci0JCQlpZiAoZGF0YVsxXSAmIDB4MDEpCi0JCQkJd2Fjb21fdHBjX2Zpbmdlcl9pbih3YWNvbSwgZGF0YSwgMCk7Ci0JCQllbHNlIGlmICh3YWNvbS0+aWRbMV0gJiAweDAxKQotCQkJCXdhY29tX3RwY190b3VjaF9vdXQod2Fjb20sIDApOwotCi0JCQlpZiAoZGF0YVsxXSAmIDB4MDIpCi0JCQkJd2Fjb21fdHBjX2Zpbmdlcl9pbih3YWNvbSwgZGF0YSwgMSk7Ci0JCQllbHNlIGlmICh3YWNvbS0+aWRbMV0gJiAweDAyKQotCQkJCXdhY29tX3RwY190b3VjaF9vdXQod2Fjb20sIDEpOwotCQkJYnJlYWs7CisJaWYgKCF3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5KSB7CisJCWlmIChsZW4gPT0gV0FDT01fUEtHTEVOX1RQQzFGRykgeworCQkJcHJveCA9IGRhdGFbMF0gJiAweDAxOworCQkJeCA9IGdldF91bmFsaWduZWRfbGUxNigmZGF0YVsxXSk7CisJCQl5ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZkYXRhWzNdKTsKKwkJfSBlbHNlIHsgLyogd2l0aCBjYXBhY2l0eSAqLworCQkJcHJveCA9IGRhdGFbMV0gJiAweDAxOworCQkJeCA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmRhdGFbMl0pOworCQkJeSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmRhdGFbNF0pOwogCQl9Ci0JfSBlbHNlIHsKLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIGdldF91bmFsaWduZWRfbGUxNigmZGF0YVsxXSkpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWSwgZ2V0X3VuYWxpZ25lZF9sZTE2KCZkYXRhWzNdKSk7Ci0JCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMSk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NSVNDLCB3YWNvbS0+aWRbMV0pOwotCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCB3YWNvbS0+dG9vbFsxXSwgMSk7Ci0JCWlucHV0X3N5bmMoaW5wdXQpOworCX0gZWxzZQorCQkvKiBmb3JjZSB0b3VjaCBvdXQgd2hlbiBwZW4gaXMgaW4gcHJveCAqLworCQlwcm94ID0gMDsKKworCWlmIChwcm94KSB7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19YLCB4KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1ksIHkpOwogCX0KKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIHByb3gpOworCisJLyoga2VlcCB0b3VjaCBzdGF0ZSBmb3IgcGVuIGV2ZW50cyAqLworCXdhY29tLT5zaGFyZWQtPnRvdWNoX2Rvd24gPSBwcm94OworCisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgd2Fjb21fdHBjX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgd2Fjb21fdHBjX3BlbihzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSkKIHsKIAlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gJndhY29tLT5mZWF0dXJlczsKIAljaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB3YWNvbS0+aW5wdXQ7Ci0JaW50IHByb3ggPSAwLCBwcmVzc3VyZTsKLQlpbnQgcmV0dmFsID0gMDsKKwlpbnQgcHJlc3N1cmU7CisJYm9vbCBwcm94ID0gZGF0YVsxXSAmIDB4MjA7CiAKLQlkYmcoIndhY29tX3RwY19pcnE6IHJlY2VpdmVkIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKKwlpZiAoIXdhY29tLT5zaGFyZWQtPnN0eWx1c19pbl9wcm94aW1pdHkpIC8qIGZpcnN0IGluIHByb3ggKi8KKwkJLyogR29pbmcgaW50byBwcm94aW1pdHkgc2VsZWN0IHRvb2wgKi8KKwkJd2Fjb20tPnRvb2xbMF0gPSAoZGF0YVsxXSAmIDB4MGMpID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOOwogCi0JaWYgKGxlbiA9PSBXQUNPTV9QS0dMRU5fVFBDMUZHIHx8CQkgLyogc2luZ2xlIHRvdWNoICovCi0JICAgIGRhdGFbMF0gPT0gV0FDT01fUkVQT1JUX1RQQzFGRyB8fAkJIC8qIHNpbmdsZSB0b3VjaCAqLwotCSAgICBkYXRhWzBdID09IFdBQ09NX1JFUE9SVF9UUEMyRkcpIHsJCSAvKiAyRkcgdG91Y2ggKi8KKwkvKiBrZWVwIHBlbiBzdGF0ZSBmb3IgdG91Y2ggZXZlbnRzICovCisJd2Fjb20tPnNoYXJlZC0+c3R5bHVzX2luX3Byb3hpbWl0eSA9IHByb3g7CiAKLQkJaWYgKHdhY29tLT5zaGFyZWQtPnN0eWx1c19pbl9wcm94aW1pdHkpIHsKLQkJCWlmICh3YWNvbS0+aWRbMV0gJiAweDAxKQotCQkJCXdhY29tX3RwY190b3VjaF9vdXQod2Fjb20sIDApOwotCi0JCQlpZiAod2Fjb20tPmlkWzFdICYgMHgwMikKLQkJCQl3YWNvbV90cGNfdG91Y2hfb3V0KHdhY29tLCAxKTsKLQotCQkJd2Fjb20tPmlkWzFdID0gMDsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKGxlbiA9PSBXQUNPTV9QS0dMRU5fVFBDMUZHKSB7CS8qIHdpdGggdG91Y2ggKi8KLQkJCXByb3ggPSBkYXRhWzBdICYgMHgwMTsKLQkJfSBlbHNlIHsgIC8qIHdpdGggY2FwYWNpdHkgKi8KLQkJCWlmIChkYXRhWzBdID09IFdBQ09NX1JFUE9SVF9UUEMxRkcpCi0JCQkJLyogc2luZ2xlIHRvdWNoICovCi0JCQkJcHJveCA9IGRhdGFbMV0gJiAweDAxOwotCQkJZWxzZQotCQkJCS8qIDJGRyB0b3VjaCBkYXRhICovCi0JCQkJcHJveCA9IGRhdGFbMV0gJiAweDAzOwotCQl9Ci0KLQkJaWYgKHByb3gpIHsKLQkJCWlmICghd2Fjb20tPmlkWzFdKQotCQkJCXdhY29tLT5sYXN0X2ZpbmdlciA9IDE7Ci0JCQl3YWNvbV90cGNfdG91Y2hfaW4od2Fjb20sIGxlbik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZGF0YVswXSA9PSBXQUNPTV9SRVBPUlRfVFBDMkZHKSB7Ci0JCQkJLyogMkZHVCBvdXQtcHJveCAqLwotCQkJCWlmICh3YWNvbS0+aWRbMV0gJiAweDAxKQotCQkJCQl3YWNvbV90cGNfdG91Y2hfb3V0KHdhY29tLCAwKTsKLQotCQkJCWlmICh3YWNvbS0+aWRbMV0gJiAweDAyKQotCQkJCQl3YWNvbV90cGNfdG91Y2hfb3V0KHdhY29tLCAxKTsKLQkJCX0gZWxzZQotCQkJCS8qIG9uZSBmaW5nZXIgdG91Y2ggKi8KLQkJCQl3YWNvbV90cGNfdG91Y2hfb3V0KHdhY29tLCAwKTsKLQotCQkJd2Fjb20tPmlkWzBdID0gMDsKLQkJfQotCQkvKiBrZWVwIHByb3ggYml0IHRvIHNlbmQgcHJvcGVyIG91dC1wcm94IGV2ZW50ICovCi0JCXdhY29tLT5pZFsxXSA9IHByb3g7Ci0JfSBlbHNlIGlmIChkYXRhWzBdID09IFdBQ09NX1JFUE9SVF9QRU5BQkxFRCkgeyAvKiBQZW5hYmxlZCAqLwotCQlwcm94ID0gZGF0YVsxXSAmIDB4MjA7Ci0KLQkJaWYgKCF3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5KSB7IC8qIGZpcnN0IGluIHByb3ggKi8KLQkJCS8qIEdvaW5nIGludG8gcHJveGltaXR5IHNlbGVjdCB0b29sICovCi0JCQl3YWNvbS0+dG9vbFswXSA9IChkYXRhWzFdICYgMHgwYykgPyBCVE5fVE9PTF9SVUJCRVIgOiBCVE5fVE9PTF9QRU47Ci0JCQlpZiAod2Fjb20tPnRvb2xbMF0gPT0gQlROX1RPT0xfUEVOKQotCQkJCXdhY29tLT5pZFswXSA9IFNUWUxVU19ERVZJQ0VfSUQ7Ci0JCQllbHNlCi0JCQkJd2Fjb20tPmlkWzBdID0gRVJBU0VSX0RFVklDRV9JRDsKLQotCQkJd2Fjb20tPnNoYXJlZC0+c3R5bHVzX2luX3Byb3hpbWl0eSA9IHRydWU7Ci0JCX0KKwkvKiBzZW5kIHBlbiBldmVudHMgb25seSB3aGVuIHRvdWNoIGlzIHVwIG9yIGZvcmNlZCBvdXQgKi8KKwlpZiAoIXdhY29tLT5zaGFyZWQtPnRvdWNoX2Rvd24pIHsKIAkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1NUWUxVUywgZGF0YVsxXSAmIDB4MDIpOwogCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fU1RZTFVTMiwgZGF0YVsxXSAmIDB4MTApOwogCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWCwgbGUxNl90b19jcHVwKChfX2xlMTYgKikmZGF0YVsyXSkpOwpAQCAtODQ3LDE1ICs3NjUsMjcgQEAKIAkJCXByZXNzdXJlID0gZmVhdHVyZXMtPnByZXNzdXJlX21heCArIHByZXNzdXJlICsgMTsKIAkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7CiAJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDUpOwotCQlpZiAoIXByb3gpIHsgLyogb3V0LXByb3ggKi8KLQkJCXdhY29tLT5pZFswXSA9IDA7Ci0JCQl3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5ID0gZmFsc2U7Ci0JCX0KIAkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgd2Fjb20tPnRvb2xbMF0sIHByb3gpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTUlTQywgd2Fjb20tPmlkWzBdKTsKLQkJcmV0dmFsID0gMTsKKwkJcmV0dXJuIDE7CiAJfQotCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3YWNvbV90cGNfaXJxKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCBzaXplX3QgbGVuKQoreworCWNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKworCWRiZygid2Fjb21fdHBjX2lycTogcmVjZWl2ZWQgcmVwb3J0ICMlZCIsIGRhdGFbMF0pOworCisJaWYgKGxlbiA9PSBXQUNPTV9QS0dMRU5fVFBDMUZHIHx8IGRhdGFbMF0gPT0gV0FDT01fUkVQT1JUX1RQQzFGRykKKwkJcmV0dXJuIHdhY29tX3RwY19zaW5nbGVfdG91Y2god2Fjb20sIGxlbik7CisJZWxzZSBpZiAoZGF0YVswXSA9PSBXQUNPTV9SRVBPUlRfVFBDMkZHKQorCQlyZXR1cm4gd2Fjb21fdHBjX210X3RvdWNoKHdhY29tKTsKKwllbHNlIGlmIChkYXRhWzBdID09IFdBQ09NX1JFUE9SVF9QRU5BQkxFRCkKKwkJcmV0dXJuIHdhY29tX3RwY19wZW4od2Fjb20pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgd2Fjb21fYnB0X3RvdWNoKHN0cnVjdCB3YWNvbV93YWMgKndhY29tKQpAQCAtMTA3OCw3ICsxMDA4LDcgQEAKIHsKIAogCS8qIHRvdWNoIGRldmljZSBmb3VuZCBidXQgc2l6ZSBpcyBub3QgZGVmaW5lZC4gdXNlIGRlZmF1bHQgKi8KLQlpZiAoZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX0RPVUJMRVRBUCAmJiAhZmVhdHVyZXMtPnhfbWF4KSB7CisJaWYgKGZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9GSU5HRVIgJiYgIWZlYXR1cmVzLT54X21heCkgewogCQlmZWF0dXJlcy0+eF9tYXggPSAxMDIzOwogCQlmZWF0dXJlcy0+eV9tYXggPSAxMDIzOwogCX0KQEAgLTEwOTAsNyArMTAyMCw3IEBACiAKIAkvKiBxdWlya3MgZm9yIGJhbWJvbyB0b3VjaCAqLwogCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBCQU1CT09fUFQgJiYKLQkgICAgZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX1RSSVBMRVRBUCkgeworCSAgICBmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfRE9VQkxFVEFQKSB7CiAJCWZlYXR1cmVzLT54X21heCA8PD0gNTsKIAkJZmVhdHVyZXMtPnlfbWF4IDw8PSA1OwogCQlmZWF0dXJlcy0+eF9mdXp6IDw8PSA1OwpAQCAtMTIyNiwyNyArMTE1NiwzMCBAQAogCQlicmVhazsKIAogCWNhc2UgVEFCTEVUUEMyRkc6Ci0JCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7Ci0JCQlfX3NldF9iaXQoQlROX1RPT0xfVFJJUExFVEFQLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NFUklBTCk7CisJCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfRE9VQkxFVEFQKSB7CisKKwkJCWlucHV0X210X2luaXRfc2xvdHMoaW5wdXRfZGV2LCAyKTsKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01UX1RPT0xfVFlQRSwKKwkJCQkJMCwgTVRfVE9PTF9NQVgsIDAsIDApOworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfUE9TSVRJT05fWCwKKwkJCQkJMCwgZmVhdHVyZXMtPnhfbWF4LCAwLCAwKTsKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01UX1BPU0lUSU9OX1ksCisJCQkJCTAsIGZlYXR1cmVzLT55X21heCwgMCwgMCk7CiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAKIAljYXNlIFRBQkxFVFBDOgotCQlpZiAoZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX0RPVUJMRVRBUCB8fAotCQkgICAgZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX1RSSVBMRVRBUCkgeworCQlfX2NsZWFyX2JpdChBQlNfTUlTQywgaW5wdXRfZGV2LT5hYnNiaXQpOworCisJCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgIT0gQlROX1RPT0xfUEVOKSB7CiAJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19YLAogCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnhfbWF4LAogCQkJCQkJCWZlYXR1cmVzLT54X3BoeSkpOwogCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWSwKIAkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT55X21heCwKIAkJCQkJCQlmZWF0dXJlcy0+eV9waHkpKTsKLQkJCV9fc2V0X2JpdChCVE5fVE9PTF9ET1VCTEVUQVAsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQkJfQotCi0JCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgIT0gQlROX1RPT0xfUEVOKQogCQkJYnJlYWs7ICAvKiBubyBuZWVkIHRvIHByb2Nlc3Mgc3R5bHVzIHN0dWZmICovCi0KKwkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAogCWNhc2UgUEw6CkBAIC0xMjY0LDcgKzExOTcsNyBAQAogCWNhc2UgQkFNQk9PX1BUOgogCQlfX2NsZWFyX2JpdChBQlNfTUlTQywgaW5wdXRfZGV2LT5hYnNiaXQpOwogCi0JCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7CisJCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfRE9VQkxFVEFQKSB7CiAJCQlfX3NldF9iaXQoQlROX0xFRlQsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAkJCV9fc2V0X2JpdChCVE5fRk9SV0FSRCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQkJX19zZXRfYml0KEJUTl9CQUNLLCBpbnB1dF9kZXYtPmtleWJpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaCBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCmluZGV4IGIxMzEwZWMuLjgzNWY3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCkBAIC04OCwxNSArODgsMTUgQEAKIAogc3RydWN0IHdhY29tX3NoYXJlZCB7CiAJYm9vbCBzdHlsdXNfaW5fcHJveGltaXR5OworCWJvb2wgdG91Y2hfZG93bjsKIH07CiAKIHN0cnVjdCB3YWNvbV93YWMgewogCWNoYXIgbmFtZVs2NF07CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKLQlpbnQgdG9vbFszXTsKLQlpbnQgaWRbM107CisJaW50IHRvb2xbMl07CisJaW50IGlkWzJdOwogCV9fdTMyIHNlcmlhbFsyXTsKLQlpbnQgbGFzdF9maW5nZXI7CiAJc3RydWN0IHdhY29tX2ZlYXR1cmVzIGZlYXR1cmVzOwogCXN0cnVjdCB3YWNvbV9zaGFyZWQgKnNoYXJlZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCA2MTgzNGFlLi4xMTJlYzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC04Niw2ICs4NiwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWQ3ODc5LXNwaS4KIAorY29uZmlnIFRPVUNIU0NSRUVOX0FUTUVMX01YVAorCXRyaXN0YXRlICJBdG1lbCBtWFQgSTJDIFRvdWNoc2NyZWVuIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBBdG1lbCBtWFQgc2VyaWVzIEkyQyB0b3VjaHNjcmVlbiwKKwkgIHN1Y2ggYXMgQVQ0MlFUNjAyMjQwL0FUTVhUMjI0LCBjb25uZWN0ZWQgdG8geW91ciBzeXN0ZW0uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF0bWVsX214dF90cy4KKwogY29uZmlnIFRPVUNIU0NSRUVOX0JJVFNZCiAJdHJpc3RhdGUgIkNvbXBhcSBpUEFRIEgzNjAwIChCaXRzeSkgdG91Y2hzY3JlZW4iCiAJZGVwZW5kcyBvbiBTQTExMDBfQklUU1kKQEAgLTMzOSwxOCArMzUxLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBlbm1vdW50LgogCi1jb25maWcgVE9VQ0hTQ1JFRU5fUVQ2MDIyNDAKLQl0cmlzdGF0ZSAiUVQ2MDIyNDAgSTJDIFRvdWNoc2NyZWVuIgotCWRlcGVuZHMgb24gSTJDCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGUgQVQ0MlFUNjAyMjQwL0FUTVhUMjI0IEkyQyB0b3VjaHNjcmVlbgotCSAgY29ubmVjdGVkIHRvIHlvdXIgc3lzdGVtLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxdDYwMjI0MF90cy4KLQogY29uZmlnIFRPVUNIU0NSRUVOX01JR09SCiAJdHJpc3RhdGUgIlJlbmVzYXMgTUlHTy1SIHRvdWNoc2NyZWVuIgogCWRlcGVuZHMgb24gU0hfTUlHT1IgJiYgSTJDCkBAIC00MjMsNiArNDIzLDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1Y2IxNDAwX3RzLgogCitjb25maWcgVE9VQ0hTQ1JFRU5fV004MzFYCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFdNODMxeCB0b3VjaHNjcmVlbiBjb250cm9sbGVycyIKKwlkZXBlbmRzIG9uIE1GRF9XTTgzMVgKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHRvdWNoc2NyZWVuIGNvbnRyb2xsZXIgb24gdGhlIFdNODMxeAorCSAgc2VyaWVzIG9mIFBNSUNzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3bTgzMXgtdHMuCisKIGNvbmZpZyBUT1VDSFNDUkVFTl9XTTk3WFgKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgV005N3h4IEFDOTcgdG91Y2hzY3JlZW4gY29udHJvbGxlcnMiCiAJZGVwZW5kcyBvbiBBQzk3X0JVUwpAQCAtNjI5LDYgKzYzOSwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdG91Y2hpdDIxMy4KIAorY29uZmlnIFRPVUNIU0NSRUVOX1RTQzIwMDUKKyAgICAgICAgdHJpc3RhdGUgIlRTQzIwMDUgYmFzZWQgdG91Y2hzY3JlZW5zIgorICAgICAgICBkZXBlbmRzIG9uIFNQSV9NQVNURVIKKyAgICAgICAgaGVscAorICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUU0MyMDA1IGJhc2VkIHRvdWNoc2NyZWVuLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0c2MyMDA1LgorCiBjb25maWcgVE9VQ0hTQ1JFRU5fVFNDMjAwNwogCXRyaXN0YXRlICJUU0MyMDA3IGJhc2VkIHRvdWNoc2NyZWVucyIKIAlkZXBlbmRzIG9uIEkyQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUKaW5kZXggNzE4YmNjOC4uY2E5NDA5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBACiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQykJKz0gYWQ3ODc5LWkyYy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSkJKz0gYWQ3ODc5LXNwaS5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikJKz0gYWRzNzg0Ni5vCitvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfTVhUKQkrPSBhdG1lbF9teHRfdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX1RTQURDQykJKz0gYXRtZWxfdHNhZGNjLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9CSVRTWSkJCSs9IGgzNjAwX3RzX2lucHV0Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9CVTIxMDEzKSAgICAgICArPSBidTIxMDEzX3RzLm8KQEAgLTM3LDcgKzM4LDYgQEAKIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFKQkrPSB1c2J0b3VjaHNjcmVlbi5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fUENBUCkJCSs9IHBjYXBfdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UKQkrPSBwZW5tb3VudC5vCi1vYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fUVQ2MDIyNDApCSs9IHF0NjAyMjQwX3RzLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9TM0MyNDEwKQkrPSBzM2MyNDEwX3RzLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9TVDEyMzIpCSs9IHN0MTIzMi5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fU1RNUEUpCQkrPSBzdG1wZS10cy5vCkBAIC00NSw5ICs0NSwxMSBAQAogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMpCSs9IHRvdWNoaXQyMTMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQpCSs9IHRvdWNocmlnaHQubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOKQkrPSB0b3VjaHdpbi5vCitvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNSkJKz0gdHNjMjAwNS5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNykJKz0gdHNjMjAwNy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCkJKz0gdWNiMTQwMF90cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEpCSs9IHdhY29tX3c4MDAxLm8KK29iai0kKENPTkZJR19UT1VDSFNDUkVFTl9XTTgzMVgpCSs9IHdtODMxeC10cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYKQkrPSB3bTk3eHgtdHMubwogd205N3h4LXRzLSQoQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNSkJKz0gd205NzA1Lm8KIHdtOTd4eC10cy0kKENPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTIpCSs9IHdtOTcxMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3Ny5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzcuYwppbmRleCBhMTk1MmZjLi43MTRkNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3Ny5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc3LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZDc4NzcuaD4KQEAgLTgyNiwzOSArODI3LDM3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgYWQ3ODc3X3N1c3BlbmQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IGFkNzg3N19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYWQ3ODc3ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCXN0cnVjdCBhZDc4NzcgKnRzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlhZDc4NzdfZGlzYWJsZSh0cyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhZDc4NzdfcmVzdW1lKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCitzdGF0aWMgaW50IGFkNzg3N19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBhZDc4NzcgKnRzID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisJc3RydWN0IGFkNzg3NyAqdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWFkNzg3N19lbmFibGUodHMpOwogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBhZDc4Nzdfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIGFkNzg3N19yZXN1bWUgIE5VTEwKICNlbmRpZgogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYWQ3ODc3X3BtLCBhZDc4Nzdfc3VzcGVuZCwgYWQ3ODc3X3Jlc3VtZSk7CisKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZDc4NzdfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImFkNzg3NyIsCiAJCS5idXMJPSAmc3BpX2J1c190eXBlLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJmFkNzg3N19wbSwKIAl9LAogCS5wcm9iZQkJPSBhZDc4NzdfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZDc4NzdfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGFkNzg3N19zdXNwZW5kLAotCS5yZXN1bWUJCT0gYWQ3ODc3X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFkNzg3N19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS1zcGkuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LXNwaS5jCmluZGV4IDU5YzZlNjhjLi5kZGY3MzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS1zcGkuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS1zcGkuYwpAQCAtNyw2ICs3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4JLyogQlVTX1NQSSAqLworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogCiAjaW5jbHVkZSAiYWQ3ODc5LmgiCkBAIC0yMCw5ICsyMSwxMCBAQAogI2RlZmluZSBBRDc4NzlfV1JJVEVDTUQocmVnKSAoQUQ3ODc5X0NNRChyZWcpKQogI2RlZmluZSBBRDc4NzlfUkVBRENNRChyZWcpICAoQUQ3ODc5X0NNRChyZWcpIHwgQUQ3ODc5X0NNRF9SRUFEKQogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGFkNzg3OV9zcGlfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgYWQ3ODc5X3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOwogCXN0cnVjdCBhZDc4NzkgKnRzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAKIAlhZDc4Nzlfc3VzcGVuZCh0cyk7CkBAIC0zMCwxOSArMzIsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhZDc4Nzlfc3BpX3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIGludCBhZDc4Nzlfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYWQ3ODc5ICp0cyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwogCiAJYWQ3ODc5X3Jlc3VtZSh0cyk7CiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jIGRlZmluZSBhZDc4Nzlfc3BpX3N1c3BlbmQgTlVMTAotIyBkZWZpbmUgYWQ3ODc5X3NwaV9yZXN1bWUgIE5VTEwKICNlbmRpZgogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYWQ3ODc5X3NwaV9wbSwgYWQ3ODc5X3NwaV9zdXNwZW5kLCBhZDc4Nzlfc3BpX3Jlc3VtZSk7CisKIC8qCiAgKiBhZDc4NzlfcmVhZC93cml0ZSBhcmUgb25seSB1c2VkIGZvciBpbml0aWFsIHNldHVwIGFuZCBmb3Igc3lzZnMgY29udHJvbHMuCiAgKiBUaGUgbWFpbiB0cmFmZmljIGlzIGRvbmUgaW4gYWQ3ODc5X2NvbGxlY3QoKS4KQEAgLTE3MywxMSArMTc1LDEwIEBACiAJCS5uYW1lCT0gImFkNzg3OSIsCiAJCS5idXMJPSAmc3BpX2J1c190eXBlLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJmFkNzg3OV9zcGlfcG0sCiAJfSwKIAkucHJvYmUJCT0gYWQ3ODc5X3NwaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkNzg3OV9zcGlfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGFkNzg3OV9zcGlfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGFkNzg3OV9zcGlfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWQ3ODc5X3NwaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IDRiZjIzMTYuLmMyNDk0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CkBAIC04OTIsOSArODkzLDEwIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IGFkczc4NDZfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgYWRzNzg0Nl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYWRzNzg0NiAqdHMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKwlzdHJ1Y3QgYWRzNzg0NiAqdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCW11dGV4X2xvY2soJnRzLT5sb2NrKTsKIApAQCAtOTE0LDkgKzkxNiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWRzNzg0Nl9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyBpbnQgYWRzNzg0Nl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJbXV0ZXhfbG9jaygmdHMtPmxvY2spOwogCkBAIC05MzUsNiArOTM3LDkgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhhZHM3ODQ2X3BtLCBhZHM3ODQ2X3N1c3BlbmQsIGFkczc4NDZfcmVzdW1lKTsKIAogc3RhdGljIGludCBfX2RldmluaXQgYWRzNzg0Nl9zZXR1cF9wZW5kb3duKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBhZHM3ODQ2ICp0cykKIHsKQEAgLTE0MDgsMTEgKzE0MTMsMTAgQEAKIAkJLm5hbWUJPSAiYWRzNzg0NiIsCiAJCS5idXMJPSAmc3BpX2J1c190eXBlLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJmFkczc4NDZfcG0sCiAJfSwKIAkucHJvYmUJCT0gYWRzNzg0Nl9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkczc4NDZfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGFkczc4NDZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGFkczc4NDZfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWRzNzg0Nl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX214dF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF9teHRfdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDEyNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF9teHRfdHMuYwpAQCAtMCwwICsxLDEyMTEgQEAKKy8qCisgKiBBdG1lbCBtYVhUb3VjaCBUb3VjaHNjcmVlbiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9hdG1lbF9teHRfdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworLyogVmVyc2lvbiAqLworI2RlZmluZSBNWFRfVkVSXzIwCQkyMAorI2RlZmluZSBNWFRfVkVSXzIxCQkyMQorI2RlZmluZSBNWFRfVkVSXzIyCQkyMgorCisvKiBTbGF2ZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTVhUX0FQUF9MT1cJCTB4NGEKKyNkZWZpbmUgTVhUX0FQUF9ISUdICQkweDRiCisjZGVmaW5lIE1YVF9CT09UX0xPVwkJMHgyNAorI2RlZmluZSBNWFRfQk9PVF9ISUdICQkweDI1CisKKy8qIEZpcm13YXJlICovCisjZGVmaW5lIE1YVF9GV19OQU1FCQkibWF4dG91Y2guZnciCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBNWFRfRkFNSUxZX0lECQkweDAwCisjZGVmaW5lIE1YVF9WQVJJQU5UX0lECQkweDAxCisjZGVmaW5lIE1YVF9WRVJTSU9OCQkweDAyCisjZGVmaW5lIE1YVF9CVUlMRAkJMHgwMworI2RlZmluZSBNWFRfTUFUUklYX1hfU0laRQkweDA0CisjZGVmaW5lIE1YVF9NQVRSSVhfWV9TSVpFCTB4MDUKKyNkZWZpbmUgTVhUX09CSkVDVF9OVU0JCTB4MDYKKyNkZWZpbmUgTVhUX09CSkVDVF9TVEFSVAkweDA3CisKKyNkZWZpbmUgTVhUX09CSkVDVF9TSVpFCQk2CisKKy8qIE9iamVjdCB0eXBlcyAqLworI2RlZmluZSBNWFRfREVCVUdfRElBR05PU1RJQwkzNworI2RlZmluZSBNWFRfR0VOX01FU1NBR0UJCTUKKyNkZWZpbmUgTVhUX0dFTl9DT01NQU5ECQk2CisjZGVmaW5lIE1YVF9HRU5fUE9XRVIJCTcKKyNkZWZpbmUgTVhUX0dFTl9BQ1FVSVJFCQk4CisjZGVmaW5lIE1YVF9UT1VDSF9NVUxUSQkJOQorI2RlZmluZSBNWFRfVE9VQ0hfS0VZQVJSQVkJMTUKKyNkZWZpbmUgTVhUX1RPVUNIX1BST1hJTUlUWQkyMworI2RlZmluZSBNWFRfUFJPQ0lfR1JJUEZBQ0UJMjAKKyNkZWZpbmUgTVhUX1BST0NHX05PSVNFCQkyMgorI2RlZmluZSBNWFRfUFJPQ0lfT05FVE9VQ0gJMjQKKyNkZWZpbmUgTVhUX1BST0NJX1RXT1RPVUNICTI3CisjZGVmaW5lIE1YVF9QUk9DSV9HUklQCQk0MAorI2RlZmluZSBNWFRfUFJPQ0lfUEFMTQkJNDEKKyNkZWZpbmUgTVhUX1NQVF9DT01NU0NPTkZJRwkxOAorI2RlZmluZSBNWFRfU1BUX0dQSU9QV00JCTE5CisjZGVmaW5lIE1YVF9TUFRfU0VMRlRFU1QJMjUKKyNkZWZpbmUgTVhUX1NQVF9DVEVDT05GSUcJMjgKKyNkZWZpbmUgTVhUX1NQVF9VU0VSREFUQQkzOAorI2RlZmluZSBNWFRfU1BUX0RJR0lUSVpFUgk0MworI2RlZmluZSBNWFRfU1BUX01FU1NBR0VDT1VOVAk0NAorCisvKiBNWFRfR0VOX0NPTU1BTkQgZmllbGQgKi8KKyNkZWZpbmUgTVhUX0NPTU1BTkRfUkVTRVQJMAorI2RlZmluZSBNWFRfQ09NTUFORF9CQUNLVVBOVgkxCisjZGVmaW5lIE1YVF9DT01NQU5EX0NBTElCUkFURQkyCisjZGVmaW5lIE1YVF9DT01NQU5EX1JFUE9SVEFMTAkzCisjZGVmaW5lIE1YVF9DT01NQU5EX0RJQUdOT1NUSUMJNQorCisvKiBNWFRfR0VOX1BPV0VSIGZpZWxkICovCisjZGVmaW5lIE1YVF9QT1dFUl9JRExFQUNRSU5UCTAKKyNkZWZpbmUgTVhUX1BPV0VSX0FDVFZBQ1FJTlQJMQorI2RlZmluZSBNWFRfUE9XRVJfQUNUVjJJRExFVE8JMgorCisvKiBNWFRfR0VOX0FDUVVJUkUgZmllbGQgKi8KKyNkZWZpbmUgTVhUX0FDUVVJUkVfQ0hSR1RJTUUJMAorI2RlZmluZSBNWFRfQUNRVUlSRV9UQ0hEUklGVAkyCisjZGVmaW5lIE1YVF9BQ1FVSVJFX0RSSUZUU1QJMworI2RlZmluZSBNWFRfQUNRVUlSRV9UQ0hBVVRPQ0FMCTQKKyNkZWZpbmUgTVhUX0FDUVVJUkVfU1lOQwk1CisjZGVmaW5lIE1YVF9BQ1FVSVJFX0FUQ0hDQUxTVAk2CisjZGVmaW5lIE1YVF9BQ1FVSVJFX0FUQ0hDQUxTVEhSCTcKKworLyogTVhUX1RPVUNIX01VTFRJIGZpZWxkICovCisjZGVmaW5lIE1YVF9UT1VDSF9DVFJMCQkwCisjZGVmaW5lIE1YVF9UT1VDSF9YT1JJR0lOCTEKKyNkZWZpbmUgTVhUX1RPVUNIX1lPUklHSU4JMgorI2RlZmluZSBNWFRfVE9VQ0hfWFNJWkUJCTMKKyNkZWZpbmUgTVhUX1RPVUNIX1lTSVpFCQk0CisjZGVmaW5lIE1YVF9UT1VDSF9CTEVOCQk2CisjZGVmaW5lIE1YVF9UT1VDSF9UQ0hUSFIJNworI2RlZmluZSBNWFRfVE9VQ0hfVENIREkJCTgKKyNkZWZpbmUgTVhUX1RPVUNIX09SSUVOVAk5CisjZGVmaW5lIE1YVF9UT1VDSF9NT1ZIWVNUSQkxMQorI2RlZmluZSBNWFRfVE9VQ0hfTU9WSFlTVE4JMTIKKyNkZWZpbmUgTVhUX1RPVUNIX05VTVRPVUNICTE0CisjZGVmaW5lIE1YVF9UT1VDSF9NUkdIWVNUCTE1CisjZGVmaW5lIE1YVF9UT1VDSF9NUkdUSFIJMTYKKyNkZWZpbmUgTVhUX1RPVUNIX0FNUEhZU1QJMTcKKyNkZWZpbmUgTVhUX1RPVUNIX1hSQU5HRV9MU0IJMTgKKyNkZWZpbmUgTVhUX1RPVUNIX1hSQU5HRV9NU0IJMTkKKyNkZWZpbmUgTVhUX1RPVUNIX1lSQU5HRV9MU0IJMjAKKyNkZWZpbmUgTVhUX1RPVUNIX1lSQU5HRV9NU0IJMjEKKyNkZWZpbmUgTVhUX1RPVUNIX1hMT0NMSVAJMjIKKyNkZWZpbmUgTVhUX1RPVUNIX1hISUNMSVAJMjMKKyNkZWZpbmUgTVhUX1RPVUNIX1lMT0NMSVAJMjQKKyNkZWZpbmUgTVhUX1RPVUNIX1lISUNMSVAJMjUKKyNkZWZpbmUgTVhUX1RPVUNIX1hFREdFQ1RSTAkyNgorI2RlZmluZSBNWFRfVE9VQ0hfWEVER0VESVNUCTI3CisjZGVmaW5lIE1YVF9UT1VDSF9ZRURHRUNUUkwJMjgKKyNkZWZpbmUgTVhUX1RPVUNIX1lFREdFRElTVAkyOQorI2RlZmluZSBNWFRfVE9VQ0hfSlVNUExJTUlUCTMwCisKKy8qIE1YVF9QUk9DSV9HUklQRkFDRSBmaWVsZCAqLworI2RlZmluZSBNWFRfR1JJUEZBQ0VfQ1RSTAkwCisjZGVmaW5lIE1YVF9HUklQRkFDRV9YTE9HUklQCTEKKyNkZWZpbmUgTVhUX0dSSVBGQUNFX1hISUdSSVAJMgorI2RlZmluZSBNWFRfR1JJUEZBQ0VfWUxPR1JJUAkzCisjZGVmaW5lIE1YVF9HUklQRkFDRV9ZSElHUklQCTQKKyNkZWZpbmUgTVhUX0dSSVBGQUNFX01BWFRDSFMJNQorI2RlZmluZSBNWFRfR1JJUEZBQ0VfU1pUSFIxCTcKKyNkZWZpbmUgTVhUX0dSSVBGQUNFX1NaVEhSMgk4CisjZGVmaW5lIE1YVF9HUklQRkFDRV9TSFBUSFIxCTkKKyNkZWZpbmUgTVhUX0dSSVBGQUNFX1NIUFRIUjIJMTAKKyNkZWZpbmUgTVhUX0dSSVBGQUNFX1NVUEVYVFRPCTExCisKKy8qIE1YVF9QUk9DSV9OT0lTRSBmaWVsZCAqLworI2RlZmluZSBNWFRfTk9JU0VfQ1RSTAkJMAorI2RlZmluZSBNWFRfTk9JU0VfT1VURkxFTgkxCisjZGVmaW5lIE1YVF9OT0lTRV9HQ0FGVUxfTFNCCTMKKyNkZWZpbmUgTVhUX05PSVNFX0dDQUZVTF9NU0IJNAorI2RlZmluZSBNWFRfTk9JU0VfR0NBRkxMX0xTQgk1CisjZGVmaW5lIE1YVF9OT0lTRV9HQ0FGTExfTVNCCTYKKyNkZWZpbmUgTVhUX05PSVNFX0FDVFZHQ0FGVkFMSUQJNworI2RlZmluZSBNWFRfTk9JU0VfTk9JU0VUSFIJOAorI2RlZmluZSBNWFRfTk9JU0VfRlJFUUhPUFNDQUxFCTEwCisjZGVmaW5lIE1YVF9OT0lTRV9GUkVRMAkJMTEKKyNkZWZpbmUgTVhUX05PSVNFX0ZSRVExCQkxMgorI2RlZmluZSBNWFRfTk9JU0VfRlJFUTIJCTEzCisjZGVmaW5lIE1YVF9OT0lTRV9GUkVRMwkJMTQKKyNkZWZpbmUgTVhUX05PSVNFX0ZSRVE0CQkxNQorI2RlZmluZSBNWFRfTk9JU0VfSURMRUdDQUZWQUxJRAkxNgorCisvKiBNWFRfU1BUX0NPTU1TQ09ORklHICovCisjZGVmaW5lIE1YVF9DT01NU19DVFJMCQkwCisjZGVmaW5lIE1YVF9DT01NU19DTUQJCTEKKworLyogTVhUX1NQVF9DVEVDT05GSUcgZmllbGQgKi8KKyNkZWZpbmUgTVhUX0NURV9DVFJMCQkwCisjZGVmaW5lIE1YVF9DVEVfQ01ECQkxCisjZGVmaW5lIE1YVF9DVEVfTU9ERQkJMgorI2RlZmluZSBNWFRfQ1RFX0lETEVHQ0FGREVQVEgJMworI2RlZmluZSBNWFRfQ1RFX0FDVFZHQ0FGREVQVEgJNAorI2RlZmluZSBNWFRfQ1RFX1ZPTFRBR0UJCTUKKworI2RlZmluZSBNWFRfVk9MVEFHRV9ERUZBVUxUCTI3MDAwMDAKKyNkZWZpbmUgTVhUX1ZPTFRBR0VfU1RFUAkxMDAwMAorCisvKiBEZWZpbmUgZm9yIE1YVF9HRU5fQ09NTUFORCAqLworI2RlZmluZSBNWFRfQk9PVF9WQUxVRQkJMHhhNQorI2RlZmluZSBNWFRfQkFDS1VQX1ZBTFVFCTB4NTUKKyNkZWZpbmUgTVhUX0JBQ0tVUF9USU1FCQkyNQkvKiBtc2VjICovCisjZGVmaW5lIE1YVF9SRVNFVF9USU1FCQk2NQkvKiBtc2VjICovCisKKyNkZWZpbmUgTVhUX0ZXUkVTRVRfVElNRQkxNzUJLyogbXNlYyAqLworCisvKiBDb21tYW5kIHRvIHVubG9jayBib290bG9hZGVyICovCisjZGVmaW5lIE1YVF9VTkxPQ0tfQ01EX01TQgkweGFhCisjZGVmaW5lIE1YVF9VTkxPQ0tfQ01EX0xTQgkweGRjCisKKy8qIEJvb3Rsb2FkZXIgbW9kZSBzdGF0dXMgKi8KKyNkZWZpbmUgTVhUX1dBSVRJTkdfQk9PVExPQURfQ01ECTB4YzAJLyogdmFsaWQgNyA2IGJpdCBvbmx5ICovCisjZGVmaW5lIE1YVF9XQUlUSU5HX0ZSQU1FX0RBVEEJMHg4MAkvKiB2YWxpZCA3IDYgYml0IG9ubHkgKi8KKyNkZWZpbmUgTVhUX0ZSQU1FX0NSQ19DSEVDSwkweDAyCisjZGVmaW5lIE1YVF9GUkFNRV9DUkNfRkFJTAkweDAzCisjZGVmaW5lIE1YVF9GUkFNRV9DUkNfUEFTUwkweDA0CisjZGVmaW5lIE1YVF9BUFBfQ1JDX0ZBSUwJMHg0MAkvKiB2YWxpZCA3IDggYml0IG9ubHkgKi8KKyNkZWZpbmUgTVhUX0JPT1RfU1RBVFVTX01BU0sJMHgzZgorCisvKiBUb3VjaCBzdGF0dXMgKi8KKyNkZWZpbmUgTVhUX1NVUFBSRVNTCQkoMSA8PCAxKQorI2RlZmluZSBNWFRfQU1QCQkJKDEgPDwgMikKKyNkZWZpbmUgTVhUX1ZFQ1RPUgkJKDEgPDwgMykKKyNkZWZpbmUgTVhUX01PVkUJCSgxIDw8IDQpCisjZGVmaW5lIE1YVF9SRUxFQVNFCQkoMSA8PCA1KQorI2RlZmluZSBNWFRfUFJFU1MJCSgxIDw8IDYpCisjZGVmaW5lIE1YVF9ERVRFQ1QJCSgxIDw8IDcpCisKKy8qIFRvdWNoc2NyZWVuIGFic29sdXRlIHZhbHVlcyAqLworI2RlZmluZSBNWFRfTUFYX1hDCQkweDNmZgorI2RlZmluZSBNWFRfTUFYX1lDCQkweDNmZgorI2RlZmluZSBNWFRfTUFYX0FSRUEJCTB4ZmYKKworI2RlZmluZSBNWFRfTUFYX0ZJTkdFUgkJMTAKKworc3RydWN0IG14dF9pbmZvIHsKKwl1OCBmYW1pbHlfaWQ7CisJdTggdmFyaWFudF9pZDsKKwl1OCB2ZXJzaW9uOworCXU4IGJ1aWxkOworCXU4IG1hdHJpeF94c2l6ZTsKKwl1OCBtYXRyaXhfeXNpemU7CisJdTggb2JqZWN0X251bTsKK307CisKK3N0cnVjdCBteHRfb2JqZWN0IHsKKwl1OCB0eXBlOworCXUxNiBzdGFydF9hZGRyZXNzOworCXU4IHNpemU7CisJdTggaW5zdGFuY2VzOworCXU4IG51bV9yZXBvcnRfaWRzOworCisJLyogdG8gbWFwIG9iamVjdCBhbmQgbWVzc2FnZSAqLworCXU4IG1heF9yZXBvcnRpZDsKK307CisKK3N0cnVjdCBteHRfbWVzc2FnZSB7CisJdTggcmVwb3J0aWQ7CisJdTggbWVzc2FnZVs3XTsKKwl1OCBjaGVja3N1bTsKK307CisKK3N0cnVjdCBteHRfZmluZ2VyIHsKKwlpbnQgc3RhdHVzOworCWludCB4OworCWludCB5OworCWludCBhcmVhOworfTsKKworLyogRWFjaCBjbGllbnQgaGFzIHRoaXMgYWRkaXRpb25hbCBkYXRhICovCitzdHJ1Y3QgbXh0X2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWNvbnN0IHN0cnVjdCBteHRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IG14dF9vYmplY3QgKm9iamVjdF90YWJsZTsKKwlzdHJ1Y3QgbXh0X2luZm8gaW5mbzsKKwlzdHJ1Y3QgbXh0X2ZpbmdlciBmaW5nZXJbTVhUX01BWF9GSU5HRVJdOworCXVuc2lnbmVkIGludCBpcnE7Cit9OworCitzdGF0aWMgYm9vbCBteHRfb2JqZWN0X3JlYWRhYmxlKHVuc2lnbmVkIGludCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTVhUX0dFTl9NRVNTQUdFOgorCWNhc2UgTVhUX0dFTl9DT01NQU5EOgorCWNhc2UgTVhUX0dFTl9QT1dFUjoKKwljYXNlIE1YVF9HRU5fQUNRVUlSRToKKwljYXNlIE1YVF9UT1VDSF9NVUxUSToKKwljYXNlIE1YVF9UT1VDSF9LRVlBUlJBWToKKwljYXNlIE1YVF9UT1VDSF9QUk9YSU1JVFk6CisJY2FzZSBNWFRfUFJPQ0lfR1JJUEZBQ0U6CisJY2FzZSBNWFRfUFJPQ0dfTk9JU0U6CisJY2FzZSBNWFRfUFJPQ0lfT05FVE9VQ0g6CisJY2FzZSBNWFRfUFJPQ0lfVFdPVE9VQ0g6CisJY2FzZSBNWFRfUFJPQ0lfR1JJUDoKKwljYXNlIE1YVF9QUk9DSV9QQUxNOgorCWNhc2UgTVhUX1NQVF9DT01NU0NPTkZJRzoKKwljYXNlIE1YVF9TUFRfR1BJT1BXTToKKwljYXNlIE1YVF9TUFRfU0VMRlRFU1Q6CisJY2FzZSBNWFRfU1BUX0NURUNPTkZJRzoKKwljYXNlIE1YVF9TUFRfVVNFUkRBVEE6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIG14dF9vYmplY3Rfd3JpdGFibGUodW5zaWduZWQgaW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNWFRfR0VOX0NPTU1BTkQ6CisJY2FzZSBNWFRfR0VOX1BPV0VSOgorCWNhc2UgTVhUX0dFTl9BQ1FVSVJFOgorCWNhc2UgTVhUX1RPVUNIX01VTFRJOgorCWNhc2UgTVhUX1RPVUNIX0tFWUFSUkFZOgorCWNhc2UgTVhUX1RPVUNIX1BST1hJTUlUWToKKwljYXNlIE1YVF9QUk9DSV9HUklQRkFDRToKKwljYXNlIE1YVF9QUk9DR19OT0lTRToKKwljYXNlIE1YVF9QUk9DSV9PTkVUT1VDSDoKKwljYXNlIE1YVF9QUk9DSV9UV09UT1VDSDoKKwljYXNlIE1YVF9QUk9DSV9HUklQOgorCWNhc2UgTVhUX1BST0NJX1BBTE06CisJY2FzZSBNWFRfU1BUX0dQSU9QV006CisJY2FzZSBNWFRfU1BUX1NFTEZURVNUOgorCWNhc2UgTVhUX1NQVF9DVEVDT05GSUc6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG14dF9kdW1wX21lc3NhZ2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IG14dF9tZXNzYWdlICptZXNzYWdlKQoreworCWRldl9kYmcoZGV2LCAicmVwb3J0aWQ6XHQweCV4XG4iLCBtZXNzYWdlLT5yZXBvcnRpZCk7CisJZGV2X2RiZyhkZXYsICJtZXNzYWdlMTpcdDB4JXhcbiIsIG1lc3NhZ2UtPm1lc3NhZ2VbMF0pOworCWRldl9kYmcoZGV2LCAibWVzc2FnZTI6XHQweCV4XG4iLCBtZXNzYWdlLT5tZXNzYWdlWzFdKTsKKwlkZXZfZGJnKGRldiwgIm1lc3NhZ2UzOlx0MHgleFxuIiwgbWVzc2FnZS0+bWVzc2FnZVsyXSk7CisJZGV2X2RiZyhkZXYsICJtZXNzYWdlNDpcdDB4JXhcbiIsIG1lc3NhZ2UtPm1lc3NhZ2VbM10pOworCWRldl9kYmcoZGV2LCAibWVzc2FnZTU6XHQweCV4XG4iLCBtZXNzYWdlLT5tZXNzYWdlWzRdKTsKKwlkZXZfZGJnKGRldiwgIm1lc3NhZ2U2Olx0MHgleFxuIiwgbWVzc2FnZS0+bWVzc2FnZVs1XSk7CisJZGV2X2RiZyhkZXYsICJtZXNzYWdlNzpcdDB4JXhcbiIsIG1lc3NhZ2UtPm1lc3NhZ2VbNl0pOworCWRldl9kYmcoZGV2LCAiY2hlY2tzdW06XHQweCV4XG4iLCBtZXNzYWdlLT5jaGVja3N1bSk7Cit9CisKK3N0YXRpYyBpbnQgbXh0X2NoZWNrX2Jvb3Rsb2FkZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwl1OCB2YWw7CisKK3JlY2hlY2s6CisJaWYgKGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICZ2YWwsIDEpICE9IDEpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjIHJlY3YgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIE1YVF9XQUlUSU5HX0JPT1RMT0FEX0NNRDoKKwljYXNlIE1YVF9XQUlUSU5HX0ZSQU1FX0RBVEE6CisJCXZhbCAmPSB+TVhUX0JPT1RfU1RBVFVTX01BU0s7CisJCWJyZWFrOworCWNhc2UgTVhUX0ZSQU1FX0NSQ19QQVNTOgorCQlpZiAodmFsID09IE1YVF9GUkFNRV9DUkNfQ0hFQ0spCisJCQlnb3RvIHJlY2hlY2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2YWwgIT0gc3RhdGUpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJVbnZhbGlkIGJvb3Rsb2FkZXIgbW9kZSBzdGF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14dF91bmxvY2tfYm9vdGxvYWRlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXU4IGJ1ZlsyXTsKKworCWJ1ZlswXSA9IE1YVF9VTkxPQ0tfQ01EX0xTQjsKKwlidWZbMV0gPSBNWFRfVU5MT0NLX0NNRF9NU0I7CisKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKSAhPSAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGkyYyBzZW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteHRfZndfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBmcmFtZV9zaXplKQoreworCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBkYXRhLCBmcmFtZV9zaXplKSAhPSBmcmFtZV9zaXplKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGkyYyBzZW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX214dF9yZWFkX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICAgIHUxNiByZWcsIHUxNiBsZW4sIHZvaWQgKnZhbCkKK3sKKwlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOworCXU4IGJ1ZlsyXTsKKworCWJ1ZlswXSA9IHJlZyAmIDB4ZmY7CisJYnVmWzFdID0gKHJlZyA+PiA4KSAmIDB4ZmY7CisKKwkvKiBXcml0ZSByZWdpc3RlciAqLworCXhmZXJbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwl4ZmVyWzBdLmZsYWdzID0gMDsKKwl4ZmVyWzBdLmxlbiA9IDI7CisJeGZlclswXS5idWYgPSBidWY7CisKKwkvKiBSZWFkIGRhdGEgKi8KKwl4ZmVyWzFdLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJeGZlclsxXS5mbGFncyA9IEkyQ19NX1JEOworCXhmZXJbMV0ubGVuID0gbGVuOworCXhmZXJbMV0uYnVmID0gdmFsOworCisJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIHhmZXIsIDIpICE9IDIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjIHRyYW5zZmVyIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteHRfcmVhZF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgdTggKnZhbCkKK3sKKwlyZXR1cm4gX19teHRfcmVhZF9yZWcoY2xpZW50LCByZWcsIDEsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbXh0X3dyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJdTggYnVmWzNdOworCisJYnVmWzBdID0gcmVnICYgMHhmZjsKKwlidWZbMV0gPSAocmVnID4+IDgpICYgMHhmZjsKKwlidWZbMl0gPSB2YWw7CisKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKSAhPSAzKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGkyYyBzZW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteHRfcmVhZF9vYmplY3RfdGFibGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICB1MTYgcmVnLCB1OCAqb2JqZWN0X2J1ZikKK3sKKwlyZXR1cm4gX19teHRfcmVhZF9yZWcoY2xpZW50LCByZWcsIE1YVF9PQkpFQ1RfU0laRSwKKwkJCQkgICBvYmplY3RfYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBteHRfb2JqZWN0ICoKK214dF9nZXRfb2JqZWN0KHN0cnVjdCBteHRfZGF0YSAqZGF0YSwgdTggdHlwZSkKK3sKKwlzdHJ1Y3QgbXh0X29iamVjdCAqb2JqZWN0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmluZm8ub2JqZWN0X251bTsgaSsrKSB7CisJCW9iamVjdCA9IGRhdGEtPm9iamVjdF90YWJsZSArIGk7CisJCWlmIChvYmplY3QtPnR5cGUgPT0gdHlwZSkKKwkJCXJldHVybiBvYmplY3Q7CisJfQorCisJZGV2X2VycigmZGF0YS0+Y2xpZW50LT5kZXYsICJJbnZhbGlkIG9iamVjdCB0eXBlXG4iKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBteHRfcmVhZF9tZXNzYWdlKHN0cnVjdCBteHRfZGF0YSAqZGF0YSwKKwkJCQkgc3RydWN0IG14dF9tZXNzYWdlICptZXNzYWdlKQoreworCXN0cnVjdCBteHRfb2JqZWN0ICpvYmplY3Q7CisJdTE2IHJlZzsKKworCW9iamVjdCA9IG14dF9nZXRfb2JqZWN0KGRhdGEsIE1YVF9HRU5fTUVTU0FHRSk7CisJaWYgKCFvYmplY3QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gb2JqZWN0LT5zdGFydF9hZGRyZXNzOworCXJldHVybiBfX214dF9yZWFkX3JlZyhkYXRhLT5jbGllbnQsIHJlZywKKwkJCXNpemVvZihzdHJ1Y3QgbXh0X21lc3NhZ2UpLCBtZXNzYWdlKTsKK30KKworc3RhdGljIGludCBteHRfcmVhZF9vYmplY3Qoc3RydWN0IG14dF9kYXRhICpkYXRhLAorCQkJCXU4IHR5cGUsIHU4IG9mZnNldCwgdTggKnZhbCkKK3sKKwlzdHJ1Y3QgbXh0X29iamVjdCAqb2JqZWN0OworCXUxNiByZWc7CisKKwlvYmplY3QgPSBteHRfZ2V0X29iamVjdChkYXRhLCB0eXBlKTsKKwlpZiAoIW9iamVjdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgPSBvYmplY3QtPnN0YXJ0X2FkZHJlc3M7CisJcmV0dXJuIF9fbXh0X3JlYWRfcmVnKGRhdGEtPmNsaWVudCwgcmVnICsgb2Zmc2V0LCAxLCB2YWwpOworfQorCitzdGF0aWMgaW50IG14dF93cml0ZV9vYmplY3Qoc3RydWN0IG14dF9kYXRhICpkYXRhLAorCQkJCSB1OCB0eXBlLCB1OCBvZmZzZXQsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgbXh0X29iamVjdCAqb2JqZWN0OworCXUxNiByZWc7CisKKwlvYmplY3QgPSBteHRfZ2V0X29iamVjdChkYXRhLCB0eXBlKTsKKwlpZiAoIW9iamVjdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgPSBvYmplY3QtPnN0YXJ0X2FkZHJlc3M7CisJcmV0dXJuIG14dF93cml0ZV9yZWcoZGF0YS0+Y2xpZW50LCByZWcgKyBvZmZzZXQsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIG14dF9pbnB1dF9yZXBvcnQoc3RydWN0IG14dF9kYXRhICpkYXRhLCBpbnQgc2luZ2xlX2lkKQoreworCXN0cnVjdCBteHRfZmluZ2VyICpmaW5nZXIgPSBkYXRhLT5maW5nZXI7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gZGF0YS0+aW5wdXRfZGV2OworCWludCBzdGF0dXMgPSBmaW5nZXJbc2luZ2xlX2lkXS5zdGF0dXM7CisJaW50IGZpbmdlcl9udW0gPSAwOworCWludCBpZDsKKworCWZvciAoaWQgPSAwOyBpZCA8IE1YVF9NQVhfRklOR0VSOyBpZCsrKSB7CisJCWlmICghZmluZ2VyW2lkXS5zdGF0dXMpCisJCQljb250aW51ZTsKKworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX01UX1RPVUNIX01BSk9SLAorCQkJCWZpbmdlcltpZF0uc3RhdHVzICE9IE1YVF9SRUxFQVNFID8KKwkJCQlmaW5nZXJbaWRdLmFyZWEgOiAwKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19NVF9QT1NJVElPTl9YLAorCQkJCWZpbmdlcltpZF0ueCk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwKKwkJCQlmaW5nZXJbaWRdLnkpOworCQlpbnB1dF9tdF9zeW5jKGlucHV0X2Rldik7CisKKwkJaWYgKGZpbmdlcltpZF0uc3RhdHVzID09IE1YVF9SRUxFQVNFKQorCQkJZmluZ2VyW2lkXS5zdGF0dXMgPSAwOworCQllbHNlCisJCQlmaW5nZXJfbnVtKys7CisJfQorCisJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9kZXYsIEJUTl9UT1VDSCwgZmluZ2VyX251bSA+IDApOworCisJaWYgKHN0YXR1cyAhPSBNWFRfUkVMRUFTRSkgeworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1gsIGZpbmdlcltzaW5nbGVfaWRdLngpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1ksIGZpbmdlcltzaW5nbGVfaWRdLnkpOworCX0KKworCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKK30KKworc3RhdGljIHZvaWQgbXh0X2lucHV0X3RvdWNoZXZlbnQoc3RydWN0IG14dF9kYXRhICpkYXRhLAorCQkJCSAgICAgIHN0cnVjdCBteHRfbWVzc2FnZSAqbWVzc2FnZSwgaW50IGlkKQoreworCXN0cnVjdCBteHRfZmluZ2VyICpmaW5nZXIgPSBkYXRhLT5maW5nZXI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmNsaWVudC0+ZGV2OworCXU4IHN0YXR1cyA9IG1lc3NhZ2UtPm1lc3NhZ2VbMF07CisJaW50IHg7CisJaW50IHk7CisJaW50IGFyZWE7CisKKwkvKiBDaGVjayB0aGUgdG91Y2ggaXMgcHJlc2VudCBvbiB0aGUgc2NyZWVuICovCisJaWYgKCEoc3RhdHVzICYgTVhUX0RFVEVDVCkpIHsKKwkJaWYgKHN0YXR1cyAmIE1YVF9SRUxFQVNFKSB7CisJCQlkZXZfZGJnKGRldiwgIlslZF0gcmVsZWFzZWRcbiIsIGlkKTsKKworCQkJZmluZ2VyW2lkXS5zdGF0dXMgPSBNWFRfUkVMRUFTRTsKKwkJCW14dF9pbnB1dF9yZXBvcnQoZGF0YSwgaWQpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBvbmx5IEFNUCBkZXRlY3Rpb24gKi8KKwlpZiAoIShzdGF0dXMgJiAoTVhUX1BSRVNTIHwgTVhUX01PVkUpKSkKKwkJcmV0dXJuOworCisJeCA9IChtZXNzYWdlLT5tZXNzYWdlWzFdIDw8IDIpIHwgKChtZXNzYWdlLT5tZXNzYWdlWzNdICYgfjB4M2YpID4+IDYpOworCXkgPSAobWVzc2FnZS0+bWVzc2FnZVsyXSA8PCAyKSB8ICgobWVzc2FnZS0+bWVzc2FnZVszXSAmIH4weGYzKSA+PiAyKTsKKwlhcmVhID0gbWVzc2FnZS0+bWVzc2FnZVs0XTsKKworCWRldl9kYmcoZGV2LCAiWyVkXSAlcyB4OiAlZCwgeTogJWQsIGFyZWE6ICVkXG4iLCBpZCwKKwkJc3RhdHVzICYgTVhUX01PVkUgPyAibW92ZWQiIDogInByZXNzZWQiLAorCQl4LCB5LCBhcmVhKTsKKworCWZpbmdlcltpZF0uc3RhdHVzID0gc3RhdHVzICYgTVhUX01PVkUgPworCQkJCU1YVF9NT1ZFIDogTVhUX1BSRVNTOworCWZpbmdlcltpZF0ueCA9IHg7CisJZmluZ2VyW2lkXS55ID0geTsKKwlmaW5nZXJbaWRdLmFyZWEgPSBhcmVhOworCisJbXh0X2lucHV0X3JlcG9ydChkYXRhLCBpZCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBteHRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEgPSBkZXZfaWQ7CisJc3RydWN0IG14dF9tZXNzYWdlIG1lc3NhZ2U7CisJc3RydWN0IG14dF9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+Y2xpZW50LT5kZXY7CisJaW50IGlkOworCXU4IHJlcG9ydGlkOworCXU4IG1heF9yZXBvcnRpZDsKKwl1OCBtaW5fcmVwb3J0aWQ7CisKKwlkbyB7CisJCWlmIChteHRfcmVhZF9tZXNzYWdlKGRhdGEsICZtZXNzYWdlKSkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBtZXNzYWdlXG4iKTsKKwkJCWdvdG8gZW5kOworCQl9CisKKwkJcmVwb3J0aWQgPSBtZXNzYWdlLnJlcG9ydGlkOworCisJCS8qIHdoZXRoZXIgcmVwb3J0aWQgaXMgdGhpbmcgb2YgTVhUX1RPVUNIX01VTFRJICovCisJCW9iamVjdCA9IG14dF9nZXRfb2JqZWN0KGRhdGEsIE1YVF9UT1VDSF9NVUxUSSk7CisJCWlmICghb2JqZWN0KQorCQkJZ290byBlbmQ7CisKKwkJbWF4X3JlcG9ydGlkID0gb2JqZWN0LT5tYXhfcmVwb3J0aWQ7CisJCW1pbl9yZXBvcnRpZCA9IG1heF9yZXBvcnRpZCAtIG9iamVjdC0+bnVtX3JlcG9ydF9pZHMgKyAxOworCQlpZCA9IHJlcG9ydGlkIC0gbWluX3JlcG9ydGlkOworCisJCWlmIChyZXBvcnRpZCA+PSBtaW5fcmVwb3J0aWQgJiYgcmVwb3J0aWQgPD0gbWF4X3JlcG9ydGlkKQorCQkJbXh0X2lucHV0X3RvdWNoZXZlbnQoZGF0YSwgJm1lc3NhZ2UsIGlkKTsKKwkJZWxzZQorCQkJbXh0X2R1bXBfbWVzc2FnZShkZXYsICZtZXNzYWdlKTsKKwl9IHdoaWxlIChyZXBvcnRpZCAhPSAweGZmKTsKKworZW5kOgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBteHRfY2hlY2tfcmVnX2luaXQoc3RydWN0IG14dF9kYXRhICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBteHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkYXRhLT5wZGF0YTsKKwlzdHJ1Y3QgbXh0X29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5jbGllbnQtPmRldjsKKwlpbnQgaW5kZXggPSAwOworCWludCBpLCBqLCBjb25maWdfb2Zmc2V0OworCisJaWYgKCFwZGF0YS0+Y29uZmlnKSB7CisJCWRldl9kYmcoZGV2LCAiTm8gY2ZnIGRhdGEgZGVmaW5lZCwgc2tpcHBpbmcgcmVnIGluaXRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5mby5vYmplY3RfbnVtOyBpKyspIHsKKwkJb2JqZWN0ID0gZGF0YS0+b2JqZWN0X3RhYmxlICsgaTsKKworCQlpZiAoIW14dF9vYmplY3Rfd3JpdGFibGUob2JqZWN0LT50eXBlKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaiA9IDA7IGogPCBvYmplY3QtPnNpemUgKyAxOyBqKyspIHsKKwkJCWNvbmZpZ19vZmZzZXQgPSBpbmRleCArIGo7CisJCQlpZiAoY29uZmlnX29mZnNldCA+IHBkYXRhLT5jb25maWdfbGVuZ3RoKSB7CisJCQkJZGV2X2VycihkZXYsICJOb3QgZW5vdWdoIGNvbmZpZyBkYXRhIVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlteHRfd3JpdGVfb2JqZWN0KGRhdGEsIG9iamVjdC0+dHlwZSwgaiwKKwkJCQkJIHBkYXRhLT5jb25maWdbY29uZmlnX29mZnNldF0pOworCQl9CisJCWluZGV4ICs9IG9iamVjdC0+c2l6ZSArIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXh0X21ha2VfaGlnaGNoZyhzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmNsaWVudC0+ZGV2OworCXN0cnVjdCBteHRfbWVzc2FnZSBtZXNzYWdlOworCWludCBjb3VudCA9IDEwOworCWludCBlcnJvcjsKKworCS8qIFJlYWQgZHVtbXkgbWVzc2FnZSB0byBtYWtlIGhpZ2ggQ0hHIHBpbiAqLworCWRvIHsKKwkJZXJyb3IgPSBteHRfcmVhZF9tZXNzYWdlKGRhdGEsICZtZXNzYWdlKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0gd2hpbGUgKG1lc3NhZ2UucmVwb3J0aWQgIT0gMHhmZiAmJiAtLWNvdW50KTsKKworCWlmICghY291bnQpIHsKKwkJZGV2X2VycihkZXYsICJDSEcgcGluIGlzbid0IGNsZWFyZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBteHRfaGFuZGxlX3BkYXRhKHN0cnVjdCBteHRfZGF0YSAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgbXh0X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJdTggdm9sdGFnZTsKKworCS8qIFNldCB0b3VjaHNjcmVlbiBsaW5lcyAqLworCW14dF93cml0ZV9vYmplY3QoZGF0YSwgTVhUX1RPVUNIX01VTFRJLCBNWFRfVE9VQ0hfWFNJWkUsCisJCQlwZGF0YS0+eF9saW5lKTsKKwlteHRfd3JpdGVfb2JqZWN0KGRhdGEsIE1YVF9UT1VDSF9NVUxUSSwgTVhUX1RPVUNIX1lTSVpFLAorCQkJcGRhdGEtPnlfbGluZSk7CisKKwkvKiBTZXQgdG91Y2hzY3JlZW4gb3JpZW50ICovCisJbXh0X3dyaXRlX29iamVjdChkYXRhLCBNWFRfVE9VQ0hfTVVMVEksIE1YVF9UT1VDSF9PUklFTlQsCisJCQlwZGF0YS0+b3JpZW50KTsKKworCS8qIFNldCB0b3VjaHNjcmVlbiBidXJzdCBsZW5ndGggKi8KKwlteHRfd3JpdGVfb2JqZWN0KGRhdGEsIE1YVF9UT1VDSF9NVUxUSSwKKwkJCU1YVF9UT1VDSF9CTEVOLCBwZGF0YS0+Ymxlbik7CisKKwkvKiBTZXQgdG91Y2hzY3JlZW4gdGhyZXNob2xkICovCisJbXh0X3dyaXRlX29iamVjdChkYXRhLCBNWFRfVE9VQ0hfTVVMVEksCisJCQlNWFRfVE9VQ0hfVENIVEhSLCBwZGF0YS0+dGhyZXNob2xkKTsKKworCS8qIFNldCB0b3VjaHNjcmVlbiByZXNvbHV0aW9uICovCisJbXh0X3dyaXRlX29iamVjdChkYXRhLCBNWFRfVE9VQ0hfTVVMVEksCisJCQlNWFRfVE9VQ0hfWFJBTkdFX0xTQiwgKHBkYXRhLT54X3NpemUgLSAxKSAmIDB4ZmYpOworCW14dF93cml0ZV9vYmplY3QoZGF0YSwgTVhUX1RPVUNIX01VTFRJLAorCQkJTVhUX1RPVUNIX1hSQU5HRV9NU0IsIChwZGF0YS0+eF9zaXplIC0gMSkgPj4gOCk7CisJbXh0X3dyaXRlX29iamVjdChkYXRhLCBNWFRfVE9VQ0hfTVVMVEksCisJCQlNWFRfVE9VQ0hfWVJBTkdFX0xTQiwgKHBkYXRhLT55X3NpemUgLSAxKSAmIDB4ZmYpOworCW14dF93cml0ZV9vYmplY3QoZGF0YSwgTVhUX1RPVUNIX01VTFRJLAorCQkJTVhUX1RPVUNIX1lSQU5HRV9NU0IsIChwZGF0YS0+eV9zaXplIC0gMSkgPj4gOCk7CisKKwkvKiBTZXQgdG91Y2hzY3JlZW4gdm9sdGFnZSAqLworCWlmIChwZGF0YS0+dm9sdGFnZSkgeworCQlpZiAocGRhdGEtPnZvbHRhZ2UgPCBNWFRfVk9MVEFHRV9ERUZBVUxUKSB7CisJCQl2b2x0YWdlID0gKE1YVF9WT0xUQUdFX0RFRkFVTFQgLSBwZGF0YS0+dm9sdGFnZSkgLworCQkJCU1YVF9WT0xUQUdFX1NURVA7CisJCQl2b2x0YWdlID0gMHhmZiAtIHZvbHRhZ2UgKyAxOworCQl9IGVsc2UKKwkJCXZvbHRhZ2UgPSAocGRhdGEtPnZvbHRhZ2UgLSBNWFRfVk9MVEFHRV9ERUZBVUxUKSAvCisJCQkJTVhUX1ZPTFRBR0VfU1RFUDsKKworCQlteHRfd3JpdGVfb2JqZWN0KGRhdGEsIE1YVF9TUFRfQ1RFQ09ORklHLAorCQkJCU1YVF9DVEVfVk9MVEFHRSwgdm9sdGFnZSk7CisJfQorfQorCitzdGF0aWMgaW50IG14dF9nZXRfaW5mbyhzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlzdHJ1Y3QgbXh0X2luZm8gKmluZm8gPSAmZGF0YS0+aW5mbzsKKwlpbnQgZXJyb3I7CisJdTggdmFsOworCisJZXJyb3IgPSBteHRfcmVhZF9yZWcoY2xpZW50LCBNWFRfRkFNSUxZX0lELCAmdmFsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlpbmZvLT5mYW1pbHlfaWQgPSB2YWw7CisKKwllcnJvciA9IG14dF9yZWFkX3JlZyhjbGllbnQsIE1YVF9WQVJJQU5UX0lELCAmdmFsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlpbmZvLT52YXJpYW50X2lkID0gdmFsOworCisJZXJyb3IgPSBteHRfcmVhZF9yZWcoY2xpZW50LCBNWFRfVkVSU0lPTiwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaW5mby0+dmVyc2lvbiA9IHZhbDsKKworCWVycm9yID0gbXh0X3JlYWRfcmVnKGNsaWVudCwgTVhUX0JVSUxELCAmdmFsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlpbmZvLT5idWlsZCA9IHZhbDsKKworCWVycm9yID0gbXh0X3JlYWRfcmVnKGNsaWVudCwgTVhUX09CSkVDVF9OVU0sICZ2YWwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWluZm8tPm9iamVjdF9udW0gPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteHRfZ2V0X29iamVjdF90YWJsZShzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEpCit7CisJaW50IGVycm9yOworCWludCBpOworCXUxNiByZWc7CisJdTggcmVwb3J0aWQgPSAwOworCXU4IGJ1ZltNWFRfT0JKRUNUX1NJWkVdOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmluZm8ub2JqZWN0X251bTsgaSsrKSB7CisJCXN0cnVjdCBteHRfb2JqZWN0ICpvYmplY3QgPSBkYXRhLT5vYmplY3RfdGFibGUgKyBpOworCisJCXJlZyA9IE1YVF9PQkpFQ1RfU1RBUlQgKyBNWFRfT0JKRUNUX1NJWkUgKiBpOworCQllcnJvciA9IG14dF9yZWFkX29iamVjdF90YWJsZShkYXRhLT5jbGllbnQsIHJlZywgYnVmKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCisJCW9iamVjdC0+dHlwZSA9IGJ1ZlswXTsKKwkJb2JqZWN0LT5zdGFydF9hZGRyZXNzID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlsxXTsKKwkJb2JqZWN0LT5zaXplID0gYnVmWzNdOworCQlvYmplY3QtPmluc3RhbmNlcyA9IGJ1Zls0XTsKKwkJb2JqZWN0LT5udW1fcmVwb3J0X2lkcyA9IGJ1Zls1XTsKKworCQlpZiAob2JqZWN0LT5udW1fcmVwb3J0X2lkcykgeworCQkJcmVwb3J0aWQgKz0gb2JqZWN0LT5udW1fcmVwb3J0X2lkcyAqCisJCQkJCShvYmplY3QtPmluc3RhbmNlcyArIDEpOworCQkJb2JqZWN0LT5tYXhfcmVwb3J0aWQgPSByZXBvcnRpZDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14dF9pbml0aWFsaXplKHN0cnVjdCBteHRfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCXN0cnVjdCBteHRfaW5mbyAqaW5mbyA9ICZkYXRhLT5pbmZvOworCWludCBlcnJvcjsKKwl1OCB2YWw7CisKKwllcnJvciA9IG14dF9nZXRfaW5mbyhkYXRhKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWRhdGEtPm9iamVjdF90YWJsZSA9IGtjYWxsb2MoaW5mby0+b2JqZWN0X251bSwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbXh0X29iamVjdCksCisJCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEtPm9iamVjdF90YWJsZSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBHZXQgb2JqZWN0IHRhYmxlIGluZm9ybWF0aW9uICovCisJZXJyb3IgPSBteHRfZ2V0X29iamVjdF90YWJsZShkYXRhKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCS8qIENoZWNrIHJlZ2lzdGVyIGluaXQgdmFsdWVzICovCisJZXJyb3IgPSBteHRfY2hlY2tfcmVnX2luaXQoZGF0YSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IG14dF9tYWtlX2hpZ2hjaGcoZGF0YSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlteHRfaGFuZGxlX3BkYXRhKGRhdGEpOworCisJLyogQmFja3VwIHRvIG1lbW9yeSAqLworCW14dF93cml0ZV9vYmplY3QoZGF0YSwgTVhUX0dFTl9DT01NQU5ELAorCQkJTVhUX0NPTU1BTkRfQkFDS1VQTlYsCisJCQlNWFRfQkFDS1VQX1ZBTFVFKTsKKwltc2xlZXAoTVhUX0JBQ0tVUF9USU1FKTsKKworCS8qIFNvZnQgcmVzZXQgKi8KKwlteHRfd3JpdGVfb2JqZWN0KGRhdGEsIE1YVF9HRU5fQ09NTUFORCwKKwkJCU1YVF9DT01NQU5EX1JFU0VULCAxKTsKKwltc2xlZXAoTVhUX1JFU0VUX1RJTUUpOworCisJLyogVXBkYXRlIG1hdHJpeCBzaXplIGF0IGluZm8gc3RydWN0ICovCisJZXJyb3IgPSBteHRfcmVhZF9yZWcoY2xpZW50LCBNWFRfTUFUUklYX1hfU0laRSwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaW5mby0+bWF0cml4X3hzaXplID0gdmFsOworCisJZXJyb3IgPSBteHRfcmVhZF9yZWcoY2xpZW50LCBNWFRfTUFUUklYX1lfU0laRSwgJnZhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaW5mby0+bWF0cml4X3lzaXplID0gdmFsOworCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LAorCQkJIkZhbWlseSBJRDogJWQgVmFyaWFudCBJRDogJWQgVmVyc2lvbjogJWQgQnVpbGQ6ICVkXG4iLAorCQkJaW5mby0+ZmFtaWx5X2lkLCBpbmZvLT52YXJpYW50X2lkLCBpbmZvLT52ZXJzaW9uLAorCQkJaW5mby0+YnVpbGQpOworCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LAorCQkJIk1hdHJpeCBYIFNpemU6ICVkIE1hdHJpeCBZIFNpemU6ICVkIE9iamVjdCBOdW06ICVkXG4iLAorCQkJaW5mby0+bWF0cml4X3hzaXplLCBpbmZvLT5tYXRyaXhfeXNpemUsCisJCQlpbmZvLT5vYmplY3RfbnVtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBteHRfb2JqZWN0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBteHRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBteHRfb2JqZWN0ICpvYmplY3Q7CisJaW50IGNvdW50ID0gMDsKKwlpbnQgaSwgajsKKwlpbnQgZXJyb3I7CisJdTggdmFsOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmluZm8ub2JqZWN0X251bTsgaSsrKSB7CisJCW9iamVjdCA9IGRhdGEtPm9iamVjdF90YWJsZSArIGk7CisKKwkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwKKwkJCQkiT2JqZWN0IFRhYmxlIEVsZW1lbnQgJWQoVHlwZSAlZClcbiIsCisJCQkJaSArIDEsIG9iamVjdC0+dHlwZSk7CisKKwkJaWYgKCFteHRfb2JqZWN0X3JlYWRhYmxlKG9iamVjdC0+dHlwZSkpIHsKKwkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICJcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgb2JqZWN0LT5zaXplICsgMTsgaisrKSB7CisJCQllcnJvciA9IG14dF9yZWFkX29iamVjdChkYXRhLAorCQkJCQkJb2JqZWN0LT50eXBlLCBqLCAmdmFsKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CisKKwkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsCisJCQkJCSIgIEJ5dGUgJWQ6IDB4JXggKCVkKVxuIiwgaiwgdmFsLCB2YWwpOworCQl9CisKKwkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIlxuIik7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IG14dF9sb2FkX2Z3KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm4pCit7CisJc3RydWN0IG14dF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcG9zID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgZm4pOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIENoYW5nZSB0byB0aGUgYm9vdGxvYWRlciBtb2RlICovCisJbXh0X3dyaXRlX29iamVjdChkYXRhLCBNWFRfR0VOX0NPTU1BTkQsCisJCQlNWFRfQ09NTUFORF9SRVNFVCwgTVhUX0JPT1RfVkFMVUUpOworCW1zbGVlcChNWFRfUkVTRVRfVElNRSk7CisKKwkvKiBDaGFuZ2UgdG8gc2xhdmUgYWRkcmVzcyBvZiBib290bG9hZGVyICovCisJaWYgKGNsaWVudC0+YWRkciA9PSBNWFRfQVBQX0xPVykKKwkJY2xpZW50LT5hZGRyID0gTVhUX0JPT1RfTE9XOworCWVsc2UKKwkJY2xpZW50LT5hZGRyID0gTVhUX0JPT1RfSElHSDsKKworCXJldCA9IG14dF9jaGVja19ib290bG9hZGVyKGNsaWVudCwgTVhUX1dBSVRJTkdfQk9PVExPQURfQ01EKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIFVubG9jayBib290bG9hZGVyICovCisJbXh0X3VubG9ja19ib290bG9hZGVyKGNsaWVudCk7CisKKwl3aGlsZSAocG9zIDwgZnctPnNpemUpIHsKKwkJcmV0ID0gbXh0X2NoZWNrX2Jvb3Rsb2FkZXIoY2xpZW50LAorCQkJCQkJTVhUX1dBSVRJTkdfRlJBTUVfREFUQSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlmcmFtZV9zaXplID0gKCgqKGZ3LT5kYXRhICsgcG9zKSA8PCA4KSB8ICooZnctPmRhdGEgKyBwb3MgKyAxKSk7CisKKwkJLyogV2Ugc2hvdWxkIGFkZCAyIGF0IGZyYW1lIHNpemUgYXMgdGhlIHRoZSBmaXJtd2FyZSBkYXRhIGlzIG5vdAorCQkgKiBpbmNsdWRlZCB0aGUgQ1JDIGJ5dGVzLgorCQkgKi8KKwkJZnJhbWVfc2l6ZSArPSAyOworCisJCS8qIFdyaXRlIG9uZSBmcmFtZSB0byBkZXZpY2UgKi8KKwkJbXh0X2Z3X3dyaXRlKGNsaWVudCwgZnctPmRhdGEgKyBwb3MsIGZyYW1lX3NpemUpOworCisJCXJldCA9IG14dF9jaGVja19ib290bG9hZGVyKGNsaWVudCwKKwkJCQkJCU1YVF9GUkFNRV9DUkNfUEFTUyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlwb3MgKz0gZnJhbWVfc2l6ZTsKKworCQlkZXZfZGJnKGRldiwgIlVwZGF0ZWQgJWQgYnl0ZXMgLyAlemQgYnl0ZXNcbiIsIHBvcywgZnctPnNpemUpOworCX0KKworb3V0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJLyogQ2hhbmdlIHRvIHNsYXZlIGFkZHJlc3Mgb2YgYXBwbGljYXRpb24gKi8KKwlpZiAoY2xpZW50LT5hZGRyID09IE1YVF9CT09UX0xPVykKKwkJY2xpZW50LT5hZGRyID0gTVhUX0FQUF9MT1c7CisJZWxzZQorCQljbGllbnQtPmFkZHIgPSBNWFRfQVBQX0hJR0g7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBteHRfdXBkYXRlX2Z3X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBteHRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnJvcjsKKworCWRpc2FibGVfaXJxKGRhdGEtPmlycSk7CisKKwllcnJvciA9IG14dF9sb2FkX2Z3KGRldiwgTVhUX0ZXX05BTUUpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldiwgIlRoZSBmaXJtd2FyZSB1cGRhdGUgZmFpbGVkKCVkKVxuIiwgZXJyb3IpOworCQljb3VudCA9IGVycm9yOworCX0gZWxzZSB7CisJCWRldl9kYmcoZGV2LCAiVGhlIGZpcm13YXJlIHVwZGF0ZSBzdWNjZWVkZWRcbiIpOworCisJCS8qIFdhaXQgZm9yIHJlc2V0ICovCisJCW1zbGVlcChNWFRfRldSRVNFVF9USU1FKTsKKworCQlrZnJlZShkYXRhLT5vYmplY3RfdGFibGUpOworCQlkYXRhLT5vYmplY3RfdGFibGUgPSBOVUxMOworCisJCW14dF9pbml0aWFsaXplKGRhdGEpOworCX0KKworCWVuYWJsZV9pcnEoZGF0YS0+aXJxKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG9iamVjdCwgMDQ0NCwgbXh0X29iamVjdF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih1cGRhdGVfZncsIDA2NjQsIE5VTEwsIG14dF91cGRhdGVfZndfc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbXh0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX29iamVjdC5hdHRyLAorCSZkZXZfYXR0cl91cGRhdGVfZncuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBteHRfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBteHRfYXR0cnMsCit9OworCitzdGF0aWMgdm9pZCBteHRfc3RhcnQoc3RydWN0IG14dF9kYXRhICpkYXRhKQoreworCS8qIFRvdWNoIGVuYWJsZSAqLworCW14dF93cml0ZV9vYmplY3QoZGF0YSwKKwkJCU1YVF9UT1VDSF9NVUxUSSwgTVhUX1RPVUNIX0NUUkwsIDB4ODMpOworfQorCitzdGF0aWMgdm9pZCBteHRfc3RvcChzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEpCit7CisJLyogVG91Y2ggZGlzYWJsZSAqLworCW14dF93cml0ZV9vYmplY3QoZGF0YSwKKwkJCU1YVF9UT1VDSF9NVUxUSSwgTVhUX1RPVUNIX0NUUkwsIDApOworfQorCitzdGF0aWMgaW50IG14dF9pbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXh0X3N0YXJ0KGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG14dF9pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IG14dF9kYXRhICpkYXRhID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCW14dF9zdG9wKGRhdGEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBteHRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWNvbnN0IHN0cnVjdCBteHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBteHRfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGVycm9yOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG14dF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFkYXRhIHx8ICFpbnB1dF9kZXYpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlpbnB1dF9kZXYtPm5hbWUgPSAiQXRtZWwgbWFYVG91Y2ggVG91Y2hzY3JlZW4iOworCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19JMkM7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OworCWlucHV0X2Rldi0+b3BlbiA9IG14dF9pbnB1dF9vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSBteHRfaW5wdXRfY2xvc2U7CisKKwlfX3NldF9iaXQoRVZfQUJTLCBpbnB1dF9kZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dF9kZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoQlROX1RPVUNILCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwkvKiBGb3Igc2luZ2xlIHRvdWNoICovCisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwKKwkJCSAgICAgMCwgTVhUX01BWF9YQywgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwKKwkJCSAgICAgMCwgTVhUX01BWF9ZQywgMCwgMCk7CisKKwkvKiBGb3IgbXVsdGkgdG91Y2ggKi8KKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9UT1VDSF9NQUpPUiwKKwkJCSAgICAgMCwgTVhUX01BWF9BUkVBLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9QT1NJVElPTl9YLAorCQkJICAgICAwLCBNWFRfTUFYX1hDLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9QT1NJVElPTl9ZLAorCQkJICAgICAwLCBNWFRfTUFYX1lDLCAwLCAwKTsKKworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgZGF0YSk7CisKKwlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CisJZGF0YS0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCWRhdGEtPnBkYXRhID0gcGRhdGE7CisJZGF0YS0+aXJxID0gY2xpZW50LT5pcnE7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKworCWVycm9yID0gbXh0X2luaXRpYWxpemUoZGF0YSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9mcmVlX29iamVjdDsKKworCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50LT5pcnEsIE5VTEwsIG14dF9pbnRlcnJ1cHQsCisJCQlwZGF0YS0+aXJxZmxhZ3MsIGNsaWVudC0+ZGV2LmRyaXZlci0+bmFtZSwgZGF0YSk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGludGVycnVwdFxuIik7CisJCWdvdG8gZXJyX2ZyZWVfb2JqZWN0OworCX0KKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbXh0X2F0dHJfZ3JvdXApOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9kZXZpY2U7CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXJfZGV2aWNlOgorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaW5wdXRfZGV2ID0gTlVMTDsKK2Vycl9mcmVlX2lycToKKwlmcmVlX2lycShjbGllbnQtPmlycSwgZGF0YSk7CitlcnJfZnJlZV9vYmplY3Q6CisJa2ZyZWUoZGF0YS0+b2JqZWN0X3RhYmxlKTsKK2Vycl9mcmVlX21lbToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGRhdGEpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXh0X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBteHRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbXh0X2F0dHJfZ3JvdXApOworCWZyZWVfaXJxKGRhdGEtPmlycSwgZGF0YSk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+aW5wdXRfZGV2KTsKKwlrZnJlZShkYXRhLT5vYmplY3RfdGFibGUpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbXh0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IG14dF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gZGF0YS0+aW5wdXRfZGV2OworCisJbXV0ZXhfbG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CisKKwlpZiAoaW5wdXRfZGV2LT51c2VycykKKwkJbXh0X3N0b3AoZGF0YSk7CisKKwltdXRleF91bmxvY2soJmlucHV0X2Rldi0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXh0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBkYXRhLT5pbnB1dF9kZXY7CisKKwkvKiBTb2Z0IHJlc2V0ICovCisJbXh0X3dyaXRlX29iamVjdChkYXRhLCBNWFRfR0VOX0NPTU1BTkQsCisJCQlNWFRfQ09NTUFORF9SRVNFVCwgMSk7CisKKwltc2xlZXAoTVhUX1JFU0VUX1RJTUUpOworCisJbXV0ZXhfbG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CisKKwlpZiAoaW5wdXRfZGV2LT51c2VycykKKwkJbXh0X3N0YXJ0KGRhdGEpOworCisJbXV0ZXhfdW5sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbXh0X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IG14dF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gbXh0X3Jlc3VtZSwKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG14dF9pZFtdID0geworCXsgInF0NjAyMjQwX3RzIiwgMCB9LAorCXsgImF0bWVsX214dF90cyIsIDAgfSwKKwl7ICJtWFQyMjQiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG14dF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBteHRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImF0bWVsX214dF90cyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmbXh0X3BtX29wcywKKyNlbmRpZgorCX0sCisJLnByb2JlCQk9IG14dF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG14dF9yZW1vdmUpLAorCS5pZF90YWJsZQk9IG14dF9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14dF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZteHRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG14dF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm14dF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChteHRfaW5pdCk7Cittb2R1bGVfZXhpdChteHRfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdG1lbCBtYVhUb3VjaCBUb3VjaHNjcmVlbiBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vcXQ2MDIyNDBfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vcXQ2MDIyNDBfdHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjYjBlOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3F0NjAyMjQwX3RzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDA2ICswLDAgQEAKLS8qCi0gKiBBVDQyUVQ2MDIyNDAvQVRNWFQyMjQgVG91Y2hzY3JlZW4gZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uTHRkCi0gKiBBdXRob3I6IEpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvcXQ2MDIyNDBfdHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotLyogVmVyc2lvbiAqLwotI2RlZmluZSBRVDYwMjI0MF9WRVJfMjAJCQkyMAotI2RlZmluZSBRVDYwMjI0MF9WRVJfMjEJCQkyMQotI2RlZmluZSBRVDYwMjI0MF9WRVJfMjIJCQkyMgotCi0vKiBTbGF2ZSBhZGRyZXNzZXMgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfQVBQX0xPVwkJMHg0YQotI2RlZmluZSBRVDYwMjI0MF9BUFBfSElHSAkJMHg0YgotI2RlZmluZSBRVDYwMjI0MF9CT09UX0xPVwkJMHgyNAotI2RlZmluZSBRVDYwMjI0MF9CT09UX0hJR0gJCTB4MjUKLQotLyogRmlybXdhcmUgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfRldfTkFNRQkJInF0NjAyMjQwLmZ3IgotCi0vKiBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfRkFNSUxZX0lECQkweDAwCi0jZGVmaW5lIFFUNjAyMjQwX1ZBUklBTlRfSUQJCTB4MDEKLSNkZWZpbmUgUVQ2MDIyNDBfVkVSU0lPTgkJMHgwMgotI2RlZmluZSBRVDYwMjI0MF9CVUlMRAkJCTB4MDMKLSNkZWZpbmUgUVQ2MDIyNDBfTUFUUklYX1hfU0laRQkJMHgwNAotI2RlZmluZSBRVDYwMjI0MF9NQVRSSVhfWV9TSVpFCQkweDA1Ci0jZGVmaW5lIFFUNjAyMjQwX09CSkVDVF9OVU0JCTB4MDYKLSNkZWZpbmUgUVQ2MDIyNDBfT0JKRUNUX1NUQVJUCQkweDA3Ci0KLSNkZWZpbmUgUVQ2MDIyNDBfT0JKRUNUX1NJWkUJCTYKLQotLyogT2JqZWN0IHR5cGVzICovCi0jZGVmaW5lIFFUNjAyMjQwX0RFQlVHX0RJQUdOT1NUSUMJMzcKLSNkZWZpbmUgUVQ2MDIyNDBfR0VOX01FU1NBR0UJCTUKLSNkZWZpbmUgUVQ2MDIyNDBfR0VOX0NPTU1BTkQJCTYKLSNkZWZpbmUgUVQ2MDIyNDBfR0VOX1BPV0VSCQk3Ci0jZGVmaW5lIFFUNjAyMjQwX0dFTl9BQ1FVSVJFCQk4Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX01VTFRJCQk5Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX0tFWUFSUkFZCQkxNQotI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9QUk9YSU1JVFkJMjMKLSNkZWZpbmUgUVQ2MDIyNDBfUFJPQ0lfR1JJUEZBQ0UJCTIwCi0jZGVmaW5lIFFUNjAyMjQwX1BST0NHX05PSVNFCQkyMgotI2RlZmluZSBRVDYwMjI0MF9QUk9DSV9PTkVUT1VDSAkJMjQKLSNkZWZpbmUgUVQ2MDIyNDBfUFJPQ0lfVFdPVE9VQ0gJCTI3Ci0jZGVmaW5lIFFUNjAyMjQwX1NQVF9DT01NU0NPTkZJRwkxOAkvKiBmaXJtd2FyZSB2ZXIgMjEgb3ZlciAqLwotI2RlZmluZSBRVDYwMjI0MF9TUFRfR1BJT1BXTQkJMTkKLSNkZWZpbmUgUVQ2MDIyNDBfU1BUX1NFTEZURVNUCQkyNQotI2RlZmluZSBRVDYwMjI0MF9TUFRfQ1RFQ09ORklHCQkyOAotI2RlZmluZSBRVDYwMjI0MF9TUFRfVVNFUkRBVEEJCTM4CS8qIGZpcm13YXJlIHZlciAyMSBvdmVyICovCi0KLS8qIFFUNjAyMjQwX0dFTl9DT01NQU5EIGZpZWxkICovCi0jZGVmaW5lIFFUNjAyMjQwX0NPTU1BTkRfUkVTRVQJCTAKLSNkZWZpbmUgUVQ2MDIyNDBfQ09NTUFORF9CQUNLVVBOVgkxCi0jZGVmaW5lIFFUNjAyMjQwX0NPTU1BTkRfQ0FMSUJSQVRFCTIKLSNkZWZpbmUgUVQ2MDIyNDBfQ09NTUFORF9SRVBPUlRBTEwJMwotI2RlZmluZSBRVDYwMjI0MF9DT01NQU5EX0RJQUdOT1NUSUMJNQotCi0vKiBRVDYwMjI0MF9HRU5fUE9XRVIgZmllbGQgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfUE9XRVJfSURMRUFDUUlOVAkwCi0jZGVmaW5lIFFUNjAyMjQwX1BPV0VSX0FDVFZBQ1FJTlQJMQotI2RlZmluZSBRVDYwMjI0MF9QT1dFUl9BQ1RWMklETEVUTwkyCi0KLS8qIFFUNjAyMjQwX0dFTl9BQ1FVSVJFIGZpZWxkICovCi0jZGVmaW5lIFFUNjAyMjQwX0FDUVVJUkVfQ0hSR1RJTUUJMAotI2RlZmluZSBRVDYwMjI0MF9BQ1FVSVJFX1RDSERSSUZUCTIKLSNkZWZpbmUgUVQ2MDIyNDBfQUNRVUlSRV9EUklGVFNUCTMKLSNkZWZpbmUgUVQ2MDIyNDBfQUNRVUlSRV9UQ0hBVVRPQ0FMCTQKLSNkZWZpbmUgUVQ2MDIyNDBfQUNRVUlSRV9TWU5DCQk1Ci0jZGVmaW5lIFFUNjAyMjQwX0FDUVVJUkVfQVRDSENBTFNUCTYKLSNkZWZpbmUgUVQ2MDIyNDBfQUNRVUlSRV9BVENIQ0FMU1RIUgk3Ci0KLS8qIFFUNjAyMjQwX1RPVUNIX01VTFRJIGZpZWxkICovCi0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX0NUUkwJCTAKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWE9SSUdJTgkJMQotI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9ZT1JJR0lOCQkyCi0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1hTSVpFCQkzCi0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1lTSVpFCQk0Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX0JMRU4JCTYKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfVENIVEhSCQk3Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1RDSERJCQk4Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX09SSUVOVAkJOQotI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9NT1ZIWVNUSQkJMTEKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfTU9WSFlTVE4JCTEyCi0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX05VTVRPVUNICQkxNAotI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9NUkdIWVNUCQkxNQotI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9NUkdUSFIJCTE2Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX0FNUEhZU1QJCTE3Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1hSQU5HRV9MU0IJMTgKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWFJBTkdFX01TQgkxOQotI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9ZUkFOR0VfTFNCCTIwCi0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1lSQU5HRV9NU0IJMjEKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWExPQ0xJUAkJMjIKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWEhJQ0xJUAkJMjMKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWUxPQ0xJUAkJMjQKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWUhJQ0xJUAkJMjUKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWEVER0VDVFJMCTI2Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX1hFREdFRElTVAkyNwotI2RlZmluZSBRVDYwMjI0MF9UT1VDSF9ZRURHRUNUUkwJMjgKLSNkZWZpbmUgUVQ2MDIyNDBfVE9VQ0hfWUVER0VESVNUCTI5Ci0jZGVmaW5lIFFUNjAyMjQwX1RPVUNIX0pVTVBMSU1JVAkzMAkvKiBmaXJtd2FyZSB2ZXIgMjIgb3ZlciAqLwotCi0vKiBRVDYwMjI0MF9QUk9DSV9HUklQRkFDRSBmaWVsZCAqLwotI2RlZmluZSBRVDYwMjI0MF9HUklQRkFDRV9DVFJMCQkwCi0jZGVmaW5lIFFUNjAyMjQwX0dSSVBGQUNFX1hMT0dSSVAJMQotI2RlZmluZSBRVDYwMjI0MF9HUklQRkFDRV9YSElHUklQCTIKLSNkZWZpbmUgUVQ2MDIyNDBfR1JJUEZBQ0VfWUxPR1JJUAkzCi0jZGVmaW5lIFFUNjAyMjQwX0dSSVBGQUNFX1lISUdSSVAJNAotI2RlZmluZSBRVDYwMjI0MF9HUklQRkFDRV9NQVhUQ0hTCTUKLSNkZWZpbmUgUVQ2MDIyNDBfR1JJUEZBQ0VfU1pUSFIxCTcKLSNkZWZpbmUgUVQ2MDIyNDBfR1JJUEZBQ0VfU1pUSFIyCTgKLSNkZWZpbmUgUVQ2MDIyNDBfR1JJUEZBQ0VfU0hQVEhSMQk5Ci0jZGVmaW5lIFFUNjAyMjQwX0dSSVBGQUNFX1NIUFRIUjIJMTAKLSNkZWZpbmUgUVQ2MDIyNDBfR1JJUEZBQ0VfU1VQRVhUVE8JMTEKLQotLyogUVQ2MDIyNDBfUFJPQ0lfTk9JU0UgZmllbGQgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfQ1RSTAkJMAotI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9PVVRGTEVOCQkxCi0jZGVmaW5lIFFUNjAyMjQwX05PSVNFX0dDQUZVTF9MU0IJMwotI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9HQ0FGVUxfTVNCCTQKLSNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfR0NBRkxMX0xTQgk1Ci0jZGVmaW5lIFFUNjAyMjQwX05PSVNFX0dDQUZMTF9NU0IJNgotI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9BQ1RWR0NBRlZBTElECTcKLSNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfTk9JU0VUSFIJCTgKLSNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfRlJFUUhPUFNDQUxFCTEwCi0jZGVmaW5lIFFUNjAyMjQwX05PSVNFX0ZSRVEwCQkxMQotI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9GUkVRMQkJMTIKLSNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfRlJFUTIJCTEzCi0jZGVmaW5lIFFUNjAyMjQwX05PSVNFX0ZSRVEzCQkxNAotI2RlZmluZSBRVDYwMjI0MF9OT0lTRV9GUkVRNAkJMTUKLSNkZWZpbmUgUVQ2MDIyNDBfTk9JU0VfSURMRUdDQUZWQUxJRAkxNgotCi0vKiBRVDYwMjI0MF9TUFRfQ09NTVNDT05GSUcgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfQ09NTVNfQ1RSTAkJMAotI2RlZmluZSBRVDYwMjI0MF9DT01NU19DTUQJCTEKLQotLyogUVQ2MDIyNDBfU1BUX0NURUNPTkZJRyBmaWVsZCAqLwotI2RlZmluZSBRVDYwMjI0MF9DVEVfQ1RSTAkJMAotI2RlZmluZSBRVDYwMjI0MF9DVEVfQ01ECQkxCi0jZGVmaW5lIFFUNjAyMjQwX0NURV9NT0RFCQkyCi0jZGVmaW5lIFFUNjAyMjQwX0NURV9JRExFR0NBRkRFUFRICTMKLSNkZWZpbmUgUVQ2MDIyNDBfQ1RFX0FDVFZHQ0FGREVQVEgJNAotI2RlZmluZSBRVDYwMjI0MF9DVEVfVk9MVEFHRQkJNQkvKiBmaXJtd2FyZSB2ZXIgMjEgb3ZlciAqLwotCi0jZGVmaW5lIFFUNjAyMjQwX1ZPTFRBR0VfREVGQVVMVAkyNzAwMDAwCi0jZGVmaW5lIFFUNjAyMjQwX1ZPTFRBR0VfU1RFUAkJMTAwMDAKLQotLyogRGVmaW5lIGZvciBRVDYwMjI0MF9HRU5fQ09NTUFORCAqLwotI2RlZmluZSBRVDYwMjI0MF9CT09UX1ZBTFVFCQkweGE1Ci0jZGVmaW5lIFFUNjAyMjQwX0JBQ0tVUF9WQUxVRQkJMHg1NQotI2RlZmluZSBRVDYwMjI0MF9CQUNLVVBfVElNRQkJMjUJLyogbXNlYyAqLwotI2RlZmluZSBRVDYwMjI0MF9SRVNFVF9USU1FCQk2NQkvKiBtc2VjICovCi0KLSNkZWZpbmUgUVQ2MDIyNDBfRldSRVNFVF9USU1FCQkxNzUJLyogbXNlYyAqLwotCi0vKiBDb21tYW5kIHRvIHVubG9jayBib290bG9hZGVyICovCi0jZGVmaW5lIFFUNjAyMjQwX1VOTE9DS19DTURfTVNCCQkweGFhCi0jZGVmaW5lIFFUNjAyMjQwX1VOTE9DS19DTURfTFNCCQkweGRjCi0KLS8qIEJvb3Rsb2FkZXIgbW9kZSBzdGF0dXMgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfV0FJVElOR19CT09UTE9BRF9DTUQJMHhjMAkvKiB2YWxpZCA3IDYgYml0IG9ubHkgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfV0FJVElOR19GUkFNRV9EQVRBCTB4ODAJLyogdmFsaWQgNyA2IGJpdCBvbmx5ICovCi0jZGVmaW5lIFFUNjAyMjQwX0ZSQU1FX0NSQ19DSEVDSwkweDAyCi0jZGVmaW5lIFFUNjAyMjQwX0ZSQU1FX0NSQ19GQUlMCQkweDAzCi0jZGVmaW5lIFFUNjAyMjQwX0ZSQU1FX0NSQ19QQVNTCQkweDA0Ci0jZGVmaW5lIFFUNjAyMjQwX0FQUF9DUkNfRkFJTAkJMHg0MAkvKiB2YWxpZCA3IDggYml0IG9ubHkgKi8KLSNkZWZpbmUgUVQ2MDIyNDBfQk9PVF9TVEFUVVNfTUFTSwkweDNmCi0KLS8qIFRvdWNoIHN0YXR1cyAqLwotI2RlZmluZSBRVDYwMjI0MF9TVVBQUkVTUwkJKDEgPDwgMSkKLSNkZWZpbmUgUVQ2MDIyNDBfQU1QCQkJKDEgPDwgMikKLSNkZWZpbmUgUVQ2MDIyNDBfVkVDVE9SCQkJKDEgPDwgMykKLSNkZWZpbmUgUVQ2MDIyNDBfTU9WRQkJCSgxIDw8IDQpCi0jZGVmaW5lIFFUNjAyMjQwX1JFTEVBU0UJCSgxIDw8IDUpCi0jZGVmaW5lIFFUNjAyMjQwX1BSRVNTCQkJKDEgPDwgNikKLSNkZWZpbmUgUVQ2MDIyNDBfREVURUNUCQkJKDEgPDwgNykKLQotLyogVG91Y2hzY3JlZW4gYWJzb2x1dGUgdmFsdWVzICovCi0jZGVmaW5lIFFUNjAyMjQwX01BWF9YQwkJCTB4M2ZmCi0jZGVmaW5lIFFUNjAyMjQwX01BWF9ZQwkJCTB4M2ZmCi0jZGVmaW5lIFFUNjAyMjQwX01BWF9BUkVBCQkweGZmCi0KLSNkZWZpbmUgUVQ2MDIyNDBfTUFYX0ZJTkdFUgkJMTAKLQotLyogSW5pdGlhbCByZWdpc3RlciB2YWx1ZXMgcmVjb21tZW5kZWQgZnJvbSBjaGlwIHZlbmRvciAqLwotc3RhdGljIGNvbnN0IHU4IGluaXRfdmFsc192ZXJfMjBbXSA9IHsKLQkvKiBRVDYwMjI0MF9HRU5fQ09NTUFORCg2KSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JLyogUVQ2MDIyNDBfR0VOX1BPV0VSKDcpICovCi0JMHgyMCwgMHhmZiwgMHgzMiwKLQkvKiBRVDYwMjI0MF9HRU5fQUNRVUlSRSg4KSAqLwotCTB4MDgsIDB4MDUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MTQsCi0JLyogUVQ2MDIyNDBfVE9VQ0hfTVVMVEkoOSkgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDExLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLAotCTB4MDAsIDB4MDEsIDB4MDEsIDB4MGUsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg2NCwKLQkvKiBRVDYwMjI0MF9UT1VDSF9LRVlBUlJBWSgxNSkgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsCi0JLyogUVQ2MDIyNDBfU1BUX0dQSU9QV00oMTkpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLAotCS8qIFFUNjAyMjQwX1BST0NJX0dSSVBGQUNFKDIwKSAqLwotCTB4MDAsIDB4NjQsIDB4NjQsIDB4NjQsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MTQsIDB4MDQsCi0JMHgxZSwgMHgwMCwKLQkvKiBRVDYwMjI0MF9QUk9DR19OT0lTRSgyMikgKi8KLQkweDA1LCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweGU3LCAweGZmLCAweDA0LCAweDMyLCAweDAwLAotCTB4MDEsIDB4MGEsIDB4MGYsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZTgsCi0JLyogUVQ2MDIyNDBfVE9VQ0hfUFJPWElNSVRZKDIzKSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBRVDYwMjI0MF9QUk9DSV9PTkVUT1VDSCgyNCkgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JLyogUVQ2MDIyNDBfU1BUX1NFTEZURVNUKDI1KSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBRVDYwMjI0MF9QUk9DSV9UV09UT1VDSCgyNykgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCS8qIFFUNjAyMjQwX1NQVF9DVEVDT05GSUcoMjgpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpbml0X3ZhbHNfdmVyXzIxW10gPSB7Ci0JLyogUVQ2MDIyNDBfR0VOX0NPTU1BTkQoNikgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCS8qIFFUNjAyMjQwX0dFTl9QT1dFUig3KSAqLwotCTB4MjAsIDB4ZmYsIDB4MzIsCi0JLyogUVQ2MDIyNDBfR0VOX0FDUVVJUkUoOCkgKi8KLQkweDBhLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDIzLAotCS8qIFFUNjAyMjQwX1RPVUNIX01VTFRJKDkpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwKLQkweDAwLCAweDAxLCAweDAxLCAweDBlLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JLyogUVQ2MDIyNDBfVE9VQ0hfS0VZQVJSQVkoMTUpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLAotCS8qIFFUNjAyMjQwX1NQVF9HUElPUFdNKDE5KSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBRVDYwMjI0MF9QUk9DSV9HUklQRkFDRSgyMCkgKi8KLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDI4LCAweDA0LAotCTB4MGYsIDB4MGEsCi0JLyogUVQ2MDIyNDBfUFJPQ0dfTk9JU0UoMjIpICovCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMywgMHgwMCwKLQkweDAwLCAweDA1LCAweDBmLCAweDE5LCAweDIzLCAweDJkLCAweDAzLAotCS8qIFFUNjAyMjQwX1RPVUNIX1BST1hJTUlUWSgyMykgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsCi0JLyogUVQ2MDIyNDBfUFJPQ0lfT05FVE9VQ0goMjQpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCS8qIFFUNjAyMjQwX1NQVF9TRUxGVEVTVCgyNSkgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JLyogUVQ2MDIyNDBfUFJPQ0lfVFdPVE9VQ0goMjcpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBRVDYwMjI0MF9TUFRfQ1RFQ09ORklHKDI4KSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MDAsCi19OwotCi1zdGF0aWMgY29uc3QgdTggaW5pdF92YWxzX3Zlcl8yMltdID0gewotCS8qIFFUNjAyMjQwX0dFTl9DT01NQU5EKDYpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBRVDYwMjI0MF9HRU5fUE9XRVIoNykgKi8KLQkweDIwLCAweGZmLCAweDMyLAotCS8qIFFUNjAyMjQwX0dFTl9BQ1FVSVJFKDgpICovCi0JMHgwYSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgyMywKLQkvKiBRVDYwMjI0MF9UT1VDSF9NVUxUSSg5KSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMSwgMHgwZSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsCi0JLyogUVQ2MDIyNDBfVE9VQ0hfS0VZQVJSQVkoMTUpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLAotCS8qIFFUNjAyMjQwX1NQVF9HUElPUFdNKDE5KSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBRVDYwMjI0MF9QUk9DSV9HUklQRkFDRSgyMCkgKi8KLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDI4LCAweDA0LAotCTB4MGYsIDB4MGEsCi0JLyogUVQ2MDIyNDBfUFJPQ0dfTk9JU0UoMjIpICovCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMywgMHgwMCwKLQkweDAwLCAweDA1LCAweDBmLCAweDE5LCAweDIzLCAweDJkLCAweDAzLAotCS8qIFFUNjAyMjQwX1RPVUNIX1BST1hJTUlUWSgyMykgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JLyogUVQ2MDIyNDBfUFJPQ0lfT05FVE9VQ0goMjQpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCS8qIFFUNjAyMjQwX1NQVF9TRUxGVEVTVCgyNSkgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JLyogUVQ2MDIyNDBfUFJPQ0lfVFdPVE9VQ0goMjcpICovCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkvKiBRVDYwMjI0MF9TUFRfQ1RFQ09ORklHKDI4KSAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MDAsCi19OwotCi1zdHJ1Y3QgcXQ2MDIyNDBfaW5mbyB7Ci0JdTggZmFtaWx5X2lkOwotCXU4IHZhcmlhbnRfaWQ7Ci0JdTggdmVyc2lvbjsKLQl1OCBidWlsZDsKLQl1OCBtYXRyaXhfeHNpemU7Ci0JdTggbWF0cml4X3lzaXplOwotCXU4IG9iamVjdF9udW07Ci19OwotCi1zdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0IHsKLQl1OCB0eXBlOwotCXUxNiBzdGFydF9hZGRyZXNzOwotCXU4IHNpemU7Ci0JdTggaW5zdGFuY2VzOwotCXU4IG51bV9yZXBvcnRfaWRzOwotCi0JLyogdG8gbWFwIG9iamVjdCBhbmQgbWVzc2FnZSAqLwotCXU4IG1heF9yZXBvcnRpZDsKLX07Ci0KLXN0cnVjdCBxdDYwMjI0MF9tZXNzYWdlIHsKLQl1OCByZXBvcnRpZDsKLQl1OCBtZXNzYWdlWzddOwotCXU4IGNoZWNrc3VtOwotfTsKLQotc3RydWN0IHF0NjAyMjQwX2ZpbmdlciB7Ci0JaW50IHN0YXR1czsKLQlpbnQgeDsKLQlpbnQgeTsKLQlpbnQgYXJlYTsKLX07Ci0KLS8qIEVhY2ggY2xpZW50IGhhcyB0aGlzIGFkZGl0aW9uYWwgZGF0YSAqLwotc3RydWN0IHF0NjAyMjQwX2RhdGEgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWNvbnN0IHN0cnVjdCBxdDYwMjI0MF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKLQlzdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0ICpvYmplY3RfdGFibGU7Ci0Jc3RydWN0IHF0NjAyMjQwX2luZm8gaW5mbzsKLQlzdHJ1Y3QgcXQ2MDIyNDBfZmluZ2VyIGZpbmdlcltRVDYwMjI0MF9NQVhfRklOR0VSXTsKLQl1bnNpZ25lZCBpbnQgaXJxOwotfTsKLQotc3RhdGljIGJvb2wgcXQ2MDIyNDBfb2JqZWN0X3JlYWRhYmxlKHVuc2lnbmVkIGludCB0eXBlKQotewotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgUVQ2MDIyNDBfR0VOX01FU1NBR0U6Ci0JY2FzZSBRVDYwMjI0MF9HRU5fQ09NTUFORDoKLQljYXNlIFFUNjAyMjQwX0dFTl9QT1dFUjoKLQljYXNlIFFUNjAyMjQwX0dFTl9BQ1FVSVJFOgotCWNhc2UgUVQ2MDIyNDBfVE9VQ0hfTVVMVEk6Ci0JY2FzZSBRVDYwMjI0MF9UT1VDSF9LRVlBUlJBWToKLQljYXNlIFFUNjAyMjQwX1RPVUNIX1BST1hJTUlUWToKLQljYXNlIFFUNjAyMjQwX1BST0NJX0dSSVBGQUNFOgotCWNhc2UgUVQ2MDIyNDBfUFJPQ0dfTk9JU0U6Ci0JY2FzZSBRVDYwMjI0MF9QUk9DSV9PTkVUT1VDSDoKLQljYXNlIFFUNjAyMjQwX1BST0NJX1RXT1RPVUNIOgotCWNhc2UgUVQ2MDIyNDBfU1BUX0NPTU1TQ09ORklHOgotCWNhc2UgUVQ2MDIyNDBfU1BUX0dQSU9QV006Ci0JY2FzZSBRVDYwMjI0MF9TUFRfU0VMRlRFU1Q6Ci0JY2FzZSBRVDYwMjI0MF9TUFRfQ1RFQ09ORklHOgotCWNhc2UgUVQ2MDIyNDBfU1BUX1VTRVJEQVRBOgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCBxdDYwMjI0MF9vYmplY3Rfd3JpdGFibGUodW5zaWduZWQgaW50IHR5cGUpCi17Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBRVDYwMjI0MF9HRU5fQ09NTUFORDoKLQljYXNlIFFUNjAyMjQwX0dFTl9QT1dFUjoKLQljYXNlIFFUNjAyMjQwX0dFTl9BQ1FVSVJFOgotCWNhc2UgUVQ2MDIyNDBfVE9VQ0hfTVVMVEk6Ci0JY2FzZSBRVDYwMjI0MF9UT1VDSF9LRVlBUlJBWToKLQljYXNlIFFUNjAyMjQwX1RPVUNIX1BST1hJTUlUWToKLQljYXNlIFFUNjAyMjQwX1BST0NJX0dSSVBGQUNFOgotCWNhc2UgUVQ2MDIyNDBfUFJPQ0dfTk9JU0U6Ci0JY2FzZSBRVDYwMjI0MF9QUk9DSV9PTkVUT1VDSDoKLQljYXNlIFFUNjAyMjQwX1BST0NJX1RXT1RPVUNIOgotCWNhc2UgUVQ2MDIyNDBfU1BUX0dQSU9QV006Ci0JY2FzZSBRVDYwMjI0MF9TUFRfU0VMRlRFU1Q6Ci0JY2FzZSBRVDYwMjI0MF9TUFRfQ1RFQ09ORklHOgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBxdDYwMjI0MF9kdW1wX21lc3NhZ2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IHF0NjAyMjQwX21lc3NhZ2UgKm1lc3NhZ2UpCi17Ci0JZGV2X2RiZyhkZXYsICJyZXBvcnRpZDpcdDB4JXhcbiIsIG1lc3NhZ2UtPnJlcG9ydGlkKTsKLQlkZXZfZGJnKGRldiwgIm1lc3NhZ2UxOlx0MHgleFxuIiwgbWVzc2FnZS0+bWVzc2FnZVswXSk7Ci0JZGV2X2RiZyhkZXYsICJtZXNzYWdlMjpcdDB4JXhcbiIsIG1lc3NhZ2UtPm1lc3NhZ2VbMV0pOwotCWRldl9kYmcoZGV2LCAibWVzc2FnZTM6XHQweCV4XG4iLCBtZXNzYWdlLT5tZXNzYWdlWzJdKTsKLQlkZXZfZGJnKGRldiwgIm1lc3NhZ2U0Olx0MHgleFxuIiwgbWVzc2FnZS0+bWVzc2FnZVszXSk7Ci0JZGV2X2RiZyhkZXYsICJtZXNzYWdlNTpcdDB4JXhcbiIsIG1lc3NhZ2UtPm1lc3NhZ2VbNF0pOwotCWRldl9kYmcoZGV2LCAibWVzc2FnZTY6XHQweCV4XG4iLCBtZXNzYWdlLT5tZXNzYWdlWzVdKTsKLQlkZXZfZGJnKGRldiwgIm1lc3NhZ2U3Olx0MHgleFxuIiwgbWVzc2FnZS0+bWVzc2FnZVs2XSk7Ci0JZGV2X2RiZyhkZXYsICJjaGVja3N1bTpcdDB4JXhcbiIsIG1lc3NhZ2UtPmNoZWNrc3VtKTsKLX0KLQotc3RhdGljIGludCBxdDYwMjI0MF9jaGVja19ib290bG9hZGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgc3RhdGUpCi17Ci0JdTggdmFsOwotCi1yZWNoZWNrOgotCWlmIChpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmdmFsLCAxKSAhPSAxKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGkyYyByZWN2IGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBRVDYwMjI0MF9XQUlUSU5HX0JPT1RMT0FEX0NNRDoKLQljYXNlIFFUNjAyMjQwX1dBSVRJTkdfRlJBTUVfREFUQToKLQkJdmFsICY9IH5RVDYwMjI0MF9CT09UX1NUQVRVU19NQVNLOwotCQlicmVhazsKLQljYXNlIFFUNjAyMjQwX0ZSQU1FX0NSQ19QQVNTOgotCQlpZiAodmFsID09IFFUNjAyMjQwX0ZSQU1FX0NSQ19DSEVDSykKLQkJCWdvdG8gcmVjaGVjazsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHZhbCAhPSBzdGF0ZSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlVudmFsaWQgYm9vdGxvYWRlciBtb2RlIHN0YXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcXQ2MDIyNDBfdW5sb2NrX2Jvb3Rsb2FkZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQl1OCBidWZbMl07Ci0KLQlidWZbMF0gPSBRVDYwMjI0MF9VTkxPQ0tfQ01EX0xTQjsKLQlidWZbMV0gPSBRVDYwMjI0MF9VTkxPQ0tfQ01EX01TQjsKLQotCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpICE9IDIpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjIHNlbmQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHF0NjAyMjQwX2Z3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZSkKLXsKLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgZnJhbWVfc2l6ZSkgIT0gZnJhbWVfc2l6ZSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiBpMmMgc2VuZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19xdDYwMjI0MF9yZWFkX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHUxNiByZWcsIHUxNiBsZW4sIHZvaWQgKnZhbCkKLXsKLQlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOwotCXU4IGJ1ZlsyXTsKLQotCWJ1ZlswXSA9IHJlZyAmIDB4ZmY7Ci0JYnVmWzFdID0gKHJlZyA+PiA4KSAmIDB4ZmY7Ci0KLQkvKiBXcml0ZSByZWdpc3RlciAqLwotCXhmZXJbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKLQl4ZmVyWzBdLmZsYWdzID0gMDsKLQl4ZmVyWzBdLmxlbiA9IDI7Ci0JeGZlclswXS5idWYgPSBidWY7Ci0KLQkvKiBSZWFkIGRhdGEgKi8KLQl4ZmVyWzFdLmFkZHIgPSBjbGllbnQtPmFkZHI7Ci0JeGZlclsxXS5mbGFncyA9IEkyQ19NX1JEOwotCXhmZXJbMV0ubGVuID0gbGVuOwotCXhmZXJbMV0uYnVmID0gdmFsOwotCi0JaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIHhmZXIsIDIpICE9IDIpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjIHRyYW5zZmVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxdDYwMjI0MF9yZWFkX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnLCB1OCAqdmFsKQotewotCXJldHVybiBfX3F0NjAyMjQwX3JlYWRfcmVnKGNsaWVudCwgcmVnLCAxLCB2YWwpOwotfQotCi1zdGF0aWMgaW50IHF0NjAyMjQwX3dyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnLCB1OCB2YWwpCi17Ci0JdTggYnVmWzNdOwotCi0JYnVmWzBdID0gcmVnICYgMHhmZjsKLQlidWZbMV0gPSAocmVnID4+IDgpICYgMHhmZjsKLQlidWZbMl0gPSB2YWw7Ci0KLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKSAhPSAzKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGkyYyBzZW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxdDYwMjI0MF9yZWFkX29iamVjdF90YWJsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCSAgICAgIHUxNiByZWcsIHU4ICpvYmplY3RfYnVmKQotewotCXJldHVybiBfX3F0NjAyMjQwX3JlYWRfcmVnKGNsaWVudCwgcmVnLCBRVDYwMjI0MF9PQkpFQ1RfU0laRSwKLQkJCQkgICBvYmplY3RfYnVmKTsKLX0KLQotc3RhdGljIHN0cnVjdCBxdDYwMjI0MF9vYmplY3QgKgotcXQ2MDIyNDBfZ2V0X29iamVjdChzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSwgdTggdHlwZSkKLXsKLQlzdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0ICpvYmplY3Q7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5mby5vYmplY3RfbnVtOyBpKyspIHsKLQkJb2JqZWN0ID0gZGF0YS0+b2JqZWN0X3RhYmxlICsgaTsKLQkJaWYgKG9iamVjdC0+dHlwZSA9PSB0eXBlKQotCQkJcmV0dXJuIG9iamVjdDsKLQl9Ci0KLQlkZXZfZXJyKCZkYXRhLT5jbGllbnQtPmRldiwgIkludmFsaWQgb2JqZWN0IHR5cGVcbiIpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IHF0NjAyMjQwX3JlYWRfbWVzc2FnZShzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSwKLQkJCQkgc3RydWN0IHF0NjAyMjQwX21lc3NhZ2UgKm1lc3NhZ2UpCi17Ci0Jc3RydWN0IHF0NjAyMjQwX29iamVjdCAqb2JqZWN0OwotCXUxNiByZWc7Ci0KLQlvYmplY3QgPSBxdDYwMjI0MF9nZXRfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX0dFTl9NRVNTQUdFKTsKLQlpZiAoIW9iamVjdCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWcgPSBvYmplY3QtPnN0YXJ0X2FkZHJlc3M7Ci0JcmV0dXJuIF9fcXQ2MDIyNDBfcmVhZF9yZWcoZGF0YS0+Y2xpZW50LCByZWcsCi0JCQlzaXplb2Yoc3RydWN0IHF0NjAyMjQwX21lc3NhZ2UpLCBtZXNzYWdlKTsKLX0KLQotc3RhdGljIGludCBxdDYwMjI0MF9yZWFkX29iamVjdChzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSwKLQkJCQl1OCB0eXBlLCB1OCBvZmZzZXQsIHU4ICp2YWwpCi17Ci0Jc3RydWN0IHF0NjAyMjQwX29iamVjdCAqb2JqZWN0OwotCXUxNiByZWc7Ci0KLQlvYmplY3QgPSBxdDYwMjI0MF9nZXRfb2JqZWN0KGRhdGEsIHR5cGUpOwotCWlmICghb2JqZWN0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlZyA9IG9iamVjdC0+c3RhcnRfYWRkcmVzczsKLQlyZXR1cm4gX19xdDYwMjI0MF9yZWFkX3JlZyhkYXRhLT5jbGllbnQsIHJlZyArIG9mZnNldCwgMSwgdmFsKTsKLX0KLQotc3RhdGljIGludCBxdDYwMjI0MF93cml0ZV9vYmplY3Qoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEsCi0JCQkJIHU4IHR5cGUsIHU4IG9mZnNldCwgdTggdmFsKQotewotCXN0cnVjdCBxdDYwMjI0MF9vYmplY3QgKm9iamVjdDsKLQl1MTYgcmVnOwotCi0Jb2JqZWN0ID0gcXQ2MDIyNDBfZ2V0X29iamVjdChkYXRhLCB0eXBlKTsKLQlpZiAoIW9iamVjdCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWcgPSBvYmplY3QtPnN0YXJ0X2FkZHJlc3M7Ci0JcmV0dXJuIHF0NjAyMjQwX3dyaXRlX3JlZyhkYXRhLT5jbGllbnQsIHJlZyArIG9mZnNldCwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgcXQ2MDIyNDBfaW5wdXRfcmVwb3J0KHN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhLCBpbnQgc2luZ2xlX2lkKQotewotCXN0cnVjdCBxdDYwMjI0MF9maW5nZXIgKmZpbmdlciA9IGRhdGEtPmZpbmdlcjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBkYXRhLT5pbnB1dF9kZXY7Ci0JaW50IHN0YXR1cyA9IGZpbmdlcltzaW5nbGVfaWRdLnN0YXR1czsKLQlpbnQgZmluZ2VyX251bSA9IDA7Ci0JaW50IGlkOwotCi0JZm9yIChpZCA9IDA7IGlkIDwgUVQ2MDIyNDBfTUFYX0ZJTkdFUjsgaWQrKykgewotCQlpZiAoIWZpbmdlcltpZF0uc3RhdHVzKQotCQkJY29udGludWU7Ci0KLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19NVF9UT1VDSF9NQUpPUiwKLQkJCQlmaW5nZXJbaWRdLnN0YXR1cyAhPSBRVDYwMjI0MF9SRUxFQVNFID8KLQkJCQlmaW5nZXJbaWRdLmFyZWEgOiAwKTsKLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19NVF9QT1NJVElPTl9YLAotCQkJCWZpbmdlcltpZF0ueCk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwKLQkJCQlmaW5nZXJbaWRdLnkpOwotCQlpbnB1dF9tdF9zeW5jKGlucHV0X2Rldik7Ci0KLQkJaWYgKGZpbmdlcltpZF0uc3RhdHVzID09IFFUNjAyMjQwX1JFTEVBU0UpCi0JCQlmaW5nZXJbaWRdLnN0YXR1cyA9IDA7Ci0JCWVsc2UKLQkJCWZpbmdlcl9udW0rKzsKLQl9Ci0KLQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2RldiwgQlROX1RPVUNILCBmaW5nZXJfbnVtID4gMCk7Ci0KLQlpZiAoc3RhdHVzICE9IFFUNjAyMjQwX1JFTEVBU0UpIHsKLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19YLCBmaW5nZXJbc2luZ2xlX2lkXS54KTsKLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19ZLCBmaW5nZXJbc2luZ2xlX2lkXS55KTsKLQl9Ci0KLQlpbnB1dF9zeW5jKGlucHV0X2Rldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHF0NjAyMjQwX2lucHV0X3RvdWNoZXZlbnQoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEsCi0JCQkJICAgICAgc3RydWN0IHF0NjAyMjQwX21lc3NhZ2UgKm1lc3NhZ2UsIGludCBpZCkKLXsKLQlzdHJ1Y3QgcXQ2MDIyNDBfZmluZ2VyICpmaW5nZXIgPSBkYXRhLT5maW5nZXI7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmNsaWVudC0+ZGV2OwotCXU4IHN0YXR1cyA9IG1lc3NhZ2UtPm1lc3NhZ2VbMF07Ci0JaW50IHg7Ci0JaW50IHk7Ci0JaW50IGFyZWE7Ci0KLQkvKiBDaGVjayB0aGUgdG91Y2ggaXMgcHJlc2VudCBvbiB0aGUgc2NyZWVuICovCi0JaWYgKCEoc3RhdHVzICYgUVQ2MDIyNDBfREVURUNUKSkgewotCQlpZiAoc3RhdHVzICYgUVQ2MDIyNDBfUkVMRUFTRSkgewotCQkJZGV2X2RiZyhkZXYsICJbJWRdIHJlbGVhc2VkXG4iLCBpZCk7Ci0KLQkJCWZpbmdlcltpZF0uc3RhdHVzID0gUVQ2MDIyNDBfUkVMRUFTRTsKLQkJCXF0NjAyMjQwX2lucHV0X3JlcG9ydChkYXRhLCBpZCk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCS8qIENoZWNrIG9ubHkgQU1QIGRldGVjdGlvbiAqLwotCWlmICghKHN0YXR1cyAmIChRVDYwMjI0MF9QUkVTUyB8IFFUNjAyMjQwX01PVkUpKSkKLQkJcmV0dXJuOwotCi0JeCA9IChtZXNzYWdlLT5tZXNzYWdlWzFdIDw8IDIpIHwgKChtZXNzYWdlLT5tZXNzYWdlWzNdICYgfjB4M2YpID4+IDYpOwotCXkgPSAobWVzc2FnZS0+bWVzc2FnZVsyXSA8PCAyKSB8ICgobWVzc2FnZS0+bWVzc2FnZVszXSAmIH4weGYzKSA+PiAyKTsKLQlhcmVhID0gbWVzc2FnZS0+bWVzc2FnZVs0XTsKLQotCWRldl9kYmcoZGV2LCAiWyVkXSAlcyB4OiAlZCwgeTogJWQsIGFyZWE6ICVkXG4iLCBpZCwKLQkJc3RhdHVzICYgUVQ2MDIyNDBfTU9WRSA/ICJtb3ZlZCIgOiAicHJlc3NlZCIsCi0JCXgsIHksIGFyZWEpOwotCi0JZmluZ2VyW2lkXS5zdGF0dXMgPSBzdGF0dXMgJiBRVDYwMjI0MF9NT1ZFID8KLQkJCQlRVDYwMjI0MF9NT1ZFIDogUVQ2MDIyNDBfUFJFU1M7Ci0JZmluZ2VyW2lkXS54ID0geDsKLQlmaW5nZXJbaWRdLnkgPSB5OwotCWZpbmdlcltpZF0uYXJlYSA9IGFyZWE7Ci0KLQlxdDYwMjI0MF9pbnB1dF9yZXBvcnQoZGF0YSwgaWQpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgcXQ2MDIyNDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSA9IGRldl9pZDsKLQlzdHJ1Y3QgcXQ2MDIyNDBfbWVzc2FnZSBtZXNzYWdlOwotCXN0cnVjdCBxdDYwMjI0MF9vYmplY3QgKm9iamVjdDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+Y2xpZW50LT5kZXY7Ci0JaW50IGlkOwotCXU4IHJlcG9ydGlkOwotCXU4IG1heF9yZXBvcnRpZDsKLQl1OCBtaW5fcmVwb3J0aWQ7Ci0KLQlkbyB7Ci0JCWlmIChxdDYwMjI0MF9yZWFkX21lc3NhZ2UoZGF0YSwgJm1lc3NhZ2UpKSB7Ci0JCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIG1lc3NhZ2VcbiIpOwotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlyZXBvcnRpZCA9IG1lc3NhZ2UucmVwb3J0aWQ7Ci0KLQkJLyogd2hldGhlciByZXBvcnRpZCBpcyB0aGluZyBvZiBRVDYwMjI0MF9UT1VDSF9NVUxUSSAqLwotCQlvYmplY3QgPSBxdDYwMjI0MF9nZXRfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1RPVUNIX01VTFRJKTsKLQkJaWYgKCFvYmplY3QpCi0JCQlnb3RvIGVuZDsKLQotCQltYXhfcmVwb3J0aWQgPSBvYmplY3QtPm1heF9yZXBvcnRpZDsKLQkJbWluX3JlcG9ydGlkID0gbWF4X3JlcG9ydGlkIC0gb2JqZWN0LT5udW1fcmVwb3J0X2lkcyArIDE7Ci0JCWlkID0gcmVwb3J0aWQgLSBtaW5fcmVwb3J0aWQ7Ci0KLQkJaWYgKHJlcG9ydGlkID49IG1pbl9yZXBvcnRpZCAmJiByZXBvcnRpZCA8PSBtYXhfcmVwb3J0aWQpCi0JCQlxdDYwMjI0MF9pbnB1dF90b3VjaGV2ZW50KGRhdGEsICZtZXNzYWdlLCBpZCk7Ci0JCWVsc2UKLQkJCXF0NjAyMjQwX2R1bXBfbWVzc2FnZShkZXYsICZtZXNzYWdlKTsKLQl9IHdoaWxlIChyZXBvcnRpZCAhPSAweGZmKTsKLQotZW5kOgotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBxdDYwMjI0MF9jaGVja19yZWdfaW5pdChzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0ICpvYmplY3Q7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmNsaWVudC0+ZGV2OwotCWludCBpbmRleCA9IDA7Ci0JaW50IGksIGo7Ci0JdTggdmVyc2lvbiA9IGRhdGEtPmluZm8udmVyc2lvbjsKLQl1OCAqaW5pdF92YWxzOwotCi0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSBRVDYwMjI0MF9WRVJfMjA6Ci0JCWluaXRfdmFscyA9ICh1OCAqKWluaXRfdmFsc192ZXJfMjA7Ci0JCWJyZWFrOwotCWNhc2UgUVQ2MDIyNDBfVkVSXzIxOgotCQlpbml0X3ZhbHMgPSAodTggKilpbml0X3ZhbHNfdmVyXzIxOwotCQlicmVhazsKLQljYXNlIFFUNjAyMjQwX1ZFUl8yMjoKLQkJaW5pdF92YWxzID0gKHU4ICopaW5pdF92YWxzX3Zlcl8yMjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2VycihkZXYsICJGaXJtd2FyZSB2ZXJzaW9uICVkIGRvZXNuJ3Qgc3VwcG9ydFxuIiwgdmVyc2lvbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5pbmZvLm9iamVjdF9udW07IGkrKykgewotCQlvYmplY3QgPSBkYXRhLT5vYmplY3RfdGFibGUgKyBpOwotCi0JCWlmICghcXQ2MDIyNDBfb2JqZWN0X3dyaXRhYmxlKG9iamVjdC0+dHlwZSkpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGogPSAwOyBqIDwgb2JqZWN0LT5zaXplICsgMTsgaisrKQotCQkJcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIG9iamVjdC0+dHlwZSwgaiwKLQkJCQkJaW5pdF92YWxzW2luZGV4ICsgal0pOwotCi0JCWluZGV4ICs9IG9iamVjdC0+c2l6ZSArIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcXQ2MDIyNDBfY2hlY2tfbWF0cml4X3NpemUoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEpCi17Ci0JY29uc3Qgc3RydWN0IHF0NjAyMjQwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmNsaWVudC0+ZGV2OwotCWludCBtb2RlID0gLTE7Ci0JaW50IGVycm9yOwotCXU4IHZhbDsKLQotCWRldl9kYmcoZGV2LCAiTnVtYmVyIG9mIFggbGluZXM6ICVkXG4iLCBwZGF0YS0+eF9saW5lKTsKLQlkZXZfZGJnKGRldiwgIk51bWJlciBvZiBZIGxpbmVzOiAlZFxuIiwgcGRhdGEtPnlfbGluZSk7Ci0KLQlzd2l0Y2ggKHBkYXRhLT54X2xpbmUpIHsKLQljYXNlIDAgLi4uIDE1OgotCQlpZiAocGRhdGEtPnlfbGluZSA8PSAxNCkKLQkJCW1vZGUgPSAwOwotCQlicmVhazsKLQljYXNlIDE2OgotCQlpZiAocGRhdGEtPnlfbGluZSA8PSAxMikKLQkJCW1vZGUgPSAxOwotCQlpZiAocGRhdGEtPnlfbGluZSA9PSAxMyB8fCBwZGF0YS0+eV9saW5lID09IDE0KQotCQkJbW9kZSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMTc6Ci0JCWlmIChwZGF0YS0+eV9saW5lIDw9IDExKQotCQkJbW9kZSA9IDI7Ci0JCWlmIChwZGF0YS0+eV9saW5lID09IDEyIHx8IHBkYXRhLT55X2xpbmUgPT0gMTMpCi0JCQltb2RlID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSAxODoKLQkJaWYgKHBkYXRhLT55X2xpbmUgPD0gMTApCi0JCQltb2RlID0gMzsKLQkJaWYgKHBkYXRhLT55X2xpbmUgPT0gMTEgfHwgcGRhdGEtPnlfbGluZSA9PSAxMikKLQkJCW1vZGUgPSAyOwotCQlicmVhazsKLQljYXNlIDE5OgotCQlpZiAocGRhdGEtPnlfbGluZSA8PSA5KQotCQkJbW9kZSA9IDQ7Ci0JCWlmIChwZGF0YS0+eV9saW5lID09IDEwIHx8IHBkYXRhLT55X2xpbmUgPT0gMTEpCi0JCQltb2RlID0gMzsKLQkJYnJlYWs7Ci0JY2FzZSAyMDoKLQkJbW9kZSA9IDQ7Ci0JfQotCi0JaWYgKG1vZGUgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiSW52YWxpZCBYL1kgbGluZXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQllcnJvciA9IHF0NjAyMjQwX3JlYWRfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1NQVF9DVEVDT05GSUcsCi0JCQkJUVQ2MDIyNDBfQ1RFX01PREUsICZ2YWwpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKG1vZGUgPT0gdmFsKQotCQlyZXR1cm4gMDsKLQotCS8qIENoYW5nZSB0aGUgQ1RFIGNvbmZpZ3VyYXRpb24gKi8KLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfU1BUX0NURUNPTkZJRywKLQkJCVFUNjAyMjQwX0NURV9DVFJMLCAxKTsKLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfU1BUX0NURUNPTkZJRywKLQkJCVFUNjAyMjQwX0NURV9NT0RFLCBtb2RlKTsKLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfU1BUX0NURUNPTkZJRywKLQkJCVFUNjAyMjQwX0NURV9DVFJMLCAwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHF0NjAyMjQwX21ha2VfaGlnaGNoZyhzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+Y2xpZW50LT5kZXY7Ci0JaW50IGNvdW50ID0gMTA7Ci0JaW50IGVycm9yOwotCXU4IHZhbDsKLQotCS8qIFJlYWQgZHVtbXkgbWVzc2FnZSB0byBtYWtlIGhpZ2ggQ0hHIHBpbiAqLwotCWRvIHsKLQkJZXJyb3IgPSBxdDYwMjI0MF9yZWFkX29iamVjdChkYXRhLCBRVDYwMjI0MF9HRU5fTUVTU0FHRSwgMCwgJnZhbCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9IHdoaWxlICgodmFsICE9IDB4ZmYpICYmIC0tY291bnQpOwotCi0JaWYgKCFjb3VudCkgewotCQlkZXZfZXJyKGRldiwgIkNIRyBwaW4gaXNuJ3QgY2xlYXJlZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHF0NjAyMjQwX2hhbmRsZV9wZGF0YShzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSkKLXsKLQljb25zdCBzdHJ1Y3QgcXQ2MDIyNDBfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkYXRhLT5wZGF0YTsKLQl1OCB2b2x0YWdlOwotCi0JLyogU2V0IHRvdWNoc2NyZWVuIGxpbmVzICovCi0JcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1RPVUNIX01VTFRJLCBRVDYwMjI0MF9UT1VDSF9YU0laRSwKLQkJCXBkYXRhLT54X2xpbmUpOwotCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9UT1VDSF9NVUxUSSwgUVQ2MDIyNDBfVE9VQ0hfWVNJWkUsCi0JCQlwZGF0YS0+eV9saW5lKTsKLQotCS8qIFNldCB0b3VjaHNjcmVlbiBvcmllbnQgKi8KLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfVE9VQ0hfTVVMVEksIFFUNjAyMjQwX1RPVUNIX09SSUVOVCwKLQkJCXBkYXRhLT5vcmllbnQpOwotCi0JLyogU2V0IHRvdWNoc2NyZWVuIGJ1cnN0IGxlbmd0aCAqLwotCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9UT1VDSF9NVUxUSSwKLQkJCVFUNjAyMjQwX1RPVUNIX0JMRU4sIHBkYXRhLT5ibGVuKTsKLQotCS8qIFNldCB0b3VjaHNjcmVlbiB0aHJlc2hvbGQgKi8KLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfVE9VQ0hfTVVMVEksCi0JCQlRVDYwMjI0MF9UT1VDSF9UQ0hUSFIsIHBkYXRhLT50aHJlc2hvbGQpOwotCi0JLyogU2V0IHRvdWNoc2NyZWVuIHJlc29sdXRpb24gKi8KLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfVE9VQ0hfTVVMVEksCi0JCQlRVDYwMjI0MF9UT1VDSF9YUkFOR0VfTFNCLCAocGRhdGEtPnhfc2l6ZSAtIDEpICYgMHhmZik7Ci0JcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1RPVUNIX01VTFRJLAotCQkJUVQ2MDIyNDBfVE9VQ0hfWFJBTkdFX01TQiwgKHBkYXRhLT54X3NpemUgLSAxKSA+PiA4KTsKLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfVE9VQ0hfTVVMVEksCi0JCQlRVDYwMjI0MF9UT1VDSF9ZUkFOR0VfTFNCLCAocGRhdGEtPnlfc2l6ZSAtIDEpICYgMHhmZik7Ci0JcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX1RPVUNIX01VTFRJLAotCQkJUVQ2MDIyNDBfVE9VQ0hfWVJBTkdFX01TQiwgKHBkYXRhLT55X3NpemUgLSAxKSA+PiA4KTsKLQotCS8qIFNldCB0b3VjaHNjcmVlbiB2b2x0YWdlICovCi0JaWYgKGRhdGEtPmluZm8udmVyc2lvbiA+PSBRVDYwMjI0MF9WRVJfMjEgJiYgcGRhdGEtPnZvbHRhZ2UpIHsKLQkJaWYgKHBkYXRhLT52b2x0YWdlIDwgUVQ2MDIyNDBfVk9MVEFHRV9ERUZBVUxUKSB7Ci0JCQl2b2x0YWdlID0gKFFUNjAyMjQwX1ZPTFRBR0VfREVGQVVMVCAtIHBkYXRhLT52b2x0YWdlKSAvCi0JCQkJUVQ2MDIyNDBfVk9MVEFHRV9TVEVQOwotCQkJdm9sdGFnZSA9IDB4ZmYgLSB2b2x0YWdlICsgMTsKLQkJfSBlbHNlCi0JCQl2b2x0YWdlID0gKHBkYXRhLT52b2x0YWdlIC0gUVQ2MDIyNDBfVk9MVEFHRV9ERUZBVUxUKSAvCi0JCQkJUVQ2MDIyNDBfVk9MVEFHRV9TVEVQOwotCi0JCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9TUFRfQ1RFQ09ORklHLAotCQkJCVFUNjAyMjQwX0NURV9WT0xUQUdFLCB2b2x0YWdlKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcXQ2MDIyNDBfZ2V0X2luZm8oc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKLQlzdHJ1Y3QgcXQ2MDIyNDBfaW5mbyAqaW5mbyA9ICZkYXRhLT5pbmZvOwotCWludCBlcnJvcjsKLQl1OCB2YWw7Ci0KLQllcnJvciA9IHF0NjAyMjQwX3JlYWRfcmVnKGNsaWVudCwgUVQ2MDIyNDBfRkFNSUxZX0lELCAmdmFsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpbmZvLT5mYW1pbHlfaWQgPSB2YWw7Ci0KLQllcnJvciA9IHF0NjAyMjQwX3JlYWRfcmVnKGNsaWVudCwgUVQ2MDIyNDBfVkFSSUFOVF9JRCwgJnZhbCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JaW5mby0+dmFyaWFudF9pZCA9IHZhbDsKLQotCWVycm9yID0gcXQ2MDIyNDBfcmVhZF9yZWcoY2xpZW50LCBRVDYwMjI0MF9WRVJTSU9OLCAmdmFsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpbmZvLT52ZXJzaW9uID0gdmFsOwotCi0JZXJyb3IgPSBxdDYwMjI0MF9yZWFkX3JlZyhjbGllbnQsIFFUNjAyMjQwX0JVSUxELCAmdmFsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpbmZvLT5idWlsZCA9IHZhbDsKLQotCWVycm9yID0gcXQ2MDIyNDBfcmVhZF9yZWcoY2xpZW50LCBRVDYwMjI0MF9PQkpFQ1RfTlVNLCAmdmFsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpbmZvLT5vYmplY3RfbnVtID0gdmFsOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcXQ2MDIyNDBfZ2V0X29iamVjdF90YWJsZShzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSkKLXsKLQlpbnQgZXJyb3I7Ci0JaW50IGk7Ci0JdTE2IHJlZzsKLQl1OCByZXBvcnRpZCA9IDA7Ci0JdTggYnVmW1FUNjAyMjQwX09CSkVDVF9TSVpFXTsKLQotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5pbmZvLm9iamVjdF9udW07IGkrKykgewotCQlzdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0ICpvYmplY3QgPSBkYXRhLT5vYmplY3RfdGFibGUgKyBpOwotCi0JCXJlZyA9IFFUNjAyMjQwX09CSkVDVF9TVEFSVCArIFFUNjAyMjQwX09CSkVDVF9TSVpFICogaTsKLQkJZXJyb3IgPSBxdDYwMjI0MF9yZWFkX29iamVjdF90YWJsZShkYXRhLT5jbGllbnQsIHJlZywgYnVmKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCi0JCW9iamVjdC0+dHlwZSA9IGJ1ZlswXTsKLQkJb2JqZWN0LT5zdGFydF9hZGRyZXNzID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlsxXTsKLQkJb2JqZWN0LT5zaXplID0gYnVmWzNdOwotCQlvYmplY3QtPmluc3RhbmNlcyA9IGJ1Zls0XTsKLQkJb2JqZWN0LT5udW1fcmVwb3J0X2lkcyA9IGJ1Zls1XTsKLQotCQlpZiAob2JqZWN0LT5udW1fcmVwb3J0X2lkcykgewotCQkJcmVwb3J0aWQgKz0gb2JqZWN0LT5udW1fcmVwb3J0X2lkcyAqCi0JCQkJCShvYmplY3QtPmluc3RhbmNlcyArIDEpOwotCQkJb2JqZWN0LT5tYXhfcmVwb3J0aWQgPSByZXBvcnRpZDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHF0NjAyMjQwX2luaXRpYWxpemUoc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKLQlzdHJ1Y3QgcXQ2MDIyNDBfaW5mbyAqaW5mbyA9ICZkYXRhLT5pbmZvOwotCWludCBlcnJvcjsKLQl1OCB2YWw7Ci0KLQllcnJvciA9IHF0NjAyMjQwX2dldF9pbmZvKGRhdGEpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZGF0YS0+b2JqZWN0X3RhYmxlID0ga2NhbGxvYyhpbmZvLT5vYmplY3RfbnVtLAotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBxdDYwMjI0MF9vYmplY3QpLAotCQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhLT5vYmplY3RfdGFibGUpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogR2V0IG9iamVjdCB0YWJsZSBpbmZvcm1hdGlvbiAqLwotCWVycm9yID0gcXQ2MDIyNDBfZ2V0X29iamVjdF90YWJsZShkYXRhKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCS8qIENoZWNrIHJlZ2lzdGVyIGluaXQgdmFsdWVzICovCi0JZXJyb3IgPSBxdDYwMjI0MF9jaGVja19yZWdfaW5pdChkYXRhKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCS8qIENoZWNrIFgvWSBtYXRyaXggc2l6ZSAqLwotCWVycm9yID0gcXQ2MDIyNDBfY2hlY2tfbWF0cml4X3NpemUoZGF0YSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IHF0NjAyMjQwX21ha2VfaGlnaGNoZyhkYXRhKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCXF0NjAyMjQwX2hhbmRsZV9wZGF0YShkYXRhKTsKLQotCS8qIEJhY2t1cCB0byBtZW1vcnkgKi8KLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfR0VOX0NPTU1BTkQsCi0JCQlRVDYwMjI0MF9DT01NQU5EX0JBQ0tVUE5WLAotCQkJUVQ2MDIyNDBfQkFDS1VQX1ZBTFVFKTsKLQltc2xlZXAoUVQ2MDIyNDBfQkFDS1VQX1RJTUUpOwotCi0JLyogU29mdCByZXNldCAqLwotCXF0NjAyMjQwX3dyaXRlX29iamVjdChkYXRhLCBRVDYwMjI0MF9HRU5fQ09NTUFORCwKLQkJCVFUNjAyMjQwX0NPTU1BTkRfUkVTRVQsIDEpOwotCW1zbGVlcChRVDYwMjI0MF9SRVNFVF9USU1FKTsKLQotCS8qIFVwZGF0ZSBtYXRyaXggc2l6ZSBhdCBpbmZvIHN0cnVjdCAqLwotCWVycm9yID0gcXQ2MDIyNDBfcmVhZF9yZWcoY2xpZW50LCBRVDYwMjI0MF9NQVRSSVhfWF9TSVpFLCAmdmFsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpbmZvLT5tYXRyaXhfeHNpemUgPSB2YWw7Ci0KLQllcnJvciA9IHF0NjAyMjQwX3JlYWRfcmVnKGNsaWVudCwgUVQ2MDIyNDBfTUFUUklYX1lfU0laRSwgJnZhbCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JaW5mby0+bWF0cml4X3lzaXplID0gdmFsOwotCi0JZGV2X2luZm8oJmNsaWVudC0+ZGV2LAotCQkJIkZhbWlseSBJRDogJWQgVmFyaWFudCBJRDogJWQgVmVyc2lvbjogJWQgQnVpbGQ6ICVkXG4iLAotCQkJaW5mby0+ZmFtaWx5X2lkLCBpbmZvLT52YXJpYW50X2lkLCBpbmZvLT52ZXJzaW9uLAotCQkJaW5mby0+YnVpbGQpOwotCi0JZGV2X2luZm8oJmNsaWVudC0+ZGV2LAotCQkJIk1hdHJpeCBYIFNpemU6ICVkIE1hdHJpeCBZIFNpemU6ICVkIE9iamVjdCBOdW06ICVkXG4iLAotCQkJaW5mby0+bWF0cml4X3hzaXplLCBpbmZvLT5tYXRyaXhfeXNpemUsCi0JCQlpbmZvLT5vYmplY3RfbnVtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBxdDYwMjI0MF9vYmplY3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgcXQ2MDIyNDBfb2JqZWN0ICpvYmplY3Q7Ci0JaW50IGNvdW50ID0gMDsKLQlpbnQgaSwgajsKLQlpbnQgZXJyb3I7Ci0JdTggdmFsOwotCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPmluZm8ub2JqZWN0X251bTsgaSsrKSB7Ci0JCW9iamVjdCA9IGRhdGEtPm9iamVjdF90YWJsZSArIGk7Ci0KLQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwKLQkJCQkiT2JqZWN0IFRhYmxlIEVsZW1lbnQgJWQoVHlwZSAlZClcbiIsCi0JCQkJaSArIDEsIG9iamVjdC0+dHlwZSk7Ci0KLQkJaWYgKCFxdDYwMjI0MF9vYmplY3RfcmVhZGFibGUob2JqZWN0LT50eXBlKSkgewotCQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIlxuIik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWZvciAoaiA9IDA7IGogPCBvYmplY3QtPnNpemUgKyAxOyBqKyspIHsKLQkJCWVycm9yID0gcXQ2MDIyNDBfcmVhZF9vYmplY3QoZGF0YSwKLQkJCQkJCW9iamVjdC0+dHlwZSwgaiwgJnZhbCk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIGVycm9yOwotCi0JCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LAotCQkJCQkiICBCeXRlICVkOiAweCV4ICglZClcbiIsIGosIHZhbCwgdmFsKTsKLQkJfQotCi0JCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICJcbiIpOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBxdDYwMjI0MF9sb2FkX2Z3KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqZm4pCi17Ci0Jc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwotCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOwotCXVuc2lnbmVkIGludCBwb3MgPSAwOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sIGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBmbik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogQ2hhbmdlIHRvIHRoZSBib290bG9hZGVyIG1vZGUgKi8KLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwgUVQ2MDIyNDBfR0VOX0NPTU1BTkQsCi0JCQlRVDYwMjI0MF9DT01NQU5EX1JFU0VULCBRVDYwMjI0MF9CT09UX1ZBTFVFKTsKLQltc2xlZXAoUVQ2MDIyNDBfUkVTRVRfVElNRSk7Ci0KLQkvKiBDaGFuZ2UgdG8gc2xhdmUgYWRkcmVzcyBvZiBib290bG9hZGVyICovCi0JaWYgKGNsaWVudC0+YWRkciA9PSBRVDYwMjI0MF9BUFBfTE9XKQotCQljbGllbnQtPmFkZHIgPSBRVDYwMjI0MF9CT09UX0xPVzsKLQllbHNlCi0JCWNsaWVudC0+YWRkciA9IFFUNjAyMjQwX0JPT1RfSElHSDsKLQotCXJldCA9IHF0NjAyMjQwX2NoZWNrX2Jvb3Rsb2FkZXIoY2xpZW50LCBRVDYwMjI0MF9XQUlUSU5HX0JPT1RMT0FEX0NNRCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBVbmxvY2sgYm9vdGxvYWRlciAqLwotCXF0NjAyMjQwX3VubG9ja19ib290bG9hZGVyKGNsaWVudCk7Ci0KLQl3aGlsZSAocG9zIDwgZnctPnNpemUpIHsKLQkJcmV0ID0gcXQ2MDIyNDBfY2hlY2tfYm9vdGxvYWRlcihjbGllbnQsCi0JCQkJCQlRVDYwMjI0MF9XQUlUSU5HX0ZSQU1FX0RBVEEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0KLQkJZnJhbWVfc2l6ZSA9ICgoKihmdy0+ZGF0YSArIHBvcykgPDwgOCkgfCAqKGZ3LT5kYXRhICsgcG9zICsgMSkpOwotCi0JCS8qIFdlIHNob3VsZCBhZGQgMiBhdCBmcmFtZSBzaXplIGFzIHRoZSB0aGUgZmlybXdhcmUgZGF0YSBpcyBub3QKLQkJICogaW5jbHVkZWQgdGhlIENSQyBieXRlcy4KLQkJICovCi0JCWZyYW1lX3NpemUgKz0gMjsKLQotCQkvKiBXcml0ZSBvbmUgZnJhbWUgdG8gZGV2aWNlICovCi0JCXF0NjAyMjQwX2Z3X3dyaXRlKGNsaWVudCwgZnctPmRhdGEgKyBwb3MsIGZyYW1lX3NpemUpOwotCi0JCXJldCA9IHF0NjAyMjQwX2NoZWNrX2Jvb3Rsb2FkZXIoY2xpZW50LAotCQkJCQkJUVQ2MDIyNDBfRlJBTUVfQ1JDX1BBU1MpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0KLQkJcG9zICs9IGZyYW1lX3NpemU7Ci0KLQkJZGV2X2RiZyhkZXYsICJVcGRhdGVkICVkIGJ5dGVzIC8gJXpkIGJ5dGVzXG4iLCBwb3MsIGZ3LT5zaXplKTsKLQl9Ci0KLW91dDoKLQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQotCS8qIENoYW5nZSB0byBzbGF2ZSBhZGRyZXNzIG9mIGFwcGxpY2F0aW9uICovCi0JaWYgKGNsaWVudC0+YWRkciA9PSBRVDYwMjI0MF9CT09UX0xPVykKLQkJY2xpZW50LT5hZGRyID0gUVQ2MDIyNDBfQVBQX0xPVzsKLQllbHNlCi0JCWNsaWVudC0+YWRkciA9IFFUNjAyMjQwX0FQUF9ISUdIOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgcXQ2MDIyNDBfdXBkYXRlX2Z3X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgaW50IHZlcnNpb247Ci0JaW50IGVycm9yOwotCi0JaWYgKHNzY2FuZihidWYsICIldSIsICZ2ZXJzaW9uKSAhPSAxKSB7Ci0JCWRldl9lcnIoZGV2LCAiSW52YWxpZCB2YWx1ZXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZGF0YS0+aW5mby52ZXJzaW9uIDwgUVQ2MDIyNDBfVkVSXzIxIHx8IHZlcnNpb24gPCBRVDYwMjI0MF9WRVJfMjEpIHsKLQkJZGV2X2VycihkZXYsICJGVyB1cGRhdGUgc3VwcG9ydGVkIHN0YXJ0aW5nIHdpdGggdmVyc2lvbiAyMVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRpc2FibGVfaXJxKGRhdGEtPmlycSk7Ci0KLQllcnJvciA9IHF0NjAyMjQwX2xvYWRfZncoZGV2LCBRVDYwMjI0MF9GV19OQU1FKTsKLQlpZiAoZXJyb3IpIHsKLQkJZGV2X2VycihkZXYsICJUaGUgZmlybXdhcmUgdXBkYXRlIGZhaWxlZCglZClcbiIsIGVycm9yKTsKLQkJY291bnQgPSBlcnJvcjsKLQl9IGVsc2UgewotCQlkZXZfZGJnKGRldiwgIlRoZSBmaXJtd2FyZSB1cGRhdGUgc3VjY2VlZGVkXG4iKTsKLQotCQkvKiBXYWl0IGZvciByZXNldCAqLwotCQltc2xlZXAoUVQ2MDIyNDBfRldSRVNFVF9USU1FKTsKLQotCQlrZnJlZShkYXRhLT5vYmplY3RfdGFibGUpOwotCQlkYXRhLT5vYmplY3RfdGFibGUgPSBOVUxMOwotCi0JCXF0NjAyMjQwX2luaXRpYWxpemUoZGF0YSk7Ci0JfQotCi0JZW5hYmxlX2lycShkYXRhLT5pcnEpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIob2JqZWN0LCAwNDQ0LCBxdDYwMjI0MF9vYmplY3Rfc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodXBkYXRlX2Z3LCAwNjY0LCBOVUxMLCBxdDYwMjI0MF91cGRhdGVfZndfc3RvcmUpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcXQ2MDIyNDBfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfb2JqZWN0LmF0dHIsCi0JJmRldl9hdHRyX3VwZGF0ZV9mdy5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHF0NjAyMjQwX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gcXQ2MDIyNDBfYXR0cnMsCi19OwotCi1zdGF0aWMgdm9pZCBxdDYwMjI0MF9zdGFydChzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSkKLXsKLQkvKiBUb3VjaCBlbmFibGUgKi8KLQlxdDYwMjI0MF93cml0ZV9vYmplY3QoZGF0YSwKLQkJCVFUNjAyMjQwX1RPVUNIX01VTFRJLCBRVDYwMjI0MF9UT1VDSF9DVFJMLCAweDgzKTsKLX0KLQotc3RhdGljIHZvaWQgcXQ2MDIyNDBfc3RvcChzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSkKLXsKLQkvKiBUb3VjaCBkaXNhYmxlICovCi0JcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsCi0JCQlRVDYwMjI0MF9UT1VDSF9NVUxUSSwgUVQ2MDIyNDBfVE9VQ0hfQ1RSTCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgcXQ2MDIyNDBfaW5wdXRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JcXQ2MDIyNDBfc3RhcnQoZGF0YSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcXQ2MDIyNDBfaW5wdXRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQotewotCXN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXF0NjAyMjQwX3N0b3AoZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHF0NjAyMjQwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGVycm9yOwotCi0JaWYgKCFjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSksIEdGUF9LRVJORUwpOwotCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghZGF0YSB8fCAhaW5wdXRfZGV2KSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV9tZW07Ci0JfQotCi0JaW5wdXRfZGV2LT5uYW1lID0gIkFUNDJRVDYwMjI0MC9BVE1YVDIyNCBUb3VjaHNjcmVlbiI7Ci0JaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKLQlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7Ci0JaW5wdXRfZGV2LT5vcGVuID0gcXQ2MDIyNDBfaW5wdXRfb3BlbjsKLQlpbnB1dF9kZXYtPmNsb3NlID0gcXQ2MDIyNDBfaW5wdXRfY2xvc2U7Ci0KLQlfX3NldF9iaXQoRVZfQUJTLCBpbnB1dF9kZXYtPmV2Yml0KTsKLQlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dF9kZXYtPmV2Yml0KTsKLQlfX3NldF9iaXQoQlROX1RPVUNILCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0KLQkvKiBGb3Igc2luZ2xlIHRvdWNoICovCi0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwKLQkJCSAgICAgMCwgUVQ2MDIyNDBfTUFYX1hDLCAwLCAwKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLAotCQkJICAgICAwLCBRVDYwMjI0MF9NQVhfWUMsIDAsIDApOwotCi0JLyogRm9yIG11bHRpIHRvdWNoICovCi0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfVE9VQ0hfTUFKT1IsCi0JCQkgICAgIDAsIFFUNjAyMjQwX01BWF9BUkVBLCAwLCAwKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9QT1NJVElPTl9YLAotCQkJICAgICAwLCBRVDYwMjI0MF9NQVhfWEMsIDAsIDApOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01UX1BPU0lUSU9OX1ksCi0JCQkgICAgIDAsIFFUNjAyMjQwX01BWF9ZQywgMCwgMCk7Ci0KLQlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGRhdGEpOwotCi0JZGF0YS0+Y2xpZW50ID0gY2xpZW50OwotCWRhdGEtPmlucHV0X2RldiA9IGlucHV0X2RldjsKLQlkYXRhLT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JZGF0YS0+aXJxID0gY2xpZW50LT5pcnE7Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKLQotCWVycm9yID0gcXQ2MDIyNDBfaW5pdGlhbGl6ZShkYXRhKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyX2ZyZWVfb2JqZWN0OwotCi0JZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwgTlVMTCwgcXQ2MDIyNDBfaW50ZXJydXB0LAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsIGNsaWVudC0+ZGV2LmRyaXZlci0+bmFtZSwgZGF0YSk7Ci0JaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGludGVycnVwdFxuIik7Ci0JCWdvdG8gZXJyX2ZyZWVfb2JqZWN0OwotCX0KLQotCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycl9mcmVlX2lycTsKLQotCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcXQ2MDIyNDBfYXR0cl9ncm91cCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycl91bnJlZ2lzdGVyX2RldmljZTsKLQotCXJldHVybiAwOwotCi1lcnJfdW5yZWdpc3Rlcl9kZXZpY2U6Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKLQlpbnB1dF9kZXYgPSBOVUxMOwotZXJyX2ZyZWVfaXJxOgotCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBkYXRhKTsKLWVycl9mcmVlX29iamVjdDoKLQlrZnJlZShkYXRhLT5vYmplY3RfdGFibGUpOwotZXJyX2ZyZWVfbWVtOgotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7Ci0Ja2ZyZWUoZGF0YSk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBxdDYwMjI0MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcXQ2MDIyNDBfYXR0cl9ncm91cCk7Ci0JZnJlZV9pcnEoZGF0YS0+aXJxLCBkYXRhKTsKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkYXRhLT5pbnB1dF9kZXYpOwotCWtmcmVlKGRhdGEtPm9iamVjdF90YWJsZSk7Ci0Ja2ZyZWUoZGF0YSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBxdDYwMjI0MF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gZGF0YS0+aW5wdXRfZGV2OwotCi0JbXV0ZXhfbG9jaygmaW5wdXRfZGV2LT5tdXRleCk7Ci0KLQlpZiAoaW5wdXRfZGV2LT51c2VycykKLQkJcXQ2MDIyNDBfc3RvcChkYXRhKTsKLQotCW11dGV4X3VubG9jaygmaW5wdXRfZGV2LT5tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxdDYwMjI0MF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHF0NjAyMjQwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBkYXRhLT5pbnB1dF9kZXY7Ci0KLQkvKiBTb2Z0IHJlc2V0ICovCi0JcXQ2MDIyNDBfd3JpdGVfb2JqZWN0KGRhdGEsIFFUNjAyMjQwX0dFTl9DT01NQU5ELAotCQkJUVQ2MDIyNDBfQ09NTUFORF9SRVNFVCwgMSk7Ci0KLQltc2xlZXAoUVQ2MDIyNDBfUkVTRVRfVElNRSk7Ci0KLQltdXRleF9sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKLQotCWlmIChpbnB1dF9kZXYtPnVzZXJzKQotCQlxdDYwMjI0MF9zdGFydChkYXRhKTsKLQotCW11dGV4X3VubG9jaygmaW5wdXRfZGV2LT5tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHF0NjAyMjQwX3BtX29wcyA9IHsKLQkuc3VzcGVuZAk9IHF0NjAyMjQwX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBxdDYwMjI0MF9yZXN1bWUsCi19OwotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBxdDYwMjI0MF9pZFtdID0gewotCXsgInF0NjAyMjQwX3RzIiwgMCB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBxdDYwMjI0MF9pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBxdDYwMjI0MF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAicXQ2MDIyNDBfdHMiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLSNpZmRlZiBDT05GSUdfUE0KLQkJLnBtCT0gJnF0NjAyMjQwX3BtX29wcywKLSNlbmRpZgotCX0sCi0JLnByb2JlCQk9IHF0NjAyMjQwX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocXQ2MDIyNDBfcmVtb3ZlKSwKLQkuaWRfdGFibGUJPSBxdDYwMjI0MF9pZCwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHF0NjAyMjQwX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnF0NjAyMjQwX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBxdDYwMjI0MF9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJnF0NjAyMjQwX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHF0NjAyMjQwX2luaXQpOwotbW9kdWxlX2V4aXQocXQ2MDIyNDBfZXhpdCk7Ci0KLS8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwotTU9EVUxFX0FVVEhPUigiSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBVDQyUVQ2MDIyNDAvQVRNWFQyMjQgVG91Y2hzY3JlZW4gZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDUuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NDIwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDUuYwpAQCAtMCwwICsxLDc1NiBAQAorLyoKKyAqIFRTQzIwMDUgdG91Y2hzY3JlZW4gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3I6IExhdXJpIExldWtrdW5lbiA8bGF1cmkubGV1a2t1bmVuQG5va2lhLmNvbT4KKyAqIGJhc2VkIG9uIFRTQzIzMDEgZHJpdmVyIGJ5IEtsYXVzIEsuIFBlZGVyc2VuIDxrbGF1cy5rLnBlZGVyc2VuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3RzYzIwMDUuaD4KKworLyoKKyAqIFRoZSB0b3VjaHNjcmVlbiBpbnRlcmZhY2Ugb3BlcmF0ZXMgYXMgZm9sbG93czoKKyAqCisgKiAxKSBQZW4gaXMgcHJlc3NlZCBhZ2FpbnN0IHRoZSB0b3VjaHNjcmVlbi4KKyAqIDIpIFRTQzIwMDUgcGVyZm9ybXMgQUQgY29udmVyc2lvbi4KKyAqIDMpIEFmdGVyIHRoZSBjb252ZXJzaW9uIGlzIGRvbmUgVFNDMjAwNSBkcml2ZXMgREFWIGxpbmUgZG93bi4KKyAqIDQpIEdQSU8gSVJRIGlzIHJlY2VpdmVkIGFuZCB0c2MyMDA1X2lycV90aHJlYWQoKSBpcyBzY2hlZHVsZWQuCisgKiA1KSB0c2MyMDA1X2lycV90aHJlYWQoKSBxdWV1ZXMgdXAgYW4gc3BpIHRyYW5zZmVyIHRvIGZldGNoIHRoZSB4LCB5LCB6MSwgejIKKyAqICAgIHZhbHVlcy4KKyAqIDYpIHRzYzIwMDVfaXJxX3RocmVhZCgpIHJlcG9ydHMgY29vcmRpbmF0ZXMgdG8gaW5wdXQgbGF5ZXIgYW5kIHNldHMgdXAKKyAqICAgIHRzYzIwMDVfcGVudXBfdGltZXIoKSB0byBiZSBjYWxsZWQgYWZ0ZXIgVFNDMjAwNV9QRU5VUF9USU1FX01TICg0MG1zKS4KKyAqIDcpIFdoZW4gdGhlIHBlbnVwIHRpbWVyIGV4cGlyZXMsIHRoZXJlIGhhdmUgbm90IGJlZW4gdG91Y2ggb3IgREFWIGludGVycnVwdHMKKyAqICAgIGR1cmluZyB0aGUgbGFzdCA0MG1zIHdoaWNoIG1lYW5zIHRoZSBwZW4gaGFzIGJlZW4gbGlmdGVkLgorICoKKyAqIEVTRCByZWNvdmVyeSB2aWEgYSBoYXJkd2FyZSByZXNldCBpcyBkb25lIGlmIHRoZSBUU0MyMDA1IGRvZXNuJ3QgcmVzcG9uZAorICogYWZ0ZXIgYSBjb25maWd1cmFibGUgcGVyaW9kIChpbiBtcykgb2YgYWN0aXZpdHkuIElmIGVzZF90aW1lb3V0IGlzIDAsIHRoZQorICogd2F0Y2hkb2cgaXMgZGlzYWJsZWQuCisgKi8KKworLyogY29udHJvbCBieXRlIDEgKi8KKyNkZWZpbmUgVFNDMjAwNV9DTUQJCQkweDgwCisjZGVmaW5lIFRTQzIwMDVfQ01EX05PUk1BTAkJMHgwMAorI2RlZmluZSBUU0MyMDA1X0NNRF9TVE9QCQkweDAxCisjZGVmaW5lIFRTQzIwMDVfQ01EXzEyQklUCQkweDA0CisKKy8qIGNvbnRyb2wgYnl0ZSAwICovCisjZGVmaW5lIFRTQzIwMDVfUkVHX1JFQUQJCTB4MDAwMQorI2RlZmluZSBUU0MyMDA1X1JFR19QTkQwCQkweDAwMDIKKyNkZWZpbmUgVFNDMjAwNV9SRUdfWAkJCTB4MDAwMAorI2RlZmluZSBUU0MyMDA1X1JFR19ZCQkJMHgwMDA4CisjZGVmaW5lIFRTQzIwMDVfUkVHX1oxCQkJMHgwMDEwCisjZGVmaW5lIFRTQzIwMDVfUkVHX1oyCQkJMHgwMDE4CisjZGVmaW5lIFRTQzIwMDVfUkVHX1RFTVBfSElHSAkJMHgwMDUwCisjZGVmaW5lIFRTQzIwMDVfUkVHX0NGUjAJCTB4MDA2MAorI2RlZmluZSBUU0MyMDA1X1JFR19DRlIxCQkweDAwNjgKKyNkZWZpbmUgVFNDMjAwNV9SRUdfQ0ZSMgkJMHgwMDcwCisKKy8qIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAqLworI2RlZmluZSBUU0MyMDA1X0NGUjBfUFJFQ0hBUkdFXzI3NlVTCTB4MDA0MAorI2RlZmluZSBUU0MyMDA1X0NGUjBfU1RBQlRJTUVfMU1TCTB4MDMwMAorI2RlZmluZSBUU0MyMDA1X0NGUjBfQ0xPQ0tfMU1IWgkJMHgxMDAwCisjZGVmaW5lIFRTQzIwMDVfQ0ZSMF9SRVNPTFVUSU9OMTIJMHgyMDAwCisjZGVmaW5lIFRTQzIwMDVfQ0ZSMF9QRU5NT0RFCQkweDgwMDAKKyNkZWZpbmUgVFNDMjAwNV9DRlIwX0lOSVRWQUxVRQkJKFRTQzIwMDVfQ0ZSMF9TVEFCVElNRV8xTVMgICAgfCBcCisJCQkJCSBUU0MyMDA1X0NGUjBfQ0xPQ0tfMU1IWiAgICAgIHwgXAorCQkJCQkgVFNDMjAwNV9DRlIwX1JFU09MVVRJT04xMiAgICB8IFwKKwkJCQkJIFRTQzIwMDVfQ0ZSMF9QUkVDSEFSR0VfMjc2VVMgfCBcCisJCQkJCSBUU0MyMDA1X0NGUjBfUEVOTU9ERSkKKworLyogYml0cyBjb21tb24gdG8gYm90aCByZWFkIGFuZCB3cml0ZSBvZiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJVFNDMjAwNV9DRlIwX1JXX01BU0sJCTB4M2ZmZgorCisvKiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgVFNDMjAwNV9DRlIxX0JBVENIREVMQVlfNE1TCTB4MDAwMworI2RlZmluZSBUU0MyMDA1X0NGUjFfSU5JVFZBTFVFCQlUU0MyMDA1X0NGUjFfQkFUQ0hERUxBWV80TVMKKworLyogY29uZmlndXJhdGlvbiByZWdpc3RlciAyICovCisjZGVmaW5lIFRTQzIwMDVfQ0ZSMl9NQVZFX1oJCTB4MDAwNAorI2RlZmluZSBUU0MyMDA1X0NGUjJfTUFWRV9ZCQkweDAwMDgKKyNkZWZpbmUgVFNDMjAwNV9DRlIyX01BVkVfWAkJMHgwMDEwCisjZGVmaW5lIFRTQzIwMDVfQ0ZSMl9BVkdfNwkJMHgwODAwCisjZGVmaW5lIFRTQzIwMDVfQ0ZSMl9NRURJVU1fMTUJCTB4MzAwMAorI2RlZmluZSBUU0MyMDA1X0NGUjJfSU5JVFZBTFVFCQkoVFNDMjAwNV9DRlIyX01BVkVfWAl8IFwKKwkJCQkJIFRTQzIwMDVfQ0ZSMl9NQVZFX1kJfCBcCisJCQkJCSBUU0MyMDA1X0NGUjJfTUFWRV9aCXwgXAorCQkJCQkgVFNDMjAwNV9DRlIyX01FRElVTV8xNQl8IFwKKwkJCQkJIFRTQzIwMDVfQ0ZSMl9BVkdfNykKKworI2RlZmluZSBNQVhfMTJCSVQJCQkweGZmZgorI2RlZmluZSBUU0MyMDA1X1NQSV9NQVhfU1BFRURfSFoJMTAwMDAwMDAKKyNkZWZpbmUgVFNDMjAwNV9QRU5VUF9USU1FX01TCQk0MAorCitzdHJ1Y3QgdHNjMjAwNV9zcGlfcmQgeworCXN0cnVjdCBzcGlfdHJhbnNmZXIJc3BpX3hmZXI7CisJdTMyCQkJc3BpX3R4OworCXUzMgkJCXNwaV9yeDsKK307CisKK3N0cnVjdCB0c2MyMDA1IHsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpOworCisJc3RydWN0IHNwaV9tZXNzYWdlICAgICAgc3BpX3JlYWRfbXNnOworCXN0cnVjdCB0c2MyMDA1X3NwaV9yZAlzcGlfeDsKKwlzdHJ1Y3QgdHNjMjAwNV9zcGlfcmQJc3BpX3k7CisJc3RydWN0IHRzYzIwMDVfc3BpX3JkCXNwaV96MTsKKwlzdHJ1Y3QgdHNjMjAwNV9zcGlfcmQJc3BpX3oyOworCisJc3RydWN0IGlucHV0X2RldgkqaWRldjsKKwljaGFyCQkJcGh5c1szMl07CisKKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OworCisJLyogcmF3IGNvcHkgb2YgcHJldmlvdXMgeCx5LHogKi8KKwlpbnQJCQlpbl94OworCWludAkJCWluX3k7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaW5fejE7CisJaW50CQkJaW5fejI7CisKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCB0aW1lcl9saXN0CXBlbnVwX3RpbWVyOworCisJdW5zaWduZWQgaW50CQllc2RfdGltZW91dDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWVzZF93b3JrOworCXVuc2lnbmVkIGxvbmcJCWxhc3RfdmFsaWRfaW50ZXJydXB0OworCisJdW5zaWduZWQgaW50CQl4X3BsYXRlX29obTsKKworCWJvb2wJCQlvcGVuZWQ7CisJYm9vbAkJCXN1c3BlbmRlZDsKKworCWJvb2wJCQlwZW5fZG93bjsKKworCXZvaWQJCQkoKnNldF9yZXNldCkoYm9vbCBlbmFibGUpOworfTsKKworc3RhdGljIGludCB0c2MyMDA1X2NtZChzdHJ1Y3QgdHNjMjAwNSAqdHMsIHU4IGNtZCkKK3sKKwl1OCB0eCA9IFRTQzIwMDVfQ01EIHwgVFNDMjAwNV9DTURfMTJCSVQgfCBjbWQ7CisJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyID0geworCQkudHhfYnVmCQk9ICZ0eCwKKwkJLmxlbgkJPSAxLAorCQkuYml0c19wZXJfd29yZAk9IDgsCisJfTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCWludCBlcnJvcjsKKworCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXIsICZtc2cpOworCisJZXJyb3IgPSBzcGlfc3luYyh0cy0+c3BpLCAmbXNnKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmdHMtPnNwaS0+ZGV2LCAiJXM6IGZhaWxlZCwgY29tbWFuZDogJXgsIGVycm9yOiAlZFxuIiwKKwkJCV9fZnVuY19fLCBjbWQsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRzYzIwMDVfd3JpdGUoc3RydWN0IHRzYzIwMDUgKnRzLCB1OCByZWcsIHUxNiB2YWx1ZSkKK3sKKwl1MzIgdHggPSAoKHJlZyB8IFRTQzIwMDVfUkVHX1BORDApIDw8IDE2KSB8IHZhbHVlOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlciA9IHsKKwkJLnR4X2J1ZgkJPSAmdHgsCisJCS5sZW4JCT0gNCwKKwkJLmJpdHNfcGVyX3dvcmQJPSAyNCwKKwl9OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CisJaW50IGVycm9yOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7CisKKwllcnJvciA9IHNwaV9zeW5jKHRzLT5zcGksICZtc2cpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZ0cy0+c3BpLT5kZXYsCisJCQkiJXM6IGZhaWxlZCwgcmVnaXN0ZXI6ICV4LCB2YWx1ZTogJXgsIGVycm9yOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZWcsIHZhbHVlLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHNjMjAwNV9zZXR1cF9yZWFkKHN0cnVjdCB0c2MyMDA1X3NwaV9yZCAqcmQsIHU4IHJlZywgYm9vbCBsYXN0KQoreworCW1lbXNldChyZCwgMCwgc2l6ZW9mKCpyZCkpOworCisJcmQtPnNwaV90eAkJICAgPSAocmVnIHwgVFNDMjAwNV9SRUdfUkVBRCkgPDwgMTY7CisJcmQtPnNwaV94ZmVyLnR4X2J1ZgkgICA9ICZyZC0+c3BpX3R4OworCXJkLT5zcGlfeGZlci5yeF9idWYJICAgPSAmcmQtPnNwaV9yeDsKKwlyZC0+c3BpX3hmZXIubGVuCSAgID0gNDsKKwlyZC0+c3BpX3hmZXIuYml0c19wZXJfd29yZCA9IDI0OworCXJkLT5zcGlfeGZlci5jc19jaGFuZ2UJICAgPSAhbGFzdDsKK30KKworc3RhdGljIGludCB0c2MyMDA1X3JlYWQoc3RydWN0IHRzYzIwMDUgKnRzLCB1OCByZWcsIHUxNiAqdmFsdWUpCit7CisJc3RydWN0IHRzYzIwMDVfc3BpX3JkIHNwaV9yZDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCWludCBlcnJvcjsKKworCXRzYzIwMDVfc2V0dXBfcmVhZCgmc3BpX3JkLCByZWcsIHRydWUpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmc3BpX3JkLnNwaV94ZmVyLCAmbXNnKTsKKworCWVycm9yID0gc3BpX3N5bmModHMtPnNwaSwgJm1zZyk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwkqdmFsdWUgPSBzcGlfcmQuc3BpX3J4OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0c2MyMDA1X3VwZGF0ZV9wZW5fc3RhdGUoc3RydWN0IHRzYzIwMDUgKnRzLAorCQkJCSAgICAgaW50IHgsIGludCB5LCBpbnQgcHJlc3N1cmUpCit7CisJaWYgKHByZXNzdXJlKSB7CisJCWlucHV0X3JlcG9ydF9hYnModHMtPmlkZXYsIEFCU19YLCB4KTsKKwkJaW5wdXRfcmVwb3J0X2Ficyh0cy0+aWRldiwgQUJTX1ksIHkpOworCQlpbnB1dF9yZXBvcnRfYWJzKHRzLT5pZGV2LCBBQlNfUFJFU1NVUkUsIHByZXNzdXJlKTsKKwkJaWYgKCF0cy0+cGVuX2Rvd24pIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkodHMtPmlkZXYsIEJUTl9UT1VDSCwgISFwcmVzc3VyZSk7CisJCQl0cy0+cGVuX2Rvd24gPSB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2Ficyh0cy0+aWRldiwgQUJTX1BSRVNTVVJFLCAwKTsKKwkJaWYgKHRzLT5wZW5fZG93bikgeworCQkJaW5wdXRfcmVwb3J0X2tleSh0cy0+aWRldiwgQlROX1RPVUNILCAwKTsKKwkJCXRzLT5wZW5fZG93biA9IGZhbHNlOworCQl9CisJfQorCWlucHV0X3N5bmModHMtPmlkZXYpOworCWRldl9kYmcoJnRzLT5zcGktPmRldiwgInBvaW50KCU0ZCwlNGQpLCBwcmVzc3VyZSAoJTRkKVxuIiwgeCwgeSwKKwkJcHJlc3N1cmUpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdHNjMjAwNV9pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKl90cykKK3sKKwlzdHJ1Y3QgdHNjMjAwNSAqdHMgPSBfdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcHJlc3N1cmU7CisJdTMyIHgsIHk7CisJdTMyIHoxLCB6MjsKKwlpbnQgZXJyb3I7CisKKwkvKiByZWFkIHRoZSBjb29yZGluYXRlcyAqLworCWVycm9yID0gc3BpX3N5bmModHMtPnNwaSwgJnRzLT5zcGlfcmVhZF9tc2cpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCisJeCA9IHRzLT5zcGlfeC5zcGlfcng7CisJeSA9IHRzLT5zcGlfeS5zcGlfcng7CisJejEgPSB0cy0+c3BpX3oxLnNwaV9yeDsKKwl6MiA9IHRzLT5zcGlfejIuc3BpX3J4OworCisJLyogdmFsaWRhdGUgcG9zaXRpb24gKi8KKwlpZiAodW5saWtlbHkoeCA+IE1BWF8xMkJJVCB8fCB5ID4gTUFYXzEyQklUKSkKKwkJZ290byBvdXQ7CisKKwkvKiBTa2lwIHJlYWRpbmcgaWYgdGhlIHByZXNzdXJlIGNvbXBvbmVudHMgYXJlIG91dCBvZiByYW5nZSAqLworCWlmICh1bmxpa2VseSh6MSA9PSAwIHx8IHoyID4gTUFYXzEyQklUIHx8IHoxID49IHoyKSkKKwkJZ290byBvdXQ7CisKKyAgICAgICAvKgorCSogU2tpcCBwb2ludCBpZiB0aGlzIGlzIGEgcGVuIGRvd24gd2l0aCB0aGUgZXhhY3Qgc2FtZSB2YWx1ZXMgYXMKKwkqIHRoZSB2YWx1ZSBiZWZvcmUgcGVuLXVwIC0gdGhhdCBpbXBsaWVzIFNQSSBmZWQgdXMgc3RhbGUgZGF0YQorCSovCisJaWYgKCF0cy0+cGVuX2Rvd24gJiYKKwkgICAgdHMtPmluX3ggPT0geCAmJiB0cy0+aW5feSA9PSB5ICYmCisJICAgIHRzLT5pbl96MSA9PSB6MSAmJiB0cy0+aW5fejIgPT0gejIpIHsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IHdlIGFyZSBoYXBweSB3ZSBoYXZlIGEgdmFsaWQgYW5kIHVzZWZ1bCByZWFkaW5nLgorCSAqIFJlbWVtYmVyIGl0IGZvciBsYXRlciBjb21wYXJpc29ucy4gV2UgbWF5IG5vdyBiZWdpbiBkb3duc2FtcGxpbmcuCisJICovCisJdHMtPmluX3ggPSB4OworCXRzLT5pbl95ID0geTsKKwl0cy0+aW5fejEgPSB6MTsKKwl0cy0+aW5fejIgPSB6MjsKKworCS8qIENvbXB1dGUgdG91Y2ggcHJlc3N1cmUgcmVzaXN0YW5jZSB1c2luZyBlcXVhdGlvbiAjMSAqLworCXByZXNzdXJlID0geCAqICh6MiAtIHoxKSAvIHoxOworCXByZXNzdXJlID0gcHJlc3N1cmUgKiB0cy0+eF9wbGF0ZV9vaG0gLyA0MDk2OworCWlmICh1bmxpa2VseShwcmVzc3VyZSA+IE1BWF8xMkJJVCkpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRzLT5sb2NrLCBmbGFncyk7CisKKwl0c2MyMDA1X3VwZGF0ZV9wZW5fc3RhdGUodHMsIHgsIHksIHByZXNzdXJlKTsKKwltb2RfdGltZXIoJnRzLT5wZW51cF90aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUU0MyMDA1X1BFTlVQX1RJTUVfTVMpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzLT5sb2NrLCBmbGFncyk7CisKKwl0cy0+bGFzdF92YWxpZF9pbnRlcnJ1cHQgPSBqaWZmaWVzOworb3V0OgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgdHNjMjAwNV9wZW51cF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHRzYzIwMDUgKnRzID0gKHN0cnVjdCB0c2MyMDA1ICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRzLT5sb2NrLCBmbGFncyk7CisJdHNjMjAwNV91cGRhdGVfcGVuX3N0YXRlKHRzLCAwLCAwLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB0c2MyMDA1X3N0YXJ0X3NjYW4oc3RydWN0IHRzYzIwMDUgKnRzKQoreworCXRzYzIwMDVfd3JpdGUodHMsIFRTQzIwMDVfUkVHX0NGUjAsIFRTQzIwMDVfQ0ZSMF9JTklUVkFMVUUpOworCXRzYzIwMDVfd3JpdGUodHMsIFRTQzIwMDVfUkVHX0NGUjEsIFRTQzIwMDVfQ0ZSMV9JTklUVkFMVUUpOworCXRzYzIwMDVfd3JpdGUodHMsIFRTQzIwMDVfUkVHX0NGUjIsIFRTQzIwMDVfQ0ZSMl9JTklUVkFMVUUpOworCXRzYzIwMDVfY21kKHRzLCBUU0MyMDA1X0NNRF9OT1JNQUwpOworfQorCitzdGF0aWMgdm9pZCB0c2MyMDA1X3N0b3Bfc2NhbihzdHJ1Y3QgdHNjMjAwNSAqdHMpCit7CisJdHNjMjAwNV9jbWQodHMsIFRTQzIwMDVfQ01EX1NUT1ApOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRzLT5tdXRleCBoZWxkICovCitzdGF0aWMgdm9pZCBfX3RzYzIwMDVfZGlzYWJsZShzdHJ1Y3QgdHNjMjAwNSAqdHMpCit7CisJdHNjMjAwNV9zdG9wX3NjYW4odHMpOworCisJZGlzYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKKwlkZWxfdGltZXJfc3luYygmdHMtPnBlbnVwX3RpbWVyKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHMtPmVzZF93b3JrKTsKKworCWVuYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKK30KKworLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0cy0+bXV0ZXggaGVsZCAqLworc3RhdGljIHZvaWQgX190c2MyMDA1X2VuYWJsZShzdHJ1Y3QgdHNjMjAwNSAqdHMpCit7CisJdHNjMjAwNV9zdGFydF9zY2FuKHRzKTsKKworCWlmICh0cy0+ZXNkX3RpbWVvdXQgJiYgdHMtPnNldF9yZXNldCkgeworCQl0cy0+bGFzdF92YWxpZF9pbnRlcnJ1cHQgPSBqaWZmaWVzOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRzLT5lc2Rfd29yaywKKwkJCQlyb3VuZF9qaWZmaWVzKGppZmZpZXMgKworCQkJCQltc2Vjc190b19qaWZmaWVzKHRzLT5lc2RfdGltZW91dCkpKTsKKwl9CisKK30KKworc3RhdGljIHNzaXplX3QgdHNjMjAwNV9zZWxmdGVzdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IHRzYzIwMDUgKnRzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisJdTE2IHRlbXBfaGlnaDsKKwl1MTYgdGVtcF9oaWdoX29yaWc7CisJdTE2IHRlbXBfaGlnaF90ZXN0OworCWJvb2wgc3VjY2VzcyA9IHRydWU7CisJaW50IGVycm9yOworCisJbXV0ZXhfbG9jaygmdHMtPm11dGV4KTsKKworCS8qCisJICogVGVzdCBUU0MyMDA1IGNvbW11bmljYXRpb25zIHZpYSB0ZW1wIGhpZ2ggcmVnaXN0ZXIuCisJICovCisJX190c2MyMDA1X2Rpc2FibGUodHMpOworCisJZXJyb3IgPSB0c2MyMDA1X3JlYWQodHMsIFRTQzIwMDVfUkVHX1RFTVBfSElHSCwgJnRlbXBfaGlnaF9vcmlnKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X3dhcm4oZGV2LCAic2VsZnRlc3QgZmFpbGVkOiByZWFkIGVycm9yICVkXG4iLCBlcnJvcik7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJZ290byBvdXQ7CisJfQorCisJdGVtcF9oaWdoX3Rlc3QgPSAodGVtcF9oaWdoX29yaWcgLSAxKSAmIE1BWF8xMkJJVDsKKworCWVycm9yID0gdHNjMjAwNV93cml0ZSh0cywgVFNDMjAwNV9SRUdfVEVNUF9ISUdILCB0ZW1wX2hpZ2hfdGVzdCk7CisJaWYgKGVycm9yKSB7CisJCWRldl93YXJuKGRldiwgInNlbGZ0ZXN0IGZhaWxlZDogd3JpdGUgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQlnb3RvIG91dDsKKwl9CisKKwllcnJvciA9IHRzYzIwMDVfcmVhZCh0cywgVFNDMjAwNV9SRUdfVEVNUF9ISUdILCAmdGVtcF9oaWdoKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X3dhcm4oZGV2LCAic2VsZnRlc3QgZmFpbGVkOiByZWFkIGVycm9yICVkIGFmdGVyIHdyaXRlXG4iLAorCQkJIGVycm9yKTsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodGVtcF9oaWdoICE9IHRlbXBfaGlnaF90ZXN0KSB7CisJCWRldl93YXJuKGRldiwgInNlbGZ0ZXN0IGZhaWxlZDogJWQgIT0gJWRcbiIsCisJCQkgdGVtcF9oaWdoLCB0ZW1wX2hpZ2hfdGVzdCk7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwl9CisKKwkvKiBoYXJkd2FyZSByZXNldCAqLworCXRzLT5zZXRfcmVzZXQoZmFsc2UpOworCXVzbGVlcF9yYW5nZSgxMDAsIDUwMCk7IC8qIG9ubHkgMTB1cyByZXF1aXJlZCAqLworCXRzLT5zZXRfcmVzZXQodHJ1ZSk7CisKKwlpZiAoIXN1Y2Nlc3MpCisJCWdvdG8gb3V0OworCisJLyogdGVzdCB0aGF0IHRoZSByZXNldCByZWFsbHkgaGFwcGVuZWQgKi8KKwllcnJvciA9IHRzYzIwMDVfcmVhZCh0cywgVFNDMjAwNV9SRUdfVEVNUF9ISUdILCAmdGVtcF9oaWdoKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X3dhcm4oZGV2LCAic2VsZnRlc3QgZmFpbGVkOiByZWFkIGVycm9yICVkIGFmdGVyIHJlc2V0XG4iLAorCQkJIGVycm9yKTsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodGVtcF9oaWdoICE9IHRlbXBfaGlnaF9vcmlnKSB7CisJCWRldl93YXJuKGRldiwgInNlbGZ0ZXN0IGZhaWxlZCBhZnRlciByZXNldDogJWQgIT0gJWRcbiIsCisJCQkgdGVtcF9oaWdoLCB0ZW1wX2hpZ2hfb3JpZyk7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwl9CisKK291dDoKKwlfX3RzYzIwMDVfZW5hYmxlKHRzKTsKKwltdXRleF91bmxvY2soJnRzLT5tdXRleCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3VjY2Vzcyk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzZWxmdGVzdCwgU19JUlVHTywgdHNjMjAwNV9zZWxmdGVzdF9zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRzYzIwMDVfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc2VsZnRlc3QuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgbW9kZV90IHRzYzIwMDVfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXN0cnVjdCB0c2MyMDA1ICp0cyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCW1vZGVfdCBtb2RlID0gYXR0ci0+bW9kZTsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9zZWxmdGVzdC5hdHRyKSB7CisJCWlmICghdHMtPnNldF9yZXNldCkKKwkJCW1vZGUgPSAwOworCX0KKworCXJldHVybiBtb2RlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0c2MyMDA1X2F0dHJfZ3JvdXAgPSB7CisJLmlzX3Zpc2libGUJPSB0c2MyMDA1X2F0dHJfaXNfdmlzaWJsZSwKKwkuYXR0cnMJCT0gdHNjMjAwNV9hdHRycywKK307CisKK3N0YXRpYyB2b2lkIHRzYzIwMDVfZXNkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB0c2MyMDA1ICp0cyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdHNjMjAwNSwgZXNkX3dvcmsud29yayk7CisJaW50IGVycm9yOworCXUxNiByOworCisJbXV0ZXhfbG9jaygmdHMtPm11dGV4KTsKKworCWlmICh0aW1lX2lzX2FmdGVyX2ppZmZpZXModHMtPmxhc3RfdmFsaWRfaW50ZXJydXB0ICsKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXModHMtPmVzZF90aW1lb3V0KSkpCisJCWdvdG8gb3V0OworCisJLyogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVhZCByZWdpc3RlciB3aXRob3V0IGRpc2FibGluZyBpbnRlcnJ1cHRzLiAqLworCWVycm9yID0gdHNjMjAwNV9yZWFkKHRzLCBUU0MyMDA1X1JFR19DRlIwLCAmcik7CisJaWYgKCFlcnJvciAmJgorCSAgICAhKChyIF4gVFNDMjAwNV9DRlIwX0lOSVRWQUxVRSkgJiBUU0MyMDA1X0NGUjBfUldfTUFTSykpIHsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBjb3VsZCBub3QgcmVhZCBvdXIga25vd24gdmFsdWUgZnJvbSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDAKKwkgKiB0aGVuIHdlIHNob3VsZCByZXNldCB0aGUgY29udHJvbGxlciBhcyBpZiBmcm9tIHBvd2VyLXVwIGFuZCBzdGFydAorCSAqIHNjYW5uaW5nIGFnYWluLgorCSAqLworCWRldl9pbmZvKCZ0cy0+c3BpLT5kZXYsICJUU0MyMDA1IG5vdCByZXNwb25kaW5nIC0gcmVzZXR0aW5nXG4iKTsKKworCWRpc2FibGVfaXJxKHRzLT5zcGktPmlycSk7CisJZGVsX3RpbWVyX3N5bmMoJnRzLT5wZW51cF90aW1lcik7CisKKwl0c2MyMDA1X3VwZGF0ZV9wZW5fc3RhdGUodHMsIDAsIDAsIDApOworCisJdHMtPnNldF9yZXNldChmYWxzZSk7CisJdXNsZWVwX3JhbmdlKDEwMCwgNTAwKTsgLyogb25seSAxMHVzIHJlcXVpcmVkICovCisJdHMtPnNldF9yZXNldCh0cnVlKTsKKworCWVuYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKKwl0c2MyMDA1X3N0YXJ0X3NjYW4odHMpOworCitvdXQ6CisJLyogcmUtYXJtIHRoZSB3YXRjaGRvZyAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHMtPmVzZF93b3JrLAorCQkJICAgICAgcm91bmRfamlmZmllcyhqaWZmaWVzICsKKwkJCQkJbXNlY3NfdG9famlmZmllcyh0cy0+ZXNkX3RpbWVvdXQpKSk7CisJbXV0ZXhfdW5sb2NrKCZ0cy0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHRzYzIwMDVfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgdHNjMjAwNSAqdHMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dCk7CisKKwltdXRleF9sb2NrKCZ0cy0+bXV0ZXgpOworCisJaWYgKCF0cy0+c3VzcGVuZGVkKQorCQlfX3RzYzIwMDVfZW5hYmxlKHRzKTsKKworCXRzLT5vcGVuZWQgPSB0cnVlOworCisJbXV0ZXhfdW5sb2NrKCZ0cy0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRzYzIwMDVfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IHRzYzIwMDUgKnRzID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOworCisJbXV0ZXhfbG9jaygmdHMtPm11dGV4KTsKKworCWlmICghdHMtPnN1c3BlbmRlZCkKKwkJX190c2MyMDA1X2Rpc2FibGUodHMpOworCisJdHMtPm9wZW5lZCA9IGZhbHNlOworCisJbXV0ZXhfdW5sb2NrKCZ0cy0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdHNjMjAwNV9zZXR1cF9zcGlfeGZlcihzdHJ1Y3QgdHNjMjAwNSAqdHMpCit7CisJdHNjMjAwNV9zZXR1cF9yZWFkKCZ0cy0+c3BpX3gsIFRTQzIwMDVfUkVHX1gsIGZhbHNlKTsKKwl0c2MyMDA1X3NldHVwX3JlYWQoJnRzLT5zcGlfeSwgVFNDMjAwNV9SRUdfWSwgZmFsc2UpOworCXRzYzIwMDVfc2V0dXBfcmVhZCgmdHMtPnNwaV96MSwgVFNDMjAwNV9SRUdfWjEsIGZhbHNlKTsKKwl0c2MyMDA1X3NldHVwX3JlYWQoJnRzLT5zcGlfejIsIFRTQzIwMDVfUkVHX1oyLCB0cnVlKTsKKworCXNwaV9tZXNzYWdlX2luaXQoJnRzLT5zcGlfcmVhZF9tc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0cy0+c3BpX3guc3BpX3hmZXIsICZ0cy0+c3BpX3JlYWRfbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdHMtPnNwaV95LnNwaV94ZmVyLCAmdHMtPnNwaV9yZWFkX21zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRzLT5zcGlfejEuc3BpX3hmZXIsICZ0cy0+c3BpX3JlYWRfbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdHMtPnNwaV96Mi5zcGlfeGZlciwgJnRzLT5zcGlfcmVhZF9tc2cpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0c2MyMDA1X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJY29uc3Qgc3RydWN0IHRzYzIwMDVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0c2MyMDA1ICp0czsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJdW5zaWduZWQgaW50IG1heF94LCBtYXhfeSwgbWF4X3A7CisJdW5zaWduZWQgaW50IGZ1ZGdlX3gsIGZ1ZGdlX3ksIGZ1ZGdlX3A7CisJaW50IGVycm9yOworCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKCZzcGktPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlmdWRnZV94CT0gcGRhdGEtPnRzX3hfZnVkZ2UJICAgPyA6IDQ7CisJZnVkZ2VfeQk9IHBkYXRhLT50c195X2Z1ZGdlCSAgID8gOiA4OworCWZ1ZGdlX3AJPSBwZGF0YS0+dHNfcHJlc3N1cmVfZnVkZ2UgPyA6IDI7CisJbWF4X3gJPSBwZGF0YS0+dHNfeF9tYXgJICAgPyA6IE1BWF8xMkJJVDsKKwltYXhfeQk9IHBkYXRhLT50c195X21heAkgICA/IDogTUFYXzEyQklUOworCW1heF9wCT0gcGRhdGEtPnRzX3ByZXNzdXJlX21heCAgID8gOiBNQVhfMTJCSVQ7CisKKwlpZiAoc3BpLT5pcnEgPD0gMCkgeworCQlkZXZfZGJnKCZzcGktPmRldiwgIm5vIGlycVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7CisJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKwlpZiAoIXNwaS0+bWF4X3NwZWVkX2h6KQorCQlzcGktPm1heF9zcGVlZF9oeiA9IFRTQzIwMDVfU1BJX01BWF9TUEVFRF9IWjsKKworCWVycm9yID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwl0cyA9IGt6YWxsb2Moc2l6ZW9mKCp0cyksIEdGUF9LRVJORUwpOworCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghdHMgfHwgIWlucHV0X2RldikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCXRzLT5zcGkgPSBzcGk7CisJdHMtPmlkZXYgPSBpbnB1dF9kZXY7CisKKwl0cy0+eF9wbGF0ZV9vaG0JPSBwZGF0YS0+dHNfeF9wbGF0ZV9vaG0JPyA6IDI4MDsKKwl0cy0+ZXNkX3RpbWVvdXQJPSBwZGF0YS0+ZXNkX3RpbWVvdXRfbXM7CisJdHMtPnNldF9yZXNldAk9IHBkYXRhLT5zZXRfcmVzZXQ7CisKKwltdXRleF9pbml0KCZ0cy0+bXV0ZXgpOworCisJc3Bpbl9sb2NrX2luaXQoJnRzLT5sb2NrKTsKKwlzZXR1cF90aW1lcigmdHMtPnBlbnVwX3RpbWVyLCB0c2MyMDA1X3BlbnVwX3RpbWVyLCAodW5zaWduZWQgbG9uZyl0cyk7CisKKwlJTklUX0RFTEFZRURfV09SSygmdHMtPmVzZF93b3JrLCB0c2MyMDA1X2VzZF93b3JrKTsKKworCXRzYzIwMDVfc2V0dXBfc3BpX3hmZXIodHMpOworCisJc25wcmludGYodHMtPnBoeXMsIHNpemVvZih0cy0+cGh5cyksCisJCSAiJXMvaW5wdXQtdHMiLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKKworCWlucHV0X2Rldi0+bmFtZSA9ICJUU0MyMDA1IHRvdWNoc2NyZWVuIjsKKwlpbnB1dF9kZXYtPnBoeXMgPSB0cy0+cGh5czsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfU1BJOworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0FCUykgfCBCSVQoRVZfS0VZKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fVE9VQ0gpXSA9IEJJVF9NQVNLKEJUTl9UT1VDSCk7CisKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAwLCBtYXhfeCwgZnVkZ2VfeCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgMCwgbWF4X3ksIGZ1ZGdlX3ksIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCAwLCBtYXhfcCwgZnVkZ2VfcCwgMCk7CisKKwlpbnB1dF9kZXYtPm9wZW4gPSB0c2MyMDA1X29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHRzYzIwMDVfY2xvc2U7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIHRzKTsKKworCS8qIEVuc3VyZSB0aGUgdG91Y2hzY3JlZW4gaXMgb2ZmICovCisJdHNjMjAwNV9zdG9wX3NjYW4odHMpOworCisJZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycShzcGktPmlycSwgTlVMTCwgdHNjMjAwNV9pcnFfdGhyZWFkLAorCQkJCSAgICAgSVJRRl9UUklHR0VSX1JJU0lORywgInRzYzIwMDUiLCB0cyk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxLCBlcnI6ICVkXG4iLCBlcnJvcik7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIHRzKTsKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3BpLT5kZXYua29iaiwgJnRzYzIwMDVfYXR0cl9ncm91cCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LAorCQkJIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlcywgZXJyOiAlZFxuIiwgZXJyb3IpOworCQlnb3RvIGVycl9jbGVhcl9kcnZkYXRhOworCX0KKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRzLT5pZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZSwgZXJyOiAlZFxuIiwgZXJyb3IpOworCQlnb3RvIGVycl9yZW1vdmVfc3lzZnM7CisJfQorCisJc2V0X2lycV93YWtlKHNwaS0+aXJxLCAxKTsKKwlyZXR1cm4gMDsKKworZXJyX3JlbW92ZV9zeXNmczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnNwaS0+ZGV2LmtvYmosICZ0c2MyMDA1X2F0dHJfZ3JvdXApOworZXJyX2NsZWFyX2RydmRhdGE6CisJc3BpX3NldF9kcnZkYXRhKHNwaSwgTlVMTCk7CisJZnJlZV9pcnEoc3BpLT5pcnEsIHRzKTsKK2Vycl9mcmVlX21lbToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKHRzKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRzYzIwMDVfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHRzYzIwMDUgKnRzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnRzLT5zcGktPmRldi5rb2JqLCAmdHNjMjAwNV9hdHRyX2dyb3VwKTsKKworCWZyZWVfaXJxKHRzLT5zcGktPmlycSwgdHMpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHRzLT5pZGV2KTsKKwlrZnJlZSh0cyk7CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCB0c2MyMDA1X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IHRzYzIwMDUgKnRzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwltdXRleF9sb2NrKCZ0cy0+bXV0ZXgpOworCisJaWYgKCF0cy0+c3VzcGVuZGVkICYmIHRzLT5vcGVuZWQpCisJCV9fdHNjMjAwNV9kaXNhYmxlKHRzKTsKKworCXRzLT5zdXNwZW5kZWQgPSB0cnVlOworCisJbXV0ZXhfdW5sb2NrKCZ0cy0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHNjMjAwNV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IHRzYzIwMDUgKnRzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwltdXRleF9sb2NrKCZ0cy0+bXV0ZXgpOworCisJaWYgKHRzLT5zdXNwZW5kZWQgJiYgdHMtPm9wZW5lZCkKKwkJX190c2MyMDA1X2VuYWJsZSh0cyk7CisKKwl0cy0+c3VzcGVuZGVkID0gZmFsc2U7CisKKwltdXRleF91bmxvY2soJnRzLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModHNjMjAwNV9wbV9vcHMsIHRzYzIwMDVfc3VzcGVuZCwgdHNjMjAwNV9yZXN1bWUpOworCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgdHNjMjAwNV9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAidHNjMjAwNSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0JPSAmdHNjMjAwNV9wbV9vcHMsCisJfSwKKwkucHJvYmUJPSB0c2MyMDA1X3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcCh0c2MyMDA1X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0c2MyMDA1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmdHNjMjAwNV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQodHNjMjAwNV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHRzYzIwMDVfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmdHNjMjAwNV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodHNjMjAwNV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGF1cmkgTGV1a2t1bmVuIDxsYXVyaS5sZXVra3VuZW5Abm9raWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUU0MyMDA1IFRvdWNoc2NyZWVuIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTgzMXgtdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd204MzF4LXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMDU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd204MzF4LXRzLmMKQEAgLTAsMCArMSwzNjggQEAKKy8qCisgKiBUb3VjaHNjcmVlbiBkcml2ZXIgZm9yIFdNODMxeCBQTUlDcworICoKKyAqIENvcHlyaWdodCAyMDExIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMuCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogUjE2NDI0ICgweDQwMjgpIC0gVG91Y2ggQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004MzFYX1RDSF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogVENIX0VOQSAqLworI2RlZmluZSBXTTgzMVhfVENIX0NWVF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUQ0hfQ1ZUX0VOQSAqLworI2RlZmluZSBXTTgzMVhfVENIX1NMUEVOQSAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBUQ0hfU0xQRU5BICovCisjZGVmaW5lIFdNODMxWF9UQ0hfWl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIFRDSF9aX0VOQSAqLworI2RlZmluZSBXTTgzMVhfVENIX1lfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBUQ0hfWV9FTkEgKi8KKyNkZWZpbmUgV004MzFYX1RDSF9YX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogVENIX1hfRU5BICovCisjZGVmaW5lIFdNODMxWF9UQ0hfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRTAgIC8qIFRDSF9ERUxBWSAtIFs3OjVdICovCisjZGVmaW5lIFdNODMxWF9UQ0hfREVMQVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFRDSF9ERUxBWSAtIFs3OjVdICovCisjZGVmaW5lIFdNODMxWF9UQ0hfREVMQVlfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFRDSF9ERUxBWSAtIFs3OjVdICovCisjZGVmaW5lIFdNODMxWF9UQ0hfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIFRDSF9SQVRFIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004MzFYX1RDSF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVENIX1JBVEUgLSBbNDowXSAqLworI2RlZmluZSBXTTgzMVhfVENIX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBUQ0hfUkFURSAtIFs0OjBdICovCisKKy8qCisgKiBSMTY0MjUgKDB4NDAyOSkgLSBUb3VjaCBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTgzMVhfVENIX1BEX1dLICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBUQ0hfUERfV0sgKi8KKyNkZWZpbmUgV004MzFYX1RDSF81V0lSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogVENIXzVXSVJFICovCisjZGVmaW5lIFdNODMxWF9UQ0hfUERPTkxZICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRDSF9QRE9OTFkgKi8KKyNkZWZpbmUgV004MzFYX1RDSF9JU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogVENIX0lTRUwgKi8KKyNkZWZpbmUgV004MzFYX1RDSF9SUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogVENIX1JQVSAtIFszOjBdICovCisjZGVmaW5lIFdNODMxWF9UQ0hfUlBVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFRDSF9SUFUgLSBbMzowXSAqLworI2RlZmluZSBXTTgzMVhfVENIX1JQVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBUQ0hfUlBVIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNjQyNi04ICgweDQwMkEtQykgLSBUb3VjaCBEYXRhIFgvWS9YCisgKi8KKyNkZWZpbmUgV004MzFYX1RDSF9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogVENIX1BEMSAqLworI2RlZmluZSBXTTgzMVhfVENIX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwRkZGICAvKiBUQ0hfREFUQSAtIFsxMTowXSAqLworI2RlZmluZSBXTTgzMVhfVENIX0RBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBUQ0hfREFUQSAtIFsxMTowXSAqLworI2RlZmluZSBXTTgzMVhfVENIX0RBVEFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBUQ0hfREFUQSAtIFsxMTowXSAqLworCitzdHJ1Y3Qgd204MzF4X3RzIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHdtODMxeCAqd204MzF4OworCXVuc2lnbmVkIGludCBkYXRhX2lycTsKKwl1bnNpZ25lZCBpbnQgcGRfaXJxOworCWJvb2wgcHJlc3N1cmU7CisJYm9vbCBwZW5fZG93bjsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfdHNfZGF0YV9pcnEoaW50IGlycSwgdm9pZCAqaXJxX2RhdGEpCit7CisJc3RydWN0IHdtODMxeF90cyAqd204MzF4X3RzID0gaXJxX2RhdGE7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gd204MzF4X3RzLT53bTgzMXg7CisJc3RhdGljIGludCBkYXRhX3R5cGVzW10gPSB7IEFCU19YLCBBQlNfWSwgQUJTX1BSRVNTVVJFIH07CisJdTE2IGRhdGFbM107CisJaW50IGNvdW50OworCWludCBpLCByZXQ7CisKKwlpZiAod204MzF4X3RzLT5wcmVzc3VyZSkKKwkJY291bnQgPSAzOworCWVsc2UKKwkJY291bnQgPSAyOworCisJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0lOVEVSUlVQVF9TVEFUVVNfMSwKKwkJCVdNODMxWF9UQ0hEQVRBX0VJTlQsIFdNODMxWF9UQ0hEQVRBX0VJTlQpOworCisJcmV0ID0gd204MzF4X2J1bGtfcmVhZCh3bTgzMXgsIFdNODMxWF9UT1VDSF9EQVRBX1gsIGNvdW50LAorCQkJICAgICAgIGRhdGEpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgdG91Y2ggZGF0YTogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJLyoKKwkgKiBXZSBnZXQgYSBwZW4gZG93biByZWFkaW5nIG9uIGV2ZXJ5IHJlYWRpbmcsIHJlcG9ydCBwZW4gdXAgaWYgYW55CisJICogaW5kaXZpZHVhbCByZWFkaW5nIGRvZXMgc28uCisJICovCisJd204MzF4X3RzLT5wZW5fZG93biA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKCEoZGF0YVtpXSAmIFdNODMxWF9UQ0hfUEQpKSB7CisJCQl3bTgzMXhfdHMtPnBlbl9kb3duID0gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCQlpbnB1dF9yZXBvcnRfYWJzKHdtODMxeF90cy0+aW5wdXRfZGV2LCBkYXRhX3R5cGVzW2ldLAorCQkJCSBkYXRhW2ldICYgV004MzFYX1RDSF9EQVRBX01BU0spOworCX0KKworCWlmICghd204MzF4X3RzLT5wZW5fZG93bikgeworCQlkaXNhYmxlX2lycV9ub3N5bmMod204MzF4X3RzLT5kYXRhX2lycSk7CisKKwkJLyogRG9uJ3QgbmVlZCBkYXRhIGFueSBtb3JlICovCisJCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9UT1VDSF9DT05UUk9MXzEsCisJCQkJV004MzFYX1RDSF9YX0VOQSB8IFdNODMxWF9UQ0hfWV9FTkEgfAorCQkJCVdNODMxWF9UQ0hfWl9FTkEsIDApOworCisJCS8qIEZsdXNoIGFueSBmaW5hbCBzYW1wbGVzIHRoYXQgYXJyaXZlZCB3aGlsZSByZWFkaW5nICovCisJCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9JTlRFUlJVUFRfU1RBVFVTXzEsCisJCQkJV004MzFYX1RDSERBVEFfRUlOVCwgV004MzFYX1RDSERBVEFfRUlOVCk7CisKKwkJd204MzF4X2J1bGtfcmVhZCh3bTgzMXgsIFdNODMxWF9UT1VDSF9EQVRBX1gsIGNvdW50LCBkYXRhKTsKKworCQlpZiAod204MzF4X3RzLT5wcmVzc3VyZSkKKwkJCWlucHV0X3JlcG9ydF9hYnMod204MzF4X3RzLT5pbnB1dF9kZXYsCisJCQkJCSBBQlNfUFJFU1NVUkUsIDApOworCisJCWlucHV0X3JlcG9ydF9rZXkod204MzF4X3RzLT5pbnB1dF9kZXYsIEJUTl9UT1VDSCwgMCk7CisJfQorCisJaW5wdXRfc3luYyh3bTgzMXhfdHMtPmlucHV0X2Rldik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfdHNfcGVuX2Rvd25faXJxKGludCBpcnEsIHZvaWQgKmlycV9kYXRhKQoreworCXN0cnVjdCB3bTgzMXhfdHMgKndtODMxeF90cyA9IGlycV9kYXRhOworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF90cy0+d204MzF4OworCWludCBlbmEgPSAwOworCisJLyogU3RhcnQgY29sbGVjdGluZyBkYXRhICovCisJaWYgKHdtODMxeF90cy0+cHJlc3N1cmUpCisJCWVuYSB8PSBXTTgzMVhfVENIX1pfRU5BOworCisJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX1RPVUNIX0NPTlRST0xfMSwKKwkJCVdNODMxWF9UQ0hfWF9FTkEgfCBXTTgzMVhfVENIX1lfRU5BIHwgV004MzFYX1RDSF9aX0VOQSwKKwkJCVdNODMxWF9UQ0hfWF9FTkEgfCBXTTgzMVhfVENIX1lfRU5BIHwgZW5hKTsKKworCWlucHV0X3JlcG9ydF9rZXkod204MzF4X3RzLT5pbnB1dF9kZXYsIEJUTl9UT1VDSCwgMSk7CisJaW5wdXRfc3luYyh3bTgzMXhfdHMtPmlucHV0X2Rldik7CisKKwl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfSU5URVJSVVBUX1NUQVRVU18xLAorCQkJV004MzFYX1RDSFBEX0VJTlQsIFdNODMxWF9UQ0hQRF9FSU5UKTsKKworCXdtODMxeF90cy0+cGVuX2Rvd24gPSB0cnVlOworCWVuYWJsZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X3RzX2lucHV0X29wZW4oc3RydWN0IGlucHV0X2RldiAqaWRldikKK3sKKwlzdHJ1Y3Qgd204MzF4X3RzICp3bTgzMXhfdHMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfdHMtPndtODMxeDsKKworCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9UT1VDSF9DT05UUk9MXzEsCisJCQlXTTgzMVhfVENIX0VOQSB8IFdNODMxWF9UQ0hfQ1ZUX0VOQSB8CisJCQlXTTgzMVhfVENIX1hfRU5BIHwgV004MzFYX1RDSF9ZX0VOQSB8CisJCQlXTTgzMVhfVENIX1pfRU5BLCBXTTgzMVhfVENIX0VOQSk7CisKKwl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfVE9VQ0hfQ09OVFJPTF8xLAorCQkJV004MzFYX1RDSF9DVlRfRU5BLCBXTTgzMVhfVENIX0NWVF9FTkEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODMxeF90c19pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2KQoreworCXN0cnVjdCB3bTgzMXhfdHMgKndtODMxeF90cyA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF90cy0+d204MzF4OworCisJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX1RPVUNIX0NPTlRST0xfMSwKKwkJCVdNODMxWF9UQ0hfRU5BIHwgV004MzFYX1RDSF9DVlRfRU5BIHwKKwkJCVdNODMxWF9UQ0hfWF9FTkEgfCBXTTgzMVhfVENIX1lfRU5BIHwKKwkJCVdNODMxWF9UQ0hfWl9FTkEsIDApOworCisJaWYgKHdtODMxeF90cy0+cGVuX2Rvd24pCisJCWRpc2FibGVfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEpOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCB3bTgzMXhfdHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzF4X3RzICp3bTgzMXhfdHM7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXhfcGRhdGEgKmNvcmVfcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXhfdG91Y2hfcGRhdGEgKnBkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGVycm9yOworCisJaWYgKGNvcmVfcGRhdGEpCisJCXBkYXRhID0gY29yZV9wZGF0YS0+dG91Y2g7CisKKwl3bTgzMXhfdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204MzF4X3RzKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF3bTgzMXhfdHMgfHwgIWlucHV0X2RldikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jOworCX0KKworCXdtODMxeF90cy0+d204MzF4ID0gd204MzF4OworCXdtODMxeF90cy0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgZGlyZWN0IElSUSB1c2UgaXQsIG90aGVyd2lzZSB1c2UgdGhlIGludGVycnVwdAorCSAqIGZyb20gdGhlIFdNODMxeCBJUlEgY29udHJvbGxlci4KKwkgKi8KKwlpZiAocGRhdGEgJiYgcGRhdGEtPmRhdGFfaXJxKQorCQl3bTgzMXhfdHMtPmRhdGFfaXJxID0gcGRhdGEtPmRhdGFfaXJxOworCWVsc2UKKwkJd204MzF4X3RzLT5kYXRhX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJUQ0hEQVRBIik7CisKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnBkX2lycSkKKwkJd204MzF4X3RzLT5wZF9pcnEgPSBwZGF0YS0+cGRfaXJxOworCWVsc2UKKwkJd204MzF4X3RzLT5wZF9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiVENIUEQiKTsKKworCWlmIChwZGF0YSkKKwkJd204MzF4X3RzLT5wcmVzc3VyZSA9IHBkYXRhLT5wcmVzc3VyZTsKKwllbHNlCisJCXdtODMxeF90cy0+cHJlc3N1cmUgPSB0cnVlOworCisJLyogRml2ZSB3aXJlIHRvdWNoc2NyZWVucyBjYW4ndCByZXBvcnQgcHJlc3N1cmUgKi8KKwlpZiAocGRhdGEgJiYgcGRhdGEtPmZpdmV3aXJlKSB7CisJCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9UT1VDSF9DT05UUk9MXzIsCisJCQkJV004MzFYX1RDSF81V0lSRSwgV004MzFYX1RDSF81V0lSRSk7CisKKwkJLyogUHJlc3N1cmUgbWVhc3VyZW1lbnRzIGFyZSBub3QgcG9zc2libGUgZm9yIGZpdmUgd2lyZSBtb2RlICovCisJCVdBUk5fT04ocGRhdGEtPnByZXNzdXJlICYmIHBkYXRhLT5maXZld2lyZSk7CisJCXdtODMxeF90cy0+cHJlc3N1cmUgPSBmYWxzZTsKKwl9IGVsc2UgeworCQl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfVE9VQ0hfQ09OVFJPTF8yLAorCQkJCVdNODMxWF9UQ0hfNVdJUkUsIDApOworCX0KKworCWlmIChwZGF0YSkgeworCQlzd2l0Y2ggKHBkYXRhLT5pc2VsKSB7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBJU0VMIHNldHRpbmc6ICVkXG4iLAorCQkJCXBkYXRhLT5pc2VsKTsKKwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIDIwMDoKKwkJY2FzZSAwOgorCQkJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX1RPVUNIX0NPTlRST0xfMiwKKwkJCQkJV004MzFYX1RDSF9JU0VMLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDQwMDoKKwkJCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9UT1VDSF9DT05UUk9MXzIsCisJCQkJCVdNODMxWF9UQ0hfSVNFTCwgV004MzFYX1RDSF9JU0VMKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX1RPVUNIX0NPTlRST0xfMiwKKwkJCVdNODMxWF9UQ0hfUERPTkxZLCAwKTsKKworCS8qIERlZmF1bHQgdG8gOTYgc2FtcGxlcy9zZWMgKi8KKwl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfVE9VQ0hfQ09OVFJPTF8xLAorCQkJV004MzFYX1RDSF9SQVRFX01BU0ssIDYpOworCisJZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxLAorCQkJCSAgICAgTlVMTCwgd204MzF4X3RzX2RhdGFfaXJxLAorCQkJCSAgICAgSVJRRl9PTkVTSE9ULAorCQkJCSAgICAgIlRvdWNoc2NyZWVuIGRhdGEiLCB3bTgzMXhfdHMpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBkYXRhIElSUSAlZDogJWRcbiIsCisJCQl3bTgzMXhfdHMtPmRhdGFfaXJxLCBlcnJvcik7CisJCWdvdG8gZXJyX2FsbG9jOworCX0KKwlkaXNhYmxlX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxKTsKKworCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod204MzF4X3RzLT5wZF9pcnEsCisJCQkJICAgICBOVUxMLCB3bTgzMXhfdHNfcGVuX2Rvd25faXJxLAorCQkJCSAgICAgSVJRRl9PTkVTSE9ULAorCQkJCSAgICAgIlRvdWNoc2NyZWVuIHBlbiBkb3duIiwgd204MzF4X3RzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcGVuIGRvd24gSVJRICVkOiAlZFxuIiwKKwkJCXdtODMxeF90cy0+cGRfaXJxLCBlcnJvcik7CisJCWdvdG8gZXJyX2RhdGFfaXJxOworCX0KKworCS8qIHNldCB1cCB0b3VjaCBjb25maWd1cmF0aW9uICovCisJaW5wdXRfZGV2LT5uYW1lID0gIldNODMxeCB0b3VjaHNjcmVlbiI7CisJaW5wdXRfZGV2LT5waHlzID0gIndtODMxeCI7CisJaW5wdXRfZGV2LT5vcGVuID0gd204MzF4X3RzX2lucHV0X29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHdtODMxeF90c19pbnB1dF9jbG9zZTsKKworCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0X2Rldi0+ZXZiaXQpOworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0X2Rldi0+ZXZiaXQpOworCV9fc2V0X2JpdChCVE5fVE9VQ0gsIGlucHV0X2Rldi0+a2V5Yml0KTsKKworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIDAsIDQwOTUsIDUsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDAsIDQwOTUsIDUsIDApOworCWlmICh3bTgzMXhfdHMtPnByZXNzdXJlKQorCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgMCwgNDA5NSwgNSwgMCk7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIHdtODMxeF90cyk7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9wZF9pcnE7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3bTgzMXhfdHMpOworCXJldHVybiAwOworCitlcnJfcGRfaXJxOgorCWZyZWVfaXJxKHdtODMxeF90cy0+cGRfaXJxLCB3bTgzMXhfdHMpOworZXJyX2RhdGFfaXJxOgorCWZyZWVfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEsIHdtODMxeF90cyk7CitlcnJfYWxsb2M6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZSh3bTgzMXhfdHMpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTgzMXhfdHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeF90cyAqd204MzF4X3RzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlmcmVlX2lycSh3bTgzMXhfdHMtPnBkX2lycSwgd204MzF4X3RzKTsKKwlmcmVlX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxLCB3bTgzMXhfdHMpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHdtODMxeF90cy0+aW5wdXRfZGV2KTsKKwlrZnJlZSh3bTgzMXhfdHMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODMxeF90c19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204MzF4LXRvdWNoIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTgzMXhfdHNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODMxeF90c19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204MzF4X3RzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzMXhfdHNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODMxeF90c19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODMxeF90c19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODMxeF90c19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzF4X3RzX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTgzMXggUE1JQyB0b3VjaHNjcmVlbiBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204MzF4LXRvdWNoIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvTWFrZWZpbGUgYi9kcml2ZXJzL2lzZG4vaGlzYXgvTWFrZWZpbGUKaW5kZXggYWI2MzhiMDguLjY0NjM2OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKICMgRGVmaW5lIG1heGltdW0gbnVtYmVyIG9mIGNhcmRzCiAKLUVYVFJBX0NGTEFHUyAgICAgICs9IC1ESElTQVhfTUFYX0NBUkRTPSQoQ09ORklHX0hJU0FYX01BWF9DQVJEUykKK2NjZmxhZ3MteSAgICAgIDo9IC1ESElTQVhfTUFYX0NBUkRTPSQoQ09ORklHX0hJU0FYX01BWF9DQVJEUykKIAogb2JqLSQoQ09ORklHX0lTRE5fRFJWX0hJU0FYKQkJKz0gaGlzYXgubwogb2JqLSQoQ09ORklHX0hJU0FYX1NFRExCQVVFUl9DUykJKz0gc2VkbGJhdWVyX2NzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9od2NoYW5uZWwuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9od2NoYW5uZWwuYwppbmRleCAxOTlmMzc0Li5mNmUxMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vaHdjaGFubmVsLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2h3Y2hhbm5lbC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAloaC0+aWQgPSBpZDsKIAlpZiAoYmNoLT5yY291bnQgPj0gNjQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQi1jaGFubmVsICVwIHJlY2VpdmUgcXVldWUgb3ZlcmZsb3csICIKLQkJCSJmdXNoaW5nIVxuIiwgYmNoKTsKKwkJCSJmbHVzaGluZyFcbiIsIGJjaCk7CiAJCXNrYl9xdWV1ZV9wdXJnZSgmYmNoLT5ycXVldWUpOwogCQliY2gtPnJjb3VudCA9IDA7CiAJCXJldHVybjsKQEAgLTIzMSw3ICsyMzEsNyBAQAogewogCWlmIChiY2gtPnJjb3VudCA+PSA2NCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJCLWNoYW5uZWwgJXAgcmVjZWl2ZSBxdWV1ZSBvdmVyZmxvdywgIgotCQkJImZ1c2hpbmchXG4iLCBiY2gpOworCQkJImZsdXNoaW5nIVxuIiwgYmNoKTsKIAkJc2tiX3F1ZXVlX3B1cmdlKCZiY2gtPnJxdWV1ZSk7CiAJCWJjaC0+cmNvdW50ID0gMDsKIAl9CkBAIC0yNzksNyArMjc5LDcgQEAKIAogCWlmIChiY2gtPnJjb3VudCA+PSA2NCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJCLWNoYW5uZWwgJXAgcmVjZWl2ZSBxdWV1ZSBvdmVyZmxvdywgIgotCQkJImZ1c2hpbmchXG4iLCBiY2gpOworCQkJImZsdXNoaW5nIVxuIiwgYmNoKTsKIAkJc2tiX3F1ZXVlX3B1cmdlKCZiY2gtPnJxdWV1ZSk7CiAJCWJjaC0+cmNvdW50ID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IDZmMTkwZjQuLjliZWM4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0zNCw2ICszNCwxNiBAQAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGRyaXZlbiB1c2luZyBvdXRwdXRzCiAJICBvZiB0aGUgZGVkaWNhdGVkIFBXTSBjb250cm9sbGVyIGZvdW5kIG9uIG5ld2VyIEF0bWVsIFNPQ3MuCiAKK2NvbmZpZyBMRURTX0xNMzUzMAorCXRyaXN0YXRlICJMQ0QgQmFja2xpZ2h0IGRyaXZlciBmb3IgTE0zNTMwIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUworCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTENEIGJhY2tsaWdodCB1c2luZworCSAgTE0zNTMwIGFtYmllbnQgbGlnaHQgc2Vuc29yIGNoaXAuIFRoaXMgQUxTIGNoaXAgY2FuIGJlCisJICBjb250cm9sbGVkIG1hbnVhbGx5IG9yIHVzaW5nIFBXTSBpbnB1dCBvciB1c2luZyBhbWJpZW50CisJICBsaWdodCBhdXRvbWF0aWNhbGx5LgorCiBjb25maWcgTEVEU19MT0NPTU8KIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIExvY29tbyBkZXZpY2UiCiAJZGVwZW5kcyBvbiBMRURTX0NMQVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKaW5kZXggYWFlNjk4OS4uMzljODBmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIG9iai0kKENPTkZJR19MRURTX0FUTUVMX1BXTSkJCSs9IGxlZHMtYXRtZWwtcHdtLm8KIG9iai0kKENPTkZJR19MRURTX0JEMjgwMikJCSs9IGxlZHMtYmQyODAyLm8KIG9iai0kKENPTkZJR19MRURTX0xPQ09NTykJCSs9IGxlZHMtbG9jb21vLm8KK29iai0kKENPTkZJR19MRURTX0xNMzUzMCkJCSs9IGxlZHMtbG0zNTMwLm8KIG9iai0kKENPTkZJR19MRURTX01JS1JPVElLX1JCNTMyKQkrPSBsZWRzLXJiNTMyLm8KIG9iai0kKENPTkZJR19MRURTX1MzQzI0WFgpCQkrPSBsZWRzLXMzYzI0eHgubwogb2JqLSQoQ09ORklHX0xFRFNfQU1TX0RFTFRBKQkJKz0gbGVkcy1hbXMtZGVsdGEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtYmQyODAyLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYwppbmRleCAxOWRjNGI2Li4zZWJlMzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLWJkMjgwMi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNkZWZpbmUgTEVEX0NUTChyZ2IyZW4sIHJnYjFlbikgKChyZ2IyZW4pIDw8IDQgfCAoKHJnYjFlbikgPDwgMCkpCiAKQEAgLTMxOSwyMCArMzE5LDYgQEAKIAliZDI4MDJfdXBkYXRlX3N0YXRlKGxlZCwgaWQsIGNvbG9yLCBCRDI4MDJfT0ZGKTsKIH0KIAotc3RhdGljIHZvaWQgYmQyODAyX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGJkMjgwMl9sZWQgKmxlZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBMRURfTlVNOyBpKyspIHsKLQkJaWYgKGxlZC0+bGVkW2ldLnIpCi0JCQliZDI4MDJfdHVybl9vbihsZWQsIGksIFJFRCwgbGVkLT5sZWRbaV0ucik7Ci0JCWlmIChsZWQtPmxlZFtpXS5nKQotCQkJYmQyODAyX3R1cm5fb24obGVkLCBpLCBHUkVFTiwgbGVkLT5sZWRbaV0uZyk7Ci0JCWlmIChsZWQtPmxlZFtpXS5iKQotCQkJYmQyODAyX3R1cm5fb24obGVkLCBpLCBCTFVFLCBsZWQtPmxlZFtpXS5iKTsKLQl9Ci19Ci0KICNkZWZpbmUgQkQyODAyX1NFVF9SRUdJU1RFUihyZWdfYWRkciwgcmVnX25hbWUpCQkJCVwKIHN0YXRpYyBzc2l6ZV90IGJkMjgwMl9zdG9yZV9yZWcjI3JlZ19hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwJCVwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKQEAgLTc2MSw4ICs3NDcsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZDI4MDJfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIHZvaWQgYmQyODAyX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGJkMjgwMl9sZWQgKmxlZCkKIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMRURfTlVNOyBpKyspIHsKKwkJaWYgKGxlZC0+bGVkW2ldLnIpCisJCQliZDI4MDJfdHVybl9vbihsZWQsIGksIFJFRCwgbGVkLT5sZWRbaV0ucik7CisJCWlmIChsZWQtPmxlZFtpXS5nKQorCQkJYmQyODAyX3R1cm5fb24obGVkLCBpLCBHUkVFTiwgbGVkLT5sZWRbaV0uZyk7CisJCWlmIChsZWQtPmxlZFtpXS5iKQorCQkJYmQyODAyX3R1cm5fb24obGVkLCBpLCBCTFVFLCBsZWQtPmxlZFtpXS5iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYmQyODAyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGJkMjgwMl9sZWQgKmxlZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJZ3Bpb19zZXRfdmFsdWUobGVkLT5wZGF0YS0+cmVzZXRfZ3BpbywgMCk7CkBAIC03NzAsOCArNzczLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZDI4MDJfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGJkMjgwMl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGJkMjgwMl9sZWQgKmxlZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJaWYgKCFiZDI4MDJfaXNfYWxsX29mZihsZWQpIHx8IGxlZC0+YWRmX29uKSB7CkBAIC03ODIsNiArNzg2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhiZDI4MDJfcG0sIGJkMjgwMl9zdXNwZW5kLCBiZDI4MDJfcmVzdW1lKTsKKyNkZWZpbmUgQkQyODAyX1BNICgmYmQyODAyX3BtKQorI2Vsc2UJCS8qIENPTkZJR19QTSAqLworI2RlZmluZSBCRDI4MDJfUE0gTlVMTAorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBiZDI4MDJfaWRbXSA9IHsKIAl7ICJCRDI4MDIiLCAwIH0sCiAJeyB9CkBAIC03OTEsMTEgKzgwMSwxMCBAQAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGJkMjgwMl9pMmNfZHJpdmVyID0gewogCS5kcml2ZXIJPSB7CiAJCS5uYW1lCT0gIkJEMjgwMiIsCisJCS5wbQk9IEJEMjgwMl9QTSwKIAl9LAogCS5wcm9iZQkJPSBiZDI4MDJfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2V4aXRfcChiZDI4MDJfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGJkMjgwMl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gYmQyODAyX3Jlc3VtZSwKIAkuaWRfdGFibGUJPSBiZDI4MDJfaWQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1sbTM1MzAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxtMzUzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDg5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1sbTM1MzAuYwpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTVC1Fcmljc3NvbiBTQS4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNb3Rvcm9sYSwgSW5jLgorICoKKyAqIExpY2Vuc2UgVGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCisgKgorICogU2ltcGxlIGRyaXZlciBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTM1MzAgQmFja2xpZ2h0IGRyaXZlciBjaGlwCisgKgorICogQXV0aG9yOiBTaHJlc2h0aGEgS3VtYXIgU0FIVSA8c2hyZXNodGhha3VtYXIuc2FodUBzdGVyaWNzc29uLmNvbT4KKyAqIGJhc2VkIG9uIGxlZHMtbG0zNTMwLmMgYnkgRGFuIE11cnBoeSA8RC5NdXJwaHlAbW90b3JvbGEuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkLWxtMzUzMC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTE0zNTMwX0xFRF9ERVYgImxjZC1iYWNrbGlnaHQiCisjZGVmaW5lIExNMzUzMF9OQU1FICJsbTM1MzAtbGVkIgorCisjZGVmaW5lIExNMzUzMF9HRU5fQ09ORklHCQkweDEwCisjZGVmaW5lIExNMzUzMF9BTFNfQ09ORklHCQkweDIwCisjZGVmaW5lIExNMzUzMF9CUlRfUkFNUF9SQVRFCQkweDMwCisjZGVmaW5lIExNMzUzMF9BTFNfWk9ORV9SRUcJCTB4NDAKKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBfU0VMRUNUCQkweDQxCisjZGVmaW5lIExNMzUzMF9CUlRfQ1RSTF9SRUcJCTB4QTAKKyNkZWZpbmUgTE0zNTMwX0FMU19aQjBfUkVHCQkweDYwCisjZGVmaW5lIExNMzUzMF9BTFNfWkIxX1JFRwkJMHg2MQorI2RlZmluZSBMTTM1MzBfQUxTX1pCMl9SRUcJCTB4NjIKKyNkZWZpbmUgTE0zNTMwX0FMU19aQjNfUkVHCQkweDYzCisjZGVmaW5lIExNMzUzMF9BTFNfWjBUX1JFRwkJMHg3MAorI2RlZmluZSBMTTM1MzBfQUxTX1oxVF9SRUcJCTB4NzEKKyNkZWZpbmUgTE0zNTMwX0FMU19aMlRfUkVHCQkweDcyCisjZGVmaW5lIExNMzUzMF9BTFNfWjNUX1JFRwkJMHg3MworI2RlZmluZSBMTTM1MzBfQUxTX1o0VF9SRUcJCTB4NzQKKyNkZWZpbmUgTE0zNTMwX1JFR19NQVgJCQkxNQorCisvKiBHZW5lcmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTE0zNTMwX0VOX0kyQ19TSElGVAkJKDApCisjZGVmaW5lIExNMzUzMF9SQU1QX0xBV19TSElGVAkJKDEpCisjZGVmaW5lIExNMzUzMF9NQVhfQ1VSUl9TSElGVAkJKDIpCisjZGVmaW5lIExNMzUzMF9FTl9QV01fU0hJRlQJCSg1KQorI2RlZmluZSBMTTM1MzBfUFdNX1BPTF9TSElGVAkJKDYpCisjZGVmaW5lIExNMzUzMF9FTl9QV01fU0lNUExFX1NISUZUCSg3KQorCisjZGVmaW5lIExNMzUzMF9FTkFCTEVfSTJDCQkoMSA8PCBMTTM1MzBfRU5fSTJDX1NISUZUKQorI2RlZmluZSBMTTM1MzBfRU5BQkxFX1BXTQkJKDEgPDwgTE0zNTMwX0VOX1BXTV9TSElGVCkKKyNkZWZpbmUgTE0zNTMwX1BPTF9MT1cJCQkoMSA8PCBMTTM1MzBfUFdNX1BPTF9TSElGVCkKKyNkZWZpbmUgTE0zNTMwX0VOQUJMRV9QV01fU0lNUExFCSgxIDw8IExNMzUzMF9FTl9QV01fU0lNUExFX1NISUZUKQorCisvKiBBTFMgQ29uZmlnIFJlZ2lzdGVyIE9wdGlvbnMgKi8KKyNkZWZpbmUgTE0zNTMwX0FMU19BVkdfVElNRV9TSElGVAkoMCkKKyNkZWZpbmUgTE0zNTMwX0VOX0FMU19TSElGVAkJKDMpCisjZGVmaW5lIExNMzUzMF9BTFNfU0VMX1NISUZUCQkoNSkKKworI2RlZmluZSBMTTM1MzBfRU5BQkxFX0FMUwkJKDMgPDwgTE0zNTMwX0VOX0FMU19TSElGVCkKKworLyogQnJpZ2h0bmVzcyBSYW1wIFJhdGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTE0zNTMwX0JSVF9SQU1QX0ZBTExfU0hJRlQJKDApCisjZGVmaW5lIExNMzUzMF9CUlRfUkFNUF9SSVNFX1NISUZUCSgzKQorCisvKiBBTFMgUmVzaXN0b3IgU2VsZWN0ICovCisjZGVmaW5lIExNMzUzMF9BTFMxX0lNUF9TSElGVAkJKDApCisjZGVmaW5lIExNMzUzMF9BTFMyX0lNUF9TSElGVAkJKDQpCisKKy8qIFpvbmUgQm91bmRhcnkgUmVnaXN0ZXIgZGVmYXVsdHMgKi8KKyNkZWZpbmUgTE0zNTMwX0RFRl9aQl8wCQkJKDB4MzMpCisjZGVmaW5lIExNMzUzMF9ERUZfWkJfMQkJCSgweDY2KQorI2RlZmluZSBMTTM1MzBfREVGX1pCXzIJCQkoMHg5OSkKKyNkZWZpbmUgTE0zNTMwX0RFRl9aQl8zCQkJKDB4Q0MpCisKKy8qIFpvbmUgVGFyZ2V0IFJlZ2lzdGVyIGRlZmF1bHRzICovCisjZGVmaW5lIExNMzUzMF9ERUZfWlRfMAkJCSgweDE5KQorI2RlZmluZSBMTTM1MzBfREVGX1pUXzEJCQkoMHgzMykKKyNkZWZpbmUgTE0zNTMwX0RFRl9aVF8yCQkJKDB4NEMpCisjZGVmaW5lIExNMzUzMF9ERUZfWlRfMwkJCSgweDY2KQorI2RlZmluZSBMTTM1MzBfREVGX1pUXzQJCQkoMHg3RikKKworc3RydWN0IGxtMzUzMF9tb2RlX21hcCB7CisJY29uc3QgY2hhciAqbW9kZTsKKwllbnVtIGxtMzUzMF9tb2RlIG1vZGVfdmFsOworfTsKKworc3RhdGljIHN0cnVjdCBsbTM1MzBfbW9kZV9tYXAgbW9kZV9tYXBbXSA9IHsKKwl7ICJtYW4iLCBMTTM1MzBfQkxfTU9ERV9NQU5VQUwgfSwKKwl7ICJhbHMiLCBMTTM1MzBfQkxfTU9ERV9BTFMgfSwKKwl7ICJwd20iLCBMTTM1MzBfQkxfTU9ERV9QV00gfSwKK307CisKKy8qKgorICogc3RydWN0IGxtMzUzMF9kYXRhCisgKiBAbGVkX2RldjogbGVkIGNsYXNzIGRldmljZQorICogQGNsaWVudDogaTJjIGNsaWVudAorICogQHBkYXRhOiBMTTM1MzAgcGxhdGZvcm0gZGF0YQorICogQG1vZGU6IG1vZGUgb2Ygb3BlcmF0aW9uIC0gbWFudWFsLCBBTFMsIFBXTQorICovCitzdHJ1Y3QgbG0zNTMwX2RhdGEgeworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2RldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBsbTM1MzBfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJZW51bSBsbTM1MzBfbW9kZSBtb2RlOworfTsKKworc3RhdGljIGNvbnN0IHU4IGxtMzUzMF9yZWdbTE0zNTMwX1JFR19NQVhdID0geworCUxNMzUzMF9HRU5fQ09ORklHLAorCUxNMzUzMF9BTFNfQ09ORklHLAorCUxNMzUzMF9CUlRfUkFNUF9SQVRFLAorCUxNMzUzMF9BTFNfWk9ORV9SRUcsCisJTE0zNTMwX0FMU19JTVBfU0VMRUNULAorCUxNMzUzMF9CUlRfQ1RSTF9SRUcsCisJTE0zNTMwX0FMU19aQjBfUkVHLAorCUxNMzUzMF9BTFNfWkIxX1JFRywKKwlMTTM1MzBfQUxTX1pCMl9SRUcsCisJTE0zNTMwX0FMU19aQjNfUkVHLAorCUxNMzUzMF9BTFNfWjBUX1JFRywKKwlMTTM1MzBfQUxTX1oxVF9SRUcsCisJTE0zNTMwX0FMU19aMlRfUkVHLAorCUxNMzUzMF9BTFNfWjNUX1JFRywKKwlMTTM1MzBfQUxTX1o0VF9SRUcsCit9OworCitzdGF0aWMgaW50IGxtMzUzMF9nZXRfbW9kZV9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtb2RlX21hcCk7IGkrKykKKwkJaWYgKHN5c2ZzX3N0cmVxKHN0ciwgbW9kZV9tYXBbaV0ubW9kZSkpCisJCQlyZXR1cm4gbW9kZV9tYXBbaV0ubW9kZV92YWw7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgbG0zNTMwX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBsbTM1MzBfZGF0YSAqZHJ2ZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwl1OCBnZW5fY29uZmlnOworCXU4IGFsc19jb25maWcgPSAwOworCXU4IGJydF9yYW1wOworCXU4IGFsc19pbXBfc2VsID0gMDsKKwl1OCBicmlnaHRuZXNzOworCXU4IHJlZ192YWxbTE0zNTMwX1JFR19NQVhdOworCXN0cnVjdCBsbTM1MzBfcGxhdGZvcm1fZGF0YSAqcGx0Zm0gPSBkcnZkYXRhLT5wZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZHJ2ZGF0YS0+Y2xpZW50OworCisJZ2VuX2NvbmZpZyA9IChwbHRmbS0+YnJ0X3JhbXBfbGF3IDw8IExNMzUzMF9SQU1QX0xBV19TSElGVCkgfAorCQkJKChwbHRmbS0+bWF4X2N1cnJlbnQgJiA3KSA8PCBMTTM1MzBfTUFYX0NVUlJfU0hJRlQpOworCisJaWYgKGRydmRhdGEtPm1vZGUgPT0gTE0zNTMwX0JMX01PREVfTUFOVUFMIHx8CisJICAgIGRydmRhdGEtPm1vZGUgPT0gTE0zNTMwX0JMX01PREVfQUxTKQorCQlnZW5fY29uZmlnIHw9IChMTTM1MzBfRU5BQkxFX0kyQyk7CisKKwlpZiAoZHJ2ZGF0YS0+bW9kZSA9PSBMTTM1MzBfQkxfTU9ERV9BTFMpIHsKKwkJYWxzX2NvbmZpZyA9CisJCQkocGx0Zm0tPmFsc19hdnJnX3RpbWUgPDwgTE0zNTMwX0FMU19BVkdfVElNRV9TSElGVCkgfAorCQkJKExNMzUzMF9FTkFCTEVfQUxTKSB8CisJCQkocGx0Zm0tPmFsc19pbnB1dF9tb2RlIDw8IExNMzUzMF9BTFNfU0VMX1NISUZUKTsKKworCQlhbHNfaW1wX3NlbCA9CisJCQkocGx0Zm0tPmFsczFfcmVzaXN0b3Jfc2VsIDw8IExNMzUzMF9BTFMxX0lNUF9TSElGVCkgfAorCQkJKHBsdGZtLT5hbHMyX3Jlc2lzdG9yX3NlbCA8PCBMTTM1MzBfQUxTMl9JTVBfU0hJRlQpOworCX0KKworCWlmIChkcnZkYXRhLT5tb2RlID09IExNMzUzMF9CTF9NT0RFX1BXTSkKKwkJZ2VuX2NvbmZpZyB8PSAoTE0zNTMwX0VOQUJMRV9QV00pIHwKKwkJCQkocGx0Zm0tPnB3bV9wb2xfaGkgPDwgTE0zNTMwX1BXTV9QT0xfU0hJRlQpIHwKKwkJCQkoTE0zNTMwX0VOQUJMRV9QV01fU0lNUExFKTsKKworCWJydF9yYW1wID0gKHBsdGZtLT5icnRfcmFtcF9mYWxsIDw8IExNMzUzMF9CUlRfUkFNUF9GQUxMX1NISUZUKSB8CisJCQkocGx0Zm0tPmJydF9yYW1wX3Jpc2UgPDwgTE0zNTMwX0JSVF9SQU1QX1JJU0VfU0hJRlQpOworCisJYnJpZ2h0bmVzcyA9IHBsdGZtLT5icnRfdmFsOworCisJcmVnX3ZhbFswXSA9IGdlbl9jb25maWc7CS8qIExNMzUzMF9HRU5fQ09ORklHICovCisJcmVnX3ZhbFsxXSA9IGFsc19jb25maWc7CS8qIExNMzUzMF9BTFNfQ09ORklHICovCisJcmVnX3ZhbFsyXSA9IGJydF9yYW1wOwkJLyogTE0zNTMwX0JSVF9SQU1QX1JBVEUgKi8KKwlyZWdfdmFsWzNdID0gMHgwMDsJCS8qIExNMzUzMF9BTFNfWk9ORV9SRUcgKi8KKwlyZWdfdmFsWzRdID0gYWxzX2ltcF9zZWw7CS8qIExNMzUzMF9BTFNfSU1QX1NFTEVDVCAqLworCXJlZ192YWxbNV0gPSBicmlnaHRuZXNzOwkvKiBMTTM1MzBfQlJUX0NUUkxfUkVHICovCisJcmVnX3ZhbFs2XSA9IExNMzUzMF9ERUZfWkJfMDsJLyogTE0zNTMwX0FMU19aQjBfUkVHICovCisJcmVnX3ZhbFs3XSA9IExNMzUzMF9ERUZfWkJfMTsJLyogTE0zNTMwX0FMU19aQjFfUkVHICovCisJcmVnX3ZhbFs4XSA9IExNMzUzMF9ERUZfWkJfMjsJLyogTE0zNTMwX0FMU19aQjJfUkVHICovCisJcmVnX3ZhbFs5XSA9IExNMzUzMF9ERUZfWkJfMzsJLyogTE0zNTMwX0FMU19aQjNfUkVHICovCisJcmVnX3ZhbFsxMF0gPSBMTTM1MzBfREVGX1pUXzA7CS8qIExNMzUzMF9BTFNfWjBUX1JFRyAqLworCXJlZ192YWxbMTFdID0gTE0zNTMwX0RFRl9aVF8xOwkvKiBMTTM1MzBfQUxTX1oxVF9SRUcgKi8KKwlyZWdfdmFsWzEyXSA9IExNMzUzMF9ERUZfWlRfMjsJLyogTE0zNTMwX0FMU19aMlRfUkVHICovCisJcmVnX3ZhbFsxM10gPSBMTTM1MzBfREVGX1pUXzM7CS8qIExNMzUzMF9BTFNfWjNUX1JFRyAqLworCXJlZ192YWxbMTRdID0gTE0zNTMwX0RFRl9aVF80OwkvKiBMTTM1MzBfQUxTX1o0VF9SRUcgKi8KKworCWZvciAoaSA9IDA7IGkgPCBMTTM1MzBfUkVHX01BWDsgaSsrKSB7CisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCWxtMzUzMF9yZWdbaV0sIHJlZ192YWxbaV0pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbG0zNTMwX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicnRfdmFsKQoreworCWludCBlcnI7CisJc3RydWN0IGxtMzUzMF9kYXRhICpkcnZkYXRhID0KKwkgICAgY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgbG0zNTMwX2RhdGEsIGxlZF9kZXYpOworCisJc3dpdGNoIChkcnZkYXRhLT5tb2RlKSB7CisJY2FzZSBMTTM1MzBfQkxfTU9ERV9NQU5VQUw6CisKKwkJLyogc2V0IHRoZSBicmlnaHRuZXNzIGluIGJyaWdodG5lc3MgY29udHJvbCByZWdpc3RlciovCisJCWVyciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHJ2ZGF0YS0+Y2xpZW50LAorCQkJCUxNMzUzMF9CUlRfQ1RSTF9SRUcsIGJydF92YWwgLyAyKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIoJmRydmRhdGEtPmNsaWVudC0+ZGV2LAorCQkJCSJVbmFibGUgdG8gc2V0IGJyaWdodG5lc3M6ICVkXG4iLCBlcnIpOworCQlicmVhazsKKwljYXNlIExNMzUzMF9CTF9NT0RFX0FMUzoKKwkJYnJlYWs7CisJY2FzZSBMTTM1MzBfQkxfTU9ERV9QV006CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMgc3NpemVfdCBsbTM1MzBfbW9kZV9zZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJCSAgICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCWludCBlcnI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvbnRhaW5lcl9vZigKKwkJCQkJZGV2LT5wYXJlbnQsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpOworCXN0cnVjdCBsbTM1MzBfZGF0YSAqZHJ2ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBtb2RlOworCisJbW9kZSA9IGxtMzUzMF9nZXRfbW9kZV9mcm9tX3N0cihidWYpOworCWlmIChtb2RlIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgbW9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChtb2RlID09IExNMzUzMF9CTF9NT0RFX01BTlVBTCkKKwkJZHJ2ZGF0YS0+bW9kZSA9IExNMzUzMF9CTF9NT0RFX01BTlVBTDsKKwllbHNlIGlmIChtb2RlID09IExNMzUzMF9CTF9NT0RFX0FMUykKKwkJZHJ2ZGF0YS0+bW9kZSA9IExNMzUzMF9CTF9NT0RFX0FMUzsKKwllbHNlIGlmIChtb2RlID09IExNMzUzMF9CTF9NT0RFX1BXTSkgeworCQlkZXZfZXJyKGRldiwgIlBXTSBtb2RlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSBsbTM1MzBfaW5pdF9yZWdpc3RlcnMoZHJ2ZGF0YSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgIlNldHRpbmcgJXMgTW9kZSBmYWlsZWQgOiVkXG4iLCBidWYsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIHNpemVvZihkcnZkYXRhLT5tb2RlKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1vZGUsIDA2NDQsIE5VTEwsIGxtMzUzMF9tb2RlX3NldCk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGxtMzUzMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBsbTM1MzBfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBsbTM1MzBfZGF0YSAqZHJ2ZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAicGxhdGZvcm0gZGF0YSByZXF1aXJlZFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKiBCTCBtb2RlICovCisJaWYgKHBkYXRhLT5tb2RlID4gTE0zNTMwX0JMX01PREVfUFdNKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiSWxsZWdhbCBNb2RlIHJlcXVlc3RcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJJMkNfRlVOQ19JMkMgbm90IHN1cHBvcnRlZFxuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlkcnZkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtMzUzMF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRydmRhdGEgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZHJ2ZGF0YS0+bW9kZSA9IHBkYXRhLT5tb2RlOworCWRydmRhdGEtPmNsaWVudCA9IGNsaWVudDsKKwlkcnZkYXRhLT5wZGF0YSA9IHBkYXRhOworCWRydmRhdGEtPmxlZF9kZXYubmFtZSA9IExNMzUzMF9MRURfREVWOworCWRydmRhdGEtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBsbTM1MzBfYnJpZ2h0bmVzc19zZXQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkcnZkYXRhKTsKKworCWVyciA9IGxtMzUzMF9pbml0X3JlZ2lzdGVycyhkcnZkYXRhKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlJlZ2lzdGVyIEluaXQgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVnX2luaXQ7CisJfQorCisJZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKChzdHJ1Y3QgZGV2aWNlICopCisJCQkJICAgICAgJmNsaWVudC0+ZGV2LCAmZHJ2ZGF0YS0+bGVkX2Rldik7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJSZWdpc3RlciBsZWQgY2xhc3MgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfY2xhc3NfcmVnaXN0ZXI7CisJfQorCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRydmRhdGEtPmxlZF9kZXYuZGV2LCAmZGV2X2F0dHJfbW9kZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGaWxlIGRldmljZSBjcmVhdGlvbiBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9jcmVhdGVfZmlsZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2NyZWF0ZV9maWxlOgorCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkcnZkYXRhLT5sZWRfZGV2KTsKK2Vycl9jbGFzc19yZWdpc3RlcjoKK2Vycl9yZWdfaW5pdDoKKwlrZnJlZShkcnZkYXRhKTsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbG0zNTMwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBsbTM1MzBfZGF0YSAqZHJ2ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKGRydmRhdGEtPmxlZF9kZXYuZGV2LCAmZGV2X2F0dHJfbW9kZSk7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmRydmRhdGEtPmxlZF9kZXYpOworCWtmcmVlKGRydmRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG0zNTMwX2lkW10gPSB7CisJe0xNMzUzMF9OQU1FLCAwfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtMzUzMF9pMmNfZHJpdmVyID0geworCS5wcm9iZSA9IGxtMzUzMF9wcm9iZSwKKwkucmVtb3ZlID0gbG0zNTMwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBsbTM1MzBfaWQsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBMTTM1MzBfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxtMzUzMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZsbTM1MzBfaTJjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsbTM1MzBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZsbTM1MzBfaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGxtMzUzMF9pbml0KTsKK21vZHVsZV9leGl0KGxtMzUzMF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJCYWNrIExpZ2h0IGRyaXZlciBmb3IgTE0zNTMwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJTaHJlc2h0aGEgS3VtYXIgU0FIVSA8c2hyZXNodGhha3VtYXIuc2FodUBzdGVyaWNzc29uLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWxwNTUyMS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtbHA1NTIxLmMKaW5kZXggODBhM2FlMy4uYzBjZmY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtbHA1NTIxLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtbHA1NTIxLmMKQEAgLTUzNCw3ICs1MzQsNyBAQAogfQogCiAvKiBsZWQgY2xhc3MgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLXN0YXRpYyBERVZJQ0VfQVRUUihsZWRfY3VycmVudCwgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfY3VycmVudCwgc3RvcmVfY3VycmVudCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGVkX2N1cnJlbnQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2N1cnJlbnQsIHN0b3JlX2N1cnJlbnQpOwogc3RhdGljIERFVklDRV9BVFRSKG1heF9jdXJyZW50LCBTX0lSVUdPICwgc2hvd19tYXhfY3VycmVudCwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscDU1MjFfbGVkX2F0dHJpYnV0ZXNbXSA9IHsKQEAgLTU0OCwxNSArNTQ4LDE1IEBACiB9OwogCiAvKiBkZXZpY2UgYXR0cmlidXRlcyAqLwotc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTFfbW9kZSwgU19JUlVHTyB8IFNfSVdVR08sCitzdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lMV9tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJICAgc2hvd19lbmdpbmUxX21vZGUsIHN0b3JlX2VuZ2luZTFfbW9kZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lMl9tb2RlLCBTX0lSVUdPIHwgU19JV1VHTywKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUyX21vZGUsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkgICBzaG93X2VuZ2luZTJfbW9kZSwgc3RvcmVfZW5naW5lMl9tb2RlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUzX21vZGUsIFNfSVJVR08gfCBTX0lXVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTNfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCSAgIHNob3dfZW5naW5lM19tb2RlLCBzdG9yZV9lbmdpbmUzX21vZGUpOwotc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTFfbG9hZCwgU19JV1VHTywgTlVMTCwgc3RvcmVfZW5naW5lMV9sb2FkKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUyX2xvYWQsIFNfSVdVR08sIE5VTEwsIHN0b3JlX2VuZ2luZTJfbG9hZCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lM19sb2FkLCBTX0lXVUdPLCBOVUxMLCBzdG9yZV9lbmdpbmUzX2xvYWQpOworc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTFfbG9hZCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfZW5naW5lMV9sb2FkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUyX2xvYWQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2VuZ2luZTJfbG9hZCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lM19sb2FkLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9lbmdpbmUzX2xvYWQpOwogc3RhdGljIERFVklDRV9BVFRSKHNlbGZ0ZXN0LCBTX0lSVUdPLCBscDU1MjFfc2VsZnRlc3QsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHA1NTIxX2F0dHJpYnV0ZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWxwNTUyMy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtbHA1NTIzLmMKaW5kZXggZDBjNDA2OC4uZTE5ZmVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtbHA1NTIzLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtbHA1NTIzLmMKQEAgLTcxMyw3ICs3MTMsNyBAQAogfQogCiAvKiBsZWQgY2xhc3MgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLXN0YXRpYyBERVZJQ0VfQVRUUihsZWRfY3VycmVudCwgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfY3VycmVudCwgc3RvcmVfY3VycmVudCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGVkX2N1cnJlbnQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2N1cnJlbnQsIHN0b3JlX2N1cnJlbnQpOwogc3RhdGljIERFVklDRV9BVFRSKG1heF9jdXJyZW50LCBTX0lSVUdPICwgc2hvd19tYXhfY3VycmVudCwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscDU1MjNfbGVkX2F0dHJpYnV0ZXNbXSA9IHsKQEAgLTcyNywyMSArNzI3LDIxIEBACiB9OwogCiAvKiBkZXZpY2UgYXR0cmlidXRlcyAqLwotc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTFfbW9kZSwgU19JUlVHTyB8IFNfSVdVR08sCitzdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lMV9tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJICAgc2hvd19lbmdpbmUxX21vZGUsIHN0b3JlX2VuZ2luZTFfbW9kZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lMl9tb2RlLCBTX0lSVUdPIHwgU19JV1VHTywKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUyX21vZGUsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkgICBzaG93X2VuZ2luZTJfbW9kZSwgc3RvcmVfZW5naW5lMl9tb2RlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUzX21vZGUsIFNfSVJVR08gfCBTX0lXVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTNfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCSAgIHNob3dfZW5naW5lM19tb2RlLCBzdG9yZV9lbmdpbmUzX21vZGUpOwotc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTFfbGVkcywgU19JUlVHTyB8IFNfSVdVR08sCitzdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lMV9sZWRzLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJICAgc2hvd19lbmdpbmUxX2xlZHMsIHN0b3JlX2VuZ2luZTFfbGVkcyk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lMl9sZWRzLCBTX0lSVUdPIHwgU19JV1VHTywKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUyX2xlZHMsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkgICBzaG93X2VuZ2luZTJfbGVkcywgc3RvcmVfZW5naW5lMl9sZWRzKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUzX2xlZHMsIFNfSVJVR08gfCBTX0lXVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTNfbGVkcywgU19JUlVHTyB8IFNfSVdVU1IsCiAJCSAgIHNob3dfZW5naW5lM19sZWRzLCBzdG9yZV9lbmdpbmUzX2xlZHMpOwotc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTFfbG9hZCwgU19JV1VHTywgTlVMTCwgc3RvcmVfZW5naW5lMV9sb2FkKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUyX2xvYWQsIFNfSVdVR08sIE5VTEwsIHN0b3JlX2VuZ2luZTJfbG9hZCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lM19sb2FkLCBTX0lXVUdPLCBOVUxMLCBzdG9yZV9lbmdpbmUzX2xvYWQpOworc3RhdGljIERFVklDRV9BVFRSKGVuZ2luZTFfbG9hZCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfZW5naW5lMV9sb2FkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmdpbmUyX2xvYWQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2VuZ2luZTJfbG9hZCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZW5naW5lM19sb2FkLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9lbmdpbmUzX2xvYWQpOwogc3RhdGljIERFVklDRV9BVFRSKHNlbGZ0ZXN0LCBTX0lSVUdPLCBscDU1MjNfc2VsZnRlc3QsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHA1NTIzX2F0dHJpYnV0ZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLW5ldDU1MDEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLW5ldDU1MDEuYwppbmRleCAxNzM5NTU3Li43ZTc2NGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1uZXQ1NTAxLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtbmV0NTUwMS5jCkBAIC0xOSw3ICsxOSw3IEBACiAKICNpbmNsdWRlIDxhc20vZ2VvZGUuaD4KIAotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBuZXQ1NTAxX2xlZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19sZWQgbmV0NTUwMV9sZWRzW10gPSB7CiAJewogCQkubmFtZSA9ICJlcnJvciIsCiAJCS5ncGlvID0gNiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3JhY2stbWV0ZXIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3JhY2stbWV0ZXIuYwppbmRleCAzOWY2NjBiLi4yNjM3YzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9yYWNrLW1ldGVyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvcmFjay1tZXRlci5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCByYWNrbWV0ZXJfc3RvcF9jcHVfc25pZmZlcihzdHJ1Y3QgcmFja21ldGVyICpybSkKK3N0YXRpYyB2b2lkIHJhY2ttZXRlcl9zdG9wX2NwdV9zbmlmZmVyKHN0cnVjdCByYWNrbWV0ZXIgKnJtKQogewogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcm0tPmNwdVswXS5zbmlmZmVyKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJtLT5jcHVbMV0uc25pZmZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYwppbmRleCBhZGUxZTY1Li5iMWQ5MTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInBtdWJsIik7CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEZCX0JBQ0tMSUdIVF9MRVZFTFMgLSAxOwogCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBOVUxMLCBOVUxMLCAmcG11X2JhY2tsaWdodF9kYXRhLAogCQkJCSAgICAgICAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuYyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKaW5kZXggOWEzNTMyMC4uYTJjZTBiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuYworKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC04NTQsNyArODU0LDcgQEAKIAkJaWYgKGJpdG1hcC0+ZmxhZ3MgJiBCSVRNQVBfSE9TVEVORElBTikKIAkJCXNldF9iaXQoYml0LCBrYWRkcik7CiAJCWVsc2UKLQkJCWV4dDJfc2V0X2JpdChiaXQsIGthZGRyKTsKKwkJCV9fdGVzdF9hbmRfc2V0X2JpdF9sZShiaXQsIGthZGRyKTsKIAkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCQlQUklOVEsoInNldCBmaWxlIGJpdCAlbHUgcGFnZSAlbHVcbiIsIGJpdCwgcGFnZS0+aW5kZXgpOwogCX0KQEAgLTEwNTAsNyArMTA1MCw3IEBACiAJCWlmIChiaXRtYXAtPmZsYWdzICYgQklUTUFQX0hPU1RFTkRJQU4pCiAJCQliID0gdGVzdF9iaXQoYml0LCBwYWRkcik7CiAJCWVsc2UKLQkJCWIgPSBleHQyX3Rlc3RfYml0KGJpdCwgcGFkZHIpOworCQkJYiA9IHRlc3RfYml0X2xlKGJpdCwgcGFkZHIpOwogCQlrdW5tYXBfYXRvbWljKHBhZGRyLCBLTV9VU0VSMCk7CiAJCWlmIChiKSB7CiAJCQkvKiBpZiB0aGUgZGlzayBiaXQgaXMgc2V0LCBzZXQgdGhlIG1lbW9yeSBiaXQgKi8KQEAgLTEyMjYsNyArMTIyNiw3IEBACiAJCQkJCQljbGVhcl9iaXQoZmlsZV9wYWdlX29mZnNldChiaXRtYXAsIGopLAogCQkJCQkJCSAgcGFkZHIpOwogCQkJCQllbHNlCi0JCQkJCQlleHQyX2NsZWFyX2JpdChmaWxlX3BhZ2Vfb2Zmc2V0KGJpdG1hcCwgaiksCisJCQkJCQlfX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZShmaWxlX3BhZ2Vfb2Zmc2V0KGJpdG1hcCwgaiksCiAJCQkJCQkJICAgICAgIHBhZGRyKTsKIAkJCQkJa3VubWFwX2F0b21pYyhwYWRkciwgS01fVVNFUjApOwogCQkJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2cuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKaW5kZXggNjk1MTUzNi4uNTc5NjhlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2cuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy5jCkBAIC0yNTEsMjAgKzI1MSwyMCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBsb2dfdGVzdF9iaXQodWludDMyX3QgKmJzLCB1bnNpZ25lZCBiaXQpCiB7Ci0JcmV0dXJuIGV4dDJfdGVzdF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicykgPyAxIDogMDsKKwlyZXR1cm4gdGVzdF9iaXRfbGUoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicykgPyAxIDogMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvZ19zZXRfYml0KHN0cnVjdCBsb2dfYyAqbCwKIAkJCSAgICAgICB1aW50MzJfdCAqYnMsIHVuc2lnbmVkIGJpdCkKIHsKLQlleHQyX3NldF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicyk7CisJX190ZXN0X2FuZF9zZXRfYml0X2xlKGJpdCwgKHVuc2lnbmVkIGxvbmcgKikgYnMpOwogCWwtPnRvdWNoZWRfY2xlYW5lZCA9IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dfY2xlYXJfYml0KHN0cnVjdCBsb2dfYyAqbCwKIAkJCQkgdWludDMyX3QgKmJzLCB1bnNpZ25lZCBiaXQpCiB7Ci0JZXh0Ml9jbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicyk7CisJX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicyk7CiAJbC0+dG91Y2hlZF9kaXJ0aWVkID0gMTsKIH0KIApAQCAtNzQwLDcgKzc0MCw3IEBACiAJCXJldHVybiAwOwogCiAJZG8gewotCQkqcmVnaW9uID0gZXh0Ml9maW5kX25leHRfemVyb19iaXQoCisJCSpyZWdpb24gPSBmaW5kX25leHRfemVyb19iaXRfbGUoCiAJCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgKikgbGMtPnN5bmNfYml0cywKIAkJCQkJICAgICBsYy0+cmVnaW9uX2NvdW50LAogCQkJCQkgICAgIGxjLT5zeW5jX3NlYXJjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKaW5kZXggMjMwMDViMy4uYjJiOTQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwpAQCAtOCw2MCArOCw3MSBAQAogI2luY2x1ZGUgImR2Yi11c2ItY29tbW9uLmgiCiAjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlZ2FjeV9kdmJfdXNiX2dldF9rZXltYXBfaW5kZXgoY29uc3Qgc3RydWN0IGlucHV0X2tleW1hcF9lbnRyeSAqa2UsCisJCQkJc3RydWN0IHJjX21hcF90YWJsZSAqa2V5bWFwLAorCQkJCXVuc2lnbmVkIGludCBrZXltYXBfc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHNjYW5jb2RlOworCisJaWYgKGtlLT5mbGFncyAmIElOUFVUX0tFWU1BUF9CWV9JTkRFWCkgeworCQlpbmRleCA9IGtlLT5pbmRleDsKKwl9IGVsc2UgeworCQlpZiAoaW5wdXRfc2NhbmNvZGVfdG9fc2NhbGFyKGtlLCAmc2NhbmNvZGUpKQorCQkJcmV0dXJuIGtleW1hcF9zaXplOworCisJCS8qIFNlZSBpZiB3ZSBjYW4gbWF0Y2ggdGhlIHJhdyBrZXkgY29kZS4gKi8KKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwga2V5bWFwX3NpemU7IGluZGV4KyspCisJCQlpZiAoa2V5bWFwW2luZGV4XS5zY2FuY29kZSA9PSBzY2FuY29kZSkKKwkJCQlicmVhazsKKworCQkvKiBTZWUgaWYgdGhlcmUgaXMgYW4gdW51c2VkIGhvbGUgaW4gdGhlIG1hcCAqLworCQlpZiAoaW5kZXggPj0ga2V5bWFwX3NpemUpIHsKKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGtleW1hcF9zaXplOyBpbmRleCsrKSB7CisJCQkJaWYgKGtleW1hcFtpbmRleF0ua2V5Y29kZSA9PSBLRVlfUkVTRVJWRUQgfHwKKwkJCQkgICAga2V5bWFwW2luZGV4XS5rZXljb2RlID09IEtFWV9VTktOT1dOKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBpbmRleDsKK30KKwogc3RhdGljIGludCBsZWdhY3lfZHZiX3VzYl9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJCQl1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCAqa2V5Y29kZSkKKwkJCQkgICAgIHN0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkgKmtlKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0KIAlzdHJ1Y3QgcmNfbWFwX3RhYmxlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlOwotCWludCBpOworCXVuc2lnbmVkIGludCBrZXltYXBfc2l6ZSA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CiAKLQkvKiBTZWUgaWYgd2UgY2FuIG1hdGNoIHRoZSByYXcga2V5IGNvZGUuICovCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKQotCQlpZiAoa2V5bWFwW2ldLnNjYW5jb2RlID09IHNjYW5jb2RlKSB7Ci0JCQkqa2V5Y29kZSA9IGtleW1hcFtpXS5rZXljb2RlOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlpbmRleCA9IGxlZ2FjeV9kdmJfdXNiX2dldF9rZXltYXBfaW5kZXgoa2UsIGtleW1hcCwga2V5bWFwX3NpemUpOworCWlmIChpbmRleCA+PSBrZXltYXBfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIElmIGlzIHRoZXJlIGV4dHJhIHNwYWNlLCByZXR1cm5zIEtFWV9SRVNFUlZFRCwKLQkgKiBvdGhlcndpc2UsIGlucHV0IGNvcmUgd29uJ3QgbGV0IGxlZ2FjeV9kdmJfdXNiX3NldGtleWNvZGUKLQkgKiB0byB3b3JrCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKQotCQlpZiAoa2V5bWFwW2ldLmtleWNvZGUgPT0gS0VZX1JFU0VSVkVEIHx8Ci0JCSAgICBrZXltYXBbaV0ua2V5Y29kZSA9PSBLRVlfVU5LTk9XTikgewotCQkJKmtleWNvZGUgPSBLRVlfUkVTRVJWRUQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCWtlLT5rZXljb2RlID0ga2V5bWFwW2luZGV4XS5rZXljb2RlOworCWlmIChrZS0+a2V5Y29kZSA9PSBLRVlfVU5LTk9XTikKKwkJa2UtPmtleWNvZGUgPSBLRVlfUkVTRVJWRUQ7CisJa2UtPmxlbiA9IHNpemVvZihrZXltYXBbaW5kZXhdLnNjYW5jb2RlKTsKKwltZW1jcHkoJmtlLT5zY2FuY29kZSwgJmtleW1hcFtpbmRleF0uc2NhbmNvZGUsIGtlLT5sZW4pOworCWtlLT5pbmRleCA9IGluZGV4OwogCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbGVnYWN5X2R2Yl91c2Jfc2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCQkJdW5zaWduZWQgaW50IHNjYW5jb2RlLCB1bnNpZ25lZCBpbnQga2V5Y29kZSkKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkgKmtlLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpvbGRfa2V5Y29kZSkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwotCiAJc3RydWN0IHJjX21hcF90YWJsZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF90YWJsZTsKLQlpbnQgaTsKKwl1bnNpZ25lZCBpbnQga2V5bWFwX3NpemUgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3NpemU7CisJdW5zaWduZWQgaW50IGluZGV4OwogCi0JLyogU2VhcmNoIGlmIGl0IGlzIHJlcGxhY2luZyBhbiBleGlzdGluZyBrZXljb2RlICovCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKQotCQlpZiAoa2V5bWFwW2ldLnNjYW5jb2RlID09IHNjYW5jb2RlKSB7Ci0JCQlrZXltYXBbaV0ua2V5Y29kZSA9IGtleWNvZGU7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JLyogU2VhcmNoIGlmIGlzIHRoZXJlIGEgY2xlYW4gZW50cnkuIElmIHNvLCB1c2UgaXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF9zaXplOyBpKyspCi0JCWlmIChrZXltYXBbaV0ua2V5Y29kZSA9PSBLRVlfUkVTRVJWRUQgfHwKLQkJICAgIGtleW1hcFtpXS5rZXljb2RlID09IEtFWV9VTktOT1dOKSB7Ci0JCQlrZXltYXBbaV0uc2NhbmNvZGUgPSBzY2FuY29kZTsKLQkJCWtleW1hcFtpXS5rZXljb2RlID0ga2V5Y29kZTsKLQkJCXJldHVybiAwOwotCQl9Ci0KKwlpbmRleCA9IGxlZ2FjeV9kdmJfdXNiX2dldF9rZXltYXBfaW5kZXgoa2UsIGtleW1hcCwga2V5bWFwX3NpemUpOwogCS8qCiAJICogRklYTUU6IEN1cnJlbnRseSwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCiAJICogc2NhbmNvZGUgdGFibGUuIEZvciBpdCB0byBoYXBwZW4sIG9uZSBwb3NzaWJpbGl0eQpAQCAtNjksOCArODAsMjQgQEAKIAkgKiBjb3B5aW5nIGRhdGEsIGFwcGVuZGluZyB0aGUgbmV3IGtleSBvbiBpdCwgYW5kIGZyZWVpbmcKIAkgKiB0aGUgb2xkIG9uZSAtIG9yIG1heWJlIGp1c3QgYWxsb2NhdGluZyBzb21lIHNwYXJlIHNwYWNlCiAJICovCisJaWYgKGluZGV4ID49IGtleW1hcF9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiAtRUlOVkFMOworCSpvbGRfa2V5Y29kZSA9IGtleW1hcFtpbmRleF0ua2V5Y29kZTsKKwlrZXltYXAtPmtleWNvZGUgPSBrZS0+a2V5Y29kZTsKKwlfX3NldF9iaXQoa2UtPmtleWNvZGUsIGRldi0+a2V5Yml0KTsKKworCWlmICgqb2xkX2tleWNvZGUgIT0gS0VZX1JFU0VSVkVEKSB7CisJCV9fY2xlYXJfYml0KCpvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBrZXltYXBfc2l6ZTsgaW5kZXgrKykgeworCQkJaWYgKGtleW1hcFtpbmRleF0ua2V5Y29kZSA9PSAqb2xkX2tleWNvZGUpIHsKKwkJCQlfX3NldF9iaXQoKm9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyogUmVtb3RlLWNvbnRyb2wgcG9sbCBmdW5jdGlvbiAtIGNhbGxlZCBldmVyeSBkaWItPnJjX3F1ZXJ5X2ludGVydmFsIG1zIHRvIHNlZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwppbmRleCA1YjQ0MjJlLi41YWMxYmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwpAQCAtOTY2LDggKzk2Niw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWRldi0+aW5wdXRfZGV2LT5nZXRrZXljb2RlX25ldyA9IGlyX2dldGtleWNvZGU7Ci0JZGV2LT5pbnB1dF9kZXYtPnNldGtleWNvZGVfbmV3ID0gaXJfc2V0a2V5Y29kZTsKKwlkZXYtPmlucHV0X2Rldi0+Z2V0a2V5Y29kZSA9IGlyX2dldGtleWNvZGU7CisJZGV2LT5pbnB1dF9kZXYtPnNldGtleWNvZGUgPSBpcl9zZXRrZXljb2RlOwogCWlucHV0X3NldF9kcnZkYXRhKGRldi0+aW5wdXRfZGV2LCBkZXYpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+cmNfbWFwLmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9NYWtlZmlsZSBiL2RyaXZlcnMvbWVtc3RpY2svTWFrZWZpbGUKaW5kZXggZGMxNjBmYjQuLjk4NjIzNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZW1zdGljay9NYWtlZmlsZQpAQCAtMiw5ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgTWVtb3J5U3RpY2sgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLWlmZXEgKCQoQ09ORklHX01FTVNUSUNLX0RFQlVHKSx5KQotCUVYVFJBX0NGTEFHUwkJKz0gLURERUJVRwotZW5kaWYKK3N1YmRpci1jY2ZsYWdzLSQoQ09ORklHX01FTVNUSUNLX0RFQlVHKSA6PSAtRERFQlVHCiAKIG9iai0kKENPTkZJR19NRU1TVElDSykJCSs9IGNvcmUvCiBvYmotJChDT05GSUdfTUVNU1RJQ0spCQkrPSBob3N0LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL01ha2VmaWxlCmluZGV4IDhiMmI1MjkuLmVjZDAyOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvTWFrZWZpbGUKQEAgLTIsMTAgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBNZW1vcnlTdGljayBjb3JlLgogIwogCi1pZmVxICgkKENPTkZJR19NRU1TVElDS19ERUJVRykseSkKLQlFWFRSQV9DRkxBR1MJCSs9IC1EREVCVUcKLWVuZGlmCi0KIG9iai0kKENPTkZJR19NRU1TVElDSykJCSs9IG1lbXN0aWNrLm8KIAogb2JqLSQoQ09ORklHX01TUFJPX0JMT0NLKQkrPSBtc3Byb19ibG9jay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3QvTWFrZWZpbGUKaW5kZXggMTI1MzBlNC4uYTE4MTVlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9NYWtlZmlsZQpAQCAtMiw5ICsyLDUgQEAKICMgTWFrZWZpbGUgZm9yIE1lbW9yeVN0aWNrIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCiAjCiAKLWlmZXEgKCQoQ09ORklHX01FTVNUSUNLX0RFQlVHKSx5KQotCUVYVFJBX0NGTEFHUwkJCSs9IC1EREVCVUcKLWVuZGlmCi0KIG9iai0kKENPTkZJR19NRU1TVElDS19USUZNX01TKQkJKz0gdGlmbV9tcy5vCiBvYmotJChDT05GSUdfTUVNU1RJQ0tfSk1JQ1JPTl8zOFgpCSs9IGptYjM4eF9tcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL01ha2VmaWxlIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9NYWtlZmlsZQppbmRleCA5NWM5NTMyLi5kMTgyYTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAKICMgZW5hYmxlIHZlcmJvc2UgbG9nZ2luZwogIyBDT05GSUdfRlVTSU9OX0xPR0dJTkcgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBLY29uZmlnCi0jRVhUUkFfQ0ZMQUdTICs9IC1ETVBUX0RFQlVHX1ZFUkJPU0UKKyNjY2ZsYWdzLXkgOj0gLURNUFRfREVCVUdfVkVSQk9TRQogCiAKICM9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LX0gTFNJX0xPR0lDCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCmluZGV4IDdkM2NjNTcuLjA5OGRlMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCkBAIC0xMDQ0LDggKzEwNDQsNyBAQAogCiBzdGF0aWMgaW50IGNmZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBpMm9fY2ZnX2luZm8gKnRtcCA9Ci0JICAgIChzdHJ1Y3QgaTJvX2NmZ19pbmZvICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGkyb19jZmdfaW5mbyksCisJc3RydWN0IGkyb19jZmdfaW5mbyAqdG1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyb19jZmdfaW5mbyksCiAJCQkJCSAgIEdGUF9LRVJORUwpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IGE2ZGZhMzdhLi5mZGNhNjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTgxLDYgKzgxLDE3IEBACiAJICBib2FyZHMuICBNU1A0MzAgZmlybXdhcmUgbWFuYWdlcyByZXNldHMgYW5kIHBvd2VyIHNlcXVlbmNpbmcsCiAJICBpbnB1dHMgZnJvbSBidXR0b25zIGFuZCB0aGUgSVIgcmVtb3RlLCBMRURzLCBhbiBSVEMsIGFuZCBtb3JlLgogCitjb25maWcgTUZEX1RJX1NTUAorCXRyaXN0YXRlICJUSSBTZXF1ZW5jZXIgU2VyaWFsIFBvcnQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9UTkVUVjEwN1gKKwlzZWxlY3QgTUZEX0NPUkUKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBTZXF1ZW5jZXIgU2VyaWFsIFBvcnQKKwkgIGluIGEgVGV4YXMgSW5zdHJ1bWVudHMgVE5FVFYxMDdYIFNvQy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGktc3NwLgorCiBjb25maWcgSFRDX0VHUElPCiAJYm9vbCAiSFRDIEVHUElPIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBHRU5FUklDX0hBUkRJUlFTICYmIEdQSU9MSUIgJiYgQVJNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IDkxZmUzODQuLmYwZTI1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiAKIG9iai0kKENPTkZJR19NRkRfREFWSU5DSV9WT0lDRUNPREVDKQkrPSBkYXZpbmNpX3ZvaWNlY29kZWMubwogb2JqLSQoQ09ORklHX01GRF9ETTM1NUVWTV9NU1ApCSs9IGRtMzU1ZXZtX21zcC5vCitvYmotJChDT05GSUdfTUZEX1RJX1NTUCkJKz0gdGktc3NwLm8KIAogb2JqLSQoQ09ORklHX01GRF9TVE1QRSkJCSs9IHN0bXBlLm8KIG9iai0kKENPTkZJR19NRkRfVEMzNTg5WCkJKz0gdGMzNTg5eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90aS1zc3AuYyBiL2RyaXZlcnMvbWZkL3RpLXNzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOWFiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC90aS1zc3AuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqIFNlcXVlbmNlciBTZXJpYWwgUG9ydCAoU1NQKSBkcml2ZXIgZm9yIFRleGFzIEluc3RydW1lbnRzJyBTb0NzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90aV9zc3AuaD4KKworLyogUmVnaXN0ZXIgT2Zmc2V0cyAqLworI2RlZmluZSBSRUdfUkVWCQkweDAwCisjZGVmaW5lIFJFR19JT1NFTF8xCTB4MDQKKyNkZWZpbmUgUkVHX0lPU0VMXzIJMHgwOAorI2RlZmluZSBSRUdfUFJFRElWCTB4MGMKKyNkZWZpbmUgUkVHX0lOVFJfU1QJMHgxMAorI2RlZmluZSBSRUdfSU5UUl9FTgkweDE0CisjZGVmaW5lIFJFR19URVNUX0NUUkwJMHgxOAorCisvKiBQZXIgcG9ydCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE9SVF9DRkdfMgkweDAwCisjZGVmaW5lIFBPUlRfQUREUgkweDA0CisjZGVmaW5lIFBPUlRfREFUQQkweDA4CisjZGVmaW5lIFBPUlRfQ0ZHXzEJMHgwYworI2RlZmluZSBQT1JUX1NUQVRFCTB4MTAKKworI2RlZmluZSBTU1BfUE9SVF9DT05GSUdfTUFTSwkoU1NQX0VBUkxZX0RJTiB8IFNTUF9ERUxBWV9ET1VUKQorI2RlZmluZSBTU1BfUE9SVF9DTEtSQVRFX01BU0sJMHgwZgorCisjZGVmaW5lIFNTUF9TRVFSQU1fV1JfRU4JQklUKDQpCisjZGVmaW5lIFNTUF9TRVFSQU1fUkRfRU4JQklUKDUpCisjZGVmaW5lIFNTUF9TVEFSVAkJQklUKDE1KQorI2RlZmluZSBTU1BfQlVTWQkJQklUKDEwKQorI2RlZmluZSBTU1BfUE9SVF9BU0wJCUJJVCg3KQorI2RlZmluZSBTU1BfUE9SVF9DRk8xCQlCSVQoNikKKworI2RlZmluZSBTU1BfUE9SVF9TRVFSQU1fU0laRQkzMgorCitzdGF0aWMgY29uc3QgaW50IHNzcF9wb3J0X2Jhc2VbXSAgID0gezB4MDQwLCAweDA4MH07CitzdGF0aWMgY29uc3QgaW50IHNzcF9wb3J0X3NlcXJhbVtdID0gezB4MTAwLCAweDE4MH07CisKK3N0cnVjdCB0aV9zc3AgeworCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCWludAkJCWlycTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3cWg7CisKKwkvKgorCSAqIFNvbWUgb2YgdGhlIGlvc2VsMiByZWdpc3RlciBiaXRzIGFsd2F5cyByZWFkLWJhY2sgYXMgMCwgd2UgbmVlZCB0bworCSAqIHJlbWVtYmVyIHRoZXNlIHZhbHVlcyBzbyB0aGF0IHdlIGRvbid0IGNsb2JiZXIgcHJldmlvdXNseSBzZXQKKwkgKiB2YWx1ZXMuCisJICovCisJdTMyCQkJaW9zZWwyOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlfc3NwICpkZXZfdG9fc3NwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGV2X3RvX3BvcnQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KS0+aWQ7Cit9CisKKy8qIFJlZ2lzdGVyIEFjY2VzcyBIZWxwZXJzLCBybXcoKSBmdW5jdGlvbnMgbmVlZCB0byBydW4gbG9ja2VkICovCitzdGF0aWMgaW5saW5lIHUzMiBzc3BfcmVhZChzdHJ1Y3QgdGlfc3NwICpzc3AsIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHNzcC0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzc3Bfd3JpdGUoc3RydWN0IHRpX3NzcCAqc3NwLCBpbnQgcmVnLCB1MzIgdmFsKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIHNzcC0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzc3Bfcm13KHN0cnVjdCB0aV9zc3AgKnNzcCwgaW50IHJlZywgdTMyIG1hc2ssIHUzMiBiaXRzKQoreworCXNzcF93cml0ZShzc3AsIHJlZywgKHNzcF9yZWFkKHNzcCwgcmVnKSAmIH5tYXNrKSB8IGJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzc3BfcG9ydF9yZWFkKHN0cnVjdCB0aV9zc3AgKnNzcCwgaW50IHBvcnQsIGludCByZWcpCit7CisJcmV0dXJuIHNzcF9yZWFkKHNzcCwgc3NwX3BvcnRfYmFzZVtwb3J0XSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzc3BfcG9ydF93cml0ZShzdHJ1Y3QgdGlfc3NwICpzc3AsIGludCBwb3J0LCBpbnQgcmVnLAorCQkJCSAgdTMyIHZhbCkKK3sKKwlzc3Bfd3JpdGUoc3NwLCBzc3BfcG9ydF9iYXNlW3BvcnRdICsgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3NwX3BvcnRfcm13KHN0cnVjdCB0aV9zc3AgKnNzcCwgaW50IHBvcnQsIGludCByZWcsCisJCQkJdTMyIG1hc2ssIHUzMiBiaXRzKQoreworCXNzcF9ybXcoc3NwLCBzc3BfcG9ydF9iYXNlW3BvcnRdICsgcmVnLCBtYXNrLCBiaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNzcF9wb3J0X2Nscl9iaXRzKHN0cnVjdCB0aV9zc3AgKnNzcCwgaW50IHBvcnQsIGludCByZWcsCisJCQkJICAgICB1MzIgYml0cykKK3sKKwlzc3BfcG9ydF9ybXcoc3NwLCBwb3J0LCByZWcsIGJpdHMsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3NwX3BvcnRfc2V0X2JpdHMoc3RydWN0IHRpX3NzcCAqc3NwLCBpbnQgcG9ydCwgaW50IHJlZywKKwkJCQkgICAgIHUzMiBiaXRzKQoreworCXNzcF9wb3J0X3Jtdyhzc3AsIHBvcnQsIHJlZywgMCwgYml0cyk7Cit9CisKKy8qIENhbGxlZCB0byBzZXR1cCBwb3J0IGNsb2NrIG1vZGUsIGNhbGxlciBtdXN0IGhvbGQgc3NwLT5sb2NrICovCitzdGF0aWMgaW50IF9fc2V0X21vZGUoc3RydWN0IHRpX3NzcCAqc3NwLCBpbnQgcG9ydCwgaW50IG1vZGUpCit7CisJbW9kZSAmPSBTU1BfUE9SVF9DT05GSUdfTUFTSzsKKwlzc3BfcG9ydF9ybXcoc3NwLCBwb3J0LCBQT1JUX0NGR18xLCBTU1BfUE9SVF9DT05GSUdfTUFTSywgbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHRpX3NzcF9zZXRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCXN0cnVjdCB0aV9zc3AgKnNzcCA9IGRldl90b19zc3AoZGV2KTsKKwlpbnQgcG9ydCA9IGRldl90b19wb3J0KGRldik7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmc3NwLT5sb2NrKTsKKwlyZXQgPSBfX3NldF9tb2RlKHNzcCwgcG9ydCwgbW9kZSk7CisJc3Bpbl91bmxvY2soJnNzcC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0aV9zc3Bfc2V0X21vZGUpOworCisvKiBDYWxsZWQgdG8gc2V0dXAgaW9zZWwyLCBjYWxsZXIgbXVzdCBob2xkIHNzcC0+bG9jayAqLworc3RhdGljIHZvaWQgX19zZXRfaW9zZWwyKHN0cnVjdCB0aV9zc3AgKnNzcCwgdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJc3NwLT5pb3NlbDIgPSAoc3NwLT5pb3NlbDIgJiB+bWFzaykgfCB2YWw7CisJc3NwX3dyaXRlKHNzcCwgUkVHX0lPU0VMXzIsIHNzcC0+aW9zZWwyKTsKK30KKworLyogQ2FsbGVkIHRvIHNldHVwIHBvcnQgaW9zZWwsIGNhbGxlciBtdXN0IGhvbGQgc3NwLT5sb2NrICovCitzdGF0aWMgdm9pZCBfX3NldF9pb3NlbChzdHJ1Y3QgdGlfc3NwICpzc3AsIGludCBwb3J0LCB1MzIgaW9zZWwpCit7CisJdW5zaWduZWQgdmFsLCBzaGlmdCA9IHBvcnQgPyAxNiA6IDA7CisKKwkvKiBJT1NFTDEgZ2V0cyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgMTYgYml0cyAqLworCXZhbCA9IHNzcF9yZWFkKHNzcCwgUkVHX0lPU0VMXzEpOworCXZhbCAmPSAweGZmZmYgPDwgKHBvcnQgPyAwIDogMTYpOworCXZhbCB8PSAoaW9zZWwgJiAweGZmZmYpIDw8IChwb3J0ID8gMTYgOiAwKTsKKwlzc3Bfd3JpdGUoc3NwLCBSRUdfSU9TRUxfMSwgdmFsKTsKKworCS8qIElPU0VMMiBnZXRzIHRoZSBtb3N0IHNpZ25pZmljYW50IDE2IGJpdHMgKi8KKwl2YWwgPSAoaW9zZWwgPj4gMTYpICYgMHg3OworCV9fc2V0X2lvc2VsMihzc3AsIDB4NyA8PCBzaGlmdCwgdmFsIDw8IHNoaWZ0KTsKK30KKworaW50IHRpX3NzcF9zZXRfaW9zZWwoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgaW9zZWwpCit7CisJc3RydWN0IHRpX3NzcCAqc3NwID0gZGV2X3RvX3NzcChkZXYpOworCWludCBwb3J0ID0gZGV2X3RvX3BvcnQoZGV2KTsKKworCXNwaW5fbG9jaygmc3NwLT5sb2NrKTsKKwlfX3NldF9pb3NlbChzc3AsIHBvcnQsIGlvc2VsKTsKKwlzcGluX3VubG9jaygmc3NwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh0aV9zc3Bfc2V0X2lvc2VsKTsKKworaW50IHRpX3NzcF9sb2FkKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9mZnMsIHUzMiogcHJvZywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgdGlfc3NwICpzc3AgPSBkZXZfdG9fc3NwKGRldik7CisJaW50IHBvcnQgPSBkZXZfdG9fcG9ydChkZXYpOworCWludCBpOworCisJaWYgKGxlbiA+IFNTUF9QT1JUX1NFUVJBTV9TSVpFKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCXNwaW5fbG9jaygmc3NwLT5sb2NrKTsKKworCS8qIEVuYWJsZSBTZXFSQU0gYWNjZXNzICovCisJc3NwX3BvcnRfc2V0X2JpdHMoc3NwLCBwb3J0LCBQT1JUX0NGR18yLCBTU1BfU0VRUkFNX1dSX0VOKTsKKworCS8qIENvcHkgY29kZSAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlfX3Jhd193cml0ZWwocHJvZ1tpXSwgc3NwLT5yZWdzICsgb2ZmcyArIDQqaSArCisJCQkgICAgIHNzcF9wb3J0X3NlcXJhbVtwb3J0XSk7CisJfQorCisJLyogRGlzYWJsZSBTZXFSQU0gYWNjZXNzICovCisJc3NwX3BvcnRfY2xyX2JpdHMoc3NwLCBwb3J0LCBQT1JUX0NGR18yLCBTU1BfU0VRUkFNX1dSX0VOKTsKKworCXNwaW5fdW5sb2NrKCZzc3AtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRpX3NzcF9sb2FkKTsKKworaW50IHRpX3NzcF9yYXdfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRpX3NzcCAqc3NwID0gZGV2X3RvX3NzcChkZXYpOworCWludCBwb3J0ID0gZGV2X3RvX3BvcnQoZGV2KTsKKwlpbnQgc2hpZnQgPSBwb3J0ID8gMjcgOiAxMTsKKworCXJldHVybiAoc3NwX3JlYWQoc3NwLCBSRUdfSU9TRUxfMikgPj4gc2hpZnQpICYgMHhmOworfQorRVhQT1JUX1NZTUJPTCh0aV9zc3BfcmF3X3JlYWQpOworCitpbnQgdGlfc3NwX3Jhd193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiB2YWwpCit7CisJc3RydWN0IHRpX3NzcCAqc3NwID0gZGV2X3RvX3NzcChkZXYpOworCWludCBwb3J0ID0gZGV2X3RvX3BvcnQoZGV2KSwgc2hpZnQ7CisKKwlzcGluX2xvY2soJnNzcC0+bG9jayk7CisKKwlzaGlmdCA9IHBvcnQgPyAyMiA6IDY7CisJdmFsICY9IDB4ZjsKKwlfX3NldF9pb3NlbDIoc3NwLCAweGYgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7CisKKwlzcGluX3VubG9jaygmc3NwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh0aV9zc3BfcmF3X3dyaXRlKTsKKworc3RhdGljIGlubGluZSBpbnQgX194ZmVyX2RvbmUoc3RydWN0IHRpX3NzcCAqc3NwLCBpbnQgcG9ydCkKK3sKKwlyZXR1cm4gIShzc3BfcG9ydF9yZWFkKHNzcCwgcG9ydCwgUE9SVF9DRkdfMSkgJiBTU1BfQlVTWSk7Cit9CisKK2ludCB0aV9zc3BfcnVuKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHBjLCB1MzIgaW5wdXQsIHUzMiAqb3V0cHV0KQoreworCXN0cnVjdCB0aV9zc3AgKnNzcCA9IGRldl90b19zc3AoZGV2KTsKKwlpbnQgcG9ydCA9IGRldl90b19wb3J0KGRldik7CisJaW50IHJldDsKKworCWlmIChwYyAmIH4oMHgzZikpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogR3JhYiBzc3AtPmxvY2sgdG8gc2VyaWFsaXplIHJtdyBvbiBzc3AgcmVnaXN0ZXJzICovCisJc3Bpbl9sb2NrKCZzc3AtPmxvY2spOworCisJc3NwX3BvcnRfd3JpdGUoc3NwLCBwb3J0LCBQT1JUX0FERFIsIGlucHV0ID4+IDE2KTsKKwlzc3BfcG9ydF93cml0ZShzc3AsIHBvcnQsIFBPUlRfREFUQSwgaW5wdXQgJiAweGZmZmYpOworCXNzcF9wb3J0X3Jtdyhzc3AsIHBvcnQsIFBPUlRfQ0ZHXzEsIDB4M2YsIHBjKTsKKworCS8qIGdyYWIgd2FpdCBxdWV1ZSBoZWFkIGxvY2sgdG8gYXZvaWQgcmFjZSB3aXRoIHRoZSBpc3IgKi8KKwlzcGluX2xvY2tfaXJxKCZzc3AtPndxaC5sb2NrKTsKKworCS8qIGtpY2sgb2ZmIHNlcXVlbmNlIGV4ZWN1dGlvbiBpbiBoYXJkd2FyZSAqLworCXNzcF9wb3J0X3NldF9iaXRzKHNzcCwgcG9ydCwgUE9SVF9DRkdfMSwgU1NQX1NUQVJUKTsKKworCS8qIGRyb3Agc3NwIGxvY2s7IG5vIHJlZ2lzdGVyIHdyaXRlcyBiZXlvbmQgdGhpcyAqLworCXNwaW5fdW5sb2NrKCZzc3AtPmxvY2spOworCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tlZF9pcnEoc3NwLT53cWgsCisJCQkJCQkgIF9feGZlcl9kb25lKHNzcCwgcG9ydCkpOworCXNwaW5fdW5sb2NrX2lycSgmc3NwLT53cWgubG9jayk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChvdXRwdXQpIHsKKwkJKm91dHB1dCA9IChzc3BfcG9ydF9yZWFkKHNzcCwgcG9ydCwgUE9SVF9BRERSKSA8PCAxNikgfAorCQkJICAoc3NwX3BvcnRfcmVhZChzc3AsIHBvcnQsIFBPUlRfREFUQSkgJiAgMHhmZmZmKTsKKwl9CisKKwlyZXQgPSBzc3BfcG9ydF9yZWFkKHNzcCwgcG9ydCwgUE9SVF9TVEFURSkgJiAweDNmOyAvKiBzdG9wIGFkZHJlc3MgKi8KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHRpX3NzcF9ydW4pOworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGlfc3NwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfZGF0YSkKK3sKKwlzdHJ1Y3QgdGlfc3NwICpzc3AgPSBkZXZfZGF0YTsKKworCXNwaW5fbG9jaygmc3NwLT53cWgubG9jayk7CisKKwlzc3Bfd3JpdGUoc3NwLCBSRUdfSU5UUl9TVCwgMHgzKTsKKwl3YWtlX3VwX2xvY2tlZCgmc3NwLT53cWgpOworCisJc3Bpbl91bmxvY2soJnNzcC0+d3FoLmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0aV9zc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdGF0aWMgc3RydWN0IHRpX3NzcCAqc3NwOworCWNvbnN0IHN0cnVjdCB0aV9zc3BfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgZXJyb3IgPSAwLCBwcmVkaXYgPSAweGZmLCBpZDsKKwl1bnNpZ25lZCBsb25nIHN5c2NsazsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtZmRfY2VsbCBjZWxsc1syXTsKKworCXNzcCA9IGt6YWxsb2Moc2l6ZW9mKCpzc3ApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNzcCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBkZXZpY2UgaW5mb1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNzcC0+ZGV2ID0gZGV2OworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHNzcCk7CisKKwlzc3AtPnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFzc3AtPnJlcykgeworCQllcnJvciA9IC1FTk9ERVY7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGRldGVybWluZSByZWdpc3RlciBhcmVhXG4iKTsKKwkJZ290byBlcnJvcl9yZXM7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3NwLT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHNzcC0+cmVzKSwKKwkJCQlwZGV2LT5uYW1lKSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3JfcmVzOworCX0KKworCXNzcC0+cmVncyA9IGlvcmVtYXAoc3NwLT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHNzcC0+cmVzKSk7CisJaWYgKCFzc3AtPnJlZ3MpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBtYXAgcmVnaXN0ZXIgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcl9tYXA7CisJfQorCisJc3NwLT5jbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihzc3AtPmNsaykpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKHNzcC0+Y2xrKTsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgY2xhaW0gZGV2aWNlIGNsb2NrXG4iKTsKKwkJZ290byBlcnJvcl9jbGs7CisJfQorCisJc3NwLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChzc3AtPmlycSA8IDApIHsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlkZXZfZXJyKGRldiwgInVua25vd24gaXJxXG4iKTsKKwkJZ290byBlcnJvcl9pcnE7CisJfQorCisJZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycShzc3AtPmlycSwgTlVMTCwgdGlfc3NwX2ludGVycnVwdCwgMCwKKwkJCQkgICAgIGRldl9uYW1lKGRldiksIHNzcCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhY3F1aXJlIGlycVxuIik7CisJCWdvdG8gZXJyb3JfaXJxOworCX0KKworCXNwaW5fbG9ja19pbml0KCZzc3AtPmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNzcC0+d3FoKTsKKworCS8qIFBvd2VyIG9uIGFuZCBpbml0aWFsaXplIFNTUCAqLworCWVycm9yID0gY2xrX2VuYWJsZShzc3AtPmNsayk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGVuYWJsZSBkZXZpY2UgY2xvY2tcbiIpOworCQlnb3RvIGVycm9yX2VuYWJsZTsKKwl9CisKKwkvKiBSZXNldCByZWdpc3RlcnMgdG8gYSBzZW5zaWJsZSBrbm93biBzdGF0ZSAqLworCXNzcF93cml0ZShzc3AsIFJFR19JT1NFTF8xLCAwKTsKKwlzc3Bfd3JpdGUoc3NwLCBSRUdfSU9TRUxfMiwgMCk7CisJc3NwX3dyaXRlKHNzcCwgUkVHX0lOVFJfRU4sIDB4Myk7CisJc3NwX3dyaXRlKHNzcCwgUkVHX0lOVFJfU1QsIDB4Myk7CisJc3NwX3dyaXRlKHNzcCwgUkVHX1RFU1RfQ1RSTCwgMCk7CisJc3NwX3BvcnRfd3JpdGUoc3NwLCAwLCBQT1JUX0NGR18xLCBTU1BfUE9SVF9BU0wpOworCXNzcF9wb3J0X3dyaXRlKHNzcCwgMSwgUE9SVF9DRkdfMSwgU1NQX1BPUlRfQVNMKTsKKwlzc3BfcG9ydF93cml0ZShzc3AsIDAsIFBPUlRfQ0ZHXzIsIFNTUF9QT1JUX0NGTzEpOworCXNzcF9wb3J0X3dyaXRlKHNzcCwgMSwgUE9SVF9DRkdfMiwgU1NQX1BPUlRfQ0ZPMSk7CisKKwlzeXNjbGsgPSBjbGtfZ2V0X3JhdGUoc3NwLT5jbGspOworCWlmIChwZGF0YSAmJiBwZGF0YS0+b3V0X2Nsb2NrKQorCQlwcmVkaXYgPSAoc3lzY2xrIC8gcGRhdGEtPm91dF9jbG9jaykgLSAxOworCXByZWRpdiA9IGNsYW1wKHByZWRpdiwgMCwgMHhmZik7CisJc3NwX3Jtdyhzc3AsIFJFR19QUkVESVYsIDB4ZmYsIHByZWRpdik7CisKKwltZW1zZXQoY2VsbHMsIDAsIHNpemVvZihjZWxscykpOworCWZvciAoaWQgPSAwOyBpZCA8IDI7IGlkKyspIHsKKwkJY29uc3Qgc3RydWN0IHRpX3NzcF9kZXZfZGF0YSAqZGF0YSA9ICZwZGF0YS0+ZGV2X2RhdGFbaWRdOworCisJCWNlbGxzW2lkXS5pZAkJPSBpZDsKKwkJY2VsbHNbaWRdLm5hbWUJCT0gZGF0YS0+ZGV2X25hbWU7CisJCWNlbGxzW2lkXS5wbGF0Zm9ybV9kYXRhCT0gZGF0YS0+cGRhdGE7CisJCWNlbGxzW2lkXS5kYXRhX3NpemUJPSBkYXRhLT5wZGF0YV9zaXplOworCX0KKworCWVycm9yID0gbWZkX2FkZF9kZXZpY2VzKGRldiwgMCwgY2VsbHMsIDIsIE5VTEwsIDApOworCWlmIChlcnJvciA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgYWRkIG1mZCBjZWxsc1xuIik7CisJCWdvdG8gZXJyb3JfZW5hYmxlOworCX0KKworCXJldHVybiAwOworCitlcnJvcl9lbmFibGU6CisJZnJlZV9pcnEoc3NwLT5pcnEsIHNzcCk7CitlcnJvcl9pcnE6CisJY2xrX3B1dChzc3AtPmNsayk7CitlcnJvcl9jbGs6CisJaW91bm1hcChzc3AtPnJlZ3MpOworZXJyb3JfbWFwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihzc3AtPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoc3NwLT5yZXMpKTsKK2Vycm9yX3JlczoKKwlrZnJlZShzc3ApOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGlfc3NwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHRpX3NzcCAqc3NwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltZmRfcmVtb3ZlX2RldmljZXMoZGV2KTsKKwljbGtfZGlzYWJsZShzc3AtPmNsayk7CisJZnJlZV9pcnEoc3NwLT5pcnEsIHNzcCk7CisJY2xrX3B1dChzc3AtPmNsayk7CisJaW91bm1hcChzc3AtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihzc3AtPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoc3NwLT5yZXMpKTsKKwlrZnJlZShzc3ApOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aV9zc3BfZHJpdmVyID0geworCS5wcm9iZQkJPSB0aV9zc3BfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0aV9zc3BfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAidGktc3NwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgdGlfc3NwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aV9zc3BfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHRpX3NzcF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHRpX3NzcF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpX3NzcF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodGlfc3NwX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNlcXVlbmNlciBTZXJpYWwgUG9ydCAoU1NQKSBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkN5cmlsIENoZW1wYXJhdGh5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnRpLXNzcCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCBiN2Q1ZWYyLi40ZTAwN2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMiw2ICsyLDE0IEBACiAjIE1pc2Mgc3RyYW5nZSBkZXZpY2VzCiAjCiAKKyMgVGhpcyBvbmUgaGFzIHRvIGxpdmUgb3V0c2lkZSBvZiB0aGUgTUlTQ19ERVZJQ0VTIGNvbmRpdGlvbmFsLAorIyBiZWNhdXNlIGl0IG1heSBiZSBzZWxlY3RlZCBieSBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocF9hY2NlbC4KK2NvbmZpZyBTRU5TT1JTX0xJUzNMVjAyRAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJTlBVVAorCXNlbGVjdCBJTlBVVF9QT0xMREVWCisJZGVmYXVsdCBuCisKIG1lbnVjb25maWcgTUlTQ19ERVZJQ0VTCiAJYm9vbCAiTWlzYyBkZXZpY2VzIgogCS0tLWhlbHAtLS0KQEAgLTM5NCw2ICs0MDIsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGRzMTY4Mi4KIAorY29uZmlnIFNQRUFSMTNYWF9QQ0lFX0dBREdFVAorCWJvb2wgIlBDSWUgZ2FkZ2V0IHN1cHBvcnQgZm9yIFNQRUFyMTNYWCBwbGF0Zm9ybSIKKwlkZXBlbmRzIG9uIEFSQ0hfU1BFQVIxM1hYCisJZGVmYXVsdCBuCisJaGVscAorCSBUaGlzIG9wdGlvbiBlbmFibGVzIGdhZGdldCBzdXBwb3J0IGZvciBQQ0llIGNvbnRyb2xsZXIuIElmCisJIGJvYXJkIGZpbGUgZGVmaW5lcyBhbnkgY29udHJvbGxlciBhcyBQQ0llIGVuZHBvaW50IHRoZW4gYSBzeXNmcworCSBlbnRyeSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoYXQgY29udHJvbGxlci4gVXNlciBjYW4gdXNlIHRoZXNlCisJIHN5c2ZzIG5vZGUgdG8gY29uZmlndXJlIFBDSWUgRVAgYXMgcGVyIGhpcyByZXF1aXJlbWVudHMuCisKIGNvbmZpZyBUSV9EQUM3NTEyCiAJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIERBQzc1MTIiCiAJZGVwZW5kcyBvbiBTUEkgJiYgU1lTRlMKQEAgLTQ2Miw1ICs0ODAsNiBAQAogc291cmNlICJkcml2ZXJzL21pc2MvY2I3MTAvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy90aS1zdC9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL21pc2MvbGlzM2x2MDJkL0tjb25maWciCiAKIGVuZGlmICMgTUlTQ19ERVZJQ0VTCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggOTgwMDljYy4uZjU0Njg2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtMzcsOCArMzcsMTAgQEAKIG9iai0kKENPTkZJR19ITUM2MzUyKQkJKz0gaG1jNjM1Mi5vCiBvYmoteQkJCQkrPSBlZXByb20vCiBvYmoteQkJCQkrPSBjYjcxMC8KK29iai0kKENPTkZJR19TUEVBUjEzWFhfUENJRV9HQURHRVQpCSs9IHNwZWFyMTN4eF9wY2llX2dhZGdldC5vCiBvYmotJChDT05GSUdfVk1XQVJFX0JBTExPT04pCSs9IHZtd19iYWxsb29uLm8KIG9iai0kKENPTkZJR19BUk1fQ0hBUkxDRCkJKz0gYXJtLWNoYXJsY2Qubwogb2JqLSQoQ09ORklHX1BDSF9QSFVCKQkJKz0gcGNoX3BodWIubwogb2JqLXkJCQkJKz0gdGktc3QvCiBvYmotJChDT05GSUdfQUI4NTAwX1BXTSkJKz0gYWI4NTAwLXB3bS5vCitvYmoteQkJCQkrPSBsaXMzbHYwMmQvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYXBkczk4MDJhbHMuYyBiL2RyaXZlcnMvbWlzYy9hcGRzOTgwMmFscy5jCmluZGV4IDY0NGQ0Y2QuLjgxZGI3ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9hcGRzOTgwMmFscy5jCisrKyBiL2RyaXZlcnMvbWlzYy9hcGRzOTgwMmFscy5jCkBAIC0yNDUsOSArMjQ1LDggQEAKIAlhbHNfc2V0X2RlZmF1bHRfY29uZmlnKGNsaWVudCk7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+bXV0ZXgpOwogCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZjbGllbnQtPmRldik7CiAJcG1fcnVudGltZV9lbmFibGUoJmNsaWVudC0+ZGV2KTsKLQlwbV9ydW50aW1lX2dldCgmY2xpZW50LT5kZXYpOwotCXBtX3J1bnRpbWVfcHV0KCZjbGllbnQtPmRldik7CiAKIAlyZXR1cm4gcmVzOwogYWxzX2Vycm9yMToKQEAgLTI1NSwxMiArMjU0LDE5IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBhcGRzOTgwMmFsc19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFwZHM5ODAyYWxzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBhbHNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCisJcG1fcnVudGltZV9nZXRfc3luYygmY2xpZW50LT5kZXYpOworCiAJYWxzX3NldF9wb3dlcl9zdGF0ZShjbGllbnQsIGZhbHNlKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZtX2Fsc19ncik7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJmNsaWVudC0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmNsaWVudC0+ZGV2KTsKKwogCWtmcmVlKGRhdGEpOwogCXJldHVybiAwOwogfQpAQCAtMjc1LDkgKzI4MSw2IEBACiBzdGF0aWMgaW50IGFwZHM5ODAyYWxzX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCWFsc19zZXRfZGVmYXVsdF9jb25maWcoY2xpZW50KTsKLQotCXBtX3J1bnRpbWVfZ2V0KCZjbGllbnQtPmRldik7Ci0JcG1fcnVudGltZV9wdXQoJmNsaWVudC0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzIzLDcgKzMyNiw3IEBACiAJCS5wbSA9IEFQRFM5ODAyQUxTX1BNX09QUywKIAl9LAogCS5wcm9iZSA9IGFwZHM5ODAyYWxzX3Byb2JlLAotCS5yZW1vdmUgPSBhcGRzOTgwMmFsc19yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFwZHM5ODAyYWxzX3JlbW92ZSksCiAJLnN1c3BlbmQgPSBhcGRzOTgwMmFsc19zdXNwZW5kLAogCS5yZXN1bWUgPSBhcGRzOTgwMmFsc19yZXN1bWUsCiAJLmlkX3RhYmxlID0gYXBkczk4MDJhbHNfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYXRtZWxfdGNsaWIuYyBiL2RyaXZlcnMvbWlzYy9hdG1lbF90Y2xpYi5jCmluZGV4IDM4OTExMjQuLmE4NDQ4MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9hdG1lbF90Y2xpYi5jCisrKyBiL2RyaXZlcnMvbWlzYy9hdG1lbF90Y2xpYi5jCkBAIC03NSw3ICs3NSw3IEBACiAJcmV0dXJuIHRjOwogCiBmYWlsX2lvcmVtYXA6Ci0JcmVsZWFzZV9yZXNvdXJjZShyKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIEFUTUVMX1RDX0lPTUVNX1NJWkUpOwogZmFpbDoKIAl0YyA9IE5VTEw7CiAJZ290byBvdXQ7CkBAIC05NSw3ICs5NSw3IEBACiAJc3Bpbl9sb2NrKCZ0Y19saXN0X2xvY2spOwogCWlmICh0Yy0+cmVncykgewogCQlpb3VubWFwKHRjLT5yZWdzKTsKLQkJcmVsZWFzZV9yZXNvdXJjZSh0Yy0+aW9tZW0pOworCQlyZWxlYXNlX21lbV9yZWdpb24odGMtPmlvbWVtLT5zdGFydCwgQVRNRUxfVENfSU9NRU1fU0laRSk7CiAJCXRjLT5yZWdzID0gTlVMTDsKIAkJdGMtPmlvbWVtID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYmgxNzgwZ2xpLmMgYi9kcml2ZXJzL21pc2MvYmgxNzgwZ2xpLmMKaW5kZXggZDVmM2EzZi4uZDA3Y2Q2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2JoMTc4MGdsaS5jCisrKyBiL2RyaXZlcnMvbWlzYy9iaDE3ODBnbGkuYwpAQCAtMTk2LDEwICsxOTYsMTEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBiaDE3ODBfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgYmgxNzgwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBiaDE3ODBfZGF0YSAqZGRhdGE7CiAJaW50IHN0YXRlLCByZXQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAogCWRkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RhdGUgPSBiaDE3ODBfcmVhZChkZGF0YSwgQkgxNzgwX1JFR19DT05UUk9MLCAiQ09OVFJPTCIpOwpAQCAtMjE3LDE0ICsyMTgsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiaDE3ODBfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGJoMTc4MF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBiaDE3ODBfZGF0YSAqZGRhdGE7CiAJaW50IHN0YXRlLCByZXQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAogCWRkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RhdGUgPSBkZGF0YS0+cG93ZXJfc3RhdGU7Ci0KIAlyZXQgPSBiaDE3ODBfd3JpdGUoZGRhdGEsIEJIMTc4MF9SRUdfQ09OVFJPTCwgc3RhdGUsCiAJCQkJIkNPTlRST0wiKTsKIApAQCAtMjMzLDkgKzIzNCwxMCBAQAogCiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYmgxNzgwX3BtLCBiaDE3ODBfc3VzcGVuZCwgYmgxNzgwX3Jlc3VtZSk7CisjZGVmaW5lIEJIMTc4MF9QTU9QUyAoJmJoMTc4MF9wbSkKICNlbHNlCi0jZGVmaW5lIGJoMTc4MF9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgYmgxNzgwX3Jlc3VtZSBOVUxMCisjZGVmaW5lIEJIMTc4MF9QTU9QUyBOVUxMCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBiaDE3ODBfaWRbXSA9IHsKQEAgLTI0NywxMSArMjQ5LDEwIEBACiAJLnByb2JlCQk9IGJoMTc4MF9wcm9iZSwKIAkucmVtb3ZlCQk9IGJoMTc4MF9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gYmgxNzgwX2lkLAotCS5zdXNwZW5kCT0gYmgxNzgwX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBiaDE3ODBfcmVzdW1lLAogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImJoMTc4MCIKLQl9LAorCQkubmFtZSA9ICJiaDE3ODAiLAorCQkucG0JPSBCSDE3ODBfUE1PUFMsCit9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYmgxNzgwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ibXAwODUuYyBiL2RyaXZlcnMvbWlzYy9ibXAwODUuYwppbmRleCBiNmUxYzlhLi5lY2QyNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvYm1wMDg1LmMKKysrIGIvZHJpdmVycy9taXNjL2JtcDA4NS5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IGJtcDA4NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBfX2RldmluaXQgYm1wMDg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBibXAwODVfZGF0YSAqZGF0YTsKQEAgLTQzOCw3ICs0MzgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYm1wMDg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgYm1wMDg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmJtcDA4NV9hdHRyX2dyb3VwKTsKIAlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CkBAIC00NTgsNyArNDU4LDcgQEAKIAl9LAogCS5pZF90YWJsZQk9IGJtcDA4NV9pZCwKIAkucHJvYmUJCT0gYm1wMDg1X3Byb2JlLAotCS5yZW1vdmUJCT0gYm1wMDg1X3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGJtcDA4NV9yZW1vdmUpLAogCiAJLmRldGVjdAkJPSBibXAwODVfZGV0ZWN0LAogCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY2I3MTAvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvY2I3MTAvTWFrZWZpbGUKaW5kZXggN2I4MGNiZi4uNDY3YzhlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2NiNzEwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9jYjcxMC9NYWtlZmlsZQpAQCAtMSw2ICsxLDQgQEAKLWlmZXEgKCQoQ09ORklHX0NCNzEwX0RFQlVHKSx5KQotCUVYVFJBX0NGTEFHUwkJKz0gLURERUJVRwotZW5kaWYKK2NjZmxhZ3MtJChDT05GSUdfQ0I3MTBfREVCVUcpCTo9IC1EREVCVUcKIAogb2JqLSQoQ09ORklHX0NCNzEwX0NPUkUpCSs9IGNiNzEwLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VwOTN4eF9wd20uYyBiL2RyaXZlcnMvbWlzYy9lcDkzeHhfcHdtLmMKaW5kZXggNDZiMzQzOS4uMTZkNzE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VwOTN4eF9wd20uYworKysgYi9kcml2ZXJzL21pc2MvZXA5M3h4X3B3bS5jCkBAIC0yNDksMTEgKzI0OSwxMSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIobWluX2ZyZXEsIFNfSVJVR08sIGVwOTN4eF9wd21fZ2V0X21pbl9mcmVxLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihtYXhfZnJlcSwgU19JUlVHTywgZXA5M3h4X3B3bV9nZXRfbWF4X2ZyZXEsIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKGZyZXEsIFNfSVdVR08gfCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGZyZXEsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBlcDkzeHhfcHdtX2dldF9mcmVxLCBlcDkzeHhfcHdtX3NldF9mcmVxKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihkdXR5X3BlcmNlbnQsIFNfSVdVR08gfCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGR1dHlfcGVyY2VudCwgU19JV1VTUiB8IFNfSVJVR08sCiAJCSAgIGVwOTN4eF9wd21fZ2V0X2R1dHlfcGVyY2VudCwgZXA5M3h4X3B3bV9zZXRfZHV0eV9wZXJjZW50KTsKLXN0YXRpYyBERVZJQ0VfQVRUUihpbnZlcnQsIFNfSVdVR08gfCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGludmVydCwgU19JV1VTUiB8IFNfSVJVR08sCiAJCSAgIGVwOTN4eF9wd21fZ2V0X2ludmVydCwgZXA5M3h4X3B3bV9zZXRfaW52ZXJ0KTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmVwOTN4eF9wd21fYXR0cnNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9obWM2MzUyLmMgYi9kcml2ZXJzL21pc2MvaG1jNjM1Mi5jCmluZGV4IDIzNGJmY2EuLmNhOTM4ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9obWM2MzUyLmMKKysrIGIvZHJpdmVycy9taXNjL2htYzYzNTIuYwpAQCAtNzUsNyArNzUsNyBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJdW5zaWduZWQgY2hhciBpMmNfZGF0YVsyXTsKLQl1bnNpZ25lZCBpbnQgcmV0OworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjb21wYXNzX211dGV4KTsKIAlyZXQgPSBjb21wYXNzX2NvbW1hbmQoY2xpZW50LCAnQScpOwpAQCAtODYsNyArODYsNyBAQAogCW1zbGVlcCgxMCk7IC8qIHNlbmRpbmcgJ0EnIGNtZCB3ZSBuZWVkIHRvIHdhaXQgZm9yIDctMTAgbWlsbGlzZWNzICovCiAJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgaTJjX2RhdGEsIDIpOwogCW11dGV4X3VubG9jaygmY29tcGFzc19tdXRleCk7Ci0JaWYgKHJldCAhPSAxKSB7CisJaWYgKHJldCA8IDApIHsKIAkJZGV2X3dhcm4oZGV2LCAiaTJjIHJlYWQgZGF0YSBjbWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL0tjb25maWcgYi9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0NzRlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9saXMzbHYwMmQvS2NvbmZpZwpAQCAtMCwwICsxLDM3IEBACisjCisjIFNUTWljcm9lbGVjdG9uaWNzIExJUzNMVjAyRCBhbmQgc2ltaWxhciBhY2NlbGVyb21ldGVycworIworCitjb25maWcgU0VOU09SU19MSVMzX1NQSQorCXRyaXN0YXRlICJTVE1pY3JvZWxldHJvbmljcyBMSVMzTFYwMkR4IHRocmVlLWF4aXMgZGlnaXRhbCBhY2NlbGVyb21ldGVyIChTUEkpIgorCWRlcGVuZHMgb24gIUFDUEkgJiYgU1BJX01BU1RFUiAmJiBJTlBVVAorCXNlbGVjdCBTRU5TT1JTX0xJUzNMVjAyRAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBMSVMzTFYwMkR4IGFjY2VsZXJvbWV0ZXIgY29ubmVjdGVkCisJICB2aWEgU1BJLiBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYQorCSAgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4KKworCSAgVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCisJICB0aGUgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgbW9kdWxlcy4gIElmIHNvLCB0aGUgY29yZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGxpczNsdjAyZCBhbmQgYSBzcGVjaWZpYyBtb2R1bGUgZm9yIHRoZSBTUEkgdHJhbnNwb3J0CisJICBpcyBjYWxsZWQgbGlzM2x2MDJkX3NwaS4KKworY29uZmlnIFNFTlNPUlNfTElTM19JMkMKKwl0cmlzdGF0ZSAiU1RNaWNyb2VsZXRyb25pY3MgTElTM0xWMDJEeCB0aHJlZS1heGlzIGRpZ2l0YWwgYWNjZWxlcm9tZXRlciAoSTJDKSIKKwlkZXBlbmRzIG9uIEkyQyAmJiBJTlBVVAorCXNlbGVjdCBTRU5TT1JTX0xJUzNMVjAyRAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBMSVMzTFYwMkR4IGFjY2VsZXJvbWV0ZXIgY29ubmVjdGVkCisJICB2aWEgSTJDLiBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYQorCSAgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4KKworCSAgVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCisJICB0aGUgZGV2aWNlIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgbW9kdWxlcy4gIElmIHNvLCB0aGUgY29yZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGxpczNsdjAyZCBhbmQgYSBzcGVjaWZpYyBtb2R1bGUgZm9yIHRoZSBJMkMgdHJhbnNwb3J0CisJICBpcyBjYWxsZWQgbGlzM2x2MDJkX2kyYy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9saXMzbHYwMmQvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjU4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBTVE1pY3JvZWxlY3RvbmljcyBMSVMzTFYwMkQgYW5kIHNpbWlsYXIgYWNjZWxlcm9tZXRlcnMKKyMKKworb2JqLSQoQ09ORklHX1NFTlNPUlNfTElTM0xWMDJEKSArPSBsaXMzbHYwMmQubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTElTM19TUEkpCSs9IGxpczNsdjAyZF9zcGkubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTElTM19JMkMpCSs9IGxpczNsdjAyZF9pMmMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYyBiL2RyaXZlcnMvbWlzYy9saXMzbHYwMmQvbGlzM2x2MDJkLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwpyZW5hbWUgdG8gZHJpdmVycy9taXNjL2xpczNsdjAyZC9saXMzbHYwMmQuYwppbmRleCBkODA1ZThlLi5iOTI4YmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCisrKyBiL2RyaXZlcnMvbWlzYy9saXMzbHYwMmQvbGlzM2x2MDJkLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSAibGlzM2x2MDJkLmgiCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgICAgICJsaXMzbHYwMmQiCkBAIC04OCw3ICs4OCw2IEBACiBzdHJ1Y3QgbGlzM2x2MDJkIGxpczNfZGV2ID0gewogCS5taXNjX3dhaXQgICA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKGxpczNfZGV2Lm1pc2Nfd2FpdCksCiB9OwotCiBFWFBPUlRfU1lNQk9MX0dQTChsaXMzX2Rldik7CiAKIC8qIGp1c3QgbGlrZSBwYXJhbV9zZXRfaW50KCkgYnV0IGRvZXMgc2FuaXR5LWNoZWNrIHNvIHRoYXQgaXQgd29uJ3QgcG9pbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmggYi9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5oCnJlbmFtZSB0byBkcml2ZXJzL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9pMmMuYyBiL2RyaXZlcnMvbWlzYy9saXMzbHYwMmQvbGlzM2x2MDJkX2kyYy5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvaHdtb24vbGlzM2x2MDJkX2kyYy5jCnJlbmFtZSB0byBkcml2ZXJzL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZF9pMmMuYwppbmRleCA4ODUzYWZjLi5iMjBkZmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9pMmMuYworKysgYi9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZF9pMmMuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAibGlzM2x2MDJkLmgiCiAKLSNkZWZpbmUgRFJWX05BTUUgCSJsaXMzbHYwMmRfaTJjIgorI2RlZmluZSBEUlZfTkFNRQkibGlzM2x2MDJkX2kyYyIKIAogc3RhdGljIGNvbnN0IGNoYXIgcmVnX3ZkZFtdICAgID0gIlZkZCI7CiBzdGF0aWMgY29uc3QgY2hhciByZWdfdmRkX2lvW10gPSAiVmRkX0lPIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jIGIvZHJpdmVycy9taXNjL2xpczNsdjAyZC9saXMzbHYwMmRfc3BpLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCnJlbmFtZSB0byBkcml2ZXJzL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZF9zcGkuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3BjaF9waHViLmMgYi9kcml2ZXJzL21pc2MvcGNoX3BodWIuYwppbmRleCAzODBiYTgwLi5hMTljYjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvcGNoX3BodWIuYworKysgYi9kcml2ZXJzL21pc2MvcGNoX3BodWIuYwpAQCAtNzM1LDYgKzczNSw3IEBACiAJeyBQQ0lfVkRFVklDRShST0hNLCBQQ0lfREVWSUNFX0lEX1JPSE1fTUw3MjEzX1BIVUIpLCAyLCAgfSwKIAl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNoX3BodWJfcGNpZGV2X2lkKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaF9waHViX2RyaXZlciA9IHsKIAkubmFtZSA9ICJwY2hfcGh1YiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9NYWtlZmlsZSBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L01ha2VmaWxlCmluZGV4IDdjNGMzMDYuLjAwMDNhMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L01ha2VmaWxlCkBAIC0xLDYgKzEsNCBAQAotaWZkZWYgQ09ORklHX1NHSV9HUlVfREVCVUcKLSAgRVhUUkFfQ0ZMQUdTCSs9IC1EREVCVUcKLWVuZGlmCitjY2ZsYWdzLSQoQ09ORklHX1NHSV9HUlVfREVCVUcpCTo9IC1EREVCVUcKIAogb2JqLSQoQ09ORklHX1NHSV9HUlUpIDo9IGdydS5vCiBncnUteSA6PSBncnVmaWxlLm8gZ3J1bWFpbi5vIGdydWZhdWx0Lm8gZ3J1dGxicHVyZ2UubyBncnVwcm9jZnMubyBncnVrc2VydmljZXMubyBncnVoYW5kbGVzLm8gZ3J1a2R1bXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NwZWFyMTN4eF9wY2llX2dhZGdldC5jIGIvZHJpdmVycy9taXNjL3NwZWFyMTN4eF9wY2llX2dhZGdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjM2I4YzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2Mvc3BlYXIxM3h4X3BjaWVfZ2FkZ2V0LmMKQEAgLTAsMCArMSw5MDggQEAKKy8qCisgKiBkcml2ZXJzL21pc2Mvc3BlYXIxM3h4X3BjaWVfZ2FkZ2V0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU1QgTWljcm9lbGVjdHJvbmljcworICogUHJhdHl1c2ggQW5hbmQ8cHJhdHl1c2guYW5hbmRAc3QuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX3JlZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWdmcy5oPgorI2luY2x1ZGUgPG1hY2gvcGNpZS5oPgorI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CisKKyNkZWZpbmUgSU4wX01FTV9TSVpFCSgyMDAgKiAxMDI0ICogMTAyNCAtIDEpCisvKiBJbiBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgZG9uZSB1c2luZyBJTjAgb25seS4KKyAqIFNvIElOMSBzdGFydCBhZGRyZXNzIGFuZCBJTjAgZW5kIGFkZHJlc3MgaGFzIGJlZW4ga2VwdCBzYW1lCisqLworI2RlZmluZSBJTjFfTUVNX1NJWkUJKDAgKiAxMDI0ICogMTAyNCAtIDEpCisjZGVmaW5lIElOX0lPX1NJWkUJKDIwICogMTAyNCAqIDEwMjQgLSAxKQorI2RlZmluZSBJTl9DRkcwX1NJWkUJKDEyICogMTAyNCAqIDEwMjQgLSAxKQorI2RlZmluZSBJTl9DRkcxX1NJWkUJKDEyICogMTAyNCAqIDEwMjQgLSAxKQorI2RlZmluZSBJTl9NU0dfU0laRQkoMTIgKiAxMDI0ICogMTAyNCAtIDEpCisvKiBLZWVwIGRlZmF1bHQgQkFSIHNpemUgYXMgNEsqLworLyogQU9SQU0gd291bGQgYmUgbWFwcGVkIGJ5IGRlZmF1bHQqLworI2RlZmluZSBJTkJPVU5EX0FERFJfTUFTSwkoU1BFQVIxM1hYX1NZU1JBTTFfU0laRSAtIDEpCisKKyNkZWZpbmUgSU5UX1RZUEVfTk9fSU5UCTAKKyNkZWZpbmUgSU5UX1RZUEVfSU5UWAkxCisjZGVmaW5lIElOVF9UWVBFX01TSQkyCitzdHJ1Y3Qgc3BlYXJfcGNpZV9nYWRnZXRfY29uZmlnIHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdm9pZCBfX2lvbWVtICp2YV9hcHBfYmFzZTsKKwl2b2lkIF9faW9tZW0gKnZhX2RiaV9iYXNlOworCWNoYXIgaW50X3R5cGVbMTBdOworCXVsb25nIHJlcXVlc3RlZF9tc2k7CisJdWxvbmcgY29uZmlndXJlZF9tc2k7CisJdWxvbmcgYmFyMF9zaXplOworCXVsb25nIGJhcjBfcndfb2Zmc2V0OworCXZvaWQgX19pb21lbSAqdmFfYmFyMF9hZGRyZXNzOworfTsKKworc3RydWN0IHBjaWVfZ2FkZ2V0X3RhcmdldCB7CisJc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBzdWJzeXM7CisJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyBjb25maWc7Cit9OworCitzdHJ1Y3QgcGNpZV9nYWRnZXRfdGFyZ2V0X2F0dHIgeworCXN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUJYXR0cjsKKwlzc2l6ZV90CQkoKnNob3cpKHN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJCQkJCWNoYXIgKmJ1Zik7CisJc3NpemVfdAkJKCpzdG9yZSkoc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQkJCQkJIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJCSBzaXplX3QgY291bnQpOworfTsKKworc3RhdGljIHZvaWQgZW5hYmxlX2RiaV9hY2Nlc3Moc3RydWN0IHBjaWVfYXBwX3JlZyBfX2lvbWVtICphcHBfcmVnKQoreworCS8qIEVuYWJsZSBEQkkgYWNjZXNzICovCisJd3JpdGVsKHJlYWRsKCZhcHBfcmVnLT5zbHZfYXJtaXNjKSB8ICgxIDw8IEFYSV9PUF9EQklfQUNDRVNTX0lEKSwKKwkJCSZhcHBfcmVnLT5zbHZfYXJtaXNjKTsKKwl3cml0ZWwocmVhZGwoJmFwcF9yZWctPnNsdl9hd21pc2MpIHwgKDEgPDwgQVhJX09QX0RCSV9BQ0NFU1NfSUQpLAorCQkJJmFwcF9yZWctPnNsdl9hd21pc2MpOworCit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfZGJpX2FjY2VzcyhzdHJ1Y3QgcGNpZV9hcHBfcmVnIF9faW9tZW0gKmFwcF9yZWcpCit7CisJLyogZGlzYWJsZSBEQkkgYWNjZXNzICovCisJd3JpdGVsKHJlYWRsKCZhcHBfcmVnLT5zbHZfYXJtaXNjKSAmIH4oMSA8PCBBWElfT1BfREJJX0FDQ0VTU19JRCksCisJCQkmYXBwX3JlZy0+c2x2X2FybWlzYyk7CisJd3JpdGVsKHJlYWRsKCZhcHBfcmVnLT5zbHZfYXdtaXNjKSAmIH4oMSA8PCBBWElfT1BfREJJX0FDQ0VTU19JRCksCisJCQkmYXBwX3JlZy0+c2x2X2F3bWlzYyk7CisKK30KKworc3RhdGljIHZvaWQgc3BlYXJfZGJpX3JlYWRfcmVnKHN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJc3RydWN0IHBjaWVfYXBwX3JlZyBfX2lvbWVtICphcHBfcmVnID0gY29uZmlnLT52YV9hcHBfYmFzZTsKKwl1bG9uZyB2YV9hZGRyZXNzOworCisJLyogRW5hYmxlIERCSSBhY2Nlc3MgKi8KKwllbmFibGVfZGJpX2FjY2VzcyhhcHBfcmVnKTsKKworCXZhX2FkZHJlc3MgPSAodWxvbmcpY29uZmlnLT52YV9kYmlfYmFzZSArICh3aGVyZSAmIH4weDMpOworCisJKnZhbCA9IHJlYWRsKHZhX2FkZHJlc3MpOworCisJaWYgKHNpemUgPT0gMSkKKwkJKnZhbCA9ICgqdmFsID4+ICg4ICogKHdoZXJlICYgMykpKSAmIDB4ZmY7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQkqdmFsID0gKCp2YWwgPj4gKDggKiAod2hlcmUgJiAzKSkpICYgMHhmZmZmOworCisJLyogRGlzYWJsZSBEQkkgYWNjZXNzICovCisJZGlzYWJsZV9kYmlfYWNjZXNzKGFwcF9yZWcpOworfQorCitzdGF0aWMgdm9pZCBzcGVhcl9kYmlfd3JpdGVfcmVnKHN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgcGNpZV9hcHBfcmVnIF9faW9tZW0gKmFwcF9yZWcgPSBjb25maWctPnZhX2FwcF9iYXNlOworCXVsb25nIHZhX2FkZHJlc3M7CisKKwkvKiBFbmFibGUgREJJIGFjY2VzcyAqLworCWVuYWJsZV9kYmlfYWNjZXNzKGFwcF9yZWcpOworCisJdmFfYWRkcmVzcyA9ICh1bG9uZyljb25maWctPnZhX2RiaV9iYXNlICsgKHdoZXJlICYgfjB4Myk7CisKKwlpZiAoc2l6ZSA9PSA0KQorCQl3cml0ZWwodmFsLCB2YV9hZGRyZXNzKTsKKwllbHNlIGlmIChzaXplID09IDIpCisJCXdyaXRldyh2YWwsIHZhX2FkZHJlc3MgKyAod2hlcmUgJiAyKSk7CisJZWxzZSBpZiAoc2l6ZSA9PSAxKQorCQl3cml0ZWIodmFsLCB2YV9hZGRyZXNzICsgKHdoZXJlICYgMykpOworCisJLyogRGlzYWJsZSBEQkkgYWNjZXNzICovCisJZGlzYWJsZV9kYmlfYWNjZXNzKGFwcF9yZWcpOworfQorCisjZGVmaW5lIFBDSV9GSU5EX0NBUF9UVEwJNDgKKworc3RhdGljIGludCBwY2lfZmluZF9vd25fbmV4dF9jYXBfdHRsKHN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJdTMyIHBvcywgaW50IGNhcCwgaW50ICp0dGwpCit7CisJdTMyIGlkOworCisJd2hpbGUgKCgqdHRsKS0tKSB7CisJCXNwZWFyX2RiaV9yZWFkX3JlZyhjb25maWcsIHBvcywgMSwgJnBvcyk7CisJCWlmIChwb3MgPCAweDQwKQorCQkJYnJlYWs7CisJCXBvcyAmPSB+MzsKKwkJc3BlYXJfZGJpX3JlYWRfcmVnKGNvbmZpZywgcG9zICsgUENJX0NBUF9MSVNUX0lELCAxLCAmaWQpOworCQlpZiAoaWQgPT0gMHhmZikKKwkJCWJyZWFrOworCQlpZiAoaWQgPT0gY2FwKQorCQkJcmV0dXJuIHBvczsKKwkJcG9zICs9IFBDSV9DQVBfTElTVF9ORVhUOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2lfZmluZF9vd25fbmV4dF9jYXAoc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQkJdTMyIHBvcywgaW50IGNhcCkKK3sKKwlpbnQgdHRsID0gUENJX0ZJTkRfQ0FQX1RUTDsKKworCXJldHVybiBwY2lfZmluZF9vd25fbmV4dF9jYXBfdHRsKGNvbmZpZywgcG9zLCBjYXAsICZ0dGwpOworfQorCitzdGF0aWMgaW50IHBjaV9maW5kX293bl9jYXBfc3RhcnQoc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQkJCXU4IGhkcl90eXBlKQoreworCXUzMiBzdGF0dXM7CisKKwlzcGVhcl9kYmlfcmVhZF9yZWcoY29uZmlnLCBQQ0lfU1RBVFVTLCAyLCAmc3RhdHVzKTsKKwlpZiAoIShzdGF0dXMgJiBQQ0lfU1RBVFVTX0NBUF9MSVNUKSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGhkcl90eXBlKSB7CisJY2FzZSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMOgorCWNhc2UgUENJX0hFQURFUl9UWVBFX0JSSURHRToKKwkJcmV0dXJuIFBDSV9DQVBBQklMSVRZX0xJU1Q7CisJY2FzZSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUzoKKwkJcmV0dXJuIFBDSV9DQl9DQVBBQklMSVRZX0xJU1Q7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUZWxsIGlmIGEgZGV2aWNlIHN1cHBvcnRzIGEgZ2l2ZW4gUENJIGNhcGFiaWxpdHkuCisgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSByZXF1ZXN0ZWQgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgd2l0aGluIHRoZQorICogZGV2aWNlJ3MgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb3IgMCBpbiBjYXNlIHRoZSBkZXZpY2UgZG9lcyBub3QKKyAqIHN1cHBvcnQgaXQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgQGNhcDoKKyAqCisgKiAlUENJX0NBUF9JRF9QTQlQb3dlciBNYW5hZ2VtZW50CisgKiAlUENJX0NBUF9JRF9BR1AJQWNjZWxlcmF0ZWQgR3JhcGhpY3MgUG9ydAorICogJVBDSV9DQVBfSURfVlBECVZpdGFsIFByb2R1Y3QgRGF0YQorICogJVBDSV9DQVBfSURfU0xPVElECVNsb3QgSWRlbnRpZmljYXRpb24KKyAqICVQQ0lfQ0FQX0lEX01TSQlNZXNzYWdlIFNpZ25hbGxlZCBJbnRlcnJ1cHRzCisgKiAlUENJX0NBUF9JRF9DSFNXUAlDb21wYWN0UENJIEhvdFN3YXAKKyAqICVQQ0lfQ0FQX0lEX1BDSVgJUENJLVgKKyAqICVQQ0lfQ0FQX0lEX0VYUAlQQ0kgRXhwcmVzcworICovCitzdGF0aWMgaW50IHBjaV9maW5kX293bl9jYXBhYmlsaXR5KHN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJaW50IGNhcCkKK3sKKwl1MzIgcG9zOworCXUzMiBoZHJfdHlwZTsKKworCXNwZWFyX2RiaV9yZWFkX3JlZyhjb25maWcsIFBDSV9IRUFERVJfVFlQRSwgMSwgJmhkcl90eXBlKTsKKworCXBvcyA9IHBjaV9maW5kX293bl9jYXBfc3RhcnQoY29uZmlnLCBoZHJfdHlwZSk7CisJaWYgKHBvcykKKwkJcG9zID0gcGNpX2ZpbmRfb3duX25leHRfY2FwKGNvbmZpZywgcG9zLCBjYXApOworCisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGlycXJldHVybl90IHNwZWFyX3BjaWVfZ2FkZ2V0X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjb25maWdmcyBpbnRlcmZhY2VzIHNob3cvc3RvcmUgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyBzc2l6ZV90IHBjaWVfZ2FkZ2V0X3Nob3dfbGluaygKKwkJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IHBjaWVfYXBwX3JlZyBfX2lvbWVtICphcHBfcmVnID0gY29uZmlnLT52YV9hcHBfYmFzZTsKKworCWlmIChyZWFkbCgmYXBwX3JlZy0+YXBwX3N0YXR1c18xKSAmICgodTMyKTEgPDwgWE1MSF9MSU5LX1VQX0lEKSkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiVVAiKTsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIkRPV04iKTsKK30KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfc3RvcmVfbGluaygKKwkJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGNpZV9hcHBfcmVnIF9faW9tZW0gKmFwcF9yZWcgPSBjb25maWctPnZhX2FwcF9iYXNlOworCisJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIlVQIikpCisJCXdyaXRlbChyZWFkbCgmYXBwX3JlZy0+YXBwX2N0cmxfMCkgfCAoMSA8PCBBUFBfTFRTU01fRU5BQkxFX0lEKSwKKwkJCSZhcHBfcmVnLT5hcHBfY3RybF8wKTsKKwllbHNlIGlmIChzeXNmc19zdHJlcShidWYsICJET1dOIikpCisJCXdyaXRlbChyZWFkbCgmYXBwX3JlZy0+YXBwX2N0cmxfMCkKKwkJCQkmIH4oMSA8PCBBUFBfTFRTU01fRU5BQkxFX0lEKSwKKwkJCQkmYXBwX3JlZy0+YXBwX2N0cmxfMCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBjaWVfZ2FkZ2V0X3Nob3dfaW50X3R5cGUoCisJCXN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzIiwgY29uZmlnLT5pbnRfdHlwZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBjaWVfZ2FkZ2V0X3N0b3JlX2ludF90eXBlKAorCQlzdHJ1Y3Qgc3BlYXJfcGNpZV9nYWRnZXRfY29uZmlnICpjb25maWcsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXUzMiBjYXAsIHZlYywgZmxhZ3M7CisJdWxvbmcgdmVjdG9yOworCisJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIklOVEEiKSkKKwkJc3BlYXJfZGJpX3dyaXRlX3JlZyhjb25maWcsIFBDSV9JTlRFUlJVUFRfTElORSwgMSwgMSk7CisKKwllbHNlIGlmIChzeXNmc19zdHJlcShidWYsICJNU0kiKSkgeworCQl2ZWN0b3IgPSBjb25maWctPnJlcXVlc3RlZF9tc2k7CisJCXZlYyA9IDA7CisJCXdoaWxlICh2ZWN0b3IgPiAxKSB7CisJCQl2ZWN0b3IgLz0gMjsKKwkJCXZlYysrOworCQl9CisJCXNwZWFyX2RiaV93cml0ZV9yZWcoY29uZmlnLCBQQ0lfSU5URVJSVVBUX0xJTkUsIDEsIDApOworCQljYXAgPSBwY2lfZmluZF9vd25fY2FwYWJpbGl0eShjb25maWcsIFBDSV9DQVBfSURfTVNJKTsKKwkJc3BlYXJfZGJpX3JlYWRfcmVnKGNvbmZpZywgY2FwICsgUENJX01TSV9GTEFHUywgMSwgJmZsYWdzKTsKKwkJZmxhZ3MgJj0gflBDSV9NU0lfRkxBR1NfUU1BU0s7CisJCWZsYWdzIHw9IHZlYyA8PCAxOworCQlzcGVhcl9kYmlfd3JpdGVfcmVnKGNvbmZpZywgY2FwICsgUENJX01TSV9GTEFHUywgMSwgZmxhZ3MpOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweShjb25maWctPmludF90eXBlLCBidWYpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBwY2llX2dhZGdldF9zaG93X25vX29mX21zaSgKKwkJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IHBjaWVfYXBwX3JlZyBfX2lvbWVtICphcHBfcmVnID0gY29uZmlnLT52YV9hcHBfYmFzZTsKKwl1MzIgY2FwLCB2ZWMsIGZsYWdzOworCXVsb25nIHZlY3RvcjsKKworCWlmICgocmVhZGwoJmFwcF9yZWctPm1zZ19zdGF0dXMpICYgKDEgPDwgQ0ZHX01TSV9FTl9JRCkpCisJCQkhPSAoMSA8PCBDRkdfTVNJX0VOX0lEKSkKKwkJdmVjdG9yID0gMDsKKwllbHNlIHsKKwkJY2FwID0gcGNpX2ZpbmRfb3duX2NhcGFiaWxpdHkoY29uZmlnLCBQQ0lfQ0FQX0lEX01TSSk7CisJCXNwZWFyX2RiaV9yZWFkX3JlZyhjb25maWcsIGNhcCArIFBDSV9NU0lfRkxBR1MsIDEsICZmbGFncyk7CisJCWZsYWdzICY9IH5QQ0lfTVNJX0ZMQUdTX1FTSVpFOworCQl2ZWMgPSBmbGFncyA+PiA0OworCQl2ZWN0b3IgPSAxOworCQl3aGlsZSAodmVjLS0pCisJCQl2ZWN0b3IgKj0gMjsKKwl9CisJY29uZmlnLT5jb25maWd1cmVkX21zaSA9IHZlY3RvcjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdSIsIHZlY3Rvcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBjaWVfZ2FkZ2V0X3N0b3JlX25vX29mX21zaSgKKwkJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmY29uZmlnLT5yZXF1ZXN0ZWRfbXNpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvbmZpZy0+cmVxdWVzdGVkX21zaSA+IDMyKQorCQljb25maWctPnJlcXVlc3RlZF9tc2kgPSAzMjsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfc3RvcmVfaW50YSgKKwkJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGNpZV9hcHBfcmVnIF9faW9tZW0gKmFwcF9yZWcgPSBjb25maWctPnZhX2FwcF9iYXNlOworCXVsb25nIGVuOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJmVuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZW4pCisJCXdyaXRlbChyZWFkbCgmYXBwX3JlZy0+YXBwX2N0cmxfMCkgfCAoMSA8PCBTWVNfSU5UX0lEKSwKKwkJCQkmYXBwX3JlZy0+YXBwX2N0cmxfMCk7CisJZWxzZQorCQl3cml0ZWwocmVhZGwoJmFwcF9yZWctPmFwcF9jdHJsXzApICYgfigxIDw8IFNZU19JTlRfSUQpLAorCQkJCSZhcHBfcmVnLT5hcHBfY3RybF8wKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfc3RvcmVfc2VuZF9tc2koCisJCXN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHBjaWVfYXBwX3JlZyBfX2lvbWVtICphcHBfcmVnID0gY29uZmlnLT52YV9hcHBfYmFzZTsKKwl1bG9uZyB2ZWN0b3I7CisJdTMyIHZlbl9tc2k7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmVjdG9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNvbmZpZy0+Y29uZmlndXJlZF9tc2kpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZlY3RvciA+PSBjb25maWctPmNvbmZpZ3VyZWRfbXNpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZlbl9tc2kgPSByZWFkbCgmYXBwX3JlZy0+dmVuX21zaV8xKTsKKwl2ZW5fbXNpICY9IH5WRU5fTVNJX0ZVTl9OVU1fTUFTSzsKKwl2ZW5fbXNpIHw9IDAgPDwgVkVOX01TSV9GVU5fTlVNX0lEOworCXZlbl9tc2kgJj0gflZFTl9NU0lfVENfTUFTSzsKKwl2ZW5fbXNpIHw9IDAgPDwgVkVOX01TSV9UQ19JRDsKKwl2ZW5fbXNpICY9IH5WRU5fTVNJX1ZFQ1RPUl9NQVNLOworCXZlbl9tc2kgfD0gdmVjdG9yIDw8IFZFTl9NU0lfVkVDVE9SX0lEOworCisJLyogZ2VuZXJhdGluZyBpbnRlcnJ1cHQgZm9yIG1zaSB2ZWN0b3IgKi8KKwl2ZW5fbXNpIHw9IFZFTl9NU0lfUkVRX0VOOworCXdyaXRlbCh2ZW5fbXNpLCAmYXBwX3JlZy0+dmVuX21zaV8xKTsKKwl1ZGVsYXkoMSk7CisJdmVuX21zaSAmPSB+VkVOX01TSV9SRVFfRU47CisJd3JpdGVsKHZlbl9tc2ksICZhcHBfcmVnLT52ZW5fbXNpXzEpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBwY2llX2dhZGdldF9zaG93X3ZlbmRvcl9pZCgKKwkJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQljaGFyICpidWYpCit7CisJdTMyIGlkOworCisJc3BlYXJfZGJpX3JlYWRfcmVnKGNvbmZpZywgUENJX1ZFTkRPUl9JRCwgMiwgJmlkKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4IiwgaWQpOworfQorCitzdGF0aWMgc3NpemVfdCBwY2llX2dhZGdldF9zdG9yZV92ZW5kb3JfaWQoCisJCXN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdWxvbmcgaWQ7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmaWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwZWFyX2RiaV93cml0ZV9yZWcoY29uZmlnLCBQQ0lfVkVORE9SX0lELCAyLCBpZCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBjaWVfZ2FkZ2V0X3Nob3dfZGV2aWNlX2lkKAorCQlzdHJ1Y3Qgc3BlYXJfcGNpZV9nYWRnZXRfY29uZmlnICpjb25maWcsCisJCWNoYXIgKmJ1ZikKK3sKKwl1MzIgaWQ7CisKKwlzcGVhcl9kYmlfcmVhZF9yZWcoY29uZmlnLCBQQ0lfREVWSUNFX0lELCAyLCAmaWQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXgiLCBpZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBjaWVfZ2FkZ2V0X3N0b3JlX2RldmljZV9pZCgKKwkJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bG9uZyBpZDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZpZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3BlYXJfZGJpX3dyaXRlX3JlZyhjb25maWcsIFBDSV9ERVZJQ0VfSUQsIDIsIGlkKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfc2hvd19iYXIwX3NpemUoCisJCXN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseCIsIGNvbmZpZy0+YmFyMF9zaXplKTsKK30KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfc3RvcmVfYmFyMF9zaXplKAorCQlzdHJ1Y3Qgc3BlYXJfcGNpZV9nYWRnZXRfY29uZmlnICpjb25maWcsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVsb25nIHNpemU7CisJdTMyIHBvcywgcG9zMTsKKwl1MzIgbm9fb2ZfYml0ID0gMDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZzaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogbWluIGJhciBzaXplIGlzIDI1NiAqLworCWlmIChzaXplIDw9IDB4MTAwKQorCQlzaXplID0gMHgxMDA7CisJLyogbWF4IGJhciBzaXplIGlzIDFNQiovCisJZWxzZSBpZiAoc2l6ZSA+PSAweDEwMDAwMCkKKwkJc2l6ZSA9IDB4MTAwMDAwOworCWVsc2UgeworCQlwb3MgPSAwOworCQlwb3MxID0gMDsKKwkJd2hpbGUgKHBvcyA8IDIxKSB7CisJCQlwb3MgPSBmaW5kX25leHRfYml0KCh1bG9uZyAqKSZzaXplLCAyMSwgcG9zKTsKKwkJCWlmIChwb3MgIT0gMjEpCisJCQkJcG9zMSA9IHBvcyArIDE7CisJCQlwb3MrKzsKKwkJCW5vX29mX2JpdCsrOworCQl9CisJCWlmIChub19vZl9iaXQgPT0gMikKKwkJCXBvczEtLTsKKworCQlzaXplID0gMSA8PCBwb3MxOworCX0KKwljb25maWctPmJhcjBfc2l6ZSA9IHNpemU7CisJc3BlYXJfZGJpX3dyaXRlX3JlZyhjb25maWcsIFBDSUVfQkFSMF9NQVNLX1JFRywgNCwgc2l6ZSAtIDEpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBwY2llX2dhZGdldF9zaG93X2JhcjBfYWRkcmVzcygKKwkJc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IHBjaWVfYXBwX3JlZyBfX2lvbWVtICphcHBfcmVnID0gY29uZmlnLT52YV9hcHBfYmFzZTsKKworCXUzMiBhZGRyZXNzID0gcmVhZGwoJmFwcF9yZWctPnBpbTBfbWVtX2FkZHJfc3RhcnQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXgiLCBhZGRyZXNzKTsKK30KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfc3RvcmVfYmFyMF9hZGRyZXNzKAorCQlzdHJ1Y3Qgc3BlYXJfcGNpZV9nYWRnZXRfY29uZmlnICpjb25maWcsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwY2llX2FwcF9yZWcgX19pb21lbSAqYXBwX3JlZyA9IGNvbmZpZy0+dmFfYXBwX2Jhc2U7CisJdWxvbmcgYWRkcmVzczsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZhZGRyZXNzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZGRyZXNzICY9IH4oY29uZmlnLT5iYXIwX3NpemUgLSAxKTsKKwlpZiAoY29uZmlnLT52YV9iYXIwX2FkZHJlc3MpCisJCWlvdW5tYXAoY29uZmlnLT52YV9iYXIwX2FkZHJlc3MpOworCWNvbmZpZy0+dmFfYmFyMF9hZGRyZXNzID0gaW9yZW1hcChhZGRyZXNzLCBjb25maWctPmJhcjBfc2l6ZSk7CisJaWYgKCFjb25maWctPnZhX2JhcjBfYWRkcmVzcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3cml0ZWwoYWRkcmVzcywgJmFwcF9yZWctPnBpbTBfbWVtX2FkZHJfc3RhcnQpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBwY2llX2dhZGdldF9zaG93X2JhcjBfcndfb2Zmc2V0KAorCQlzdHJ1Y3Qgc3BlYXJfcGNpZV9nYWRnZXRfY29uZmlnICpjb25maWcsCisJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHgiLCBjb25maWctPmJhcjBfcndfb2Zmc2V0KTsKK30KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfc3RvcmVfYmFyMF9yd19vZmZzZXQoCisJCXN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdWxvbmcgb2Zmc2V0OworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJm9mZnNldCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9mZnNldCAlIDQpCisJCXJldHVybiAtRUlOVkFMOworCisJY29uZmlnLT5iYXIwX3J3X29mZnNldCA9IG9mZnNldDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfc2hvd19iYXIwX2RhdGEoCisJCXN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJY2hhciAqYnVmKQoreworCXVsb25nIGRhdGE7CisKKwlpZiAoIWNvbmZpZy0+dmFfYmFyMF9hZGRyZXNzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEgPSByZWFkbCgodWxvbmcpY29uZmlnLT52YV9iYXIwX2FkZHJlc3MgKyBjb25maWctPmJhcjBfcndfb2Zmc2V0KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseCIsIGRhdGEpOworfQorCitzdGF0aWMgc3NpemVfdCBwY2llX2dhZGdldF9zdG9yZV9iYXIwX2RhdGEoCisJCXN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZywKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdWxvbmcgZGF0YTsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZkYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNvbmZpZy0+dmFfYmFyMF9hZGRyZXNzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdyaXRlbChkYXRhLCAodWxvbmcpY29uZmlnLT52YV9iYXIwX2FkZHJlc3MgKyBjb25maWctPmJhcjBfcndfb2Zmc2V0KTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIEF0dHJpYnV0ZSBkZWZpbml0aW9ucy4KKyAqLworCisjZGVmaW5lIFBDSUVfR0FER0VUX1RBUkdFVF9BVFRSX1JPKF9uYW1lKQkJCQlcCitzdGF0aWMgc3RydWN0IHBjaWVfZ2FkZ2V0X3RhcmdldF9hdHRyIHBjaWVfZ2FkZ2V0X3RhcmdldF8jI19uYW1lID0JXAorCV9fQ09ORklHRlNfQVRUUihfbmFtZSwgU19JUlVHTywgcGNpZV9nYWRnZXRfc2hvd18jI19uYW1lLCBOVUxMKQorCisjZGVmaW5lIFBDSUVfR0FER0VUX1RBUkdFVF9BVFRSX1dPKF9uYW1lKQkJCQlcCitzdGF0aWMgc3RydWN0IHBjaWVfZ2FkZ2V0X3RhcmdldF9hdHRyIHBjaWVfZ2FkZ2V0X3RhcmdldF8jI19uYW1lID0JXAorCV9fQ09ORklHRlNfQVRUUihfbmFtZSwgU19JV1VTUiwgTlVMTCwgcGNpZV9nYWRnZXRfc3RvcmVfIyNfbmFtZSkKKworI2RlZmluZSBQQ0lFX0dBREdFVF9UQVJHRVRfQVRUUl9SVyhfbmFtZSkJCQkJXAorc3RhdGljIHN0cnVjdCBwY2llX2dhZGdldF90YXJnZXRfYXR0ciBwY2llX2dhZGdldF90YXJnZXRfIyNfbmFtZSA9CVwKKwlfX0NPTkZJR0ZTX0FUVFIoX25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLCBwY2llX2dhZGdldF9zaG93XyMjX25hbWUsIFwKKwkJCXBjaWVfZ2FkZ2V0X3N0b3JlXyMjX25hbWUpCitQQ0lFX0dBREdFVF9UQVJHRVRfQVRUUl9SVyhsaW5rKTsKK1BDSUVfR0FER0VUX1RBUkdFVF9BVFRSX1JXKGludF90eXBlKTsKK1BDSUVfR0FER0VUX1RBUkdFVF9BVFRSX1JXKG5vX29mX21zaSk7CitQQ0lFX0dBREdFVF9UQVJHRVRfQVRUUl9XTyhpbnRhKTsKK1BDSUVfR0FER0VUX1RBUkdFVF9BVFRSX1dPKHNlbmRfbXNpKTsKK1BDSUVfR0FER0VUX1RBUkdFVF9BVFRSX1JXKHZlbmRvcl9pZCk7CitQQ0lFX0dBREdFVF9UQVJHRVRfQVRUUl9SVyhkZXZpY2VfaWQpOworUENJRV9HQURHRVRfVEFSR0VUX0FUVFJfUlcoYmFyMF9zaXplKTsKK1BDSUVfR0FER0VUX1RBUkdFVF9BVFRSX1JXKGJhcjBfYWRkcmVzcyk7CitQQ0lFX0dBREdFVF9UQVJHRVRfQVRUUl9SVyhiYXIwX3J3X29mZnNldCk7CitQQ0lFX0dBREdFVF9UQVJHRVRfQVRUUl9SVyhiYXIwX2RhdGEpOworCitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqcGNpZV9nYWRnZXRfdGFyZ2V0X2F0dHJzW10gPSB7CisJJnBjaWVfZ2FkZ2V0X3RhcmdldF9saW5rLmF0dHIsCisJJnBjaWVfZ2FkZ2V0X3RhcmdldF9pbnRfdHlwZS5hdHRyLAorCSZwY2llX2dhZGdldF90YXJnZXRfbm9fb2ZfbXNpLmF0dHIsCisJJnBjaWVfZ2FkZ2V0X3RhcmdldF9pbnRhLmF0dHIsCisJJnBjaWVfZ2FkZ2V0X3RhcmdldF9zZW5kX21zaS5hdHRyLAorCSZwY2llX2dhZGdldF90YXJnZXRfdmVuZG9yX2lkLmF0dHIsCisJJnBjaWVfZ2FkZ2V0X3RhcmdldF9kZXZpY2VfaWQuYXR0ciwKKwkmcGNpZV9nYWRnZXRfdGFyZ2V0X2JhcjBfc2l6ZS5hdHRyLAorCSZwY2llX2dhZGdldF90YXJnZXRfYmFyMF9hZGRyZXNzLmF0dHIsCisJJnBjaWVfZ2FkZ2V0X3RhcmdldF9iYXIwX3J3X29mZnNldC5hdHRyLAorCSZwY2llX2dhZGdldF90YXJnZXRfYmFyMF9kYXRhLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpZV9nYWRnZXRfdGFyZ2V0ICp0b190YXJnZXQoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXJldHVybiBpdGVtID8KKwkJY29udGFpbmVyX29mKHRvX2NvbmZpZ2ZzX3N1YnN5c3RlbSh0b19jb25maWdfZ3JvdXAoaXRlbSkpLAorCQkJCXN0cnVjdCBwY2llX2dhZGdldF90YXJnZXQsIHN1YnN5cykgOiBOVUxMOworfQorCisvKgorICogSXRlbSBvcGVyYXRpb25zIGFuZCB0eXBlIGZvciBwY2llX2dhZGdldF90YXJnZXQuCisgKi8KKworc3RhdGljIHNzaXplX3QgcGNpZV9nYWRnZXRfdGFyZ2V0X2F0dHJfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCisJCQkJCSAgIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IHBjaWVfZ2FkZ2V0X3RhcmdldCAqdGFyZ2V0ID0gdG9fdGFyZ2V0KGl0ZW0pOworCXN0cnVjdCBwY2llX2dhZGdldF90YXJnZXRfYXR0ciAqdF9hdHRyID0KKwkJY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwY2llX2dhZGdldF90YXJnZXRfYXR0ciwgYXR0cik7CisKKwlpZiAodF9hdHRyLT5zaG93KQorCQlyZXQgPSB0X2F0dHItPnNob3coJnRhcmdldC0+Y29uZmlnLCBidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBjaWVfZ2FkZ2V0X3RhcmdldF9hdHRyX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKKwkJCQkJc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCQlzaXplX3QgY291bnQpCit7CisJc3NpemVfdCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBwY2llX2dhZGdldF90YXJnZXQgKnRhcmdldCA9IHRvX3RhcmdldChpdGVtKTsKKwlzdHJ1Y3QgcGNpZV9nYWRnZXRfdGFyZ2V0X2F0dHIgKnRfYXR0ciA9CisJCWNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgcGNpZV9nYWRnZXRfdGFyZ2V0X2F0dHIsIGF0dHIpOworCisJaWYgKHRfYXR0ci0+c3RvcmUpCisJCXJldCA9IHRfYXR0ci0+c3RvcmUoJnRhcmdldC0+Y29uZmlnLCBidWYsIGNvdW50KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBwY2llX2dhZGdldF90YXJnZXRfaXRlbV9vcHMgPSB7CisJLnNob3dfYXR0cmlidXRlCQk9IHBjaWVfZ2FkZ2V0X3RhcmdldF9hdHRyX3Nob3csCisJLnN0b3JlX2F0dHJpYnV0ZQk9IHBjaWVfZ2FkZ2V0X3RhcmdldF9hdHRyX3N0b3JlLAorfTsKKworc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHBjaWVfZ2FkZ2V0X3RhcmdldF90eXBlID0geworCS5jdF9hdHRycwkJPSBwY2llX2dhZGdldF90YXJnZXRfYXR0cnMsCisJLmN0X2l0ZW1fb3BzCQk9ICZwY2llX2dhZGdldF90YXJnZXRfaXRlbV9vcHMsCisJLmN0X293bmVyCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHZvaWQgc3BlYXIxM3h4X3BjaWVfZGV2aWNlX2luaXQoc3RydWN0IHNwZWFyX3BjaWVfZ2FkZ2V0X2NvbmZpZyAqY29uZmlnKQoreworCXN0cnVjdCBwY2llX2FwcF9yZWcgX19pb21lbSAqYXBwX3JlZyA9IGNvbmZpZy0+dmFfYXBwX2Jhc2U7CisKKwkvKnNldHVwIHJlZ2lzdGVycyBmb3Igb3V0Ym91bmQgdHJhbnNsYXRpb24gKi8KKworCXdyaXRlbChjb25maWctPmJhc2UsICZhcHBfcmVnLT5pbjBfbWVtX2FkZHJfc3RhcnQpOworCXdyaXRlbChhcHBfcmVnLT5pbjBfbWVtX2FkZHJfc3RhcnQgKyBJTjBfTUVNX1NJWkUsCisJCQkmYXBwX3JlZy0+aW4wX21lbV9hZGRyX2xpbWl0KTsKKwl3cml0ZWwoYXBwX3JlZy0+aW4wX21lbV9hZGRyX2xpbWl0ICsgMSwgJmFwcF9yZWctPmluMV9tZW1fYWRkcl9zdGFydCk7CisJd3JpdGVsKGFwcF9yZWctPmluMV9tZW1fYWRkcl9zdGFydCArIElOMV9NRU1fU0laRSwKKwkJCSZhcHBfcmVnLT5pbjFfbWVtX2FkZHJfbGltaXQpOworCXdyaXRlbChhcHBfcmVnLT5pbjFfbWVtX2FkZHJfbGltaXQgKyAxLCAmYXBwX3JlZy0+aW5faW9fYWRkcl9zdGFydCk7CisJd3JpdGVsKGFwcF9yZWctPmluX2lvX2FkZHJfc3RhcnQgKyBJTl9JT19TSVpFLAorCQkJJmFwcF9yZWctPmluX2lvX2FkZHJfbGltaXQpOworCXdyaXRlbChhcHBfcmVnLT5pbl9pb19hZGRyX2xpbWl0ICsgMSwgJmFwcF9yZWctPmluX2NmZzBfYWRkcl9zdGFydCk7CisJd3JpdGVsKGFwcF9yZWctPmluX2NmZzBfYWRkcl9zdGFydCArIElOX0NGRzBfU0laRSwKKwkJCSZhcHBfcmVnLT5pbl9jZmcwX2FkZHJfbGltaXQpOworCXdyaXRlbChhcHBfcmVnLT5pbl9jZmcwX2FkZHJfbGltaXQgKyAxLCAmYXBwX3JlZy0+aW5fY2ZnMV9hZGRyX3N0YXJ0KTsKKwl3cml0ZWwoYXBwX3JlZy0+aW5fY2ZnMV9hZGRyX3N0YXJ0ICsgSU5fQ0ZHMV9TSVpFLAorCQkJJmFwcF9yZWctPmluX2NmZzFfYWRkcl9saW1pdCk7CisJd3JpdGVsKGFwcF9yZWctPmluX2NmZzFfYWRkcl9saW1pdCArIDEsICZhcHBfcmVnLT5pbl9tc2dfYWRkcl9zdGFydCk7CisJd3JpdGVsKGFwcF9yZWctPmluX21zZ19hZGRyX3N0YXJ0ICsgSU5fTVNHX1NJWkUsCisJCQkmYXBwX3JlZy0+aW5fbXNnX2FkZHJfbGltaXQpOworCisJd3JpdGVsKGFwcF9yZWctPmluMF9tZW1fYWRkcl9zdGFydCwgJmFwcF9yZWctPnBvbTBfbWVtX2FkZHJfc3RhcnQpOworCXdyaXRlbChhcHBfcmVnLT5pbjFfbWVtX2FkZHJfc3RhcnQsICZhcHBfcmVnLT5wb20xX21lbV9hZGRyX3N0YXJ0KTsKKwl3cml0ZWwoYXBwX3JlZy0+aW5faW9fYWRkcl9zdGFydCwgJmFwcF9yZWctPnBvbV9pb19hZGRyX3N0YXJ0KTsKKworCS8qc2V0dXAgcmVnaXN0ZXJzIGZvciBpbmJvdW5kIHRyYW5zbGF0aW9uICovCisKKwkvKiBLZWVwIEFPUkFNIG1hcHBlZCBhdCBCQVIwIGFzIGRlZmF1bHQgKi8KKwljb25maWctPmJhcjBfc2l6ZSA9IElOQk9VTkRfQUREUl9NQVNLICsgMTsKKwlzcGVhcl9kYmlfd3JpdGVfcmVnKGNvbmZpZywgUENJRV9CQVIwX01BU0tfUkVHLCA0LCBJTkJPVU5EX0FERFJfTUFTSyk7CisJc3BlYXJfZGJpX3dyaXRlX3JlZyhjb25maWcsIFBDSV9CQVNFX0FERFJFU1NfMCwgNCwgMHhDKTsKKwljb25maWctPnZhX2JhcjBfYWRkcmVzcyA9IGlvcmVtYXAoU1BFQVIxM1hYX1NZU1JBTTFfQkFTRSwKKwkJCWNvbmZpZy0+YmFyMF9zaXplKTsKKworCXdyaXRlbChTUEVBUjEzWFhfU1lTUkFNMV9CQVNFLCAmYXBwX3JlZy0+cGltMF9tZW1fYWRkcl9zdGFydCk7CisJd3JpdGVsKDAsICZhcHBfcmVnLT5waW0xX21lbV9hZGRyX3N0YXJ0KTsKKwl3cml0ZWwoSU5CT1VORF9BRERSX01BU0sgKyAxLCAmYXBwX3JlZy0+bWVtMF9hZGRyX29mZnNldF9saW1pdCk7CisKKwl3cml0ZWwoMHgwLCAmYXBwX3JlZy0+cGltX2lvX2FkZHJfc3RhcnQpOworCXdyaXRlbCgweDAsICZhcHBfcmVnLT5waW1faW9fYWRkcl9zdGFydCk7CisJd3JpdGVsKDB4MCwgJmFwcF9yZWctPnBpbV9yb21fYWRkcl9zdGFydCk7CisKKwl3cml0ZWwoREVWSUNFX1RZUEVfRVAgfCAoMSA8PCBNSVNDVFJMX0VOX0lEKQorCQkJfCAoKHUzMikxIDw8IFJFR19UUkFOU0xBVElPTl9FTkFCTEUpLAorCQkJJmFwcF9yZWctPmFwcF9jdHJsXzApOworCS8qIGRpc2FibGUgYWxsIHJ4IGludGVycnVwdHMgKi8KKwl3cml0ZWwoMCwgJmFwcF9yZWctPmludF9tYXNrKTsKKworCS8qIFNlbGVjdCBJTlRBIGFzIGRlZmF1bHQqLworCXNwZWFyX2RiaV93cml0ZV9yZWcoY29uZmlnLCBQQ0lfSU5URVJSVVBUX0xJTkUsIDEsIDEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzcGVhcl9wY2llX2dhZGdldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzMCwgKnJlczE7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisJaW50IGlycTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJc3RhdGljIHN0cnVjdCBwY2llX2dhZGdldF90YXJnZXQgKnRhcmdldDsKKwlzdHJ1Y3Qgc3BlYXJfcGNpZV9nYWRnZXRfY29uZmlnICpjb25maWc7CisJc3RydWN0IGNvbmZpZ19pdGVtCQkqY2dfaXRlbTsKKwlzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXM7CisKKwkvKiBnZXQgcmVzb3VyY2UgZm9yIGFwcGxpY2F0aW9uIHJlZ2lzdGVycyovCisKKwlyZXMwID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlczApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcmVzb3VyY2UgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlczAtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlczApLAorCQkJCXBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaWUgZ2FkZ2V0IHJlZ2lvbiBhbHJlYWR5CWNsYWltZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwkvKiBnZXQgcmVzb3VyY2UgZm9yIGRiaSByZWdpc3RlcnMqLworCisJcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKCFyZXMxKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHJlc291cmNlIGRlZmluZWRcbiIpOworCQlnb3RvIGVycl9yZWxfcmVzMDsKKwl9CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzMSksCisJCQkJcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpZSBnYWRnZXQgcmVnaW9uIGFscmVhZHkJY2xhaW1lZFxuIik7CisJCWdvdG8gZXJyX3JlbF9yZXMwOworCX0KKworCXRhcmdldCA9IGt6YWxsb2Moc2l6ZW9mKCp0YXJnZXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhcmdldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsX3JlczsKKwl9CisKKwljZ19pdGVtID0gJnRhcmdldC0+c3Vic3lzLnN1X2dyb3VwLmNnX2l0ZW07CisJc3ByaW50ZihjZ19pdGVtLT5jaV9uYW1lYnVmLCAicGNpZV9nYWRnZXQuJWQiLCBwZGV2LT5pZCk7CisJY2dfaXRlbS0+Y2lfdHlwZQk9ICZwY2llX2dhZGdldF90YXJnZXRfdHlwZTsKKwljb25maWcgPSAmdGFyZ2V0LT5jb25maWc7CisJY29uZmlnLT52YV9hcHBfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilpb3JlbWFwKHJlczAtPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShyZXMwKSk7CisJaWYgKCFjb25maWctPnZhX2FwcF9iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbFxuIik7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2t6YWxsb2M7CisJfQorCisJY29uZmlnLT5iYXNlID0gKHZvaWQgX19pb21lbSAqKXJlczEtPnN0YXJ0OworCisJY29uZmlnLT52YV9kYmlfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilpb3JlbWFwKHJlczEtPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShyZXMxKSk7CisJaWYgKCFjb25maWctPnZhX2RiaV9iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbFxuIik7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvdW5tYXBfYXBwOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCB0YXJnZXQpOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyB1cGRhdGUgaXJxP1xuIik7CisJCXN0YXR1cyA9IGlycTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShpcnEsIHNwZWFyX3BjaWVfZ2FkZ2V0X2lycSwgMCwgcGRldi0+bmFtZSwgTlVMTCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2llIGdhZGdldCBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBcCisJCQkJY2xhaW1lZFxuIiwgaXJxKTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwkvKiBSZWdpc3RlciBjb25maWdmcyBob29rcyAqLworCXN1YnN5cyA9ICZ0YXJnZXQtPnN1YnN5czsKKwljb25maWdfZ3JvdXBfaW5pdCgmc3Vic3lzLT5zdV9ncm91cCk7CisJbXV0ZXhfaW5pdCgmc3Vic3lzLT5zdV9tdXRleCk7CisJc3RhdHVzID0gY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN1YnN5cyk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnJfaXJxOworCisJLyoKKwkgKiBpbml0IGJhc2ljIHBjaWUgYXBwbGljYXRpb24gcmVnaXN0ZXJzCisJICogZG8gbm90IGVuYWJsZSBjbG9jayBpZiBpdCBpcyBQQ0lFMC5JZGVhbGx5ICwgYWxsIGNvbnRyb2xsZXIgc2hvdWxkCisJICogaGF2ZSBiZWVuIGluZGVwZW5kZW50IGZyb20gb3RoZXJzIHdpdGggcmVzcGVjdCB0byBjbG9jay4gQnV0IFBDSUUxCisJICogYW5kIDIgZGVwZW5kcyBvbiBQQ0lFMC5TbyBQQ0lFMCBjbGsgaXMgcHJvdmlkZWQgZHVyaW5nIGJvYXJkIGluaXQuCisJICovCisJaWYgKHBkZXYtPmlkID09IDEpIHsKKwkJLyoKKwkJICogSWRlYWxseSBDRkcgQ2xvY2sgc2hvdWxkIGhhdmUgYmVlbiBhbHNvIGVuYWJsZWQgaGVyZS4gQnV0CisJCSAqIGl0IGlzIGRvbmUgY3VycmVudGx5IGR1cmluZyBib2FyZCBpbml0IHJvdXRuZQorCQkgKi8KKwkJY2xrID0gY2xrX2dldF9zeXMoInBjaWUxIiwgTlVMTCk7CisJCWlmIChJU19FUlIoY2xrKSkgeworCQkJcHJfZXJyKCIlczpjb3VsZG4ndCBnZXQgY2xrIGZvciBwY2llMVxuIiwgX19mdW5jX18pOworCQkJZ290byBlcnJfaXJxOworCQl9CisJCWlmIChjbGtfZW5hYmxlKGNsaykpIHsKKwkJCXByX2VycigiJXM6Y291bGRuJ3QgZW5hYmxlIGNsayBmb3IgcGNpZTFcbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gZXJyX2lycTsKKwkJfQorCX0gZWxzZSBpZiAocGRldi0+aWQgPT0gMikgeworCQkvKgorCQkgKiBJZGVhbGx5IENGRyBDbG9jayBzaG91bGQgaGF2ZSBiZWVuIGFsc28gZW5hYmxlZCBoZXJlLiBCdXQKKwkJICogaXQgaXMgZG9uZSBjdXJyZW50bHkgZHVyaW5nIGJvYXJkIGluaXQgcm91dG5lCisJCSAqLworCQljbGsgPSBjbGtfZ2V0X3N5cygicGNpZTIiLCBOVUxMKTsKKwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlwcl9lcnIoIiVzOmNvdWxkbid0IGdldCBjbGsgZm9yIHBjaWUyXG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGVycl9pcnE7CisJCX0KKwkJaWYgKGNsa19lbmFibGUoY2xrKSkgeworCQkJcHJfZXJyKCIlczpjb3VsZG4ndCBlbmFibGUgY2xrIGZvciBwY2llMlxuIiwgX19mdW5jX18pOworCQkJZ290byBlcnJfaXJxOworCQl9CisJfQorCXNwZWFyMTN4eF9wY2llX2RldmljZV9pbml0KGNvbmZpZyk7CisKKwlyZXR1cm4gMDsKK2Vycl9pcnE6CisJZnJlZV9pcnEoaXJxLCBOVUxMKTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoY29uZmlnLT52YV9kYmlfYmFzZSk7CitlcnJfaW91bm1hcF9hcHA6CisJaW91bm1hcChjb25maWctPnZhX2FwcF9iYXNlKTsKK2Vycl9remFsbG9jOgorCWtmcmVlKGNvbmZpZyk7CitlcnJfcmVsX3JlczoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzMSkpOworZXJyX3JlbF9yZXMwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMwLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMwKSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3BlYXJfcGNpZV9nYWRnZXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXMwLCAqcmVzMTsKKwlzdGF0aWMgc3RydWN0IHBjaWVfZ2FkZ2V0X3RhcmdldCAqdGFyZ2V0OworCXN0cnVjdCBzcGVhcl9wY2llX2dhZGdldF9jb25maWcgKmNvbmZpZzsKKwlpbnQgaXJxOworCisJcmVzMCA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwl0YXJnZXQgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJY29uZmlnID0gJnRhcmdldC0+Y29uZmlnOworCisJZnJlZV9pcnEoaXJxLCBOVUxMKTsKKwlpb3VubWFwKGNvbmZpZy0+dmFfZGJpX2Jhc2UpOworCWlvdW5tYXAoY29uZmlnLT52YV9hcHBfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlczEpKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzMC0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzMCkpOworCWNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKCZ0YXJnZXQtPnN1YnN5cyk7CisJa2ZyZWUodGFyZ2V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGVhcl9wY2llX2dhZGdldF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGVhcl9wY2llX2dhZGdldF9kcml2ZXIgPSB7CisJLnByb2JlID0gc3BlYXJfcGNpZV9nYWRnZXRfcHJvYmUsCisJLnJlbW92ZSA9IHNwZWFyX3BjaWVfZ2FkZ2V0X3JlbW92ZSwKKwkuc2h1dGRvd24gPSBzcGVhcl9wY2llX2dhZGdldF9zaHV0ZG93biwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJwY2llLWdhZGdldC1zcGVhciIsCisJCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3BlYXJfcGNpZV9nYWRnZXRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwZWFyX3BjaWVfZ2FkZ2V0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzcGVhcl9wY2llX2dhZGdldF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNwZWFyX3BjaWVfZ2FkZ2V0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3BlYXJfcGNpZV9nYWRnZXRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNwZWFyX3BjaWVfZ2FkZ2V0X2V4aXQpOworCitNT0RVTEVfQUxJQVMoInBjaWUtZ2FkZ2V0LXNwZWFyIik7CitNT0RVTEVfQVVUSE9SKCJQcmF0eXVzaCBBbmFuZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9LY29uZmlnIGIvZHJpdmVycy9tbWMvY2FyZC9LY29uZmlnCmluZGV4IDJhODc2YzQuLjNiMWY3ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9jYXJkL0tjb25maWcKQEAgLTU4LDEyICs1OCwxMSBAQAogCiBjb25maWcgTU1DX1RFU1QKIAl0cmlzdGF0ZSAiTU1DIGhvc3QgdGVzdCBkcml2ZXIiCi0JZGVmYXVsdCBuCiAJaGVscAogCSAgRGV2ZWxvcG1lbnQgZHJpdmVyIHRoYXQgcGVyZm9ybXMgYSBzZXJpZXMgb2YgcmVhZHMgYW5kIHdyaXRlcwogCSAgdG8gYSBtZW1vcnkgY2FyZCBpbiBvcmRlciB0byBleHBvc2UgY2VydGFpbiB3ZWxsIGtub3duIGJ1Z3MKIAkgIGluIGhvc3QgY29udHJvbGxlcnMuIFRoZSB0ZXN0cyBhcmUgZXhlY3V0ZWQgYnkgd3JpdGluZyB0byB0aGUKLQkgICJ0ZXN0IiBmaWxlIGluIHN5c2ZzIHVuZGVyIGVhY2ggY2FyZC4gTm90ZSB0aGF0IHdoYXRldmVyIGlzCisJICAidGVzdCIgZmlsZSBpbiBkZWJ1Z2ZzIHVuZGVyIGVhY2ggY2FyZC4gTm90ZSB0aGF0IHdoYXRldmVyIGlzCiAJICBvbiB5b3VyIGNhcmQgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGVzZSB0ZXN0cy4KIAogCSAgVGhpcyBkcml2ZXIgaXMgb25seSBvZiBpbnRlcmVzdCB0byB0aG9zZSBkZXZlbG9waW5nIG9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKaW5kZXggYmZjOGE4YS4uNjFkMjMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwpAQCAtNjIxLDYgKzYyMSw3IEBACiAJbWQtPmRpc2stPnByaXZhdGVfZGF0YSA9IG1kOwogCW1kLT5kaXNrLT5xdWV1ZSA9IG1kLT5xdWV1ZS5xdWV1ZTsKIAltZC0+ZGlzay0+ZHJpdmVyZnNfZGV2ID0gJmNhcmQtPmRldjsKKwlzZXRfZGlza19ybyhtZC0+ZGlzaywgbWQtPnJlYWRfb25seSk7CiAKIAkvKgogCSAqIEFzIGRpc2N1c3NlZCBvbiBsa21sLCBHRU5IRF9GTF9SRU1PVkFCTEUgc2hvdWxkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCmluZGV4IDIxYWRjMjcuLjVlYzhlZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKQEAgLTg4LDYgKzg4LDcgQEAKICAqIEBzZWN0b3JzOiBhbW91bnQgb2Ygc2VjdG9ycyB0byBjaGVjayBpbiBvbmUgZ3JvdXAKICAqIEB0czogdGltZSB2YWx1ZXMgb2YgdHJhbnNmZXIKICAqIEByYXRlOiBjYWxjdWxhdGVkIHRyYW5zZmVyIHJhdGUKKyAqIEBpb3BzOiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kICh0aW1lcyAxMDApCiAgKi8KIHN0cnVjdCBtbWNfdGVzdF90cmFuc2Zlcl9yZXN1bHQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKQEAgLTk1LDYgKzk2LDcgQEAKIAl1bnNpZ25lZCBpbnQgc2VjdG9yczsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAJdW5zaWduZWQgaW50IHJhdGU7CisJdW5zaWduZWQgaW50IGlvcHM7CiB9OwogCiAvKioKQEAgLTIyNiw5ICsyMjgsMTAgQEAKIAogCQlpZiAoIWJ1c3kgJiYgbW1jX3Rlc3RfYnVzeSgmY21kKSkgewogCQkJYnVzeSA9IDE7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogV2FybmluZzogSG9zdCBkaWQgbm90ICIKLQkJCQkid2FpdCBmb3IgYnVzeSBzdGF0ZSB0byBlbmQuXG4iLAotCQkJCW1tY19ob3N0bmFtZSh0ZXN0LT5jYXJkLT5ob3N0KSk7CisJCQlpZiAodGVzdC0+Y2FyZC0+aG9zdC0+Y2FwcyAmIE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZKQorCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXYXJuaW5nOiBIb3N0IGRpZCBub3QgIgorCQkJCQkid2FpdCBmb3IgYnVzeSBzdGF0ZSB0byBlbmQuXG4iLAorCQkJCQltbWNfaG9zdG5hbWUodGVzdC0+Y2FyZC0+aG9zdCkpOwogCQl9CiAJfSB3aGlsZSAobW1jX3Rlc3RfYnVzeSgmY21kKSk7CiAKQEAgLTQ5NCw3ICs0OTcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBtbWNfdGVzdF9zYXZlX3RyYW5zZmVyX3Jlc3VsdChzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwKIAl1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBzZWN0b3JzLCBzdHJ1Y3QgdGltZXNwZWMgdHMsCi0JdW5zaWduZWQgaW50IHJhdGUpCisJdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBpb3BzKQogewogCXN0cnVjdCBtbWNfdGVzdF90cmFuc2Zlcl9yZXN1bHQgKnRyOwogCkBAIC01MDksNiArNTEyLDcgQEAKIAl0ci0+c2VjdG9ycyA9IHNlY3RvcnM7CiAJdHItPnRzID0gdHM7CiAJdHItPnJhdGUgPSByYXRlOworCXRyLT5pb3BzID0gaW9wczsKIAogCWxpc3RfYWRkX3RhaWwoJnRyLT5saW5rLCAmdGVzdC0+Z3ItPnRyX2xzdCk7CiB9CkBAIC01MTksMjAgKzUyMywyMiBAQAogc3RhdGljIHZvaWQgbW1jX3Rlc3RfcHJpbnRfcmF0ZShzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgdWludDY0X3QgYnl0ZXMsCiAJCQkJc3RydWN0IHRpbWVzcGVjICp0czEsIHN0cnVjdCB0aW1lc3BlYyAqdHMyKQogewotCXVuc2lnbmVkIGludCByYXRlLCBzZWN0b3JzID0gYnl0ZXMgPj4gOTsKKwl1bnNpZ25lZCBpbnQgcmF0ZSwgaW9wcywgc2VjdG9ycyA9IGJ5dGVzID4+IDk7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCiAJdHMgPSB0aW1lc3BlY19zdWIoKnRzMiwgKnRzMSk7CiAKIAlyYXRlID0gbW1jX3Rlc3RfcmF0ZShieXRlcywgJnRzKTsKKwlpb3BzID0gbW1jX3Rlc3RfcmF0ZSgxMDAsICZ0cyk7IC8qIEkvTyBvcHMgcGVyIHNlYyB4IDEwMCAqLwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRyYW5zZmVyIG9mICV1IHNlY3RvcnMgKCV1JXMgS2lCKSB0b29rICVsdS4lMDlsdSAiCi0JCQkgInNlY29uZHMgKCV1IGtCL3MsICV1IEtpQi9zKVxuIiwKKwkJCSAic2Vjb25kcyAoJXUga0IvcywgJXUgS2lCL3MsICV1LiUwMnUgSU9QUylcbiIsCiAJCQkgbW1jX2hvc3RuYW1lKHRlc3QtPmNhcmQtPmhvc3QpLCBzZWN0b3JzLCBzZWN0b3JzID4+IDEsCiAJCQkgKHNlY3RvcnMgJiAxID8gIi41IiA6ICIiKSwgKHVuc2lnbmVkIGxvbmcpdHMudHZfc2VjLAotCQkJICh1bnNpZ25lZCBsb25nKXRzLnR2X25zZWMsIHJhdGUgLyAxMDAwLCByYXRlIC8gMTAyNCk7CisJCQkgKHVuc2lnbmVkIGxvbmcpdHMudHZfbnNlYywgcmF0ZSAvIDEwMDAsIHJhdGUgLyAxMDI0LAorCQkJIGlvcHMgLyAxMDAsIGlvcHMgJSAxMDApOwogCi0JbW1jX3Rlc3Rfc2F2ZV90cmFuc2Zlcl9yZXN1bHQodGVzdCwgMSwgc2VjdG9ycywgdHMsIHJhdGUpOworCW1tY190ZXN0X3NhdmVfdHJhbnNmZXJfcmVzdWx0KHRlc3QsIDEsIHNlY3RvcnMsIHRzLCByYXRlLCBpb3BzKTsKIH0KIAogLyoKQEAgLTU0MiwyMiArNTQ4LDI0IEBACiAJCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCwgc3RydWN0IHRpbWVzcGVjICp0czEsCiAJCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqdHMyKQogewotCXVuc2lnbmVkIGludCByYXRlLCBzZWN0b3JzID0gYnl0ZXMgPj4gOTsKKwl1bnNpZ25lZCBpbnQgcmF0ZSwgaW9wcywgc2VjdG9ycyA9IGJ5dGVzID4+IDk7CiAJdWludDY0X3QgdG90ID0gYnl0ZXMgKiBjb3VudDsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAl0cyA9IHRpbWVzcGVjX3N1YigqdHMyLCAqdHMxKTsKIAogCXJhdGUgPSBtbWNfdGVzdF9yYXRlKHRvdCwgJnRzKTsKKwlpb3BzID0gbW1jX3Rlc3RfcmF0ZShjb3VudCAqIDEwMCwgJnRzKTsgLyogSS9PIG9wcyBwZXIgc2VjIHggMTAwICovCiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogVHJhbnNmZXIgb2YgJXUgeCAldSBzZWN0b3JzICgldSB4ICV1JXMgS2lCKSB0b29rICIKLQkJCSAiJWx1LiUwOWx1IHNlY29uZHMgKCV1IGtCL3MsICV1IEtpQi9zKVxuIiwKKwkJCSAiJWx1LiUwOWx1IHNlY29uZHMgKCV1IGtCL3MsICV1IEtpQi9zLCAiCisJCQkgIiV1LiUwMnUgSU9QUylcbiIsCiAJCQkgbW1jX2hvc3RuYW1lKHRlc3QtPmNhcmQtPmhvc3QpLCBjb3VudCwgc2VjdG9ycywgY291bnQsCiAJCQkgc2VjdG9ycyA+PiAxLCAoc2VjdG9ycyAmIDEgPyAiLjUiIDogIiIpLAogCQkJICh1bnNpZ25lZCBsb25nKXRzLnR2X3NlYywgKHVuc2lnbmVkIGxvbmcpdHMudHZfbnNlYywKLQkJCSByYXRlIC8gMTAwMCwgcmF0ZSAvIDEwMjQpOworCQkJIHJhdGUgLyAxMDAwLCByYXRlIC8gMTAyNCwgaW9wcyAvIDEwMCwgaW9wcyAlIDEwMCk7CiAKLQltbWNfdGVzdF9zYXZlX3RyYW5zZmVyX3Jlc3VsdCh0ZXN0LCBjb3VudCwgc2VjdG9ycywgdHMsIHJhdGUpOworCW1tY190ZXN0X3NhdmVfdHJhbnNmZXJfcmVzdWx0KHRlc3QsIGNvdW50LCBzZWN0b3JzLCB0cywgcmF0ZSwgaW9wcyk7CiB9CiAKIC8qCkBAIC0xNDI1LDI4ICsxNDMzLDI5IEBACiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIGFuIGFyZWEgZm9yIHRlc3RpbmcgbGFyZ2UgdHJhbnNmZXJzLiAgVGhlIHNpemUgb2YgdGhlIGFyZWEgaXMgdGhlCi0gKiBwcmVmZXJyZWQgZXJhc2Ugc2l6ZSB3aGljaCBpcyBhIGdvb2Qgc2l6ZSBmb3Igb3B0aW1hbCB0cmFuc2ZlciBzcGVlZC4gIE5vdGUKLSAqIHRoYXQgaXMgdHlwaWNhbGx5IDRNaUIgZm9yIG1vZGVybiBjYXJkcy4gIFRoZSB0ZXN0IGFyZWEgaXMgc2V0IHRvIHRoZSBtaWRkbGUKLSAqIG9mIHRoZSBjYXJkIGJlY2F1c2UgY2FyZHMgbWF5IGhhdmUgZGlmZmVyZW50IGNoYXJhdGVyaXN0aWNzIGF0IHRoZSBmcm9udAotICogKGZvciBGQVQgZmlsZSBzeXN0ZW0gb3B0aW1pemF0aW9uKS4gIE9wdGlvbmFsbHksIHRoZSBhcmVhIGlzIGVyYXNlZCAoaWYgdGhlCi0gKiBjYXJkIHN1cHBvcnRzIGl0KSB3aGljaCBtYXkgaW1wcm92ZSB3cml0ZSBwZXJmb3JtYW5jZS4gIE9wdGlvbmFsbHksIHRoZSBhcmVhCi0gKiBpcyBmaWxsZWQgd2l0aCBkYXRhIGZvciBzdWJzZXF1ZW50IHJlYWQgdGVzdHMuCisgKiBJbml0aWFsaXplIGFuIGFyZWEgZm9yIHRlc3RpbmcgbGFyZ2UgdHJhbnNmZXJzLiAgVGhlIHRlc3QgYXJlYSBpcyBzZXQgdG8gdGhlCisgKiBtaWRkbGUgb2YgdGhlIGNhcmQgYmVjYXVzZSBjYXJkcyBtYXkgaGF2ZSBkaWZmZXJlbnQgY2hhcmF0ZXJpc3RpY3MgYXQgdGhlCisgKiBmcm9udCAoZm9yIEZBVCBmaWxlIHN5c3RlbSBvcHRpbWl6YXRpb24pLiAgT3B0aW9uYWxseSwgdGhlIGFyZWEgaXMgZXJhc2VkCisgKiAoaWYgdGhlIGNhcmQgc3VwcG9ydHMgaXQpIHdoaWNoIG1heSBpbXByb3ZlIHdyaXRlIHBlcmZvcm1hbmNlLiAgT3B0aW9uYWxseSwKKyAqIHRoZSBhcmVhIGlzIGZpbGxlZCB3aXRoIGRhdGEgZm9yIHN1YnNlcXVlbnQgcmVhZCB0ZXN0cy4KICAqLwogc3RhdGljIGludCBtbWNfdGVzdF9hcmVhX2luaXQoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QsIGludCBlcmFzZSwgaW50IGZpbGwpCiB7CiAJc3RydWN0IG1tY190ZXN0X2FyZWEgKnQgPSAmdGVzdC0+YXJlYTsKLQl1bnNpZ25lZCBsb25nIG1pbl9zeiA9IDY0ICogMTAyNDsKKwl1bnNpZ25lZCBsb25nIG1pbl9zeiA9IDY0ICogMTAyNCwgc3o7CiAJaW50IHJldDsKIAogCXJldCA9IG1tY190ZXN0X3NldF9ibGtzaXplKHRlc3QsIDUxMik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICh0ZXN0LT5jYXJkLT5wcmVmX2VyYXNlID4gVEVTVF9BUkVBX01BWF9TSVpFID4+IDkpCi0JCXQtPm1heF9zeiA9IFRFU1RfQVJFQV9NQVhfU0laRTsKLQllbHNlCi0JCXQtPm1heF9zeiA9ICh1bnNpZ25lZCBsb25nKXRlc3QtPmNhcmQtPnByZWZfZXJhc2UgPDwgOTsKKwkvKiBNYWtlIHRoZSB0ZXN0IGFyZWEgc2l6ZSBhYm91dCA0TWlCICovCisJc3ogPSAodW5zaWduZWQgbG9uZyl0ZXN0LT5jYXJkLT5wcmVmX2VyYXNlIDw8IDk7CisJdC0+bWF4X3N6ID0gc3o7CisJd2hpbGUgKHQtPm1heF9zeiA8IDQgKiAxMDI0ICogMTAyNCkKKwkJdC0+bWF4X3N6ICs9IHN6OworCXdoaWxlICh0LT5tYXhfc3ogPiBURVNUX0FSRUFfTUFYX1NJWkUgJiYgdC0+bWF4X3N6ID4gc3opCisJCXQtPm1heF9zeiAtPSBzejsKIAogCXQtPm1heF9zZWdzID0gdGVzdC0+Y2FyZC0+aG9zdC0+bWF4X3NlZ3M7CiAJdC0+bWF4X3NlZ19zeiA9IHRlc3QtPmNhcmQtPmhvc3QtPm1heF9zZWdfc2l6ZTsKQEAgLTE3NjYsNiArMTc3NSwxODggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBybmRfbmV4dCA9IDE7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbW1jX3Rlc3Rfcm5kX251bSh1bnNpZ25lZCBpbnQgcm5kX2NudCkKK3sKKwl1aW50NjRfdCByOworCisJcm5kX25leHQgPSBybmRfbmV4dCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKwlyID0gKHJuZF9uZXh0ID4+IDE2KSAmIDB4N2ZmZjsKKwlyZXR1cm4gKHIgKiBybmRfY250KSA+PiAxNTsKK30KKworc3RhdGljIGludCBtbWNfdGVzdF9ybmRfcGVyZihzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgaW50IHdyaXRlLCBpbnQgcHJpbnQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3opCit7CisJdW5zaWduZWQgaW50IGRldl9hZGRyLCBjbnQsIHJuZF9hZGRyLCByYW5nZTEsIHJhbmdlMiwgbGFzdF9lYSA9IDAsIGVhOworCXVuc2lnbmVkIGludCBzc3o7CisJc3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyLCB0czsKKwlpbnQgcmV0OworCisJc3N6ID0gc3ogPj4gOTsKKworCXJuZF9hZGRyID0gbW1jX3Rlc3RfY2FwYWNpdHkodGVzdC0+Y2FyZCkgLyA0OworCXJhbmdlMSA9IHJuZF9hZGRyIC8gdGVzdC0+Y2FyZC0+cHJlZl9lcmFzZTsKKwlyYW5nZTIgPSByYW5nZTEgLyBzc3o7CisKKwlnZXRuc3RpbWVvZmRheSgmdHMxKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFVJTlRfTUFYOyBjbnQrKykgeworCQlnZXRuc3RpbWVvZmRheSgmdHMyKTsKKwkJdHMgPSB0aW1lc3BlY19zdWIodHMyLCB0czEpOworCQlpZiAodHMudHZfc2VjID49IDEwKQorCQkJYnJlYWs7CisJCWVhID0gbW1jX3Rlc3Rfcm5kX251bShyYW5nZTEpOworCQlpZiAoZWEgPT0gbGFzdF9lYSkKKwkJCWVhIC09IDE7CisJCWxhc3RfZWEgPSBlYTsKKwkJZGV2X2FkZHIgPSBybmRfYWRkciArIHRlc3QtPmNhcmQtPnByZWZfZXJhc2UgKiBlYSArCisJCQkgICBzc3ogKiBtbWNfdGVzdF9ybmRfbnVtKHJhbmdlMik7CisJCXJldCA9IG1tY190ZXN0X2FyZWFfaW8odGVzdCwgc3osIGRldl9hZGRyLCB3cml0ZSwgMCwgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAocHJpbnQpCisJCW1tY190ZXN0X3ByaW50X2F2Z19yYXRlKHRlc3QsIHN6LCBjbnQsICZ0czEsICZ0czIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tY190ZXN0X3JhbmRvbV9wZXJmKHN0cnVjdCBtbWNfdGVzdF9jYXJkICp0ZXN0LCBpbnQgd3JpdGUpCit7CisJdW5zaWduZWQgaW50IG5leHQ7CisJdW5zaWduZWQgbG9uZyBzejsKKwlpbnQgcmV0OworCisJZm9yIChzeiA9IDUxMjsgc3ogPCB0ZXN0LT5hcmVhLm1heF90ZnI7IHN6IDw8PSAxKSB7CisJCS8qCisJCSAqIFdoZW4gd3JpdGluZywgdHJ5IHRvIGdldCBtb3JlIGNvbnNpc3RlbnQgcmVzdWx0cyBieSBydW5uaW5nCisJCSAqIHRoZSB0ZXN0IHR3aWNlIHdpdGggZXhhY3RseSB0aGUgc2FtZSBJL08gYnV0IG91dHB1dHRpbmcgdGhlCisJCSAqIHJlc3VsdHMgb25seSBmb3IgdGhlIDJuZCBydW4uCisJCSAqLworCQlpZiAod3JpdGUpIHsKKwkJCW5leHQgPSBybmRfbmV4dDsKKwkJCXJldCA9IG1tY190ZXN0X3JuZF9wZXJmKHRlc3QsIHdyaXRlLCAwLCBzeik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlybmRfbmV4dCA9IG5leHQ7CisJCX0KKwkJcmV0ID0gbW1jX3Rlc3Rfcm5kX3BlcmYodGVzdCwgd3JpdGUsIDEsIHN6KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXN6ID0gdGVzdC0+YXJlYS5tYXhfdGZyOworCWlmICh3cml0ZSkgeworCQluZXh0ID0gcm5kX25leHQ7CisJCXJldCA9IG1tY190ZXN0X3JuZF9wZXJmKHRlc3QsIHdyaXRlLCAwLCBzeik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlybmRfbmV4dCA9IG5leHQ7CisJfQorCXJldHVybiBtbWNfdGVzdF9ybmRfcGVyZih0ZXN0LCB3cml0ZSwgMSwgc3opOworfQorCisvKgorICogUmFuZG9tIHJlYWQgcGVyZm9ybWFuY2UgYnkgdHJhbnNmZXIgc2l6ZS4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9yYW5kb21fcmVhZF9wZXJmKHN0cnVjdCBtbWNfdGVzdF9jYXJkICp0ZXN0KQoreworCXJldHVybiBtbWNfdGVzdF9yYW5kb21fcGVyZih0ZXN0LCAwKTsKK30KKworLyoKKyAqIFJhbmRvbSB3cml0ZSBwZXJmb3JtYW5jZSBieSB0cmFuc2ZlciBzaXplLgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X3JhbmRvbV93cml0ZV9wZXJmKHN0cnVjdCBtbWNfdGVzdF9jYXJkICp0ZXN0KQoreworCXJldHVybiBtbWNfdGVzdF9yYW5kb21fcGVyZih0ZXN0LCAxKTsKK30KKworc3RhdGljIGludCBtbWNfdGVzdF9zZXFfcGVyZihzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgaW50IHdyaXRlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdG90X3N6LCBpbnQgbWF4X3NjYXR0ZXIpCit7CisJdW5zaWduZWQgaW50IGRldl9hZGRyLCBpLCBjbnQsIHN6LCBzc3o7CisJc3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyLCB0czsKKwlpbnQgcmV0OworCisJc3ogPSB0ZXN0LT5hcmVhLm1heF90ZnI7CisJLyoKKwkgKiBJbiB0aGUgY2FzZSBvZiBhIG1heGltYWxseSBzY2F0dGVyZWQgdHJhbnNmZXIsIHRoZSBtYXhpbXVtIHRyYW5zZmVyCisJICogc2l6ZSBpcyBmdXJ0aGVyIGxpbWl0ZWQgYnkgdXNpbmcgUEFHRV9TSVpFIHNlZ21lbnRzLgorCSAqLworCWlmIChtYXhfc2NhdHRlcikgeworCQlzdHJ1Y3QgbW1jX3Rlc3RfYXJlYSAqdCA9ICZ0ZXN0LT5hcmVhOworCQl1bnNpZ25lZCBsb25nIG1heF90ZnI7CisKKwkJaWYgKHQtPm1heF9zZWdfc3ogPj0gUEFHRV9TSVpFKQorCQkJbWF4X3RmciA9IHQtPm1heF9zZWdzICogUEFHRV9TSVpFOworCQllbHNlCisJCQltYXhfdGZyID0gdC0+bWF4X3NlZ3MgKiB0LT5tYXhfc2VnX3N6OworCQlpZiAoc3ogPiBtYXhfdGZyKQorCQkJc3ogPSBtYXhfdGZyOworCX0KKworCXNzeiA9IHN6ID4+IDk7CisJZGV2X2FkZHIgPSBtbWNfdGVzdF9jYXBhY2l0eSh0ZXN0LT5jYXJkKSAvIDQ7CisJaWYgKHRvdF9zeiA+IGRldl9hZGRyIDw8IDkpCisJCXRvdF9zeiA9IGRldl9hZGRyIDw8IDk7CisJY250ID0gdG90X3N6IC8gc3o7CisJZGV2X2FkZHIgJj0gMHhmZmZmMDAwMDsgLyogUm91bmQgdG8gNjRNaUIgYm91bmRhcnkgKi8KKworCWdldG5zdGltZW9mZGF5KCZ0czEpOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlyZXQgPSBtbWNfdGVzdF9hcmVhX2lvKHRlc3QsIHN6LCBkZXZfYWRkciwgd3JpdGUsCisJCQkJICAgICAgIG1heF9zY2F0dGVyLCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWRldl9hZGRyICs9IHNzejsKKwl9CisJZ2V0bnN0aW1lb2ZkYXkoJnRzMik7CisKKwl0cyA9IHRpbWVzcGVjX3N1Yih0czIsIHRzMSk7CisJbW1jX3Rlc3RfcHJpbnRfYXZnX3JhdGUodGVzdCwgc3osIGNudCwgJnRzMSwgJnRzMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbWNfdGVzdF9sYXJnZV9zZXFfcGVyZihzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgaW50IHdyaXRlKQoreworCWludCByZXQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlyZXQgPSBtbWNfdGVzdF9zZXFfcGVyZih0ZXN0LCB3cml0ZSwgMTAgKiAxMDI0ICogMTAyNCwgMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXJldCA9IG1tY190ZXN0X3NlcV9wZXJmKHRlc3QsIHdyaXRlLCAxMDAgKiAxMDI0ICogMTAyNCwgMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IG1tY190ZXN0X3NlcV9wZXJmKHRlc3QsIHdyaXRlLCAxMDAwICogMTAyNCAqIDEwMjQsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTGFyZ2Ugc2VxdWVudGlhbCByZWFkIHBlcmZvcm1hbmNlLgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X2xhcmdlX3NlcV9yZWFkX3BlcmYoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJcmV0dXJuIG1tY190ZXN0X2xhcmdlX3NlcV9wZXJmKHRlc3QsIDApOworfQorCisvKgorICogTGFyZ2Ugc2VxdWVudGlhbCB3cml0ZSBwZXJmb3JtYW5jZS4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9sYXJnZV9zZXFfd3JpdGVfcGVyZihzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlyZXR1cm4gbW1jX3Rlc3RfbGFyZ2Vfc2VxX3BlcmYodGVzdCwgMSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX3Rlc3RfY2FzZSBtbWNfdGVzdF9jYXNlc1tdID0gewogCXsKIAkJLm5hbWUgPSAiQmFzaWMgd3JpdGUgKG5vIGRhdGEgdmVyaWZpY2F0aW9uKSIsCkBAIC0yMDA1LDYgKzIxOTYsMzQgQEAKIAkJLmNsZWFudXAgPSBtbWNfdGVzdF9hcmVhX2NsZWFudXAsCiAJfSwKIAorCXsKKwkJLm5hbWUgPSAiUmFuZG9tIHJlYWQgcGVyZm9ybWFuY2UgYnkgdHJhbnNmZXIgc2l6ZSIsCisJCS5wcmVwYXJlID0gbW1jX3Rlc3RfYXJlYV9wcmVwYXJlLAorCQkucnVuID0gbW1jX3Rlc3RfcmFuZG9tX3JlYWRfcGVyZiwKKwkJLmNsZWFudXAgPSBtbWNfdGVzdF9hcmVhX2NsZWFudXAsCisJfSwKKworCXsKKwkJLm5hbWUgPSAiUmFuZG9tIHdyaXRlIHBlcmZvcm1hbmNlIGJ5IHRyYW5zZmVyIHNpemUiLAorCQkucHJlcGFyZSA9IG1tY190ZXN0X2FyZWFfcHJlcGFyZSwKKwkJLnJ1biA9IG1tY190ZXN0X3JhbmRvbV93cml0ZV9wZXJmLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2FyZWFfY2xlYW51cCwKKwl9LAorCisJeworCQkubmFtZSA9ICJMYXJnZSBzZXF1ZW50aWFsIHJlYWQgaW50byBzY2F0dGVyZWQgcGFnZXMiLAorCQkucHJlcGFyZSA9IG1tY190ZXN0X2FyZWFfcHJlcGFyZSwKKwkJLnJ1biA9IG1tY190ZXN0X2xhcmdlX3NlcV9yZWFkX3BlcmYsCisJCS5jbGVhbnVwID0gbW1jX3Rlc3RfYXJlYV9jbGVhbnVwLAorCX0sCisKKwl7CisJCS5uYW1lID0gIkxhcmdlIHNlcXVlbnRpYWwgd3JpdGUgZnJvbSBzY2F0dGVyZWQgcGFnZXMiLAorCQkucHJlcGFyZSA9IG1tY190ZXN0X2FyZWFfcHJlcGFyZSwKKwkJLnJ1biA9IG1tY190ZXN0X2xhcmdlX3NlcV93cml0ZV9wZXJmLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2FyZWFfY2xlYW51cCwKKwl9LAorCiB9OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKG1tY190ZXN0X2xvY2spOwpAQCAtMjE0OCwxMSArMjM2NywxMSBAQAogCQlzZXFfcHJpbnRmKHNmLCAiVGVzdCAlZDogJWRcbiIsIGdyLT50ZXN0Y2FzZSArIDEsIGdyLT5yZXN1bHQpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodHIsICZnci0+dHJfbHN0LCBsaW5rKSB7Ci0JCQlzZXFfcHJpbnRmKHNmLCAiJXUgJWQgJWx1LiUwOWx1ICV1XG4iLAorCQkJc2VxX3ByaW50ZihzZiwgIiV1ICVkICVsdS4lMDlsdSAldSAldS4lMDJ1XG4iLAogCQkJCXRyLT5jb3VudCwgdHItPnNlY3RvcnMsCiAJCQkJKHVuc2lnbmVkIGxvbmcpdHItPnRzLnR2X3NlYywKIAkJCQkodW5zaWduZWQgbG9uZyl0ci0+dHMudHZfbnNlYywKLQkJCQl0ci0+cmF0ZSk7CisJCQkJdHItPnJhdGUsIHRyLT5pb3BzIC8gMTAwLCB0ci0+aW9wcyAlIDEwMCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9jb3JlL01ha2VmaWxlCmluZGV4IDg2YjQ3OTEuLjYzOTUwMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvY29yZS9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIG1tY19jb3JlLXkJCQk6PSBjb3JlLm8gYnVzLm8gaG9zdC5vIFwKIAkJCQkgICBtbWMubyBtbWNfb3BzLm8gc2QubyBzZF9vcHMubyBcCiAJCQkJICAgc2Rpby5vIHNkaW9fb3BzLm8gc2Rpb19idXMubyBcCi0JCQkJICAgc2Rpb19jaXMubyBzZGlvX2lvLm8gc2Rpb19pcnEubworCQkJCSAgIHNkaW9fY2lzLm8gc2Rpb19pby5vIHNkaW9faXJxLm8gXAorCQkJCSAgIHF1aXJrcy5vCiAKIG1tY19jb3JlLSQoQ09ORklHX0RFQlVHX0ZTKQkrPSBkZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggMTUwYjVmMy4uMWY0NTNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTE2Nyw4ICsxNjcsNiBAQAogCiAJV0FSTl9PTighaG9zdC0+Y2xhaW1lZCk7CiAKLQlsZWRfdHJpZ2dlcl9ldmVudChob3N0LT5sZWQsIExFRF9GVUxMKTsKLQogCW1ycS0+Y21kLT5lcnJvciA9IDA7CiAJbXJxLT5jbWQtPm1ycSA9IG1ycTsKIAlpZiAobXJxLT5kYXRhKSB7CkBAIC0xOTQsNiArMTkyLDcgQEAKIAkJfQogCX0KIAltbWNfaG9zdF9jbGtfdW5nYXRlKGhvc3QpOworCWxlZF90cmlnZ2VyX2V2ZW50KGhvc3QtPmxlZCwgTEVEX0ZVTEwpOwogCWhvc3QtPm9wcy0+cmVxdWVzdChob3N0LCBtcnEpOwogfQogCkBAIC01MjgsNyArNTI3LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MKG1tY190cnlfY2xhaW1faG9zdCk7CiAKLXN0YXRpYyB2b2lkIG1tY19kb19yZWxlYXNlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQorLyoqCisgKgltbWNfZG9fcmVsZWFzZV9ob3N0IC0gcmVsZWFzZSBhIGNsYWltZWQgaG9zdAorICoJQGhvc3Q6IG1tYyBob3N0IHRvIHJlbGVhc2UKKyAqCisgKglJZiB5b3Ugc3VjY2Vzc2Z1bGx5IGNsYWltZWQgYSBob3N0LCB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAqCXJlbGVhc2UgaXQgYWdhaW4uCisgKi8KK3ZvaWQgbW1jX2RvX3JlbGVhc2VfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNTQzLDYgKzU0OSw3IEBACiAJCXdha2VfdXAoJmhvc3QtPndxKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKG1tY19kb19yZWxlYXNlX2hvc3QpOwogCiB2b2lkIG1tY19ob3N0X2RlZXBlcl9kaXNhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTEwMDIsNiArMTAwOSwxMyBAQAogewogCWhvc3QtPmlvcy5jbG9jayA9IDA7CiAJaG9zdC0+aW9zLnZkZCA9IDA7CisKKwkvKgorCSAqIFJlc2V0IG9jciBtYXNrIHRvIGJlIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHZvbHRhZ2Ugc3VwcG9ydGVkIGZvcgorCSAqIHRoaXMgbW1jIGhvc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGF0IG5leHQgcG93ZXIgdXAuCisJICovCisJaG9zdC0+b2NyID0gMSA8PCAoZmxzKGhvc3QtPm9jcl9hdmFpbCkgLSAxKTsKKwogCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7CiAJCWhvc3QtPmlvcy5idXNfbW9kZSA9IE1NQ19CVVNNT0RFX09QRU5EUkFJTjsKIAkJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0RPTlRDQVJFOwpAQCAtMTQ5NSw2ICsxNTA5LDEyIEBACiAJCW1tY19ob3N0bmFtZShob3N0KSwgX19mdW5jX18sIGhvc3QtPmZfaW5pdCk7CiAjZW5kaWYKIAltbWNfcG93ZXJfdXAoaG9zdCk7CisKKwkvKgorCSAqIHNkaW9fcmVzZXQgc2VuZHMgQ01ENTIgdG8gcmVzZXQgY2FyZC4gIFNpbmNlIHdlIGRvIG5vdCBrbm93CisJICogaWYgdGhlIGNhcmQgaXMgYmVpbmcgcmUtaW5pdGlhbGl6ZWQsIGp1c3Qgc2VuZCBpdC4gIENNRDUyCisJICogc2hvdWxkIGJlIGlnbm9yZWQgYnkgU0QvZU1NQyBjYXJkcy4KKwkgKi8KIAlzZGlvX3Jlc2V0KGhvc3QpOwogCW1tY19nb19pZGxlKGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCmluZGV4IGNhMWZkZGUuLjIwYjFjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCkBAIC02MSw2ICs2MSw4IEBACiBpbnQgbW1jX2F0dGFjaF9zZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogaW50IG1tY19hdHRhY2hfc2RpbyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogCit2b2lkIG1tY19maXh1cF9kZXZpY2Uoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKKwogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIGV4dGVybiBpbnQgdXNlX3NwaV9jcmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKaW5kZXggYjNhYzZjNS4uNDYxZTZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKQEAgLTE2MCwxMCArMTYwLDcgQEAKIAkgKiBnYXRlIHRoZSBjbG9jaywgYmVjYXVzZSB0aGVyZSBpcyBzb21lYm9keSBvdXQgdGhlcmUgdGhhdCBtYXkgc3RpbGwKIAkgKiBiZSB1c2luZyBpdC4KIAkgKi8KLQlpZiAobW1jX2NhcmRfc2RpbyhjYXJkKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuICEoY2FyZC0+cXVpcmtzICYgTU1DX1FVSVJLX0JST0tFTl9DTEtfR0FUSU5HKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tYy5jIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwppbmRleCAxNjAwNmVmLi4xNGU5NWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKQEAgLTMwMiw2ICszMDIsNDQgQEAKIAl9CiAKIAlpZiAoY2FyZC0+ZXh0X2NzZC5yZXYgPj0gNCkgeworCQkvKgorCQkgKiBFbmhhbmNlZCBhcmVhIGZlYXR1cmUgc3VwcG9ydCAtLSBjaGVjayB3aGV0aGVyIHRoZSBlTU1DCisJCSAqIGNhcmQgaGFzIHRoZSBFbmhhbmNlZCBhcmVhIGVuYWJsZWQuICBJZiBzbywgZXhwb3J0IGVuaGFuY2VkCisJCSAqIGFyZWEgb2Zmc2V0IGFuZCBzaXplIHRvIHVzZXIgYnkgYWRkaW5nIHN5c2ZzIGludGVyZmFjZS4KKwkJICovCisJCWlmICgoZXh0X2NzZFtFWFRfQ1NEX1BBUlRJVElPTl9TVVBQT1JUXSAmIDB4MikgJiYKKwkJCQkoZXh0X2NzZFtFWFRfQ1NEX1BBUlRJVElPTl9BVFRSSUJVVEVdICYgMHgxKSkgeworCQkJdTggaGNfZXJhc2VfZ3JwX3N6ID0KKwkJCQlleHRfY3NkW0VYVF9DU0RfSENfRVJBU0VfR1JQX1NJWkVdOworCQkJdTggaGNfd3BfZ3JwX3N6ID0KKwkJCQlleHRfY3NkW0VYVF9DU0RfSENfV1BfR1JQX1NJWkVdOworCisJCQljYXJkLT5leHRfY3NkLmVuaGFuY2VkX2FyZWFfZW4gPSAxOworCQkJLyoKKwkJCSAqIGNhbGN1bGF0ZSB0aGUgZW5oYW5jZWQgZGF0YSBhcmVhIG9mZnNldCwgaW4gYnl0ZXMKKwkJCSAqLworCQkJY2FyZC0+ZXh0X2NzZC5lbmhhbmNlZF9hcmVhX29mZnNldCA9CisJCQkJKGV4dF9jc2RbMTM5XSA8PCAyNCkgKyAoZXh0X2NzZFsxMzhdIDw8IDE2KSArCisJCQkJKGV4dF9jc2RbMTM3XSA8PCA4KSArIGV4dF9jc2RbMTM2XTsKKwkJCWlmIChtbWNfY2FyZF9ibG9ja2FkZHIoY2FyZCkpCisJCQkJY2FyZC0+ZXh0X2NzZC5lbmhhbmNlZF9hcmVhX29mZnNldCA8PD0gOTsKKwkJCS8qCisJCQkgKiBjYWxjdWxhdGUgdGhlIGVuaGFuY2VkIGRhdGEgYXJlYSBzaXplLCBpbiBraWxvYnl0ZXMKKwkJCSAqLworCQkJY2FyZC0+ZXh0X2NzZC5lbmhhbmNlZF9hcmVhX3NpemUgPQorCQkJCShleHRfY3NkWzE0Ml0gPDwgMTYpICsgKGV4dF9jc2RbMTQxXSA8PCA4KSArCisJCQkJZXh0X2NzZFsxNDBdOworCQkJY2FyZC0+ZXh0X2NzZC5lbmhhbmNlZF9hcmVhX3NpemUgKj0KKwkJCQkoc2l6ZV90KShoY19lcmFzZV9ncnBfc3ogKiBoY193cF9ncnBfc3opOworCQkJY2FyZC0+ZXh0X2NzZC5lbmhhbmNlZF9hcmVhX3NpemUgPDw9IDk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogSWYgdGhlIGVuaGFuY2VkIGFyZWEgaXMgbm90IGVuYWJsZWQsIGRpc2FibGUgdGhlc2UKKwkJCSAqIGRldmljZSBhdHRyaWJ1dGVzLgorCQkJICovCisJCQljYXJkLT5leHRfY3NkLmVuaGFuY2VkX2FyZWFfb2Zmc2V0ID0gLUVJTlZBTDsKKwkJCWNhcmQtPmV4dF9jc2QuZW5oYW5jZWRfYXJlYV9zaXplID0gLUVJTlZBTDsKKwkJfQogCQljYXJkLT5leHRfY3NkLnNlY190cmltX211bHQgPQogCQkJZXh0X2NzZFtFWFRfQ1NEX1NFQ19UUklNX01VTFRdOwogCQljYXJkLT5leHRfY3NkLnNlY19lcmFzZV9tdWx0ID0KQEAgLTMzNiw2ICszNzQsOSBAQAogTU1DX0RFVl9BVFRSKG5hbWUsICIlc1xuIiwgY2FyZC0+Y2lkLnByb2RfbmFtZSk7CiBNTUNfREVWX0FUVFIob2VtaWQsICIweCUwNHhcbiIsIGNhcmQtPmNpZC5vZW1pZCk7CiBNTUNfREVWX0FUVFIoc2VyaWFsLCAiMHglMDh4XG4iLCBjYXJkLT5jaWQuc2VyaWFsKTsKK01NQ19ERVZfQVRUUihlbmhhbmNlZF9hcmVhX29mZnNldCwgIiVsbHVcbiIsCisJCWNhcmQtPmV4dF9jc2QuZW5oYW5jZWRfYXJlYV9vZmZzZXQpOworTU1DX0RFVl9BVFRSKGVuaGFuY2VkX2FyZWFfc2l6ZSwgIiV1XG4iLCBjYXJkLT5leHRfY3NkLmVuaGFuY2VkX2FyZWFfc2l6ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptbWNfc3RkX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2NpZC5hdHRyLApAQCAtMzQ5LDYgKzM5MCw4IEBACiAJJmRldl9hdHRyX25hbWUuYXR0ciwKIAkmZGV2X2F0dHJfb2VtaWQuYXR0ciwKIAkmZGV2X2F0dHJfc2VyaWFsLmF0dHIsCisJJmRldl9hdHRyX2VuaGFuY2VkX2FyZWFfb2Zmc2V0LmF0dHIsCisJJmRldl9hdHRyX2VuaGFuY2VkX2FyZWFfc2l6ZS5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0zNzgsNiArNDIxLDcgQEAKIAlpbnQgZXJyLCBkZHIgPSAwOwogCXUzMiBjaWRbNF07CiAJdW5zaWduZWQgaW50IG1heF9kdHI7CisJdTMyIHJvY3I7CiAKIAlCVUdfT04oIWhvc3QpOwogCVdBUk5fT04oIWhvc3QtPmNsYWltZWQpOwpAQCAtMzkxLDcgKzQzNSw3IEBACiAJbW1jX2dvX2lkbGUoaG9zdCk7CiAKIAkvKiBUaGUgZXh0cmEgYml0IGluZGljYXRlcyB0aGF0IHdlIHN1cHBvcnQgaGlnaCBjYXBhY2l0eSAqLwotCWVyciA9IG1tY19zZW5kX29wX2NvbmQoaG9zdCwgb2NyIHwgKDEgPDwgMzApLCBOVUxMKTsKKwllcnIgPSBtbWNfc2VuZF9vcF9jb25kKGhvc3QsIG9jciB8ICgxIDw8IDMwKSwgJnJvY3IpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyOwogCkBAIC00NzksMTEgKzUyMyw1MSBAQAogCQllcnIgPSBtbWNfcmVhZF9leHRfY3NkKGNhcmQpOwogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2NhcmQ7CisKKwkJLyogSWYgZG9pbmcgYnl0ZSBhZGRyZXNzaW5nLCBjaGVjayBpZiByZXF1aXJlZCB0byBkbyBzZWN0b3IKKwkJICogYWRkcmVzc2luZy4gIEhhbmRsZSB0aGUgY2FzZSBvZiA8MkdCIGNhcmRzIG5lZWRpbmcgc2VjdG9yCisJCSAqIGFkZHJlc3NpbmcuICBTZWUgc2VjdGlvbiA4LjEgSkVERUMgU3RhbmRhcmQgSkVEODQtQTQ0MTsKKwkJICogb2NyIHJlZ2lzdGVyIGhhcyBiaXQgMzAgc2V0IGZvciBzZWN0b3IgYWRkcmVzc2luZy4KKwkJICovCisJCWlmICghKG1tY19jYXJkX2Jsb2NrYWRkcihjYXJkKSkgJiYgKHJvY3IgJiAoMTw8MzApKSkKKwkJCW1tY19jYXJkX3NldF9ibG9ja2FkZHIoY2FyZCk7CisKIAkJLyogRXJhc2Ugc2l6ZSBkZXBlbmRzIG9uIENTRCBhbmQgRXh0ZW5kZWQgQ1NEICovCiAJCW1tY19zZXRfZXJhc2Vfc2l6ZShjYXJkKTsKIAl9CiAKIAkvKgorCSAqIElmIGVuaGFuY2VkX2FyZWFfZW4gaXMgVFJVRSwgaG9zdCBuZWVkcyB0byBlbmFibGUgRVJBU0VfR1JQX0RFRgorCSAqIGJpdC4gIFRoaXMgYml0IHdpbGwgYmUgbG9zdCBldmVyeXRpbWUgYWZ0ZXIgYSByZXNldCBvciBwb3dlciBvZmYuCisJICovCisJaWYgKGNhcmQtPmV4dF9jc2QuZW5oYW5jZWRfYXJlYV9lbikgeworCQllcnIgPSBtbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCisJCQkJRVhUX0NTRF9FUkFTRV9HUk9VUF9ERUYsIDEpOworCisJCWlmIChlcnIgJiYgZXJyICE9IC1FQkFETVNHKQorCQkJZ290byBmcmVlX2NhcmQ7CisKKwkJaWYgKGVycikgeworCQkJZXJyID0gMDsKKwkJCS8qCisJCQkgKiBKdXN0IGRpc2FibGUgZW5oYW5jZWQgYXJlYSBvZmYgJiBzegorCQkJICogd2lsbCB0cnkgdG8gZW5hYmxlIEVSQVNFX0dST1VQX0RFRgorCQkJICogZHVyaW5nIG5leHQgdGltZSByZWluaXQKKwkJCSAqLworCQkJY2FyZC0+ZXh0X2NzZC5lbmhhbmNlZF9hcmVhX29mZnNldCA9IC1FSU5WQUw7CisJCQljYXJkLT5leHRfY3NkLmVuaGFuY2VkX2FyZWFfc2l6ZSA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQljYXJkLT5leHRfY3NkLmVyYXNlX2dyb3VwX2RlZiA9IDE7CisJCQkvKgorCQkJICogZW5hYmxlIEVSQVNFX0dSUF9ERUYgc3VjY2Vzc2Z1bGx5LgorCQkJICogVGhpcyB3aWxsIGFmZmVjdCB0aGUgZXJhc2Ugc2l6ZSwgc28KKwkJCSAqIGhlcmUgbmVlZCB0byByZXNldCBlcmFzZSBzaXplCisJCQkgKi8KKwkJCW1tY19zZXRfZXJhc2Vfc2l6ZShjYXJkKTsKKwkJfQorCX0KKworCS8qCiAJICogQWN0aXZhdGUgaGlnaCBzcGVlZCAoaWYgc3VwcG9ydGVkKQogCSAqLwogCWlmICgoY2FyZC0+ZXh0X2NzZC5oc19tYXhfZHRyICE9IDApICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3F1aXJrcy5jIGIvZHJpdmVycy9tbWMvY29yZS9xdWlya3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTExOGI3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvcXVpcmtzLmMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgd29yay1hcm91bmRzIGZvciBtYW55IGtub3duIHNkaW8gaGFyZHdhcmUKKyAqICBidWdzLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTEgUGllcnJlIFRhcmR5IDx0YXJkeXBAZ21haWwuY29tPgorICogIEluc3BpcmVkIGZyb20gcGNpIGZpeHVwIGNvZGU6CisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorCisvKgorICogIFRoZSB3b3JsZCBpcyBub3QgcGVyZmVjdCBhbmQgc3VwcGxpZXMgdXMgd2l0aCBicm9rZW4gbW1jL3NkaW8gZGV2aWNlcy4KKyAqICBGb3IgYXQgbGVhc3QgYSBwYXJ0IG9mIHRoZXNlIGJ1Z3Mgd2UgbmVlZCBhIHdvcmstYXJvdW5kCisgKi8KKworc3RydWN0IG1tY19maXh1cCB7CisJdTE2IHZlbmRvciwgZGV2aWNlOwkvKiBZb3UgY2FuIHVzZSBTRElPX0FOWV9JRCBoZXJlIG9mIGNvdXJzZSAqLworCXZvaWQgKCp2ZW5kb3JfZml4dXApKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgaW50IGRhdGEpOworCWludCBkYXRhOworfTsKKworLyoKKyAqIFRoaXMgaG9vayBqdXN0IGFkZHMgYSBxdWlyayB1bmNvbmRpdGlvbm5hbGx5CisgKi8KK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGFkZF9xdWlyayhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIGludCBkYXRhKQoreworCWNhcmQtPnF1aXJrcyB8PSBkYXRhOworfQorCisvKgorICogVGhpcyBob29rIGp1c3QgcmVtb3ZlcyBhIHF1aXJrIHVuY29uZGl0aW9ubmFsbHkKKyAqLworc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgcmVtb3ZlX3F1aXJrKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgaW50IGRhdGEpCit7CisJY2FyZC0+cXVpcmtzICY9IH5kYXRhOworfQorCisvKgorICogVGhpcyBob29rIGp1c3QgYWRkcyBhIHF1aXJrIGZvciBhbGwgc2RpbyBkZXZpY2VzCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9xdWlya19mb3Jfc2Rpb19kZXZpY2VzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgaW50IGRhdGEpCit7CisJaWYgKG1tY19jYXJkX3NkaW8oY2FyZCkpCisJCWNhcmQtPnF1aXJrcyB8PSBkYXRhOworfQorCisjaWZuZGVmIFNESU9fVkVORE9SX0lEX1RJCisjZGVmaW5lIFNESU9fVkVORE9SX0lEX1RJCQkweDAwOTcKKyNlbmRpZgorCisjaWZuZGVmIFNESU9fREVWSUNFX0lEX1RJX1dMMTI3MQorI2RlZmluZSBTRElPX0RFVklDRV9JRF9USV9XTDEyNzEJMHg0MDc2CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfZml4dXAgbW1jX2ZpeHVwX21ldGhvZHNbXSA9IHsKKwkvKiBieSBkZWZhdWx0IHNkaW8gZGV2aWNlcyBhcmUgY29uc2lkZXJlZCBDTEtfR0FUSU5HIGJyb2tlbiAqLworCS8qIGdvb2QgY2FyZHMgd2lsbCBiZSB3aGl0ZWxpc3RlZCBhcyB0aGV5IGFyZSB0ZXN0ZWQgKi8KKwl7IFNESU9fQU5ZX0lELCBTRElPX0FOWV9JRCwKKwkJYWRkX3F1aXJrX2Zvcl9zZGlvX2RldmljZXMsIE1NQ19RVUlSS19CUk9LRU5fQ0xLX0dBVElORyB9LAorCXsgU0RJT19WRU5ET1JfSURfVEksIFNESU9fREVWSUNFX0lEX1RJX1dMMTI3MSwKKwkJcmVtb3ZlX3F1aXJrLCBNTUNfUVVJUktfQlJPS0VOX0NMS19HQVRJTkcgfSwKKwl7IDAgfQorfTsKKwordm9pZCBtbWNfZml4dXBfZGV2aWNlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwljb25zdCBzdHJ1Y3QgbW1jX2ZpeHVwICpmOworCisJZm9yIChmID0gbW1jX2ZpeHVwX21ldGhvZHM7IGYtPnZlbmRvcl9maXh1cDsgZisrKSB7CisJCWlmICgoZi0+dmVuZG9yID09IGNhcmQtPmNpcy52ZW5kb3IKKwkJICAgICB8fCBmLT52ZW5kb3IgPT0gKHUxNikgU0RJT19BTllfSUQpICYmCisJCSAgICAoZi0+ZGV2aWNlID09IGNhcmQtPmNpcy5kZXZpY2UKKwkJICAgICB8fCBmLT5kZXZpY2UgPT0gKHUxNikgU0RJT19BTllfSUQpKSB7CisJCQlkZXZfZGJnKCZjYXJkLT5kZXYsICJjYWxsaW5nICVwRlxuIiwgZi0+dmVuZG9yX2ZpeHVwKTsKKwkJCWYtPnZlbmRvcl9maXh1cChjYXJkLCBmLT5kYXRhKTsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0wobW1jX2ZpeHVwX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkLmMKaW5kZXggZDE4YzMyYi4uNmRhYzg5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJidXMuaCIKICNpbmNsdWRlICJtbWNfb3BzLmgiCisjaW5jbHVkZSAic2QuaCIKICNpbmNsdWRlICJzZF9vcHMuaCIKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0cmFuX2V4cFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwppbmRleCBlYmM2MmFkLi5kYjBmMGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwpAQCAtMzk1LDYgKzM5NSwxNCBAQAogCQlpZiAoZXJyKQogCQkJZ290byByZW1vdmU7CiAKKwkJLyoKKwkJICogVXBkYXRlIG9sZGNhcmQgd2l0aCB0aGUgbmV3IFJDQSByZWNlaXZlZCBmcm9tIHRoZSBTRElPCisJCSAqIGRldmljZSAtLSB3ZSdyZSBkb2luZyB0aGlzIHNvIHRoYXQgaXQncyB1cGRhdGVkIGluIHRoZQorCQkgKiAiY2FyZCIgc3RydWN0IHdoZW4gb2xkY2FyZCBvdmVyd3JpdGVzIHRoYXQgbGF0ZXIuCisJCSAqLworCQlpZiAob2xkY2FyZCkKKwkJCW9sZGNhcmQtPnJjYSA9IGNhcmQtPnJjYTsKKwogCQltbWNfc2V0X2J1c19tb2RlKGhvc3QsIE1NQ19CVVNNT0RFX1BVU0hQVUxMKTsKIAl9CiAKQEAgLTQ1OCw2ICs0NjYsNyBAQAogCiAJCWNhcmQgPSBvbGRjYXJkOwogCX0KKwltbWNfZml4dXBfZGV2aWNlKGNhcmQpOwogCiAJaWYgKGNhcmQtPnR5cGUgPT0gTU1DX1RZUEVfU0RfQ09NQk8pIHsKIAkJZXJyID0gbW1jX3NkX3NldHVwX2NhcmQoaG9zdCwgY2FyZCwgb2xkY2FyZCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCBhZmU4YzZmLi4xYTIxYzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC0yMjUsNyArMjI1LDcgQEAKIAogY29uZmlnIE1NQ19PTUFQX0hTCiAJdHJpc3RhdGUgIlRJIE9NQVAgSGlnaCBTcGVlZCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyNDMwIHx8IEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQNAorCWRlcGVuZHMgb24gU09DX09NQVAyNDMwIHx8IEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQNAogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgVEkgT01BUCBIaWdoIFNwZWVkIE11bHRpbWVkaWEgY2FyZCBJbnRlcmZhY2UuCiAJICBJZiB5b3UgaGF2ZSBhbiBPTUFQMjQzMCBvciBPTUFQMyBib2FyZCBvciBPTUFQNCBib2FyZCB3aXRoIGEKQEAgLTMxMSw3ICszMTEsNyBAQAogCiBjb25maWcgTU1DX01YQwogCXRyaXN0YXRlICJGcmVlc2NhbGUgaS5NWDIvMyBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX01YQworCWRlcGVuZHMgb24gTUFDSF9NWDIxIHx8IE1BQ0hfTVgyNyB8fCBBUkNIX01YMzEKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgdGhlIEZyZWVzY2FsZSBpLk1YMi8zIE11bHRpbWVkaWEgY2FyZCBJbnRlcmZhY2UuCiAJICBJZiB5b3UgaGF2ZSBhIGkuTVggcGxhdGZvcm0gd2l0aCBhIE11bHRpbWVkaWEgQ2FyZCBzbG90LApAQCAtMzE5LDYgKzMxOSwxNSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX01YUworCXRyaXN0YXRlICJGcmVlc2NhbGUgTVhTIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfTVhTICYmIE1YU19ETUEKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIEZyZWVzY2FsZSBTU1AgTU1DIGNvbnRyb2xsZXIgZm91bmQgb24gTVhTIGJhc2VkCisJICBwbGF0Zm9ybXMgbGlrZSBteDIzLzI4LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX1RJRk1fU0QKIAl0cmlzdGF0ZSAiVEkgRmxhc2ggTWVkaWEgTU1DL1NEIEludGVyZmFjZSBzdXBwb3J0ICAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCmluZGV4IGU4MzRmYjIuLjMwYWE2ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIG9iai0kKENPTkZJR19NTUNfUFhBKQkJKz0gcHhhbWNpLm8KIG9iai0kKENPTkZJR19NTUNfSU1YKQkJKz0gaW14bW1jLm8KIG9iai0kKENPTkZJR19NTUNfTVhDKQkJKz0gbXhjbW1jLm8KK29iai0kKENPTkZJR19NTUNfTVhTKQkJKz0gbXhzLW1tYy5vCiBvYmotJChDT05GSUdfTU1DX1NESENJKQkJKz0gc2RoY2kubwogb2JqLSQoQ09ORklHX01NQ19TREhDSV9QQ0kpCSs9IHNkaGNpLXBjaS5vCiBvYmotJChDT05GSUdfTU1DX1NESENJX1BYQSkJKz0gc2RoY2ktcHhhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IGFkMmE3YTAuLjgwYmM5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtNTc4LDcgKzU3OCw4IEBACiAJc3RydWN0IG1tY19kYXRhCQkJKmRhdGEgPSBob3N0LT5kYXRhOwogCiAJaWYgKGRhdGEpCi0JCWRtYV91bm1hcF9zZygmaG9zdC0+cGRldi0+ZGV2LCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLAorCQlkbWFfdW5tYXBfc2coaG9zdC0+ZG1hLmNoYW4tPmRldmljZS0+ZGV2LAorCQkJICAgICBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLAogCQkJICAgICAoKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCiAJCQkgICAgICA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpKTsKIH0KQEAgLTU4OCw3ICs1ODksNyBAQAogCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGhvc3QtPmRhdGFfY2hhbjsKIAogCWlmIChjaGFuKSB7Ci0JICBjaGFuLT5kZXZpY2UtPmRldmljZV9jb250cm9sKGNoYW4sIERNQV9URVJNSU5BVEVfQUxMLCAwKTsKKwkJZG1hZW5naW5lX3Rlcm1pbmF0ZV9hbGwoY2hhbik7CiAJCWF0bWNpX2RtYV9jbGVhbnVwKGhvc3QpOwogCX0gZWxzZSB7CiAJCS8qIERhdGEgdHJhbnNmZXIgd2FzIHN0b3BwZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyICovCkBAIC02ODQsMTEgKzY4NSwxMSBAQAogCWVsc2UKIAkJZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKIAotCXNnbGVuID0gZG1hX21hcF9zZygmaG9zdC0+cGRldi0+ZGV2LCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBkaXJlY3Rpb24pOwotCWlmIChzZ2xlbiAhPSBkYXRhLT5zZ19sZW4pCi0JCWdvdG8gdW5tYXBfZXhpdDsKKwlzZ2xlbiA9IGRtYV9tYXBfc2coY2hhbi0+ZGV2aWNlLT5kZXYsIGRhdGEtPnNnLAorCQkJICAgZGF0YS0+c2dfbGVuLCBkaXJlY3Rpb24pOworCiAJZGVzYyA9IGNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coY2hhbiwKLQkJCWRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sIGRpcmVjdGlvbiwKKwkJCWRhdGEtPnNnLCBzZ2xlbiwgZGlyZWN0aW9uLAogCQkJRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKIAlpZiAoIWRlc2MpCiAJCWdvdG8gdW5tYXBfZXhpdDsKQEAgLTY5OSw3ICs3MDAsNyBAQAogCiAJcmV0dXJuIDA7CiB1bm1hcF9leGl0OgotCWRtYV91bm1hcF9zZygmaG9zdC0+cGRldi0+ZGV2LCBkYXRhLT5zZywgc2dsZW4sIGRpcmVjdGlvbik7CisJZG1hX3VubWFwX3NnKGNoYW4tPmRldmljZS0+ZGV2LCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBkaXJlY3Rpb24pOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC03MDksOCArNzEwLDggQEAKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJKmRlc2MgPSBob3N0LT5kbWEuZGF0YV9kZXNjOwogCiAJaWYgKGNoYW4pIHsKLQkJZGVzYy0+dHhfc3VibWl0KGRlc2MpOwotCQljaGFuLT5kZXZpY2UtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworCQlkbWFlbmdpbmVfc3VibWl0KGRlc2MpOworCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhjaGFuKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvY2I3MTAtbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2NiNzEwLW1tYy5jCmluZGV4IDY2YjRjZTUuLmNlMmE0N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvY2I3MTAtbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9jYjcxMC1tbWMuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJCQkiV0FJVDEyOiB3YWl0ZWQgJWQgbG9vcHMsIG1hc2sgJTAyWCwgZW50cnkgdmFsICUwOFgsIGV4aXQgdmFsICUwOFhcbiIsCiAJCQlsaW1pdCwgbWFzaywgZSwgeCk7CiAjZW5kaWYKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBjYjcxMF9tbWNfc2V0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNiNzEwX3Nsb3QgKnNsb3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYwppbmRleCAyZmNjODI1Li41YTYxNDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2R3X21tYy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSAiZHdfbW1jLmgiCiAKQEAgLTU2Miw3ICs1NjMsOCBAQAogCQkJICAgICBTRE1NQ19DTURfVVBEX0NMSyB8IFNETU1DX0NNRF9QUlZfREFUX1dBSVQsIDApOwogCiAJCS8qIGVuYWJsZSBjbG9jayAqLwotCQltY2lfd3JpdGVsKGhvc3QsIENMS0VOQSwgU0RNTUNfQ0xLRU5fRU5BQkxFKTsKKwkJbWNpX3dyaXRlbChob3N0LCBDTEtFTkEsIFNETU1DX0NMS0VOX0VOQUJMRSB8CisJCQkgICBTRE1NQ19DTEtFTl9MT1dfUFdSKTsKIAogCQkvKiBpbmZvcm0gQ0lVICovCiAJCW1jaV9zZW5kX2NtZChzbG90LApAQCAtNjYxLDYgKzY2Myw3IEBACiBzdGF0aWMgdm9pZCBkd19tY2lfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKIHsKIAlzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJpdihtbWMpOworCXUzMiByZWdzOwogCiAJLyogc2V0IGRlZmF1bHQgMSBiaXQgbW9kZSAqLwogCXNsb3QtPmN0eXBlID0gU0RNTUNfQ1RZUEVfMUJJVDsKQEAgLTY3Miw2ICs2NzUsMTYgQEAKIAljYXNlIE1NQ19CVVNfV0lEVEhfNDoKIAkJc2xvdC0+Y3R5cGUgPSBTRE1NQ19DVFlQRV80QklUOwogCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfODoKKwkJc2xvdC0+Y3R5cGUgPSBTRE1NQ19DVFlQRV84QklUOworCQlicmVhazsKKwl9CisKKwkvKiBERFIgbW9kZSBzZXQgKi8KKwlpZiAoaW9zLT5kZHIpIHsKKwkJcmVncyA9IG1jaV9yZWFkbChzbG90LT5ob3N0LCBVSFNfUkVHKTsKKwkJcmVncyB8PSAoMHgxIDw8IHNsb3QtPmlkKSA8PCAxNjsKKwkJbWNpX3dyaXRlbChzbG90LT5ob3N0LCBVSFNfUkVHLCByZWdzKTsKIAl9CiAKIAlpZiAoaW9zLT5jbG9jaykgewpAQCAtNzE3LDcgKzczMCw5IEBACiAJc3RydWN0IGR3X21jaV9ib2FyZCAqYnJkID0gc2xvdC0+aG9zdC0+cGRhdGE7CiAKIAkvKiBVc2UgcGxhdGZvcm0gZ2V0X2NkIGZ1bmN0aW9uLCBlbHNlIHRyeSBvbmJvYXJkIGNhcmQgZGV0ZWN0ICovCi0JaWYgKGJyZC0+Z2V0X2NkKQorCWlmIChicmQtPnF1aXJrcyAmIERXX01DSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04pCisJCXByZXNlbnQgPSAxOworCWVsc2UgaWYgKGJyZC0+Z2V0X2NkKQogCQlwcmVzZW50ID0gIWJyZC0+Z2V0X2NkKHNsb3QtPmlkKTsKIAllbHNlCiAJCXByZXNlbnQgPSAobWNpX3JlYWRsKHNsb3QtPmhvc3QsIENERVRFQ1QpICYgKDEgPDwgc2xvdC0+aWQpKQpAQCAtMTAxOSwxMyArMTAzNCwxMCBAQAogCXN0cnVjdCBtbWNfZGF0YQkqZGF0YSA9IGhvc3QtPmRhdGE7CiAJaW50IHNoaWZ0ID0gaG9zdC0+ZGF0YV9zaGlmdDsKIAl1MzIgc3RhdHVzOwotCXVuc2lnbmVkIGludCBuYnl0ZXMgPSAwLCBsZW4sIG9sZF9sZW4sIGNvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gMCwgbGVuOwogCiAJZG8gewogCQlsZW4gPSBTRE1NQ19HRVRfRkNOVChtY2lfcmVhZGwoaG9zdCwgU1RBVFVTKSkgPDwgc2hpZnQ7Ci0JCWlmIChjb3VudCA9PSAwKQotCQkJb2xkX2xlbiA9IGxlbjsKLQogCQlpZiAob2Zmc2V0ICsgbGVuIDw9IHNnLT5sZW5ndGgpIHsKIAkJCWhvc3QtPnB1bGxfZGF0YShob3N0LCAodm9pZCAqKShidWYgKyBvZmZzZXQpLCBsZW4pOwogCkBAIC0xMDcwLDcgKzEwODIsNiBAQAogCQkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+dGFza2xldCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJY291bnQrKzsKIAl9IHdoaWxlIChzdGF0dXMgJiBTRE1NQ19JTlRfUlhEUik7IC8qaWYgdGhlIFJYRFIgaXMgcmVhZHkgcmVhZCBhZ2FpbiovCiAJbGVuID0gU0RNTUNfR0VUX0ZDTlQobWNpX3JlYWRsKGhvc3QsIFNUQVRVUykpOwogCWhvc3QtPnBpb19vZmZzZXQgPSBvZmZzZXQ7CkBAIC0xMzk1LDcgKzE0MDYsMTEgQEAKIAlpZiAoaG9zdC0+cGRhdGEtPnNldHBvd2VyKQogCQlob3N0LT5wZGF0YS0+c2V0cG93ZXIoaWQsIDApOwogCi0JbW1jLT5jYXBzID0gMDsKKwlpZiAoaG9zdC0+cGRhdGEtPmNhcHMpCisJCW1tYy0+Y2FwcyA9IGhvc3QtPnBkYXRhLT5jYXBzOworCWVsc2UKKwkJbW1jLT5jYXBzID0gMDsKKwogCWlmIChob3N0LT5wZGF0YS0+Z2V0X2J1c193ZCkKIAkJaWYgKGhvc3QtPnBkYXRhLT5nZXRfYnVzX3dkKHNsb3QtPmlkKSA+PSA0KQogCQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKQEAgLTE0MjYsNiArMTQ0MSwxMyBAQAogCX0KICNlbmRpZiAvKiBDT05GSUdfTU1DX0RXX0lETUFDICovCiAKKwlob3N0LT52bW1jID0gcmVndWxhdG9yX2dldChtbWNfZGV2KG1tYyksICJ2bW1jIik7CisJaWYgKElTX0VSUihob3N0LT52bW1jKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gdm1tYyByZWd1bGF0b3IgZm91bmRcbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKKwkJaG9zdC0+dm1tYyA9IE5VTEw7CisJfSBlbHNlCisJCXJlZ3VsYXRvcl9lbmFibGUoaG9zdC0+dm1tYyk7CisKIAlpZiAoZHdfbWNpX2dldF9jZChtbWMpKQogCQlzZXRfYml0KERXX01NQ19DQVJEX1BSRVNFTlQsICZzbG90LT5mbGFncyk7CiAJZWxzZQpAQCAtMTQ0MSw2ICsxNDYzLDEyIEBACiAJLyogQ2FyZCBpbml0aWFsbHkgdW5kZXRlY3RlZCAqLwogCXNsb3QtPmxhc3RfZGV0ZWN0X3N0YXRlID0gMDsKIAorCS8qCisJICogQ2FyZCBtYXkgaGF2ZSBiZWVuIHBsdWdnZWQgaW4gcHJpb3IgdG8gYm9vdCBzbyB3ZQorCSAqIG5lZWQgdG8gcnVuIHRoZSBkZXRlY3QgdGFza2xldAorCSAqLworCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPmNhcmRfdGFza2xldCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYxOSw4ICsxNjQ3LDkgQEAKIAkgKi8KIAlmaWZvX3NpemUgPSBtY2lfcmVhZGwoaG9zdCwgRklGT1RIKTsKIAlmaWZvX3NpemUgPSAoZmlmb19zaXplID4+IDE2KSAmIDB4N2ZmOwotCW1jaV93cml0ZWwoaG9zdCwgRklGT1RILCAoKDB4MiA8PCAyOCkgfCAoKGZpZm9fc2l6ZS8yIC0gMSkgPDwgMTYpIHwKLQkJCQkgICgoZmlmb19zaXplLzIpIDw8IDApKSk7CisJaG9zdC0+Zmlmb3RoX3ZhbCA9ICgoMHgyIDw8IDI4KSB8ICgoZmlmb19zaXplLzIgLSAxKSA8PCAxNikgfAorCQkJKChmaWZvX3NpemUvMikgPDwgMCkpOworCW1jaV93cml0ZWwoaG9zdCwgRklGT1RILCBob3N0LT5maWZvdGhfdmFsKTsKIAogCS8qIGRpc2FibGUgY2xvY2sgdG8gQ0lVICovCiAJbWNpX3dyaXRlbChob3N0LCBDTEtFTkEsIDApOwpAQCAtMTY4Myw2ICsxNzEyLDEyIEBACiAJCQkgIGhvc3QtPnNnX2NwdSwgaG9zdC0+c2dfZG1hKTsKIAlpb3VubWFwKGhvc3QtPnJlZ3MpOwogCisJaWYgKGhvc3QtPnZtbWMpIHsKKwkJcmVndWxhdG9yX2Rpc2FibGUoaG9zdC0+dm1tYyk7CisJCXJlZ3VsYXRvcl9wdXQoaG9zdC0+dm1tYyk7CisJfQorCisKIGVycl9mcmVlaG9zdDoKIAlrZnJlZShob3N0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTcxNCw2ICsxNzQ5LDExIEBACiAJaWYgKGhvc3QtPnVzZV9kbWEgJiYgaG9zdC0+ZG1hX29wcy0+ZXhpdCkKIAkJaG9zdC0+ZG1hX29wcy0+ZXhpdChob3N0KTsKIAorCWlmIChob3N0LT52bW1jKSB7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKGhvc3QtPnZtbWMpOworCQlyZWd1bGF0b3JfcHV0KGhvc3QtPnZtbWMpOworCX0KKwogCWlvdW5tYXAoaG9zdC0+cmVncyk7CiAKIAlrZnJlZShob3N0KTsKQEAgLTE3MjksNiArMTc2OSw5IEBACiAJaW50IGksIHJldDsKIAlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKKwlpZiAoaG9zdC0+dm1tYykKKwkJcmVndWxhdG9yX2VuYWJsZShob3N0LT52bW1jKTsKKwogCWZvciAoaSA9IDA7IGkgPCBob3N0LT5udW1fc2xvdHM7IGkrKykgewogCQlzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBob3N0LT5zbG90W2ldOwogCQlpZiAoIXNsb3QpCkBAIC0xNzQ0LDYgKzE3ODcsOSBAQAogCQl9CiAJfQogCisJaWYgKGhvc3QtPnZtbWMpCisJCXJlZ3VsYXRvcl9kaXNhYmxlKGhvc3QtPnZtbWMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NTIsNiArMTc5OCwyMyBAQAogCWludCBpLCByZXQ7CiAJc3RydWN0IGR3X21jaSAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJaWYgKGhvc3QtPmRtYV9vcHMtPmluaXQpCisJCWhvc3QtPmRtYV9vcHMtPmluaXQoaG9zdCk7CisKKwlpZiAoIW1jaV93YWl0X3Jlc2V0KCZwZGV2LT5kZXYsIGhvc3QpKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVzdG9yZSB0aGUgb2xkIHZhbHVlIGF0IEZJRk9USCByZWdpc3RlciAqLworCW1jaV93cml0ZWwoaG9zdCwgRklGT1RILCBob3N0LT5maWZvdGhfdmFsKTsKKworCW1jaV93cml0ZWwoaG9zdCwgUklOVFNUUywgMHhGRkZGRkZGRik7CisJbWNpX3dyaXRlbChob3N0LCBJTlRNQVNLLCBTRE1NQ19JTlRfQ01EX0RPTkUgfCBTRE1NQ19JTlRfREFUQV9PVkVSIHwKKwkJICAgU0RNTUNfSU5UX1RYRFIgfCBTRE1NQ19JTlRfUlhEUiB8CisJCSAgIERXX01DSV9FUlJPUl9GTEFHUyB8IFNETU1DX0lOVF9DRCk7CisJbWNpX3dyaXRlbChob3N0LCBDVFJMLCBTRE1NQ19DVFJMX0lOVF9FTkFCTEUpOworCiAJZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7CiAJCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07CiAJCWlmICghc2xvdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmggYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oCmluZGV4IDVkZDU1YTcuLjIzYzY2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaApAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBTRE1NQ19VU1JJRAkJMHgwNjgKICNkZWZpbmUgU0RNTUNfVkVSSUQJCTB4MDZjCiAjZGVmaW5lIFNETU1DX0hDT04JCTB4MDcwCisjZGVmaW5lIFNETU1DX1VIU19SRUcJCTB4MDc0CiAjZGVmaW5lIFNETU1DX0JNT0QJCTB4MDgwCiAjZGVmaW5lIFNETU1DX1BMRE1ORAkJMHgwODQKICNkZWZpbmUgU0RNTUNfREJBRERSCQkweDA4OApAQCAtNTEsNyArNTIsNiBAQAogI2RlZmluZSBTRE1NQ19EU0NBRERSCQkweDA5NAogI2RlZmluZSBTRE1NQ19CVUZBRERSCQkweDA5OAogI2RlZmluZSBTRE1NQ19EQVRBCQkweDEwMAotI2RlZmluZSBTRE1NQ19EQVRBX0FEUgkJMHgxMDAKIAogLyogc2hpZnQgYml0IGZpZWxkICovCiAjZGVmaW5lIF9TQkYoZiwgdikJCSgodikgPDwgKGYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCmluZGV4IDE1M2FiOTcuLmE0Yzg2NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC0yNjYsMTQgKzI2Nyw2IEBACiAJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnNnLCBob3N0LT5kbWEubnVtX2VudHMsCiAJCSAgICAgaG9zdC0+ZG1hLmRpcik7CiAKLQlpZiAoaG9zdC0+Y3Vyci51c2VyX3BhZ2VzKSB7Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBob3N0LT5kbWEuc2c7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBob3N0LT5kbWEubnVtX2VudHM7IGkrKykKLQkJCWZsdXNoX2RjYWNoZV9wYWdlKHNnX3BhZ2Uoc2crKykpOwotCX0KLQogCWhvc3QtPmRtYS5zZyA9IE5VTEw7CiAJaG9zdC0+ZG1hLmJ1c3kgPSAwOwogCkBAIC05NDEsNiArOTM0LDM4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBtc21zZGNjX3NldHVwX2dwaW8oc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG1zbV9tbWNfZ3Bpb19kYXRhICpjdXJyOworCWludCBpLCByYyA9IDA7CisKKwlpZiAoIWhvc3QtPnBsYXQtPmdwaW9fZGF0YSAmJiBob3N0LT5ncGlvX2NvbmZpZ19zdGF0dXMgPT0gZW5hYmxlKQorCQlyZXR1cm47CisKKwljdXJyID0gaG9zdC0+cGxhdC0+Z3Bpb19kYXRhOworCWZvciAoaSA9IDA7IGkgPCBjdXJyLT5zaXplOyBpKyspIHsKKwkJaWYgKGVuYWJsZSkgeworCQkJcmMgPSBncGlvX3JlcXVlc3QoY3Vyci0+Z3Bpb1tpXS5ubywKKwkJCQkJCWN1cnItPmdwaW9baV0ubmFtZSk7CisJCQlpZiAocmMpIHsKKwkJCQlwcl9lcnIoIiVzOiBncGlvX3JlcXVlc3QoJWQsICVzKSBmYWlsZWQgJWRcbiIsCisJCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLAorCQkJCQljdXJyLT5ncGlvW2ldLm5vLAorCQkJCQljdXJyLT5ncGlvW2ldLm5hbWUsIHJjKTsKKwkJCQlnb3RvIGZyZWVfZ3Bpb3M7CisJCQl9CisJCX0gZWxzZSB7CisJCQlncGlvX2ZyZWUoY3Vyci0+Z3Bpb1tpXS5ubyk7CisJCX0KKwl9CisJaG9zdC0+Z3Bpb19jb25maWdfc3RhdHVzID0gZW5hYmxlOworCXJldHVybjsKKworZnJlZV9ncGlvczoKKwlmb3IgKDsgaSA+PSAwOyBpLS0pCisJCWdwaW9fZnJlZShjdXJyLT5ncGlvW2ldLm5vKTsKK30KKwogc3RhdGljIHZvaWQKIG1zbXNkY2Nfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKIHsKQEAgLTk1Myw2ICs5NzgsOCBAQAogCiAJbXNtc2RjY19lbmFibGVfY2xvY2tzKGhvc3QpOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCiAJaWYgKGlvcy0+Y2xvY2spIHsKIAkJaWYgKGlvcy0+Y2xvY2sgIT0gaG9zdC0+Y2xrX3JhdGUpIHsKIAkJCXJjID0gY2xrX3NldF9yYXRlKGhvc3QtPmNsaywgaW9zLT5jbG9jayk7CkBAIC05NzksOSArMTAwNiwxMSBAQAogCiAJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKIAljYXNlIE1NQ19QT1dFUl9PRkY6CisJCW1zbXNkY2Nfc2V0dXBfZ3Bpbyhob3N0LCBmYWxzZSk7CiAJCWJyZWFrOwogCWNhc2UgTU1DX1BPV0VSX1VQOgogCQlwd3IgfD0gTUNJX1BXUl9VUDsKKwkJbXNtc2RjY19zZXR1cF9ncGlvKGhvc3QsIHRydWUpOwogCQlicmVhazsKIAljYXNlIE1NQ19QT1dFUl9PTjoKIAkJcHdyIHw9IE1DSV9QV1JfT047CkBAIC05OTgsOSArMTAyNywxMCBAQAogCQltc21zZGNjX3dyaXRlbChob3N0LCBwd3IsIE1NQ0lQT1dFUik7CiAJfQogI2lmIEJVU0NMS19QV1JTQVZFCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAltc21zZGNjX2Rpc2FibGVfY2xvY2tzKGhvc3QsIDEpOwotI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIG1zbXNkY2NfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5oIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5oCmluZGV4IDkzOTU1N2EuLjQyZDdiYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmgKQEAgLTI0Myw2ICsyNDMsNyBAQAogCXVuc2lnbmVkIGludAkJY21kX2RhdGFjdHJsOwogCXN0cnVjdCBtbWNfY29tbWFuZAkqY21kX2NtZDsKIAl1MzIJCQljbWRfYzsKKwlib29sCQkJZ3Bpb19jb25maWdfc3RhdHVzOwogCiAJYm9vbCBwcm9nX3NjYW47CiAJYm9vbCBwcm9nX2VuYWJsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCmluZGV4IDQ0Mjg1OTQuLmNjMjBlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwpAQCAtMzIsMTYgKzMyLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDIKLSNpbmNsdWRlIDxtYWNoL2RtYS1teDEtbXgyLmg+Ci0jZGVmaW5lIEhBU19ETUEKLSNlbmRpZgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm14Yy1tbWMiCiAKQEAgLTExOCw3ICsxMTYsOCBAQAogCXZvaWQgX19pb21lbQkJKmJhc2U7CiAJaW50CQkJaXJxOwogCWludAkJCWRldGVjdF9pcnE7Ci0JaW50CQkJZG1hOworCXN0cnVjdCBkbWFfY2hhbgkJKmRtYTsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CiAJaW50CQkJZG9fZG1hOwogCWludAkJCWRlZmF1bHRfaXJxX21hc2s7CiAJaW50CQkJdXNlX3NkaW87CkBAIC0xMjksNyArMTI4LDYgQEAKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQJKmNtZDsKIAlzdHJ1Y3QgbW1jX2RhdGEJCSpkYXRhOwogCi0JdW5zaWduZWQgaW50CQlkbWFfbmVudHM7CiAJdW5zaWduZWQgaW50CQlkYXRhc2l6ZTsKIAl1bnNpZ25lZCBpbnQJCWRtYV9kaXI7CiAKQEAgLTE0NCw2ICsxNDIsMTEgQEAKIAlzcGlubG9ja190CQlsb2NrOwogCiAJc3RydWN0IHJlZ3VsYXRvcgkqdmNjOworCisJaW50CQkJYnVyc3RsZW47CisJaW50CQkJZG1hcmVxOworCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnIGRtYV9zbGF2ZV9jb25maWc7CisJc3RydWN0IGlteF9kbWFfZGF0YQlkbWFfZGF0YTsKIH07CiAKIHN0YXRpYyB2b2lkIG14Y21jaV9zZXRfY2xrX3JhdGUoc3RydWN0IG14Y21jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgY2xrX2lvcyk7CkBAIC0yMDYsMTcgKzIwOSwxNiBAQAogCiAJd3JpdGV3KDB4ZmYsIGhvc3QtPmJhc2UgKyBNTUNfUkVHX1JFU19UTyk7CiB9CitzdGF0aWMgaW50IG14Y21jaV9zZXR1cF9kbWEoc3RydWN0IG1tY19ob3N0ICptbWMpOwogCiBzdGF0aWMgaW50IG14Y21jaV9zZXR1cF9kYXRhKHN0cnVjdCBteGNtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCXVuc2lnbmVkIGludCBub2IgPSBkYXRhLT5ibG9ja3M7CiAJdW5zaWduZWQgaW50IGJsa3N6ID0gZGF0YS0+Ymxrc3o7CiAJdW5zaWduZWQgaW50IGRhdGFzaXplID0gbm9iICogYmxrc3o7Ci0jaWZkZWYgSEFTX0RNQQogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JaW50IGk7Ci0JaW50IHJldDsKLSNlbmRpZgorCWludCBpLCBuZW50czsKKwogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1NUUkVBTSkKIAkJbm9iID0gMHhmZmZmOwogCkBAIC0yMjcsNyArMjI5LDkgQEAKIAl3cml0ZXcoYmxrc3osIGhvc3QtPmJhc2UgKyBNTUNfUkVHX0JMS19MRU4pOwogCWhvc3QtPmRhdGFzaXplID0gZGF0YXNpemU7CiAKLSNpZmRlZiBIQVNfRE1BCisJaWYgKCFteGNtY2lfdXNlX2RtYShob3N0KSkKKwkJcmV0dXJuIDA7CisKIAlmb3JfZWFjaF9zZyhkYXRhLT5zZywgc2csIGRhdGEtPnNnX2xlbiwgaSkgewogCQlpZiAoc2ctPm9mZnNldCAmIDMgfHwgc2ctPmxlbmd0aCAmIDMpIHsKIAkJCWhvc3QtPmRvX2RtYSA9IDA7CkBAIC0yMzUsMzQgKzIzOSwzMCBAQAogCQl9CiAJfQogCi0JaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgeworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCiAJCWhvc3QtPmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7Ci0JCWhvc3QtPmRtYV9uZW50cyA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywKLQkJCQkJICAgICBkYXRhLT5zZ19sZW4sICBob3N0LT5kbWFfZGlyKTsKLQotCQlyZXQgPSBpbXhfZG1hX3NldHVwX3NnKGhvc3QtPmRtYSwgZGF0YS0+c2csIGhvc3QtPmRtYV9uZW50cywKLQkJCQlkYXRhc2l6ZSwKLQkJCQlob3N0LT5yZXMtPnN0YXJ0ICsgTU1DX1JFR19CVUZGRVJfQUNDRVNTLAotCQkJCURNQV9NT0RFX1JFQUQpOwotCX0gZWxzZSB7CisJZWxzZQogCQlob3N0LT5kbWFfZGlyID0gRE1BX1RPX0RFVklDRTsKLQkJaG9zdC0+ZG1hX25lbnRzID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLAotCQkJCQkgICAgIGRhdGEtPnNnX2xlbiwgIGhvc3QtPmRtYV9kaXIpOwogCi0JCXJldCA9IGlteF9kbWFfc2V0dXBfc2coaG9zdC0+ZG1hLCBkYXRhLT5zZywgaG9zdC0+ZG1hX25lbnRzLAotCQkJCWRhdGFzaXplLAotCQkJCWhvc3QtPnJlcy0+c3RhcnQgKyBNTUNfUkVHX0JVRkZFUl9BQ0NFU1MsCi0JCQkJRE1BX01PREVfV1JJVEUpOwotCX0KKwluZW50cyA9IGRtYV9tYXBfc2coaG9zdC0+ZG1hLT5kZXZpY2UtPmRldiwgZGF0YS0+c2csCisJCQkJICAgICBkYXRhLT5zZ19sZW4sICBob3N0LT5kbWFfZGlyKTsKKwlpZiAobmVudHMgIT0gZGF0YS0+c2dfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChyZXQpIHsKLQkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJmYWlsZWQgdG8gc2V0dXAgRE1BIDogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJaG9zdC0+ZGVzYyA9IGhvc3QtPmRtYS0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhob3N0LT5kbWEsCisJCWRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sIGhvc3QtPmRtYV9kaXIsCisJCURNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7CisKKwlpZiAoIWhvc3QtPmRlc2MpIHsKKwkJZG1hX3VubWFwX3NnKGhvc3QtPmRtYS0+ZGV2aWNlLT5kZXYsIGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sCisJCQkJaG9zdC0+ZG1hX2Rpcik7CisJCWhvc3QtPmRvX2RtYSA9IDA7CisJCXJldHVybiAwOyAvKiBGYWxsIGJhY2sgdG8gUElPICovCiAJfQogCXdtYigpOwogCi0JaW14X2RtYV9lbmFibGUoaG9zdC0+ZG1hKTsKLSNlbmRpZiAvKiBIQVNfRE1BICovCisJZG1hZW5naW5lX3N1Ym1pdChob3N0LT5kZXNjKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzcsMTMgKzMzNywxMSBAQAogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CiAJaW50IGRhdGFfZXJyb3I7CiAKLSNpZmRlZiBIQVNfRE1BCiAJaWYgKG14Y21jaV91c2VfZG1hKGhvc3QpKSB7Ci0JCWlteF9kbWFfZGlzYWJsZShob3N0LT5kbWEpOwotCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgaG9zdC0+ZG1hX25lbnRzLAorCQlkbWFlbmdpbmVfdGVybWluYXRlX2FsbChob3N0LT5kbWEpOworCQlkbWFfdW5tYXBfc2coaG9zdC0+ZG1hLT5kZXZpY2UtPmRldiwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwKIAkJCQlob3N0LT5kbWFfZGlyKTsKIAl9Ci0jZW5kaWYKIAogCWlmIChzdGF0ICYgU1RBVFVTX0VSUl9NQVNLKSB7CiAJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAicmVxdWVzdCBmYWlsZWQuIHN0YXR1czogMHglMDh4XG4iLApAQCAtNTQ1LDcgKzU0Myw2IEBACiAJfQogfQogCi0jaWZkZWYgSEFTX0RNQQogc3RhdGljIHZvaWQgbXhjbWNpX2RhdGFfZG9uZShzdHJ1Y3QgbXhjbWNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBzdGF0KQogewogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CkBAIC01NjgsNyArNTY1LDYgQEAKIAkJbXhjbWNpX2ZpbmlzaF9yZXF1ZXN0KGhvc3QsIGhvc3QtPnJlcSk7CiAJfQogfQotI2VuZGlmIC8qIEhBU19ETUEgKi8KIAogc3RhdGljIHZvaWQgbXhjbWNpX2NtZF9kb25lKHN0cnVjdCBteGNtY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHN0YXQpCiB7CkBAIC02MDYsMTIgKzYwMiwxMCBAQAogCXNkaW9faXJxID0gKHN0YXQgJiBTVEFUVVNfU0RJT19JTlRfQUNUSVZFKSAmJiBob3N0LT51c2Vfc2RpbzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAKLSNpZmRlZiBIQVNfRE1BCiAJaWYgKG14Y21jaV91c2VfZG1hKGhvc3QpICYmCiAJICAgIChzdGF0ICYgKFNUQVRVU19SRUFEX09QX0RPTkUgfCBTVEFUVVNfV1JJVEVfT1BfRE9ORSkpKQogCQl3cml0ZWwoU1RBVFVTX1JFQURfT1BfRE9ORSB8IFNUQVRVU19XUklURV9PUF9ET05FLAogCQkJaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RBVFVTKTsKLSNlbmRpZgogCiAJaWYgKHNkaW9faXJxKSB7CiAJCXdyaXRlbChTVEFUVVNfU0RJT19JTlRfQUNUSVZFLCBob3N0LT5iYXNlICsgTU1DX1JFR19TVEFUVVMpOwpAQCAtNjIxLDE0ICs2MTUsMTQgQEAKIAlpZiAoc3RhdCAmIFNUQVRVU19FTkRfQ01EX1JFU1ApCiAJCW14Y21jaV9jbWRfZG9uZShob3N0LCBzdGF0KTsKIAotI2lmZGVmIEhBU19ETUEKIAlpZiAobXhjbWNpX3VzZV9kbWEoaG9zdCkgJiYKIAkJICAoc3RhdCAmIChTVEFUVVNfREFUQV9UUkFOU19ET05FIHwgU1RBVFVTX1dSSVRFX09QX0RPTkUpKSkKIAkJbXhjbWNpX2RhdGFfZG9uZShob3N0LCBzdGF0KTsKLSNlbmRpZgorCiAJaWYgKGhvc3QtPmRlZmF1bHRfaXJxX21hc2sgJiYKIAkJICAoc3RhdCAmIChTVEFUVVNfQ0FSRF9JTlNFUlRJT04gfCBTVEFUVVNfQ0FSRF9SRU1PVkFMKSkpCiAJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgbXNlY3NfdG9famlmZmllcygyMDApKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNjQyLDkgKzYzNiwxMCBAQAogCiAJaG9zdC0+cmVxID0gcmVxOwogCWhvc3QtPmNtZGF0ICY9IH5DTURfREFUX0NPTlRfSU5JVDsKLSNpZmRlZiBIQVNfRE1BCi0JaG9zdC0+ZG9fZG1hID0gMTsKLSNlbmRpZgorCisJaWYgKGhvc3QtPmRtYSkKKwkJaG9zdC0+ZG9fZG1hID0gMTsKKwogCWlmIChyZXEtPmRhdGEpIHsKIAkJZXJyb3IgPSBteGNtY2lfc2V0dXBfZGF0YShob3N0LCByZXEtPmRhdGEpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTY2MCw2ICs2NTUsNyBAQAogCX0KIAogCWVycm9yID0gbXhjbWNpX3N0YXJ0X2NtZChob3N0LCByZXEtPmNtZCwgY21kYXQpOworCiBvdXQ6CiAJaWYgKGVycm9yKQogCQlteGNtY2lfZmluaXNoX3JlcXVlc3QoaG9zdCwgcmVxKTsKQEAgLTY5OCwyMiArNjk0LDQ2IEBACiAJCQlwcmVzY2FsZXIsIGRpdmlkZXIsIGNsa19pbiwgY2xrX2lvcyk7CiB9CiAKK3N0YXRpYyBpbnQgbXhjbWNpX3NldHVwX2RtYShzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3QgbXhjbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjb25maWcgPSAmaG9zdC0+ZG1hX3NsYXZlX2NvbmZpZzsKKworCWNvbmZpZy0+ZHN0X2FkZHIgPSBob3N0LT5yZXMtPnN0YXJ0ICsgTU1DX1JFR19CVUZGRVJfQUNDRVNTOworCWNvbmZpZy0+c3JjX2FkZHIgPSBob3N0LT5yZXMtPnN0YXJ0ICsgTU1DX1JFR19CVUZGRVJfQUNDRVNTOworCWNvbmZpZy0+ZHN0X2FkZHJfd2lkdGggPSA0OworCWNvbmZpZy0+c3JjX2FkZHJfd2lkdGggPSA0OworCWNvbmZpZy0+ZHN0X21heGJ1cnN0ID0gaG9zdC0+YnVyc3RsZW47CisJY29uZmlnLT5zcmNfbWF4YnVyc3QgPSBob3N0LT5idXJzdGxlbjsKKworCXJldHVybiBkbWFlbmdpbmVfc2xhdmVfY29uZmlnKGhvc3QtPmRtYSwgY29uZmlnKTsKK30KKwogc3RhdGljIHZvaWQgbXhjbWNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCiB7CiAJc3RydWN0IG14Y21jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKLSNpZmRlZiBIQVNfRE1BCi0JdW5zaWduZWQgaW50IGJsZW47CisJaW50IGJ1cnN0bGVuLCByZXQ7CisKIAkvKgogCSAqIHVzZSBidXJzdGxlbiBvZiA2NCBpbiA0IGJpdCBtb2RlICgtLT4gcmVnIHZhbHVlICAwKQogCSAqIHVzZSBidXJzdGxlbiBvZiAxNiBpbiAxIGJpdCBtb2RlICgtLT4gcmVnIHZhbHVlIDE2KQogCSAqLwogCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCi0JCWJsZW4gPSAwOworCQlidXJzdGxlbiA9IDY0OwogCWVsc2UKLQkJYmxlbiA9IDE2OworCQlidXJzdGxlbiA9IDE2OwogCi0JaW14X2RtYV9jb25maWdfYnVyc3RsZW4oaG9zdC0+ZG1hLCBibGVuKTsKLSNlbmRpZgorCWlmIChteGNtY2lfdXNlX2RtYShob3N0KSAmJiBidXJzdGxlbiAhPSBob3N0LT5idXJzdGxlbikgeworCQlob3N0LT5idXJzdGxlbiA9IGJ1cnN0bGVuOworCQlyZXQgPSBteGNtY2lfc2V0dXBfZG1hKG1tYyk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAorCQkJCSJmYWlsZWQgdG8gY29uZmlnIERNQSBjaGFubmVsLiBGYWxsaW5nIGJhY2sgdG8gUElPXG4iKTsKKwkJCWRtYV9yZWxlYXNlX2NoYW5uZWwoaG9zdC0+ZG1hKTsKKwkJCWhvc3QtPmRvX2RtYSA9IDA7CisJCX0KKwl9CisKIAlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KQogCQlob3N0LT5jbWRhdCB8PSBDTURfREFUX0NPTlRfQlVTX1dJRFRIXzQ7CiAJZWxzZQpAQCAtNzk0LDYgKzgxNCwxOCBAQAogCQlob3N0LT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKIH0KIAorc3RhdGljIGJvb2wgZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqcGFyYW0pCit7CisJc3RydWN0IG14Y21jaV9ob3N0ICpob3N0ID0gcGFyYW07CisKKwlpZiAoIWlteF9kbWFfaXNfZ2VuZXJhbF9wdXJwb3NlKGNoYW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwljaGFuLT5wcml2YXRlID0gJmhvc3QtPmRtYV9kYXRhOworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG14Y21jaV9vcHMgPSB7CiAJLnJlcXVlc3QJCT0gbXhjbWNpX3JlcXVlc3QsCiAJLnNldF9pb3MJCT0gbXhjbWNpX3NldF9pb3MsCkBAIC04MDgsNiArODQwLDcgQEAKIAlzdHJ1Y3QgbXhjbWNpX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqaW9yZXMsICpyOwogCWludCByZXQgPSAwLCBpcnE7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKIAogCXByaW50ayhLRVJOX0lORk8gImkuTVggU0RIQyBkcml2ZXJcbiIpOwogCkBAIC04ODMsMjkgKzkxNiwyMyBAQAogCiAJd3JpdGVsKGhvc3QtPmRlZmF1bHRfaXJxX21hc2ssIGhvc3QtPmJhc2UgKyBNTUNfUkVHX0lOVF9DTlRSKTsKIAotI2lmZGVmIEhBU19ETUEKLQlob3N0LT5kbWEgPSBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbyhEUklWRVJfTkFNRSwgRE1BX1BSSU9fTE9XKTsKLQlpZiAoaG9zdC0+ZG1hIDwgMCkgewotCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteF9kbWFfcmVxdWVzdF9ieV9wcmlvIGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXRfY2xrX3B1dDsKLQl9Ci0KIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKLQlpZiAoIXIpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXRfZnJlZV9kbWE7CisJaWYgKHIpIHsKKwkJaG9zdC0+ZG1hcmVxID0gci0+c3RhcnQ7CisJCWhvc3QtPmRtYV9kYXRhLnBlcmlwaGVyYWxfdHlwZSA9IElNWF9ETUFUWVBFX1NESEM7CisJCWhvc3QtPmRtYV9kYXRhLnByaW9yaXR5ID0gRE1BX1BSSU9fTE9XOworCQlob3N0LT5kbWFfZGF0YS5kbWFfcmVxdWVzdCA9IGhvc3QtPmRtYXJlcTsKKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCQlob3N0LT5kbWEgPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgaG9zdCk7CisJCWlmIChob3N0LT5kbWEpCisJCQltbWMtPm1heF9zZWdfc2l6ZSA9IGRtYV9nZXRfbWF4X3NlZ19zaXplKAorCQkJCQlob3N0LT5kbWEtPmRldmljZS0+ZGV2KTsKIAl9CiAKLQlyZXQgPSBpbXhfZG1hX2NvbmZpZ19jaGFubmVsKGhvc3QtPmRtYSwKLQkJCQkgICAgIElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCQkJCSAgICAgSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLQkJCQkgICAgIHItPnN0YXJ0LCAwKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiZmFpbGVkIHRvIGNvbmZpZyBETUEgY2hhbm5lbFxuIik7Ci0JCWdvdG8gb3V0X2ZyZWVfZG1hOwotCX0KLSNlbmRpZgorCWlmICghaG9zdC0+ZG1hKQorCQlkZXZfaW5mbyhtbWNfZGV2KGhvc3QtPm1tYyksICJkbWEgbm90IGF2YWlsYWJsZS4gVXNpbmcgUElPXG4iKTsKKwogCUlOSVRfV09SSygmaG9zdC0+ZGF0YXdvcmssIG14Y21jaV9kYXRhd29yayk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIG14Y21jaV9pcnEsIDAsIERSSVZFUl9OQU1FLCBob3N0KTsKQEAgLTkyOCw5ICs5NTUsOCBAQAogb3V0X2ZyZWVfaXJxOgogCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiBvdXRfZnJlZV9kbWE6Ci0jaWZkZWYgSEFTX0RNQQotCWlteF9kbWFfZnJlZShob3N0LT5kbWEpOwotI2VuZGlmCisJaWYgKGhvc3QtPmRtYSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChob3N0LT5kbWEpOwogb3V0X2Nsa19wdXQ6CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIAljbGtfcHV0KGhvc3QtPmNsayk7CkBAIC05NjAsOSArOTg2LDEwIEBACiAKIAlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCWlvdW5tYXAoaG9zdC0+YmFzZSk7Ci0jaWZkZWYgSEFTX0RNQQotCWlteF9kbWFfZnJlZShob3N0LT5kbWEpOwotI2VuZGlmCisKKwlpZiAoaG9zdC0+ZG1hKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPmRtYSk7CisKIAljbGtfZGlzYWJsZShob3N0LT5jbGspOwogCWNsa19wdXQoaG9zdC0+Y2xrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L214cy1tbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQzOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMKQEAgLTAsMCArMSw4NzQgQEAKKy8qCisgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKEMpIDIwMDMgUnVzc2VsbCBLaW5nLCBQWEEgTU1DSSBEcml2ZXIKKyAqIFBvcnRpb25zIGNvcHlyaWdodCAoQykgMjAwNC0yMDA1IFBpZXJyZSBPc3NtYW4sIFc4M0w1MXhEIFNEL01NQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBFbWJlZGRlZCBBbGxleSBTb2x1dGlvbnMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKyNpbmNsdWRlIDxtYWNoL214cy5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FCSJteHMtbW1jIgorCisvKiBjYXJkIGRldGVjdCBwb2xsaW5nIHRpbWVvdXQgKi8KKyNkZWZpbmUgTVhTX01NQ19ERVRFQ1RfVElNRU9VVAkJCShIWi8yKQorCisjZGVmaW5lIFNTUF9WRVJTSU9OX0xBVEVTVAk0CisjZGVmaW5lIHNzcF9pc19vbGQoKQkJKGhvc3QtPnZlcnNpb24gPCBTU1BfVkVSU0lPTl9MQVRFU1QpCisKKy8qIFNTUCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSFdfU1NQX0NUUkwwCQkJCTB4MDAwCisjZGVmaW5lICBCTV9TU1BfQ1RSTDBfUlVOCQkJKDEgPDwgMjkpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDBfU0RJT19JUlFfQ0hFQ0sJCSgxIDw8IDI4KQorI2RlZmluZSAgQk1fU1NQX0NUUkwwX0lHTk9SRV9DUkMJCSgxIDw8IDI2KQorI2RlZmluZSAgQk1fU1NQX0NUUkwwX1JFQUQJCQkoMSA8PCAyNSkKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMF9EQVRBX1hGRVIJCQkoMSA8PCAyNCkKKyNkZWZpbmUgIEJQX1NTUF9DVFJMMF9CVVNfV0lEVEgJCQkoMjIpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDBfQlVTX1dJRFRICQkJKDB4MyA8PCAyMikKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMF9XQUlUX0ZPUl9JUlEJCSgxIDw8IDIxKQorI2RlZmluZSAgQk1fU1NQX0NUUkwwX0xPTkdfUkVTUAkJCSgxIDw8IDE5KQorI2RlZmluZSAgQk1fU1NQX0NUUkwwX0dFVF9SRVNQCQkJKDEgPDwgMTcpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDBfRU5BQkxFCQkJKDEgPDwgMTYpCisjZGVmaW5lICBCUF9TU1BfQ1RSTDBfWEZFUl9DT1VOVAkJKDApCisjZGVmaW5lICBCTV9TU1BfQ1RSTDBfWEZFUl9DT1VOVAkJKDB4ZmZmZikKKyNkZWZpbmUgSFdfU1NQX0NNRDAJCQkJMHgwMTAKKyNkZWZpbmUgIEJNX1NTUF9DTUQwX0RCTF9EQVRBX1JBVEVfRU4JCSgxIDw8IDI1KQorI2RlZmluZSAgQk1fU1NQX0NNRDBfU0xPV19DTEtJTkdfRU4JCSgxIDw8IDIyKQorI2RlZmluZSAgQk1fU1NQX0NNRDBfQ09OVF9DTEtJTkdfRU4JCSgxIDw8IDIxKQorI2RlZmluZSAgQk1fU1NQX0NNRDBfQVBQRU5EXzhDWUMJCSgxIDw8IDIwKQorI2RlZmluZSAgQlBfU1NQX0NNRDBfQkxPQ0tfU0laRQkJCSgxNikKKyNkZWZpbmUgIEJNX1NTUF9DTUQwX0JMT0NLX1NJWkUJCQkoMHhmIDw8IDE2KQorI2RlZmluZSAgQlBfU1NQX0NNRDBfQkxPQ0tfQ09VTlQJCSg4KQorI2RlZmluZSAgQk1fU1NQX0NNRDBfQkxPQ0tfQ09VTlQJCSgweGZmIDw8IDgpCisjZGVmaW5lICBCUF9TU1BfQ01EMF9DTUQJCQkoMCkKKyNkZWZpbmUgIEJNX1NTUF9DTUQwX0NNRAkJCSgweGZmKQorI2RlZmluZSBIV19TU1BfQ01EMQkJCQkweDAyMAorI2RlZmluZSBIV19TU1BfWEZFUl9TSVpFCQkJMHgwMzAKKyNkZWZpbmUgSFdfU1NQX0JMT0NLX1NJWkUJCQkweDA0MAorI2RlZmluZSAgQlBfU1NQX0JMT0NLX1NJWkVfQkxPQ0tfQ09VTlQJCSg0KQorI2RlZmluZSAgQk1fU1NQX0JMT0NLX1NJWkVfQkxPQ0tfQ09VTlQJCSgweGZmZmZmZiA8PCA0KQorI2RlZmluZSAgQlBfU1NQX0JMT0NLX1NJWkVfQkxPQ0tfU0laRQkJKDApCisjZGVmaW5lICBCTV9TU1BfQkxPQ0tfU0laRV9CTE9DS19TSVpFCQkoMHhmKQorI2RlZmluZSBIV19TU1BfVElNSU5HCQkJCShzc3BfaXNfb2xkKCkgPyAweDA1MCA6IDB4MDcwKQorI2RlZmluZSAgQlBfU1NQX1RJTUlOR19USU1FT1VUCQkJKDE2KQorI2RlZmluZSAgQk1fU1NQX1RJTUlOR19USU1FT1VUCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUgIEJQX1NTUF9USU1JTkdfQ0xPQ0tfRElWSURFCQkoOCkKKyNkZWZpbmUgIEJNX1NTUF9USU1JTkdfQ0xPQ0tfRElWSURFCQkoMHhmZiA8PCA4KQorI2RlZmluZSAgQlBfU1NQX1RJTUlOR19DTE9DS19SQVRFCQkoMCkKKyNkZWZpbmUgIEJNX1NTUF9USU1JTkdfQ0xPQ0tfUkFURQkJKDB4ZmYpCisjZGVmaW5lIEhXX1NTUF9DVFJMMQkJCQkoc3NwX2lzX29sZCgpID8gMHgwNjAgOiAweDA4MCkKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMV9TRElPX0lSUQkJCSgxIDw8IDMxKQorI2RlZmluZSAgQk1fU1NQX0NUUkwxX1NESU9fSVJRX0VOCQkoMSA8PCAzMCkKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMV9SRVNQX0VSUl9JUlEJCSgxIDw8IDI5KQorI2RlZmluZSAgQk1fU1NQX0NUUkwxX1JFU1BfRVJSX0lSUV9FTgkJKDEgPDwgMjgpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDFfUkVTUF9USU1FT1VUX0lSUQkJKDEgPDwgMjcpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDFfUkVTUF9USU1FT1VUX0lSUV9FTgkoMSA8PCAyNikKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMV9EQVRBX1RJTUVPVVRfSVJRCQkoMSA8PCAyNSkKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMV9EQVRBX1RJTUVPVVRfSVJRX0VOCSgxIDw8IDI0KQorI2RlZmluZSAgQk1fU1NQX0NUUkwxX0RBVEFfQ1JDX0lSUQkJKDEgPDwgMjMpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDFfREFUQV9DUkNfSVJRX0VOCQkoMSA8PCAyMikKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMV9GSUZPX1VOREVSUlVOX0lSUQkJKDEgPDwgMjEpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDFfRklGT19VTkRFUlJVTl9JUlFfRU4JKDEgPDwgMjApCisjZGVmaW5lICBCTV9TU1BfQ1RSTDFfUkVDVl9USU1FT1VUX0lSUQkJKDEgPDwgMTcpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDFfUkVDVl9USU1FT1VUX0lSUV9FTgkoMSA8PCAxNikKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMV9GSUZPX09WRVJSVU5fSVJRCQkoMSA8PCAxNSkKKyNkZWZpbmUgIEJNX1NTUF9DVFJMMV9GSUZPX09WRVJSVU5fSVJRX0VOCSgxIDw8IDE0KQorI2RlZmluZSAgQk1fU1NQX0NUUkwxX0RNQV9FTkFCTEUJCSgxIDw8IDEzKQorI2RlZmluZSAgQk1fU1NQX0NUUkwxX1BPTEFSSVRZCQkJKDEgPDwgOSkKKyNkZWZpbmUgIEJQX1NTUF9DVFJMMV9XT1JEX0xFTkdUSAkJKDQpCisjZGVmaW5lICBCTV9TU1BfQ1RSTDFfV09SRF9MRU5HVEgJCSgweGYgPDwgNCkKKyNkZWZpbmUgIEJQX1NTUF9DVFJMMV9TU1BfTU9ERQkJCSgwKQorI2RlZmluZSAgQk1fU1NQX0NUUkwxX1NTUF9NT0RFCQkJKDB4ZikKKyNkZWZpbmUgSFdfU1NQX1NEUkVTUDAJCQkJKHNzcF9pc19vbGQoKSA/IDB4MDgwIDogMHgwYTApCisjZGVmaW5lIEhXX1NTUF9TRFJFU1AxCQkJCShzc3BfaXNfb2xkKCkgPyAweDA5MCA6IDB4MGIwKQorI2RlZmluZSBIV19TU1BfU0RSRVNQMgkJCQkoc3NwX2lzX29sZCgpID8gMHgwYTAgOiAweDBjMCkKKyNkZWZpbmUgSFdfU1NQX1NEUkVTUDMJCQkJKHNzcF9pc19vbGQoKSA/IDB4MGIwIDogMHgwZDApCisjZGVmaW5lIEhXX1NTUF9TVEFUVVMJCQkJKHNzcF9pc19vbGQoKSA/IDB4MGMwIDogMHgxMDApCisjZGVmaW5lICBCTV9TU1BfU1RBVFVTX0NBUkRfREVURUNUCQkoMSA8PCAyOCkKKyNkZWZpbmUgIEJNX1NTUF9TVEFUVVNfU0RJT19JUlEJCQkoMSA8PCAxNykKKyNkZWZpbmUgSFdfU1NQX1ZFUlNJT04JCQkJKGNwdV9pc19teDIzKCkgPyAweDExMCA6IDB4MTMwKQorI2RlZmluZSAgQlBfU1NQX1ZFUlNJT05fTUFKT1IJCQkoMjQpCisKKyNkZWZpbmUgQkZfU1NQKHZhbHVlLCBmaWVsZCkJKCgodmFsdWUpIDw8IEJQX1NTUF8jI2ZpZWxkKSAmIEJNX1NTUF8jI2ZpZWxkKQorCisjZGVmaW5lIE1YU19NTUNfSVJRX0JJVFMJKEJNX1NTUF9DVFJMMV9TRElPX0lSUQkJfCBcCisJCQkJIEJNX1NTUF9DVFJMMV9SRVNQX0VSUl9JUlEJfCBcCisJCQkJIEJNX1NTUF9DVFJMMV9SRVNQX1RJTUVPVVRfSVJRCXwgXAorCQkJCSBCTV9TU1BfQ1RSTDFfREFUQV9USU1FT1VUX0lSUQl8IFwKKwkJCQkgQk1fU1NQX0NUUkwxX0RBVEFfQ1JDX0lSUQl8IFwKKwkJCQkgQk1fU1NQX0NUUkwxX0ZJRk9fVU5ERVJSVU5fSVJRCXwgXAorCQkJCSBCTV9TU1BfQ1RSTDFfUkVDVl9USU1FT1VUX0lSUSAgfCBcCisJCQkJIEJNX1NTUF9DVFJMMV9GSUZPX09WRVJSVU5fSVJRKQorCisjZGVmaW5lIFNTUF9QSU9fTlVNCTMKKworc3RydWN0IG14c19tbWNfaG9zdCB7CisJc3RydWN0IG1tY19ob3N0CQkJKm1tYzsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QJCSptcnE7CisJc3RydWN0IG1tY19jb21tYW5kCQkqY21kOworCXN0cnVjdCBtbWNfZGF0YQkJCSpkYXRhOworCisJdm9pZCBfX2lvbWVtCQkJKmJhc2U7CisJaW50CQkJCWlycTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkqcmVzOworCXN0cnVjdCByZXNvdXJjZQkJCSpkbWFfcmVzOworCXN0cnVjdCBjbGsJCQkqY2xrOworCXVuc2lnbmVkIGludAkJCWNsa19yYXRlOworCisJc3RydWN0IGRtYV9jaGFuICAgICAgICAgCSpkbWFjaDsKKwlzdHJ1Y3QgbXhzX2RtYV9kYXRhCQlkbWFfZGF0YTsKKwl1bnNpZ25lZCBpbnQJCQlkbWFfZGlyOworCXUzMgkJCQlzc3BfcGlvX3dvcmRzW1NTUF9QSU9fTlVNXTsKKworCXVuc2lnbmVkIGludAkJCXZlcnNpb247CisJdW5zaWduZWQgY2hhcgkJCWJ1c193aWR0aDsKKwlzcGlubG9ja190CQkJbG9jazsKKwlpbnQJCQkJc2Rpb19pcnFfZW47Cit9OworCitzdGF0aWMgaW50IG14c19tbWNfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQoreworCXN0cnVjdCBteHNfbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCBteHNfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJbW1jX2Rldihob3N0LT5tbWMpLT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIWdwaW9faXNfdmFsaWQocGRhdGEtPndwX2dwaW8pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBncGlvX2dldF92YWx1ZShwZGF0YS0+d3BfZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgbXhzX21tY19nZXRfY2Qoc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlyZXR1cm4gIShyZWFkbChob3N0LT5iYXNlICsgSFdfU1NQX1NUQVRVUykgJgorCQkgQk1fU1NQX1NUQVRVU19DQVJEX0RFVEVDVCk7Cit9CisKK3N0YXRpYyB2b2lkIG14c19tbWNfcmVzZXQoc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCkKK3sKKwl1MzIgY3RybDAsIGN0cmwxOworCisJbXhzX3Jlc2V0X2Jsb2NrKGhvc3QtPmJhc2UpOworCisJY3RybDAgPSBCTV9TU1BfQ1RSTDBfSUdOT1JFX0NSQzsKKwljdHJsMSA9IEJGX1NTUCgweDMsIENUUkwxX1NTUF9NT0RFKSB8CisJCUJGX1NTUCgweDcsIENUUkwxX1dPUkRfTEVOR1RIKSB8CisJCUJNX1NTUF9DVFJMMV9ETUFfRU5BQkxFIHwKKwkJQk1fU1NQX0NUUkwxX1BPTEFSSVRZIHwKKwkJQk1fU1NQX0NUUkwxX1JFQ1ZfVElNRU9VVF9JUlFfRU4gfAorCQlCTV9TU1BfQ1RSTDFfREFUQV9DUkNfSVJRX0VOIHwKKwkJQk1fU1NQX0NUUkwxX0RBVEFfVElNRU9VVF9JUlFfRU4gfAorCQlCTV9TU1BfQ1RSTDFfUkVTUF9USU1FT1VUX0lSUV9FTiB8CisJCUJNX1NTUF9DVFJMMV9SRVNQX0VSUl9JUlFfRU47CisKKwl3cml0ZWwoQkZfU1NQKDB4ZmZmZiwgVElNSU5HX1RJTUVPVVQpIHwKKwkgICAgICAgQkZfU1NQKDIsIFRJTUlOR19DTE9DS19ESVZJREUpIHwKKwkgICAgICAgQkZfU1NQKDAsIFRJTUlOR19DTE9DS19SQVRFKSwKKwkgICAgICAgaG9zdC0+YmFzZSArIEhXX1NTUF9USU1JTkcpOworCisJaWYgKGhvc3QtPnNkaW9faXJxX2VuKSB7CisJCWN0cmwwIHw9IEJNX1NTUF9DVFJMMF9TRElPX0lSUV9DSEVDSzsKKwkJY3RybDEgfD0gQk1fU1NQX0NUUkwxX1NESU9fSVJRX0VOOworCX0KKworCXdyaXRlbChjdHJsMCwgaG9zdC0+YmFzZSArIEhXX1NTUF9DVFJMMCk7CisJd3JpdGVsKGN0cmwxLCBob3N0LT5iYXNlICsgSFdfU1NQX0NUUkwxKTsKK30KKworc3RhdGljIHZvaWQgbXhzX21tY19zdGFydF9jbWQoc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCwKKwkJCSAgICAgIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKTsKKworc3RhdGljIHZvaWQgbXhzX21tY19yZXF1ZXN0X2RvbmUoc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPmNtZDsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxID0gaG9zdC0+bXJxOworCisJaWYgKG1tY19yZXNwX3R5cGUoY21kKSAmIE1NQ19SU1BfUFJFU0VOVCkgeworCQlpZiAobW1jX3Jlc3BfdHlwZShjbWQpICYgTU1DX1JTUF8xMzYpIHsKKwkJCWNtZC0+cmVzcFszXSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBIV19TU1BfU0RSRVNQMCk7CisJCQljbWQtPnJlc3BbMl0gPSByZWFkbChob3N0LT5iYXNlICsgSFdfU1NQX1NEUkVTUDEpOworCQkJY21kLT5yZXNwWzFdID0gcmVhZGwoaG9zdC0+YmFzZSArIEhXX1NTUF9TRFJFU1AyKTsKKwkJCWNtZC0+cmVzcFswXSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBIV19TU1BfU0RSRVNQMyk7CisJCX0gZWxzZSB7CisJCQljbWQtPnJlc3BbMF0gPSByZWFkbChob3N0LT5iYXNlICsgSFdfU1NQX1NEUkVTUDApOworCQl9CisJfQorCisJaWYgKGRhdGEpIHsKKwkJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCisJCQkgICAgIGRhdGEtPnNnX2xlbiwgaG9zdC0+ZG1hX2Rpcik7CisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBhbiBlcnJvciBvbiBhbnkgYmxvY2ssIHdlIG1hcmsgYWxsCisJCSAqIGRhdGEgYmxvY2tzIGFzIGJlaW5nIGluIGVycm9yLgorCQkgKi8KKwkJaWYgKCFkYXRhLT5lcnJvcikKKwkJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6OworCQllbHNlCisJCQlkYXRhLT5ieXRlc194ZmVyZWQgPSAwOworCisJCWhvc3QtPmRhdGEgPSBOVUxMOworCQlpZiAobXJxLT5zdG9wKSB7CisJCQlteHNfbW1jX3N0YXJ0X2NtZChob3N0LCBtcnEtPnN0b3ApOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaG9zdC0+bXJxID0gTlVMTDsKKwltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKK30KKworc3RhdGljIHZvaWQgbXhzX21tY19kbWFfaXJxX2NhbGxiYWNrKHZvaWQgKnBhcmFtKQoreworCXN0cnVjdCBteHNfbW1jX2hvc3QgKmhvc3QgPSBwYXJhbTsKKworCW14c19tbWNfcmVxdWVzdF9kb25lKGhvc3QpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXhzX21tY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCA9IGRldl9pZDsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPmNtZDsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCXUzMiBzdGF0OworCisJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKworCXN0YXQgPSByZWFkbChob3N0LT5iYXNlICsgSFdfU1NQX0NUUkwxKTsKKwl3cml0ZWwoc3RhdCAmIE1YU19NTUNfSVJRX0JJVFMsCisJICAgICAgIGhvc3QtPmJhc2UgKyBIV19TU1BfQ1RSTDEgKyBNWFNfQ0xSX0FERFIpOworCisJaWYgKChzdGF0ICYgQk1fU1NQX0NUUkwxX1NESU9fSVJRKSAmJiAoc3RhdCAmIEJNX1NTUF9DVFJMMV9TRElPX0lSUV9FTikpCisJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKworCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKKworCWlmIChzdGF0ICYgQk1fU1NQX0NUUkwxX1JFU1BfVElNRU9VVF9JUlEpCisJCWNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCWVsc2UgaWYgKHN0YXQgJiBCTV9TU1BfQ1RSTDFfUkVTUF9FUlJfSVJRKQorCQljbWQtPmVycm9yID0gLUVJTzsKKworCWlmIChkYXRhKSB7CisJCWlmIChzdGF0ICYgKEJNX1NTUF9DVFJMMV9EQVRBX1RJTUVPVVRfSVJRIHwKKwkJCSAgICBCTV9TU1BfQ1RSTDFfUkVDVl9USU1FT1VUX0lSUSkpCisJCQlkYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCWVsc2UgaWYgKHN0YXQgJiBCTV9TU1BfQ1RSTDFfREFUQV9DUkNfSVJRKQorCQkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROworCQllbHNlIGlmIChzdGF0ICYgKEJNX1NTUF9DVFJMMV9GSUZPX1VOREVSUlVOX0lSUSB8CisJCQkJIEJNX1NTUF9DVFJMMV9GSUZPX09WRVJSVU5fSVJRKSkKKwkJCWRhdGEtPmVycm9yID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKm14c19tbWNfcHJlcF9kbWEoCisJc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGFwcGVuZCkKK3sKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IG1tY19kYXRhICpkYXRhID0gaG9zdC0+ZGF0YTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiBzZ2w7CisJdW5zaWduZWQgaW50IHNnX2xlbjsKKworCWlmIChkYXRhKSB7CisJCS8qIGRhdGEgKi8KKwkJZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLAorCQkJICAgZGF0YS0+c2dfbGVuLCBob3N0LT5kbWFfZGlyKTsKKwkJc2dsID0gZGF0YS0+c2c7CisJCXNnX2xlbiA9IGRhdGEtPnNnX2xlbjsKKwl9IGVsc2UgeworCQkvKiBwaW8gKi8KKwkJc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBob3N0LT5zc3BfcGlvX3dvcmRzOworCQlzZ19sZW4gPSBTU1BfUElPX05VTTsKKwl9CisKKwlkZXNjID0gaG9zdC0+ZG1hY2gtPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coaG9zdC0+ZG1hY2gsCisJCQkJc2dsLCBzZ19sZW4sIGhvc3QtPmRtYV9kaXIsIGFwcGVuZCk7CisJaWYgKGRlc2MpIHsKKwkJZGVzYy0+Y2FsbGJhY2sgPSBteHNfbW1jX2RtYV9pcnFfY2FsbGJhY2s7CisJCWRlc2MtPmNhbGxiYWNrX3BhcmFtID0gaG9zdDsKKwl9IGVsc2UgeworCQlpZiAoZGF0YSkKKwkJCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLAorCQkJCSAgICAgZGF0YS0+c2dfbGVuLCBob3N0LT5kbWFfZGlyKTsKKwl9CisKKwlyZXR1cm4gZGVzYzsKK30KKworc3RhdGljIHZvaWQgbXhzX21tY19iYyhzdHJ1Y3QgbXhzX21tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gaG9zdC0+Y21kOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKwl1MzIgY3RybDAsIGNtZDAsIGNtZDE7CisKKwljdHJsMCA9IEJNX1NTUF9DVFJMMF9FTkFCTEUgfCBCTV9TU1BfQ1RSTDBfSUdOT1JFX0NSQzsKKwljbWQwID0gQkZfU1NQKGNtZC0+b3Bjb2RlLCBDTUQwX0NNRCkgfCBCTV9TU1BfQ01EMF9BUFBFTkRfOENZQzsKKwljbWQxID0gY21kLT5hcmc7CisKKwlpZiAoaG9zdC0+c2Rpb19pcnFfZW4pIHsKKwkJY3RybDAgfD0gQk1fU1NQX0NUUkwwX1NESU9fSVJRX0NIRUNLOworCQljbWQwIHw9IEJNX1NTUF9DTUQwX0NPTlRfQ0xLSU5HX0VOIHwgQk1fU1NQX0NNRDBfU0xPV19DTEtJTkdfRU47CisJfQorCisJaG9zdC0+c3NwX3Bpb193b3Jkc1swXSA9IGN0cmwwOworCWhvc3QtPnNzcF9waW9fd29yZHNbMV0gPSBjbWQwOworCWhvc3QtPnNzcF9waW9fd29yZHNbMl0gPSBjbWQxOworCWhvc3QtPmRtYV9kaXIgPSBETUFfTk9ORTsKKwlkZXNjID0gbXhzX21tY19wcmVwX2RtYShob3N0LCAwKTsKKwlpZiAoIWRlc2MpCisJCWdvdG8gb3V0OworCisJZG1hZW5naW5lX3N1Ym1pdChkZXNjKTsKKwlyZXR1cm47CisKK291dDoKKwlkZXZfd2FybihtbWNfZGV2KGhvc3QtPm1tYyksCisJCSAiJXM6IGZhaWxlZCB0byBwcmVwIGRtYVxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBteHNfbW1jX2FjKHN0cnVjdCBteHNfbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBob3N0LT5jbWQ7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjOworCXUzMiBpZ25vcmVfY3JjLCBnZXRfcmVzcCwgbG9uZ19yZXNwOworCXUzMiBjdHJsMCwgY21kMCwgY21kMTsKKworCWlnbm9yZV9jcmMgPSAobW1jX3Jlc3BfdHlwZShjbWQpICYgTU1DX1JTUF9DUkMpID8KKwkJCTAgOiBCTV9TU1BfQ1RSTDBfSUdOT1JFX0NSQzsKKwlnZXRfcmVzcCA9IChtbWNfcmVzcF90eXBlKGNtZCkgJiBNTUNfUlNQX1BSRVNFTlQpID8KKwkJCUJNX1NTUF9DVFJMMF9HRVRfUkVTUCA6IDA7CisJbG9uZ19yZXNwID0gKG1tY19yZXNwX3R5cGUoY21kKSAmIE1NQ19SU1BfMTM2KSA/CisJCQlCTV9TU1BfQ1RSTDBfTE9OR19SRVNQIDogMDsKKworCWN0cmwwID0gQk1fU1NQX0NUUkwwX0VOQUJMRSB8IGlnbm9yZV9jcmMgfCBnZXRfcmVzcCB8IGxvbmdfcmVzcDsKKwljbWQwID0gQkZfU1NQKGNtZC0+b3Bjb2RlLCBDTUQwX0NNRCk7CisJY21kMSA9IGNtZC0+YXJnOworCisJaWYgKGhvc3QtPnNkaW9faXJxX2VuKSB7CisJCWN0cmwwIHw9IEJNX1NTUF9DVFJMMF9TRElPX0lSUV9DSEVDSzsKKwkJY21kMCB8PSBCTV9TU1BfQ01EMF9DT05UX0NMS0lOR19FTiB8IEJNX1NTUF9DTUQwX1NMT1dfQ0xLSU5HX0VOOworCX0KKworCWhvc3QtPnNzcF9waW9fd29yZHNbMF0gPSBjdHJsMDsKKwlob3N0LT5zc3BfcGlvX3dvcmRzWzFdID0gY21kMDsKKwlob3N0LT5zc3BfcGlvX3dvcmRzWzJdID0gY21kMTsKKwlob3N0LT5kbWFfZGlyID0gRE1BX05PTkU7CisJZGVzYyA9IG14c19tbWNfcHJlcF9kbWEoaG9zdCwgMCk7CisJaWYgKCFkZXNjKQorCQlnb3RvIG91dDsKKworCWRtYWVuZ2luZV9zdWJtaXQoZGVzYyk7CisJcmV0dXJuOworCitvdXQ6CisJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLAorCQkgIiVzOiBmYWlsZWQgdG8gcHJlcCBkbWFcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IG14c19uc190b19zc3BfdGlja3ModW5zaWduZWQgY2xvY2tfcmF0ZSwgdW5zaWduZWQgbnMpCit7CisJY29uc3QgdW5zaWduZWQgaW50IHNzcF90aW1lb3V0X211bCA9IDQwOTY7CisJLyoKKwkgKiBDYWxjdWxhdGUgdGlja3MgaW4gbXMgc2luY2UgbnMgYXJlIGxhcmdlIG51bWJlcnMKKwkgKiBhbmQgbWlnaHQgb3ZlcmZsb3cKKwkgKi8KKwljb25zdCB1bnNpZ25lZCBpbnQgY2xvY2tfcGVyX21zID0gY2xvY2tfcmF0ZSAvIDEwMDA7CisJY29uc3QgdW5zaWduZWQgaW50IG1zID0gbnMgLyAxMDAwOworCWNvbnN0IHVuc2lnbmVkIGludCB0aWNrcyA9IG1zICogY2xvY2tfcGVyX21zOworCWNvbnN0IHVuc2lnbmVkIGludCBzc3BfdGlja3MgPSB0aWNrcyAvIHNzcF90aW1lb3V0X211bDsKKworCVdBUk5fT04oc3NwX3RpY2tzID09IDApOworCXJldHVybiBzc3BfdGlja3M7Cit9CisKK3N0YXRpYyB2b2lkIG14c19tbWNfYWR0YyhzdHJ1Y3QgbXhzX21tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gaG9zdC0+Y21kOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGNtZC0+ZGF0YTsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wgPSBkYXRhLT5zZywgKnNnOworCXVuc2lnbmVkIGludCBzZ19sZW4gPSBkYXRhLT5zZ19sZW47CisJaW50IGk7CisKKwl1bnNpZ25lZCBzaG9ydCBkbWFfZGF0YV9kaXIsIHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IGRhdGFfc2l6ZSA9IDAsIGxvZzJfYmxrc3o7CisJdW5zaWduZWQgaW50IGJsb2NrcyA9IGRhdGEtPmJsb2NrczsKKworCXUzMiBpZ25vcmVfY3JjLCBnZXRfcmVzcCwgbG9uZ19yZXNwLCByZWFkOworCXUzMiBjdHJsMCwgY21kMCwgY21kMSwgdmFsOworCisJaWdub3JlX2NyYyA9IChtbWNfcmVzcF90eXBlKGNtZCkgJiBNTUNfUlNQX0NSQykgPworCQkJMCA6IEJNX1NTUF9DVFJMMF9JR05PUkVfQ1JDOworCWdldF9yZXNwID0gKG1tY19yZXNwX3R5cGUoY21kKSAmIE1NQ19SU1BfUFJFU0VOVCkgPworCQkJQk1fU1NQX0NUUkwwX0dFVF9SRVNQIDogMDsKKwlsb25nX3Jlc3AgPSAobW1jX3Jlc3BfdHlwZShjbWQpICYgTU1DX1JTUF8xMzYpID8KKwkJCUJNX1NTUF9DVFJMMF9MT05HX1JFU1AgOiAwOworCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpIHsKKwkJZG1hX2RhdGFfZGlyID0gRE1BX1RPX0RFVklDRTsKKwkJcmVhZCA9IDA7CisJfSBlbHNlIHsKKwkJZG1hX2RhdGFfZGlyID0gRE1BX0ZST01fREVWSUNFOworCQlyZWFkID0gQk1fU1NQX0NUUkwwX1JFQUQ7CisJfQorCisJY3RybDAgPSBCRl9TU1AoaG9zdC0+YnVzX3dpZHRoLCBDVFJMMF9CVVNfV0lEVEgpIHwKKwkJaWdub3JlX2NyYyB8IGdldF9yZXNwIHwgbG9uZ19yZXNwIHwKKwkJQk1fU1NQX0NUUkwwX0RBVEFfWEZFUiB8IHJlYWQgfAorCQlCTV9TU1BfQ1RSTDBfV0FJVF9GT1JfSVJRIHwKKwkJQk1fU1NQX0NUUkwwX0VOQUJMRTsKKworCWNtZDAgPSBCRl9TU1AoY21kLT5vcGNvZGUsIENNRDBfQ01EKTsKKworCS8qIGdldCBsb2dhcml0aG0gdG8gYmFzZSAyIG9mIGJsb2NrIHNpemUgZm9yIHNldHRpbmcgcmVnaXN0ZXIgKi8KKwlsb2cyX2Jsa3N6ID0gaWxvZzIoZGF0YS0+Ymxrc3opOworCisJLyoKKwkgKiB0YWtlIHNwZWNpYWwgY2FyZSBvZiB0aGUgY2FzZSB0aGF0IGRhdGEgc2l6ZSBmcm9tIGRhdGEtPnNnCisJICogaXMgbm90IGVxdWFsIHRvIGJsb2NrcyB4IGJsa3N6CisJICovCisJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKQorCQlkYXRhX3NpemUgKz0gc2ctPmxlbmd0aDsKKworCWlmIChkYXRhX3NpemUgIT0gZGF0YS0+YmxvY2tzICogZGF0YS0+Ymxrc3opCisJCWJsb2NrcyA9IDE7CisKKwkvKiB4ZmVyIGNvdW50LCBibG9jayBzaXplIGFuZCBjb3VudCBuZWVkIHRvIGJlIHNldCBkaWZmZXJlbnRseSAqLworCWlmIChzc3BfaXNfb2xkKCkpIHsKKwkJY3RybDAgfD0gQkZfU1NQKGRhdGFfc2l6ZSwgQ1RSTDBfWEZFUl9DT1VOVCk7CisJCWNtZDAgfD0gQkZfU1NQKGxvZzJfYmxrc3osIENNRDBfQkxPQ0tfU0laRSkgfAorCQkJQkZfU1NQKGJsb2NrcyAtIDEsIENNRDBfQkxPQ0tfQ09VTlQpOworCX0gZWxzZSB7CisJCXdyaXRlbChkYXRhX3NpemUsIGhvc3QtPmJhc2UgKyBIV19TU1BfWEZFUl9TSVpFKTsKKwkJd3JpdGVsKEJGX1NTUChsb2cyX2Jsa3N6LCBCTE9DS19TSVpFX0JMT0NLX1NJWkUpIHwKKwkJICAgICAgIEJGX1NTUChibG9ja3MgLSAxLCBCTE9DS19TSVpFX0JMT0NLX0NPVU5UKSwKKwkJICAgICAgIGhvc3QtPmJhc2UgKyBIV19TU1BfQkxPQ0tfU0laRSk7CisJfQorCisJaWYgKChjbWQtPm9wY29kZSA9PSBNTUNfU1RPUF9UUkFOU01JU1NJT04pIHx8CisJICAgIChjbWQtPm9wY29kZSA9PSBTRF9JT19SV19FWFRFTkRFRCkpCisJCWNtZDAgfD0gQk1fU1NQX0NNRDBfQVBQRU5EXzhDWUM7CisKKwljbWQxID0gY21kLT5hcmc7CisKKwlpZiAoaG9zdC0+c2Rpb19pcnFfZW4pIHsKKwkJY3RybDAgfD0gQk1fU1NQX0NUUkwwX1NESU9fSVJRX0NIRUNLOworCQljbWQwIHw9IEJNX1NTUF9DTUQwX0NPTlRfQ0xLSU5HX0VOIHwgQk1fU1NQX0NNRDBfU0xPV19DTEtJTkdfRU47CisJfQorCisJLyogc2V0IHRoZSB0aW1lb3V0IGNvdW50ICovCisJdGltZW91dCA9IG14c19uc190b19zc3BfdGlja3MoaG9zdC0+Y2xrX3JhdGUsIGRhdGEtPnRpbWVvdXRfbnMpOworCXZhbCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBIV19TU1BfVElNSU5HKTsKKwl2YWwgJj0gfihCTV9TU1BfVElNSU5HX1RJTUVPVVQpOworCXZhbCB8PSBCRl9TU1AodGltZW91dCwgVElNSU5HX1RJTUVPVVQpOworCXdyaXRlbCh2YWwsIGhvc3QtPmJhc2UgKyBIV19TU1BfVElNSU5HKTsKKworCS8qIHBpbyAqLworCWhvc3QtPnNzcF9waW9fd29yZHNbMF0gPSBjdHJsMDsKKwlob3N0LT5zc3BfcGlvX3dvcmRzWzFdID0gY21kMDsKKwlob3N0LT5zc3BfcGlvX3dvcmRzWzJdID0gY21kMTsKKwlob3N0LT5kbWFfZGlyID0gRE1BX05PTkU7CisJZGVzYyA9IG14c19tbWNfcHJlcF9kbWEoaG9zdCwgMCk7CisJaWYgKCFkZXNjKQorCQlnb3RvIG91dDsKKworCS8qIGFwcGVuZCBkYXRhIHNnICovCisJV0FSTl9PTihob3N0LT5kYXRhICE9IE5VTEwpOworCWhvc3QtPmRhdGEgPSBkYXRhOworCWhvc3QtPmRtYV9kaXIgPSBkbWFfZGF0YV9kaXI7CisJZGVzYyA9IG14c19tbWNfcHJlcF9kbWEoaG9zdCwgMSk7CisJaWYgKCFkZXNjKQorCQlnb3RvIG91dDsKKworCWRtYWVuZ2luZV9zdWJtaXQoZGVzYyk7CisJcmV0dXJuOworb3V0OgorCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJICIlczogZmFpbGVkIHRvIHByZXAgZG1hXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIG14c19tbWNfc3RhcnRfY21kKHN0cnVjdCBteHNfbW1jX2hvc3QgKmhvc3QsCisJCQkgICAgICBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlob3N0LT5jbWQgPSBjbWQ7CisKKwlzd2l0Y2ggKG1tY19jbWRfdHlwZShjbWQpKSB7CisJY2FzZSBNTUNfQ01EX0JDOgorCQlteHNfbW1jX2JjKGhvc3QpOworCQlicmVhazsKKwljYXNlIE1NQ19DTURfQkNSOgorCQlteHNfbW1jX2FjKGhvc3QpOworCQlicmVhazsKKwljYXNlIE1NQ19DTURfQUM6CisJCW14c19tbWNfYWMoaG9zdCk7CisJCWJyZWFrOworCWNhc2UgTU1DX0NNRF9BRFRDOgorCQlteHNfbW1jX2FkdGMoaG9zdCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCSAiJXM6IHVua25vd24gTU1DIGNvbW1hbmRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBteHNfbW1jX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQoreworCXN0cnVjdCBteHNfbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJV0FSTl9PTihob3N0LT5tcnEgIT0gTlVMTCk7CisJaG9zdC0+bXJxID0gbXJxOworCW14c19tbWNfc3RhcnRfY21kKGhvc3QsIG1ycS0+Y21kKTsKK30KKworc3RhdGljIHZvaWQgbXhzX21tY19zZXRfY2xrX3JhdGUoc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHJhdGUpCit7CisJdW5zaWduZWQgaW50IHNzcF9yYXRlLCBiaXRfcmF0ZTsKKwl1MzIgZGl2MSwgZGl2MjsKKwl1MzIgdmFsOworCisJc3NwX3JhdGUgPSBjbGtfZ2V0X3JhdGUoaG9zdC0+Y2xrKTsKKworCWZvciAoZGl2MSA9IDI7IGRpdjEgPCAyNTQ7IGRpdjEgKz0gMikgeworCQlkaXYyID0gc3NwX3JhdGUgLyByYXRlIC8gZGl2MTsKKwkJaWYgKGRpdjIgPCAweDEwMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChkaXYxID49IDI1NCkgeworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCSIlczogY2Fubm90IHNldCBjbG9jayB0byAlZFxuIiwgX19mdW5jX18sIHJhdGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRpdjIgPT0gMCkKKwkJYml0X3JhdGUgPSBzc3BfcmF0ZSAvIGRpdjE7CisJZWxzZQorCQliaXRfcmF0ZSA9IHNzcF9yYXRlIC8gZGl2MSAvIGRpdjI7CisKKwl2YWwgPSByZWFkbChob3N0LT5iYXNlICsgSFdfU1NQX1RJTUlORyk7CisJdmFsICY9IH4oQk1fU1NQX1RJTUlOR19DTE9DS19ESVZJREUgfCBCTV9TU1BfVElNSU5HX0NMT0NLX1JBVEUpOworCXZhbCB8PSBCRl9TU1AoZGl2MSwgVElNSU5HX0NMT0NLX0RJVklERSk7CisJdmFsIHw9IEJGX1NTUChkaXYyIC0gMSwgVElNSU5HX0NMT0NLX1JBVEUpOworCXdyaXRlbCh2YWwsIGhvc3QtPmJhc2UgKyBIV19TU1BfVElNSU5HKTsKKworCWhvc3QtPmNsa19yYXRlID0gYml0X3JhdGU7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJIiVzOiBkaXYxICVkLCBkaXYyICVkLCBzc3AgJWQsIGJpdCAlZCwgcmF0ZSAlZFxuIiwKKwkJX19mdW5jX18sIGRpdjEsIGRpdjIsIHNzcF9yYXRlLCBiaXRfcmF0ZSwgcmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG14c19tbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwlzdHJ1Y3QgbXhzX21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzgpCisJCWhvc3QtPmJ1c193aWR0aCA9IDI7CisJZWxzZSBpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KQorCQlob3N0LT5idXNfd2lkdGggPSAxOworCWVsc2UKKwkJaG9zdC0+YnVzX3dpZHRoID0gMDsKKworCWlmIChpb3MtPmNsb2NrKQorCQlteHNfbW1jX3NldF9jbGtfcmF0ZShob3N0LCBpb3MtPmNsb2NrKTsKK30KKworc3RhdGljIHZvaWQgbXhzX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpCit7CisJc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlob3N0LT5zZGlvX2lycV9lbiA9IGVuYWJsZTsKKworCWlmIChlbmFibGUpIHsKKwkJd3JpdGVsKEJNX1NTUF9DVFJMMF9TRElPX0lSUV9DSEVDSywKKwkJICAgICAgIGhvc3QtPmJhc2UgKyBIV19TU1BfQ1RSTDAgKyBNWFNfU0VUX0FERFIpOworCQl3cml0ZWwoQk1fU1NQX0NUUkwxX1NESU9fSVJRX0VOLAorCQkgICAgICAgaG9zdC0+YmFzZSArIEhXX1NTUF9DVFJMMSArIE1YU19TRVRfQUREUik7CisKKwkJaWYgKHJlYWRsKGhvc3QtPmJhc2UgKyBIV19TU1BfU1RBVFVTKSAmIEJNX1NTUF9TVEFUVVNfU0RJT19JUlEpCisJCQltbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtPm1tYyk7CisKKwl9IGVsc2UgeworCQl3cml0ZWwoQk1fU1NQX0NUUkwwX1NESU9fSVJRX0NIRUNLLAorCQkgICAgICAgaG9zdC0+YmFzZSArIEhXX1NTUF9DVFJMMCArIE1YU19DTFJfQUREUik7CisJCXdyaXRlbChCTV9TU1BfQ1RSTDFfU0RJT19JUlFfRU4sCisJCSAgICAgICBob3N0LT5iYXNlICsgSFdfU1NQX0NUUkwxICsgTVhTX0NMUl9BRERSKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG14c19tbWNfb3BzID0geworCS5yZXF1ZXN0ID0gbXhzX21tY19yZXF1ZXN0LAorCS5nZXRfcm8gPSBteHNfbW1jX2dldF9ybywKKwkuZ2V0X2NkID0gbXhzX21tY19nZXRfY2QsCisJLnNldF9pb3MgPSBteHNfbW1jX3NldF9pb3MsCisJLmVuYWJsZV9zZGlvX2lycSA9IG14c19tbWNfZW5hYmxlX3NkaW9faXJxLAorfTsKKworc3RhdGljIGJvb2wgbXhzX21tY19kbWFfZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqcGFyYW0pCit7CisJc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCA9IHBhcmFtOworCisJaWYgKCFteHNfZG1hX2lzX2FwYmgoY2hhbikpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjaGFuLT5jaGFuX2lkICE9IGhvc3QtPmRtYV9yZXMtPnN0YXJ0KQorCQlyZXR1cm4gZmFsc2U7CisKKwljaGFuLT5wcml2YXRlID0gJmhvc3QtPmRtYV9kYXRhOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbXhzX21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteHNfbW1jX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IHJlc291cmNlICppb3JlcywgKmRtYXJlcywgKnI7CisJc3RydWN0IG14c19tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IHJldCA9IDAsIGlycV9lcnIsIGlycV9kbWE7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCWlvcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkbWFyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlycV9lcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlycV9kbWEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCWlmICghaW9yZXMgfHwgIWRtYXJlcyB8fCBpcnFfZXJyIDwgMCB8fCBpcnFfZG1hIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKGlvcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb3JlcyksIHBkZXYtPm5hbWUpOworCWlmICghcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgbXhzX21tY19ob3N0KSwgJnBkZXYtPmRldik7CisJaWYgKCFtbWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfcmVsZWFzZV9tZW07CisJfQorCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaG9zdC0+YmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCWlmICghaG9zdC0+YmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9tbWNfZnJlZTsKKwl9CisKKwkvKiBvbmx5IG1ham9yIHZlcmlvbiBkb2VzIG1hdHRlciAqLworCWhvc3QtPnZlcnNpb24gPSByZWFkbChob3N0LT5iYXNlICsgSFdfU1NQX1ZFUlNJT04pID4+CisJCQlCUF9TU1BfVkVSU0lPTl9NQUpPUjsKKworCWhvc3QtPm1tYyA9IG1tYzsKKwlob3N0LT5yZXMgPSByOworCWhvc3QtPmRtYV9yZXMgPSBkbWFyZXM7CisJaG9zdC0+aXJxID0gaXJxX2VycjsKKwlob3N0LT5zZGlvX2lycV9lbiA9IDA7CisKKwlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmNsayk7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKworCW14c19tbWNfcmVzZXQoaG9zdCk7CisKKwlkbWFfY2FwX3plcm8obWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKwlob3N0LT5kbWFfZGF0YS5jaGFuX2lycSA9IGlycV9kbWE7CisJaG9zdC0+ZG1hY2ggPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIG14c19tbWNfZG1hX2ZpbHRlciwgaG9zdCk7CisJaWYgKCFob3N0LT5kbWFjaCkgeworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCSIlczogZmFpbGVkIHRvIHJlcXVlc3QgZG1hXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2Nsa19wdXQ7CisJfQorCisJLyogc2V0IG1tYyBjb3JlIHBhcmFtZXRlcnMgKi8KKwltbWMtPm9wcyA9ICZteHNfbW1jX29wczsKKwltbWMtPmNhcHMgPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8CisJCSAgICBNTUNfQ0FQX1NESU9fSVJRIHwgTU1DX0NBUF9ORUVEU19QT0xMOworCisJcGRhdGEgPQltbWNfZGV2KGhvc3QtPm1tYyktPnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhKSB7CisJCWlmIChwZGF0YS0+ZmxhZ3MgJiBTTE9URl84X0JJVF9DQVBBQkxFKQorCQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQTsKKwkJaWYgKHBkYXRhLT5mbGFncyAmIFNMT1RGXzRfQklUX0NBUEFCTEUpCisJCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOworCX0KKworCW1tYy0+Zl9taW4gPSA0MDAwMDA7CisJbW1jLT5mX21heCA9IDI4ODAwMDAwMDsKKwltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCisJbW1jLT5tYXhfc2VncyA9IDUyOworCW1tYy0+bWF4X2Jsa19zaXplID0gMSA8PCAweGY7CisJbW1jLT5tYXhfYmxrX2NvdW50ID0gKHNzcF9pc19vbGQoKSkgPyAweGZmIDogMHhmZmZmZmY7CisJbW1jLT5tYXhfcmVxX3NpemUgPSAoc3NwX2lzX29sZCgpKSA/IDB4ZmZmZiA6IDB4ZmZmZmZmZmY7CisJbW1jLT5tYXhfc2VnX3NpemUgPSBkbWFfZ2V0X21heF9zZWdfc2l6ZShob3N0LT5kbWFjaC0+ZGV2aWNlLT5kZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgbXhzX21tY19pcnFfaGFuZGxlciwgMCwgRFJJVkVSX05BTUUsIGhvc3QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfZG1hOworCisJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOworCisJcmV0ID0gbW1jX2FkZF9ob3N0KG1tYyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZV9pcnE7CisKKwlkZXZfaW5mbyhtbWNfZGV2KGhvc3QtPm1tYyksICJpbml0aWFsaXplZFxuIik7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CitvdXRfZnJlZV9kbWE6CisJaWYgKGhvc3QtPmRtYWNoKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPmRtYWNoKTsKK291dF9jbGtfcHV0OgorCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CisJY2xrX3B1dChob3N0LT5jbGspOworb3V0X2lvdW5tYXA6CisJaW91bm1hcChob3N0LT5iYXNlKTsKK291dF9tbWNfZnJlZToKKwltbWNfZnJlZV9ob3N0KG1tYyk7CitvdXRfcmVsZWFzZV9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKGlvcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb3JlcykpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXhzX21tY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBteHNfbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gaG9zdC0+cmVzOworCisJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CisKKwlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpZiAoaG9zdC0+ZG1hY2gpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoaG9zdC0+ZG1hY2gpOworCisJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKKwljbGtfcHV0KGhvc3QtPmNsayk7CisKKwlpb3VubWFwKGhvc3QtPmJhc2UpOworCisJbW1jX2ZyZWVfaG9zdChtbWMpOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBteHNfbW1jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG14c19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KG1tYyk7CisKKwljbGtfZGlzYWJsZShob3N0LT5jbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBteHNfbW1jX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXhzX21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlpbnQgcmV0ID0gMDsKKworCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKworCXJldCA9IG1tY19yZXN1bWVfaG9zdChtbWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG14c19tbWNfcG1fb3BzID0geworCS5zdXNwZW5kCT0gbXhzX21tY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gbXhzX21tY19yZXN1bWUsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14c19tbWNfZHJpdmVyID0geworCS5wcm9iZQkJPSBteHNfbW1jX3Byb2JlLAorCS5yZW1vdmUJCT0gbXhzX21tY19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmbXhzX21tY19wbV9vcHMsCisjZW5kaWYKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhzX21tY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXhzX21tY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXhzX21tY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14c19tbWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXhzX21tY19pbml0KTsKK21vZHVsZV9leGl0KG14c19tbWNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRlJFRVNDQUxFIE1YUyBNTUMgcGVyaXBoZXJhbCIpOworTU9EVUxFX0FVVEhPUigiRnJlZXNjYWxlIFNlbWljb25kdWN0b3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9vZl9tbWNfc3BpLmMKaW5kZXggMTI0N2U1ZC4uNTUzMGRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vZl9tbWNfc3BpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vZl9tbWNfc3BpLmMKQEAgLTM0LDYgKzM0LDcgQEAKIHN0cnVjdCBvZl9tbWNfc3BpIHsKIAlpbnQgZ3Bpb3NbTlVNX0dQSU9TXTsKIAlib29sIGFsb3dfZ3Bpb3NbTlVNX0dQSU9TXTsKKwlpbnQgZGV0ZWN0X2lycTsKIAlzdHJ1Y3QgbW1jX3NwaV9wbGF0Zm9ybV9kYXRhIHBkYXRhOwogfTsKIApAQCAtNjEsNiArNjIsMjIgQEAKIAlyZXR1cm4gb2ZfbW1jX3NwaV9yZWFkX2dwaW8oZGV2LCBXUF9HUElPKTsKIH0KIAorc3RhdGljIGludCBvZl9tbWNfc3BpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgaXJxcmV0dXJuX3QgKCppcnFoYW5kbGVyKShpbnQsIHZvaWQgKiksIHZvaWQgKm1tYykKK3sKKwlzdHJ1Y3Qgb2ZfbW1jX3NwaSAqb21zID0gdG9fb2ZfbW1jX3NwaShkZXYpOworCisJcmV0dXJuIHJlcXVlc3RfdGhyZWFkZWRfaXJxKG9tcy0+ZGV0ZWN0X2lycSwgTlVMTCwgaXJxaGFuZGxlciwgMCwKKwkJCQkgICAgZGV2X25hbWUoZGV2KSwgbW1jKTsKK30KKworc3RhdGljIHZvaWQgb2ZfbW1jX3NwaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqbW1jKQoreworCXN0cnVjdCBvZl9tbWNfc3BpICpvbXMgPSB0b19vZl9tbWNfc3BpKGRldik7CisKKwlmcmVlX2lycShvbXMtPmRldGVjdF9pcnEsIG1tYyk7Cit9CisKIHN0cnVjdCBtbWNfc3BpX3BsYXRmb3JtX2RhdGEgKm1tY19zcGlfZ2V0X3BkYXRhKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnNwaS0+ZGV2OwpAQCAtMTIxLDggKzEzOCwxMyBAQAogCWlmIChncGlvX2lzX3ZhbGlkKG9tcy0+Z3Bpb3NbV1BfR1BJT10pKQogCQlvbXMtPnBkYXRhLmdldF9ybyA9IG9mX21tY19zcGlfZ2V0X3JvOwogCi0JLyogV2UgZG9uJ3Qgc3VwcG9ydCBpbnRlcnJ1cHRzIHlldCwgbGV0J3MgcG9sbC4gKi8KLQlvbXMtPnBkYXRhLmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOworCW9tcy0+ZGV0ZWN0X2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwlpZiAob21zLT5kZXRlY3RfaXJxICE9IE5PX0lSUSkgeworCQlvbXMtPnBkYXRhLmluaXQgPSBvZl9tbWNfc3BpX2luaXQ7CisJCW9tcy0+cGRhdGEuZXhpdCA9IG9mX21tY19zcGlfZXhpdDsKKwl9IGVsc2UgeworCQlvbXMtPnBkYXRhLmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOworCX0KIAogCWRldi0+cGxhdGZvcm1fZGF0YSA9ICZvbXMtPnBkYXRhOwogCXJldHVybiBkZXYtPnBsYXRmb3JtX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IDM3OWQyZmYuLjJlMDMyZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC0xNDE3LDcgKzE0MTcsNyBAQAogCWlmIChyZXMgPT0gTlVMTCB8fCBpcnEgPCAwKQogCQlyZXR1cm4gLUVOWElPOwogCi0JcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQkgcGRldi0+bmFtZSk7CiAJaWYgKHJlcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAKIAogCWhvc3QtPmlycSA9IGlycTsKIAlob3N0LT5waHlzX2Jhc2UgPSBob3N0LT5tZW1fcmVzLT5zdGFydDsKLQlob3N0LT52aXJ0X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWhvc3QtPnZpcnRfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIWhvc3QtPnZpcnRfYmFzZSkKIAkJZ290byBlcnJfaW9yZW1hcDsKIApAQCAtMTUxNCw3ICsxNTE0LDcgQEAKIGVycl9pb3JlbWFwOgogCWtmcmVlKGhvc3QpOwogZXJyX2ZyZWVfbWVtX3JlZ2lvbjoKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCAwNzhmZGYxLi4yNTllY2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAKICNkZWZpbmUgTU1DX1RJTUVPVVRfTVMJCTIwCiAjZGVmaW5lIE9NQVBfTU1DX01BU1RFUl9DTE9DSwk5NjAwMDAwMAotI2RlZmluZSBEUklWRVJfTkFNRQkJIm1tY2ktb21hcC1ocyIKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJvbWFwX2hzbW1jIgogCiAvKiBUaW1lb3V0cyBmb3IgZW50ZXJpbmcgcG93ZXIgc2F2aW5nIHN0YXRlcyBvbiBpbmFjdGl2aXR5LCBtc2VjICovCiAjZGVmaW5lIE9NQVBfTU1DX0RJU0FCTEVEX1RJTUVPVVQJMTAwCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfMjNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKK3N0YXRpYyBpbnQgb21hcF9oc21tY18yMzVfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKIAkJCQkgICBpbnQgdmRkKQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPQpAQCAtMzE2LDYgKzMxNiwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgb21hcF9oc21tY180X3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCisJCQkJCWludCB2ZGQpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb21hcF9oc21tY18xX3NldF9zbGVlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsCiAJCQkJICBpbnQgdmRkLCBpbnQgY2FyZHNsZWVwKQogewpAQCAtMzI2LDcgKzMzMiw3IEBACiAJcmV0dXJuIHJlZ3VsYXRvcl9zZXRfbW9kZShob3N0LT52Y2MsIG1vZGUpOwogfQogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfMjNfc2V0X3NsZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBzbGVlcCwKK3N0YXRpYyBpbnQgb21hcF9oc21tY18yMzVfc2V0X3NsZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBzbGVlcCwKIAkJCQkgICBpbnQgdmRkLCBpbnQgY2FyZHNsZWVwKQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPQpAQCAtMzY1LDYgKzM3MSwxMiBAQAogCQlyZXR1cm4gcmVndWxhdG9yX2VuYWJsZShob3N0LT52Y2NfYXV4KTsKIH0KIAorc3RhdGljIGludCBvbWFwX2hzbW1jXzRfc2V0X3NsZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBzbGVlcCwKKwkJCQkJaW50IHZkZCwgaW50IGNhcmRzbGVlcCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvbWFwX2hzbW1jX3JlZ19nZXQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yICpyZWc7CkBAIC0zNzksMTAgKzM5MSwxNCBAQAogCQlicmVhazsKIAljYXNlIE9NQVBfTU1DMl9ERVZJRDoKIAljYXNlIE9NQVBfTU1DM19ERVZJRDoKKwljYXNlIE9NQVBfTU1DNV9ERVZJRDoKIAkJLyogT2ZmLWNoaXAgbGV2ZWwgc2hpZnRpbmcsIG9yIG5vbmUgKi8KLQkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyID0gb21hcF9oc21tY18yM19zZXRfcG93ZXI7Ci0JCW1tY19zbG90KGhvc3QpLnNldF9zbGVlcCA9IG9tYXBfaHNtbWNfMjNfc2V0X3NsZWVwOworCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIgPSBvbWFwX2hzbW1jXzIzNV9zZXRfcG93ZXI7CisJCW1tY19zbG90KGhvc3QpLnNldF9zbGVlcCA9IG9tYXBfaHNtbWNfMjM1X3NldF9zbGVlcDsKIAkJYnJlYWs7CisJY2FzZSBPTUFQX01NQzRfREVWSUQ6CisJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlciA9IG9tYXBfaHNtbWNfNF9zZXRfcG93ZXI7CisJCW1tY19zbG90KGhvc3QpLnNldF9zbGVlcCA9IG9tYXBfaHNtbWNfNF9zZXRfc2xlZXA7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCJNTUMlZCBjb25maWd1cmF0aW9uIG5vdCBzdXBwb3J0ZWQhXG4iLCBob3N0LT5pZCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTU1NSw3ICsxNTcxLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRCkgeworCWlmIChob3N0LT5wZGF0YS0+Y29udHJvbGxlcl9mbGFncyAmIE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUKSB7CiAJCS8qIE9ubHkgTU1DMSBjYW4gaW50ZXJmYWNlIGF0IDNWIHdpdGhvdXQgc29tZSBmbGF2b3IKIAkJICogb2YgZXh0ZXJuYWwgdHJhbnNjZWl2ZXI7IGJ1dCB0aGV5IGFsbCBoYW5kbGUgMS44Vi4KIAkJICovCkBAIC0xNjQ3LDcgKzE2NjMsNyBAQAogCXUzMiBoY3RsLCBjYXBhLCB2YWx1ZTsKIAogCS8qIE9ubHkgTU1DMSBzdXBwb3J0cyAzLjBWICovCi0JaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRCkgeworCWlmIChob3N0LT5wZGF0YS0+Y29udHJvbGxlcl9mbGFncyAmIE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUKSB7CiAJCWhjdGwgPSBTRFZTMzA7CiAJCWNhcGEgPSBWUzMwIHwgVlMxODsKIAl9IGVsc2UgewpAQCAtMjAzMSw4ICsyMDQ3LDcgQEAKIAogCXJlcy0+c3RhcnQgKz0gcGRhdGEtPnJlZ19vZmZzZXQ7CiAJcmVzLT5lbmQgKz0gcGRhdGEtPnJlZ19vZmZzZXQ7Ci0JcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQkJCQkJcGRldi0+bmFtZSk7CisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7CiAJaWYgKHJlcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0yMTAxLDE0ICsyMTE2LDE0IEBACiAJLyogd2Ugc3RhcnQgb2ZmIGluIERJU0FCTEVEIHN0YXRlICovCiAJaG9zdC0+ZHBtX3N0YXRlID0gRElTQUJMRUQ7CiAKLQlpZiAobW1jX2hvc3RfZW5hYmxlKGhvc3QtPm1tYykgIT0gMCkgeworCWlmIChjbGtfZW5hYmxlKGhvc3QtPmljbGspICE9IDApIHsKIAkJY2xrX3B1dChob3N0LT5pY2xrKTsKIAkJY2xrX3B1dChob3N0LT5mY2xrKTsKIAkJZ290byBlcnIxOwogCX0KIAotCWlmIChjbGtfZW5hYmxlKGhvc3QtPmljbGspICE9IDApIHsKLQkJbW1jX2hvc3RfZGlzYWJsZShob3N0LT5tbWMpOworCWlmIChtbWNfaG9zdF9lbmFibGUoaG9zdC0+bW1jKSAhPSAwKSB7CisJCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwogCQljbGtfcHV0KGhvc3QtPmljbGspOwogCQljbGtfcHV0KGhvc3QtPmZjbGspOwogCQlnb3RvIGVycjE7CkBAIC0yMjcxLDcgKzIyODYsNyBAQAogZXJyX2FsbG9jOgogCW9tYXBfaHNtbWNfZ3Bpb19mcmVlKHBkYXRhKTsKIGVycjoKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjMwOCw3ICsyMzIzLDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcykKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMKaW5kZXggOWI4MjkxMC4uM2I1MjQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlteC5jCkBAIC0xNSw5ICsxNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NkaGNpLXBsdGZtLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZXNkaGMuaD4KICNpbmNsdWRlICJzZGhjaS5oIgogI2luY2x1ZGUgInNkaGNpLXBsdGZtLmgiCiAjaW5jbHVkZSAic2RoY2ktZXNkaGMuaCIKQEAgLTMwLDYgKzMyLDM5IEBACiAJd3JpdGVsKCgocmVhZGwoYmFzZSkgJiB+KG1hc2sgPDwgc2hpZnQpKSB8ICh2YWwgPDwgc2hpZnQpKSwgYmFzZSk7CiB9CiAKK3N0YXRpYyB1MzIgZXNkaGNfcmVhZGxfbGUoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJLyogZmFrZSBDQVJEX1BSRVNFTlQgZmxhZyBvbiBteDI1LzM1ICovCisJdTMyIHZhbCA9IHJlYWRsKGhvc3QtPmlvYWRkciArIHJlZyk7CisKKwlpZiAodW5saWtlbHkocmVnID09IFNESENJX1BSRVNFTlRfU1RBVEUpKSB7CisJCXN0cnVjdCBlc2RoY19wbGF0Zm9ybV9kYXRhICpib2FyZGRhdGEgPQorCQkJCWhvc3QtPm1tYy0+cGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCisJCWlmIChib2FyZGRhdGEgJiYgZ3Bpb19pc192YWxpZChib2FyZGRhdGEtPmNkX2dwaW8pCisJCQkJJiYgZ3Bpb19nZXRfdmFsdWUoYm9hcmRkYXRhLT5jZF9ncGlvKSkKKwkJCS8qIG5vIGNhcmQsIGlmIGEgdmFsaWQgZ3BpbyBzYXlzIHNvLi4uICovCisJCQl2YWwgJj0gU0RIQ0lfQ0FSRF9QUkVTRU5UOworCQllbHNlCisJCQkvKiAuLi4gaW4gYWxsIG90aGVyIGNhc2VzIGFzc3VtZSBjYXJkIGlzIHByZXNlbnQgKi8KKwkJCXZhbCB8PSBTREhDSV9DQVJEX1BSRVNFTlQ7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQgZXNkaGNfd3JpdGVsX2xlKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgdmFsLCBpbnQgcmVnKQoreworCWlmICh1bmxpa2VseShyZWcgPT0gU0RIQ0lfSU5UX0VOQUJMRSB8fCByZWcgPT0gU0RIQ0lfU0lHTkFMX0VOQUJMRSkpCisJCS8qCisJCSAqIHRoZXNlIGludGVycnVwdHMgd29uJ3Qgd29yayB3aXRoIGEgY3VzdG9tIGNhcmRfZGV0ZWN0IGdwaW8KKwkJICogKG9ubHkgYXBwbGllZCB0byBteDI1LzM1KQorCQkgKi8KKwkJdmFsICY9IH4oU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFIHwgU0RIQ0lfSU5UX0NBUkRfSU5TRVJUKTsKKworCXdyaXRlbCh2YWwsIGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKIHN0YXRpYyB1MTYgZXNkaGNfcmVhZHdfbGUoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCiB7CiAJaWYgKHVubGlrZWx5KHJlZyA9PSBTREhDSV9IT1NUX1ZFUlNJT04pKQpAQCAtMTAwLDEwICsxMzUsMzkgQEAKIAlyZXR1cm4gY2xrX2dldF9yYXRlKHBsdGZtX2hvc3QtPmNsaykgLyAyNTYgLyAxNjsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBlc2RoY19wbHRmbV9nZXRfcm8oc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IGVzZGhjX3BsYXRmb3JtX2RhdGEgKmJvYXJkZGF0YSA9IGhvc3QtPm1tYy0+cGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKGJvYXJkZGF0YSAmJiBncGlvX2lzX3ZhbGlkKGJvYXJkZGF0YS0+d3BfZ3BpbykpCisJCXJldHVybiBncGlvX2dldF92YWx1ZShib2FyZGRhdGEtPndwX2dwaW8pOworCWVsc2UKKwkJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX2VzZGhjX29wcyA9IHsKKwkucmVhZF93ID0gZXNkaGNfcmVhZHdfbGUsCisJLndyaXRlX3cgPSBlc2RoY193cml0ZXdfbGUsCisJLndyaXRlX2IgPSBlc2RoY193cml0ZWJfbGUsCisJLnNldF9jbG9jayA9IGVzZGhjX3NldF9jbG9jaywKKwkuZ2V0X21heF9jbG9jayA9IGVzZGhjX3BsdGZtX2dldF9tYXhfY2xvY2ssCisJLmdldF9taW5fY2xvY2sgPSBlc2RoY19wbHRmbV9nZXRfbWluX2Nsb2NrLAorfTsKKworc3RhdGljIGlycXJldHVybl90IGNkX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpzZGhvc3QgPSAoc3RydWN0IHNkaGNpX2hvc3QgKilkYXRhOworCisJdGFza2xldF9zY2hlZHVsZSgmc2Rob3N0LT5jYXJkX3Rhc2tsZXQpOworCXJldHVybiBJUlFfSEFORExFRDsKK307CisKIHN0YXRpYyBpbnQgZXNkaGNfcGx0Zm1faW5pdChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgc3RydWN0IHNkaGNpX3BsdGZtX2RhdGEgKnBkYXRhKQogewogCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3QgZXNkaGNfcGxhdGZvcm1fZGF0YSAqYm9hcmRkYXRhID0gaG9zdC0+bW1jLT5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGNsayAqY2xrOworCWludCBlcnI7CiAKIAljbGsgPSBjbGtfZ2V0KG1tY19kZXYoaG9zdC0+bW1jKSwgTlVMTCk7CiAJaWYgKElTX0VSUihjbGspKSB7CkBAIC0xMTYsMzIgKzE4MCw3OCBAQAogCWlmIChjcHVfaXNfbXgzNSgpIHx8IGNwdV9pc19teDUxKCkpCiAJCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19CUk9LRU5fVElNRU9VVF9WQUw7CiAKLQkvKiBGaXggZXJyYXRhIEVOR2NtMDcyMDcgd2hpY2ggaXMgcHJlc2VudCBvbiBpLk1YMjUgYW5kIGkuTVgzNSAqLwotCWlmIChjcHVfaXNfbXgyNSgpIHx8IGNwdV9pc19teDM1KCkpCisJaWYgKGNwdV9pc19teDI1KCkgfHwgY3B1X2lzX214MzUoKSkgeworCQkvKiBGaXggZXJyYXRhIEVOR2NtMDcyMDcgcHJlc2VudCBvbiBpLk1YMjUgYW5kIGkuTVgzNSAqLwogCQlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfTk9fTVVMVElCTE9DSzsKKwkJLyogd3JpdGVfcHJvdGVjdCBjYW4ndCBiZSByb3V0ZWQgdG8gY29udHJvbGxlciwgdXNlIGdwaW8gKi8KKwkJc2RoY2lfZXNkaGNfb3BzLmdldF9ybyA9IGVzZGhjX3BsdGZtX2dldF9ybzsKKwl9CiAKKwlpZiAoYm9hcmRkYXRhKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdF9vbmUoYm9hcmRkYXRhLT53cF9ncGlvLCBHUElPRl9JTiwgIkVTREhDX1dQIik7CisJCWlmIChlcnIpIHsKKwkJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkibm8gd3JpdGUtcHJvdGVjdCBwaW4gYXZhaWxhYmxlIVxuIik7CisJCQlib2FyZGRhdGEtPndwX2dwaW8gPSBlcnI7CisJCX0KKworCQllcnIgPSBncGlvX3JlcXVlc3Rfb25lKGJvYXJkZGF0YS0+Y2RfZ3BpbywgR1BJT0ZfSU4sICJFU0RIQ19DRCIpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfd2FybihtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkJIm5vIGNhcmQtZGV0ZWN0IHBpbiBhdmFpbGFibGUhXG4iKTsKKwkJCWdvdG8gbm9fY2FyZF9kZXRlY3RfcGluOworCQl9CisKKwkJLyogaS5NWDV4IGhhcyBpc3N1ZXMgdG8gYmUgcmVzZWFyY2hlZCAqLworCQlpZiAoIWNwdV9pc19teDI1KCkgJiYgIWNwdV9pc19teDM1KCkpCisJCQlnb3RvIG5vdF9zdXBwb3J0ZWQ7CisKKwkJZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoYm9hcmRkYXRhLT5jZF9ncGlvKSwgY2RfaXJxLAorCQkJCSBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBob3N0KTsKKwkJaWYgKGVycikgeworCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAicmVxdWVzdCBpcnEgZXJyb3JcbiIpOworCQkJZ290byBub19jYXJkX2RldGVjdF9pcnE7CisJCX0KKworCQlzZGhjaV9lc2RoY19vcHMud3JpdGVfbCA9IGVzZGhjX3dyaXRlbF9sZTsKKwkJc2RoY2lfZXNkaGNfb3BzLnJlYWRfbCA9IGVzZGhjX3JlYWRsX2xlOworCQkvKiBOb3cgd2UgaGF2ZSBhIHdvcmtpbmcgY2FyZF9kZXRlY3QgYWdhaW4gKi8KKwkJaG9zdC0+cXVpcmtzICY9IH5TREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT047CisJfQorCisJcmV0dXJuIDA7CisKKyBub19jYXJkX2RldGVjdF9pcnE6CisJZ3Bpb19mcmVlKGJvYXJkZGF0YS0+Y2RfZ3Bpbyk7Cisgbm9fY2FyZF9kZXRlY3RfcGluOgorCWJvYXJkZGF0YS0+Y2RfZ3BpbyA9IGVycjsKKyBub3Rfc3VwcG9ydGVkOgogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBlc2RoY19wbHRmbV9leGl0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewogCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3QgZXNkaGNfcGxhdGZvcm1fZGF0YSAqYm9hcmRkYXRhID0gaG9zdC0+bW1jLT5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoYm9hcmRkYXRhICYmIGdwaW9faXNfdmFsaWQoYm9hcmRkYXRhLT53cF9ncGlvKSkKKwkJZ3Bpb19mcmVlKGJvYXJkZGF0YS0+d3BfZ3Bpbyk7CisKKwlpZiAoYm9hcmRkYXRhICYmIGdwaW9faXNfdmFsaWQoYm9hcmRkYXRhLT5jZF9ncGlvKSkgeworCQlncGlvX2ZyZWUoYm9hcmRkYXRhLT5jZF9ncGlvKTsKKworCQlpZiAoIShob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04pKQorCQkJZnJlZV9pcnEoZ3Bpb190b19pcnEoYm9hcmRkYXRhLT5jZF9ncGlvKSwgaG9zdCk7CisJfQogCiAJY2xrX2Rpc2FibGUocGx0Zm1faG9zdC0+Y2xrKTsKIAljbGtfcHV0KHBsdGZtX2hvc3QtPmNsayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX2VzZGhjX29wcyA9IHsKLQkucmVhZF93ID0gZXNkaGNfcmVhZHdfbGUsCi0JLndyaXRlX3cgPSBlc2RoY193cml0ZXdfbGUsCi0JLndyaXRlX2IgPSBlc2RoY193cml0ZWJfbGUsCi0JLnNldF9jbG9jayA9IGVzZGhjX3NldF9jbG9jaywKLQkuZ2V0X21heF9jbG9jayA9IGVzZGhjX3BsdGZtX2dldF9tYXhfY2xvY2ssCi0JLmdldF9taW5fY2xvY2sgPSBlc2RoY19wbHRmbV9nZXRfbWluX2Nsb2NrLAotfTsKLQogc3RydWN0IHNkaGNpX3BsdGZtX2RhdGEgc2RoY2lfZXNkaGNfaW14X3BkYXRhID0gewotCS5xdWlya3MgPSBFU0RIQ19ERUZBVUxUX1FVSVJLUyB8IFNESENJX1FVSVJLX0JST0tFTl9BRE1BLAorCS5xdWlya3MgPSBFU0RIQ19ERUZBVUxUX1FVSVJLUyB8IFNESENJX1FVSVJLX0JST0tFTl9BRE1BCisJCQl8IFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTiwKIAkvKiBBRE1BIGhhcyBpc3N1ZXMuIE1pZ2h0IGJlIGZpeGFibGUgKi8KIAkub3BzID0gJnNkaGNpX2VzZGhjX29wcywKIAkuaW5pdCA9IGVzZGhjX3BsdGZtX2luaXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLmgKaW5kZXggYWZhZjFiYy4uYzU1YWFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMuaApAQCAtMTksNyArMTksNiBAQAogICovCiAKICNkZWZpbmUgRVNESENfREVGQVVMVF9RVUlSS1MJKFNESENJX1FVSVJLX0ZPUkNFX0JMS19TWl8yMDQ4IHwgXAotCQkJCVNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTiB8IFwKIAkJCQlTREhDSV9RVUlSS19OT19CVVNZX0lSUSB8IFwKIAkJCQlTREhDSV9RVUlSS19OT05TVEFOREFSRF9DTE9DSyB8IFwKIAkJCQlTREhDSV9RVUlSS19EQVRBX1RJTUVPVVRfVVNFU19TRENMSyB8IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtZXNkaGMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtZXNkaGMuYwppbmRleCBmY2QwZTFmLi4wODE2MWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWVzZGhjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1lc2RoYy5jCkBAIC03Myw3ICs3Myw4IEBACiB9CiAKIHN0cnVjdCBzZGhjaV9vZl9kYXRhIHNkaGNpX2VzZGhjID0gewotCS5xdWlya3MgPSBFU0RIQ19ERUZBVUxUX1FVSVJLUywKKwkvKiBjYXJkIGRldGVjdGlvbiBjb3VsZCBiZSBoYW5kbGVkIHZpYSBHUElPICovCisJLnF1aXJrcyA9IEVTREhDX0RFRkFVTFRfUVVJUktTIHwgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OLAogCS5vcHMgPSB7CiAJCS5yZWFkX2wgPSBzZGhjaV9iZTMyYnNfcmVhZGwsCiAJCS5yZWFkX3cgPSBlc2RoY19yZWFkdywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCmluZGV4IDBkYzkwNWIuLjJmOGQ0NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwpAQCAtNTQ3LDYgKzU0NywxNCBAQAogCX0sCiAKIAl7CisJCS52ZW5kb3IgICAgICAgICA9IFBDSV9WRU5ET1JfSURfUklDT0gsCisJCS5kZXZpY2UgICAgICAgICA9IDB4ZTgyMywKKwkJLnN1YnZlbmRvciAgICAgID0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZSAgICAgID0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhICAgID0gKGtlcm5lbF91bG9uZ190KSZzZGhjaV9yaWNvaF9tbWMsCisJfSwKKworCXsKIAkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0VORSwKIAkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0VORV9DQjcxMl9TRCwKIAkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCkBAIC05MDAsOSArOTA4LDYgQEAKIHsKIAlzdHJ1Y3Qgc2RoY2lfcGNpX3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7Ci0KLQlyZXNvdXJjZV9zaXplX3QgYWRkcjsKLQogCWludCByZXQ7CiAKIAlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSAmIElPUkVTT1VSQ0VfTUVNKSkgewpAQCAtOTQ5LDcgKzk1NCw2IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQlhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhcik7CiAJaG9zdC0+aW9hZGRyID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIGJhcik7CiAJaWYgKCFob3N0LT5pb2FkZHIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIHJlZ2lzdGVyc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwppbmRleCA1MzA5YWI5Li42OWUzZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKQEAgLTQ5OSw2ICs0OTksOSBAQAogCSAqIFNESENJIGJsb2NrLCBvciBhIG1pc3NpbmcgY29uZmlndXJhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHNldC4gKi8KIAlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfTk9fQlVTWV9JUlE7CiAKKwkvKiBUaGlzIGhvc3Qgc3VwcG9ydHMgdGhlIEF1dG8gQ01EMTIgKi8KKwlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfTVVMVElCTE9DS19SRUFEX0FDTUQxMjsKKwogCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfTk9ORSB8fAogCSAgICBwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfUEVSTUFORU5UKQogCQlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS10ZWdyYS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS10ZWdyYS5jCmluZGV4IDQ4MjNlZTkuLmY3ZTFmOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktdGVncmEuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXRlZ3JhLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCQlpZiAocmMpIHsKIAkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAogCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgd3AgZ3Bpb1xuIik7Ci0JCQlnb3RvIG91dF9jZDsKKwkJCWdvdG8gb3V0X2lycTsKIAkJfQogCQl0ZWdyYV9ncGlvX2VuYWJsZShwbGF0LT53cF9ncGlvKTsKIAkJZ3Bpb19kaXJlY3Rpb25faW5wdXQocGxhdC0+d3BfZ3Bpbyk7CkBAIC0xOTUsNiArMTk1LDkgQEAKIAkJZ3Bpb19mcmVlKHBsYXQtPndwX2dwaW8pOwogCX0KIAorb3V0X2lycToKKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5jZF9ncGlvKSkKKwkJZnJlZV9pcnEoZ3Bpb190b19pcnEocGxhdC0+Y2RfZ3BpbyksIGhvc3QpOwogb3V0X2NkOgogCWlmIChncGlvX2lzX3ZhbGlkKHBsYXQtPmNkX2dwaW8pKSB7CiAJCXRlZ3JhX2dwaW9fZGlzYWJsZShwbGF0LT5jZF9ncGlvKTsKQEAgLTIyNSw2ICsyMjgsNyBAQAogCX0KIAogCWlmIChncGlvX2lzX3ZhbGlkKHBsYXQtPmNkX2dwaW8pKSB7CisJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBsYXQtPmNkX2dwaW8pLCBob3N0KTsKIAkJdGVncmFfZ3Bpb19kaXNhYmxlKHBsYXQtPmNkX2dwaW8pOwogCQlncGlvX2ZyZWUocGxhdC0+Y2RfZ3Bpbyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zaF9tbWNpZi5jIGIvZHJpdmVycy9tbWMvaG9zdC9zaF9tbWNpZi5jCmluZGV4IDEyODg0YzIuLmFmOTcwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2hfbW1jaWYuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NoX21tY2lmLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCXN0cnVjdCBkbWFfY2hhbgkJKmNoYW5fcng7CiAJc3RydWN0IGRtYV9jaGFuCQkqY2hhbl90eDsKIAlzdHJ1Y3QgY29tcGxldGlvbglkbWFfY29tcGxldGU7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgZG1hX3NnbGVuOworCWJvb2wJCQlkbWFfYWN0aXZlOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNoX21tY2lmX2JpdHNldChzdHJ1Y3Qgc2hfbW1jaWZfaG9zdCAqaG9zdCwKQEAgLTE5NCwxMCArMTk0LDEyIEBACiAJCXJldHVybjsKIAogCWlmIChob3N0LT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCi0JCWRtYV91bm1hcF9zZygmaG9zdC0+cGQtPmRldiwgaG9zdC0+ZGF0YS0+c2csIGhvc3QtPmRtYV9zZ2xlbiwKKwkJZG1hX3VubWFwX3NnKGhvc3QtPmNoYW5fcngtPmRldmljZS0+ZGV2LAorCQkJICAgICBob3N0LT5kYXRhLT5zZywgaG9zdC0+ZGF0YS0+c2dfbGVuLAogCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCWVsc2UKLQkJZG1hX3VubWFwX3NnKCZob3N0LT5wZC0+ZGV2LCBob3N0LT5kYXRhLT5zZywgaG9zdC0+ZG1hX3NnbGVuLAorCQlkbWFfdW5tYXBfc2coaG9zdC0+Y2hhbl90eC0+ZGV2aWNlLT5kZXYsCisJCQkgICAgIGhvc3QtPmRhdGEtPnNnLCBob3N0LT5kYXRhLT5zZ19sZW4sCiAJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCiAJY29tcGxldGUoJmhvc3QtPmRtYV9jb21wbGV0ZSk7CkBAIC0yMTEsOSArMjEzLDEwIEBACiAJZG1hX2Nvb2tpZV90IGNvb2tpZSA9IC1FSU5WQUw7CiAJaW50IHJldDsKIAotCXJldCA9IGRtYV9tYXBfc2coJmhvc3QtPnBkLT5kZXYsIHNnLCBob3N0LT5kYXRhLT5zZ19sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJcmV0ID0gZG1hX21hcF9zZyhjaGFuLT5kZXZpY2UtPmRldiwgc2csIGhvc3QtPmRhdGEtPnNnX2xlbiwKKwkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCWlmIChyZXQgPiAwKSB7Ci0JCWhvc3QtPmRtYV9zZ2xlbiA9IHJldDsKKwkJaG9zdC0+ZG1hX2FjdGl2ZSA9IHRydWU7CiAJCWRlc2MgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGNoYW4sIHNnLCByZXQsCiAJCQlETUFfRlJPTV9ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7CiAJfQpAQCAtMjIxLDE0ICsyMjQsOSBAQAogCWlmIChkZXNjKSB7CiAJCWRlc2MtPmNhbGxiYWNrID0gbW1jaWZfZG1hX2NvbXBsZXRlOwogCQlkZXNjLT5jYWxsYmFja19wYXJhbSA9IGhvc3Q7Ci0JCWNvb2tpZSA9IGRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKLQkJaWYgKGNvb2tpZSA8IDApIHsKLQkJCWRlc2MgPSBOVUxMOwotCQkJcmV0ID0gY29va2llOwotCQl9IGVsc2UgewotCQkJc2hfbW1jaWZfYml0c2V0KGhvc3QsIE1NQ0lGX0NFX0JVRl9BQ0MsIEJVRl9BQ0NfRE1BUkVOKTsKLQkJCWNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcoY2hhbik7Ci0JCX0KKwkJY29va2llID0gZG1hZW5naW5lX3N1Ym1pdChkZXNjKTsKKwkJc2hfbW1jaWZfYml0c2V0KGhvc3QsIE1NQ0lGX0NFX0JVRl9BQ0MsIEJVRl9BQ0NfRE1BUkVOKTsKKwkJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoY2hhbik7CiAJfQogCWRldl9kYmcoJmhvc3QtPnBkLT5kZXYsICIlcygpOiBtYXBwZWQgJWQgLT4gJWQsIGNvb2tpZSAlZFxuIiwKIAkJX19mdW5jX18sIGhvc3QtPmRhdGEtPnNnX2xlbiwgcmV0LCBjb29raWUpOwpAQCAtMjM4LDcgKzIzNiw3IEBACiAJCWlmIChyZXQgPj0gMCkKIAkJCXJldCA9IC1FSU87CiAJCWhvc3QtPmNoYW5fcnggPSBOVUxMOwotCQlob3N0LT5kbWFfc2dsZW4gPSAwOworCQlob3N0LT5kbWFfYWN0aXZlID0gZmFsc2U7CiAJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hhbik7CiAJCS8qIEZyZWUgdGhlIFR4IGNoYW5uZWwgdG9vICovCiAJCWNoYW4gPSBob3N0LT5jaGFuX3R4OwpAQCAtMjYzLDkgKzI2MSwxMCBAQAogCWRtYV9jb29raWVfdCBjb29raWUgPSAtRUlOVkFMOwogCWludCByZXQ7CiAKLQlyZXQgPSBkbWFfbWFwX3NnKCZob3N0LT5wZC0+ZGV2LCBzZywgaG9zdC0+ZGF0YS0+c2dfbGVuLCBETUFfVE9fREVWSUNFKTsKKwlyZXQgPSBkbWFfbWFwX3NnKGNoYW4tPmRldmljZS0+ZGV2LCBzZywgaG9zdC0+ZGF0YS0+c2dfbGVuLAorCQkJIERNQV9UT19ERVZJQ0UpOwogCWlmIChyZXQgPiAwKSB7Ci0JCWhvc3QtPmRtYV9zZ2xlbiA9IHJldDsKKwkJaG9zdC0+ZG1hX2FjdGl2ZSA9IHRydWU7CiAJCWRlc2MgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGNoYW4sIHNnLCByZXQsCiAJCQlETUFfVE9fREVWSUNFLCBETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOwogCX0KQEAgLTI3MywxNCArMjcyLDkgQEAKIAlpZiAoZGVzYykgewogCQlkZXNjLT5jYWxsYmFjayA9IG1tY2lmX2RtYV9jb21wbGV0ZTsKIAkJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBob3N0OwotCQljb29raWUgPSBkZXNjLT50eF9zdWJtaXQoZGVzYyk7Ci0JCWlmIChjb29raWUgPCAwKSB7Ci0JCQlkZXNjID0gTlVMTDsKLQkJCXJldCA9IGNvb2tpZTsKLQkJfSBlbHNlIHsKLQkJCXNoX21tY2lmX2JpdHNldChob3N0LCBNTUNJRl9DRV9CVUZfQUNDLCBCVUZfQUNDX0RNQVdFTik7Ci0JCQljaGFuLT5kZXZpY2UtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwotCQl9CisJCWNvb2tpZSA9IGRtYWVuZ2luZV9zdWJtaXQoZGVzYyk7CisJCXNoX21tY2lmX2JpdHNldChob3N0LCBNTUNJRl9DRV9CVUZfQUNDLCBCVUZfQUNDX0RNQVdFTik7CisJCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGNoYW4pOwogCX0KIAlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiJXMoKTogbWFwcGVkICVkIC0+ICVkLCBjb29raWUgJWRcbiIsCiAJCV9fZnVuY19fLCBob3N0LT5kYXRhLT5zZ19sZW4sIHJldCwgY29va2llKTsKQEAgLTI5MCw3ICsyODQsNyBAQAogCQlpZiAocmV0ID49IDApCiAJCQlyZXQgPSAtRUlPOwogCQlob3N0LT5jaGFuX3R4ID0gTlVMTDsKLQkJaG9zdC0+ZG1hX3NnbGVuID0gMDsKKwkJaG9zdC0+ZG1hX2FjdGl2ZSA9IGZhbHNlOwogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOwogCQkvKiBGcmVlIHRoZSBSeCBjaGFubmVsIHRvbyAqLwogCQljaGFuID0gaG9zdC0+Y2hhbl9yeDsKQEAgLTMxNyw3ICszMTEsNyBAQAogc3RhdGljIHZvaWQgc2hfbW1jaWZfcmVxdWVzdF9kbWEoc3RydWN0IHNoX21tY2lmX2hvc3QgKmhvc3QsCiAJCQkJIHN0cnVjdCBzaF9tbWNpZl9wbGF0X2RhdGEgKnBkYXRhKQogewotCWhvc3QtPmRtYV9zZ2xlbiA9IDA7CisJaG9zdC0+ZG1hX2FjdGl2ZSA9IGZhbHNlOwogCiAJLyogV2UgY2FuIG9ubHkgZWl0aGVyIHVzZSBETUEgZm9yIGJvdGggVHggYW5kIFJ4IG9yIG5vdCB1c2UgaXQgYXQgYWxsICovCiAJaWYgKHBkYXRhLT5kbWEpIHsKQEAgLTM2NCw3ICszNTgsNyBAQAogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOwogCX0KIAotCWhvc3QtPmRtYV9zZ2xlbiA9IDA7CisJaG9zdC0+ZG1hX2FjdGl2ZSA9IGZhbHNlOwogfQogCiBzdGF0aWMgdm9pZCBzaF9tbWNpZl9jbG9ja19jb250cm9sKHN0cnVjdCBzaF9tbWNpZl9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgY2xrKQpAQCAtNzUzLDcgKzc0Nyw3IEBACiAJfQogCXNoX21tY2lmX2dldF9yZXNwb25zZShob3N0LCBjbWQpOwogCWlmIChob3N0LT5kYXRhKSB7Ci0JCWlmICghaG9zdC0+ZG1hX3NnbGVuKSB7CisJCWlmICghaG9zdC0+ZG1hX2FjdGl2ZSkgewogCQkJcmV0ID0gc2hfbW1jaWZfZGF0YV90cmFucyhob3N0LCBtcnEsIGNtZC0+b3Bjb2RlKTsKIAkJfSBlbHNlIHsKIAkJCWxvbmcgdGltZSA9CkBAIC03NjUsNyArNzU5LDcgQEAKIAkJCQlyZXQgPSB0aW1lOwogCQkJc2hfbW1jaWZfYml0Y2xyKGhvc3QsIE1NQ0lGX0NFX0JVRl9BQ0MsCiAJCQkJCUJVRl9BQ0NfRE1BUkVOIHwgQlVGX0FDQ19ETUFXRU4pOwotCQkJaG9zdC0+ZG1hX3NnbGVuID0gMDsKKwkJCWhvc3QtPmRtYV9hY3RpdmUgPSBmYWxzZTsKIAkJfQogCQlpZiAocmV0IDwgMCkKIAkJCW1ycS0+ZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsKQEAgLTg1MCwxNSArODQ0LDE1IEBACiAJc3RydWN0IHNoX21tY2lmX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXN0cnVjdCBzaF9tbWNpZl9wbGF0X2RhdGEgKnAgPSBob3N0LT5wZC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpIHsKLQkJLyogY2xvY2sgc3RvcCAqLwotCQlzaF9tbWNpZl9jbG9ja19jb250cm9sKGhvc3QsIDApOwotCQlpZiAocC0+ZG93bl9wd3IpCi0JCQlwLT5kb3duX3B3cihob3N0LT5wZCk7Ci0JCXJldHVybjsKLQl9IGVsc2UgaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfVVApIHsKKwlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9VUCkgewogCQlpZiAocC0+c2V0X3B3cikKIAkJCXAtPnNldF9wd3IoaG9zdC0+cGQsIGlvcy0+cG93ZXJfbW9kZSk7CisJfSBlbHNlIGlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRiB8fCAhaW9zLT5jbG9jaykgeworCQkvKiBjbG9jayBzdG9wICovCisJCXNoX21tY2lmX2Nsb2NrX2NvbnRyb2woaG9zdCwgMCk7CisJCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRiAmJiBwLT5kb3duX3B3cikKKwkJCXAtPmRvd25fcHdyKGhvc3QtPnBkKTsKKwkJcmV0dXJuOwogCX0KIAogCWlmIChpb3MtPmNsb2NrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCmluZGV4IGUzYzZlZjIuLmFjNTJlYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKQEAgLTE1Miw3ICsxNTIsNiBAQAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlkbWFfY29tcGxldGU7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CWRtYV9pc3N1ZTsKICNpZmRlZiBDT05GSUdfVE1JT19NTUNfRE1BCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgZG1hX3NnbGVuOwogCXU4CQkJYm91bmNlX2J1ZltQQUdFX0NBQ0hFX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoTUFYX0FMSUdOKSkpOwogCXN0cnVjdCBzY2F0dGVybGlzdAlib3VuY2Vfc2c7CiAjZW5kaWYKQEAgLTIyMCw0NCArMjE5LDQ4IEBACiAJcmV0dXJuIGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9CSU9fU1JDX0lSUSkgKyBzZy0+b2Zmc2V0OwogfQogCi1zdGF0aWMgdm9pZCB0bWlvX21tY19rdW5tYXBfYXRvbWljKHZvaWQgKnZpcnQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorc3RhdGljIHZvaWQgdG1pb19tbWNfa3VubWFwX2F0b21pYyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nICpmbGFncywgdm9pZCAqdmlydCkKIHsKLQlrdW5tYXBfYXRvbWljKHZpcnQsIEtNX0JJT19TUkNfSVJRKTsKKwlrdW5tYXBfYXRvbWljKHZpcnQgLSBzZy0+b2Zmc2V0LCBLTV9CSU9fU1JDX0lSUSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoKmZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKIAotI2RlZmluZSBTVEFUVVNfVE9fVEVYVChhKSBcCisjZGVmaW5lIFNUQVRVU19UT19URVhUKGEsIHN0YXR1cywgaSkgXAogCWRvIHsgXAotCQlpZiAoc3RhdHVzICYgVE1JT19TVEFUXyMjYSkgXAorCQlpZiAoc3RhdHVzICYgVE1JT19TVEFUXyMjYSkgeyBcCisJCQlpZiAoaSsrKSBcCisJCQkJcHJpbnRrKCIgfCAiKTsgXAogCQkJcHJpbnRrKCNhKTsgXAorCQl9IFwKIAl9IHdoaWxlICgwKQogCiB2b2lkIHByX2RlYnVnX3N0YXR1cyh1MzIgc3RhdHVzKQogeworCWludCBpID0gMDsKIAlwcmludGsoS0VSTl9ERUJVRyAic3RhdHVzOiAlMDh4ID0gIiwgc3RhdHVzKTsKLQlTVEFUVVNfVE9fVEVYVChDQVJEX1JFTU9WRSk7Ci0JU1RBVFVTX1RPX1RFWFQoQ0FSRF9JTlNFUlQpOwotCVNUQVRVU19UT19URVhUKFNJR1NUQVRFKTsKLQlTVEFUVVNfVE9fVEVYVChXUlBST1RFQ1QpOwotCVNUQVRVU19UT19URVhUKENBUkRfUkVNT1ZFX0EpOwotCVNUQVRVU19UT19URVhUKENBUkRfSU5TRVJUX0EpOwotCVNUQVRVU19UT19URVhUKFNJR1NUQVRFX0EpOwotCVNUQVRVU19UT19URVhUKENNRF9JRFhfRVJSKTsKLQlTVEFUVVNfVE9fVEVYVChTVE9QQklUX0VSUik7Ci0JU1RBVFVTX1RPX1RFWFQoSUxMX0ZVTkMpOwotCVNUQVRVU19UT19URVhUKENNRF9CVVNZKTsKLQlTVEFUVVNfVE9fVEVYVChDTURSRVNQRU5EKTsKLQlTVEFUVVNfVE9fVEVYVChEQVRBRU5EKTsKLQlTVEFUVVNfVE9fVEVYVChDUkNGQUlMKTsKLQlTVEFUVVNfVE9fVEVYVChEQVRBVElNRU9VVCk7Ci0JU1RBVFVTX1RPX1RFWFQoQ01EVElNRU9VVCk7Ci0JU1RBVFVTX1RPX1RFWFQoUlhPVkVSRkxPVyk7Ci0JU1RBVFVTX1RPX1RFWFQoVFhVTkRFUlJVTik7Ci0JU1RBVFVTX1RPX1RFWFQoUlhSRFkpOwotCVNUQVRVU19UT19URVhUKFRYUlEpOwotCVNUQVRVU19UT19URVhUKElMTF9BQ0NFU1MpOworCVNUQVRVU19UT19URVhUKENBUkRfUkVNT1ZFLCBzdGF0dXMsIGkpOworCVNUQVRVU19UT19URVhUKENBUkRfSU5TRVJULCBzdGF0dXMsIGkpOworCVNUQVRVU19UT19URVhUKFNJR1NUQVRFLCBzdGF0dXMsIGkpOworCVNUQVRVU19UT19URVhUKFdSUFJPVEVDVCwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChDQVJEX1JFTU9WRV9BLCBzdGF0dXMsIGkpOworCVNUQVRVU19UT19URVhUKENBUkRfSU5TRVJUX0EsIHN0YXR1cywgaSk7CisJU1RBVFVTX1RPX1RFWFQoU0lHU1RBVEVfQSwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChDTURfSURYX0VSUiwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChTVE9QQklUX0VSUiwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChJTExfRlVOQywgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChDTURfQlVTWSwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChDTURSRVNQRU5ELCBzdGF0dXMsIGkpOworCVNUQVRVU19UT19URVhUKERBVEFFTkQsIHN0YXR1cywgaSk7CisJU1RBVFVTX1RPX1RFWFQoQ1JDRkFJTCwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChEQVRBVElNRU9VVCwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChDTURUSU1FT1VULCBzdGF0dXMsIGkpOworCVNUQVRVU19UT19URVhUKFJYT1ZFUkZMT1csIHN0YXR1cywgaSk7CisJU1RBVFVTX1RPX1RFWFQoVFhVTkRFUlJVTiwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChSWFJEWSwgc3RhdHVzLCBpKTsKKwlTVEFUVVNfVE9fVEVYVChUWFJRLCBzdGF0dXMsIGkpOworCVNUQVRVU19UT19URVhUKElMTF9BQ0NFU1MsIHN0YXR1cywgaSk7CiAJcHJpbnRrKCJcbiIpOwogfQogCkBAIC01MDcsNyArNTEwLDcgQEAKIAogCWhvc3QtPnNnX29mZiArPSBjb3VudDsKIAotCXRtaW9fbW1jX2t1bm1hcF9hdG9taWMoc2dfdmlydCwgJmZsYWdzKTsKKwl0bWlvX21tY19rdW5tYXBfYXRvbWljKGhvc3QtPnNnX3B0ciwgJmZsYWdzLCBzZ192aXJ0KTsKIAogCWlmIChob3N0LT5zZ19vZmYgPT0gaG9zdC0+c2dfcHRyLT5sZW5ndGgpCiAJCXRtaW9fbW1jX25leHRfc2coaG9zdCk7CkBAIC03NjcsNyArNzcwLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdm9pZCAqc2dfdmFkZHIgPSB0bWlvX21tY19rbWFwX2F0b21pYyhob3N0LT5zZ19vcmlnLCAmZmxhZ3MpOwogCQltZW1jcHkoc2dfdmFkZHIsIGhvc3QtPmJvdW5jZV9idWYsIGhvc3QtPmJvdW5jZV9zZy5sZW5ndGgpOwotCQl0bWlvX21tY19rdW5tYXBfYXRvbWljKHNnX3ZhZGRyLCAmZmxhZ3MpOworCQl0bWlvX21tY19rdW5tYXBfYXRvbWljKGhvc3QtPnNnX29yaWcsICZmbGFncywgc2dfdmFkZHIpOwogCX0KIH0KIApAQCAtODI1LDIzICs4MjgsMTYgQEAKIAkJc2cgPSBob3N0LT5zZ19wdHI7CiAJfQogCi0JcmV0ID0gZG1hX21hcF9zZygmaG9zdC0+cGRldi0+ZGV2LCBzZywgaG9zdC0+c2dfbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCWlmIChyZXQgPiAwKSB7Ci0JCWhvc3QtPmRtYV9zZ2xlbiA9IHJldDsKKwlyZXQgPSBkbWFfbWFwX3NnKGNoYW4tPmRldmljZS0+ZGV2LCBzZywgaG9zdC0+c2dfbGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChyZXQgPiAwKQogCQlkZXNjID0gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhjaGFuLCBzZywgcmV0LAogCQkJRE1BX0ZST01fREVWSUNFLCBETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOwotCX0KIAogCWlmIChkZXNjKSB7CiAJCWRlc2MtPmNhbGxiYWNrID0gdG1pb19kbWFfY29tcGxldGU7CiAJCWRlc2MtPmNhbGxiYWNrX3BhcmFtID0gaG9zdDsKLQkJY29va2llID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOwotCQlpZiAoY29va2llIDwgMCkgewotCQkJZGVzYyA9IE5VTEw7Ci0JCQlyZXQgPSBjb29raWU7Ci0JCX0gZWxzZSB7Ci0JCQljaGFuLT5kZXZpY2UtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwotCQl9CisJCWNvb2tpZSA9IGRtYWVuZ2luZV9zdWJtaXQoZGVzYyk7CisJCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGNoYW4pOwogCX0KIAlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICIlcygpOiBtYXBwZWQgJWQgLT4gJWQsIGNvb2tpZSAlZCwgcnEgJXBcbiIsCiAJCV9fZnVuY19fLCBob3N0LT5zZ19sZW4sIHJldCwgY29va2llLCBob3N0LT5tcnEpOwpAQCAtOTAxLDI2ICs4OTcsMjAgQEAKIAkJdm9pZCAqc2dfdmFkZHIgPSB0bWlvX21tY19rbWFwX2F0b21pYyhzZywgJmZsYWdzKTsKIAkJc2dfaW5pdF9vbmUoJmhvc3QtPmJvdW5jZV9zZywgaG9zdC0+Ym91bmNlX2J1Ziwgc2ctPmxlbmd0aCk7CiAJCW1lbWNweShob3N0LT5ib3VuY2VfYnVmLCBzZ192YWRkciwgaG9zdC0+Ym91bmNlX3NnLmxlbmd0aCk7Ci0JCXRtaW9fbW1jX2t1bm1hcF9hdG9taWMoc2dfdmFkZHIsICZmbGFncyk7CisJCXRtaW9fbW1jX2t1bm1hcF9hdG9taWMoc2csICZmbGFncywgc2dfdmFkZHIpOwogCQlob3N0LT5zZ19wdHIgPSAmaG9zdC0+Ym91bmNlX3NnOwogCQlzZyA9IGhvc3QtPnNnX3B0cjsKIAl9CiAKLQlyZXQgPSBkbWFfbWFwX3NnKCZob3N0LT5wZGV2LT5kZXYsIHNnLCBob3N0LT5zZ19sZW4sIERNQV9UT19ERVZJQ0UpOwotCWlmIChyZXQgPiAwKSB7Ci0JCWhvc3QtPmRtYV9zZ2xlbiA9IHJldDsKKwlyZXQgPSBkbWFfbWFwX3NnKGNoYW4tPmRldmljZS0+ZGV2LCBzZywgaG9zdC0+c2dfbGVuLCBETUFfVE9fREVWSUNFKTsKKwlpZiAocmV0ID4gMCkKIAkJZGVzYyA9IGNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coY2hhbiwgc2csIHJldCwKIAkJCURNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7Ci0JfQogCiAJaWYgKGRlc2MpIHsKIAkJZGVzYy0+Y2FsbGJhY2sgPSB0bWlvX2RtYV9jb21wbGV0ZTsKIAkJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBob3N0OwotCQljb29raWUgPSBkZXNjLT50eF9zdWJtaXQoZGVzYyk7Ci0JCWlmIChjb29raWUgPCAwKSB7Ci0JCQlkZXNjID0gTlVMTDsKLQkJCXJldCA9IGNvb2tpZTsKLQkJfQorCQljb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRlc2MpOwogCX0KIAlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICIlcygpOiBtYXBwZWQgJWQgLT4gJWQsIGNvb2tpZSAlZCwgcnEgJXBcbiIsCiAJCV9fZnVuY19fLCBob3N0LT5zZ19sZW4sIHJldCwgY29va2llLCBob3N0LT5tcnEpOwpAQCAtOTY0LDcgKzk1NCw3IEBACiAJc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QgPSAoc3RydWN0IHRtaW9fbW1jX2hvc3QgKilwcml2OwogCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGhvc3QtPmNoYW5fdHg7CiAKLQljaGFuLT5kZXZpY2UtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGNoYW4pOwogfQogCiBzdGF0aWMgdm9pZCB0bWlvX3Rhc2tsZXRfZm4odW5zaWduZWQgbG9uZyBhcmcpCkBAIC05NzgsMTAgKzk2OCwxMiBAQAogCQlnb3RvIG91dDsKIAogCWlmIChob3N0LT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCi0JCWRtYV91bm1hcF9zZygmaG9zdC0+cGRldi0+ZGV2LCBob3N0LT5zZ19wdHIsIGhvc3QtPmRtYV9zZ2xlbiwKKwkJZG1hX3VubWFwX3NnKGhvc3QtPmNoYW5fcngtPmRldmljZS0+ZGV2LAorCQkJICAgICBob3N0LT5zZ19wdHIsIGhvc3QtPnNnX2xlbiwKIAkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKIAllbHNlCi0JCWRtYV91bm1hcF9zZygmaG9zdC0+cGRldi0+ZGV2LCBob3N0LT5zZ19wdHIsIGhvc3QtPmRtYV9zZ2xlbiwKKwkJZG1hX3VubWFwX3NnKGhvc3QtPmNoYW5fdHgtPmRldmljZS0+ZGV2LAorCQkJICAgICBob3N0LT5zZ19wdHIsIGhvc3QtPnNnX2xlbiwKIAkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAKIAl0bWlvX21tY19kb19kYXRhX2lycShob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdmlhLXNkbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L3ZpYS1zZG1tYy5jCmluZGV4IDllZDg0ZGQuLjhjNWI0ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdmlhLXNkbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC92aWEtc2RtbWMuYwpAQCAtODAyLDEyICs4MDIsOSBAQAogCiBzdGF0aWMgdm9pZCB2aWFfcmVzZXRfcGNpY3RybChzdHJ1Y3QgdmlhX2NyZHJfbW1jX2hvc3QgKmhvc3QpCiB7Ci0Jdm9pZCBfX2lvbWVtICphZGRyYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGdhdHQ7CiAKLQlhZGRyYmFzZSA9IGhvc3QtPnBjaWN0cmxfbW1pb2Jhc2U7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJdmlhX3NhdmVfcGNpY3RybHJlZyhob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCBjODk1OTIyLi40ZjZjMDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC0xMDYsMjMgKzEwNiw2IEBACiAJaGVscAogICAgICAgICAgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gVGV4YXMgSW5zdHJ1bWVudHMgT01BUDIgYW5kIE9NQVAzIHBsYXRmb3Jtcy4KIAotY29uZmlnIE1URF9OQU5EX09NQVBfUFJFRkVUQ0gKLQlib29sICJHUE1DIHByZWZldGNoIHN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggZGV2aWNlIgotCWRlcGVuZHMgb24gTVREX05BTkRfT01BUDIKLQlkZWZhdWx0IHkKLQloZWxwCi0JIFRoZSBOQU5EIGRldmljZSBjYW4gYmUgYWNjZXNzZWQgZm9yIFJlYWQvV3JpdGUgdXNpbmcgR1BNQyBQUkVGRVRDSCBlbmdpbmUKLQkgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UuCi0KLWNvbmZpZyBNVERfTkFORF9PTUFQX1BSRUZFVENIX0RNQQotCWRlcGVuZHMgb24gTVREX05BTkRfT01BUF9QUkVGRVRDSAotCWJvb2wgIkRNQSBtb2RlIgotCWRlZmF1bHQgbgotCWhlbHAKLQkgVGhlIEdQTUMgUFJFRkVUQ0ggZW5naW5lIGNhbiBiZSBjb25maWd1cmVkIGVpZ3RoZXIgaW4gTVBVIGludGVycnVwdCBtb2RlCi0JIG9yIGluIERNQSBpbnRlcnJ1cHQgbW9kZS4KLQkgU2F5IHkgZm9yIERNQSBtb2RlIG9yIE1QVSBtb2RlIHdpbGwgYmUgdXNlZAotCiBjb25maWcgTVREX05BTkRfSURTCiAJdHJpc3RhdGUKIApAQCAtNDc2LDcgKzQ1OSw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9NWEMKIAl0cmlzdGF0ZSAiTVhDIE5BTkQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfTVgyIHx8IEFSQ0hfTVgyNSB8fCBBUkNIX01YMyB8fCBBUkNIX01YNTEKKwlkZXBlbmRzIG9uIElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgb24gdGhlCiAJICBNWEMgcHJvY2Vzc29ycy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwppbmRleCBlZjkzMmJhLi41YWUxZDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCkBAIC03MjIsOSArNzIyLDggQEAKIAkJLyoKIAkJICogTVhDIE5BTkRGQyBjYW4gb25seSBwZXJmb3JtIGZ1bGwgcGFnZStzcGFyZSBvcgogCQkgKiBzcGFyZS1vbmx5IHJlYWQvd3JpdGUuICBXaGVuIHRoZSB1cHBlciBsYXllcnMKLQkJICogbGF5ZXJzIHBlcmZvcm0gYSByZWFkL3dyaXRlIGJ1ZiBvcGVyYXRpb24sCi0JCSAqIHdlIHdpbGwgdXNlZCB0aGUgc2F2ZWQgY29sdW1uIGFkZHJlc3MgdG8gaW5kZXggaW50bwotCQkgKiB0aGUgZnVsbCBwYWdlLgorCQkgKiBwZXJmb3JtIGEgcmVhZC93cml0ZSBidWYgb3BlcmF0aW9uLCB0aGUgc2F2ZWQgY29sdW1uCisJCSAgKiBhZGRyZXNzIGlzIHVzZWQgdG8gaW5kZXggaW50byB0aGUgZnVsbCBwYWdlLgogCQkgKi8KIAkJaG9zdC0+c2VuZF9hZGRyKGhvc3QsIDAsIHBhZ2VfYWRkciA9PSAtMSk7CiAJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL25hbmQvb21hcDIuYwppbmRleCAyOGFmNzFjLi43YjhmMWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL29tYXAyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9vbWFwMi5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KQEAgLTI0LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxwbGF0L25hbmQuaD4KIAogI2RlZmluZQlEUklWRVJfTkFNRQkib21hcDItbmFuZCIKKyNkZWZpbmUJT01BUF9OQU5EX1RJTUVPVVRfTVMJNTAwMAogCiAjZGVmaW5lIE5BTkRfRWNjX1AxZQkJKDEgPDwgMCkKICNkZWZpbmUgTkFORF9FY2NfUDJlCQkoMSA8PCAxKQpAQCAtOTYsMjYgKzk4LDE5IEBACiBzdGF0aWMgY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTVREX05BTkRfT01BUF9QUkVGRVRDSAotc3RhdGljIGludCB1c2VfcHJlZmV0Y2ggPSAxOworLyogb29iIGluZm8gZ2VuZXJhdGVkIHJ1bnRpbWUgZGVwZW5kaW5nIG9uIGVjYyBhbGdvcml0aG0gYW5kIGxheW91dCBzZWxlY3RlZCAqLworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBvbWFwX29vYmluZm87CisvKiBEZWZpbmUgc29tZSBnZW5lcmljIGJhZCAvIGdvb2QgYmxvY2sgc2NhbiBwYXR0ZXJuIHdoaWNoIGFyZSB1c2VkCisgKiB3aGlsZSBzY2FubmluZyBhIGRldmljZSBmb3IgZmFjdG9yeSBtYXJrZWQgZ29vZCAvIGJhZCBibG9ja3MKKyAqLworc3RhdGljIHVpbnQ4X3Qgc2Nhbl9mZl9wYXR0ZXJuW10gPSB7IDB4ZmYgfTsKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgYmJfZGVzY3JpcF9mbGFzaGJhc2VkID0geworCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTkVNUFRZIHwgTkFORF9CQlRfU0NBTkFMTFBBR0VTLAorCS5vZmZzID0gMCwKKwkubGVuID0gMSwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybiwKK307CiAKLS8qICJtb2Rwcm9iZSAuLi4gdXNlX3ByZWZldGNoPTAiIGV0YyAqLwotbW9kdWxlX3BhcmFtKHVzZV9wcmVmZXRjaCwgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9wcmVmZXRjaCwgImVuYWJsZS9kaXNhYmxlIHVzZSBvZiBQUkVGRVRDSCIpOwotCi0jaWZkZWYgQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0hfRE1BCi1zdGF0aWMgaW50IHVzZV9kbWEgPSAxOwotCi0vKiAibW9kcHJvYmUgLi4uIHVzZV9kbWE9MCIgZXRjICovCi1tb2R1bGVfcGFyYW0odXNlX2RtYSwgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9kbWEsICJlbmFibGUvZGlzYWJsZSB1c2Ugb2YgRE1BIik7Ci0jZWxzZQotc3RhdGljIGNvbnN0IGludCB1c2VfZG1hOwotI2VuZGlmCi0jZWxzZQotY29uc3QgaW50IHVzZV9wcmVmZXRjaDsKLXN0YXRpYyBjb25zdCBpbnQgdXNlX2RtYTsKLSNlbmRpZgogCiBzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gewogCXN0cnVjdCBuYW5kX2h3X2NvbnRyb2wJCWNvbnRyb2xsZXI7CkBAIC0xMjksNiArMTI0LDEzIEBACiAJdW5zaWduZWQgbG9uZwkJCXBoeXNfYmFzZTsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJY29tcDsKIAlpbnQJCQkJZG1hX2NoOworCWludAkJCQlncG1jX2lycTsKKwllbnVtIHsKKwkJT01BUF9OQU5EX0lPX1JFQUQgPSAwLAkvKiByZWFkICovCisJCU9NQVBfTkFORF9JT19XUklURSwJLyogd3JpdGUgKi8KKwl9IGlvbW9kZTsKKwl1X2NoYXIJCQkJKmJ1ZjsKKwlpbnQJCQkJCWJ1Zl9sZW47CiB9OwogCiAvKioKQEAgLTI1Niw3ICsyNTgsOCBAQAogCX0KIAogCS8qIGNvbmZpZ3VyZSBhbmQgc3RhcnQgcHJlZmV0Y2ggdHJhbnNmZXIgKi8KLQlyZXQgPSBncG1jX3ByZWZldGNoX2VuYWJsZShpbmZvLT5ncG1jX2NzLCAweDAsIGxlbiwgMHgwKTsKKwlyZXQgPSBncG1jX3ByZWZldGNoX2VuYWJsZShpbmZvLT5ncG1jX2NzLAorCQkJUFJFRkVUQ0hfRklGT1RIUkVTSE9MRF9NQVgsIDB4MCwgbGVuLCAweDApOwogCWlmIChyZXQpIHsKIAkJLyogUEZQVyBlbmdpbmUgaXMgYnVzeSwgdXNlIGNwdSBjb3B5IG1ldGhvZCAqLwogCQlpZiAoaW5mby0+bmFuZC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKQEAgLTI4OCw5ICsyOTEsMTAgQEAKIHsKIAlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLAogCQkJCQkJc3RydWN0IG9tYXBfbmFuZF9pbmZvLCBtdGQpOwotCXVpbnQzMl90IHByZWZfY291bnQgPSAwLCB3X2NvdW50ID0gMDsKKwl1aW50MzJfdCB3X2NvdW50ID0gMDsKIAlpbnQgaSA9IDAsIHJldCA9IDA7CiAJdTE2ICpwOworCXVuc2lnbmVkIGxvbmcgdGltLCBsaW1pdDsKIAogCS8qIHRha2UgY2FyZSBvZiBzdWJwYWdlIHdyaXRlcyAqLwogCWlmIChsZW4gJSAyICE9IDApIHsKQEAgLTMwMCw3ICszMDQsOCBAQAogCX0KIAogCS8qICBjb25maWd1cmUgYW5kIHN0YXJ0IHByZWZldGNoIHRyYW5zZmVyICovCi0JcmV0ID0gZ3BtY19wcmVmZXRjaF9lbmFibGUoaW5mby0+Z3BtY19jcywgMHgwLCBsZW4sIDB4MSk7CisJcmV0ID0gZ3BtY19wcmVmZXRjaF9lbmFibGUoaW5mby0+Z3BtY19jcywKKwkJCVBSRUZFVENIX0ZJRk9USFJFU0hPTERfTUFYLCAweDAsIGxlbiwgMHgxKTsKIAlpZiAocmV0KSB7CiAJCS8qIFBGUFcgZW5naW5lIGlzIGJ1c3ksIHVzZSBjcHUgY29weSBtZXRob2QgKi8KIAkJaWYgKGluZm8tPm5hbmQub3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCkBAIC0zMTYsMTUgKzMyMSwxNyBAQAogCQkJCWlvd3JpdGUxNigqcCsrLCBpbmZvLT5uYW5kLklPX0FERFJfVyk7CiAJCX0KIAkJLyogd2FpdCBmb3IgZGF0YSB0byBmbHVzaGVkLW91dCBiZWZvcmUgcmVzZXQgdGhlIHByZWZldGNoICovCi0JCWRvIHsKLQkJCXByZWZfY291bnQgPSBncG1jX3JlYWRfc3RhdHVzKEdQTUNfUFJFRkVUQ0hfQ09VTlQpOwotCQl9IHdoaWxlIChwcmVmX2NvdW50KTsKKwkJdGltID0gMDsKKwkJbGltaXQgPSAobG9vcHNfcGVyX2ppZmZ5ICoKKwkJCQkJbXNlY3NfdG9famlmZmllcyhPTUFQX05BTkRfVElNRU9VVF9NUykpOworCQl3aGlsZSAoZ3BtY19yZWFkX3N0YXR1cyhHUE1DX1BSRUZFVENIX0NPVU5UKSAmJiAodGltKysgPCBsaW1pdCkpCisJCQljcHVfcmVsYXgoKTsKKwogCQkvKiBkaXNhYmxlIGFuZCBzdG9wIHRoZSBQRlBXIGVuZ2luZSAqLwogCQlncG1jX3ByZWZldGNoX3Jlc2V0KGluZm8tPmdwbWNfY3MpOwogCX0KIH0KIAotI2lmZGVmIENPTkZJR19NVERfTkFORF9PTUFQX1BSRUZFVENIX0RNQQogLyoKICAqIG9tYXBfbmFuZF9kbWFfY2I6IGNhbGxiYWNrIG9uIHRoZSBjb21wbGV0aW9uIG9mIGRtYSB0cmFuc2ZlcgogICogQGxjaDogbG9naWNhbCBjaGFubmVsCkBAIC0zNDgsMTQgKzM1NSwxNSBAQAogewogCXN0cnVjdCBvbWFwX25hbmRfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihtdGQsCiAJCQkJCXN0cnVjdCBvbWFwX25hbmRfaW5mbywgbXRkKTsKLQl1aW50MzJfdCBwcmVmZXRjaF9zdGF0dXMgPSAwOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IGlzX3dyaXRlID8gRE1BX1RPX0RFVklDRSA6CiAJCQkJCQkJRE1BX0ZST01fREVWSUNFOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHRpbSwgbGltaXQ7CiAKLQkvKiBUaGUgZmlmbyBkZXB0aCBpcyA2NCBieXRlcy4gV2UgaGF2ZSBhIHN5bmMgYXQgZWFjaCBmcmFtZSBhbmQgZnJhbWUKLQkgKiBsZW5ndGggaXMgNjQgYnl0ZXMuCisJLyogVGhlIGZpZm8gZGVwdGggaXMgNjQgYnl0ZXMgbWF4LgorCSAqIEJ1dCBjb25maWd1cmUgdGhlIEZJRk8tdGhyZWFob2xkIHRvIDMyIHRvIGdldCBhIHN5bmMgYXQgZWFjaCBmcmFtZQorCSAqIGFuZCBmcmFtZSBsZW5ndGggaXMgMzIgYnl0ZXMuCiAJICovCiAJaW50IGJ1Zl9sZW4gPSBsZW4gPj4gNjsKIApAQCAtMzk2LDkgKzQwNCwxMCBAQAogCQkJCQlPTUFQMjRYWF9ETUFfR1BNQywgT01BUF9ETUFfU1JDX1NZTkMpOwogCX0KIAkvKiAgY29uZmlndXJlIGFuZCBzdGFydCBwcmVmZXRjaCB0cmFuc2ZlciAqLwotCXJldCA9IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGluZm8tPmdwbWNfY3MsIDB4MSwgbGVuLCBpc193cml0ZSk7CisJcmV0ID0gZ3BtY19wcmVmZXRjaF9lbmFibGUoaW5mby0+Z3BtY19jcywKKwkJCVBSRUZFVENIX0ZJRk9USFJFU0hPTERfTUFYLCAweDEsIGxlbiwgaXNfd3JpdGUpOwogCWlmIChyZXQpCi0JCS8qIFBGUFcgZW5naW5lIGlzIGJ1c3ksIHVzZSBjcHUgY29weSBtZXRob2RlICovCisJCS8qIFBGUFcgZW5naW5lIGlzIGJ1c3ksIHVzZSBjcHUgY29weSBtZXRob2QgKi8KIAkJZ290byBvdXRfY29weTsKIAogCWluaXRfY29tcGxldGlvbigmaW5mby0+Y29tcCk7CkBAIC00MDcsMTAgKzQxNiwxMSBAQAogCiAJLyogc2V0dXAgYW5kIHN0YXJ0IERNQSB1c2luZyBkbWFfYWRkciAqLwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmluZm8tPmNvbXApOworCXRpbSA9IDA7CisJbGltaXQgPSAobG9vcHNfcGVyX2ppZmZ5ICogbXNlY3NfdG9famlmZmllcyhPTUFQX05BTkRfVElNRU9VVF9NUykpOworCXdoaWxlIChncG1jX3JlYWRfc3RhdHVzKEdQTUNfUFJFRkVUQ0hfQ09VTlQpICYmICh0aW0rKyA8IGxpbWl0KSkKKwkJY3B1X3JlbGF4KCk7CiAKLQlkbyB7Ci0JCXByZWZldGNoX3N0YXR1cyA9IGdwbWNfcmVhZF9zdGF0dXMoR1BNQ19QUkVGRVRDSF9DT1VOVCk7Ci0JfSB3aGlsZSAocHJlZmV0Y2hfc3RhdHVzKTsKIAkvKiBkaXNhYmxlIGFuZCBzdG9wIHRoZSBQRlBXIGVuZ2luZSAqLwogCWdwbWNfcHJlZmV0Y2hfcmVzZXQoaW5mby0+Z3BtY19jcyk7CiAKQEAgLTQyNiwxNCArNDM2LDYgQEAKIAkJCTogb21hcF93cml0ZV9idWY4KG10ZCwgKHVfY2hhciAqKSBhZGRyLCBsZW4pOwogCXJldHVybiAwOwogfQotI2Vsc2UKLXN0YXRpYyB2b2lkIG9tYXBfbmFuZF9kbWFfY2IoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkge30KLXN0YXRpYyBpbmxpbmUgaW50IG9tYXBfbmFuZF9kbWFfdHJhbnNmZXIoc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQgKmFkZHIsCi0JCQkJCXVuc2lnbmVkIGludCBsZW4sIGludCBpc193cml0ZSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgogCiAvKioKICAqIG9tYXBfcmVhZF9idWZfZG1hX3ByZWYgLSByZWFkIGRhdGEgZnJvbSBOQU5EIGNvbnRyb2xsZXIgaW50byBidWZmZXIKQEAgLTQ2Niw2ICs0NjgsMTU3IEBACiAJCW9tYXBfbmFuZF9kbWFfdHJhbnNmZXIobXRkLCAodV9jaGFyICopIGJ1ZiwgbGVuLCAweDEpOwogfQogCisvKgorICogb21hcF9uYW5kX2lycSAtIEdNUEMgaXJxIGhhbmRsZXIKKyAqIEB0aGlzX2lycTogZ3BtYyBpcnEgbnVtYmVyCisgKiBAZGV2OiBvbWFwX25hbmRfaW5mbyBzdHJ1Y3R1cmUgcG9pbnRlciBpcyBwYXNzZWQgaGVyZQorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9uYW5kX2lycShpbnQgdGhpc19pcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSAoc3RydWN0IG9tYXBfbmFuZF9pbmZvICopIGRldjsKKwl1MzIgYnl0ZXM7CisJdTMyIGlycV9zdGF0OworCisJaXJxX3N0YXQgPSBncG1jX3JlYWRfc3RhdHVzKEdQTUNfR0VUX0lSUV9TVEFUVVMpOworCWJ5dGVzID0gZ3BtY19yZWFkX3N0YXR1cyhHUE1DX1BSRUZFVENIX0ZJRk9fQ05UKTsKKwlieXRlcyA9IGJ5dGVzICAmIDB4RkZGQzsgLyogaW8gaW4gbXVsdGlwbGUgb2YgNCBieXRlcyAqLworCWlmIChpbmZvLT5pb21vZGUgPT0gT01BUF9OQU5EX0lPX1dSSVRFKSB7IC8qIGNoZWNrcyBmb3Igd3JpdGUgaW8gKi8KKwkJaWYgKGlycV9zdGF0ICYgMHgyKQorCQkJZ290byBkb25lOworCisJCWlmIChpbmZvLT5idWZfbGVuICYmIChpbmZvLT5idWZfbGVuIDwgYnl0ZXMpKQorCQkJYnl0ZXMgPSBpbmZvLT5idWZfbGVuOworCQllbHNlIGlmICghaW5mby0+YnVmX2xlbikKKwkJCWJ5dGVzID0gMDsKKwkJaW93cml0ZTMyX3JlcChpbmZvLT5uYW5kLklPX0FERFJfVywKKwkJCQkJCSh1MzIgKilpbmZvLT5idWYsIGJ5dGVzID4+IDIpOworCQlpbmZvLT5idWYgPSBpbmZvLT5idWYgKyBieXRlczsKKwkJaW5mby0+YnVmX2xlbiAtPSBieXRlczsKKworCX0gZWxzZSB7CisJCWlvcmVhZDMyX3JlcChpbmZvLT5uYW5kLklPX0FERFJfUiwKKwkJCQkJCSh1MzIgKilpbmZvLT5idWYsIGJ5dGVzID4+IDIpOworCQlpbmZvLT5idWYgPSBpbmZvLT5idWYgKyBieXRlczsKKworCQlpZiAoaXJxX3N0YXQgJiAweDIpCisJCQlnb3RvIGRvbmU7CisJfQorCWdwbWNfY3NfY29uZmlndXJlKGluZm8tPmdwbWNfY3MsIEdQTUNfU0VUX0lSUV9TVEFUVVMsIGlycV9zdGF0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKKworZG9uZToKKwljb21wbGV0ZSgmaW5mby0+Y29tcCk7CisJLyogZGlzYWJsZSBpcnEgKi8KKwlncG1jX2NzX2NvbmZpZ3VyZShpbmZvLT5ncG1jX2NzLCBHUE1DX0VOQUJMRV9JUlEsIDApOworCisJLyogY2xlYXIgc3RhdHVzICovCisJZ3BtY19jc19jb25maWd1cmUoaW5mby0+Z3BtY19jcywgR1BNQ19TRVRfSVJRX1NUQVRVUywgaXJxX3N0YXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogb21hcF9yZWFkX2J1Zl9pcnFfcHJlZiAtIHJlYWQgZGF0YSBmcm9tIE5BTkQgY29udHJvbGxlciBpbnRvIGJ1ZmZlcgorICogQG10ZDogTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBidWY6IGJ1ZmZlciB0byBzdG9yZSBkYXRlCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICovCitzdGF0aWMgdm9pZCBvbWFwX3JlYWRfYnVmX2lycV9wcmVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLAorCQkJCQkJc3RydWN0IG9tYXBfbmFuZF9pbmZvLCBtdGQpOworCWludCByZXQgPSAwOworCisJaWYgKGxlbiA8PSBtdGQtPm9vYnNpemUpIHsKKwkJb21hcF9yZWFkX2J1Zl9wcmVmKG10ZCwgYnVmLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJaW5mby0+aW9tb2RlID0gT01BUF9OQU5EX0lPX1JFQUQ7CisJaW5mby0+YnVmID0gYnVmOworCWluaXRfY29tcGxldGlvbigmaW5mby0+Y29tcCk7CisKKwkvKiAgY29uZmlndXJlIGFuZCBzdGFydCBwcmVmZXRjaCB0cmFuc2ZlciAqLworCXJldCA9IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGluZm8tPmdwbWNfY3MsCisJCQlQUkVGRVRDSF9GSUZPVEhSRVNIT0xEX01BWC8yLCAweDAsIGxlbiwgMHgwKTsKKwlpZiAocmV0KQorCQkvKiBQRlBXIGVuZ2luZSBpcyBidXN5LCB1c2UgY3B1IGNvcHkgbWV0aG9kICovCisJCWdvdG8gb3V0X2NvcHk7CisKKwlpbmZvLT5idWZfbGVuID0gbGVuOworCS8qIGVuYWJsZSBpcnEgKi8KKwlncG1jX2NzX2NvbmZpZ3VyZShpbmZvLT5ncG1jX2NzLCBHUE1DX0VOQUJMRV9JUlEsCisJCShHUE1DX0lSUV9GSUZPRVZFTlRFTkFCTEUgfCBHUE1DX0lSUV9DT1VOVF9FVkVOVCkpOworCisJLyogd2FpdGluZyBmb3IgcmVhZCB0byBjb21wbGV0ZSAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmluZm8tPmNvbXApOworCisJLyogZGlzYWJsZSBhbmQgc3RvcCB0aGUgUEZQVyBlbmdpbmUgKi8KKwlncG1jX3ByZWZldGNoX3Jlc2V0KGluZm8tPmdwbWNfY3MpOworCXJldHVybjsKKworb3V0X2NvcHk6CisJaWYgKGluZm8tPm5hbmQub3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCW9tYXBfcmVhZF9idWYxNihtdGQsIGJ1ZiwgbGVuKTsKKwllbHNlCisJCW9tYXBfcmVhZF9idWY4KG10ZCwgYnVmLCBsZW4pOworfQorCisvKgorICogb21hcF93cml0ZV9idWZfaXJxX3ByZWYgLSB3cml0ZSBidWZmZXIgdG8gTkFORCBjb250cm9sbGVyCisgKiBAbXRkOiBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGJ1ZjogZGF0YSBidWZmZXIKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICovCitzdGF0aWMgdm9pZCBvbWFwX3dyaXRlX2J1Zl9pcnFfcHJlZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG9tYXBfbmFuZF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKG10ZCwKKwkJCQkJCXN0cnVjdCBvbWFwX25hbmRfaW5mbywgbXRkKTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbSwgbGltaXQ7CisKKwlpZiAobGVuIDw9IG10ZC0+b29ic2l6ZSkgeworCQlvbWFwX3dyaXRlX2J1Zl9wcmVmKG10ZCwgYnVmLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJaW5mby0+aW9tb2RlID0gT01BUF9OQU5EX0lPX1dSSVRFOworCWluZm8tPmJ1ZiA9ICh1X2NoYXIgKikgYnVmOworCWluaXRfY29tcGxldGlvbigmaW5mby0+Y29tcCk7CisKKwkvKiBjb25maWd1cmUgYW5kIHN0YXJ0IHByZWZldGNoIHRyYW5zZmVyIDogc2l6ZT0yNCAqLworCXJldCA9IGdwbWNfcHJlZmV0Y2hfZW5hYmxlKGluZm8tPmdwbWNfY3MsCisJCQkoUFJFRkVUQ0hfRklGT1RIUkVTSE9MRF9NQVggKiAzKSAvIDgsIDB4MCwgbGVuLCAweDEpOworCWlmIChyZXQpCisJCS8qIFBGUFcgZW5naW5lIGlzIGJ1c3ksIHVzZSBjcHUgY29weSBtZXRob2QgKi8KKwkJZ290byBvdXRfY29weTsKKworCWluZm8tPmJ1Zl9sZW4gPSBsZW47CisJLyogZW5hYmxlIGlycSAqLworCWdwbWNfY3NfY29uZmlndXJlKGluZm8tPmdwbWNfY3MsIEdQTUNfRU5BQkxFX0lSUSwKKwkJCShHUE1DX0lSUV9GSUZPRVZFTlRFTkFCTEUgfCBHUE1DX0lSUV9DT1VOVF9FVkVOVCkpOworCisJLyogd2FpdGluZyBmb3Igd3JpdGUgdG8gY29tcGxldGUgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZpbmZvLT5jb21wKTsKKwkvKiB3YWl0IGZvciBkYXRhIHRvIGZsdXNoZWQtb3V0IGJlZm9yZSByZXNldCB0aGUgcHJlZmV0Y2ggKi8KKwl0aW0gPSAwOworCWxpbWl0ID0gKGxvb3BzX3Blcl9qaWZmeSAqICBtc2Vjc190b19qaWZmaWVzKE9NQVBfTkFORF9USU1FT1VUX01TKSk7CisJd2hpbGUgKGdwbWNfcmVhZF9zdGF0dXMoR1BNQ19QUkVGRVRDSF9DT1VOVCkgJiYgKHRpbSsrIDwgbGltaXQpKQorCQljcHVfcmVsYXgoKTsKKworCS8qIGRpc2FibGUgYW5kIHN0b3AgdGhlIFBGUFcgZW5naW5lICovCisJZ3BtY19wcmVmZXRjaF9yZXNldChpbmZvLT5ncG1jX2NzKTsKKwlyZXR1cm47CisKK291dF9jb3B5OgorCWlmIChpbmZvLT5uYW5kLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQlvbWFwX3dyaXRlX2J1ZjE2KG10ZCwgYnVmLCBsZW4pOworCWVsc2UKKwkJb21hcF93cml0ZV9idWY4KG10ZCwgYnVmLCBsZW4pOworfQorCiAvKioKICAqIG9tYXBfdmVyaWZ5X2J1ZiAtIFZlcmlmeSBjaGlwIGRhdGEgYWdhaW5zdCBidWZmZXIKICAqIEBtdGQ6IE1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC00ODcsOCArNjQwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19NVERfTkFORF9PTUFQX0hXRUNDCi0KIC8qKgogICogZ2VuX3RydWVfZWNjIC0gVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRlIHRydWUgRUNDIHZhbHVlCiAgKiBAZWNjX2J1ZjogYnVmZmVyIHRvIHN0b3JlIGVjYyBjb2RlCkBAIC03MDgsOCArODU5LDYgQEAKIAlncG1jX2VuYWJsZV9od2VjYyhpbmZvLT5ncG1jX2NzLCBtb2RlLCBkZXZfd2lkdGgsIGluZm8tPm5hbmQuZWNjLnNpemUpOwogfQogCi0jZW5kaWYKLQogLyoqCiAgKiBvbWFwX3dhaXQgLSB3YWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGRvbmUKICAqIEBtdGQ6IE1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC03NzksNiArOTI4LDcgQEAKIAlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8JCSppbmZvOwogCXN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CiAJaW50CQkJCWVycjsKKwlpbnQJCQkJaSwgb2Zmc2V0OwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAocGRhdGEgPT0gTlVMTCkgewpAQCAtODA0LDcgKzk1NCw3IEBACiAJaW5mby0+bXRkLm5hbWUJCT0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAJaW5mby0+bXRkLm93bmVyCQk9IFRISVNfTU9EVUxFOwogCi0JaW5mby0+bmFuZC5vcHRpb25zCXw9IHBkYXRhLT5kZXZzaXplID8gTkFORF9CVVNXSURUSF8xNiA6IDA7CisJaW5mby0+bmFuZC5vcHRpb25zCT0gcGRhdGEtPmRldnNpemU7CiAJaW5mby0+bmFuZC5vcHRpb25zCXw9IE5BTkRfU0tJUF9CQlRTQ0FOOwogCiAJLyogTkFORCB3cml0ZSBwcm90ZWN0IG9mZiAqLwpAQCAtODQyLDI4ICs5OTIsMTMgQEAKIAkJaW5mby0+bmFuZC5jaGlwX2RlbGF5ID0gNTA7CiAJfQogCi0JaWYgKHVzZV9wcmVmZXRjaCkgewotCisJc3dpdGNoIChwZGF0YS0+eGZlcl90eXBlKSB7CisJY2FzZSBOQU5EX09NQVBfUFJFRkVUQ0hfUE9MTEVEOgogCQlpbmZvLT5uYW5kLnJlYWRfYnVmICAgPSBvbWFwX3JlYWRfYnVmX3ByZWY7CiAJCWluZm8tPm5hbmQud3JpdGVfYnVmICA9IG9tYXBfd3JpdGVfYnVmX3ByZWY7Ci0JCWlmICh1c2VfZG1hKSB7Ci0JCQllcnIgPSBvbWFwX3JlcXVlc3RfZG1hKE9NQVAyNFhYX0RNQV9HUE1DLCAiTkFORCIsCi0JCQkJb21hcF9uYW5kX2RtYV9jYiwgJmluZm8tPmNvbXAsICZpbmZvLT5kbWFfY2gpOwotCQkJaWYgKGVyciA8IDApIHsKLQkJCQlpbmZvLT5kbWFfY2ggPSAtMTsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJETUEgcmVxdWVzdCBmYWlsZWQuIgotCQkJCQkiIE5vbi1kbWEgZGF0YSB0cmFuc2ZlciBtb2RlXG4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShpbmZvLT5kbWFfY2gsCi0JCQkJCQlPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKLQkJCQlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoaW5mby0+ZG1hX2NoLAotCQkJCQkJT01BUF9ETUFfREFUQV9CVVJTVF8xNik7CisJCWJyZWFrOwogCi0JCQkJaW5mby0+bmFuZC5yZWFkX2J1ZiAgID0gb21hcF9yZWFkX2J1Zl9kbWFfcHJlZjsKLQkJCQlpbmZvLT5uYW5kLndyaXRlX2J1ZiAgPSBvbWFwX3dyaXRlX2J1Zl9kbWFfcHJlZjsKLQkJCX0KLQkJfQotCX0gZWxzZSB7CisJY2FzZSBOQU5EX09NQVBfUE9MTEVEOgogCQlpZiAoaW5mby0+bmFuZC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgewogCQkJaW5mby0+bmFuZC5yZWFkX2J1ZiAgID0gb21hcF9yZWFkX2J1ZjE2OwogCQkJaW5mby0+bmFuZC53cml0ZV9idWYgID0gb21hcF93cml0ZV9idWYxNjsKQEAgLTg3MSwyMCArMTAwNiw2MSBAQAogCQkJaW5mby0+bmFuZC5yZWFkX2J1ZiAgID0gb21hcF9yZWFkX2J1Zjg7CiAJCQlpbmZvLT5uYW5kLndyaXRlX2J1ZiAgPSBvbWFwX3dyaXRlX2J1Zjg7CiAJCX0KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfT01BUF9QUkVGRVRDSF9ETUE6CisJCWVyciA9IG9tYXBfcmVxdWVzdF9kbWEoT01BUDI0WFhfRE1BX0dQTUMsICJOQU5EIiwKKwkJCQlvbWFwX25hbmRfZG1hX2NiLCAmaW5mby0+Y29tcCwgJmluZm8tPmRtYV9jaCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlpbmZvLT5kbWFfY2ggPSAtMTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkRNQSByZXF1ZXN0IGZhaWxlZCFcbiIpOworCQkJZ290byBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOworCQl9IGVsc2UgeworCQkJb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShpbmZvLT5kbWFfY2gsCisJCQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCQkJb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKGluZm8tPmRtYV9jaCwKKwkJCQkJT01BUF9ETUFfREFUQV9CVVJTVF8xNik7CisKKwkJCWluZm8tPm5hbmQucmVhZF9idWYgICA9IG9tYXBfcmVhZF9idWZfZG1hX3ByZWY7CisJCQlpbmZvLT5uYW5kLndyaXRlX2J1ZiAgPSBvbWFwX3dyaXRlX2J1Zl9kbWFfcHJlZjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTkFORF9PTUFQX1BSRUZFVENIX0lSUToKKwkJZXJyID0gcmVxdWVzdF9pcnEocGRhdGEtPmdwbWNfaXJxLAorCQkJCW9tYXBfbmFuZF9pcnEsIElSUUZfU0hBUkVELCAiZ3BtYy1uYW5kIiwgaW5mbyk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RpbmcgaXJxKCVkKSBlcnJvcjolZCIsCisJCQkJCQkJcGRhdGEtPmdwbWNfaXJxLCBlcnIpOworCQkJZ290byBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOworCQl9IGVsc2UgeworCQkJaW5mby0+Z3BtY19pcnEJICAgICA9IHBkYXRhLT5ncG1jX2lycTsKKwkJCWluZm8tPm5hbmQucmVhZF9idWYgID0gb21hcF9yZWFkX2J1Zl9pcnFfcHJlZjsKKwkJCWluZm8tPm5hbmQud3JpdGVfYnVmID0gb21hcF93cml0ZV9idWZfaXJxX3ByZWY7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkieGZlcl90eXBlKCVkKSBub3Qgc3VwcG9ydGVkIVxuIiwgcGRhdGEtPnhmZXJfdHlwZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3JlbGVhc2VfbWVtX3JlZ2lvbjsKIAl9CisKIAlpbmZvLT5uYW5kLnZlcmlmeV9idWYgPSBvbWFwX3ZlcmlmeV9idWY7CiAKLSNpZmRlZiBDT05GSUdfTVREX05BTkRfT01BUF9IV0VDQwotCWluZm8tPm5hbmQuZWNjLmJ5dGVzCQk9IDM7Ci0JaW5mby0+bmFuZC5lY2Muc2l6ZQkJPSA1MTI7Ci0JaW5mby0+bmFuZC5lY2MuY2FsY3VsYXRlCT0gb21hcF9jYWxjdWxhdGVfZWNjOwotCWluZm8tPm5hbmQuZWNjLmh3Y3RsCQk9IG9tYXBfZW5hYmxlX2h3ZWNjOwotCWluZm8tPm5hbmQuZWNjLmNvcnJlY3QJCT0gb21hcF9jb3JyZWN0X2RhdGE7Ci0JaW5mby0+bmFuZC5lY2MubW9kZQkJPSBOQU5EX0VDQ19IVzsKLQotI2Vsc2UKLQlpbmZvLT5uYW5kLmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKLSNlbmRpZgorCS8qIHNlbHNlY3QgdGhlIGVjYyB0eXBlICovCisJaWYgKHBkYXRhLT5lY2Nfb3B0ID09IE9NQVBfRUNDX0hBTU1JTkdfQ09ERV9ERUZBVUxUKQorCQlpbmZvLT5uYW5kLmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKwllbHNlIGlmICgocGRhdGEtPmVjY19vcHQgPT0gT01BUF9FQ0NfSEFNTUlOR19DT0RFX0hXKSB8fAorCQkocGRhdGEtPmVjY19vcHQgPT0gT01BUF9FQ0NfSEFNTUlOR19DT0RFX0hXX1JPTUNPREUpKSB7CisJCWluZm8tPm5hbmQuZWNjLmJ5dGVzICAgICAgICAgICAgPSAzOworCQlpbmZvLT5uYW5kLmVjYy5zaXplICAgICAgICAgICAgID0gNTEyOworCQlpbmZvLT5uYW5kLmVjYy5jYWxjdWxhdGUgICAgICAgID0gb21hcF9jYWxjdWxhdGVfZWNjOworCQlpbmZvLT5uYW5kLmVjYy5od2N0bCAgICAgICAgICAgID0gb21hcF9lbmFibGVfaHdlY2M7CisJCWluZm8tPm5hbmQuZWNjLmNvcnJlY3QgICAgICAgICAgPSBvbWFwX2NvcnJlY3RfZGF0YTsKKwkJaW5mby0+bmFuZC5lY2MubW9kZSAgICAgICAgICAgICA9IE5BTkRfRUNDX0hXOworCX0KIAogCS8qIERJUCBzd2l0Y2hlcyBvbiBzb21lIGJvYXJkcyBjaGFuZ2UgYmV0d2VlbiA4IGFuZCAxNiBiaXQKIAkgKiBidXMgd2lkdGhzIGZvciBmbGFzaC4gIFRyeSB0aGUgb3RoZXIgd2lkdGggaWYgdGhlIGZpcnN0IHRyeSBmYWlscy4KQEAgLTg5Nyw2ICsxMDczLDI2IEBACiAJCX0KIAl9CiAKKwkvKiByb20gY29kZSBsYXlvdXQgKi8KKwlpZiAocGRhdGEtPmVjY19vcHQgPT0gT01BUF9FQ0NfSEFNTUlOR19DT0RFX0hXX1JPTUNPREUpIHsKKworCQlpZiAoaW5mby0+bmFuZC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCW9mZnNldCA9IDI7CisJCWVsc2UgeworCQkJb2Zmc2V0ID0gMTsKKwkJCWluZm8tPm5hbmQuYmFkYmxvY2tfcGF0dGVybiA9ICZiYl9kZXNjcmlwX2ZsYXNoYmFzZWQ7CisJCX0KKwkJb21hcF9vb2JpbmZvLmVjY2J5dGVzID0gMyAqIChpbmZvLT5tdGQub29ic2l6ZS8xNik7CisJCWZvciAoaSA9IDA7IGkgPCBvbWFwX29vYmluZm8uZWNjYnl0ZXM7IGkrKykKKwkJCW9tYXBfb29iaW5mby5lY2Nwb3NbaV0gPSBpK29mZnNldDsKKworCQlvbWFwX29vYmluZm8ub29iZnJlZS0+b2Zmc2V0ID0gb2Zmc2V0ICsgb21hcF9vb2JpbmZvLmVjY2J5dGVzOworCQlvbWFwX29vYmluZm8ub29iZnJlZS0+bGVuZ3RoID0gaW5mby0+bXRkLm9vYnNpemUgLQorCQkJCQkob2Zmc2V0ICsgb21hcF9vb2JpbmZvLmVjY2J5dGVzKTsKKworCQlpbmZvLT5uYW5kLmVjYy5sYXlvdXQgPSAmb21hcF9vb2JpbmZvOworCX0KKwogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWVyciA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKCZpbmZvLT5tdGQsIHBhcnRfcHJvYmVzLCAmaW5mby0+cGFydHMsIDApOwogCWlmIChlcnIgPiAwKQpAQCAtOTI2LDkgKzExMjIsMTIgQEAKIAkJCQkJCQltdGQpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JaWYgKHVzZV9kbWEpCisJaWYgKGluZm8tPmRtYV9jaCAhPSAtMSkKIAkJb21hcF9mcmVlX2RtYShpbmZvLT5kbWFfY2gpOwogCisJaWYgKGluZm8tPmdwbWNfaXJxKQorCQlmcmVlX2lycShpbmZvLT5ncG1jX2lycSwgaW5mbyk7CisKIAkvKiBSZWxlYXNlIE5BTkQgZGV2aWNlLCBpdHMgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgcGFydGl0aW9ucyAqLwogCW5hbmRfcmVsZWFzZSgmaW5mby0+bXRkKTsKIAlpb3VubWFwKGluZm8tPm5hbmQuSU9fQUREUl9SKTsKQEAgLTk0NywxNiArMTE0Niw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfbmFuZF9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgZHJpdmVyIGluaXRpYWxpemluZ1xuIiwgRFJJVkVSX05BTUUpOworCXByX2luZm8oIiVzIGRyaXZlciBpbml0aWFsaXppbmdcbiIsIERSSVZFUl9OQU1FKTsKIAotCS8qIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgaWYgZHJpdmVyIGlzIGJlaW5nCi0JICogbG9hZGVkIHJ1biB0aW1lIGFzIGEgbW9kdWxlCi0JICovCi0JaWYgKCgxID09IHVzZV9kbWEpICYmICgwID09IHVzZV9wcmVmZXRjaCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyJXcm9uZyBwYXJhbWV0ZXJzOiAndXNlX2RtYScgY2FuIG5vdCBiZSAxICIKLQkJCQkid2l0aG91dCB1c2VfcHJlZmV0Y2gnLiBQcmVmZXRjaCB3aWxsIG5vdCBiZSIKLQkJCQkiIHVzZWQgaW4gZWl0aGVyIG1vZGUgKG1wdSBvciBkbWEpXG4iKTsKLQl9CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9uYW5kX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwppbmRleCA0ZGJkMGY1Li40ZjQyNjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCkBAIC0zMiw3ICszMiw3IEBACiAKIGNvbmZpZyBNVERfT05FTkFORF9TQU1TVU5HCiAgICAgICAgIHRyaXN0YXRlICJPbmVOQU5EIG9uIFNhbXN1bmcgU09DIGNvbnRyb2xsZXIgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBBUkNIX1MzQzY0WFggfHwgQVJDSF9TNVBDMTAwIHx8IEFSQ0hfUzVQVjIxMCB8fCBBUkNIX1M1UFYzMTAKKyAgICAgICAgZGVwZW5kcyBvbiBBUkNIX1MzQzY0WFggfHwgQVJDSF9TNVBDMTAwIHx8IEFSQ0hfUzVQVjIxMCB8fCBBUkNIX0VYWU5PUzQKICAgICAgICAgaGVscAogICAgICAgICAgIFN1cHBvcnQgZm9yIGEgT25lTkFORCBmbGFzaCBkZXZpY2UgY29ubmVjdGVkIHRvIGFuIFNhbXN1bmcgU09DLgogICAgICAgICAgIFMzQzY0WFgvUzVQQzEwMCB1c2UgY29tbWFuZCBtYXBwaW5nIG1ldGhvZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYwppbmRleCBjODQ5Y2FjLi4xNGE0OWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCkBAIC02Myw3ICs2Myw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24gZG1hX2RvbmU7CiAJaW50IGRtYV9jaGFubmVsOwogCWludCBmcmVxOwotCWludCAoKnNldHVwKSh2b2lkIF9faW9tZW0gKmJhc2UsIGludCBmcmVxKTsKKwlpbnQgKCpzZXR1cCkodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgKmZyZXFfcHRyKTsKIAlzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3I7CiB9OwogCkBAIC0xNDgsMTEgKzE0OCw5IEBACiAJCQl3YWl0X2VycigiY29udHJvbGxlciBlcnJvciIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWlmICgoaW50ciAmIGludHJfZmxhZ3MpICE9IGludHJfZmxhZ3MpIHsKLQkJCXdhaXRfZXJyKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJcmV0dXJuIDA7CisJCWlmICgoaW50ciAmIGludHJfZmxhZ3MpID09IGludHJfZmxhZ3MpCisJCQlyZXR1cm4gMDsKKwkJLyogQ29udGludWUgaW4gd2FpdCBmb3IgaW50ZXJydXB0IGJyYW5jaCAqLwogCX0KIAogCWlmIChzdGF0ZSAhPSBGTF9SRUFESU5HKSB7CkBAIC01ODEsNyArNTc5LDcgQEAKIAogCS8qIERNQSBpcyBub3QgaW4gdXNlIHNvIHRoaXMgaXMgYWxsIHRoYXQgaXMgbmVlZGVkICovCiAJLyogUmV2aXNpdCBmb3IgT01BUDMhICovCi0JcmV0ID0gYy0+c2V0dXAoYy0+b25lbmFuZC5iYXNlLCBjLT5mcmVxKTsKKwlyZXQgPSBjLT5zZXR1cChjLT5vbmVuYW5kLmJhc2UsICZjLT5mcmVxKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02NzMsNyArNjcxLDcgQEAKIAl9CiAKIAlpZiAocGRhdGEtPm9uZW5hbmRfc2V0dXAgIT0gTlVMTCkgewotCQlyID0gcGRhdGEtPm9uZW5hbmRfc2V0dXAoYy0+b25lbmFuZC5iYXNlLCBjLT5mcmVxKTsKKwkJciA9IHBkYXRhLT5vbmVuYW5kX3NldHVwKGMtPm9uZW5hbmQuYmFzZSwgJmMtPmZyZXEpOwogCQlpZiAociA8IDApIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk9uZW5hbmQgcGxhdGZvcm0gc2V0dXAgZmFpbGVkOiAiCiAJCQkJIiVkXG4iLCByKTsKQEAgLTcxOCw4ICs3MTYsOCBAQAogCX0KIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJpbml0aWFsaXppbmcgb24gQ1MlZCwgcGh5cyBiYXNlIDB4JTA4bHgsIHZpcnR1YWwgIgotCQkgImJhc2UgJXBcbiIsIGMtPmdwbWNfY3MsIGMtPnBoeXNfYmFzZSwKLQkJIGMtPm9uZW5hbmQuYmFzZSk7CisJCSAiYmFzZSAlcCwgZnJlcSAlZCBNSHpcbiIsIGMtPmdwbWNfY3MsIGMtPnBoeXNfYmFzZSwKKwkJIGMtPm9uZW5hbmQuYmFzZSwgYy0+ZnJlcSk7CiAKIAljLT5wZGV2ID0gcGRldjsKIAljLT5tdGQubmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwpAQCAtNzU0LDI0ICs3NTIsNiBAQAogCWlmICgociA9IG9uZW5hbmRfc2NhbigmYy0+bXRkLCAxKSkgPCAwKQogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ3VsYXRvcjsKIAotCXN3aXRjaCAoKGMtPm9uZW5hbmQudmVyc2lvbl9pZCA+PiA0KSAmIDB4ZikgewotCWNhc2UgMDoKLQkJYy0+ZnJlcSA9IDQwOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWMtPmZyZXEgPSA1NDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQljLT5mcmVxID0gNjY7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJYy0+ZnJlcSA9IDgzOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWMtPmZyZXEgPSAxMDQ7Ci0JCWJyZWFrOwotCX0KLQogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCXIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucygmYy0+bXRkLCBwYXJ0X3Byb2JlcywgJmMtPnBhcnRzLCAwKTsKIAlpZiAociA+IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL3ViaS9LY29uZmlnCmluZGV4IDNjZjE5M2YuLjZhYmViNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9LY29uZmlnCkBAIC01Miw2ICs1MiwxMiBAQAogCSAgIHdvcmsgb24gdG9wIG9mIFVCSS4gRG8gbm90IGVuYWJsZSB0aGlzIHVubGVzcyB5b3UgdXNlIGxlZ2FjeQogCSAgIHNvZnR3YXJlLgogCi1zb3VyY2UgImRyaXZlcnMvbXRkL3ViaS9LY29uZmlnLmRlYnVnIgorY29uZmlnIE1URF9VQklfREVCVUcKKwlib29sICJVQkkgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gU1lTRlMKKwlzZWxlY3QgREVCVUdfRlMKKwlzZWxlY3QgS0FMTFNZTVNfQUxMIGlmIEtBTExTWU1TICYmIERFQlVHX0tFUk5FTAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgVUJJIGRlYnVnZ2luZy4KIAogZW5kaWYgIyBNVERfVUJJCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvS2NvbmZpZy5kZWJ1ZyBiL2RyaXZlcnMvbXRkL3ViaS9LY29uZmlnLmRlYnVnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWQ0YWRjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL3ViaS9LY29uZmlnLmRlYnVnCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotY29tbWVudCAiVUJJIGRlYnVnZ2luZyBvcHRpb25zIgotCi1jb25maWcgTVREX1VCSV9ERUJVRwotCWJvb2wgIlVCSSBkZWJ1Z2dpbmciCi0JZGVwZW5kcyBvbiBTWVNGUwotCXNlbGVjdCBERUJVR19GUwotCXNlbGVjdCBLQUxMU1lNU19BTEwgaWYgS0FMTFNZTVMgJiYgREVCVUdfS0VSTkVMCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBVQkkgZGVidWdnaW5nLgotCi1pZiBNVERfVUJJX0RFQlVHCi0KLWNvbmZpZyBNVERfVUJJX0RFQlVHX01TRwotCWJvb2wgIlVCSSBkZWJ1Z2dpbmcgbWVzc2FnZXMiCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBVQkkgZGVidWdnaW5nIG1lc3NhZ2VzLgotCi1jb25maWcgTVREX1VCSV9ERUJVR19QQVJBTk9JRAotCWJvb2wgIkV4dHJhIHNlbGYtY2hlY2tzIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZXh0cmEgY2hlY2tzIGluIFVCSSBjb2RlLiBOb3RlIHRoaXMgc2xvd3MgVUJJIGRvd24KLQkgIHNpZ25pZmljYW50bHkuCi0KLWNvbmZpZyBNVERfVUJJX0RFQlVHX0RJU0FCTEVfQkdUCi0JYm9vbCAiRG8gbm90IGVuYWJsZSB0aGUgVUJJIGJhY2tncm91bmQgdGhyZWFkIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHN3aXRjaGVzIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBvZmYgYnkgZGVmYXVsdC4gVGhlIHRocmVhZAotCSAgbWF5IGJlIGFsc28gYmUgZW5hYmxlZC9kaXNhYmxlZCB2aWEgVUJJIHN5c2ZzLgotCi1jb25maWcgTVREX1VCSV9ERUJVR19FTVVMQVRFX0JJVEZMSVBTCi0JYm9vbCAiRW11bGF0ZSBmbGFzaCBiaXQtZmxpcHMiCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW11bGF0ZXMgYml0LWZsaXBzIHdpdGggcHJvYmFiaWxpdHkgMS81MCwgd2hpY2ggaW4gdHVybgotCSAgY2F1c2VzIHNjcnViYmluZy4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIHN0cmVzc2luZyBVQkkuCi0KLWNvbmZpZyBNVERfVUJJX0RFQlVHX0VNVUxBVEVfV1JJVEVfRkFJTFVSRVMKLQlib29sICJFbXVsYXRlIGZsYXNoIHdyaXRlIGZhaWx1cmVzIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVtdWxhdGVzIHdyaXRlIGZhaWx1cmVzIHdpdGggcHJvYmFiaWxpdHkgMS8xMDAuIFVzZWZ1bCBmb3IKLQkgIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBob3cgVUJJIGhhbmRsaW5lcyBlcnJvcnMuCi0KLWNvbmZpZyBNVERfVUJJX0RFQlVHX0VNVUxBVEVfRVJBU0VfRkFJTFVSRVMKLQlib29sICJFbXVsYXRlIGZsYXNoIGVyYXNlIGZhaWx1cmVzIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVtdWxhdGVzIGVyYXNlIGZhaWx1cmVzIHdpdGggcHJvYmFiaWxpdHkgMS8xMDAuIFVzZWZ1bCBmb3IKLQkgIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBob3cgVUJJIGhhbmRsaW5lcyBlcnJvcnMuCi0KLWNvbW1lbnQgIkFkZGl0aW9uYWwgVUJJIGRlYnVnZ2luZyBtZXNzYWdlcyIKLQotY29uZmlnIE1URF9VQklfREVCVUdfTVNHX0JMRAotCWJvb2wgIkFkZGl0aW9uYWwgVUJJIGluaXRpYWxpemF0aW9uIGFuZCBidWlsZCBtZXNzYWdlcyIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIGRldGFpbGVkIFVCSSBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGJ1aWxkCi0JICBkZWJ1Z2dpbmcgbWVzc2FnZXMuCi0KLWNvbmZpZyBNVERfVUJJX0RFQlVHX01TR19FQkEKLQlib29sICJFcmFzZWJsb2NrIGFzc29jaWF0aW9uIHVuaXQgbWVzc2FnZXMiCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZWJ1Z2dpbmcgbWVzc2FnZXMgZnJvbSB0aGUgVUJJIGVyYXNlYmxvY2sKLQkgIGFzc29jaWF0aW9uIHVuaXQuCi0KLWNvbmZpZyBNVERfVUJJX0RFQlVHX01TR19XTAotCWJvb2wgIldlYXItbGV2ZWxpbmcgdW5pdCBtZXNzYWdlcyIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIGRlYnVnZ2luZyBtZXNzYWdlcyBmcm9tIHRoZSBVQkkgd2Vhci1sZXZlbGluZwotCSAgdW5pdC4KLQotY29uZmlnIE1URF9VQklfREVCVUdfTVNHX0lPCi0JYm9vbCAiSW5wdXQvb3V0cHV0IHVuaXQgbWVzc2FnZXMiCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZWJ1Z2dpbmcgbWVzc2FnZXMgZnJvbSB0aGUgVUJJIGlucHV0L291dHB1dCB1bml0LgotCi1lbmRpZiAjIE1URF9VQklfREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKaW5kZXggNWViZTI4MC4uNjU2MjZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKQEAgLTY5MCwxMSArNjkwLDI1IEBACiAJdWJpX2Fzc2VydCh1YmktPmhkcnNfbWluX2lvX3NpemUgPD0gdWJpLT5taW5faW9fc2l6ZSk7CiAJdWJpX2Fzc2VydCh1YmktPm1pbl9pb19zaXplICUgdWJpLT5oZHJzX21pbl9pb19zaXplID09IDApOwogCisJdWJpLT5tYXhfd3JpdGVfc2l6ZSA9IHViaS0+bXRkLT53cml0ZWJ1ZnNpemU7CisJLyoKKwkgKiBNYXhpbXVtIHdyaXRlIHNpemUgaGFzIHRvIGJlIGdyZWF0ZXIgb3IgZXF1aXZhbGVudCB0byBtaW4uIEkvTworCSAqIHNpemUsIGFuZCBiZSBtdWx0aXBsZSBvZiBtaW4uIEkvTyBzaXplLgorCSAqLworCWlmICh1YmktPm1heF93cml0ZV9zaXplIDwgdWJpLT5taW5faW9fc2l6ZSB8fAorCSAgICB1YmktPm1heF93cml0ZV9zaXplICUgdWJpLT5taW5faW9fc2l6ZSB8fAorCSAgICAhaXNfcG93ZXJfb2ZfMih1YmktPm1heF93cml0ZV9zaXplKSkgeworCQl1YmlfZXJyKCJiYWQgd3JpdGUgYnVmZmVyIHNpemUgJWQgZm9yICVkIG1pbi4gSS9PIHVuaXQiLAorCQkJdWJpLT5tYXhfd3JpdGVfc2l6ZSwgdWJpLT5taW5faW9fc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIENhbGN1bGF0ZSBkZWZhdWx0IGFsaWduZWQgc2l6ZXMgb2YgRUMgYW5kIFZJRCBoZWFkZXJzICovCiAJdWJpLT5lY19oZHJfYWxzaXplID0gQUxJR04oVUJJX0VDX0hEUl9TSVpFLCB1YmktPmhkcnNfbWluX2lvX3NpemUpOwogCXViaS0+dmlkX2hkcl9hbHNpemUgPSBBTElHTihVQklfVklEX0hEUl9TSVpFLCB1YmktPmhkcnNfbWluX2lvX3NpemUpOwogCiAJZGJnX21zZygibWluX2lvX3NpemUgICAgICAlZCIsIHViaS0+bWluX2lvX3NpemUpOworCWRiZ19tc2coIm1heF93cml0ZV9zaXplICAgJWQiLCB1YmktPm1heF93cml0ZV9zaXplKTsKIAlkYmdfbXNnKCJoZHJzX21pbl9pb19zaXplICVkIiwgdWJpLT5oZHJzX21pbl9pb19zaXplKTsKIAlkYmdfbXNnKCJlY19oZHJfYWxzaXplICAgICVkIiwgdWJpLT5lY19oZHJfYWxzaXplKTsKIAlkYmdfbXNnKCJ2aWRfaGRyX2Fsc2l6ZSAgICVkIiwgdWJpLT52aWRfaGRyX2Fsc2l6ZSk7CkBAIC03MTEsNyArNzI1LDcgQEAKIAl9CiAKIAkvKiBTaW1pbGFyIGZvciB0aGUgZGF0YSBvZmZzZXQgKi8KLQl1YmktPmxlYl9zdGFydCA9IHViaS0+dmlkX2hkcl9vZmZzZXQgKyBVQklfRUNfSERSX1NJWkU7CisJdWJpLT5sZWJfc3RhcnQgPSB1YmktPnZpZF9oZHJfb2Zmc2V0ICsgVUJJX1ZJRF9IRFJfU0laRTsKIAl1YmktPmxlYl9zdGFydCA9IEFMSUdOKHViaS0+bGViX3N0YXJ0LCB1YmktPm1pbl9pb19zaXplKTsKIAogCWRiZ19tc2coInZpZF9oZHJfb2Zmc2V0ICAgJWQiLCB1YmktPnZpZF9oZHJfb2Zmc2V0KTsKQEAgLTkyMyw2ICs5MzcsOCBAQAogCXNwaW5fbG9ja19pbml0KCZ1YmktPnZvbHVtZXNfbG9jayk7CiAKIAl1YmlfbXNnKCJhdHRhY2hpbmcgbXRkJWQgdG8gdWJpJWQiLCBtdGQtPmluZGV4LCB1YmlfbnVtKTsKKwlkYmdfbXNnKCJzaXplb2Yoc3RydWN0IHViaV9zY2FuX2xlYikgJXp1Iiwgc2l6ZW9mKHN0cnVjdCB1Ymlfc2Nhbl9sZWIpKTsKKwlkYmdfbXNnKCJzaXplb2Yoc3RydWN0IHViaV93bF9lbnRyeSkgJXp1Iiwgc2l6ZW9mKHN0cnVjdCB1Ymlfd2xfZW50cnkpKTsKIAogCWVyciA9IGlvX2luaXQodWJpKTsKIAlpZiAoZXJyKQpAQCAtOTM3LDEzICs5NTMsNiBAQAogCWlmICghdWJpLT5wZWJfYnVmMikKIAkJZ290byBvdXRfZnJlZTsKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECi0JbXV0ZXhfaW5pdCgmdWJpLT5kYmdfYnVmX211dGV4KTsKLQl1YmktPmRiZ19wZWJfYnVmID0gdm1hbGxvYyh1YmktPnBlYl9zaXplKTsKLQlpZiAoIXViaS0+ZGJnX3BlYl9idWYpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0jZW5kaWYKLQogCWVyciA9IGF0dGFjaF9ieV9zY2FubmluZyh1YmkpOwogCWlmIChlcnIpIHsKIAkJZGJnX2VycigiZmFpbGVkIHRvIGF0dGFjaCBieSBzY2FubmluZywgZXJyb3IgJWQiLCBlcnIpOwpAQCAtOTkxLDggKzEwMDAsNyBAQAogCSAqIGNoZWNrcyBAdWJpLT50aHJlYWRfZW5hYmxlZC4gT3RoZXJ3aXNlIHdlIG1heSBmYWlsIHRvIHdha2UgaXQgdXAuCiAJICovCiAJc3Bpbl9sb2NrKCZ1YmktPndsX2xvY2spOwotCWlmICghREJHX0RJU0FCTEVfQkdUKQotCQl1YmktPnRocmVhZF9lbmFibGVkID0gMTsKKwl1YmktPnRocmVhZF9lbmFibGVkID0gMTsKIAl3YWtlX3VwX3Byb2Nlc3ModWJpLT5iZ3RfdGhyZWFkKTsKIAlzcGluX3VubG9jaygmdWJpLT53bF9sb2NrKTsKIApAQCAtMTAwOSw5ICsxMDE3LDYgQEAKIG91dF9mcmVlOgogCXZmcmVlKHViaS0+cGViX2J1ZjEpOwogCXZmcmVlKHViaS0+cGViX2J1ZjIpOwotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECi0JdmZyZWUodWJpLT5kYmdfcGViX2J1Zik7Ci0jZW5kaWYKIAlpZiAocmVmKQogCQlwdXRfZGV2aWNlKCZ1YmktPmRldik7CiAJZWxzZQpAQCAtMTA4Miw5ICsxMDg3LDYgQEAKIAlwdXRfbXRkX2RldmljZSh1YmktPm10ZCk7CiAJdmZyZWUodWJpLT5wZWJfYnVmMSk7CiAJdmZyZWUodWJpLT5wZWJfYnVmMik7Ci0jaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKLQl2ZnJlZSh1YmktPmRiZ19wZWJfYnVmKTsKLSNlbmRpZgogCXViaV9tc2coIm10ZCVkIGlzIGRldGFjaGVkIGZyb20gdWJpJWQiLCB1YmktPm10ZC0+aW5kZXgsIHViaS0+dWJpX251bSk7CiAJcHV0X2RldmljZSgmdWJpLT5kZXYpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmMgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuYwppbmRleCA0ODc2OTc3Li5kNGQwN2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvZGVidWcuYworKysgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuYwpAQCAtMjcsNiArMjcsMjAgQEAKICNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVRwogCiAjaW5jbHVkZSAidWJpLmgiCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKwordW5zaWduZWQgaW50IHViaV9tc2dfZmxhZ3M7Cit1bnNpZ25lZCBpbnQgdWJpX2Noa19mbGFnczsKK3Vuc2lnbmVkIGludCB1YmlfdHN0X2ZsYWdzOworCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfbXNncywgdWJpX21zZ19mbGFncywgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2Noa3MsIHViaV9jaGtfZmxhZ3MsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z190c3RzLCB1YmlfY2hrX2ZsYWdzLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfbXNncywgIkRlYnVnIG1lc3NhZ2UgdHlwZSBmbGFncyIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19jaGtzLCAiRGVidWcgY2hlY2sgZmxhZ3MiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfdHN0cywgIkRlYnVnIHNwZWNpYWwgdGVzdCBmbGFncyIpOwogCiAvKioKICAqIHViaV9kYmdfZHVtcF9lY19oZHIgLSBkdW1wIGFuIGVyYXNlIGNvdW50ZXIgaGVhZGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmggYi9kcml2ZXJzL210ZC91YmkvZGVidWcuaAppbmRleCA5ZWNhOTUwLi4wYjBjMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvZGVidWcuaAorKysgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuaApAQCAtMzgsNiArMzgsMTEgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiVUJJIERCRyAocGlkICVkKTogJXM6ICIgZm10ICJcbiIsIFwKIAkgICAgICAgY3VycmVudC0+cGlkLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKIAorI2RlZmluZSBkYmdfZG9fbXNnKHR5cCwgZm10LCAuLi4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAodWJpX21zZ19mbGFncyAmIHR5cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJZGJnX21zZyhmbXQsICMjX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSB1YmlfZGJnX2R1bXBfc3RhY2soKSBkdW1wX3N0YWNrKCkKIAogc3RydWN0IHViaV9lY19oZHI7CkBAIC01Nyw2MiArNjIsODggQEAKIHZvaWQgdWJpX2RiZ19kdW1wX21rdm9sX3JlcShjb25zdCBzdHJ1Y3QgdWJpX21rdm9sX3JlcSAqcmVxKTsKIHZvaWQgdWJpX2RiZ19kdW1wX2ZsYXNoKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGludCB1YmlfbXNnX2ZsYWdzOworCisvKgorICogRGVidWdnaW5nIG1lc3NhZ2UgdHlwZSBmbGFncyAobXVzdCBtYXRjaCBtc2dfdHlwZV9uYW1lcyBpbiBkZWJ1Zy5jKS4KKyAqCisgKiBVQklfTVNHX0dFTjogZ2VuZXJhbCBtZXNzYWdlcworICogVUJJX01TR19FQkE6IGpvdXJuYWwgbWVzc2FnZXMKKyAqIFVCSV9NU0dfV0w6IG1vdW50IG1lc3NhZ2VzCisgKiBVQklfTVNHX0lPOiBjb21taXQgbWVzc2FnZXMKKyAqIFVCSV9NU0dfQkxEOiBMRUIgZmluZCBtZXNzYWdlcworICovCitlbnVtIHsKKwlVQklfTVNHX0dFTiAgPSAweDEsCisJVUJJX01TR19FQkEgID0gMHgyLAorCVVCSV9NU0dfV0wgICA9IDB4NCwKKwlVQklfTVNHX0lPICAgPSAweDgsCisJVUJJX01TR19CTEQgID0gMHgxMCwKK307CisKICNkZWZpbmUgdWJpX2RiZ19wcmludF9oZXhfZHVtcChsLCBwcywgcHQsIHIsIGcsIGIsIGxlbiwgYSkgIFwKIAkJcHJpbnRfaGV4X2R1bXAobCwgcHMsIHB0LCByLCBnLCBiLCBsZW4sIGEpCiAKLSNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVR19NU0cKIC8qIEdlbmVyYWwgZGVidWdnaW5nIG1lc3NhZ2VzICovCi0jZGVmaW5lIGRiZ19nZW4oZm10LCAuLi4pIGRiZ19tc2coZm10LCAjI19fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgZGJnX2dlbihmbXQsIC4uLikgKHt9KQotI2VuZGlmCisjZGVmaW5lIGRiZ19nZW4oZm10LCAuLi4pIGRiZ19kb19tc2coVUJJX01TR19HRU4sIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX01TR19FQkEKIC8qIE1lc3NhZ2VzIGZyb20gdGhlIGVyYXNlYmxvY2sgYXNzb2NpYXRpb24gc3ViLXN5c3RlbSAqLwotI2RlZmluZSBkYmdfZWJhKGZtdCwgLi4uKSBkYmdfbXNnKGZtdCwgIyNfX1ZBX0FSR1NfXykKLSNlbHNlCi0jZGVmaW5lIGRiZ19lYmEoZm10LCAuLi4pICh7fSkKLSNlbmRpZgorI2RlZmluZSBkYmdfZWJhKGZtdCwgLi4uKSBkYmdfZG9fbXNnKFVCSV9NU0dfRUJBLCBmbXQsICMjX19WQV9BUkdTX18pCiAKLSNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVR19NU0dfV0wKIC8qIE1lc3NhZ2VzIGZyb20gdGhlIHdlYXItbGV2ZWxpbmcgc3ViLXN5c3RlbSAqLwotI2RlZmluZSBkYmdfd2woZm10LCAuLi4pIGRiZ19tc2coZm10LCAjI19fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgZGJnX3dsKGZtdCwgLi4uKSAoe30pCi0jZW5kaWYKKyNkZWZpbmUgZGJnX3dsKGZtdCwgLi4uKSBkYmdfZG9fbXNnKFVCSV9NU0dfV0wsIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX01TR19JTwogLyogTWVzc2FnZXMgZnJvbSB0aGUgaW5wdXQvb3V0cHV0IHN1Yi1zeXN0ZW0gKi8KLSNkZWZpbmUgZGJnX2lvKGZtdCwgLi4uKSBkYmdfbXNnKGZtdCwgIyNfX1ZBX0FSR1NfXykKLSNlbHNlCi0jZGVmaW5lIGRiZ19pbyhmbXQsIC4uLikgKHt9KQotI2VuZGlmCisjZGVmaW5lIGRiZ19pbyhmbXQsIC4uLikgZGJnX2RvX21zZyhVQklfTVNHX0lPLCBmbXQsICMjX19WQV9BUkdTX18pCiAKLSNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVR19NU0dfQkxECiAvKiBJbml0aWFsaXphdGlvbiBhbmQgYnVpbGQgbWVzc2FnZXMgKi8KLSNkZWZpbmUgZGJnX2JsZChmbXQsIC4uLikgZGJnX21zZyhmbXQsICMjX19WQV9BUkdTX18pCi0jZGVmaW5lIFVCSV9JT19ERUJVRyAxCi0jZWxzZQotI2RlZmluZSBkYmdfYmxkKGZtdCwgLi4uKSAoe30pCi0jZGVmaW5lIFVCSV9JT19ERUJVRyAwCi0jZW5kaWYKKyNkZWZpbmUgZGJnX2JsZChmbXQsIC4uLikgZGJnX2RvX21zZyhVQklfTVNHX0JMRCwgZm10LCAjI19fVkFfQVJHU19fKQogCi0jaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKK2V4dGVybiB1bnNpZ25lZCBpbnQgdWJpX2Noa19mbGFnczsKKworLyoKKyAqIERlYnVnZ2luZyBjaGVjayBmbGFncy4KKyAqCisgKiBVQklfQ0hLX0dFTjogZ2VuZXJhbCBjaGVja3MKKyAqIFVCSV9DSEtfSU86IGNoZWNrIHdyaXRlcyBhbmQgZXJhc2VzCisgKi8KK2VudW0geworCVVCSV9DSEtfR0VOID0gMHgxLAorCVVCSV9DSEtfSU8gID0gMHgyLAorfTsKKwogaW50IHViaV9kYmdfY2hlY2tfYWxsX2ZmKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKIGludCB1YmlfZGJnX2NoZWNrX3dyaXRlKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHBudW0sCiAJCQlpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKLSNlbHNlCi0jZGVmaW5lIHViaV9kYmdfY2hlY2tfYWxsX2ZmKHViaSwgcG51bSwgb2Zmc2V0LCBsZW4pIDAKLSNkZWZpbmUgdWJpX2RiZ19jaGVja193cml0ZSh1YmksIGJ1ZiwgcG51bSwgb2Zmc2V0LCBsZW4pIDAKLSNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfRElTQUJMRV9CR1QKLSNkZWZpbmUgREJHX0RJU0FCTEVfQkdUIDEKLSNlbHNlCi0jZGVmaW5lIERCR19ESVNBQkxFX0JHVCAwCi0jZW5kaWYKK2V4dGVybiB1bnNpZ25lZCBpbnQgdWJpX3RzdF9mbGFnczsKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX0VNVUxBVEVfQklURkxJUFMKKy8qCisgKiBTcGVjaWFsIHRlc3RpbmcgZmxhZ3MuCisgKgorICogVUJJRlNfVFNUX0RJU0FCTEVfQkdUOiBkaXNhYmxlIHRoZSBiYWNrZ3JvdW5kIHRocmVhZAorICogVUJJX1RTVF9FTVVMQVRFX0JJVEZMSVBTOiBlbXVsYXRlIGJpdC1mbGlwcworICogVUJJX1RTVF9FTVVMQVRFX1dSSVRFX0ZBSUxVUkVTOiBlbXVsYXRlIHdyaXRlIGZhaWx1cmVzCisgKiBVQklfVFNUX0VNVUxBVEVfRVJBU0VfRkFJTFVSRVM6IGVtdWxhdGUgZXJhc2UgZmFpbHVyZXMKKyAqLworZW51bSB7CisJVUJJX1RTVF9ESVNBQkxFX0JHVCAgICAgICAgICAgID0gMHgxLAorCVVCSV9UU1RfRU1VTEFURV9CSVRGTElQUyAgICAgICA9IDB4MiwKKwlVQklfVFNUX0VNVUxBVEVfV1JJVEVfRkFJTFVSRVMgPSAweDQsCisJVUJJX1RTVF9FTVVMQVRFX0VSQVNFX0ZBSUxVUkVTID0gMHg4LAorfTsKKworLyoqCisgKiB1YmlfZGJnX2lzX2JndF9kaXNhYmxlZCAtIGlmIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBpcyBkaXNhYmxlZC4KKyAqCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBVQkkgYmFja2dyb3VuZCB0aHJlYWQgaXMgZGlzYWJsZWQgZm9yIHRlc3RpbmcKKyAqIHB1cnBvc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCB1YmlfZGJnX2lzX2JndF9kaXNhYmxlZCh2b2lkKQoreworCXJldHVybiB1YmlfdHN0X2ZsYWdzICYgVUJJX1RTVF9ESVNBQkxFX0JHVDsKK30KKwogLyoqCiAgKiB1YmlfZGJnX2lzX2JpdGZsaXAgLSBpZiBpdCBpcyB0aW1lIHRvIGVtdWxhdGUgYSBiaXQtZmxpcC4KICAqCkBAIC0xMjAsMTMgKzE1MSwxMSBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCB1YmlfZGJnX2lzX2JpdGZsaXAodm9pZCkKIHsKLQlyZXR1cm4gIShyYW5kb20zMigpICUgMjAwKTsKKwlpZiAodWJpX3RzdF9mbGFncyAmIFVCSV9UU1RfRU1VTEFURV9CSVRGTElQUykKKwkJcmV0dXJuICEocmFuZG9tMzIoKSAlIDIwMCk7CisJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSB1YmlfZGJnX2lzX2JpdGZsaXAoKSAwCi0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX0VNVUxBVEVfV1JJVEVfRkFJTFVSRVMKIC8qKgogICogdWJpX2RiZ19pc193cml0ZV9mYWlsdXJlIC0gaWYgaXQgaXMgdGltZSB0byBlbXVsYXRlIGEgd3JpdGUgZmFpbHVyZS4KICAqCkBAIC0xMzUsMTMgKzE2NCwxMSBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCB1YmlfZGJnX2lzX3dyaXRlX2ZhaWx1cmUodm9pZCkKIHsKLQlyZXR1cm4gIShyYW5kb20zMigpICUgNTAwKTsKKwlpZiAodWJpX3RzdF9mbGFncyAmIFVCSV9UU1RfRU1VTEFURV9XUklURV9GQUlMVVJFUykKKwkJcmV0dXJuICEocmFuZG9tMzIoKSAlIDUwMCk7CisJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSB1YmlfZGJnX2lzX3dyaXRlX2ZhaWx1cmUoKSAwCi0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX0VNVUxBVEVfRVJBU0VfRkFJTFVSRVMKIC8qKgogICogdWJpX2RiZ19pc19lcmFzZV9mYWlsdXJlIC0gaWYgaXRzIHRpbWUgdG8gZW11bGF0ZSBhbiBlcmFzZSBmYWlsdXJlLgogICoKQEAgLTE1MCwxMSArMTc3LDEwIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHViaV9kYmdfaXNfZXJhc2VfZmFpbHVyZSh2b2lkKQogeworCWlmICh1YmlfdHN0X2ZsYWdzICYgVUJJX1RTVF9FTVVMQVRFX0VSQVNFX0ZBSUxVUkVTKQogCQlyZXR1cm4gIShyYW5kb20zMigpICUgNDAwKTsKKwlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHViaV9kYmdfaXNfZXJhc2VfZmFpbHVyZSgpIDAKLSNlbmRpZgogCiAjZWxzZQogCkBAIC0xNzcsOCArMjAzLDcgQEAKICNkZWZpbmUgdWJpX2RiZ19kdW1wX2ZsYXNoKHViaSwgcG51bSwgb2Zmc2V0LCBsZW4pICh7fSkKICNkZWZpbmUgdWJpX2RiZ19wcmludF9oZXhfZHVtcChsLCBwcywgcHQsIHIsIGcsIGIsIGxlbiwgYSkgICh7fSkKIAotI2RlZmluZSBVQklfSU9fREVCVUcgICAgICAgICAgICAgICAwCi0jZGVmaW5lIERCR19ESVNBQkxFX0JHVCAgICAgICAgICAgIDAKKyNkZWZpbmUgdWJpX2RiZ19pc19iZ3RfZGlzYWJsZWQoKSAgMAogI2RlZmluZSB1YmlfZGJnX2lzX2JpdGZsaXAoKSAgICAgICAwCiAjZGVmaW5lIHViaV9kYmdfaXNfd3JpdGVfZmFpbHVyZSgpIDAKICNkZWZpbmUgdWJpX2RiZ19pc19lcmFzZV9mYWlsdXJlKCkgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2lvLmMgYi9kcml2ZXJzL210ZC91YmkvaW8uYwppbmRleCA4MTE3NzVhLi5hYWE2ZTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvaW8uYworKysgYi9kcml2ZXJzL210ZC91YmkvaW8uYwpAQCAtOTEsNyArOTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJ1YmkuaCIKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECisjaWZkZWYgQ09ORklHX01URF9VQklfREVCVUcKIHN0YXRpYyBpbnQgcGFyYW5vaWRfY2hlY2tfbm90X2JhZChjb25zdCBzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgcG51bSk7CiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX3BlYl9lY19oZHIoY29uc3Qgc3RydWN0IHViaV9kZXZpY2UgKnViaSwgaW50IHBudW0pOwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja19lY19oZHIoY29uc3Qgc3RydWN0IHViaV9kZXZpY2UgKnViaSwgaW50IHBudW0sCkBAIC0xNDYsNiArMTQ2LDI4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCS8qCisJICogRGVsaWJlcmF0ZWx5IGNvcnJ1cHQgdGhlIGJ1ZmZlciB0byBpbXByb3ZlIHJvYnVzdG5lc3MuIEluZGVlZCwgaWYgd2UKKwkgKiBkbyBub3QgZG8gdGhpcywgdGhlIGZvbGxvd2luZyBtYXkgaGFwcGVuOgorCSAqIDEuIFRoZSBidWZmZXIgY29udGFpbnMgZGF0YSBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbiwgZS5nLiwgcmVhZCBmcm9tCisJICogICAgYW5vdGhlciBQRUIgcHJldmlvdXNseS4gVGhlIGRhdGEgbG9va3MgbGlrZSBleHBlY3RlZCwgZS5nLiwgaWYgd2UKKwkgKiAgICBqdXN0IGRvIG5vdCByZWFkIGFueXRoaW5nIGFuZCByZXR1cm4gLSB0aGUgY2FsbGVyIHdvdWxkIG5vdAorCSAqICAgIG5vdGljZSB0aGlzLiBFLmcuLCBpZiB3ZSBhcmUgcmVhZGluZyBhIFZJRCBoZWFkZXIsIHRoZSBidWZmZXIgbWF5CisJICogICAgY29udGFpbiBhIHZhbGlkIFZJRCBoZWFkZXIgZnJvbSBhbm90aGVyIFBFQi4KKwkgKiAyLiBUaGUgZHJpdmVyIGlzIGJ1Z2d5IGFuZCByZXR1cm5zIHVzIHN1Y2Nlc3Mgb3IgLUVCQURNU0cgb3IKKwkgKiAgICAtRVVDTEVBTiwgYnV0IGl0IGRvZXMgbm90IGFjdHVhbGx5IHB1dCBhbnkgZGF0YSB0byB0aGUgYnVmZmVyLgorCSAqCisJICogVGhpcyBtYXkgY29uZnVzZSBVQkkgb3IgdXBwZXIgbGF5ZXJzIC0gdGhleSBtYXkgdGhpbmsgdGhlIGJ1ZmZlcgorCSAqIGNvbnRhaW5zIHZhbGlkIGRhdGEgd2hpbGUgaW4gZmFjdCBpdCBpcyBqdXN0IG9sZCBkYXRhLiBUaGlzIGlzCisJICogZXNwZWNpYWxseSBwb3NzaWJsZSBiZWNhdXNlIFVCSSAoYW5kIFVCSUZTKSByZWxpZXMgb24gQ1JDLCBhbmQKKwkgKiB0cmVhdHMgZGF0YSBhcyBjb3JyZWN0IGV2ZW4gaW4gY2FzZSBvZiBFQ0MgZXJyb3JzIGlmIHRoZSBDUkMgaXMKKwkgKiBjb3JyZWN0LgorCSAqCisJICogVHJ5IHRvIHByZXZlbnQgdGhpcyBzaXR1YXRpb24gYnkgY2hhbmdpbmcgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlCisJICogYnVmZmVyLgorCSAqLworCSooKHVpbnQ4X3QgKilidWYpIF49IDB4RkY7CisKIAlhZGRyID0gKGxvZmZfdClwbnVtICogdWJpLT5wZWJfc2l6ZSArIG9mZnNldDsKIHJldHJ5OgogCWVyciA9IHViaS0+bXRkLT5yZWFkKHViaS0+bXRkLCBhZGRyLCBsZW4sICZyZWFkLCBidWYpOwpAQCAtMTY2LDcgKzE4OCw3IEBACiAJCQlyZXR1cm4gVUJJX0lPX0JJVEZMSVBTOwogCQl9CiAKLQkJaWYgKHJlYWQgIT0gbGVuICYmIHJldHJpZXMrKyA8IFVCSV9JT19SRVRSSUVTKSB7CisJCWlmIChyZXRyaWVzKysgPCBVQklfSU9fUkVUUklFUykgewogCQkJZGJnX2lvKCJlcnJvciAlZCVzIHdoaWxlIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBQRUIgJWQ6JWQsIgogCQkJICAgICAgICIgcmVhZCBvbmx5ICV6ZCBieXRlcywgcmV0cnkiLAogCQkJICAgICAgIGVyciwgZXJyc3RyLCBsZW4sIHBudW0sIG9mZnNldCwgcmVhZCk7CkBAIC00ODAsNiArNTAyLDEzIEBACiAJc2l6ZV90IHdyaXR0ZW47CiAJbG9mZl90IGFkZHI7CiAJdWludDMyX3QgZGF0YSA9IDA7CisJLyoKKwkgKiBOb3RlLCB3ZSBjYW5ub3QgZ2VuZXJhbGx5IGRlZmluZSBWSUQgaGVhZGVyIGJ1ZmZlcnMgb24gc3RhY2ssCisJICogYmVjYXVzZSBvZiB0aGUgd2F5IHdlIGRlYWwgd2l0aCB0aGVzZSBidWZmZXJzIChzZWUgdGhlIGhlYWRlcgorCSAqIGNvbW1lbnQgaW4gdGhpcyBmaWxlKS4gQnV0IHdlIGtub3cgdGhpcyBpcyBhIE5PUi1zcGVjaWZpYyBwaWVjZSBvZgorCSAqIGNvZGUsIHNvIHdlIGNhbiBkbyB0aGlzLiBCdXQgeWVzLCB0aGlzIGlzIGVycm9yLXByb25lIGFuZCB3ZSBzaG91bGQKKwkgKiAocHJlLSlhbGxvY2F0ZSBWSUQgaGVhZGVyIGJ1ZmZlciBpbnN0ZWFkLgorCSAqLwogCXN0cnVjdCB1YmlfdmlkX2hkciB2aWRfaGRyOwogCiAJLyoKQEAgLTUwNywxMSArNTM2LDEzIEBACiAJICogUEVCLgogCSAqLwogCWVycjEgPSB1YmlfaW9fcmVhZF92aWRfaGRyKHViaSwgcG51bSwgJnZpZF9oZHIsIDApOwotCWlmIChlcnIxID09IFVCSV9JT19CQURfSERSX0VCQURNU0cgfHwgZXJyMSA9PSBVQklfSU9fQkFEX0hEUikgeworCWlmIChlcnIxID09IFVCSV9JT19CQURfSERSX0VCQURNU0cgfHwgZXJyMSA9PSBVQklfSU9fQkFEX0hEUiB8fAorCSAgICBlcnIxID09IFVCSV9JT19GRikgewogCQlzdHJ1Y3QgdWJpX2VjX2hkciBlY19oZHI7CiAKIAkJZXJyMSA9IHViaV9pb19yZWFkX2VjX2hkcih1YmksIHBudW0sICZlY19oZHIsIDApOwotCQlpZiAoZXJyMSA9PSBVQklfSU9fQkFEX0hEUl9FQkFETVNHIHx8IGVycjEgPT0gVUJJX0lPX0JBRF9IRFIpCisJCWlmIChlcnIxID09IFVCSV9JT19CQURfSERSX0VCQURNU0cgfHwgZXJyMSA9PSBVQklfSU9fQkFEX0hEUiB8fAorCQkgICAgZXJyMSA9PSBVQklfSU9fRkYpCiAJCQkvKgogCQkJICogQm90aCBWSUQgYW5kIEVDIGhlYWRlcnMgYXJlIGNvcnJ1cHRlZCwgc28gd2UgY2FuCiAJCQkgKiBzYWZlbHkgZXJhc2UgdGhpcyBQRUIgYW5kIG5vdCBhZnJhaWQgdGhhdCBpdCB3aWxsIGJlCkBAIC03NTIsOSArNzgzLDggQEAKIAkJCWlmICh2ZXJib3NlKQogCQkJCXViaV93YXJuKCJubyBFQyBoZWFkZXIgZm91bmQgYXQgUEVCICVkLCAiCiAJCQkJCSAib25seSAweEZGIGJ5dGVzIiwgcG51bSk7Ci0JCQllbHNlIGlmIChVQklfSU9fREVCVUcpCi0JCQkJZGJnX21zZygibm8gRUMgaGVhZGVyIGZvdW5kIGF0IFBFQiAlZCwgIgotCQkJCQkib25seSAweEZGIGJ5dGVzIiwgcG51bSk7CisJCQlkYmdfYmxkKCJubyBFQyBoZWFkZXIgZm91bmQgYXQgUEVCICVkLCAiCisJCQkJIm9ubHkgMHhGRiBieXRlcyIsIHBudW0pOwogCQkJaWYgKCFyZWFkX2VycikKIAkJCQlyZXR1cm4gVUJJX0lPX0ZGOwogCQkJZWxzZQpAQCAtNzY5LDkgKzc5OSw5IEBACiAJCQl1Ymlfd2FybigiYmFkIG1hZ2ljIG51bWJlciBhdCBQRUIgJWQ6ICUwOHggaW5zdGVhZCBvZiAiCiAJCQkJICIlMDh4IiwgcG51bSwgbWFnaWMsIFVCSV9FQ19IRFJfTUFHSUMpOwogCQkJdWJpX2RiZ19kdW1wX2VjX2hkcihlY19oZHIpOwotCQl9IGVsc2UgaWYgKFVCSV9JT19ERUJVRykKLQkJCWRiZ19tc2coImJhZCBtYWdpYyBudW1iZXIgYXQgUEVCICVkOiAlMDh4IGluc3RlYWQgb2YgIgotCQkJCSIlMDh4IiwgcG51bSwgbWFnaWMsIFVCSV9FQ19IRFJfTUFHSUMpOworCQl9CisJCWRiZ19ibGQoImJhZCBtYWdpYyBudW1iZXIgYXQgUEVCICVkOiAlMDh4IGluc3RlYWQgb2YgIgorCQkJIiUwOHgiLCBwbnVtLCBtYWdpYywgVUJJX0VDX0hEUl9NQUdJQyk7CiAJCXJldHVybiBVQklfSU9fQkFEX0hEUjsKIAl9CiAKQEAgLTc4Myw5ICs4MTMsOSBAQAogCQkJdWJpX3dhcm4oImJhZCBFQyBoZWFkZXIgQ1JDIGF0IFBFQiAlZCwgY2FsY3VsYXRlZCAiCiAJCQkJICIlIzA4eCwgcmVhZCAlIzA4eCIsIHBudW0sIGNyYywgaGRyX2NyYyk7CiAJCQl1YmlfZGJnX2R1bXBfZWNfaGRyKGVjX2hkcik7Ci0JCX0gZWxzZSBpZiAoVUJJX0lPX0RFQlVHKQotCQkJZGJnX21zZygiYmFkIEVDIGhlYWRlciBDUkMgYXQgUEVCICVkLCBjYWxjdWxhdGVkICIKLQkJCQkiJSMwOHgsIHJlYWQgJSMwOHgiLCBwbnVtLCBjcmMsIGhkcl9jcmMpOworCQl9CisJCWRiZ19ibGQoImJhZCBFQyBoZWFkZXIgQ1JDIGF0IFBFQiAlZCwgY2FsY3VsYXRlZCAiCisJCQkiJSMwOHgsIHJlYWQgJSMwOHgiLCBwbnVtLCBjcmMsIGhkcl9jcmMpOwogCiAJCWlmICghcmVhZF9lcnIpCiAJCQlyZXR1cm4gVUJJX0lPX0JBRF9IRFI7CkBAIC0xMDA4LDkgKzEwMzgsOCBAQAogCQkJaWYgKHZlcmJvc2UpCiAJCQkJdWJpX3dhcm4oIm5vIFZJRCBoZWFkZXIgZm91bmQgYXQgUEVCICVkLCAiCiAJCQkJCSAib25seSAweEZGIGJ5dGVzIiwgcG51bSk7Ci0JCQllbHNlIGlmIChVQklfSU9fREVCVUcpCi0JCQkJZGJnX21zZygibm8gVklEIGhlYWRlciBmb3VuZCBhdCBQRUIgJWQsICIKLQkJCQkJIm9ubHkgMHhGRiBieXRlcyIsIHBudW0pOworCQkJZGJnX2JsZCgibm8gVklEIGhlYWRlciBmb3VuZCBhdCBQRUIgJWQsICIKKwkJCQkib25seSAweEZGIGJ5dGVzIiwgcG51bSk7CiAJCQlpZiAoIXJlYWRfZXJyKQogCQkJCXJldHVybiBVQklfSU9fRkY7CiAJCQllbHNlCkBAIC0xMDIxLDkgKzEwNTAsOSBAQAogCQkJdWJpX3dhcm4oImJhZCBtYWdpYyBudW1iZXIgYXQgUEVCICVkOiAlMDh4IGluc3RlYWQgb2YgIgogCQkJCSAiJTA4eCIsIHBudW0sIG1hZ2ljLCBVQklfVklEX0hEUl9NQUdJQyk7CiAJCQl1YmlfZGJnX2R1bXBfdmlkX2hkcih2aWRfaGRyKTsKLQkJfSBlbHNlIGlmIChVQklfSU9fREVCVUcpCi0JCQlkYmdfbXNnKCJiYWQgbWFnaWMgbnVtYmVyIGF0IFBFQiAlZDogJTA4eCBpbnN0ZWFkIG9mICIKLQkJCQkiJTA4eCIsIHBudW0sIG1hZ2ljLCBVQklfVklEX0hEUl9NQUdJQyk7CisJCX0KKwkJZGJnX2JsZCgiYmFkIG1hZ2ljIG51bWJlciBhdCBQRUIgJWQ6ICUwOHggaW5zdGVhZCBvZiAiCisJCQkiJTA4eCIsIHBudW0sIG1hZ2ljLCBVQklfVklEX0hEUl9NQUdJQyk7CiAJCXJldHVybiBVQklfSU9fQkFEX0hEUjsKIAl9CiAKQEAgLTEwMzUsOSArMTA2NCw5IEBACiAJCQl1Ymlfd2FybigiYmFkIENSQyBhdCBQRUIgJWQsIGNhbGN1bGF0ZWQgJSMwOHgsICIKIAkJCQkgInJlYWQgJSMwOHgiLCBwbnVtLCBjcmMsIGhkcl9jcmMpOwogCQkJdWJpX2RiZ19kdW1wX3ZpZF9oZHIodmlkX2hkcik7Ci0JCX0gZWxzZSBpZiAoVUJJX0lPX0RFQlVHKQotCQkJZGJnX21zZygiYmFkIENSQyBhdCBQRUIgJWQsIGNhbGN1bGF0ZWQgJSMwOHgsICIKLQkJCQkicmVhZCAlIzA4eCIsIHBudW0sIGNyYywgaGRyX2NyYyk7CisJCX0KKwkJZGJnX2JsZCgiYmFkIENSQyBhdCBQRUIgJWQsIGNhbGN1bGF0ZWQgJSMwOHgsICIKKwkJCSJyZWFkICUjMDh4IiwgcG51bSwgY3JjLCBoZHJfY3JjKTsKIAkJaWYgKCFyZWFkX2VycikKIAkJCXJldHVybiBVQklfSU9fQkFEX0hEUjsKIAkJZWxzZQpAQCAtMTA5Nyw3ICsxMTI2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKKyNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVRwogCiAvKioKICAqIHBhcmFub2lkX2NoZWNrX25vdF9iYWQgLSBlbnN1cmUgdGhhdCBhIHBoeXNpY2FsIGVyYXNlYmxvY2sgaXMgbm90IGJhZC4KQEAgLTExMTEsNiArMTE0MCw5IEBACiB7CiAJaW50IGVycjsKIAorCWlmICghKHViaV9jaGtfZmxhZ3MgJiBVQklfQ0hLX0lPKSkKKwkJcmV0dXJuIDA7CisKIAllcnIgPSB1YmlfaW9faXNfYmFkKHViaSwgcG51bSk7CiAJaWYgKCFlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0xMTM1LDYgKzExNjcsOSBAQAogCWludCBlcnI7CiAJdWludDMyX3QgbWFnaWM7CiAKKwlpZiAoISh1YmlfY2hrX2ZsYWdzICYgVUJJX0NIS19JTykpCisJCXJldHVybiAwOworCiAJbWFnaWMgPSBiZTMyX3RvX2NwdShlY19oZHItPm1hZ2ljKTsKIAlpZiAobWFnaWMgIT0gVUJJX0VDX0hEUl9NQUdJQykgewogCQl1YmlfZXJyKCJiYWQgbWFnaWMgJSMwOHgsIG11c3QgYmUgJSMwOHgiLApAQCAtMTE3MCw2ICsxMjA1LDkgQEAKIAl1aW50MzJfdCBjcmMsIGhkcl9jcmM7CiAJc3RydWN0IHViaV9lY19oZHIgKmVjX2hkcjsKIAorCWlmICghKHViaV9jaGtfZmxhZ3MgJiBVQklfQ0hLX0lPKSkKKwkJcmV0dXJuIDA7CisKIAllY19oZHIgPSBremFsbG9jKHViaS0+ZWNfaGRyX2Fsc2l6ZSwgR0ZQX05PRlMpOwogCWlmICghZWNfaGRyKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEyMTEsNiArMTI0OSw5IEBACiAJaW50IGVycjsKIAl1aW50MzJfdCBtYWdpYzsKIAorCWlmICghKHViaV9jaGtfZmxhZ3MgJiBVQklfQ0hLX0lPKSkKKwkJcmV0dXJuIDA7CisKIAltYWdpYyA9IGJlMzJfdG9fY3B1KHZpZF9oZHItPm1hZ2ljKTsKIAlpZiAobWFnaWMgIT0gVUJJX1ZJRF9IRFJfTUFHSUMpIHsKIAkJdWJpX2VycigiYmFkIFZJRCBoZWFkZXIgbWFnaWMgJSMwOHggYXQgUEVCICVkLCBtdXN0IGJlICUjMDh4IiwKQEAgLTEyNDksNiArMTI5MCw5IEBACiAJc3RydWN0IHViaV92aWRfaGRyICp2aWRfaGRyOwogCXZvaWQgKnA7CiAKKwlpZiAoISh1YmlfY2hrX2ZsYWdzICYgVUJJX0NIS19JTykpCisJCXJldHVybiAwOworCiAJdmlkX2hkciA9IHViaV96YWxsb2NfdmlkX2hkcih1YmksIEdGUF9OT0ZTKTsKIAlpZiAoIXZpZF9oZHIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTI5NCwxNSArMTMzOCwyNiBAQAogCQkJaW50IG9mZnNldCwgaW50IGxlbikKIHsKIAlpbnQgZXJyLCBpOworCXNpemVfdCByZWFkOworCXZvaWQgKmJ1ZjE7CisJbG9mZl90IGFkZHIgPSAobG9mZl90KXBudW0gKiB1YmktPnBlYl9zaXplICsgb2Zmc2V0OwogCi0JbXV0ZXhfbG9jaygmdWJpLT5kYmdfYnVmX211dGV4KTsKLQllcnIgPSB1YmlfaW9fcmVhZCh1YmksIHViaS0+ZGJnX3BlYl9idWYsIHBudW0sIG9mZnNldCwgbGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKCEodWJpX2Noa19mbGFncyAmIFVCSV9DSEtfSU8pKQorCQlyZXR1cm4gMDsKKworCWJ1ZjEgPSBfX3ZtYWxsb2MobGVuLCBHRlBfS0VSTkVMIHwgR0ZQX05PRlMsIFBBR0VfS0VSTkVMKTsKKwlpZiAoIWJ1ZjEpIHsKKwkJdWJpX2VycigiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSB0byBjaGVjayB3cml0ZXMiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyID0gdWJpLT5tdGQtPnJlYWQodWJpLT5tdGQsIGFkZHIsIGxlbiwgJnJlYWQsIGJ1ZjEpOworCWlmIChlcnIgJiYgZXJyICE9IC1FVUNMRUFOKQorCQlnb3RvIG91dF9mcmVlOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXVpbnQ4X3QgYyA9ICgodWludDhfdCAqKWJ1ZilbaV07Ci0JCXVpbnQ4X3QgYzEgPSAoKHVpbnQ4X3QgKil1YmktPmRiZ19wZWJfYnVmKVtpXTsKKwkJdWludDhfdCBjMSA9ICgodWludDhfdCAqKWJ1ZjEpW2ldOwogCQlpbnQgZHVtcF9sZW47CiAKIAkJaWYgKGMgPT0gYzEpCkBAIC0xMzE5LDE3ICsxMzc0LDE3IEBACiAJCXViaV9tc2coImhleCBkdW1wIG9mIHRoZSByZWFkIGJ1ZmZlciBmcm9tICVkIHRvICVkIiwKIAkJCWksIGkgKyBkdW1wX2xlbik7CiAJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDMyLCAxLAotCQkJICAgICAgIHViaS0+ZGJnX3BlYl9idWYgKyBpLCBkdW1wX2xlbiwgMSk7CisJCQkgICAgICAgYnVmMSArIGksIGR1bXBfbGVuLCAxKTsKIAkJdWJpX2RiZ19kdW1wX3N0YWNrKCk7CiAJCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXRfZnJlZTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZ1YmktPmRiZ19idWZfbXV0ZXgpOwogCisJdmZyZWUoYnVmMSk7CiAJcmV0dXJuIDA7CiAKLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZ1YmktPmRiZ19idWZfbXV0ZXgpOworb3V0X2ZyZWU6CisJdmZyZWUoYnVmMSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTM0OCwzNiArMTQwMyw0NCBAQAogewogCXNpemVfdCByZWFkOwogCWludCBlcnI7CisJdm9pZCAqYnVmOwogCWxvZmZfdCBhZGRyID0gKGxvZmZfdClwbnVtICogdWJpLT5wZWJfc2l6ZSArIG9mZnNldDsKIAotCW11dGV4X2xvY2soJnViaS0+ZGJnX2J1Zl9tdXRleCk7Ci0JZXJyID0gdWJpLT5tdGQtPnJlYWQodWJpLT5tdGQsIGFkZHIsIGxlbiwgJnJlYWQsIHViaS0+ZGJnX3BlYl9idWYpOworCWlmICghKHViaV9jaGtfZmxhZ3MgJiBVQklfQ0hLX0lPKSkKKwkJcmV0dXJuIDA7CisKKwlidWYgPSBfX3ZtYWxsb2MobGVuLCBHRlBfS0VSTkVMIHwgR0ZQX05PRlMsIFBBR0VfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQl1YmlfZXJyKCJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IHRvIGNoZWNrIGZvciAweEZGcyIpOworCQlyZXR1cm4gMDsKKwl9CisKKwllcnIgPSB1YmktPm10ZC0+cmVhZCh1YmktPm10ZCwgYWRkciwgbGVuLCAmcmVhZCwgYnVmKTsKIAlpZiAoZXJyICYmIGVyciAhPSAtRVVDTEVBTikgewogCQl1YmlfZXJyKCJlcnJvciAlZCB3aGlsZSByZWFkaW5nICVkIGJ5dGVzIGZyb20gUEVCICVkOiVkLCAiCiAJCQkicmVhZCAlemQgYnl0ZXMiLCBlcnIsIGxlbiwgcG51bSwgb2Zmc2V0LCByZWFkKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSB1YmlfY2hlY2tfcGF0dGVybih1YmktPmRiZ19wZWJfYnVmLCAweEZGLCBsZW4pOworCWVyciA9IHViaV9jaGVja19wYXR0ZXJuKGJ1ZiwgMHhGRiwgbGVuKTsKIAlpZiAoZXJyID09IDApIHsKIAkJdWJpX2VycigiZmxhc2ggcmVnaW9uIGF0IFBFQiAlZDolZCwgbGVuZ3RoICVkIGRvZXMgbm90ICIKIAkJCSJjb250YWluIGFsbCAweEZGIGJ5dGVzIiwgcG51bSwgb2Zmc2V0LCBsZW4pOwogCQlnb3RvIGZhaWw7CiAJfQotCW11dGV4X3VubG9jaygmdWJpLT5kYmdfYnVmX211dGV4KTsKIAorCXZmcmVlKGJ1Zik7CiAJcmV0dXJuIDA7CiAKIGZhaWw6CiAJdWJpX2VycigicGFyYW5vaWQgY2hlY2sgZmFpbGVkIGZvciBQRUIgJWQiLCBwbnVtKTsKIAl1YmlfbXNnKCJoZXggZHVtcCBvZiB0aGUgJWQtJWQgcmVnaW9uIiwgb2Zmc2V0LCBvZmZzZXQgKyBsZW4pOwotCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDMyLCAxLAotCQkgICAgICAgdWJpLT5kYmdfcGViX2J1ZiwgbGVuLCAxKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAzMiwgMSwgYnVmLCBsZW4sIDEpOwogCWVyciA9IC1FSU5WQUw7CiBlcnJvcjoKIAl1YmlfZGJnX2R1bXBfc3RhY2soKTsKLQltdXRleF91bmxvY2soJnViaS0+ZGJnX2J1Zl9tdXRleCk7CisJdmZyZWUoYnVmKTsKIAlyZXR1cm4gZXJyOwogfQogCi0jZW5kaWYgLyogQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQgKi8KKyNlbmRpZiAvKiBDT05GSUdfTVREX1VCSV9ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2thcGkuYyBiL2RyaXZlcnMvbXRkL3ViaS9rYXBpLmMKaW5kZXggNjlmYTRlZjAuLmQzOTcxNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9rYXBpLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2thcGkuYwpAQCAtNDAsNyArNDAsOSBAQAogewogCWRpLT51YmlfbnVtID0gdWJpLT51YmlfbnVtOwogCWRpLT5sZWJfc2l6ZSA9IHViaS0+bGViX3NpemU7CisJZGktPmxlYl9zdGFydCA9IHViaS0+bGViX3N0YXJ0OwogCWRpLT5taW5faW9fc2l6ZSA9IHViaS0+bWluX2lvX3NpemU7CisJZGktPm1heF93cml0ZV9zaXplID0gdWJpLT5tYXhfd3JpdGVfc2l6ZTsKIAlkaS0+cm9fbW9kZSA9IHViaS0+cm9fbW9kZTsKIAlkaS0+Y2RldiA9IHViaS0+Y2Rldi5kZXY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwppbmRleCA3OWNhMzA0Li4xMWViOGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKQEAgLTM5LDMyICszOSw0NiBAQAogICogZXJhc2VibG9ja3MgYXJlIHB1dCB0byB0aGUgQGZyZWUgbGlzdCBhbmQgdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgdG8gYmUKICAqIGVyYXNlZCBhcmUgcHV0IHRvIHRoZSBAZXJhc2UgbGlzdC4KICAqCisgKiBBYm91dCBjb3JydXB0aW9ucworICogfn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBVQkkgcHJvdGVjdHMgRUMgYW5kIFZJRCBoZWFkZXJzIHdpdGggQ1JDLTMyIGNoZWNrc3Vtcywgc28gaXQgY2FuIGRldGVjdAorICogd2hldGhlciB0aGUgaGVhZGVycyBhcmUgY29ycnVwdGVkIG9yIG5vdC4gU29tZXRpbWVzIFVCSSBhbHNvIHByb3RlY3RzIHRoZQorICogZGF0YSB3aXRoIENSQy0zMiwgZS5nLiwgd2hlbiBpdCBleGVjdXRlcyB0aGUgYXRvbWljIExFQiBjaGFuZ2Ugb3BlcmF0aW9uLCBvcgorICogd2hlbiBpdCBtb3ZlcyB0aGUgY29udGVudHMgb2YgYSBQRUIgZm9yIHdlYXItbGV2ZWxpbmcgcHVycG9zZXMuCisgKgogICogVUJJIHRyaWVzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gMiB0eXBlcyBvZiBjb3JydXB0aW9ucy4KLSAqIDEuIENvcnJ1cHRpb25zIGNhdXNlZCBieSBwb3dlciBjdXRzLiBUaGVzZSBhcmUgaGFybWxlc3MgYW5kIGV4cGVjdGVkCi0gKiAgICBjb3JydXB0aW9ucyBhbmQgVUJJIHRyaWVzIHRvIGhhbmRsZSB0aGVtIGdyYWNlZnVsbHksIHdpdGhvdXQgcHJpbnRpbmcgdG9vCi0gKiAgICBtYW55IHdhcm5pbmdzIGFuZCBlcnJvciBtZXNzYWdlcy4gVGhlIGlkZWEgaXMgdGhhdCB3ZSBkbyBub3QgbG9zZQotICogICAgaW1wb3J0YW50IGRhdGEgaW4gdGhlc2UgY2FzZSAtIHdlIG1heSBsb3NlIG9ubHkgdGhlIGRhdGEgd2hpY2ggd2FzIGJlaW5nCi0gKiAgICB3cml0dGVuIHRvIHRoZSBtZWRpYSBqdXN0IGJlZm9yZSB0aGUgcG93ZXIgY3V0IGhhcHBlbmVkLCBhbmQgdGhlIHVwcGVyCi0gKiAgICBsYXllcnMgKGUuZy4sIFVCSUZTKSBhcmUgc3VwcG9zZWQgdG8gaGFuZGxlIHRoZXNlIHNpdHVhdGlvbnMuIFVCSSBwdXRzCi0gKiAgICB0aGVzZSBQRUJzIHRvIHRoZSBoZWFkIG9mIHRoZSBAZXJhc2UgbGlzdCBhbmQgdGhleSBhcmUgc2NoZWR1bGVkIGZvcgotICogICAgZXJhc3VyZS4KKyAqCisgKiAxLiBDb3JydXB0aW9ucyBjYXVzZWQgYnkgcG93ZXIgY3V0cy4gVGhlc2UgYXJlIGV4cGVjdGVkIGNvcnJ1cHRpb25zIGFuZCBVQkkKKyAqIHRyaWVzIHRvIGhhbmRsZSB0aGVtIGdyYWNlZnVsbHksIHdpdGhvdXQgcHJpbnRpbmcgdG9vIG1hbnkgd2FybmluZ3MgYW5kCisgKiBlcnJvciBtZXNzYWdlcy4gVGhlIGlkZWEgaXMgdGhhdCB3ZSBkbyBub3QgbG9zZSBpbXBvcnRhbnQgZGF0YSBpbiB0aGVzZSBjYXNlCisgKiAtIHdlIG1heSBsb3NlIG9ubHkgdGhlIGRhdGEgd2hpY2ggd2FzIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIG1lZGlhIGp1c3QgYmVmb3JlCisgKiB0aGUgcG93ZXIgY3V0IGhhcHBlbmVkLCBhbmQgdGhlIHVwcGVyIGxheWVycyAoZS5nLiwgVUJJRlMpIGFyZSBzdXBwb3NlZCB0bworICogaGFuZGxlIHN1Y2ggZGF0YSBsb3NzZXMgKGUuZy4sIGJ5IHVzaW5nIHRoZSBGUyBqb3VybmFsKS4KKyAqCisgKiBXaGVuIFVCSSBkZXRlY3RzIGEgY29ycnVwdGlvbiAoQ1JDLTMyIG1pc21hdGNoKSBpbiBhIFBFQiwgYW5kIGl0IGxvb2tzIGxpa2UKKyAqIHRoZSByZWFzb24gaXMgYSBwb3dlciBjdXQsIFVCSSBwdXRzIHRoaXMgUEVCIHRvIHRoZSBAZXJhc2UgbGlzdCwgYW5kIGFsbAorICogUEVCcyBpbiB0aGUgQGVyYXNlIGxpc3QgYXJlIHNjaGVkdWxlZCBmb3IgZXJhc3VyZSBsYXRlci4KICAqCiAgKiAyLiBVbmV4cGVjdGVkIGNvcnJ1cHRpb25zIHdoaWNoIGFyZSBub3QgY2F1c2VkIGJ5IHBvd2VyIGN1dHMuIER1cmluZwotICogICAgc2Nhbm5pbmcsIHN1Y2ggUEVCcyBhcmUgcHV0IHRvIHRoZSBAY29yciBsaXN0IGFuZCBVQkkgcHJlc2VydmVzIHRoZW0uCi0gKiAgICBPYnZpb3VzbHksIHRoaXMgbGVzc2VucyB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBQRUJzLCBhbmQgaWYgYXQgc29tZQotICogICAgcG9pbnQgVUJJIHJ1bnMgb3V0IG9mIGZyZWUgUEVCcywgaXQgc3dpdGNoZXMgdG8gUi9PIG1vZGUuIFVCSSBhbHNvIGxvdWRseQotICogICAgaW5mb3JtcyBhYm91dCBzdWNoIFBFQnMgZXZlcnkgdGltZSB0aGUgTVREIGRldmljZSBpcyBhdHRhY2hlZC4KKyAqIHNjYW5uaW5nLCBzdWNoIFBFQnMgYXJlIHB1dCB0byB0aGUgQGNvcnIgbGlzdCBhbmQgVUJJIHByZXNlcnZlcyB0aGVtLgorICogT2J2aW91c2x5LCB0aGlzIGxlc3NlbnMgdGhlIGFtb3VudCBvZiBhdmFpbGFibGUgUEVCcywgYW5kIGlmIGF0IHNvbWUgIHBvaW50CisgKiBVQkkgcnVucyBvdXQgb2YgZnJlZSBQRUJzLCBpdCBzd2l0Y2hlcyB0byBSL08gbW9kZS4gVUJJIGFsc28gbG91ZGx5IGluZm9ybXMKKyAqIGFib3V0IHN1Y2ggUEVCcyBldmVyeSB0aW1lIHRoZSBNVEQgZGV2aWNlIGlzIGF0dGFjaGVkLgogICoKICAqIEhvd2V2ZXIsIGl0IGlzIGRpZmZpY3VsdCB0byByZWxpYWJseSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZXNlIHR5cGVzIG9mCi0gKiBjb3JydXB0aW9ucyBhbmQgVUJJJ3Mgc3RyYXRlZ3kgaXMgYXMgZm9sbG93cy4gVUJJIGFzc3VtZXMgKDIuKSBpZiB0aGUgVklECi0gKiBoZWFkZXIgaXMgY29ycnVwdGVkIGFuZCB0aGUgZGF0YSBhcmVhIGRvZXMgbm90IGNvbnRhaW4gYWxsIDB4RkZzLCBhbmQgdGhlcmUKLSAqIHdlcmUgbm90IGJpdC1mbGlwcyBvciBpbnRlZ3JpdHkgZXJyb3JzIHdoaWxlIHJlYWRpbmcgdGhlIGRhdGEgYXJlYS4gT3RoZXJ3aXNlCi0gKiBVQkkgYXNzdW1lcyAoMS4pLiBUaGUgYXNzdW1wdGlvbnMgYXJlOgotICogICBvIGlmIHRoZSBkYXRhIGFyZWEgY29udGFpbnMgb25seSAweEZGcywgdGhlcmUgaXMgbm8gZGF0YSwgYW5kIGl0IGlzIHNhZmUKLSAqICAgICB0byBqdXN0IGVyYXNlIHRoaXMgUEVCLgotICogICBvIGlmIHRoZSBkYXRhIGFyZWEgaGFzIGJpdC1mbGlwcyBhbmQgZGF0YSBpbnRlZ3JpdHkgZXJyb3JzIChFQ0MgZXJyb3JzIG9uCisgKiBjb3JydXB0aW9ucyBhbmQgVUJJJ3Mgc3RyYXRlZ3kgaXMgYXMgZm9sbG93cy4gVUJJIGFzc3VtZXMgY29ycnVwdGlvbiB0eXBlIDIKKyAqIGlmIHRoZSBWSUQgaGVhZGVyIGlzIGNvcnJ1cHRlZCBhbmQgdGhlIGRhdGEgYXJlYSBkb2VzIG5vdCBjb250YWluIGFsbCAweEZGcywKKyAqIGFuZCB0aGVyZSB3ZXJlIG5vIGJpdC1mbGlwcyBvciBpbnRlZ3JpdHkgZXJyb3JzIHdoaWxlIHJlYWRpbmcgdGhlIGRhdGEgYXJlYS4KKyAqIE90aGVyd2lzZSBVQkkgYXNzdW1lcyBjb3JydXB0aW9uIHR5cGUgMS4gU28gdGhlIGRlY2lzaW9uIGNyaXRlcmlhIGFyZSBhcworICogZm9sbG93cy4KKyAqICAgbyBJZiB0aGUgZGF0YSBhcmVhIGNvbnRhaW5zIG9ubHkgMHhGRnMsIHRoZXJlIGlzIG5vIGRhdGEsIGFuZCBpdCBpcyBzYWZlCisgKiAgICAgdG8ganVzdCBlcmFzZSB0aGlzIFBFQiAtIHRoaXMgaXMgY29ycnVwdGlvbiB0eXBlIDEuCisgKiAgIG8gSWYgdGhlIGRhdGEgYXJlYSBoYXMgYml0LWZsaXBzIG9yIGRhdGEgaW50ZWdyaXR5IGVycm9ycyAoRUNDIGVycm9ycyBvbgogICogICAgIE5BTkQpLCBpdCBpcyBwcm9iYWJseSBhIFBFQiB3aGljaCB3YXMgYmVpbmcgZXJhc2VkIHdoZW4gcG93ZXIgY3V0Ci0gKiAgICAgaGFwcGVuZWQuCisgKiAgICAgaGFwcGVuZWQsIHNvIHRoaXMgaXMgY29ycnVwdGlvbiB0eXBlIDEuIEhvd2V2ZXIsIHRoaXMgaXMganVzdCBhIGd1ZXNzLAorICogICAgIHdoaWNoIG1pZ2h0IGJlIHdyb25nLgorICogICBvIE90aGVyd2lzZSB0aGlzIGl0IGNvcnJ1cHRpb24gdHlwZSAyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTc0LDcgKzg4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlICJ1YmkuaCIKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECisjaWZkZWYgQ09ORklHX01URF9VQklfREVCVUcKIHN0YXRpYyBpbnQgcGFyYW5vaWRfY2hlY2tfc2koc3RydWN0IHViaV9kZXZpY2UgKnViaSwgc3RydWN0IHViaV9zY2FuX2luZm8gKnNpKTsKICNlbHNlCiAjZGVmaW5lIHBhcmFub2lkX2NoZWNrX3NpKHViaSwgc2kpIDAKQEAgLTExNSw3ICsxMjksNyBAQAogCX0gZWxzZQogCQlCVUcoKTsKIAotCXNlYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Ymlfc2Nhbl9sZWIpLCBHRlBfS0VSTkVMKTsKKwlzZWIgPSBrbWVtX2NhY2hlX2FsbG9jKHNpLT5zY2FuX2xlYl9zbGFiLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNlYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE0NCw3ICsxNTgsNyBAQAogCiAJZGJnX2JsZCgiYWRkIHRvIGNvcnJ1cHRlZDogUEVCICVkLCBFQyAlZCIsIHBudW0sIGVjKTsKIAotCXNlYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Ymlfc2Nhbl9sZWIpLCBHRlBfS0VSTkVMKTsKKwlzZWIgPSBrbWVtX2NhY2hlX2FsbG9jKHNpLT5zY2FuX2xlYl9zbGFiLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNlYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTU1Myw3ICs1NjcsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlzZWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdWJpX3NjYW5fbGViKSwgR0ZQX0tFUk5FTCk7CisJc2ViID0ga21lbV9jYWNoZV9hbGxvYyhzaS0+c2Nhbl9sZWJfc2xhYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZWIpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMTUyLDkgKzExNjYsMTUgQEAKIAlzaS0+dm9sdW1lcyA9IFJCX1JPT1Q7CiAKIAllcnIgPSAtRU5PTUVNOworCXNpLT5zY2FuX2xlYl9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInViaV9zY2FuX2xlYl9zbGFiIiwKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1Ymlfc2Nhbl9sZWIpLAorCQkJCQkgICAgICAwLCAwLCBOVUxMKTsKKwlpZiAoIXNpLT5zY2FuX2xlYl9zbGFiKQorCQlnb3RvIG91dF9zaTsKKwogCWVjaCA9IGt6YWxsb2ModWJpLT5lY19oZHJfYWxzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVjaCkKLQkJZ290byBvdXRfc2k7CisJCWdvdG8gb3V0X3NsYWI7CiAKIAl2aWRoID0gdWJpX3phbGxvY192aWRfaGRyKHViaSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2aWRoKQpAQCAtMTIxNSw2ICsxMjM1LDggQEAKIAl1YmlfZnJlZV92aWRfaGRyKHViaSwgdmlkaCk7CiBvdXRfZWNoOgogCWtmcmVlKGVjaCk7CitvdXRfc2xhYjoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc2ktPnNjYW5fbGViX3NsYWIpOwogb3V0X3NpOgogCXViaV9zY2FuX2Rlc3Ryb3lfc2koc2kpOwogCXJldHVybiBFUlJfUFRSKGVycik7CkBAIC0xMjIzLDExICsxMjQ1LDEyIEBACiAvKioKICAqIGRlc3Ryb3lfc3YgLSBmcmVlIHRoZSBzY2FubmluZyB2b2x1bWUgaW5mb3JtYXRpb24KICAqIEBzdjogc2Nhbm5pbmcgdm9sdW1lIGluZm9ybWF0aW9uCisgKiBAc2k6IHNjYW5uaW5nIGluZm9ybWF0aW9uCiAgKgogICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyB0aGUgdm9sdW1lIFJCLXRyZWUgKEBzdi0+cm9vdCkgYW5kIHRoZSBzY2FubmluZwogICogdm9sdW1lIGluZm9ybWF0aW9uLgogICovCi1zdGF0aWMgdm9pZCBkZXN0cm95X3N2KHN0cnVjdCB1Ymlfc2Nhbl92b2x1bWUgKnN2KQorc3RhdGljIHZvaWQgZGVzdHJveV9zdihzdHJ1Y3QgdWJpX3NjYW5faW5mbyAqc2ksIHN0cnVjdCB1Ymlfc2Nhbl92b2x1bWUgKnN2KQogewogCXN0cnVjdCB1Ymlfc2Nhbl9sZWIgKnNlYjsKIAlzdHJ1Y3QgcmJfbm9kZSAqdGhpcyA9IHN2LT5yb290LnJiX25vZGU7CkBAIC0xMjQ3LDcgKzEyNzAsNyBAQAogCQkJCQl0aGlzLT5yYl9yaWdodCA9IE5VTEw7CiAJCQl9CiAKLQkJCWtmcmVlKHNlYik7CisJCQlrbWVtX2NhY2hlX2ZyZWUoc2ktPnNjYW5fbGViX3NsYWIsIHNlYik7CiAJCX0KIAl9CiAJa2ZyZWUoc3YpOwpAQCAtMTI2NSwxOSArMTI4OCwxOSBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlYiwgc2ViX3RtcCwgJnNpLT5hbGllbiwgdS5saXN0KSB7CiAJCWxpc3RfZGVsKCZzZWItPnUubGlzdCk7Ci0JCWtmcmVlKHNlYik7CisJCWttZW1fY2FjaGVfZnJlZShzaS0+c2Nhbl9sZWJfc2xhYiwgc2ViKTsKIAl9CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlYiwgc2ViX3RtcCwgJnNpLT5lcmFzZSwgdS5saXN0KSB7CiAJCWxpc3RfZGVsKCZzZWItPnUubGlzdCk7Ci0JCWtmcmVlKHNlYik7CisJCWttZW1fY2FjaGVfZnJlZShzaS0+c2Nhbl9sZWJfc2xhYiwgc2ViKTsKIAl9CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlYiwgc2ViX3RtcCwgJnNpLT5jb3JyLCB1Lmxpc3QpIHsKIAkJbGlzdF9kZWwoJnNlYi0+dS5saXN0KTsKLQkJa2ZyZWUoc2ViKTsKKwkJa21lbV9jYWNoZV9mcmVlKHNpLT5zY2FuX2xlYl9zbGFiLCBzZWIpOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2ViLCBzZWJfdG1wLCAmc2ktPmZyZWUsIHUubGlzdCkgewogCQlsaXN0X2RlbCgmc2ViLT51Lmxpc3QpOwotCQlrZnJlZShzZWIpOworCQlrbWVtX2NhY2hlX2ZyZWUoc2ktPnNjYW5fbGViX3NsYWIsIHNlYik7CiAJfQogCiAJLyogRGVzdHJveSB0aGUgdm9sdW1lIFJCLXRyZWUgKi8KQEAgLTEyOTgsMTQgKzEzMjEsMTUgQEAKIAkJCQkJcmItPnJiX3JpZ2h0ID0gTlVMTDsKIAkJCX0KIAotCQkJZGVzdHJveV9zdihzdik7CisJCQlkZXN0cm95X3N2KHNpLCBzdik7CiAJCX0KIAl9CiAKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc2ktPnNjYW5fbGViX3NsYWIpOwogCWtmcmVlKHNpKTsKIH0KIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECisjaWZkZWYgQ09ORklHX01URF9VQklfREVCVUcKIAogLyoqCiAgKiBwYXJhbm9pZF9jaGVja19zaSAtIGNoZWNrIHRoZSBzY2FubmluZyBpbmZvcm1hdGlvbi4KQEAgLTEzMjMsNiArMTM0Nyw5IEBACiAJc3RydWN0IHViaV9zY2FuX2xlYiAqc2ViLCAqbGFzdF9zZWI7CiAJdWludDhfdCAqYnVmOwogCisJaWYgKCEodWJpX2Noa19mbGFncyAmIFVCSV9DSEtfR0VOKSkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIEF0IGZpcnN0LCBjaGVjayB0aGF0IHNjYW5uaW5nIGluZm9ybWF0aW9uIGlzIE9LLgogCSAqLwpAQCAtMTU3NSw0ICsxNjAyLDQgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lEICovCisjZW5kaWYgLyogQ09ORklHX01URF9VQklfREVCVUcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmggYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCmluZGV4IGEzMjY0ZjAuLmQ0OGFlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uaApAQCAtMTA5LDYgKzEwOSw3IEBACiAgKiBAbWVhbl9lYzogbWVhbiBlcmFzZSBjb3VudGVyIHZhbHVlCiAgKiBAZWNfc3VtOiBhIHRlbXBvcmFyeSB2YXJpYWJsZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgQG1lYW5fZWMKICAqIEBlY19jb3VudDogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCisgKiBAc2Nhbl9sZWJfc2xhYjogc2xhYiBjYWNoZSBmb3IgJnN0cnVjdCB1Ymlfc2Nhbl9sZWIgb2JqZWN0cwogICoKICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlc3VsdCBvZiBzY2FubmluZyBhbmQgbWF5IGJlIHVzZWQgYnkgb3RoZXIKICAqIFVCSSBzdWItc3lzdGVtcyB0byBidWlsZCBmaW5hbCBVQkkgZGF0YSBzdHJ1Y3R1cmVzLCBmdXJ0aGVyIGVycm9yLXJlY292ZXJ5CkBAIC0xMzQsNiArMTM1LDcgQEAKIAlpbnQgbWVhbl9lYzsKIAl1aW50NjRfdCBlY19zdW07CiAJaW50IGVjX2NvdW50OworCXN0cnVjdCBrbWVtX2NhY2hlICpzY2FuX2xlYl9zbGFiOwogfTsKIAogc3RydWN0IHViaV9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvdWJpLmggYi9kcml2ZXJzL210ZC91YmkvdWJpLmgKaW5kZXggMGIwMTQ5Yy4uZjFiZThiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3ViaS5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS91YmkuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC91YmkuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiAjaW5jbHVkZSAidWJpLW1lZGlhLmgiCiAjaW5jbHVkZSAic2Nhbi5oIgpAQCAtMzgxLDE0ICszODIsMTQgQEAKICAqIEBiYWRfYWxsb3dlZDogd2hldGhlciB0aGUgTVREIGRldmljZSBhZG1pdHMgb2YgYmFkIHBoeXNpY2FsIGVyYXNlYmxvY2tzIG9yCiAgKiAgICAgICAgICAgICAgIG5vdAogICogQG5vcl9mbGFzaDogbm9uLXplcm8gaWYgd29ya2luZyBvbiB0b3Agb2YgTk9SIGZsYXNoCisgKiBAbWF4X3dyaXRlX3NpemU6IG1heGltdW0gYW1vdW50IG9mIGJ5dGVzIHRoZSB1bmRlcmx5aW5nIGZsYXNoIGNhbiB3cml0ZSBhdCBhCisgKiAgICAgICAgICAgICAgICAgIHRpbWUgKE1URCB3cml0ZSBidWZmZXIgc2l6ZSkKICAqIEBtdGQ6IE1URCBkZXZpY2UgZGVzY3JpcHRvcgogICoKICAqIEBwZWJfYnVmMTogYSBidWZmZXIgb2YgUEVCIHNpemUgdXNlZCBmb3IgZGlmZmVyZW50IHB1cnBvc2VzCiAgKiBAcGViX2J1ZjI6IGFub3RoZXIgYnVmZmVyIG9mIFBFQiBzaXplIHVzZWQgZm9yIGRpZmZlcmVudCBwdXJwb3NlcwogICogQGJ1Zl9tdXRleDogcHJvdGVjdHMgQHBlYl9idWYxIGFuZCBAcGViX2J1ZjIKICAqIEBja3ZvbF9tdXRleDogc2VyaWFsaXplcyBzdGF0aWMgdm9sdW1lIGNoZWNraW5nIHdoZW4gb3BlbmluZwotICogQGRiZ19wZWJfYnVmOiBidWZmZXIgb2YgUEVCIHNpemUgdXNlZCBmb3IgZGVidWdnaW5nCi0gKiBAZGJnX2J1Zl9tdXRleDogcHJvdGVjdHMgQGRiZ19wZWJfYnVmCiAgKi8KIHN0cnVjdCB1YmlfZGV2aWNlIHsKIAlzdHJ1Y3QgY2RldiBjZGV2OwpAQCAtNDY0LDE2ICs0NjUsMTMgQEAKIAlpbnQgdmlkX2hkcl9zaGlmdDsKIAl1bnNpZ25lZCBpbnQgYmFkX2FsbG93ZWQ6MTsKIAl1bnNpZ25lZCBpbnQgbm9yX2ZsYXNoOjE7CisJaW50IG1heF93cml0ZV9zaXplOwogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwogCiAJdm9pZCAqcGViX2J1ZjE7CiAJdm9pZCAqcGViX2J1ZjI7CiAJc3RydWN0IG11dGV4IGJ1Zl9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY2t2b2xfbXV0ZXg7Ci0jaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKLQl2b2lkICpkYmdfcGViX2J1ZjsKLQlzdHJ1Y3QgbXV0ZXggZGJnX2J1Zl9tdXRleDsKLSNlbmRpZgogfTsKIAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICp1Ymlfd2xfZW50cnlfc2xhYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS92bXQuYyBiL2RyaXZlcnMvbXRkL3ViaS92bXQuYwppbmRleCBjNDc2MjBkLi5iNzllMGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvdm10LmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3ZtdC5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgInViaS5oIgogCi0jaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKKyNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVRwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja192b2x1bWVzKHN0cnVjdCB1YmlfZGV2aWNlICp1YmkpOwogI2Vsc2UKICNkZWZpbmUgcGFyYW5vaWRfY2hlY2tfdm9sdW1lcyh1YmkpIDAKQEAgLTcxMSw3ICs3MTEsNyBAQAogCXZvbHVtZV9zeXNmc19jbG9zZSh2b2wpOwogfQogCi0jaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKKyNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVRwogCiAvKioKICAqIHBhcmFub2lkX2NoZWNrX3ZvbHVtZSAtIGNoZWNrIHZvbHVtZSBpbmZvcm1hdGlvbi4KQEAgLTg3Niw2ICs4NzYsOSBAQAogewogCWludCBpLCBlcnIgPSAwOwogCisJaWYgKCEodWJpX2Noa19mbGFncyAmIFVCSV9DSEtfR0VOKSkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgdWJpLT52dGJsX3Nsb3RzOyBpKyspIHsKIAkJZXJyID0gcGFyYW5vaWRfY2hlY2tfdm9sdW1lKHViaSwgaSk7CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvdnRibC5jIGIvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYwppbmRleCAwYjgxNDFmLi5mZDNiZjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvdnRibC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMKQEAgLTYyLDcgKzYyLDcgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlICJ1YmkuaCIKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECisjaWZkZWYgQ09ORklHX01URF9VQklfREVCVUcKIHN0YXRpYyB2b2lkIHBhcmFub2lkX3Z0YmxfY2hlY2soY29uc3Qgc3RydWN0IHViaV9kZXZpY2UgKnViaSk7CiAjZWxzZQogI2RlZmluZSBwYXJhbm9pZF92dGJsX2NoZWNrKHViaSkKQEAgLTg2OCw3ICs4NjgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVR19QQVJBTk9JRAorI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHCiAKIC8qKgogICogcGFyYW5vaWRfdnRibF9jaGVjayAtIGNoZWNrIHZvbHVtZSB0YWJsZS4KQEAgLTg3NiwxMCArODc2LDEzIEBACiAgKi8KIHN0YXRpYyB2b2lkIHBhcmFub2lkX3Z0YmxfY2hlY2soY29uc3Qgc3RydWN0IHViaV9kZXZpY2UgKnViaSkKIHsKKwlpZiAoISh1YmlfY2hrX2ZsYWdzICYgVUJJX0NIS19HRU4pKQorCQlyZXR1cm47CisKIAlpZiAodnRibF9jaGVjayh1YmksIHViaS0+dnRibCkpIHsKIAkJdWJpX2VycigicGFyYW5vaWQgY2hlY2sgZmFpbGVkIik7CiAJCUJVRygpOwogCX0KIH0KIAotI2VuZGlmIC8qIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lEICovCisjZW5kaWYgLyogQ09ORklHX01URF9VQklfREVCVUcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS93bC5jIGIvZHJpdmVycy9tdGQvdWJpL3dsLmMKaW5kZXggNjU1YmJiZS4uYjRjZjU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3dsLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3dsLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWludCB0b3J0dXJlOwogfTsKIAotI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECisjaWZkZWYgQ09ORklHX01URF9VQklfREVCVUcKIHN0YXRpYyBpbnQgcGFyYW5vaWRfY2hlY2tfZWMoc3RydWN0IHViaV9kZXZpY2UgKnViaSwgaW50IHBudW0sIGludCBlYyk7CiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX2luX3dsX3RyZWUoc3RydWN0IHViaV93bF9lbnRyeSAqZSwKIAkJCQkgICAgIHN0cnVjdCByYl9yb290ICpyb290KTsKQEAgLTYxMyw3ICs2MTMsNyBAQAogCWxpc3RfYWRkX3RhaWwoJndyay0+bGlzdCwgJnViaS0+d29ya3MpOwogCXViaV9hc3NlcnQodWJpLT53b3Jrc19jb3VudCA+PSAwKTsKIAl1YmktPndvcmtzX2NvdW50ICs9IDE7Ci0JaWYgKHViaS0+dGhyZWFkX2VuYWJsZWQpCisJaWYgKHViaS0+dGhyZWFkX2VuYWJsZWQgJiYgIXViaV9kYmdfaXNfYmd0X2Rpc2FibGVkKCkpCiAJCXdha2VfdXBfcHJvY2Vzcyh1YmktPmJndF90aHJlYWQpOwogCXNwaW5fdW5sb2NrKCZ1YmktPndsX2xvY2spOwogfQpAQCAtMTM2NCw3ICsxMzY0LDcgQEAKIAogCQlzcGluX2xvY2soJnViaS0+d2xfbG9jayk7CiAJCWlmIChsaXN0X2VtcHR5KCZ1YmktPndvcmtzKSB8fCB1YmktPnJvX21vZGUgfHwKLQkJCSAgICAgICAhdWJpLT50aHJlYWRfZW5hYmxlZCkgeworCQkgICAgIXViaS0+dGhyZWFkX2VuYWJsZWQgfHwgdWJpX2RiZ19pc19iZ3RfZGlzYWJsZWQoKSkgewogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCXNwaW5fdW5sb2NrKCZ1YmktPndsX2xvY2spOwogCQkJc2NoZWR1bGUoKTsKQEAgLTE1NjEsNyArMTU2MSw3IEBACiAJa2ZyZWUodWJpLT5sb29rdXB0YmwpOwogfQogCi0jaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKKyNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVRwogCiAvKioKICAqIHBhcmFub2lkX2NoZWNrX2VjIC0gbWFrZSBzdXJlIHRoYXQgdGhlIGVyYXNlIGNvdW50ZXIgb2YgYSBQRUIgaXMgY29ycmVjdC4KQEAgLTE1NzgsNiArMTU3OCw5IEBACiAJbG9uZyBsb25nIHJlYWRfZWM7CiAJc3RydWN0IHViaV9lY19oZHIgKmVjX2hkcjsKIAorCWlmICghKHViaV9jaGtfZmxhZ3MgJiBVQklfQ0hLX0dFTikpCisJCXJldHVybiAwOworCiAJZWNfaGRyID0ga3phbGxvYyh1YmktPmVjX2hkcl9hbHNpemUsIEdGUF9OT0ZTKTsKIAlpZiAoIWVjX2hkcikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNjE0LDYgKzE2MTcsOSBAQAogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja19pbl93bF90cmVlKHN0cnVjdCB1Ymlfd2xfZW50cnkgKmUsCiAJCQkJICAgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKIHsKKwlpZiAoISh1YmlfY2hrX2ZsYWdzICYgVUJJX0NIS19HRU4pKQorCQlyZXR1cm4gMDsKKwogCWlmIChpbl93bF90cmVlKGUsIHJvb3QpKQogCQlyZXR1cm4gMDsKIApAQCAtMTYzNiw2ICsxNjQyLDkgQEAKIAlzdHJ1Y3QgdWJpX3dsX2VudHJ5ICpwOwogCWludCBpOwogCisJaWYgKCEodWJpX2Noa19mbGFncyAmIFVCSV9DSEtfR0VOKSkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgVUJJX1BST1RfUVVFVUVfTEVOOyArK2kpCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnViaS0+cHFbaV0sIHUubGlzdCkKIAkJCWlmIChwID09IGUpCkBAIC0xNjQ2LDQgKzE2NTUsNSBAQAogCXViaV9kYmdfZHVtcF9zdGFjaygpOwogCXJldHVybiAtRUlOVkFMOwogfQotI2VuZGlmIC8qIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lEICovCisKKyNlbmRpZiAvKiBDT05GSUdfTVREX1VCSV9ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaCBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKaW5kZXggOWFiNTgwOS4uN2NiMzc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlfX2xlMzIJd29yZDM7CiB9OwogCi0vKiBSRkQgZGVzY2lwdG9yICovCisvKiBSRkQgZGVzY3JpcHRvciAqLwogc3RydWN0IGF0bDFjX3J4X2ZyZWVfZGVzYyB7CiAJX19sZTY0CWJ1ZmZlcl9hZGRyOwogfTsKQEAgLTUzMSw3ICs1MzEsNyBAQAogCXN0cnVjdCBhdGwxY19idWZmZXIgKmJ1ZmZlcl9pbmZvOwogfTsKIAotLyogcmVjZWl2ZSByZXR1cm4gZGVzY2lwdG9yIChycmQpIHJpbmcgKi8KKy8qIHJlY2VpdmUgcmV0dXJuIGRlc2NyaXB0b3IgKHJyZCkgcmluZyAqLwogc3RydWN0IGF0bDFjX3JyZF9yaW5nIHsKIAl2b2lkICpkZXNjOwkJLyogZGVzY3JpcHRvciByaW5nIHZpcnR1YWwgYWRkcmVzcyAqLwogCWRtYV9hZGRyX3QgZG1hOwkJLyogZGVzY3JpcHRvciByaW5nIHBoeXNpY2FsIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDFhNmU5ZWIuLjMzOGJlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMjEzMCw3ICsyMTMwLDcgQEAKIH0KIAogLyoKLSogRmlyc3QgcmVsZWFzZSBhIHNsYXZlIGFuZCB0aGFuIGRlc3Ryb3kgdGhlIGJvbmQgaWYgbm8gbW9yZSBzbGF2ZXMgYXJlIGxlZnQuCisqIEZpcnN0IHJlbGVhc2UgYSBzbGF2ZSBhbmQgdGhlbiBkZXN0cm95IHRoZSBib25kIGlmIG5vIG1vcmUgc2xhdmVzIGFyZSBsZWZ0LgogKiBNdXN0IGJlIHVuZGVyIHJ0bmxfbG9jayB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgogKi8KIHN0YXRpYyBpbnQgIGJvbmRfcmVsZWFzZV9hbmRfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYWlmL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FpZi9NYWtlZmlsZQppbmRleCBiMzhkOTg3Li45NTYwYjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYWlmL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2NhaWYvTWFrZWZpbGUKQEAgLTEsNiArMSw0IEBACi1pZmVxICgkKENPTkZJR19DQUlGX0RFQlVHKSx5KQotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKLWVuZGlmCitjY2ZsYWdzLSQoQ09ORklHX0NBSUZfREVCVUcpIDo9IC1EREVCVUcKIAogIyBTZXJpYWwgaW50ZXJmYWNlCiBvYmotJChDT05GSUdfQ0FJRl9UVFkpICs9IGNhaWZfc2VyaWFsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKaW5kZXggMTQwNTA3ODYuLjExMGVkYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jCkBAIC02MzMsOSArNjMzLDYgQEAKIHsKIAlzdHJ1Y3QgY19jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkvKiBlbmFibGUgc3RhdHVzIGNoYW5nZSwgZXJyb3IgYW5kIG1vZHVsZSBpbnRlcnJ1cHRzICovCi0JY19jYW5fZW5hYmxlX2FsbF9pbnRlcnJ1cHRzKHByaXYsIEVOQUJMRV9BTExfSU5URVJSVVBUUyk7Ci0KIAkvKiBiYXNpYyBjX2NhbiBjb25maWd1cmF0aW9uICovCiAJY19jYW5fY2hpcF9jb25maWcoZGV2KTsKIApAQCAtNjQzLDYgKzY0MCw5IEBACiAKIAkvKiByZXNldCB0eCBoZWxwZXIgcG9pbnRlcnMgKi8KIAlwcml2LT50eF9uZXh0ID0gcHJpdi0+dHhfZWNobyA9IDA7CisKKwkvKiBlbmFibGUgc3RhdHVzIGNoYW5nZSwgZXJyb3IgYW5kIG1vZHVsZSBpbnRlcnJ1cHRzICovCisJY19jYW5fZW5hYmxlX2FsbF9pbnRlcnJ1cHRzKHByaXYsIEVOQUJMRV9BTExfSU5URVJSVVBUUyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNfY2FuX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Z0bWFjMTAwLmMgYi9kcml2ZXJzL25ldC9mdG1hYzEwMC5jCmluZGV4IDFkNmY0YjguLmEzMTY2MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Z0bWFjMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZnRtYWMxMDAuYwpAQCAtMTEwMiw3ICsxMTAyLDcgQEAKIAkJZ290byBlcnJfcmVxX21lbTsKIAl9CiAKLQlwcml2LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOworCXByaXYtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFwcml2LT5iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGV0aGVybmV0IHJlZ2lzdGVyc1xuIik7CiAJCWVyciA9IC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggY2NiMjMxYy4uMmEwYWQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtOTQ5LDYgKzk0OSwxMSBAQAogCQkJKHB2ciA9PSAweDgwODYxMDEwICYmIChtb2QgJiAweGZmZjkpID09IDB4ODBjMCkpCiAJCXByaXYtPmVycmF0YSB8PSBHRkFSX0VSUkFUQV9BMDAyOwogCisJLyogTVBDODMxMyBSZXYgPCAyLjAsIE1QQzg1NDggcmV2IDIuMCAqLworCWlmICgocHZyID09IDB4ODA4NTAwMTAgJiYgbW9kID09IDB4ODBiMCAmJiByZXYgPCAweDAwMjApIHx8CisJCQkocHZyID09IDB4ODAyMTAwMjAgJiYgbW9kID09IDB4ODAzMCAmJiByZXYgPT0gMHgwMDIwKSkKKwkJcHJpdi0+ZXJyYXRhIHw9IEdGQVJfRVJSQVRBXzEyOworCiAJaWYgKHByaXYtPmVycmF0YSkKIAkJZGV2X2luZm8oZGV2LCAiZW5hYmxlZCBlcnJhdGEgd29ya2Fyb3VuZHMsIGZsYWdzOiAweCV4XG4iLAogCQkJIHByaXYtPmVycmF0YSk7CkBAIC0yMTU0LDggKzIxNTksMTUgQEAKIAkvKiBTZXQgdXAgY2hlY2tzdW1taW5nICovCiAJaWYgKENIRUNLU1VNX1BBUlRJQUwgPT0gc2tiLT5pcF9zdW1tZWQpIHsKIAkJZmNiID0gZ2Zhcl9hZGRfZmNiKHNrYik7Ci0JCWxzdGF0dXMgfD0gQkRfTEZMQUcoVFhCRF9UT0UpOwotCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKKwkJLyogYXMgc3BlY2lmaWVkIGJ5IGVycmF0YSAqLworCQlpZiAodW5saWtlbHkoZ2Zhcl9oYXNfZXJyYXRhKHByaXYsIEdGQVJfRVJSQVRBXzEyKQorCQkJICAgICAmJiAoKHVuc2lnbmVkIGxvbmcpZmNiICUgMHgyMCkgPiAweDE4KSkgeworCQkJX19za2JfcHVsbChza2IsIEdNQUNfRkNCX0xFTik7CisJCQlza2JfY2hlY2tzdW1faGVscChza2IpOworCQl9IGVsc2UgeworCQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX1RPRSk7CisJCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKKwkJfQogCX0KIAogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCA1NGRlNDEzLi5lYzVkNTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC0xMDM5LDYgKzEwMzksNyBAQAogCUdGQVJfRVJSQVRBXzc0CQk9IDB4MDEsCiAJR0ZBUl9FUlJBVEFfNzYJCT0gMHgwMiwKIAlHRkFSX0VSUkFUQV9BMDAyCT0gMHgwNCwKKwlHRkFSX0VSUkFUQV8xMgkJPSAweDA4LCAvKiBhLmsuYSBlcnJhdGEgZVRTRUM0OSAqLwogfTsKIAogLyogU3RydWN0IHN0b2xlbiBhbG1vc3QgY29tcGxldGVseSAoYW5kIHNoYW1lbGVzc2x5KSBmcm9tIHRoZSBGQ0MgZW5ldCBzb3VyY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCA1YjM3ZDNjLi43OGUzNGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCkBAIC0zOSw4ICszOSwxMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJdmxhbnM7CiAJc3RydWN0IHJjdV9oZWFkCQlyY3U7CiAJYm9vbCAJCQlwYXNzdGhydTsKKwlpbnQJCQljb3VudDsKIH07CiAKK3N0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCiAjZGVmaW5lIG1hY3ZsYW5fcG9ydF9nZXRfcmN1KGRldikgXAogCSgoc3RydWN0IG1hY3ZsYW5fcG9ydCAqKSByY3VfZGVyZWZlcmVuY2UoZGV2LT5yeF9oYW5kbGVyX2RhdGEpKQogI2RlZmluZSBtYWN2bGFuX3BvcnRfZ2V0KGRldikgKChzdHJ1Y3QgbWFjdmxhbl9wb3J0ICopIGRldi0+cnhfaGFuZGxlcl9kYXRhKQpAQCAtNDU3LDggKzQ2MCwxMyBAQAogc3RhdGljIHZvaWQgbWFjdmxhbl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSB2bGFuLT5wb3J0OwogCiAJZnJlZV9wZXJjcHUodmxhbi0+cGNwdV9zdGF0cyk7CisKKwlwb3J0LT5jb3VudCAtPSAxOworCWlmICghcG9ydC0+Y291bnQpCisJCW1hY3ZsYW5fcG9ydF9kZXN0cm95KHBvcnQtPmRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKm1hY3ZsYW5fZGV2X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC02OTEsMTIgKzY5OSwxMyBAQAogCQl2bGFuLT5tb2RlID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX01BQ1ZMQU5fTU9ERV0pOwogCiAJaWYgKHZsYW4tPm1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7Ci0JCWlmICghbGlzdF9lbXB0eSgmcG9ydC0+dmxhbnMpKQorCQlpZiAocG9ydC0+Y291bnQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcG9ydC0+cGFzc3RocnUgPSB0cnVlOwogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgbG93ZXJkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJfQogCisJcG9ydC0+Y291bnQgKz0gMTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBkZXN0cm95X3BvcnQ7CkBAIC03MDcsNyArNzE2LDggQEAKIAlyZXR1cm4gMDsKIAogZGVzdHJveV9wb3J0OgotCWlmIChsaXN0X2VtcHR5KCZwb3J0LT52bGFucykpCisJcG9ydC0+Y291bnQgLT0gMTsKKwlpZiAoIXBvcnQtPmNvdW50KQogCQltYWN2bGFuX3BvcnRfZGVzdHJveShsb3dlcmRldik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNzI1LDEzICs3MzUsOSBAQAogdm9pZCBtYWN2bGFuX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSB2bGFuLT5wb3J0OwogCiAJbGlzdF9kZWwoJnZsYW4tPmxpc3QpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmcG9ydC0+dmxhbnMpKQotCQltYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWFjdmxhbl9kZWxsaW5rKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCA0MGZhNTllLi4zMjY3OGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtOTUwMSw3ICs5NTAxLDcgQEAKIAlzdHJ1Y3Qgbml1X3BhcmVudCAqcDsKIAlpbnQgaTsKIAotCXBsYXRfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibml1Iiwgbml1X3BhcmVudF9pbmRleCwKKwlwbGF0X2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm5pdS1ib2FyZCIsIG5pdV9wYXJlbnRfaW5kZXgsCiAJCQkJCQkgICBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKHBsYXRfZGV2KSkKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jIGIvZHJpdmVycy9uZXQvcHBwX2RlZmxhdGUuYwppbmRleCA0MzU4MzMwLi4zMWU5NDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9kZWZsYXRlLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCiAJc3RhdGUtPnN0cm0ubmV4dF9pbiAgID0gTlVMTDsKIAlzdGF0ZS0+d19zaXplICAgICAgICAgPSB3X3NpemU7Ci0Jc3RhdGUtPnN0cm0ud29ya3NwYWNlID0gdm1hbGxvYyh6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKKwlzdGF0ZS0+c3RybS53b3Jrc3BhY2UgPSB2bWFsbG9jKHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKC13X3NpemUsIDgpKTsKIAlpZiAoc3RhdGUtPnN0cm0ud29ya3NwYWNlID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwppbmRleCAyZDIxYzYwLi4zNDhiNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCkBAIC0yNDYwLDcgKzI0NjAsNyBAQAogICogVGhlIDMwMzIgc3VwcG9ydHMgc2dsaXN0cyBieSB1c2luZyB0aGUgMyBhZGRyL2xlbiBwYWlycyAoQUxQKQogICogaW4gdGhlIElPQ0IgcGx1cyBhIGNoYWluIG9mIG91dGJvdW5kIGFkZHJlc3MgbGlzdHMgKE9BTCkgdGhhdAogICogZWFjaCBjb250YWluIDUgQUxQcy4gIFRoZSBsYXN0IEFMUCBvZiB0aGUgSU9DQiAoM3JkKSBvciBPQUwgKDV0aCkKLSAqIHdpbGwgdXNlZCB0byBwb2ludCB0byBhbiBPQUwgd2hlbiBtb3JlIEFMUCBlbnRyaWVzIGFyZSByZXF1aXJlZC4KKyAqIHdpbGwgYmUgdXNlZCB0byBwb2ludCB0byBhbiBPQUwgd2hlbiBtb3JlIEFMUCBlbnRyaWVzIGFyZSByZXF1aXJlZC4KICAqIFRoZSBJT0NCIGlzIGFsd2F5cyB0aGUgdG9wIG9mIHRoZSBjaGFpbiBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZQogICogT0FMcyAod2hlbiBuZWNlc3NhcnkpLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCA1ZTQwMzUxLi40OTNiMGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTI2ODUsOSArMjY4NSw5IEBACiAJcnRsODE2OV9zZXRfc3BlZWQoZGV2LCBBVVRPTkVHX0VOQUJMRSwgU1BFRURfMTAwMCwgRFVQTEVYX0ZVTEwsCiAJCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAogCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAotCQl0cC0+bWlpLnN1cHBvcnRzX2dtaWkgPworCQkodHAtPm1paS5zdXBwb3J0c19nbWlpID8KIAkJCUFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAotCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCA6IDApOworCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCA6IDApKTsKIAogCWlmIChSVExfUjgoUEhZc3RhdHVzKSAmIFRCSV9FbmFibGUpCiAJCW5ldGlmX2luZm8odHAsIGxpbmssIGRldiwgIlRCSSBhdXRvLW5lZ290aWF0aW5nXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Jpb25ldC5jIGIvZHJpdmVycy9uZXQvcmlvbmV0LmMKaW5kZXggNDQxNTBmMi4uMjZhZmJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcmlvbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvcmlvbmV0LmMKQEAgLTM4Miw3ICszODIsNyBAQAogCXN0cnVjdCByaW9uZXRfcGVlciAqcGVlciwgKnRtcDsKIAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcmlvbmV0X2FjdGl2ZSwgcmRldi0+bmV0LT5ocG9ydC0+c3lzX3NpemUgPwotCQkJCQlfX2lsb2cyKHNpemVvZih2b2lkICopKSArIDQgOiAwKTsKKwkJCQkJX19mbHMoc2l6ZW9mKHZvaWQgKikpICsgNCA6IDApOwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwogCkBAIC00NTAsNyArNDUwLDcgQEAKIAl9CiAKIAlyaW9uZXRfYWN0aXZlID0gKHN0cnVjdCByaW9fZGV2ICoqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKLQkJCW1wb3J0LT5zeXNfc2l6ZSA/IF9faWxvZzIoc2l6ZW9mKHZvaWQgKikpICsgNCA6IDApOworCQkJbXBvcnQtPnN5c19zaXplID8gX19mbHMoc2l6ZW9mKHZvaWQgKikpICsgNCA6IDApOwogCWlmICghcmlvbmV0X2FjdGl2ZSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtNTcxLDUgKzU3MSw1IEBACiAJcmlvX3VucmVnaXN0ZXJfZHJpdmVyKCZyaW9uZXRfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQocmlvbmV0X2luaXQpOworbGF0ZV9pbml0Y2FsbChyaW9uZXRfaW5pdCk7CiBtb2R1bGVfZXhpdChyaW9uZXRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvc2tmcC9NYWtlZmlsZQppbmRleCBjYjIzNTgwLi5iMGJlMDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvTWFrZWZpbGUKQEAgLTE3LDQgKzE3LDQgQEAKICMgICBwcm9qZWN0cy4gVG8ga2VlcCB0aGUgc291cmNlIGNvbW1vbiBmb3IgYWxsIHRob3NlIGRyaXZlcnMgKGFuZAogIyAgIHRodXMgc2ltcGxpZnkgZml4ZXMgdG8gaXQpLCBwbGVhc2UgZG8gbm90IGNsZWFuIGl0IHVwIQogCi1FWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL25ldC9za2ZwIC1EUENJIC1ETUVNX01BUFBFRF9JTyAtV25vLXN0cmljdC1wcm90b3R5cGVzIAorY2NmbGFncy15IDo9IC1JZHJpdmVycy9uZXQvc2tmcCAtRFBDSSAtRE1FTV9NQVBQRURfSU8gLVduby1zdHJpY3QtcHJvdG90eXBlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmggYi9kcml2ZXJzL25ldC9zdW5nZW0uaAppbmRleCBlZGUwMTc4Li5kMjI1MDc3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmgKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmgKQEAgLTg0Myw3ICs4NDMsNyBAQAogCiAvKiBHRU0gcmVxdWlyZXMgdGhhdCBSWCBkZXNjcmlwdG9ycyBhcmUgcHJvdmlkZWQgZm91ciBhdCBhIHRpbWUsCiAgKiBhbGlnbmVkLiAgQWxzbywgdGhlIFJYIHJpbmcgbWF5IG5vdCB3cmFwIGFyb3VuZC4gIFRoaXMgbWVhbnMgdGhhdAotICogdGhlcmUgd2lsbCBiZSBhdCBsZWFzdCA0IHVudXNlZCBkZXNjaXB0b3IgZW50cmllcyBpbiB0aGUgbWlkZGxlCisgKiB0aGVyZSB3aWxsIGJlIGF0IGxlYXN0IDQgdW51c2VkIGRlc2NyaXB0b3IgZW50cmllcyBpbiB0aGUgbWlkZGxlCiAgKiBvZiB0aGUgUlggcmluZyBhdCBhbGwgdGltZXMuCiAgKgogICogU2ltaWxhciB0byBITUUsIEdFTSBhc3N1bWVzIHRoYXQgaXQgY2FuIHdyaXRlIGdhcmJhZ2UgYnl0ZXMgYmVmb3JlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90aWxlL3RpbGVwcm8uYyBiL2RyaXZlcnMvbmV0L3RpbGUvdGlsZXByby5jCmluZGV4IDdjYjMwMWQuLjA4MjVkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RpbGUvdGlsZXByby5jCisrKyBiL2RyaXZlcnMvbmV0L3RpbGUvdGlsZXByby5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDExIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTQ0LDEwICs0NCw2IEBACiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAKIAotLyogVGhlcmUgaXMgbm8gc2luZ2xldGhyZWFkX2NwdSwgc28gc2NoZWR1bGUgd29yayBvbiB0aGUgY3VycmVudCBjcHUuICovCi0jZGVmaW5lIHNpbmdsZXRocmVhZF9jcHUgLTEKLQotCiAvKgogICogRmlyc3QsICJ0aWxlX25ldF9pbml0X21vZHVsZSgpIiBpbml0aWFsaXplcyBhbGwgZm91ciAiZGV2aWNlcyIgd2hpY2gKICAqIGNhbiBiZSB1c2VkIGJ5IGxpbnV4LgpAQCAtNzMsMTUgKzY5LDE2IEBACiAgKiByZXR1cm4sIGtub3dpbmcgd2Ugd2lsbCBiZSBjYWxsZWQgYWdhaW4gbGF0ZXIuICBPdGhlcndpc2UsIHdlCiAgKiByZWVuYWJsZSB0aGUgaW5ncmVzcyBpbnRlcnJ1cHQsIGFuZCBjYWxsICJuYXBpX2NvbXBsZXRlKCkiLgogICoKKyAqIEhBQ0s6IFNpbmNlIGRpc2FibGluZyB0aGUgaW5ncmVzcyBpbnRlcnJ1cHQgaXMgbm90IHJlbGlhYmxlLCB3ZQorICogaWdub3JlIHRoZSBpbnRlcnJ1cHQgaWYgdGhlIGdsb2JhbCAiYWN0aXZlIiBmbGFnIGlzIGZhbHNlLgorICoKICAqCiAgKiBOT1RFOiBUaGUgdXNlIG9mICJuYXRpdmVfZHJpdmVyIiBlbnN1cmVzIHRoYXQgRVBQIGV4aXN0cywgYW5kIHRoYXQKLSAqICJlcHBfc2VuZHYiIGlzIGxlZ2FsLCBhbmQgdGhhdCAiTElQUCIgaXMgYmVpbmcgdXNlZC4KKyAqIHdlIGFyZSB1c2luZyAiTElQUCIgYW5kICJMRVBQIi4KICAqCiAgKiBOT1RFOiBGYWlsaW5nIHRvIGZyZWUgY29tcGxldGlvbnMgZm9yIGFuIGFyYml0cmFyaWx5IGxvbmcgdGltZQogICogKHdoaWNoIGlzIGRlZmluZWQgdG8gYmUgaWxsZWdhbCkgZG9lcyBpbiBmYWN0IGNhdXNlIGJpemFycmUKICAqIHByb2JsZW1zLiAgVGhlICJlZ3Jlc3NfdGltZXIiIGhlbHBzIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4KLSAqCi0gKiBOT1RFOiBUaGUgZWdyZXNzIGNvZGUgY2FuIGJlIGludGVycnVwdGVkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqLwogCiAKQEAgLTE0Miw2ICsxMzksNyBAQAogTU9EVUxFX0FVVEhPUigiVGlsZXJhIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogLyoKICAqIFF1ZXVlIG9mIGluY29taW5nIHBhY2tldHMgZm9yIGEgc3BlY2lmaWMgY3B1IGFuZCBkZXZpY2UuCiAgKgpAQCAtMTc3LDcgKzE3NSw3IEBACiAJc3RydWN0IHRpbGVfbmV0aW9fcXVldWUgcXVldWU7CiAJLyogU3RhdGlzdGljcy4gKi8KIAlzdHJ1Y3QgdGlsZV9uZXRfc3RhdHNfdCBzdGF0czsKLQkvKiBJU1NVRTogSXMgdGhpcyBuZWVkZWQ/ICovCisJLyogVHJ1ZSBpZmYgTkFQSSBpcyBlbmFibGVkLiAqLwogCWJvb2wgbmFwaV9lbmFibGVkOwogCS8qIFRydWUgaWYgdGhpcyB0aWxlIGhhcyBzdWNjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgSVBQLiAqLwogCWJvb2wgcmVnaXN0ZXJlZDsKQEAgLTIwMCwyMCArMTk4LDIwIEBACiBzdHJ1Y3QgdGlsZV9uZXRfcHJpdiB7CiAJLyogT3VyIG5ldHdvcmsgZGV2aWNlLiAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JLyogVGhlIGFjdHVhbCBlZ3Jlc3MgcXVldWUuICovCi0JbGVwcF9xdWV1ZV90ICplcHBfcXVldWU7Ci0JLyogUHJvdGVjdHMgImVwcF9xdWV1ZS0+Y21kX3RhaWwiIGFuZCAiZXBwX3F1ZXVlLT5jb21wX3RhaWwiICovCi0Jc3BpbmxvY2tfdCBjbWRfbG9jazsKLQkvKiBQcm90ZWN0cyAiZXBwX3F1ZXVlLT5jb21wX2hlYWQiLiAqLwotCXNwaW5sb2NrX3QgY29tcF9sb2NrOworCS8qIFBhZ2VzIG1ha2luZyB1cCB0aGUgZWdyZXNzIHF1ZXVlLiAqLworCXN0cnVjdCBwYWdlICplcV9wYWdlczsKKwkvKiBBZGRyZXNzIG9mIHRoZSBhY3R1YWwgZWdyZXNzIHF1ZXVlLiAqLworCWxlcHBfcXVldWVfdCAqZXE7CisJLyogUHJvdGVjdHMgImVxIi4gKi8KKwlzcGlubG9ja190IGVxX2xvY2s7CiAJLyogVGhlIGh5cGVydmlzb3IgaGFuZGxlIGZvciB0aGlzIGludGVyZmFjZS4gKi8KIAlpbnQgaHZfZGV2aGRsOwogCS8qIFRoZSBpbnRyIGJpdCBtYXNrIHRoYXQgSURzIHRoaXMgZGV2aWNlLiAqLwogCXUzMiBpbnRyX2lkOwogCS8qIFRydWUgaWZmICJ0aWxlX25ldF9vcGVuX2F1eCgpIiBoYXMgc3VjY2VlZGVkLiAqLwotCWludCBwYXJ0bHlfb3BlbmVkOwotCS8qIFRydWUgaWZmICJ0aWxlX25ldF9vcGVuX2lubmVyKCkiIGhhcyBzdWNjZWVkZWQuICovCi0JaW50IGZ1bGx5X29wZW5lZDsKKwlib29sIHBhcnRseV9vcGVuZWQ7CisJLyogVHJ1ZSBpZmYgdGhlIGRldmljZSBpcyAiYWN0aXZlIi4gKi8KKwlib29sIGFjdGl2ZTsKIAkvKiBFZmZlY3RpdmUgbmV0d29yayBjcHVzLiAqLwogCXN0cnVjdCBjcHVtYXNrIG5ldHdvcmtfY3B1c19tYXA7CiAJLyogTnVtYmVyIG9mIG5ldHdvcmsgY3B1cy4gKi8KQEAgLTIyOCw2ICsyMjYsMTAgQEAKIAlzdHJ1Y3QgdGlsZV9uZXRfY3B1ICpjcHVbTlJfQ1BVU107CiB9OwogCisvKiBMb2cyIG9mIHRoZSBudW1iZXIgb2Ygc21hbGwgcGFnZXMgbmVlZGVkIGZvciB0aGUgZWdyZXNzIHF1ZXVlLiAqLworI2RlZmluZSBFUV9PUkRFUiAgZ2V0X29yZGVyKHNpemVvZihsZXBwX3F1ZXVlX3QpKQorLyogU2l6ZSBvZiB0aGUgZWdyZXNzIHF1ZXVlJ3MgcGFnZXMuICovCisjZGVmaW5lIEVRX1NJWkUgICAoMSA8PCAoUEFHRV9TSElGVCArIEVRX09SREVSKSkKIAogLyoKICAqIFRoZSBhY3R1YWwgZGV2aWNlcyAoeGdiZTAsIHhnYmUxLCBnYmUwLCBnYmUxKS4KQEAgLTI4NCw3ICsyODYsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgZHVtcF9wYWNrZXQodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNoYXIgKnMpCiB7CisJaW50IG15X2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwogCXVuc2lnbmVkIGxvbmcgaTsKKwljaGFyIGJ1ZlsxMjhdOworCiAJc3RhdGljIHVuc2lnbmVkIGludCBjb3VudDsKIAogCXByX2luZm8oImR1bXBfcGFja2V0KGRhdGEgJXAsIGxlbmd0aCAweCVseCBzICVzIGNvdW50IDB4JXgpXG4iLApAQCAtMjk0LDEwICszMDAsMTIgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogCQlpZiAoKGkgJiAweGYpID09IDApCi0JCQlzcHJpbnRmKGJ1ZiwgIiU4LjhseDoiLCBpKTsKKwkJCXNwcmludGYoYnVmLCAiWyUwMmRdICU4LjhseDoiLCBteV9jcHUsIGkpOwogCQlzcHJpbnRmKGJ1ZiArIHN0cmxlbihidWYpLCAiICUyLjJ4IiwgZGF0YVtpXSk7Ci0JCWlmICgoaSAmIDB4ZikgPT0gMHhmIHx8IGkgPT0gbGVuZ3RoIC0gMSkKLQkJCXByX2luZm8oIiVzXG4iLCBidWYpOworCQlpZiAoKGkgJiAweGYpID09IDB4ZiB8fCBpID09IGxlbmd0aCAtIDEpIHsKKwkJCXN0cmNhdChidWYsICJcbiIpOworCQkJcHJfaW5mbygiJXMiLCBidWYpOworCQl9CiAJfQogfQogI2VuZGlmCkBAIC0zNTEsNjAgKzM1OSwxMDkgQEAKIAogLyoKICAqIFByb3ZpZGUgYSBsaW51eCBidWZmZXIgZm9yIExJUFAuCisgKgorICogTm90ZSB0aGF0IHRoZSBBQ1RVQUwgYWxsb2NhdGlvbiBmb3IgZWFjaCBidWZmZXIgaXMgYSAic3RydWN0IHNrX2J1ZmYiLAorICogcGx1cyBhIGNodW5rIG9mIG1lbW9yeSB0aGF0IGluY2x1ZGVzIG5vdCBvbmx5IHRoZSByZXF1ZXN0ZWQgYnl0ZXMsIGJ1dAorICogYWxzbyBORVRfU0tCX1BBRCBieXRlcyBvZiBpbml0aWFsIHBhZGRpbmcsIGFuZCBhICJzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvIi4KKyAqCisgKiBOb3RlIHRoYXQgInN0cnVjdCBza2Jfc2hhcmVkX2luZm8iIGlzIDg4IGJ5dGVzIHdpdGggNjRLIHBhZ2VzIGFuZAorICogMjY4IGJ5dGVzIHdpdGggNEsgcGFnZXMgKHNpbmNlIHRoZSBmcmFnc1tdIGFycmF5IG5lZWRzIDE4IGVudHJpZXMpLgorICoKKyAqIFdpdGhvdXQganVtYm8gcGFja2V0cywgdGhlIG1heGltdW0gcGFja2V0IHNpemUgd2lsbCBiZSAxNTM2IGJ5dGVzLAorICogYW5kIHdlIHVzZSAyIGJ5dGVzIChORVRfSVBfQUxJR04pIG9mIHBhZGRpbmcuICBJU1NVRTogSWYgd2UgdG9sZAorICogdGhlIGhhcmR3YXJlIHRvIGNsaXAgYXQgMTUxOCBieXRlcyBpbnN0ZWFkIG9mIDE1MzYgYnl0ZXMsIHRoZW4gd2UKKyAqIGNvdWxkIHNhdmUgYW4gZW50aXJlIGNhY2hlIGxpbmUsIGJ1dCBpbiBwcmFjdGljZSwgd2UgZG9uJ3QgbmVlZCBpdC4KKyAqCisgKiBTaW5jZSBDUEFzIGFyZSAzOCBiaXRzLCBhbmQgd2UgY2FuIG9ubHkgZW5jb2RlIHRoZSBoaWdoIDMxIGJpdHMgaW4KKyAqIGEgImxpbnV4X2J1ZmZlcl90IiwgdGhlIGxvdyA3IGJpdHMgbXVzdCBiZSB6ZXJvLCBhbmQgdGh1cywgd2UgbXVzdAorICogYWxpZ24gdGhlIGFjdHVhbCAidmEiIG1vZCAxMjguCisgKgorICogV2UgYXNzdW1lIHRoYXQgdGhlIHVuZGVybHlpbmcgImhlYWQiIHdpbGwgYmUgYWxpZ25lZCBtb2QgNjQuICBOb3RlCisgKiB0aGF0IGluIHByYWN0aWNlLCB3ZSBoYXZlIHNlZW4gImhlYWQiIE5PVCBhbGlnbmVkIG1vZCAxMjggZXZlbiB3aGVuCisgKiB1c2luZyAyMDQ4IGJ5dGUgYWxsb2NhdGlvbnMsIHdoaWNoIGlzIHN1cnByaXNpbmcuCisgKgorICogSWYgImhlYWQiIFdBUyBhbHdheXMgYWxpZ25lZCBtb2QgMTI4LCB3ZSBjb3VsZCBjaGFuZ2UgTElQUCB0bworICogYXNzdW1lIHRoYXQgdGhlIGxvdyBTSVggYml0cyBhcmUgemVybywgYW5kIHRoZSA3dGggYml0IGlzIG9uZSwgdGhhdAorICogaXMsIGFsaWduIHRoZSBhY3R1YWwgInZhIiBtb2QgMTI4IHBsdXMgNjQsIHdoaWNoIHdvdWxkIGJlICJmcmVlIi4KKyAqCisgKiBGb3Igbm93LCB0aGUgYWN0dWFsICJoZWFkIiBwb2ludGVyIHBvaW50cyBhdCBORVRfU0tCX1BBRCBieXRlcyBvZgorICogcGFkZGluZywgcGx1cyAyOCBvciA5MiBieXRlcyBvZiBleHRyYSBwYWRkaW5nLCBwbHVzIHRoZSBza19idWZmCisgKiBwb2ludGVyLCBwbHVzIHRoZSBORVRfSVBfQUxJR04gcGFkZGluZywgcGx1cyAxMjYgb3IgMTUzNiBieXRlcyBmb3IKKyAqIHRoZSBhY3R1YWwgcGFja2V0LCBwbHVzIDYyIGJ5dGVzIG9mIGVtcHR5IHBhZGRpbmcsIHBsdXMgc29tZQorICogcGFkZGluZyBhbmQgdGhlICJzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvIi4KKyAqCisgKiBXaXRoIDY0SyBwYWdlcywgYSBsYXJnZSBidWZmZXIgdGh1cyBuZWVkcyAzMis5Mis0KzIrMTUzNis2Mis4OAorICogYnl0ZXMsIG9yIDE4MTYgYnl0ZXMsIHdoaWNoIGZpdHMgY29tZm9ydGFibHkgaW50byAyMDQ4IGJ5dGVzLgorICoKKyAqIFdpdGggNjRLIHBhZ2VzLCBhIHNtYWxsIGJ1ZmZlciB0aHVzIG5lZWRzIDMyKzkyKzQrMisxMjYrODgKKyAqIGJ5dGVzLCBvciAzNDQgYnl0ZXMsIHdoaWNoIG1lYW5zIHdlIGFyZSB3YXN0aW5nIDY0KyBieXRlcywgYW5kCisgKiBjb3VsZCBwcmVzdW1hYmx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHNtYWxsIGJ1ZmZlcnMuCisgKgorICogV2l0aCA0SyBwYWdlcywgYSBsYXJnZSBidWZmZXIgdGh1cyBuZWVkcyAzMis5Mis0KzIrMTUzNis2MisyNjgKKyAqIGJ5dGVzLCBvciAxOTk2IGJ5dGVzLCB3aGljaCBmaXRzIGNvbWZvcnRhYmx5IGludG8gMjA0OCBieXRlcy4KKyAqCisgKiBXaXRoIDRLIHBhZ2VzLCBhIHNtYWxsIGJ1ZmZlciB0aHVzIG5lZWRzIDMyKzkyKzQrMisxMjYrMjY4CisgKiBieXRlcywgb3IgNTI0IGJ5dGVzLCB3aGljaCBpcyBhbm5veWluZ2x5IHdhc3RlZnVsLgorICoKKyAqIE1heWJlIHdlIHNob3VsZCBpbmNyZWFzZSBMSVBQX1NNQUxMX1BBQ0tFVF9TSVpFIHRvIDE5Mj8KKyAqCisgKiBJU1NVRTogTWF5YmUgd2Ugc2hvdWxkIGluY3JlYXNlICJORVRfU0tCX1BBRCIgdG8gNjQ/CiAgKi8KIHN0YXRpYyBib29sIHRpbGVfbmV0X3Byb3ZpZGVfbmVlZGVkX2J1ZmZlcihzdHJ1Y3QgdGlsZV9uZXRfY3B1ICppbmZvLAogCQkJCQkgICBib29sIHNtYWxsKQogewotCS8qIElTU1VFOiBXaGF0IHNob3VsZCB3ZSB1c2UgaGVyZT8gKi8KKyNpZiBUSUxFX05FVF9NVFUgPD0gMTUzNgorCS8qIFdpdGhvdXQgImp1bWJvIiwgMiArIDE1MzYgc2hvdWxkIGJlIHN1ZmZpY2llbnQuICovCisJdW5zaWduZWQgaW50IGxhcmdlX3NpemUgPSBORVRfSVBfQUxJR04gKyAxNTM2OworI2Vsc2UKKwkvKiBJU1NVRTogVGhpcyBoYXMgbm90IGJlZW4gdGVzdGVkLiAqLwogCXVuc2lnbmVkIGludCBsYXJnZV9zaXplID0gTkVUX0lQX0FMSUdOICsgVElMRV9ORVRfTVRVICsgMTAwOworI2VuZGlmCiAKLQkvKiBSb3VuZCB1cCB0byBlbnN1cmUgdG8gYXZvaWQgImZhbHNlIHNoYXJpbmciIHdpdGggbGFzdCBjYWNoZSBsaW5lLiAqLwotCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZSA9CisJLyogQXZvaWQgImZhbHNlIHNoYXJpbmciIHdpdGggbGFzdCBjYWNoZSBsaW5lLiAqLworCS8qIElTU1VFOiBUaGlzIGlzIGFscmVhZHkgZG9uZSBieSAiZGV2X2FsbG9jX3NrYigpIi4gKi8KKwl1bnNpZ25lZCBpbnQgbGVuID0KIAkJICgoKHNtYWxsID8gTElQUF9TTUFMTF9QQUNLRVRfU0laRSA6IGxhcmdlX3NpemUpICsKIAkJICAgQ0hJUF9MMl9MSU5FX1NJWkUoKSAtIDEpICYgLUNISVBfTDJfTElORV9TSVpFKCkpOwogCi0JLyoKLQkgKiBJU1NVRTogU2luY2UgQ1BBcyBhcmUgMzggYml0cywgYW5kIHdlIGNhbiBvbmx5IGVuY29kZSB0aGUKLQkgKiBoaWdoIDMxIGJpdHMgaW4gYSAibGludXhfYnVmZmVyX3QiLCB0aGUgbG93IDcgYml0cyBtdXN0IGJlCi0JICogemVybywgYW5kIHRodXMsIHdlIG11c3QgYWxpZ24gdGhlIGFjdHVhbCAidmEiIG1vZCAxMjguCi0JICovCi0JY29uc3QgdW5zaWduZWQgbG9uZyBhbGlnbiA9IDEyODsKKwl1bnNpZ25lZCBpbnQgcGFkZGluZyA9IDEyOCAtIE5FVF9TS0JfUEFEOworCXVuc2lnbmVkIGludCBhbGlnbjsKIAogCXN0cnVjdCBza19idWZmICpza2I7CiAJdm9pZCAqdmE7CiAKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYl9wdHI7CiAKLQkvKiBOb3RlIHRoYXQgImRldl9hbGxvY19za2IoKSIgYWRkcyBORVRfU0tCX1BBRCBtb3JlIGJ5dGVzLCAqLwotCS8qIGFuZCBhbHNvICJyZXNlcnZlcyIgdGhhdCBtYW55IGJ5dGVzLiAqLwotCS8qIElTU1VFOiBDYW4gd2UgInNoYXJlIiB0aGUgTkVUX1NLQl9QQUQgYnl0ZXMgd2l0aCAic2tiX3B0ciI/ICovCi0JaW50IGxlbiA9IHNpemVvZigqc2tiX3B0cikgKyBhbGlnbiArIGJ1ZmZlcl9zaXplOworCS8qIFJlcXVlc3QgOTYgZXh0cmEgYnl0ZXMgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4gKi8KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIHBhZGRpbmcpOworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOwogCi0Jd2hpbGUgKDEpIHsKKwkvKiBTa2lwIDMyIG9yIDk2IGJ5dGVzIHRvIGFsaWduICJkYXRhIiBtb2QgMTI4LiAqLworCWFsaWduID0gLShsb25nKXNrYi0+ZGF0YSAmICgxMjggLSAxKTsKKwlCVUdfT04oYWxpZ24gPiBwYWRkaW5nKTsKKwlza2JfcmVzZXJ2ZShza2IsIGFsaWduKTsKIAotCQkvKiBBbGxvY2F0ZSAob3IgZmFpbCkuICovCi0JCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsKLQkJaWYgKHNrYiA9PSBOVUxMKQotCQkJcmV0dXJuIGZhbHNlOworCS8qIFRoaXMgYWRkcmVzcyBpcyBnaXZlbiB0byBJUFAuICovCisJdmEgPSBza2ItPmRhdGE7CiAKLQkJLyogTWFrZSByb29tIGZvciBhIGJhY2stcG9pbnRlciB0byAnc2tiJy4gKi8KLQkJc2tiX3Jlc2VydmUoc2tiLCBzaXplb2YoKnNrYl9wdHIpKTsKKwkvKiBCdWZmZXJzIG11c3Qgbm90IHNwYW4gYSBodWdlIHBhZ2UuICovCisJQlVHX09OKCgoKChsb25nKXZhICYgfkhQQUdFX01BU0spICsgbGVuKSAmIEhQQUdFX01BU0spICE9IDApOwogCi0JCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgYWxpZ25lZC4gKi8KLQkJc2tiX3Jlc2VydmUoc2tiLCAtKGxvbmcpc2tiLT5kYXRhICYgKGFsaWduIC0gMSkpOwotCi0JCS8qIFRoaXMgYWRkcmVzcyBpcyBnaXZlbiB0byBJUFAuICovCi0JCXZhID0gc2tiLT5kYXRhOwotCi0JCWlmIChzbWFsbCkKLQkJCWJyZWFrOwotCi0JCS8qIElTU1VFOiBUaGlzIGhhcyBuZXZlciBiZWVuIG9ic2VydmVkISAqLwotCQkvKiBMYXJnZSBidWZmZXJzIG11c3Qgbm90IHNwYW4gYSBodWdlIHBhZ2UuICovCi0JCWlmICgoKCgobG9uZyl2YSAmIH5IUEFHRV9NQVNLKSArIDE1MzUpICYgSFBBR0VfTUFTSykgPT0gMCkKLQkJCWJyZWFrOwotCQlwcl9lcnIoIkxlYWtpbmcgdW5hbGlnbmVkIGxpbnV4IGJ1ZmZlciBhdCAlcC5cbiIsIHZhKTsKKyNpZmRlZiBUSUxFX05FVF9QQVJBTk9JQQorI2lmIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKQorCWlmIChoYXNoX2RlZmF1bHQpIHsKKwkJSFZfUFRFIHB0ZSA9ICp2aXJ0X3RvX3B0ZShjdXJyZW50LT5tbSwgKHVuc2lnbmVkIGxvbmcpdmEpOworCQlpZiAoaHZfcHRlX2dldF9tb2RlKHB0ZSkgIT0gSFZfUFRFX01PREVfQ0FDSEVfSEFTSF9MMykKKwkJCXBhbmljKCJOb24tSEZIIGluZ3Jlc3MgYnVmZmVyISBWQT0lcCBNb2RlPSVkIFBURT0lbGx4IiwKKwkJCSAgICAgIHZhLCBodl9wdGVfZ2V0X21vZGUocHRlKSwgaHZfcHRlX3ZhbChwdGUpKTsKIAl9CisjZW5kaWYKKyNlbmRpZgorCisJLyogSW52YWxpZGF0ZSB0aGUgcGFja2V0IGJ1ZmZlci4gKi8KKwlpZiAoIWhhc2hfZGVmYXVsdCkKKwkJX19pbnZfYnVmZmVyKHZhLCBsZW4pOwogCiAJLyogU2tpcCB0d28gYnl0ZXMgdG8gc2F0aXNmeSBMSVBQIGFzc3VtcHRpb25zLiAqLwogCS8qIE5vdGUgdGhhdCB0aGlzIGFsaWducyBJUCBvbiBhIDE2IGJ5dGUgYm91bmRhcnkuICovCkBAIC00MTUsMjMgKzQ3Miw5IEBACiAJc2tiX3B0ciA9IHZhIC0gc2l6ZW9mKCpza2JfcHRyKTsKIAkqc2tiX3B0ciA9IHNrYjsKIAotCS8qIEludmFsaWRhdGUgdGhlIHBhY2tldCBidWZmZXIuICovCi0JaWYgKCFoYXNoX2RlZmF1bHQpCi0JCV9faW52X2J1ZmZlcihza2ItPmRhdGEsIGJ1ZmZlcl9zaXplKTsKLQogCS8qIE1ha2Ugc3VyZSAic2tiX3B0ciIgaGFzIGJlZW4gZmx1c2hlZC4gKi8KIAlfX2luc25fbWYoKTsKIAotI2lmZGVmIFRJTEVfTkVUX1BBUkFOT0lBCi0jaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCi0JaWYgKGhhc2hfZGVmYXVsdCkgewotCQlIVl9QVEUgcHRlID0gKnZpcnRfdG9fcHRlKGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZyl2YSk7Ci0JCWlmIChodl9wdGVfZ2V0X21vZGUocHRlKSAhPSBIVl9QVEVfTU9ERV9DQUNIRV9IQVNIX0wzKQotCQkJcGFuaWMoIk5vbi1jb2hlcmVudCBpbmdyZXNzIGJ1ZmZlciEiKTsKLQl9Ci0jZW5kaWYKLSNlbmRpZgotCiAJLyogUHJvdmlkZSB0aGUgbmV3IGJ1ZmZlci4gKi8KIAl0aWxlX25ldF9wcm92aWRlX2xpbnV4X2J1ZmZlcihpbmZvLCB2YSwgc21hbGwpOwogCkBAIC00NjksNDggKzUxMiw2NCBAQAogICogR3JhYiBzb21lIExFUFAgY29tcGxldGlvbnMsIGFuZCBzdG9yZSB0aGVtIGluICJjb21wcyIsIG9mIHNpemUKICAqICJjb21wc19zaXplIiwgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbXBsZXRpb25zIHdoaWNoIHdlcmUKICAqIHN0b3JlZCwgc28gdGhlIGNhbGxlciBjYW4gZnJlZSB0aGVtLgotICoKLSAqIElmICJwZW5kaW5nIiBpcyBub3QgTlVMTCwgaXQgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBpZiB0aGVyZSBtaWdodAotICogc3RpbGwgYmUgc29tZSBwZW5kaW5nIGNvbXBsZXRpb25zIGNhdXNlZCBieSB0aGlzIHRpbGUsIGVsc2UgZmFsc2UuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdGlsZV9uZXRfbGVwcF9ncmFiX2NvbXBzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCitzdGF0aWMgdW5zaWduZWQgaW50IHRpbGVfbmV0X2xlcHBfZ3JhYl9jb21wcyhsZXBwX3F1ZXVlX3QgKmVxLAogCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpjb21wc1tdLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBjb21wc19zaXplLAotCQkJCQkgICAgIGJvb2wgKnBlbmRpbmcpCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG1pbl9zaXplKQogewotCXN0cnVjdCB0aWxlX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWxlcHBfcXVldWVfdCAqZXEgPSBwcml2LT5lcHBfcXVldWU7Ci0KIAl1bnNpZ25lZCBpbnQgbiA9IDA7CiAKLQl1bnNpZ25lZCBpbnQgY29tcF9oZWFkOwotCXVuc2lnbmVkIGludCBjb21wX2J1c3k7Ci0JdW5zaWduZWQgaW50IGNvbXBfdGFpbDsKLQotCXNwaW5fbG9jaygmcHJpdi0+Y29tcF9sb2NrKTsKLQotCWNvbXBfaGVhZCA9IGVxLT5jb21wX2hlYWQ7Ci0JY29tcF9idXN5ID0gZXEtPmNvbXBfYnVzeTsKLQljb21wX3RhaWwgPSBlcS0+Y29tcF90YWlsOworCXVuc2lnbmVkIGludCBjb21wX2hlYWQgPSBlcS0+Y29tcF9oZWFkOworCXVuc2lnbmVkIGludCBjb21wX2J1c3kgPSBlcS0+Y29tcF9idXN5OwogCiAJd2hpbGUgKGNvbXBfaGVhZCAhPSBjb21wX2J1c3kgJiYgbiA8IGNvbXBzX3NpemUpIHsKIAkJY29tcHNbbisrXSA9IGVxLT5jb21wc1tjb21wX2hlYWRdOwogCQlMRVBQX1FJTkMoY29tcF9oZWFkKTsKIAl9CiAKLQlpZiAocGVuZGluZyAhPSBOVUxMKQotCQkqcGVuZGluZyA9IChjb21wX2hlYWQgIT0gY29tcF90YWlsKTsKKwlpZiAobiA8IG1pbl9zaXplKQorCQlyZXR1cm4gMDsKIAogCWVxLT5jb21wX2hlYWQgPSBjb21wX2hlYWQ7CiAKLQlzcGluX3VubG9jaygmcHJpdi0+Y29tcF9sb2NrKTsKLQogCXJldHVybiBuOwogfQogCiAKIC8qCisgKiBGcmVlIHNvbWUgY29tcHMsIGFuZCByZXR1cm4gdHJ1ZSBpZmYgdGhlcmUgYXJlIHN0aWxsIHNvbWUgcGVuZGluZy4KKyAqLworc3RhdGljIGJvb2wgdGlsZV9uZXRfbGVwcF9mcmVlX2NvbXBzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgYWxsKQoreworCXN0cnVjdCB0aWxlX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWxlcHBfcXVldWVfdCAqZXEgPSBwcml2LT5lcTsKKworCXN0cnVjdCBza19idWZmICpvbGRzWzY0XTsKKwl1bnNpZ25lZCBpbnQgd2FudGVkID0gNjQ7CisJdW5zaWduZWQgaW50IGksIG47CisJYm9vbCBwZW5kaW5nOworCisJc3Bpbl9sb2NrKCZwcml2LT5lcV9sb2NrKTsKKworCWlmIChhbGwpCisJCWVxLT5jb21wX2J1c3kgPSBlcS0+Y29tcF90YWlsOworCisJbiA9IHRpbGVfbmV0X2xlcHBfZ3JhYl9jb21wcyhlcSwgb2xkcywgd2FudGVkLCAwKTsKKworCXBlbmRpbmcgPSAoZXEtPmNvbXBfaGVhZCAhPSBlcS0+Y29tcF90YWlsKTsKKworCXNwaW5fdW5sb2NrKCZwcml2LT5lcV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWtmcmVlX3NrYihvbGRzW2ldKTsKKworCXJldHVybiBwZW5kaW5nOworfQorCisKKy8qCiAgKiBNYWtlIHN1cmUgdGhlIGVncmVzcyB0aW1lciBpcyBzY2hlZHVsZWQuCiAgKgogICogTm90ZSB0aGF0IHdlIHVzZSAic2NoZWR1bGUgaWYgbm90IHNjaGVkdWxlZCIgbG9naWMgaW5zdGVhZCBvZiB0aGUgbW9yZQpAQCAtNTQ0LDIxICs2MDMsMTEgQEAKIAlzdHJ1Y3QgdGlsZV9uZXRfY3B1ICppbmZvID0gKHN0cnVjdCB0aWxlX25ldF9jcHUgKilhcmc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPm5hcGkuZGV2OwogCi0Jc3RydWN0IHNrX2J1ZmYgKm9sZHNbMzJdOwotCXVuc2lnbmVkIGludCB3YW50ZWQgPSAzMjsKLQl1bnNpZ25lZCBpbnQgaSwgbm9sZHMgPSAwOwotCWJvb2wgcGVuZGluZzsKLQogCS8qIFRoZSB0aW1lciBpcyBubyBsb25nZXIgc2NoZWR1bGVkLiAqLwogCWluZm8tPmVncmVzc190aW1lcl9zY2hlZHVsZWQgPSBmYWxzZTsKIAotCW5vbGRzID0gdGlsZV9uZXRfbGVwcF9ncmFiX2NvbXBzKGRldiwgb2xkcywgd2FudGVkLCAmcGVuZGluZyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbm9sZHM7IGkrKykKLQkJa2ZyZWVfc2tiKG9sZHNbaV0pOwotCi0JLyogUmVzY2hlZHVsZSB0aW1lciBpZiBuZWVkZWQuICovCi0JaWYgKHBlbmRpbmcpCisJLyogRnJlZSBjb21wcywgYW5kIHJlc2NoZWR1bGUgdGltZXIgaWYgbW9yZSBhcmUgcGVuZGluZy4gKi8KKwlpZiAodGlsZV9uZXRfbGVwcF9mcmVlX2NvbXBzKGRldiwgZmFsc2UpKQogCQl0aWxlX25ldF9zY2hlZHVsZV9lZ3Jlc3NfdGltZXIoaW5mbyk7CiB9CiAKQEAgLTYzNiw4ICs2ODUsMzkgQEAKIAogCiAKK3N0YXRpYyB2b2lkIHRpbGVfbmV0X2Rpc2NhcmRfYXV4KHN0cnVjdCB0aWxlX25ldF9jcHUgKmluZm8sIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdGlsZV9uZXRpb19xdWV1ZSAqcXVldWUgPSAmaW5mby0+cXVldWU7CisJbmV0aW9fcXVldWVfaW1wbF90ICpxc3AgPSBxdWV1ZS0+X19zeXN0ZW1fcGFydDsKKwluZXRpb19xdWV1ZV91c2VyX2ltcGxfdCAqcXVwID0gJnF1ZXVlLT5fX3VzZXJfcGFydDsKKworCWludCBpbmRleDJfYXV4ID0gaW5kZXggKyBzaXplb2YobmV0aW9fcGt0X3QpOworCWludCBpbmRleDIgPQorCQkoKGluZGV4Ml9hdXggPT0KKwkJICBxc3AtPl9fcGFja2V0X3JlY2VpdmVfcXVldWUuX19sYXN0X3BhY2tldF9wbHVzX29uZSkgPworCQkgMCA6IGluZGV4Ml9hdXgpOworCisJbmV0aW9fcGt0X3QgKnBrdCA9IChuZXRpb19wa3RfdCAqKSgodW5zaWduZWQgbG9uZykgJnFzcFsxXSArIGluZGV4KTsKKworCS8qIEV4dHJhY3QgdGhlICJsaW51eF9idWZmZXJfdCIuICovCisJdW5zaWduZWQgaW50IGJ1ZmZlciA9IHBrdC0+X19wYWNrZXQud29yZDsKKworCS8qIENvbnZlcnQgImxpbnV4X2J1ZmZlcl90IiB0byAidmEiLiAqLworCXZvaWQgKnZhID0gX192YSgocGh5c19hZGRyX3QpKGJ1ZmZlciA+PiAxKSA8PCA3KTsKKworCS8qIEFjcXVpcmUgdGhlIGFzc29jaWF0ZWQgInNrYiIuICovCisJc3RydWN0IHNrX2J1ZmYgKipza2JfcHRyID0gdmEgLSBzaXplb2YoKnNrYl9wdHIpOworCXN0cnVjdCBza19idWZmICpza2IgPSAqc2tiX3B0cjsKKworCWtmcmVlX3NrYihza2IpOworCisJLyogQ29uc3VtZSB0aGlzIHBhY2tldC4gKi8KKwlxdXAtPl9fcGFja2V0X3JlY2VpdmVfcmVhZCA9IGluZGV4MjsKK30KKworCiAvKgotICogTGlrZSAidGlsZV9uZXRfaGFuZGxlX3BhY2tldHMoKSIsIGJ1dCBqdXN0IGRpc2NhcmQgcGFja2V0cy4KKyAqIExpa2UgInRpbGVfbmV0X3BvbGwoKSIsIGJ1dCBqdXN0IGRpc2NhcmQgcGFja2V0cy4KICAqLwogc3RhdGljIHZvaWQgdGlsZV9uZXRfZGlzY2FyZF9wYWNrZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC02NTAsMzIgKzczMCw4IEBACiAKIAl3aGlsZSAocXVwLT5fX3BhY2tldF9yZWNlaXZlX3JlYWQgIT0KIAkgICAgICAgcXNwLT5fX3BhY2tldF9yZWNlaXZlX3F1ZXVlLl9fcGFja2V0X3dyaXRlKSB7Ci0KIAkJaW50IGluZGV4ID0gcXVwLT5fX3BhY2tldF9yZWNlaXZlX3JlYWQ7Ci0KLQkJaW50IGluZGV4Ml9hdXggPSBpbmRleCArIHNpemVvZihuZXRpb19wa3RfdCk7Ci0JCWludCBpbmRleDIgPQotCQkJKChpbmRleDJfYXV4ID09Ci0JCQkgIHFzcC0+X19wYWNrZXRfcmVjZWl2ZV9xdWV1ZS5fX2xhc3RfcGFja2V0X3BsdXNfb25lKSA/Ci0JCQkgMCA6IGluZGV4Ml9hdXgpOwotCi0JCW5ldGlvX3BrdF90ICpwa3QgPSAobmV0aW9fcGt0X3QgKikKLQkJCSgodW5zaWduZWQgbG9uZykgJnFzcFsxXSArIGluZGV4KTsKLQotCQkvKiBFeHRyYWN0IHRoZSAibGludXhfYnVmZmVyX3QiLiAqLwotCQl1bnNpZ25lZCBpbnQgYnVmZmVyID0gcGt0LT5fX3BhY2tldC53b3JkOwotCi0JCS8qIENvbnZlcnQgImxpbnV4X2J1ZmZlcl90IiB0byAidmEiLiAqLwotCQl2b2lkICp2YSA9IF9fdmEoKHBoeXNfYWRkcl90KShidWZmZXIgPj4gMSkgPDwgNyk7Ci0KLQkJLyogQWNxdWlyZSB0aGUgYXNzb2NpYXRlZCAic2tiIi4gKi8KLQkJc3RydWN0IHNrX2J1ZmYgKipza2JfcHRyID0gdmEgLSBzaXplb2YoKnNrYl9wdHIpOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnNrYl9wdHI7Ci0KLQkJa2ZyZWVfc2tiKHNrYik7Ci0KLQkJLyogQ29uc3VtZSB0aGlzIHBhY2tldC4gKi8KLQkJcXVwLT5fX3BhY2tldF9yZWNlaXZlX3JlYWQgPSBpbmRleDI7CisJCXRpbGVfbmV0X2Rpc2NhcmRfYXV4KGluZm8sIGluZGV4KTsKIAl9CiB9CiAKQEAgLTcwNCw3ICs3NjAsOCBAQAogCiAJbmV0aW9fcGt0X21ldGFkYXRhX3QgKm1ldGFkYXRhID0gTkVUSU9fUEtUX01FVEFEQVRBKHBrdCk7CiAKLQkvKiBFeHRyYWN0IHRoZSBwYWNrZXQgc2l6ZS4gKi8KKwkvKiBFeHRyYWN0IHRoZSBwYWNrZXQgc2l6ZS4gIEZJWE1FOiBTaG91bGRuJ3QgdGhlIHNlY29uZCBsaW5lICovCisJLyogZ2V0IHN1YnRyYWN0ZWQ/ICBNb3N0bHkgbW9vdCwgc2luY2UgaXQgc2hvdWxkIGJlICJ6ZXJvIi4gKi8KIAl1bnNpZ25lZCBsb25nIGxlbiA9CiAJCShORVRJT19QS1RfQ1VTVE9NX0xFTkdUSChwa3QpICsKIAkJIE5FVF9JUF9BTElHTiAtIE5FVElPX1BBQ0tFVF9QQURESU5HKTsKQEAgLTcyMiwxNSArNzc5LDYgQEAKIAkvKiBDb21wYXJlIHRvICJORVRJT19QS1RfQ1VTVE9NX0RBVEEocGt0KSIuICovCiAJdW5zaWduZWQgY2hhciAqYnVmID0gdmEgKyBORVRfSVBfQUxJR047CiAKLSNpZmRlZiBJR05PUkVfRFVQX0FDS1MKLQotCXN0YXRpYyBpbnQgb3RoZXI7Ci0Jc3RhdGljIGludCBmaW5hbDsKLQlzdGF0aWMgaW50IGtlZXA7Ci0Jc3RhdGljIGludCBza2lwOwotCi0jZW5kaWYKLQogCS8qIEludmFsaWRhdGUgdGhlIHBhY2tldCBidWZmZXIuICovCiAJaWYgKCFoYXNoX2RlZmF1bHQpCiAJCV9faW52X2J1ZmZlcihidWYsIGxlbik7CkBAIC03NDUsMTYgKzc5Myw4IEBACiAjaWZkZWYgVElMRV9ORVRfVkVSSUZZX0lOR1JFU1MKIAlpZiAoIU5FVElPX1BLVF9MNF9DU1VNX0NPUlJFQ1RfTShtZXRhZGF0YSwgcGt0KSAmJgogCSAgICBORVRJT19QS1RfTDRfQ1NVTV9DQUxDVUxBVEVEX00obWV0YWRhdGEsIHBrdCkpIHsKLQkJLyoKLQkJICogRklYTUU6IFRoaXMgY29tcGxhaW5zIGFib3V0IFVEUCBwYWNrZXRzCi0JCSAqIHdpdGggYSAiemVybyIgY2hlY2tzdW0gKGJ1ZyA2NjI0KS4KLQkJICovCi0jaWZkZWYgVElMRV9ORVRfUEFOSUNfT05fQkFECi0JCWR1bXBfcGFja2V0KGJ1ZiwgbGVuLCAicngiKTsKLQkJcGFuaWMoIkJhZCBMNCBjaGVja3N1bS4iKTsKLSNlbHNlCisJCS8qIEJ1ZyA2NjI0OiBJbmNsdWRlcyBVRFAgcGFja2V0cyB3aXRoIGEgInplcm8iIGNoZWNrc3VtLiAqLwogCQlwcl93YXJuaW5nKCJCYWQgTDQgY2hlY2tzdW0gb24gJWQgYnl0ZSBwYWNrZXQuXG4iLCBsZW4pOwotI2VuZGlmCiAJfQogCWlmICghTkVUSU9fUEtUX0wzX0NTVU1fQ09SUkVDVF9NKG1ldGFkYXRhLCBwa3QpICYmCiAJICAgIE5FVElPX1BLVF9MM19DU1VNX0NBTENVTEFURURfTShtZXRhZGF0YSwgcGt0KSkgewpAQCAtNzY5LDkwICs4MDksMjkgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIE5FVElPX1BLVF9TVEFUVVNfQkFEOgotI2lmZGVmIFRJTEVfTkVUX1BBTklDX09OX0JBRAotCQlkdW1wX3BhY2tldChidWYsIGxlbiwgInJ4Iik7Ci0JCXBhbmljKCJVbmV4cGVjdGVkIEJBRCBwYWNrZXQuIik7Ci0jZWxzZQotCQlwcl93YXJuaW5nKCJVbmV4cGVjdGVkIEJBRCAlZCBieXRlIHBhY2tldC5cbiIsIGxlbik7Ci0jZW5kaWYKKwkJcHJfd2FybmluZygiVW5leHBlY3RlZCBCQUQgJWxkIGJ5dGUgcGFja2V0LlxuIiwgbGVuKTsKIAl9CiAjZW5kaWYKIAogCWZpbHRlciA9IDA7CiAKKwkvKiBJU1NVRTogRmlsdGVyIFRDUCBwYWNrZXRzIHdpdGggImJhZCIgY2hlY2tzdW1zPyAqLworCiAJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpIHsKIAkJLyogRmlsdGVyIHBhY2tldHMgcmVjZWl2ZWQgYmVmb3JlIHdlJ3JlIHVwLiAqLwogCQlmaWx0ZXIgPSAxOworCX0gZWxzZSBpZiAoTkVUSU9fUEtUX1NUQVRVU19NKG1ldGFkYXRhLCBwa3QpID09IE5FVElPX1BLVF9TVEFUVVNfQkFEKSB7CisJCS8qIEZpbHRlciAidHJ1bmNhdGVkIiBwYWNrZXRzLiAqLworCQlmaWx0ZXIgPSAxOwogCX0gZWxzZSBpZiAoIShkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKSB7Ci0JCS8qCi0JCSAqIEZJWE1FOiBJbXBsZW1lbnQgSFcgbXVsdGljYXN0IGZpbHRlci4KLQkJICovCi0JCWlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYnVmKSkgeworCQkvKiBGSVhNRTogSW1wbGVtZW50IEhXIG11bHRpY2FzdCBmaWx0ZXIuICovCisJCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoYnVmKSkgewogCQkJLyogRmlsdGVyIHBhY2tldHMgbm90IGZvciBvdXIgYWRkcmVzcy4gKi8KIAkJCWNvbnN0IHU4ICptaW5lID0gZGV2LT5kZXZfYWRkcjsKIAkJCWZpbHRlciA9IGNvbXBhcmVfZXRoZXJfYWRkcihtaW5lLCBidWYpOwogCQl9CiAJfQogCi0jaWZkZWYgSUdOT1JFX0RVUF9BQ0tTCi0KLQlpZiAobGVuICE9IDY2KSB7Ci0JCS8qIEZJWE1FOiBNdXN0IGNoZWNrICJpc190Y3BfYWNrKGJ1ZiwgbGVuKSIgc29tZWhvdy4gKi8KLQotCQlvdGhlcisrOwotCi0JfSBlbHNlIGlmIChpbmRleDIgPT0KLQkJICAgcXNwLT5fX3BhY2tldF9yZWNlaXZlX3F1ZXVlLl9fcGFja2V0X3dyaXRlKSB7Ci0KLQkJZmluYWwrKzsKLQotCX0gZWxzZSB7Ci0KLQkJbmV0aW9fcGt0X3QgKnBrdDIgPSAobmV0aW9fcGt0X3QgKikKLQkJCSgodW5zaWduZWQgbG9uZykgJnFzcFsxXSArIGluZGV4Mik7Ci0KLQkJbmV0aW9fcGt0X21ldGFkYXRhX3QgKm1ldGFkYXRhMiA9Ci0JCQlORVRJT19QS1RfTUVUQURBVEEocGt0Mik7Ci0KLQkJLyogRXh0cmFjdCB0aGUgcGFja2V0IHNpemUuICovCi0JCXVuc2lnbmVkIGxvbmcgbGVuMiA9Ci0JCQkoTkVUSU9fUEtUX0NVU1RPTV9MRU5HVEgocGt0MikgKwotCQkJIE5FVF9JUF9BTElHTiAtIE5FVElPX1BBQ0tFVF9QQURESU5HKTsKLQotCQlpZiAobGVuMiA9PSA2NiAmJgotCQkgICAgTkVUSU9fUEtUX0ZMT1dfSEFTSF9NKG1ldGFkYXRhLCBwa3QpID09Ci0JCSAgICBORVRJT19QS1RfRkxPV19IQVNIX00obWV0YWRhdGEyLCBwa3QyKSkgewotCi0JCQkvKiBFeHRyYWN0IHRoZSAibGludXhfYnVmZmVyX3QiLiAqLwotCQkJdW5zaWduZWQgaW50IGJ1ZmZlcjIgPSBwa3QyLT5fX3BhY2tldC53b3JkOwotCi0JCQkvKiBDb252ZXJ0ICJsaW51eF9idWZmZXJfdCIgdG8gInZhIi4gKi8KLQkJCXZvaWQgKnZhMiA9Ci0JCQkJX192YSgocGh5c19hZGRyX3QpKGJ1ZmZlcjIgPj4gMSkgPDwgNyk7Ci0KLQkJCS8qIEV4dHJhY3QgdGhlIHBhY2tldCBkYXRhIHBvaW50ZXIuICovCi0JCQkvKiBDb21wYXJlIHRvICJORVRJT19QS1RfQ1VTVE9NX0RBVEEocGt0KSIuICovCi0JCQl1bnNpZ25lZCBjaGFyICpidWYyID0gdmEyICsgTkVUX0lQX0FMSUdOOwotCi0JCQkvKiBJbnZhbGlkYXRlIHRoZSBwYWNrZXQgYnVmZmVyLiAqLwotCQkJaWYgKCFoYXNoX2RlZmF1bHQpCi0JCQkJX19pbnZfYnVmZmVyKGJ1ZjIsIGxlbjIpOwotCi0JCQlpZiAoaXNfZHVwX2FjayhidWYsIGJ1ZjIsIGxlbikpIHsKLQkJCQlza2lwKys7Ci0JCQkJZmlsdGVyID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJa2VlcCsrOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJcHJfaW5mbygiT3RoZXIgJWQgRmluYWwgJWQgS2VlcCAlZCBTa2lwICVkLlxuIiwKLQkJCW90aGVyLCBmaW5hbCwga2VlcCwgc2tpcCk7Ci0KLSNlbmRpZgotCiAJaWYgKGZpbHRlcikgewogCiAJCS8qIElTU1VFOiBVcGRhdGUgImRyb3AiIHN0YXRpc3RpY3M/ICovCkBAIC04NzcsMTAgKzg1Niw3IEBACiAJCS8qIE5PVEU6IFRoaXMgY2FsbCBhbHNvIHNldHMgInNrYi0+ZGV2ID0gZGV2Ii4gKi8KIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAotCQkvKiBJU1NVRTogRGlzY2FyZCBjb3JydXB0IHBhY2tldHM/ICovCi0JCS8qIElTU1VFOiBEaXNjYXJkIHBhY2tldHMgd2l0aCBiYWQgY2hlY2tzdW1zPyAqLwotCi0JCS8qIEF2b2lkIHJlY29tcHV0aW5nIFRDUC9VRFAgY2hlY2tzdW1zLiAqLworCQkvKiBBdm9pZCByZWNvbXB1dGluZyAiZ29vZCIgVENQL1VEUCBjaGVja3N1bXMuICovCiAJCWlmIChORVRJT19QS1RfTDRfQ1NVTV9DT1JSRUNUX00obWV0YWRhdGEsIHBrdCkpCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCkBAIC05MTIsOSArODg4LDE0IEBACiAvKgogICogSGFuZGxlIHNvbWUgcGFja2V0cyBmb3IgdGhlIGdpdmVuIGRldmljZSBvbiB0aGUgY3VycmVudCBDUFUuCiAgKgotICogSVNTVUU6IFRoZSAicm90dGluZyBwYWNrZXQiIHJhY2UgY29uZGl0aW9uIG9jY3VycyBpZiBhIHBhY2tldAotICogYXJyaXZlcyBhZnRlciB0aGUgcXVldWUgYXBwZWFycyB0byBiZSBlbXB0eSwgYW5kIGJlZm9yZSB0aGUKLSAqIGh5cGVydmlzb3IgaW50ZXJydXB0IGlzIHJlLWVuYWJsZWQuCisgKiBJZiAidGlsZV9uZXRfc3RvcCgpIiBpcyBjYWxsZWQgb24gc29tZSBvdGhlciB0aWxlIHdoaWxlIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIHJ1bm5pbmcsIHdlIHdpbGwgcmV0dXJuLCBob3BlZnVsbHkgYmVmb3JlIHRoYXQKKyAqIG90aGVyIHRpbGUgYXNrcyB1cyB0byBjYWxsICJuYXBpX2Rpc2FibGUoKSIuCisgKgorICogVGhlICJyb3R0aW5nIHBhY2tldCIgcmFjZSBjb25kaXRpb24gb2NjdXJzIGlmIGEgcGFja2V0IGFycml2ZXMKKyAqIGR1cmluZyB0aGUgZXh0cmVtZWx5IG5hcnJvdyB3aW5kb3cgYmV0d2VlbiB0aGUgcXVldWUgYXBwZWFyaW5nIHRvCisgKiBiZSBlbXB0eSwgYW5kIHRoZSBpbmdyZXNzIGludGVycnVwdCBiZWluZyByZS1lbmFibGVkLiAgVGhpcyBoYXBwZW5zCisgKiBhIExPVCB1bmRlciBoZWF2eSBuZXR3b3JrIGxvYWQuCiAgKi8KIHN0YXRpYyBpbnQgdGlsZV9uZXRfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CkBAIC05MjgsNyArOTA5LDcgQEAKIAogCXVuc2lnbmVkIGludCB3b3JrID0gMDsKIAotCXdoaWxlICgxKSB7CisJd2hpbGUgKHByaXYtPmFjdGl2ZSkgewogCQlpbnQgaW5kZXggPSBxdXAtPl9fcGFja2V0X3JlY2VpdmVfcmVhZDsKIAkJaWYgKGluZGV4ID09IHFzcC0+X19wYWNrZXRfcmVjZWl2ZV9xdWV1ZS5fX3BhY2tldF93cml0ZSkKIAkJCWJyZWFrOwpAQCAtOTQxLDE5ICs5MjIsMjQgQEAKIAogCW5hcGlfY29tcGxldGUoJmluZm8tPm5hcGkpOwogCi0JLyogUmUtZW5hYmxlIGh5cGVydmlzb3IgaW50ZXJydXB0cy4gKi8KKwlpZiAoIXByaXYtPmFjdGl2ZSkKKwkJZ290byBkb25lOworCisJLyogUmUtZW5hYmxlIHRoZSBpbmdyZXNzIGludGVycnVwdC4gKi8KIAllbmFibGVfcGVyY3B1X2lycShwcml2LT5pbnRyX2lkKTsKIAotCS8qIEhBQ0s6IEF2b2lkIHRoZSAicm90dGluZyBwYWNrZXQiIHByb2JsZW0uICovCisJLyogSEFDSzogQXZvaWQgdGhlICJyb3R0aW5nIHBhY2tldCIgcHJvYmxlbSAoc2VlIGFib3ZlKS4gKi8KIAlpZiAocXVwLT5fX3BhY2tldF9yZWNlaXZlX3JlYWQgIT0KLQkgICAgcXNwLT5fX3BhY2tldF9yZWNlaXZlX3F1ZXVlLl9fcGFja2V0X3dyaXRlKQotCQluYXBpX3NjaGVkdWxlKCZpbmZvLT5uYXBpKTsKLQotCS8qIElTU1VFOiBIYW5kbGUgY29tcGxldGlvbnM/ICovCisJICAgIHFzcC0+X19wYWNrZXRfcmVjZWl2ZV9xdWV1ZS5fX3BhY2tldF93cml0ZSkgeworCQkvKiBJU1NVRTogU29tZXRpbWVzIHRoaXMgcmV0dXJucyB6ZXJvLCBwcmVzdW1hYmx5ICovCisJCS8qIGJlY2F1c2UgYW4gaW50ZXJydXB0IHdhcyBoYW5kbGVkIGZvciB0aGlzIHRpbGUuICovCisJCSh2b2lkKW5hcGlfcmVzY2hlZHVsZSgmaW5mby0+bmFwaSk7CisJfQogCiBkb25lOgogCi0JdGlsZV9uZXRfcHJvdmlkZV9uZWVkZWRfYnVmZmVycyhpbmZvKTsKKwlpZiAocHJpdi0+YWN0aXZlKQorCQl0aWxlX25ldF9wcm92aWRlX25lZWRlZF9idWZmZXJzKGluZm8pOwogCiAJcmV0dXJuIHdvcms7CiB9CkBAIC05NjEsNiArOTQ3LDEyIEBACiAKIC8qCiAgKiBIYW5kbGUgYW4gaW5ncmVzcyBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBkZXZpY2Ugb24gdGhlIGN1cnJlbnQgY3B1LgorICoKKyAqIElTU1VFOiBTb21ldGltZXMgdGhpcyBnZXRzIGNhbGxlZCBhZnRlciAiZGlzYWJsZV9wZXJjcHVfaXJxKCkiIGhhcworICogYmVlbiBjYWxsZWQhICBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byAicGVuZGluZyBoeXBlcnZpc29yIGRvd25jYWxscyIuCisgKgorICogSVNTVUU6IElzIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSAibmFwaV9zY2hlZHVsZSgpIiBoZXJlCisgKiBhbmQgdGhlICJuYXBpX2NvbXBsZXRlKCkiIGNhbGwgYWJvdmU/CiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCB0aWxlX25ldF9oYW5kbGVfaW5ncmVzc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X3B0cikKIHsKQEAgLTk2OSw5ICs5NjEsMTUgQEAKIAlpbnQgbXlfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCB0aWxlX25ldF9jcHUgKmluZm8gPSBwcml2LT5jcHVbbXlfY3B1XTsKIAotCS8qIERpc2FibGUgaHlwZXJ2aXNvciBpbnRlcnJ1cHQuICovCisJLyogRGlzYWJsZSB0aGUgaW5ncmVzcyBpbnRlcnJ1cHQuICovCiAJZGlzYWJsZV9wZXJjcHVfaXJxKHByaXYtPmludHJfaWQpOwogCisJLyogSWdub3JlIHVud2FudGVkIGludGVycnVwdHMuICovCisJaWYgKCFwcml2LT5hY3RpdmUpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCS8qIElTU1VFOiBTb21ldGltZXMgImluZm8tPm5hcGlfZW5hYmxlZCIgaXMgZmFsc2UgaGVyZS4gKi8KKwogCW5hcGlfc2NoZWR1bGUoJmluZm8tPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTAwNSw4ICsxMDAzLDcgQEAKIAkgKi8KIAl7CiAJCWludCBlcHBfaG9tZSA9IGh2X2xvdGFyX3RvX2NwdShlcHBfbG90YXIpOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShwcml2LT5lcHBfcXVldWUpOwotCQlob21lY2FjaGVfY2hhbmdlX3BhZ2VfaG9tZShwYWdlLCAwLCBlcHBfaG9tZSk7CisJCWhvbWVjYWNoZV9jaGFuZ2VfcGFnZV9ob21lKHByaXYtPmVxX3BhZ2VzLCBFUV9PUkRFUiwgZXBwX2hvbWUpOwogCX0KIAogCS8qCkBAIC0xMDE1LDkgKzEwMTIsOSBAQAogCXsKIAkJbmV0aW9faXBwX2FkZHJlc3NfdCBlYSA9IHsKIAkJCS52YSA9IDAsCi0JCQkucGEgPSBfX3BhKHByaXYtPmVwcF9xdWV1ZSksCisJCQkucGEgPSBfX3BhKHByaXYtPmVxKSwKIAkJCS5wdGUgPSBodl9wdGUoMCksCi0JCQkuc2l6ZSA9IFBBR0VfU0laRSwKKwkJCS5zaXplID0gRVFfU0laRSwKIAkJfTsKIAkJZWEucHRlID0gaHZfcHRlX3NldF9sb3RhcihlYS5wdGUsIGVwcF9sb3Rhcik7CiAJCWVhLnB0ZSA9IGh2X3B0ZV9zZXRfbW9kZShlYS5wdGUsIEhWX1BURV9NT0RFX0NBQ0hFX1RJTEVfTDMpOwpAQCAtMTA0Myw3ICsxMDQwLDcgQEAKIAogCiAvKgotICogUmVnaXN0ZXIgd2l0aCBoeXBlcnZpc29yIG9uIGVhY2ggQ1BVLgorICogUmVnaXN0ZXIgd2l0aCBoeXBlcnZpc29yIG9uIHRoZSBjdXJyZW50IENQVS4KICAqCiAgKiBTdHJhbmdlbHksIHRoaXMgZnVuY3Rpb24gZG9lcyBpbXBvcnRhbnQgdGhpbmdzIGV2ZW4gaWYgaXQgImZhaWxzIiwKICAqIHdoaWNoIGlzIGVzcGVjaWFsbHkgY29tbW9uIGlmIHRoZSBsaW5rIGlzIG5vdCB1cCB5ZXQuICBIb3BlZnVsbHkKQEAgLTEwOTIsNyArMTA4OSw4IEBACiAJcHJpdi0+Y3B1W215X2NwdV0gPSBpbmZvOwogCiAJLyoKLQkgKiBSZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgSVBQLgorCSAqIFJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIExJUFAuICBUaGlzIGRvZXMgYSBsb3Qgb2Ygc3R1ZmYsCisJICogaW5jbHVkaW5nIGludm9raW5nIHRoZSBMSVBQIHJlZ2lzdHJhdGlvbiBjb2RlLgogCSAqLwogCXJldCA9IGh2X2Rldl9wd3JpdGUocHJpdi0+aHZfZGV2aGRsLCAwLAogCQkJICAgIChIVl9WaXJ0QWRkcikmY29uZmlnLApAQCAtMTEwMSw4ICsxMDk5LDExIEBACiAJUERFQlVHKCJodl9kZXZfcHdyaXRlKE5FVElPX0lQUF9JTlBVVF9SRUdJU1RFUl9PRkYpIHJldHVybmVkICVkXG4iLAogCSAgICAgICByZXQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJodl9kZXZfcHdyaXRlIE5FVElPX0lQUF9JTlBVVF9SRUdJU1RFUl9PRkYiCi0JCSAgICAgICAiIGZhaWx1cmUgJWRcbiIsIHJldCk7CisJCWlmIChyZXQgIT0gTkVUSU9fTElOS19ET1dOKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiaHZfZGV2X3B3cml0ZSAiCisJCQkgICAgICAgIk5FVElPX0lQUF9JTlBVVF9SRUdJU1RFUl9PRkYgZmFpbHVyZSAlZFxuIiwKKwkJCSAgICAgICByZXQpOworCQl9CiAJCWluZm8tPmxpbmtfZG93biA9IChyZXQgPT0gTkVUSU9fTElOS19ET1dOKTsKIAkJcmV0dXJuOwogCX0KQEAgLTExNDUsMTUgKzExNDYsNDcgQEAKIAkJCSAgIE5FVElPX0lQUF9HRVRfRkFTVElPX09GRik7CiAJUERFQlVHKCJodl9kZXZfcHJlYWQoTkVUSU9fSVBQX0dFVF9GQVNUSU9fT0ZGKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAotCW5ldGlmX25hcGlfYWRkKGRldiwgJmluZm8tPm5hcGksIHRpbGVfbmV0X3BvbGwsIDY0KTsKLQogCS8qIE5vdyB3ZSBhcmUgcmVnaXN0ZXJlZC4gKi8KIAlpbmZvLT5yZWdpc3RlcmVkID0gdHJ1ZTsKIH0KIAogCiAvKgotICogVW5yZWdpc3RlciB3aXRoIGh5cGVydmlzb3Igb24gZWFjaCBDUFUuCisgKiBEZXJlZ2lzdGVyIHdpdGggaHlwZXJ2aXNvciBvbiB0aGUgY3VycmVudCBDUFUuCisgKgorICogVGhpcyBzaW1wbHkgZGlzY2FyZHMgYWxsIG91ciBjcmVkaXRzLCBzbyBubyBtb3JlIHBhY2tldHMgd2lsbCBiZQorICogZGVsaXZlcmVkIHRvIHRoaXMgdGlsZS4gIFRoZXJlIG1heSBzdGlsbCBiZSBwYWNrZXRzIGluIG91ciBxdWV1ZS4KKyAqCisgKiBBbHNvLCBkaXNhYmxlIHRoZSBpbmdyZXNzIGludGVycnVwdC4KKyAqLworc3RhdGljIHZvaWQgdGlsZV9uZXRfZGVyZWdpc3Rlcih2b2lkICpkZXZfcHRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfcHRyOworCXN0cnVjdCB0aWxlX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbXlfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCB0aWxlX25ldF9jcHUgKmluZm8gPSBwcml2LT5jcHVbbXlfY3B1XTsKKworCS8qIERpc2FibGUgdGhlIGluZ3Jlc3MgaW50ZXJydXB0LiAqLworCWRpc2FibGVfcGVyY3B1X2lycShwcml2LT5pbnRyX2lkKTsKKworCS8qIERvIG5vdGhpbmcgZWxzZSBpZiBub3QgcmVnaXN0ZXJlZC4gKi8KKwlpZiAoaW5mbyA9PSBOVUxMIHx8ICFpbmZvLT5yZWdpc3RlcmVkKQorCQlyZXR1cm47CisKKwl7CisJCXN0cnVjdCB0aWxlX25ldGlvX3F1ZXVlICpxdWV1ZSA9ICZpbmZvLT5xdWV1ZTsKKwkJbmV0aW9fcXVldWVfdXNlcl9pbXBsX3QgKnF1cCA9ICZxdWV1ZS0+X191c2VyX3BhcnQ7CisKKwkJLyogRGlzY2FyZCBhbGwgb3VyIGNyZWRpdHMuICovCisJCV9fbmV0aW9fZmFzdGlvX3JldHVybl9jcmVkaXRzKHF1cC0+X19mYXN0aW9faW5kZXgsIC0xKTsKKwl9Cit9CisKKworLyoKKyAqIFVucmVnaXN0ZXIgd2l0aCBoeXBlcnZpc29yIG9uIHRoZSBjdXJyZW50IENQVS4KKyAqCisgKiBBbHNvLCBkaXNhYmxlIHRoZSBpbmdyZXNzIGludGVycnVwdC4KICAqLwogc3RhdGljIHZvaWQgdGlsZV9uZXRfdW5yZWdpc3Rlcih2b2lkICpkZXZfcHRyKQogewpAQCAtMTE2MiwzNSArMTE5NSwyMyBAQAogCWludCBteV9jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRpbGVfbmV0X2NwdSAqaW5mbyA9IHByaXYtPmNwdVtteV9jcHVdOwogCi0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAlpbnQgZHVtbXkgPSAwOwogCi0JLyogRG8gbm90aGluZyBpZiBuZXZlciByZWdpc3RlcmVkLiAqLwotCWlmIChpbmZvID09IE5VTEwpCisJLyogRGlzYWJsZSB0aGUgaW5ncmVzcyBpbnRlcnJ1cHQuICovCisJZGlzYWJsZV9wZXJjcHVfaXJxKHByaXYtPmludHJfaWQpOworCisJLyogRG8gbm90aGluZyBlbHNlIGlmIG5vdCByZWdpc3RlcmVkLiAqLworCWlmIChpbmZvID09IE5VTEwgfHwgIWluZm8tPnJlZ2lzdGVyZWQpCiAJCXJldHVybjsKIAotCS8qIERvIG5vdGhpbmcgaWYgYWxyZWFkeSB1bnJlZ2lzdGVyZWQuICovCi0JaWYgKCFpbmZvLT5yZWdpc3RlcmVkKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFVucmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggTElQUC4KLQkgKi8KKwkvKiBVbnJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIExJUFAvTEVQUC4gKi8KIAlyZXQgPSBodl9kZXZfcHdyaXRlKHByaXYtPmh2X2RldmhkbCwgMCwgKEhWX1ZpcnRBZGRyKSZkdW1teSwKIAkJCSAgICBzaXplb2YoZHVtbXkpLCBORVRJT19JUFBfSU5QVVRfVU5SRUdJU1RFUl9PRkYpOwotCVBERUJVRygiaHZfZGV2X3B3cml0ZShORVRJT19JUFBfSU5QVVRfVU5SRUdJU1RFUl9PRkYpIHJldHVybmVkICVkXG4iLAotCSAgICAgICByZXQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCS8qIEZJWE1FOiBKdXN0IHBhbmljPyAqLwotCQlwcl9lcnIoImh2X2Rldl9wd3JpdGUgTkVUSU9fSVBQX0lOUFVUX1VOUkVHSVNURVJfT0ZGIgotCQkgICAgICAgIiBmYWlsdXJlICVkXG4iLCByZXQpOwotCX0KKwlpZiAocmV0IDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byB1bnJlZ2lzdGVyIHdpdGggTElQUC9MRVBQIVxuIik7CiAKLQkvKgotCSAqIERpc2NhcmQgYWxsIHBhY2tldHMgc3RpbGwgaW4gb3VyIE5ldElPIHF1ZXVlLiAgSG9wZWZ1bGx5LAotCSAqIG9uY2UgdGhlIHVucmVnaXN0ZXIgY2FsbCBpcyBjb21wbGV0ZSwgdGhlcmUgd2lsbCBiZSBubwotCSAqIHBhY2tldHMgc3RpbGwgaW4gZmxpZ2h0IG9uIHRoZSBJRE4uCi0JICovCisJLyogRGlzY2FyZCBhbGwgcGFja2V0cyBzdGlsbCBpbiBvdXIgTmV0SU8gcXVldWUuICovCiAJdGlsZV9uZXRfZGlzY2FyZF9wYWNrZXRzKGRldik7CiAKIAkvKiBSZXNldCBzdGF0ZS4gKi8KQEAgLTEyMDAsMTEgKzEyMjEsNiBAQAogCS8qIENhbmNlbCBlZ3Jlc3MgdGltZXIuICovCiAJZGVsX3RpbWVyKCZpbmZvLT5lZ3Jlc3NfdGltZXIpOwogCWluZm8tPmVncmVzc190aW1lcl9zY2hlZHVsZWQgPSBmYWxzZTsKLQotCW5ldGlmX25hcGlfZGVsKCZpbmZvLT5uYXBpKTsKLQotCS8qIE5vdyB3ZSBhcmUgdW5yZWdpc3RlcmVkLiAqLwotCWluZm8tPnJlZ2lzdGVyZWQgPSBmYWxzZTsKIH0KIAogCkBAIC0xMjEyLDE4ICsxMjI4LDI4IEBACiAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yICJ0aWxlX25ldF9zdG9wKCkiLgogICoKICAqIEFsc28gdXNlZCB0byBoYW5kbGUgcmVnaXN0cmF0aW9uIGZhaWx1cmUgaW4gInRpbGVfbmV0X29wZW5faW5uZXIoKSIsCi0gKiB3aGVuICJmdWxseV9vcGVuZWQiIGlzIGtub3duIHRvIGJlIGZhbHNlLCBhbmQgdGhlIHZhcmlvdXMgZXh0cmEKLSAqIHN0ZXBzIGluICJ0aWxlX25ldF9zdG9wKCkiIGFyZSBub3QgbmVjZXNzYXJ5LiAgSVNTVUU6IEl0IG1pZ2h0IGJlCi0gKiBzaW1wbGVyIGlmIHdlIGNvdWxkIGp1c3QgY2FsbCAidGlsZV9uZXRfc3RvcCgpIiBhbnl3YXkuCisgKiB3aGVuIHRoZSB2YXJpb3VzIGV4dHJhIHN0ZXBzIGluICJ0aWxlX25ldF9zdG9wKCkiIGFyZSBub3QgbmVjZXNzYXJ5LgogICovCiBzdGF0aWMgdm9pZCB0aWxlX25ldF9zdG9wX2F1eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0aWxlX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKIAogCWludCBkdW1teSA9IDA7CiAKLQkvKiBVbnJlZ2lzdGVyIGFsbCB0aWxlcywgc28gTElQUCB3aWxsIHN0b3AgZGVsaXZlcmluZyBwYWNrZXRzLiAqLworCS8qCisJICogVW5yZWdpc3RlciBhbGwgdGlsZXMsIHNvIExJUFAgd2lsbCBzdG9wIGRlbGl2ZXJpbmcgcGFja2V0cy4KKwkgKiBBbHNvLCBkZWxldGUgYWxsIHRoZSAibmFwaSIgb2JqZWN0cyAoc2VxdWVudGlhbGx5LCB0byBwcm90ZWN0CisJICogImRldi0+bmFwaV9saXN0IikuCisJICovCiAJb25fZWFjaF9jcHUodGlsZV9uZXRfdW5yZWdpc3RlciwgKHZvaWQgKilkZXYsIDEpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQlzdHJ1Y3QgdGlsZV9uZXRfY3B1ICppbmZvID0gcHJpdi0+Y3B1W2ldOworCQlpZiAoaW5mbyAhPSBOVUxMICYmIGluZm8tPnJlZ2lzdGVyZWQpIHsKKwkJCW5ldGlmX25hcGlfZGVsKCZpbmZvLT5uYXBpKTsKKwkJCWluZm8tPnJlZ2lzdGVyZWQgPSBmYWxzZTsKKwkJfQorCX0KIAogCS8qIFN0b3AgTElQUC9MRVBQLiAqLwogCWlmIChodl9kZXZfcHdyaXRlKHByaXYtPmh2X2RldmhkbCwgMCwgKEhWX1ZpcnRBZGRyKSZkdW1teSwKQEAgLTEyMzUsMTggKzEyNjEsMTUgQEAKIAogCiAvKgotICogRGlzYWJsZSBpbmdyZXNzIGludGVycnVwdHMgZm9yIHRoZSBnaXZlbiBkZXZpY2Ugb24gdGhlIGN1cnJlbnQgY3B1LgorICogRGlzYWJsZSBOQVBJIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIG9uIHRoZSBjdXJyZW50IGNwdS4KICAqLwotc3RhdGljIHZvaWQgdGlsZV9uZXRfZGlzYWJsZV9pbnRyKHZvaWQgKmRldl9wdHIpCitzdGF0aWMgdm9pZCB0aWxlX25ldF9zdG9wX2Rpc2FibGUodm9pZCAqZGV2X3B0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X3B0cjsKIAlzdHJ1Y3QgdGlsZV9uZXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IG15X2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdGlsZV9uZXRfY3B1ICppbmZvID0gcHJpdi0+Y3B1W215X2NwdV07CiAKLQkvKiBEaXNhYmxlIGh5cGVydmlzb3IgaW50ZXJydXB0LiAqLwotCWRpc2FibGVfcGVyY3B1X2lycShwcml2LT5pbnRyX2lkKTsKLQogCS8qIERpc2FibGUgTkFQSSBpZiBuZWVkZWQuICovCiAJaWYgKGluZm8gIT0gTlVMTCAmJiBpbmZvLT5uYXBpX2VuYWJsZWQpIHsKIAkJbmFwaV9kaXNhYmxlKCZpbmZvLT5uYXBpKTsKQEAgLTEyNTYsMjEgKzEyNzksMjQgQEAKIAogCiAvKgotICogRW5hYmxlIGluZ3Jlc3MgaW50ZXJydXB0cyBmb3IgdGhlIGdpdmVuIGRldmljZSBvbiB0aGUgY3VycmVudCBjcHUuCisgKiBFbmFibGUgTkFQSSBhbmQgdGhlIGluZ3Jlc3MgaW50ZXJydXB0IGZvciB0aGUgZ2l2ZW4gZGV2aWNlCisgKiBvbiB0aGUgY3VycmVudCBjcHUuCisgKgorICogSVNTVUU6IE9ubHkgZG8gdGhpcyBmb3IgIm5ldHdvcmsgY3B1cyI/CiAgKi8KLXN0YXRpYyB2b2lkIHRpbGVfbmV0X2VuYWJsZV9pbnRyKHZvaWQgKmRldl9wdHIpCitzdGF0aWMgdm9pZCB0aWxlX25ldF9vcGVuX2VuYWJsZSh2b2lkICpkZXZfcHRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfcHRyOwogCXN0cnVjdCB0aWxlX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgbXlfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCB0aWxlX25ldF9jcHUgKmluZm8gPSBwcml2LT5jcHVbbXlfY3B1XTsKIAotCS8qIEVuYWJsZSBoeXBlcnZpc29yIGludGVycnVwdC4gKi8KLQllbmFibGVfcGVyY3B1X2lycShwcml2LT5pbnRyX2lkKTsKLQogCS8qIEVuYWJsZSBOQVBJLiAqLwogCW5hcGlfZW5hYmxlKCZpbmZvLT5uYXBpKTsKIAlpbmZvLT5uYXBpX2VuYWJsZWQgPSB0cnVlOworCisJLyogRW5hYmxlIHRoZSBpbmdyZXNzIGludGVycnVwdC4gKi8KKwllbmFibGVfcGVyY3B1X2lycShwcml2LT5pbnRyX2lkKTsKIH0KIAogCkBAIC0xMjg4LDggKzEzMTQsOSBAQAogCWludCBteV9jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRpbGVfbmV0X2NwdSAqaW5mbzsKIAlzdHJ1Y3QgdGlsZV9uZXRpb19xdWV1ZSAqcXVldWU7Ci0JdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgaTsKKwlpbnQgZHVtbXkgPSAwOwogCiAJLyoKIAkgKiBGaXJzdCB0cnkgdG8gcmVnaXN0ZXIganVzdCBvbiB0aGUgbG9jYWwgQ1BVLCBhbmQgaGFuZGxlIGFueQpAQCAtMTMwNyw0MiArMTMzNCw1MiBAQAogCS8qCiAJICogTm93IHJlZ2lzdGVyIGV2ZXJ5d2hlcmUgZWxzZS4gIElmIGFueSByZWdpc3RyYXRpb24gZmFpbHMsCiAJICogZXZlbiBmb3IgImxpbmsgZG93biIgKHdoaWNoIG1pZ2h0IG5vdCBiZSBwb3NzaWJsZSksIHdlCi0JICogY2xlYW4gdXAgdXNpbmcgInRpbGVfbmV0X3N0b3BfYXV4KCkiLgorCSAqIGNsZWFuIHVwIHVzaW5nICJ0aWxlX25ldF9zdG9wX2F1eCgpIi4gIEFsc28sIGFkZCBhbGwgdGhlCisJICogIm5hcGkiIG9iamVjdHMgKHNlcXVlbnRpYWxseSwgdG8gcHJvdGVjdCAiZGV2LT5uYXBpX2xpc3QiKS4KKwkgKiBJU1NVRTogT25seSB1c2UgIm5ldGlmX25hcGlfYWRkKCkiIGZvciAibmV0d29yayBjcHVzIj8KIAkgKi8KIAlzbXBfY2FsbF9mdW5jdGlvbih0aWxlX25ldF9yZWdpc3RlciwgKHZvaWQgKilkZXYsIDEpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpZiAoIXByaXYtPmNwdVtpXS0+cmVnaXN0ZXJlZCkgewotCQkJdGlsZV9uZXRfc3RvcF9hdXgoZGV2KTsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9CisJCXN0cnVjdCB0aWxlX25ldF9jcHUgKmluZm8gPSBwcml2LT5jcHVbaV07CisJCWlmIChpbmZvLT5yZWdpc3RlcmVkKQorCQkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmaW5mby0+bmFwaSwgdGlsZV9uZXRfcG9sbCwgNjQpOworCQllbHNlCisJCQlyZXN1bHQgPSAtRUFHQUlOOworCX0KKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJdGlsZV9uZXRfc3RvcF9hdXgoZGV2KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKIAlxdWV1ZSA9ICZpbmZvLT5xdWV1ZTsKIAotCS8qCi0JICogU2V0IHRoZSBkZXZpY2UgaW50ciBiaXQgbWFzay4KLQkgKiBUaGUgdGlsZV9uZXRfcmVnaXN0ZXIgYWJvdmUgc2V0cyBwZXIgdGlsZSBfX2ludHJfaWQuCi0JICovCi0JcHJpdi0+aW50cl9pZCA9IHF1ZXVlLT5fX3N5c3RlbV9wYXJ0LT5fX2ludHJfaWQ7Ci0JQlVHX09OKCFwcml2LT5pbnRyX2lkKTsKKwlpZiAocHJpdi0+aW50cl9pZCA9PSAwKSB7CisJCXVuc2lnbmVkIGludCBpcnE7CiAKLQkvKgotCSAqIFJlZ2lzdGVyIHRoZSBkZXZpY2UgaW50ZXJydXB0IGhhbmRsZXIuCi0JICogVGhlIF9fZmZzKCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5kZXggaW50byB0aGUgaW50ZXJydXB0IGhhbmRsZXIKLQkgKiB0YWJsZSBmcm9tIHRoZSBpbnRlcnJ1cHQgYml0IG1hc2sgd2hpY2ggc2hvdWxkIGhhdmUgb25lIGJpdAotCSAqIGFuZCBvbmUgYml0IG9ubHkgc2V0LgotCSAqLwotCWlycSA9IF9fZmZzKHByaXYtPmludHJfaWQpOwotCXRpbGVfaXJxX2FjdGl2YXRlKGlycSwgVElMRV9JUlFfUEVSQ1BVKTsKLQlCVUdfT04ocmVxdWVzdF9pcnEoaXJxLCB0aWxlX25ldF9oYW5kbGVfaW5ncmVzc19pbnRlcnJ1cHQsCi0JCQkgICAwLCBkZXYtPm5hbWUsICh2b2lkICopZGV2KSAhPSAwKTsKKwkJLyoKKwkJICogQWNxdWlyZSB0aGUgaXJxIGFsbG9jYXRlZCBieSB0aGUgaHlwZXJ2aXNvci4gIEV2ZXJ5CisJCSAqIHF1ZXVlIGdldHMgdGhlIHNhbWUgaXJxLiAgVGhlICJfX2ludHJfaWQiIGZpZWxkIGlzCisJCSAqICIxIDw8IGlycSIsIHNvIHdlIHVzZSAiX19mZnMoKSIgdG8gZXh0cmFjdCAiaXJxIi4KKwkJICovCisJCXByaXYtPmludHJfaWQgPSBxdWV1ZS0+X19zeXN0ZW1fcGFydC0+X19pbnRyX2lkOworCQlCVUdfT04ocHJpdi0+aW50cl9pZCA9PSAwKTsKKwkJaXJxID0gX19mZnMocHJpdi0+aW50cl9pZCk7CiAKLQkvKiBJU1NVRTogSG93IGNvdWxkICJwcml2LT5mdWxseV9vcGVuZWQiIGV2ZXIgYmUgInRydWUiIGhlcmU/ICovCisJCS8qCisJCSAqIFJlZ2lzdGVyIHRoZSBpbmdyZXNzIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGlzCisJCSAqIGRldmljZSwgcGVybWFuZW50bHkuCisJCSAqCisJCSAqIFdlIHVzZWQgdG8gY2FsbCAiZnJlZV9pcnEoKSIgaW4gInRpbGVfbmV0X3N0b3AoKSIsCisJCSAqIGFuZCB0aGVuIHJlLXJlZ2lzdGVyIHRoZSBoYW5kbGVyIGhlcmUgZXZlcnkgdGltZSwKKwkJICogYnV0IHRoYXQgY2F1c2VkIEROUCBlcnJvcnMgaW4gImhhbmRsZV9JUlFfZXZlbnQoKSIKKwkJICogYmVjYXVzZSAiZGVzYy0+YWN0aW9uIiB3YXMgTlVMTC4gIFNlZSBidWcgOTE0My4KKwkJICovCisJCXRpbGVfaXJxX2FjdGl2YXRlKGlycSwgVElMRV9JUlFfUEVSQ1BVKTsKKwkJQlVHX09OKHJlcXVlc3RfaXJxKGlycSwgdGlsZV9uZXRfaGFuZGxlX2luZ3Jlc3NfaW50ZXJydXB0LAorCQkJCSAgIDAsIGRldi0+bmFtZSwgKHZvaWQgKilkZXYpICE9IDApOworCX0KIAotCWlmICghcHJpdi0+ZnVsbHlfb3BlbmVkKSB7Ci0KLQkJaW50IGR1bW15ID0gMDsKLQorCXsKIAkJLyogQWxsb2NhdGUgaW5pdGlhbCBidWZmZXJzLiAqLwogCiAJCWludCBtYXhfYnVmZmVycyA9CkBAIC0xMzU5LDE4ICsxMzk2LDIxIEBACiAJCWlmIChpbmZvLT5udW1fbmVlZGVkX3NtYWxsX2J1ZmZlcnMgIT0gMCB8fAogCQkgICAgaW5mby0+bnVtX25lZWRlZF9sYXJnZV9idWZmZXJzICE9IDApCiAJCQlwYW5pYygiSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgYnVmZmVyIHN0YWNrISIpOwotCi0JCS8qIFN0YXJ0IExJUFAvTEVQUCBhbmQgYWN0aXZhdGUgImluZ3Jlc3MiIGF0IHRoZSBzaGltLiAqLwotCQlpZiAoaHZfZGV2X3B3cml0ZShwcml2LT5odl9kZXZoZGwsIDAsIChIVl9WaXJ0QWRkcikmZHVtbXksCi0JCQkJICBzaXplb2YoZHVtbXkpLCBORVRJT19JUFBfSU5QVVRfSU5JVF9PRkYpIDwgMCkKLQkJCXBhbmljKCJGYWlsZWQgdG8gYWN0aXZhdGUgdGhlIExJUFAgU2hpbSFcbiIpOwotCi0JCXByaXYtPmZ1bGx5X29wZW5lZCA9IDE7CiAJfQogCi0JLyogT24gZWFjaCB0aWxlLCBlbmFibGUgdGhlIGh5cGVydmlzb3IgdG8gdHJpZ2dlciBpbnRlcnJ1cHRzLiAqLwotCS8qIElTU1VFOiBEbyB0aGlzIGJlZm9yZSBzdGFydGluZyBMSVBQL0xFUFA/ICovCi0Jb25fZWFjaF9jcHUodGlsZV9uZXRfZW5hYmxlX2ludHIsICh2b2lkICopZGV2LCAxKTsKKwkvKiBXZSBhcmUgYWJvdXQgdG8gYmUgYWN0aXZlLiAqLworCXByaXYtPmFjdGl2ZSA9IHRydWU7CisKKwkvKiBNYWtlIHN1cmUgImFjdGl2ZSIgaXMgdmlzaWJsZSB0byBhbGwgdGlsZXMuICovCisJbWIoKTsKKworCS8qIE9uIGVhY2ggdGlsZSwgZW5hYmxlIE5BUEkgYW5kIHRoZSBpbmdyZXNzIGludGVycnVwdC4gKi8KKwlvbl9lYWNoX2NwdSh0aWxlX25ldF9vcGVuX2VuYWJsZSwgKHZvaWQgKilkZXYsIDEpOworCisJLyogU3RhcnQgTElQUC9MRVBQIGFuZCBhY3RpdmF0ZSAiaW5ncmVzcyIgYXQgdGhlIHNoaW0uICovCisJaWYgKGh2X2Rldl9wd3JpdGUocHJpdi0+aHZfZGV2aGRsLCAwLCAoSFZfVmlydEFkZHIpJmR1bW15LAorCQkJICBzaXplb2YoZHVtbXkpLCBORVRJT19JUFBfSU5QVVRfSU5JVF9PRkYpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byBhY3RpdmF0ZSB0aGUgTElQUCBTaGltIVxuIik7CiAKIAkvKiBTdGFydCBvdXIgdHJhbnNtaXQgcXVldWUuICovCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKQEAgLTEzOTYsOSArMTQzNiw5IEBACiAJICogb3Vyc2VsdmVzIHRvIHRyeSBhZ2FpbiBsYXRlcjsgb3RoZXJ3aXNlLCB0ZWxsIExpbnV4IHdlIG5vdyBoYXZlCiAJICogYSB3b3JraW5nIGxpbmsuICBJU1NVRTogV2hhdCBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5lZ2F0aXZlPwogCSAqLwotCWlmICh0aWxlX25ldF9vcGVuX2lubmVyKHByaXYtPmRldikpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihzaW5nbGV0aHJlYWRfY3B1LCAmcHJpdi0+cmV0cnlfd29yaywKLQkJCQkJIFRJTEVfTkVUX1JFVFJZX0lOVEVSVkFMKTsKKwlpZiAodGlsZV9uZXRfb3Blbl9pbm5lcihwcml2LT5kZXYpICE9IDApCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+cmV0cnlfd29yaywKKwkJCQkgICAgICBUSUxFX05FVF9SRVRSWV9JTlRFUlZBTCk7CiAJZWxzZQogCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPmRldik7CiB9CkBAIC0xNDEyLDggKzE0NTIsOCBAQAogICogVGhlIG9wZW4gZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYSBuZXR3b3JrIGludGVyZmFjZSBpcyBtYWRlCiAgKiBhY3RpdmUgYnkgdGhlIHN5c3RlbSAoSUZGX1VQKS4gIEF0IHRoaXMgcG9pbnQgYWxsIHJlc291cmNlcyBuZWVkZWQKICAqIGZvciB0cmFuc21pdCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIGFyZSBhbGxvY2F0ZWQsIHRoZSBpbnRlcnJ1cHQKLSAqIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBPUywgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIHN0YXJ0ZWQsCi0gKiBhbmQgdGhlIHN0YWNrIGlzIG5vdGlmaWVkIHRoYXQgdGhlIGludGVyZmFjZSBpcyByZWFkeS4KKyAqIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBPUyAoaWYgbmVlZGVkKSwgdGhlIHdhdGNoZG9nIHRpbWVyCisgKiBpcyBzdGFydGVkLCBhbmQgdGhlIHN0YWNrIGlzIG5vdGlmaWVkIHRoYXQgdGhlIGludGVyZmFjZSBpcyByZWFkeS4KICAqCiAgKiBJZiB0aGUgYWN0dWFsIGxpbmsgaXMgbm90IGF2YWlsYWJsZSB5ZXQsIHRoZW4gd2UgdGVsbCBMaW51eCB0aGF0CiAgKiB3ZSBoYXZlIG5vIGNhcnJpZXIsIGFuZCB3ZSBrZWVwIGNoZWNraW5nIHVudGlsIHRoZSBsaW5rIGNvbWVzIHVwLgpAQCAtMTQ2OCw2ICsxNTA4LDEwIEBACiAjZW5kaWYKIAogCQlwcml2LT5wYXJ0bHlfb3BlbmVkID0gMTsKKworCX0gZWxzZSB7CisJCS8qIEZJWE1FOiBJcyB0aGlzIHBvc3NpYmxlPyAqLworCQkvKiBwcmludGsoIkFscmVhZHkgcGFydGx5IG9wZW5lZC5cbiIpOyAqLwogCX0KIAogCS8qCkBAIC0xNDg3LDU3ICsxNTMxLDE3IEBACiAJICogYW5kIHRoZW4gcmVtZW1iZXIgdG8gdHJ5IGFnYWluIGxhdGVyLgogCSAqLwogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKHNpbmdsZXRocmVhZF9jcHUsICZwcml2LT5yZXRyeV93b3JrLAotCQkJCSBUSUxFX05FVF9SRVRSWV9JTlRFUlZBTCk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5yZXRyeV93b3JrLCBUSUxFX05FVF9SRVRSWV9JTlRFUlZBTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogCi0vKgotICogRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZS4KLSAqCi0gKiBSZXR1cm5zIDAsIHRoaXMgaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4KLSAqCi0gKiBUaGUgY2xvc2UgZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGRlLWFjdGl2YXRlZAotICogYnkgdGhlIE9TLiAgVGhlIGhhcmR3YXJlIGlzIHN0aWxsIHVuZGVyIHRoZSBkcml2ZXJzIGNvbnRyb2wsIGJ1dAotICogbmVlZHMgdG8gYmUgZGlzYWJsZWQuICBBIGdsb2JhbCBNQUMgcmVzZXQgaXMgaXNzdWVkIHRvIHN0b3AgdGhlCi0gKiBoYXJkd2FyZSwgYW5kIGFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgotICoKLSAqIElTU1VFOiBDYW4gdGhpcyBjYW4gYmUgY2FsbGVkIHdoaWxlICJ0aWxlX25ldF9wb2xsKCkiIGlzIHJ1bm5pbmc/Ci0gKi8KLXN0YXRpYyBpbnQgdGlsZV9uZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCB0aWxlX25ldF9kcmFpbl9saXBwX2J1ZmZlcnMoc3RydWN0IHRpbGVfbmV0X3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IHRpbGVfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBuID0gMDsKIAotCWJvb2wgcGVuZGluZyA9IHRydWU7Ci0KLQlQREVCVUcoInRpbGVfbmV0X3N0b3AoKVxuIik7Ci0KLQkvKiBJU1NVRTogT25seSBuZWVkZWQgaWYgbm90IHlldCBmdWxseSBvcGVuLiAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cmV0cnlfd29yayk7Ci0KLQkvKiBDYW4ndCB0cmFuc21pdCBhbnkgbW9yZS4gKi8KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQkvKgotCSAqIERpc2FibGUgaHlwZXJ2aXNvciBpbnRlcnJ1cHRzIG9uIGVhY2ggdGlsZS4KLQkgKi8KLQlvbl9lYWNoX2NwdSh0aWxlX25ldF9kaXNhYmxlX2ludHIsICh2b2lkICopZGV2LCAxKTsKLQotCS8qCi0JICogVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCi0JICogVGhlIF9fZmZzKCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5kZXggaW50byB0aGUgaW50ZXJydXB0IGhhbmRsZXIKLQkgKiB0YWJsZSBmcm9tIHRoZSBpbnRlcnJ1cHQgYml0IG1hc2sgd2hpY2ggc2hvdWxkIGhhdmUgb25lIGJpdAotCSAqIGFuZCBvbmUgYml0IG9ubHkgc2V0LgotCSAqLwotCWlmIChwcml2LT5pbnRyX2lkKQotCQlmcmVlX2lycShfX2Zmcyhwcml2LT5pbnRyX2lkKSwgZGV2KTsKLQotCS8qCi0JICogRHJhaW4gYWxsIHRoZSBMSVBQIGJ1ZmZlcnMuCi0JICovCi0KKwkvKiBEcmFpbiBhbGwgdGhlIExJUFAgYnVmZmVycy4gKi8KIAl3aGlsZSAodHJ1ZSkgewogCQlpbnQgYnVmZmVyOwogCkBAIC0xNTYwLDQzICsxNTY0LDEwNSBAQAogCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfQorCisJCW4rKzsKIAl9CiAKKwlyZXR1cm4gbjsKK30KKworCisvKgorICogRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZS4KKyAqCisgKiBSZXR1cm5zIDAsIHRoaXMgaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4KKyAqCisgKiBUaGUgY2xvc2UgZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGRlLWFjdGl2YXRlZAorICogYnkgdGhlIE9TLiAgVGhlIGhhcmR3YXJlIGlzIHN0aWxsIHVuZGVyIHRoZSBkcml2ZXJzIGNvbnRyb2wsIGJ1dAorICogbmVlZHMgdG8gYmUgZGlzYWJsZWQuICBBIGdsb2JhbCBNQUMgcmVzZXQgaXMgaXNzdWVkIHRvIHN0b3AgdGhlCisgKiBoYXJkd2FyZSwgYW5kIGFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgorICoKKyAqIElTU1VFOiBIb3cgY2xvc2VseSBkb2VzICJuZXRpZl9ydW5uaW5nKGRldikiIG1pcnJvciAicHJpdi0+YWN0aXZlIj8KKyAqCisgKiBCZWZvcmUgd2UgYXJlIGNhbGxlZCBieSAiX19kZXZfY2xvc2UoKSIsICJuZXRpZl9ydW5uaW5nKCkiIHdpbGwKKyAqIGhhdmUgYmVlbiBjbGVhcmVkLCBzbyBubyBORVcgY2FsbHMgdG8gInRpbGVfbmV0X3BvbGwoKSIgd2lsbCBiZQorICogbWFkZSBieSAibmV0cG9sbF9wb2xsX2RldigpIi4KKyAqCisgKiBPZnRlbiwgdGhpcyBjYW4gY2F1c2Ugc29tZSB0aWxlcyB0byBzdGlsbCBoYXZlIHBhY2tldHMgaW4gdGhlaXIKKyAqIHF1ZXVlcywgc28gd2UgbXVzdCBjYWxsICJ0aWxlX25ldF9kaXNjYXJkX3BhY2tldHMoKSIgbGF0ZXIuCisgKgorICogTm90ZSB0aGF0IHNvbWUgb3RoZXIgdGlsZSBtYXkgc3RpbGwgYmUgSU5TSURFICJ0aWxlX25ldF9wb2xsKCkiLAorICogYW5kIGluIGZhY3QsIG1hbnkgd2lsbCBiZSwgaWYgdGhlcmUgaXMgaGVhdnkgbmV0d29yayBsb2FkLgorICoKKyAqIENhbGxpbmcgIm9uX2VhY2hfY3B1KHRpbGVfbmV0X3N0b3BfZGlzYWJsZSwgKHZvaWQgKilkZXYsIDEpIiB3aGVuCisgKiBhbnkgdGlsZSBpcyBzdGlsbCAibmFwaV9zY2hlZHVsZSgpIidkIHdpbGwgaW5kdWNlIGEgaG9ycmlibGUgY3Jhc2gKKyAqIHdoZW4gIm1zbGVlcCgpIiBpcyBjYWxsZWQuICBUaGlzIGluY2x1ZGVzIHRpbGVzIHdoaWNoIGFyZSBpbnNpZGUKKyAqICJ0aWxlX25ldF9wb2xsKCkiIHdoaWNoIGhhdmUgbm90IHlldCBjYWxsZWQgIm5hcGlfY29tcGxldGUoKSIuCisgKgorICogU28sIHdlIG11c3QgZmlyc3QgdHJ5IHRvIHdhaXQgbG9uZyBlbm91Z2ggZm9yIG90aGVyIHRpbGVzIHRvIGZpbmlzaAorICogd2l0aCBhbnkgY3VycmVudCAidGlsZV9uZXRfcG9sbCgpIiBjYWxsLCBhbmQsIGhvcGVmdWxseSwgdG8gY2xlYXIKKyAqIHRoZSAic2NoZWR1bGVkIiBmbGFnLiAgSVNTVUU6IEl0IGlzIHVuY2xlYXIgd2hhdCBoYXBwZW5zIHRvIHRpbGVzCisgKiB3aGljaCBoYXZlIGNhbGxlZCAibmFwaV9zY2hlZHVsZSgpIiBidXQgd2hpY2ggaGFkIG5vdCB5ZXQgdHJpZWQgdG8KKyAqIGNhbGwgInRpbGVfbmV0X3BvbGwoKSIsIG9yIHdoaWNoIGV4aGF1c3RlZCB0aGVpciBidWRnZXQgaW5zaWRlCisgKiAidGlsZV9uZXRfcG9sbCgpIiBqdXN0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuCisgKi8KK3N0YXRpYyBpbnQgdGlsZV9uZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0aWxlX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCVBERUJVRygidGlsZV9uZXRfc3RvcCgpXG4iKTsKKworCS8qIFN0YXJ0IGRpc2NhcmRpbmcgcGFja2V0cy4gKi8KKwlwcml2LT5hY3RpdmUgPSBmYWxzZTsKKworCS8qIE1ha2Ugc3VyZSAiYWN0aXZlIiBpcyB2aXNpYmxlIHRvIGFsbCB0aWxlcy4gKi8KKwltYigpOworCisJLyoKKwkgKiBPbiBlYWNoIHRpbGUsIG1ha2Ugc3VyZSBubyBORVcgcGFja2V0cyBnZXQgZGVsaXZlcmVkLCBhbmQKKwkgKiBkaXNhYmxlIHRoZSBpbmdyZXNzIGludGVycnVwdC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgaW5ncmVzcyBpbnRlcnJ1cHQgY2FuIGZpcmUgQUZURVIgdGhpcywKKwkgKiBwcmVzdW1hYmx5IGR1ZSB0byBwYWNrZXRzIHdoaWNoIHdlcmUgcmVjZW50bHkgZGVsaXZlcmVkLAorCSAqIGJ1dCBpdCB3aWxsIGhhdmUgbm8gZWZmZWN0LgorCSAqLworCW9uX2VhY2hfY3B1KHRpbGVfbmV0X2RlcmVnaXN0ZXIsICh2b2lkICopZGV2LCAxKTsKKworCS8qIE9wdGltaXN0aWNhbGx5IGRyYWluIExJUFAgYnVmZmVycy4gKi8KKwkodm9pZCl0aWxlX25ldF9kcmFpbl9saXBwX2J1ZmZlcnMocHJpdik7CisKKwkvKiBJU1NVRTogT25seSBuZWVkZWQgaWYgbm90IHlldCBmdWxseSBvcGVuLiAqLworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cmV0cnlfd29yayk7CisKKwkvKiBDYW4ndCB0cmFuc21pdCBhbnkgbW9yZS4gKi8KKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwkvKiBEaXNhYmxlIE5BUEkgb24gZWFjaCB0aWxlLiAqLworCW9uX2VhY2hfY3B1KHRpbGVfbmV0X3N0b3BfZGlzYWJsZSwgKHZvaWQgKilkZXYsIDEpOworCisJLyoKKwkgKiBEcmFpbiBhbnkgcmVtYWluaW5nIExJUFAgYnVmZmVycy4gIE5PVEU6IFRoaXMgInByaW50aygpIgorCSAqIGhhcyBuZXZlciBiZWVuIG9ic2VydmVkLCBidXQgaW4gdGhlb3J5IGl0IGNvdWxkIGhhcHBlbi4KKwkgKi8KKwlpZiAodGlsZV9uZXRfZHJhaW5fbGlwcF9idWZmZXJzKHByaXYpICE9IDApCisJCXByaW50aygiSGFkIHRvIGRyYWluIHNvbWUgZXh0cmEgTElQUCBidWZmZXJzIVxuIik7CisKIAkvKiBTdG9wIExJUFAvTEVQUC4gKi8KIAl0aWxlX25ldF9zdG9wX2F1eChkZXYpOwogCi0KLQlwcml2LT5mdWxseV9vcGVuZWQgPSAwOwotCi0KIAkvKgotCSAqIFhYWDogSVNTVUU6IEl0IGFwcGVhcnMgdGhhdCwgaW4gcHJhY3RpY2UgYW55d2F5LCBieSB0aGUKLQkgKiB0aW1lIHdlIGdldCBoZXJlLCB0aGVyZSBhcmUgbm8gcGVuZGluZyBjb21wbGV0aW9ucy4KKwkgKiBJU1NVRTogSXQgYXBwZWFycyB0aGF0LCBpbiBwcmFjdGljZSBhbnl3YXksIGJ5IHRoZSB0aW1lIHdlCisJICogZ2V0IGhlcmUsIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNvbXBsZXRpb25zLCBidXQganVzdCBpbiBjYXNlLAorCSAqIHdlIGZyZWUgKGFsbCBvZikgdGhlbSBhbnl3YXkuCiAJICovCi0Jd2hpbGUgKHBlbmRpbmcpIHsKLQotCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkc1szMl07Ci0JCXVuc2lnbmVkIGludCB3YW50ZWQgPSAzMjsKLQkJdW5zaWduZWQgaW50IGksIG5vbGRzID0gMDsKLQotCQlub2xkcyA9IHRpbGVfbmV0X2xlcHBfZ3JhYl9jb21wcyhkZXYsIG9sZHMsCi0JCQkJCQkgd2FudGVkLCAmcGVuZGluZyk7Ci0KLQkJLyogSVNTVUU6IFdlIGhhdmUgbmV2ZXIgYWN0dWFsbHkgc2VlbiB0aGlzIGRlYnVnIHNwZXcuICovCi0JCWlmIChub2xkcyAhPSAwKQotCQkJcHJfaW5mbygiRHVyaW5nIHRpbGVfbmV0X3N0b3AoKSwgZ3JhYmJlZCAlZCBjb21wcy5cbiIsCi0JCQkgICAgICAgbm9sZHMpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBub2xkczsgaSsrKQotCQkJa2ZyZWVfc2tiKG9sZHNbaV0pOwotCX0KLQorCXdoaWxlICh0aWxlX25ldF9sZXBwX2ZyZWVfY29tcHMoZGV2LCB0cnVlKSkKKwkJLyogbG9vcCAqLzsKIAogCS8qIFdpcGUgdGhlIEVQUCBxdWV1ZS4gKi8KLQltZW1zZXQocHJpdi0+ZXBwX3F1ZXVlLCAwLCBzaXplb2YobGVwcF9xdWV1ZV90KSk7CisJbWVtc2V0KHByaXYtPmVxLCAwLCBzaXplb2YobGVwcF9xdWV1ZV90KSk7CiAKIAkvKiBFdmljdCB0aGUgRVBQIHF1ZXVlLiAqLwotCWZpbnZfYnVmZmVyKHByaXYtPmVwcF9xdWV1ZSwgUEFHRV9TSVpFKTsKKwlmaW52X2J1ZmZlcihwcml2LT5lcSwgRVFfU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MjAsNyArMTY4Niw3IEBACiAJaWYgKGJfbGVuICE9IDApIHsKIAogCQlpZiAoIWhhc2hfZGVmYXVsdCkKLQkJCWZpbnZfYnVmZmVyX3JlbW90ZShiX2RhdGEsIGJfbGVuKTsKKwkJCWZpbnZfYnVmZmVyX3JlbW90ZShiX2RhdGEsIGJfbGVuLCAwKTsKIAogCQljcGEgPSBfX3BhKGJfZGF0YSk7CiAJCWZyYWdzW25dLmNwYV9sbyA9IGNwYTsKQEAgLTE2NDMsNyArMTcwOSw3IEBACiAJCWlmICghaGFzaF9kZWZhdWx0KSB7CiAJCQl2b2lkICp2YSA9IHBmbl90b19rYWRkcihwZm4pICsgZi0+cGFnZV9vZmZzZXQ7CiAJCQlCVUdfT04oUGFnZUhpZ2hNZW0oZi0+cGFnZSkpOwotCQkJZmludl9idWZmZXJfcmVtb3RlKHZhLCBmLT5zaXplKTsKKwkJCWZpbnZfYnVmZmVyX3JlbW90ZSh2YSwgZi0+c2l6ZSwgMCk7CiAJCX0KIAogCQljcGEgPSAoKHBoeXNfYWRkcl90KXBmbiA8PCBQQUdFX1NISUZUKSArIGYtPnBhZ2Vfb2Zmc2V0OwpAQCAtMTc0MiwxNyArMTgwOCwxNSBAQAogCiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAotCWxlcHBfcXVldWVfdCAqZXEgPSBwcml2LT5lcHBfcXVldWU7CisJbGVwcF9xdWV1ZV90ICplcSA9IHByaXYtPmVxOwogCi0Jc3RydWN0IHNrX2J1ZmYgKm9sZHNbNF07Ci0JdW5zaWduZWQgaW50IHdhbnRlZCA9IDQ7CisJc3RydWN0IHNrX2J1ZmYgKm9sZHNbOF07CisJdW5zaWduZWQgaW50IHdhbnRlZCA9IDg7CiAJdW5zaWduZWQgaW50IGksIG5vbGRzID0gMDsKIAogCXVuc2lnbmVkIGludCBjbWRfaGVhZCwgY21kX3RhaWwsIGNtZF9uZXh0OwogCXVuc2lnbmVkIGludCBjb21wX3RhaWw7CiAKLQl1bnNpZ25lZCBpbnQgZnJlZV9zbG90czsKLQogCiAJLyogUGFyYW5vaWEuICovCiAJQlVHX09OKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKTsKQEAgLTE3ODAsMzQgKzE4NDQsMzIgQEAKIAogCS8qIEVucXVldWUgdGhlIGNvbW1hbmQuICovCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+Y21kX2xvY2ssIGlycWZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZXFfbG9jaywgaXJxZmxhZ3MpOwogCiAJLyoKIAkgKiBIYW5kbGUgY29tcGxldGlvbnMgaWYgbmVlZGVkIHRvIG1ha2Ugcm9vbS4KIAkgKiBIQUNLOiBTcGluIHVudGlsIHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbS4KIAkgKi8KLQlmcmVlX3Nsb3RzID0gbGVwcF9udW1fZnJlZV9jb21wX3Nsb3RzKGVxKTsKLQlpZiAoZnJlZV9zbG90cyA8IDEpIHsKLXNwaW46Ci0JCW5vbGRzICs9IHRpbGVfbmV0X2xlcHBfZ3JhYl9jb21wcyhkZXYsIG9sZHMgKyBub2xkcywKLQkJCQkJCSAgd2FudGVkIC0gbm9sZHMsIE5VTEwpOwotCQlpZiAobGVwcF9udW1fZnJlZV9jb21wX3Nsb3RzKGVxKSA8IDEpCi0JCQlnb3RvIHNwaW47CisJaWYgKGxlcHBfbnVtX2ZyZWVfY29tcF9zbG90cyhlcSkgPT0gMCkgeworCQlub2xkcyA9IHRpbGVfbmV0X2xlcHBfZ3JhYl9jb21wcyhlcSwgb2xkcywgd2FudGVkLCAwKTsKKwkJaWYgKG5vbGRzID09IDApIHsKK2J1c3k6CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5lcV9sb2NrLCBpcnFmbGFncyk7CisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0KIAl9CiAKIAljbWRfaGVhZCA9IGVxLT5jbWRfaGVhZDsKIAljbWRfdGFpbCA9IGVxLT5jbWRfdGFpbDsKIAotCS8qIE5PVEU6IFRoZSAiZ290b3MiIGJlbG93IGFyZSB1bnRlc3RlZC4gKi8KLQogCS8qIFByZXBhcmUgdG8gYWR2YW5jZSwgZGV0ZWN0aW5nIGZ1bGwgcXVldWUuICovCiAJY21kX25leHQgPSBjbWRfdGFpbCArIGNtZF9zaXplOwogCWlmIChjbWRfdGFpbCA8IGNtZF9oZWFkICYmIGNtZF9uZXh0ID49IGNtZF9oZWFkKQotCQlnb3RvIHNwaW47CisJCWdvdG8gYnVzeTsKIAlpZiAoY21kX25leHQgPiBMRVBQX0NNRF9MSU1JVCkgewogCQljbWRfbmV4dCA9IDA7CiAJCWlmIChjbWRfbmV4dCA9PSBjbWRfaGVhZCkKLQkJCWdvdG8gc3BpbjsKKwkJCWdvdG8gYnVzeTsKIAl9CiAKIAkvKiBDb3B5IHRoZSBjb21tYW5kLiAqLwpAQCAtMTgyMywxNCArMTg4NSwxOCBAQAogCWVxLT5jb21wX3RhaWwgPSBjb21wX3RhaWw7CiAKIAkvKiBGbHVzaCBiZWZvcmUgYWxsb3dpbmcgTEVQUCB0byBoYW5kbGUgdGhlIGNvbW1hbmQuICovCisJLyogSVNTVUU6IElzIHRoaXMgdGhlIG9wdGltYWwgbG9jYXRpb24gZm9yIHRoZSBmbHVzaD8gKi8KIAlfX2luc25fbWYoKTsKIAogCWVxLT5jbWRfdGFpbCA9IGNtZF90YWlsOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+Y21kX2xvY2ssIGlycWZsYWdzKTsKLQorCS8qIE5PVEU6IFVzaW5nICI0IiBoZXJlIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gIjAiIG9yICIyIiwgKi8KKwkvKiBhbmQsIHN0cmFuZ2VseSwgbW9yZSBlZmZpY2llbnQgdGhhbiBwcmUtY2hlY2tpbmcgdGhlIG51bWJlciAqLworCS8qIG9mIGF2YWlsYWJsZSBjb21wbGV0aW9ucywgYW5kIGNvbXBhcmluZyBpdCB0byA0LiAqLwogCWlmIChub2xkcyA9PSAwKQotCQlub2xkcyA9IHRpbGVfbmV0X2xlcHBfZ3JhYl9jb21wcyhkZXYsIG9sZHMsIHdhbnRlZCwgTlVMTCk7CisJCW5vbGRzID0gdGlsZV9uZXRfbGVwcF9ncmFiX2NvbXBzKGVxLCBvbGRzLCB3YW50ZWQsIDQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZXFfbG9jaywgaXJxZmxhZ3MpOwogCiAJLyogSGFuZGxlIGNvbXBsZXRpb25zLiAqLwogCWZvciAoaSA9IDA7IGkgPCBub2xkczsgaSsrKQpAQCAtMTg3MCwxMCArMTkzNiwxMCBAQAogCiAJdW5zaWduZWQgaW50IG51bV9mcmFnczsKIAotCWxlcHBfcXVldWVfdCAqZXEgPSBwcml2LT5lcHBfcXVldWU7CisJbGVwcF9xdWV1ZV90ICplcSA9IHByaXYtPmVxOwogCi0Jc3RydWN0IHNrX2J1ZmYgKm9sZHNbNF07Ci0JdW5zaWduZWQgaW50IHdhbnRlZCA9IDQ7CisJc3RydWN0IHNrX2J1ZmYgKm9sZHNbOF07CisJdW5zaWduZWQgaW50IHdhbnRlZCA9IDg7CiAJdW5zaWduZWQgaW50IGksIG5vbGRzID0gMDsKIAogCXVuc2lnbmVkIGludCBjbWRfc2l6ZSA9IHNpemVvZihsZXBwX2NtZF90KTsKQEAgLTE4ODMsOCArMTk0OSw2IEBACiAKIAlsZXBwX2NtZF90IGNtZHNbTEVQUF9NQVhfRlJBR1NdOwogCi0JdW5zaWduZWQgaW50IGZyZWVfc2xvdHM7Ci0KIAogCS8qCiAJICogVGhpcyBpcyBwYXJhbm9pYSwgc2luY2Ugd2UgdGhpbmsgdGhhdCBpZiB0aGUgbGluayBkb2Vzbid0IGNvbWUKQEAgLTE5MDUsNyArMTk2OSw4IEBACiAJaWYgKGhhc2hfZGVmYXVsdCkgewogCQlIVl9QVEUgcHRlID0gKnZpcnRfdG9fcHRlKGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZylkYXRhKTsKIAkJaWYgKGh2X3B0ZV9nZXRfbW9kZShwdGUpICE9IEhWX1BURV9NT0RFX0NBQ0hFX0hBU0hfTDMpCi0JCQlwYW5pYygiTm9uLWNvaGVyZW50IGVncmVzcyBidWZmZXIhIik7CisJCQlwYW5pYygiTm9uLUhGSCBlZ3Jlc3MgYnVmZmVyISBWQT0lcCBNb2RlPSVkIFBURT0lbGx4IiwKKwkJCSAgICAgIGRhdGEsIGh2X3B0ZV9nZXRfbW9kZShwdGUpLCBodl9wdGVfdmFsKHB0ZSkpOwogCX0KICNlbmRpZgogI2VuZGlmCkBAIC0xOTU4LDM3ICsyMDIzLDM1IEBACiAKIAkvKiBFbnF1ZXVlIHRoZSBjb21tYW5kcy4gKi8KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5jbWRfbG9jaywgaXJxZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5lcV9sb2NrLCBpcnFmbGFncyk7CiAKIAkvKgogCSAqIEhhbmRsZSBjb21wbGV0aW9ucyBpZiBuZWVkZWQgdG8gbWFrZSByb29tLgogCSAqIEhBQ0s6IFNwaW4gdW50aWwgdGhlcmUgaXMgc3VmZmljaWVudCByb29tLgogCSAqLwotCWZyZWVfc2xvdHMgPSBsZXBwX251bV9mcmVlX2NvbXBfc2xvdHMoZXEpOwotCWlmIChmcmVlX3Nsb3RzIDwgMSkgewotc3BpbjoKLQkJbm9sZHMgKz0gdGlsZV9uZXRfbGVwcF9ncmFiX2NvbXBzKGRldiwgb2xkcyArIG5vbGRzLAotCQkJCQkJICB3YW50ZWQgLSBub2xkcywgTlVMTCk7Ci0JCWlmIChsZXBwX251bV9mcmVlX2NvbXBfc2xvdHMoZXEpIDwgMSkKLQkJCWdvdG8gc3BpbjsKKwlpZiAobGVwcF9udW1fZnJlZV9jb21wX3Nsb3RzKGVxKSA9PSAwKSB7CisJCW5vbGRzID0gdGlsZV9uZXRfbGVwcF9ncmFiX2NvbXBzKGVxLCBvbGRzLCB3YW50ZWQsIDApOworCQlpZiAobm9sZHMgPT0gMCkgeworYnVzeToKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmVxX2xvY2ssIGlycWZsYWdzKTsKKwkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJfQogCX0KIAogCWNtZF9oZWFkID0gZXEtPmNtZF9oZWFkOwogCWNtZF90YWlsID0gZXEtPmNtZF90YWlsOwogCi0JLyogTk9URTogVGhlICJnb3RvcyIgYmVsb3cgYXJlIHVudGVzdGVkLiAqLwotCiAJLyogQ29weSB0aGUgY29tbWFuZHMsIG9yIGZhaWwuICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9mcmFnczsgaSsrKSB7CiAKIAkJLyogUHJlcGFyZSB0byBhZHZhbmNlLCBkZXRlY3RpbmcgZnVsbCBxdWV1ZS4gKi8KIAkJY21kX25leHQgPSBjbWRfdGFpbCArIGNtZF9zaXplOwogCQlpZiAoY21kX3RhaWwgPCBjbWRfaGVhZCAmJiBjbWRfbmV4dCA+PSBjbWRfaGVhZCkKLQkJCWdvdG8gc3BpbjsKKwkJCWdvdG8gYnVzeTsKIAkJaWYgKGNtZF9uZXh0ID4gTEVQUF9DTURfTElNSVQpIHsKIAkJCWNtZF9uZXh0ID0gMDsKIAkJCWlmIChjbWRfbmV4dCA9PSBjbWRfaGVhZCkKLQkJCQlnb3RvIHNwaW47CisJCQkJZ290byBidXN5OwogCQl9CiAKIAkJLyogQ29weSB0aGUgY29tbWFuZC4gKi8KQEAgLTIwMDUsMTQgKzIwNjgsMTggQEAKIAllcS0+Y29tcF90YWlsID0gY29tcF90YWlsOwogCiAJLyogRmx1c2ggYmVmb3JlIGFsbG93aW5nIExFUFAgdG8gaGFuZGxlIHRoZSBjb21tYW5kLiAqLworCS8qIElTU1VFOiBJcyB0aGlzIHRoZSBvcHRpbWFsIGxvY2F0aW9uIGZvciB0aGUgZmx1c2g/ICovCiAJX19pbnNuX21mKCk7CiAKIAllcS0+Y21kX3RhaWwgPSBjbWRfdGFpbDsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmNtZF9sb2NrLCBpcnFmbGFncyk7Ci0KKwkvKiBOT1RFOiBVc2luZyAiNCIgaGVyZSBpcyBtb3JlIGVmZmljaWVudCB0aGFuICIwIiBvciAiMiIsICovCisJLyogYW5kLCBzdHJhbmdlbHksIG1vcmUgZWZmaWNpZW50IHRoYW4gcHJlLWNoZWNraW5nIHRoZSBudW1iZXIgKi8KKwkvKiBvZiBhdmFpbGFibGUgY29tcGxldGlvbnMsIGFuZCBjb21wYXJpbmcgaXQgdG8gNC4gKi8KIAlpZiAobm9sZHMgPT0gMCkKLQkJbm9sZHMgPSB0aWxlX25ldF9sZXBwX2dyYWJfY29tcHMoZGV2LCBvbGRzLCB3YW50ZWQsIE5VTEwpOworCQlub2xkcyA9IHRpbGVfbmV0X2xlcHBfZ3JhYl9jb21wcyhlcSwgb2xkcywgd2FudGVkLCA0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmVxX2xvY2ssIGlycWZsYWdzKTsKIAogCS8qIEhhbmRsZSBjb21wbGV0aW9ucy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbm9sZHM7IGkrKykKQEAgLTIyNjEsNyArMjMyOCw2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCB0aWxlX25ldF9wcml2ICpwcml2OwotCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gIFRoaXMgYWxsb2NhdGVzICJwcml2IiwgY2FsbHMKQEAgLTIyODUsMjMgKzIzNTEsMjEgQEAKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5yZXRyeV93b3JrLCB0aWxlX25ldF9vcGVuX3JldHJ5KTsKIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5jbWRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmNvbXBfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmVxX2xvY2spOwogCi0JLyogQWxsb2NhdGUgImVwcF9xdWV1ZSIuICovCi0JQlVHX09OKGdldF9vcmRlcihzaXplb2YobGVwcF9xdWV1ZV90KSkgIT0gMCk7Ci0JcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKLQlpZiAoIXBhZ2UpIHsKKwkvKiBBbGxvY2F0ZSAiZXEiLiAqLworCXByaXYtPmVxX3BhZ2VzID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIEVRX09SREVSKTsKKwlpZiAoIXByaXYtPmVxX3BhZ2VzKSB7CiAJCWZyZWVfbmV0ZGV2KGRldik7CiAJCXJldHVybiBOVUxMOwogCX0KLQlwcml2LT5lcHBfcXVldWUgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJcHJpdi0+ZXEgPSBwYWdlX2FkZHJlc3MocHJpdi0+ZXFfcGFnZXMpOwogCiAJLyogUmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLiAqLwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJyZWdpc3Rlcl9uZXRkZXYgJXMgZmFpbGVkICVkXG4iLCBkZXYtPm5hbWUsIHJldCk7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwcml2LT5lcHBfcXVldWUpOworCQlfX2ZyZWVfcGFnZXMocHJpdi0+ZXFfcGFnZXMsIEVRX09SREVSKTsKIAkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMjMxMCw3ICsyMzc0LDcgQEAKIAlyZXQgPSB0aWxlX25ldF9nZXRfbWFjKGRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXByaXYtPmVwcF9xdWV1ZSk7CisJCV9fZnJlZV9wYWdlcyhwcml2LT5lcV9wYWdlcywgRVFfT1JERVIpOwogCQlmcmVlX25ldGRldihkZXYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0yMzIxLDYgKzIzODUsOSBAQAogCiAvKgogICogTW9kdWxlIGNsZWFudXAuCisgKgorICogRklYTUU6IElmIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGlzIG1vZHVsZSBjYW5ub3QgYmUgInVubG9hZGVkIiwKKyAqIGJlY2F1c2UgdGhlICJpbmdyZXNzIGludGVycnVwdCBoYW5kbGVyIiBpcyByZWdpc3RlcmVkIHBlcm1hbmVudGx5LgogICovCiBzdGF0aWMgdm9pZCB0aWxlX25ldF9jbGVhbnVwKHZvaWQpCiB7CkBAIC0yMzMxLDggKzIzOTgsOCBAQAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRpbGVfbmV0X2RldnNbaV07CiAJCQlzdHJ1Y3QgdGlsZV9uZXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQkJZmludl9idWZmZXIocHJpdi0+ZXBwX3F1ZXVlLCBQQUdFX1NJWkUpOwotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXByaXYtPmVwcF9xdWV1ZSk7CisJCQlmaW52X2J1ZmZlcihwcml2LT5lcSwgRVFfU0laRSk7CisJCQlfX2ZyZWVfcGFnZXMocHJpdi0+ZXFfcGFnZXMsIEVRX09SREVSKTsKIAkJCWZyZWVfbmV0ZGV2KGRldik7CiAJCX0KIAl9CkBAIC0yMzU1LDcgKzI0MjIsMTIgQEAKIH0KIAogCittb2R1bGVfaW5pdCh0aWxlX25ldF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdCh0aWxlX25ldF9jbGVhbnVwKTsKKworCiAjaWZuZGVmIE1PRFVMRQorCiAvKgogICogVGhlICJuZXR3b3JrX2NwdXMiIGJvb3QgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBjcHVzIHRoYXQgYXJlIGRlZGljYXRlZAogICogdG8gaGFuZGxlIGluZ3Jlc3MgcGFja2V0cy4KQEAgLTIzOTEsOCArMjQ2Myw1IEBACiAJcmV0dXJuIDA7CiB9CiBfX3NldHVwKCJuZXR3b3JrX2NwdXM9IiwgbmV0d29ya19jcHVzX3NldHVwKTsKKwogI2VuZGlmCi0KLQotbW9kdWxlX2luaXQodGlsZV9uZXRfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQodGlsZV9uZXRfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMTA1ZDdmMC4uMmRlOWI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpCiAJCXNrYi0+aXBfc3VtbWVkID0gcmN2X3ByaXYtPmlwX3N1bW1lZDsKIAotCWxlbmd0aCA9IHNrYi0+bGVuICsgRVRIX0hMRU47CisJbGVuZ3RoID0gc2tiLT5sZW47CiAJaWYgKGRldl9mb3J3YXJkX3NrYihyY3YsIHNrYikgIT0gTkVUX1JYX1NVQ0NFU1MpCiAJCWdvdG8gcnhfZHJvcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvTWFrZWZpbGUKaW5kZXggZGFiZGNmZS4uNjA5NzEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xtYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL01ha2VmaWxlCkBAIC0xNCw0ICsxNCw0IEBACiAjIC1EREVCVUcgXAogIyAtRExNQ19QQUNLRVRfTE9HCiAKLUVYVFJBX0NGTEFHUyArPSAtSS4gJChEQkdERUYpCitjY2ZsYWdzLXkgOj0gLUkuICQoREJHREVGKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jb25maWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY29uZmlnLmgKaW5kZXggMzBhY2QzOS4uMmM4ZjcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jb25maWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NvbmZpZy5oCkBAIC0zMCw5ICszMCw5IEBACiAKIC8qIEZvbGxvd2luZyBkZWZpbmVzIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB1bm5lZWRlZCBwYXJ0cyBvZiB0aGUgZHJpdmVyLCBlLmcuLAogICogdG8gbGltaXQgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBtb2R1bGUuIERlZmluaXRpb25zIGNhbiBiZSBhZGRlZCBoZXJlIGluCi0gKiBob3N0YXBfY29uZmlnLmggb3IgdGhleSBjYW4gYmUgYWRkZWQgdG8gbWFrZSBjb21tYW5kIHdpdGggRVhUUkFfQ0ZMQUdTLAorICogaG9zdGFwX2NvbmZpZy5oIG9yIHRoZXkgY2FuIGJlIGFkZGVkIHRvIG1ha2UgY29tbWFuZCB3aXRoIGNjZmxhZ3MteSwKICAqIGUuZy4sCi0gKiAnbWFrZSBwY2NhcmQgRVhUUkFfQ0ZMQUdTPSItRFBSSVNNMl9OT19ERUJVRyAtRFBSSVNNMl9OT19QUk9DRlNfREVCVUciJworICogJ21ha2UgcGNjYXJkIGNjZmxhZ3MteT0iLURQUklTTTJfTk9fREVCVUcgLURQUklTTTJfTk9fUFJPQ0ZTX0RFQlVHIicKICAqLwogCiAvKiBEbyBub3QgaW5jbHVkZSBkZWJ1ZyBtZXNzYWdlcyBpbnRvIHRoZSBkcml2ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvTWFrZWZpbGUKaW5kZXggMTkwN2VhZi4uNTcyOGE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvTWFrZWZpbGUKQEAgLTUsNyArNSw1IEBACiAJCXpkX3JmX2FsNzIzMGIubyB6ZF9yZl91dzI0NTMubyBcCiAJCXpkX3JmLm8gemRfdXNiLm8KIAotaWZlcSAoJChDT05GSUdfWkQxMjExUldfREVCVUcpLHkpCi1FWFRSQV9DRkxBR1MgKz0gLURERUJVRwotZW5kaWYKK2NjZmxhZ3MtJChDT05GSUdfWkQxMjExUldfREVCVUcpIDo9IC1EREVCVUcKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMgYi9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYwppbmRleCA1OWY1NTQ0Li5iOGVmOGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYwpAQCAtMjU4LDggKzI1OCwxMCBAQAogICovCiBzdGF0aWMgaW50CiBsb2dfc2FtcGxlKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmLCB1bnNpZ25lZCBsb25nIHBjLAotCSAgIHVuc2lnbmVkIGxvbmcgYmFja3RyYWNlLCBpbnQgaXNfa2VybmVsLCB1bnNpZ25lZCBsb25nIGV2ZW50KQorCSAgIHVuc2lnbmVkIGxvbmcgYmFja3RyYWNlLCBpbnQgaXNfa2VybmVsLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRhc2sgPyB0YXNrIDogY3VycmVudDsKIAljcHVfYnVmLT5zYW1wbGVfcmVjZWl2ZWQrKzsKIAogCWlmIChwYyA9PSBFU0NBUEVfQ09ERSkgewpAQCAtMjY3LDcgKzI2OSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChvcF9hZGRfY29kZShjcHVfYnVmLCBiYWNrdHJhY2UsIGlzX2tlcm5lbCwgY3VycmVudCkpCisJaWYgKG9wX2FkZF9jb2RlKGNwdV9idWYsIGJhY2t0cmFjZSwgaXNfa2VybmVsLCB0c2spKQogCQlnb3RvIGZhaWw7CiAKIAlpZiAob3BfYWRkX3NhbXBsZShjcHVfYnVmLCBwYywgZXZlbnQpKQpAQCAtMjkyLDcgKzI5NCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19vcHJvZmlsZV9hZGRfZXh0X3NhbXBsZSh1bnNpZ25lZCBsb25nIHBjLCBzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCi0JCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGludCBpc19rZXJuZWwpCisJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGludCBpc19rZXJuZWwsCisJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKG9wX2NwdV9idWZmZXIpOwogCXVuc2lnbmVkIGxvbmcgYmFja3RyYWNlID0gb3Byb2ZpbGVfYmFja3RyYWNlX2RlcHRoOwpAQCAtMzAxLDcgKzMwNCw3IEBACiAJICogaWYgbG9nX3NhbXBsZSgpIGZhaWwgd2UgY2FuJ3QgYmFja3RyYWNlIHNpbmNlIHdlIGxvc3QgdGhlCiAJICogc291cmNlIG9mIHRoaXMgZXZlbnQKIAkgKi8KLQlpZiAoIWxvZ19zYW1wbGUoY3B1X2J1ZiwgcGMsIGJhY2t0cmFjZSwgaXNfa2VybmVsLCBldmVudCkpCisJaWYgKCFsb2dfc2FtcGxlKGNwdV9idWYsIHBjLCBiYWNrdHJhY2UsIGlzX2tlcm5lbCwgZXZlbnQsIHRhc2spKQogCQkvKiBmYWlsZWQgKi8KIAkJcmV0dXJuOwogCkBAIC0zMTMsMTAgKzMxNiwxNyBAQAogCW9wcm9maWxlX2VuZF90cmFjZShjcHVfYnVmKTsKIH0KIAordm9pZCBvcHJvZmlsZV9hZGRfZXh0X2h3X3NhbXBsZSh1bnNpZ25lZCBsb25nIHBjLCBzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCisJCQkJdW5zaWduZWQgbG9uZyBldmVudCwgaW50IGlzX2tlcm5lbCwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJX19vcHJvZmlsZV9hZGRfZXh0X3NhbXBsZShwYywgcmVncywgZXZlbnQsIGlzX2tlcm5lbCwgdGFzayk7Cit9CisKIHZvaWQgb3Byb2ZpbGVfYWRkX2V4dF9zYW1wbGUodW5zaWduZWQgbG9uZyBwYywgc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCBpbnQgaXNfa2VybmVsKQogewotCV9fb3Byb2ZpbGVfYWRkX2V4dF9zYW1wbGUocGMsIHJlZ3MsIGV2ZW50LCBpc19rZXJuZWwpOworCV9fb3Byb2ZpbGVfYWRkX2V4dF9zYW1wbGUocGMsIHJlZ3MsIGV2ZW50LCBpc19rZXJuZWwsIE5VTEwpOwogfQogCiB2b2lkIG9wcm9maWxlX2FkZF9zYW1wbGUoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLCB1bnNpZ25lZCBsb25nIGV2ZW50KQpAQCAtMzMyLDcgKzM0Miw3IEBACiAJCXBjID0gRVNDQVBFX0NPREU7IC8qIGFzIHRoaXMgY2F1c2VzIGFuIGVhcmx5IHJldHVybi4gKi8KIAl9CiAKLQlfX29wcm9maWxlX2FkZF9leHRfc2FtcGxlKHBjLCByZWdzLCBldmVudCwgaXNfa2VybmVsKTsKKwlfX29wcm9maWxlX2FkZF9leHRfc2FtcGxlKHBjLCByZWdzLCBldmVudCwgaXNfa2VybmVsLCBOVUxMKTsKIH0KIAogLyoKQEAgLTQwMyw3ICs0MTMsNyBAQAogdm9pZCBvcHJvZmlsZV9hZGRfcGModW5zaWduZWQgbG9uZyBwYywgaW50IGlzX2tlcm5lbCwgdW5zaWduZWQgbG9uZyBldmVudCkKIHsKIAlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKG9wX2NwdV9idWZmZXIpOwotCWxvZ19zYW1wbGUoY3B1X2J1ZiwgcGMsIDAsIGlzX2tlcm5lbCwgZXZlbnQpOworCWxvZ19zYW1wbGUoY3B1X2J1ZiwgcGMsIDAsIGlzX2tlcm5lbCwgZXZlbnQsIE5VTEwpOwogfQogCiB2b2lkIG9wcm9maWxlX2FkZF90cmFjZSh1bnNpZ25lZCBsb25nIHBjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS90aW1lcl9pbnQuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvdGltZXJfaW50LmMKaW5kZXggMDEwNzI1MS4uM2VmNDQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS90aW1lcl9pbnQuYworKysgYi9kcml2ZXJzL29wcm9maWxlL3RpbWVyX2ludC5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBvcHJvZmlsZV9jcHVfbm90aWZ5LAogfTsKIAotaW50IF9faW5pdCBvcHJvZmlsZV90aW1lcl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCitpbnQgb3Byb2ZpbGVfdGltZXJfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQogewogCWludCByYzsKIApAQCAtMTEzLDcgKzExMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19leGl0IG9wcm9maWxlX3RpbWVyX2V4aXQodm9pZCkKK3ZvaWQgb3Byb2ZpbGVfdGltZXJfZXhpdCh2b2lkKQogewogCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZvcHJvZmlsZV9jcHVfbm90aWZpZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZGluby5jIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCmluZGV4IDkzODMwNjMuLmJjZDVkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYworKysgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKQEAgLTI5NiwyNSArMjk2LDI1IEBACiAJLm91dGwJPSBkaW5vX291dDMyCiB9OwogCi1zdGF0aWMgdm9pZCBkaW5vX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBkaW5vX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgZGlub19kZXZpY2UgKmRpbm9fZGV2ID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpbnQgbG9jYWxfaXJxID0gZ3NjX2ZpbmRfbG9jYWxfaXJxKGlycSwgZGlub19kZXYtPmdsb2JhbF9pcnEsIERJTk9fTE9DQUxfSVJRUyk7CisJc3RydWN0IGRpbm9fZGV2aWNlICpkaW5vX2RldiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoZC0+aXJxLCBkaW5vX2Rldi0+Z2xvYmFsX2lycSwgRElOT19MT0NBTF9JUlFTKTsKIAotCURCRyhLRVJOX1dBUk5JTkcgIiVzKDB4JXAsICVkKVxuIiwgX19mdW5jX18sIGRpbm9fZGV2LCBpcnEpOworCURCRyhLRVJOX1dBUk5JTkcgIiVzKDB4JXAsICVkKVxuIiwgX19mdW5jX18sIGRpbm9fZGV2LCBkLT5pcnEpOwogCiAJLyogQ2xlYXIgdGhlIG1hdGNoaW5nIGJpdCBpbiB0aGUgSU1SIHJlZ2lzdGVyICovCiAJZGlub19kZXYtPmltciAmPSB+KERJTk9fTUFTS19JUlEobG9jYWxfaXJxKSk7CiAJX19yYXdfd3JpdGVsKGRpbm9fZGV2LT5pbXIsIGRpbm9fZGV2LT5oYmEuYmFzZV9hZGRyK0RJTk9fSU1SKTsKIH0KIAotc3RhdGljIHZvaWQgZGlub191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBkaW5vX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBkaW5vX2Rldi0+Z2xvYmFsX2lycSwgRElOT19MT0NBTF9JUlFTKTsKKwlzdHJ1Y3QgZGlub19kZXZpY2UgKmRpbm9fZGV2ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJaW50IGxvY2FsX2lycSA9IGdzY19maW5kX2xvY2FsX2lycShkLT5pcnEsIGRpbm9fZGV2LT5nbG9iYWxfaXJxLCBESU5PX0xPQ0FMX0lSUVMpOwogCXUzMiB0bXA7CiAKLQlEQkcoS0VSTl9XQVJOSU5HICIlcygweCVwLCAlZClcbiIsIF9fZnVuY19fLCBkaW5vX2RldiwgaXJxKTsKKwlEQkcoS0VSTl9XQVJOSU5HICIlcygweCVwLCAlZClcbiIsIF9fZnVuY19fLCBkaW5vX2RldiwgZC0+aXJxKTsKIAogCS8qCiAJKiogY2xlYXIgcGVuZGluZyBJUlEgYml0cwpAQCAtMzQ2LDkgKzM0Niw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZGlub19pbnRlcnJ1cHRfdHlwZSA9IHsKLQkubmFtZQk9ICJHU0MtUENJIiwKLQkudW5tYXNrCT0gZGlub191bm1hc2tfaXJxLAotCS5tYXNrCT0gZGlub19tYXNrX2lycSwKKwkubmFtZQkJPSAiR1NDLVBDSSIsCisJLmlycV91bm1hc2sJPSBkaW5vX3VubWFza19pcnEsCisJLmlycV9tYXNrCT0gZGlub19tYXNrX2lycSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZWlzYS5jIGIvZHJpdmVycy9wYXJpc2MvZWlzYS5jCmluZGV4IGU4NjAwMzguLmRlZWVjMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYworKysgYi9kcml2ZXJzL3BhcmlzYy9laXNhLmMKQEAgLTE0NCw4ICsxNDQsOSBAQAogCiAKIC8qIGNhbGxlZCBieSBmcmVlIGlycSAqLwotc3RhdGljIHZvaWQgZWlzYV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZWlzYV9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJRUlTQV9EQkcoImRpc2FibGUgaXJxICVkXG4iLCBpcnEpOwpAQCAtMTY0LDggKzE2NSw5IEBACiB9CiAKIC8qIGNhbGxlZCBieSByZXF1ZXN0IGlycSAqLwotc3RhdGljIHZvaWQgZWlzYV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBlaXNhX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlFSVNBX0RCRygiZW5hYmxlIGlycSAlZFxuIiwgaXJxKTsKIAkJCkBAIC0xODMsOSArMTg1LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBlaXNhX2ludGVycnVwdF90eXBlID0gewotCS5uYW1lCT0JIkVJU0EiLAotCS51bm1hc2sJPQllaXNhX3VubWFza19pcnEsCi0JLm1hc2sJPQllaXNhX21hc2tfaXJxLAorCS5uYW1lCQk9CSJFSVNBIiwKKwkuaXJxX3VubWFzawk9CWVpc2FfdW5tYXNrX2lycSwKKwkuaXJxX21hc2sJPQllaXNhX21hc2tfaXJxLAogfTsKIAogc3RhdGljIGlycXJldHVybl90IGVpc2FfaXJxKGludCB3YXhfaXJxLCB2b2lkICppbnRyX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2dzYy5jIGIvZHJpdmVycy9wYXJpc2MvZ3NjLmMKaW5kZXggNzcyYjE5My4uZWYzMTA4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZ3NjLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZ3NjLmMKQEAgLTEwNSwxMyArMTA1LDEzIEBACiAJcmV0dXJuIE5PX0lSUTsKIH0KIAotc3RhdGljIHZvaWQgZ3NjX2FzaWNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGdzY19hc2ljX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgZ3NjX2FzaWMgKmlycV9kZXYgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBpcnFfZGV2LT5nbG9iYWxfaXJxLCAzMik7CisJc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJaW50IGxvY2FsX2lycSA9IGdzY19maW5kX2xvY2FsX2lycShkLT5pcnEsIGlycV9kZXYtPmdsb2JhbF9pcnEsIDMyKTsKIAl1MzIgaW1yOwogCi0JREVCUFJJTlRLKEtFUk5fREVCVUcgIiVzKCVkKSAlczogSU1SIDB4JXhcbiIsIF9fZnVuY19fLCBpcnEsCisJREVCUFJJTlRLKEtFUk5fREVCVUcgIiVzKCVkKSAlczogSU1SIDB4JXhcbiIsIF9fZnVuY19fLCBkLT5pcnEsCiAJCQlpcnFfZGV2LT5uYW1lLCBpbXIpOwogCiAJLyogRGlzYWJsZSB0aGUgSVJRIGxpbmUgYnkgY2xlYXJpbmcgdGhlIGJpdCBpbiB0aGUgSU1SICovCkBAIC0xMjAsMTMgKzEyMCwxMyBAQAogCWdzY193cml0ZWwoaW1yLCBpcnFfZGV2LT5ocGEgKyBPRkZTRVRfSU1SKTsKIH0KIAotc3RhdGljIHZvaWQgZ3NjX2FzaWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZ3NjX2FzaWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpbnQgbG9jYWxfaXJxID0gZ3NjX2ZpbmRfbG9jYWxfaXJxKGlycSwgaXJxX2Rldi0+Z2xvYmFsX2lycSwgMzIpOworCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoZC0+aXJxLCBpcnFfZGV2LT5nbG9iYWxfaXJxLCAzMik7CiAJdTMyIGltcjsKIAotCURFQlBSSU5USyhLRVJOX0RFQlVHICIlcyglZCkgJXM6IElNUiAweCV4XG4iLCBfX2Z1bmNfXywgaXJxLAorCURFQlBSSU5USyhLRVJOX0RFQlVHICIlcyglZCkgJXM6IElNUiAweCV4XG4iLCBfX2Z1bmNfXywgZC0+aXJxLAogCQkJaXJxX2Rldi0+bmFtZSwgaW1yKTsKIAogCS8qIEVuYWJsZSB0aGUgSVJRIGxpbmUgYnkgc2V0dGluZyB0aGUgYml0IGluIHRoZSBJTVIgKi8KQEAgLTE0MCw5ICsxNDAsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdzY19hc2ljX2ludGVycnVwdF90eXBlID0gewotCS5uYW1lCT0JIkdTQy1BU0lDIiwKLQkudW5tYXNrCT0JZ3NjX2FzaWNfdW5tYXNrX2lycSwKLQkubWFzawk9CWdzY19hc2ljX21hc2tfaXJxLAorCS5uYW1lCQk9CSJHU0MtQVNJQyIsCisJLmlycV91bm1hc2sJPQlnc2NfYXNpY191bm1hc2tfaXJxLAorCS5pcnFfbWFzawk9CWdzY19hc2ljX21hc2tfaXJxLAogfTsKIAogaW50IGdzY19hc3NpZ25faXJxKHN0cnVjdCBpcnFfY2hpcCAqdHlwZSwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwppbmRleCAwMzI3ODk0Li45NTkzMGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCkBAIC02MTUsMTAgKzYxNSwxMCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGlvc2FwaWNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGlvc2FwaWNfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHZlY3Rvcl9pbmZvICp2aSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJc3RydWN0IHZlY3Rvcl9pbmZvICp2aSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXUzMiBkMCwgZDE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9zYXBpY19sb2NrLCBmbGFncyk7CkBAIC02MjgsOSArNjI4LDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb3NhcGljX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaW9zYXBpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBpb3NhcGljX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCB2ZWN0b3JfaW5mbyAqdmkgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCB2ZWN0b3JfaW5mbyAqdmkgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAl1MzIgZDAsIGQxOwogCiAJLyogZGF0YSBpcyBpbml0aWFsaXplZCBieSBmaXh1cF9pcnEgKi8KQEAgLTY2NiwzNCArNjY2LDM0IEBACiAJICogZW5hYmxlcyB0aGVpciBJUlEuIEl0IGNhbiBsZWFkIHRvICJpbnRlcmVzdGluZyIgcmFjZSBjb25kaXRpb25zCiAJICogaW4gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4KIAkgKi8KLQlEQkcoS0VSTl9ERUJVRyAiZW5hYmxlX2lycSglZCk6IGVvaSglcCwgMHgleClcbiIsIGlycSwKKwlEQkcoS0VSTl9ERUJVRyAiZW5hYmxlX2lycSglZCk6IGVvaSglcCwgMHgleClcbiIsIGQtPmlycSwKIAkJCXZpLT5lb2lfYWRkciwgdmktPmVvaV9kYXRhKTsKIAlpb3NhcGljX2VvaSh2aS0+ZW9pX2FkZHIsIHZpLT5lb2lfZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvc2FwaWNfZW9pX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaW9zYXBpY19lb2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgdmVjdG9yX2luZm8gKnZpID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgdmVjdG9yX2luZm8gKnZpID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlpb3NhcGljX2VvaSh2aS0+ZW9pX2FkZHIsIHZpLT5lb2lfZGF0YSk7Ci0JY3B1X2VvaV9pcnEoaXJxKTsKKwljcHVfZW9pX2lycShkKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyBpbnQgaW9zYXBpY19zZXRfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKK3N0YXRpYyBpbnQgaW9zYXBpY19zZXRfYWZmaW5pdHlfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QsIGJvb2wgZm9yY2UpCiB7Ci0Jc3RydWN0IHZlY3Rvcl9pbmZvICp2aSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJc3RydWN0IHZlY3Rvcl9pbmZvICp2aSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXUzMiBkMCwgZDEsIGR1bW15X2QwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGRlc3RfY3B1OwogCi0JZGVzdF9jcHUgPSBjcHVfY2hlY2tfYWZmaW5pdHkoaXJxLCBkZXN0KTsKKwlkZXN0X2NwdSA9IGNwdV9jaGVja19hZmZpbml0eShkLCBkZXN0KTsKIAlpZiAoZGVzdF9jcHUgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQljcHVtYXNrX2NvcHkoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgY3B1bWFza19vZihkZXN0X2NwdSkpOwotCXZpLT50eG5fYWRkciA9IHR4bl9hZmZpbml0eV9hZGRyKGlycSwgZGVzdF9jcHUpOworCWNwdW1hc2tfY29weShkLT5hZmZpbml0eSwgY3B1bWFza19vZihkZXN0X2NwdSkpOworCXZpLT50eG5fYWRkciA9IHR4bl9hZmZpbml0eV9hZGRyKGQtPmlycSwgZGVzdF9jcHUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvc2FwaWNfbG9jaywgZmxhZ3MpOwogCS8qIGQxIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBDUFUsIHNvIG9ubHkgd2FudCB0byBzZXQgdGhhdApAQCAtNzA4LDEzICs3MDgsMTMgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvc2FwaWNfaW50ZXJydXB0X3R5cGUgPSB7Ci0JLm5hbWUJPQkiSU8tU0FQSUMtbGV2ZWwiLAotCS51bm1hc2sJPQlpb3NhcGljX3VubWFza19pcnEsCi0JLm1hc2sJPQlpb3NhcGljX21hc2tfaXJxLAotCS5hY2sJPQljcHVfYWNrX2lycSwKLQkuZW9pCT0JaW9zYXBpY19lb2lfaXJxLAorCS5uYW1lCQk9CSJJTy1TQVBJQy1sZXZlbCIsCisJLmlycV91bm1hc2sJPQlpb3NhcGljX3VubWFza19pcnEsCisJLmlycV9tYXNrCT0JaW9zYXBpY19tYXNrX2lycSwKKwkuaXJxX2Fjawk9CWNwdV9hY2tfaXJxLAorCS5pcnFfZW9pCT0JaW9zYXBpY19lb2lfaXJxLAogI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5ID0JaW9zYXBpY19zZXRfYWZmaW5pdHlfaXJxLAorCS5pcnFfc2V0X2FmZmluaXR5ID0JaW9zYXBpY19zZXRfYWZmaW5pdHlfaXJxLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKaW5kZXggMjgyNDE1MzJjLi5hNGQ4ZmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKKysrIGIvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCkBAIC0yODYsOCArMjg2LDkgQEAKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfODc1NjBfTElPLCBzdXBlcmlvX2luaXQpOwogCi1zdGF0aWMgdm9pZCBzdXBlcmlvX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzdXBlcmlvX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCXU4IHI4OwogCiAJaWYgKChpcnEgPCAxKSB8fCAoaXJxID09IDIpIHx8IChpcnEgPiA3KSkgewpAQCAtMzAzLDggKzMwNCw5IEBACiAJb3V0YiAocjgsSUNfUElDMSsxKTsKIH0KIAotc3RhdGljIHZvaWQgc3VwZXJpb191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzdXBlcmlvX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJdTggcjg7CiAKIAlpZiAoKGlycSA8IDEpIHx8IChpcnEgPT0gMikgfHwgKGlycSA+IDcpKSB7CkBAIC0zMjAsOSArMzIyLDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzdXBlcmlvX2ludGVycnVwdF90eXBlID0gewotCS5uYW1lCT0JU1VQRVJJTywKLQkudW5tYXNrCT0Jc3VwZXJpb191bm1hc2tfaXJxLAotCS5tYXNrCT0Jc3VwZXJpb19tYXNrX2lycSwKKwkubmFtZQkJPQlTVVBFUklPLAorCS5pcnFfdW5tYXNrCT0Jc3VwZXJpb191bm1hc2tfaXJxLAorCS5pcnFfbWFzawk9CXN1cGVyaW9fbWFza19pcnEsCiB9OwogCiAjaWZkZWYgREVCVUdfU1VQRVJJT19JTklUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9LY29uZmlnIGIvZHJpdmVycy9wY2kvS2NvbmZpZwppbmRleCBhOTUyM2ZkLi5jOGZmNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL0tjb25maWcKQEAgLTg3LDMgKzg3LDUgQEAKIAlkZXBlbmRzIG9uIEFDUEkKIAlkZXBlbmRzIG9uIEhPVFBMVUcKIAlkZWZhdWx0IHkKKworc2VsZWN0IE5MUyBpZiAoRE1JIHx8IEFDUEkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCmluZGV4IDc3Y2Y4MTMuLjk4ZDYxYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC01NCw4ICs1NCw5IEBACiAKICMKICMgQUNQSSBSZWxhdGVkIFBDSSBGVyBGdW5jdGlvbnMKKyMgQUNQSSBfRFNNIHByb3ZpZGVkIGZpcm13YXJlIGluc3RhbmNlIGFuZCBzdHJpbmcgbmFtZQogIwotb2JqLSQoQ09ORklHX0FDUEkpICAgICs9IHBjaS1hY3BpLm8KK29iai0kKENPTkZJR19BQ1BJKSAgICArPSBwY2ktYWNwaS5vIHBjaS1sYWJlbC5vCiAKICMgU01CSU9TIHByb3ZpZGVkIGZpcm13YXJlIGluc3RhbmNlIGFuZCBsYWJlbHMKIG9iai0kKENPTkZJR19ETUkpICAgICs9IHBjaS1sYWJlbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwppbmRleCBjYjIzYWEyLi5lNjEwY2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKQEAgLTIxMiw2ICsyMTIsNyBAQAogCiAJcGRldiA9IHBjaV9nZXRfc2xvdChwYnVzLCBQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbikpOwogCWlmIChwZGV2KSB7CisJCXBkZXYtPmN1cnJlbnRfc3RhdGUgPSBQQ0lfRDA7CiAJCXNsb3QtPmZsYWdzIHw9IChTTE9UX0VOQUJMRUQgfCBTTE9UX1BPV0VSRURPTik7CiAJCXBjaV9kZXZfcHV0KHBkZXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1sYWJlbC5jIGIvZHJpdmVycy9wY2kvcGNpLWxhYmVsLmMKaW5kZXggOTBjMGE3Mi4uNzdjYjJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWxhYmVsLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWxhYmVsLmMKQEAgLTUsNiArNSwxMyBAQAogICogYnkgTmFyZW5kcmEgSyA8TmFyZW5kcmFfS0BkZWxsLmNvbT4sCiAgKiBKb3JkYW4gSGFyZ3JhdmUgPEpvcmRhbl9IYXJncmF2ZUBkZWxsLmNvbT4KICAqCisgKiBQQ0kgRmlybXdhcmUgU3BlY2lmaWNhdGlvbiBSZXZpc2lvbiAzLjEgc2VjdGlvbiA0LjYuNyAoRFNNIGZvciBOYW1pbmcgYQorICogUENJIG9yIFBDSSBFeHByZXNzIERldmljZSBVbmRlciBPcGVyYXRpbmcgU3lzdGVtcykgZGVmaW5lcyBhbiBpbnN0YW5jZQorICogbnVtYmVyIGFuZCBzdHJpbmcgbmFtZS4gVGhpcyBjb2RlIHJldHJpZXZlcyB0aGVtIGFuZCBleHBvcnRzIHRoZW0gdG8gc3lzZnMuCisgKiBJZiB0aGUgc3lzdGVtIGZpcm13YXJlIGRvZXMgbm90IHByb3ZpZGUgdGhlIEFDUEkgX0RTTSAoRGV2aWNlIFNwZWNpZmljCisgKiBNZXRob2QpLCB0aGVuIHRoZSBTTUJJT1MgdHlwZSA0MSBpbnN0YW5jZSBudW1iZXIgYW5kIHN0cmluZyBpcyBleHBvcnRlZCB0bworICogc3lzZnMuCisgKgogICogU01CSU9TIGRlZmluZXMgdHlwZSA0MSBmb3Igb25ib2FyZCBwY2kgZGV2aWNlcy4gVGhpcyBjb2RlIHJldHJpZXZlcwogICogdGhlIGluc3RhbmNlIG51bWJlciBhbmQgc3RyaW5nIGZyb20gdGhlIHR5cGUgNDEgcmVjb3JkIGFuZCBleHBvcnRzCiAgKiBpdCB0byBzeXNmcy4KQEAgLTE5LDggKzI2LDI5IEBACiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25scy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlICJwY2kuaCIKIAorI2RlZmluZQlERVZJQ0VfTEFCRUxfRFNNCTB4MDcKKworI2lmbmRlZiBDT05GSUdfRE1JCisKK3N0YXRpYyBpbmxpbmUgaW50CitwY2lfY3JlYXRlX3NtYmlvc25hbWVfZmlsZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGNpX3JlbW92ZV9zbWJpb3NuYW1lX2ZpbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7Cit9CisKKyNlbHNlCisKIGVudW0gc21iaW9zX2F0dHJfZW51bSB7CiAJU01CSU9TX0FUVFJfTk9ORSA9IDAsCiAJU01CSU9TX0FUVFJfTEFCRUxfU0hPVywKQEAgLTEyMCw5ICsxNDgsNyBAQAogc3RhdGljIGludAogcGNpX2NyZWF0ZV9zbWJpb3NuYW1lX2ZpbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JaWYgKCFzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc21iaW9zX2F0dHJfZ3JvdXApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNtYmlvc19hdHRyX2dyb3VwKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEzMSwxMyArMTU3LDIyNyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzbWJpb3NfYXR0cl9ncm91cCk7CiB9CiAKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19BQ1BJCisKK3N0YXRpYyBpbmxpbmUgaW50CitwY2lfY3JlYXRlX2FjcGlfaW5kZXhfbGFiZWxfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludAorcGNpX3JlbW92ZV9hY3BpX2luZGV4X2xhYmVsX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBib29sCitkZXZpY2VfaGFzX2RzbShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGZhbHNlOworfQorCisjZWxzZQorCitzdGF0aWMgY29uc3QgY2hhciBkZXZpY2VfbGFiZWxfZHNtX3V1aWRbXSA9IHsKKwkweEQwLCAweDM3LCAweEM5LCAweEU1LCAweDUzLCAweDM1LCAweDdBLCAweDRELAorCTB4OTEsIDB4MTcsIDB4RUEsIDB4NEQsIDB4MTksIDB4QzMsIDB4NDMsIDB4NEQKK307CisKK2VudW0gYWNwaV9hdHRyX2VudW0geworCUFDUElfQVRUUl9OT05FID0gMCwKKwlBQ1BJX0FUVFJfTEFCRUxfU0hPVywKKwlBQ1BJX0FUVFJfSU5ERVhfU0hPVywKK307CisKK3N0YXRpYyB2b2lkIGRzbV9sYWJlbF91dGYxNnNfdG9fdXRmOHModW5pb24gYWNwaV9vYmplY3QgKm9iaiwgY2hhciAqYnVmKQoreworCWludCBsZW47CisJbGVuID0gdXRmMTZzX3RvX3V0ZjhzKChjb25zdCB3Y2hhcl90ICopb2JqLT4KKwkJCSAgICAgIHBhY2thZ2UuZWxlbWVudHNbMV0uc3RyaW5nLnBvaW50ZXIsCisJCQkgICAgICBvYmotPnBhY2thZ2UuZWxlbWVudHNbMV0uc3RyaW5nLmxlbmd0aCwKKwkJCSAgICAgIFVURjE2X0xJVFRMRV9FTkRJQU4sCisJCQkgICAgICBidWYsIFBBR0VfU0laRSk7CisJYnVmW2xlbl0gPSAnXG4nOworfQorCitzdGF0aWMgaW50Citkc21fZ2V0X2xhYmVsKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IGZ1bmMsCisJICAgICAgc3RydWN0IGFjcGlfYnVmZmVyICpvdXRwdXQsCisJICAgICAgY2hhciAqYnVmLCBlbnVtIGFjcGlfYXR0cl9lbnVtIGF0dHJpYnV0ZSkKK3sKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbXNbNF07CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlpbnQgbGVuID0gMDsKKworCWludCBlcnI7CisKKwlpbnB1dC5jb3VudCA9IDQ7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtczsKKwlwYXJhbXNbMF0udHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJcGFyYW1zWzBdLmJ1ZmZlci5sZW5ndGggPSBzaXplb2YoZGV2aWNlX2xhYmVsX2RzbV91dWlkKTsKKwlwYXJhbXNbMF0uYnVmZmVyLnBvaW50ZXIgPSAoY2hhciAqKWRldmljZV9sYWJlbF9kc21fdXVpZDsKKwlwYXJhbXNbMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtc1sxXS5pbnRlZ2VyLnZhbHVlID0gMHgwMjsKKwlwYXJhbXNbMl0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtc1syXS5pbnRlZ2VyLnZhbHVlID0gZnVuYzsKKwlwYXJhbXNbM10udHlwZSA9IEFDUElfVFlQRV9QQUNLQUdFOworCXBhcmFtc1szXS5wYWNrYWdlLmNvdW50ID0gMDsKKwlwYXJhbXNbM10ucGFja2FnZS5lbGVtZW50cyA9IE5VTEw7CisKKwllcnIgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfRFNNIiwgJmlucHV0LCBvdXRwdXQpOworCWlmIChlcnIpCisJCXJldHVybiAtMTsKKworCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKW91dHB1dC0+cG9pbnRlcjsKKworCXN3aXRjaCAob2JqLT50eXBlKSB7CisJY2FzZSBBQ1BJX1RZUEVfUEFDS0FHRToKKwkJaWYgKG9iai0+cGFja2FnZS5jb3VudCAhPSAyKQorCQkJYnJlYWs7CisJCWxlbiA9IG9iai0+cGFja2FnZS5lbGVtZW50c1swXS5pbnRlZ2VyLnZhbHVlOworCQlpZiAoYnVmKSB7CisJCQlpZiAoYXR0cmlidXRlID09IEFDUElfQVRUUl9JTkRFWF9TSE9XKQorCQkJCXNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsbHVcbiIsCisJCQkJb2JqLT5wYWNrYWdlLmVsZW1lbnRzWzBdLmludGVnZXIudmFsdWUpOworCQkJZWxzZSBpZiAoYXR0cmlidXRlID09IEFDUElfQVRUUl9MQUJFTF9TSE9XKQorCQkJCWRzbV9sYWJlbF91dGYxNnNfdG9fdXRmOHMob2JqLCBidWYpOworCQkJa2ZyZWUob3V0cHV0LT5wb2ludGVyKTsKKwkJCXJldHVybiBzdHJsZW4oYnVmKTsKKwkJfQorCQlrZnJlZShvdXRwdXQtPnBvaW50ZXIpOworCQlyZXR1cm4gbGVuOworCWJyZWFrOworCWRlZmF1bHQ6CisJCWtmcmVlKG91dHB1dC0+cG9pbnRlcik7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGJvb2wKK2RldmljZV9oYXNfZHNtKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisKKwloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoZGV2KTsKKworCWlmICghaGFuZGxlKQorCQlyZXR1cm4gRkFMU0U7CisKKwlpZiAoZHNtX2dldF9sYWJlbChoYW5kbGUsIERFVklDRV9MQUJFTF9EU00sICZvdXRwdXQsIE5VTEwsCisJCQkgIEFDUElfQVRUUl9OT05FKSA+IDApCisJCXJldHVybiBUUlVFOworCisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgbW9kZV90CithY3BpX2luZGV4X3N0cmluZ19leGlzdChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IG4pCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCisJaWYgKGRldmljZV9oYXNfZHNtKGRldikpCisJCXJldHVybiBTX0lSVUdPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CithY3BpbGFiZWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCWludCBsZW5ndGg7CisKKwloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoZGV2KTsKKworCWlmICghaGFuZGxlKQorCQlyZXR1cm4gLTE7CisKKwlsZW5ndGggPSBkc21fZ2V0X2xhYmVsKGhhbmRsZSwgREVWSUNFX0xBQkVMX0RTTSwKKwkJCSAgICAgICAmb3V0cHV0LCBidWYsIEFDUElfQVRUUl9MQUJFTF9TSE9XKTsKKworCWlmIChsZW5ndGggPCAxKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgc3NpemVfdAorYWNwaWluZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhY3BpX2J1ZmZlciBvdXRwdXQgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwlpbnQgbGVuZ3RoOworCisJaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKGRldik7CisKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuIC0xOworCisJbGVuZ3RoID0gZHNtX2dldF9sYWJlbChoYW5kbGUsIERFVklDRV9MQUJFTF9EU00sCisJCQkgICAgICAgJm91dHB1dCwgYnVmLCBBQ1BJX0FUVFJfSU5ERVhfU0hPVyk7CisKKwlpZiAobGVuZ3RoIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGxlbmd0aDsKKworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYWNwaV9hdHRyX2xhYmVsID0geworCS5hdHRyID0gey5uYW1lID0gImxhYmVsIiwgLm1vZGUgPSAwNDQ0fSwKKwkuc2hvdyA9IGFjcGlsYWJlbF9zaG93LAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFjcGlfYXR0cl9pbmRleCA9IHsKKwkuYXR0ciA9IHsubmFtZSA9ICJhY3BpX2luZGV4IiwgLm1vZGUgPSAwNDQ0fSwKKwkuc2hvdyA9IGFjcGlpbmRleF9zaG93LAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFjcGlfYXR0cmlidXRlc1tdID0geworCSZhY3BpX2F0dHJfbGFiZWwuYXR0ciwKKwkmYWNwaV9hdHRyX2luZGV4LmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFjcGlfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBhY3BpX2F0dHJpYnV0ZXMsCisJLmlzX3Zpc2libGUgPSBhY3BpX2luZGV4X3N0cmluZ19leGlzdCwKK307CisKK3N0YXRpYyBpbnQKK3BjaV9jcmVhdGVfYWNwaV9pbmRleF9sYWJlbF9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmFjcGlfYXR0cl9ncm91cCk7Cit9CisKK3N0YXRpYyBpbnQKK3BjaV9yZW1vdmVfYWNwaV9pbmRleF9sYWJlbF9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmYWNwaV9hdHRyX2dyb3VwKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiB2b2lkIHBjaV9jcmVhdGVfZmlybXdhcmVfbGFiZWxfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JaWYgKCFwY2lfY3JlYXRlX3NtYmlvc25hbWVfZmlsZShwZGV2KSkKLQkJOworCWlmIChkZXZpY2VfaGFzX2RzbSgmcGRldi0+ZGV2KSkKKwkJcGNpX2NyZWF0ZV9hY3BpX2luZGV4X2xhYmVsX2ZpbGVzKHBkZXYpOworCWVsc2UKKwkJcGNpX2NyZWF0ZV9zbWJpb3NuYW1lX2ZpbGUocGRldik7CiB9CiAKIHZvaWQgcGNpX3JlbW92ZV9maXJtd2FyZV9sYWJlbF9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlwY2lfcmVtb3ZlX3NtYmlvc25hbWVfZmlsZShwZGV2KTsKKwlpZiAoZGV2aWNlX2hhc19kc20oJnBkZXYtPmRldikpCisJCXBjaV9yZW1vdmVfYWNwaV9pbmRleF9sYWJlbF9maWxlcyhwZGV2KTsKKwllbHNlCisJCXBjaV9yZW1vdmVfc21iaW9zbmFtZV9maWxlKHBkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCBlYTI1ZTViLi5hOGEyNzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJdTggKmRhdGEgPSAodTgqKSBidWY7CiAKIAkvKiBTZXZlcmFsIGNoaXBzIGxvY2sgdXAgdHJ5aW5nIHRvIHJlYWQgdW5kZWZpbmVkIGNvbmZpZyBzcGFjZSAqLwotCWlmIChzZWN1cml0eV9jYXBhYmxlKGZpbHAtPmZfY3JlZCwgQ0FQX1NZU19BRE1JTikgPT0gMCkgeworCWlmIChzZWN1cml0eV9jYXBhYmxlKCZpbml0X3VzZXJfbnMsIGZpbHAtPmZfY3JlZCwgQ0FQX1NZU19BRE1JTikgPT0gMCkgewogCQlzaXplID0gZGV2LT5jZmdfc2l6ZTsKIAl9IGVsc2UgaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpIHsKIAkJc2l6ZSA9IDEyODsKQEAgLTEwODgsNyArMTA4OCw3IEBACiAJCWF0dHItPndyaXRlID0gd3JpdGVfdnBkX2F0dHI7CiAJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZGV2LT5kZXYua29iaiwgYXR0cik7CiAJCWlmIChyZXR2YWwpIHsKLQkJCWtmcmVlKGRldi0+dnBkLT5hdHRyKTsKKwkJCWtmcmVlKGF0dHIpOwogCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCQlkZXYtPnZwZC0+YXR0ciA9IGF0dHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IGY2OWQ2ZTAuLmE2ZWMyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0xMSw3ICsxMSw3IEBACiBleHRlcm4gaW50IHBjaV91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwogZXh0ZXJuIGludCBwY2lfY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBleHRlcm4gdm9pZCBwY2lfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci0jaWZuZGVmIENPTkZJR19ETUkKKyNpZiAhZGVmaW5lZChDT05GSUdfRE1JKSAmJiAhZGVmaW5lZChDT05GSUdfQUNQSSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfY3JlYXRlX2Zpcm13YXJlX2xhYmVsX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeyByZXR1cm47IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcmVtb3ZlX2Zpcm13YXJlX2xhYmVsX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyX2luamVjdC5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyX2luamVjdC5jCmluZGV4IGIzY2Y2MjIuLmY2MjA3OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2Flcl9pbmplY3QuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJfaW5qZWN0LmMKQEAgLTI3LDYgKzI3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSAiYWVyZHJ2LmgiCiAKKy8qIE92ZXJyaWRlIHRoZSBleGlzdGluZyBjb3JyZWN0ZWQgYW5kIHVuY29ycmVjdGVkIGVycm9yIG1hc2tzICovCitzdGF0aWMgaW50IGFlcl9tYXNrX292ZXJyaWRlOworbW9kdWxlX3BhcmFtKGFlcl9tYXNrX292ZXJyaWRlLCBib29sLCAwKTsKKwogc3RydWN0IGFlcl9lcnJvcl9pbmogewogCXU4IGJ1czsKIAl1OCBkZXY7CkBAIC0zMjIsNyArMzI2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihlaW5qLT5kZXYsIGVpbmotPmZuKTsKIAlpbnQgcG9zX2NhcF9lcnIsIHJwX3Bvc19jYXBfZXJyOwotCXUzMiBzZXZlciwgY29yX21hc2ssIHVuY29yX21hc2s7CisJdTMyIHNldmVyLCBjb3JfbWFzaywgdW5jb3JfbWFzaywgY29yX21hc2tfb3JpZywgdW5jb3JfbWFza19vcmlnOwogCWludCByZXQgPSAwOwogCiAJZGV2ID0gcGNpX2dldF9kb21haW5fYnVzX2FuZF9zbG90KChpbnQpZWluai0+ZG9tYWluLCBlaW5qLT5idXMsIGRldmZuKTsKQEAgLTM2MSw2ICszNjUsMTggQEAKIAkJZ290byBvdXRfcHV0OwogCX0KIAorCWlmIChhZXJfbWFza19vdmVycmlkZSkgeworCQljb3JfbWFza19vcmlnID0gY29yX21hc2s7CisJCWNvcl9tYXNrICY9ICEoZWluai0+Y29yX3N0YXR1cyk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3NfY2FwX2VyciArIFBDSV9FUlJfQ09SX01BU0ssCisJCQkJICAgICAgIGNvcl9tYXNrKTsKKworCQl1bmNvcl9tYXNrX29yaWcgPSB1bmNvcl9tYXNrOworCQl1bmNvcl9tYXNrICY9ICEoZWluai0+dW5jb3Jfc3RhdHVzKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvc19jYXBfZXJyICsgUENJX0VSUl9VTkNPUl9NQVNLLAorCQkJCSAgICAgICB1bmNvcl9tYXNrKTsKKwl9CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5qZWN0X2xvY2ssIGZsYWdzKTsKIAogCWVyciA9IF9fZmluZF9hZXJfZXJyb3JfYnlfZGV2KGRldik7CkBAIC0zNzgsMTQgKzM5NCwxNiBAQAogCWVyci0+aGVhZGVyX2xvZzIgPSBlaW5qLT5oZWFkZXJfbG9nMjsKIAllcnItPmhlYWRlcl9sb2czID0gZWluai0+aGVhZGVyX2xvZzM7CiAKLQlpZiAoZWluai0+Y29yX3N0YXR1cyAmJiAhKGVpbmotPmNvcl9zdGF0dXMgJiB+Y29yX21hc2spKSB7CisJaWYgKCFhZXJfbWFza19vdmVycmlkZSAmJiBlaW5qLT5jb3Jfc3RhdHVzICYmCisJICAgICEoZWluai0+Y29yX3N0YXR1cyAmIH5jb3JfbWFzaykpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVGhlIGNvcnJlY3RhYmxlIGVycm9yKHMpIGlzIG1hc2tlZCAiCiAJCQkJImJ5IGRldmljZVxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluamVjdF9sb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0X3B1dDsKIAl9Ci0JaWYgKGVpbmotPnVuY29yX3N0YXR1cyAmJiAhKGVpbmotPnVuY29yX3N0YXR1cyAmIH51bmNvcl9tYXNrKSkgeworCWlmICghYWVyX21hc2tfb3ZlcnJpZGUgJiYgZWluai0+dW5jb3Jfc3RhdHVzICYmCisJICAgICEoZWluai0+dW5jb3Jfc3RhdHVzICYgfnVuY29yX21hc2spKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRoZSB1bmNvcnJlY3RhYmxlIGVycm9yKHMpIGlzIG1hc2tlZCAiCiAJCQkJImJ5IGRldmljZVxuIik7CkBAIC00MjUsNiArNDQzLDEzIEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluamVjdF9sb2NrLCBmbGFncyk7CiAKKwlpZiAoYWVyX21hc2tfb3ZlcnJpZGUpIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvc19jYXBfZXJyICsgUENJX0VSUl9DT1JfTUFTSywKKwkJCQkgICAgICAgY29yX21hc2tfb3JpZyk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3NfY2FwX2VyciArIFBDSV9FUlJfVU5DT1JfTUFTSywKKwkJCQkgICAgICAgdW5jb3JfbWFza19vcmlnKTsKKwl9CisKIAlyZXQgPSBwY2lfYnVzX3NldF9hZXJfb3BzKGRldi0+YnVzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCBjODQ5MDBkLi40NGNiYmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTc2NCw2ICs3NjQsOCBAQAogCQlpZiAocGNpX2ZpbmRfYnVzKHBjaV9kb21haW5fbnIoYnVzKSwgbWF4KzEpKQogCQkJZ290byBvdXQ7CiAJCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKGJ1cywgZGV2LCArK21heCk7CisJCWlmICghY2hpbGQpCisJCQlnb3RvIG91dDsKIAkJYnVzZXMgPSAoYnVzZXMgJiAweGZmMDAwMDAwKQogCQkgICAgICB8ICgodW5zaWduZWQgaW50KShjaGlsZC0+cHJpbWFyeSkgICAgIDw8ICAwKQogCQkgICAgICB8ICgodW5zaWduZWQgaW50KShjaGlsZC0+c2Vjb25kYXJ5KSAgIDw8ICA4KQpAQCAtNzc3LDcgKzc3OSw3IEBACiAJCQlidXNlcyAmPSB+MHhmZjAwMDAwMDsKIAkJCWJ1c2VzIHw9IENBUkRCVVNfTEFURU5DWV9USU1FUiA8PCAyNDsKIAkJfQotCQkJCisKIAkJLyoKIAkJICogV2UgbmVlZCB0byBibGFzdCBhbGwgdGhyZWUgdmFsdWVzIHdpdGggYSBzaW5nbGUgd3JpdGUuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA1M2E3ODZmLi5iZDgwZjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtNTMzLDYgKzUzMywxNyBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8zLAlxdWlya19waWl4NF9hY3BpKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMywJcXVpcmtfcGlpeDRfYWNwaSk7CiAKKyNkZWZpbmUgSUNIX1BNQkFTRQkweDQwCisjZGVmaW5lIElDSF9BQ1BJX0NOVEwJMHg0NAorI2RlZmluZSAgSUNINF9BQ1BJX0VOCTB4MTAKKyNkZWZpbmUgIElDSDZfQUNQSV9FTgkweDgwCisjZGVmaW5lIElDSDRfR1BJT0JBU0UJMHg1OAorI2RlZmluZSBJQ0g0X0dQSU9fQ05UTAkweDVjCisjZGVmaW5lICBJQ0g0X0dQSU9fRU4JMHgxMAorI2RlZmluZSBJQ0g2X0dQSU9CQVNFCTB4NDgKKyNkZWZpbmUgSUNINl9HUElPX0NOVEwJMHg0YworI2RlZmluZSAgSUNINl9HUElPX0VOCTB4MTAKKwogLyoKICAqIElDSDQsIElDSDQtTSwgSUNINSwgSUNINS1NIEFDUEk6IFRocmVlIElPIHJlZ2lvbnMgcG9pbnRlZCB0byBieSBsb25nd29yZHMgYXQKICAqCTB4NDAgKDEyOCBieXRlcyBvZiBBQ1BJLCBHUElPICYgVENPIHJlZ2lzdGVycykKQEAgLTU0MSwxMiArNTUyLDMzIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfaWNoNF9scGNfYWNwaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiByZWdpb247CisJdTggZW5hYmxlOwogCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgJnJlZ2lvbik7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgcmVnaW9uLCAxMjgsIFBDSV9CUklER0VfUkVTT1VSQ0VTLCAiSUNINCBBQ1BJL0dQSU8vVENPIik7CisJLyoKKwkgKiBUaGUgY2hlY2sgZm9yIFBDSUJJT1NfTUlOX0lPIGlzIHRvIGVuc3VyZSB3ZSB3b24ndCBjcmVhdGUgYSBjb25mbGljdAorCSAqIHdpdGggbG93IGxlZ2FjeSAoYW5kIGZpeGVkKSBwb3J0cy4gV2UgZG9uJ3Qga25vdyB0aGUgZGVjb2RpbmcKKwkgKiBwcmlvcml0eSBhbmQgY2FuJ3QgdGVsbCB3aGV0aGVyIHRoZSBsZWdhY3kgZGV2aWNlIG9yIHRoZSBvbmUgY3JlYXRlZAorCSAqIGhlcmUgaXMgcmVhbGx5IGF0IHRoYXQgYWRkcmVzcy4gIFRoaXMgaGFwcGVucyBvbiBib2FyZHMgd2l0aCBicm9rZW4KKwkgKiBCSU9TZXMuCisJKi8KIAotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NTgsICZyZWdpb24pOwotCXF1aXJrX2lvX3JlZ2lvbihkZXYsIHJlZ2lvbiwgNjQsIFBDSV9CUklER0VfUkVTT1VSQ0VTKzEsICJJQ0g0IEdQSU8iKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIElDSF9BQ1BJX0NOVEwsICZlbmFibGUpOworCWlmIChlbmFibGUgJiBJQ0g0X0FDUElfRU4pIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgSUNIX1BNQkFTRSwgJnJlZ2lvbik7CisJCXJlZ2lvbiAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7CisJCWlmIChyZWdpb24gPj0gUENJQklPU19NSU5fSU8pCisJCQlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDEyOCwgUENJX0JSSURHRV9SRVNPVVJDRVMsCisJCQkJCSJJQ0g0IEFDUEkvR1BJTy9UQ08iKTsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIElDSDRfR1BJT19DTlRMLCAmZW5hYmxlKTsKKwlpZiAoZW5hYmxlICYgSUNINF9HUElPX0VOKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIElDSDRfR1BJT0JBU0UsICZyZWdpb24pOworCQlyZWdpb24gJj0gUENJX0JBU0VfQUREUkVTU19JT19NQVNLOworCQlpZiAocmVnaW9uID49IFBDSUJJT1NfTUlOX0lPKQorCQkJcXVpcmtfaW9fcmVnaW9uKGRldiwgcmVnaW9uLCA2NCwKKwkJCQkJUENJX0JSSURHRV9SRVNPVVJDRVMgKyAxLCAiSUNINCBHUElPIik7CisJfQogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8wLAkJcXVpcmtfaWNoNF9scGNfYWNwaSk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzAsCQlxdWlya19pY2g0X2xwY19hY3BpKTsKQEAgLTU2MiwxMiArNTk0LDI1IEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaWNoNl9scGNfYWNwaV9ncGlvKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTMyIHJlZ2lvbjsKKwl1OCBlbmFibGU7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAmcmVnaW9uKTsKLQlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDEyOCwgUENJX0JSSURHRV9SRVNPVVJDRVMsICJJQ0g2IEFDUEkvR1BJTy9UQ08iKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIElDSF9BQ1BJX0NOVEwsICZlbmFibGUpOworCWlmIChlbmFibGUgJiBJQ0g2X0FDUElfRU4pIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgSUNIX1BNQkFTRSwgJnJlZ2lvbik7CisJCXJlZ2lvbiAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7CisJCWlmIChyZWdpb24gPj0gUENJQklPU19NSU5fSU8pCisJCQlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDEyOCwgUENJX0JSSURHRV9SRVNPVVJDRVMsCisJCQkJCSJJQ0g2IEFDUEkvR1BJTy9UQ08iKTsKKwl9CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQ4LCAmcmVnaW9uKTsKLQlxdWlya19pb19yZWdpb24oZGV2LCByZWdpb24sIDY0LCBQQ0lfQlJJREdFX1JFU09VUkNFUysxLCAiSUNINiBHUElPIik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBJQ0g2X0dQSU9fQ05UTCwgJmVuYWJsZSk7CisJaWYgKGVuYWJsZSAmIElDSDRfR1BJT19FTikgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBJQ0g2X0dQSU9CQVNFLCAmcmVnaW9uKTsKKwkJcmVnaW9uICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKKwkJaWYgKHJlZ2lvbiA+PSBQQ0lCSU9TX01JTl9JTykKKwkJCXF1aXJrX2lvX3JlZ2lvbihkZXYsIHJlZ2lvbiwgNjQsCisJCQkJCVBDSV9CUklER0VfUkVTT1VSQ0VTICsgMSwgIklDSDYgR1BJTyIpOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGljaDZfbHBjX2dlbmVyaWNfZGVjb2RlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIHJlZywgY29uc3QgY2hhciAqbmFtZSwgaW50IGR5bnNpemUpCkBAIC0yNjE4LDU4ICsyNjYzLDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCiAKLSNpZmRlZiBDT05GSUdfUENJX0lPVgotCi0vKgotICogRm9yIEludGVsIDgyNTc2IFNSLUlPViBOSUMsIGlmIEJJT1MgZG9lc24ndCBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIHRoZQotICogU1ItSU9WIEJBUnMsIHplcm8gdGhlIEZsYXNoIEJBUiBhbmQgcHJvZ3JhbSB0aGUgU1ItSU9WIEJBUnMgdG8gdXNlIHRoZQotICogb2xkIEZsYXNoIE1lbW9yeSBTcGFjZS4KLSAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2k4MjU3Nl9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCBwb3MsIGZsYWdzOwotCXUzMiBiYXIsIHN0YXJ0LCBzaXplOwotCi0JaWYgKFBBR0VfU0laRSA+IDB4MTAwMDApCi0JCXJldHVybjsKLQotCWZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKGRldiwgMCk7Ci0JaWYgKChmbGFncyAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpICE9Ci0JCQlQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX01FTU9SWSB8fAotCSAgICAoZmxhZ3MgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFX01BU0spICE9Ci0JCQlQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzMyKQotCQlyZXR1cm47Ci0KLQlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX1NSSU9WKTsKLQlpZiAoIXBvcykKLQkJcmV0dXJuOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX0JBUiwgJmJhcik7Ci0JaWYgKGJhciAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spCi0JCXJldHVybjsKLQotCXN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMSk7Ci0Jc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAxKTsKLQlpZiAoIXN0YXJ0IHx8IHNpemUgIT0gMHg0MDAwMDAgfHwgc3RhcnQgJiAoc2l6ZSAtIDEpKQotCQlyZXR1cm47Ci0KLQlwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCAxKSA9IDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMSwgMCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9TUklPVl9CQVIsIHN0YXJ0KTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX0JBUiArIDEyLCBzdGFydCArIHNpemUgLyAyKTsKLQotCWRldl9pbmZvKCZkZXYtPmRldiwgInVzZSBGbGFzaCBNZW1vcnkgU3BhY2UgZm9yIFNSLUlPViBCQVJzXG4iKTsKLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwYzksIHF1aXJrX2k4MjU3Nl9zcmlvdik7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMGU2LCBxdWlya19pODI1NzZfc3Jpb3YpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTBlNywgcXVpcmtfaTgyNTc2X3NyaW92KTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwZTgsIHF1aXJrX2k4MjU3Nl9zcmlvdik7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxNTBhLCBxdWlya19pODI1NzZfc3Jpb3YpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTUwZCwgcXVpcmtfaTgyNTc2X3NyaW92KTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDE1MTgsIHF1aXJrX2k4MjU3Nl9zcmlvdik7Ci0KLSNlbmRpZgkvKiBDT05GSUdfUENJX0lPViAqLwotCiAvKiBBbGxvdyBtYW51YWwgcmVzb3VyY2UgYWxsb2NhdGlvbiBmb3IgUENJIGhvdHBsdWcgYnJpZGdlcwogICogdmlhIHBjaT1ocG1lbXNpemU9bm5NIGFuZCBwY2k9aHBpb3NpemU9bm5NIHBhcmFtZXRlcnMuIEZvcgogICogc29tZSBQQ0ktUENJIGhvdHBsdWcgYnJpZGdlcywgbGlrZSBQTFggNjI1NCAoZm9ybWVyIEhJTlQgSEI2KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKaW5kZXggNjZjYjhmNC4uODlkMGE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKQEAgLTMzLDExICszMywzMiBAQAogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0OwogCXJlc291cmNlX3NpemVfdCBlbmQ7CisJcmVzb3VyY2Vfc2l6ZV90IGFkZF9zaXplOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCi1zdGF0aWMgdm9pZCBhZGRfdG9fZmFpbGVkX2xpc3Qoc3RydWN0IHJlc291cmNlX2xpc3RfeCAqaGVhZCwKLQkJCQkgc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMpCisjZGVmaW5lIGZyZWVfbGlzdCh0eXBlLCBoZWFkKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgIFwKKwlzdHJ1Y3QgdHlwZSAqbGlzdCwgKnRtcDsJCQlcCisJZm9yIChsaXN0ID0gKGhlYWQpLT5uZXh0OyBsaXN0OykgewkJXAorCQl0bXAgPSBsaXN0OwkJCQlcCisJCWxpc3QgPSBsaXN0LT5uZXh0OwkJCVwKKwkJa2ZyZWUodG1wKTsJCQkJXAorCX0JCQkJCQlcCisJKGhlYWQpLT5uZXh0ID0gTlVMTDsJCQkJXAorfSB3aGlsZSAoMCkKKworLyoqCisgKiBhZGRfdG9fbGlzdCgpIC0gYWRkIGEgbmV3IHJlc291cmNlIHRyYWNrZXIgdG8gdGhlIGxpc3QKKyAqIEBoZWFkOglIZWFkIG9mIHRoZSBsaXN0CisgKiBAZGV2OglkZXZpY2UgY29ycmVzcG9uZGluZyB0byB3aGljaCB0aGUgcmVzb3VyY2UKKyAqCQliZWxvbmdzCisgKiBAcmVzOglUaGUgcmVzb3VyY2UgdG8gYmUgdHJhY2tlZAorICogQGFkZF9zaXplOglhZGRpdGlvbmFsIHNpemUgdG8gYmUgb3B0aW9uYWxseSBhZGRlZAorICogICAgICAgICAgICAgIHRvIHRoZSByZXNvdXJjZQorICovCitzdGF0aWMgdm9pZCBhZGRfdG9fbGlzdChzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpoZWFkLAorCQkgc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsCisJCSByZXNvdXJjZV9zaXplX3QgYWRkX3NpemUpCiB7CiAJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbGlzdCA9IGhlYWQ7CiAJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbG4gPSBsaXN0LT5uZXh0OwpAQCAtNDUsNyArNjYsNyBAQAogCiAJdG1wID0ga21hbGxvYyhzaXplb2YoKnRtcCksIEdGUF9LRVJORUwpOwogCWlmICghdG1wKSB7Ci0JCXByX3dhcm5pbmcoImFkZF90b19mYWlsZWRfbGlzdDoga21hbGxvYygpIGZhaWxlZCFcbiIpOworCQlwcl93YXJuaW5nKCJhZGRfdG9fbGlzdDoga21hbGxvYygpIGZhaWxlZCFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC01NSwyMCArNzYsMTQgQEAKIAl0bXAtPnN0YXJ0ID0gcmVzLT5zdGFydDsKIAl0bXAtPmVuZCA9IHJlcy0+ZW5kOwogCXRtcC0+ZmxhZ3MgPSByZXMtPmZsYWdzOworCXRtcC0+YWRkX3NpemUgPSBhZGRfc2l6ZTsKIAlsaXN0LT5uZXh0ID0gdG1wOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2ZhaWxlZF9saXN0KHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmhlYWQpCitzdGF0aWMgdm9pZCBhZGRfdG9fZmFpbGVkX2xpc3Qoc3RydWN0IHJlc291cmNlX2xpc3RfeCAqaGVhZCwKKwkJCQlzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKLQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpsaXN0LCAqdG1wOwotCi0JZm9yIChsaXN0ID0gaGVhZC0+bmV4dDsgbGlzdDspIHsKLQkJdG1wID0gbGlzdDsKLQkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0JCWtmcmVlKHRtcCk7Ci0JfQotCi0JaGVhZC0+bmV4dCA9IE5VTEw7CisJYWRkX3RvX2xpc3QoaGVhZCwgZGV2LCByZXMsIDApOwogfQogCiBzdGF0aWMgdm9pZCBfX2Rldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtOTEsMTggKzEwNiw4OCBAQAogCXBkZXZfc29ydF9yZXNvdXJjZXMoZGV2LCBoZWFkKTsKIH0KIAotc3RhdGljIHZvaWQgX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCwKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlyZXMtPnN0YXJ0ID0gMDsKKwlyZXMtPmVuZCA9IDA7CisJcmVzLT5mbGFncyA9IDA7Cit9CisKKy8qKgorICogYWRqdXN0X3Jlc291cmNlc19zb3J0ZWQoKSAtIHNhdGlzZnkgYW55IGFkZGl0aW9uYWwgcmVzb3VyY2UgcmVxdWVzdHMKKyAqCisgKiBAYWRkX2hlYWQgOiBoZWFkIG9mIHRoZSBsaXN0IHRyYWNraW5nIHJlcXVlc3RzIHJlcXVpcmluZyBhZGRpdGlvbmFsCisgKiAgICAgICAgICAgICByZXNvdXJjZXMKKyAqIEBoZWFkICAgICA6IGhlYWQgb2YgdGhlIGxpc3QgdHJhY2tpbmcgcmVxdWVzdHMgd2l0aCBhbGxvY2F0ZWQKKyAqICAgICAgICAgICAgIHJlc291cmNlcworICoKKyAqIFdhbGsgdGhyb3VnaCBlYWNoIGVsZW1lbnQgb2YgdGhlIGFkZF9oZWFkIGFuZCB0cnkgdG8gcHJvY3VyZQorICogYWRkaXRpb25hbCByZXNvdXJjZXMgZm9yIHRoZSBlbGVtZW50LCBwcm92aWRlZCB0aGUgZWxlbWVudAorICogaXMgaW4gdGhlIGhlYWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgYWRqdXN0X3Jlc291cmNlc19zb3J0ZWQoc3RydWN0IHJlc291cmNlX2xpc3RfeCAqYWRkX2hlYWQsCisJCXN0cnVjdCByZXNvdXJjZV9saXN0ICpoZWFkKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxpc3QsICp0bXAsICpwcmV2OworCXN0cnVjdCByZXNvdXJjZV9saXN0ICpobGlzdDsKKwlyZXNvdXJjZV9zaXplX3QgYWRkX3NpemU7CisJaW50IGlkeDsKKworCXByZXYgPSBhZGRfaGVhZDsKKwlmb3IgKGxpc3QgPSBhZGRfaGVhZC0+bmV4dDsgbGlzdDspIHsKKwkJcmVzID0gbGlzdC0+cmVzOworCQkvKiBza2lwIHJlc291cmNlIHRoYXQgaGFzIGJlZW4gcmVzZXQgKi8KKwkJaWYgKCFyZXMtPmZsYWdzKQorCQkJZ290byBvdXQ7CisKKwkJLyogc2tpcCB0aGlzIHJlc291cmNlIGlmIG5vdCBmb3VuZCBpbiBoZWFkIGxpc3QgKi8KKwkJZm9yIChobGlzdCA9IGhlYWQtPm5leHQ7IGhsaXN0ICYmIGhsaXN0LT5yZXMgIT0gcmVzOworCQkJCWhsaXN0ID0gaGxpc3QtPm5leHQpOworCQlpZiAoIWhsaXN0KSB7IC8qIGp1c3Qgc2tpcCAqLworCQkJcHJldiA9IGxpc3Q7CisJCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWR4ID0gcmVzIC0gJmxpc3QtPmRldi0+cmVzb3VyY2VbMF07CisJCWFkZF9zaXplPWxpc3QtPmFkZF9zaXplOworCQlpZiAoIXJlc291cmNlX3NpemUocmVzKSAmJiBhZGRfc2l6ZSkgeworCQkJIHJlcy0+ZW5kID0gcmVzLT5zdGFydCArIGFkZF9zaXplIC0gMTsKKwkJCSBpZihwY2lfYXNzaWduX3Jlc291cmNlKGxpc3QtPmRldiwgaWR4KSkKKwkJCQlyZXNldF9yZXNvdXJjZShyZXMpOworCQl9IGVsc2UgaWYgKGFkZF9zaXplKSB7CisJCQlhZGp1c3RfcmVzb3VyY2UocmVzLCByZXMtPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUocmVzKSArIGFkZF9zaXplKTsKKwkJfQorb3V0OgorCQl0bXAgPSBsaXN0OworCQlwcmV2LT5uZXh0ID0gbGlzdCA9IGxpc3QtPm5leHQ7CisJCWtmcmVlKHRtcCk7CisJfQorfQorCisvKioKKyAqIGFzc2lnbl9yZXF1ZXN0ZWRfcmVzb3VyY2VzX3NvcnRlZCgpIC0gc2F0aXNmeSByZXNvdXJjZSByZXF1ZXN0cworICoKKyAqIEBoZWFkIDogaGVhZCBvZiB0aGUgbGlzdCB0cmFja2luZyByZXF1ZXN0cyBmb3IgcmVzb3VyY2VzCisgKiBAZmFpbGVkX2xpc3QgOiBoZWFkIG9mIHRoZSBsaXN0IHRyYWNraW5nIHJlcXVlc3RzIHRoYXQgY291bGQKKyAqCQlub3QgYmUgYWxsb2NhdGVkCisgKgorICogU2F0aXNmeSByZXNvdXJjZSByZXF1ZXN0cyBvZiBlYWNoIGVsZW1lbnQgaW4gdGhlIGxpc3QuIEFkZAorICogcmVxdWVzdHMgdGhhdCBjb3VsZCBub3Qgc2F0aXNmaWVkIHRvIHRoZSBmYWlsZWRfbGlzdC4KKyAqLworc3RhdGljIHZvaWQgYXNzaWduX3JlcXVlc3RlZF9yZXNvdXJjZXNfc29ydGVkKHN0cnVjdCByZXNvdXJjZV9saXN0ICpoZWFkLAogCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3QgKmxpc3QsICp0bXA7CisJc3RydWN0IHJlc291cmNlX2xpc3QgKmxpc3Q7CiAJaW50IGlkeDsKIAotCWZvciAobGlzdCA9IGhlYWQtPm5leHQ7IGxpc3Q7KSB7CisJZm9yIChsaXN0ID0gaGVhZC0+bmV4dDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKIAkJcmVzID0gbGlzdC0+cmVzOwogCQlpZHggPSByZXMgLSAmbGlzdC0+ZGV2LT5yZXNvdXJjZVswXTsKLQotCQlpZiAocGNpX2Fzc2lnbl9yZXNvdXJjZShsaXN0LT5kZXYsIGlkeCkpIHsKKwkJaWYgKHJlc291cmNlX3NpemUocmVzKSAmJiBwY2lfYXNzaWduX3Jlc291cmNlKGxpc3QtPmRldiwgaWR4KSkgewogCQkJaWYgKGZhaWxfaGVhZCAmJiAhcGNpX2lzX3Jvb3RfYnVzKGxpc3QtPmRldi0+YnVzKSkgewogCQkJCS8qCiAJCQkJICogaWYgdGhlIGZhaWxlZCByZXMgaXMgZm9yIFJPTSBCQVIsIGFuZCBpdCB3aWxsCkBAIC0xMTIsMTYgKzE5NywyNSBAQAogCQkJCSAgICAgICghKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9FTkFCTEUpKSkpCiAJCQkJCWFkZF90b19mYWlsZWRfbGlzdChmYWlsX2hlYWQsIGxpc3QtPmRldiwgcmVzKTsKIAkJCX0KLQkJCXJlcy0+c3RhcnQgPSAwOwotCQkJcmVzLT5lbmQgPSAwOwotCQkJcmVzLT5mbGFncyA9IDA7CisJCQlyZXNldF9yZXNvdXJjZShyZXMpOwogCQl9Ci0JCXRtcCA9IGxpc3Q7Ci0JCWxpc3QgPSBsaXN0LT5uZXh0OwotCQlrZnJlZSh0bXApOwogCX0KIH0KIAorc3RhdGljIHZvaWQgX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqYWRkX2hlYWQsCisJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmZhaWxfaGVhZCkKK3sKKwkvKiBTYXRpc2Z5IHRoZSBtdXN0LWhhdmUgcmVzb3VyY2UgcmVxdWVzdHMgKi8KKwlhc3NpZ25fcmVxdWVzdGVkX3Jlc291cmNlc19zb3J0ZWQoaGVhZCwgZmFpbF9oZWFkKTsKKworCS8qIFRyeSB0byBzYXRpc2Z5IGFueSBhZGRpdGlvbmFsIG5pY2UtdG8taGF2ZSByZXNvdXJjZQorCQlyZXF1ZXN0cyAqLworCWlmIChhZGRfaGVhZCkKKwkJYWRqdXN0X3Jlc291cmNlc19zb3J0ZWQoYWRkX2hlYWQsIGhlYWQpOworCWZyZWVfbGlzdChyZXNvdXJjZV9saXN0LCBoZWFkKTsKK30KKwogc3RhdGljIHZvaWQgcGRldl9hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCiB7CkBAIC0xMjksMTEgKzIyMywxMiBAQAogCiAJaGVhZC5uZXh0ID0gTlVMTDsKIAlfX2Rldl9zb3J0X3Jlc291cmNlcyhkZXYsICZoZWFkKTsKLQlfX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKCZoZWFkLCBmYWlsX2hlYWQpOworCV9fYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoJmhlYWQsIE5VTEwsIGZhaWxfaGVhZCk7CiAKIH0KIAogc3RhdGljIHZvaWQgcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqYWRkX2hlYWQsCiAJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKQEAgLTE0Myw3ICsyMzgsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKIAkJX19kZXZfc29ydF9yZXNvdXJjZXMoZGV2LCAmaGVhZCk7CiAKLQlfX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKCZoZWFkLCBmYWlsX2hlYWQpOworCV9fYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoJmhlYWQsIGFkZF9oZWFkLCBmYWlsX2hlYWQpOwogfQogCiB2b2lkIHBjaV9zZXR1cF9jYXJkYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCkBAIC00MDQsMTUgKzQ5OSw2MiBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKiBTaXppbmcgdGhlIElPIHdpbmRvd3Mgb2YgdGhlIFBDSS1QQ0kgYnJpZGdlIGlzIHRyaXZpYWwsCi0gICBzaW5jZSB0aGVzZSB3aW5kb3dzIGhhdmUgNEsgZ3JhbnVsYXJpdHkgYW5kIHRoZSBJTyByYW5nZXMKLSAgIG9mIG5vbi1icmlkZ2UgUENJIGRldmljZXMgYXJlIGxpbWl0ZWQgdG8gMjU2IGJ5dGVzLgotICAgV2UgbXVzdCBiZSBjYXJlZnVsIHdpdGggdGhlIElTQSBhbGlhc2luZyB0aG91Z2guICovCi1zdGF0aWMgdm9pZCBwYnVzX3NpemVfaW8oc3RydWN0IHBjaV9idXMgKmJ1cywgcmVzb3VyY2Vfc2l6ZV90IG1pbl9zaXplKQorc3RhdGljIHJlc291cmNlX3NpemVfdCBjYWxjdWxhdGVfaW9zaXplKHJlc291cmNlX3NpemVfdCBzaXplLAorCQlyZXNvdXJjZV9zaXplX3QgbWluX3NpemUsCisJCXJlc291cmNlX3NpemVfdCBzaXplMSwKKwkJcmVzb3VyY2Vfc2l6ZV90IG9sZF9zaXplLAorCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24pCit7CisJaWYgKHNpemUgPCBtaW5fc2l6ZSkKKwkJc2l6ZSA9IG1pbl9zaXplOworCWlmIChvbGRfc2l6ZSA9PSAxICkKKwkJb2xkX3NpemUgPSAwOworCS8qIFRvIGJlIGZpeGVkIGluIDIuNTogd2Ugc2hvdWxkIGhhdmUgc29ydCBvZiBIQVZFX0lTQQorCSAgIGZsYWcgaW4gdGhlIHN0cnVjdCBwY2lfYnVzLiAqLworI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgZGVmaW5lZChDT05GSUdfRUlTQSkKKwlzaXplID0gKHNpemUgJiAweGZmKSArICgoc2l6ZSAmIH4weGZmVUwpIDw8IDIpOworI2VuZGlmCisJc2l6ZSA9IEFMSUdOKHNpemUgKyBzaXplMSwgYWxpZ24pOworCWlmIChzaXplIDwgb2xkX3NpemUpCisJCXNpemUgPSBvbGRfc2l6ZTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHJlc291cmNlX3NpemVfdCBjYWxjdWxhdGVfbWVtc2l6ZShyZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJcmVzb3VyY2Vfc2l6ZV90IG1pbl9zaXplLAorCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZTEsCisJCXJlc291cmNlX3NpemVfdCBvbGRfc2l6ZSwKKwkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQoreworCWlmIChzaXplIDwgbWluX3NpemUpCisJCXNpemUgPSBtaW5fc2l6ZTsKKwlpZiAob2xkX3NpemUgPT0gMSApCisJCW9sZF9zaXplID0gMDsKKwlpZiAoc2l6ZSA8IG9sZF9zaXplKQorCQlzaXplID0gb2xkX3NpemU7CisJc2l6ZSA9IEFMSUdOKHNpemUgKyBzaXplMSwgYWxpZ24pOworCXJldHVybiBzaXplOworfQorCisvKioKKyAqIHBidXNfc2l6ZV9pbygpIC0gc2l6ZSB0aGUgaW8gd2luZG93IG9mIGEgZ2l2ZW4gYnVzCisgKgorICogQGJ1cyA6IHRoZSBidXMKKyAqIEBtaW5fc2l6ZSA6IHRoZSBtaW5pbXVtIGlvIHdpbmRvdyB0aGF0IG11c3QgdG8gYmUgYWxsb2NhdGVkCisgKiBAYWRkX3NpemUgOiBhZGRpdGlvbmFsIG9wdGlvbmFsIGlvIHdpbmRvdworICogQGFkZF9oZWFkIDogdHJhY2sgdGhlIGFkZGl0aW9uYWwgaW8gd2luZG93IG9uIHRoaXMgbGlzdAorICoKKyAqIFNpemluZyB0aGUgSU8gd2luZG93cyBvZiB0aGUgUENJLVBDSSBicmlkZ2UgaXMgdHJpdmlhbCwKKyAqIHNpbmNlIHRoZXNlIHdpbmRvd3MgaGF2ZSA0SyBncmFudWxhcml0eSBhbmQgdGhlIElPIHJhbmdlcworICogb2Ygbm9uLWJyaWRnZSBQQ0kgZGV2aWNlcyBhcmUgbGltaXRlZCB0byAyNTYgYnl0ZXMuCisgKiBXZSBtdXN0IGJlIGNhcmVmdWwgd2l0aCB0aGUgSVNBIGFsaWFzaW5nIHRob3VnaC4KKyAqLworc3RhdGljIHZvaWQgcGJ1c19zaXplX2lvKHN0cnVjdCBwY2lfYnVzICpidXMsIHJlc291cmNlX3NpemVfdCBtaW5fc2l6ZSwKKwkJcmVzb3VyY2Vfc2l6ZV90IGFkZF9zaXplLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICphZGRfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqYl9yZXMgPSBmaW5kX2ZyZWVfYnVzX3Jlc291cmNlKGJ1cywgSU9SRVNPVVJDRV9JTyk7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gMCwgc2l6ZTEgPSAwLCBvbGRfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAwLCBzaXplMCA9IDAsIHNpemUxID0gMDsKIAogCWlmICghYl9yZXMpCiAgCQlyZXR1cm47CkBAIC00MzUsMjAgKzU3NywxMiBAQAogCQkJCXNpemUxICs9IHJfc2l6ZTsKIAkJfQogCX0KLQlpZiAoc2l6ZSA8IG1pbl9zaXplKQotCQlzaXplID0gbWluX3NpemU7Ci0Jb2xkX3NpemUgPSByZXNvdXJjZV9zaXplKGJfcmVzKTsKLQlpZiAob2xkX3NpemUgPT0gMSkKLQkJb2xkX3NpemUgPSAwOwotLyogVG8gYmUgZml4ZWQgaW4gMi41OiB3ZSBzaG91bGQgaGF2ZSBzb3J0IG9mIEhBVkVfSVNBCi0gICBmbGFnIGluIHRoZSBzdHJ1Y3QgcGNpX2J1cy4gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX0VJU0EpCi0Jc2l6ZSA9IChzaXplICYgMHhmZikgKyAoKHNpemUgJiB+MHhmZlVMKSA8PCAyKTsKLSNlbmRpZgotCXNpemUgPSBBTElHTihzaXplICsgc2l6ZTEsIDQwOTYpOwotCWlmIChzaXplIDwgb2xkX3NpemUpCi0JCXNpemUgPSBvbGRfc2l6ZTsKLQlpZiAoIXNpemUpIHsKKwlzaXplMCA9IGNhbGN1bGF0ZV9pb3NpemUoc2l6ZSwgbWluX3NpemUsIHNpemUxLAorCQkJcmVzb3VyY2Vfc2l6ZShiX3JlcyksIDQwOTYpOworCXNpemUxID0gIWFkZF9zaXplPyBzaXplMDoKKwkJY2FsY3VsYXRlX2lvc2l6ZShzaXplLCBtaW5fc2l6ZSthZGRfc2l6ZSwgc2l6ZTEsCisJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgNDA5Nik7CisJaWYgKCFzaXplMCAmJiAhc2l6ZTEpIHsKIAkJaWYgKGJfcmVzLT5zdGFydCB8fCBiX3Jlcy0+ZW5kKQogCQkJZGV2X2luZm8oJmJ1cy0+c2VsZi0+ZGV2LCAiZGlzYWJsaW5nIGJyaWRnZSB3aW5kb3cgIgogCQkJCSAiJXBSIHRvIFtidXMgJTAyeC0lMDJ4XSAodW51c2VkKVxuIiwgYl9yZXMsCkBAIC00NTgsMTcgKzU5MiwzMCBAQAogCX0KIAkvKiBBbGlnbm1lbnQgb2YgdGhlIElPIHdpbmRvdyBpcyBhbHdheXMgNEsgKi8KIAliX3Jlcy0+c3RhcnQgPSA0MDk2OwotCWJfcmVzLT5lbmQgPSBiX3Jlcy0+c3RhcnQgKyBzaXplIC0gMTsKKwliX3Jlcy0+ZW5kID0gYl9yZXMtPnN0YXJ0ICsgc2l6ZTAgLSAxOwogCWJfcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX1NUQVJUQUxJR047CisJaWYgKHNpemUxID4gc2l6ZTAgJiYgYWRkX2hlYWQpCisJCWFkZF90b19saXN0KGFkZF9oZWFkLCBidXMtPnNlbGYsIGJfcmVzLCBzaXplMS1zaXplMCk7CiB9CiAKLS8qIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgYnVzIGFuZCBtaW5pbWFsIGFsaWdubWVudCB3aGljaAotICAgZ3VhcmFudGVlcyB0aGF0IGFsbCBjaGlsZCByZXNvdXJjZXMgZml0IGluIHRoaXMgc2l6ZS4gKi8KKy8qKgorICogcGJ1c19zaXplX21lbSgpIC0gc2l6ZSB0aGUgbWVtb3J5IHdpbmRvdyBvZiBhIGdpdmVuIGJ1cworICoKKyAqIEBidXMgOiB0aGUgYnVzCisgKiBAbWluX3NpemUgOiB0aGUgbWluaW11bSBtZW1vcnkgd2luZG93IHRoYXQgbXVzdCB0byBiZSBhbGxvY2F0ZWQKKyAqIEBhZGRfc2l6ZSA6IGFkZGl0aW9uYWwgb3B0aW9uYWwgbWVtb3J5IHdpbmRvdworICogQGFkZF9oZWFkIDogdHJhY2sgdGhlIGFkZGl0aW9uYWwgbWVtb3J5IHdpbmRvdyBvbiB0aGlzIGxpc3QKKyAqCisgKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGJ1cyBhbmQgbWluaW1hbCBhbGlnbm1lbnQgd2hpY2gKKyAqIGd1YXJhbnRlZXMgdGhhdCBhbGwgY2hpbGQgcmVzb3VyY2VzIGZpdCBpbiB0aGlzIHNpemUuCisgKi8KIHN0YXRpYyBpbnQgcGJ1c19zaXplX21lbShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBsb25nIG1hc2ssCi0JCQkgdW5zaWduZWQgbG9uZyB0eXBlLCByZXNvdXJjZV9zaXplX3QgbWluX3NpemUpCisJCQkgdW5zaWduZWQgbG9uZyB0eXBlLCByZXNvdXJjZV9zaXplX3QgbWluX3NpemUsCisJCQlyZXNvdXJjZV9zaXplX3QgYWRkX3NpemUsCisJCQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICphZGRfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplLCBvbGRfc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgbWluX2FsaWduLCBhbGlnbiwgc2l6ZSwgc2l6ZTAsIHNpemUxOwogCXJlc291cmNlX3NpemVfdCBhbGlnbnNbMTJdOwkvKiBBbGlnbm1lbnRzIGZyb20gMU1iIHRvIDJHYiAqLwogCWludCBvcmRlciwgbWF4X29yZGVyOwogCXN0cnVjdCByZXNvdXJjZSAqYl9yZXMgPSBmaW5kX2ZyZWVfYnVzX3Jlc291cmNlKGJ1cywgdHlwZSk7CkBAIC01MTYsMTQgKzY2Myw2IEBACiAJCQltZW02NF9tYXNrICY9IHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQ7CiAJCX0KIAl9Ci0JaWYgKHNpemUgPCBtaW5fc2l6ZSkKLQkJc2l6ZSA9IG1pbl9zaXplOwotCW9sZF9zaXplID0gcmVzb3VyY2Vfc2l6ZShiX3Jlcyk7Ci0JaWYgKG9sZF9zaXplID09IDEpCi0JCW9sZF9zaXplID0gMDsKLQlpZiAoc2l6ZSA8IG9sZF9zaXplKQotCQlzaXplID0gb2xkX3NpemU7Ci0KIAlhbGlnbiA9IDA7CiAJbWluX2FsaWduID0gMDsKIAlmb3IgKG9yZGVyID0gMDsgb3JkZXIgPD0gbWF4X29yZGVyOyBvcmRlcisrKSB7CkBAIC01MzcsOCArNjc2LDExIEBACiAJCQltaW5fYWxpZ24gPSBhbGlnbjEgPj4gMTsKIAkJYWxpZ24gKz0gYWxpZ25zW29yZGVyXTsKIAl9Ci0Jc2l6ZSA9IEFMSUdOKHNpemUsIG1pbl9hbGlnbik7Ci0JaWYgKCFzaXplKSB7CisJc2l6ZTAgPSBjYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSwgMCwgcmVzb3VyY2Vfc2l6ZShiX3JlcyksIGFsaWduKTsKKwlzaXplMSA9ICFhZGRfc2l6ZSA/IHNpemUgOgorCQljYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSthZGRfc2l6ZSwgMCwKKwkJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgYWxpZ24pOworCWlmICghc2l6ZTAgJiYgIXNpemUxKSB7CiAJCWlmIChiX3Jlcy0+c3RhcnQgfHwgYl9yZXMtPmVuZCkKIAkJCWRldl9pbmZvKCZidXMtPnNlbGYtPmRldiwgImRpc2FibGluZyBicmlkZ2Ugd2luZG93ICIKIAkJCQkgIiVwUiB0byBbYnVzICUwMngtJTAyeF0gKHVudXNlZClcbiIsIGJfcmVzLApAQCAtNTQ3LDkgKzY4OSwxMCBAQAogCQlyZXR1cm4gMTsKIAl9CiAJYl9yZXMtPnN0YXJ0ID0gbWluX2FsaWduOwotCWJfcmVzLT5lbmQgPSBzaXplICsgbWluX2FsaWduIC0gMTsKLQliX3Jlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9TVEFSVEFMSUdOOwotCWJfcmVzLT5mbGFncyB8PSBtZW02NF9tYXNrOworCWJfcmVzLT5lbmQgPSBzaXplMCArIG1pbl9hbGlnbiAtIDE7CisJYl9yZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfU1RBUlRBTElHTiB8IG1lbTY0X21hc2s7CisJaWYgKHNpemUxID4gc2l6ZTAgJiYgYWRkX2hlYWQpCisJCWFkZF90b19saXN0KGFkZF9oZWFkLCBidXMtPnNlbGYsIGJfcmVzLCBzaXplMS1zaXplMCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTYwMiwxMSArNzQ1LDEyIEBACiAJfQogfQogCi12b2lkIF9fcmVmIHBjaV9idXNfc2l6ZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpCit2b2lkIF9fcmVmIF9fcGNpX2J1c19zaXplX2JyaWRnZXMoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmFkZF9oZWFkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCBwcmVmbWFzazsKLQlyZXNvdXJjZV9zaXplX3QgbWluX21lbV9zaXplID0gMCwgbWluX2lvX3NpemUgPSAwOworCXJlc291cmNlX3NpemVfdCBhZGRpdGlvbmFsX21lbV9zaXplID0gMCwgYWRkaXRpb25hbF9pb19zaXplID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQlzdHJ1Y3QgcGNpX2J1cyAqYiA9IGRldi0+c3Vib3JkaW5hdGU7CkBAIC02MjAsNyArNzY0LDcgQEAKIAogCQljYXNlIFBDSV9DTEFTU19CUklER0VfUENJOgogCQlkZWZhdWx0OgotCQkJcGNpX2J1c19zaXplX2JyaWRnZXMoYik7CisJCQlfX3BjaV9idXNfc2l6ZV9icmlkZ2VzKGIsIGFkZF9oZWFkKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNjM3LDExICs3ODEsMTQgQEAKIAljYXNlIFBDSV9DTEFTU19CUklER0VfUENJOgogCQlwY2lfYnJpZGdlX2NoZWNrX3JhbmdlcyhidXMpOwogCQlpZiAoYnVzLT5zZWxmLT5pc19ob3RwbHVnX2JyaWRnZSkgewotCQkJbWluX2lvX3NpemUgID0gcGNpX2hvdHBsdWdfaW9fc2l6ZTsKLQkJCW1pbl9tZW1fc2l6ZSA9IHBjaV9ob3RwbHVnX21lbV9zaXplOworCQkJYWRkaXRpb25hbF9pb19zaXplICA9IHBjaV9ob3RwbHVnX2lvX3NpemU7CisJCQlhZGRpdGlvbmFsX21lbV9zaXplID0gcGNpX2hvdHBsdWdfbWVtX3NpemU7CiAJCX0KKwkJLyoKKwkJICogRm9sbG93IHRocnUKKwkJICovCiAJZGVmYXVsdDoKLQkJcGJ1c19zaXplX2lvKGJ1cywgbWluX2lvX3NpemUpOworCQlwYnVzX3NpemVfaW8oYnVzLCAwLCBhZGRpdGlvbmFsX2lvX3NpemUsIGFkZF9oZWFkKTsKIAkJLyogSWYgdGhlIGJyaWRnZSBzdXBwb3J0cyBwcmVmZXRjaGFibGUgcmFuZ2UsIHNpemUgaXQKIAkJICAgc2VwYXJhdGVseS4gSWYgaXQgZG9lc24ndCwgb3IgaXRzIHByZWZldGNoYWJsZSB3aW5kb3cKIAkJICAgaGFzIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgYnkgYXJjaCBjb2RlLCB0cnkKQEAgLTY0OSwzMCArNzk2LDM2IEBACiAJCSAgIHJlc291cmNlcy4gKi8KIAkJbWFzayA9IElPUkVTT1VSQ0VfTUVNOwogCQlwcmVmbWFzayA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKLQkJaWYgKHBidXNfc2l6ZV9tZW0oYnVzLCBwcmVmbWFzaywgcHJlZm1hc2ssIG1pbl9tZW1fc2l6ZSkpCisJCWlmIChwYnVzX3NpemVfbWVtKGJ1cywgcHJlZm1hc2ssIHByZWZtYXNrLCAwLCBhZGRpdGlvbmFsX21lbV9zaXplLCBhZGRfaGVhZCkpCiAJCQltYXNrID0gcHJlZm1hc2s7IC8qIFN1Y2Nlc3MsIHNpemUgbm9uLXByZWZldGNoIG9ubHkuICovCiAJCWVsc2UKLQkJCW1pbl9tZW1fc2l6ZSArPSBtaW5fbWVtX3NpemU7Ci0JCXBidXNfc2l6ZV9tZW0oYnVzLCBtYXNrLCBJT1JFU09VUkNFX01FTSwgbWluX21lbV9zaXplKTsKKwkJCWFkZGl0aW9uYWxfbWVtX3NpemUgKz0gYWRkaXRpb25hbF9tZW1fc2l6ZTsKKwkJcGJ1c19zaXplX21lbShidXMsIG1hc2ssIElPUkVTT1VSQ0VfTUVNLCAwLCBhZGRpdGlvbmFsX21lbV9zaXplLCBhZGRfaGVhZCk7CiAJCWJyZWFrOwogCX0KIH0KKwordm9pZCBfX3JlZiBwY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCV9fcGNpX2J1c19zaXplX2JyaWRnZXMoYnVzLCBOVUxMKTsKK30KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19zaXplX2JyaWRnZXMpOwogCiBzdGF0aWMgdm9pZCBfX3JlZiBfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqYWRkX2hlYWQsCiAJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCiB7CiAJc3RydWN0IHBjaV9idXMgKmI7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAotCXBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoYnVzLCBmYWlsX2hlYWQpOworCXBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoYnVzLCBhZGRfaGVhZCwgZmFpbF9oZWFkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQliID0gZGV2LT5zdWJvcmRpbmF0ZTsKIAkJaWYgKCFiKQogCQkJY29udGludWU7CiAKLQkJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYiwgZmFpbF9oZWFkKTsKKwkJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYiwgYWRkX2hlYWQsIGZhaWxfaGVhZCk7CiAKIAkJc3dpdGNoIChkZXYtPmNsYXNzID4+IDgpIHsKIAkJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSToKQEAgLTY5NCw3ICs4NDcsNyBAQAogCiB2b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewotCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cywgTlVMTCk7CisJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzLCBOVUxMLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKTsKIApAQCAtNzA5LDcgKzg2Miw3IEBACiAJaWYgKCFiKQogCQlyZXR1cm47CiAKLQlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhiLCBmYWlsX2hlYWQpOworCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGIsIE5VTEwsIGZhaWxfaGVhZCk7CiAKIAlzd2l0Y2ggKGJyaWRnZS0+Y2xhc3MgPj4gOCkgewogCWNhc2UgUENJX0NMQVNTX0JSSURHRV9QQ0k6CkBAIC04NDIsMTcgKzk5NSwyMSBAQAogcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcyh2b2lkKQogewogCXN0cnVjdCBwY2lfYnVzICpidXM7Ci0KKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94IGFkZF9saXN0OyAvKiBsaXN0IG9mIHJlc291cmNlcyB0aGF0CisJCQkJCXdhbnQgYWRkaXRpb25hbCByZXNvdXJjZXMgKi8KKwlhZGRfbGlzdC5uZXh0ID0gTlVMTDsKIAkvKiBEZXB0aCBmaXJzdCwgY2FsY3VsYXRlIHNpemVzIGFuZCBhbGlnbm1lbnRzIG9mIGFsbAogCSAgIHN1Ym9yZGluYXRlIGJ1c2VzLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKLQkJcGNpX2J1c19zaXplX2JyaWRnZXMoYnVzKTsKKwkJX19wY2lfYnVzX3NpemVfYnJpZGdlcyhidXMsICZhZGRfbGlzdCk7CiAJfQorCiAJLyogRGVwdGggbGFzdCwgYWxsb2NhdGUgcmVzb3VyY2VzIGFuZCB1cGRhdGUgdGhlIGhhcmR3YXJlLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKLQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cywgJmFkZF9saXN0LCBOVUxMKTsKIAkJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CiAJfQorCUJVR19PTihhZGRfbGlzdC5uZXh0KTsKIAogCS8qIGR1bXAgdGhlIHJlc291cmNlIG9uIGJ1c2VzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZwY2lfcm9vdF9idXNlcywgbm9kZSkgewpAQCAtODgyLDcgKzEwMzksNyBAQAogCiAJaWYgKHRyaWVkX3RpbWVzID49IDIpIHsKIAkJLyogc3RpbGwgZmFpbCwgZG9uJ3QgbmVlZCB0byB0cnkgbW9yZSAqLwotCQlmcmVlX2ZhaWxlZF9saXN0KCZoZWFkKTsKKwkJZnJlZV9saXN0KHJlc291cmNlX2xpc3RfeCwgJmhlYWQpOwogCQlnb3RvIGVuYWJsZV9hbGw7CiAJfQogCkBAIC05MTMsNyArMTA3MCw3IEBACiAKIAkJbGlzdCA9IGxpc3QtPm5leHQ7CiAJfQotCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCWZyZWVfbGlzdChyZXNvdXJjZV9saXN0X3gsICZoZWFkKTsKIAogCWdvdG8gYWdhaW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCmluZGV4IGE1OWFmNWIuLjIyMmRmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwpAQCAtMTM4LDYgKzEzOCwyNCBAQAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFdNSSBleHRlbnNpb25zICh3aXJlbGVzcyBhbmQgYmx1ZXRvb3RoIHBvd2VyCiAJICBjb250cm9sKSBvZiB0aGUgSFAgQ29tcGFxIFRDMTEwMCB0YWJsZXQuCiAKK2NvbmZpZyBIUF9BQ0NFTAorCXRyaXN0YXRlICJIUCBsYXB0b3AgYWNjZWxlcm9tZXRlciIKKwlkZXBlbmRzIG9uIElOUFVUICYmIEFDUEkKKwlzZWxlY3QgU0VOU09SU19MSVMzTFYwMkQKKwlzZWxlY3QgTkVXX0xFRFMKKwlzZWxlY3QgTEVEU19DTEFTUworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSAiTW9iaWxlIERhdGEgUHJvdGVjdGlvbiBTeXN0ZW0gM0QiCisJICBvciAiM0QgRHJpdmVHdWFyZCIgZmVhdHVyZSBvZiBIUCBsYXB0b3BzLiBPbiBzdWNoIHN5c3RlbXMgdGhlIGRyaXZlcgorCSAgc2hvdWxkIGxvYWQgYXV0b21hdGljYWxseSAodmlhIEFDUEkgYWxpYXMpLgorCisJICBTdXBwb3J0IGZvciBhIGxlZCBpbmRpY2F0aW5nIGRpc2sgcHJvdGVjdGlvbiB3aWxsIGJlIHByb3ZpZGVkIGFzCisJICBocDo6aGRkcHJvdGVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZlYXR1cmUsIHJlZmVyIHRvCisJICBEb2N1bWVudGF0aW9uL2h3bW9uL2xpczNsdjAyZC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgaHBfYWNjZWwuCisKIGNvbmZpZyBIUF9XTUkKIAl0cmlzdGF0ZSAiSFAgV01JIGV4dHJhcyIKIAlkZXBlbmRzIG9uIEFDUElfV01JCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZSBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlCmluZGV4IDRlYzRmZjguLjI5OWFlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBACiBvYmotJChDT05GSUdfREVMTF9XTUkpCQkrPSBkZWxsLXdtaS5vCiBvYmotJChDT05GSUdfQUNFUl9XTUkpCQkrPSBhY2VyLXdtaS5vCiBvYmotJChDT05GSUdfQUNFUkhERikJCSs9IGFjZXJoZGYubworb2JqLSQoQ09ORklHX0hQX0FDQ0VMKQkJKz0gaHBfYWNjZWwubwogb2JqLSQoQ09ORklHX0hQX1dNSSkJCSs9IGhwLXdtaS5vCiBvYmotJChDT05GSUdfVEMxMTAwX1dNSSkJKz0gdGMxMTAwLXdtaS5vCiBvYmotJChDT05GSUdfU09OWV9MQVBUT1ApCSs9IHNvbnktbGFwdG9wLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IDM4YjM0YTcuLmM5Nzg0NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L3NwYXJzZS1rZXltYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKQEAgLTEwMzIsNiArMTAzMSw3IEBACiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYXhfYnJpZ2h0bmVzczsKIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImFjZXItd21pIiwgZGV2LCBOVUxMLCAmYWNlcl9ibF9vcHMsCiAJCQkJICAgICAgICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYwppbmRleCBmM2FhNmE3Li41YTZmN2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKQEAgLTY2Nyw2ICs2NjcsNyBAQAogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gMTU7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAogCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihBU1VTX0xBUFRPUF9GSUxFLAogCQkJCSAgICAgICAmYXN1cy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYsIGFzdXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCmluZGV4IGZlNDk1OTMuLmY1MDM2MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCkBAIC0xNTA3LDYgKzE1MDcsNyBAQAogCX0KIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gMTU7CiAJYXN1c19iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYXN1cyIsIE5VTEwsIE5VTEwsCiAJCQkJCQkJICAmYXN1c19iYWNrbGlnaHRfZGF0YSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwppbmRleCA5MTExMzU0Li45NGY5M2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCkBAIC01NjQsNiArNTY0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDc7CiAJaXBtbC0+YmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJjbXBjX2JsIiwgJmFjcGktPmRldiwKIAkJCQkJICAgICBhY3BpLT5oYW5kbGUsICZjbXBjX2JsX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwppbmRleCAwMzQ1NzJiLi5lYjk1ODc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCkBAIC05NzAsNiArOTcwLDcgQEAKIAlpZiAoIWFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKSkgewogCQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CiAJCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwkJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAkJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBCQUNLTElHSFRfTEVWRUxfTUFYOwogCQljb21wYWxibF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKERSSVZFUl9OQU1FLAogCQkJCQkJCSAgICBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKaW5kZXggYWQyNGVmMy4uZGUzMDFhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtNjcxLDYgKzY3MSw3IEBACiAJaWYgKG1heF9pbnRlbnNpdHkpIHsKIAkJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCQltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07CiAJCXByb3BzLm1heF9icmlnaHRuZXNzID0gbWF4X2ludGVuc2l0eTsKIAkJZGVsbF9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiZGVsbF9iYWNrbGlnaHQiLAogCQkJCQkJCQkgICZwbGF0Zm9ybV9kZXZpY2UtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKaW5kZXggNDlkOWFkNy4uNjYwNWJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKQEAgLTExNDcsNiArMTE0Nyw3IEBACiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSAxNTsKIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoRUVFUENfTEFQVE9QX0ZJTEUsCiAJCQkJICAgICAgICZlZWVwYy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYsIGVlZXBjLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKaW5kZXggOTVlM2IwOS4uNDkzMDU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCkBAIC0xMTI4LDYgKzExMjgsNyBAQAogCiAJCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKIAkJbWF4X2JyaWdodG5lc3MgPSBmdWppdHN1LT5tYXhfYnJpZ2h0bmVzczsKKwkJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAkJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYXhfYnJpZ2h0bmVzcyAtIDE7CiAJCWZ1aml0c3UtPmJsX2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImZ1aml0c3UtbGFwdG9wIiwKIAkJCQkJCQkgICAgICAgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwX2FjY2VsLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCnJlbmFtZSB0byBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocF9hY2NlbC5jCmluZGV4IDNkMjFmYTIuLjFiNTJkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocF9hY2NlbC5jCkBAIC0zNSwxMSArMzUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlICJsaXMzbHYwMmQuaCIKKyNpbmNsdWRlICIuLi8uLi9taXNjL2xpczNsdjAyZC9saXMzbHYwMmQuaCIKIAotI2RlZmluZSBEUklWRVJfTkFNRSAgICAgImxpczNsdjAyZCIKKyNkZWZpbmUgRFJJVkVSX05BTUUgICAgICJocF9hY2NlbCIKICNkZWZpbmUgQUNQSV9NRFBTX0NMQVNTICJhY2NlbGVyb21ldGVyIgogCiAvKiBEZWxheWVkIExFRHMgaW5mcmFzdHJ1Y3R1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MDIsNCArNDAyLDMgQEAKIAogbW9kdWxlX2luaXQobGlzM2x2MDJkX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGxpczNsdjAyZF9leGl0X21vZHVsZSk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS1sYXB0b3AuYwppbmRleCA3ZTliYjZkLi4xNDJkMzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLWxhcHRvcC5jCkBAIC04MDQsNiArODA0LDcgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CiAJCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwkJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAkJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBNU0lfTENEX0xFVkVMX01BWCAtIDE7CiAJCW1zaWJsX2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm1zaS1sYXB0b3AtYmwiLCBOVUxMLAogCQkJCQkJCSBOVUxMLCAmbXNpYmxfb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCmluZGV4IDM1Mjc4YWQuLmQ1NDE5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKQEAgLTI1NCw2ICsyNTQsNyBAQAogCWlmICghYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpKSB7CiAJCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKIAkJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCQlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOwogCQlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEFSUkFZX1NJWkUoYmFja2xpZ2h0X21hcCkgLSAxOwogCQliYWNrbGlnaHQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKERSVl9OQU1FLCBOVUxMLCBOVUxMLAogCQkJCQkJICAgICAgJm1zaV9iYWNrbGlnaHRfb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jCmluZGV4IGNjMWUwYmEuLjA1YmUzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMKQEAgLTYwMiw2ICs2MDIsNyBAQAogCX0KIAkvKiBpbml0aWFsaXplIGJhY2tsaWdodCAqLwogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gcGNjLT5zaW5mW1NJTkZfQUNfTUFYX0JSSUdIVF07CiAJcGNjLT5iYWNrbGlnaHQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJwYW5hc29uaWMiLCBOVUxMLCBwY2MsCiAJCQkJCQkgICAmcGNjX2JhY2tsaWdodF9vcHMsICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwppbmRleCA1ZTgzMzcwLi4xM2Q4ZDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTEzMDUsOCArMTMwNSw5IEBACiAJCSAgICAgICAiY29udHJvbGxlZCBieSBBQ1BJIHZpZGVvIGRyaXZlclxuIik7CiAJfSBlbHNlIGlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJHQlJUIiwKIAkJCQkJCSZoYW5kbGUpKSkgewotCQkJCQkJCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKwkJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCQltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07CiAJCXByb3BzLm1heF9icmlnaHRuZXNzID0gU09OWV9NQVhfQlJJR0hUTkVTUyAtIDE7CiAJCXNvbnlfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInNvbnkiLCBOVUxMLAogCQkJCQkJCQkgIE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZWI5OTIyMy4uOTQ3YmRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtNjMwNyw2ICs2MzA3LDcgQEAKIAkJcmV0dXJuIDE7CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IGJyaWdodF9tYXhsdmw7CiAJcHJvcHMuYnJpZ2h0bmVzcyA9IGIgJiBUUF9FQ19CQUNLTElHSFRfTFZMTVNLOwogCWlibV9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihUUEFDUElfQkFDS0xJR0hUX0RFVl9OQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCAyMDljY2VkLi42M2Y0MmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtMTAxOCw2ICsxMDE4LDcgQEAKIAkJY3JlYXRlX3Rvc2hpYmFfcHJvY19lbnRyaWVzKCk7CiAJfQogCisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEhDSV9MQ0RfQlJJR0hUTkVTU19MRVZFTFMgLSAxOwogCXRvc2hpYmFfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInRvc2hpYmEiLAogCQkJCQkJCSAgICAgJnRvc2hpYmFfYWNwaS5wX2Rldi0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvYmFzZS5oIGIvZHJpdmVycy9wbnAvYmFzZS5oCmluZGV4IDE5YmM3MzYuLmZhNGUwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2Jhc2UuaAorKysgYi9kcml2ZXJzL3BucC9iYXNlLmgKQEAgLTE0Miw3ICsxNDIsOSBAQAogaW50IHBucF9jaGVja19wb3J0KHN0cnVjdCBwbnBfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIGludCBwbnBfY2hlY2tfbWVtKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIGludCBwbnBfY2hlY2tfaXJxKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKKyNpZmRlZiBDT05GSUdfSVNBX0RNQV9BUEkKIGludCBwbnBfY2hlY2tfZG1hKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKKyNlbmRpZgogCiBjaGFyICpwbnBfcmVzb3VyY2VfdHlwZV9uYW1lKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIHZvaWQgZGJnX3BucF9zaG93X3Jlc291cmNlcyhzdHJ1Y3QgcG5wX2RldiAqZGV2LCBjaGFyICpkZXNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL21hbmFnZXIuYyBiL2RyaXZlcnMvcG5wL21hbmFnZXIuYwppbmRleCAwYTE1NjY0Li5lZDljZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9wbnAvbWFuYWdlci5jCkBAIC0xNzEsNiArMTcxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19JU0FfRE1BX0FQSQogc3RhdGljIGludCBwbnBfYXNzaWduX2RtYShzdHJ1Y3QgcG5wX2RldiAqZGV2LCBzdHJ1Y3QgcG5wX2RtYSAqcnVsZSwgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbG9jYWxfcmVzOwpAQCAtMjEwLDYgKzIxMSw3IEBACiAJcG5wX2FkZF9kbWFfcmVzb3VyY2UoZGV2LCByZXMtPnN0YXJ0LCByZXMtPmZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfSVNBX0RNQV9BUEkgKi8KIAogdm9pZCBwbnBfaW5pdF9yZXNvdXJjZXMoc3RydWN0IHBucF9kZXYgKmRldikKIHsKQEAgLTIzNCw3ICsyMzYsOCBAQAogc3RhdGljIGludCBwbnBfYXNzaWduX3Jlc291cmNlcyhzdHJ1Y3QgcG5wX2RldiAqZGV2LCBpbnQgc2V0KQogewogCXN0cnVjdCBwbnBfb3B0aW9uICpvcHRpb247Ci0JaW50IG5wb3J0ID0gMCwgbm1lbSA9IDAsIG5pcnEgPSAwLCBuZG1hID0gMDsKKwlpbnQgbnBvcnQgPSAwLCBubWVtID0gMCwgbmlycSA9IDA7CisJaW50IG5kbWEgX19tYXliZV91bnVzZWQgPSAwOwogCWludCByZXQgPSAwOwogCiAJcG5wX2RiZygmZGV2LT5kZXYsICJwbnBfYXNzaWduX3Jlc291cmNlcywgdHJ5IGRlcGVuZGVudCBzZXQgJWRcbiIsIHNldCk7CkBAIC0yNTYsOSArMjU5LDExIEBACiAJCWNhc2UgSU9SRVNPVVJDRV9JUlE6CiAJCQlyZXQgPSBwbnBfYXNzaWduX2lycShkZXYsICZvcHRpb24tPnUuaXJxLCBuaXJxKyspOwogCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0lTQV9ETUFfQVBJCiAJCWNhc2UgSU9SRVNPVVJDRV9ETUE6CiAJCQlyZXQgPSBwbnBfYXNzaWduX2RtYShkZXYsICZvcHRpb24tPnUuZG1hLCBuZG1hKyspOwogCQkJYnJlYWs7CisjZW5kaWYKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3Jlc291cmNlLmMgYi9kcml2ZXJzL3BucC9yZXNvdXJjZS5jCmluZGV4IGE5MjVlNmIuLmIwZWNhY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wbnAvcmVzb3VyY2UuYwpAQCAtNDA5LDkgKzQwOSw5IEBACiAJcmV0dXJuIDE7CiB9CiAKKyNpZmRlZiBDT05GSUdfSVNBX0RNQV9BUEkKIGludCBwbnBfY2hlY2tfZG1hKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewotI2lmbmRlZiBDT05GSUdfSUE2NAogCWludCBpOwogCXN0cnVjdCBwbnBfZGV2ICp0ZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqdHJlczsKQEAgLTQ2NiwxMSArNDY2LDggQEAKIAl9CiAKIAlyZXR1cm4gMTsKLSNlbHNlCi0JLyogSUE2NCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBETUEgKi8KLQlyZXR1cm4gMDsKLSNlbmRpZgogfQorI2VuZGlmIC8qIENPTkZJR19JU0FfRE1BX0FQSSAqLwogCiB1bnNpZ25lZCBsb25nIHBucF9yZXNvdXJjZV90eXBlKHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvY2xpZW50cy9NYWtlZmlsZSBiL2RyaXZlcnMvcHBzL2NsaWVudHMvTWFrZWZpbGUKaW5kZXggNDI1MTdkYS4uNGZlYjdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL01ha2VmaWxlCkBAIC02LDYgKzYsNCBAQAogb2JqLSQoQ09ORklHX1BQU19DTElFTlRfTERJU0MpCSs9IHBwcy1sZGlzYy5vCiBvYmotJChDT05GSUdfUFBTX0NMSUVOVF9QQVJQT1JUKSArPSBwcHNfcGFycG9ydC5vCiAKLWlmZXEgKCQoQ09ORklHX1BQU19ERUJVRykseSkKLUVYVFJBX0NGTEFHUyArPSAtRERFQlVHCi1lbmRpZgorY2NmbGFncy0kKENPTkZJR19QUFNfREVCVUcpIDo9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvcHBzX2dlbl9wYXJwb3J0LmMgYi9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jCmluZGV4IGI5M2FmM2UuLmRjZDM5ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvcHBzX2dlbl9wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9wcHNfZ2VuX3BhcnBvcnQuYwpAQCAtMjE2LDExICsyMTYsNiBAQAogCiAJaHJ0aW1lcl9pbml0KCZkZXZpY2UudGltZXIsIENMT0NLX1JFQUxUSU1FLCBIUlRJTUVSX01PREVfQUJTKTsKIAlkZXZpY2UudGltZXIuZnVuY3Rpb24gPSBocnRpbWVyX2V2ZW50OwotI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUCi0JLyogaHJ0aW1lciBpbnRlcnJ1cHQgd2lsbCBydW4gaW4gdGhlIGludGVycnVwdCBjb250ZXh0IHdpdGggdGhpcyAqLwotCWRldmljZS50aW1lci5pcnFzYWZlID0gMTsKLSNlbmRpZgotCiAJaHJ0aW1lcl9zdGFydCgmZGV2aWNlLnRpbWVyLCBuZXh0X2ludHJfdGltZSgmZGV2aWNlKSwgSFJUSU1FUl9NT0RFX0FCUyk7CiAKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL3JhcGlkaW8vTWFrZWZpbGUKaW5kZXggYjYxMzlmZS4uODliOGVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmFwaWRpby9NYWtlZmlsZQpAQCAtNSw2ICs1LDQgQEAKIAogb2JqLSQoQ09ORklHX1JBUElESU8pCQkrPSBzd2l0Y2hlcy8KIAotaWZlcSAoJChDT05GSUdfUkFQSURJT19ERUJVRykseSkKLUVYVFJBX0NGTEFHUyArPSAtRERFQlVHCi1lbmRpZgorc3ViZGlyLWNjZmxhZ3MtJChDT05GSUdfUkFQSURJT19ERUJVRykgOj0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zY2FuLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwppbmRleCBhNTAzOTFiLi4zYTU5ZDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwpAQCAtNTE3LDcgKzUxNyw3IEBACiAJcmV0dXJuIHJkZXY7CiAKIGNsZWFudXA6Ci0JaWYgKHJzd2l0Y2gtPnJvdXRlX3RhYmxlKQorCWlmIChyaW9faXNfc3dpdGNoKHJkZXYpKQogCQlrZnJlZShyc3dpdGNoLT5yb3V0ZV90YWJsZSk7CiAKIAlrZnJlZShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYwppbmRleCAxMjY5ZmJkLi40ZGJlMzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1zeXNmcy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmlvLmg+CiAjaW5jbHVkZSA8bGludXgvcmlvX2Rydi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAKICNpbmNsdWRlICJyaW8uaCIKIApAQCAtMzMsNiArMzQsOCBAQAogcmlvX2NvbmZpZ19hdHRyKGFzbV9kaWQsICIweCUwNHhcbiIpOwogcmlvX2NvbmZpZ19hdHRyKGFzbV92aWQsICIweCUwNHhcbiIpOwogcmlvX2NvbmZpZ19hdHRyKGFzbV9yZXYsICIweCUwNHhcbiIpOworcmlvX2NvbmZpZ19hdHRyKGRlc3RpZCwgIjB4JTA0eFxuIik7CityaW9fY29uZmlnX2F0dHIoaG9wY291bnQsICIweCUwMnhcbiIpOwogCiBzdGF0aWMgc3NpemVfdCByb3V0ZXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC01Miw2ICs1NSwzNSBAQAogCXJldHVybiAoc3RyIC0gYnVmKTsKIH0KIAorc3RhdGljIHNzaXplX3QgbHByZXZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHJpb19kZXYgKnJkZXYgPSB0b19yaW9fZGV2KGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwKKwkJCShyZGV2LT5wcmV2KSA/IHJpb19uYW1lKHJkZXYtPnByZXYpIDogInJvb3QiKTsKK30KKworc3RhdGljIHNzaXplX3QgbG5leHRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHJpb19kZXYgKnJkZXYgPSB0b19yaW9fZGV2KGRldik7CisJY2hhciAqc3RyID0gYnVmOworCWludCBpOworCisJaWYgKHJkZXYtPnBlZiAmIFJJT19QRUZfU1dJVENIKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSSU9fR0VUX1RPVEFMX1BPUlRTKHJkZXYtPnN3cGluZm8pOyBpKyspIHsKKwkJCWlmIChyZGV2LT5yc3dpdGNoLT5uZXh0ZGV2W2ldKQorCQkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVzXG4iLAorCQkJCQlyaW9fbmFtZShyZGV2LT5yc3dpdGNoLT5uZXh0ZGV2W2ldKSk7CisJCQllbHNlCisJCQkJc3RyICs9IHNwcmludGYoc3RyLCAibnVsbFxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RyIC0gYnVmOworfQorCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSByaW9fZGV2X2F0dHJzW10gPSB7CiAJX19BVFRSX1JPKGRpZCksCiAJX19BVFRSX1JPKHZpZCksCkBAIC01OSwxMCArOTEsMTQgQEAKIAlfX0FUVFJfUk8oYXNtX2RpZCksCiAJX19BVFRSX1JPKGFzbV92aWQpLAogCV9fQVRUUl9STyhhc21fcmV2KSwKKwlfX0FUVFJfUk8obHByZXYpLAorCV9fQVRUUl9STyhkZXN0aWQpLAogCV9fQVRUUl9OVUxMLAogfTsKIAogc3RhdGljIERFVklDRV9BVFRSKHJvdXRlcywgU19JUlVHTywgcm91dGVzX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxuZXh0LCBTX0lSVUdPLCBsbmV4dF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihob3Bjb3VudCwgU19JUlVHTywgaG9wY291bnRfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90CiByaW9fcmVhZF9jb25maWcoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLApAQCAtMjE4LDcgKzI1NCw5IEBACiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZSgmcmRldi0+ZGV2LCAmcmlvX2NvbmZpZ19hdHRyKTsKIAogCWlmICghZXJyICYmIChyZGV2LT5wZWYgJiBSSU9fUEVGX1NXSVRDSCkpIHsKLQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZyZGV2LT5kZXYsICZkZXZfYXR0cl9yb3V0ZXMpOworCQllcnIgfD0gZGV2aWNlX2NyZWF0ZV9maWxlKCZyZGV2LT5kZXYsICZkZXZfYXR0cl9yb3V0ZXMpOworCQllcnIgfD0gZGV2aWNlX2NyZWF0ZV9maWxlKCZyZGV2LT5kZXYsICZkZXZfYXR0cl9sbmV4dCk7CisJCWVyciB8PSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnJkZXYtPmRldiwgJmRldl9hdHRyX2hvcGNvdW50KTsKIAkJaWYgKCFlcnIgJiYgcmRldi0+cnN3aXRjaC0+c3dfc3lzZnMpCiAJCQllcnIgPSByZGV2LT5yc3dpdGNoLT5zd19zeXNmcyhyZGV2LCBSSU9fU1dfU1lTRlNfQ1JFQVRFKTsKIAl9CkBAIC0yNDEsNiArMjc5LDggQEAKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKCZyZGV2LT5kZXYsICZyaW9fY29uZmlnX2F0dHIpOwogCWlmIChyZGV2LT5wZWYgJiBSSU9fUEVGX1NXSVRDSCkgewogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnJkZXYtPmRldiwgJmRldl9hdHRyX3JvdXRlcyk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmcmRldi0+ZGV2LCAmZGV2X2F0dHJfbG5leHQpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnJkZXYtPmRldiwgJmRldl9hdHRyX2hvcGNvdW50KTsKIAkJaWYgKHJkZXYtPnJzd2l0Y2gtPnN3X3N5c2ZzKQogCQkJcmRldi0+cnN3aXRjaC0+c3dfc3lzZnMocmRldiwgUklPX1NXX1NZU0ZTX1JFTU9WRSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby5jIGIvZHJpdmVycy9yYXBpZGlvL3Jpby5jCmluZGV4IGNjMmEzYjcuLmMyOTcxOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8uYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJyaW8uaCIKIAogc3RhdGljIExJU1RfSEVBRChyaW9fbXBvcnRzKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5leHRfcG9ydGlkOwogCiAvKioKICAqIHJpb19sb2NhbF9nZXRfZGV2aWNlX2lkIC0gR2V0IHRoZSBiYXNlL2V4dGVuZGVkIGRldmljZSBpZCBmb3IgYSBwb3J0CkBAIC02OCw5ICs2OSwxMyBAQAogCQkJIHZvaWQgKCptaW5iKSAoc3RydWN0IHJpb19tcG9ydCAqIG1wb3J0LCB2b2lkICpkZXZfaWQsIGludCBtYm94LAogCQkJCSAgICAgICBpbnQgc2xvdCkpCiB7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmMgPSAtRU5PU1lTOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCi0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXBvcnQtPm9wcy0+b3Blbl9pbmJfbWJveCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOwogCiAJaWYgKHJlcykgewogCQlyaW9faW5pdF9tYm94X3JlcyhyZXMsIG1ib3gsIG1ib3gpOwpAQCAtODgsNyArOTMsNyBAQAogCQkvKiBIb29rIHRoZSBpbmJvdW5kIG1lc3NhZ2UgY2FsbGJhY2sgKi8KIAkJbXBvcnQtPmluYl9tc2dbbWJveF0ubWNiYWNrID0gbWluYjsKIAotCQlyYyA9IHJpb19vcGVuX2luYl9tYm94KG1wb3J0LCBkZXZfaWQsIG1ib3gsIGVudHJpZXMpOworCQlyYyA9IG1wb3J0LT5vcHMtPm9wZW5faW5iX21ib3gobXBvcnQsIGRldl9pZCwgbWJveCwgZW50cmllcyk7CiAJfSBlbHNlCiAJCXJjID0gLUVOT01FTTsKIApAQCAtMTA2LDEwICsxMTEsMTMgQEAKICAqLwogaW50IHJpb19yZWxlYXNlX2luYl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgbWJveCkKIHsKLQlyaW9fY2xvc2VfaW5iX21ib3gobXBvcnQsIG1ib3gpOworCWlmIChtcG9ydC0+b3BzLT5jbG9zZV9pbmJfbWJveCkgeworCQltcG9ydC0+b3BzLT5jbG9zZV9pbmJfbWJveChtcG9ydCwgbWJveCk7CiAKLQkvKiBSZWxlYXNlIHRoZSBtYWlsYm94IHJlc291cmNlICovCi0JcmV0dXJuIHJlbGVhc2VfcmVzb3VyY2UobXBvcnQtPmluYl9tc2dbbWJveF0ucmVzKTsKKwkJLyogUmVsZWFzZSB0aGUgbWFpbGJveCByZXNvdXJjZSAqLworCQlyZXR1cm4gcmVsZWFzZV9yZXNvdXJjZShtcG9ydC0+aW5iX21zZ1ttYm94XS5yZXMpOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT1NZUzsKIH0KIAogLyoqCkBAIC0xMjksOSArMTM3LDEzIEBACiAJCQkgIGludCBlbnRyaWVzLAogCQkJICB2b2lkICgqbW91dGIpIChzdHJ1Y3QgcmlvX21wb3J0ICogbXBvcnQsIHZvaWQgKmRldl9pZCwgaW50IG1ib3gsIGludCBzbG90KSkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYyA9IC1FTk9TWVM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOworCWlmIChtcG9ydC0+b3BzLT5vcGVuX291dGJfbWJveCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOwogCiAJaWYgKHJlcykgewogCQlyaW9faW5pdF9tYm94X3JlcyhyZXMsIG1ib3gsIG1ib3gpOwpAQCAtMTQ5LDcgKzE2MSw3IEBACiAJCS8qIEhvb2sgdGhlIGluYm91bmQgbWVzc2FnZSBjYWxsYmFjayAqLwogCQltcG9ydC0+b3V0Yl9tc2dbbWJveF0ubWNiYWNrID0gbW91dGI7CiAKLQkJcmMgPSByaW9fb3Blbl9vdXRiX21ib3gobXBvcnQsIGRldl9pZCwgbWJveCwgZW50cmllcyk7CisJCXJjID0gbXBvcnQtPm9wcy0+b3Blbl9vdXRiX21ib3gobXBvcnQsIGRldl9pZCwgbWJveCwgZW50cmllcyk7CiAJfSBlbHNlCiAJCXJjID0gLUVOT01FTTsKIApAQCAtMTY3LDEwICsxNzksMTMgQEAKICAqLwogaW50IHJpb19yZWxlYXNlX291dGJfbWJveChzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCwgaW50IG1ib3gpCiB7Ci0JcmlvX2Nsb3NlX291dGJfbWJveChtcG9ydCwgbWJveCk7CisJaWYgKG1wb3J0LT5vcHMtPmNsb3NlX291dGJfbWJveCkgeworCQltcG9ydC0+b3BzLT5jbG9zZV9vdXRiX21ib3gobXBvcnQsIG1ib3gpOwogCi0JLyogUmVsZWFzZSB0aGUgbWFpbGJveCByZXNvdXJjZSAqLwotCXJldHVybiByZWxlYXNlX3Jlc291cmNlKG1wb3J0LT5vdXRiX21zZ1ttYm94XS5yZXMpOworCQkvKiBSZWxlYXNlIHRoZSBtYWlsYm94IHJlc291cmNlICovCisJCXJldHVybiByZWxlYXNlX3Jlc291cmNlKG1wb3J0LT5vdXRiX21zZ1ttYm94XS5yZXMpOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT1NZUzsKIH0KIAogLyoqCkBAIC0xMTIwLDM2ICsxMTM1LDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKLWRldmljZV9pbml0Y2FsbChyaW9faW5pdCk7Ci0KIGludCBfX2RldmluaXQgcmlvX2luaXRfbXBvcnRzKHZvaWQpCiB7Ci0JaW50IHJjID0gMDsKIAlzdHJ1Y3QgcmlvX21wb3J0ICpwb3J0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmcmlvX21wb3J0cywgbm9kZSkgewotCQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwb3J0LT5pb3Jlcy5zdGFydCwKLQkJCQkJcmVzb3VyY2Vfc2l6ZSgmcG9ydC0+aW9yZXMpLAotCQkJCQlwb3J0LT5uYW1lKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIlJJTzogRXJyb3IgcmVxdWVzdGluZyBtYXN0ZXIgcG9ydCByZWdpb24gMHglMDE2bGx4LTB4JTAxNmxseFxuIiwKLQkJCSAgICAgICAodTY0KXBvcnQtPmlvcmVzLnN0YXJ0LCAodTY0KXBvcnQtPmlvcmVzLmVuZCk7Ci0JCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCiAJCWlmIChwb3J0LT5ob3N0X2RldmljZWlkID49IDApCiAJCQlyaW9fZW51bV9tcG9ydChwb3J0KTsKIAkJZWxzZQogCQkJcmlvX2Rpc2NfbXBvcnQocG9ydCk7CiAJfQogCi0gICAgICBvdXQ6Ci0JcmV0dXJuIHJjOworCXJpb19pbml0KCk7CisKKwlyZXR1cm4gMDsKIH0KIAorZGV2aWNlX2luaXRjYWxsX3N5bmMocmlvX2luaXRfbXBvcnRzKTsKKworc3RhdGljIGludCBoZGlkc1tSSU9fTUFYX01QT1JUUyArIDFdOworCitzdGF0aWMgaW50IHJpb19nZXRfaGRpZChpbnQgaW5kZXgpCit7CisJaWYgKCFoZGlkc1swXSB8fCBoZGlkc1swXSA8PSBpbmRleCB8fCBpbmRleCA+PSBSSU9fTUFYX01QT1JUUykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGhkaWRzW2luZGV4ICsgMV07Cit9CisKK3N0YXRpYyBpbnQgcmlvX2hkaWRfc2V0dXAoY2hhciAqc3RyKQoreworCSh2b2lkKWdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShoZGlkcyksIGhkaWRzKTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgicmlvaGRpZD0iLCByaW9faGRpZF9zZXR1cCk7CisKIHZvaWQgcmlvX3JlZ2lzdGVyX21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKnBvcnQpCiB7CisJaWYgKG5leHRfcG9ydGlkID49IFJJT19NQVhfTVBPUlRTKSB7CisJCXByX2VycigiUklPOiByZWFjaGVkIHNwZWNpZmllZCBtYXggbnVtYmVyIG9mIG1wb3J0c1xuIik7CisJCXJldHVybjsKKwl9CisKKwlwb3J0LT5pZCA9IG5leHRfcG9ydGlkKys7CisJcG9ydC0+aG9zdF9kZXZpY2VpZCA9IHJpb19nZXRfaGRpZChwb3J0LT5pZCk7CiAJbGlzdF9hZGRfdGFpbCgmcG9ydC0+bm9kZSwgJnJpb19tcG9ydHMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvTWFrZWZpbGUgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvTWFrZWZpbGUKaW5kZXggNDhkNjdhNi4uYzRkM2FjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9NYWtlZmlsZQpAQCAtNyw3ICs3LDMgQEAKIG9iai0kKENPTkZJR19SQVBJRElPX1RTSTU2OCkJKz0gdHNpNTY4Lm8KIG9iai0kKENPTkZJR19SQVBJRElPX1RTSTUwMCkJKz0gdHNpNTAwLm8KIG9iai0kKENPTkZJR19SQVBJRElPX0NQU19HRU4yKQkrPSBpZHRfZ2VuMi5vCi0KLWlmZXEgKCQoQ09ORklHX1JBUElESU9fREVCVUcpLHkpCi1FWFRSQV9DRkxBR1MgKz0gLURERUJVRwotZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDQ5NDFjYWQuLmUxODc4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtOTg1LDQgKzk4NSwxNCBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbGx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWxwYzMyeHguCiAKK2NvbmZpZyBSVENfRFJWX1RFR1JBCisJdHJpc3RhdGUgIk5WSURJQSBUZWdyYSBJbnRlcm5hbCBSVEMgZHJpdmVyIgorCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIEFSQ0hfVEVHUkEKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBUZWdyYSAyMDAgc2VyaWVzIGludGVybmFsIFJUQyBtb2R1bGUuCisKKwkgIFRoaXMgZHJpdmUgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtdGVncmEuCisKIGVuZGlmICMgUlRDX0NMQVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IDJhZmRhZjMuLmNhOTFjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0yLDkgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgUlRDIGNsYXNzL2RyaXZlcnMuCiAjCiAKLWlmZXEgKCQoQ09ORklHX1JUQ19ERUJVRykseSkKLQlFWFRSQV9DRkxBR1MJCSs9IC1EREVCVUcKLWVuZGlmCitjY2ZsYWdzLSQoQ09ORklHX1JUQ19ERUJVRykJOj0gLURERUJVRwogCiBvYmotJChDT05GSUdfUlRDX0xJQikJCSs9IHJ0Yy1saWIubwogb2JqLSQoQ09ORklHX1JUQ19IQ1RPU1lTKQkrPSBoY3Rvc3lzLm8KQEAgLTkzLDYgKzkxLDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX1NUSzE3VEE4KQkrPSBydGMtc3RrMTd0YTgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfU1RNUCkJKz0gcnRjLXN0bXAzeHh4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1NVTjRWKQkrPSBydGMtc3VuNHYubworb2JqLSQoQ09ORklHX1JUQ19EUlZfVEVHUkEpCSs9IHJ0Yy10ZWdyYS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9URVNUKQkrPSBydGMtdGVzdC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9UV0w0MDMwKQkrPSBydGMtdHdsLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1RYNDkzOSkJKz0gcnRjLXR4NDkzOS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKaW5kZXggZDgzNGE2My4uZTZlNzFkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAjZGVmaW5lIERTMTM3NF9SRUdfVE9EMAkJMHgwMCAvKiBUaW1lIG9mIERheSAqLwogI2RlZmluZSBEUzEzNzRfUkVHX1RPRDEJCTB4MDEKQEAgLTQwOSwzMiArNDEwLDM4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgZHMxMzc0X3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkczEzNzRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwogCWlmIChjbGllbnQtPmlycSA+PSAwICYmIGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCiAJCWVuYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHMxMzc0X3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBkczEzNzRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCiAJaWYgKGNsaWVudC0+aXJxID49IDAgJiYgZGV2aWNlX21heV93YWtldXAoJmNsaWVudC0+ZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSk7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhkczEzNzRfcG0sIGRzMTM3NF9zdXNwZW5kLCBkczEzNzRfcmVzdW1lKTsKKworI2RlZmluZSBEUzEzNzRfUE0gKCZkczEzNzRfcG0pCiAjZWxzZQotI2RlZmluZSBkczEzNzRfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIGRzMTM3NF9yZXN1bWUJTlVMTAorI2RlZmluZSBEUzEzNzRfUE0gTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczEzNzRfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInJ0Yy1kczEzNzQiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gRFMxMzc0X1BNLAogCX0sCiAJLnByb2JlID0gZHMxMzc0X3Byb2JlLAotCS5zdXNwZW5kID0gZHMxMzc0X3N1c3BlbmQsCi0JLnJlc3VtZSA9IGRzMTM3NF9yZXN1bWUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRzMTM3NF9yZW1vdmUpLAogCS5pZF90YWJsZSA9IGRzMTM3NF9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzkwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzkwLmMKaW5kZXggMjZhODZkMi4uYjAzOGQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTM5MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzOTAuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGRzMTM5MF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3QgZHMxMzkwICpjaGlwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgZHMxMzkwICpjaGlwID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIoY2hpcC0+cnRjKTsKIAlrZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYwppbmRleCAzZmZmZDcwLi5mYmFiYzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jCkBAIC00NjgsNyArNDY4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBkczE1MTFfbnZyYW1fYXR0ciA9IHsKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibnZyYW0iLAotCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVUdPLAorCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAogCX0sCiAJLnNpemUgPSBEUzE1MTFfUkFNX01BWCwKIAkucmVhZCA9IGRzMTUxMV9udnJhbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jCmluZGV4IGE3NzRjYTMuLmJiZDI2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzQuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjM0LmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBkczMyMzRfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwogCiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwOC5jIGIvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYwppbmRleCA0NjgyMDBjLi5kYThiZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwOC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1pc2wxMjA4LmMKQEAgLTM5LDYgKzM5LDggQEAKICNkZWZpbmUgSVNMMTIwOF9SRUdfU1JfQkFUICAgICAoMTw8MSkJLyogYmF0dGVyeSAqLwogI2RlZmluZSBJU0wxMjA4X1JFR19TUl9SVENGICAgICgxPDwwKQkvKiBydGMgZmFpbCAqLwogI2RlZmluZSBJU0wxMjA4X1JFR19JTlQgMHgwOAorI2RlZmluZSBJU0wxMjA4X1JFR19JTlRfQUxNRSAgICgxPDw2KSAgIC8qIGFsYXJtIGVuYWJsZSAqLworI2RlZmluZSBJU0wxMjA4X1JFR19JTlRfSU0gICAgICgxPDw3KSAgIC8qIGludGVycnVwdC9hbGFybSBtb2RlICovCiAjZGVmaW5lIElTTDEyMDhfUkVHXzA5ICAweDA5CS8qIHJlc2VydmVkICovCiAjZGVmaW5lIElTTDEyMDhfUkVHX0FUUiAweDBhCiAjZGVmaW5lIElTTDEyMDhfUkVHX0RUUiAweDBiCkBAIC0yMDIsNiArMjA0LDMwIEBACiB9CiAKIHN0YXRpYyBpbnQKK2lzbDEyMDhfcnRjX3RvZ2dsZV9hbGFybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZW5hYmxlKQoreworCWludCBpY3IgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBJU0wxMjA4X1JFR19JTlQpOworCisJaWYgKGljciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVhZGluZyBJTlQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBpY3I7CisJfQorCisJaWYgKGVuYWJsZSkKKwkJaWNyIHw9IElTTDEyMDhfUkVHX0lOVF9BTE1FIHwgSVNMMTIwOF9SRUdfSU5UX0lNOworCWVsc2UKKwkJaWNyICY9IH4oSVNMMTIwOF9SRUdfSU5UX0FMTUUgfCBJU0wxMjA4X1JFR19JTlRfSU0pOworCisJaWNyID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIElTTDEyMDhfUkVHX0lOVCwgaWNyKTsKKwlpZiAoaWNyIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiB3cml0aW5nIElOVCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIGljcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogaXNsMTIwOF9ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjb25zdCBjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CkBAIC0yODgsOSArMzE0LDggQEAKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgKmNvbnN0IHRtID0gJmFsYXJtLT50aW1lOwogCXU4IHJlZ3NbSVNMMTIwOF9BTEFSTV9TRUNUSU9OX0xFTl0gPSB7IDAsIH07Ci0JaW50IHNyOworCWludCBpY3IsIHlyLCBzciA9IGlzbDEyMDhfaTJjX2dldF9zcihjbGllbnQpOwogCi0Jc3IgPSBpc2wxMjA4X2kyY19nZXRfc3IoY2xpZW50KTsKIAlpZiAoc3IgPCAwKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlYWRpbmcgU1IgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBzcjsKQEAgLTMxMyw2ICszMzgsNzMgQEAKIAkJYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX01PQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDFmKSAtIDE7CiAJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfRFdBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4MDMpOwogCisJLyogVGhlIGFsYXJtIGRvZXNuJ3Qgc3RvcmUgdGhlIHllYXIgc28gZ2V0IGl0IGZyb20gdGhlIHJ0YyBzZWN0aW9uICovCisJeXIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBJU0wxMjA4X1JFR19ZUik7CisJaWYgKHlyIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWFkaW5nIFJUQyBZUiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHlyOworCX0KKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oeXIpICsgMTAwOworCisJaWNyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSVNMMTIwOF9SRUdfSU5UKTsKKwlpZiAoaWNyIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWFkaW5nIElOVCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIGljcjsKKwl9CisJYWxhcm0tPmVuYWJsZWQgPSAhIShpY3IgJiBJU0wxMjA4X1JFR19JTlRfQUxNRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraXNsMTIwOF9pMmNfc2V0X2FsYXJtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgcnRjX3RpbWUgKmFsYXJtX3RtID0gJmFsYXJtLT50aW1lOworCXU4IHJlZ3NbSVNMMTIwOF9BTEFSTV9TRUNUSU9OX0xFTl0gPSB7IDAsIH07CisJY29uc3QgaW50IG9mZnMgPSBJU0wxMjA4X1JFR19TQ0E7CisJdW5zaWduZWQgbG9uZyBydGNfc2VjcywgYWxhcm1fc2VjczsKKwlzdHJ1Y3QgcnRjX3RpbWUgcnRjX3RtOworCWludCBlcnIsIGVuYWJsZTsKKworCWVyciA9IGlzbDEyMDhfaTJjX3JlYWRfdGltZShjbGllbnQsICZydGNfdG0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gcnRjX3RtX3RvX3RpbWUoJnJ0Y190bSwgJnJ0Y19zZWNzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHJ0Y190bV90b190aW1lKGFsYXJtX3RtLCAmYWxhcm1fc2Vjcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIElmIHRoZSBhbGFybSB0aW1lIGlzIGJlZm9yZSB0aGUgY3VycmVudCB0aW1lIGRpc2FibGUgdGhlIGFsYXJtICovCisJaWYgKCFhbGFybS0+ZW5hYmxlZCB8fCBhbGFybV9zZWNzIDw9IHJ0Y19zZWNzKQorCQllbmFibGUgPSAweDAwOworCWVsc2UKKwkJZW5hYmxlID0gMHg4MDsKKworCS8qIFByb2dyYW0gdGhlIGFsYXJtIGFuZCBlbmFibGUgaXQgZm9yIGVhY2ggc2V0dGluZyAqLworCXJlZ3NbSVNMMTIwOF9SRUdfU0NBIC0gb2Zmc10gPSBiaW4yYmNkKGFsYXJtX3RtLT50bV9zZWMpIHwgZW5hYmxlOworCXJlZ3NbSVNMMTIwOF9SRUdfTU5BIC0gb2Zmc10gPSBiaW4yYmNkKGFsYXJtX3RtLT50bV9taW4pIHwgZW5hYmxlOworCXJlZ3NbSVNMMTIwOF9SRUdfSFJBIC0gb2Zmc10gPSBiaW4yYmNkKGFsYXJtX3RtLT50bV9ob3VyKSB8CisJCUlTTDEyMDhfUkVHX0hSX01JTCB8IGVuYWJsZTsKKworCXJlZ3NbSVNMMTIwOF9SRUdfRFRBIC0gb2Zmc10gPSBiaW4yYmNkKGFsYXJtX3RtLT50bV9tZGF5KSB8IGVuYWJsZTsKKwlyZWdzW0lTTDEyMDhfUkVHX01PQSAtIG9mZnNdID0gYmluMmJjZChhbGFybV90bS0+dG1fbW9uICsgMSkgfCBlbmFibGU7CisJcmVnc1tJU0wxMjA4X1JFR19EV0EgLSBvZmZzXSA9IGJpbjJiY2QoYWxhcm1fdG0tPnRtX3dkYXkgJiA3KSB8IGVuYWJsZTsKKworCS8qIHdyaXRlIEFMQVJNIHJlZ2lzdGVycyAqLworCWVyciA9IGlzbDEyMDhfaTJjX3NldF9yZWdzKGNsaWVudCwgb2ZmcywgcmVncywKKwkJCQkgIElTTDEyMDhfQUxBUk1fU0VDVElPTl9MRU4pOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHdyaXRpbmcgQUxBUk0gc2VjdGlvbiBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gaXNsMTIwOF9ydGNfdG9nZ2xlX2FsYXJtKGNsaWVudCwgZW5hYmxlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5MSwxMiArNDgzLDYzIEBACiAJcmV0dXJuIGlzbDEyMDhfaTJjX3JlYWRfYWxhcm0odG9faTJjX2NsaWVudChkZXYpLCBhbGFybSk7CiB9CiAKK3N0YXRpYyBpbnQKK2lzbDEyMDhfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlyZXR1cm4gaXNsMTIwOF9pMmNfc2V0X2FsYXJtKHRvX2kyY19jbGllbnQoZGV2KSwgYWxhcm0pOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2lzbDEyMDhfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhOworCWludCBoYW5kbGVkID0gMCwgc3IsIGVycjsKKworCS8qCisJICogSTJDIHJlYWRzIGdldCBOQUsnZWQgaWYgd2UgcmVhZCBzdHJhaWdodCBhd2F5IGFmdGVyIGFuIGludGVycnVwdD8KKwkgKiBVc2luZyBhIG1kZWxheS9tc2xlZXAgZGlkbid0IHNlZW0gdG8gaGVscCBlaXRoZXIsIHNvIHdlIHdvcmsgYXJvdW5kCisJICogdGhpcyBieSBjb250aW51YWxseSB0cnlpbmcgdG8gcmVhZCB0aGUgcmVnaXN0ZXIgZm9yIGEgc2hvcnQgdGltZS4KKwkgKi8KKwl3aGlsZSAoMSkgeworCQlzciA9IGlzbDEyMDhfaTJjX2dldF9zcihjbGllbnQpOworCQlpZiAoc3IgPj0gMCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWFkaW5nIFNSIGZhaWxlZFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlyZXR1cm4gc3I7CisJCX0KKwl9CisKKwlpZiAoc3IgJiBJU0wxMjA4X1JFR19TUl9BTE0pIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJhbGFybSFcbiIpOworCisJCS8qIENsZWFyIHRoZSBhbGFybSAqLworCQlzciAmPSB+SVNMMTIwOF9SRUdfU1JfQUxNOworCQlzciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBJU0wxMjA4X1JFR19TUiwgc3IpOworCQlpZiAoc3IgPCAwKQorCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogd3JpdGluZyBTUiBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18pOworCQllbHNlCisJCQloYW5kbGVkID0gMTsKKworCQkvKiBEaXNhYmxlIHRoZSBhbGFybSAqLworCQllcnIgPSBpc2wxMjA4X3J0Y190b2dnbGVfYWxhcm0oY2xpZW50LCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGhhbmRsZWQgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgaXNsMTIwOF9ydGNfb3BzID0gewogCS5wcm9jID0gaXNsMTIwOF9ydGNfcHJvYywKIAkucmVhZF90aW1lID0gaXNsMTIwOF9ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZSA9IGlzbDEyMDhfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtID0gaXNsMTIwOF9ydGNfcmVhZF9hbGFybSwKLQkvKi5zZXRfYWxhcm0gICAgPSBpc2wxMjA4X3J0Y19zZXRfYWxhcm0sICovCisJLnNldF9hbGFybSA9IGlzbDEyMDhfcnRjX3NldF9hbGFybSwKIH07CiAKIC8qIHN5c2ZzIGludGVyZmFjZSAqLwpAQCAtNDg4LDExICs2MzEsMjkgQEAKIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsCiAJCSAiY2hpcCBmb3VuZCwgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAorCWlmIChjbGllbnQtPmlycSA+IDApIHsKKwkJcmMgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwgTlVMTCwKKwkJCQkJICBpc2wxMjA4X3J0Y19pbnRlcnJ1cHQsCisJCQkJCSAgSVJRRl9TSEFSRUQsCisJCQkJCSAgaXNsMTIwOF9kcml2ZXIuZHJpdmVyLm5hbWUsIGNsaWVudCk7CisJCWlmICghcmMpIHsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmY2xpZW50LT5kZXYsIDEpOworCQkJZW5hYmxlX2lycV93YWtlKGNsaWVudC0+aXJxKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJVbmFibGUgdG8gcmVxdWVzdCBpcnEgJWQsIG5vIGFsYXJtIHN1cHBvcnRcbiIsCisJCQkJY2xpZW50LT5pcnEpOworCQkJY2xpZW50LT5pcnEgPSAwOworCQl9CisJfQorCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3Rlcihpc2wxMjA4X2RyaXZlci5kcml2ZXIubmFtZSwKIAkJCQkgICZjbGllbnQtPmRldiwgJmlzbDEyMDhfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHJ0YykpCi0JCXJldHVybiBQVFJfRVJSKHJ0Yyk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCXJjID0gUFRSX0VSUihydGMpOworCQlnb3RvIGV4aXRfZnJlZV9pcnE7CisJfQogCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcnRjKTsKIApAQCAtNTE0LDYgKzY3NSw5IEBACiAKIGV4aXRfdW5yZWdpc3RlcjoKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKK2V4aXRfZnJlZV9pcnE6CisJaWYgKGNsaWVudC0+aXJxKQorCQlmcmVlX2lycShjbGllbnQtPmlycSwgY2xpZW50KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTUyNSw2ICs2ODksOCBAQAogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmaXNsMTIwOF9ydGNfc3lzZnNfZmlsZXMpOwogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCWlmIChjbGllbnQtPmlycSkKKwkJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGNsaWVudCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYwppbmRleCBjOGM5N2E0Li5lMjU5ZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgbTQxdDk0X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKIAogCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXRlZ3JhLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdGVncmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmMzMWFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXRlZ3JhLmMKQEAgLTAsMCArMSw0ODggQEAKKy8qCisgKiBBbiBSVEMgZHJpdmVyIGZvciB0aGUgTlZJRElBIFRlZ3JhIDIwMCBzZXJpZXMgaW50ZXJuYWwgUlRDLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiBzZXQgdG8gMSA9IGJ1c3kgZXZlcnkgZWlnaHQgMzJrSHogY2xvY2tzIGR1cmluZyBjb3B5IG9mIHNlYyttc2VjIHRvIEFIQiAqLworI2RlZmluZSBURUdSQV9SVENfUkVHX0JVU1kJCQkweDAwNAorI2RlZmluZSBURUdSQV9SVENfUkVHX1NFQ09ORFMJCQkweDAwOAorLyogd2hlbiBtc2VjIGlzIHJlYWQsIHRoZSBzZWNvbmRzIGFyZSBidWZmZXJlZCBpbnRvIHNoYWRvdyBzZWNvbmRzLiAqLworI2RlZmluZSBURUdSQV9SVENfUkVHX1NIQURPV19TRUNPTkRTCQkweDAwYworI2RlZmluZSBURUdSQV9SVENfUkVHX01JTExJX1NFQ09ORFMJCTB4MDEwCisjZGVmaW5lIFRFR1JBX1JUQ19SRUdfU0VDT05EU19BTEFSTTAJCTB4MDE0CisjZGVmaW5lIFRFR1JBX1JUQ19SRUdfU0VDT05EU19BTEFSTTEJCTB4MDE4CisjZGVmaW5lIFRFR1JBX1JUQ19SRUdfTUlMTElfU0VDT05EU19BTEFSTTAJMHgwMWMKKyNkZWZpbmUgVEVHUkFfUlRDX1JFR19JTlRSX01BU0sJCQkweDAyOAorLyogd3JpdGUgMSBiaXRzIHRvIGNsZWFyIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIFRFR1JBX1JUQ19SRUdfSU5UUl9TVEFUVVMJCTB4MDJjCisKKy8qIGJpdHMgaW4gSU5UUl9NQVNLICovCisjZGVmaW5lIFRFR1JBX1JUQ19JTlRSX01BU0tfTVNFQ19DRE5fQUxBUk0JKDE8PDQpCisjZGVmaW5lIFRFR1JBX1JUQ19JTlRSX01BU0tfU0VDX0NETl9BTEFSTQkoMTw8MykKKyNkZWZpbmUgVEVHUkFfUlRDX0lOVFJfTUFTS19NU0VDX0FMQVJNCQkoMTw8MikKKyNkZWZpbmUgVEVHUkFfUlRDX0lOVFJfTUFTS19TRUNfQUxBUk0xCQkoMTw8MSkKKyNkZWZpbmUgVEVHUkFfUlRDX0lOVFJfTUFTS19TRUNfQUxBUk0wCQkoMTw8MCkKKworLyogYml0cyBpbiBJTlRSX1NUQVRVUyAqLworI2RlZmluZSBURUdSQV9SVENfSU5UUl9TVEFUVVNfTVNFQ19DRE5fQUxBUk0JKDE8PDQpCisjZGVmaW5lIFRFR1JBX1JUQ19JTlRSX1NUQVRVU19TRUNfQ0ROX0FMQVJNCSgxPDwzKQorI2RlZmluZSBURUdSQV9SVENfSU5UUl9TVEFUVVNfTVNFQ19BTEFSTQkoMTw8MikKKyNkZWZpbmUgVEVHUkFfUlRDX0lOVFJfU1RBVFVTX1NFQ19BTEFSTTEJKDE8PDEpCisjZGVmaW5lIFRFR1JBX1JUQ19JTlRSX1NUQVRVU19TRUNfQUxBUk0wCSgxPDwwKQorCitzdHJ1Y3QgdGVncmFfcnRjX2luZm8geworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CisJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0Y19kZXY7CisJdm9pZCBfX2lvbWVtCQkqcnRjX2Jhc2U7IC8qIE5VTEwgaWYgbm90IGluaXRpYWxpemVkLiAqLworCWludAkJCXRlZ3JhX3J0Y19pcnE7IC8qIGFsYXJtIGFuZCBwZXJpb2RpYyBpcnEgKi8KKwlzcGlubG9ja190CQl0ZWdyYV9ydGNfbG9jazsKK307CisKKy8qIFJUQyBoYXJkd2FyZSBpcyBidXN5IHdoZW4gaXQgaXMgdXBkYXRpbmcgaXRzIHZhbHVlcyBvdmVyIEFIQiBvbmNlCisgKiBldmVyeSBlaWdodCAzMmtIeiBjbG9ja3MgKH4yNTB1UykuCisgKiBvdXRzaWRlIG9mIHRoZXNlIHVwZGF0ZXMgdGhlIENQVSBpcyBmcmVlIHRvIHdyaXRlLgorICogQ1BVIGlzIGFsd2F5cyBmcmVlIHRvIHJlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHRlZ3JhX3J0Y19jaGVja19idXN5KHN0cnVjdCB0ZWdyYV9ydGNfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gcmVhZGwoaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX0JVU1kpICYgMTsKK30KKworLyogV2FpdCBmb3IgaGFyZHdhcmUgdG8gYmUgcmVhZHkgZm9yIHdyaXRpbmcuCisgKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIG1heGltaXplIHRoZSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdGhlIG5leHQgdXBkYXRlLgorICogSXQgZG9lcyB0aGlzIGJ5IHdhaXRpbmcgZm9yIHRoZSBSVEMgdG8gYmVjb21lIGJ1c3kgd2l0aCBpdHMgcGVyaW9kaWMgdXBkYXRlLAorICogdGhlbiByZXR1cm5pbmcgb25jZSB0aGUgUlRDIGZpcnN0IGJlY29tZXMgbm90IGJ1c3kuCisgKiBUaGlzIHBlcmlvZGljIHVwZGF0ZSAod2hlcmUgdGhlIHNlY29uZHMgYW5kIG1pbGxpc2Vjb25kcyBhcmUgY29waWVkIHRvIHRoZQorICogQUhCIHNpZGUpIG9jY3VycyBldmVyeSBlaWdodCAzMmtIeiBjbG9ja3MgKH4yNTB1UykuCisgKiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiBhbGxvd3MgdXMgdG8gbWFrZSBzb21lIGFzc3VtcHRpb25zIHdpdGhvdXQKKyAqIGludHJvZHVjaW5nIGEgcmFjZSwgYmVjYXVzZSAyNTB1UyBpcyBwbGVudHkgb2YgdGltZSB0byByZWFkL3dyaXRlIGEgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgdGVncmFfcnRjX3dhaXRfd2hpbGVfYnVzeShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRlZ3JhX3J0Y19pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpbnQgcmV0cmllcyA9IDUwMDsgLyogfjQ5MCB1cyBpcyB0aGUgd29yc3QgY2FzZSwgfjI1MCB1cyBpcyBiZXN0LiAqLworCisJLyogZmlyc3Qgd2FpdCBmb3IgdGhlIFJUQyB0byBiZWNvbWUgYnVzeS4gdGhpcyBpcyB3aGVuIGl0CisJICogcG9zdHMgaXRzIHVwZGF0ZWQgc2Vjb25kcyttc2VjIHJlZ2lzdGVycyB0byBBSEIgc2lkZS4gKi8KKwl3aGlsZSAodGVncmFfcnRjX2NoZWNrX2J1c3koaW5mbykpIHsKKwkJaWYgKCFyZXRyaWVzLS0pCisJCQlnb3RvIHJldHJ5X2ZhaWxlZDsKKwkJdWRlbGF5KDEpOworCX0KKworCS8qIG5vdyB3ZSBoYXZlIGFib3V0IDI1MCB1cyB0byBtYW5pcHVsYXRlIHJlZ2lzdGVycyAqLworCXJldHVybiAwOworCityZXRyeV9mYWlsZWQ6CisJZGV2X2VycihkZXYsICJ3cml0ZSBmYWlsZWQ6cmV0cnkgY291bnQgZXhjZWVkZWQuXG4iKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCB0ZWdyYV9ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgdGVncmFfcnRjX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHNlYywgbXNlYzsKKwl1bnNpZ25lZCBsb25nIHNsX2lycV9mbGFnczsKKworCS8qIFJUQyBoYXJkd2FyZSBjb3BpZXMgc2Vjb25kcyB0byBzaGFkb3cgc2Vjb25kcyB3aGVuIGEgcmVhZAorCSAqIG9mIG1pbGxpc2Vjb25kcyBvY2N1cnMuIHVzZSBhIGxvY2sgdG8ga2VlcCBvdGhlciB0aHJlYWRzIG91dC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+dGVncmFfcnRjX2xvY2ssIHNsX2lycV9mbGFncyk7CisKKwltc2VjID0gcmVhZGwoaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX01JTExJX1NFQ09ORFMpOworCXNlYyA9IHJlYWRsKGluZm8tPnJ0Y19iYXNlICsgVEVHUkFfUlRDX1JFR19TSEFET1dfU0VDT05EUyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT50ZWdyYV9ydGNfbG9jaywgc2xfaXJxX2ZsYWdzKTsKKworCXJ0Y190aW1lX3RvX3RtKHNlYywgdG0pOworCisJZGV2X3ZkYmcoZGV2LCAidGltZSByZWFkIGFzICVsdS4gJWQvJWQvJWQgJWQ6JTAydTolMDJ1XG4iLAorCQlzZWMsCisJCXRtLT50bV9tb24gKyAxLAorCQl0bS0+dG1fbWRheSwKKwkJdG0tPnRtX3llYXIgKyAxOTAwLAorCQl0bS0+dG1faG91ciwKKwkJdG0tPnRtX21pbiwKKwkJdG0tPnRtX3NlYworCSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCB0ZWdyYV9ydGNfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgc2VjOworCWludCByZXQ7CisKKwkvKiBjb252ZXJ0IHRtIHRvIHNlY29uZHMuICovCisJcmV0ID0gcnRjX3ZhbGlkX3RtKHRtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcnRjX3RtX3RvX3RpbWUodG0sICZzZWMpOworCisJZGV2X3ZkYmcoZGV2LCAidGltZSBzZXQgdG8gJWx1LiAlZC8lZC8lZCAlZDolMDJ1OiUwMnVcbiIsCisJCXNlYywKKwkJdG0tPnRtX21vbisxLAorCQl0bS0+dG1fbWRheSwKKwkJdG0tPnRtX3llYXIrMTkwMCwKKwkJdG0tPnRtX2hvdXIsCisJCXRtLT50bV9taW4sCisJCXRtLT50bV9zZWMKKwkpOworCisJLyogc2Vjb25kcyBvbmx5IHdyaXR0ZW4gaWYgd2FpdCBzdWNjZWVkZWQuICovCisJcmV0ID0gdGVncmFfcnRjX3dhaXRfd2hpbGVfYnVzeShkZXYpOworCWlmICghcmV0KQorCQl3cml0ZWwoc2VjLCBpbmZvLT5ydGNfYmFzZSArIFRFR1JBX1JUQ19SRUdfU0VDT05EUyk7CisKKwlkZXZfdmRiZyhkZXYsICJ0aW1lIHJlYWQgYmFjayBhcyAlZFxuIiwKKwkJcmVhZGwoaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX1NFQ09ORFMpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfcnRjX3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCit7CisJc3RydWN0IHRlZ3JhX3J0Y19pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBzZWM7CisJdW5zaWduZWQgdG1wOworCisJc2VjID0gcmVhZGwoaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX1NFQ09ORFNfQUxBUk0wKTsKKworCWlmIChzZWMgPT0gMCkgeworCQkvKiBhbGFybSBpcyBkaXNhYmxlZC4gKi8KKwkJYWxhcm0tPmVuYWJsZWQgPSAwOworCQlhbGFybS0+dGltZS50bV9tb24gPSAtMTsKKwkJYWxhcm0tPnRpbWUudG1fbWRheSA9IC0xOworCQlhbGFybS0+dGltZS50bV95ZWFyID0gLTE7CisJCWFsYXJtLT50aW1lLnRtX2hvdXIgPSAtMTsKKwkJYWxhcm0tPnRpbWUudG1fbWluID0gLTE7CisJCWFsYXJtLT50aW1lLnRtX3NlYyA9IC0xOworCX0gZWxzZSB7CisJCS8qIGFsYXJtIGlzIGVuYWJsZWQuICovCisJCWFsYXJtLT5lbmFibGVkID0gMTsKKwkJcnRjX3RpbWVfdG9fdG0oc2VjLCAmYWxhcm0tPnRpbWUpOworCX0KKworCXRtcCA9IHJlYWRsKGluZm8tPnJ0Y19iYXNlICsgVEVHUkFfUlRDX1JFR19JTlRSX1NUQVRVUyk7CisJYWxhcm0tPnBlbmRpbmcgPSAodG1wICYgVEVHUkFfUlRDX0lOVFJfU1RBVFVTX1NFQ19BTEFSTTApICE9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCB0ZWdyYV9ydGNfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHNsX2lycV9mbGFnczsKKworCXRlZ3JhX3J0Y193YWl0X3doaWxlX2J1c3koZGV2KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+dGVncmFfcnRjX2xvY2ssIHNsX2lycV9mbGFncyk7CisKKwkvKiByZWFkIHRoZSBvcmlnaW5hbCB2YWx1ZSwgYW5kIE9SIGluIHRoZSBmbGFnLiAqLworCXN0YXR1cyA9IHJlYWRsKGluZm8tPnJ0Y19iYXNlICsgVEVHUkFfUlRDX1JFR19JTlRSX01BU0spOworCWlmIChlbmFibGVkKQorCQlzdGF0dXMgfD0gVEVHUkFfUlRDX0lOVFJfTUFTS19TRUNfQUxBUk0wOyAvKiBzZXQgaXQgKi8KKwllbHNlCisJCXN0YXR1cyAmPSB+VEVHUkFfUlRDX0lOVFJfTUFTS19TRUNfQUxBUk0wOyAvKiBjbGVhciBpdCAqLworCisJd3JpdGVsKHN0YXR1cywgaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX0lOVFJfTUFTSyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT50ZWdyYV9ydGNfbG9jaywgc2xfaXJxX2ZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCit7CisJc3RydWN0IHRlZ3JhX3J0Y19pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBzZWM7CisKKwlpZiAoYWxhcm0tPmVuYWJsZWQpCisJCXJ0Y190bV90b190aW1lKCZhbGFybS0+dGltZSwgJnNlYyk7CisJZWxzZQorCQlzZWMgPSAwOworCisJdGVncmFfcnRjX3dhaXRfd2hpbGVfYnVzeShkZXYpOworCXdyaXRlbChzZWMsIGluZm8tPnJ0Y19iYXNlICsgVEVHUkFfUlRDX1JFR19TRUNPTkRTX0FMQVJNMCk7CisJZGV2X3ZkYmcoZGV2LCAiYWxhcm0gcmVhZCBiYWNrIGFzICVkXG4iLAorCQlyZWFkbChpbmZvLT5ydGNfYmFzZSArIFRFR1JBX1JUQ19SRUdfU0VDT05EU19BTEFSTTApKTsKKworCS8qIGlmIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGFuZCBhbGFybSBpcyBlbmFibGVkIC4uLiAqLworCWlmIChzZWMpIHsKKwkJdGVncmFfcnRjX2FsYXJtX2lycV9lbmFibGUoZGV2LCAxKTsKKworCQlkZXZfdmRiZyhkZXYsICJhbGFybSBzZXQgYXMgJWx1LiAlZC8lZC8lZCAlZDolMDJ1OiUwMnVcbiIsCisJCQlzZWMsCisJCQlhbGFybS0+dGltZS50bV9tb24rMSwKKwkJCWFsYXJtLT50aW1lLnRtX21kYXksCisJCQlhbGFybS0+dGltZS50bV95ZWFyKzE5MDAsCisJCQlhbGFybS0+dGltZS50bV9ob3VyLAorCQkJYWxhcm0tPnRpbWUudG1fbWluLAorCQkJYWxhcm0tPnRpbWUudG1fc2VjKTsKKwl9IGVsc2UgeworCQkvKiBkaXNhYmxlIGFsYXJtIGlmIDAgb3Igd3JpdGUgZXJyb3IuICovCisJCWRldl92ZGJnKGRldiwgImFsYXJtIGRpc2FibGVkXG4iKTsKKwkJdGVncmFfcnRjX2FsYXJtX2lycV9lbmFibGUoZGV2LCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCWlmICghZGV2IHx8ICFkZXYtPmRyaXZlcikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICJuYW1lXHRcdDogJXNcbiIsIGRldl9uYW1lKGRldikpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdGVncmFfcnRjX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgdGVncmFfcnRjX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDA7CisJdW5zaWduZWQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgc2xfaXJxX2ZsYWdzOworCisJc3RhdHVzID0gcmVhZGwoaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX0lOVFJfU1RBVFVTKTsKKwlpZiAoc3RhdHVzKSB7CisJCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgbWFza3MgYW5kIHN0YXR1cyBvbiBhbnkgaXJxLiAqLworCQl0ZWdyYV9ydGNfd2FpdF93aGlsZV9idXN5KGRldik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT50ZWdyYV9ydGNfbG9jaywgc2xfaXJxX2ZsYWdzKTsKKwkJd3JpdGVsKDAsIGluZm8tPnJ0Y19iYXNlICsgVEVHUkFfUlRDX1JFR19JTlRSX01BU0spOworCQl3cml0ZWwoc3RhdHVzLCBpbmZvLT5ydGNfYmFzZSArIFRFR1JBX1JUQ19SRUdfSU5UUl9TVEFUVVMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT50ZWdyYV9ydGNfbG9jaywgc2xfaXJxX2ZsYWdzKTsKKwl9CisKKwkvKiBjaGVjayBpZiBBbGFybSAqLworCWlmICgoc3RhdHVzICYgVEVHUkFfUlRDX0lOVFJfU1RBVFVTX1NFQ19BTEFSTTApKQorCQlldmVudHMgfD0gUlRDX0lSUUYgfCBSVENfQUY7CisKKwkvKiBjaGVjayBpZiBQZXJpb2RpYyAqLworCWlmICgoc3RhdHVzICYgVEVHUkFfUlRDX0lOVFJfU1RBVFVTX1NFQ19DRE5fQUxBUk0pKQorCQlldmVudHMgfD0gUlRDX0lSUUYgfCBSVENfUEY7CisKKwlydGNfdXBkYXRlX2lycShpbmZvLT5ydGNfZGV2LCAxLCBldmVudHMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgdGVncmFfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lCT0gdGVncmFfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSB0ZWdyYV9ydGNfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSB0ZWdyYV9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCT0gdGVncmFfcnRjX3NldF9hbGFybSwKKwkucHJvYwkJPSB0ZWdyYV9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHRlZ3JhX3J0Y19hbGFybV9pcnFfZW5hYmxlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgdGVncmFfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRlZ3JhX3J0Y19pbmZvICppbmZvOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRlZ3JhX3J0Y19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGRldmljZS5cbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWVfaW5mbzsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJVbmFibGUgdG8gcmVxdWVzdCBtZW0gcmVnaW9uIGZvciBkZXZpY2UuXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9mcmVlX2luZm87CisJfQorCisJaW5mby0+dGVncmFfcnRjX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGluZm8tPnRlZ3JhX3J0Y19pcnEgPD0gMCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjsKKwl9CisKKwlpbmZvLT5ydGNfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghaW5mby0+cnRjX2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdyYWIgSU9zIGZvciBkZXZpY2UuXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CisJfQorCisJLyogc2V0IGNvbnRleHQgaW5mby4gKi8KKwlpbmZvLT5wZGV2ID0gcGRldjsKKwlpbmZvLT50ZWdyYV9ydGNfbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluZm8tPnRlZ3JhX3J0Y19sb2NrKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOworCisJLyogY2xlYXIgb3V0IHRoZSBoYXJkd2FyZS4gKi8KKwl3cml0ZWwoMCwgaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX1NFQ09ORFNfQUxBUk0wKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiwgaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX0lOVFJfU1RBVFVTKTsKKwl3cml0ZWwoMCwgaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX0lOVFJfTUFTSyk7CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisKKwlpbmZvLT5ydGNfZGV2ID0gcnRjX2RldmljZV9yZWdpc3RlcigKKwkJcGRldi0+bmFtZSwgJnBkZXYtPmRldiwgJnRlZ3JhX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKGluZm8tPnJ0Y19kZXYpKSB7CisJCXJldCA9IFBUUl9FUlIoaW5mby0+cnRjX2Rldik7CisJCWluZm8tPnJ0Y19kZXYgPSBOVUxMOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIGRldmljZSAoZXJyPSVkKS5cbiIsCisJCQlyZXQpOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGluZm8tPnRlZ3JhX3J0Y19pcnEsIHRlZ3JhX3J0Y19pcnFfaGFuZGxlciwKKwkJSVJRRl9UUklHR0VSX0hJR0gsICJydGMgYWxhcm0iLCAmcGRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJVbmFibGUgdG8gcmVxdWVzdCBpbnRlcnJ1cHQgZm9yIGRldmljZSAoZXJyPSVkKS5cbiIsCisJCQlyZXQpOworCQlnb3RvIGVycl9kZXZfdW5yZWc7CisJfQorCisJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAiVGVncmEgaW50ZXJuYWwgUmVhbCBUaW1lIENsb2NrXG4iKTsKKworCXJldHVybiAwOworCitlcnJfZGV2X3VucmVnOgorCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihpbmZvLT5ydGNfZGV2KTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoaW5mby0+cnRjX2Jhc2UpOworZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2Vycl9mcmVlX2luZm86CisJa2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0ZWdyYV9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRlZ3JhX3J0Y19pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVCVVNZOworCisJZnJlZV9pcnEoaW5mby0+dGVncmFfcnRjX2lycSwgJnBkZXYtPmRldik7CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKGluZm8tPnJ0Y19kZXYpOworCWlvdW5tYXAoaW5mby0+cnRjX2Jhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWtmcmVlKGluZm8pOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB0ZWdyYV9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgdGVncmFfcnRjX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXRlZ3JhX3J0Y193YWl0X3doaWxlX2J1c3koZGV2KTsKKworCS8qIG9ubHkgdXNlIEFMQVJNMCBhcyBhIHdha2Ugc291cmNlLiAqLworCXdyaXRlbCgweGZmZmZmZmZmLCBpbmZvLT5ydGNfYmFzZSArIFRFR1JBX1JUQ19SRUdfSU5UUl9TVEFUVVMpOworCXdyaXRlbChURUdSQV9SVENfSU5UUl9TVEFUVVNfU0VDX0FMQVJNMCwKKwkJaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX0lOVFJfTUFTSyk7CisKKwlkZXZfdmRiZyhkZXYsICJhbGFybSBzZWMgPSAlZFxuIiwKKwkJcmVhZGwoaW5mby0+cnRjX2Jhc2UgKyBURUdSQV9SVENfUkVHX1NFQ09ORFNfQUxBUk0wKSk7CisKKwlkZXZfdmRiZyhkZXYsICJTdXNwZW5kIChkZXZpY2VfbWF5X3dha2V1cD0lZCkgaXJxOiVkXG4iLAorCQlkZXZpY2VfbWF5X3dha2V1cChkZXYpLCBpbmZvLT50ZWdyYV9ydGNfaXJxKTsKKworCS8qIGxlYXZlIHRoZSBhbGFybXMgb24gYXMgYSB3YWtlIHNvdXJjZS4gKi8KKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKGluZm8tPnRlZ3JhX3J0Y19pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHRlZ3JhX3J0Y19pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfdmRiZyhkZXYsICJSZXN1bWUgKGRldmljZV9tYXlfd2FrZXVwPSVkKVxuIiwKKwkJZGV2aWNlX21heV93YWtldXAoZGV2KSk7CisJLyogYWxhcm1zIHdlcmUgbGVmdCBvbiBhcyBhIHdha2Ugc291cmNlLCB0dXJuIHRoZW0gb2ZmLiAqLworCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQlkaXNhYmxlX2lycV93YWtlKGluZm8tPnRlZ3JhX3J0Y19pcnEpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdGVncmFfcnRjX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZGV2X3ZkYmcoJnBkZXYtPmRldiwgImRpc2FibGluZyBpbnRlcnJ1cHRzLlxuIik7CisJdGVncmFfcnRjX2FsYXJtX2lycV9lbmFibGUoJnBkZXYtPmRldiwgMCk7Cit9CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06dGVncmFfcnRjIik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9ydGNfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGVncmFfcnRjX3JlbW92ZSksCisJLnNodXRkb3duCT0gdGVncmFfcnRjX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ0ZWdyYV9ydGMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gdGVncmFfcnRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB0ZWdyYV9ydGNfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnRlZ3JhX3J0Y19kcml2ZXIsIHRlZ3JhX3J0Y19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdCh0ZWdyYV9ydGNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZWdyYV9ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRlZ3JhX3J0Y19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSm9uIE1heW8gPGptYXlvQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImRyaXZlciBmb3IgVGVncmEgaW50ZXJuYWwgUlRDIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL01ha2VmaWxlCmluZGV4IGYxY2NhNGUuLjkyZGY0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogYWFjcmFpZC1vYmpzCTo9IGxpbml0Lm8gYWFjaGJhLm8gY29tbWN0cmwubyBjb21taW5pdC5vIGNvbW1zdXAubyBcCiAJCSAgIGRwY3N1cC5vIHJ4Lm8gc2EubyBya3QubyBuYXJrLm8KIAotRVhUUkFfQ0ZMQUdTCTo9IC1JZHJpdmVycy9zY3NpCitjY2ZsYWdzLXkJOj0gLUlkcml2ZXJzL3Njc2kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaAppbmRleCBiZTU1NThhLi45NWVlNTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCkBAIC02NzIsNyArNjcyLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogVGFyZ2V0IE1vZGUgRGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb25uZWN0aW9uIGRlc2NpcHRvciBmb3Igc2VsZWN0LWluIHJlcXVlc3RzIGluIHRhcmdldCBtb2RlLgorICogQ29ubmVjdGlvbiBkZXNjcmlwdG9yIGZvciBzZWxlY3QtaW4gcmVxdWVzdHMgaW4gdGFyZ2V0IG1vZGUuCiAgKi8KIHN0cnVjdCB0YXJnZXRfY21kIHsKIAl1aW50OF90IHNjc2lpZDsJCS8qIE91ciBJRCBhbmQgdGhlIGluaXRpYXRvcidzIElEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmgKaW5kZXggZTRlNjUxYy4uMTc0NDRiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHguaApAQCAtNjE4LDcgKzYxOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqIFRhcmdldCBNb2RlIERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29ubmVjdGlvbiBkZXNjaXB0b3IgZm9yIHNlbGVjdC1pbiByZXF1ZXN0cyBpbiB0YXJnZXQgbW9kZS4KKyAqIENvbm5lY3Rpb24gZGVzY3JpcHRvciBmb3Igc2VsZWN0LWluIHJlcXVlc3RzIGluIHRhcmdldCBtb2RlLgogICovCiBzdHJ1Y3QgdGFyZ2V0X2NtZCB7CiAJdWludDhfdCBzY3NpaWQ7CQkvKiBPdXIgSUQgYW5kIHRoZSBpbml0aWF0b3IncyBJRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwppbmRleCAzZjVhNTQyLi5lMDIxYjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwpAQCAtNDc4MCw3ICs0NzgwLDcgQEAKIAlTTElTVF9JTklUKCZzY2JfZGF0YS0+c2dfbWFwcyk7CiAKIAkvKiBBbGxvY2F0ZSBTQ0IgcmVzb3VyY2VzICovCi0Jc2NiX2RhdGEtPnNjYmFycmF5ID0gKHN0cnVjdCBzY2IgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NiKSAqIEFIQ19TQ0JfTUFYX0FMTE9DLCBHRlBfQVRPTUlDKTsKKwlzY2JfZGF0YS0+c2NiYXJyYXkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NiKSAqIEFIQ19TQ0JfTUFYX0FMTE9DLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2NiX2RhdGEtPnNjYmFycmF5ID09IE5VTEwpCiAJCXJldHVybiAoRU5PTUVNKTsKIAltZW1zZXQoc2NiX2RhdGEtPnNjYmFycmF5LCAwLCBzaXplb2Yoc3RydWN0IHNjYikgKiBBSENfU0NCX01BWF9BTExPQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L01ha2VmaWxlCmluZGV4IGU3OGNlMGYuLmMwYTE1YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L01ha2VmaWxlCkBAIC0yMiw5ICsyMiw3IEBACiAjIGFsb25nIHdpdGggdGhlIGFpYzk0eHggZHJpdmVyOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAKLWlmZXEgKCQoQ09ORklHX0FJQzk0WFhfREVCVUcpLHkpCi0JRVhUUkFfQ0ZMQUdTICs9IC1EQVNEX0RFQlVHIC1EQVNEX0VOVEVSX0VYSVQKLWVuZGlmCitjY2ZsYWdzLSQoQ09ORklHX0FJQzk0WFhfREVCVUcpIDo9IC1EQVNEX0RFQlVHIC1EQVNEX0VOVEVSX0VYSVQKIAogb2JqLSQoQ09ORklHX1NDU0lfQUlDOTRYWCkgKz0gYWljOTR4eC5vCiBhaWM5NHh4LXkgKz0gYWljOTR4eF9pbml0Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9saWJzYXMvTWFrZWZpbGUKaW5kZXggNTY2YTEwMC4uMmU3MDE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL01ha2VmaWxlCkBAIC0zMiw0ICszMiw0IEBACiAJCXNhc19zY3NpX2hvc3QubyBcCiAJCXNhc190YXNrLm8KIGxpYnNhcy0kKENPTkZJR19TQ1NJX1NBU19BVEEpICs9CXNhc19hdGEubwotbGlic2FzLSQoQ09ORklHX1NDU0lfU0FTX0hPU1RfU01QKSArPQlzYXNfaG9zdF9zbXAubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2xpYnNhcy0kKENPTkZJR19TQ1NJX1NBU19IT1NUX1NNUCkgKz0Jc2FzX2hvc3Rfc21wLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL2xwZmMvTWFrZWZpbGUKaW5kZXggYWQwNWQ2ZS4uMTRkZTI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvTWFrZWZpbGUKQEAgLTE5LDEwICsxOSw4IEBACiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLWlmbmVxICgkKEdDT1YpLCkKLSAgRVhUUkFfQ0ZMQUdTICs9IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZQotICBFWFRSQV9DRkxBR1MgKz0gLU8wCi1lbmRpZgorY2NmbGFncy0kKEdDT1YpIDo9IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZQorY2NmbGFncy0kKEdDT1YpICs9IC1PMAogCiBvYmotJChDT05GSUdfU0NTSV9MUEZDKSA6PSBscGZjLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwppbmRleCA5YWEwNDg1Li5jMjEyNjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwpAQCAtMTQxMiw3ICsxNDEyLDcgQEAKICAqIEBuc3RhdHVzIC0gbnVtYmVyIG9mIGNvbXBsZXRlZCBjb21tYW5kcwogICogQHN0YXR1cyAtIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGNvbXBsZXRlZAogICoKLSAqIENvbXBsZXRlIHRoZSBjb21hbW5kcyBhbmQgY2FsbCB0aGUgc2NzaSBtaWQtbGF5ZXIgY2FsbGJhY2sgaG9va3MuCisgKiBDb21wbGV0ZSB0aGUgY29tbWFuZHMgYW5kIGNhbGwgdGhlIHNjc2kgbWlkLWxheWVyIGNhbGxiYWNrIGhvb2tzLgogICovCiBzdGF0aWMgdm9pZAogbWVnYV9jbWRfZG9uZShhZGFwdGVyX3QgKmFkYXB0ZXIsIHU4IGNvbXBsZXRlZFtdLCBpbnQgbnN0YXR1cywgaW50IHN0YXR1cykKQEAgLTQyOTYsNyArNDI5Niw3IEBACiAgKiBAYWRhcHRlciAtIHBvaW50ZXIgdG8gb3VyIHNvZnQgc3RhdGUKICAqIEBkbWFfaGFuZGxlIC0gRE1BIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcgogICoKLSAqIElzc3VlIGludGVybmFsIGNvbWFtbmRzIHdoaWxlIGludGVycnVwdHMgYXJlIGF2YWlsYWJsZS4KKyAqIElzc3VlIGludGVybmFsIGNvbW1hbmRzIHdoaWxlIGludGVycnVwdHMgYXJlIGF2YWlsYWJsZS4KICAqIFdlIG9ubHkgaXNzdWUgZGlyZWN0IG1haWxib3ggY29tbWFuZHMgZnJvbSB3aXRoaW4gdGhlIGRyaXZlci4gaW9jdGwoKQogICogaW50ZXJmYWNlIHVzaW5nIHRoZXNlIHJvdXRpbmVzIGNhbiBpc3N1ZSBwYXNzdGhydSBjb21tYW5kcy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwppbmRleCBmODc1ZTgxLi5iYmQxMGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwpAQCAtODkwLDcgKzg5MCw3IEBACiAgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQogICogQGNtZF90b19hYm9ydDoJCQlQcmV2aW91c2x5IGlzc3VlZCBjbWQgdG8gYmUgYWJvcnRlZAogICoKLSAqIE1GSSBmaXJtd2FyZSBjYW4gYWJvcnQgcHJldmlvdXNseSBpc3N1ZWQgQUVOIGNvbWFtbmQgKGF1dG9tYXRpYyBldmVudAorICogTUZJIGZpcm13YXJlIGNhbiBhYm9ydCBwcmV2aW91c2x5IGlzc3VlZCBBRU4gY29tbWFuZCAoYXV0b21hdGljIGV2ZW50CiAgKiBub3RpZmljYXRpb24pLiBUaGUgbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZCgpIGlzc3VlcyBzdWNoIGFib3J0CiAgKiBjbWQgYW5kIHdhaXRzIGZvciByZXR1cm4gc3RhdHVzLgogICogTWF4IHdhaXQgdGltZSBpcyBNRUdBU0FTX0lOVEVSTkFMX0NNRF9XQUlUX1RJTUUgc2VjcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL212c2FzL01ha2VmaWxlCmluZGV4IDUyYWM0MjYuLmZmYmY3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvTWFrZWZpbGUKQEAgLTIxLDkgKzIxLDcgQEAKICMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNwogIyBVU0EKIAotaWZlcSAoJChDT05GSUdfU0NTSV9NVlNBU19ERUJVRykseSkKLQlFWFRSQV9DRkxBR1MgKz0gLURNVl9ERUJVRwotZW5kaWYKK2NjZmxhZ3MtJChDT05GSUdfU0NTSV9NVlNBU19ERUJVRykgOj0gLURNVl9ERUJVRwogCiBvYmotJChDT05GSUdfU0NTSV9NVlNBUykgKz0gbXZzYXMubwogbXZzYXMteSArPSAgbXZfaW5pdC5vICBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NzdC5jIGIvZHJpdmVycy9zY3NpL29zc3QuYwppbmRleCA1NGRlMWQxLi41MjFlMjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvb3NzdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKQEAgLTE0ODQsNyArMTQ4NCw3IEBACiAJaW50CQkJZGJnICAgICAgICAgICAgICA9IGRlYnVnZ2luZzsKICNlbmRpZgogCi0JaWYgKChidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXZtYWxsb2MoKG5mcmFtZXMgKyAxKSAqIE9TX0RBVEFfU0laRSkpID09IE5VTEwpCisJaWYgKChidWZmZXIgPSB2bWFsbG9jKChuZnJhbWVzICsgMSkgKiBPU19EQVRBX1NJWkUpKSA9PSBOVUxMKQogCQlyZXR1cm4gKC1FSU8pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6STogUmVhZGluZyBiYWNrICVkIGZyYW1lcyBmcm9tIGRyaXZlIGJ1ZmZlciVzXG4iLApAQCAtMjI5Niw3ICsyMjk2LDcgQEAKIAlpZiAoU1RwLT5yYXcpIHJldHVybiAwOwogCiAJaWYgKFNUcC0+aGVhZGVyX2NhY2hlID09IE5VTEwpIHsKLQkJaWYgKChTVHAtPmhlYWRlcl9jYWNoZSA9IChvc19oZWFkZXJfdCAqKXZtYWxsb2Moc2l6ZW9mKG9zX2hlYWRlcl90KSkpID09IE5VTEwpIHsKKwkJaWYgKChTVHAtPmhlYWRlcl9jYWNoZSA9IHZtYWxsb2Moc2l6ZW9mKG9zX2hlYWRlcl90KSkpID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6RTogRmFpbGVkIHRvIGFsbG9jYXRlIGhlYWRlciBjYWNoZVxuIiwgbmFtZSk7CiAJCQlyZXR1cm4gKC1FTk9NRU0pOwogCQl9CkBAIC0yNDg0LDcgKzI0ODQsNyBAQAogCQkJCSAgIG5hbWUsIHBwb3MsIHVwZGF0ZV9mcmFtZV9jbnRyKTsKICNlbmRpZgogCQlpZiAoU1RwLT5oZWFkZXJfY2FjaGUgPT0gTlVMTCkgewotCQkJaWYgKChTVHAtPmhlYWRlcl9jYWNoZSA9IChvc19oZWFkZXJfdCAqKXZtYWxsb2Moc2l6ZW9mKG9zX2hlYWRlcl90KSkpID09IE5VTEwpIHsKKwkJCWlmICgoU1RwLT5oZWFkZXJfY2FjaGUgPSB2bWFsbG9jKHNpemVvZihvc19oZWFkZXJfdCkpKSA9PSBOVUxMKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczpFOiBGYWlsZWQgdG8gYWxsb2NhdGUgaGVhZGVyIGNhY2hlXG4iLCBuYW1lKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KQEAgLTU4NTEsOSArNTg1MSw3IEBACiAJLyogaWYgdGhpcyBpcyB0aGUgZmlyc3QgYXR0YWNoLCBidWlsZCB0aGUgaW5mcmFzdHJ1Y3R1cmUgKi8KIAl3cml0ZV9sb2NrKCZvc19zY3NpX3RhcGVzX2xvY2spOwogCWlmIChvc19zY3NpX3RhcGVzID09IE5VTEwpIHsKLQkJb3Nfc2NzaV90YXBlcyA9Ci0JCQkoc3RydWN0IG9zc3RfdGFwZSAqKilrbWFsbG9jKG9zc3RfbWF4X2RldiAqIHNpemVvZihzdHJ1Y3Qgb3NzdF90YXBlICopLAotCQkJCSAgIEdGUF9BVE9NSUMpOworCQlvc19zY3NpX3RhcGVzID0ga21hbGxvYyhvc3N0X21heF9kZXYgKiBzaXplb2Yoc3RydWN0IG9zc3RfdGFwZSAqKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChvc19zY3NpX3RhcGVzID09IE5VTEwpIHsKIAkJCXdyaXRlX3VubG9jaygmb3Nfc2NzaV90YXBlc19sb2NrKTsKIAkJCXByaW50ayhLRVJOX0VSUiAib3NzdCA6RTogVW5hYmxlIHRvIGFsbG9jYXRlIGFycmF5IGZvciBPblN0cmVhbSBTQ1NJIHRhcGVzLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9NYWtlZmlsZQppbmRleCBlY2EzNzkwLi42ODNiZjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAKLUVYVFJBX0NGTEFHUwkJKz0gLUlkcml2ZXJzL3Njc2kKK2NjZmxhZ3MteQkJOj0gLUlkcml2ZXJzL3Njc2kKIAogIyAxNi1iaXQgY2xpZW50IGRyaXZlcnMKIG9iai0kKENPTkZJR19QQ01DSUFfUUxPR0lDKQkrPSBxbG9naWNfY3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCmluZGV4IDZmZmJlOTcuLjAzZTAyOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAJCQkJCSgoZGRiX2VudHJ5LT5kZWZhdWx0X3RpbWUyd2FpdCArCiAJCQkJCSAgNCkgKiBIWik7CiAKLQkJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiBkZGIgWyVkXSBpbml0YXRlIgorCQkJCURFQlVHMihwcmludGsoInNjc2klbGQ6IGRkYiBbJWRdIGluaXRpYXRlIgogCQkJCQkgICAgICAiIFJFTE9HSU4gYWZ0ZXIgJWQgc2Vjb25kc1xuIiwKIAkJCQkJICAgICAgaGEtPmhvc3Rfbm8sCiAJCQkJCSAgICAgIGRkYl9lbnRyeS0+ZndfZGRiX2luZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCAzZmMxZDI1Li45Njc4MzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtODEyLDcgKzgxMiw3IEBACiAJCQkJCSk7CiAJCQkJc3RhcnRfZHBjKys7CiAJCQkJREVCVUcocHJpbnRrKCJzY3NpJWxkOiVkOiVkOiBkZGIgWyVkXSAiCi0JCQkJCSAgICAgImluaXRhdGUgcmVsb2dpbiBhZnRlciIKKwkJCQkJICAgICAiaW5pdGlhdGUgcmVsb2dpbiBhZnRlciIKIAkJCQkJICAgICAiICVkIHNlY29uZHNcbiIsCiAJCQkJCSAgICAgaGEtPmhvc3Rfbm8sIGRkYl9lbnRyeS0+YnVzLAogCQkJCQkgICAgIGRkYl9lbnRyeS0+dGFyZ2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggOTkxZGUzYy4uNjMzYzIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0zLDE0ICszLDE0IEBACiAgKgogICogIFNDU0kgZXJyb3IvdGltZW91dCBoYW5kbGluZwogICogICAgICBJbml0aWFsIHZlcnNpb25zOiBFcmljIFlvdW5nZGFsZS4gIEJhc2VkIHVwb24gY29udmVyc2F0aW9ucyB3aXRoCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIExlb25hcmQgWnVia29mZiBhbmQgRGF2aWQgTWlsbGVyIGF0IExpbnV4IEV4cG8sIAorICogICAgICAgICAgICAgICAgICAgICAgICBMZW9uYXJkIFp1YmtvZmYgYW5kIERhdmlkIE1pbGxlciBhdCBMaW51eCBFeHBvLAogICogICAgICAgICAgICAgICAgICAgICAgICBpZGVhcyBvcmlnaW5hdGluZyBmcm9tIGFsbCBvdmVyIHRoZSBwbGFjZS4KICAqCiAgKglSZXN0cnVjdHVyZWQgc2NzaV91bmphbV9ob3N0IGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4KICAqCVNlcHRlbWJlciAwNCwgMjAwMiBNaWtlIEFuZGVyc29uIChhbmRtaWtlQHVzLmlibS5jb20pCiAgKgogICoJRm9yd2FyZCBwb3J0IG9mIFJ1c3NlbGwgS2luZydzIChybWtAYXJtLmxpbnV4Lm9yZy51aykgY2hhbmdlcyBhbmQKLSAqCW1pbm9yICBjbGVhbnVwcy4KKyAqCW1pbm9yIGNsZWFudXBzLgogICoJU2VwdGVtYmVyIDMwLCAyMDAyIE1pa2UgQW5kZXJzb24gKGFuZG1pa2VAdXMuaWJtLmNvbSkKICAqLwogCkBAIC0xMjksMTQgKzEyOSwxNSBAQAogewogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQgPSByZXEtPnNwZWNpYWw7CiAJZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIHJ0biA9IEJMS19FSF9OT1RfSEFORExFRDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gc2NtZC0+ZGV2aWNlLT5ob3N0OwogCiAJdHJhY2Vfc2NzaV9kaXNwYXRjaF9jbWRfdGltZW91dChzY21kKTsKIAlzY3NpX2xvZ19jb21wbGV0aW9uKHNjbWQsIFRJTUVPVVRfRVJST1IpOwogCi0JaWYgKHNjbWQtPmRldmljZS0+aG9zdC0+dHJhbnNwb3J0dC0+ZWhfdGltZWRfb3V0KQotCQlydG4gPSBzY21kLT5kZXZpY2UtPmhvc3QtPnRyYW5zcG9ydHQtPmVoX3RpbWVkX291dChzY21kKTsKLQllbHNlIGlmIChzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT5laF90aW1lZF9vdXQpCi0JCXJ0biA9IHNjbWQtPmRldmljZS0+aG9zdC0+aG9zdHQtPmVoX3RpbWVkX291dChzY21kKTsKKwlpZiAoaG9zdC0+dHJhbnNwb3J0dC0+ZWhfdGltZWRfb3V0KQorCQlydG4gPSBob3N0LT50cmFuc3BvcnR0LT5laF90aW1lZF9vdXQoc2NtZCk7CisJZWxzZSBpZiAoaG9zdC0+aG9zdHQtPmVoX3RpbWVkX291dCkKKwkJcnRuID0gaG9zdC0+aG9zdHQtPmVoX3RpbWVkX291dChzY21kKTsKIAogCWlmICh1bmxpa2VseShydG4gPT0gQkxLX0VIX05PVF9IQU5ETEVEICYmCiAJCSAgICAgIXNjc2lfZWhfc2NtZF9hZGQoc2NtZCwgU0NTSV9FSF9DQU5DRUxfQ01EKSkpIHsKQEAgLTE5NSw3ICsxOTYsNyBAQAogCQkJCSsrdG90YWxfZmFpbHVyZXM7CiAJCQkJaWYgKHNjbWQtPmVoX2VmbGFncyAmIFNDU0lfRUhfQ0FOQ0VMX0NNRCkKIAkJCQkJKytjbWRfY2FuY2VsOwotCQkJCWVsc2UgCisJCQkJZWxzZQogCQkJCQkrK2NtZF9mYWlsZWQ7CiAJCQl9CiAJCX0KQEAgLTIxNCw3ICsyMTUsNyBAQAogCiAJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMiwgcHJpbnRrKCJUb3RhbCBvZiAlZCBjb21tYW5kcyBvbiAlZCIKIAkJCQkJICAiIGRldmljZXMgcmVxdWlyZSBlaCB3b3JrXG4iLAotCQkJCSAgdG90YWxfZmFpbHVyZXMsIGRldmljZXNfZmFpbGVkKSk7CisJCQkJICAgdG90YWxfZmFpbHVyZXMsIGRldmljZXNfZmFpbGVkKSk7CiB9CiAjZW5kaWYKIApAQCAtMjk0LDcgKzI5NSw3IEBACiAJCQlyZXR1cm4gTkVFRFNfUkVUUlk7CiAJCX0KIAkJLyoKLQkJICogaWYgdGhlIGRldmljZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWNvbWluZyByZWFkeSwgd2UgCisJCSAqIGlmIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVjb21pbmcgcmVhZHksIHdlCiAJCSAqIHNob3VsZCByZXRyeS4KIAkJICovCiAJCWlmICgoc3NoZHIuYXNjID09IDB4MDQpICYmIChzc2hkci5hc2NxID09IDB4MDEpKQpAQCAtNDg4LDcgKzQ4OSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNjc2lfZWhfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewotCXN0cnVjdCBjb21wbGV0aW9uICAgICAqZWhfYWN0aW9uOworCXN0cnVjdCBjb21wbGV0aW9uICplaF9hY3Rpb247CiAKIAlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQlwcmludGsoIiVzIHNjbWQ6ICVwIHJlc3VsdDogJXhcbiIsCkBAIC01MDcsMjIgKzUwOCwyMyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJ0bjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gc2NtZC0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3R0ID0gaG9zdC0+aG9zdHQ7CiAKIAlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBTbmQgSG9zdCBSU1RcbiIsCiAJCQkJCSAgX19mdW5jX18pKTsKIAotCWlmICghc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+ZWhfaG9zdF9yZXNldF9oYW5kbGVyKQorCWlmICghaG9zdHQtPmVoX2hvc3RfcmVzZXRfaGFuZGxlcikKIAkJcmV0dXJuIEZBSUxFRDsKIAotCXJ0biA9IHNjbWQtPmRldmljZS0+aG9zdC0+aG9zdHQtPmVoX2hvc3RfcmVzZXRfaGFuZGxlcihzY21kKTsKKwlydG4gPSBob3N0dC0+ZWhfaG9zdF9yZXNldF9oYW5kbGVyKHNjbWQpOwogCiAJaWYgKHJ0biA9PSBTVUNDRVNTKSB7Ci0JCWlmICghc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+c2tpcF9zZXR0bGVfZGVsYXkpCisJCWlmICghaG9zdHQtPnNraXBfc2V0dGxlX2RlbGF5KQogCQkJc3NsZWVwKEhPU1RfUkVTRVRfU0VUVExFX1RJTUUpOwotCQlzcGluX2xvY2tfaXJxc2F2ZShzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlzY3NpX3JlcG9ydF9idXNfcmVzZXQoc2NtZC0+ZGV2aWNlLT5ob3N0LAotCQkJCSAgICAgIHNjbWRfY2hhbm5lbChzY21kKSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXNjc2lfcmVwb3J0X2J1c19yZXNldChob3N0LCBzY21kX2NoYW5uZWwoc2NtZCkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiBydG47CkBAIC01MzYsMjIgKzUzOCwyMyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJ0bjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gc2NtZC0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3R0ID0gaG9zdC0+aG9zdHQ7CiAKIAlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBTbmQgQnVzIFJTVFxuIiwKIAkJCQkJICBfX2Z1bmNfXykpOwogCi0JaWYgKCFzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT5laF9idXNfcmVzZXRfaGFuZGxlcikKKwlpZiAoIWhvc3R0LT5laF9idXNfcmVzZXRfaGFuZGxlcikKIAkJcmV0dXJuIEZBSUxFRDsKIAotCXJ0biA9IHNjbWQtPmRldmljZS0+aG9zdC0+aG9zdHQtPmVoX2J1c19yZXNldF9oYW5kbGVyKHNjbWQpOworCXJ0biA9IGhvc3R0LT5laF9idXNfcmVzZXRfaGFuZGxlcihzY21kKTsKIAogCWlmIChydG4gPT0gU1VDQ0VTUykgewotCQlpZiAoIXNjbWQtPmRldmljZS0+aG9zdC0+aG9zdHQtPnNraXBfc2V0dGxlX2RlbGF5KQorCQlpZiAoIWhvc3R0LT5za2lwX3NldHRsZV9kZWxheSkKIAkJCXNzbGVlcChCVVNfUkVTRVRfU0VUVExFX1RJTUUpOwotCQlzcGluX2xvY2tfaXJxc2F2ZShzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlzY3NpX3JlcG9ydF9idXNfcmVzZXQoc2NtZC0+ZGV2aWNlLT5ob3N0LAotCQkJCSAgICAgIHNjbWRfY2hhbm5lbChzY21kKSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXNjc2lfcmVwb3J0X2J1c19yZXNldChob3N0LCBzY21kX2NoYW5uZWwoc2NtZCkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiBydG47CkBAIC01NzcsMTYgKzU4MCwxOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJ0bjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gc2NtZC0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3R0ID0gaG9zdC0+aG9zdHQ7CiAKLQlpZiAoIXNjbWQtPmRldmljZS0+aG9zdC0+aG9zdHQtPmVoX3RhcmdldF9yZXNldF9oYW5kbGVyKQorCWlmICghaG9zdHQtPmVoX3RhcmdldF9yZXNldF9oYW5kbGVyKQogCQlyZXR1cm4gRkFJTEVEOwogCi0JcnRuID0gc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+ZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIoc2NtZCk7CisJcnRuID0gaG9zdHQtPmVoX3RhcmdldF9yZXNldF9oYW5kbGVyKHNjbWQpOwogCWlmIChydG4gPT0gU1VDQ0VTUykgewotCQlzcGluX2xvY2tfaXJxc2F2ZShzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJX19zdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShzY3NpX3RhcmdldChzY21kLT5kZXZpY2UpLCBOVUxMLAogCQkJCQkgIF9fc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiBydG47CkBAIC02MDUsMjcgKzYxMCwyOCBAQAogc3RhdGljIGludCBzY3NpX3RyeV9idXNfZGV2aWNlX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7CiAJaW50IHJ0bjsKKwlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0dCA9IHNjbWQtPmRldmljZS0+aG9zdC0+aG9zdHQ7CiAKLQlpZiAoIXNjbWQtPmRldmljZS0+aG9zdC0+aG9zdHQtPmVoX2RldmljZV9yZXNldF9oYW5kbGVyKQorCWlmICghaG9zdHQtPmVoX2RldmljZV9yZXNldF9oYW5kbGVyKQogCQlyZXR1cm4gRkFJTEVEOwogCi0JcnRuID0gc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+ZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc2NtZCk7CisJcnRuID0gaG9zdHQtPmVoX2RldmljZV9yZXNldF9oYW5kbGVyKHNjbWQpOwogCWlmIChydG4gPT0gU1VDQ0VTUykKIAkJX19zY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoc2NtZC0+ZGV2aWNlLCBOVUxMKTsKIAlyZXR1cm4gcnRuOwogfQogCi1zdGF0aWMgaW50IHNjc2lfdHJ5X3RvX2Fib3J0X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQorc3RhdGljIGludCBzY3NpX3RyeV90b19hYm9ydF9jbWQoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdHQsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7Ci0JaWYgKCFzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT5laF9hYm9ydF9oYW5kbGVyKQorCWlmICghaG9zdHQtPmVoX2Fib3J0X2hhbmRsZXIpCiAJCXJldHVybiBGQUlMRUQ7CiAKLQlyZXR1cm4gc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+ZWhfYWJvcnRfaGFuZGxlcihzY21kKTsKKwlyZXR1cm4gaG9zdHQtPmVoX2Fib3J0X2hhbmRsZXIoc2NtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjc2lfYWJvcnRfZWhfY21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewotCWlmIChzY3NpX3RyeV90b19hYm9ydF9jbWQoc2NtZCkgIT0gU1VDQ0VTUykKKwlpZiAoc2NzaV90cnlfdG9fYWJvcnRfY21kKHNjbWQtPmRldmljZS0+aG9zdC0+aG9zdHQsIHNjbWQpICE9IFNVQ0NFU1MpCiAJCWlmIChzY3NpX3RyeV9idXNfZGV2aWNlX3Jlc2V0KHNjbWQpICE9IFNVQ0NFU1MpCiAJCQlpZiAoc2NzaV90cnlfdGFyZ2V0X3Jlc2V0KHNjbWQpICE9IFNVQ0NFU1MpCiAJCQkJaWYgKHNjc2lfdHJ5X2J1c19yZXNldChzY21kKSAhPSBTVUNDRVNTKQpAQCAtODQ2LDcgKzg1Miw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgICBTZWUgaWYgd2UgbmVlZCB0byByZXF1ZXN0IHNlbnNlIGluZm9ybWF0aW9uLiAgaWYgc28sIHRoZW4gZ2V0IGl0Ci0gKiAgICBub3csIHNvIHdlIGhhdmUgYSBiZXR0ZXIgaWRlYSBvZiB3aGF0IHRvIGRvLiAgCisgKiAgICBub3csIHNvIHdlIGhhdmUgYSBiZXR0ZXIgaWRlYSBvZiB3aGF0IHRvIGRvLgogICoKICAqIE5vdGVzOgogICogICAgVGhpcyBoYXMgdGhlIHVuZm9ydHVuYXRlIHNpZGUgZWZmZWN0IHRoYXQgaWYgYSBzaG9zdCBhZGFwdGVyIGRvZXMKQEAgLTk1OCw3ICs5NjQsNyBAQAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBhYm9ydGluZyBjbWQ6IgogCQkJCQkJICAiMHglcFxuIiwgY3VycmVudC0+Y29tbSwKIAkJCQkJCSAgc2NtZCkpOwotCQlydG4gPSBzY3NpX3RyeV90b19hYm9ydF9jbWQoc2NtZCk7CisJCXJ0biA9IHNjc2lfdHJ5X3RvX2Fib3J0X2NtZChzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LCBzY21kKTsKIAkJaWYgKHJ0biA9PSBTVUNDRVNTIHx8IHJ0biA9PSBGQVNUX0lPX0ZBSUwpIHsKIAkJCXNjbWQtPmVoX2VmbGFncyAmPSB+U0NTSV9FSF9DQU5DRUxfQ01EOwogCQkJaWYgKCFzY3NpX2RldmljZV9vbmxpbmUoc2NtZC0+ZGV2aWNlKSB8fApAQCAtOTY2LDcgKzk3Miw2IEBACiAJCQkgICAgIXNjc2lfZWhfdHVyKHNjbWQpKSB7CiAJCQkJc2NzaV9laF9maW5pc2hfY21kKHNjbWQsIGRvbmVfcSk7CiAJCQl9Ci0JCQkJCiAJCX0gZWxzZQogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgcHJpbnRrKCIlczogYWJvcnRpbmciCiAJCQkJCQkJICAiIGNtZCBmYWlsZWQ6IgpAQCAtMTAxMCw3ICsxMDE1LDcgQEAKICAqCiAgKiBOb3RlczoKICAqICAgIElmIGNvbW1hbmRzIGFyZSBmYWlsaW5nIGR1ZSB0byBub3QgcmVhZHksIGluaXRpYWxpemluZyBjb21tYW5kIHJlcXVpcmVkLAotICoJdHJ5IHJldmFsaWRhdGluZyB0aGUgZGV2aWNlLCB3aGljaCB3aWxsIGVuZCB1cCBzZW5kaW5nIGEgc3RhcnQgdW5pdC4gCisgKgl0cnkgcmV2YWxpZGF0aW5nIHRoZSBkZXZpY2UsIHdoaWNoIHdpbGwgZW5kIHVwIHNlbmRpbmcgYSBzdGFydCB1bml0LgogICovCiBzdGF0aWMgaW50IHNjc2lfZWhfc3R1KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqd29ya19xLApAQCAtMTA2NCw3ICsxMDY5LDcgQEAKICAqICAgIFRyeSBhIGJ1cyBkZXZpY2UgcmVzZXQuICBTdGlsbCwgbG9vayB0byBzZWUgd2hldGhlciB3ZSBoYXZlIG11bHRpcGxlCiAgKiAgICBkZXZpY2VzIHRoYXQgYXJlIGphbW1lZCBvciBub3QgLSBpZiB3ZSBoYXZlIG11bHRpcGxlIGRldmljZXMsIGl0CiAgKiAgICBtYWtlcyBubyBzZW5zZSB0byB0cnkgYnVzX2RldmljZV9yZXNldCAtIHdlIHJlYWxseSB3b3VsZCBuZWVkIHRvIHRyeQotICogICAgYSBidXNfcmVzZXQgaW5zdGVhZC4gCisgKiAgICBhIGJ1c19yZXNldCBpbnN0ZWFkLgogICovCiBzdGF0aWMgaW50IHNjc2lfZWhfYnVzX2RldmljZV9yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKIAkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqd29ya19xLApAQCAtMTE2NCw3ICsxMTY5LDcgQEAKIH0KIAogLyoqCi0gKiBzY3NpX2VoX2J1c19yZXNldCAtIHNlbmQgYSBidXMgcmVzZXQgCisgKiBzY3NpX2VoX2J1c19yZXNldCAtIHNlbmQgYSBidXMgcmVzZXQKICAqIEBzaG9zdDoJJnNjc2kgaG9zdCBiZWluZyByZWNvdmVyZWQuCiAgKiBAd29ya19xOiAgICAgJmxpc3RfaGVhZCBmb3IgcGVuZGluZyBjb21tYW5kcy4KICAqIEBkb25lX3E6CSZsaXN0X2hlYWQgZm9yIHByb2Nlc3NlZCBjb21tYW5kcy4KQEAgLTExODEsNyArMTE4Niw3IEBACiAJICogd2UgcmVhbGx5IHdhbnQgdG8gbG9vcCBvdmVyIHRoZSB2YXJpb3VzIGNoYW5uZWxzLCBhbmQgZG8gdGhpcyBvbgogCSAqIGEgY2hhbm5lbCBieSBjaGFubmVsIGJhc2lzLiAgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdG8gc2VlIGlmIGFueQogCSAqIG9mIHRoZSBmYWlsZWQgY29tbWFuZHMgYXJlIG9uIHNvZnRfcmVzZXQgZGV2aWNlcywgYW5kIGlmIHNvLCBza2lwCi0JICogdGhlIHJlc2V0LiAgCisJICogdGhlIHJlc2V0LgogCSAqLwogCiAJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8PSBzaG9zdC0+bWF4X2NoYW5uZWw7IGNoYW5uZWwrKykgewpAQCAtMTIyMyw3ICsxMjI4LDcgQEAKIH0KIAogLyoqCi0gKiBzY3NpX2VoX2hvc3RfcmVzZXQgLSBzZW5kIGEgaG9zdCByZXNldCAKKyAqIHNjc2lfZWhfaG9zdF9yZXNldCAtIHNlbmQgYSBob3N0IHJlc2V0CiAgKiBAd29ya19xOglsaXN0X2hlYWQgZm9yIHByb2Nlc3NlZCBjb21tYW5kcy4KICAqIEBkb25lX3E6CWxpc3RfaGVhZCBmb3IgcHJvY2Vzc2VkIGNvbW1hbmRzLgogICovCkBAIC0xMzc2LDcgKzEzODEsNyBAQAogCQlyZXR1cm4gU1VDQ0VTUzsKIAkJLyoKIAkJICogd2hlbiB0aGUgbG93IGxldmVsIGRyaXZlciByZXR1cm5zIGRpZF9zb2Z0X2Vycm9yLAotCQkgKiBpdCBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyBhbiBpbnRlcm5hbCByZXRyeSBjb3VudGVyIAorCQkgKiBpdCBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyBhbiBpbnRlcm5hbCByZXRyeSBjb3VudGVyCiAJCSAqIGluIG9yZGVyIHRvIGF2b2lkIGVuZGxlc3MgbG9vcHMgKGRiKQogCQkgKgogCQkgKiBhY3R1YWxseSB0aGlzIGlzIGEgYnVnIGluIHRoaXMgZnVuY3Rpb24gaGVyZS4gIHdlIHNob3VsZApAQCAtMTQxNCw3ICsxNDE5LDYgQEAKIAkJCSAqLwogCQkJYnJlYWs7CiAJCS8qIGZhbGx0aHJvdWdoICovCi0KIAljYXNlIERJRF9CVVNfQlVTWToKIAljYXNlIERJRF9QQVJJVFk6CiAJCWdvdG8gbWF5YmVfcmV0cnk7CkBAIC0xOTgyLDcgKzE5ODYsNyBAQAogCQlpZiAoc2JfbGVuID4gNykKIAkJCXNzaGRyLT5hZGRpdGlvbmFsX2xlbmd0aCA9IHNlbnNlX2J1ZmZlcls3XTsKIAl9IGVsc2UgewotCQkvKiAKKwkJLyoKIAkJICogZml4ZWQgZm9ybWF0CiAJCSAqLwogCQlpZiAoc2JfbGVuID4gMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggM2JlNWRiNS4uN2ZmNjFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTU5Nyw2ICs1OTcsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6CisJCXJldCA9IEJMS1BSRVBfS0lMTDsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCBiYjIzM2E5Yy4uZmMxNGI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3NwaS9LY29uZmlnCkBAIC01Myw2ICs1MywxMiBAQAogCiBjb21tZW50ICJTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycyIKIAorY29uZmlnIFNQSV9BTFRFUkEKKwl0cmlzdGF0ZSAiQWx0ZXJhIFNQSSBDb250cm9sbGVyIgorCXNlbGVjdCBTUElfQklUQkFORworCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEFsdGVyYSBTUEkgQ29udHJvbGxlci4KKwogY29uZmlnIFNQSV9BVEg3OQogCXRyaXN0YXRlICJBdGhlcm9zIEFSNzFYWC9BUjcyNFgvQVI5MTNYIFNQSSBjb250cm9sbGVyIGRyaXZlciIKIAlkZXBlbmRzIG9uIEFUSDc5ICYmIEdFTkVSSUNfR1BJTwpAQCAtMTYxLDEzICsxNjcsMTMgQEAKIAlkZWZfYm9vbCB5IGlmIFNPQ19JTVgyMSB8fCBTT0NfSU1YMjcKIAogY29uZmlnIFNQSV9JTVhfVkVSXzBfNAotCWRlZl9ib29sIHkgaWYgQVJDSF9NWDMxCisJZGVmX2Jvb2wgeSBpZiBTT0NfSU1YMzEKIAogY29uZmlnIFNQSV9JTVhfVkVSXzBfNwotCWRlZl9ib29sIHkgaWYgQVJDSF9NWDI1IHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YNTEgfHwgQVJDSF9NWDUzCisJZGVmX2Jvb2wgeSBpZiBBUkNIX01YMjUgfHwgU09DX0lNWDM1IHx8IFNPQ19JTVg1MSB8fCBTT0NfSU1YNTMKIAogY29uZmlnIFNQSV9JTVhfVkVSXzJfMwotCWRlZl9ib29sIHkgaWYgQVJDSF9NWDUxIHx8IEFSQ0hfTVg1MworCWRlZl9ib29sIHkgaWYgU09DX0lNWDUxIHx8IFNPQ19JTVg1MwogCiBjb25maWcgU1BJX0lNWAogCXRyaXN0YXRlICJGcmVlc2NhbGUgaS5NWCBTUEkgY29udHJvbGxlcnMiCkBAIC0yMzEsNiArMjM3LDEzIEBACiAJICBGcm9tIE1QQzg1MzYsIDg1eHggcGxhdGZvcm0gdXNlcyB0aGUgY29udHJvbGxlciwgYW5kIGFsbCBQMTB4eCwKIAkgIFAyMHh4LCBQMzB4eCxQNDB4eCwgUDUweHggdXNlcyB0aGlzIGNvbnRyb2xsZXIuCiAKK2NvbmZpZyBTUElfT0NfVElOWQorCXRyaXN0YXRlICJPcGVuQ29yZXMgdGlueSBTUEkiCisJZGVwZW5kcyBvbiBHRU5FUklDX0dQSU8KKwlzZWxlY3QgU1BJX0JJVEJBTkcKKwloZWxwCisJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIE9wZW5Db3JlcyB0aW55IFNQSSBtYXN0ZXIgY29udHJvbGxlci4KKwogY29uZmlnIFNQSV9PTUFQX1VXSVJFCiAJdHJpc3RhdGUgIk9NQVAxIE1pY3JvV2lyZSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKQEAgLTMzMCw2ICszNDMsMTIgQEAKIAloZWxwCiAJICBTUEkgZHJpdmVyIGZvciBTdXBlckggTVNJT0YgYmxvY2tzLgogCitjb25maWcgU1BJX1NICisJdHJpc3RhdGUgIlN1cGVySCBTUEkgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFNVUEVSSAorCWhlbHAKKwkgIFNQSSBkcml2ZXIgZm9yIFN1cGVySCBTUEkgYmxvY2tzLgorCiBjb25maWcgU1BJX1NIX1NDSQogCXRyaXN0YXRlICJTdXBlckggU0NJIFNQSSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gU1VQRVJICkBAIC0zNTAsNiArMzY5LDE2IEBACiAJaGVscAogCSAgU1BJIGRyaXZlciBmb3IgTlZpZGlhIFRlZ3JhIFNvQ3MKIAorY29uZmlnIFNQSV9USV9TU1AKKwl0cmlzdGF0ZSAiVEkgU2VxdWVuY2VyIFNlcmlhbCBQb3J0IC0gU1BJIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBNRkRfVElfU1NQCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIGFuIFNQSSBtYXN0ZXIgaW1wbGVtZW50YXRpb24gdXNpbmcgYSBUSSBzZXF1ZW5jZXIKKwkgIHNlcmlhbCBwb3J0LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aS1zc3Atc3BpLgorCiBjb25maWcgU1BJX1RPUENMSUZGX1BDSAogCXRyaXN0YXRlICJUb3BjbGlmZiBQQ0ggU1BJIENvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggODZkMWI1Zi4uZmQyZmM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBvYmotJChDT05GSUdfU1BJX01BU1RFUikJCSs9IHNwaS5vCiAKICMgU1BJIG1hc3RlciBjb250cm9sbGVyIGRyaXZlcnMgKGJ1cykKK29iai0kKENPTkZJR19TUElfQUxURVJBKQkJKz0gc3BpX2FsdGVyYS5vCiBvYmotJChDT05GSUdfU1BJX0FUTUVMKQkJCSs9IGF0bWVsX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0FUSDc5KQkJCSs9IGF0aDc5X3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0JGSU4pCQkJKz0gc3BpX2JmaW41eHgubwpAQCAtMjcsNiArMjgsNyBAQAogb2JqLSQoQ09ORklHX1NQSV9MTTcwX0xMUCkJCSs9IHNwaV9sbTcwbGxwLm8KIG9iai0kKENPTkZJR19TUElfUFhBMlhYKQkJKz0gcHhhMnh4X3NwaS5vCiBvYmotJChDT05GSUdfU1BJX1BYQTJYWF9QQ0kpCQkrPSBweGEyeHhfc3BpX3BjaS5vCitvYmotJChDT05GSUdfU1BJX09DX1RJTlkpCQkrPSBzcGlfb2NfdGlueS5vCiBvYmotJChDT05GSUdfU1BJX09NQVBfVVdJUkUpCQkrPSBvbWFwX3V3aXJlLm8KIG9iai0kKENPTkZJR19TUElfT01BUDI0WFgpCQkrPSBvbWFwMl9tY3NwaS5vCiBvYmotJChDT05GSUdfU1BJX09NQVBfMTAwSykJCSs9IG9tYXBfc3BpXzEwMGsubwpAQCAtNDMsOSArNDUsMTEgQEAKIG9iai0kKENPTkZJR19TUElfUzNDMjRYWCkJCSs9IHNwaV9zM2MyNHh4X2h3Lm8KIG9iai0kKENPTkZJR19TUElfUzNDNjRYWCkJCSs9IHNwaV9zM2M2NHh4Lm8KIG9iai0kKENPTkZJR19TUElfVEVHUkEpCQkJKz0gc3BpX3RlZ3JhLm8KK29iai0kKENPTkZJR19TUElfVElfU1NQKQkJKz0gdGktc3NwLXNwaS5vCiBvYmotJChDT05GSUdfU1BJX1RPUENMSUZGX1BDSCkJCSs9IHNwaV90b3BjbGlmZl9wY2gubwogb2JqLSQoQ09ORklHX1NQSV9UWFg5KQkJCSs9IHNwaV90eHg5Lm8KIG9iai0kKENPTkZJR19TUElfWElMSU5YKQkJKz0geGlsaW54X3NwaS5vCitvYmotJChDT05GSUdfU1BJX1NIKQkJCSs9IHNwaV9zaC5vCiBvYmotJChDT05GSUdfU1BJX1NIX1NDSSkJCSs9IHNwaV9zaF9zY2kubwogb2JqLSQoQ09ORklHX1NQSV9TSF9NU0lPRikJCSs9IHNwaV9zaF9tc2lvZi5vCiBvYmotJChDT05GSUdfU1BJX1NUTVAzWFhYKQkJKz0gc3BpX3N0bXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCmluZGV4IDk1ZTU4YzcuLjVjMmIwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYworKysgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKQEAgLTMyOSwxNSArMzI5LDE2IEBACiAvKioKICAqIHN0cnVjdCBwbDAyMiAtIFRoaXMgaXMgdGhlIHByaXZhdGUgU1NQIGRyaXZlciBkYXRhIHN0cnVjdHVyZQogICogQGFkZXY6IEFNQkEgZGV2aWNlIG1vZGVsIGhvb2t1cAotICogQHZlbmRvcjogVmVuZG9yIGRhdGEgZm9yIHRoZSBJUCBibG9jawotICogQHBoeWJhc2U6IFRoZSBwaHlzaWNhbCBtZW1vcnkgd2hlcmUgdGhlIFNTUCBkZXZpY2UgcmVzaWRlcwotICogQHZpcnRiYXNlOiBUaGUgdmlydHVhbCBtZW1vcnkgd2hlcmUgdGhlIFNTUCBpcyBtYXBwZWQKKyAqIEB2ZW5kb3I6IHZlbmRvciBkYXRhIGZvciB0aGUgSVAgYmxvY2sKKyAqIEBwaHliYXNlOiB0aGUgcGh5c2ljYWwgbWVtb3J5IHdoZXJlIHRoZSBTU1AgZGV2aWNlIHJlc2lkZXMKKyAqIEB2aXJ0YmFzZTogdGhlIHZpcnR1YWwgbWVtb3J5IHdoZXJlIHRoZSBTU1AgaXMgbWFwcGVkCisgKiBAY2xrOiBvdXRnb2luZyBjbG9jayAiU1BJQ0xLIiBmb3IgdGhlIFNQSSBidXMKICAqIEBtYXN0ZXI6IFNQSSBmcmFtZXdvcmsgaG9va3VwCiAgKiBAbWFzdGVyX2luZm86IGNvbnRyb2xsZXItc3BlY2lmaWMgZGF0YSBmcm9tIG1hY2hpbmUgc2V0dXAKLSAqIEByZWdzOiBTU1AgY29udHJvbGxlciByZWdpc3RlcidzIHZpcnR1YWwgYWRkcmVzcwotICogQHB1bXBfbWVzc2FnZXM6IFdvcmsgc3RydWN0IGZvciBzY2hlZHVsaW5nIHdvcmsgdG8gdGhlIHdvcmtxdWV1ZQotICogQGxvY2s6IHNwaW5sb2NrIHRvIHN5bmNyb25pc2UgYWNjZXNzIHRvIGRyaXZlciBkYXRhCiAgKiBAd29ya3F1ZXVlOiBhIHdvcmtxdWV1ZSBvbiB3aGljaCBhbnkgc3BpX21lc3NhZ2UgcmVxdWVzdCBpcyBxdWV1ZWQKKyAqIEBwdW1wX21lc3NhZ2VzOiB3b3JrIHN0cnVjdCBmb3Igc2NoZWR1bGluZyB3b3JrIHRvIHRoZSB3b3JrcXVldWUKKyAqIEBxdWV1ZV9sb2NrOiBzcGlubG9jayB0byBzeW5jcm9uaXNlIGFjY2VzcyB0byBtZXNzYWdlIHF1ZXVlCisgKiBAcXVldWU6IG1lc3NhZ2UgcXVldWUKICAqIEBidXN5OiB3b3JrcXVldWUgaXMgYnVzeQogICogQHJ1bm5pbmc6IHdvcmtxdWV1ZSBpcyBydW5uaW5nCiAgKiBAcHVtcF90cmFuc2ZlcnM6IFRhc2tsZXQgdXNlZCBpbiBJbnRlcnJ1cHQgVHJhbnNmZXIgbW9kZQpAQCAtMzQ4LDggKzM0OSwxNCBAQAogICogQHR4X2VuZDogZW5kIHBvc2l0aW9uIGluIFRYIGJ1ZmZlciB0byBiZSByZWFkCiAgKiBAcng6IGN1cnJlbnQgcG9zaXRpb24gaW4gUlggYnVmZmVyIHRvIGJlIHdyaXR0ZW4KICAqIEByeF9lbmQ6IGVuZCBwb3NpdGlvbiBpbiBSWCBidWZmZXIgdG8gYmUgd3JpdHRlbgotICogQHJlYWRpbmd0eXBlOiB0aGUgdHlwZSBvZiByZWFkIGN1cnJlbnRseSBnb2luZyBvbgotICogQHdyaXRpbmd0eXBlOiB0aGUgdHlwZSBvciB3cml0ZSBjdXJyZW50bHkgZ29pbmcgb24KKyAqIEByZWFkOiB0aGUgdHlwZSBvZiByZWFkIGN1cnJlbnRseSBnb2luZyBvbgorICogQHdyaXRlOiB0aGUgdHlwZSBvZiB3cml0ZSBjdXJyZW50bHkgZ29pbmcgb24KKyAqIEBleHBfZmlmb19sZXZlbDogZXhwZWN0ZWQgRklGTyBsZXZlbAorICogQGRtYV9yeF9jaGFubmVsOiBvcHRpb25hbCBjaGFubmVsIGZvciBSWCBETUEKKyAqIEBkbWFfdHhfY2hhbm5lbDogb3B0aW9uYWwgY2hhbm5lbCBmb3IgVFggRE1BCisgKiBAc2d0X3J4OiBzY2F0dGVydGFibGUgZm9yIHRoZSBSWCB0cmFuc2ZlcgorICogQHNndF90eDogc2NhdHRlcnRhYmxlIGZvciB0aGUgVFggdHJhbnNmZXIKKyAqIEBkdW1teXBhZ2U6IGEgZHVtbXkgcGFnZSB1c2VkIGZvciBkcml2aW5nIGRhdGEgb24gdGhlIGJ1cyB3aXRoIERNQQogICovCiBzdHJ1Y3QgcGwwMjIgewogCXN0cnVjdCBhbWJhX2RldmljZQkJKmFkZXY7CkBAIC0zOTcsOCArNDA0LDggQEAKICAqIEBjcHNyOiBWYWx1ZSBvZiBDbG9jayBwcmVzY2FsZSByZWdpc3RlcgogICogQG5fYnl0ZXM6IGhvdyBtYW55IGJ5dGVzKHBvd2VyIG9mIDIpIHJlcWQgZm9yIGEgZ2l2ZW4gZGF0YSB3aWR0aCBvZiBjbGllbnQKICAqIEBlbmFibGVfZG1hOiBXaGV0aGVyIHRvIGVuYWJsZSBETUEgb3Igbm90Ci0gKiBAd3JpdGU6IGZ1bmN0aW9uIHB0ciB0byBiZSB1c2VkIHRvIHdyaXRlIHdoZW4gZG9pbmcgeGZlciBmb3IgdGhpcyBjaGlwCiAgKiBAcmVhZDogZnVuY3Rpb24gcHRyIHRvIGJlIHVzZWQgdG8gcmVhZCB3aGVuIGRvaW5nIHhmZXIgZm9yIHRoaXMgY2hpcAorICogQHdyaXRlOiBmdW5jdGlvbiBwdHIgdG8gYmUgdXNlZCB0byB3cml0ZSB3aGVuIGRvaW5nIHhmZXIgZm9yIHRoaXMgY2hpcAogICogQGNzX2NvbnRyb2w6IGNoaXAgc2VsZWN0IGNhbGxiYWNrIHByb3ZpZGVkIGJ5IGNoaXAKICAqIEB4ZmVyX3R5cGU6IHBvbGxpbmcvaW50ZXJydXB0L0RNQQogICoKQEAgLTUwOCw5ICs1MTUsMTAgQEAKIAltc2ctPnN0YXRlID0gTlVMTDsKIAlpZiAobXNnLT5jb21wbGV0ZSkKIAkJbXNnLT5jb21wbGV0ZShtc2ctPmNvbnRleHQpOwotCS8qIFRoaXMgbWVzc2FnZSBpcyBjb21wbGV0ZWQsIHNvIGxldCdzIHR1cm4gb2ZmIHRoZSBjbG9ja3MhICovCisJLyogVGhpcyBtZXNzYWdlIGlzIGNvbXBsZXRlZCwgc28gbGV0J3MgdHVybiBvZmYgdGhlIGNsb2NrcyAmIHBvd2VyICovCiAJY2xrX2Rpc2FibGUocGwwMjItPmNsayk7CiAJYW1iYV9wY2xrX2Rpc2FibGUocGwwMjItPmFkZXYpOworCWFtYmFfdmNvcmVfZGlzYWJsZShwbDAyMi0+YWRldik7CiB9CiAKIC8qKgpAQCAtOTE3LDcgKzkyNSw2IEBACiAJc3RydWN0IGRtYV9jaGFuICp0eGNoYW4gPSBwbDAyMi0+ZG1hX3R4X2NoYW5uZWw7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpyeGRlc2M7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGRlc2M7Ci0JZG1hX2Nvb2tpZV90IGNvb2tpZTsKIAogCS8qIENoZWNrIHRoYXQgdGhlIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUgKi8KIAlpZiAoIXJ4Y2hhbiB8fCAhdHhjaGFuKQpAQCAtOTYyLDEwICs5NjksOCBAQAogCQl0eF9jb25mLmRzdF9hZGRyX3dpZHRoID0gcnhfY29uZi5zcmNfYWRkcl93aWR0aDsKIAlCVUdfT04ocnhfY29uZi5zcmNfYWRkcl93aWR0aCAhPSB0eF9jb25mLmRzdF9hZGRyX3dpZHRoKTsKIAotCXJ4Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfY29udHJvbChyeGNoYW4sIERNQV9TTEFWRV9DT05GSUcsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSAmcnhfY29uZik7Ci0JdHhjaGFuLT5kZXZpY2UtPmRldmljZV9jb250cm9sKHR4Y2hhbiwgRE1BX1NMQVZFX0NPTkZJRywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpICZ0eF9jb25mKTsKKwlkbWFlbmdpbmVfc2xhdmVfY29uZmlnKHJ4Y2hhbiwgJnJ4X2NvbmYpOworCWRtYWVuZ2luZV9zbGF2ZV9jb25maWcodHhjaGFuLCAmdHhfY29uZik7CiAKIAkvKiBDcmVhdGUgc2dsaXN0cyBmb3IgdGhlIHRyYW5zZmVycyAqLwogCXBhZ2VzID0gKHBsMDIyLT5jdXJfdHJhbnNmZXItPmxlbiA+PiBQQUdFX1NISUZUKSArIDE7CkBAIC0xMDE4LDIzICsxMDIzLDE3IEBACiAJcnhkZXNjLT5jYWxsYmFja19wYXJhbSA9IHBsMDIyOwogCiAJLyogU3VibWl0IGFuZCBmaXJlIFJYIGFuZCBUWCB3aXRoIFRYIGxhc3Qgc28gd2UncmUgcmVhZHkgdG8gcmVhZCEgKi8KLQljb29raWUgPSByeGRlc2MtPnR4X3N1Ym1pdChyeGRlc2MpOwotCWlmIChkbWFfc3VibWl0X2Vycm9yKGNvb2tpZSkpCi0JCWdvdG8gZXJyX3N1Ym1pdF9yeDsKLQljb29raWUgPSB0eGRlc2MtPnR4X3N1Ym1pdCh0eGRlc2MpOwotCWlmIChkbWFfc3VibWl0X2Vycm9yKGNvb2tpZSkpCi0JCWdvdG8gZXJyX3N1Ym1pdF90eDsKLQlyeGNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcocnhjaGFuKTsKLQl0eGNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcodHhjaGFuKTsKKwlkbWFlbmdpbmVfc3VibWl0KHJ4ZGVzYyk7CisJZG1hZW5naW5lX3N1Ym1pdCh0eGRlc2MpOworCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHJ4Y2hhbik7CisJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcodHhjaGFuKTsKIAogCXJldHVybiAwOwogCi1lcnJfc3VibWl0X3R4OgotZXJyX3N1Ym1pdF9yeDoKIGVycl90eGRlc2M6Ci0JdHhjaGFuLT5kZXZpY2UtPmRldmljZV9jb250cm9sKHR4Y2hhbiwgRE1BX1RFUk1JTkFURV9BTEwsIDApOworCWRtYWVuZ2luZV90ZXJtaW5hdGVfYWxsKHR4Y2hhbik7CiBlcnJfcnhkZXNjOgotCXJ4Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfY29udHJvbChyeGNoYW4sIERNQV9URVJNSU5BVEVfQUxMLCAwKTsKKwlkbWFlbmdpbmVfdGVybWluYXRlX2FsbChyeGNoYW4pOwogCWRtYV91bm1hcF9zZyh0eGNoYW4tPmRldmljZS0+ZGV2LCBwbDAyMi0+c2d0X3R4LnNnbCwKIAkJICAgICBwbDAyMi0+c2d0X3R4Lm5lbnRzLCBETUFfVE9fREVWSUNFKTsKIGVycl90eF9zZ21hcDoKQEAgLTExMDEsOCArMTEwMCw4IEBACiAJc3RydWN0IGRtYV9jaGFuICpyeGNoYW4gPSBwbDAyMi0+ZG1hX3J4X2NoYW5uZWw7CiAJc3RydWN0IGRtYV9jaGFuICp0eGNoYW4gPSBwbDAyMi0+ZG1hX3R4X2NoYW5uZWw7CiAKLQlyeGNoYW4tPmRldmljZS0+ZGV2aWNlX2NvbnRyb2wocnhjaGFuLCBETUFfVEVSTUlOQVRFX0FMTCwgMCk7Ci0JdHhjaGFuLT5kZXZpY2UtPmRldmljZV9jb250cm9sKHR4Y2hhbiwgRE1BX1RFUk1JTkFURV9BTEwsIDApOworCWRtYWVuZ2luZV90ZXJtaW5hdGVfYWxsKHJ4Y2hhbik7CisJZG1hZW5naW5lX3Rlcm1pbmF0ZV9hbGwodHhjaGFuKTsKIAl1bm1hcF9mcmVlX2RtYV9zY2F0dGVyKHBsMDIyKTsKIH0KIApAQCAtMTQ4Miw5ICsxNDgxLDExIEBACiAJLyogU2V0dXAgdGhlIFNQSSB1c2luZyB0aGUgcGVyIGNoaXAgY29uZmlndXJhdGlvbiAqLwogCXBsMDIyLT5jdXJfY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShwbDAyMi0+Y3VyX21zZy0+c3BpKTsKIAkvKgotCSAqIFdlIGVuYWJsZSB0aGUgY2xvY2tzIGhlcmUsIHRoZW4gdGhlIGNsb2NrcyB3aWxsIGJlIGRpc2FibGVkIHdoZW4KLQkgKiBnaXZlYmFjaygpIGlzIGNhbGxlZCBpbiBlYWNoIG1ldGhvZCAocG9sbC9pbnRlcnJ1cHQvRE1BKQorCSAqIFdlIGVuYWJsZSB0aGUgY29yZSB2b2x0YWdlIGFuZCBjbG9ja3MgaGVyZSwgdGhlbiB0aGUgY2xvY2tzCisJICogYW5kIGNvcmUgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIGdpdmViYWNrKCkgaXMgY2FsbGVkIGluIGVhY2ggbWV0aG9kCisJICogKHBvbGwvaW50ZXJydXB0L0RNQSkKIAkgKi8KKwlhbWJhX3Zjb3JlX2VuYWJsZShwbDAyMi0+YWRldik7CiAJYW1iYV9wY2xrX2VuYWJsZShwbDAyMi0+YWRldik7CiAJY2xrX2VuYWJsZShwbDAyMi0+Y2xrKTsKIAlyZXN0b3JlX3N0YXRlKHBsMDIyKTsKQEAgLTE5MTAsOCArMTkxMSw2IEBACiAJICAgICYmICgocGwwMjItPm1hc3Rlcl9pbmZvKS0+ZW5hYmxlX2RtYSkpIHsKIAkJY2hpcC0+ZW5hYmxlX2RtYSA9IHRydWU7CiAJCWRldl9kYmcoJnNwaS0+ZGV2LCAiRE1BIG1vZGUgc2V0IGluIGNvbnRyb2xsZXIgc3RhdGVcbiIpOwotCQlpZiAoc3RhdHVzIDwgMCkKLQkJCWdvdG8gZXJyX2NvbmZpZ19wYXJhbXM7CiAJCVNTUF9XUklURV9CSVRTKGNoaXAtPmRtYWNyLCBTU1BfRE1BX0VOQUJMRUQsCiAJCQkgICAgICAgU1NQX0RNQUNSX01BU0tfUlhETUFFLCAwKTsKIAkJU1NQX1dSSVRFX0JJVFMoY2hpcC0+ZG1hY3IsIFNTUF9ETUFfRU5BQkxFRCwKQEAgLTIxMzAsOCArMjEyOSwxMiBAQAogCQlnb3RvIGVycl9zcGlfcmVnaXN0ZXI7CiAJfQogCWRldl9kYmcoZGV2LCAicHJvYmUgc3VjY2VkZWRcbiIpOwotCS8qIERpc2FibGUgdGhlIHNpbGljb24gYmxvY2sgcGNsayBhbmQgY2xvY2sgaXQgd2hlbiBuZWVkZWQgKi8KKwkvKgorCSAqIERpc2FibGUgdGhlIHNpbGljb24gYmxvY2sgcGNsayBhbmQgYW55IHZvbHRhZ2UgZG9tYWluIGFuZCBqdXN0CisJICogcG93ZXIgaXQgdXAgYW5kIGNsb2NrIGl0IHdoZW4gaXQncyBuZWVkZWQKKwkgKi8KIAlhbWJhX3BjbGtfZGlzYWJsZShhZGV2KTsKKwlhbWJhX3Zjb3JlX2Rpc2FibGUoYWRldik7CiAJcmV0dXJuIDA7CiAKICBlcnJfc3BpX3JlZ2lzdGVyOgpAQCAtMjE5Niw5ICsyMTk5LDExIEBACiAJCXJldHVybiBzdGF0dXM7CiAJfQogCisJYW1iYV92Y29yZV9lbmFibGUoYWRldik7CiAJYW1iYV9wY2xrX2VuYWJsZShhZGV2KTsKIAlsb2FkX3NzcF9kZWZhdWx0X2NvbmZpZyhwbDAyMik7CiAJYW1iYV9wY2xrX2Rpc2FibGUoYWRldik7CisJYW1iYV92Y29yZV9kaXNhYmxlKGFkZXYpOwogCWRldl9kYmcoJmFkZXYtPmRldiwgInN1c3BlbmRlZFxuIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kYXZpbmNpX3NwaS5jIGIvZHJpdmVycy9zcGkvZGF2aW5jaV9zcGkuYwppbmRleCA2YmVhYjk5Li4xZjBlZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9kYXZpbmNpX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2RhdmluY2lfc3BpLmMKQEAgLTU3MSw2ICs1NzEsNyBAQAogCQl1bnNpZ25lZCBsb25nIHR4X3JlZywgcnhfcmVnOwogCQlzdHJ1Y3QgZWRtYWNjX3BhcmFtIHBhcmFtOwogCQl2b2lkICpyeF9idWY7CisJCWludCBiLCBjOwogCiAJCWRtYSA9ICZkc3BpLT5kbWE7CiAKQEAgLTU5MSwyMiArNTkyLDM4IEBACiAKIAkJaWYgKHQtPnR4X2J1ZikgewogCQkJdC0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoJnNwaS0+ZGV2LCAodm9pZCAqKXQtPnR4X2J1ZiwKLQkJCQkJCWRzcGktPndjb3VudCwgRE1BX1RPX0RFVklDRSk7CisJCQkJCQl0LT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZzcGktPmRldiwgdC0+dHhfZG1hKSkgewogCQkJCWRldl9kYmcoc2RldiwgIlVuYWJsZSB0byBETUEgbWFwICVkIGJ5dGVzIgotCQkJCQkJIlRYIGJ1ZmZlclxuIiwgZHNwaS0+d2NvdW50KTsKKwkJCQkJCSJUWCBidWZmZXJcbiIsIHQtPmxlbik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CiAJCX0KIAorCQkvKgorCQkgKiBJZiBudW1iZXIgb2Ygd29yZHMgaXMgZ3JlYXRlciB0aGFuIDY1NTM1LCB0aGVuIHdlIG5lZWQKKwkJICogdG8gY29uZmlndXJlIGEgMyBkaW1lbnNpb24gdHJhbnNmZXIuICBVc2UgdGhlIEJDTlRSTEQKKwkJICogZmVhdHVyZSB0byBhbGxvdyBmb3IgdHJhbnNmZXJzIHRoYXQgYXJlbid0IGV2ZW4gbXVsdGlwbGVzCisJCSAqIG9mIDY1NTM1IChvciBhbnkgb3RoZXIgcG9zc2libGUgYiBzaXplKSBieSBmaXJzdCB0cmFuc2ZlcnJpbmcKKwkJICogdGhlIHJlbWFpbmRlciBhbW91bnQgdGhlbiBncmFiYmluZyB0aGUgbmV4dCBOIGJsb2NrcyBvZgorCQkgKiA2NTUzNSB3b3Jkcy4KKwkJICovCisKKwkJYyA9IGRzcGktPndjb3VudCAvIChTWl82NEsgLSAxKTsJLyogTiA2NTUzNSBCbG9ja3MgKi8KKwkJYiA9IGRzcGktPndjb3VudCAtIGMgKiAoU1pfNjRLIC0gMSk7CS8qIFJlbWFpbmRlciAqLworCQlpZiAoYikKKwkJCWMrKzsKKwkJZWxzZQorCQkJYiA9IFNaXzY0SyAtIDE7CisKIAkJcGFyYW0ub3B0ID0gVENJTlRFTiB8IEVETUFfVENDKGRtYS0+dHhfY2hhbm5lbCk7CiAJCXBhcmFtLnNyYyA9IHQtPnR4X2J1ZiA/IHQtPnR4X2RtYSA6IHR4X3JlZzsKLQkJcGFyYW0uYV9iX2NudCA9IGRzcGktPndjb3VudCA8PCAxNiB8IGRhdGFfdHlwZTsKKwkJcGFyYW0uYV9iX2NudCA9IGIgPDwgMTYgfCBkYXRhX3R5cGU7CiAJCXBhcmFtLmRzdCA9IHR4X3JlZzsKIAkJcGFyYW0uc3JjX2RzdF9iaWR4ID0gdC0+dHhfYnVmID8gZGF0YV90eXBlIDogMDsKLQkJcGFyYW0ubGlua19iY250cmxkID0gMHhmZmZmOwotCQlwYXJhbS5zcmNfZHN0X2NpZHggPSAwOwotCQlwYXJhbS5jY250ID0gMTsKKwkJcGFyYW0ubGlua19iY250cmxkID0gMHhmZmZmZmZmZjsKKwkJcGFyYW0uc3JjX2RzdF9jaWR4ID0gdC0+dHhfYnVmID8gZGF0YV90eXBlIDogMDsKKwkJcGFyYW0uY2NudCA9IGM7CiAJCWVkbWFfd3JpdGVfc2xvdChkbWEtPnR4X2NoYW5uZWwsICZwYXJhbSk7CiAJCWVkbWFfbGluayhkbWEtPnR4X2NoYW5uZWwsIGRtYS0+ZHVtbXlfcGFyYW1fc2xvdCk7CiAKQEAgLTYyNCw3ICs2NDEsNyBAQAogCiAJCWlmICh0LT5yeF9idWYpIHsKIAkJCXJ4X2J1ZiA9IHQtPnJ4X2J1ZjsKLQkJCXJ4X2J1Zl9jb3VudCA9IGRzcGktPnJjb3VudDsKKwkJCXJ4X2J1Zl9jb3VudCA9IHQtPmxlbjsKIAkJfSBlbHNlIHsKIAkJCXJ4X2J1ZiA9IGRzcGktPnJ4X3RtcF9idWY7CiAJCQlyeF9idWZfY291bnQgPSBzaXplb2YoZHNwaS0+cnhfdG1wX2J1Zik7CkBAIC02MzYsMTkgKzY1MywxOSBAQAogCQkJZGV2X2RiZyhzZGV2LCAiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGVzIFJYIGJ1ZmZlclxuIiwKIAkJCQkJCQkJcnhfYnVmX2NvdW50KTsKIAkJCWlmICh0LT50eF9idWYpCi0JCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB0LT50eF9kbWEsIGRzcGktPndjb3VudCwKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnR4X2RtYSwgdC0+bGVuLAogCQkJCQkJCQlETUFfVE9fREVWSUNFKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKIAkJcGFyYW0ub3B0ID0gVENJTlRFTiB8IEVETUFfVENDKGRtYS0+cnhfY2hhbm5lbCk7CiAJCXBhcmFtLnNyYyA9IHJ4X3JlZzsKLQkJcGFyYW0uYV9iX2NudCA9IGRzcGktPnJjb3VudCA8PCAxNiB8IGRhdGFfdHlwZTsKKwkJcGFyYW0uYV9iX2NudCA9IGIgPDwgMTYgfCBkYXRhX3R5cGU7CiAJCXBhcmFtLmRzdCA9IHQtPnJ4X2RtYTsKIAkJcGFyYW0uc3JjX2RzdF9iaWR4ID0gKHQtPnJ4X2J1ZiA/IGRhdGFfdHlwZSA6IDApIDw8IDE2OwotCQlwYXJhbS5saW5rX2JjbnRybGQgPSAweGZmZmY7Ci0JCXBhcmFtLnNyY19kc3RfY2lkeCA9IDA7Ci0JCXBhcmFtLmNjbnQgPSAxOworCQlwYXJhbS5saW5rX2JjbnRybGQgPSAweGZmZmZmZmZmOworCQlwYXJhbS5zcmNfZHN0X2NpZHggPSAodC0+cnhfYnVmID8gZGF0YV90eXBlIDogMCkgPDwgMTY7CisJCXBhcmFtLmNjbnQgPSBjOwogCQllZG1hX3dyaXRlX3Nsb3QoZG1hLT5yeF9jaGFubmVsLCAmcGFyYW0pOwogCiAJCWlmIChwZGF0YS0+Y3Nob2xkX2J1ZykKQEAgLTY3NSw3ICs2OTIsNyBAQAogCWlmIChzcGljZmctPmlvX3R5cGUgPT0gU1BJX0lPX1RZUEVfRE1BKSB7CiAKIAkJaWYgKHQtPnR4X2J1ZikKLQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdC0+dHhfZG1hLCBkc3BpLT53Y291bnQsCisJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnR4X2RtYSwgdC0+bGVuLAogCQkJCQkJCQlETUFfVE9fREVWSUNFKTsKIAogCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnJ4X2RtYSwgcnhfYnVmX2NvdW50LApAQCAtNzkwLDcgKzgwNyw2IEBACiAJc3RydWN0IHJlc291cmNlICpyLCAqbWVtOwogCXJlc291cmNlX3NpemVfdCBkbWFfcnhfY2hhbiA9IFNQSV9OT19SRVNPVVJDRTsKIAlyZXNvdXJjZV9zaXplX3QJZG1hX3R4X2NoYW4gPSBTUElfTk9fUkVTT1VSQ0U7Ci0JcmVzb3VyY2Vfc2l6ZV90CWRtYV9ldmVudHEgPSBTUElfTk9fUkVTT1VSQ0U7CiAJaW50IGkgPSAwLCByZXQgPSAwOwogCXUzMiBzcGlwYzA7CiAKQEAgLTg3OCwxNyArODk0LDEzIEBACiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CiAJaWYgKHIpCiAJCWRtYV90eF9jaGFuID0gci0+c3RhcnQ7Ci0JciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMik7Ci0JaWYgKHIpCi0JCWRtYV9ldmVudHEgPSByLT5zdGFydDsKIAogCWRzcGktPmJpdGJhbmcudHhyeF9idWZzID0gZGF2aW5jaV9zcGlfYnVmczsKIAlpZiAoZG1hX3J4X2NoYW4gIT0gU1BJX05PX1JFU09VUkNFICYmCi0JICAgIGRtYV90eF9jaGFuICE9IFNQSV9OT19SRVNPVVJDRSAmJgotCSAgICBkbWFfZXZlbnRxICE9IFNQSV9OT19SRVNPVVJDRSkgeworCSAgICBkbWFfdHhfY2hhbiAhPSBTUElfTk9fUkVTT1VSQ0UpIHsKIAkJZHNwaS0+ZG1hLnJ4X2NoYW5uZWwgPSBkbWFfcnhfY2hhbjsKIAkJZHNwaS0+ZG1hLnR4X2NoYW5uZWwgPSBkbWFfdHhfY2hhbjsKLQkJZHNwaS0+ZG1hLmV2ZW50cSA9IGRtYV9ldmVudHE7CisJCWRzcGktPmRtYS5ldmVudHEgPSBwZGF0YS0+ZG1hX2V2ZW50X3E7CiAKIAkJcmV0ID0gZGF2aW5jaV9zcGlfcmVxdWVzdF9kbWEoZHNwaSk7CiAJCWlmIChyZXQpCkBAIC04OTcsNyArOTA5LDcgQEAKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRNQTogc3VwcG9ydGVkXG4iKTsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRNQTogUlggY2hhbm5lbDogJWQsIFRYIGNoYW5uZWw6ICVkLCAiCiAJCQkJImV2ZW50IHF1ZXVlOiAlZFxuIiwgZG1hX3J4X2NoYW4sIGRtYV90eF9jaGFuLAotCQkJCWRtYV9ldmVudHEpOworCQkJCXBkYXRhLT5kbWFfZXZlbnRfcSk7CiAJfQogCiAJZHNwaS0+Z2V0X3J4ID0gZGF2aW5jaV9zcGlfcnhfYnVmX3U4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZHdfc3BpLmMgYi9kcml2ZXJzL3NwaS9kd19zcGkuYwppbmRleCAyMmFmNzdmLi45YTYxOTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9kd19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9kd19zcGkuYwpAQCAtMjIsMTAgKzIyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bGludXgvc3BpL2R3X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAorI2luY2x1ZGUgImR3X3NwaS5oIgorCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaCBiL2RyaXZlcnMvc3BpL2R3X3NwaS5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCnJlbmFtZSB0byBkcml2ZXJzL3NwaS9kd19zcGkuaAppbmRleCA2Y2QxMGY2Li5mYjBiY2U1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaAorKysgYi9kcml2ZXJzL3NwaS9kd19zcGkuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgRFdfU1BJX0hFQURFUl9ICiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKIC8qIEJpdCBmaWVsZHMgaW4gQ1RSTFIwICovCiAjZGVmaW5lIFNQSV9ERlNfT0ZGU0VUCQkJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZHdfc3BpX21pZC5jIGIvZHJpdmVycy9zcGkvZHdfc3BpX21pZC5jCmluZGV4IGM5MWM5NjYuLjQ4OTE3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2R3X3NwaV9taWQuYworKysgYi9kcml2ZXJzL3NwaS9kd19zcGlfbWlkLmMKQEAgLTIyLDcgKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9kd19zcGkuaD4KKworI2luY2x1ZGUgImR3X3NwaS5oIgogCiAjaWZkZWYgQ09ORklHX1NQSV9EV19NSURfRE1BCiAjaW5jbHVkZSA8bGludXgvaW50ZWxfbWlkX2RtYS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZHdfc3BpX21taW8uYyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9tbWlvLmMKaW5kZXggMmZhMDEyYy4uZTBlODEzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZHdfc3BpX21taW8uYworKysgYi9kcml2ZXJzL3NwaS9kd19zcGlfbW1pby5jCkBAIC0xMyw4ICsxMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvZHdfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKKyNpbmNsdWRlICJkd19zcGkuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiZHdfc3BpX21taW8iCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYwppbmRleCA0OWVjM2FhLi5hZDI2MGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpX3BjaS5jCkBAIC0yMCw5ICsyMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvZHdfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogCisjaW5jbHVkZSAiZHdfc3BpLmgiCisKICNkZWZpbmUgRFJJVkVSX05BTUUgImR3X3NwaV9wY2kiCiAKIHN0cnVjdCBkd19zcGlfcGNpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCmluZGV4IGFiYjFmZmIuLjNhNWVkMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KICAqIEF1dGhvcjoJU2FtdWVsIE9ydGl6IDxzYW11ZWwub3J0aXpAbm9raWEuY29tPiBhbmQKLSAqCQlKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoJCUp1aGEgWXJq77+9bO+/vSA8anVoYS55cmpvbGFAbm9raWEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIApAQCAtNDYsNyArNDcsNiBAQAogI2RlZmluZSBPTUFQMl9NQ1NQSV9NQVhfQ1RSTCAJCTQKIAogI2RlZmluZSBPTUFQMl9NQ1NQSV9SRVZJU0lPTgkJMHgwMAotI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUcJCTB4MTAKICNkZWZpbmUgT01BUDJfTUNTUElfU1lTU1RBVFVTCQkweDE0CiAjZGVmaW5lIE9NQVAyX01DU1BJX0lSUVNUQVRVUwkJMHgxOAogI2RlZmluZSBPTUFQMl9NQ1NQSV9JUlFFTkFCTEUJCTB4MWMKQEAgLTYzLDEzICs2Myw2IEBACiAKIC8qIHBlci1yZWdpc3RlciBiaXRtYXNrczogKi8KIAotI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfU01BUlRJRExFCUJJVCg0KQotI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfRU5BV0FLRVVQCUJJVCgyKQotI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfQVVUT0lETEUJQklUKDApCi0jZGVmaW5lIE9NQVAyX01DU1BJX1NZU0NPTkZJR19TT0ZUUkVTRVQJQklUKDEpCi0KLSNkZWZpbmUgT01BUDJfTUNTUElfU1lTU1RBVFVTX1JFU0VURE9ORQlCSVQoMCkKLQogI2RlZmluZSBPTUFQMl9NQ1NQSV9NT0RVTENUUkxfU0lOR0xFCUJJVCgwKQogI2RlZmluZSBPTUFQMl9NQ1NQSV9NT0RVTENUUkxfTVMJQklUKDIpCiAjZGVmaW5lIE9NQVAyX01DU1BJX01PRFVMQ1RSTF9TVEVTVAlCSVQoMykKQEAgLTEyMiwxMyArMTE1LDEyIEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW1zZ19xdWV1ZTsKIAlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyOwotCXN0cnVjdCBjbGsJCSppY2s7Ci0Jc3RydWN0IGNsawkJKmZjazsKIAkvKiBWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29udHJvbGxlciAqLwogCXZvaWQgX19pb21lbQkJKmJhc2U7CiAJdW5zaWduZWQgbG9uZwkJcGh5czsKIAkvKiBTUEkxIGhhcyA0IGNoYW5uZWxzLCB3aGlsZSBTUEkyIGhhcyAyICovCiAJc3RydWN0IG9tYXAyX21jc3BpX2RtYQkqZG1hX2NoYW5uZWxzOworCXN0cnVjdCAgZGV2aWNlCQkqZGV2OwogfTsKIAogc3RydWN0IG9tYXAyX21jc3BpX2NzIHsKQEAgLTE0NCw3ICsxMzYsNiBAQAogICogY29ycmVzcG9uZGluZyByZWdpc3RlcnMgYXJlIG1vZGlmaWVkLgogICovCiBzdHJ1Y3Qgb21hcDJfbWNzcGlfcmVncyB7Ci0JdTMyIHN5c2NvbmZpZzsKIAl1MzIgbW9kdWxjdHJsOwogCXUzMiB3YWtldXBlbmFibGU7CiAJc3RydWN0IGxpc3RfaGVhZCBjczsKQEAgLTI2OCw5ICsyNTksNiBAQAogCW1jc3BpX3dyaXRlX3JlZyhzcGlfY250cmwsIE9NQVAyX01DU1BJX01PRFVMQ1RSTCwKIAkJCW9tYXAyX21jc3BpX2N0eFtzcGlfY250cmwtPmJ1c19udW0gLSAxXS5tb2R1bGN0cmwpOwogCi0JbWNzcGlfd3JpdGVfcmVnKHNwaV9jbnRybCwgT01BUDJfTUNTUElfU1lTQ09ORklHLAotCQkJb21hcDJfbWNzcGlfY3R4W3NwaV9jbnRybC0+YnVzX251bSAtIDFdLnN5c2NvbmZpZyk7Ci0KIAltY3NwaV93cml0ZV9yZWcoc3BpX2NudHJsLCBPTUFQMl9NQ1NQSV9XQUtFVVBFTkFCTEUsCiAJCQlvbWFwMl9tY3NwaV9jdHhbc3BpX2NudHJsLT5idXNfbnVtIC0gMV0ud2FrZXVwZW5hYmxlKTsKIApAQCAtMjgwLDIwICsyNjgsMTIgQEAKIH0KIHN0YXRpYyB2b2lkIG9tYXAyX21jc3BpX2Rpc2FibGVfY2xvY2tzKHN0cnVjdCBvbWFwMl9tY3NwaSAqbWNzcGkpCiB7Ci0JY2xrX2Rpc2FibGUobWNzcGktPmljayk7Ci0JY2xrX2Rpc2FibGUobWNzcGktPmZjayk7CisJcG1fcnVudGltZV9wdXRfc3luYyhtY3NwaS0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBvbWFwMl9tY3NwaV9lbmFibGVfY2xvY2tzKHN0cnVjdCBvbWFwMl9tY3NwaSAqbWNzcGkpCiB7Ci0JaWYgKGNsa19lbmFibGUobWNzcGktPmljaykpCi0JCXJldHVybiAtRU5PREVWOwotCWlmIChjbGtfZW5hYmxlKG1jc3BpLT5mY2spKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCW9tYXAyX21jc3BpX3Jlc3RvcmVfY3R4KG1jc3BpKTsKLQotCXJldHVybiAwOworCXJldHVybiBwbV9ydW50aW1lX2dldF9zeW5jKG1jc3BpLT5kZXYpOwogfQogCiBzdGF0aWMgaW50IG1jc3BpX3dhaXRfZm9yX3JlZ19iaXQodm9pZCBfX2lvbWVtICpyZWcsIHVuc2lnbmVkIGxvbmcgYml0KQpAQCAtNDg3LDYgKzQ2Nyw5IEBACiAJcnhfcmVnCQk9IGJhc2UgKyBPTUFQMl9NQ1NQSV9SWDA7CiAJY2hzdGF0X3JlZwk9IGJhc2UgKyBPTUFQMl9NQ1NQSV9DSFNUQVQwOwogCisJaWYgKGMgPCAod29yZF9sZW4+PjMpKQorCQlyZXR1cm4gMDsKKwogCWlmICh3b3JkX2xlbiA8PSA4KSB7CiAJCXU4CQkqcng7CiAJCWNvbnN0IHU4CSp0eDsKQEAgLTUzNCw3ICs1MTcsNyBAQAogCQkJCWRldl92ZGJnKCZzcGktPmRldiwgInJlYWQtJWQgJTAyeFxuIiwKIAkJCQkJCXdvcmRfbGVuLCAqKHJ4IC0gMSkpOwogCQkJfQotCQl9IHdoaWxlIChjKTsKKwkJfSB3aGlsZSAoYyA+ICh3b3JkX2xlbj4+MykpOwogCX0gZWxzZSBpZiAod29yZF9sZW4gPD0gMTYpIHsKIAkJdTE2CQkqcng7CiAJCWNvbnN0IHUxNgkqdHg7CkBAIC01ODEsNyArNTY0LDcgQEAKIAkJCQlkZXZfdmRiZygmc3BpLT5kZXYsICJyZWFkLSVkICUwNHhcbiIsCiAJCQkJCQl3b3JkX2xlbiwgKihyeCAtIDEpKTsKIAkJCX0KLQkJfSB3aGlsZSAoYyk7CisJCX0gd2hpbGUgKGMgPiAod29yZF9sZW4+PjMpKTsKIAl9IGVsc2UgaWYgKHdvcmRfbGVuIDw9IDMyKSB7CiAJCXUzMgkJKnJ4OwogCQljb25zdCB1MzIJKnR4OwpAQCAtNjI4LDcgKzYxMSw3IEBACiAJCQkJZGV2X3ZkYmcoJnNwaS0+ZGV2LCAicmVhZC0lZCAlMDh4XG4iLAogCQkJCQkJd29yZF9sZW4sICoocnggLSAxKSk7CiAJCQl9Ci0JCX0gd2hpbGUgKGMpOworCQl9IHdoaWxlIChjID4gKHdvcmRfbGVuPj4zKSk7CiAJfQogCiAJLyogZm9yIFRYX09OTFkgbW9kZSwgYmUgc3VyZSBhbGwgd29yZHMgaGF2ZSBzaGlmdGVkIG91dCAqLwpAQCAtNjUxLDYgKzYzNCwxNyBAQAogCXJldHVybiBjb3VudCAtIGM7CiB9CiAKK3N0YXRpYyB1MzIgb21hcDJfbWNzcGlfY2FsY19kaXZpc29yKHUzMiBzcGVlZF9oeikKK3sKKwl1MzIgZGl2OworCisJZm9yIChkaXYgPSAwOyBkaXYgPCAxNTsgZGl2KyspCisJCWlmIChzcGVlZF9oeiA+PSAoT01BUDJfTUNTUElfTUFYX0ZSRVEgPj4gZGl2KSkKKwkJCXJldHVybiBkaXY7CisKKwlyZXR1cm4gMTU7Cit9CisKIC8qIGNhbGxlZCBvbmx5IHdoZW4gbm8gdHJhbnNmZXIgaXMgYWN0aXZlIHRvIHRoaXMgZGV2aWNlICovCiBzdGF0aWMgaW50IG9tYXAyX21jc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCiAJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCkBAIC02NzMsMTIgKzY2Nyw4IEBACiAJaWYgKHQgJiYgdC0+c3BlZWRfaHopCiAJCXNwZWVkX2h6ID0gdC0+c3BlZWRfaHo7CiAKLQlpZiAoc3BlZWRfaHopIHsKLQkJd2hpbGUgKGRpdiA8PSAxNSAmJiAoT01BUDJfTUNTUElfTUFYX0ZSRVEgLyAoMSA8PCBkaXYpKQotCQkJCQk+IHNwZWVkX2h6KQotCQkJZGl2Kys7Ci0JfSBlbHNlCi0JCWRpdiA9IDE1OworCXNwZWVkX2h6ID0gbWluX3QodTMyLCBzcGVlZF9oeiwgT01BUDJfTUNTUElfTUFYX0ZSRVEpOworCWRpdiA9IG9tYXAyX21jc3BpX2NhbGNfZGl2aXNvcihzcGVlZF9oeik7CiAKIAlsID0gbWNzcGlfY2FjaGVkX2NoY29uZjAoc3BpKTsKIApAQCAtNzE1LDcgKzcwNSw3IEBACiAJbWNzcGlfd3JpdGVfY2hjb25mMChzcGksIGwpOwogCiAJZGV2X2RiZygmc3BpLT5kZXYsICJzZXR1cDogc3BlZWQgJWQsIHNhbXBsZSAlcyBlZGdlLCBjbGsgJXNcbiIsCi0JCQlPTUFQMl9NQ1NQSV9NQVhfRlJFUSAvICgxIDw8IGRpdiksCisJCQlPTUFQMl9NQ1NQSV9NQVhfRlJFUSA+PiBkaXYsCiAJCQkoc3BpLT5tb2RlICYgU1BJX0NQSEEpID8gInRyYWlsaW5nIiA6ICJsZWFkaW5nIiwKIAkJCShzcGktPm1vZGUgJiBTUElfQ1BPTCkgPyAiaW52ZXJ0ZWQiIDogIm5vcm1hbCIpOwogCkBAIC04MTksOCArODA5LDkgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKG9tYXAyX21jc3BpX2VuYWJsZV9jbG9ja3MobWNzcGkpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXQgPSBvbWFwMl9tY3NwaV9lbmFibGVfY2xvY2tzKG1jc3BpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCXJldCA9IG9tYXAyX21jc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CiAJb21hcDJfbWNzcGlfZGlzYWJsZV9jbG9ja3MobWNzcGkpOwpAQCAtODYzLDEwICs4NTQsMTEgQEAKIAlzdHJ1Y3Qgb21hcDJfbWNzcGkJKm1jc3BpOwogCiAJbWNzcGkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG9tYXAyX21jc3BpLCB3b3JrKTsKLQlzcGluX2xvY2tfaXJxKCZtY3NwaS0+bG9jayk7CiAKLQlpZiAob21hcDJfbWNzcGlfZW5hYmxlX2Nsb2NrcyhtY3NwaSkpCi0JCWdvdG8gb3V0OworCWlmIChvbWFwMl9tY3NwaV9lbmFibGVfY2xvY2tzKG1jc3BpKSA8IDApCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnEoJm1jc3BpLT5sb2NrKTsKIAogCS8qIFdlIG9ubHkgZW5hYmxlIG9uZSBjaGFubmVsIGF0IGEgdGltZSAtLSB0aGUgb25lIHdob3NlIG1lc3NhZ2UgaXMKIAkgKiBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgLS0gYWx0aG91Z2ggdGhpcyBjb250cm9sbGVyIHdvdWxkIGdsYWRseQpAQCAtOTc5LDEwICs5NzEsOSBAQAogCQlzcGluX2xvY2tfaXJxKCZtY3NwaS0+bG9jayk7CiAJfQogCi0Jb21hcDJfbWNzcGlfZGlzYWJsZV9jbG9ja3MobWNzcGkpOwotCi1vdXQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZtY3NwaS0+bG9jayk7CisKKwlvbWFwMl9tY3NwaV9kaXNhYmxlX2Nsb2NrcyhtY3NwaSk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcDJfbWNzcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptKQpAQCAtMTAxNSwxMCArMTAwNiwxMCBAQAogCQkJCQl0LT5iaXRzX3Blcl93b3JkKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICh0LT5zcGVlZF9oeiAmJiB0LT5zcGVlZF9oeiA8IE9NQVAyX01DU1BJX01BWF9GUkVRLygxPDwxNikpIHsKLQkJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgSHogbWF4IGV4Y2VlZHMgJWRcbiIsCi0JCQkJCXQtPnNwZWVkX2h6LAotCQkJCQlPTUFQMl9NQ1NQSV9NQVhfRlJFUS8oMTw8MTYpKTsKKwkJaWYgKHQtPnNwZWVkX2h6ICYmIHQtPnNwZWVkX2h6IDwgKE9NQVAyX01DU1BJX01BWF9GUkVRID4+IDE1KSkgeworCQkJZGV2X2RiZygmc3BpLT5kZXYsICJzcGVlZF9oeiAlZCBiZWxvdyBtaW5pbXVtICVkIEh6XG4iLAorCQkJCXQtPnNwZWVkX2h6LAorCQkJCU9NQVAyX01DU1BJX01BWF9GUkVRID4+IDE1KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTEwNTgsMjUgKzEwNDksMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcDJfbWNzcGlfcmVzZXQoc3RydWN0IG9tYXAyX21jc3BpICptY3NwaSkKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX21jc3BpX21hc3Rlcl9zZXR1cChzdHJ1Y3Qgb21hcDJfbWNzcGkgKm1jc3BpKQogewogCXN0cnVjdCBzcGlfbWFzdGVyCSptYXN0ZXIgPSBtY3NwaS0+bWFzdGVyOwogCXUzMgkJCXRtcDsKKwlpbnQgcmV0ID0gMDsKIAotCWlmIChvbWFwMl9tY3NwaV9lbmFibGVfY2xvY2tzKG1jc3BpKSkKLQkJcmV0dXJuIC0xOwotCi0JbWNzcGlfd3JpdGVfcmVnKG1hc3RlciwgT01BUDJfTUNTUElfU1lTQ09ORklHLAotCQkJT01BUDJfTUNTUElfU1lTQ09ORklHX1NPRlRSRVNFVCk7Ci0JZG8gewotCQl0bXAgPSBtY3NwaV9yZWFkX3JlZyhtYXN0ZXIsIE9NQVAyX01DU1BJX1NZU1NUQVRVUyk7Ci0JfSB3aGlsZSAoISh0bXAgJiBPTUFQMl9NQ1NQSV9TWVNTVEFUVVNfUkVTRVRET05FKSk7Ci0KLQl0bXAgPSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfQVVUT0lETEUgfAotCQlPTUFQMl9NQ1NQSV9TWVNDT05GSUdfRU5BV0FLRVVQIHwKLQkJT01BUDJfTUNTUElfU1lTQ09ORklHX1NNQVJUSURMRTsKLQltY3NwaV93cml0ZV9yZWcobWFzdGVyLCBPTUFQMl9NQ1NQSV9TWVNDT05GSUcsIHRtcCk7Ci0Jb21hcDJfbWNzcGlfY3R4W21hc3Rlci0+YnVzX251bSAtIDFdLnN5c2NvbmZpZyA9IHRtcDsKKwlyZXQgPSBvbWFwMl9tY3NwaV9lbmFibGVfY2xvY2tzKG1jc3BpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCXRtcCA9IE9NQVAyX01DU1BJX1dBS0VVUEVOQUJMRV9XS0VOOwogCW1jc3BpX3dyaXRlX3JlZyhtYXN0ZXIsIE9NQVAyX01DU1BJX1dBS0VVUEVOQUJMRSwgdG1wKTsKQEAgLTEwODcsOTEgKzEwNjgsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpMV9yeGRtYV9pZCBbXSA9IHsKLQlPTUFQMjRYWF9ETUFfU1BJMV9SWDAsCi0JT01BUDI0WFhfRE1BX1NQSTFfUlgxLAotCU9NQVAyNFhYX0RNQV9TUEkxX1JYMiwKLQlPTUFQMjRYWF9ETUFfU1BJMV9SWDMsCi19Oworc3RhdGljIGludCBvbWFwX21jc3BpX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb21hcDJfbWNzcGkJKm1jc3BpOworCXN0cnVjdCBzcGlfbWFzdGVyCSptYXN0ZXI7CiAKLXN0YXRpYyB1OCBfX2luaXRkYXRhIHNwaTFfdHhkbWFfaWQgW10gPSB7Ci0JT01BUDI0WFhfRE1BX1NQSTFfVFgwLAotCU9NQVAyNFhYX0RNQV9TUEkxX1RYMSwKLQlPTUFQMjRYWF9ETUFfU1BJMV9UWDIsCi0JT01BUDI0WFhfRE1BX1NQSTFfVFgzLAotfTsKKwltYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwltY3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlvbWFwMl9tY3NwaV9yZXN0b3JlX2N0eChtY3NwaSk7CiAKLXN0YXRpYyB1OCBfX2luaXRkYXRhIHNwaTJfcnhkbWFfaWRbXSA9IHsKLQlPTUFQMjRYWF9ETUFfU1BJMl9SWDAsCi0JT01BUDI0WFhfRE1BX1NQSTJfUlgxLAotfTsKKwlyZXR1cm4gMDsKK30KIAotc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpMl90eGRtYV9pZFtdID0gewotCU9NQVAyNFhYX0RNQV9TUEkyX1RYMCwKLQlPTUFQMjRYWF9ETUFfU1BJMl9UWDEsCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgXAotCXx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi1zdGF0aWMgdTggX19pbml0ZGF0YSBzcGkzX3J4ZG1hX2lkW10gPSB7Ci0JT01BUDI0WFhfRE1BX1NQSTNfUlgwLAotCU9NQVAyNFhYX0RNQV9TUEkzX1JYMSwKLX07Ci0KLXN0YXRpYyB1OCBfX2luaXRkYXRhIHNwaTNfdHhkbWFfaWRbXSA9IHsKLQlPTUFQMjRYWF9ETUFfU1BJM19UWDAsCi0JT01BUDI0WFhfRE1BX1NQSTNfVFgxLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLXN0YXRpYyB1OCBfX2luaXRkYXRhIHNwaTRfcnhkbWFfaWRbXSA9IHsKLQlPTUFQMzRYWF9ETUFfU1BJNF9SWDAsCi19OwotCi1zdGF0aWMgdTggX19pbml0ZGF0YSBzcGk0X3R4ZG1hX2lkW10gPSB7Ci0JT01BUDM0WFhfRE1BX1NQSTRfVFgwLAotfTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9tY3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzcGlfbWFzdGVyCSptYXN0ZXI7CisJc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgb21hcDJfbWNzcGkJKm1jc3BpOwogCXN0cnVjdCByZXNvdXJjZQkJKnI7CiAJaW50CQkJc3RhdHVzID0gMCwgaTsKLQljb25zdCB1OAkJKnJ4ZG1hX2lkLCAqdHhkbWFfaWQ7Ci0JdW5zaWduZWQJCW51bV9jaGlwc2VsZWN0OwotCi0Jc3dpdGNoIChwZGV2LT5pZCkgewotCWNhc2UgMToKLQkJcnhkbWFfaWQgPSBzcGkxX3J4ZG1hX2lkOwotCQl0eGRtYV9pZCA9IHNwaTFfdHhkbWFfaWQ7Ci0JCW51bV9jaGlwc2VsZWN0ID0gNDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlyeGRtYV9pZCA9IHNwaTJfcnhkbWFfaWQ7Ci0JCXR4ZG1hX2lkID0gc3BpMl90eGRtYV9pZDsKLQkJbnVtX2NoaXBzZWxlY3QgPSAyOwotCQlicmVhazsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQljYXNlIDM6Ci0JCXJ4ZG1hX2lkID0gc3BpM19yeGRtYV9pZDsKLQkJdHhkbWFfaWQgPSBzcGkzX3R4ZG1hX2lkOwotCQludW1fY2hpcHNlbGVjdCA9IDI7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQljYXNlIDQ6Ci0JCXJ4ZG1hX2lkID0gc3BpNF9yeGRtYV9pZDsKLQkJdHhkbWFfaWQgPSBzcGk0X3R4ZG1hX2lkOwotCQludW1fY2hpcHNlbGVjdCA9IDE7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2YgKm1jc3BpKTsKIAlpZiAobWFzdGVyID09IE5VTEwpIHsKQEAgLTExODgsNyArMTEwNCw3IEBACiAJbWFzdGVyLT5zZXR1cCA9IG9tYXAyX21jc3BpX3NldHVwOwogCW1hc3Rlci0+dHJhbnNmZXIgPSBvbWFwMl9tY3NwaV90cmFuc2ZlcjsKIAltYXN0ZXItPmNsZWFudXAgPSBvbWFwMl9tY3NwaV9jbGVhbnVwOwotCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBudW1fY2hpcHNlbGVjdDsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gcGRhdGEtPm51bV9jczsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtYXN0ZXIpOwogCkBAIC0xMjA2LDQ5ICsxMTIyLDYyIEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKKwlyLT5zdGFydCArPSBwZGF0YS0+cmVnc19vZmZzZXQ7CisJci0+ZW5kICs9IHBkYXRhLT5yZWdzX29mZnNldDsKIAltY3NwaS0+cGh5cyA9IHItPnN0YXJ0OwogCW1jc3BpLT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKIAlpZiAoIW1jc3BpLT5iYXNlKSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgTUNTUElcbiIpOwogCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGVycjFhYTsKKwkJZ290byBlcnIyOwogCX0KIAorCW1jc3BpLT5kZXYgPSAmcGRldi0+ZGV2OwogCUlOSVRfV09SSygmbWNzcGktPndvcmssIG9tYXAyX21jc3BpX3dvcmspOwogCiAJc3Bpbl9sb2NrX2luaXQoJm1jc3BpLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbWNzcGktPm1zZ19xdWV1ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJm9tYXAyX21jc3BpX2N0eFttYXN0ZXItPmJ1c19udW0gLSAxXS5jcyk7CiAKLQltY3NwaS0+aWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7Ci0JaWYgKElTX0VSUihtY3NwaS0+aWNrKSkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgbWNzcGlfaWNrXG4iKTsKLQkJc3RhdHVzID0gUFRSX0VSUihtY3NwaS0+aWNrKTsKLQkJZ290byBlcnIxYTsKLQl9Ci0JbWNzcGktPmZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwotCWlmIChJU19FUlIobWNzcGktPmZjaykpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IG1jc3BpX2Zja1xuIik7Ci0JCXN0YXR1cyA9IFBUUl9FUlIobWNzcGktPmZjayk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KIAltY3NwaS0+ZG1hX2NoYW5uZWxzID0ga2NhbGxvYyhtYXN0ZXItPm51bV9jaGlwc2VsZWN0LAogCQkJc2l6ZW9mKHN0cnVjdCBvbWFwMl9tY3NwaV9kbWEpLAogCQkJR0ZQX0tFUk5FTCk7CiAKIAlpZiAobWNzcGktPmRtYV9jaGFubmVscyA9PSBOVUxMKQotCQlnb3RvIGVycjM7CisJCWdvdG8gZXJyMjsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fY2hpcHNlbGVjdDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykgeworCQljaGFyIGRtYV9jaF9uYW1lWzE0XTsKKwkJc3RydWN0IHJlc291cmNlICpkbWFfcmVzOworCisJCXNwcmludGYoZG1hX2NoX25hbWUsICJyeCVkIiwgaSk7CisJCWRtYV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfRE1BLAorCQkJCQkJCWRtYV9jaF9uYW1lKTsKKwkJaWYgKCFkbWFfcmVzKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IERNQSBSWCBjaGFubmVsXG4iKTsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCiAJCW1jc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3J4X2NoYW5uZWwgPSAtMTsKLQkJbWNzcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfcnhfc3luY19kZXYgPSByeGRtYV9pZFtpXTsKKwkJbWNzcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfcnhfc3luY19kZXYgPSBkbWFfcmVzLT5zdGFydDsKKwkJc3ByaW50ZihkbWFfY2hfbmFtZSwgInR4JWQiLCBpKTsKKwkJZG1hX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9ETUEsCisJCQkJCQkJZG1hX2NoX25hbWUpOworCQlpZiAoIWRtYV9yZXMpIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgRE1BIFRYIGNoYW5uZWxcbiIpOworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisKIAkJbWNzcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfdHhfY2hhbm5lbCA9IC0xOwotCQltY3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmRtYV90eF9zeW5jX2RldiA9IHR4ZG1hX2lkW2ldOworCQltY3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmRtYV90eF9zeW5jX2RldiA9IGRtYV9yZXMtPnN0YXJ0OwogCX0KIAotCWlmIChvbWFwMl9tY3NwaV9yZXNldChtY3NwaSkgPCAwKQotCQlnb3RvIGVycjQ7CisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKKwlpZiAoc3RhdHVzIHx8IG9tYXAyX21jc3BpX21hc3Rlcl9zZXR1cChtY3NwaSkgPCAwKQorCQlnb3RvIGVycjM7CiAKIAlzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CiAJaWYgKHN0YXR1cyA8IDApCkBAIC0xMjU3LDE3ICsxMTg2LDEzIEBACiAJcmV0dXJuIHN0YXR1czsKIAogZXJyNDoKLQlrZnJlZShtY3NwaS0+ZG1hX2NoYW5uZWxzKTsKLWVycjM6Ci0JY2xrX3B1dChtY3NwaS0+ZmNrKTsKLWVycjI6Ci0JY2xrX3B1dChtY3NwaS0+aWNrKTsKLWVycjFhOgotCWlvdW5tYXAobWNzcGktPmJhc2UpOwotZXJyMWFhOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgKHItPmVuZCAtIHItPnN0YXJ0KSArIDEpOwotZXJyMToKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworZXJyMzoKKwlrZnJlZShtY3NwaS0+ZG1hX2NoYW5uZWxzKTsKK2VycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSk7CisJaW91bm1hcChtY3NwaS0+YmFzZSk7CitlcnIxOgogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEyODMsOSArMTIwOCw3IEBACiAJbWNzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAJZG1hX2NoYW5uZWxzID0gbWNzcGktPmRtYV9jaGFubmVsczsKIAotCWNsa19wdXQobWNzcGktPmZjayk7Ci0JY2xrX3B1dChtY3NwaS0+aWNrKTsKLQorCW9tYXAyX21jc3BpX2Rpc2FibGVfY2xvY2tzKG1jc3BpKTsKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIChyLT5lbmQgLSByLT5zdGFydCkgKyAxKTsKIApAQCAtMTMzNiw2ICsxMjU5LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG9tYXAyX21jc3BpX3BtX29wcyA9IHsKIAkucmVzdW1lID0gb21hcDJfbWNzcGlfcmVzdW1lLAorCS5ydW50aW1lX3Jlc3VtZQk9IG9tYXBfbWNzcGlfcnVudGltZV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwMl9tY3NwaV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYWx0ZXJhLmMgYi9kcml2ZXJzL3NwaS9zcGlfYWx0ZXJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgxM2E2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9hbHRlcmEuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIEFsdGVyYSBTUEkgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqCisgKiBCYXNlZCBvbiBzcGlfczNjMjR4eC5jLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBCZW4gRG9va3MKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorCisjZGVmaW5lIERSVl9OQU1FICJzcGlfYWx0ZXJhIgorCisjZGVmaW5lIEFMVEVSQV9TUElfUlhEQVRBCTAKKyNkZWZpbmUgQUxURVJBX1NQSV9UWERBVEEJNAorI2RlZmluZSBBTFRFUkFfU1BJX1NUQVRVUwk4CisjZGVmaW5lIEFMVEVSQV9TUElfQ09OVFJPTAkxMgorI2RlZmluZSBBTFRFUkFfU1BJX1NMQVZFX1NFTAkyMAorCisjZGVmaW5lIEFMVEVSQV9TUElfU1RBVFVTX1JPRV9NU0sJMHg4CisjZGVmaW5lIEFMVEVSQV9TUElfU1RBVFVTX1RPRV9NU0sJMHgxMAorI2RlZmluZSBBTFRFUkFfU1BJX1NUQVRVU19UTVRfTVNLCTB4MjAKKyNkZWZpbmUgQUxURVJBX1NQSV9TVEFUVVNfVFJEWV9NU0sJMHg0MAorI2RlZmluZSBBTFRFUkFfU1BJX1NUQVRVU19SUkRZX01TSwkweDgwCisjZGVmaW5lIEFMVEVSQV9TUElfU1RBVFVTX0VfTVNLCQkweDEwMAorCisjZGVmaW5lIEFMVEVSQV9TUElfQ09OVFJPTF9JUk9FX01TSwkweDgKKyNkZWZpbmUgQUxURVJBX1NQSV9DT05UUk9MX0lUT0VfTVNLCTB4MTAKKyNkZWZpbmUgQUxURVJBX1NQSV9DT05UUk9MX0lUUkRZX01TSwkweDQwCisjZGVmaW5lIEFMVEVSQV9TUElfQ09OVFJPTF9JUlJEWV9NU0sJMHg4MAorI2RlZmluZSBBTFRFUkFfU1BJX0NPTlRST0xfSUVfTVNLCTB4MTAwCisjZGVmaW5lIEFMVEVSQV9TUElfQ09OVFJPTF9TU09fTVNLCTB4NDAwCisKK3N0cnVjdCBhbHRlcmFfc3BpIHsKKwkvKiBiaXRiYW5nIGhhcyB0byBiZSBmaXJzdCAqLworCXN0cnVjdCBzcGlfYml0YmFuZyBiaXRiYW5nOworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IGlycTsKKwlpbnQgbGVuOworCWludCBjb3VudDsKKwlpbnQgYnl0ZXNfcGVyX3dvcmQ7CisJdW5zaWduZWQgbG9uZyBpbXI7CisKKwkvKiBkYXRhIGJ1ZmZlcnMgKi8KKwljb25zdCB1bnNpZ25lZCBjaGFyICp0eDsKKwl1bnNpZ25lZCBjaGFyICpyeDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFsdGVyYV9zcGkgKmFsdGVyYV9zcGlfdG9faHcoc3RydWN0IHNwaV9kZXZpY2UgKnNkZXYpCit7CisJcmV0dXJuIHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc2Rldi0+bWFzdGVyKTsKK30KKworc3RhdGljIHZvaWQgYWx0ZXJhX3NwaV9jaGlwc2VsKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYWx0ZXJhX3NwaSAqaHcgPSBhbHRlcmFfc3BpX3RvX2h3KHNwaSk7CisKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpIHsKKwkJc3dpdGNoICh2YWx1ZSkgeworCQljYXNlIEJJVEJBTkdfQ1NfSU5BQ1RJVkU6CisJCQl3cml0ZWwoMSA8PCBzcGktPmNoaXBfc2VsZWN0LAorCQkJICAgICAgIGh3LT5iYXNlICsgQUxURVJBX1NQSV9TTEFWRV9TRUwpOworCQkJaHctPmltciB8PSBBTFRFUkFfU1BJX0NPTlRST0xfU1NPX01TSzsKKwkJCXdyaXRlbChody0+aW1yLCBody0+YmFzZSArIEFMVEVSQV9TUElfQ09OVFJPTCk7CisJCQlicmVhazsKKworCQljYXNlIEJJVEJBTkdfQ1NfQUNUSVZFOgorCQkJaHctPmltciAmPSB+QUxURVJBX1NQSV9DT05UUk9MX1NTT19NU0s7CisJCQl3cml0ZWwoaHctPmltciwgaHctPmJhc2UgKyBBTFRFUkFfU1BJX0NPTlRST0wpOworCQkJd3JpdGVsKDAsIGh3LT5iYXNlICsgQUxURVJBX1NQSV9TTEFWRV9TRUwpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgQklUQkFOR19DU19JTkFDVElWRToKKwkJCWh3LT5pbXIgJj0gfkFMVEVSQV9TUElfQ09OVFJPTF9TU09fTVNLOworCQkJd3JpdGVsKGh3LT5pbXIsIGh3LT5iYXNlICsgQUxURVJBX1NQSV9DT05UUk9MKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQklUQkFOR19DU19BQ1RJVkU6CisJCQl3cml0ZWwoMSA8PCBzcGktPmNoaXBfc2VsZWN0LAorCQkJICAgICAgIGh3LT5iYXNlICsgQUxURVJBX1NQSV9TTEFWRV9TRUwpOworCQkJaHctPmltciB8PSBBTFRFUkFfU1BJX0NPTlRST0xfU1NPX01TSzsKKwkJCXdyaXRlbChody0+aW1yLCBody0+YmFzZSArIEFMVEVSQV9TUElfQ09OVFJPTCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBhbHRlcmFfc3BpX3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsdGVyYV9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaHdfdHhieXRlKHN0cnVjdCBhbHRlcmFfc3BpICpodywgaW50IGNvdW50KQoreworCWlmIChody0+dHgpIHsKKwkJc3dpdGNoIChody0+Ynl0ZXNfcGVyX3dvcmQpIHsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIGh3LT50eFtjb3VudF07CisJCWNhc2UgMjoKKwkJCXJldHVybiAoaHctPnR4W2NvdW50ICogMl0KKwkJCQl8IChody0+dHhbY291bnQgKiAyICsgMV0gPDwgOCkpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsdGVyYV9zcGlfdHhyeChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBhbHRlcmFfc3BpICpodyA9IGFsdGVyYV9zcGlfdG9faHcoc3BpKTsKKworCWh3LT50eCA9IHQtPnR4X2J1ZjsKKwlody0+cnggPSB0LT5yeF9idWY7CisJaHctPmNvdW50ID0gMDsKKwlody0+Ynl0ZXNfcGVyX3dvcmQgPSAodC0+Yml0c19wZXJfd29yZCA/IDogc3BpLT5iaXRzX3Blcl93b3JkKSAvIDg7CisJaHctPmxlbiA9IHQtPmxlbiAvIGh3LT5ieXRlc19wZXJfd29yZDsKKworCWlmIChody0+aXJxID49IDApIHsKKwkJLyogZW5hYmxlIHJlY2VpdmUgaW50ZXJydXB0ICovCisJCWh3LT5pbXIgfD0gQUxURVJBX1NQSV9DT05UUk9MX0lSUkRZX01TSzsKKwkJd3JpdGVsKGh3LT5pbXIsIGh3LT5iYXNlICsgQUxURVJBX1NQSV9DT05UUk9MKTsKKworCQkvKiBzZW5kIHRoZSBmaXJzdCBieXRlICovCisJCXdyaXRlbChod190eGJ5dGUoaHcsIDApLCBody0+YmFzZSArIEFMVEVSQV9TUElfVFhEQVRBKTsKKworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZody0+ZG9uZSk7CisJCS8qIGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KKwkJaHctPmltciAmPSB+QUxURVJBX1NQSV9DT05UUk9MX0lSUkRZX01TSzsKKwkJd3JpdGVsKGh3LT5pbXIsIGh3LT5iYXNlICsgQUxURVJBX1NQSV9DT05UUk9MKTsKKwl9IGVsc2UgeworCQkvKiBzZW5kIHRoZSBmaXJzdCBieXRlICovCisJCXdyaXRlbChod190eGJ5dGUoaHcsIDApLCBody0+YmFzZSArIEFMVEVSQV9TUElfVFhEQVRBKTsKKworCQl3aGlsZSAoMSkgeworCQkJdW5zaWduZWQgaW50IHJ4ZDsKKworCQkJd2hpbGUgKCEocmVhZGwoaHctPmJhc2UgKyBBTFRFUkFfU1BJX1NUQVRVUykgJgorCQkJCSBBTFRFUkFfU1BJX1NUQVRVU19SUkRZX01TSykpCisJCQkJY3B1X3JlbGF4KCk7CisKKwkJCXJ4ZCA9IHJlYWRsKGh3LT5iYXNlICsgQUxURVJBX1NQSV9SWERBVEEpOworCQkJaWYgKGh3LT5yeCkgeworCQkJCXN3aXRjaCAoaHctPmJ5dGVzX3Blcl93b3JkKSB7CisJCQkJY2FzZSAxOgorCQkJCQlody0+cnhbaHctPmNvdW50XSA9IHJ4ZDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQlody0+cnhbaHctPmNvdW50ICogMl0gPSByeGQ7CisJCQkJCWh3LT5yeFtody0+Y291bnQgKiAyICsgMV0gPSByeGQgPj4gODsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlody0+Y291bnQrKzsKKworCQkJaWYgKGh3LT5jb3VudCA8IGh3LT5sZW4pCisJCQkJd3JpdGVsKGh3X3R4Ynl0ZShodywgaHctPmNvdW50KSwKKwkJCQkgICAgICAgaHctPmJhc2UgKyBBTFRFUkFfU1BJX1RYREFUQSk7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKworCX0KKworCXJldHVybiBody0+Y291bnQgKiBody0+Ynl0ZXNfcGVyX3dvcmQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbHRlcmFfc3BpX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IGFsdGVyYV9zcGkgKmh3ID0gZGV2OworCXVuc2lnbmVkIGludCByeGQ7CisKKwlyeGQgPSByZWFkbChody0+YmFzZSArIEFMVEVSQV9TUElfUlhEQVRBKTsKKwlpZiAoaHctPnJ4KSB7CisJCXN3aXRjaCAoaHctPmJ5dGVzX3Blcl93b3JkKSB7CisJCWNhc2UgMToKKwkJCWh3LT5yeFtody0+Y291bnRdID0gcnhkOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWh3LT5yeFtody0+Y291bnQgKiAyXSA9IHJ4ZDsKKwkJCWh3LT5yeFtody0+Y291bnQgKiAyICsgMV0gPSByeGQgPj4gODsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaHctPmNvdW50Kys7CisKKwlpZiAoaHctPmNvdW50IDwgaHctPmxlbikKKwkJd3JpdGVsKGh3X3R4Ynl0ZShodywgaHctPmNvdW50KSwgaHctPmJhc2UgKyBBTFRFUkFfU1BJX1RYREFUQSk7CisJZWxzZQorCQljb21wbGV0ZSgmaHctPmRvbmUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhbHRlcmFfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFsdGVyYV9zcGlfcGxhdGZvcm1fZGF0YSAqcGxhdHAgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYWx0ZXJhX3NwaSAqaHc7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgZXJyID0gLUVOT0RFVjsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBhbHRlcmFfc3BpKSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiBlcnI7CisKKwkvKiBzZXR1cCB0aGUgbWFzdGVyIHN0YXRlLiAqLworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSAxNjsKKwltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DU19ISUdIOworCW1hc3Rlci0+c2V0dXAgPSBhbHRlcmFfc3BpX3NldHVwOworCisJaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJLyogc2V0dXAgdGhlIHN0YXRlIGZvciB0aGUgYml0YmFuZyBkcml2ZXIgKi8KKwlody0+Yml0YmFuZy5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCWlmICghaHctPmJpdGJhbmcubWFzdGVyKQorCQlyZXR1cm4gZXJyOworCWh3LT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gYWx0ZXJhX3NwaV9zZXR1cHhmZXI7CisJaHctPmJpdGJhbmcuY2hpcHNlbGVjdCA9IGFsdGVyYV9zcGlfY2hpcHNlbDsKKwlody0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBhbHRlcmFfc3BpX3R4cng7CisKKwkvKiBmaW5kIGFuZCBtYXAgb3VyIHJlc291cmNlcyAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCWdvdG8gZXhpdF9idXN5OworCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCSAgICAgcGRldi0+bmFtZSkpCisJCWdvdG8gZXhpdF9idXN5OworCWh3LT5iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCQkJcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWh3LT5iYXNlKQorCQlnb3RvIGV4aXRfYnVzeTsKKwkvKiBwcm9ncmFtIGRlZmF1bHRzIGludG8gdGhlIHJlZ2lzdGVycyAqLworCWh3LT5pbXIgPSAwOwkJLyogZGlzYWJsZSBzcGkgaW50ZXJydXB0cyAqLworCXdyaXRlbChody0+aW1yLCBody0+YmFzZSArIEFMVEVSQV9TUElfQ09OVFJPTCk7CisJd3JpdGVsKDAsIGh3LT5iYXNlICsgQUxURVJBX1NQSV9TVEFUVVMpOwkvKiBjbGVhciBzdGF0dXMgcmVnICovCisJaWYgKHJlYWRsKGh3LT5iYXNlICsgQUxURVJBX1NQSV9TVEFUVVMpICYgQUxURVJBX1NQSV9TVEFUVVNfUlJEWV9NU0spCisJCXJlYWRsKGh3LT5iYXNlICsgQUxURVJBX1NQSV9SWERBVEEpOwkvKiBmbHVzaCByeGRhdGEgKi8KKwkvKiBpcnEgaXMgb3B0aW9uYWwgKi8KKwlody0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaHctPmlycSA+PSAwKSB7CisJCWluaXRfY29tcGxldGlvbigmaHctPmRvbmUpOworCQllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGh3LT5pcnEsIGFsdGVyYV9zcGlfaXJxLCAwLAorCQkJCSAgICAgICBwZGV2LT5uYW1lLCBodyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXQ7CisJfQorCS8qIGZpbmQgcGxhdGZvcm0gZGF0YSAqLworCWlmICghcGxhdHApCisJCWh3LT5iaXRiYW5nLm1hc3Rlci0+ZGV2Lm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKworCS8qIHJlZ2lzdGVyIG91ciBzcGkgY29udHJvbGxlciAqLworCWVyciA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZody0+Yml0YmFuZyk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJiYXNlICVwLCBpcnEgJWRcbiIsIGh3LT5iYXNlLCBody0+aXJxKTsKKworCXJldHVybiAwOworCitleGl0X2J1c3k6CisJZXJyID0gLUVCVVNZOworZXhpdDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFsdGVyYV9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWx0ZXJhX3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBody0+Yml0YmFuZy5tYXN0ZXI7CisKKwlzcGlfYml0YmFuZ19zdG9wKCZody0+Yml0YmFuZyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhbHRlcmFfc3BpX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJBTFRSLHNwaS0xLjAiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFsdGVyYV9zcGlfbWF0Y2gpOworI2Vsc2UgLyogQ09ORklHX09GICovCisjZGVmaW5lIGFsdGVyYV9zcGlfbWF0Y2ggTlVMTAorI2VuZGlmIC8qIENPTkZJR19PRiAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhbHRlcmFfc3BpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBhbHRlcmFfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhbHRlcmFfc3BpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUlZfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9IE5VTEwsCisJCS5vZl9tYXRjaF90YWJsZSA9IGFsdGVyYV9zcGlfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsdGVyYV9zcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFsdGVyYV9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFsdGVyYV9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHRlcmFfc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWx0ZXJhX3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWx0ZXJhX3NwaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbHRlcmEgU1BJIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCmluZGV4IDNmMjIzNTEuLmEyODQ2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwpAQCAtNDI1LDYgKzQyNSw3IEBACiAJc3RydWN0IGJmaW5fc3BpX3NsYXZlX2RhdGEgKmNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7CiAJc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKIAlpbnQgbl9ieXRlcyA9IGRydl9kYXRhLT5uX2J5dGVzOworCWludCBsb29wID0gMDsKIAogCS8qIHdhaXQgdW50aWwgdHJhbnNmZXIgZmluaXNoZWQuICovCiAJd2hpbGUgKCEocmVhZF9TVEFUKGRydl9kYXRhKSAmIEJJVF9TVEFUX1JYUykpCkBAIC00MzUsMTAgKzQzNiwxNSBAQAogCQkvKiBsYXN0IHJlYWQgKi8KIAkJaWYgKGRydl9kYXRhLT5yeCkgewogCQkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgImxhc3QgcmVhZFxuIik7Ci0JCQlpZiAobl9ieXRlcyA9PSAyKQotCQkJCSoodTE2ICopIChkcnZfZGF0YS0+cngpID0gcmVhZF9SREJSKGRydl9kYXRhKTsKLQkJCWVsc2UgaWYgKG5fYnl0ZXMgPT0gMSkKLQkJCQkqKHU4ICopIChkcnZfZGF0YS0+cngpID0gcmVhZF9SREJSKGRydl9kYXRhKTsKKwkJCWlmIChuX2J5dGVzICUgMikgeworCQkJCXUxNiAqYnVmID0gKHUxNiAqKWRydl9kYXRhLT5yeDsKKwkJCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbl9ieXRlcyAvIDI7IGxvb3ArKykKKwkJCQkJKmJ1ZisrID0gcmVhZF9SREJSKGRydl9kYXRhKTsKKwkJCX0gZWxzZSB7CisJCQkJdTggKmJ1ZiA9ICh1OCAqKWRydl9kYXRhLT5yeDsKKwkJCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbl9ieXRlczsgbG9vcCsrKQorCQkJCQkqYnVmKysgPSByZWFkX1JEQlIoZHJ2X2RhdGEpOworCQkJfQogCQkJZHJ2X2RhdGEtPnJ4ICs9IG5fYnl0ZXM7CiAJCX0KIApAQCAtNDU4LDI5ICs0NjQsNTMgQEAKIAlpZiAoZHJ2X2RhdGEtPnJ4ICYmIGRydl9kYXRhLT50eCkgewogCQkvKiBkdXBsZXggKi8KIAkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgImR1cGxleDogd3JpdGVfVERCUlxuIik7Ci0JCWlmIChkcnZfZGF0YS0+bl9ieXRlcyA9PSAyKSB7Ci0JCQkqKHUxNiAqKSAoZHJ2X2RhdGEtPnJ4KSA9IHJlYWRfUkRCUihkcnZfZGF0YSk7Ci0JCQl3cml0ZV9UREJSKGRydl9kYXRhLCAoKih1MTYgKikgKGRydl9kYXRhLT50eCkpKTsKLQkJfSBlbHNlIGlmIChkcnZfZGF0YS0+bl9ieXRlcyA9PSAxKSB7Ci0JCQkqKHU4ICopIChkcnZfZGF0YS0+cngpID0gcmVhZF9SREJSKGRydl9kYXRhKTsKLQkJCXdyaXRlX1REQlIoZHJ2X2RhdGEsICgqKHU4ICopIChkcnZfZGF0YS0+dHgpKSk7CisJCWlmIChuX2J5dGVzICUgMikgeworCQkJdTE2ICpidWYgPSAodTE2ICopZHJ2X2RhdGEtPnJ4OworCQkJdTE2ICpidWYyID0gKHUxNiAqKWRydl9kYXRhLT50eDsKKwkJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBuX2J5dGVzIC8gMjsgbG9vcCsrKSB7CisJCQkJKmJ1ZisrID0gcmVhZF9SREJSKGRydl9kYXRhKTsKKwkJCQl3cml0ZV9UREJSKGRydl9kYXRhLCAqYnVmMisrKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXU4ICpidWYgPSAodTggKilkcnZfZGF0YS0+cng7CisJCQl1OCAqYnVmMiA9ICh1OCAqKWRydl9kYXRhLT50eDsKKwkJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBuX2J5dGVzOyBsb29wKyspIHsKKwkJCQkqYnVmKysgPSByZWFkX1JEQlIoZHJ2X2RhdGEpOworCQkJCXdyaXRlX1REQlIoZHJ2X2RhdGEsICpidWYyKyspOworCQkJfQogCQl9CiAJfSBlbHNlIGlmIChkcnZfZGF0YS0+cngpIHsKIAkJLyogcmVhZCAqLwogCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAicmVhZDogd3JpdGVfVERCUlxuIik7Ci0JCWlmIChkcnZfZGF0YS0+bl9ieXRlcyA9PSAyKQotCQkJKih1MTYgKikgKGRydl9kYXRhLT5yeCkgPSByZWFkX1JEQlIoZHJ2X2RhdGEpOwotCQllbHNlIGlmIChkcnZfZGF0YS0+bl9ieXRlcyA9PSAxKQotCQkJKih1OCAqKSAoZHJ2X2RhdGEtPnJ4KSA9IHJlYWRfUkRCUihkcnZfZGF0YSk7Ci0JCXdyaXRlX1REQlIoZHJ2X2RhdGEsIGNoaXAtPmlkbGVfdHhfdmFsKTsKKwkJaWYgKG5fYnl0ZXMgJSAyKSB7CisJCQl1MTYgKmJ1ZiA9ICh1MTYgKilkcnZfZGF0YS0+cng7CisJCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbl9ieXRlcyAvIDI7IGxvb3ArKykgeworCQkJCSpidWYrKyA9IHJlYWRfUkRCUihkcnZfZGF0YSk7CisJCQkJd3JpdGVfVERCUihkcnZfZGF0YSwgY2hpcC0+aWRsZV90eF92YWwpOworCQkJfQorCQl9IGVsc2UgeworCQkJdTggKmJ1ZiA9ICh1OCAqKWRydl9kYXRhLT5yeDsKKwkJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBuX2J5dGVzOyBsb29wKyspIHsKKwkJCQkqYnVmKysgPSByZWFkX1JEQlIoZHJ2X2RhdGEpOworCQkJCXdyaXRlX1REQlIoZHJ2X2RhdGEsIGNoaXAtPmlkbGVfdHhfdmFsKTsKKwkJCX0KKwkJfQogCX0gZWxzZSBpZiAoZHJ2X2RhdGEtPnR4KSB7CiAJCS8qIHdyaXRlICovCiAJCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJ3cml0ZTogd3JpdGVfVERCUlxuIik7Ci0JCWJmaW5fc3BpX2R1bW15X3JlYWQoZHJ2X2RhdGEpOwotCQlpZiAoZHJ2X2RhdGEtPm5fYnl0ZXMgPT0gMikKLQkJCXdyaXRlX1REQlIoZHJ2X2RhdGEsICgqKHUxNiAqKSAoZHJ2X2RhdGEtPnR4KSkpOwotCQllbHNlIGlmIChkcnZfZGF0YS0+bl9ieXRlcyA9PSAxKQotCQkJd3JpdGVfVERCUihkcnZfZGF0YSwgKCoodTggKikgKGRydl9kYXRhLT50eCkpKTsKKwkJaWYgKG5fYnl0ZXMgJSAyKSB7CisJCQl1MTYgKmJ1ZiA9ICh1MTYgKilkcnZfZGF0YS0+dHg7CisJCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbl9ieXRlcyAvIDI7IGxvb3ArKykgeworCQkJCXJlYWRfUkRCUihkcnZfZGF0YSk7CisJCQkJd3JpdGVfVERCUihkcnZfZGF0YSwgKmJ1ZisrKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXU4ICpidWYgPSAodTggKilkcnZfZGF0YS0+dHg7CisJCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbl9ieXRlczsgbG9vcCsrKSB7CisJCQkJcmVhZF9SREJSKGRydl9kYXRhKTsKKwkJCQl3cml0ZV9UREJSKGRydl9kYXRhLCAqYnVmKyspOworCQkJfQorCQl9CiAJfQogCiAJaWYgKGRydl9kYXRhLT50eCkKQEAgLTYyMyw2ICs2NTMsNyBAQAogCQltZXNzYWdlLT5zdGF0ZSA9IGJmaW5fc3BpX25leHRfdHJhbnNmZXIoZHJ2X2RhdGEpOwogCQkvKiBTY2hlZHVsZSBuZXh0IHRyYW5zZmVyIHRhc2tsZXQgKi8KIAkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKKwkJcmV0dXJuOwogCX0KIAogCWlmICh0cmFuc2Zlci0+dHhfYnVmICE9IE5VTEwpIHsKQEAgLTY1MSwxNiArNjgyLDE2IEBACiAKIAkvKiBCaXRzIHBlciB3b3JkIHNldHVwICovCiAJYml0c19wZXJfd29yZCA9IHRyYW5zZmVyLT5iaXRzX3Blcl93b3JkID8gOiBtZXNzYWdlLT5zcGktPmJpdHNfcGVyX3dvcmQ7Ci0JaWYgKGJpdHNfcGVyX3dvcmQgPT0gOCkgewotCQlkcnZfZGF0YS0+bl9ieXRlcyA9IDE7Ci0JCWRydl9kYXRhLT5sZW4gPSB0cmFuc2Zlci0+bGVuOwotCQljcl93aWR0aCA9IDA7Ci0JCWRydl9kYXRhLT5vcHMgPSAmYmZpbl9iZmluX3NwaV90cmFuc2Zlcl9vcHNfdTg7Ci0JfSBlbHNlIGlmIChiaXRzX3Blcl93b3JkID09IDE2KSB7Ci0JCWRydl9kYXRhLT5uX2J5dGVzID0gMjsKKwlpZiAoKGJpdHNfcGVyX3dvcmQgPiAwKSAmJiAoYml0c19wZXJfd29yZCAlIDE2ID09IDApKSB7CisJCWRydl9kYXRhLT5uX2J5dGVzID0gYml0c19wZXJfd29yZC84OwogCQlkcnZfZGF0YS0+bGVuID0gKHRyYW5zZmVyLT5sZW4pID4+IDE7CiAJCWNyX3dpZHRoID0gQklUX0NUTF9XT1JEU0laRTsKIAkJZHJ2X2RhdGEtPm9wcyA9ICZiZmluX2JmaW5fc3BpX3RyYW5zZmVyX29wc191MTY7CisJfSBlbHNlIGlmICgoYml0c19wZXJfd29yZCA+IDApICYmIChiaXRzX3Blcl93b3JkICUgOCA9PSAwKSkgeworCQlkcnZfZGF0YS0+bl9ieXRlcyA9IGJpdHNfcGVyX3dvcmQvODsKKwkJZHJ2X2RhdGEtPmxlbiA9IHRyYW5zZmVyLT5sZW47CisJCWNyX3dpZHRoID0gMDsKKwkJZHJ2X2RhdGEtPm9wcyA9ICZiZmluX2JmaW5fc3BpX3RyYW5zZmVyX29wc191ODsKIAl9IGVsc2UgewogCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAidHJhbnNmZXI6IHVuc3VwcG9ydGVkIGJpdHNfcGVyX3dvcmRcbiIpOwogCQltZXNzYWdlLT5zdGF0dXMgPSAtRUlOVkFMOwpAQCAtODE1LDEwICs4NDYsMTkgQEAKIAkJaWYgKGRydl9kYXRhLT50eCA9PSBOVUxMKQogCQkJd3JpdGVfVERCUihkcnZfZGF0YSwgY2hpcC0+aWRsZV90eF92YWwpOwogCQllbHNlIHsKLQkJCWlmIChiaXRzX3Blcl93b3JkID09IDgpCi0JCQkJd3JpdGVfVERCUihkcnZfZGF0YSwgKCoodTggKikgKGRydl9kYXRhLT50eCkpKTsKLQkJCWVsc2UKLQkJCQl3cml0ZV9UREJSKGRydl9kYXRhLCAoKih1MTYgKikgKGRydl9kYXRhLT50eCkpKTsKKwkJCWludCBsb29wOworCQkJaWYgKGJpdHNfcGVyX3dvcmQgJSAxNiA9PSAwKSB7CisJCQkJdTE2ICpidWYgPSAodTE2ICopZHJ2X2RhdGEtPnR4OworCQkJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBiaXRzX3Blcl93b3JkIC8gMTY7CisJCQkJCQlsb29wKyspIHsKKwkJCQkJd3JpdGVfVERCUihkcnZfZGF0YSwgKmJ1ZisrKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGJpdHNfcGVyX3dvcmQgJSA4ID09IDApIHsKKwkJCQl1OCAqYnVmID0gKHU4ICopZHJ2X2RhdGEtPnR4OworCQkJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBiaXRzX3Blcl93b3JkIC8gODsgbG9vcCsrKQorCQkJCQl3cml0ZV9UREJSKGRydl9kYXRhLCAqYnVmKyspOworCQkJfQorCiAJCQlkcnZfZGF0YS0+dHggKz0gZHJ2X2RhdGEtPm5fYnl0ZXM7CiAJCX0KIApAQCAtMTAzMSw3ICsxMDcxLDcgQEAKIAkJY2hpcC0+Y3RsX3JlZyAmPSBiZmluX2N0bF9yZWc7CiAJfQogCi0JaWYgKHNwaS0+Yml0c19wZXJfd29yZCAhPSA4ICYmIHNwaS0+Yml0c19wZXJfd29yZCAhPSAxNikgeworCWlmIChzcGktPmJpdHNfcGVyX3dvcmQgJSA4KSB7CiAJCWRldl9lcnIoJnNwaS0+ZGV2LCAiJWQgYml0c19wZXJfd29yZCBpcyBub3Qgc3VwcG9ydGVkXG4iLAogCQkJCXNwaS0+Yml0c19wZXJfd29yZCk7CiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYml0YmFuZy5jIGIvZHJpdmVycy9zcGkvc3BpX2JpdGJhbmcuYwppbmRleCA4YjU1NzI0Li4xNGE2M2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYml0YmFuZy5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9iaXRiYW5nLmMKQEAgLTI1OSwxMCArMjU5LDYgQEAKIAlzdHJ1Y3Qgc3BpX2JpdGJhbmcJKmJpdGJhbmcgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHNwaV9iaXRiYW5nLCB3b3JrKTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlpbnQJCQkoKnNldHVwX3RyYW5zZmVyKShzdHJ1Y3Qgc3BpX2RldmljZSAqLAotCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICopOwotCi0Jc2V0dXBfdHJhbnNmZXIgPSBiaXRiYW5nLT5zZXR1cF90cmFuc2ZlcjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRiYW5nLT5sb2NrLCBmbGFncyk7CiAJYml0YmFuZy0+YnVzeSA9IDE7CkBAIC0zMDAsMTEgKzI5Niw3IEBACiAKIAkJCS8qIGluaXQgKC0xKSBvciBvdmVycmlkZSAoMSkgdHJhbnNmZXIgcGFyYW1zICovCiAJCQlpZiAoZG9fc2V0dXAgIT0gMCkgewotCQkJCWlmICghc2V0dXBfdHJhbnNmZXIpIHsKLQkJCQkJc3RhdHVzID0gLUVOT1BST1RPT1BUOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJc3RhdHVzID0gc2V0dXBfdHJhbnNmZXIoc3BpLCB0KTsKKwkJCQlzdGF0dXMgPSBiaXRiYW5nLT5zZXR1cF90cmFuc2ZlcihzcGksIHQpOwogCQkJCWlmIChzdGF0dXMgPCAwKQogCQkJCQlicmVhazsKIAkJCQlpZiAoZG9fc2V0dXAgPT0gLTEpCkBAIC00NjUsNiArNDU3LDkgQEAKIAkJfQogCX0gZWxzZSBpZiAoIWJpdGJhbmctPm1hc3Rlci0+c2V0dXApCiAJCXJldHVybiAtRUlOVkFMOworCWlmIChiaXRiYW5nLT5tYXN0ZXItPnRyYW5zZmVyID09IHNwaV9iaXRiYW5nX3RyYW5zZmVyICYmCisJCQkhYml0YmFuZy0+c2V0dXBfdHJhbnNmZXIpCisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogdGhpcyB0YXNrIGlzIHRoZSBvbmx5IHRoaW5nIHRvIHRvdWNoIHRoZSBTUEkgYml0cyAqLwogCWJpdGJhbmctPmJ1c3kgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2lteC5jIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCmluZGV4IDFjZjlkNWYuLjY5ZDZkYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogI2RlZmluZSBTUElfSU1YMl8zX0NUUkwJCTB4MDgKICNkZWZpbmUgU1BJX0lNWDJfM19DVFJMX0VOQUJMRQkJKDEgPDwgIDApCiAjZGVmaW5lIFNQSV9JTVgyXzNfQ1RSTF9YQ0gJCSgxIDw8ICAyKQotI2RlZmluZSBTUElfSU1YMl8zX0NUUkxfTU9ERShjcykJKDEgPDwgKChjcykgKyAgNCkpCisjZGVmaW5lIFNQSV9JTVgyXzNfQ1RSTF9NT0RFX01BU0sJKDB4ZiA8PCA0KQogI2RlZmluZSBTUElfSU1YMl8zX0NUUkxfUE9TVERJVl9PRkZTRVQJOAogI2RlZmluZSBTUElfSU1YMl8zX0NUUkxfUFJFRElWX09GRlNFVAkxMgogI2RlZmluZSBTUElfSU1YMl8zX0NUUkxfQ1MoY3MpCQkoKGNzKSA8PCAxOCkKQEAgLTI1Myw4ICsyNTMsMTQgQEAKIHsKIAl1MzIgY3RybCA9IFNQSV9JTVgyXzNfQ1RSTF9FTkFCTEUsIGNmZyA9IDA7CiAKLQkvKiBzZXQgbWFzdGVyIG1vZGUgKi8KLQljdHJsIHw9IFNQSV9JTVgyXzNfQ1RSTF9NT0RFKGNvbmZpZy0+Y3MpOworCS8qCisJICogVGhlIGhhcmR3YXJlIHNlZW1zIHRvIGhhdmUgYSByYWNlIGNvbmRpdGlvbiB3aGVuIGNoYW5naW5nIG1vZGVzLiBUaGUKKwkgKiBjdXJyZW50IGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjaGFubmVsIGFycml2ZXMKKwkgKiBlYXJsaWVyIGluIHRoZSBoYXJkd2FyZSB0aGFuIHRoZSBtb2RlIGJpdHMgd2hlbiB0aGV5IGFyZSB3cml0dGVuIGF0CisJICogdGhlIHNhbWUgdGltZS4KKwkgKiBTbyBzZXQgbWFzdGVyIG1vZGUgZm9yIGFsbCBjaGFubmVscyBhcyB3ZSBkbyBub3Qgc3VwcG9ydCBzbGF2ZSBtb2RlLgorCSAqLworCWN0cmwgfD0gU1BJX0lNWDJfM19DVFJMX01PREVfTUFTSzsKIAogCS8qIHNldCBjbG9jayBzcGVlZCAqLwogCWN0cmwgfD0gc3BpX2lteDJfM19jbGtkaXYoc3BpX2lteC0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfb2NfdGlueS5jIGIvZHJpdmVycy9zcGkvc3BpX29jX3RpbnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWJkZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpX29jX3RpbnkuYwpAQCAtMCwwICsxLDQyNSBAQAorLyoKKyAqIE9wZW5Db3JlcyB0aW55IFNQSSBtYXN0ZXIgZHJpdmVyCisgKgorICogaHR0cDovL29wZW5jb3Jlcy5vcmcvcHJvamVjdCx0aW55X3NwaQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogQmFzZWQgb24gc3BpX3MzYzI0eHguYywgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQmVuIERvb2tzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfb2NfdGlueS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgInNwaV9vY190aW55IgorCisjZGVmaW5lIFRJTllfU1BJX1JYREFUQSAwCisjZGVmaW5lIFRJTllfU1BJX1RYREFUQSA0CisjZGVmaW5lIFRJTllfU1BJX1NUQVRVUyA4CisjZGVmaW5lIFRJTllfU1BJX0NPTlRST0wgMTIKKyNkZWZpbmUgVElOWV9TUElfQkFVRCAxNgorCisjZGVmaW5lIFRJTllfU1BJX1NUQVRVU19UWEUgMHgxCisjZGVmaW5lIFRJTllfU1BJX1NUQVRVU19UWFIgMHgyCisKK3N0cnVjdCB0aW55X3NwaSB7CisJLyogYml0YmFuZyBoYXMgdG8gYmUgZmlyc3QgKi8KKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcgYml0YmFuZzsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBpcnE7CisJdW5zaWduZWQgaW50IGZyZXE7CisJdW5zaWduZWQgaW50IGJhdWR3aWR0aDsKKwl1bnNpZ25lZCBpbnQgYmF1ZDsKKwl1bnNpZ25lZCBpbnQgc3BlZWRfaHo7CisJdW5zaWduZWQgaW50IG1vZGU7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgdHhjLCByeGM7CisJY29uc3QgdTggKnR4cDsKKwl1OCAqcnhwOworCXVuc2lnbmVkIGludCBncGlvX2NzX2NvdW50OworCWludCAqZ3Bpb19jczsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbnlfc3BpICp0aW55X3NwaV90b19odyhzdHJ1Y3Qgc3BpX2RldmljZSAqc2RldikKK3sKKwlyZXR1cm4gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzZGV2LT5tYXN0ZXIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRpbnlfc3BpX2JhdWQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgaW50IGh6KQoreworCXN0cnVjdCB0aW55X3NwaSAqaHcgPSB0aW55X3NwaV90b19odyhzcGkpOworCisJcmV0dXJuIG1pbihESVZfUk9VTkRfVVAoaHctPmZyZXEsIGh6ICogMiksICgxVSA8PCBody0+YmF1ZHdpZHRoKSkgLSAxOworfQorCitzdGF0aWMgdm9pZCB0aW55X3NwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHRpbnlfc3BpICpodyA9IHRpbnlfc3BpX3RvX2h3KHNwaSk7CisKKwlpZiAoaHctPmdwaW9fY3NfY291bnQpIHsKKwkJZ3Bpb19zZXRfdmFsdWUoaHctPmdwaW9fY3Nbc3BpLT5jaGlwX3NlbGVjdF0sCisJCQkoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpID8gaXNfYWN0aXZlIDogIWlzX2FjdGl2ZSk7CisJfQorfQorCitzdGF0aWMgaW50IHRpbnlfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJICAgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgdGlueV9zcGkgKmh3ID0gdGlueV9zcGlfdG9faHcoc3BpKTsKKwl1bnNpZ25lZCBpbnQgYmF1ZCA9IGh3LT5iYXVkOworCisJaWYgKHQpIHsKKwkJaWYgKHQtPnNwZWVkX2h6ICYmIHQtPnNwZWVkX2h6ICE9IGh3LT5zcGVlZF9oeikKKwkJCWJhdWQgPSB0aW55X3NwaV9iYXVkKHNwaSwgdC0+c3BlZWRfaHopOworCX0KKwl3cml0ZWwoYmF1ZCwgaHctPmJhc2UgKyBUSU5ZX1NQSV9CQVVEKTsKKwl3cml0ZWwoaHctPm1vZGUsIGh3LT5iYXNlICsgVElOWV9TUElfQ09OVFJPTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlueV9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgdGlueV9zcGkgKmh3ID0gdGlueV9zcGlfdG9faHcoc3BpKTsKKworCWlmIChzcGktPm1heF9zcGVlZF9oeiAhPSBody0+c3BlZWRfaHopIHsKKwkJaHctPnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisJCWh3LT5iYXVkID0gdGlueV9zcGlfYmF1ZChzcGksIGh3LT5zcGVlZF9oeik7CisJfQorCWh3LT5tb2RlID0gc3BpLT5tb2RlICYgKFNQSV9DUE9MIHwgU1BJX0NQSEEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGlueV9zcGlfd2FpdF90eHIoc3RydWN0IHRpbnlfc3BpICpodykKK3sKKwl3aGlsZSAoIShyZWFkYihody0+YmFzZSArIFRJTllfU1BJX1NUQVRVUykgJgorCQkgVElOWV9TUElfU1RBVFVTX1RYUikpCisJCWNwdV9yZWxheCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGlueV9zcGlfd2FpdF90eGUoc3RydWN0IHRpbnlfc3BpICpodykKK3sKKwl3aGlsZSAoIShyZWFkYihody0+YmFzZSArIFRJTllfU1BJX1NUQVRVUykgJgorCQkgVElOWV9TUElfU1RBVFVTX1RYRSkpCisJCWNwdV9yZWxheCgpOworfQorCitzdGF0aWMgaW50IHRpbnlfc3BpX3R4cnhfYnVmcyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCB0aW55X3NwaSAqaHcgPSB0aW55X3NwaV90b19odyhzcGkpOworCWNvbnN0IHU4ICp0eHAgPSB0LT50eF9idWY7CisJdTggKnJ4cCA9IHQtPnJ4X2J1ZjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChody0+aXJxID49IDApIHsKKwkJLyogdXNlIGludHJydXB0IGRyaXZlbiBkYXRhIHRyYW5zZmVyICovCisJCWh3LT5sZW4gPSB0LT5sZW47CisJCWh3LT50eHAgPSB0LT50eF9idWY7CisJCWh3LT5yeHAgPSB0LT5yeF9idWY7CisJCWh3LT50eGMgPSAwOworCQlody0+cnhjID0gMDsKKworCQkvKiBzZW5kIHRoZSBmaXJzdCBieXRlICovCisJCWlmICh0LT5sZW4gPiAxKSB7CisJCQl3cml0ZWIoaHctPnR4cCA/ICpody0+dHhwKysgOiAwLAorCQkJICAgICAgIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJCWh3LT50eGMrKzsKKwkJCXdyaXRlYihody0+dHhwID8gKmh3LT50eHArKyA6IDAsCisJCQkgICAgICAgaHctPmJhc2UgKyBUSU5ZX1NQSV9UWERBVEEpOworCQkJaHctPnR4YysrOworCQkJd3JpdGViKFRJTllfU1BJX1NUQVRVU19UWFIsIGh3LT5iYXNlICsgVElOWV9TUElfU1RBVFVTKTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlYihody0+dHhwID8gKmh3LT50eHArKyA6IDAsCisJCQkgICAgICAgaHctPmJhc2UgKyBUSU5ZX1NQSV9UWERBVEEpOworCQkJaHctPnR4YysrOworCQkJd3JpdGViKFRJTllfU1BJX1NUQVRVU19UWEUsIGh3LT5iYXNlICsgVElOWV9TUElfU1RBVFVTKTsKKwkJfQorCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh3LT5kb25lKTsKKwl9IGVsc2UgaWYgKHR4cCAmJiByeHApIHsKKwkJLyogd2UgbmVlZCB0byB0aWdodGVuIHRoZSB0cmFuc2ZlciBsb29wICovCisJCXdyaXRlYigqdHhwKyssIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJaWYgKHQtPmxlbiA+IDEpIHsKKwkJCXdyaXRlYigqdHhwKyssIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJCWZvciAoaSA9IDI7IGkgPCB0LT5sZW47IGkrKykgeworCQkJCXU4IHJ4LCB0eCA9ICp0eHArKzsKKwkJCQl0aW55X3NwaV93YWl0X3R4cihodyk7CisJCQkJcnggPSByZWFkYihody0+YmFzZSArIFRJTllfU1BJX1RYREFUQSk7CisJCQkJd3JpdGViKHR4LCBody0+YmFzZSArIFRJTllfU1BJX1RYREFUQSk7CisJCQkJKnJ4cCsrID0gcng7CisJCQl9CisJCQl0aW55X3NwaV93YWl0X3R4cihodyk7CisJCQkqcnhwKysgPSByZWFkYihody0+YmFzZSArIFRJTllfU1BJX1RYREFUQSk7CisJCX0KKwkJdGlueV9zcGlfd2FpdF90eGUoaHcpOworCQkqcnhwKysgPSByZWFkYihody0+YmFzZSArIFRJTllfU1BJX1JYREFUQSk7CisJfSBlbHNlIGlmIChyeHApIHsKKwkJd3JpdGViKDAsIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJaWYgKHQtPmxlbiA+IDEpIHsKKwkJCXdyaXRlYigwLAorCQkJICAgICAgIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJCWZvciAoaSA9IDI7IGkgPCB0LT5sZW47IGkrKykgeworCQkJCXU4IHJ4OworCQkJCXRpbnlfc3BpX3dhaXRfdHhyKGh3KTsKKwkJCQlyeCA9IHJlYWRiKGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJCQl3cml0ZWIoMCwgaHctPmJhc2UgKyBUSU5ZX1NQSV9UWERBVEEpOworCQkJCSpyeHArKyA9IHJ4OworCQkJfQorCQkJdGlueV9zcGlfd2FpdF90eHIoaHcpOworCQkJKnJ4cCsrID0gcmVhZGIoaHctPmJhc2UgKyBUSU5ZX1NQSV9UWERBVEEpOworCQl9CisJCXRpbnlfc3BpX3dhaXRfdHhlKGh3KTsKKwkJKnJ4cCsrID0gcmVhZGIoaHctPmJhc2UgKyBUSU5ZX1NQSV9SWERBVEEpOworCX0gZWxzZSBpZiAodHhwKSB7CisJCXdyaXRlYigqdHhwKyssIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJaWYgKHQtPmxlbiA+IDEpIHsKKwkJCXdyaXRlYigqdHhwKyssIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJCWZvciAoaSA9IDI7IGkgPCB0LT5sZW47IGkrKykgeworCQkJCXU4IHR4ID0gKnR4cCsrOworCQkJCXRpbnlfc3BpX3dhaXRfdHhyKGh3KTsKKwkJCQl3cml0ZWIodHgsIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJCX0KKwkJfQorCQl0aW55X3NwaV93YWl0X3R4ZShodyk7CisJfSBlbHNlIHsKKwkJd3JpdGViKDAsIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJaWYgKHQtPmxlbiA+IDEpIHsKKwkJCXdyaXRlYigwLCBody0+YmFzZSArIFRJTllfU1BJX1RYREFUQSk7CisJCQlmb3IgKGkgPSAyOyBpIDwgdC0+bGVuOyBpKyspIHsKKwkJCQl0aW55X3NwaV93YWl0X3R4cihodyk7CisJCQkJd3JpdGViKDAsIGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJCX0KKwkJfQorCQl0aW55X3NwaV93YWl0X3R4ZShodyk7CisJfQorCXJldHVybiB0LT5sZW47Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aW55X3NwaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCB0aW55X3NwaSAqaHcgPSBkZXY7CisKKwl3cml0ZWIoMCwgaHctPmJhc2UgKyBUSU5ZX1NQSV9TVEFUVVMpOworCWlmIChody0+cnhjICsgMSA9PSBody0+bGVuKSB7CisJCWlmIChody0+cnhwKQorCQkJKmh3LT5yeHArKyA9IHJlYWRiKGh3LT5iYXNlICsgVElOWV9TUElfUlhEQVRBKTsKKwkJaHctPnJ4YysrOworCQljb21wbGV0ZSgmaHctPmRvbmUpOworCX0gZWxzZSB7CisJCWlmIChody0+cnhwKQorCQkJKmh3LT5yeHArKyA9IHJlYWRiKGh3LT5iYXNlICsgVElOWV9TUElfVFhEQVRBKTsKKwkJaHctPnJ4YysrOworCQlpZiAoaHctPnR4YyA8IGh3LT5sZW4pIHsKKwkJCXdyaXRlYihody0+dHhwID8gKmh3LT50eHArKyA6IDAsCisJCQkgICAgICAgaHctPmJhc2UgKyBUSU5ZX1NQSV9UWERBVEEpOworCQkJaHctPnR4YysrOworCQkJd3JpdGViKFRJTllfU1BJX1NUQVRVU19UWFIsCisJCQkgICAgICAgaHctPmJhc2UgKyBUSU5ZX1NQSV9TVEFUVVMpOworCQl9IGVsc2UgeworCQkJd3JpdGViKFRJTllfU1BJX1NUQVRVU19UWEUsCisJCQkgICAgICAgaHctPmJhc2UgKyBUSU5ZX1NQSV9TVEFUVVMpOworCQl9CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIENPTkZJR19PRgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKworc3RhdGljIGludCBfX2RldmluaXQgdGlueV9zcGlfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdGlueV9zcGkgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IF9fYmUzMiAqdmFsOworCWludCBsZW47CisKKwlpZiAoIW5wKQorCQlyZXR1cm4gMDsKKwlody0+Z3Bpb19jc19jb3VudCA9IG9mX2dwaW9fY291bnQobnApOworCWlmIChody0+Z3Bpb19jc19jb3VudCkgeworCQlody0+Z3Bpb19jcyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LAorCQkJCWh3LT5ncGlvX2NzX2NvdW50ICogc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghaHctPmdwaW9fY3MpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGh3LT5ncGlvX2NzX2NvdW50OyBpKyspIHsKKwkJaHctPmdwaW9fY3NbaV0gPSBvZl9nZXRfZ3Bpb19mbGFncyhucCwgaSwgTlVMTCk7CisJCWlmIChody0+Z3Bpb19jc1tpXSA8IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaHctPmJpdGJhbmcubWFzdGVyLT5kZXYub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCXZhbCA9IG9mX2dldF9wcm9wZXJ0eShwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCSAgICAgICJjbG9jay1mcmVxdWVuY3kiLCAmbGVuKTsKKwlpZiAodmFsICYmIGxlbiA+PSBzaXplb2YoX19iZTMyKSkKKwkJaHctPmZyZXEgPSBiZTMyX3RvX2NwdXAodmFsKTsKKwl2YWwgPSBvZl9nZXRfcHJvcGVydHkocGRldi0+ZGV2Lm9mX25vZGUsICJiYXVkLXdpZHRoIiwgJmxlbik7CisJaWYgKHZhbCAmJiBsZW4gPj0gc2l6ZW9mKF9fYmUzMikpCisJCWh3LT5iYXVkd2lkdGggPSBiZTMyX3RvX2NwdXAodmFsKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlIC8qICFDT05GSUdfT0YgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbnlfc3BpX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX09GICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbnlfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRpbnlfc3BpX3BsYXRmb3JtX2RhdGEgKnBsYXRwID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRpbnlfc3BpICpodzsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGludCBpOworCWludCBlcnIgPSAtRU5PREVWOworCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHRpbnlfc3BpKSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiBlcnI7CisKKwkvKiBzZXR1cCB0aGUgbWFzdGVyIHN0YXRlLiAqLworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSAyNTU7CisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0NTX0hJR0g7CisJbWFzdGVyLT5zZXR1cCA9IHRpbnlfc3BpX3NldHVwOworCisJaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJLyogc2V0dXAgdGhlIHN0YXRlIGZvciB0aGUgYml0YmFuZyBkcml2ZXIgKi8KKwlody0+Yml0YmFuZy5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCWlmICghaHctPmJpdGJhbmcubWFzdGVyKQorCQlyZXR1cm4gZXJyOworCWh3LT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gdGlueV9zcGlfc2V0dXBfdHJhbnNmZXI7CisJaHctPmJpdGJhbmcuY2hpcHNlbGVjdCA9IHRpbnlfc3BpX2NoaXBzZWxlY3Q7CisJaHctPmJpdGJhbmcudHhyeF9idWZzID0gdGlueV9zcGlfdHhyeF9idWZzOworCisJLyogZmluZCBhbmQgbWFwIG91ciByZXNvdXJjZXMgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlnb3RvIGV4aXRfYnVzeTsKKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkgICAgIHBkZXYtPm5hbWUpKQorCQlnb3RvIGV4aXRfYnVzeTsKKwlody0+YmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQkJCXJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFody0+YmFzZSkKKwkJZ290byBleGl0X2J1c3k7CisJLyogaXJxIGlzIG9wdGlvbmFsICovCisJaHctPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGh3LT5pcnEgPj0gMCkgeworCQlpbml0X2NvbXBsZXRpb24oJmh3LT5kb25lKTsKKwkJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBody0+aXJxLCB0aW55X3NwaV9pcnEsIDAsCisJCQkJICAgICAgIHBkZXYtPm5hbWUsIGh3KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdDsKKwl9CisJLyogZmluZCBwbGF0Zm9ybSBkYXRhICovCisJaWYgKHBsYXRwKSB7CisJCWh3LT5ncGlvX2NzX2NvdW50ID0gcGxhdHAtPmdwaW9fY3NfY291bnQ7CisJCWh3LT5ncGlvX2NzID0gcGxhdHAtPmdwaW9fY3M7CisJCWlmIChwbGF0cC0+Z3Bpb19jc19jb3VudCAmJiAhcGxhdHAtPmdwaW9fY3MpCisJCQlnb3RvIGV4aXRfYnVzeTsKKwkJaHctPmZyZXEgPSBwbGF0cC0+ZnJlcTsKKwkJaHctPmJhdWR3aWR0aCA9IHBsYXRwLT5iYXVkd2lkdGg7CisJfSBlbHNlIHsKKwkJZXJyID0gdGlueV9zcGlfb2ZfcHJvYmUocGRldik7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCBody0+Z3Bpb19jc19jb3VudDsgaSsrKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdChody0+Z3Bpb19jc1tpXSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2dwaW87CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChody0+Z3Bpb19jc1tpXSwgMSk7CisJfQorCWh3LT5iaXRiYW5nLm1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBtYXgoMVUsIGh3LT5ncGlvX2NzX2NvdW50KTsKKworCS8qIHJlZ2lzdGVyIG91ciBzcGkgY29udHJvbGxlciAqLworCWVyciA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZody0+Yml0YmFuZyk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJiYXNlICVwLCBpcnEgJWRcbiIsIGh3LT5iYXNlLCBody0+aXJxKTsKKworCXJldHVybiAwOworCitleGl0X2dwaW86CisJd2hpbGUgKGktLSA+IDApCisJCWdwaW9fZnJlZShody0+Z3Bpb19jc1tpXSk7CitleGl0X2J1c3k6CisJZXJyID0gLUVCVVNZOworZXhpdDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRpbnlfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW55X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gaHctPmJpdGJhbmcubWFzdGVyOworCXVuc2lnbmVkIGludCBpOworCisJc3BpX2JpdGJhbmdfc3RvcCgmaHctPmJpdGJhbmcpOworCWZvciAoaSA9IDA7IGkgPCBody0+Z3Bpb19jc19jb3VudDsgaSsrKQorCQlncGlvX2ZyZWUoaHctPmdwaW9fY3NbaV0pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpbnlfc3BpX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJvcGVuY29yZXMsdGlueS1zcGktcnRsc3ZuMiIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGlueV9zcGlfbWF0Y2gpOworI2Vsc2UgLyogQ09ORklHX09GICovCisjZGVmaW5lIHRpbnlfc3BpX21hdGNoIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfT0YgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGlueV9zcGlfZHJpdmVyID0geworCS5wcm9iZSA9IHRpbnlfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0aW55X3NwaV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSBOVUxMLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0aW55X3NwaV9tYXRjaCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGlueV9zcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRpbnlfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh0aW55X3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHRpbnlfc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGlueV9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRpbnlfc3BpX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk9wZW5Db3JlcyB0aW55IFNQSSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc2guYyBiL2RyaXZlcnMvc3BpL3NwaV9zaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OWEwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfc2guYwpAQCAtMCwwICsxLDU0MyBAQAorLyoKKyAqIFNIIFNQSSBidXMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIEJhc2VkIG9uIHB4YTJ4eF9zcGkuYzoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBTdGVwaGVuIFN0cmVldCAvIFN0cmVldEZpcmUgU291bmQgTGFicworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNkZWZpbmUgU1BJX1NIX1RCUgkJMHgwMAorI2RlZmluZSBTUElfU0hfUkJSCQkweDAwCisjZGVmaW5lIFNQSV9TSF9DUjEJCTB4MDgKKyNkZWZpbmUgU1BJX1NIX0NSMgkJMHgxMAorI2RlZmluZSBTUElfU0hfQ1IzCQkweDE4CisjZGVmaW5lIFNQSV9TSF9DUjQJCTB4MjAKKyNkZWZpbmUgU1BJX1NIX0NSNQkJMHgyOAorCisvKiBDUjEgKi8KKyNkZWZpbmUgU1BJX1NIX1RCRQkJMHg4MAorI2RlZmluZSBTUElfU0hfVEJGCQkweDQwCisjZGVmaW5lIFNQSV9TSF9SQkUJCTB4MjAKKyNkZWZpbmUgU1BJX1NIX1JCRgkJMHgxMAorI2RlZmluZSBTUElfU0hfUEZPTlJECQkweDA4CisjZGVmaW5lIFNQSV9TSF9TU0RCCQkweDA0CisjZGVmaW5lIFNQSV9TSF9TU0QJCTB4MDIKKyNkZWZpbmUgU1BJX1NIX1NTQQkJMHgwMQorCisvKiBDUjIgKi8KKyNkZWZpbmUgU1BJX1NIX1JTVEYJCTB4ODAKKyNkZWZpbmUgU1BJX1NIX0xPT1BCSwkJMHg0MAorI2RlZmluZSBTUElfU0hfQ1BPTAkJMHgyMAorI2RlZmluZSBTUElfU0hfQ1BIQQkJMHgxMAorI2RlZmluZSBTUElfU0hfTDFNMAkJMHgwOAorCisvKiBDUjMgKi8KKyNkZWZpbmUgU1BJX1NIX01BWF9CWVRFCQkweEZGCisKKy8qIENSNCAqLworI2RlZmluZSBTUElfU0hfVEJFSQkJMHg4MAorI2RlZmluZSBTUElfU0hfVEJGSQkJMHg0MAorI2RlZmluZSBTUElfU0hfUkJFSQkJMHgyMAorI2RlZmluZSBTUElfU0hfUkJGSQkJMHgxMAorI2RlZmluZSBTUElfU0hfV1BBQlJUCQkweDA0CisjZGVmaW5lIFNQSV9TSF9TU1MJCTB4MDEKKworLyogQ1I4ICovCisjZGVmaW5lIFNQSV9TSF9QMUwwCQkweDgwCisjZGVmaW5lIFNQSV9TSF9QUDFMMAkJMHg0MAorI2RlZmluZSBTUElfU0hfTVVYSQkJMHgyMAorI2RlZmluZSBTUElfU0hfTVVYSVJRCQkweDEwCisKKyNkZWZpbmUgU1BJX1NIX0ZJRk9fU0laRQkzMgorI2RlZmluZSBTUElfU0hfU0VORF9USU1FT1VUCSgzICogSFopCisjZGVmaW5lIFNQSV9TSF9SRUNFSVZFX1RJTUVPVVQJKEhaID4+IDMpCisKKyN1bmRlZiBERUJVRworCitzdHJ1Y3Qgc3BpX3NoX2RhdGEgeworCXZvaWQgX19pb21lbSAqYWRkcjsKKwlpbnQgaXJxOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3czsKKwl1bnNpZ25lZCBsb25nIGNyMTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyB2b2lkIHNwaV9zaF93cml0ZShzdHJ1Y3Qgc3BpX3NoX2RhdGEgKnNzLCB1bnNpZ25lZCBsb25nIGRhdGEsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXdyaXRlbChkYXRhLCBzcy0+YWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNwaV9zaF9yZWFkKHN0cnVjdCBzcGlfc2hfZGF0YSAqc3MsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiByZWFkbChzcy0+YWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9zaF9zZXRfYml0KHN0cnVjdCBzcGlfc2hfZGF0YSAqc3MsIHVuc2lnbmVkIGxvbmcgdmFsLAorCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJdG1wID0gc3BpX3NoX3JlYWQoc3MsIG9mZnNldCk7CisJdG1wIHw9IHZhbDsKKwlzcGlfc2hfd3JpdGUoc3MsIHRtcCwgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgc3BpX3NoX2NsZWFyX2JpdChzdHJ1Y3Qgc3BpX3NoX2RhdGEgKnNzLCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXRtcCA9IHNwaV9zaF9yZWFkKHNzLCBvZmZzZXQpOworCXRtcCAmPSB+dmFsOworCXNwaV9zaF93cml0ZShzcywgdG1wLCBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9maWZvKHN0cnVjdCBzcGlfc2hfZGF0YSAqc3MpCit7CisJc3BpX3NoX3NldF9iaXQoc3MsIFNQSV9TSF9SU1RGLCBTUElfU0hfQ1IyKTsKKwlzcGlfc2hfY2xlYXJfYml0KHNzLCBTUElfU0hfUlNURiwgU1BJX1NIX0NSMik7Cit9CisKK3N0YXRpYyBpbnQgc3BpX3NoX3dhaXRfcmVjZWl2ZV9idWZmZXIoc3RydWN0IHNwaV9zaF9kYXRhICpzcykKK3sKKwlpbnQgdGltZW91dCA9IDEwMDAwMDsKKworCXdoaWxlIChzcGlfc2hfcmVhZChzcywgU1BJX1NIX0NSMSkgJiBTUElfU0hfUkJFKSB7CisJCXVkZWxheSgxMCk7CisJCWlmICh0aW1lb3V0LS0gPCAwKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwaV9zaF93YWl0X3dyaXRlX2J1ZmZlcl9lbXB0eShzdHJ1Y3Qgc3BpX3NoX2RhdGEgKnNzKQoreworCWludCB0aW1lb3V0ID0gMTAwMDAwOworCisJd2hpbGUgKCEoc3BpX3NoX3JlYWQoc3MsIFNQSV9TSF9DUjEpICYgU1BJX1NIX1RCRSkpIHsKKwkJdWRlbGF5KDEwKTsKKwkJaWYgKHRpbWVvdXQtLSA8IDApCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3BpX3NoX3NlbmQoc3RydWN0IHNwaV9zaF9kYXRhICpzcywgc3RydWN0IHNwaV9tZXNzYWdlICptZXNnLAorCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlpbnQgaSwgcmV0dmFsID0gMDsKKwlpbnQgcmVtYWluID0gdC0+bGVuOworCWludCBjdXJfbGVuOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJbG9uZyByZXQ7CisKKwlpZiAodC0+bGVuKQorCQlzcGlfc2hfc2V0X2JpdChzcywgU1BJX1NIX1NTQSwgU1BJX1NIX0NSMSk7CisKKwlkYXRhID0gKHVuc2lnbmVkIGNoYXIgKil0LT50eF9idWY7CisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJY3VyX2xlbiA9IG1pbihTUElfU0hfRklGT19TSVpFLCByZW1haW4pOworCQlmb3IgKGkgPSAwOyBpIDwgY3VyX2xlbiAmJgorCQkJCSEoc3BpX3NoX3JlYWQoc3MsIFNQSV9TSF9DUjQpICYKKwkJCQkJCQlTUElfU0hfV1BBQlJUKSAmJgorCQkJCSEoc3BpX3NoX3JlYWQoc3MsIFNQSV9TSF9DUjEpICYgU1BJX1NIX1RCRik7CisJCQkJaSsrKQorCQkJc3BpX3NoX3dyaXRlKHNzLCAodW5zaWduZWQgbG9uZylkYXRhW2ldLCBTUElfU0hfVEJSKTsKKworCQlpZiAoc3BpX3NoX3JlYWQoc3MsIFNQSV9TSF9DUjQpICYgU1BJX1NIX1dQQUJSVCkgeworCQkJLyogQWJvcnQgU1BJIG9wZXJhdGlvbiAqLworCQkJc3BpX3NoX3NldF9iaXQoc3MsIFNQSV9TSF9XUEFCUlQsIFNQSV9TSF9DUjQpOworCQkJcmV0dmFsID0gLUVJTzsKKwkJCWJyZWFrOworCQl9CisKKwkJY3VyX2xlbiA9IGk7CisKKwkJcmVtYWluIC09IGN1cl9sZW47CisJCWRhdGEgKz0gY3VyX2xlbjsKKworCQlpZiAocmVtYWluID4gMCkgeworCQkJc3MtPmNyMSAmPSB+U1BJX1NIX1RCRTsKKwkJCXNwaV9zaF9zZXRfYml0KHNzLCBTUElfU0hfVEJFLCBTUElfU0hfQ1I0KTsKKwkJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHNzLT53YWl0LAorCQkJCQkJIHNzLT5jcjEgJiBTUElfU0hfVEJFLAorCQkJCQkJIFNQSV9TSF9TRU5EX1RJTUVPVVQpOworCQkJaWYgKHJldCA9PSAwICYmICEoc3MtPmNyMSAmIFNQSV9TSF9UQkUpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dFxuIiwgX19mdW5jX18pOworCQkJCXJldHVybiAtRVRJTUVET1VUOworCQkJfQorCQl9CisJfQorCisJaWYgKGxpc3RfaXNfbGFzdCgmdC0+dHJhbnNmZXJfbGlzdCwgJm1lc2ctPnRyYW5zZmVycykpIHsKKwkJdG1wID0gc3BpX3NoX3JlYWQoc3MsIFNQSV9TSF9DUjEpOworCQl0bXAgPSB0bXAgJiB+KFNQSV9TSF9TU0QgfCBTUElfU0hfU1NEQik7CisJCXNwaV9zaF93cml0ZShzcywgdG1wLCBTUElfU0hfQ1IxKTsKKwkJc3BpX3NoX3NldF9iaXQoc3MsIFNQSV9TSF9TU0EsIFNQSV9TSF9DUjEpOworCisJCXNzLT5jcjEgJj0gflNQSV9TSF9UQkU7CisJCXNwaV9zaF9zZXRfYml0KHNzLCBTUElfU0hfVEJFLCBTUElfU0hfQ1I0KTsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3MtPndhaXQsCisJCQkJCSBzcy0+Y3IxICYgU1BJX1NIX1RCRSwKKwkJCQkJIFNQSV9TSF9TRU5EX1RJTUVPVVQpOworCQlpZiAocmV0ID09IDAgJiYgKHNzLT5jcjEgJiBTUElfU0hfVEJFKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dFxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHNwaV9zaF9yZWNlaXZlKHN0cnVjdCBzcGlfc2hfZGF0YSAqc3MsIHN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzZywKKwkJCSAgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlpbnQgaTsKKwlpbnQgcmVtYWluID0gdC0+bGVuOworCWludCBjdXJfbGVuOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJbG9uZyByZXQ7CisKKwlpZiAodC0+bGVuID4gU1BJX1NIX01BWF9CWVRFKQorCQlzcGlfc2hfd3JpdGUoc3MsIFNQSV9TSF9NQVhfQllURSwgU1BJX1NIX0NSMyk7CisJZWxzZQorCQlzcGlfc2hfd3JpdGUoc3MsIHQtPmxlbiwgU1BJX1NIX0NSMyk7CisKKwl0bXAgPSBzcGlfc2hfcmVhZChzcywgU1BJX1NIX0NSMSk7CisJdG1wID0gdG1wICYgfihTUElfU0hfU1NEIHwgU1BJX1NIX1NTREIpOworCXNwaV9zaF93cml0ZShzcywgdG1wLCBTUElfU0hfQ1IxKTsKKwlzcGlfc2hfc2V0X2JpdChzcywgU1BJX1NIX1NTQSwgU1BJX1NIX0NSMSk7CisKKwlzcGlfc2hfd2FpdF93cml0ZV9idWZmZXJfZW1wdHkoc3MpOworCisJZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopdC0+cnhfYnVmOworCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCWlmIChyZW1haW4gPj0gU1BJX1NIX0ZJRk9fU0laRSkgeworCQkJc3MtPmNyMSAmPSB+U1BJX1NIX1JCRjsKKwkJCXNwaV9zaF9zZXRfYml0KHNzLCBTUElfU0hfUkJGLCBTUElfU0hfQ1I0KTsKKwkJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHNzLT53YWl0LAorCQkJCQkJIHNzLT5jcjEgJiBTUElfU0hfUkJGLAorCQkJCQkJIFNQSV9TSF9SRUNFSVZFX1RJTUVPVVQpOworCQkJaWYgKHJldCA9PSAwICYmCisJCQkgICAgc3BpX3NoX3JlYWQoc3MsIFNQSV9TSF9DUjEpICYgU1BJX1NIX1JCRSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKKwkJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJCX0KKwkJfQorCisJCWN1cl9sZW4gPSBtaW4oU1BJX1NIX0ZJRk9fU0laRSwgcmVtYWluKTsKKwkJZm9yIChpID0gMDsgaSA8IGN1cl9sZW47IGkrKykgeworCQkJaWYgKHNwaV9zaF93YWl0X3JlY2VpdmVfYnVmZmVyKHNzKSkKKwkJCQlicmVhazsKKwkJCWRhdGFbaV0gPSAodW5zaWduZWQgY2hhcilzcGlfc2hfcmVhZChzcywgU1BJX1NIX1JCUik7CisJCX0KKworCQlyZW1haW4gLT0gY3VyX2xlbjsKKwkJZGF0YSArPSBjdXJfbGVuOworCX0KKworCS8qIGRlYXNzZXJ0IENTIHdoZW4gU1BJIGlzIHJlY2VpdmluZy4gKi8KKwlpZiAodC0+bGVuID4gU1BJX1NIX01BWF9CWVRFKSB7CisJCWNsZWFyX2ZpZm8oc3MpOworCQlzcGlfc2hfd3JpdGUoc3MsIDEsIFNQSV9TSF9DUjMpOworCX0gZWxzZSB7CisJCXNwaV9zaF93cml0ZShzcywgMCwgU1BJX1NIX0NSMyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9zaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc3BpX3NoX2RhdGEgKnNzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzcGlfc2hfZGF0YSwgd3MpOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzZzsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXByX2RlYnVnKCIlczogZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcy0+bG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmc3MtPnF1ZXVlKSkgeworCQltZXNnID0gbGlzdF9lbnRyeShzcy0+cXVldWUubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CisJCWxpc3RfZGVsX2luaXQoJm1lc2ctPnF1ZXVlKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcy0+bG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZtZXNnLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKKwkJCXByX2RlYnVnKCJ0eF9idWYgPSAlcCwgcnhfYnVmID0gJXBcbiIsCisJCQkJCXQtPnR4X2J1ZiwgdC0+cnhfYnVmKTsKKwkJCXByX2RlYnVnKCJsZW4gPSAlZCwgZGVsYXlfdXNlY3MgPSAlZFxuIiwKKwkJCQkJdC0+bGVuLCB0LT5kZWxheV91c2Vjcyk7CisKKwkJCWlmICh0LT50eF9idWYpIHsKKwkJCQlyZXQgPSBzcGlfc2hfc2VuZChzcywgbWVzZywgdCk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlpZiAodC0+cnhfYnVmKSB7CisJCQkJcmV0ID0gc3BpX3NoX3JlY2VpdmUoc3MsIG1lc2csIHQpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJbWVzZy0+YWN0dWFsX2xlbmd0aCArPSB0LT5sZW47CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNzLT5sb2NrLCBmbGFncyk7CisKKwkJbWVzZy0+c3RhdHVzID0gMDsKKwkJbWVzZy0+Y29tcGxldGUobWVzZy0+Y29udGV4dCk7CisJfQorCisJY2xlYXJfZmlmbyhzcyk7CisJc3BpX3NoX3NldF9iaXQoc3MsIFNQSV9TSF9TU0QsIFNQSV9TSF9DUjEpOworCXVkZWxheSgxMDApOworCisJc3BpX3NoX2NsZWFyX2JpdChzcywgU1BJX1NIX1NTQSB8IFNQSV9TSF9TU0RCIHwgU1BJX1NIX1NTRCwKKwkJCSBTUElfU0hfQ1IxKTsKKworCWNsZWFyX2ZpZm8oc3MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3MtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybjsKKworIGVycm9yOgorCW1lc2ctPnN0YXR1cyA9IHJldDsKKwltZXNnLT5jb21wbGV0ZShtZXNnLT5jb250ZXh0KTsKKworCXNwaV9zaF9jbGVhcl9iaXQoc3MsIFNQSV9TSF9TU0EgfCBTUElfU0hfU1NEQiB8IFNQSV9TSF9TU0QsCisJCQkgU1BJX1NIX0NSMSk7CisJY2xlYXJfZmlmbyhzcyk7CisKK30KKworc3RhdGljIGludCBzcGlfc2hfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc3BpX3NoX2RhdGEgKnNzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlpZiAoIXNwaS0+Yml0c19wZXJfd29yZCkKKwkJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKworCXByX2RlYnVnKCIlczogZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCXNwaV9zaF93cml0ZShzcywgMHhmZSwgU1BJX1NIX0NSMSk7CS8qIFNQSSBzeWNsZSBzdG9wICovCisJc3BpX3NoX3dyaXRlKHNzLCAweDAwLCBTUElfU0hfQ1IxKTsJLyogQ1IxIGluaXQgKi8KKwlzcGlfc2hfd3JpdGUoc3MsIDB4MDAsIFNQSV9TSF9DUjMpOwkvKiBDUjMgaW5pdCAqLworCisJY2xlYXJfZmlmbyhzcyk7CisKKwkvKiAxLzggY2xvY2sgKi8KKwlzcGlfc2hfd3JpdGUoc3MsIHNwaV9zaF9yZWFkKHNzLCBTUElfU0hfQ1IyKSB8IDB4MDcsIFNQSV9TSF9DUjIpOworCXVkZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcGlfc2hfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptZXNnKQoreworCXN0cnVjdCBzcGlfc2hfZGF0YSAqc3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzOiBlbnRlclxuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJcdG1vZGUgPSAlMDJ4XG4iLCBzcGktPm1vZGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNzLT5sb2NrLCBmbGFncyk7CisKKwltZXNnLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwltZXNnLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisKKwlzcGlfc2hfY2xlYXJfYml0KHNzLCBTUElfU0hfU1NBLCBTUElfU0hfQ1IxKTsKKworCWxpc3RfYWRkX3RhaWwoJm1lc2ctPnF1ZXVlLCAmc3MtPnF1ZXVlKTsKKwlxdWV1ZV93b3JrKHNzLT53b3JrcXVldWUsICZzcy0+d3MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3MtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGlfc2hfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzcGlfc2hfZGF0YSAqc3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCXByX2RlYnVnKCIlczogZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCXNwaV9zaF9jbGVhcl9iaXQoc3MsIFNQSV9TSF9TU0EgfCBTUElfU0hfU1NEQiB8IFNQSV9TSF9TU0QsCisJCQkgU1BJX1NIX0NSMSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzcGlfc2hfaXJxKGludCBpcnEsIHZvaWQgKl9zcykKK3sKKwlzdHJ1Y3Qgc3BpX3NoX2RhdGEgKnNzID0gKHN0cnVjdCBzcGlfc2hfZGF0YSAqKV9zczsKKwl1bnNpZ25lZCBsb25nIGNyMTsKKworCWNyMSA9IHNwaV9zaF9yZWFkKHNzLCBTUElfU0hfQ1IxKTsKKwlpZiAoY3IxICYgU1BJX1NIX1RCRSkKKwkJc3MtPmNyMSB8PSBTUElfU0hfVEJFOworCWlmIChjcjEgJiBTUElfU0hfVEJGKQorCQlzcy0+Y3IxIHw9IFNQSV9TSF9UQkY7CisJaWYgKGNyMSAmIFNQSV9TSF9SQkUpCisJCXNzLT5jcjEgfD0gU1BJX1NIX1JCRTsKKwlpZiAoY3IxICYgU1BJX1NIX1JCRikKKwkJc3MtPmNyMSB8PSBTUElfU0hfUkJGOworCisJaWYgKHNzLT5jcjEpIHsKKwkJc3BpX3NoX2NsZWFyX2JpdChzcywgc3MtPmNyMSwgU1BJX1NIX0NSNCk7CisJCXdha2VfdXAoJnNzLT53YWl0KTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNwaV9zaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX3NoX2RhdGEgKnNzID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJZGVzdHJveV93b3JrcXVldWUoc3MtPndvcmtxdWV1ZSk7CisJZnJlZV9pcnEoc3MtPmlycSwgc3MpOworCWlvdW5tYXAoc3MtPmFkZHIpOworCXNwaV9tYXN0ZXJfcHV0KHNzLT5tYXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNwaV9zaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHNwaV9zaF9kYXRhICpzczsKKwlpbnQgcmV0LCBpcnE7CisKKwkvKiBnZXQgYmFzZSBhZGRyICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9pcnEgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3Qgc3BpX3NoX2RhdGEpKTsKKwlpZiAobWFzdGVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAic3BpX2FsbG9jX21hc3RlciBlcnJvci5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgc3MpOworCisJc3MtPmlycSA9IGlycTsKKwlzcy0+bWFzdGVyID0gbWFzdGVyOworCXNzLT5hZGRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChzcy0+YWRkciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZXJyb3IuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjE7CisJfQorCUlOSVRfTElTVF9IRUFEKCZzcy0+cXVldWUpOworCXNwaW5fbG9ja19pbml0KCZzcy0+bG9jayk7CisJSU5JVF9XT1JLKCZzcy0+d3MsIHNwaV9zaF93b3JrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzcy0+d2FpdCk7CisJc3MtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKKwlpZiAoc3MtPndvcmtxdWV1ZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNyZWF0ZSB3b3JrcXVldWUgZXJyb3JcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3IyOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgc3BpX3NoX2lycSwgSVJRRl9ESVNBQkxFRCwgInNwaV9zaCIsIHNzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBlcnJvclxuIik7CisJCWdvdG8gZXJyb3IzOworCX0KKworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSAyOworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+c2V0dXAgPSBzcGlfc2hfc2V0dXA7CisJbWFzdGVyLT50cmFuc2ZlciA9IHNwaV9zaF90cmFuc2ZlcjsKKwltYXN0ZXItPmNsZWFudXAgPSBzcGlfc2hfY2xlYW51cDsKKworCXJldCA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInNwaV9yZWdpc3Rlcl9tYXN0ZXIgZXJyb3IuXG4iKTsKKwkJZ290byBlcnJvcjQ7CisJfQorCisJcmV0dXJuIDA7CisKKyBlcnJvcjQ6CisJZnJlZV9pcnEoaXJxLCBzcyk7CisgZXJyb3IzOgorCWRlc3Ryb3lfd29ya3F1ZXVlKHNzLT53b3JrcXVldWUpOworIGVycm9yMjoKKwlpb3VubWFwKHNzLT5hZGRyKTsKKyBlcnJvcjE6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNwaV9zaF9kcml2ZXIgPSB7CisJLnByb2JlID0gc3BpX3NoX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzcGlfc2hfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzaF9zcGkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3BpX3NoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzcGlfc2hfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHNwaV9zaF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNwaV9zaF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNwaV9zaF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc3BpX3NoX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNIIFNQSSBidXMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJZb3NoaWhpcm8gU2hpbW9kYSIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzaF9zcGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKaW5kZXggMmM2NjVmY2VhLi5lMDBkOTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwpAQCAtOSwyMiArOSwyMiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCisjaW5jbHVkZSA8bGludXgvc3BpL3NoX21zaW9mLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zaF9tc2lvZi5oPgogCiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCkBAIC02Nyw3ICs2Nyw3IEBACiAjZGVmaW5lIFNUUl9URU9GICAoMSA8PCAyMykKICNkZWZpbmUgU1RSX1JFT0YgICgxIDw8IDcpCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNoX21zaW9mX3JlYWQoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLCBpbnQgcmVnX29mZnMpCitzdGF0aWMgdTMyIHNoX21zaW9mX3JlYWQoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLCBpbnQgcmVnX29mZnMpCiB7CiAJc3dpdGNoIChyZWdfb2ZmcykgewogCWNhc2UgVFNDUjoKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgc2hfbXNpb2Zfd3JpdGUoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLCBpbnQgcmVnX29mZnMsCi0JCQkgICB1bnNpZ25lZCBsb25nIHZhbHVlKQorCQkJICAgdTMyIHZhbHVlKQogewogCXN3aXRjaCAocmVnX29mZnMpIHsKIAljYXNlIFRTQ1I6CkBAIC05MywxMCArOTMsMTAgQEAKIH0KIAogc3RhdGljIGludCBzaF9tc2lvZl9tb2RpZnlfY3RyX3dhaXQoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGNsciwgdW5zaWduZWQgbG9uZyBzZXQpCisJCQkJICAgIHUzMiBjbHIsIHUzMiBzZXQpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gY2xyIHwgc2V0OwotCXVuc2lnbmVkIGxvbmcgZGF0YTsKKwl1MzIgbWFzayA9IGNsciB8IHNldDsKKwl1MzIgZGF0YTsKIAlpbnQgazsKIAogCWRhdGEgPSBzaF9tc2lvZl9yZWFkKHAsIENUUik7CkBAIC0xNjYsMTAgKzE2NiwxMCBAQAogfQogCiBzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfc2V0X3Bpbl9yZWdzKHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKLQkJCQkgICAgICBpbnQgY3BvbCwgaW50IGNwaGEsCi0JCQkJICAgICAgaW50IHR4X2hpX3osIGludCBsc2JfZmlyc3QpCisJCQkJICAgICAgdTMyIGNwb2wsIHUzMiBjcGhhLAorCQkJCSAgICAgIHUzMiB0eF9oaV96LCB1MzIgbHNiX2ZpcnN0KQogewotCXVuc2lnbmVkIGxvbmcgdG1wOworCXUzMiB0bXA7CiAJaW50IGVkZ2U7CiAKIAkvKgpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJdG1wIHw9IGNwb2wgPDwgMzA7IC8qIFRTQ0tJWiAqLwogCXRtcCB8PSBjcG9sIDw8IDI4OyAvKiBSU0NLSVogKi8KIAotCWVkZ2UgPSBjcG9sID8gY3BoYSA6ICFjcGhhOworCWVkZ2UgPSBjcG9sIF4gIWNwaGE7CiAKIAl0bXAgfD0gZWRnZSA8PCAyNzsgLyogVEVERyAqLwogCXRtcCB8PSBlZGdlIDw8IDI2OyAvKiBSRURHICovCkBAIC0xOTcsMTEgKzE5Nyw5IEBACiAKIHN0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9zZXRfbW9kZV9yZWdzKHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKIAkJCQkgICAgICAgY29uc3Qgdm9pZCAqdHhfYnVmLCB2b2lkICpyeF9idWYsCi0JCQkJICAgICAgIGludCBiaXRzLCBpbnQgd29yZHMpCisJCQkJICAgICAgIHUzMiBiaXRzLCB1MzIgd29yZHMpCiB7Ci0JdW5zaWduZWQgbG9uZyBkcjI7Ci0KLQlkcjIgPSAoKGJpdHMgLSAxKSA8PCAyNCkgfCAoKHdvcmRzIC0gMSkgPDwgMTYpOworCXUzMiBkcjIgPSAoKGJpdHMgLSAxKSA8PCAyNCkgfCAoKHdvcmRzIC0gMSkgPDwgMTYpOwogCiAJaWYgKHR4X2J1ZikKIAkJc2hfbXNpb2Zfd3JpdGUocCwgVE1EUjIsIGRyMik7CkBAIC0yMjIsNyArMjIwLDcgQEAKIHN0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV93cml0ZV9maWZvXzgoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAogCQkJCSAgICAgIGNvbnN0IHZvaWQgKnR4X2J1ZiwgaW50IHdvcmRzLCBpbnQgZnMpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqYnVmXzggPSB0eF9idWY7CisJY29uc3QgdTggKmJ1Zl84ID0gdHhfYnVmOwogCWludCBrOwogCiAJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCkBAIC0yMzIsNyArMjMwLDcgQEAKIHN0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV93cml0ZV9maWZvXzE2KHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKIAkJCQkgICAgICAgY29uc3Qgdm9pZCAqdHhfYnVmLCBpbnQgd29yZHMsIGludCBmcykKIHsKLQljb25zdCB1bnNpZ25lZCBzaG9ydCAqYnVmXzE2ID0gdHhfYnVmOworCWNvbnN0IHUxNiAqYnVmXzE2ID0gdHhfYnVmOwogCWludCBrOwogCiAJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCkBAIC0yNDIsNyArMjQwLDcgQEAKIHN0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV93cml0ZV9maWZvXzE2dShzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCiAJCQkJCWNvbnN0IHZvaWQgKnR4X2J1ZiwgaW50IHdvcmRzLCBpbnQgZnMpCiB7Ci0JY29uc3QgdW5zaWduZWQgc2hvcnQgKmJ1Zl8xNiA9IHR4X2J1ZjsKKwljb25zdCB1MTYgKmJ1Zl8xNiA9IHR4X2J1ZjsKIAlpbnQgazsKIAogCWZvciAoayA9IDA7IGsgPCB3b3JkczsgaysrKQpAQCAtMjUyLDcgKzI1MCw3IEBACiBzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfd3JpdGVfZmlmb18zMihzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCiAJCQkJICAgICAgIGNvbnN0IHZvaWQgKnR4X2J1ZiwgaW50IHdvcmRzLCBpbnQgZnMpCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50ICpidWZfMzIgPSB0eF9idWY7CisJY29uc3QgdTMyICpidWZfMzIgPSB0eF9idWY7CiAJaW50IGs7CiAKIAlmb3IgKGsgPSAwOyBrIDwgd29yZHM7IGsrKykKQEAgLTI2MiwxNyArMjYwLDM3IEBACiBzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfd3JpdGVfZmlmb18zMnUoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAogCQkJCQljb25zdCB2b2lkICp0eF9idWYsIGludCB3b3JkcywgaW50IGZzKQogewotCWNvbnN0IHVuc2lnbmVkIGludCAqYnVmXzMyID0gdHhfYnVmOworCWNvbnN0IHUzMiAqYnVmXzMyID0gdHhfYnVmOwogCWludCBrOwogCiAJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCiAJCXNoX21zaW9mX3dyaXRlKHAsIFRGRFIsIGdldF91bmFsaWduZWQoJmJ1Zl8zMltrXSkgPDwgZnMpOwogfQogCitzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfd3JpdGVfZmlmb19zMzIoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAorCQkJCQljb25zdCB2b2lkICp0eF9idWYsIGludCB3b3JkcywgaW50IGZzKQoreworCWNvbnN0IHUzMiAqYnVmXzMyID0gdHhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCXNoX21zaW9mX3dyaXRlKHAsIFRGRFIsIHN3YWIzMihidWZfMzJba10gPDwgZnMpKTsKK30KKworc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3dyaXRlX2ZpZm9fczMydShzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJCSBjb25zdCB2b2lkICp0eF9idWYsIGludCB3b3JkcywgaW50IGZzKQoreworCWNvbnN0IHUzMiAqYnVmXzMyID0gdHhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCXNoX21zaW9mX3dyaXRlKHAsIFRGRFIsIHN3YWIzMihnZXRfdW5hbGlnbmVkKCZidWZfMzJba10pIDw8IGZzKSk7Cit9CisKIHN0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9yZWFkX2ZpZm9fOChzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCiAJCQkJICAgICB2b2lkICpyeF9idWYsIGludCB3b3JkcywgaW50IGZzKQogewotCXVuc2lnbmVkIGNoYXIgKmJ1Zl84ID0gcnhfYnVmOworCXU4ICpidWZfOCA9IHJ4X2J1ZjsKIAlpbnQgazsKIAogCWZvciAoayA9IDA7IGsgPCB3b3JkczsgaysrKQpAQCAtMjgyLDcgKzMwMCw3IEBACiBzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfcmVhZF9maWZvXzE2KHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKIAkJCQkgICAgICB2b2lkICpyeF9idWYsIGludCB3b3JkcywgaW50IGZzKQogewotCXVuc2lnbmVkIHNob3J0ICpidWZfMTYgPSByeF9idWY7CisJdTE2ICpidWZfMTYgPSByeF9idWY7CiAJaW50IGs7CiAKIAlmb3IgKGsgPSAwOyBrIDwgd29yZHM7IGsrKykKQEAgLTI5Miw3ICszMTAsNyBAQAogc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb18xNnUoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAogCQkJCSAgICAgICB2b2lkICpyeF9idWYsIGludCB3b3JkcywgaW50IGZzKQogewotCXVuc2lnbmVkIHNob3J0ICpidWZfMTYgPSByeF9idWY7CisJdTE2ICpidWZfMTYgPSByeF9idWY7CiAJaW50IGs7CiAKIAlmb3IgKGsgPSAwOyBrIDwgd29yZHM7IGsrKykKQEAgLTMwMiw3ICszMjAsNyBAQAogc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb18zMihzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCiAJCQkJICAgICAgdm9pZCAqcnhfYnVmLCBpbnQgd29yZHMsIGludCBmcykKIHsKLQl1bnNpZ25lZCBpbnQgKmJ1Zl8zMiA9IHJ4X2J1ZjsKKwl1MzIgKmJ1Zl8zMiA9IHJ4X2J1ZjsKIAlpbnQgazsKIAogCWZvciAoayA9IDA7IGsgPCB3b3JkczsgaysrKQpAQCAtMzEyLDE5ICszMzAsNDAgQEAKIHN0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9yZWFkX2ZpZm9fMzJ1KHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKIAkJCQkgICAgICAgdm9pZCAqcnhfYnVmLCBpbnQgd29yZHMsIGludCBmcykKIHsKLQl1bnNpZ25lZCBpbnQgKmJ1Zl8zMiA9IHJ4X2J1ZjsKKwl1MzIgKmJ1Zl8zMiA9IHJ4X2J1ZjsKIAlpbnQgazsKIAogCWZvciAoayA9IDA7IGsgPCB3b3JkczsgaysrKQogCQlwdXRfdW5hbGlnbmVkKHNoX21zaW9mX3JlYWQocCwgUkZEUikgPj4gZnMsICZidWZfMzJba10pOwogfQogCitzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfcmVhZF9maWZvX3MzMihzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJICAgICAgIHZvaWQgKnJ4X2J1ZiwgaW50IHdvcmRzLCBpbnQgZnMpCit7CisJdTMyICpidWZfMzIgPSByeF9idWY7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgd29yZHM7IGsrKykKKwkJYnVmXzMyW2tdID0gc3dhYjMyKHNoX21zaW9mX3JlYWQocCwgUkZEUikgPj4gZnMpOworfQorCitzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfcmVhZF9maWZvX3MzMnUoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAorCQkJCSAgICAgICB2b2lkICpyeF9idWYsIGludCB3b3JkcywgaW50IGZzKQoreworCXUzMiAqYnVmXzMyID0gcnhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCXB1dF91bmFsaWduZWQoc3dhYjMyKHNoX21zaW9mX3JlYWQocCwgUkZEUikgPj4gZnMpLCAmYnVmXzMyW2tdKTsKK30KKwogc3RhdGljIGludCBzaF9tc2lvZl9zcGlfYml0cyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQogewogCWludCBiaXRzOwogCiAJYml0cyA9IHQgPyB0LT5iaXRzX3Blcl93b3JkIDogMDsKLQliaXRzID0gYml0cyA/IGJpdHMgOiBzcGktPmJpdHNfcGVyX3dvcmQ7CisJaWYgKCFiaXRzKQorCQliaXRzID0gc3BpLT5iaXRzX3Blcl93b3JkOwogCXJldHVybiBiaXRzOwogfQogCkBAIC0zMzQsNyArMzczLDggQEAKIAl1bnNpZ25lZCBsb25nIGh6OwogCiAJaHogPSB0ID8gdC0+c3BlZWRfaHogOiAwOwotCWh6ID0gaHogPyBoeiA6IHNwaS0+bWF4X3NwZWVkX2h6OworCWlmICghaHopCisJCWh6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CiAJcmV0dXJuIGh6OwogfQogCkBAIC00NjgsOSArNTA4LDE3IEBACiAJaW50IGJ5dGVzX2RvbmU7CiAJaW50IHdvcmRzOwogCWludCBuOworCWJvb2wgc3dhYjsKIAogCWJpdHMgPSBzaF9tc2lvZl9zcGlfYml0cyhzcGksIHQpOwogCisJaWYgKGJpdHMgPD0gOCAmJiB0LT5sZW4gPiAxNSAmJiAhKHQtPmxlbiAmIDMpKSB7CisJCWJpdHMgPSAzMjsKKwkJc3dhYiA9IHRydWU7CisJfSBlbHNlIHsKKwkJc3dhYiA9IGZhbHNlOworCX0KKwogCS8qIHNldHVwIGJ5dGVzIHBlciB3b3JkIGFuZCBmaWZvIHJlYWQvd3JpdGUgZnVuY3Rpb25zICovCiAJaWYgKGJpdHMgPD0gOCkgewogCQlieXRlc19wZXJfd29yZCA9IDE7CkBAIC00ODcsNiArNTM1LDE3IEBACiAJCQlyeF9maWZvID0gc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb18xNnU7CiAJCWVsc2UKIAkJCXJ4X2ZpZm8gPSBzaF9tc2lvZl9zcGlfcmVhZF9maWZvXzE2OworCX0gZWxzZSBpZiAoc3dhYikgeworCQlieXRlc19wZXJfd29yZCA9IDQ7CisJCWlmICgodW5zaWduZWQgbG9uZyl0LT50eF9idWYgJiAweDAzKQorCQkJdHhfZmlmbyA9IHNoX21zaW9mX3NwaV93cml0ZV9maWZvX3MzMnU7CisJCWVsc2UKKwkJCXR4X2ZpZm8gPSBzaF9tc2lvZl9zcGlfd3JpdGVfZmlmb19zMzI7CisKKwkJaWYgKCh1bnNpZ25lZCBsb25nKXQtPnJ4X2J1ZiAmIDB4MDMpCisJCQlyeF9maWZvID0gc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb19zMzJ1OworCQllbHNlCisJCQlyeF9maWZvID0gc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb19zMzI7CiAJfSBlbHNlIHsKIAkJYnl0ZXNfcGVyX3dvcmQgPSA0OwogCQlpZiAoKHVuc2lnbmVkIGxvbmcpdC0+dHhfYnVmICYgMHgwMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaWRldi5jIGIvZHJpdmVycy9zcGkvc3BpZGV2LmMKaW5kZXggNjAzNDI4Mi4uZDlmZDg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpZGV2LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpZGV2LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlkZXYuaD4KQEAgLTQ3MSw2ICs0NzIsMTYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGxvbmcKK3NwaWRldl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiBzcGlkZXZfaW9jdGwoZmlscCwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworfQorI2Vsc2UKKyNkZWZpbmUgc3BpZGV2X2NvbXBhdF9pb2N0bCBOVUxMCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLworCiBzdGF0aWMgaW50IHNwaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBzcGlkZXZfZGF0YQkqc3BpZGV2OwpAQCAtNTQzLDYgKzU1NCw3IEBACiAJLndyaXRlID0Jc3BpZGV2X3dyaXRlLAogCS5yZWFkID0JCXNwaWRldl9yZWFkLAogCS51bmxvY2tlZF9pb2N0bCA9IHNwaWRldl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gc3BpZGV2X2NvbXBhdF9pb2N0bCwKIAkub3BlbiA9CQlzcGlkZXZfb3BlbiwKIAkucmVsZWFzZSA9CXNwaWRldl9yZWxlYXNlLAogCS5sbHNlZWsgPQlub19sbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS90aS1zc3Atc3BpLmMgYi9kcml2ZXJzL3NwaS90aS1zc3Atc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyMjc5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3RpLXNzcC1zcGkuYwpAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqIFNlcXVlbmNlciBTZXJpYWwgUG9ydCAoU1NQKSBiYXNlZCBTUEkgbWFzdGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdGlfc3NwLmg+CisKKyNkZWZpbmUgTU9ERV9CSVRTCShTUElfQ1BIQSB8IFNQSV9DUE9MIHwgU1BJX0NTX0hJR0gpCisKK3N0cnVjdCB0aV9zc3Bfc3BpIHsKKwlzdHJ1Y3Qgc3BpX21hc3RlcgkJKm1hc3RlcjsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQltc2dfcXVldWU7CisJc3RydWN0IGNvbXBsZXRpb24JCWNvbXBsZXRlOworCWJvb2wJCQkJc2h1dGRvd247CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJCSp3b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrOworCXU4CQkJCW1vZGUsIGJwdzsKKwlpbnQJCQkJY3NfYWN0aXZlOworCXUzMgkJCQlwY19lbiwgcGNfZGlzLCBwY193ciwgcGNfcmQ7CisJdm9pZAkJCQkoKnNlbGVjdCkoaW50IGNzKTsKK307CisKK3N0YXRpYyB1MzIgdGlfc3NwX3NwaV9yeChzdHJ1Y3QgdGlfc3NwX3NwaSAqaHcpCit7CisJdTMyIHJldDsKKworCXRpX3NzcF9ydW4oaHctPmRldiwgaHctPnBjX3JkLCAwLCAmcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0aV9zc3Bfc3BpX3R4KHN0cnVjdCB0aV9zc3Bfc3BpICpodywgdTMyIGRhdGEpCit7CisJdGlfc3NwX3J1bihody0+ZGV2LCBody0+cGNfd3IsIGRhdGEgPDwgKDMyIC0gaHctPmJwdyksIE5VTEwpOworfQorCitzdGF0aWMgaW50IHRpX3NzcF9zcGlfdHhyeChzdHJ1Y3QgdGlfc3NwX3NwaSAqaHcsIHN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnLAorCQkgICAgICAgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlpbnQgY291bnQ7CisKKwlpZiAoaHctPmJwdyA8PSA4KSB7CisJCXU4CQkqcnggPSB0LT5yeF9idWY7CisJCWNvbnN0IHU4CSp0eCA9IHQtPnR4X2J1ZjsKKworCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCB0LT5sZW47IGNvdW50ICs9IDEpIHsKKwkJCWlmICh0LT50eF9idWYpCisJCQkJdGlfc3NwX3NwaV90eChodywgKnR4KyspOworCQkJaWYgKHQtPnJ4X2J1ZikKKwkJCQkqcngrKyA9IHRpX3NzcF9zcGlfcngoaHcpOworCQl9CisJfSBlbHNlIGlmIChody0+YnB3IDw9IDE2KSB7CisJCXUxNgkJKnJ4ID0gdC0+cnhfYnVmOworCQljb25zdCB1MTYJKnR4ID0gdC0+dHhfYnVmOworCisJCWZvciAoY291bnQgPSAwOyBjb3VudCA8IHQtPmxlbjsgY291bnQgKz0gMikgeworCQkJaWYgKHQtPnR4X2J1ZikKKwkJCQl0aV9zc3Bfc3BpX3R4KGh3LCAqdHgrKyk7CisJCQlpZiAodC0+cnhfYnVmKQorCQkJCSpyeCsrID0gdGlfc3NwX3NwaV9yeChodyk7CisJCX0KKwl9IGVsc2UgeworCQl1MzIJCSpyeCA9IHQtPnJ4X2J1ZjsKKwkJY29uc3QgdTMyCSp0eCA9IHQtPnR4X2J1ZjsKKworCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCB0LT5sZW47IGNvdW50ICs9IDQpIHsKKwkJCWlmICh0LT50eF9idWYpCisJCQkJdGlfc3NwX3NwaV90eChodywgKnR4KyspOworCQkJaWYgKHQtPnJ4X2J1ZikKKwkJCQkqcngrKyA9IHRpX3NzcF9zcGlfcngoaHcpOworCQl9CisJfQorCisJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGNvdW50OyAvKiBieXRlcyB0cmFuc2ZlcnJlZCAqLworCisJZGV2X2RiZygmbXNnLT5zcGktPmRldiwgInhmZXIgJXMlcywgJWQgYnl0ZXMsICVkIGJwdywgY291bnQgJWQlc1xuIiwKKwkJdC0+dHhfYnVmID8gInR4IiA6ICIiLCB0LT5yeF9idWYgPyAicngiIDogIiIsIHQtPmxlbiwKKwkJaHctPmJwdywgY291bnQsIChjb3VudCA8IHQtPmxlbikgPyAiICh1bmRlcikiIDogIiIpOworCisJcmV0dXJuIChjb3VudCA8IHQtPmxlbikgPyAtRUlPIDogMDsgLyogbGVmdCBvdmVyIGRhdGEgKi8KK30KKworc3RhdGljIHZvaWQgdGlfc3NwX3NwaV9jaGlwX3NlbGVjdChzdHJ1Y3QgdGlfc3NwX3NwaSAqaHcsIGludCBjc19hY3RpdmUpCit7CisJY3NfYWN0aXZlID0gISFjc19hY3RpdmU7CisJaWYgKGNzX2FjdGl2ZSA9PSBody0+Y3NfYWN0aXZlKQorCQlyZXR1cm47CisJdGlfc3NwX3J1bihody0+ZGV2LCBjc19hY3RpdmUgPyBody0+cGNfZW4gOiBody0+cGNfZGlzLCAwLCBOVUxMKTsKKwlody0+Y3NfYWN0aXZlID0gY3NfYWN0aXZlOworfQorCisjZGVmaW5lIF9fU0hJRlRfT1VUKGJpdHMpCShTU1BfT1BDT0RFX1NISUZUIHwgU1NQX09VVF9NT0RFIHwgXAorCQkJCSBjc19lbiB8IGNsayB8IFNTUF9DT1VOVCgoYml0cykgKiAyIC0gMSkpCisjZGVmaW5lIF9fU0hJRlRfSU4oYml0cykJKFNTUF9PUENPREVfU0hJRlQgfCBTU1BfSU5fTU9ERSAgfCBcCisJCQkJIGNzX2VuIHwgY2xrIHwgU1NQX0NPVU5UKChiaXRzKSAqIDIgLSAxKSkKKworc3RhdGljIGludCB0aV9zc3Bfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCB0aV9zc3Bfc3BpICpodywgdTggYnB3LCB1OCBtb2RlKQoreworCWludCBlcnJvciwgaWR4ID0gMDsKKwl1MzIgc2VxcmFtWzE2XTsKKwl1MzIgY3NfZW4sIGNzX2RpcywgY2xrOworCXUzMiB0b3BiaXRzLCBib3RiaXRzOworCisJbW9kZSAmPSBNT0RFX0JJVFM7CisJaWYgKG1vZGUgPT0gaHctPm1vZGUgJiYgYnB3ID09IGh3LT5icHcpCisJCXJldHVybiAwOworCisJY3NfZW4gID0gKG1vZGUgJiBTUElfQ1NfSElHSCkgPyBTU1BfQ1NfSElHSCA6IFNTUF9DU19MT1c7CisJY3NfZGlzID0gKG1vZGUgJiBTUElfQ1NfSElHSCkgPyBTU1BfQ1NfTE9XICA6IFNTUF9DU19ISUdIOworCWNsayAgICA9IChtb2RlICYgU1BJX0NQT0wpICAgID8gU1NQX0NMS19ISUdIIDogU1NQX0NMS19MT1c7CisKKwkvKiBDb25zdHJ1Y3QgaW5zdHJ1Y3Rpb25zICovCisKKwkvKiBEaXNhYmxlIENoaXAgU2VsZWN0ICovCisJaHctPnBjX2RpcyA9IGlkeDsKKwlzZXFyYW1baWR4KytdID0gU1NQX09QQ09ERV9ESVJFQ1QgfCBTU1BfT1VUX01PREUgfCBjc19kaXMgfCBjbGs7CisJc2VxcmFtW2lkeCsrXSA9IFNTUF9PUENPREVfU1RPUCAgIHwgU1NQX09VVF9NT0RFIHwgY3NfZGlzIHwgY2xrOworCisJLyogRW5hYmxlIENoaXAgU2VsZWN0ICovCisJaHctPnBjX2VuID0gaWR4OworCXNlcXJhbVtpZHgrK10gPSBTU1BfT1BDT0RFX0RJUkVDVCB8IFNTUF9PVVRfTU9ERSB8IGNzX2VuIHwgY2xrOworCXNlcXJhbVtpZHgrK10gPSBTU1BfT1BDT0RFX1NUT1AgICB8IFNTUF9PVVRfTU9ERSB8IGNzX2VuIHwgY2xrOworCisJLyogUmVhZHMgYW5kIHdyaXRlcyBuZWVkIHRvIGJlIHNwbGl0IGZvciBicHcgPiAxNiAqLworCXRvcGJpdHMgPSAoYnB3ID4gMTYpID8gMTYgOiBicHc7CisJYm90Yml0cyA9IGJwdyAtIHRvcGJpdHM7CisKKwkvKiBXcml0ZSAqLworCWh3LT5wY193ciA9IGlkeDsKKwlzZXFyYW1baWR4KytdID0gX19TSElGVF9PVVQodG9wYml0cykgfCBTU1BfQUREUl9SRUc7CisJaWYgKGJvdGJpdHMpCisJCXNlcXJhbVtpZHgrK10gPSBfX1NISUZUX09VVChib3RiaXRzKSAgfCBTU1BfREFUQV9SRUc7CisJc2VxcmFtW2lkeCsrXSA9IFNTUF9PUENPREVfU1RPUCB8IFNTUF9PVVRfTU9ERSB8IGNzX2VuIHwgY2xrOworCisJLyogUmVhZCAqLworCWh3LT5wY19yZCA9IGlkeDsKKwlpZiAoYm90Yml0cykKKwkJc2VxcmFtW2lkeCsrXSA9IF9fU0hJRlRfSU4oYm90Yml0cykgfCBTU1BfQUREUl9SRUc7CisJc2VxcmFtW2lkeCsrXSA9IF9fU0hJRlRfSU4odG9wYml0cykgfCBTU1BfREFUQV9SRUc7CisJc2VxcmFtW2lkeCsrXSA9IFNTUF9PUENPREVfU1RPUCB8IFNTUF9PVVRfTU9ERSB8IGNzX2VuIHwgY2xrOworCisJZXJyb3IgPSB0aV9zc3BfbG9hZChody0+ZGV2LCAwLCBzZXFyYW0sIGlkeCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSB0aV9zc3Bfc2V0X21vZGUoaHctPmRldiwgKChtb2RlICYgU1BJX0NQSEEpID8KKwkJCQkJICAwIDogU1NQX0VBUkxZX0RJTikpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWh3LT5icHcgPSBicHc7CisJaHctPm1vZGUgPSBtb2RlOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCB0aV9zc3Bfc3BpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB0aV9zc3Bfc3BpICpodyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdGlfc3NwX3NwaSwgd29yayk7CisKKwlzcGluX2xvY2soJmh3LT5sb2NrKTsKKworCSB3aGlsZSAoIWxpc3RfZW1wdHkoJmh3LT5tc2dfcXVldWUpKSB7CisJCXN0cnVjdCBzcGlfbWVzc2FnZQkqbTsKKwkJc3RydWN0IHNwaV9kZXZpY2UJKnNwaTsKKwkJc3RydWN0IHNwaV90cmFuc2ZlcgkqdCA9IE5VTEw7CisJCWludAkJCXN0YXR1cyA9IDA7CisKKwkJbSA9IGNvbnRhaW5lcl9vZihody0+bXNnX3F1ZXVlLm5leHQsIHN0cnVjdCBzcGlfbWVzc2FnZSwKKwkJCQkgcXVldWUpOworCisJCWxpc3RfZGVsX2luaXQoJm0tPnF1ZXVlKTsKKworCQlzcGluX3VubG9jaygmaHctPmxvY2spOworCisJCXNwaSA9IG0tPnNwaTsKKworCQlpZiAoaHctPnNlbGVjdCkKKwkJCWh3LT5zZWxlY3Qoc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmbS0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisJCQlpbnQgYnB3ID0gc3BpLT5iaXRzX3Blcl93b3JkOworCQkJaW50IHhmZXJfc3RhdHVzOworCisJCQlpZiAodC0+Yml0c19wZXJfd29yZCkKKwkJCQlicHcgPSB0LT5iaXRzX3Blcl93b3JkOworCisJCQlpZiAodGlfc3NwX3NwaV9zZXR1cF90cmFuc2ZlcihodywgYnB3LCBzcGktPm1vZGUpIDwgMCkKKwkJCQlicmVhazsKKworCQkJdGlfc3NwX3NwaV9jaGlwX3NlbGVjdChodywgMSk7CisKKwkJCXhmZXJfc3RhdHVzID0gdGlfc3NwX3NwaV90eHJ4KGh3LCBtLCB0KTsKKwkJCWlmICh4ZmVyX3N0YXR1cyA8IDApCisJCQkJc3RhdHVzID0geGZlcl9zdGF0dXM7CisKKwkJCWlmICh0LT5kZWxheV91c2VjcykKKwkJCQl1ZGVsYXkodC0+ZGVsYXlfdXNlY3MpOworCisJCQlpZiAodC0+Y3NfY2hhbmdlKQorCQkJCXRpX3NzcF9zcGlfY2hpcF9zZWxlY3QoaHcsIDApOworCQl9CisKKwkJdGlfc3NwX3NwaV9jaGlwX3NlbGVjdChodywgMCk7CisJCW0tPnN0YXR1cyA9IHN0YXR1czsKKwkJbS0+Y29tcGxldGUobS0+Y29udGV4dCk7CisKKwkJc3Bpbl9sb2NrKCZody0+bG9jayk7CisJfQorCisJaWYgKGh3LT5zaHV0ZG93bikKKwkJY29tcGxldGUoJmh3LT5jb21wbGV0ZSk7CisKKwlzcGluX3VubG9jaygmaHctPmxvY2spOworfQorCitzdGF0aWMgaW50IHRpX3NzcF9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkID4gMzIpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlfc3NwX3NwaV90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm0pCit7CisJc3RydWN0IHRpX3NzcF9zcGkJKmh3OworCXN0cnVjdCBzcGlfdHJhbnNmZXIJKnQ7CisJaW50CQkJZXJyb3IgPSAwOworCisJbS0+YWN0dWFsX2xlbmd0aCA9IDA7CisJbS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCisJaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWlmIChsaXN0X2VtcHR5KCZtLT50cmFuc2ZlcnMpIHx8ICFtLT5jb21wbGV0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZtLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKKwkJaWYgKHQtPmxlbiAmJiAhKHQtPnJ4X2J1ZiB8fCB0LT50eF9idWYpKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgeGZlciwgbm8gYnVmZmVyXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHQtPmxlbiAmJiB0LT5yeF9idWYgJiYgdC0+dHhfYnVmKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgeGZlciwgZnVsbCBkdXBsZXhcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAodC0+Yml0c19wZXJfd29yZCA+IDMyKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgeGZlciB3aWR0aCAlZFxuIiwKKwkJCQl0LT5iaXRzX3Blcl93b3JkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJc3Bpbl9sb2NrKCZody0+bG9jayk7CisJaWYgKGh3LT5zaHV0ZG93bikgeworCQllcnJvciA9IC1FU0hVVERPV047CisJCWdvdG8gZXJyb3JfdW5sb2NrOworCX0KKwlsaXN0X2FkZF90YWlsKCZtLT5xdWV1ZSwgJmh3LT5tc2dfcXVldWUpOworCXF1ZXVlX3dvcmsoaHctPndvcmtxdWV1ZSwgJmh3LT53b3JrKTsKK2Vycm9yX3VubG9jazoKKwlzcGluX3VubG9jaygmaHctPmxvY2spOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdGlfc3NwX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCB0aV9zc3Bfc3BpX2RhdGEgKnBkYXRhOworCXN0cnVjdCB0aV9zc3Bfc3BpICpodzsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJaW50IGVycm9yID0gMDsKKworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycihkZXYsICJwbGF0Zm9ybSBkYXRhIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoZGV2LCBzaXplb2Yoc3RydWN0IHRpX3NzcF9zcGkpKTsKKwlpZiAoIW1hc3RlcikgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBTUEkgbWFzdGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJaHctPm1hc3RlciA9IG1hc3RlcjsKKwlody0+ZGV2ID0gZGV2OworCWh3LT5zZWxlY3QgPSBwZGF0YS0+c2VsZWN0OworCisJc3Bpbl9sb2NrX2luaXQoJmh3LT5sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJmh3LT5jb21wbGV0ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5tc2dfcXVldWUpOworCUlOSVRfV09SSygmaHctPndvcmssIHRpX3NzcF9zcGlfd29yayk7CisKKwlody0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZGV2X25hbWUoZGV2KSk7CisJaWYgKCFody0+d29ya3F1ZXVlKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZGV2X2VycihkZXYsICJ3b3JrIHF1ZXVlIGNyZWF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3Jfd3E7CisJfQorCisJZXJyb3IgPSB0aV9zc3Bfc2V0X2lvc2VsKGh3LT5kZXYsIHBkYXRhLT5pb3NlbCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKGRldiwgImlvIHNldHVwIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3JfaW9zZWw7CisJfQorCisJbWFzdGVyLT5idXNfbnVtCQk9IHBkZXYtPmlkOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QJPSBwZGF0YS0+bnVtX2NzOworCW1hc3Rlci0+bW9kZV9iaXRzCT0gTU9ERV9CSVRTOworCW1hc3Rlci0+ZmxhZ3MJCT0gU1BJX01BU1RFUl9IQUxGX0RVUExFWDsKKwltYXN0ZXItPnNldHVwCQk9IHRpX3NzcF9zcGlfc2V0dXA7CisJbWFzdGVyLT50cmFuc2Zlcgk9IHRpX3NzcF9zcGlfdHJhbnNmZXI7CisKKwllcnJvciA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJtYXN0ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3JfcmVnOworCX0KKworCXJldHVybiAwOworCitlcnJvcl9yZWc6CitlcnJvcl9pb3NlbDoKKwlkZXN0cm95X3dvcmtxdWV1ZShody0+d29ya3F1ZXVlKTsKK2Vycm9yX3dxOgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0aV9zc3Bfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aV9zc3Bfc3BpICpodyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBlcnJvcjsKKworCWh3LT5zaHV0ZG93biA9IDE7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZody0+bXNnX3F1ZXVlKSkgeworCQllcnJvciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmaHctPmNvbXBsZXRlKTsKKwkJaWYgKGVycm9yIDwgMCkgeworCQkJaHctPnNodXRkb3duID0gMDsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KKwlkZXN0cm95X3dvcmtxdWV1ZShody0+d29ya3F1ZXVlKTsKKwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoaHctPm1hc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGlfc3NwX3NwaV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHRpX3NzcF9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0aV9zc3Bfc3BpX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInRpLXNzcC1zcGkiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGlfc3NwX3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGlfc3NwX3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQodGlfc3NwX3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHRpX3NzcF9zcGlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aV9zc3Bfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0aV9zc3Bfc3BpX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNTUCBTUEkgTWFzdGVyIik7CitNT0RVTEVfQVVUSE9SKCJDeXJpbCBDaGVtcGFyYXRoeSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0aS1zc3Atc3BpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYwppbmRleCBiOTBjMmNmLi43NTBmZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKQEAgLTU3NCw2ICs1NzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIGRjb25fYmxfcHJvcHMgPSB7CiAJLm1heF9icmlnaHRuZXNzID0gMTUsCisJLnR5cGUgPSBCQUNLTElHSFRfUkFXLAogCS5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTkssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9zYW1zdW5nLWxhcHRvcC5jCmluZGV4IDY2MDdhODkuLjI1Mjk0NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9zYW1zdW5nLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9zYW1zdW5nLWxhcHRvcC5jCkBAIC03ODEsNiArNzgxLDcgQEAKIAogCS8qIGNyZWF0ZSBhIGJhY2tsaWdodCBkZXZpY2UgdG8gdGFsayB0byB0aGlzIG9uZSAqLwogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gc2FiaV9jb25maWctPm1heF9icmlnaHRuZXNzOwogCWJhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJzYW1zdW5nIiwgJnNkZXYtPmRldiwKIAkJCQkJCSAgICAgTlVMTCwgJmJhY2tsaWdodF9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeC5jIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXguYwppbmRleCA0N2U1NzUzLi4xN2ExYmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90dHkvc3BlY2lhbGl4LmMKQEAgLTE0MTYsNyArMTQxNiw3IEBACiAJCQkJIGJvYXJkLCBicCwgcG9ydCwgU1hfUE9SVCh0dHktPmluZGV4KSk7CiAKIAlpZiAoc3hfcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAic3hfb3BlbiIpKSB7Ci0JCWZ1bmNfZW50ZXIoKTsKKwkJZnVuY19leGl0KCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTQzNSwxMyArMTQzNSwxMyBAQAogCiAJZXJyb3IgPSBzeF9zZXR1cF9wb3J0KGJwLCBwb3J0KTsKIAlpZiAoZXJyb3IpIHsKLQkJZnVuY19lbnRlcigpOworCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAogCWVycm9yID0gYmxvY2tfdGlsX3JlYWR5KHR0eSwgZmlscCwgcG9ydCk7CiAJaWYgKGVycm9yKSB7Ci0JCWZ1bmNfZW50ZXIoKTsKKwkJZnVuY19leGl0KCk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKQEAgLTE4NjAsNyArMTg2MCw3IEBACiAJZnVuY19lbnRlcigpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIG5ld2luZm8sIHNpemVvZih0bXApKSkgewotCQlmdW5jX2VudGVyKCk7CisJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2hiYS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaGJhLmMKaW5kZXggNzNmN2Q2ZC4uNmVjNTFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaGJhLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaGJhLmMKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9iYXNlLmg+CiAjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5oPgotI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuaD4KICNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmg+CiAjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9iZmluX2p0YWdfY29tbS5jIGIvZHJpdmVycy90dHkvYmZpbl9qdGFnX2NvbW0uYwppbmRleCAxNjQwMjQ0NS4uMDNjMjg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvYmZpbl9qdGFnX2NvbW0uYworKysgYi9kcml2ZXJzL3R0eS9iZmluX2p0YWdfY29tbS5jCkBAIC0yNTEsMTEgKzI1MSwxMSBAQAogCWJmaW5famNfd3JpdGVfYnVmLmhlYWQgPSBiZmluX2pjX3dyaXRlX2J1Zi50YWlsID0gMDsKIAliZmluX2pjX3dyaXRlX2J1Zi5idWYgPSBrbWFsbG9jKENJUkNfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFiZmluX2pjX3dyaXRlX2J1Zi5idWYpCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9idWY7CiAKIAliZmluX2pjX2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoMSk7CiAJaWYgKCFiZmluX2pjX2RyaXZlcikKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2RyaXZlcjsKIAogCWJmaW5famNfZHJpdmVyLT5vd25lciAgICAgICAgPSBUSElTX01PRFVMRTsKIAliZmluX2pjX2RyaXZlci0+ZHJpdmVyX25hbWUgID0gRFJWX05BTUU7CkBAIC0yNzUsNyArMjc1LDkgQEAKIAogIGVycjoKIAlwdXRfdHR5X2RyaXZlcihiZmluX2pjX2RyaXZlcik7CisgZXJyX2RyaXZlcjoKIAlrZnJlZShiZmluX2pjX3dyaXRlX2J1Zi5idWYpOworIGVycl9idWY6CiAJa3RocmVhZF9zdG9wKGJmaW5famNfa3RocmVhZCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2h2Yy9odmNzLmMgYi9kcml2ZXJzL3R0eS9odmMvaHZjcy5jCmluZGV4IGJlZGM2YzEuLmJlZjIzOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy9odmNzLmMKKysrIGIvZHJpdmVycy90dHkvaHZjL2h2Y3MuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJLyoKIAkgKiBBbnkgdmFyaWFibGUgYmVsb3cgdGhlIGtyZWYgaXMgdmFsaWQgYmVmb3JlIGEgdHR5IGlzIGNvbm5lY3RlZCBhbmQKIAkgKiBzdGF5cyB2YWxpZCBhZnRlciB0aGUgdHR5IGlzIGRpc2Nvbm5lY3RlZC4gIFRoZXNlIHNob3VsZG4ndCBiZQotCSAqIHdoYWNrZWQgdW50aWwgdGhlIGtvamVjdCByZWZjb3VudCByZWFjaGVzIHplcm8gdGhvdWdoIHNvbWUgZW50cmllcworCSAqIHdoYWNrZWQgdW50aWwgdGhlIGtvYmplY3QgcmVmY291bnQgcmVhY2hlcyB6ZXJvIHRob3VnaCBzb21lIGVudHJpZXMKIAkgKiBtYXkgYmUgY2hhbmdlZCB2aWEgc3lzZnMgaW5pdGlhdGl2ZXMuCiAJICovCiAJc3RydWN0IGtyZWYga3JlZjsgLyogcmVmIGNvdW50ICYgaHZjc19zdHJ1Y3QgbGlmZXRpbWUgKi8KQEAgLTMwOSw2ICszMDksNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKGh2Y3Nfc3RydWN0cyk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh2Y3Nfc3RydWN0c19sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaHZjc19pbml0X211dGV4KTsKIAogc3RhdGljIHZvaWQgaHZjc191bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgaHZjc190aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKQEAgLTM0MCw2ICszNDEsNyBAQAogc3RhdGljIGludCBfX2RldmV4aXQgaHZjc19yZW1vdmUoc3RydWN0IHZpb19kZXYgKmRldik7CiBzdGF0aWMgaW50IF9faW5pdCBodmNzX21vZHVsZV9pbml0KHZvaWQpOwogc3RhdGljIHZvaWQgX19leGl0IGh2Y3NfbW9kdWxlX2V4aXQodm9pZCk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBodmNzX2luaXRpYWxpemUodm9pZCk7CiAKICNkZWZpbmUgSFZDU19TQ0hFRF9SRUFECTB4MDAwMDAwMDEKICNkZWZpbmUgSFZDU19RVUlDS19SRUFECTB4MDAwMDAwMDIKQEAgLTc2Miw3ICs3NjQsNyBAQAogCWNvbnN0IHN0cnVjdCB2aW9fZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgaHZjc19zdHJ1Y3QgKmh2Y3NkOwotCWludCBpbmRleDsKKwlpbnQgaW5kZXgsIHJjOwogCWludCByZXR2YWw7CiAKIAlpZiAoIWRldiB8fCAhaWQpIHsKQEAgLTc3MCw2ICs3NzIsMTMgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICovCisJcmMgPSBodmNzX2luaXRpYWxpemUoKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJIVkNTOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb3JlIGRyaXZlci5cbiIpOworCQlyZXR1cm4gcmM7CisJfQorCiAJLyogZWFybHkgdG8gYXZvaWQgY2xlYW51cCBvbiBmYWlsdXJlICovCiAJaW5kZXggPSBodmNzX2dldF9pbmRleCgpOwogCWlmIChpbmRleCA8IDApIHsKQEAgLTE0NjQsMTIgKzE0NzMsMTUgQEAKIAlodmNzX2luZGV4X2NvdW50ID0gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaHZjc19tb2R1bGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgaHZjc19pbml0aWFsaXplKHZvaWQpCiB7Ci0JaW50IHJjOwotCWludCBudW1fdHR5c190b19hbGxvYzsKKwlpbnQgcmMsIG51bV90dHlzX3RvX2FsbG9jOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nICVzXG4iLCBodmNzX2RyaXZlcl9zdHJpbmcpOworCW11dGV4X2xvY2soJmh2Y3NfaW5pdF9tdXRleCk7CisJaWYgKGh2Y3NfdGFzaykgeworCQltdXRleF91bmxvY2soJmh2Y3NfaW5pdF9tdXRleCk7CisJCXJldHVybiAwOworCX0KIAogCS8qIEhhcyB0aGUgdXNlciBzcGVjaWZpZWQgYW4gb3ZlcmxvYWQgd2l0aCBhbiBpbnNtb2QgcGFyYW0/ICovCiAJaWYgKGh2Y3NfcGFybV9udW1fZGV2cyA8PSAwIHx8CkBAIC0xNTI4LDM1ICsxNTQwLDEzIEBACiAKIAlodmNzX3Rhc2sgPSBrdGhyZWFkX3J1bihraHZjc2QsIE5VTEwsICJraHZjc2QiKTsKIAlpZiAoSVNfRVJSKGh2Y3NfdGFzaykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIVkNTOiBraHZjc2QgY3JlYXRpb24gZmFpbGVkLiAgRHJpdmVyIG5vdCBsb2FkZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJIVkNTOiBraHZjc2QgY3JlYXRpb24gZmFpbGVkLlxuIik7CiAJCXJjID0gLUVJTzsKIAkJZ290byBrdGhyZWFkX2ZhaWw7CiAJfQotCi0JcmMgPSB2aW9fcmVnaXN0ZXJfZHJpdmVyKCZodmNzX3Zpb19kcml2ZXIpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkhWQ1M6IGNhbid0IHJlZ2lzdGVyIHZpbyBkcml2ZXJcbiIpOwotCQlnb3RvIHZpb19mYWlsOwotCX0KLQotCS8qCi0JICogVGhpcyBuZWVkcyB0byBiZSBkb25lIEFGVEVSIHRoZSB2aW9fcmVnaXN0ZXJfZHJpdmVyKCkgY2FsbCBvciBlbHNlCi0JICogdGhlIGtvYmplY3RzIHdvbid0IGJlIGluaXRpYWxpemVkIHByb3Blcmx5LgotCSAqLwotCXJjID0gZHJpdmVyX2NyZWF0ZV9maWxlKCYoaHZjc192aW9fZHJpdmVyLmRyaXZlciksICZkcml2ZXJfYXR0cl9yZXNjYW4pOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkhWQ1M6IHN5c2ZzIGF0dHIgY3JlYXRlIGZhaWxlZFxuIik7Ci0JCWdvdG8gYXR0cl9mYWlsOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIkhWQ1M6IGRyaXZlciBtb2R1bGUgaW5zZXJ0ZWQuXG4iKTsKLQorCW11dGV4X3VubG9jaygmaHZjc19pbml0X211dGV4KTsKIAlyZXR1cm4gMDsKIAotYXR0cl9mYWlsOgotCXZpb191bnJlZ2lzdGVyX2RyaXZlcigmaHZjc192aW9fZHJpdmVyKTsKLXZpb19mYWlsOgotCWt0aHJlYWRfc3RvcChodmNzX3Rhc2spOwoga3RocmVhZF9mYWlsOgogCWtmcmVlKGh2Y3NfcGlfYnVmZik7CiBidWZmX2FsbG9jX2ZhaWw6CkBAIC0xNTY2LDE1ICsxNTU2LDM5IEBACiBpbmRleF9mYWlsOgogCXB1dF90dHlfZHJpdmVyKGh2Y3NfdHR5X2RyaXZlcik7CiAJaHZjc190dHlfZHJpdmVyID0gTlVMTDsKKwltdXRleF91bmxvY2soJmh2Y3NfaW5pdF9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBodmNzX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJjID0gdmlvX3JlZ2lzdGVyX2RyaXZlcigmaHZjc192aW9fZHJpdmVyKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJIVkNTOiBjYW4ndCByZWdpc3RlciB2aW8gZHJpdmVyXG4iKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXByX2luZm8oIkhWQ1M6IERyaXZlciByZWdpc3RlcmVkLlxuIik7CisKKwkvKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgQUZURVIgdGhlIHZpb19yZWdpc3Rlcl9kcml2ZXIoKSBjYWxsIG9yIGVsc2UKKwkgKiB0aGUga29iamVjdHMgd29uJ3QgYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuCisJICovCisJcmMgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJihodmNzX3Zpb19kcml2ZXIuZHJpdmVyKSwgJmRyaXZlcl9hdHRyX3Jlc2Nhbik7CisJaWYgKHJjKQorCQlwcl93YXJuaW5nKEtFUk5fRVJSICJIVkNTOiBGYWlsZWQgdG8gY3JlYXRlIHJlc2NhbiBmaWxlIChlcnIgJWQpXG4iLCByYyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgX19leGl0IGh2Y3NfbW9kdWxlX2V4aXQodm9pZCkKIHsKIAkvKgogCSAqIFRoaXMgZHJpdmVyIHJlY2VpdmVzIGh2Y3NfcmVtb3ZlIGNhbGxiYWNrcyBmb3IgZWFjaCBkZXZpY2UgdXBvbgogCSAqIG1vZHVsZSByZW1vdmFsLgogCSAqLworCXZpb191bnJlZ2lzdGVyX2RyaXZlcigmaHZjc192aW9fZHJpdmVyKTsKKwlpZiAoIWh2Y3NfdGFzaykKKwkJcmV0dXJuOwogCiAJLyoKIAkgKiBUaGlzIHN5bmNocm9ub3VzIG9wZXJhdGlvbiAgd2lsbCB3YWtlIHRoZSBraHZjc2Qga3RocmVhZCBpZiBpdCBpcwpAQCAtMTU4OSw4ICsxNjAzLDYgQEAKIAogCWRyaXZlcl9yZW1vdmVfZmlsZSgmaHZjc192aW9fZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX3Jlc2Nhbik7CiAKLQl2aW9fdW5yZWdpc3Rlcl9kcml2ZXIoJmh2Y3NfdmlvX2RyaXZlcik7Ci0KIAl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoaHZjc190dHlfZHJpdmVyKTsKIAogCWh2Y3NfZnJlZV9pbmRleF9saXN0KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCmluZGV4IGU0NjFiZTEuLmUxYWVlMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCkBAIC01MzcsOCArNTM3LDggQEAKIAogY29uZmlnIFNFUklBTF9TNVBWMjEwCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzVQVjIxMCBTZXJpYWwgcG9ydCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX1NBTVNVTkcgJiYgKENQVV9TNVBWMjEwIHx8IENQVV9TNVA2NDQyIHx8IENQVV9TNVBWMzEwKQotCXNlbGVjdCBTRVJJQUxfU0FNU1VOR19VQVJUU180IGlmIChDUFVfUzVQVjIxMCB8fCBDUFVfUzVQVjMxMCkKKwlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HICYmIChDUFVfUzVQVjIxMCB8fCBDUFVfUzVQNjQ0MiB8fCBDUFVfRVhZTk9TNDIxMCkKKwlzZWxlY3QgU0VSSUFMX1NBTVNVTkdfVUFSVFNfNCBpZiAoQ1BVX1M1UFYyMTAgfHwgQ1BVX0VYWU5PUzQyMTApCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgU2Ftc3VuZydzIFM1UCBGYW1pbHkgb2YgU29DJ3MKQEAgLTE1OTgsNCArMTU5OCwxOCBAQAogCSAgRW5hYmxlcyB1c2Vyc3BhY2UgY2xpZW50cyB0byByZWFkIGFuZCB3cml0ZSB0byBzb21lIHN0cmVhbWluZyBTTUQKIAkgIHBvcnRzIHZpYSB0dHkgZGV2aWNlIGludGVyZmFjZSBmb3IgTVNNIGNoaXBzZXQuCiAKK2NvbmZpZyBTRVJJQUxfTVhTX0FVQVJUCisJZGVwZW5kcyBvbiBBUkNIX01YUworCXRyaXN0YXRlICJNWFMgQVVBUlQgc3VwcG9ydCIKKwlzZWxlY3QgU0VSSUFMX0NPUkUKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTVhTIEFwcGxpY2F0aW9uIFVBUlQgKEFVQVJUKSBwb3J0LgorCitjb25maWcgU0VSSUFMX01YU19BVUFSVF9DT05TT0xFCisJYm9vbCAiTVhTIEFVQVJUIGNvbnNvbGUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNFUklBTF9NWFNfQVVBUlQ9eQorCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCisJaGVscAorCSAgRW5hYmxlIGEgTVhTIEFVQVJUIHBvcnQgdG8gYmUgdGhlIHN5c3RlbSBjb25zb2xlLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKaW5kZXggMzFlODY4Yy4uZmVlMDY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZQpAQCAtOTMsMyArOTMsNCBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9JRlg2WDYwKSAgCSs9IGlmeDZ4NjAubwogb2JqLSQoQ09ORklHX1NFUklBTF9QQ0hfVUFSVCkJKz0gcGNoX3VhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9NU01fU01EKQkrPSBtc21fc21kX3R0eS5vCitvYmotJChDT05GSUdfU0VSSUFMX01YU19BVUFSVCkgKz0gbXhzLWF1YXJ0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5jCmluZGV4IDhlNDNhN2IuLmJmZWU5YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuYwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCiAgKiBBdXRob3I6IFJvYmVydCBMb3ZlIDxybG92ZUBnb29nbGUuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZApAQCAtMzEsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlICJtc21fc2VyaWFsLmgiCiAKQEAgLTM4LDkgKzQwLDIwIEBACiAJc3RydWN0IHVhcnRfcG9ydAl1YXJ0OwogCWNoYXIJCQluYW1lWzE2XTsKIAlzdHJ1Y3QgY2xrCQkqY2xrOworCXN0cnVjdCBjbGsJCSpwY2xrOwogCXVuc2lnbmVkIGludAkJaW1yOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICpnc2JpX2Jhc2U7CisJaW50CQkJaXNfdWFydGRtOworCXVuc2lnbmVkIGludAkJb2xkX3NuYXBfc3RhdGU7CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfeG1pdHIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJpdHMpCit7CisJaWYgKCEobXNtX3JlYWQocG9ydCwgVUFSVF9TUikgJiBVQVJUX1NSX1RYX0VNUFRZKSkKKwkJd2hpbGUgKChtc21fcmVhZChwb3J0LCBVQVJUX0lTUikgJiBiaXRzKSAhPSBiaXRzKQorCQkJY3B1X3JlbGF4KCk7Cit9CisKIHN0YXRpYyB2b2lkIG1zbV9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IG1zbV9wb3J0ICptc21fcG9ydCA9IFVBUlRfVE9fTVNNKHBvcnQpOwpAQCAtNzMsNiArODYsNjEgQEAKIAltc21fd3JpdGUocG9ydCwgbXNtX3BvcnQtPmltciwgVUFSVF9JTVIpOwogfQogCitzdGF0aWMgdm9pZCBoYW5kbGVfcnhfZG0oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1pc3IpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKKwl1bnNpZ25lZCBpbnQgc3I7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgbXNtX3BvcnQgKm1zbV9wb3J0ID0gVUFSVF9UT19NU00ocG9ydCk7CisKKwlpZiAoKG1zbV9yZWFkKHBvcnQsIFVBUlRfU1IpICYgVUFSVF9TUl9PVkVSUlVOKSkgeworCQlwb3J0LT5pY291bnQub3ZlcnJ1bisrOworCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKKwkJbXNtX3dyaXRlKHBvcnQsIFVBUlRfQ1JfQ01EX1JFU0VUX0VSUiwgVUFSVF9DUik7CisJfQorCisJaWYgKG1pc3IgJiBVQVJUX0lNUl9SWFNUQUxFKSB7CisJCWNvdW50ID0gbXNtX3JlYWQocG9ydCwgVUFSVERNX1JYX1RPVEFMX1NOQVApIC0KKwkJCW1zbV9wb3J0LT5vbGRfc25hcF9zdGF0ZTsKKwkJbXNtX3BvcnQtPm9sZF9zbmFwX3N0YXRlID0gMDsKKwl9IGVsc2UgeworCQljb3VudCA9IDQgKiAobXNtX3JlYWQocG9ydCwgVUFSVF9SRldSKSk7CisJCW1zbV9wb3J0LT5vbGRfc25hcF9zdGF0ZSArPSBjb3VudDsKKwl9CisKKwkvKiBUT0RPOiBQcmVjaXNlIGVycm9yIHJlcG9ydGluZyAqLworCisJcG9ydC0+aWNvdW50LnJ4ICs9IGNvdW50OworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQl1bnNpZ25lZCBpbnQgYzsKKworCQlzciA9IG1zbV9yZWFkKHBvcnQsIFVBUlRfU1IpOworCQlpZiAoKHNyICYgVUFSVF9TUl9SWF9SRUFEWSkgPT0gMCkgeworCQkJbXNtX3BvcnQtPm9sZF9zbmFwX3N0YXRlIC09IGNvdW50OworCQkJYnJlYWs7CisJCX0KKwkJYyA9IG1zbV9yZWFkKHBvcnQsIFVBUlRETV9SRik7CisJCWlmIChzciAmIFVBUlRfU1JfUlhfQlJFQUspIHsKKwkJCXBvcnQtPmljb3VudC5icmsrKzsKKwkJCWlmICh1YXJ0X2hhbmRsZV9icmVhayhwb3J0KSkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChzciAmIFVBUlRfU1JfUEFSX0ZSQU1FX0VSUikKKwkJCXBvcnQtPmljb3VudC5mcmFtZSsrOworCisJCS8qIFRPRE86IGhhbmRsZSBzeXNycSAqLworCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgKGNoYXIgKikgJmMsCisJCQkJICAgICAgIChjb3VudCA+IDQpID8gNCA6IGNvdW50KTsKKwkJY291bnQgLT0gNDsKKwl9CisKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCWlmIChtaXNyICYgKFVBUlRfSU1SX1JYU1RBTEUpKQorCQltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUkVTRVRfU1RBTEVfSU5ULCBVQVJUX0NSKTsKKwltc21fd3JpdGUocG9ydCwgMHhGRkZGRkYsIFVBUlRETV9ETVJYKTsKKwltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfU1RBTEVfRVZFTlRfRU5BQkxFLCBVQVJUX0NSKTsKK30KKwogc3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKQEAgLTEyMSw2ICsxODksMTIgQEAKIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogfQogCitzdGF0aWMgdm9pZCByZXNldF9kbV9jb3VudChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXdhaXRfZm9yX3htaXRyKHBvcnQsIFVBUlRfSVNSX1RYX1JFQURZKTsKKwltc21fd3JpdGUocG9ydCwgMSwgVUFSVERNX05DRl9UWCk7Cit9CisKIHN0YXRpYyB2b2lkIGhhbmRsZV90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKQEAgLTEyOCwxMSArMjAyLDE4IEBACiAJaW50IHNlbnRfdHg7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7Ci0JCW1zbV93cml0ZShwb3J0LCBwb3J0LT54X2NoYXIsIFVBUlRfVEYpOworCQlpZiAobXNtX3BvcnQtPmlzX3VhcnRkbSkKKwkJCXJlc2V0X2RtX2NvdW50KHBvcnQpOworCisJCW1zbV93cml0ZShwb3J0LCBwb3J0LT54X2NoYXIsCisJCQkgIG1zbV9wb3J0LT5pc191YXJ0ZG0gPyBVQVJURE1fVEYgOiBVQVJUX1RGKTsKIAkJcG9ydC0+aWNvdW50LnR4Kys7CiAJCXBvcnQtPnhfY2hhciA9IDA7CiAJfQogCisJaWYgKG1zbV9wb3J0LT5pc191YXJ0ZG0pCisJCXJlc2V0X2RtX2NvdW50KHBvcnQpOworCiAJd2hpbGUgKG1zbV9yZWFkKHBvcnQsIFVBUlRfU1IpICYgVUFSVF9TUl9UWF9SRUFEWSkgewogCQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKSB7CiAJCQkvKiBkaXNhYmxlIHR4IGludGVycnVwdHMgKi8KQEAgLTE0MCw4ICsyMjEsMTEgQEAKIAkJCW1zbV93cml0ZShwb3J0LCBtc21fcG9ydC0+aW1yLCBVQVJUX0lNUik7CiAJCQlicmVhazsKIAkJfQorCQltc21fd3JpdGUocG9ydCwgeG1pdC0+YnVmW3htaXQtPnRhaWxdLAorCQkJICBtc21fcG9ydC0+aXNfdWFydGRtID8gVUFSVERNX1RGIDogVUFSVF9URik7CiAKLQkJbXNtX3dyaXRlKHBvcnQsIHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSwgVUFSVF9URik7CisJCWlmIChtc21fcG9ydC0+aXNfdWFydGRtKQorCQkJcmVzZXRfZG1fY291bnQocG9ydCk7CiAKIAkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKIAkJcG9ydC0+aWNvdW50LnR4Kys7CkBAIC0xNjksOCArMjUzLDEyIEBACiAJbWlzciA9IG1zbV9yZWFkKHBvcnQsIFVBUlRfTUlTUik7CiAJbXNtX3dyaXRlKHBvcnQsIDAsIFVBUlRfSU1SKTsgLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KIAotCWlmIChtaXNyICYgKFVBUlRfSU1SX1JYTEVWIHwgVUFSVF9JTVJfUlhTVEFMRSkpCi0JCWhhbmRsZV9yeChwb3J0KTsKKwlpZiAobWlzciAmIChVQVJUX0lNUl9SWExFViB8IFVBUlRfSU1SX1JYU1RBTEUpKSB7CisJCWlmIChtc21fcG9ydC0+aXNfdWFydGRtKQorCQkJaGFuZGxlX3J4X2RtKHBvcnQsIG1pc3IpOworCQllbHNlCisJCQloYW5kbGVfcngocG9ydCk7CisJfQogCWlmIChtaXNyICYgVUFSVF9JTVJfVFhMRVYpCiAJCWhhbmRsZV90eChwb3J0KTsKIAlpZiAobWlzciAmIFVBUlRfSU1SX0RFTFRBX0NUUykKQEAgLTE5MiwxMCArMjgwLDIxIEBACiAJcmV0dXJuIFRJT0NNX0NBUiB8IFRJT0NNX0NUUyB8IFRJT0NNX0RTUiB8IFRJT0NNX1JUUzsKIH0KIAotc3RhdGljIHZvaWQgbXNtX3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCisKK3N0YXRpYyB2b2lkIG1zbV9yZXNldChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCS8qIHJlc2V0IGV2ZXJ5dGhpbmcgKi8KKwltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUkVTRVRfUlgsIFVBUlRfQ1IpOworCW1zbV93cml0ZShwb3J0LCBVQVJUX0NSX0NNRF9SRVNFVF9UWCwgVUFSVF9DUik7CisJbXNtX3dyaXRlKHBvcnQsIFVBUlRfQ1JfQ01EX1JFU0VUX0VSUiwgVUFSVF9DUik7CisJbXNtX3dyaXRlKHBvcnQsIFVBUlRfQ1JfQ01EX1JFU0VUX0JSRUFLX0lOVCwgVUFSVF9DUik7CisJbXNtX3dyaXRlKHBvcnQsIFVBUlRfQ1JfQ01EX1JFU0VUX0NUUywgVUFSVF9DUik7CisJbXNtX3dyaXRlKHBvcnQsIFVBUlRfQ1JfQ01EX1NFVF9SRlIsIFVBUlRfQ1IpOworfQorCit2b2lkIG1zbV9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1jdHJsKQogewogCXVuc2lnbmVkIGludCBtcjsKLQogCW1yID0gbXNtX3JlYWQocG9ydCwgVUFSVF9NUjEpOwogCiAJaWYgKCEobWN0cmwgJiBUSU9DTV9SVFMpKSB7CkBAIC0yMTksNiArMzE4LDcgQEAKIHN0YXRpYyBpbnQgbXNtX3NldF9iYXVkX3JhdGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGJhdWQpCiB7CiAJdW5zaWduZWQgaW50IGJhdWRfY29kZSwgcnhzdGFsZSwgd2F0ZXJtYXJrOworCXN0cnVjdCBtc21fcG9ydCAqbXNtX3BvcnQgPSBVQVJUX1RPX01TTShwb3J0KTsKIAogCXN3aXRjaCAoYmF1ZCkgewogCWNhc2UgMzAwOgpAQCAtMjczLDYgKzM3Myw5IEBACiAJCWJyZWFrOwogCX0KIAorCWlmIChtc21fcG9ydC0+aXNfdWFydGRtKQorCQltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUkVTRVRfUlgsIFVBUlRfQ1IpOworCiAJbXNtX3dyaXRlKHBvcnQsIGJhdWRfY29kZSwgVUFSVF9DU1IpOwogCiAJLyogUlggc3RhbGUgd2F0ZXJtYXJrICovCkBAIC0yODgsMjUgKzM5MSwyMyBAQAogCS8qIHNldCBUWCB3YXRlcm1hcmsgKi8KIAltc21fd3JpdGUocG9ydCwgMTAsIFVBUlRfVEZXUik7CiAKKwlpZiAobXNtX3BvcnQtPmlzX3VhcnRkbSkgeworCQltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUkVTRVRfU1RBTEVfSU5ULCBVQVJUX0NSKTsKKwkJbXNtX3dyaXRlKHBvcnQsIDB4RkZGRkZGLCBVQVJURE1fRE1SWCk7CisJCW1zbV93cml0ZShwb3J0LCBVQVJUX0NSX0NNRF9TVEFMRV9FVkVOVF9FTkFCTEUsIFVBUlRfQ1IpOworCX0KKwogCXJldHVybiBiYXVkOwogfQogCi1zdGF0aWMgdm9pZCBtc21fcmVzZXQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQkvKiByZXNldCBldmVyeXRoaW5nICovCi0JbXNtX3dyaXRlKHBvcnQsIFVBUlRfQ1JfQ01EX1JFU0VUX1JYLCBVQVJUX0NSKTsKLQltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUkVTRVRfVFgsIFVBUlRfQ1IpOwotCW1zbV93cml0ZShwb3J0LCBVQVJUX0NSX0NNRF9SRVNFVF9FUlIsIFVBUlRfQ1IpOwotCW1zbV93cml0ZShwb3J0LCBVQVJUX0NSX0NNRF9SRVNFVF9CUkVBS19JTlQsIFVBUlRfQ1IpOwotCW1zbV93cml0ZShwb3J0LCBVQVJUX0NSX0NNRF9SRVNFVF9DVFMsIFVBUlRfQ1IpOwotCW1zbV93cml0ZShwb3J0LCBVQVJUX0NSX0NNRF9TRVRfUkZSLCBVQVJUX0NSKTsKLX0KIAogc3RhdGljIHZvaWQgbXNtX2luaXRfY2xvY2soc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgbXNtX3BvcnQgKm1zbV9wb3J0ID0gVUFSVF9UT19NU00ocG9ydCk7CiAKIAljbGtfZW5hYmxlKG1zbV9wb3J0LT5jbGspOworCWlmICghSVNfRVJSKG1zbV9wb3J0LT5wY2xrKSkKKwkJY2xrX2VuYWJsZShtc21fcG9ydC0+cGNsayk7CiAJbXNtX3NlcmlhbF9zZXRfbW5kX3JlZ3MocG9ydCk7CiB9CiAKQEAgLTM0NywxNSArNDQ4LDMxIEBACiAJCW1zbV93cml0ZShwb3J0LCBkYXRhLCBVQVJUX0lQUik7CiAJfQogCi0JbXNtX3Jlc2V0KHBvcnQpOworCWRhdGEgPSAwOworCWlmICghcG9ydC0+Y29ucyB8fCAocG9ydC0+Y29ucyAmJiAhKHBvcnQtPmNvbnMtPmZsYWdzICYgQ09OX0VOQUJMRUQpKSkgeworCQltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUFJPVEVDVElPTl9FTiwgVUFSVF9DUik7CisJCW1zbV9yZXNldChwb3J0KTsKKwkJZGF0YSA9IFVBUlRfQ1JfVFhfRU5BQkxFOworCX0KIAotCW1zbV93cml0ZShwb3J0LCAweDA1LCBVQVJUX0NSKTsJLyogZW5hYmxlIFRYICYgUlggKi8KKwlkYXRhIHw9IFVBUlRfQ1JfUlhfRU5BQkxFOworCW1zbV93cml0ZShwb3J0LCBkYXRhLCBVQVJUX0NSKTsJLyogZW5hYmxlIFRYICYgUlggKi8KKworCS8qIE1ha2Ugc3VyZSBJUFIgaXMgbm90IDAgdG8gc3RhcnQgd2l0aCovCisJaWYgKG1zbV9wb3J0LT5pc191YXJ0ZG0pCisJCW1zbV93cml0ZShwb3J0LCBVQVJUX0lQUl9TVEFMRV9MU0IsIFVBUlRfSVBSKTsKIAogCS8qIHR1cm4gb24gUlggYW5kIENUUyBpbnRlcnJ1cHRzICovCiAJbXNtX3BvcnQtPmltciA9IFVBUlRfSU1SX1JYTEVWIHwgVUFSVF9JTVJfUlhTVEFMRSB8CiAJCQlVQVJUX0lNUl9DVVJSRU5UX0NUUzsKLQltc21fd3JpdGUocG9ydCwgbXNtX3BvcnQtPmltciwgVUFSVF9JTVIpOwogCisJaWYgKG1zbV9wb3J0LT5pc191YXJ0ZG0pIHsKKwkJbXNtX3dyaXRlKHBvcnQsIDB4RkZGRkZGLCBVQVJURE1fRE1SWCk7CisJCW1zbV93cml0ZShwb3J0LCBVQVJUX0NSX0NNRF9SRVNFVF9TVEFMRV9JTlQsIFVBUlRfQ1IpOworCQltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfU1RBTEVfRVZFTlRfRU5BQkxFLCBVQVJUX0NSKTsKKwl9CisKKwltc21fd3JpdGUocG9ydCwgbXNtX3BvcnQtPmltciwgVUFSVF9JTVIpOwogCXJldHVybiAwOwogfQogCkBAIC0zODQsNyArNTAxLDcgQEAKIAliYXVkID0gbXNtX3NldF9iYXVkX3JhdGUocG9ydCwgYmF1ZCk7CiAJaWYgKHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0ZXJtaW9zKSkKIAkJdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZSh0ZXJtaW9zLCBiYXVkLCBiYXVkKTsKLQkKKwogCS8qIGNhbGN1bGF0ZSBwYXJpdHkgKi8KIAltciA9IG1zbV9yZWFkKHBvcnQsIFVBUlRfTVIyKTsKIAltciAmPSB+VUFSVF9NUjJfUEFSSVRZX01PREU7CkBAIC00NTQsNDggKzU3MSwxMDUgQEAKIHN0YXRpYyB2b2lkIG1zbV9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKHBvcnQtPmRldik7Ci0Jc3RydWN0IHJlc291cmNlICpyZXNvdXJjZTsKKwlzdHJ1Y3QgbXNtX3BvcnQgKm1zbV9wb3J0ID0gVUFSVF9UT19NU00ocG9ydCk7CisJc3RydWN0IHJlc291cmNlICp1YXJ0X3Jlc291cmNlOworCXN0cnVjdCByZXNvdXJjZSAqZ3NiaV9yZXNvdXJjZTsKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKIAotCXJlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAodW5saWtlbHkoIXJlc291cmNlKSkKKwl1YXJ0X3Jlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAodW5saWtlbHkoIXVhcnRfcmVzb3VyY2UpKQogCQlyZXR1cm47Ci0Jc2l6ZSA9IHJlc291cmNlLT5lbmQgLSByZXNvdXJjZS0+c3RhcnQgKyAxOworCXNpemUgPSByZXNvdXJjZV9zaXplKHVhcnRfcmVzb3VyY2UpOwogCiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIHNpemUpOwogCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7CiAJcG9ydC0+bWVtYmFzZSA9IE5VTEw7CisKKwlpZiAobXNtX3BvcnQtPmdzYmlfYmFzZSkgeworCQlpb3dyaXRlMzIoR1NCSV9QUk9UT0NPTF9JRExFLCBtc21fcG9ydC0+Z3NiaV9iYXNlICsKKwkJCSAgR1NCSV9DT05UUk9MKTsKKworCQlnc2JpX3Jlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAorCQkJCQkJCSAgICAgSU9SRVNPVVJDRV9NRU0sCisJCQkJCQkJICAgICAiZ3NiaV9yZXNvdXJjZSIpOworCisJCWlmICh1bmxpa2VseSghZ3NiaV9yZXNvdXJjZSkpCisJCQlyZXR1cm47CisKKwkJc2l6ZSA9IHJlc291cmNlX3NpemUoZ3NiaV9yZXNvdXJjZSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihnc2JpX3Jlc291cmNlLT5zdGFydCwgc2l6ZSk7CisJCWlvdW5tYXAobXNtX3BvcnQtPmdzYmlfYmFzZSk7CisJCW1zbV9wb3J0LT5nc2JpX2Jhc2UgPSBOVUxMOworCX0KIH0KIAogc3RhdGljIGludCBtc21fcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CisJc3RydWN0IG1zbV9wb3J0ICptc21fcG9ydCA9IFVBUlRfVE9fTVNNKHBvcnQpOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UocG9ydC0+ZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlOworCXN0cnVjdCByZXNvdXJjZSAqdWFydF9yZXNvdXJjZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmdzYmlfcmVzb3VyY2U7CiAJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CisJaW50IHJldDsKIAotCXJlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAodW5saWtlbHkoIXJlc291cmNlKSkKKwl1YXJ0X3Jlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJCSAgICAgInVhcnRfcmVzb3VyY2UiKTsKKwlpZiAodW5saWtlbHkoIXVhcnRfcmVzb3VyY2UpKQogCQlyZXR1cm4gLUVOWElPOwotCXNpemUgPSByZXNvdXJjZS0+ZW5kIC0gcmVzb3VyY2UtPnN0YXJ0ICsgMTsKIAotCWlmICh1bmxpa2VseSghcmVxdWVzdF9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIHNpemUsICJtc21fc2VyaWFsIikpKQorCXNpemUgPSByZXNvdXJjZV9zaXplKHVhcnRfcmVzb3VyY2UpOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgc2l6ZSwgIm1zbV9zZXJpYWwiKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwKHBvcnQtPm1hcGJhc2UsIHNpemUpOwogCWlmICghcG9ydC0+bWVtYmFzZSkgewotCQlyZWxlYXNlX21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgc2l6ZSk7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBmYWlsX3JlbGVhc2VfcG9ydDsKKwl9CisKKwlnc2JpX3Jlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJCSAgICAgImdzYmlfcmVzb3VyY2UiKTsKKwkvKiBJcyB0aGlzIGEgR1NCSS1iYXNlZCBwb3J0PyAqLworCWlmIChnc2JpX3Jlc291cmNlKSB7CisJCXNpemUgPSByZXNvdXJjZV9zaXplKGdzYmlfcmVzb3VyY2UpOworCisJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGdzYmlfcmVzb3VyY2UtPnN0YXJ0LCBzaXplLAorCQkJCQkJICJtc21fc2VyaWFsIikpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gZmFpbF9yZWxlYXNlX3BvcnQ7CisJCX0KKworCQltc21fcG9ydC0+Z3NiaV9iYXNlID0gaW9yZW1hcChnc2JpX3Jlc291cmNlLT5zdGFydCwgc2l6ZSk7CisJCWlmICghbXNtX3BvcnQtPmdzYmlfYmFzZSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBmYWlsX3JlbGVhc2VfZ3NiaTsKKwkJfQogCX0KIAogCXJldHVybiAwOworCitmYWlsX3JlbGVhc2VfZ3NiaToKKwlyZWxlYXNlX21lbV9yZWdpb24oZ3NiaV9yZXNvdXJjZS0+c3RhcnQsIHNpemUpOworZmFpbF9yZWxlYXNlX3BvcnQ6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIHNpemUpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG1zbV9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IG1zbV9wb3J0ICptc21fcG9ydCA9IFVBUlRfVE9fTVNNKHBvcnQpOworCWludCByZXQ7CiAJaWYgKGZsYWdzICYgVUFSVF9DT05GSUdfVFlQRSkgewogCQlwb3J0LT50eXBlID0gUE9SVF9NU007Ci0JCW1zbV9yZXF1ZXN0X3BvcnQocG9ydCk7CisJCXJldCA9IG1zbV9yZXF1ZXN0X3BvcnQocG9ydCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm47CiAJfQorCisJaWYgKG1zbV9wb3J0LT5pc191YXJ0ZG0pCisJCWlvd3JpdGUzMihHU0JJX1BST1RPQ09MX1VBUlQsIG1zbV9wb3J0LT5nc2JpX2Jhc2UgKworCQkJICBHU0JJX0NPTlRST0wpOwogfQogCiBzdGF0aWMgaW50IG1zbV92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyKQpAQCAtNTE1LDkgKzY4OSwxMyBAQAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIDA6CiAJCWNsa19lbmFibGUobXNtX3BvcnQtPmNsayk7CisJCWlmICghSVNfRVJSKG1zbV9wb3J0LT5wY2xrKSkKKwkJCWNsa19lbmFibGUobXNtX3BvcnQtPnBjbGspOwogCQlicmVhazsKIAljYXNlIDM6CiAJCWNsa19kaXNhYmxlKG1zbV9wb3J0LT5jbGspOworCQlpZiAoIUlTX0VSUihtc21fcG9ydC0+cGNsaykpCisJCQljbGtfZGlzYWJsZShtc21fcG9ydC0+cGNsayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAibXNtX3NlcmlhbDogVW5rbm93biBQTSBzdGF0ZSAlZFxuIiwgc3RhdGUpOwpAQCAtNTUwLDcgKzcyOCw3IEBACiAJCQkuaW90eXBlID0gVVBJT19NRU0sCiAJCQkub3BzID0gJm1zbV91YXJ0X3BvcHMsCiAJCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5maWZvc2l6ZSA9IDUxMiwKKwkJCS5maWZvc2l6ZSA9IDY0LAogCQkJLmxpbmUgPSAwLAogCQl9LAogCX0sCkBAIC01NTksNyArNzM3LDcgQEAKIAkJCS5pb3R5cGUgPSBVUElPX01FTSwKIAkJCS5vcHMgPSAmbXNtX3VhcnRfcG9wcywKIAkJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GLAotCQkJLmZpZm9zaXplID0gNTEyLAorCQkJLmZpZm9zaXplID0gNjQsCiAJCQkubGluZSA9IDEsCiAJCX0sCiAJfSwKQEAgLTU4NSw5ICs3NjMsMTQgQEAKIAogc3RhdGljIHZvaWQgbXNtX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYykKIHsKKwlzdHJ1Y3QgbXNtX3BvcnQgKm1zbV9wb3J0ID0gVUFSVF9UT19NU00ocG9ydCk7CisKKwlpZiAobXNtX3BvcnQtPmlzX3VhcnRkbSkKKwkJcmVzZXRfZG1fY291bnQocG9ydCk7CisKIAl3aGlsZSAoIShtc21fcmVhZChwb3J0LCBVQVJUX1NSKSAmIFVBUlRfU1JfVFhfUkVBRFkpKQogCQk7Ci0JbXNtX3dyaXRlKHBvcnQsIGMsIFVBUlRfVEYpOworCW1zbV93cml0ZShwb3J0LCBjLCBtc21fcG9ydC0+aXNfdWFydGRtID8gVUFSVERNX1RGIDogVUFSVF9URik7CiB9CiAKIHN0YXRpYyB2b2lkIG1zbV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKQEAgLTYwOSwxMiArNzkyLDE0IEBACiBzdGF0aWMgaW50IF9faW5pdCBtc21fY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgbXNtX3BvcnQgKm1zbV9wb3J0OwogCWludCBiYXVkLCBmbG93LCBiaXRzLCBwYXJpdHk7CiAKIAlpZiAodW5saWtlbHkoY28tPmluZGV4ID49IFVBUlRfTlIgfHwgY28tPmluZGV4IDwgMCkpCiAJCXJldHVybiAtRU5YSU87CiAKIAlwb3J0ID0gZ2V0X3BvcnRfZnJvbV9saW5lKGNvLT5pbmRleCk7CisJbXNtX3BvcnQgPSBVQVJUX1RPX01TTShwb3J0KTsKIAogCWlmICh1bmxpa2VseSghcG9ydC0+bWVtYmFzZSkpCiAJCXJldHVybiAtRU5YSU87CkBAIC02MzgsNiArODIzLDExIEBACiAKIAltc21fcmVzZXQocG9ydCk7CiAKKwlpZiAobXNtX3BvcnQtPmlzX3VhcnRkbSkgeworCQltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUFJPVEVDVElPTl9FTiwgVUFSVF9DUik7CisJCW1zbV93cml0ZShwb3J0LCBVQVJUX0NSX1RYX0VOQUJMRSwgVUFSVF9DUik7CisJfQorCiAJcHJpbnRrKEtFUk5fSU5GTyAibXNtX3NlcmlhbDogY29uc29sZSBzZXR1cCBvbiBwb3J0ICMlZFxuIiwgcG9ydC0+bGluZSk7CiAKIAlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucyhwb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKQEAgLTY4NSwxNCArODc1LDMyIEBACiAJcG9ydC0+ZGV2ID0gJnBkZXYtPmRldjsKIAltc21fcG9ydCA9IFVBUlRfVE9fTVNNKHBvcnQpOwogCi0JbXNtX3BvcnQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVhcnRfY2xrIik7Ci0JaWYgKElTX0VSUihtc21fcG9ydC0+Y2xrKSkKLQkJcmV0dXJuIFBUUl9FUlIobXNtX3BvcnQtPmNsayk7CisJaWYgKHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJnc2JpX3Jlc291cmNlIikpCisJCW1zbV9wb3J0LT5pc191YXJ0ZG0gPSAxOworCWVsc2UKKwkJbXNtX3BvcnQtPmlzX3VhcnRkbSA9IDA7CisKKwlpZiAobXNtX3BvcnQtPmlzX3VhcnRkbSkgeworCQltc21fcG9ydC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZ3NiaV91YXJ0X2NsayIpOworCQltc21fcG9ydC0+cGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImdzYmlfcGNsayIpOworCX0gZWxzZSB7CisJCW1zbV9wb3J0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1YXJ0X2NsayIpOworCQltc21fcG9ydC0+cGNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisJfQorCisJaWYgKHVubGlrZWx5KElTX0VSUihtc21fcG9ydC0+Y2xrKSB8fCAoSVNfRVJSKG1zbV9wb3J0LT5wY2xrKSAmJgorCQkJCQkgICAgICAgbXNtX3BvcnQtPmlzX3VhcnRkbSkpKQorCQkJcmV0dXJuIFBUUl9FUlIobXNtX3BvcnQtPmNsayk7CisKKwlpZiAobXNtX3BvcnQtPmlzX3VhcnRkbSkKKwkJY2xrX3NldF9yYXRlKG1zbV9wb3J0LT5jbGssIDczNzI4MDApOworCiAJcG9ydC0+dWFydGNsayA9IGNsa19nZXRfcmF0ZShtc21fcG9ydC0+Y2xrKTsKIAlwcmludGsoS0VSTl9JTkZPICJ1YXJ0Y2xrID0gJWRcbiIsIHBvcnQtPnVhcnRjbGspOwogCiAKLQlyZXNvdXJjZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVzb3VyY2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLAorCQkJCQkJICAgICAidWFydF9yZXNvdXJjZSIpOwogCWlmICh1bmxpa2VseSghcmVzb3VyY2UpKQogCQlyZXR1cm4gLUVOWElPOwogCXBvcnQtPm1hcGJhc2UgPSByZXNvdXJjZS0+c3RhcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5oIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuaAppbmRleCBmNmNhOWNhLi45YjhkYzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5oCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmgKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgogICogQXV0aG9yOiBSb2JlcnQgTG92ZSA8cmxvdmVAZ29vZ2xlLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKQEAgLTU0LDYgKzU1LDcgQEAKICNkZWZpbmUgVUFSVF9DU1JfMzAwCTB4MjIKIAogI2RlZmluZSBVQVJUX1RGCQkweDAwMEMKKyNkZWZpbmUgVUFSVERNX1RGCTB4MDA3MAogCiAjZGVmaW5lIFVBUlRfQ1IJCQkJMHgwMDEwCiAjZGVmaW5lIFVBUlRfQ1JfQ01EX05VTEwJCSgwIDw8IDQpCkBAIC02NCwxNCArNjYsMTcgQEAKICNkZWZpbmUgVUFSVF9DUl9DTURfU1RBUlRfQlJFQUsJCSg1IDw8IDQpCiAjZGVmaW5lIFVBUlRfQ1JfQ01EX1NUT1BfQlJFQUsJCSg2IDw8IDQpCiAjZGVmaW5lIFVBUlRfQ1JfQ01EX1JFU0VUX0NUUwkJKDcgPDwgNCkKKyNkZWZpbmUgVUFSVF9DUl9DTURfUkVTRVRfU1RBTEVfSU5UCSg4IDw8IDQpCiAjZGVmaW5lIFVBUlRfQ1JfQ01EX1BBQ0tFVF9NT0RFCQkoOSA8PCA0KQogI2RlZmluZSBVQVJUX0NSX0NNRF9NT0RFX1JFU0VUCQkoMTIgPDwgNCkKICNkZWZpbmUgVUFSVF9DUl9DTURfU0VUX1JGUgkJKDEzIDw8IDQpCiAjZGVmaW5lIFVBUlRfQ1JfQ01EX1JFU0VUX1JGUgkJKDE0IDw8IDQpCisjZGVmaW5lIFVBUlRfQ1JfQ01EX1BST1RFQ1RJT05fRU4JKDE2IDw8IDQpCisjZGVmaW5lIFVBUlRfQ1JfQ01EX1NUQUxFX0VWRU5UX0VOQUJMRQkoODAgPDwgNCkKICNkZWZpbmUgVUFSVF9DUl9UWF9ESVNBQkxFCQkoMSA8PCAzKQotI2RlZmluZSBVQVJUX0NSX1RYX0VOQUJMRQkJKDEgPDwgMykKLSNkZWZpbmUgVUFSVF9DUl9SWF9ESVNBQkxFCQkoMSA8PCAzKQotI2RlZmluZSBVQVJUX0NSX1JYX0VOQUJMRQkJKDEgPDwgMykKKyNkZWZpbmUgVUFSVF9DUl9UWF9FTkFCTEUJCSgxIDw8IDIpCisjZGVmaW5lIFVBUlRfQ1JfUlhfRElTQUJMRQkJKDEgPDwgMSkKKyNkZWZpbmUgVUFSVF9DUl9SWF9FTkFCTEUJCSgxIDw8IDApCiAKICNkZWZpbmUgVUFSVF9JTVIJCTB4MDAxNAogI2RlZmluZSBVQVJUX0lNUl9UWExFVgkJKDEgPDwgMCkKQEAgLTExMCw5ICsxMTUsMjAgQEAKICNkZWZpbmUgVUFSVF9TUl9SWF9GVUxMCQkoMSA8PCAxKQogI2RlZmluZSBVQVJUX1NSX1JYX1JFQURZCSgxIDw8IDApCiAKLSNkZWZpbmUgVUFSVF9SRgkJMHgwMDBDCi0jZGVmaW5lIFVBUlRfTUlTUgkweDAwMTAKLSNkZWZpbmUgVUFSVF9JU1IJMHgwMDE0CisjZGVmaW5lIFVBUlRfUkYJCQkweDAwMEMKKyNkZWZpbmUgVUFSVERNX1JGCQkweDAwNzAKKyNkZWZpbmUgVUFSVF9NSVNSCQkweDAwMTAKKyNkZWZpbmUgVUFSVF9JU1IJCTB4MDAxNAorI2RlZmluZSBVQVJUX0lTUl9UWF9SRUFEWQkoMSA8PCA3KQorCisjZGVmaW5lIEdTQklfQ09OVFJPTAkJMHgwCisjZGVmaW5lIEdTQklfUFJPVE9DT0xfQ09ERQkweDMwCisjZGVmaW5lIEdTQklfUFJPVE9DT0xfVUFSVAkweDQwCisjZGVmaW5lIEdTQklfUFJPVE9DT0xfSURMRQkweDAKKworI2RlZmluZSBVQVJURE1fRE1SWAkJMHgzNAorI2RlZmluZSBVQVJURE1fTkNGX1RYCQkweDQwCisjZGVmaW5lIFVBUlRETV9SWF9UT1RBTF9TTkFQCTB4MzgKIAogI2RlZmluZSBVQVJUX1RPX01TTSh1YXJ0X3BvcnQpCSgoc3RydWN0IG1zbV9wb3J0ICopIHVhcnRfcG9ydCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL214cy1hdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL214cy1hdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMDJjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXhzLWF1YXJ0LmMKQEAgLTAsMCArMSw3OTggQEAKKy8qCisgKiBGcmVlc2NhbGUgU1RNUDM3WFgvU1RNUDM3OFggQXBwbGljYXRpb24gVUFSVCBkcml2ZXIKKyAqCisgKiBBdXRob3I6IGRtaXRyeSBwZXJ2dXNoaW4gPGRpbWthQGVtYmVkZGVkYWxsZXkuY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisjZGVmaW5lIE1YU19BVUFSVF9QT1JUUyA1CisKKyNkZWZpbmUgQVVBUlRfQ1RSTDAJCQkweDAwMDAwMDAwCisjZGVmaW5lIEFVQVJUX0NUUkwwX1NFVAkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQVVBUlRfQ1RSTDBfQ0xSCQkJMHgwMDAwMDAwOAorI2RlZmluZSBBVUFSVF9DVFJMMF9UT0cJCQkweDAwMDAwMDBjCisjZGVmaW5lIEFVQVJUX0NUUkwxCQkJMHgwMDAwMDAxMAorI2RlZmluZSBBVUFSVF9DVFJMMV9TRVQJCQkweDAwMDAwMDE0CisjZGVmaW5lIEFVQVJUX0NUUkwxX0NMUgkJCTB4MDAwMDAwMTgKKyNkZWZpbmUgQVVBUlRfQ1RSTDFfVE9HCQkJMHgwMDAwMDAxYworI2RlZmluZSBBVUFSVF9DVFJMMgkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgQVVBUlRfQ1RSTDJfU0VUCQkJMHgwMDAwMDAyNAorI2RlZmluZSBBVUFSVF9DVFJMMl9DTFIJCQkweDAwMDAwMDI4CisjZGVmaW5lIEFVQVJUX0NUUkwyX1RPRwkJCTB4MDAwMDAwMmMKKyNkZWZpbmUgQVVBUlRfTElORUNUUkwJCQkweDAwMDAwMDMwCisjZGVmaW5lIEFVQVJUX0xJTkVDVFJMX1NFVAkJMHgwMDAwMDAzNAorI2RlZmluZSBBVUFSVF9MSU5FQ1RSTF9DTFIJCTB4MDAwMDAwMzgKKyNkZWZpbmUgQVVBUlRfTElORUNUUkxfVE9HCQkweDAwMDAwMDNjCisjZGVmaW5lIEFVQVJUX0xJTkVDVFJMMgkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgQVVBUlRfTElORUNUUkwyX1NFVAkJMHgwMDAwMDA0NAorI2RlZmluZSBBVUFSVF9MSU5FQ1RSTDJfQ0xSCQkweDAwMDAwMDQ4CisjZGVmaW5lIEFVQVJUX0xJTkVDVFJMMl9UT0cJCTB4MDAwMDAwNGMKKyNkZWZpbmUgQVVBUlRfSU5UUgkJCTB4MDAwMDAwNTAKKyNkZWZpbmUgQVVBUlRfSU5UUl9TRVQJCQkweDAwMDAwMDU0CisjZGVmaW5lIEFVQVJUX0lOVFJfQ0xSCQkJMHgwMDAwMDA1OAorI2RlZmluZSBBVUFSVF9JTlRSX1RPRwkJCTB4MDAwMDAwNWMKKyNkZWZpbmUgQVVBUlRfREFUQQkJCTB4MDAwMDAwNjAKKyNkZWZpbmUgQVVBUlRfU1RBVAkJCTB4MDAwMDAwNzAKKyNkZWZpbmUgQVVBUlRfREVCVUcJCQkweDAwMDAwMDgwCisjZGVmaW5lIEFVQVJUX1ZFUlNJT04JCQkweDAwMDAwMDkwCisjZGVmaW5lIEFVQVJUX0FVVE9CQVVECQkJMHgwMDAwMDBhMAorCisjZGVmaW5lIEFVQVJUX0NUUkwwX1NGVFJTVAkJCSgxIDw8IDMxKQorI2RlZmluZSBBVUFSVF9DVFJMMF9DTEtHQVRFCQkJKDEgPDwgMzApCisKKyNkZWZpbmUgQVVBUlRfQ1RSTDJfQ1RTRU4JCQkoMSA8PCAxNSkKKyNkZWZpbmUgQVVBUlRfQ1RSTDJfUlRTCQkJCSgxIDw8IDExKQorI2RlZmluZSBBVUFSVF9DVFJMMl9SWEUJCQkJKDEgPDwgOSkKKyNkZWZpbmUgQVVBUlRfQ1RSTDJfVFhFCQkJCSgxIDw8IDgpCisjZGVmaW5lIEFVQVJUX0NUUkwyX1VBUlRFTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgQVVBUlRfTElORUNUUkxfQkFVRF9ESVZJTlRfU0hJRlQJMTYKKyNkZWZpbmUgQVVBUlRfTElORUNUUkxfQkFVRF9ESVZJTlRfTUFTSwkJMHhmZmZmMDAwMAorI2RlZmluZSBBVUFSVF9MSU5FQ1RSTF9CQVVEX0RJVklOVCh2KQkJKCgodikgJiAweGZmZmYpIDw8IDE2KQorI2RlZmluZSBBVUFSVF9MSU5FQ1RSTF9CQVVEX0RJVkZSQUNfU0hJRlQJOAorI2RlZmluZSBBVUFSVF9MSU5FQ1RSTF9CQVVEX0RJVkZSQUNfTUFTSwkweDAwMDAzZjAwCisjZGVmaW5lIEFVQVJUX0xJTkVDVFJMX0JBVURfRElWRlJBQyh2KQkJKCgodikgJiAweDNmKSA8PCA4KQorI2RlZmluZSBBVUFSVF9MSU5FQ1RSTF9XTEVOX01BU0sJCTB4MDAwMDAwNjAKKyNkZWZpbmUgQVVBUlRfTElORUNUUkxfV0xFTih2KQkJCSgoKHYpICYgMHgzKSA8PCA1KQorI2RlZmluZSBBVUFSVF9MSU5FQ1RSTF9GRU4JCQkoMSA8PCA0KQorI2RlZmluZSBBVUFSVF9MSU5FQ1RSTF9TVFAyCQkJKDEgPDwgMykKKyNkZWZpbmUgQVVBUlRfTElORUNUUkxfRVBTCQkJKDEgPDwgMikKKyNkZWZpbmUgQVVBUlRfTElORUNUUkxfUEVOCQkJKDEgPDwgMSkKKyNkZWZpbmUgQVVBUlRfTElORUNUUkxfQlJLCQkJKDEgPDwgMCkKKworI2RlZmluZSBBVUFSVF9JTlRSX1JUSUVOCQkJKDEgPDwgMjIpCisjZGVmaW5lIEFVQVJUX0lOVFJfVFhJRU4JCQkoMSA8PCAyMSkKKyNkZWZpbmUgQVVBUlRfSU5UUl9SWElFTgkJCSgxIDw8IDIwKQorI2RlZmluZSBBVUFSVF9JTlRSX0NUU01JRU4JCQkoMSA8PCAxNykKKyNkZWZpbmUgQVVBUlRfSU5UUl9SVElTCQkJCSgxIDw8IDYpCisjZGVmaW5lIEFVQVJUX0lOVFJfVFhJUwkJCQkoMSA8PCA1KQorI2RlZmluZSBBVUFSVF9JTlRSX1JYSVMJCQkJKDEgPDwgNCkKKyNkZWZpbmUgQVVBUlRfSU5UUl9DVFNNSVMJCQkoMSA8PCAxKQorCisjZGVmaW5lIEFVQVJUX1NUQVRfQlVTWQkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgQVVBUlRfU1RBVF9DVFMJCQkJKDEgPDwgMjgpCisjZGVmaW5lIEFVQVJUX1NUQVRfVFhGRQkJCQkoMSA8PCAyNykKKyNkZWZpbmUgQVVBUlRfU1RBVF9UWEZGCQkJCSgxIDw8IDI1KQorI2RlZmluZSBBVUFSVF9TVEFUX1JYRkUJCQkJKDEgPDwgMjQpCisjZGVmaW5lIEFVQVJUX1NUQVRfT0VSUgkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgQVVBUlRfU1RBVF9CRVJSCQkJCSgxIDw8IDE4KQorI2RlZmluZSBBVUFSVF9TVEFUX1BFUlIJCQkJKDEgPDwgMTcpCisjZGVmaW5lIEFVQVJUX1NUQVRfRkVSUgkJCQkoMSA8PCAxNikKKworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBhdWFydF9kcml2ZXI7CisKK3N0cnVjdCBteHNfYXVhcnRfcG9ydCB7CisJc3RydWN0IHVhcnRfcG9ydCBwb3J0OworCisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGludCBjdHJsOworCisJdW5zaWduZWQgaW50IGlycTsKKworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cit9OworCitzdGF0aWMgdm9pZCBteHNfYXVhcnRfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICp1KTsKKworI2RlZmluZSB0b19hdWFydF9wb3J0KHUpIGNvbnRhaW5lcl9vZih1LCBzdHJ1Y3QgbXhzX2F1YXJ0X3BvcnQsIHBvcnQpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteHNfYXVhcnRfdHhfY2hhcnMoc3RydWN0IG14c19hdWFydF9wb3J0ICpzKQoreworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzLT5wb3J0LnN0YXRlLT54bWl0OworCisJd2hpbGUgKCEocmVhZGwocy0+cG9ydC5tZW1iYXNlICsgQVVBUlRfU1RBVCkgJgorCQkgQVVBUlRfU1RBVF9UWEZGKSkgeworCQlpZiAocy0+cG9ydC54X2NoYXIpIHsKKwkJCXMtPnBvcnQuaWNvdW50LnR4Kys7CisJCQl3cml0ZWwocy0+cG9ydC54X2NoYXIsCisJCQkJICAgICBzLT5wb3J0Lm1lbWJhc2UgKyBBVUFSVF9EQVRBKTsKKwkJCXMtPnBvcnQueF9jaGFyID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghdWFydF9jaXJjX2VtcHR5KHhtaXQpICYmICF1YXJ0X3R4X3N0b3BwZWQoJnMtPnBvcnQpKSB7CisJCQlzLT5wb3J0Lmljb3VudC50eCsrOworCQkJd3JpdGVsKHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSwKKwkJCQkgICAgIHMtPnBvcnQubWVtYmFzZSArIEFVQVJUX0RBVEEpOworCQkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSA8IFdBS0VVUF9DSEFSUykKKwkJCQl1YXJ0X3dyaXRlX3dha2V1cCgmcy0+cG9ydCk7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorCWlmICh1YXJ0X2NpcmNfZW1wdHkoJihzLT5wb3J0LnN0YXRlLT54bWl0KSkpCisJCXdyaXRlbChBVUFSVF9JTlRSX1RYSUVOLAorCQkJICAgICBzLT5wb3J0Lm1lbWJhc2UgKyBBVUFSVF9JTlRSX0NMUik7CisJZWxzZQorCQl3cml0ZWwoQVVBUlRfSU5UUl9UWElFTiwKKwkJCSAgICAgcy0+cG9ydC5tZW1iYXNlICsgQVVBUlRfSU5UUl9TRVQpOworCisJaWYgKHVhcnRfdHhfc3RvcHBlZCgmcy0+cG9ydCkpCisJCW14c19hdWFydF9zdG9wX3R4KCZzLT5wb3J0KTsKK30KKworc3RhdGljIHZvaWQgbXhzX2F1YXJ0X3J4X2NoYXIoc3RydWN0IG14c19hdWFydF9wb3J0ICpzKQoreworCWludCBmbGFnOworCXUzMiBzdGF0OworCXU4IGM7CisKKwljID0gcmVhZGwocy0+cG9ydC5tZW1iYXNlICsgQVVBUlRfREFUQSk7CisJc3RhdCA9IHJlYWRsKHMtPnBvcnQubWVtYmFzZSArIEFVQVJUX1NUQVQpOworCisJZmxhZyA9IFRUWV9OT1JNQUw7CisJcy0+cG9ydC5pY291bnQucngrKzsKKworCWlmIChzdGF0ICYgQVVBUlRfU1RBVF9CRVJSKSB7CisJCXMtPnBvcnQuaWNvdW50LmJyaysrOworCQlpZiAodWFydF9oYW5kbGVfYnJlYWsoJnMtPnBvcnQpKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChzdGF0ICYgQVVBUlRfU1RBVF9QRVJSKSB7CisJCXMtPnBvcnQuaWNvdW50LnBhcml0eSsrOworCX0gZWxzZSBpZiAoc3RhdCAmIEFVQVJUX1NUQVRfRkVSUikgeworCQlzLT5wb3J0Lmljb3VudC5mcmFtZSsrOworCX0KKworCS8qCisJICogTWFzayBvZmYgY29uZGl0aW9ucyB3aGljaCBzaG91bGQgYmUgaW5nb3JlZC4KKwkgKi8KKwlzdGF0ICY9IHMtPnBvcnQucmVhZF9zdGF0dXNfbWFzazsKKworCWlmIChzdGF0ICYgQVVBUlRfU1RBVF9CRVJSKSB7CisJCWZsYWcgPSBUVFlfQlJFQUs7CisJfSBlbHNlIGlmIChzdGF0ICYgQVVBUlRfU1RBVF9QRVJSKQorCQlmbGFnID0gVFRZX1BBUklUWTsKKwllbHNlIGlmIChzdGF0ICYgQVVBUlRfU1RBVF9GRVJSKQorCQlmbGFnID0gVFRZX0ZSQU1FOworCisJaWYgKHN0YXQgJiBBVUFSVF9TVEFUX09FUlIpCisJCXMtPnBvcnQuaWNvdW50Lm92ZXJydW4rKzsKKworCWlmICh1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKCZzLT5wb3J0LCBjKSkKKwkJZ290byBvdXQ7CisKKwl1YXJ0X2luc2VydF9jaGFyKCZzLT5wb3J0LCBzdGF0LCBBVUFSVF9TVEFUX09FUlIsIGMsIGZsYWcpOworb3V0OgorCXdyaXRlbChzdGF0LCBzLT5wb3J0Lm1lbWJhc2UgKyBBVUFSVF9TVEFUKTsKK30KKworc3RhdGljIHZvaWQgbXhzX2F1YXJ0X3J4X2NoYXJzKHN0cnVjdCBteHNfYXVhcnRfcG9ydCAqcykKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcy0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CisJdTMyIHN0YXQgPSAwOworCisJZm9yICg7OykgeworCQlzdGF0ID0gcmVhZGwocy0+cG9ydC5tZW1iYXNlICsgQVVBUlRfU1RBVCk7CisJCWlmIChzdGF0ICYgQVVBUlRfU1RBVF9SWEZFKQorCQkJYnJlYWs7CisJCW14c19hdWFydF9yeF9jaGFyKHMpOworCX0KKworCXdyaXRlbChzdGF0LCBzLT5wb3J0Lm1lbWJhc2UgKyBBVUFSVF9TVEFUKTsKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworfQorCitzdGF0aWMgaW50IG14c19hdWFydF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqdSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteHNfYXVhcnRfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqdSwKKwkJCQkgICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKK3sKKwlpZiAodS0+dHlwZSAhPSBQT1JUX1VOS05PV04gJiYgdS0+dHlwZSAhPSBQT1JUX0lNWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG14c19hdWFydF9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICp1LCBpbnQgZmxhZ3MpCit7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpteHNfYXVhcnRfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICp1KQoreworCXN0cnVjdCBteHNfYXVhcnRfcG9ydCAqcyA9IHRvX2F1YXJ0X3BvcnQodSk7CisKKwlyZXR1cm4gZGV2X25hbWUocy0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQgbXhzX2F1YXJ0X3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICp1KQoreworfQorCitzdGF0aWMgdm9pZCBteHNfYXVhcnRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnUsIHVuc2lnbmVkIG1jdHJsKQoreworCXN0cnVjdCBteHNfYXVhcnRfcG9ydCAqcyA9IHRvX2F1YXJ0X3BvcnQodSk7CisKKwl1MzIgY3RybCA9IHJlYWRsKHUtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMik7CisKKwljdHJsICY9IH5BVUFSVF9DVFJMMl9SVFM7CisJaWYgKG1jdHJsICYgVElPQ01fUlRTKQorCQljdHJsIHw9IEFVQVJUX0NUUkwyX1JUUzsKKwlzLT5jdHJsID0gbWN0cmw7CisJd3JpdGVsKGN0cmwsIHUtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMik7Cit9CisKK3N0YXRpYyB1MzIgbXhzX2F1YXJ0X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICp1KQoreworCXN0cnVjdCBteHNfYXVhcnRfcG9ydCAqcyA9IHRvX2F1YXJ0X3BvcnQodSk7CisJdTMyIHN0YXQgPSByZWFkbCh1LT5tZW1iYXNlICsgQVVBUlRfU1RBVCk7CisJaW50IGN0cmwyID0gcmVhZGwodS0+bWVtYmFzZSArIEFVQVJUX0NUUkwyKTsKKwl1MzIgbWN0cmwgPSBzLT5jdHJsOworCisJbWN0cmwgJj0gflRJT0NNX0NUUzsKKwlpZiAoc3RhdCAmIEFVQVJUX1NUQVRfQ1RTKQorCQltY3RybCB8PSBUSU9DTV9DVFM7CisKKwlpZiAoY3RybDIgJiBBVUFSVF9DVFJMMl9SVFMpCisJCW1jdHJsIHw9IFRJT0NNX1JUUzsKKworCXJldHVybiBtY3RybDsKK30KKworc3RhdGljIHZvaWQgbXhzX2F1YXJ0X3NldHRlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqdSwKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKK3sKKwl1MzIgYm0sIGN0cmwsIGN0cmwyLCBkaXY7CisJdW5zaWduZWQgaW50IGNmbGFnLCBiYXVkOworCisJY2ZsYWcgPSB0ZXJtaW9zLT5jX2NmbGFnOworCisJY3RybCA9IEFVQVJUX0xJTkVDVFJMX0ZFTjsKKwljdHJsMiA9IHJlYWRsKHUtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMik7CisKKwkvKiBieXRlIHNpemUgKi8KKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJYm0gPSAwOworCQlicmVhazsKKwljYXNlIENTNjoKKwkJYm0gPSAxOworCQlicmVhazsKKwljYXNlIENTNzoKKwkJYm0gPSAyOworCQlicmVhazsKKwljYXNlIENTODoKKwkJYm0gPSAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJY3RybCB8PSBBVUFSVF9MSU5FQ1RSTF9XTEVOKGJtKTsKKworCS8qIHBhcml0eSAqLworCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQljdHJsIHw9IEFVQVJUX0xJTkVDVFJMX1BFTjsKKwkJaWYgKChjZmxhZyAmIFBBUk9ERCkgPT0gMCkKKwkJCWN0cmwgfD0gQVVBUlRfTElORUNUUkxfRVBTOworCX0KKworCXUtPnJlYWRfc3RhdHVzX21hc2sgPSAwOworCisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJTlBDSykKKwkJdS0+cmVhZF9zdGF0dXNfbWFzayB8PSBBVUFSVF9TVEFUX1BFUlI7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiAoQlJLSU5UIHwgUEFSTVJLKSkKKwkJdS0+cmVhZF9zdGF0dXNfbWFzayB8PSBBVUFSVF9TVEFUX0JFUlI7CisKKwkvKgorCSAqIENoYXJhY3RlcnMgdG8gaWdub3JlCisJICovCisJdS0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTlBBUikKKwkJdS0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEFVQVJUX1NUQVRfUEVSUjsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTkJSSykgeworCQl1LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gQVVBUlRfU1RBVF9CRVJSOworCQkvKgorCQkgKiBJZiB3ZSdyZSBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsCisJCSAqIGlnbm9yZSBvdmVycnVucyB0b28gKGZvciByZWFsIHJhdyBzdXBwb3J0KS4KKwkJICovCisJCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQkJdS0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEFVQVJUX1NUQVRfT0VSUjsKKwl9CisKKwkvKgorCSAqIGlnbm9yZSBhbGwgY2hhcmFjdGVycyBpZiBDUkVBRCBpcyBub3Qgc2V0CisJICovCisJaWYgKGNmbGFnICYgQ1JFQUQpCisJCWN0cmwyIHw9IEFVQVJUX0NUUkwyX1JYRTsKKwllbHNlCisJCWN0cmwyICY9IH5BVUFSVF9DVFJMMl9SWEU7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBzdG9wIGJpdHMgcmVxdWVzdGVkICovCisJaWYgKGNmbGFnICYgQ1NUT1BCKQorCQljdHJsIHw9IEFVQVJUX0xJTkVDVFJMX1NUUDI7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQljdHJsMiB8PSBBVUFSVF9DVFJMMl9DVFNFTjsKKwllbHNlCisJCWN0cmwyICY9IH5BVUFSVF9DVFJMMl9DVFNFTjsKKworCS8qIHNldCBiYXVkIHJhdGUgKi8KKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHUsIHRlcm1pb3MsIG9sZCwgMCwgdS0+dWFydGNsayk7CisJZGl2ID0gdS0+dWFydGNsayAqIDMyIC8gYmF1ZDsKKwljdHJsIHw9IEFVQVJUX0xJTkVDVFJMX0JBVURfRElWRlJBQyhkaXYgJiAweDNGKTsKKwljdHJsIHw9IEFVQVJUX0xJTkVDVFJMX0JBVURfRElWSU5UKGRpdiA+PiA2KTsKKworCXdyaXRlbChjdHJsLCB1LT5tZW1iYXNlICsgQVVBUlRfTElORUNUUkwpOworCXdyaXRlbChjdHJsMiwgdS0+bWVtYmFzZSArIEFVQVJUX0NUUkwyKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG14c19hdWFydF9pcnFfaGFuZGxlKGludCBpcnEsIHZvaWQgKmNvbnRleHQpCit7CisJdTMyIGlzdGF0dXMsIGlzdGF0OworCXN0cnVjdCBteHNfYXVhcnRfcG9ydCAqcyA9IGNvbnRleHQ7CisJdTMyIHN0YXQgPSByZWFkbChzLT5wb3J0Lm1lbWJhc2UgKyBBVUFSVF9TVEFUKTsKKworCWlzdGF0dXMgPSBpc3RhdCA9IHJlYWRsKHMtPnBvcnQubWVtYmFzZSArIEFVQVJUX0lOVFIpOworCisJaWYgKGlzdGF0ICYgQVVBUlRfSU5UUl9DVFNNSVMpIHsKKwkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmcy0+cG9ydCwgc3RhdCAmIEFVQVJUX1NUQVRfQ1RTKTsKKwkJd3JpdGVsKEFVQVJUX0lOVFJfQ1RTTUlTLAorCQkJCXMtPnBvcnQubWVtYmFzZSArIEFVQVJUX0lOVFJfQ0xSKTsKKwkJaXN0YXQgJj0gfkFVQVJUX0lOVFJfQ1RTTUlTOworCX0KKworCWlmIChpc3RhdCAmIChBVUFSVF9JTlRSX1JUSVMgfCBBVUFSVF9JTlRSX1JYSVMpKSB7CisJCW14c19hdWFydF9yeF9jaGFycyhzKTsKKwkJaXN0YXQgJj0gfihBVUFSVF9JTlRSX1JUSVMgfCBBVUFSVF9JTlRSX1JYSVMpOworCX0KKworCWlmIChpc3RhdCAmIEFVQVJUX0lOVFJfVFhJUykgeworCQlteHNfYXVhcnRfdHhfY2hhcnMocyk7CisJCWlzdGF0ICY9IH5BVUFSVF9JTlRSX1RYSVM7CisJfQorCisJd3JpdGVsKGlzdGF0dXMgJiAoQVVBUlRfSU5UUl9SVElTCisJCXwgQVVBUlRfSU5UUl9UWElTCisJCXwgQVVBUlRfSU5UUl9SWElTCisJCXwgQVVBUlRfSU5UUl9DVFNNSVMpLAorCQkJcy0+cG9ydC5tZW1iYXNlICsgQVVBUlRfSU5UUl9DTFIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBteHNfYXVhcnRfcmVzZXQoc3RydWN0IHVhcnRfcG9ydCAqdSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJd3JpdGVsKEFVQVJUX0NUUkwwX1NGVFJTVCwgdS0+bWVtYmFzZSArIEFVQVJUX0NUUkwwX0NMUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworCQlyZWcgPSByZWFkbCh1LT5tZW1iYXNlICsgQVVBUlRfQ1RSTDApOworCQlpZiAoIShyZWcgJiBBVUFSVF9DVFJMMF9TRlRSU1QpKQorCQkJYnJlYWs7CisJCXVkZWxheSgzKTsKKwl9CisJd3JpdGVsKEFVQVJUX0NUUkwwX0NMS0dBVEUsIHUtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMF9DTFIpOworfQorCitzdGF0aWMgaW50IG14c19hdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnUpCit7CisJc3RydWN0IG14c19hdWFydF9wb3J0ICpzID0gdG9fYXVhcnRfcG9ydCh1KTsKKworCWNsa19lbmFibGUocy0+Y2xrKTsKKworCXdyaXRlbChBVUFSVF9DVFJMMF9DTEtHQVRFLCB1LT5tZW1iYXNlICsgQVVBUlRfQ1RSTDBfQ0xSKTsKKworCXdyaXRlbChBVUFSVF9DVFJMMl9VQVJURU4sIHUtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMl9TRVQpOworCisJd3JpdGVsKEFVQVJUX0lOVFJfUlhJRU4gfCBBVUFSVF9JTlRSX1JUSUVOIHwgQVVBUlRfSU5UUl9DVFNNSUVOLAorCQkJdS0+bWVtYmFzZSArIEFVQVJUX0lOVFIpOworCisJLyoKKwkgKiBFbmFibGUgZmlmbyBzbyBhbGwgZm91ciBieXRlcyBvZiBhIERNQSB3b3JkIGFyZSB3cml0dGVuIHRvCisJICogb3V0cHV0IChvdGhlcndpc2UsIG9ubHkgdGhlIExTQiBpcyB3cml0dGVuLCBpZS4gMSBpbiA0IGJ5dGVzKQorCSAqLworCXdyaXRlbChBVUFSVF9MSU5FQ1RSTF9GRU4sIHUtPm1lbWJhc2UgKyBBVUFSVF9MSU5FQ1RSTF9TRVQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG14c19hdWFydF9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICp1KQoreworCXN0cnVjdCBteHNfYXVhcnRfcG9ydCAqcyA9IHRvX2F1YXJ0X3BvcnQodSk7CisKKwl3cml0ZWwoQVVBUlRfQ1RSTDJfVUFSVEVOLCB1LT5tZW1iYXNlICsgQVVBUlRfQ1RSTDJfQ0xSKTsKKworCXdyaXRlbChBVUFSVF9DVFJMMF9DTEtHQVRFLCB1LT5tZW1iYXNlICsgQVVBUlRfQ1RSTDBfU0VUKTsKKworCXdyaXRlbChBVUFSVF9JTlRSX1JYSUVOIHwgQVVBUlRfSU5UUl9SVElFTiB8IEFVQVJUX0lOVFJfQ1RTTUlFTiwKKwkJCXUtPm1lbWJhc2UgKyBBVUFSVF9JTlRSX0NMUik7CisKKwljbGtfZGlzYWJsZShzLT5jbGspOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG14c19hdWFydF90eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICp1KQoreworCWlmIChyZWFkbCh1LT5tZW1iYXNlICsgQVVBUlRfU1RBVCkgJiBBVUFSVF9TVEFUX1RYRkUpCisJCXJldHVybiBUSU9DU0VSX1RFTVQ7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXhzX2F1YXJ0X3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnUpCit7CisJc3RydWN0IG14c19hdWFydF9wb3J0ICpzID0gdG9fYXVhcnRfcG9ydCh1KTsKKworCS8qIGVuYWJsZSB0cmFuc21pdHRlciAqLworCXdyaXRlbChBVUFSVF9DVFJMMl9UWEUsIHUtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMl9TRVQpOworCisJbXhzX2F1YXJ0X3R4X2NoYXJzKHMpOworfQorCitzdGF0aWMgdm9pZCBteHNfYXVhcnRfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICp1KQoreworCXdyaXRlbChBVUFSVF9DVFJMMl9UWEUsIHUtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMl9DTFIpOworfQorCitzdGF0aWMgdm9pZCBteHNfYXVhcnRfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICp1KQoreworCXdyaXRlbChBVUFSVF9DVFJMMl9SWEUsIHUtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMl9DTFIpOworfQorCitzdGF0aWMgdm9pZCBteHNfYXVhcnRfYnJlYWtfY3RsKHN0cnVjdCB1YXJ0X3BvcnQgKnUsIGludCBjdGwpCit7CisJaWYgKGN0bCkKKwkJd3JpdGVsKEFVQVJUX0xJTkVDVFJMX0JSSywKKwkJCSAgICAgdS0+bWVtYmFzZSArIEFVQVJUX0xJTkVDVFJMX1NFVCk7CisJZWxzZQorCQl3cml0ZWwoQVVBUlRfTElORUNUUkxfQlJLLAorCQkJICAgICB1LT5tZW1iYXNlICsgQVVBUlRfTElORUNUUkxfQ0xSKTsKK30KKworc3RhdGljIHZvaWQgbXhzX2F1YXJ0X2VuYWJsZV9tcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCS8qIGp1c3QgZW1wdHkgKi8KK30KKworc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBteHNfYXVhcnRfb3BzID0geworCS50eF9lbXB0eSAgICAgICA9IG14c19hdWFydF90eF9lbXB0eSwKKwkuc3RhcnRfdHggICAgICAgPSBteHNfYXVhcnRfc3RhcnRfdHgsCisJLnN0b3BfdHgJPSBteHNfYXVhcnRfc3RvcF90eCwKKwkuc3RvcF9yeAk9IG14c19hdWFydF9zdG9wX3J4LAorCS5lbmFibGVfbXMgICAgICA9IG14c19hdWFydF9lbmFibGVfbXMsCisJLmJyZWFrX2N0bCAgICAgID0gbXhzX2F1YXJ0X2JyZWFrX2N0bCwKKwkuc2V0X21jdHJsCT0gbXhzX2F1YXJ0X3NldF9tY3RybCwKKwkuZ2V0X21jdHJsICAgICAgPSBteHNfYXVhcnRfZ2V0X21jdHJsLAorCS5zdGFydHVwCT0gbXhzX2F1YXJ0X3N0YXJ0dXAsCisJLnNodXRkb3duICAgICAgID0gbXhzX2F1YXJ0X3NodXRkb3duLAorCS5zZXRfdGVybWlvcyAgICA9IG14c19hdWFydF9zZXR0ZXJtaW9zLAorCS50eXBlCSAgIAk9IG14c19hdWFydF90eXBlLAorCS5yZWxlYXNlX3BvcnQgICA9IG14c19hdWFydF9yZWxlYXNlX3BvcnQsCisJLnJlcXVlc3RfcG9ydCAgID0gbXhzX2F1YXJ0X3JlcXVlc3RfcG9ydCwKKwkuY29uZmlnX3BvcnQgICAgPSBteHNfYXVhcnRfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0ICAgID0gbXhzX2F1YXJ0X3ZlcmlmeV9wb3J0LAorfTsKKworc3RhdGljIHN0cnVjdCBteHNfYXVhcnRfcG9ydCAqYXVhcnRfcG9ydFtNWFNfQVVBUlRfUE9SVFNdOworCisjaWZkZWYgQ09ORklHX1NFUklBTF9NWFNfQVVBUlRfQ09OU09MRQorc3RhdGljIHZvaWQgbXhzX2F1YXJ0X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJdW5zaWduZWQgaW50IHRvID0gMTAwMDsKKworCXdoaWxlIChyZWFkbChwb3J0LT5tZW1iYXNlICsgQVVBUlRfU1RBVCkgJiBBVUFSVF9TVEFUX1RYRkYpIHsKKwkJaWYgKCF0by0tKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9CisKKwl3cml0ZWwoY2gsIHBvcnQtPm1lbWJhc2UgKyBBVUFSVF9EQVRBKTsKK30KKworc3RhdGljIHZvaWQKK2F1YXJ0X2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgbXhzX2F1YXJ0X3BvcnQgKnM7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBpbnQgb2xkX2N0cmwwLCBvbGRfY3RybDI7CisJdW5zaWduZWQgaW50IHRvID0gMTAwMDsKKworCWlmIChjby0+aW5kZXggPglNWFNfQVVBUlRfUE9SVFMgfHwgY28tPmluZGV4IDwgMCkKKwkJcmV0dXJuOworCisJcyA9IGF1YXJ0X3BvcnRbY28tPmluZGV4XTsKKwlwb3J0ID0gJnMtPnBvcnQ7CisKKwljbGtfZW5hYmxlKHMtPmNsayk7CisKKwkvKiBGaXJzdCBzYXZlIHRoZSBDUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMgKi8KKwlvbGRfY3RybDIgPSByZWFkbChwb3J0LT5tZW1iYXNlICsgQVVBUlRfQ1RSTDIpOworCW9sZF9jdHJsMCA9IHJlYWRsKHBvcnQtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMCk7CisKKwl3cml0ZWwoQVVBUlRfQ1RSTDBfQ0xLR0FURSwKKwkJICAgICBwb3J0LT5tZW1iYXNlICsgQVVBUlRfQ1RSTDBfQ0xSKTsKKwl3cml0ZWwoQVVBUlRfQ1RSTDJfVUFSVEVOIHwgQVVBUlRfQ1RSTDJfVFhFLAorCQkgICAgIHBvcnQtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMl9TRVQpOworCisJdWFydF9jb25zb2xlX3dyaXRlKHBvcnQsIHN0ciwgY291bnQsIG14c19hdWFydF9jb25zb2xlX3B1dGNoYXIpOworCisJLyoKKwkgKiBGaW5hbGx5LCB3YWl0IGZvciB0cmFuc21pdHRlciB0byBiZWNvbWUgZW1wdHkKKwkgKiBhbmQgcmVzdG9yZSB0aGUgVENSCisJICovCisJd2hpbGUgKHJlYWRsKHBvcnQtPm1lbWJhc2UgKyBBVUFSVF9TVEFUKSAmIEFVQVJUX1NUQVRfQlVTWSkgeworCQlpZiAoIXRvLS0pCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCXdyaXRlbChvbGRfY3RybDAsIHBvcnQtPm1lbWJhc2UgKyBBVUFSVF9DVFJMMCk7CisJd3JpdGVsKG9sZF9jdHJsMiwgcG9ydC0+bWVtYmFzZSArIEFVQVJUX0NUUkwyKTsKKworCWNsa19kaXNhYmxlKHMtPmNsayk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorYXVhcnRfY29uc29sZV9nZXRfb3B0aW9ucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgKmJhdWQsCisJCQkgIGludCAqcGFyaXR5LCBpbnQgKmJpdHMpCit7CisJdW5zaWduZWQgaW50IGxjcl9oLCBxdW90OworCisJaWYgKCEocmVhZGwocG9ydC0+bWVtYmFzZSArIEFVQVJUX0NUUkwyKSAmIEFVQVJUX0NUUkwyX1VBUlRFTikpCisJCXJldHVybjsKKworCWxjcl9oID0gcmVhZGwocG9ydC0+bWVtYmFzZSArIEFVQVJUX0xJTkVDVFJMKTsKKworCSpwYXJpdHkgPSAnbic7CisJaWYgKGxjcl9oICYgQVVBUlRfTElORUNUUkxfUEVOKSB7CisJCWlmIChsY3JfaCAmIEFVQVJUX0xJTkVDVFJMX0VQUykKKwkJCSpwYXJpdHkgPSAnZSc7CisJCWVsc2UKKwkJCSpwYXJpdHkgPSAnbyc7CisJfQorCisJaWYgKChsY3JfaCAmIEFVQVJUX0xJTkVDVFJMX1dMRU5fTUFTSykgPT0gQVVBUlRfTElORUNUUkxfV0xFTigyKSkKKwkJKmJpdHMgPSA3OworCWVsc2UKKwkJKmJpdHMgPSA4OworCisJcXVvdCA9ICgocmVhZGwocG9ydC0+bWVtYmFzZSArIEFVQVJUX0xJTkVDVFJMKQorCQkJJiBBVUFSVF9MSU5FQ1RSTF9CQVVEX0RJVklOVF9NQVNLKSkKKwkJCSAgICA+PiAoQVVBUlRfTElORUNUUkxfQkFVRF9ESVZJTlRfU0hJRlQgLSA2KTsKKwlxdW90IHw9ICgocmVhZGwocG9ydC0+bWVtYmFzZSArIEFVQVJUX0xJTkVDVFJMKQorCQkJJiBBVUFSVF9MSU5FQ1RSTF9CQVVEX0RJVkZSQUNfTUFTSykpCisJCQkJPj4gQVVBUlRfTElORUNUUkxfQkFVRF9ESVZGUkFDX1NISUZUOworCWlmIChxdW90ID09IDApCisJCXF1b3QgPSAxOworCisJKmJhdWQgPSAocG9ydC0+dWFydGNsayA8PCAyKSAvIHF1b3Q7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CithdWFydF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgbXhzX2F1YXJ0X3BvcnQgKnM7CisJaW50IGJhdWQgPSA5NjAwOworCWludCBiaXRzID0gODsKKwlpbnQgcGFyaXR5ID0gJ24nOworCWludCBmbG93ID0gJ24nOworCWludCByZXQ7CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBzcGVjaWZpZWQsIGFuZAorCSAqIGlmIHNvLCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcG9ydCB0aGF0IGRvZXMgaGF2ZQorCSAqIGNvbnNvbGUgc3VwcG9ydC4KKwkgKi8KKwlpZiAoY28tPmluZGV4ID09IC0xIHx8IGNvLT5pbmRleCA+PSBBUlJBWV9TSVpFKGF1YXJ0X3BvcnQpKQorCQljby0+aW5kZXggPSAwOworCXMgPSBhdWFydF9wb3J0W2NvLT5pbmRleF07CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNsa19lbmFibGUocy0+Y2xrKTsKKworCWlmIChvcHRpb25zKQorCQl1YXJ0X3BhcnNlX29wdGlvbnMob3B0aW9ucywgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7CisJZWxzZQorCQlhdWFydF9jb25zb2xlX2dldF9vcHRpb25zKCZzLT5wb3J0LCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMpOworCisJcmV0ID0gdWFydF9zZXRfb3B0aW9ucygmcy0+cG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7CisKKwljbGtfZGlzYWJsZShzLT5jbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIGF1YXJ0X2NvbnNvbGUgPSB7CisJLm5hbWUJCT0gInR0eUFQUCIsCisJLndyaXRlCQk9IGF1YXJ0X2NvbnNvbGVfd3JpdGUsCisJLmRldmljZQkJPSB1YXJ0X2NvbnNvbGVfZGV2aWNlLAorCS5zZXR1cAkJPSBhdWFydF9jb25zb2xlX3NldHVwLAorCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4CQk9IC0xLAorCS5kYXRhCQk9ICZhdWFydF9kcml2ZXIsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYXVhcnRfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZHJpdmVyX25hbWUJPSAidHR5QVBQIiwKKwkuZGV2X25hbWUJPSAidHR5QVBQIiwKKwkubWFqb3IJCT0gMCwKKwkubWlub3IJCT0gMCwKKwkubnIJCT0gTVhTX0FVQVJUX1BPUlRTLAorI2lmZGVmIENPTkZJR19TRVJJQUxfTVhTX0FVQVJUX0NPTlNPTEUKKwkuY29ucyA9CQkmYXVhcnRfY29uc29sZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbXhzX2F1YXJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG14c19hdWFydF9wb3J0ICpzOworCXUzMiB2ZXJzaW9uOworCWludCByZXQgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKworCXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXhzX2F1YXJ0X3BvcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcy0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHMtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihzLT5jbGspOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcikgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0X2ZyZWVfY2xrOworCX0KKworCXMtPnBvcnQubWFwYmFzZSA9IHItPnN0YXJ0OworCXMtPnBvcnQubWVtYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCXMtPnBvcnQub3BzID0gJm14c19hdWFydF9vcHM7CisJcy0+cG9ydC5pb3R5cGUgPSBVUElPX01FTTsKKwlzLT5wb3J0LmxpbmUgPSBwZGV2LT5pZCA8IDAgPyAwIDogcGRldi0+aWQ7CisJcy0+cG9ydC5maWZvc2l6ZSA9IDE2OworCXMtPnBvcnQudWFydGNsayA9IGNsa19nZXRfcmF0ZShzLT5jbGspOworCXMtPnBvcnQudHlwZSA9IFBPUlRfSU1YOworCXMtPnBvcnQuZGV2ID0gcy0+ZGV2ID0gZ2V0X2RldmljZSgmcGRldi0+ZGV2KTsKKworCXMtPmZsYWdzID0gMDsKKwlzLT5jdHJsID0gMDsKKworCXMtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJcy0+cG9ydC5pcnEgPSBzLT5pcnE7CisJcmV0ID0gcmVxdWVzdF9pcnEocy0+aXJxLCBteHNfYXVhcnRfaXJxX2hhbmRsZSwgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIHMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfY2xrOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcyk7CisKKwlhdWFydF9wb3J0W3BkZXYtPmlkXSA9IHM7CisKKwlteHNfYXVhcnRfcmVzZXQoJnMtPnBvcnQpOworCisJcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJmF1YXJ0X2RyaXZlciwgJnMtPnBvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCisJdmVyc2lvbiA9IHJlYWRsKHMtPnBvcnQubWVtYmFzZSArIEFVQVJUX1ZFUlNJT04pOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJGb3VuZCBBUFBVQVJUICVkLiVkLiVkXG4iLAorCSAgICAgICAodmVyc2lvbiA+PiAyNCkgJiAweGZmLAorCSAgICAgICAodmVyc2lvbiA+PiAxNikgJiAweGZmLCB2ZXJzaW9uICYgMHhmZmZmKTsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9pcnE6CisJYXVhcnRfcG9ydFtwZGV2LT5pZF0gPSBOVUxMOworCWZyZWVfaXJxKHMtPmlycSwgcyk7CitvdXRfZnJlZV9jbGs6CisJY2xrX3B1dChzLT5jbGspOworb3V0X2ZyZWU6CisJa2ZyZWUocyk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXhzX2F1YXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteHNfYXVhcnRfcG9ydCAqcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJdWFydF9yZW1vdmVfb25lX3BvcnQoJmF1YXJ0X2RyaXZlciwgJnMtPnBvcnQpOworCisJYXVhcnRfcG9ydFtwZGV2LT5pZF0gPSBOVUxMOworCisJY2xrX3B1dChzLT5jbGspOworCWZyZWVfaXJxKHMtPmlycSwgcyk7CisJa2ZyZWUocyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXhzX2F1YXJ0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBteHNfYXVhcnRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG14c19hdWFydF9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm14cy1hdWFydCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBteHNfYXVhcnRfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZhdWFydF9kcml2ZXIpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCXIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm14c19hdWFydF9kcml2ZXIpOworCWlmIChyKQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmYXVhcnRfZHJpdmVyKTsKK291dDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG14c19hdWFydF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14c19hdWFydF9kcml2ZXIpOworCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmF1YXJ0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG14c19hdWFydF9pbml0KTsKK21vZHVsZV9leGl0KG14c19hdWFydF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIE1YUyBhcHBsaWNhdGlvbiB1YXJ0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYwppbmRleCBhOWFkN2YzLi4yNjQwM2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYwpAQCAtMTUsNyArMTUsNiBAQAogICpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgogICovCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvdWNjX3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC91Y2NfdWFydC5jCmluZGV4IGZmNTFkYWUxLi5jMzI3MjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvdWNjX3VhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvdWNjX3VhcnQuYwpAQCAtMTI2OSwxMyArMTI2OSwxMiBAQAogCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOwogCWlmIChyZXQpIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgIm1pc3NpbmcgJ3JlZycgcHJvcGVydHkgaW4gZGV2aWNlIHRyZWVcbiIpOwotCQlrZnJlZShxZV9wb3J0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAJaWYgKCFyZXMuc3RhcnQpIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImludmFsaWQgJ3JlZycgcHJvcGVydHkgaW4gZGV2aWNlIHRyZWVcbiIpOwotCQlrZnJlZShxZV9wb3J0KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCXFlX3BvcnQtPnBvcnQubWFwYmFzZSA9IHJlcy5zdGFydDsKIApAQCAtMTI4NSwxNyArMTI4NCwxNyBAQAogCWlmICghaXByb3ApIHsKIAkJaXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKIAkJaWYgKCFpcHJvcCkgewotCQkJa2ZyZWUocWVfcG9ydCk7CiAJCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiVUNDIGlzIHVuc3BlY2lmaWVkIGluICIKIAkJCQkiZGV2aWNlIHRyZWVcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCX0KIAogCWlmICgoKmlwcm9wIDwgMSkgfHwgKCppcHJvcCA+IFVDQ19NQVhfTlVNKSkgewogCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAibm8gc3VwcG9ydCBmb3IgVUNDJXVcbiIsICppcHJvcCk7Ci0JCWtmcmVlKHFlX3BvcnQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAJcWVfcG9ydC0+dWNjX251bSA9ICppcHJvcCAtIDE7CiAKQEAgLTEzMDksMTYgKzEzMDgsMTYgQEAKIAlzcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJ4LWNsb2NrLW5hbWUiLCBOVUxMKTsKIAlpZiAoIXNwcm9wKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJtaXNzaW5nIHJ4LWNsb2NrLW5hbWUgaW4gZGV2aWNlIHRyZWVcbiIpOwotCQlrZnJlZShxZV9wb3J0KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJcWVfcG9ydC0+dXNfaW5mby5yeF9jbG9jayA9IHFlX2Nsb2NrX3NvdXJjZShzcHJvcCk7CiAJaWYgKChxZV9wb3J0LT51c19pbmZvLnJ4X2Nsb2NrIDwgUUVfQlJHMSkgfHwKIAkgICAgKHFlX3BvcnQtPnVzX2luZm8ucnhfY2xvY2sgPiBRRV9CUkcxNikpIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgInJ4LWNsb2NrLW5hbWUgbXVzdCBiZSBhIEJSRyBmb3IgVUFSVFxuIik7Ci0JCWtmcmVlKHFlX3BvcnQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAKICNpZmRlZiBMT09QQkFDSwpAQCAtMTMyOCwzOSArMTMyNywzOSBAQAogCXNwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAidHgtY2xvY2stbmFtZSIsIE5VTEwpOwogCWlmICghc3Byb3ApIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgIm1pc3NpbmcgdHgtY2xvY2stbmFtZSBpbiBkZXZpY2UgdHJlZVxuIik7Ci0JCWtmcmVlKHFlX3BvcnQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAJcWVfcG9ydC0+dXNfaW5mby50eF9jbG9jayA9IHFlX2Nsb2NrX3NvdXJjZShzcHJvcCk7CiAjZW5kaWYKIAlpZiAoKHFlX3BvcnQtPnVzX2luZm8udHhfY2xvY2sgPCBRRV9CUkcxKSB8fAogCSAgICAocWVfcG9ydC0+dXNfaW5mby50eF9jbG9jayA+IFFFX0JSRzE2KSkgewogCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAidHgtY2xvY2stbmFtZSBtdXN0IGJlIGEgQlJHIGZvciBVQVJUXG4iKTsKLQkJa2ZyZWUocWVfcG9ydCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCS8qIEdldCB0aGUgcG9ydCBudW1iZXIsIG51bWJlcmVkIDAtMyAqLwogCWlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicG9ydC1udW1iZXIiLCBOVUxMKTsKIAlpZiAoIWlwcm9wKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJtaXNzaW5nIHBvcnQtbnVtYmVyIGluIGRldmljZSB0cmVlXG4iKTsKLQkJa2ZyZWUocWVfcG9ydCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOwogCX0KIAlxZV9wb3J0LT5wb3J0LmxpbmUgPSAqaXByb3A7CiAJaWYgKHFlX3BvcnQtPnBvcnQubGluZSA+PSBVQ0NfTUFYX1VBUlQpIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgInBvcnQtbnVtYmVyIG11c3QgYmUgMC0ldVxuIiwKIAkJCVVDQ19NQVhfVUFSVCAtIDEpOwotCQlrZnJlZShxZV9wb3J0KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJcWVfcG9ydC0+cG9ydC5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CiAJaWYgKHFlX3BvcnQtPnBvcnQuaXJxID09IE5PX0lSUSkgewogCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGQgbm90IG1hcCBJUlEgZm9yIFVDQyV1XG4iLAogCQkgICAgICAgcWVfcG9ydC0+dWNjX251bSArIDEpOwotCQlrZnJlZShxZV9wb3J0KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJLyoKQEAgLTEzNzIsOCArMTM3MSw4IEBACiAJCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgInFlIik7CiAJCWlmICghbnApIHsKIAkJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZCBub3QgZmluZCAncWUnIG5vZGVcbiIpOwotCQkJa2ZyZWUocWVfcG9ydCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJfQogCkBAIC0xMzgxLDggKzEzODAsOCBAQAogCWlmICghaXByb3ApIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwKIAkJICAgICAgICJtaXNzaW5nIGJyZy1mcmVxdWVuY3kgaW4gZGV2aWNlIHRyZWVcbiIpOwotCQlrZnJlZShxZV9wb3J0KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X25wOwogCX0KIAogCWlmICgqaXByb3ApCkBAIC0xMzk3LDE2ICsxMzk2LDE2IEBACiAJCWlmICghaXByb3ApIHsKIAkJCWRldl9lcnIoJm9mZGV2LT5kZXYsCiAJCQkJIm1pc3NpbmcgUUUgYnVzLWZyZXF1ZW5jeSBpbiBkZXZpY2UgdHJlZVxuIik7Ci0JCQlrZnJlZShxZV9wb3J0KTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X25wOwogCQl9CiAJCWlmICgqaXByb3ApCiAJCQlxZV9wb3J0LT5wb3J0LnVhcnRjbGsgPSAqaXByb3AgLyAyOwogCQllbHNlIHsKIAkJCWRldl9lcnIoJm9mZGV2LT5kZXYsCiAJCQkJImludmFsaWQgUUUgYnVzLWZyZXF1ZW5jeSBpbiBkZXZpY2UgdHJlZVxuIik7Ci0JCQlrZnJlZShxZV9wb3J0KTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X25wOwogCQl9CiAJfQogCkBAIC0xNDQ0LDggKzE0NDMsNyBAQAogCWlmIChyZXQpIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkIG5vdCBhZGQgL2Rldi90dHlRRSV1XG4iLAogCQkgICAgICAgcWVfcG9ydC0+cG9ydC5saW5lKTsKLQkJa2ZyZWUocWVfcG9ydCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X25wOwogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgcWVfcG9ydCk7CkBAIC0xNDU5LDYgKzE0NTcsMTEgQEAKIAkgICAgICAgU0VSSUFMX1FFX01JTk9SICsgcWVfcG9ydC0+cG9ydC5saW5lKTsKIAogCXJldHVybiAwOworb3V0X25wOgorCW9mX25vZGVfcHV0KG5wKTsKK291dF9mcmVlOgorCWtmcmVlKHFlX3BvcnQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdWNjX3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jIGIvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCmluZGV4IGQ4MjEwY2EuLmI5NDUxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCWlmICh0dHktPmJ1Zi50YWlsICE9IE5VTEwpCiAJCXR0eS0+YnVmLnRhaWwtPmNvbW1pdCA9IHR0eS0+YnVmLnRhaWwtPnVzZWQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yaywgMSk7CisJc2NoZWR1bGVfd29yaygmdHR5LT5idWYud29yayk7CiB9CiBFWFBPUlRfU1lNQk9MKHR0eV9zY2hlZHVsZV9mbGlwKTsKIApAQCAtNDAyLDcgKzQwMiw3IEBACiBzdGF0aWMgdm9pZCBmbHVzaF90b19sZGlzYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdHR5X3N0cnVjdCwgYnVmLndvcmsud29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdHR5X3N0cnVjdCwgYnVmLndvcmspOwogCXVuc2lnbmVkIGxvbmcgCWZsYWdzOwogCXN0cnVjdCB0dHlfbGRpc2MgKmRpc2M7CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQkJaWYgKHRlc3RfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKSkKIAkJCQlicmVhazsKIAkJCWlmICghdHR5LT5yZWNlaXZlX3Jvb20gfHwgc2Vlbl90YWlsKSB7Ci0JCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrLCAxKTsKKwkJCQlzY2hlZHVsZV93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjb3VudCA+IHR0eS0+cmVjZWl2ZV9yb29tKQpAQCAtNDgxLDcgKzQ4MSw3IEBACiAgKi8KIHZvaWQgdHR5X2ZsdXNoX3RvX2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JZmx1c2hfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKKwlmbHVzaF93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKIH0KIAogLyoqCkBAIC01MDYsOSArNTA2LDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAKIAlpZiAodHR5LT5sb3dfbGF0ZW5jeSkKLQkJZmx1c2hfdG9fbGRpc2MoJnR0eS0+YnVmLndvcmsud29yayk7CisJCWZsdXNoX3RvX2xkaXNjKCZ0dHktPmJ1Zi53b3JrKTsKIAllbHNlCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yaywgMSk7CisJCXNjaGVkdWxlX3dvcmsoJnR0eS0+YnVmLndvcmspOwogfQogRVhQT1JUX1NZTUJPTCh0dHlfZmxpcF9idWZmZXJfcHVzaCk7CiAKQEAgLTUyOSw2ICs1MjksNiBAQAogCXR0eS0+YnVmLnRhaWwgPSBOVUxMOwogCXR0eS0+YnVmLmZyZWUgPSBOVUxMOwogCXR0eS0+YnVmLm1lbW9yeV91c2VkID0gMDsKLQlJTklUX0RFTEFZRURfV09SSygmdHR5LT5idWYud29yaywgZmx1c2hfdG9fbGRpc2MpOworCUlOSVRfV09SSygmdHR5LT5idWYud29yaywgZmx1c2hfdG9fbGRpc2MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfbGRpc2MuYyBiL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jCmluZGV4IDBmYzU2NGEuLmUxOWUxMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jCkBAIC01MjksNyArNTI5LDcgQEAKIHN0YXRpYyBpbnQgdHR5X2xkaXNjX2hhbHQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAljbGVhcl9iaXQoVFRZX0xESVNDLCAmdHR5LT5mbGFncyk7Ci0JcmV0dXJuIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHR5LT5idWYud29yayk7CisJcmV0dXJuIGNhbmNlbF93b3JrX3N5bmMoJnR0eS0+YnVmLndvcmspOwogfQogCiAvKioKQEAgLTU0Miw3ICs1NDIsNyBAQAogewogCWZsdXNoX3dvcmtfc3luYygmdHR5LT5oYW5ndXBfd29yayk7CiAJZmx1c2hfd29ya19zeW5jKCZ0dHktPlNBS193b3JrKTsKLQlmbHVzaF9kZWxheWVkX3dvcmtfc3luYygmdHR5LT5idWYud29yayk7CisJZmx1c2hfd29ya19zeW5jKCZ0dHktPmJ1Zi53b3JrKTsKIH0KIAogLyoqCkBAIC03MjIsOSArNzIyLDkgQEAKIAkvKiBSZXN0YXJ0IHRoZSB3b3JrIHF1ZXVlIGluIGNhc2Ugbm8gY2hhcmFjdGVycyBraWNrIGl0IG9mZi4gU2FmZSBpZgogCSAgIGFscmVhZHkgcnVubmluZyAqLwogCWlmICh3b3JrKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOworCQlzY2hlZHVsZV93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKIAlpZiAob193b3JrKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm9fdHR5LT5idWYud29yaywgMSk7CisJCXNjaGVkdWxlX3dvcmsoJm9fdHR5LT5idWYud29yayk7CiAJbXV0ZXhfdW5sb2NrKCZ0dHktPmxkaXNjX211dGV4KTsKIAl0dHlfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTgzMCwxMiArODMwLDEyIEBACiAKIAkvKgogCSAqIHRoaXMgaXMgbGlrZSB0dHlfbGRpc2NfaGFsdCwgYnV0IHdlIG5lZWQgdG8gZ2l2ZSB1cAotCSAqIHRoZSBCVE0gYmVmb3JlIGNhbGxpbmcgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jLAotCSAqIHdoaWNoIG1heSBuZWVkIHRvIHdhaXQgZm9yIGFub3RoZXIgZnVuY3Rpb24gdGFraW5nIHRoZSBCVE0KKwkgKiB0aGUgQlRNIGJlZm9yZSBjYWxsaW5nIGNhbmNlbF93b3JrX3N5bmMsIHdoaWNoIG1heQorCSAqIG5lZWQgdG8gd2FpdCBmb3IgYW5vdGhlciBmdW5jdGlvbiB0YWtpbmcgdGhlIEJUTQogCSAqLwogCWNsZWFyX2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsKIAl0dHlfdW5sb2NrKCk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0dHktPmJ1Zi53b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZ0dHktPmJ1Zi53b3JrKTsKIAltdXRleF91bmxvY2soJnR0eS0+bGRpc2NfbXV0ZXgpOwogCiAJdHR5X2xvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCmluZGV4IDM4MDcyZTQuLmUzNWExNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMTY0Niw3ICsxNjQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCB1c2JfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAlpbnQJCQlzdGF0dXM7CkBAIC0xNjY3LDcgKzE2NjcsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCB1c2JfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwogCWludAkJCXN0YXR1czsKQEAgLTE2NzksNyArMTY3OSw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCB1c2JfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCB1c2JfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIApAQCAtMTY5MSwxOSArMTY5MSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdXNiX2J1c19wbV9vcHMgPSB7Ci0JLnJ1bnRpbWVfc3VzcGVuZCA9CXVzYl9ydW50aW1lX3N1c3BlbmQsCi0JLnJ1bnRpbWVfcmVzdW1lID0JdXNiX3J1bnRpbWVfcmVzdW1lLAotCS5ydW50aW1lX2lkbGUgPQkJdXNiX3J1bnRpbWVfaWRsZSwKLX07Ci0KICNlbmRpZiAvKiBDT05GSUdfVVNCX1NVU1BFTkQgKi8KIAogc3RydWN0IGJ1c190eXBlIHVzYl9idXNfdHlwZSA9IHsKIAkubmFtZSA9CQkidXNiIiwKIAkubWF0Y2ggPQl1c2JfZGV2aWNlX21hdGNoLAogCS51ZXZlbnQgPQl1c2JfdWV2ZW50LAotI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORAotCS5wbSA9CQkmdXNiX2J1c19wbV9vcHMsCi0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCAwNzljYjU3Li5kOWQ0YjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTMxNSw2ICszMTUsMTEgQEAKIAkudGhhdyA9CQl1c2JfZGV2X3RoYXcsCiAJLnBvd2Vyb2ZmID0JdXNiX2Rldl9wb3dlcm9mZiwKIAkucmVzdG9yZSA9CXVzYl9kZXZfcmVzdG9yZSwKKyNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKKwkucnVudGltZV9zdXNwZW5kID0JdXNiX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPQl1c2JfcnVudGltZV9yZXN1bWUsCisJLnJ1bnRpbWVfaWRsZSA9CQl1c2JfcnVudGltZV9pZGxlLAorI2VuZGlmCiB9OwogCiAjZW5kaWYJLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oIGIvZHJpdmVycy91c2IvY29yZS91c2IuaAppbmRleCBhOWNmNDg0Li5kNDUwYjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKQEAgLTc3LDYgKzc3LDkgQEAKIGV4dGVybiB2b2lkIHVzYl9hdXRvc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogZXh0ZXJuIGludCB1c2JfYXV0b3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogZXh0ZXJuIGludCB1c2JfcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdXNiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCB1c2JfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdXNiX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKaW5kZXggYzhlMzYwZC4uMjVjOGMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwpAQCAtMjAzLDExICsyMDMsNiBAQAogCQltZGVsYXkoMTApOwogCX0KIAotCS8qIHNldHVwIHNwZWNpZmljIHVzYiBodyAqLwotCXJldCA9IG14Y19pbml0aWFsaXplX3VzYl9odyhwZGV2LT5pZCwgcGRhdGEtPmZsYWdzKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfaW5pdDsKLQogCWVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwogCiAJLyogRUhDSSByZWdpc3RlcnMgc3RhcnQgYXQgb2Zmc2V0IDB4MTAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwppbmRleCAxZmE2Y2UzLi42OGFiNDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKQEAgLTI4Miw2ICsyODIsNyBAQAogCXNucHJpbnRmKGJsX25hbWUsIHNpemVvZihibF9uYW1lKSwgImFwcGxlZGlzcGxheSVkIiwKIAkJYXRvbWljX2luY19yZXR1cm4oJmNvdW50X2Rpc3BsYXlzKSAtIDEpOwogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CiAJcGRhdGEtPmJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihibF9uYW1lLCBOVUxMLCBwZGF0YSwKIAkJCQkJICAgICAgJmFwcGxlZGlzcGxheV9ibF9kYXRhLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggYTkxNDAxMC4uNjMwYWU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC0xNTMwLDcgKzE1MzAsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzQzMCkgfHwgXAorI2lmIGRlZmluZWQoQ09ORklHX1NPQ19PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX09NQVAzNDMwKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9VODUwMCkgfHwgXAogCWRlZmluZWQoQ09ORklHX0FSQ0hfVTU1MDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCmluZGV4IDRmMGRkMmUuLjRiZDllMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaApAQCAtMjEyLDggKzIxMiw4IEBACiAgKiBkaXJlY3RseSB3aXRoIHRoZSAiZmxhdCIgbW9kZWwsIG9yIGFmdGVyIHNldHRpbmcgdXAgYW4gaW5kZXggcmVnaXN0ZXIuCiAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfREFWSU5DSSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgXAotCQl8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKSB8fCBkZWZpbmVkKENPTkZJR19CTEFDS0ZJTikgXAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfREFWSU5DSSkgfHwgZGVmaW5lZChDT05GSUdfU09DX09NQVAyNDMwKSBcCisJCXx8IGRlZmluZWQoQ09ORklHX1NPQ19PTUFQMzQzMCkgfHwgZGVmaW5lZChDT05GSUdfQkxBQ0tGSU4pIFwKIAkJfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIC8qIFJFVklTSVQgaW5kZXhlZCBhY2Nlc3Mgc2VlbWVkIHRvCiAgKiBtaXNiZWhhdmUgKG9uIERhVmluY2kpIGZvciBhdCBsZWFzdCBwZXJpcGhlcmFsIElOIC4uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmgKaW5kZXggMjEwNTZjOS4uMzIwZmQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oCkBAIC0zMSw3ICszMSw3IEBACiAgKgogICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQorI2lmIGRlZmluZWQoQ09ORklHX1NPQ19PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX09NQVAzNDMwKQogI2luY2x1ZGUgIm9tYXAyNDMwLmgiCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCmluZGV4IGUwMGZhMWIuLjhjNmZkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKQEAgLTE1MTAsNyArMTUxMCw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogaXNwMTMwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50CQkJc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggZjYxNmNlZi4uMmY3Yzc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYworKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC02MCw2ICs2MCw3IEBACiB7CiAJaW50IHNlZyA9IDA7CiAJc2l6ZV90IHNpemU7CisKIAl3aGlsZSAobGVuICYmIHNlZyA8IGlvdl9jb3VudCkgewogCQlzaXplID0gbWluKGZyb20tPmlvdl9sZW4sIGxlbik7CiAJCXRvLT5pb3ZfYmFzZSA9IGZyb20tPmlvdl9iYXNlOwpAQCAtNzksNiArODAsNyBAQAogewogCWludCBzZWcgPSAwOwogCXNpemVfdCBzaXplOworCiAJd2hpbGUgKGxlbiAmJiBzZWcgPCBpb3Zjb3VudCkgewogCQlzaXplID0gbWluKGZyb20tPmlvdl9sZW4sIGxlbik7CiAJCXRvLT5pb3ZfYmFzZSA9IGZyb20tPmlvdl9iYXNlOwpAQCAtMjExLDEyICsyMTMsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqaGVhZDsKIAlpbnQgbGVuID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbG9ja19zb2NrKHNrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jaywgZmxhZ3MpOwogCWhlYWQgPSBza2JfcGVlaygmc2stPnNrX3JlY2VpdmVfcXVldWUpOwotCWlmIChoZWFkKQorCWlmIChsaWtlbHkoaGVhZCkpCiAJCWxlbiA9IGhlYWQtPmxlbjsKLQlyZWxlYXNlX3NvY2soc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC0yMjcsNiArMjMwLDcgQEAKICAqIEBpb3Zjb3VudAktIHJldHVybmVkIGNvdW50IG9mIGlvIHZlY3RvcnMgd2UgZmlsbAogICogQGxvZwkJLSB2aG9zdCBsb2cKICAqIEBsb2dfbnVtCS0gbG9nIG9mZnNldAorICogQHF1b3RhICAgICAgIC0gaGVhZGNvdW50IHF1b3RhLCAxIGZvciBiaWcgYnVmZmVyCiAgKglyZXR1cm5zIG51bWJlciBvZiBidWZmZXIgaGVhZHMgYWxsb2NhdGVkLCBuZWdhdGl2ZSBvbiBlcnJvcgogICovCiBzdGF0aWMgaW50IGdldF9yeF9idWZzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLApAQCAtMjM0LDcgKzIzOCw4IEBACiAJCSAgICAgICBpbnQgZGF0YWxlbiwKIAkJICAgICAgIHVuc2lnbmVkICppb3Zjb3VudCwKIAkJICAgICAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywKLQkJICAgICAgIHVuc2lnbmVkICpsb2dfbnVtKQorCQkgICAgICAgdW5zaWduZWQgKmxvZ19udW0sCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcXVvdGEpCiB7CiAJdW5zaWduZWQgaW50IG91dCwgaW47CiAJaW50IHNlZyA9IDA7CkBAIC0yNDIsNyArMjQ3LDcgQEAKIAl1bnNpZ25lZCBkOwogCWludCByLCBubG9ncyA9IDA7CiAKLQl3aGlsZSAoZGF0YWxlbiA+IDApIHsKKwl3aGlsZSAoZGF0YWxlbiA+IDAgJiYgaGVhZGNvdW50IDwgcXVvdGEpIHsKIAkJaWYgKHVubGlrZWx5KHNlZyA+PSBVSU9fTUFYSU9WKSkgewogCQkJciA9IC1FTk9CVUZTOwogCQkJZ290byBlcnI7CkBAIC0yODIsMTE3ICsyODcsNyBAQAogCiAvKiBFeHBlY3RzIHRvIGJlIGFsd2F5cyBydW4gZnJvbSB3b3JrcXVldWUgLSB3aGljaCBhY3RzIGFzCiAgKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqLwotc3RhdGljIHZvaWQgaGFuZGxlX3J4X2JpZyhzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpCi17Ci0Jc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmbmV0LT5kZXYudnFzW1ZIT1NUX05FVF9WUV9SWF07Ci0JdW5zaWduZWQgb3V0LCBpbiwgbG9nLCBzOwotCWludCBoZWFkOwotCXN0cnVjdCB2aG9zdF9sb2cgKnZxX2xvZzsKLQlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKLQkJLm1zZ19uYW1lID0gTlVMTCwKLQkJLm1zZ19uYW1lbGVuID0gMCwKLQkJLm1zZ19jb250cm9sID0gTlVMTCwgLyogRklYTUU6IGdldCBhbmQgaGFuZGxlIFJYIGF1eCBkYXRhLiAqLwotCQkubXNnX2NvbnRyb2xsZW4gPSAwLAotCQkubXNnX2lvdiA9IHZxLT5pb3YsCi0JCS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsCi0JfTsKLQotCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciBoZHIgPSB7Ci0JCS5mbGFncyA9IDAsCi0JCS5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19OT05FCi0JfTsKLQotCXNpemVfdCBsZW4sIHRvdGFsX2xlbiA9IDA7Ci0JaW50IGVycjsKLQlzaXplX3QgaGRyX3NpemU7Ci0JLyogVE9ETzogY2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyBmcm9tIHZob3N0X3dvcmtlcj8gKi8KLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHZxLT5wcml2YXRlX2RhdGEsIDEpOwotCWlmICghc29jayB8fCBza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKLQl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7Ci0JaGRyX3NpemUgPSB2cS0+dmhvc3RfaGxlbjsKLQotCXZxX2xvZyA9IHVubGlrZWx5KHZob3N0X2hhc19mZWF0dXJlKCZuZXQtPmRldiwgVkhPU1RfRl9MT0dfQUxMKSkgPwotCQl2cS0+bG9nIDogTlVMTDsKLQotCWZvciAoOzspIHsKLQkJaGVhZCA9IHZob3N0X2dldF92cV9kZXNjKCZuZXQtPmRldiwgdnEsIHZxLT5pb3YsCi0JCQkJCSBBUlJBWV9TSVpFKHZxLT5pb3YpLAotCQkJCQkgJm91dCwgJmluLAotCQkJCQkgdnFfbG9nLCAmbG9nKTsKLQkJLyogT24gZXJyb3IsIHN0b3AgaGFuZGxpbmcgdW50aWwgdGhlIG5leHQga2ljay4gKi8KLQkJaWYgKHVubGlrZWx5KGhlYWQgPCAwKSkKLQkJCWJyZWFrOwotCQkvKiBPSywgbm93IHdlIG5lZWQgdG8ga25vdyBhYm91dCBhZGRlZCBkZXNjcmlwdG9ycy4gKi8KLQkJaWYgKGhlYWQgPT0gdnEtPm51bSkgewotCQkJaWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkodnEpKSkgewotCQkJCS8qIFRoZXkgaGF2ZSBzbGlwcGVkIG9uZSBpbiBhcyB3ZSB3ZXJlCi0JCQkJICogZG9pbmcgdGhhdDogY2hlY2sgYWdhaW4uICovCi0JCQkJdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogTm90aGluZyBuZXc/ICBXYWl0IGZvciBldmVudGZkIHRvIHRlbGwgdXMKLQkJCSAqIHRoZXkgcmVmaWxsZWQuICovCi0JCQlicmVhazsKLQkJfQotCQkvKiBXZSBkb24ndCBuZWVkIHRvIGJlIG5vdGlmaWVkIGFnYWluLiAqLwotCQlpZiAob3V0KSB7Ci0JCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBSWDogIgotCQkJICAgICAgICJvdXQgJWQsIGludCAlZFxuIiwKLQkJCSAgICAgICBvdXQsIGluKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIFNraXAgaGVhZGVyLiBUT0RPOiBzdXBwb3J0IFRTTy9tZXJnZWFibGUgcnggYnVmZmVycy4gKi8KLQkJcyA9IG1vdmVfaW92ZWNfaGRyKHZxLT5pb3YsIHZxLT5oZHIsIGhkcl9zaXplLCBpbik7Ci0JCW1zZy5tc2dfaW92bGVuID0gaW47Ci0JCWxlbiA9IGlvdl9sZW5ndGgodnEtPmlvdiwgaW4pOwotCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJaWYgKCFsZW4pIHsKLQkJCXZxX2Vycih2cSwgIlVuZXhwZWN0ZWQgaGVhZGVyIGxlbiBmb3IgUlg6ICIKLQkJCSAgICAgICAiJXpkIGV4cGVjdGVkICV6ZFxuIiwKLQkJCSAgICAgICBpb3ZfbGVuZ3RoKHZxLT5oZHIsIHMpLCBoZHJfc2l6ZSk7Ci0JCQlicmVhazsKLQkJfQotCQllcnIgPSBzb2NrLT5vcHMtPnJlY3Ztc2coTlVMTCwgc29jaywgJm1zZywKLQkJCQkJIGxlbiwgTVNHX0RPTlRXQUlUIHwgTVNHX1RSVU5DKTsKLQkJLyogVE9ETzogQ2hlY2sgc3BlY2lmaWMgZXJyb3IgYW5kIGJvbWIgb3V0IHVubGVzcyBFQUdBSU4/ICovCi0JCWlmIChlcnIgPCAwKSB7Ci0JCQl2aG9zdF9kaXNjYXJkX3ZxX2Rlc2ModnEsIDEpOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogVE9ETzogU2hvdWxkIGNoZWNrIGFuZCBoYW5kbGUgY2hlY2tzdW0uICovCi0JCWlmIChlcnIgPiBsZW4pIHsKLQkJCXByX2RlYnVnKCJEaXNjYXJkZWQgdHJ1bmNhdGVkIHJ4IHBhY2tldDogIgotCQkJCSAiIGxlbiAlZCA+ICV6ZFxuIiwgZXJyLCBsZW4pOwotCQkJdmhvc3RfZGlzY2FyZF92cV9kZXNjKHZxLCAxKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWxlbiA9IGVycjsKLQkJZXJyID0gbWVtY3B5X3RvaW92ZWModnEtPmhkciwgKHVuc2lnbmVkIGNoYXIgKikmaGRyLCBoZHJfc2l6ZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXZxX2Vycih2cSwgIlVuYWJsZSB0byB3cml0ZSB2bmV0X2hkciBhdCBhZGRyICVwOiAlZFxuIiwKLQkJCSAgICAgICB2cS0+aW92LT5pb3ZfYmFzZSwgZXJyKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWxlbiArPSBoZHJfc2l6ZTsKLQkJdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbCgmbmV0LT5kZXYsIHZxLCBoZWFkLCBsZW4pOwotCQlpZiAodW5saWtlbHkodnFfbG9nKSkKLQkJCXZob3N0X2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2csIGxlbik7Ci0JCXRvdGFsX2xlbiArPSBsZW47Ci0JCWlmICh1bmxpa2VseSh0b3RhbF9sZW4gPj0gVkhPU1RfTkVUX1dFSUdIVCkpIHsKLQkJCXZob3N0X3BvbGxfcXVldWUoJnZxLT5wb2xsKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOwotfQotCi0vKiBFeHBlY3RzIHRvIGJlIGFsd2F5cyBydW4gZnJvbSB3b3JrcXVldWUgLSB3aGljaCBhY3RzIGFzCi0gKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqLwotc3RhdGljIHZvaWQgaGFuZGxlX3J4X21lcmdlYWJsZShzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHZob3N0X25ldCAqbmV0KQogewogCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gJm5ldC0+ZGV2LnZxc1tWSE9TVF9ORVRfVlFfUlhdOwogCXVuc2lnbmVkIHVuaW5pdGlhbGl6ZWRfdmFyKGluKSwgbG9nOwpAQCAtNDA1LDE5ICszMDAsMTggQEAKIAkJLm1zZ19pb3YgPSB2cS0+aW92LAogCQkubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULAogCX07Ci0KIAlzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4YnVmIGhkciA9IHsKIAkJLmhkci5mbGFncyA9IDAsCiAJCS5oZHIuZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fTk9ORQogCX07Ci0KIAlzaXplX3QgdG90YWxfbGVuID0gMDsKLQlpbnQgZXJyLCBoZWFkY291bnQ7CisJaW50IGVyciwgaGVhZGNvdW50LCBtZXJnZWFibGU7CiAJc2l6ZV90IHZob3N0X2hsZW4sIHNvY2tfaGxlbjsKIAlzaXplX3Qgdmhvc3RfbGVuLCBzb2NrX2xlbjsKIAkvKiBUT0RPOiBjaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIGZyb20gdmhvc3Rfd29ya2VyPyAqLwogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2sodnEtPnByaXZhdGVfZGF0YSwgMSk7Ci0JaWYgKCFzb2NrIHx8IHNrYl9xdWV1ZV9lbXB0eSgmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpKQorCisJaWYgKCFzb2NrKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZ2cS0+bXV0ZXgpOwpAQCAtNDI3LDEyICszMjEsMTQgQEAKIAogCXZxX2xvZyA9IHVubGlrZWx5KHZob3N0X2hhc19mZWF0dXJlKCZuZXQtPmRldiwgVkhPU1RfRl9MT0dfQUxMKSkgPwogCQl2cS0+bG9nIDogTlVMTDsKKwltZXJnZWFibGUgPSB2aG9zdF9oYXNfZmVhdHVyZSgmbmV0LT5kZXYsIFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpOwogCiAJd2hpbGUgKChzb2NrX2xlbiA9IHBlZWtfaGVhZF9sZW4oc29jay0+c2spKSkgewogCQlzb2NrX2xlbiArPSBzb2NrX2hsZW47CiAJCXZob3N0X2xlbiA9IHNvY2tfbGVuICsgdmhvc3RfaGxlbjsKIAkJaGVhZGNvdW50ID0gZ2V0X3J4X2J1ZnModnEsIHZxLT5oZWFkcywgdmhvc3RfbGVuLAotCQkJCQkmaW4sIHZxX2xvZywgJmxvZyk7CisJCQkJCSZpbiwgdnFfbG9nLCAmbG9nLAorCQkJCQlsaWtlbHkobWVyZ2VhYmxlKSA/IFVJT19NQVhJT1YgOiAxKTsKIAkJLyogT24gZXJyb3IsIHN0b3AgaGFuZGxpbmcgdW50aWwgdGhlIG5leHQga2ljay4gKi8KIAkJaWYgKHVubGlrZWx5KGhlYWRjb3VudCA8IDApKQogCQkJYnJlYWs7CkBAIC00NzYsNyArMzcyLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8qIFRPRE86IFNob3VsZCBjaGVjayBhbmQgaGFuZGxlIGNoZWNrc3VtLiAqLwotCQlpZiAodmhvc3RfaGFzX2ZlYXR1cmUoJm5ldC0+ZGV2LCBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGKSAmJgorCQlpZiAobGlrZWx5KG1lcmdlYWJsZSkgJiYKIAkJICAgIG1lbWNweV90b2lvdmVjZW5kKHZxLT5oZHIsICh1bnNpZ25lZCBjaGFyICopJmhlYWRjb3VudCwKIAkJCQkgICAgICBvZmZzZXRvZih0eXBlb2YoaGRyKSwgbnVtX2J1ZmZlcnMpLAogCQkJCSAgICAgIHNpemVvZiBoZHIubnVtX2J1ZmZlcnMpKSB7CkBAIC00OTgsMTQgKzM5NCw2IEBACiAJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHZob3N0X25ldCAqbmV0KQotewotCWlmICh2aG9zdF9oYXNfZmVhdHVyZSgmbmV0LT5kZXYsIFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpKQotCQloYW5kbGVfcnhfbWVyZ2VhYmxlKG5ldCk7Ci0JZWxzZQotCQloYW5kbGVfcnhfYmlnKG5ldCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGhhbmRsZV90eF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKQogewogCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsCkBAIC02NTQsNiArNTQyLDcgQEAKIAl9IHVhZGRyOwogCWludCB1YWRkcl9sZW4gPSBzaXplb2YgdWFkZHIsIHI7CiAJc3RydWN0IHNvY2tldCAqc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZyKTsKKwogCWlmICghc29jaykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT1RTT0NLKTsKIApAQCAtNjgyLDYgKzU3MSw3IEBACiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBmZ2V0KGZkKTsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gRVJSX1BUUigtRUJBREYpOwogCXNvY2sgPSB0dW5fZ2V0X3NvY2tldChmaWxlKTsKQEAgLTY5Niw2ICs1ODYsNyBAQAogc3RhdGljIHN0cnVjdCBzb2NrZXQgKmdldF9zb2NrZXQoaW50IGZkKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisKIAkvKiBzcGVjaWFsIGNhc2UgdG8gZGlzYWJsZSBiYWNrZW5kICovCiAJaWYgKGZkID09IC0xKQogCQlyZXR1cm4gTlVMTDsKQEAgLTc0MSw5ICs2MzIsOSBAQAogCW9sZHNvY2sgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHZxLT5wcml2YXRlX2RhdGEsCiAJCQkJCSAgICBsb2NrZGVwX2lzX2hlbGQoJnZxLT5tdXRleCkpOwogCWlmIChzb2NrICE9IG9sZHNvY2spIHsKLSAgICAgICAgICAgICAgICB2aG9zdF9uZXRfZGlzYWJsZV92cShuLCB2cSk7Ci0gICAgICAgICAgICAgICAgcmN1X2Fzc2lnbl9wb2ludGVyKHZxLT5wcml2YXRlX2RhdGEsIHNvY2spOwotICAgICAgICAgICAgICAgIHZob3N0X25ldF9lbmFibGVfdnEobiwgdnEpOworCQl2aG9zdF9uZXRfZGlzYWJsZV92cShuLCB2cSk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcih2cS0+cHJpdmF0ZV9kYXRhLCBzb2NrKTsKKwkJdmhvc3RfbmV0X2VuYWJsZV92cShuLCB2cSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOwpAQCAtNzY4LDYgKzY1OSw3IEBACiAJc3RydWN0IHNvY2tldCAqdHhfc29jayA9IE5VTEw7CiAJc3RydWN0IHNvY2tldCAqcnhfc29jayA9IE5VTEw7CiAJbG9uZyBlcnI7CisKIAltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOwogCWVyciA9IHZob3N0X2Rldl9jaGVja19vd25lcigmbi0+ZGV2KTsKIAlpZiAoZXJyKQpAQCAtODI5LDYgKzcyMSw3IEBACiAJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgYmFja2VuZDsKIAl1NjQgZmVhdHVyZXM7CiAJaW50IHI7CisKIAlzd2l0Y2ggKGlvY3RsKSB7CiAJY2FzZSBWSE9TVF9ORVRfU0VUX0JBQ0tFTkQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYmFja2VuZCwgYXJncCwgc2l6ZW9mIGJhY2tlbmQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IGFkZTA1NjguLjJhYjI5MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYworKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKQEAgLTQxLDggKzQxLDggQEAKIAkJCSAgICBwb2xsX3RhYmxlICpwdCkKIHsKIAlzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbDsKLQlwb2xsID0gY29udGFpbmVyX29mKHB0LCBzdHJ1Y3Qgdmhvc3RfcG9sbCwgdGFibGUpOwogCisJcG9sbCA9IGNvbnRhaW5lcl9vZihwdCwgc3RydWN0IHZob3N0X3BvbGwsIHRhYmxlKTsKIAlwb2xsLT53cWggPSB3cWg7CiAJYWRkX3dhaXRfcXVldWUod3FoLCAmcG9sbC0+d2FpdCk7CiB9CkBAIC04NSw2ICs4NSw3IEBACiB2b2lkIHZob3N0X3BvbGxfc3RhcnQoc3RydWN0IHZob3N0X3BvbGwgKnBvbGwsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXVuc2lnbmVkIGxvbmcgbWFzazsKKwogCW1hc2sgPSBmaWxlLT5mX29wLT5wb2xsKGZpbGUsICZwb2xsLT50YWJsZSk7CiAJaWYgKG1hc2spCiAJCXZob3N0X3BvbGxfd2FrZXVwKCZwb2xsLT53YWl0LCAwLCAwLCAodm9pZCAqKW1hc2spOwpAQCAtMTAxLDYgKzEwMiw3IEBACiAJCQkJdW5zaWduZWQgc2VxKQogewogCWludCBsZWZ0OworCiAJc3Bpbl9sb2NrX2lycSgmZGV2LT53b3JrX2xvY2spOwogCWxlZnQgPSBzZXEgLSB3b3JrLT5kb25lX3NlcTsKIAlzcGluX3VubG9ja19pcnEoJmRldi0+d29ya19sb2NrKTsKQEAgLTIyMiw2ICsyMjQsNyBAQAogc3RhdGljIGxvbmcgdmhvc3RfZGV2X2FsbG9jX2lvdmVjcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udnFzOyArK2kpIHsKIAkJZGV2LT52cXNbaV0uaW5kaXJlY3QgPSBrbWFsbG9jKHNpemVvZiAqZGV2LT52cXNbaV0uaW5kaXJlY3QgKgogCQkJCQkgICAgICAgVUlPX01BWElPViwgR0ZQX0tFUk5FTCk7CkBAIC0yMzUsNiArMjM4LDcgQEAKIAkJCWdvdG8gZXJyX25vbWVtOwogCX0KIAlyZXR1cm4gMDsKKwogZXJyX25vbWVtOgogCWZvciAoOyBpID49IDA7IC0taSkgewogCQlrZnJlZShkZXYtPnZxc1tpXS5pbmRpcmVjdCk7CkBAIC0yNDcsNiArMjUxLDcgQEAKIHN0YXRpYyB2b2lkIHZob3N0X2Rldl9mcmVlX2lvdmVjcyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udnFzOyArK2kpIHsKIAkJa2ZyZWUoZGV2LT52cXNbaV0uaW5kaXJlY3QpOwogCQlkZXYtPnZxc1tpXS5pbmRpcmVjdCA9IE5VTEw7CkBAIC0yOTYsMjYgKzMwMSwyOCBAQAogfQogCiBzdHJ1Y3Qgdmhvc3RfYXR0YWNoX2Nncm91cHNfc3RydWN0IHsKLSAgICAgICAgc3RydWN0IHZob3N0X3dvcmsgd29yazsKLSAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpvd25lcjsKLSAgICAgICAgaW50IHJldDsKKwlzdHJ1Y3Qgdmhvc3Rfd29yayB3b3JrOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXI7CisJaW50IHJldDsKIH07CiAKIHN0YXRpYyB2b2lkIHZob3N0X2F0dGFjaF9jZ3JvdXBzX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspCiB7Ci0gICAgICAgIHN0cnVjdCB2aG9zdF9hdHRhY2hfY2dyb3Vwc19zdHJ1Y3QgKnM7Ci0gICAgICAgIHMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X2F0dGFjaF9jZ3JvdXBzX3N0cnVjdCwgd29yayk7Ci0gICAgICAgIHMtPnJldCA9IGNncm91cF9hdHRhY2hfdGFza19hbGwocy0+b3duZXIsIGN1cnJlbnQpOworCXN0cnVjdCB2aG9zdF9hdHRhY2hfY2dyb3Vwc19zdHJ1Y3QgKnM7CisKKwlzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9hdHRhY2hfY2dyb3Vwc19zdHJ1Y3QsIHdvcmspOworCXMtPnJldCA9IGNncm91cF9hdHRhY2hfdGFza19hbGwocy0+b3duZXIsIGN1cnJlbnQpOwogfQogCiBzdGF0aWMgaW50IHZob3N0X2F0dGFjaF9jZ3JvdXBzKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIHsKLSAgICAgICAgc3RydWN0IHZob3N0X2F0dGFjaF9jZ3JvdXBzX3N0cnVjdCBhdHRhY2g7Ci0gICAgICAgIGF0dGFjaC5vd25lciA9IGN1cnJlbnQ7Ci0gICAgICAgIHZob3N0X3dvcmtfaW5pdCgmYXR0YWNoLndvcmssIHZob3N0X2F0dGFjaF9jZ3JvdXBzX3dvcmspOwotICAgICAgICB2aG9zdF93b3JrX3F1ZXVlKGRldiwgJmF0dGFjaC53b3JrKTsKLSAgICAgICAgdmhvc3Rfd29ya19mbHVzaChkZXYsICZhdHRhY2gud29yayk7Ci0gICAgICAgIHJldHVybiBhdHRhY2gucmV0OworCXN0cnVjdCB2aG9zdF9hdHRhY2hfY2dyb3Vwc19zdHJ1Y3QgYXR0YWNoOworCisJYXR0YWNoLm93bmVyID0gY3VycmVudDsKKwl2aG9zdF93b3JrX2luaXQoJmF0dGFjaC53b3JrLCB2aG9zdF9hdHRhY2hfY2dyb3Vwc193b3JrKTsKKwl2aG9zdF93b3JrX3F1ZXVlKGRldiwgJmF0dGFjaC53b3JrKTsKKwl2aG9zdF93b3JrX2ZsdXNoKGRldiwgJmF0dGFjaC53b3JrKTsKKwlyZXR1cm4gYXR0YWNoLnJldDsKIH0KIAogLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLwpAQCAtMzIzLDExICszMzAsMTMgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKndvcmtlcjsKIAlpbnQgZXJyOworCiAJLyogSXMgdGhlcmUgYW4gb3duZXIgYWxyZWFkeT8gKi8KIAlpZiAoZGV2LT5tbSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX21tOwogCX0KKwogCS8qIE5vIG93bmVyLCBiZWNvbWUgb25lICovCiAJZGV2LT5tbSA9IGdldF90YXNrX21tKGN1cnJlbnQpOwogCXdvcmtlciA9IGt0aHJlYWRfY3JlYXRlKHZob3N0X3dvcmtlciwgZGV2LCAidmhvc3QtJWQiLCBjdXJyZW50LT5waWQpOwpAQCAtMzgwLDYgKzM4OSw3IEBACiB2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm52cXM7ICsraSkgewogCQlpZiAoZGV2LT52cXNbaV0ua2ljayAmJiBkZXYtPnZxc1tpXS5oYW5kbGVfa2ljaykgewogCQkJdmhvc3RfcG9sbF9zdG9wKCZkZXYtPnZxc1tpXS5wb2xsKTsKQEAgLTQyMSw2ICs0MzEsNyBAQAogc3RhdGljIGludCBsb2dfYWNjZXNzX29rKHZvaWQgX191c2VyICpsb2dfYmFzZSwgdTY0IGFkZHIsIHVuc2lnbmVkIGxvbmcgc3opCiB7CiAJdTY0IGEgPSBhZGRyIC8gVkhPU1RfUEFHRV9TSVpFIC8gODsKKwogCS8qIE1ha2Ugc3VyZSA2NCBiaXQgbWF0aCB3aWxsIG5vdCBvdmVyZmxvdy4gKi8KIAlpZiAoYSA+IFVMT05HX01BWCAtICh1bnNpZ25lZCBsb25nKWxvZ19iYXNlIHx8CiAJICAgIGEgKyAodW5zaWduZWQgbG9uZylsb2dfYmFzZSA+IFVMT05HX01BWCkKQEAgLTQ2MSw2ICs0NzIsNyBAQAogCQkJICAgIGludCBsb2dfYWxsKQogewogCWludCBpOworCiAJZm9yIChpID0gMDsgaSA8IGQtPm52cXM7ICsraSkgewogCQlpbnQgb2s7CiAJCW11dGV4X2xvY2soJmQtPnZxc1tpXS5tdXRleCk7CkBAIC01MjcsNiArNTM5LDcgQEAKIHsKIAlzdHJ1Y3Qgdmhvc3RfbWVtb3J5IG1lbSwgKm5ld21lbSwgKm9sZG1lbTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgdmhvc3RfbWVtb3J5LCByZWdpb25zKTsKKwogCWlmIChjb3B5X2Zyb21fdXNlcigmbWVtLCBtLCBzaXplKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKG1lbS5wYWRkaW5nKQpAQCAtNTQ0LDcgKzU1Nyw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWlmICghbWVtb3J5X2FjY2Vzc19vayhkLCBuZXdtZW0sIHZob3N0X2hhc19mZWF0dXJlKGQsIFZIT1NUX0ZfTE9HX0FMTCkpKSB7CisJaWYgKCFtZW1vcnlfYWNjZXNzX29rKGQsIG5ld21lbSwKKwkJCSAgICAgIHZob3N0X2hhc19mZWF0dXJlKGQsIFZIT1NUX0ZfTE9HX0FMTCkpKSB7CiAJCWtmcmVlKG5ld21lbSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTU2MCw2ICs1NzQsNyBAQAogCQkgICAgIHN0cnVjdCB2cmluZ191c2VkIF9fdXNlciAqdXNlZCkKIHsKIAlpbnQgciA9IHB1dF91c2VyKHZxLT51c2VkX2ZsYWdzLCAmdXNlZC0+ZmxhZ3MpOworCiAJaWYgKHIpCiAJCXJldHVybiByOwogCXJldHVybiBnZXRfdXNlcih2cS0+bGFzdF91c2VkX2lkeCwgJnVzZWQtPmlkeCk7CkBAIC04NDksNiArODY0LDcgQEAKIHsKIAlzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbiAqcmVnOwogCWludCBpOworCiAJLyogbGluZWFyIHNlYXJjaCBpcyBub3QgYnJpbGxpYW50LCBidXQgd2UgcmVhbGx5IGhhdmUgb24gdGhlIG9yZGVyIG9mIDYKIAkgKiByZWdpb25zIGluIHByYWN0aWNlICovCiAJZm9yIChpID0gMDsgaSA8IG1lbS0+bnJlZ2lvbnM7ICsraSkgewpAQCAtODcxLDYgKzg4Nyw3IEBACiAJdm9pZCAqYmFzZTsKIAlpbnQgYml0ID0gbnIgKyAobG9nICUgUEFHRV9TSVpFKSAqIDg7CiAJaW50IHI7CisKIAlyID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChsb2csIDEsIDEsICZwYWdlKTsKIAlpZiAociA8IDApCiAJCXJldHVybiByOwpAQCAtODg4LDYgKzkwNSw3IEBACiB7CiAJdTY0IHdyaXRlX3BhZ2UgPSB3cml0ZV9hZGRyZXNzIC8gVkhPU1RfUEFHRV9TSVpFOwogCWludCByOworCiAJaWYgKCF3cml0ZV9sZW5ndGgpCiAJCXJldHVybiAwOwogCXdyaXRlX2xlbmd0aCArPSB3cml0ZV9hZGRyZXNzICUgVkhPU1RfUEFHRV9TSVpFOwpAQCAtMTAzNyw4ICsxMDU1LDggQEAKIAkJCSAgICAgICBpLCBjb3VudCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAodW5saWtlbHkobWVtY3B5X2Zyb21pb3ZlYygodW5zaWduZWQgY2hhciAqKSZkZXNjLCB2cS0+aW5kaXJlY3QsCi0JCQkJCSAgICAgIHNpemVvZiBkZXNjKSkpIHsKKwkJaWYgKHVubGlrZWx5KG1lbWNweV9mcm9taW92ZWMoKHVuc2lnbmVkIGNoYXIgKikmZGVzYywKKwkJCQkJICAgICAgdnEtPmluZGlyZWN0LCBzaXplb2YgZGVzYykpKSB7CiAJCQl2cV9lcnIodnEsICJGYWlsZWQgaW5kaXJlY3QgZGVzY3JpcHRvcjogaWR4ICVkLCAlenhcbiIsCiAJCQkgICAgICAgaSwgKHNpemVfdClpbmRpcmVjdC0+YWRkciArIGkgKiBzaXplb2YgZGVzYyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNTMsNyArMTE3MSw3IEBACiAJCQkgICAgICAgaSwgdnEtPm51bSwgaGVhZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmZGVzYywgdnEtPmRlc2MgKyBpLCBzaXplb2YgZGVzYyk7CisJCXJldCA9IF9fY29weV9mcm9tX3VzZXIoJmRlc2MsIHZxLT5kZXNjICsgaSwgc2l6ZW9mIGRlc2MpOwogCQlpZiAodW5saWtlbHkocmV0KSkgewogCQkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGdldCBkZXNjcmlwdG9yOiBpZHggJWQgYWRkciAlcFxuIiwKIAkJCSAgICAgICBpLCB2cS0+ZGVzYyArIGkpOwpAQCAtMTMxNyw2ICsxMzM1LDcgQEAKIHZvaWQgdmhvc3Rfc2lnbmFsKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7CiAJX191MTYgZmxhZ3M7CisKIAkvKiBGbHVzaCBvdXQgdXNlZCBpbmRleCB1cGRhdGVzLiBUaGlzIGlzIHBhaXJlZAogCSAqIHdpdGggdGhlIGJhcnJpZXIgdGhhdCB0aGUgR3Vlc3QgZXhlY3V0ZXMgd2hlbiBlbmFibGluZwogCSAqIGludGVycnVwdHMuICovCkBAIC0xMzYxLDYgKzEzODAsNyBAQAogewogCXUxNiBhdmFpbF9pZHg7CiAJaW50IHI7CisKIAlpZiAoISh2cS0+dXNlZF9mbGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKQogCQlyZXR1cm4gZmFsc2U7CiAJdnEtPnVzZWRfZmxhZ3MgJj0gflZSSU5HX1VTRURfRl9OT19OT1RJRlk7CkBAIC0xMzg3LDYgKzE0MDcsNyBAQAogdm9pZCB2aG9zdF9kaXNhYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKIHsKIAlpbnQgcjsKKwogCWlmICh2cS0+dXNlZF9mbGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpCiAJCXJldHVybjsKIAl2cS0+dXNlZF9mbGFncyB8PSBWUklOR19VU0VEX0ZfTk9fTk9USUZZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IGJmYzYyZDEuLmU2YThkOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTIzMjEsNiArMjMyMSwxNSBAQAogCWhlbHAKIAkgIEZyYW1lYnVmZmVyIHN1cHBvcnQgZm9yIHRoZSBKWjQ3NDAgU29DLgogCitjb25maWcgRkJfTVhTCisJdHJpc3RhdGUgIk1YUyBMQ0QgZnJhbWVidWZmZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfTVhTCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWhlbHAKKwkgIEZyYW1lYnVmZmVyIHN1cHBvcnQgZm9yIHRoZSBNWFMgU29DLgorCiBjb25maWcgRkJfUFVWM19VTklHRlgKIAl0cmlzdGF0ZSAiUEtVbml0eSB2MyBVbmlnZnggZnJhbWVidWZmZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFVOSUNPUkUzMiAmJiBBUkNIX1BVVjMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IGIwZWIzZGEuLjJlYTQ0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtMTU0LDYgKzE1NCw3IEBACiBvYmotJChDT05GSUdfRkJfQkZJTl83MzkzKSAgICAgICAgKz0gYmZpbl9hZHY3MzkzZmIubwogb2JqLSQoQ09ORklHX0ZCX01YMykJCSAgKz0gbXgzZmIubwogb2JqLSQoQ09ORklHX0ZCX0RBOFhYKQkJICArPSBkYTh4eC1mYi5vCitvYmotJChDT05GSUdfRkJfTVhTKQkJICArPSBteHNmYi5vCiAKICMgdGhlIHRlc3QgZnJhbWVidWZmZXIgaXMgbGFzdAogb2JqLSQoQ09ORklHX0ZCX1ZJUlRVQUwpICAgICAgICAgICs9IHZmYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKaW5kZXggYmFjMTYzNDUuLjRiNGU4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTEyNyw2ICsxMjcsNyBAQAogCQlyZXR1cm47CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSAweGZmOwogCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYmFja2xpZ2h0IiwgJnNpbmZvLT5wZGV2LT5kZXYsIHNpbmZvLAogCQkJCSAgICAgICAmYXRtZWxfbGNkY19ibF9vcHMsICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwppbmRleCA0Y2I2YTU3Li5iMGIyYWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKQEAgLTE4MTgsNiArMTgxOCw3IEBACiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXR5MTI4YmwlZCIsIGluZm8tPm5vZGUpOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7CiAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIGluZm8tPmRldiwgcGFyLCAmYXR5MTI4X2JsX2RhdGEsCiAJCQkJICAgICAgICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggOTRlMjkzZi4uZDQzN2IzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMjI0MSw2ICsyMjQxLDcgQEAKIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdHlibCVkIiwgaW5mby0+bm9kZSk7CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBGQl9CQUNLTElHSFRfTEVWRUxTIC0gMTsKIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgaW5mby0+ZGV2LCBwYXIsICZhdHlfYmxfZGF0YSwKIAkJCQkgICAgICAgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwppbmRleCA5YjgxMWRkLi5kYjU3MmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCkBAIC0xNTgsNiArMTU4LDcgQEAKIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJyYWRlb25ibCVkIiwgcmluZm8tPmluZm8tPm5vZGUpOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7CiAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIHJpbmZvLT5pbmZvLT5kZXYsIHBkYXRhLAogCQkJCSAgICAgICAmcmFkZW9uX2JsX2RhdGEsICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvODhwbTg2MHhfYmwuYwppbmRleCBiMjI0Mzk2Li5lNTk2MjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0Lzg4cG04NjB4X2JsLmMKQEAgLTIyNyw2ICsyMjcsNyBAQAogCX0KIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IE1BWF9CUklHSFRORVNTOwogCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCAmcGRldi0+ZGV2LCBkYXRhLAogCQkJCQkmcG04NjB4X2JhY2tsaWdodF9vcHMsICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwppbmRleCBlNTRhMzM3Li4wYzkzNzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKQEAgLTEwOSw2ICsxMDksMTQgQEAKIAkgIElmIHlvdSBoYXZlIGFuIFM2RTYzTTAgTENEIFBhbmVsLCBzYXkgWSB0byBlbmFibGUgaXRzCiAJICBMQ0QgY29udHJvbCBkcml2ZXIuCiAKK2NvbmZpZyBMQ0RfTEQ5MDQwCisJdHJpc3RhdGUgIkxEOTA0MCBBTU9MRUQgTENEIERyaXZlciIKKwlkZXBlbmRzIG9uIFNQSSAmJiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IGhhdmUgYW4gTEQ5MDQwIFBhbmVsLCBzYXkgWSB0byBlbmFibGUgaXRzCisJICBjb250cm9sIGRyaXZlci4KKwogZW5kaWYgIyBMQ0RfQ0xBU1NfREVWSUNFCiAKICMKQEAgLTIzNiwxMiArMjQ0LDEyIEBACiAJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgY29ubmVjdGVkIHRvIHRoZSBXTEVEIG91dHB1dCBvZiBNQVg4OTI1CiAJICBXTEVEIG91dHB1dCwgc2F5IFkgaGVyZSB0byBlbmFibGUgdGhpcyBkcml2ZXIuCiAKLWNvbmZpZyBCQUNLTElHSFRfTUJQX05WSURJQQotICAgICAgIHRyaXN0YXRlICJNYWNCb29rIFBybyBOdmlkaWEgQmFja2xpZ2h0IERyaXZlciIKLSAgICAgICBkZXBlbmRzIG9uIFg4NgorY29uZmlnIEJBQ0tMSUdIVF9BUFBMRQorICAgICAgIHRyaXN0YXRlICJBcHBsZSBCYWNrbGlnaHQgRHJpdmVyIgorICAgICAgIGRlcGVuZHMgb24gWDg2ICYmIEFDUEkKICAgICAgICBoZWxwCi0gICAgICAgICBJZiB5b3UgaGF2ZSBhbiBBcHBsZSBNYWNib29rIFBybyB3aXRoIE52aWRpYSBncmFwaGljcyBoYXJkd2FyZSBzYXkgWQotCSB0byBlbmFibGUgYSBkcml2ZXIgZm9yIGl0cyBiYWNrbGlnaHQKKyAgICAgICAgIElmIHlvdSBoYXZlIGFuIEludGVsLWJhc2VkIEFwcGxlIHNheSBZIHRvIGVuYWJsZSBhIGRyaXZlciBmb3IgaXRzCisJIGJhY2tsaWdodC4KIAogY29uZmlnIEJBQ0tMSUdIVF9UT1NBCiAJdHJpc3RhdGUgIlNoYXJwIFNMLTYwMDAgQmFja2xpZ2h0IERyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKaW5kZXggNDRjMGY4MS4uYjljYTg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDcgQEAKIG9iai0kKENPTkZJR19MQ0RfVERPMjRNKQkgICArPSB0ZG8yNG0ubwogb2JqLSQoQ09ORklHX0xDRF9UT1NBKQkJICAgKz0gdG9zYV9sY2Qubwogb2JqLSQoQ09ORklHX0xDRF9TNkU2M00wKQkrPSBzNmU2M20wLm8KK29iai0kKENPTkZJR19MQ0RfTEQ5MDQwKQkrPSBsZDkwNDAubwogCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRSkgKz0gYmFja2xpZ2h0Lm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfQVRNRUxfUFdNKSAgICArPSBhdG1lbC1wd20tYmwubwpAQCAtMjYsNyArMjcsNyBAQAogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9QV00pCSs9IHB3bV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0RBOTAzWCkJKz0gZGE5MDN4X2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfTUFYODkyNSkJKz0gbWF4ODkyNV9ibC5vCi1vYmotJChDT05GSUdfQkFDS0xJR0hUX01CUF9OVklESUEpICs9IG1icF9udmlkaWFfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BUFBMRSkJKz0gYXBwbGVfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9UT1NBKQkrPSB0b3NhX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfU0FIQVJBKQkrPSBrYjM4ODZfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9XTTgzMVgpCSs9IHdtODMxeF9ibC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMKaW5kZXggOWY0MzZlMC4uYWYzMTE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDU1MjBfYmwuYwpAQCAtMzAzLDYgKzMwMyw3IEBACiAJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBBRFA1MDIwX01BWF9CUklHSFRORVNTOwogCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCBkYXRhLT5tYXN0ZXIsIGRhdGEsCiAJCQkJICAgICAgICZhZHA1NTIwX2JsX29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NjBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NjBfYmwuYwppbmRleCA3MzRjNjUwLi5kMmE5NmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA4ODYwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwODg2MF9ibC5jCkBAIC03MDksNiArNzA5LDcgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihwcm9wcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gQURQODg2MF9NQVhfQlJJR0hUTkVTUzsKIAogCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwppbmRleCBmZTlhZjEyLi5jODYxYzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwpAQCAtMTA0LDYgKzEwNCw3IEBACiAJfQogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gMHhmZjsKIAlibGRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2X25hbWUoJnBkZXYtPmRldiksICZwZGV2LT5kZXYsCiAJCQkJCSAgYmwsICZhZHhfYmFja2xpZ2h0X29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FwcGxlX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hcHBsZV9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOThkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hcHBsZV9ibC5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogIEJhY2tsaWdodCBEcml2ZXIgZm9yIEludGVsLWJhc2VkIEFwcGxlcworICoKKyAqICBDb3B5cmlnaHQgKGMpIFJlZCBIYXQgPG1qZ0ByZWRoYXQuY29tPgorICogIEJhc2VkIG9uIGNvZGUgZnJvbSBQb21tZWQ6CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE5pY29sYXMgQm9pY2hhdCA8bmljb2xhcyBAYm9pY2hhdC5jaD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgRmVsaXBlIEFsZmFybyBTb2xhbmEgPGZlbGlwZV9hbGZhcm8gQGxpbnV4bWFpbC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEp1bGllbiBCTEFDSEUgPGpiQGpibGFjaGUub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgZHJpdmVyIHRyaWdnZXJzIFNNSXMgd2hpY2ggY2F1c2UgdGhlIGZpcm13YXJlIHRvIGNoYW5nZSB0aGUKKyAqICBiYWNrbGlnaHQgYnJpZ2h0bmVzcy4gVGhpcyBpcyBpY2t5IGluIG1hbnkgd2F5cywgYnV0IGl0J3MgaW1wcmFjdGljYWwgdG8KKyAqICBnZXQgYXQgdGhlIGZpcm13YXJlIGNvZGUgaW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgYWN0dWFsbHkgZG9pbmcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICphcHBsZV9iYWNrbGlnaHRfZGV2aWNlOworCitzdHJ1Y3QgaHdfZGF0YSB7CisJLyogSS9PIHJlc291cmNlIHRvIGFsbG9jYXRlLiAqLworCXVuc2lnbmVkIGxvbmcgaW9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGlvbGVuOworCS8qIEJhY2tsaWdodCBvcGVyYXRpb25zIHN0cnVjdHVyZS4gKi8KKwljb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBiYWNrbGlnaHRfb3BzOworCXZvaWQgKCpzZXRfYnJpZ2h0bmVzcykoaW50KTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdfZGF0YSAqaHdfZGF0YTsKKworI2RlZmluZSBEUklWRVIgImFwcGxlX2JhY2tsaWdodDogIgorCisvKiBNb2R1bGUgcGFyYW1ldGVycy4gKi8KK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlNldCB0byBvbmUgdG8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcy4iKTsKKworLyoKKyAqIEltcGxlbWVudGF0aW9uIGZvciBtYWNoaW5lcyB3aXRoIEludGVsIGNoaXBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGludGVsX2NoaXBzZXRfc2V0X2JyaWdodG5lc3MoaW50IGludGVuc2l0eSkKK3sKKwlvdXRiKDB4MDQgfCAoaW50ZW5zaXR5IDw8IDQpLCAweGIzKTsKKwlvdXRiKDB4YmYsIDB4YjIpOworfQorCitzdGF0aWMgaW50IGludGVsX2NoaXBzZXRfc2VuZF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCWludCBpbnRlbnNpdHkgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKKworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSICJzZXR0aW5nIGJyaWdodG5lc3MgdG8gJWRcbiIsCisJCSAgICAgICBpbnRlbnNpdHkpOworCisJaW50ZWxfY2hpcHNldF9zZXRfYnJpZ2h0bmVzcyhpbnRlbnNpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGludGVsX2NoaXBzZXRfZ2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJaW50IGludGVuc2l0eTsKKworCW91dGIoMHgwMywgMHhiMyk7CisJb3V0YigweGJmLCAweGIyKTsKKwlpbnRlbnNpdHkgPSBpbmIoMHhiMykgPj4gNDsKKworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSICJyZWFkIGJyaWdodG5lc3Mgb2YgJWRcbiIsCisJCSAgICAgICBpbnRlbnNpdHkpOworCisJcmV0dXJuIGludGVuc2l0eTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBod19kYXRhIGludGVsX2NoaXBzZXRfZGF0YSA9IHsKKwkuaW9zdGFydCA9IDB4YjIsCisJLmlvbGVuID0gMiwKKwkuYmFja2xpZ2h0X29wcwk9IHsKKwkJLm9wdGlvbnMJPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCisJCS5nZXRfYnJpZ2h0bmVzcwk9IGludGVsX2NoaXBzZXRfZ2V0X2ludGVuc2l0eSwKKwkJLnVwZGF0ZV9zdGF0dXMJPSBpbnRlbF9jaGlwc2V0X3NlbmRfaW50ZW5zaXR5LAorCX0sCisJLnNldF9icmlnaHRuZXNzID0gaW50ZWxfY2hpcHNldF9zZXRfYnJpZ2h0bmVzcywKK307CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBmb3IgbWFjaGluZXMgd2l0aCBOdmlkaWEgY2hpcHNldC4KKyAqLworc3RhdGljIHZvaWQgbnZpZGlhX2NoaXBzZXRfc2V0X2JyaWdodG5lc3MoaW50IGludGVuc2l0eSkKK3sKKwlvdXRiKDB4MDQgfCAoaW50ZW5zaXR5IDw8IDQpLCAweDUyZik7CisJb3V0YigweGJmLCAweDUyZSk7Cit9CisKK3N0YXRpYyBpbnQgbnZpZGlhX2NoaXBzZXRfc2VuZF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCWludCBpbnRlbnNpdHkgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKKworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSICJzZXR0aW5nIGJyaWdodG5lc3MgdG8gJWRcbiIsCisJCSAgICAgICBpbnRlbnNpdHkpOworCisJbnZpZGlhX2NoaXBzZXRfc2V0X2JyaWdodG5lc3MoaW50ZW5zaXR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudmlkaWFfY2hpcHNldF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlpbnQgaW50ZW5zaXR5OworCisJb3V0YigweDAzLCAweDUyZik7CisJb3V0YigweGJmLCAweDUyZSk7CisJaW50ZW5zaXR5ID0gaW5iKDB4NTJmKSA+PiA0OworCisJaWYgKGRlYnVnKQorCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVIgInJlYWQgYnJpZ2h0bmVzcyBvZiAlZFxuIiwKKwkJICAgICAgIGludGVuc2l0eSk7CisKKwlyZXR1cm4gaW50ZW5zaXR5OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGh3X2RhdGEgbnZpZGlhX2NoaXBzZXRfZGF0YSA9IHsKKwkuaW9zdGFydCA9IDB4NTJlLAorCS5pb2xlbiA9IDIsCisJLmJhY2tsaWdodF9vcHMJCT0geworCQkub3B0aW9ucwk9IEJMX0NPUkVfU1VTUEVORFJFU1VNRSwKKwkJLmdldF9icmlnaHRuZXNzCT0gbnZpZGlhX2NoaXBzZXRfZ2V0X2ludGVuc2l0eSwKKwkJLnVwZGF0ZV9zdGF0dXMJPSBudmlkaWFfY2hpcHNldF9zZW5kX2ludGVuc2l0eQorCX0sCisJLnNldF9icmlnaHRuZXNzID0gbnZpZGlhX2NoaXBzZXRfc2V0X2JyaWdodG5lc3MsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhcHBsZV9ibF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOworCXN0cnVjdCBwY2lfZGV2ICpob3N0OworCWludCBpbnRlbnNpdHk7CisKKwlob3N0ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgMCk7CisKKwlpZiAoIWhvc3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUiAidW5hYmxlIHRvIGZpbmQgUENJIGhvc3RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoaG9zdC0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwpCisJCWh3X2RhdGEgPSAmaW50ZWxfY2hpcHNldF9kYXRhOworCWVsc2UgaWYgKGhvc3QtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX05WSURJQSkKKwkJaHdfZGF0YSA9ICZudmlkaWFfY2hpcHNldF9kYXRhOworCisJcGNpX2Rldl9wdXQoaG9zdCk7CisKKwlpZiAoIWh3X2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUiAidW5rbm93biBoYXJkd2FyZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENoZWNrIHRoYXQgdGhlIGhhcmR3YXJlIHJlc3BvbmRzIC0gdGhpcyBtYXkgbm90IHdvcmsgdW5kZXIgRUZJICovCisKKwlpbnRlbnNpdHkgPSBod19kYXRhLT5iYWNrbGlnaHRfb3BzLmdldF9icmlnaHRuZXNzKE5VTEwpOworCisJaWYgKCFpbnRlbnNpdHkpIHsKKwkJaHdfZGF0YS0+c2V0X2JyaWdodG5lc3MoMSk7CisJCWlmICghaHdfZGF0YS0+YmFja2xpZ2h0X29wcy5nZXRfYnJpZ2h0bmVzcyhOVUxMKSkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWh3X2RhdGEtPnNldF9icmlnaHRuZXNzKDApOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oaHdfZGF0YS0+aW9zdGFydCwgaHdfZGF0YS0+aW9sZW4sCisJCQkgICAgIkFwcGxlIGJhY2tsaWdodCIpKQorCQlyZXR1cm4gLUVOWElPOworCisJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07CisJcHJvcHMubWF4X2JyaWdodG5lc3MgPSAxNTsKKwlhcHBsZV9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYXBwbGVfYmFja2xpZ2h0IiwKKwkJCQkgIE5VTEwsIE5VTEwsICZod19kYXRhLT5iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOworCisJaWYgKElTX0VSUihhcHBsZV9iYWNrbGlnaHRfZGV2aWNlKSkgeworCQlyZWxlYXNlX3JlZ2lvbihod19kYXRhLT5pb3N0YXJ0LCBod19kYXRhLT5pb2xlbik7CisJCXJldHVybiBQVFJfRVJSKGFwcGxlX2JhY2tsaWdodF9kZXZpY2UpOworCX0KKworCWFwcGxlX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPQorCQlod19kYXRhLT5iYWNrbGlnaHRfb3BzLmdldF9icmlnaHRuZXNzKGFwcGxlX2JhY2tsaWdodF9kZXZpY2UpOworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGFwcGxlX2JhY2tsaWdodF9kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFwcGxlX2JsX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgaW50IHR5cGUpCit7CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGFwcGxlX2JhY2tsaWdodF9kZXZpY2UpOworCisJcmVsZWFzZV9yZWdpb24oaHdfZGF0YS0+aW9zdGFydCwgaHdfZGF0YS0+aW9sZW4pOworCWh3X2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGFwcGxlX2JsX2lkc1tdID0geworCXsiQVBQMDAwMiIsIDB9LAorCXsiIiwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFwcGxlX2JsX2RyaXZlciA9IHsKKwkubmFtZSA9ICJBcHBsZSBiYWNrbGlnaHQiLAorCS5pZHMgPSBhcHBsZV9ibF9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGFwcGxlX2JsX2FkZCwKKwkJLnJlbW92ZSA9IGFwcGxlX2JsX3JlbW92ZSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXBwbGVfYmxfaW5pdCh2b2lkKQoreworCXJldHVybiBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFwcGxlX2JsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcHBsZV9ibF9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFwcGxlX2JsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFwcGxlX2JsX2luaXQpOworbW9kdWxlX2V4aXQoYXBwbGVfYmxfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFwcGxlIEJhY2tsaWdodCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgYXBwbGVfYmxfaWRzKTsKK01PRFVMRV9BTElBUygibWJwX252aWRpYV9ibCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYXRtZWwtcHdtLWJsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hdG1lbC1wd20tYmwuYwppbmRleCBlNmE2NmRhLi4wNDQzYTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hdG1lbC1wd20tYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hdG1lbC1wd20tYmwuYwpAQCAtMTY4LDYgKzE2OCw3IEBACiAJfQogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gcGRhdGEtPnB3bV9kdXR5X21heCAtIHBkYXRhLT5wd21fZHV0eV9taW47CiAJYmxkZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJhdG1lbC1wd20tYmwiLCAmcGRldi0+ZGV2LCBwd21ibCwKIAkJCQkJICAmYXRtZWxfcHdtX2JsX29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKaW5kZXggMDg3MDMyOS4uODBkMjkyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKQEAgLTE5LDYgKzE5LDEyIEBACiAjaW5jbHVkZSA8YXNtL2JhY2tsaWdodC5oPgogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICpiYWNrbGlnaHRfdHlwZXNbXSA9IHsKKwlbQkFDS0xJR0hUX1JBV10gPSAicmF3IiwKKwlbQkFDS0xJR0hUX1BMQVRGT1JNXSA9ICJwbGF0Zm9ybSIsCisJW0JBQ0tMSUdIVF9GSVJNV0FSRV0gPSAiZmlybXdhcmUiLAorfTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0ZCKSB8fCAoZGVmaW5lZChDT05GSUdfRkJfTU9EVUxFKSAmJiBcCiAJCQkgICBkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFX01PRFVMRSkpCiAvKiBUaGlzIGNhbGxiYWNrIGdldHMgY2FsbGVkIHdoZW4gc29tZXRoaW5nIGltcG9ydGFudCBoYXBwZW5zIGluc2lkZSBhCkBAIC0xNjksNiArMTc1LDE0IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgc3NpemVfdCBiYWNrbGlnaHRfc2hvd190eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSB0b19iYWNrbGlnaHRfZGV2aWNlKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYmFja2xpZ2h0X3R5cGVzW2JkLT5wcm9wcy50eXBlXSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X21heF9icmlnaHRuZXNzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTIzNCw2ICsyNDgsNyBAQAogCV9fQVRUUihhY3R1YWxfYnJpZ2h0bmVzcywgMDQ0NCwgYmFja2xpZ2h0X3Nob3dfYWN0dWFsX2JyaWdodG5lc3MsCiAJCSAgICAgTlVMTCksCiAJX19BVFRSKG1heF9icmlnaHRuZXNzLCAwNDQ0LCBiYWNrbGlnaHRfc2hvd19tYXhfYnJpZ2h0bmVzcywgTlVMTCksCisJX19BVFRSKHR5cGUsIDA0NDQsIGJhY2tsaWdodF9zaG93X3R5cGUsIE5VTEwpLAogCV9fQVRUUl9OVUxMLAogfTsKIApAQCAtMjkyLDkgKzMwNywxNiBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmbmV3X2JkLT5kZXYsIGRldmRhdGEpOwogCiAJLyogU2V0IGRlZmF1bHQgcHJvcGVydGllcyAqLwotCWlmIChwcm9wcykKKwlpZiAocHJvcHMpIHsKIAkJbWVtY3B5KCZuZXdfYmQtPnByb3BzLCBwcm9wcywKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwkJaWYgKHByb3BzLT50eXBlIDw9IDAgfHwgcHJvcHMtPnR5cGUgPj0gQkFDS0xJR0hUX1RZUEVfTUFYKSB7CisJCQlXQVJOKDEsICIlczogaW52YWxpZCBiYWNrbGlnaHQgdHlwZSIsIG5hbWUpOworCQkJbmV3X2JkLT5wcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKKwkJfQorCX0gZWxzZSB7CisJCW5ld19iZC0+cHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CisJfQogCiAJcmMgPSBkZXZpY2VfcmVnaXN0ZXIoJm5ld19iZC0+ZGV2KTsKIAlpZiAocmMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKaW5kZXggMWU3MWMzNS4uYWY2MDk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKQEAgLTU2Miw2ICs1NjIsNyBAQAogCWxjZC0+bW9kZSA9IChwZGF0YSkgPyBwZGF0YS0+aW5pdF9tb2RlIDogQ09SR0lfTENEX01PREVfVkdBOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gcGRhdGEtPm1heF9pbnRlbnNpdHk7CiAJbGNkLT5ibF9kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJjb3JnaV9ibCIsICZzcGktPmRldiwgbGNkLAogCQkJCQkJJmNvcmdpX2JsX29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NyX2JsbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jcl9ibGxjZC5jCmluZGV4IDM5N2QxNWUuLjZjOGM1NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NyX2JsbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY3JfYmxsY2QuYwpAQCAtMTkzLDYgKzE5Myw3IEBACiAJfQogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCWJkcCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImNyLWJhY2tsaWdodCIsICZwZGV2LT5kZXYsIE5VTEwsCiAJCQkJCSZjcl9iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOwogCWlmIChJU19FUlIoYmRwKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwppbmRleCA4NzY1OWVkLi42MjA0M2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwpAQCAtMTM2LDYgKzEzNiw3IEBACiAJCWRhOTAzeF93cml0ZShkYXRhLT5kYTkwM3hfZGV2LCBEQTkwMzRfV0xFRF9DT05UUk9MMiwKIAkJCQlEQTkwMzRfV0xFRF9JU0VUKHBkYXRhLT5vdXRwdXRfY3VycmVudCkpOwogCisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYXhfYnJpZ2h0bmVzczsKIAlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgZGF0YS0+ZGE5MDN4X2RldiwgZGF0YSwKIAkJCQkgICAgICAgJmRhOTAzeF9iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZXA5M3h4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9lcDkzeHhfYmwuYwppbmRleCBiMGNjNDkxLi45ZjFlMzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9lcDkzeHhfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9lcDkzeHhfYmwuYwpAQCAtODcsNiArODcsNyBAQAogCWVwOTN4eGJsLT5tbWlvID0gRVA5M1hYX1JBU1RFUl9CUklHSFRORVNTOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gRVA5M1hYX01BWF9CUklHSFQ7CiAJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGRldi0+bmFtZSwgJmRldi0+ZGV2LCBlcDkzeHhibCwKIAkJCQkgICAgICAgJmVwOTN4eGJsX29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dlbmVyaWNfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dlbmVyaWNfYmwuYwppbmRleCAzMTJjYTYxLi44YzZiZWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9nZW5lcmljX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZ2VuZXJpY19ibC5jCkBAIC05MSw2ICs5MSw3IEBACiAJCW5hbWUgPSBtYWNoaW5mby0+bmFtZTsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1hY2hpbmZvLT5tYXhfaW50ZW5zaXR5OwogCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCAmcGRldi0+ZGV2LCBOVUxMLCAmZ2VuZXJpY2JsX29wcywKIAkJCQkgICAgICAgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCmluZGV4IDI2N2QyM2YuLjM4YWEwMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwpAQCAtMTA5LDYgKzEwOSw3IEBACiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gSFA2ODBfTUFYX0lOVEVOU0lUWTsKIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImhwNjgwLWJsIiwgJnBkZXYtPmRldiwgTlVMTCwKIAkJCQkgICAgICAgJmhwNjgwYmxfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvam9ybmFkYTcyMF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvam9ybmFkYTcyMF9ibC5jCmluZGV4IDJmMTc3YjMuLmRlNjVkODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2pvcm5hZGE3MjBfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9qb3JuYWRhNzIwX2JsLmMKQEAgLTEwNiw2ICsxMDYsNyBAQAogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEJMX01BWF9CUklHSFQ7CiAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKFMxRF9ERVZJQ0VOQU1FLCAmcGRldi0+ZGV2LCBOVUxMLAogCQkJCSAgICAgICAmam9ybmFkYV9ibF9vcHMsICZwcm9wcyk7CkBAIC0xNDYsMTIgKzE0NywxMiBAQAogCX0sCiB9OwogCi1pbnQgX19pbml0IGpvcm5hZGFfYmxfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgam9ybmFkYV9ibF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmam9ybmFkYV9ibF9kcml2ZXIpOwogfQogCi12b2lkIF9fZXhpdCBqb3JuYWRhX2JsX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBqb3JuYWRhX2JsX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmam9ybmFkYV9ibF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvam9ybmFkYTcyMF9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2pvcm5hZGE3MjBfbGNkLmMKaW5kZXggY2JiYjE2Ny4uZDJmZjY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvam9ybmFkYTcyMF9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9qb3JuYWRhNzIwX2xjZC5jCkBAIC0xMzUsMTIgKzEzNSwxMiBAQAogCX0sCiB9OwogCi1pbnQgX19pbml0IGpvcm5hZGFfbGNkX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGpvcm5hZGFfbGNkX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZqb3JuYWRhX2xjZF9kcml2ZXIpOwogfQogCi12b2lkIF9fZXhpdCBqb3JuYWRhX2xjZF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgam9ybmFkYV9sY2RfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZqb3JuYWRhX2xjZF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQva2IzODg2X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYwppbmRleCBmNDM5YTg2Li43MmRkNTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYwpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJCW1hY2hpbmZvLT5saW1pdF9tYXNrID0gLTE7CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYWNoaW5mby0+bWF4X2ludGVuc2l0eTsKIAlrYjM4ODZfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImtiMzg4Ni1ibCIsCiAJCQkJCQkJICAgICZwZGV2LT5kZXYsIE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sZDkwNDAuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xkOTA0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyODFiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sZDkwNDAuYwpAQCAtMCwwICsxLDgxOSBAQAorLyoKKyAqIGxkOTA0MCBBTU9MRUQgTENEIHBhbmVsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQXV0aG9yOiBEb25naHdhIExlZSAgPGRoMDkubGVlQHNhbXN1bmcuY29tPgorICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3M2ZTYzbTAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGNkLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisKKyNpbmNsdWRlICJsZDkwNDBfZ2FtbWEuaCIKKworI2RlZmluZSBTTEVFUE1TRUMJCTB4MTAwMAorI2RlZmluZSBFTkRERUYJCQkweDIwMDAKKyNkZWZpbmUJREVGTUFTSwkJCTB4RkYwMAorI2RlZmluZSBDT01NQU5EX09OTFkJCTB4RkUKKyNkZWZpbmUgREFUQV9PTkxZCQkweEZGCisKKyNkZWZpbmUgTUlOX0JSSUdIVE5FU1MJCTAKKyNkZWZpbmUgTUFYX0JSSUdIVE5FU1MJCTI0CisjZGVmaW5lIHBvd2VyX2lzX29uKHB3cikJKChwd3IpIDw9IEZCX0JMQU5LX05PUk1BTCkKKworc3RydWN0IGxkOTA0MCB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0IHNwaV9kZXZpY2UJCSpzcGk7CisJdW5zaWduZWQgaW50CQkJcG93ZXI7CisJdW5zaWduZWQgaW50CQkJY3VycmVudF9icmlnaHRuZXNzOworCisJc3RydWN0IGxjZF9kZXZpY2UJCSpsZDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZQkJKmJkOworCXN0cnVjdCBsY2RfcGxhdGZvcm1fZGF0YQkqbGNkX3BkOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9zd3Jlc2V0W10gPSB7CisJMHgwMSwgQ09NTUFORF9PTkxZLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV91c2VyX3NldHRpbmdbXSA9IHsKKwkweEYwLCAweDVBLAorCisJREFUQV9PTkxZLCAweDVBLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9lbHZzc19vbltdID0geworCTB4QjEsIDB4MEQsCisKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDE2LAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9ndGNvbltdID0geworCTB4RjcsIDB4MDksCisKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAwLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9wYW5lbF9jb25kaXRpb25bXSA9IHsKKwkweEY4LCAweDA1LAorCisJREFUQV9PTkxZLCAweDY1LAorCURBVEFfT05MWSwgMHg5NiwKKwlEQVRBX09OTFksIDB4NzEsCisJREFUQV9PTkxZLCAweDdELAorCURBVEFfT05MWSwgMHgxOSwKKwlEQVRBX09OTFksIDB4M0IsCisJREFUQV9PTkxZLCAweDBELAorCURBVEFfT05MWSwgMHgxOSwKKwlEQVRBX09OTFksIDB4N0UsCisJREFUQV9PTkxZLCAweDBELAorCURBVEFfT05MWSwgMHhFMiwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHg3RSwKKwlEQVRBX09OTFksIDB4N0QsCisJREFUQV9PTkxZLCAweDA3LAorCURBVEFfT05MWSwgMHgwNywKKwlEQVRBX09OTFksIDB4MjAsCisJREFUQV9PTkxZLCAweDIwLAorCURBVEFfT05MWSwgMHgyMCwKKwlEQVRBX09OTFksIDB4MDIsCisJREFUQV9PTkxZLCAweDAyLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9nYW1tYV9zZXQxW10gPSB7CisJMHhGOSwgMHgwMCwKKworCURBVEFfT05MWSwgMHhBNywKKwlEQVRBX09OTFksIDB4QjQsCisJREFUQV9PTkxZLCAweEFFLAorCURBVEFfT05MWSwgMHhCRiwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDkxLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4QjIsCisJREFUQV9PTkxZLCAweEI0LAorCURBVEFfT05MWSwgMHhBQSwKKwlEQVRBX09OTFksIDB4QkIsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHhBQywKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweEIzLAorCURBVEFfT05MWSwgMHhCMSwKKwlEQVRBX09OTFksIDB4QUEsCisJREFUQV9PTkxZLCAweEJDLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4QjMsCisJRU5EREVGLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VxX2dhbW1hX2N0cmxbXSA9IHsKKwkweEZCLCAweDAyLAorCisJREFUQV9PTkxZLCAweDVBLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9nYW1tYV9zdGFydFtdID0geworCTB4RjksIENPTU1BTkRfT05MWSwKKworCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9hcG9uW10gPSB7CisJMHhGMywgMHgwMCwKKworCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDBBLAorCURBVEFfT05MWSwgMHgwMiwKKwlFTkRERUYsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzZXFfZGlzcGxheV9jdHJsW10gPSB7CisJMHhGMiwgMHgwMiwKKworCURBVEFfT05MWSwgMHgwOCwKKwlEQVRBX09OTFksIDB4MDgsCisJREFUQV9PTkxZLCAweDEwLAorCURBVEFfT05MWSwgMHgxMCwKKwlFTkRERUYsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzZXFfbWFudWFsX3B3cltdID0geworCTB4QjAsIDB4MDQsCisJRU5EREVGLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VxX3B3cl9jdHJsW10gPSB7CisJMHhGNCwgMHgwQSwKKworCURBVEFfT05MWSwgMHg4NywKKwlEQVRBX09OTFksIDB4MjUsCisJREFUQV9PTkxZLCAweDZBLAorCURBVEFfT05MWSwgMHg0NCwKKwlEQVRBX09OTFksIDB4MDIsCisJREFUQV9PTkxZLCAweDg4LAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9zbGVlcF9vdXRbXSA9IHsKKwkweDExLCBDT01NQU5EX09OTFksCisJRU5EREVGLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VxX3NsZWVwX2luW10gPSB7CisJMHgxMCwgQ09NTUFORF9PTkxZLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9kaXNwbGF5X29uW10gPSB7CisJMHgyOSwgQ09NTUFORF9PTkxZLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9kaXNwbGF5X29mZltdID0geworCTB4MjgsIENPTU1BTkRfT05MWSwKKwlFTkRERUYsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzZXFfdmNpMV8xc3RfZW5bXSA9IHsKKwkweEYzLCAweDEwLAorCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAyLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV92bDFfZW5bXSA9IHsKKwkweEYzLCAweDExLAorCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAyLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV92bDJfZW5bXSA9IHsKKwkweEYzLCAweDEzLAorCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAyLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV92Y2kxXzJuZF9lbltdID0geworCTB4RjMsIDB4MzMsCisKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDIsCisJRU5EREVGLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VxX3ZsM19lbltdID0geworCTB4RjMsIDB4MzcsCisKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDIsCisJRU5EREVGLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VxX3ZyZWcxX2FtcF9lbltdID0geworCTB4RjMsIDB4MzcsCisKKwlEQVRBX09OTFksIDB4MDEsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDIsCisJRU5EREVGLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VxX3ZnaF9hbXBfZW5bXSA9IHsKKwkweEYzLCAweDM3LAorCisJREFUQV9PTkxZLCAweDExLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAyLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV92Z2xfYW1wX2VuW10gPSB7CisJMHhGMywgMHgzNywKKworCURBVEFfT05MWSwgMHgzMSwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMiwKKwlFTkRERUYsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzZXFfdm1vc19hbXBfZW5bXSA9IHsKKwkweEYzLCAweDM3LAorCisJREFUQV9PTkxZLCAweEIxLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAzLAorCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV92aW50X2FtcF9lbltdID0geworCTB4RjMsIDB4MzcsCisKKwlEQVRBX09OTFksIDB4RjEsCisJLyogREFUQV9PTkxZLCAweDcxLAlWTU9TL1ZCTC9WQkggbm90IHVzZWQgKi8KKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMywKKwkvKiBEQVRBX09OTFksIDB4MDIsCVZNT1MvVkJML1ZCSCBub3QgdXNlZCAqLworCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV92YmhfYW1wX2VuW10gPSB7CisJMHhGMywgMHgzNywKKworCURBVEFfT05MWSwgMHhGOSwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMywKKwlFTkRERUYsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzZXFfdmJsX2FtcF9lbltdID0geworCTB4RjMsIDB4MzcsCisKKwlEQVRBX09OTFksIDB4RkQsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDMsCisJRU5EREVGLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VxX2dhbV9hbXBfZW5bXSA9IHsKKwkweEYzLCAweDM3LAorCisJREFUQV9PTkxZLCAweEZGLAorCS8qIERBVEFfT05MWSwgMHg3MywJVk1PUy9WQkwvVkJIIG5vdCB1c2VkICovCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDMsCisJLyogREFUQV9PTkxZLCAweDAyLAlWTU9TL1ZCTC9WQkggbm90IHVzZWQgKi8KKwlFTkRERUYsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzZXFfc2RfYW1wX2VuW10gPSB7CisJMHhGMywgMHgzNywKKworCURBVEFfT05MWSwgMHhGRiwKKwkvKiBEQVRBX09OTFksIDB4NzMsCVZNT1MvVkJML1ZCSCBub3QgdXNlZCAqLworCURBVEFfT05MWSwgMHg4MCwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweDAzLAorCS8qIERBVEFfT05MWSwgMHgwMiwJVk1PUy9WQkwvVkJIIG5vdCB1c2VkICovCisJRU5EREVGLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2VxX2dsc19lbltdID0geworCTB4RjMsIDB4MzcsCisKKwlEQVRBX09OTFksIDB4RkYsCisJLyogREFUQV9PTkxZLCAweDczLAlWTU9TL1ZCTC9WQkggbm90IHVzZWQgKi8KKwlEQVRBX09OTFksIDB4ODEsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMywKKwkvKiBEQVRBX09OTFksIDB4MDIsCVZNT1MvVkJML1ZCSCBub3QgdXNlZCAqLworCUVORERFRiwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNlcV9lbHNfZW5bXSA9IHsKKwkweEYzLCAweDM3LAorCisJREFUQV9PTkxZLCAweEZGLAorCS8qIERBVEFfT05MWSwgMHg3MywJVk1PUy9WQkwvVkJIIG5vdCB1c2VkICovCisJREFUQV9PTkxZLCAweDgzLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDMsCisJLyogREFUQV9PTkxZLCAweDAyLAlWTU9TL1ZCTC9WQkggbm90IHVzZWQgKi8KKwlFTkRERUYsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzZXFfZWxfb25bXSA9IHsKKwkweEYzLCAweDM3LAorCisJREFUQV9PTkxZLCAweEZGLAorCS8qIERBVEFfT05MWSwgMHg3MywJVk1PUy9WQkwvVkJIIG5vdCB1c2VkICovCisJREFUQV9PTkxZLCAweDg3LAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDMsCisJLyogREFUQV9PTkxZLCAweDAyLAlWTU9TL1ZCTC9WQkggbm90IHVzZWQgKi8KKwlFTkRERUYsIDB4MDAKK307CisKK3N0YXRpYyBpbnQgbGQ5MDQwX3NwaV93cml0ZV9ieXRlKHN0cnVjdCBsZDkwNDAgKmxjZCwgaW50IGFkZHIsIGludCBkYXRhKQoreworCXUxNiBidWZbMV07CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKworCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlciA9IHsKKwkJLmxlbgkJPSAyLAorCQkudHhfYnVmCQk9IGJ1ZiwKKwl9OworCisJYnVmWzBdID0gKGFkZHIgPDwgOCkgfCBkYXRhOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7CisKKwlyZXR1cm4gc3BpX3N5bmMobGNkLT5zcGksICZtc2cpOworfQorCitzdGF0aWMgaW50IGxkOTA0MF9zcGlfd3JpdGUoc3RydWN0IGxkOTA0MCAqbGNkLCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MsCisJdW5zaWduZWQgY2hhciBjb21tYW5kKQoreworCWludCByZXQgPSAwOworCisJaWYgKGFkZHJlc3MgIT0gREFUQV9PTkxZKQorCQlyZXQgPSBsZDkwNDBfc3BpX3dyaXRlX2J5dGUobGNkLCAweDAsIGFkZHJlc3MpOworCWlmIChjb21tYW5kICE9IENPTU1BTkRfT05MWSkKKwkJcmV0ID0gbGQ5MDQwX3NwaV93cml0ZV9ieXRlKGxjZCwgMHgxLCBjb21tYW5kKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGQ5MDQwX3BhbmVsX3NlbmRfc2VxdWVuY2Uoc3RydWN0IGxkOTA0MCAqbGNkLAorCWNvbnN0IHVuc2lnbmVkIHNob3J0ICp3YnVmKQoreworCWludCByZXQgPSAwLCBpID0gMDsKKworCXdoaWxlICgod2J1ZltpXSAmIERFRk1BU0spICE9IEVORERFRikgeworCQlpZiAoKHdidWZbaV0gJiBERUZNQVNLKSAhPSBTTEVFUE1TRUMpIHsKKwkJCXJldCA9IGxkOTA0MF9zcGlfd3JpdGUobGNkLCB3YnVmW2ldLCB3YnVmW2krMV0pOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJfSBlbHNlCisJCQl1ZGVsYXkod2J1ZltpKzFdKjEwMDApOworCQlpICs9IDI7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfbGQ5MDQwX2dhbW1hX2N0bChzdHJ1Y3QgbGQ5MDQwICpsY2QsIGNvbnN0IHVuc2lnbmVkIGludCAqZ2FtbWEpCit7CisJdW5zaWduZWQgaW50IGkgPSAwOworCWludCByZXQgPSAwOworCisJLyogc3RhcnQgZ2FtbWEgdGFibGUgdXBkYXRpbmcuICovCisJcmV0ID0gbGQ5MDQwX3BhbmVsX3NlbmRfc2VxdWVuY2UobGNkLCBzZXFfZ2FtbWFfc3RhcnQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihsY2QtPmRldiwgImZhaWxlZCB0byBkaXNhYmxlIGdhbW1hIHRhYmxlIHVwZGF0aW5nLlxuIik7CisJCWdvdG8gZ2FtbWFfZXJyOworCX0KKworCWZvciAoaSA9IDAgOyBpIDwgR0FNTUFfVEFCTEVfQ09VTlQ7IGkrKykgeworCQlyZXQgPSBsZDkwNDBfc3BpX3dyaXRlKGxjZCwgREFUQV9PTkxZLCBnYW1tYVtpXSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIobGNkLT5kZXYsICJmYWlsZWQgdG8gc2V0IGdhbW1hIHRhYmxlLlxuIik7CisJCQlnb3RvIGdhbW1hX2VycjsKKwkJfQorCX0KKworCS8qIHVwZGF0ZSBnYW1tYSB0YWJsZS4gKi8KKwlyZXQgPSBsZDkwNDBfcGFuZWxfc2VuZF9zZXF1ZW5jZShsY2QsIHNlcV9nYW1tYV9jdHJsKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGxjZC0+ZGV2LCAiZmFpbGVkIHRvIHVwZGF0ZSBnYW1tYSB0YWJsZS5cbiIpOworCitnYW1tYV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZDkwNDBfZ2FtbWFfY3RsKHN0cnVjdCBsZDkwNDAgKmxjZCwgaW50IGdhbW1hKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gX2xkOTA0MF9nYW1tYV9jdGwobGNkLCBnYW1tYV90YWJsZS5nYW1tYV8yMl90YWJsZVtnYW1tYV0pOworCisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IGxkOTA0MF9sZGlfaW5pdChzdHJ1Y3QgbGQ5MDQwICpsY2QpCit7CisJaW50IHJldCwgaTsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgKmluaXRfc2VxW10gPSB7CisJCXNlcV91c2VyX3NldHRpbmcsCisJCXNlcV9wYW5lbF9jb25kaXRpb24sCisJCXNlcV9kaXNwbGF5X2N0cmwsCisJCXNlcV9tYW51YWxfcHdyLAorCQlzZXFfZWx2c3Nfb24sCisJCXNlcV9ndGNvbiwKKwkJc2VxX2dhbW1hX3NldDEsCisJCXNlcV9nYW1tYV9jdHJsLAorCQlzZXFfc2xlZXBfb3V0LAorCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X3NlcSk7IGkrKykgeworCQlyZXQgPSBsZDkwNDBfcGFuZWxfc2VuZF9zZXF1ZW5jZShsY2QsIGluaXRfc2VxW2ldKTsKKwkJLyogd29ya2Fyb3VuZDogbWluaW11bSBkZWxheSB0aW1lIGZvciB0cmFuc2ZlcnJpbmcgQ01EICovCisJCXVkZWxheSgzMDApOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZDkwNDBfbGRpX2VuYWJsZShzdHJ1Y3QgbGQ5MDQwICpsY2QpCit7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBsZDkwNDBfcGFuZWxfc2VuZF9zZXF1ZW5jZShsY2QsIHNlcV9kaXNwbGF5X29uKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGQ5MDQwX2xkaV9kaXNhYmxlKHN0cnVjdCBsZDkwNDAgKmxjZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbGQ5MDQwX3BhbmVsX3NlbmRfc2VxdWVuY2UobGNkLCBzZXFfZGlzcGxheV9vZmYpOworCXJldCA9IGxkOTA0MF9wYW5lbF9zZW5kX3NlcXVlbmNlKGxjZCwgc2VxX3NsZWVwX2luKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGQ5MDQwX3Bvd2VyX29uKHN0cnVjdCBsZDkwNDAgKmxjZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbGNkX3BsYXRmb3JtX2RhdGEgKnBkID0gTlVMTDsKKwlwZCA9IGxjZC0+bGNkX3BkOworCWlmICghcGQpIHsKKwkJZGV2X2VycihsY2QtPmRldiwgInBsYXRmb3JtIGRhdGEgaXMgTlVMTC5cbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXBkLT5wb3dlcl9vbikgeworCQlkZXZfZXJyKGxjZC0+ZGV2LCAicG93ZXJfb24gaXMgTlVMTC5cbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlwZC0+cG93ZXJfb24obGNkLT5sZCwgMSk7CisJCW1kZWxheShwZC0+cG93ZXJfb25fZGVsYXkpOworCX0KKworCWlmICghcGQtPnJlc2V0KSB7CisJCWRldl9lcnIobGNkLT5kZXYsICJyZXNldCBpcyBOVUxMLlxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCXBkLT5yZXNldChsY2QtPmxkKTsKKwkJbWRlbGF5KHBkLT5yZXNldF9kZWxheSk7CisJfQorCisJcmV0ID0gbGQ5MDQwX2xkaV9pbml0KGxjZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGxjZC0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgbGRpLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbGQ5MDQwX2xkaV9lbmFibGUobGNkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIobGNkLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGxkaS5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxkOTA0MF9wb3dlcl9vZmYoc3RydWN0IGxkOTA0MCAqbGNkKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBsY2RfcGxhdGZvcm1fZGF0YSAqcGQgPSBOVUxMOworCisJcGQgPSBsY2QtPmxjZF9wZDsKKwlpZiAoIXBkKSB7CisJCWRldl9lcnIobGNkLT5kZXYsICJwbGF0Zm9ybSBkYXRhIGlzIE5VTEwuXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0ID0gbGQ5MDQwX2xkaV9kaXNhYmxlKGxjZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGxjZC0+ZGV2LCAibGNkIHNldHRpbmcgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCW1kZWxheShwZC0+cG93ZXJfb2ZmX2RlbGF5KTsKKworCWlmICghcGQtPnBvd2VyX29uKSB7CisJCWRldl9lcnIobGNkLT5kZXYsICJwb3dlcl9vbiBpcyBOVUxMLlxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZQorCQlwZC0+cG93ZXJfb24obGNkLT5sZCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZDkwNDBfcG93ZXIoc3RydWN0IGxkOTA0MCAqbGNkLCBpbnQgcG93ZXIpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAocG93ZXJfaXNfb24ocG93ZXIpICYmICFwb3dlcl9pc19vbihsY2QtPnBvd2VyKSkKKwkJcmV0ID0gbGQ5MDQwX3Bvd2VyX29uKGxjZCk7CisJZWxzZSBpZiAoIXBvd2VyX2lzX29uKHBvd2VyKSAmJiBwb3dlcl9pc19vbihsY2QtPnBvd2VyKSkKKwkJcmV0ID0gbGQ5MDQwX3Bvd2VyX29mZihsY2QpOworCisJaWYgKCFyZXQpCisJCWxjZC0+cG93ZXIgPSBwb3dlcjsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGQ5MDQwX3NldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqbGQsIGludCBwb3dlcikKK3sKKwlzdHJ1Y3QgbGQ5MDQwICpsY2QgPSBsY2RfZ2V0X2RhdGEobGQpOworCisJaWYgKHBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTksgJiYgcG93ZXIgIT0gRkJfQkxBTktfUE9XRVJET1dOICYmCisJCXBvd2VyICE9IEZCX0JMQU5LX05PUk1BTCkgeworCQlkZXZfZXJyKGxjZC0+ZGV2LCAicG93ZXIgdmFsdWUgc2hvdWxkIGJlIDAsIDEgb3IgNC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gbGQ5MDQwX3Bvd2VyKGxjZCwgcG93ZXIpOworfQorCitzdGF0aWMgaW50IGxkOTA0MF9nZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxkKQoreworCXN0cnVjdCBsZDkwNDAgKmxjZCA9IGxjZF9nZXRfZGF0YShsZCk7CisKKwlyZXR1cm4gbGNkLT5wb3dlcjsKK30KKworc3RhdGljIGludCBsZDkwNDBfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCXJldHVybiBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKK30KKworc3RhdGljIGludCBsZDkwNDBfc2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCWludCByZXQgPSAwLCBicmlnaHRuZXNzID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisJc3RydWN0IGxkOTA0MCAqbGNkID0gYmxfZ2V0X2RhdGEoYmQpOworCisJaWYgKGJyaWdodG5lc3MgPCBNSU5fQlJJR0hUTkVTUyB8fAorCQlicmlnaHRuZXNzID4gYmQtPnByb3BzLm1heF9icmlnaHRuZXNzKSB7CisJCWRldl9lcnIoJmJkLT5kZXYsICJsY2QgYnJpZ2h0bmVzcyBzaG91bGQgYmUgJWQgdG8gJWQuXG4iLAorCQkJTUlOX0JSSUdIVE5FU1MsIE1BWF9CUklHSFRORVNTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gbGQ5MDQwX2dhbW1hX2N0bChsY2QsIGJkLT5wcm9wcy5icmlnaHRuZXNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmJkLT5kZXYsICJsY2QgYnJpZ2h0bmVzcyBzZXR0aW5nIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGxjZF9vcHMgbGQ5MDQwX2xjZF9vcHMgPSB7CisJLnNldF9wb3dlciA9IGxkOTA0MF9zZXRfcG93ZXIsCisJLmdldF9wb3dlciA9IGxkOTA0MF9nZXRfcG93ZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgbGQ5MDQwX2JhY2tsaWdodF9vcHMgID0geworCS5nZXRfYnJpZ2h0bmVzcyA9IGxkOTA0MF9nZXRfYnJpZ2h0bmVzcywKKwkudXBkYXRlX3N0YXR1cyA9IGxkOTA0MF9zZXRfYnJpZ2h0bmVzcywKK307CisKKworc3RhdGljIGludCBsZDkwNDBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbGQ5MDQwICpsY2QgPSBOVUxMOworCXN0cnVjdCBsY2RfZGV2aWNlICpsZCA9IE5VTEw7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gTlVMTDsKKworCWxjZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZDkwNDApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBsZDkwNDAgbGNkIHBhbmVsIHVzZXMgMy13aXJlIDliaXRzIFNQSSBNb2RlLiAqLworCXNwaS0+Yml0c19wZXJfd29yZCA9IDk7CisKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgInNwaSBzZXR1cCBmYWlsZWQuXG4iKTsKKwkJZ290byBvdXRfZnJlZV9sY2Q7CisJfQorCisJbGNkLT5zcGkgPSBzcGk7CisJbGNkLT5kZXYgPSAmc3BpLT5kZXY7CisKKwlsY2QtPmxjZF9wZCA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFsY2QtPmxjZF9wZCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgInBsYXRmb3JtIGRhdGEgaXMgTlVMTC5cbiIpOworCQlnb3RvIG91dF9mcmVlX2xjZDsKKwl9CisKKwlsZCA9IGxjZF9kZXZpY2VfcmVnaXN0ZXIoImxkOTA0MCIsICZzcGktPmRldiwgbGNkLCAmbGQ5MDQwX2xjZF9vcHMpOworCWlmIChJU19FUlIobGQpKSB7CisJCXJldCA9IFBUUl9FUlIobGQpOworCQlnb3RvIG91dF9mcmVlX2xjZDsKKwl9CisKKwlsY2QtPmxkID0gbGQ7CisKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImxkOTA0MC1ibCIsICZzcGktPmRldiwKKwkJbGNkLCAmbGQ5MDQwX2JhY2tsaWdodF9vcHMsIE5VTEwpOworCWlmIChJU19FUlIobGQpKSB7CisJCXJldCA9IFBUUl9FUlIobGQpOworCQlnb3RvIG91dF9mcmVlX2xjZDsKKwl9CisKKwliZC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBNQVhfQlJJR0hUTkVTUzsKKwliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IE1BWF9CUklHSFRORVNTOworCWxjZC0+YmQgPSBiZDsKKworCS8qCisJICogaWYgbGNkIHBhbmVsIHdhcyBvbiBmcm9tIGJvb3Rsb2FkZXIgbGlrZSB1LWJvb3QgdGhlbgorCSAqIGRvIG5vdCBsY2Qgb24uCisJICovCisJaWYgKCFsY2QtPmxjZF9wZC0+bGNkX2VuYWJsZWQpIHsKKwkJLyoKKwkJICogaWYgbGNkIHBhbmVsIHdhcyBvZmYgZnJvbSBib290bG9hZGVyIHRoZW4KKwkJICogY3VycmVudCBsY2Qgc3RhdHVzIGlzIHBvd2VyZG93biBhbmQgdGhlbgorCQkgKiBpdCBlbmFibGVzIGxjZCBwYW5lbC4KKwkJICovCisJCWxjZC0+cG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisKKwkJbGQ5MDQwX3Bvd2VyKGxjZCwgRkJfQkxBTktfVU5CTEFOSyk7CisJfSBlbHNlCisJCWxjZC0+cG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgbGNkKTsKKworCWRldl9pbmZvKCZzcGktPmRldiwgImxkOTA0MCBwYW5lbCBkcml2ZXIgaGFzIGJlZW4gcHJvYmVkLlxuIik7CisJcmV0dXJuIDA7CisKK291dF9mcmVlX2xjZDoKKwlrZnJlZShsY2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGxkOTA0MF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbGQ5MDQwICpsY2QgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWxkOTA0MF9wb3dlcihsY2QsIEZCX0JMQU5LX1BPV0VSRE9XTik7CisJbGNkX2RldmljZV91bnJlZ2lzdGVyKGxjZC0+bGQpOworCWtmcmVlKGxjZCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1BNKQorc3RhdGljIGludCBsZDkwNDBfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbGQ5MDQwICpsY2QgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWRldl9kYmcoJnNwaS0+ZGV2LCAibGNkLT5wb3dlciA9ICVkXG4iLCBsY2QtPnBvd2VyKTsKKworCS8qCisJICogd2hlbiBsY2QgcGFuZWwgaXMgc3VzcGVuZCwgbGNkIHBhbmVsIGJlY29tZXMgb2ZmCisJICogcmVnYXJkbGVzcyBvZiBzdGF0dXMuCisJICovCisJcmV0ID0gbGQ5MDQwX3Bvd2VyKGxjZCwgRkJfQkxBTktfUE9XRVJET1dOKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGQ5MDQwX3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBsZDkwNDAgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJbGNkLT5wb3dlciA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKKworCXJldCA9IGxkOTA0MF9wb3dlcihsY2QsIEZCX0JMQU5LX1VOQkxBTkspOworCisJcmV0dXJuIHJldDsKK30KKyNlbHNlCisjZGVmaW5lIGxkOTA0MF9zdXNwZW5kCQlOVUxMCisjZGVmaW5lIGxkOTA0MF9yZXN1bWUJCU5VTEwKKyNlbmRpZgorCisvKiBQb3dlciBkb3duIGFsbCBkaXNwbGF5cyBvbiByZWJvb3QsIHBvd2Vyb2ZmIG9yIGhhbHQuICovCitzdGF0aWMgdm9pZCBsZDkwNDBfc2h1dGRvd24oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbGQ5MDQwICpsY2QgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWxkOTA0MF9wb3dlcihsY2QsIEZCX0JMQU5LX1BPV0VSRE9XTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsZDkwNDBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImxkOTA0MCIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBsZDkwNDBfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChsZDkwNDBfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBsZDkwNDBfc2h1dGRvd24sCisJLnN1c3BlbmQJPSBsZDkwNDBfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGxkOTA0MF9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsZDkwNDBfaW5pdCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZsZDkwNDBfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxkOTA0MF9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZsZDkwNDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobGQ5MDQwX2luaXQpOworbW9kdWxlX2V4aXQobGQ5MDQwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEb25naHdhIExlZSA8ZGgwOS5sZWVAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImxkOTA0MCBMQ0QgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sZDkwNDBfZ2FtbWEuaCBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xkOTA0MF9nYW1tYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOGQ5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sZDkwNDBfZ2FtbWEuaApAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIEdhbW1hIGxldmVsIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBJbktpIERhZSA8aW5raS5kYWVAc2Ftc3VuZy5jb20+CisgKiBEb25naHdhIExlZSA8ZGgwOS5sZWVAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX0xEOTA0MF9CUklHSFRORVNTX0gKKyNkZWZpbmUgX0xEOTA0MF9CUklHSFRORVNTX0gKKworI2RlZmluZSBNQVhfR0FNTUFfTEVWRUwJCTI1CisjZGVmaW5lIEdBTU1BX1RBQkxFX0NPVU5UCTIxCisKKy8qIGdhbW1hIHZhbHVlOiAyLjIgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzMwMFtdID0geworCTB4MDAsIDB4YTcsIDB4YjQsIDB4YWUsIDB4YmYsIDB4MDAsIDB4OTEsCisJMHgwMCwgMHhiMiwgMHhiNCwgMHhhYSwgMHhiYiwgMHgwMCwgMHhhYywKKwkweDAwLCAweGIzLCAweGIxLCAweGFhLCAweGJjLCAweDAwLCAweGIzCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxkOTA0MF8yMl8yOTBbXSA9IHsKKwkweDAwLCAweGE5LCAweGI3LCAweGFlLCAweGJkLCAweDAwLCAweDg5LAorCTB4MDAsIDB4YjcsIDB4YjYsIDB4YTgsIDB4YmEsIDB4MDAsIDB4YTQsCisJMHgwMCwgMHhiMSwgMHhiNCwgMHhhYSwgMHhiYiwgMHgwMCwgMHhhYQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZDkwNDBfMjJfMjgwW10gPSB7CisJMHgwMCwgMHhhOSwgMHhiNiwgMHhhZCwgMHhiZiwgMHgwMCwgMHg4NiwKKwkweDAwLCAweGI4LCAweGI1LCAweGE4LCAweGJjLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YjMsIDB4YjMsIDB4YTksIDB4YmMsIDB4MDAsIDB4YTcKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzI3MFtdID0geworCTB4MDAsIDB4YTgsIDB4YjgsIDB4YWUsIDB4YmUsIDB4MDAsIDB4ODQsCisJMHgwMCwgMHhiOSwgMHhiNywgMHhhOCwgMHhiYywgMHgwMCwgMHg5ZCwKKwkweDAwLCAweGIyLCAweGI1LCAweGFhLCAweGJjLCAweDAwLCAweGE0CisKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxkOTA0MF8yMl8yNjBbXSA9IHsKKwkweDAwLCAweGE0LCAweGI4LCAweGIwLCAweGJmLCAweDAwLCAweDgwLAorCTB4MDAsIDB4YjgsIDB4YjYsIDB4YWEsIDB4YmMsIDB4MDAsIDB4OWEsCisJMHgwMCwgMHhiMCwgMHhiNSwgMHhhYiwgMHhiZCwgMHgwMCwgMHhhMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZDkwNDBfMjJfMjUwW10gPSB7CisJMHgwMCwgMHhhNCwgMHhiOSwgMHhhZiwgMHhjMSwgMHgwMCwgMHg3ZCwKKwkweDAwLCAweGI5LCAweGI2LCAweGFhLCAweGJiLCAweDAwLCAweDk3LAorCTB4MDAsIDB4YjEsIDB4YjUsIDB4YWEsIDB4YmYsIDB4MDAsIDB4OWQKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzI0MFtdID0geworCTB4MDAsIDB4YTIsIDB4YjksIDB4YWYsIDB4YzIsIDB4MDAsIDB4N2EsCisJMHgwMCwgMHhiOSwgMHhiNywgMHhhYSwgMHhiZCwgMHgwMCwgMHg5NCwKKwkweDAwLCAweGIwLCAweGI1LCAweGFiLCAweGJmLCAweDAwLCAweDlhCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxkOTA0MF8yMl8yMzBbXSA9IHsKKwkweDAwLCAweGEwLCAweGI5LCAweGFmLCAweGMzLCAweDAwLCAweDc3LAorCTB4MDAsIDB4YjksIDB4YjcsIDB4YWIsIDB4YmUsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHhiMCwgMHhiNiwgMHhhYiwgMHhiZiwgMHgwMCwgMHg5NworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZDkwNDBfMjJfMjIwW10gPSB7CisJMHgwMCwgMHg5ZSwgMHhiYSwgMHhiMCwgMHhjMiwgMHgwMCwgMHg3NSwKKwkweDAwLCAweGI5LCAweGI4LCAweGFiLCAweGJlLCAweDAwLCAweDhlLAorCTB4MDAsIDB4YjAsIDB4YjYsIDB4YWMsIDB4YmYsIDB4MDAsIDB4OTQKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzIxMFtdID0geworCTB4MDAsIDB4OWMsIDB4YjksIDB4YjAsIDB4YzQsIDB4MDAsIDB4NzIsCisJMHgwMCwgMHhiOCwgMHhiOCwgMHhhYywgMHhiZiwgMHgwMCwgMHg4YSwKKwkweDAwLCAweGIwLCAweGI2LCAweGFjLCAweGMwLCAweDAwLCAweDkxCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxkOTA0MF8yMl8yMDBbXSA9IHsKKwkweDAwLCAweDlhLCAweGJhLCAweGIxLCAweGM0LCAweDAwLCAweDZmLAorCTB4MDAsIDB4YjgsIDB4YjgsIDB4YWQsIDB4YzAsIDB4MDAsIDB4ODYsCisJMHgwMCwgMHhiMCwgMHhiNywgMHhhZCwgMHhjMCwgMHgwMCwgMHg4ZAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZDkwNDBfMjJfMTkwW10gPSB7CisJMHgwMCwgMHg5NywgMHhiYSwgMHhiMiwgMHhjNSwgMHgwMCwgMHg2YywKKwkweDAwLCAweGI4LCAweGI4LCAweGFlLCAweGMxLCAweDAwLCAweDgyLAorCTB4MDAsIDB4YjAsIDB4YjYsIDB4YWUsIDB4YzIsIDB4MDAsIDB4ODkKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzE4MFtdID0geworCTB4MDAsIDB4OTMsIDB4YmEsIDB4YjMsIDB4YzUsIDB4MDAsIDB4NjksCisJMHgwMCwgMHhiOCwgMHhiOSwgMHhhZSwgMHhjMSwgMHgwMCwgMHg3ZiwKKwkweDAwLCAweGIwLCAweGI2LCAweGFlLCAweGMzLCAweDAwLCAweDg1Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxkOTA0MF8yMl8xNzBbXSA9IHsKKwkweDAwLCAweDhiLCAweGI5LCAweGIzLCAweGM3LCAweDAwLCAweDY1LAorCTB4MDAsIDB4YjcsIDB4YjgsIDB4YWYsIDB4YzMsIDB4MDAsIDB4N2EsCisJMHgwMCwgMHg4MCwgMHhiNiwgMHhhZSwgMHhjNCwgMHgwMCwgMHg4MQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZDkwNDBfMjJfMTYwW10gPSB7CisJMHgwMCwgMHg4OSwgMHhiYSwgMHhiMywgMHhjOCwgMHgwMCwgMHg2MiwKKwkweDAwLCAweGI2LCAweGJhLCAweGFmLCAweGMzLCAweDAwLCAweDc2LAorCTB4MDAsIDB4YWYsIDB4YjcsIDB4YWUsIDB4YzQsIDB4MDAsIDB4N2UKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzE1MFtdID0geworCTB4MDAsIDB4ODIsIDB4YmEsIDB4YjQsIDB4YzcsIDB4MDAsIDB4NWYsCisJMHgwMCwgMHhiNSwgMHhiYSwgMHhiMCwgMHhjMywgMHgwMCwgMHg3MiwKKwkweDAwLCAweGFlLCAweGI4LCAweGIwLCAweGMzLCAweDAwLCAweDdhCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxkOTA0MF8yMl8xNDBbXSA9IHsKKwkweDAwLCAweDdiLCAweGJiLCAweGI0LCAweGM4LCAweDAwLCAweDViLAorCTB4MDAsIDB4YjUsIDB4YmEsIDB4YjEsIDB4YzQsIDB4MDAsIDB4NmUsCisJMHgwMCwgMHhhZSwgMHhiOSwgMHhiMCwgMHhjNSwgMHgwMCwgMHg3NQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZDkwNDBfMjJfMTMwW10gPSB7CisJMHgwMCwgMHg3MSwgMHhiYiwgMHhiNSwgMHhjOCwgMHgwMCwgMHg1NywKKwkweDAwLCAweGI1LCAweGJiLCAweGIwLCAweGM1LCAweDAwLCAweDZhLAorCTB4MDAsIDB4YWUsIDB4YjksIDB4YjEsIDB4YzYsIDB4MDAsIDB4NzAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzEyMFtdID0geworCTB4MDAsIDB4NDcsIDB4YmEsIDB4YjYsIDB4Y2EsIDB4MDAsIDB4NTMsCisJMHgwMCwgMHhiNSwgMHhiYiwgMHhiMywgMHhjNiwgMHgwMCwgMHg2NSwKKwkweDAwLCAweGFlLCAweGI4LCAweGIzLCAweGM3LCAweDAwLCAweDZjCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxkOTA0MF8yMl8xMTBbXSA9IHsKKwkweDAwLCAweDEzLCAweGJiLCAweGI3LCAweGNhLCAweDAwLCAweDRmLAorCTB4MDAsIDB4YjQsIDB4YmIsIDB4YjMsIDB4YzcsIDB4MDAsIDB4NjAsCisJMHgwMCwgMHhhZCwgMHhiOCwgMHhiNCwgMHhjNywgMHgwMCwgMHg2NworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsZDkwNDBfMjJfMTAwW10gPSB7CisJMHgwMCwgMHgxMywgMHhiYSwgMHhiOCwgMHhjYiwgMHgwMCwgMHg0YiwKKwkweDAwLCAweGIzLCAweGJjLCAweGI0LCAweGM3LCAweDAwLCAweDVjLAorCTB4MDAsIDB4YWMsIDB4YjgsIDB4YjQsIDB4YzgsIDB4MDAsIDB4NjIKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzkwW10gPSB7CisJMHgwMCwgMHgxMywgMHhiOSwgMHhiOCwgMHhjZCwgMHgwMCwgMHg0NiwKKwkweDAwLCAweGIxLCAweGJjLCAweGI1LCAweGM4LCAweDAwLCAweDU2LAorCTB4MDAsIDB4YWEsIDB4YjgsIDB4YjQsIDB4YzksIDB4MDAsIDB4NWQKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzgwW10gPSB7CisJMHgwMCwgMHgxMywgMHhiYSwgMHhiOSwgMHhjZCwgMHgwMCwgMHg0MSwKKwkweDAwLCAweGIwLCAweGJlLCAweGI1LCAweGM5LCAweDAwLCAweDUxLAorCTB4MDAsIDB4YTksIDB4YjksIDB4YjUsIDB4Y2EsIDB4MDAsIDB4NTcKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzcwW10gPSB7CisJMHgwMCwgMHgxMywgMHhiOSwgMHhiOSwgMHhkMCwgMHgwMCwgMHgzYywKKwkweDAwLCAweGFmLCAweGJmLCAweGI2LCAweGNiLCAweDAwLCAweDRiLAorCTB4MDAsIDB4YTgsIDB4YjksIDB4YjUsIDB4Y2MsIDB4MDAsIDB4NTIKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGQ5MDQwXzIyXzUwW10gPSB7CisJMHgwMCwgMHgxMywgMHhiMiwgMHhiYSwgMHhkMiwgMHgwMCwgMHgzMCwKKwkweDAwLCAweGFmLCAweGMwLCAweGI4LCAweGNkLCAweDAwLCAweDNkLAorCTB4MDAsIDB4YTgsIDB4YjgsIDB4YjcsIDB4Y2QsIDB4MDAsIDB4NDQKK307CisKK3N0cnVjdCBsZDkwNDBfZ2FtbWEgeworCXVuc2lnbmVkIGludCAqZ2FtbWFfMjJfdGFibGVbTUFYX0dBTU1BX0xFVkVMXTsKK30gZ2FtbWFfdGFibGUgPSB7CisJLmdhbW1hXzIyX3RhYmxlWzBdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfNTAsCisJLmdhbW1hXzIyX3RhYmxlWzFdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfNzAsCisJLmdhbW1hXzIyX3RhYmxlWzJdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfODAsCisJLmdhbW1hXzIyX3RhYmxlWzNdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfOTAsCisJLmdhbW1hXzIyX3RhYmxlWzRdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfMTAwLAorCS5nYW1tYV8yMl90YWJsZVs1XSA9ICh1bnNpZ25lZCBpbnQgKikmbGQ5MDQwXzIyXzExMCwKKwkuZ2FtbWFfMjJfdGFibGVbNl0gPSAodW5zaWduZWQgaW50ICopJmxkOTA0MF8yMl8xMjAsCisJLmdhbW1hXzIyX3RhYmxlWzddID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfMTMwLAorCS5nYW1tYV8yMl90YWJsZVs4XSA9ICh1bnNpZ25lZCBpbnQgKikmbGQ5MDQwXzIyXzE0MCwKKwkuZ2FtbWFfMjJfdGFibGVbOV0gPSAodW5zaWduZWQgaW50ICopJmxkOTA0MF8yMl8xNTAsCisJLmdhbW1hXzIyX3RhYmxlWzEwXSA9ICh1bnNpZ25lZCBpbnQgKikmbGQ5MDQwXzIyXzE2MCwKKwkuZ2FtbWFfMjJfdGFibGVbMTFdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfMTcwLAorCS5nYW1tYV8yMl90YWJsZVsxMl0gPSAodW5zaWduZWQgaW50ICopJmxkOTA0MF8yMl8xODAsCisJLmdhbW1hXzIyX3RhYmxlWzEzXSA9ICh1bnNpZ25lZCBpbnQgKikmbGQ5MDQwXzIyXzE5MCwKKwkuZ2FtbWFfMjJfdGFibGVbMTRdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfMjAwLAorCS5nYW1tYV8yMl90YWJsZVsxNV0gPSAodW5zaWduZWQgaW50ICopJmxkOTA0MF8yMl8yMTAsCisJLmdhbW1hXzIyX3RhYmxlWzE2XSA9ICh1bnNpZ25lZCBpbnQgKikmbGQ5MDQwXzIyXzIyMCwKKwkuZ2FtbWFfMjJfdGFibGVbMTddID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfMjMwLAorCS5nYW1tYV8yMl90YWJsZVsxOF0gPSAodW5zaWduZWQgaW50ICopJmxkOTA0MF8yMl8yNDAsCisJLmdhbW1hXzIyX3RhYmxlWzE5XSA9ICh1bnNpZ25lZCBpbnQgKikmbGQ5MDQwXzIyXzI1MCwKKwkuZ2FtbWFfMjJfdGFibGVbMjBdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfMjYwLAorCS5nYW1tYV8yMl90YWJsZVsyMV0gPSAodW5zaWduZWQgaW50ICopJmxkOTA0MF8yMl8yNzAsCisJLmdhbW1hXzIyX3RhYmxlWzIyXSA9ICh1bnNpZ25lZCBpbnQgKikmbGQ5MDQwXzIyXzI4MCwKKwkuZ2FtbWFfMjJfdGFibGVbMjNdID0gKHVuc2lnbmVkIGludCAqKSZsZDkwNDBfMjJfMjkwLAorCS5nYW1tYV8yMl90YWJsZVsyNF0gPSAodW5zaWduZWQgaW50ICopJmxkOTA0MF8yMl8zMDAsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKaW5kZXggZDJmNTkwMS4uYmJjYTMxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKQEAgLTE4NCw2ICsxODQsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDQ7CiAJbG9jb21vbGNkX2JsX2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImxvY29tby1ibCIsCiAJCQkJCQkJJmxkZXYtPmRldiwgTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYwppbmRleCAyMDlhY2MxLi4wN2U4ZTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYXg4OTI1X2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWF4ODkyNV9ibC5jCkBAIC0xMzYsNiArMTM2LDcgQEAKIAlkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPSAwOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1M7CiAJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsICZwZGV2LT5kZXYsIGRhdGEsCiAJCQkJCSZtYXg4OTI1X2JhY2tsaWdodF9vcHMsICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ODVmNzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAwICswLDAgQEAKLS8qCi0gKiAgQmFja2xpZ2h0IERyaXZlciBmb3IgTnZpZGlhIDg2MDAgaW4gTWFjYm9vayBQcm8KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSBSZWQgSGF0IDxtamdAcmVkaGF0LmNvbT4KLSAqICBCYXNlZCBvbiBjb2RlIGZyb20gUG9tbWVkOgotICogIENvcHlyaWdodCAoQykgMjAwNiBOaWNvbGFzIEJvaWNoYXQgPG5pY29sYXMgQGJvaWNoYXQuY2g+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA2IEZlbGlwZSBBbGZhcm8gU29sYW5hIDxmZWxpcGVfYWxmYXJvIEBsaW51eG1haWwub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNyBKdWxpZW4gQkxBQ0hFIDxqYkBqYmxhY2hlLm9yZz4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBUaGlzIGRyaXZlciB0cmlnZ2VycyBTTUlzIHdoaWNoIGNhdXNlIHRoZSBmaXJtd2FyZSB0byBjaGFuZ2UgdGhlCi0gKiAgYmFja2xpZ2h0IGJyaWdodG5lc3MuIFRoaXMgaXMgaWNreSBpbiBtYW55IHdheXMsIGJ1dCBpdCdzIGltcHJhY3RpY2FsIHRvCi0gKiAgZ2V0IGF0IHRoZSBmaXJtd2FyZSBjb2RlIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGFjdHVhbGx5IGRvaW5nLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICptYnBfYmFja2xpZ2h0X2RldmljZTsKLQotLyogU3RydWN0dXJlIHRvIGJlIHBhc3NlZCB0byB0aGUgRE1JX01BVENIIGZ1bmN0aW9uLiAqLwotc3RydWN0IGRtaV9tYXRjaF9kYXRhIHsKLQkvKiBJL08gcmVzb3VyY2UgdG8gYWxsb2NhdGUuICovCi0JdW5zaWduZWQgbG9uZyBpb3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgaW9sZW47Ci0JLyogQmFja2xpZ2h0IG9wZXJhdGlvbnMgc3RydWN0dXJlLiAqLwotCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGJhY2tsaWdodF9vcHM7Ci19OwotCi0vKiBNb2R1bGUgcGFyYW1ldGVycy4gKi8KLXN0YXRpYyBpbnQgZGVidWc7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlNldCB0byBvbmUgdG8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcy4iKTsKLQotLyoKLSAqIEltcGxlbWVudGF0aW9uIGZvciBNYWNCb29rcyB3aXRoIEludGVsIGNoaXBzZXQuCi0gKi8KLXN0YXRpYyBpbnQgaW50ZWxfY2hpcHNldF9zZW5kX2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCi17Ci0JaW50IGludGVuc2l0eSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwotCi0JaWYgKGRlYnVnKQotCQlwcmludGsoS0VSTl9ERUJVRyAibWJwX252aWRpYV9ibDogc2V0dGluZyBicmlnaHRuZXNzIHRvICVkXG4iLAotCQkgICAgICAgaW50ZW5zaXR5KTsKLQotCW91dGIoMHgwNCB8IChpbnRlbnNpdHkgPDwgNCksIDB4YjMpOwotCW91dGIoMHhiZiwgMHhiMik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfY2hpcHNldF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlpbnQgaW50ZW5zaXR5OwotCi0Jb3V0YigweDAzLCAweGIzKTsKLQlvdXRiKDB4YmYsIDB4YjIpOwotCWludGVuc2l0eSA9IGluYigweGIzKSA+PiA0OwotCi0JaWYgKGRlYnVnKQotCQlwcmludGsoS0VSTl9ERUJVRyAibWJwX252aWRpYV9ibDogcmVhZCBicmlnaHRuZXNzIG9mICVkXG4iLAotCQkgICAgICAgaW50ZW5zaXR5KTsKLQotCXJldHVybiBpbnRlbnNpdHk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX21hdGNoX2RhdGEgaW50ZWxfY2hpcHNldF9kYXRhID0gewotCS5pb3N0YXJ0ID0gMHhiMiwKLQkuaW9sZW4gPSAyLAotCS5iYWNrbGlnaHRfb3BzCT0gewotCQkub3B0aW9ucwk9IEJMX0NPUkVfU1VTUEVORFJFU1VNRSwKLQkJLmdldF9icmlnaHRuZXNzCT0gaW50ZWxfY2hpcHNldF9nZXRfaW50ZW5zaXR5LAotCQkudXBkYXRlX3N0YXR1cwk9IGludGVsX2NoaXBzZXRfc2VuZF9pbnRlbnNpdHksCi0JfQotfTsKLQotLyoKLSAqIEltcGxlbWVudGF0aW9uIGZvciBNYWNCb29rcyB3aXRoIE52aWRpYSBjaGlwc2V0LgotICovCi1zdGF0aWMgaW50IG52aWRpYV9jaGlwc2V0X3NlbmRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlpbnQgaW50ZW5zaXR5ID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Ci0KLQlpZiAoZGVidWcpCi0JCXByaW50ayhLRVJOX0RFQlVHICJtYnBfbnZpZGlhX2JsOiBzZXR0aW5nIGJyaWdodG5lc3MgdG8gJWRcbiIsCi0JCSAgICAgICBpbnRlbnNpdHkpOwotCi0Jb3V0YigweDA0IHwgKGludGVuc2l0eSA8PCA0KSwgMHg1MmYpOwotCW91dGIoMHhiZiwgMHg1MmUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG52aWRpYV9jaGlwc2V0X2dldF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCWludCBpbnRlbnNpdHk7Ci0KLQlvdXRiKDB4MDMsIDB4NTJmKTsKLQlvdXRiKDB4YmYsIDB4NTJlKTsKLQlpbnRlbnNpdHkgPSBpbmIoMHg1MmYpID4+IDQ7Ci0KLQlpZiAoZGVidWcpCi0JCXByaW50ayhLRVJOX0RFQlVHICJtYnBfbnZpZGlhX2JsOiByZWFkIGJyaWdodG5lc3Mgb2YgJWRcbiIsCi0JCSAgICAgICBpbnRlbnNpdHkpOwotCi0JcmV0dXJuIGludGVuc2l0eTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfbWF0Y2hfZGF0YSBudmlkaWFfY2hpcHNldF9kYXRhID0gewotCS5pb3N0YXJ0ID0gMHg1MmUsCi0JLmlvbGVuID0gMiwKLQkuYmFja2xpZ2h0X29wcwkJPSB7Ci0JCS5vcHRpb25zCT0gQkxfQ09SRV9TVVNQRU5EUkVTVU1FLAotCQkuZ2V0X2JyaWdodG5lc3MJPSBudmlkaWFfY2hpcHNldF9nZXRfaW50ZW5zaXR5LAotCQkudXBkYXRlX3N0YXR1cwk9IG52aWRpYV9jaGlwc2V0X3NlbmRfaW50ZW5zaXR5Ci0JfQotfTsKLQotLyoKLSAqIERNSSBtYXRjaGluZy4KLSAqLwotc3RhdGljIC8qIGNvbnN0ICovIHN0cnVjdCBkbWlfbWF0Y2hfZGF0YSAqZHJpdmVyX2RhdGE7Ci0KLXN0YXRpYyBpbnQgbWJwX2RtaV9tYXRjaChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCi17Ci0JZHJpdmVyX2RhdGEgPSBpZC0+ZHJpdmVyX2RhdGE7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJtYnBfbnZpZGlhX2JsOiAlcyBkZXRlY3RlZFxuIiwgaWQtPmlkZW50KTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgbWJwX2RldmljZV90YWJsZVtdID0gewotCXsKLQkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKLQkJLmlkZW50CQk9ICJNYWNCb29rIDEsMSIsCi0JCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgQ29tcHV0ZXIsIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9vazEsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9vayAyLDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9vazIsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9vayAzLDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9vazMsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9vayA0LDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9vazQsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9vayA0LDIiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9vazQsMiIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va1BybyAxLDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzEsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va1BybyAxLDIiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzEsMiIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va1BybyAyLDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzIsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va1BybyAyLDIiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzIsMiIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va1BybyAzLDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzMsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va1BybyAzLDIiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzMsMiIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va1BybyA0LDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzQsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va0FpciAxLDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va0FpcjEsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZpbnRlbF9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9vayA1LDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9vazUsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAotCX0sCi0JewotCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAotCQkuaWRlbnQJCT0gIk1hY0Jvb2sgNSwyIiwKLQkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2s1LDIiKSwKLQkJfSwKLQkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKLQl9LAotCXsKLQkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKLQkJLmlkZW50CQk9ICJNYWNCb29rIDYsMSIsCi0JCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rNiwxIiksCi0JCX0sCi0JCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va0FpciAyLDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va0FpcjIsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAotCX0sCi0JewotCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAotCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSwxIiwKLQkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81LDEiKSwKLQkJfSwKLQkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKLQl9LAotCXsKLQkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKLQkJLmlkZW50CQk9ICJNYWNCb29rUHJvIDUsMiIsCi0JCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNSwyIiksCi0JCX0sCi0JCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va1BybyA1LDMiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzUsMyIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAotCX0sCi0JewotCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAotCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSw0IiwKLQkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81LDQiKSwKLQkJfSwKLQkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKLQl9LAotCXsKLQkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKLQkJLmlkZW50CQk9ICJNYWNCb29rUHJvIDUsNSIsCi0JCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNSw1IiksCi0JCX0sCi0JCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCi0JfSwKLQl7Ci0JCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCi0JCS5pZGVudAkJPSAiTWFjQm9va0FpciAzLDEiLAotCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va0FpcjMsMSIpLAotCQl9LAotCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAotCX0sCi0JewotCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAotCQkuaWRlbnQJCT0gIk1hY0Jvb2tBaXIgMywyIiwKLQkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tBaXIzLDIiKSwKLQkJfSwKLQkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKLQl9LAotCXsgfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgbWJwX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7Ci0JaWYgKCFkbWlfY2hlY2tfc3lzdGVtKG1icF9kZXZpY2VfdGFibGUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICghcmVxdWVzdF9yZWdpb24oZHJpdmVyX2RhdGEtPmlvc3RhcnQsIGRyaXZlcl9kYXRhLT5pb2xlbiwgCi0JCQkJCQkiTWFjYm9vayBQcm8gYmFja2xpZ2h0IikpCi0JCXJldHVybiAtRU5YSU87Ci0KLQltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7Ci0JcHJvcHMubWF4X2JyaWdodG5lc3MgPSAxNTsKLQltYnBfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm1icF9iYWNrbGlnaHQiLCBOVUxMLAotCQkJCQkJCSBOVUxMLAotCQkJCQkJCSAmZHJpdmVyX2RhdGEtPmJhY2tsaWdodF9vcHMsCi0JCQkJCQkJICZwcm9wcyk7Ci0JaWYgKElTX0VSUihtYnBfYmFja2xpZ2h0X2RldmljZSkpIHsKLQkJcmVsZWFzZV9yZWdpb24oZHJpdmVyX2RhdGEtPmlvc3RhcnQsIGRyaXZlcl9kYXRhLT5pb2xlbik7Ci0JCXJldHVybiBQVFJfRVJSKG1icF9iYWNrbGlnaHRfZGV2aWNlKTsKLQl9Ci0KLQltYnBfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9Ci0JCWRyaXZlcl9kYXRhLT5iYWNrbGlnaHRfb3BzLmdldF9icmlnaHRuZXNzKG1icF9iYWNrbGlnaHRfZGV2aWNlKTsKLQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhtYnBfYmFja2xpZ2h0X2RldmljZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IG1icF9leGl0KHZvaWQpCi17Ci0JYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKG1icF9iYWNrbGlnaHRfZGV2aWNlKTsKLQotCXJlbGVhc2VfcmVnaW9uKGRyaXZlcl9kYXRhLT5pb3N0YXJ0LCBkcml2ZXJfZGF0YS0+aW9sZW4pOwotfQotCi1tb2R1bGVfaW5pdChtYnBfaW5pdCk7Ci1tb2R1bGVfZXhpdChtYnBfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIk1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk52aWRpYS1iYXNlZCBNYWNib29rIFBybyBCYWNrbGlnaHQgRHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGRtaSwgbWJwX2RldmljZV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9vbWFwMV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvb21hcDFfYmwuYwppbmRleCBkM2JjNTYyLi4wOGQyNmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9vbWFwMV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L29tYXAxX2JsLmMKQEAgLTE0Niw2ICsxNDYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IE9NQVBCTF9NQVhfSU5URU5TSVRZOwogCWRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm9tYXAtYmwiLCAmcGRldi0+ZGV2LCBibCwgJm9tYXBibF9vcHMsCiAJCQkJCSZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wY2Y1MDYzMy1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3BjZjUwNjMzLWJhY2tsaWdodC5jCmluZGV4IDNjNDI0ZjcuLmVmNTYyOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3BjZjUwNjMzLWJhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3BjZjUwNjMzLWJhY2tsaWdodC5jCkBAIC0xMTIsNiArMTEyLDcgQEAKIAlpZiAoIXBjZl9ibCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlibF9wcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlibF9wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4M2Y7CiAJYmxfcHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wcm9nZWFyX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wcm9nZWFyX2JsLmMKaW5kZXggODA5Mjc4Yy4uNmFmMTgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHJvZ2Vhcl9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Byb2dlYXJfYmwuYwpAQCAtODQsNiArODQsNyBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShzYl9kZXYsIFNCX01QUzEsIHRlbXAgfCAweDIwKTsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEhXX0xFVkVMX01BWCAtIEhXX0xFVkVMX01JTjsKIAlwcm9nZWFyX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJwcm9nZWFyLWJsIiwKIAkJCQkJCQkgICAgICZwZGV2LT5kZXYsIE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wd21fYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3B3bV9ibC5jCmluZGV4IDIxODY2ZWMuLmI4ZjM4ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3B3bV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3B3bV9ibC5jCkBAIC0yOCw2ICsyOCw3IEBACiAJdW5zaWduZWQgaW50CQlsdGhfYnJpZ2h0bmVzczsKIAlpbnQJCQkoKm5vdGlmeSkoc3RydWN0IGRldmljZSAqLAogCQkJCQkgIGludCBicmlnaHRuZXNzKTsKKwlpbnQJCQkoKmNoZWNrX2ZiKShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBmYl9pbmZvICopOwogfTsKIAogc3RhdGljIGludCBwd21fYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQpAQCAtNjIsOSArNjMsMTggQEAKIAlyZXR1cm4gYmwtPnByb3BzLmJyaWdodG5lc3M7CiB9CiAKK3N0YXRpYyBpbnQgcHdtX2JhY2tsaWdodF9jaGVja19mYihzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwsCisJCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcHdtX2JsX2RhdGEgKnBiID0gZGV2X2dldF9kcnZkYXRhKCZibC0+ZGV2KTsKKworCXJldHVybiAhcGItPmNoZWNrX2ZiIHx8IHBiLT5jaGVja19mYihwYi0+ZGV2LCBpbmZvKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIHB3bV9iYWNrbGlnaHRfb3BzID0gewogCS51cGRhdGVfc3RhdHVzCT0gcHdtX2JhY2tsaWdodF91cGRhdGVfc3RhdHVzLAogCS5nZXRfYnJpZ2h0bmVzcwk9IHB3bV9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MsCisJLmNoZWNrX2ZiCT0gcHdtX2JhY2tsaWdodF9jaGVja19mYiwKIH07CiAKIHN0YXRpYyBpbnQgcHdtX2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtOTUsNiArMTA1LDcgQEAKIAogCXBiLT5wZXJpb2QgPSBkYXRhLT5wd21fcGVyaW9kX25zOwogCXBiLT5ub3RpZnkgPSBkYXRhLT5ub3RpZnk7CisJcGItPmNoZWNrX2ZiID0gZGF0YS0+Y2hlY2tfZmI7CiAJcGItPmx0aF9icmlnaHRuZXNzID0gZGF0YS0+bHRoX2JyaWdodG5lc3MgKgogCQkoZGF0YS0+cHdtX3BlcmlvZF9ucyAvIGRhdGEtPm1heF9icmlnaHRuZXNzKTsKIAlwYi0+ZGV2ID0gJnBkZXYtPmRldjsKQEAgLTEwOCw2ICsxMTksNyBAQAogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJnb3QgcHdtIGZvciBiYWNrbGlnaHRcbiIpOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gZGF0YS0+bWF4X2JyaWdodG5lc3M7CiAJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGRldl9uYW1lKCZwZGV2LT5kZXYpLCAmcGRldi0+ZGV2LCBwYiwKIAkJCQkgICAgICAgJnB3bV9iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvczZlNjNtMC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvczZlNjNtMC5jCmluZGV4IDU5MjdkYjAuLjMyMjA0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3M2ZTYzbTAuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9zNmU2M20wLmMKQEAgLTc3OCw2ICs3NzgsNyBAQAogCiAJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1M7CiAJYmQtPnByb3BzLmJyaWdodG5lc3MgPSBNQVhfQlJJR0hUTkVTUzsKKwliZC0+cHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJbGNkLT5iZCA9IGJkOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfYmwuYwppbmRleCAyYTA0YjM4Li40MjVhNzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90b3NhX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9ibC5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIAlkYXRhLT5pMmMgPSBjbGllbnQ7CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSA1MTIgLSAxOwogCWRhdGEtPmJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigidG9zYS1ibCIsICZjbGllbnQtPmRldiwgZGF0YSwKIAkJCQkJICAgICAmYmxfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC93bTgzMXhfYmwuYwppbmRleCAwOGZkODdmLi5kNGM2ZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC93bTgzMXhfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC93bTgzMXhfYmwuYwpAQCAtMTkzLDYgKzE5Myw3IEBACiAJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKIAlkYXRhLT5pc2lua19yZWcgPSBpc2lua19yZWc7CiAKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9pc2VsOwogCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigid204MzF4IiwgJnBkZXYtPmRldiwgZGF0YSwKIAkJCQkgICAgICAgJndtODMxeF9iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZjU0eC1scTA0M2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYwppbmRleCBlN2QwZjUyLi4yNDY0YjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYwpAQCAtNjQ5LDYgKzY0OSw3IEBACiAJfQogI2lmbmRlZiBOT19CTF9TVVBQT1JUCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gMjU1OwogCWJsX2RldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImJmNTR4LWJsIiwgTlVMTCwgTlVMTCwKIAkJCQkJICAgJmJmaW5fbHEwNDNmYl9ibF9vcHMsICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYyBiL2RyaXZlcnMvdmlkZW8vYmZpbi10MzUwbWNxYi1mYi5jCmluZGV4IDNjZjc3NjcuLmQ4ZGUyOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmZpbi10MzUwbWNxYi1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmZpbi10MzUwbWNxYi1mYi5jCkBAIC01NDUsNiArNTQ1LDcgQEAKIAl9CiAjaWZuZGVmIE5PX0JMX1NVUFBPUlQKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSAyNTU7CiAJYmxfZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYmY1MngtYmwiLCBOVUxMLCBOVUxMLAogCQkJCQkgICAmYmZpbl9scTA0M2ZiX2JsX29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwppbmRleCA2OWJkNGE1Li5lZjcyY2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCkBAIC00OTksNiArNDk5LDcgQEAKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJd3JpdGVsKGZiaS0+cHdtciwgZmJpLT5yZWdzICsgTENEQ19QV01SKTsKIAogCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiaW14ZmItYmwiLCAmZmJpLT5wZGV2LT5kZXYsIGZiaSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9NYWtlZmlsZQppbmRleCA2Yzc4MmQzLi5mN2Q2MzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL01ha2VmaWxlCkBAIC00LDcgKzQsNCBAQAogaW50ZWxmYi0kKENPTkZJR19GQl9JTlRFTF9JMkMpICs9IGludGVsZmJfaTJjLm8KIGludGVsZmItb2JqcyA6PSAkKGludGVsZmIteSkKIAotaWZkZWYgQ09ORklHX0ZCX0lOVEVMX0RFQlVHCi0jRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcgLURWRVJCT1NFIC1EUkVHRFVNUAotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcgLURSRUdEVU1QCi1lbmRpZgorY2NmbGFncy0kKENPTkZJR19GQl9JTlRFTF9ERUJVRykgOj0gLURERUJVRyAtRFJFR0RVTVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYwppbmRleCBhMDgyZGViLi5hNzQ0MzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCkBAIC0xNDYxLDEzICsxNDYxLDYgQEAKIAkJTUdBX0cxMDAsCiAJCSZ2YkcxMDAsCiAJCSJNR0EtRzEwMCAoQUdQKSJ9LAotCXtQQ0lfVkVORE9SX0lEX01BVFJPWCwJUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMEVWX1BDSSwJMHhGRiwKLQkJMCwJCQkwLAotCQlERVZGX0cyMDAsCi0JCTIzMDAwMCwKLQkJTUdBX0cyMDAsCi0JCSZ2YkcyMDAsCi0JCSJNR0EtRzIwMGVWIChQQ0kpIn0sCiAJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX1BDSSwJMHhGRiwKIAkJMCwJCQkwLAogCQlERVZGX0cyMDAsCkBAIC0yMTE5LDggKzIxMTIsNiBAQAogCQlQQ0lfQU5ZX0lELAlQQ0lfQU5ZX0lELAkwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9NQVRST1gsCVBDSV9ERVZJQ0VfSURfTUFUUk9YX0cxMDBfQUdQLAogCQlQQ0lfQU5ZX0lELAlQQ0lfQU5ZX0lELAkwLCAwLCAwfSwKLQl7UENJX1ZFTkRPUl9JRF9NQVRST1gsCVBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBFVl9QQ0ksCi0JCVBDSV9BTllfSUQsCVBDSV9BTllfSUQsCTAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX01BVFJPWCwJUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMF9QQ0ksCiAJCVBDSV9BTllfSUQsCVBDSV9BTllfSUQsCTAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX01BVFJPWCwJUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMF9BR1AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfaHcuaCBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9ody5oCmluZGV4IDRlM2RlYjQuLmQ4MDQ3NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9ody5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9ody5oCkBAIC00NDksNiArNDQ5LDcgQEAKICNkZWZpbmUgUFBQX0NGR19NRFBfWFJHQl84ODg4KGRpcikgUFBQX0NGR19NRFBfQVJHQl84ODg4KGRpcikKICNkZWZpbmUgUFBQX0NGR19NRFBfUkdCQV84ODg4KGRpcikgUFBQX0NGR19NRFBfQVJHQl84ODg4KGRpcikKICNkZWZpbmUgUFBQX0NGR19NRFBfQkdSQV84ODg4KGRpcikgUFBQX0NGR19NRFBfQVJHQl84ODg4KGRpcikKKyNkZWZpbmUgUFBQX0NGR19NRFBfUkdCWF84ODg4KGRpcikgUFBQX0NGR19NRFBfQVJHQl84ODg4KGRpcikKIAogI2RlZmluZSBQUFBfQ0ZHX01EUF9ZX0NCQ1JfSDJWMihkaXIpICAgKFBQUF8jI2RpciMjX0MyUl84QklUIHwgXAogCQkJCQlQUFBfIyNkaXIjI19DMEdfOEJJVCB8IFwKQEAgLTQ4OCwxMiArNDg5LDE0IEBACiAJTURQX0dFVF9QQUNLX1BBVFRFUk4oMCwgQ0xSX1IsIENMUl9HLCBDTFJfQiwgOCkKICNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfUkdCXzg4OCBQUFBfUEFDS19QQVRURVJOX01EUF9SR0JfNTY1CiAjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1hSR0JfODg4OCBcCi0JTURQX0dFVF9QQUNLX1BBVFRFUk4oQ0xSX0FMUEhBLCBDTFJfUiwgQ0xSX0csIENMUl9CLCA4KQorCU1EUF9HRVRfUEFDS19QQVRURVJOKENMUl9CLCBDTFJfRywgQ0xSX1IsIENMUl9BTFBIQSwgOCkKICNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfQVJHQl84ODg4IFBQUF9QQUNLX1BBVFRFUk5fTURQX1hSR0JfODg4OAogI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9SR0JBXzg4ODggXAogCU1EUF9HRVRfUEFDS19QQVRURVJOKENMUl9BTFBIQSwgQ0xSX0IsIENMUl9HLCBDTFJfUiwgOCkKICNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfQkdSQV84ODg4IFwKIAlNRFBfR0VUX1BBQ0tfUEFUVEVSTihDTFJfQUxQSEEsIENMUl9SLCBDTFJfRywgQ0xSX0IsIDgpCisjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1JHQlhfODg4OCBcCisJTURQX0dFVF9QQUNLX1BBVFRFUk4oQ0xSX0FMUEhBLCBDTFJfQiwgQ0xSX0csIENMUl9SLCA4KQogI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9ZX0NCQ1JfSDJWMSBcCiAJTURQX0dFVF9QQUNLX1BBVFRFUk4oMCwgMCwgQ0xSX0NCLCBDTFJfQ1IsIDgpCiAjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1lfQ0JDUl9IMlYyIFBQUF9QQUNLX1BBVFRFUk5fTURQX1lfQ0JDUl9IMlYxCkBAIC01MDksNiArNTEyLDcgQEAKICNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9BUkdCXzg4ODgoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfUkdCCiAjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfUkdCQV84ODg4KGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BX1JHQgogI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX0JHUkFfODg4OChkaXIpIFBQUF9PUF8jI2RpciMjX0NIUk9NQV9SR0IKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9SR0JYXzg4ODgoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfUkdCCiAjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfWV9DQkNSX0gyVjEoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfSDJWMQogI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX1lfQ0JDUl9IMlYyKGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BXzQyMAogI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX1lfQ1JDQl9IMlYxKGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BX0gyVjEKQEAgLTUyMyw2ICs1MjcsNyBAQAogCVtNRFBfQVJHQl84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfQVJHQl84ODg4LFwKIAlbTURQX1JHQkFfODg4OF0gPSBQUFBfIyNuYW1lIyNfTURQX1JHQkFfODg4OCxcCiAJW01EUF9CR1JBXzg4ODhdID0gUFBQXyMjbmFtZSMjX01EUF9CR1JBXzg4ODgsXAorCVtNRFBfUkdCWF84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfUkdCWF84ODg4LFwKIAlbTURQX1lfQ0JDUl9IMlYxXSA9IFBQUF8jI25hbWUjI19NRFBfWV9DQkNSX0gyVjEsXAogCVtNRFBfWV9DQkNSX0gyVjJdID0gUFBQXyMjbmFtZSMjX01EUF9ZX0NCQ1JfSDJWMixcCiAJW01EUF9ZX0NSQ0JfSDJWMV0gPSBQUFBfIyNuYW1lIyNfTURQX1lfQ1JDQl9IMlYxLFwKQEAgLTUzNiw2ICs1NDEsNyBAQAogCVtNRFBfQVJHQl84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfQVJHQl84ODg4KGRpciksXAogCVtNRFBfUkdCQV84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfUkdCQV84ODg4KGRpciksXAogCVtNRFBfQkdSQV84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfQkdSQV84ODg4KGRpciksXAorCVtNRFBfUkdCWF84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfUkdCWF84ODg4KGRpciksXAogCVtNRFBfWV9DQkNSX0gyVjFdID0gUFBQXyMjbmFtZSMjX01EUF9ZX0NCQ1JfSDJWMShkaXIpLFwKIAlbTURQX1lfQ0JDUl9IMlYyXSA9IFBQUF8jI25hbWUjI19NRFBfWV9DQkNSX0gyVjIoZGlyKSxcCiAJW01EUF9ZX0NSQ0JfSDJWMV0gPSBQUFBfIyNuYW1lIyNfTURQX1lfQ1JDQl9IMlYxKGRpciksXApAQCAtNTQ3LDcgKzU1Myw4IEBACiAJCSAgICAgICAoaW1nID09IE1EUF9ZQ1JZQ0JfSDJWMSkpCiAjZGVmaW5lIElTX1JHQihpbWcpICgoaW1nID09IE1EUF9SR0JfNTY1KSB8IChpbWcgPT0gTURQX1JHQl84ODgpIHwgXAogCQkgICAgIChpbWcgPT0gTURQX0FSR0JfODg4OCkgfCAoaW1nID09IE1EUF9SR0JBXzg4ODgpIHwgXAotCQkgICAgIChpbWcgPT0gTURQX1hSR0JfODg4OCkgfCAoaW1nID09IE1EUF9CR1JBXzg4ODgpKQorCQkgICAgIChpbWcgPT0gTURQX1hSR0JfODg4OCkgfCAoaW1nID09IE1EUF9CR1JBXzg4ODgpIHwgXAorCQkgICAgIChpbWcgPT0gTURQX1JHQlhfODg4OCkpCiAjZGVmaW5lIEhBU19BTFBIQShpbWcpICgoaW1nID09IE1EUF9BUkdCXzg4ODgpIHwgKGltZyA9PSBNRFBfUkdCQV84ODg4KSB8IFwKIAkJCShpbWcgPT0gTURQX0JHUkFfODg4OCkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYwppbmRleCA0ZmYwMDFmLi4yYjY1NjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCkBAIC02OSw2ICs2OSw3IEBACiAJW01EUF9BUkdCXzg4ODhdID0gNCwKIAlbTURQX1JHQkFfODg4OF0gPSA0LAogCVtNRFBfQkdSQV84ODg4XSA9IDQsCisJW01EUF9SR0JYXzg4ODhdID0gNCwKIAlbTURQX1lfQ0JDUl9IMlYxXSA9IDEsCiAJW01EUF9ZX0NCQ1JfSDJWMl0gPSAxLAogCVtNRFBfWV9DUkNCX0gyVjFdID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21zbV9mYi5jIGIvZHJpdmVycy92aWRlby9tc20vbXNtX2ZiLmMKaW5kZXggZGViZTU5My4uZWMzNTEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbXNtX2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbXNtX2ZiLmMKQEAgLTgxLDcgKzgxLDYgQEAKIAlzcGlubG9ja190IHVwZGF0ZV9sb2NrOwogCXN0cnVjdCBtdXRleCBwYW5lbF9pbml0X2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfd3E7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc3VtZV93b3JrcXVldWU7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc3VtZV93b3JrOwogCXN0cnVjdCBtc21mYl9jYWxsYmFjayBkbWFfY2FsbGJhY2s7CiAJc3RydWN0IG1zbWZiX2NhbGxiYWNrIHZzeW5jX2NhbGxiYWNrOwpAQCAtMTExLDcgKzExMCw3IEBACiAJaWYgKG1zbWZiLT5zbGVlcGluZyA9PSBVUERBVElORyAmJgogCSAgICBtc21mYi0+ZnJhbWVfZG9uZSA9PSBtc21mYi0+dXBkYXRlX2ZyYW1lKSB7CiAJCURMT0coU1VTUEVORF9SRVNVTUUsICJmdWxsIHVwZGF0ZSBjb21wbGV0ZWRcbiIpOwotCQlxdWV1ZV93b3JrKG1zbWZiLT5yZXN1bWVfd29ya3F1ZXVlLCAmbXNtZmItPnJlc3VtZV93b3JrKTsKKwkJc2NoZWR1bGVfd29yaygmbXNtZmItPnJlc3VtZV93b3JrKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCXdha2VfdXAoJm1zbWZiLT5mcmFtZV93cSk7CkBAIC0yMjAsOCArMjE5LDggQEAKIAogCXNsZWVwaW5nID0gbXNtZmItPnNsZWVwaW5nOwogCS8qIG9uIGEgZnVsbCB1cGRhdGUsIGlmIHRoZSBsYXN0IGZyYW1lIGhhcyBub3QgY29tcGxldGVkLCB3YWl0IGZvciBpdCAqLwotCWlmIChwYW5fZGlzcGxheSAmJiAobXNtZmItPmZyYW1lX3JlcXVlc3RlZCAhPSBtc21mYi0+ZnJhbWVfZG9uZSB8fAotCQkJICAgIHNsZWVwaW5nID09IFVQREFUSU5HKSkgeworCWlmICgocGFuX2Rpc3BsYXkgJiYgbXNtZmItPmZyYW1lX3JlcXVlc3RlZCAhPSBtc21mYi0+ZnJhbWVfZG9uZSkgfHwKKwkJCSAgICBzbGVlcGluZyA9PSBVUERBVElORykgewogCQlpbnQgcmV0OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CiAJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1zbWZiLT5mcmFtZV93cSwKQEAgLTQ3MCw2ICs0NjksMTggQEAKIAlmYl9pbmZvLT52YXIueW9mZnNldCA9IDA7CiAKIAlpZiAobXNtZmItPnBhbmVsLT5jYXBzICYgTVNNRkJfQ0FQX1BBUlRJQUxfVVBEQVRFUykgeworCQkvKgorCQkgKiBTZXQgdGhlIHBhcmFtIGluIHRoZSBmaXhlZCBzY3JlZW4sIHNvIHVzZXJzcGFjZSBjYW4ndAorCQkgKiBjaGFuZ2UgaXQuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIGZvciB0aGUKKwkJICogY2FwYWJpbGl0eS4KKwkJICovCisJCWZiX2luZm8tPmZpeC5yZXNlcnZlZFswXSA9IDB4NTQ0NDsKKwkJZmJfaW5mby0+Zml4LnJlc2VydmVkWzFdID0gMHg1MDU1OworCisJCS8qCisJCSAqIFRoaXMgcHJlbG9hZHMgdGhlIHZhbHVlIHNvIHRoYXQgaWYgdXNlcnNwYWNlIGRvZXNuJ3QKKwkJICogY2hhbmdlIGl0LCBpdCB3aWxsIGJlIGEgZnVsbCB1cGRhdGUKKwkJICovCiAJCWZiX2luZm8tPnZhci5yZXNlcnZlZFswXSA9IDB4NTQ0NDUwNTU7CiAJCWZiX2luZm8tPnZhci5yZXNlcnZlZFsxXSA9IDA7CiAJCWZiX2luZm8tPnZhci5yZXNlcnZlZFsyXSA9ICh1aW50MTZfdCltc21mYi0+eHJlcyB8CkBAIC01NTksMTIgKzU3MCw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJm1zbWZiLT51cGRhdGVfbG9jayk7CiAJbXV0ZXhfaW5pdCgmbXNtZmItPnBhbmVsX2luaXRfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbXNtZmItPmZyYW1lX3dxKTsKLQltc21mYi0+cmVzdW1lX3dvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoInBhbmVsX29uIik7Ci0JaWYgKG1zbWZiLT5yZXN1bWVfd29ya3F1ZXVlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gY3JlYXRlIHBhbmVsX29uIHdvcmtxdWV1ZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfY3JlYXRlX3dvcmtxdWV1ZTsKLQl9CiAJSU5JVF9XT1JLKCZtc21mYi0+cmVzdW1lX3dvcmssIHBvd2VyX29uX3BhbmVsKTsKIAltc21mYi0+YmxhY2sgPSBremFsbG9jKG1zbWZiLT5mYi0+dmFyLmJpdHNfcGVyX3BpeGVsKm1zbWZiLT54cmVzLAogCQkJICAgICAgIEdGUF9LRVJORUwpOwpAQCAtNTg5LDggKzU5NCw2IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyOgotCWRlc3Ryb3lfd29ya3F1ZXVlKG1zbWZiLT5yZXN1bWVfd29ya3F1ZXVlKTsKLWVycm9yX2NyZWF0ZV93b3JrcXVldWU6CiAJaW91bm1hcChmYi0+c2NyZWVuX2Jhc2UpOwogZXJyb3Jfc2V0dXBfZmJtZW06CiAJZnJhbWVidWZmZXJfcmVsZWFzZShtc21mYi0+ZmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9teHNmYi5jIGIvZHJpdmVycy92aWRlby9teHNmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDI4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL214c2ZiLmMKQEAgLTAsMCArMSw5MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSnVlcmdlbiBCZWlzZXJ0LCBQZW5ndXRyb25peAorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbjoKKyAqIEF1dGhvcjogVml0YWx5IFdvb2wgPHZpdGFsQGVtYmVkZGVkYWxsZXkuY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBEUklWRVJfTkFNRSAibXhzZmIiCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZiBMQ0RJRiBkcml2ZXIgZm9yIGkuTVgyMyBhbmQgaS5NWDI4CisgKgorICogVGhlIExDRElGIHN1cHBvcnQgZm91ciBtb2RlcyBvZiBvcGVyYXRpb24KKyAqIC0gTVBVIGludGVyZmFjZSAodG8gZHJpdmUgc21hcnQgZGlzcGxheXMpIC0+IG5vdCBzdXBwb3J0ZWQgeWV0CisgKiAtIFZTWU5DIGludGVyZmFjZSAobGlrZSBNUFUgaW50ZXJmYWNlIHBsdXMgVnN5bmMpIC0+IG5vdCBzdXBwb3J0ZWQgeWV0CisgKiAtIERvdGNsb2NrIGludGVyZmFjZSAodG8gZHJpdmUgTEMgZGlzcGxheXMgd2l0aCBSR0IgZGF0YSBhbmQgc3luYyBzaWduYWxzKQorICogLSBEVkkgKHRvIGRyaXZlIElUVS1SIEJUNjU2KSAgLT4gbm90IHN1cHBvcnRlZCB5ZXQKKyAqCisgKiBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIGEgY29ycmVjdCBzZXR1cCBvZiB0aGUgcGlucyB1c2VkIGZvciB0aGlzIHB1cnBvc2UKKyAqIChwbGF0Zm9ybSBzcGVjaWZpYykuCisgKgorICogRm9yIHRoZSBkZXZlbG9wZXI6IERvbid0IGZvcmdldCB0byBzZXQgdGhlIGRhdGEgYnVzIHdpZHRoIHRvIHRoZSBkaXNwbGF5CisgKiBpbiB0aGUgaW14X2ZiX3ZpZGVvbW9kZSBzdHJ1Y3R1cmUuIFlvdSB3aWxsIGVsc2UgZW5kIHVwIHdpdGggdWdseSBjb2xvdXJzLgorICogSWYgeW91IGZpZ2h0IGFnYWluc3Qgaml0dGVyIHlvdSBjYW4gdmFyeSB0aGUgY2xvY2sgZGVsYXkuIFRoaXMgaXMgYSBmZWF0dXJlCisgKiBvZiB0aGUgaS5NWDI4IGFuZCB5b3UgY2FuIHZhcnkgaXQgYmV0d2VlbiAyIG5zIC4uLiA4IG5zIGluIDIgbnMgc3RlcHMuIEdpdmUKKyAqIHRoZSByZXF1aXJlZCB2YWx1ZSBpbiB0aGUgaW14X2ZiX3ZpZGVvbW9kZSBzdHJ1Y3R1cmUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL214c2ZiLmg+CisKKyNkZWZpbmUgUkVHX1NFVAk0CisjZGVmaW5lIFJFR19DTFIJOAorCisjZGVmaW5lIExDRENfQ1RSTAkJCTB4MDAKKyNkZWZpbmUgTENEQ19DVFJMMQkJCTB4MTAKKyNkZWZpbmUgTENEQ19WNF9DVFJMMgkJCTB4MjAKKyNkZWZpbmUgTENEQ19WM19UUkFOU0ZFUl9DT1VOVAkJMHgyMAorI2RlZmluZSBMQ0RDX1Y0X1RSQU5TRkVSX0NPVU5UCQkweDMwCisjZGVmaW5lIExDRENfVjRfQ1VSX0JVRgkJCTB4NDAKKyNkZWZpbmUgTENEQ19WNF9ORVhUX0JVRgkJMHg1MAorI2RlZmluZSBMQ0RDX1YzX0NVUl9CVUYJCQkweDMwCisjZGVmaW5lIExDRENfVjNfTkVYVF9CVUYJCTB4NDAKKyNkZWZpbmUgTENEQ19USU1JTkcJCQkweDYwCisjZGVmaW5lIExDRENfVkRDVFJMMAkJCTB4NzAKKyNkZWZpbmUgTENEQ19WRENUUkwxCQkJMHg4MAorI2RlZmluZSBMQ0RDX1ZEQ1RSTDIJCQkweDkwCisjZGVmaW5lIExDRENfVkRDVFJMMwkJCTB4YTAKKyNkZWZpbmUgTENEQ19WRENUUkw0CQkJMHhiMAorI2RlZmluZSBMQ0RDX0RWSUNUUkwwCQkJMHhjMAorI2RlZmluZSBMQ0RDX0RWSUNUUkwxCQkJMHhkMAorI2RlZmluZSBMQ0RDX0RWSUNUUkwyCQkJMHhlMAorI2RlZmluZSBMQ0RDX0RWSUNUUkwzCQkJMHhmMAorI2RlZmluZSBMQ0RDX0RWSUNUUkw0CQkJMHgxMDAKKyNkZWZpbmUgTENEQ19WNF9EQVRBCQkJMHgxODAKKyNkZWZpbmUgTENEQ19WM19EQVRBCQkJMHgxYjAKKyNkZWZpbmUgTENEQ19WNF9ERUJVRzAJCQkweDFkMAorI2RlZmluZSBMQ0RDX1YzX0RFQlVHMAkJCTB4MWYwCisKKyNkZWZpbmUgQ1RSTF9TRlRSU1QJCQkoMSA8PCAzMSkKKyNkZWZpbmUgQ1RSTF9DTEtHQVRFCQkJKDEgPDwgMzApCisjZGVmaW5lIENUUkxfQllQQVNTX0NPVU5UCQkoMSA8PCAxOSkKKyNkZWZpbmUgQ1RSTF9WU1lOQ19NT0RFCQkJKDEgPDwgMTgpCisjZGVmaW5lIENUUkxfRE9UQ0xLX01PREUJCSgxIDw8IDE3KQorI2RlZmluZSBDVFJMX0RBVEFfU0VMRUNUCQkoMSA8PCAxNikKKyNkZWZpbmUgQ1RSTF9TRVRfQlVTX1dJRFRIKHgpCQkoKCh4KSAmIDB4MykgPDwgMTApCisjZGVmaW5lIENUUkxfR0VUX0JVU19XSURUSCh4KQkJKCgoeCkgPj4gMTApICYgMHgzKQorI2RlZmluZSBDVFJMX1NFVF9XT1JEX0xFTkdUSCh4KQkJKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lIENUUkxfR0VUX1dPUkRfTEVOR1RIKHgpCQkoKCh4KSA+PiA4KSAmIDB4MykKKyNkZWZpbmUgQ1RSTF9NQVNURVIJCQkoMSA8PCA1KQorI2RlZmluZSBDVFJMX0RGMTYJCQkoMSA8PCAzKQorI2RlZmluZSBDVFJMX0RGMTgJCQkoMSA8PCAyKQorI2RlZmluZSBDVFJMX0RGMjQJCQkoMSA8PCAxKQorI2RlZmluZSBDVFJMX1JVTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgQ1RSTDFfRklGT19DTEVBUgkJKDEgPDwgMjEpCisjZGVmaW5lIENUUkwxX1NFVF9CWVRFX1BBQ0tBR0lORyh4KQkoKCh4KSAmIDB4ZikgPDwgMTYpCisjZGVmaW5lIENUUkwxX0dFVF9CWVRFX1BBQ0tBR0lORyh4KQkoKCh4KSA+PiAxNikgJiAweGYpCisKKyNkZWZpbmUgVFJBTlNGRVJfQ09VTlRfU0VUX1ZDT1VOVCh4KQkoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lIFRSQU5TRkVSX0NPVU5UX0dFVF9WQ09VTlQoeCkJKCgoeCkgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBUUkFOU0ZFUl9DT1VOVF9TRVRfSENPVU5UKHgpCSgoeCkgJiAweGZmZmYpCisjZGVmaW5lIFRSQU5TRkVSX0NPVU5UX0dFVF9IQ09VTlQoeCkJKCh4KSAmIDB4ZmZmZikKKworCisjZGVmaW5lIFZEQ1RSTDBfRU5BQkxFX1BSRVNFTlQJCSgxIDw8IDI4KQorI2RlZmluZSBWRENUUkwwX1ZTWU5DX0FDVF9ISUdICQkoMSA8PCAyNykKKyNkZWZpbmUgVkRDVFJMMF9IU1lOQ19BQ1RfSElHSAkJKDEgPDwgMjYpCisjZGVmaW5lIFZEQ1RSTDBfRE9UQ0xLX0FDVF9GQUlMSU5HCSgxIDw8IDI1KQorI2RlZmluZSBWRENUUkwwX0VOQUJMRV9BQ1RfSElHSAkJKDEgPDwgMjQpCisjZGVmaW5lIFZEQ1RSTDBfVlNZTkNfUEVSSU9EX1VOSVQJKDEgPDwgMjEpCisjZGVmaW5lIFZEQ1RSTDBfVlNZTkNfUFVMU0VfV0lEVEhfVU5JVAkoMSA8PCAyMCkKKyNkZWZpbmUgVkRDVFJMMF9IQUxGX0xJTkUJCSgxIDw8IDE5KQorI2RlZmluZSBWRENUUkwwX0hBTEZfTElORV9NT0RFCQkoMSA8PCAxOCkKKyNkZWZpbmUgVkRDVFJMMF9TRVRfVlNZTkNfUFVMU0VfV0lEVEgoeCkgKCh4KSAmIDB4M2ZmZmYpCisjZGVmaW5lIFZEQ1RSTDBfR0VUX1ZTWU5DX1BVTFNFX1dJRFRIKHgpICgoeCkgJiAweDNmZmZmKQorCisjZGVmaW5lIFZEQ1RSTDJfU0VUX0hTWU5DX1BFUklPRCh4KQkoKHgpICYgMHgzZmZmZikKKyNkZWZpbmUgVkRDVFJMMl9HRVRfSFNZTkNfUEVSSU9EKHgpCSgoeCkgJiAweDNmZmZmKQorCisjZGVmaW5lIFZEQ1RSTDNfTVVYX1NZTkNfU0lHTkFMUwkoMSA8PCAyOSkKKyNkZWZpbmUgVkRDVFJMM19WU1lOQ19PTkxZCQkoMSA8PCAyOCkKKyNkZWZpbmUgU0VUX0hPUl9XQUlUX0NOVCh4KQkJKCgoeCkgJiAweGZmZikgPDwgMTYpCisjZGVmaW5lIEdFVF9IT1JfV0FJVF9DTlQoeCkJCSgoKHgpID4+IDE2KSAmIDB4ZmZmKQorI2RlZmluZSBTRVRfVkVSVF9XQUlUX0NOVCh4KQkJKCh4KSAmIDB4ZmZmZikKKyNkZWZpbmUgR0VUX1ZFUlRfV0FJVF9DTlQoeCkJCSgoeCkgJiAweGZmZmYpCisKKyNkZWZpbmUgVkRDVFJMNF9TRVRfRE9UQ0xLX0RMWSh4KQkoKCh4KSAmIDB4NykgPDwgMjkpIC8qIHY0IG9ubHkgKi8KKyNkZWZpbmUgVkRDVFJMNF9HRVRfRE9UQ0xLX0RMWSh4KQkoKCh4KSA+PiAyOSkgJiAweDcpIC8qIHY0IG9ubHkgKi8KKyNkZWZpbmUgVkRDVFJMNF9TWU5DX1NJR05BTFNfT04JCSgxIDw8IDE4KQorI2RlZmluZSBTRVRfRE9UQ0xLX0hfVkFMSURfREFUQV9DTlQoeCkJKCh4KSAmIDB4M2ZmZmYpCisKKyNkZWZpbmUgREVCVUcwX0hTWU5DCQkJKDEgPCAyNikKKyNkZWZpbmUgREVCVUcwX1ZTWU5DCQkJKDEgPCAyNSkKKworI2RlZmluZSBNSU5fWFJFUwkJCTEyMAorI2RlZmluZSBNSU5fWVJFUwkJCTEyMAorCisjZGVmaW5lIFJFRCAwCisjZGVmaW5lIEdSRUVOIDEKKyNkZWZpbmUgQkxVRSAyCisjZGVmaW5lIFRSQU5TUCAzCisKK2VudW0gbXhzZmJfZGV2dHlwZSB7CisJTVhTRkJfVjMsCisJTVhTRkJfVjQsCit9OworCisvKiBDUFUgZGVwZW5kZW50IHJlZ2lzdGVyIG9mZnNldHMgKi8KK3N0cnVjdCBteHNmYl9kZXZkYXRhIHsKKwl1bnNpZ25lZCB0cmFuc2Zlcl9jb3VudDsKKwl1bnNpZ25lZCBjdXJfYnVmOworCXVuc2lnbmVkIG5leHRfYnVmOworCXVuc2lnbmVkIGRlYnVnMDsKKwl1bnNpZ25lZCBoc193ZHRoX21hc2s7CisJdW5zaWduZWQgaHNfd2R0aF9zaGlmdDsKKwl1bnNpZ25lZCBpcHZlcnNpb247Cit9OworCitzdHJ1Y3QgbXhzZmJfaW5mbyB7CisJc3RydWN0IGZiX2luZm8gZmJfaW5mbzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CS8qIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGFsbG9jYXRlZF9zaXplOworCWludCBlbmFibGVkOworCXVuc2lnbmVkIGxkX2ludGZfd2lkdGg7CisJdW5zaWduZWQgZG90Y2xrX2RlbGF5OworCWNvbnN0IHN0cnVjdCBteHNmYl9kZXZkYXRhICpkZXZkYXRhOworCWludCBtYXBwZWQ7Cit9OworCisjZGVmaW5lIG14c2ZiX2lzX3YzKGhvc3QpIChob3N0LT5kZXZkYXRhLT5pcHZlcnNpb24gPT0gMykKKyNkZWZpbmUgbXhzZmJfaXNfdjQoaG9zdCkgKGhvc3QtPmRldmRhdGEtPmlwdmVyc2lvbiA9PSA0KQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG14c2ZiX2RldmRhdGEgbXhzZmJfZGV2ZGF0YVtdID0geworCVtNWFNGQl9WM10gPSB7CisJCS50cmFuc2Zlcl9jb3VudCA9IExDRENfVjNfVFJBTlNGRVJfQ09VTlQsCisJCS5jdXJfYnVmID0gTENEQ19WM19DVVJfQlVGLAorCQkubmV4dF9idWYgPSBMQ0RDX1YzX05FWFRfQlVGLAorCQkuZGVidWcwID0gTENEQ19WM19ERUJVRzAsCisJCS5oc193ZHRoX21hc2sgPSAweGZmLAorCQkuaHNfd2R0aF9zaGlmdCA9IDI0LAorCQkuaXB2ZXJzaW9uID0gMywKKwl9LAorCVtNWFNGQl9WNF0gPSB7CisJCS50cmFuc2Zlcl9jb3VudCA9IExDRENfVjRfVFJBTlNGRVJfQ09VTlQsCisJCS5jdXJfYnVmID0gTENEQ19WNF9DVVJfQlVGLAorCQkubmV4dF9idWYgPSBMQ0RDX1Y0X05FWFRfQlVGLAorCQkuZGVidWcwID0gTENEQ19WNF9ERUJVRzAsCisJCS5oc193ZHRoX21hc2sgPSAweDNmZmYsCisJCS5oc193ZHRoX3NoaWZ0ID0gMTgsCisJCS5pcHZlcnNpb24gPSA0LAorCX0sCit9OworCisjZGVmaW5lIHRvX2lteGZiX2hvc3QoeCkgKGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXhzZmJfaW5mbywgZmJfaW5mbykpCisKKy8qIG1hc2sgYW5kIHNoaWZ0IGRlcGVuZHMgb24gYXJjaGl0ZWN0dXJlICovCitzdGF0aWMgaW5saW5lIHUzMiBzZXRfaHN5bmNfcHVsc2Vfd2lkdGgoc3RydWN0IG14c2ZiX2luZm8gKmhvc3QsIHVuc2lnbmVkIHZhbCkKK3sKKwlyZXR1cm4gKHZhbCAmIGhvc3QtPmRldmRhdGEtPmhzX3dkdGhfbWFzaykgPDwKKwkJaG9zdC0+ZGV2ZGF0YS0+aHNfd2R0aF9zaGlmdDsKK30KKworc3RhdGljIGlubGluZSB1MzIgZ2V0X2hzeW5jX3B1bHNlX3dpZHRoKHN0cnVjdCBteHNmYl9pbmZvICpob3N0LCB1bnNpZ25lZCB2YWwpCit7CisJcmV0dXJuICh2YWwgPj4gaG9zdC0+ZGV2ZGF0YS0+aHNfd2R0aF9zaGlmdCkgJgorCQlob3N0LT5kZXZkYXRhLT5oc193ZHRoX21hc2s7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfYml0ZmllbGQgZGVmX3JnYjU2NVtdID0geworCVtSRURdID0geworCQkub2Zmc2V0ID0gMTEsCisJCS5sZW5ndGggPSA1LAorCX0sCisJW0dSRUVOXSA9IHsKKwkJLm9mZnNldCA9IDUsCisJCS5sZW5ndGggPSA2LAorCX0sCisJW0JMVUVdID0geworCQkub2Zmc2V0ID0gMCwKKwkJLmxlbmd0aCA9IDUsCisJfSwKKwlbVFJBTlNQXSA9IHsJLyogbm8gc3VwcG9ydCBmb3IgdHJhbnNwYXJlbmN5ICovCisJCS5sZW5ndGggPSAwLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfYml0ZmllbGQgZGVmX3JnYjY2NltdID0geworCVtSRURdID0geworCQkub2Zmc2V0ID0gMTYsCisJCS5sZW5ndGggPSA2LAorCX0sCisJW0dSRUVOXSA9IHsKKwkJLm9mZnNldCA9IDgsCisJCS5sZW5ndGggPSA2LAorCX0sCisJW0JMVUVdID0geworCQkub2Zmc2V0ID0gMCwKKwkJLmxlbmd0aCA9IDYsCisJfSwKKwlbVFJBTlNQXSA9IHsJLyogbm8gc3VwcG9ydCBmb3IgdHJhbnNwYXJlbmN5ICovCisJCS5sZW5ndGggPSAwLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfYml0ZmllbGQgZGVmX3JnYjg4OFtdID0geworCVtSRURdID0geworCQkub2Zmc2V0ID0gMTYsCisJCS5sZW5ndGggPSA4LAorCX0sCisJW0dSRUVOXSA9IHsKKwkJLm9mZnNldCA9IDgsCisJCS5sZW5ndGggPSA4LAorCX0sCisJW0JMVUVdID0geworCQkub2Zmc2V0ID0gMCwKKwkJLmxlbmd0aCA9IDgsCisJfSwKKwlbVFJBTlNQXSA9IHsJLyogbm8gc3VwcG9ydCBmb3IgdHJhbnNwYXJlbmN5ICovCisJCS5sZW5ndGggPSAwLAorCX0KK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhbl90b19maWVsZCh1bnNpZ25lZCBjaGFuLCBzdHJ1Y3QgZmJfYml0ZmllbGQgKmJmKQoreworCWNoYW4gJj0gMHhmZmZmOworCWNoYW4gPj49IDE2IC0gYmYtPmxlbmd0aDsKKwlyZXR1cm4gY2hhbiA8PCBiZi0+b2Zmc2V0OworfQorCitzdGF0aWMgaW50IG14c2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCit7CisJc3RydWN0IG14c2ZiX2luZm8gKmhvc3QgPSB0b19pbXhmYl9ob3N0KGZiX2luZm8pOworCWNvbnN0IHN0cnVjdCBmYl9iaXRmaWVsZCAqcmdiID0gTlVMTDsKKworCWlmICh2YXItPnhyZXMgPCBNSU5fWFJFUykKKwkJdmFyLT54cmVzID0gTUlOX1hSRVM7CisJaWYgKHZhci0+eXJlcyA8IE1JTl9ZUkVTKQorCQl2YXItPnlyZXMgPSBNSU5fWVJFUzsKKworCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzOworCisJdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE2OgorCQkvKiBhbHdheXMgZXhwZWN0IFJHQiA1NjUgKi8KKwkJcmdiID0gZGVmX3JnYjU2NTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJc3dpdGNoIChob3N0LT5sZF9pbnRmX3dpZHRoKSB7CisJCWNhc2UgU1RNTENESUZfOEJJVDoKKwkJCXByX2RlYnVnKCJVbnN1cHBvcnRlZCBMQ0QgYnVzIHdpZHRoIG1hcHBpbmdcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgU1RNTENESUZfMTZCSVQ6CisJCWNhc2UgU1RNTENESUZfMThCSVQ6CisJCQkvKiAyNCBiaXQgdG8gMTggYml0IG1hcHBpbmcgKi8KKwkJCXJnYiA9IGRlZl9yZ2I2NjY7CisJCQlicmVhazsKKwkJY2FzZSBTVE1MQ0RJRl8yNEJJVDoKKwkJCS8qIHJlYWwgMjQgYml0ICovCisJCQlyZ2IgPSBkZWZfcmdiODg4OworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIlVuc3VwcG9ydGVkIGNvbG91ciBkZXB0aDogJXVcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIENvcHkgdGhlIFJHQiBwYXJhbWV0ZXJzIGZvciB0aGlzIGRpc3BsYXkKKwkgKiBmcm9tIHRoZSBtYWNoaW5lIHNwZWNpZmljIHBhcmFtZXRlcnMuCisJICovCisJdmFyLT5yZWQgICAgPSByZ2JbUkVEXTsKKwl2YXItPmdyZWVuICA9IHJnYltHUkVFTl07CisJdmFyLT5ibHVlICAgPSByZ2JbQkxVRV07CisJdmFyLT50cmFuc3AgPSByZ2JbVFJBTlNQXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBteHNmYl9lbmFibGVfY29udHJvbGxlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3sKKwlzdHJ1Y3QgbXhzZmJfaW5mbyAqaG9zdCA9IHRvX2lteGZiX2hvc3QoZmJfaW5mbyk7CisJdTMyIHJlZzsKKworCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwljbGtfZW5hYmxlKGhvc3QtPmNsayk7CisJY2xrX3NldF9yYXRlKGhvc3QtPmNsaywgUElDT1MyS0haKGZiX2luZm8tPnZhci5waXhjbG9jaykgKiAxMDAwVSk7CisKKwkvKiBpZiBpdCB3YXMgZGlzYWJsZWQsIHJlLWVuYWJsZSB0aGUgbW9kZSBhZ2FpbiAqLworCXdyaXRlbChDVFJMX0RPVENMS19NT0RFLCBob3N0LT5iYXNlICsgTENEQ19DVFJMICsgUkVHX1NFVCk7CisKKwkvKiBlbmFibGUgdGhlIFNZTkMgc2lnbmFscyBmaXJzdCwgdGhlbiB0aGUgRE1BIGVuZ2luZSAqLworCXJlZyA9IHJlYWRsKGhvc3QtPmJhc2UgKyBMQ0RDX1ZEQ1RSTDQpOworCXJlZyB8PSBWRENUUkw0X1NZTkNfU0lHTkFMU19PTjsKKwl3cml0ZWwocmVnLCBob3N0LT5iYXNlICsgTENEQ19WRENUUkw0KTsKKworCXdyaXRlbChDVFJMX1JVTiwgaG9zdC0+YmFzZSArIExDRENfQ1RSTCArIFJFR19TRVQpOworCisJaG9zdC0+ZW5hYmxlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIG14c2ZiX2Rpc2FibGVfY29udHJvbGxlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3sKKwlzdHJ1Y3QgbXhzZmJfaW5mbyAqaG9zdCA9IHRvX2lteGZiX2hvc3QoZmJfaW5mbyk7CisJdW5zaWduZWQgbG9vcDsKKwl1MzIgcmVnOworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qCisJICogRXZlbiBpZiB3ZSBkaXNhYmxlIHRoZSBjb250cm9sbGVyIGhlcmUsIGl0IHdpbGwgc3RpbGwgY29udGludWUKKwkgKiB1bnRpbCBpdHMgRklGT3MgYXJlIHJ1bm5pbmcgb3V0IG9mIGRhdGEKKwkgKi8KKwl3cml0ZWwoQ1RSTF9ET1RDTEtfTU9ERSwgaG9zdC0+YmFzZSArIExDRENfQ1RSTCArIFJFR19DTFIpOworCisJbG9vcCA9IDEwMDA7CisJd2hpbGUgKGxvb3ApIHsKKwkJcmVnID0gcmVhZGwoaG9zdC0+YmFzZSArIExDRENfQ1RSTCk7CisJCWlmICghKHJlZyAmIENUUkxfUlVOKSkKKwkJCWJyZWFrOworCQlsb29wLS07CisJfQorCisJd3JpdGVsKFZEQ1RSTDRfU1lOQ19TSUdOQUxTX09OLCBob3N0LT5iYXNlICsgTENEQ19WRENUUkw0ICsgUkVHX0NMUik7CisKKwljbGtfZGlzYWJsZShob3N0LT5jbGspOworCisJaG9zdC0+ZW5hYmxlZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgbXhzZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3sKKwlzdHJ1Y3QgbXhzZmJfaW5mbyAqaG9zdCA9IHRvX2lteGZiX2hvc3QoZmJfaW5mbyk7CisJdTMyIGN0cmwsIHZkY3RybDAsIHZkY3RybDQ7CisJaW50IGxpbmVfc2l6ZSwgZmJfc2l6ZTsKKwlpbnQgcmVlbmFibGUgPSAwOworCisJbGluZV9zaXplID0gIGZiX2luZm8tPnZhci54cmVzICogKGZiX2luZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzKTsKKwlmYl9zaXplID0gZmJfaW5mby0+dmFyLnlyZXNfdmlydHVhbCAqIGxpbmVfc2l6ZTsKKworCWlmIChmYl9zaXplID4gZmJfaW5mby0+Zml4LnNtZW1fbGVuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZiX2luZm8tPmZpeC5saW5lX2xlbmd0aCA9IGxpbmVfc2l6ZTsKKworCS8qCisJICogSXQgc2VlbXMsIHlvdSBjYW4ndCByZS1wcm9ncmFtIHRoZSBjb250cm9sbGVyIGlmIGl0IGlzIHN0aWxsIHJ1bm5pbmcuCisJICogVGhpcyBtYXkgbGVhZCBpbnRvIHNoaWZ0ZWQgcGljdHVyZXMgKEZJRk8gaXNzdWU/KS4KKwkgKiBTbywgZmlyc3Qgc3RvcCB0aGUgY29udHJvbGxlciBhbmQgZHJhaW4gaXRzIEZJRk9zCisJICovCisJaWYgKGhvc3QtPmVuYWJsZWQpIHsKKwkJcmVlbmFibGUgPSAxOworCQlteHNmYl9kaXNhYmxlX2NvbnRyb2xsZXIoZmJfaW5mbyk7CisJfQorCisJLyogY2xlYXIgdGhlIEZJRk9zICovCisJd3JpdGVsKENUUkwxX0ZJRk9fQ0xFQVIsIGhvc3QtPmJhc2UgKyBMQ0RDX0NUUkwxICsgUkVHX1NFVCk7CisKKwljdHJsID0gQ1RSTF9CWVBBU1NfQ09VTlQgfCBDVFJMX01BU1RFUiB8CisJCUNUUkxfU0VUX0JVU19XSURUSChob3N0LT5sZF9pbnRmX3dpZHRoKTs7CisKKwlzd2l0Y2ggKGZiX2luZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMTY6CisJCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgIlNldHRpbmcgdXAgUkdCNTY1IG1vZGVcbiIpOworCQljdHJsIHw9IENUUkxfU0VUX1dPUkRfTEVOR1RIKDApOworCQl3cml0ZWwoQ1RSTDFfU0VUX0JZVEVfUEFDS0FHSU5HKDB4ZiksIGhvc3QtPmJhc2UgKyBMQ0RDX0NUUkwxKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiU2V0dGluZyB1cCBSR0I4ODgvNjY2IG1vZGVcbiIpOworCQljdHJsIHw9IENUUkxfU0VUX1dPUkRfTEVOR1RIKDMpOworCQlzd2l0Y2ggKGhvc3QtPmxkX2ludGZfd2lkdGgpIHsKKwkJY2FzZSBTVE1MQ0RJRl84QklUOgorCQkJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LAorCQkJCQkiVW5zdXBwb3J0ZWQgTENEIGJ1cyB3aWR0aCBtYXBwaW5nXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQljYXNlIFNUTUxDRElGXzE2QklUOgorCQljYXNlIFNUTUxDRElGXzE4QklUOgorCQkJLyogMjQgYml0IHRvIDE4IGJpdCBtYXBwaW5nICovCisJCQljdHJsIHw9IENUUkxfREYyNDsgLyogaWdub3JlIHRoZSB1cHBlciAyIGJpdHMgaW4KKwkJCQkJICAgICogIGVhY2ggY29sb3VyIGNvbXBvbmVudAorCQkJCQkgICAgKi8KKwkJCWJyZWFrOworCQljYXNlIFNUTUxDRElGXzI0QklUOgorCQkJLyogcmVhbCAyNCBiaXQgKi8KKwkJCWJyZWFrOworCQl9CisJCS8qIGRvIG5vdCB1c2UgcGFja2VkIHBpeGVscyA9IG9uZSBwaXhlbCBwZXIgd29yZCBpbnN0ZWFkICovCisJCXdyaXRlbChDVFJMMV9TRVRfQllURV9QQUNLQUdJTkcoMHg3KSwgaG9zdC0+YmFzZSArIExDRENfQ1RSTDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJVbmhhbmRsZWQgY29sb3IgZGVwdGggb2YgJXVcbiIsCisJCQkJZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKGN0cmwsIGhvc3QtPmJhc2UgKyBMQ0RDX0NUUkwpOworCisJd3JpdGVsKFRSQU5TRkVSX0NPVU5UX1NFVF9WQ09VTlQoZmJfaW5mby0+dmFyLnlyZXMpIHwKKwkJCVRSQU5TRkVSX0NPVU5UX1NFVF9IQ09VTlQoZmJfaW5mby0+dmFyLnhyZXMpLAorCQkJaG9zdC0+YmFzZSArIGhvc3QtPmRldmRhdGEtPnRyYW5zZmVyX2NvdW50KTsKKworCXZkY3RybDAgPSBWRENUUkwwX0VOQUJMRV9QUkVTRU5UIHwJLyogYWx3YXlzIGluIERPVENMT0NLIG1vZGUgKi8KKwkJVkRDVFJMMF9WU1lOQ19QRVJJT0RfVU5JVCB8CisJCVZEQ1RSTDBfVlNZTkNfUFVMU0VfV0lEVEhfVU5JVCB8CisJCVZEQ1RSTDBfU0VUX1ZTWU5DX1BVTFNFX1dJRFRIKGZiX2luZm8tPnZhci52c3luY19sZW4pOworCWlmIChmYl9pbmZvLT52YXIuc3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKQorCQl2ZGN0cmwwIHw9IFZEQ1RSTDBfSFNZTkNfQUNUX0hJR0g7CisJaWYgKGZiX2luZm8tPnZhci5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKQorCQl2ZGN0cmwwIHw9IFZEQ1RSTDBfVlNZTkNfQUNUX0hJR0g7CisJaWYgKGZiX2luZm8tPnZhci5zeW5jICYgRkJfU1lOQ19EQVRBX0VOQUJMRV9ISUdIX0FDVCkKKwkJdmRjdHJsMCB8PSBWRENUUkwwX0VOQUJMRV9BQ1RfSElHSDsKKwlpZiAoZmJfaW5mby0+dmFyLnN5bmMgJiBGQl9TWU5DX0RPVENMS19GQUlMSU5HX0FDVCkKKwkJdmRjdHJsMCB8PSBWRENUUkwwX0RPVENMS19BQ1RfRkFJTElORzsKKworCXdyaXRlbCh2ZGN0cmwwLCBob3N0LT5iYXNlICsgTENEQ19WRENUUkwwKTsKKworCS8qIGZyYW1lIGxlbmd0aCBpbiBsaW5lcyAqLworCXdyaXRlbChmYl9pbmZvLT52YXIudXBwZXJfbWFyZ2luICsgZmJfaW5mby0+dmFyLnZzeW5jX2xlbiArCisJCWZiX2luZm8tPnZhci5sb3dlcl9tYXJnaW4gKyBmYl9pbmZvLT52YXIueXJlcywKKwkJaG9zdC0+YmFzZSArIExDRENfVkRDVFJMMSk7CisKKwkvKiBsaW5lIGxlbmd0aCBpbiB1bml0cyBvZiBjbG9ja3Mgb3IgcGl4ZWxzICovCisJd3JpdGVsKHNldF9oc3luY19wdWxzZV93aWR0aChob3N0LCBmYl9pbmZvLT52YXIuaHN5bmNfbGVuKSB8CisJCVZEQ1RSTDJfU0VUX0hTWU5DX1BFUklPRChmYl9pbmZvLT52YXIubGVmdF9tYXJnaW4gKworCQlmYl9pbmZvLT52YXIuaHN5bmNfbGVuICsgZmJfaW5mby0+dmFyLnJpZ2h0X21hcmdpbiArCisJCWZiX2luZm8tPnZhci54cmVzKSwKKwkJaG9zdC0+YmFzZSArIExDRENfVkRDVFJMMik7CisKKwl3cml0ZWwoU0VUX0hPUl9XQUlUX0NOVChmYl9pbmZvLT52YXIubGVmdF9tYXJnaW4gKworCQlmYl9pbmZvLT52YXIuaHN5bmNfbGVuKSB8CisJCVNFVF9WRVJUX1dBSVRfQ05UKGZiX2luZm8tPnZhci51cHBlcl9tYXJnaW4gKworCQkJZmJfaW5mby0+dmFyLnZzeW5jX2xlbiksCisJCWhvc3QtPmJhc2UgKyBMQ0RDX1ZEQ1RSTDMpOworCisJdmRjdHJsNCA9IFNFVF9ET1RDTEtfSF9WQUxJRF9EQVRBX0NOVChmYl9pbmZvLT52YXIueHJlcyk7CisJaWYgKG14c2ZiX2lzX3Y0KGhvc3QpKQorCQl2ZGN0cmw0IHw9IFZEQ1RSTDRfU0VUX0RPVENMS19ETFkoaG9zdC0+ZG90Y2xrX2RlbGF5KTsKKwl3cml0ZWwodmRjdHJsNCwgaG9zdC0+YmFzZSArIExDRENfVkRDVFJMNCk7CisKKwl3cml0ZWwoZmJfaW5mby0+Zml4LnNtZW1fc3RhcnQgKworCQkJZmJfaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogZmJfaW5mby0+dmFyLnlvZmZzZXQsCisJCQlob3N0LT5iYXNlICsgaG9zdC0+ZGV2ZGF0YS0+bmV4dF9idWYpOworCisJaWYgKHJlZW5hYmxlKQorCQlteHNmYl9lbmFibGVfY29udHJvbGxlcihmYl9pbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14c2ZiX3NldGNvbHJlZyh1X2ludCByZWdubywgdV9pbnQgcmVkLCB1X2ludCBncmVlbiwgdV9pbnQgYmx1ZSwKKwkJdV9pbnQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQgPSAtRUlOVkFMOworCisJLyoKKwkgKiBJZiBncmV5c2NhbGUgaXMgdHJ1ZSwgdGhlbiB3ZSBjb252ZXJ0IHRoZSBSR0IgdmFsdWUKKwkgKiB0byBncmV5c2NhbGUgbm8gbWF0dGVyIHdoYXQgdmlzdWFsIHdlIGFyZSB1c2luZy4KKwkgKi8KKwlpZiAoZmJfaW5mby0+dmFyLmdyYXlzY2FsZSkKKwkJcmVkID0gZ3JlZW4gPSBibHVlID0gKDE5NTk1ICogcmVkICsgMzg0NzAgKiBncmVlbiArCisJCQkJCTc0NzEgKiBibHVlKSA+PiAxNjsKKworCXN3aXRjaCAoZmJfaW5mby0+Zml4LnZpc3VhbCkgeworCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKKwkJLyoKKwkJICogMTIgb3IgMTYtYml0IFRydWUgQ29sb3VyLiAgV2UgZW5jb2RlIHRoZSBSR0IgdmFsdWUKKwkJICogYWNjb3JkaW5nIHRvIHRoZSBSR0IgYml0ZmllbGQgaW5mb3JtYXRpb24uCisJCSAqLworCQlpZiAocmVnbm8gPCAxNikgeworCQkJdTMyICpwYWwgPSBmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKworCQkJdmFsICA9IGNoYW5fdG9fZmllbGQocmVkLCAmZmJfaW5mby0+dmFyLnJlZCk7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJmZiX2luZm8tPnZhci5ncmVlbik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmZmJfaW5mby0+dmFyLmJsdWUpOworCisJCQlwYWxbcmVnbm9dID0gdmFsOworCQkJcmV0ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjoKKwljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBteHNmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCXN0cnVjdCBteHNmYl9pbmZvICpob3N0ID0gdG9faW14ZmJfaG9zdChmYl9pbmZvKTsKKworCXN3aXRjaCAoYmxhbmspIHsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgorCWNhc2UgRkJfQkxBTktfTk9STUFMOgorCQlpZiAoaG9zdC0+ZW5hYmxlZCkKKwkJCW14c2ZiX2Rpc2FibGVfY29udHJvbGxlcihmYl9pbmZvKTsKKwkJYnJlYWs7CisKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCWlmICghaG9zdC0+ZW5hYmxlZCkKKwkJCW14c2ZiX2VuYWJsZV9jb250cm9sbGVyKGZiX2luZm8pOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhzZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCXN0cnVjdCBteHNmYl9pbmZvICpob3N0ID0gdG9faW14ZmJfaG9zdChmYl9pbmZvKTsKKwl1bnNpZ25lZCBvZmZzZXQ7CisKKwlpZiAodmFyLT54b2Zmc2V0ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJb2Zmc2V0ID0gZmJfaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogdmFyLT55b2Zmc2V0OworCisJLyogdXBkYXRlIG9uIG5leHQgVlNZTkMgKi8KKwl3cml0ZWwoZmJfaW5mby0+Zml4LnNtZW1fc3RhcnQgKyBvZmZzZXQsCisJCQlob3N0LT5iYXNlICsgaG9zdC0+ZGV2ZGF0YS0+bmV4dF9idWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIG14c2ZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyID0gbXhzZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyID0gbXhzZmJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnID0gbXhzZmJfc2V0Y29scmVnLAorCS5mYl9ibGFuayA9IG14c2ZiX2JsYW5rLAorCS5mYl9wYW5fZGlzcGxheSA9IG14c2ZiX3Bhbl9kaXNwbGF5LAorCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBteHNmYl9yZXN0b3JlX21vZGUoc3RydWN0IG14c2ZiX2luZm8gKmhvc3QpCit7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSAmaG9zdC0+ZmJfaW5mbzsKKwl1bnNpZ25lZCBsaW5lX2NvdW50OworCXVuc2lnbmVkIHBlcmlvZDsKKwl1bnNpZ25lZCBsb25nIHBhLCBmYnNpemU7CisJaW50IGJpdHNfcGVyX3BpeGVsLCBvZnM7CisJdTMyIHRyYW5zZmVyX2NvdW50LCB2ZGN0cmwwLCB2ZGN0cmwyLCB2ZGN0cmwzLCB2ZGN0cmw0LCBjdHJsOworCXN0cnVjdCBmYl92aWRlb21vZGUgdm1vZGU7CisKKwkvKiBPbmx5IHJlc3RvcmUgdGhlIG1vZGUgd2hlbiB0aGUgY29udHJvbGxlciBpcyBydW5uaW5nICovCisJY3RybCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBMQ0RDX0NUUkwpOworCWlmICghKGN0cmwgJiBDVFJMX1JVTikpCisJCXJldHVybiAtRUlOVkFMOworCisJdmRjdHJsMCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBMQ0RDX1ZEQ1RSTDApOworCXZkY3RybDIgPSByZWFkbChob3N0LT5iYXNlICsgTENEQ19WRENUUkwyKTsKKwl2ZGN0cmwzID0gcmVhZGwoaG9zdC0+YmFzZSArIExDRENfVkRDVFJMMyk7CisJdmRjdHJsNCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBMQ0RDX1ZEQ1RSTDQpOworCisJdHJhbnNmZXJfY291bnQgPSByZWFkbChob3N0LT5iYXNlICsgaG9zdC0+ZGV2ZGF0YS0+dHJhbnNmZXJfY291bnQpOworCisJdm1vZGUueHJlcyA9IFRSQU5TRkVSX0NPVU5UX0dFVF9IQ09VTlQodHJhbnNmZXJfY291bnQpOworCXZtb2RlLnlyZXMgPSBUUkFOU0ZFUl9DT1VOVF9HRVRfVkNPVU5UKHRyYW5zZmVyX2NvdW50KTsKKworCXN3aXRjaCAoQ1RSTF9HRVRfV09SRF9MRU5HVEgoY3RybCkpIHsKKwljYXNlIDA6CisJCWJpdHNfcGVyX3BpeGVsID0gMTY7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYml0c19wZXJfcGl4ZWwgPSAzMjsKKwljYXNlIDE6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gYml0c19wZXJfcGl4ZWw7CisKKwl2bW9kZS5waXhjbG9jayA9IEtIWjJQSUNPUyhjbGtfZ2V0X3JhdGUoaG9zdC0+Y2xrKSAvIDEwMDBVKTsKKwl2bW9kZS5oc3luY19sZW4gPSBnZXRfaHN5bmNfcHVsc2Vfd2lkdGgoaG9zdCwgdmRjdHJsMik7CisJdm1vZGUubGVmdF9tYXJnaW4gPSBHRVRfSE9SX1dBSVRfQ05UKHZkY3RybDMpIC0gdm1vZGUuaHN5bmNfbGVuOworCXZtb2RlLnJpZ2h0X21hcmdpbiA9IFZEQ1RSTDJfR0VUX0hTWU5DX1BFUklPRCh2ZGN0cmwyKSAtIHZtb2RlLmhzeW5jX2xlbiAtCisJCXZtb2RlLmxlZnRfbWFyZ2luIC0gdm1vZGUueHJlczsKKwl2bW9kZS52c3luY19sZW4gPSBWRENUUkwwX0dFVF9WU1lOQ19QVUxTRV9XSURUSCh2ZGN0cmwwKTsKKwlwZXJpb2QgPSByZWFkbChob3N0LT5iYXNlICsgTENEQ19WRENUUkwxKTsKKwl2bW9kZS51cHBlcl9tYXJnaW4gPSBHRVRfVkVSVF9XQUlUX0NOVCh2ZGN0cmwzKSAtIHZtb2RlLnZzeW5jX2xlbjsKKwl2bW9kZS5sb3dlcl9tYXJnaW4gPSBwZXJpb2QgLSB2bW9kZS52c3luY19sZW4gLSB2bW9kZS51cHBlcl9tYXJnaW4gLSB2bW9kZS55cmVzOworCisJdm1vZGUudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOworCisJdm1vZGUuc3luYyA9IDA7CisJaWYgKHZkY3RybDAgJiBWRENUUkwwX0hTWU5DX0FDVF9ISUdIKQorCQl2bW9kZS5zeW5jIHw9IEZCX1NZTkNfSE9SX0hJR0hfQUNUOworCWlmICh2ZGN0cmwwICYgVkRDVFJMMF9WU1lOQ19BQ1RfSElHSCkKKwkJdm1vZGUuc3luYyB8PSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1Q7CisKKwlwcl9kZWJ1ZygiUmVjb25zdHJ1Y3RlZCB2aWRlbyBtb2RlOlxuIik7CisJcHJfZGVidWcoIiVkeCVkLCBoc3luYzogJXUgbGVmdDogJXUsIHJpZ2h0OiAldSwgdnN5bmM6ICV1LCB1cHBlcjogJXUsIGxvd2VyOiAldVxuIiwKKwkJCXZtb2RlLnhyZXMsIHZtb2RlLnlyZXMsCisJCQl2bW9kZS5oc3luY19sZW4sIHZtb2RlLmxlZnRfbWFyZ2luLCB2bW9kZS5yaWdodF9tYXJnaW4sCisJCQl2bW9kZS52c3luY19sZW4sIHZtb2RlLnVwcGVyX21hcmdpbiwgdm1vZGUubG93ZXJfbWFyZ2luKTsKKwlwcl9kZWJ1ZygicGl4Y2xrOiAlbGRrSHpcbiIsIFBJQ09TMktIWih2bW9kZS5waXhjbG9jaykpOworCisJZmJfYWRkX3ZpZGVvbW9kZSgmdm1vZGUsICZmYl9pbmZvLT5tb2RlbGlzdCk7CisKKwlob3N0LT5sZF9pbnRmX3dpZHRoID0gQ1RSTF9HRVRfQlVTX1dJRFRIKGN0cmwpOworCWhvc3QtPmRvdGNsa19kZWxheSA9IFZEQ1RSTDRfR0VUX0RPVENMS19ETFkodmRjdHJsNCk7CisKKwlmYl9pbmZvLT5maXgubGluZV9sZW5ndGggPSB2bW9kZS54cmVzICogKGJpdHNfcGVyX3BpeGVsID4+IDMpOworCisJcGEgPSByZWFkbChob3N0LT5iYXNlICsgaG9zdC0+ZGV2ZGF0YS0+Y3VyX2J1Zik7CisJZmJzaXplID0gZmJfaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogdm1vZGUueXJlczsKKwlpZiAocGEgPCBmYl9pbmZvLT5maXguc21lbV9zdGFydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBhICsgZmJzaXplID4gZmJfaW5mby0+Zml4LnNtZW1fc3RhcnQgKyBmYl9pbmZvLT5maXguc21lbV9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCW9mcyA9IHBhIC0gZmJfaW5mby0+Zml4LnNtZW1fc3RhcnQ7CisJaWYgKG9mcykgeworCQltZW1tb3ZlKGZiX2luZm8tPnNjcmVlbl9iYXNlLCBmYl9pbmZvLT5zY3JlZW5fYmFzZSArIG9mcywgZmJzaXplKTsKKwkJd3JpdGVsKGZiX2luZm8tPmZpeC5zbWVtX3N0YXJ0LCBob3N0LT5iYXNlICsgaG9zdC0+ZGV2ZGF0YS0+bmV4dF9idWYpOworCX0KKworCWxpbmVfY291bnQgPSBmYl9pbmZvLT5maXguc21lbV9sZW4gLyBmYl9pbmZvLT5maXgubGluZV9sZW5ndGg7CisJZmJfaW5mby0+Zml4LnlwYW5zdGVwID0gMTsKKworCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwlob3N0LT5lbmFibGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBteHNmYl9pbml0X2ZiaW5mbyhzdHJ1Y3QgbXhzZmJfaW5mbyAqaG9zdCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9ICZob3N0LT5mYl9pbmZvOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmZiX2luZm8tPnZhcjsKKwlzdHJ1Y3QgbXhzZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBob3N0LT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlkbWFfYWRkcl90IGZiX3BoeXM7CisJdm9pZCAqZmJfdmlydDsKKwl1bnNpZ25lZCBmYl9zaXplID0gcGRhdGEtPmZiX3NpemU7CisKKwlmYl9pbmZvLT5mYm9wcyA9ICZteHNmYl9vcHM7CisJZmJfaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUIHwgRkJJTkZPX1JFQURTX0ZBU1Q7CisJc3RybGNweShmYl9pbmZvLT5maXguaWQsICJteHMiLCBzaXplb2YoZmJfaW5mby0+Zml4LmlkKSk7CisJZmJfaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJZmJfaW5mby0+Zml4LnlwYW5zdGVwID0gMTsKKwlmYl9pbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUiwKKwlmYl9pbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOworCisJdmFyLT5iaXRzX3Blcl9waXhlbCA9IHBkYXRhLT5kZWZhdWx0X2JwcCA/IHBkYXRhLT5kZWZhdWx0X2JwcCA6IDE2OworCXZhci0+bm9uc3RkID0gMDsKKwl2YXItPmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworCXZhci0+YWNjZWxfZmxhZ3MgPSAwOworCXZhci0+dm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOworCisJaG9zdC0+ZG90Y2xrX2RlbGF5ID0gcGRhdGEtPmRvdGNsa19kZWxheTsKKwlob3N0LT5sZF9pbnRmX3dpZHRoID0gcGRhdGEtPmxkX2ludGZfd2lkdGg7CisKKwkvKiBNZW1vcnkgYWxsb2NhdGlvbiBmb3IgZnJhbWVidWZmZXIgKi8KKwlpZiAocGRhdGEtPmZiX3BoeXMpIHsKKwkJaWYgKCFmYl9zaXplKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZmJfcGh5cyA9IHBkYXRhLT5mYl9waHlzOworCisJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGZiX3BoeXMsIGZiX3NpemUsIGhvc3QtPnBkZXYtPm5hbWUpKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZmJfdmlydCA9IGlvcmVtYXAoZmJfcGh5cywgZmJfc2l6ZSk7CisJCWlmICghZmJfdmlydCkgeworCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGZiX3BoeXMsIGZiX3NpemUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJaG9zdC0+bWFwcGVkID0gMTsKKwl9IGVsc2UgeworCQlpZiAoIWZiX3NpemUpCisJCQlmYl9zaXplID0gU1pfMk07IC8qIGRlZmF1bHQgKi8KKwkJZmJfdmlydCA9IGFsbG9jX3BhZ2VzX2V4YWN0KGZiX3NpemUsIEdGUF9ETUEpOworCQlpZiAoIWZiX3ZpcnQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlmYl9waHlzID0gdmlydF90b19waHlzKGZiX3ZpcnQpOworCX0KKworCWZiX2luZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZmJfcGh5czsKKwlmYl9pbmZvLT5zY3JlZW5fYmFzZSA9IGZiX3ZpcnQ7CisJZmJfaW5mby0+c2NyZWVuX3NpemUgPSBmYl9pbmZvLT5maXguc21lbV9sZW4gPSBmYl9zaXplOworCisJaWYgKG14c2ZiX3Jlc3RvcmVfbW9kZShob3N0KSkKKwkJbWVtc2V0KGZiX3ZpcnQsIDAsIGZiX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBteHNmYl9mcmVlX3ZpZGVvbWVtKHN0cnVjdCBteHNmYl9pbmZvICpob3N0KQoreworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gJmhvc3QtPmZiX2luZm87CisKKwlpZiAoaG9zdC0+bWFwcGVkKSB7CisJCWlvdW5tYXAoZmJfaW5mby0+c2NyZWVuX2Jhc2UpOworCQlyZWxlYXNlX21lbV9yZWdpb24oZmJfaW5mby0+Zml4LnNtZW1fc3RhcnQsCisJCQkJZmJfaW5mby0+c2NyZWVuX3NpemUpOworCX0gZWxzZSB7CisJCWZyZWVfcGFnZXNfZXhhY3QoZmJfaW5mby0+c2NyZWVuX2Jhc2UsIGZiX2luZm8tPmZpeC5zbWVtX2xlbik7CisJfQorfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBteHNmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteHNmYl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBteHNmYl9pbmZvICpob3N0OworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvOworCXN0cnVjdCBmYl9tb2RlbGlzdCAqbW9kZWxpc3Q7CisJaW50IGksIHJldDsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gcGxhdGZvcm1kYXRhLiBHaXZpbmcgdXBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgbWVtb3J5IElPIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWZiX2luZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IG14c2ZiX2luZm8pLCAmcGRldi0+ZGV2KTsKKwlpZiAoIWZiX2luZm8pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGZiZGV2XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9hbGxvY19pbmZvOworCX0KKworCWhvc3QgPSB0b19pbXhmYl9ob3N0KGZiX2luZm8pOworCisJaG9zdC0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWhvc3QtPmJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2lvcmVtYXA7CisJfQorCisJaG9zdC0+cGRldiA9IHBkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CisKKwlob3N0LT5kZXZkYXRhID0gJm14c2ZiX2RldmRhdGFbcGRldi0+aWRfZW50cnktPmRyaXZlcl9kYXRhXTsKKworCWhvc3QtPmNsayA9IGNsa19nZXQoJmhvc3QtPnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihob3N0LT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoaG9zdC0+Y2xrKTsKKwkJZ290byBlcnJvcl9nZXRjbG9jazsKKwl9CisKKwlmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGttYWxsb2Moc2l6ZW9mKHUzMikgKiAxNiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX3BzZXVkb19wYWxsZXR0ZTsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmZmJfaW5mby0+bW9kZWxpc3QpOworCisJcmV0ID0gbXhzZmJfaW5pdF9mYmluZm8oaG9zdCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycm9yX2luaXRfZmI7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm1vZGVfY291bnQ7IGkrKykKKwkJZmJfYWRkX3ZpZGVvbW9kZSgmcGRhdGEtPm1vZGVfbGlzdFtpXSwgJmZiX2luZm8tPm1vZGVsaXN0KTsKKworCW1vZGVsaXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmZmJfaW5mby0+bW9kZWxpc3QsCisJCQlzdHJ1Y3QgZmJfbW9kZWxpc3QsIGxpc3QpOworCWZiX3ZpZGVvbW9kZV90b192YXIoJmZiX2luZm8tPnZhciwgJm1vZGVsaXN0LT5tb2RlKTsKKworCS8qIGluaXQgdGhlIGNvbG9yIGZpZWxkcyAqLworCW14c2ZiX2NoZWNrX3ZhcigmZmJfaW5mby0+dmFyLCBmYl9pbmZvKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZiX2luZm8pOworCisJcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJfaW5mbyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwiRmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKKwkJZ290byBlcnJvcl9yZWdpc3RlcjsKKwl9CisKKwlpZiAoIWhvc3QtPmVuYWJsZWQpIHsKKwkJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBMQ0RDX0NUUkwpOworCQlteHNmYl9zZXRfcGFyKGZiX2luZm8pOworCQlteHNmYl9lbmFibGVfY29udHJvbGxlcihmYl9pbmZvKTsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6ZWRcbiIpOworCisJcmV0dXJuIDA7CisKK2Vycm9yX3JlZ2lzdGVyOgorCWlmIChob3N0LT5lbmFibGVkKQorCQljbGtfZGlzYWJsZShob3N0LT5jbGspOworCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmZiX2luZm8tPm1vZGVsaXN0KTsKK2Vycm9yX2luaXRfZmI6CisJa2ZyZWUoZmJfaW5mby0+cHNldWRvX3BhbGV0dGUpOworZXJyb3JfcHNldWRvX3BhbGxldHRlOgorCWNsa19wdXQoaG9zdC0+Y2xrKTsKK2Vycm9yX2dldGNsb2NrOgorCWlvdW5tYXAoaG9zdC0+YmFzZSk7CitlcnJvcl9pb3JlbWFwOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJfaW5mbyk7CitlcnJvcl9hbGxvY19pbmZvOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXhzZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbXhzZmJfaW5mbyAqaG9zdCA9IHRvX2lteGZiX2hvc3QoZmJfaW5mbyk7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJaWYgKGhvc3QtPmVuYWJsZWQpCisJCW14c2ZiX2Rpc2FibGVfY29udHJvbGxlcihmYl9pbmZvKTsKKworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJfaW5mbyk7CisJa2ZyZWUoZmJfaW5mby0+cHNldWRvX3BhbGV0dGUpOworCW14c2ZiX2ZyZWVfdmlkZW9tZW0oaG9zdCk7CisJaW91bm1hcChob3N0LT5iYXNlKTsKKwljbGtfcHV0KGhvc3QtPmNsayk7CisKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiX2luZm8pOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgbXhzZmJfZGV2dHlwZVtdID0geworCXsKKwkJLm5hbWUgPSAiaW14MjMtZmIiLAorCQkuZHJpdmVyX2RhdGEgPSBNWFNGQl9WMywKKwl9LCB7CisJCS5uYW1lID0gImlteDI4LWZiIiwKKwkJLmRyaXZlcl9kYXRhID0gTVhTRkJfVjQsCisJfSwgeworCQkvKiBzZW50aW5lbCAqLworCX0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBteHNmYl9kZXZ0eXBlKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXhzZmJfZHJpdmVyID0geworCS5wcm9iZSA9IG14c2ZiX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChteHNmYl9yZW1vdmUpLAorCS5pZF90YWJsZSA9IG14c2ZiX2RldnR5cGUsCisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhzZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm14c2ZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBteHNmYl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14c2ZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG14c2ZiX2luaXQpOworbW9kdWxlX2V4aXQobXhzZmJfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIG14cyBmcmFtZWJ1ZmZlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKaW5kZXggNmFhYzZkMS4uODQ3MTAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKQEAgLTExMSw2ICsxMTEsNyBAQAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIm52aWRpYWJsJWQiLCBpbmZvLT5ub2RlKTsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEZCX0JBQ0tMSUdIVF9MRVZFTFMgLSAxOwogCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBpbmZvLT5kZXYsIHBhciwgJm52aWRpYV9ibF9vcHMsCiAJCQkJICAgICAgICZwcm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLWFjeDU2NWFrbS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1hY3g1NjVha20uYwppbmRleCBlNzczMTA2Li43ZTA0YzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLWFjeDU2NWFrbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtYWN4NTY1YWttLmMKQEAgLTUzNCw2ICs1MzQsNyBAQAogCiAJcHJvcHMuZmJfYmxhbmsgPSBGQl9CTEFOS19VTkJMQU5LOwogCXByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAogCWJsZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYWN4NTY1YWttIiwgJm1kLT5zcGktPmRldiwKIAkJCW1kLCAmYWN4NTY1YWttX2JsX29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEuYwppbmRleCA5YTEzOGY2Li5kMmIzNWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXNoYXJwLWxzMDM3djdkdzAxLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5jCkBAIC05OSw2ICs5OSw3IEBACiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBkc3NkZXYtPm1heF9iYWNrbGlnaHRfbGV2ZWw7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAKIAlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInNoYXJwLWxzIiwgJmRzc2Rldi0+ZGV2LCBkc3NkZXYsCiAJCQkmc2hhcnBfbHNfYmxfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10YWFsLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYwppbmRleCA2MTAyNmY5Li5jNzRlOGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYwpAQCAtNzI5LDYgKzcyOSw4IEBACiAJCXByb3BzLm1heF9icmlnaHRuZXNzID0gMjU1OwogCWVsc2UKIAkJcHJvcHMubWF4X2JyaWdodG5lc3MgPSAxMjc7CisKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKIAlibGRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInRhYWwiLCAmZHNzZGV2LT5kZXYsIGRzc2RldiwKIAkJCQkJICAmdGFhbF9ibF9vcHMsICZwcm9wcyk7CiAJaWYgKElTX0VSUihibGRldikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jIGIvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKaW5kZXggZGEzODgxOC4uZDhhYjdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKQEAgLTM1NSw2ICszNTUsNyBAQAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJpdmFibCVkIiwgaW5mby0+bm9kZSk7CiAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBGQl9CQUNLTElHSFRfTEVWRUxTIC0gMTsKIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgaW5mby0+ZGV2LCBwYXIsICZyaXZhX2JsX29wcywKIAkJCQkgICAgICAgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCmluZGV4IGQ2NmY5NjMuLjEzNzk5NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaApAQCAtOTQsOSArOTQsNiBAQAogZXh0ZXJuIGludCB2aWFmYl9EVklfT047CiBleHRlcm4gaW50IHZpYWZiX2hvdHBsdWc7CiAKLWV4dGVybiBpbnQgc3RyaWN0X3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLAotCXVuc2lnbmVkIGxvbmcgKnJlcyk7Ci0KIHU4IHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCiAJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgogCSpwbHZkc19jaGlwX2luZm8sIHU4IGluZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnIGIvZHJpdmVycy93MS9tYXN0ZXJzL0tjb25maWcKaW5kZXggODBiM2IxMi4uN2M2MDhjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL0tjb25maWcKQEAgLTYwLDcgKzYwLDcgQEAKIAogY29uZmlnIEhEUV9NQVNURVJfT01BUAogCXRyaXN0YXRlICJPTUFQIEhEUSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyNDMwIHx8IEFSQ0hfT01BUDMKKwlkZXBlbmRzIG9uIFNPQ19PTUFQMjQzMCB8fCBBUkNIX09NQVAzCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgMS13aXJlIG9yIEhEUSBJbnRlcmZhY2UKIAkgIG9uIGFuIE9NQVAgcHJvY2Vzc29yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCmluZGV4IDNkZDQ5NzEuLjJiNGFjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKQEAgLTEyNCw2ICsxMjQsOCBAQAogCXUzMiBwcmVfbWFyZ2luID0gR0VUX1dMRFJfVkFMKHRpbWVyX21hcmdpbik7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gd2Rldi0+YmFzZTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMod2Rldi0+ZGV2KTsKKwogCS8qIGp1c3QgY291bnQgdXAgYXQgMzIgS0h6ICovCiAJd2hpbGUgKF9fcmF3X3JlYWRsKGJhc2UgKyBPTUFQX1dBVENIRE9HX1dQUykgJiAweDA0KQogCQljcHVfcmVsYXgoKTsKQEAgLTEzMSw2ICsxMzMsOCBAQAogCV9fcmF3X3dyaXRlbChwcmVfbWFyZ2luLCBiYXNlICsgT01BUF9XQVRDSERPR19MRFIpOwogCXdoaWxlIChfX3Jhd19yZWFkbChiYXNlICsgT01BUF9XQVRDSERPR19XUFMpICYgMHgwNCkKIAkJY3B1X3JlbGF4KCk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKHdkZXYtPmRldik7CiB9CiAKIC8qCkBAIC0xNjAsNiArMTY0LDggQEAKIAlvbWFwX3dkdF9waW5nKHdkZXYpOyAvKiB0cmlnZ2VyIGxvYWRpbmcgb2YgbmV3IHRpbWVvdXQgdmFsdWUgKi8KIAlvbWFwX3dkdF9lbmFibGUod2Rldik7CiAKKwlwbV9ydW50aW1lX3B1dF9zeW5jKHdkZXYtPmRldik7CisKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKQEAgLTE3MSw2ICsxNzcsNyBAQAogCSAqICAgICAgU2h1dCBvZmYgdGhlIHRpbWVyIHVubGVzcyBOT1dBWU9VVCBpcyBkZWZpbmVkLgogCSAqLwogI2lmbmRlZiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKwlwbV9ydW50aW1lX2dldF9zeW5jKHdkZXYtPmRldik7CiAKIAlvbWFwX3dkdF9kaXNhYmxlKHdkZXYpOwogCkBAIC0xOTAsOSArMTk3LDExIEBACiAKIAkvKiBSZWZyZXNoIExPQURfVElNRS4gKi8KIAlpZiAobGVuKSB7CisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMod2Rldi0+ZGV2KTsKIAkJc3Bpbl9sb2NrKCZ3ZHRfbG9jayk7CiAJCW9tYXBfd2R0X3Bpbmcod2Rldik7CiAJCXNwaW5fdW5sb2NrKCZ3ZHRfbG9jayk7CisJCXBtX3J1bnRpbWVfcHV0X3N5bmMod2Rldi0+ZGV2KTsKIAl9CiAJcmV0dXJuIGxlbjsKIH0KQEAgLTIyNCwxNSArMjMzLDE4IEBACiAJCQlyZXR1cm4gcHV0X3VzZXIob21hcF9wcmNtX2dldF9yZXNldF9zb3VyY2VzKCksCiAJCQkJCShpbnQgX191c2VyICopYXJnKTsKIAljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJcG1fcnVudGltZV9nZXRfc3luYyh3ZGV2LT5kZXYpOwogCQlzcGluX2xvY2soJndkdF9sb2NrKTsKIAkJb21hcF93ZHRfcGluZyh3ZGV2KTsKIAkJc3Bpbl91bmxvY2soJndkdF9sb2NrKTsKKwkJcG1fcnVudGltZV9wdXRfc3luYyh3ZGV2LT5kZXYpOwogCQlyZXR1cm4gMDsKIAljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CiAJCWlmIChnZXRfdXNlcihuZXdfbWFyZ2luLCAoaW50IF9fdXNlciAqKWFyZykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJb21hcF93ZHRfYWRqdXN0X3RpbWVvdXQobmV3X21hcmdpbik7CiAKKwkJcG1fcnVudGltZV9nZXRfc3luYyh3ZGV2LT5kZXYpOwogCQlzcGluX2xvY2soJndkdF9sb2NrKTsKIAkJb21hcF93ZHRfZGlzYWJsZSh3ZGV2KTsKIAkJb21hcF93ZHRfc2V0X3RpbWVvdXQod2Rldik7CkBAIC0yNDAsNiArMjUyLDcgQEAKIAogCQlvbWFwX3dkdF9waW5nKHdkZXYpOwogCQlzcGluX3VubG9jaygmd2R0X2xvY2spOworCQlwbV9ydW50aW1lX3B1dF9zeW5jKHdkZXYtPmRldik7CiAJCS8qIEZhbGwgKi8KIAljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CiAJCXJldHVybiBwdXRfdXNlcih0aW1lcl9tYXJnaW4sIChpbnQgX191c2VyICopYXJnKTsKQEAgLTM0NSw4ICszNTgsMTEgQEAKIHsKIAlzdHJ1Y3Qgb21hcF93ZHRfZGV2ICp3ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlpZiAod2Rldi0+b21hcF93ZHRfdXNlcnMpCisJaWYgKHdkZXYtPm9tYXBfd2R0X3VzZXJzKSB7CisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMod2Rldi0+ZGV2KTsKIAkJb21hcF93ZHRfZGlzYWJsZSh3ZGV2KTsKKwkJcG1fcnVudGltZV9wdXRfc3luYyh3ZGV2LT5kZXYpOworCX0KIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgb21hcF93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0zODEsOCArMzk3LDExIEBACiB7CiAJc3RydWN0IG9tYXBfd2R0X2RldiAqd2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JaWYgKHdkZXYtPm9tYXBfd2R0X3VzZXJzKQorCWlmICh3ZGV2LT5vbWFwX3dkdF91c2VycykgeworCQlwbV9ydW50aW1lX2dldF9zeW5jKHdkZXYtPmRldik7CiAJCW9tYXBfd2R0X2Rpc2FibGUod2Rldik7CisJCXBtX3J1bnRpbWVfcHV0X3N5bmMod2Rldi0+ZGV2KTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5Miw4ICs0MTEsMTAgQEAKIAlzdHJ1Y3Qgb21hcF93ZHRfZGV2ICp3ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAod2Rldi0+b21hcF93ZHRfdXNlcnMpIHsKKwkJcG1fcnVudGltZV9nZXRfc3luYyh3ZGV2LT5kZXYpOwogCQlvbWFwX3dkdF9lbmFibGUod2Rldik7CiAJCW9tYXBfd2R0X3Bpbmcod2Rldik7CisJCXBtX3J1bnRpbWVfcHV0X3N5bmMod2Rldi0+ZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMKaW5kZXggMjhmMTIxNC4uMzA2NmE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogTU9EVUxFX0FVVEhPUigiQ2FsaW4gQS4gQ3VsaWFudSA8Y2FsaW5AYWp2YXIub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJIYXJkd2FyZSBXYXRjaGRvZyBEZXZpY2UgZm9yIFdpbnN5c3RlbXMgRVBYLUMzIFNCQy4gICIKIAkiTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSB0byBwcm9iZSBmb3IgdGhpcyBkZXZpY2UgLS0gIgotCSJzbyBvbmx5IHVzZSBpdCBpZiB5b3UgYXJlICpzdXJlKiB5b3UgYXJlIHJ1bm5uaW5nIG9uIHRoaXMgc3BlY2lmaWMgIgorCSJzbyBvbmx5IHVzZSBpdCBpZiB5b3UgYXJlICpzdXJlKiB5b3UgYXJlIHJ1bm5pbmcgb24gdGhpcyBzcGVjaWZpYyAiCiAJIlNCQyBzeXN0ZW0gZnJvbSBXaW5zeXN0ZW1zISAgSXQgd3JpdGVzIHRvIElPIHBvcnRzIDB4MWVlIGFuZCAweDFlZiEiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL2FjbC5jIGIvZnMvOXAvYWNsLmMKaW5kZXggNTE1NDU1Mi4uNTM1YWI2ZSAxMDA2NDQKLS0tIGEvZnMvOXAvYWNsLmMKKysrIGIvZnMvOXAvYWNsLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7CisJdjlzZXMgPSB2OWZzX2RlbnRyeTJ2OXNlcyhkZW50cnkpOwogCS8qCiAJICogV2UgYWxsb3cgc2V0L2dldC9saXN0IG9mIGFjbCB3aGVuIGFjY2Vzcz1jbGllbnQgaXMgbm90IHNwZWNpZmllZAogCSAqLwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKKwl2OXNlcyA9IHY5ZnNfZGVudHJ5MnY5c2VzKGRlbnRyeSk7CiAJLyoKIAkgKiBzZXQgdGhlIGF0dHJpYnV0ZSBvbiB0aGUgcmVtb3RlLiBXaXRob3V0IGV2ZW4gbG9va2luZyBhdCB0aGUKIAkgKiB4YXR0ciB2YWx1ZS4gV2UgbGVhdmUgaXQgdG8gdGhlIHNlcnZlciB0byB2YWxpZGF0ZQpAQCAtMzIzLDcgKzMyMyw3IEBACiAKIAlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmICh2YWx1ZSkgewogCQkvKiB1cGRhdGUgdGhlIGNhY2hlZCBhY2wgdmFsdWUgKi8KZGlmZiAtLWdpdCBhL2ZzLzlwL2ZpZC5jIGIvZnMvOXAvZmlkLmMKaW5kZXggY2Q2M2UwMC4uMGVlNTk0NSAxMDA2NDQKLS0tIGEvZnMvOXAvZmlkLmMKKysrIGIvZnMvOXAvZmlkLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAJc3RydWN0IHA5X2ZpZCAqZmlkLCAqb2xkX2ZpZCA9IE5VTEw7CiAKLQl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKKwl2OXNlcyA9IHY5ZnNfZGVudHJ5MnY5c2VzKGRlbnRyeSk7CiAJYWNjZXNzID0gdjlzZXMtPmZsYWdzICYgVjlGU19BQ0NFU1NfTUFTSzsKIAlmaWQgPSB2OWZzX2ZpZF9maW5kKGRlbnRyeSwgdWlkLCBhbnkpOwogCWlmIChmaWQpCkBAIC0yMzcsNyArMjM3LDcgQEAKIAlpbnQgIGFueSwgYWNjZXNzOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAKLQl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKKwl2OXNlcyA9IHY5ZnNfZGVudHJ5MnY5c2VzKGRlbnRyeSk7CiAJYWNjZXNzID0gdjlzZXMtPmZsYWdzICYgVjlGU19BQ0NFU1NfTUFTSzsKIAlzd2l0Y2ggKGFjY2VzcykgewogCWNhc2UgVjlGU19BQ0NFU1NfU0lOR0xFOgpAQCAtMjg2LDkgKzI4NiwxMSBAQAogCiBzdHJ1Y3QgcDlfZmlkICp2OWZzX3dyaXRlYmFja19maWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWludCBlcnI7CisJaW50IGVyciwgZmxhZ3M7CiAJc3RydWN0IHA5X2ZpZCAqZmlkOworCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAKKwl2OXNlcyA9IHY5ZnNfZGVudHJ5MnY5c2VzKGRlbnRyeSk7CiAJZmlkID0gdjlmc19maWRfY2xvbmVfd2l0aF91aWQoZGVudHJ5LCAwKTsKIAlpZiAoSVNfRVJSKGZpZCkpCiAJCWdvdG8gZXJyb3Jfb3V0OwpAQCAtMjk3LDggKzI5OSwxNyBAQAogCSAqIGRpcnR5IHBhZ2VzLiBXZSBhbHdheXMgcmVxdWVzdCBmb3IgdGhlIG9wZW4gZmlkIGluIHJlYWQtd3JpdGUKIAkgKiBtb2RlIHNvIHRoYXQgYSBwYXJ0aWFsIHBhZ2Ugd3JpdGUgd2hpY2ggcmVzdWx0IGluIHBhZ2UKIAkgKiByZWFkIGNhbiB3b3JrLgorCSAqCisJICogd2UgZG9uJ3QgaGF2ZSBhIHRzeW5jZnMgb3BlcmF0aW9uIGZvciBvbGRlciB2ZXJzaW9uCisJICogb2YgcHJvdG9jb2wuIFNvIG1ha2Ugc3VyZSB0aGUgd3JpdGUgYmFjayBmaWQgaXMKKwkgKiBvcGVuZWQgaW4gT19TWU5DIG1vZGUuCiAJICovCi0JZXJyID0gcDlfY2xpZW50X29wZW4oZmlkLCBPX1JEV1IpOworCWlmICghdjlmc19wcm90b19kb3RsKHY5c2VzKSkKKwkJZmxhZ3MgPSBPX1JEV1IgfCBPX1NZTkM7CisJZWxzZQorCQlmbGFncyA9IE9fUkRXUjsKKworCWVyciA9IHA5X2NsaWVudF9vcGVuKGZpZCwgZmxhZ3MpOwogCWlmIChlcnIgPCAwKSB7CiAJCXA5X2NsaWVudF9jbHVuayhmaWQpOwogCQlmaWQgPSBFUlJfUFRSKGVycik7CmRpZmYgLS1naXQgYS9mcy85cC92OWZzLmggYi9mcy85cC92OWZzLmgKaW5kZXggYmQ4NDk2ZC4uOTY2NWMyYiAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmcy5oCisrKyBiL2ZzLzlwL3Y5ZnMuaApAQCAtMTMwLDYgKzEzMCw3IEBACiAjZW5kaWYKIAl1bnNpZ25lZCBpbnQgY2FjaGVfdmFsaWRpdHk7CiAJc3RydWN0IHA5X2ZpZCAqd3JpdGViYWNrX2ZpZDsKKwlzdHJ1Y3QgbXV0ZXggdl9tdXRleDsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApAQCAtMTczLDYgKzE3NCwxMSBAQAogCXJldHVybiAoaW5vZGUtPmlfc2ItPnNfZnNfaW5mbyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OWZzX2RlbnRyeTJ2OXNlcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIGRlbnRyeS0+ZF9zYi0+c19mc19pbmZvOworfQorCiBzdGF0aWMgaW5saW5lIGludCB2OWZzX3Byb3RvX2RvdHUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcykKIHsKIAlyZXR1cm4gdjlzZXMtPmZsYWdzICYgVjlGU19QUk9UT18yMDAwVTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IDc4YmNiOTdjLi5mZmVkNTU4IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTkwLDcgKzkwLDkgQEAKIAl9CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaWQ7Ci0JaWYgKHY5c2VzLT5jYWNoZSAmJiAhdjlpbm9kZS0+d3JpdGViYWNrX2ZpZCkgeworCW11dGV4X2xvY2soJnY5aW5vZGUtPnZfbXV0ZXgpOworCWlmICh2OXNlcy0+Y2FjaGUgJiYgIXY5aW5vZGUtPndyaXRlYmFja19maWQgJiYKKwkgICAgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkpIHsKIAkJLyoKIAkJICogY2xvbmUgYSBmaWQgYW5kIGFkZCBpdCB0byB3cml0ZWJhY2tfZmlkCiAJCSAqIHdlIGRvIGl0IGR1cmluZyBvcGVuIHRpbWUgaW5zdGVhZCBvZgpAQCAtMTAxLDEwICsxMDMsMTIgQEAKIAkJZmlkID0gdjlmc193cml0ZWJhY2tfZmlkKGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCQlpZiAoSVNfRVJSKGZpZCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJCW11dGV4X3VubG9jaygmdjlpbm9kZS0+dl9tdXRleCk7CiAJCQlnb3RvIG91dF9lcnJvcjsKIAkJfQogCQl2OWlub2RlLT53cml0ZWJhY2tfZmlkID0gKHZvaWQgKikgZmlkOwogCX0KKwltdXRleF91bmxvY2soJnY5aW5vZGUtPnZfbXV0ZXgpOwogI2lmZGVmIENPTkZJR185UF9GU0NBQ0hFCiAJaWYgKHY5c2VzLT5jYWNoZSkKIAkJdjlmc19jYWNoZV9pbm9kZV9zZXRfY29va2llKGlub2RlLCBmaWxlKTsKQEAgLTUwNCw5ICs1MDgsMTIgQEAKIAlpZiAoIWNvdW50KQogCQlnb3RvIG91dDsKIAotCXJldHVybiB2OWZzX2ZpbGVfd3JpdGVfaW50ZXJuYWwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKKwlyZXR2YWwgPSB2OWZzX2ZpbGVfd3JpdGVfaW50ZXJuYWwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkJZmlscC0+cHJpdmF0ZV9kYXRhLAotCQkJCQlkYXRhLCBjb3VudCwgb2Zmc2V0LCAxKTsKKwkJCQkJZGF0YSwgY291bnQsICZvcmlnaW4sIDEpOworCS8qIHVwZGF0ZSBvZmZzZXQgb24gc3VjY2Vzc2Z1bCB3cml0ZSAqLworCWlmIChyZXR2YWwgPiAwKQorCQkqb2Zmc2V0ID0gb3JpZ2luOwogb3V0OgogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IDhhMmMyMzIuLjdmNmM2NzcgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC0yMjEsNiArMjIxLDcgQEAKICNlbmRpZgogCXY5aW5vZGUtPndyaXRlYmFja19maWQgPSBOVUxMOwogCXY5aW5vZGUtPmNhY2hlX3ZhbGlkaXR5ID0gMDsKKwltdXRleF9pbml0KCZ2OWlub2RlLT52X211dGV4KTsKIAlyZXR1cm4gJnY5aW5vZGUtPnZmc19pbm9kZTsKIH0KIApAQCAtNjUwLDcgKzY1MSw5IEBACiAJLyogaWYgd2UgYXJlIG9wZW5pbmcgYSBmaWxlLCBhc3NpZ24gdGhlIG9wZW4gZmlkIHRvIHRoZSBmaWxlICovCiAJaWYgKG5kICYmIG5kLT5mbGFncyAmIExPT0tVUF9PUEVOKSB7CiAJCXY5aW5vZGUgPSBWOUZTX0koZGVudHJ5LT5kX2lub2RlKTsKLQkJaWYgKHY5c2VzLT5jYWNoZSAmJiAhdjlpbm9kZS0+d3JpdGViYWNrX2ZpZCkgeworCQltdXRleF9sb2NrKCZ2OWlub2RlLT52X211dGV4KTsKKwkJaWYgKHY5c2VzLT5jYWNoZSAmJiAhdjlpbm9kZS0+d3JpdGViYWNrX2ZpZCAmJgorCQkgICAgKChmbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpKSB7CiAJCQkvKgogCQkJICogY2xvbmUgYSBmaWQgYW5kIGFkZCBpdCB0byB3cml0ZWJhY2tfZmlkCiAJCQkgKiB3ZSBkbyBpdCBkdXJpbmcgb3BlbiB0aW1lIGluc3RlYWQgb2YKQEAgLTY2MSwxMCArNjY0LDEyIEBACiAJCQlpbm9kZV9maWQgPSB2OWZzX3dyaXRlYmFja19maWQoZGVudHJ5KTsKIAkJCWlmIChJU19FUlIoaW5vZGVfZmlkKSkgewogCQkJCWVyciA9IFBUUl9FUlIoaW5vZGVfZmlkKTsKKwkJCQltdXRleF91bmxvY2soJnY5aW5vZGUtPnZfbXV0ZXgpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCQl2OWlub2RlLT53cml0ZWJhY2tfZmlkID0gKHZvaWQgKikgaW5vZGVfZmlkOwogCQl9CisJCW11dGV4X3VubG9jaygmdjlpbm9kZS0+dl9tdXRleCk7CiAJCWZpbHAgPSBsb29rdXBfaW5zdGFudGlhdGVfZmlscChuZCwgZGVudHJ5LCBnZW5lcmljX2ZpbGVfb3Blbik7CiAJCWlmIChJU19FUlIoZmlscCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoZmlscCk7CkBAIC05MzEsNyArOTM2LDcgQEAKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGVudHJ5OiAlcFxuIiwgZGVudHJ5KTsKIAllcnIgPSAtRVBFUk07Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7CisJdjlzZXMgPSB2OWZzX2RlbnRyeTJ2OXNlcyhkZW50cnkpOwogCWlmICh2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfTE9PU0UgfHwgdjlzZXMtPmNhY2hlID09IENBQ0hFX0ZTQ0FDSEUpIHsKIAkJZ2VuZXJpY19maWxsYXR0cihkZW50cnktPmRfaW5vZGUsIHN0YXQpOwogCQlyZXR1cm4gMDsKQEAgLTk2Nyw4ICs5NzIsMTIgQEAKIAlzdHJ1Y3QgcDlfd3N0YXQgd3N0YXQ7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIlxuIik7CisJcmV0dmFsID0gaW5vZGVfY2hhbmdlX29rKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKIAlyZXR2YWwgPSAtRVBFUk07Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7CisJdjlzZXMgPSB2OWZzX2RlbnRyeTJ2OXNlcyhkZW50cnkpOwogCWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOwogCWlmKElTX0VSUihmaWQpKQogCQlyZXR1cm4gUFRSX0VSUihmaWQpOwpAQCAtOTkzLDEyICsxMDAyLDcgQEAKIAkJaWYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEKQogCQkJd3N0YXQubl9naWQgPSBpYXR0ci0+aWFfZ2lkOwogCX0KLQlpZiAoKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKLQkgICAgaWF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoZGVudHJ5LT5kX2lub2RlKSkgewotCQlyZXR2YWwgPSB2bXRydW5jYXRlKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHItPmlhX3NpemUpOwotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKLQl9CisKIAkvKiBXcml0ZSBhbGwgZGlydHkgZGF0YSAqLwogCWlmIChTX0lTUkVHKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKIAkJZmlsZW1hcF93cml0ZV9hbmRfd2FpdChkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZyk7CkBAIC0xMDA2LDYgKzEwMTAsMTEgQEAKIAlyZXR2YWwgPSBwOV9jbGllbnRfd3N0YXQoZmlkLCAmd3N0YXQpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGlhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGRlbnRyeS0+ZF9pbm9kZSkpCisJCXRydW5jYXRlX3NldHNpemUoZGVudHJ5LT5kX2lub2RlLCBpYXR0ci0+aWFfc2l6ZSk7CisKIAl2OWZzX2ludmFsaWRhdGVfaW5vZGVfYXR0cihkZW50cnktPmRfaW5vZGUpOwogCiAJc2V0YXR0cl9jb3B5KGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOwpAQCAtMTEzMCw3ICsxMTM5LDcgQEAKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiICVzXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAlyZXR2YWwgPSAtRVBFUk07Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7CisJdjlzZXMgPSB2OWZzX2RlbnRyeTJ2OXNlcyhkZW50cnkpOwogCWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOwogCWlmIChJU19FUlIoZmlkKSkKIAkJcmV0dXJuIFBUUl9FUlIoZmlkKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCmluZGV4IDY3YzEzOGUuLmZmYmIxMTMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwpAQCAtMjQ1LDcgKzI0NSw5IEBACiAJdjlmc19zZXRfY3JlYXRlX2FjbChkZW50cnksIGRhY2wsIHBhY2wpOwogCiAJdjlpbm9kZSA9IFY5RlNfSShpbm9kZSk7Ci0JaWYgKHY5c2VzLT5jYWNoZSAmJiAhdjlpbm9kZS0+d3JpdGViYWNrX2ZpZCkgeworCW11dGV4X2xvY2soJnY5aW5vZGUtPnZfbXV0ZXgpOworCWlmICh2OXNlcy0+Y2FjaGUgJiYgIXY5aW5vZGUtPndyaXRlYmFja19maWQgJiYKKwkgICAgKChmbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpKSB7CiAJCS8qCiAJCSAqIGNsb25lIGEgZmlkIGFuZCBhZGQgaXQgdG8gd3JpdGViYWNrX2ZpZAogCQkgKiB3ZSBkbyBpdCBkdXJpbmcgb3BlbiB0aW1lIGluc3RlYWQgb2YKQEAgLTI1NiwxMCArMjU4LDEyIEBACiAJCWlub2RlX2ZpZCA9IHY5ZnNfd3JpdGViYWNrX2ZpZChkZW50cnkpOwogCQlpZiAoSVNfRVJSKGlub2RlX2ZpZCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoaW5vZGVfZmlkKTsKKwkJCW11dGV4X3VubG9jaygmdjlpbm9kZS0+dl9tdXRleCk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJCXY5aW5vZGUtPndyaXRlYmFja19maWQgPSAodm9pZCAqKSBpbm9kZV9maWQ7CiAJfQorCW11dGV4X3VubG9jaygmdjlpbm9kZS0+dl9tdXRleCk7CiAJLyogU2luY2Ugd2UgYXJlIG9wZW5pbmcgYSBmaWxlLCBhc3NpZ24gdGhlIG9wZW4gZmlkIHRvIHRoZSBmaWxlICovCiAJZmlscCA9IGxvb2t1cF9pbnN0YW50aWF0ZV9maWxwKG5kLCBkZW50cnksIGdlbmVyaWNfZmlsZV9vcGVuKTsKIAlpZiAoSVNfRVJSKGZpbHApKSB7CkBAIC0zOTEsNyArMzk1LDcgQEAKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGVudHJ5OiAlcFxuIiwgZGVudHJ5KTsKIAllcnIgPSAtRVBFUk07Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7CisJdjlzZXMgPSB2OWZzX2RlbnRyeTJ2OXNlcyhkZW50cnkpOwogCWlmICh2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfTE9PU0UgfHwgdjlzZXMtPmNhY2hlID09IENBQ0hFX0ZTQ0FDSEUpIHsKIAkJZ2VuZXJpY19maWxsYXR0cihkZW50cnktPmRfaW5vZGUsIHN0YXQpOwogCQlyZXR1cm4gMDsKQEAgLTQ0OCwxNyArNDUyLDExIEBACiAJcDlhdHRyLm10aW1lX25zZWMgPSBpYXR0ci0+aWFfbXRpbWUudHZfbnNlYzsKIAogCXJldHZhbCA9IC1FUEVSTTsKLQl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKKwl2OXNlcyA9IHY5ZnNfZGVudHJ5MnY5c2VzKGRlbnRyeSk7CiAJZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSk7CiAJaWYgKElTX0VSUihmaWQpKQogCQlyZXR1cm4gUFRSX0VSUihmaWQpOwogCi0JaWYgKChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCi0JICAgIGlhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGRlbnRyeS0+ZF9pbm9kZSkpIHsKLQkJcmV0dmFsID0gdm10cnVuY2F0ZShkZW50cnktPmRfaW5vZGUsIGlhdHRyLT5pYV9zaXplKTsKLQkJaWYgKHJldHZhbCkKLQkJCXJldHVybiByZXR2YWw7Ci0JfQogCS8qIFdyaXRlIGFsbCBkaXJ0eSBkYXRhICovCiAJaWYgKFNfSVNSRUcoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQogCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nKTsKQEAgLTQ2Niw4ICs0NjQsMTIgQEAKIAlyZXR2YWwgPSBwOV9jbGllbnRfc2V0YXR0cihmaWQsICZwOWF0dHIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwotCXY5ZnNfaW52YWxpZGF0ZV9pbm9kZV9hdHRyKGRlbnRyeS0+ZF9pbm9kZSk7CiAKKwlpZiAoKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKKwkgICAgaWF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoZGVudHJ5LT5kX2lub2RlKSkKKwkJdHJ1bmNhdGVfc2V0c2l6ZShkZW50cnktPmRfaW5vZGUsIGlhdHRyLT5pYV9zaXplKTsKKworCXY5ZnNfaW52YWxpZGF0ZV9pbm9kZV9hdHRyKGRlbnRyeS0+ZF9pbm9kZSk7CiAJc2V0YXR0cl9jb3B5KGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOwogCW1hcmtfaW5vZGVfZGlydHkoZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfc3VwZXIuYyBiL2ZzLzlwL3Zmc19zdXBlci5jCmluZGV4IDA5ZmQwOGQuLmYzZWVkMzMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19zdXBlci5jCisrKyBiL2ZzLzlwL3Zmc19zdXBlci5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkZW50cnktPmRfaW5vZGUpOworCXY5c2VzID0gdjlmc19kZW50cnkydjlzZXMoZGVudHJ5KTsKIAlpZiAodjlmc19wcm90b19kb3RsKHY5c2VzKSkgewogCQlyZXMgPSBwOV9jbGllbnRfc3RhdGZzKGZpZCwgJnJzKTsKIAkJaWYgKHJlcyA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9hZGZzL2FkZnMuaCBiL2ZzL2FkZnMvYWRmcy5oCmluZGV4IDJmZjYyMmYuLjcxOGFjMWYgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvYWRmcy5oCisrKyBiL2ZzL2FkZnMvYWRmcy5oCkBAIC01MCw2ICs1MCw3IEBACiAJZ2lkX3QJCXNfZ2lkOwkJLyogb3duZXIgZ2lkCQkJCSAqLwogCXVtb2RlX3QJCXNfb3duZXJfbWFzazsJLyogQURGUyBvd25lciBwZXJtIC0+IHVuaXggcGVybQkJICovCiAJdW1vZGVfdAkJc19vdGhlcl9tYXNrOwkvKiBBREZTIG90aGVyIHBlcm0gLT4gdW5peCBwZXJtCQkgKi8KKwlpbnQJCXNfZnRzdWZmaXg7CS8qICx4eXogaGV4IGZpbGV0eXBlIHN1ZmZpeCBvcHRpb24gKi8KIAogCV9fdTMyCQlzX2lkc19wZXJfem9uZTsJLyogbWF4LiBubyBpZHMgaW4gb25lIHpvbmUJCSAqLwogCV9fdTMyCQlzX2lkbGVuOwkvKiBsZW5ndGggb2YgSUQgaW4gbWFwCQkJICovCkBAIC03OSw2ICs4MCwxMCBAQAogCiAJaW50CQkJbnJfYnVmZmVyczsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoWzRdOworCisJLyogYmlnIGRpcmVjdG9yaWVzIG5lZWQgYWxsb2NhdGVkIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJKipiaF9mcGx1czsKKwogCXVuc2lnbmVkIGludAkJcG9zOwogCXVuc2lnbmVkIGludAkJcGFyZW50X2lkOwogCkBAIC04OSw3ICs5NCw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgb3ZlcmFsbCBtYXhpbXVtIG5hbWUgbGVuZ3RoCiAgKi8KLSNkZWZpbmUgQURGU19NQVhfTkFNRV9MRU4JMjU2CisjZGVmaW5lIEFERlNfTUFYX05BTUVfTEVOCSgyNTYgKyA0KSAvKiArNCBmb3IgLHh5eiBoZXggZmlsZXR5cGUgc3VmZml4ICovCiBzdHJ1Y3Qgb2JqZWN0X2luZm8gewogCV9fdTMyCQlwYXJlbnRfaWQ7CQkvKiBwYXJlbnQgb2JqZWN0IGlkCSovCiAJX191MzIJCWZpbGVfaWQ7CQkvKiBvYmplY3QgaWQJCSovCkBAIC05NywxMCArMTAyLDI2IEBACiAJX191MzIJCWV4ZWNhZGRyOwkJLyogZXhlY3V0aW9uIGFkZHJlc3MJKi8KIAlfX3UzMgkJc2l6ZTsJCQkvKiBzaXplCQkJKi8KIAlfX3U4CQlhdHRyOwkJCS8qIFJJU0MgT1MgYXR0cmlidXRlcwkqLwotCXVuc2lnbmVkIGNoYXIJbmFtZV9sZW47CQkvKiBuYW1lIGxlbmd0aAkJKi8KKwl1bnNpZ25lZCBpbnQJbmFtZV9sZW47CQkvKiBuYW1lIGxlbmd0aAkJKi8KIAljaGFyCQluYW1lW0FERlNfTUFYX05BTUVfTEVOXTsvKiBmaWxlIG5hbWUJCSovCisKKwkvKiBSSVNDIE9TIGZpbGUgdHlwZSAoMTItYml0OiBkZXJpdmVkIGZyb20gbG9hZGFkZHIpICovCisJX191MTYJCWZpbGV0eXBlOwogfTsKIAorLyogUklTQyBPUyAxMi1iaXQgZmlsZXR5cGUgY29udmVydHMgdG8gLHh5eiBoZXggZmlsZW5hbWUgc3VmZml4ICovCitzdGF0aWMgaW5saW5lIGludCBhcHBlbmRfZmlsZXR5cGVfc3VmZml4KGNoYXIgKmJ1ZiwgX191MTYgZmlsZXR5cGUpCit7CisJaWYgKGZpbGV0eXBlID09IDB4ZmZmZikJLyogbm8gZXhwbGljaXQgMTItYml0IGZpbGUgdHlwZSB3YXMgc2V0ICovCisJCXJldHVybiAwOworCisJKmJ1ZisrID0gJywnOworCSpidWYrKyA9IGhleF9hc2NfbG8oZmlsZXR5cGUgPj4gOCk7CisJKmJ1ZisrID0gaGV4X2FzY19sbyhmaWxldHlwZSA+PiA0KTsKKwkqYnVmKysgPSBoZXhfYXNjX2xvKGZpbGV0eXBlID4+IDApOworCXJldHVybiA0OworfQorCiBzdHJ1Y3QgYWRmc19kaXJfb3BzIHsKIAlpbnQJKCpyZWFkKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBzeiwgc3RydWN0IGFkZnNfZGlyICpkaXIpOwogCWludAkoKnNldHBvcykoc3RydWN0IGFkZnNfZGlyICpkaXIsIHVuc2lnbmVkIGludCBmcG9zKTsKZGlmZiAtLWdpdCBhL2ZzL2FkZnMvZGlyX2YuYyBiL2ZzL2FkZnMvZGlyX2YuYwppbmRleCBiYWZjNzEyLi40YmJlODUzIDEwMDY0NAotLS0gYS9mcy9hZGZzL2Rpcl9mLmMKKysrIGIvZnMvYWRmcy9kaXJfZi5jCkBAIC01Miw3ICs1Miw2IEBACiAJCQkqYnVmKysgPSAqcHRyOwogCQlwdHIrKzsKIAl9Ci0JKmJ1ZiA9ICdcMCc7CiAKIAlyZXR1cm4gYnVmIC0gb2xkX2J1ZjsKIH0KQEAgLTIwOCw3ICsyMDcsOCBAQAogICogY29udmVydCBhIGRpc2stYmFzZWQgZGlyZWN0b3J5IGVudHJ5IHRvIGEgTGludXggQURGUyBkaXJlY3RvcnkgZW50cnkKICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1hZGZzX2RpcjJvYmooc3RydWN0IG9iamVjdF9pbmZvICpvYmosIHN0cnVjdCBhZGZzX2RpcmVudHJ5ICpkZSkKK2FkZnNfZGlyMm9iaihzdHJ1Y3QgYWRmc19kaXIgKmRpciwgc3RydWN0IG9iamVjdF9pbmZvICpvYmosCisJc3RydWN0IGFkZnNfZGlyZW50cnkgKmRlKQogewogCW9iai0+bmFtZV9sZW4gPQlhZGZzX3JlYWRuYW1lKG9iai0+bmFtZSwgZGUtPmRpcm9ibmFtZSwgQURGU19GX05BTUVfTEVOKTsKIAlvYmotPmZpbGVfaWQgID0gYWRmc19yZWFkdmFsKGRlLT5kaXJpbmRkaXNjYWRkLCAzKTsKQEAgLTIxNiw2ICsyMTYsMjMgQEAKIAlvYmotPmV4ZWNhZGRyID0gYWRmc19yZWFkdmFsKGRlLT5kaXJleGVjLCA0KTsKIAlvYmotPnNpemUgICAgID0gYWRmc19yZWFkdmFsKGRlLT5kaXJsZW4sICA0KTsKIAlvYmotPmF0dHIgICAgID0gZGUtPm5ld2RpcmF0dHM7CisJb2JqLT5maWxldHlwZSA9IC0xOworCisJLyoKKwkgKiBvYmplY3QgaXMgYSBmaWxlIGFuZCBpcyBmaWxldHlwZWQgYW5kIHRpbWVzdGFtcGVkPworCSAqIFJJU0MgT1MgMTItYml0IGZpbGV0eXBlIGlzIHN0b3JlZCBpbiBsb2FkX2FkZHJlc3NbMTk6OF0KKwkgKi8KKwlpZiAoKDAgPT0gKG9iai0+YXR0ciAmIEFERlNfTkRBX0RJUkVDVE9SWSkpICYmCisJCSgweGZmZjAwMDAwID09ICgweGZmZjAwMDAwICYgb2JqLT5sb2FkYWRkcikpKSB7CisJCW9iai0+ZmlsZXR5cGUgPSAoX191MTYpICgoMHgwMDBmZmYwMCAmIG9iai0+bG9hZGFkZHIpID4+IDgpOworCisJCS8qIG9wdGlvbmFsbHkgYXBwZW5kIHRoZSAseHl6IGhleCBmaWxldHlwZSBzdWZmaXggKi8KKwkJaWYgKEFERlNfU0IoZGlyLT5zYiktPnNfZnRzdWZmaXgpCisJCQlvYmotPm5hbWVfbGVuICs9CisJCQkJYXBwZW5kX2ZpbGV0eXBlX3N1ZmZpeCgKKwkJCQkJJm9iai0+bmFtZVtvYmotPm5hbWVfbGVuXSwKKwkJCQkJb2JqLT5maWxldHlwZSk7CisJfQogfQogCiAvKgpAQCAtMjYwLDcgKzI3Nyw3IEBACiAJaWYgKCFkZS5kaXJvYm5hbWVbMF0pCiAJCXJldHVybiAtRU5PRU5UOwogCi0JYWRmc19kaXIyb2JqKG9iaiwgJmRlKTsKKwlhZGZzX2RpcjJvYmooZGlyLCBvYmosICZkZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2FkZnMvZGlyX2ZwbHVzLmMgYi9mcy9hZGZzL2Rpcl9mcGx1cy5jCmluZGV4IDE3OTZiYjM1Li5kOWUzYmVlIDEwMDY0NAotLS0gYS9mcy9hZGZzL2Rpcl9mcGx1cy5jCisrKyBiL2ZzL2FkZnMvZGlyX2ZwbHVzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImFkZnMuaCIKICNpbmNsdWRlICJkaXJfZnBsdXMuaCIKIApAQCAtMjIsMzAgKzIzLDUzIEBACiAKIAlkaXItPm5yX2J1ZmZlcnMgPSAwOwogCisJLyogc3RhcnQgb2ZmIHVzaW5nIGZpeGVkIGJoIHNldCAtIG9ubHkgYWxsb2MgZm9yIGJpZyBkaXJzICovCisJZGlyLT5iaF9mcGx1cyA9ICZkaXItPmJoWzBdOworCiAJYmxvY2sgPSBfX2FkZnNfYmxvY2tfbWFwKHNiLCBpZCwgMCk7CiAJaWYgKCFibG9jaykgewogCQlhZGZzX2Vycm9yKHNiLCAiZGlyIG9iamVjdCAlWCBoYXMgYSBob2xlIGF0IG9mZnNldCAwIiwgaWQpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlkaXItPmJoWzBdID0gc2JfYnJlYWQoc2IsIGJsb2NrKTsKLQlpZiAoIWRpci0+YmhbMF0pCisJZGlyLT5iaF9mcGx1c1swXSA9IHNiX2JyZWFkKHNiLCBibG9jayk7CisJaWYgKCFkaXItPmJoX2ZwbHVzWzBdKQogCQlnb3RvIG91dDsKIAlkaXItPm5yX2J1ZmZlcnMgKz0gMTsKIAotCWggPSAoc3RydWN0IGFkZnNfYmlnZGlyaGVhZGVyICopZGlyLT5iaFswXS0+Yl9kYXRhOworCWggPSAoc3RydWN0IGFkZnNfYmlnZGlyaGVhZGVyICopZGlyLT5iaF9mcGx1c1swXS0+Yl9kYXRhOwogCXNpemUgPSBsZTMyX3RvX2NwdShoLT5iaWdkaXJzaXplKTsKIAlpZiAoc2l6ZSAhPSBzeikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZGZzOiBhZGZzX2ZwbHVzX3JlYWQ6IGRpcmVjdG9yeSBoZWFkZXIgc2l6ZVxuIgotCQkJCSIgZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IHNpemVcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZGZzOiBhZGZzX2ZwbHVzX3JlYWQ6IgorCQkJCQkiIGRpcmVjdG9yeSBoZWFkZXIgc2l6ZSAlWFxuIgorCQkJCQkiIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBzaXplICVYXG4iLAorCQkJCQlzaXplLCBzeik7CiAJfQogCiAJaWYgKGgtPmJpZ2RpcnZlcnNpb25bMF0gIT0gMCB8fCBoLT5iaWdkaXJ2ZXJzaW9uWzFdICE9IDAgfHwKIAkgICAgaC0+YmlnZGlydmVyc2lvblsyXSAhPSAwIHx8IHNpemUgJiAyMDQ3IHx8Ci0JICAgIGgtPmJpZ2RpcnN0YXJ0bmFtZSAhPSBjcHVfdG9fbGUzMihCSUdESVJTVEFSVE5BTUUpKQorCSAgICBoLT5iaWdkaXJzdGFydG5hbWUgIT0gY3B1X3RvX2xlMzIoQklHRElSU1RBUlROQU1FKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZGZzOiBkaXIgb2JqZWN0ICVYIGhhcyIKKwkJCQkJIiBtYWxmb3JtZWQgZGlyIGhlYWRlclxuIiwgaWQpOwogCQlnb3RvIG91dDsKKwl9CiAKIAlzaXplID4+PSBzYi0+c19ibG9ja3NpemVfYml0czsKKwlpZiAoc2l6ZSA+IHNpemVvZihkaXItPmJoKS9zaXplb2YoZGlyLT5iaFswXSkpIHsKKwkJLyogdGhpcyBkaXJlY3RvcnkgaXMgdG9vIGJpZyBmb3IgZml4ZWQgYmggc2V0LCBtdXN0IGFsbG9jYXRlICovCisJCXN0cnVjdCBidWZmZXJfaGVhZCAqKmJoX2ZwbHVzID0KKwkJCWt6YWxsb2Moc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghYmhfZnBsdXMpIHsKKwkJCWFkZnNfZXJyb3Ioc2IsICJub3QgZW5vdWdoIG1lbW9yeSBmb3IiCisJCQkJCSIgZGlyIG9iamVjdCAlWCAoJWQgYmxvY2tzKSIsIGlkLCBzaXplKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRpci0+YmhfZnBsdXMgPSBiaF9mcGx1czsKKwkJLyogY29weSBvdmVyIHRoZSBwb2ludGVyIHRvIHRoZSBibG9jayB0aGF0IHdlJ3ZlIGFscmVhZHkgcmVhZCAqLworCQlkaXItPmJoX2ZwbHVzWzBdID0gZGlyLT5iaFswXTsKKwl9CisKIAlmb3IgKGJsayA9IDE7IGJsayA8IHNpemU7IGJsaysrKSB7CiAJCWJsb2NrID0gX19hZGZzX2Jsb2NrX21hcChzYiwgaWQsIGJsayk7CiAJCWlmICghYmxvY2spIHsKQEAgLTUzLDI1ICs3Nyw0NCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlkaXItPmJoW2Jsa10gPSBzYl9icmVhZChzYiwgYmxvY2spOwotCQlpZiAoIWRpci0+YmhbYmxrXSkKKwkJZGlyLT5iaF9mcGx1c1tibGtdID0gc2JfYnJlYWQoc2IsIGJsb2NrKTsKKwkJaWYgKCFkaXItPmJoX2ZwbHVzW2Jsa10pIHsKKwkJCWFkZnNfZXJyb3Ioc2IsCSJkaXIgb2JqZWN0ICVYIGZhaWxlZCByZWFkIGZvciIKKwkJCQkJIiBvZmZzZXQgJWQsIG1hcHBlZCBibG9jayAlWCIsCisJCQkJCWlkLCBibGssIGJsb2NrKTsKIAkJCWdvdG8gb3V0OwotCQlkaXItPm5yX2J1ZmZlcnMgPSBibGs7CisJCX0KKworCQlkaXItPm5yX2J1ZmZlcnMgKz0gMTsKIAl9CiAKLQl0ID0gKHN0cnVjdCBhZGZzX2JpZ2RpcnRhaWwgKikoZGlyLT5iaFtzaXplIC0gMV0tPmJfZGF0YSArIChzYi0+c19ibG9ja3NpemUgLSA4KSk7CisJdCA9IChzdHJ1Y3QgYWRmc19iaWdkaXJ0YWlsICopCisJCShkaXItPmJoX2ZwbHVzW3NpemUgLSAxXS0+Yl9kYXRhICsgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDgpKTsKIAogCWlmICh0LT5iaWdkaXJlbmRuYW1lICE9IGNwdV90b19sZTMyKEJJR0RJUkVORE5BTUUpIHx8CiAJICAgIHQtPmJpZ2RpcmVuZG1hc3NlcSAhPSBoLT5zdGFydG1hc3NlcSB8fAotCSAgICB0LT5yZXNlcnZlZFswXSAhPSAwIHx8IHQtPnJlc2VydmVkWzFdICE9IDApCisJICAgIHQtPnJlc2VydmVkWzBdICE9IDAgfHwgdC0+cmVzZXJ2ZWRbMV0gIT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZGZzOiBkaXIgb2JqZWN0ICVYIGhhcyAiCisJCQkJCSJtYWxmb3JtZWQgZGlyIGVuZFxuIiwgaWQpOwogCQlnb3RvIG91dDsKKwl9CiAKIAlkaXItPnBhcmVudF9pZCA9IGxlMzJfdG9fY3B1KGgtPmJpZ2RpcnBhcmVudCk7CiAJZGlyLT5zYiA9IHNiOwogCXJldHVybiAwOworCiBvdXQ6Ci0JZm9yIChpID0gMDsgaSA8IGRpci0+bnJfYnVmZmVyczsgaSsrKQotCQlicmVsc2UoZGlyLT5iaFtpXSk7CisJaWYgKGRpci0+YmhfZnBsdXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRpci0+bnJfYnVmZmVyczsgaSsrKQorCQkJYnJlbHNlKGRpci0+YmhfZnBsdXNbaV0pOworCisJCWlmICgmZGlyLT5iaFswXSAhPSBkaXItPmJoX2ZwbHVzKQorCQkJa2ZyZWUoZGlyLT5iaF9mcGx1cyk7CisKKwkJZGlyLT5iaF9mcGx1cyA9IE5VTEw7CisJfQorCisJZGlyLT5ucl9idWZmZXJzID0gMDsKIAlkaXItPnNiID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzksNyArMTIyLDggQEAKIHN0YXRpYyBpbnQKIGFkZnNfZnBsdXNfc2V0cG9zKHN0cnVjdCBhZGZzX2RpciAqZGlyLCB1bnNpZ25lZCBpbnQgZnBvcykKIHsKLQlzdHJ1Y3QgYWRmc19iaWdkaXJoZWFkZXIgKmggPSAoc3RydWN0IGFkZnNfYmlnZGlyaGVhZGVyICopZGlyLT5iaFswXS0+Yl9kYXRhOworCXN0cnVjdCBhZGZzX2JpZ2RpcmhlYWRlciAqaCA9CisJCShzdHJ1Y3QgYWRmc19iaWdkaXJoZWFkZXIgKikgZGlyLT5iaF9mcGx1c1swXS0+Yl9kYXRhOwogCWludCByZXQgPSAtRU5PRU5UOwogCiAJaWYgKGZwb3MgPD0gbGUzMl90b19jcHUoaC0+YmlnZGlyZW50cmllcykpIHsKQEAgLTEwMiwyMSArMTQ2LDI3IEBACiAJcGFydGlhbCA9IHNiLT5zX2Jsb2Nrc2l6ZSAtIG9mZnNldDsKIAogCWlmIChwYXJ0aWFsID49IGxlbikKLQkJbWVtY3B5KHRvLCBkaXItPmJoW2J1ZmZlcl0tPmJfZGF0YSArIG9mZnNldCwgbGVuKTsKKwkJbWVtY3B5KHRvLCBkaXItPmJoX2ZwbHVzW2J1ZmZlcl0tPmJfZGF0YSArIG9mZnNldCwgbGVuKTsKIAllbHNlIHsKIAkJY2hhciAqYyA9IChjaGFyICopdG87CiAKIAkJcmVtYWluZGVyID0gbGVuIC0gcGFydGlhbDsKIAotCQltZW1jcHkoYywgZGlyLT5iaFtidWZmZXJdLT5iX2RhdGEgKyBvZmZzZXQsIHBhcnRpYWwpOwotCQltZW1jcHkoYyArIHBhcnRpYWwsIGRpci0+YmhbYnVmZmVyICsgMV0tPmJfZGF0YSwgcmVtYWluZGVyKTsKKwkJbWVtY3B5KGMsCisJCQlkaXItPmJoX2ZwbHVzW2J1ZmZlcl0tPmJfZGF0YSArIG9mZnNldCwKKwkJCXBhcnRpYWwpOworCisJCW1lbWNweShjICsgcGFydGlhbCwKKwkJCWRpci0+YmhfZnBsdXNbYnVmZmVyICsgMV0tPmJfZGF0YSwKKwkJCXJlbWFpbmRlcik7CiAJfQogfQogCiBzdGF0aWMgaW50CiBhZGZzX2ZwbHVzX2dldG5leHQoc3RydWN0IGFkZnNfZGlyICpkaXIsIHN0cnVjdCBvYmplY3RfaW5mbyAqb2JqKQogewotCXN0cnVjdCBhZGZzX2JpZ2RpcmhlYWRlciAqaCA9IChzdHJ1Y3QgYWRmc19iaWdkaXJoZWFkZXIgKilkaXItPmJoWzBdLT5iX2RhdGE7CisJc3RydWN0IGFkZnNfYmlnZGlyaGVhZGVyICpoID0KKwkJKHN0cnVjdCBhZGZzX2JpZ2RpcmhlYWRlciAqKSBkaXItPmJoX2ZwbHVzWzBdLT5iX2RhdGE7CiAJc3RydWN0IGFkZnNfYmlnZGlyZW50cnkgYmRlOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJaW50IGksIHJldCA9IC1FTk9FTlQ7CkBAIC0xNDcsNiArMTk3LDI0IEBACiAJCWlmIChvYmotPm5hbWVbaV0gPT0gJy8nKQogCQkJb2JqLT5uYW1lW2ldID0gJy4nOwogCisJb2JqLT5maWxldHlwZSA9IC0xOworCisJLyoKKwkgKiBvYmplY3QgaXMgYSBmaWxlIGFuZCBpcyBmaWxldHlwZWQgYW5kIHRpbWVzdGFtcGVkPworCSAqIFJJU0MgT1MgMTItYml0IGZpbGV0eXBlIGlzIHN0b3JlZCBpbiBsb2FkX2FkZHJlc3NbMTk6OF0KKwkgKi8KKwlpZiAoKDAgPT0gKG9iai0+YXR0ciAmIEFERlNfTkRBX0RJUkVDVE9SWSkpICYmCisJCSgweGZmZjAwMDAwID09ICgweGZmZjAwMDAwICYgb2JqLT5sb2FkYWRkcikpKSB7CisJCW9iai0+ZmlsZXR5cGUgPSAoX191MTYpICgoMHgwMDBmZmYwMCAmIG9iai0+bG9hZGFkZHIpID4+IDgpOworCisJCS8qIG9wdGlvbmFsbHkgYXBwZW5kIHRoZSAseHl6IGhleCBmaWxldHlwZSBzdWZmaXggKi8KKwkJaWYgKEFERlNfU0IoZGlyLT5zYiktPnNfZnRzdWZmaXgpCisJCQlvYmotPm5hbWVfbGVuICs9CisJCQkJYXBwZW5kX2ZpbGV0eXBlX3N1ZmZpeCgKKwkJCQkJJm9iai0+bmFtZVtvYmotPm5hbWVfbGVuXSwKKwkJCQkJb2JqLT5maWxldHlwZSk7CisJfQorCiAJZGlyLT5wb3MgKz0gMTsKIAlyZXQgPSAwOwogb3V0OgpAQCAtMTYwLDcgKzIyOCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSBkaXItPm5yX2J1ZmZlcnMgLSAxOyBpID49IDA7IGktLSkgewotCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gZGlyLT5iaFtpXTsKKwkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGRpci0+YmhfZnBsdXNbaV07CiAJCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAkJaWYgKGJ1ZmZlcl9yZXEoYmgpICYmICFidWZmZXJfdXB0b2RhdGUoYmgpKQogCQkJZXJyID0gLUVJTzsKQEAgLTE3NCw4ICsyNDIsMTcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yX2J1ZmZlcnM7IGkrKykKLQkJYnJlbHNlKGRpci0+YmhbaV0pOworCWlmIChkaXItPmJoX2ZwbHVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yX2J1ZmZlcnM7IGkrKykKKwkJCWJyZWxzZShkaXItPmJoX2ZwbHVzW2ldKTsKKworCQlpZiAoJmRpci0+YmhbMF0gIT0gZGlyLT5iaF9mcGx1cykKKwkJCWtmcmVlKGRpci0+YmhfZnBsdXMpOworCisJCWRpci0+YmhfZnBsdXMgPSBOVUxMOworCX0KKworCWRpci0+bnJfYnVmZmVycyA9IDA7CiAJZGlyLT5zYiA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2FkZnMvaW5vZGUuYyBiL2ZzL2FkZnMvaW5vZGUuYwppbmRleCAwOWZlNDAxLi45MjQ0NGU5IDEwMDY0NAotLS0gYS9mcy9hZGZzL2lub2RlLmMKKysrIGIvZnMvYWRmcy9pbm9kZS5jCkBAIC03OCwyNiArNzgsMTMgQEAKIAkuYm1hcAkJPSBfYWRmc19ibWFwCiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotYWRmc19maWxldHlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXVuc2lnbmVkIGludCB0eXBlOwotCi0JaWYgKEFERlNfSShpbm9kZSktPnN0YW1wZWQpCi0JCXR5cGUgPSAoQURGU19JKGlub2RlKS0+bG9hZGFkZHIgPj4gOCkgJiAweGZmZjsKLQllbHNlCi0JCXR5cGUgPSAodW5zaWduZWQgaW50KSAtMTsKLQotCXJldHVybiB0eXBlOwotfQotCiAvKgogICogQ29udmVydCBBREZTIGF0dHJpYnV0ZXMgYW5kIGZpbGV0eXBlIHRvIExpbnV4IHBlcm1pc3Npb24uCiAgKi8KIHN0YXRpYyB1bW9kZV90CiBhZGZzX2F0dHMybW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXVuc2lnbmVkIGludCBmaWxldHlwZSwgYXR0ciA9IEFERlNfSShpbm9kZSktPmF0dHI7CisJdW5zaWduZWQgaW50IGF0dHIgPSBBREZTX0koaW5vZGUpLT5hdHRyOwogCXVtb2RlX3QgbW9kZSwgcm1hc2s7CiAJc3RydWN0IGFkZnNfc2JfaW5mbyAqYXNiID0gQURGU19TQihzYik7CiAKQEAgLTEwNiw5ICs5Myw3IEBACiAJCXJldHVybiBTX0lGRElSIHwgU19JWFVHTyB8IG1vZGU7CiAJfQogCi0JZmlsZXR5cGUgPSBhZGZzX2ZpbGV0eXBlKGlub2RlKTsKLQotCXN3aXRjaCAoZmlsZXR5cGUpIHsKKwlzd2l0Y2ggKEFERlNfSShpbm9kZSktPmZpbGV0eXBlKSB7CiAJY2FzZSAweGZjMDoJLyogTGlua0ZTICovCiAJCXJldHVybiBTX0lGTE5LfFNfSVJXWFVHTzsKIApAQCAtMTc0LDUwICsxNTksNDggQEAKIAogLyoKICAqIENvbnZlcnQgYW4gQURGUyB0aW1lIHRvIFVuaXggdGltZS4gIEFERlMgaGFzIGEgNDAtYml0IGNlbnRpLXNlY29uZCB0aW1lCi0gKiByZWZlcmVuY2VkIHRvIDEgSmFuIDE5MDAgKHRpbCAyMjQ4KQorICogcmVmZXJlbmNlZCB0byAxIEphbiAxOTAwICh0aWwgMjI0OCkgc28gd2UgbmVlZCB0byBkaXNjYXJkIDIyMDg5ODg4MDAgc2Vjb25kcworICogb2YgdGltZSB0byBjb252ZXJ0IGZyb20gUklTQyBPUyBlcG9jaCB0byBVbml4IGVwb2NoLgogICovCiBzdGF0aWMgdm9pZAogYWRmc19hZGZzMnVuaXhfdGltZShzdHJ1Y3QgdGltZXNwZWMgKnR2LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXVuc2lnbmVkIGludCBoaWdoLCBsb3c7CisJLyogMDEgSmFuIDE5NzAgMDA6MDA6MDAgKFVuaXggZXBvY2gpIGFzIG5hbm9zZWNvbmRzIHNpbmNlCisJICogMDEgSmFuIDE5MDAgMDA6MDA6MDAgKFJJU0MgT1MgZXBvY2gpCisJICovCisJc3RhdGljIGNvbnN0IHM2NCBuc2VjX3VuaXhfZXBvY2hfZGlmZl9yaXNjX29zX2Vwb2NoID0KKwkJCQkJCQkyMjA4OTg4ODAwMDAwMDAwMDAwTEw7CisJczY0IG5zZWM7CiAKIAlpZiAoQURGU19JKGlub2RlKS0+c3RhbXBlZCA9PSAwKQogCQlnb3RvIGN1cl90aW1lOwogCi0JaGlnaCA9IEFERlNfSShpbm9kZSktPmxvYWRhZGRyIDw8IDI0OwotCWxvdyAgPSBBREZTX0koaW5vZGUpLT5leGVjYWRkcjsKKwloaWdoID0gQURGU19JKGlub2RlKS0+bG9hZGFkZHIgJiAweEZGOyAvKiB0b3AgOCBiaXRzIG9mIHRpbWVzdGFtcCAqLworCWxvdyAgPSBBREZTX0koaW5vZGUpLT5leGVjYWRkcjsgICAgLyogYm90dG9tIDMyIGJpdHMgb2YgdGltZXN0YW1wICovCiAKLQloaWdoIHw9IGxvdyA+PiA4OwotCWxvdyAgJj0gMjU1OworCS8qIGNvbnZlcnQgNDAtYml0IGNlbnRpLXNlY29uZHMgdG8gMzItYml0IHNlY29uZHMKKwkgKiBnb2luZyB2aWEgbmFub3NlY29uZHMgdG8gcmV0YWluIHByZWNpc2lvbgorCSAqLworCW5zZWMgPSAoKChzNjQpIGhpZ2ggPDwgMzIpIHwgKHM2NCkgbG93KSAqIDEwMDAwMDAwOyAvKiBjcyB0byBucyAqLwogCiAJLyogRmlsZXMgZGF0ZWQgcHJlICAwMSBKYW4gMTk3MCAwMDowMDowMC4gKi8KLQlpZiAoaGlnaCA8IDB4MzM2ZTk5NmEpCisJaWYgKG5zZWMgPCBuc2VjX3VuaXhfZXBvY2hfZGlmZl9yaXNjX29zX2Vwb2NoKQogCQlnb3RvIHRvb19lYXJseTsKIAotCS8qIEZpbGVzIGRhdGVkIHBvc3QgMTggSmFuIDIwMzggMDM6MTQ6MDUuICovCi0JaWYgKGhpZ2ggPj0gMHg2NTZlOTk2OSkKLQkJZ290byB0b29fbGF0ZTsKKwkvKiBjb252ZXJ0IGZyb20gUklTQyBPUyB0byBVbml4IGVwb2NoICovCisJbnNlYyAtPSBuc2VjX3VuaXhfZXBvY2hfZGlmZl9yaXNjX29zX2Vwb2NoOwogCi0JLyogZGlzY2FyZCAyMjA4OTg4ODAwICgweDMzNmU5OTZhMDApIHNlY29uZHMgb2YgdGltZSAqLwotCWhpZ2ggLT0gMHgzMzZlOTk2YTsKLQotCS8qIGNvbnZlcnQgNDAtYml0IGNlbnRpLXNlY29uZHMgdG8gMzItYml0IHNlY29uZHMgKi8KLQl0di0+dHZfc2VjID0gKCgoaGlnaCAlIDEwMCkgPDwgOCkgKyBsb3cpIC8gMTAwICsgKGhpZ2ggLyAxMDAgPDwgOCk7Ci0JdHYtPnR2X25zZWMgPSAwOworCSp0diA9IG5zX3RvX3RpbWVzcGVjKG5zZWMpOwogCXJldHVybjsKIAogIGN1cl90aW1lOgotCSp0diA9IENVUlJFTlRfVElNRV9TRUM7CisJKnR2ID0gQ1VSUkVOVF9USU1FOwogCXJldHVybjsKIAogIHRvb19lYXJseToKIAl0di0+dHZfc2VjID0gdHYtPnR2X25zZWMgPSAwOwogCXJldHVybjsKLQotIHRvb19sYXRlOgotCXR2LT50dl9zZWMgPSAweDdmZmZmZmZkOwotCXR2LT50dl9uc2VjID0gMDsKLQlyZXR1cm47CiB9CiAKIC8qCkBAIC0yNzksNyArMjYyLDggQEAKIAlBREZTX0koaW5vZGUpLT5sb2FkYWRkciAgPSBvYmotPmxvYWRhZGRyOwogCUFERlNfSShpbm9kZSktPmV4ZWNhZGRyICA9IG9iai0+ZXhlY2FkZHI7CiAJQURGU19JKGlub2RlKS0+YXR0ciAgICAgID0gb2JqLT5hdHRyOwotCUFERlNfSShpbm9kZSktPnN0YW1wZWQJICA9ICgob2JqLT5sb2FkYWRkciAmIDB4ZmZmMDAwMDApID09IDB4ZmZmMDAwMDApOworCUFERlNfSShpbm9kZSktPmZpbGV0eXBlICA9IG9iai0+ZmlsZXR5cGU7CisJQURGU19JKGlub2RlKS0+c3RhbXBlZCAgID0gKChvYmotPmxvYWRhZGRyICYgMHhmZmYwMDAwMCkgPT0gMHhmZmYwMDAwMCk7CiAKIAlpbm9kZS0+aV9tb2RlCSA9IGFkZnNfYXR0czJtb2RlKHNiLCBpbm9kZSk7CiAJYWRmc19hZGZzMnVuaXhfdGltZSgmaW5vZGUtPmlfbXRpbWUsIGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2FkZnMvc3VwZXIuYyBiL2ZzL2FkZnMvc3VwZXIuYwppbmRleCAwNmQ3Mzg4Li5jOGJmMzZhIDEwMDY0NAotLS0gYS9mcy9hZGZzL3N1cGVyLmMKKysrIGIvZnMvYWRmcy9zdXBlci5jCkBAIC0xMzgsMTcgKzEzOCwyMCBAQAogCQlzZXFfcHJpbnRmKHNlcSwgIixvd25tYXNrPSVvIiwgYXNiLT5zX293bmVyX21hc2spOwogCWlmIChhc2ItPnNfb3RoZXJfbWFzayAhPSBBREZTX0RFRkFVTFRfT1RIRVJfTUFTSykKIAkJc2VxX3ByaW50ZihzZXEsICIsb3RobWFzaz0lbyIsIGFzYi0+c19vdGhlcl9tYXNrKTsKKwlpZiAoYXNiLT5zX2Z0c3VmZml4ICE9IDApCisJCXNlcV9wcmludGYoc2VxLCAiLGZ0c3VmZml4PSV1IiwgYXNiLT5zX2Z0c3VmZml4KTsKIAogCXJldHVybiAwOwogfQogCi1lbnVtIHtPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfb3dubWFzaywgT3B0X290aG1hc2ssIE9wdF9lcnJ9OworZW51bSB7T3B0X3VpZCwgT3B0X2dpZCwgT3B0X293bm1hc2ssIE9wdF9vdGhtYXNrLCBPcHRfZnRzdWZmaXgsIE9wdF9lcnJ9OwogCiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF91aWQsICJ1aWQ9JXUifSwKIAl7T3B0X2dpZCwgImdpZD0ldSJ9LAogCXtPcHRfb3dubWFzaywgIm93bm1hc2s9JW8ifSwKIAl7T3B0X290aG1hc2ssICJvdGhtYXNrPSVvIn0sCisJe09wdF9mdHN1ZmZpeCwgImZ0c3VmZml4PSV1In0sCiAJe09wdF9lcnIsIE5VTEx9CiB9OwogCkBAIC0xODksNiArMTkyLDExIEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlhc2ItPnNfb3RoZXJfbWFzayA9IG9wdGlvbjsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9mdHN1ZmZpeDoKKwkJCWlmIChtYXRjaF9pbnQoYXJncywgJm9wdGlvbikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlhc2ItPnNfZnRzdWZmaXggPSBvcHRpb247CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50aygiQURGUy1mczogdW5yZWNvZ25pc2VkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgogCQkJCQkib3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CkBAIC0zNjYsNiArMzc0LDcgQEAKIAlhc2ItPnNfZ2lkID0gMDsKIAlhc2ItPnNfb3duZXJfbWFzayA9IEFERlNfREVGQVVMVF9PV05FUl9NQVNLOwogCWFzYi0+c19vdGhlcl9tYXNrID0gQURGU19ERUZBVUxUX09USEVSX01BU0s7CisJYXNiLT5zX2Z0c3VmZml4ID0gMDsKIAogCWlmIChwYXJzZV9vcHRpb25zKHNiLCBkYXRhKSkKIAkJZ290byBlcnJvcjsKQEAgLTQ0NSwxMSArNDU0LDEzIEBACiAKIAlyb290X29iai5wYXJlbnRfaWQgPSByb290X29iai5maWxlX2lkID0gbGUzMl90b19jcHUoZHItPnJvb3QpOwogCXJvb3Rfb2JqLm5hbWVfbGVuICA9IDA7Ci0Jcm9vdF9vYmoubG9hZGFkZHIgID0gMDsKLQlyb290X29iai5leGVjYWRkciAgPSAwOworCS8qIFNldCByb290IG9iamVjdCBkYXRlIGFzIDAxIEphbiAxOTg3IDAwOjAwOjAwICovCisJcm9vdF9vYmoubG9hZGFkZHIgID0gMHhmZmYwMDAzZjsKKwlyb290X29iai5leGVjYWRkciAgPSAweGVjMjJjMDAwOwogCXJvb3Rfb2JqLnNpemUJICAgPSBBREZTX05FV0RJUl9TSVpFOwogCXJvb3Rfb2JqLmF0dHIJICAgPSBBREZTX05EQV9ESVJFQ1RPUlkgICB8IEFERlNfTkRBX09XTkVSX1JFQUQgfAogCQkJICAgICBBREZTX05EQV9PV05FUl9XUklURSB8IEFERlNfTkRBX1BVQkxJQ19SRUFEOworCXJvb3Rfb2JqLmZpbGV0eXBlICA9IC0xOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgRisgZGlzayB3aXRoIHZhcmlhYmxlIGxlbmd0aCBkaXJlY3RvcmllcywKQEAgLTQ2Myw2ICs0NzQsMTIgQEAKIAkJYXNiLT5zX2RpciAgICAgPSAmYWRmc19mX2Rpcl9vcHM7CiAJCWFzYi0+c19uYW1lbGVuID0gQURGU19GX05BTUVfTEVOOwogCX0KKwkvKgorCSAqICx4eXogaGV4IGZpbGV0eXBlIHN1ZmZpeCBtYXkgYmUgYWRkZWQgYnkgZHJpdmVyCisJICogdG8gZmlsZXMgdGhhdCBoYXZlIHZhbGlkIFJJU0MgT1MgZmlsZXR5cGUKKwkgKi8KKwlpZiAoYXNiLT5zX2Z0c3VmZml4KQorCQlhc2ItPnNfbmFtZWxlbiArPSA0OwogCiAJc2ItPnNfZF9vcCA9ICZhZGZzX2RlbnRyeV9vcGVyYXRpb25zOwogCXJvb3QgPSBhZGZzX2lnZXQoc2IsICZyb290X29iaik7CmRpZmYgLS1naXQgYS9mcy9hZmZzL01ha2VmaWxlIGIvZnMvYWZmcy9NYWtlZmlsZQppbmRleCBiMmM0ZjU0Li4zOTg4YjRhIDEwMDY0NAotLS0gYS9mcy9hZmZzL01ha2VmaWxlCisrKyBiL2ZzL2FmZnMvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXggYWZmcyBmaWxlc3lzdGVtIHJvdXRpbmVzLgogIwogCi0jRVhUUkFfQ0ZMQUdTPS1EREVCVUc9MQorI2NjZmxhZ3MteSA6PSAtRERFQlVHPTEKIAogb2JqLSQoQ09ORklHX0FGRlNfRlMpICs9IGFmZnMubwogCmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IDdmNTRmNDMuLmViYjZhMjIgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAljdHgtPnJlcXNfYWN0aXZlLS07CiAKIAlpZiAodW5saWtlbHkoIWN0eC0+cmVxc19hY3RpdmUgJiYgY3R4LT5kZWFkKSkKLQkJd2FrZV91cCgmY3R4LT53YWl0KTsKKwkJd2FrZV91cF9hbGwoJmN0eC0+d2FpdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFpb19mcHV0X3JvdXRpbmUoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQpAQCAtMTIyOSw3ICsxMjI5LDcgQEAKIAkgKiBieSBvdGhlciBDUFVzIGF0IHRoaXMgcG9pbnQuICBSaWdodCBub3csIHdlIHJlbHkgb24gdGhlCiAJICogbG9ja2luZyBkb25lIGJ5IHRoZSBhYm92ZSBjYWxscyB0byBlbnN1cmUgdGhpcyBjb25zaXN0ZW5jeS4KIAkgKi8KLQl3YWtlX3VwKCZpb2N0eC0+d2FpdCk7CisJd2FrZV91cF9hbGwoJmlvY3R4LT53YWl0KTsKIAlwdXRfaW9jdHgoaW9jdHgpOwkvKiBvbmNlIGZvciB0aGUgbG9va3VwICovCiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuYwppbmRleCA3Y2E0MTgxLi4xMDA3ZWQ2IDEwMDY0NAotLS0gYS9mcy9hdHRyLmMKKysrIGIvZnMvYXR0ci5jCkBAIC01OSw3ICs1OSw3IEBACiAKIAkvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNobW9kLiAqLwogCWlmIChpYV92YWxpZCAmIEFUVFJfTU9ERSkgewotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCQkvKiBBbHNvIGNoZWNrIHRoZSBzZXRnaWQgYml0ISAqLwogCQlpZiAoIWluX2dyb3VwX3AoKGlhX3ZhbGlkICYgQVRUUl9HSUQpID8gYXR0ci0+aWFfZ2lkIDoKQEAgLTY5LDcgKzY5LDcgQEAKIAogCS8qIENoZWNrIGZvciBzZXR0aW5nIHRoZSBpbm9kZSB0aW1lLiAqLwogCWlmIChpYV92YWxpZCAmIChBVFRSX01USU1FX1NFVCB8IEFUVFJfQVRJTUVfU0VUIHwgQVRUUl9USU1FU19TRVQpKSB7Ci0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJCXJldHVybiAtRVBFUk07CiAJfQogCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3Jvb3QuYyBiL2ZzL2F1dG9mczQvcm9vdC5jCmluZGV4IDAxNGU3YWIuLmU2Zjg0ZDIgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvcm9vdC5jCisrKyBiL2ZzL2F1dG9mczQvcm9vdC5jCkBAIC0zNiw3ICszNiw3IEBACiBzdGF0aWMgaW50IGF1dG9mczRfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmF1dG9mczRfbG9va3VwKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmF1dG9mczRfZF9hdXRvbW91bnQoc3RydWN0IHBhdGggKik7Ci1zdGF0aWMgaW50IGF1dG9mczRfZF9tYW5hZ2Uoc3RydWN0IGRlbnRyeSAqLCBib29sLCBib29sKTsKK3N0YXRpYyBpbnQgYXV0b2ZzNF9kX21hbmFnZShzdHJ1Y3QgZGVudHJ5ICosIGJvb2wpOwogc3RhdGljIHZvaWQgYXV0b2ZzNF9kZW50cnlfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICopOwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF1dG9mczRfcm9vdF9vcGVyYXRpb25zID0gewpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWludCBhdXRvZnM0X2RfbWFuYWdlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgYm9vbCBtb3VudGluZ19oZXJlLCBib29sIHJjdV93YWxrKQoraW50IGF1dG9mczRfZF9tYW5hZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBib29sIHJjdV93YWxrKQogewogCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gYXV0b2ZzNF9zYmkoZGVudHJ5LT5kX3NiKTsKIApAQCAtNDU0LDcgKzQ1NCw3IEBACiAJCWRlbnRyeSwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCS8qIFRoZSBkYWVtb24gbmV2ZXIgd2FpdHMuICovCi0JaWYgKGF1dG9mczRfb3pfbW9kZShzYmkpIHx8IG1vdW50aW5nX2hlcmUpIHsKKwlpZiAoYXV0b2ZzNF9vel9tb2RlKHNiaSkpIHsKIAkJaWYgKCFkX21vdW50cG9pbnQoZGVudHJ5KSkKIAkJCXJldHVybiAtRUlTRElSOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuYwppbmRleCA2ODVlY2ZmLi5iMTRjZWJmIDEwMDY0NAotLS0gYS9mcy9iZnMvZGlyLmMKKysrIGIvZnMvYmZzL2Rpci5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJaWYgKCFpbm9kZSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAJbXV0ZXhfbG9jaygmaW5mby0+YmZzX2xvY2spOwotCWlubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoaW5mby0+c2lfaW1hcCwgaW5mby0+c2lfbGFzdGkpOworCWlubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoaW5mby0+c2lfaW1hcCwgaW5mby0+c2lfbGFzdGkgKyAxKTsKIAlpZiAoaW5vID4gaW5mby0+c2lfbGFzdGkpIHsKIAkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5iZnNfbG9jayk7CiAJCWlwdXQoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZi5jIGIvZnMvYmluZm10X2VsZi5jCmluZGV4IGQ1YjY0MGIuLmIyZmFlMDA5IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC01NzAsNyArNTcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGVsZl9lbnRyeTsKIAl1bnNpZ25lZCBsb25nIGludGVycF9sb2FkX2FkZHIgPSAwOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZSwgZW5kX2NvZGUsIHN0YXJ0X2RhdGEsIGVuZF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgcmVsb2NfZnVuY19kZXNjID0gMDsKKwl1bnNpZ25lZCBsb25nIHJlbG9jX2Z1bmNfZGVzYyBfX21heWJlX3VudXNlZCA9IDA7CiAJaW50IGV4ZWN1dGFibGVfc3RhY2sgPSBFWFNUQUNLX0RFRkFVTFQ7CiAJdW5zaWduZWQgbG9uZyBkZWZfZmxhZ3MgPSAwOwogCXN0cnVjdCB7CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDRiZDQ1NGYuLjRjZjJhNTIgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAlpZiAoIXNsYWIpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXByaW50aygiYmlvOiBjcmVhdGUgc2xhYiA8JXM+IGF0ICVkXG4iLCBic2xhYi0+bmFtZSwgZW50cnkpOworCXByaW50ayhLRVJOX0lORk8gImJpbzogY3JlYXRlIHNsYWIgPCVzPiBhdCAlZFxuIiwgYnNsYWItPm5hbWUsIGVudHJ5KTsKIAlic2xhYi0+c2xhYiA9IHNsYWI7CiAJYnNsYWItPnNsYWJfcmVmID0gMTsKIAlic2xhYi0+c2xhYl9zaXplID0gc3o7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDljOTQ5MzQuLmRlMzRiZmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7CiAKLQlpZiAoIWlzX293bmVyX29yX2NhcChkZW50cnktPmRfaW5vZGUpKQorCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShkZW50cnktPmRfaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKCFJU19QT1NJWEFDTChkZW50cnktPmRfaW5vZGUpKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IGUxYWE4ZDYuLjEwMGIwN2YgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTI0OTMsNyArMjQ5Myw3IEBACiAJICogRVJST1Igc3RhdGUgb24gZGlzay4KIAkgKgogCSAqIDIuIHdoZW4gYnRyZnMgZmxpcHMgcmVhZG9ubHkganVzdCBpbiBidHJmc19jb21taXRfc3VwZXIsCi0JICogYW5kIGluIHN1Y2ggY2FzZSwgYnRyZnMgY2Fubm5vdCB3cml0ZSBzYiB2aWEgYnRyZnNfY29tbWl0X3N1cGVyLAorCSAqIGFuZCBpbiBzdWNoIGNhc2UsIGJ0cmZzIGNhbm5vdCB3cml0ZSBzYiB2aWEgYnRyZnNfY29tbWl0X3N1cGVyLAogCSAqIGFuZCBzaW5jZSBmc19zdGF0ZSBoYXMgYmVlbiBzZXQgQlRSRlNfU1VQRVJfRkxBR19FUlJPUiBmbGFnLAogCSAqIGJ0cmZzIHdpbGwgY2xlYW51cCBhbGwgRlMgcmVzb3VyY2VzIGZpcnN0IGFuZCB3cml0ZSBzYiB0aGVuLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggNWZkYjJhYi4uZDFiYWNlMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJICAgICAgRlNfU1lOQ19GTCB8IEZTX0RJUlNZTkNfRkwpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CkBAIC0xMDc3LDcgKzEwNzcsNyBAQAogCWlmIChmbGFncyAmIH5CVFJGU19TVUJWT0xfUkRPTkxZKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAlkb3duX3dyaXRlKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3psaWIuYyBiL2ZzL2J0cmZzL3psaWIuYwppbmRleCBmNWVjMmQ0Li5mYWNjZDQ3IDEwMDY0NAotLS0gYS9mcy9idHJmcy96bGliLmMKKysrIGIvZnMvYnRyZnMvemxpYi5jCkBAIC01Nyw3ICs1Nyw4IEBACiAJaWYgKCF3b3Jrc3BhY2UpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0Jd29ya3NwYWNlLT5kZWZfc3RybS53b3Jrc3BhY2UgPSB2bWFsbG9jKHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKCkpOworCXdvcmtzcGFjZS0+ZGVmX3N0cm0ud29ya3NwYWNlID0gdm1hbGxvYyh6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgKKwkJCQkJCU1BWF9XQklUUywgTUFYX01FTV9MRVZFTCkpOwogCXdvcmtzcGFjZS0+aW5mX3N0cm0ud29ya3NwYWNlID0gdm1hbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKIAl3b3Jrc3BhY2UtPmJ1ZiA9IGttYWxsb2MoUEFHRV9DQUNIRV9TSVpFLCBHRlBfTk9GUyk7CiAJaWYgKCF3b3Jrc3BhY2UtPmRlZl9zdHJtLndvcmtzcGFjZSB8fApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9kZWJ1Z2ZzLmMgYi9mcy9jZXBoL2RlYnVnZnMuYwppbmRleCAwOGY2NWZhLi4wZGJhNjkxIDEwMDY0NAotLS0gYS9mcy9jZXBoL2RlYnVnZnMuYworKysgYi9mcy9jZXBoL2RlYnVnZnMuYwpAQCAtMjEwLDggKzIxMCw2IEBACiAJaWYgKCFmc2MtPmRlYnVnZnNfY29uZ2VzdGlvbl9rYikKIAkJZ290byBvdXQ7CiAKLQlkb3V0KCJhXG4iKTsKLQogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIi4uLy4uL2JkaS8lcyIsCiAJCSBkZXZfbmFtZShmc2MtPmJhY2tpbmdfZGV2X2luZm8uZGV2KSk7CiAJZnNjLT5kZWJ1Z2ZzX2JkaSA9CkBAIC0yMjEsNyArMjE5LDYgQEAKIAlpZiAoIWZzYy0+ZGVidWdmc19iZGkpCiAJCWdvdG8gb3V0OwogCi0JZG91dCgiYlxuIik7CiAJZnNjLT5kZWJ1Z2ZzX21kc21hcCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1kc21hcCIsCiAJCQkJCTA2MDAsCiAJCQkJCWZzYy0+Y2xpZW50LT5kZWJ1Z2ZzX2RpciwKQEAgLTIzMCw3ICsyMjcsNiBAQAogCWlmICghZnNjLT5kZWJ1Z2ZzX21kc21hcCkKIAkJZ290byBvdXQ7CiAKLQlkb3V0KCJjYVxuIik7CiAJZnNjLT5kZWJ1Z2ZzX21kc2MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtZHNjIiwKIAkJCQkJCTA2MDAsCiAJCQkJCQlmc2MtPmNsaWVudC0+ZGVidWdmc19kaXIsCkBAIC0yMzksNyArMjM1LDYgQEAKIAlpZiAoIWZzYy0+ZGVidWdmc19tZHNjKQogCQlnb3RvIG91dDsKIAotCWRvdXQoImRhXG4iKTsKIAlmc2MtPmRlYnVnZnNfY2FwcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNhcHMiLAogCQkJCQkJICAgMDQwMCwKIAkJCQkJCSAgIGZzYy0+Y2xpZW50LT5kZWJ1Z2ZzX2RpciwKQEAgLTI0OCw3ICsyNDMsNiBAQAogCWlmICghZnNjLT5kZWJ1Z2ZzX2NhcHMpCiAJCWdvdG8gb3V0OwogCi0JZG91dCgiZWFcbiIpOwogCWZzYy0+ZGVidWdmc19kZW50cnlfbHJ1ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGVudHJ5X2xydSIsCiAJCQkJCTA2MDAsCiAJCQkJCWZzYy0+Y2xpZW50LT5kZWJ1Z2ZzX2RpciwKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZGlyLmMgYi9mcy9jZXBoL2Rpci5jCmluZGV4IGViYWZhNjUuLjFhODY3YTMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKKysrIGIvZnMvY2VwaC9kaXIuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJZmlscC0+Zl9wb3MgPSBkaS0+b2Zmc2V0OwogCWVyciA9IGZpbGxkaXIoZGlyZW50LCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkgICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRpLT5vZmZzZXQsCi0JCSAgICAgIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCisJCSAgICAgIGNlcGhfdHJhbnNsYXRlX2lubyhkZW50cnktPmRfc2IsIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pLAogCQkgICAgICBkZW50cnktPmRfaW5vZGUtPmlfbW9kZSA+PiAxMik7CiAKIAlpZiAobGFzdCkgewpAQCAtMjQ1LDE1ICsyNDUsMTcgQEAKIAogCQlkb3V0KCJyZWFkZGlyIG9mZiAwIC0+ICcuJ1xuIik7CiAJCWlmIChmaWxsZGlyKGRpcmVudCwgIi4iLCAxLCBjZXBoX21ha2VfZnBvcygwLCAwKSwKLQkJCSAgICBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX21vZGUgPj4gMTIpIDwgMCkKKwkJCSAgICBjZXBoX3RyYW5zbGF0ZV9pbm8oaW5vZGUtPmlfc2IsIGlub2RlLT5pX2lubyksCisJCQkgICAgaW5vZGUtPmlfbW9kZSA+PiAxMikgPCAwKQogCQkJcmV0dXJuIDA7CiAJCWZpbHAtPmZfcG9zID0gMTsKIAkJb2ZmID0gMTsKIAl9CiAJaWYgKGZpbHAtPmZfcG9zID09IDEpIHsKKwkJaW5vX3QgaW5vID0gZmlscC0+Zl9kZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX2lubzsKIAkJZG91dCgicmVhZGRpciBvZmYgMSAtPiAnLi4nXG4iKTsKIAkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCBjZXBoX21ha2VfZnBvcygwLCAxKSwKLQkJCSAgICBmaWxwLT5mX2RlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfaW5vLAorCQkJICAgIGNlcGhfdHJhbnNsYXRlX2lubyhpbm9kZS0+aV9zYiwgaW5vKSwKIAkJCSAgICBpbm9kZS0+aV9tb2RlID4+IDEyKSA8IDApCiAJCQlyZXR1cm4gMDsKIAkJZmlscC0+Zl9wb3MgPSAyOwpAQCAtMzc3LDcgKzM3OSw4IEBACiAJCWlmIChmaWxsZGlyKGRpcmVudCwKIAkJCSAgICByaW5mby0+ZGlyX2RuYW1lW29mZiAtIGZpLT5vZmZzZXRdLAogCQkJICAgIHJpbmZvLT5kaXJfZG5hbWVfbGVuW29mZiAtIGZpLT5vZmZzZXRdLAotCQkJICAgIHBvcywgaW5vLCBmdHlwZSkgPCAwKSB7CisJCQkgICAgcG9zLAorCQkJICAgIGNlcGhfdHJhbnNsYXRlX2lubyhpbm9kZS0+aV9zYiwgaW5vKSwgZnR5cGUpIDwgMCkgewogCQkJZG91dCgiZmlsbGRpciBzdG9wcGluZyB1cy4uLlxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTAyNCwxNCArMTAyNywxMyBAQAogfQogCiAvKgotICogV2hlbiBhIGRlbnRyeSBpcyByZWxlYXNlZCwgY2xlYXIgdGhlIGRpciBJX0NPTVBMRVRFIGlmIGl0IHdhcyBwYXJ0Ci0gKiBvZiB0aGUgY3VycmVudCBkaXIgZ2VuIG9yIGlmIHRoaXMgaXMgaW4gdGhlIHNuYXBzaG90IG5hbWVzcGFjZS4KKyAqIFJlbGVhc2Ugb3VyIGNlcGhfZGVudHJ5X2luZm8uCiAgKi8KLXN0YXRpYyB2b2lkIGNlcGhfZGVudHJ5X3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIHZvaWQgY2VwaF9kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBjZXBoX2RlbnRyeV9pbmZvICpkaSA9IGNlcGhfZGVudHJ5KGRlbnRyeSk7CiAKLQlkb3V0KCJkZW50cnlfcmVsZWFzZSAlcFxuIiwgZGVudHJ5KTsKKwlkb3V0KCJkX3JlbGVhc2UgJXBcbiIsIGRlbnRyeSk7CiAJaWYgKGRpKSB7CiAJCWNlcGhfZGVudHJ5X2xydV9kZWwoZGVudHJ5KTsKIAkJaWYgKGRpLT5sZWFzZV9zZXNzaW9uKQpAQCAtMTI1NiwxNCArMTI1OCwxNCBAQAogCiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9kZW50cnlfb3BzID0gewogCS5kX3JldmFsaWRhdGUgPSBjZXBoX2RfcmV2YWxpZGF0ZSwKLQkuZF9yZWxlYXNlID0gY2VwaF9kZW50cnlfcmVsZWFzZSwKKwkuZF9yZWxlYXNlID0gY2VwaF9kX3JlbGVhc2UsCiB9OwogCiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9zbmFwZGlyX2RlbnRyeV9vcHMgPSB7CiAJLmRfcmV2YWxpZGF0ZSA9IGNlcGhfc25hcGRpcl9kX3JldmFsaWRhdGUsCi0JLmRfcmVsZWFzZSA9IGNlcGhfZGVudHJ5X3JlbGVhc2UsCisJLmRfcmVsZWFzZSA9IGNlcGhfZF9yZWxlYXNlLAogfTsKIAogY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNlcGhfc25hcF9kZW50cnlfb3BzID0gewotCS5kX3JlbGVhc2UgPSBjZXBoX2RlbnRyeV9yZWxlYXNlLAorCS5kX3JlbGVhc2UgPSBjZXBoX2RfcmVsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jCmluZGV4IDdkMGU0YTguLjE1OWI1MTIgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZmlsZS5jCisrKyBiL2ZzL2NlcGgvZmlsZS5jCkBAIC01NjQsMTEgKzU2NCwxOSBAQAogCQkJICogc3RhcnRfcmVxdWVzdCBzbyB0aGF0IGEgdGlkIGhhcyBiZWVuIGFzc2lnbmVkLgogCQkJICovCiAJCQlzcGluX2xvY2soJmNpLT5pX3Vuc2FmZV9sb2NrKTsKLQkJCWxpc3RfYWRkKCZyZXEtPnJfdW5zYWZlX2l0ZW0sICZjaS0+aV91bnNhZmVfd3JpdGVzKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cl91bnNhZmVfaXRlbSwKKwkJCQkgICAgICAmY2ktPmlfdW5zYWZlX3dyaXRlcyk7CiAJCQlzcGluX3VubG9jaygmY2ktPmlfdW5zYWZlX2xvY2spOwogCQkJY2VwaF9nZXRfY2FwX3JlZnMoY2ksIENFUEhfQ0FQX0ZJTEVfV1IpOwogCQl9CisJCQogCQlyZXQgPSBjZXBoX29zZGNfd2FpdF9yZXF1ZXN0KCZmc2MtPmNsaWVudC0+b3NkYywgcmVxKTsKKwkJaWYgKHJldCA8IDAgJiYgcmVxLT5yX3NhZmVfY2FsbGJhY2spIHsKKwkJCXNwaW5fbG9jaygmY2ktPmlfdW5zYWZlX2xvY2spOworCQkJbGlzdF9kZWxfaW5pdCgmcmVxLT5yX3Vuc2FmZV9pdGVtKTsKKwkJCXNwaW5fdW5sb2NrKCZjaS0+aV91bnNhZmVfbG9jayk7CisJCQljZXBoX3B1dF9jYXBfcmVmcyhjaSwgQ0VQSF9DQVBfRklMRV9XUik7CisJCX0KIAl9CiAKIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IDE5M2JmYTUuLmI1NGM5N2RhIDEwMDY0NAotLS0gYS9mcy9jZXBoL2lub2RlLmMKKysrIGIvZnMvY2VwaC9pbm9kZS5jCkBAIC0zNiw2ICszNiwxMyBAQAogLyoKICAqIGZpbmQgb3IgY3JlYXRlIGFuIGlub2RlLCBnaXZlbiB0aGUgY2VwaCBpbm8gbnVtYmVyCiAgKi8KK3N0YXRpYyBpbnQgY2VwaF9zZXRfaW5vX2NiKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmRhdGEpCit7CisJY2VwaF9pbm9kZShpbm9kZSktPmlfdmlubyA9ICooc3RydWN0IGNlcGhfdmlubyAqKWRhdGE7CisJaW5vZGUtPmlfaW5vID0gY2VwaF92aW5vX3RvX2lubygqKHN0cnVjdCBjZXBoX3Zpbm8gKilkYXRhKTsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IGlub2RlICpjZXBoX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2VwaF92aW5vIHZpbm8pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTEwMzAsOSArMTAzNyw2IEBACiAJCQlkb3V0KCJmaWxsX3RyYWNlIGRvaW5nIGRfbW92ZSAlcCAtPiAlcFxuIiwKIAkJCSAgICAgcmVxLT5yX29sZF9kZW50cnksIGRuKTsKIAotCQkJLyogZF9tb3ZlIHNjcmV3cyB1cCBkX3N1YmRpcnMgb3JkZXIgKi8KLQkJCWNlcGhfaV9jbGVhcihkaXIsIENFUEhfSV9DT01QTEVURSk7Ci0KIAkJCWRfbW92ZShyZXEtPnJfb2xkX2RlbnRyeSwgZG4pOwogCQkJZG91dCgiIHNyYyAlcCAnJS4qcycgZHN0ICVwICclLipzJ1xuIiwKIAkJCSAgICAgcmVxLT5yX29sZF9kZW50cnksCkBAIC0xMDQ0LDEyICsxMDQ4LDE1IEBACiAJCQkgICByZWhhc2hpbmcgYnVnIGluIHZmc19yZW5hbWVfZGlyICovCiAJCQljZXBoX2ludmFsaWRhdGVfZGVudHJ5X2xlYXNlKGRuKTsKIAotCQkJLyogdGFrZSBvdmVyd3JpdHRlbiBkZW50cnkncyByZWFkZGlyIG9mZnNldCAqLwotCQkJZG91dCgiZG4gJXAgZ2V0cyAlcCBvZmZzZXQgJWxsZCAob2xkIG9mZnNldCAlbGxkKVxuIiwKLQkJCSAgICAgcmVxLT5yX29sZF9kZW50cnksIGRuLCBjZXBoX2RlbnRyeShkbiktPm9mZnNldCwKKwkJCS8qCisJCQkgKiBkX21vdmUoKSBwdXRzIHRoZSByZW5hbWVkIGRlbnRyeSBhdCB0aGUgZW5kIG9mCisJCQkgKiBkX3N1YmRpcnMuICBXZSBuZWVkIHRvIGFzc2lnbiBpdCBhbiBhcHByb3ByaWF0ZQorCQkJICogZGlyZWN0b3J5IG9mZnNldCBzbyB3ZSBjYW4gYmVoYXZlIHdoZW4gaG9sZGluZworCQkJICogSV9DT01QTEVURS4KKwkJCSAqLworCQkJY2VwaF9zZXRfZGVudHJ5X29mZnNldChyZXEtPnJfb2xkX2RlbnRyeSk7CisJCQlkb3V0KCJkbiAlcCBnZXRzIG5ldyBvZmZzZXQgJWxsZFxuIiwgcmVxLT5yX29sZF9kZW50cnksIAogCQkJICAgICBjZXBoX2RlbnRyeShyZXEtPnJfb2xkX2RlbnRyeSktPm9mZnNldCk7Ci0JCQljZXBoX2RlbnRyeShyZXEtPnJfb2xkX2RlbnRyeSktPm9mZnNldCA9Ci0JCQkJY2VwaF9kZW50cnkoZG4pLT5vZmZzZXQ7CiAKIAkJCWRuID0gcmVxLT5yX29sZF9kZW50cnk7ICAvKiB1c2Ugb2xkX2RlbnRyeSAqLwogCQkJaW4gPSBkbi0+ZF9pbm9kZTsKQEAgLTE4MDksNyArMTgxNiw3IEBACiAJZXJyID0gY2VwaF9kb19nZXRhdHRyKGlub2RlLCBDRVBIX1NUQVRfQ0FQX0lOT0RFX0FMTCk7CiAJaWYgKCFlcnIpIHsKIAkJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7Ci0JCXN0YXQtPmlubyA9IGlub2RlLT5pX2lubzsKKwkJc3RhdC0+aW5vID0gY2VwaF90cmFuc2xhdGVfaW5vKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8pOwogCQlpZiAoY2VwaF9zbmFwKGlub2RlKSAhPSBDRVBIX05PU05BUCkKIAkJCXN0YXQtPmRldiA9IGNlcGhfc25hcChpbm9kZSk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc3VwZXIuYyBiL2ZzL2NlcGgvc3VwZXIuYwppbmRleCA5YzUwODU0Li5hOWU3OGI0IDEwMDY0NAotLS0gYS9mcy9jZXBoL3N1cGVyLmMKKysrIGIvZnMvY2VwaC9zdXBlci5jCkBAIC0xMzEsNiArMTMxLDcgQEAKIAlPcHRfcmJ5dGVzLAogCU9wdF9ub3JieXRlcywKIAlPcHRfbm9hc3luY3JlYWRkaXIsCisJT3B0X2lubzMyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgZnNvcHRfdG9rZW5zID0gewpAQCAtMTUwLDYgKzE1MSw3IEBACiAJe09wdF9yYnl0ZXMsICJyYnl0ZXMifSwKIAl7T3B0X25vcmJ5dGVzLCAibm9yYnl0ZXMifSwKIAl7T3B0X25vYXN5bmNyZWFkZGlyLCAibm9hc3luY3JlYWRkaXIifSwKKwl7T3B0X2lubzMyLCAiaW5vMzIifSwKIAl7LTEsIE5VTEx9CiB9OwogCkBAIC0yMjUsNiArMjI3LDkgQEAKIAljYXNlIE9wdF9ub2FzeW5jcmVhZGRpcjoKIAkJZnNvcHQtPmZsYWdzIHw9IENFUEhfTU9VTlRfT1BUX05PQVNZTkNSRUFERElSOwogCQlicmVhazsKKwljYXNlIE9wdF9pbm8zMjoKKwkJZnNvcHQtPmZsYWdzIHw9IENFUEhfTU9VTlRfT1BUX0lOTzMyOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUdfT04odG9rZW4pOwogCX0KQEAgLTI4OCw3ICsyOTMsNyBAQAogICAgICAgICBmc29wdC0+c2JfZmxhZ3MgPSBmbGFnczsKICAgICAgICAgZnNvcHQtPmZsYWdzID0gQ0VQSF9NT1VOVF9PUFRfREVGQVVMVDsKIAotICAgICAgICBmc29wdC0+cnNpemUgPSBDRVBIX01PVU5UX1JTSVpFX0RFRkFVTFQ7CisgICAgICAgIGZzb3B0LT5yc2l6ZSA9IENFUEhfUlNJWkVfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPnNuYXBkaXJfbmFtZSA9IGtzdHJkdXAoQ0VQSF9TTkFQRElSTkFNRV9ERUZBVUxULCBHRlBfS0VSTkVMKTsKIAlmc29wdC0+Y2Fwc193YW50ZWRfZGVsYXlfbWluID0gQ0VQSF9DQVBTX1dBTlRFRF9ERUxBWV9NSU5fREVGQVVMVDsKIAlmc29wdC0+Y2Fwc193YW50ZWRfZGVsYXlfbWF4ID0gQ0VQSF9DQVBTX1dBTlRFRF9ERUxBWV9NQVhfREVGQVVMVDsKQEAgLTM3MCw3ICszNzUsNyBAQAogCiAJaWYgKGZzb3B0LT53c2l6ZSkKIAkJc2VxX3ByaW50ZihtLCAiLHdzaXplPSVkIiwgZnNvcHQtPndzaXplKTsKLQlpZiAoZnNvcHQtPnJzaXplICE9IENFUEhfTU9VTlRfUlNJWkVfREVGQVVMVCkKKwlpZiAoZnNvcHQtPnJzaXplICE9IENFUEhfUlNJWkVfREVGQVVMVCkKIAkJc2VxX3ByaW50ZihtLCAiLHJzaXplPSVkIiwgZnNvcHQtPnJzaXplKTsKIAlpZiAoZnNvcHQtPmNvbmdlc3Rpb25fa2IgIT0gZGVmYXVsdF9jb25nZXN0aW9uX2tiKCkpCiAJCXNlcV9wcmludGYobSwgIix3cml0ZV9jb25nZXN0aW9uX2tiPSVkIiwgZnNvcHQtPmNvbmdlc3Rpb25fa2IpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zdXBlci5oIGIvZnMvY2VwaC9zdXBlci5oCmluZGV4IDIwYjkwN2QuLjYxOWZlNzEgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc3VwZXIuaAorKysgYi9mcy9jZXBoL3N1cGVyLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQ0VQSF9NT1VOVF9PUFRfRElSU1RBVCAgICAgICAgICgxPDw0KSAvKiBgY2F0IGRpcm5hbWVgIGZvciBzdGF0cyAqLwogI2RlZmluZSBDRVBIX01PVU5UX09QVF9SQllURVMgICAgICAgICAgKDE8PDUpIC8qIGRpciBzdF9ieXRlcyA9IHJieXRlcyAqLwogI2RlZmluZSBDRVBIX01PVU5UX09QVF9OT0FTWU5DUkVBRERJUiAgKDE8PDcpIC8qIG5vIGRjYWNoZSByZWFkZGlyICovCisjZGVmaW5lIENFUEhfTU9VTlRfT1BUX0lOTzMyICAgICAgICAgICAoMTw8OCkgLyogMzIgYml0IGlub3MgKi8KIAogI2RlZmluZSBDRVBIX01PVU5UX09QVF9ERUZBVUxUICAgIChDRVBIX01PVU5UX09QVF9SQllURVMpCiAKQEAgLTM1LDYgKzM2LDcgQEAKICNkZWZpbmUgY2VwaF90ZXN0X21vdW50X29wdChmc2MsIG9wdCkgXAogCSghISgoZnNjKS0+bW91bnRfb3B0aW9ucy0+ZmxhZ3MgJiBDRVBIX01PVU5UX09QVF8jI29wdCkpCiAKKyNkZWZpbmUgQ0VQSF9SU0laRV9ERUZBVUxUICAgICAgICAgICAgICg1MTIqMTAyNCkgLyogcmVhZGFoZWFkICovCiAjZGVmaW5lIENFUEhfTUFYX1JFQURESVJfREVGQVVMVCAgICAgICAgMTAyNAogI2RlZmluZSBDRVBIX01BWF9SRUFERElSX0JZVEVTX0RFRkFVTFQgICg1MTIqMTAyNCkKICNkZWZpbmUgQ0VQSF9TTkFQRElSTkFNRV9ERUZBVUxUICAgICAgICAiLnNuYXAiCkBAIC0zMTksNiArMzIxLDE2IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGNlcGhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY2VwaF9mc19jbGllbnQgKmNlcGhfaW5vZGVfdG9fY2xpZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIChzdHJ1Y3QgY2VwaF9mc19jbGllbnQgKilpbm9kZS0+aV9zYi0+c19mc19pbmZvOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZXBoX2ZzX2NsaWVudCAqY2VwaF9zYl90b19jbGllbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBjZXBoX2ZzX2NsaWVudCAqKXNiLT5zX2ZzX2luZm87Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNlcGhfdmlubyBjZXBoX3Zpbm8oc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gY2VwaF9pbm9kZShpbm9kZSktPmlfdmlubzsKQEAgLTMyNywxOSArMzM5LDQ5IEBACiAvKgogICogaW5vX3QgaXMgPDY0IGJpdHMgb24gbWFueSBhcmNoaXRlY3R1cmVzLCBibGVjaC4KICAqCi0gKiBkb24ndCBpbmNsdWRlIHNuYXAgaW4gaW5vIGhhc2gsIGF0IGxlYXN0IGZvciBub3cuCisgKiAgICAgICAgICAgICAgIGlfaW5vIChrZXJuZWwgaW5vZGUpICAgc3RfaW5vICh1c2Vyc3BhY2UpCisgKiBpMzg2ICAgICAgICAgIDMyICAgICAgICAgICAgICAgICAgICAgMzIKKyAqIHg4Nl82NCtpbm8zMiAgNjQgICAgICAgICAgICAgICAgICAgICAzMgorICogeDg2XzY0ICAgICAgICA2NCAgICAgICAgICAgICAgICAgICAgIDY0CisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGNlcGhfaW5vX3RvX2lubzMyKGlub190IGlubykKK3sKKwlpbm8gXj0gaW5vID4+IChzaXplb2YoaW5vKSAqIDggLSAzMik7CisJaWYgKCFpbm8pCisJCWlubyA9IDE7CisJcmV0dXJuIGlubzsKK30KKworLyoKKyAqIGtlcm5lbCBpX2lubyB2YWx1ZQogICovCiBzdGF0aWMgaW5saW5lIGlub190IGNlcGhfdmlub190b19pbm8oc3RydWN0IGNlcGhfdmlubyB2aW5vKQogewogCWlub190IGlubyA9IChpbm9fdCl2aW5vLmlubzsgIC8qIF4gKHZpbm8uc25hcCA8PCAyMCk7ICovCiAjaWYgQklUU19QRVJfTE9ORyA9PSAzMgotCWlubyBePSB2aW5vLmlubyA+PiAoc2l6ZW9mKHU2NCktc2l6ZW9mKGlub190KSkgKiA4OwotCWlmICghaW5vKQotCQlpbm8gPSAxOworCWlubyA9IGNlcGhfaW5vX3RvX2lubzMyKGlubyk7CiAjZW5kaWYKIAlyZXR1cm4gaW5vOwogfQogCisvKgorICogdXNlci12aXNpYmxlIGlubyAoc3RhdCwgZmlsbGRpcikKKyAqLworI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKK3N0YXRpYyBpbmxpbmUgaW5vX3QgY2VwaF90cmFuc2xhdGVfaW5vKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGlub190IGlubykKK3sKKwlyZXR1cm4gaW5vOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW5vX3QgY2VwaF90cmFuc2xhdGVfaW5vKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGlub190IGlubykKK3sKKwlpZiAoY2VwaF90ZXN0X21vdW50X29wdChjZXBoX3NiX3RvX2NsaWVudChzYiksIElOTzMyKSkKKwkJaW5vID0gY2VwaF9pbm9fdG9faW5vMzIoaW5vKTsKKwlyZXR1cm4gaW5vOworfQorI2VuZGlmCisKKwogLyogZm9yIHByaW50Zi1zdHlsZSBmb3JtYXR0aW5nICovCiAjZGVmaW5lIGNlcGhfdmlub3AoaSkgY2VwaF9pbm9kZShpKS0+aV92aW5vLmlubywgY2VwaF9pbm9kZShpKS0+aV92aW5vLnNuYXAKIApAQCAtNDI4LDEzICs0NzAsNiBAQAogCXJldHVybiAoKGxvZmZfdClmcmFnIDw8IDMyKSB8IChsb2ZmX3Qpb2ZmOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjZXBoX3NldF9pbm9fY2Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqZGF0YSkKLXsKLQljZXBoX2lub2RlKGlub2RlKS0+aV92aW5vID0gKihzdHJ1Y3QgY2VwaF92aW5vICopZGF0YTsKLQlpbm9kZS0+aV9pbm8gPSBjZXBoX3Zpbm9fdG9faW5vKCooc3RydWN0IGNlcGhfdmlubyAqKWRhdGEpOwotCXJldHVybiAwOwotfQotCiAvKgogICogY2FwcyBoZWxwZXJzCiAgKi8KQEAgLTUwMywxNSArNTM4LDYgQEAKIAkJCQkgICAgaW50ICp0b3RhbCwgaW50ICphdmFpbCwgaW50ICp1c2VkLAogCQkJCSAgICBpbnQgKnJlc2VydmVkLCBpbnQgKm1pbik7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNlcGhfZnNfY2xpZW50ICpjZXBoX2lub2RlX3RvX2NsaWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiAoc3RydWN0IGNlcGhfZnNfY2xpZW50ICopaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2VwaF9mc19jbGllbnQgKmNlcGhfc2JfdG9fY2xpZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgY2VwaF9mc19jbGllbnQgKilzYi0+c19mc19pbmZvOwotfQogCiAKIC8qCmRpZmYgLS1naXQgYS9mcy9jb2RhL01ha2VmaWxlIGIvZnMvY29kYS9NYWtlZmlsZQppbmRleCA2YzIyZTYxLi4xYmFiNjlhIDEwMDY0NAotLS0gYS9mcy9jb2RhL01ha2VmaWxlCisrKyBiL2ZzL2NvZGEvTWFrZWZpbGUKQEAgLTksNCArOSw0IEBACiAKICMgSWYgeW91IHdhbnQgZGVidWdnaW5nIG91dHB1dCwgcGxlYXNlIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUuCiAKLSMgRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcgLURERUJVR19TTUJfTUFMTE9DPTEKKyMgY2NmbGFncy15IDo9IC1EREVCVUcgLURERUJVR19TTUJfTUFMTE9DPTEKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvc3lzY3RsLmMgYi9mcy9jb2RhL3N5c2N0bC5jCmluZGV4IGM2NDA1Y2UuLjA2ZDI3YTQgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvc3lzY3RsLmMKKysrIGIvZnMvY29kYS9zeXNjdGwuYwpAQCAtMTMsNyArMTMsNiBAQAogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpmc190YWJsZV9oZWFkZXI7Ci0jZW5kaWYKIAogc3RhdGljIGN0bF90YWJsZSBjb2RhX3RhYmxlW10gPSB7CiAJewpAQCAtNDAsNyArMzksNiBAQAogCXt9CiB9OwogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAogc3RhdGljIGN0bF90YWJsZSBmc190YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gImNvZGEiLApAQCAtNDksMjIgKzQ3LDE4IEBACiAJfSwKIAl7fQogfTsKLSNlbmRpZgogCiB2b2lkIGNvZGFfc3lzY3RsX2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJaWYgKCAhZnNfdGFibGVfaGVhZGVyICkKIAkJZnNfdGFibGVfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGZzX3RhYmxlKTsKLSNlbmRpZgogfQogCiB2b2lkIGNvZGFfc3lzY3RsX2NsZWFuKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAogCWlmICggZnNfdGFibGVfaGVhZGVyICkgewogCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShmc190YWJsZV9oZWFkZXIpOwogCQlmc190YWJsZV9oZWFkZXIgPSBOVUxMOwogCX0KLSNlbmRpZgogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGM2ZDMxYTMuLjcyZmU2Y2QgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC0xNjcxLDkgKzE2NzEsNiBAQAogICogVXBkYXRlOiBFUkVTVEFSVFNZUyBicmVha3MgYXQgbGVhc3QgdGhlIHh2aWV3IGNsb2NrIGJpbmFyeSwgc28KICAqIEknbSB0cnlpbmcgRVJFU1RBUlROT0hBTkQgd2hpY2ggcmVzdGFydCBvbmx5IHdoZW4geW91IHdhbnQgdG8uCiAgKi8KLSNkZWZpbmUgTUFYX1NFTEVDVF9TRUNPTkRTIFwKLQkoKHVuc2lnbmVkIGxvbmcpIChNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKS0xKQotCiBpbnQgY29tcGF0X2NvcmVfc3lzX3NlbGVjdChpbnQgbiwgY29tcGF0X3Vsb25nX3QgX191c2VyICppbnAsCiAJY29tcGF0X3Vsb25nX3QgX191c2VyICpvdXRwLCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmV4cCwKIAlzdHJ1Y3QgdGltZXNwZWMgKmVuZF90aW1lKQpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCBhMzlmZTQ3Li5hZDI1YzRjIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMTYxMiwxMCArMTYxMiwxMyBAQAogCV9fYml0X3NwaW5fdW5sb2NrKDAsICh1bnNpZ25lZCBsb25nICopJnRtcC0+ZF9zYi0+c19hbm9uLmZpcnN0KTsKIAlzcGluX3VubG9jaygmdG1wLT5kX2xvY2spOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlzZWN1cml0eV9kX2luc3RhbnRpYXRlKHRtcCwgaW5vZGUpOwogCiAJcmV0dXJuIHRtcDsKIAogIG91dF9pcHV0OgorCWlmIChyZXMgJiYgIUlTX0VSUihyZXMpKQorCQlzZWN1cml0eV9kX2luc3RhbnRpYXRlKHJlcywgaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogCXJldHVybiByZXM7CiB9CkBAIC0xODA4LDcgKzE4MTEsNyBAQAogCSAqIGZhbHNlLW5lZ2F0aXZlIHJlc3VsdC4gZF9sb29rdXAoKSBwcm90ZWN0cyBhZ2FpbnN0IGNvbmN1cnJlbnQKIAkgKiByZW5hbWVzIHVzaW5nIHJlbmFtZV9sb2NrIHNlcWxvY2suCiAJICoKLQkgKiBTZWUgRG9jdW1lbnRhdGlvbi92ZnMvZGNhY2hlLWxvY2tpbmcudHh0IGZvciBtb3JlIGRldGFpbHMuCisJICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0IGZvciBtb3JlIGRldGFpbHMuCiAJICovCiAJaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1KGRlbnRyeSwgbm9kZSwgJmItPmhlYWQsIGRfaGFzaCkgewogCQlzdHJ1Y3QgaW5vZGUgKmk7CkBAIC0xOTI4LDcgKzE5MzEsNyBAQAogCSAqIGZhbHNlLW5lZ2F0aXZlIHJlc3VsdC4gZF9sb29rdXAoKSBwcm90ZWN0cyBhZ2FpbnN0IGNvbmN1cnJlbnQKIAkgKiByZW5hbWVzIHVzaW5nIHJlbmFtZV9sb2NrIHNlcWxvY2suCiAJICoKLQkgKiBTZWUgRG9jdW1lbnRhdGlvbi92ZnMvZGNhY2hlLWxvY2tpbmcudHh0IGZvciBtb3JlIGRldGFpbHMuCisJICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0IGZvciBtb3JlIGRldGFpbHMuCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwogCQpkaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuYwppbmRleCAxYmI1NDdjLi4yZjI3ZTU3IDEwMDY0NAotLS0gYS9mcy9kZXZwdHMvaW5vZGUuYworKysgYi9mcy9kZXZwdHMvaW5vZGUuYwpAQCAtNDc5LDYgKzQ3OSw3IEBACiAJc3RydWN0IGRlbnRyeSAqcm9vdCA9IHNiLT5zX3Jvb3Q7CiAJc3RydWN0IHB0c19mc19pbmZvICpmc2kgPSBERVZQVFNfU0Ioc2IpOwogCXN0cnVjdCBwdHNfbW91bnRfb3B0cyAqb3B0cyA9ICZmc2ktPm1vdW50X29wdHM7CisJaW50IHJldCA9IDA7CiAJY2hhciBzWzEyXTsKIAogCS8qIFdlJ3JlIHN1cHBvc2VkIHRvIGJlIGdpdmVuIHRoZSBzbGF2ZSBlbmQgb2YgYSBwdHkgKi8KQEAgLTUwMSwxNCArNTAyLDE3IEBACiAJbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlkZW50cnkgPSBkX2FsbG9jX25hbWUocm9vdCwgcyk7Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkgeworCWlmIChkZW50cnkpIHsKIAkJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJCWZzbm90aWZ5X2NyZWF0ZShyb290LT5kX2lub2RlLCBkZW50cnkpOworCX0gZWxzZSB7CisJCWlwdXQoaW5vZGUpOworCQlyZXQgPSAtRU5PTUVNOwogCX0KIAogCW11dGV4X3VubG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdHJ1Y3QgdHR5X3N0cnVjdCAqZGV2cHRzX2dldF90dHkoc3RydWN0IGlub2RlICpwdHNfaW5vZGUsIGludCBudW1iZXIpCkBAIC01NDQsMTcgKzU0OCwxMiBAQAogCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJZGVudHJ5ID0gZF9maW5kX2FsaWFzKGlub2RlKTsKLQlpZiAoSVNfRVJSKGRlbnRyeSkpCi0JCWdvdG8gb3V0OwogCi0JaWYgKGRlbnRyeSkgewotCQlpbm9kZS0+aV9ubGluay0tOwotCQlkX2RlbGV0ZShkZW50cnkpOwotCQlkcHV0KGRlbnRyeSk7CS8qIGRfYWxsb2NfbmFtZSgpIGluIGRldnB0c19wdHlfbmV3KCkgKi8KLQl9Ci0KKwlpbm9kZS0+aV9ubGluay0tOworCWRfZGVsZXRlKGRlbnRyeSk7CisJZHB1dChkZW50cnkpOwkvKiBkX2FsbG9jX25hbWUoKSBpbiBkZXZwdHNfcHR5X25ldygpICovCiAJZHB1dChkZW50cnkpOwkJLyogZF9maW5kX2FsaWFzIGFib3ZlICovCi1vdXQ6CisKIAltdXRleF91bmxvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogfQogCmRpZmYgLS1naXQgYS9mcy9kaXJlY3QtaW8uYyBiL2ZzL2RpcmVjdC1pby5jCmluZGV4IGIwNDQ3MDUuLmRjYjU1NzcgMTAwNjQ0Ci0tLSBhL2ZzL2RpcmVjdC1pby5jCisrKyBiL2ZzL2RpcmVjdC1pby5jCkBAIC02NDUsMTEgKzY0NSwxMSBAQAogCQkvKgogCQkgKiBTZWUgd2hldGhlciB0aGlzIG5ldyByZXF1ZXN0IGlzIGNvbnRpZ3VvdXMgd2l0aCB0aGUgb2xkLgogCQkgKgotCQkgKiBCdHJmcyBjYW5ub3QgaGFuZGwgaGF2aW5nIGxvZ2ljYWxseSBub24tY29udGlndW91cyByZXF1ZXN0cwotCQkgKiBzdWJtaXR0ZWQuICBGb3IgZXhtcGxlIGlmIHlvdSBoYXZlCisJCSAqIEJ0cmZzIGNhbm5vdCBoYW5kbGUgaGF2aW5nIGxvZ2ljYWxseSBub24tY29udGlndW91cyByZXF1ZXN0cworCQkgKiBzdWJtaXR0ZWQuICBGb3IgZXhhbXBsZSBpZiB5b3UgaGF2ZQogCQkgKgogCQkgKiBMb2dpY2FsOiAgWzAtNDA5NV1bSE9MRV1bODE5Mi0xMjI4N10KLQkJICogUGh5aXNjYWw6IFswLTQwOTVdICAgICAgWzQwOTYtODE4MV0KKwkJICogUGh5c2ljYWw6IFswLTQwOTVdICAgICAgWzQwOTYtODE5MV0KIAkJICoKIAkJICogV2UgY2Fubm90IHN1Ym1pdCB0aG9zZSBwYWdlcyB0b2dldGhlciBhcyBvbmUgQklPLiAgU28gaWYgb3VyCiAJCSAqIGN1cnJlbnQgbG9naWNhbCBvZmZzZXQgaW4gdGhlIGZpbGUgZG9lcyBub3QgZXF1YWwgd2hhdCB3b3VsZApkaWZmIC0tZ2l0IGEvZnMvZGxtL2FzdC5jIGIvZnMvZGxtL2FzdC5jCmluZGV4IDQzMTRmMGQ0Li5hYmM0OWYyIDEwMDY0NAotLS0gYS9mcy9kbG0vYXN0LmMKKysrIGIvZnMvZGxtL2FzdC5jCkBAIC0xOCw2ICsxOCw3IEBACiAKICNkZWZpbmUgV0FLRV9BU1RTICAwCiAKK3N0YXRpYyB1aW50NjRfdAkJCWFzdF9zZXFfY291bnQ7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZAkJYXN0X3F1ZXVlOwogc3RhdGljIHNwaW5sb2NrX3QJCWFzdF9xdWV1ZV9sb2NrOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqCWFzdGRfdGFzazsKQEAgLTI1LDQwICsyNiwxODYgQEAKIHN0YXRpYyBzdHJ1Y3QgbXV0ZXgJCWFzdGRfcnVubmluZzsKIAogCitzdGF0aWMgdm9pZCBkbG1fZHVtcF9sa2JfY2FsbGJhY2tzKHN0cnVjdCBkbG1fbGtiICpsa2IpCit7CisJaW50IGk7CisKKwlsb2dfcHJpbnQoImxhc3RfYmFzdCAleCAlbGx1IGZsYWdzICV4IG1vZGUgJWQgc2IgJWQgJXgiLAorCQkgIGxrYi0+bGtiX2lkLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbGtiLT5sa2JfbGFzdF9iYXN0LnNlcSwKKwkJICBsa2ItPmxrYl9sYXN0X2Jhc3QuZmxhZ3MsCisJCSAgbGtiLT5sa2JfbGFzdF9iYXN0Lm1vZGUsCisJCSAgbGtiLT5sa2JfbGFzdF9iYXN0LnNiX3N0YXR1cywKKwkJICBsa2ItPmxrYl9sYXN0X2Jhc3Quc2JfZmxhZ3MpOworCisJbG9nX3ByaW50KCJsYXN0X2Nhc3QgJXggJWxsdSBmbGFncyAleCBtb2RlICVkIHNiICVkICV4IiwKKwkJICBsa2ItPmxrYl9pZCwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWxrYi0+bGtiX2xhc3RfY2FzdC5zZXEsCisJCSAgbGtiLT5sa2JfbGFzdF9jYXN0LmZsYWdzLAorCQkgIGxrYi0+bGtiX2xhc3RfY2FzdC5tb2RlLAorCQkgIGxrYi0+bGtiX2xhc3RfY2FzdC5zYl9zdGF0dXMsCisJCSAgbGtiLT5sa2JfbGFzdF9jYXN0LnNiX2ZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBETE1fQ0FMTEJBQ0tTX1NJWkU7IGkrKykgeworCQlsb2dfcHJpbnQoImNiICV4ICVsbHUgZmxhZ3MgJXggbW9kZSAlZCBzYiAlZCAleCIsCisJCQkgIGxrYi0+bGtiX2lkLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxrYi0+bGtiX2NhbGxiYWNrc1tpXS5zZXEsCisJCQkgIGxrYi0+bGtiX2NhbGxiYWNrc1tpXS5mbGFncywKKwkJCSAgbGtiLT5sa2JfY2FsbGJhY2tzW2ldLm1vZGUsCisJCQkgIGxrYi0+bGtiX2NhbGxiYWNrc1tpXS5zYl9zdGF0dXMsCisJCQkgIGxrYi0+bGtiX2NhbGxiYWNrc1tpXS5zYl9mbGFncyk7CisJfQorfQorCiB2b2lkIGRsbV9kZWxfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IpCiB7CiAJc3Bpbl9sb2NrKCZhc3RfcXVldWVfbG9jayk7Ci0JaWYgKGxrYi0+bGtiX2FzdF90eXBlICYgKEFTVF9DT01QIHwgQVNUX0JBU1QpKQotCQlsaXN0X2RlbCgmbGtiLT5sa2JfYXN0cXVldWUpOworCWlmICghbGlzdF9lbXB0eSgmbGtiLT5sa2JfYXN0cXVldWUpKQorCQlsaXN0X2RlbF9pbml0KCZsa2ItPmxrYl9hc3RxdWV1ZSk7CiAJc3Bpbl91bmxvY2soJmFzdF9xdWV1ZV9sb2NrKTsKIH0KIAotdm9pZCBkbG1fYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IG1vZGUpCitpbnQgZGxtX2FkZF9sa2JfY2FsbGJhY2soc3RydWN0IGRsbV9sa2IgKmxrYiwgdWludDMyX3QgZmxhZ3MsIGludCBtb2RlLAorCQkJIGludCBzdGF0dXMsIHVpbnQzMl90IHNiZmxhZ3MsIHVpbnQ2NF90IHNlcSkKIHsKKwlzdHJ1Y3QgZGxtX2xzICpscyA9IGxrYi0+bGtiX3Jlc291cmNlLT5yZXNfbHM7CisJdWludDY0X3QgcHJldl9zZXE7CisJaW50IHByZXZfbW9kZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBETE1fQ0FMTEJBQ0tTX1NJWkU7IGkrKykgeworCQlpZiAobGtiLT5sa2JfY2FsbGJhY2tzW2ldLnNlcSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFN1cHByZXNzIHNvbWUgcmVkdW5kYW50IGJhc3RzIGhlcmUsIGRvIG1vcmUgb24gcmVtb3ZhbC4KKwkJICogRG9uJ3QgZXZlbiBhZGQgYSBiYXN0IGlmIHRoZSBjYWxsYmFjayBqdXN0IGJlZm9yZSBpdAorCQkgKiBpcyBhIGJhc3QgZm9yIHRoZSBzYW1lIG1vZGUgb3IgYSBtb3JlIHJlc3RyaWN0aXZlIG1vZGUuCisJCSAqICh0aGUgYWRkaW9uYWwgPiBQUiBjaGVjayBpcyBuZWVkZWQgZm9yIFBSL0NXIGludmVyc2lvbikKKwkJICovCisKKwkJaWYgKChpID4gMCkgJiYgKGZsYWdzICYgRExNX0NCX0JBU1QpICYmCisJCSAgICAobGtiLT5sa2JfY2FsbGJhY2tzW2ktMV0uZmxhZ3MgJiBETE1fQ0JfQkFTVCkpIHsKKworCQkJcHJldl9zZXEgPSBsa2ItPmxrYl9jYWxsYmFja3NbaS0xXS5zZXE7CisJCQlwcmV2X21vZGUgPSBsa2ItPmxrYl9jYWxsYmFja3NbaS0xXS5tb2RlOworCisJCQlpZiAoKHByZXZfbW9kZSA9PSBtb2RlKSB8fAorCQkJICAgIChwcmV2X21vZGUgPiBtb2RlICYmIHByZXZfbW9kZSA+IERMTV9MT0NLX1BSKSkgeworCisJCQkJbG9nX2RlYnVnKGxzLCAic2tpcCAleCBhZGQgYmFzdCAlbGx1IG1vZGUgJWQgIgorCQkJCQkgICJmb3IgYmFzdCAlbGx1IG1vZGUgJWQiLAorCQkJCQkgIGxrYi0+bGtiX2lkLAorCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpc2VxLAorCQkJCQkgIG1vZGUsCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwcmV2X3NlcSwKKwkJCQkJICBwcmV2X21vZGUpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisKKwkJbGtiLT5sa2JfY2FsbGJhY2tzW2ldLnNlcSA9IHNlcTsKKwkJbGtiLT5sa2JfY2FsbGJhY2tzW2ldLmZsYWdzID0gZmxhZ3M7CisJCWxrYi0+bGtiX2NhbGxiYWNrc1tpXS5tb2RlID0gbW9kZTsKKwkJbGtiLT5sa2JfY2FsbGJhY2tzW2ldLnNiX3N0YXR1cyA9IHN0YXR1czsKKwkJbGtiLT5sa2JfY2FsbGJhY2tzW2ldLnNiX2ZsYWdzID0gKHNiZmxhZ3MgJiAweDAwMDAwMEZGKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gRExNX0NBTExCQUNLU19TSVpFKSB7CisJCWxvZ19lcnJvcihscywgIm5vIGNhbGxiYWNrcyAleCAlbGx1IGZsYWdzICV4IG1vZGUgJWQgc2IgJWQgJXgiLAorCQkJICBsa2ItPmxrYl9pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZXEsCisJCQkgIGZsYWdzLCBtb2RlLCBzdGF0dXMsIHNiZmxhZ3MpOworCQlkbG1fZHVtcF9sa2JfY2FsbGJhY2tzKGxrYik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRsbV9yZW1fbGtiX2NhbGxiYWNrKHN0cnVjdCBkbG1fbHMgKmxzLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJIHN0cnVjdCBkbG1fY2FsbGJhY2sgKmNiLCBpbnQgKnJlc2lkKQoreworCWludCBpOworCisJKnJlc2lkID0gMDsKKworCWlmICghbGtiLT5sa2JfY2FsbGJhY2tzWzBdLnNlcSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwkvKiBvbGRlc3QgdW5kZWxpdmVyZWQgY2IgaXMgY2FsbGJhY2tzWzBdICovCisKKwltZW1jcHkoY2IsICZsa2ItPmxrYl9jYWxsYmFja3NbMF0sIHNpemVvZihzdHJ1Y3QgZGxtX2NhbGxiYWNrKSk7CisJbWVtc2V0KCZsa2ItPmxrYl9jYWxsYmFja3NbMF0sIDAsIHNpemVvZihzdHJ1Y3QgZGxtX2NhbGxiYWNrKSk7CisKKwkvKiBzaGlmdCBvdGhlcnMgZG93biAqLworCisJZm9yIChpID0gMTsgaSA8IERMTV9DQUxMQkFDS1NfU0laRTsgaSsrKSB7CisJCWlmICghbGtiLT5sa2JfY2FsbGJhY2tzW2ldLnNlcSkKKwkJCWJyZWFrOworCQltZW1jcHkoJmxrYi0+bGtiX2NhbGxiYWNrc1tpLTFdLCAmbGtiLT5sa2JfY2FsbGJhY2tzW2ldLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkbG1fY2FsbGJhY2spKTsKKwkJbWVtc2V0KCZsa2ItPmxrYl9jYWxsYmFja3NbaV0sIDAsIHNpemVvZihzdHJ1Y3QgZGxtX2NhbGxiYWNrKSk7CisJCSgqcmVzaWQpKys7CisJfQorCisJLyogaWYgY2IgaXMgYSBiYXN0LCBpdCBzaG91bGQgYmUgc2tpcHBlZCBpZiB0aGUgYmxvY2tpbmcgbW9kZSBpcworCSAgIGNvbXBhdGlibGUgd2l0aCB0aGUgbGFzdCBncmFudGVkIG1vZGUgKi8KKworCWlmICgoY2ItPmZsYWdzICYgRExNX0NCX0JBU1QpICYmIGxrYi0+bGtiX2xhc3RfY2FzdC5zZXEpIHsKKwkJaWYgKGRsbV9tb2Rlc19jb21wYXQoY2ItPm1vZGUsIGxrYi0+bGtiX2xhc3RfY2FzdC5tb2RlKSkgeworCQkJY2ItPmZsYWdzIHw9IERMTV9DQl9TS0lQOworCisJCQlsb2dfZGVidWcobHMsICJza2lwICV4IGJhc3QgJWxsdSBtb2RlICVkICIKKwkJCQkgICJmb3IgY2FzdCAlbGx1IG1vZGUgJWQiLAorCQkJCSAgbGtiLT5sa2JfaWQsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWNiLT5zZXEsCisJCQkJICBjYi0+bW9kZSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbGtiLT5sa2JfbGFzdF9jYXN0LnNlcSwKKwkJCQkgIGxrYi0+bGtiX2xhc3RfY2FzdC5tb2RlKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGNiLT5mbGFncyAmIERMTV9DQl9DQVNUKSB7CisJCW1lbWNweSgmbGtiLT5sa2JfbGFzdF9jYXN0LCBjYiwgc2l6ZW9mKHN0cnVjdCBkbG1fY2FsbGJhY2spKTsKKwkJbGtiLT5sa2JfbGFzdF9jYXN0X3RpbWUgPSBrdGltZV9nZXQoKTsKKwl9CisKKwlpZiAoY2ItPmZsYWdzICYgRExNX0NCX0JBU1QpIHsKKwkJbWVtY3B5KCZsa2ItPmxrYl9sYXN0X2Jhc3QsIGNiLCBzaXplb2Yoc3RydWN0IGRsbV9jYWxsYmFjaykpOworCQlsa2ItPmxrYl9sYXN0X2Jhc3RfdGltZSA9IGt0aW1lX2dldCgpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGRsbV9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIHVpbnQzMl90IGZsYWdzLCBpbnQgbW9kZSwgaW50IHN0YXR1cywKKwkJIHVpbnQzMl90IHNiZmxhZ3MpCit7CisJdWludDY0X3Qgc2VxOworCWludCBydjsKKworCXNwaW5fbG9jaygmYXN0X3F1ZXVlX2xvY2spOworCisJc2VxID0gKythc3Rfc2VxX2NvdW50OworCiAJaWYgKGxrYi0+bGtiX2ZsYWdzICYgRExNX0lGTF9VU0VSKSB7Ci0JCWRsbV91c2VyX2FkZF9hc3QobGtiLCB0eXBlLCBtb2RlKTsKKwkJc3Bpbl91bmxvY2soJmFzdF9xdWV1ZV9sb2NrKTsKKwkJZGxtX3VzZXJfYWRkX2FzdChsa2IsIGZsYWdzLCBtb2RlLCBzdGF0dXMsIHNiZmxhZ3MsIHNlcSk7CiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2soJmFzdF9xdWV1ZV9sb2NrKTsKLQlpZiAoIShsa2ItPmxrYl9hc3RfdHlwZSAmIChBU1RfQ09NUCB8IEFTVF9CQVNUKSkpIHsKLQkJa3JlZl9nZXQoJmxrYi0+bGtiX3JlZik7Ci0JCWxpc3RfYWRkX3RhaWwoJmxrYi0+bGtiX2FzdHF1ZXVlLCAmYXN0X3F1ZXVlKTsKLQkJbGtiLT5sa2JfYXN0X2ZpcnN0ID0gdHlwZTsKKwlydiA9IGRsbV9hZGRfbGtiX2NhbGxiYWNrKGxrYiwgZmxhZ3MsIG1vZGUsIHN0YXR1cywgc2JmbGFncywgc2VxKTsKKwlpZiAocnYgPCAwKSB7CisJCXNwaW5fdW5sb2NrKCZhc3RfcXVldWVfbG9jayk7CisJCXJldHVybjsKIAl9CiAKLQkvKiBzYW5pdHkgY2hlY2ssIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQotCWlmICgodHlwZSA9PSBBU1RfQ09NUCkgJiYgKGxrYi0+bGtiX2FzdF90eXBlICYgQVNUX0NPTVApKQotCQlsb2dfcHJpbnQoInJlcGVhdCBjYXN0ICVkIGNhc3Rtb2RlICVkIGxvY2sgJXggJXMiLAotCQkJICBtb2RlLCBsa2ItPmxrYl9jYXN0bW9kZSwKLQkJCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX3Jlc291cmNlLT5yZXNfbmFtZSk7Ci0KLQlsa2ItPmxrYl9hc3RfdHlwZSB8PSB0eXBlOwotCWlmICh0eXBlID09IEFTVF9CQVNUKQotCQlsa2ItPmxrYl9iYXN0bW9kZSA9IG1vZGU7Ci0JZWxzZQotCQlsa2ItPmxrYl9jYXN0bW9kZSA9IG1vZGU7CisJaWYgKGxpc3RfZW1wdHkoJmxrYi0+bGtiX2FzdHF1ZXVlKSkgeworCQlrcmVmX2dldCgmbGtiLT5sa2JfcmVmKTsKKwkJbGlzdF9hZGRfdGFpbCgmbGtiLT5sa2JfYXN0cXVldWUsICZhc3RfcXVldWUpOworCX0KIAlzcGluX3VubG9jaygmYXN0X3F1ZXVlX2xvY2spOwogCiAJc2V0X2JpdChXQUtFX0FTVFMsICZhc3RkX3dha2VmbGFncyk7CkBAIC03Miw3ICsyMTksOCBAQAogCXN0cnVjdCBkbG1fbGtiICpsa2I7CiAJdm9pZCAoKmNhc3RmbikgKHZvaWQgKmFzdHBhcmFtKTsKIAl2b2lkICgqYmFzdGZuKSAodm9pZCAqYXN0cGFyYW0sIGludCBtb2RlKTsKLQlpbnQgdHlwZSwgZmlyc3QsIGJhc3Rtb2RlLCBjYXN0bW9kZSwgZG9fYmFzdCwgZG9fY2FzdCwgbGFzdF9jYXN0bW9kZTsKKwlzdHJ1Y3QgZGxtX2NhbGxiYWNrIGNhbGxiYWNrc1tETE1fQ0FMTEJBQ0tTX1NJWkVdOworCWludCBpLCBydiwgcmVzaWQ7CiAKIHJlcGVhdDoKIAlzcGluX2xvY2soJmFzdF9xdWV1ZV9sb2NrKTsKQEAgLTgzLDU0ICsyMzEsNDUgQEAKIAkJaWYgKGRsbV9sb2NraW5nX3N0b3BwZWQobHMpKQogCQkJY29udGludWU7CiAKLQkJbGlzdF9kZWwoJmxrYi0+bGtiX2FzdHF1ZXVlKTsKLQkJdHlwZSA9IGxrYi0+bGtiX2FzdF90eXBlOwotCQlsa2ItPmxrYl9hc3RfdHlwZSA9IDA7Ci0JCWZpcnN0ID0gbGtiLT5sa2JfYXN0X2ZpcnN0OwotCQlsa2ItPmxrYl9hc3RfZmlyc3QgPSAwOwotCQliYXN0bW9kZSA9IGxrYi0+bGtiX2Jhc3Rtb2RlOwotCQljYXN0bW9kZSA9IGxrYi0+bGtiX2Nhc3Rtb2RlOworCQkvKiB3ZSByZW1vdmUgZnJvbSBhc3RxdWV1ZSBsaXN0IGFuZCByZW1vdmUgZXZlcnl0aGluZyBpbgorCQkgICBsa2JfY2FsbGJhY2tzIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNwaW5sb2NrIHNvIGVtcHR5CisJCSAgIGxrYl9hc3RxdWV1ZSBpcyBhbHdheXMgY29uc2lzdGVudCB3aXRoIGVtcHR5IGxrYl9jYWxsYmFja3MgKi8KKworCQlsaXN0X2RlbF9pbml0KCZsa2ItPmxrYl9hc3RxdWV1ZSk7CisKIAkJY2FzdGZuID0gbGtiLT5sa2JfYXN0Zm47CiAJCWJhc3RmbiA9IGxrYi0+bGtiX2Jhc3RmbjsKKworCQltZW1zZXQoJmNhbGxiYWNrcywgMCwgc2l6ZW9mKGNhbGxiYWNrcykpOworCisJCWZvciAoaSA9IDA7IGkgPCBETE1fQ0FMTEJBQ0tTX1NJWkU7IGkrKykgeworCQkJcnYgPSBkbG1fcmVtX2xrYl9jYWxsYmFjayhscywgbGtiLCAmY2FsbGJhY2tzW2ldLCAmcmVzaWQpOworCQkJaWYgKHJ2IDwgMCkKKwkJCQlicmVhazsKKwkJfQogCQlzcGluX3VubG9jaygmYXN0X3F1ZXVlX2xvY2spOwogCi0JCWRvX2Nhc3QgPSAodHlwZSAmIEFTVF9DT01QKSAmJiBjYXN0Zm47Ci0JCWRvX2Jhc3QgPSAodHlwZSAmIEFTVF9CQVNUKSAmJiBiYXN0Zm47Ci0KLQkJLyogU2tpcCBhIGJhc3QgaWYgaXRzIGJsb2NraW5nIG1vZGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQotCQkgICBncmFudGVkIG1vZGUgb2YgdGhlIHByZWNlZGluZyBjYXN0LiAqLwotCi0JCWlmIChkb19iYXN0KSB7Ci0JCQlpZiAoZmlyc3QgPT0gQVNUX0NPTVApCi0JCQkJbGFzdF9jYXN0bW9kZSA9IGNhc3Rtb2RlOwotCQkJZWxzZQotCQkJCWxhc3RfY2FzdG1vZGUgPSBsa2ItPmxrYl9jYXN0bW9kZV9kb25lOwotCQkJaWYgKGRsbV9tb2Rlc19jb21wYXQoYmFzdG1vZGUsIGxhc3RfY2FzdG1vZGUpKQotCQkJCWRvX2Jhc3QgPSAwOworCQlpZiAocmVzaWQpIHsKKwkJCS8qIHNob3VsZG4ndCBoYXBwZW4sIGZvciBsb29wIHNob3VsZCBoYXZlIHJlbW92ZWQgYWxsICovCisJCQlsb2dfZXJyb3IobHMsICJjYWxsYmFjayByZXNpZCAlZCBsa2IgJXgiLAorCQkJCSAgcmVzaWQsIGxrYi0+bGtiX2lkKTsKIAkJfQogCi0JCWlmIChmaXJzdCA9PSBBU1RfQ09NUCkgewotCQkJaWYgKGRvX2Nhc3QpCisJCWZvciAoaSA9IDA7IGkgPCBETE1fQ0FMTEJBQ0tTX1NJWkU7IGkrKykgeworCQkJaWYgKCFjYWxsYmFja3NbaV0uc2VxKQorCQkJCWJyZWFrOworCQkJaWYgKGNhbGxiYWNrc1tpXS5mbGFncyAmIERMTV9DQl9TS0lQKSB7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGNhbGxiYWNrc1tpXS5mbGFncyAmIERMTV9DQl9CQVNUKSB7CisJCQkJYmFzdGZuKGxrYi0+bGtiX2FzdHBhcmFtLCBjYWxsYmFja3NbaV0ubW9kZSk7CisJCQl9IGVsc2UgaWYgKGNhbGxiYWNrc1tpXS5mbGFncyAmIERMTV9DQl9DQVNUKSB7CisJCQkJbGtiLT5sa2JfbGtzYi0+c2Jfc3RhdHVzID0gY2FsbGJhY2tzW2ldLnNiX3N0YXR1czsKKwkJCQlsa2ItPmxrYl9sa3NiLT5zYl9mbGFncyA9IGNhbGxiYWNrc1tpXS5zYl9mbGFnczsKIAkJCQljYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0pOwotCQkJaWYgKGRvX2Jhc3QpCi0JCQkJYmFzdGZuKGxrYi0+bGtiX2FzdHBhcmFtLCBiYXN0bW9kZSk7Ci0JCX0gZWxzZSBpZiAoZmlyc3QgPT0gQVNUX0JBU1QpIHsKLQkJCWlmIChkb19iYXN0KQotCQkJCWJhc3Rmbihsa2ItPmxrYl9hc3RwYXJhbSwgYmFzdG1vZGUpOwotCQkJaWYgKGRvX2Nhc3QpCi0JCQkJY2FzdGZuKGxrYi0+bGtiX2FzdHBhcmFtKTsKLQkJfSBlbHNlIHsKLQkJCWxvZ19lcnJvcihscywgImJhZCBhc3RfZmlyc3QgJWQgYXN0X3R5cGUgJWQiLAotCQkJCSAgZmlyc3QsIHR5cGUpOworCQkJfQogCQl9CiAKLQkJaWYgKGRvX2Nhc3QpCi0JCQlsa2ItPmxrYl9jYXN0bW9kZV9kb25lID0gY2FzdG1vZGU7Ci0JCWlmIChkb19iYXN0KQotCQkJbGtiLT5sa2JfYmFzdG1vZGVfZG9uZSA9IGJhc3Rtb2RlOwotCi0JCS8qIHRoaXMgcmVtb3ZlcyB0aGUgcmVmZXJlbmNlIGFkZGVkIGJ5IGRsbV9hZGRfYXN0Ci0JCSAgIGFuZCBtYXkgcmVzdWx0IGluIHRoZSBsa2IgYmVpbmcgZnJlZWQgKi8KKwkJLyogcmVtb3ZlcyByZWYgZm9yIGFzdF9xdWV1ZSwgbWF5IGNhdXNlIGxrYiB0byBiZSBmcmVlZCAqLwogCQlkbG1fcHV0X2xrYihsa2IpOwogCiAJCWNvbmRfcmVzY2hlZCgpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2FzdC5oIGIvZnMvZGxtL2FzdC5oCmluZGV4IGJjYjFhYWIuLjhhYTg5YzkgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9hc3QuaAorKysgYi9mcy9kbG0vYXN0LmgKQEAgLTEzLDggKzEzLDEzIEBACiAjaWZuZGVmIF9fQVNURF9ET1RfSF9fCiAjZGVmaW5lIF9fQVNURF9ET1RfSF9fCiAKLXZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKTsKIHZvaWQgZGxtX2RlbF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYik7CitpbnQgZGxtX2FkZF9sa2JfY2FsbGJhY2soc3RydWN0IGRsbV9sa2IgKmxrYiwgdWludDMyX3QgZmxhZ3MsIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMsIHVpbnQzMl90IHNiZmxhZ3MsIHVpbnQ2NF90IHNlcSk7CitpbnQgZGxtX3JlbV9sa2JfY2FsbGJhY2soc3RydWN0IGRsbV9scyAqbHMsIHN0cnVjdCBkbG1fbGtiICpsa2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRsbV9jYWxsYmFjayAqY2IsIGludCAqcmVzaWQpOwordm9pZCBkbG1fYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCB1aW50MzJfdCBmbGFncywgaW50IG1vZGUsIGludCBzdGF0dXMsCisJCSB1aW50MzJfdCBzYmZsYWdzKTsKIAogdm9pZCBkbG1fYXN0ZF93YWtlKHZvaWQpOwogaW50IGRsbV9hc3RkX3N0YXJ0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2NvbmZpZy5jIGIvZnMvZGxtL2NvbmZpZy5jCmluZGV4IGI1NGJjYTAuLjBkMzI5ZmYgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9jb25maWcuYworKysgYi9mcy9kbG0vY29uZmlnLmMKQEAgLTk3Nyw5ICs5NzcsOSBAQAogLyogQ29uZmlnIGZpbGUgZGVmYXVsdHMgKi8KICNkZWZpbmUgREVGQVVMVF9UQ1BfUE9SVCAgICAgICAyMTA2NAogI2RlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFICAgICA0MDk2Ci0jZGVmaW5lIERFRkFVTFRfUlNCVEJMX1NJWkUgICAgICAyNTYKKyNkZWZpbmUgREVGQVVMVF9SU0JUQkxfU0laRSAgICAgMTAyNAogI2RlZmluZSBERUZBVUxUX0xLQlRCTF9TSVpFICAgICAxMDI0Ci0jZGVmaW5lIERFRkFVTFRfRElSVEJMX1NJWkUgICAgICA1MTIKKyNkZWZpbmUgREVGQVVMVF9ESVJUQkxfU0laRSAgICAgMTAyNAogI2RlZmluZSBERUZBVUxUX1JFQ09WRVJfVElNRVIgICAgICA1CiAjZGVmaW5lIERFRkFVTFRfVE9TU19TRUNTICAgICAgICAgMTAKICNkZWZpbmUgREVGQVVMVF9TQ0FOX1NFQ1MgICAgICAgICAgNQpkaWZmIC0tZ2l0IGEvZnMvZGxtL2RlYnVnX2ZzLmMgYi9mcy9kbG0vZGVidWdfZnMuYwppbmRleCA2YjQyYmE4Li41OTc3OTIzIDEwMDY0NAotLS0gYS9mcy9kbG0vZGVidWdfZnMuYworKysgYi9mcy9kbG0vZGVidWdfZnMuYwpAQCAtMjU3LDEyICsyNTcsMTIgQEAKIAkJCWxrYi0+bGtiX3N0YXR1cywKIAkJCWxrYi0+bGtiX2dybW9kZSwKIAkJCWxrYi0+bGtiX3JxbW9kZSwKLQkJCWxrYi0+bGtiX2Jhc3Rtb2RlLAorCQkJbGtiLT5sa2JfbGFzdF9iYXN0Lm1vZGUsCiAJCQlyc2JfbG9va3VwLAogCQkJbGtiLT5sa2Jfd2FpdF90eXBlLAogCQkJbGtiLT5sa2JfbHZic2VxLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhsa2ItPmxrYl90aW1lc3RhbXApLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhsa2ItPmxrYl90aW1lX2Jhc3QpKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMobGtiLT5sa2JfbGFzdF9iYXN0X3RpbWUpKTsKIAlyZXR1cm4gcnY7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2RsbS9kbG1faW50ZXJuYWwuaCBiL2ZzL2RsbS9kbG1faW50ZXJuYWwuaAppbmRleCBmNjMyYjU4Li5iOTQyMDQ5IDEwMDY0NAotLS0gYS9mcy9kbG0vZGxtX2ludGVybmFsLmgKKysrIGIvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCkBAIC0xOTIsMTEgKzE5Miw2IEBACiAgKiBsa2IgaXMgYSBwcm9jZXNzIGNvcHksIHRoZSBub2RlaWQgc3BlY2lmaWVzIHRoZSBsb2NrIG1hc3Rlci4KICAqLwogCi0vKiBsa2JfYXN0X3R5cGUgKi8KLQotI2RlZmluZSBBU1RfQ09NUAkJMQotI2RlZmluZSBBU1RfQkFTVAkJMgotCiAvKiBsa2Jfc3RhdHVzICovCiAKICNkZWZpbmUgRExNX0xLU1RTX1dBSVRJTkcJMQpAQCAtMjE3LDYgKzIxMiwyMCBAQAogI2RlZmluZSBETE1fSUZMX1VTRVIJCTB4MDAwMDAwMDEKICNkZWZpbmUgRExNX0lGTF9PUlBIQU4JCTB4MDAwMDAwMDIKIAorI2RlZmluZSBETE1fQ0FMTEJBQ0tTX1NJWkUJNgorCisjZGVmaW5lIERMTV9DQl9DQVNUCQkweDAwMDAwMDAxCisjZGVmaW5lIERMTV9DQl9CQVNUCQkweDAwMDAwMDAyCisjZGVmaW5lIERMTV9DQl9TS0lQCQkweDAwMDAwMDA0CisKK3N0cnVjdCBkbG1fY2FsbGJhY2sgeworCXVpbnQ2NF90CQlzZXE7CisJdWludDMyX3QJCWZsYWdzOwkJLyogRExNX0NCRl8gKi8KKwlpbnQJCQlzYl9zdGF0dXM7CS8qIGNvcHkgdG8gbGtzYiBzdGF0dXMgKi8KKwl1aW50OF90CQkJc2JfZmxhZ3M7CS8qIGNvcHkgdG8gbGtzYiBmbGFncyAqLworCWludDhfdAkJCW1vZGU7IC8qIHJxIG1vZGUgb2YgYmFzdCwgZ3IgbW9kZSBvZiBjYXN0ICovCit9OworCiBzdHJ1Y3QgZGxtX2xrYiB7CiAJc3RydWN0IGRsbV9yc2IJCSpsa2JfcmVzb3VyY2U7CS8qIHRoZSByc2IgKi8KIAlzdHJ1Y3Qga3JlZgkJbGtiX3JlZjsKQEAgLTIzNiwxMyArMjQ1LDYgQEAKIAogCWludDhfdAkJCWxrYl93YWl0X3R5cGU7CS8qIHR5cGUgb2YgcmVwbHkgd2FpdGluZyBmb3IgKi8KIAlpbnQ4X3QJCQlsa2Jfd2FpdF9jb3VudDsKLQlpbnQ4X3QJCQlsa2JfYXN0X3R5cGU7CS8qIHR5cGUgb2YgYXN0IHF1ZXVlZCBmb3IgKi8KLQlpbnQ4X3QJCQlsa2JfYXN0X2ZpcnN0OwkvKiB0eXBlIG9mIGZpcnN0IGFzdCBxdWV1ZWQgKi8KLQotCWludDhfdAkJCWxrYl9iYXN0bW9kZTsJLyogcmVxIG1vZGUgb2YgcXVldWVkIGJhc3QgKi8KLQlpbnQ4X3QJCQlsa2JfY2FzdG1vZGU7CS8qIGdyIG1vZGUgb2YgcXVldWVkIGNhc3QgKi8KLQlpbnQ4X3QJCQlsa2JfYmFzdG1vZGVfZG9uZTsgLyogbGFzdCBkZWxpdmVyZWQgYmFzdG1vZGUgKi8KLQlpbnQ4X3QJCQlsa2JfY2FzdG1vZGVfZG9uZTsgLyogbGFzdCBkZWxpdmVyZWQgY2FzdG1vZGUgKi8KIAogCXN0cnVjdCBsaXN0X2hlYWQJbGtiX2lkdGJsX2xpc3Q7CS8qIGxvY2tzcGFjZSBsa2J0YmwgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxrYl9zdGF0ZXF1ZXVlOwkvKiByc2IgZy9jL3cgbGlzdCAqLwpAQCAtMjUxLDEwICsyNTMsMTUgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxrYl9hc3RxdWV1ZTsJLyogbmVlZCBhc3QgdG8gYmUgc2VudCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJbGtiX293bnF1ZXVlOwkvKiBsaXN0IG9mIGxvY2tzIGZvciBhIHByb2Nlc3MgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxrYl90aW1lX2xpc3Q7Ci0Ja3RpbWVfdAkJCWxrYl90aW1lX2Jhc3Q7CS8qIGZvciBkZWJ1Z2dpbmcgKi8KIAlrdGltZV90CQkJbGtiX3RpbWVzdGFtcDsKIAl1bnNpZ25lZCBsb25nCQlsa2JfdGltZW91dF9jczsKIAorCXN0cnVjdCBkbG1fY2FsbGJhY2sJbGtiX2NhbGxiYWNrc1tETE1fQ0FMTEJBQ0tTX1NJWkVdOworCXN0cnVjdCBkbG1fY2FsbGJhY2sJbGtiX2xhc3RfY2FzdDsKKwlzdHJ1Y3QgZGxtX2NhbGxiYWNrCWxrYl9sYXN0X2Jhc3Q7CisJa3RpbWVfdAkJCWxrYl9sYXN0X2Nhc3RfdGltZTsJLyogZm9yIGRlYnVnZ2luZyAqLworCWt0aW1lX3QJCQlsa2JfbGFzdF9iYXN0X3RpbWU7CS8qIGZvciBkZWJ1Z2dpbmcgKi8KKwogCWNoYXIJCQkqbGtiX2x2YnB0cjsKIAlzdHJ1Y3QgZGxtX2xrc2IJCSpsa2JfbGtzYjsgICAgICAvKiBjYWxsZXIncyBzdGF0dXMgYmxvY2sgKi8KIAl2b2lkCQkJKCpsa2JfYXN0Zm4pICh2b2lkICphc3RwYXJhbSk7CkBAIC01NDQsOCArNTUxLDYgQEAKIAkJCQkJICAoZGxtX3VzZXJfcHJvYykgb24gdGhlIHN0cnVjdCBmaWxlLAogCQkJCQkgIHRoZSBwcm9jZXNzJ3MgbG9ja3MgcG9pbnQgYmFjayB0byBpdCovCiAJc3RydWN0IGRsbV9sa3NiCQlsa3NiOwotCWludAkJCW9sZF9tb2RlOwotCWludAkJCXVwZGF0ZV91c2VyX2x2YjsKIAlzdHJ1Y3QgZGxtX2xrc2IgX191c2VyCSp1c2VyX2xrc2I7CiAJdm9pZCBfX3VzZXIJCSpjYXN0cGFyYW07CiAJdm9pZCBfX3VzZXIJCSpjYXN0YWRkcjsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2NrLmMgYi9mcy9kbG0vbG9jay5jCmluZGV4IDY0ZTVmM2UuLjA0YjhjNDQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2NrLmMKKysrIGIvZnMvZGxtL2xvY2suYwpAQCAtMTYwLDEwICsxNjAsMTAgQEAKIHZvaWQgZGxtX3ByaW50X2xrYihzdHJ1Y3QgZGxtX2xrYiAqbGtiKQogewogCXByaW50ayhLRVJOX0VSUiAibGtiOiBub2RlaWQgJWQgaWQgJXggcmVtaWQgJXggZXhmbGFncyAleCBmbGFncyAleFxuIgotCSAgICAgICAiICAgICBzdGF0dXMgJWQgcnFtb2RlICVkIGdybW9kZSAlZCB3YWl0X3R5cGUgJWQgYXN0X3R5cGUgJWRcbiIsCisJICAgICAgICIgICAgIHN0YXR1cyAlZCBycW1vZGUgJWQgZ3Jtb2RlICVkIHdhaXRfdHlwZSAlZFxuIiwKIAkgICAgICAgbGtiLT5sa2Jfbm9kZWlkLCBsa2ItPmxrYl9pZCwgbGtiLT5sa2JfcmVtaWQsIGxrYi0+bGtiX2V4ZmxhZ3MsCiAJICAgICAgIGxrYi0+bGtiX2ZsYWdzLCBsa2ItPmxrYl9zdGF0dXMsIGxrYi0+bGtiX3JxbW9kZSwKLQkgICAgICAgbGtiLT5sa2JfZ3Jtb2RlLCBsa2ItPmxrYl93YWl0X3R5cGUsIGxrYi0+bGtiX2FzdF90eXBlKTsKKwkgICAgICAgbGtiLT5sa2JfZ3Jtb2RlLCBsa2ItPmxrYl93YWl0X3R5cGUpOwogfQogCiBzdGF0aWMgdm9pZCBkbG1fcHJpbnRfcnNiKHN0cnVjdCBkbG1fcnNiICpyKQpAQCAtMzA1LDEwICszMDUsNyBAQAogCQlydiA9IC1FREVBRExLOwogCX0KIAotCWxrYi0+bGtiX2xrc2ItPnNiX3N0YXR1cyA9IHJ2OwotCWxrYi0+bGtiX2xrc2ItPnNiX2ZsYWdzID0gbGtiLT5sa2Jfc2JmbGFnczsKLQotCWRsbV9hZGRfYXN0KGxrYiwgQVNUX0NPTVAsIGxrYi0+bGtiX2dybW9kZSk7CisJZGxtX2FkZF9hc3QobGtiLCBETE1fQ0JfQ0FTVCwgbGtiLT5sa2JfZ3Jtb2RlLCBydiwgbGtiLT5sa2Jfc2JmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9jYXN0X292ZXJsYXAoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IpCkBAIC0zMTksMTMgKzMxNiwxMCBAQAogCiBzdGF0aWMgdm9pZCBxdWV1ZV9iYXN0KHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgcnFtb2RlKQogewotCWxrYi0+bGtiX3RpbWVfYmFzdCA9IGt0aW1lX2dldCgpOwotCiAJaWYgKGlzX21hc3Rlcl9jb3B5KGxrYikpIHsKLQkJbGtiLT5sa2JfYmFzdG1vZGUgPSBycW1vZGU7IC8qIHByaW50ZWQgYnkgZGVidWdmcyAqLwogCQlzZW5kX2Jhc3QociwgbGtiLCBycW1vZGUpOwogCX0gZWxzZSB7Ci0JCWRsbV9hZGRfYXN0KGxrYiwgQVNUX0JBU1QsIHJxbW9kZSk7CisJCWRsbV9hZGRfYXN0KGxrYiwgRExNX0NCX0JBU1QsIHJxbW9kZSwgMCwgMCk7CiAJfQogfQogCkBAIC02MDAsNiArNTk0LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbGtiLT5sa2Jfb3ducXVldWUpOwogCUlOSVRfTElTVF9IRUFEKCZsa2ItPmxrYl9yc2JfbG9va3VwKTsKIAlJTklUX0xJU1RfSEVBRCgmbGtiLT5sa2JfdGltZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbGtiLT5sa2JfYXN0cXVldWUpOwogCiAJZ2V0X3JhbmRvbV9ieXRlcygmYnVja2V0LCBzaXplb2YoYnVja2V0KSk7CiAJYnVja2V0ICY9IChscy0+bHNfbGtidGJsX3NpemUgLSAxKTsKQEAgLTI4MTksOSArMjgxNCw5IEBACiAJICAgbm90IGZyb20gbGtiIGZpZWxkcyAqLwogCiAJaWYgKGxrYi0+bGtiX2Jhc3RmbikKLQkJbXMtPm1fYXN0cyB8PSBBU1RfQkFTVDsKKwkJbXMtPm1fYXN0cyB8PSBETE1fQ0JfQkFTVDsKIAlpZiAobGtiLT5sa2JfYXN0Zm4pCi0JCW1zLT5tX2FzdHMgfD0gQVNUX0NPTVA7CisJCW1zLT5tX2FzdHMgfD0gRExNX0NCX0NBU1Q7CiAKIAkvKiBjb21wYXJlIHdpdGggc3dpdGNoIGluIGNyZWF0ZV9tZXNzYWdlOyBzZW5kX3JlbW92ZSgpIGRvZXNuJ3QKIAkgICB1c2Ugc2VuZF9hcmdzKCkgKi8KQEAgLTMxMjIsOCArMzExNyw4IEBACiAJbGtiLT5sa2JfZ3Jtb2RlID0gRExNX0xPQ0tfSVY7CiAJbGtiLT5sa2JfcnFtb2RlID0gbXMtPm1fcnFtb2RlOwogCi0JbGtiLT5sa2JfYmFzdGZuID0gKG1zLT5tX2FzdHMgJiBBU1RfQkFTVCkgPyAmZmFrZV9iYXN0Zm4gOiBOVUxMOwotCWxrYi0+bGtiX2FzdGZuID0gKG1zLT5tX2FzdHMgJiBBU1RfQ09NUCkgPyAmZmFrZV9hc3RmbiA6IE5VTEw7CisJbGtiLT5sa2JfYmFzdGZuID0gKG1zLT5tX2FzdHMgJiBETE1fQ0JfQkFTVCkgPyAmZmFrZV9iYXN0Zm4gOiBOVUxMOworCWxrYi0+bGtiX2FzdGZuID0gKG1zLT5tX2FzdHMgJiBETE1fQ0JfQ0FTVCkgPyAmZmFrZV9hc3RmbiA6IE5VTEw7CiAKIAlpZiAobGtiLT5sa2JfZXhmbGFncyAmIERMTV9MS0ZfVkFMQkxLKSB7CiAJCS8qIGxrYiB3YXMganVzdCBjcmVhdGVkIHNvIHRoZXJlIHdvbid0IGJlIGFuIGx2YiB5ZXQgKi8KQEAgLTQ0MTIsOCArNDQwNyw4IEBACiAJbGtiLT5sa2JfZ3Jtb2RlID0gcmwtPnJsX2dybW9kZTsKIAkvKiBkb24ndCBzZXQgbGtiX3N0YXR1cyBiZWNhdXNlIGFkZF9sa2Igd2FudHMgdG8gaXRzZWxmICovCiAKLQlsa2ItPmxrYl9iYXN0Zm4gPSAocmwtPnJsX2FzdHMgJiBBU1RfQkFTVCkgPyAmZmFrZV9iYXN0Zm4gOiBOVUxMOwotCWxrYi0+bGtiX2FzdGZuID0gKHJsLT5ybF9hc3RzICYgQVNUX0NPTVApID8gJmZha2VfYXN0Zm4gOiBOVUxMOworCWxrYi0+bGtiX2Jhc3RmbiA9IChybC0+cmxfYXN0cyAmIERMTV9DQl9CQVNUKSA/ICZmYWtlX2Jhc3RmbiA6IE5VTEw7CisJbGtiLT5sa2JfYXN0Zm4gPSAocmwtPnJsX2FzdHMgJiBETE1fQ0JfQ0FTVCkgPyAmZmFrZV9hc3RmbiA6IE5VTEw7CiAKIAlpZiAobGtiLT5sa2JfZXhmbGFncyAmIERMTV9MS0ZfVkFMQkxLKSB7CiAJCWludCBsdmJsZW4gPSByYy0+cmNfaGVhZGVyLmhfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBkbG1fcmNvbSkgLQpAQCAtNDU4OSw3ICs0NTg0LDYgQEAKIAllcnJvciA9IHNldF9sb2NrX2FyZ3MobW9kZSwgJnVhLT5sa3NiLCBmbGFncywgbmFtZWxlbiwgdGltZW91dF9jcywKIAkJCSAgICAgIGZha2VfYXN0Zm4sIHVhLCBmYWtlX2Jhc3RmbiwgJmFyZ3MpOwogCWxrYi0+bGtiX2ZsYWdzIHw9IERMTV9JRkxfVVNFUjsKLQl1YS0+b2xkX21vZGUgPSBETE1fTE9DS19JVjsKIAogCWlmIChlcnJvcikgewogCQlfX3B1dF9sa2IobHMsIGxrYik7CkBAIC00NjU4LDcgKzQ2NTIsNiBAQAogCXVhLT5iYXN0cGFyYW0gPSB1YV90bXAtPmJhc3RwYXJhbTsKIAl1YS0+YmFzdGFkZHIgPSB1YV90bXAtPmJhc3RhZGRyOwogCXVhLT51c2VyX2xrc2IgPSB1YV90bXAtPnVzZXJfbGtzYjsKLQl1YS0+b2xkX21vZGUgPSBsa2ItPmxrYl9ncm1vZGU7CiAKIAllcnJvciA9IHNldF9sb2NrX2FyZ3MobW9kZSwgJnVhLT5sa3NiLCBmbGFncywgMCwgdGltZW91dF9jcywKIAkJCSAgICAgIGZha2VfYXN0Zm4sIHVhLCBmYWtlX2Jhc3RmbiwgJmFyZ3MpOwpAQCAtNDkxNyw4ICs0OTEwLDkgQEAKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGtiLCBzYWZlLCAmcHJvYy0+YXN0cywgbGtiX2FzdHF1ZXVlKSB7Ci0JCWxrYi0+bGtiX2FzdF90eXBlID0gMDsKLQkJbGlzdF9kZWwoJmxrYi0+bGtiX2FzdHF1ZXVlKTsKKwkJbWVtc2V0KCZsa2ItPmxrYl9jYWxsYmFja3MsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGRsbV9jYWxsYmFjaykgKiBETE1fQ0FMTEJBQ0tTX1NJWkUpOworCQlsaXN0X2RlbF9pbml0KCZsa2ItPmxrYl9hc3RxdWV1ZSk7CiAJCWRsbV9wdXRfbGtiKGxrYik7CiAJfQogCkBAIC00OTU4LDcgKzQ5NTIsOSBAQAogCiAJc3Bpbl9sb2NrKCZwcm9jLT5hc3RzX3NwaW4pOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsa2IsIHNhZmUsICZwcm9jLT5hc3RzLCBsa2JfYXN0cXVldWUpIHsKLQkJbGlzdF9kZWwoJmxrYi0+bGtiX2FzdHF1ZXVlKTsKKwkJbWVtc2V0KCZsa2ItPmxrYl9jYWxsYmFja3MsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGRsbV9jYWxsYmFjaykgKiBETE1fQ0FMTEJBQ0tTX1NJWkUpOworCQlsaXN0X2RlbF9pbml0KCZsa2ItPmxrYl9hc3RxdWV1ZSk7CiAJCWRsbV9wdXRfbGtiKGxrYik7CiAJfQogCXNwaW5fdW5sb2NrKCZwcm9jLT5hc3RzX3NwaW4pOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvd2NvbW1zLmMgYi9mcy9kbG0vbG93Y29tbXMuYwppbmRleCAyZDhjODdiLi5iZmZhMWU3IDEwMDY0NAotLS0gYS9mcy9kbG0vbG93Y29tbXMuYworKysgYi9mcy9kbG0vbG93Y29tbXMuYwpAQCAtMTQ2OCwxMyArMTQ2OCwxNSBAQAogCiBzdGF0aWMgaW50IHdvcmtfc3RhcnQodm9pZCkKIHsKLQlyZWN2X3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJkbG1fcmVjdiIpOworCXJlY3Zfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkbG1fcmVjdiIsCisJCQkJCSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDEpOwogCWlmICghcmVjdl93b3JrcXVldWUpIHsKIAkJbG9nX3ByaW50KCJjYW4ndCBzdGFydCBkbG1fcmVjdiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzZW5kX3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJkbG1fc2VuZCIpOworCXNlbmRfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkbG1fc2VuZCIsCisJCQkJCSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDEpOwogCWlmICghc2VuZF93b3JrcXVldWUpIHsKIAkJbG9nX3ByaW50KCJjYW4ndCBzdGFydCBkbG1fc2VuZCIpOwogCQlkZXN0cm95X3dvcmtxdWV1ZShyZWN2X3dvcmtxdWV1ZSk7CmRpZmYgLS1naXQgYS9mcy9kbG0vcmNvbS5jIGIvZnMvZGxtL3Jjb20uYwppbmRleCAzYzgzYTQ5Li5mMTBhNTBmIDEwMDY0NAotLS0gYS9mcy9kbG0vcmNvbS5jCisrKyBiL2ZzL2RsbS9yY29tLmMKQEAgLTMyMSw5ICszMjEsOSBAQAogCXJsLT5ybF93YWl0X3R5cGUgPSBjcHVfdG9fbGUxNihsa2ItPmxrYl93YWl0X3R5cGUpOwogCiAJaWYgKGxrYi0+bGtiX2Jhc3RmbikKLQkJcmwtPnJsX2FzdHMgfD0gQVNUX0JBU1Q7CisJCXJsLT5ybF9hc3RzIHw9IERMTV9DQl9CQVNUOwogCWlmIChsa2ItPmxrYl9hc3RmbikKLQkJcmwtPnJsX2FzdHMgfD0gQVNUX0NPTVA7CisJCXJsLT5ybF9hc3RzIHw9IERMTV9DQl9DQVNUOwogCiAJcmwtPnJsX25hbWVsZW4gPSBjcHVfdG9fbGUxNihyLT5yZXNfbGVuZ3RoKTsKIAltZW1jcHkocmwtPnJsX25hbWUsIHItPnJlc19uYW1lLCByLT5yZXNfbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS91c2VyLmMgYi9mcy9kbG0vdXNlci5jCmluZGV4IDY2ZDZjMTYuLmQ1YWIzZmUgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS91c2VyLmMKKysrIGIvZnMvZGxtL3VzZXIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImxvY2suaCIKICNpbmNsdWRlICJsdmJfdGFibGUuaCIKICNpbmNsdWRlICJ1c2VyLmgiCisjaW5jbHVkZSAiYXN0LmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfcHJlZml4W10gPSAiZGxtIjsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldmljZV9mb3BzOwpAQCAtMTUyLDE5ICsxNTMsMTYgQEAKICAgIG5vdCByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBvZiB0aGUgbGtiIHN0cnVjdCB3aGljaCBpcyBtYW5hZ2VkCiAgICBlbnRpcmVseSBieSByZWZjb3VudC4gKi8KIAotc3RhdGljIGludCBsa2JfaXNfZW5kb2ZsaWZlKHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCBzYl9zdGF0dXMsIGludCB0eXBlKQorc3RhdGljIGludCBsa2JfaXNfZW5kb2ZsaWZlKGludCBtb2RlLCBpbnQgc3RhdHVzKQogewotCXN3aXRjaCAoc2Jfc3RhdHVzKSB7CisJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIC1ETE1fRVVOTE9DSzoKIAkJcmV0dXJuIDE7CiAJY2FzZSAtRExNX0VDQU5DRUw6CiAJY2FzZSAtRVRJTUVET1VUOgogCWNhc2UgLUVERUFETEs6Ci0JCWlmIChsa2ItPmxrYl9ncm1vZGUgPT0gRExNX0xPQ0tfSVYpCi0JCQlyZXR1cm4gMTsKLQkJYnJlYWs7CiAJY2FzZSAtRUFHQUlOOgotCQlpZiAodHlwZSA9PSBBU1RfQ09NUCAmJiBsa2ItPmxrYl9ncm1vZGUgPT0gRExNX0xPQ0tfSVYpCisJCWlmIChtb2RlID09IERMTV9MT0NLX0lWKQogCQkJcmV0dXJuIDE7CiAJCWJyZWFrOwogCX0KQEAgLTE3NCwxMiArMTcyLDEzIEBACiAvKiB3ZSBjb3VsZCBwb3NzaWJseSBjaGVjayBpZiB0aGUgY2FuY2VsIG9mIGFuIG9ycGhhbiBoYXMgcmVzdWx0ZWQgaW4gdGhlIGxrYgogICAgYmVpbmcgcmVtb3ZlZCBhbmQgdGhlbiByZW1vdmUgdGhhdCBsa2IgZnJvbSB0aGUgb3JwaGFucyBsaXN0IGFuZCBmcmVlIGl0ICovCiAKLXZvaWQgZGxtX3VzZXJfYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IG1vZGUpCit2b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgdWludDMyX3QgZmxhZ3MsIGludCBtb2RlLAorCQkgICAgICBpbnQgc3RhdHVzLCB1aW50MzJfdCBzYmZsYWdzLCB1aW50NjRfdCBzZXEpCiB7CiAJc3RydWN0IGRsbV9scyAqbHM7CiAJc3RydWN0IGRsbV91c2VyX2FyZ3MgKnVhOwogCXN0cnVjdCBkbG1fdXNlcl9wcm9jICpwcm9jOwotCWludCBlb2wgPSAwLCBhc3RfdHlwZTsKKwlpbnQgcnY7CiAKIAlpZiAobGtiLT5sa2JfZmxhZ3MgJiAoRExNX0lGTF9PUlBIQU4gfCBETE1fSUZMX0RFQUQpKQogCQlyZXR1cm47CkBAIC0yMDAsNDkgKzE5OSwyOSBAQAogCXVhID0gbGtiLT5sa2JfdWE7CiAJcHJvYyA9IHVhLT5wcm9jOwogCi0JaWYgKHR5cGUgPT0gQVNUX0JBU1QgJiYgdWEtPmJhc3RhZGRyID09IE5VTEwpCisJaWYgKChmbGFncyAmIERMTV9DQl9CQVNUKSAmJiB1YS0+YmFzdGFkZHIgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKKwlpZiAoKGZsYWdzICYgRExNX0NCX0NBU1QpICYmIGxrYl9pc19lbmRvZmxpZmUobW9kZSwgc3RhdHVzKSkKKwkJbGtiLT5sa2JfZmxhZ3MgfD0gRExNX0lGTF9FTkRPRkxJRkU7CisKIAlzcGluX2xvY2soJnByb2MtPmFzdHNfc3Bpbik7CiAKLQlhc3RfdHlwZSA9IGxrYi0+bGtiX2FzdF90eXBlOwotCWxrYi0+bGtiX2FzdF90eXBlIHw9IHR5cGU7Ci0JaWYgKHR5cGUgPT0gQVNUX0JBU1QpCi0JCWxrYi0+bGtiX2Jhc3Rtb2RlID0gbW9kZTsKLQllbHNlCi0JCWxrYi0+bGtiX2Nhc3Rtb2RlID0gbW9kZTsKKwlydiA9IGRsbV9hZGRfbGtiX2NhbGxiYWNrKGxrYiwgZmxhZ3MsIG1vZGUsIHN0YXR1cywgc2JmbGFncywgc2VxKTsKKwlpZiAocnYgPCAwKSB7CisJCXNwaW5fdW5sb2NrKCZwcm9jLT5hc3RzX3NwaW4pOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAoIWFzdF90eXBlKSB7CisJaWYgKGxpc3RfZW1wdHkoJmxrYi0+bGtiX2FzdHF1ZXVlKSkgewogCQlrcmVmX2dldCgmbGtiLT5sa2JfcmVmKTsKIAkJbGlzdF9hZGRfdGFpbCgmbGtiLT5sa2JfYXN0cXVldWUsICZwcm9jLT5hc3RzKTsKLQkJbGtiLT5sa2JfYXN0X2ZpcnN0ID0gdHlwZTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcm9jLT53YWl0KTsKIAl9Ci0JaWYgKHR5cGUgPT0gQVNUX0NPTVAgJiYgKGFzdF90eXBlICYgQVNUX0NPTVApKQotCQlsb2dfZGVidWcobHMsICJhc3Qgb3ZlcmxhcCAleCBzdGF0dXMgJXggJXgiLAotCQkJICBsa2ItPmxrYl9pZCwgdWEtPmxrc2Iuc2Jfc3RhdHVzLCBsa2ItPmxrYl9mbGFncyk7Ci0KLQllb2wgPSBsa2JfaXNfZW5kb2ZsaWZlKGxrYiwgdWEtPmxrc2Iuc2Jfc3RhdHVzLCB0eXBlKTsKLQlpZiAoZW9sKSB7Ci0JCWxrYi0+bGtiX2ZsYWdzIHw9IERMTV9JRkxfRU5ET0ZMSUZFOwotCX0KLQotCS8qIFdlIHdhbnQgdG8gY29weSB0aGUgbHZiIHRvIHVzZXJzcGFjZSB3aGVuIHRoZSBjb21wbGV0aW9uCi0JICAgYXN0IGlzIHJlYWQgaWYgdGhlIHN0YXR1cyBpcyAwLCB0aGUgbG9jayBoYXMgYW4gbHZiIGFuZAotCSAgIGx2Yl9vcHMgc2F5cyB3ZSBzaG91bGQuICBXZSBjb3VsZCBwcm9iYWJseSBoYXZlIHNldF9sdmJfbG9jaygpCi0JICAgc2V0IHVwZGF0ZV91c2VyX2x2YiBpbnN0ZWFkIGFuZCBub3QgbmVlZCBvbGRfbW9kZSAqLwotCi0JaWYgKChsa2ItPmxrYl9hc3RfdHlwZSAmIEFTVF9DT01QKSAmJgotCSAgICAobGtiLT5sa2JfbGtzYi0+c2Jfc3RhdHVzID09IDApICYmCi0JICAgIGxrYi0+bGtiX2xrc2ItPnNiX2x2YnB0ciAmJgotCSAgICBkbG1fbHZiX29wZXJhdGlvbnNbdWEtPm9sZF9tb2RlICsgMV1bbGtiLT5sa2JfZ3Jtb2RlICsgMV0pCi0JCXVhLT51cGRhdGVfdXNlcl9sdmIgPSAxOwotCWVsc2UKLQkJdWEtPnVwZGF0ZV91c2VyX2x2YiA9IDA7Ci0KIAlzcGluX3VubG9jaygmcHJvYy0+YXN0c19zcGluKTsKIAotCWlmIChlb2wpIHsKKwlpZiAobGtiLT5sa2JfZmxhZ3MgJiBETE1fSUZMX0VORE9GTElGRSkgeworCQkvKiBOLkIuIHNwaW5fbG9jayBsb2Nrc19zcGluLCBub3QgYXN0c19zcGluICovCiAJCXNwaW5fbG9jaygmcHJvYy0+bG9ja3Nfc3Bpbik7CiAJCWlmICghbGlzdF9lbXB0eSgmbGtiLT5sa2Jfb3ducXVldWUpKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZsa2ItPmxrYl9vd25xdWV1ZSk7CkBAIC03MDUsOCArNjg0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3B5X3Jlc3VsdF90b191c2VyKHN0cnVjdCBkbG1fdXNlcl9hcmdzICp1YSwgaW50IGNvbXBhdCwgaW50IHR5cGUsCi0JCQkgICAgICAgaW50IG1vZGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgY29weV9yZXN1bHRfdG9fdXNlcihzdHJ1Y3QgZGxtX3VzZXJfYXJncyAqdWEsIGludCBjb21wYXQsCisJCQkgICAgICAgdWludDMyX3QgZmxhZ3MsIGludCBtb2RlLCBpbnQgY29weV9sdmIsCisJCQkgICAgICAgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogI2lmZGVmIENPTkZJR19DT01QQVQKIAlzdHJ1Y3QgZGxtX2xvY2tfcmVzdWx0MzIgcmVzdWx0MzI7CkBAIC03MzAsNyArNzEwLDcgQEAKIAkgICBub3RlcyB0aGF0IGEgbmV3IGJsb2NraW5nIEFTVCBhZGRyZXNzIGFuZCBwYXJhbWV0ZXIgYXJlIHNldCBldmVuIGlmCiAJICAgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHNvIG1heWJlIHdlIHNob3VsZCBqdXN0IGRvIHRoYXQuICovCiAKLQlpZiAodHlwZSA9PSBBU1RfQkFTVCkgeworCWlmIChmbGFncyAmIERMTV9DQl9CQVNUKSB7CiAJCXJlc3VsdC51c2VyX2FzdGFkZHIgPSB1YS0+YmFzdGFkZHI7CiAJCXJlc3VsdC51c2VyX2FzdHBhcmFtID0gdWEtPmJhc3RwYXJhbTsKIAkJcmVzdWx0LmJhc3RfbW9kZSA9IG1vZGU7CkBAIC03NTAsOCArNzMwLDcgQEAKIAkvKiBjb3B5IGx2YiB0byB1c2Vyc3BhY2UgaWYgdGhlcmUgaXMgb25lLCBpdCdzIGJlZW4gdXBkYXRlZCwgYW5kCiAJICAgdGhlIHVzZXIgYnVmZmVyIGhhcyBzcGFjZSBmb3IgaXQgKi8KIAotCWlmICh1YS0+dXBkYXRlX3VzZXJfbHZiICYmIHVhLT5sa3NiLnNiX2x2YnB0ciAmJgotCSAgICBjb3VudCA+PSBsZW4gKyBETE1fVVNFUl9MVkJfTEVOKSB7CisJaWYgKGNvcHlfbHZiICYmIHVhLT5sa3NiLnNiX2x2YnB0ciAmJiBjb3VudCA+PSBsZW4gKyBETE1fVVNFUl9MVkJfTEVOKSB7CiAJCWlmIChjb3B5X3RvX3VzZXIoYnVmK2xlbiwgdWEtPmxrc2Iuc2JfbHZicHRyLAogCQkJCSBETE1fVVNFUl9MVkJfTEVOKSkgewogCQkJZXJyb3IgPSAtRUZBVUxUOwpAQCAtODAxLDEzICs3ODAsMTIgQEAKIAlzdHJ1Y3QgZGxtX3VzZXJfcHJvYyAqcHJvYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGxtX2xrYiAqbGtiOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCWludCBlcnJvciA9IDAsIHJlbW92ZWQ7Ci0JaW50IHJldF90eXBlLCByZXRfbW9kZTsKLQlpbnQgYmFzdG1vZGUsIGNhc3Rtb2RlLCBkb19iYXN0LCBkb19jYXN0OworCXN0cnVjdCBkbG1fY2FsbGJhY2sgY2I7CisJaW50IHJ2LCByZXNpZCwgY29weV9sdmIgPSAwOwogCiAJaWYgKGNvdW50ID09IHNpemVvZihzdHJ1Y3QgZGxtX2RldmljZV92ZXJzaW9uKSkgewotCQllcnJvciA9IGNvcHlfdmVyc2lvbl90b191c2VyKGJ1ZiwgY291bnQpOwotCQlyZXR1cm4gZXJyb3I7CisJCXJ2ID0gY29weV92ZXJzaW9uX3RvX3VzZXIoYnVmLCBjb3VudCk7CisJCXJldHVybiBydjsKIAl9CiAKIAlpZiAoIXByb2MpIHsKQEAgLTg1NCw5MiArODMyLDU3IEBACiAJCX0KIAl9CiAKLQkvKiB0aGVyZSBtYXkgYmUgYm90aCBjb21wbGV0aW9uIGFuZCBibG9ja2luZyBhc3RzIHRvIHJldHVybiBmb3IKLQkgICB0aGUgbGtiLCBkb24ndCByZW1vdmUgbGtiIGZyb20gYXN0cyBsaXN0IHVubGVzcyBubyBhc3RzIHJlbWFpbiAqLworCS8qIGlmIHdlIGVtcHR5IGxrYl9jYWxsYmFja3MsIHdlIGRvbid0IHdhbnQgdG8gdW5sb2NrIHRoZSBzcGlubG9jaworCSAgIHdpdGhvdXQgcmVtb3ZpbmcgbGtiX2FzdHF1ZXVlOyBzbyBlbXB0eSBsa2JfYXN0cXVldWUgaXMgYWx3YXlzCisJICAgY29uc2lzdGVudCB3aXRoIGVtcHR5IGxrYl9jYWxsYmFja3MgKi8KIAogCWxrYiA9IGxpc3RfZW50cnkocHJvYy0+YXN0cy5uZXh0LCBzdHJ1Y3QgZGxtX2xrYiwgbGtiX2FzdHF1ZXVlKTsKIAotCXJlbW92ZWQgPSAwOwotCXJldF90eXBlID0gMDsKLQlyZXRfbW9kZSA9IDA7Ci0JZG9fYmFzdCA9IGxrYi0+bGtiX2FzdF90eXBlICYgQVNUX0JBU1Q7Ci0JZG9fY2FzdCA9IGxrYi0+bGtiX2FzdF90eXBlICYgQVNUX0NPTVA7Ci0JYmFzdG1vZGUgPSBsa2ItPmxrYl9iYXN0bW9kZTsKLQljYXN0bW9kZSA9IGxrYi0+bGtiX2Nhc3Rtb2RlOwotCi0JLyogd2hlbiBib3RoIGFyZSBxdWV1ZWQgZmlndXJlIG91dCB3aGljaCB0byBkbyBmaXJzdCBhbmQKLQkgICBzd2l0Y2ggZmlyc3Qgc28gdGhlIG90aGVyIGdvZXMgaW4gdGhlIG5leHQgcmVhZCAqLwotCi0JaWYgKGRvX2Nhc3QgJiYgZG9fYmFzdCkgewotCQlpZiAobGtiLT5sa2JfYXN0X2ZpcnN0ID09IEFTVF9DT01QKSB7Ci0JCQlyZXRfdHlwZSA9IEFTVF9DT01QOwotCQkJcmV0X21vZGUgPSBjYXN0bW9kZTsKLQkJCWxrYi0+bGtiX2FzdF90eXBlICY9IH5BU1RfQ09NUDsKLQkJCWxrYi0+bGtiX2FzdF9maXJzdCA9IEFTVF9CQVNUOwotCQl9IGVsc2UgewotCQkJcmV0X3R5cGUgPSBBU1RfQkFTVDsKLQkJCXJldF9tb2RlID0gYmFzdG1vZGU7Ci0JCQlsa2ItPmxrYl9hc3RfdHlwZSAmPSB+QVNUX0JBU1Q7Ci0JCQlsa2ItPmxrYl9hc3RfZmlyc3QgPSBBU1RfQ09NUDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJldF90eXBlID0gbGtiLT5sa2JfYXN0X2ZpcnN0OwotCQlyZXRfbW9kZSA9IChyZXRfdHlwZSA9PSBBU1RfQ09NUCkgPyBjYXN0bW9kZSA6IGJhc3Rtb2RlOwotCQlsa2ItPmxrYl9hc3RfdHlwZSAmPSB+cmV0X3R5cGU7Ci0JCWxrYi0+bGtiX2FzdF9maXJzdCA9IDA7CisJcnYgPSBkbG1fcmVtX2xrYl9jYWxsYmFjayhsa2ItPmxrYl9yZXNvdXJjZS0+cmVzX2xzLCBsa2IsICZjYiwgJnJlc2lkKTsKKwlpZiAocnYgPCAwKSB7CisJCS8qIHRoaXMgc2hvdWxkbid0IGhhcHBlbjsgbGtiIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tCisJCSAgIGxpc3Qgd2hlbiByZXNpZCB3YXMgemVybyAqLworCQlsb2dfcHJpbnQoImRsbV9yZW1fbGtiX2NhbGxiYWNrIGVtcHR5ICV4IiwgbGtiLT5sa2JfaWQpOworCQlsaXN0X2RlbF9pbml0KCZsa2ItPmxrYl9hc3RxdWV1ZSk7CisJCXNwaW5fdW5sb2NrKCZwcm9jLT5hc3RzX3NwaW4pOworCQkvKiByZW1vdmVzIHJlZiBmb3IgcHJvYy0+YXN0cywgbWF5IGNhdXNlIGxrYiB0byBiZSBmcmVlZCAqLworCQlkbG1fcHV0X2xrYihsa2IpOworCQlnb3RvIHRyeV9hbm90aGVyOwogCX0KLQotCS8qIGlmIHdlJ3JlIGRvaW5nIGEgYmFzdCBidXQgdGhlIGJhc3QgaXMgdW5uZWNlc3NhcnksIHRoZW4KLQkgICBzd2l0Y2ggdG8gZG8gbm90aGluZyBvciBkbyBhIGNhc3QgaWYgdGhhdCB3YXMgbmVlZGVkIG5leHQgKi8KLQotCWlmICgocmV0X3R5cGUgPT0gQVNUX0JBU1QpICYmCi0JICAgIGRsbV9tb2Rlc19jb21wYXQoYmFzdG1vZGUsIGxrYi0+bGtiX2Nhc3Rtb2RlX2RvbmUpKSB7Ci0JCXJldF90eXBlID0gMDsKLQkJcmV0X21vZGUgPSAwOwotCi0JCWlmIChkb19jYXN0KSB7Ci0JCQlyZXRfdHlwZSA9IEFTVF9DT01QOwotCQkJcmV0X21vZGUgPSBjYXN0bW9kZTsKLQkJCWxrYi0+bGtiX2FzdF90eXBlICY9IH5BU1RfQ09NUDsKLQkJCWxrYi0+bGtiX2FzdF9maXJzdCA9IDA7Ci0JCX0KLQl9Ci0KLQlpZiAobGtiLT5sa2JfYXN0X2ZpcnN0ICE9IGxrYi0+bGtiX2FzdF90eXBlKSB7Ci0JCWxvZ19wcmludCgiZGV2aWNlX3JlYWQgJXggYXN0X2ZpcnN0ICV4IGFzdF90eXBlICV4IiwKLQkJCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX2FzdF9maXJzdCwgbGtiLT5sa2JfYXN0X3R5cGUpOwotCX0KLQotCWlmICghbGtiLT5sa2JfYXN0X3R5cGUpIHsKLQkJbGlzdF9kZWwoJmxrYi0+bGtiX2FzdHF1ZXVlKTsKLQkJcmVtb3ZlZCA9IDE7Ci0JfQorCWlmICghcmVzaWQpCisJCWxpc3RfZGVsX2luaXQoJmxrYi0+bGtiX2FzdHF1ZXVlKTsKIAlzcGluX3VubG9jaygmcHJvYy0+YXN0c19zcGluKTsKIAotCWlmIChyZXRfdHlwZSkgewotCQllcnJvciA9IGNvcHlfcmVzdWx0X3RvX3VzZXIobGtiLT5sa2JfdWEsCi0JCQkJdGVzdF9iaXQoRExNX1BST0NfRkxBR1NfQ09NUEFULCAmcHJvYy0+ZmxhZ3MpLAotCQkJCXJldF90eXBlLCByZXRfbW9kZSwgYnVmLCBjb3VudCk7Ci0KLQkJaWYgKHJldF90eXBlID09IEFTVF9DT01QKQotCQkJbGtiLT5sa2JfY2FzdG1vZGVfZG9uZSA9IGNhc3Rtb2RlOwotCQlpZiAocmV0X3R5cGUgPT0gQVNUX0JBU1QpCi0JCQlsa2ItPmxrYl9iYXN0bW9kZV9kb25lID0gYmFzdG1vZGU7CisJaWYgKGNiLmZsYWdzICYgRExNX0NCX1NLSVApIHsKKwkJLyogcmVtb3ZlcyByZWYgZm9yIHByb2MtPmFzdHMsIG1heSBjYXVzZSBsa2IgdG8gYmUgZnJlZWQgKi8KKwkJaWYgKCFyZXNpZCkKKwkJCWRsbV9wdXRfbGtiKGxrYik7CisJCWdvdG8gdHJ5X2Fub3RoZXI7CiAJfQogCi0JLyogcmVtb3ZlcyByZWZlcmVuY2UgZm9yIHRoZSBwcm9jLT5hc3RzIGxpc3RzIGFkZGVkIGJ5Ci0JICAgZGxtX3VzZXJfYWRkX2FzdCgpIGFuZCBtYXkgcmVzdWx0IGluIHRoZSBsa2IgYmVpbmcgZnJlZWQgKi8KKwlpZiAoY2IuZmxhZ3MgJiBETE1fQ0JfQ0FTVCkgeworCQlpbnQgb2xkX21vZGUsIG5ld19tb2RlOwogCi0JaWYgKHJlbW92ZWQpCisJCW9sZF9tb2RlID0gbGtiLT5sa2JfbGFzdF9jYXN0Lm1vZGU7CisJCW5ld19tb2RlID0gY2IubW9kZTsKKworCQlpZiAoIWNiLnNiX3N0YXR1cyAmJiBsa2ItPmxrYl9sa3NiLT5zYl9sdmJwdHIgJiYKKwkJICAgIGRsbV9sdmJfb3BlcmF0aW9uc1tvbGRfbW9kZSArIDFdW25ld19tb2RlICsgMV0pCisJCQljb3B5X2x2YiA9IDE7CisKKwkJbGtiLT5sa2JfbGtzYi0+c2Jfc3RhdHVzID0gY2Iuc2Jfc3RhdHVzOworCQlsa2ItPmxrYl9sa3NiLT5zYl9mbGFncyA9IGNiLnNiX2ZsYWdzOworCX0KKworCXJ2ID0gY29weV9yZXN1bHRfdG9fdXNlcihsa2ItPmxrYl91YSwKKwkJCQkgdGVzdF9iaXQoRExNX1BST0NfRkxBR1NfQ09NUEFULCAmcHJvYy0+ZmxhZ3MpLAorCQkJCSBjYi5mbGFncywgY2IubW9kZSwgY29weV9sdmIsIGJ1ZiwgY291bnQpOworCisJLyogcmVtb3ZlcyByZWYgZm9yIHByb2MtPmFzdHMsIG1heSBjYXVzZSBsa2IgdG8gYmUgZnJlZWQgKi8KKwlpZiAoIXJlc2lkKQogCQlkbG1fcHV0X2xrYihsa2IpOwogCi0JLyogdGhlIGJhc3QgdGhhdCB3YXMgcXVldWVkIHdhcyBlbGltaW5hdGVkIChzZWUgdW5uZWNlc3NhcnkgYWJvdmUpLAotCSAgIGxlYXZpbmcgbm90aGluZyB0byByZXR1cm4gKi8KLQotCWlmICghcmV0X3R5cGUpCi0JCWdvdG8gdHJ5X2Fub3RoZXI7Ci0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRldmljZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQpkaWZmIC0tZ2l0IGEvZnMvZGxtL3VzZXIuaCBiL2ZzL2RsbS91c2VyLmgKaW5kZXggZjE5NjA5MS4uMDA0OTlhYiAxMDA2NDQKLS0tIGEvZnMvZGxtL3VzZXIuaAorKysgYi9mcy9kbG0vdXNlci5oCkBAIC05LDcgKzksOCBAQAogI2lmbmRlZiBfX1VTRVJfRE9UX0hfXwogI2RlZmluZSBfX1VTRVJfRE9UX0hfXwogCi12b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKTsKK3ZvaWQgZGxtX3VzZXJfYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCB1aW50MzJfdCBmbGFncywgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cywgdWludDMyX3Qgc2JmbGFncywgdWludDY0X3Qgc2VxKTsKIGludCBkbG1fdXNlcl9pbml0KHZvaWQpOwogdm9pZCBkbG1fdXNlcl9leGl0KHZvaWQpOwogaW50IGRsbV9kZXZpY2VfZGVyZWdpc3RlcihzdHJ1Y3QgZGxtX2xzICpscyk7CmRpZmYgLS1naXQgYS9mcy9kcm9wX2NhY2hlcy5jIGIvZnMvZHJvcF9jYWNoZXMuYwppbmRleCAyMTk1YzIxLi44MTZmODhlIDEwMDY0NAotLS0gYS9mcy9kcm9wX2NhY2hlcy5jCisrKyBiL2ZzL2Ryb3BfY2FjaGVzLmMKQEAgLTQ1LDcgKzQ1LDExIEBACiBpbnQgZHJvcF9jYWNoZXNfc3lzY3RsX2hhbmRsZXIoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCXZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CisJaW50IHJldDsKKworCXJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAJaWYgKHdyaXRlKSB7CiAJCWlmIChzeXNjdGxfZHJvcF9jYWNoZXMgJiAxKQogCQkJaXRlcmF0ZV9zdXBlcnMoZHJvcF9wYWdlY2FjaGVfc2IsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCA0YTA5YWY5Li5lZDM4ODAxIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNjIsNyArNjIsNyBAQAogICogVGhpcyBtdXRleCBpcyBhY3F1aXJlZCBieSBlcF9mcmVlKCkgZHVyaW5nIHRoZSBlcG9sbCBmaWxlCiAgKiBjbGVhbnVwIHBhdGggYW5kIGl0IGlzIGFsc28gYWNxdWlyZWQgYnkgZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpCiAgKiBpZiBhIGZpbGUgaGFzIGJlZW4gcHVzaGVkIGluc2lkZSBhbiBlcG9sbCBzZXQgYW5kIGl0IGlzIHRoZW4KLSAqIGNsb3NlKClkIHdpdGhvdXQgYSBwcmV2aW91cyBjYWxsIHRvZXBvbGxfY3RsKEVQT0xMX0NUTF9ERUwpLgorICogY2xvc2UoKWQgd2l0aG91dCBhIHByZXZpb3VzIGNhbGwgdG8gZXBvbGxfY3RsKEVQT0xMX0NUTF9ERUwpLgogICogSXQgaXMgYWxzbyBhY3F1aXJlZCB3aGVuIGluc2VydGluZyBhbiBlcG9sbCBmZCBvbnRvIGFub3RoZXIgZXBvbGwKICAqIGZkLiBXZSBkbyB0aGlzIHNvIHRoYXQgd2Ugd2FsayB0aGUgZXBvbGwgdHJlZSBhbmQgZW5zdXJlIHRoYXQgdGhpcwogICogaW5zZXJ0aW9uIGRvZXMgbm90IGNyZWF0ZSBhIGN5Y2xlIG9mIGVwb2xsIGZpbGUgZGVzY3JpcHRvcnMsIHdoaWNoCkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgc3RvcmVkIGluc2lkZSB0aGUgInByaXZhdGVfZGF0YSIgbWVtYmVyIG9mIHRoZSBmaWxlCi0gKiBzdHJ1Y3R1cmUgYW5kIHJhcHJlc2VudCB0aGUgbWFpbiBkYXRhIHNydWN0dXJlIGZvciB0aGUgZXZlbnRwb2xsCisgKiBzdHJ1Y3R1cmUgYW5kIHJlcHJlc2VudHMgdGhlIG1haW4gZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBldmVudHBvbGwKICAqIGludGVyZmFjZS4KICAqLwogc3RydWN0IGV2ZW50cG9sbCB7Ci0JLyogUHJvdGVjdCB0aGUgdGhpcyBzdHJ1Y3R1cmUgYWNjZXNzICovCisJLyogUHJvdGVjdCB0aGUgYWNjZXNzIHRvIHRoaXMgc3RydWN0dXJlICovCiAJc3BpbmxvY2tfdCBsb2NrOwogCiAJLyoKQEAgLTMxNiw2ICszMTYsMTkgQEAKIH0KIAogLyoqCisgKiBlcF9ldmVudHNfYXZhaWxhYmxlIC0gQ2hlY2tzIGlmIHJlYWR5IGV2ZW50cyBtaWdodCBiZSBhdmFpbGFibGUuCisgKgorICogQGVwOiBQb2ludGVyIHRvIHRoZSBldmVudHBvbGwgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiBSZXR1cm5zIGEgdmFsdWUgZGlmZmVyZW50IHRoYW4gemVybyBpZiByZWFkeSBldmVudHMgYXJlIGF2YWlsYWJsZSwKKyAqICAgICAgICAgIG9yIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBlcF9ldmVudHNfYXZhaWxhYmxlKHN0cnVjdCBldmVudHBvbGwgKmVwKQoreworCXJldHVybiAhbGlzdF9lbXB0eSgmZXAtPnJkbGxpc3QpIHx8IGVwLT5vdmZsaXN0ICE9IEVQX1VOQUNUSVZFX1BUUjsKK30KKworLyoqCiAgKiBlcF9jYWxsX25lc3RlZCAtIFBlcmZvcm0gYSBib3VuZCAocG9zc2libHkpIG5lc3RlZCBjYWxsLCBieSBjaGVja2luZwogICogICAgICAgICAgICAgICAgICB0aGF0IHRoZSByZWN1cnNpb24gbGltaXQgaXMgbm90IGV4Y2VlZGVkLCBhbmQgdGhhdAogICogICAgICAgICAgICAgICAgICB0aGUgc2FtZSBuZXN0ZWQgY2FsbCAoYnkgdGhlIG1lYW5pbmcgb2Ygc2FtZSBjb29raWUpIGlzCkBAIC03OTMsNyArODA2LDcgQEAKIAogLyoKICAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB3YWl0IHF1ZXVlIHdha2V1cAotICogbWFjaGFuaXNtLiBJdCBpcyBjYWxsZWQgYnkgdGhlIHN0b3JlZCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gdGhleQorICogbWVjaGFuaXNtLiBJdCBpcyBjYWxsZWQgYnkgdGhlIHN0b3JlZCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gdGhleQogICogaGF2ZSBldmVudHMgdG8gcmVwb3J0LgogICovCiBzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KQpAQCAtODI0LDkgKzgzNyw5IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qCi0JICogSWYgd2UgYXJlIHRyYXNmZXJpbmcgZXZlbnRzIHRvIHVzZXJzcGFjZSwgd2UgY2FuIGhvbGQgbm8gbG9ja3MKKwkgKiBJZiB3ZSBhcmUgdHJhbnNmZXJyaW5nIGV2ZW50cyB0byB1c2Vyc3BhY2UsIHdlIGNhbiBob2xkIG5vIGxvY2tzCiAJICogKGJlY2F1c2Ugd2UncmUgYWNjZXNzaW5nIHVzZXIgbWVtb3J5LCBhbmQgYmVjYXVzZSBvZiBsaW51eCBmX29wLT5wb2xsKCkKLQkgKiBzZW1hbnRpY3MpLiBBbGwgdGhlIGV2ZW50cyB0aGF0IGhhcHBlbnMgZHVyaW5nIHRoYXQgcGVyaW9kIG9mIHRpbWUgYXJlCisJICogc2VtYW50aWNzKS4gQWxsIHRoZSBldmVudHMgdGhhdCBoYXBwZW4gZHVyaW5nIHRoYXQgcGVyaW9kIG9mIHRpbWUgYXJlCiAJICogY2hhaW5lZCBpbiBlcC0+b3ZmbGlzdCBhbmQgcmVxdWV1ZWQgbGF0ZXIgb24uCiAJICovCiAJaWYgKHVubGlrZWx5KGVwLT5vdmZsaXN0ICE9IEVQX1VOQUNUSVZFX1BUUikpIHsKQEAgLTExMzUsMTIgKzExNDgsMjkgQEAKIAlyZXR1cm4gdGltZXNwZWNfYWRkX3NhZmUobm93LCB0cyk7CiB9CiAKKy8qKgorICogZXBfcG9sbCAtIFJldHJpZXZlcyByZWFkeSBldmVudHMsIGFuZCBkZWxpdmVycyB0aGVtIHRvIHRoZSBjYWxsZXIgc3VwcGxpZWQKKyAqICAgICAgICAgICBldmVudCBidWZmZXIuCisgKgorICogQGVwOiBQb2ludGVyIHRvIHRoZSBldmVudHBvbGwgY29udGV4dC4KKyAqIEBldmVudHM6IFBvaW50ZXIgdG8gdGhlIHVzZXJzcGFjZSBidWZmZXIgd2hlcmUgdGhlIHJlYWR5IGV2ZW50cyBzaG91bGQgYmUKKyAqICAgICAgICAgIHN0b3JlZC4KKyAqIEBtYXhldmVudHM6IFNpemUgKGluIHRlcm1zIG9mIG51bWJlciBvZiBldmVudHMpIG9mIHRoZSBjYWxsZXIgZXZlbnQgYnVmZmVyLgorICogQHRpbWVvdXQ6IE1heGltdW0gdGltZW91dCBmb3IgdGhlIHJlYWR5IGV2ZW50cyBmZXRjaCBvcGVyYXRpb24sIGluCisgKiAgICAgICAgICAgbWlsbGlzZWNvbmRzLiBJZiB0aGUgQHRpbWVvdXQgaXMgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IGJsb2NrLAorICogICAgICAgICAgIHdoaWxlIGlmIHRoZSBAdGltZW91dCBpcyBsZXNzIHRoYW4gemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgYmxvY2sKKyAqICAgICAgICAgICB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgaGFzIGJlZW4gcmV0cmlldmVkIChvciBhbiBlcnJvcgorICogICAgICAgICAgIG9jY3VycmVkKS4KKyAqCisgKiBSZXR1cm5zOiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVhZHkgZXZlbnRzIHdoaWNoIGhhdmUgYmVlbiBmZXRjaGVkLCBvciBhbgorICogICAgICAgICAgZXJyb3IgY29kZSwgaW4gY2FzZSBvZiBlcnJvci4KKyAqLwogc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCiAJCSAgIGludCBtYXhldmVudHMsIGxvbmcgdGltZW91dCkKIHsKLQlpbnQgcmVzLCBlYXZhaWwsIHRpbWVkX291dCA9IDA7CisJaW50IHJlcyA9IDAsIGVhdmFpbCwgdGltZWRfb3V0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgc2xhY2s7CisJbG9uZyBzbGFjayA9IDA7CiAJd2FpdF9xdWV1ZV90IHdhaXQ7CiAJa3RpbWVfdCBleHBpcmVzLCAqdG8gPSBOVUxMOwogCkBAIC0xMTUxLDE0ICsxMTgxLDE5IEBACiAJCXRvID0gJmV4cGlyZXM7CiAJCSp0byA9IHRpbWVzcGVjX3RvX2t0aW1lKGVuZF90aW1lKTsKIAl9IGVsc2UgaWYgKHRpbWVvdXQgPT0gMCkgeworCQkvKgorCQkgKiBBdm9pZCB0aGUgdW5uZWNlc3NhcnkgdHJpcCB0byB0aGUgd2FpdCBxdWV1ZSBsb29wLCBpZiB0aGUKKwkJICogY2FsbGVyIHNwZWNpZmllZCBhIG5vbiBibG9ja2luZyBvcGVyYXRpb24uCisJCSAqLwogCQl0aW1lZF9vdXQgPSAxOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwkJZ290byBjaGVja19ldmVudHM7CiAJfQogCi1yZXRyeToKK2ZldGNoX2V2ZW50czoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAotCXJlcyA9IDA7Ci0JaWYgKGxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KSkgeworCWlmICghZXBfZXZlbnRzX2F2YWlsYWJsZShlcCkpIHsKIAkJLyoKIAkJICogV2UgZG9uJ3QgaGF2ZSBhbnkgYXZhaWxhYmxlIGV2ZW50IHRvIHJldHVybiB0byB0aGUgY2FsbGVyLgogCQkgKiBXZSBuZWVkIHRvIHNsZWVwIGhlcmUsIGFuZCB3ZSB3aWxsIGJlIHdha2UgdXAgYnkKQEAgLTExNzQsNyArMTIwOSw3IEBACiAJCQkgKiB0byBUQVNLX0lOVEVSUlVQVElCTEUgYmVmb3JlIGRvaW5nIHRoZSBjaGVja3MuCiAJCQkgKi8KIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KSB8fCB0aW1lZF9vdXQpCisJCQlpZiAoZXBfZXZlbnRzX2F2YWlsYWJsZShlcCkgfHwgdGltZWRfb3V0KQogCQkJCWJyZWFrOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQkJcmVzID0gLUVJTlRSOwpAQCAtMTE5MSw4ICsxMjI2LDkgQEAKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCX0KK2NoZWNrX2V2ZW50czoKIAkvKiBJcyBpdCB3b3J0aCB0byB0cnkgdG8gZGlnIGZvciBldmVudHMgPyAqLwotCWVhdmFpbCA9ICFsaXN0X2VtcHR5KCZlcC0+cmRsbGlzdCkgfHwgZXAtPm92Zmxpc3QgIT0gRVBfVU5BQ1RJVkVfUFRSOworCWVhdmFpbCA9IGVwX2V2ZW50c19hdmFpbGFibGUoZXApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTIwMyw3ICsxMjM5LDcgQEAKIAkgKi8KIAlpZiAoIXJlcyAmJiBlYXZhaWwgJiYKIAkgICAgIShyZXMgPSBlcF9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpKSAmJiAhdGltZWRfb3V0KQotCQlnb3RvIHJldHJ5OworCQlnb3RvIGZldGNoX2V2ZW50czsKIAogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggYmE5OWUxYS4uNWU2MmQyNiAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMTg3NSw3ICsxODc1LDcgQEAKIAogCiAvKgotICogdWhtX3BpcGVfc2V0dXAKKyAqIHVtaF9waXBlX3NldHVwCiAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gY3VzdG9taXplIHRoZSBwcm9jZXNzIHVzZWQKICAqIHRvIGNvbGxlY3QgdGhlIGNvcmUgaW4gdXNlcnNwYWNlLiAgU3BlY2lmaWNhbGx5CiAgKiBpdCBzZXRzIHVwIGEgcGlwZSBhbmQgaW5zdGFsbHMgaXQgYXMgZmQgMCAoc3RkaW4pCmRpZmYgLS1naXQgYS9mcy9leHQyL2FjbC5jIGIvZnMvZXh0Mi9hY2wuYwppbmRleCA3YjQxODA1Li5hYmVhNWExIDEwMDY0NAotLS0gYS9mcy9leHQyL2FjbC5jCisrKyBiL2ZzL2V4dDIvYWNsLmMKQEAgLTQwNiw3ICs0MDYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIXRlc3Rfb3B0KGRlbnRyeS0+ZF9zYiwgUE9TSVhfQUNMKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICghaXNfb3duZXJfb3JfY2FwKGRlbnRyeS0+ZF9pbm9kZSkpCisJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGRlbnRyeS0+ZF9pbm9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAodmFsdWUpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmgKaW5kZXggMWI0OGMzMy4uNjQ1YmU5ZSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9leHQyLmgKKysrIGIvZnMvZXh0Mi9leHQyLmgKQEAgLTE3NCwzICsxNzQsOSBAQAogCXJldHVybiBncm91cF9ubyAqIChleHQyX2ZzYmxrX3QpRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKSArCiAJCWxlMzJfdG9fY3B1KEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOwogfQorCisjZGVmaW5lIGV4dDJfc2V0X2JpdAlfX3Rlc3RfYW5kX3NldF9iaXRfbGUKKyNkZWZpbmUgZXh0Ml9jbGVhcl9iaXQJX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUKKyNkZWZpbmUgZXh0Ml90ZXN0X2JpdAl0ZXN0X2JpdF9sZQorI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQJZmluZF9maXJzdF96ZXJvX2JpdF9sZQorI2RlZmluZSBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdAkJZmluZF9uZXh0X3plcm9fYml0X2xlCmRpZmYgLS1naXQgYS9mcy9leHQyL2lvY3RsLmMgYi9mcy9leHQyL2lvY3RsLmMKaW5kZXggZTc0MzEzMC4uZjgxZTI1MCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pb2N0bC5jCisrKyBiL2ZzL2V4dDIvaW9jdGwuYwpAQCAtMzksNyArMzksNyBAQAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpIHsKKwkJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkgewogCQkJcmV0ID0gLUVBQ0NFUzsKIAkJCWdvdG8gc2V0ZmxhZ3Nfb3V0OwogCQl9CkBAIC04OSw3ICs4OSw3IEBACiAJY2FzZSBFWFQyX0lPQ19HRVRWRVJTSU9OOgogCQlyZXR1cm4gcHV0X3VzZXIoaW5vZGUtPmlfZ2VuZXJhdGlvbiwgKGludCBfX3VzZXIgKikgYXJnKTsKIAljYXNlIEVYVDJfSU9DX1NFVFZFUlNJT046Ci0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJCXJldHVybiAtRVBFUk07CiAJCXJldCA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwogCQlpZiAocmV0KQpAQCAtMTE1LDcgKzExNSw3IEBACiAJCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFJFU0VSVkFUSU9OKSB8fCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQkJcmV0dXJuIC1FTk9UVFk7CiAKLQkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCQlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAKIAkJaWYgKGdldF91c2VyKHJzdl93aW5kb3dfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKQpkaWZmIC0tZ2l0IGEvZnMvZXh0My9hY2wuYyBiL2ZzL2V4dDMvYWNsLmMKaW5kZXggZTRmYTQ5ZS4uOWQwMjFjMCAxMDA2NDQKLS0tIGEvZnMvZXh0My9hY2wuYworKysgYi9mcy9leHQzL2FjbC5jCkBAIC00MzUsNyArNDM1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgUE9TSVhfQUNMKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHZhbHVlKSB7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lvY3RsLmMgYi9mcy9leHQzL2lvY3RsLmMKaW5kZXggZmMwODBkZC4uZjQwOTBiZCAxMDA2NDQKLS0tIGEvZnMvZXh0My9pb2N0bC5jCisrKyBiL2ZzL2V4dDMvaW9jdGwuYwpAQCAtMzgsNyArMzgsNyBAQAogCQl1bnNpZ25lZCBpbnQgb2xkZmxhZ3M7CiAJCXVuc2lnbmVkIGludCBqZmxhZzsKIAotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAogCQlpZiAoZ2V0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopIGFyZykpCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJX191MzIgZ2VuZXJhdGlvbjsKIAkJaW50IGVycjsKIAotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCiAJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkgeworCQlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKSB7CiAJCQllcnIgPSAtRUFDQ0VTOwogCQkJZ290byBzZXRyc3Zzel9vdXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYWNsLmMgYi9mcy9leHQ0L2FjbC5jCmluZGV4IGUwMjcwZDEuLjIxZWFjZDcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYWNsLmMKKysrIGIvZnMvZXh0NC9hY2wuYwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh2YWx1ZSkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCAzYWEwYjcyLi40ZGFhZjJiIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAorKysgYi9mcy9leHQ0L2V4dDQuaApAQCAtOTIzLDE0ICs5MjMsMTQgQEAKICNkZWZpbmUgdGVzdF9vcHQyKHNiLCBvcHQpCQkoRVhUNF9TQihzYiktPnNfbW91bnRfb3B0MiAmIFwKIAkJCQkJIEVYVDRfTU9VTlQyXyMjb3B0KQogCi0jZGVmaW5lIGV4dDRfc2V0X2JpdAkJCWV4dDJfc2V0X2JpdAorI2RlZmluZSBleHQ0X3NldF9iaXQJCQlfX3Rlc3RfYW5kX3NldF9iaXRfbGUKICNkZWZpbmUgZXh0NF9zZXRfYml0X2F0b21pYwkJZXh0Ml9zZXRfYml0X2F0b21pYwotI2RlZmluZSBleHQ0X2NsZWFyX2JpdAkJCWV4dDJfY2xlYXJfYml0CisjZGVmaW5lIGV4dDRfY2xlYXJfYml0CQkJX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUKICNkZWZpbmUgZXh0NF9jbGVhcl9iaXRfYXRvbWljCQlleHQyX2NsZWFyX2JpdF9hdG9taWMKLSNkZWZpbmUgZXh0NF90ZXN0X2JpdAkJCWV4dDJfdGVzdF9iaXQKLSNkZWZpbmUgZXh0NF9maW5kX2ZpcnN0X3plcm9fYml0CWV4dDJfZmluZF9maXJzdF96ZXJvX2JpdAotI2RlZmluZSBleHQ0X2ZpbmRfbmV4dF96ZXJvX2JpdAkJZXh0Ml9maW5kX25leHRfemVyb19iaXQKLSNkZWZpbmUgZXh0NF9maW5kX25leHRfYml0CQlleHQyX2ZpbmRfbmV4dF9iaXQKKyNkZWZpbmUgZXh0NF90ZXN0X2JpdAkJCXRlc3RfYml0X2xlCisjZGVmaW5lIGV4dDRfZmluZF9maXJzdF96ZXJvX2JpdAlmaW5kX2ZpcnN0X3plcm9fYml0X2xlCisjZGVmaW5lIGV4dDRfZmluZF9uZXh0X3plcm9fYml0CQlmaW5kX25leHRfemVyb19iaXRfbGUKKyNkZWZpbmUgZXh0NF9maW5kX25leHRfYml0CQlmaW5kX25leHRfYml0X2xlCiAKIC8qCiAgKiBNYXhpbWFsIG1vdW50IGNvdW50cyBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtIGNoZWNrcwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCBjY2NlOGE3Li43NTE2ZmI5IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCSAqIGZyYWdtZW50aW5nIHRoZSBmaWxlIHN5c3RlbSdzIGZyZWUgc3BhY2UuICBNYXliZSB3ZQogCQkgKiBzaG91bGQgaGF2ZSBzb21lIGh1ZXJpc3RpY3Mgb3Igc29tZSB3YXkgdG8gYWxsb3cKIAkJICogdXNlcnNwYWNlIHRvIHBhc3MgYSBoaW50IHRvIGZpbGUgc3lzdGVtLAotCQkgKiBlc3BlY2lpYWxseSBpZiB0aGUgbGF0dGVyIGNhc2UgdHVybnMgb3V0IHRvIGJlCisJCSAqIGVzcGVjaWFsbHkgaWYgdGhlIGxhdHRlciBjYXNlIHR1cm5zIG91dCB0byBiZQogCQkgKiBjb21tb24uCiAJCSAqLwogCQlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OwpAQCAtMjg0NCw3ICsyODQ0LDcgQEAKICAqIGV4dDRfZ2V0X2Jsb2Nrc19kaW9fd3JpdGUoKSB3aGVuIERJTyB0byB3cml0ZQogICogdG8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQuCiAgKgotICogV3JpdGluZyB0byBhbiB1bmluaXRpemVkIGV4dGVudCBtYXkgcmVzdWx0IGluIHNwbGl0dGluZyB0aGUgdW5pbml0aWFsaXplZAorICogV3JpdGluZyB0byBhbiB1bmluaXRpYWxpemVkIGV4dGVudCBtYXkgcmVzdWx0IGluIHNwbGl0dGluZyB0aGUgdW5pbml0aWFsaXplZAogICogZXh0ZW50IGludG8gbXVsdGlwbGUgL2luaXRpYWxpemVkIHVuaW5pdGlhbGl6ZWQgZXh0ZW50cyAodXAgdG8gdGhyZWUpCiAgKiBUaGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllczoKICAqICAgYT4gVGhlcmUgaXMgbm8gc3BsaXQgcmVxdWlyZWQ6IEVudGlyZSBleHRlbnQgc2hvdWxkIGJlIHVuaW5pdGlhbGl6ZWQKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW9jdGwuYyBiL2ZzL2V4dDQvaW9jdGwuYwppbmRleCBlYjNiYzJmLi5hODRmYWExIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lvY3RsLmMKKysrIGIvZnMvZXh0NC9pb2N0bC5jCkBAIC0zOCw3ICszOCw3IEBACiAJCXVuc2lnbmVkIGludCBvbGRmbGFnczsKIAkJdW5zaWduZWQgaW50IGpmbGFnOwogCi0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCiAJCWlmIChnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKSkKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQlfX3UzMiBnZW5lcmF0aW9uOwogCQlpbnQgZXJyOwogCi0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJCXJldHVybiAtRVBFUk07CiAKIAkJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CkBAIC0yOTgsNyArMjk4LDcgQEAKIAljYXNlIEVYVDRfSU9DX01JR1JBVEU6CiAJewogCQlpbnQgZXJyOwotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAogCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKQEAgLTMyMCw3ICszMjAsNyBAQAogCWNhc2UgRVhUNF9JT0NfQUxMT0NfREFfQkxLUzoKIAl7CiAJCWludCBlcnI7Ci0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCiAJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwpkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggNmM4MmU1Yi4uMjI3NjRjNyAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogCS8qIE9fTk9BVElNRSBjYW4gb25seSBiZSBzZXQgYnkgdGhlIG93bmVyIG9yIHN1cGVydXNlciAqLwogCWlmICgoYXJnICYgT19OT0FUSU1FKSAmJiAhKGZpbHAtPmZfZmxhZ3MgJiBPX05PQVRJTUUpKQotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCiAJLyogcmVxdWlyZWQgZm9yIHN0cmljdCBTdW5PUyBlbXVsYXRpb24gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZpZm8uYyBiL2ZzL2ZpZm8uYwppbmRleCA0ZTMwM2MyLi5iMWE1MjRkIDEwMDY0NAotLS0gYS9mcy9maWZvLmMKKysrIGIvZnMvZmlmby5jCkBAIC02Niw4ICs2Niw3IEBACiAJCQkJLyogc3VwcHJlc3MgUE9MTEhVUCB1bnRpbCB3ZSBoYXZlCiAJCQkJICogc2VlbiBhIHdyaXRlciAqLwogCQkJCWZpbHAtPmZfdmVyc2lvbiA9IHBpcGUtPndfY291bnRlcjsKLQkJCX0gZWxzZSAKLQkJCXsKKwkJCX0gZWxzZSB7CiAJCQkJd2FpdF9mb3JfcGFydG5lcihpbm9kZSwgJnBpcGUtPndfY291bnRlcik7CiAJCQkJaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQkJCWdvdG8gZXJyX3JkOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9jdXNlLmMgYi9mcy9mdXNlL2N1c2UuYwppbmRleCAzZTg3Y2NlLi5iNmNjYTQ3IDEwMDY0NAotLS0gYS9mcy9mdXNlL2N1c2UuYworKysgYi9mcy9mdXNlL2N1c2UuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiBzdGF0aWMgdm9pZCBjdXNlX3Byb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJc3RydWN0IGN1c2VfY29ubiAqY2MgPSBmY190b19jYyhmYyk7Ci0Jc3RydWN0IGN1c2VfaW5pdF9vdXQgKmFyZyA9ICZyZXEtPm1pc2MuY3VzZV9pbml0X291dDsKKwlzdHJ1Y3QgY3VzZV9pbml0X291dCAqYXJnID0gcmVxLT5vdXQuYXJnc1swXS52YWx1ZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHJlcS0+cGFnZXNbMF07CiAJc3RydWN0IGN1c2VfZGV2aW5mbyBkZXZpbmZvID0geyB9OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTM4NCw2ICszODQsNyBAQAogCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRldiwgMCk7CiAJa29iamVjdF91ZXZlbnQoJmRldi0+a29iaiwgS09CSl9BREQpOwogb3V0OgorCWtmcmVlKGFyZyk7CiAJX19mcmVlX3BhZ2UocGFnZSk7CiAJcmV0dXJuOwogCkBAIC00MDUsNiArNDA2LDcgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9ICZjYy0+ZmM7CiAJc3RydWN0IGN1c2VfaW5pdF9pbiAqYXJnOworCXZvaWQgKm91dGFyZzsKIAogCUJVSUxEX0JVR19PTihDVVNFX0lOSVRfSU5GT19NQVggPiBQQUdFX1NJWkUpOwogCkBAIC00MTksNiArNDIxLDEwIEBACiAJaWYgKCFwYWdlKQogCQlnb3RvIGVycl9wdXRfcmVxOwogCisJb3V0YXJnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN1c2VfaW5pdF9vdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW91dGFyZykKKwkJZ290byBlcnJfZnJlZV9wYWdlOworCiAJYXJnID0gJnJlcS0+bWlzYy5jdXNlX2luaXRfaW47CiAJYXJnLT5tYWpvciA9IEZVU0VfS0VSTkVMX1ZFUlNJT047CiAJYXJnLT5taW5vciA9IEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT047CkBAIC00MjksNyArNDM1LDcgQEAKIAlyZXEtPmluLmFyZ3NbMF0udmFsdWUgPSBhcmc7CiAJcmVxLT5vdXQubnVtYXJncyA9IDI7CiAJcmVxLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKHN0cnVjdCBjdXNlX2luaXRfb3V0KTsKLQlyZXEtPm91dC5hcmdzWzBdLnZhbHVlID0gJnJlcS0+bWlzYy5jdXNlX2luaXRfb3V0OworCXJlcS0+b3V0LmFyZ3NbMF0udmFsdWUgPSBvdXRhcmc7CiAJcmVxLT5vdXQuYXJnc1sxXS5zaXplID0gQ1VTRV9JTklUX0lORk9fTUFYOwogCXJlcS0+b3V0LmFyZ3ZhciA9IDE7CiAJcmVxLT5vdXQuYXJncGFnZXMgPSAxOwpAQCAtNDQwLDYgKzQ0Niw4IEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX2ZyZWVfcGFnZToKKwlfX2ZyZWVfcGFnZShwYWdlKTsKIGVycl9wdXRfcmVxOgogCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiBlcnI6CkBAIC00NTgsNyArNDY2LDcgQEAKICAqIEBmaWxlOiBmaWxlIHN0cnVjdCBiZWluZyBvcGVuZWQKICAqCiAgKiBVc2VybGFuZCBDVVNFIHNlcnZlciBjYW4gY3JlYXRlIGEgQ1VTRSBkZXZpY2UgYnkgb3BlbmluZyAvZGV2L2N1c2UKLSAqIGFuZCByZXBseWluZyB0byB0aGUgaW5pdGlsYWl6YXRpb24gcmVxdWVzdCBrZXJuZWwgc2VuZHMuICBUaGlzCisgKiBhbmQgcmVwbHlpbmcgdG8gdGhlIGluaXRpYWxpemF0aW9uIHJlcXVlc3Qga2VybmVsIHNlbmRzLiAgVGhpcwogICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIENVU0UgZGV2aWNlIGluaXRpYWxpemF0aW9uLgogICogQmVjYXVzZSB0aGUgZmQgb3BlbmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcKICAqIGluaXRpYWxpemF0aW9uLCB0aGlzIGZ1bmN0aW9uIG9ubHkgY3JlYXRlcyBjdXNlX2Nvbm4gYW5kIHNlbmRzCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCBjZjhkMjhkLi42NDBmYzIyIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCisrKyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTczNywxNCArNzM3LDEyIEBACiAJaWYgKFdBUk5fT04oUGFnZU1sb2NrZWQob2xkcGFnZSkpKQogCQlnb3RvIG91dF9mYWxsYmFja191bmxvY2s7CiAKLQlyZW1vdmVfZnJvbV9wYWdlX2NhY2hlKG9sZHBhZ2UpOwotCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRwYWdlKTsKLQotCWVyciA9IGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZChuZXdwYWdlLCBtYXBwaW5nLCBpbmRleCwgR0ZQX0tFUk5FTCk7CisJZXJyID0gcmVwbGFjZV9wYWdlX2NhY2hlX3BhZ2Uob2xkcGFnZSwgbmV3cGFnZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJmdXNlX3RyeV9tb3ZlX3BhZ2U6IGZhaWxlZCB0byBhZGQgcGFnZSIpOwotCQlnb3RvIG91dF9mYWxsYmFja191bmxvY2s7CisJCXVubG9ja19wYWdlKG5ld3BhZ2UpOworCQlyZXR1cm4gZXJyOwogCX0KKwogCXBhZ2VfY2FjaGVfZ2V0KG5ld3BhZ2UpOwogCiAJaWYgKCEoYnVmLT5mbGFncyAmIFBJUEVfQlVGX0ZMQUdfTFJVKSkKQEAgLTE5MTAsNiArMTkwOCwyMSBAQAogCQlrZnJlZShkZXF1ZXVlX2ZvcmdldChmYywgMSwgTlVMTCkpOwogfQogCitzdGF0aWMgdm9pZCBlbmRfcG9sbHMoc3RydWN0IGZ1c2VfY29ubiAqZmMpCit7CisJc3RydWN0IHJiX25vZGUgKnA7CisKKwlwID0gcmJfZmlyc3QoJmZjLT5wb2xsZWRfZmlsZXMpOworCisJd2hpbGUgKHApIHsKKwkJc3RydWN0IGZ1c2VfZmlsZSAqZmY7CisJCWZmID0gcmJfZW50cnkocCwgc3RydWN0IGZ1c2VfZmlsZSwgcG9sbGVkX25vZGUpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZmZi0+cG9sbF93YWl0KTsKKworCQlwID0gcmJfbmV4dChwKTsKKwl9Cit9CisKIC8qCiAgKiBBYm9ydCBhbGwgcmVxdWVzdHMuCiAgKgpAQCAtMTkzNyw2ICsxOTUwLDcgQEAKIAkJZmMtPmJsb2NrZWQgPSAwOwogCQllbmRfaW9fcmVxdWVzdHMoZmMpOwogCQllbmRfcXVldWVkX3JlcXVlc3RzKGZjKTsKKwkJZW5kX3BvbGxzKGZjKTsKIAkJd2FrZV91cF9hbGwoJmZjLT53YWl0cSk7CiAJCXdha2VfdXBfYWxsKCZmYy0+YmxvY2tlZF93YWl0cSk7CiAJCWtpbGxfZmFzeW5jKCZmYy0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CkBAIC0xOTUzLDYgKzE5NjcsNyBAQAogCQlmYy0+Y29ubmVjdGVkID0gMDsKIAkJZmMtPmJsb2NrZWQgPSAwOwogCQllbmRfcXVldWVkX3JlcXVlc3RzKGZjKTsKKwkJZW5kX3BvbGxzKGZjKTsKIAkJd2FrZV91cF9hbGwoJmZjLT5ibG9ja2VkX3dhaXRxKTsKIAkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAkJZnVzZV9jb25uX3B1dChmYyk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCA4YmQwZWY5Li5jNmJhNDliIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTE1OCwxMCArMTU4LDcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JaWYgKG5kICYmIG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCi0JCXJldHVybiAtRUNISUxEOwotCi0JaW5vZGUgPSBlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IEFDQ0VTU19PTkNFKGVudHJ5LT5kX2lub2RlKTsKIAlpZiAoaW5vZGUgJiYgaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAJZWxzZSBpZiAoZnVzZV9kZW50cnlfdGltZShlbnRyeSkgPCBnZXRfamlmZmllc182NCgpKSB7CkBAIC0xNzcsNiArMTc0LDkgQEAKIAkJaWYgKCFpbm9kZSkKIAkJCXJldHVybiAwOwogCisJCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQkJcmV0dXJuIC1FQ0hJTEQ7CisKIAkJZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAkJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKIAkJaWYgKElTX0VSUihyZXEpKQpAQCAtOTcwLDYgKzk3MCwxNCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgZnVzZV9wZXJtX2dldGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCXJldHVybiBmdXNlX2RvX2dldGF0dHIoaW5vZGUsIE5VTEwsIE5VTEwpOworfQorCiAvKgogICogQ2hlY2sgcGVybWlzc2lvbi4gIFRoZSB0d28gYmFzaWMgYWNjZXNzIG1vZGVscyBvZiBGVVNFIGFyZToKICAqCkBAIC05ODksOSArOTk3LDYgQEAKIAlib29sIHJlZnJlc2hlZCA9IGZhbHNlOwogCWludCBlcnIgPSAwOwogCi0JaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCi0JCXJldHVybiAtRUNISUxEOwotCiAJaWYgKCFmdXNlX2FsbG93X3Rhc2soZmMsIGN1cnJlbnQpKQogCQlyZXR1cm4gLUVBQ0NFUzsKIApAQCAtMTAwMCw5ICsxMDA1LDE1IEBACiAJICovCiAJaWYgKChmYy0+ZmxhZ3MgJiBGVVNFX0RFRkFVTFRfUEVSTUlTU0lPTlMpIHx8CiAJICAgICgobWFzayAmIE1BWV9FWEVDKSAmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpKSkgewotCQllcnIgPSBmdXNlX3VwZGF0ZV9hdHRyaWJ1dGVzKGlub2RlLCBOVUxMLCBOVUxMLCAmcmVmcmVzaGVkKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCXN0cnVjdCBmdXNlX2lub2RlICpmaSA9IGdldF9mdXNlX2lub2RlKGlub2RlKTsKKworCQlpZiAoZmktPmlfdGltZSA8IGdldF9qaWZmaWVzXzY0KCkpIHsKKwkJCXJlZnJlc2hlZCA9IHRydWU7CisKKwkJCWVyciA9IGZ1c2VfcGVybV9nZXRhdHRyKGlub2RlLCBmbGFncyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIAlpZiAoZmMtPmZsYWdzICYgRlVTRV9ERUZBVUxUX1BFUk1JU1NJT05TKSB7CkBAIC0xMDEyLDcgKzEwMjMsNyBAQAogCQkgICBhdHRyaWJ1dGVzLiAgVGhpcyBpcyBhbHNvIG5lZWRlZCwgYmVjYXVzZSB0aGUgcm9vdAogCQkgICBub2RlIHdpbGwgYXQgZmlyc3QgaGF2ZSBubyBwZXJtaXNzaW9ucyAqLwogCQlpZiAoZXJyID09IC1FQUNDRVMgJiYgIXJlZnJlc2hlZCkgewotCQkJZXJyID0gZnVzZV9kb19nZXRhdHRyKGlub2RlLCBOVUxMLCBOVUxMKTsKKwkJCWVyciA9IGZ1c2VfcGVybV9nZXRhdHRyKGlub2RlLCBmbGFncyk7CiAJCQlpZiAoIWVycikKIAkJCQllcnIgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssCiAJCQkJCQkJZmxhZ3MsIE5VTEwpOwpAQCAtMTAyMywxMyArMTAzNCwxNiBAQAogCQkgICBub3RpY2VkIGltbWVkaWF0ZWx5LCBvbmx5IGFmdGVyIHRoZSBhdHRyaWJ1dGUKIAkJICAgdGltZW91dCBoYXMgZXhwaXJlZCAqLwogCX0gZWxzZSBpZiAobWFzayAmIChNQVlfQUNDRVNTIHwgTUFZX0NIRElSKSkgeworCQlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKKwkJCXJldHVybiAtRUNISUxEOworCiAJCWVyciA9IGZ1c2VfYWNjZXNzKGlub2RlLCBtYXNrKTsKIAl9IGVsc2UgaWYgKChtYXNrICYgTUFZX0VYRUMpICYmIFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKIAkJaWYgKCEoaW5vZGUtPmlfbW9kZSAmIFNfSVhVR08pKSB7CiAJCQlpZiAocmVmcmVzaGVkKQogCQkJCXJldHVybiAtRUFDQ0VTOwogCi0JCQllcnIgPSBmdXNlX2RvX2dldGF0dHIoaW5vZGUsIE5VTEwsIE5VTEwpOworCQkJZXJyID0gZnVzZV9wZXJtX2dldGF0dHIoaW5vZGUsIGZsYWdzKTsKIAkJCWlmICghZXJyICYmICEoaW5vZGUtPmlfbW9kZSAmIFNfSVhVR08pKQogCQkJCXJldHVybiAtRUFDQ0VTOwogCQl9CmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDllMDgzMmQuLjZlYTAwNzMgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJcmJfZXJhc2UoJmZmLT5wb2xsZWRfbm9kZSwgJmZjLT5wb2xsZWRfZmlsZXMpOwogCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmZmYtPnBvbGxfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmZmYtPnBvbGxfd2FpdCk7CiAKIAlpbmFyZy0+ZmggPSBmZi0+Zmg7CiAJaW5hcmctPmZsYWdzID0gZmxhZ3M7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCBkNDI4Njk0Li5iNzg4YmVjIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTI3Miw3ICsyNzIsNiBAQAogCQlzdHJ1Y3QgZnVzZV9pbml0X2luIGluaXRfaW47CiAJCXN0cnVjdCBmdXNlX2luaXRfb3V0IGluaXRfb3V0OwogCQlzdHJ1Y3QgY3VzZV9pbml0X2luIGN1c2VfaW5pdF9pbjsKLQkJc3RydWN0IGN1c2VfaW5pdF9vdXQgY3VzZV9pbml0X291dDsKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBmdXNlX3JlYWRfaW4gaW47CiAJCQl1NjQgYXR0cl92ZXI7CmRpZmYgLS1naXQgYS9mcy9nZW5lcmljX2FjbC5jIGIvZnMvZ2VuZXJpY19hY2wuYwppbmRleCAwNmM0OGE4Li44ZjI2ZDFhIDEwMDY0NAotLS0gYS9mcy9nZW5lcmljX2FjbC5jCisrKyBiL2ZzL2dlbmVyaWNfYWNsLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAlpZiAodmFsdWUpIHsKIAkJYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIodmFsdWUsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9NYWtlZmlsZSBiL2ZzL2dmczIvTWFrZWZpbGUKaW5kZXggMjFmN2U0Ni4uZjNkMjNlZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9NYWtlZmlsZQorKysgYi9mcy9nZnMyL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotRVhUUkFfQ0ZMQUdTIDo9IC1JJChzcmMpCitjY2ZsYWdzLXkgOj0gLUkkKHNyYykKIG9iai0kKENPTkZJR19HRlMyX0ZTKSArPSBnZnMyLm8KIGdmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8geGF0dHIubyBnbG9jay5vIFwKIAlnbG9wcy5vIGlub2RlLm8gbG9nLm8gbG9wcy5vIG1haW4ubyBtZXRhX2lvLm8gXApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCA0MDc0Yjk1Li5iMjY4MmUwIDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CiAKIAllcnJvciA9IC1FQUNDRVM7Ci0JaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCWdvdG8gb3V0OwogCiAJZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb2N0bC5jIGIvZnMvaGZzcGx1cy9pb2N0bC5jCmluZGV4IDUwOGNlNjYuLmZiYWE2NjkgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaW9jdGwuYworKysgYi9mcy9oZnNwbHVzL2lvY3RsLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkgeworCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpIHsKIAkJZXJyID0gLUVBQ0NFUzsKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKIAl9CmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IDk4ODUwODIuLmI5ZWViMWMgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0zMzIsOCArMzMyLDcgQEAKIHsKIAljYW5jZWxfZGlydHlfcGFnZShwYWdlLCAvKiBObyBJTyBhY2NvdW50aW5nIGZvciBodWdlIHBhZ2VzPyAqLzApOwogCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwotCXJlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7Ci0JcHV0X3BhZ2UocGFnZSk7CisJZGVsZXRlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKIH0KIAogc3RhdGljIHZvaWQgdHJ1bmNhdGVfaHVnZXBhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQpCmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCA5OTEwYzAzLi4wYjNkYTRhIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KIAogLyoKICAqIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKQEAgLTE3MTUsNyArMTcxNiw3IEBACiBFWFBPUlRfU1lNQk9MKGluaXRfc3BlY2lhbF9pbm9kZSk7CiAKIC8qKgotICogSW5pdCB1aWQsZ2lkLG1vZGUgZm9yIG5ldyBpbm9kZSBhY2NvcmRpbmcgdG8gcG9zaXggc3RhbmRhcmRzCisgKiBpbm9kZV9pbml0X293bmVyIC0gSW5pdCB1aWQsZ2lkLG1vZGUgZm9yIG5ldyBpbm9kZSBhY2NvcmRpbmcgdG8gcG9zaXggc3RhbmRhcmRzCiAgKiBAaW5vZGU6IE5ldyBpbm9kZQogICogQGRpcjogRGlyZWN0b3J5IGlub2RlCiAgKiBAbW9kZTogbW9kZSBvZiB0aGUgbmV3IGlub2RlCkBAIC0xNzMzLDMgKzE3MzQsMjIgQEAKIAlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIH0KIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7CisKKy8qKgorICogaW5vZGVfb3duZXJfb3JfY2FwYWJsZSAtIGNoZWNrIGN1cnJlbnQgdGFzayBwZXJtaXNzaW9ucyB0byBpbm9kZQorICogQGlub2RlOiBpbm9kZSBiZWluZyBjaGVja2VkCisgKgorICogUmV0dXJuIHRydWUgaWYgY3VycmVudCBlaXRoZXIgaGFzIENBUF9GT1dORVIgdG8gdGhlIGlub2RlLCBvcgorICogb3ducyB0aGUgZmlsZS4KKyAqLworYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucyA9IGlub2RlX3VzZXJucyhpbm9kZSk7CisKKwlpZiAoY3VycmVudF91c2VyX25zKCkgPT0gbnMgJiYgY3VycmVudF9mc3VpZCgpID09IGlub2RlLT5pX3VpZCkKKwkJcmV0dXJuIHRydWU7CisJaWYgKG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKGlub2RlX293bmVyX29yX2NhcGFibGUpOwpkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKaW5kZXggZjNkMTVkZS4uODMxODA1OSAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAorKysgYi9mcy9pbnRlcm5hbC5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGdsb2NrLmg+CiAKIHN0cnVjdCBzdXBlcl9ibG9jazsKK3N0cnVjdCBmaWxlX3N5c3RlbV90eXBlOwogc3RydWN0IGxpbnV4X2JpbnBybTsKIHN0cnVjdCBwYXRoOwogCkBAIC02MSwxMCArNjIsOSBAQAogZXh0ZXJuIGludCBjb3B5X21vdW50X29wdGlvbnMoY29uc3Qgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKIGV4dGVybiBpbnQgY29weV9tb3VudF9zdHJpbmcoY29uc3Qgdm9pZCBfX3VzZXIgKiwgY2hhciAqKik7CiAKLWV4dGVybiB2b2lkIGZyZWVfdmZzbW50KHN0cnVjdCB2ZnNtb3VudCAqKTsKLWV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBtbnRfZ2V0X2NvdW50KHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKl9fbG9va3VwX21udChzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOworZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbG9va3VwX21udChzdHJ1Y3QgcGF0aCAqKTsKIGV4dGVybiB2b2lkIG1udF9zZXRfbW91bnRwb2ludChzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLAogCQkJCXN0cnVjdCB2ZnNtb3VudCAqKTsKIGV4dGVybiB2b2lkIHJlbGVhc2VfbW91bnRzKHN0cnVjdCBsaXN0X2hlYWQgKik7CkBAIC05OSw2ICs5OSw4IEBACiBleHRlcm4gaW50IGRvX3JlbW91bnRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgdm9pZCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgX19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gdm9pZCBwdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqbW91bnRfZnMoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiwKKwkJCSAgICAgICBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKIAogLyoKICAqIG9wZW4uYwpkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggMWVlYmViNy4uMWQ5YjlmYyAxMDA2NDQKLS0tIGEvZnMvaW9jdGwuYworKysgYi9mcy9pb2N0bC5jCkBAIC01NDgsNiArNTQ4LDcgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWludCBfX3VzZXIgKmFyZ3AgPSAoaW50IF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBGSU9DTEVYOgpAQCAtNTY3LDEzICs1NjgsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZJT1FTSVpFOgotCQlpZiAoU19JU0RJUihmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpIHx8Ci0JCSAgICBTX0lTUkVHKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgfHwKLQkJICAgIFNfSVNMTksoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgewotCQkJbG9mZl90IHJlcyA9Ci0JCQkJaW5vZGVfZ2V0X2J5dGVzKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCQkJZXJyb3IgPSBjb3B5X3RvX3VzZXIoKGxvZmZfdCBfX3VzZXIgKilhcmcsICZyZXMsCi0JCQkJCSAgICAgc2l6ZW9mKHJlcykpID8gLUVGQVVMVCA6IDA7CisJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwKKwkJICAgIFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJCWxvZmZfdCByZXMgPSBpbm9kZV9nZXRfYnl0ZXMoaW5vZGUpOworCQkJZXJyb3IgPSBjb3B5X3RvX3VzZXIoYXJncCwgJnJlcywgc2l6ZW9mKHJlcykpID8KKwkJCQkJLUVGQVVMVCA6IDA7CiAJCX0gZWxzZQogCQkJZXJyb3IgPSAtRU5PVFRZOwogCQlicmVhazsKQEAgLTU5MCwxNCArNTg5LDEwIEBACiAJCXJldHVybiBpb2N0bF9maWVtYXAoZmlscCwgYXJnKTsKIAogCWNhc2UgRklHRVRCU1o6Ci0JewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQkJaW50IF9fdXNlciAqcCA9IChpbnQgX191c2VyICopYXJnOwotCQlyZXR1cm4gcHV0X3VzZXIoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLCBwKTsKLQl9CisJCXJldHVybiBwdXRfdXNlcihpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsIGFyZ3ApOwogCiAJZGVmYXVsdDoKLQkJaWYgKFNfSVNSRUcoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKKwkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCiAJCQllcnJvciA9IGZpbGVfaW9jdGwoZmlscCwgY21kLCBhcmcpOwogCQllbHNlCiAJCQllcnJvciA9IHZmc19pb2N0bChmaWxwLCBjbWQsIGFyZyk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9hY2wuYyBiL2ZzL2pmZnMyL2FjbC5jCmluZGV4IDk1Yjc5NjcuLjgyOGEwZTEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2FjbC5jCisrKyBiL2ZzL2pmZnMyL2FjbC5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAogCWlmIChuYW1lWzBdICE9ICdcMCcpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICghaXNfb3duZXJfb3JfY2FwKGRlbnRyeS0+ZF9pbm9kZSkpCisJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGRlbnRyeS0+ZF9pbm9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAodmFsdWUpIHsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2NvbXByX3psaWIuYyBiL2ZzL2pmZnMyL2NvbXByX3psaWIuYwppbmRleCBmZDA1YTBiLi41YTAwMTAyIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wcl96bGliLmMKKysrIGIvZnMvamZmczIvY29tcHJfemxpYi5jCkBAIC00MCwxMiArNDAsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWxsb2Nfd29ya3NwYWNlcyh2b2lkKQogewotCWRlZl9zdHJtLndvcmtzcGFjZSA9IHZtYWxsb2MoemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoKSk7CisJZGVmX3N0cm0ud29ya3NwYWNlID0gdm1hbGxvYyh6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZShNQVhfV0JJVFMsCisJCQkJCQkJTUFYX01FTV9MRVZFTCkpOwogCWlmICghZGVmX3N0cm0ud29ya3NwYWNlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgZGVmbGF0ZSB3b3Jrc3BhY2VcbiIsIHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKCkpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yIGRlZmxhdGUgd29ya3NwYWNlXG4iLCB6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZShNQVhfV0JJVFMsIE1BWF9NRU1fTEVWRUwpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCUQxKHByaW50ayhLRVJOX0RFQlVHICJBbGxvY2F0ZWQgJWQgYnl0ZXMgZm9yIGRlZmxhdGUgd29ya3NwYWNlXG4iLCB6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpKSk7CisJRDEocHJpbnRrKEtFUk5fREVCVUcgIkFsbG9jYXRlZCAlZCBieXRlcyBmb3IgZGVmbGF0ZSB3b3Jrc3BhY2VcbiIsIHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKE1BWF9XQklUUywgTUFYX01FTV9MRVZFTCkpKTsKIAlpbmZfc3RybS53b3Jrc3BhY2UgPSB2bWFsbG9jKHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCkpOwogCWlmICghaW5mX3N0cm0ud29ya3NwYWNlKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgaW5mbGF0ZSB3b3Jrc3BhY2VcbiIsIHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCkpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL01ha2VmaWxlIGIvZnMvamZzL01ha2VmaWxlCmluZGV4IDNhZGI2MzkuLmE1OGZhNzIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9NYWtlZmlsZQorKysgYi9mcy9qZnMvTWFrZWZpbGUKQEAgLTEzLDQgKzEzLDQgQEAKIAogamZzLSQoQ09ORklHX0pGU19QT1NJWF9BQ0wpICs9IGFjbC5vCiAKLUVYVFJBX0NGTEFHUyArPSAtRF9KRlNfNEsKK2NjZmxhZ3MteSA6PSAtRF9KRlNfNEsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9pb2N0bC5jIGIvZnMvamZzL2lvY3RsLmMKaW5kZXggYWZlMjIyYi4uNmY5OGExOCAxMDA2NDQKLS0tIGEvZnMvamZzL2lvY3RsLmMKKysrIGIvZnMvamZzL2lvY3RsLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKSB7CisJCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpIHsKIAkJCWVyciA9IC1FQUNDRVM7CiAJCQlnb3RvIHNldGZsYWdzX291dDsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvamZzL3hhdHRyLmMgYi9mcy9qZnMveGF0dHIuYwppbmRleCAzZmE0YzMyLi4yNDgzOGYxIDEwMDY0NAotLS0gYS9mcy9qZnMveGF0dHIuYworKysgYi9mcy9qZnMveGF0dHIuYwpAQCAtNjc4LDcgKzY3OCw3IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCByYzsKIAotCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2NvbXByLmMgYi9mcy9sb2dmcy9jb21wci5jCmluZGV4IDQ0YmJmZDIuLjk2MWYwMmIgMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL2NvbXByLmMKKysrIGIvZnMvbG9nZnMvY29tcHIuYwpAQCAtODEsNyArODEsNyBAQAogCiBpbnQgX19pbml0IGxvZ2ZzX2NvbXByX2luaXQodm9pZCkKIHsKLQlzaXplX3Qgc2l6ZSA9IG1heCh6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpLAorCXNpemVfdCBzaXplID0gbWF4KHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKE1BWF9XQklUUywgTUFYX01FTV9MRVZFTCksCiAJCQl6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKIAlzdHJlYW0ud29ya3NwYWNlID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXN0cmVhbS53b3Jrc3BhY2UpCmRpZmYgLS1naXQgYS9mcy9sb2dmcy9maWxlLmMgYi9mcy9sb2dmcy9maWxlLmMKaW5kZXggZTg2Mzc2Yi4uYzJhZDcwMiAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvZmlsZS5jCisrKyBiL2ZzL2xvZ2ZzL2ZpbGUuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJCWlmIChJU19SRE9OTFkoaW5vZGUpKQogCQkJcmV0dXJuIC1FUk9GUzsKIAotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAogCQllcnIgPSBnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKilhcmcpOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvS2NvbmZpZyBiL2ZzL21pbml4L0tjb25maWcKaW5kZXggMGZkN2NhOS4uNjYyNDY4NCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvS2NvbmZpZworKysgYi9mcy9taW5peC9LY29uZmlnCkBAIC0xNSwzICsxNSwxMSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1pbml4LiAgTm90ZSB0aGF0IHRoZSBmaWxlIHN5c3RlbSBvZiB5b3VyIHJvb3QKIAkgIHBhcnRpdGlvbiAodGhlIG9uZSBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkgLykgY2Fubm90IGJlIGNvbXBpbGVkIGFzCiAJICBhIG1vZHVsZS4KKworY29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU4KKwlkZWZfYm9vbCBNSU5JWF9GUworCWRlcGVuZHMgb24gSDgzMDAgfHwgTTMyUiB8fCBNSUNST0JMQVpFIHx8IE1JUFMgfHwgUzM5MCB8fCBTVVBFUkggfHwgU1BBUkMgfHwgWFRFTlNBIHx8IChNNjhLICYmICFNTVUpCisKK2NvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQKKwlkZWZfYm9vbCBNSU5JWF9GUworCWRlcGVuZHMgb24gTTY4SyAmJiBNTVUKZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oCmluZGV4IDQwN2IxYzguLjM0MWUyMTIgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L21pbml4LmgKKysrIGIvZnMvbWluaXgvbWluaXguaApAQCAtODgsNCArODgsNzggQEAKIAlyZXR1cm4gbGlzdF9lbnRyeShpbm9kZSwgc3RydWN0IG1pbml4X2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSAmJiBcCisJZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKQorCisjZXJyb3IgTWluaXggZmlsZSBzeXN0ZW0gYnl0ZSBvcmRlciBicm9rZW4KKworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikKKworLyoKKyAqIGJpZy1lbmRpYW4gMzIgb3IgNjQgYml0IGluZGV4ZWQgYml0bWFwcyBvbiBiaWctZW5kaWFuIHN5c3RlbSBvcgorICogbGl0dGxlLWVuZGlhbiBiaXRtYXBzIG9uIGxpdHRsZS1lbmRpYW4gc3lzdGVtCisgKi8KKworI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLCBhZGRyKQlcCisJX190ZXN0X2FuZF9zZXRfYml0KChuciksICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLCBhZGRyKQkJXAorCV9fc2V0X2JpdCgobnIpLCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLCBhZGRyKSBcCisJX190ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLCBhZGRyKQkJXAorCXRlc3RfYml0KChuciksICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKKwlmaW5kX2ZpcnN0X3plcm9fYml0KCh1bnNpZ25lZCBsb25nICopKGFkZHIpLCAoc2l6ZSkpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRCkKKworLyoKKyAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOworCXVuc2lnbmVkIHNob3J0IG51bTsKKworCWlmICghc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gKHNpemUgPj4gNCkgKyAoKHNpemUgJiAxNSkgPiAwKTsKKwl3aGlsZSAoKnArKyA9PSAweGZmZmYpIHsKKwkJaWYgKC0tc2l6ZSA9PSAwKQorCQkJcmV0dXJuIChwIC0gYWRkcikgPDwgNDsKKwl9CisKKwludW0gPSAqLS1wOworCXJldHVybiAoKHAgLSBhZGRyKSA8PCA0KSArIGZmeihudW0pOworfQorCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCVwKKwlfX3Rlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDE2LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgbWluaXhfc2V0X2JpdChuciwgYWRkcikJXAorCV9fc2V0X2JpdCgobnIpIF4gMTYsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsIGFkZHIpCVwKKwlfX3Rlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMTYsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorCitzdGF0aWMgaW5saW5lIGludCBtaW5peF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvaWQgKnZhZGRyKQoreworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHI7CisJcmV0dXJuIChwW25yID4+IDRdICYgKDFVIDw8IChuciAmIDE1KSkpICE9IDA7Cit9CisKKyNlbHNlCisKKy8qCisgKiBsaXR0bGUtZW5kaWFuIGJpdG1hcHMKKyAqLworCisjZGVmaW5lIG1pbml4X3Rlc3RfYW5kX3NldF9iaXQJX190ZXN0X2FuZF9zZXRfYml0X2xlCisjZGVmaW5lIG1pbml4X3NldF9iaXQJCV9fc2V0X2JpdF9sZQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQJX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUKKyNkZWZpbmUgbWluaXhfdGVzdF9iaXQJdGVzdF9iaXRfbGUKKyNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdAlmaW5kX2ZpcnN0X3plcm9fYml0X2xlCisKKyNlbmRpZgorCiAjZW5kaWYgLyogRlNfTUlOSVhfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggYjkxMmI3YS4uZmM4NThiMSAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0xODMsNiArMTgzLDkgQEAKIAogCW1hc2sgJj0gTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQzsKIAorCWlmIChjdXJyZW50X3VzZXJfbnMoKSAhPSBpbm9kZV91c2VybnMoaW5vZGUpKQorCQlnb3RvIG90aGVyX3Blcm1zOworCiAJaWYgKGN1cnJlbnRfZnN1aWQoKSA9PSBpbm9kZS0+aV91aWQpCiAJCW1vZGUgPj49IDY7CiAJZWxzZSB7CkBAIC0xOTYsNiArMTk5LDcgQEAKIAkJCW1vZGUgPj49IDM7CiAJfQogCitvdGhlcl9wZXJtczoKIAkvKgogCSAqIElmIHRoZSBEQUNzIGFyZSBvayB3ZSBkb24ndCBuZWVkIGFueSBjYXBhYmlsaXR5IGNoZWNrLgogCSAqLwpAQCAtMjM3LDcgKzI0MSw3IEBACiAJICogRXhlY3V0YWJsZSBEQUNzIGFyZSBvdmVycmlkYWJsZSBpZiBhdCBsZWFzdCBvbmUgZXhlYyBiaXQgaXMgc2V0LgogCSAqLwogCWlmICghKG1hc2sgJiBNQVlfRVhFQykgfHwgZXhlY3V0ZV9vayhpbm9kZSkpCi0JCWlmIChjYXBhYmxlKENBUF9EQUNfT1ZFUlJJREUpKQorCQlpZiAobnNfY2FwYWJsZShpbm9kZV91c2VybnMoaW5vZGUpLCBDQVBfREFDX09WRVJSSURFKSkKIAkJCXJldHVybiAwOwogCiAJLyoKQEAgLTI0NSw3ICsyNDksNyBAQAogCSAqLwogCW1hc2sgJj0gTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQzsKIAlpZiAobWFzayA9PSBNQVlfUkVBRCB8fCAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAhKG1hc2sgJiBNQVlfV1JJVEUpKSkKLQkJaWYgKGNhcGFibGUoQ0FQX0RBQ19SRUFEX1NFQVJDSCkpCisJCWlmIChuc19jYXBhYmxlKGlub2RlX3VzZXJucyhpbm9kZSksIENBUF9EQUNfUkVBRF9TRUFSQ0gpKQogCQkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLUVBQ0NFUzsKQEAgLTY1NCw2ICs2NTgsNyBAQAogc3RhdGljIGlubGluZSBpbnQgZXhlY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmV0OworCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMgPSBpbm9kZV91c2VybnMoaW5vZGUpOwogCiAJaWYgKGlub2RlLT5pX29wLT5wZXJtaXNzaW9uKSB7CiAJCXJldCA9IGlub2RlLT5pX29wLT5wZXJtaXNzaW9uKGlub2RlLCBNQVlfRVhFQywgZmxhZ3MpOwpAQCAtNjY2LDcgKzY3MSw4IEBACiAJaWYgKHJldCA9PSAtRUNISUxEKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGNhcGFibGUoQ0FQX0RBQ19PVkVSUklERSkgfHwgY2FwYWJsZShDQVBfREFDX1JFQURfU0VBUkNIKSkKKwlpZiAobnNfY2FwYWJsZShucywgQ0FQX0RBQ19PVkVSUklERSkgfHwKKwkJCW5zX2NhcGFibGUobnMsIENBUF9EQUNfUkVBRF9TRUFSQ0gpKQogCQlnb3RvIG9rOwogCiAJcmV0dXJuIHJldDsKQEAgLTkzMyw4ICs5MzksNyBAQAogCQlpZiAobWFuYWdlZCAmIERDQUNIRV9NQU5BR0VfVFJBTlNJVCkgewogCQkJQlVHX09OKCFwYXRoLT5kZW50cnktPmRfb3ApOwogCQkJQlVHX09OKCFwYXRoLT5kZW50cnktPmRfb3AtPmRfbWFuYWdlKTsKLQkJCXJldCA9IHBhdGgtPmRlbnRyeS0+ZF9vcC0+ZF9tYW5hZ2UocGF0aC0+ZGVudHJ5LAotCQkJCQkJCSAgIGZhbHNlLCBmYWxzZSk7CisJCQlyZXQgPSBwYXRoLT5kZW50cnktPmRfb3AtPmRfbWFuYWdlKHBhdGgtPmRlbnRyeSwgZmFsc2UpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldCA9PSAtRUlTRElSID8gMCA6IHJldDsKIAkJfQpAQCAtOTk5LDcgKzEwMDQsNyBAQAogCQlzdHJ1Y3QgdmZzbW91bnQgKm1vdW50ZWQ7CiAJCWlmICh1bmxpa2VseShwYXRoLT5kZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfTUFOQUdFX1RSQU5TSVQpICYmCiAJCSAgICAhcmV2ZXJzZV90cmFuc2l0ICYmCi0JCSAgICBwYXRoLT5kZW50cnktPmRfb3AtPmRfbWFuYWdlKHBhdGgtPmRlbnRyeSwgZmFsc2UsIHRydWUpIDwgMCkKKwkJICAgIHBhdGgtPmRlbnRyeS0+ZF9vcC0+ZF9tYW5hZ2UocGF0aC0+ZGVudHJ5LCB0cnVlKSA8IDApCiAJCQlyZXR1cm4gZmFsc2U7CiAJCW1vdW50ZWQgPSBfX2xvb2t1cF9tbnQocGF0aC0+bW50LCBwYXRoLT5kZW50cnksIDEpOwogCQlpZiAoIW1vdW50ZWQpCkBAIC0xMDY1LDcgKzEwNzAsNyBAQAogICogQ2FyZSBtdXN0IGJlIHRha2VuIGFzIG5hbWVzcGFjZV9zZW0gbWF5IGJlIGhlbGQgKGluZGljYXRlZCBieSBtb3VudGluZ19oZXJlCiAgKiBiZWluZyB0cnVlKS4KICAqLwotaW50IGZvbGxvd19kb3duKHN0cnVjdCBwYXRoICpwYXRoLCBib29sIG1vdW50aW5nX2hlcmUpCitpbnQgZm9sbG93X2Rvd24oc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJdW5zaWduZWQgbWFuYWdlZDsKIAlpbnQgcmV0OwpAQCAtMTA4Niw3ICsxMDkxLDcgQEAKIAkJCUJVR19PTighcGF0aC0+ZGVudHJ5LT5kX29wKTsKIAkJCUJVR19PTighcGF0aC0+ZGVudHJ5LT5kX29wLT5kX21hbmFnZSk7CiAJCQlyZXQgPSBwYXRoLT5kZW50cnktPmRfb3AtPmRfbWFuYWdlKAotCQkJCXBhdGgtPmRlbnRyeSwgbW91bnRpbmdfaGVyZSwgZmFsc2UpOworCQkJCXBhdGgtPmRlbnRyeSwgZmFsc2UpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldCA9PSAtRUlTRElSID8gMCA6IHJldDsKIAkJfQpAQCAtMTg0MywxMSArMTg0OCwxNSBAQAogCiAJaWYgKCEoZGlyLT5pX21vZGUgJiBTX0lTVlRYKSkKIAkJcmV0dXJuIDA7CisJaWYgKGN1cnJlbnRfdXNlcl9ucygpICE9IGlub2RlX3VzZXJucyhpbm9kZSkpCisJCWdvdG8gb3RoZXJfdXNlcm5zOwogCWlmIChpbm9kZS0+aV91aWQgPT0gZnN1aWQpCiAJCXJldHVybiAwOwogCWlmIChkaXItPmlfdWlkID09IGZzdWlkKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gIWNhcGFibGUoQ0FQX0ZPV05FUik7CisKK290aGVyX3VzZXJuczoKKwlyZXR1cm4gIW5zX2NhcGFibGUoaW5vZGVfdXNlcm5zKGlub2RlKSwgQ0FQX0ZPV05FUik7CiB9CiAKIC8qCkBAIC0yMDI3LDcgKzIwMzYsNyBAQAogCX0KIAogCS8qIE9fTk9BVElNRSBjYW4gb25seSBiZSBzZXQgYnkgdGhlIG93bmVyIG9yIHN1cGVydXNlciAqLwotCWlmIChmbGFnICYgT19OT0FUSU1FICYmICFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCWlmIChmbGFnICYgT19OT0FUSU1FICYmICFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCS8qCkBAIC0yNDQxLDcgKzI0NTAsOCBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JaWYgKChTX0lTQ0hSKG1vZGUpIHx8IFNfSVNCTEsobW9kZSkpICYmICFjYXBhYmxlKENBUF9NS05PRCkpCisJaWYgKChTX0lTQ0hSKG1vZGUpIHx8IFNfSVNCTEsobW9kZSkpICYmCisJICAgICFuc19jYXBhYmxlKGlub2RlX3VzZXJucyhkaXIpLCBDQVBfTUtOT0QpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKCFkaXItPmlfb3AtPm1rbm9kKQpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCBkNzUxMzQ4Li43ZGJhMmVkIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAjZW5kaWYKIH0KIAotc3RydWN0IHZmc21vdW50ICphbGxvY192ZnNtbnQoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0ga21lbV9jYWNoZV96YWxsb2MobW50X2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAobW50KSB7CkBAIC00NjYsMTUgKzQ2Niw3IEBACiAJYnJfd3JpdGVfdW5sb2NrKHZmc21vdW50X2xvY2spOwogfQogCi12b2lkIHNpbXBsZV9zZXRfbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCW1udC0+bW50X3NiID0gc2I7Ci0JbW50LT5tbnRfcm9vdCA9IGRnZXQoc2ItPnNfcm9vdCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woc2ltcGxlX3NldF9tbnQpOwotCi12b2lkIGZyZWVfdmZzbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50KQorc3RhdGljIHZvaWQgZnJlZV92ZnNtbnQoc3RydWN0IHZmc21vdW50ICptbnQpCiB7CiAJa2ZyZWUobW50LT5tbnRfZGV2bmFtZSk7CiAJbW50X2ZyZWVfaWQobW50KTsKQEAgLTY3OCw2ICs2NzAsMzYgQEAKIAlyZXR1cm4gcDsKIH0KIAorc3RydWN0IHZmc21vdW50ICoKK3Zmc19rZXJuX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHZmc21vdW50ICptbnQ7CisJc3RydWN0IGRlbnRyeSAqcm9vdDsKKworCWlmICghdHlwZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwltbnQgPSBhbGxvY192ZnNtbnQobmFtZSk7CisJaWYgKCFtbnQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKGZsYWdzICYgTVNfS0VSTk1PVU5UKQorCQltbnQtPm1udF9mbGFncyA9IE1OVF9JTlRFUk5BTDsKKworCXJvb3QgPSBtb3VudF9mcyh0eXBlLCBmbGFncywgbmFtZSwgZGF0YSk7CisJaWYgKElTX0VSUihyb290KSkgeworCQlmcmVlX3Zmc21udChtbnQpOworCQlyZXR1cm4gRVJSX0NBU1Qocm9vdCk7CisJfQorCisJbW50LT5tbnRfcm9vdCA9IHJvb3Q7CisJbW50LT5tbnRfc2IgPSByb290LT5kX3NiOworCW1udC0+bW50X21vdW50cG9pbnQgPSBtbnQtPm1udF9yb290OworCW1udC0+bW50X3BhcmVudCA9IG1udDsKKwlyZXR1cm4gbW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwodmZzX2tlcm5fbW91bnQpOworCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpjbG9uZV9tbnQoc3RydWN0IHZmc21vdW50ICpvbGQsIHN0cnVjdCBkZW50cnkgKnJvb3QsCiAJCQkJCWludCBmbGFnKQogewpAQCAtMTY0MSw5ICsxNjYzLDM1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBsb2NrX21vdW50KHN0cnVjdCBwYXRoICpwYXRoKQoreworCXN0cnVjdCB2ZnNtb3VudCAqbW50OworcmV0cnk6CisJbXV0ZXhfbG9jaygmcGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlpZiAodW5saWtlbHkoY2FudF9tb3VudChwYXRoLT5kZW50cnkpKSkgeworCQltdXRleF91bmxvY2soJnBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlkb3duX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKKwltbnQgPSBsb29rdXBfbW50KHBhdGgpOworCWlmIChsaWtlbHkoIW1udCkpCisJCXJldHVybiAwOworCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKKwltdXRleF91bmxvY2soJnBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJcGF0aF9wdXQocGF0aCk7CisJcGF0aC0+bW50ID0gbW50OworCXBhdGgtPmRlbnRyeSA9IGRnZXQobW50LT5tbnRfcm9vdCk7CisJZ290byByZXRyeTsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrX21vdW50KHN0cnVjdCBwYXRoICpwYXRoKQoreworCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKKwltdXRleF91bmxvY2soJnBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Cit9CisKIHN0YXRpYyBpbnQgZ3JhZnRfdHJlZShzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHBhdGggKnBhdGgpCiB7Ci0JaW50IGVycjsKIAlpZiAobW50LT5tbnRfc2ItPnNfZmxhZ3MgJiBNU19OT1VTRVIpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNjUxLDE2ICsxNjk5LDEwIEBACiAJICAgICAgU19JU0RJUihtbnQtPm1udF9yb290LT5kX2lub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gLUVOT1RESVI7CiAKLQllcnIgPSAtRU5PRU5UOwotCW11dGV4X2xvY2soJnBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JaWYgKGNhbnRfbW91bnQocGF0aC0+ZGVudHJ5KSkKLQkJZ290byBvdXRfdW5sb2NrOworCWlmIChkX3VubGlua2VkKHBhdGgtPmRlbnRyeSkpCisJCXJldHVybiAtRU5PRU5UOwogCi0JaWYgKCFkX3VubGlua2VkKHBhdGgtPmRlbnRyeSkpCi0JCWVyciA9IGF0dGFjaF9yZWN1cnNpdmVfbW50KG1udCwgcGF0aCwgTlVMTCk7Ci1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmcGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBhdHRhY2hfcmVjdXJzaXZlX21udChtbnQsIHBhdGgsIE5VTEwpOwogfQogCiAvKgpAQCAtMTcyMyw2ICsxNzY1LDcgQEAKIHN0YXRpYyBpbnQgZG9fbG9vcGJhY2soc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKm9sZF9uYW1lLAogCQkJCWludCByZWN1cnNlKQogeworCUxJU1RfSEVBRCh1bW91bnRfbGlzdCk7CiAJc3RydWN0IHBhdGggb2xkX3BhdGg7CiAJc3RydWN0IHZmc21vdW50ICptbnQgPSBOVUxMOwogCWludCBlcnIgPSBtb3VudF9pc19zYWZlKHBhdGgpOwpAQCAtMTczNCwxMyArMTc3NywxNiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlkb3duX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKLQllcnIgPSAtRUlOVkFMOwotCWlmIChJU19NTlRfVU5CSU5EQUJMRShvbGRfcGF0aC5tbnQpKQorCWVyciA9IGxvY2tfbW91bnQocGF0aCk7CisJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKKwllcnIgPSAtRUlOVkFMOworCWlmIChJU19NTlRfVU5CSU5EQUJMRShvbGRfcGF0aC5tbnQpKQorCQlnb3RvIG91dDI7CisKIAlpZiAoIWNoZWNrX21udChwYXRoLT5tbnQpIHx8ICFjaGVja19tbnQob2xkX3BhdGgubW50KSkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0MjsKIAogCWVyciA9IC1FTk9NRU07CiAJaWYgKHJlY3Vyc2UpCkBAIC0xNzQ5LDIwICsxNzk1LDE4IEBACiAJCW1udCA9IGNsb25lX21udChvbGRfcGF0aC5tbnQsIG9sZF9wYXRoLmRlbnRyeSwgMCk7CiAKIAlpZiAoIW1udCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0MjsKIAogCWVyciA9IGdyYWZ0X3RyZWUobW50LCBwYXRoKTsKIAlpZiAoZXJyKSB7Ci0JCUxJU1RfSEVBRCh1bW91bnRfbGlzdCk7Ci0KIAkJYnJfd3JpdGVfbG9jayh2ZnNtb3VudF9sb2NrKTsKIAkJdW1vdW50X3RyZWUobW50LCAwLCAmdW1vdW50X2xpc3QpOwogCQlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7Ci0JCXJlbGVhc2VfbW91bnRzKCZ1bW91bnRfbGlzdCk7CiAJfQotCitvdXQyOgorCXVubG9ja19tb3VudChwYXRoKTsKKwlyZWxlYXNlX21vdW50cygmdW1vdW50X2xpc3QpOwogb3V0OgotCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKIAlwYXRoX3B1dCgmb2xkX3BhdGgpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xODUxLDE4ICsxODk1LDEyIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWRvd25fd3JpdGUoJm5hbWVzcGFjZV9zZW0pOwotCWVyciA9IGZvbGxvd19kb3duKHBhdGgsIHRydWUpOworCWVyciA9IGxvY2tfbW91bnQocGF0aCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoIWNoZWNrX21udChwYXRoLT5tbnQpIHx8ICFjaGVja19tbnQob2xkX3BhdGgubW50KSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRU5PRU5UOwotCW11dGV4X2xvY2soJnBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JaWYgKGNhbnRfbW91bnQocGF0aC0+ZGVudHJ5KSkKIAkJZ290byBvdXQxOwogCiAJaWYgKGRfdW5saW5rZWQocGF0aC0+ZGVudHJ5KSkKQEAgLTE5MDQsMTYgKzE5NDIsODcgQEAKIAkgKiBhdXRvbWF0aWNhbGx5ICovCiAJbGlzdF9kZWxfaW5pdCgmb2xkX3BhdGgubW50LT5tbnRfZXhwaXJlKTsKIG91dDE6Ci0JbXV0ZXhfdW5sb2NrKCZwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCXVubG9ja19tb3VudChwYXRoKTsKIG91dDoKLQl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiAJaWYgKCFlcnIpCiAJCXBhdGhfcHV0KCZwYXJlbnRfcGF0aCk7CiAJcGF0aF9wdXQoJm9sZF9wYXRoKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRvX2FkZF9tb3VudChzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IHBhdGggKiwgaW50KTsKK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmZzX3NldF9zdWJ0eXBlKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBjb25zdCBjaGFyICpmc3R5cGUpCit7CisJaW50IGVycjsKKwljb25zdCBjaGFyICpzdWJ0eXBlID0gc3RyY2hyKGZzdHlwZSwgJy4nKTsKKwlpZiAoc3VidHlwZSkgeworCQlzdWJ0eXBlKys7CisJCWVyciA9IC1FSU5WQUw7CisJCWlmICghc3VidHlwZVswXSkKKwkJCWdvdG8gZXJyOworCX0gZWxzZQorCQlzdWJ0eXBlID0gIiI7CisKKwltbnQtPm1udF9zYi0+c19zdWJ0eXBlID0ga3N0cmR1cChzdWJ0eXBlLCBHRlBfS0VSTkVMKTsKKwllcnIgPSAtRU5PTUVNOworCWlmICghbW50LT5tbnRfc2ItPnNfc3VidHlwZSkKKwkJZ290byBlcnI7CisJcmV0dXJuIG1udDsKKworIGVycjoKKwltbnRwdXQobW50KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdHJ1Y3QgdmZzbW91bnQgKgorZG9fa2Vybl9tb3VudChjb25zdCBjaGFyICpmc3R5cGUsIGludCBmbGFncywgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSA9IGdldF9mc190eXBlKGZzdHlwZSk7CisJc3RydWN0IHZmc21vdW50ICptbnQ7CisJaWYgKCF0eXBlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwltbnQgPSB2ZnNfa2Vybl9tb3VudCh0eXBlLCBmbGFncywgbmFtZSwgZGF0YSk7CisJaWYgKCFJU19FUlIobW50KSAmJiAodHlwZS0+ZnNfZmxhZ3MgJiBGU19IQVNfU1VCVFlQRSkgJiYKKwkgICAgIW1udC0+bW50X3NiLT5zX3N1YnR5cGUpCisJCW1udCA9IGZzX3NldF9zdWJ0eXBlKG1udCwgZnN0eXBlKTsKKwlwdXRfZmlsZXN5c3RlbSh0eXBlKTsKKwlyZXR1cm4gbW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG9fa2Vybl9tb3VudCk7CisKKy8qCisgKiBhZGQgYSBtb3VudCBpbnRvIGEgbmFtZXNwYWNlJ3MgbW91bnQgdHJlZQorICovCitzdGF0aWMgaW50IGRvX2FkZF9tb3VudChzdHJ1Y3QgdmZzbW91bnQgKm5ld21udCwgc3RydWN0IHBhdGggKnBhdGgsIGludCBtbnRfZmxhZ3MpCit7CisJaW50IGVycjsKKworCW1udF9mbGFncyAmPSB+KE1OVF9TSEFSRUQgfCBNTlRfV1JJVEVfSE9MRCB8IE1OVF9JTlRFUk5BTCk7CisKKwllcnIgPSBsb2NrX21vdW50KHBhdGgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSAtRUlOVkFMOworCWlmICghKG1udF9mbGFncyAmIE1OVF9TSFJJTktBQkxFKSAmJiAhY2hlY2tfbW50KHBhdGgtPm1udCkpCisJCWdvdG8gdW5sb2NrOworCisJLyogUmVmdXNlIHRoZSBzYW1lIGZpbGVzeXN0ZW0gb24gdGhlIHNhbWUgbW91bnQgcG9pbnQgKi8KKwllcnIgPSAtRUJVU1k7CisJaWYgKHBhdGgtPm1udC0+bW50X3NiID09IG5ld21udC0+bW50X3NiICYmCisJICAgIHBhdGgtPm1udC0+bW50X3Jvb3QgPT0gcGF0aC0+ZGVudHJ5KQorCQlnb3RvIHVubG9jazsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKFNfSVNMTksobmV3bW50LT5tbnRfcm9vdC0+ZF9pbm9kZS0+aV9tb2RlKSkKKwkJZ290byB1bmxvY2s7CisKKwluZXdtbnQtPm1udF9mbGFncyA9IG1udF9mbGFnczsKKwllcnIgPSBncmFmdF90cmVlKG5ld21udCwgcGF0aCk7CisKK3VubG9jazoKKwl1bmxvY2tfbW91bnQocGF0aCk7CisJcmV0dXJuIGVycjsKK30KIAogLyoKICAqIGNyZWF0ZSBhIG5ldyBtb3VudCBmb3IgdXNlcnNwYWNlIGFuZCByZXF1ZXN0IGl0IHRvIGJlIGFkZGVkIGludG8gdGhlCkBAIC0xOTczLDQzICsyMDgyLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKgotICogYWRkIGEgbW91bnQgaW50byBhIG5hbWVzcGFjZSdzIG1vdW50IHRyZWUKLSAqLwotc3RhdGljIGludCBkb19hZGRfbW91bnQoc3RydWN0IHZmc21vdW50ICpuZXdtbnQsIHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbW50X2ZsYWdzKQotewotCWludCBlcnI7Ci0KLQltbnRfZmxhZ3MgJj0gfihNTlRfU0hBUkVEIHwgTU5UX1dSSVRFX0hPTEQgfCBNTlRfSU5URVJOQUwpOwotCi0JZG93bl93cml0ZSgmbmFtZXNwYWNlX3NlbSk7Ci0JLyogU29tZXRoaW5nIHdhcyBtb3VudGVkIGhlcmUgd2hpbGUgd2Ugc2xlcHQgKi8KLQllcnIgPSBmb2xsb3dfZG93bihwYXRoLCB0cnVlKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byB1bmxvY2s7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWlmICghKG1udF9mbGFncyAmIE1OVF9TSFJJTktBQkxFKSAmJiAhY2hlY2tfbW50KHBhdGgtPm1udCkpCi0JCWdvdG8gdW5sb2NrOwotCi0JLyogUmVmdXNlIHRoZSBzYW1lIGZpbGVzeXN0ZW0gb24gdGhlIHNhbWUgbW91bnQgcG9pbnQgKi8KLQllcnIgPSAtRUJVU1k7Ci0JaWYgKHBhdGgtPm1udC0+bW50X3NiID09IG5ld21udC0+bW50X3NiICYmCi0JICAgIHBhdGgtPm1udC0+bW50X3Jvb3QgPT0gcGF0aC0+ZGVudHJ5KQotCQlnb3RvIHVubG9jazsKLQotCWVyciA9IC1FSU5WQUw7Ci0JaWYgKFNfSVNMTksobmV3bW50LT5tbnRfcm9vdC0+ZF9pbm9kZS0+aV9tb2RlKSkKLQkJZ290byB1bmxvY2s7Ci0KLQluZXdtbnQtPm1udF9mbGFncyA9IG1udF9mbGFnczsKLQllcnIgPSBncmFmdF90cmVlKG5ld21udCwgcGF0aCk7Ci0KLXVubG9jazoKLQl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7Ci0JcmV0dXJuIGVycjsKLX0KLQogLyoqCiAgKiBtbnRfc2V0X2V4cGlyeSAtIFB1dCBhIG1vdW50IG9uIGFuIGV4cGlyYXRpb24gbGlzdAogICogQG1udDogVGhlIG1vdW50IHRvIGxpc3QuCkBAIC0yNTEwLDY1ICsyNTgyLDYwIEBACiAJZXJyb3IgPSB1c2VyX3BhdGhfZGlyKG5ld19yb290LCAmbmV3KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0MDsKLQllcnJvciA9IC1FSU5WQUw7Ci0JaWYgKCFjaGVja19tbnQobmV3Lm1udCkpCi0JCWdvdG8gb3V0MTsKIAogCWVycm9yID0gdXNlcl9wYXRoX2RpcihwdXRfb2xkLCAmb2xkKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0MTsKIAogCWVycm9yID0gc2VjdXJpdHlfc2JfcGl2b3Ryb290KCZvbGQsICZuZXcpOwotCWlmIChlcnJvcikgewotCQlwYXRoX3B1dCgmb2xkKTsKLQkJZ290byBvdXQxOwotCX0KKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0MjsKIAogCWdldF9mc19yb290KGN1cnJlbnQtPmZzLCAmcm9vdCk7Ci0JZG93bl93cml0ZSgmbmFtZXNwYWNlX3NlbSk7Ci0JbXV0ZXhfbG9jaygmb2xkLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZXJyb3IgPSBsb2NrX21vdW50KCZvbGQpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQzOworCiAJZXJyb3IgPSAtRUlOVkFMOwogCWlmIChJU19NTlRfU0hBUkVEKG9sZC5tbnQpIHx8CiAJCUlTX01OVF9TSEFSRUQobmV3Lm1udC0+bW50X3BhcmVudCkgfHwKIAkJSVNfTU5UX1NIQVJFRChyb290Lm1udC0+bW50X3BhcmVudCkpCi0JCWdvdG8gb3V0MjsKLQlpZiAoIWNoZWNrX21udChyb290Lm1udCkpCi0JCWdvdG8gb3V0MjsKKwkJZ290byBvdXQ0OworCWlmICghY2hlY2tfbW50KHJvb3QubW50KSB8fCAhY2hlY2tfbW50KG5ldy5tbnQpKQorCQlnb3RvIG91dDQ7CiAJZXJyb3IgPSAtRU5PRU5UOwotCWlmIChjYW50X21vdW50KG9sZC5kZW50cnkpKQotCQlnb3RvIG91dDI7CiAJaWYgKGRfdW5saW5rZWQobmV3LmRlbnRyeSkpCi0JCWdvdG8gb3V0MjsKKwkJZ290byBvdXQ0OwogCWlmIChkX3VubGlua2VkKG9sZC5kZW50cnkpKQotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0NDsKIAllcnJvciA9IC1FQlVTWTsKIAlpZiAobmV3Lm1udCA9PSByb290Lm1udCB8fAogCSAgICBvbGQubW50ID09IHJvb3QubW50KQotCQlnb3RvIG91dDI7IC8qIGxvb3AsIG9uIHRoZSBzYW1lIGZpbGUgc3lzdGVtICAqLworCQlnb3RvIG91dDQ7IC8qIGxvb3AsIG9uIHRoZSBzYW1lIGZpbGUgc3lzdGVtICAqLwogCWVycm9yID0gLUVJTlZBTDsKIAlpZiAocm9vdC5tbnQtPm1udF9yb290ICE9IHJvb3QuZGVudHJ5KQotCQlnb3RvIG91dDI7IC8qIG5vdCBhIG1vdW50cG9pbnQgKi8KKwkJZ290byBvdXQ0OyAvKiBub3QgYSBtb3VudHBvaW50ICovCiAJaWYgKHJvb3QubW50LT5tbnRfcGFyZW50ID09IHJvb3QubW50KQotCQlnb3RvIG91dDI7IC8qIG5vdCBhdHRhY2hlZCAqLworCQlnb3RvIG91dDQ7IC8qIG5vdCBhdHRhY2hlZCAqLwogCWlmIChuZXcubW50LT5tbnRfcm9vdCAhPSBuZXcuZGVudHJ5KQotCQlnb3RvIG91dDI7IC8qIG5vdCBhIG1vdW50cG9pbnQgKi8KKwkJZ290byBvdXQ0OyAvKiBub3QgYSBtb3VudHBvaW50ICovCiAJaWYgKG5ldy5tbnQtPm1udF9wYXJlbnQgPT0gbmV3Lm1udCkKLQkJZ290byBvdXQyOyAvKiBub3QgYXR0YWNoZWQgKi8KKwkJZ290byBvdXQ0OyAvKiBub3QgYXR0YWNoZWQgKi8KIAkvKiBtYWtlIHN1cmUgd2UgY2FuIHJlYWNoIHB1dF9vbGQgZnJvbSBuZXdfcm9vdCAqLwogCXRtcCA9IG9sZC5tbnQ7Ci0JYnJfd3JpdGVfbG9jayh2ZnNtb3VudF9sb2NrKTsKIAlpZiAodG1wICE9IG5ldy5tbnQpIHsKIAkJZm9yICg7OykgewogCQkJaWYgKHRtcC0+bW50X3BhcmVudCA9PSB0bXApCi0JCQkJZ290byBvdXQzOyAvKiBhbHJlYWR5IG1vdW50ZWQgb24gcHV0X29sZCAqLworCQkJCWdvdG8gb3V0NDsgLyogYWxyZWFkeSBtb3VudGVkIG9uIHB1dF9vbGQgKi8KIAkJCWlmICh0bXAtPm1udF9wYXJlbnQgPT0gbmV3Lm1udCkKIAkJCQlicmVhazsKIAkJCXRtcCA9IHRtcC0+bW50X3BhcmVudDsKIAkJfQogCQlpZiAoIWlzX3N1YmRpcih0bXAtPm1udF9tb3VudHBvaW50LCBuZXcuZGVudHJ5KSkKLQkJCWdvdG8gb3V0MzsKKwkJCWdvdG8gb3V0NDsKIAl9IGVsc2UgaWYgKCFpc19zdWJkaXIob2xkLmRlbnRyeSwgbmV3LmRlbnRyeSkpCi0JCWdvdG8gb3V0MzsKKwkJZ290byBvdXQ0OworCWJyX3dyaXRlX2xvY2sodmZzbW91bnRfbG9jayk7CiAJZGV0YWNoX21udChuZXcubW50LCAmcGFyZW50X3BhdGgpOwogCWRldGFjaF9tbnQocm9vdC5tbnQsICZyb290X3BhcmVudCk7CiAJLyogbW91bnQgb2xkIHJvb3Qgb24gcHV0X29sZCAqLwpAQCAtMjU3OCwyMiArMjY0NSwyMSBAQAogCXRvdWNoX21udF9uYW1lc3BhY2UoY3VycmVudC0+bnNwcm94eS0+bW50X25zKTsKIAlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7CiAJY2hyb290X2ZzX3JlZnMoJnJvb3QsICZuZXcpOwotCiAJZXJyb3IgPSAwOwotCXBhdGhfcHV0KCZyb290X3BhcmVudCk7Ci0JcGF0aF9wdXQoJnBhcmVudF9wYXRoKTsKLW91dDI6Ci0JbXV0ZXhfdW5sb2NrKCZvbGQuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CitvdXQ0OgorCXVubG9ja19tb3VudCgmb2xkKTsKKwlpZiAoIWVycm9yKSB7CisJCXBhdGhfcHV0KCZyb290X3BhcmVudCk7CisJCXBhdGhfcHV0KCZwYXJlbnRfcGF0aCk7CisJfQorb3V0MzoKIAlwYXRoX3B1dCgmcm9vdCk7CitvdXQyOgogCXBhdGhfcHV0KCZvbGQpOwogb3V0MToKIAlwYXRoX3B1dCgmbmV3KTsKIG91dDA6CiAJcmV0dXJuIGVycm9yOwotb3V0MzoKLQlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7Ci0JZ290byBvdXQyOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9tb3VudF90cmVlKHZvaWQpCkBAIC0yNjM1LDcgKzI3MDEsNyBAQAogCWlmICghbW91bnRfaGFzaHRhYmxlKQogCQlwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlIG1vdW50IGhhc2ggdGFibGVcbiIpOwogCi0JcHJpbnRrKCJNb3VudC1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6ICVsdVxuIiwgSEFTSF9TSVpFKTsKKwlwcmludGsoS0VSTl9JTkZPICJNb3VudC1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6ICVsdVxuIiwgSEFTSF9TSVpFKTsKIAogCWZvciAodSA9IDA7IHUgPCBIQVNIX1NJWkU7IHUrKykKIAkJSU5JVF9MSVNUX0hFQUQoJm1vdW50X2hhc2h0YWJsZVt1XSk7CkBAIC0yNjY4LDMgKzI3MzQsOSBAQAogCWtmcmVlKG5zKTsKIH0KIEVYUE9SVF9TWU1CT0wocHV0X21udF9ucyk7CisKK3N0cnVjdCB2ZnNtb3VudCAqa2Vybl9tb3VudF9kYXRhKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCB2b2lkICpkYXRhKQoreworCXJldHVybiB2ZnNfa2Vybl9tb3VudCh0eXBlLCBNU19LRVJOTU9VTlQsIHR5cGUtPm5hbWUsIGRhdGEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa2Vybl9tb3VudF9kYXRhKTsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL01ha2VmaWxlIGIvZnMvbmNwZnMvTWFrZWZpbGUKaW5kZXggNjhlYTA5NS4uYzY2YWY1NiAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvTWFrZWZpbGUKKysrIGIvZnMvbmNwZnMvTWFrZWZpbGUKQEAgLTExLDYgKzExLDYgQEAKIG5jcGZzLSQoQ09ORklHX05DUEZTX05GU19OUykgICArPSBzeW1saW5rLm8KIAogIyBJZiB5b3Ugd2FudCBkZWJ1Z2dpbmcgb3V0cHV0LCBwbGVhc2UgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZQotIyBFWFRSQV9DRkxBR1MgKz0gLURERUJVR19OQ1A9MQorIyBjY2ZsYWdzLXkgOj0gLURERUJVR19OQ1A9MQogCiBDRkxBR1NfbmNwbGliX2tlcm5lbC5vIDo9IC1maW5saW5lLWZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25hbWVzcGFjZS5jIGIvZnMvbmZzL25hbWVzcGFjZS5jCmluZGV4IGMwYjgzNDQuLmJmMWM2ODAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmFtZXNwYWNlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJbmFtZWxlbi0tOwogCWJ1ZmxlbiAtPSBuYW1lbGVuOwogCWlmIChidWZsZW4gPCAwKSB7Ci0JCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOworCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJZ290byBFbG9uZzsKIAl9CkBAIC0xMDgsNyArMTA4LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZW5kOwogRWxvbmdfdW5sb2NrOgotCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKHJlYWRfc2VxcmV0cnkoJnJlbmFtZV9sb2NrLCBzZXEpKQogCQlnb3RvIHJlbmFtZV9yZXRyeTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IGRhMWQ5NzAuLmZmOTMwMjUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtODcsNyArODcsNyBAQAogCQkJICAgIC5kZW50cnkgPSBkZ2V0KGRlbnRyeSl9OwogCWludCBlcnIgPSAwOwogCi0JZXJyID0gZm9sbG93X2Rvd24oJnBhdGgsIGZhbHNlKTsKKwllcnIgPSBmb2xsb3dfZG93bigmcGF0aCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYWxsb2MuYyBiL2ZzL25pbGZzMi9hbGxvYy5jCmluZGV4IGQ3ZmQ2OTYuLjBhMGE2NmQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9hbGxvYy5jCisrKyBiL2ZzL25pbGZzMi9hbGxvYy5jCkBAIC01MjEsOCArNTIxLDggQEAKIAkJCQkgICAgZ3JvdXBfb2Zmc2V0LCBiaXRtYXApKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZW50cnkgbnVtYmVyICVsbHUgYWxyZWFkeSBmcmVlZFxuIiwKIAkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKXJlcS0+cHJfZW50cnlfbnIpOwotCi0JbmlsZnNfcGFsbG9jX2dyb3VwX2Rlc2NfYWRkX2VudHJpZXMoaW5vZGUsIGdyb3VwLCBkZXNjLCAxKTsKKwllbHNlCisJCW5pbGZzX3BhbGxvY19ncm91cF9kZXNjX2FkZF9lbnRyaWVzKGlub2RlLCBncm91cCwgZGVzYywgMSk7CiAKIAlrdW5tYXAocmVxLT5wcl9iaXRtYXBfYmgtPmJfcGFnZSk7CiAJa3VubWFwKHJlcS0+cHJfZGVzY19iaC0+Yl9wYWdlKTsKQEAgLTU1OCw4ICs1NTgsOCBAQAogCQkJCSAgICBncm91cF9vZmZzZXQsIGJpdG1hcCkpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBlbnRyeSBudW1iZXIgJWxsdSBhbHJlYWR5IGZyZWVkXG4iLAogCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpcmVxLT5wcl9lbnRyeV9ucik7Ci0KLQluaWxmc19wYWxsb2NfZ3JvdXBfZGVzY19hZGRfZW50cmllcyhpbm9kZSwgZ3JvdXAsIGRlc2MsIDEpOworCWVsc2UKKwkJbmlsZnNfcGFsbG9jX2dyb3VwX2Rlc2NfYWRkX2VudHJpZXMoaW5vZGUsIGdyb3VwLCBkZXNjLCAxKTsKIAogCWt1bm1hcChyZXEtPnByX2JpdG1hcF9iaC0+Yl9wYWdlKTsKIAlrdW5tYXAocmVxLT5wcl9kZXNjX2JoLT5iX3BhZ2UpOwpAQCAtNjY1LDcgKzY2NSw3IEBACiAJCWZvciAoaiA9IGksIG4gPSAwOwogCQkgICAgIChqIDwgbml0ZW1zKSAmJiBuaWxmc19wYWxsb2NfZ3JvdXBfaXNfaW4oaW5vZGUsIGdyb3VwLAogCQkJCQkJCSAgICAgIGVudHJ5X25yc1tqXSk7Ci0JCSAgICAgaisrLCBuKyspIHsKKwkJICAgICBqKyspIHsKIAkJCW5pbGZzX3BhbGxvY19ncm91cChpbm9kZSwgZW50cnlfbnJzW2pdLCAmZ3JvdXBfb2Zmc2V0KTsKIAkJCWlmICghbmlsZnNfY2xlYXJfYml0X2F0b21pYygKIAkJCQkgICAgbmlsZnNfbWR0X2JnbF9sb2NrKGlub2RlLCBncm91cCksCkBAIC02NzQsNiArNjc0LDggQEAKIAkJCQkgICAgICAgIiVzOiBlbnRyeSBudW1iZXIgJWxsdSBhbHJlYWR5IGZyZWVkXG4iLAogCQkJCSAgICAgICBfX2Z1bmNfXywKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllbnRyeV9ucnNbal0pOworCQkJfSBlbHNlIHsKKwkJCQluKys7CiAJCQl9CiAJCX0KIAkJbmlsZnNfcGFsbG9jX2dyb3VwX2Rlc2NfYWRkX2VudHJpZXMoaW5vZGUsIGdyb3VwLCBkZXNjLCBuKTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9hbGxvYy5oIGIvZnMvbmlsZnMyL2FsbG9jLmgKaW5kZXggOWFmMzRhNy4uZjVmZGUzNiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2FsbG9jLmgKKysrIGIvZnMvbmlsZnMyL2FsbG9jLmgKQEAgLTc0LDcgKzc0LDcgQEAKIAogI2RlZmluZSBuaWxmc19zZXRfYml0X2F0b21pYwkJZXh0Ml9zZXRfYml0X2F0b21pYwogI2RlZmluZSBuaWxmc19jbGVhcl9iaXRfYXRvbWljCQlleHQyX2NsZWFyX2JpdF9hdG9taWMKLSNkZWZpbmUgbmlsZnNfZmluZF9uZXh0X3plcm9fYml0CWV4dDJfZmluZF9uZXh0X3plcm9fYml0CisjZGVmaW5lIG5pbGZzX2ZpbmRfbmV4dF96ZXJvX2JpdAlmaW5kX25leHRfemVyb19iaXRfbGUKIAogLyoKICAqIHBlcnNpc3RlbnQgb2JqZWN0IGFsbG9jYXRvciBjYWNoZQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2JtYXAuYyBiL2ZzL25pbGZzMi9ibWFwLmMKaW5kZXggM2VlNjdjNi4uNDcyM2YwNCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2JtYXAuYworKysgYi9mcy9uaWxmczIvYm1hcC5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlICJuaWxmcy5oIgogI2luY2x1ZGUgImJtYXAuaCIKLSNpbmNsdWRlICJzYi5oIgogI2luY2x1ZGUgImJ0cmVlLmgiCiAjaW5jbHVkZSAiZGlyZWN0LmgiCiAjaW5jbHVkZSAiYnRub2RlLmgiCkBAIC00MjUsMTcgKzQyNCw2IEBACiAvKgogICogSW50ZXJuYWwgdXNlIG9ubHkKICAqLwotCi12b2lkIG5pbGZzX2JtYXBfYWRkX2Jsb2Nrcyhjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgaW50IG4pCi17Ci0JaW5vZGVfYWRkX2J5dGVzKGJtYXAtPmJfaW5vZGUsICgxIDw8IGJtYXAtPmJfaW5vZGUtPmlfYmxrYml0cykgKiBuKTsKLX0KLQotdm9pZCBuaWxmc19ibWFwX3N1Yl9ibG9ja3MoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIGludCBuKQotewotCWlub2RlX3N1Yl9ieXRlcyhibWFwLT5iX2lub2RlLCAoMSA8PCBibWFwLT5iX2lub2RlLT5pX2Jsa2JpdHMpICogbik7Ci19Ci0KIF9fdTY0IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9ibWFwLmggYi9mcy9uaWxmczIvYm1hcC5oCmluZGV4IGJkZTFjMGFhMi4uNDBkOWY0NSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2JtYXAuaAorKysgYi9mcy9uaWxmczIvYm1hcC5oCkBAIC0yNDAsOSArMjQwLDYgQEAKIF9fdTY0IG5pbGZzX2JtYXBfZmluZF90YXJnZXRfc2VxKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICosIF9fdTY0KTsKIF9fdTY0IG5pbGZzX2JtYXBfZmluZF90YXJnZXRfaW5fZ3JvdXAoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKik7CiAKLXZvaWQgbmlsZnNfYm1hcF9hZGRfYmxvY2tzKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICosIGludCk7Ci12b2lkIG5pbGZzX2JtYXBfc3ViX2Jsb2Nrcyhjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqLCBpbnQpOwotCiAKIC8qIEFzc3VtZSB0aGF0IGJtYXAgc2VtYXBob3JlIGlzIGxvY2tlZC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IG5pbGZzX2JtYXBfZGlydHkoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXApCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRyZWUuYyBiL2ZzL25pbGZzMi9idHJlZS5jCmluZGV4IDMwMGMyYmMuLmQ0NTFhZTAgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9idHJlZS5jCisrKyBiL2ZzL25pbGZzMi9idHJlZS5jCkBAIC0xMTc0LDcgKzExNzQsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAluaWxmc19idHJlZV9jb21taXRfaW5zZXJ0KGJ0cmVlLCBwYXRoLCBsZXZlbCwga2V5LCBwdHIpOwotCW5pbGZzX2JtYXBfYWRkX2Jsb2NrcyhidHJlZSwgc3RhdHMuYnNfbmJsb2Nrcyk7CisJbmlsZnNfaW5vZGVfYWRkX2Jsb2NrcyhidHJlZS0+Yl9pbm9kZSwgc3RhdHMuYnNfbmJsb2Nrcyk7CiAKICBvdXQ6CiAJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwpAQCAtMTUxMSw3ICsxNTExLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAJbmlsZnNfYnRyZWVfY29tbWl0X2RlbGV0ZShidHJlZSwgcGF0aCwgbGV2ZWwsIGRhdCk7Ci0JbmlsZnNfYm1hcF9zdWJfYmxvY2tzKGJ0cmVlLCBzdGF0cy5ic19uYmxvY2tzKTsKKwluaWxmc19pbm9kZV9zdWJfYmxvY2tzKGJ0cmVlLT5iX2lub2RlLCBzdGF0cy5ic19uYmxvY2tzKTsKIAogb3V0OgogCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTE3NzYsNyArMTc3Niw3IEBACiAJCXJldHVybiByZXQ7CiAJbmlsZnNfYnRyZWVfY29tbWl0X2NvbnZlcnRfYW5kX2luc2VydChidHJlZSwga2V5LCBwdHIsIGtleXMsIHB0cnMsIG4sCiAJCQkJCSAgICAgIGRpLCBuaSwgYmgpOwotCW5pbGZzX2JtYXBfYWRkX2Jsb2NrcyhidHJlZSwgc3RhdHMuYnNfbmJsb2Nrcyk7CisJbmlsZnNfaW5vZGVfYWRkX2Jsb2NrcyhidHJlZS0+Yl9pbm9kZSwgc3RhdHMuYnNfbmJsb2Nrcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9kaXIuYyBiL2ZzL25pbGZzMi9kaXIuYwppbmRleCA5ZDQ1NzczLi4zYTE5MjM5IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZGlyLmMKKysrIGIvZnMvbmlsZnMyL2Rpci5jCkBAIC00NDAsNyArNDQwLDYgQEAKIAluaWxmc19jb21taXRfY2h1bmsocGFnZSwgbWFwcGluZywgZnJvbSwgdG8pOwogCW5pbGZzX3B1dF9wYWdlKHBhZ2UpOwogCWRpci0+aV9tdGltZSA9IGRpci0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLS8qCU5JTEZTX0koZGlyKS0+aV9mbGFncyAmPSB+TklMRlNfQlRSRUVfRkw7ICovCiB9CiAKIC8qCkBAIC01MzEsNyArNTMwLDYgQEAKIAluaWxmc19zZXRfZGVfdHlwZShkZSwgaW5vZGUpOwogCW5pbGZzX2NvbW1pdF9jaHVuayhwYWdlLCBwYWdlLT5tYXBwaW5nLCBmcm9tLCB0byk7CiAJZGlyLT5pX210aW1lID0gZGlyLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotLyoJTklMRlNfSShkaXIpLT5pX2ZsYWdzICY9IH5OSUxGU19CVFJFRV9GTDsgKi8KIAluaWxmc19tYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJLyogT0ZGU0VUX0NBQ0hFICovCiBvdXRfcHV0OgpAQCAtNTc5LDcgKzU3Nyw2IEBACiAJZGlyLT5pbm9kZSA9IDA7CiAJbmlsZnNfY29tbWl0X2NodW5rKHBhZ2UsIG1hcHBpbmcsIGZyb20sIHRvKTsKIAlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwotLyoJTklMRlNfSShpbm9kZSktPmlfZmxhZ3MgJj0gfk5JTEZTX0JUUkVFX0ZMOyAqLwogb3V0OgogCW5pbGZzX3B1dF9wYWdlKHBhZ2UpOwogCXJldHVybiBlcnI7CkBAIC02ODQsNyArNjgxLDcgQEAKIAkucmVhZGRpcgk9IG5pbGZzX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsCT0gbmlsZnNfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCS5jb21wYXRfaW9jdGwJPSBuaWxmc19pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gbmlsZnNfY29tcGF0X2lvY3RsLAogI2VuZGlmCS8qIENPTkZJR19DT01QQVQgKi8KIAkuZnN5bmMJCT0gbmlsZnNfc3luY19maWxlLAogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGlyZWN0LmMgYi9mcy9uaWxmczIvZGlyZWN0LmMKaW5kZXggMzI0ZDgwYy4uODJmNDg2NSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2RpcmVjdC5jCisrKyBiL2ZzL25pbGZzMi9kaXJlY3QuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpCiAJCQluaWxmc19ibWFwX3NldF90YXJnZXRfdihibWFwLCBrZXksIHJlcS5icHJfcHRyKTsKIAotCQluaWxmc19ibWFwX2FkZF9ibG9ja3MoYm1hcCwgMSk7CisJCW5pbGZzX2lub2RlX2FkZF9ibG9ja3MoYm1hcC0+Yl9pbm9kZSwgMSk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xNjgsNyArMTY4LDcgQEAKIAlpZiAoIXJldCkgewogCQluaWxmc19ibWFwX2NvbW1pdF9lbmRfcHRyKGJtYXAsICZyZXEsIGRhdCk7CiAJCW5pbGZzX2RpcmVjdF9zZXRfcHRyKGJtYXAsIGtleSwgTklMRlNfQk1BUF9JTlZBTElEX1BUUik7Ci0JCW5pbGZzX2JtYXBfc3ViX2Jsb2NrcyhibWFwLCAxKTsKKwkJbmlsZnNfaW5vZGVfc3ViX2Jsb2NrcyhibWFwLT5iX2lub2RlLCAxKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9maWxlLmMgYi9mcy9uaWxmczIvZmlsZS5jCmluZGV4IDJmNTYwYzkuLjkzNTg5ZmMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9maWxlLmMKKysrIGIvZnMvbmlsZnMyL2ZpbGUuYwpAQCAtNTksNyArNTksNyBAQAogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwogCWludCByZXQ7CiAKLQlpZiAodW5saWtlbHkobmlsZnNfbmVhcl9kaXNrX2Z1bGwoTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzKSkpCisJaWYgKHVubGlrZWx5KG5pbGZzX25lYXJfZGlza19mdWxsKGlub2RlLT5pX3NiLT5zX2ZzX2luZm8pKSkKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsgLyogLUVOT1NQQyAqLwogCiAJbG9ja19wYWdlKHBhZ2UpOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLnVubG9ja2VkX2lvY3RsCT0gbmlsZnNfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCS5jb21wYXRfaW9jdGwJPSBuaWxmc19pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gbmlsZnNfY29tcGF0X2lvY3RsLAogI2VuZGlmCS8qIENPTkZJR19DT01QQVQgKi8KIAkubW1hcAkJPSBuaWxmc19maWxlX21tYXAsCiAJLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW5vZGUuYyBiL2ZzL25pbGZzMi9pbm9kZS5jCmluZGV4IDJmZDQ0MGQuLmQ1NjI1YmUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pbm9kZS5jCisrKyBiL2ZzL25pbGZzMi9pbm9kZS5jCkBAIC00MSw2ICs0MSwyNCBAQAogCWludCBmb3JfZ2M7CiB9OwogCit2b2lkIG5pbGZzX2lub2RlX2FkZF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IG4pCit7CisJc3RydWN0IG5pbGZzX3Jvb3QgKnJvb3QgPSBOSUxGU19JKGlub2RlKS0+aV9yb290OworCisJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCAoMSA8PCBpbm9kZS0+aV9ibGtiaXRzKSAqIG4pOworCWlmIChyb290KQorCQlhdG9taWNfYWRkKG4sICZyb290LT5ibG9ja3NfY291bnQpOworfQorCit2b2lkIG5pbGZzX2lub2RlX3N1Yl9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IG4pCit7CisJc3RydWN0IG5pbGZzX3Jvb3QgKnJvb3QgPSBOSUxGU19JKGlub2RlKS0+aV9yb290OworCisJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCAoMSA8PCBpbm9kZS0+aV9ibGtiaXRzKSAqIG4pOworCWlmIChyb290KQorCQlhdG9taWNfc3ViKG4sICZyb290LT5ibG9ja3NfY291bnQpOworfQorCiAvKioKICAqIG5pbGZzX2dldF9ibG9jaygpIC0gZ2V0IGEgZmlsZSBibG9jayBvbiB0aGUgZmlsZXN5c3RlbSAoY2FsbGJhY2sgZnVuY3Rpb24pCiAgKiBAaW5vZGUgLSBpbm9kZSBzdHJ1Y3Qgb2YgdGhlIHRhcmdldCBmaWxlCkBAIC0yNzcsNyArMjk1LDcgQEAKIHN0cnVjdCBpbm9kZSAqbmlsZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IG5pbGZzX2lub2RlX2luZm8gKmlpOwogCXN0cnVjdCBuaWxmc19yb290ICpyb290OwpAQCAtMzE1LDE5ICszMzMsMTYgQEAKIAkJLyogTm8gbG9jayBpcyBuZWVkZWQ7IGlnZXQoKSBlbnN1cmVzIGl0LiAqLwogCX0KIAotCWlpLT5pX2ZsYWdzID0gTklMRlNfSShkaXIpLT5pX2ZsYWdzOwotCWlmIChTX0lTTE5LKG1vZGUpKQotCQlpaS0+aV9mbGFncyAmPSB+KE5JTEZTX0lNTVVUQUJMRV9GTCB8IE5JTEZTX0FQUEVORF9GTCk7Ci0JaWYgKCFTX0lTRElSKG1vZGUpKQotCQlpaS0+aV9mbGFncyAmPSB+TklMRlNfRElSU1lOQ19GTDsKKwlpaS0+aV9mbGFncyA9IG5pbGZzX21hc2tfZmxhZ3MoCisJCW1vZGUsIE5JTEZTX0koZGlyKS0+aV9mbGFncyAmIE5JTEZTX0ZMX0lOSEVSSVRFRCk7CiAKIAkvKiBpaS0+aV9maWxlX2FjbCA9IDA7ICovCiAJLyogaWktPmlfZGlyX2FjbCA9IDA7ICovCiAJaWktPmlfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAJbmlsZnNfc2V0X2lub2RlX2ZsYWdzKGlub2RlKTsKLQlzcGluX2xvY2soJnNiaS0+c19uZXh0X2dlbl9sb2NrKTsKLQlpbm9kZS0+aV9nZW5lcmF0aW9uID0gc2JpLT5zX25leHRfZ2VuZXJhdGlvbisrOwotCXNwaW5fdW5sb2NrKCZzYmktPnNfbmV4dF9nZW5fbG9jayk7CisJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfbmV4dF9nZW5fbG9jayk7CisJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IG5pbGZzLT5uc19uZXh0X2dlbmVyYXRpb24rKzsKKwlzcGluX3VubG9jaygmbmlsZnMtPm5zX25leHRfZ2VuX2xvY2spOwogCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKIAogCWVyciA9IG5pbGZzX2luaXRfYWNsKGlub2RlLCBkaXIpOwpAQCAtMzU5LDE3ICszNzQsMTUgQEAKIAogCWlub2RlLT5pX2ZsYWdzICY9IH4oU19TWU5DIHwgU19BUFBFTkQgfCBTX0lNTVVUQUJMRSB8IFNfTk9BVElNRSB8CiAJCQkgICAgU19ESVJTWU5DKTsKLQlpZiAoZmxhZ3MgJiBOSUxGU19TWU5DX0ZMKQorCWlmIChmbGFncyAmIEZTX1NZTkNfRkwpCiAJCWlub2RlLT5pX2ZsYWdzIHw9IFNfU1lOQzsKLQlpZiAoZmxhZ3MgJiBOSUxGU19BUFBFTkRfRkwpCisJaWYgKGZsYWdzICYgRlNfQVBQRU5EX0ZMKQogCQlpbm9kZS0+aV9mbGFncyB8PSBTX0FQUEVORDsKLQlpZiAoZmxhZ3MgJiBOSUxGU19JTU1VVEFCTEVfRkwpCisJaWYgKGZsYWdzICYgRlNfSU1NVVRBQkxFX0ZMKQogCQlpbm9kZS0+aV9mbGFncyB8PSBTX0lNTVVUQUJMRTsKLSNpZm5kZWYgTklMRlNfQVRJTUVfRElTQUJMRQotCWlmIChmbGFncyAmIE5JTEZTX05PQVRJTUVfRkwpCi0jZW5kaWYKKwlpZiAoZmxhZ3MgJiBGU19OT0FUSU1FX0ZMKQogCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PQVRJTUU7Ci0JaWYgKGZsYWdzICYgTklMRlNfRElSU1lOQ19GTCkKKwlpZiAoZmxhZ3MgJiBGU19ESVJTWU5DX0ZMKQogCQlpbm9kZS0+aV9mbGFncyB8PSBTX0RJUlNZTkM7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soaW5vZGUtPmlfbWFwcGluZywKIAkJCSAgICAgbWFwcGluZ19nZnBfbWFzayhpbm9kZS0+aV9tYXBwaW5nKSAmIH5fX0dGUF9GUyk7CkBAIC00MjAsNyArNDMzLDcgQEAKIAkJCSAgICAgIHN0cnVjdCBuaWxmc19yb290ICpyb290LCB1bnNpZ25lZCBsb25nIGlubywKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBOSUxGU19TQihzYiktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IG5pbGZzX2lub2RlICpyYXdfaW5vZGU7CiAJaW50IGVycjsKQEAgLTcwNyw2ICs3MjAsNyBAQAogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgbmlsZnNfaW5vZGVfaW5mbyAqaWkgPSBOSUxGU19JKGlub2RlKTsKKwlpbnQgcmV0OwogCiAJaWYgKGlub2RlLT5pX25saW5rIHx8ICFpaS0+aV9yb290IHx8IHVubGlrZWx5KGlzX2JhZF9pbm9kZShpbm9kZSkpKSB7CiAJCWlmIChpbm9kZS0+aV9kYXRhLm5ycGFnZXMpCkBAIC03MjUsOCArNzM5LDkgQEAKIAluaWxmc19tYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAllbmRfd3JpdGViYWNrKGlub2RlKTsKIAotCW5pbGZzX2lmaWxlX2RlbGV0ZV9pbm9kZShpaS0+aV9yb290LT5pZmlsZSwgaW5vZGUtPmlfaW5vKTsKLQlhdG9taWNfZGVjKCZpaS0+aV9yb290LT5pbm9kZXNfY291bnQpOworCXJldCA9IG5pbGZzX2lmaWxlX2RlbGV0ZV9pbm9kZShpaS0+aV9yb290LT5pZmlsZSwgaW5vZGUtPmlfaW5vKTsKKwlpZiAoIXJldCkKKwkJYXRvbWljX2RlYygmaWktPmlfcm9vdC0+aW5vZGVzX2NvdW50KTsKIAogCW5pbGZzX2NsZWFyX2lub2RlKGlub2RlKTsKIApAQCAtNzkyLDE4ICs4MDcsMTggQEAKIAogaW50IG5pbGZzX2xvYWRfaW5vZGVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcGJoKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCXN0cnVjdCBuaWxmc19pbm9kZV9pbmZvICppaSA9IE5JTEZTX0koaW5vZGUpOwogCWludCBlcnI7CiAKLQlzcGluX2xvY2soJnNiaS0+c19pbm9kZV9sb2NrKTsKKwlzcGluX2xvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKIAlpZiAoaWktPmlfYmggPT0gTlVMTCkgewotCQlzcGluX3VubG9jaygmc2JpLT5zX2lub2RlX2xvY2spOworCQlzcGluX3VubG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOwogCQllcnIgPSBuaWxmc19pZmlsZV9nZXRfaW5vZGVfYmxvY2soaWktPmlfcm9vdC0+aWZpbGUsCiAJCQkJCQkgIGlub2RlLT5pX2lubywgcGJoKTsKIAkJaWYgKHVubGlrZWx5KGVycikpCiAJCQlyZXR1cm4gZXJyOwotCQlzcGluX2xvY2soJnNiaS0+c19pbm9kZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAJCWlmIChpaS0+aV9iaCA9PSBOVUxMKQogCQkJaWktPmlfYmggPSAqcGJoOwogCQllbHNlIHsKQEAgLTgxNCwzNiArODI5LDM2IEBACiAJCSpwYmggPSBpaS0+aV9iaDsKIAogCWdldF9iaCgqcGJoKTsKLQlzcGluX3VubG9jaygmc2JpLT5zX2lub2RlX2xvY2spOworCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBuaWxmc19pbm9kZV9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBuaWxmc19pbm9kZV9pbmZvICppaSA9IE5JTEZTX0koaW5vZGUpOwotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZpaS0+aV9kaXJ0eSkpIHsKLQkJc3Bpbl9sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJCXNwaW5fbG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOwogCQlyZXQgPSB0ZXN0X2JpdChOSUxGU19JX0RJUlRZLCAmaWktPmlfc3RhdGUpIHx8CiAJCQl0ZXN0X2JpdChOSUxGU19JX0JVU1ksICZpaS0+aV9zdGF0ZSk7Ci0JCXNwaW5fdW5sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKIGludCBuaWxmc19zZXRfZmlsZV9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBucl9kaXJ0eSkKIHsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBuaWxmc19pbm9kZV9pbmZvICppaSA9IE5JTEZTX0koaW5vZGUpOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKIAotCWF0b21pY19hZGQobnJfZGlydHksICZzYmktPnNfbmlsZnMtPm5zX25kaXJ0eWJsa3MpOworCWF0b21pY19hZGQobnJfZGlydHksICZuaWxmcy0+bnNfbmRpcnR5Ymxrcyk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChOSUxGU19JX0RJUlRZLCAmaWktPmlfc3RhdGUpKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmc2JpLT5zX2lub2RlX2xvY2spOworCXNwaW5fbG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOwogCWlmICghdGVzdF9iaXQoTklMRlNfSV9RVUVVRUQsICZpaS0+aV9zdGF0ZSkgJiYKIAkgICAgIXRlc3RfYml0KE5JTEZTX0lfQlVTWSwgJmlpLT5pX3N0YXRlKSkgewogCQkvKiBCZWNhdXNlIHRoaXMgcm91dGluZSBtYXkgcmFjZSB3aXRoIG5pbGZzX2Rpc3Bvc2VfbGlzdCgpLApAQCAtODUxLDE4ICs4NjYsMTggQEAKIAkJaWYgKGxpc3RfZW1wdHkoJmlpLT5pX2RpcnR5KSAmJiBpZ3JhYihpbm9kZSkgPT0gTlVMTCkgewogCQkJLyogVGhpcyB3aWxsIGhhcHBlbiB3aGVuIHNvbWVib2R5IGlzIGZyZWVpbmcKIAkJCSAgIHRoaXMgaW5vZGUuICovCi0JCQluaWxmc193YXJuaW5nKHNiaS0+c19zdXBlciwgX19mdW5jX18sCisJCQluaWxmc193YXJuaW5nKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKIAkJCQkgICAgICAiY2Fubm90IGdldCBpbm9kZSAoaW5vPSVsdSlcbiIsCiAJCQkJICAgICAgaW5vZGUtPmlfaW5vKTsKLQkJCXNwaW5fdW5sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJCQlzcGluX3VubG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOwogCQkJcmV0dXJuIC1FSU5WQUw7IC8qIE5JTEZTX0lfRElSVFkgbWF5IHJlbWFpbiBmb3IKIAkJCQkJICAgZnJlZWluZyBpbm9kZSAqLwogCQl9CiAJCWxpc3RfZGVsKCZpaS0+aV9kaXJ0eSk7Ci0JCWxpc3RfYWRkX3RhaWwoJmlpLT5pX2RpcnR5LCAmc2JpLT5zX2RpcnR5X2ZpbGVzKTsKKwkJbGlzdF9hZGRfdGFpbCgmaWktPmlfZGlydHksICZuaWxmcy0+bnNfZGlydHlfZmlsZXMpOwogCQlzZXRfYml0KE5JTEZTX0lfUVVFVUVELCAmaWktPmlfc3RhdGUpOwogCX0KLQlzcGluX3VubG9jaygmc2JpLT5zX2lub2RlX2xvY2spOworCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pb2N0bC5jIGIvZnMvbmlsZnMyL2lvY3RsLmMKaW5kZXggNDk2NzM4OS4uZjI0NjliYSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lvY3RsLmMKKysrIGIvZnMvbmlsZnMyL2lvY3RsLmMKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CS8qIGNhcGFibGUoKSAqLwogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4JLyogY29weV9mcm9tX3VzZXIoKSwgY29weV90b191c2VyKCkgKi8KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CS8qIGNvbXBhdF9wdHIoKSAqLwogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CS8qIG1udF93YW50X3dyaXRlKCksIG1udF9kcm9wX3dyaXRlKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L25pbGZzMl9mcy5oPgogI2luY2x1ZGUgIm5pbGZzLmgiCiAjaW5jbHVkZSAic2VnbWVudC5oIgpAQCAtOTcsMTEgKzk5LDc0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBuaWxmc19pb2N0bF9nZXRmbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkIF9fdXNlciAqYXJncCkKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOSUxGU19JKGlub2RlKS0+aV9mbGFncyAmIEZTX0ZMX1VTRVJfVklTSUJMRTsKKworCXJldHVybiBwdXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKilhcmdwKTsKK30KKworc3RhdGljIGludCBuaWxmc19pb2N0bF9zZXRmbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQl2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MsIG9sZGZsYWdzOworCWludCByZXQ7CisKKwlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWlmIChnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKilhcmdwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZmxhZ3MgPSBuaWxmc19tYXNrX2ZsYWdzKGlub2RlLT5pX21vZGUsIGZsYWdzKTsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKworCW9sZGZsYWdzID0gTklMRlNfSShpbm9kZSktPmlfZmxhZ3M7CisKKwkvKgorCSAqIFRoZSBJTU1VVEFCTEUgYW5kIEFQUEVORF9PTkxZIGZsYWdzIGNhbiBvbmx5IGJlIGNoYW5nZWQgYnkgdGhlCisJICogcmVsZXZhbnQgY2FwYWJpbGl0eS4KKwkgKi8KKwlyZXQgPSAtRVBFUk07CisJaWYgKCgoZmxhZ3MgXiBvbGRmbGFncykgJiAoRlNfQVBQRU5EX0ZMIHwgRlNfSU1NVVRBQkxFX0ZMKSkgJiYKKwkgICAgIWNhcGFibGUoQ0FQX0xJTlVYX0lNTVVUQUJMRSkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbmlsZnNfdHJhbnNhY3Rpb25fYmVnaW4oaW5vZGUtPmlfc2IsICZ0aSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlOSUxGU19JKGlub2RlKS0+aV9mbGFncyA9IChvbGRmbGFncyAmIH5GU19GTF9VU0VSX01PRElGSUFCTEUpIHwKKwkJKGZsYWdzICYgRlNfRkxfVVNFUl9NT0RJRklBQkxFKTsKKworCW5pbGZzX3NldF9pbm9kZV9mbGFncyhpbm9kZSk7CisJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJaWYgKElTX1NZTkMoaW5vZGUpKQorCQluaWxmc19zZXRfdHJhbnNhY3Rpb25fZmxhZyhOSUxGU19USV9TWU5DKTsKKworCW5pbGZzX21hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldCA9IG5pbGZzX3RyYW5zYWN0aW9uX2NvbW1pdChpbm9kZS0+aV9zYik7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaWxmc19pb2N0bF9nZXR2ZXJzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgX191c2VyICphcmdwKQoreworCXJldHVybiBwdXRfdXNlcihpbm9kZS0+aV9nZW5lcmF0aW9uLCAoaW50IF9fdXNlciAqKWFyZ3ApOworfQorCiBzdGF0aWMgaW50IG5pbGZzX2lvY3RsX2NoYW5nZV9jcG1vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmczsKLQlzdHJ1Y3QgaW5vZGUgKmNwZmlsZSA9IG5pbGZzLT5uc19jcGZpbGU7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwogCXN0cnVjdCBuaWxmc19jcG1vZGUgY3Btb2RlOwogCWludCByZXQ7CkBAIC0xMjEsNyArMTg2LDcgQEAKIAogCW5pbGZzX3RyYW5zYWN0aW9uX2JlZ2luKGlub2RlLT5pX3NiLCAmdGksIDApOwogCXJldCA9IG5pbGZzX2NwZmlsZV9jaGFuZ2VfY3Btb2RlKAotCQljcGZpbGUsIGNwbW9kZS5jbV9jbm8sIGNwbW9kZS5jbV9tb2RlKTsKKwkJbmlsZnMtPm5zX2NwZmlsZSwgY3Btb2RlLmNtX2NubywgY3Btb2RlLmNtX21vZGUpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJbmlsZnNfdHJhbnNhY3Rpb25fYWJvcnQoaW5vZGUtPmlfc2IpOwogCWVsc2UKQEAgLTEzNyw3ICsyMDIsNyBAQAogbmlsZnNfaW9jdGxfZGVsZXRlX2NoZWNrcG9pbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmNwZmlsZSA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmcy0+bnNfY3BmaWxlOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKIAlfX3U2NCBjbm87CiAJaW50IHJldDsKQEAgLTE1NCw3ICsyMTksNyBAQAogCQlnb3RvIG91dDsKIAogCW5pbGZzX3RyYW5zYWN0aW9uX2JlZ2luKGlub2RlLT5pX3NiLCAmdGksIDApOwotCXJldCA9IG5pbGZzX2NwZmlsZV9kZWxldGVfY2hlY2twb2ludChjcGZpbGUsIGNubyk7CisJcmV0ID0gbmlsZnNfY3BmaWxlX2RlbGV0ZV9jaGVja3BvaW50KG5pbGZzLT5uc19jcGZpbGUsIGNubyk7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQluaWxmc190cmFuc2FjdGlvbl9hYm9ydChpbm9kZS0+aV9zYik7CiAJZWxzZQpAQCAtMTgwLDcgKzI0NSw3IEBACiBzdGF0aWMgaW50IG5pbGZzX2lvY3RsX2dldF9jcHN0YXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJc3RydWN0IG5pbGZzX2Nwc3RhdCBjcHN0YXQ7CiAJaW50IHJldDsKIApAQCAtMjExLDcgKzI3Niw3IEBACiBzdGF0aWMgaW50IG5pbGZzX2lvY3RsX2dldF9zdXN0YXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJc3RydWN0IG5pbGZzX3N1c3RhdCBzdXN0YXQ7CiAJaW50IHJldDsKIApAQCAtMjY3LDcgKzMzMiw3IEBACiBzdGF0aWMgaW50IG5pbGZzX2lvY3RsX2dldF9iZGVzY3Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJc3RydWN0IG5pbGZzX2FyZ3YgYXJndjsKIAlpbnQgcmV0OwogCkBAIC0zMzYsNyArNDAxLDcgQEAKIAkJCQkgICBzdHJ1Y3QgbmlsZnNfYXJndiAqYXJndiwgdm9pZCAqYnVmKQogewogCXNpemVfdCBubWVtYnMgPSBhcmd2LT52X25tZW1iczsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IE5JTEZTX1NCKHNiKS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgbmlsZnNfdmRlc2MgKnZkZXNjOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpuOwpAQCAtNTUwLDcgKzYxNSw3IEBACiAJCXJldCA9IFBUUl9FUlIoa2J1ZnNbNF0pOwogCQlnb3RvIG91dDsKIAl9Ci0JbmlsZnMgPSBOSUxGU19TQihpbm9kZS0+aV9zYiktPnNfbmlsZnM7CisJbmlsZnMgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCiAJZm9yIChuID0gMDsgbiA8IDQ7IG4rKykgewogCQlyZXQgPSAtRUlOVkFMOwpAQCAtNjIzLDcgKzY4OCw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlpZiAoYXJncCAhPSBOVUxMKSB7Ci0JCW5pbGZzID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzOworCQluaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJCWRvd25fcmVhZCgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIAkJY25vID0gbmlsZnMtPm5zX2NubyAtIDE7CiAJCXVwX3JlYWQoJm5pbGZzLT5uc19zZWdjdG9yX3NlbSk7CkBAIC02NDEsNyArNzA2LDcgQEAKIAkJCQkJCSAgdm9pZCAqLCBzaXplX3QsIHNpemVfdCkpCiAKIHsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJc3RydWN0IG5pbGZzX2FyZ3YgYXJndjsKIAlpbnQgcmV0OwogCkBAIC02NjYsNiArNzMxLDEyIEBACiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRlNfSU9DX0dFVEZMQUdTOgorCQlyZXR1cm4gbmlsZnNfaW9jdGxfZ2V0ZmxhZ3MoaW5vZGUsIGFyZ3ApOworCWNhc2UgRlNfSU9DX1NFVEZMQUdTOgorCQlyZXR1cm4gbmlsZnNfaW9jdGxfc2V0ZmxhZ3MoaW5vZGUsIGZpbHAsIGFyZ3ApOworCWNhc2UgRlNfSU9DX0dFVFZFUlNJT046CisJCXJldHVybiBuaWxmc19pb2N0bF9nZXR2ZXJzaW9uKGlub2RlLCBhcmdwKTsKIAljYXNlIE5JTEZTX0lPQ1RMX0NIQU5HRV9DUE1PREU6CiAJCXJldHVybiBuaWxmc19pb2N0bF9jaGFuZ2VfY3Btb2RlKGlub2RlLCBmaWxwLCBjbWQsIGFyZ3ApOwogCWNhc2UgTklMRlNfSU9DVExfREVMRVRFX0NIRUNLUE9JTlQ6CkBAIC02OTYsMyArNzY3LDIzIEBACiAJCXJldHVybiAtRU5PVFRZOwogCX0KIH0KKworI2lmZGVmIENPTkZJR19DT01QQVQKK2xvbmcgbmlsZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRlNfSU9DMzJfR0VURkxBR1M6CisJCWNtZCA9IEZTX0lPQ19HRVRGTEFHUzsKKwkJYnJlYWs7CisJY2FzZSBGU19JT0MzMl9TRVRGTEFHUzoKKwkJY21kID0gRlNfSU9DX1NFVEZMQUdTOworCQlicmVhazsKKwljYXNlIEZTX0lPQzMyX0dFVFZFUlNJT046CisJCWNtZCA9IEZTX0lPQ19HRVRWRVJTSU9OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gbmlsZnNfaW9jdGwoZmlscCwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbWR0LmggYi9mcy9uaWxmczIvbWR0LmgKaW5kZXggYjEzNzM0Yi4uZWQ2ODU2MyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL21kdC5oCisrKyBiL2ZzL25pbGZzMi9tZHQuaApAQCAtNjYsNyArNjYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aGVfbmlsZnMgKk5JTEZTX0lfTklMRlMoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlyZXR1cm4gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzOworCXJldHVybiBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogfQogCiAvKiBEZWZhdWx0IEdGUCBmbGFncyB1c2luZyBoaWdobWVtICovCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jCmluZGV4IDE2MTc5MWQuLjU0Njg0OWIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCisrKyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC00ODIsNyArNDgyLDcgQEAKIAlpZiAoaW5vIDwgTklMRlNfRklSU1RfSU5PKHNiKSAmJiBpbm8gIT0gTklMRlNfUk9PVF9JTk8pCiAJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOwogCi0Jcm9vdCA9IG5pbGZzX2xvb2t1cF9yb290KE5JTEZTX1NCKHNiKS0+c19uaWxmcywgY25vKTsKKwlyb290ID0gbmlsZnNfbG9va3VwX3Jvb3Qoc2ItPnNfZnNfaW5mbywgY25vKTsKIAlpZiAoIXJvb3QpCiAJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmlsZnMuaCBiL2ZzL25pbGZzMi9uaWxmcy5oCmluZGV4IDc3N2U4ZmQuLjg1NmU4ZTQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi9uaWxmcy5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbmlsZnMyX2ZzLmg+CiAjaW5jbHVkZSAidGhlX25pbGZzLmgiCi0jaW5jbHVkZSAic2IuaCIKICNpbmNsdWRlICJibWFwLmgiCiAKIC8qCkBAIC0xMjIsNyArMTIxLDcgQEAKICNkZWZpbmUgTklMRlNfU1lTX0lOT19CSVRTICAgXAogICAoKHVuc2lnbmVkIGludCkoMSA8PCBOSUxGU19ST09UX0lOTykgfCBOSUxGU19NRFRfSU5PX0JJVFMpCiAKLSNkZWZpbmUgTklMRlNfRklSU1RfSU5PKHNiKSAgKE5JTEZTX1NCKHNiKS0+c19uaWxmcy0+bnNfZmlyc3RfaW5vKQorI2RlZmluZSBOSUxGU19GSVJTVF9JTk8oc2IpICgoKHN0cnVjdCB0aGVfbmlsZnMgKilzYi0+c19mc19pbmZvKS0+bnNfZmlyc3RfaW5vKQogCiAjZGVmaW5lIE5JTEZTX01EVF9JTk9ERShzYiwgaW5vKSBcCiAgICgoaW5vKSA8IE5JTEZTX0ZJUlNUX0lOTyhzYikgJiYgKE5JTEZTX01EVF9JTk9fQklUUyAmICgxIDw8IChpbm8pKSkpCkBAIC0yMTIsNiArMjExLDIzIEBACiAKICNkZWZpbmUgTklMRlNfQVRJTUVfRElTQUJMRQogCisvKiBGbGFncyB0aGF0IHNob3VsZCBiZSBpbmhlcml0ZWQgYnkgbmV3IGlub2RlcyBmcm9tIHRoZWlyIHBhcmVudC4gKi8KKyNkZWZpbmUgTklMRlNfRkxfSU5IRVJJVEVECQkJCQkJXAorCShGU19TRUNSTV9GTCB8IEZTX1VOUk1fRkwgfCBGU19DT01QUl9GTCB8IEZTX1NZTkNfRkwgfAkJXAorCSBGU19JTU1VVEFCTEVfRkwgfCBGU19BUFBFTkRfRkwgfCBGU19OT0RVTVBfRkwgfCBGU19OT0FUSU1FX0ZMIHxcCisJIEZTX0NPTVBSQkxLX0ZMIHwgRlNfTk9DT01QX0ZMIHwgRlNfTk9UQUlMX0ZMIHwgRlNfRElSU1lOQ19GTCkKKworLyogTWFzayBvdXQgZmxhZ3MgdGhhdCBhcmUgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5vZGUuICovCitzdGF0aWMgaW5saW5lIF9fdTMyIG5pbGZzX21hc2tfZmxhZ3ModW1vZGVfdCBtb2RlLCBfX3UzMiBmbGFncykKK3sKKwlpZiAoU19JU0RJUihtb2RlKSkKKwkJcmV0dXJuIGZsYWdzOworCWVsc2UgaWYgKFNfSVNSRUcobW9kZSkpCisJCXJldHVybiBmbGFncyAmIH4oRlNfRElSU1lOQ19GTCB8IEZTX1RPUERJUl9GTCk7CisJZWxzZQorCQlyZXR1cm4gZmxhZ3MgJiAoRlNfTk9EVU1QX0ZMIHwgRlNfTk9BVElNRV9GTCk7Cit9CisKIC8qIGRpci5jICovCiBleHRlcm4gaW50IG5pbGZzX2FkZF9saW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGlub190IG5pbGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICopOwpAQCAtMjI5LDEwICsyNDUsMTMgQEAKIAogLyogaW9jdGwuYyAqLwogbG9uZyBuaWxmc19pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworbG9uZyBuaWxmc19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGludCBuaWxmc19pb2N0bF9wcmVwYXJlX2NsZWFuX3NlZ21lbnRzKHN0cnVjdCB0aGVfbmlsZnMgKiwgc3RydWN0IG5pbGZzX2FyZ3YgKiwKIAkJCQkgICAgICAgdm9pZCAqKik7CiAKIC8qIGlub2RlLmMgKi8KK3ZvaWQgbmlsZnNfaW5vZGVfYWRkX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbik7Cit2b2lkIG5pbGZzX2lub2RlX3N1Yl9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IG4pOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqbmlsZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgbmlsZnNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IG5pbGZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwpAQCAtMjc1LDExICsyOTQsMTEgQEAKIAkJCQkJICAgICBzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKik7CiBleHRlcm4gdm9pZCBuaWxmc19zZXRfbG9nX2N1cnNvcihzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKiwKIAkJCQkgc3RydWN0IHRoZV9uaWxmcyAqKTsKLWV4dGVybiBzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipuaWxmc19wcmVwYXJlX3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICosCi0JCQkJCQkgICAgICBpbnQgZmxpcCk7Ci1leHRlcm4gaW50IG5pbGZzX2NvbW1pdF9zdXBlcihzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqLCBpbnQpOwotZXh0ZXJuIGludCBuaWxmc19jbGVhbnVwX3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICopOwotaW50IG5pbGZzX2F0dGFjaF9jaGVja3BvaW50KHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksIF9fdTY0IGNubywgaW50IGN1cnJfbW50LAorc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICoqbmlsZnNfcHJlcGFyZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkgICAgICAgaW50IGZsaXApOworaW50IG5pbGZzX2NvbW1pdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZmxhZyk7CitpbnQgbmlsZnNfY2xlYW51cF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2ludCBuaWxmc19hdHRhY2hfY2hlY2twb2ludChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3U2NCBjbm8sIGludCBjdXJyX21udCwKIAkJCSAgICBzdHJ1Y3QgbmlsZnNfcm9vdCAqKnJvb3QpOwogaW50IG5pbGZzX2NoZWNrcG9pbnRfaXNfbW91bnRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3U2NCBjbm8pOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvcmVjb3ZlcnkuYyBiL2ZzL25pbGZzMi9yZWNvdmVyeS5jCmluZGV4IDNkZmNkM2IuLmJhNGE2NDUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9yZWNvdmVyeS5jCisrKyBiL2ZzL25pbGZzMi9yZWNvdmVyeS5jCkBAIC00MjUsNyArNDI1LDcgQEAKIH0KIAogc3RhdGljIGludCBuaWxmc19wcmVwYXJlX3NlZ21lbnRfZm9yX3JlY292ZXJ5KHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAotCQkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLAorCQkJCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfcmVjb3ZlcnlfaW5mbyAqcmkpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZyaS0+cmlfdXNlZF9zZWdtZW50czsKQEAgLTUwMSw3ICs1MDEsNyBAQAogfQogCiBzdGF0aWMgaW50IG5pbGZzX3JlY292ZXJfZHN5bmNfYmxvY2tzKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAotCQkJCSAgICAgIHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfcm9vdCAqcm9vdCwKIAkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NhbHZhZ2VkX2Jsb2NrcykKQEAgLTUxNCw3ICs1MTQsNyBAQAogCWludCBlcnIgPSAwLCBlcnIyID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyYiwgbiwgaGVhZCwgbGlzdCkgewotCQlpbm9kZSA9IG5pbGZzX2lnZXQoc2JpLT5zX3N1cGVyLCByb290LCByYi0+aW5vKTsKKwkJaW5vZGUgPSBuaWxmc19pZ2V0KHNiLCByb290LCByYi0+aW5vKTsKIAkJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQkJaW5vZGUgPSBOVUxMOwpAQCAtNTcyLDExICs1NzIsMTEgQEAKICAqIG5pbGZzX2RvX3JvbGxfZm9yd2FyZCAtIHNhbHZhZ2UgbG9naWNhbCBzZWdtZW50cyBuZXdlciB0aGFuIHRoZSBsYXRlc3QKICAqIGNoZWNrcG9pbnQKICAqIEBuaWxmczogbmlsZnMgb2JqZWN0Ci0gKiBAc2JpOiBuaWxmc19zYl9pbmZvCisgKiBAc2I6IHN1cGVyIGJsb2NrIGluc3RhbmNlCiAgKiBAcmk6IHBvaW50ZXIgdG8gYSBuaWxmc19yZWNvdmVyeV9pbmZvCiAgKi8KIHN0YXRpYyBpbnQgbmlsZnNfZG9fcm9sbF9mb3J3YXJkKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAotCQkJCSBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLAorCQkJCSBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSBzdHJ1Y3QgbmlsZnNfcm9vdCAqcm9vdCwKIAkJCQkgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2luZm8gKnJpKQogewpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJCQkJZ290byBmYWlsZWQ7CiAJCQlpZiAoZmxhZ3MgJiBOSUxGU19TU19MT0dFTkQpIHsKIAkJCQllcnIgPSBuaWxmc19yZWNvdmVyX2RzeW5jX2Jsb2NrcygKLQkJCQkJbmlsZnMsIHNiaSwgcm9vdCwgJmRzeW5jX2Jsb2NrcywKKwkJCQkJbmlsZnMsIHNiLCByb290LCAmZHN5bmNfYmxvY2tzLAogCQkJCQkmbnNhbHZhZ2VkX2Jsb2Nrcyk7CiAJCQkJaWYgKHVubGlrZWx5KGVycikpCiAJCQkJCWdvdG8gZmFpbGVkOwpAQCAtNjgxLDcgKzY4MSw3IEBACiAKIAlpZiAobnNhbHZhZ2VkX2Jsb2NrcykgewogCQlwcmludGsoS0VSTl9JTkZPICJOSUxGUyAoZGV2aWNlICVzKTogc2FsdmFnZWQgJWx1IGJsb2Nrc1xuIiwKLQkJICAgICAgIHNiaS0+c19zdXBlci0+c19pZCwgbnNhbHZhZ2VkX2Jsb2Nrcyk7CisJCSAgICAgICBzYi0+c19pZCwgbnNhbHZhZ2VkX2Jsb2Nrcyk7CiAJCXJpLT5yaV9uZWVkX3JlY292ZXJ5ID0gTklMRlNfUkVDT1ZFUllfUk9MTEZPUldBUkRfRE9ORTsKIAl9CiAgb3V0OgpAQCAtNjk1LDcgKzY5NSw3IEBACiAJcHJpbnRrKEtFUk5fRVJSCiAJICAgICAgICJOSUxGUyAoZGV2aWNlICVzKTogRXJyb3Igcm9sbC1mb3J3YXJkaW5nICIKIAkgICAgICAgIihlcnI9JWQsIHBzZWcgYmxvY2s9JWxsdSkuICIsCi0JICAgICAgIHNiaS0+c19zdXBlci0+c19pZCwgZXJyLCAodW5zaWduZWQgbG9uZyBsb25nKXBzZWdfc3RhcnQpOworCSAgICAgICBzYi0+c19pZCwgZXJyLCAodW5zaWduZWQgbG9uZyBsb25nKXBzZWdfc3RhcnQpOwogCWdvdG8gb3V0OwogfQogCkBAIC03MjQsNyArNzI0LDcgQEAKIC8qKgogICogbmlsZnNfc2FsdmFnZV9vcnBoYW5fbG9ncyAtIHNhbHZhZ2UgbG9ncyB3cml0dGVuIGFmdGVyIHRoZSBsYXRlc3QgY2hlY2twb2ludAogICogQG5pbGZzOiBuaWxmcyBvYmplY3QKLSAqIEBzYmk6IG5pbGZzX3NiX2luZm8KKyAqIEBzYjogc3VwZXIgYmxvY2sgaW5zdGFuY2UKICAqIEByaTogcG9pbnRlciB0byBhIG5pbGZzX3JlY292ZXJ5X2luZm8gc3RydWN0IHRvIHN0b3JlIHNlYXJjaCByZXN1bHRzLgogICoKICAqIFJldHVybiBWYWx1ZTogT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZC4gIE9uIGVycm9yLCBvbmUgb2YgdGhlIGZvbGxvd2luZwpAQCAtNzQxLDcgKzc0MSw3IEBACiAgKiAlLUVOT01FTSAtIEluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlLgogICovCiBpbnQgbmlsZnNfc2FsdmFnZV9vcnBoYW5fbG9ncyhzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywKLQkJCSAgICAgIHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksCisJCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICAgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2luZm8gKnJpKQogewogCXN0cnVjdCBuaWxmc19yb290ICpyb290OwpAQCAtNzUwLDMyICs3NTAsMzIgQEAKIAlpZiAocmktPnJpX2xzZWdzX3N0YXJ0ID09IDAgfHwgcmktPnJpX2xzZWdzX2VuZCA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWVyciA9IG5pbGZzX2F0dGFjaF9jaGVja3BvaW50KHNiaSwgcmktPnJpX2NubywgdHJ1ZSwgJnJvb3QpOworCWVyciA9IG5pbGZzX2F0dGFjaF9jaGVja3BvaW50KHNiLCByaS0+cmlfY25vLCB0cnVlLCAmcm9vdCk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiTklMRlM6IGVycm9yIGxvYWRpbmcgdGhlIGxhdGVzdCBjaGVja3BvaW50LlxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JZXJyID0gbmlsZnNfZG9fcm9sbF9mb3J3YXJkKG5pbGZzLCBzYmksIHJvb3QsIHJpKTsKKwllcnIgPSBuaWxmc19kb19yb2xsX2ZvcndhcmQobmlsZnMsIHNiLCByb290LCByaSk7CiAJaWYgKHVubGlrZWx5KGVycikpCiAJCWdvdG8gZmFpbGVkOwogCiAJaWYgKHJpLT5yaV9uZWVkX3JlY292ZXJ5ID09IE5JTEZTX1JFQ09WRVJZX1JPTExGT1JXQVJEX0RPTkUpIHsKLQkJZXJyID0gbmlsZnNfcHJlcGFyZV9zZWdtZW50X2Zvcl9yZWNvdmVyeShuaWxmcywgc2JpLCByaSk7CisJCWVyciA9IG5pbGZzX3ByZXBhcmVfc2VnbWVudF9mb3JfcmVjb3ZlcnkobmlsZnMsIHNiLCByaSk7CiAJCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBFcnJvciBwcmVwYXJpbmcgc2VnbWVudHMgZm9yICIKIAkJCSAgICAgICAicmVjb3ZlcnkuXG4iKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKLQkJZXJyID0gbmlsZnNfYXR0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc2JpLCByb290KTsKKwkJZXJyID0gbmlsZnNfYXR0YWNoX2xvZ193cml0ZXIoc2IsIHJvb3QpOwogCQlpZiAodW5saWtlbHkoZXJyKSkKIAkJCWdvdG8gZmFpbGVkOwogCiAJCXNldF9uaWxmc19kaXNjb250aW51ZWQobmlsZnMpOwotCQllcnIgPSBuaWxmc19jb25zdHJ1Y3Rfc2VnbWVudChzYmktPnNfc3VwZXIpOwotCQluaWxmc19kZXRhY2hfc2VnbWVudF9jb25zdHJ1Y3RvcihzYmkpOworCQllcnIgPSBuaWxmc19jb25zdHJ1Y3Rfc2VnbWVudChzYik7CisJCW5pbGZzX2RldGFjaF9sb2dfd3JpdGVyKHNiKTsKIAogCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUzogT29wcyEgcmVjb3ZlcnkgZmFpbGVkLiAiCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2IuaCBiL2ZzL25pbGZzMi9zYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTE3NzE1Li4wMDAwMDAwCi0tLSBhL2ZzL25pbGZzMi9zYi5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIHNiLmggLSBOSUxGUyBvbi1tZW1vcnkgc3VwZXIgYmxvY2sgc3RydWN0dXJlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IE5pcHBvbiBUZWxlZ3JhcGggYW5kIFRlbGVwaG9uZSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKLSAqIFdyaXR0ZW4gYnkgUnl1c3VrZSBLb25pc2hpIDxyeXVzdWtlQG9zcmcubmV0PgotICoKLSAqLwotCi0jaWZuZGVmIF9OSUxGU19TQgotI2RlZmluZSBfTklMRlNfU0IKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLQotc3RydWN0IHRoZV9uaWxmczsKLXN0cnVjdCBuaWxmc19zY19pbmZvOwotCi0vKgotICogTklMRlMgc3VwZXItYmxvY2sgZGF0YSBpbiBtZW1vcnkKLSAqLwotc3RydWN0IG5pbGZzX3NiX2luZm8gewotCS8qIE1vdW50IG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBsb25nIHNfbW91bnRfb3B0OwotCXVpZF90IHNfcmVzdWlkOwotCWdpZF90IHNfcmVzZ2lkOwotCi0JdW5zaWduZWQgbG9uZyBzX2ludGVydmFsOwkvKiBjb25zdHJ1Y3Rpb24gaW50ZXJ2YWwgKi8KLQl1bnNpZ25lZCBsb25nIHNfd2F0ZXJtYXJrOwkvKiB0aHJlc2hvbGQgb2YgZGF0YSBhbW91bnQKLQkJCQkJICAgZm9yIHRoZSBzZWdtZW50IGNvbnN0cnVjdGlvbiAqLwotCi0JLyogRnVuZGFtZW50YWwgbWVtYmVycyAqLwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc19zdXBlcjsJLyogcmV2ZXJzZSBwb2ludGVyIHRvIHN1cGVyX2Jsb2NrICovCi0Jc3RydWN0IHRoZV9uaWxmcyAqc19uaWxmczsKLQotCS8qIFNlZ21lbnQgY29uc3RydWN0b3IgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHNfZGlydHlfZmlsZXM7CS8qIGRpcnR5IGZpbGVzIGxpc3QgKi8KLQlzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc19zY19pbmZvOyAvKiBzZWdtZW50IGNvbnN0cnVjdG9yIGluZm8gKi8KLQlzcGlubG9ja190IHNfaW5vZGVfbG9jazsJLyogTG9jayBmb3IgdGhlIG5pbGZzIGlub2RlLgotCQkJCQkgICBJdCBjb3ZlcnMgc19kaXJ0eV9maWxlcyBsaXN0ICovCi0KLQkvKiBJbm9kZSBhbGxvY2F0b3IgKi8KLQlzcGlubG9ja190IHNfbmV4dF9nZW5fbG9jazsKLQl1MzIgc19uZXh0X2dlbmVyYXRpb247Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19zYl9pbmZvICpOSUxGU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXJldHVybiBzYi0+c19mc19pbmZvOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19zY19pbmZvICpOSUxGU19TQyhzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpKQotewotCXJldHVybiBzYmktPnNfc2NfaW5mbzsKLX0KLQotLyoKLSAqIEJpdCBvcGVyYXRpb25zIGZvciB0aGUgbW91bnQgb3B0aW9uCi0gKi8KLSNkZWZpbmUgbmlsZnNfY2xlYXJfb3B0KHNiaSwgb3B0KSAgXAotCWRvIHsgKHNiaSktPnNfbW91bnRfb3B0ICY9IH5OSUxGU19NT1VOVF8jI29wdDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbmlsZnNfc2V0X29wdChzYmksIG9wdCkgIFwKLQlkbyB7IChzYmkpLT5zX21vdW50X29wdCB8PSBOSUxGU19NT1VOVF8jI29wdDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbmlsZnNfdGVzdF9vcHQoc2JpLCBvcHQpICAgKChzYmkpLT5zX21vdW50X29wdCAmIE5JTEZTX01PVU5UXyMjb3B0KQotI2RlZmluZSBuaWxmc193cml0ZV9vcHQoc2JpLCBtYXNrLCBvcHQpCQkJCQlcCi0JZG8geyAoc2JpKS0+c19tb3VudF9vcHQgPQkJCQkJXAotCQkoKChzYmkpLT5zX21vdW50X29wdCAmIH5OSUxGU19NT1VOVF8jI21hc2spIHwJCVwKLQkJIE5JTEZTX01PVU5UXyMjb3B0KTsJCQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogX05JTEZTX1NCICovCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCAyZGU5ZjYzLi5hZmU0ZjIxIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTEwNCw4ICsxMDQsNyBAQAogc3RhdGljIHZvaWQgbmlsZnNfc2VnY3Rvcl9zdGFydF90aW1lcihzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqKTsKIHN0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3JfZG9fZmx1c2goc3RydWN0IG5pbGZzX3NjX2luZm8gKiwgaW50KTsKIHN0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3JfZG9faW1tZWRpYXRlX2ZsdXNoKHN0cnVjdCBuaWxmc19zY19pbmZvICopOwotc3RhdGljIHZvaWQgbmlsZnNfZGlzcG9zZV9saXN0KHN0cnVjdCBuaWxmc19zYl9pbmZvICosIHN0cnVjdCBsaXN0X2hlYWQgKiwKLQkJCSAgICAgICBpbnQpOworc3RhdGljIHZvaWQgbmlsZnNfZGlzcG9zZV9saXN0KHN0cnVjdCB0aGVfbmlsZnMgKiwgc3RydWN0IGxpc3RfaGVhZCAqLCBpbnQpOwogCiAjZGVmaW5lIG5pbGZzX2NudDMyX2d0KGEsIGIpICAgXAogCSh0eXBlY2hlY2soX191MzIsIGEpICYmIHR5cGVjaGVjayhfX3UzMiwgYikgJiYgXApAQCAtMTgyLDcgKzE4MSw2IEBACiAJCQkgICAgc3RydWN0IG5pbGZzX3RyYW5zYWN0aW9uX2luZm8gKnRpLAogCQkJICAgIGludCB2YWNhbmN5X2NoZWNrKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmk7CiAJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnM7CiAJaW50IHJldCA9IG5pbGZzX3ByZXBhcmVfc2VnbWVudF9sb2NrKHRpKTsKIApAQCAtMTkzLDggKzE5MSw3IEBACiAKIAl2ZnNfY2hlY2tfZnJvemVuKHNiLCBTQl9GUkVFWkVfV1JJVEUpOwogCi0Jc2JpID0gTklMRlNfU0Ioc2IpOwotCW5pbGZzID0gc2JpLT5zX25pbGZzOworCW5pbGZzID0gc2ItPnNfZnNfaW5mbzsKIAlkb3duX3JlYWQoJm5pbGZzLT5uc19zZWdjdG9yX3NlbSk7CiAJaWYgKHZhY2FuY3lfY2hlY2sgJiYgbmlsZnNfbmVhcl9kaXNrX2Z1bGwobmlsZnMpKSB7CiAJCXVwX3JlYWQoJm5pbGZzLT5uc19zZWdjdG9yX3NlbSk7CkBAIC0yMjUsOCArMjIyLDcgQEAKIGludCBuaWxmc190cmFuc2FjdGlvbl9jb21taXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyAqdGkgPSBjdXJyZW50LT5qb3VybmFsX2luZm87Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaTsKLQlzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2ItPnNfZnNfaW5mbzsKIAlpbnQgZXJyID0gMDsKIAogCUJVR19PTih0aSA9PSBOVUxMIHx8IHRpLT50aV9tYWdpYyAhPSBOSUxGU19USV9NQUdJQyk7CkBAIC0yMzUsMTYgKzIzMSwxNSBAQAogCQl0aS0+dGlfY291bnQtLTsKIAkJcmV0dXJuIDA7CiAJfQotCXNiaSA9IE5JTEZTX1NCKHNiKTsKLQlzY2kgPSBOSUxGU19TQyhzYmkpOwotCWlmIChzY2kgIT0gTlVMTCkgeworCWlmIChuaWxmcy0+bnNfd3JpdGVyKSB7CisJCXN0cnVjdCBuaWxmc19zY19pbmZvICpzY2kgPSBuaWxmcy0+bnNfd3JpdGVyOworCiAJCWlmICh0aS0+dGlfZmxhZ3MgJiBOSUxGU19USV9DT01NSVQpCiAJCQluaWxmc19zZWdjdG9yX3N0YXJ0X3RpbWVyKHNjaSk7Ci0JCWlmIChhdG9taWNfcmVhZCgmc2JpLT5zX25pbGZzLT5uc19uZGlydHlibGtzKSA+Ci0JCSAgICBzY2ktPnNjX3dhdGVybWFyaykKKwkJaWYgKGF0b21pY19yZWFkKCZuaWxmcy0+bnNfbmRpcnR5YmxrcykgPiBzY2ktPnNjX3dhdGVybWFyaykKIAkJCW5pbGZzX3NlZ2N0b3JfZG9fZmx1c2goc2NpLCAwKTsKIAl9Ci0JdXBfcmVhZCgmc2JpLT5zX25pbGZzLT5uc19zZWdjdG9yX3NlbSk7CisJdXBfcmVhZCgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIAljdXJyZW50LT5qb3VybmFsX2luZm8gPSB0aS0+dGlfc2F2ZTsKIAogCWlmICh0aS0+dGlfZmxhZ3MgJiBOSUxGU19USV9TWU5DKQpAQCAtMjU3LDEzICsyNTIsMTQgQEAKIHZvaWQgbmlsZnNfdHJhbnNhY3Rpb25fYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyAqdGkgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCiAJQlVHX09OKHRpID09IE5VTEwgfHwgdGktPnRpX21hZ2ljICE9IE5JTEZTX1RJX01BR0lDKTsKIAlpZiAodGktPnRpX2NvdW50ID4gMCkgewogCQl0aS0+dGlfY291bnQtLTsKIAkJcmV0dXJuOwogCX0KLQl1cF9yZWFkKCZOSUxGU19TQihzYiktPnNfbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKKwl1cF9yZWFkKCZuaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOwogCiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gdGktPnRpX3NhdmU7CiAJaWYgKHRpLT50aV9mbGFncyAmIE5JTEZTX1RJX0RZTkFNSUNfQUxMT0MpCkBAIC0yNzIsOSArMjY4LDggQEAKIAogdm9pZCBuaWxmc19yZWxheF9wcmVzc3VyZV9pbl9sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKLQlzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpID0gTklMRlNfU0Moc2JpKTsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IG5pbGZzLT5uc193cml0ZXI7CiAKIAlpZiAoIXNjaSB8fCAhc2NpLT5zY19mbHVzaF9yZXF1ZXN0KQogCQlyZXR1cm47CkBAIC0yOTQsMTEgKzI4OSwxMyBAQAogCWRvd25ncmFkZV93cml0ZSgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfdHJhbnNhY3Rpb25fbG9jayhzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLAorc3RhdGljIHZvaWQgbmlsZnNfdHJhbnNhY3Rpb25fbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgIHN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvICp0aSwKIAkJCQkgICBpbnQgZ2NmbGFnKQogewogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvICpjdXJfdGkgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBuaWxmc19zY19pbmZvICpzY2kgPSBuaWxmcy0+bnNfd3JpdGVyOwogCiAJV0FSTl9PTihjdXJfdGkpOwogCXRpLT50aV9mbGFncyA9IE5JTEZTX1RJX1dSSVRFUjsKQEAgLTMwOSwzMCArMzA2LDMxIEBACiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gdGk7CiAKIAlmb3IgKDs7KSB7Ci0JCWRvd25fd3JpdGUoJnNiaS0+c19uaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOwotCQlpZiAoIXRlc3RfYml0KE5JTEZTX1NDX1BSSU9SX0ZMVVNILCAmTklMRlNfU0Moc2JpKS0+c2NfZmxhZ3MpKQorCQlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOworCQlpZiAoIXRlc3RfYml0KE5JTEZTX1NDX1BSSU9SX0ZMVVNILCAmc2NpLT5zY19mbGFncykpCiAJCQlicmVhazsKIAotCQluaWxmc19zZWdjdG9yX2RvX2ltbWVkaWF0ZV9mbHVzaChOSUxGU19TQyhzYmkpKTsKKwkJbmlsZnNfc2VnY3Rvcl9kb19pbW1lZGlhdGVfZmx1c2goc2NpKTsKIAotCQl1cF93cml0ZSgmc2JpLT5zX25pbGZzLT5uc19zZWdjdG9yX3NlbSk7CisJCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOwogCQl5aWVsZCgpOwogCX0KIAlpZiAoZ2NmbGFnKQogCQl0aS0+dGlfZmxhZ3MgfD0gTklMRlNfVElfR0M7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX3RyYW5zYWN0aW9uX3VubG9jayhzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpKQorc3RhdGljIHZvaWQgbmlsZnNfdHJhbnNhY3Rpb25fdW5sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IG5pbGZzX3RyYW5zYWN0aW9uX2luZm8gKnRpID0gY3VycmVudC0+am91cm5hbF9pbmZvOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2ItPnNfZnNfaW5mbzsKIAogCUJVR19PTih0aSA9PSBOVUxMIHx8IHRpLT50aV9tYWdpYyAhPSBOSUxGU19USV9NQUdJQyk7CiAJQlVHX09OKHRpLT50aV9jb3VudCA+IDApOwogCi0JdXBfd3JpdGUoJnNiaS0+c19uaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOworCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOwogCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IHRpLT50aV9zYXZlOwogCWlmICghbGlzdF9lbXB0eSgmdGktPnRpX2dhcmJhZ2UpKQotCQluaWxmc19kaXNwb3NlX2xpc3Qoc2JpLCAmdGktPnRpX2dhcmJhZ2UsIDApOworCQluaWxmc19kaXNwb3NlX2xpc3QobmlsZnMsICZ0aS0+dGlfZ2FyYmFnZSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkICpuaWxmc19zZWdjdG9yX21hcF9zZWdzdW1fZW50cnkoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSwKQEAgLTcxNCw3ICs3MTIsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfZGlzcG9zZV9saXN0KHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksCitzdGF0aWMgdm9pZCBuaWxmc19kaXNwb3NlX2xpc3Qoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsCiAJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgaW50IGZvcmNlKQogewogCXN0cnVjdCBuaWxmc19pbm9kZV9pbmZvICppaSwgKm47CkBAIC03MjIsNyArNzIwLDcgQEAKIAl1bnNpZ25lZCBudiA9IDA7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKLQkJc3Bpbl9sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJCXNwaW5fbG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWksIG4sIGhlYWQsIGlfZGlydHkpIHsKIAkJCWxpc3RfZGVsX2luaXQoJmlpLT5pX2RpcnR5KTsKIAkJCWlmIChmb3JjZSkgewpAQCAtNzMzLDE0ICs3MzEsMTQgQEAKIAkJCX0gZWxzZSBpZiAodGVzdF9iaXQoTklMRlNfSV9ESVJUWSwgJmlpLT5pX3N0YXRlKSkgewogCQkJCXNldF9iaXQoTklMRlNfSV9RVUVVRUQsICZpaS0+aV9zdGF0ZSk7CiAJCQkJbGlzdF9hZGRfdGFpbCgmaWktPmlfZGlydHksCi0JCQkJCSAgICAgICZzYmktPnNfZGlydHlfZmlsZXMpOworCQkJCQkgICAgICAmbmlsZnMtPm5zX2RpcnR5X2ZpbGVzKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWl2ZWNbbnYrK10gPSBpaTsKIAkJCWlmIChudiA9PSBTQ19OX0lOT0RFVkVDKQogCQkJCWJyZWFrOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAKIAkJZm9yIChwaWkgPSBpdmVjOyBudiA+IDA7IHBpaSsrLCBudi0tKQogCQkJaXB1dCgmKCpwaWkpLT52ZnNfaW5vZGUpOwpAQCAtNzczLDI0ICs3NzEsMjMgQEAKIAogc3RhdGljIGludCBuaWxmc19zZWdjdG9yX2NvbmZpcm0oc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSkKIHsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzY2ktPnNjX3N1cGVyLT5zX2ZzX2luZm87CiAJaW50IHJldCA9IDA7CiAKLQlpZiAobmlsZnNfdGVzdF9tZXRhZGF0YV9kaXJ0eShzYmktPnNfbmlsZnMsIHNjaS0+c2Nfcm9vdCkpCisJaWYgKG5pbGZzX3Rlc3RfbWV0YWRhdGFfZGlydHkobmlsZnMsIHNjaS0+c2Nfcm9vdCkpCiAJCXNldF9iaXQoTklMRlNfU0NfRElSVFksICZzY2ktPnNjX2ZsYWdzKTsKIAotCXNwaW5fbG9jaygmc2JpLT5zX2lub2RlX2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZzYmktPnNfZGlydHlfZmlsZXMpICYmIG5pbGZzX3NlZ2N0b3JfY2xlYW4oc2NpKSkKKwlzcGluX2xvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmbmlsZnMtPm5zX2RpcnR5X2ZpbGVzKSAmJiBuaWxmc19zZWdjdG9yX2NsZWFuKHNjaSkpCiAJCXJldCsrOwogCi0Jc3Bpbl91bmxvY2soJnNiaS0+c19pbm9kZV9sb2NrKTsKKwlzcGluX3VubG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3JfY2xlYXJfbWV0YWRhdGFfZGlydHkoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSkKIHsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzY2ktPnNjX3N1cGVyLT5zX2ZzX2luZm87CiAKIAluaWxmc19tZHRfY2xlYXJfZGlydHkoc2NpLT5zY19yb290LT5pZmlsZSk7CiAJbmlsZnNfbWR0X2NsZWFyX2RpcnR5KG5pbGZzLT5uc19jcGZpbGUpOwpAQCAtODAwLDcgKzc5Nyw3IEBACiAKIHN0YXRpYyBpbnQgbmlsZnNfc2VnY3Rvcl9jcmVhdGVfY2hlY2twb2ludChzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpKQogewotCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2NpLT5zY19zYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzY2ktPnNjX3N1cGVyLT5zX2ZzX2luZm87CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9jcDsKIAlzdHJ1Y3QgbmlsZnNfY2hlY2twb2ludCAqcmF3X2NwOwogCWludCBlcnI7CkBAIC04MjQsOCArODIxLDcgQEAKIAogc3RhdGljIGludCBuaWxmc19zZWdjdG9yX2ZpbGxfaW5fY2hlY2twb2ludChzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBzY2ktPnNjX3NiaTsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNjaS0+c2Nfc3VwZXItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX2NwOwogCXN0cnVjdCBuaWxmc19jaGVja3BvaW50ICpyYXdfY3A7CiAJaW50IGVycjsKQEAgLTEwNDksOCArMTA0NSw3IEBACiAKIHN0YXRpYyBpbnQgbmlsZnNfc2VnY3Rvcl9jb2xsZWN0X2Jsb2NrcyhzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLCBpbnQgbW9kZSkKIHsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzY2ktPnNjX3N1cGVyLT5zX2ZzX2luZm87CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgbmlsZnNfaW5vZGVfaW5mbyAqaWk7CiAJc2l6ZV90IG5kb25lOwpAQCAtMTg1OSw3ICsxODU0LDcgQEAKIHsKIAlzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKnNlZ2J1ZjsKIAlzdHJ1Y3QgcGFnZSAqYmRfcGFnZSA9IE5VTEwsICpmc19wYWdlID0gTlVMTDsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNjaS0+c2Nfc2JpLT5zX25pbGZzOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2NpLT5zY19zdXBlci0+c19mc19pbmZvOwogCWludCB1cGRhdGVfc3IgPSBmYWxzZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VnYnVmLCAmc2NpLT5zY193cml0ZV9sb2dzLCBzYl9saXN0KSB7CkBAIC0xOTYzLDMwICsxOTU4LDMwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBuaWxmc19zZWdjdG9yX2NoZWNrX2luX2ZpbGVzKHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksCi0JCQkJCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCitzdGF0aWMgaW50IG5pbGZzX3NlZ2N0b3JfY29sbGVjdF9kaXJ0eV9maWxlcyhzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLAorCQkJCQkgICAgIHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKQogewogCXN0cnVjdCBuaWxmc19pbm9kZV9pbmZvICppaSwgKm47CiAJc3RydWN0IGlub2RlICppZmlsZSA9IHNjaS0+c2Nfcm9vdC0+aWZpbGU7CiAKLQlzcGluX2xvY2soJnNiaS0+c19pbm9kZV9sb2NrKTsKKwlzcGluX2xvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKICByZXRyeToKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWksIG4sICZzYmktPnNfZGlydHlfZmlsZXMsIGlfZGlydHkpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWksIG4sICZuaWxmcy0+bnNfZGlydHlfZmlsZXMsIGlfZGlydHkpIHsKIAkJaWYgKCFpaS0+aV9iaCkgewogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICppYmg7CiAJCQlpbnQgZXJyOwogCi0JCQlzcGluX3VubG9jaygmc2JpLT5zX2lub2RlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKIAkJCWVyciA9IG5pbGZzX2lmaWxlX2dldF9pbm9kZV9ibG9jaygKIAkJCQlpZmlsZSwgaWktPnZmc19pbm9kZS5pX2lubywgJmliaCk7CiAJCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJCW5pbGZzX3dhcm5pbmcoc2JpLT5zX3N1cGVyLCBfX2Z1bmNfXywKKwkJCQluaWxmc193YXJuaW5nKHNjaS0+c2Nfc3VwZXIsIF9fZnVuY19fLAogCQkJCQkgICAgICAiZmFpbGVkIHRvIGdldCBpbm9kZSBibG9jay5cbiIpOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CiAJCQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoaWJoKTsKIAkJCW5pbGZzX21kdF9tYXJrX2RpcnR5KGlmaWxlKTsKLQkJCXNwaW5fbG9jaygmc2JpLT5zX2lub2RlX2xvY2spOworCQkJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAJCQlpZiAobGlrZWx5KCFpaS0+aV9iaCkpCiAJCQkJaWktPmlfYmggPSBpYmg7CiAJCQllbHNlCkBAIC0xOTk5LDE4ICsxOTk0LDE4IEBACiAJCWxpc3RfZGVsKCZpaS0+aV9kaXJ0eSk7CiAJCWxpc3RfYWRkX3RhaWwoJmlpLT5pX2RpcnR5LCAmc2NpLT5zY19kaXJ0eV9maWxlcyk7CiAJfQotCXNwaW5fdW5sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19zZWdjdG9yX2NoZWNrX291dF9maWxlcyhzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLAotCQkJCQkgIHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCitzdGF0aWMgdm9pZCBuaWxmc19zZWdjdG9yX2Ryb3Bfd3JpdHRlbl9maWxlcyhzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLAorCQkJCQkgICAgIHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKQogewogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvICp0aSA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIAlzdHJ1Y3QgbmlsZnNfaW5vZGVfaW5mbyAqaWksICpuOwogCi0Jc3Bpbl9sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlpLCBuLCAmc2NpLT5zY19kaXJ0eV9maWxlcywgaV9kaXJ0eSkgewogCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChOSUxGU19JX1VQREFURUQsICZpaS0+aV9zdGF0ZSkgfHwKIAkJICAgIHRlc3RfYml0KE5JTEZTX0lfRElSVFksICZpaS0+aV9zdGF0ZSkpCkBAIC0yMDIyLDcgKzIwMTcsNyBAQAogCQlsaXN0X2RlbCgmaWktPmlfZGlydHkpOwogCQlsaXN0X2FkZF90YWlsKCZpaS0+aV9kaXJ0eSwgJnRpLT50aV9nYXJiYWdlKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNiaS0+c19pbm9kZV9sb2NrKTsKKwlzcGluX3VubG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOwogfQogCiAvKgpAQCAtMjAzMCwxNSArMjAyNSwxNCBAQAogICovCiBzdGF0aWMgaW50IG5pbGZzX3NlZ2N0b3JfZG9fY29uc3RydWN0KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksIGludCBtb2RlKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBzY2ktPnNjX3NiaTsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNjaS0+c2Nfc3VwZXItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgcGFnZSAqZmFpbGVkX3BhZ2U7CiAJaW50IGVycjsKIAogCXNjaS0+c2Nfc3RhZ2Uuc2NudCA9IE5JTEZTX1NUX0lOSVQ7CiAJc2NpLT5zY19jbm8gPSBuaWxmcy0+bnNfY25vOwogCi0JZXJyID0gbmlsZnNfc2VnY3Rvcl9jaGVja19pbl9maWxlcyhzY2ksIHNiaSk7CisJZXJyID0gbmlsZnNfc2VnY3Rvcl9jb2xsZWN0X2RpcnR5X2ZpbGVzKHNjaSwgbmlsZnMpOwogCWlmICh1bmxpa2VseShlcnIpKQogCQlnb3RvIG91dDsKIApAQCAtMjExNiw3ICsyMTEwLDcgQEAKIAl9IHdoaWxlIChzY2ktPnNjX3N0YWdlLnNjbnQgIT0gTklMRlNfU1RfRE9ORSk7CiAKICBvdXQ6Ci0JbmlsZnNfc2VnY3Rvcl9jaGVja19vdXRfZmlsZXMoc2NpLCBzYmkpOworCW5pbGZzX3NlZ2N0b3JfZHJvcF93cml0dGVuX2ZpbGVzKHNjaSwgbmlsZnMpOwogCXJldHVybiBlcnI7CiAKICBmYWlsZWRfdG9fd3JpdGU6CkBAIC0yMTY5LDggKzIxNjMsOCBAQAogICovCiB2b2lkIG5pbGZzX2ZsdXNoX3NlZ21lbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW5vKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7Ci0Jc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IE5JTEZTX1NDKHNiaSk7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBuaWxmc19zY19pbmZvICpzY2kgPSBuaWxmcy0+bnNfd3JpdGVyOwogCiAJaWYgKCFzY2kgfHwgbmlsZnNfZG9pbmdfY29uc3RydWN0aW9uKCkpCiAJCXJldHVybjsKQEAgLTIyNTksOCArMjI1Myw4IEBACiAgKi8KIGludCBuaWxmc19jb25zdHJ1Y3Rfc2VnbWVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7Ci0Jc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IE5JTEZTX1NDKHNiaSk7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBuaWxmc19zY19pbmZvICpzY2kgPSBuaWxmcy0+bnNfd3JpdGVyOwogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvICp0aTsKIAlpbnQgZXJyOwogCkBAIC0yMjk3LDggKzIyOTEsOCBAQAogaW50IG5pbGZzX2NvbnN0cnVjdF9kc3luY19zZWdtZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiB7Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKLQlzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpID0gTklMRlNfU0Moc2JpKTsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IG5pbGZzLT5uc193cml0ZXI7CiAJc3RydWN0IG5pbGZzX2lub2RlX2luZm8gKmlpOwogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwogCWludCBlcnIgPSAwOwpAQCAtMjMwNiwzMyArMjMwMCwzMyBAQAogCWlmICghc2NpKQogCQlyZXR1cm4gLUVST0ZTOwogCi0JbmlsZnNfdHJhbnNhY3Rpb25fbG9jayhzYmksICZ0aSwgMCk7CisJbmlsZnNfdHJhbnNhY3Rpb25fbG9jayhzYiwgJnRpLCAwKTsKIAogCWlpID0gTklMRlNfSShpbm9kZSk7CiAJaWYgKHRlc3RfYml0KE5JTEZTX0lfSU5PREVfRElSVFksICZpaS0+aV9zdGF0ZSkgfHwKLQkgICAgbmlsZnNfdGVzdF9vcHQoc2JpLCBTVFJJQ1RfT1JERVIpIHx8CisJICAgIG5pbGZzX3Rlc3Rfb3B0KG5pbGZzLCBTVFJJQ1RfT1JERVIpIHx8CiAJICAgIHRlc3RfYml0KE5JTEZTX1NDX1VOQ0xPU0VELCAmc2NpLT5zY19mbGFncykgfHwKLQkgICAgbmlsZnNfZGlzY29udGludWVkKHNiaS0+c19uaWxmcykpIHsKLQkJbmlsZnNfdHJhbnNhY3Rpb25fdW5sb2NrKHNiaSk7CisJICAgIG5pbGZzX2Rpc2NvbnRpbnVlZChuaWxmcykpIHsKKwkJbmlsZnNfdHJhbnNhY3Rpb25fdW5sb2NrKHNiKTsKIAkJZXJyID0gbmlsZnNfc2VnY3Rvcl9zeW5jKHNjaSk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0Jc3Bpbl9sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAJaWYgKCF0ZXN0X2JpdChOSUxGU19JX1FVRVVFRCwgJmlpLT5pX3N0YXRlKSAmJgogCSAgICAhdGVzdF9iaXQoTklMRlNfSV9CVVNZLCAmaWktPmlfc3RhdGUpKSB7Ci0JCXNwaW5fdW5sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7Ci0JCW5pbGZzX3RyYW5zYWN0aW9uX3VubG9jayhzYmkpOworCQlzcGluX3VubG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOworCQluaWxmc190cmFuc2FjdGlvbl91bmxvY2soc2IpOwogCQlyZXR1cm4gMDsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNiaS0+c19pbm9kZV9sb2NrKTsKKwlzcGluX3VubG9jaygmbmlsZnMtPm5zX2lub2RlX2xvY2spOwogCXNjaS0+c2NfZHN5bmNfaW5vZGUgPSBpaTsKIAlzY2ktPnNjX2RzeW5jX3N0YXJ0ID0gc3RhcnQ7CiAJc2NpLT5zY19kc3luY19lbmQgPSBlbmQ7CiAKIAllcnIgPSBuaWxmc19zZWdjdG9yX2RvX2NvbnN0cnVjdChzY2ksIFNDX0xTRUdfRFNZTkMpOwogCi0JbmlsZnNfdHJhbnNhY3Rpb25fdW5sb2NrKHNiaSk7CisJbmlsZnNfdHJhbnNhY3Rpb25fdW5sb2NrKHNiKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMzg4LDggKzIzODIsNyBAQAogICovCiBzdGF0aWMgaW50IG5pbGZzX3NlZ2N0b3JfY29uc3RydWN0KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksIGludCBtb2RlKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBzY2ktPnNjX3NiaTsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNjaS0+c2Nfc3VwZXItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnA7CiAJaW50IGVyciA9IDA7CiAKQEAgLTI0MDcsMTEgKzI0MDAsMTIgQEAKIAkJICAgIG5pbGZzX2Rpc2NvbnRpbnVlZChuaWxmcykpIHsKIAkJCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwogCQkJZXJyID0gLUVJTzsKLQkJCXNicCA9IG5pbGZzX3ByZXBhcmVfc3VwZXIoc2JpLAorCQkJc2JwID0gbmlsZnNfcHJlcGFyZV9zdXBlcihzY2ktPnNjX3N1cGVyLAogCQkJCQkJICBuaWxmc19zYl93aWxsX2ZsaXAobmlsZnMpKTsKIAkJCWlmIChsaWtlbHkoc2JwKSkgewogCQkJCW5pbGZzX3NldF9sb2dfY3Vyc29yKHNicFswXSwgbmlsZnMpOwotCQkJCWVyciA9IG5pbGZzX2NvbW1pdF9zdXBlcihzYmksIE5JTEZTX1NCX0NPTU1JVCk7CisJCQkJZXJyID0gbmlsZnNfY29tbWl0X3N1cGVyKHNjaS0+c2Nfc3VwZXIsCisJCQkJCQkJIE5JTEZTX1NCX0NPTU1JVCk7CiAJCQl9CiAJCQl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJCX0KQEAgLTI0NDMsMTYgKzI0MzcsMTUgQEAKIGludCBuaWxmc19jbGVhbl9zZWdtZW50cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbmlsZnNfYXJndiAqYXJndiwKIAkJCSB2b2lkICoqa2J1ZnMpCiB7Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKLQlzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpID0gTklMRlNfU0Moc2JpKTsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IG5pbGZzLT5uc193cml0ZXI7CiAJc3RydWN0IG5pbGZzX3RyYW5zYWN0aW9uX2luZm8gdGk7CiAJaW50IGVycjsKIAogCWlmICh1bmxpa2VseSghc2NpKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAotCW5pbGZzX3RyYW5zYWN0aW9uX2xvY2soc2JpLCAmdGksIDEpOworCW5pbGZzX3RyYW5zYWN0aW9uX2xvY2soc2IsICZ0aSwgMSk7CiAKIAllcnIgPSBuaWxmc19tZHRfc2F2ZV90b19zaGFkb3dfbWFwKG5pbGZzLT5uc19kYXQpOwogCWlmICh1bmxpa2VseShlcnIpKQpAQCAtMjQ4MCwxNCArMjQ3MywxNCBAQAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlzY2hlZHVsZV90aW1lb3V0KHNjaS0+c2NfaW50ZXJ2YWwpOwogCX0KLQlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBESVNDQVJEKSkgeworCWlmIChuaWxmc190ZXN0X29wdChuaWxmcywgRElTQ0FSRCkpIHsKIAkJaW50IHJldCA9IG5pbGZzX2Rpc2NhcmRfc2VnbWVudHMobmlsZnMsIHNjaS0+c2NfZnJlZXNlZ3MsCiAJCQkJCQkgc2NpLT5zY19uZnJlZXNlZ3MpOwogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIk5JTEZTIHdhcm5pbmc6IGVycm9yICVkIG9uIGRpc2NhcmQgcmVxdWVzdCwgIgogCQkJICAgICAgICJ0dXJuaW5nIGRpc2NhcmRzIG9mZiBmb3IgdGhlIGRldmljZVxuIiwgcmV0KTsKLQkJCW5pbGZzX2NsZWFyX29wdChzYmksIERJU0NBUkQpOworCQkJbmlsZnNfY2xlYXJfb3B0KG5pbGZzLCBESVNDQVJEKTsKIAkJfQogCX0KIApAQCAtMjQ5NSwxNiArMjQ4OCwxNSBAQAogCXNjaS0+c2NfZnJlZXNlZ3MgPSBOVUxMOwogCXNjaS0+c2NfbmZyZWVzZWdzID0gMDsKIAluaWxmc19tZHRfY2xlYXJfc2hhZG93X21hcChuaWxmcy0+bnNfZGF0KTsKLQluaWxmc190cmFuc2FjdGlvbl91bmxvY2soc2JpKTsKKwluaWxmc190cmFuc2FjdGlvbl91bmxvY2soc2IpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3JfdGhyZWFkX2NvbnN0cnVjdChzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLCBpbnQgbW9kZSkKIHsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7CiAJc3RydWN0IG5pbGZzX3RyYW5zYWN0aW9uX2luZm8gdGk7CiAKLQluaWxmc190cmFuc2FjdGlvbl9sb2NrKHNiaSwgJnRpLCAwKTsKKwluaWxmc190cmFuc2FjdGlvbl9sb2NrKHNjaS0+c2Nfc3VwZXIsICZ0aSwgMCk7CiAJbmlsZnNfc2VnY3Rvcl9jb25zdHJ1Y3Qoc2NpLCBtb2RlKTsKIAogCS8qCkBAIC0yNTE1LDcgKzI1MDcsNyBAQAogCWlmICh0ZXN0X2JpdChOSUxGU19TQ19VTkNMT1NFRCwgJnNjaS0+c2NfZmxhZ3MpKQogCQluaWxmc19zZWdjdG9yX3N0YXJ0X3RpbWVyKHNjaSk7CiAKLQluaWxmc190cmFuc2FjdGlvbl91bmxvY2soc2JpKTsKKwluaWxmc190cmFuc2FjdGlvbl91bmxvY2soc2NpLT5zY19zdXBlcik7CiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3JfZG9faW1tZWRpYXRlX2ZsdXNoKHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2kpCkBAIC0yNTYxLDcgKzI1NTMsNyBAQAogc3RhdGljIGludCBuaWxmc19zZWdjdG9yX3RocmVhZCh2b2lkICphcmcpCiB7CiAJc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IChzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqKWFyZzsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNjaS0+c2Nfc2JpLT5zX25pbGZzOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2NpLT5zY19zdXBlci0+c19mc19pbmZvOwogCWludCB0aW1lb3V0ID0gMDsKIAogCXNjaS0+c2NfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnQ7CkBAIC0yNjcyLDE3ICsyNjY0LDE3IEBACiAvKgogICogU2V0dXAgJiBjbGVhbi11cCBmdW5jdGlvbnMKICAqLwotc3RhdGljIHN0cnVjdCBuaWxmc19zY19pbmZvICpuaWxmc19zZWdjdG9yX25ldyhzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLAorc3RhdGljIHN0cnVjdCBuaWxmc19zY19pbmZvICpuaWxmc19zZWdjdG9yX25ldyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgICAgICAgc3RydWN0IG5pbGZzX3Jvb3QgKnJvb3QpCiB7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBuaWxmc19zY19pbmZvICpzY2k7CiAKIAlzY2kgPSBremFsbG9jKHNpemVvZigqc2NpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzY2kpCiAJCXJldHVybiBOVUxMOwogCi0Jc2NpLT5zY19zYmkgPSBzYmk7Ci0Jc2NpLT5zY19zdXBlciA9IHNiaS0+c19zdXBlcjsKKwlzY2ktPnNjX3N1cGVyID0gc2I7CiAKIAluaWxmc19nZXRfcm9vdChyb290KTsKIAlzY2ktPnNjX3Jvb3QgPSByb290OwpAQCAtMjcwMiwxMCArMjY5NCwxMCBAQAogCXNjaS0+c2NfbWpjcF9mcmVxID0gSFogKiBOSUxGU19TQ19ERUZBVUxUX1NSX0ZSRVE7CiAJc2NpLT5zY193YXRlcm1hcmsgPSBOSUxGU19TQ19ERUZBVUxUX1dBVEVSTUFSSzsKIAotCWlmIChzYmktPnNfaW50ZXJ2YWwpCi0JCXNjaS0+c2NfaW50ZXJ2YWwgPSBzYmktPnNfaW50ZXJ2YWw7Ci0JaWYgKHNiaS0+c193YXRlcm1hcmspCi0JCXNjaS0+c2Nfd2F0ZXJtYXJrID0gc2JpLT5zX3dhdGVybWFyazsKKwlpZiAobmlsZnMtPm5zX2ludGVydmFsKQorCQlzY2ktPnNjX2ludGVydmFsID0gbmlsZnMtPm5zX2ludGVydmFsOworCWlmIChuaWxmcy0+bnNfd2F0ZXJtYXJrKQorCQlzY2ktPnNjX3dhdGVybWFyayA9IG5pbGZzLT5uc193YXRlcm1hcms7CiAJcmV0dXJuIHNjaTsKIH0KIApAQCAtMjcxNiwxMiArMjcwOCwxMSBAQAogCS8qIFRoZSBzZWdjdG9yZCB0aHJlYWQgd2FzIHN0b3BwZWQgYW5kIGl0cyB0aW1lciB3YXMgcmVtb3ZlZC4KIAkgICBCdXQgc29tZSB0YXNrcyByZW1haW4uICovCiAJZG8gewotCQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7CiAJCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwogCi0JCW5pbGZzX3RyYW5zYWN0aW9uX2xvY2soc2JpLCAmdGksIDApOworCQluaWxmc190cmFuc2FjdGlvbl9sb2NrKHNjaS0+c2Nfc3VwZXIsICZ0aSwgMCk7CiAJCXJldCA9IG5pbGZzX3NlZ2N0b3JfY29uc3RydWN0KHNjaSwgU0NfTFNFR19TUik7Ci0JCW5pbGZzX3RyYW5zYWN0aW9uX3VubG9jayhzYmkpOworCQluaWxmc190cmFuc2FjdGlvbl91bmxvY2soc2NpLT5zY19zdXBlcik7CiAKIAl9IHdoaWxlIChyZXQgJiYgcmV0cnljb3VudC0tID4gMCk7CiB9CkBAIC0yNzM2LDEwICsyNzI3LDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3JfZGVzdHJveShzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBzY2ktPnNjX3NiaTsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNjaS0+c2Nfc3VwZXItPnNfZnNfaW5mbzsKIAlpbnQgZmxhZzsKIAotCXVwX3dyaXRlKCZzYmktPnNfbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKKwl1cF93cml0ZSgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIAogCXNwaW5fbG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIAluaWxmc19zZWdjdG9yX2tpbGxfdGhyZWFkKHNjaSk7CkBAIC0yNzUzLDkgKzI3NDQsOSBAQAogCVdBUk5fT04oIWxpc3RfZW1wdHkoJnNjaS0+c2NfY29waWVkX2J1ZmZlcnMpKTsKIAogCWlmICghbGlzdF9lbXB0eSgmc2NpLT5zY19kaXJ0eV9maWxlcykpIHsKLQkJbmlsZnNfd2FybmluZyhzYmktPnNfc3VwZXIsIF9fZnVuY19fLAorCQluaWxmc193YXJuaW5nKHNjaS0+c2Nfc3VwZXIsIF9fZnVuY19fLAogCQkJICAgICAgImRpcnR5IGZpbGUocykgYWZ0ZXIgdGhlIGZpbmFsIGNvbnN0cnVjdGlvblxuIik7Ci0JCW5pbGZzX2Rpc3Bvc2VfbGlzdChzYmksICZzY2ktPnNjX2RpcnR5X2ZpbGVzLCAxKTsKKwkJbmlsZnNfZGlzcG9zZV9saXN0KG5pbGZzLCAmc2NpLT5zY19kaXJ0eV9maWxlcywgMSk7CiAJfQogCiAJV0FSTl9PTighbGlzdF9lbXB0eSgmc2NpLT5zY19zZWdidWZzKSk7CkBAIC0yNzYzLDc5ICsyNzU0LDc4IEBACiAKIAluaWxmc19wdXRfcm9vdChzY2ktPnNjX3Jvb3QpOwogCi0JZG93bl93cml0ZSgmc2JpLT5zX25pbGZzLT5uc19zZWdjdG9yX3NlbSk7CisJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIAogCWRlbF90aW1lcl9zeW5jKCZzY2ktPnNjX3RpbWVyKTsKIAlrZnJlZShzY2kpOwogfQogCiAvKioKLSAqIG5pbGZzX2F0dGFjaF9zZWdtZW50X2NvbnN0cnVjdG9yIC0gYXR0YWNoIGEgc2VnbWVudCBjb25zdHJ1Y3RvcgotICogQHNiaTogbmlsZnNfc2JfaW5mbworICogbmlsZnNfYXR0YWNoX2xvZ193cml0ZXIgLSBhdHRhY2ggbG9nIHdyaXRlcgorICogQHNiOiBzdXBlciBibG9jayBpbnN0YW5jZQogICogQHJvb3Q6IHJvb3Qgb2JqZWN0IG9mIHRoZSBjdXJyZW50IGZpbGVzeXN0ZW0gdHJlZQogICoKLSAqIG5pbGZzX2F0dGFjaF9zZWdtZW50X2NvbnN0cnVjdG9yKCkgYWxsb2NhdGVzIGEgc3RydWN0IG5pbGZzX3NjX2luZm8sCi0gKiBpbml0aWFsaXplcyBpdCwgYW5kIHN0YXJ0cyB0aGUgc2VnbWVudCBjb25zdHJ1Y3Rvci4KKyAqIFRoaXMgYWxsb2NhdGVzIGEgbG9nIHdyaXRlciBvYmplY3QsIGluaXRpYWxpemVzIGl0LCBhbmQgc3RhcnRzIHRoZQorICogbG9nIHdyaXRlci4KICAqCiAgKiBSZXR1cm4gVmFsdWU6IE9uIHN1Y2Nlc3MsIDAgaXMgcmV0dXJuZWQuIE9uIGVycm9yLCBvbmUgb2YgdGhlIGZvbGxvd2luZwogICogbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KICAqCiAgKiAlLUVOT01FTSAtIEluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlLgogICovCi1pbnQgbmlsZnNfYXR0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKLQkJCQkgICAgIHN0cnVjdCBuaWxmc19yb290ICpyb290KQoraW50IG5pbGZzX2F0dGFjaF9sb2dfd3JpdGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBuaWxmc19yb290ICpyb290KQogeworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2ItPnNfZnNfaW5mbzsKIAlpbnQgZXJyOwogCi0JaWYgKE5JTEZTX1NDKHNiaSkpIHsKKwlpZiAobmlsZnMtPm5zX3dyaXRlcikgewogCQkvKgogCQkgKiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIHJlbW91bnRlZAogCQkgKiByZWFkL3dyaXRlIGFmdGVyIG5pbGZzX2Vycm9yIGRlZ2VuZXJhdGVkIGl0IGludG8gYQogCQkgKiByZWFkLW9ubHkgbW91bnQuCiAJCSAqLwotCQluaWxmc19kZXRhY2hfc2VnbWVudF9jb25zdHJ1Y3RvcihzYmkpOworCQluaWxmc19kZXRhY2hfbG9nX3dyaXRlcihzYik7CiAJfQogCi0Jc2JpLT5zX3NjX2luZm8gPSBuaWxmc19zZWdjdG9yX25ldyhzYmksIHJvb3QpOwotCWlmICghc2JpLT5zX3NjX2luZm8pCisJbmlsZnMtPm5zX3dyaXRlciA9IG5pbGZzX3NlZ2N0b3JfbmV3KHNiLCByb290KTsKKwlpZiAoIW5pbGZzLT5uc193cml0ZXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZXJyID0gbmlsZnNfc2VnY3Rvcl9zdGFydF90aHJlYWQoTklMRlNfU0Moc2JpKSk7CisJZXJyID0gbmlsZnNfc2VnY3Rvcl9zdGFydF90aHJlYWQobmlsZnMtPm5zX3dyaXRlcik7CiAJaWYgKGVycikgewotCQlrZnJlZShzYmktPnNfc2NfaW5mbyk7Ci0JCXNiaS0+c19zY19pbmZvID0gTlVMTDsKKwkJa2ZyZWUobmlsZnMtPm5zX3dyaXRlcik7CisJCW5pbGZzLT5uc193cml0ZXIgPSBOVUxMOwogCX0KIAlyZXR1cm4gZXJyOwogfQogCiAvKioKLSAqIG5pbGZzX2RldGFjaF9zZWdtZW50X2NvbnN0cnVjdG9yIC0gZGVzdHJveSB0aGUgc2VnbWVudCBjb25zdHJ1Y3RvcgotICogQHNiaTogbmlsZnNfc2JfaW5mbworICogbmlsZnNfZGV0YWNoX2xvZ193cml0ZXIgLSBkZXN0cm95IGxvZyB3cml0ZXIKKyAqIEBzYjogc3VwZXIgYmxvY2sgaW5zdGFuY2UKICAqCi0gKiBuaWxmc19kZXRhY2hfc2VnbWVudF9jb25zdHJ1Y3RvcigpIGtpbGxzIHRoZSBzZWdtZW50IGNvbnN0cnVjdG9yIGRhZW1vbiwKLSAqIGZyZWVzIHRoZSBzdHJ1Y3QgbmlsZnNfc2NfaW5mbywgYW5kIGRlc3Ryb3kgdGhlIGRpcnR5IGZpbGUgbGlzdC4KKyAqIFRoaXMga2lsbHMgbG9nIHdyaXRlciBkYWVtb24sIGZyZWVzIHRoZSBsb2cgd3JpdGVyIG9iamVjdCwgYW5kCisgKiBkZXN0cm95cyBsaXN0IG9mIGRpcnR5IGZpbGVzLgogICovCi12b2lkIG5pbGZzX2RldGFjaF9zZWdtZW50X2NvbnN0cnVjdG9yKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCit2b2lkIG5pbGZzX2RldGFjaF9sb2dfd3JpdGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCUxJU1RfSEVBRChnYXJiYWdlX2xpc3QpOwogCiAJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKLQlpZiAoTklMRlNfU0Moc2JpKSkgewotCQluaWxmc19zZWdjdG9yX2Rlc3Ryb3koTklMRlNfU0Moc2JpKSk7Ci0JCXNiaS0+c19zY19pbmZvID0gTlVMTDsKKwlpZiAobmlsZnMtPm5zX3dyaXRlcikgeworCQluaWxmc19zZWdjdG9yX2Rlc3Ryb3kobmlsZnMtPm5zX3dyaXRlcik7CisJCW5pbGZzLT5uc193cml0ZXIgPSBOVUxMOwogCX0KIAogCS8qIEZvcmNlIHRvIGZyZWUgdGhlIGxpc3Qgb2YgZGlydHkgZmlsZXMgKi8KLQlzcGluX2xvY2soJnNiaS0+c19pbm9kZV9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnNiaS0+c19kaXJ0eV9maWxlcykpIHsKLQkJbGlzdF9zcGxpY2VfaW5pdCgmc2JpLT5zX2RpcnR5X2ZpbGVzLCAmZ2FyYmFnZV9saXN0KTsKLQkJbmlsZnNfd2FybmluZyhzYmktPnNfc3VwZXIsIF9fZnVuY19fLAotCQkJICAgICAgIk5vbiBlbXB0eSBkaXJ0eSBsaXN0IGFmdGVyIHRoZSBsYXN0ICIKLQkJCSAgICAgICJzZWdtZW50IGNvbnN0cnVjdGlvblxuIik7CisJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZuaWxmcy0+bnNfZGlydHlfZmlsZXMpKSB7CisJCWxpc3Rfc3BsaWNlX2luaXQoJm5pbGZzLT5uc19kaXJ0eV9maWxlcywgJmdhcmJhZ2VfbGlzdCk7CisJCW5pbGZzX3dhcm5pbmcoc2IsIF9fZnVuY19fLAorCQkJICAgICAgIkhpdCBkaXJ0eSBmaWxlIGFmdGVyIHN0b3BwZWQgbG9nIHdyaXRlclxuIik7CiAJfQotCXNwaW5fdW5sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CisJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKIAl1cF93cml0ZSgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIAotCW5pbGZzX2Rpc3Bvc2VfbGlzdChzYmksICZnYXJiYWdlX2xpc3QsIDEpOworCW5pbGZzX2Rpc3Bvc2VfbGlzdChuaWxmcywgJmdhcmJhZ2VfbGlzdCwgMSk7CiB9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5oIGIvZnMvbmlsZnMyL3NlZ21lbnQuaAppbmRleCBjZDgwNTZlLi42YzAyYTg2IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5oCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbmlsZnMyX2ZzLmg+Ci0jaW5jbHVkZSAic2IuaCIKKyNpbmNsdWRlICJuaWxmcy5oIgogCiBzdHJ1Y3QgbmlsZnNfcm9vdDsKIApAQCAtODgsNyArODgsNiBAQAogLyoqCiAgKiBzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAtIFNlZ21lbnQgY29uc3RydWN0b3IgaW5mb3JtYXRpb24KICAqIEBzY19zdXBlcjogQmFjayBwb2ludGVyIHRvIHN1cGVyX2Jsb2NrIHN0cnVjdAotICogQHNjX3NiaTogQmFjayBwb2ludGVyIHRvIG5pbGZzX3NiX2luZm8gc3RydWN0CiAgKiBAc2Nfcm9vdDogcm9vdCBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgZmlsZXN5c3RlbSB0cmVlCiAgKiBAc2NfbmJsa19pbmM6IEJsb2NrIGNvdW50IG9mIGN1cnJlbnQgZ2VuZXJhdGlvbgogICogQHNjX2RpcnR5X2ZpbGVzOiBMaXN0IG9mIGZpbGVzIHRvIGJlIHdyaXR0ZW4KQEAgLTEzMSw3ICsxMzAsNiBAQAogICovCiBzdHJ1Y3QgbmlsZnNfc2NfaW5mbyB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICAgICAqc2Nfc3VwZXI7Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gICAqc2Nfc2JpOwogCXN0cnVjdCBuaWxmc19yb290ICAgICAgKnNjX3Jvb3Q7CiAKIAl1bnNpZ25lZCBsb25nCQlzY19uYmxrX2luYzsKQEAgLTIzNSwxOCArMjMzLDE2IEBACiBleHRlcm4gaW50IG5pbGZzX2NsZWFuX3NlZ21lbnRzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgbmlsZnNfYXJndiAqLAogCQkJCXZvaWQgKiopOwogCi1pbnQgbmlsZnNfYXR0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKLQkJCQkgICAgIHN0cnVjdCBuaWxmc19yb290ICpyb290KTsKLWV4dGVybiB2b2lkIG5pbGZzX2RldGFjaF9zZWdtZW50X2NvbnN0cnVjdG9yKHN0cnVjdCBuaWxmc19zYl9pbmZvICopOworaW50IG5pbGZzX2F0dGFjaF9sb2dfd3JpdGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBuaWxmc19yb290ICpyb290KTsKK3ZvaWQgbmlsZnNfZGV0YWNoX2xvZ193cml0ZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiAKIC8qIHJlY292ZXJ5LmMgKi8KIGV4dGVybiBpbnQgbmlsZnNfcmVhZF9zdXBlcl9yb290X2Jsb2NrKHN0cnVjdCB0aGVfbmlsZnMgKiwgc2VjdG9yX3QsCiAJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKiwgaW50KTsKIGV4dGVybiBpbnQgbmlsZnNfc2VhcmNoX3N1cGVyX3Jvb3Qoc3RydWN0IHRoZV9uaWxmcyAqLAogCQkJCSAgIHN0cnVjdCBuaWxmc19yZWNvdmVyeV9pbmZvICopOwotZXh0ZXJuIGludCBuaWxmc19zYWx2YWdlX29ycGhhbl9sb2dzKHN0cnVjdCB0aGVfbmlsZnMgKiwKLQkJCQkgICAgIHN0cnVjdCBuaWxmc19zYl9pbmZvICosCi0JCQkJICAgICBzdHJ1Y3QgbmlsZnNfcmVjb3ZlcnlfaW5mbyAqKTsKK2ludCBuaWxmc19zYWx2YWdlX29ycGhhbl9sb2dzKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJICAgICAgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2luZm8gKnJpKTsKIGV4dGVybiB2b2lkIG5pbGZzX2Rpc3Bvc2Vfc2VnbWVudF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKik7CiAKICNlbmRpZiAvKiBfTklMRlNfU0VHTUVOVF9IICovCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IDE2NzNiM2QuLjA2MmNjYTAgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zdXBlci5jCisrKyBiL2ZzL25pbGZzMi9zdXBlci5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CkBAIC03MiwyMyArNzEsMjMgQEAKIHN0cnVjdCBrbWVtX2NhY2hlICpuaWxmc19zZWdidWZfY2FjaGVwOwogc3RydWN0IGttZW1fY2FjaGUgKm5pbGZzX2J0cmVlX3BhdGhfY2FjaGU7CiAKLXN0YXRpYyBpbnQgbmlsZnNfc2V0dXBfc3VwZXIoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwgaW50IGlzX21vdW50KTsKK3N0YXRpYyBpbnQgbmlsZnNfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX21vdW50KTsKIHN0YXRpYyBpbnQgbmlsZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKTsKIAotc3RhdGljIHZvaWQgbmlsZnNfc2V0X2Vycm9yKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCitzdGF0aWMgdm9pZCBuaWxmc19zZXRfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICoqc2JwOwogCiAJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJaWYgKCEobmlsZnMtPm5zX21vdW50X3N0YXRlICYgTklMRlNfRVJST1JfRlMpKSB7CiAJCW5pbGZzLT5uc19tb3VudF9zdGF0ZSB8PSBOSUxGU19FUlJPUl9GUzsKLQkJc2JwID0gbmlsZnNfcHJlcGFyZV9zdXBlcihzYmksIDApOworCQlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiLCAwKTsKIAkJaWYgKGxpa2VseShzYnApKSB7CiAJCQlzYnBbMF0tPnNfc3RhdGUgfD0gY3B1X3RvX2xlMTYoTklMRlNfRVJST1JfRlMpOwogCQkJaWYgKHNicFsxXSkKIAkJCQlzYnBbMV0tPnNfc3RhdGUgfD0gY3B1X3RvX2xlMTYoTklMRlNfRVJST1JfRlMpOwotCQkJbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgTklMRlNfU0JfQ09NTUlUX0FMTCk7CisJCQluaWxmc19jb21taXRfc3VwZXIoc2IsIE5JTEZTX1NCX0NPTU1JVF9BTEwpOwogCQl9CiAJfQogCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKQEAgLTEwOSw3ICsxMDgsNyBAQAogdm9pZCBuaWxmc19lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKIAkJIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwogCXZhX2xpc3QgYXJnczsKIApAQCAtMTI0LDE1ICsxMjMsMTUgQEAKIAl2YV9lbmQoYXJncyk7CiAKIAlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKLQkJbmlsZnNfc2V0X2Vycm9yKHNiaSk7CisJCW5pbGZzX3NldF9lcnJvcihzYik7CiAKLQkJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgRVJST1JTX1JPKSkgeworCQlpZiAobmlsZnNfdGVzdF9vcHQobmlsZnMsIEVSUk9SU19STykpIHsKIAkJCXByaW50ayhLRVJOX0NSSVQgIlJlbW91bnRpbmcgZmlsZXN5c3RlbSByZWFkLW9ubHlcbiIpOwogCQkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCQl9CiAJfQogCi0JaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgRVJST1JTX1BBTklDKSkKKwlpZiAobmlsZnNfdGVzdF9vcHQobmlsZnMsIEVSUk9SU19QQU5JQykpCiAJCXBhbmljKCJOSUxGUyAoZGV2aWNlICVzKTogcGFuaWMgZm9yY2VkIGFmdGVyIGVycm9yXG4iLAogCQkgICAgICBzYi0+c19pZCk7CiB9CkBAIC0xODksMTQgKzE4OCwxNCBAQAogCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIG5pbGZzX2lfY2FsbGJhY2spOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX3N5bmNfc3VwZXIoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwgaW50IGZsYWcpCitzdGF0aWMgaW50IG5pbGZzX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWcpCiB7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCWludCBlcnI7CiAKICByZXRyeToKIAlzZXRfYnVmZmVyX2RpcnR5KG5pbGZzLT5uc19zYmhbMF0pOwotCWlmIChuaWxmc190ZXN0X29wdChzYmksIEJBUlJJRVIpKSB7CisJaWYgKG5pbGZzX3Rlc3Rfb3B0KG5pbGZzLCBCQVJSSUVSKSkgewogCQllcnIgPSBfX3N5bmNfZGlydHlfYnVmZmVyKG5pbGZzLT5uc19zYmhbMF0sCiAJCQkJCSAgV1JJVEVfU1lOQyB8IFdSSVRFX0ZMVVNIX0ZVQSk7CiAJfSBlbHNlIHsKQEAgLTI2MywxMCArMjYyLDEwIEBACiAJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19sYXN0X3NlZ21lbnRfbG9jayk7CiB9CiAKLXN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKm5pbGZzX3ByZXBhcmVfc3VwZXIoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKK3N0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKm5pbGZzX3ByZXBhcmVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgICAgIGludCBmbGlwKQogewotCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2JpLT5zX25pbGZzOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnAgPSBuaWxmcy0+bnNfc2JwOwogCiAJLyogbmlsZnMtPm5zX3NlbSBtdXN0IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyLiAqLwpAQCAtMjc2LDcgKzI3NSw3IEBACiAJCQltZW1jcHkoc2JwWzBdLCBzYnBbMV0sIG5pbGZzLT5uc19zYnNpemUpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiTklMRlM6IHN1cGVyYmxvY2sgYnJva2Ugb24gZGV2ICVzXG4iLAotCQkJICAgICAgIHNiaS0+c19zdXBlci0+c19pZCk7CisJCQkgICAgICAgc2ItPnNfaWQpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9IGVsc2UgaWYgKHNicFsxXSAmJgpAQCAtMjkwLDkgKzI4OSw5IEBACiAJcmV0dXJuIHNicDsKIH0KIAotaW50IG5pbGZzX2NvbW1pdF9zdXBlcihzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLCBpbnQgZmxhZykKK2ludCBuaWxmc19jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWcpCiB7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKnNicCA9IG5pbGZzLT5uc19zYnA7CiAJdGltZV90IHQ7CiAKQEAgLTMxMiwyNyArMzExLDI4IEBACiAJCQkJCSAgICBuaWxmcy0+bnNfc2JzaXplKSk7CiAJfQogCWNsZWFyX25pbGZzX3NiX2RpcnR5KG5pbGZzKTsKLQlyZXR1cm4gbmlsZnNfc3luY19zdXBlcihzYmksIGZsYWcpOworCXJldHVybiBuaWxmc19zeW5jX3N1cGVyKHNiLCBmbGFnKTsKIH0KIAogLyoqCiAgKiBuaWxmc19jbGVhbnVwX3N1cGVyKCkgLSB3cml0ZSBmaWxlc3lzdGVtIHN0YXRlIGZvciBjbGVhbnVwCi0gKiBAc2JpOiBuaWxmc19zYl9pbmZvIHRvIGJlIHVubW91bnRlZCBvciBkZWdyYWRlZCB0byByZWFkLW9ubHkKKyAqIEBzYjogc3VwZXIgYmxvY2sgaW5zdGFuY2UgdG8gYmUgdW5tb3VudGVkIG9yIGRlZ3JhZGVkIHRvIHJlYWQtb25seQogICoKICAqIFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgc3RhdGUgZmxhZ3MgaW4gdGhlIG9uLWRpc2sgc3VwZXIgYmxvY2suCiAgKiBUaGlzIHdpbGwgc2V0ICJjbGVhbiIgZmxhZyAoaS5lLiBOSUxGU19WQUxJRF9GUykgdW5sZXNzIHRoZQogICogZmlsZXN5c3RlbSB3YXMgbm90IGNsZWFuIHByZXZpb3VzbHkuCiAgKi8KLWludCBuaWxmc19jbGVhbnVwX3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCitpbnQgbmlsZnNfY2xlYW51cF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogeworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnA7CiAJaW50IGZsYWcgPSBOSUxGU19TQl9DT01NSVQ7CiAJaW50IHJldCA9IC1FSU87CiAKLQlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiaSwgMCk7CisJc2JwID0gbmlsZnNfcHJlcGFyZV9zdXBlcihzYiwgMCk7CiAJaWYgKHNicCkgewotCQlzYnBbMF0tPnNfc3RhdGUgPSBjcHVfdG9fbGUxNihzYmktPnNfbmlsZnMtPm5zX21vdW50X3N0YXRlKTsKLQkJbmlsZnNfc2V0X2xvZ19jdXJzb3Ioc2JwWzBdLCBzYmktPnNfbmlsZnMpOworCQlzYnBbMF0tPnNfc3RhdGUgPSBjcHVfdG9fbGUxNihuaWxmcy0+bnNfbW91bnRfc3RhdGUpOworCQluaWxmc19zZXRfbG9nX2N1cnNvcihzYnBbMF0sIG5pbGZzKTsKIAkJaWYgKHNicFsxXSAmJiBzYnBbMF0tPnNfbGFzdF9jbm8gPT0gc2JwWzFdLT5zX2xhc3RfY25vKSB7CiAJCQkvKgogCQkJICogbWFrZSB0aGUgImNsZWFuIiBmbGFnIGFsc28gdG8gdGhlIG9wcG9zaXRlCkBAIC0zNDIsMjEgKzM0MiwyMCBAQAogCQkJc2JwWzFdLT5zX3N0YXRlID0gc2JwWzBdLT5zX3N0YXRlOwogCQkJZmxhZyA9IE5JTEZTX1NCX0NPTU1JVF9BTEw7CiAJCX0KLQkJcmV0ID0gbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgZmxhZyk7CisJCXJldCA9IG5pbGZzX2NvbW1pdF9zdXBlcihzYiwgZmxhZyk7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCi0JbmlsZnNfZGV0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc2JpKTsKKwluaWxmc19kZXRhY2hfbG9nX3dyaXRlcihzYik7CiAKIAlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKIAkJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci0JCW5pbGZzX2NsZWFudXBfc3VwZXIoc2JpKTsKKwkJbmlsZnNfY2xlYW51cF9zdXBlcihzYik7CiAJCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKIAl9CiAKQEAgLTM2NSwxNSArMzY0LDEyIEBACiAJaXB1dChuaWxmcy0+bnNfZGF0KTsKIAogCWRlc3Ryb3lfbmlsZnMobmlsZnMpOwotCXNiaS0+c19zdXBlciA9IE5VTEw7CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7Ci0Ja2ZyZWUoc2JpKTsKIH0KIAogc3RhdGljIGludCBuaWxmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKnNicDsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzgzLDEwICszNzksMTAgQEAKIAogCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwogCWlmIChuaWxmc19zYl9kaXJ0eShuaWxmcykpIHsKLQkJc2JwID0gbmlsZnNfcHJlcGFyZV9zdXBlcihzYmksIG5pbGZzX3NiX3dpbGxfZmxpcChuaWxmcykpOworCQlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiLCBuaWxmc19zYl93aWxsX2ZsaXAobmlsZnMpKTsKIAkJaWYgKGxpa2VseShzYnApKSB7CiAJCQluaWxmc19zZXRfbG9nX2N1cnNvcihzYnBbMF0sIG5pbGZzKTsKLQkJCW5pbGZzX2NvbW1pdF9zdXBlcihzYmksIE5JTEZTX1NCX0NPTU1JVCk7CisJCQluaWxmc19jb21taXRfc3VwZXIoc2IsIE5JTEZTX1NCX0NPTU1JVCk7CiAJCX0KIAl9CiAJdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOwpAQCAtMzk0LDEwICszOTAsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgbmlsZnNfYXR0YWNoX2NoZWNrcG9pbnQoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwgX191NjQgY25vLCBpbnQgY3Vycl9tbnQsCitpbnQgbmlsZnNfYXR0YWNoX2NoZWNrcG9pbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191NjQgY25vLCBpbnQgY3Vycl9tbnQsCiAJCQkgICAgc3RydWN0IG5pbGZzX3Jvb3QgKipyb290cCkKIHsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IG5pbGZzX3Jvb3QgKnJvb3Q7CiAJc3RydWN0IG5pbGZzX2NoZWNrcG9pbnQgKnJhd19jcDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX2NwOwpAQCAtNDI2LDcgKzQyMiw3IEBACiAJCWdvdG8gZmFpbGVkOwogCX0KIAotCWVyciA9IG5pbGZzX2lmaWxlX3JlYWQoc2JpLT5zX3N1cGVyLCByb290LCBuaWxmcy0+bnNfaW5vZGVfc2l6ZSwKKwllcnIgPSBuaWxmc19pZmlsZV9yZWFkKHNiLCByb290LCBuaWxmcy0+bnNfaW5vZGVfc2l6ZSwKIAkJCSAgICAgICAmcmF3X2NwLT5jcF9pZmlsZV9pbm9kZSwgJnJvb3QtPmlmaWxlKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxlZF9iaDsKQEAgLTQ1MCw4ICs0NDYsNyBAQAogCiBzdGF0aWMgaW50IG5pbGZzX2ZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCWludCBlcnI7CiAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCkBAIC00NTksMjEgKzQ1NCwyMCBAQAogCiAJLyogTWFyayBzdXBlciBibG9jayBjbGVhbiAqLwogCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwotCWVyciA9IG5pbGZzX2NsZWFudXBfc3VwZXIoc2JpKTsKKwllcnIgPSBuaWxmc19jbGVhbnVwX3N1cGVyKHNiKTsKIAl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBuaWxmc191bmZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gMDsKIAogCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwotCW5pbGZzX3NldHVwX3N1cGVyKHNiaSwgZmFsc2UpOworCW5pbGZzX3NldHVwX3N1cGVyKHNiLCBmYWxzZSk7CiAJdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOwogCXJldHVybiAwOwogfQpAQCAtNTMwLDIyICs1MjQsMjIgQEAKIHN0YXRpYyBpbnQgbmlsZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKnZmcykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdmZzLT5tbnRfc2I7Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IG5pbGZzX3Jvb3QgKnJvb3QgPSBOSUxGU19JKHZmcy0+bW50X3Jvb3QtPmRfaW5vZGUpLT5pX3Jvb3Q7CiAKLQlpZiAoIW5pbGZzX3Rlc3Rfb3B0KHNiaSwgQkFSUklFUikpCisJaWYgKCFuaWxmc190ZXN0X29wdChuaWxmcywgQkFSUklFUikpCiAJCXNlcV9wdXRzKHNlcSwgIixub2JhcnJpZXIiKTsKIAlpZiAocm9vdC0+Y25vICE9IE5JTEZTX0NQVFJFRV9DVVJSRU5UX0NOTykKIAkJc2VxX3ByaW50ZihzZXEsICIsY3A9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpcm9vdC0+Y25vKTsKLQlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBFUlJPUlNfUEFOSUMpKQorCWlmIChuaWxmc190ZXN0X29wdChuaWxmcywgRVJST1JTX1BBTklDKSkKIAkJc2VxX3B1dHMoc2VxLCAiLGVycm9ycz1wYW5pYyIpOwotCWlmIChuaWxmc190ZXN0X29wdChzYmksIEVSUk9SU19DT05UKSkKKwlpZiAobmlsZnNfdGVzdF9vcHQobmlsZnMsIEVSUk9SU19DT05UKSkKIAkJc2VxX3B1dHMoc2VxLCAiLGVycm9ycz1jb250aW51ZSIpOwotCWlmIChuaWxmc190ZXN0X29wdChzYmksIFNUUklDVF9PUkRFUikpCisJaWYgKG5pbGZzX3Rlc3Rfb3B0KG5pbGZzLCBTVFJJQ1RfT1JERVIpKQogCQlzZXFfcHV0cyhzZXEsICIsb3JkZXI9c3RyaWN0Iik7Ci0JaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgTk9SRUNPVkVSWSkpCisJaWYgKG5pbGZzX3Rlc3Rfb3B0KG5pbGZzLCBOT1JFQ09WRVJZKSkKIAkJc2VxX3B1dHMoc2VxLCAiLG5vcmVjb3ZlcnkiKTsKLQlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBESVNDQVJEKSkKKwlpZiAobmlsZnNfdGVzdF9vcHQobmlsZnMsIERJU0NBUkQpKQogCQlzZXFfcHV0cyhzZXEsICIsZGlzY2FyZCIpOwogCiAJcmV0dXJuIDA7CkBAIC01OTQsNyArNTg4LDcgQEAKIAogc3RhdGljIGludCBwYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpc19yZW1vdW50KQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCWNoYXIgKnA7CiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwogCkBAIC02MDksMjkgKzYwMywyOSBAQAogCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CiAJCXN3aXRjaCAodG9rZW4pIHsKIAkJY2FzZSBPcHRfYmFycmllcjoKLQkJCW5pbGZzX3NldF9vcHQoc2JpLCBCQVJSSUVSKTsKKwkJCW5pbGZzX3NldF9vcHQobmlsZnMsIEJBUlJJRVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vYmFycmllcjoKLQkJCW5pbGZzX2NsZWFyX29wdChzYmksIEJBUlJJRVIpOworCQkJbmlsZnNfY2xlYXJfb3B0KG5pbGZzLCBCQVJSSUVSKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9vcmRlcjoKIAkJCWlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAicmVsYXhlZCIpID09IDApCiAJCQkJLyogT3JkZXJlZCBkYXRhIHNlbWFudGljcyAqLwotCQkJCW5pbGZzX2NsZWFyX29wdChzYmksIFNUUklDVF9PUkRFUik7CisJCQkJbmlsZnNfY2xlYXJfb3B0KG5pbGZzLCBTVFJJQ1RfT1JERVIpOwogCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgInN0cmljdCIpID09IDApCiAJCQkJLyogU3RyaWN0IGluLW9yZGVyIHNlbWFudGljcyAqLwotCQkJCW5pbGZzX3NldF9vcHQoc2JpLCBTVFJJQ1RfT1JERVIpOworCQkJCW5pbGZzX3NldF9vcHQobmlsZnMsIFNUUklDVF9PUkRFUik7CiAJCQllbHNlCiAJCQkJcmV0dXJuIDA7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfZXJyX3BhbmljOgotCQkJbmlsZnNfd3JpdGVfb3B0KHNiaSwgRVJST1JfTU9ERSwgRVJST1JTX1BBTklDKTsKKwkJCW5pbGZzX3dyaXRlX29wdChuaWxmcywgRVJST1JfTU9ERSwgRVJST1JTX1BBTklDKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9lcnJfcm86Ci0JCQluaWxmc193cml0ZV9vcHQoc2JpLCBFUlJPUl9NT0RFLCBFUlJPUlNfUk8pOworCQkJbmlsZnNfd3JpdGVfb3B0KG5pbGZzLCBFUlJPUl9NT0RFLCBFUlJPUlNfUk8pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2Vycl9jb250OgotCQkJbmlsZnNfd3JpdGVfb3B0KHNiaSwgRVJST1JfTU9ERSwgRVJST1JTX0NPTlQpOworCQkJbmlsZnNfd3JpdGVfb3B0KG5pbGZzLCBFUlJPUl9NT0RFLCBFUlJPUlNfQ09OVCk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfc25hcHNob3Q6CiAJCQlpZiAoaXNfcmVtb3VudCkgewpAQCAtNjQyLDEzICs2MzYsMTMgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub3JlY292ZXJ5OgotCQkJbmlsZnNfc2V0X29wdChzYmksIE5PUkVDT1ZFUlkpOworCQkJbmlsZnNfc2V0X29wdChuaWxmcywgTk9SRUNPVkVSWSk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfZGlzY2FyZDoKLQkJCW5pbGZzX3NldF9vcHQoc2JpLCBESVNDQVJEKTsKKwkJCW5pbGZzX3NldF9vcHQobmlsZnMsIERJU0NBUkQpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vZGlzY2FyZDoKLQkJCW5pbGZzX2NsZWFyX29wdChzYmksIERJU0NBUkQpOworCQkJbmlsZnNfY2xlYXJfb3B0KG5pbGZzLCBESVNDQVJEKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC02NjAsMjIgKzY1NCwyNCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLW5pbGZzX3NldF9kZWZhdWx0X29wdGlvbnMoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKK25pbGZzX3NldF9kZWZhdWx0X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICpzYnApCiB7Ci0Jc2JpLT5zX21vdW50X29wdCA9CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOworCisJbmlsZnMtPm5zX21vdW50X29wdCA9CiAJCU5JTEZTX01PVU5UX0VSUk9SU19STyB8IE5JTEZTX01PVU5UX0JBUlJJRVI7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfc2V0dXBfc3VwZXIoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwgaW50IGlzX21vdW50KQorc3RhdGljIGludCBuaWxmc19zZXR1cF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaXNfbW91bnQpCiB7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKnNicDsKIAlpbnQgbWF4X21udF9jb3VudDsKIAlpbnQgbW50X2NvdW50OwogCiAJLyogbmlsZnMtPm5zX3NlbSBtdXN0IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyLiAqLwotCXNicCA9IG5pbGZzX3ByZXBhcmVfc3VwZXIoc2JpLCAwKTsKKwlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiLCAwKTsKIAlpZiAoIXNicCkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTcwNiw3ICs3MDIsNyBAQAogCS8qIHN5bmNocm9uaXplIHNicFsxXSB3aXRoIHNicFswXSAqLwogCWlmIChzYnBbMV0pCiAJCW1lbWNweShzYnBbMV0sIHNicFswXSwgbmlsZnMtPm5zX3Nic2l6ZSk7Ci0JcmV0dXJuIG5pbGZzX2NvbW1pdF9zdXBlcihzYmksIE5JTEZTX1NCX0NPTU1JVF9BTEwpOworCXJldHVybiBuaWxmc19jb21taXRfc3VwZXIoc2IsIE5JTEZTX1NCX0NPTU1JVF9BTEwpOwogfQogCiBzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKm5pbGZzX3JlYWRfc3VwZXJfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKQEAgLTcyNyw3ICs3MjMsNyBAQAogCQkJCSBzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKnNicCwKIAkJCQkgY2hhciAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gTklMRlNfU0Ioc2IpOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2ItPnNfZnNfaW5mbzsKIAogCXNiLT5zX21hZ2ljID0gbGUxNl90b19jcHUoc2JwLT5zX21hZ2ljKTsKIApAQCAtNzM2LDEyICs3MzIsMTIgQEAKIAlzYi0+c19mbGFncyB8PSBNU19OT0FUSU1FOwogI2VuZGlmCiAKLQluaWxmc19zZXRfZGVmYXVsdF9vcHRpb25zKHNiaSwgc2JwKTsKKwluaWxmc19zZXRfZGVmYXVsdF9vcHRpb25zKHNiLCBzYnApOwogCi0Jc2JpLT5zX3Jlc3VpZCA9IGxlMTZfdG9fY3B1KHNicC0+c19kZWZfcmVzdWlkKTsKLQlzYmktPnNfcmVzZ2lkID0gbGUxNl90b19jcHUoc2JwLT5zX2RlZl9yZXNnaWQpOwotCXNiaS0+c19pbnRlcnZhbCA9IGxlMzJfdG9fY3B1KHNicC0+c19jX2ludGVydmFsKTsKLQlzYmktPnNfd2F0ZXJtYXJrID0gbGUzMl90b19jcHUoc2JwLT5zX2NfYmxvY2tfbWF4KTsKKwluaWxmcy0+bnNfcmVzdWlkID0gbGUxNl90b19jcHUoc2JwLT5zX2RlZl9yZXN1aWQpOworCW5pbGZzLT5uc19yZXNnaWQgPSBsZTE2X3RvX2NwdShzYnAtPnNfZGVmX3Jlc2dpZCk7CisJbmlsZnMtPm5zX2ludGVydmFsID0gbGUzMl90b19jcHUoc2JwLT5zX2NfaW50ZXJ2YWwpOworCW5pbGZzLT5uc193YXRlcm1hcmsgPSBsZTMyX3RvX2NwdShzYnAtPnNfY19ibG9ja19tYXgpOwogCiAJcmV0dXJuICFwYXJzZV9vcHRpb25zKGRhdGEsIHNiLCAwKSA/IC1FSU5WQUwgOiAwIDsKIH0KQEAgLTgyMiw3ICs4MTgsNyBAQAogc3RhdGljIGludCBuaWxmc19hdHRhY2hfc25hcHNob3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBfX3U2NCBjbm8sCiAJCQkJIHN0cnVjdCBkZW50cnkgKipyb290X2RlbnRyeSkKIHsKLQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IE5JTEZTX1NCKHMpLT5zX25pbGZzOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gcy0+c19mc19pbmZvOwogCXN0cnVjdCBuaWxmc19yb290ICpyb290OwogCWludCByZXQ7CiAKQEAgLTg0MCw3ICs4MzYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBuaWxmc19hdHRhY2hfY2hlY2twb2ludChOSUxGU19TQihzKSwgY25vLCBmYWxzZSwgJnJvb3QpOworCXJldCA9IG5pbGZzX2F0dGFjaF9jaGVja3BvaW50KHMsIGNubywgZmFsc2UsICZyb290KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IGVycm9yIGxvYWRpbmcgc25hcHNob3QgIgogCQkgICAgICAgIihjaGVja3BvaW50IG51bWJlcj0lbGx1KS5cbiIsCkBAIC04NzQsNyArODcwLDcgQEAKIAogaW50IG5pbGZzX2NoZWNrcG9pbnRfaXNfbW91bnRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3U2NCBjbm8pCiB7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBOSUxGU19TQihzYiktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBuaWxmc19yb290ICpyb290OwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwpAQCAtODg3LDcgKzg4Myw3IEBACiAJCXJldHVybiB0cnVlOwkvKiBwcm90ZWN0IHJlY2VudCBjaGVja3BvaW50cyAqLwogCiAJcmV0ID0gZmFsc2U7Ci0Jcm9vdCA9IG5pbGZzX2xvb2t1cF9yb290KE5JTEZTX1NCKHNiKS0+c19uaWxmcywgY25vKTsKKwlyb290ID0gbmlsZnNfbG9va3VwX3Jvb3QobmlsZnMsIGNubyk7CiAJaWYgKHJvb3QpIHsKIAkJaW5vZGUgPSBuaWxmc19pbG9va3VwKHNiLCByb290LCBOSUxGU19ST09UX0lOTyk7CiAJCWlmIChpbm9kZSkgewpAQCAtOTE3LDQzICs5MTMsMjEgQEAKIG5pbGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKIHsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmczsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpOwogCXN0cnVjdCBuaWxmc19yb290ICpmc3Jvb3Q7CiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaTsKIAlfX3U2NCBjbm87CiAJaW50IGVycjsKIAotCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNiaSkKKwluaWxmcyA9IGFsbG9jX25pbGZzKHNiLT5zX2JkZXYpOworCWlmICghbmlsZnMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc2ItPnNfZnNfaW5mbyA9IHNiaTsKLQlzYmktPnNfc3VwZXIgPSBzYjsKKwlzYi0+c19mc19pbmZvID0gbmlsZnM7CiAKLQluaWxmcyA9IGFsbG9jX25pbGZzKHNiLT5zX2JkZXYpOwotCWlmICghbmlsZnMpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsZWRfc2JpOwotCX0KLQlzYmktPnNfbmlsZnMgPSBuaWxmczsKLQotCWVyciA9IGluaXRfbmlsZnMobmlsZnMsIHNiaSwgKGNoYXIgKilkYXRhKTsKKwllcnIgPSBpbml0X25pbGZzKG5pbGZzLCBzYiwgKGNoYXIgKilkYXRhKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxlZF9uaWxmczsKIAotCXNwaW5fbG9ja19pbml0KCZzYmktPnNfaW5vZGVfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnNiaS0+c19kaXJ0eV9maWxlcyk7Ci0KLQkvKgotCSAqIEZvbGxvd2luZyBpbml0aWFsaXphdGlvbiBpcyBvdmVybGFwcGVkIGJlY2F1c2UKLQkgKiBuaWxmc19zYl9pbmZvIHN0cnVjdHVyZSBoYXMgYmVlbiBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcuCi0JICogQnV0IHdlIHJlc2VydmUgdGhlbSB0byBrZWVwIG91ciBpbnRlcmVzdCBhbmQgbWFrZSByZWFkeQotCSAqIGZvciB0aGUgZnV0dXJlIGNoYW5nZS4KLQkgKi8KLQlnZXRfcmFuZG9tX2J5dGVzKCZzYmktPnNfbmV4dF9nZW5lcmF0aW9uLAotCQkJIHNpemVvZihzYmktPnNfbmV4dF9nZW5lcmF0aW9uKSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19uZXh0X2dlbl9sb2NrKTsKLQogCXNiLT5zX29wID0gJm5pbGZzX3NvcHM7CiAJc2ItPnNfZXhwb3J0X29wID0gJm5pbGZzX2V4cG9ydF9vcHM7CiAJc2ItPnNfcm9vdCA9IE5VTEw7CkBAIC05NjIsMTIgKzkzNiwxMiBAQAogCWJkaSA9IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CiAJc2ItPnNfYmRpID0gYmRpID8gOiAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOwogCi0JZXJyID0gbG9hZF9uaWxmcyhuaWxmcywgc2JpKTsKKwllcnIgPSBsb2FkX25pbGZzKG5pbGZzLCBzYik7CiAJaWYgKGVycikKIAkJZ290byBmYWlsZWRfbmlsZnM7CiAKIAljbm8gPSBuaWxmc19sYXN0X2NubyhuaWxmcyk7Ci0JZXJyID0gbmlsZnNfYXR0YWNoX2NoZWNrcG9pbnQoc2JpLCBjbm8sIHRydWUsICZmc3Jvb3QpOworCWVyciA9IG5pbGZzX2F0dGFjaF9jaGVja3BvaW50KHNiLCBjbm8sIHRydWUsICZmc3Jvb3QpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUzogZXJyb3IgbG9hZGluZyBsYXN0IGNoZWNrcG9pbnQgIgogCQkgICAgICAgIihjaGVja3BvaW50IG51bWJlcj0lbGx1KS5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpY25vKTsKQEAgLTk3NSw3ICs5NDksNyBAQAogCX0KIAogCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewotCQllcnIgPSBuaWxmc19hdHRhY2hfc2VnbWVudF9jb25zdHJ1Y3RvcihzYmksIGZzcm9vdCk7CisJCWVyciA9IG5pbGZzX2F0dGFjaF9sb2dfd3JpdGVyKHNiLCBmc3Jvb3QpOwogCQlpZiAoZXJyKQogCQkJZ290byBmYWlsZWRfY2hlY2twb2ludDsKIAl9CkBAIC05ODgsMTQgKzk2MiwxNCBAQAogCiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwotCQluaWxmc19zZXR1cF9zdXBlcihzYmksIHRydWUpOworCQluaWxmc19zZXR1cF9zdXBlcihzYiwgdHJ1ZSk7CiAJCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKIAl9CiAKIAlyZXR1cm4gMDsKIAogIGZhaWxlZF9zZWdjdG9yOgotCW5pbGZzX2RldGFjaF9zZWdtZW50X2NvbnN0cnVjdG9yKHNiaSk7CisJbmlsZnNfZGV0YWNoX2xvZ193cml0ZXIoc2IpOwogCiAgZmFpbGVkX2NoZWNrcG9pbnQ6CiAJbmlsZnNfcHV0X3Jvb3QoZnNyb290KTsKQEAgLTEwMDcsMjMgKzk4MSwxOCBAQAogCiAgZmFpbGVkX25pbGZzOgogCWRlc3Ryb3lfbmlsZnMobmlsZnMpOwotCi0gZmFpbGVkX3NiaToKLQlzYi0+c19mc19pbmZvID0gTlVMTDsKLQlrZnJlZShzYmkpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbmlsZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQogewotCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOwogCXVuc2lnbmVkIGxvbmcgb2xkX3NiX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgb2xkX21vdW50X29wdDsKIAlpbnQgZXJyOwogCiAJb2xkX3NiX2ZsYWdzID0gc2ItPnNfZmxhZ3M7Ci0Jb2xkX21vdW50X29wdCA9IHNiaS0+c19tb3VudF9vcHQ7CisJb2xkX21vdW50X29wdCA9IG5pbGZzLT5uc19tb3VudF9vcHQ7CiAKIAlpZiAoIXBhcnNlX29wdGlvbnMoZGF0YSwgc2IsIDEpKSB7CiAJCWVyciA9IC1FSU5WQUw7CkBAIC0xMDQzLDggKzEwMTIsOCBAQAogCWlmICgoKmZsYWdzICYgTVNfUkRPTkxZKSA9PSAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCQlnb3RvIG91dDsKIAlpZiAoKmZsYWdzICYgTVNfUkRPTkxZKSB7Ci0JCS8qIFNodXR0aW5nIGRvd24gdGhlIHNlZ21lbnQgY29uc3RydWN0b3IgKi8KLQkJbmlsZnNfZGV0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc2JpKTsKKwkJLyogU2h1dHRpbmcgZG93biBsb2cgd3JpdGVyICovCisJCW5pbGZzX2RldGFjaF9sb2dfd3JpdGVyKHNiKTsKIAkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCiAJCS8qCkBAIC0xMDUyLDcgKzEwMjEsNyBAQAogCQkgKiB0aGUgUkRPTkxZIGZsYWcgYW5kIHRoZW4gbWFyayB0aGUgcGFydGl0aW9uIGFzIHZhbGlkIGFnYWluLgogCQkgKi8KIAkJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci0JCW5pbGZzX2NsZWFudXBfc3VwZXIoc2JpKTsKKwkJbmlsZnNfY2xlYW51cF9zdXBlcihzYik7CiAJCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKIAl9IGVsc2UgewogCQlfX3U2NCBmZWF0dXJlczsKQEAgLTEwNzksMTIgKzEwNDgsMTIgQEAKIAkJc2ItPnNfZmxhZ3MgJj0gfk1TX1JET05MWTsKIAogCQlyb290ID0gTklMRlNfSShzYi0+c19yb290LT5kX2lub2RlKS0+aV9yb290OwotCQllcnIgPSBuaWxmc19hdHRhY2hfc2VnbWVudF9jb25zdHJ1Y3RvcihzYmksIHJvb3QpOworCQllcnIgPSBuaWxmc19hdHRhY2hfbG9nX3dyaXRlcihzYiwgcm9vdCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHJlc3RvcmVfb3B0czsKIAogCQlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKLQkJbmlsZnNfc2V0dXBfc3VwZXIoc2JpLCB0cnVlKTsKKwkJbmlsZnNfc2V0dXBfc3VwZXIoc2IsIHRydWUpOwogCQl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJfQogIG91dDoKQEAgLTEwOTIsMTMgKzEwNjEsMTIgQEAKIAogIHJlc3RvcmVfb3B0czoKIAlzYi0+c19mbGFncyA9IG9sZF9zYl9mbGFnczsKLQlzYmktPnNfbW91bnRfb3B0ID0gb2xkX21vdW50X29wdDsKKwluaWxmcy0+bnNfbW91bnRfb3B0ID0gb2xkX21vdW50X29wdDsKIAlyZXR1cm4gZXJyOwogfQogCiBzdHJ1Y3QgbmlsZnNfc3VwZXJfZGF0YSB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpOwogCV9fdTY0IGNubzsKIAlpbnQgZmxhZ3M7CiB9OwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5jIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCmluZGV4IGFkNGFjNjAuLmQyYWNkMWEgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi90aGVfbmlsZnMuYworKysgYi9mcy9uaWxmczIvdGhlX25pbGZzLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgIm5pbGZzLmgiCiAjaW5jbHVkZSAic2VnbWVudC5oIgpAQCAtNzUsNyArNzYsMTAgQEAKIAluaWxmcy0+bnNfYmRldiA9IGJkZXY7CiAJYXRvbWljX3NldCgmbmlsZnMtPm5zX25kaXJ0eWJsa3MsIDApOwogCWluaXRfcndzZW0oJm5pbGZzLT5uc19zZW0pOworCUlOSVRfTElTVF9IRUFEKCZuaWxmcy0+bnNfZGlydHlfZmlsZXMpOwogCUlOSVRfTElTVF9IRUFEKCZuaWxmcy0+bnNfZ2NfaW5vZGVzKTsKKwlzcGluX2xvY2tfaW5pdCgmbmlsZnMtPm5zX2lub2RlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZuaWxmcy0+bnNfbmV4dF9nZW5fbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJm5pbGZzLT5uc19sYXN0X3NlZ21lbnRfbG9jayk7CiAJbmlsZnMtPm5zX2NwdHJlZSA9IFJCX1JPT1Q7CiAJc3Bpbl9sb2NrX2luaXQoJm5pbGZzLT5uc19jcHRyZWVfbG9jayk7CkBAIC0xOTcsMTYgKzIwMSwxNiBAQAogLyoqCiAgKiBsb2FkX25pbGZzIC0gbG9hZCBhbmQgcmVjb3ZlciB0aGUgbmlsZnMKICAqIEBuaWxmczogdGhlX25pbGZzIHN0cnVjdHVyZSB0byBiZSByZWxlYXNlZAotICogQHNiaTogbmlsZnNfc2JfaW5mbyB1c2VkIHRvIHJlY292ZXIgcGFzdCBzZWdtZW50CisgKiBAc2I6IHN1cGVyIGJsb2NrIGlzbnRhbmNlIHVzZWQgdG8gcmVjb3ZlciBwYXN0IHNlZ21lbnQKICAqCiAgKiBsb2FkX25pbGZzKCkgc2VhcmNoZXMgYW5kIGxvYWQgdGhlIGxhdGVzdCBzdXBlciByb290LAogICogYXR0YWNoZXMgdGhlIGxhc3Qgc2VnbWVudCwgYW5kIGRvZXMgcmVjb3ZlcnkgaWYgbmVlZGVkLgogICogVGhlIGNhbGxlciBtdXN0IGNhbGwgdGhpcyBleGNsdXNpdmVseSBmb3Igc2ltdWx0YW5lb3VzIG1vdW50cy4KICAqLwotaW50IGxvYWRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCitpbnQgbG9hZF9uaWxmcyhzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgbmlsZnNfcmVjb3ZlcnlfaW5mbyByaTsKLQl1bnNpZ25lZCBpbnQgc19mbGFncyA9IHNiaS0+c19zdXBlci0+c19mbGFnczsKKwl1bnNpZ25lZCBpbnQgc19mbGFncyA9IHNiLT5zX2ZsYWdzOwogCWludCByZWFsbHlfcmVhZF9vbmx5ID0gYmRldl9yZWFkX29ubHkobmlsZnMtPm5zX2JkZXYpOwogCWludCB2YWxpZF9mcyA9IG5pbGZzX3ZhbGlkX2ZzKG5pbGZzKTsKIAlpbnQgZXJyOwpAQCAtMjcxLDcgKzI3NSw3IEBACiAJCQlnb3RvIHNjYW5fZXJyb3I7CiAJfQogCi0JZXJyID0gbmlsZnNfbG9hZF9zdXBlcl9yb290KG5pbGZzLCBzYmktPnNfc3VwZXIsIHJpLnJpX3N1cGVyX3Jvb3QpOworCWVyciA9IG5pbGZzX2xvYWRfc3VwZXJfcm9vdChuaWxmcywgc2IsIHJpLnJpX3N1cGVyX3Jvb3QpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IGVycm9yIGxvYWRpbmcgc3VwZXIgcm9vdC5cbiIpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTI4Myw3ICsyODcsNyBAQAogCWlmIChzX2ZsYWdzICYgTVNfUkRPTkxZKSB7CiAJCV9fdTY0IGZlYXR1cmVzOwogCi0JCWlmIChuaWxmc190ZXN0X29wdChzYmksIE5PUkVDT1ZFUlkpKSB7CisJCWlmIChuaWxmc190ZXN0X29wdChuaWxmcywgTk9SRUNPVkVSWSkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIk5JTEZTOiBub3JlY292ZXJ5IG9wdGlvbiBzcGVjaWZpZWQuICIKIAkJCSAgICAgICAic2tpcHBpbmcgcm9sbC1mb3J3YXJkIHJlY292ZXJ5XG4iKTsKIAkJCWdvdG8gc2tpcF9yZWNvdmVyeTsKQEAgLTMwNCwyMSArMzA4LDIxIEBACiAJCQllcnIgPSAtRVJPRlM7CiAJCQlnb3RvIGZhaWxlZF91bmxvYWQ7CiAJCX0KLQkJc2JpLT5zX3N1cGVyLT5zX2ZsYWdzICY9IH5NU19SRE9OTFk7Ci0JfSBlbHNlIGlmIChuaWxmc190ZXN0X29wdChzYmksIE5PUkVDT1ZFUlkpKSB7CisJCXNiLT5zX2ZsYWdzICY9IH5NU19SRE9OTFk7CisJfSBlbHNlIGlmIChuaWxmc190ZXN0X29wdChuaWxmcywgTk9SRUNPVkVSWSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUzogcmVjb3ZlcnkgY2FuY2VsbGVkIGJlY2F1c2Ugbm9yZWNvdmVyeSAiCiAJCSAgICAgICAib3B0aW9uIHdhcyBzcGVjaWZpZWQgZm9yIGEgcmVhZC93cml0ZSBtb3VudFxuIik7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbGVkX3VubG9hZDsKIAl9CiAKLQllcnIgPSBuaWxmc19zYWx2YWdlX29ycGhhbl9sb2dzKG5pbGZzLCBzYmksICZyaSk7CisJZXJyID0gbmlsZnNfc2FsdmFnZV9vcnBoYW5fbG9ncyhuaWxmcywgc2IsICZyaSk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsZWRfdW5sb2FkOwogCiAJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJbmlsZnMtPm5zX21vdW50X3N0YXRlIHw9IE5JTEZTX1ZBTElEX0ZTOyAvKiBzZXQgImNsZWFuIiBmbGFnICovCi0JZXJyID0gbmlsZnNfY2xlYW51cF9zdXBlcihzYmkpOworCWVyciA9IG5pbGZzX2NsZWFudXBfc3VwZXIoc2IpOwogCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKIAogCWlmIChlcnIpIHsKQEAgLTMzMCw3ICszMzQsNyBAQAogCiAgc2tpcF9yZWNvdmVyeToKIAluaWxmc19jbGVhcl9yZWNvdmVyeV9pbmZvKCZyaSk7Ci0Jc2JpLT5zX3N1cGVyLT5zX2ZsYWdzID0gc19mbGFnczsKKwlzYi0+c19mbGFncyA9IHNfZmxhZ3M7CiAJcmV0dXJuIDA7CiAKICBzY2FuX2Vycm9yOgpAQCAtMzQ0LDcgKzM0OCw3IEBACiAKICBmYWlsZWQ6CiAJbmlsZnNfY2xlYXJfcmVjb3ZlcnlfaW5mbygmcmkpOwotCXNiaS0+c19zdXBlci0+c19mbGFncyA9IHNfZmxhZ3M7CisJc2ItPnNfZmxhZ3MgPSBzX2ZsYWdzOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ3NSwxMCArNDc5LDEzIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiTklMRlMgd2FybmluZzogdW5hYmxlIHRvIHJlYWQgcHJpbWFyeSBzdXBlcmJsb2NrXG4iKTsKLQl9IGVsc2UgaWYgKCFzYnBbMV0pCisJCSAgICAgICAiTklMRlMgd2FybmluZzogdW5hYmxlIHRvIHJlYWQgcHJpbWFyeSBzdXBlcmJsb2NrICIKKwkJICAgICAgICIoYmxvY2tzaXplID0gJWQpXG4iLCBibG9ja3NpemUpOworCX0gZWxzZSBpZiAoIXNicFsxXSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiTklMRlMgd2FybmluZzogdW5hYmxlIHRvIHJlYWQgc2Vjb25kYXJ5IHN1cGVyYmxvY2tcbiIpOworCQkgICAgICAgIk5JTEZTIHdhcm5pbmc6IHVuYWJsZSB0byByZWFkIHNlY29uZGFyeSBzdXBlcmJsb2NrICIKKwkJICAgICAgICIoYmxvY2tzaXplID0gJWQpXG4iLCBibG9ja3NpemUpOworCX0KIAogCS8qCiAJICogQ29tcGFyZSB0d28gc3VwZXIgYmxvY2tzIGFuZCBzZXQgMSBpbiBzd3AgaWYgdGhlIHNlY29uZGFyeQpAQCAtNTA1LDcgKzUxMiw3IEBACiAKIAlpZiAoIXZhbGlkWyFzd3BdKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJOSUxGUyB3YXJuaW5nOiBicm9rZW4gc3VwZXJibG9jay4gIgotCQkgICAgICAgInVzaW5nIHNwYXJlIHN1cGVyYmxvY2suXG4iKTsKKwkJICAgICAgICJ1c2luZyBzcGFyZSBzdXBlcmJsb2NrIChibG9ja3NpemUgPSAlZCkuXG4iLCBibG9ja3NpemUpOwogCWlmIChzd3ApCiAJCW5pbGZzX3N3YXBfc3VwZXJfYmxvY2sobmlsZnMpOwogCkBAIC01MTksNyArNTI2LDYgQEAKIC8qKgogICogaW5pdF9uaWxmcyAtIGluaXRpYWxpemUgYSBOSUxGUyBpbnN0YW5jZS4KICAqIEBuaWxmczogdGhlX25pbGZzIHN0cnVjdHVyZQotICogQHNiaTogbmlsZnNfc2JfaW5mbwogICogQHNiOiBzdXBlciBibG9jawogICogQGRhdGE6IG1vdW50IG9wdGlvbnMKICAqCkBAIC01MzAsOSArNTM2LDggQEAKICAqIFJldHVybiBWYWx1ZTogT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZC4gT24gZXJyb3IsIGEgbmVnYXRpdmUgZXJyb3IKICAqIGNvZGUgaXMgcmV0dXJuZWQuCiAgKi8KLWludCBpbml0X25pbGZzKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLCBjaGFyICpkYXRhKQoraW50IGluaXRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgKmRhdGEpCiB7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS0+c19zdXBlcjsKIAlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKnNicDsKIAlpbnQgYmxvY2tzaXplOwogCWludCBlcnI7CkBAIC01ODgsNiArNTkzLDkgQEAKIAluaWxmcy0+bnNfYmxvY2tzaXplX2JpdHMgPSBzYi0+c19ibG9ja3NpemVfYml0czsKIAluaWxmcy0+bnNfYmxvY2tzaXplID0gYmxvY2tzaXplOwogCisJZ2V0X3JhbmRvbV9ieXRlcygmbmlsZnMtPm5zX25leHRfZ2VuZXJhdGlvbiwKKwkJCSBzaXplb2YobmlsZnMtPm5zX25leHRfZ2VuZXJhdGlvbikpOworCiAJZXJyID0gbmlsZnNfc3RvcmVfZGlza19sYXlvdXQobmlsZnMsIHNicCk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsZWRfc2JoOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5oIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5oCmluZGV4IGZkODVlNGMuLmY0OTY4MTQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi90aGVfbmlsZnMuaAorKysgYi9mcy9uaWxmczIvdGhlX25pbGZzLmgKQEAgLTMxLDcgKzMxLDggQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlICJzYi5oIgorCitzdHJ1Y3QgbmlsZnNfc2NfaW5mbzsKIAogLyogdGhlX25pbGZzIHN0cnVjdCAqLwogZW51bSB7CkBAIC02NSwxMyArNjYsMjMgQEAKICAqIEBuc19sYXN0X2NubzogY2hlY2twb2ludCBudW1iZXIgb2YgdGhlIGxhdGVzdCBzZWdtZW50CiAgKiBAbnNfcHJvdF9zZXE6IGxlYXN0IHNlcXVlbmNlIG51bWJlciBvZiBzZWdtZW50cyB3aGljaCBtdXN0IG5vdCBiZSByZWNsYWltZWQKICAqIEBuc19wcmV2X3NlcTogYmFzZSBzZXF1ZW5jZSBudW1iZXIgdXNlZCB0byBkZWNpZGUgaWYgYWR2YW5jZSBsb2cgY3Vyc29yCi0gKiBAbnNfc2VnY3Rvcl9zZW06IHNlZ21lbnQgY29uc3RydWN0b3Igc2VtYXBob3JlCisgKiBAbnNfd3JpdGVyOiBsb2cgd3JpdGVyCisgKiBAbnNfc2VnY3Rvcl9zZW06IHNlbWFwaG9yZSBwcm90ZWN0aW5nIGxvZyB3cml0ZQogICogQG5zX2RhdDogREFUIGZpbGUgaW5vZGUKICAqIEBuc19jcGZpbGU6IGNoZWNrcG9pbnQgZmlsZSBpbm9kZQogICogQG5zX3N1ZmlsZTogc2VndXNhZ2UgZmlsZSBpbm9kZQogICogQG5zX2NwdHJlZTogcmItdHJlZSBvZiBhbGwgbW91bnRlZCBjaGVja3BvaW50cyAobmlsZnNfcm9vdCkKICAqIEBuc19jcHRyZWVfbG9jazogbG9jayBwcm90ZWN0aW5nIEBuc19jcHRyZWUKKyAqIEBuc19kaXJ0eV9maWxlczogbGlzdCBvZiBkaXJ0eSBmaWxlcworICogQG5zX2lub2RlX2xvY2s6IGxvY2sgcHJvdGVjdGluZyBAbnNfZGlydHlfZmlsZXMKICAqIEBuc19nY19pbm9kZXM6IGR1bW15IGlub2RlcyB0byBrZWVwIGxpdmUgYmxvY2tzCisgKiBAbnNfbmV4dF9nZW5lcmF0aW9uOiBuZXh0IGdlbmVyYXRpb24gbnVtYmVyIGZvciBpbm9kZXMKKyAqIEBuc19uZXh0X2dlbl9sb2NrOiBsb2NrIHByb3RlY3RpbmcgQG5zX25leHRfZ2VuZXJhdGlvbgorICogQG5zX21vdW50X29wdDogbW91bnQgb3B0aW9ucworICogQG5zX3Jlc3VpZDogdWlkIGZvciByZXNlcnZlZCBibG9ja3MKKyAqIEBuc19yZXNnaWQ6IGdpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzCisgKiBAbnNfaW50ZXJ2YWw6IGNoZWNrcG9pbnQgY3JlYXRpb24gaW50ZXJ2YWwKKyAqIEBuc193YXRlcm1hcms6IHdhdGVybWFyayBmb3IgdGhlIG51bWJlciBvZiBkaXJ0eSBidWZmZXJzCiAgKiBAbnNfYmxvY2tzaXplX2JpdHM6IGJpdCBsZW5ndGggb2YgYmxvY2sgc2l6ZQogICogQG5zX2Jsb2Nrc2l6ZTogYmxvY2sgc2l6ZQogICogQG5zX25zZWdtZW50czogbnVtYmVyIG9mIHNlZ21lbnRzIGluIGZpbGVzeXN0ZW0KQEAgLTEzMSw2ICsxNDIsNyBAQAogCXU2NAkJCW5zX3Byb3Rfc2VxOwogCXU2NAkJCW5zX3ByZXZfc2VxOwogCisJc3RydWN0IG5pbGZzX3NjX2luZm8gICAqbnNfd3JpdGVyOwogCXN0cnVjdCByd19zZW1hcGhvcmUJbnNfc2VnY3Rvcl9zZW07CiAKIAkvKgpAQCAtMTQ1LDkgKzE1NywyNSBAQAogCXN0cnVjdCByYl9yb290CQluc19jcHRyZWU7CiAJc3BpbmxvY2tfdAkJbnNfY3B0cmVlX2xvY2s7CiAKKwkvKiBEaXJ0eSBpbm9kZSBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAluc19kaXJ0eV9maWxlczsKKwlzcGlubG9ja190CQluc19pbm9kZV9sb2NrOworCiAJLyogR0MgaW5vZGUgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJbnNfZ2NfaW5vZGVzOwogCisJLyogSW5vZGUgYWxsb2NhdG9yICovCisJdTMyCQkJbnNfbmV4dF9nZW5lcmF0aW9uOworCXNwaW5sb2NrX3QJCW5zX25leHRfZ2VuX2xvY2s7CisKKwkvKiBNb3VudCBvcHRpb25zICovCisJdW5zaWduZWQgbG9uZwkJbnNfbW91bnRfb3B0OworCisJdWlkX3QJCQluc19yZXN1aWQ7CisJZ2lkX3QJCQluc19yZXNnaWQ7CisJdW5zaWduZWQgbG9uZwkJbnNfaW50ZXJ2YWw7CisJdW5zaWduZWQgbG9uZwkJbnNfd2F0ZXJtYXJrOworCiAJLyogRGlzayBsYXlvdXQgaW5mb3JtYXRpb24gKHN0YXRpYykgKi8KIAl1bnNpZ25lZCBpbnQJCW5zX2Jsb2Nrc2l6ZV9iaXRzOwogCXVuc2lnbmVkIGludAkJbnNfYmxvY2tzaXplOwpAQCAtMTgwLDYgKzIwOCwyMCBAQAogVEhFX05JTEZTX0ZOUyhHQ19SVU5OSU5HLCBnY19ydW5uaW5nKQogVEhFX05JTEZTX0ZOUyhTQl9ESVJUWSwgc2JfZGlydHkpCiAKKy8qCisgKiBNb3VudCBvcHRpb24gb3BlcmF0aW9ucworICovCisjZGVmaW5lIG5pbGZzX2NsZWFyX29wdChuaWxmcywgb3B0KSAgXAorCWRvIHsgKG5pbGZzKS0+bnNfbW91bnRfb3B0ICY9IH5OSUxGU19NT1VOVF8jI29wdDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbmlsZnNfc2V0X29wdChuaWxmcywgb3B0KSAgXAorCWRvIHsgKG5pbGZzKS0+bnNfbW91bnRfb3B0IHw9IE5JTEZTX01PVU5UXyMjb3B0OyB9IHdoaWxlICgwKQorI2RlZmluZSBuaWxmc190ZXN0X29wdChuaWxmcywgb3B0KSAoKG5pbGZzKS0+bnNfbW91bnRfb3B0ICYgTklMRlNfTU9VTlRfIyNvcHQpCisjZGVmaW5lIG5pbGZzX3dyaXRlX29wdChuaWxmcywgbWFzaywgb3B0KQkJCQlcCisJZG8geyAobmlsZnMpLT5uc19tb3VudF9vcHQgPQkJCQkJXAorCQkoKChuaWxmcyktPm5zX21vdW50X29wdCAmIH5OSUxGU19NT1VOVF8jI21hc2spIHwJXAorCQkgTklMRlNfTU9VTlRfIyNvcHQpOwkJCQkJXAorCX0gd2hpbGUgKDApCisKIC8qKgogICogc3RydWN0IG5pbGZzX3Jvb3QgLSBuaWxmcyByb290IG9iamVjdAogICogQGNubzogY2hlY2twb2ludCBudW1iZXIKQEAgLTIyNCwxNSArMjY2LDE0IEBACiB2b2lkIG5pbGZzX3NldF9sYXN0X3NlZ21lbnQoc3RydWN0IHRoZV9uaWxmcyAqLCBzZWN0b3JfdCwgdTY0LCBfX3U2NCk7CiBzdHJ1Y3QgdGhlX25pbGZzICphbGxvY19uaWxmcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIHZvaWQgZGVzdHJveV9uaWxmcyhzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyk7Ci1pbnQgaW5pdF9uaWxmcyhzdHJ1Y3QgdGhlX25pbGZzICosIHN0cnVjdCBuaWxmc19zYl9pbmZvICosIGNoYXIgKik7Ci1pbnQgbG9hZF9uaWxmcyhzdHJ1Y3QgdGhlX25pbGZzICosIHN0cnVjdCBuaWxmc19zYl9pbmZvICopOworaW50IGluaXRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgKmRhdGEpOworaW50IGxvYWRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IG5pbGZzX2Rpc2NhcmRfc2VnbWVudHMoc3RydWN0IHRoZV9uaWxmcyAqLCBfX3U2NCAqLCBzaXplX3QpOwogaW50IG5pbGZzX2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCB0aGVfbmlsZnMgKiwgc2VjdG9yX3QgKik7CiBzdHJ1Y3QgbmlsZnNfcm9vdCAqbmlsZnNfbG9va3VwX3Jvb3Qoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIF9fdTY0IGNubyk7CiBzdHJ1Y3QgbmlsZnNfcm9vdCAqbmlsZnNfZmluZF9vcl9jcmVhdGVfcm9vdChzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywKIAkJCQkJICAgICBfX3U2NCBjbm8pOwogdm9pZCBuaWxmc19wdXRfcm9vdChzdHJ1Y3QgbmlsZnNfcm9vdCAqcm9vdCk7Ci1zdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqbmlsZnNfZmluZF9zYmluZm8oc3RydWN0IHRoZV9uaWxmcyAqLCBpbnQsIF9fdTY0KTsKIGludCBuaWxmc19uZWFyX2Rpc2tfZnVsbChzdHJ1Y3QgdGhlX25pbGZzICopOwogdm9pZCBuaWxmc19mYWxsX2JhY2tfc3VwZXJfYmxvY2soc3RydWN0IHRoZV9uaWxmcyAqKTsKIHZvaWQgbmlsZnNfc3dhcF9zdXBlcl9ibG9jayhzdHJ1Y3QgdGhlX25pbGZzICopOwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMKaW5kZXggOGI2MTIyMC4uNmIxMzA1ZCAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYworKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCkBAIC04NzYsNyArODc2LDcgQEAKICNlbmRpZgogCiAvKgotICogZmFub3RpZnlfdXNlcl9zZXR1cCAtIE91ciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gIE5vdGUgdGhhdCB3ZSBjYW5ubm90IHJldHVybgorICogZmFub3RpZnlfdXNlcl9zZXR1cCAtIE91ciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QgcmV0dXJuCiAgKiBlcnJvciBiZWNhdXNlIHdlIGhhdmUgY29tcGlsZWQtaW4gVkZTIGhvb2tzLiAgU28gYW4gKHVubGlrZWx5KSBmYWlsdXJlIGhlcmUKICAqIG11c3QgcmVzdWx0IGluIHBhbmljKCkuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jIGIvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMKaW5kZXggNGNkNWQ1ZC4uYmQ0NmU3YyAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMKKysrIGIvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMKQEAgLTg0MSw3ICs4NDEsNyBAQAogfQogCiAvKgotICogaW5vdGlmeV91c2VyX3NldHVwIC0gT3VyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAgTm90ZSB0aGF0IHdlIGNhbm5ub3QgcmV0dXJuCisgKiBpbm90aWZ5X3VzZXJfc2V0dXAgLSBPdXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICBOb3RlIHRoYXQgd2UgY2Fubm90IHJldHVybgogICogZXJyb3IgYmVjYXVzZSB3ZSBoYXZlIGNvbXBpbGVkLWluIFZGUyBob29rcy4gIFNvIGFuICh1bmxpa2VseSkgZmFpbHVyZSBoZXJlCiAgKiBtdXN0IHJlc3VsdCBpbiBwYW5pYygpLgogICovCmRpZmYgLS1naXQgYS9mcy9udGZzL01ha2VmaWxlIGIvZnMvbnRmcy9NYWtlZmlsZQppbmRleCA0ZmYwMjhmLi4zMDIwNmIyIDEwMDY0NAotLS0gYS9mcy9udGZzL01ha2VmaWxlCisrKyBiL2ZzL250ZnMvTWFrZWZpbGUKQEAgLTIsMTggKzIsMTMgQEAKIAogb2JqLSQoQ09ORklHX05URlNfRlMpICs9IG50ZnMubwogCi1udGZzLW9ianMgOj0gYW9wcy5vIGF0dHJpYi5vIGNvbGxhdGUubyBjb21wcmVzcy5vIGRlYnVnLm8gZGlyLm8gZmlsZS5vIFwKLQkgICAgIGluZGV4Lm8gaW5vZGUubyBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHN5c2N0bC5vIFwKLQkgICAgIHVuaXN0ci5vIHVwY2FzZS5vCitudGZzLXkgOj0gYW9wcy5vIGF0dHJpYi5vIGNvbGxhdGUubyBjb21wcmVzcy5vIGRlYnVnLm8gZGlyLm8gZmlsZS5vIFwKKwkgIGluZGV4Lm8gaW5vZGUubyBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHN5c2N0bC5vIFwKKwkgIHVuaXN0ci5vIHVwY2FzZS5vCiAKLUVYVFJBX0NGTEFHUyA9IC1ETlRGU19WRVJTSU9OPVwiMi4xLjMwXCIKK250ZnMtJChDT05GSUdfTlRGU19SVykgKz0gYml0bWFwLm8gbGNuYWxsb2MubyBsb2dmaWxlLm8gcXVvdGEubyB1c25qcm5sLm8KIAotaWZlcSAoJChDT05GSUdfTlRGU19ERUJVRykseSkKLUVYVFJBX0NGTEFHUyArPSAtRERFQlVHCi1lbmRpZgorY2NmbGFncy15IDo9IC1ETlRGU19WRVJTSU9OPVwiMi4xLjMwXCIKK2NjZmxhZ3MtJChDT05GSUdfTlRGU19ERUJVRykJKz0gLURERUJVRworY2NmbGFncy0kKENPTkZJR19OVEZTX1JXKQkrPSAtRE5URlNfUlcKIAotaWZlcSAoJChDT05GSUdfTlRGU19SVykseSkKLUVYVFJBX0NGTEFHUyArPSAtRE5URlNfUlcKLQotbnRmcy1vYmpzICs9IGJpdG1hcC5vIGxjbmFsbG9jLm8gbG9nZmlsZS5vIHF1b3RhLm8gdXNuanJubC5vCi1lbmRpZgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvTWFrZWZpbGUgYi9mcy9vY2ZzMi9NYWtlZmlsZQppbmRleCAwN2Q5ZmQ4Li5kOGEwMzEzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKLUVYVFJBX0NGTEFHUyArPSAtSWZzL29jZnMyCitjY2ZsYWdzLXkgOj0gLUlmcy9vY2ZzMgogCi1FWFRSQV9DRkxBR1MgKz0gLURDQVRDSF9CSF9KQkRfUkFDRVMKK2NjZmxhZ3MteSArPSAtRENBVENIX0JIX0pCRF9SQUNFUwogCiBvYmotJChDT05GSUdfT0NGUzJfRlMpICs9IAlcCiAJb2NmczIubwkJCVwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmMKaW5kZXggNzA0ZjZiMS4uOTBmMjcyOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKKysrIGIvZnMvb2NmczIvYWNsLmMKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCWlmICghKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh2YWx1ZSkgewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGlyLmMgYi9mcy9vY2ZzMi9kaXIuYwppbmRleCBkNDE3YjNmLi5mOTdiNmYxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kaXIuYworKysgYi9mcy9vY2ZzMi9kaXIuYwpAQCAtMzU0LDcgKzM1NCw3IEBACiAvKgogICogUmV0dXJucyAwIGlmIG5vdCBmb3VuZCwgLTEgb24gZmFpbHVyZSwgYW5kIDEgb24gc3VjY2VzcwogICovCi1zdGF0aWMgaW50IGlubGluZSBvY2ZzMl9zZWFyY2hfZGlyYmxvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3NlYXJjaF9kaXJibG9jayhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCiAJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL01ha2VmaWxlIGIvZnMvb2NmczIvZGxtL01ha2VmaWxlCmluZGV4IGRjZWJmMGQuLmM4YTA0NGUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9kbG0vTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1FWFRSQV9DRkxBR1MgKz0gLUlmcy9vY2ZzMgorY2NmbGFncy15IDo9IC1JZnMvb2NmczIKIAogb2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICs9IG9jZnMyX2RsbS5vCiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWZzL01ha2VmaWxlIGIvZnMvb2NmczIvZGxtZnMvTWFrZWZpbGUKaW5kZXggZGY2OWI0OC4uZjE0YmU4OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZnMvTWFrZWZpbGUKKysrIGIvZnMvb2NmczIvZGxtZnMvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1FWFRSQV9DRkxBR1MgKz0gLUlmcy9vY2ZzMgorY2NmbGFncy15IDo9IC1JZnMvb2NmczIKIAogb2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBvY2ZzMl9kbG1mcy5vCiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lvY3RsLmMgYi9mcy9vY2ZzMi9pb2N0bC5jCmluZGV4IDdhNDg2ODEuLjA5ZGU3N2MgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lvY3RsLmMKKysrIGIvZnMvb2NmczIvaW9jdGwuYwpAQCAtODIsNyArODIsNyBAQAogCX0KIAogCXN0YXR1cyA9IC1FQUNDRVM7Ci0JaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCWdvdG8gYmFpbF91bmxvY2s7CiAKIAlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMi5oIGIvZnMvb2NmczIvb2NmczIuaAppbmRleCA1MWNkNjg5Li4xYTk3YmExIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMi5oCisrKyBiL2ZzL29jZnMyL29jZnMyLmgKQEAgLTgzMSwxOCArODMxLDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfb2NmczJfc2V0X2JpdCh1bnNpZ25lZCBpbnQgYml0LCB1bnNpZ25lZCBsb25nICpiaXRtYXApCiB7Ci0JZXh0Ml9zZXRfYml0KGJpdCwgYml0bWFwKTsKKwlfX3Rlc3RfYW5kX3NldF9iaXRfbGUoYml0LCBiaXRtYXApOwogfQogI2RlZmluZSBvY2ZzMl9zZXRfYml0KGJpdCwgYWRkcikgX29jZnMyX3NldF9iaXQoKGJpdCksICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX29jZnMyX2NsZWFyX2JpdCh1bnNpZ25lZCBpbnQgYml0LCB1bnNpZ25lZCBsb25nICpiaXRtYXApCiB7Ci0JZXh0Ml9jbGVhcl9iaXQoYml0LCBiaXRtYXApOworCV9fdGVzdF9hbmRfY2xlYXJfYml0X2xlKGJpdCwgYml0bWFwKTsKIH0KICNkZWZpbmUgb2NmczJfY2xlYXJfYml0KGJpdCwgYWRkcikgX29jZnMyX2NsZWFyX2JpdCgoYml0KSwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCiAKLSNkZWZpbmUgb2NmczJfdGVzdF9iaXQgZXh0Ml90ZXN0X2JpdAotI2RlZmluZSBvY2ZzMl9maW5kX25leHRfemVyb19iaXQgZXh0Ml9maW5kX25leHRfemVyb19iaXQKLSNkZWZpbmUgb2NmczJfZmluZF9uZXh0X2JpdCBleHQyX2ZpbmRfbmV4dF9iaXQKKyNkZWZpbmUgb2NmczJfdGVzdF9iaXQgdGVzdF9iaXRfbGUKKyNkZWZpbmUgb2NmczJfZmluZF9uZXh0X3plcm9fYml0IGZpbmRfbmV4dF96ZXJvX2JpdF9sZQorI2RlZmluZSBvY2ZzMl9maW5kX25leHRfYml0IGZpbmRfbmV4dF9iaXRfbGUKICNlbmRpZiAgLyogT0NGUzJfSCAqLwogCmRpZmYgLS1naXQgYS9mcy9vbWZzL2Rpci5jIGIvZnMvb21mcy9kaXIuYwppbmRleCAzOTNmM2Y2Li5kZTRmZjI5IDEwMDY0NAotLS0gYS9mcy9vbWZzL2Rpci5jCisrKyBiL2ZzL29tZnMvZGlyLmMKQEAgLTIzNSwzMyArMjM1LDIyIEBACiAJcmV0dXJuICpwdHIgIT0gfjA7CiB9CiAKLXN0YXRpYyBpbnQgb21mc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgb21mc19yZW1vdmUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlpbnQgcmV0OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IHJldDsKKworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmICFvbWZzX2Rpcl9pc19lbXB0eShpbm9kZSkpCisJCXJldHVybiAtRU5PVEVNUFRZOwogCiAJcmV0ID0gb21mc19kZWxldGVfZW50cnkoZGVudHJ5KTsKIAlpZiAocmV0KQotCQlnb3RvIGVuZF91bmxpbms7Ci0KLQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJCXJldHVybiByZXQ7CisJCisJY2xlYXJfbmxpbmsoaW5vZGUpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKLQotZW5kX3VubGluazoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9tZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlpbnQgZXJyID0gLUVOT1RFTVBUWTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCi0JaWYgKG9tZnNfZGlyX2lzX2VtcHR5KGlub2RlKSkgewotCQllcnIgPSBvbWZzX3VubGluayhkaXIsIGRlbnRyeSk7Ci0JCWlmICghZXJyKQotCQkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwotCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9tZnNfYWRkX25vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCkBAIC0zNzIsOSArMzYxLDEwIEBACiAKIAkJcmVzID0gZmlsbGRpcihkaXJlbnQsIG9pLT5pX25hbWUsIHN0cm5sZW4ob2ktPmlfbmFtZSwKIAkJCU9NRlNfTkFNRUxFTiksIGZpbHAtPmZfcG9zLCBzZWxmLCBkX3R5cGUpOwotCQlpZiAocmVzID09IDApCi0JCQlmaWxwLT5mX3BvcysrOwogCQlicmVsc2UoYmgpOworCQlpZiAocmVzIDwgMCkKKwkJCWJyZWFrOworCQlmaWxwLT5mX3BvcysrOwogCX0KIG91dDoKIAlyZXR1cm4gcmVzOwpAQCAtMzg1LDQ0ICszNzUsMjggQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSA9IG5ld19kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGlub2RlICpvbGRfaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGlzX2RpcjsKIAlpbnQgZXJyOwogCi0JaXNfZGlyID0gU19JU0RJUihvbGRfaW5vZGUtPmlfbW9kZSk7Ci0KIAlpZiAobmV3X2lub2RlKSB7CiAJCS8qIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGUvZGlyICovCi0JCWVyciA9IC1FTk9URU1QVFk7Ci0JCWlmIChpc19kaXIgJiYgIW9tZnNfZGlyX2lzX2VtcHR5KG5ld19pbm9kZSkpCi0JCQlnb3RvIG91dDsKLQotCQllcnIgPSAtRU5PRU5UOwotCQliaCA9IG9tZnNfZmluZF9lbnRyeShuZXdfZGlyLCBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCW5ld19kZW50cnktPmRfbmFtZS5sZW4pOwotCQlpZiAoSVNfRVJSKGJoKSkKLQkJCWdvdG8gb3V0OwotCQlicmVsc2UoYmgpOwotCi0JCWVyciA9IG9tZnNfdW5saW5rKG5ld19kaXIsIG5ld19kZW50cnkpOworCQllcnIgPSBvbWZzX3JlbW92ZShuZXdfZGlyLCBuZXdfZGVudHJ5KTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KIAogCS8qIHNpbmNlIG9tZnMgbG9jYXRlcyBmaWxlcyBieSBuYW1lLCB3ZSBuZWVkIHRvIHVubGluayBfYmVmb3JlXwogCSAqIGFkZGluZyB0aGUgbmV3IGxpbmsgb3Igd2Ugd29uJ3QgZmluZCB0aGUgb2xkIG9uZSAqLwotCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7Ci0JZXJyID0gb21mc191bmxpbmsob2xkX2Rpciwgb2xkX2RlbnRyeSk7Ci0JaWYgKGVycikgewotCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOworCWVyciA9IG9tZnNfZGVsZXRlX2VudHJ5KG9sZF9kZW50cnkpOworCWlmIChlcnIpCiAJCWdvdG8gb3V0OwotCX0KIAorCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CiAJZXJyID0gb21mc19hZGRfbGluayhuZXdfZGVudHJ5LCBvbGRfaW5vZGUpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJb2xkX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ4OCw4ICs0NjIsOCBAQAogCS5ta2RpciA9IG9tZnNfbWtkaXIsCiAJLnJlbmFtZSA9IG9tZnNfcmVuYW1lLAogCS5jcmVhdGUgPSBvbWZzX2NyZWF0ZSwKLQkudW5saW5rID0gb21mc191bmxpbmssCi0JLnJtZGlyID0gb21mc19ybWRpciwKKwkudW5saW5rID0gb21mc19yZW1vdmUsCisJLnJtZGlyID0gb21mc19yZW1vdmUsCiB9OwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZGlyX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggZjgzY2E4MC4uYjUyY2YwMSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtODM1LDE3ICs4MzUsOCBAQAogCiAJdmFsaWRhdGVfY3JlZHMoY3JlZCk7CiAKLQkvKgotCSAqIFdlIG11c3QgYWx3YXlzIHBhc3MgaW4gYSB2YWxpZCBtb3VudCBwb2ludGVyLiAgIEhpc3RvcmljYWxseQotCSAqIGNhbGxlcnMgZ290IGF3YXkgd2l0aCBub3QgcGFzc2luZyBpdCwgYnV0IHdlIG11c3QgZW5mb3JjZSB0aGlzIGF0Ci0JICogdGhlIGVhcmxpZXN0IHBvc3NpYmxlIHBvaW50IG5vdyB0byBhdm9pZCBzdHJhbmdlIHByb2JsZW1zIGRlZXAgaW4gdGhlCi0JICogZmlsZXN5c3RlbSBzdGFjay4KLQkgKi8KLQlpZiAoIW1udCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBjYWxsZWQgd2l0aCBOVUxMIHZmc21vdW50XG4iLCBfX2Z1bmNfXyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQorCS8qIFdlIG11c3QgYWx3YXlzIHBhc3MgaW4gYSB2YWxpZCBtb3VudCBwb2ludGVyLiAqLworCUJVR19PTighbW50KTsKIAogCWVycm9yID0gLUVORklMRTsKIAlmID0gZ2V0X2VtcHR5X2ZpbHAoKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCA3Yzk5YzFjLi41ZTRmNzc2IDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC00ODksOCArNDg5LDggQEAKIAkJdnNpemUsCiAJCW1tID8gZ2V0X21tX3JzcyhtbSkgOiAwLAogCQlyc3NsaW0sCi0JCW1tID8gbW0tPnN0YXJ0X2NvZGUgOiAwLAotCQltbSA/IG1tLT5lbmRfY29kZSA6IDAsCisJCW1tID8gKHBlcm1pdHRlZCA/IG1tLT5zdGFydF9jb2RlIDogMSkgOiAwLAorCQltbSA/IChwZXJtaXR0ZWQgPyBtbS0+ZW5kX2NvZGUgOiAxKSA6IDAsCiAJCShwZXJtaXR0ZWQgJiYgbW0pID8gbW0tPnN0YXJ0X3N0YWNrIDogMCwKIAkJZXNwLAogCQllaXAsCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGQ0OWM0YjUuLmRhYmExMzYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0zNDAsNyArMzQwLDcgQEAKIAlzYXZlX3N0YWNrX3RyYWNlX3Rzayh0YXNrLCAmdHJhY2UpOwogCiAJZm9yIChpID0gMDsgaSA8IHRyYWNlLm5yX2VudHJpZXM7IGkrKykgewotCQlzZXFfcHJpbnRmKG0sICJbPCVwPl0gJXBTXG4iLAorCQlzZXFfcHJpbnRmKG0sICJbPCVwSz5dICVwU1xuIiwKIAkJCSAgICh2b2lkICopZW50cmllc1tpXSwgKHZvaWQgKillbnRyaWVzW2ldKTsKIAl9CiAJa2ZyZWUoZW50cmllcyk7CkBAIC03NzUsNyArNzc1LDggQEAKIAlpZiAoIXRhc2spCiAJCWdvdG8gb3V0X25vX3Rhc2s7CiAKLQlpZiAoY2hlY2tfbWVtX3Blcm1pc3Npb24odGFzaykpCisJcmV0ID0gY2hlY2tfbWVtX3Blcm1pc3Npb24odGFzayk7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSAtRU5PTUVNOwpAQCAtODQ1LDcgKzg0Niw4IEBACiAJaWYgKCF0YXNrKQogCQlnb3RvIG91dF9ub190YXNrOwogCi0JaWYgKGNoZWNrX21lbV9wZXJtaXNzaW9uKHRhc2spKQorCWNvcGllZCA9IGNoZWNrX21lbV9wZXJtaXNzaW9uKHRhc2spOworCWlmIChjb3BpZWQpCiAJCWdvdG8gb3V0OwogCiAJY29waWVkID0gLUVOT01FTTsKQEAgLTkxNyw2ICs5MTksNyBAQAogCWlmICghdGFzaykKIAkJZ290byBvdXRfbm9fdGFzazsKIAorCXJldCA9IC1FUEVSTTsKIAlpZiAoIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9nZW5lcmljLmMgYi9mcy9wcm9jL2dlbmVyaWMuYwppbmRleCAwMWUwN2YyLi5mMTI4MTMzOSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9nZW5lcmljLmMKKysrIGIvZnMvcHJvYy9nZW5lcmljLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogREVGSU5FX1NQSU5MT0NLKHByb2Nfc3ViZGlyX2xvY2spOwogCi1zdGF0aWMgaW50IHByb2NfbWF0Y2goaW50IGxlbiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKK3N0YXRpYyBpbnQgcHJvY19tYXRjaCh1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQogewogCWlmIChkZS0+bmFtZWxlbiAhPSBsZW4pCiAJCXJldHVybiAwOwpAQCAtMzAzLDcgKzMwMyw3IEBACiB7CiAJY29uc3QgY2hhciAgICAgCQkqY3AgPSBuYW1lLCAqbmV4dDsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmRlOwotCWludAkJCWxlbjsKKwl1bnNpZ25lZCBpbnQJCWxlbjsKIAogCWRlID0gKnJldDsKIAlpZiAoIWRlKQpAQCAtNjAyLDcgKzYwMiw3IEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmZuID0gbmFtZTsKLQlpbnQgbGVuOworCXVuc2lnbmVkIGludCBsZW47CiAKIAkvKiBtYWtlIHN1cmUgbmFtZSBpcyB2YWxpZCAqLwogCWlmICghbmFtZSB8fCAhc3RybGVuKG5hbWUpKSBnb3RvIG91dDsKQEAgLTc4Niw3ICs3ODYsNyBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKnA7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZm4gPSBuYW1lOwotCWludCBsZW47CisJdW5zaWduZWQgaW50IGxlbjsKIAogCXNwaW5fbG9jaygmcHJvY19zdWJkaXJfbG9jayk7CiAJaWYgKF9feGxhdGVfcHJvY19uYW1lKG5hbWUsICZwYXJlbnQsICZmbikgIT0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS5jIGIvZnMvcHJvYy9pbm9kZS5jCmluZGV4IGQ2YTdjYTEuLmQxNWFhMWIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW5vZGUuYworKysgYi9mcy9wcm9jL2lub2RlLmMKQEAgLTQ2LDggKzQ2LDYgQEAKIAl9CiB9CiAKLXN0cnVjdCB2ZnNtb3VudCAqcHJvY19tbnQ7Ci0KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqIHByb2NfaW5vZGVfY2FjaGVwOwogCiBzdGF0aWMgc3RydWN0IGlub2RlICpwcm9jX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCmRpZmYgLS1naXQgYS9mcy9wcm9jL2ludGVybmFsLmggYi9mcy9wcm9jL2ludGVybmFsLmgKaW5kZXggOWFkNTYxZC4uYzAzZThkMyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9pbnRlcm5hbC5oCisrKyBiL2ZzL3Byb2MvaW50ZXJuYWwuaApAQCAtMTA3LDcgKzEwNyw2IEBACiB9CiB2b2lkIHBkZV9wdXQoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUpOwogCi1leHRlcm4gc3RydWN0IHZmc21vdW50ICpwcm9jX21udDsKIGludCBwcm9jX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RydWN0IGlub2RlICpwcm9jX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICopOwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Jvb3QuYyBiL2ZzL3Byb2Mvcm9vdC5jCmluZGV4IGVmOWZhOGUuLmE5MDAwZTkgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvcm9vdC5jCisrKyBiL2ZzL3Byb2Mvcm9vdC5jCkBAIC00MywxNyArNDMsNiBAQAogCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKIAlzdHJ1Y3QgcHJvY19pbm9kZSAqZWk7CiAKLQlpZiAocHJvY19tbnQpIHsKLQkJLyogU2VlZCB0aGUgcm9vdCBkaXJlY3Rvcnkgd2l0aCBhIHBpZCBzbyBpdCBkb2Vzbid0IG5lZWQKLQkJICogdG8gYmUgc3BlY2lhbCBpbiBiYXNlLmMuICBJIHdvdWxkIGRvIHRoaXMgZWFybGllciBidXQKLQkJICogdGhlIG9ubHkgdGFzayBhbGl2ZSB3aGVuIC9wcm9jIGlzIG1vdW50ZWQgdGhlIGZpcnN0IHRpbWUKLQkJICogaXMgdGhlIGluaXRfdGFzayBhbmQgaXQgZG9lc24ndCBoYXZlIGFueSBwaWRzLgotCQkgKi8KLQkJZWkgPSBQUk9DX0kocHJvY19tbnQtPm1udF9zYi0+c19yb290LT5kX2lub2RlKTsKLQkJaWYgKCFlaS0+cGlkKQotCQkJZWktPnBpZCA9IGZpbmRfZ2V0X3BpZCgxKTsKLQl9Ci0KIAlpZiAoZmxhZ3MgJiBNU19LRVJOTU9VTlQpCiAJCW5zID0gKHN0cnVjdCBwaWRfbmFtZXNwYWNlICopZGF0YTsKIAllbHNlCkBAIC03MSwxNiArNjAsMTYgQEAKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIAotCQllaSA9IFBST0NfSShzYi0+c19yb290LT5kX2lub2RlKTsKLQkJaWYgKCFlaS0+cGlkKSB7Ci0JCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQllaS0+cGlkID0gZ2V0X3BpZChmaW5kX3BpZF9ucygxLCBucykpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCX0KLQogCQlzYi0+c19mbGFncyB8PSBNU19BQ1RJVkU7CiAJfQogCisJZWkgPSBQUk9DX0koc2ItPnNfcm9vdC0+ZF9pbm9kZSk7CisJaWYgKCFlaS0+cGlkKSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJZWktPnBpZCA9IGdldF9waWQoZmluZF9waWRfbnMoMSwgbnMpKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCiAJcmV0dXJuIGRnZXQoc2ItPnNfcm9vdCk7CiB9CiAKQEAgLTEwMSwxOSArOTAsMjAgQEAKIAogdm9pZCBfX2luaXQgcHJvY19yb290X2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKIAlpbnQgZXJyOwogCiAJcHJvY19pbml0X2lub2RlY2FjaGUoKTsKIAllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZwcm9jX2ZzX3R5cGUpOwogCWlmIChlcnIpCiAJCXJldHVybjsKLQlwcm9jX21udCA9IGtlcm5fbW91bnRfZGF0YSgmcHJvY19mc190eXBlLCAmaW5pdF9waWRfbnMpOwotCWlmIChJU19FUlIocHJvY19tbnQpKSB7CisJbW50ID0ga2Vybl9tb3VudF9kYXRhKCZwcm9jX2ZzX3R5cGUsICZpbml0X3BpZF9ucyk7CisJaWYgKElTX0VSUihtbnQpKSB7CiAJCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmcHJvY19mc190eXBlKTsKIAkJcmV0dXJuOwogCX0KIAotCWluaXRfcGlkX25zLnByb2NfbW50ID0gcHJvY19tbnQ7CisJaW5pdF9waWRfbnMucHJvY19tbnQgPSBtbnQ7CiAJcHJvY19zeW1saW5rKCJtb3VudHMiLCBOVUxMLCAic2VsZi9tb3VudHMiKTsKIAogCXByb2NfbmV0X2luaXQoKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA2MGI5MTQ4Li42MzZmMWExIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgorI2luY2x1ZGUgPGxpbnV4L2h1Z2VfbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpAQCAtNyw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgorI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgogCkBAIC0yNDksOCArMjUxLDggQEAKIAkJY29uc3QgY2hhciAqbmFtZSA9IGFyY2hfdm1hX25hbWUodm1hKTsKIAkJaWYgKCFuYW1lKSB7CiAJCQlpZiAobW0pIHsKLQkJCQlpZiAodm1hLT52bV9zdGFydCA8PSBtbS0+c3RhcnRfYnJrICYmCi0JCQkJCQl2bWEtPnZtX2VuZCA+PSBtbS0+YnJrKSB7CisJCQkJaWYgKHZtYS0+dm1fc3RhcnQgPD0gbW0tPmJyayAmJgorCQkJCQkJdm1hLT52bV9lbmQgPj0gbW0tPnN0YXJ0X2JyaykgewogCQkJCQluYW1lID0gIltoZWFwXSI7CiAJCQkJfSBlbHNlIGlmICh2bWEtPnZtX3N0YXJ0IDw9IG1tLT5zdGFydF9zdGFjayAmJgogCQkJCQkgICB2bWEtPnZtX2VuZCA+PSBtbS0+c3RhcnRfc3RhY2spIHsKQEAgLTMyOSw1OCArMzMxLDg2IEBACiAJdW5zaWduZWQgbG9uZyBwcml2YXRlX2RpcnR5OwogCXVuc2lnbmVkIGxvbmcgcmVmZXJlbmNlZDsKIAl1bnNpZ25lZCBsb25nIGFub255bW91czsKKwl1bnNpZ25lZCBsb25nIGFub255bW91c190aHA7CiAJdW5zaWduZWQgbG9uZyBzd2FwOwogCXU2NCBwc3M7CiB9OwogCisKK3N0YXRpYyB2b2lkIHNtYXBzX3B0ZV9lbnRyeShwdGVfdCBwdGVudCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQl1bnNpZ25lZCBsb25nIHB0ZW50X3NpemUsIHN0cnVjdCBtbV93YWxrICp3YWxrKQoreworCXN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzID0gd2Fsay0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1zcy0+dm1hOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBtYXBjb3VudDsKKworCWlmIChpc19zd2FwX3B0ZShwdGVudCkpIHsKKwkJbXNzLT5zd2FwICs9IHB0ZW50X3NpemU7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSkKKwkJcmV0dXJuOworCisJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlbnQpOworCWlmICghcGFnZSkKKwkJcmV0dXJuOworCisJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQltc3MtPmFub255bW91cyArPSBwdGVudF9zaXplOworCisJbXNzLT5yZXNpZGVudCArPSBwdGVudF9zaXplOworCS8qIEFjY3VtdWxhdGUgdGhlIHNpemUgaW4gcGFnZXMgdGhhdCBoYXZlIGJlZW4gYWNjZXNzZWQuICovCisJaWYgKHB0ZV95b3VuZyhwdGVudCkgfHwgUGFnZVJlZmVyZW5jZWQocGFnZSkpCisJCW1zcy0+cmVmZXJlbmNlZCArPSBwdGVudF9zaXplOworCW1hcGNvdW50ID0gcGFnZV9tYXBjb3VudChwYWdlKTsKKwlpZiAobWFwY291bnQgPj0gMikgeworCQlpZiAocHRlX2RpcnR5KHB0ZW50KSB8fCBQYWdlRGlydHkocGFnZSkpCisJCQltc3MtPnNoYXJlZF9kaXJ0eSArPSBwdGVudF9zaXplOworCQllbHNlCisJCQltc3MtPnNoYXJlZF9jbGVhbiArPSBwdGVudF9zaXplOworCQltc3MtPnBzcyArPSAocHRlbnRfc2l6ZSA8PCBQU1NfU0hJRlQpIC8gbWFwY291bnQ7CisJfSBlbHNlIHsKKwkJaWYgKHB0ZV9kaXJ0eShwdGVudCkgfHwgUGFnZURpcnR5KHBhZ2UpKQorCQkJbXNzLT5wcml2YXRlX2RpcnR5ICs9IHB0ZW50X3NpemU7CisJCWVsc2UKKwkJCW1zcy0+cHJpdmF0ZV9jbGVhbiArPSBwdGVudF9zaXplOworCQltc3MtPnBzcyArPSAocHRlbnRfc2l6ZSA8PCBQU1NfU0hJRlQpOworCX0KK30KKwogc3RhdGljIGludCBzbWFwc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCSAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzID0gd2Fsay0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1zcy0+dm1hOwotCXB0ZV90ICpwdGUsIHB0ZW50OworCXB0ZV90ICpwdGU7CiAJc3BpbmxvY2tfdCAqcHRsOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBtYXBjb3VudDsKIAotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKLQlmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkgewotCQlwdGVudCA9ICpwdGU7Ci0KLQkJaWYgKGlzX3N3YXBfcHRlKHB0ZW50KSkgewotCQkJbXNzLT5zd2FwICs9IFBBR0VfU0laRTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFwdGVfcHJlc2VudChwdGVudCkpCi0JCQljb250aW51ZTsKLQotCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVudCk7Ci0JCWlmICghcGFnZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChQYWdlQW5vbihwYWdlKSkKLQkJCW1zcy0+YW5vbnltb3VzICs9IFBBR0VfU0laRTsKLQotCQltc3MtPnJlc2lkZW50ICs9IFBBR0VfU0laRTsKLQkJLyogQWNjdW11bGF0ZSB0aGUgc2l6ZSBpbiBwYWdlcyB0aGF0IGhhdmUgYmVlbiBhY2Nlc3NlZC4gKi8KLQkJaWYgKHB0ZV95b3VuZyhwdGVudCkgfHwgUGFnZVJlZmVyZW5jZWQocGFnZSkpCi0JCQltc3MtPnJlZmVyZW5jZWQgKz0gUEFHRV9TSVpFOwotCQltYXBjb3VudCA9IHBhZ2VfbWFwY291bnQocGFnZSk7Ci0JCWlmIChtYXBjb3VudCA+PSAyKSB7Ci0JCQlpZiAocHRlX2RpcnR5KHB0ZW50KSB8fCBQYWdlRGlydHkocGFnZSkpCi0JCQkJbXNzLT5zaGFyZWRfZGlydHkgKz0gUEFHRV9TSVpFOwotCQkJZWxzZQotCQkJCW1zcy0+c2hhcmVkX2NsZWFuICs9IFBBR0VfU0laRTsKLQkJCW1zcy0+cHNzICs9IChQQUdFX1NJWkUgPDwgUFNTX1NISUZUKSAvIG1hcGNvdW50OworCXNwaW5fbG9jaygmd2Fsay0+bW0tPnBhZ2VfdGFibGVfbG9jayk7CisJaWYgKHBtZF90cmFuc19odWdlKCpwbWQpKSB7CisJCWlmIChwbWRfdHJhbnNfc3BsaXR0aW5nKCpwbWQpKSB7CisJCQlzcGluX3VubG9jaygmd2Fsay0+bW0tPnBhZ2VfdGFibGVfbG9jayk7CisJCQl3YWl0X3NwbGl0X2h1Z2VfcGFnZSh2bWEtPmFub25fdm1hLCBwbWQpOwogCQl9IGVsc2UgewotCQkJaWYgKHB0ZV9kaXJ0eShwdGVudCkgfHwgUGFnZURpcnR5KHBhZ2UpKQotCQkJCW1zcy0+cHJpdmF0ZV9kaXJ0eSArPSBQQUdFX1NJWkU7Ci0JCQllbHNlCi0JCQkJbXNzLT5wcml2YXRlX2NsZWFuICs9IFBBR0VfU0laRTsKLQkJCW1zcy0+cHNzICs9IChQQUdFX1NJWkUgPDwgUFNTX1NISUZUKTsKKwkJCXNtYXBzX3B0ZV9lbnRyeSgqKHB0ZV90ICopcG1kLCBhZGRyLAorCQkJCQlIUEFHRV9QTURfU0laRSwgd2Fsayk7CisJCQlzcGluX3VubG9jaygmd2Fsay0+bW0tPnBhZ2VfdGFibGVfbG9jayk7CisJCQltc3MtPmFub255bW91c190aHAgKz0gSFBBR0VfUE1EX1NJWkU7CisJCQlyZXR1cm4gMDsKIAkJfQorCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZ3YWxrLT5tbS0+cGFnZV90YWJsZV9sb2NrKTsKIAl9CisJLyoKKwkgKiBUaGUgbW1hcF9zZW0gaGVsZCBhbGwgdGhlIHdheSBiYWNrIGluIG1fc3RhcnQoKSBpcyB3aGF0CisJICoga2VlcHMga2h1Z2VwYWdlZCBvdXQgb2YgaGVyZSBhbmQgZnJvbSBjb2xsYXBzaW5nIHRoaW5ncworCSAqIGluIGhlcmUuCisJICovCisJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtPnZtX21tLCBwbWQsIGFkZHIsICZwdGwpOworCWZvciAoOyBhZGRyICE9IGVuZDsgcHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFKQorCQlzbWFwc19wdGVfZW50cnkoKnB0ZSwgYWRkciwgUEFHRV9TSVpFLCB3YWxrKTsKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSAtIDEsIHB0bCk7CiAJY29uZF9yZXNjaGVkKCk7CiAJcmV0dXJuIDA7CkBAIC00MTYsNiArNDQ2LDcgQEAKIAkJICAgIlByaXZhdGVfRGlydHk6ICAlOGx1IGtCXG4iCiAJCSAgICJSZWZlcmVuY2VkOiAgICAgJThsdSBrQlxuIgogCQkgICAiQW5vbnltb3VzOiAgICAgICU4bHUga0JcbiIKKwkJICAgIkFub25IdWdlUGFnZXM6ICAlOGx1IGtCXG4iCiAJCSAgICJTd2FwOiAgICAgICAgICAgJThsdSBrQlxuIgogCQkgICAiS2VybmVsUGFnZVNpemU6ICU4bHUga0JcbiIKIAkJICAgIk1NVVBhZ2VTaXplOiAgICAlOGx1IGtCXG4iCkBAIC00MjksNiArNDYwLDcgQEAKIAkJICAgbXNzLnByaXZhdGVfZGlydHkgPj4gMTAsCiAJCSAgIG1zcy5yZWZlcmVuY2VkID4+IDEwLAogCQkgICBtc3MuYW5vbnltb3VzID4+IDEwLAorCQkgICBtc3MuYW5vbnltb3VzX3RocCA+PiAxMCwKIAkJICAgbXNzLnN3YXAgPj4gMTAsCiAJCSAgIHZtYV9rZXJuZWxfcGFnZXNpemUodm1hKSA+PiAxMCwKIAkJICAgdm1hX21tdV9wYWdlc2l6ZSh2bWEpID4+IDEwLApAQCAtNDY3LDYgKzQ5OSw4IEBACiAJc3BpbmxvY2tfdCAqcHRsOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCisJc3BsaXRfaHVnZV9wYWdlX3BtZCh3YWxrLT5tbSwgcG1kKTsKKwogCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKIAlmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkgewogCQlwdGVudCA9ICpwdGU7CkBAIC02MjMsNiArNjU3LDggQEAKIAlwdGVfdCAqcHRlOwogCWludCBlcnIgPSAwOwogCisJc3BsaXRfaHVnZV9wYWdlX3BtZCh3YWxrLT5tbSwgcG1kKTsKKwogCS8qIGZpbmQgdGhlIGZpcnN0IFZNQSBhdCBvciBhYm92ZSAnYWRkcicgKi8KIAl2bWEgPSBmaW5kX3ZtYSh3YWxrLT5tbSwgYWRkcik7CiAJZm9yICg7IGFkZHIgIT0gZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewpkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL2lub2RlLmMgYi9mcy9wc3RvcmUvaW5vZGUuYwppbmRleCA1NDlkMjQ1Li45NzdlZDI3IDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvaW5vZGUuYworKysgYi9mcy9wc3RvcmUvaW5vZGUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFtZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAjaW5jbHVkZSA8bGludXgvcHN0b3JlLmg+CkBAIC00MCw5ICs0MSwyOSBAQAogc3RydWN0IHBzdG9yZV9wcml2YXRlIHsKIAl1NjQJaWQ7CiAJaW50CSgqZXJhc2UpKHU2NCk7CisJc3NpemVfdAlzaXplOworCWNoYXIJZGF0YVtdOwogfTsKIAotI2RlZmluZSBwc3RvcmVfZ2V0X2lub2RlIHJhbWZzX2dldF9pbm9kZQorc3RhdGljIGludCBwc3RvcmVfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBzdG9yZV9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHBzdG9yZV9wcml2YXRlICpwcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgcHMtPmRhdGEsIHBzLT5zaXplKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHN0b3JlX2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkub3Blbgk9IHBzdG9yZV9maWxlX29wZW4sCisJLnJlYWQJPSBwc3RvcmVfZmlsZV9yZWFkLAorCS5sbHNlZWsJPSBkZWZhdWx0X2xsc2VlaywKK307CiAKIC8qCiAgKiBXaGVuIGEgZmlsZSBpcyB1bmxpbmtlZCBmcm9tIG91ciBmaWxlIHN5c3RlbSB3ZSBjYWxsIHRoZQpAQCAtNTMsNTQgKzc0LDk5IEBACiAJc3RydWN0IHBzdG9yZV9wcml2YXRlICpwID0gZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAKIAlwLT5lcmFzZShwLT5pZCk7Ci0Ja2ZyZWUocCk7CiAKIAlyZXR1cm4gc2ltcGxlX3VubGluayhkaXIsIGRlbnRyeSk7CiB9CiAKK3N0YXRpYyB2b2lkIHBzdG9yZV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCWtmcmVlKGlub2RlLT5pX3ByaXZhdGUpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHN0b3JlX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewogCS5sb29rdXAJCT0gc2ltcGxlX2xvb2t1cCwKIAkudW5saW5rCQk9IHBzdG9yZV91bmxpbmssCiB9OwogCitzdGF0aWMgc3RydWN0IGlub2RlICpwc3RvcmVfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCWNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgbW9kZSwgZGV2X3QgZGV2KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoc2IpOworCisJaWYgKGlub2RlKSB7CisJCWlub2RlLT5pX2lubyA9IGdldF9uZXh0X2lubygpOworCQlpbm9kZS0+aV91aWQgPSBpbm9kZS0+aV9naWQgPSAwOworCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKKwkJY2FzZSBTX0lGUkVHOgorCQkJaW5vZGUtPmlfZm9wID0gJnBzdG9yZV9maWxlX29wZXJhdGlvbnM7CisJCQlicmVhazsKKwkJY2FzZSBTX0lGRElSOgorCQkJaW5vZGUtPmlfb3AgPSAmcHN0b3JlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCQkJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKKwkJCWluY19ubGluayhpbm9kZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gaW5vZGU7Cit9CisKK2VudW0geworCU9wdF9rbXNnX2J5dGVzLCBPcHRfZXJyCit9OworCitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CisJe09wdF9rbXNnX2J5dGVzLCAia21zZ19ieXRlcz0ldSJ9LAorCXtPcHRfZXJyLCBOVUxMfQorfTsKKworc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zKQoreworCWNoYXIJCSpwOworCXN1YnN0cmluZ190CWFyZ3NbTUFYX09QVF9BUkdTXTsKKwlpbnQJCW9wdGlvbjsKKworCWlmICghb3B0aW9ucykKKwkJcmV0dXJuOworCisJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWludCB0b2tlbjsKKworCQlpZiAoISpwKQorCQkJY29udGludWU7CisKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCB0b2tlbnMsIGFyZ3MpOworCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgT3B0X2ttc2dfYnl0ZXM6CisJCQlpZiAoIW1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkJcHN0b3JlX3NldF9rbXNnX2J5dGVzKG9wdGlvbik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwc3RvcmVfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQoreworCXBhcnNlX29wdGlvbnMoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHBzdG9yZV9vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gcHN0b3JlX2V2aWN0X2lub2RlLAorCS5yZW1vdW50X2ZzCT0gcHN0b3JlX3JlbW91bnQsCiAJLnNob3dfb3B0aW9ucwk9IGdlbmVyaWNfc2hvd19vcHRpb25zLAogfTsKIAogc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqcHN0b3JlX3NiOwotc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqcHN0b3JlX21udDsKIAogaW50IHBzdG9yZV9pc19tb3VudGVkKHZvaWQpCiB7Ci0JcmV0dXJuIHBzdG9yZV9tbnQgIT0gTlVMTDsKLX0KLQotLyoKLSAqIFNldCB1cCBhIGZpbGUgc3RydWN0dXJlIGFzIGlmIHdlIGhhZCBvcGVuZWQgdGhpcyBmaWxlIGFuZAotICogd3JpdGUgb3VyIGRhdGEgdG8gaXQuCi0gKi8KLXN0YXRpYyBpbnQgcHN0b3JlX3dyaXRlZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IGZpbGUgZjsKLQlzc2l6ZV90IG47Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCi0JbWVtc2V0KCZmLCAnMCcsIHNpemVvZiBmKTsKLQlmLmZfbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7Ci0JZi5mX3BhdGguZGVudHJ5ID0gZGVudHJ5OwotCWYuZl9wYXRoLm1udCA9IHBzdG9yZV9tbnQ7Ci0JZi5mX3BvcyA9IDA7Ci0JZi5mX29wID0gaW5vZGUtPmlfZm9wOwotCXNldF9mcyhLRVJORUxfRFMpOwotCW4gPSBkb19zeW5jX3dyaXRlKCZmLCBkYXRhLCBzaXplLCAmZi5mX3Bvcyk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0KLQlmc25vdGlmeV9tb2RpZnkoJmYpOwotCi0JcmV0dXJuIG4gPT0gc2l6ZTsKKwlyZXR1cm4gcHN0b3JlX3NiICE9IE5VTEw7CiB9CiAKIC8qCkBAIC0xMjMsOCArMTg5LDcgQEAKIAlpbm9kZSA9IHBzdG9yZV9nZXRfaW5vZGUocHN0b3JlX3NiLCByb290LT5kX2lub2RlLCBTX0lGUkVHIHwgMDQ0NCwgMCk7CiAJaWYgKCFpbm9kZSkKIAkJZ290byBmYWlsOwotCWlub2RlLT5pX3VpZCA9IGlub2RlLT5pX2dpZCA9IDA7Ci0JcHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mICpwcml2YXRlLCBHRlBfS0VSTkVMKTsKKwlwcml2YXRlID0ga21hbGxvYyhzaXplb2YgKnByaXZhdGUgKyBzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXZhdGUpCiAJCWdvdG8gZmFpbF9hbGxvYzsKIAlwcml2YXRlLT5pZCA9IGlkOwpAQCAtMTUyLDI4ICsyMTcsMTkgQEAKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCWdvdG8gZmFpbF9sb2NrZWRhbGxvYzsKIAotCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwotCi0JbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKLQotCWlmICghcHN0b3JlX3dyaXRlZmlsZShpbm9kZSwgZGVudHJ5LCBkYXRhLCBzaXplKSkKLQkJZ290byBmYWlsX3dyaXRlOworCW1lbWNweShwcml2YXRlLT5kYXRhLCBkYXRhLCBzaXplKTsKKwlpbm9kZS0+aV9zaXplID0gcHJpdmF0ZS0+c2l6ZSA9IHNpemU7CiAKIAlpbm9kZS0+aV9wcml2YXRlID0gcHJpdmF0ZTsKIAogCWlmICh0aW1lLnR2X3NlYykKIAkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHRpbWU7CiAKLQlyZXR1cm4gMDsKKwlkX2FkZChkZW50cnksIGlub2RlKTsKIAotZmFpbF93cml0ZToKLQlrZnJlZShwcml2YXRlKTsKLQlpbm9kZS0+aV9ubGluay0tOwotCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCWRfZGVsZXRlKGRlbnRyeSk7Ci0JZHB1dChkZW50cnkpOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JZ290byBmYWlsOworCisJcmV0dXJuIDA7CiAKIGZhaWxfbG9ja2VkYWxsb2M6CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKQEAgLTIwMiw2ICsyNTgsOCBAQAogCXNiLT5zX29wCQk9ICZwc3RvcmVfb3BzOwogCXNiLT5zX3RpbWVfZ3JhbgkJPSAxOwogCisJcGFyc2Vfb3B0aW9ucyhkYXRhKTsKKwogCWlub2RlID0gcHN0b3JlX2dldF9pbm9kZShzYiwgTlVMTCwgU19JRkRJUiB8IDA3NTUsIDApOwogCWlmICghaW5vZGUpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTIyNSw1OSArMjgzLDI3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBwc3RvcmVfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAotCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQorc3RhdGljIHN0cnVjdCBkZW50cnkgKnBzdG9yZV9tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBkZW50cnkgKnJvb3Q7Ci0KLQlyb290ID0gbW91bnRfbm9kZXYoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIHBzdG9yZV9maWxsX3N1cGVyKTsKLQlpZiAoSVNfRVJSKHJvb3QpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1udC0+bW50X3Jvb3QgPSByb290OwotCW1udC0+bW50X3NiID0gcm9vdC0+ZF9zYjsKLQlwc3RvcmVfbW50ID0gbW50OwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG1vdW50X3NpbmdsZShmc190eXBlLCBmbGFncywgZGF0YSwgcHN0b3JlX2ZpbGxfc3VwZXIpOwogfQogCiBzdGF0aWMgdm9pZCBwc3RvcmVfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCWtpbGxfbGl0dGVyX3N1cGVyKHNiKTsKIAlwc3RvcmVfc2IgPSBOVUxMOwotCXBzdG9yZV9tbnQgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgcHN0b3JlX2ZzX3R5cGUgPSB7CiAJLm5hbWUJCT0gInBzdG9yZSIsCi0JLmdldF9zYgkJPSBwc3RvcmVfZ2V0X3NiLAorCS5tb3VudAkJPSBwc3RvcmVfbW91bnQsCiAJLmtpbGxfc2IJPSBwc3RvcmVfa2lsbF9zYiwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcHN0b3JlX2ZzKHZvaWQpCiB7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qga29iamVjdCAqcHN0b3JlZnNfa29iajsKLQotCXBzdG9yZWZzX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJwc3RvcmUiLCBmc19rb2JqKTsKLQlpZiAoIXBzdG9yZWZzX2tvYmopIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JcmMgPSBzeXNmc19jcmVhdGVfZmlsZShwc3RvcmVmc19rb2JqLCAmcHN0b3JlX2ttc2dfYnl0ZXNfYXR0ci5hdHRyKTsKLQlpZiAocmMpCi0JCWdvdG8gZG9uZTE7Ci0KLQlyYyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnBzdG9yZV9mc190eXBlKTsKLQlpZiAocmMgPT0gMCkKLQkJZ290byBkb25lOwotCi0Jc3lzZnNfcmVtb3ZlX2ZpbGUocHN0b3JlZnNfa29iaiwgJnBzdG9yZV9rbXNnX2J5dGVzX2F0dHIuYXR0cik7Ci1kb25lMToKLQlrb2JqZWN0X3B1dChwc3RvcmVmc19rb2JqKTsKLWRvbmU6Ci0JcmV0dXJuIHJjOworCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZwc3RvcmVfZnNfdHlwZSk7CiB9CiBtb2R1bGVfaW5pdChpbml0X3BzdG9yZV9mcykKIApkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL2ludGVybmFsLmggYi9mcy9wc3RvcmUvaW50ZXJuYWwuaAppbmRleCA3NmMyNmQyLi44YzlmMjNlIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvaW50ZXJuYWwuaAorKysgYi9mcy9wc3RvcmUvaW50ZXJuYWwuaApAQCAtMSw3ICsxLDYgQEAKK2V4dGVybiB2b2lkCXBzdG9yZV9zZXRfa21zZ19ieXRlcyhpbnQpOwogZXh0ZXJuIHZvaWQJcHN0b3JlX2dldF9yZWNvcmRzKHZvaWQpOwogZXh0ZXJuIGludAlwc3RvcmVfbWtmaWxlKGVudW0gcHN0b3JlX3R5cGVfaWQsIGNoYXIgKnBzbmFtZSwgdTY0IGlkLAogCQkJICAgICAgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUsCiAJCQkgICAgICBzdHJ1Y3QgdGltZXNwZWMgdGltZSwgaW50ICgqZXJhc2UpKHU2NCkpOwogZXh0ZXJuIGludAlwc3RvcmVfaXNfbW91bnRlZCh2b2lkKTsKLQotZXh0ZXJuIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwc3RvcmVfa21zZ19ieXRlc19hdHRyOwpkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL3BsYXRmb3JtLmMgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwppbmRleCA3MDVmZGY4Li5jZTlhZDg0IDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvcGxhdGZvcm0uYworKysgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwpAQCAtMzcsMjQgKzM3LDE0IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBzdG9yZV9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaW5mbzsKIAotLyogSG93IG11Y2ggb2YgdGhlIGNvbnNvbGUgbG9nIHRvIHNuYXBzaG90LiAvc3lzL2ZzL3BzdG9yZS9rbXNnX2J5dGVzICovCisvKiBIb3cgbXVjaCBvZiB0aGUgY29uc29sZSBsb2cgdG8gc25hcHNob3QgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGttc2dfYnl0ZXMgPSAxMDI0MDsKIAotc3RhdGljIHNzaXplX3QgYl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3ZvaWQgcHN0b3JlX3NldF9rbXNnX2J5dGVzKGludCBieXRlcykKIHsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbHVcbiIsIGttc2dfYnl0ZXMpOworCWttc2dfYnl0ZXMgPSBieXRlczsKIH0KIAotc3RhdGljIHNzaXplX3QgYl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JcmV0dXJuIChzc2NhbmYoYnVmLCAiJWx1IiwgJmttc2dfYnl0ZXMpID4gMCkgPyBjb3VudCA6IDA7Ci19Ci0KLXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwc3RvcmVfa21zZ19ieXRlc19hdHRyID0KLQlfX0FUVFIoa21zZ19ieXRlcywgU19JUlVHTyB8IFNfSVdVU1IsIGJfc2hvdywgYl9zdG9yZSk7Ci0KIC8qIFRhZyBlYWNoIGdyb3VwIG9mIHNhdmVkIHJlY29yZHMgd2l0aCBhIHNlcXVlbmNlIG51bWJlciAqLwogc3RhdGljIGludAlvb3BzY291bnQ7CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL01ha2VmaWxlIGIvZnMvcmVpc2VyZnMvTWFrZWZpbGUKaW5kZXggNzkyYjNjYi4uM2MzYjAwMSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvTWFrZWZpbGUKKysrIGIvZnMvcmVpc2VyZnMvTWFrZWZpbGUKQEAgLTMxLDkgKzMxLDcgQEAKICMgYW5kIGNhdXNpbmcgYSBwYW5pYy4gU2luY2UgdGhpcyBiZWhhdmlvciBvbmx5IGFmZmVjdHMgcHBjMzIsIHRoaXMgaWZlcQogIyB3aWxsIHdvcmsgYXJvdW5kIGl0LiBJZiBhbnkgb3RoZXIgYXJjaGl0ZWN0dXJlIGRpc3BsYXlzIHRoaXMgYmVoYXZpb3IsCiAjIGFkZCBpdCBoZXJlLgotaWZlcSAoJChDT05GSUdfUFBDMzIpLHkpCi1FWFRSQV9DRkxBR1MgOj0gJChjYWxsIGNjLWlmdmVyc2lvbiwgLWx0LCAwNDAwLCAtTzEpCi1lbmRpZgorY2NmbGFncy0kKENPTkZJR19QUEMzMikgOj0gJChjYWxsIGNjLWlmdmVyc2lvbiwgLWx0LCAwNDAwLCAtTzEpCiAKIFRBR1M6CiAJZXRhZ3MgKi5jCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pb2N0bC5jIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwppbmRleCA3OTI2NWZkLi40ZTE1MzA1IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pb2N0bC5jCisrKyBiL2ZzL3JlaXNlcmZzL2lvY3RsLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CiAKLQkJCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkgeworCQkJaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlub2RlKSkgewogCQkJCWVyciA9IC1FUEVSTTsKIAkJCQlnb3RvIHNldGZsYWdzX291dDsKIAkJCX0KQEAgLTEwMyw3ICsxMDMsNyBAQAogCQllcnIgPSBwdXRfdXNlcihpbm9kZS0+aV9nZW5lcmF0aW9uLCAoaW50IF9fdXNlciAqKWFyZyk7CiAJCWJyZWFrOwogCWNhc2UgUkVJU0VSRlNfSU9DX1NFVFZFUlNJT046Ci0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkgeworCQlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKSB7CiAJCQllcnIgPSAtRVBFUk07CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMgYi9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYwppbmRleCA5MGQyZmNiLi4zZGMzOGYxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYwpAQCAtMjYsNyArMjYsNyBAQAogCXNpemVfdCBqY3JlYXRlX2Jsb2NrczsKIAlpZiAoIXJlaXNlcmZzX3Bvc2l4YWNsKGlub2RlLT5pX3NiKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHZhbHVlKSB7CmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IGU1NjU2MGQuLmQzMzQxOGYgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC01MTcsOSArNTE3LDYgQEAKICAqIFVwZGF0ZTogRVJFU1RBUlRTWVMgYnJlYWtzIGF0IGxlYXN0IHRoZSB4dmlldyBjbG9jayBiaW5hcnksIHNvCiAgKiBJJ20gdHJ5aW5nIEVSRVNUQVJUTk9IQU5EIHdoaWNoIHJlc3RhcnQgb25seSB3aGVuIHlvdSB3YW50IHRvLgogICovCi0jZGVmaW5lIE1BWF9TRUxFQ1RfU0VDT05EUyBcCi0JKCh1bnNpZ25lZCBsb25nKSAoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWiktMSkKLQogaW50IGNvcmVfc3lzX3NlbGVjdChpbnQgbiwgZmRfc2V0IF9fdXNlciAqaW5wLCBmZF9zZXQgX191c2VyICpvdXRwLAogCQkJICAgZmRfc2V0IF9fdXNlciAqZXhwLCBzdHJ1Y3QgdGltZXNwZWMgKmVuZF90aW1lKQogewpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNGJhZTBlZi4uZTg0ODY0OSAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC05MTAsMjkgKzkxMCwxOCBAQAogfQogRVhQT1JUX1NZTUJPTChtb3VudF9zaW5nbGUpOwogCi1zdHJ1Y3QgdmZzbW91bnQgKgotdmZzX2tlcm5fbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncywgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSkKK3N0cnVjdCBkZW50cnkgKgorbW91bnRfZnMoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncywgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290OworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJY2hhciAqc2VjZGF0YSA9IE5VTEw7Ci0JaW50IGVycm9yOwotCi0JaWYgKCF0eXBlKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKLQotCWVycm9yID0gLUVOT01FTTsKLQltbnQgPSBhbGxvY192ZnNtbnQobmFtZSk7Ci0JaWYgKCFtbnQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGZsYWdzICYgTVNfS0VSTk1PVU5UKQotCQltbnQtPm1udF9mbGFncyA9IE1OVF9JTlRFUk5BTDsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCiAJaWYgKGRhdGEgJiYgISh0eXBlLT5mc19mbGFncyAmIEZTX0JJTkFSWV9NT1VOVERBVEEpKSB7CiAJCXNlY2RhdGEgPSBhbGxvY19zZWNkYXRhKCk7CiAJCWlmICghc2VjZGF0YSkKLQkJCWdvdG8gb3V0X21udDsKKwkJCWdvdG8gb3V0OwogCiAJCWVycm9yID0gc2VjdXJpdHlfc2JfY29weV9kYXRhKGRhdGEsIHNlY2RhdGEpOwogCQlpZiAoZXJyb3IpCkBAIC05NDQsMTMgKzkzMywxMiBAQAogCQllcnJvciA9IFBUUl9FUlIocm9vdCk7CiAJCWdvdG8gb3V0X2ZyZWVfc2VjZGF0YTsKIAl9Ci0JbW50LT5tbnRfcm9vdCA9IHJvb3Q7Ci0JbW50LT5tbnRfc2IgPSByb290LT5kX3NiOwotCUJVR19PTighbW50LT5tbnRfc2IpOwotCVdBUk5fT04oIW1udC0+bW50X3NiLT5zX2JkaSk7Ci0JbW50LT5tbnRfc2ItPnNfZmxhZ3MgfD0gTVNfQk9STjsKKwlzYiA9IHJvb3QtPmRfc2I7CisJQlVHX09OKCFzYik7CisJV0FSTl9PTighc2ItPnNfYmRpKTsKKwlzYi0+c19mbGFncyB8PSBNU19CT1JOOwogCi0JZXJyb3IgPSBzZWN1cml0eV9zYl9rZXJuX21vdW50KG1udC0+bW50X3NiLCBmbGFncywgc2VjZGF0YSk7CisJZXJyb3IgPSBzZWN1cml0eV9zYl9rZXJuX21vdW50KHNiLCBmbGFncywgc2VjZGF0YSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9zYjsKIApAQCAtOTYxLDI3ICs5NDksMjEgQEAKIAkgKiB2aW9sYXRlIHRoaXMgcnVsZS4gVGhpcyB3YXJuaW5nIHNob3VsZCBiZSBlaXRoZXIgcmVtb3ZlZCBvcgogCSAqIGNvbnZlcnRlZCB0byBhIEJVRygpIGluIDIuNi4zNC4KIAkgKi8KLQlXQVJOKChtbnQtPm1udF9zYi0+c19tYXhieXRlcyA8IDApLCAiJXMgc2V0IHNiLT5zX21heGJ5dGVzIHRvICIKLQkJIm5lZ2F0aXZlIHZhbHVlICglbGxkKVxuIiwgdHlwZS0+bmFtZSwgbW50LT5tbnRfc2ItPnNfbWF4Ynl0ZXMpOworCVdBUk4oKHNiLT5zX21heGJ5dGVzIDwgMCksICIlcyBzZXQgc2ItPnNfbWF4Ynl0ZXMgdG8gIgorCQkibmVnYXRpdmUgdmFsdWUgKCVsbGQpXG4iLCB0eXBlLT5uYW1lLCBzYi0+c19tYXhieXRlcyk7CiAKLQltbnQtPm1udF9tb3VudHBvaW50ID0gbW50LT5tbnRfcm9vdDsKLQltbnQtPm1udF9wYXJlbnQgPSBtbnQ7Ci0JdXBfd3JpdGUoJm1udC0+bW50X3NiLT5zX3Vtb3VudCk7CisJdXBfd3JpdGUoJnNiLT5zX3Vtb3VudCk7CiAJZnJlZV9zZWNkYXRhKHNlY2RhdGEpOwotCXJldHVybiBtbnQ7CisJcmV0dXJuIHJvb3Q7CiBvdXRfc2I6Ci0JZHB1dChtbnQtPm1udF9yb290KTsKLQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihtbnQtPm1udF9zYik7CisJZHB1dChyb290KTsKKwlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiBvdXRfZnJlZV9zZWNkYXRhOgogCWZyZWVfc2VjZGF0YShzZWNkYXRhKTsKLW91dF9tbnQ6Ci0JZnJlZV92ZnNtbnQobW50KTsKIG91dDoKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKHZmc19rZXJuX21vdW50KTsKLQogLyoqCiAgKiBmcmVlemVfc3VwZXIgLSBsb2NrIHRoZSBmaWxlc3lzdGVtIGFuZCBmb3JjZSBpdCBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZQogICogQHNiOiB0aGUgc3VwZXIgdG8gbG9jawpAQCAtMTA3MSw0OSArMTA1MywzIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHRoYXdfc3VwZXIpOwotCi1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpmc19zZXRfc3VidHlwZShzdHJ1Y3QgdmZzbW91bnQgKm1udCwgY29uc3QgY2hhciAqZnN0eXBlKQotewotCWludCBlcnI7Ci0JY29uc3QgY2hhciAqc3VidHlwZSA9IHN0cmNocihmc3R5cGUsICcuJyk7Ci0JaWYgKHN1YnR5cGUpIHsKLQkJc3VidHlwZSsrOwotCQllcnIgPSAtRUlOVkFMOwotCQlpZiAoIXN1YnR5cGVbMF0pCi0JCQlnb3RvIGVycjsKLQl9IGVsc2UKLQkJc3VidHlwZSA9ICIiOwotCi0JbW50LT5tbnRfc2ItPnNfc3VidHlwZSA9IGtzdHJkdXAoc3VidHlwZSwgR0ZQX0tFUk5FTCk7Ci0JZXJyID0gLUVOT01FTTsKLQlpZiAoIW1udC0+bW50X3NiLT5zX3N1YnR5cGUpCi0JCWdvdG8gZXJyOwotCXJldHVybiBtbnQ7Ci0KLSBlcnI6Ci0JbW50cHV0KG1udCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotc3RydWN0IHZmc21vdW50ICoKLWRvX2tlcm5fbW91bnQoY29uc3QgY2hhciAqZnN0eXBlLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBnZXRfZnNfdHlwZShmc3R5cGUpOwotCXN0cnVjdCB2ZnNtb3VudCAqbW50OwotCWlmICghdHlwZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Ci0JbW50ID0gdmZzX2tlcm5fbW91bnQodHlwZSwgZmxhZ3MsIG5hbWUsIGRhdGEpOwotCWlmICghSVNfRVJSKG1udCkgJiYgKHR5cGUtPmZzX2ZsYWdzICYgRlNfSEFTX1NVQlRZUEUpICYmCi0JICAgICFtbnQtPm1udF9zYi0+c19zdWJ0eXBlKQotCQltbnQgPSBmc19zZXRfc3VidHlwZShtbnQsIGZzdHlwZSk7Ci0JcHV0X2ZpbGVzeXN0ZW0odHlwZSk7Ci0JcmV0dXJuIG1udDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGRvX2tlcm5fbW91bnQpOwotCi1zdHJ1Y3QgdmZzbW91bnQgKmtlcm5fbW91bnRfZGF0YShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gdmZzX2tlcm5fbW91bnQodHlwZSwgTVNfS0VSTk1PVU5ULCB0eXBlLT5uYW1lLCBkYXRhKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoa2Vybl9tb3VudF9kYXRhKTsKZGlmZiAtLWdpdCBhL2ZzL3N5bmMuYyBiL2ZzL3N5bmMuYwppbmRleCBiYTc2Yjk2Li45MmNhMjA4IDEwMDY0NAotLS0gYS9mcy9zeW5jLmMKKysrIGIvZnMvc3luYy5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtMTI4LDYgKzEyOSwyOSBAQAogCX0KIH0KIAorLyoKKyAqIHN5bmMgYSBzaW5nbGUgc3VwZXIKKyAqLworU1lTQ0FMTF9ERUZJTkUxKHN5bmNmcywgaW50LCBmZCkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCWludCByZXQ7CisJaW50IGZwdXRfbmVlZGVkOworCisJZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gLUVCQURGOworCXNiID0gZmlsZS0+Zl9kZW50cnktPmRfc2I7CisKKwlkb3duX3JlYWQoJnNiLT5zX3Vtb3VudCk7CisJcmV0ID0gc3luY19maWxlc3lzdGVtKHNiKTsKKwl1cF9yZWFkKCZzYi0+c191bW91bnQpOworCisJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiB2ZnNfZnN5bmNfcmFuZ2UgLSBoZWxwZXIgdG8gc3luYyBhIHJhbmdlIG9mIGRhdGEgJiBtZXRhZGF0YSB0byBkaXNrCiAgKiBAZmlsZToJCWZpbGUgdG8gc3luYwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvS2NvbmZpZyBiL2ZzL3ViaWZzL0tjb25maWcKaW5kZXggODMwZTNmNy4uMWQxODU5ZCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvS2NvbmZpZworKysgYi9mcy91Ymlmcy9LY29uZmlnCkBAIC00NCwyMyArNDQsMjAgQEAKIAogIyBEZWJ1Z2dpbmctcmVsYXRlZCBzdHVmZgogY29uZmlnIFVCSUZTX0ZTX0RFQlVHCi0JYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyIKKwlib29sICJFbmFibGUgZGVidWdnaW5nIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVQklGU19GUwogCXNlbGVjdCBERUJVR19GUwogCXNlbGVjdCBLQUxMU1lNU19BTEwKIAloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIFVCSUZTIGRlYnVnZ2luZy4KLQotY29uZmlnIFVCSUZTX0ZTX0RFQlVHX01TR19MVkwKLQlpbnQgIkRlZmF1bHQgbWVzc2FnZSBsZXZlbCAoMCA9IG5vIGV4dHJhIG1lc3NhZ2VzLCAzID0gbG90cykiCi0JZGVwZW5kcyBvbiBVQklGU19GU19ERUJVRwotCWRlZmF1bHQgIjAiCi0JaGVscAotCSAgVGhpcyBjb250cm9scyB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBtZXNzYWdlcyBwcm9kdWNlZCBieSBVQklGUy4KLQkgIElmIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mIHRoZQotCSAgbWVzc2FnZXMgYXQgbGV2ZWwgMSB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuIExldmVsIDIKLQkgIG1heSBiZWNvbWUgbmVjZXNzYXJ5IGlmIGxldmVsIDEgbWVzc2FnZXMgd2VyZSBub3QgZW5vdWdoIHRvIGZpbmQgdGhlCi0JICBidWcuIEdlbmVyYWxseSBMZXZlbCAzIHNob3VsZCBiZSBhdm9pZGVkLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBVQklGUyBkZWJ1Z2dpbmcgc3VwcG9ydC4gSXQgbWFrZXMgc3VyZSB2YXJpb3VzCisJICBhc3NlcnRpb25zLCBzZWxmLWNoZWNrcywgZGVidWdnaW5nIG1lc3NhZ2VzIGFuZCB0ZXN0IG1vZGVzIGFyZSBjb21waWxlZAorCSAgaW4gKHRoaXMgYWxsIGlzIGNvbXBpbGVkIG91dCBvdGhlcndpc2UpLiBBc3NlcnRpb25zIGFyZSBsaWdodC13ZWlnaHQKKwkgIGFuZCB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgdGhlbS4gU2VsZi1jaGVja3MsIGRlYnVnZ2luZyBtZXNzYWdlcyBhbmQKKwkgIHRlc3QgbW9kZXMgYXJlIHN3aXRjaGVkIG9mZiBieSBkZWZhdWx0LiBUaHVzLCBpdCBpcyBzYWZlIGFuZCBhY3R1YWxseQorCSAgcmVjb21tZW5kZWQgdG8gaGF2ZSBkZWJ1Z2dpbmcgc3VwcG9ydCBlbmFibGVkLCBhbmQgaXQgc2hvdWxkIG5vdCBzbG93CisJICBkb3duIFVCSUZTLiBZb3UgY2FuIHRoZW4gZnVydGhlciBlbmFibGUgLyBkaXNhYmxlIGluZGl2aWR1YWwgIGRlYnVnZ2luZworCSAgZmVhdHVyZXMgdXNpbmcgVUJJRlMgbW9kdWxlIHBhcmFtZXRlcnMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHN5c2ZzCisJICBpbnRlcmZhY2VzLgogCiBjb25maWcgVUJJRlNfRlNfREVCVUdfQ0hLUwogCWJvb2wgIkVuYWJsZSBleHRyYSBjaGVja3MiCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9jb21taXQuYyBiL2ZzL3ViaWZzL2NvbW1pdC5jCmluZGV4IDAyNDI5ZDguLmIxNDhmYmMgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2NvbW1pdC5jCisrKyBiL2ZzL3ViaWZzL2NvbW1pdC5jCkBAIC00OCw2ICs0OCw1NiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJ1Ymlmcy5oIgogCisvKgorICogbm90aGluZ190b19jb21taXQgLSBjaGVjayBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbW1pdC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBjb21taXQuIEl0IGlzCisgKiB1c2VkIGFzIGFuIG9wdGltaXphdGlvbiB0byBhdm9pZCBzdGFydGluZyB0aGUgY29tbWl0IGlmIGl0IGlzIG5vdCByZWFsbHkKKyAqIG5lY2Vzc2FyeS4gSW5kZWVkLCB0aGUgY29tbWl0IG9wZXJhdGlvbiBhbHdheXMgYXNzdW1lcyBmbGFzaCBJL08gKGUuZy4sCisgKiB3cml0aW5nIHRoZSBjb21taXQgc3RhcnQgbm9kZSB0byB0aGUgbG9nKSwgYW5kIGl0IGlzIGJldHRlciB0byBhdm9pZCBkb2luZworICogdGhpcyB1bm5lY2Vzc2FyaWx5LiBFLmcuLCAndWJpZnNfc3luY19mcygpJyBydW5zIHRoZSBjb21taXQsIGJ1dCBpZiB0aGVyZSBpcworICogbm90aGluZyB0byBjb21taXQsIGl0IGlzIG1vcmUgb3B0aW1hbCB0byBhdm9pZCBhbnkgZmxhc2ggSS9PLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZCB3aXRoIEBjLT5jb21taXRfc2VtIGxvY2tlZCBmb3Igd3JpdGluZyAtCisgKiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgTFBUL1ROQyBsb2NrcyBiZWNhdXNlIHRoZSBAYy0+Y29tbWl0X3NlbQorICogZ3VhcmFudGVlcyB0aGF0IHdlIGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgVE5DIGFuZCBMUFQgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbW1pdCBhbmQgJTAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IG5vdGhpbmdfdG9fY29tbWl0KHN0cnVjdCB1Ymlmc19pbmZvICpjKQoreworCS8qCisJICogRHVyaW5nIG1vdW50aW5nIG9yIHJlbW91bnRpbmcgZnJvbSBSL08gbW9kZSB0byBSL1cgbW9kZSB3ZSBtYXkKKwkgKiBjb21taXQgZm9yIHZhcmlvdXMgcmVjb3ZlcnktcmVsYXRlZCByZWFzb25zLgorCSAqLworCWlmIChjLT5tb3VudGluZyB8fCBjLT5yZW1vdW50aW5nX3J3KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIHJvb3QgVE5DIG5vZGUgaXMgZGlydHksIHdlIGRlZmluaXRlbHkgaGF2ZSBzb21ldGhpbmcgdG8KKwkgKiBjb21taXQuCisJICovCisJaWYgKGMtPnpyb290Lnpub2RlICYmIHRlc3RfYml0KERJUlRZX1pOT0RFLCAmYy0+enJvb3Quem5vZGUtPmZsYWdzKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEV2ZW4gdGhvdWdoIHRoZSBUTkMgaXMgY2xlYW4sIHRoZSBMUFQgdHJlZSBtYXkgaGF2ZSBkaXJ0eSBub2Rlcy4gRm9yCisJICogZXhhbXBsZSwgdGhpcyBtYXkgaGFwcGVuIGlmIHRoZSBidWRnZXRpbmcgc3Vic3lzdGVtIGludm9rZWQgR0MgdG8KKwkgKiBtYWtlIHNvbWUgZnJlZSBzcGFjZSwgYW5kIHRoZSBHQyBmb3VuZCBhbiBMRUIgd2l0aCBvbmx5IGRpcnR5IGFuZAorCSAqIGZyZWUgc3BhY2UuIEluIHRoaXMgY2FzZSBHQyB3b3VsZCBqdXN0IGNoYW5nZSB0aGUgbHByb3BzIG9mIHRoaXMKKwkgKiBMRUIgKGJ5IHR1cm5pbmcgYWxsIHNwYWNlIGludG8gZnJlZSBzcGFjZSkgYW5kIHVubWFwIGl0LgorCSAqLworCWlmIChjLT5ucm9vdCAmJiB0ZXN0X2JpdChESVJUWV9DTk9ERSwgJmMtPm5yb290LT5mbGFncykpCisJCXJldHVybiAwOworCisJdWJpZnNfYXNzZXJ0KGF0b21pY19sb25nX3JlYWQoJmMtPmRpcnR5X3puX2NudCkgPT0gMCk7CisJdWJpZnNfYXNzZXJ0KGMtPmRpcnR5X3BuX2NudCA9PSAwKTsKKwl1Ymlmc19hc3NlcnQoYy0+ZGlydHlfbm5fY250ID09IDApOworCisJcmV0dXJuIDE7Cit9CisKIC8qKgogICogZG9fY29tbWl0IC0gY29tbWl0IHRoZSBqb3VybmFsLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdApAQCAtNzAsNiArMTIwLDEyIEBACiAJCWdvdG8gb3V0X3VwOwogCX0KIAorCWlmIChub3RoaW5nX3RvX2NvbW1pdChjKSkgeworCQl1cF93cml0ZSgmYy0+Y29tbWl0X3NlbSk7CisJCWVyciA9IDA7CisJCWdvdG8gb3V0X2NhbmNlbDsKKwl9CisKIAkvKiBTeW5jIGFsbCB3cml0ZSBidWZmZXJzIChuZWNlc3NhcnkgZm9yIHJlY292ZXJ5KSAqLwogCWZvciAoaSA9IDA7IGkgPCBjLT5qaGVhZF9jbnQ7IGkrKykgewogCQllcnIgPSB1Ymlmc193YnVmX3N5bmMoJmMtPmpoZWFkc1tpXS53YnVmKTsKQEAgLTE2MiwxMiArMjE4LDEyIEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKK291dF9jYW5jZWw6CiAJc3Bpbl9sb2NrKCZjLT5jc19sb2NrKTsKIAljLT5jbXRfc3RhdGUgPSBDT01NSVRfUkVTVElORzsKIAl3YWtlX3VwKCZjLT5jbXRfd3EpOwogCWRiZ19jbXQoImNvbW1pdCBlbmQiKTsKIAlzcGluX3VubG9jaygmYy0+Y3NfbG9jayk7Ci0KIAlyZXR1cm4gMDsKIAogb3V0X3VwOgpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZGVidWcuYyBiL2ZzL3ViaWZzL2RlYnVnLmMKaW5kZXggMGJlZTRkYi4uMDFjMmIwMiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZGVidWcuYworKysgYi9mcy91Ymlmcy9kZWJ1Zy5jCkBAIC00Myw4ICs0Myw4IEBACiBzdGF0aWMgY2hhciBkYmdfa2V5X2J1ZjBbMTI4XTsKIHN0YXRpYyBjaGFyIGRiZ19rZXlfYnVmMVsxMjhdOwogCi11bnNpZ25lZCBpbnQgdWJpZnNfbXNnX2ZsYWdzID0gVUJJRlNfTVNHX0ZMQUdTX0RFRkFVTFQ7Ci11bnNpZ25lZCBpbnQgdWJpZnNfY2hrX2ZsYWdzID0gVUJJRlNfQ0hLX0ZMQUdTX0RFRkFVTFQ7Cit1bnNpZ25lZCBpbnQgdWJpZnNfbXNnX2ZsYWdzOwordW5zaWduZWQgaW50IHViaWZzX2Noa19mbGFnczsKIHVuc2lnbmVkIGludCB1Ymlmc190c3RfZmxhZ3M7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19tc2dzLCB1Ymlmc19tc2dfZmxhZ3MsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKQEAgLTgxMCwxNiArODEwLDI0IEBACiB7CiAJc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViOwogCXN0cnVjdCB1Ymlmc19zY2FuX25vZGUgKnNub2Q7CisJdm9pZCAqYnVmOwogCiAJaWYgKGRiZ19mYWlsdXJlX21vZGUpCiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0RFQlVHICIocGlkICVkKSBzdGFydCBkdW1waW5nIExFQiAlZFxuIiwKIAkgICAgICAgY3VycmVudC0+cGlkLCBsbnVtKTsKLQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5kYmctPmJ1ZiwgMCk7CisKKwlidWYgPSBfX3ZtYWxsb2MoYy0+bGViX3NpemUsIEdGUF9LRVJORUwgfCBHRlBfTk9GUywgUEFHRV9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXViaWZzX2VycigiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZHVtcGluZyBMRUIgJWQiLCBsbnVtKTsKKwkJcmV0dXJuOworCX0KKworCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIDAsIGJ1ZiwgMCk7CiAJaWYgKElTX0VSUihzbGViKSkgewogCQl1Ymlmc19lcnIoInNjYW4gZXJyb3IgJWQiLCAoaW50KVBUUl9FUlIoc2xlYikpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICJMRUIgJWQgaGFzICVkIG5vZGVzIGVuZGluZyBhdCAlZFxuIiwgbG51bSwKQEAgLTgzNSw2ICs4NDMsOSBAQAogCXByaW50ayhLRVJOX0RFQlVHICIocGlkICVkKSBmaW5pc2ggZHVtcGluZyBMRUIgJWRcbiIsCiAJICAgICAgIGN1cnJlbnQtPnBpZCwgbG51bSk7CiAJdWJpZnNfc2Nhbl9kZXN0cm95KHNsZWIpOworCitvdXQ6CisJdmZyZWUoYnVmKTsKIAlyZXR1cm47CiB9CiAKQEAgLTI2OTAsMTYgKzI3MDEsOCBAQAogCWlmICghYy0+ZGJnKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWMtPmRiZy0+YnVmID0gdm1hbGxvYyhjLT5sZWJfc2l6ZSk7Ci0JaWYgKCFjLT5kYmctPmJ1ZikKLQkJZ290byBvdXQ7Ci0KIAlmYWlsdXJlX21vZGVfaW5pdChjKTsKIAlyZXR1cm4gMDsKLQotb3V0OgotCWtmcmVlKGMtPmRiZyk7Ci0JcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qKgpAQCAtMjcwOSw3ICsyNzEyLDYgQEAKIHZvaWQgdWJpZnNfZGVidWdnaW5nX2V4aXQoc3RydWN0IHViaWZzX2luZm8gKmMpCiB7CiAJZmFpbHVyZV9tb2RlX2V4aXQoYyk7Ci0JdmZyZWUoYy0+ZGJnLT5idWYpOwogCWtmcmVlKGMtPmRiZyk7CiB9CiAKQEAgLTI4MTMsMTkgKzI4MTUsMTkgQEAKIAl9CiAKIAlmbmFtZSA9ICJkdW1wX2xwcm9wcyI7Ci0JZGVudCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZm5hbWUsIFNfSVdVR08sIGQtPmRmc19kaXIsIGMsICZkZnNfZm9wcyk7CisJZGVudCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZm5hbWUsIFNfSVdVU1IsIGQtPmRmc19kaXIsIGMsICZkZnNfZm9wcyk7CiAJaWYgKElTX0VSUihkZW50KSkKIAkJZ290byBvdXRfcmVtb3ZlOwogCWQtPmRmc19kdW1wX2xwcm9wcyA9IGRlbnQ7CiAKIAlmbmFtZSA9ICJkdW1wX2J1ZGciOwotCWRlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCBTX0lXVUdPLCBkLT5kZnNfZGlyLCBjLCAmZGZzX2ZvcHMpOworCWRlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCBTX0lXVVNSLCBkLT5kZnNfZGlyLCBjLCAmZGZzX2ZvcHMpOwogCWlmIChJU19FUlIoZGVudCkpCiAJCWdvdG8gb3V0X3JlbW92ZTsKIAlkLT5kZnNfZHVtcF9idWRnID0gZGVudDsKIAogCWZuYW1lID0gImR1bXBfdG5jIjsKLQlkZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZShmbmFtZSwgU19JV1VHTywgZC0+ZGZzX2RpciwgYywgJmRmc19mb3BzKTsKKwlkZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZShmbmFtZSwgU19JV1VTUiwgZC0+ZGZzX2RpciwgYywgJmRmc19mb3BzKTsKIAlpZiAoSVNfRVJSKGRlbnQpKQogCQlnb3RvIG91dF9yZW1vdmU7CiAJZC0+ZGZzX2R1bXBfdG5jID0gZGVudDsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2RlYnVnLmggYi9mcy91Ymlmcy9kZWJ1Zy5oCmluZGV4IDY5ZWJlNDcuLjkxOWYwZGUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2RlYnVnLmgKKysrIGIvZnMvdWJpZnMvZGVidWcuaApAQCAtMjcsNyArMjcsNiBAQAogCiAvKioKICAqIHViaWZzX2RlYnVnX2luZm8gLSBwZXItRlMgZGVidWdnaW5nIGluZm9ybWF0aW9uLgotICogQGJ1ZjogYSBidWZmZXIgb2YgTEVCIHNpemUsIHVzZWQgZm9yIHZhcmlvdXMgcHVycG9zZXMKICAqIEBvbGRfenJvb3Q6IG9sZCBpbmRleCByb290IC0gdXNlZCBieSAnZGJnX2NoZWNrX29sZF9pbmRleCgpJwogICogQG9sZF96cm9vdF9sZXZlbDogb2xkIGluZGV4IHJvb3QgbGV2ZWwgLSB1c2VkIGJ5ICdkYmdfY2hlY2tfb2xkX2luZGV4KCknCiAgKiBAb2xkX3pyb290X3NxbnVtOiBvbGQgaW5kZXggcm9vdCBzcW51bSAtIHVzZWQgYnkgJ2RiZ19jaGVja19vbGRfaW5kZXgoKScKQEAgLTU0LDcgKzUzLDYgQEAKICAqIGRmc19kdW1wX3RuYzogImR1bXAgVE5DIiBkZWJ1Z2ZzIGtub2IKICAqLwogc3RydWN0IHViaWZzX2RlYnVnX2luZm8gewotCXZvaWQgKmJ1ZjsKIAlzdHJ1Y3QgdWJpZnNfemJyYW5jaCBvbGRfenJvb3Q7CiAJaW50IG9sZF96cm9vdF9sZXZlbDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgb2xkX3pyb290X3NxbnVtOwpAQCAtMTczLDcgKzE3MSw3IEBACiAjZGVmaW5lIGRiZ19yY3ZyeShmbXQsIC4uLikgZGJnX2RvX21zZyhVQklGU19NU0dfUkNWUlksIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogLyoKLSAqIERlYnVnZ2luZyBtZXNzYWdlIHR5cGUgZmxhZ3MgKG11c3QgbWF0Y2ggbXNnX3R5cGVfbmFtZXMgaW4gZGVidWcuYykuCisgKiBEZWJ1Z2dpbmcgbWVzc2FnZSB0eXBlIGZsYWdzLgogICoKICAqIFVCSUZTX01TR19HRU46IGdlbmVyYWwgbWVzc2FnZXMKICAqIFVCSUZTX01TR19KTkw6IGpvdXJuYWwgbWVzc2FnZXMKQEAgLTIwNSwxNCArMjAzLDggQEAKIAlVQklGU19NU0dfUkNWUlkgPSAweDEwMDAsCiB9OwogCi0vKiBEZWJ1Z2dpbmcgbWVzc2FnZSB0eXBlIGZsYWdzIGZvciBlYWNoIGRlZmF1bHQgZGVidWcgbWVzc2FnZSBsZXZlbCAqLwotI2RlZmluZSBVQklGU19NU0dfTFZMXzAgMAotI2RlZmluZSBVQklGU19NU0dfTFZMXzEgMHgxCi0jZGVmaW5lIFVCSUZTX01TR19MVkxfMiAweDdmCi0jZGVmaW5lIFVCSUZTX01TR19MVkxfMyAweGZmZmYKLQogLyoKLSAqIERlYnVnZ2luZyBjaGVjayBmbGFncyAobXVzdCBtYXRjaCBjaGtfbmFtZXMgaW4gZGVidWcuYykuCisgKiBEZWJ1Z2dpbmcgY2hlY2sgZmxhZ3MuCiAgKgogICogVUJJRlNfQ0hLX0dFTjogZ2VuZXJhbCBjaGVja3MKICAqIFVCSUZTX0NIS19UTkM6IGNoZWNrIFROQwpAQCAtMjMzLDcgKzIyNSw3IEBACiB9OwogCiAvKgotICogU3BlY2lhbCB0ZXN0aW5nIGZsYWdzIChtdXN0IG1hdGNoIHRzdF9uYW1lcyBpbiBkZWJ1Zy5jKS4KKyAqIFNwZWNpYWwgdGVzdGluZyBmbGFncy4KICAqCiAgKiBVQklGU19UU1RfRk9SQ0VfSU5fVEhFX0dBUFM6IGZvcmNlIHRoZSB1c2Ugb2YgaW4tdGhlLWdhcHMgbWV0aG9kCiAgKiBVQklGU19UU1RfUkNWUlk6IGZhaWx1cmUgbW9kZSBmb3IgcmVjb3ZlcnkgdGVzdGluZwpAQCAtMjQzLDIyICsyMzUsNiBAQAogCVVCSUZTX1RTVF9SQ1ZSWSAgICAgICAgICAgICA9IDB4NCwKIH07CiAKLSNpZiBDT05GSUdfVUJJRlNfRlNfREVCVUdfTVNHX0xWTCA9PSAxCi0jZGVmaW5lIFVCSUZTX01TR19GTEFHU19ERUZBVUxUIFVCSUZTX01TR19MVkxfMQotI2VsaWYgQ09ORklHX1VCSUZTX0ZTX0RFQlVHX01TR19MVkwgPT0gMgotI2RlZmluZSBVQklGU19NU0dfRkxBR1NfREVGQVVMVCBVQklGU19NU0dfTFZMXzIKLSNlbGlmIENPTkZJR19VQklGU19GU19ERUJVR19NU0dfTFZMID09IDMKLSNkZWZpbmUgVUJJRlNfTVNHX0ZMQUdTX0RFRkFVTFQgVUJJRlNfTVNHX0xWTF8zCi0jZWxzZQotI2RlZmluZSBVQklGU19NU0dfRkxBR1NfREVGQVVMVCBVQklGU19NU0dfTFZMXzAKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VCSUZTX0ZTX0RFQlVHX0NIS1MKLSNkZWZpbmUgVUJJRlNfQ0hLX0ZMQUdTX0RFRkFVTFQgMHhmZmZmZmZmZgotI2Vsc2UKLSNkZWZpbmUgVUJJRlNfQ0hLX0ZMQUdTX0RFRkFVTFQgMAotI2VuZGlmCi0KIGV4dGVybiBzcGlubG9ja190IGRiZ19sb2NrOwogCiBleHRlcm4gdW5zaWduZWQgaW50IHViaWZzX21zZ19mbGFnczsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2lvLmMgYi9mcy91Ymlmcy9pby5jCmluZGV4IGQ4MjE3MzEuLmRmZDE2OGIgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2lvLmMKKysrIGIvZnMvdWJpZnMvaW8uYwpAQCAtMzEsNiArMzEsMjYgQEAKICAqIGJ1ZmZlciBpcyBmdWxsIG9yIHdoZW4gaXQgaXMgbm90IHVzZWQgZm9yIHNvbWUgdGltZSAoYnkgdGltZXIpLiBUaGlzIGlzCiAgKiBzaW1pbGFyIHRvIHRoZSBtZWNoYW5pc20gaXMgdXNlZCBieSBKRkZTMi4KICAqCisgKiBVQklGUyBkaXN0aW5ndWlzaGVzIGJldHdlZW4gbWluaW11bSB3cml0ZSBzaXplIChAYy0+bWluX2lvX3NpemUpIGFuZCBtYXhpbXVtCisgKiB3cml0ZSBzaXplIChAYy0+bWF4X3dyaXRlX3NpemUpLiBUaGUgbGF0dGVyIGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBieXRlcworICogdGhlIHVuZGVybHlpbmcgZmxhc2ggaXMgYWJsZSB0byBwcm9ncmFtIGF0IGEgdGltZSwgYW5kIHdyaXRpbmcgaW4KKyAqIEBjLT5tYXhfd3JpdGVfc2l6ZSB1bml0cyBzaG91bGQgcHJlc3VtYWJseSBiZSBmYXN0ZXIuIE9idmlvdXNseSwKKyAqIEBjLT5taW5faW9fc2l6ZSA8PSBAYy0+bWF4X3dyaXRlX3NpemUuIFdyaXRlLWJ1ZmZlcnMgYXJlIG9mCisgKiBAYy0+bWF4X3dyaXRlX3NpemUgYnl0ZXMgaW4gc2l6ZSBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZS4gSG93ZXZlciwgd2hlbiBhCisgKiB3cml0ZS1idWZmZXIgaXMgZmx1c2hlZCwgb25seSB0aGUgcG9ydGlvbiBvZiBpdCAoYWxpZ25lZCB0byBAYy0+bWluX2lvX3NpemUKKyAqIGJvdW5kYXJ5KSB3aGljaCBjb250YWlucyBkYXRhIGlzIHdyaXR0ZW4sIG5vdCB0aGUgd2hvbGUgd3JpdGUtYnVmZmVyLAorICogYmVjYXVzZSB0aGlzIGlzIG1vcmUgc3BhY2UtZWZmaWNpZW50LgorICoKKyAqIFRoaXMgb3B0aW1pemF0aW9uIGFkZHMgZmV3IGNvbXBsaWNhdGlvbnMgdG8gdGhlIGNvZGUuIEluZGVlZCwgb24gdGhlIG9uZQorICogaGFuZCwgd2Ugd2FudCB0byB3cml0ZSBpbiBvcHRpbWFsIEBjLT5tYXhfd3JpdGVfc2l6ZSBieXRlcyBjaHVua3MsIHdoaWNoCisgKiBhbHNvIG1lYW5zIGFsaWduaW5nIHdyaXRlcyBhdCB0aGUgQGMtPm1heF93cml0ZV9zaXplIGJ5dGVzIG9mZnNldHMuIE9uIHRoZQorICogb3RoZXIgaGFuZCwgd2UgZG8gbm90IHdhbnQgdG8gd2FzdGUgc3BhY2Ugd2hlbiBzeW5jaHJvbml6aW5nIHRoZSB3cml0ZQorICogYnVmZmVyLCBzbyBkdXJpbmcgc3luY2hyb25pemF0aW9uIHdlIHdyaXRlcyBpbiBzbWFsbGVyIGNodW5rcy4gQW5kIHRoaXMgbWFrZXMKKyAqIHRoZSBuZXh0IHdyaXRlIG9mZnNldCB0byBiZSBub3QgYWxpZ25lZCB0byBAYy0+bWF4X3dyaXRlX3NpemUgYnl0ZXMuIFNvIHRoZQorICogaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgd3JpdGUtYnVmZmVyIG9mZnNldCAoQHdidWYtPm9mZnMpIGJlY29tZXMgYWxpZ25lZAorICogdG8gQGMtPm1heF93cml0ZV9zaXplIGJ5dGVzIGFnYWluLiBXZSBkbyB0aGlzIGJ5IHRlbXBvcmFyaWx5IHNocmlua2luZworICogd3JpdGUtYnVmZmVyIHNpemUgKEB3YnVmLT5zaXplKS4KKyAqCiAgKiBXcml0ZS1idWZmZXJzIGFyZSBkZWZpbmVkIGJ5ICdzdHJ1Y3QgdWJpZnNfd2J1Zicgb2JqZWN0cyBhbmQgcHJvdGVjdGVkIGJ5CiAgKiBtdXRleGVzIGRlZmluZWQgaW5zaWRlIHRoZXNlIG9iamVjdHMuIFNpbmNlIHNvbWV0aW1lcyB1cHBlci1sZXZlbCBjb2RlCiAgKiBoYXMgdG8gbG9jayB0aGUgd3JpdGUtYnVmZmVyIChlLmcuIGpvdXJuYWwgc3BhY2UgcmVzZXJ2YXRpb24gY29kZSksIG1hbnkKQEAgLTQ2LDggKzY2LDggQEAKICAqIFVCSUZTIHVzZXMgcGFkZGluZyB3aGVuIGl0IHBhZHMgdG8gdGhlIG5leHQgbWluLiBJL08gdW5pdC4gSW4gdGhpcyBjYXNlIGl0CiAgKiB1c2VzIHBhZGRpbmcgbm9kZXMgb3IgcGFkZGluZyBieXRlcywgaWYgdGhlIHBhZGRpbmcgbm9kZSBkb2VzIG5vdCBmaXQuCiAgKgotICogQWxsIFVCSUZTIG5vZGVzIGFyZSBwcm90ZWN0ZWQgYnkgQ1JDIGNoZWNrc3VtcyBhbmQgVUJJRlMgY2hlY2tzIGFsbCBub2RlcwotICogZXZlcnkgdGltZSB0aGV5IGFyZSByZWFkIGZyb20gdGhlIGZsYXNoIG1lZGlhLgorICogQWxsIFVCSUZTIG5vZGVzIGFyZSBwcm90ZWN0ZWQgYnkgQ1JDIGNoZWNrc3VtcyBhbmQgVUJJRlMgY2hlY2tzIENSQyB3aGVuCisgKiB0aGV5IGFyZSByZWFkIGZyb20gdGhlIGZsYXNoIG1lZGlhLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpAQCAtODgsOCArMTA4LDEyIEBACiAgKiBUaGlzIGZ1bmN0aW9uIG1heSBza2lwIGRhdGEgbm9kZXMgQ1JDIGNoZWNraW5nIGlmIEBjLT5ub19jaGtfZGF0YV9jcmMgaXMKICAqIHRydWUsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgY29ycmVzcG9uZGluZyBVQklGUyBtb3VudCBvcHRpb24uIEhvd2V2ZXIsIGlmCiAgKiBAbXVzdF9jaGtfY3JjIGlzIHRydWUsIHRoZW4gQGMtPm5vX2Noa19kYXRhX2NyYyBpcyBpZ25vcmVkIGFuZCBDUkMgaXMKLSAqIGNoZWNrZWQuIFNpbWlsYXJseSwgaWYgQGMtPmFsd2F5c19jaGtfY3JjIGlzIHRydWUsIEBjLT5ub19jaGtfZGF0YV9jcmMgaXMKLSAqIGlnbm9yZWQgYW5kIENSQyBpcyBjaGVja2VkLgorICogY2hlY2tlZC4gU2ltaWxhcmx5LCBpZiBAYy0+bW91bnRpbmcgb3IgQGMtPnJlbW91bnRpbmdfcncgaXMgdHJ1ZSAod2UgYXJlCisgKiBtb3VudGluZyBvciByZS1tb3VudGluZyB0byBSL1cgbW9kZSksIEBjLT5ub19jaGtfZGF0YV9jcmMgaXMgaWdub3JlZCBhbmQgQ1JDCisgKiBpcyBjaGVja2VkLiBUaGlzIGlzIGJlY2F1c2UgZHVyaW5nIG1vdW50aW5nIG9yIHJlLW1vdW50aW5nIGZyb20gUi9PIG1vZGUgdG8KKyAqIFIvVyBtb2RlIHdlIG1heSByZWFkIGpvdXJuYWwgbm9kZXMgKHdoZW4gcmVwbHlpbmcgdGhlIGpvdXJuYWwgb3IgZG9pbmcgdGhlCisgKiByZWNvdmVyeSkgYW5kIHRoZSBqb3VybmFsIG5vZGVzIG1heSBwb3RlbnRpYWxseSBiZSBjb3JydXB0ZWQsIHNvIGNoZWNraW5nIGlzCisgKiByZXF1aXJlZC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kICUtRVVDTEVBTiBpbiBjYXNlIG9mIGJhZAogICogQ1JDIG9yIG1hZ2ljLgpAQCAtMTMxLDggKzE1NSw4IEBACiAJCSAgIG5vZGVfbGVuID4gYy0+cmFuZ2VzW3R5cGVdLm1heF9sZW4pCiAJCWdvdG8gb3V0X2xlbjsKIAotCWlmICghbXVzdF9jaGtfY3JjICYmIHR5cGUgPT0gVUJJRlNfREFUQV9OT0RFICYmICFjLT5hbHdheXNfY2hrX2NyYyAmJgotCSAgICAgYy0+bm9fY2hrX2RhdGFfY3JjKQorCWlmICghbXVzdF9jaGtfY3JjICYmIHR5cGUgPT0gVUJJRlNfREFUQV9OT0RFICYmICFjLT5tb3VudGluZyAmJgorCSAgICAhYy0+cmVtb3VudGluZ19ydyAmJiBjLT5ub19jaGtfZGF0YV9jcmMpCiAJCXJldHVybiAwOwogCiAJY3JjID0gY3JjMzIoVUJJRlNfQ1JDMzJfSU5JVCwgYnVmICsgOCwgbm9kZV9sZW4gLSA4KTsKQEAgLTM0MywxMSArMzY3LDE3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBzeW5jaHJvbml6ZXMgd3JpdGUtYnVmZmVyIEBidWYgYW5kIHJldHVybnMgemVybyBpbiBjYXNlIG9mCiAgKiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKgorICogTm90ZSwgYWx0aG91Z2ggd3JpdGUtYnVmZmVycyBhcmUgb2YgQGMtPm1heF93cml0ZV9zaXplLCB0aGlzIGZ1bmN0aW9uIGRvZXMKKyAqIG5vdCBuZWNlc3NhcmlseSB3cml0ZXMgYWxsIEBjLT5tYXhfd3JpdGVfc2l6ZSBieXRlcyB0byB0aGUgZmxhc2guIEluc3RlYWQsCisgKiBpZiB0aGUgd3JpdGUtYnVmZmVyIGlzIG9ubHkgcGFydGlhbGx5IGZpbGxlZCB3aXRoIGRhdGEsIG9ubHkgdGhlIHVzZWQgcGFydAorICogb2YgdGhlIHdyaXRlLWJ1ZmZlciAoYWxpZ25lZCBvbiBAYy0+bWluX2lvX3NpemUgYm91bmRhcnkpIGlzIHN5bmNocm9uaXplZC4KKyAqIFRoaXMgd2F5IHdlIHdhc3RlIGxlc3Mgc3BhY2UuCiAgKi8KIGludCB1Ymlmc193YnVmX3N5bmNfbm9sb2NrKHN0cnVjdCB1Ymlmc193YnVmICp3YnVmKQogewogCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gd2J1Zi0+YzsKLQlpbnQgZXJyLCBkaXJ0OworCWludCBlcnIsIGRpcnQsIHN5bmNfbGVuOwogCiAJY2FuY2VsX3didWZfdGltZXJfbm9sb2NrKHdidWYpOwogCWlmICghd2J1Zi0+dXNlZCB8fCB3YnVmLT5sbnVtID09IC0xKQpAQCAtMzU3LDI3ICszODcsNTMgQEAKIAlkYmdfaW8oIkxFQiAlZDolZCwgJWQgYnl0ZXMsIGpoZWFkICVzIiwKIAkgICAgICAgd2J1Zi0+bG51bSwgd2J1Zi0+b2Zmcywgd2J1Zi0+dXNlZCwgZGJnX2poZWFkKHdidWYtPmpoZWFkKSk7CiAJdWJpZnNfYXNzZXJ0KCEod2J1Zi0+YXZhaWwgJiA3KSk7Ci0JdWJpZnNfYXNzZXJ0KHdidWYtPm9mZnMgKyBjLT5taW5faW9fc2l6ZSA8PSBjLT5sZWJfc2l6ZSk7CisJdWJpZnNfYXNzZXJ0KHdidWYtPm9mZnMgKyB3YnVmLT5zaXplIDw9IGMtPmxlYl9zaXplKTsKKwl1Ymlmc19hc3NlcnQod2J1Zi0+c2l6ZSA+PSBjLT5taW5faW9fc2l6ZSk7CisJdWJpZnNfYXNzZXJ0KHdidWYtPnNpemUgPD0gYy0+bWF4X3dyaXRlX3NpemUpOworCXViaWZzX2Fzc2VydCh3YnVmLT5zaXplICUgYy0+bWluX2lvX3NpemUgPT0gMCk7CiAJdWJpZnNfYXNzZXJ0KCFjLT5yb19tZWRpYSAmJiAhYy0+cm9fbW91bnQpOworCWlmIChjLT5sZWJfc2l6ZSAtIHdidWYtPm9mZnMgPj0gYy0+bWF4X3dyaXRlX3NpemUpCisJCXViaWZzX2Fzc2VydCghKCh3YnVmLT5vZmZzICsgd2J1Zi0+c2l6ZSkgJSBjLT5tYXhfd3JpdGVfc2l6ZSApKTsKIAogCWlmIChjLT5yb19lcnJvcikKIAkJcmV0dXJuIC1FUk9GUzsKIAotCXViaWZzX3BhZChjLCB3YnVmLT5idWYgKyB3YnVmLT51c2VkLCB3YnVmLT5hdmFpbCk7CisJLyoKKwkgKiBEbyBub3Qgd3JpdGUgd2hvbGUgd3JpdGUgYnVmZmVyIGJ1dCB3cml0ZSBvbmx5IHRoZSBtaW5pbXVtIG5lY2Vzc2FyeQorCSAqIGFtb3VudCBvZiBtaW4uIEkvTyB1bml0cy4KKwkgKi8KKwlzeW5jX2xlbiA9IEFMSUdOKHdidWYtPnVzZWQsIGMtPm1pbl9pb19zaXplKTsKKwlkaXJ0ID0gc3luY19sZW4gLSB3YnVmLT51c2VkOworCWlmIChkaXJ0KQorCQl1Ymlmc19wYWQoYywgd2J1Zi0+YnVmICsgd2J1Zi0+dXNlZCwgZGlydCk7CiAJZXJyID0gdWJpX2xlYl93cml0ZShjLT51YmksIHdidWYtPmxudW0sIHdidWYtPmJ1Ziwgd2J1Zi0+b2ZmcywKLQkJCSAgICBjLT5taW5faW9fc2l6ZSwgd2J1Zi0+ZHR5cGUpOworCQkJICAgIHN5bmNfbGVuLCB3YnVmLT5kdHlwZSk7CiAJaWYgKGVycikgewogCQl1Ymlmc19lcnIoImNhbm5vdCB3cml0ZSAlZCBieXRlcyB0byBMRUIgJWQ6JWQiLAotCQkJICBjLT5taW5faW9fc2l6ZSwgd2J1Zi0+bG51bSwgd2J1Zi0+b2Zmcyk7CisJCQkgIHN5bmNfbGVuLCB3YnVmLT5sbnVtLCB3YnVmLT5vZmZzKTsKIAkJZGJnX2R1bXBfc3RhY2soKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlkaXJ0ID0gd2J1Zi0+YXZhaWw7Ci0KIAlzcGluX2xvY2soJndidWYtPmxvY2spOwotCXdidWYtPm9mZnMgKz0gYy0+bWluX2lvX3NpemU7Ci0Jd2J1Zi0+YXZhaWwgPSBjLT5taW5faW9fc2l6ZTsKKwl3YnVmLT5vZmZzICs9IHN5bmNfbGVuOworCS8qCisJICogTm93IEB3YnVmLT5vZmZzIGlzIG5vdCBuZWNlc3NhcmlseSBhbGlnbmVkIHRvIEBjLT5tYXhfd3JpdGVfc2l6ZS4KKwkgKiBCdXQgb3VyIGdvYWwgaXMgdG8gb3B0aW1pemUgd3JpdGVzIGFuZCBtYWtlIHN1cmUgd2Ugd3JpdGUgaW4KKwkgKiBAYy0+bWF4X3dyaXRlX3NpemUgY2h1bmtzIGFuZCB0byBAYy0+bWF4X3dyaXRlX3NpemUtYWxpZ25lZCBvZmZzZXQuCisJICogVGh1cywgaWYgQHdidWYtPm9mZnMgaXMgbm90IGFsaWduZWQgdG8gQGMtPm1heF93cml0ZV9zaXplIG5vdywgbWFrZQorCSAqIHN1cmUgdGhhdCBAd2J1Zi0+b2ZmcyArIEB3YnVmLT5zaXplIGlzIGFsaWduZWQgdG8KKwkgKiBAYy0+bWF4X3dyaXRlX3NpemUuIFRoaXMgd2F5IHdlIG1ha2Ugc3VyZSB0aGF0IGFmdGVyIG5leHQKKwkgKiB3cml0ZS1idWZmZXIgZmx1c2ggd2UgYXJlIGFnYWluIGF0IHRoZSBvcHRpbWFsIG9mZnNldCAoYWxpZ25lZCB0bworCSAqIEBjLT5tYXhfd3JpdGVfc2l6ZSkuCisJICovCisJaWYgKGMtPmxlYl9zaXplIC0gd2J1Zi0+b2ZmcyA8IGMtPm1heF93cml0ZV9zaXplKQorCQl3YnVmLT5zaXplID0gYy0+bGViX3NpemUgLSB3YnVmLT5vZmZzOworCWVsc2UgaWYgKHdidWYtPm9mZnMgJiAoYy0+bWF4X3dyaXRlX3NpemUgLSAxKSkKKwkJd2J1Zi0+c2l6ZSA9IEFMSUdOKHdidWYtPm9mZnMsIGMtPm1heF93cml0ZV9zaXplKSAtIHdidWYtPm9mZnM7CisJZWxzZQorCQl3YnVmLT5zaXplID0gYy0+bWF4X3dyaXRlX3NpemU7CisJd2J1Zi0+YXZhaWwgPSB3YnVmLT5zaXplOwogCXdidWYtPnVzZWQgPSAwOwogCXdidWYtPm5leHRfaW5vID0gMDsKIAlzcGluX3VubG9jaygmd2J1Zi0+bG9jayk7CkBAIC00MjAsNyArNDc2LDEzIEBACiAJc3Bpbl9sb2NrKCZ3YnVmLT5sb2NrKTsKIAl3YnVmLT5sbnVtID0gbG51bTsKIAl3YnVmLT5vZmZzID0gb2ZmczsKLQl3YnVmLT5hdmFpbCA9IGMtPm1pbl9pb19zaXplOworCWlmIChjLT5sZWJfc2l6ZSAtIHdidWYtPm9mZnMgPCBjLT5tYXhfd3JpdGVfc2l6ZSkKKwkJd2J1Zi0+c2l6ZSA9IGMtPmxlYl9zaXplIC0gd2J1Zi0+b2ZmczsKKwllbHNlIGlmICh3YnVmLT5vZmZzICYgKGMtPm1heF93cml0ZV9zaXplIC0gMSkpCisJCXdidWYtPnNpemUgPSBBTElHTih3YnVmLT5vZmZzLCBjLT5tYXhfd3JpdGVfc2l6ZSkgLSB3YnVmLT5vZmZzOworCWVsc2UKKwkJd2J1Zi0+c2l6ZSA9IGMtPm1heF93cml0ZV9zaXplOworCXdidWYtPmF2YWlsID0gd2J1Zi0+c2l6ZTsKIAl3YnVmLT51c2VkID0gMDsKIAlzcGluX3VubG9jaygmd2J1Zi0+bG9jayk7CiAJd2J1Zi0+ZHR5cGUgPSBkdHlwZTsKQEAgLTUwMCw4ICs1NjIsOSBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGRhdGEgdG8gZmxhc2ggdmlhIHdyaXRlLWJ1ZmZlciBAd2J1Zi4gVGhpcyBtZWFucyB0aGF0CiAgKiB0aGUgbGFzdCBwaWVjZSBvZiB0aGUgbm9kZSB3b24ndCByZWFjaCB0aGUgZmxhc2ggbWVkaWEgaW1tZWRpYXRlbHkgaWYgaXQKLSAqIGRvZXMgbm90IHRha2Ugd2hvbGUgbWluaW1hbCBJL08gdW5pdC4gSW5zdGVhZCwgdGhlIG5vZGUgd2lsbCBzaXQgaW4gUkFNCi0gKiB1bnRpbCB0aGUgd3JpdGUtYnVmZmVyIGlzIHN5bmNocm9uaXplZCAoZS5nLiwgYnkgdGltZXIpLgorICogZG9lcyBub3QgdGFrZSB3aG9sZSBtYXguIHdyaXRlIHVuaXQgKEBjLT5tYXhfd3JpdGVfc2l6ZSkuIEluc3RlYWQsIHRoZSBub2RlCisgKiB3aWxsIHNpdCBpbiBSQU0gdW50aWwgdGhlIHdyaXRlLWJ1ZmZlciBpcyBzeW5jaHJvbml6ZWQgKGUuZy4sIGJ5IHRpbWVyLCBvcgorICogYmVjYXVzZSBtb3JlIGRhdGEgYXJlIGFwcGVuZGVkIHRvIHRoZSB3cml0ZS1idWZmZXIpLgogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluCiAgKiBjYXNlIG9mIGZhaWx1cmUuIElmIHRoZSBub2RlIGNhbm5vdCBiZSB3cml0dGVuIGJlY2F1c2UgdGhlcmUgaXMgbm8gbW9yZQpAQCAtNTE4LDkgKzU4MSwxNCBAQAogCXViaWZzX2Fzc2VydChsZW4gPiAwICYmIHdidWYtPmxudW0gPj0gMCAmJiB3YnVmLT5sbnVtIDwgYy0+bGViX2NudCk7CiAJdWJpZnNfYXNzZXJ0KHdidWYtPm9mZnMgPj0gMCAmJiB3YnVmLT5vZmZzICUgYy0+bWluX2lvX3NpemUgPT0gMCk7CiAJdWJpZnNfYXNzZXJ0KCEod2J1Zi0+b2ZmcyAmIDcpICYmIHdidWYtPm9mZnMgPD0gYy0+bGViX3NpemUpOwotCXViaWZzX2Fzc2VydCh3YnVmLT5hdmFpbCA+IDAgJiYgd2J1Zi0+YXZhaWwgPD0gYy0+bWluX2lvX3NpemUpOworCXViaWZzX2Fzc2VydCh3YnVmLT5hdmFpbCA+IDAgJiYgd2J1Zi0+YXZhaWwgPD0gd2J1Zi0+c2l6ZSk7CisJdWJpZnNfYXNzZXJ0KHdidWYtPnNpemUgPj0gYy0+bWluX2lvX3NpemUpOworCXViaWZzX2Fzc2VydCh3YnVmLT5zaXplIDw9IGMtPm1heF93cml0ZV9zaXplKTsKKwl1Ymlmc19hc3NlcnQod2J1Zi0+c2l6ZSAlIGMtPm1pbl9pb19zaXplID09IDApOwogCXViaWZzX2Fzc2VydChtdXRleF9pc19sb2NrZWQoJndidWYtPmlvX211dGV4KSk7CiAJdWJpZnNfYXNzZXJ0KCFjLT5yb19tZWRpYSAmJiAhYy0+cm9fbW91bnQpOworCWlmIChjLT5sZWJfc2l6ZSAtIHdidWYtPm9mZnMgPj0gYy0+bWF4X3dyaXRlX3NpemUpCisJCXViaWZzX2Fzc2VydCghKCh3YnVmLT5vZmZzICsgd2J1Zi0+c2l6ZSkgJSBjLT5tYXhfd3JpdGVfc2l6ZSApKTsKIAogCWlmIChjLT5sZWJfc2l6ZSAtIHdidWYtPm9mZnMgLSB3YnVmLT51c2VkIDwgYWxpZ25lZF9sZW4pIHsKIAkJZXJyID0gLUVOT1NQQzsKQEAgLTU0MywxNCArNjExLDE4IEBACiAJCQlkYmdfaW8oImZsdXNoIGpoZWFkICVzIHdidWYgdG8gTEVCICVkOiVkIiwKIAkJCSAgICAgICBkYmdfamhlYWQod2J1Zi0+amhlYWQpLCB3YnVmLT5sbnVtLCB3YnVmLT5vZmZzKTsKIAkJCWVyciA9IHViaV9sZWJfd3JpdGUoYy0+dWJpLCB3YnVmLT5sbnVtLCB3YnVmLT5idWYsCi0JCQkJCSAgICB3YnVmLT5vZmZzLCBjLT5taW5faW9fc2l6ZSwKKwkJCQkJICAgIHdidWYtPm9mZnMsIHdidWYtPnNpemUsCiAJCQkJCSAgICB3YnVmLT5kdHlwZSk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwogCiAJCQlzcGluX2xvY2soJndidWYtPmxvY2spOwotCQkJd2J1Zi0+b2ZmcyArPSBjLT5taW5faW9fc2l6ZTsKLQkJCXdidWYtPmF2YWlsID0gYy0+bWluX2lvX3NpemU7CisJCQl3YnVmLT5vZmZzICs9IHdidWYtPnNpemU7CisJCQlpZiAoYy0+bGViX3NpemUgLSB3YnVmLT5vZmZzID49IGMtPm1heF93cml0ZV9zaXplKQorCQkJCXdidWYtPnNpemUgPSBjLT5tYXhfd3JpdGVfc2l6ZTsKKwkJCWVsc2UKKwkJCQl3YnVmLT5zaXplID0gYy0+bGViX3NpemUgLSB3YnVmLT5vZmZzOworCQkJd2J1Zi0+YXZhaWwgPSB3YnVmLT5zaXplOwogCQkJd2J1Zi0+dXNlZCA9IDA7CiAJCQl3YnVmLT5uZXh0X2lubyA9IDA7CiAJCQlzcGluX3VubG9jaygmd2J1Zi0+bG9jayk7CkBAIC01NjQsMzMgKzYzNiw1NyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JLyoKLQkgKiBUaGUgbm9kZSBpcyBsYXJnZSBlbm91Z2ggYW5kIGRvZXMgbm90IGZpdCBlbnRpcmVseSB3aXRoaW4gY3VycmVudAotCSAqIG1pbmltYWwgSS9PIHVuaXQuIFdlIGhhdmUgdG8gZmlsbCBhbmQgZmx1c2ggd3JpdGUtYnVmZmVyIGFuZCBzd2l0Y2gKLQkgKiB0byB0aGUgbmV4dCBtaW4uIEkvTyB1bml0LgotCSAqLwotCWRiZ19pbygiZmx1c2ggamhlYWQgJXMgd2J1ZiB0byBMRUIgJWQ6JWQiLAotCSAgICAgICBkYmdfamhlYWQod2J1Zi0+amhlYWQpLCB3YnVmLT5sbnVtLCB3YnVmLT5vZmZzKTsKLQltZW1jcHkod2J1Zi0+YnVmICsgd2J1Zi0+dXNlZCwgYnVmLCB3YnVmLT5hdmFpbCk7Ci0JZXJyID0gdWJpX2xlYl93cml0ZShjLT51YmksIHdidWYtPmxudW0sIHdidWYtPmJ1Ziwgd2J1Zi0+b2ZmcywKLQkJCSAgICBjLT5taW5faW9fc2l6ZSwgd2J1Zi0+ZHR5cGUpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCW9mZnMgPSB3YnVmLT5vZmZzOworCXdyaXR0ZW4gPSAwOwogCi0Jb2ZmcyA9IHdidWYtPm9mZnMgKyBjLT5taW5faW9fc2l6ZTsKLQlsZW4gLT0gd2J1Zi0+YXZhaWw7Ci0JYWxpZ25lZF9sZW4gLT0gd2J1Zi0+YXZhaWw7Ci0Jd3JpdHRlbiA9IHdidWYtPmF2YWlsOworCWlmICh3YnVmLT51c2VkKSB7CisJCS8qCisJCSAqIFRoZSBub2RlIGlzIGxhcmdlIGVub3VnaCBhbmQgZG9lcyBub3QgZml0IGVudGlyZWx5IHdpdGhpbgorCQkgKiBjdXJyZW50IGF2YWlsYWJsZSBzcGFjZS4gV2UgaGF2ZSB0byBmaWxsIGFuZCBmbHVzaAorCQkgKiB3cml0ZS1idWZmZXIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBtYXguIHdyaXRlIHVuaXQuCisJCSAqLworCQlkYmdfaW8oImZsdXNoIGpoZWFkICVzIHdidWYgdG8gTEVCICVkOiVkIiwKKwkJICAgICAgIGRiZ19qaGVhZCh3YnVmLT5qaGVhZCksIHdidWYtPmxudW0sIHdidWYtPm9mZnMpOworCQltZW1jcHkod2J1Zi0+YnVmICsgd2J1Zi0+dXNlZCwgYnVmLCB3YnVmLT5hdmFpbCk7CisJCWVyciA9IHViaV9sZWJfd3JpdGUoYy0+dWJpLCB3YnVmLT5sbnVtLCB3YnVmLT5idWYsIHdidWYtPm9mZnMsCisJCQkJICAgIHdidWYtPnNpemUsIHdidWYtPmR0eXBlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCW9mZnMgKz0gd2J1Zi0+c2l6ZTsKKwkJbGVuIC09IHdidWYtPmF2YWlsOworCQlhbGlnbmVkX2xlbiAtPSB3YnVmLT5hdmFpbDsKKwkJd3JpdHRlbiArPSB3YnVmLT5hdmFpbDsKKwl9IGVsc2UgaWYgKHdidWYtPm9mZnMgJiAoYy0+bWF4X3dyaXRlX3NpemUgLSAxKSkgeworCQkvKgorCQkgKiBUaGUgd3JpdGUtYnVmZmVyIG9mZnNldCBpcyBub3QgYWxpZ25lZCB0bworCQkgKiBAYy0+bWF4X3dyaXRlX3NpemUgYW5kIEB3YnVmLT5zaXplIGlzIGxlc3MgdGhhbgorCQkgKiBAYy0+bWF4X3dyaXRlX3NpemUuIFdyaXRlIEB3YnVmLT5zaXplIGJ5dGVzIHRvIG1ha2Ugc3VyZSB0aGUKKwkJICogZm9sbG93aW5nIHdyaXRlcyBhcmUgZG9uZSBpbiBvcHRpbWFsIEBjLT5tYXhfd3JpdGVfc2l6ZQorCQkgKiBjaHVua3MuCisJCSAqLworCQlkYmdfaW8oIndyaXRlICVkIGJ5dGVzIHRvIExFQiAlZDolZCIsCisJCSAgICAgICB3YnVmLT5zaXplLCB3YnVmLT5sbnVtLCB3YnVmLT5vZmZzKTsKKwkJZXJyID0gdWJpX2xlYl93cml0ZShjLT51YmksIHdidWYtPmxudW0sIGJ1Ziwgd2J1Zi0+b2ZmcywKKwkJCQkgICAgd2J1Zi0+c2l6ZSwgd2J1Zi0+ZHR5cGUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJb2ZmcyArPSB3YnVmLT5zaXplOworCQlsZW4gLT0gd2J1Zi0+c2l6ZTsKKwkJYWxpZ25lZF9sZW4gLT0gd2J1Zi0+c2l6ZTsKKwkJd3JpdHRlbiArPSB3YnVmLT5zaXplOworCX0KIAogCS8qCi0JICogVGhlIHJlbWFpbmluZyBkYXRhIG1heSB0YWtlIG1vcmUgd2hvbGUgbWluLiBJL08gdW5pdHMsIHNvIHdyaXRlIHRoZQotCSAqIHJlbWFpbnMgbXVsdGlwbGUgdG8gbWluLiBJL08gdW5pdCBzaXplIGRpcmVjdGx5IHRvIHRoZSBmbGFzaCBtZWRpYS4KKwkgKiBUaGUgcmVtYWluaW5nIGRhdGEgbWF5IHRha2UgbW9yZSB3aG9sZSBtYXguIHdyaXRlIHVuaXRzLCBzbyB3cml0ZSB0aGUKKwkgKiByZW1haW5zIG11bHRpcGxlIHRvIG1heC4gd3JpdGUgdW5pdCBzaXplIGRpcmVjdGx5IHRvIHRoZSBmbGFzaCBtZWRpYS4KIAkgKiBXZSBhbGlnbiBub2RlIGxlbmd0aCB0byA4LWJ5dGUgYm91bmRhcnkgYmVjYXVzZSB3ZSBhbnl3YXkgZmxhc2ggd2J1ZgogCSAqIGlmIHRoZSByZW1haW5pbmcgc3BhY2UgaXMgbGVzcyB0aGFuIDggYnl0ZXMuCiAJICovCi0JbiA9IGFsaWduZWRfbGVuID4+IGMtPm1pbl9pb19zaGlmdDsKKwluID0gYWxpZ25lZF9sZW4gPj4gYy0+bWF4X3dyaXRlX3NoaWZ0OwogCWlmIChuKSB7Ci0JCW4gPDw9IGMtPm1pbl9pb19zaGlmdDsKKwkJbiA8PD0gYy0+bWF4X3dyaXRlX3NoaWZ0OwogCQlkYmdfaW8oIndyaXRlICVkIGJ5dGVzIHRvIExFQiAlZDolZCIsIG4sIHdidWYtPmxudW0sIG9mZnMpOwogCQllcnIgPSB1YmlfbGViX3dyaXRlKGMtPnViaSwgd2J1Zi0+bG51bSwgYnVmICsgd3JpdHRlbiwgb2ZmcywgbiwKIAkJCQkgICAgd2J1Zi0+ZHR5cGUpOwpAQCAtNjA2LDE0ICs3MDIsMTggQEAKIAlpZiAoYWxpZ25lZF9sZW4pCiAJCS8qCiAJCSAqIEFuZCBub3cgd2UgaGF2ZSB3aGF0J3MgbGVmdCBhbmQgd2hhdCBkb2VzIG5vdCB0YWtlIHdob2xlCi0JCSAqIG1pbi4gSS9PIHVuaXQsIHNvIHdyaXRlIGl0IHRvIHRoZSB3cml0ZS1idWZmZXIgYW5kIHdlIGFyZQorCQkgKiBtYXguIHdyaXRlIHVuaXQsIHNvIHdyaXRlIGl0IHRvIHRoZSB3cml0ZS1idWZmZXIgYW5kIHdlIGFyZQogCQkgKiBkb25lLgogCQkgKi8KIAkJbWVtY3B5KHdidWYtPmJ1ZiwgYnVmICsgd3JpdHRlbiwgbGVuKTsKIAogCXdidWYtPm9mZnMgPSBvZmZzOworCWlmIChjLT5sZWJfc2l6ZSAtIHdidWYtPm9mZnMgPj0gYy0+bWF4X3dyaXRlX3NpemUpCisJCXdidWYtPnNpemUgPSBjLT5tYXhfd3JpdGVfc2l6ZTsKKwllbHNlCisJCXdidWYtPnNpemUgPSBjLT5sZWJfc2l6ZSAtIHdidWYtPm9mZnM7CisJd2J1Zi0+YXZhaWwgPSB3YnVmLT5zaXplIC0gYWxpZ25lZF9sZW47CiAJd2J1Zi0+dXNlZCA9IGFsaWduZWRfbGVuOwotCXdidWYtPmF2YWlsID0gYy0+bWluX2lvX3NpemUgLSBhbGlnbmVkX2xlbjsKIAl3YnVmLT5uZXh0X2lubyA9IDA7CiAJc3Bpbl91bmxvY2soJndidWYtPmxvY2spOwogCkBAIC04MzcsMTEgKzkzNywxMSBAQAogewogCXNpemVfdCBzaXplOwogCi0Jd2J1Zi0+YnVmID0ga21hbGxvYyhjLT5taW5faW9fc2l6ZSwgR0ZQX0tFUk5FTCk7CisJd2J1Zi0+YnVmID0ga21hbGxvYyhjLT5tYXhfd3JpdGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3YnVmLT5idWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc2l6ZSA9IChjLT5taW5faW9fc2l6ZSAvIFVCSUZTX0NIX1NaICsgMSkgKiBzaXplb2YoaW5vX3QpOworCXNpemUgPSAoYy0+bWF4X3dyaXRlX3NpemUgLyBVQklGU19DSF9TWiArIDEpICogc2l6ZW9mKGlub190KTsKIAl3YnVmLT5pbm9kZXMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghd2J1Zi0+aW5vZGVzKSB7CiAJCWtmcmVlKHdidWYtPmJ1Zik7CkBAIC04NTEsNyArOTUxLDE0IEBACiAKIAl3YnVmLT51c2VkID0gMDsKIAl3YnVmLT5sbnVtID0gd2J1Zi0+b2ZmcyA9IC0xOwotCXdidWYtPmF2YWlsID0gYy0+bWluX2lvX3NpemU7CisJLyoKKwkgKiBJZiB0aGUgTEVCIHN0YXJ0cyBhdCB0aGUgbWF4LiB3cml0ZSBzaXplIGFsaWduZWQgYWRkcmVzcywgdGhlbgorCSAqIHdyaXRlLWJ1ZmZlciBzaXplIGhhcyB0byBiZSBzZXQgdG8gQGMtPm1heF93cml0ZV9zaXplLiBPdGhlcndpc2UsCisJICogc2V0IGl0IHRvIHNvbWV0aGluZyBzbWFsbGVyIHNvIHRoYXQgaXQgZW5kcyBhdCB0aGUgY2xvc2VzdCBtYXguCisJICogd3JpdGUgc2l6ZSBib3VuZGFyeS4KKwkgKi8KKwlzaXplID0gYy0+bWF4X3dyaXRlX3NpemUgLSAoYy0+bGViX3N0YXJ0ICUgYy0+bWF4X3dyaXRlX3NpemUpOworCXdidWYtPmF2YWlsID0gd2J1Zi0+c2l6ZSA9IHNpemU7CiAJd2J1Zi0+ZHR5cGUgPSBVQklfVU5LTk9XTjsKIAl3YnVmLT5zeW5jX2NhbGxiYWNrID0gTlVMTDsKIAltdXRleF9pbml0KCZ3YnVmLT5pb19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9pb2N0bC5jIGIvZnMvdWJpZnMvaW9jdGwuYwppbmRleCA4YWFjZDY0Li41NDhhY2Y0IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9pb2N0bC5jCisrKyBiL2ZzL3ViaWZzL2lvY3RsLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKIAkJCXJldHVybiAtRVJPRlM7CiAKLQkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCQlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAKIAkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpKQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvam91cm5hbC5jIGIvZnMvdWJpZnMvam91cm5hbC5jCmluZGV4IDkxNGYxYmQuLmFlZDI1ZTggMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2pvdXJuYWwuYworKysgYi9mcy91Ymlmcy9qb3VybmFsLmMKQEAgLTY5MCw3ICs2OTAsNyBAQAogewogCXN0cnVjdCB1Ymlmc19kYXRhX25vZGUgKmRhdGE7CiAJaW50IGVyciwgbG51bSwgb2ZmcywgY29tcHJfdHlwZSwgb3V0X2xlbjsKLQlpbnQgZGxlbiA9IFVCSUZTX0RBVEFfTk9ERV9TWiArIFVCSUZTX0JMT0NLX1NJWkUgKiBXT1JTVF9DT01QUl9GQUNUT1I7CisJaW50IGRsZW4gPSBDT01QUkVTU0VEX0RBVEFfTk9ERV9CVUZfU1osIGFsbG9jYXRlZCA9IDE7CiAJc3RydWN0IHViaWZzX2lub2RlICp1aSA9IHViaWZzX2lub2RlKGlub2RlKTsKIAogCWRiZ19qbmwoImlubyAlbHUsIGJsayAldSwgbGVuICVkLCBrZXkgJXMiLApAQCAtNjk4LDkgKzY5OCwxOSBAQAogCQlEQkdLRVkoa2V5KSk7CiAJdWJpZnNfYXNzZXJ0KGxlbiA8PSBVQklGU19CTE9DS19TSVpFKTsKIAotCWRhdGEgPSBrbWFsbG9jKGRsZW4sIEdGUF9OT0ZTKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOworCWRhdGEgPSBrbWFsbG9jKGRsZW4sIEdGUF9OT0ZTIHwgX19HRlBfTk9XQVJOKTsKKwlpZiAoIWRhdGEpIHsKKwkJLyoKKwkJICogRmFsbC1iYWNrIHRvIHRoZSB3cml0ZSByZXNlcnZlIGJ1ZmZlci4gTm90ZSwgd2UgbWlnaHQgYmUKKwkJICogY3VycmVudGx5IG9uIHRoZSBtZW1vcnkgcmVjbGFpbSBwYXRoLCB3aGVuIHRoZSBrZXJuZWwgaXMKKwkJICogdHJ5aW5nIHRvIGZyZWUgc29tZSBtZW1vcnkgYnkgd3JpdGluZyBvdXQgZGlydHkgcGFnZXMuIFRoZQorCQkgKiB3cml0ZSByZXNlcnZlIGJ1ZmZlciBoZWxwcyB1cyB0byBndWFyYW50ZWUgdGhhdCB3ZSBhcmUKKwkJICogYWx3YXlzIGFibGUgdG8gd3JpdGUgdGhlIGRhdGEuCisJCSAqLworCQlhbGxvY2F0ZWQgPSAwOworCQltdXRleF9sb2NrKCZjLT53cml0ZV9yZXNlcnZlX211dGV4KTsKKwkJZGF0YSA9IGMtPndyaXRlX3Jlc2VydmVfYnVmOworCX0KIAogCWRhdGEtPmNoLm5vZGVfdHlwZSA9IFVCSUZTX0RBVEFfTk9ERTsKIAlrZXlfd3JpdGUoYywga2V5LCAmZGF0YS0+a2V5KTsKQEAgLTczNiw3ICs3NDYsMTAgQEAKIAkJZ290byBvdXRfcm87CiAKIAlmaW5pc2hfcmVzZXJ2YXRpb24oYyk7Ci0Ja2ZyZWUoZGF0YSk7CisJaWYgKCFhbGxvY2F0ZWQpCisJCW11dGV4X3VubG9jaygmYy0+d3JpdGVfcmVzZXJ2ZV9tdXRleCk7CisJZWxzZQorCQlrZnJlZShkYXRhKTsKIAlyZXR1cm4gMDsKIAogb3V0X3JlbGVhc2U6CkBAIC03NDUsNyArNzU4LDEwIEBACiAJdWJpZnNfcm9fbW9kZShjLCBlcnIpOwogCWZpbmlzaF9yZXNlcnZhdGlvbihjKTsKIG91dF9mcmVlOgotCWtmcmVlKGRhdGEpOworCWlmICghYWxsb2NhdGVkKQorCQltdXRleF91bmxvY2soJmMtPndyaXRlX3Jlc2VydmVfbXV0ZXgpOworCWVsc2UKKwkJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbHByb3BzLmMgYi9mcy91Ymlmcy9scHJvcHMuYwppbmRleCA0ZDRjYTM4Li5jN2IyNWUyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9scHJvcHMuYworKysgYi9mcy91Ymlmcy9scHJvcHMuYwpAQCAtMTAzNSw3ICsxMDM1LDggQEAKIAlzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWI7CiAJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZDsKIAlzdHJ1Y3QgdWJpZnNfbHBfc3RhdHMgKmxzdCA9ICZkYXRhLT5sc3Q7Ci0JaW50IGNhdCwgbG51bSA9IGxwLT5sbnVtLCBpc19pZHggPSAwLCB1c2VkID0gMCwgZnJlZSwgZGlydHk7CisJaW50IGNhdCwgbG51bSA9IGxwLT5sbnVtLCBpc19pZHggPSAwLCB1c2VkID0gMCwgZnJlZSwgZGlydHksIHJldDsKKwl2b2lkICpidWYgPSBOVUxMOwogCiAJY2F0ID0gbHAtPmZsYWdzICYgTFBST1BTX0NBVF9NQVNLOwogCWlmIChjYXQgIT0gTFBST1BTX1VOQ0FUKSB7CkBAIC0xMDkzLDcgKzEwOTQsMTMgQEAKIAkJfQogCX0KIAotCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIDAsIGMtPmRiZy0+YnVmLCAwKTsKKwlidWYgPSBfX3ZtYWxsb2MoYy0+bGViX3NpemUsIEdGUF9LRVJORUwgfCBHRlBfTk9GUywgUEFHRV9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXViaWZzX2VycigiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSB0byBzY2FuIExFQiAlZCIsIGxudW0pOworCQlnb3RvIG91dDsKKwl9CisKKwlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBidWYsIDApOwogCWlmIChJU19FUlIoc2xlYikpIHsKIAkJLyoKIAkJICogQWZ0ZXIgYW4gdW5jbGVhbiB1bm1vdW50LCBlbXB0eSBhbmQgZnJlZWFibGUgTEVCcwpAQCAtMTEwNSw3ICsxMTEyLDggQEAKIAkJCWxzdC0+ZW1wdHlfbGVicyArPSAxOwogCQkJbHN0LT50b3RhbF9mcmVlICs9IGMtPmxlYl9zaXplOwogCQkJbHN0LT50b3RhbF9kYXJrICs9IHViaWZzX2NhbGNfZGFyayhjLCBjLT5sZWJfc2l6ZSk7Ci0JCQlyZXR1cm4gTFBUX1NDQU5fQ09OVElOVUU7CisJCQlyZXQgPSBMUFRfU0NBTl9DT05USU5VRTsKKwkJCWdvdG8gZXhpdDsKIAkJfQogCiAJCWlmIChscC0+ZnJlZSArIGxwLT5kaXJ0eSA9PSBjLT5sZWJfc2l6ZSAmJgpAQCAtMTExNSwxMCArMTEyMywxMiBAQAogCQkJbHN0LT50b3RhbF9mcmVlICArPSBscC0+ZnJlZTsKIAkJCWxzdC0+dG90YWxfZGlydHkgKz0gbHAtPmRpcnR5OwogCQkJbHN0LT50b3RhbF9kYXJrICArPSAgdWJpZnNfY2FsY19kYXJrKGMsIGMtPmxlYl9zaXplKTsKLQkJCXJldHVybiBMUFRfU0NBTl9DT05USU5VRTsKKwkJCXJldCA9IExQVF9TQ0FOX0NPTlRJTlVFOworCQkJZ290byBleGl0OwogCQl9CiAJCWRhdGEtPmVyciA9IFBUUl9FUlIoc2xlYik7Ci0JCXJldHVybiBMUFRfU0NBTl9TVE9QOworCQlyZXQgPSBMUFRfU0NBTl9TVE9QOworCQlnb3RvIGV4aXQ7CiAJfQogCiAJaXNfaWR4ID0gLTE7CkBAIC0xMjM2LDcgKzEyNDYsMTAgQEAKIAl9CiAKIAl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7Ci0JcmV0dXJuIExQVF9TQ0FOX0NPTlRJTlVFOworCXJldCA9IExQVF9TQ0FOX0NPTlRJTlVFOworZXhpdDoKKwl2ZnJlZShidWYpOworCXJldHVybiByZXQ7CiAKIG91dF9wcmludDoKIAl1Ymlmc19lcnIoImJhZCBhY2NvdW50aW5nIG9mIExFQiAlZDogZnJlZSAlZCwgZGlydHkgJWQgZmxhZ3MgJSN4LCAiCkBAIC0xMjQ2LDYgKzEyNTksNyBAQAogb3V0X2Rlc3Ryb3k6CiAJdWJpZnNfc2Nhbl9kZXN0cm95KHNsZWIpOwogb3V0OgorCXZmcmVlKGJ1Zik7CiAJZGF0YS0+ZXJyID0gLUVJTlZBTDsKIAlyZXR1cm4gTFBUX1NDQU5fU1RPUDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xwdF9jb21taXQuYyBiL2ZzL3ViaWZzL2xwdF9jb21taXQuYwppbmRleCA1YzkwZGVjLi4wYTNjMmMzIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9scHRfY29tbWl0LmMKKysrIGIvZnMvdWJpZnMvbHB0X2NvbW1pdC5jCkBAIC0xNjI4LDI5ICsxNjI4LDM1IEBACiB7CiAJaW50IGVyciwgbGVuID0gYy0+bGViX3NpemUsIGRpcnR5ID0gMCwgbm9kZV90eXBlLCBub2RlX251bSwgbm9kZV9sZW47CiAJaW50IHJldDsKLQl2b2lkICpidWYgPSBjLT5kYmctPmJ1ZjsKKwl2b2lkICpidWYsICpwOwogCiAJaWYgKCEodWJpZnNfY2hrX2ZsYWdzICYgVUJJRlNfQ0hLX0xQUk9QUykpCiAJCXJldHVybiAwOwogCisJYnVmID0gcCA9IF9fdm1hbGxvYyhjLT5sZWJfc2l6ZSwgR0ZQX0tFUk5FTCB8IEdGUF9OT0ZTLCBQQUdFX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJdWJpZnNfZXJyKCJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBsdGFiIGNoZWNraW5nIik7CisJCXJldHVybiAwOworCX0KKwogCWRiZ19scCgiTEVCICVkIiwgbG51bSk7CiAJZXJyID0gdWJpX3JlYWQoYy0+dWJpLCBsbnVtLCBidWYsIDAsIGMtPmxlYl9zaXplKTsKIAlpZiAoZXJyKSB7CiAJCWRiZ19tc2coInViaV9yZWFkIGZhaWxlZCwgTEVCICVkLCBlcnJvciAlZCIsIGxudW0sIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0OwogCX0KIAl3aGlsZSAoMSkgewotCQlpZiAoIWlzX2Ffbm9kZShjLCBidWYsIGxlbikpIHsKKwkJaWYgKCFpc19hX25vZGUoYywgcCwgbGVuKSkgewogCQkJaW50IGksIHBhZF9sZW47CiAKLQkJCXBhZF9sZW4gPSBnZXRfcGFkX2xlbihjLCBidWYsIGxlbik7CisJCQlwYWRfbGVuID0gZ2V0X3BhZF9sZW4oYywgcCwgbGVuKTsKIAkJCWlmIChwYWRfbGVuKSB7Ci0JCQkJYnVmICs9IHBhZF9sZW47CisJCQkJcCArPSBwYWRfbGVuOwogCQkJCWxlbiAtPSBwYWRfbGVuOwogCQkJCWRpcnR5ICs9IHBhZF9sZW47CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAoIWRiZ19pc19hbGxfZmYoYnVmLCBsZW4pKSB7CisJCQlpZiAoIWRiZ19pc19hbGxfZmYocCwgbGVuKSkgewogCQkJCWRiZ19tc2coImludmFsaWQgZW1wdHkgc3BhY2UgaW4gTEVCICVkIGF0ICVkIiwKIAkJCQkJbG51bSwgYy0+bGViX3NpemUgLSBsZW4pOwogCQkJCWVyciA9IC1FSU5WQUw7CkBAIC0xNjY4LDE2ICsxNjc0LDIxIEBACiAJCQkJCWxudW0sIGRpcnR5LCBjLT5sdGFiW2ldLmRpcnR5KTsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJfQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gb3V0OwogCQl9Ci0JCW5vZGVfdHlwZSA9IGdldF9scHRfbm9kZV90eXBlKGMsIGJ1ZiwgJm5vZGVfbnVtKTsKKwkJbm9kZV90eXBlID0gZ2V0X2xwdF9ub2RlX3R5cGUoYywgcCwgJm5vZGVfbnVtKTsKIAkJbm9kZV9sZW4gPSBnZXRfbHB0X25vZGVfbGVuKGMsIG5vZGVfdHlwZSk7CiAJCXJldCA9IGRiZ19pc19ub2RlX2RpcnR5KGMsIG5vZGVfdHlwZSwgbG51bSwgYy0+bGViX3NpemUgLSBsZW4pOwogCQlpZiAocmV0ID09IDEpCiAJCQlkaXJ0eSArPSBub2RlX2xlbjsKLQkJYnVmICs9IG5vZGVfbGVuOworCQlwICs9IG5vZGVfbGVuOwogCQlsZW4gLT0gbm9kZV9sZW47CiAJfQorCisJZXJyID0gMDsKK291dDoKKwl2ZnJlZShidWYpOworCXJldHVybiBlcnI7CiB9CiAKIC8qKgpAQCAtMTg3MCwyNSArMTg4MSwzMSBAQAogc3RhdGljIHZvaWQgZHVtcF9scHRfbGViKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSkKIHsKIAlpbnQgZXJyLCBsZW4gPSBjLT5sZWJfc2l6ZSwgbm9kZV90eXBlLCBub2RlX251bSwgbm9kZV9sZW4sIG9mZnM7Ci0Jdm9pZCAqYnVmID0gYy0+ZGJnLT5idWY7CisJdm9pZCAqYnVmLCAqcDsKIAogCXByaW50ayhLRVJOX0RFQlVHICIocGlkICVkKSBzdGFydCBkdW1waW5nIExFQiAlZFxuIiwKIAkgICAgICAgY3VycmVudC0+cGlkLCBsbnVtKTsKKwlidWYgPSBwID0gX192bWFsbG9jKGMtPmxlYl9zaXplLCBHRlBfS0VSTkVMIHwgR0ZQX05PRlMsIFBBR0VfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQl1Ymlmc19lcnIoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgdG8gZHVtcCBMUFQiKTsKKwkJcmV0dXJuOworCX0KKwogCWVyciA9IHViaV9yZWFkKGMtPnViaSwgbG51bSwgYnVmLCAwLCBjLT5sZWJfc2l6ZSk7CiAJaWYgKGVycikgewogCQl1Ymlmc19lcnIoImNhbm5vdCByZWFkIExFQiAlZCwgZXJyb3IgJWQiLCBsbnVtLCBlcnIpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAl3aGlsZSAoMSkgewogCQlvZmZzID0gYy0+bGViX3NpemUgLSBsZW47Ci0JCWlmICghaXNfYV9ub2RlKGMsIGJ1ZiwgbGVuKSkgeworCQlpZiAoIWlzX2Ffbm9kZShjLCBwLCBsZW4pKSB7CiAJCQlpbnQgcGFkX2xlbjsKIAotCQkJcGFkX2xlbiA9IGdldF9wYWRfbGVuKGMsIGJ1ZiwgbGVuKTsKKwkJCXBhZF9sZW4gPSBnZXRfcGFkX2xlbihjLCBwLCBsZW4pOwogCQkJaWYgKHBhZF9sZW4pIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiTEVCICVkOiVkLCBwYWQgJWQgYnl0ZXNcbiIsCiAJCQkJICAgICAgIGxudW0sIG9mZnMsIHBhZF9sZW4pOwotCQkJCWJ1ZiArPSBwYWRfbGVuOworCQkJCXAgKz0gcGFkX2xlbjsKIAkJCQlsZW4gLT0gcGFkX2xlbjsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTE4OTgsNyArMTkxNSw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCW5vZGVfdHlwZSA9IGdldF9scHRfbm9kZV90eXBlKGMsIGJ1ZiwgJm5vZGVfbnVtKTsKKwkJbm9kZV90eXBlID0gZ2V0X2xwdF9ub2RlX3R5cGUoYywgcCwgJm5vZGVfbnVtKTsKIAkJc3dpdGNoIChub2RlX3R5cGUpIHsKIAkJY2FzZSBVQklGU19MUFRfUE5PREU6CiAJCXsKQEAgLTE5MjMsNyArMTk0MCw3IEBACiAJCQllbHNlCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkxFQiAlZDolZCwgbm5vZGUsICIsCiAJCQkJICAgICAgIGxudW0sIG9mZnMpOwotCQkJZXJyID0gdWJpZnNfdW5wYWNrX25ub2RlKGMsIGJ1ZiwgJm5ub2RlKTsKKwkJCWVyciA9IHViaWZzX3VucGFja19ubm9kZShjLCBwLCAmbm5vZGUpOwogCQkJZm9yIChpID0gMDsgaSA8IFVCSUZTX0xQVF9GQU5PVVQ7IGkrKykgewogCQkJCXByaW50ayhLRVJOX0NPTlQgIiVkOiVkIiwgbm5vZGUubmJyYW5jaFtpXS5sbnVtLAogCQkJCSAgICAgICBubm9kZS5uYnJhbmNoW2ldLm9mZnMpOwpAQCAtMTk0NCwxNSArMTk2MSwxOCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl1Ymlmc19lcnIoIkxQVCBub2RlIHR5cGUgJWQgbm90IHJlY29nbml6ZWQiLCBub2RlX3R5cGUpOwotCQkJcmV0dXJuOworCQkJZ290byBvdXQ7CiAJCX0KIAotCQlidWYgKz0gbm9kZV9sZW47CisJCXAgKz0gbm9kZV9sZW47CiAJCWxlbiAtPSBub2RlX2xlbjsKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiKHBpZCAlZCkgZmluaXNoIGR1bXBpbmcgTEVCICVkXG4iLAogCSAgICAgICBjdXJyZW50LT5waWQsIGxudW0pOworb3V0OgorCXZmcmVlKGJ1Zik7CisJcmV0dXJuOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL29ycGhhbi5jIGIvZnMvdWJpZnMvb3JwaGFuLmMKaW5kZXggODIwMDljNy4uMmNkYmQzMSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvb3JwaGFuLmMKKysrIGIvZnMvdWJpZnMvb3JwaGFuLmMKQEAgLTg5MiwxNSArODkyLDIyIEBACiBzdGF0aWMgaW50IGRiZ19zY2FuX29ycGhhbnMoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBjaGVja19pbmZvICpjaSkKIHsKIAlpbnQgbG51bSwgZXJyID0gMDsKKwl2b2lkICpidWY7CiAKIAkvKiBDaGVjayBuby1vcnBoYW5zIGZsYWcgYW5kIHNraXAgdGhpcyBpZiBubyBvcnBoYW5zICovCiAJaWYgKGMtPm5vX29ycGhzKQogCQlyZXR1cm4gMDsKIAorCWJ1ZiA9IF9fdm1hbGxvYyhjLT5sZWJfc2l6ZSwgR0ZQX0tFUk5FTCB8IEdGUF9OT0ZTLCBQQUdFX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJdWJpZnNfZXJyKCJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IHRvIGNoZWNrIG9ycGhhbnMiKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJZm9yIChsbnVtID0gYy0+b3JwaF9maXJzdDsgbG51bSA8PSBjLT5vcnBoX2xhc3Q7IGxudW0rKykgewogCQlzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWI7CiAKLQkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+ZGJnLT5idWYsIDApOworCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBidWYsIDApOwogCQlpZiAoSVNfRVJSKHNsZWIpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHNsZWIpOwogCQkJYnJlYWs7CkBAIC05MTIsNiArOTE5LDcgQEAKIAkJCWJyZWFrOwogCX0KIAorCXZmcmVlKGJ1Zik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvcmVjb3ZlcnkuYyBiL2ZzL3ViaWZzL3JlY292ZXJ5LmMKaW5kZXggNzdlOWI4Ny4uOTM2ZjJjYiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvcmVjb3ZlcnkuYworKysgYi9mcy91Ymlmcy9yZWNvdmVyeS5jCkBAIC0yOCw2ICsyOCwyMyBAQAogICogVUJJRlMgYWx3YXlzIGNsZWFucyBhd2F5IGFsbCByZW1uYW50cyBvZiBhbiB1bmNsZWFuIHVuLW1vdW50LCBzbyB0aGF0CiAgKiBlcnJvcnMgZG8gbm90IGFjY3VtdWxhdGUuIEhvd2V2ZXIgVUJJRlMgZGVmZXJzIHJlY292ZXJ5IGlmIGl0IGlzIG1vdW50ZWQKICAqIHJlYWQtb25seSwgYW5kIHRoZSBmbGFzaCBpcyBub3QgbW9kaWZpZWQgaW4gdGhhdCBjYXNlLgorICoKKyAqIFRoZSBnZW5lcmFsIFVCSUZTIGFwcHJvYWNoIHRvIHRoZSByZWNvdmVyeSBpcyB0aGF0IGl0IHJlY292ZXJzIGZyb20KKyAqIGNvcnJ1cHRpb25zIHdoaWNoIGNvdWxkIGJlIGNhdXNlZCBieSBwb3dlciBjdXRzLCBidXQgaXQgcmVmdXNlcyB0byByZWNvdmVyCisgKiBmcm9tIGNvcnJ1cHRpb24gY2F1c2VkIGJ5IG90aGVyIHJlYXNvbnMuIEFuZCBVQklGUyB0cmllcyB0byBkaXN0aW5ndWlzaAorICogYmV0d2VlbiB0aGVzZSAyIHJlYXNvbnMgb2YgY29ycnVwdGlvbnMgYW5kIHNpbGVudGx5IHJlY292ZXIgaW4gdGhlIGZvcm1lcgorICogY2FzZSBhbmQgbG91ZGx5IGNvbXBsYWluIGluIHRoZSBsYXR0ZXIgY2FzZS4KKyAqCisgKiBVQklGUyB3cml0ZXMgb25seSB0byBlcmFzZWQgTEVCcywgc28gaXQgd3JpdGVzIG9ubHkgdG8gdGhlIGZsYXNoIHNwYWNlCisgKiBjb250YWluaW5nIG9ubHkgMHhGRnMuIFVCSUZTIGFsc28gYWx3YXlzIHdyaXRlcyBzdHJpY3RseSBmcm9tIHRoZSBiZWdpbm5pbmcKKyAqIG9mIHRoZSBMRUIgdG8gdGhlIGVuZC4gQW5kIFVCSUZTIGFzc3VtZXMgdGhhdCB0aGUgdW5kZXJseWluZyBmbGFzaCBtZWRpYQorICogd3JpdGVzIGluIEBjLT5tYXhfd3JpdGVfc2l6ZSBieXRlcyBhdCBhIHRpbWUuCisgKgorICogSGVuY2UsIGlmIFVCSUZTIGZpbmRzIGEgY29ycnVwdGVkIG5vZGUgYXQgb2Zmc2V0IFgsIGl0IGV4cGVjdHMgb25seSB0aGUgbWluLgorICogSS9PIHVuaXQgY29ycmVzcG9uZGluZyB0byBvZmZzZXQgWCB0byBjb250YWluIGNvcnJ1cHRlZCBkYXRhLCBhbGwgdGhlCisgKiBmb2xsb3dpbmcgbWluLiBJL08gdW5pdHMgaGF2ZSB0byBjb250YWluIGVtcHR5IHNwYWNlIChhbGwgMHhGRnMpLiBJZiB0aGlzIGlzCisgKiBub3QgdHJ1ZSwgdGhlIGNvcnJ1cHRpb24gY2Fubm90IGJlIHRoZSByZXN1bHQgb2YgYSBwb3dlciBjdXQsIGFuZCBVQklGUworICogcmVmdXNlcyB0byBtb3VudC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KQEAgLTM2Miw4ICszNzksOSBAQAogICogQG9mZnM6IG9mZnNldCB0byBjaGVjawogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiBAb2ZmcyB3YXMgaW4gdGhlIGxhc3Qgd3JpdGUgdG8gdGhlIExFQiB3aG9zZSBkYXRhCi0gKiBpcyBpbiBAYnVmLCBvdGhlcndpc2UgJTAgaXMgcmV0dXJuZWQuICBUaGUgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlIGJ5IGNoZWNraW5nCi0gKiBmb3Igc3Vic2VxdWVudCBlbXB0eSBzcGFjZSBzdGFydGluZyBmcm9tIHRoZSBuZXh0IEBjLT5taW5faW9fc2l6ZSBib3VuZGFyeS4KKyAqIGlzIGluIEBidWYsIG90aGVyd2lzZSAlMCBpcyByZXR1cm5lZC4gVGhlIGRldGVybWluYXRpb24gaXMgbWFkZSBieSBjaGVja2luZworICogZm9yIHN1YnNlcXVlbnQgZW1wdHkgc3BhY2Ugc3RhcnRpbmcgZnJvbSB0aGUgbmV4dCBAYy0+bWF4X3dyaXRlX3NpemUKKyAqIGJvdW5kYXJ5LgogICovCiBzdGF0aWMgaW50IGlzX2xhc3Rfd3JpdGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKmJ1ZiwgaW50IG9mZnMpCiB7CkBAIC0zNzEsMTAgKzM4OSwxMCBAQAogCXVpbnQ4X3QgKnA7CiAKIAkvKgotCSAqIFJvdW5kIHVwIHRvIHRoZSBuZXh0IEBjLT5taW5faW9fc2l6ZSBib3VuZGFyeSBpLmUuIEBvZmZzIGlzIGluIHRoZQotCSAqIGxhc3Qgd2J1ZiB3cml0dGVuLiBBZnRlciB0aGF0IHNob3VsZCBiZSBlbXB0eSBzcGFjZS4KKwkgKiBSb3VuZCB1cCB0byB0aGUgbmV4dCBAYy0+bWF4X3dyaXRlX3NpemUgYm91bmRhcnkgaS5lLiBAb2ZmcyBpcyBpbgorCSAqIHRoZSBsYXN0IHdidWYgd3JpdHRlbi4gQWZ0ZXIgdGhhdCBzaG91bGQgYmUgZW1wdHkgc3BhY2UuCiAJICovCi0JZW1wdHlfb2ZmcyA9IEFMSUdOKG9mZnMgKyAxLCBjLT5taW5faW9fc2l6ZSk7CisJZW1wdHlfb2ZmcyA9IEFMSUdOKG9mZnMgKyAxLCBjLT5tYXhfd3JpdGVfc2l6ZSk7CiAJY2hlY2tfbGVuID0gYy0+bGViX3NpemUgLSBlbXB0eV9vZmZzOwogCXAgPSBidWYgKyBlbXB0eV9vZmZzIC0gb2ZmczsKIAlyZXR1cm4gaXNfZW1wdHkocCwgY2hlY2tfbGVuKTsKQEAgLTQyOSw3ICs0NDcsNyBAQAogCWludCBza2lwLCBkbGVuID0gbGUzMl90b19jcHUoY2gtPmxlbik7CiAKIAkvKiBDaGVjayBmb3IgZW1wdHkgc3BhY2UgYWZ0ZXIgdGhlIGNvcnJ1cHQgbm9kZSdzIGNvbW1vbiBoZWFkZXIgKi8KLQlza2lwID0gQUxJR04ob2ZmcyArIFVCSUZTX0NIX1NaLCBjLT5taW5faW9fc2l6ZSkgLSBvZmZzOworCXNraXAgPSBBTElHTihvZmZzICsgVUJJRlNfQ0hfU1osIGMtPm1heF93cml0ZV9zaXplKSAtIG9mZnM7CiAJaWYgKGlzX2VtcHR5KGJ1ZiArIHNraXAsIGxlbiAtIHNraXApKQogCQlyZXR1cm4gMTsKIAkvKgpAQCAtNDQxLDcgKzQ1OSw3IEBACiAJCXJldHVybiAwOwogCX0KIAkvKiBOb3cgd2Uga25vdyB0aGUgY29ycnVwdCBub2RlJ3MgbGVuZ3RoIHdlIGNhbiBza2lwIG92ZXIgaXQgKi8KLQlza2lwID0gQUxJR04ob2ZmcyArIGRsZW4sIGMtPm1pbl9pb19zaXplKSAtIG9mZnM7CisJc2tpcCA9IEFMSUdOKG9mZnMgKyBkbGVuLCBjLT5tYXhfd3JpdGVfc2l6ZSkgLSBvZmZzOwogCS8qIEFmdGVyIHdoaWNoIHRoZXJlIHNob3VsZCBiZSBlbXB0eSBzcGFjZSAqLwogCWlmIChpc19lbXB0eShidWYgKyBza2lwLCBsZW4gLSBza2lwKSkKIAkJcmV0dXJuIDE7CkBAIC02NzEsMTAgKzY4OSwxNCBAQAogCQl9IGVsc2UgewogCQkJaW50IGNvcnJ1cHRpb24gPSBmaXJzdF9ub25fZmYoYnVmLCBsZW4pOwogCisJCQkvKgorCQkJICogU2VlIGhlYWRlciBjb21tZW50IGZvciB0aGlzIGZpbGUgZm9yIG1vcmUKKwkJCSAqIGV4cGxhbmF0aW9ucyBhYm91dCB0aGUgcmVhc29ucyB3ZSBoYXZlIHRoaXMgY2hlY2suCisJCQkgKi8KIAkJCXViaWZzX2VycigiY29ycnVwdCBlbXB0eSBzcGFjZSBMRUIgJWQ6JWQsIGNvcnJ1cHRpb24gIgogCQkJCSAgInN0YXJ0cyBhdCAlZCIsIGxudW0sIG9mZnMsIGNvcnJ1cHRpb24pOwogCQkJLyogTWFrZSBzdXJlIHdlIGR1bXAgaW50ZXJlc3Rpbmcgbm9uLTB4RkYgZGF0YSAqLwotCQkJb2ZmcyA9IGNvcnJ1cHRpb247CisJCQlvZmZzICs9IGNvcnJ1cHRpb247CiAJCQlidWYgKz0gY29ycnVwdGlvbjsKIAkJCWdvdG8gY29ycnVwdGVkOwogCQl9CkBAIC04MzYsMTIgKzg1OCw4IEBACiBzdGF0aWMgaW50IHJlY292ZXJfaGVhZChjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IGxudW0sIGludCBvZmZzLAogCQkJdm9pZCAqc2J1ZikKIHsKLQlpbnQgbGVuLCBlcnI7CisJaW50IGxlbiA9IGMtPm1heF93cml0ZV9zaXplLCBlcnI7CiAKLQlpZiAoYy0+bWluX2lvX3NpemUgPiAxKQotCQlsZW4gPSBjLT5taW5faW9fc2l6ZTsKLQllbHNlCi0JCWxlbiA9IDUxMjsKIAlpZiAob2ZmcyArIGxlbiA+IGMtPmxlYl9zaXplKQogCQlsZW4gPSBjLT5sZWJfc2l6ZSAtIG9mZnM7CiAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3NjYW4uYyBiL2ZzL3ViaWZzL3NjYW4uYwppbmRleCAzZTFlZTU3Li4zNjIxNmI0IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zY2FuLmMKKysrIGIvZnMvdWJpZnMvc2Nhbi5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkJaWYgKCFxdWlldCkKIAkJCXViaWZzX2VycigiZW1wdHkgc3BhY2Ugc3RhcnRzIGF0IG5vbi1hbGlnbmVkIG9mZnNldCAlZCIsCiAJCQkJICBvZmZzKTsKLQkJZ290byBjb3JydXB0ZWQ7OworCQlnb3RvIGNvcnJ1cHRlZDsKIAl9CiAKIAl1Ymlmc19lbmRfc2NhbihjLCBzbGViLCBsbnVtLCBvZmZzKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3N1cGVyLmMgYi9mcy91Ymlmcy9zdXBlci5jCmluZGV4IDZlMTFjMjkuLmU1ZGMxZTEgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3N1cGVyLmMKKysrIGIvZnMvdWJpZnMvc3VwZXIuYwpAQCAtNTEyLDkgKzUxMiwxMiBAQAogCiAJYy0+bGViX2NudCA9IGMtPnZpLnNpemU7CiAJYy0+bGViX3NpemUgPSBjLT52aS51c2FibGVfbGViX3NpemU7CisJYy0+bGViX3N0YXJ0ID0gYy0+ZGkubGViX3N0YXJ0OwogCWMtPmhhbGZfbGViX3NpemUgPSBjLT5sZWJfc2l6ZSAvIDI7CiAJYy0+bWluX2lvX3NpemUgPSBjLT5kaS5taW5faW9fc2l6ZTsKIAljLT5taW5faW9fc2hpZnQgPSBmbHMoYy0+bWluX2lvX3NpemUpIC0gMTsKKwljLT5tYXhfd3JpdGVfc2l6ZSA9IGMtPmRpLm1heF93cml0ZV9zaXplOworCWMtPm1heF93cml0ZV9zaGlmdCA9IGZscyhjLT5tYXhfd3JpdGVfc2l6ZSkgLSAxOwogCiAJaWYgKGMtPmxlYl9zaXplIDwgVUJJRlNfTUlOX0xFQl9TWikgewogCQl1Ymlmc19lcnIoInRvbyBzbWFsbCBMRUJzICglZCBieXRlcyksIG1pbi4gaXMgJWQgYnl0ZXMiLApAQCAtNTM0LDYgKzUzNywxOCBAQAogCX0KIAogCS8qCisJICogTWF4aW11bSB3cml0ZSBzaXplIGhhcyB0byBiZSBncmVhdGVyIG9yIGVxdWl2YWxlbnQgdG8gbWluLiBJL08KKwkgKiBzaXplLCBhbmQgYmUgbXVsdGlwbGUgb2YgbWluLiBJL08gc2l6ZS4KKwkgKi8KKwlpZiAoYy0+bWF4X3dyaXRlX3NpemUgPCBjLT5taW5faW9fc2l6ZSB8fAorCSAgICBjLT5tYXhfd3JpdGVfc2l6ZSAlIGMtPm1pbl9pb19zaXplIHx8CisJICAgICFpc19wb3dlcl9vZl8yKGMtPm1heF93cml0ZV9zaXplKSkgeworCQl1Ymlmc19lcnIoImJhZCB3cml0ZSBidWZmZXIgc2l6ZSAlZCBmb3IgJWQgbWluLiBJL08gdW5pdCIsCisJCQkgIGMtPm1heF93cml0ZV9zaXplLCBjLT5taW5faW9fc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCiAJICogVUJJRlMgYWxpZ25zIGFsbCBub2RlIHRvIDgtYnl0ZSBib3VuZGFyeSwgc28gdG8gbWFrZSBmdW5jdGlvbiBpbgogCSAqIGlvLmMgc2ltcGxlciwgYXNzdW1lIG1pbmltdW0gSS9PIHVuaXQgc2l6ZSB0byBiZSA4IGJ5dGVzIGlmIGl0IGlzCiAJICogbGVzcyB0aGFuIDguCkBAIC01NDEsNiArNTU2LDEwIEBACiAJaWYgKGMtPm1pbl9pb19zaXplIDwgOCkgewogCQljLT5taW5faW9fc2l6ZSA9IDg7CiAJCWMtPm1pbl9pb19zaGlmdCA9IDM7CisJCWlmIChjLT5tYXhfd3JpdGVfc2l6ZSA8IGMtPm1pbl9pb19zaXplKSB7CisJCQljLT5tYXhfd3JpdGVfc2l6ZSA9IGMtPm1pbl9pb19zaXplOworCQkJYy0+bWF4X3dyaXRlX3NoaWZ0ID0gYy0+bWluX2lvX3NoaWZ0OworCQl9CiAJfQogCiAJYy0+cmVmX25vZGVfYWxzeiA9IEFMSUdOKFVCSUZTX1JFRl9OT0RFX1NaLCBjLT5taW5faW9fc2l6ZSk7CkBAIC0xMjAyLDExICsxMjIxLDE0IEBACiAJaWYgKGMtPmJ1bGtfcmVhZCA9PSAxKQogCQlidV9pbml0KGMpOwogCi0JLyoKLQkgKiBXZSBoYXZlIHRvIGNoZWNrIGFsbCBDUkNzLCBldmVuIGZvciBkYXRhIG5vZGVzLCB3aGVuIHdlIG1vdW50IHRoZSBGUwotCSAqIChzcGVjaWZpY2FsbHksIHdoZW4gd2UgYXJlIHJlcGxheWluZykuCi0JICovCi0JYy0+YWx3YXlzX2Noa19jcmMgPSAxOworCWlmICghYy0+cm9fbW91bnQpIHsKKwkJYy0+d3JpdGVfcmVzZXJ2ZV9idWYgPSBrbWFsbG9jKENPTVBSRVNTRURfREFUQV9OT0RFX0JVRl9TWiwKKwkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWMtPndyaXRlX3Jlc2VydmVfYnVmKQorCQkJZ290byBvdXRfZnJlZTsKKwl9CisKKwljLT5tb3VudGluZyA9IDE7CiAKIAllcnIgPSB1Ymlmc19yZWFkX3N1cGVyYmxvY2soYyk7CiAJaWYgKGVycikKQEAgLTEzODIsNyArMTQwNCw3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfaW5mb3M7CiAKLQljLT5hbHdheXNfY2hrX2NyYyA9IDA7CisJYy0+bW91bnRpbmcgPSAwOwogCiAJdWJpZnNfbXNnKCJtb3VudGVkIFVCSSBkZXZpY2UgJWQsIHZvbHVtZSAlZCwgbmFtZSBcIiVzXCIiLAogCQkgIGMtPnZpLnViaV9udW0sIGMtPnZpLnZvbF9pZCwgYy0+dmkubmFtZSk7CkBAIC0xNDAzLDYgKzE0MjUsNyBAQAogCiAJZGJnX21zZygiY29tcGlsZWQgb246ICAgICAgICAgIiBfX0RBVEVfXyAiIGF0ICIgX19USU1FX18pOwogCWRiZ19tc2coIm1pbi4gSS9PIHVuaXQgc2l6ZTogICVkIGJ5dGVzIiwgYy0+bWluX2lvX3NpemUpOworCWRiZ19tc2coIm1heC4gd3JpdGUgc2l6ZTogICAgICVkIGJ5dGVzIiwgYy0+bWF4X3dyaXRlX3NpemUpOwogCWRiZ19tc2coIkxFQiBzaXplOiAgICAgICAgICAgICVkIGJ5dGVzICglZCBLaUIpIiwKIAkJYy0+bGViX3NpemUsIGMtPmxlYl9zaXplID4+IDEwKTsKIAlkYmdfbXNnKCJkYXRhIGpvdXJuYWwgaGVhZHM6ICAlZCIsCkBAIC0xNDMyLDkgKzE0NTUsOSBAQAogCQlVQklGU19UUlVOX05PREVfU1osIFVCSUZTX1NCX05PREVfU1osIFVCSUZTX01TVF9OT0RFX1NaKTsKIAlkYmdfbXNnKCJub2RlIHNpemVzOiAgICAgICAgICByZWYgJXp1LCBjbXQuIHN0YXJ0ICV6dSwgb3JwaCAlenUiLAogCQlVQklGU19SRUZfTk9ERV9TWiwgVUJJRlNfQ1NfTk9ERV9TWiwgVUJJRlNfT1JQSF9OT0RFX1NaKTsKLQlkYmdfbXNnKCJtYXguIG5vZGUgc2l6ZXM6ICAgICBkYXRhICV6dSwgaW5vZGUgJXp1IGRlbnRyeSAlenUiLAorCWRiZ19tc2coIm1heC4gbm9kZSBzaXplczogICAgIGRhdGEgJXp1LCBpbm9kZSAlenUgZGVudHJ5ICV6dSwgaWR4ICVkIiwKIAkgICAgICAgIFVCSUZTX01BWF9EQVRBX05PREVfU1osIFVCSUZTX01BWF9JTk9fTk9ERV9TWiwKLQkJVUJJRlNfTUFYX0RFTlRfTk9ERV9TWik7CisJCVVCSUZTX01BWF9ERU5UX05PREVfU1osIHViaWZzX2lkeF9ub2RlX3N6KGMsIGMtPmZhbm91dCkpOwogCWRiZ19tc2coImRlYWQgd2F0ZXJtYXJrOiAgICAgICVkIiwgYy0+ZGVhZF93bSk7CiAJZGJnX21zZygiZGFyayB3YXRlcm1hcms6ICAgICAgJWQiLCBjLT5kYXJrX3dtKTsKIAlkYmdfbXNnKCJMRUIgb3ZlcmhlYWQ6ICAgICAgICAlZCIsIGMtPmxlYl9vdmVyaGVhZCk7CkBAIC0xNDc0LDYgKzE0OTcsNyBAQAogb3V0X2NidWY6CiAJa2ZyZWUoYy0+Y2J1Zik7CiBvdXRfZnJlZToKKwlrZnJlZShjLT53cml0ZV9yZXNlcnZlX2J1Zik7CiAJa2ZyZWUoYy0+YnUuYnVmKTsKIAl2ZnJlZShjLT5pbGViX2J1Zik7CiAJdmZyZWUoYy0+c2J1Zik7CkBAIC0xNTEyLDYgKzE1MzYsNyBAQAogCWtmcmVlKGMtPmNidWYpOwogCWtmcmVlKGMtPnJjdnJkX21zdF9ub2RlKTsKIAlrZnJlZShjLT5tc3Rfbm9kZSk7CisJa2ZyZWUoYy0+d3JpdGVfcmVzZXJ2ZV9idWYpOwogCWtmcmVlKGMtPmJ1LmJ1Zik7CiAJdmZyZWUoYy0+aWxlYl9idWYpOwogCXZmcmVlKGMtPnNidWYpOwpAQCAtMTU0Myw3ICsxNTY4LDYgQEAKIAltdXRleF9sb2NrKCZjLT51bW91bnRfbXV0ZXgpOwogCWRiZ19zYXZlX3NwYWNlX2luZm8oYyk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDE7Ci0JYy0+YWx3YXlzX2Noa19jcmMgPSAxOwogCiAJZXJyID0gY2hlY2tfZnJlZV9zcGFjZShjKTsKIAlpZiAoZXJyKQpAQCAtMTU5OCw2ICsxNjIyLDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWMtPndyaXRlX3Jlc2VydmVfYnVmID0ga21hbGxvYyhDT01QUkVTU0VEX0RBVEFfTk9ERV9CVUZfU1osIEdGUF9LRVJORUwpOworCWlmICghYy0+d3JpdGVfcmVzZXJ2ZV9idWYpCisJCWdvdG8gb3V0OworCiAJZXJyID0gdWJpZnNfbHB0X2luaXQoYywgMCwgMSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC0xNjUwLDcgKzE2NzgsNiBAQAogCWRiZ19nZW4oInJlLW1vdW50ZWQgcmVhZC13cml0ZSIpOwogCWMtPnJvX21vdW50ID0gMDsKIAljLT5yZW1vdW50aW5nX3J3ID0gMDsKLQljLT5hbHdheXNfY2hrX2NyYyA9IDA7CiAJZXJyID0gZGJnX2NoZWNrX3NwYWNlX2luZm8oYyk7CiAJbXV0ZXhfdW5sb2NrKCZjLT51bW91bnRfbXV0ZXgpOwogCXJldHVybiBlcnI7CkBAIC0xNjYzLDExICsxNjkwLDEyIEBACiAJCWMtPmJndCA9IE5VTEw7CiAJfQogCWZyZWVfd2J1ZnMoYyk7CisJa2ZyZWUoYy0+d3JpdGVfcmVzZXJ2ZV9idWYpOworCWMtPndyaXRlX3Jlc2VydmVfYnVmID0gTlVMTDsKIAl2ZnJlZShjLT5pbGViX2J1Zik7CiAJYy0+aWxlYl9idWYgPSBOVUxMOwogCXViaWZzX2xwdF9mcmVlKGMsIDEpOwogCWMtPnJlbW91bnRpbmdfcncgPSAwOwotCWMtPmFsd2F5c19jaGtfY3JjID0gMDsKIAltdXRleF91bmxvY2soJmMtPnVtb3VudF9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE3MDcsNiArMTczNSw4IEBACiAJZnJlZV93YnVmcyhjKTsKIAl2ZnJlZShjLT5vcnBoX2J1Zik7CiAJYy0+b3JwaF9idWYgPSBOVUxMOworCWtmcmVlKGMtPndyaXRlX3Jlc2VydmVfYnVmKTsKKwljLT53cml0ZV9yZXNlcnZlX2J1ZiA9IE5VTEw7CiAJdmZyZWUoYy0+aWxlYl9idWYpOwogCWMtPmlsZWJfYnVmID0gTlVMTDsKIAl1Ymlmc19scHRfZnJlZShjLCAxKTsKQEAgLTE5MzcsNiArMTk2Nyw3IEBACiAJbXV0ZXhfaW5pdCgmYy0+bXN0X211dGV4KTsKIAltdXRleF9pbml0KCZjLT51bW91bnRfbXV0ZXgpOwogCW11dGV4X2luaXQoJmMtPmJ1X211dGV4KTsKKwltdXRleF9pbml0KCZjLT53cml0ZV9yZXNlcnZlX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjLT5jbXRfd3EpOwogCWMtPmJ1ZHMgPSBSQl9ST09UOwogCWMtPm9sZF9pZHggPSBSQl9ST09UOwpAQCAtMTk1NCw2ICsxOTg1LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmYy0+b2xkX2J1ZHMpOwogCUlOSVRfTElTVF9IRUFEKCZjLT5vcnBoX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZjLT5vcnBoX25ldyk7CisJYy0+bm9fY2hrX2RhdGFfY3JjID0gMTsKIAogCWMtPnZmc19zYiA9IHNiOwogCWMtPmhpZ2hlc3RfaW51bSA9IFVCSUZTX0ZJUlNUX0lOTzsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3RuYy5jIGIvZnMvdWJpZnMvdG5jLmMKaW5kZXggYWQ5Y2YwMS4uZGU0ODU5NyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvdG5jLmMKKysrIGIvZnMvdWJpZnMvdG5jLmMKQEAgLTQ0Nyw4ICs0NDcsMTEgQEAKICAqCiAgKiBOb3RlLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIENSQyBvZiBkYXRhIG5vZGVzIGlmIEBjLT5ub19jaGtfZGF0YV9jcmMKICAqIGlzIHRydWUgKGl0IGlzIGNvbnRyb2xsZWQgYnkgY29ycmVzcG9uZGluZyBtb3VudCBvcHRpb24pLiBIb3dldmVyLCBpZgotICogQGMtPmFsd2F5c19jaGtfY3JjIGlzIHRydWUsIEBjLT5ub19jaGtfZGF0YV9jcmMgaXMgaWdub3JlZCBhbmQgQ1JDIGlzIGFsd2F5cwotICogY2hlY2tlZC4KKyAqIEBjLT5tb3VudGluZyBvciBAYy0+cmVtb3VudGluZ19ydyBpcyB0cnVlICh3ZSBhcmUgbW91bnRpbmcgb3IgcmUtbW91bnRpbmcgdG8KKyAqIFIvVyBtb2RlKSwgQGMtPm5vX2Noa19kYXRhX2NyYyBpcyBpZ25vcmVkIGFuZCBDUkMgaXMgY2hlY2tlZC4gVGhpcyBpcworICogYmVjYXVzZSBkdXJpbmcgbW91bnRpbmcgb3IgcmUtbW91bnRpbmcgZnJvbSBSL08gbW9kZSB0byBSL1cgbW9kZSB3ZSBtYXkgcmVhZAorICogam91cm5hbCBub2RlcyAod2hlbiByZXBseWluZyB0aGUgam91cm5hbCBvciBkb2luZyB0aGUgcmVjb3ZlcnkpIGFuZCB0aGUKKyAqIGpvdXJuYWwgbm9kZXMgbWF5IHBvdGVudGlhbGx5IGJlIGNvcnJ1cHRlZCwgc28gY2hlY2tpbmcgaXMgcmVxdWlyZWQuCiAgKi8KIHN0YXRpYyBpbnQgdHJ5X3JlYWRfbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqYnVmLCBpbnQgdHlwZSwKIAkJCSBpbnQgbGVuLCBpbnQgbG51bSwgaW50IG9mZnMpCkBAIC00NzYsNyArNDc5LDggQEAKIAlpZiAobm9kZV9sZW4gIT0gbGVuKQogCQlyZXR1cm4gMDsKIAotCWlmICh0eXBlID09IFVCSUZTX0RBVEFfTk9ERSAmJiAhYy0+YWx3YXlzX2Noa19jcmMgJiYgYy0+bm9fY2hrX2RhdGFfY3JjKQorCWlmICh0eXBlID09IFVCSUZTX0RBVEFfTk9ERSAmJiBjLT5ub19jaGtfZGF0YV9jcmMgJiYgIWMtPm1vdW50aW5nICYmCisJICAgICFjLT5yZW1vdW50aW5nX3J3KQogCQlyZXR1cm4gMTsKIAogCWNyYyA9IGNyYzMyKFVCSUZTX0NSQzMyX0lOSVQsIGJ1ZiArIDgsIG5vZGVfbGVuIC0gOCk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy91Ymlmcy5oIGIvZnMvdWJpZnMvdWJpZnMuaAppbmRleCAzODFkNmIyLi44YzQwYWQzIDEwMDY0NAotLS0gYS9mcy91Ymlmcy91Ymlmcy5oCisrKyBiL2ZzL3ViaWZzL3ViaWZzLmgKQEAgLTE1MSw2ICsxNTEsMTIgQEAKICAqLwogI2RlZmluZSBXT1JTVF9DT01QUl9GQUNUT1IgMgogCisvKgorICogSG93IG11Y2ggbWVtb3J5IGlzIG5lZWRlZCBmb3IgYSBidWZmZXIgd2hlcmUgd2UgY29tcmVzcyBhIGRhdGEgbm9kZS4KKyAqLworI2RlZmluZSBDT01QUkVTU0VEX0RBVEFfTk9ERV9CVUZfU1ogXAorCShVQklGU19EQVRBX05PREVfU1ogKyBVQklGU19CTE9DS19TSVpFICogV09SU1RfQ09NUFJfRkFDVE9SKQorCiAvKiBNYXhpbXVtIGV4cGVjdGVkIHRyZWUgaGVpZ2h0IGZvciB1c2UgYnkgYm90dG9tX3VwX2J1ZiAqLwogI2RlZmluZSBCT1RUT01fVVBfSEVJR0hUIDY0CiAKQEAgLTY0Niw2ICs2NTIsNyBAQAogICogQG9mZnM6IHdyaXRlLWJ1ZmZlciBvZmZzZXQgaW4gdGhpcyBsb2dpY2FsIGVyYXNlYmxvY2sKICAqIEBhdmFpbDogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgd3JpdGUtYnVmZmVyCiAgKiBAdXNlZDogIG51bWJlciBvZiB1c2VkIGJ5dGVzIGluIHRoZSB3cml0ZS1idWZmZXIKKyAqIEBzaXplOiB3cml0ZS1idWZmZXIgc2l6ZSAoaW4gW0BjLT5taW5faW9fc2l6ZSwgQGMtPm1heF93cml0ZV9zaXplXSByYW5nZSkKICAqIEBkdHlwZTogdHlwZSBvZiBkYXRhIHN0b3JlZCBpbiB0aGlzIExFQiAoJVVCSV9MT05HVEVSTSwgJVVCSV9TSE9SVFRFUk0sCiAgKiAlVUJJX1VOS05PV04pCiAgKiBAamhlYWQ6IGpvdXJuYWwgaGVhZCB0aGUgbXV0ZXggYmVsb25ncyB0byAobm90ZSwgbmVlZGVkIG9ubHkgdG8gc2h1dCBsb2NrZGVwCkBAIC02ODAsNiArNjg3LDcgQEAKIAlpbnQgb2ZmczsKIAlpbnQgYXZhaWw7CiAJaW50IHVzZWQ7CisJaW50IHNpemU7CiAJaW50IGR0eXBlOwogCWludCBqaGVhZDsKIAlpbnQgKCpzeW5jX2NhbGxiYWNrKShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IGxudW0sIGludCBmcmVlLCBpbnQgcGFkKTsKQEAgLTEwMDMsNiArMTAxMSwxMSBAQAogICogQGJ1X211dGV4OiBwcm90ZWN0cyB0aGUgcHJlLWFsbG9jYXRlZCBidWxrLXJlYWQgYnVmZmVyIGFuZCBAYy0+YnUKICAqIEBidTogcHJlLWFsbG9jYXRlZCBidWxrLXJlYWQgaW5mb3JtYXRpb24KICAqCisgKiBAd3JpdGVfcmVzZXJ2ZV9tdXRleDogcHJvdGVjdHMgQHdyaXRlX3Jlc2VydmVfYnVmCisgKiBAd3JpdGVfcmVzZXJ2ZV9idWY6IG9uIHRoZSB3cml0ZSBwYXRoIHdlIGFsbG9jYXRlIG1lbW9yeSwgd2hpY2ggbWlnaHQKKyAqICAgICAgICAgICAgICAgICAgICAgc29tZXRpbWVzIGJlIHVuYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHdlIHVzZSB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgIHdyaXRlIHJlc2VydmUgYnVmZmVyCisgKgogICogQGxvZ19sZWJzOiBudW1iZXIgb2YgbG9naWNhbCBlcmFzZWJsb2NrcyBpbiB0aGUgbG9nCiAgKiBAbG9nX2J5dGVzOiBsb2cgc2l6ZSBpbiBieXRlcwogICogQGxvZ19sYXN0OiBsYXN0IExFQiBvZiB0aGUgbG9nCkBAIC0xMDI0LDcgKzEwMzcsMTIgQEAKICAqCiAgKiBAbWluX2lvX3NpemU6IG1pbmltYWwgaW5wdXQvb3V0cHV0IHVuaXQgc2l6ZQogICogQG1pbl9pb19zaGlmdDogbnVtYmVyIG9mIGJpdHMgaW4gQG1pbl9pb19zaXplIG1pbnVzIG9uZQorICogQG1heF93cml0ZV9zaXplOiBtYXhpbXVtIGFtb3VudCBvZiBieXRlcyB0aGUgdW5kZXJseWluZyBmbGFzaCBjYW4gd3JpdGUgYXQgYQorICogICAgICAgICAgICAgICAgICB0aW1lIChNVEQgd3JpdGUgYnVmZmVyIHNpemUpCisgKiBAbWF4X3dyaXRlX3NoaWZ0OiBudW1iZXIgb2YgYml0cyBpbiBAbWF4X3dyaXRlX3NpemUgbWludXMgb25lCiAgKiBAbGViX3NpemU6IGxvZ2ljYWwgZXJhc2VibG9jayBzaXplIGluIGJ5dGVzCisgKiBAbGViX3N0YXJ0OiBzdGFydGluZyBvZmZzZXQgb2YgbG9naWNhbCBlcmFzZWJsb2NrcyB3aXRoaW4gcGh5c2ljYWwKKyAqICAgICAgICAgICAgIGVyYXNlYmxvY2tzCiAgKiBAaGFsZl9sZWJfc2l6ZTogaGFsZiBMRUIgc2l6ZQogICogQGlkeF9sZWJfc2l6ZTogaG93IG1hbnkgYnl0ZXMgb2YgYW4gTEVCIGFyZSBlZmZlY3RpdmVseSBhdmFpbGFibGUgd2hlbiBpdCBpcwogICogICAgICAgICAgICAgICAgdXNlZCB0byBzdG9yZSBpbmRleGluZyBub2RlcyAoQGxlYl9zaXplIC0gQG1heF9pZHhfbm9kZV9zeikKQEAgLTExNjYsMjIgKzExODQsMjEgQEAKICAqIEBycF91aWQ6IHJlc2VydmVkIHBvb2wgdXNlciBJRAogICogQHJwX2dpZDogcmVzZXJ2ZWQgcG9vbCBncm91cCBJRAogICoKLSAqIEBlbXB0eTogaWYgdGhlIFVCSSBkZXZpY2UgaXMgZW1wdHkKKyAqIEBlbXB0eTogJTEgaWYgdGhlIFVCSSBkZXZpY2UgaXMgZW1wdHkKKyAqIEBuZWVkX3JlY292ZXJ5OiAlMSBpZiB0aGUgZmlsZS1zeXN0ZW0gbmVlZHMgcmVjb3ZlcnkKKyAqIEByZXBsYXlpbmc6ICUxIGR1cmluZyBqb3VybmFsIHJlcGxheQorICogQG1vdW50aW5nOiAlMSB3aGlsZSBtb3VudGluZworICogQHJlbW91bnRpbmdfcnc6ICUxIHdoaWxlIHJlLW1vdW50aW5nIGZyb20gUi9PIG1vZGUgdG8gUi9XIG1vZGUKICAqIEByZXBsYXlfdHJlZTogdGVtcG9yYXJ5IHRyZWUgdXNlZCBkdXJpbmcgam91cm5hbCByZXBsYXkKICAqIEByZXBsYXlfbGlzdDogdGVtcG9yYXJ5IGxpc3QgdXNlZCBkdXJpbmcgam91cm5hbCByZXBsYXkKICAqIEByZXBsYXlfYnVkczogbGlzdCBvZiBidWRzIHRvIHJlcGxheQogICogQGNzX3NxbnVtOiBzZXF1ZW5jZSBudW1iZXIgb2YgZmlyc3Qgbm9kZSBpbiB0aGUgbG9nIChjb21taXQgc3RhcnQgbm9kZSkKICAqIEByZXBsYXlfc3FudW06IHNlcXVlbmNlIG51bWJlciBvZiBub2RlIGN1cnJlbnRseSBiZWluZyByZXBsYXllZAotICogQG5lZWRfcmVjb3Zlcnk6IGZpbGUtc3lzdGVtIG5lZWRzIHJlY292ZXJ5Ci0gKiBAcmVwbGF5aW5nOiBzZXQgdG8gJTEgZHVyaW5nIGpvdXJuYWwgcmVwbGF5CiAgKiBAdW5jbGVhbl9sZWJfbGlzdDogTEVCcyB0byByZWNvdmVyIHdoZW4gcmUtbW91bnRpbmcgUi9PIG1vdW50ZWQgRlMgdG8gUi9XCiAgKiAgICAgICAgICAgICAgICAgICAgbW9kZQogICogQHJjdnJkX21zdF9ub2RlOiByZWNvdmVyZWQgbWFzdGVyIG5vZGUgdG8gd3JpdGUgd2hlbiByZS1tb3VudGluZyBSL08gbW91bnRlZAogICogICAgICAgICAgICAgICAgICBGUyB0byBSL1cgbW9kZQogICogQHNpemVfdHJlZTogaW5vZGUgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVjb3ZlcnkKLSAqIEByZW1vdW50aW5nX3J3OiBzZXQgd2hpbGUgcmUtbW91bnRpbmcgZnJvbSBSL08gbW9kZSB0byBSL1cgbW9kZQotICogQGFsd2F5c19jaGtfY3JjOiBhbHdheXMgY2hlY2sgQ1JDcyAod2hpbGUgbW91bnRpbmcgYW5kIHJlbW91bnRpbmcgdG8gUi9XCi0gKiAgICAgICAgICAgICAgICAgIG1vZGUpCiAgKiBAbW91bnRfb3B0czogVUJJRlMtc3BlY2lmaWMgbW91bnQgb3B0aW9ucwogICoKICAqIEBkYmc6IGRlYnVnZ2luZy1yZWxhdGVkIGluZm9ybWF0aW9uCkBAIC0xMjUwLDYgKzEyNjcsOSBAQAogCXN0cnVjdCBtdXRleCBidV9tdXRleDsKIAlzdHJ1Y3QgYnVfaW5mbyBidTsKIAorCXN0cnVjdCBtdXRleCB3cml0ZV9yZXNlcnZlX211dGV4OworCXZvaWQgKndyaXRlX3Jlc2VydmVfYnVmOworCiAJaW50IGxvZ19sZWJzOwogCWxvbmcgbG9uZyBsb2dfYnl0ZXM7CiAJaW50IGxvZ19sYXN0OwpAQCAtMTI3MSw3ICsxMjkxLDEwIEBACiAKIAlpbnQgbWluX2lvX3NpemU7CiAJaW50IG1pbl9pb19zaGlmdDsKKwlpbnQgbWF4X3dyaXRlX3NpemU7CisJaW50IG1heF93cml0ZV9zaGlmdDsKIAlpbnQgbGViX3NpemU7CisJaW50IGxlYl9zdGFydDsKIAlpbnQgaGFsZl9sZWJfc2l6ZTsKIAlpbnQgaWR4X2xlYl9zaXplOwogCWludCBsZWJfY250OwpAQCAtMTQwMiwxOSArMTQyNSwxOSBAQAogCWdpZF90IHJwX2dpZDsKIAogCS8qIFRoZSBiZWxvdyBmaWVsZHMgYXJlIHVzZWQgb25seSBkdXJpbmcgbW91bnRpbmcgYW5kIHJlLW1vdW50aW5nICovCi0JaW50IGVtcHR5OworCXVuc2lnbmVkIGludCBlbXB0eToxOworCXVuc2lnbmVkIGludCBuZWVkX3JlY292ZXJ5OjE7CisJdW5zaWduZWQgaW50IHJlcGxheWluZzoxOworCXVuc2lnbmVkIGludCBtb3VudGluZzoxOworCXVuc2lnbmVkIGludCByZW1vdW50aW5nX3J3OjE7CiAJc3RydWN0IHJiX3Jvb3QgcmVwbGF5X3RyZWU7CiAJc3RydWN0IGxpc3RfaGVhZCByZXBsYXlfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlcGxheV9idWRzOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBjc19zcW51bTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmVwbGF5X3NxbnVtOwotCWludCBuZWVkX3JlY292ZXJ5OwotCWludCByZXBsYXlpbmc7CiAJc3RydWN0IGxpc3RfaGVhZCB1bmNsZWFuX2xlYl9saXN0OwogCXN0cnVjdCB1Ymlmc19tc3Rfbm9kZSAqcmN2cmRfbXN0X25vZGU7CiAJc3RydWN0IHJiX3Jvb3Qgc2l6ZV90cmVlOwotCWludCByZW1vdW50aW5nX3J3OwotCWludCBhbHdheXNfY2hrX2NyYzsKIAlzdHJ1Y3QgdWJpZnNfbW91bnRfb3B0cyBtb3VudF9vcHRzOwogCiAjaWZkZWYgQ09ORklHX1VCSUZTX0ZTX0RFQlVHCmRpZmYgLS1naXQgYS9mcy91ZGYvYmFsbG9jLmMgYi9mcy91ZGYvYmFsbG9jLmMKaW5kZXggODk5NGRkMC4uOTU1MThhOSAxMDA2NDQKLS0tIGEvZnMvdWRmL2JhbGxvYy5jCisrKyBiL2ZzL3VkZi9iYWxsb2MuYwpAQCAtMjcsMTEgKzI3LDEwIEBACiAjaW5jbHVkZSAidWRmX2kuaCIKICNpbmNsdWRlICJ1ZGZfc2IuaCIKIAotI2RlZmluZSB1ZGZfY2xlYXJfYml0KG5yLCBhZGRyKSBleHQyX2NsZWFyX2JpdChuciwgYWRkcikKLSNkZWZpbmUgdWRmX3NldF9iaXQobnIsIGFkZHIpIGV4dDJfc2V0X2JpdChuciwgYWRkcikKLSNkZWZpbmUgdWRmX3Rlc3RfYml0KG5yLCBhZGRyKSBleHQyX3Rlc3RfYml0KG5yLCBhZGRyKQotI2RlZmluZSB1ZGZfZmluZF9uZXh0X29uZV9iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KSBcCi0JCWV4dDJfZmluZF9uZXh0X2JpdCgodW5zaWduZWQgbG9uZyAqKShhZGRyKSwgc2l6ZSwgb2Zmc2V0KQorI2RlZmluZSB1ZGZfY2xlYXJfYml0CV9fdGVzdF9hbmRfY2xlYXJfYml0X2xlCisjZGVmaW5lIHVkZl9zZXRfYml0CV9fdGVzdF9hbmRfc2V0X2JpdF9sZQorI2RlZmluZSB1ZGZfdGVzdF9iaXQJdGVzdF9iaXRfbGUKKyNkZWZpbmUgdWRmX2ZpbmRfbmV4dF9vbmVfYml0CWZpbmRfbmV4dF9iaXRfbGUKIAogc3RhdGljIGludCByZWFkX2Jsb2NrX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICBzdHJ1Y3QgdWRmX2JpdG1hcCAqYml0bWFwLCB1bnNpZ25lZCBpbnQgYmxvY2ssCmRpZmYgLS1naXQgYS9mcy91ZnMvdXRpbC5oIGIvZnMvdWZzL3V0aWwuaAppbmRleCA5Zjg3NzVjLi45NTQxNzU5IDEwMDY0NAotLS0gYS9mcy91ZnMvdXRpbC5oCisrKyBiL2ZzL3Vmcy91dGlsLmgKQEAgLTQwOCw3ICs0MDgsNyBAQAogCWZvciAoOzspIHsKIAkJY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemUgKyBvZmZzZXQsIHVzcGktPnNfYnBmKTsKIAkJc2l6ZSAtPSBjb3VudCAtIG9mZnNldDsKLQkJcG9zID0gZXh0Ml9maW5kX25leHRfemVyb19iaXQgKHViaC0+YmhbYmFzZV0tPmJfZGF0YSwgY291bnQsIG9mZnNldCk7CisJCXBvcyA9IGZpbmRfbmV4dF96ZXJvX2JpdF9sZSh1YmgtPmJoW2Jhc2VdLT5iX2RhdGEsIGNvdW50LCBvZmZzZXQpOwogCQlpZiAocG9zIDwgY291bnQgfHwgIXNpemUpCiAJCQlicmVhazsKIAkJYmFzZSsrOwpkaWZmIC0tZ2l0IGEvZnMvdXRpbWVzLmMgYi9mcy91dGltZXMuYwppbmRleCAxNzliNTg2Li5iYTY1M2YzIDEwMDY0NAotLS0gYS9mcy91dGltZXMuYworKysgYi9mcy91dGltZXMuYwpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgICAgIGlmIChJU19JTU1VVEFCTEUoaW5vZGUpKQogCQkJZ290byBtbnRfZHJvcF93cml0ZV9hbmRfb3V0OwogCi0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkgeworCQlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKSB7CiAJCQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBtbnRfZHJvcF93cml0ZV9hbmRfb3V0OwpkaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmMKaW5kZXggMDFiYjgxMy4uYTE5YWNkYiAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC01OSw3ICs1OSw3IEBACiAJCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAhU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCXJldHVybiAtRVBFUk07CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmIChpbm9kZS0+aV9tb2RlICYgU19JU1ZUWCkgJiYKLQkJICAgIChtYXNrICYgTUFZX1dSSVRFKSAmJiAhaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJICAgIChtYXNrICYgTUFZX1dSSVRFKSAmJiAhaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlCmluZGV4IGZhY2E0NDkuLjI4NGE3YzggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZQorKysgYi9mcy94ZnMvTWFrZWZpbGUKQEAgLTE2LDE0ICsxNiwxMSBAQAogIyBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICMKIAotRVhUUkFfQ0ZMQUdTICs9CSAtSSQoc3JjKSAtSSQoc3JjKS9saW51eC0yLjYKK2NjZmxhZ3MteSA6PSAtSSQoc3JjKSAtSSQoc3JjKS9saW51eC0yLjYKK2NjZmxhZ3MtJChDT05GSUdfWEZTX0RFQlVHKSArPSAtZwogCiBYRlNfTElOVVggOj0gbGludXgtMi42CiAKLWlmZXEgKCQoQ09ORklHX1hGU19ERUJVRykseSkKLQlFWFRSQV9DRkxBR1MgKz0gLWcKLWVuZGlmCi0KIG9iai0kKENPTkZJR19YRlNfRlMpCQkrPSB4ZnMubwogCiB4ZnMteQkJCQkrPSBsaW51eC0yLjYveGZzX3RyYWNlLm8KQEAgLTEwNSwxMSArMTAyLDEwIEBACiAJCQkJICAgeGZzX2dsb2JhbHMubyBcCiAJCQkJICAgeGZzX2lvY3RsLm8gXAogCQkJCSAgIHhmc19pb3BzLm8gXAorCQkJCSAgIHhmc19tZXNzYWdlLm8gXAogCQkJCSAgIHhmc19zdXBlci5vIFwKIAkJCQkgICB4ZnNfc3luYy5vIFwKIAkJCQkgICB4ZnNfeGF0dHIubykKIAogIyBPYmplY3RzIGluIHN1cHBvcnQvCi14ZnMteQkJCQkrPSAkKGFkZHByZWZpeCBzdXBwb3J0LywgXAotCQkJCSAgIGRlYnVnLm8gXAotCQkJCSAgIHV1aWQubykKK3hmcy15CQkJCSs9IHN1cHBvcnQvdXVpZC5vCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L2ttZW0uYyBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCmluZGV4IDY2NmM5ZGIuLmE5MDdkZTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlICJ0aW1lLmgiCiAjaW5jbHVkZSAia21lbS5oIgorI2luY2x1ZGUgInhmc19tZXNzYWdlLmgiCiAKIC8qCiAgKiBHcmVlZHkgYWxsb2NhdGlvbi4gIE1heSBmYWlsIGFuZCBtYXkgcmV0dXJuIHZtYWxsb2NlZCBtZW1vcnkuCkBAIC01Niw4ICs1Nyw4IEBACiAJCWlmIChwdHIgfHwgKGZsYWdzICYgKEtNX01BWUZBSUx8S01fTk9TTEVFUCkpKQogCQkJcmV0dXJuIHB0cjsKIAkJaWYgKCEoKytyZXRyaWVzICUgMTAwKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiWEZTOiBwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiAiCi0JCQkJCSJkZWFkbG9jayBpbiAlcyAobW9kZToweCV4KVxuIiwKKwkJCXhmc19lcnIoTlVMTCwKKwkJInBvc3NpYmxlIG1lbW9yeSBhbGxvY2F0aW9uIGRlYWRsb2NrIGluICVzIChtb2RlOjB4JXgpIiwKIAkJCQkJX19mdW5jX18sIGxmbGFncyk7CiAJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzUwKTsKIAl9IHdoaWxlICgxKTsKQEAgLTExMiw4ICsxMTMsOCBAQAogCQlpZiAocHRyIHx8IChmbGFncyAmIChLTV9NQVlGQUlMfEtNX05PU0xFRVApKSkKIAkJCXJldHVybiBwdHI7CiAJCWlmICghKCsrcmV0cmllcyAlIDEwMCkpCi0JCQlwcmludGsoS0VSTl9FUlIgIlhGUzogcG9zc2libGUgbWVtb3J5IGFsbG9jYXRpb24gIgotCQkJCQkiZGVhZGxvY2sgaW4gJXMgKG1vZGU6MHgleClcbiIsCisJCQl4ZnNfZXJyKE5VTEwsCisJCSJwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBkZWFkbG9jayBpbiAlcyAobW9kZToweCV4KSIsCiAJCQkJCV9fZnVuY19fLCBsZmxhZ3MpOwogCQljb25nZXN0aW9uX3dhaXQoQkxLX1JXX0FTWU5DLCBIWi81MCk7CiAJfSB3aGlsZSAoMSk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggZWM3YmJiNS4uOGM1Yzg3MiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtODU0LDcgKzg1NCw3IEBACiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQogCQlnb3RvIG91dF9pbnZhbGlkYXRlOwogCi0JeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIGlwLT5pX21vdW50LAorCXhmc19hbGVydChpcC0+aV9tb3VudCwKIAkJInBhZ2UgZGlzY2FyZCBvbiBwYWdlICVwLCBpbm9kZSAweCVsbHgsIG9mZnNldCAlbGx1LiIsCiAJCQlwYWdlLCBpcC0+aV9pbm8sIG9mZnNldCk7CiAKQEAgLTg3Miw3ICs4NzIsNyBAQAogCQlpZiAoZXJyb3IpIHsKIAkJCS8qIHNvbWV0aGluZyBzY3Jld2VkLCBqdXN0IGJhaWwgKi8KIAkJCWlmICghWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpIHsKLQkJCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgaXAtPmlfbW91bnQsCisJCQkJeGZzX2FsZXJ0KGlwLT5pX21vdW50LAogCQkJInBhZ2UgZGlzY2FyZCB1bmFibGUgdG8gcmVtb3ZlIGRlbGFsbG9jIG1hcHBpbmcuIik7CiAJCQl9CiAJCQlicmVhazsKQEAgLTE0MTEsNyArMTQxMSw3IEBACiAJCWlmIChlcnJvcikgewogCQkJLyogc29tZXRoaW5nIHNjcmV3ZWQsIGp1c3QgYmFpbCAqLwogCQkJaWYgKCFYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkgewotCQkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBpcC0+aV9tb3VudCwKKwkJCQl4ZnNfYWxlcnQoaXAtPmlfbW91bnQsCiAJCQkieGZzX3ZtX3dyaXRlX2ZhaWxlZDogdW5hYmxlIHRvIGNsZWFuIHVwIGlubyAlbGxkIiwKIAkJCQkJCWlwLT5pX2lubyk7CiAJCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IGY4M2E0YzguLjVjYjIzMGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC00MDEsOSArNDAxLDggQEAKIAkJCSAqIGhhbmRsZSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlcyB3ZSBjYW4ndCBkbyBtdWNoLgogCQkJICovCiAJCQlpZiAoISgrK3JldHJpZXMgJSAxMDApKQotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiWEZTOiBwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiAiCi0JCQkJCSJkZWFkbG9jayBpbiAlcyAobW9kZToweCV4KVxuIiwKKwkJCQl4ZnNfZXJyKE5VTEwsCisJCSJwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBkZWFkbG9jayBpbiAlcyAobW9kZToweCV4KSIsCiAJCQkJCV9fZnVuY19fLCBnZnBfbWFzayk7CiAKIAkJCVhGU19TVEFUU19JTkMoeGJfcGFnZV9yZXRyaWVzKTsKQEAgLTYxNSw4ICs2MTQsOCBAQAogCWlmICghKGJwLT5iX2ZsYWdzICYgWEJGX01BUFBFRCkpIHsKIAkJZXJyb3IgPSBfeGZzX2J1Zl9tYXBfcGFnZXMoYnAsIGZsYWdzKTsKIAkJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBtYXAgcGFnZXNcbiIsCi0JCQkJCV9fZnVuY19fKTsKKwkJCXhmc193YXJuKHRhcmdldC0+YnRfbW91bnQsCisJCQkJIiVzOiBmYWlsZWQgdG8gbWFwIHBhZ2VzXG4iLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIG5vX2J1ZmZlcjsKIAkJfQogCX0KQEAgLTg1MCw4ICs4NDksOCBAQAogCiAJZXJyb3IgPSBfeGZzX2J1Zl9tYXBfcGFnZXMoYnAsIFhCRl9NQVBQRUQpOwogCWlmICh1bmxpa2VseShlcnJvcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBtYXAgcGFnZXNcbiIsCi0JCQkJX19mdW5jX18pOworCQl4ZnNfd2Fybih0YXJnZXQtPmJ0X21vdW50LAorCQkJIiVzOiBmYWlsZWQgdG8gbWFwIHBhZ2VzXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZmFpbF9mcmVlX21lbTsKIAl9CiAKQEAgLTE2MTcsOCArMTYxNiw4IEBACiAJYnRwLT5idF9zbWFzayA9IHNlY3RvcnNpemUgLSAxOwogCiAJaWYgKHNldF9ibG9ja3NpemUoYnRwLT5idF9iZGV2LCBzZWN0b3JzaXplKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiWEZTOiBDYW5ub3Qgc2V0X2Jsb2Nrc2l6ZSB0byAldSBvbiBkZXZpY2UgJXNcbiIsCisJCXhmc193YXJuKGJ0cC0+YnRfbW91bnQsCisJCQkiQ2Fubm90IHNldF9ibG9ja3NpemUgdG8gJXUgb24gZGV2aWNlICVzXG4iLAogCQkJc2VjdG9yc2l6ZSwgWEZTX0JVRlRBUkdfTkFNRShidHApKTsKIAkJcmV0dXJuIEVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCAwOTY0OTQ5Li4yNDRiZTljIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxtcmxvY2suaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAKLSNpbmNsdWRlIDxzdXBwb3J0L2RlYnVnLmg+CiAjaW5jbHVkZSA8c3VwcG9ydC91dWlkLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KQEAgLTg2LDYgKzg1LDcgQEAKICNpbmNsdWRlIDx4ZnNfYW9wcy5oPgogI2luY2x1ZGUgPHhmc19zdXBlci5oPgogI2luY2x1ZGUgPHhmc19idWYuaD4KKyNpbmNsdWRlIDx4ZnNfbWVzc2FnZS5oPgogCiAvKgogICogRmVhdHVyZSBtYWNyb3MgKGRpc2FibGUvZW5hYmxlKQpAQCAtMjgwLDQgKzI4MCwyNSBAQAogI2RlZmluZSBfX2FyY2hfcGFjawogI2VuZGlmCiAKKyNkZWZpbmUgQVNTRVJUX0FMV0FZUyhleHByKQlcCisJKHVubGlrZWx5KGV4cHIpID8gKHZvaWQpMCA6IGFzc2ZhaWwoI2V4cHIsIF9fRklMRV9fLCBfX0xJTkVfXykpCisKKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgQVNTRVJUKGV4cHIpCSgodm9pZCkwKQorCisjaWZuZGVmIFNUQVRJQworIyBkZWZpbmUgU1RBVElDIHN0YXRpYyBub2lubGluZQorI2VuZGlmCisKKyNlbHNlIC8qIERFQlVHICovCisKKyNkZWZpbmUgQVNTRVJUKGV4cHIpCVwKKwkodW5saWtlbHkoZXhwcikgPyAodm9pZCkwIDogYXNzZmFpbCgjZXhwciwgX19GSUxFX18sIF9fTElORV9fKSkKKworI2lmbmRlZiBTVEFUSUMKKyMgZGVmaW5lIFNUQVRJQyBub2lubGluZQorI2VuZGlmCisKKyNlbmRpZiAvKiBERUJVRyAqLworCiAjZW5kaWYgLyogX19YRlNfTElOVVhfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOGUwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgUmVkIEhhdCwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAieGZzLmgiCisjaW5jbHVkZSAieGZzX2ZzLmgiCisjaW5jbHVkZSAieGZzX3R5cGVzLmgiCisjaW5jbHVkZSAieGZzX2xvZy5oIgorI2luY2x1ZGUgInhmc19pbnVtLmgiCisjaW5jbHVkZSAieGZzX3RyYW5zLmgiCisjaW5jbHVkZSAieGZzX3NiLmgiCisjaW5jbHVkZSAieGZzX2FnLmgiCisjaW5jbHVkZSAieGZzX21vdW50LmgiCisKKy8qCisgKiBYRlMgbG9nZ2luZyBmdW5jdGlvbnMKKyAqLworc3RhdGljIGludAorX194ZnNfcHJpbnRrKAorCWNvbnN0IGNoYXIJCSpsZXZlbCwKKwljb25zdCBzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlzdHJ1Y3QgdmFfZm9ybWF0CSp2YWYpCit7CisJaWYgKG1wICYmIG1wLT5tX2ZzbmFtZSkKKwkJcmV0dXJuIHByaW50aygiJXNYRlMgKCVzKTogJXBWXG4iLCBsZXZlbCwgbXAtPm1fZnNuYW1lLCB2YWYpOworCXJldHVybiBwcmludGsoIiVzWEZTOiAlcFZcbiIsIGxldmVsLCB2YWYpOworfQorCitpbnQgeGZzX3ByaW50aygKKwljb25zdCBjaGFyCQkqbGV2ZWwsCisJY29uc3Qgc3RydWN0IHhmc19tb3VudAkqbXAsCisJY29uc3QgY2hhcgkJKmZtdCwgLi4uKQoreworCXN0cnVjdCB2YV9mb3JtYXQJdmFmOworCXZhX2xpc3QJCQlhcmdzOworCWludAkJCSByOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisKKwlyID0gX194ZnNfcHJpbnRrKGxldmVsLCBtcCwgJnZhZik7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIHI7Cit9CisKKyNkZWZpbmUgZGVmaW5lX3hmc19wcmludGtfbGV2ZWwoZnVuYywga2Vybl9sZXZlbCkJCVwKK2ludCBmdW5jKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikJXAorewkJCQkJCQkJXAorCXN0cnVjdCB2YV9mb3JtYXQJdmFmOwkJCQlcCisJdmFfbGlzdAkJCWFyZ3M7CQkJCVwKKwlpbnQJCQlyOwkJCQlcCisJCQkJCQkJCVwKKwl2YV9zdGFydChhcmdzLCBmbXQpOwkJCQkJXAorCQkJCQkJCQlcCisJdmFmLmZtdCA9IGZtdDsJCQkJCQlcCisJdmFmLnZhID0gJmFyZ3M7CQkJCQkJXAorCQkJCQkJCQlcCisJciA9IF9feGZzX3ByaW50ayhrZXJuX2xldmVsLCBtcCwgJnZhZik7CQkJXAorCXZhX2VuZChhcmdzKTsJCQkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcjsJCQkJCQlcCit9CQkJCQkJCQlcCisKK2RlZmluZV94ZnNfcHJpbnRrX2xldmVsKHhmc19lbWVyZywgS0VSTl9FTUVSRyk7CitkZWZpbmVfeGZzX3ByaW50a19sZXZlbCh4ZnNfYWxlcnQsIEtFUk5fQUxFUlQpOworZGVmaW5lX3hmc19wcmludGtfbGV2ZWwoeGZzX2NyaXQsIEtFUk5fQ1JJVCk7CitkZWZpbmVfeGZzX3ByaW50a19sZXZlbCh4ZnNfZXJyLCBLRVJOX0VSUik7CitkZWZpbmVfeGZzX3ByaW50a19sZXZlbCh4ZnNfd2FybiwgS0VSTl9XQVJOSU5HKTsKK2RlZmluZV94ZnNfcHJpbnRrX2xldmVsKHhmc19ub3RpY2UsIEtFUk5fTk9USUNFKTsKK2RlZmluZV94ZnNfcHJpbnRrX2xldmVsKHhmc19pbmZvLCBLRVJOX0lORk8pOworI2lmZGVmIERFQlVHCitkZWZpbmVfeGZzX3ByaW50a19sZXZlbCh4ZnNfZGVidWcsIEtFUk5fREVCVUcpOworI2VuZGlmCisKK2ludAoreGZzX2FsZXJ0X3RhZygKKwljb25zdCBzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlpbnQJCQlwYW5pY190YWcsCisJY29uc3QgY2hhcgkJKmZtdCwgLi4uKQoreworCXN0cnVjdCB2YV9mb3JtYXQJdmFmOworCXZhX2xpc3QJCQlhcmdzOworCWludAkJCWRvX3BhbmljID0gMDsKKwlpbnQJCQlyOworCisJaWYgKHhmc19wYW5pY19tYXNrICYmICh4ZnNfcGFuaWNfbWFzayAmIHBhbmljX3RhZykpIHsKKwkJeGZzX3ByaW50ayhLRVJOX0FMRVJULCBtcCwKKwkJCSJYRlM6IFRyYW5zZm9ybWluZyBhbiBhbGVydCBpbnRvIGEgQlVHLiIpOworCQlkb19wYW5pYyA9IDE7CisJfQorCisJdmFfc3RhcnQoYXJncywgZm10KTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisKKwlyID0gX194ZnNfcHJpbnRrKEtFUk5fQUxFUlQsIG1wLCAmdmFmKTsKKwl2YV9lbmQoYXJncyk7CisKKwlCVUdfT04oZG9fcGFuaWMpOworCisJcmV0dXJuIHI7Cit9CisKK3ZvaWQKK2Fzc2ZhaWwoY2hhciAqZXhwciwgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisJeGZzX2VtZXJnKE5VTEwsICJBc3NlcnRpb24gZmFpbGVkOiAlcywgZmlsZTogJXMsIGxpbmU6ICVkIiwKKwkJZXhwciwgZmlsZSwgbGluZSk7CisJQlVHKCk7Cit9CisKK3ZvaWQKK3hmc19oZXhfZHVtcCh2b2lkICpwLCBpbnQgbGVuZ3RoKQoreworCXByaW50X2hleF9kdW1wKEtFUk5fQUxFUlQsICIiLCBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgMSwgcCwgbGVuZ3RoLCAxKTsKK30KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdmZmExCi0tLSAvZGV2L251bGwKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX19YRlNfTUVTU0FHRV9ICisjZGVmaW5lIF9fWEZTX01FU1NBR0VfSCAxCisKK3N0cnVjdCB4ZnNfbW91bnQ7CisKK2V4dGVybiBpbnQgeGZzX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKK2V4dGVybiBpbnQgeGZzX2VtZXJnKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCB4ZnNfYWxlcnQoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IHhmc19hbGVydF90YWcoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGludCB0YWcsCisJCQkgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKK2V4dGVybiBpbnQgeGZzX2NyaXQoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IHhmc19lcnIoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IHhmc193YXJuKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCB4ZnNfbm90aWNlKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCB4ZnNfaW5mbyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworI2lmZGVmIERFQlVHCitleHRlcm4gaW50IHhmc19kZWJ1Zyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKyNlbHNlCisjZGVmaW5lIHhmc19kZWJ1ZyhtcCwgZm10LCAuLi4pCSgwKQorI2VuZGlmCisKK2V4dGVybiB2b2lkIGFzc2ZhaWwoY2hhciAqZXhwciwgY2hhciAqZiwgaW50IGwpOworCitleHRlcm4gdm9pZCB4ZnNfaGV4X2R1bXAodm9pZCAqcCwgaW50IGxlbmd0aCk7CisKKyNlbmRpZgkvKiBfX1hGU19NRVNTQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDk3MzE4OTguLjgxOGM0Y2YgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtMTczLDYgKzE3MywxNSBAQAogCV9fdWludDhfdAkJaW9zaXplbG9nID0gMDsKIAogCS8qCisJICogc2V0IHVwIHRoZSBtb3VudCBuYW1lIGZpcnN0IHNvIGFsbCB0aGUgZXJyb3JzIHdpbGwgcmVmZXIgdG8gdGhlCisJICogY29ycmVjdCBkZXZpY2UuCisJICovCisJbXAtPm1fZnNuYW1lID0ga3N0cm5kdXAoc2ItPnNfaWQsIE1BWE5BTUVMRU4sIEdGUF9LRVJORUwpOworCWlmICghbXAtPm1fZnNuYW1lKQorCQlyZXR1cm4gRU5PTUVNOworCW1wLT5tX2ZzbmFtZV9sZW4gPSBzdHJsZW4obXAtPm1fZnNuYW1lKSArIDE7CisKKwkvKgogCSAqIENvcHkgYmluYXJ5IFZGUyBtb3VudCBmbGFncyB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KIAkgKi8KIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCkBAIC0xODksNiArMTk4LDcgQEAKIAltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfQkFSUklFUjsKIAltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfQ09NUEFUX0lPU0laRTsKIAltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfU01BTExfSU5VTVM7CisJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0RFTEFZTE9HOwogCiAJLyoKIAkgKiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbW91bnQgb3B0aW9uIHBhcnNpbmcuCkBAIC0yMDcsMjQgKzIxNywyMSBAQAogCiAJCWlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX0xPR0JVRlMpKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKLQkJCQljbW5fZXJyKENFX1dBUk4sCi0JCQkJCSJYRlM6ICVzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIsCisJCQkJeGZzX3dhcm4obXAsICIlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiLAogCQkJCQl0aGlzX2NoYXIpOwogCQkJCXJldHVybiBFSU5WQUw7CiAJCQl9CiAJCQltcC0+bV9sb2didWZzID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsICZlb3YsIDEwKTsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX0xPR0JTSVpFKSkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7Ci0JCQkJY21uX2VycihDRV9XQVJOLAotCQkJCQkiWEZTOiAlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiLAorCQkJCXhmc193YXJuKG1wLCAiJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwKIAkJCQkJdGhpc19jaGFyKTsKIAkJCQlyZXR1cm4gRUlOVkFMOwogCQkJfQogCQkJbXAtPm1fbG9nYnNpemUgPSBzdWZmaXhfc3RydG91bCh2YWx1ZSwgJmVvdiwgMTApOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfTE9HREVWKSkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7Ci0JCQkJY21uX2VycihDRV9XQVJOLAotCQkJCQkiWEZTOiAlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiLAorCQkJCXhmc193YXJuKG1wLCAiJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwKIAkJCQkJdGhpc19jaGFyKTsKIAkJCQlyZXR1cm4gRUlOVkFMOwogCQkJfQpAQCAtMjMyLDE0ICsyMzksMTIgQEAKIAkJCWlmICghbXAtPm1fbG9nbmFtZSkKIAkJCQlyZXR1cm4gRU5PTUVNOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfTVRQVCkpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCQkiWEZTOiAlcyBvcHRpb24gbm90IGFsbG93ZWQgb24gdGhpcyBzeXN0ZW0iLAorCQkJeGZzX3dhcm4obXAsICIlcyBvcHRpb24gbm90IGFsbG93ZWQgb24gdGhpcyBzeXN0ZW0iLAogCQkJCXRoaXNfY2hhcik7CiAJCQlyZXR1cm4gRUlOVkFMOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfUlRERVYpKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKLQkJCQljbW5fZXJyKENFX1dBUk4sCi0JCQkJCSJYRlM6ICVzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIsCisJCQkJeGZzX3dhcm4obXAsICIlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiLAogCQkJCQl0aGlzX2NoYXIpOwogCQkJCXJldHVybiBFSU5WQUw7CiAJCQl9CkBAIC0yNDgsOCArMjUzLDcgQEAKIAkJCQlyZXR1cm4gRU5PTUVNOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfQklPU0laRSkpIHsKIAkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgewotCQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCQkJIlhGUzogJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwKKwkJCQl4ZnNfd2FybihtcCwgIiVzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIsCiAJCQkJCXRoaXNfY2hhcik7CiAJCQkJcmV0dXJuIEVJTlZBTDsKIAkJCX0KQEAgLTI1Nyw4ICsyNjEsNyBAQAogCQkJaW9zaXplbG9nID0gZmZzKGlvc2l6ZSkgLSAxOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfQUxMT0NTSVpFKSkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7Ci0JCQkJY21uX2VycihDRV9XQVJOLAotCQkJCQkiWEZTOiAlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiLAorCQkJCXhmc193YXJuKG1wLCAiJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwKIAkJCQkJdGhpc19jaGFyKTsKIAkJCQlyZXR1cm4gRUlOVkFMOwogCQkJfQpAQCAtMjgwLDE2ICsyODMsMTQgQEAKIAkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9TV0FMTE9DOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfU1VOSVQpKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKLQkJCQljbW5fZXJyKENFX1dBUk4sCi0JCQkJCSJYRlM6ICVzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIsCisJCQkJeGZzX3dhcm4obXAsICIlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiLAogCQkJCQl0aGlzX2NoYXIpOwogCQkJCXJldHVybiBFSU5WQUw7CiAJCQl9CiAJCQlkc3VuaXQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgJmVvdiwgMTApOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfU1dJRFRIKSkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7Ci0JCQkJY21uX2VycihDRV9XQVJOLAotCQkJCQkiWEZTOiAlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiLAorCQkJCXhmc193YXJuKG1wLCAiJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwKIAkJCQkJdGhpc19jaGFyKTsKIAkJCQlyZXR1cm4gRUlOVkFMOwogCQkJfQpAQCAtMjk3LDggKzI5OCw3IEBACiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF82NEJJVElOT0RFKSkgewogCQkJbXAtPm1fZmxhZ3MgJj0gflhGU19NT1VOVF9TTUFMTF9JTlVNUzsKICNpZiAhWEZTX0JJR19JTlVNUwotCQkJY21uX2VycihDRV9XQVJOLAotCQkJCSJYRlM6ICVzIG9wdGlvbiBub3QgYWxsb3dlZCBvbiB0aGlzIHN5c3RlbSIsCisJCQl4ZnNfd2FybihtcCwgIiVzIG9wdGlvbiBub3QgYWxsb3dlZCBvbiB0aGlzIHN5c3RlbSIsCiAJCQkJdGhpc19jaGFyKTsKIAkJCXJldHVybiBFSU5WQUw7CiAjZW5kaWYKQEAgLTM1NiwyMCArMzU2LDE5IEBACiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT0RFTEFZTE9HKSkgewogCQkJbXAtPm1fZmxhZ3MgJj0gflhGU19NT1VOVF9ERUxBWUxPRzsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgImloYXNoc2l6ZSIpKSB7Ci0JCQljbW5fZXJyKENFX1dBUk4sCi0JIlhGUzogaWhhc2hzaXplIG5vIGxvbmdlciB1c2VkLCBvcHRpb24gaXMgZGVwcmVjYXRlZC4iKTsKKwkJCXhmc193YXJuKG1wLAorCSJpaGFzaHNpemUgbm8gbG9uZ2VyIHVzZWQsIG9wdGlvbiBpcyBkZXByZWNhdGVkLiIpOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCAib3N5bmNpc2RzeW5jIikpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkiWEZTOiBvc3luY2lzZHN5bmMgaGFzIG5vIGVmZmVjdCwgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIik7CisJCQl4ZnNfd2FybihtcCwKKwkib3N5bmNpc2RzeW5jIGhhcyBubyBlZmZlY3QsIG9wdGlvbiBpcyBkZXByZWNhdGVkLiIpOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCAib3N5bmNpc29zeW5jIikpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkiWEZTOiBvc3luY2lzb3N5bmMgaGFzIG5vIGVmZmVjdCwgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIik7CisJCQl4ZnNfd2FybihtcCwKKwkib3N5bmNpc29zeW5jIGhhcyBubyBlZmZlY3QsIG9wdGlvbiBpcyBkZXByZWNhdGVkLiIpOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCAiaXJpeHNnaWQiKSkgewotCQkJY21uX2VycihDRV9XQVJOLAotCSJYRlM6IGlyaXhzZ2lkIGlzIG5vdyBhIHN5c2N0bCgyKSB2YXJpYWJsZSwgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIik7CisJCQl4ZnNfd2FybihtcCwKKwkiaXJpeHNnaWQgaXMgbm93IGEgc3lzY3RsKDIpIHZhcmlhYmxlLCBvcHRpb24gaXMgZGVwcmVjYXRlZC4iKTsKIAkJfSBlbHNlIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCQkiWEZTOiB1bmtub3duIG1vdW50IG9wdGlvbiBbJXNdLiIsIHRoaXNfY2hhcik7CisJCQl4ZnNfd2FybihtcCwgInVua25vd24gbW91bnQgb3B0aW9uIFslc10uIiwgdGhpc19jaGFyKTsKIAkJCXJldHVybiBFSU5WQUw7CiAJCX0KIAl9CkBAIC0zNzksNDAgKzM3OCwzNyBAQAogCSAqLwogCWlmICgobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9SRUNPVkVSWSkgJiYKIAkgICAgIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbm8tcmVjb3ZlcnkgbW91bnRzIG11c3QgYmUgcmVhZC1vbmx5LiIpOworCQl4ZnNfd2FybihtcCwgIm5vLXJlY292ZXJ5IG1vdW50cyBtdXN0IGJlIHJlYWQtb25seS4iKTsKIAkJcmV0dXJuIEVJTlZBTDsKIAl9CiAKIAlpZiAoKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX05PQUxJR04pICYmIChkc3VuaXQgfHwgZHN3aWR0aCkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCSJYRlM6IHN1bml0IGFuZCBzd2lkdGggb3B0aW9ucyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbm9hbGlnbiBvcHRpb24iKTsKKwkJeGZzX3dhcm4obXAsCisJInN1bml0IGFuZCBzd2lkdGggb3B0aW9ucyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbm9hbGlnbiBvcHRpb24iKTsKIAkJcmV0dXJuIEVJTlZBTDsKIAl9CiAKICNpZm5kZWYgQ09ORklHX1hGU19RVU9UQQogCWlmIChYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogcXVvdGEgc3VwcG9ydCBub3QgYXZhaWxhYmxlIGluIHRoaXMga2VybmVsLiIpOworCQl4ZnNfd2FybihtcCwgInF1b3RhIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGtlcm5lbC4iKTsKIAkJcmV0dXJuIEVJTlZBTDsKIAl9CiAjZW5kaWYKIAogCWlmICgobXAtPm1fcWZsYWdzICYgKFhGU19HUVVPVEFfQUNDVCB8IFhGU19HUVVPVEFfQUNUSVZFKSkgJiYKIAkgICAgKG1wLT5tX3FmbGFncyAmIChYRlNfUFFVT1RBX0FDQ1QgfCBYRlNfUFFVT1RBX0FDVElWRSkpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJYRlM6IGNhbm5vdCBtb3VudCB3aXRoIGJvdGggcHJvamVjdCBhbmQgZ3JvdXAgcXVvdGEiKTsKKwkJeGZzX3dhcm4obXAsICJjYW5ub3QgbW91bnQgd2l0aCBib3RoIHByb2plY3QgYW5kIGdyb3VwIHF1b3RhIik7CiAJCXJldHVybiBFSU5WQUw7CiAJfQogCiAJaWYgKChkc3VuaXQgJiYgIWRzd2lkdGgpIHx8ICghZHN1bml0ICYmIGRzd2lkdGgpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJYRlM6IHN1bml0IGFuZCBzd2lkdGggbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIiKTsKKwkJeGZzX3dhcm4obXAsICJzdW5pdCBhbmQgc3dpZHRoIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIik7CiAJCXJldHVybiBFSU5WQUw7CiAJfQogCiAJaWYgKGRzdW5pdCAmJiAoZHN3aWR0aCAlIGRzdW5pdCAhPSAwKSkgewotCQljbW5fZXJyKENFX1dBUk4sCi0JIlhGUzogc3RyaXBlIHdpZHRoICglZCkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBzdHJpcGUgdW5pdCAoJWQpIiwKKwkJeGZzX3dhcm4obXAsCisJInN0cmlwZSB3aWR0aCAoJWQpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgc3RyaXBlIHVuaXQgKCVkKSIsCiAJCQlkc3dpZHRoLCBkc3VuaXQpOwogCQlyZXR1cm4gRUlOVkFMOwogCX0KQEAgLTQzOCw4ICs0MzQsNyBAQAogCSAgICBtcC0+bV9sb2didWZzICE9IDAgJiYKIAkgICAgKG1wLT5tX2xvZ2J1ZnMgPCBYTE9HX01JTl9JQ0xPR1MgfHwKIAkgICAgIG1wLT5tX2xvZ2J1ZnMgPiBYTE9HX01BWF9JQ0xPR1MpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJYRlM6IGludmFsaWQgbG9nYnVmcyB2YWx1ZTogJWQgW25vdCAlZC0lZF0iLAorCQl4ZnNfd2FybihtcCwgImludmFsaWQgbG9nYnVmcyB2YWx1ZTogJWQgW25vdCAlZC0lZF0iLAogCQkJbXAtPm1fbG9nYnVmcywgWExPR19NSU5fSUNMT0dTLCBYTE9HX01BWF9JQ0xPR1MpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQpAQCAtNDQ4LDIyICs0NDMsMTYgQEAKIAkgICAgKG1wLT5tX2xvZ2JzaXplIDwgWExPR19NSU5fUkVDT1JEX0JTSVpFIHx8CiAJICAgICBtcC0+bV9sb2dic2l6ZSA+IFhMT0dfTUFYX1JFQ09SRF9CU0laRSB8fAogCSAgICAgIWlzX3Bvd2VyX29mXzIobXAtPm1fbG9nYnNpemUpKSkgewotCQljbW5fZXJyKENFX1dBUk4sCi0JIlhGUzogaW52YWxpZCBsb2didWZzaXplOiAlZCBbbm90IDE2aywzMmssNjRrLDEyOGsgb3IgMjU2a10iLAorCQl4ZnNfd2FybihtcCwKKwkJCSJpbnZhbGlkIGxvZ2J1ZnNpemU6ICVkIFtub3QgMTZrLDMyayw2NGssMTI4ayBvciAyNTZrXSIsCiAJCQltcC0+bV9sb2dic2l6ZSk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9CiAKLQltcC0+bV9mc25hbWUgPSBrc3RybmR1cChzYi0+c19pZCwgTUFYTkFNRUxFTiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtcC0+bV9mc25hbWUpCi0JCXJldHVybiBFTk9NRU07Ci0JbXAtPm1fZnNuYW1lX2xlbiA9IHN0cmxlbihtcC0+bV9mc25hbWUpICsgMTsKLQogCWlmIChpb3NpemVsb2cpIHsKIAkJaWYgKGlvc2l6ZWxvZyA+IFhGU19NQVhfSU9fTE9HIHx8CiAJCSAgICBpb3NpemVsb2cgPCBYRlNfTUlOX0lPX0xPRykgewotCQkJY21uX2VycihDRV9XQVJOLAotCQkiWEZTOiBpbnZhbGlkIGxvZyBpb3NpemU6ICVkIFtub3QgJWQtJWRdIiwKKwkJCXhmc193YXJuKG1wLCAiaW52YWxpZCBsb2cgaW9zaXplOiAlZCBbbm90ICVkLSVkXSIsCiAJCQkJaW9zaXplbG9nLCBYRlNfTUlOX0lPX0xPRywKIAkJCQlYRlNfTUFYX0lPX0xPRyk7CiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CkBAIC02MTAsNyArNTk5LDcgQEAKIAkJCQkgICAgbXApOwogCWlmIChJU19FUlIoKmJkZXZwKSkgewogCQllcnJvciA9IFBUUl9FUlIoKmJkZXZwKTsKLQkJcHJpbnRrKCJYRlM6IEludmFsaWQgZGV2aWNlIFslc10sIGVycm9yPSVkXG4iLCBuYW1lLCBlcnJvcik7CisJCXhmc193YXJuKG1wLCAiSW52YWxpZCBkZXZpY2UgWyVzXSwgZXJyb3I9JWRcbiIsIG5hbWUsIGVycm9yKTsKIAl9CiAKIAlyZXR1cm4gLWVycm9yOwpAQCAtNjY0LDIzICs2NTMsMjMgQEAKIAlpbnQgZXJyb3I7CiAKIAlpZiAobXAtPm1fbG9nZGV2X3RhcmdwICE9IG1wLT5tX2RkZXZfdGFyZ3ApIHsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfTk9URSwgbXAsCisJCXhmc19ub3RpY2UobXAsCiAJCSAgIkRpc2FibGluZyBiYXJyaWVycywgbm90IHN1cHBvcnRlZCB3aXRoIGV4dGVybmFsIGxvZyBkZXZpY2UiKTsKIAkJbXAtPm1fZmxhZ3MgJj0gflhGU19NT1VOVF9CQVJSSUVSOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKHhmc19yZWFkb25seV9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3ApKSB7Ci0JCXhmc19mc19jbW5fZXJyKENFX05PVEUsIG1wLAotCQkgICJEaXNhYmxpbmcgYmFycmllcnMsIHVuZGVybHlpbmcgZGV2aWNlIGlzIHJlYWRvbmx5Iik7CisJCXhmc19ub3RpY2UobXAsCisJCQkiRGlzYWJsaW5nIGJhcnJpZXJzLCB1bmRlcmx5aW5nIGRldmljZSBpcyByZWFkb25seSIpOwogCQltcC0+bV9mbGFncyAmPSB+WEZTX01PVU5UX0JBUlJJRVI7CiAJCXJldHVybjsKIAl9CiAKIAllcnJvciA9IHhmc19iYXJyaWVyX3Rlc3QobXApOwogCWlmIChlcnJvcikgewotCQl4ZnNfZnNfY21uX2VycihDRV9OT1RFLCBtcCwKLQkJICAiRGlzYWJsaW5nIGJhcnJpZXJzLCB0cmlhbCBiYXJyaWVyIHdyaXRlIGZhaWxlZCIpOworCQl4ZnNfbm90aWNlKG1wLAorCQkJIkRpc2FibGluZyBiYXJyaWVycywgdHJpYWwgYmFycmllciB3cml0ZSBmYWlsZWQiKTsKIAkJbXAtPm1fZmxhZ3MgJj0gflhGU19NT1VOVF9CQVJSSUVSOwogCQlyZXR1cm47CiAJfQpAQCAtNzQzLDggKzczMiw4IEBACiAJCQlnb3RvIG91dF9jbG9zZV9sb2dkZXY7CiAKIAkJaWYgKHJ0ZGV2ID09IGRkZXYgfHwgcnRkZXYgPT0gbG9nZGV2KSB7Ci0JCQljbW5fZXJyKENFX1dBUk4sCi0JIlhGUzogQ2Fubm90IG1vdW50IGZpbGVzeXN0ZW0gd2l0aCBpZGVudGljYWwgcnRkZXYgYW5kIGRkZXYvbG9nZGV2LiIpOworCQkJeGZzX3dhcm4obXAsCisJIkNhbm5vdCBtb3VudCBmaWxlc3lzdGVtIHdpdGggaWRlbnRpY2FsIHJ0ZGV2IGFuZCBkZGV2L2xvZ2Rldi4iKTsKIAkJCWVycm9yID0gRUlOVkFMOwogCQkJZ290byBvdXRfY2xvc2VfcnRkZXY7CiAJCX0KQEAgLTEzNDUsOCArMTMzNCw4IEBACiAJCQkgKiBvcHRpb25zIHRoYXQgd2UgY2FuJ3QgYWN0dWFsbHkgY2hhbmdlLgogCQkJICovCiAjaWYgMAotCQkJcHJpbnRrKEtFUk5fSU5GTwotCSJYRlM6IG1vdW50IG9wdGlvbiBcIiVzXCIgbm90IHN1cHBvcnRlZCBmb3IgcmVtb3VudFxuIiwgcCk7CisJCQl4ZnNfaW5mbyhtcCwKKwkJIm1vdW50IG9wdGlvbiBcIiVzXCIgbm90IHN1cHBvcnRlZCBmb3IgcmVtb3VudFxuIiwgcCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCiAJCQlicmVhazsKQEAgLTEzNjcsOCArMTM1Niw3IEBACiAJCWlmIChtcC0+bV91cGRhdGVfZmxhZ3MpIHsKIAkJCWVycm9yID0geGZzX21vdW50X2xvZ19zYihtcCwgbXAtPm1fdXBkYXRlX2ZsYWdzKTsKIAkJCWlmIChlcnJvcikgewotCQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCQkJIlhGUzogZmFpbGVkIHRvIHdyaXRlIHNiIGNoYW5nZXMiKTsKKwkJCQl4ZnNfd2FybihtcCwgImZhaWxlZCB0byB3cml0ZSBzYiBjaGFuZ2VzIik7CiAJCQkJcmV0dXJuIGVycm9yOwogCQkJfQogCQkJbXAtPm1fdXBkYXRlX2ZsYWdzID0gMDsKQEAgLTE0NTIsMTUgKzE0NDAsMTUgQEAKIAkJCW1wLT5tX2xvZ2JzaXplID0gbXAtPm1fc2Iuc2JfbG9nc3VuaXQ7CiAJCX0gZWxzZSBpZiAobXAtPm1fbG9nYnNpemUgPiAwICYmCiAJCQkgICBtcC0+bV9sb2dic2l6ZSA8IG1wLT5tX3NiLnNiX2xvZ3N1bml0KSB7Ci0JCQljbW5fZXJyKENFX1dBUk4sCi0JIlhGUzogbG9nYnVmIHNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbG9nIHN0cmlwZSBzaXplIik7CisJCQl4ZnNfd2FybihtcCwKKwkJImxvZ2J1ZiBzaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGxvZyBzdHJpcGUgc2l6ZSIpOwogCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogRmFpbCBhIG1vdW50IGlmIHRoZSBsb2didWYgaXMgbGFyZ2VyIHRoYW4gMzJLICovCiAJCWlmIChtcC0+bV9sb2dic2l6ZSA+IFhMT0dfQklHX1JFQ09SRF9CU0laRSkgewotCQkJY21uX2VycihDRV9XQVJOLAotCSJYRlM6IGxvZ2J1ZiBzaXplIGZvciB2ZXJzaW9uIDEgbG9ncyBtdXN0IGJlIDE2SyBvciAzMksiKTsKKwkJCXhmc193YXJuKG1wLAorCQkibG9nYnVmIHNpemUgZm9yIHZlcnNpb24gMSBsb2dzIG11c3QgYmUgMTZLIG9yIDMySyIpOwogCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCQl9CiAJfQpAQCAtMTQ3Nyw4ICsxNDY1LDggQEAKIAkgKiBwcm9oaWJpdCByL3cgbW91bnRzIG9mIHJlYWQtb25seSBmaWxlc3lzdGVtcwogCSAqLwogCWlmICgobXAtPm1fc2Iuc2JfZmxhZ3MgJiBYRlNfU0JGX1JFQURPTkxZKSAmJiAhcm9ubHkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCSJYRlM6IGNhbm5vdCBtb3VudCBhIHJlYWQtb25seSBmaWxlc3lzdGVtIGFzIHJlYWQtd3JpdGUiKTsKKwkJeGZzX3dhcm4obXAsCisJCQkiY2Fubm90IG1vdW50IGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gYXMgcmVhZC13cml0ZSIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVST0ZTKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwppbmRleCBlMjJmMDA1Li42YzEwZjFkMiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpAQCAtNDI1LDggKzQyNSw3IEBACiAJLyogUHVzaCB0aGUgc3VwZXJibG9jayBhbmQgd3JpdGUgYW4gdW5tb3VudCByZWNvcmQgKi8KIAllcnJvciA9IHhmc19sb2dfc2Jjb3VudChtcCwgMSk7CiAJaWYgKGVycm9yKQotCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKLQkJCQkieGZzX2F0dHJfcXVpZXNjZTogZmFpbGVkIHRvIGxvZyBzYiBjaGFuZ2VzLiAiCisJCXhmc193YXJuKG1wLCAieGZzX2F0dHJfcXVpZXNjZTogZmFpbGVkIHRvIGxvZyBzYiBjaGFuZ2VzLiAiCiAJCQkJIkZyb3plbiBpbWFnZSBtYXkgbm90IGJlIGNvbnNpc3RlbnQuIik7CiAJeGZzX2xvZ191bm1vdW50X3dyaXRlKG1wKTsKIAl4ZnNfdW5tb3VudGZzX3dyaXRlc2IobXApOwpAQCAtODA2LDcgKzgwNSw3IEBACiAJICogcGFzcyBvbiB0aGUgZXJyb3IuCiAJICovCiAJaWYgKGVycm9yICYmIGVycm9yICE9IEVBR0FJTiAmJiAhWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpIHsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgaXAtPmlfbW91bnQsCisJCXhmc193YXJuKGlwLT5pX21vdW50LAogCQkJImlub2RlIDB4JWxseCBiYWNrZ3JvdW5kIHJlY2xhaW0gZmx1c2ggZmFpbGVkIHdpdGggJWQiLAogCQkJKGxvbmcgbG9uZylpcC0+aV9pbm8sIGVycm9yKTsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeXNjdGwuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5c2N0bC5jCmluZGV4IGVlM2NlZTAuLmVlMmQyYWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5c2N0bC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5c2N0bC5jCkBAIC0zNyw3ICszNyw3IEBACiAJcmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAogCWlmICghcmV0ICYmIHdyaXRlICYmICp2YWxwKSB7Ci0JCXByaW50aygiWEZTIENsZWFyaW5nIHhmc3N0YXRzXG4iKTsKKwkJeGZzX25vdGljZShOVUxMLCAiQ2xlYXJpbmcgeGZzc3RhdHMiKTsKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGMpIHsKIAkJCXByZWVtcHRfZGlzYWJsZSgpOwogCQkJLyogc2F2ZSB2bl9hY3RpdmUsIGl0J3MgYSB1bml2ZXJzYWwgdHJ1dGghICovCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKaW5kZXggZDIyYWEzMS4uN2UyNDE2NCAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwpAQCAtNTQ0LDkgKzU0NCwxMCBAQAogCS8qCiAJICogQSBzaW1wbGUgc2FuaXR5IGNoZWNrIGluIGNhc2Ugd2UgZ290IGEgY29ycnVwdGVkIGRxdW90Li4uCiAJICovCi0JaWYgKHhmc19xbV9kcWNoZWNrKGRkcSwgaWQsIGRxcC0+ZHFfZmxhZ3MgJiBYRlNfRFFfQUxMVFlQRVMsCisJZXJyb3IgPSB4ZnNfcW1fZHFjaGVjayhtcCwgZGRxLCBpZCwgZHFwLT5kcV9mbGFncyAmIFhGU19EUV9BTExUWVBFUywKIAkJCSAgIGZsYWdzICYgKFhGU19RTU9QVF9EUVJFUEFJUnxYRlNfUU1PUFRfRE9XQVJOKSwKLQkJCSAgICJkcXRvYnAiKSkgeworCQkJICAgImRxdG9icCIpOworCWlmIChlcnJvcikgewogCQlpZiAoIShmbGFncyAmIFhGU19RTU9QVF9EUVJFUEFJUikpIHsKIAkJCXhmc190cmFuc19icmVsc2UodHAsIGJwKTsKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKQEAgLTgyNyw3ICs4MjgsNyBAQAogCWlmICh4ZnNfZG9fZHFlcnJvcikgewogCQlpZiAoKHhmc19kcWVycm9yX3RhcmdldCA9PSBtcC0+bV9kZGV2X3RhcmdwKSAmJgogCQkgICAgKHhmc19kcXJlcV9udW0rKyAlIHhmc19kcWVycm9yX21vZCkgPT0gMCkgewotCQkJY21uX2VycihDRV9ERUJVRywgIlJldHVybmluZyBlcnJvciBpbiBkcWdldCIpOworCQkJeGZzX2RlYnVnKG1wLCAiUmV0dXJuaW5nIGVycm9yIGluIGRxZ2V0Iik7CiAJCQlyZXR1cm4gKEVJTyk7CiAJCX0KIAl9CkBAIC0xMjA3LDggKzEyMDgsOSBAQAogCS8qCiAJICogQSBzaW1wbGUgc2FuaXR5IGNoZWNrIGluIGNhc2Ugd2UgZ290IGEgY29ycnVwdGVkIGRxdW90Li4KIAkgKi8KLQlpZiAoeGZzX3FtX2RxY2hlY2soJmRxcC0+cV9jb3JlLCBiZTMyX3RvX2NwdShkZHFwLT5kX2lkKSwgMCwKLQkJCSAgIFhGU19RTU9QVF9ET1dBUk4sICJkcWZsdXNoIChpbmNvcmUgY29weSkiKSkgeworCWVycm9yID0geGZzX3FtX2RxY2hlY2sobXAsICZkcXAtPnFfY29yZSwgYmUzMl90b19jcHUoZGRxcC0+ZF9pZCksIDAsCisJCQkgICBYRlNfUU1PUFRfRE9XQVJOLCAiZHFmbHVzaCAoaW5jb3JlIGNvcHkpIik7CisJaWYgKGVycm9yKSB7CiAJCXhmc19idWZfcmVsc2UoYnApOwogCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CiAJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fQ09SUlVQVF9JTkNPUkUpOwpAQCAtMTM5MSw4ICsxMzkzLDggQEAKIAkJICovCiAJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBTWU5DX1dBSVQpOwogCQlpZiAoZXJyb3IpCi0JCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKLQkJCQkieGZzX3FtX2RxcHVyZ2U6IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CisJCQl4ZnNfd2FybihtcCwgIiVzOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLAorCQkJCV9fZnVuY19fLCBkcXApOwogCQl4ZnNfZHFmbG9jayhkcXApOwogCX0KIAlBU1NFUlQoYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPT0gMCk7CkBAIC0xNDI1LDM2ICsxNDI3LDM4IEBACiB2b2lkCiB4ZnNfcW1fZHFwcmludCh4ZnNfZHF1b3RfdCAqZHFwKQogewotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tLS0tLS0tLUtFUk5FTCBEUVVPVC0tLS0tLS0tLS0tLS0tLS0iKTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBkcXVvdElEID0gICVkIiwKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGRxcC0+cV9tb3VudDsKKworCXhmc19kZWJ1ZyhtcCwgIi0tLS0tLS0tLS0tS0VSTkVMIERRVU9ULS0tLS0tLS0tLS0tLS0tLSIpOworCXhmc19kZWJ1ZyhtcCwgIi0tLS0gZHF1b3RJRCA9ICAlZCIsCiAJCShpbnQpYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCkpOwotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIHR5cGUgICAgPSAgJXMiLCBEUUZMQUdUT19UWVBFU1RSKGRxcCkpOwotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIGZzICAgICAgPSAgMHglcCIsIGRxcC0+cV9tb3VudCk7Ci0JY21uX2VycihDRV9ERUJVRywgIi0tLS0gYmxrbm8gICA9ICAweCV4IiwgKGludCkgZHFwLT5xX2Jsa25vKTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBib2Zmc2V0ID0gIDB4JXgiLCAoaW50KSBkcXAtPnFfYnVmb2Zmc2V0KTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBibGtobGltaXQgPSAgJUx1ICgweCV4KSIsCisJeGZzX2RlYnVnKG1wLCAiLS0tLSB0eXBlICAgID0gICVzIiwgRFFGTEFHVE9fVFlQRVNUUihkcXApKTsKKwl4ZnNfZGVidWcobXAsICItLS0tIGZzICAgICAgPSAgMHglcCIsIGRxcC0+cV9tb3VudCk7CisJeGZzX2RlYnVnKG1wLCAiLS0tLSBibGtubyAgID0gIDB4JXgiLCAoaW50KSBkcXAtPnFfYmxrbm8pOworCXhmc19kZWJ1ZyhtcCwgIi0tLS0gYm9mZnNldCA9ICAweCV4IiwgKGludCkgZHFwLT5xX2J1Zm9mZnNldCk7CisJeGZzX2RlYnVnKG1wLCAiLS0tLSBibGtobGltaXQgPSAgJUx1ICgweCV4KSIsCiAJCWJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX2hhcmRsaW1pdCksCiAJCShpbnQpYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfaGFyZGxpbWl0KSk7Ci0JY21uX2VycihDRV9ERUJVRywgIi0tLS0gYmxrc2xpbWl0ID0gICVMdSAoMHgleCkiLAorCXhmc19kZWJ1ZyhtcCwgIi0tLS0gYmxrc2xpbWl0ID0gICVMdSAoMHgleCkiLAogCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19zb2Z0bGltaXQpLAogCQkoaW50KWJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX3NvZnRsaW1pdCkpOwotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIGlub2hsaW1pdCA9ICAlTHUgKDB4JXgpIiwKKwl4ZnNfZGVidWcobXAsICItLS0tIGlub2hsaW1pdCA9ICAlTHUgKDB4JXgpIiwKIAkJYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9faGFyZGxpbWl0KSwKIAkJKGludCliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19oYXJkbGltaXQpKTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBpbm9zbGltaXQgPSAgJUx1ICgweCV4KSIsCisJeGZzX2RlYnVnKG1wLCAiLS0tLSBpbm9zbGltaXQgPSAgJUx1ICgweCV4KSIsCiAJCWJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaW5vX3NvZnRsaW1pdCksCiAJCShpbnQpYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9fc29mdGxpbWl0KSk7Ci0JY21uX2VycihDRV9ERUJVRywgIi0tLS0gYmNvdW50ICA9ICAlTHUgKDB4JXgpIiwKKwl4ZnNfZGVidWcobXAsICItLS0tIGJjb3VudCAgPSAgJUx1ICgweCV4KSIsCiAJCWJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmNvdW50KSwKIAkJKGludCliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jjb3VudCkpOwotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIGljb3VudCAgPSAgJUx1ICgweCV4KSIsCisJeGZzX2RlYnVnKG1wLCAiLS0tLSBpY291bnQgID0gICVMdSAoMHgleCkiLAogCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2ljb3VudCksCiAJCShpbnQpYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pY291bnQpKTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBidGltZXIgID0gICVkIiwKKwl4ZnNfZGVidWcobXAsICItLS0tIGJ0aW1lciAgPSAgJWQiLAogCQkoaW50KWJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYnRpbWVyKSk7Ci0JY21uX2VycihDRV9ERUJVRywgIi0tLS0gaXRpbWVyICA9ICAlZCIsCisJeGZzX2RlYnVnKG1wLCAiLS0tLSBpdGltZXIgID0gICVkIiwKIAkJKGludCliZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2l0aW1lcikpOwotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKwl4ZnNfZGVidWcobXAsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCmluZGV4IDJhMWYzZGMuLjllMGUyZmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCkBAIC0xMzYsOSArMTM2LDggQEAKIAkgKi8KIAllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgMCk7CiAJaWYgKGVycm9yKQotCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBkcXAtPnFfbW91bnQsCi0JCQkieGZzX3FtX2RxdW90X2xvZ2l0ZW1fcHVzaDogcHVzaCBlcnJvciAlZCBvbiBkcXAgJXAiLAotCQkJZXJyb3IsIGRxcCk7CisJCXhmc193YXJuKGRxcC0+cV9tb3VudCwgIiVzOiBwdXNoIGVycm9yICVkIG9uIGRxcCAlcCIsCisJCQlfX2Z1bmNfXywgZXJyb3IsIGRxcCk7CiAJeGZzX2RxdW5sb2NrKGRxcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCAyMDZhMjgxLi4yNTRlZTA2IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC04MCw3ICs4MCw3IEBACiAJaW50CQlpID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHFwLCAmbXAtPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3RfbG9jaywgcWlfbXBsaXN0KSB7Ci0JCWNtbl9lcnIoQ0VfREVCVUcsICIgICAlZC4gXCIlZCAoJXMpXCIgICAiCisJCXhmc19kZWJ1ZyhtcCwgIiAgICVkLiBcIiVkICglcylcIiAgICIKIAkJCQkgICJiY250ID0gJWxsZCwgaWNudCA9ICVsbGQsIHJlZnMgPSAlZCIsCiAJCQlpKyssIGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWQpLAogCQkJRFFGTEFHVE9fVFlQRVNUUihkcXApLApAQCAtMjA1LDcgKzIwNSw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRxcCwgbiwgJnhxbS0+cW1fZHFmcmxpc3QsIHFfZnJlZWxpc3QpIHsKIAkJeGZzX2RxbG9jayhkcXApOwogI2lmZGVmIFFVT1RBREVCVUcKLQkJY21uX2VycihDRV9ERUJVRywgIkZSRUVMSVNUIGRlc3Ryb3kgMHglcCIsIGRxcCk7CisJCXhmc19kZWJ1ZyhkcXAtPnFfbW91bnQsICJGUkVFTElTVCBkZXN0cm95IDB4JXAiLCBkcXApOwogI2VuZGlmCiAJCWxpc3RfZGVsX2luaXQoJmRxcC0+cV9mcmVlbGlzdCk7CiAJCXhmc19HcW0tPnFtX2RxZnJsaXN0X2NudC0tOwpAQCAtMzQxLDkgKzM0MSw3IEBACiAJICogcXVvdGFzIGltbWVkaWF0ZWx5LgogCSAqLwogCWlmIChtcC0+bV9zYi5zYl9yZXh0ZW50cykgewotCQljbW5fZXJyKENFX05PVEUsCi0JCQkiQ2Fubm90IHR1cm4gb24gcXVvdGFzIGZvciByZWFsdGltZSBmaWxlc3lzdGVtICVzIiwKLQkJCW1wLT5tX2ZzbmFtZSk7CisJCXhmc19ub3RpY2UobXAsICJDYW5ub3QgdHVybiBvbiBxdW90YXMgZm9yIHJlYWx0aW1lIGZpbGVzeXN0ZW0iKTsKIAkJbXAtPm1fcWZsYWdzID0gMDsKIAkJZ290byB3cml0ZV9jaGFuZ2VzOwogCX0KQEAgLTQwMiwxNCArNDAwLDEzIEBACiAJCQkgKiBvZmYsIGJ1dCB0aGUgb24gZGlzayBzdXBlcmJsb2NrIGRvZXNuJ3Qga25vdyB0aGF0ICEKIAkJCSAqLwogCQkJQVNTRVJUKCEoWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKSk7Ci0JCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCi0JCQkJIlhGUyBtb3VudF9xdW90YXM6IFN1cGVyYmxvY2sgdXBkYXRlIGZhaWxlZCEiKTsKKwkJCXhmc19hbGVydChtcCwgIiVzOiBTdXBlcmJsb2NrIHVwZGF0ZSBmYWlsZWQhIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCX0KIAl9CiAKIAlpZiAoZXJyb3IpIHsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCi0JCQkiRmFpbGVkIHRvIGluaXRpYWxpemUgZGlzayBxdW90YXMuIik7CisJCXhmc193YXJuKG1wLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGlzayBxdW90YXMuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyMzAsMTMgKzEyMjcsNiBAQAogCX0KIAogCS8qCi0JICogS2VlcCBhbiBleHRyYSByZWZlcmVuY2UgdG8gdGhpcyBxdW90YSBpbm9kZS4gVGhpcyBpbm9kZSBpcwotCSAqIGxvY2tlZCBleGNsdXNpdmVseSBhbmQgam9pbmVkIHRvIHRoZSB0cmFuc2FjdGlvbiBhbHJlYWR5LgotCSAqLwotCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKCppcCwgWEZTX0lMT0NLX0VYQ0wpKTsKLQlJSE9MRCgqaXApOwotCi0JLyoKIAkgKiBNYWtlIHRoZSBjaGFuZ2VzIGluIHRoZSBzdXBlcmJsb2NrLCBhbmQgbG9nIHRob3NlIHRvby4KIAkgKiBzYmZpZWxkcyBhcmcgbWF5IGNvbnRhaW4gZmllbGRzIG90aGVyIHRoYW4gKlFVT1RJTk87CiAJICogVkVSU0lPTk5VTSBmb3IgZXhhbXBsZS4KQEAgLTEyNjQsNyArMTI1NCw3IEBACiAJeGZzX21vZF9zYih0cCwgc2JmaWVsZHMpOwogCiAJaWYgKChlcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpKSkgewotCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsICJYRlMgcWlub19hbGxvYyBmYWlsZWQhIik7CisJCXhmc19hbGVydChtcCwgIiVzIGZhaWxlZCAoZXJyb3IgJWQpISIsIF9fZnVuY19fLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMjk5LDcgKzEyODksNyBAQAogCQkgKiBvdXRwdXQgYW55IHdhcm5pbmdzIGJlY2F1c2UgaXQncyBwZXJmZWN0bHkgcG9zc2libGUgdG8KIAkJICogZmluZCB1bmluaXRpYWxpc2VkIGRxdW90IGJsa3MuIFNlZSBjb21tZW50IGluIHhmc19xbV9kcWNoZWNrLgogCQkgKi8KLQkJKHZvaWQpIHhmc19xbV9kcWNoZWNrKGRkcSwgaWQraiwgdHlwZSwgWEZTX1FNT1BUX0RRUkVQQUlSLAorCQkodm9pZCkgeGZzX3FtX2RxY2hlY2sobXAsIGRkcSwgaWQraiwgdHlwZSwgWEZTX1FNT1BUX0RRUkVQQUlSLAogCQkJCSAgICAgICJ4ZnNfcXVvdGFjaGVjayIpOwogCQlkZHEtPmRfYmNvdW50ID0gMDsKIAkJZGRxLT5kX2ljb3VudCA9IDA7CkBAIC0xNjc2LDcgKzE2NjYsNyBAQAogCSAqLwogCUFTU0VSVChsaXN0X2VtcHR5KCZtcC0+bV9xdW90YWluZm8tPnFpX2RxbGlzdCkpOwogCi0JY21uX2VycihDRV9OT1RFLCAiWEZTIHF1b3RhY2hlY2sgJXM6IFBsZWFzZSB3YWl0LiIsIG1wLT5tX2ZzbmFtZSk7CisJeGZzX25vdGljZShtcCwgIlF1b3RhY2hlY2sgbmVlZGVkOiBQbGVhc2Ugd2FpdC4iKTsKIAogCS8qCiAJICogRmlyc3Qgd2UgZ28gdGhydSBhbGwgdGhlIGRxdW90cyBvbiBkaXNrLCBVU1IgYW5kIEdSUC9QUkosIGFuZCByZXNldApAQCAtMTc1NCw5ICsxNzQ0LDkgQEAKIAogIGVycm9yX3JldHVybjoKIAlpZiAoZXJyb3IpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTIHF1b3RhY2hlY2sgJXM6IFVuc3VjY2Vzc2Z1bCAoRXJyb3IgJWQpOiAiCi0JCQkiRGlzYWJsaW5nIHF1b3Rhcy4iLAotCQkJbXAtPm1fZnNuYW1lLCBlcnJvcik7CisJCXhmc193YXJuKG1wLAorCSJRdW90YWNoZWNrOiBVbnN1Y2Nlc3NmdWwgKEVycm9yICVkKTogRGlzYWJsaW5nIHF1b3Rhcy4iLAorCQkJZXJyb3IpOwogCQkvKgogCQkgKiBXZSBtdXN0IHR1cm4gb2ZmIHF1b3Rhcy4KIAkJICovCkBAIC0xNzY0LDEyICsxNzU0LDExIEBACiAJCUFTU0VSVCh4ZnNfR3FtICE9IE5VTEwpOwogCQl4ZnNfcW1fZGVzdHJveV9xdW90YWluZm8obXApOwogCQlpZiAoeGZzX21vdW50X3Jlc2V0X3NicWZsYWdzKG1wKSkgewotCQkJY21uX2VycihDRV9XQVJOLCAiWEZTIHF1b3RhY2hlY2sgJXM6ICIKLQkJCQkiRmFpbGVkIHRvIHJlc2V0IHF1b3RhIGZsYWdzLiIsIG1wLT5tX2ZzbmFtZSk7CisJCQl4ZnNfd2FybihtcCwKKwkJCQkiUXVvdGFjaGVjazogRmFpbGVkIHRvIHJlc2V0IHF1b3RhIGZsYWdzLiIpOwogCQl9Ci0JfSBlbHNlIHsKLQkJY21uX2VycihDRV9OT1RFLCAiWEZTIHF1b3RhY2hlY2sgJXM6IERvbmUuIiwgbXAtPm1fZnNuYW1lKTsKLQl9CisJfSBlbHNlCisJCXhmc19ub3RpY2UobXAsICJRdW90YWNoZWNrOiBEb25lLiIpOwogCXJldHVybiAoZXJyb3IpOwogfQogCkBAIC0xOTM3LDggKzE5MjYsOCBAQAogCQkJICovCiAJCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgMCk7CiAJCQlpZiAoZXJyb3IpIHsKLQkJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKLQkJCSJ4ZnNfcW1fZHFyZWNsYWltOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOworCQkJCXhmc193YXJuKG1wLCAiJXM6IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsCisJCQkJCV9fZnVuY19fLCBkcXApOwogCQkJfQogCQkJZ290byBkcXVubG9jazsKIAkJfQpAQCAtMjExNSw3ICsyMTA0LDcgQEAKIAlpbnQJCWVycm9yOwogCiAjaWZkZWYgUVVPVEFERUJVRwotCWNtbl9lcnIoQ0VfTk9URSwgIldyaXRpbmcgc3VwZXJibG9jayBxdW90YSBjaGFuZ2VzIDolcyIsIG1wLT5tX2ZzbmFtZSk7CisJeGZzX25vdGljZShtcCwgIldyaXRpbmcgc3VwZXJibG9jayBxdW90YSBjaGFuZ2VzIik7CiAjZW5kaWYKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1FNX1NCQ0hBTkdFKTsKIAlpZiAoKGVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYwppbmRleCA0NWI1Y2IxLi43NzRkN2VjIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKQEAgLTExOSw4ICsxMTksNyBAQAogCSAgICAgKGdxdW90YW9uZGlzayAmJiAhWEZTX0lTX0dRVU9UQV9PTihtcCkpIHx8CiAJICAgICghZ3F1b3Rhb25kaXNrICYmICBYRlNfSVNfT1FVT1RBX09OKG1wKSkpICAmJgogCSAgICB4ZnNfZGV2X2lzX3JlYWRfb25seShtcCwgImNoYW5naW5nIHF1b3RhIHN0YXRlIikpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogcGxlYXNlIG1vdW50IHdpdGglcyVzJXMlcy4iLAorCQl4ZnNfd2FybihtcCwgInBsZWFzZSBtb3VudCB3aXRoJXMlcyVzJXMuIiwKIAkJCSghcXVvdGFvbmRpc2sgPyAib3V0IHF1b3RhIiA6ICIiKSwKIAkJCSh1cXVvdGFvbmRpc2sgPyAiIHVzcnF1b3RhIiA6ICIiKSwKIAkJCShwcXVvdGFvbmRpc2sgPyAiIHByanF1b3RhIiA6ICIiKSwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCBiZGViYzE4Li5jODJmMDY3IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC00MSwxMiArNDEsNiBAQAogI2luY2x1ZGUgInhmc19xbS5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCi0jaWZkZWYgREVCVUcKLSMgZGVmaW5lIHFkcHJpbnRrKHMsIGFyZ3MuLi4pCWNtbl9lcnIoQ0VfREVCVUcsIHMsICMjIGFyZ3MpCi0jZWxzZQotIyBkZWZpbmUgcWRwcmludGsocywgYXJncy4uLikJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KIFNUQVRJQyBpbnQJeGZzX3FtX2xvZ19xdW90YW9mZih4ZnNfbW91bnRfdCAqLCB4ZnNfcW9mZl9sb2dpdGVtX3QgKiosIHVpbnQpOwogU1RBVElDIGludAl4ZnNfcW1fbG9nX3F1b3Rhb2ZmX2VuZCh4ZnNfbW91bnRfdCAqLCB4ZnNfcW9mZl9sb2dpdGVtX3QgKiwKIAkJCQkJdWludCk7CkBAIC0yOTQsNyArMjg4LDggQEAKIAlpbnQJCWVycm9yID0gMCwgZXJyb3IyID0gMDsKIAogCWlmICgheGZzX3NiX3ZlcnNpb25faGFzcXVvdGEoJm1wLT5tX3NiKSB8fCBmbGFncyA9PSAwKSB7Ci0JCXFkcHJpbnRrKCJxdHJ1bmMgZmxhZ3M9JXggbV9xZmxhZ3M9JXhcbiIsIGZsYWdzLCBtcC0+bV9xZmxhZ3MpOworCQl4ZnNfZGVidWcobXAsICIlczogZmxhZ3M9JXggbV9xZmxhZ3M9JXhcbiIsCisJCQlfX2Z1bmNfXywgZmxhZ3MsIG1wLT5tX3FmbGFncyk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9CiAKQEAgLTMzMSw3ICszMjYsOCBAQAogCXNiZmxhZ3MgPSAwOwogCiAJaWYgKGZsYWdzID09IDApIHsKLQkJcWRwcmludGsoInF1b3Rhb246IHplcm8gZmxhZ3MsIG1fcWZsYWdzPSV4XG4iLCBtcC0+bV9xZmxhZ3MpOworCQl4ZnNfZGVidWcobXAsICIlczogemVybyBmbGFncywgbV9xZmxhZ3M9JXhcbiIsCisJCQlfX2Z1bmNfXywgbXAtPm1fcWZsYWdzKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCX0KIApAQCAtMzUyLDggKzM0OCw5IEBACiAJICAgIChmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkgPT0gMCAmJgogCSAgICAobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUKSA9PSAwICYmCiAJICAgIChmbGFncyAmIFhGU19PUVVPVEFfRU5GRCkpKSB7Ci0JCXFkcHJpbnRrKCJDYW4ndCBlbmZvcmNlIHdpdGhvdXQgYWNjdCwgZmxhZ3M9JXggc2JmbGFncz0leFxuIiwKLQkJCWZsYWdzLCBtcC0+bV9zYi5zYl9xZmxhZ3MpOworCQl4ZnNfZGVidWcobXAsCisJCQkiJXM6IENhbid0IGVuZm9yY2Ugd2l0aG91dCBhY2N0LCBmbGFncz0leCBzYmZsYWdzPSV4XG4iLAorCQkJX19mdW5jX18sIGZsYWdzLCBtcC0+bV9zYi5zYl9xZmxhZ3MpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQogCS8qCkBAIC01NDEsNyArNTM4LDcgQEAKIAkJCXEtPnFpX2Jzb2Z0bGltaXQgPSBzb2Z0OwogCQl9CiAJfSBlbHNlIHsKLQkJcWRwcmludGsoImJsa2hhcmQgJUxkIDwgYmxrc29mdCAlTGRcbiIsIGhhcmQsIHNvZnQpOworCQl4ZnNfZGVidWcobXAsICJibGtoYXJkICVMZCA8IGJsa3NvZnQgJUxkXG4iLCBoYXJkLCBzb2Z0KTsKIAl9CiAJaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCSEFSRCkgPwogCQkoeGZzX3FjbnRfdCkgWEZTX0JCX1RPX0ZTQihtcCwgbmV3bGltLT5kX3J0Yl9oYXJkbGltaXQpIDoKQEAgLTU1Nyw3ICs1NTQsNyBAQAogCQkJcS0+cWlfcnRic29mdGxpbWl0ID0gc29mdDsKIAkJfQogCX0gZWxzZSB7Ci0JCXFkcHJpbnRrKCJydGJoYXJkICVMZCA8IHJ0YnNvZnQgJUxkXG4iLCBoYXJkLCBzb2Z0KTsKKwkJeGZzX2RlYnVnKG1wLCAicnRiaGFyZCAlTGQgPCBydGJzb2Z0ICVMZFxuIiwgaGFyZCwgc29mdCk7CiAJfQogCiAJaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfSUhBUkQpID8KQEAgLTU3NCw3ICs1NzEsNyBAQAogCQkJcS0+cWlfaXNvZnRsaW1pdCA9IHNvZnQ7CiAJCX0KIAl9IGVsc2UgewotCQlxZHByaW50aygiaWhhcmQgJUxkIDwgaXNvZnQgJUxkXG4iLCBoYXJkLCBzb2Z0KTsKKwkJeGZzX2RlYnVnKG1wLCAiaWhhcmQgJUxkIDwgaXNvZnQgJUxkXG4iLCBoYXJkLCBzb2Z0KTsKIAl9CiAKIAkvKgpAQCAtOTM5LDEwICs5MzYsMTEgQEAKICNkZWZpbmUgRFFURVNUX0xJU1RfUFJJTlQobCwgTlhULCB0aXRsZSkgXAogeyBcCiAJICB4ZnNfZHF0ZXN0X3QJKmRxcDsgaW50IGkgPSAwO1wKLQkgIGNtbl9lcnIoQ0VfREVCVUcsICIlcyAoIyVkKSIsIHRpdGxlLCAoaW50KSAobCktPnFoX25lbGVtcyk7IFwKKwkgIHhmc19kZWJ1ZyhOVUxMLCAiJXMgKCMlZCkiLCB0aXRsZSwgKGludCkgKGwpLT5xaF9uZWxlbXMpOyBcCiAJICBmb3IgKGRxcCA9ICh4ZnNfZHF0ZXN0X3QgKikobCktPnFoX25leHQ7IGRxcCAhPSBOVUxMOyBcCiAJICAgICAgIGRxcCA9ICh4ZnNfZHF0ZXN0X3QgKilkcXAtPk5YVCkgeyBcCi0JCWNtbl9lcnIoQ0VfREVCVUcsICIgICVkLiBcIiVkICglcylcIiAgYmNudCA9ICVkLCBpY250ID0gJWQiLCBcCisJCXhmc19kZWJ1ZyhkcXAtPnFfbW91bnQsCQlcCisJCQkiICAlZC4gXCIlZCAoJXMpXCIgIGJjbnQgPSAlZCwgaWNudCA9ICVkIiwgXAogCQkJICsraSwgZHFwLT5kX2lkLCBEUUZMQUdUT19UWVBFU1RSKGRxcCksCSAgICAgXAogCQkJIGRxcC0+ZF9iY291bnQsIGRxcC0+ZF9pY291bnQpOyB9IFwKIH0KQEAgLTk2NiwxNiArOTY0LDE3IEBACiB9CiBTVEFUSUMgdm9pZAogeGZzX3FtX2RxdGVzdF9wcmludCgKLQl4ZnNfZHF0ZXN0X3QJKmQpCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IGRxdGVzdAkJKmQpCiB7Ci0JY21uX2VycihDRV9ERUJVRywgIi0tLS0tLS0tLS0tRFFURVNUIERRVU9ULS0tLS0tLS0tLS0tLS0tLSIpOwotCWNtbl9lcnIoQ0VfREVCVUcsICItLS0tIGRxdW90IElEID0gJWQiLCBkLT5kX2lkKTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBmcyAgICAgICA9IDB4JXAiLCBkLT5xX21vdW50KTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLS0tLSBiY291bnQgICA9ICVMdSAoMHgleCkiLAorCXhmc19kZWJ1ZyhtcCwgIi0tLS0tLS0tLS0tRFFURVNUIERRVU9ULS0tLS0tLS0tLS0tLS0tLSIpOworCXhmc19kZWJ1ZyhtcCwgIi0tLS0gZHF1b3QgSUQgPSAlZCIsIGQtPmRfaWQpOworCXhmc19kZWJ1ZyhtcCwgIi0tLS0gZnMgICAgICAgPSAweCVwIiwgZC0+cV9tb3VudCk7CisJeGZzX2RlYnVnKG1wLCAiLS0tLSBiY291bnQgICA9ICVMdSAoMHgleCkiLAogCQlkLT5kX2Jjb3VudCwgKGludClkLT5kX2Jjb3VudCk7Ci0JY21uX2VycihDRV9ERUJVRywgIi0tLS0gaWNvdW50ICAgPSAlTHUgKDB4JXgpIiwKKwl4ZnNfZGVidWcobXAsICItLS0tIGljb3VudCAgID0gJUx1ICgweCV4KSIsCiAJCWQtPmRfaWNvdW50LCAoaW50KWQtPmRfaWNvdW50KTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisJeGZzX2RlYnVnKG1wLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiB9CiAKIFNUQVRJQyB2b2lkCkBAIC05ODksMTIgKzk4OCwxNCBAQAogewogCXFtdGVzdF9uZmFpbHMrKzsKIAlpZiAoZXJyb3IpCi0JCWNtbl9lcnIoQ0VfREVCVUcsICJxdW90YWNoZWNrIGZhaWxlZCBpZD0lZCwgZXJyPSVkXG5yZWFzb246ICVzIiwKLQkJICAgICAgIGQtPmRfaWQsIGVycm9yLCByZWFzb24pOworCQl4ZnNfZGVidWcoZHFwLT5xX21vdW50LAorCQkJInF1b3RhY2hlY2sgZmFpbGVkIGlkPSVkLCBlcnI9JWRcbnJlYXNvbjogJXMiLAorCQkJZC0+ZF9pZCwgZXJyb3IsIHJlYXNvbik7CiAJZWxzZQotCQljbW5fZXJyKENFX0RFQlVHLCAicXVvdGFjaGVjayBmYWlsZWQgaWQ9JWQgKCVzKSBbJWQgIT0gJWRdIiwKLQkJICAgICAgIGQtPmRfaWQsIHJlYXNvbiwgKGludClhLCAoaW50KWIpOwotCXhmc19xbV9kcXRlc3RfcHJpbnQoZCk7CisJCXhmc19kZWJ1ZyhkcXAtPnFfbW91bnQsCisJCQkicXVvdGFjaGVjayBmYWlsZWQgaWQ9JWQgKCVzKSBbJWQgIT0gJWRdIiwKKwkJCWQtPmRfaWQsIHJlYXNvbiwgKGludClhLCAoaW50KWIpOworCXhmc19xbV9kcXRlc3RfcHJpbnQoZHFwLT5xX21vdW50LCBkKTsKIAlpZiAoZHFwKQogCQl4ZnNfcW1fZHFwcmludChkcXApOwogfQpAQCAtMTAyMSw5ICsxMDIyLDkgQEAKIAkgICAgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9iY291bnQpID49CiAJICAgIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX3NvZnRsaW1pdCkpIHsKIAkJaWYgKCFkcXAtPnFfY29yZS5kX2J0aW1lciAmJiBkcXAtPnFfY29yZS5kX2lkKSB7Ci0JCQljbW5fZXJyKENFX0RFQlVHLAotCQkJCSIlZCBbJXNdIFsweCVwXSBCTEsgVElNRVIgTk9UIFNUQVJURUQiLAotCQkJCWQtPmRfaWQsIERRRkxBR1RPX1RZUEVTVFIoZCksIGQtPnFfbW91bnQpOworCQkJeGZzX2RlYnVnKGRxcC0+cV9tb3VudCwKKwkJCQkiJWQgWyVzXSBCTEsgVElNRVIgTk9UIFNUQVJURUQiLAorCQkJCWQtPmRfaWQsIERRRkxBR1RPX1RZUEVTVFIoZCkpOwogCQkJZXJyKys7CiAJCX0KIAl9CkBAIC0xMDMxLDE2ICsxMDMyLDE2IEBACiAJICAgIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWNvdW50KSA+PQogCSAgICBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19zb2Z0bGltaXQpKSB7CiAJCWlmICghZHFwLT5xX2NvcmUuZF9pdGltZXIgJiYgZHFwLT5xX2NvcmUuZF9pZCkgewotCQkJY21uX2VycihDRV9ERUJVRywKLQkJCQkiJWQgWyVzXSBbMHglcF0gSU5PIFRJTUVSIE5PVCBTVEFSVEVEIiwKLQkJCQlkLT5kX2lkLCBEUUZMQUdUT19UWVBFU1RSKGQpLCBkLT5xX21vdW50KTsKKwkJCXhmc19kZWJ1ZyhkcXAtPnFfbW91bnQsCisJCQkJIiVkIFslc10gSU5PIFRJTUVSIE5PVCBTVEFSVEVEIiwKKwkJCQlkLT5kX2lkLCBEUUZMQUdUT19UWVBFU1RSKGQpKTsKIAkJCWVycisrOwogCQl9CiAJfQogI2lmZGVmIFFVT1RBREVCVUcKIAlpZiAoIWVycikgewotCQljbW5fZXJyKENFX0RFQlVHLCAiJWQgWyVzXSBbMHglcF0gcWNoZWNrZWQiLAotCQkJZC0+ZF9pZCwgRFFGTEFHVE9fVFlQRVNUUihkKSwgZC0+cV9tb3VudCk7CisJCXhmc19kZWJ1ZyhkcXAtPnFfbW91bnQsICIlZCBbJXNdIHFjaGVja2VkIiwKKwkJCWQtPmRfaWQsIERRRkxBR1RPX1RZUEVTVFIoZCkpOwogCX0KICNlbmRpZgogCXJldHVybiAoZXJyKTsKQEAgLTExMzcsOCArMTEzOCw4IEBACiAKIAlpZiAoaW5vID09IG1wLT5tX3NiLnNiX3VxdW90aW5vIHx8IGlubyA9PSBtcC0+bV9zYi5zYl9ncXVvdGlubykgewogCQkqcmVzID0gQlVMS1NUQVRfUlZfTk9USElORzsKLQkJcWRwcmludGsoImludGVybmFscWNoZWNrOiBpbm89JWxsdSwgdXFpbm89JWxsdSwgZ3Fpbm89JWxsdVxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGlubywKKwkJeGZzX2RlYnVnKG1wLCAiJXM6IGlubz0lbGx1LCB1cWlubz0lbGx1LCBncWlubz0lbGx1XG4iLAorCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpIGlubywKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG1wLT5tX3NiLnNiX3VxdW90aW5vLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbXAtPm1fc2Iuc2JfZ3F1b3Rpbm8pOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CkBAIC0xMjIzLDEyICsxMjI0LDEyIEBACiAJCQkJIHhmc19xbV9pbnRlcm5hbHFjaGVja19hZGp1c3QsCiAJCQkJIDAsIE5VTEwsICZkb25lKTsKIAkJaWYgKGVycm9yKSB7Ci0JCQljbW5fZXJyKENFX0RFQlVHLCAiQnVsa3N0YXQgcmV0dXJuZWQgZXJyb3IgMHgleCIsIGVycm9yKTsKKwkJCXhmc19kZWJ1ZyhtcCwgIkJ1bGtzdGF0IHJldHVybmVkIGVycm9yIDB4JXgiLCBlcnJvcik7CiAJCQlicmVhazsKIAkJfQogCX0gd2hpbGUgKCFkb25lKTsKIAotCWNtbl9lcnIoQ0VfREVCVUcsICJDaGVja2luZyByZXN1bHRzIGFnYWluc3Qgc3lzdGVtIGRxdW90cyIpOworCXhmc19kZWJ1ZyhtcCwgIkNoZWNraW5nIHJlc3VsdHMgYWdhaW5zdCBzeXN0ZW0gZHF1b3RzIik7CiAJZm9yIChpID0gMDsgaSA8IHFtdGVzdF9oYXNobWFzazsgaSsrKSB7CiAJCXhmc19kcXRlc3RfdAkqZCwgKm47CiAJCXhmc19kcWhhc2hfdAkqaDsKQEAgLTEyNDYsMTAgKzEyNDcsMTAgQEAKIAl9CiAKIAlpZiAocW10ZXN0X25mYWlscykgewotCQljbW5fZXJyKENFX0RFQlVHLCAiKioqKioqKiogcXVvdGFjaGVjayBmYWlsZWQgICoqKioqKioqIik7Ci0JCWNtbl9lcnIoQ0VfREVCVUcsICJmYWlsdXJlcyA9ICVkIiwgcW10ZXN0X25mYWlscyk7CisJCXhmc19kZWJ1ZyhtcCwgIioqKioqKioqIHF1b3RhY2hlY2sgZmFpbGVkICAqKioqKioqKiIpOworCQl4ZnNfZGVidWcobXAsICJmYWlsdXJlcyA9ICVkIiwgcW10ZXN0X25mYWlscyk7CiAJfSBlbHNlIHsKLQkJY21uX2VycihDRV9ERUJVRywgIioqKioqKioqIHF1b3RhY2hlY2sgc3VjY2Vzc2Z1bCEgKioqKioqKioiKTsKKwkJeGZzX2RlYnVnKG1wLCAiKioqKioqKiogcXVvdGFjaGVjayBzdWNjZXNzZnVsISAqKioqKioqKiIpOwogCX0KIAlrbWVtX2ZyZWUocW10ZXN0X3VkcXRhYik7CiAJa21lbV9mcmVlKHFtdGVzdF9nZHF0YWIpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCmluZGV4IDdkZTkxZDEuLjJhMzY0ODcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKQEAgLTY0Myw4ICs2NDMsOSBAQAogCSAgICAgKFhGU19JU19PUVVPVEFfRU5GT1JDRUQoZHFwLT5xX21vdW50KSAmJgogCSAgICAgIChYRlNfUU1fSVNQRFEoZHFwKSB8fCBYRlNfUU1fSVNHRFEoZHFwKSkpKSkgewogI2lmZGVmIFFVT1RBREVCVUcKLQkJY21uX2VycihDRV9ERUJVRywgIkJMSyBSZXM6IG5ibGtzPSVsZCArIHJlc2Jjb3VudD0lTGQiCi0JCQkgICIgPiBoYXJkbGltaXQ9JUxkPyIsIG5ibGtzLCAqcmVzYmNvdW50cCwgaGFyZGxpbWl0KTsKKwkJeGZzX2RlYnVnKG1wLAorCQkJIkJMSyBSZXM6IG5ibGtzPSVsZCArIHJlc2Jjb3VudD0lTGQgPiBoYXJkbGltaXQ9JUxkPyIsCisJCQluYmxrcywgKnJlc2Jjb3VudHAsIGhhcmRsaW1pdCk7CiAjZW5kaWYKIAkJaWYgKG5ibGtzID4gMCkgewogCQkJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMgYi9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGY4ODg5Li4wMDAwMDAwCi0tLSBhL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzLDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2luY2x1ZGUgPHhmcy5oPgotI2luY2x1ZGUgImRlYnVnLmgiCi0KLS8qIHhmc19tb3VudC5oIGRyYWdzIGEgbG90IG9mIGNyYXAgaW4sIHNvcnJ5Li4gKi8KLSNpbmNsdWRlICJ4ZnNfc2IuaCIKLSNpbmNsdWRlICJ4ZnNfaW51bS5oIgotI2luY2x1ZGUgInhmc19hZy5oIgotI2luY2x1ZGUgInhmc19tb3VudC5oIgotI2luY2x1ZGUgInhmc19lcnJvci5oIgotCi12b2lkCi1jbW5fZXJyKAotCWNvbnN0IGNoYXIJKmx2bCwKLQljb25zdCBjaGFyCSpmbXQsCi0JLi4uKQotewotCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwotCXZhX2xpc3QJCWFyZ3M7Ci0KLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZhZi5mbXQgPSBmbXQ7Ci0JdmFmLnZhID0gJmFyZ3M7Ci0KLQlwcmludGsoIiVzJXBWIiwgbHZsLCAmdmFmKTsKLQl2YV9lbmQoYXJncyk7Ci0KLQlCVUdfT04oc3RybmNtcChsdmwsIEtFUk5fRU1FUkcsIHN0cmxlbihLRVJOX0VNRVJHKSkgPT0gMCk7Ci19Ci0KLXZvaWQKLXhmc19mc19jbW5fZXJyKAotCWNvbnN0IGNoYXIJCSpsdmwsCi0Jc3RydWN0IHhmc19tb3VudAkqbXAsCi0JY29uc3QgY2hhcgkJKmZtdCwKLQkuLi4pCi17Ci0Jc3RydWN0IHZhX2Zvcm1hdAl2YWY7Ci0JdmFfbGlzdAkJCWFyZ3M7Ci0KLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZhZi5mbXQgPSBmbXQ7Ci0JdmFmLnZhID0gJmFyZ3M7Ci0KLQlwcmludGsoIiVzRmlsZXN5c3RlbSAlczogJXBWIiwgbHZsLCBtcC0+bV9mc25hbWUsICZ2YWYpOwotCXZhX2VuZChhcmdzKTsKLQotCUJVR19PTihzdHJuY21wKGx2bCwgS0VSTl9FTUVSRywgc3RybGVuKEtFUk5fRU1FUkcpKSA9PSAwKTsKLX0KLQotLyogQWxsIGNhbGxlcnMgdG8geGZzX2Ntbl9lcnIgdXNlIENFX0FMRVJULCBzbyBkb24ndCBib3RoZXIgdGVzdGluZyBsdmwgKi8KLXZvaWQKLXhmc19jbW5fZXJyKAotCWludAkJCXBhbmljX3RhZywKLQljb25zdCBjaGFyCQkqbHZsLAotCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAotCWNvbnN0IGNoYXIJCSpmbXQsCi0JLi4uKQotewotCXN0cnVjdCB2YV9mb3JtYXQJdmFmOwotCXZhX2xpc3QJCQlhcmdzOwotCWludAkJCWRvX3BhbmljID0gMDsKLQotCWlmICh4ZnNfcGFuaWNfbWFzayAmJiAoeGZzX3BhbmljX21hc2sgJiBwYW5pY190YWcpKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUICJYRlM6IFRyYW5zZm9ybWluZyBhbiBhbGVydCBpbnRvIGEgQlVHLiIpOwotCQlkb19wYW5pYyA9IDE7Ci0JfQotCi0JdmFfc3RhcnQoYXJncywgZm10KTsKLQl2YWYuZm10ID0gZm10OwotCXZhZi52YSA9ICZhcmdzOwotCi0JcHJpbnRrKEtFUk5fQUxFUlQgIkZpbGVzeXN0ZW0gJXM6ICVwViIsIG1wLT5tX2ZzbmFtZSwgJnZhZik7Ci0JdmFfZW5kKGFyZ3MpOwotCi0JQlVHX09OKGRvX3BhbmljKTsKLX0KLQotdm9pZAotYXNzZmFpbChjaGFyICpleHByLCBjaGFyICpmaWxlLCBpbnQgbGluZSkKLXsKLQlwcmludGsoS0VSTl9DUklUICJBc3NlcnRpb24gZmFpbGVkOiAlcywgZmlsZTogJXMsIGxpbmU6ICVkXG4iLCBleHByLAotCSAgICAgICBmaWxlLCBsaW5lKTsKLQlCVUcoKTsKLX0KLQotdm9pZAoteGZzX2hleF9kdW1wKHZvaWQgKnAsIGludCBsZW5ndGgpCi17Ci0JcHJpbnRfaGV4X2R1bXAoS0VSTl9BTEVSVCwgIiIsIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCAxLCBwLCBsZW5ndGgsIDEpOwotfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvZGVidWcuaCBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1Njk5ZjYuLjAwMDAwMDAKLS0tIGEvZnMveGZzL3N1cHBvcnQvZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaWZuZGVmCV9fWEZTX1NVUFBPUlRfREVCVUdfSF9fCi0jZGVmaW5lCV9fWEZTX1NVUFBPUlRfREVCVUdfSF9fCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotc3RydWN0IHhmc19tb3VudDsKLQotI2RlZmluZSBDRV9ERUJVRyAgICAgICAgS0VSTl9ERUJVRwotI2RlZmluZSBDRV9DT05UICAgICAgICAgS0VSTl9JTkZPCi0jZGVmaW5lIENFX05PVEUgICAgICAgICBLRVJOX05PVElDRQotI2RlZmluZSBDRV9XQVJOICAgICAgICAgS0VSTl9XQVJOSU5HCi0jZGVmaW5lIENFX0FMRVJUICAgICAgICBLRVJOX0FMRVJUCi0jZGVmaW5lIENFX1BBTklDICAgICAgICBLRVJOX0VNRVJHCi0KLXZvaWQgY21uX2Vycihjb25zdCBjaGFyICpsdmwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotCQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Ci12b2lkIHhmc19mc19jbW5fZXJyKCBjb25zdCBjaGFyICpsdmwsIHN0cnVjdCB4ZnNfbW91bnQgKm1wLAotCQljb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwotdm9pZCB4ZnNfY21uX2VyciggaW50IHBhbmljX3RhZywgY29uc3QgY2hhciAqbHZsLCBzdHJ1Y3QgeGZzX21vdW50ICptcCwKLQkJY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKTsKLQotZXh0ZXJuIHZvaWQgYXNzZmFpbChjaGFyICpleHByLCBjaGFyICpmLCBpbnQgbCk7Ci0KLSNkZWZpbmUgQVNTRVJUX0FMV0FZUyhleHByKQlcCi0JKHVubGlrZWx5KGV4cHIpID8gKHZvaWQpMCA6IGFzc2ZhaWwoI2V4cHIsIF9fRklMRV9fLCBfX0xJTkVfXykpCi0KLSNpZm5kZWYgREVCVUcKLSNkZWZpbmUgQVNTRVJUKGV4cHIpCSgodm9pZCkwKQotCi0jaWZuZGVmIFNUQVRJQwotIyBkZWZpbmUgU1RBVElDIHN0YXRpYyBub2lubGluZQotI2VuZGlmCi0KLSNlbHNlIC8qIERFQlVHICovCi0KLSNkZWZpbmUgQVNTRVJUKGV4cHIpCVwKLQkodW5saWtlbHkoZXhwcikgPyAodm9pZCkwIDogYXNzZmFpbCgjZXhwciwgX19GSUxFX18sIF9fTElORV9fKSkKLQotI2lmbmRlZiBTVEFUSUMKLSMgZGVmaW5lIFNUQVRJQyBub2lubGluZQotI2VuZGlmCi0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmICAvKiBfX1hGU19TVVBQT1JUX0RFQlVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvYy5jIGIvZnMveGZzL3hmc19hbGxvYy5jCmluZGV4IGYzMjI3OTguLjRiYzNjNjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2FsbG9jLmMKQEAgLTE0NywxMCArMTQ3LDkgQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc19hbGxvY19jb21wdXRlX2FsaWduZWQoCisJeGZzX2FsbG9jX2FyZ190CSphcmdzLAkJLyogYWxsb2NhdGlvbiBhcmd1bWVudCBzdHJ1Y3R1cmUgKi8KIAl4ZnNfYWdibG9ja190CWZvdW5kYm5vLAkvKiBzdGFydGluZyBibG9jayBpbiBmb3VuZCBleHRlbnQgKi8KIAl4ZnNfZXh0bGVuX3QJZm91bmRsZW4sCS8qIGxlbmd0aCBpbiBmb3VuZCBleHRlbnQgKi8KLQl4ZnNfZXh0bGVuX3QJYWxpZ25tZW50LAkvKiBhbGlnbm1lbnQgZm9yIGFsbG9jYXRpb24gKi8KLQl4ZnNfZXh0bGVuX3QJbWlubGVuLAkJLyogbWluaW11bSBsZW5ndGggZm9yIGFsbG9jYXRpb24gKi8KIAl4ZnNfYWdibG9ja190CSpyZXNibm8sCS8qIHJlc3VsdCBibG9jayBudW1iZXIgKi8KIAl4ZnNfZXh0bGVuX3QJKnJlc2xlbikJLyogcmVzdWx0IGxlbmd0aCAqLwogewpAQCAtMTU4LDggKzE1Nyw4IEBACiAJeGZzX2V4dGxlbl90CWRpZmY7CiAJeGZzX2V4dGxlbl90CWxlbjsKIAotCWlmIChhbGlnbm1lbnQgPiAxICYmIGZvdW5kbGVuID49IG1pbmxlbikgewotCQlibm8gPSByb3VuZHVwKGZvdW5kYm5vLCBhbGlnbm1lbnQpOworCWlmIChhcmdzLT5hbGlnbm1lbnQgPiAxICYmIGZvdW5kbGVuID49IGFyZ3MtPm1pbmxlbikgeworCQlibm8gPSByb3VuZHVwKGZvdW5kYm5vLCBhcmdzLT5hbGlnbm1lbnQpOwogCQlkaWZmID0gYm5vIC0gZm91bmRibm87CiAJCWxlbiA9IGRpZmYgPj0gZm91bmRsZW4gPyAwIDogZm91bmRsZW4gLSBkaWZmOwogCX0gZWxzZSB7CkBAIC00NjQsNiArNDYzLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKK1NUQVRJQyBpbnQKK3hmc19hbGxvY191cGRhdGVfY291bnRlcnMoCisJc3RydWN0IHhmc190cmFucwkqdHAsCisJc3RydWN0IHhmc19wZXJhZwkqcGFnLAorCXN0cnVjdCB4ZnNfYnVmCQkqYWdicCwKKwlsb25nCQkJbGVuKQoreworCXN0cnVjdCB4ZnNfYWdmCQkqYWdmID0gWEZTX0JVRl9UT19BR0YoYWdicCk7CisKKwlwYWctPnBhZ2ZfZnJlZWJsa3MgKz0gbGVuOworCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZnJlZWJsa3MsIGxlbik7CisKKwl4ZnNfdHJhbnNfYWdibG9ja3NfZGVsdGEodHAsIGxlbik7CisJaWYgKHVubGlrZWx5KGJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZyZWVibGtzKSA+CisJCSAgICAgYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGVuZ3RoKSkpCisJCXJldHVybiBFRlNDT1JSVVBURUQ7CisKKwl4ZnNfYWxsb2NfbG9nX2FnZih0cCwgYWdicCwgWEZTX0FHRl9GUkVFQkxLUyk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBBbGxvY2F0aW9uIGdyb3VwIGxldmVsIGZ1bmN0aW9ucy4KICAqLwpAQCAtNTA1LDQ5ICs1MjUsNDQgQEAKIAkJQVNTRVJUKDApOwogCQkvKiBOT1RSRUFDSEVEICovCiAJfQotCWlmIChlcnJvcikKKworCWlmIChlcnJvciB8fCBhcmdzLT5hZ2JubyA9PSBOVUxMQUdCTE9DSykKIAkJcmV0dXJuIGVycm9yOwotCS8qCi0JICogSWYgdGhlIGFsbG9jYXRpb24gd29ya2VkLCBuZWVkIHRvIGNoYW5nZSB0aGUgYWdmIHN0cnVjdHVyZQotCSAqIChhbmQgbG9nIGl0KSwgYW5kIHRoZSBzdXBlcmJsb2NrLgotCSAqLwotCWlmIChhcmdzLT5hZ2JubyAhPSBOVUxMQUdCTE9DSykgewotCQl4ZnNfYWdmX3QJKmFnZjsJLyogYWxsb2NhdGlvbiBncm91cCBmcmVlbGlzdCBoZWFkZXIgKi8KLQkJbG9uZwkJc2xlbiA9IChsb25nKWFyZ3MtPmxlbjsKIAotCQlBU1NFUlQoYXJncy0+bGVuID49IGFyZ3MtPm1pbmxlbiAmJiBhcmdzLT5sZW4gPD0gYXJncy0+bWF4bGVuKTsKLQkJQVNTRVJUKCEoYXJncy0+d2FzZnJvbWZsKSB8fCAhYXJncy0+aXNmbCk7Ci0JCUFTU0VSVChhcmdzLT5hZ2JubyAlIGFyZ3MtPmFsaWdubWVudCA9PSAwKTsKLQkJaWYgKCEoYXJncy0+d2FzZnJvbWZsKSkgeworCUFTU0VSVChhcmdzLT5sZW4gPj0gYXJncy0+bWlubGVuKTsKKwlBU1NFUlQoYXJncy0+bGVuIDw9IGFyZ3MtPm1heGxlbik7CisJQVNTRVJUKCFhcmdzLT53YXNmcm9tZmwgfHwgIWFyZ3MtPmlzZmwpOworCUFTU0VSVChhcmdzLT5hZ2JubyAlIGFyZ3MtPmFsaWdubWVudCA9PSAwKTsKIAotCQkJYWdmID0gWEZTX0JVRl9UT19BR0YoYXJncy0+YWdicCk7Ci0JCQliZTMyX2FkZF9jcHUoJmFnZi0+YWdmX2ZyZWVibGtzLCAtKGFyZ3MtPmxlbikpOwotCQkJeGZzX3RyYW5zX2FnYmxvY2tzX2RlbHRhKGFyZ3MtPnRwLAotCQkJCQkJIC0oKGxvbmcpKGFyZ3MtPmxlbikpKTsKLQkJCWFyZ3MtPnBhZy0+cGFnZl9mcmVlYmxrcyAtPSBhcmdzLT5sZW47Ci0JCQlBU1NFUlQoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZnJlZWJsa3MpIDw9Ci0JCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGVuZ3RoKSk7Ci0JCQl4ZnNfYWxsb2NfbG9nX2FnZihhcmdzLT50cCwgYXJncy0+YWdicCwKLQkJCQkJCVhGU19BR0ZfRlJFRUJMS1MpOwotCQkJLyoKLQkJCSAqIFNlYXJjaCB0aGUgYnVzeWxpc3QgZm9yIHRoZXNlIGJsb2NrcyBhbmQgbWFyayB0aGUKLQkJCSAqIHRyYW5zYWN0aW9uIGFzIHN5bmNocm9ub3VzIGlmIGJsb2NrcyBhcmUgZm91bmQuIFRoaXMKLQkJCSAqIGF2b2lkcyB0aGUgbmVlZCB0byBibG9jayBkdWUgdG8gYSBzeW5jaHJvbm91cyBsb2cKLQkJCSAqIGZvcmNlIHRvIGVuc3VyZSBjb3JyZWN0IG9yZGVyaW5nIGFzIHRoZSBzeW5jaHJvbm91cwotCQkJICogdHJhbnNhY3Rpb24gd2lsbCBndWFyYW50ZWUgdGhhdCBmb3IgdXMuCi0JCQkgKi8KLQkJCWlmICh4ZnNfYWxsb2NfYnVzeV9zZWFyY2goYXJncy0+bXAsIGFyZ3MtPmFnbm8sCi0JCQkJCQlhcmdzLT5hZ2JubywgYXJncy0+bGVuKSkKLQkJCQl4ZnNfdHJhbnNfc2V0X3N5bmMoYXJncy0+dHApOwotCQl9Ci0JCWlmICghYXJncy0+aXNmbCkKLQkJCXhmc190cmFuc19tb2Rfc2IoYXJncy0+dHAsCi0JCQkJYXJncy0+d2FzZGVsID8gWEZTX1RSQU5TX1NCX1JFU19GREJMT0NLUyA6Ci0JCQkJCVhGU19UUkFOU19TQl9GREJMT0NLUywgLXNsZW4pOwotCQlYRlNfU1RBVFNfSU5DKHhzX2FsbG9jeCk7Ci0JCVhGU19TVEFUU19BREQoeHNfYWxsb2NiLCBhcmdzLT5sZW4pOworCWlmICghYXJncy0+d2FzZnJvbWZsKSB7CisJCWVycm9yID0geGZzX2FsbG9jX3VwZGF0ZV9jb3VudGVycyhhcmdzLT50cCwgYXJncy0+cGFnLAorCQkJCQkJICBhcmdzLT5hZ2JwLAorCQkJCQkJICAtKChsb25nKShhcmdzLT5sZW4pKSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKworCQkvKgorCQkgKiBTZWFyY2ggdGhlIGJ1c3lsaXN0IGZvciB0aGVzZSBibG9ja3MgYW5kIG1hcmsgdGhlCisJCSAqIHRyYW5zYWN0aW9uIGFzIHN5bmNocm9ub3VzIGlmIGJsb2NrcyBhcmUgZm91bmQuIFRoaXMKKwkJICogYXZvaWRzIHRoZSBuZWVkIHRvIGJsb2NrIGR1ZSB0byBhIHN5bmNocm9ub3VzIGxvZworCQkgKiBmb3JjZSB0byBlbnN1cmUgY29ycmVjdCBvcmRlcmluZyBhcyB0aGUgc3luY2hyb25vdXMKKwkJICogdHJhbnNhY3Rpb24gd2lsbCBndWFyYW50ZWUgdGhhdCBmb3IgdXMuCisJCSAqLworCQlpZiAoeGZzX2FsbG9jX2J1c3lfc2VhcmNoKGFyZ3MtPm1wLCBhcmdzLT5hZ25vLAorCQkJCQlhcmdzLT5hZ2JubywgYXJncy0+bGVuKSkKKwkJCXhmc190cmFuc19zZXRfc3luYyhhcmdzLT50cCk7CiAJfQotCXJldHVybiAwOworCisJaWYgKCFhcmdzLT5pc2ZsKSB7CisJCXhmc190cmFuc19tb2Rfc2IoYXJncy0+dHAsIGFyZ3MtPndhc2RlbCA/CisJCQkJIFhGU19UUkFOU19TQl9SRVNfRkRCTE9DS1MgOgorCQkJCSBYRlNfVFJBTlNfU0JfRkRCTE9DS1MsCisJCQkJIC0oKGxvbmcpKGFyZ3MtPmxlbikpKTsKKwl9CisKKwlYRlNfU1RBVFNfSU5DKHhzX2FsbG9jeCk7CisJWEZTX1NUQVRTX0FERCh4c19hbGxvY2IsIGFyZ3MtPmxlbik7CisJcmV0dXJuIGVycm9yOwogfQogCiAvKgpAQCAtNjkzLDggKzcwOCw3IEBACiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZXJyb3IwOwogCQlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhpID09IDEsIGVycm9yMCk7Ci0JCXhmc19hbGxvY19jb21wdXRlX2FsaWduZWQoKnNibm8sICpzbGVuLCBhcmdzLT5hbGlnbm1lbnQsCi0JCQkJCSAgYXJncy0+bWlubGVuLCAmYm5vLCBzbGVuYSk7CisJCXhmc19hbGxvY19jb21wdXRlX2FsaWduZWQoYXJncywgKnNibm8sICpzbGVuLCAmYm5vLCBzbGVuYSk7CiAKIAkJLyoKIAkJICogVGhlIGdvb2QgZXh0ZW50IGlzIGNsb3NlciB0aGFuIHRoaXMgb25lLgpAQCAtODY2LDggKzg4MCw4IEBACiAJCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2dldF9yZWMoY250X2N1ciwgJmx0Ym5vLCAmbHRsZW4sICZpKSkpCiAJCQkJZ290byBlcnJvcjA7CiAJCQlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhpID09IDEsIGVycm9yMCk7Ci0JCQl4ZnNfYWxsb2NfY29tcHV0ZV9hbGlnbmVkKGx0Ym5vLCBsdGxlbiwgYXJncy0+YWxpZ25tZW50LAotCQkJCQlhcmdzLT5taW5sZW4sICZsdGJub2EsICZsdGxlbmEpOworCQkJeGZzX2FsbG9jX2NvbXB1dGVfYWxpZ25lZChhcmdzLCBsdGJubywgbHRsZW4sCisJCQkJCQkgICZsdGJub2EsICZsdGxlbmEpOwogCQkJaWYgKGx0bGVuYSA8IGFyZ3MtPm1pbmxlbikKIAkJCQljb250aW51ZTsKIAkJCWFyZ3MtPmxlbiA9IFhGU19FWFRMRU5fTUlOKGx0bGVuYSwgYXJncy0+bWF4bGVuKTsKQEAgLTk4Nyw4ICsxMDAxLDggQEAKIAkJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZ2V0X3JlYyhibm9fY3VyX2x0LCAmbHRibm8sICZsdGxlbiwgJmkpKSkKIAkJCQlnb3RvIGVycm9yMDsKIAkJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKGkgPT0gMSwgZXJyb3IwKTsKLQkJCXhmc19hbGxvY19jb21wdXRlX2FsaWduZWQobHRibm8sIGx0bGVuLCBhcmdzLT5hbGlnbm1lbnQsCi0JCQkJCWFyZ3MtPm1pbmxlbiwgJmx0Ym5vYSwgJmx0bGVuYSk7CisJCQl4ZnNfYWxsb2NfY29tcHV0ZV9hbGlnbmVkKGFyZ3MsIGx0Ym5vLCBsdGxlbiwKKwkJCQkJCSAgJmx0Ym5vYSwgJmx0bGVuYSk7CiAJCQlpZiAobHRsZW5hID49IGFyZ3MtPm1pbmxlbikKIAkJCQlicmVhazsKIAkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfZGVjcmVtZW50KGJub19jdXJfbHQsIDAsICZpKSkpCkBAIC0xMDAzLDggKzEwMTcsOCBAQAogCQkJaWYgKChlcnJvciA9IHhmc19hbGxvY19nZXRfcmVjKGJub19jdXJfZ3QsICZndGJubywgJmd0bGVuLCAmaSkpKQogCQkJCWdvdG8gZXJyb3IwOwogCQkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oaSA9PSAxLCBlcnJvcjApOwotCQkJeGZzX2FsbG9jX2NvbXB1dGVfYWxpZ25lZChndGJubywgZ3RsZW4sIGFyZ3MtPmFsaWdubWVudCwKLQkJCQkJYXJncy0+bWlubGVuLCAmZ3Ribm9hLCAmZ3RsZW5hKTsKKwkJCXhmc19hbGxvY19jb21wdXRlX2FsaWduZWQoYXJncywgZ3Ribm8sIGd0bGVuLAorCQkJCQkJICAmZ3Ribm9hLCAmZ3RsZW5hKTsKIAkJCWlmIChndGxlbmEgPj0gYXJncy0+bWlubGVuKQogCQkJCWJyZWFrOwogCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9pbmNyZW1lbnQoYm5vX2N1cl9ndCwgMCwgJmkpKSkKQEAgLTExODMsOCArMTE5Nyw3IEBACiAJICogb25jZSBhbGlnbmVkOyBpZiBub3QsIHdlIHNlYXJjaCBsZWZ0IGZvciBzb21ldGhpbmcgYmV0dGVyLgogCSAqIFRoaXMgY2FuJ3QgaGFwcGVuIGluIHRoZSBzZWNvbmQgY2FzZSBhYm92ZS4KIAkgKi8KLQl4ZnNfYWxsb2NfY29tcHV0ZV9hbGlnbmVkKGZibm8sIGZsZW4sIGFyZ3MtPmFsaWdubWVudCwgYXJncy0+bWlubGVuLAotCQkmcmJubywgJnJsZW4pOworCXhmc19hbGxvY19jb21wdXRlX2FsaWduZWQoYXJncywgZmJubywgZmxlbiwgJnJibm8sICZybGVuKTsKIAlybGVuID0gWEZTX0VYVExFTl9NSU4oYXJncy0+bWF4bGVuLCBybGVuKTsKIAlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhybGVuID09IDAgfHwKIAkJCShybGVuIDw9IGZsZW4gJiYgcmJubyArIHJsZW4gPD0gZmJubyArIGZsZW4pLCBlcnJvcjApOwpAQCAtMTIwOSw4ICsxMjIyLDggQEAKIAkJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKGkgPT0gMSwgZXJyb3IwKTsKIAkJCWlmIChmbGVuIDwgYmVzdHJsZW4pCiAJCQkJYnJlYWs7Ci0JCQl4ZnNfYWxsb2NfY29tcHV0ZV9hbGlnbmVkKGZibm8sIGZsZW4sIGFyZ3MtPmFsaWdubWVudCwKLQkJCQlhcmdzLT5taW5sZW4sICZyYm5vLCAmcmxlbik7CisJCQl4ZnNfYWxsb2NfY29tcHV0ZV9hbGlnbmVkKGFyZ3MsIGZibm8sIGZsZW4sCisJCQkJCQkgICZyYm5vLCAmcmxlbik7CiAJCQlybGVuID0gWEZTX0VYVExFTl9NSU4oYXJncy0+bWF4bGVuLCBybGVuKTsKIAkJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKHJsZW4gPT0gMCB8fAogCQkJCShybGVuIDw9IGZsZW4gJiYgcmJubyArIHJsZW4gPD0gZmJubyArIGZsZW4pLApAQCAtMTM4OCw2ICsxNDAxLDcgQEAKIAl4ZnNfbW91bnRfdAkqbXA7CQkvKiBtb3VudCBwb2ludCBzdHJ1Y3QgZm9yIGZpbGVzeXN0ZW0gKi8KIAl4ZnNfYWdibG9ja190CW5ibm87CQkvKiBuZXcgc3RhcnRpbmcgYmxvY2sgb2YgZnJlZXNwYWNlICovCiAJeGZzX2V4dGxlbl90CW5sZW47CQkvKiBuZXcgbGVuZ3RoIG9mIGZyZWVzcGFjZSAqLworCXhmc19wZXJhZ190CSpwYWc7CQkvKiBwZXIgYWxsb2NhdGlvbiBncm91cCBkYXRhICovCiAKIAltcCA9IHRwLT50X21vdW50cDsKIAkvKgpAQCAtMTU4NiwzMCArMTYwMCwyMCBAQAogCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKGkgPT0gMSwgZXJyb3IwKTsKIAl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjbnRfY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7CiAJY250X2N1ciA9IE5VTEw7CisKIAkvKgogCSAqIFVwZGF0ZSB0aGUgZnJlZXNwYWNlIHRvdGFscyBpbiB0aGUgYWcgYW5kIHN1cGVyYmxvY2suCiAJICovCi0JewotCQl4ZnNfYWdmX3QJKmFnZjsKLQkJeGZzX3BlcmFnX3QJKnBhZzsJCS8qIHBlciBhbGxvY2F0aW9uIGdyb3VwIGRhdGEgKi8KKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwllcnJvciA9IHhmc19hbGxvY191cGRhdGVfY291bnRlcnModHAsIHBhZywgYWdicCwgbGVuKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yMDsKIAotCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKLQkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKLQkJeGZzX3BlcmFnX3B1dChwYWcpOwotCi0JCWFnZiA9IFhGU19CVUZfVE9fQUdGKGFnYnApOwotCQliZTMyX2FkZF9jcHUoJmFnZi0+YWdmX2ZyZWVibGtzLCBsZW4pOwotCQl4ZnNfdHJhbnNfYWdibG9ja3NfZGVsdGEodHAsIGxlbik7Ci0JCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKAotCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfZnJlZWJsa3MpIDw9Ci0JCQliZTMyX3RvX2NwdShhZ2YtPmFnZl9sZW5ndGgpLAotCQkJZXJyb3IwKTsKLQkJeGZzX2FsbG9jX2xvZ19hZ2YodHAsIGFnYnAsIFhGU19BR0ZfRlJFRUJMS1MpOwotCQlpZiAoIWlzZmwpCi0JCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfRkRCTE9DS1MsIChsb25nKWxlbik7Ci0JCVhGU19TVEFUU19JTkMoeHNfZnJlZXgpOwotCQlYRlNfU1RBVFNfQUREKHhzX2ZyZWViLCBsZW4pOwotCX0KKwlpZiAoIWlzZmwpCisJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9GREJMT0NLUywgKGxvbmcpbGVuKTsKKwlYRlNfU1RBVFNfSU5DKHhzX2ZyZWV4KTsKKwlYRlNfU1RBVFNfQUREKHhzX2ZyZWViLCBsZW4pOwogCiAJdHJhY2VfeGZzX2ZyZWVfZXh0ZW50KG1wLCBhZ25vLCBibm8sIGxlbiwgaXNmbCwgaGF2ZWxlZnQsIGhhdmVyaWdodCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5jIGIvZnMveGZzL3hmc19ibWFwLmMKaW5kZXggZGMzYWZkNzcuLmZhMDA3ODggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC0yMzY1LDYgKzIzNjUsMTMgQEAKIAkgKi8KIAlpZiAocmFsZW4gKiBtcC0+bV9zYi5zYl9yZXh0c2l6ZSA+PSBNQVhFWFRMRU4pCiAJCXJhbGVuID0gTUFYRVhUTEVOIC8gbXAtPm1fc2Iuc2JfcmV4dHNpemU7CisKKwkvKgorCSAqIExvY2sgb3V0IG90aGVyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFJUIGJpdG1hcCBpbm9kZS4KKwkgKi8KKwl4ZnNfaWxvY2sobXAtPm1fcmJtaXAsIFhGU19JTE9DS19FWENMKTsKKwl4ZnNfdHJhbnNfaWpvaW5fcmVmKGFwLT50cCwgbXAtPm1fcmJtaXAsIFhGU19JTE9DS19FWENMKTsKKwogCS8qCiAJICogSWYgaXQncyBhbiBhbGxvY2F0aW9uIHRvIGFuIGVtcHR5IGZpbGUgYXQgb2Zmc2V0IDAsCiAJICogcGljayBhbiBleHRlbnQgdGhhdCB3aWxsIHNwYWNlIHRoaW5ncyBvdXQgaW4gdGhlIHJ0IGFyZWEuCkBAIC0zNTE5LDcgKzM1MjYsNyBAQAogCiAJaWYgKHVubGlrZWx5KCEoZ290cC0+YnJfc3RhcnRibG9jaykgJiYgKCpsYXN0eHAgIT0gTlVMTEVYVE5VTSkgJiYKIAkJICAgICAhKFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkgJiYgZm9yayA9PSBYRlNfREFUQV9GT1JLKSkpIHsKLQkJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfRlNCTE9DS19aRVJPLCBDRV9BTEVSVCwgaXAtPmlfbW91bnQsCisJCXhmc19hbGVydF90YWcoaXAtPmlfbW91bnQsIFhGU19QVEFHX0ZTQkxPQ0tfWkVSTywKIAkJCQkiQWNjZXNzIHRvIGJsb2NrIHplcm8gaW4gaW5vZGUgJWxsdSAiCiAJCQkJInN0YXJ0X2Jsb2NrOiAlbGx4IHN0YXJ0X29mZjogJWxseCAiCiAJCQkJImJsa2NudDogJWxseCBleHRlbnQtc3RhdGU6ICV4IGxhc3R4OiAleFxuIiwKQEAgLTQxOTMsMTIgKzQyMDAsMTEgQEAKIAkJbnVtX3JlY3MgPSB4ZnNfYnRyZWVfZ2V0X251bXJlY3MoYmxvY2spOwogCQlpZiAodW5saWtlbHkoaSArIG51bV9yZWNzID4gcm9vbSkpIHsKIAkJCUFTU0VSVChpICsgbnVtX3JlY3MgPD0gcm9vbSk7Ci0JCQl4ZnNfZnNfcmVwYWlyX2Ntbl9lcnIoQ0VfV0FSTiwgaXAtPmlfbW91bnQsCisJCQl4ZnNfd2FybihpcC0+aV9tb3VudCwKIAkJCQkiY29ycnVwdCBkaW5vZGUgJUx1LCAoYnRyZWUgZXh0ZW50cykuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBpcC0+aV9pbm8pOwotCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2JtYXBfcmVhZF9leHRlbnRzKDEpIiwKLQkJCQkJIFhGU19FUlJMRVZFTF9MT1csCi0JCQkJCWlwLT5pX21vdW50KTsKKwkJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfYm1hcF9yZWFkX2V4dGVudHMoMSkiLAorCQkJCVhGU19FUlJMRVZFTF9MT1csIGlwLT5pX21vdW50LCBibG9jayk7CiAJCQlnb3RvIGVycm9yMDsKIAkJfQogCQlYRlNfV0FOVF9DT1JSVVBURURfR09UTygKQEAgLTU3NzIsNyArNTc3OCw3IEBACiAJCQllbHNlCiAJCQkJdGhpc3BhID0gWEZTX0JNQlRfUFRSX0FERFIobXAsIGJsb2NrLCBqLCBkbXhyKTsKIAkJCWlmICgqdGhpc3BhID09ICpwcCkgewotCQkJCWNtbl9lcnIoQ0VfV0FSTiwgIiVzOiB0aGlzcGEoJWQpID09IHBwKCVkKSAlTGQiLAorCQkJCXhmc193YXJuKG1wLCAiJXM6IHRoaXNwYSglZCkgPT0gcHAoJWQpICVMZCIsCiAJCQkJCV9fZnVuY19fLCBqLCBpLAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KCp0aGlzcGEpKTsKIAkJCQlwYW5pYygiJXM6IHB0cnMgYXJlIGVxdWFsIGluIG5vZGVcbiIsCkBAIC01OTM3LDExICs1OTQzLDExIEBACiAJcmV0dXJuOwogCiBlcnJvcjA6Ci0JY21uX2VycihDRV9XQVJOLCAiJXM6IGF0IGVycm9yMCIsIF9fZnVuY19fKTsKKwl4ZnNfd2FybihtcCwgIiVzOiBhdCBlcnJvcjAiLCBfX2Z1bmNfXyk7CiAJaWYgKGJwX3JlbGVhc2UpCiAJCXhmc190cmFuc19icmVsc2UoTlVMTCwgYnApOwogZXJyb3Jfbm9yZWxzZToKLQljbW5fZXJyKENFX1dBUk4sICIlczogQkFEIGFmdGVyIGJ0cmVlIGxlYXZlcyBmb3IgJWQgZXh0ZW50cyIsCisJeGZzX3dhcm4obXAsICIlczogQkFEIGFmdGVyIGJ0cmVlIGxlYXZlcyBmb3IgJWQgZXh0ZW50cyIsCiAJCV9fZnVuY19fLCBpKTsKIAlwYW5pYygiJXM6IENPUlJVUFRFRCBCVFJFRSBPUiBTT01FVEhJTkciLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwpAQCAtNjE0NCw3ICs2MTUwLDcgQEAKIAkJaWYgKGVycm9yKSB7CiAJCQkvKiBzb21ldGhpbmcgc2NyZXdlZCwganVzdCBiYWlsICovCiAJCQlpZiAoIVhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7Ci0JCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIGlwLT5pX21vdW50LAorCQkJCXhmc19hbGVydChpcC0+aV9tb3VudCwKIAkJCSJGYWlsZWQgZGVsYWxsb2MgbWFwcGluZyBsb29rdXAgaW5vICVsbGQgZnNiICVsbGQuIiwKIAkJCQkJCWlwLT5pX2lubywgc3RhcnRfZnNiKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCA2ZjhjMjFjLi5lNTQxM2Q5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC0xMzAsMTAgKzEzMCwxMiBAQAogCW9yaWcgPSBiaXAtPmJsaV9vcmlnOwogCWJ1ZmZlciA9IFhGU19CVUZfUFRSKGJwKTsKIAlmb3IgKHggPSAwOyB4IDwgWEZTX0JVRl9DT1VOVChicCk7IHgrKykgewotCQlpZiAob3JpZ1t4XSAhPSBidWZmZXJbeF0gJiYgIWJ0c3QoYmlwLT5ibGlfbG9nZ2VkLCB4KSkKLQkJCWNtbl9lcnIoQ0VfUEFOSUMsCi0JInhmc19idWZfaXRlbV9sb2dfY2hlY2sgYmlwICV4IGJ1ZmZlciAleCBvcmlnICV4IGluZGV4ICVkIiwKLQkJCQliaXAsIGJwLCBvcmlnLCB4KTsKKwkJaWYgKG9yaWdbeF0gIT0gYnVmZmVyW3hdICYmICFidHN0KGJpcC0+YmxpX2xvZ2dlZCwgeCkpIHsKKwkJCXhmc19lbWVyZyhicC0+Yl9tb3VudCwKKwkJCQkiJXM6IGJpcCAleCBidWZmZXIgJXggb3JpZyAleCBpbmRleCAlZCIsCisJCQkJX19mdW5jX18sIGJpcCwgYnAsIG9yaWcsIHgpOworCQkJQVNTRVJUKDApOworCQl9CiAJfQogfQogI2Vsc2UKQEAgLTk4MywxMCArOTg1LDkgQEAKIAlpZiAoWEZTX0JVRl9UQVJHRVQoYnApICE9IGxhc3R0YXJnIHx8CiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgKGxhc3R0aW1lICsgNSpIWikpKSB7CiAJCWxhc3R0aW1lID0gamlmZmllczsKLQkJY21uX2VycihDRV9BTEVSVCwgIkRldmljZSAlcywgWEZTIG1ldGFkYXRhIHdyaXRlIGVycm9yIgotCQkJCSIgYmxvY2sgMHglbGx4IGluICVzIiwKKwkJeGZzX2FsZXJ0KG1wLCAiRGV2aWNlICVzOiBtZXRhZGF0YSB3cml0ZSBlcnJvciBibG9jayAweCVsbHgiLAogCQkJWEZTX0JVRlRBUkdfTkFNRShYRlNfQlVGX1RBUkdFVChicCkpLAotCQkgICAgICAoX191aW50NjRfdClYRlNfQlVGX0FERFIoYnApLCBtcC0+bV9mc25hbWUpOworCQkgICAgICAoX191aW50NjRfdClYRlNfQlVGX0FERFIoYnApKTsKIAl9CiAJbGFzdHRhcmcgPSBYRlNfQlVGX1RBUkdFVChicCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwppbmRleCAxYzAwYmVkLi42MTAyYWM2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCkBAIC0xOTk1LDEzICsxOTk1LDEyIEBACiAJCWVycm9yID0gbWFwcGVkYm5vID09IC0yID8gMCA6IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCQlpZiAodW5saWtlbHkoZXJyb3IgPT0gRUZTQ09SUlVQVEVEKSkgewogCQkJaWYgKHhmc19lcnJvcl9sZXZlbCA+PSBYRlNfRVJSTEVWRUxfTE9XKSB7Ci0JCQkJY21uX2VycihDRV9BTEVSVCwgInhmc19kYV9kb19idWY6IGJubyAlbGxkXG4iLAotCQkJCQkobG9uZyBsb25nKWJubyk7Ci0JCQkJY21uX2VycihDRV9BTEVSVCwgImRpcjogaW5vZGUgJWxsZFxuIiwKKwkJCQl4ZnNfYWxlcnQobXAsICIlczogYm5vICVsbGQgZGlyOiBpbm9kZSAlbGxkIiwKKwkJCQkJX19mdW5jX18sIChsb25nIGxvbmcpYm5vLAogCQkJCQkobG9uZyBsb25nKWRwLT5pX2lubyk7CiAJCQkJZm9yIChpID0gMDsgaSA8IG5tYXA7IGkrKykgewotCQkJCQljbW5fZXJyKENFX0FMRVJULAotCQkJCQkJIlslMDJkXSBicl9zdGFydG9mZiAlbGxkIGJyX3N0YXJ0YmxvY2sgJWxsZCBicl9ibG9ja2NvdW50ICVsbGQgYnJfc3RhdGUgJWRcbiIsCisJCQkJCXhmc19hbGVydChtcCwKKyJbJTAyZF0gYnJfc3RhcnRvZmYgJWxsZCBicl9zdGFydGJsb2NrICVsbGQgYnJfYmxvY2tjb3VudCAlbGxkIGJyX3N0YXRlICVkIiwKIAkJCQkJCWksCiAJCQkJCQkobG9uZyBsb25nKW1hcHBbaV0uYnJfc3RhcnRvZmYsCiAJCQkJCQkobG9uZyBsb25nKW1hcHBbaV0uYnJfc3RhcnRibG9jaywKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCBlNjA0OTBiLi5iZTYyODY3NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kZnJhZy5jCisrKyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwpAQCAtMjcwLDkgKzI3MCw5IEBACiAJLyogY2hlY2sgaW5vZGUgZm9ybWF0cyBub3cgdGhhdCBkYXRhIGlzIGZsdXNoZWQgKi8KIAllcnJvciA9IHhmc19zd2FwX2V4dGVudHNfY2hlY2tfZm9ybWF0KGlwLCB0aXApOwogCWlmIChlcnJvcikgewotCQl4ZnNfZnNfY21uX2VycihDRV9OT1RFLCBtcCwKKwkJeGZzX25vdGljZShtcCwKIAkJICAgICIlczogaW5vZGUgMHglbGx4IGZvcm1hdCBpcyBpbmNvbXBhdGlibGUgZm9yIGV4Y2hhbmdpbmcuIiwKLQkJCQlfX0ZJTEVfXywgaXAtPmlfaW5vKTsKKwkJCQlfX2Z1bmNfXywgaXAtPmlfaW5vKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyLmMgYi9mcy94ZnMveGZzX2RpcjIuYwppbmRleCBhMTMyMWJjLi5kYmE3YTcxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjIuYworKysgYi9mcy94ZnMveGZzX2RpcjIuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJCVhGU19BR0lOT19UT19JTk8obXAsIGFnbm8sIGFnaW5vKSA9PSBpbm87CiAJaWYgKHVubGlrZWx5KFhGU19URVNUX0VSUk9SKCFpbm9fb2ssIG1wLCBYRlNfRVJSVEFHX0RJUl9JTk9fVkFMSURBVEUsCiAJCQlYRlNfUkFORE9NX0RJUl9JTk9fVkFMSURBVEUpKSkgewotCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwgIkludmFsaWQgaW5vZGUgbnVtYmVyIDB4JUx4IiwKKwkJeGZzX3dhcm4obXAsICJJbnZhbGlkIGlub2RlIG51bWJlciAweCVMeCIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5vKTsKIAkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2Rpcl9pbm9fdmFsaWRhdGUiLCBYRlNfRVJSTEVWRUxfTE9XLCBtcCk7CiAJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCmluZGV4IGY5YTA4NjQuLmEwYWFiN2QgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwpAQCAtODk5LDEwICs4OTksOSBAQAogCWlmKGJsazItPmluZGV4IDwgMCkgewogCQlzdGF0ZS0+aW5sZWFmID0gMTsKIAkJYmxrMi0+aW5kZXggPSAwOwotCQljbW5fZXJyKENFX0FMRVJULAotCQkJInhmc19kaXIyX2xlYWZuX3JlYmFsYW5jZTogcGlja2VkIHRoZSB3cm9uZyBsZWFmPyByZXZlcnRpbmcgb3JpZ2luYWwgbGVhZjogIgotCQkJImJsazEtPmluZGV4ICVkXG4iLAotCQkJYmxrMS0+aW5kZXgpOworCQl4ZnNfYWxlcnQoYXJncy0+ZHAtPmlfbW91bnQsCisJIiVzOiBwaWNrZWQgdGhlIHdyb25nIGxlYWY/IHJldmVydGluZyBvcmlnaW5hbCBsZWFmOiBibGsxLT5pbmRleCAlZFxuIiwKKwkJCV9fZnVuY19fLCBibGsxLT5pbmRleCk7CiAJfQogfQogCkBAIC0xNjQxLDI2ICsxNjQwLDIyIEBACiAJCQl9CiAKIAkJCWlmICh1bmxpa2VseSh4ZnNfZGlyMl9kYl90b19mZGIobXAsIGRibm8pICE9IGZibm8pKSB7Ci0JCQkJY21uX2VycihDRV9BTEVSVCwKLQkJCQkJInhmc19kaXIyX25vZGVfYWRkbmFtZV9pbnQ6IGRpciBpbm8gIgotCQkJCQkiJWxsdSBuZWVkZWQgZnJlZXNwIGJsb2NrICVsbGQgZm9yXG4iCi0JCQkJCSIgIGRhdGEgYmxvY2sgJWxsZCwgZ290ICVsbGRcbiIKLQkJCQkJIiAgaWZibm8gJWxsdSBsYXN0ZmJubyAlZFxuIiwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylkcC0+aV9pbm8sCisJCQkJeGZzX2FsZXJ0KG1wLAorCQkJIiVzOiBkaXIgaW5vICIgIiVsbHUgbmVlZGVkIGZyZWVzcCBibG9jayAlbGxkIGZvclxuIgorCQkJIiAgZGF0YSBibG9jayAlbGxkLCBnb3QgJWxsZCBpZmJubyAlbGx1IGxhc3RmYm5vICVkIiwKKwkJCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpZHAtPmlfaW5vLAogCQkJCQkobG9uZyBsb25nKXhmc19kaXIyX2RiX3RvX2ZkYihtcCwgZGJubyksCiAJCQkJCShsb25nIGxvbmcpZGJubywgKGxvbmcgbG9uZylmYm5vLAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWlmYm5vLCBsYXN0ZmJubyk7CiAJCQkJaWYgKGZibGspIHsKLQkJCQkJY21uX2VycihDRV9BTEVSVCwKLQkJCQkJCSIgZmJsayAweCVwIGJsa25vICVsbHUgIgotCQkJCQkJImluZGV4ICVkIG1hZ2ljIDB4JXhcbiIsCisJCQkJCXhmc19hbGVydChtcCwKKwkJCQkiIGZibGsgMHglcCBibGtubyAlbGx1IGluZGV4ICVkIG1hZ2ljIDB4JXgiLAogCQkJCQkJZmJsaywKIAkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZmJsay0+Ymxrbm8sCiAJCQkJCQlmYmxrLT5pbmRleCwKIAkJCQkJCWZibGstPm1hZ2ljKTsKIAkJCQl9IGVsc2UgewotCQkJCQljbW5fZXJyKENFX0FMRVJULAotCQkJCQkJIiAuLi4gZmJsayBpcyBOVUxMXG4iKTsKKwkJCQkJeGZzX2FsZXJ0KG1wLCAiIC4uLiBmYmxrIGlzIE5VTEwiKTsKIAkJCQl9CiAJCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2RpcjJfbm9kZV9hZGRuYW1lX2ludCIsCiAJCQkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19lcnJvci5jIGIvZnMveGZzL3hmc19lcnJvci5jCmluZGV4IDRjN2RiNzQuLjM5ZjA2MzMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXJyb3IuYworKysgYi9mcy94ZnMveGZzX2Vycm9yLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJCWJyZWFrOwogCQlpZiAoZSAhPSB4ZnNfZXRyYXBbaV0pCiAJCQljb250aW51ZTsKLQkJY21uX2VycihDRV9OT1RFLCAieGZzX2Vycm9yX3RyYXA6IGVycm9yICVkIiwgZSk7CisJCXhmc19ub3RpY2UoTlVMTCwgIiVzOiBlcnJvciAlZCIsIF9fZnVuY19fLCBlKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwogCX0KQEAgLTc0LDcgKzc0LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBYRlNfTlVNX0lOSkVDVF9FUlJPUjsgaSsrKSAgewogCQlpZiAoeGZzX2V0ZXN0W2ldID09IGVycm9yX3RhZyAmJiB4ZnNfZXRlc3RfZnNpZFtpXSA9PSBmc2lkKSB7Ci0JCQljbW5fZXJyKENFX1dBUk4sCisJCQl4ZnNfd2FybihOVUxMLAogCSJJbmplY3RpbmcgZXJyb3IgKCVzKSBhdCBmaWxlICVzLCBsaW5lICVkLCBvbiBmaWxlc3lzdGVtIFwiJXNcIiIsCiAJCQkJZXhwcmVzc2lvbiwgZmlsZSwgbGluZSwgeGZzX2V0ZXN0X2ZzbmFtZVtpXSk7CiAJCQlyZXR1cm4gMTsKQEAgLTk1LDE0ICs5NSwxNCBAQAogCiAJZm9yIChpID0gMDsgaSA8IFhGU19OVU1fSU5KRUNUX0VSUk9SOyBpKyspICB7CiAJCWlmICh4ZnNfZXRlc3RfZnNpZFtpXSA9PSBmc2lkICYmIHhmc19ldGVzdFtpXSA9PSBlcnJvcl90YWcpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUyBlcnJvciB0YWcgIyVkIG9uIiwgZXJyb3JfdGFnKTsKKwkJCXhmc193YXJuKG1wLCAiZXJyb3IgdGFnICMlZCBvbiIsIGVycm9yX3RhZyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBYRlNfTlVNX0lOSkVDVF9FUlJPUjsgaSsrKSAgewogCQlpZiAoeGZzX2V0ZXN0W2ldID09IDApIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwgIlR1cm5lZCBvbiBYRlMgZXJyb3IgdGFnICMlZCIsCisJCQl4ZnNfd2FybihtcCwgIlR1cm5lZCBvbiBYRlMgZXJyb3IgdGFnICMlZCIsCiAJCQkJZXJyb3JfdGFnKTsKIAkJCXhmc19ldGVzdFtpXSA9IGVycm9yX3RhZzsKIAkJCXhmc19ldGVzdF9mc2lkW2ldID0gZnNpZDsKQEAgLTExNCw3ICsxMTQsNyBAQAogCQl9CiAJfQogCi0JY21uX2VycihDRV9XQVJOLCAiZXJyb3IgdGFnIG92ZXJmbG93LCB0b28gbWFueSB0dXJuZWQgb24iKTsKKwl4ZnNfd2FybihtcCwgImVycm9yIHRhZyBvdmVyZmxvdywgdG9vIG1hbnkgdHVybmVkIG9uIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTEzMyw3ICsxMzMsNyBAQAogCQlpZiAoKGZzaWQgPT0gMExMIHx8IHhmc19ldGVzdF9mc2lkW2ldID09IGZzaWQpICYmCiAJCSAgICAgeGZzX2V0ZXN0W2ldICE9IDApIHsKIAkJCWNsZWFyZWQgPSAxOwotCQkJY21uX2VycihDRV9XQVJOLCAiQ2xlYXJpbmcgWEZTIGVycm9yIHRhZyAjJWQiLAorCQkJeGZzX3dhcm4obXAsICJDbGVhcmluZyBYRlMgZXJyb3IgdGFnICMlZCIsCiAJCQkJeGZzX2V0ZXN0W2ldKTsKIAkJCXhmc19ldGVzdFtpXSA9IDA7CiAJCQl4ZnNfZXRlc3RfZnNpZFtpXSA9IDBMTDsKQEAgLTE0NCw5ICsxNDQsNyBAQAogCX0KIAogCWlmIChsb3VkIHx8IGNsZWFyZWQpCi0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJDbGVhcmVkIGFsbCBYRlMgZXJyb3IgdGFncyBmb3IgZmlsZXN5c3RlbSBcIiVzXCIiLAotCQkJbXAtPm1fZnNuYW1lKTsKKwkJeGZzX3dhcm4obXAsICJDbGVhcmVkIGFsbCBYRlMgZXJyb3IgdGFncyBmb3IgZmlsZXN5c3RlbSIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjIsOSArMTYwLDggQEAKIAlpbnN0X3QJCQkqcmEpCiB7CiAJaWYgKGxldmVsIDw9IHhmc19lcnJvcl9sZXZlbCkgewotCQl4ZnNfY21uX2VycihYRlNfUFRBR19FUlJPUl9SRVBPUlQsCi0JCQkgICAgQ0VfQUxFUlQsIG1wLAotCQkiWEZTIGludGVybmFsIGVycm9yICVzIGF0IGxpbmUgJWQgb2YgZmlsZSAlcy4gIENhbGxlciAweCVwXG4iLAorCQl4ZnNfYWxlcnRfdGFnKG1wLCBYRlNfUFRBR19FUlJPUl9SRVBPUlQsCisJCSJJbnRlcm5hbCBlcnJvciAlcyBhdCBsaW5lICVkIG9mIGZpbGUgJXMuICBDYWxsZXIgMHglcFxuIiwKIAkJCSAgICB0YWcsIGxpbmVudW0sIGZpbGVuYW1lLCByYSk7CiAKIAkJeGZzX3N0YWNrX3RyYWNlKCk7CkBAIC0xODQsNCArMTgxLDUgQEAKIAlpZiAobGV2ZWwgPD0geGZzX2Vycm9yX2xldmVsKQogCQl4ZnNfaGV4X2R1bXAocCwgMTYpOwogCXhmc19lcnJvcl9yZXBvcnQodGFnLCBsZXZlbCwgbXAsIGZpbGVuYW1lLCBsaW5lbnVtLCByYSk7CisJeGZzX2FsZXJ0KG1wLCAiQ29ycnVwdGlvbiBkZXRlY3RlZC4gVW5tb3VudCBhbmQgcnVuIHhmc19yZXBhaXIiKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXJyb3IuaCBiL2ZzL3hmcy94ZnNfZXJyb3IuaAppbmRleCAxMGRjZTU0Li4wNzlhMzY3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Vycm9yLmgKKysrIGIvZnMveGZzL3hmc19lcnJvci5oCkBAIC0xNDUsMTAgKzE0NSw4IEBACiAjZW5kaWYgLyogREVCVUcgKi8KIAogLyoKLSAqIFhGUyBwYW5pYyB0YWdzIC0tIGFsbG93IGEgY2FsbCB0byB4ZnNfY21uX2VycigpIGJlIHR1cm5lZCBpbnRvCi0gKgkJCWEgcGFuaWMgYnkgc2V0dGluZyB4ZnNfcGFuaWNfbWFzayBpbiBhCi0gKgkJCXN5c2N0bC4gIHVwZGF0ZSB4ZnNfbWF4W1hGU19QQVJBTV0gaWYKLSAqCQkJbW9yZSBhcmUgYWRkZWQuCisgKiBYRlMgcGFuaWMgdGFncyAtLSBhbGxvdyBhIGNhbGwgdG8geGZzX2FsZXJ0X3RhZygpIGJlIHR1cm5lZCBpbnRvCisgKgkJCWEgcGFuaWMgYnkgc2V0dGluZyB4ZnNfcGFuaWNfbWFzayBpbiBhIHN5c2N0bC4KICAqLwogI2RlZmluZQkJWEZTX05PX1BUQUcJCQkwCiAjZGVmaW5lCQlYRlNfUFRBR19JRkxVU0gJCQkweDAwMDAwMDAxCkBAIC0xNjAsMTcgKzE1OCw0IEBACiAjZGVmaW5lCQlYRlNfUFRBR19TSFVURE9XTl9MT0dFUlJPUgkweDAwMDAwMDQwCiAjZGVmaW5lCQlYRlNfUFRBR19GU0JMT0NLX1pFUk8JCTB4MDAwMDAwODAKIAotc3RydWN0IHhmc19tb3VudDsKLQotZXh0ZXJuIHZvaWQgeGZzX2hleF9kdW1wKHZvaWQgKnAsIGludCBsZW5ndGgpOwotCi0jZGVmaW5lIHhmc19mc19yZXBhaXJfY21uX2VycihsZXZlbCwgbXAsIGZtdCwgYXJncy4uLikgXAotCXhmc19mc19jbW5fZXJyKGxldmVsLCBtcCwgZm10ICIgIFVubW91bnQgYW5kIHJ1biB4ZnNfcmVwYWlyLiIsICMjIGFyZ3MpCi0KLSNkZWZpbmUgeGZzX2ZzX21vdW50X2Ntbl9lcnIoZiwgZm10LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmICghKGYgJiBYRlNfTUZTSV9RVUlFVCkpIAlcCi0JCQljbW5fZXJyKENFX1dBUk4sICJYRlM6ICIgZm10LCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KICNlbmRpZgkvKiBfX1hGU19FUlJPUl9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCA4NTY2OGVmLi45MTUzZDJjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC0zODUsOCArMzg1LDggQEAKIAkJCQkgIFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIFhGU19TQl9CTE9DSyhtcCkpLAogCQkJCSAgWEZTX0ZTU19UT19CQihtcCwgMSksIDAsICZicCk7CiAJCWlmIChlcnJvcikgewotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCi0JCQkiZXJyb3IgJWQgcmVhZGluZyBzZWNvbmRhcnkgc3VwZXJibG9jayBmb3IgYWcgJWQiLAorCQkJeGZzX3dhcm4obXAsCisJCSJlcnJvciAlZCByZWFkaW5nIHNlY29uZGFyeSBzdXBlcmJsb2NrIGZvciBhZyAlZCIsCiAJCQkJZXJyb3IsIGFnbm8pOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM5OSw3ICszOTksNyBAQAogCQlpZiAoIShlcnJvciA9IHhmc19id3JpdGUobXAsIGJwKSkpIHsKIAkJCWNvbnRpbnVlOwogCQl9IGVsc2UgewotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCisJCQl4ZnNfd2FybihtcCwKIAkJIndyaXRlIGVycm9yICVkIHVwZGF0aW5nIHNlY29uZGFyeSBzdXBlcmJsb2NrIGZvciBhZyAlZCIsCiAJCQkJZXJyb3IsIGFnbm8pOwogCQkJYnJlYWs7IC8qIG5vIHBvaW50IGluIGNvbnRpbnVpbmcgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IDA2MjZhMzIuLjg0ZWJlZWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtMTA1NSwyOCArMTA1NSwyMyBAQAogCSAqLwogCWFnbm8gPSBYRlNfSU5PX1RPX0FHTk8obXAsIGlub2RlKTsKIAlpZiAoYWdubyA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50KSAgewotCQljbW5fZXJyKENFX1dBUk4sCi0JCQkieGZzX2RpZnJlZTogYWdubyA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50ICglZCA+PSAlZCkgb24gJXMuICBSZXR1cm5pbmcgRUlOVkFMLiIsCi0JCQlhZ25vLCBtcC0+bV9zYi5zYl9hZ2NvdW50LCBtcC0+bV9mc25hbWUpOworCQl4ZnNfd2FybihtcCwgIiVzOiBhZ25vID49IG1wLT5tX3NiLnNiX2FnY291bnQgKCVkID49ICVkKS4iLAorCQkJX19mdW5jX18sIGFnbm8sIG1wLT5tX3NiLnNiX2FnY291bnQpOwogCQlBU1NFUlQoMCk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9CiAJYWdpbm8gPSBYRlNfSU5PX1RPX0FHSU5PKG1wLCBpbm9kZSk7CiAJaWYgKGlub2RlICE9IFhGU19BR0lOT19UT19JTk8obXAsIGFnbm8sIGFnaW5vKSkgIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJInhmc19kaWZyZWU6IGlub2RlICE9IFhGU19BR0lOT19UT19JTk8oKSAiCi0JCQkiKCVsbHUgIT0gJWxsdSkgb24gJXMuICBSZXR1cm5pbmcgRUlOVkFMLiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCBhZ2lubyksCi0JCQltcC0+bV9mc25hbWUpOworCQl4ZnNfd2FybihtcCwgIiVzOiBpbm9kZSAhPSBYRlNfQUdJTk9fVE9fSU5PKCkgKCVsbHUgIT0gJWxsdSkuIiwKKwkJCV9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCBhZ2lubykpOwogCQlBU1NFUlQoMCk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9CiAJYWdibm8gPSBYRlNfQUdJTk9fVE9fQUdCTk8obXAsIGFnaW5vKTsKIAlpZiAoYWdibm8gPj0gbXAtPm1fc2Iuc2JfYWdibG9ja3MpICB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJ4ZnNfZGlmcmVlOiBhZ2JubyA+PSBtcC0+bV9zYi5zYl9hZ2Jsb2NrcyAoJWQgPj0gJWQpIG9uICVzLiAgUmV0dXJuaW5nIEVJTlZBTC4iLAotCQkJYWdibm8sIG1wLT5tX3NiLnNiX2FnYmxvY2tzLCBtcC0+bV9mc25hbWUpOworCQl4ZnNfd2FybihtcCwgIiVzOiBhZ2JubyA+PSBtcC0+bV9zYi5zYl9hZ2Jsb2NrcyAoJWQgPj0gJWQpLiIsCisJCQlfX2Z1bmNfXywgYWdibm8sIG1wLT5tX3NiLnNiX2FnYmxvY2tzKTsKIAkJQVNTRVJUKDApOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQpAQCAtMTA4NSw5ICsxMDgwLDggQEAKIAkgKi8KIAllcnJvciA9IHhmc19pYWxsb2NfcmVhZF9hZ2kobXAsIHRwLCBhZ25vLCAmYWdicCk7CiAJaWYgKGVycm9yKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJ4ZnNfZGlmcmVlOiB4ZnNfaWFsbG9jX3JlYWRfYWdpKCkgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKLQkJCWVycm9yLCBtcC0+bV9mc25hbWUpOworCQl4ZnNfd2FybihtcCwgIiVzOiB4ZnNfaWFsbG9jX3JlYWRfYWdpKCkgcmV0dXJuZWQgZXJyb3IgJWQuIiwKKwkJCV9fZnVuY19fLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAJYWdpID0gWEZTX0JVRl9UT19BR0koYWdicCk7CkBAIC0xMTA2LDE3ICsxMTAwLDE1IEBACiAJICogTG9vayBmb3IgdGhlIGVudHJ5IGRlc2NyaWJpbmcgdGhpcyBpbm9kZS4KIAkgKi8KIAlpZiAoKGVycm9yID0geGZzX2lub2J0X2xvb2t1cChjdXIsIGFnaW5vLCBYRlNfTE9PS1VQX0xFLCAmaSkpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJ4ZnNfZGlmcmVlOiB4ZnNfaW5vYnRfbG9va3VwIHJldHVybmVkKCkgIGFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCi0JCQllcnJvciwgbXAtPm1fZnNuYW1lKTsKKwkJeGZzX3dhcm4obXAsICIlczogeGZzX2lub2J0X2xvb2t1cCgpIHJldHVybmVkIGVycm9yICVkLiIsCisJCQlfX2Z1bmNfXywgZXJyb3IpOwogCQlnb3RvIGVycm9yMDsKIAl9CiAJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oaSA9PSAxLCBlcnJvcjApOwogCWVycm9yID0geGZzX2lub2J0X2dldF9yZWMoY3VyLCAmcmVjLCAmaSk7CiAJaWYgKGVycm9yKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJ4ZnNfZGlmcmVlOiB4ZnNfaW5vYnRfZ2V0X3JlYygpICByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLAotCQkJZXJyb3IsIG1wLT5tX2ZzbmFtZSk7CisJCXhmc193YXJuKG1wLCAiJXM6IHhmc19pbm9idF9nZXRfcmVjKCkgcmV0dXJuZWQgZXJyb3IgJWQuIiwKKwkJCV9fZnVuY19fLCBlcnJvcik7CiAJCWdvdG8gZXJyb3IwOwogCX0KIAlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhpID09IDEsIGVycm9yMCk7CkBAIC0xMTU3LDggKzExNDksOCBAQAogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUZSRUUsIC0oaWxlbiAtIDEpKTsKIAogCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2RlbGV0ZShjdXIsICZpKSkpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwgInhmc19kaWZyZWU6IHhmc19idHJlZV9kZWxldGUgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuXG4iLAotCQkJCWVycm9yLCBtcC0+bV9mc25hbWUpOworCQkJeGZzX3dhcm4obXAsICIlczogeGZzX2J0cmVlX2RlbGV0ZSByZXR1cm5lZCBlcnJvciAlZC4iLAorCQkJCV9fZnVuY19fLCBlcnJvcik7CiAJCQlnb3RvIGVycm9yMDsKIAkJfQogCkBAIC0xMTcwLDkgKzExNjIsOCBAQAogCiAJCWVycm9yID0geGZzX2lub2J0X3VwZGF0ZShjdXIsICZyZWMpOwogCQlpZiAoZXJyb3IpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkieGZzX2RpZnJlZTogeGZzX2lub2J0X3VwZGF0ZSByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4iLAotCQkJCWVycm9yLCBtcC0+bV9mc25hbWUpOworCQkJeGZzX3dhcm4obXAsICIlczogeGZzX2lub2J0X3VwZGF0ZSByZXR1cm5lZCBlcnJvciAlZC4iLAorCQkJCV9fZnVuY19fLCBlcnJvcik7CiAJCQlnb3RvIGVycm9yMDsKIAkJfQogCkBAIC0xMjE4LDEwICsxMjA5LDkgQEAKIAogCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIGFnbm8sICZhZ2JwKTsKIAlpZiAoZXJyb3IpIHsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLCAieGZzX2ltYXA6ICIKLQkJCQkieGZzX2lhbGxvY19yZWFkX2FnaSgpIHJldHVybmVkICIKLQkJCQkiZXJyb3IgJWQsIGFnbm8gJWQiLAotCQkJCWVycm9yLCBhZ25vKTsKKwkJeGZzX2FsZXJ0KG1wLAorCQkJIiVzOiB4ZnNfaWFsbG9jX3JlYWRfYWdpKCkgcmV0dXJuZWQgZXJyb3IgJWQsIGFnbm8gJWQiLAorCQkJX19mdW5jX18sIGVycm9yLCBhZ25vKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIApAQCAtMTI5OSwyNCArMTI4OSwyMSBAQAogCQlpZiAoZmxhZ3MgJiBYRlNfSUdFVF9VTlRSVVNURUQpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJCWlmIChhZ25vID49IG1wLT5tX3NiLnNiX2FnY291bnQpIHsKLQkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwKLQkJCQkJInhmc19pbWFwOiBhZ25vICglZCkgPj0gIgotCQkJCQkibXAtPm1fc2Iuc2JfYWdjb3VudCAoJWQpIiwKLQkJCQkJYWdubywgIG1wLT5tX3NiLnNiX2FnY291bnQpOworCQkJeGZzX2FsZXJ0KG1wLAorCQkJCSIlczogYWdubyAoJWQpID49IG1wLT5tX3NiLnNiX2FnY291bnQgKCVkKSIsCisJCQkJX19mdW5jX18sIGFnbm8sIG1wLT5tX3NiLnNiX2FnY291bnQpOwogCQl9CiAJCWlmIChhZ2JubyA+PSBtcC0+bV9zYi5zYl9hZ2Jsb2NrcykgewotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAotCQkJCQkieGZzX2ltYXA6IGFnYm5vICgweCVsbHgpID49ICIKLQkJCQkJIm1wLT5tX3NiLnNiX2FnYmxvY2tzICgweCVseCkiLAotCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBhZ2JubywKLQkJCQkJKHVuc2lnbmVkIGxvbmcpIG1wLT5tX3NiLnNiX2FnYmxvY2tzKTsKKwkJCXhmc19hbGVydChtcCwKKwkJIiVzOiBhZ2JubyAoMHglbGx4KSA+PSBtcC0+bV9zYi5zYl9hZ2Jsb2NrcyAoMHglbHgpIiwKKwkJCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZylhZ2JubywKKwkJCQkodW5zaWduZWQgbG9uZyltcC0+bV9zYi5zYl9hZ2Jsb2Nrcyk7CiAJCX0KIAkJaWYgKGlubyAhPSBYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCBhZ2lubykpIHsKLQkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwKLQkJCQkJInhmc19pbWFwOiBpbm8gKDB4JWxseCkgIT0gIgotCQkJCQkiWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdubywgYWdpbm8pICIKLQkJCQkJIigweCVsbHgpIiwKLQkJCQkJaW5vLCBYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCBhZ2lubykpOworCQkJeGZzX2FsZXJ0KG1wLAorCQkiJXM6IGlubyAoMHglbGx4KSAhPSBYRlNfQUdJTk9fVE9fSU5PKCkgKDB4JWxseCkiLAorCQkJCV9fZnVuY19fLCBpbm8sCisJCQkJWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdubywgYWdpbm8pKTsKIAkJfQogCQl4ZnNfc3RhY2tfdHJhY2UoKTsKICNlbmRpZiAvKiBERUJVRyAqLwpAQCAtMTM4OCwxMCArMTM3NSw5IEBACiAJICovCiAJaWYgKChpbWFwLT5pbV9ibGtubyArIGltYXAtPmltX2xlbikgPgogCSAgICBYRlNfRlNCX1RPX0JCKG1wLCBtcC0+bV9zYi5zYl9kYmxvY2tzKSkgewotCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsICJ4ZnNfaW1hcDogIgotCQkJIihpbWFwLT5pbV9ibGtubyAoMHglbGx4KSArIGltYXAtPmltX2xlbiAoMHglbGx4KSkgPiAiCi0JCQkiIFhGU19GU0JfVE9fQkIobXAsIG1wLT5tX3NiLnNiX2RibG9ja3MpICgweCVsbHgpIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGltYXAtPmltX2Jsa25vLAorCQl4ZnNfYWxlcnQobXAsCisJIiVzOiAoaW1fYmxrbm8gKDB4JWxseCkgKyBpbV9sZW4gKDB4JWxseCkpID4gc2JfZGJsb2NrcyAoMHglbGx4KSIsCisJCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW1hcC0+aW1fYmxrbm8sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBpbWFwLT5pbV9sZW4sCiAJCQlYRlNfRlNCX1RPX0JCKG1wLCBtcC0+bV9zYi5zYl9kYmxvY2tzKSk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCBiZTdjZjYyLi5kYTg3MWY1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC0xMTAsOCArMTEwLDggQEAKIAkJZGlwID0gKHhmc19kaW5vZGVfdCAqKXhmc19idWZfb2Zmc2V0KGJwLAogCQkJCQlpICogbXAtPm1fc2Iuc2JfaW5vZGVzaXplKTsKIAkJaWYgKCFkaXAtPmRpX25leHRfdW5saW5rZWQpICB7Ci0JCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCi0JCQkJIkRldGVjdGVkIGEgYm9ndXMgemVybyBuZXh0X3VubGlua2VkIGZpZWxkIGluIGluY29yZSBpbm9kZSBidWZmZXIgMHglcC4gIEFib3V0IHRvIHBvcCBhbiBBU1NFUlQuIiwKKwkJCXhmc19hbGVydChtcCwKKwkiRGV0ZWN0ZWQgYm9ndXMgemVybyBuZXh0X3VubGlua2VkIGZpZWxkIGluIGluY29yZSBpbm9kZSBidWZmZXIgMHglcC4iLAogCQkJCWJwKTsKIAkJCUFTU0VSVChkaXAtPmRpX25leHRfdW5saW5rZWQpOwogCQl9CkBAIC0xNDIsMTAgKzE0Miw5IEBACiAJCQkJICAgKGludClpbWFwLT5pbV9sZW4sIGJ1Zl9mbGFncywgJmJwKTsKIAlpZiAoZXJyb3IpIHsKIAkJaWYgKGVycm9yICE9IEVBR0FJTikgewotCQkJY21uX2VycihDRV9XQVJOLAotCQkJCSJ4ZnNfaW1hcF90b19icDogeGZzX3RyYW5zX3JlYWRfYnVmKClyZXR1cm5lZCAiCi0JCQkJImFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCi0JCQkJZXJyb3IsIG1wLT5tX2ZzbmFtZSk7CisJCQl4ZnNfd2FybihtcCwKKwkJCQkiJXM6IHhmc190cmFuc19yZWFkX2J1ZigpIHJldHVybmVkIGVycm9yICVkLiIsCisJCQkJX19mdW5jX18sIGVycm9yKTsKIAkJfSBlbHNlIHsKIAkJCUFTU0VSVChidWZfZmxhZ3MgJiBYQkZfVFJZTE9DSyk7CiAJCX0KQEAgLTE4MCwxMiArMTc5LDExIEBACiAJCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2ltYXBfdG9fYnAiLAogCQkJCQkJWEZTX0VSUkxFVkVMX0hJR0gsIG1wLCBkaXApOwogI2lmZGVmIERFQlVHCi0JCQljbW5fZXJyKENFX1BBTklDLAotCQkJCQkiRGV2aWNlICVzIC0gYmFkIGlub2RlIG1hZ2ljL3ZzbiAiCi0JCQkJCSJkYWRkciAlbGxkICMlZCAobWFnaWM9JXgpIiwKLQkJCQlYRlNfQlVGVEFSR19OQU1FKG1wLT5tX2RkZXZfdGFyZ3ApLAorCQkJeGZzX2VtZXJnKG1wLAorCQkJCSJiYWQgaW5vZGUgbWFnaWMvdnNuIGRhZGRyICVsbGQgIyVkIChtYWdpYz0leCkiLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW1hcC0+aW1fYmxrbm8sIGksCiAJCQkJYmUxNl90b19jcHUoZGlwLT5kaV9tYWdpYykpOworCQkJQVNTRVJUKDApOwogI2VuZGlmCiAJCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBicCk7CiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CkBAIC0zMTcsNyArMzE1LDcgQEAKIAlpZiAodW5saWtlbHkoYmUzMl90b19jcHUoZGlwLT5kaV9uZXh0ZW50cykgKwogCQkgICAgIGJlMTZfdG9fY3B1KGRpcC0+ZGlfYW5leHRlbnRzKSA+CiAJCSAgICAgYmU2NF90b19jcHUoZGlwLT5kaV9uYmxvY2tzKSkpIHsKLQkJeGZzX2ZzX3JlcGFpcl9jbW5fZXJyKENFX1dBUk4sIGlwLT5pX21vdW50LAorCQl4ZnNfd2FybihpcC0+aV9tb3VudCwKIAkJCSJjb3JydXB0IGRpbm9kZSAlTHUsIGV4dGVudCB0b3RhbCA9ICVkLCBuYmxvY2tzID0gJUx1LiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWlwLT5pX2lubywKIAkJCShpbnQpKGJlMzJfdG9fY3B1KGRpcC0+ZGlfbmV4dGVudHMpICsKQEAgLTMzMCw4ICszMjgsNyBAQAogCX0KIAogCWlmICh1bmxpa2VseShkaXAtPmRpX2ZvcmtvZmYgPiBpcC0+aV9tb3VudC0+bV9zYi5zYl9pbm9kZXNpemUpKSB7Ci0JCXhmc19mc19yZXBhaXJfY21uX2VycihDRV9XQVJOLCBpcC0+aV9tb3VudCwKLQkJCSJjb3JydXB0IGRpbm9kZSAlTHUsIGZvcmtvZmYgPSAweCV4LiIsCisJCXhmc193YXJuKGlwLT5pX21vdW50LCAiY29ycnVwdCBkaW5vZGUgJUx1LCBmb3Jrb2ZmID0gMHgleC4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpcC0+aV9pbm8sCiAJCQlkaXAtPmRpX2ZvcmtvZmYpOwogCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2lmb3JtYXQoMikiLCBYRlNfRVJSTEVWRUxfTE9XLApAQCAtMzQxLDcgKzMzOCw3IEBACiAKIAlpZiAodW5saWtlbHkoKGlwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1JFQUxUSU1FKSAmJgogCQkgICAgICFpcC0+aV9tb3VudC0+bV9ydGRldl90YXJncCkpIHsKLQkJeGZzX2ZzX3JlcGFpcl9jbW5fZXJyKENFX1dBUk4sIGlwLT5pX21vdW50LAorCQl4ZnNfd2FybihpcC0+aV9tb3VudCwKIAkJCSJjb3JydXB0IGRpbm9kZSAlTHUsIGhhcyByZWFsdGltZSBmbGFnIHNldC4iLAogCQkJaXAtPmlfaW5vKTsKIAkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19pZm9ybWF0KHJlYWx0aW1lKSIsCkBAIC0zNzMsOSArMzcwLDggQEAKIAkJCSAqIG5vIGxvY2FsIHJlZ3VsYXIgZmlsZXMgeWV0CiAJCQkgKi8KIAkJCWlmICh1bmxpa2VseSgoYmUxNl90b19jcHUoZGlwLT5kaV9tb2RlKSAmIFNfSUZNVCkgPT0gU19JRlJFRykpIHsKLQkJCQl4ZnNfZnNfcmVwYWlyX2Ntbl9lcnIoQ0VfV0FSTiwgaXAtPmlfbW91bnQsCi0JCQkJCSJjb3JydXB0IGlub2RlICVMdSAiCi0JCQkJCSIobG9jYWwgZm9ybWF0IGZvciByZWd1bGFyIGZpbGUpLiIsCisJCQkJeGZzX3dhcm4oaXAtPmlfbW91bnQsCisJCQkiY29ycnVwdCBpbm9kZSAlTHUgKGxvY2FsIGZvcm1hdCBmb3IgcmVndWxhciBmaWxlKS4iLAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBpcC0+aV9pbm8pOwogCQkJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfaWZvcm1hdCg0KSIsCiAJCQkJCQkgICAgIFhGU19FUlJMRVZFTF9MT1csCkBAIC0zODUsOSArMzgxLDggQEAKIAogCQkJZGlfc2l6ZSA9IGJlNjRfdG9fY3B1KGRpcC0+ZGlfc2l6ZSk7CiAJCQlpZiAodW5saWtlbHkoZGlfc2l6ZSA+IFhGU19ERk9SS19EU0laRShkaXAsIGlwLT5pX21vdW50KSkpIHsKLQkJCQl4ZnNfZnNfcmVwYWlyX2Ntbl9lcnIoQ0VfV0FSTiwgaXAtPmlfbW91bnQsCi0JCQkJCSJjb3JydXB0IGlub2RlICVMdSAiCi0JCQkJCSIoYmFkIHNpemUgJUxkIGZvciBsb2NhbCBpbm9kZSkuIiwKKwkJCQl4ZnNfd2FybihpcC0+aV9tb3VudCwKKwkJCSJjb3JydXB0IGlub2RlICVMdSAoYmFkIHNpemUgJUxkIGZvciBsb2NhbCBpbm9kZSkuIiwKIAkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaXAtPmlfaW5vLAogCQkJCQkobG9uZyBsb25nKSBkaV9zaXplKTsKIAkJCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2lmb3JtYXQoNSkiLApAQCAtNDMxLDkgKzQyNiw4IEBACiAJCXNpemUgPSBiZTE2X3RvX2NwdShhdHAtPmhkci50b3RzaXplKTsKIAogCQlpZiAodW5saWtlbHkoc2l6ZSA8IHNpemVvZihzdHJ1Y3QgeGZzX2F0dHJfc2ZfaGRyKSkpIHsKLQkJCXhmc19mc19yZXBhaXJfY21uX2VycihDRV9XQVJOLCBpcC0+aV9tb3VudCwKLQkJCQkiY29ycnVwdCBpbm9kZSAlTHUgIgotCQkJCSIoYmFkIGF0dHIgZm9yayBzaXplICVMZCkuIiwKKwkJCXhmc193YXJuKGlwLT5pX21vdW50LAorCQkJCSJjb3JydXB0IGlub2RlICVMdSAoYmFkIGF0dHIgZm9yayBzaXplICVMZCkuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBpcC0+aV9pbm8sCiAJCQkJKGxvbmcgbG9uZykgc2l6ZSk7CiAJCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2lmb3JtYXQoOCkiLApAQCAtNDg4LDkgKzQ4Miw4IEBACiAJICoga21lbV9hbGxvYygpIG9yIG1lbWNweSgpIGJlbG93LgogCSAqLwogCWlmICh1bmxpa2VseShzaXplID4gWEZTX0RGT1JLX1NJWkUoZGlwLCBpcC0+aV9tb3VudCwgd2hpY2hmb3JrKSkpIHsKLQkJeGZzX2ZzX3JlcGFpcl9jbW5fZXJyKENFX1dBUk4sIGlwLT5pX21vdW50LAotCQkJImNvcnJ1cHQgaW5vZGUgJUx1ICIKLQkJCSIoYmFkIHNpemUgJWQgZm9yIGxvY2FsIGZvcmssIHNpemUgPSAlZCkuIiwKKwkJeGZzX3dhcm4oaXAtPmlfbW91bnQsCisJImNvcnJ1cHQgaW5vZGUgJUx1IChiYWQgc2l6ZSAlZCBmb3IgbG9jYWwgZm9yaywgc2l6ZSA9ICVkKS4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaXAtPmlfaW5vLCBzaXplLAogCQkJWEZTX0RGT1JLX1NJWkUoZGlwLCBpcC0+aV9tb3VudCwgd2hpY2hmb3JrKSk7CiAJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfaWZvcm1hdF9sb2NhbCIsIFhGU19FUlJMRVZFTF9MT1csCkBAIC01NDcsOCArNTQwLDcgQEAKIAkgKiBrbWVtX2FsbG9jKCkgb3IgbWVtY3B5KCkgYmVsb3cuCiAJICovCiAJaWYgKHVubGlrZWx5KHNpemUgPCAwIHx8IHNpemUgPiBYRlNfREZPUktfU0laRShkaXAsIGlwLT5pX21vdW50LCB3aGljaGZvcmspKSkgewotCQl4ZnNfZnNfcmVwYWlyX2Ntbl9lcnIoQ0VfV0FSTiwgaXAtPmlfbW91bnQsCi0JCQkiY29ycnVwdCBpbm9kZSAlTHUgKChhKWV4dGVudHMgPSAlZCkuIiwKKwkJeGZzX3dhcm4oaXAtPmlfbW91bnQsICJjb3JydXB0IGlub2RlICVMdSAoKGEpZXh0ZW50cyA9ICVkKS4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaXAtPmlfaW5vLCBuZXgpOwogCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2lmb3JtYXRfZXh0ZW50cygxKSIsIFhGU19FUlJMRVZFTF9MT1csCiAJCQkJICAgICBpcC0+aV9tb3VudCwgZGlwKTsKQEAgLTYyMywxMSArNjE1LDEwIEBACiAJICAgIHx8IFhGU19CTURSX1NQQUNFX0NBTEMobnJlY3MpID4KIAkJCVhGU19ERk9SS19TSVpFKGRpcCwgaXAtPmlfbW91bnQsIHdoaWNoZm9yaykKIAkgICAgfHwgWEZTX0lGT1JLX05FWFRFTlRTKGlwLCB3aGljaGZvcmspID4gaXAtPmlfZC5kaV9uYmxvY2tzKSkgewotCQl4ZnNfZnNfcmVwYWlyX2Ntbl9lcnIoQ0VfV0FSTiwgaXAtPmlfbW91bnQsCi0JCQkiY29ycnVwdCBpbm9kZSAlTHUgKGJ0cmVlKS4iLAorCQl4ZnNfd2FybihpcC0+aV9tb3VudCwgImNvcnJ1cHQgaW5vZGUgJUx1IChidHJlZSkuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGlwLT5pX2lubyk7Ci0JCVhGU19FUlJPUl9SRVBPUlQoInhmc19pZm9ybWF0X2J0cmVlIiwgWEZTX0VSUkxFVkVMX0xPVywKLQkJCQkgaXAtPmlfbW91bnQpOworCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2lmb3JtYXRfYnRyZWUiLCBYRlNfRVJSTEVWRUxfTE9XLAorCQkJCSBpcC0+aV9tb3VudCwgZGlwKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCX0KIApAQCAtODEzLDExICs4MDQsOSBAQAogCSAqLwogCWlmIChiZTE2X3RvX2NwdShkaXAtPmRpX21hZ2ljKSAhPSBYRlNfRElOT0RFX01BR0lDKSB7CiAjaWZkZWYgREVCVUcKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLCAieGZzX2lyZWFkOiAiCi0JCQkJImRpcC0+ZGlfbWFnaWMgKDB4JXgpICE9ICIKLQkJCQkiWEZTX0RJTk9ERV9NQUdJQyAoMHgleCkiLAotCQkJCWJlMTZfdG9fY3B1KGRpcC0+ZGlfbWFnaWMpLAotCQkJCVhGU19ESU5PREVfTUFHSUMpOworCQl4ZnNfYWxlcnQobXAsCisJCQkiJXM6IGRpcC0+ZGlfbWFnaWMgKDB4JXgpICE9IFhGU19ESU5PREVfTUFHSUMgKDB4JXgpIiwKKwkJCV9fZnVuY19fLCBiZTE2X3RvX2NwdShkaXAtPmRpX21hZ2ljKSwgWEZTX0RJTk9ERV9NQUdJQyk7CiAjZW5kaWYgLyogREVCVUcgKi8KIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKIAkJZ290byBvdXRfYnJlbHNlOwpAQCAtODM1LDkgKzgyNCw4IEBACiAJCWVycm9yID0geGZzX2lmb3JtYXQoaXAsIGRpcCk7CiAJCWlmIChlcnJvcikgIHsKICNpZmRlZiBERUJVRwotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLCAieGZzX2lyZWFkOiAiCi0JCQkJCSJ4ZnNfaWZvcm1hdCgpIHJldHVybmVkIGVycm9yICVkIiwKLQkJCQkJZXJyb3IpOworCQkJeGZzX2FsZXJ0KG1wLCAiJXM6IHhmc19pZm9ybWF0KCkgcmV0dXJuZWQgZXJyb3IgJWQiLAorCQkJCV9fZnVuY19fLCBlcnJvcik7CiAjZW5kaWYgLyogREVCVUcgKi8KIAkJCWdvdG8gb3V0X2JyZWxzZTsKIAkJfQpAQCAtMTAxNiw4ICsxMDA0LDggQEAKIAkgKiBUaGlzIGlzIGJlY2F1c2Ugd2UncmUgc2V0dGluZyBmaWVsZHMgaGVyZSB3ZSBuZWVkCiAJICogdG8gcHJldmVudCBvdGhlcnMgZnJvbSBsb29raW5nIGF0IHVudGlsIHdlJ3JlIGRvbmUuCiAJICovCi0JZXJyb3IgPSB4ZnNfdHJhbnNfaWdldCh0cC0+dF9tb3VudHAsIHRwLCBpbm8sCi0JCQkJWEZTX0lHRVRfQ1JFQVRFLCBYRlNfSUxPQ0tfRVhDTCwgJmlwKTsKKwllcnJvciA9IHhmc19pZ2V0KHRwLT50X21vdW50cCwgdHAsIGlubywgWEZTX0lHRVRfQ1JFQVRFLAorCQkJIFhGU19JTE9DS19FWENMLCAmaXApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCUFTU0VSVChpcCAhPSBOVUxMKTsKQEAgLTExNjYsNiArMTE1NCw3IEBACiAJLyoKIAkgKiBMb2cgdGhlIG5ldyB2YWx1ZXMgc3R1ZmZlZCBpbnRvIHRoZSBpbm9kZS4KIAkgKi8KKwl4ZnNfdHJhbnNfaWpvaW5fcmVmKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBmbGFncyk7CiAKIAkvKiBub3cgdGhhdCB3ZSBoYXZlIGFuIGlfbW9kZSB3ZSBjYW4gc2V0dXAgaW5vZGUgb3BzIGFuZCB1bmxvY2sgKi8KQEAgLTE4MjAsOSArMTgwOSw4IEBACiAJCSAqLwogCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJCWlmIChlcnJvcikgewotCQkJY21uX2VycihDRV9XQVJOLAotCQkJCSJ4ZnNfaXVubGlua19yZW1vdmU6IHhmc19pdG9icCgpICByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLAotCQkJCWVycm9yLCBtcC0+bV9mc25hbWUpOworCQkJeGZzX3dhcm4obXAsICIlczogeGZzX2l0b2JwKCkgcmV0dXJuZWQgZXJyb3IgJWQuIiwKKwkJCQlfX2Z1bmNfXywgZXJyb3IpOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCW5leHRfYWdpbm8gPSBiZTMyX3RvX2NwdShkaXAtPmRpX25leHRfdW5saW5rZWQpOwpAQCAtMTg2Nyw5ICsxODU1LDkgQEAKIAkJCWVycm9yID0geGZzX2lub3RvYnAobXAsIHRwLCBuZXh0X2lubywgJmxhc3RfZGlwLAogCQkJCQkgICAgJmxhc3RfaWJwLCAmbGFzdF9vZmZzZXQsIDApOwogCQkJaWYgKGVycm9yKSB7Ci0JCQkJY21uX2VycihDRV9XQVJOLAotCQkJInhmc19pdW5saW5rX3JlbW92ZTogeGZzX2lub3RvYnAoKSAgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKLQkJCQkJZXJyb3IsIG1wLT5tX2ZzbmFtZSk7CisJCQkJeGZzX3dhcm4obXAsCisJCQkJCSIlczogeGZzX2lub3RvYnAoKSByZXR1cm5lZCBlcnJvciAlZC4iLAorCQkJCQlfX2Z1bmNfXywgZXJyb3IpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KIAkJCW5leHRfYWdpbm8gPSBiZTMyX3RvX2NwdShsYXN0X2RpcC0+ZGlfbmV4dF91bmxpbmtlZCk7CkBAIC0xODgyLDkgKzE4NzAsOCBAQAogCQkgKi8KIAkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCQlpZiAoZXJyb3IpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCQkieGZzX2l1bmxpbmtfcmVtb3ZlOiB4ZnNfaXRvYnAoKSAgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKLQkJCQllcnJvciwgbXAtPm1fZnNuYW1lKTsKKwkJCXhmc193YXJuKG1wLCAiJXM6IHhmc19pdG9icCgyKSByZXR1cm5lZCBlcnJvciAlZC4iLAorCQkJCV9fZnVuY19fLCBlcnJvcik7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAkJbmV4dF9hZ2lubyA9IGJlMzJfdG9fY3B1KGRpcC0+ZGlfbmV4dF91bmxpbmtlZCk7CkBAIC0yOTM5LDE2ICsyOTI2LDE2IEBACiAKIAlpZiAoWEZTX1RFU1RfRVJST1IoYmUxNl90b19jcHUoZGlwLT5kaV9tYWdpYykgIT0gWEZTX0RJTk9ERV9NQUdJQywKIAkJCSAgICAgICBtcCwgWEZTX0VSUlRBR19JRkxVU0hfMSwgWEZTX1JBTkRPTV9JRkxVU0hfMSkpIHsKLQkJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfSUZMVVNILCBDRV9BTEVSVCwgbXAsCi0JCSAgICAieGZzX2lmbHVzaDogQmFkIGlub2RlICVMdSBtYWdpYyBudW1iZXIgMHgleCwgcHRyIDB4JXAiLAotCQkJaXAtPmlfaW5vLCBiZTE2X3RvX2NwdShkaXAtPmRpX21hZ2ljKSwgZGlwKTsKKwkJeGZzX2FsZXJ0X3RhZyhtcCwgWEZTX1BUQUdfSUZMVVNILAorCQkJIiVzOiBCYWQgaW5vZGUgJUx1IG1hZ2ljIG51bWJlciAweCV4LCBwdHIgMHglcCIsCisJCQlfX2Z1bmNfXywgaXAtPmlfaW5vLCBiZTE2X3RvX2NwdShkaXAtPmRpX21hZ2ljKSwgZGlwKTsKIAkJZ290byBjb3JydXB0X291dDsKIAl9CiAJaWYgKFhGU19URVNUX0VSUk9SKGlwLT5pX2QuZGlfbWFnaWMgIT0gWEZTX0RJTk9ERV9NQUdJQywKIAkJCQltcCwgWEZTX0VSUlRBR19JRkxVU0hfMiwgWEZTX1JBTkRPTV9JRkxVU0hfMikpIHsKLQkJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfSUZMVVNILCBDRV9BTEVSVCwgbXAsCi0JCQkieGZzX2lmbHVzaDogQmFkIGlub2RlICVMdSwgcHRyIDB4JXAsIG1hZ2ljIG51bWJlciAweCV4IiwKLQkJCWlwLT5pX2lubywgaXAsIGlwLT5pX2QuZGlfbWFnaWMpOworCQl4ZnNfYWxlcnRfdGFnKG1wLCBYRlNfUFRBR19JRkxVU0gsCisJCQkiJXM6IEJhZCBpbm9kZSAlTHUsIHB0ciAweCVwLCBtYWdpYyBudW1iZXIgMHgleCIsCisJCQlfX2Z1bmNfXywgaXAtPmlfaW5vLCBpcCwgaXAtPmlfZC5kaV9tYWdpYyk7CiAJCWdvdG8gY29ycnVwdF9vdXQ7CiAJfQogCWlmICgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSB7CkBAIC0yOTU2LDkgKzI5NDMsOSBAQAogCQkgICAgKGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0VYVEVOVFMpICYmCiAJCSAgICAoaXAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUpLAogCQkgICAgbXAsIFhGU19FUlJUQUdfSUZMVVNIXzMsIFhGU19SQU5ET01fSUZMVVNIXzMpKSB7Ci0JCQl4ZnNfY21uX2VycihYRlNfUFRBR19JRkxVU0gsIENFX0FMRVJULCBtcCwKLQkJCQkieGZzX2lmbHVzaDogQmFkIHJlZ3VsYXIgaW5vZGUgJUx1LCBwdHIgMHglcCIsCi0JCQkJaXAtPmlfaW5vLCBpcCk7CisJCQl4ZnNfYWxlcnRfdGFnKG1wLCBYRlNfUFRBR19JRkxVU0gsCisJCQkJIiVzOiBCYWQgcmVndWxhciBpbm9kZSAlTHUsIHB0ciAweCVwIiwKKwkJCQlfX2Z1bmNfXywgaXAtPmlfaW5vLCBpcCk7CiAJCQlnb3RvIGNvcnJ1cHRfb3V0OwogCQl9CiAJfSBlbHNlIGlmICgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKSB7CkBAIC0yOTY3LDI4ICsyOTU0LDI4IEBACiAJCSAgICAoaXAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUpICYmCiAJCSAgICAoaXAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwpLAogCQkgICAgbXAsIFhGU19FUlJUQUdfSUZMVVNIXzQsIFhGU19SQU5ET01fSUZMVVNIXzQpKSB7Ci0JCQl4ZnNfY21uX2VycihYRlNfUFRBR19JRkxVU0gsIENFX0FMRVJULCBtcCwKLQkJCQkieGZzX2lmbHVzaDogQmFkIGRpcmVjdG9yeSBpbm9kZSAlTHUsIHB0ciAweCVwIiwKLQkJCQlpcC0+aV9pbm8sIGlwKTsKKwkJCXhmc19hbGVydF90YWcobXAsIFhGU19QVEFHX0lGTFVTSCwKKwkJCQkiJXM6IEJhZCBkaXJlY3RvcnkgaW5vZGUgJUx1LCBwdHIgMHglcCIsCisJCQkJX19mdW5jX18sIGlwLT5pX2lubywgaXApOwogCQkJZ290byBjb3JydXB0X291dDsKIAkJfQogCX0KIAlpZiAoWEZTX1RFU1RfRVJST1IoaXAtPmlfZC5kaV9uZXh0ZW50cyArIGlwLT5pX2QuZGlfYW5leHRlbnRzID4KIAkJCQlpcC0+aV9kLmRpX25ibG9ja3MsIG1wLCBYRlNfRVJSVEFHX0lGTFVTSF81LAogCQkJCVhGU19SQU5ET01fSUZMVVNIXzUpKSB7Ci0JCXhmc19jbW5fZXJyKFhGU19QVEFHX0lGTFVTSCwgQ0VfQUxFUlQsIG1wLAotCQkJInhmc19pZmx1c2g6IGRldGVjdGVkIGNvcnJ1cHQgaW5jb3JlIGlub2RlICVMdSwgdG90YWwgZXh0ZW50cyA9ICVkLCBuYmxvY2tzID0gJUxkLCBwdHIgMHglcCIsCi0JCQlpcC0+aV9pbm8sCisJCXhmc19hbGVydF90YWcobXAsIFhGU19QVEFHX0lGTFVTSCwKKwkJCSIlczogZGV0ZWN0ZWQgY29ycnVwdCBpbmNvcmUgaW5vZGUgJUx1LCAiCisJCQkidG90YWwgZXh0ZW50cyA9ICVkLCBuYmxvY2tzID0gJUxkLCBwdHIgMHglcCIsCisJCQlfX2Z1bmNfXywgaXAtPmlfaW5vLAogCQkJaXAtPmlfZC5kaV9uZXh0ZW50cyArIGlwLT5pX2QuZGlfYW5leHRlbnRzLAotCQkJaXAtPmlfZC5kaV9uYmxvY2tzLAotCQkJaXApOworCQkJaXAtPmlfZC5kaV9uYmxvY2tzLCBpcCk7CiAJCWdvdG8gY29ycnVwdF9vdXQ7CiAJfQogCWlmIChYRlNfVEVTVF9FUlJPUihpcC0+aV9kLmRpX2ZvcmtvZmYgPiBtcC0+bV9zYi5zYl9pbm9kZXNpemUsCiAJCQkJbXAsIFhGU19FUlJUQUdfSUZMVVNIXzYsIFhGU19SQU5ET01fSUZMVVNIXzYpKSB7Ci0JCXhmc19jbW5fZXJyKFhGU19QVEFHX0lGTFVTSCwgQ0VfQUxFUlQsIG1wLAotCQkJInhmc19pZmx1c2g6IGJhZCBpbm9kZSAlTHUsIGZvcmtvZmYgMHgleCwgcHRyIDB4JXAiLAotCQkJaXAtPmlfaW5vLCBpcC0+aV9kLmRpX2ZvcmtvZmYsIGlwKTsKKwkJeGZzX2FsZXJ0X3RhZyhtcCwgWEZTX1BUQUdfSUZMVVNILAorCQkJIiVzOiBiYWQgaW5vZGUgJUx1LCBmb3Jrb2ZmIDB4JXgsIHB0ciAweCVwIiwKKwkJCV9fZnVuY19fLCBpcC0+aV9pbm8sIGlwLT5pX2QuZGlfZm9ya29mZiwgaXApOwogCQlnb3RvIGNvcnJ1cHRfb3V0OwogCX0KIAkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IDVjOTVmYTguLmY3NTMyMDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTQwOSwyOCArNDA5LDM1IEBACiAvKgogICogRmxhZ3MgZm9yIGxvY2tkZXAgYW5ub3RhdGlvbnMuCiAgKgotICogWEZTX0lbT11MT0NLX1BBUkVOVCAtIGZvciBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBsb2NraW5nIHR3byBpbm9kZXMKLSAqIChpZSBkaXJlY3Rvcnkgb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUgbG9ja2luZyBhIGRpcmVjdG9yeSBpbm9kZSBhbmQKLSAqIGFuIGVudHJ5IGlub2RlKS4gIFRoZSBmaXJzdCBpbm9kZSBnZXRzIGxvY2tlZCB3aXRoIHRoaXMgZmxhZyBzbyBpdAotICogZ2V0cyBhIGxvY2tkZXAgc3ViY2xhc3Mgb2YgMSBhbmQgdGhlIHNlY29uZCBsb2NrIHdpbGwgaGF2ZSBhIGxvY2tkZXAKLSAqIHN1YmNsYXNzIG9mIDAuCisgKiBYRlNfTE9DS19QQVJFTlQgLSBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIGxvY2tpbmcgYQorICogcGFyZW50IGRpcmVjdG9yeSBpbm9kZSBhbmQgYSBjaGlsZCBlbnRyeSBpbm9kZS4gIFRoZSBwYXJlbnQgZ2V0cyBsb2NrZWQKKyAqIHdpdGggdGhpcyBmbGFnIHNvIGl0IGdldHMgYSBsb2NrZGVwIHN1YmNsYXNzIG9mIDEgYW5kIHRoZSBjaGlsZCBlbnRyeQorICogbG9jayB3aWxsIGhhdmUgYSBsb2NrZGVwIHN1YmNsYXNzIG9mIDAuCisgKgorICogWEZTX0xPQ0tfUlRCSVRNQVAvWEZTX0xPQ0tfUlRTVU0gLSB0aGUgcmVhbHRpbWUgZGV2aWNlIGJpdG1hcCBhbmQgc3VtbWFyeQorICogaW5vZGVzIGRvIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbm9ybWFsIGxvY2sgb3JkZXIsIGFuZCB0aHVzIGhhdmUgdGhlaXIKKyAqIG93biBzdWJjbGFzc2VzLgogICoKICAqIFhGU19MT0NLX0lOVU1PUkRFUiAtIGZvciBsb2NraW5nIHNldmVyYWwgaW5vZGVzIGF0IHRoZSBzb21lIHRpbWUKICAqIHdpdGggeGZzX2xvY2tfaW5vZGVzKCkuICBUaGlzIGZsYWcgaXMgdXNlZCBhcyB0aGUgc3RhcnRpbmcgc3ViY2xhc3MKICAqIGFuZCBlYWNoIHN1YnNlcXVlbnQgbG9jayBhY3F1aXJlZCB3aWxsIGluY3JlbWVudCB0aGUgc3ViY2xhc3MgYnkgb25lLgotICogU28gdGhlIGZpcnN0IGxvY2sgYWNxdWlyZWQgd2lsbCBoYXZlIGEgbG9ja2RlcCBzdWJjbGFzcyBvZiAyLCB0aGUKLSAqIHNlY29uZCBsb2NrIHdpbGwgaGF2ZSBhIGxvY2tkZXAgc3ViY2xhc3Mgb2YgMywgYW5kIHNvIG9uLiBJdCBpcworICogU28gdGhlIGZpcnN0IGxvY2sgYWNxdWlyZWQgd2lsbCBoYXZlIGEgbG9ja2RlcCBzdWJjbGFzcyBvZiA0LCB0aGUKKyAqIHNlY29uZCBsb2NrIHdpbGwgaGF2ZSBhIGxvY2tkZXAgc3ViY2xhc3Mgb2YgNSwgYW5kIHNvIG9uLiBJdCBpcwogICogdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjbGFzcyBidWlsZGVyIHRvIHNoaWZ0IHRoaXMgdG8gdGhlIGNvcnJlY3QKICAqIHBvcnRpb24gb2YgdGhlIGxvY2tfbW9kZSBsb2NrZGVwIG1hc2suCiAgKi8KICNkZWZpbmUgWEZTX0xPQ0tfUEFSRU5UCQkxCi0jZGVmaW5lIFhGU19MT0NLX0lOVU1PUkRFUgkyCisjZGVmaW5lIFhGU19MT0NLX1JUQklUTUFQCTIKKyNkZWZpbmUgWEZTX0xPQ0tfUlRTVU0JCTMKKyNkZWZpbmUgWEZTX0xPQ0tfSU5VTU9SREVSCTQKIAogI2RlZmluZSBYRlNfSU9MT0NLX1NISUZUCTE2CiAjZGVmaW5lCVhGU19JT0xPQ0tfUEFSRU5UCShYRlNfTE9DS19QQVJFTlQgPDwgWEZTX0lPTE9DS19TSElGVCkKIAogI2RlZmluZSBYRlNfSUxPQ0tfU0hJRlQJCTI0CiAjZGVmaW5lCVhGU19JTE9DS19QQVJFTlQJKFhGU19MT0NLX1BBUkVOVCA8PCBYRlNfSUxPQ0tfU0hJRlQpCisjZGVmaW5lCVhGU19JTE9DS19SVEJJVE1BUAkoWEZTX0xPQ0tfUlRCSVRNQVAgPDwgWEZTX0lMT0NLX1NISUZUKQorI2RlZmluZQlYRlNfSUxPQ0tfUlRTVU0JCShYRlNfTE9DS19SVFNVTSA8PCBYRlNfSUxPQ0tfU0hJRlQpCiAKICNkZWZpbmUgWEZTX0lPTE9DS19ERVBfTUFTSwkweDAwZmYwMDAwCiAjZGVmaW5lIFhGU19JTE9DS19ERVBfTUFTSwkweGZmMDAwMDAwCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmMKaW5kZXggOGEwZjA0NC4uMDkxZDgyYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtMTAxLDExICsxMDEsMTEgQEAKIH0KIAogU1RBVElDIGludAoteGZzX2Ntbl9lcnJfZnNibG9ja196ZXJvKAoreGZzX2FsZXJ0X2ZzYmxvY2tfemVybygKIAl4ZnNfaW5vZGVfdAkqaXAsCiAJeGZzX2JtYnRfaXJlY190CSppbWFwKQogewotCXhmc19jbW5fZXJyKFhGU19QVEFHX0ZTQkxPQ0tfWkVSTywgQ0VfQUxFUlQsIGlwLT5pX21vdW50LAorCXhmc19hbGVydF90YWcoaXAtPmlfbW91bnQsIFhGU19QVEFHX0ZTQkxPQ0tfWkVSTywKIAkJCSJBY2Nlc3MgdG8gYmxvY2sgemVybyBpbiBpbm9kZSAlbGx1ICIKIAkJCSJzdGFydF9ibG9jazogJWxseCBzdGFydF9vZmY6ICVsbHggIgogCQkJImJsa2NudDogJWxseCBleHRlbnQtc3RhdGU6ICV4XG4iLApAQCAtMjQ2LDcgKzI0Niw3IEBACiAJfQogCiAJaWYgKCEoaW1hcC0+YnJfc3RhcnRibG9jayB8fCBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKSkgewotCQllcnJvciA9IHhmc19jbW5fZXJyX2ZzYmxvY2tfemVybyhpcCwgaW1hcCk7CisJCWVycm9yID0geGZzX2FsZXJ0X2ZzYmxvY2tfemVybyhpcCwgaW1hcCk7CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIApAQCAtNDY0LDcgKzQ2NCw3IEBACiAJfQogCiAJaWYgKCEoaW1hcFswXS5icl9zdGFydGJsb2NrIHx8IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpKQotCQlyZXR1cm4geGZzX2Ntbl9lcnJfZnNibG9ja196ZXJvKGlwLCAmaW1hcFswXSk7CisJCXJldHVybiB4ZnNfYWxlcnRfZnNibG9ja196ZXJvKGlwLCAmaW1hcFswXSk7CiAKIAkqcmV0X2ltYXAgPSBpbWFwWzBdOwogCXJldHVybiAwOwpAQCAtNjE0LDcgKzYxNCw3IEBACiAJCSAqIGNvdmVycyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSBjYWxsZXJzIHJlcXVlc3QKIAkJICovCiAJCWlmICghKGltYXAtPmJyX3N0YXJ0YmxvY2sgfHwgWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSkpCi0JCQlyZXR1cm4geGZzX2Ntbl9lcnJfZnNibG9ja196ZXJvKGlwLCBpbWFwKTsKKwkJCXJldHVybiB4ZnNfYWxlcnRfZnNibG9ja196ZXJvKGlwLCBpbWFwKTsKIAogCQlpZiAoKG9mZnNldF9mc2IgPj0gaW1hcC0+YnJfc3RhcnRvZmYpICYmCiAJCSAgICAob2Zmc2V0X2ZzYiA8IChpbWFwLT5icl9zdGFydG9mZiArCkBAIC03MjQsNyArNzI0LDcgQEAKIAkJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwogCiAJCWlmICghKGltYXAuYnJfc3RhcnRibG9jayB8fCBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKSkKLQkJCXJldHVybiB4ZnNfY21uX2Vycl9mc2Jsb2NrX3plcm8oaXAsICZpbWFwKTsKKwkJCXJldHVybiB4ZnNfYWxlcnRfZnNibG9ja196ZXJvKGlwLCAmaW1hcCk7CiAKIAkJaWYgKChudW1ibGtzX2ZzYiA9IGltYXAuYnJfYmxvY2tjb3VudCkgPT0gMCkgewogCQkJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmMgYi9mcy94ZnMveGZzX2xvZy5jCmluZGV4IGFlNmZlZjFmLi4yNWVmYTliIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmMKQEAgLTM3NCwxMSArMzc0LDEwIEBACiAJaW50CQllcnJvcjsKIAogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX05PUkVDT1ZFUlkpKQotCQljbW5fZXJyKENFX05PVEUsICJYRlMgbW91bnRpbmcgZmlsZXN5c3RlbSAlcyIsIG1wLT5tX2ZzbmFtZSk7CisJCXhmc19ub3RpY2UobXAsICJNb3VudGluZyBGaWxlc3lzdGVtIik7CiAJZWxzZSB7Ci0JCWNtbl9lcnIoQ0VfTk9URSwKLQkJCSJNb3VudGluZyBmaWxlc3lzdGVtIFwiJXNcIiBpbiBuby1yZWNvdmVyeSBtb2RlLiAgRmlsZXN5c3RlbSB3aWxsIGJlIGluY29uc2lzdGVudC4iLAotCQkJbXAtPm1fZnNuYW1lKTsKKwkJeGZzX25vdGljZShtcCwKKyJNb3VudGluZyBmaWxlc3lzdGVtIGluIG5vLXJlY292ZXJ5IG1vZGUuICBGaWxlc3lzdGVtIHdpbGwgYmUgaW5jb25zaXN0ZW50LiIpOwogCQlBU1NFUlQobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKTsKIAl9CiAKQEAgLTM5Myw3ICszOTIsNyBAQAogCSAqLwogCWVycm9yID0geGZzX3RyYW5zX2FpbF9pbml0KG1wKTsKIAlpZiAoZXJyb3IpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBBSUwgaW5pdGlhbGlzYXRpb24gZmFpbGVkOiBlcnJvciAlZCIsIGVycm9yKTsKKwkJeGZzX3dhcm4obXAsICJBSUwgaW5pdGlhbGlzYXRpb24gZmFpbGVkOiBlcnJvciAlZCIsIGVycm9yKTsKIAkJZ290byBvdXRfZnJlZV9sb2c7CiAJfQogCW1wLT5tX2xvZy0+bF9haWxwID0gbXAtPm1fYWlsOwpAQCAtNDEzLDcgKzQxMiw4IEBACiAJCWlmIChyZWFkb25seSkKIAkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9SRE9OTFk7CiAJCWlmIChlcnJvcikgewotCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBsb2cgbW91bnQvcmVjb3ZlcnkgZmFpbGVkOiBlcnJvciAlZCIsIGVycm9yKTsKKwkJCXhmc193YXJuKG1wLCAibG9nIG1vdW50L3JlY292ZXJ5IGZhaWxlZDogZXJyb3IgJWQiLAorCQkJCWVycm9yKTsKIAkJCWdvdG8gb3V0X2Rlc3Ryb3lfYWlsOwogCQl9CiAJfQpAQCAtNTQyLDEwICs1NDIsOCBAQAogCQkJICovCiAJCX0KIAotCQlpZiAoZXJyb3IpIHsKLQkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwKLQkJCQkieGZzX2xvZ191bm1vdW50OiB1bm1vdW50IHJlY29yZCBmYWlsZWQiKTsKLQkJfQorCQlpZiAoZXJyb3IpCisJCQl4ZnNfYWxlcnQobXAsICIlczogdW5tb3VudCByZWNvcmQgZmFpbGVkIiwgX19mdW5jX18pOwogCiAKIAkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKQEAgLTg1Miw3ICs4NTAsNyBAQAogCQkgKiBJbiB0aGlzIGNhc2Ugd2UganVzdCB3YW50IHRvIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUKIAkJICogbG9nIGFzIHRoZSBhbW91bnQgb2Ygc3BhY2UgbGVmdC4KIAkJICovCi0JCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBsb2ctPmxfbXAsCisJCXhmc19hbGVydChsb2ctPmxfbXAsCiAJCQkieGxvZ19zcGFjZV9sZWZ0OiBoZWFkIGJlaGluZCB0YWlsXG4iCiAJCQkiICB0YWlsX2N5Y2xlID0gJWQsIHRhaWxfYnl0ZXMgPSAlZFxuIgogCQkJIiAgR0ggICBjeWNsZSA9ICVkLCBHSCAgIGJ5dGVzID0gJWQiLApAQCAtMTAwMSw3ICs5OTksNyBAQAogCiAJbG9nID0ga21lbV96YWxsb2Moc2l6ZW9mKHhsb2dfdCksIEtNX01BWUZBSUwpOwogCWlmICghbG9nKSB7Ci0JCXhsb2dfd2FybigiWEZTOiBMb2cgYWxsb2NhdGlvbiBmYWlsZWQ6IE5vIG1lbW9yeSEiKTsKKwkJeGZzX3dhcm4obXAsICJMb2cgYWxsb2NhdGlvbiBmYWlsZWQ6IE5vIG1lbW9yeSEiKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMDI5LDI0ICsxMDI3LDI0IEBACiAJaWYgKHhmc19zYl92ZXJzaW9uX2hhc3NlY3RvcigmbXAtPm1fc2IpKSB7CiAJICAgICAgICBsb2cyX3NpemUgPSBtcC0+bV9zYi5zYl9sb2dzZWN0bG9nOwogCQlpZiAobG9nMl9zaXplIDwgQkJTSElGVCkgewotCQkJeGxvZ193YXJuKCJYRlM6IExvZyBzZWN0b3Igc2l6ZSB0b28gc21hbGwgIgotCQkJCSIoMHgleCA8IDB4JXgpIiwgbG9nMl9zaXplLCBCQlNISUZUKTsKKwkJCXhmc193YXJuKG1wLCAiTG9nIHNlY3RvciBzaXplIHRvbyBzbWFsbCAoMHgleCA8IDB4JXgpIiwKKwkJCQlsb2cyX3NpemUsIEJCU0hJRlQpOwogCQkJZ290byBvdXRfZnJlZV9sb2c7CiAJCX0KIAogCSAgICAgICAgbG9nMl9zaXplIC09IEJCU0hJRlQ7CiAJCWlmIChsb2cyX3NpemUgPiBtcC0+bV9zZWN0YmJfbG9nKSB7Ci0JCQl4bG9nX3dhcm4oIlhGUzogTG9nIHNlY3RvciBzaXplIHRvbyBsYXJnZSAiCi0JCQkJIigweCV4ID4gMHgleCkiLCBsb2cyX3NpemUsIG1wLT5tX3NlY3RiYl9sb2cpOworCQkJeGZzX3dhcm4obXAsICJMb2cgc2VjdG9yIHNpemUgdG9vIGxhcmdlICgweCV4ID4gMHgleCkiLAorCQkJCWxvZzJfc2l6ZSwgbXAtPm1fc2VjdGJiX2xvZyk7CiAJCQlnb3RvIG91dF9mcmVlX2xvZzsKIAkJfQogCiAJCS8qIGZvciBsYXJnZXIgc2VjdG9yIHNpemVzLCBtdXN0IGhhdmUgdjIgb3IgZXh0ZXJuYWwgbG9nICovCiAJCWlmIChsb2cyX3NpemUgJiYgbG9nLT5sX2xvZ0JCc3RhcnQgPiAwICYmCiAJCQkgICAgIXhmc19zYl92ZXJzaW9uX2hhc2xvZ3YyKCZtcC0+bV9zYikpIHsKLQotCQkJeGxvZ193YXJuKCJYRlM6IGxvZyBzZWN0b3Igc2l6ZSAoMHgleCkgaW52YWxpZCAiCi0JCQkJICAiZm9yIGNvbmZpZ3VyYXRpb24uIiwgbG9nMl9zaXplKTsKKwkJCXhmc193YXJuKG1wLAorCQkibG9nIHNlY3RvciBzaXplICgweCV4KSBpbnZhbGlkIGZvciBjb25maWd1cmF0aW9uLiIsCisJCQkJbG9nMl9zaXplKTsKIAkJCWdvdG8gb3V0X2ZyZWVfbG9nOwogCQl9CiAJfQpAQCAtMTU2MywzOCArMTU2MSwzNiBAQAogCSAgICAiU1dBUEVYVCIKIAl9OwogCi0JeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCi0JCQkieGZzX2xvZ193cml0ZTogcmVzZXJ2YXRpb24gc3VtbWFyeTpcbiIKLQkJCSIgIHRyYW5zIHR5cGUgID0gJXMgKCV1KVxuIgotCQkJIiAgdW5pdCByZXMgICAgPSAlZCBieXRlc1xuIgotCQkJIiAgY3VycmVudCByZXMgPSAlZCBieXRlc1xuIgotCQkJIiAgdG90YWwgcmVnICAgPSAldSBieXRlcyAoby9mbG93ID0gJXUgYnl0ZXMpXG4iCi0JCQkiICBvcGhkcnMgICAgICA9ICV1IChvcGhkciBzcGFjZSA9ICV1IGJ5dGVzKVxuIgotCQkJIiAgb3BoZHIgKyByZWcgPSAldSBieXRlc1xuIgotCQkJIiAgbnVtIHJlZ2lvbnMgPSAldVxuIiwKLQkJCSgodGlja2V0LT50X3RyYW5zX3R5cGUgPD0gMCB8fAotCQkJICB0aWNrZXQtPnRfdHJhbnNfdHlwZSA+IFhGU19UUkFOU19UWVBFX01BWCkgPwotCQkJICAiYmFkLXRyYW5zLXR5cGUiIDogdHJhbnNfdHlwZV9zdHJbdGlja2V0LT50X3RyYW5zX3R5cGUtMV0pLAotCQkJdGlja2V0LT50X3RyYW5zX3R5cGUsCi0JCQl0aWNrZXQtPnRfdW5pdF9yZXMsCi0JCQl0aWNrZXQtPnRfY3Vycl9yZXMsCi0JCQl0aWNrZXQtPnRfcmVzX2Fycl9zdW0sIHRpY2tldC0+dF9yZXNfb19mbG93LAotCQkJdGlja2V0LT50X3Jlc19udW1fb3BoZHJzLCBvcGhkcl9zcGMsCi0JCQl0aWNrZXQtPnRfcmVzX2Fycl9zdW0gKyAKLQkJCXRpY2tldC0+dF9yZXNfb19mbG93ICsgb3BoZHJfc3BjLAotCQkJdGlja2V0LT50X3Jlc19udW0pOworCXhmc193YXJuKG1wLAorCQkieGZzX2xvZ193cml0ZTogcmVzZXJ2YXRpb24gc3VtbWFyeTpcbiIKKwkJIiAgdHJhbnMgdHlwZSAgPSAlcyAoJXUpXG4iCisJCSIgIHVuaXQgcmVzICAgID0gJWQgYnl0ZXNcbiIKKwkJIiAgY3VycmVudCByZXMgPSAlZCBieXRlc1xuIgorCQkiICB0b3RhbCByZWcgICA9ICV1IGJ5dGVzIChvL2Zsb3cgPSAldSBieXRlcylcbiIKKwkJIiAgb3BoZHJzICAgICAgPSAldSAob3BoZHIgc3BhY2UgPSAldSBieXRlcylcbiIKKwkJIiAgb3BoZHIgKyByZWcgPSAldSBieXRlc1xuIgorCQkiICBudW0gcmVnaW9ucyA9ICV1XG4iLAorCQkoKHRpY2tldC0+dF90cmFuc190eXBlIDw9IDAgfHwKKwkJICB0aWNrZXQtPnRfdHJhbnNfdHlwZSA+IFhGU19UUkFOU19UWVBFX01BWCkgPworCQkgICJiYWQtdHJhbnMtdHlwZSIgOiB0cmFuc190eXBlX3N0clt0aWNrZXQtPnRfdHJhbnNfdHlwZS0xXSksCisJCXRpY2tldC0+dF90cmFuc190eXBlLAorCQl0aWNrZXQtPnRfdW5pdF9yZXMsCisJCXRpY2tldC0+dF9jdXJyX3JlcywKKwkJdGlja2V0LT50X3Jlc19hcnJfc3VtLCB0aWNrZXQtPnRfcmVzX29fZmxvdywKKwkJdGlja2V0LT50X3Jlc19udW1fb3BoZHJzLCBvcGhkcl9zcGMsCisJCXRpY2tldC0+dF9yZXNfYXJyX3N1bSArCisJCXRpY2tldC0+dF9yZXNfb19mbG93ICsgb3BoZHJfc3BjLAorCQl0aWNrZXQtPnRfcmVzX251bSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdGlja2V0LT50X3Jlc19udW07IGkrKykgewotCQl1aW50IHJfdHlwZSA9IHRpY2tldC0+dF9yZXNfYXJyW2ldLnJfdHlwZTsgCi0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSAgICAicmVnaW9uWyV1XTogJXMgLSAldSBieXRlc1xuIiwKLQkJCSAgICBpLCAKKwkJdWludCByX3R5cGUgPSB0aWNrZXQtPnRfcmVzX2FycltpXS5yX3R5cGU7CisJCXhmc193YXJuKG1wLCAicmVnaW9uWyV1XTogJXMgLSAldSBieXRlc1xuIiwgaSwKIAkJCSAgICAoKHJfdHlwZSA8PSAwIHx8IHJfdHlwZSA+IFhMT0dfUkVHX1RZUEVfTUFYKSA/CiAJCQkgICAgImJhZC1ydHlwZSIgOiByZXNfdHlwZV9zdHJbcl90eXBlLTFdKSwKIAkJCSAgICB0aWNrZXQtPnRfcmVzX2FycltpXS5yX2xlbik7CiAJfQogCi0JeGZzX2Ntbl9lcnIoWEZTX1BUQUdfTE9HUkVTLCBDRV9BTEVSVCwgbXAsCisJeGZzX2FsZXJ0X3RhZyhtcCwgWEZTX1BUQUdfTE9HUkVTLAogCQkieGZzX2xvZ193cml0ZTogcmVzZXJ2YXRpb24gcmFuIG91dC4gTmVlZCB0byB1cCByZXNlcnZhdGlvbiIpOwogCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fQ09SUlVQVF9JTkNPUkUpOwogfQpAQCAtMTY4Miw3ICsxNjc4LDcgQEAKIAljYXNlIFhGU19MT0c6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGxvZy0+bF9tcCwKKwkJeGZzX3dhcm4obG9nLT5sX21wLAogCQkJIkJhZCBYRlMgdHJhbnNhY3Rpb24gY2xpZW50aWQgMHgleCBpbiB0aWNrZXQgMHglcCIsCiAJCQlvcGhkci0+b2hfY2xpZW50aWQsIHRpY2tldCk7CiAJCXJldHVybiBOVUxMOwpAQCAtMjI2NCw3ICsyMjYwLDcgQEAKIAkJaWYgKHJlcGVhdHMgPiA1MDAwKSB7CiAJCQlmbHVzaGNudCArPSByZXBlYXRzOwogCQkJcmVwZWF0cyA9IDA7Ci0JCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBsb2ctPmxfbXAsCisJCQl4ZnNfd2Fybihsb2ctPmxfbXAsCiAJCQkJIiVzOiBwb3NzaWJsZSBpbmZpbml0ZSBsb29wICglZCBpdGVyYXRpb25zKSIsCiAJCQkJX19mdW5jX18sIGZsdXNoY250KTsKIAkJfQpAQCAtMzA1MiwxMCArMzA0OCw4IEBACiAJaW50CWVycm9yOwogCiAJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgZmxhZ3MsIE5VTEwpOwotCWlmIChlcnJvcikgewotCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwgInhmc19sb2dfZm9yY2U6ICIKLQkJCSJlcnJvciAlZCByZXR1cm5lZC4iLCBlcnJvcik7Ci0JfQorCWlmIChlcnJvcikKKwkJeGZzX3dhcm4obXAsICIlczogZXJyb3IgJWQgcmV0dXJuZWQuIiwgX19mdW5jX18sIGVycm9yKTsKIH0KIAogLyoKQEAgLTMyMDQsMTAgKzMxOTgsOCBAQAogCWludAllcnJvcjsKIAogCWVycm9yID0gX3hmc19sb2dfZm9yY2VfbHNuKG1wLCBsc24sIGZsYWdzLCBOVUxMKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsICJ4ZnNfbG9nX2ZvcmNlOiAiCi0JCQkiZXJyb3IgJWQgcmV0dXJuZWQuIiwgZXJyb3IpOwotCX0KKwlpZiAoZXJyb3IpCisJCXhmc193YXJuKG1wLCAiJXM6IGVycm9yICVkIHJldHVybmVkLiIsIF9fZnVuY19fLCBlcnJvcik7CiB9CiAKIC8qCkBAIC0zNDEyLDcgKzM0MDQsNyBAQAogCX0KIAogCWlmICghZ29vZF9wdHIpCi0JCXhsb2dfcGFuaWMoInhsb2dfdmVyaWZ5X2Rlc3RfcHRyOiBpbnZhbGlkIHB0ciIpOworCQl4ZnNfZW1lcmcobG9nLT5sX21wLCAiJXM6IGludmFsaWQgcHRyIiwgX19mdW5jX18pOwogfQogCiBTVEFUSUMgdm9pZApAQCAtMzQ0OCwxNiArMzQ0MCwxNiBAQAogCWJsb2NrcyA9CiAJICAgIGxvZy0+bF9sb2dCQnNpemUgLSAobG9nLT5sX3ByZXZfYmxvY2sgLSBCTE9DS19MU04odGFpbF9sc24pKTsKIAlpZiAoYmxvY2tzIDwgQlRPQkIoaWNsb2ctPmljX29mZnNldCkrQlRPQkIobG9nLT5sX2ljbG9nX2hzaXplKSkKLQkgICAgeGxvZ19wYW5pYygieGxvZ192ZXJpZnlfdGFpbF9sc246IHJhbiBvdXQgb2YgbG9nIHNwYWNlIik7CisJCXhmc19lbWVyZyhsb2ctPmxfbXAsICIlczogcmFuIG91dCBvZiBsb2cgc3BhY2UiLCBfX2Z1bmNfXyk7CiAgICAgfSBlbHNlIHsKIAlBU1NFUlQoQ1lDTEVfTFNOKHRhaWxfbHNuKSsxID09IGxvZy0+bF9wcmV2X2N5Y2xlKTsKIAogCWlmIChCTE9DS19MU04odGFpbF9sc24pID09IGxvZy0+bF9wcmV2X2Jsb2NrKQotCSAgICB4bG9nX3BhbmljKCJ4bG9nX3ZlcmlmeV90YWlsX2xzbjogdGFpbCB3cmFwcGVkIik7CisJCXhmc19lbWVyZyhsb2ctPmxfbXAsICIlczogdGFpbCB3cmFwcGVkIiwgX19mdW5jX18pOwogCiAJYmxvY2tzID0gQkxPQ0tfTFNOKHRhaWxfbHNuKSAtIGxvZy0+bF9wcmV2X2Jsb2NrOwogCWlmIChibG9ja3MgPCBCVE9CQihpY2xvZy0+aWNfb2Zmc2V0KSArIDEpCi0JICAgIHhsb2dfcGFuaWMoInhsb2dfdmVyaWZ5X3RhaWxfbHNuOiByYW4gb3V0IG9mIGxvZyBzcGFjZSIpOworCQl4ZnNfZW1lcmcobG9nLT5sX21wLCAiJXM6IHJhbiBvdXQgb2YgbG9nIHNwYWNlIiwgX19mdW5jX18pOwogICAgIH0KIH0JLyogeGxvZ192ZXJpZnlfdGFpbF9sc24gKi8KIApAQCAtMzQ5NywyMiArMzQ4OSwyMyBAQAogCWljcHRyID0gbG9nLT5sX2ljbG9nOwogCWZvciAoaT0wOyBpIDwgbG9nLT5sX2ljbG9nX2J1ZnM7IGkrKykgewogCQlpZiAoaWNwdHIgPT0gTlVMTCkKLQkJCXhsb2dfcGFuaWMoInhsb2dfdmVyaWZ5X2ljbG9nOiBpbnZhbGlkIHB0ciIpOworCQkJeGZzX2VtZXJnKGxvZy0+bF9tcCwgIiVzOiBpbnZhbGlkIHB0ciIsIF9fZnVuY19fKTsKIAkJaWNwdHIgPSBpY3B0ci0+aWNfbmV4dDsKIAl9CiAJaWYgKGljcHRyICE9IGxvZy0+bF9pY2xvZykKLQkJeGxvZ19wYW5pYygieGxvZ192ZXJpZnlfaWNsb2c6IGNvcnJ1cHQgaWNsb2cgcmluZyIpOworCQl4ZnNfZW1lcmcobG9nLT5sX21wLCAiJXM6IGNvcnJ1cHQgaWNsb2cgcmluZyIsIF9fZnVuY19fKTsKIAlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAKIAkvKiBjaGVjayBsb2cgbWFnaWMgbnVtYmVycyAqLwogCWlmIChiZTMyX3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbWFnaWNubykgIT0gWExPR19IRUFERVJfTUFHSUNfTlVNKQotCQl4bG9nX3BhbmljKCJ4bG9nX3ZlcmlmeV9pY2xvZzogaW52YWxpZCBtYWdpYyBudW0iKTsKKwkJeGZzX2VtZXJnKGxvZy0+bF9tcCwgIiVzOiBpbnZhbGlkIG1hZ2ljIG51bSIsIF9fZnVuY19fKTsKIAogCXB0ciA9ICh4ZnNfY2FkZHJfdCkgJmljbG9nLT5pY19oZWFkZXI7CiAJZm9yIChwdHIgKz0gQkJTSVpFOyBwdHIgPCAoKHhmc19jYWRkcl90KSZpY2xvZy0+aWNfaGVhZGVyKSArIGNvdW50OwogCSAgICAgcHRyICs9IEJCU0laRSkgewogCQlpZiAoYmUzMl90b19jcHUoKihfX2JlMzIgKilwdHIpID09IFhMT0dfSEVBREVSX01BR0lDX05VTSkKLQkJCXhsb2dfcGFuaWMoInhsb2dfdmVyaWZ5X2ljbG9nOiB1bmV4cGVjdGVkIG1hZ2ljIG51bSIpOworCQkJeGZzX2VtZXJnKGxvZy0+bF9tcCwgIiVzOiB1bmV4cGVjdGVkIG1hZ2ljIG51bSIsCisJCQkJX19mdW5jX18pOwogCX0KIAogCS8qIGNoZWNrIGZpZWxkcyAqLwpAQCAtMzU0Miw5ICszNTM1LDEwIEBACiAJCQl9CiAJCX0KIAkJaWYgKGNsaWVudGlkICE9IFhGU19UUkFOU0FDVElPTiAmJiBjbGllbnRpZCAhPSBYRlNfTE9HKQotCQkJY21uX2VycihDRV9XQVJOLCAieGxvZ192ZXJpZnlfaWNsb2c6ICIKLQkJCQkiaW52YWxpZCBjbGllbnRpZCAlZCBvcCAweCVwIG9mZnNldCAweCVseCIsCi0JCQkJY2xpZW50aWQsIG9waGVhZCwgKHVuc2lnbmVkIGxvbmcpZmllbGRfb2Zmc2V0KTsKKwkJCXhmc193YXJuKGxvZy0+bF9tcCwKKwkJCQkiJXM6IGludmFsaWQgY2xpZW50aWQgJWQgb3AgMHglcCBvZmZzZXQgMHglbHgiLAorCQkJCV9fZnVuY19fLCBjbGllbnRpZCwgb3BoZWFkLAorCQkJCSh1bnNpZ25lZCBsb25nKWZpZWxkX29mZnNldCk7CiAKIAkJLyogY2hlY2sgbGVuZ3RoICovCiAJCWZpZWxkX29mZnNldCA9IChfX3BzaW50X3QpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19wcml2LmggYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKaW5kZXggZDVmOGJlOC4uMTVkYmYxZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcHJpdi5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaApAQCAtODcsMTAgKzg3LDYgQEAKIAlyZXR1cm4gYmUzMl90b19jcHUoaSkgPj4gMjQ7CiB9CiAKLSNkZWZpbmUgeGxvZ19wYW5pYyhhcmdzLi4uKQljbW5fZXJyKENFX1BBTklDLCAjIyBhcmdzKQotI2RlZmluZSB4bG9nX2V4aXQoYXJncy4uLikJY21uX2VycihDRV9QQU5JQywgIyMgYXJncykKLSNkZWZpbmUgeGxvZ193YXJuKGFyZ3MuLi4pCWNtbl9lcnIoQ0VfV0FSTiwgIyMgYXJncykKLQogLyoKICAqIEluIGNvcmUgbG9nIHN0YXRlCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwppbmRleCBhYTBlYmI3Li4wYzRhNTYxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKKysrIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCkBAIC05Miw3ICs5Miw3IEBACiAJaW50CQluYmJsa3MpCiB7CiAJaWYgKCF4bG9nX2J1Zl9iYmNvdW50X3ZhbGlkKGxvZywgbmJibGtzKSkgewotCQl4bG9nX3dhcm4oIlhGUzogSW52YWxpZCBibG9jayBsZW5ndGggKDB4JXgpIGdpdmVuIGZvciBidWZmZXIiLAorCQl4ZnNfd2Fybihsb2ctPmxfbXAsICJJbnZhbGlkIGJsb2NrIGxlbmd0aCAoMHgleCkgZm9yIGJ1ZmZlciIsCiAJCQluYmJsa3MpOwogCQlYRlNfRVJST1JfUkVQT1JUKF9fZnVuY19fLCBYRlNfRVJSTEVWRUxfSElHSCwgbG9nLT5sX21wKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNjAsNyArMTYwLDcgQEAKIAlpbnQJCWVycm9yOwogCiAJaWYgKCF4bG9nX2J1Zl9iYmNvdW50X3ZhbGlkKGxvZywgbmJibGtzKSkgewotCQl4bG9nX3dhcm4oIlhGUzogSW52YWxpZCBibG9jayBsZW5ndGggKDB4JXgpIGdpdmVuIGZvciBidWZmZXIiLAorCQl4ZnNfd2Fybihsb2ctPmxfbXAsICJJbnZhbGlkIGJsb2NrIGxlbmd0aCAoMHgleCkgZm9yIGJ1ZmZlciIsCiAJCQluYmJsa3MpOwogCQlYRlNfRVJST1JfUkVQT1JUKF9fZnVuY19fLCBYRlNfRVJSTEVWRUxfSElHSCwgbG9nLT5sX21wKTsKIAkJcmV0dXJuIEVGU0NPUlJVUFRFRDsKQEAgLTIxOSw3ICsyMTksNyBAQAogCWludAkJZXJyb3I7CiAKIAlpZiAoIXhsb2dfYnVmX2JiY291bnRfdmFsaWQobG9nLCBuYmJsa3MpKSB7Ci0JCXhsb2dfd2FybigiWEZTOiBJbnZhbGlkIGJsb2NrIGxlbmd0aCAoMHgleCkgZ2l2ZW4gZm9yIGJ1ZmZlciIsCisJCXhmc193YXJuKGxvZy0+bF9tcCwgIkludmFsaWQgYmxvY2sgbGVuZ3RoICgweCV4KSBmb3IgYnVmZmVyIiwKIAkJCW5iYmxrcyk7CiAJCVhGU19FUlJPUl9SRVBPUlQoX19mdW5jX18sIFhGU19FUlJMRVZFTF9ISUdILCBsb2ctPmxfbXApOwogCQlyZXR1cm4gRUZTQ09SUlVQVEVEOwpAQCAtMjU0LDkgKzI1NCw5IEBACiAJeGZzX21vdW50X3QJCSptcCwKIAl4bG9nX3JlY19oZWFkZXJfdAkqaGVhZCkKIHsKLQljbW5fZXJyKENFX0RFQlVHLCAiJXM6ICBTQiA6IHV1aWQgPSAlcFUsIGZtdCA9ICVkXG4iLAorCXhmc19kZWJ1ZyhtcCwgIiVzOiAgU0IgOiB1dWlkID0gJXBVLCBmbXQgPSAlZFxuIiwKIAkJX19mdW5jX18sICZtcC0+bV9zYi5zYl91dWlkLCBYTE9HX0ZNVCk7Ci0JY21uX2VycihDRV9ERUJVRywgIiAgICBsb2cgOiB1dWlkID0gJXBVLCBmbXQgPSAlZFxuIiwKKwl4ZnNfZGVidWcobXAsICIgICAgbG9nIDogdXVpZCA9ICVwVSwgZm10ID0gJWRcbiIsCiAJCSZoZWFkLT5oX2ZzX3V1aWQsIGJlMzJfdG9fY3B1KGhlYWQtPmhfZm10KSk7CiB9CiAjZWxzZQpAQCAtMjc5LDE1ICsyNzksMTUgQEAKIAkgKiBhIGRpcnR5IGxvZyBjcmVhdGVkIGluIElSSVguCiAJICovCiAJaWYgKHVubGlrZWx5KGJlMzJfdG9fY3B1KGhlYWQtPmhfZm10KSAhPSBYTE9HX0ZNVCkpIHsKLQkJeGxvZ193YXJuKAotCSJYRlM6IGRpcnR5IGxvZyB3cml0dGVuIGluIGluY29tcGF0aWJsZSBmb3JtYXQgLSBjYW4ndCByZWNvdmVyIik7CisJCXhmc193YXJuKG1wLAorCSJkaXJ0eSBsb2cgd3JpdHRlbiBpbiBpbmNvbXBhdGlibGUgZm9ybWF0IC0gY2FuJ3QgcmVjb3ZlciIpOwogCQl4bG9nX2hlYWRlcl9jaGVja19kdW1wKG1wLCBoZWFkKTsKIAkJWEZTX0VSUk9SX1JFUE9SVCgieGxvZ19oZWFkZXJfY2hlY2tfcmVjb3ZlcigxKSIsCiAJCQkJIFhGU19FUlJMRVZFTF9ISUdILCBtcCk7CiAJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KCF1dWlkX2VxdWFsKCZtcC0+bV9zYi5zYl91dWlkLCAmaGVhZC0+aF9mc191dWlkKSkpIHsKLQkJeGxvZ193YXJuKAotCSJYRlM6IGRpcnR5IGxvZyBlbnRyeSBoYXMgbWlzbWF0Y2hlZCB1dWlkIC0gY2FuJ3QgcmVjb3ZlciIpOworCQl4ZnNfd2FybihtcCwKKwkiZGlydHkgbG9nIGVudHJ5IGhhcyBtaXNtYXRjaGVkIHV1aWQgLSBjYW4ndCByZWNvdmVyIik7CiAJCXhsb2dfaGVhZGVyX2NoZWNrX2R1bXAobXAsIGhlYWQpOwogCQlYRlNfRVJST1JfUkVQT1JUKCJ4bG9nX2hlYWRlcl9jaGVja19yZWNvdmVyKDIpIiwKIAkJCQkgWEZTX0VSUkxFVkVMX0hJR0gsIG1wKTsKQEAgLTMxMiw5ICszMTIsOSBAQAogCQkgKiBoX2ZzX3V1aWQgaXMgbmlsLCB3ZSBhc3N1bWUgdGhpcyBsb2cgd2FzIGxhc3QgbW91bnRlZAogCQkgKiBieSBJUklYIGFuZCBjb250aW51ZS4KIAkJICovCi0JCXhsb2dfd2FybigiWEZTOiBuaWwgdXVpZCBpbiBsb2cgLSBJUklYIHN0eWxlIGxvZyIpOworCQl4ZnNfd2FybihtcCwgIm5pbCB1dWlkIGluIGxvZyAtIElSSVggc3R5bGUgbG9nIik7CiAJfSBlbHNlIGlmICh1bmxpa2VseSghdXVpZF9lcXVhbCgmbXAtPm1fc2Iuc2JfdXVpZCwgJmhlYWQtPmhfZnNfdXVpZCkpKSB7Ci0JCXhsb2dfd2FybigiWEZTOiBsb2cgaGFzIG1pc21hdGNoZWQgdXVpZCAtIGNhbid0IHJlY292ZXIiKTsKKwkJeGZzX3dhcm4obXAsICJsb2cgaGFzIG1pc21hdGNoZWQgdXVpZCAtIGNhbid0IHJlY292ZXIiKTsKIAkJeGxvZ19oZWFkZXJfY2hlY2tfZHVtcChtcCwgaGVhZCk7CiAJCVhGU19FUlJPUl9SRVBPUlQoInhsb2dfaGVhZGVyX2NoZWNrX21vdW50IiwKIAkJCQkgWEZTX0VSUkxFVkVMX0hJR0gsIG1wKTsKQEAgLTQ5MCw4ICs0OTAsOCBAQAogCWZvciAoaSA9ICgqbGFzdF9ibGspIC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJaWYgKGkgPCBzdGFydF9ibGspIHsKIAkJCS8qIHZhbGlkIGxvZyByZWNvcmQgbm90IGZvdW5kICovCi0JCQl4bG9nX3dhcm4oCi0JCSJYRlM6IExvZyBpbmNvbnNpc3RlbnQgKGRpZG4ndCBmaW5kIHByZXZpb3VzIGhlYWRlcikiKTsKKwkJCXhmc193YXJuKGxvZy0+bF9tcCwKKwkJIkxvZyBpbmNvbnNpc3RlbnQgKGRpZG4ndCBmaW5kIHByZXZpb3VzIGhlYWRlcikiKTsKIAkJCUFTU0VSVCgwKTsKIAkJCWVycm9yID0gWEZTX0VSUk9SKEVJTyk7CiAJCQlnb3RvIG91dDsKQEAgLTU5MSwxMiArNTkxLDEyIEBACiAJCQkgKiBta2ZzIGV0YyB3cml0ZSBhIGR1bW15IHVubW91bnQgcmVjb3JkIHRvIGEgZnJlc2gKIAkJCSAqIGxvZyBzbyB3ZSBjYW4gc3RvcmUgdGhlIHV1aWQgaW4gdGhlcmUKIAkJCSAqLwotCQkJeGxvZ193YXJuKCJYRlM6IHRvdGFsbHkgemVyb2VkIGxvZyIpOworCQkJeGZzX3dhcm4obG9nLT5sX21wLCAidG90YWxseSB6ZXJvZWQgbG9nIik7CiAJCX0KIAogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKGVycm9yKSB7Ci0JCXhsb2dfd2FybigiWEZTOiBlbXB0eSBsb2cgY2hlY2sgZmFpbGVkIik7CisJCXhmc193YXJuKGxvZy0+bF9tcCwgImVtcHR5IGxvZyBjaGVjayBmYWlsZWQiKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIApAQCAtODE5LDcgKzgxOSw3IEBACiAJeGxvZ19wdXRfYnAoYnApOwogCiAJaWYgKGVycm9yKQotCSAgICB4bG9nX3dhcm4oIlhGUzogZmFpbGVkIHRvIGZpbmQgbG9nIGhlYWQiKTsKKwkJeGZzX3dhcm4obG9nLT5sX21wLCAiZmFpbGVkIHRvIGZpbmQgbG9nIGhlYWQiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTkxMiw3ICs5MTIsNyBAQAogCQl9CiAJfQogCWlmICghZm91bmQpIHsKLQkJeGxvZ193YXJuKCJYRlM6IHhsb2dfZmluZF90YWlsOiBjb3VsZG4ndCBmaW5kIHN5bmMgcmVjb3JkIik7CisJCXhmc193YXJuKGxvZy0+bF9tcCwgIiVzOiBjb3VsZG4ndCBmaW5kIHN5bmMgcmVjb3JkIiwgX19mdW5jX18pOwogCQlBU1NFUlQoMCk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9CkBAIC0xMDI4LDcgKzEwMjgsNyBAQAogCXhsb2dfcHV0X2JwKGJwKTsKIAogCWlmIChlcnJvcikKLQkJeGxvZ193YXJuKCJYRlM6IGZhaWxlZCB0byBsb2NhdGUgbG9nIHRhaWwiKTsKKwkJeGZzX3dhcm4obG9nLT5sX21wLCAiZmFpbGVkIHRvIGxvY2F0ZSBsb2cgdGFpbCIpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTA5Miw3ICsxMDkyLDggQEAKIAkJICogdGhlIGZpcnN0IGJsb2NrIG11c3QgYmUgMS4gSWYgaXQncyBub3QsIG1heWJlIHdlJ3JlCiAJCSAqIG5vdCBsb29raW5nIGF0IGEgbG9nLi4uIEJhaWwgb3V0LgogCQkgKi8KLQkJeGxvZ193YXJuKCJYRlM6IExvZyBpbmNvbnNpc3RlbnQgb3Igbm90IGEgbG9nIChsYXN0PT0wLCBmaXJzdCE9MSkiKTsKKwkJeGZzX3dhcm4obG9nLT5sX21wLAorCQkJIkxvZyBpbmNvbnNpc3RlbnQgb3Igbm90IGEgbG9nIChsYXN0PT0wLCBmaXJzdCE9MSkiKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCX0KIApAQCAtMTUwNiw4ICsxNTA3LDggQEAKIAlpZiAobGlzdF9lbXB0eSgmdHJhbnMtPnJfaXRlbXEpKSB7CiAJCS8qIHdlIG5lZWQgdG8gY2F0Y2ggbG9nIGNvcnJ1cHRpb25zIGhlcmUgKi8KIAkJaWYgKCoodWludCAqKWRwICE9IFhGU19UUkFOU19IRUFERVJfTUFHSUMpIHsKLQkJCXhsb2dfd2FybigiWEZTOiB4bG9nX3JlY292ZXJfYWRkX3RvX3RyYW5zOiAiCi0JCQkJICAiYmFkIGhlYWRlciBtYWdpYyBudW1iZXIiKTsKKwkJCXhmc193YXJuKGxvZy0+bF9tcCwgIiVzOiBiYWQgaGVhZGVyIG1hZ2ljIG51bWJlciIsCisJCQkJX19mdW5jX18pOwogCQkJQVNTRVJUKDApOwogCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCQl9CkBAIC0xNTM0LDggKzE1MzUsOCBAQAogCWlmIChpdGVtLT5yaV90b3RhbCA9PSAwKSB7CQkvKiBmaXJzdCByZWdpb24gdG8gYmUgYWRkZWQgKi8KIAkJaWYgKGluX2YtPmlsZl9zaXplID09IDAgfHwKIAkJICAgIGluX2YtPmlsZl9zaXplID4gWExPR19NQVhfUkVHSU9OU19JTl9JVEVNKSB7Ci0JCQl4bG9nX3dhcm4oCi0JIlhGUzogYmFkIG51bWJlciBvZiByZWdpb25zICglZCkgaW4gaW5vZGUgbG9nIGZvcm1hdCIsCisJCQl4ZnNfd2Fybihsb2ctPmxfbXAsCisJCSJiYWQgbnVtYmVyIG9mIHJlZ2lvbnMgKCVkKSBpbiBpbm9kZSBsb2cgZm9ybWF0IiwKIAkJCQkgIGluX2YtPmlsZl9zaXplKTsKIAkJCUFTU0VSVCgwKTsKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKQEAgLTE1OTIsOCArMTU5Myw5IEBACiAJCQlsaXN0X21vdmVfdGFpbCgmaXRlbS0+cmlfbGlzdCwgJnRyYW5zLT5yX2l0ZW1xKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJeGxvZ193YXJuKAotCSJYRlM6IHhsb2dfcmVjb3Zlcl9yZW9yZGVyX3RyYW5zOiB1bnJlY29nbml6ZWQgdHlwZSBvZiBsb2cgb3BlcmF0aW9uIik7CisJCQl4ZnNfd2Fybihsb2ctPmxfbXAsCisJCQkJIiVzOiB1bnJlY29nbml6ZWQgdHlwZSBvZiBsb2cgb3BlcmF0aW9uIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlBU1NFUlQoMCk7CiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJCX0KQEAgLTE4MDMsOCArMTgwNSw5IEBACiAJCWxvZ2dlZF9uZXh0cCA9IGl0ZW0tPnJpX2J1ZltpdGVtX2luZGV4XS5pX2FkZHIgKwogCQkJCW5leHRfdW5saW5rZWRfb2Zmc2V0IC0gcmVnX2J1Zl9vZmZzZXQ7CiAJCWlmICh1bmxpa2VseSgqbG9nZ2VkX25leHRwID09IDApKSB7Ci0JCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCi0JCQkJImJhZCBpbm9kZSBidWZmZXIgbG9nIHJlY29yZCAocHRyID0gMHglcCwgYnAgPSAweCVwKS4gIFhGUyB0cnlpbmcgdG8gcmVwbGF5IGJhZCAoMCkgaW5vZGUgZGlfbmV4dF91bmxpbmtlZCBmaWVsZCIsCisJCQl4ZnNfYWxlcnQobXAsCisJCSJCYWQgaW5vZGUgYnVmZmVyIGxvZyByZWNvcmQgKHB0ciA9IDB4JXAsIGJwID0gMHglcCkuICIKKwkJIlRyeWluZyB0byByZXBsYXkgYmFkICgwKSBpbm9kZSBkaV9uZXh0X3VubGlua2VkIGZpZWxkLiIsCiAJCQkJaXRlbSwgYnApOwogCQkJWEZTX0VSUk9SX1JFUE9SVCgieGxvZ19yZWNvdmVyX2RvX2lub2RlX2J1ZiIsCiAJCQkJCSBYRlNfRVJSTEVWRUxfTE9XLCBtcCk7CkBAIC0xODYzLDE3ICsxODY2LDE3IEBACiAJCWlmIChidWZfZi0+YmxmX2ZsYWdzICYKIAkJICAgKFhGU19CTEZfVURRVU9UX0JVRnxYRlNfQkxGX1BEUVVPVF9CVUZ8WEZTX0JMRl9HRFFVT1RfQlVGKSkgewogCQkJaWYgKGl0ZW0tPnJpX2J1ZltpXS5pX2FkZHIgPT0gTlVMTCkgewotCQkJCWNtbl9lcnIoQ0VfQUxFUlQsCisJCQkJeGZzX2FsZXJ0KG1wLAogCQkJCQkiWEZTOiBOVUxMIGRxdW90IGluICVzLiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIG5leHQ7CiAJCQl9CiAJCQlpZiAoaXRlbS0+cmlfYnVmW2ldLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7Ci0JCQkJY21uX2VycihDRV9BTEVSVCwKKwkJCQl4ZnNfYWxlcnQobXAsCiAJCQkJCSJYRlM6IGRxdW90IHRvbyBzbWFsbCAoJWQpIGluICVzLiIsCiAJCQkJCWl0ZW0tPnJpX2J1ZltpXS5pX2xlbiwgX19mdW5jX18pOwogCQkJCWdvdG8gbmV4dDsKIAkJCX0KLQkJCWVycm9yID0geGZzX3FtX2RxY2hlY2soaXRlbS0+cmlfYnVmW2ldLmlfYWRkciwKKwkJCWVycm9yID0geGZzX3FtX2RxY2hlY2sobXAsIGl0ZW0tPnJpX2J1ZltpXS5pX2FkZHIsCiAJCQkJCSAgICAgICAtMSwgMCwgWEZTX1FNT1BUX0RPV0FSTiwKIAkJCQkJICAgICAgICJkcXVvdF9idWZfcmVjb3ZlciIpOwogCQkJaWYgKGVycm9yKQpAQCAtMTg5OCw2ICsxOTAxLDcgQEAKICAqLwogaW50CiB4ZnNfcW1fZHFjaGVjaygKKwlzdHJ1Y3QgeGZzX21vdW50ICptcCwKIAl4ZnNfZGlza19kcXVvdF90ICpkZHEsCiAJeGZzX2RxaWRfdAkgaWQsCiAJdWludAkJIHR5cGUsCSAgLyogdXNlZCBvbmx5IHdoZW4gSU9fZG9yZXBhaXIgaXMgdHJ1ZSAqLwpAQCAtMTkyNCwxNCArMTkyOCwxNCBAQAogCSAqLwogCWlmIChiZTE2X3RvX2NwdShkZHEtPmRfbWFnaWMpICE9IFhGU19EUVVPVF9NQUdJQykgewogCQlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRE9XQVJOKQotCQkJY21uX2VycihDRV9BTEVSVCwKKwkJCXhmc19hbGVydChtcCwKIAkJCSIlcyA6IFhGUyBkcXVvdCBJRCAweCV4LCBtYWdpYyAweCV4ICE9IDB4JXgiLAogCQkJc3RyLCBpZCwgYmUxNl90b19jcHUoZGRxLT5kX21hZ2ljKSwgWEZTX0RRVU9UX01BR0lDKTsKIAkJZXJycysrOwogCX0KIAlpZiAoZGRxLT5kX3ZlcnNpb24gIT0gWEZTX0RRVU9UX1ZFUlNJT04pIHsKIAkJaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RPV0FSTikKLQkJCWNtbl9lcnIoQ0VfQUxFUlQsCisJCQl4ZnNfYWxlcnQobXAsCiAJCQkiJXMgOiBYRlMgZHF1b3QgSUQgMHgleCwgdmVyc2lvbiAweCV4ICE9IDB4JXgiLAogCQkJc3RyLCBpZCwgZGRxLT5kX3ZlcnNpb24sIFhGU19EUVVPVF9WRVJTSU9OKTsKIAkJZXJycysrOwpAQCAtMTk0MSw3ICsxOTQ1LDcgQEAKIAkgICAgZGRxLT5kX2ZsYWdzICE9IFhGU19EUV9QUk9KICYmCiAJICAgIGRkcS0+ZF9mbGFncyAhPSBYRlNfRFFfR1JPVVApIHsKIAkJaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RPV0FSTikKLQkJCWNtbl9lcnIoQ0VfQUxFUlQsCisJCQl4ZnNfYWxlcnQobXAsCiAJCQkiJXMgOiBYRlMgZHF1b3QgSUQgMHgleCwgdW5rbm93biBmbGFncyAweCV4IiwKIAkJCXN0ciwgaWQsIGRkcS0+ZF9mbGFncyk7CiAJCWVycnMrKzsKQEAgLTE5NDksNyArMTk1Myw3IEBACiAKIAlpZiAoaWQgIT0gLTEgJiYgaWQgIT0gYmUzMl90b19jcHUoZGRxLT5kX2lkKSkgewogCQlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRE9XQVJOKQotCQkJY21uX2VycihDRV9BTEVSVCwKKwkJCXhmc19hbGVydChtcCwKIAkJCSIlcyA6IG9uZGlzay1kcXVvdCAweCVwLCBJRCBtaXNtYXRjaDogIgogCQkJIjB4JXggZXhwZWN0ZWQsIGZvdW5kIGlkIDB4JXgiLAogCQkJc3RyLCBkZHEsIGlkLCBiZTMyX3RvX2NwdShkZHEtPmRfaWQpKTsKQEAgLTE5NjIsOSArMTk2Niw4IEBACiAJCQkJYmU2NF90b19jcHUoZGRxLT5kX2Jsa19zb2Z0bGltaXQpKSB7CiAJCQlpZiAoIWRkcS0+ZF9idGltZXIpIHsKIAkJCQlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRE9XQVJOKQotCQkJCQljbW5fZXJyKENFX0FMRVJULAotCQkJCQkiJXMgOiBEcXVvdCBJRCAweCV4ICgweCVwKSAiCi0JCQkJCSJCTEsgVElNRVIgTk9UIFNUQVJURUQiLAorCQkJCQl4ZnNfYWxlcnQobXAsCisJCQkiJXMgOiBEcXVvdCBJRCAweCV4ICgweCVwKSBCTEsgVElNRVIgTk9UIFNUQVJURUQiLAogCQkJCQlzdHIsIChpbnQpYmUzMl90b19jcHUoZGRxLT5kX2lkKSwgZGRxKTsKIAkJCQllcnJzKys7CiAJCQl9CkBAIC0xOTc0LDkgKzE5NzcsOCBAQAogCQkJCWJlNjRfdG9fY3B1KGRkcS0+ZF9pbm9fc29mdGxpbWl0KSkgewogCQkJaWYgKCFkZHEtPmRfaXRpbWVyKSB7CiAJCQkJaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RPV0FSTikKLQkJCQkJY21uX2VycihDRV9BTEVSVCwKLQkJCQkJIiVzIDogRHF1b3QgSUQgMHgleCAoMHglcCkgIgotCQkJCQkiSU5PREUgVElNRVIgTk9UIFNUQVJURUQiLAorCQkJCQl4ZnNfYWxlcnQobXAsCisJCQkiJXMgOiBEcXVvdCBJRCAweCV4ICgweCVwKSBJTk9ERSBUSU1FUiBOT1QgU1RBUlRFRCIsCiAJCQkJCXN0ciwgKGludCliZTMyX3RvX2NwdShkZHEtPmRfaWQpLCBkZHEpOwogCQkJCWVycnMrKzsKIAkJCX0KQEAgLTE5ODYsOSArMTk4OCw4IEBACiAJCQkJYmU2NF90b19jcHUoZGRxLT5kX3J0Yl9zb2Z0bGltaXQpKSB7CiAJCQlpZiAoIWRkcS0+ZF9ydGJ0aW1lcikgewogCQkJCWlmIChmbGFncyAmIFhGU19RTU9QVF9ET1dBUk4pCi0JCQkJCWNtbl9lcnIoQ0VfQUxFUlQsCi0JCQkJCSIlcyA6IERxdW90IElEIDB4JXggKDB4JXApICIKLQkJCQkJIlJUQkxLIFRJTUVSIE5PVCBTVEFSVEVEIiwKKwkJCQkJeGZzX2FsZXJ0KG1wLAorCQkJIiVzIDogRHF1b3QgSUQgMHgleCAoMHglcCkgUlRCTEsgVElNRVIgTk9UIFNUQVJURUQiLAogCQkJCQlzdHIsIChpbnQpYmUzMl90b19jcHUoZGRxLT5kX2lkKSwgZGRxKTsKIAkJCQllcnJzKys7CiAJCQl9CkBAIC0xOTk5LDcgKzIwMDAsNyBAQAogCQlyZXR1cm4gZXJyczsKIAogCWlmIChmbGFncyAmIFhGU19RTU9QVF9ET1dBUk4pCi0JCWNtbl9lcnIoQ0VfTk9URSwgIlJlLWluaXRpYWxpemluZyBkcXVvdCBJRCAweCV4IiwgaWQpOworCQl4ZnNfbm90aWNlKG1wLCAiUmUtaW5pdGlhbGl6aW5nIGRxdW90IElEIDB4JXgiLCBpZCk7CiAKIAkvKgogCSAqIFR5cGljYWxseSwgYSByZXBhaXIgaXMgb25seSByZXF1ZXN0ZWQgYnkgcXVvdGFjaGVjay4KQEAgLTIyMTgsOSArMjIxOSw5IEBACiAJICovCiAJaWYgKHVubGlrZWx5KGJlMTZfdG9fY3B1KGRpcC0+ZGlfbWFnaWMpICE9IFhGU19ESU5PREVfTUFHSUMpKSB7CiAJCXhmc19idWZfcmVsc2UoYnApOwotCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCi0JCQkieGZzX2lub2RlX3JlY292ZXI6IEJhZCBpbm9kZSBtYWdpYyBudW1iZXIsIGRpbm8gcHRyID0gMHglcCwgZGlubyBicCA9IDB4JXAsIGlubyA9ICVMZCIsCi0JCQlkaXAsIGJwLCBpbl9mLT5pbGZfaW5vKTsKKwkJeGZzX2FsZXJ0KG1wLAorCSIlczogQmFkIGlub2RlIG1hZ2ljIG51bWJlciwgZGlwID0gMHglcCwgZGlubyBicCA9IDB4JXAsIGlubyA9ICVMZCIsCisJCQlfX2Z1bmNfXywgZGlwLCBicCwgaW5fZi0+aWxmX2lubyk7CiAJCVhGU19FUlJPUl9SRVBPUlQoInhsb2dfcmVjb3Zlcl9pbm9kZV9wYXNzMigxKSIsCiAJCQkJIFhGU19FUlJMRVZFTF9MT1csIG1wKTsKIAkJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CkBAIC0yMjI5LDkgKzIyMzAsOSBAQAogCWRpY3AgPSBpdGVtLT5yaV9idWZbMV0uaV9hZGRyOwogCWlmICh1bmxpa2VseShkaWNwLT5kaV9tYWdpYyAhPSBYRlNfRElOT0RFX01BR0lDKSkgewogCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAotCQkJInhmc19pbm9kZV9yZWNvdmVyOiBCYWQgaW5vZGUgbG9nIHJlY29yZCwgcmVjIHB0ciAweCVwLCBpbm8gJUxkIiwKLQkJCWl0ZW0sIGluX2YtPmlsZl9pbm8pOworCQl4ZnNfYWxlcnQobXAsCisJCQkiJXM6IEJhZCBpbm9kZSBsb2cgcmVjb3JkLCByZWMgcHRyIDB4JXAsIGlubyAlTGQiLAorCQkJX19mdW5jX18sIGl0ZW0sIGluX2YtPmlsZl9pbm8pOwogCQlYRlNfRVJST1JfUkVQT1JUKCJ4bG9nX3JlY292ZXJfaW5vZGVfcGFzczIoMikiLAogCQkJCSBYRlNfRVJSTEVWRUxfTE9XLCBtcCk7CiAJCWVycm9yID0gRUZTQ09SUlVQVEVEOwpAQCAtMjI2Myw5ICsyMjY0LDEwIEBACiAJCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGxvZ19yZWNvdmVyX2lub2RlX3Bhc3MyKDMpIiwKIAkJCQkJIFhGU19FUlJMRVZFTF9MT1csIG1wLCBkaWNwKTsKIAkJCXhmc19idWZfcmVsc2UoYnApOwotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAotCQkJCSJ4ZnNfaW5vZGVfcmVjb3ZlcjogQmFkIHJlZ3VsYXIgaW5vZGUgbG9nIHJlY29yZCwgcmVjIHB0ciAweCVwLCBpbm8gcHRyID0gMHglcCwgaW5vIGJwID0gMHglcCwgaW5vICVMZCIsCi0JCQkJaXRlbSwgZGlwLCBicCwgaW5fZi0+aWxmX2lubyk7CisJCQl4ZnNfYWxlcnQobXAsCisJCSIlczogQmFkIHJlZ3VsYXIgaW5vZGUgbG9nIHJlY29yZCwgcmVjIHB0ciAweCVwLCAiCisJCSJpbm8gcHRyID0gMHglcCwgaW5vIGJwID0gMHglcCwgaW5vICVMZCIsCisJCQkJX19mdW5jX18sIGl0ZW0sIGRpcCwgYnAsIGluX2YtPmlsZl9pbm8pOwogCQkJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CiAJCQlnb3RvIGVycm9yOwogCQl9CkBAIC0yMjc2LDkgKzIyNzgsMTAgQEAKIAkJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4bG9nX3JlY292ZXJfaW5vZGVfcGFzczIoNCkiLAogCQkJCQkgICAgIFhGU19FUlJMRVZFTF9MT1csIG1wLCBkaWNwKTsKIAkJCXhmc19idWZfcmVsc2UoYnApOwotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAotCQkJCSJ4ZnNfaW5vZGVfcmVjb3ZlcjogQmFkIGRpciBpbm9kZSBsb2cgcmVjb3JkLCByZWMgcHRyIDB4JXAsIGlubyBwdHIgPSAweCVwLCBpbm8gYnAgPSAweCVwLCBpbm8gJUxkIiwKLQkJCQlpdGVtLCBkaXAsIGJwLCBpbl9mLT5pbGZfaW5vKTsKKwkJCXhmc19hbGVydChtcCwKKwkJIiVzOiBCYWQgZGlyIGlub2RlIGxvZyByZWNvcmQsIHJlYyBwdHIgMHglcCwgIgorCQkiaW5vIHB0ciA9IDB4JXAsIGlubyBicCA9IDB4JXAsIGlubyAlTGQiLAorCQkJCV9fZnVuY19fLCBpdGVtLCBkaXAsIGJwLCBpbl9mLT5pbGZfaW5vKTsKIAkJCWVycm9yID0gRUZTQ09SUlVQVEVEOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtMjI4Nyw5ICsyMjkwLDEwIEBACiAJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4bG9nX3JlY292ZXJfaW5vZGVfcGFzczIoNSkiLAogCQkJCSAgICAgWEZTX0VSUkxFVkVMX0xPVywgbXAsIGRpY3ApOwogCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAotCQkJInhmc19pbm9kZV9yZWNvdmVyOiBCYWQgaW5vZGUgbG9nIHJlY29yZCwgcmVjIHB0ciAweCVwLCBkaW5vIHB0ciAweCVwLCBkaW5vIGJwIDB4JXAsIGlubyAlTGQsIHRvdGFsIGV4dGVudHMgPSAlZCwgbmJsb2NrcyA9ICVMZCIsCi0JCQlpdGVtLCBkaXAsIGJwLCBpbl9mLT5pbGZfaW5vLAorCQl4ZnNfYWxlcnQobXAsCisJIiVzOiBCYWQgaW5vZGUgbG9nIHJlY29yZCwgcmVjIHB0ciAweCVwLCBkaW5vIHB0ciAweCVwLCAiCisJImRpbm8gYnAgMHglcCwgaW5vICVMZCwgdG90YWwgZXh0ZW50cyA9ICVkLCBuYmxvY2tzID0gJUxkIiwKKwkJCV9fZnVuY19fLCBpdGVtLCBkaXAsIGJwLCBpbl9mLT5pbGZfaW5vLAogCQkJZGljcC0+ZGlfbmV4dGVudHMgKyBkaWNwLT5kaV9hbmV4dGVudHMsCiAJCQlkaWNwLT5kaV9uYmxvY2tzKTsKIAkJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CkBAIC0yMjk5LDggKzIzMDMsOSBAQAogCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGxvZ19yZWNvdmVyX2lub2RlX3Bhc3MyKDYpIiwKIAkJCQkgICAgIFhGU19FUlJMRVZFTF9MT1csIG1wLCBkaWNwKTsKIAkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwKLQkJCSJ4ZnNfaW5vZGVfcmVjb3ZlcjogQmFkIGlub2RlIGxvZyByZWMgcHRyIDB4JXAsIGRpbm8gcHRyIDB4JXAsIGRpbm8gYnAgMHglcCwgaW5vICVMZCwgZm9ya29mZiAweCV4IiwKKwkJeGZzX2FsZXJ0KG1wLAorCSIlczogQmFkIGlub2RlIGxvZyByZWNvcmQsIHJlYyBwdHIgMHglcCwgZGlubyBwdHIgMHglcCwgIgorCSJkaW5vIGJwIDB4JXAsIGlubyAlTGQsIGZvcmtvZmYgMHgleCIsIF9fZnVuY19fLAogCQkJaXRlbSwgZGlwLCBicCwgaW5fZi0+aWxmX2lubywgZGljcC0+ZGlfZm9ya29mZik7CiAJCWVycm9yID0gRUZTQ09SUlVQVEVEOwogCQlnb3RvIGVycm9yOwpAQCAtMjMwOSw5ICsyMzE0LDkgQEAKIAkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhsb2dfcmVjb3Zlcl9pbm9kZV9wYXNzMig3KSIsCiAJCQkJICAgICBYRlNfRVJSTEVWRUxfTE9XLCBtcCwgZGljcCk7CiAJCXhmc19idWZfcmVsc2UoYnApOwotCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCi0JCQkieGZzX2lub2RlX3JlY292ZXI6IEJhZCBpbm9kZSBsb2cgcmVjb3JkIGxlbmd0aCAlZCwgcmVjIHB0ciAweCVwIiwKLQkJCWl0ZW0tPnJpX2J1ZlsxXS5pX2xlbiwgaXRlbSk7CisJCXhmc19hbGVydChtcCwKKwkJCSIlczogQmFkIGlub2RlIGxvZyByZWNvcmQgbGVuZ3RoICVkLCByZWMgcHRyIDB4JXAiLAorCQkJX19mdW5jX18sIGl0ZW0tPnJpX2J1ZlsxXS5pX2xlbiwgaXRlbSk7CiAJCWVycm9yID0gRUZTQ09SUlVQVEVEOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTIzOTgsNyArMjQwMyw3IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJeGxvZ193YXJuKCJYRlM6IHhsb2dfcmVjb3Zlcl9pbm9kZV9wYXNzMjogSW52YWxpZCBmbGFnIik7CisJCQl4ZnNfd2Fybihsb2ctPmxfbXAsICIlczogSW52YWxpZCBmbGFnIiwgX19mdW5jX18pOwogCQkJQVNTRVJUKDApOwogCQkJeGZzX2J1Zl9yZWxzZShicCk7CiAJCQllcnJvciA9IEVJTzsKQEAgLTI0NjcsMTMgKzI0NzIsMTEgQEAKIAogCXJlY2RkcSA9IGl0ZW0tPnJpX2J1ZlsxXS5pX2FkZHI7CiAJaWYgKHJlY2RkcSA9PSBOVUxMKSB7Ci0JCWNtbl9lcnIoQ0VfQUxFUlQsCi0JCQkiWEZTOiBOVUxMIGRxdW90IGluICVzLiIsIF9fZnVuY19fKTsKKwkJeGZzX2FsZXJ0KGxvZy0+bF9tcCwgIk5VTEwgZHF1b3QgaW4gJXMuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJfQogCWlmIChpdGVtLT5yaV9idWZbMV0uaV9sZW4gPCBzaXplb2YoeGZzX2Rpc2tfZHF1b3RfdCkpIHsKLQkJY21uX2VycihDRV9BTEVSVCwKLQkJCSJYRlM6IGRxdW90IHRvbyBzbWFsbCAoJWQpIGluICVzLiIsCisJCXhmc19hbGVydChsb2ctPmxfbXAsICJkcXVvdCB0b28gc21hbGwgKCVkKSBpbiAlcy4iLAogCQkJaXRlbS0+cmlfYnVmWzFdLmlfbGVuLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9CkBAIC0yNDk4LDEyICsyNTAxLDEwIEBACiAJICovCiAJZHFfZiA9IGl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CiAJQVNTRVJUKGRxX2YpOwotCWlmICgoZXJyb3IgPSB4ZnNfcW1fZHFjaGVjayhyZWNkZHEsCi0JCQkgICBkcV9mLT5xbGZfaWQsCi0JCQkgICAwLCBYRlNfUU1PUFRfRE9XQVJOLAotCQkJICAgInhsb2dfcmVjb3Zlcl9kcXVvdF9wYXNzMiAobG9nIGNvcHkpIikpKSB7CisJZXJyb3IgPSB4ZnNfcW1fZHFjaGVjayhtcCwgcmVjZGRxLCBkcV9mLT5xbGZfaWQsIDAsIFhGU19RTU9QVF9ET1dBUk4sCisJCQkgICAieGxvZ19yZWNvdmVyX2RxdW90X3Bhc3MyIChsb2cgY29weSkiKTsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQl9CiAJQVNTRVJUKGRxX2YtPnFsZl9sZW4gPT0gMSk7CiAKIAllcnJvciA9IHhmc19yZWFkX2J1ZihtcCwgbXAtPm1fZGRldl90YXJncCwKQEAgLTI1MjMsOCArMjUyNCw5IEBACiAJICogd2FzIGFtb25nIGEgY2h1bmsgb2YgZHF1b3RzIGNyZWF0ZWQgZWFybGllciwgYW5kIHdlIGRpZCBzb21lCiAJICogbWluaW1hbCBpbml0aWFsaXphdGlvbiB0aGVuLgogCSAqLwotCWlmICh4ZnNfcW1fZHFjaGVjayhkZHEsIGRxX2YtPnFsZl9pZCwgMCwgWEZTX1FNT1BUX0RPV0FSTiwKLQkJCSAgICJ4bG9nX3JlY292ZXJfZHF1b3RfcGFzczIiKSkgeworCWVycm9yID0geGZzX3FtX2RxY2hlY2sobXAsIGRkcSwgZHFfZi0+cWxmX2lkLCAwLCBYRlNfUU1PUFRfRE9XQVJOLAorCQkJICAgInhsb2dfcmVjb3Zlcl9kcXVvdF9wYXNzMiIpOworCWlmIChlcnJvcikgewogCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCX0KQEAgLTI2NzYsOSArMjY3OCw4IEBACiAJCS8qIG5vdGhpbmcgdG8gZG8gaW4gcGFzcyAxICovCiAJCXJldHVybiAwOwogCWRlZmF1bHQ6Ci0JCXhsb2dfd2FybigKLQkiWEZTOiBpbnZhbGlkIGl0ZW0gdHlwZSAoJWQpIHhsb2dfcmVjb3Zlcl9jb21taXRfcGFzczEiLAotCQkJSVRFTV9UWVBFKGl0ZW0pKTsKKwkJeGZzX3dhcm4obG9nLT5sX21wLCAiJXM6IGludmFsaWQgaXRlbSB0eXBlICglZCkiLAorCQkJX19mdW5jX18sIElURU1fVFlQRShpdGVtKSk7CiAJCUFTU0VSVCgwKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCX0KQEAgLTI3MDcsOSArMjcwOCw4IEBACiAJCS8qIG5vdGhpbmcgdG8gZG8gaW4gcGFzczIgKi8KIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKLQkJeGxvZ193YXJuKAotCSJYRlM6IGludmFsaWQgaXRlbSB0eXBlICglZCkgeGxvZ19yZWNvdmVyX2NvbW1pdF9wYXNzMiIsCi0JCQlJVEVNX1RZUEUoaXRlbSkpOworCQl4ZnNfd2Fybihsb2ctPmxfbXAsICIlczogaW52YWxpZCBpdGVtIHR5cGUgKCVkKSIsCisJCQlfX2Z1bmNfXywgSVRFTV9UWVBFKGl0ZW0pKTsKIAkJQVNTRVJUKDApOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJfQpAQCAtMjc1MSwxMCArMjc1MSwxMSBAQAogCiBTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfdW5tb3VudF90cmFucygKKwlzdHJ1Y3QgbG9nCQkqbG9nLAogCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnMpCiB7CiAJLyogRG8gbm90aGluZyBub3cgKi8KLQl4bG9nX3dhcm4oIlhGUzogeGxvZ19yZWNvdmVyX3VubW91bnRfdHJhbnM6IFVubW91bnQgTFIiKTsKKwl4ZnNfd2Fybihsb2ctPmxfbXAsICIlczogVW5tb3VudCBMUiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc5Nyw4ICsyNzk4LDggQEAKIAkJZHAgKz0gc2l6ZW9mKHhsb2dfb3BfaGVhZGVyX3QpOwogCQlpZiAob2hlYWQtPm9oX2NsaWVudGlkICE9IFhGU19UUkFOU0FDVElPTiAmJgogCQkgICAgb2hlYWQtPm9oX2NsaWVudGlkICE9IFhGU19MT0cpIHsKLQkJCXhsb2dfd2FybigKLQkJIlhGUzogeGxvZ19yZWNvdmVyX3Byb2Nlc3NfZGF0YTogYmFkIGNsaWVudGlkIik7CisJCQl4ZnNfd2Fybihsb2ctPmxfbXAsICIlczogYmFkIGNsaWVudGlkIDB4JXgiLAorCQkJCQlfX2Z1bmNfXywgb2hlYWQtPm9oX2NsaWVudGlkKTsKIAkJCUFTU0VSVCgwKTsKIAkJCXJldHVybiAoWEZTX0VSUk9SKEVJTykpOwogCQl9CkBAIC0yODExLDggKzI4MTIsOCBAQAogCQkJCQliZTY0X3RvX2NwdShyaGVhZC0+aF9sc24pKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChkcCArIGJlMzJfdG9fY3B1KG9oZWFkLT5vaF9sZW4pID4gbHApIHsKLQkJCQl4bG9nX3dhcm4oCi0JCQkiWEZTOiB4bG9nX3JlY292ZXJfcHJvY2Vzc19kYXRhOiBiYWQgbGVuZ3RoIik7CisJCQkJeGZzX3dhcm4obG9nLT5sX21wLCAiJXM6IGJhZCBsZW5ndGggMHgleCIsCisJCQkJCV9fZnVuY19fLCBiZTMyX3RvX2NwdShvaGVhZC0+b2hfbGVuKSk7CiAJCQkJV0FSTl9PTigxKTsKIAkJCQlyZXR1cm4gKFhGU19FUlJPUihFSU8pKTsKIAkJCX0KQEAgLTI4MjUsNyArMjgyNiw3IEBACiAJCQkJCQkJCXRyYW5zLCBwYXNzKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgWExPR19VTk1PVU5UX1RSQU5TOgotCQkJCWVycm9yID0geGxvZ19yZWNvdmVyX3VubW91bnRfdHJhbnModHJhbnMpOworCQkJCWVycm9yID0geGxvZ19yZWNvdmVyX3VubW91bnRfdHJhbnMobG9nLCB0cmFucyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFhMT0dfV0FTX0NPTlRfVFJBTlM6CiAJCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfYWRkX3RvX2NvbnRfdHJhbnMobG9nLApAQCAtMjgzMyw4ICsyODM0LDggQEAKIAkJCQkJCWJlMzJfdG9fY3B1KG9oZWFkLT5vaF9sZW4pKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgWExPR19TVEFSVF9UUkFOUzoKLQkJCQl4bG9nX3dhcm4oCi0JCQkiWEZTOiB4bG9nX3JlY292ZXJfcHJvY2Vzc19kYXRhOiBiYWQgdHJhbnNhY3Rpb24iKTsKKwkJCQl4ZnNfd2Fybihsb2ctPmxfbXAsICIlczogYmFkIHRyYW5zYWN0aW9uIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCUFTU0VSVCgwKTsKIAkJCQllcnJvciA9IFhGU19FUlJPUihFSU8pOwogCQkJCWJyZWFrOwpAQCAtMjg0NCw4ICsyODQ1LDggQEAKIAkJCQkJCWRwLCBiZTMyX3RvX2NwdShvaGVhZC0+b2hfbGVuKSk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXhsb2dfd2FybigKLQkJCSJYRlM6IHhsb2dfcmVjb3Zlcl9wcm9jZXNzX2RhdGE6IGJhZCBmbGFnIik7CisJCQkJeGZzX3dhcm4obG9nLT5sX21wLCAiJXM6IGJhZCBmbGFnIDB4JXgiLAorCQkJCQlfX2Z1bmNfXywgZmxhZ3MpOwogCQkJCUFTU0VSVCgwKTsKIAkJCQllcnJvciA9IFhGU19FUlJPUihFSU8pOwogCQkJCWJyZWFrOwpAQCAtMzAzMCw4ICszMDMxLDcgQEAKIG91dF9hYm9ydDoKIAl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBYRlNfVFJBTlNfQUJPUlQpOwogb3V0X2Vycm9yOgotCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLCAieGxvZ19yZWNvdmVyX2NsZWFyX2FnaV9idWNrZXQ6ICIKLQkJCSJmYWlsZWQgdG8gY2xlYXIgYWdpICVkLiBDb250aW51aW5nLiIsIGFnbm8pOworCXhmc193YXJuKG1wLCAiJXM6IGZhaWxlZCB0byBjbGVhciBhZ2kgJWQuIENvbnRpbnVpbmcuIiwgX19mdW5jX18sIGFnbm8pOwogCXJldHVybjsKIH0KIApAQCAtMzI4Miw3ICszMjgyLDcgQEAKIAlpZiAodW5saWtlbHkoCiAJICAgICghcmhlYWQtPmhfdmVyc2lvbiB8fAogCSAgICAoYmUzMl90b19jcHUocmhlYWQtPmhfdmVyc2lvbikgJiAoflhMT0dfVkVSU0lPTl9PS0JJVFMpKSkpKSB7Ci0JCXhsb2dfd2FybigiWEZTOiAlczogdW5yZWNvZ25pc2VkIGxvZyB2ZXJzaW9uICglZCkuIiwKKwkJeGZzX3dhcm4obG9nLT5sX21wLCAiJXM6IHVucmVjb2duaXNlZCBsb2cgdmVyc2lvbiAoJWQpLiIsCiAJCQlfX2Z1bmNfXywgYmUzMl90b19jcHUocmhlYWQtPmhfdmVyc2lvbikpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJfQpAQCAtMzc0MCwxMCArMzc0MCw5IEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAotCQljbW5fZXJyKENFX05PVEUsCi0JCQkiU3RhcnRpbmcgWEZTIHJlY292ZXJ5IG9uIGZpbGVzeXN0ZW06ICVzIChsb2dkZXY6ICVzKSIsCi0JCQlsb2ctPmxfbXAtPm1fZnNuYW1lLCBsb2ctPmxfbXAtPm1fbG9nbmFtZSA/Ci0JCQlsb2ctPmxfbXAtPm1fbG9nbmFtZSA6ICJpbnRlcm5hbCIpOworCQl4ZnNfbm90aWNlKGxvZy0+bF9tcCwgIlN0YXJ0aW5nIHJlY292ZXJ5IChsb2dkZXY6ICVzKSIsCisJCQkJbG9nLT5sX21wLT5tX2xvZ25hbWUgPyBsb2ctPmxfbXAtPm1fbG9nbmFtZQorCQkJCQkJICAgICA6ICJpbnRlcm5hbCIpOwogCiAJCWVycm9yID0geGxvZ19kb19yZWNvdmVyKGxvZywgaGVhZF9ibGssIHRhaWxfYmxrKTsKIAkJbG9nLT5sX2ZsYWdzIHw9IFhMT0dfUkVDT1ZFUllfTkVFREVEOwpAQCAtMzc3Niw5ICszNzc1LDcgQEAKIAkJaW50CWVycm9yOwogCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9wcm9jZXNzX2VmaXMobG9nKTsKIAkJaWYgKGVycm9yKSB7Ci0JCQljbW5fZXJyKENFX0FMRVJULAotCQkJCSJGYWlsZWQgdG8gcmVjb3ZlciBFRklzIG9uIGZpbGVzeXN0ZW06ICVzIiwKLQkJCQlsb2ctPmxfbXAtPm1fZnNuYW1lKTsKKwkJCXhmc19hbGVydChsb2ctPmxfbXAsICJGYWlsZWQgdG8gcmVjb3ZlciBFRklzIik7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAkJLyoKQEAgLTM3OTMsMTUgKzM3OTAsMTIgQEAKIAogCQl4bG9nX3JlY292ZXJfY2hlY2tfc3VtbWFyeShsb2cpOwogCi0JCWNtbl9lcnIoQ0VfTk9URSwKLQkJCSJFbmRpbmcgWEZTIHJlY292ZXJ5IG9uIGZpbGVzeXN0ZW06ICVzIChsb2dkZXY6ICVzKSIsCi0JCQlsb2ctPmxfbXAtPm1fZnNuYW1lLCBsb2ctPmxfbXAtPm1fbG9nbmFtZSA/Ci0JCQlsb2ctPmxfbXAtPm1fbG9nbmFtZSA6ICJpbnRlcm5hbCIpOworCQl4ZnNfbm90aWNlKGxvZy0+bF9tcCwgIkVuZGluZyByZWNvdmVyeSAobG9nZGV2OiAlcykiLAorCQkJCWxvZy0+bF9tcC0+bV9sb2duYW1lID8gbG9nLT5sX21wLT5tX2xvZ25hbWUKKwkJCQkJCSAgICAgOiAiaW50ZXJuYWwiKTsKIAkJbG9nLT5sX2ZsYWdzICY9IH5YTE9HX1JFQ09WRVJZX05FRURFRDsKIAl9IGVsc2UgewotCQljbW5fZXJyKENFX0RFQlVHLAotCQkJIkVuZGluZyBjbGVhbiBYRlMgbW91bnQgZm9yIGZpbGVzeXN0ZW06ICVzXG4iLAotCQkJbG9nLT5sX21wLT5tX2ZzbmFtZSk7CisJCXhmc19pbmZvKGxvZy0+bF9tcCwgIkVuZGluZyBjbGVhbiBtb3VudCIpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM4MzQsMTAgKzM4MjgsOCBAQAogCWZvciAoYWdubyA9IDA7IGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50OyBhZ25vKyspIHsKIAkJZXJyb3IgPSB4ZnNfcmVhZF9hZ2YobXAsIE5VTEwsIGFnbm8sIDAsICZhZ2ZicCk7CiAJCWlmIChlcnJvcikgewotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAotCQkJCQkieGxvZ19yZWNvdmVyX2NoZWNrX3N1bW1hcnkoYWdmKSIKLQkJCQkJImFnZiByZWFkIGZhaWxlZCBhZ25vICVkIGVycm9yICVkIiwKLQkJCQkJCQlhZ25vLCBlcnJvcik7CisJCQl4ZnNfYWxlcnQobXAsICIlcyBhZ2YgcmVhZCBmYWlsZWQgYWdubyAlZCBlcnJvciAlZCIsCisJCQkJCQlfX2Z1bmNfXywgYWdubywgZXJyb3IpOwogCQl9IGVsc2UgewogCQkJYWdmcCA9IFhGU19CVUZfVE9fQUdGKGFnZmJwKTsKIAkJCWZyZWVibGtzICs9IGJlMzJfdG9fY3B1KGFnZnAtPmFnZl9mcmVlYmxrcykgKwpAQCAtMzg0Niw3ICszODM4LDEwIEBACiAJCX0KIAogCQllcnJvciA9IHhmc19yZWFkX2FnaShtcCwgTlVMTCwgYWdubywgJmFnaWJwKTsKLQkJaWYgKCFlcnJvcikgeworCQlpZiAoZXJyb3IpIHsKKwkJCXhmc19hbGVydChtcCwgIiVzIGFnaSByZWFkIGZhaWxlZCBhZ25vICVkIGVycm9yICVkIiwKKwkJCQkJCV9fZnVuY19fLCBhZ25vLCBlcnJvcik7CisJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgeGZzX2FnaQkqYWdpID0gWEZTX0JVRl9UT19BR0koYWdpYnApOwogCiAJCQlpdG90YWwgKz0gYmUzMl90b19jcHUoYWdpLT5hZ2lfY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IGQ0NDdhZWYuLmJiM2Y5YTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTEzMyw5ICsxMzMsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICh1dWlkX2lzX25pbCh1dWlkKSkgewotCQljbW5fZXJyKENFX1dBUk4sCi0JCQkiWEZTOiBGaWxlc3lzdGVtICVzIGhhcyBuaWwgVVVJRCAtIGNhbid0IG1vdW50IiwKLQkJCW1wLT5tX2ZzbmFtZSk7CisJCXhmc193YXJuKG1wLCAiRmlsZXN5c3RlbSBoYXMgbmlsIFVVSUQgLSBjYW4ndCBtb3VudCIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQogCkBAIC0xNjMsOCArMTYxLDcgQEAKIAogIG91dF9kdXBsaWNhdGU6CiAJbXV0ZXhfdW5sb2NrKCZ4ZnNfdXVpZF90YWJsZV9tdXRleCk7Ci0JY21uX2VycihDRV9XQVJOLCAiWEZTOiBGaWxlc3lzdGVtICVzIGhhcyBkdXBsaWNhdGUgVVVJRCAtIGNhbid0IG1vdW50IiwKLQkJCSBtcC0+bV9mc25hbWUpOworCXhmc193YXJuKG1wLCAiRmlsZXN5c3RlbSBoYXMgZHVwbGljYXRlIFVVSUQgLSBjYW4ndCBtb3VudCIpOwogCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIH0KIApAQCAtMzExLDYgKzMwOCw4IEBACiAJeGZzX3NiX3QJKnNicCwKIAlpbnQJCWZsYWdzKQogeworCWludAkJbG91ZCA9ICEoZmxhZ3MgJiBYRlNfTUZTSV9RVUlFVCk7CisKIAkvKgogCSAqIElmIHRoZSBsb2cgZGV2aWNlIGFuZCBkYXRhIGRldmljZSBoYXZlIHRoZQogCSAqIHNhbWUgZGV2aWNlIG51bWJlciwgdGhlIGxvZyBpcyBpbnRlcm5hbC4KQEAgLTMxOSwyOCArMzE4LDMyIEBACiAJICogYSB2b2x1bWUgZmlsZXN5c3RlbSBpbiBhIG5vbi12b2x1bWUgbWFubmVyLgogCSAqLwogCWlmIChzYnAtPnNiX21hZ2ljbnVtICE9IFhGU19TQl9NQUdJQykgewotCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgImJhZCBtYWdpYyBudW1iZXIiKTsKKwkJaWYgKGxvdWQpCisJCQl4ZnNfd2FybihtcCwgImJhZCBtYWdpYyBudW1iZXIiKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFV1JPTkdGUyk7CiAJfQogCiAJaWYgKCF4ZnNfc2JfZ29vZF92ZXJzaW9uKHNicCkpIHsKLQkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsICJiYWQgdmVyc2lvbiIpOworCQlpZiAobG91ZCkKKwkJCXhmc193YXJuKG1wLCAiYmFkIHZlcnNpb24iKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFV1JPTkdGUyk7CiAJfQogCiAJaWYgKHVubGlrZWx5KAogCSAgICBzYnAtPnNiX2xvZ3N0YXJ0ID09IDAgJiYgbXAtPm1fbG9nZGV2X3RhcmdwID09IG1wLT5tX2RkZXZfdGFyZ3ApKSB7Ci0JCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLAotCQkJImZpbGVzeXN0ZW0gaXMgbWFya2VkIGFzIGhhdmluZyBhbiBleHRlcm5hbCBsb2c7ICIKLQkJCSJzcGVjaWZ5IGxvZ2RldiBvbiB0aGVcbm1vdW50IGNvbW1hbmQgbGluZS4iKTsKKwkJaWYgKGxvdWQpCisJCQl4ZnNfd2FybihtcCwKKwkJImZpbGVzeXN0ZW0gaXMgbWFya2VkIGFzIGhhdmluZyBhbiBleHRlcm5hbCBsb2c7ICIKKwkJInNwZWNpZnkgbG9nZGV2IG9uIHRoZSBtb3VudCBjb21tYW5kIGxpbmUuIik7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9CiAKIAlpZiAodW5saWtlbHkoCiAJICAgIHNicC0+c2JfbG9nc3RhcnQgIT0gMCAmJiBtcC0+bV9sb2dkZXZfdGFyZ3AgIT0gbXAtPm1fZGRldl90YXJncCkpIHsKLQkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCi0JCQkiZmlsZXN5c3RlbSBpcyBtYXJrZWQgYXMgaGF2aW5nIGFuIGludGVybmFsIGxvZzsgIgotCQkJImRvIG5vdCBzcGVjaWZ5IGxvZ2RldiBvblxudGhlIG1vdW50IGNvbW1hbmQgbGluZS4iKTsKKwkJaWYgKGxvdWQpCisJCQl4ZnNfd2FybihtcCwKKwkJImZpbGVzeXN0ZW0gaXMgbWFya2VkIGFzIGhhdmluZyBhbiBpbnRlcm5hbCBsb2c7ICIKKwkJImRvIG5vdCBzcGVjaWZ5IGxvZ2RldiBvbiB0aGUgbW91bnQgY29tbWFuZCBsaW5lLiIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQogCkBAIC0zNjksNyArMzcyLDggQEAKIAkgICAgKHNicC0+c2JfcmV4dHNpemUgKiBzYnAtPnNiX2Jsb2Nrc2l6ZSA+IFhGU19NQVhfUlRFWFRTSVpFKQl8fAogCSAgICAoc2JwLT5zYl9yZXh0c2l6ZSAqIHNicC0+c2JfYmxvY2tzaXplIDwgWEZTX01JTl9SVEVYVFNJWkUpCXx8CiAJICAgIChzYnAtPnNiX2ltYXhfcGN0ID4gMTAwIC8qIHplcm8gc2JfaW1heF9wY3QgaXMgdmFsaWQgKi8pKSkgewotCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHNhbml0eSBjaGVjayAxIGZhaWxlZCIpOworCQlpZiAobG91ZCkKKwkJCXhmc193YXJuKG1wLCAiU0Igc2FuaXR5IGNoZWNrIDEgZmFpbGVkIik7CiAJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAl9CiAKQEAgLTM4Miw3ICszODYsOCBAQAogCSAgICAgKHhmc19kcmZzYm5vX3Qpc2JwLT5zYl9hZ2NvdW50ICogc2JwLT5zYl9hZ2Jsb2NrcyB8fAogCSAgICBzYnAtPnNiX2RibG9ja3MgPCAoeGZzX2RyZnNibm9fdCkoc2JwLT5zYl9hZ2NvdW50IC0gMSkgKgogCQkJICAgICAgc2JwLT5zYl9hZ2Jsb2NrcyArIFhGU19NSU5fQUdfQkxPQ0tTKSkgewotCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHNhbml0eSBjaGVjayAyIGZhaWxlZCIpOworCQlpZiAobG91ZCkKKwkJCXhmc193YXJuKG1wLCAiU0Igc2FuaXR5IGNoZWNrIDIgZmFpbGVkIik7CiAJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAl9CiAKQEAgLTM5MCwxMiArMzk1LDEyIEBACiAJICogVW50aWwgdGhpcyBpcyBmaXhlZCBvbmx5IHBhZ2Utc2l6ZWQgb3Igc21hbGxlciBkYXRhIGJsb2NrcyB3b3JrLgogCSAqLwogCWlmICh1bmxpa2VseShzYnAtPnNiX2Jsb2Nrc2l6ZSA+IFBBR0VfU0laRSkpIHsKLQkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCi0JCQkiZmlsZSBzeXN0ZW0gd2l0aCBibG9ja3NpemUgJWQgYnl0ZXMiLAotCQkJc2JwLT5zYl9ibG9ja3NpemUpOwotCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKLQkJCSJvbmx5IHBhZ2VzaXplICglbGQpIG9yIGxlc3Mgd2lsbCBjdXJyZW50bHkgd29yay4iLAotCQkJUEFHRV9TSVpFKTsKKwkJaWYgKGxvdWQpIHsKKwkJCXhmc193YXJuKG1wLAorCQkiRmlsZSBzeXN0ZW0gd2l0aCBibG9ja3NpemUgJWQgYnl0ZXMuICIKKwkJIk9ubHkgcGFnZXNpemUgKCVsZCkgb3IgbGVzcyB3aWxsIGN1cnJlbnRseSB3b3JrLiIsCisJCQkJc2JwLT5zYl9ibG9ja3NpemUsIFBBR0VfU0laRSk7CisJCX0KIAkJcmV0dXJuIFhGU19FUlJPUihFTk9TWVMpOwogCX0KIApAQCAtNDA5LDIxICs0MTQsMjMgQEAKIAljYXNlIDIwNDg6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLAotCQkJImlub2RlIHNpemUgb2YgJWQgYnl0ZXMgbm90IHN1cHBvcnRlZCIsCi0JCQlzYnAtPnNiX2lub2Rlc2l6ZSk7CisJCWlmIChsb3VkKQorCQkJeGZzX3dhcm4obXAsICJpbm9kZSBzaXplIG9mICVkIGJ5dGVzIG5vdCBzdXBwb3J0ZWQiLAorCQkJCXNicC0+c2JfaW5vZGVzaXplKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFTk9TWVMpOwogCX0KIAogCWlmICh4ZnNfc2JfdmFsaWRhdGVfZnNiX2NvdW50KHNicCwgc2JwLT5zYl9kYmxvY2tzKSB8fAogCSAgICB4ZnNfc2JfdmFsaWRhdGVfZnNiX2NvdW50KHNicCwgc2JwLT5zYl9yYmxvY2tzKSkgewotCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKLQkJCSJmaWxlIHN5c3RlbSB0b28gbGFyZ2UgdG8gYmUgbW91bnRlZCBvbiB0aGlzIHN5c3RlbS4iKTsKKwkJaWYgKGxvdWQpCisJCQl4ZnNfd2FybihtcCwKKwkJImZpbGUgc3lzdGVtIHRvbyBsYXJnZSB0byBiZSBtb3VudGVkIG9uIHRoaXMgc3lzdGVtLiIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGQklHKTsKIAl9CiAKIAlpZiAodW5saWtlbHkoc2JwLT5zYl9pbnByb2dyZXNzKSkgewotCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgImZpbGUgc3lzdGVtIGJ1c3kiKTsKKwkJaWYgKGxvdWQpCisJCQl4ZnNfd2FybihtcCwgImZpbGUgc3lzdGVtIGJ1c3kiKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCX0KIApAQCAtNDMxLDggKzQzOCw5IEBACiAJICogVmVyc2lvbiAxIGRpcmVjdG9yeSBmb3JtYXQgaGFzIG5ldmVyIHdvcmtlZCBvbiBMaW51eC4KIAkgKi8KIAlpZiAodW5saWtlbHkoIXhmc19zYl92ZXJzaW9uX2hhc2RpcnYyKHNicCkpKSB7Ci0JCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLAotCQkJImZpbGUgc3lzdGVtIHVzaW5nIHZlcnNpb24gMSBkaXJlY3RvcnkgZm9ybWF0Iik7CisJCWlmIChsb3VkKQorCQkJeGZzX3dhcm4obXAsCisJCQkJImZpbGUgc3lzdGVtIHVzaW5nIHZlcnNpb24gMSBkaXJlY3RvcnkgZm9ybWF0Iik7CiAJCXJldHVybiBYRlNfRVJST1IoRU5PU1lTKTsKIAl9CiAKQEAgLTY3Myw2ICs2ODEsNyBAQAogCXVuc2lnbmVkIGludAlzZWN0b3Jfc2l6ZTsKIAl4ZnNfYnVmX3QJKmJwOwogCWludAkJZXJyb3I7CisJaW50CQlsb3VkID0gIShmbGFncyAmIFhGU19NRlNJX1FVSUVUKTsKIAogCUFTU0VSVChtcC0+bV9zYl9icCA9PSBOVUxMKTsKIAlBU1NFUlQobXAtPm1fZGRldl90YXJncCAhPSBOVUxMKTsKQEAgLTY4OCw3ICs2OTcsOCBAQAogCWJwID0geGZzX2J1Zl9yZWFkX3VuY2FjaGVkKG1wLCBtcC0+bV9kZGV2X3RhcmdwLAogCQkJCQlYRlNfU0JfREFERFIsIHNlY3Rvcl9zaXplLCAwKTsKIAlpZiAoIWJwKSB7Ci0JCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLCAiU0IgYnVmZmVyIHJlYWQgZmFpbGVkIik7CisJCWlmIChsb3VkKQorCQkJeGZzX3dhcm4obXAsICJTQiBidWZmZXIgcmVhZCBmYWlsZWQiKTsKIAkJcmV0dXJuIEVJTzsKIAl9CiAKQEAgLTY5OSw3ICs3MDksOCBAQAogCXhmc19zYl9mcm9tX2Rpc2soJm1wLT5tX3NiLCBYRlNfQlVGX1RPX1NCUChicCkpOwogCWVycm9yID0geGZzX21vdW50X3ZhbGlkYXRlX3NiKG1wLCAmKG1wLT5tX3NiKSwgZmxhZ3MpOwogCWlmIChlcnJvcikgewotCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHZhbGlkYXRlIGZhaWxlZCIpOworCQlpZiAobG91ZCkKKwkJCXhmc193YXJuKG1wLCAiU0IgdmFsaWRhdGUgZmFpbGVkIik7CiAJCWdvdG8gcmVsZWFzZV9idWY7CiAJfQogCkBAIC03MDcsOSArNzE4LDkgQEAKIAkgKiBXZSBtdXN0IGJlIGFibGUgdG8gZG8gc2VjdG9yLXNpemVkIGFuZCBzZWN0b3ItYWxpZ25lZCBJTy4KIAkgKi8KIAlpZiAoc2VjdG9yX3NpemUgPiBtcC0+bV9zYi5zYl9zZWN0c2l6ZSkgewotCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKLQkJCSJkZXZpY2Ugc3VwcG9ydHMgb25seSAldSBieXRlIHNlY3RvcnMgKG5vdCAldSkiLAotCQkJc2VjdG9yX3NpemUsIG1wLT5tX3NiLnNiX3NlY3RzaXplKTsKKwkJaWYgKGxvdWQpCisJCQl4ZnNfd2FybihtcCwgImRldmljZSBzdXBwb3J0cyAldSBieXRlIHNlY3RvcnMgKG5vdCAldSkiLAorCQkJCXNlY3Rvcl9zaXplLCBtcC0+bV9zYi5zYl9zZWN0c2l6ZSk7CiAJCWVycm9yID0gRU5PU1lTOwogCQlnb3RvIHJlbGVhc2VfYnVmOwogCX0KQEAgLTg1Myw4ICs4NjQsNyBAQAogCQlpZiAoKEJCVE9CKG1wLT5tX2RhbGlnbikgJiBtcC0+bV9ibG9ja21hc2spIHx8CiAJCSAgICAoQkJUT0IobXAtPm1fc3dpZHRoKSAmIG1wLT5tX2Jsb2NrbWFzaykpIHsKIAkJCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRVRFUlIpIHsKLQkJCQljbW5fZXJyKENFX1dBUk4sCi0JCQkJCSJYRlM6IGFsaWdubWVudCBjaGVjayAxIGZhaWxlZCIpOworCQkJCXhmc193YXJuKG1wLCAiYWxpZ25tZW50IGNoZWNrIDEgZmFpbGVkIik7CiAJCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCQkJfQogCQkJbXAtPm1fZGFsaWduID0gbXAtPm1fc3dpZHRoID0gMDsKQEAgLTg2Nyw4ICs4NzcsOSBAQAogCQkJCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRVRFUlIpIHsKIAkJCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCQkJCX0KLQkJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKLSJzdHJpcGUgYWxpZ25tZW50IHR1cm5lZCBvZmY6IHN1bml0KCVkKS9zd2lkdGgoJWQpIGluY29tcGF0aWJsZSB3aXRoIGFnc2l6ZSglZCkiLAorCQkJCXhmc193YXJuKG1wLAorCQkic3RyaXBlIGFsaWdubWVudCB0dXJuZWQgb2ZmOiBzdW5pdCglZCkvc3dpZHRoKCVkKSAiCisJCSJpbmNvbXBhdGlibGUgd2l0aCBhZ3NpemUoJWQpIiwKIAkJCQkJbXAtPm1fZGFsaWduLCBtcC0+bV9zd2lkdGgsCiAJCQkJCXNicC0+c2JfYWdibG9ja3MpOwogCkBAIC04NzgsOSArODg5LDkgQEAKIAkJCQltcC0+bV9zd2lkdGggPSBYRlNfQkJfVE9fRlNCVChtcCwgbXAtPm1fc3dpZHRoKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JFVEVSUikgewotCQkJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKLSJzdHJpcGUgYWxpZ25tZW50IHR1cm5lZCBvZmY6IHN1bml0KCVkKSBsZXNzIHRoYW4gYnNpemUoJWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJbXAtPm1fZGFsaWduLAorCQkJCQl4ZnNfd2FybihtcCwKKwkJInN0cmlwZSBhbGlnbm1lbnQgdHVybmVkIG9mZjogc3VuaXQoJWQpIGxlc3MgdGhhbiBic2l6ZSglZCkiLAorCQkJCQkJbXAtPm1fZGFsaWduLAogCQkJCQkJbXAtPm1fYmxvY2ttYXNrICsxKTsKIAkJCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCQkJCX0KQEAgLTEwMjYsMTQgKzEwMzcsMTQgQEAKIAogCWQgPSAoeGZzX2RhZGRyX3QpWEZTX0ZTQl9UT19CQihtcCwgbXAtPm1fc2Iuc2JfZGJsb2Nrcyk7CiAJaWYgKFhGU19CQl9UT19GU0IobXAsIGQpICE9IG1wLT5tX3NiLnNiX2RibG9ja3MpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBmaWxlc3lzdGVtIHNpemUgbWlzbWF0Y2ggZGV0ZWN0ZWQiKTsKKwkJeGZzX3dhcm4obXAsICJmaWxlc3lzdGVtIHNpemUgbWlzbWF0Y2ggZGV0ZWN0ZWQiKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFRkJJRyk7CiAJfQogCWJwID0geGZzX2J1Zl9yZWFkX3VuY2FjaGVkKG1wLCBtcC0+bV9kZGV2X3RhcmdwLAogCQkJCQlkIC0gWEZTX0ZTU19UT19CQihtcCwgMSksCiAJCQkJCUJCVE9CKFhGU19GU1NfVE9fQkIobXAsIDEpKSwgMCk7CiAJaWYgKCFicCkgewotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IGxhc3Qgc2VjdG9yIHJlYWQgZmFpbGVkIik7CisJCXhmc193YXJuKG1wLCAibGFzdCBzZWN0b3IgcmVhZCBmYWlsZWQiKTsKIAkJcmV0dXJuIEVJTzsKIAl9CiAJeGZzX2J1Zl9yZWxzZShicCk7CkBAIC0xMDQxLDE0ICsxMDUyLDE0IEBACiAJaWYgKG1wLT5tX2xvZ2Rldl90YXJncCAhPSBtcC0+bV9kZGV2X3RhcmdwKSB7CiAJCWQgPSAoeGZzX2RhZGRyX3QpWEZTX0ZTQl9UT19CQihtcCwgbXAtPm1fc2Iuc2JfbG9nYmxvY2tzKTsKIAkJaWYgKFhGU19CQl9UT19GU0IobXAsIGQpICE9IG1wLT5tX3NiLnNiX2xvZ2Jsb2NrcykgewotCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBsb2cgc2l6ZSBtaXNtYXRjaCBkZXRlY3RlZCIpOworCQkJeGZzX3dhcm4obXAsICJsb2cgc2l6ZSBtaXNtYXRjaCBkZXRlY3RlZCIpOwogCQkJcmV0dXJuIFhGU19FUlJPUihFRkJJRyk7CiAJCX0KIAkJYnAgPSB4ZnNfYnVmX3JlYWRfdW5jYWNoZWQobXAsIG1wLT5tX2xvZ2Rldl90YXJncCwKIAkJCQkJZCAtIFhGU19GU0JfVE9fQkIobXAsIDEpLAogCQkJCQlYRlNfRlNCX1RPX0IobXAsIDEpLCAwKTsKIAkJaWYgKCFicCkgewotCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBsb2cgZGV2aWNlIHJlYWQgZmFpbGVkIik7CisJCQl4ZnNfd2FybihtcCwgImxvZyBkZXZpY2UgcmVhZCBmYWlsZWQiKTsKIAkJCXJldHVybiBFSU87CiAJCX0KIAkJeGZzX2J1Zl9yZWxzZShicCk7CkBAIC0xMDg2LDcgKzEwOTcsNyBAQAogCQlyZXR1cm4gMDsKIAogI2lmZGVmIFFVT1RBREVCVUcKLQl4ZnNfZnNfY21uX2VycihDRV9OT1RFLCBtcCwgIldyaXRpbmcgc3VwZXJibG9jayBxdW90YSBjaGFuZ2VzIik7CisJeGZzX25vdGljZShtcCwgIldyaXRpbmcgc3VwZXJibG9jayBxdW90YSBjaGFuZ2VzIik7CiAjZW5kaWYKIAogCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfUU1fU0JDSEFOR0UpOwpAQCAtMTA5NCw4ICsxMTA1LDcgQEAKIAkJCQkgICAgICBYRlNfREVGQVVMVF9MT0dfQ09VTlQpOwogCWlmIChlcnJvcikgewogCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAotCQkJInhmc19tb3VudF9yZXNldF9zYnFmbGFnczogU3VwZXJibG9jayB1cGRhdGUgZmFpbGVkISIpOworCQl4ZnNfYWxlcnQobXAsICIlczogU3VwZXJibG9jayB1cGRhdGUgZmFpbGVkISIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIApAQCAtMTE2MSw4ICsxMTcxLDcgQEAKIAkgKiB0cmFuc2FjdGlvbiBzdWJzeXN0ZW0gaXMgb25saW5lLgogCSAqLwogCWlmICh4ZnNfc2JfaGFzX21pc21hdGNoZWRfZmVhdHVyZXMyKHNicCkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogY29ycmVjdGluZyBzYl9mZWF0dXJlcyBhbGlnbm1lbnQgcHJvYmxlbSIpOworCQl4ZnNfd2FybihtcCwgImNvcnJlY3Rpbmcgc2JfZmVhdHVyZXMgYWxpZ25tZW50IHByb2JsZW0iKTsKIAkJc2JwLT5zYl9mZWF0dXJlczIgfD0gc2JwLT5zYl9iYWRfZmVhdHVyZXMyOwogCQlzYnAtPnNiX2JhZF9mZWF0dXJlczIgPSBzYnAtPnNiX2ZlYXR1cmVzMjsKIAkJbXAtPm1fdXBkYXRlX2ZsYWdzIHw9IFhGU19TQl9GRUFUVVJFUzIgfCBYRlNfU0JfQkFEX0ZFQVRVUkVTMjsKQEAgLTEyNDEsNyArMTI1MCw3IEBACiAJICovCiAJZXJyb3IgPSB4ZnNfcnRtb3VudF9pbml0KG1wKTsKIAlpZiAoZXJyb3IpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBSVCBtb3VudCBmYWlsZWQiKTsKKwkJeGZzX3dhcm4obXAsICJSVCBtb3VudCBmYWlsZWQiKTsKIAkJZ290byBvdXRfcmVtb3ZlX3V1aWQ7CiAJfQogCkBAIC0xMjcyLDEyICsxMjgxLDEyIEBACiAJSU5JVF9SQURJWF9UUkVFKCZtcC0+bV9wZXJhZ190cmVlLCBHRlBfQVRPTUlDKTsKIAllcnJvciA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBzYnAtPnNiX2FnY291bnQsICZtcC0+bV9tYXhhZ2kpOwogCWlmIChlcnJvcikgewotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IEZhaWxlZCBwZXItYWcgaW5pdDogJWQiLCBlcnJvcik7CisJCXhmc193YXJuKG1wLCAiRmFpbGVkIHBlci1hZyBpbml0OiAlZCIsIGVycm9yKTsKIAkJZ290byBvdXRfcmVtb3ZlX3V1aWQ7CiAJfQogCiAJaWYgKCFzYnAtPnNiX2xvZ2Jsb2NrcykgewotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IG5vIGxvZyBkZWZpbmVkIik7CisJCXhmc193YXJuKG1wLCAibm8gbG9nIGRlZmluZWQiKTsKIAkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX21vdW50ZnMiLCBYRlNfRVJSTEVWRUxfTE9XLCBtcCk7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJCWdvdG8gb3V0X2ZyZWVfcGVyYWc7CkBAIC0xMjkwLDcgKzEyOTksNyBAQAogCQkJICAgICAgWEZTX0ZTQl9UT19EQUREUihtcCwgc2JwLT5zYl9sb2dzdGFydCksCiAJCQkgICAgICBYRlNfRlNCX1RPX0JCKG1wLCBzYnAtPnNiX2xvZ2Jsb2NrcykpOwogCWlmIChlcnJvcikgewotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IGxvZyBtb3VudCBmYWlsZWQiKTsKKwkJeGZzX3dhcm4obXAsICJsb2cgbW91bnQgZmFpbGVkIik7CiAJCWdvdG8gb3V0X2ZyZWVfcGVyYWc7CiAJfQogCkBAIC0xMzI3LDE2ICsxMzM2LDE0IEBACiAJICovCiAJZXJyb3IgPSB4ZnNfaWdldChtcCwgTlVMTCwgc2JwLT5zYl9yb290aW5vLCAwLCBYRlNfSUxPQ0tfRVhDTCwgJnJpcCk7CiAJaWYgKGVycm9yKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogZmFpbGVkIHRvIHJlYWQgcm9vdCBpbm9kZSIpOworCQl4ZnNfd2FybihtcCwgImZhaWxlZCB0byByZWFkIHJvb3QgaW5vZGUiKTsKIAkJZ290byBvdXRfbG9nX2RlYWxsb2M7CiAJfQogCiAJQVNTRVJUKHJpcCAhPSBOVUxMKTsKIAogCWlmICh1bmxpa2VseSgocmlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgIT0gU19JRkRJUikpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBjb3JydXB0ZWQgcm9vdCBpbm9kZSIpOwotCQljbW5fZXJyKENFX1dBUk4sICJEZXZpY2UgJXMgLSByb290ICVsbHUgaXMgbm90IGEgZGlyZWN0b3J5IiwKLQkJCVhGU19CVUZUQVJHX05BTUUobXAtPm1fZGRldl90YXJncCksCisJCXhmc193YXJuKG1wLCAiY29ycnVwdGVkIHJvb3QgaW5vZGUgJWxsdTogbm90IGEgZGlyZWN0b3J5IiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmlwLT5pX2lubyk7CiAJCXhmc19pdW5sb2NrKHJpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCQlYRlNfRVJST1JfUkVQT1JUKCJ4ZnNfbW91bnRmc19pbnQoMikiLCBYRlNfRVJSTEVWRUxfTE9XLApAQCAtMTM1Niw3ICsxMzYzLDcgQEAKIAkJLyoKIAkJICogRnJlZSB1cCB0aGUgcm9vdCBpbm9kZS4KIAkJICovCi0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogZmFpbGVkIHRvIHJlYWQgUlQgaW5vZGVzIik7CisJCXhmc193YXJuKG1wLCAiZmFpbGVkIHRvIHJlYWQgUlQgaW5vZGVzIik7CiAJCWdvdG8gb3V0X3JlbGVfcmlwOwogCX0KIApAQCAtMTM2OCw3ICsxMzc1LDcgQEAKIAlpZiAobXAtPm1fdXBkYXRlX2ZsYWdzICYmICEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSkgewogCQllcnJvciA9IHhmc19tb3VudF9sb2dfc2IobXAsIG1wLT5tX3VwZGF0ZV9mbGFncyk7CiAJCWlmIChlcnJvcikgewotCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBmYWlsZWQgdG8gd3JpdGUgc2IgY2hhbmdlcyIpOworCQkJeGZzX3dhcm4obXAsICJmYWlsZWQgdG8gd3JpdGUgc2IgY2hhbmdlcyIpOwogCQkJZ290byBvdXRfcnR1bm1vdW50OwogCQl9CiAJfQpAQCAtMTM4OSwxMCArMTM5Niw3IEBACiAJCSAqIHF1b3RhY2hlY2tlZCBsaWNlbnNlLgogCQkgKi8KIAkJaWYgKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19BTExfUVVPVEFfQUNDVCkgewotCQkJY21uX2VycihDRV9OT1RFLAotCQkJCSJYRlM6IHJlc2V0dGluZyBxZmxhZ3MgZm9yIGZpbGVzeXN0ZW0gJXMiLAotCQkJCW1wLT5tX2ZzbmFtZSk7Ci0KKwkJCXhmc19ub3RpY2UobXAsICJyZXNldHRpbmcgcXVvdGEgZmxhZ3MiKTsKIAkJCWVycm9yID0geGZzX21vdW50X3Jlc2V0X3NicWZsYWdzKG1wKTsKIAkJCWlmIChlcnJvcikKIAkJCQlyZXR1cm4gZXJyb3I7CkBAIC0xNDA2LDcgKzE0MTAsNyBAQAogCSAqLwogCWVycm9yID0geGZzX2xvZ19tb3VudF9maW5pc2gobXApOwogCWlmIChlcnJvcikgewotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IGxvZyBtb3VudCBmaW5pc2ggZmFpbGVkIik7CisJCXhmc193YXJuKG1wLCAibG9nIG1vdW50IGZpbmlzaCBmYWlsZWQiKTsKIAkJZ290byBvdXRfcnR1bm1vdW50OwogCX0KIApAQCAtMTQzNSw4ICsxNDM5LDggQEAKIAkJcmVzYmxrcyA9IHhmc19kZWZhdWx0X3Jlc2Jsa3MobXApOwogCQllcnJvciA9IHhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOwogCQlpZiAoZXJyb3IpCi0JCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFVuYWJsZSB0byBhbGxvY2F0ZSByZXNlcnZlICIKLQkJCQkiYmxvY2tzLiBDb250aW51aW5nIHdpdGhvdXQgYSByZXNlcnZlIHBvb2wuIik7CisJCQl4ZnNfd2FybihtcCwKKwkiVW5hYmxlIHRvIGFsbG9jYXRlIHJlc2VydmUgYmxvY2tzLiBDb250aW51aW5nIHdpdGhvdXQgcmVzZXJ2ZSBwb29sLiIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTUyNSwxMiArMTUyOSwxMiBAQAogCXJlc2Jsa3MgPSAwOwogCWVycm9yID0geGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmcmVzYmxrcywgTlVMTCk7CiAJaWYgKGVycm9yKQotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFVuYWJsZSB0byBmcmVlIHJlc2VydmVkIGJsb2NrIHBvb2wuICIKKwkJeGZzX3dhcm4obXAsICJVbmFibGUgdG8gZnJlZSByZXNlcnZlZCBibG9jayBwb29sLiAiCiAJCQkJIkZyZWVzcGFjZSBtYXkgbm90IGJlIGNvcnJlY3Qgb24gbmV4dCBtb3VudC4iKTsKIAogCWVycm9yID0geGZzX2xvZ19zYmNvdW50KG1wLCAxKTsKIAlpZiAoZXJyb3IpCi0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogVW5hYmxlIHRvIHVwZGF0ZSBzdXBlcmJsb2NrIGNvdW50ZXJzLiAiCisJCXhmc193YXJuKG1wLCAiVW5hYmxlIHRvIHVwZGF0ZSBzdXBlcmJsb2NrIGNvdW50ZXJzLiAiCiAJCQkJIkZyZWVzcGFjZSBtYXkgbm90IGJlIGNvcnJlY3Qgb24gbmV4dCBtb3VudC4iKTsKIAl4ZnNfdW5tb3VudGZzX3dyaXRlc2IobXApOwogCXhmc191bm1vdW50ZnNfd2FpdChtcCk7IAkJLyogd2FpdCBmb3IgYXN5bmMgYnVmcyAqLwpAQCAtMjAxMywxMCArMjAxNyw4IEBACiAJaWYgKHhmc19yZWFkb25seV9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3ApIHx8CiAJICAgIHhmc19yZWFkb25seV9idWZ0YXJnKG1wLT5tX2xvZ2Rldl90YXJncCkgfHwKIAkgICAgKG1wLT5tX3J0ZGV2X3RhcmdwICYmIHhmc19yZWFkb25seV9idWZ0YXJnKG1wLT5tX3J0ZGV2X3RhcmdwKSkpIHsKLQkJY21uX2VycihDRV9OT1RFLAotCQkJIlhGUzogJXMgcmVxdWlyZWQgb24gcmVhZC1vbmx5IGRldmljZS4iLCBtZXNzYWdlKTsKLQkJY21uX2VycihDRV9OT1RFLAotCQkJIlhGUzogd3JpdGUgYWNjZXNzIHVuYXZhaWxhYmxlLCBjYW5ub3QgcHJvY2VlZC4iKTsKKwkJeGZzX25vdGljZShtcCwgIiVzIHJlcXVpcmVkIG9uIHJlYWQtb25seSBkZXZpY2UuIiwgbWVzc2FnZSk7CisJCXhmc19ub3RpY2UobXAsICJ3cml0ZSBhY2Nlc3MgdW5hdmFpbGFibGUsIGNhbm5vdCBwcm9jZWVkLiIpOwogCQlyZXR1cm4gRVJPRlM7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19xdW90YS5oIGIvZnMveGZzL3hmc19xdW90YS5oCmluZGV4IDliYjZlZGEuLmE1OTVmMjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcXVvdGEuaAorKysgYi9mcy94ZnMveGZzX3F1b3RhLmgKQEAgLTM4Miw3ICszODIsOCBAQAogCXhmc190cmFuc19yZXNlcnZlX3F1b3RhX2J5ZHF1b3RzKHRwLCBtcCwgdWQsIGdkLCBuYiwgbmksIFwKIAkJCQlmIHwgWEZTX1FNT1BUX1JFU19SRUdCTEtTKQogCi1leHRlcm4gaW50IHhmc19xbV9kcWNoZWNrKHhmc19kaXNrX2RxdW90X3QgKiwgeGZzX2RxaWRfdCwgdWludCwgdWludCwgY2hhciAqKTsKK2V4dGVybiBpbnQgeGZzX3FtX2RxY2hlY2soc3RydWN0IHhmc19tb3VudCAqLCB4ZnNfZGlza19kcXVvdF90ICosCisJCQkJeGZzX2RxaWRfdCwgdWludCwgdWludCwgY2hhciAqKTsKIGV4dGVybiBpbnQgeGZzX21vdW50X3Jlc2V0X3NicWZsYWdzKHN0cnVjdCB4ZnNfbW91bnQgKik7CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J0YWxsb2MuYyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCmluZGV4IDEyYTE5MTMuLjhmNzZmZGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCkBAIC03Niw3ICs3Niw3IEBACiAJeGZzX21vdW50X3QJKm1wLAkJLyogZmlsZSBzeXN0ZW0gbW91bnQgcG9pbnQgKi8KIAl4ZnNfZXh0bGVuX3QJb2Jsb2NrcywJLyogb2xkIGNvdW50IG9mIGJsb2NrcyAqLwogCXhmc19leHRsZW5fdAluYmxvY2tzLAkvKiBuZXcgY291bnQgb2YgYmxvY2tzICovCi0JeGZzX2lub190CWlubykJCS8qIGlub2RlIG51bWJlciAoYml0bWFwL3N1bW1hcnkpICovCisJeGZzX2lub2RlX3QJKmlwKQkJLyogaW5vZGUgKGJpdG1hcC9zdW1tYXJ5KSAqLwogewogCXhmc19maWxlb2ZmX3QJYm5vOwkJLyogYmxvY2sgbnVtYmVyIGluIGZpbGUgKi8KIAl4ZnNfYnVmX3QJKmJwOwkJLyogdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgemVyb2luZyAqLwpAQCAtODYsNyArODYsNiBAQAogCXhmc19mc2Jsb2NrX3QJZmlyc3RibG9jazsJLyogZmlyc3QgYmxvY2sgYWxsb2NhdGVkIGluIHhhY3Rpb24gKi8KIAl4ZnNfYm1hcF9mcmVlX3QJZmxpc3Q7CQkvKiBsaXN0IG9mIGZyZWVkIGJsb2NrcyAqLwogCXhmc19mc2Jsb2NrX3QJZnNibm87CQkvKiBmaWxlc3lzdGVtIGJsb2NrIGZvciBibm8gKi8KLQl4ZnNfaW5vZGVfdAkqaXA7CQkvKiBwb2ludGVyIHRvIGluY29yZSBpbm9kZSAqLwogCXhmc19ibWJ0X2lyZWNfdAltYXA7CQkvKiBibG9jayBtYXAgb3V0cHV0ICovCiAJaW50CQlubWFwOwkJLyogbnVtYmVyIG9mIGJsb2NrIG1hcHMgKi8KIAlpbnQJCXJlc2Jsa3M7CS8qIHNwYWNlIHJlc2VydmF0aW9uICovCkBAIC0xMTIsOSArMTExLDkgQEAKIAkJLyoKIAkJICogTG9jayB0aGUgaW5vZGUuCiAJCSAqLwotCQlpZiAoKGVycm9yID0geGZzX3RyYW5zX2lnZXQobXAsIHRwLCBpbm8sIDAsCi0JCQkJCQlYRlNfSUxPQ0tfRVhDTCwgJmlwKSkpCi0JCQlnb3RvIGVycm9yX2NhbmNlbDsKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCXhmc190cmFuc19pam9pbl9yZWYodHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKIAkJeGZzX2JtYXBfaW5pdCgmZmxpc3QsICZmaXJzdGJsb2NrKTsKIAkJLyoKIAkJICogQWxsb2NhdGUgYmxvY2tzIHRvIHRoZSBiaXRtYXAgZmlsZS4KQEAgLTE1NSw5ICsxNTQsOCBAQAogCQkJLyoKIAkJCSAqIExvY2sgdGhlIGJpdG1hcCBpbm9kZS4KIAkJCSAqLwotCQkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgaW5vLCAwLAotCQkJCQkJCVhGU19JTE9DS19FWENMLCAmaXApKSkKLQkJCQlnb3RvIGVycm9yX2NhbmNlbDsKKwkJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQkJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKIAkJCS8qCiAJCQkgKiBHZXQgYSBidWZmZXIgZm9yIHRoZSBibG9jay4KIAkJCSAqLwpAQCAtMTg1NCw3ICsxODUyLDYgQEAKIAl4ZnNfcnRibG9ja190CWJtYm5vOwkJLyogYml0bWFwIGJsb2NrIG51bWJlciAqLwogCXhmc19idWZfdAkqYnA7CQkvKiB0ZW1wb3JhcnkgYnVmZmVyICovCiAJaW50CQllcnJvcjsJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLwotCXhmc19pbm9kZV90CSppcDsJCS8qIGJpdG1hcCBpbm9kZSwgdXNlZCBhcyBsb2NrICovCiAJeGZzX21vdW50X3QJKm5tcDsJCS8qIG5ldyAoZmFrZSkgbW91bnQgc3RydWN0dXJlICovCiAJeGZzX2RyZnNibm9fdAlucmJsb2NrczsJLyogbmV3IG51bWJlciBvZiByZWFsdGltZSBibG9ja3MgKi8KIAl4ZnNfZXh0bGVuX3QJbnJibWJsb2NrczsJLyogbmV3IG51bWJlciBvZiBydCBiaXRtYXAgYmxvY2tzICovCkBAIC0xOTE4LDExICsxOTE1LDExIEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBzcGFjZSB0byB0aGUgYml0bWFwIGFuZCBzdW1tYXJ5IGZpbGVzLCBhcyBuZWNlc3NhcnkuCiAJICovCi0JaWYgKChlcnJvciA9IHhmc19ncm93ZnNfcnRfYWxsb2MobXAsIHJibWJsb2NrcywgbnJibWJsb2NrcywKLQkJCW1wLT5tX3NiLnNiX3JibWlubykpKQorCWVycm9yID0geGZzX2dyb3dmc19ydF9hbGxvYyhtcCwgcmJtYmxvY2tzLCBucmJtYmxvY2tzLCBtcC0+bV9yYm1pcCk7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JaWYgKChlcnJvciA9IHhmc19ncm93ZnNfcnRfYWxsb2MobXAsIHJzdW1ibG9ja3MsIG5yc3VtYmxvY2tzLAotCQkJbXAtPm1fc2Iuc2JfcnN1bWlubykpKQorCWVycm9yID0geGZzX2dyb3dmc19ydF9hbGxvYyhtcCwgcnN1bWJsb2NrcywgbnJzdW1ibG9ja3MsIG1wLT5tX3JzdW1pcCk7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJLyoKIAkgKiBBbGxvY2F0ZSBhIG5ldyAoZmFrZSkgbW91bnQvc2IuCkBAIC0xOTcyLDEwICsxOTY5LDggQEAKIAkJLyoKIAkJICogTG9jayBvdXQgb3RoZXIgY2FsbGVycyBieSBncmFiYmluZyB0aGUgYml0bWFwIGlub2RlIGxvY2suCiAJCSAqLwotCQlpZiAoKGVycm9yID0geGZzX3RyYW5zX2lnZXQobXAsIHRwLCBtcC0+bV9zYi5zYl9yYm1pbm8sIDAsCi0JCQkJCQlYRlNfSUxPQ0tfRVhDTCwgJmlwKSkpCi0JCQlnb3RvIGVycm9yX2NhbmNlbDsKLQkJQVNTRVJUKGlwID09IG1wLT5tX3JibWlwKTsKKwkJeGZzX2lsb2NrKG1wLT5tX3JibWlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCXhmc190cmFuc19pam9pbl9yZWYodHAsIG1wLT5tX3JibWlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJCS8qCiAJCSAqIFVwZGF0ZSB0aGUgYml0bWFwIGlub2RlJ3Mgc2l6ZS4KIAkJICovCkBAIC0xOTg2LDEwICsxOTgxLDggQEAKIAkJLyoKIAkJICogR2V0IHRoZSBzdW1tYXJ5IGlub2RlIGludG8gdGhlIHRyYW5zYWN0aW9uLgogCQkgKi8KLQkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgbXAtPm1fc2Iuc2JfcnN1bWlubywgMCwKLQkJCQkJCVhGU19JTE9DS19FWENMLCAmaXApKSkKLQkJCWdvdG8gZXJyb3JfY2FuY2VsOwotCQlBU1NFUlQoaXAgPT0gbXAtPm1fcnN1bWlwKTsKKwkJeGZzX2lsb2NrKG1wLT5tX3JzdW1pcCwgWEZTX0lMT0NLX0VYQ0wpOworCQl4ZnNfdHJhbnNfaWpvaW5fcmVmKHRwLCBtcC0+bV9yc3VtaXAsIFhGU19JTE9DS19FWENMKTsKIAkJLyoKIAkJICogVXBkYXRlIHRoZSBzdW1tYXJ5IGlub2RlJ3Mgc2l6ZS4KIAkJICovCkBAIC0yMDc1LDE1ICsyMDY4LDE1IEBACiAJeGZzX2V4dGxlbl90CXByb2QsCQkvKiBleHRlbnQgcHJvZHVjdCBmYWN0b3IgKi8KIAl4ZnNfcnRibG9ja190CSpydGJsb2NrKQkvKiBvdXQ6IHN0YXJ0IGJsb2NrIGFsbG9jYXRlZCAqLwogeworCXhmc19tb3VudF90CSptcCA9IHRwLT50X21vdW50cDsKIAlpbnQJCWVycm9yOwkJLyogZXJyb3IgdmFsdWUgKi8KLQl4ZnNfaW5vZGVfdAkqaXA7CQkvKiBpbm9kZSBmb3IgYml0bWFwIGZpbGUgKi8KLQl4ZnNfbW91bnRfdAkqbXA7CQkvKiBmaWxlIHN5c3RlbSBtb3VudCBzdHJ1Y3R1cmUgKi8KIAl4ZnNfcnRibG9ja190CXI7CQkvKiByZXN1bHQgYWxsb2NhdGVkIGJsb2NrICovCiAJeGZzX2ZzYmxvY2tfdAlzYjsJCS8qIHN1bW1hcnkgZmlsZSBibG9jayBudW1iZXIgKi8KIAl4ZnNfYnVmX3QJKnN1bWJwOwkJLyogc3VtbWFyeSBmaWxlIGJsb2NrIGJ1ZmZlciAqLwogCisJQVNTRVJUKHhmc19pc2lsb2NrZWQobXAtPm1fcmJtaXAsIFhGU19JTE9DS19FWENMKSk7CiAJQVNTRVJUKG1pbmxlbiA+IDAgJiYgbWlubGVuIDw9IG1heGxlbik7Ci0JbXAgPSB0cC0+dF9tb3VudHA7CisKIAkvKgogCSAqIElmIHByb2QgaXMgc2V0IHRoZW4gZmlndXJlIG91dCB3aGF0IHRvIGRvIHRvIG1pbmxlbiBhbmQgbWF4bGVuLgogCSAqLwpAQCAtMjA5OSwxMiArMjA5Miw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQkvKgotCSAqIExvY2sgb3V0IG90aGVyIGNhbGxlcnMgYnkgZ3JhYmJpbmcgdGhlIGJpdG1hcCBpbm9kZSBsb2NrLgotCSAqLwotCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfaWdldChtcCwgdHAsIG1wLT5tX3NiLnNiX3JibWlubywgMCwKLQkJCQkJWEZTX0lMT0NLX0VYQ0wsICZpcCkpKQotCQlyZXR1cm4gZXJyb3I7CisKIAlzdW1icCA9IE5VTEw7CiAJLyoKIAkgKiBBbGxvY2F0ZSBieSBzaXplLCBvciBuZWFyIGFub3RoZXIgYmxvY2ssIG9yIGV4YWN0bHkgYXQgc29tZSBibG9jay4KQEAgLTIxMjMsMTEgKzIxMTEsMTIgQEAKIAkJCQlsZW4sICZzdW1icCwgJnNiLCBwcm9kLCAmcik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCWVycm9yID0gRUlPOwogCQlBU1NFUlQoMCk7CiAJfQotCWlmIChlcnJvcikgeworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCX0KKwogCS8qCiAJICogSWYgaXQgd29ya2VkLCB1cGRhdGUgdGhlIHN1cGVyYmxvY2suCiAJICovCkBAIC0yMTU1LDcgKzIxNDQsNiBAQAogCXhmc19leHRsZW5fdAlsZW4pCQkvKiBsZW5ndGggb2YgZXh0ZW50IGZyZWVkICovCiB7CiAJaW50CQllcnJvcjsJCS8qIGVycm9yIHZhbHVlICovCi0JeGZzX2lub2RlX3QJKmlwOwkJLyogYml0bWFwIGZpbGUgaW5vZGUgKi8KIAl4ZnNfbW91bnRfdAkqbXA7CQkvKiBmaWxlIHN5c3RlbSBtb3VudCBzdHJ1Y3R1cmUgKi8KIAl4ZnNfZnNibG9ja190CXNiOwkJLyogc3VtbWFyeSBmaWxlIGJsb2NrIG51bWJlciAqLwogCXhmc19idWZfdAkqc3VtYnA7CQkvKiBzdW1tYXJ5IGZpbGUgYmxvY2sgYnVmZmVyICovCkBAIC0yMTY0LDkgKzIxNTIsOSBAQAogCS8qCiAJICogU3luY2hyb25pemUgYnkgbG9ja2luZyB0aGUgYml0bWFwIGlub2RlLgogCSAqLwotCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfaWdldChtcCwgdHAsIG1wLT5tX3NiLnNiX3JibWlubywgMCwKLQkJCQkJWEZTX0lMT0NLX0VYQ0wsICZpcCkpKQotCQlyZXR1cm4gZXJyb3I7CisJeGZzX2lsb2NrKG1wLT5tX3JibWlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgbXAtPm1fcmJtaXAsIFhGU19JTE9DS19FWENMKTsKKwogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgZGVmaW5lZChERUJVRykKIAkvKgogCSAqIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgd2hvbGUgcmFuZ2UgaXMgY3VycmVudGx5IGFsbG9jYXRlZC4KQEAgLTIxOTksMTAgKzIxODcsMTAgQEAKIAkgKi8KIAlpZiAodHAtPnRfZnJleHRlbnRzX2RlbHRhICsgbXAtPm1fc2Iuc2JfZnJleHRlbnRzID09CiAJICAgIG1wLT5tX3NiLnNiX3JleHRlbnRzKSB7Ci0JCWlmICghKGlwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX05FV1JUQk0pKQotCQkJaXAtPmlfZC5kaV9mbGFncyB8PSBYRlNfRElGTEFHX05FV1JUQk07Ci0JCSooX191aW50NjRfdCAqKSZpcC0+aV9kLmRpX2F0aW1lID0gMDsKLQkJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOworCQlpZiAoIShtcC0+bV9yYm1pcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19ORVdSVEJNKSkKKwkJCW1wLT5tX3JibWlwLT5pX2QuZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19ORVdSVEJNOworCQkqKF9fdWludDY0X3QgKikmbXAtPm1fcmJtaXAtPmlfZC5kaV9hdGltZSA9IDA7CisJCXhmc190cmFuc19sb2dfaW5vZGUodHAsIG1wLT5tX3JibWlwLCBYRlNfSUxPR19DT1JFKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjIyLDggKzIyMTAsOCBAQAogCWlmIChzYnAtPnNiX3JibG9ja3MgPT0gMCkKIAkJcmV0dXJuIDA7CiAJaWYgKG1wLT5tX3J0ZGV2X3RhcmdwID09IE5VTEwpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCSJYRlM6IFRoaXMgZmlsZXN5c3RlbSBoYXMgYSByZWFsdGltZSB2b2x1bWUsIHVzZSBydGRldj1kZXZpY2Ugb3B0aW9uIik7CisJCXhmc193YXJuKG1wLAorCSJGaWxlc3lzdGVtIGhhcyBhIHJlYWx0aW1lIHZvbHVtZSwgdXNlIHJ0ZGV2PWRldmljZSBvcHRpb24iKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFTk9ERVYpOwogCX0KIAltcC0+bV9yc3VtbGV2ZWxzID0gc2JwLT5zYl9yZXh0c2xvZyArIDE7CkBAIC0yMjM3LDcgKzIyMjUsNyBAQAogCSAqLwogCWQgPSAoeGZzX2RhZGRyX3QpWEZTX0ZTQl9UT19CQihtcCwgbXAtPm1fc2Iuc2JfcmJsb2Nrcyk7CiAJaWYgKFhGU19CQl9UT19GU0IobXAsIGQpICE9IG1wLT5tX3NiLnNiX3JibG9ja3MpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiByZWFsdGltZSBtb3VudCAtLSAlbGx1ICE9ICVsbHUiLAorCQl4ZnNfd2FybihtcCwgInJlYWx0aW1lIG1vdW50IC0tICVsbHUgIT0gJWxsdSIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBYRlNfQkJfVE9fRlNCKG1wLCBkKSwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG1wLT5tX3NiLnNiX3JibG9ja3MpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGQklHKTsKQEAgLTIyNDYsNyArMjIzNCw3IEBACiAJCQkJCWQgLSBYRlNfRlNCX1RPX0JCKG1wLCAxKSwKIAkJCQkJWEZTX0ZTQl9UT19CKG1wLCAxKSwgMCk7CiAJaWYgKCFicCkgewotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IHJlYWx0aW1lIGRldmljZSBzaXplIGNoZWNrIGZhaWxlZCIpOworCQl4ZnNfd2FybihtcCwgInJlYWx0aW1lIGRldmljZSBzaXplIGNoZWNrIGZhaWxlZCIpOwogCQlyZXR1cm4gRUlPOwogCX0KIAl4ZnNfYnVmX3JlbHNlKGJwKTsKQEAgLTIzMDYsMjAgKzIyOTQsMTYgQEAKIAl4ZnNfcnRibG9ja190CSpwaWNrKQkJLyogcmVzdWx0IHJ0IGV4dGVudCAqLwogewogCXhmc19ydGJsb2NrX3QJYjsJCS8qIHJlc3VsdCBibG9jayAqLwotCWludAkJZXJyb3I7CQkvKiBlcnJvciByZXR1cm4gdmFsdWUgKi8KLQl4ZnNfaW5vZGVfdAkqaXA7CQkvKiBiaXRtYXAgaW5jb3JlIGlub2RlICovCiAJaW50CQlsb2cyOwkJLyogbG9nIG9mIHNlcXVlbmNlIG51bWJlciAqLwogCV9fdWludDY0X3QJcmVzaWQ7CQkvKiByZXNpZHVhbCBhZnRlciBsb2cgcmVtb3ZlZCAqLwogCV9fdWludDY0X3QJc2VxOwkJLyogc2VxdWVuY2UgbnVtYmVyIG9mIGZpbGUgY3JlYXRpb24gKi8KIAlfX3VpbnQ2NF90CSpzZXFwOwkJLyogcG9pbnRlciB0byBzZXFubyBpbiBpbm9kZSAqLwogCi0JaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgbXAtPm1fc2Iuc2JfcmJtaW5vLCAwLAotCQkJCQlYRlNfSUxPQ0tfRVhDTCwgJmlwKSkpCi0JCXJldHVybiBlcnJvcjsKLQlBU1NFUlQoaXAgPT0gbXAtPm1fcmJtaXApOwotCXNlcXAgPSAoX191aW50NjRfdCAqKSZpcC0+aV9kLmRpX2F0aW1lOwotCWlmICghKGlwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX05FV1JUQk0pKSB7Ci0JCWlwLT5pX2QuZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19ORVdSVEJNOworCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKG1wLT5tX3JibWlwLCBYRlNfSUxPQ0tfRVhDTCkpOworCisJc2VxcCA9IChfX3VpbnQ2NF90ICopJm1wLT5tX3JibWlwLT5pX2QuZGlfYXRpbWU7CisJaWYgKCEobXAtPm1fcmJtaXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfTkVXUlRCTSkpIHsKKwkJbXAtPm1fcmJtaXAtPmlfZC5kaV9mbGFncyB8PSBYRlNfRElGTEFHX05FV1JUQk07CiAJCSpzZXFwID0gMDsKIAl9CiAJc2VxID0gKnNlcXA7CkBAIC0yMzM1LDcgKzIzMTksNyBAQAogCQkJYiA9IG1wLT5tX3NiLnNiX3JleHRlbnRzIC0gbGVuOwogCX0KIAkqc2VxcCA9IHNlcSArIDE7Ci0JeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOworCXhmc190cmFuc19sb2dfaW5vZGUodHAsIG1wLT5tX3JibWlwLCBYRlNfSUxPR19DT1JFKTsKIAkqcGljayA9IGI7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J0YWxsb2MuaCBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5oCmluZGV4IGZmNjE0YzIuLjA5ZTFmNGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5oCisrKyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5oCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlpZiAobXAtPm1fc2Iuc2JfcmJsb2NrcyA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogTm90IGJ1aWx0IHdpdGggQ09ORklHX1hGU19SVCIpOworCXhmc193YXJuKG1wLCAiTm90IGJ1aWx0IHdpdGggQ09ORklHX1hGU19SVCIpOwogCXJldHVybiBFTk9TWVM7CiB9CiAjIGRlZmluZSB4ZnNfcnRtb3VudF9pbm9kZXMobSkgICgoKG1wKS0+bV9zYi5zYl9yYmxvY2tzID09IDApPyAwIDogKEVOT1NZUykpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J3LmMgYi9mcy94ZnMveGZzX3J3LmMKaW5kZXggNTY4NjFkNS4uZDZkNmZkZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydy5jCisrKyBiL2ZzL3hmcy94ZnNfcncuYwpAQCAtNDksOSArNDksOSBAQAogCWxvZ2Vycm9yID0gZmxhZ3MgJiBTSFVURE9XTl9MT0dfSU9fRVJST1I7CiAKIAlpZiAoIShmbGFncyAmIFNIVVRET1dOX0ZPUkNFX1VNT1VOVCkpIHsKLQkJY21uX2VycihDRV9OT1RFLCAieGZzX2ZvcmNlX3NodXRkb3duKCVzLDB4JXgpIGNhbGxlZCBmcm9tICIKLQkJCQkgImxpbmUgJWQgb2YgZmlsZSAlcy4gIFJldHVybiBhZGRyZXNzID0gMHglcCIsCi0JCQltcC0+bV9mc25hbWUsIGZsYWdzLCBsbm51bSwgZm5hbWUsIF9fcmV0dXJuX2FkZHJlc3MpOworCQl4ZnNfbm90aWNlKG1wLAorCSIlcygweCV4KSBjYWxsZWQgZnJvbSBsaW5lICVkIG9mIGZpbGUgJXMuICBSZXR1cm4gYWRkcmVzcyA9IDB4JXAiLAorCQkJX19mdW5jX18sIGZsYWdzLCBsbm51bSwgZm5hbWUsIF9fcmV0dXJuX2FkZHJlc3MpOwogCX0KIAkvKgogCSAqIE5vIG5lZWQgdG8gZHVwbGljYXRlIGVmZm9ydHMuCkBAIC02OSwzMCArNjksMjUgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGZsYWdzICYgU0hVVERPV05fQ09SUlVQVF9JTkNPUkUpIHsKLQkJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfU0hVVERPV05fQ09SUlVQVCwgQ0VfQUxFUlQsIG1wLAotICAgICJDb3JydXB0aW9uIG9mIGluLW1lbW9yeSBkYXRhIGRldGVjdGVkLiAgU2h1dHRpbmcgZG93biBmaWxlc3lzdGVtOiAlcyIsCi0JCQltcC0+bV9mc25hbWUpOwotCQlpZiAoWEZTX0VSUkxFVkVMX0hJR0ggPD0geGZzX2Vycm9yX2xldmVsKSB7CisJCXhmc19hbGVydF90YWcobXAsIFhGU19QVEFHX1NIVVRET1dOX0NPUlJVUFQsCisgICAgIkNvcnJ1cHRpb24gb2YgaW4tbWVtb3J5IGRhdGEgZGV0ZWN0ZWQuICBTaHV0dGluZyBkb3duIGZpbGVzeXN0ZW0iKTsKKwkJaWYgKFhGU19FUlJMRVZFTF9ISUdIIDw9IHhmc19lcnJvcl9sZXZlbCkKIAkJCXhmc19zdGFja190cmFjZSgpOwotCQl9CiAJfSBlbHNlIGlmICghKGZsYWdzICYgU0hVVERPV05fRk9SQ0VfVU1PVU5UKSkgewogCQlpZiAobG9nZXJyb3IpIHsKLQkJCXhmc19jbW5fZXJyKFhGU19QVEFHX1NIVVRET1dOX0xPR0VSUk9SLCBDRV9BTEVSVCwgbXAsCi0JCSJMb2cgSS9PIEVycm9yIERldGVjdGVkLiAgU2h1dHRpbmcgZG93biBmaWxlc3lzdGVtOiAlcyIsCi0JCQkJbXAtPm1fZnNuYW1lKTsKKwkJCXhmc19hbGVydF90YWcobXAsIFhGU19QVEFHX1NIVVRET1dOX0xPR0VSUk9SLAorCQkiTG9nIEkvTyBFcnJvciBEZXRlY3RlZC4gIFNodXR0aW5nIGRvd24gZmlsZXN5c3RlbSIpOwogCQl9IGVsc2UgaWYgKGZsYWdzICYgU0hVVERPV05fREVWSUNFX1JFUSkgewotCQkJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfU0hVVERPV05fSU9FUlJPUiwgQ0VfQUxFUlQsIG1wLAotCQkiQWxsIGRldmljZSBwYXRocyBsb3N0LiAgU2h1dHRpbmcgZG93biBmaWxlc3lzdGVtOiAlcyIsCi0JCQkJbXAtPm1fZnNuYW1lKTsKKwkJCXhmc19hbGVydF90YWcobXAsIFhGU19QVEFHX1NIVVRET1dOX0lPRVJST1IsCisJCSJBbGwgZGV2aWNlIHBhdGhzIGxvc3QuICBTaHV0dGluZyBkb3duIGZpbGVzeXN0ZW0iKTsKIAkJfSBlbHNlIGlmICghKGZsYWdzICYgU0hVVERPV05fUkVNT1RFX1JFUSkpIHsKLQkJCXhmc19jbW5fZXJyKFhGU19QVEFHX1NIVVRET1dOX0lPRVJST1IsIENFX0FMRVJULCBtcCwKLQkJIkkvTyBFcnJvciBEZXRlY3RlZC4gIFNodXR0aW5nIGRvd24gZmlsZXN5c3RlbTogJXMiLAotCQkJCW1wLT5tX2ZzbmFtZSk7CisJCQl4ZnNfYWxlcnRfdGFnKG1wLCBYRlNfUFRBR19TSFVURE9XTl9JT0VSUk9SLAorCQkiSS9PIEVycm9yIERldGVjdGVkLiBTaHV0dGluZyBkb3duIGZpbGVzeXN0ZW0iKTsKIAkJfQogCX0KIAlpZiAoIShmbGFncyAmIFNIVVRET1dOX0ZPUkNFX1VNT1VOVCkpIHsKLQkJY21uX2VycihDRV9BTEVSVCwgIlBsZWFzZSB1bW91bnQgdGhlIGZpbGVzeXN0ZW0sICIKLQkJCQkgICJhbmQgcmVjdGlmeSB0aGUgcHJvYmxlbShzKSIpOworCQl4ZnNfYWxlcnQobXAsCisJIlBsZWFzZSB1bW91bnQgdGhlIGZpbGVzeXN0ZW0gYW5kIHJlY3RpZnkgdGhlIHByb2JsZW0ocykiKTsKIAl9CiB9CiAKQEAgLTEwNiwxMCArMTAxLDkgQEAKIAl4ZnNfYnVmX3QJCSpicCwKIAl4ZnNfZGFkZHJfdAkJYmxrbm8pCiB7Ci0JY21uX2VycihDRV9BTEVSVCwKLSAiSS9PIGVycm9yIGluIGZpbGVzeXN0ZW0gKFwiJXNcIikgbWV0YS1kYXRhIGRldiAlcyBibG9jayAweCVsbHgiCi0gIiAgICAgICAoXCIlc1wiKSBlcnJvciAlZCBidWYgY291bnQgJXpkIiwKLQkJKCFtcCB8fCAhbXAtPm1fZnNuYW1lKSA/ICIoZnMgbmFtZSBub3Qgc2V0KSIgOiBtcC0+bV9mc25hbWUsCisJeGZzX2FsZXJ0KG1wLAorCQkgIkkvTyBlcnJvciBvY2N1cnJlZDogbWV0YS1kYXRhIGRldiAlcyBibG9jayAweCVsbHgiCisJCSAiICAgICAgIChcIiVzXCIpIGVycm9yICVkIGJ1ZiBjb3VudCAlemQiLAogCQlYRlNfQlVGVEFSR19OQU1FKFhGU19CVUZfVEFSR0VUKGJwKSksCiAJCShfX3VpbnQ2NF90KWJsa25vLCBmdW5jLAogCQlYRlNfQlVGX0dFVEVSUk9SKGJwKSwgWEZTX0JVRl9DT1VOVChicCkpOwpAQCAtMTczLDE3ICsxNjcsOSBAQAogeGZzX2dldF9leHRzel9oaW50KAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQogewotCXhmc19leHRsZW5fdAkJZXh0c3o7Ci0KLQlpZiAodW5saWtlbHkoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSkpIHsKLQkJZXh0c3ogPSAoaXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfRVhUU0laRSkKLQkJCQk/IGlwLT5pX2QuZGlfZXh0c2l6ZQotCQkJCTogaXAtPmlfbW91bnQtPm1fc2Iuc2JfcmV4dHNpemU7Ci0JCUFTU0VSVChleHRzeik7Ci0JfSBlbHNlIHsKLQkJZXh0c3ogPSAoaXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfRVhUU0laRSkKLQkJCQk/IGlwLT5pX2QuZGlfZXh0c2l6ZSA6IDA7Ci0JfQotCi0JcmV0dXJuIGV4dHN6OworCWlmICgoaXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfRVhUU0laRSkgJiYgaXAtPmlfZC5kaV9leHRzaXplKQorCQlyZXR1cm4gaXAtPmlfZC5kaV9leHRzaXplOworCWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKQorCQlyZXR1cm4gaXAtPmlfbW91bnQtPm1fc2Iuc2JfcmV4dHNpemU7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmggYi9mcy94ZnMveGZzX3RyYW5zLmgKaW5kZXggYzIwNDJiNy4uMDZhOTc1OSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5oCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuaApAQCAtNDY5LDggKzQ2OSw2IEBACiB2b2lkCQl4ZnNfdHJhbnNfc3RhbGVfaW5vZGVfYnVmKHhmc190cmFuc190ICosIHN0cnVjdCB4ZnNfYnVmICopOwogdm9pZAkJeGZzX3RyYW5zX2RxdW90X2J1Zih4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqLCB1aW50KTsKIHZvaWQJCXhmc190cmFuc19pbm9kZV9hbGxvY19idWYoeGZzX3RyYW5zX3QgKiwgc3RydWN0IHhmc19idWYgKik7Ci1pbnQJCXhmc190cmFuc19pZ2V0KHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX3RyYW5zX3QgKiwKLQkJCSAgICAgICB4ZnNfaW5vX3QgLCB1aW50LCB1aW50LCBzdHJ1Y3QgeGZzX2lub2RlICoqKTsKIHZvaWQJCXhmc190cmFuc19pY2hndGltZShzdHJ1Y3QgeGZzX3RyYW5zICosIHN0cnVjdCB4ZnNfaW5vZGUgKiwgaW50KTsKIHZvaWQJCXhmc190cmFuc19pam9pbl9yZWYoc3RydWN0IHhmc190cmFucyAqLCBzdHJ1Y3QgeGZzX2lub2RlICosIHVpbnQpOwogdm9pZAkJeGZzX3RyYW5zX2lqb2luKHN0cnVjdCB4ZnNfdHJhbnMgKiwgc3RydWN0IHhmc19pbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IGM1YmJiYzQuLjEyYWZmOTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAKIAkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAkJCWlmICghWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKLQkJCQl4ZnNfY21uX2VycihYRlNfUFRBR19BSUxERUxFVEUsIENFX0FMRVJULCBtcCwKKwkJCQl4ZnNfYWxlcnRfdGFnKG1wLCBYRlNfUFRBR19BSUxERUxFVEUsCiAJCSIlczogYXR0ZW1wdGluZyB0byBkZWxldGUgYSBsb2cgaXRlbSB0aGF0IGlzIG5vdCBpbiB0aGUgQUlMIiwKIAkJCQkJCV9fZnVuY19fKTsKIAkJCQl4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX0NPUlJVUFRfSU5DT1JFKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCmluZGV4IGM0NzkxOGMuLjNiZWE2NjEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19idWYuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCQlpZiAoeGZzX2Vycm9yX3RhcmdldCA9PSB0YXJnZXQpIHsKIAkJCQlpZiAoKCh4ZnNfcmVxX251bSsrKSAlIHhmc19lcnJvcl9tb2QpID09IDApIHsKIAkJCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCQkJCWNtbl9lcnIoQ0VfREVCVUcsICJSZXR1cm5pbmcgZXJyb3IhXG4iKTsKKwkJCQkJeGZzX2RlYnVnKG1wLCAiUmV0dXJuaW5nIGVycm9yISIpOwogCQkJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJCQkJfQogCQkJfQpAQCAtNDAzLDcgKzQwMyw3IEBACiAJCQkJeGZzX2ZvcmNlX3NodXRkb3duKHRwLT50X21vdW50cCwKIAkJCQkJCSAgIFNIVVRET1dOX01FVEFfSU9fRVJST1IpOwogCQkJCXhmc19idWZfcmVsc2UoYnApOwotCQkJCWNtbl9lcnIoQ0VfREVCVUcsICJSZXR1cm5pbmcgdHJhbnMgZXJyb3IhXG4iKTsKKwkJCQl4ZnNfZGVidWcobXAsICJSZXR1cm5pbmcgdHJhbnMgZXJyb3IhIik7CiAJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCQkJfQogCQl9CkBAIC00MjcsNyArNDI3LDcgQEAKIAkgKi8KICNpZiBkZWZpbmVkKERFQlVHKQogCWlmIChYRlNfQlVGX0lTU1RBTEUoYnApICYmIFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKLQkJY21uX2VycihDRV9OT1RFLCAiYWJvdXQgdG8gcG9wIGFzc2VydCwgYnAgPT0gMHglcCIsIGJwKTsKKwkJeGZzX25vdGljZShtcCwgImFib3V0IHRvIHBvcCBhc3NlcnQsIGJwID09IDB4JXAiLCBicCk7CiAjZW5kaWYKIAlBU1NFUlQoKFhGU19CVUZfQkZMQUdTKGJwKSAmIChYQkZfU1RBTEV8WEJGX0RFTFdSSSkpICE9CiAJCQkJICAgICAoWEJGX1NUQUxFfFhCRl9ERUxXUkkpKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfaW5vZGUuYwppbmRleCBjY2IzNDUzLi4xNjA4NGQ4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19pbm9kZS5jCkBAIC00NCwyOCArNDQsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBHZXQgYW4gaW5vZGUgYW5kIGpvaW4gaXQgdG8gdGhlIHRyYW5zYWN0aW9uLgotICovCi1pbnQKLXhmc190cmFuc19pZ2V0KAotCXhmc19tb3VudF90CSptcCwKLQl4ZnNfdHJhbnNfdAkqdHAsCi0JeGZzX2lub190CWlubywKLQl1aW50CQlmbGFncywKLQl1aW50CQlsb2NrX2ZsYWdzLAotCXhmc19pbm9kZV90CSoqaXBwKQotewotCWludAkJCWVycm9yOwotCi0JZXJyb3IgPSB4ZnNfaWdldChtcCwgdHAsIGlubywgZmxhZ3MsIGxvY2tfZmxhZ3MsIGlwcCk7Ci0JaWYgKCFlcnJvciAmJiB0cCkgewotCQl4ZnNfdHJhbnNfaWpvaW4odHAsICppcHApOwotCQkoKmlwcCktPmlfaXRlbXAtPmlsaV9sb2NrX2ZsYWdzID0gbG9ja19mbGFnczsKLQl9Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKgogICogQWRkIGEgbG9ja2VkIGlub2RlIHRvIHRoZSB0cmFuc2FjdGlvbi4KICAqCiAgKiBUaGUgaW5vZGUgbXVzdCBiZSBsb2NrZWQsIGFuZCBpdCBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSB0cmFuc2FjdGlvbi4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCBkOGU2ZjhjLi4zN2Q4MTQ2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0xMTg5LDkgKzExODksOCBAQAogCQkgKiBpbm9kZSBtaWdodCBiZSBsb3N0IGZvciBhIGxvbmcgdGltZSBvciBmb3JldmVyLgogCQkgKi8KIAkJaWYgKCFYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgewotCQkJY21uX2VycihDRV9OT1RFLAotCQkieGZzX2luYWN0aXZlOgl4ZnNfaWZyZWUoKSByZXR1cm5lZCBhbiBlcnJvciA9ICVkIG9uICVzIiwKLQkJCQllcnJvciwgbXAtPm1fZnNuYW1lKTsKKwkJCXhmc19ub3RpY2UobXAsICIlczogeGZzX2lmcmVlIHJldHVybmVkIGVycm9yICVkIiwKKwkJCQlfX2Z1bmNfXywgZXJyb3IpOwogCQkJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9NRVRBX0lPX0VSUk9SKTsKIAkJfQogCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTfFhGU19UUkFOU19BQk9SVCk7CkBAIC0xMjA4LDEyICsxMjA3LDEyIEBACiAJCSAqLwogCQllcnJvciA9IHhmc19ibWFwX2ZpbmlzaCgmdHAsICAmZnJlZV9saXN0LCAmY29tbWl0dGVkKTsKIAkJaWYgKGVycm9yKQotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfTk9URSwgbXAsICJ4ZnNfaW5hY3RpdmU6ICIKLQkJCQkieGZzX2JtYXBfZmluaXNoKCkgcmV0dXJuZWQgZXJyb3IgJWQiLCBlcnJvcik7CisJCQl4ZnNfbm90aWNlKG1wLCAiJXM6IHhmc19ibWFwX2ZpbmlzaCByZXR1cm5lZCBlcnJvciAlZCIsCisJCQkJX19mdW5jX18sIGVycm9yKTsKIAkJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKIAkJaWYgKGVycm9yKQotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfTk9URSwgbXAsICJ4ZnNfaW5hY3RpdmU6ICIKLQkJCQkieGZzX3RyYW5zX2NvbW1pdCgpIHJldHVybmVkIGVycm9yICVkIiwgZXJyb3IpOworCQkJeGZzX25vdGljZShtcCwgIiVzOiB4ZnNfdHJhbnNfY29tbWl0IHJldHVybmVkIGVycm9yICVkIiwKKwkJCQlfX2Z1bmNfXywgZXJyb3IpOwogCX0KIAogCS8qCkBAIC0xMzEwLDcgKzEzMDksNyBAQAogCWVycm9yID0geGZzX3FtX3ZvcF9kcWFsbG9jKGRwLCBjdXJyZW50X2ZzdWlkKCksIGN1cnJlbnRfZnNnaWQoKSwgcHJpZCwKIAkJCVhGU19RTU9QVF9RVU9UQUxMIHwgWEZTX1FNT1BUX0lOSEVSSVQsICZ1ZHFwLCAmZ2RxcCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIHN0ZF9yZXR1cm47CisJCXJldHVybiBlcnJvcjsKIAogCWlmIChpc19kaXIpIHsKIAkJcmRldiA9IDA7CkBAIC0xMzkwLDEyICsxMzg5LDYgQEAKIAl9CiAKIAkvKgotCSAqIEF0IHRoaXMgcG9pbnQsIHdlJ3ZlIGdvdHRlbiBhIG5ld2x5IGFsbG9jYXRlZCBpbm9kZS4KLQkgKiBJdCBpcyBsb2NrZWQgKGFuZCBqb2luZWQgdG8gdGhlIHRyYW5zYWN0aW9uKS4KLQkgKi8KLQlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKLQotCS8qCiAJICogTm93IHdlIGpvaW4gdGhlIGRpcmVjdG9yeSBpbm9kZSB0byB0aGUgdHJhbnNhY3Rpb24uICBXZSBkbyBub3QgZG8gaXQKIAkgKiBlYXJsaWVyIGJlY2F1c2UgeGZzX2Rpcl9pYWxsb2MgbWlnaHQgY29tbWl0IHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbgogCSAqIChhbmQgcmVsZWFzZSBhbGwgdGhlIGxvY2tzKS4gIEFuIGVycm9yIGZyb20gaGVyZSBvbiB3aWxsIHJlc3VsdCBpbgpAQCAtMTQ0MCwyMiArMTQzMywxMyBAQAogCSAqLwogCXhmc19xbV92b3BfY3JlYXRlX2RxYXR0YWNoKHRwLCBpcCwgdWRxcCwgZ2RxcCk7CiAKLQkvKgotCSAqIHhmc190cmFuc19jb21taXQgbm9ybWFsbHkgZGVjcmVtZW50cyB0aGUgdm5vZGUgcmVmIGNvdW50Ci0JICogd2hlbiBpdCB1bmxvY2tzIHRoZSBpbm9kZS4gU2luY2Ugd2Ugd2FudCB0byByZXR1cm4gdGhlCi0JICogdm5vZGUgdG8gdGhlIGNhbGxlciwgd2UgYnVtcCB0aGUgdm5vZGUgcmVmIGNvdW50IG5vdy4KLQkgKi8KLQlJSE9MRChpcCk7Ci0KIAllcnJvciA9IHhmc19ibWFwX2ZpbmlzaCgmdHAsICZmcmVlX2xpc3QsICZjb21taXR0ZWQpOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfYWJvcnRfcmVsZTsKKwkJZ290byBvdXRfYm1hcF9jYW5jZWw7CiAKIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwotCWlmIChlcnJvcikgewotCQlJUkVMRShpcCk7Ci0JCWdvdG8gb3V0X2RxcmVsZTsKLQl9CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9yZWxlYXNlX2lub2RlOwogCiAJeGZzX3FtX2RxcmVsZSh1ZHFwKTsKIAl4ZnNfcW1fZHFyZWxlKGdkcXApOwpAQCAtMTQ2OSwyNyArMTQ1MywyMSBAQAogCWNhbmNlbF9mbGFncyB8PSBYRlNfVFJBTlNfQUJPUlQ7CiAgb3V0X3RyYW5zX2NhbmNlbDoKIAl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwotIG91dF9kcXJlbGU6Ci0JeGZzX3FtX2RxcmVsZSh1ZHFwKTsKLQl4ZnNfcW1fZHFyZWxlKGdkcXApOwotCi0JaWYgKHVubG9ja19kcF9vbl9lcnJvcikKLQkJeGZzX2l1bmxvY2soZHAsIFhGU19JTE9DS19FWENMKTsKLSBzdGRfcmV0dXJuOgotCXJldHVybiBlcnJvcjsKLQotIG91dF9hYm9ydF9yZWxlOgorIG91dF9yZWxlYXNlX2lub2RlOgogCS8qCiAJICogV2FpdCB1bnRpbCBhZnRlciB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIHRvCiAJICogcmVsZWFzZSB0aGUgaW5vZGUuICBUaGlzIHByZXZlbnRzIHJlY3Vyc2l2ZSB0cmFuc2FjdGlvbnMKIAkgKiBhbmQgZGVhZGxvY2tzIGZyb20geGZzX2luYWN0aXZlLgogCSAqLwotCXhmc19ibWFwX2NhbmNlbCgmZnJlZV9saXN0KTsKLQljYW5jZWxfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwotCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbF9mbGFncyk7Ci0JSVJFTEUoaXApOwotCXVubG9ja19kcF9vbl9lcnJvciA9IEJfRkFMU0U7Ci0JZ290byBvdXRfZHFyZWxlOworCWlmIChpcCkKKwkJSVJFTEUoaXApOworCisJeGZzX3FtX2RxcmVsZSh1ZHFwKTsKKwl4ZnNfcW1fZHFyZWxlKGdkcXApOworCisJaWYgKHVubG9ja19kcF9vbl9lcnJvcikKKwkJeGZzX2l1bmxvY2soZHAsIFhGU19JTE9DS19FWENMKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKICNpZmRlZiBERUJVRwpAQCAtMjExNCw5ICsyMDkyLDggQEAKIAkJCQkgIFhGU19CTUFQSV9XUklURSB8IFhGU19CTUFQSV9NRVRBREFUQSwKIAkJCQkgICZmaXJzdF9ibG9jaywgcmVzYmxrcywgbXZhbCwgJm5tYXBzLAogCQkJCSAgJmZyZWVfbGlzdCk7Ci0JCWlmIChlcnJvcikgewotCQkJZ290byBlcnJvcjE7Ci0JCX0KKwkJaWYgKGVycm9yKQorCQkJZ290byBlcnJvcjI7CiAKIAkJaWYgKHJlc2Jsa3MpCiAJCQlyZXNibGtzIC09IGZzX2Jsb2NrczsKQEAgLTIxNDgsNyArMjEyNSw3IEBACiAJZXJyb3IgPSB4ZnNfZGlyX2NyZWF0ZW5hbWUodHAsIGRwLCBsaW5rX25hbWUsIGlwLT5pX2lubywKIAkJCQkJJmZpcnN0X2Jsb2NrLCAmZnJlZV9saXN0LCByZXNibGtzKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3IxOworCQlnb3RvIGVycm9yMjsKIAl4ZnNfdHJhbnNfaWNoZ3RpbWUodHAsIGRwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgZHAsIFhGU19JTE9HX0NPUkUpOwogCkBAIC0yMTYxLDEzICsyMTM4LDYgQEAKIAkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKIAl9CiAKLQkvKgotCSAqIHhmc190cmFuc19jb21taXQgbm9ybWFsbHkgZGVjcmVtZW50cyB0aGUgdm5vZGUgcmVmIGNvdW50Ci0JICogd2hlbiBpdCB1bmxvY2tzIHRoZSBpbm9kZS4gU2luY2Ugd2Ugd2FudCB0byByZXR1cm4gdGhlCi0JICogdm5vZGUgdG8gdGhlIGNhbGxlciwgd2UgYnVtcCB0aGUgdm5vZGUgcmVmIGNvdW50IG5vdy4KLQkgKi8KLQlJSE9MRChpcCk7Ci0KIAllcnJvciA9IHhmc19ibWFwX2ZpbmlzaCgmdHAsICZmcmVlX2xpc3QsICZjb21taXR0ZWQpOwogCWlmIChlcnJvcikgewogCQlnb3RvIGVycm9yMjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy5oCmluZGV4IGE1NGY0NDIuLjI4MGNhN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaApAQCAtMzgsOCArMzgsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLWF0b21pYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgogCiAjZW5kaWYgLyogX19BU01fR0VORVJJQ19CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2V4dDItYXRvbWljLmgKaW5kZXggYWIxYzg3NWUuLmVjZjFjOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2V4dDItYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaApAQCAtNSw3ICs1LDcgQEAKIAkoewkJCQkJCVwKIAkJaW50IHJldDsJCQkJXAogCQlzcGluX2xvY2sobG9jayk7CQkJXAotCQlyZXQgPSBleHQyX3NldF9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpOyBcCisJCXJldCA9IF9fdGVzdF9hbmRfc2V0X2JpdF9sZShuciwgYWRkcik7CVwKIAkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAogCQlyZXQ7CQkJCQlcCiAJfSkKQEAgLTE0LDcgKzE0LDcgQEAKIAkoewkJCQkJCVwKIAkJaW50IHJldDsJCQkJXAogCQlzcGluX2xvY2sobG9jayk7CQkJXAotCQlyZXQgPSBleHQyX2NsZWFyX2JpdCgobnIpLCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSk7IFwKKwkJcmV0ID0gX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUobnIsIGFkZHIpOwlcCiAJCXNwaW5fdW5sb2NrKGxvY2spOwkJCVwKIAkJcmV0OwkJCQkJXAogCX0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2NmODIyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX0VYVDJfTk9OX0FUT01JQ19IXwotI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX0VYVDJfTk9OX0FUT01JQ19IXwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xlLmg+Ci0KLSNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLGFkZHIpCVwKLQlnZW5lcmljX19fdGVzdF9hbmRfc2V0X2xlX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotI2RlZmluZSBleHQyX2NsZWFyX2JpdChucixhZGRyKQlcCi0JZ2VuZXJpY19fX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotCi0jZGVmaW5lIGV4dDJfdGVzdF9iaXQobnIsYWRkcikJXAotCWdlbmVyaWNfdGVzdF9sZV9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKLSNkZWZpbmUgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKLQlnZW5lcmljX2ZpbmRfZmlyc3RfemVyb19sZV9iaXQoKHVuc2lnbmVkIGxvbmcgKikoYWRkciksIChzaXplKSkKLSNkZWZpbmUgZXh0Ml9maW5kX25leHRfemVyb19iaXQoYWRkciwgc2l6ZSwgb2ZmKSBcCi0JZ2VuZXJpY19maW5kX25leHRfemVyb19sZV9iaXQoKHVuc2lnbmVkIGxvbmcgKikoYWRkciksIChzaXplKSwgKG9mZikpCi0jZGVmaW5lIGV4dDJfZmluZF9uZXh0X2JpdChhZGRyLCBzaXplLCBvZmYpIFwKLQlnZW5lcmljX2ZpbmRfbmV4dF9sZV9iaXQoKHVuc2lnbmVkIGxvbmcgKikoYWRkciksIChzaXplKSwgKG9mZikpCi0KLSNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfQklUT1BTX0VYVDJfTk9OX0FUT01JQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvbGUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2xlLmgKaW5kZXggODBlM2JmMS4uOTQ2YTIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvbGUuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9sZS5oCkBAIC00LDU0ICs0LDc3IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0jZGVmaW5lIEJJVE9QX1dPUkQobnIpCQkoKG5yKSAvIEJJVFNfUEVSX0xPTkcpCi0jZGVmaW5lIEJJVE9QX0xFX1NXSVpaTEUJKChCSVRTX1BFUl9MT05HLTEpICYgfjB4NykKLQogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCi0jZGVmaW5lIGdlbmVyaWNfdGVzdF9sZV9iaXQobnIsIGFkZHIpIHRlc3RfYml0KG5yLCBhZGRyKQotI2RlZmluZSBnZW5lcmljX19fc2V0X2xlX2JpdChuciwgYWRkcikgX19zZXRfYml0KG5yLCBhZGRyKQotI2RlZmluZSBnZW5lcmljX19fY2xlYXJfbGVfYml0KG5yLCBhZGRyKSBfX2NsZWFyX2JpdChuciwgYWRkcikKKyNkZWZpbmUgQklUT1BfTEVfU1dJWlpMRQkwCiAKLSNkZWZpbmUgZ2VuZXJpY190ZXN0X2FuZF9zZXRfbGVfYml0KG5yLCBhZGRyKSB0ZXN0X2FuZF9zZXRfYml0KG5yLCBhZGRyKQotI2RlZmluZSBnZW5lcmljX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgdGVzdF9hbmRfY2xlYXJfYml0KG5yLCBhZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF96ZXJvX2JpdF9sZShjb25zdCB2b2lkICphZGRyLAorCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiBmaW5kX25leHRfemVyb19iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KTsKK30KIAotI2RlZmluZSBnZW5lcmljX19fdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgX190ZXN0X2FuZF9zZXRfYml0KG5yLCBhZGRyKQotI2RlZmluZSBnZW5lcmljX19fdGVzdF9hbmRfY2xlYXJfbGVfYml0KG5yLCBhZGRyKSBfX3Rlc3RfYW5kX2NsZWFyX2JpdChuciwgYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmaW5kX25leHRfYml0X2xlKGNvbnN0IHZvaWQgKmFkZHIsCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIGZpbmRfbmV4dF9iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KTsKK30KIAotI2RlZmluZSBnZW5lcmljX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdChhZGRyLCBzaXplLCBvZmZzZXQpIGZpbmRfbmV4dF96ZXJvX2JpdChhZGRyLCBzaXplLCBvZmZzZXQpCi0jZGVmaW5lIGdlbmVyaWNfZmluZF9uZXh0X2xlX2JpdChhZGRyLCBzaXplLCBvZmZzZXQpIFwKLQkJCWZpbmRfbmV4dF9iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbmRfZmlyc3RfemVyb19iaXRfbGUoY29uc3Qgdm9pZCAqYWRkciwKKwkJdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpOworfQogCiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKIAotI2RlZmluZSBnZW5lcmljX3Rlc3RfbGVfYml0KG5yLCBhZGRyKSBcCi0JdGVzdF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKLSNkZWZpbmUgZ2VuZXJpY19fX3NldF9sZV9iaXQobnIsIGFkZHIpIFwKLQlfX3NldF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKLSNkZWZpbmUgZ2VuZXJpY19fX2NsZWFyX2xlX2JpdChuciwgYWRkcikgXAotCV9fY2xlYXJfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCisjZGVmaW5lIEJJVE9QX0xFX1NXSVpaTEUJKChCSVRTX1BFUl9MT05HLTEpICYgfjB4NykKIAotI2RlZmluZSBnZW5lcmljX3Rlc3RfYW5kX3NldF9sZV9iaXQobnIsIGFkZHIpIFwKLQl0ZXN0X2FuZF9zZXRfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCi0jZGVmaW5lIGdlbmVyaWNfdGVzdF9hbmRfY2xlYXJfbGVfYml0KG5yLCBhZGRyKSBcCi0JdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCi0KLSNkZWZpbmUgZ2VuZXJpY19fX3Rlc3RfYW5kX3NldF9sZV9iaXQobnIsIGFkZHIpIFwKLQlfX3Rlc3RfYW5kX3NldF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKLSNkZWZpbmUgZ2VuZXJpY19fX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgXAotCV9fdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCitleHRlcm4gdW5zaWduZWQgbG9uZyBmaW5kX25leHRfemVyb19iaXRfbGUoY29uc3Qgdm9pZCAqYWRkciwKIAkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBnZW5lcmljX2ZpbmRfbmV4dF9sZV9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF9iaXRfbGUoY29uc3Qgdm9pZCAqYWRkciwKIAkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdF9sZShhZGRyLCBzaXplKSBcCisJZmluZF9uZXh0X3plcm9fYml0X2xlKChhZGRyKSwgKHNpemUpLCAwKQorCiAjZWxzZQogI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgogI2VuZGlmCiAKLSNkZWZpbmUgZ2VuZXJpY19maW5kX2ZpcnN0X3plcm9fbGVfYml0KGFkZHIsIHNpemUpIFwKLSAgICAgICAgZ2VuZXJpY19maW5kX25leHRfemVyb19sZV9iaXQoKGFkZHIpLCAoc2l6ZSksIDApCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2JpdF9sZShpbnQgbnIsIGNvbnN0IHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYml0KG5yIF4gQklUT1BfTEVfU1dJWlpMRSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCV9fc2V0X2JpdChuciBeIEJJVE9QX0xFX1NXSVpaTEUsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCV9fY2xlYXJfYml0KG5yIF4gQklUT1BfTEVfU1dJWlpMRSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KG5yIF4gQklUT1BfTEVfU1dJWlpMRSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdF9sZShpbnQgbnIsIHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChuciBeIEJJVE9QX0xFX1NXSVpaTEUsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX3NldF9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCXJldHVybiBfX3Rlc3RfYW5kX3NldF9iaXQobnIgXiBCSVRPUF9MRV9TV0laWkxFLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUoaW50IG5yLCB2b2lkICphZGRyKQoreworCXJldHVybiBfX3Rlc3RfYW5kX2NsZWFyX2JpdChuciBeIEJJVE9QX0xFX1NXSVpaTEUsIGFkZHIpOworfQogCiAjZW5kaWYgLyogX0FTTV9HRU5FUklDX0JJVE9QU19MRV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvbWluaXgtbGUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL21pbml4LWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhOTgxYzEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvbWluaXgtbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9HRU5FUklDX0JJVE9QU19NSU5JWF9MRV9IXwotI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX01JTklYX0xFX0hfCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KLQotI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLGFkZHIpCVwKLQlnZW5lcmljX19fdGVzdF9hbmRfc2V0X2xlX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpCQlcCi0JZ2VuZXJpY19fX3NldF9sZV9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKLSNkZWZpbmUgbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KG5yLGFkZHIpIFwKLQlnZW5lcmljX19fdGVzdF9hbmRfY2xlYXJfbGVfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCi0jZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpCQlcCi0JZ2VuZXJpY190ZXN0X2xlX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotI2RlZmluZSBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgXAotCWdlbmVyaWNfZmluZF9maXJzdF96ZXJvX2xlX2JpdCgodW5zaWduZWQgbG9uZyAqKShhZGRyKSwoc2l6ZSkpCi0KLSNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfQklUT1BTX01JTklYX0xFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmNDJlOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX01JTklYX0hfCi0jZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfTUlOSVhfSF8KLQotI2RlZmluZSBtaW5peF90ZXN0X2FuZF9zZXRfYml0KG5yLGFkZHIpCVwKLQlfX3Rlc3RfYW5kX3NldF9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKLSNkZWZpbmUgbWluaXhfc2V0X2JpdChucixhZGRyKQkJXAotCV9fc2V0X2JpdCgobnIpLCh1bnNpZ25lZCBsb25nICopKGFkZHIpKQotI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsYWRkcikgXAotCV9fdGVzdF9hbmRfY2xlYXJfYml0KChuciksKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCi0jZGVmaW5lIG1pbml4X3Rlc3RfYml0KG5yLGFkZHIpCQlcCi0JdGVzdF9iaXQoKG5yKSwodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKLSNkZWZpbmUgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLHNpemUpIFwKLQlmaW5kX2ZpcnN0X3plcm9fYml0KCh1bnNpZ25lZCBsb25nICopKGFkZHIpLChzaXplKSkKLQotI2VuZGlmIC8qIF9BU01fR0VORVJJQ19CSVRPUFNfTUlOSVhfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdHlwZXMuaAppbmRleCBmYmE3ZDMzLi43YTBmNjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90eXBlcy5oCkBAIC0xMiwzMSArMTIsNCBAQAogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKLS8qCi0gKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcwotICovCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLS8qCi0gKiBETUEgYWRkcmVzc2VzIG1heSBiZSB2ZXJ5IGRpZmZlcmVudCBmcm9tIHBoeXNpY2FsIGFkZHJlc3NlcwotICogYW5kIHBvaW50ZXJzLiBpMzg2IGFuZCBwb3dlcnBjIG1heSBoYXZlIDY0IGJpdCBETUEgb24gMzIgYml0Ci0gKiBzeXN0ZW1zLCB3aGlsZSBzcGFyYzY0IHVzZXMgMzIgYml0IERNQSBhZGRyZXNzZXMgZm9yIDY0IGJpdAotICogcGh5c2ljYWwgYWRkcmVzc2VzLgotICogVGhpcyBkZWZhdWx0IGRlZmluZXMgZG1hX2FkZHJfdCB0byBoYXZlIHRoZSBzYW1lIHNpemUgYXMKLSAqIHBoeXNfYWRkcl90LCB3aGljaCBpcyB0aGUgbW9zdCBjb21tb24gd2F5LgotICogRG8gbm90IGRlZmluZSB0aGUgZG1hNjRfYWRkcl90IHR5cGUsIHdoaWNoIG5ldmVyIHJlYWxseQotICogd29ya2VkLgotICovCi0jaWZuZGVmIGRtYV9hZGRyX3QKLSNpZmRlZiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQKLXR5cGVkZWYgdTY0IGRtYV9hZGRyX3Q7Ci0jZWxzZQotdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKLSNlbmRpZiAvKiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgKi8KLSNlbmRpZiAvKiBkbWFfYWRkcl90ICovCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2VuZGlmIC8qIF9BU01fR0VORVJJQ19UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaAppbmRleCA1N2FmMDMzLi4wN2M0MGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmgKQEAgLTY1MCw5ICs2NTAsMTMgQEAKIF9fU1lTQ0FMTChfX05SX25hbWVfdG9faGFuZGxlX2F0LCBzeXNfbmFtZV90b19oYW5kbGVfYXQpCiAjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJCTI2NQogX19TWVNDQUxMKF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQsIHN5c19vcGVuX2J5X2hhbmRsZV9hdCkKKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lIDI2NgorX19TWVNDQUxMKF9fTlJfY2xvY2tfYWRqdGltZSwgc3lzX2Nsb2NrX2FkanRpbWUpCisjZGVmaW5lIF9fTlJfc3luY2ZzIDI2NworX19TWVNDQUxMKF9fTlJfc3luY2ZzLCBzeXNfc3luY2ZzKQogCiAjdW5kZWYgX19OUl9zeXNjYWxscwotI2RlZmluZSBfX05SX3N5c2NhbGxzIDI2NgorI2RlZmluZSBfX05SX3N5c2NhbGxzIDI2OAogCiAvKgogICogQWxsIHN5c2NhbGxzIGJlbG93IGhlcmUgc2hvdWxkIGdvIGF3YXkgcmVhbGx5LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91c2VyLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VzZXIuaAppbmRleCA4YjljM2M5Li4zNTYzOGMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3VzZXIuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VzZXIuaApAQCAtMSw4ICsxLDggQEAKICNpZm5kZWYgX19BU01fR0VORVJJQ19VU0VSX0gKICNkZWZpbmUgX19BU01fR0VORVJJQ19VU0VSX0gKIC8qCi0gKiBUaGlzIGZpbGUgbWF5IGRlZmluZSBhICdzdHJ1Y3QgdXNlcicgc3RydWN0dXJlLiBIb3dldmVyLCBpdCBpdCBvbmx5Ci0gKiB1c2VkIGZvciBhLm91dCBmaWxlLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBvbiBuZXcgYXJjaGl0ZWN0dXJlcy4KKyAqIFRoaXMgZmlsZSBtYXkgZGVmaW5lIGEgJ3N0cnVjdCB1c2VyJyBzdHJ1Y3R1cmUuIEhvd2V2ZXIsIGl0IGlzIG9ubHkKKyAqIHVzZWQgZm9yIGEub3V0IGZpbGVzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBvbiBuZXcgYXJjaGl0ZWN0dXJlcy4KICAqLwogCiAjZW5kaWYJLyogX19BU01fR0VORVJJQ19VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCmluZGV4IDRhM2Q1MmUuLjVmZmM2ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaApAQCAtMzIsNiArMzIsMTMgQEAKIAlCQUNLTElHSFRfVVBEQVRFX1NZU0ZTLAogfTsKIAorZW51bSBiYWNrbGlnaHRfdHlwZSB7CisJQkFDS0xJR0hUX1JBVyA9IDEsCisJQkFDS0xJR0hUX1BMQVRGT1JNLAorCUJBQ0tMSUdIVF9GSVJNV0FSRSwKKwlCQUNLTElHSFRfVFlQRV9NQVgsCit9OworCiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZTsKIHN0cnVjdCBmYl9pbmZvOwogCkBAIC02Miw2ICs2OSw4IEBACiAJLyogRkIgQmxhbmtpbmcgYWN0aXZlPyAodmFsdWVzIGFzIGZvciBwb3dlcikgKi8KIAkvKiBEdWUgdG8gYmUgcmVtb3ZlZCwgcGxlYXNlIHVzZSAoc3RhdGUgJiBCTF9DT1JFX0ZCQkxBTkspICovCiAJaW50IGZiX2JsYW5rOworCS8qIEJhY2tsaWdodCB0eXBlICovCisJZW51bSBiYWNrbGlnaHRfdHlwZSB0eXBlOwogCS8qIEZsYWdzIHVzZWQgdG8gc2lnbmFsIGRyaXZlcnMgb2Ygc3RhdGUgY2hhbmdlcyAqLwogCS8qIFVwcGVyIDQgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGRyaXZlciBpbnRlcm5hbCB1c2UgKi8KIAl1bnNpZ25lZCBpbnQgc3RhdGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IDQ5OWRmZTkuLmI4NjEzZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC0xOSwxMCArMTksNiBAQAogICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuOwogCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX21heF9wZm47Ci0jZW5kaWYKLQogI2lmbmRlZiBDT05GSUdfTk9fQk9PVE1FTQogLyoKICAqIG5vZGVfYm9vdG1lbV9tYXAgaXMgYSBtYXAgcG9pbnRlciAtIHRoZSBiaXRzIHJlcHJlc2VudCBhbGwgcGh5c2ljYWwgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCmluZGV4IGZiMTZhMzYuLjE2ZWU4YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCkBAIC0zNjgsNiArMzY4LDE1IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKK3N0cnVjdCBkZW50cnk7CitzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7CisKK3N0cnVjdCB1c2VyX25hbWVzcGFjZSAqY3VycmVudF91c2VyX25zKHZvaWQpOworCitleHRlcm4gY29uc3Qga2VybmVsX2NhcF90IF9fY2FwX2VtcHR5X3NldDsKK2V4dGVybiBjb25zdCBrZXJuZWxfY2FwX3QgX19jYXBfZnVsbF9zZXQ7CitleHRlcm4gY29uc3Qga2VybmVsX2NhcF90IF9fY2FwX2luaXRfZWZmX3NldDsKKwogLyoKICAqIEludGVybmFsIGtlcm5lbCBmdW5jdGlvbnMgb25seQogICovCkBAIC01MzAsNDAgKzUzOSwyNyBAQAogCQkJICAgY2FwX2ludGVyc2VjdChwZXJtaXR0ZWQsIF9fY2FwX25mc2Rfc2V0KSk7CiB9CiAKLWV4dGVybiBjb25zdCBrZXJuZWxfY2FwX3QgX19jYXBfZW1wdHlfc2V0OwotZXh0ZXJuIGNvbnN0IGtlcm5lbF9jYXBfdCBfX2NhcF9mdWxsX3NldDsKLWV4dGVybiBjb25zdCBrZXJuZWxfY2FwX3QgX19jYXBfaW5pdF9lZmZfc2V0OworZXh0ZXJuIGJvb2wgaGFzX2NhcGFiaWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKTsKK2V4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKKwkJCSAgICAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApOworZXh0ZXJuIGJvb2wgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApOworZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTsKK2V4dGVybiBib29sIG5zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7CitleHRlcm4gYm9vbCB0YXNrX25zX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKTsKIAogLyoqCi0gKiBoYXNfY2FwYWJpbGl0eSAtIERldGVybWluZSBpZiBhIHRhc2sgaGFzIGEgc3VwZXJpb3IgY2FwYWJpbGl0eSBhdmFpbGFibGUKLSAqIEB0OiBUaGUgdGFzayBpbiBxdWVzdGlvbgotICogQGNhcDogVGhlIGNhcGFiaWxpdHkgdG8gYmUgdGVzdGVkIGZvcgorICogbnNvd25fY2FwYWJsZSAtIENoZWNrIHN1cGVyaW9yIGNhcGFiaWxpdHkgdG8gb25lJ3Mgb3duIHVzZXJfbnMKKyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IGluIHF1ZXN0aW9uCiAgKgotICogUmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCB0YXNrIGhhcyB0aGUgZ2l2ZW4gc3VwZXJpb3IgY2FwYWJpbGl0eQotICogY3VycmVudGx5IGluIGVmZmVjdCwgZmFsc2UgaWYgbm90LgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHNldCBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2suCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyB0aGUgZ2l2ZW4gc3VwZXJpb3IgY2FwYWJpbGl0eQorICogdGFyZ2V0ZWQgYXQgaXRzIG93biB1c2VyIG5hbWVzcGFjZS4KICAqLwotI2RlZmluZSBoYXNfY2FwYWJpbGl0eSh0LCBjYXApIChzZWN1cml0eV9yZWFsX2NhcGFibGUoKHQpLCAoY2FwKSkgPT0gMCkKLQotLyoqCi0gKiBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIGEgdGFzayBoYXMgYSBzdXBlcmlvciBjYXBhYmlsaXR5IGF2YWlsYWJsZSAodW5hdWRpdGVkKQotICogQHQ6IFRoZSB0YXNrIGluIHF1ZXN0aW9uCi0gKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSB0byBiZSB0ZXN0ZWQgZm9yCi0gKgotICogUmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCB0YXNrIGhhcyB0aGUgZ2l2ZW4gc3VwZXJpb3IgY2FwYWJpbGl0eQotICogY3VycmVudGx5IGluIGVmZmVjdCwgZmFsc2UgaWYgbm90LCBidXQgZG9uJ3Qgd3JpdGUgYW4gYXVkaXQgbWVzc2FnZSBmb3IgdGhlCi0gKiBjaGVjay4KLSAqCi0gKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBzZXQgUEZfU1VQRVJQUklWIG9uIHRoZSB0YXNrLgotICovCi0jZGVmaW5lIGhhc19jYXBhYmlsaXR5X25vYXVkaXQodCwgY2FwKSBcCi0JKHNlY3VyaXR5X3JlYWxfY2FwYWJsZV9ub2F1ZGl0KCh0KSwgKGNhcCkpID09IDApCi0KLWV4dGVybiBpbnQgY2FwYWJsZShpbnQgY2FwKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBuc293bl9jYXBhYmxlKGludCBjYXApCit7CisJcmV0dXJuIG5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIGNhcCk7Cit9CiAKIC8qIGF1ZGl0IHN5c3RlbSB3YW50cyB0byBnZXQgY2FwIGluZm8gZnJvbSBmaWxlcyBhcyB3ZWxsICovCi1zdHJ1Y3QgZGVudHJ5OwogZXh0ZXJuIGludCBnZXRfdmZzX2NhcHNfZnJvbV9kaXNrKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGNwdV92ZnNfY2FwX2RhdGEgKmNwdV9jYXBzKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2VwaC9jZXBoX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NlcGgvY2VwaF9mcy5oCmluZGV4IDA5ZGNjMGMuLmI4ZTk5NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2VwaC9jZXBoX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZXBoL2NlcGhfZnMuaApAQCAtMTM2LDkgKzEzNiwxOCBAQAogCiAKIC8qIG9zZCAqLwotI2RlZmluZSBDRVBIX01TR19PU0RfTUFQICAgICAgICAgIDQxCi0jZGVmaW5lIENFUEhfTVNHX09TRF9PUCAgICAgICAgICAgNDIKLSNkZWZpbmUgQ0VQSF9NU0dfT1NEX09QUkVQTFkgICAgICA0MworI2RlZmluZSBDRVBIX01TR19PU0RfTUFQICAgICAgICAgICAgICAgIDQxCisjZGVmaW5lIENFUEhfTVNHX09TRF9PUCAgICAgICAgICAgICAgICAgNDIKKyNkZWZpbmUgQ0VQSF9NU0dfT1NEX09QUkVQTFkgICAgICAgICAgICA0MworI2RlZmluZSBDRVBIX01TR19XQVRDSF9OT1RJRlkgICAgICAgICAgIDQ0CisKKworLyogd2F0Y2gtbm90aWZ5IG9wZXJhdGlvbnMgKi8KK2VudW0geworICBXQVRDSF9OT1RJRlkJCQkJPSAxLCAvKiBub3RpZnlpbmcgd2F0Y2hlciAqLworICBXQVRDSF9OT1RJRllfQ09NUExFVEUJCQk9IDIsIC8qIG5vdGlmaWVyIG5vdGlmaWVkIHdoZW4gZG9uZSAqLworfTsKKwogCiAvKiBwb29sIG9wZXJhdGlvbnMgKi8KIGVudW0gewpAQCAtMjEzLDggKzIyMiwxMCBAQAogCXN0cnVjdCBjZXBoX21vbl9yZXF1ZXN0X2hlYWRlciBtb25oZHI7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBDRVBIX1NVQlNDUklCRV9PTkVUSU1FICAgIDEgIC8qIGkgd2FudCBvbmx5IDEgdXBkYXRlIGFmdGVyIGhhdmUgKi8KKwogc3RydWN0IGNlcGhfbW9uX3N1YnNjcmliZV9pdGVtIHsKLQlfX2xlNjQgaGF2ZV92ZXJzaW9uOwlfX2xlNjQgaGF2ZTsKKwlfX2xlNjQgaGF2ZV92ZXJzaW9uOyAgICBfX2xlNjQgaGF2ZTsKIAlfX3U4IG9uZXRpbWU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZXBoL2xpYmNlcGguaCBiL2luY2x1ZGUvbGludXgvY2VwaC9saWJjZXBoLmgKaW5kZXggNzJjNzJiZi4uMGQyZTBmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZXBoL2xpYmNlcGguaAorKysgYi9pbmNsdWRlL2xpbnV4L2NlcGgvbGliY2VwaC5oCkBAIC03MSw3ICs3MSw2IEBACiAjZGVmaW5lIENFUEhfT1NEX1RJTUVPVVRfREVGQVVMVCAgICA2MCAgLyogc2Vjb25kcyAqLwogI2RlZmluZSBDRVBIX09TRF9LRUVQQUxJVkVfREVGQVVMVCAgNQogI2RlZmluZSBDRVBIX09TRF9JRExFX1RUTF9ERUZBVUxUICAgIDYwCi0jZGVmaW5lIENFUEhfTU9VTlRfUlNJWkVfREVGQVVMVCAgICAoNTEyKjEwMjQpIC8qIHJlYWRhaGVhZCAqLwogCiAjZGVmaW5lIENFUEhfTVNHX01BWF9GUk9OVF9MRU4JKDE2KjEwMjQqMTAyNCkKICNkZWZpbmUgQ0VQSF9NU0dfTUFYX0RBVEFfTEVOCSgxNioxMDI0KjEwMjQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NlcGgvb3NkX2NsaWVudC5oIGIvaW5jbHVkZS9saW51eC9jZXBoL29zZF9jbGllbnQuaAppbmRleCBhMWFmMjk2Li5mODhlYWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NlcGgvb3NkX2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvY2VwaC9vc2RfY2xpZW50LmgKQEAgLTMyLDYgKzMyLDcgQEAKIAlzdHJ1Y3QgcmJfbm9kZSBvX25vZGU7CiAJc3RydWN0IGNlcGhfY29ubmVjdGlvbiBvX2NvbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG9fcmVxdWVzdHM7CisJc3RydWN0IGxpc3RfaGVhZCBvX2xpbmdlcl9yZXF1ZXN0czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG9fb3NkX2xydTsKIAlzdHJ1Y3QgY2VwaF9hdXRob3JpemVyICpvX2F1dGhvcml6ZXI7CiAJdm9pZCAqb19hdXRob3JpemVyX2J1ZiwgKm9fYXV0aG9yaXplcl9yZXBseV9idWY7CkBAIC00Nyw2ICs0OCw4IEBACiAJc3RydWN0IHJiX25vZGUgIHJfbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJfcmVxX2xydV9pdGVtOwogCXN0cnVjdCBsaXN0X2hlYWQgcl9vc2RfaXRlbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJfbGluZ2VyX2l0ZW07CisJc3RydWN0IGxpc3RfaGVhZCByX2xpbmdlcl9vc2Q7CiAJc3RydWN0IGNlcGhfb3NkICpyX29zZDsKIAlzdHJ1Y3QgY2VwaF9wZyAgIHJfcGdpZDsKIAlpbnQgICAgICAgICAgICAgIHJfcGdfb3Nkc1tDRVBIX1BHX01BWF9TSVpFXTsKQEAgLTU5LDYgKzYyLDcgQEAKIAlpbnQgICAgICAgICAgICAgICByX2ZsYWdzOyAgICAgLyogYW55IGFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRoZSBvc2QgKi8KIAl1MzIgICAgICAgICAgICAgICByX3NlbnQ7ICAgICAgLyogPjAgaWYgcl9yZXF1ZXN0IGlzIHNlbmRpbmcvc2VudCAqLwogCWludCAgICAgICAgICAgICAgIHJfZ290X3JlcGx5OworCWludAkJICByX2xpbmdlcjsKIAogCXN0cnVjdCBjZXBoX29zZF9jbGllbnQgKnJfb3NkYzsKIAlzdHJ1Y3Qga3JlZiAgICAgICByX2tyZWY7CkBAIC03NCw3ICs3OCw2IEBACiAJY2hhciAgICAgICAgICAgICAgcl9vaWRbNDBdOyAgICAgICAgICAvKiBvYmplY3QgbmFtZSAqLwogCWludCAgICAgICAgICAgICAgIHJfb2lkX2xlbjsKIAl1bnNpZ25lZCBsb25nICAgICByX3N0YW1wOyAgICAgICAgICAgIC8qIHNlbmQgT1IgY2hlY2sgdGltZSAqLwotCWJvb2wgICAgICAgICAgICAgIHJfcmVzZW5kOyAgICAgICAgICAgLyogbXNnIHNlbmQgZmFpbGVkLCBuZWVkcyByZXRyeSAqLwogCiAJc3RydWN0IGNlcGhfZmlsZV9sYXlvdXQgcl9maWxlX2xheW91dDsKIAlzdHJ1Y3QgY2VwaF9zbmFwX2NvbnRleHQgKnJfc25hcGM7ICAgIC8qIHNuYXAgY29udGV4dCBmb3Igd3JpdGVzICovCkBAIC05MCw2ICs5MywyNiBAQAogCXN0cnVjdCBjZXBoX3BhZ2VsaXN0ICpyX3RyYWlsOwkgICAgICAvKiB0cmFpbGluZyBwYXJ0IG9mIHRoZSBkYXRhICovCiB9OwogCitzdHJ1Y3QgY2VwaF9vc2RfZXZlbnQgeworCXU2NCBjb29raWU7CisJaW50IG9uZV9zaG90OworCXN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGM7CisJdm9pZCAoKmNiKSh1NjQsIHU2NCwgdTgsIHZvaWQgKik7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOworCXN0cnVjdCBsaXN0X2hlYWQgb3NkX25vZGU7CisJc3RydWN0IGtyZWYga3JlZjsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOworfTsKKworc3RydWN0IGNlcGhfb3NkX2V2ZW50X3dvcmsgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBjZXBoX29zZF9ldmVudCAqZXZlbnQ7CisgICAgICAgIHU2NCB2ZXI7CisgICAgICAgIHU2NCBub3RpZnlfaWQ7CisgICAgICAgIHU4IG9wY29kZTsKK307CisKIHN0cnVjdCBjZXBoX29zZF9jbGllbnQgewogCXN0cnVjdCBjZXBoX2NsaWVudCAgICAgKmNsaWVudDsKIApAQCAtMTA0LDcgKzEyNywxMCBAQAogCXU2NCAgICAgICAgICAgICAgICAgICAgdGltZW91dF90aWQ7ICAgLyogdGlkIG9mIHRpbWVvdXQgdHJpZ2dlcmluZyBycSAqLwogCXU2NCAgICAgICAgICAgICAgICAgICAgbGFzdF90aWQ7ICAgICAgLyogdGlkIG9mIGxhc3QgcmVxdWVzdCAqLwogCXN0cnVjdCByYl9yb290ICAgICAgICAgcmVxdWVzdHM7ICAgICAgLyogcGVuZGluZyByZXF1ZXN0cyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgcmVxX2xydTsJICAgICAgLyogcGVuZGluZyByZXF1ZXN0cyBscnUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIHJlcV9scnU7CSAgICAgIC8qIGluLWZsaWdodCBscnUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIHJlcV91bnNlbnQ7ICAgIC8qIHVuc2VudC9uZWVkLXJlc2VuZCBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgcmVxX25vdGFyZ2V0OyAgLyogbWFwIHRvIG5vIG9zZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgcmVxX2xpbmdlcjsgICAgLyogbGluZ2VyaW5nIHJlcXVlc3RzICovCiAJaW50ICAgICAgICAgICAgICAgICAgICBudW1fcmVxdWVzdHM7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAgICB0aW1lb3V0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAgICBvc2RzX3RpbWVvdXRfd29yazsKQEAgLTExNiw2ICsxNDIsMTIgQEAKIAogCXN0cnVjdCBjZXBoX21zZ3Bvb2wJbXNncG9vbF9vcDsKIAlzdHJ1Y3QgY2VwaF9tc2dwb29sCW1zZ3Bvb2xfb3BfcmVwbHk7CisKKwlzcGlubG9ja190CQlldmVudF9sb2NrOworCXN0cnVjdCByYl9yb290CQlldmVudF90cmVlOworCXU2NAkJCWV2ZW50X2NvdW50OworCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKm5vdGlmeV93cTsKIH07CiAKIHN0cnVjdCBjZXBoX29zZF9yZXFfb3AgewpAQCAtMTUwLDYgKzE4MiwxMyBAQAogCSAgICAgICAgc3RydWN0IHsKIAkJICAgICAgICB1NjQgc25hcGlkOwogCSAgICAgICAgfSBzbmFwOworCQlzdHJ1Y3QgeworCQkJdTY0IGNvb2tpZTsKKwkJCXU2NCB2ZXI7CisJCQlfX3U4IGZsYWc7CisJCQl1MzIgcHJvdF92ZXI7CisJCQl1MzIgdGltZW91dDsKKwkJfSB3YXRjaDsKIAl9OwogCXUzMiBwYXlsb2FkX2xlbjsKIH07CkBAIC0xOTgsNiArMjM3LDExIEBACiAJCQkJICAgICAgYm9vbCB1c2VfbWVtcG9vbCwgaW50IG51bV9yZXBseSwKIAkJCQkgICAgICBpbnQgcGFnZV9hbGlnbik7CiAKK2V4dGVybiB2b2lkIGNlcGhfb3NkY19zZXRfcmVxdWVzdF9saW5nZXIoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCQkJIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIHZvaWQgY2VwaF9vc2RjX3VucmVnaXN0ZXJfbGluZ2VyX3JlcXVlc3Qoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCQkJCXN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9vc2RjX2dldF9yZXF1ZXN0KHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpCiB7CiAJa3JlZl9nZXQoJnJlcS0+cl9rcmVmKTsKQEAgLTIzMyw1ICsyNzcsMTQgQEAKIAkJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsCiAJCQkJaW50IGZsYWdzLCBpbnQgZG9fc3luYywgYm9vbCBub2ZhaWwpOwogCisvKiB3YXRjaC9ub3RpZnkgZXZlbnRzICovCitleHRlcm4gaW50IGNlcGhfb3NkY19jcmVhdGVfZXZlbnQoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCQkgIHZvaWQgKCpldmVudF9jYikodTY0LCB1NjQsIHU4LCB2b2lkICopLAorCQkJCSAgaW50IG9uZV9zaG90LCB2b2lkICpkYXRhLAorCQkJCSAgc3RydWN0IGNlcGhfb3NkX2V2ZW50ICoqcGV2ZW50KTsKK2V4dGVybiB2b2lkIGNlcGhfb3NkY19jYW5jZWxfZXZlbnQoc3RydWN0IGNlcGhfb3NkX2V2ZW50ICpldmVudCk7CitleHRlcm4gaW50IGNlcGhfb3NkY193YWl0X2V2ZW50KHN0cnVjdCBjZXBoX29zZF9ldmVudCAqZXZlbnQsCisJCQkJdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiB2b2lkIGNlcGhfb3NkY19wdXRfZXZlbnQoc3RydWN0IGNlcGhfb3NkX2V2ZW50ICpldmVudCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZXBoL3JhZG9zLmggYi9pbmNsdWRlL2xpbnV4L2NlcGgvcmFkb3MuaAppbmRleCA2ZDUyNDdmLi4wYTk5MDk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NlcGgvcmFkb3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NlcGgvcmFkb3MuaApAQCAtMTIsOSArMTIsOSBAQAogICogb3NkbWFwIGVuY29kaW5nIHZlcnNpb25zCiAgKi8KICNkZWZpbmUgQ0VQSF9PU0RNQVBfSU5DX1ZFUlNJT04gICAgIDUKLSNkZWZpbmUgQ0VQSF9PU0RNQVBfSU5DX1ZFUlNJT05fRVhUIDUKKyNkZWZpbmUgQ0VQSF9PU0RNQVBfSU5DX1ZFUlNJT05fRVhUIDYKICNkZWZpbmUgQ0VQSF9PU0RNQVBfVkVSU0lPTiAgICAgICAgIDUKLSNkZWZpbmUgQ0VQSF9PU0RNQVBfVkVSU0lPTl9FWFQgICAgIDUKKyNkZWZpbmUgQ0VQSF9PU0RNQVBfVkVSU0lPTl9FWFQgICAgIDYKIAogLyoKICAqIGZzIGlkCkBAIC0xODEsOSArMTgxLDE3IEBACiAJLyogcmVhZCAqLwogCUNFUEhfT1NEX09QX1JFQUQgICAgICA9IENFUEhfT1NEX09QX01PREVfUkQgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCAxLAogCUNFUEhfT1NEX09QX1NUQVQgICAgICA9IENFUEhfT1NEX09QX01PREVfUkQgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCAyLAorCUNFUEhfT1NEX09QX01BUEVYVCAgICA9IENFUEhfT1NEX09QX01PREVfUkQgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCAzLAogCiAJLyogZmFuY3kgcmVhZCAqLwotCUNFUEhfT1NEX09QX01BU0tUUlVOQyA9IENFUEhfT1NEX09QX01PREVfUkQgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCA0LAorCUNFUEhfT1NEX09QX01BU0tUUlVOQyAgID0gQ0VQSF9PU0RfT1BfTU9ERV9SRCB8IENFUEhfT1NEX09QX1RZUEVfREFUQSB8IDQsCisJQ0VQSF9PU0RfT1BfU1BBUlNFX1JFQUQgPSBDRVBIX09TRF9PUF9NT0RFX1JEIHwgQ0VQSF9PU0RfT1BfVFlQRV9EQVRBIHwgNSwKKworCUNFUEhfT1NEX09QX05PVElGWSAgICA9IENFUEhfT1NEX09QX01PREVfUkQgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCA2LAorCUNFUEhfT1NEX09QX05PVElGWV9BQ0sgPSBDRVBIX09TRF9PUF9NT0RFX1JEIHwgQ0VQSF9PU0RfT1BfVFlQRV9EQVRBIHwgNywKKworCS8qIHZlcnNpb25pbmcgKi8KKwlDRVBIX09TRF9PUF9BU1NFUlRfVkVSID0gQ0VQSF9PU0RfT1BfTU9ERV9SRCB8IENFUEhfT1NEX09QX1RZUEVfREFUQSB8IDgsCiAKIAkvKiB3cml0ZSAqLwogCUNFUEhfT1NEX09QX1dSSVRFICAgICA9IENFUEhfT1NEX09QX01PREVfV1IgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCAxLApAQCAtMjA1LDYgKzIxMyw4IEBACiAJQ0VQSF9PU0RfT1BfQ1JFQVRFICA9IENFUEhfT1NEX09QX01PREVfV1IgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCAxMywKIAlDRVBIX09TRF9PUF9ST0xMQkFDSz0gQ0VQSF9PU0RfT1BfTU9ERV9XUiB8IENFUEhfT1NEX09QX1RZUEVfREFUQSB8IDE0LAogCisJQ0VQSF9PU0RfT1BfV0FUQ0ggICA9IENFUEhfT1NEX09QX01PREVfV1IgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCAxNSwKKwogCS8qKiBhdHRycyAqKi8KIAkvKiByZWFkICovCiAJQ0VQSF9PU0RfT1BfR0VUWEFUVFIgID0gQ0VQSF9PU0RfT1BfTU9ERV9SRCB8IENFUEhfT1NEX09QX1RZUEVfQVRUUiB8IDEsCkBAIC0yMTgsMTEgKzIyOCwxNCBAQAogCUNFUEhfT1NEX09QX1JNWEFUVFIgICA9IENFUEhfT1NEX09QX01PREVfV1IgfCBDRVBIX09TRF9PUF9UWVBFX0FUVFIgfCA0LAogCiAJLyoqIHN1Ym9wICoqLwotCUNFUEhfT1NEX09QX1BVTEwgICAgICAgICAgID0gQ0VQSF9PU0RfT1BfTU9ERV9TVUIgfCAxLAotCUNFUEhfT1NEX09QX1BVU0ggICAgICAgICAgID0gQ0VQSF9PU0RfT1BfTU9ERV9TVUIgfCAyLAotCUNFUEhfT1NEX09QX0JBTEFOQ0VSRUFEUyAgID0gQ0VQSF9PU0RfT1BfTU9ERV9TVUIgfCAzLAotCUNFUEhfT1NEX09QX1VOQkFMQU5DRVJFQURTID0gQ0VQSF9PU0RfT1BfTU9ERV9TVUIgfCA0LAotCUNFUEhfT1NEX09QX1NDUlVCICAgICAgICAgID0gQ0VQSF9PU0RfT1BfTU9ERV9TVUIgfCA1LAorCUNFUEhfT1NEX09QX1BVTEwgICAgICAgICAgICA9IENFUEhfT1NEX09QX01PREVfU1VCIHwgMSwKKwlDRVBIX09TRF9PUF9QVVNIICAgICAgICAgICAgPSBDRVBIX09TRF9PUF9NT0RFX1NVQiB8IDIsCisJQ0VQSF9PU0RfT1BfQkFMQU5DRVJFQURTICAgID0gQ0VQSF9PU0RfT1BfTU9ERV9TVUIgfCAzLAorCUNFUEhfT1NEX09QX1VOQkFMQU5DRVJFQURTICA9IENFUEhfT1NEX09QX01PREVfU1VCIHwgNCwKKwlDRVBIX09TRF9PUF9TQ1JVQiAgICAgICAgICAgPSBDRVBIX09TRF9PUF9NT0RFX1NVQiB8IDUsCisJQ0VQSF9PU0RfT1BfU0NSVUJfUkVTRVJWRSAgID0gQ0VQSF9PU0RfT1BfTU9ERV9TVUIgfCA2LAorCUNFUEhfT1NEX09QX1NDUlVCX1VOUkVTRVJWRSA9IENFUEhfT1NEX09QX01PREVfU1VCIHwgNywKKwlDRVBIX09TRF9PUF9TQ1JVQl9TVE9QICAgICAgPSBDRVBIX09TRF9PUF9NT0RFX1NVQiB8IDgsCiAKIAkvKiogbG9jayAqKi8KIAlDRVBIX09TRF9PUF9XUkxPQ0sgICAgPSBDRVBIX09TRF9PUF9NT0RFX1dSIHwgQ0VQSF9PU0RfT1BfVFlQRV9MT0NLIHwgMSwKQEAgLTMyOCw2ICszNDEsOCBAQAogCUNFUEhfT1NEX0NNUFhBVFRSX01PREVfVTY0ICAgID0gMgogfTsKIAorI2RlZmluZSBSQURPU19OT1RJRllfVkVSCTEKKwogLyoKICAqIGFuIGluZGl2aWR1YWwgb2JqZWN0IG9wZXJhdGlvbi4gIGVhY2ggbWF5IGJlIGFjY29tcGFuaWVkIGJ5IHNvbWUgZGF0YQogICogcGF5bG9hZApAQCAtMzU5LDcgKzM3NCwxMiBAQAogCSAgICAgICAgc3RydWN0IHsKIAkJICAgICAgICBfX2xlNjQgc25hcGlkOwogCSAgICAgICAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc25hcDsKLQl9OworCQlzdHJ1Y3QgeworCQkJX19sZTY0IGNvb2tpZTsKKwkJCV9fbGU2NCB2ZXI7CisJCQlfX3U4IGZsYWc7CS8qIDAgPSB1bndhdGNoLCAxID0gd2F0Y2ggKi8KKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2F0Y2g7Cit9OwogCV9fbGUzMiBwYXlsb2FkX2xlbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC00MDIsNCArNDIyLDUgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCmluZGV4IGRmYTJlZDQuLmNjOWY3YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCkBAIC0xMSw5ICsxMSw2IEBACiAvKiBUaGUgZnVsbCB6b25lIHdhcyBjb21wYWN0ZWQgKi8KICNkZWZpbmUgQ09NUEFDVF9DT01QTEVURQkzCiAKLSNkZWZpbmUgQ09NUEFDVF9NT0RFX0RJUkVDVF9SRUNMQUlNCTAKLSNkZWZpbmUgQ09NUEFDVF9NT0RFX0tTV0FQRAkJMQotCiAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT04KIGV4dGVybiBpbnQgc3lzY3RsX2NvbXBhY3RfbWVtb3J5OwogZXh0ZXJuIGludCBzeXNjdGxfY29tcGFjdGlvbl9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCkBAIC0yOCw4ICsyNSw3IEBACiAJCQlib29sIHN5bmMpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAotCQkJCQlnZnBfdCBnZnBfbWFzaywgYm9vbCBzeW5jLAotCQkJCQlpbnQgY29tcGFjdF9tb2RlKTsKKwkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgc3luYyk7CiAKIC8qIERvIG5vdCBza2lwIGNvbXBhY3Rpb24gbW9yZSB0aGFuIDY0IHRpbWVzICovCiAjZGVmaW5lIENPTVBBQ1RfTUFYX0RFRkVSX1NISUZUIDYKQEAgLTc0LDggKzcwLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAotCQkJCQkgICAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgc3luYywKLQkJCQkJICAgICAgIGludCBjb21wYWN0X21vZGUpCisJCQkJCSAgICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBzeW5jKQogewogCXJldHVybiBDT01QQUNUX0NPTlRJTlVFOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKaW5kZXggMTY1MDhiYy4uY2I0YzFlYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaApAQCAtOTIsMyArOTIsMTEgQEAKICNpZiAhZGVmaW5lZChfX25vY2xvbmUpCiAjZGVmaW5lIF9fbm9jbG9uZQkvKiBub3QgbmVlZGVkICovCiAjZW5kaWYKKworLyoKKyAqIEEgdHJpY2sgdG8gc3VwcHJlc3MgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIHdpdGhvdXQgZ2VuZXJhdGluZyBhbnkKKyAqIGNvZGUKKyAqLworI2RlZmluZSB1bmluaXRpYWxpemVkX3Zhcih4KSB4ID0geAorCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZQkJaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MzLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzMuaAppbmRleCBiNzIxMTI5Li4zN2Q0MTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzMuaApAQCAtMjEsMTEgKzIxLDMgQEAKICMgICBlcnJvciAiR0NPViBwcm9maWxpbmcgc3VwcG9ydCBmb3IgZ2NjIHZlcnNpb25zIGJlbG93IDMuNCBub3QgaW5jbHVkZWQiCiAjIGVuZGlmIC8qIF9fR05VQ19NSU5PUl9fICovCiAjZW5kaWYgLyogQ09ORklHX0dDT1ZfS0VSTkVMICovCi0KLS8qCi0gKiBBIHRyaWNrIHRvIHN1cHByZXNzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyB3aXRob3V0IGdlbmVyYXRpbmcgYW55Ci0gKiBjb2RlCi0gKi8KLSNkZWZpbmUgdW5pbml0aWFsaXplZF92YXIoeCkgeCA9IHgKLQotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmUJCWlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKaW5kZXggZmNmYTViOS4uNjRiN2MwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKQEAgLTEyLDEzICsxMiw2IEBACiAjZGVmaW5lIF9fdXNlZAkJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKICNkZWZpbmUgX19tdXN0X2NoZWNrIAkJX19hdHRyaWJ1dGVfXygod2Fybl91bnVzZWRfcmVzdWx0KSkKICNkZWZpbmUgX19jb21waWxlcl9vZmZzZXRvZihhLGIpIF9fYnVpbHRpbl9vZmZzZXRvZihhLGIpCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZQkJaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotCi0vKgotICogQSB0cmljayB0byBzdXBwcmVzcyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcgd2l0aG91dCBnZW5lcmF0aW5nIGFueQotICogY29kZQotICovCi0jZGVmaW5lIHVuaW5pdGlhbGl6ZWRfdmFyKHgpIHggPSB4CiAKICNpZiBfX0dOVUNfTUlOT1JfXyA+PSAzCiAvKiBNYXJrIGZ1bmN0aW9ucyBhcyBjb2xkLiBnY2Mgd2lsbCBhc3N1bWUgYW55IHBhdGggbGVhZGluZyB0byBhIGNhbGwKQEAgLTUzLDcgKzQ2LDYgQEAKICNkZWZpbmUgX19ub2Nsb25lCV9fYXR0cmlidXRlX18oKF9fbm9jbG9uZV9fKSkKIAogI2VuZGlmCi0KICNlbmRpZgogCiAjaWYgX19HTlVDX01JTk9SX18gPiAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyYzMyLmggYi9pbmNsdWRlL2xpbnV4L2NyYzMyLmgKaW5kZXggZTIwZGQxZi4uMzkxYTI1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcmMzMi5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JjMzIuaApAQCAtMTEsNyArMTEsNyBAQAogZXh0ZXJuIHUzMiAgY3JjMzJfbGUodTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbik7CiBleHRlcm4gdTMyICBjcmMzMl9iZSh1MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKIAotI2RlZmluZSBjcmMzMihzZWVkLCBkYXRhLCBsZW5ndGgpICBjcmMzMl9sZShzZWVkLCAodW5zaWduZWQgY2hhciBjb25zdCAqKWRhdGEsIGxlbmd0aCkKKyNkZWZpbmUgY3JjMzIoc2VlZCwgZGF0YSwgbGVuZ3RoKSAgY3JjMzJfbGUoc2VlZCwgKHVuc2lnbmVkIGNoYXIgY29uc3QgKikoZGF0YSksIGxlbmd0aCkKIAogLyoKICAqIEhlbHBlcnMgZm9yIGhhc2ggdGFibGUgZ2VuZXJhdGlvbiBvZiBldGhlcm5ldCBuaWNzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmVkLmggYi9pbmNsdWRlL2xpbnV4L2NyZWQuaAppbmRleCA0YWFlYWIzLi45YWVlYjBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyZWQuaApAQCAtMzU0LDkgKzM1NCwxMSBAQAogI2RlZmluZSBjdXJyZW50X2ZzZ2lkKCkgCShjdXJyZW50X2NyZWRfeHh4KGZzZ2lkKSkKICNkZWZpbmUgY3VycmVudF9jYXAoKQkJKGN1cnJlbnRfY3JlZF94eHgoY2FwX2VmZmVjdGl2ZSkpCiAjZGVmaW5lIGN1cnJlbnRfdXNlcigpCQkoY3VycmVudF9jcmVkX3h4eCh1c2VyKSkKLSNkZWZpbmUgY3VycmVudF91c2VyX25zKCkJKGN1cnJlbnRfY3JlZF94eHgodXNlciktPnVzZXJfbnMpCisjZGVmaW5lIF9jdXJyZW50X3VzZXJfbnMoKQkoY3VycmVudF9jcmVkX3h4eCh1c2VyKS0+dXNlcl9ucykKICNkZWZpbmUgY3VycmVudF9zZWN1cml0eSgpCShjdXJyZW50X2NyZWRfeHh4KHNlY3VyaXR5KSkKIAorZXh0ZXJuIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqY3VycmVudF91c2VyX25zKHZvaWQpOworCiAjZGVmaW5lIGN1cnJlbnRfdWlkX2dpZChfdWlkLCBfZ2lkKQkJXAogZG8gewkJCQkJCVwKIAljb25zdCBzdHJ1Y3QgY3JlZCAqX19jcmVkOwkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggZjk1OGMxOS4uZjJhZmVkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xNjgsNyArMTY4LDcgQEAKIAl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKIAljaGFyICooKmRfZG5hbWUpKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwogCXN0cnVjdCB2ZnNtb3VudCAqKCpkX2F1dG9tb3VudCkoc3RydWN0IHBhdGggKik7Ci0JaW50ICgqZF9tYW5hZ2UpKHN0cnVjdCBkZW50cnkgKiwgYm9vbCwgYm9vbCk7CisJaW50ICgqZF9tYW5hZ2UpKHN0cnVjdCBkZW50cnkgKiwgYm9vbCk7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyoKQEAgLTQxNiw3ICs0MTYsNiBAQAogCXJldHVybiBkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfTU9VTlRFRDsKIH0KIAotZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbG9va3VwX21udChzdHJ1Y3QgcGF0aCAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfY3JlYXRlKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgaXNfZGlyKTsKIAogZXh0ZXJuIGludCBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kd19kbWFjLmggYi9pbmNsdWRlL2xpbnV4L2R3X2RtYWMuaAppbmRleCBjOGFhZDcxLi42OTk4ZDkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R3X2RtYWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2R3X2RtYWMuaApAQCAtMTYsOSArMTYsMTggQEAKIC8qKgogICogc3RydWN0IGR3X2RtYV9wbGF0Zm9ybV9kYXRhIC0gQ29udHJvbGxlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKICAqIEBucl9jaGFubmVsczogTnVtYmVyIG9mIGNoYW5uZWxzIHN1cHBvcnRlZCBieSBoYXJkd2FyZSAobWF4IDgpCisgKiBAaXNfcHJpdmF0ZTogVGhlIGRldmljZSBjaGFubmVscyBzaG91bGQgYmUgbWFya2VkIGFzIHByaXZhdGUgYW5kIG5vdCBmb3IKKyAqCWJ5IHRoZSBnZW5lcmFsIHB1cnBvc2UgRE1BIGNoYW5uZWwgYWxsb2NhdG9yLgogICovCiBzdHJ1Y3QgZHdfZG1hX3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGludAlucl9jaGFubmVsczsKKwlib29sCQlpc19wcml2YXRlOworI2RlZmluZSBDSEFOX0FMTE9DQVRJT05fQVNDRU5ESU5HCTAJLyogemVybyB0byBzZXZlbiAqLworI2RlZmluZSBDSEFOX0FMTE9DQVRJT05fREVTQ0VORElORwkxCS8qIHNldmVuIHRvIHplcm8gKi8KKwl1bnNpZ25lZCBjaGFyCWNoYW5fYWxsb2NhdGlvbl9vcmRlcjsKKyNkZWZpbmUgQ0hBTl9QUklPUklUWV9BU0NFTkRJTkcJCTAJLyogY2hhbjAgaGlnaGVzdCAqLworI2RlZmluZSBDSEFOX1BSSU9SSVRZX0RFU0NFTkRJTkcJMQkvKiBjaGFuNyBoaWdoZXN0ICovCisJdW5zaWduZWQgY2hhcgljaGFuX3ByaW9yaXR5OwogfTsKIAogLyoqCkBAIC0zMyw2ICs0MiwzMCBAQAogCURXX0RNQV9TTEFWRV9XSURUSF8zMkJJVCwKIH07CiAKKy8qIGJ1cnN0cyBzaXplICovCitlbnVtIGR3X2RtYV9tc2l6ZSB7CisJRFdfRE1BX01TSVpFXzEsCisJRFdfRE1BX01TSVpFXzQsCisJRFdfRE1BX01TSVpFXzgsCisJRFdfRE1BX01TSVpFXzE2LAorCURXX0RNQV9NU0laRV8zMiwKKwlEV19ETUFfTVNJWkVfNjQsCisJRFdfRE1BX01TSVpFXzEyOCwKKwlEV19ETUFfTVNJWkVfMjU2LAorfTsKKworLyogZmxvdyBjb250cm9sbGVyICovCitlbnVtIGR3X2RtYV9mYyB7CisJRFdfRE1BX0ZDX0RfTTJNLAorCURXX0RNQV9GQ19EX00yUCwKKwlEV19ETUFfRkNfRF9QMk0sCisJRFdfRE1BX0ZDX0RfUDJQLAorCURXX0RNQV9GQ19QX1AyTSwKKwlEV19ETUFfRkNfU1BfUDJQLAorCURXX0RNQV9GQ19QX00yUCwKKwlEV19ETUFfRkNfRFBfUDJQLAorfTsKKwogLyoqCiAgKiBzdHJ1Y3QgZHdfZG1hX3NsYXZlIC0gQ29udHJvbGxlci1zcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBhIHNsYXZlCiAgKgpAQCAtNDQsNiArNzcsMTEgQEAKICAqIEByZWdfd2lkdGg6IHBlcmlwaGVyYWwgcmVnaXN0ZXIgd2lkdGgKICAqIEBjZmdfaGk6IFBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVyIGZvciB0aGUgQ0ZHX0hJIHJlZ2lzdGVyCiAgKiBAY2ZnX2xvOiBQbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplciBmb3IgdGhlIENGR19MTyByZWdpc3RlcgorICogQHNyY19tYXN0ZXI6IHNyYyBtYXN0ZXIgZm9yIHRyYW5zZmVycyBvbiBhbGxvY2F0ZWQgY2hhbm5lbC4KKyAqIEBkc3RfbWFzdGVyOiBkZXN0IG1hc3RlciBmb3IgdHJhbnNmZXJzIG9uIGFsbG9jYXRlZCBjaGFubmVsLgorICogQHNyY19tc2l6ZTogc3JjIGJ1cnN0IHNpemUuCisgKiBAZHN0X21zaXplOiBkZXN0IGJ1cnN0IHNpemUuCisgKiBAZmM6IGZsb3cgY29udHJvbGxlciBmb3IgRE1BIHRyYW5zZmVyCiAgKi8KIHN0cnVjdCBkd19kbWFfc2xhdmUgewogCXN0cnVjdCBkZXZpY2UJCSpkbWFfZGV2OwpAQCAtNTIsNiArOTAsMTEgQEAKIAllbnVtIGR3X2RtYV9zbGF2ZV93aWR0aAlyZWdfd2lkdGg7CiAJdTMyCQkJY2ZnX2hpOwogCXUzMgkJCWNmZ19sbzsKKwl1OAkJCXNyY19tYXN0ZXI7CisJdTgJCQlkc3RfbWFzdGVyOworCXU4CQkJc3JjX21zaXplOworCXU4CQkJZHN0X21zaXplOworCXU4CQkJZmM7CiB9OwogCiAvKiBQbGF0Zm9ybS1jb25maWd1cmFibGUgYml0cyBpbiBDRkdfSEkgKi8KQEAgLTYyLDcgKzEwNSw2IEBACiAjZGVmaW5lIERXQ19DRkdIX0RTVF9QRVIoeCkJKCh4KSA8PCAxMSkKIAogLyogUGxhdGZvcm0tY29uZmlndXJhYmxlIGJpdHMgaW4gQ0ZHX0xPICovCi0jZGVmaW5lIERXQ19DRkdMX1BSSU8oeCkJKCh4KSA8PCA1KQkvKiBwcmlvcml0eSAqLwogI2RlZmluZSBEV0NfQ0ZHTF9MT0NLX0NIX1hGRVIJKDAgPDwgMTIpCS8qIHNjb3BlIG9mIExPQ0tfQ0ggKi8KICNkZWZpbmUgRFdDX0NGR0xfTE9DS19DSF9CTE9DSwkoMSA8PCAxMikKICNkZWZpbmUgRFdDX0NGR0xfTE9DS19DSF9YQUNUCSgyIDw8IDEyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnIuaCBiL2luY2x1ZGUvbGludXgvZXJyLmgKaW5kZXggNDQ4YWZjMS4uZjJlZGNlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lcnIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Vyci5oCkBAIC01Miw2ICs1MiwxNCBAQAogCXJldHVybiAodm9pZCAqKSBwdHI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBQVFJfUkVUKGNvbnN0IHZvaWQgKnB0cikKK3sKKwlpZiAoSVNfRVJSKHB0cikpCisJCXJldHVybiBQVFJfRVJSKHB0cik7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfRVJSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggYWFjM2UyZS4uYjI5N2YyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTEzLDYgKzEzLDkgQEAKICNpZm5kZWYgX0xJTlVYX0VUSFRPT0xfSAogI2RlZmluZSBfTElOVVhfRVRIVE9PTF9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKQEAgLTQ1MCw2ICs0NTMsMzcgQEAKIAlfX3UzMgkJCQlydWxlX2xvY3NbMF07CiB9OwogCisjaWZkZWYgX19LRVJORUxfXworI2lmZGVmIENPTkZJR19DT01QQVQKKworc3RydWN0IGNvbXBhdF9ldGh0b29sX3J4X2Zsb3dfc3BlYyB7CisJdTMyCQlmbG93X3R5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdGNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdWRwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJc2N0cF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWFoX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJZXNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYwkJdXNyX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRoaGRyCQkJCWV0aGVyX3NwZWM7CisJCXU4CQkJCQloZGF0YVs3Ml07CisJfSBoX3UsIG1fdTsKKwljb21wYXRfdTY0CXJpbmdfY29va2llOworCXUzMgkJbG9jYXRpb247Cit9OworCitzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhuZmMgeworCXUzMgkJCQljbWQ7CisJdTMyCQkJCWZsb3dfdHlwZTsKKwljb21wYXRfdTY0CQkJZGF0YTsKKwlzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhfZmxvd19zcGVjIGZzOworCXUzMgkJCQlydWxlX2NudDsKKwl1MzIJCQkJcnVsZV9sb2NzWzBdOworfTsKKworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKIC8qKgogICogc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciAtIGNvbW1hbmQgdG8gZ2V0IG9yIHNldCBSWCBmbG93IGhhc2ggaW5kaXJlY3Rpb24KICAqIEBjbWQ6IFNwZWNpZmljIGNvbW1hbmQgbnVtYmVyIC0gJUVUSFRPT0xfR1JYRkhJTkRJUiBvciAlRVRIVE9PTF9TUlhGSElORElSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCmluZGV4IDYwNDNjNjRjLi44NWMxZDMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaApAQCAtNDE4LDEzICs0MTgsMTMgQEAKICNkZWZpbmUgRVhUMl9NT1VOVF9EQVRBX0ZMQUdTCQlFWFQzX01PVU5UX0RBVEFfRkxBR1MKICNlbmRpZgogCi0jZGVmaW5lIGV4dDNfc2V0X2JpdAkJCWV4dDJfc2V0X2JpdAorI2RlZmluZSBleHQzX3NldF9iaXQJCQlfX3Rlc3RfYW5kX3NldF9iaXRfbGUKICNkZWZpbmUgZXh0M19zZXRfYml0X2F0b21pYwkJZXh0Ml9zZXRfYml0X2F0b21pYwotI2RlZmluZSBleHQzX2NsZWFyX2JpdAkJCWV4dDJfY2xlYXJfYml0CisjZGVmaW5lIGV4dDNfY2xlYXJfYml0CQkJX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUKICNkZWZpbmUgZXh0M19jbGVhcl9iaXRfYXRvbWljCQlleHQyX2NsZWFyX2JpdF9hdG9taWMKLSNkZWZpbmUgZXh0M190ZXN0X2JpdAkJCWV4dDJfdGVzdF9iaXQKLSNkZWZpbmUgZXh0M19maW5kX2ZpcnN0X3plcm9fYml0CWV4dDJfZmluZF9maXJzdF96ZXJvX2JpdAotI2RlZmluZSBleHQzX2ZpbmRfbmV4dF96ZXJvX2JpdAkJZXh0Ml9maW5kX25leHRfemVyb19iaXQKKyNkZWZpbmUgZXh0M190ZXN0X2JpdAkJCXRlc3RfYml0X2xlCisjZGVmaW5lIGV4dDNfZmluZF9maXJzdF96ZXJvX2JpdAlmaW5kX2ZpcnN0X3plcm9fYml0X2xlCisjZGVmaW5lIGV4dDNfZmluZF9uZXh0X3plcm9fYml0CQlmaW5kX25leHRfemVyb19iaXRfbGUKIAogLyoKICAqIE1heGltYWwgbW91bnQgY291bnRzIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW0gY2hlY2tzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKaW5kZXggOWEzZjVmOS4uYzY0ZjM2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaApAQCAtNDIsNiArNDIsMTAgQEAKICNkZWZpbmUgQ1NSX0JST0FEQ0FTVF9DSEFOTkVMCQkweDIzNAogI2RlZmluZSBDU1JfQ09ORklHX1JPTQkJCTB4NDAwCiAjZGVmaW5lIENTUl9DT05GSUdfUk9NX0VORAkJMHg4MDAKKyNkZWZpbmUgQ1NSX09NUFIJCQkweDkwMAorI2RlZmluZSBDU1JfT1BDUihpKQkJCSgweDkwNCArIChpKSAqIDQpCisjZGVmaW5lIENTUl9JTVBSCQkJMHg5ODAKKyNkZWZpbmUgQ1NSX0lQQ1IoaSkJCQkoMHg5ODQgKyAoaSkgKiA0KQogI2RlZmluZSBDU1JfRkNQX0NPTU1BTkQJCQkweEIwMAogI2RlZmluZSBDU1JfRkNQX1JFU1BPTlNFCQkweEQwMAogI2RlZmluZSBDU1JfRkNQX0VORAkJCTB4RjAwCkBAIC04OSw3ICs5Myw3IEBACiAJaW50IGN1cnJlbnRfdGxhYmVsOwogCXU2NCB0bGFiZWxfbWFzazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zYWN0aW9uX2xpc3Q7Ci0JdW5zaWduZWQgbG9uZyByZXNldF9qaWZmaWVzOworCXU2NCByZXNldF9qaWZmaWVzOwogCiAJdTMyIHNwbGl0X3RpbWVvdXRfaGk7CiAJdTMyIHNwbGl0X3RpbWVvdXRfbG87CkBAIC00NDEsNSArNDQ1LDggQEAKIAkJCSBpbnQgY3ljbGUsIGludCBzeW5jLCBpbnQgdGFncyk7CiBpbnQgZndfaXNvX2NvbnRleHRfc3RvcChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7CiB2b2lkIGZ3X2lzb19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOwordm9pZCBmd19pc29fcmVzb3VyY2VfbWFuYWdlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgZ2VuZXJhdGlvbiwKKwkJCSAgICB1NjQgY2hhbm5lbHNfbWFzaywgaW50ICpjaGFubmVsLCBpbnQgKmJhbmR3aWR0aCwKKwkJCSAgICBib29sIGFsbG9jYXRlLCBfX2JlMzIgYnVmZmVyWzJdKTsKIAogI2VuZGlmIC8qIF9MSU5VWF9GSVJFV0lSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggOTJmN2UwNC4uNGRkYTA3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNjYyLDkgKzY2Miw5IEBACiAKIHN0cnVjdCBibG9ja19kZXZpY2UgewogCWRldl90CQkJYmRfZGV2OyAgLyogbm90IGEga2Rldl90IC0gaXQncyBhIHNlYXJjaCBrZXkgKi8KKwlpbnQJCQliZF9vcGVuZXJzOwogCXN0cnVjdCBpbm9kZSAqCQliZF9pbm9kZTsJLyogd2lsbCBkaWUgKi8KIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKgliZF9zdXBlcjsKLQlpbnQJCQliZF9vcGVuZXJzOwogCXN0cnVjdCBtdXRleAkJYmRfbXV0ZXg7CS8qIG9wZW4vY2xvc2UgbXV0ZXggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWJkX2lub2RlczsKIAl2b2lkICoJCQliZF9jbGFpbWluZzsKQEAgLTE0NTcsOCArMTQ1NywxMyBAQAogI2RlZmluZSBwdXRfZnNfZXhjbCgpIGF0b21pY19kZWMoJmN1cnJlbnQtPmZzX2V4Y2wpCiAjZGVmaW5lIGhhc19mc19leGNsKCkgYXRvbWljX3JlYWQoJmN1cnJlbnQtPmZzX2V4Y2wpCiAKLSNkZWZpbmUgaXNfb3duZXJfb3JfY2FwKGlub2RlKQlcCi0JKChjdXJyZW50X2ZzdWlkKCkgPT0gKGlub2RlKS0+aV91aWQpIHx8IGNhcGFibGUoQ0FQX0ZPV05FUikpCisvKgorICogdW50aWwgVkZTIHRyYWNrcyB1c2VyIG5hbWVzcGFjZXMgZm9yIGlub2RlcywganVzdCBtYWtlIGFsbCBmaWxlcworICogYmVsb25nIHRvIGluaXRfdXNlcl9ucworICovCitleHRlcm4gc3RydWN0IHVzZXJfbmFtZXNwYWNlIGluaXRfdXNlcl9uczsKKyNkZWZpbmUgaW5vZGVfdXNlcm5zKGlub2RlKSAoJmluaXRfdXNlcl9ucykKK2V4dGVybiBib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qIG5vdCBxdWl0ZSByZWFkeSB0byBiZSBkZXByZWNhdGVkLCBidXQuLi4gKi8KIGV4dGVybiB2b2lkIGxvY2tfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpAQCAtMTgzOSw3ICsxODQ0LDYgQEAKIAljb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3BzLAogCWNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZG9wcywKIAl1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIHNpbXBsZV9zZXRfbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNiX21hcmtfZGlydHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGRjYTMxNzYuLmJmYjhmOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBfX19HRlBfTk9UUkFDSwkJMAogI2VuZGlmCiAjZGVmaW5lIF9fX0dGUF9OT19LU1dBUEQJMHg0MDAwMDB1CisjZGVmaW5lIF9fX0dGUF9PVEhFUl9OT0RFCTB4ODAwMDAwdQogCiAvKgogICogR0ZQIGJpdG1hc2tzLi4KQEAgLTgzLDYgKzg0LDcgQEAKICNkZWZpbmUgX19HRlBfTk9UUkFDSwkoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX05PVFJBQ0spICAvKiBEb24ndCB0cmFjayB3aXRoIGttZW1jaGVjayAqLwogCiAjZGVmaW5lIF9fR0ZQX05PX0tTV0FQRAkoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX05PX0tTV0FQRCkKKyNkZWZpbmUgX19HRlBfT1RIRVJfTk9ERSAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX09USEVSX05PREUpIC8qIE9uIGJlaGFsZiBvZiBvdGhlciBub2RlICovCiAKIC8qCiAgKiBUaGlzIG1heSBzZWVtIHJlZHVuZGFudCwgYnV0IGl0J3MgYSB3YXkgb2YgYW5ub3RhdGluZyBmYWxzZSBwb3NpdGl2ZXMgdnMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC1yb2NjYXQuaCBiL2luY2x1ZGUvbGludXgvaGlkLXJvY2NhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTFjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC1yb2NjYXQuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fSElEX1JPQ0NBVF9ICisjZGVmaW5lIF9fSElEX1JPQ0NBVF9ICisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBST0NDQVRJT0NHUkVQU0laRSBfSU9SKCdIJywgMHhmMSwgaW50KQorCisjaWZkZWYgX19LRVJORUxfXworCitpbnQgcm9jY2F0X2Nvbm5lY3Qoc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwKKwkJaW50IHJlcG9ydF9zaXplKTsKK3ZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKTsKK2ludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpOworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCBkOTFjMjVlLi5iYjI5YmIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTUwNCw2ICs1MDQsOSBAQAogCQkJCSAgc3RydWN0IGhpZF91c2FnZSAqLCBfX3MzMik7CiAJdm9pZCAoKmhpZGRldl9yZXBvcnRfZXZlbnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqKTsKIAorCS8qIGhhbmRsZXIgZm9yIHJhdyBpbnB1dCAoR2V0X1JlcG9ydCkgZGF0YSwgdXNlZCBieSBoaWRyYXcgKi8KKwlpbnQgKCpoaWRfZ2V0X3Jhd19yZXBvcnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCB1bnNpZ25lZCBjaGFyLCBfX3U4ICosIHNpemVfdCwgdW5zaWduZWQgY2hhcik7CisKIAkvKiBoYW5kbGVyIGZvciByYXcgb3V0cHV0IGRhdGEsIHVzZWQgYnkgaGlkcmF3ICovCiAJaW50ICgqaGlkX291dHB1dF9yYXdfcmVwb3J0KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgX191OCAqLCBzaXplX3QsIHVuc2lnbmVkIGNoYXIpOwogCkBAIC02MzgsNyArNjQxLDcgQEAKIAkJCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKIAkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCk7CiAJdm9pZCAoKmZlYXR1cmVfbWFwcGluZykoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCi0JCQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKIAkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlKTsKICNpZmRlZiBDT05GSUdfUE0KIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWRyYXcuaCBiL2luY2x1ZGUvbGludXgvaGlkcmF3LmgKaW5kZXggZGQ4ZDY5Mi4uNGI4OGU2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWRyYXcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZHJhdy5oCkBAIC0zNSw2ICszNSw5IEBACiAjZGVmaW5lIEhJRElPQ0dSQVdJTkZPCQlfSU9SKCdIJywgMHgwMywgc3RydWN0IGhpZHJhd19kZXZpbmZvKQogI2RlZmluZSBISURJT0NHUkFXTkFNRShsZW4pICAgICBfSU9DKF9JT0NfUkVBRCwgJ0gnLCAweDA0LCBsZW4pCiAjZGVmaW5lIEhJRElPQ0dSQVdQSFlTKGxlbikgICAgIF9JT0MoX0lPQ19SRUFELCAnSCcsIDB4MDUsIGxlbikKKy8qIFRoZSBmaXJzdCBieXRlIG9mIFNGRUFUVVJFIGFuZCBHRkVBVFVSRSBpcyB0aGUgcmVwb3J0IG51bWJlciAqLworI2RlZmluZSBISURJT0NTRkVBVFVSRShsZW4pICAgIF9JT0MoX0lPQ19XUklURXxfSU9DX1JFQUQsICdIJywgMHgwNiwgbGVuKQorI2RlZmluZSBISURJT0NHRkVBVFVSRShsZW4pICAgIF9JT0MoX0lPQ19XUklURXxfSU9DX1JFQUQsICdIJywgMHgwNywgbGVuKQogCiAjZGVmaW5lIEhJRFJBV19GSVJTVF9NSU5PUiAwCiAjZGVmaW5lIEhJRFJBV19NQVhfREVWSUNFUyA2NApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9od3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L2h3c3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzkwZWZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9od3NwaW5sb2NrLmgKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiBIYXJkd2FyZSBzcGlubG9jayBwdWJsaWMgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tCisgKgorICogQ29udGFjdDogT2hhZCBCZW4tQ29oZW4gPG9oYWRAd2l6ZXJ5LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0hXU1BJTkxPQ0tfSAorI2RlZmluZSBfX0xJTlVYX0hXU1BJTkxPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworLyogaHdzcGlubG9jayBtb2RlIGFyZ3VtZW50ICovCisjZGVmaW5lIEhXTE9DS19JUlFTVEFURQkweDAxCS8qIERpc2FibGUgaW50ZXJydXB0cywgc2F2ZSBzdGF0ZSAqLworI2RlZmluZSBIV0xPQ0tfSVJRCTB4MDIJLyogRGlzYWJsZSBpbnRlcnJ1cHRzLCBkb24ndCBzYXZlIHN0YXRlICovCisKK3N0cnVjdCBod3NwaW5sb2NrOworCisjaWYgZGVmaW5lZChDT05GSUdfSFdTUElOTE9DSykgfHwgZGVmaW5lZChDT05GSUdfSFdTUElOTE9DS19NT0RVTEUpCisKK2ludCBod3NwaW5fbG9ja19yZWdpc3RlcihzdHJ1Y3QgaHdzcGlubG9jayAqbG9jayk7CitzdHJ1Y3QgaHdzcGlubG9jayAqaHdzcGluX2xvY2tfdW5yZWdpc3Rlcih1bnNpZ25lZCBpbnQgaWQpOworc3RydWN0IGh3c3BpbmxvY2sgKmh3c3Bpbl9sb2NrX3JlcXVlc3Qodm9pZCk7CitzdHJ1Y3QgaHdzcGlubG9jayAqaHdzcGluX2xvY2tfcmVxdWVzdF9zcGVjaWZpYyh1bnNpZ25lZCBpbnQgaWQpOworaW50IGh3c3Bpbl9sb2NrX2ZyZWUoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jayk7CitpbnQgaHdzcGluX2xvY2tfZ2V0X2lkKHN0cnVjdCBod3NwaW5sb2NrICpod2xvY2spOworaW50IF9faHdzcGluX2xvY2tfdGltZW91dChzdHJ1Y3QgaHdzcGlubG9jayAqLCB1bnNpZ25lZCBpbnQsIGludCwKKwkJCQkJCQl1bnNpZ25lZCBsb25nICopOworaW50IF9faHdzcGluX3RyeWxvY2soc3RydWN0IGh3c3BpbmxvY2sgKiwgaW50LCB1bnNpZ25lZCBsb25nICopOwordm9pZCBfX2h3c3Bpbl91bmxvY2soc3RydWN0IGh3c3BpbmxvY2sgKiwgaW50LCB1bnNpZ25lZCBsb25nICopOworCisjZWxzZSAvKiAhQ09ORklHX0hXU1BJTkxPQ0sgKi8KKworLyoKKyAqIFdlIGRvbid0IHdhbnQgdGhlc2UgZnVuY3Rpb25zIHRvIGZhaWwgaWYgQ09ORklHX0hXU1BJTkxPQ0sgaXMgbm90CisgKiBlbmFibGVkLiBXZSBwcmVmZXIgdG8gc2lsZW50bHkgc3VjY2VlZCBpbiB0aGlzIGNhc2UsIGFuZCBsZXQgdGhlCisgKiBjb2RlIHBhdGggZ2V0IGNvbXBpbGVkIGF3YXkuIFRoaXMgd2F5LCBpZiBDT05GSUdfSFdTUElOTE9DSyBpcyBub3QKKyAqIHJlcXVpcmVkIG9uIGEgZ2l2ZW4gc2V0dXAsIHVzZXJzIHdpbGwgc3RpbGwgd29yay4KKyAqCisgKiBUaGUgb25seSBleGNlcHRpb24gaXMgaHdzcGluX2xvY2tfcmVnaXN0ZXIvaHdzcGluX2xvY2tfdW5yZWdpc3Rlciwgd2l0aCB3aGljaAorICogd2UgX2RvXyB3YW50IHVzZXJzIHRvIGZhaWwgKG5vIHBvaW50IGluIHJlZ2lzdGVyaW5nIGh3c3BpbmxvY2sgaW5zdGFuY2VzIGlmCisgKiB0aGUgZnJhbWV3b3JrIGlzIG5vdCBhdmFpbGFibGUpLgorICoKKyAqIE5vdGU6IEVSUl9QVFIoLUVOT0RFVikgd2lsbCBzdGlsbCBiZSBjb25zaWRlcmVkIGEgc3VjY2VzcyBmb3IgTlVMTC1jaGVja2luZworICogdXNlcnMuIE90aGVycywgd2hpY2ggY2FyZSwgY2FuIHN0aWxsIGNoZWNrIHRoaXMgd2l0aCBJU19FUlIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh3c3BpbmxvY2sgKmh3c3Bpbl9sb2NrX3JlcXVlc3Qodm9pZCkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaHdzcGlubG9jayAqaHdzcGluX2xvY2tfcmVxdWVzdF9zcGVjaWZpYyh1bnNpZ25lZCBpbnQgaWQpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh3c3Bpbl9sb2NrX2ZyZWUoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZQoraW50IF9faHdzcGluX2xvY2tfdGltZW91dChzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLCB1bnNpZ25lZCBpbnQgdG8sCisJCQkJCWludCBtb2RlLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZQoraW50IF9faHdzcGluX3RyeWxvY2soc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaywgaW50IG1vZGUsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIF9faHdzcGluX3VubG9jayhzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLCBpbnQgbW9kZSwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh3c3Bpbl9sb2NrX2dldF9pZChzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBod3NwaW5fbG9ja19yZWdpc3RlcihzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBod3NwaW5sb2NrICpod3NwaW5fbG9ja191bnJlZ2lzdGVyKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qICFDT05GSUdfSFdTUElOTE9DSyAqLworCisvKioKKyAqIGh3c3Bpbl90cnlsb2NrX2lycXNhdmUoKSAtIHRyeSB0byBsb2NrIGFuIGh3c3BpbmxvY2ssIGRpc2FibGUgaW50ZXJydXB0cworICogQGh3bG9jazogYW4gaHdzcGlubG9jayB3aGljaCB3ZSB3YW50IHRvIHRyeWxvY2sKKyAqIEBmbGFnczogYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBjYWxsZXIncyBpbnRlcnJ1cHQgc3RhdGUgd2lsbCBiZSBzYXZlZCBhdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gbG9jayB0aGUgdW5kZXJseWluZyBod3NwaW5sb2NrLCBhbmQgd2lsbAorICogaW1tZWRpYXRlbHkgZmFpbCBpZiB0aGUgaHdzcGlubG9jayBpcyBhbHJlYWR5IGxvY2tlZC4KKyAqCisgKiBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBwcmVlbXB0aW9uIGFuZCBsb2NhbAorICogaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKHByZXZpb3VzIGludGVycnVwdHMgc3RhdGUgaXMgc2F2ZWQgYXQgQGZsYWdzKSwKKyAqIHNvIHRoZSBjYWxsZXIgbXVzdCBub3Qgc2xlZXAsIGFuZCBpcyBhZHZpc2VkIHRvIHJlbGVhc2UgdGhlIGh3c3BpbmxvY2sKKyAqIGFzIHNvb24gYXMgcG9zc2libGUuCisgKgorICogUmV0dXJucyAwIGlmIHdlIHN1Y2Nlc3NmdWxseSBsb2NrZWQgdGhlIGh3c3BpbmxvY2ssIC1FQlVTWSBpZgorICogdGhlIGh3c3BpbmxvY2sgd2FzIGFscmVhZHkgdGFrZW4sIGFuZCAtRUlOVkFMIGlmIEBod2xvY2sgaXMgaW52YWxpZC4KKyAqLworc3RhdGljIGlubGluZQoraW50IGh3c3Bpbl90cnlsb2NrX2lycXNhdmUoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJcmV0dXJuIF9faHdzcGluX3RyeWxvY2soaHdsb2NrLCBIV0xPQ0tfSVJRU1RBVEUsIGZsYWdzKTsKK30KKworLyoqCisgKiBod3NwaW5fdHJ5bG9ja19pcnEoKSAtIHRyeSB0byBsb2NrIGFuIGh3c3BpbmxvY2ssIGRpc2FibGUgaW50ZXJydXB0cworICogQGh3bG9jazogYW4gaHdzcGlubG9jayB3aGljaCB3ZSB3YW50IHRvIHRyeWxvY2sKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGxvY2sgdGhlIHVuZGVybHlpbmcgaHdzcGlubG9jaywgYW5kIHdpbGwKKyAqIGltbWVkaWF0ZWx5IGZhaWwgaWYgdGhlIGh3c3BpbmxvY2sgaXMgYWxyZWFkeSBsb2NrZWQuCisgKgorICogVXBvbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgcHJlZW1wdGlvbiBhbmQgbG9jYWwKKyAqIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IHNsZWVwLCBhbmQgaXMgYWR2aXNlZAorICogdG8gcmVsZWFzZSB0aGUgaHdzcGlubG9jayBhcyBzb29uIGFzIHBvc3NpYmxlLgorICoKKyAqIFJldHVybnMgMCBpZiB3ZSBzdWNjZXNzZnVsbHkgbG9ja2VkIHRoZSBod3NwaW5sb2NrLCAtRUJVU1kgaWYKKyAqIHRoZSBod3NwaW5sb2NrIHdhcyBhbHJlYWR5IHRha2VuLCBhbmQgLUVJTlZBTCBpZiBAaHdsb2NrIGlzIGludmFsaWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGh3c3Bpbl90cnlsb2NrX2lycShzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrKQoreworCXJldHVybiBfX2h3c3Bpbl90cnlsb2NrKGh3bG9jaywgSFdMT0NLX0lSUSwgTlVMTCk7Cit9CisKKy8qKgorICogaHdzcGluX3RyeWxvY2soKSAtIGF0dGVtcHQgdG8gbG9jayBhIHNwZWNpZmljIGh3c3BpbmxvY2sKKyAqIEBod2xvY2s6IGFuIGh3c3BpbmxvY2sgd2hpY2ggd2Ugd2FudCB0byB0cnlsb2NrCisgKgorICogVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBsb2NrIGFuIGh3c3BpbmxvY2ssIGFuZCB3aWxsIGltbWVkaWF0ZWx5IGZhaWwKKyAqIGlmIHRoZSBod3NwaW5sb2NrIGlzIGFscmVhZHkgdGFrZW4uCisgKgorICogVXBvbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZCwKKyAqIHNvIHRoZSBjYWxsZXIgbXVzdCBub3Qgc2xlZXAsIGFuZCBpcyBhZHZpc2VkIHRvIHJlbGVhc2UgdGhlIGh3c3BpbmxvY2sKKyAqIGFzIHNvb24gYXMgcG9zc2libGUuIFRoaXMgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gbWluaW1pemUgcmVtb3RlIGNvcmVzCisgKiBwb2xsaW5nIG9uIHRoZSBoYXJkd2FyZSBpbnRlcmNvbm5lY3QuCisgKgorICogUmV0dXJucyAwIGlmIHdlIHN1Y2Nlc3NmdWxseSBsb2NrZWQgdGhlIGh3c3BpbmxvY2ssIC1FQlVTWSBpZgorICogdGhlIGh3c3BpbmxvY2sgd2FzIGFscmVhZHkgdGFrZW4sIGFuZCAtRUlOVkFMIGlmIEBod2xvY2sgaXMgaW52YWxpZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaHdzcGluX3RyeWxvY2soc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaykKK3sKKwlyZXR1cm4gX19od3NwaW5fdHJ5bG9jayhod2xvY2ssIDAsIE5VTEwpOworfQorCisvKioKKyAqIGh3c3Bpbl9sb2NrX3RpbWVvdXRfaXJxc2F2ZSgpIC0gbG9jayBod3NwaW5sb2NrLCB3aXRoIHRpbWVvdXQsIGRpc2FibGUgaXJxcworICogQGh3bG9jazogdGhlIGh3c3BpbmxvY2sgdG8gYmUgbG9ja2VkCisgKiBAdG86IHRpbWVvdXQgdmFsdWUgaW4gbXNlY3MKKyAqIEBmbGFnczogYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBjYWxsZXIncyBpbnRlcnJ1cHQgc3RhdGUgd2lsbCBiZSBzYXZlZCBhdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgdGhlIHVuZGVybHlpbmcgQGh3bG9jay4gSWYgdGhlIEBod2xvY2sKKyAqIGlzIGFscmVhZHkgdGFrZW4sIHRoZSBmdW5jdGlvbiB3aWxsIGJ1c3kgbG9vcCB3YWl0aW5nIGZvciBpdCB0bworICogYmUgcmVsZWFzZWQsIGJ1dCBnaXZlIHVwIHdoZW4gQHRpbWVvdXQgbXNlY3MgaGF2ZSBlbGFwc2VkLgorICoKKyAqIFVwb24gYSBzdWNjZXNzZnVsIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIHByZWVtcHRpb24gYW5kIGxvY2FsIGludGVycnVwdHMKKyAqIGFyZSBkaXNhYmxlZCAocGx1cyBwcmV2aW91cyBpbnRlcnJ1cHQgc3RhdGUgaXMgc2F2ZWQpLCBzbyB0aGUgY2FsbGVyIG11c3QKKyAqIG5vdCBzbGVlcCwgYW5kIGlzIGFkdmlzZWQgdG8gcmVsZWFzZSB0aGUgaHdzcGlubG9jayBhcyBzb29uIGFzIHBvc3NpYmxlLgorICoKKyAqIFJldHVybnMgMCB3aGVuIHRoZSBAaHdsb2NrIHdhcyBzdWNjZXNzZnVsbHkgdGFrZW4sIGFuZCBhbiBhcHByb3ByaWF0ZQorICogZXJyb3IgY29kZSBvdGhlcndpc2UgKG1vc3Qgbm90YWJseSBhbiAtRVRJTUVET1VUIGlmIHRoZSBAaHdsb2NrIGlzIHN0aWxsCisgKiBidXN5IGFmdGVyIEB0aW1lb3V0IG1zZWNzKS4gVGhlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgc2xlZXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGh3c3Bpbl9sb2NrX3RpbWVvdXRfaXJxc2F2ZShzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLAorCQkJCXVuc2lnbmVkIGludCB0bywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJcmV0dXJuIF9faHdzcGluX2xvY2tfdGltZW91dChod2xvY2ssIHRvLCBIV0xPQ0tfSVJRU1RBVEUsIGZsYWdzKTsKK30KKworLyoqCisgKiBod3NwaW5fbG9ja190aW1lb3V0X2lycSgpIC0gbG9jayBod3NwaW5sb2NrLCB3aXRoIHRpbWVvdXQsIGRpc2FibGUgaXJxcworICogQGh3bG9jazogdGhlIGh3c3BpbmxvY2sgdG8gYmUgbG9ja2VkCisgKiBAdG86IHRpbWVvdXQgdmFsdWUgaW4gbXNlY3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxvY2tzIHRoZSB1bmRlcmx5aW5nIEBod2xvY2suIElmIHRoZSBAaHdsb2NrCisgKiBpcyBhbHJlYWR5IHRha2VuLCB0aGUgZnVuY3Rpb24gd2lsbCBidXN5IGxvb3Agd2FpdGluZyBmb3IgaXQgdG8KKyAqIGJlIHJlbGVhc2VkLCBidXQgZ2l2ZSB1cCB3aGVuIEB0aW1lb3V0IG1zZWNzIGhhdmUgZWxhcHNlZC4KKyAqCisgKiBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBwcmVlbXB0aW9uIGFuZCBsb2NhbCBpbnRlcnJ1cHRzCisgKiBhcmUgZGlzYWJsZWQgc28gdGhlIGNhbGxlciBtdXN0IG5vdCBzbGVlcCwgYW5kIGlzIGFkdmlzZWQgdG8gcmVsZWFzZSB0aGUKKyAqIGh3c3BpbmxvY2sgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqCisgKiBSZXR1cm5zIDAgd2hlbiB0aGUgQGh3bG9jayB3YXMgc3VjY2Vzc2Z1bGx5IHRha2VuLCBhbmQgYW4gYXBwcm9wcmlhdGUKKyAqIGVycm9yIGNvZGUgb3RoZXJ3aXNlIChtb3N0IG5vdGFibHkgYW4gLUVUSU1FRE9VVCBpZiB0aGUgQGh3bG9jayBpcyBzdGlsbAorICogYnVzeSBhZnRlciBAdGltZW91dCBtc2VjcykuIFRoZSBmdW5jdGlvbiB3aWxsIG5ldmVyIHNsZWVwLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgaHdzcGluX2xvY2tfdGltZW91dF9pcnEoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaywgdW5zaWduZWQgaW50IHRvKQoreworCXJldHVybiBfX2h3c3Bpbl9sb2NrX3RpbWVvdXQoaHdsb2NrLCB0bywgSFdMT0NLX0lSUSwgTlVMTCk7Cit9CisKKy8qKgorICogaHdzcGluX2xvY2tfdGltZW91dCgpIC0gbG9jayBhbiBod3NwaW5sb2NrIHdpdGggdGltZW91dCBsaW1pdAorICogQGh3bG9jazogdGhlIGh3c3BpbmxvY2sgdG8gYmUgbG9ja2VkCisgKiBAdG86IHRpbWVvdXQgdmFsdWUgaW4gbXNlY3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxvY2tzIHRoZSB1bmRlcmx5aW5nIEBod2xvY2suIElmIHRoZSBAaHdsb2NrCisgKiBpcyBhbHJlYWR5IHRha2VuLCB0aGUgZnVuY3Rpb24gd2lsbCBidXN5IGxvb3Agd2FpdGluZyBmb3IgaXQgdG8KKyAqIGJlIHJlbGVhc2VkLCBidXQgZ2l2ZSB1cCB3aGVuIEB0aW1lb3V0IG1zZWNzIGhhdmUgZWxhcHNlZC4KKyAqCisgKiBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkCisgKiBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IHNsZWVwLCBhbmQgaXMgYWR2aXNlZCB0byByZWxlYXNlIHRoZSBod3NwaW5sb2NrCisgKiBhcyBzb29uIGFzIHBvc3NpYmxlLgorICogVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBtaW5pbWl6ZSByZW1vdGUgY29yZXMgcG9sbGluZyBvbiB0aGUKKyAqIGhhcmR3YXJlIGludGVyY29ubmVjdC4KKyAqCisgKiBSZXR1cm5zIDAgd2hlbiB0aGUgQGh3bG9jayB3YXMgc3VjY2Vzc2Z1bGx5IHRha2VuLCBhbmQgYW4gYXBwcm9wcmlhdGUKKyAqIGVycm9yIGNvZGUgb3RoZXJ3aXNlIChtb3N0IG5vdGFibHkgYW4gLUVUSU1FRE9VVCBpZiB0aGUgQGh3bG9jayBpcyBzdGlsbAorICogYnVzeSBhZnRlciBAdGltZW91dCBtc2VjcykuIFRoZSBmdW5jdGlvbiB3aWxsIG5ldmVyIHNsZWVwLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgaHdzcGluX2xvY2tfdGltZW91dChzdHJ1Y3QgaHdzcGlubG9jayAqaHdsb2NrLCB1bnNpZ25lZCBpbnQgdG8pCit7CisJcmV0dXJuIF9faHdzcGluX2xvY2tfdGltZW91dChod2xvY2ssIHRvLCAwLCBOVUxMKTsKK30KKworLyoqCisgKiBod3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoKSAtIHVubG9jayBod3NwaW5sb2NrLCByZXN0b3JlIGlycSBzdGF0ZQorICogQGh3bG9jazogYSBwcmV2aW91c2x5LWFjcXVpcmVkIGh3c3BpbmxvY2sgd2hpY2ggd2Ugd2FudCB0byB1bmxvY2sKKyAqIEBmbGFnczogcHJldmlvdXMgY2FsbGVyJ3MgaW50ZXJydXB0IHN0YXRlIHRvIHJlc3RvcmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdW5sb2NrIGEgc3BlY2lmaWMgaHdzcGlubG9jaywgZW5hYmxlIHByZWVtcHRpb24gYW5kCisgKiByZXN0b3JlIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0cy4gSXQgc2hvdWxkIGJlIHVzZWQKKyAqIHRvIHVuZG8sIGUuZy4sIGh3c3Bpbl90cnlsb2NrX2lycXNhdmUoKS4KKyAqCisgKiBAaHdsb2NrIG11c3QgYmUgYWxyZWFkeSBsb2NrZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbjogaXQgaXMgYSBidWcKKyAqIHRvIGNhbGwgdW5sb2NrIG9uIGEgQGh3bG9jayB0aGF0IGlzIGFscmVhZHkgdW5sb2NrZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaywKKwkJCQkJCQl1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwlfX2h3c3Bpbl91bmxvY2soaHdsb2NrLCBIV0xPQ0tfSVJRU1RBVEUsIGZsYWdzKTsKK30KKworLyoqCisgKiBod3NwaW5fdW5sb2NrX2lycSgpIC0gdW5sb2NrIGh3c3BpbmxvY2ssIGVuYWJsZSBpbnRlcnJ1cHRzCisgKiBAaHdsb2NrOiBhIHByZXZpb3VzbHktYWNxdWlyZWQgaHdzcGlubG9jayB3aGljaCB3ZSB3YW50IHRvIHVubG9jaworICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1bmxvY2sgYSBzcGVjaWZpYyBod3NwaW5sb2NrLCBlbmFibGUgcHJlZW1wdGlvbiBhbmQKKyAqIGVuYWJsZSBsb2NhbCBpbnRlcnJ1cHRzLiBTaG91bGQgYmUgdXNlZCB0byB1bmRvIGh3c3Bpbl9sb2NrX2lycSgpLgorICoKKyAqIEBod2xvY2sgbXVzdCBiZSBhbHJlYWR5IGxvY2tlZCAoZS5nLiBieSBod3NwaW5fdHJ5bG9ja19pcnEoKSkgYmVmb3JlCisgKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb246IGl0IGlzIGEgYnVnIHRvIGNhbGwgdW5sb2NrIG9uIGEgQGh3bG9jayB0aGF0IGlzCisgKiBhbHJlYWR5IHVubG9ja2VkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdzcGluX3VubG9ja19pcnEoc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaykKK3sKKwlfX2h3c3Bpbl91bmxvY2soaHdsb2NrLCBIV0xPQ0tfSVJRLCBOVUxMKTsKK30KKworLyoqCisgKiBod3NwaW5fdW5sb2NrKCkgLSB1bmxvY2sgaHdzcGlubG9jaworICogQGh3bG9jazogYSBwcmV2aW91c2x5LWFjcXVpcmVkIGh3c3BpbmxvY2sgd2hpY2ggd2Ugd2FudCB0byB1bmxvY2sKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdW5sb2NrIGEgc3BlY2lmaWMgaHdzcGlubG9jayBhbmQgZW5hYmxlIHByZWVtcHRpb24KKyAqIGJhY2suCisgKgorICogQGh3bG9jayBtdXN0IGJlIGFscmVhZHkgbG9ja2VkIChlLmcuIGJ5IGh3c3Bpbl90cnlsb2NrKCkpIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uOiBpdCBpcyBhIGJ1ZyB0byBjYWxsIHVubG9jayBvbiBhIEBod2xvY2sgdGhhdCBpcyBhbHJlYWR5CisgKiB1bmxvY2tlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3c3Bpbl91bmxvY2soc3RydWN0IGh3c3BpbmxvY2sgKmh3bG9jaykKK3sKKwlfX2h3c3Bpbl91bmxvY2soaHdsb2NrLCAwLCBOVUxMKTsKK30KKworI2VuZGlmIC8qIF9fTElOVVhfSFdTUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlZjVjNTUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCQkJCQkJCQkJICAgICAqLwotLyogaTJjLWlkLmggLSBpZGVudGlmaWVyIHZhbHVlcyBmb3IgaTJjIGRyaXZlcnMgYW5kIGFkYXB0ZXJzCQkgICAgICovCi0vKgkJCQkJCQkJCSAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkgU2ltb24gRy4gVm9nbAotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCQkgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZm5kZWYgTElOVVhfSTJDX0lEX0gKLSNkZWZpbmUgTElOVVhfSTJDX0lEX0gKLQotLyogUGxlYXNlIG5vdGUgdGhhdCBJMkMgZHJpdmVyIElEcyBhcmUgb3B0aW9uYWwuIFRoZXkgYXJlIG9ubHkgbmVlZGVkIGlmIGEKLSAgIGxlZ2FjeSBjaGlwIGRyaXZlciBuZWVkcyB0byBpZGVudGlmeSBhIGJ1cyBvciBhIGJ1cyBkcml2ZXIgbmVlZHMgdG8KLSAgIGlkZW50aWZ5IGEgbGVnYWN5IGNsaWVudC4gSWYgeW91IGRvbid0IG5lZWQgdGhlbSwganVzdCBkb24ndCBzZXQgdGhlbS4gKi8KLQotLyoKLSAqIC0tLS0gQWRhcHRlciB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyogLS0tIEJpdCBhbGdvcml0aG0gYWRhcHRlcnMJCQkJCQkqLwotI2RlZmluZSBJMkNfSFdfQl9DWDIzODh4CTB4MDEwMDFiIC8qIGNvbm5leGFudCAyMzg4eCBiYXNlZCB0diBjYXJkcyAqLwotCi0jZW5kaWYgLyogTElOVVhfSTJDX0lEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDA2YThkOWMuLmYxZTNmZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgkvKiBmb3Igc3RydWN0IGRldmljZSAqLwogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGZvciBjb21wbGV0aW9uICovCkBAIC0xMDUsOCArMTA0LDggQEAKIC8qKgogICogc3RydWN0IGkyY19kcml2ZXIgLSByZXByZXNlbnQgYW4gSTJDIGRldmljZSBkcml2ZXIKICAqIEBjbGFzczogV2hhdCBraW5kIG9mIGkyYyBkZXZpY2Ugd2UgaW5zdGFudGlhdGUgKGZvciBkZXRlY3QpCi0gKiBAYXR0YWNoX2FkYXB0ZXI6IENhbGxiYWNrIGZvciBidXMgYWRkaXRpb24gKGZvciBsZWdhY3kgZHJpdmVycykKLSAqIEBkZXRhY2hfYWRhcHRlcjogQ2FsbGJhY2sgZm9yIGJ1cyByZW1vdmFsIChmb3IgbGVnYWN5IGRyaXZlcnMpCisgKiBAYXR0YWNoX2FkYXB0ZXI6IENhbGxiYWNrIGZvciBidXMgYWRkaXRpb24gKGRlcHJlY2F0ZWQpCisgKiBAZGV0YWNoX2FkYXB0ZXI6IENhbGxiYWNrIGZvciBidXMgcmVtb3ZhbCAoZGVwcmVjYXRlZCkKICAqIEBwcm9iZTogQ2FsbGJhY2sgZm9yIGRldmljZSBiaW5kaW5nCiAgKiBAcmVtb3ZlOiBDYWxsYmFjayBmb3IgZGV2aWNlIHVuYmluZGluZwogICogQHNodXRkb3duOiBDYWxsYmFjayBmb3IgZGV2aWNlIHNodXRkb3duCkBAIC0xNDQsMTEgKzE0MywxMSBAQAogCXVuc2lnbmVkIGludCBjbGFzczsKIAogCS8qIE5vdGlmaWVzIHRoZSBkcml2ZXIgdGhhdCBhIG5ldyBidXMgaGFzIGFwcGVhcmVkIG9yIGlzIGFib3V0IHRvIGJlCi0JICogcmVtb3ZlZC4gWW91IHNob3VsZCBhdm9pZCB1c2luZyB0aGlzIGlmIHlvdSBjYW4sIGl0IHdpbGwgcHJvYmFibHkKLQkgKiBiZSByZW1vdmVkIGluIGEgbmVhciBmdXR1cmUuCisJICogcmVtb3ZlZC4gWW91IHNob3VsZCBhdm9pZCB1c2luZyB0aGlzLCBpdCB3aWxsIGJlIHJlbW92ZWQgaW4gYQorCSAqIG5lYXIgZnV0dXJlLgogCSAqLwotCWludCAoKmF0dGFjaF9hZGFwdGVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7Ci0JaW50ICgqZGV0YWNoX2FkYXB0ZXIpKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKKwlpbnQgKCphdHRhY2hfYWRhcHRlcikoc3RydWN0IGkyY19hZGFwdGVyICopIF9fZGVwcmVjYXRlZDsKKwlpbnQgKCpkZXRhY2hfYWRhcHRlcikoc3RydWN0IGkyY19hZGFwdGVyICopIF9fZGVwcmVjYXRlZDsKIAogCS8qIFN0YW5kYXJkIGRyaXZlciBtb2RlbCBpbnRlcmZhY2VzICovCiAJaW50ICgqcHJvYmUpKHN0cnVjdCBpMmNfY2xpZW50ICosIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICopOwpAQCAtMzU0LDcgKzM1Myw2IEBACiAgKi8KIHN0cnVjdCBpMmNfYWRhcHRlciB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JdW5zaWduZWQgaW50IGlkIF9fZGVwcmVjYXRlZDsKIAl1bnNpZ25lZCBpbnQgY2xhc3M7CQkgIC8qIGNsYXNzZXMgdG8gYWxsb3cgcHJvYmluZyBmb3IgKi8KIAljb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSAqYWxnbzsgLyogdGhlIGFsZ29yaXRobSB0byBhY2Nlc3MgdGhlIGJ1cyAqLwogCXZvaWQgKmFsZ29fZGF0YTsKQEAgLTM5Niw2ICszOTQsOCBAQAogCQlyZXR1cm4gTlVMTDsKIH0KIAoraW50IGkyY19mb3JfZWFjaF9kZXYodm9pZCAqZGF0YSwgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSk7CisKIC8qIEFkYXB0ZXIgbG9ja2luZyBmdW5jdGlvbnMsIGV4cG9ydGVkIGZvciBzaGFyZWQgcGluIGNhc2VzICovCiB2b2lkIGkyY19sb2NrX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICopOwogdm9pZCBpMmNfdW5sb2NrX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICopOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiBleHRlcm4gdm9pZCBpMmNfY2xpZW50c19jb21tYW5kKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKIAkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogCi1leHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICppMmNfZ2V0X2FkYXB0ZXIoaW50IGlkKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19nZXRfYWRhcHRlcihpbnQgbnIpOwogZXh0ZXJuIHZvaWQgaTJjX3B1dF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCk7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvYWRzMTAxNS5oIGIvaW5jbHVkZS9saW51eC9pMmMvYWRzMTAxNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YWEyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy9hZHMxMDE1LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIFBsYXRmb3JtIERhdGEgZm9yIEFEUzEwMTUgMTItYml0IDQtaW5wdXQgQURDCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIERpcmsgRWliYWNoLCBHdW50ZXJtYW5uICYgRHJ1bmNrIEdtYkggPGVpYmFjaEBnZHN5cy5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIExJTlVYX0FEUzEwMTVfSAorI2RlZmluZSBMSU5VWF9BRFMxMDE1X0gKKworI2RlZmluZSBBRFMxMDE1X0NIQU5ORUxTIDgKKworc3RydWN0IGFkczEwMTVfY2hhbm5lbF9kYXRhIHsKKwlib29sIGVuYWJsZWQ7CisJdW5zaWduZWQgaW50IHBnYTsKKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlOworfTsKKworc3RydWN0IGFkczEwMTVfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IGFkczEwMTVfY2hhbm5lbF9kYXRhIGNoYW5uZWxfZGF0YVtBRFMxMDE1X0NIQU5ORUxTXTsKK307CisKKyNlbmRpZiAvKiBMSU5VWF9BRFMxMDE1X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL2F0bWVsX214dF90cy5oIGIvaW5jbHVkZS9saW51eC9pMmMvYXRtZWxfbXh0X3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyN2Y3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL2F0bWVsX214dF90cy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBBdG1lbCBtYVhUb3VjaCBUb3VjaHNjcmVlbiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0FUTUVMX01YVF9UU19ICisjZGVmaW5lIF9fTElOVVhfQVRNRUxfTVhUX1RTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIE9yaWVudCAqLworI2RlZmluZSBNWFRfTk9STUFMCQkweDAKKyNkZWZpbmUgTVhUX0RJQUdPTkFMCQkweDEKKyNkZWZpbmUgTVhUX0hPUklaT05UQUxfRkxJUAkweDIKKyNkZWZpbmUgTVhUX1JPVEFURURfOTBfQ09VTlRFUgkweDMKKyNkZWZpbmUgTVhUX1ZFUlRJQ0FMX0ZMSVAJMHg0CisjZGVmaW5lIE1YVF9ST1RBVEVEXzkwCQkweDUKKyNkZWZpbmUgTVhUX1JPVEFURURfMTgwCQkweDYKKyNkZWZpbmUgTVhUX0RJQUdPTkFMX0NPVU5URVIJMHg3CisKKy8qIFRoZSBwbGF0Zm9ybSBkYXRhIGZvciB0aGUgQXRtZWwgbWFYVG91Y2ggdG91Y2hzY3JlZW4gZHJpdmVyICovCitzdHJ1Y3QgbXh0X3BsYXRmb3JtX2RhdGEgeworCWNvbnN0IHU4ICpjb25maWc7CisJc2l6ZV90IGNvbmZpZ19sZW5ndGg7CisKKwl1bnNpZ25lZCBpbnQgeF9saW5lOworCXVuc2lnbmVkIGludCB5X2xpbmU7CisJdW5zaWduZWQgaW50IHhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgeV9zaXplOworCXVuc2lnbmVkIGludCBibGVuOworCXVuc2lnbmVkIGludCB0aHJlc2hvbGQ7CisJdW5zaWduZWQgaW50IHZvbHRhZ2U7CisJdW5zaWduZWQgY2hhciBvcmllbnQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX0FUTUVMX01YVF9UU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy9tY3MuaCBiL2luY2x1ZGUvbGludXgvaTJjL21jcy5oCmluZGV4IDcyNWFlN2MuLjYxYmIxOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL21jcy5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL21jcy5oCkBAIC0xOCw2ICsxOCw3IEBACiAjZGVmaW5lIE1DU19LRVlfQ09ERSh2KQkJKCh2KSAmIDB4ZmZmZikKIAogc3RydWN0IG1jc19wbGF0Zm9ybV9kYXRhIHsKKwl2b2lkICgqcG93ZXJvbikoYm9vbCk7CiAJdm9pZCAoKmNmZ19waW4pKHZvaWQpOwogCiAJLyogdG91Y2hzY3JlZW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjL3B4YS1pMmMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L2kyYy5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L2kyYy9weGEtaTJjLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3F0NjAyMjQwX3RzLmggYi9pbmNsdWRlL2xpbnV4L2kyYy9xdDYwMjI0MF90cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTAzM2UxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3F0NjAyMjQwX3RzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogQVQ0MlFUNjAyMjQwL0FUTVhUMjI0IFRvdWNoc2NyZWVuIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAotICogQXV0aG9yOiBKb29ueW91bmcgU2hpbSA8ankwOTIyLnNoaW1Ac2Ftc3VuZy5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9fTElOVVhfUVQ2MDIyNDBfVFNfSAotI2RlZmluZSBfX0xJTlVYX1FUNjAyMjQwX1RTX0gKLQotLyogT3JpZW50ICovCi0jZGVmaW5lIFFUNjAyMjQwX05PUk1BTAkJCTB4MAotI2RlZmluZSBRVDYwMjI0MF9ESUFHT05BTAkJMHgxCi0jZGVmaW5lIFFUNjAyMjQwX0hPUklaT05UQUxfRkxJUAkweDIKLSNkZWZpbmUgUVQ2MDIyNDBfUk9UQVRFRF85MF9DT1VOVEVSCTB4MwotI2RlZmluZSBRVDYwMjI0MF9WRVJUSUNBTF9GTElQCQkweDQKLSNkZWZpbmUgUVQ2MDIyNDBfUk9UQVRFRF85MAkJMHg1Ci0jZGVmaW5lIFFUNjAyMjQwX1JPVEFURURfMTgwCQkweDYKLSNkZWZpbmUgUVQ2MDIyNDBfRElBR09OQUxfQ09VTlRFUgkweDcKLQotLyogVGhlIHBsYXRmb3JtIGRhdGEgZm9yIHRoZSBBVDQyUVQ2MDIyNDAvQVRNWFQyMjQgdG91Y2hzY3JlZW4gZHJpdmVyICovCi1zdHJ1Y3QgcXQ2MDIyNDBfcGxhdGZvcm1fZGF0YSB7Ci0JdW5zaWduZWQgaW50IHhfbGluZTsKLQl1bnNpZ25lZCBpbnQgeV9saW5lOwotCXVuc2lnbmVkIGludCB4X3NpemU7Ci0JdW5zaWduZWQgaW50IHlfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgYmxlbjsKLQl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOwotCXVuc2lnbmVkIGludCB2b2x0YWdlOwotCXVuc2lnbmVkIGNoYXIgb3JpZW50OwotfTsKLQotI2VuZGlmIC8qIF9fTElOVVhfUVQ2MDIyNDBfVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAppbmRleCBhNGJkMDViLi41OGFmZDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaApAQCAtNjM5LDcgKzYzOSw2IEBACiBleHRlcm4gaW50IHR3bDQwMzBfcmVtb3ZlX3NjcmlwdCh1OCBmbGFncyk7CiAKIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgewotCXVuc2lnbmVkIGludCBhdWRpb19tY2xrOyAvKiBub3QgdXNlZCwgd2lsbCBiZSByZW1vdmVkICovCiAJdW5zaWduZWQgaW50IGRpZ2ltaWNfZGVsYXk7IC8qIGluIG1zICovCiAJdW5zaWduZWQgaW50IHJhbXBfZGVsYXlfdmFsdWU7CiAJdW5zaWduZWQgaW50IG9mZnNldF9jbmNsX3BhdGg7CkBAIC02NTAsNyArNjQ5LDYgQEAKIH07CiAKIHN0cnVjdCB0d2w0MDMwX2NvZGVjX3ZpYnJhX2RhdGEgewotCXVuc2lnbmVkIGludAlhdWRpb19tY2xrOwogCXVuc2lnbmVkIGludAljb2V4aXN0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wcHAuaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwLmgKaW5kZXggZmNlZjEwMy4uYzlhZDM4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wcHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BwcC5oCkBAIC0xMTQsMTQgKzExNCwxNCBAQAogCV9fdTE2CQl0dW5uZWxfaWQ7CS8qIHJlZHVuZGFudCAqLwogCV9fdTE2CQlzZXNzaW9uX2lkOwkvKiBpZiB6ZXJvLCBnZXQgdHVubmVsIHN0YXRzICovCiAJX191MzIJCXVzaW5nX2lwc2VjOjE7CS8qIHZhbGlkIG9ubHkgZm9yIHNlc3Npb25faWQgPT0gMCAqLwotCWFsaWduZWRfdTY0CXR4X3BhY2tldHM7Ci0JYWxpZ25lZF91NjQJdHhfYnl0ZXM7Ci0JYWxpZ25lZF91NjQJdHhfZXJyb3JzOwotCWFsaWduZWRfdTY0CXJ4X3BhY2tldHM7Ci0JYWxpZ25lZF91NjQJcnhfYnl0ZXM7Ci0JYWxpZ25lZF91NjQJcnhfc2VxX2Rpc2NhcmRzOwotCWFsaWduZWRfdTY0CXJ4X29vc19wYWNrZXRzOwotCWFsaWduZWRfdTY0CXJ4X2Vycm9yczsKKwlfX2FsaWduZWRfdTY0CXR4X3BhY2tldHM7CisJX19hbGlnbmVkX3U2NAl0eF9ieXRlczsKKwlfX2FsaWduZWRfdTY0CXR4X2Vycm9yczsKKwlfX2FsaWduZWRfdTY0CXJ4X3BhY2tldHM7CisJX19hbGlnbmVkX3U2NAlyeF9ieXRlczsKKwlfX2FsaWduZWRfdTY0CXJ4X3NlcV9kaXNjYXJkczsKKwlfX2FsaWduZWRfdTY0CXJ4X29vc19wYWNrZXRzOworCV9fYWxpZ25lZF91NjQJcnhfZXJyb3JzOwogfTsKIAogI2RlZmluZSBpZnJfX25hbWUgICAgICAgYi5pZnJfaWZybi5pZnJuX25hbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQtcG9sbGRldi5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC1wb2xsZGV2LmgKaW5kZXggNWUzZGRkZi4uY2UwYjcyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC1wb2xsZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC1wb2xsZGV2LmgKQEAgLTIyLDEyICsyMiwxMiBAQAogICogQHBvbGw6IGRyaXZlci1zdXBwbGllZCBtZXRob2QgdGhhdCBwb2xscyB0aGUgZGV2aWNlIGFuZCBwb3N0cwogICoJaW5wdXQgZXZlbnRzIChtYW5kYXRvcnkpLgogICogQHBvbGxfaW50ZXJ2YWw6IHNwZWNpZmllcyBob3cgb2Z0ZW4gdGhlIHBvbGwoKSBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZC4KLSAqCURlZmF1bHRzIHRvIDUwMCBtc2VjIHVubGVzcyBvdmVycmlkZW4gd2hlbiByZWdpc3RlcmluZyB0aGUgZGV2aWNlLgorICoJRGVmYXVsdHMgdG8gNTAwIG1zZWMgdW5sZXNzIG92ZXJyaWRkZW4gd2hlbiByZWdpc3RlcmluZyB0aGUgZGV2aWNlLgogICogQHBvbGxfaW50ZXJ2YWxfbWF4OiBzcGVjaWZpZXMgdXBwZXIgYm91bmQgZm9yIHRoZSBwb2xsIGludGVydmFsLgogICoJRGVmYXVsdHMgdG8gdGhlIGluaXRpYWwgdmFsdWUgb2YgQHBvbGxfaW50ZXJ2YWwuCiAgKiBAcG9sbF9pbnRlcnZhbF9taW46IHNwZWNpZmllcyBsb3dlciBib3VuZCBmb3IgdGhlIHBvbGwgaW50ZXJ2YWwuCiAgKglEZWZhdWx0cyB0byAwLgotICogQGlucHV0OiBpbnB1dCBkZXZpY2Ugc3RydWN0aXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9sbGVkIGRldmljZS4KKyAqIEBpbnB1dDogaW5wdXQgZGV2aWNlIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBvbGxlZCBkZXZpY2UuCiAgKglNdXN0IGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBkcml2ZXIgKGlkLCBuYW1lLCBwaHlzLCBiaXRzKS4KICAqCiAgKiBQb2xsZWQgaW5wdXQgZGV2aWNlIHByb3ZpZGVzIGEgc2tlbGV0b24gZm9yIHN1cHBvcnRpbmcgc2ltcGxlIGlucHV0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggZTQyODM4Mi4uMDU2YWU4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMTE1NCw4ICsxMTU0LDYgQEAKICAqCXNwYXJzZSBrZXltYXBzLiBJZiBub3Qgc3VwcGxpZWQgZGVmYXVsdCBtZWNoYW5pc20gd2lsbCBiZSB1c2VkLgogICoJVGhlIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgd2hpbGUgaG9sZGluZyBldmVudF9sb2NrIGFuZCB0aHVzIG11c3QKICAqCW5vdCBzbGVlcAotICogQGdldGtleWNvZGVfbmV3OiB0cmFuc2l0aW9uIG1ldGhvZAotICogQHNldGtleWNvZGVfbmV3OiB0cmFuc2l0aW9uIG1ldGhvZAogICogQGZmOiBmb3JjZSBmZWVkYmFjayBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgaWYgZGV2aWNlCiAgKglzdXBwb3J0cyBmb3JjZSBmZWVkYmFjayBlZmZlY3RzCiAgKiBAcmVwZWF0X2tleTogc3RvcmVzIGtleSBjb2RlIG9mIHRoZSBsYXN0IGtleSBwcmVzc2VkOyB1c2VkIHRvIGltcGxlbWVudApAQCAtMTIzNCwxNCArMTIzMiwxMCBAQAogCXZvaWQgKmtleWNvZGU7CiAKIAlpbnQgKCpzZXRrZXljb2RlKShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCQkgIHVuc2lnbmVkIGludCBzY2FuY29kZSwgdW5zaWduZWQgaW50IGtleWNvZGUpOworCQkJICBjb25zdCBzdHJ1Y3QgaW5wdXRfa2V5bWFwX2VudHJ5ICprZSwKKwkJCSAgdW5zaWduZWQgaW50ICpvbGRfa2V5Y29kZSk7CiAJaW50ICgqZ2V0a2V5Y29kZSkoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkJICB1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCAqa2V5Y29kZSk7Ci0JaW50ICgqc2V0a2V5Y29kZV9uZXcpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkgKmtlLAotCQkJICAgICAgdW5zaWduZWQgaW50ICpvbGRfa2V5Y29kZSk7Ci0JaW50ICgqZ2V0a2V5Y29kZV9uZXcpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkgKmtlKTsKKwkJCSAgc3RydWN0IGlucHV0X2tleW1hcF9lbnRyeSAqa2UpOwogCiAJc3RydWN0IGZmX2RldmljZSAqZmY7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBjX25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC9pcGNfbmFtZXNwYWNlLmgKaW5kZXggNTE5NTI5OC4uYTZkMTY1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcGNfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcGNfbmFtZXNwYWNlLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KIAogLyoKICAqIGlwYyBuYW1lc3BhY2UgZXZlbnRzCkBAIC0xNSw2ICsxNiw3IEBACiAKICNkZWZpbmUgSVBDTlNfQ0FMTEJBQ0tfUFJJIDAKIAorc3RydWN0IHVzZXJfbmFtZXNwYWNlOwogCiBzdHJ1Y3QgaXBjX2lkcyB7CiAJaW50IGluX3VzZTsKQEAgLTU2LDYgKzU4LDggQEAKIAl1bnNpZ25lZCBpbnQgICAgbXFfbXNnX21heDsgICAgICAvKiBpbml0aWFsaXplZCB0byBERkxUX01TR01BWCAqLwogCXVuc2lnbmVkIGludCAgICBtcV9tc2dzaXplX21heDsgIC8qIGluaXRpYWxpemVkIHRvIERGTFRfTVNHU0laRU1BWCAqLwogCisJLyogdXNlcl9ucyB3aGljaCBvd25zIHRoZSBpcGMgbnMgKi8KKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7CiB9OwogCiBleHRlcm4gc3RydWN0IGlwY19uYW1lc3BhY2UgaW5pdF9pcGNfbnM7CkBAIC05MCw3ICs5NCw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19JUENfTlMpCiBleHRlcm4gc3RydWN0IGlwY19uYW1lc3BhY2UgKmNvcHlfaXBjcyh1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJCSAgICAgICBzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpOworCQkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGNfbmFtZXNwYWNlICpnZXRfaXBjX25zKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucykKIHsKIAlpZiAobnMpCkBAIC0xMDEsMTIgKzEwNSwxMiBAQAogZXh0ZXJuIHZvaWQgcHV0X2lwY19ucyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwY19uYW1lc3BhY2UgKmNvcHlfaXBjcyh1bnNpZ25lZCBsb25nIGZsYWdzLAotCQlzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpCisJCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCWlmIChmbGFncyAmIENMT05FX05FV0lQQykKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlyZXR1cm4gbnM7CisJcmV0dXJuIHRzay0+bnNwcm94eS0+aXBjX25zOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGNfbmFtZXNwYWNlICpnZXRfaXBjX25zKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2JkX2tlcm4uaCBiL2luY2x1ZGUvbGludXgva2JkX2tlcm4uaAppbmRleCA0YjA3NjFjLi5lYzJkMTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oCkBAIC0xNTksNyArMTU5LDcgQEAKIAlpZiAodC0+YnVmLnRhaWwgIT0gTlVMTCkKIAkJdC0+YnVmLnRhaWwtPmNvbW1pdCA9IHQtPmJ1Zi50YWlsLT51c2VkOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPmJ1Zi5sb2NrLCBmbGFncyk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0LT5idWYud29yaywgMCk7CisJc2NoZWR1bGVfd29yaygmdC0+YnVmLndvcmspOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDJmZTZlODQuLjAwY2VjNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTg3LDE0ICsxODcsNzYgQEAKIAlBVFRSSUJfTk9SRVQ7CiBOT1JFVF9UWVBFIHZvaWQgY29tcGxldGVfYW5kX2V4aXQoc3RydWN0IGNvbXBsZXRpb24gKiwgbG9uZykKIAlBVFRSSUJfTk9SRVQ7CisKKy8qIEludGVybmFsLCBkbyBub3QgdXNlLiAqLworaW50IF9fbXVzdF9jaGVjayBfa3N0cnRvdWwoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGxvbmcgKnJlcyk7CitpbnQgX19tdXN0X2NoZWNrIF9rc3RydG9sKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCBsb25nICpyZXMpOworCitpbnQgX19tdXN0X2NoZWNrIGtzdHJ0b3VsbChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nICpyZXMpOworaW50IF9fbXVzdF9jaGVjayBrc3RydG9sbChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgbG9uZyBsb25nICpyZXMpOworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGtzdHJ0b3VsKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBsb25nICpyZXMpCit7CisJLyoKKwkgKiBXZSB3YW50IHRvIHNob3J0Y3V0IGZ1bmN0aW9uIGNhbGwsIGJ1dAorCSAqIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKSA9IDAuCisJICovCisJaWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA9PSBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSAmJgorCSAgICBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nKSA9PSBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpKQorCQlyZXR1cm4ga3N0cnRvdWxsKHMsIGJhc2UsICh1bnNpZ25lZCBsb25nIGxvbmcgKilyZXMpOworCWVsc2UKKwkJcmV0dXJuIF9rc3RydG91bChzLCBiYXNlLCByZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sga3N0cnRvbChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgbG9uZyAqcmVzKQoreworCS8qCisJICogV2Ugd2FudCB0byBzaG9ydGN1dCBmdW5jdGlvbiBjYWxsLCBidXQKKwkgKiBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKGxvbmcsIGxvbmcgbG9uZykgPSAwLgorCSAqLworCWlmIChzaXplb2YobG9uZykgPT0gc2l6ZW9mKGxvbmcgbG9uZykgJiYKKwkgICAgX19hbGlnbm9mX18obG9uZykgPT0gX19hbGlnbm9mX18obG9uZyBsb25nKSkKKwkJcmV0dXJuIGtzdHJ0b2xsKHMsIGJhc2UsIChsb25nIGxvbmcgKilyZXMpOworCWVsc2UKKwkJcmV0dXJuIF9rc3RydG9sKHMsIGJhc2UsIHJlcyk7Cit9CisKK2ludCBfX211c3RfY2hlY2sga3N0cnRvdWludChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50ICpyZXMpOworaW50IF9fbXVzdF9jaGVjayBrc3RydG9pbnQoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGJhc2UsIGludCAqcmVzKTsKKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGtzdHJ0b3U2NChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgdTY0ICpyZXMpCit7CisJcmV0dXJuIGtzdHJ0b3VsbChzLCBiYXNlLCByZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sga3N0cnRvczY0KGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCBzNjQgKnJlcykKK3sKKwlyZXR1cm4ga3N0cnRvbGwocywgYmFzZSwgcmVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGtzdHJ0b3UzMihjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgdTMyICpyZXMpCit7CisJcmV0dXJuIGtzdHJ0b3VpbnQocywgYmFzZSwgcmVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGtzdHJ0b3MzMihjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgczMyICpyZXMpCit7CisJcmV0dXJuIGtzdHJ0b2ludChzLCBiYXNlLCByZXMpOworfQorCitpbnQgX19tdXN0X2NoZWNrIGtzdHJ0b3UxNihjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgdTE2ICpyZXMpOworaW50IF9fbXVzdF9jaGVjayBrc3RydG9zMTYoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGJhc2UsIHMxNiAqcmVzKTsKK2ludCBfX211c3RfY2hlY2sga3N0cnRvdTgoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGJhc2UsIHU4ICpyZXMpOworaW50IF9fbXVzdF9jaGVjayBrc3RydG9zOChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgczggKnJlcyk7CisKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNpbXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CiBleHRlcm4gbG9uZyBzaW1wbGVfc3RydG9sKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHNpbXBsZV9zdHJ0b3VsbChjb25zdCBjaGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGxvbmcgbG9uZyBzaW1wbGVfc3RydG9sbChjb25zdCBjaGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgc3RyaWN0X3N0cnRvdWwoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcgKik7Ci1leHRlcm4gaW50IF9fbXVzdF9jaGVjayBzdHJpY3Rfc3RydG9sKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCBsb25nICopOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgc3RyaWN0X3N0cnRvdWxsKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nIGxvbmcgKik7Ci1leHRlcm4gaW50IF9fbXVzdF9jaGVjayBzdHJpY3Rfc3RydG9sbChjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgbG9uZyBsb25nICopOworI2RlZmluZSBzdHJpY3Rfc3RydG91bAlrc3RydG91bAorI2RlZmluZSBzdHJpY3Rfc3RydG9sCWtzdHJ0b2wKKyNkZWZpbmUgc3RyaWN0X3N0cnRvdWxsCWtzdHJ0b3VsbAorI2RlZmluZSBzdHJpY3Rfc3RydG9sbAlrc3RydG9sbAorCiBleHRlcm4gaW50IHNwcmludGYoY2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKIGV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICosIHZhX2xpc3QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaCBiL2luY2x1ZGUvbGludXgva3RocmVhZC5oCmluZGV4IDdmZjE2ZjcuLjFlOTIzZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3RocmVhZC5oCisrKyBiL2luY2x1ZGUvbGludXgva3RocmVhZC5oCkBAIC00LDEwICs0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkX2NyZWF0ZShpbnQgKCp0aHJlYWRmbikodm9pZCAqZGF0YSksCi0JCQkJICAgdm9pZCAqZGF0YSwKLQkJCQkgICBjb25zdCBjaGFyIG5hbWVmbXRbXSwgLi4uKQotCV9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDMsIDQpKSk7CitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWRfY3JlYXRlX29uX25vZGUoaW50ICgqdGhyZWFkZm4pKHZvaWQgKmRhdGEpLAorCQkJCQkgICB2b2lkICpkYXRhLAorCQkJCQkgICBpbnQgbm9kZSwKKwkJCQkJICAgY29uc3QgY2hhciBuYW1lZm10W10sIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCA0LCA1KSkpOworCisjZGVmaW5lIGt0aHJlYWRfY3JlYXRlKHRocmVhZGZuLCBkYXRhLCBuYW1lZm10LCBhcmcuLi4pIFwKKwlrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKHRocmVhZGZuLCBkYXRhLCAtMSwgbmFtZWZtdCwgIyNhcmcpCisKIAogLyoqCiAgKiBrdGhyZWFkX3J1biAtIGNyZWF0ZSBhbmQgd2FrZSBhIHRocmVhZC4KQEAgLTM0LDYgKzM5LDcgQEAKIAogaW50IGt0aHJlYWRkKHZvaWQgKnVudXNlZCk7CiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkZF90YXNrOworZXh0ZXJuIGludCB0c2tfZm9ya19nZXRfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAKIC8qCiAgKiBTaW1wbGUgd29yayBwcm9jZXNzb3IgYmFzZWQgb24ga3RocmVhZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkLWxtMzUzMC5oIGIvaW5jbHVkZS9saW51eC9sZWQtbG0zNTMwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2OWQyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbGVkLWxtMzUzMC5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNULUVyaWNzc29uIFNBLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1vdG9yb2xhLCBJbmMuCisgKgorICogTGljZW5zZSBUZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKKyAqCisgKiBTaW1wbGUgZHJpdmVyIGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNMzUzMzAgQmFja2xpZ2h0IGRyaXZlciBjaGlwCisgKgorICogQXV0aG9yOiBTaHJlc2h0aGEgS3VtYXIgU0FIVSA8c2hyZXNodGhha3VtYXIuc2FodUBzdGVyaWNzc29uLmNvbT4KKyAqIGJhc2VkIG9uIGxlZHMtbG0zNTMwLmMgYnkgRGFuIE11cnBoeSA8RC5NdXJwaHlAbW90b3JvbGEuY29tPgorICovCisKKyNpZm5kZWYgX0xJTlVYX0xFRF9MTTM1MzBfSF9fCisjZGVmaW5lIF9MSU5VWF9MRURfTE0zNTMwX0hfXworCisjZGVmaW5lIExNMzUzMF9GU19DVVJSXzVtQQkJKDApIC8qIEZ1bGwgU2NhbGUgQ3VycmVudCAqLworI2RlZmluZSBMTTM1MzBfRlNfQ1VSUl84bUEJCSgxKQorI2RlZmluZSBMTTM1MzBfRlNfQ1VSUl8xMm1BCQkoMikKKyNkZWZpbmUgTE0zNTMwX0ZTX0NVUlJfMTVtQQkJKDMpCisjZGVmaW5lIExNMzUzMF9GU19DVVJSXzE5bUEJCSg0KQorI2RlZmluZSBMTTM1MzBfRlNfQ1VSUl8yMm1BCQkoNSkKKyNkZWZpbmUgTE0zNTMwX0ZTX0NVUlJfMjZtQQkJKDYpCisjZGVmaW5lIExNMzUzMF9GU19DVVJSXzI5bUEJCSg3KQorCisjZGVmaW5lIExNMzUzMF9BTFNfQVZSR19USU1FXzMybXMJKDApIC8qIEFMUyBBdmVyYWdpbmcgVGltZSAqLworI2RlZmluZSBMTTM1MzBfQUxTX0FWUkdfVElNRV82NG1zCSgxKQorI2RlZmluZSBMTTM1MzBfQUxTX0FWUkdfVElNRV8xMjhtcwkoMikKKyNkZWZpbmUgTE0zNTMwX0FMU19BVlJHX1RJTUVfMjU2bXMJKDMpCisjZGVmaW5lIExNMzUzMF9BTFNfQVZSR19USU1FXzUxMm1zCSg0KQorI2RlZmluZSBMTTM1MzBfQUxTX0FWUkdfVElNRV8xMDI0bXMJKDUpCisjZGVmaW5lIExNMzUzMF9BTFNfQVZSR19USU1FXzIwNDhtcwkoNikKKyNkZWZpbmUgTE0zNTMwX0FMU19BVlJHX1RJTUVfNDA5Nm1zCSg3KQorCisjZGVmaW5lIExNMzUzMF9SQU1QX1RJTUVfMW1zCQkoMCkgLyogQnJpZ3RuZXNzIFJhbXAgVGltZSAqLworI2RlZmluZSBMTTM1MzBfUkFNUF9USU1FXzEzMG1zCQkoMSkgLyogTWF4IHRvIDAgYW5kIHZpY2UgdmVyc2EgKi8KKyNkZWZpbmUgTE0zNTMwX1JBTVBfVElNRV8yNjBtcwkJKDIpCisjZGVmaW5lIExNMzUzMF9SQU1QX1RJTUVfNTIwbXMJCSgzKQorI2RlZmluZSBMTTM1MzBfUkFNUF9USU1FXzFzCQkoNCkKKyNkZWZpbmUgTE0zNTMwX1JBTVBfVElNRV8ycwkJKDUpCisjZGVmaW5lIExNMzUzMF9SQU1QX1RJTUVfNHMJCSg2KQorI2RlZmluZSBMTTM1MzBfUkFNUF9USU1FXzhzCQkoNykKKworLyogQUxTIFJlc2lzdG9yIFNlbGVjdCAqLworI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfWgkJKDB4MDApIC8qIEFMUyBJbXBlZGVuY2UgKi8KKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBEXzEzXzUza09obQkoMHgwMSkKKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBEXzlfMDFrT2htCSgweDAyKQorI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfNV80MWtPaG0JKDB4MDMpCisjZGVmaW5lIExNMzUzMF9BTFNfSU1QRF8yXzI3a09obQkoMHgwNCkKKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBEXzFfOTRrT2htCSgweDA1KQorI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfMV84MWtPaG0JKDB4MDYpCisjZGVmaW5lIExNMzUzMF9BTFNfSU1QRF8xXzZrT2htCQkoMHgwNykKKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBEXzFfMTM4a09obQkoMHgwOCkKKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBEXzFfMDVrT2htCSgweDA5KQorI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfMV8wMTFrT2htCSgweDBBKQorI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfOTQxT2htCQkoMHgwQikKKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBEXzc1OU9obQkJKDB4MEMpCisjZGVmaW5lIExNMzUzMF9BTFNfSU1QRF83MTlPaG0JCSgweDBEKQorI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfNzAwT2htCQkoMHgwRSkKKyNkZWZpbmUgTE0zNTMwX0FMU19JTVBEXzY2N09obQkJKDB4MEYpCisKK2VudW0gbG0zNTMwX21vZGUgeworCUxNMzUzMF9CTF9NT0RFX01BTlVBTCA9IDAsCS8qICJtYW4iICovCisJTE0zNTMwX0JMX01PREVfQUxTLAkJLyogImFscyIgKi8KKwlMTTM1MzBfQkxfTU9ERV9QV00sCQkvKiAicHdtIiAqLworfTsKKworLyogQUxTIGlucHV0IHNlbGVjdCAqLworZW51bSBsbTM1MzBfYWxzX21vZGUgeworCUxNMzUzMF9JTlBVVF9BVlJHID0gMCwJLyogQUxTMSBhbmQgQUxTMiBpbnB1dCBhdmVyYWdlICovCisJTE0zNTMwX0lOUFVUX0FMUzEsCS8qIEFMUzEgSW5wdXQgKi8KKwlMTTM1MzBfSU5QVVRfQUxTMiwJLyogQUxTMiBJbnB1dCAqLworCUxNMzUzMF9JTlBVVF9DRUlMLAkvKiBNYXggb2YgQUxTMSBhbmQgQUxTMiAqLworfTsKKworLyoqCisgKiBzdHJ1Y3QgbG0zNTMwX3BsYXRmb3JtX2RhdGEKKyAqIEBtb2RlOiBtb2RlIG9mIG9wZXJhdGlvbiBpLmUuIE1hbnVhbCwgQUxTIG9yIFBXTQorICogQGFsc19pbnB1dF9tb2RlOiBzZWxlY3Qgc291cmNlIG9mIEFMUyBpbnB1dCAtIEFMUzEvMiBvciBhdmVyYWdlCisgKiBAbWF4X2N1cnJlbnQ6IGZ1bGwgc2NhbGUgTEVEIGN1cnJlbnQKKyAqIEBwd21fcG9sX2hpOiBQV00gaW5wdXQgcG9sYXJpdHkgLSBhY3RpdmUgaGlnaC9hY3RpdmUgbG93CisgKiBAYWxzX2F2cmdfdGltZTogQUxTIGlucHV0IGF2ZXJhZ2luZyB0aW1lCisgKiBAYnJ0X3JhbXBfbGF3OiBicmlnaHRuZXNzIG1hcHBpbmcgbW9kZSAtIGV4cG9uZW50aWFsL2xpbmVhcgorICogQGJydF9yYW1wX2ZhbGw6IHJhdGUgb2YgZmFsbCBvZiBsZWQgY3VycmVudAorICogQGJydF9yYW1wX3Jpc2U6IHJhdGUgb2YgcmlzZSBvZiBsZWQgY3VycmVudAorICogQGFsczFfcmVzaXN0b3Jfc2VsOiBpbnRlcm5hbCByZXNpc3RhbmNlIGZyb20gQUxTMSBpbnB1dCB0byBncm91bmQKKyAqIEBhbHMyX3Jlc2lzdG9yX3NlbDogaW50ZXJuYWwgcmVzaXN0YW5jZSBmcm9tIEFMUzIgaW5wdXQgdG8gZ3JvdW5kCisgKiBAYnJ0X3ZhbDogYnJpZ2h0bmVzcyB2YWx1ZSAoMC0yNTUpCisgKi8KK3N0cnVjdCBsbTM1MzBfcGxhdGZvcm1fZGF0YSB7CisJZW51bSBsbTM1MzBfbW9kZSBtb2RlOworCWVudW0gbG0zNTMwX2Fsc19tb2RlIGFsc19pbnB1dF9tb2RlOworCisJdTggbWF4X2N1cnJlbnQ7CisJYm9vbCBwd21fcG9sX2hpOworCXU4IGFsc19hdnJnX3RpbWU7CisKKwlib29sIGJydF9yYW1wX2xhdzsKKwl1OCBicnRfcmFtcF9mYWxsOworCXU4IGJydF9yYW1wX3Jpc2U7CisKKwl1OCBhbHMxX3Jlc2lzdG9yX3NlbDsKKwl1OCBhbHMyX3Jlc2lzdG9yX3NlbDsKKworCXU4IGJydF92YWw7Cit9OworCisjZW5kaWYJLyogX0xJTlVYX0xFRF9MTTM1MzBfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMuaCBiL2luY2x1ZGUvbGludXgvbGVkcy5oCmluZGV4IDBmMTlkZjkuLjM4MzgxMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGVkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oCkBAIC0xOTQsMTEgKzE5NCwxMSBAQAogCiBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSB7CiAJaW50IAkJbnVtX2xlZHM7Ci0Jc3RydWN0IGdwaW9fbGVkICpsZWRzOworCWNvbnN0IHN0cnVjdCBncGlvX2xlZCAqbGVkczsKIAogI2RlZmluZSBHUElPX0xFRF9OT19CTElOS19MT1cJMAkvKiBObyBibGluayBHUElPIHN0YXRlIGxvdyAqLwogI2RlZmluZSBHUElPX0xFRF9OT19CTElOS19ISUdICTEJLyogTm8gYmxpbmsgR1BJTyBzdGF0ZSBoaWdoICovCi0jZGVmaW5lIEdQSU9fTEVEX0JMSU5LCQkyCS8qIFBsYXNlLCBibGluayAqLworI2RlZmluZSBHUElPX0xFRF9CTElOSwkJMgkvKiBQbGVhc2UsIGJsaW5rICovCiAJaW50CQkoKmdwaW9fYmxpbmtfc2V0KSh1bnNpZ25lZCBncGlvLCBpbnQgc3RhdGUsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAogCQkJCQl1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCmluZGV4IDZjZmUzNDQuLjFlNWRmMmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIFhFTkZTX1NVUEVSX01BR0lDCTB4YWJiYTE5NzQKICNkZWZpbmUgRVhUNF9TVVBFUl9NQUdJQwkweEVGNTMKICNkZWZpbmUgQlRSRlNfU1VQRVJfTUFHSUMJMHg5MTIzNjgzRQorI2RlZmluZSBOSUxGU19TVVBFUl9NQUdJQwkweDM0MzQKICNkZWZpbmUgSFBGU19TVVBFUl9NQUdJQwkweGY5OTVlODQ5CiAjZGVmaW5lIElTT0ZTX1NVUEVSX01BR0lDCTB4OTY2MAogI2RlZmluZSBKRkZTMl9TVVBFUl9NQUdJQwkweDcyYjYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZjUxMmUxOC4uNWE1Y2U3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTYyLDYgKzYyLDcgQEAKIAkJCQkJZ2ZwX3QgZ2ZwX21hc2spOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9hZGRfbHJ1X2xpc3Qoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbHJ1KTsKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfZGVsX2xydV9saXN0KHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSk7CitleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3JvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfcm90YXRlX2xydV9saXN0KHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX2RlbF9scnUoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLApAQCAtOTYsNyArOTcsNyBAQAogCiBleHRlcm4gaW50CiBtZW1fY2dyb3VwX3ByZXBhcmVfbWlncmF0aW9uKHN0cnVjdCBwYWdlICpwYWdlLAotCXN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKnB0cik7CisJc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBtZW1fY2dyb3VwICoqcHRyLCBnZnBfdCBnZnBfbWFzayk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX2VuZF9taWdyYXRpb24oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAlzdHJ1Y3QgcGFnZSAqb2xkcGFnZSwgc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIGJvb2wgbWlncmF0aW9uX29rKTsKIApAQCAtMTUwLDYgKzE1MSwxMCBAQAogdm9pZCBtZW1fY2dyb3VwX3NwbGl0X2h1Z2VfZml4dXAoc3RydWN0IHBhZ2UgKmhlYWQsIHN0cnVjdCBwYWdlICp0YWlsKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCitib29sIG1lbV9jZ3JvdXBfYmFkX3BhZ2VfY2hlY2soc3RydWN0IHBhZ2UgKnBhZ2UpOwordm9pZCBtZW1fY2dyb3VwX3ByaW50X2JhZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKyNlbmRpZgogI2Vsc2UgLyogQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIgKi8KIHN0cnVjdCBtZW1fY2dyb3VwOwogCkBAIC0yMTEsNiArMjE2LDExIEBACiAJcmV0dXJuIDsKIH0KIAorc3RhdGljIGlubGluZSBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3JvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3JvdGF0ZV9scnVfbGlzdChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGxydSkKIHsKIAlyZXR1cm4gOwpAQCAtMjQ5LDcgKzI1OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50CiBtZW1fY2dyb3VwX3ByZXBhcmVfbWlncmF0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqKnB0cikKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqKnB0ciwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNDYsNSArMzU2LDE4IEBACiAKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX01FTV9DT05UICovCiAKKyNpZiAhZGVmaW5lZChDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUikgfHwgIWRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKQorc3RhdGljIGlubGluZSBib29sCittZW1fY2dyb3VwX2JhZF9wYWdlX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittZW1fY2dyb3VwX3ByaW50X2JhZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworfQorI2VuZGlmCisKICNlbmRpZiAvKiBfTElOVVhfTUVNQ09OVFJPTF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RpX3NzcC5oIGIvaW5jbHVkZS9saW51eC9tZmQvdGlfc3NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiNGI0MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RpX3NzcC5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBTZXF1ZW5jZXIgU2VyaWFsIFBvcnQgKFNTUCkgZHJpdmVyIGZvciBUZXhhcyBJbnN0cnVtZW50cycgU29DcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX1RJX1NTUF9IX18KKyNkZWZpbmUgX19USV9TU1BfSF9fCisKK3N0cnVjdCB0aV9zc3BfZGV2X2RhdGEgeworCWNvbnN0IGNoYXIJKmRldl9uYW1lOworCXZvaWQJCSpwZGF0YTsKKwlzaXplX3QJCXBkYXRhX3NpemU7Cit9OworCitzdHJ1Y3QgdGlfc3NwX2RhdGEgeworCXVuc2lnbmVkIGxvbmcJCW91dF9jbG9jazsKKwlzdHJ1Y3QgdGlfc3NwX2Rldl9kYXRhCWRldl9kYXRhWzJdOworfTsKKworc3RydWN0IHRpX3NzcF9zcGlfZGF0YSB7CisJdW5zaWduZWQgbG9uZwlpb3NlbDsKKwlpbnQJCW51bV9jczsKKwl2b2lkCQkoKnNlbGVjdCkoaW50IGNzKTsKK307CisKKy8qCisgKiBTZXF1ZW5jZXIgcG9ydCBJTyBwaW4gY29uZmlndXJhdGlvbiBiaXRzLiAgVGhlc2UgZG8gbm90IGNvcnJlbGF0ZSAxLTEgd2l0aAorICogdGhlIGhhcmR3YXJlLiAgVGhlIGlvc2VsIGZpZWxkIGluIHRoZSBwb3J0IGRhdGEgY29tYmluZXMgaW9zZWwxIGFuZCBpb3NlbDIsCisgKiBhbmQgaXMgdGhlcmVmb3JlIG5vdCBhIGRpcmVjdCBtYXAgdG8gcmVnaXN0ZXIgc3BhY2UuICBJdCBpcyBiZXN0IHRvIHVzZSB0aGUKKyAqIG1hY3JvcyBiZWxvdyB0byBjb25zdHJ1Y3QgaW9zZWwgdmFsdWVzLgorICoKKyAqIGxlYXN0IHNpZ25pZmljYW50IDE2IGJpdHMgLS0+IGlvc2VsMQorICogbW9zdCBzaWduaWZpY2FudCAxNiBiaXRzICAtLT4gaW9zZWwyCisgKi8KKworI2RlZmluZSBTU1BfSU4JCQkweDAwMDAKKyNkZWZpbmUgU1NQX0RBVEEJCTB4MDAwMQorI2RlZmluZSBTU1BfQ0xPQ0sJCTB4MDAwMgorI2RlZmluZSBTU1BfQ0hJUFNFTAkJMHgwMDAzCisjZGVmaW5lIFNTUF9PVVQJCQkweDAwMDQKKyNkZWZpbmUgU1NQX1BJTl9TRUwocGluLCB2KQkoKHYpIDw8ICgocGluKSAqIDMpKQorI2RlZmluZSBTU1BfUElOX01BU0socGluKQlTU1BfUElOX1NFTChwaW4sIDB4NykKKyNkZWZpbmUgU1NQX0lOUFVUX1NFTChwaW4pCSgocGluKSA8PCAxNikKKworLyogU2VxdWVuY2VyIHBvcnQgY29uZmlnIGJpdHMgKi8KKyNkZWZpbmUgU1NQX0VBUkxZX0RJTgkJQklUKDgpCisjZGVmaW5lIFNTUF9ERUxBWV9ET1VUCQlCSVQoOSkKKworLyogU2VxdWVuY2UgbWFwIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNTUF9DTEtfSElHSAkJQklUKDApCisjZGVmaW5lIFNTUF9DTEtfTE9XCQkwCisjZGVmaW5lIFNTUF9EQVRBX0hJR0gJCUJJVCgxKQorI2RlZmluZSBTU1BfREFUQV9MT1cJCTAKKyNkZWZpbmUgU1NQX0NTX0hJR0gJCUJJVCgyKQorI2RlZmluZSBTU1BfQ1NfTE9XCQkwCisjZGVmaW5lIFNTUF9PVVRfTU9ERQkJQklUKDMpCisjZGVmaW5lIFNTUF9JTl9NT0RFCQkwCisjZGVmaW5lIFNTUF9EQVRBX1JFRwkJQklUKDQpCisjZGVmaW5lIFNTUF9BRERSX1JFRwkJMAorCisjZGVmaW5lIFNTUF9PUENPREVfRElSRUNUCSgoMHgwKSA8PCA1KQorI2RlZmluZSBTU1BfT1BDT0RFX1RPR0dMRQkoKDB4MSkgPDwgNSkKKyNkZWZpbmUgU1NQX09QQ09ERV9TSElGVAkoKDB4MikgPDwgNSkKKyNkZWZpbmUgU1NQX09QQ09ERV9CUkFOQ0gwCSgoMHg0KSA8PCA1KQorI2RlZmluZSBTU1BfT1BDT0RFX0JSQU5DSDEJKCgweDUpIDw8IDUpCisjZGVmaW5lIFNTUF9PUENPREVfQlJBTkNICSgoMHg2KSA8PCA1KQorI2RlZmluZSBTU1BfT1BDT0RFX1NUT1AJCSgoMHg3KSA8PCA1KQorI2RlZmluZSBTU1BfQlJBTkNIKGFkZHIpCSgoYWRkcikgPDwgOCkKKyNkZWZpbmUgU1NQX0NPVU5UKGN5Y2xlcykJKChjeWNsZXMpIDw8IDgpCisKK2ludCB0aV9zc3BfcmF3X3JlYWQoc3RydWN0IGRldmljZSAqZGV2KTsKK2ludCB0aV9zc3BfcmF3X3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHZhbCk7CitpbnQgdGlfc3NwX2xvYWQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb2ZmcywgdTMyKiBwcm9nLCBpbnQgbGVuKTsKK2ludCB0aV9zc3BfcnVuKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHBjLCB1MzIgaW5wdXQsIHUzMiAqb3V0cHV0KTsKK2ludCB0aV9zc3Bfc2V0X21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSk7CitpbnQgdGlfc3NwX3NldF9pb3NlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBpb3NlbCk7CisKKyNlbmRpZiAvKiBfX1RJX1NTUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9wZGF0YS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKaW5kZXggZmQzMjJhYy4uMTczMDg2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKQEAgLTgwLDcgKzgwLDggQEAKIAlpbnQgaXNlbDsgICAgICAgICAgICAgIC8qKiBDdXJyZW50IGZvciBwZW4gZG93biAodUEpICovCiAJaW50IHJwdTsgICAgICAgICAgICAgICAvKiogUGVuIGRvd24gc2Vuc2l0aXZpdHkgcmVzaXN0b3IgZGl2aWRlciAqLwogCWludCBwcmVzc3VyZTsgICAgICAgICAgLyoqIFJlcG9ydCBwcmVzc3VyZSAoYm9vbGVhbikgKi8KLQlpbnQgZGF0YV9pcnE7ICAgICAgICAgIC8qKiBUb3VjaCBkYXRhIHJlYWR5IElSUSAqLworCXVuc2lnbmVkIGludCBkYXRhX2lycTsgLyoqIFRvdWNoIGRhdGEgcmVhZHkgSVJRICovCisJdW5zaWduZWQgaW50IHBkX2lycTsgICAvKiogVG91Y2ggcGVuZG93biBkZXRlY3QgSVJRICovCiB9OwogCiBlbnVtIHdtODMxeF93YXRjaGRvZ19hY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3BkYXRhLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcGRhdGEuaAppbmRleCA5ZWFiMjYzLi40NjZiMWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcGRhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcGRhdGEuaApAQCAtMTAzLDEzICsxMDMsMjEgQEAKICAgICAgICAgdW5zaWduZWQgaW50IGxpbmVvdXQxZmI6MTsKICAgICAgICAgdW5zaWduZWQgaW50IGxpbmVvdXQyZmI6MTsKIAotICAgICAgICAvKiBNaWNyb3Bob25lIGJpYXNlczogMD0wLjkqQVZERDEgMT0wLjY1KkFWVkQxICovCisJLyogSVJRIGZvciBtaWNyb3Bob25lIGRldGVjdGlvbiBpZiBicm91Z2h0IG91dCBkaXJlY3RseSBhcyBhCisJICogc2lnbmFsLgorCSAqLworCWludCBtaWNkZXRfaXJxOworCisgICAgICAgIC8qIFdNODk5NCBtaWNyb3Bob25lIGJpYXNlczogMD0wLjkqQVZERDEgMT0wLjY1KkFWVkQxICovCiAgICAgICAgIHVuc2lnbmVkIGludCBtaWNiaWFzMV9sdmw6MTsKICAgICAgICAgdW5zaWduZWQgaW50IG1pY2JpYXMyX2x2bDoxOwogCi0gICAgICAgIC8qIEphY2sgZGV0ZWN0IHRocmVhc2hvbGQgbGV2ZWxzLCBzZWUgZGF0YXNoZWV0IGZvciB2YWx1ZXMgKi8KKyAgICAgICAgLyogV004OTk0IGphY2sgZGV0ZWN0IHRocmVhc2hvbGQgbGV2ZWxzLCBzZWUgZGF0YXNoZWV0IGZvciB2YWx1ZXMgKi8KICAgICAgICAgdW5zaWduZWQgaW50IGpkX3NjdGhyOjI7CiAgICAgICAgIHVuc2lnbmVkIGludCBqZF90aHI6MjsKKworCS8qIFdNODk1OCBtaWNyb3Bob25lIGJpYXMgY29uZmlndXJhdGlvbiAqLworCWludCBtaWNiaWFzWzJdOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmgKaW5kZXggYmUwNzJmYS4uZjNlZTg0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaApAQCAtNjMsNiArNjMsOCBAQAogI2RlZmluZSBXTTg5OTRfTUlDQklBUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQQogI2RlZmluZSBXTTg5OTRfTERPXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQgogI2RlZmluZSBXTTg5OTRfTERPXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQworI2RlZmluZSBXTTg5NThfTUlDQklBUzEJCQkJMHgzRAorI2RlZmluZSBXTTg5NThfTUlDQklBUzIJCQkJMHgzRQogI2RlZmluZSBXTTg5OTRfQ0hBUkdFX1BVTVBfMSAgICAgICAgICAgICAgICAgICAgMHg0QwogI2RlZmluZSBXTTg5NThfQ0hBUkdFX1BVTVBfMiAgICAgICAgICAgICAgICAgICAgMHg0RAogI2RlZmluZSBXTTg5OTRfQ0xBU1NfV18xICAgICAgICAgICAgICAgICAgICAgICAgMHg1MQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDU4MTcwM2QuLjI5NDEwNGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xNTEsNiArMTUxLDcgQEAKICNkZWZpbmUgRkFVTFRfRkxBR19OT05MSU5FQVIJMHgwMgkvKiBGYXVsdCB3YXMgdmlhIGEgbm9ubGluZWFyIG1hcHBpbmcgKi8KICNkZWZpbmUgRkFVTFRfRkxBR19NS1dSSVRFCTB4MDQJLyogRmF1bHQgd2FzIG1rd3JpdGUgb2YgZXhpc3RpbmcgcHRlICovCiAjZGVmaW5lIEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkJMHgwOAkvKiBSZXRyeSBmYXVsdCBpZiBibG9ja2luZyAqLworI2RlZmluZSBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVAkweDEwCS8qIERvbid0IGRyb3AgbW1hcF9zZW0gYW5kIHdhaXQgd2hlbiByZXRyeWluZyAqLwogCiAvKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSB4ODYgUEFUIGNvZGUgdG8gaWRlbnRpZnkgYSBwZm4gbWFwcGluZyB0aGF0IGlzCkBAIC04NTksNyArODYwLDE0IEBACiAKICNkZWZpbmUgb2Zmc2V0X2luX3BhZ2UocCkJKCh1bnNpZ25lZCBsb25nKShwKSAmIH5QQUdFX01BU0spCiAKKy8qCisgKiBGbGFncyBwYXNzZWQgdG8gX19zaG93X21lbSgpIGFuZCBfX3Nob3dfZnJlZV9hcmVhcygpIHRvIHN1cHByZXNzIG91dHB1dCBpbgorICogdmFyaW91cyBjb250ZXh0cy4KKyAqLworI2RlZmluZSBTSE9XX01FTV9GSUxURVJfTk9ERVMJKDB4MDAwMXUpCS8qIGZpbHRlciBkaXNhbGxvd2VkIG5vZGVzICovCisKIGV4dGVybiB2b2lkIHNob3dfZnJlZV9hcmVhcyh2b2lkKTsKK2V4dGVybiB2b2lkIF9fc2hvd19mcmVlX2FyZWFzKHVuc2lnbmVkIGludCBmbGFncyk7CiAKIGludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKIHN0cnVjdCBmaWxlICpzaG1lbV9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIGxvZmZfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKQEAgLTkwNiw2ICs5MTQsOSBAQAogICogQHBnZF9lbnRyeTogaWYgc2V0LCBjYWxsZWQgZm9yIGVhY2ggbm9uLWVtcHR5IFBHRCAodG9wLWxldmVsKSBlbnRyeQogICogQHB1ZF9lbnRyeTogaWYgc2V0LCBjYWxsZWQgZm9yIGVhY2ggbm9uLWVtcHR5IFBVRCAoMm5kLWxldmVsKSBlbnRyeQogICogQHBtZF9lbnRyeTogaWYgc2V0LCBjYWxsZWQgZm9yIGVhY2ggbm9uLWVtcHR5IFBNRCAoM3JkLWxldmVsKSBlbnRyeQorICoJICAgICAgIHRoaXMgaGFuZGxlciBpcyByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGhhbmRsZQorICoJICAgICAgIHBtZF90cmFuc19odWdlKCkgcG1kcy4gIFRoZXkgbWF5IHNpbXBseSBjaG9vc2UgdG8KKyAqCSAgICAgICBzcGxpdF9odWdlX3BhZ2UoKSBpbnN0ZWFkIG9mIGhhbmRsaW5nIGl0IGV4cGxpY2l0bHkuCiAgKiBAcHRlX2VudHJ5OiBpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBub24tZW1wdHkgUFRFICg0dGgtbGV2ZWwpIGVudHJ5CiAgKiBAcHRlX2hvbGU6IGlmIHNldCwgY2FsbGVkIGZvciBlYWNoIGhvbGUgYXQgYWxsIGxldmVscwogICogQGh1Z2V0bGJfZW50cnk6IGlmIHNldCwgY2FsbGVkIGZvciBlYWNoIGh1Z2V0bGIgZW50cnkKQEAgLTEzNDgsNiArMTM1OSw3IEBACiBleHRlcm4gdm9pZCBtZW1faW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBtbWFwX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBzaG93X21lbSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fc2hvd19tZW0odW5zaWduZWQgaW50IGZsYWdzKTsKIGV4dGVybiB2b2lkIHNpX21lbWluZm8oc3RydWN0IHN5c2luZm8gKiB2YWwpOwogZXh0ZXJuIHZvaWQgc2lfbWVtaW5mb19ub2RlKHN0cnVjdCBzeXNpbmZvICp2YWwsIGludCBuaWQpOwogZXh0ZXJuIGludCBhZnRlcl9ib290bWVtOwpAQCAtMTUzNyw2ICsxNTQ5LDggQEAKICNkZWZpbmUgRk9MTF9HRVQJMHgwNAkvKiBkbyBnZXRfcGFnZSBvbiBwYWdlICovCiAjZGVmaW5lIEZPTExfRFVNUAkweDA4CS8qIGdpdmUgZXJyb3Igb24gaG9sZSBpZiBpdCB3b3VsZCBiZSB6ZXJvICovCiAjZGVmaW5lIEZPTExfRk9SQ0UJMHgxMAkvKiBnZXRfdXNlcl9wYWdlcyByZWFkL3dyaXRlIHcvbyBwZXJtaXNzaW9uICovCisjZGVmaW5lIEZPTExfTk9XQUlUCTB4MjAJLyogaWYgYSBkaXNrIHRyYW5zZmVyIGlzIG5lZWRlZCwgc3RhcnQgdGhlIElPCisJCQkJICogYW5kIHJldHVybiB3aXRob3V0IHdhaXRpbmcgdXBvbiBpdCAqLwogI2RlZmluZSBGT0xMX01MT0NLCTB4NDAJLyogbWFyayBwYWdlIGFzIG1sb2NrZWQgKi8KICNkZWZpbmUgRk9MTF9TUExJVAkweDgwCS8qIGRvbid0IHJldHVybiB0cmFuc2h1Z2UgcGFnZXMsIHNwbGl0IHRoZW0gKi8KICNkZWZpbmUgRk9MTF9IV1BPSVNPTgkweDEwMAkvKiBjaGVjayBwYWdlIGlzIGh3cG9pc29uZWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCAyNmJjNGUyLi4wMmFhNTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0yMzcsOCArMjM3LDkgQEAKIAlhdG9taWNfdCBtbV91c2VyczsJCQkvKiBIb3cgbWFueSB1c2VycyB3aXRoIHVzZXIgc3BhY2U/ICovCiAJYXRvbWljX3QgbW1fY291bnQ7CQkJLyogSG93IG1hbnkgcmVmZXJlbmNlcyB0byAic3RydWN0IG1tX3N0cnVjdCIgKHVzZXJzIGNvdW50IGFzIDEpICovCiAJaW50IG1hcF9jb3VudDsJCQkJLyogbnVtYmVyIG9mIFZNQXMgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIG1tYXBfc2VtOworCiAJc3BpbmxvY2tfdCBwYWdlX3RhYmxlX2xvY2s7CQkvKiBQcm90ZWN0cyBwYWdlIHRhYmxlcyBhbmQgc29tZSBjb3VudGVycyAqLworCXN0cnVjdCByd19zZW1hcGhvcmUgbW1hcF9zZW07CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1tbGlzdDsJCS8qIExpc3Qgb2YgbWF5YmUgc3dhcHBlZCBtbSdzLglUaGVzZSBhcmUgZ2xvYmFsbHkgc3RydW5nCiAJCQkJCQkgKiB0b2dldGhlciBvZmYgaW5pdF9tbS5tbWxpc3QsIGFuZCBhcmUgcHJvdGVjdGVkCkBAIC0yODEsNiArMjgyLDkgQEAKIAl1bnNpZ25lZCBpbnQgdG9rZW5fcHJpb3JpdHk7CiAJdW5zaWduZWQgaW50IGxhc3RfaW50ZXJ2YWw7CiAKKwkvKiBIb3cgbWFueSB0YXNrcyBzaGFyaW5nIHRoaXMgbW0gYXJlIE9PTV9ESVNBQkxFICovCisJYXRvbWljX3Qgb29tX2Rpc2FibGVfY291bnQ7CisKIAl1bnNpZ25lZCBsb25nIGZsYWdzOyAvKiBNdXN0IHVzZSBhdG9taWMgYml0b3BzIHRvIGFjY2VzcyB0aGUgYml0cyAqLwogCiAJc3RydWN0IGNvcmVfc3RhdGUgKmNvcmVfc3RhdGU7IC8qIGNvcmVkdW1waW5nIHN1cHBvcnQgKi8KQEAgLTMxMyw4ICszMTcsNiBAQAogI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQogCXBndGFibGVfdCBwbWRfaHVnZV9wdGU7IC8qIHByb3RlY3RlZCBieSBwYWdlX3RhYmxlX2xvY2sgKi8KICNlbmRpZgotCS8qIEhvdyBtYW55IHRhc2tzIHNoYXJpbmcgdGhpcyBtbSBhcmUgT09NX0RJU0FCTEUgKi8KLQlhdG9taWNfdCBvb21fZGlzYWJsZV9jb3VudDsKIH07CiAKIC8qIEZ1dHVyZS1zYWZlIGFjY2Vzc29yIGZvciBzdHJ1Y3QgbW1fc3RydWN0J3MgY3B1X3ZtX21hc2suICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKaW5kZXggOGNlMDgyNy4uYWRiNDg4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaApAQCAtNTQsNiArNTQsOSBAQAogCXVuc2lnbmVkIGludAkJc2VjX3RyaW1fbXVsdDsJLyogU2VjdXJlIHRyaW0gbXVsdGlwbGllciAgKi8KIAl1bnNpZ25lZCBpbnQJCXNlY19lcmFzZV9tdWx0OwkvKiBTZWN1cmUgZXJhc2UgbXVsdGlwbGllciAqLwogCXVuc2lnbmVkIGludAkJdHJpbV90aW1lb3V0OwkJLyogSW4gbWlsbGlzZWNvbmRzICovCisJYm9vbAkJCWVuaGFuY2VkX2FyZWFfZW47CS8qIGVuYWJsZSBiaXQgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcJZW5oYW5jZWRfYXJlYV9vZmZzZXQ7CS8qIFVuaXRzOiBCeXRlICovCisJdW5zaWduZWQgaW50CQllbmhhbmNlZF9hcmVhX3NpemU7CS8qIFVuaXRzOiBLQiAqLwogfTsKIAogc3RydWN0IHNkX3NjciB7CkBAIC0xMjEsNiArMTI0LDcgQEAKIAkJCQkJCS8qIGZvciBieXRlIG1vZGUgKi8KICNkZWZpbmUgTU1DX1FVSVJLX05PTlNURF9TRElPCSgxPDwyKQkJLyogbm9uLXN0YW5kYXJkIFNESU8gY2FyZCBhdHRhY2hlZCAqLwogCQkJCQkJLyogKG1pc3NpbmcgQ0lBIHJlZ2lzdGVycykgKi8KKyNkZWZpbmUgTU1DX1FVSVJLX0JST0tFTl9DTEtfR0FUSU5HICgxPDwzKQkvKiBjbG9jayBnYXRpbmcgdGhlIHNkaW8gYnVzIHdpbGwgbWFrZSBjYXJkIGZhaWwgKi8KIAogCXVuc2lnbmVkIGludAkJZXJhc2Vfc2l6ZTsJLyogZXJhc2Ugc2l6ZSBpbiBzZWN0b3JzICovCiAgCXVuc2lnbmVkIGludAkJZXJhc2Vfc2hpZnQ7CS8qIGlmIGVyYXNlIHVuaXQgaXMgcG93ZXIgMiAqLwpAQCAtMTQ4LDYgKzE1Miw4IEBACiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcm9vdDsKIH07CiAKK3ZvaWQgbW1jX2ZpeHVwX2RldmljZShzdHJ1Y3QgbW1jX2NhcmQgKmRldik7CisKICNkZWZpbmUgbW1jX2NhcmRfbW1jKGMpCQkoKGMpLT50eXBlID09IE1NQ19UWVBFX01NQykKICNkZWZpbmUgbW1jX2NhcmRfc2QoYykJCSgoYyktPnR5cGUgPT0gTU1DX1RZUEVfU0QpCiAjZGVmaW5lIG1tY19jYXJkX3NkaW8oYykJKChjKS0+dHlwZSA9PSBNTUNfVFlQRV9TRElPKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oCmluZGV4IDY0ZTAxM2YuLjA3ZjI3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmgKQEAgLTE2MCw2ICsxNjAsNyBAQAogCiBleHRlcm4gaW50IF9fbW1jX2NsYWltX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCBhdG9taWNfdCAqYWJvcnQpOwogZXh0ZXJuIHZvaWQgbW1jX3JlbGVhc2VfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworZXh0ZXJuIHZvaWQgbW1jX2RvX3JlbGVhc2VfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogZXh0ZXJuIGludCBtbWNfdHJ5X2NsYWltX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9kd19tbWMuaCBiL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oCmluZGV4IDE2YjAyNjEuLmMwMjA3YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oCkBAIC0xNDAsNiArMTQwLDcgQEAKIAl1MzIJCQlidXNfaHo7CiAJdTMyCQkJY3VycmVudF9zcGVlZDsKIAl1MzIJCQludW1fc2xvdHM7CisJdTMyCQkJZmlmb3RoX3ZhbDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OwogCXN0cnVjdCBkd19tY2lfYm9hcmQJKnBkYXRhOwogCXN0cnVjdCBkd19tY2lfc2xvdAkqc2xvdFtNQVhfTUNJX1NMT1RTXTsKQEAgLTE1MSw2ICsxNTIsOCBAQAogCiAJLyogV29ya2Fyb3VuZCBmbGFncyAqLwogCXUzMgkJCXF1aXJrczsKKworCXN0cnVjdCByZWd1bGF0b3IJKnZtbWM7CS8qIFBvd2VyIHJlZ3VsYXRvciAqLwogfTsKIAogLyogRE1BIG9wcyBmb3IgSW50ZXJuYWwvRXh0ZXJuYWwgRE1BQyBpbnRlcmZhY2UgKi8KQEAgLTE2NSwxNCArMTY4LDE0IEBACiB9OwogCiAvKiBJUCBRdWlya3MvZmxhZ3MuICovCi0vKiBObyBzcGVjaWFsIHF1aXJrcyBvciBmbGFncyB0byBjYXRlciBmb3IgKi8KLSNkZWZpbmUgRFdfTUNJX1FVSVJLX05PTkUJCTAKIC8qIERUTyBmaXggZm9yIGNvbW1hbmQgdHJhbnNtaXNzaW9uIHdpdGggSURNQUMgY29uZmlndXJlZCAqLwotI2RlZmluZSBEV19NQ0lfUVVJUktfSURNQUNfRFRPCQkxCisjZGVmaW5lIERXX01DSV9RVUlSS19JRE1BQ19EVE8JCQlCSVQoMCkKIC8qIGRlbGF5IG5lZWRlZCBiZXR3ZWVuIHJldHJpZXMgb24gc29tZSAyLjExYSBpbXBsZW1lbnRhdGlvbnMgKi8KLSNkZWZpbmUgRFdfTUNJX1FVSVJLX1JFVFJZX0RFTEFZCTIKKyNkZWZpbmUgRFdfTUNJX1FVSVJLX1JFVFJZX0RFTEFZCQlCSVQoMSkKIC8qIEhpZ2ggU3BlZWQgQ2FwYWJsZSAtIFN1cHBvcnRzIEhTIGNhcmRzICh1cHRvIDUwTUh6KSAqLwotI2RlZmluZSBEV19NQ0lfUVVJUktfSElHSFNQRUVECQk0CisjZGVmaW5lIERXX01DSV9RVUlSS19ISUdIU1BFRUQJCQlCSVQoMikKKy8qIFVucmVsaWFibGUgY2FyZCBkZXRlY3Rpb24gKi8KKyNkZWZpbmUgRFdfTUNJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTglCSVQoMykKIAogCiBzdHJ1Y3QgZG1hX3BkYXRhOwpAQCAtMTkyLDYgKzE5NSw4IEBACiAJdTMyIHF1aXJrczsgLyogV29ya2Fyb3VuZCAvIFF1aXJrIGZsYWdzICovCiAJdW5zaWduZWQgaW50IGJ1c19oejsgLyogQnVzIHNwZWVkICovCiAKKwl1bnNpZ25lZCBpbnQgY2FwczsJLyogQ2FwYWJpbGl0aWVzICovCisKIAkvKiBkZWxheSBpbiBtUyBiZWZvcmUgZGV0ZWN0aW5nIGNhcmRzIGFmdGVyIGludGVycnVwdCAqLwogCXUzMiBkZXRlY3RfZGVsYXlfbXM7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKaW5kZXggNjEyMzAxZi4uMjY0YmE1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKQEAgLTI1Myw2ICsyNTMsOCBAQAogICogRVhUX0NTRCBmaWVsZHMKICAqLwogCisjZGVmaW5lIEVYVF9DU0RfUEFSVElUSU9OX0FUVFJJQlVURQkxNTYJLyogUi9XICovCisjZGVmaW5lIEVYVF9DU0RfUEFSVElUSU9OX1NVUFBPUlQJMTYwCS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfRVJBU0VfR1JPVVBfREVGCQkxNzUJLyogUi9XICovCiAjZGVmaW5lIEVYVF9DU0RfRVJBU0VEX01FTV9DT05UCQkxODEJLyogUk8gKi8KICNkZWZpbmUgRVhUX0NTRF9CVVNfV0lEVEgJCTE4MwkvKiBSL1cgKi8KQEAgLTI2Miw2ICsyNjQsNyBAQAogI2RlZmluZSBFWFRfQ1NEX0NBUkRfVFlQRQkJMTk2CS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfU0VDX0NOVAkJCTIxMgkvKiBSTywgNCBieXRlcyAqLwogI2RlZmluZSBFWFRfQ1NEX1NfQV9USU1FT1VUCQkyMTcJLyogUk8gKi8KKyNkZWZpbmUgRVhUX0NTRF9IQ19XUF9HUlBfU0laRQkJMjIxCS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfRVJBU0VfVElNRU9VVF9NVUxUCTIyMwkvKiBSTyAqLwogI2RlZmluZSBFWFRfQ1NEX0hDX0VSQVNFX0dSUF9TSVpFCTIyNAkvKiBSTyAqLwogI2RlZmluZSBFWFRfQ1NEX1NFQ19UUklNX01VTFQJCTIyOQkvKiBSTyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggMDJlY2IwMS4uZTU2ZjgzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC00NzIsNyArNDcyLDcgQEAKICNpZmRlZiBDT05GSUdfTlVNQQogCiAvKgotICogVGhlIE5VTUEgem9uZWxpc3RzIGFyZSBkb3VibGVkIGJlY2F1c3NlIHdlIG5lZWQgem9uZWxpc3RzIHRoYXQgcmVzdHJpY3QgdGhlCisgKiBUaGUgTlVNQSB6b25lbGlzdHMgYXJlIGRvdWJsZWQgYmVjYXVzZSB3ZSBuZWVkIHpvbmVsaXN0cyB0aGF0IHJlc3RyaWN0IHRoZQogICogYWxsb2NhdGlvbnMgdG8gYSBzaW5nbGUgbm9kZSBmb3IgR0ZQX1RISVNOT0RFLgogICoKICAqIFswXQk6IFpvbmVsaXN0IHdpdGggZmFsbGJhY2sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXNtX21kcC5oIGIvaW5jbHVkZS9saW51eC9tc21fbWRwLmgKaW5kZXggZDExZmUwZi4uZmU3MjJjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tc21fbWRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tc21fbWRwLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAlNRFBfWV9DQkNSX0gyVjEsCS8qIFkgYW5kIENyQ2IsIHBzZWR1byBwbGFuYXIgdy8gQ3IgaXMgaW4gTVNCICovCiAJTURQX1JHQkFfODg4OCwJCS8qIEFSR0IgODg4ICovCiAJTURQX0JHUkFfODg4OCwJCS8qIEFCR1IgODg4ICovCisJTURQX1JHQlhfODg4OCwJCS8qIFJHQlggODg4ICovCiAJTURQX0lNR1RZUEVfTElNSVQJLyogTm9uIHZhbGlkIGltYWdlIHR5cGUgYWZ0ZXIgdGhpcyBlbnVtICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCmluZGV4IGNkNmYzYjQuLmQ2MDEzMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCkBAIC0xNjgsNiArMTY4LDcgQEAKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JTlQJCSgxIDw8IDYpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfSU9CRQkJKDEgPDwgNSkKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9SRFlfQ09ORgkoMSA8PCA0KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX1ZIRgkJKDEgPDwgMykKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9IRgkJKDEgPDwgMikKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9TWU5DX1dSSVRFCSgxIDw8IDEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3ViaS5oIGIvaW5jbHVkZS9saW51eC9tdGQvdWJpLmgKaW5kZXggYjMxYmQ5ZS4uODQ4NTRlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvdWJpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvdWJpLmgKQEAgLTExNiwxOCArMTE2LDQwIEBACiAgKiBzdHJ1Y3QgdWJpX2RldmljZV9pbmZvIC0gVUJJIGRldmljZSBkZXNjcmlwdGlvbiBkYXRhIHN0cnVjdHVyZS4KICAqIEB1YmlfbnVtOiB1YmkgZGV2aWNlIG51bWJlcgogICogQGxlYl9zaXplOiBsb2dpY2FsIGVyYXNlYmxvY2sgc2l6ZSBvbiB0aGlzIFVCSSBkZXZpY2UKKyAqIEBsZWJfc3RhcnQ6IHN0YXJ0aW5nIG9mZnNldCBvZiBsb2dpY2FsIGVyYXNlYmxvY2tzIHdpdGhpbiBwaHlzaWNhbAorICogICAgICAgICAgICAgZXJhc2VibG9ja3MKICAqIEBtaW5faW9fc2l6ZTogbWluaW1hbCBJL08gdW5pdCBzaXplCisgKiBAbWF4X3dyaXRlX3NpemU6IG1heGltdW0gYW1vdW50IG9mIGJ5dGVzIHRoZSB1bmRlcmx5aW5nIGZsYXNoIGNhbiB3cml0ZSBhdCBhCisgKiAgICAgICAgICAgICAgICAgIHRpbWUgKE1URCB3cml0ZSBidWZmZXIgc2l6ZSkKICAqIEByb19tb2RlOiBpZiB0aGlzIGRldmljZSBpcyBpbiByZWFkLW9ubHkgbW9kZQogICogQGNkZXY6IFVCSSBjaGFyYWN0ZXIgZGV2aWNlIG1ham9yIGFuZCBtaW5vciBudW1iZXJzCiAgKgogICogTm90ZSwgQGxlYl9zaXplIGlzIHRoZSBsb2dpY2FsIGVyYXNlYmxvY2sgc2l6ZSBvZmZlcmVkIGJ5IHRoZSBVQkkgZGV2aWNlLgogICogVm9sdW1lcyBvZiB0aGlzIFVCSSBkZXZpY2UgbWF5IGhhdmUgc21hbGxlciBsb2dpY2FsIGVyYXNlYmxvY2sgc2l6ZSBpZiB0aGVpcgogICogYWxpZ25tZW50IGlzIG5vdCBlcXVpdmFsZW50IHRvICUxLgorICoKKyAqIFRoZSBAbWF4X3dyaXRlX3NpemUgZmllbGQgZGVzY3JpYmVzIGZsYXNoIHdyaXRlIG1heGltdW0gd3JpdGUgdW5pdC4gRm9yCisgKiBleGFtcGxlLCBOT1IgZmxhc2ggYWxsb3dzIGZvciBjaGFuZ2luZyBpbmRpdmlkdWFsIGJ5dGVzLCBzbyBAbWluX2lvX3NpemUgaXMKKyAqICUxLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBtZWFuIHRoYW4gTk9SIGZsYXNoIGhhcyB0byB3cml0ZSBkYXRhIGJ5dGUtYnktYnl0ZS4KKyAqIEluc3RlYWQsIENGSSBOT1IgZmxhc2hlcyBoYXZlIGEgd3JpdGUtYnVmZmVyIG9mLCBlLmcuLCA2NCBieXRlcywgYW5kIHdoZW4KKyAqIHdyaXRpbmcgbGFyZ2UgY2h1bmtzIG9mIGRhdGEsIHRoZXkgd3JpdGUgNjQtYnl0ZXMgYXQgYSB0aW1lLiBPYnZpb3VzbHksIHRoaXMKKyAqIGltcHJvdmVzIHdyaXRlIHRocm91Z2hwdXQuCisgKgorICogQWxzbywgdGhlIE1URCBkZXZpY2UgbWF5IGhhdmUgTiBpbnRlcmxlYXZlZCAoc3RyaXBlZCkgZmxhc2ggY2hpcHMKKyAqIHVuZGVybmVhdGgsIGluIHdoaWNoIGNhc2UgQG1pbl9pb19zaXplIGNhbiBiZSBwaHlzaWNhbCBtaW4uIEkvTyBzaXplIG9mCisgKiBzaW5nbGUgZmxhc2ggY2hpcCwgd2hpbGUgQG1heF93cml0ZV9zaXplIGNhbiBiZSBOICogQG1pbl9pb19zaXplLgorICoKKyAqIFRoZSBAbWF4X3dyaXRlX3NpemUgZmllbGQgaXMgYWx3YXlzIGdyZWF0ZXIgb3IgZXF1aXZhbGVudCB0byBAbWluX2lvX3NpemUuCisgKiBFLmcuLCBzb21lIE5PUiBmbGFzaGVzIG1heSBoYXZlIChAbWluX2lvX3NpemUgPSAxLCBAbWF4X3dyaXRlX3NpemUgPSA2NCkuIEluCisgKiBjb250cmFzdCwgTkFORCBmbGFzaGVzIHVzdWFsbHkgaGF2ZSBAbWluX2lvX3NpemUgPSBAbWF4X3dyaXRlX3NpemUgPSBOQU5ECisgKiBwYWdlIHNpemUuCiAgKi8KIHN0cnVjdCB1YmlfZGV2aWNlX2luZm8gewogCWludCB1YmlfbnVtOwogCWludCBsZWJfc2l6ZTsKKwlpbnQgbGViX3N0YXJ0OwogCWludCBtaW5faW9fc2l6ZTsKKwlpbnQgbWF4X3dyaXRlX3NpemU7CiAJaW50IHJvX21vZGU7CiAJZGV2X3QgY2RldjsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKaW5kZXggOWM4NjAzOC4uZWJhNDVlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtODUsNyArODUsNyBAQAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vbmVfbGVuKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwogCiBleHRlcm4gaW50IGZvbGxvd19kb3duX29uZShzdHJ1Y3QgcGF0aCAqKTsKLWV4dGVybiBpbnQgZm9sbG93X2Rvd24oc3RydWN0IHBhdGggKiwgYm9vbCk7CitleHRlcm4gaW50IGZvbGxvd19kb3duKHN0cnVjdCBwYXRoICopOwogZXh0ZXJuIGludCBmb2xsb3dfdXAoc3RydWN0IHBhdGggKik7CiAKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpsb2NrX3JlbmFtZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXRfZ2V0cG9ydC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2dldHBvcnQuaAppbmRleCAzODgyYTgxLi41YWViZDE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXRfZ2V0cG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9nZXRwb3J0LmgKQEAgLTE4LDQgKzE4LDE0IEBACiBleHRlcm4gYm9vbCBpcF9zZXRfZ2V0X2lwX3BvcnQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcGYsIGJvb2wgc3JjLAogCQkJCV9fYmUxNiAqcG9ydCk7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF9zZXRfcHJvdG9fd2l0aF9wb3J0cyh1OCBwcm90bykKK3sKKwlzd2l0Y2ggKHByb3RvKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwljYXNlIElQUFJPVE9fVURQOgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiAjZW5kaWYgLypfSVBfU0VUX0dFVFBPUlRfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKaW5kZXggZWE5YjhkMy4uOTBjMmM5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaApAQCAtMjgsOCArMjgsOCBAQAogfTsKIAogc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCB7Ci0JYWxpZ25lZF9iZTY0CXNlYzsKLQlhbGlnbmVkX2JlNjQJdXNlYzsKKwlfX2FsaWduZWRfYmU2NAlzZWM7CisJX19hbGlnbmVkX2JlNjQJdXNlYzsKIH07CiAKIGVudW0gbmZ1bG5sX2F0dHJfdHlwZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCmluZGV4IDI0NTVmZTUuLmFmOTRlMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCkBAIC0yNSw4ICsyNSw4IEBACiB9OwogCiBzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgewotCWFsaWduZWRfYmU2NAlzZWM7Ci0JYWxpZ25lZF9iZTY0CXVzZWM7CisJX19hbGlnbmVkX2JlNjQJc2VjOworCV9fYWxpZ25lZF9iZTY0CXVzZWM7CiB9OwogCiBlbnVtIG5mcW5sX2F0dHJfdHlwZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oCmluZGV4IDkyZmNiYjAuLmYxZDZjMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oCkBAIC0xNyw4ICsxNyw4IEBACiAKIHN0cnVjdCB4dF9jb25uYnl0ZXNfaW5mbyB7CiAJc3RydWN0IHsKLQkJYWxpZ25lZF91NjQgZnJvbTsJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLwotCQlhbGlnbmVkX3U2NCB0bzsJCS8qIGNvdW50IHRvIGJlIG1hdGNoZWQgKi8KKwkJX19hbGlnbmVkX3U2NCBmcm9tOwkvKiBjb3VudCB0byBiZSBtYXRjaGVkICovCisJCV9fYWxpZ25lZF91NjQgdG87CS8qIGNvdW50IHRvIGJlIG1hdGNoZWQgKi8KIAl9IGNvdW50OwogCV9fdTggd2hhdDsJCS8qIGlwdF9jb25uYnl0ZXNfd2hhdCAqLwogCV9fdTggZGlyZWN0aW9uOwkvKiBpcHRfY29ubmJ5dGVzX2RpcmVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKaW5kZXggY2E2ZTAzZS4uOTMxNDcyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCkBAIC0xMyw3ICsxMyw3IEBACiBzdHJ1Y3QgeHRfcXVvdGFfaW5mbyB7CiAJX191MzIgZmxhZ3M7CiAJX191MzIgcGFkOwotCWFsaWduZWRfdTY0IHF1b3RhOworCV9fYWxpZ25lZF91NjQgcXVvdGE7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCXN0cnVjdCB4dF9xdW90YV9wcml2CSptYXN0ZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oIGIvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaAppbmRleCAyMjdlNDlkLi44NzY4YzQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKQEAgLTQwLDI2ICs0MCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLS8qCi0gKiBJbm9kZSBmbGFncyBzdG9yZWQgaW4gbmlsZnNfaW5vZGUgYW5kIG9uLW1lbW9yeSBuaWxmcyBpbm9kZQotICoKLSAqIFdlIGRlZmluZSB0aGVzZSBmbGFncyBiYXNlZCBvbiBleHQyLWZzIGJlY2F1c2Ugb2YgdGhlCi0gKiBjb21wYXRpYmlsaXR5IHJlYXNvbjsgdG8gYXZvaWQgcHJvYmxlbXMgaW4gY2hhdHRyKDEpCi0gKi8KLSNkZWZpbmUgTklMRlNfU0VDUk1fRkwJCTB4MDAwMDAwMDEgLyogU2VjdXJlIGRlbGV0aW9uICovCi0jZGVmaW5lIE5JTEZTX1VOUk1fRkwJCTB4MDAwMDAwMDIgLyogVW5kZWxldGUgKi8KLSNkZWZpbmUgTklMRlNfU1lOQ19GTAkJMHgwMDAwMDAwOCAvKiBTeW5jaHJvbm91cyB1cGRhdGVzICovCi0jZGVmaW5lIE5JTEZTX0lNTVVUQUJMRV9GTAkweDAwMDAwMDEwIC8qIEltbXV0YWJsZSBmaWxlICovCi0jZGVmaW5lIE5JTEZTX0FQUEVORF9GTAkJMHgwMDAwMDAyMCAvKiB3cml0ZXMgdG8gZmlsZSBtYXkgb25seSBhcHBlbmQgKi8KLSNkZWZpbmUgTklMRlNfTk9EVU1QX0ZMCQkweDAwMDAwMDQwIC8qIGRvIG5vdCBkdW1wIGZpbGUgKi8KLSNkZWZpbmUgTklMRlNfTk9BVElNRV9GTAkweDAwMDAwMDgwIC8qIGRvIG5vdCB1cGRhdGUgYXRpbWUgKi8KLS8qIFJlc2VydmVkIGZvciBjb21wcmVzc2lvbiB1c2FnZS4uLiAqLwotI2RlZmluZSBOSUxGU19OT1RBSUxfRkwJCTB4MDAwMDgwMDAgLyogZmlsZSB0YWlsIHNob3VsZCBub3QgYmUgbWVyZ2VkICovCi0jZGVmaW5lIE5JTEZTX0RJUlNZTkNfRkwJMHgwMDAxMDAwMCAvKiBkaXJzeW5jIGJlaGF2aW91ciAqLwotCi0jZGVmaW5lIE5JTEZTX0ZMX1VTRVJfVklTSUJMRQkweDAwMDNERkZGIC8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLwotI2RlZmluZSBOSUxGU19GTF9VU0VSX01PRElGSUFCTEUJMHgwMDAzODBGRiAvKiBVc2VyIG1vZGlmaWFibGUgZmxhZ3MgKi8KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCiAKICNkZWZpbmUgTklMRlNfSU5PREVfQk1BUF9TSVpFCTcKQEAgLTIzNiw4ICsyMTcsMTAgQEAKICAqIElmIHRoZXJlIGlzIGEgYml0IHNldCBpbiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IHRoYXQgdGhlIGtlcm5lbAogICogZG9lc24ndCBrbm93IGFib3V0LCBpdCBzaG91bGQgcmVmdXNlIHRvIG1vdW50IHRoZSBmaWxlc3lzdGVtLgogICovCisjZGVmaW5lIE5JTEZTX0ZFQVRVUkVfQ09NUEFUX1JPX0JMT0NLX0NPVU5UCTB4MDAwMDAwMDFVTEwKKwogI2RlZmluZSBOSUxGU19GRUFUVVJFX0NPTVBBVF9TVVBQCTBVTEwKLSNkZWZpbmUgTklMRlNfRkVBVFVSRV9DT01QQVRfUk9fU1VQUAkwVUxMCisjZGVmaW5lIE5JTEZTX0ZFQVRVUkVfQ09NUEFUX1JPX1NVUFAJTklMRlNfRkVBVFVSRV9DT01QQVRfUk9fQkxPQ0tfQ09VTlQKICNkZWZpbmUgTklMRlNfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCTBVTEwKIAogLyoKQEAgLTI2MCw3ICsyNDMsNiBAQAogI2RlZmluZSBOSUxGU19VU0VSX0lOTwkJMTEJLyogRmlzcnQgdXNlcidzIGZpbGUgaW5vZGUgbnVtYmVyICovCiAKICNkZWZpbmUgTklMRlNfU0JfT0ZGU0VUX0JZVEVTCTEwMjQJLyogYnl0ZSBvZmZzZXQgb2YgbmlsZnMgc3VwZXJibG9jayAqLwotI2RlZmluZSBOSUxGU19TVVBFUl9NQUdJQwkweDM0MzQJLyogTklMRlMgZmlsZXN5c3RlbSAgbWFnaWMgbnVtYmVyICovCiAKICNkZWZpbmUgTklMRlNfU0VHX01JTl9CTE9DS1MJMTYJLyogTWluaW11bSBudW1iZXIgb2YgYmxvY2tzIGluCiAJCQkJCSAgIGEgZnVsbCBzZWdtZW50ICovCkBAIC0zNDYsMTcgKzMyOCwyMSBAQAogewogCXVuc2lnbmVkIGxlbiA9IGxlMTZfdG9fY3B1KGRsZW4pOwogCisjaWYgIWRlZmluZWQoX19LRVJORUxfXykgfHwgKFBBR0VfQ0FDSEVfU0laRSA+PSA2NTUzNikKIAlpZiAobGVuID09IE5JTEZTX01BWF9SRUNfTEVOKQogCQlyZXR1cm4gMSA8PCAxNjsKKyNlbmRpZgogCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBpbmxpbmUgX19sZTE2IG5pbGZzX3JlY19sZW5fdG9fZGlzayh1bnNpZ25lZCBsZW4pCiB7CisjaWYgIWRlZmluZWQoX19LRVJORUxfXykgfHwgKFBBR0VfQ0FDSEVfU0laRSA+PSA2NTUzNikKIAlpZiAobGVuID09ICgxIDw8IDE2KSkKIAkJcmV0dXJuIGNwdV90b19sZTE2KE5JTEZTX01BWF9SRUNfTEVOKTsKIAllbHNlIGlmIChsZW4gPiAoMSA8PCAxNikpCiAJCUJVRygpOworI2VuZGlmCiAJcmV0dXJuIGNwdV90b19sZTE2KGxlbik7CiB9CiAKQEAgLTUyNSw3ICs1MTEsNyBAQAogCV9fbGU2NCBjcF9jcmVhdGU7CiAJX19sZTY0IGNwX25ibGtfaW5jOwogCV9fbGU2NCBjcF9pbm9kZXNfY291bnQ7Ci0JX19sZTY0IGNwX2Jsb2Nrc19jb3VudDsJCS8qIFJlc2VydmVkIChtaWdodCBiZSBkZWxldGVkKSAqLworCV9fbGU2NCBjcF9ibG9ja3NfY291bnQ7CiAKIAkvKiBEbyBub3QgY2hhbmdlIHRoZSBieXRlIG9mZnNldCBvZiBpZmlsZSBpbm9kZS4KIAkgICBUbyBrZWVwIHRoZSBjb21wYXRpYmlsaXR5IG9mIHRoZSBkaXNrIGZvcm1hdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAppbmRleCAxY2E2NDExLi43ZjVjZmQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCkBAIC0xMDYsNiArMTA2LDEzIEBACiB2b2lkIG9wcm9maWxlX2FkZF9leHRfc2FtcGxlKHVuc2lnbmVkIGxvbmcgcGMsIHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKIAkJCQl1bnNpZ25lZCBsb25nIGV2ZW50LCBpbnQgaXNfa2VybmVsKTsKIAorLyoqCisgKiBBZGQgYW4gaGFyZHdhcmUgc2FtcGxlLgorICovCit2b2lkIG9wcm9maWxlX2FkZF9leHRfaHdfc2FtcGxlKHVuc2lnbmVkIGxvbmcgcGMsIHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKKwl1bnNpZ25lZCBsb25nIGV2ZW50LCBpbnQgaXNfa2VybmVsLAorCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisKIC8qIFVzZSB0aGlzIGluc3RlYWQgd2hlbiB0aGUgUEMgdmFsdWUgaXMgbm90IGZyb20gdGhlIHJlZ3MuIERvZXNuJ3QKICAqIGJhY2t0cmFjZS4gKi8KIHZvaWQgb3Byb2ZpbGVfYWRkX3BjKHVuc2lnbmVkIGxvbmcgcGMsIGludCBpc19rZXJuZWwsIHVuc2lnbmVkIGxvbmcgZXZlbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCAwZGI4MDM3Li44MTExODNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtMTk2LDcgKzE5Niw3IEBACiAKIHN0cnVjdCBwYWdlOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCiAKLVRFU1RQQUdFRkxBRyhMb2NrZWQsIGxvY2tlZCkgVEVTVFNFVEZMQUcoTG9ja2VkLCBsb2NrZWQpCitURVNUUEFHRUZMQUcoTG9ja2VkLCBsb2NrZWQpCiBQQUdFRkxBRyhFcnJvciwgZXJyb3IpIFRFU1RDTEVBUkZMQUcoRXJyb3IsIGVycm9yKQogUEFHRUZMQUcoUmVmZXJlbmNlZCwgcmVmZXJlbmNlZCkgVEVTVENMRUFSRkxBRyhSZWZlcmVuY2VkLCByZWZlcmVuY2VkKQogUEFHRUZMQUcoRGlydHksIGRpcnR5KSBURVNUU0NGTEFHKERpcnR5LCBkaXJ0eSkgX19DTEVBUlBBR0VGTEFHKERpcnR5LCBkaXJ0eSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaAppbmRleCA2ZDZjYjdhLi5mNWRlMjFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCkBAIC0xLDggKzEsMjYgQEAKICNpZm5kZWYgX19MSU5VWF9QQUdFX0NHUk9VUF9ICiAjZGVmaW5lIF9fTElOVVhfUEFHRV9DR1JPVVBfSAogCitlbnVtIHsKKwkvKiBmbGFncyBmb3IgbWVtX2Nncm91cCAqLworCVBDR19MT0NLLCAgLyogTG9jayBmb3IgcGMtPm1lbV9jZ3JvdXAgYW5kIGZvbGxvd2luZyBiaXRzLiAqLworCVBDR19DQUNIRSwgLyogY2hhcmdlZCBhcyBjYWNoZSAqLworCVBDR19VU0VELCAvKiB0aGlzIG9iamVjdCBpcyBpbiB1c2UuICovCisJUENHX01JR1JBVElPTiwgLyogdW5kZXIgcGFnZSBtaWdyYXRpb24gKi8KKwkvKiBmbGFncyBmb3IgbWVtX2Nncm91cCBhbmQgZmlsZSBhbmQgSS9PIHN0YXR1cyAqLworCVBDR19NT1ZFX0xPQ0ssIC8qIEZvciByYWNlIGJldHdlZW4gbW92ZV9hY2NvdW50IHYucy4gZm9sbG93aW5nIGJpdHMgKi8KKwlQQ0dfRklMRV9NQVBQRUQsIC8qIHBhZ2UgaXMgYWNjb3VudGVkIGFzICJtYXBwZWQiICovCisJLyogTm8gbG9jayBpbiBwYWdlX2Nncm91cCAqLworCVBDR19BQ0NUX0xSVSwgLyogcGFnZSBoYXMgYmVlbiBhY2NvdW50ZWQgZm9yICh1bmRlciBscnVfbG9jaykgKi8KKwlfX05SX1BDR19GTEFHUywKK307CisKKyNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19ICisjaW5jbHVkZSA8Z2VuZXJhdGVkL2JvdW5kcy5oPgorCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKICNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KKwogLyoKICAqIFBhZ2UgQ2dyb3VwIGNhbiBiZSBjb25zaWRlcmVkIGFzIGFuIGV4dGVuZGVkIG1lbV9tYXAuCiAgKiBBIHBhZ2VfY2dyb3VwIHBhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGV2ZXJ5IHBhZ2UgZGVzY3JpcHRvci4gVGhlCkBAIC0xMyw3ICszMSw2IEBACiBzdHJ1Y3QgcGFnZV9jZ3JvdXAgewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXA7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGxpc3RfaGVhZCBscnU7CQkvKiBwZXIgY2dyb3VwIExSVSBsaXN0ICovCiB9OwogCkBAIC0zMiwxOSArNDksNyBAQAogI2VuZGlmCiAKIHN0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKTsKLQotZW51bSB7Ci0JLyogZmxhZ3MgZm9yIG1lbV9jZ3JvdXAgKi8KLQlQQ0dfTE9DSywgIC8qIExvY2sgZm9yIHBjLT5tZW1fY2dyb3VwIGFuZCBmb2xsb3dpbmcgYml0cy4gKi8KLQlQQ0dfQ0FDSEUsIC8qIGNoYXJnZWQgYXMgY2FjaGUgKi8KLQlQQ0dfVVNFRCwgLyogdGhpcyBvYmplY3QgaXMgaW4gdXNlLiAqLwotCVBDR19NSUdSQVRJT04sIC8qIHVuZGVyIHBhZ2UgbWlncmF0aW9uICovCi0JLyogZmxhZ3MgZm9yIG1lbV9jZ3JvdXAgYW5kIGZpbGUgYW5kIEkvTyBzdGF0dXMgKi8KLQlQQ0dfTU9WRV9MT0NLLCAvKiBGb3IgcmFjZSBiZXR3ZWVuIG1vdmVfYWNjb3VudCB2LnMuIGZvbGxvd2luZyBiaXRzICovCi0JUENHX0ZJTEVfTUFQUEVELCAvKiBwYWdlIGlzIGFjY291bnRlZCBhcyAibWFwcGVkIiAqLwotCS8qIE5vIGxvY2sgaW4gcGFnZV9jZ3JvdXAgKi8KLQlQQ0dfQUNDVF9MUlUsIC8qIHBhZ2UgaGFzIGJlZW4gYWNjb3VudGVkIGZvciAodW5kZXIgbHJ1X2xvY2spICovCi19Oworc3RydWN0IHBhZ2UgKmxvb2t1cF9jZ3JvdXBfcGFnZShzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKTsKIAogI2RlZmluZSBURVNUUENHRkxBRyh1bmFtZSwgbG5hbWUpCQkJXAogc3RhdGljIGlubGluZSBpbnQgUGFnZUNncm91cCMjdW5hbWUoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykJXApAQCAtODUsMTYgKzkwLDYgQEAKIENMRUFSUENHRkxBRyhNaWdyYXRpb24sIE1JR1JBVElPTikKIFRFU1RQQ0dGTEFHKE1pZ3JhdGlvbiwgTUlHUkFUSU9OKQogCi1zdGF0aWMgaW5saW5lIGludCBwYWdlX2Nncm91cF9uaWQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKLXsKLQlyZXR1cm4gcGFnZV90b19uaWQocGMtPnBhZ2UpOwotfQotCi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIHBhZ2VfY2dyb3VwX3ppZChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQotewotCXJldHVybiBwYWdlX3pvbmVudW0ocGMtPnBhZ2UpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQogewogCS8qCkBAIC0xMDksMTEgKzEwNCw2IEBACiAJYml0X3NwaW5fdW5sb2NrKFBDR19MT0NLLCAmcGMtPmZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGFnZV9pc19jZ3JvdXBfbG9ja2VkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCi17Ci0JcmV0dXJuIGJpdF9zcGluX2lzX2xvY2tlZChQQ0dfTE9DSywgJnBjLT5mbGFncyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2xvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKIAl1bnNpZ25lZCBsb25nICpmbGFncykKIHsKQEAgLTEzMiw2ICsxMjIsMzkgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZSgqZmxhZ3MpOwogfQogCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorI2RlZmluZSBQQ0dfQVJSQVlJRF9XSURUSAlTRUNUSU9OU19TSElGVAorI2Vsc2UKKyNkZWZpbmUgUENHX0FSUkFZSURfV0lEVEgJTk9ERVNfU0hJRlQKKyNlbmRpZgorCisjaWYgKFBDR19BUlJBWUlEX1dJRFRIID4gQklUU19QRVJfTE9ORyAtIE5SX1BDR19GTEFHUykKKyNlcnJvciBOb3QgZW5vdWdoIHNwYWNlIGxlZnQgaW4gcGMtPmZsYWdzIHRvIHN0b3JlIHBhZ2VfY2dyb3VwIGFycmF5IElEcworI2VuZGlmCisKKy8qIHBjLT5mbGFnczogQVJSQVktSUQgfCBGTEFHUyAqLworCisjZGVmaW5lIFBDR19BUlJBWUlEX01BU0sJKCgxVUwgPDwgUENHX0FSUkFZSURfV0lEVEgpIC0gMSkKKworI2RlZmluZSBQQ0dfQVJSQVlJRF9PRkZTRVQJKEJJVFNfUEVSX0xPTkcgLSBQQ0dfQVJSQVlJRF9XSURUSCkKKy8qCisgKiBaZXJvIHRoZSBzaGlmdCBjb3VudCBmb3Igbm9uLWV4aXN0YW50IGZpZWxkcywgdG8gcHJldmVudCBjb21waWxlcgorICogd2FybmluZ3MgYW5kIGVuc3VyZSByZWZlcmVuY2VzIGFyZSBvcHRpbWl6ZWQgYXdheS4KKyAqLworI2RlZmluZSBQQ0dfQVJSQVlJRF9TSElGVAkoUENHX0FSUkFZSURfT0ZGU0VUICogKFBDR19BUlJBWUlEX1dJRFRIICE9IDApKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfY2dyb3VwX2FycmF5X2lkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGlkKQoreworCXBjLT5mbGFncyAmPSB+KFBDR19BUlJBWUlEX01BU0sgPDwgUENHX0FSUkFZSURfU0hJRlQpOworCXBjLT5mbGFncyB8PSAoaWQgJiBQQ0dfQVJSQVlJRF9NQVNLKSA8PCBQQ0dfQVJSQVlJRF9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY2dyb3VwX2FycmF5X2lkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJcmV0dXJuIChwYy0+ZmxhZ3MgPj4gUENHX0FSUkFZSURfU0hJRlQpICYgUENHX0FSUkFZSURfTUFTSzsKK30KKwogI2Vsc2UgLyogQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIgKi8KIHN0cnVjdCBwYWdlX2Nncm91cDsKIApAQCAtMTUyLDcgKzE3NSw3IEBACiB7CiB9CiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSICovCiAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAKQEAgLTE4OCw1ICsyMTEsOCBAQAogCXJldHVybjsKIH0KIAotI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQICovCisKKyNlbmRpZiAvKiAhX19HRU5FUkFUSU5HX0JPVU5EU19IICovCisKKyNlbmRpZiAvKiBfX0xJTlVYX1BBR0VfQ0dST1VQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggOWM2NmU5OS4uMjllYmJhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTQ1NSw4ICs0NTUsOSBAQAogCQkJCXBnb2ZmX3QgaW5kZXgsIGdmcF90IGdmcF9tYXNrKTsKIGludCBhZGRfdG9fcGFnZV9jYWNoZV9scnUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXBnb2ZmX3QgaW5kZXgsIGdmcF90IGdmcF9tYXNrKTsKLWV4dGVybiB2b2lkIHJlbW92ZV9mcm9tX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOwotZXh0ZXJuIHZvaWQgX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGRlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgX19kZWxldGVfZnJvbV9wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2ludCByZXBsYWNlX3BhZ2VfY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqb2xkLCBzdHJ1Y3QgcGFnZSAqbmV3LCBnZnBfdCBnZnBfbWFzayk7CiAKIC8qCiAgKiBMaWtlIGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZCwgYnV0IHVzZWQgdG8gYWRkIG5ld2x5IGFsbG9jYXRlZCBwYWdlczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IGZmNWJjY2I4Li4xNmM5ZjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTExOTEsNiArMTE5MSwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwY2lfd2FrZV9mcm9tX2QzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHBjaV9wb3dlcl90IHBjaV9jaG9vc2Vfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkJICAgcG1fbWVzc2FnZV90IHN0YXRlKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA1MTFlNWVlLi5iZGEyMjFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMjQ4Myw2ICsyNDgzLDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19TTUJVUwkweDFkMjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19MUENfMAkweDFkNDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19MUENfMQkweDFkNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9ESDg5WFhDQ19MUENfTUlOCTB4MjMxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX0xQQ19NQVgJMHgyMzFmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfREg4OVhYQ0NfU01CVVMJMHgyMzMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8wCTB4MjQxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMQkweDI0MTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzMJMHgyNDEzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDYxNDYxNWIuLmY0OTVjMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC04NzgsOCArODc4LDggQEAKICAqIFVzZWQgYXMgYSBjb250YWluZXIgZm9yIHRhc2sgZXZlbnRzIGFuZCBDUFUgZXZlbnRzIGFzIHdlbGw6CiAgKi8KIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgewotCWVudW0gcGVyZl9ldmVudF9jb250ZXh0X3R5cGUJdHlwZTsKIAlzdHJ1Y3QgcG11CQkJKnBtdTsKKwllbnVtIHBlcmZfZXZlbnRfY29udGV4dF90eXBlCXR5cGU7CiAJLyoKIAkgKiBQcm90ZWN0IHRoZSBzdGF0ZXMgb2YgdGhlIGV2ZW50cyBpbiB0aGUgbGlzdCwKIAkgKiBucl9hY3RpdmUsIGFuZCB0aGUgbGlzdDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkLmggYi9pbmNsdWRlL2xpbnV4L3BpZC5oCmluZGV4IDQ5ZjFjMmYuLmVmY2VkYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9waWQuaApAQCAtMTQxLDYgKzE0MSwxNyBAQAogfQogCiAvKgorICogaXNfY2hpbGRfcmVhcGVyIHJldHVybnMgdHJ1ZSBpZiB0aGUgcGlkIGlzIHRoZSBpbml0IHByb2Nlc3MKKyAqIG9mIHRoZSBjdXJyZW50IG5hbWVzcGFjZS4gQXMgdGhpcyBvbmUgY291bGQgYmUgY2hlY2tlZCBiZWZvcmUKKyAqIHBpZF9ucy0+Y2hpbGRfcmVhcGVyIGlzIGFzc2lnbmVkIGluIGNvcHlfcHJvY2Vzcywgd2UgY2hlY2sKKyAqIHdpdGggdGhlIHBpZCBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19jaGlsZF9yZWFwZXIoc3RydWN0IHBpZCAqcGlkKQoreworCXJldHVybiBwaWQtPm51bWJlcnNbcGlkLT5sZXZlbF0ubnIgPT0gMTsKK30KKworLyoKICAqIHRoZSBoZWxwZXJzIHRvIGdldCB0aGUgcGlkJ3MgaWQgc2VlbiBmcm9tIGRpZmZlcmVudCBuYW1lc3BhY2VzCiAgKgogICogcGlkX25yKCkgICAgOiBnbG9iYWwgaWQsIGkuZS4gdGhlIGlkIHNlZW4gZnJvbSB0aGUgaW5pdCBuYW1lc3BhY2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IDM3OWVhZWQuLjgzOGMxMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC01MCw3ICs1MCw3IEBACiAKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSB7CiAJdW5zaWduZWQgaW50IGxvd19pbm87Ci0JdW5zaWduZWQgc2hvcnQgbmFtZWxlbjsKKwl1bnNpZ25lZCBpbnQgbmFtZWxlbjsKIAljb25zdCBjaGFyICpuYW1lOwogCW1vZGVfdCBtb2RlOwogCW5saW5rX3Qgbmxpbms7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B3bV9iYWNrbGlnaHQuaCBiL2luY2x1ZGUvbGludXgvcHdtX2JhY2tsaWdodC5oCmluZGV4IGUwMzFlMWEuLjVlM2UyNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHdtX2JhY2tsaWdodC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHdtX2JhY2tsaWdodC5oCkBAIC00LDYgKzQsOCBAQAogI2lmbmRlZiBfX0xJTlVYX1BXTV9CQUNLTElHSFRfSAogI2RlZmluZSBfX0xJTlVYX1BXTV9CQUNLTElHSFRfSAogCisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisKIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgewogCWludCBwd21faWQ7CiAJdW5zaWduZWQgaW50IG1heF9icmlnaHRuZXNzOwpAQCAtMTMsNiArMTUsNyBAQAogCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqbm90aWZ5KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBicmlnaHRuZXNzKTsKIAl2b2lkICgqZXhpdCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCpjaGVja19mYikoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCBjMjEwNzJhLi4wYTM4NDJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC0xMTI0LDE1ICsxMTI0LDE4IEBACiAjICAgZGVmaW5lIGFsaWduZWRfYWRkcmVzcyhhZGRyKSAgICAgICAgICAgKCh2b2lkICopKChsb25nKShhZGRyKSAmIH4oKDFVTCA8PCBBRERSX1VOQUxJR05FRF9CSVRTKSAtIDEpKSkKICMgICBkZWZpbmUgdW5hbGlnbmVkX29mZnNldChhZGRyKSAgICAgICAgICAoKChpbnQpKChsb25nKShhZGRyKSAmICgoMSA8PCBBRERSX1VOQUxJR05FRF9CSVRTKSAtIDEpKSkgPDwgMykKIAotIyAgIGRlZmluZSBzZXRfYml0X3VuYWxpZ25lZChuciwgYWRkcikgICAgIGV4dDJfc2V0X2JpdCgobnIpICsgdW5hbGlnbmVkX29mZnNldChhZGRyKSwgYWxpZ25lZF9hZGRyZXNzKGFkZHIpKQotIyAgIGRlZmluZSBjbGVhcl9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKSAgIGV4dDJfY2xlYXJfYml0KChucikgKyB1bmFsaWduZWRfb2Zmc2V0KGFkZHIpLCBhbGlnbmVkX2FkZHJlc3MoYWRkcikpCi0jICAgZGVmaW5lIHRlc3RfYml0X3VuYWxpZ25lZChuciwgYWRkcikgICAgZXh0Ml90ZXN0X2JpdCgobnIpICsgdW5hbGlnbmVkX29mZnNldChhZGRyKSwgYWxpZ25lZF9hZGRyZXNzKGFkZHIpKQorIyAgIGRlZmluZSBzZXRfYml0X3VuYWxpZ25lZChuciwgYWRkcikJXAorCV9fdGVzdF9hbmRfc2V0X2JpdF9sZSgobnIpICsgdW5hbGlnbmVkX29mZnNldChhZGRyKSwgYWxpZ25lZF9hZGRyZXNzKGFkZHIpKQorIyAgIGRlZmluZSBjbGVhcl9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKQlcCisJX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUoKG5yKSArIHVuYWxpZ25lZF9vZmZzZXQoYWRkciksIGFsaWduZWRfYWRkcmVzcyhhZGRyKSkKKyMgICBkZWZpbmUgdGVzdF9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKQlcCisJdGVzdF9iaXRfbGUoKG5yKSArIHVuYWxpZ25lZF9vZmZzZXQoYWRkciksIGFsaWduZWRfYWRkcmVzcyhhZGRyKSkKIAogI2Vsc2UKIAotIyAgIGRlZmluZSBzZXRfYml0X3VuYWxpZ25lZChuciwgYWRkcikgICAgIGV4dDJfc2V0X2JpdChuciwgYWRkcikKLSMgICBkZWZpbmUgY2xlYXJfYml0X3VuYWxpZ25lZChuciwgYWRkcikgICBleHQyX2NsZWFyX2JpdChuciwgYWRkcikKLSMgICBkZWZpbmUgdGVzdF9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKSAgICBleHQyX3Rlc3RfYml0KG5yLCBhZGRyKQorIyAgIGRlZmluZSBzZXRfYml0X3VuYWxpZ25lZChuciwgYWRkcikJX190ZXN0X2FuZF9zZXRfYml0X2xlKG5yLCBhZGRyKQorIyAgIGRlZmluZSBjbGVhcl9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKQlfX3Rlc3RfYW5kX2NsZWFyX2JpdF9sZShuciwgYWRkcikKKyMgICBkZWZpbmUgdGVzdF9iaXRfdW5hbGlnbmVkKG5yLCBhZGRyKQl0ZXN0X2JpdF9sZShuciwgYWRkcikKIAogI2VuZGlmCiAKQEAgLTIzMjksMTQgKzIzMzIsMTAgQEAKIF9fdTMyIHl1cmFfaGFzaChjb25zdCBzaWduZWQgY2hhciAqbXNnLCBpbnQgbGVuKTsKIF9fdTMyIHI1X2hhc2goY29uc3Qgc2lnbmVkIGNoYXIgKm1zZywgaW50IGxlbik7CiAKLS8qIHRoZSBleHQyIGJpdCByb3V0aW5lcyBhZGp1c3QgZm9yIGJpZyBvciBsaXR0bGUgZW5kaWFuIGFzCi0qKiBhcHByb3ByaWF0ZSBmb3IgdGhlIGFyY2gsIHNvIGluIG91ciBsYXppbmVzcyB3ZSB1c2UgdGhlbSByYXRoZXIKLSoqIHRoYW4gdXNpbmcgdGhlIGJpdCByb3V0aW5lcyB0aGV5IGNhbGwgbW9yZSBkaXJlY3RseS4gIFRoZXNlCi0qKiByb3V0aW5lcyBtdXN0IGJlIHVzZWQgd2hlbiBjaGFuZ2luZyBvbiBkaXNrIGJpdG1hcHMuICAqLwotI2RlZmluZSByZWlzZXJmc190ZXN0X2FuZF9zZXRfbGVfYml0ICAgZXh0Ml9zZXRfYml0Ci0jZGVmaW5lIHJlaXNlcmZzX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdCBleHQyX2NsZWFyX2JpdAotI2RlZmluZSByZWlzZXJmc190ZXN0X2xlX2JpdCAgICAgICAgICAgZXh0Ml90ZXN0X2JpdAotI2RlZmluZSByZWlzZXJmc19maW5kX25leHRfemVyb19sZV9iaXQgZXh0Ml9maW5kX25leHRfemVyb19iaXQKKyNkZWZpbmUgcmVpc2VyZnNfdGVzdF9hbmRfc2V0X2xlX2JpdAlfX3Rlc3RfYW5kX3NldF9iaXRfbGUKKyNkZWZpbmUgcmVpc2VyZnNfdGVzdF9hbmRfY2xlYXJfbGVfYml0CV9fdGVzdF9hbmRfY2xlYXJfYml0X2xlCisjZGVmaW5lIHJlaXNlcmZzX3Rlc3RfbGVfYml0CQl0ZXN0X2JpdF9sZQorI2RlZmluZSByZWlzZXJmc19maW5kX25leHRfemVyb19sZV9iaXQJZmluZF9uZXh0X3plcm9fYml0X2xlCiAKIC8qIHNvbWV0aW1lcyByZWlzZXJmc190cnVuY2F0ZSBtYXkgcmVxdWlyZSB0byBhbGxvY2F0ZSBmZXcgbmV3IGJsb2NrcwogICAgdG8gcGVyZm9ybSBpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbi4gUGVvcGxlIHByb2JhYmx5IHVzZWQgdG8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAppbmRleCBhNTkzMGNiLi5jOWQ2MjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCkBAIC0xMjksMjAgKzEyOSwyMiBAQAogdm9pZCByZXNfY291bnRlcl91bmNoYXJnZV9sb2NrZWQoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCk7CiB2b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfbGltaXRfY2hlY2tfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY250KQorLyoqCisgKiByZXNfY291bnRlcl9tYXJnaW4gLSBjYWxjdWxhdGUgY2hhcmdlYWJsZSBzcGFjZSBvZiBhIGNvdW50ZXIKKyAqIEBjbnQ6IHRoZSBjb3VudGVyCisgKgorICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBoYXJkIGxpbWl0IGFuZCB0aGUgY3VycmVudCB1c2FnZQorICogb2YgcmVzb3VyY2UgY291bnRlciBAY250LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyByZXNfY291bnRlcl9tYXJnaW4oc3RydWN0IHJlc19jb3VudGVyICpjbnQpCiB7Ci0JaWYgKGNudC0+dXNhZ2UgPCBjbnQtPmxpbWl0KQotCQlyZXR1cm4gdHJ1ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWFyZ2luOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2NoZWNrX2xvY2tlZChzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNudCkKLXsKLQlpZiAoY250LT51c2FnZSA8IGNudC0+c29mdF9saW1pdCkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNudC0+bG9jaywgZmxhZ3MpOworCW1hcmdpbiA9IGNudC0+bGltaXQgLSBjbnQtPnVzYWdlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNudC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBtYXJnaW47CiB9CiAKIC8qKgpAQCAtMTY3LDUyICsxNjksNiBAQAogCXJldHVybiBleGNlc3M7CiB9CiAKLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZWN0IGlmIHRoZSBjZ3JvdXAgaXMgd2l0aGluIGl0J3MgbGltaXQgb3IKLSAqIG5vdC4gSXQncyBjdXJyZW50bHkgY2FsbGVkIGZyb20gY2dyb3VwX3Jzc19wcmVwYXJlKCkKLSAqLwotc3RhdGljIGlubGluZSBib29sIHJlc19jb3VudGVyX2NoZWNrX3VuZGVyX2xpbWl0KHN0cnVjdCByZXNfY291bnRlciAqY250KQotewotCWJvb2wgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY250LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gcmVzX2NvdW50ZXJfbGltaXRfY2hlY2tfbG9ja2VkKGNudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY250LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiByZXNfY291bnRlcl9jaGVja19tYXJnaW4gLSBjaGVjayBpZiB0aGUgY291bnRlciBhbGxvd3MgY2hhcmdpbmcKLSAqIEBjbnQ6IHRoZSByZXNvdXJjZSBjb3VudGVyIHRvIGNoZWNrCi0gKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY2hlY2sgdGhlIHJlbWFpbmluZyBzcGFjZSBhZ2FpbnN0Ci0gKgotICogUmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgb24gd2hldGhlciB0aGUgY291bnRlciBjYW4gYmUgY2hhcmdlZAotICogQGJ5dGVzIG9yIHdoZXRoZXIgdGhpcyB3b3VsZCBleGNlZWQgdGhlIGxpbWl0LgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luKHN0cnVjdCByZXNfY291bnRlciAqY250LAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBieXRlcykKLXsKLQlib29sIHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNudC0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGNudC0+bGltaXQgLSBjbnQtPnVzYWdlID49IGJ5dGVzOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNudC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCByZXNfY291bnRlcl9jaGVja191bmRlcl9zb2Z0X2xpbWl0KHN0cnVjdCByZXNfY291bnRlciAqY250KQotewotCWJvb2wgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY250LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gcmVzX2NvdW50ZXJfc29mdF9saW1pdF9jaGVja19sb2NrZWQoY250KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbnQtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzX2NvdW50ZXJfcmVzZXRfbWF4KHN0cnVjdCByZXNfY291bnRlciAqY250KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpby5oIGIvaW5jbHVkZS9saW51eC9yaW8uaAppbmRleCBmZjY4MWViLi40ZTM3YTdjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpby5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFJJT19OT19IT1BDT1VOVAkJLTEKICNkZWZpbmUgUklPX0lOVkFMSURfREVTVElECTB4ZmZmZgogCisjZGVmaW5lIFJJT19NQVhfTVBPUlRTCQk4CiAjZGVmaW5lIFJJT19NQVhfTVBPUlRfUkVTT1VSQ0VTCTE2CiAjZGVmaW5lIFJJT19NQVhfREVWX1JFU09VUkNFUwkxNgogCkBAIC0yNDEsNyArMjQyLDcgQEAKIAlzdHJ1Y3QgcmlvX21zZyBpbmJfbXNnW1JJT19NQVhfTUJPWF07CiAJc3RydWN0IHJpb19tc2cgb3V0Yl9tc2dbUklPX01BWF9NQk9YXTsKIAlpbnQgaG9zdF9kZXZpY2VpZDsJLyogSG9zdCBkZXZpY2UgSUQgKi8KLQlzdHJ1Y3QgcmlvX29wcyAqb3BzOwkvKiBtYWludGVuYW5jZSB0cmFuc2FjdGlvbiBmdW5jdGlvbnMgKi8KKwlzdHJ1Y3QgcmlvX29wcyAqb3BzOwkvKiBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCByb3V0aW5lcyAqLwogCXVuc2lnbmVkIGNoYXIgaWQ7CS8qIHBvcnQgSUQsIHVuaXF1ZSBhbW9uZyBhbGwgcG9ydHMgKi8KIAl1bnNpZ25lZCBjaGFyIGluZGV4OwkvKiBwb3J0IGluZGV4LCB1bmlxdWUgYW1vbmcgYWxsIHBvcnQKIAkJCQkgICBpbnRlcmZhY2VzIG9mIHRoZSBzYW1lIHR5cGUgKi8KQEAgLTI4NSw2ICsyODYsMTMgQEAKICAqIEBjd3JpdGU6IENhbGxiYWNrIHRvIHBlcmZvcm0gbmV0d29yayB3cml0ZSBvZiBjb25maWcgc3BhY2UuCiAgKiBAZHNlbmQ6IENhbGxiYWNrIHRvIHNlbmQgYSBkb29yYmVsbCBtZXNzYWdlLgogICogQHB3ZW5hYmxlOiBDYWxsYmFjayB0byBlbmFibGUvZGlzYWJsZSBwb3J0LXdyaXRlIG1lc3NhZ2UgaGFuZGxpbmcuCisgKiBAb3Blbl9vdXRiX21ib3g6IENhbGxiYWNrIHRvIGluaXRpYWxpemUgb3V0Ym91bmQgbWFpbGJveC4KKyAqIEBjbG9zZV9vdXRiX21ib3g6IENhbGxiYWNrIHRvIHNodXQgZG93biBvdXRib3VuZCBtYWlsYm94LgorICogQG9wZW5faW5iX21ib3g6IENhbGxiYWNrIHRvIGluaXRpYWxpemUgaW5ib3VuZCBtYWlsYm94LgorICogQGNsb3NlX2luYl9tYm94OiBDYWxsYmFjayB0bwlzaHV0IGRvd24gaW5ib3VuZCBtYWlsYm94LgorICogQGFkZF9vdXRiX21lc3NhZ2U6IENhbGxiYWNrIHRvIGFkZCBhIG1lc3NhZ2UgdG8gYW4gb3V0Ym91bmQgbWFpbGJveCBxdWV1ZS4KKyAqIEBhZGRfaW5iX2J1ZmZlcjogQ2FsbGJhY2sgdG8JYWRkIGEgYnVmZmVyIHRvIGFuIGluYm91bmQgbWFpbGJveCBxdWV1ZS4KKyAqIEBnZXRfaW5iX21lc3NhZ2U6IENhbGxiYWNrIHRvIGdldCBhIG1lc3NhZ2UgZnJvbSBhbiBpbmJvdW5kIG1haWxib3ggcXVldWUuCiAgKi8KIHN0cnVjdCByaW9fb3BzIHsKIAlpbnQgKCpsY3JlYWQpIChzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCwgaW50IGluZGV4LCB1MzIgb2Zmc2V0LCBpbnQgbGVuLApAQCAtMjk3LDYgKzMwNSwxNiBAQAogCQkJdTggaG9wY291bnQsIHUzMiBvZmZzZXQsIGludCBsZW4sIHUzMiBkYXRhKTsKIAlpbnQgKCpkc2VuZCkgKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgaW5kZXgsIHUxNiBkZXN0aWQsIHUxNiBkYXRhKTsKIAlpbnQgKCpwd2VuYWJsZSkgKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgZW5hYmxlKTsKKwlpbnQgKCpvcGVuX291dGJfbWJveCkoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHZvaWQgKmRldl9pZCwKKwkJCSAgICAgIGludCBtYm94LCBpbnQgZW50cmllcyk7CisJdm9pZCAoKmNsb3NlX291dGJfbWJveCkoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIGludCBtYm94KTsKKwlpbnQgICgqb3Blbl9pbmJfbWJveCkoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHZvaWQgKmRldl9pZCwKKwkJCSAgICAgaW50IG1ib3gsIGludCBlbnRyaWVzKTsKKwl2b2lkICgqY2xvc2VfaW5iX21ib3gpKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgbWJveCk7CisJaW50ICAoKmFkZF9vdXRiX21lc3NhZ2UpKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBzdHJ1Y3QgcmlvX2RldiAqcmRldiwKKwkJCQkgaW50IG1ib3gsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisJaW50ICgqYWRkX2luYl9idWZmZXIpKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBpbnQgbWJveCwgdm9pZCAqYnVmKTsKKwl2b2lkICooKmdldF9pbmJfbWVzc2FnZSkoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIGludCBtYm94KTsKIH07CiAKICNkZWZpbmUgUklPX1JFU09VUkNFX01FTQkweDAwMDAwMTAwCkBAIC0zNzgsMTIgKzM5Niw3IEBACiB9OwogCiAvKiBBcmNoaXRlY3R1cmUgYW5kIGhhcmR3YXJlLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludCByaW9faW5pdF9tcG9ydHModm9pZCk7CiBleHRlcm4gdm9pZCByaW9fcmVnaXN0ZXJfbXBvcnQoc3RydWN0IHJpb19tcG9ydCAqKTsKLWV4dGVybiBpbnQgcmlvX2h3X2FkZF9vdXRiX21lc3NhZ2Uoc3RydWN0IHJpb19tcG9ydCAqLCBzdHJ1Y3QgcmlvX2RldiAqLCBpbnQsCi0JCQkJICAgdm9pZCAqLCBzaXplX3QpOwotZXh0ZXJuIGludCByaW9faHdfYWRkX2luYl9idWZmZXIoc3RydWN0IHJpb19tcG9ydCAqLCBpbnQsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCAqcmlvX2h3X2dldF9pbmJfbWVzc2FnZShzdHJ1Y3QgcmlvX21wb3J0ICosIGludCk7CiBleHRlcm4gaW50IHJpb19vcGVuX2luYl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKiwgdm9pZCAqLCBpbnQsIGludCk7CiBleHRlcm4gdm9pZCByaW9fY2xvc2VfaW5iX21ib3goc3RydWN0IHJpb19tcG9ydCAqLCBpbnQpOwogZXh0ZXJuIGludCByaW9fb3Blbl9vdXRiX21ib3goc3RydWN0IHJpb19tcG9ydCAqLCB2b2lkICosIGludCwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmlvX2Rydi5oIGIvaW5jbHVkZS9saW51eC9yaW9fZHJ2LmgKaW5kZXggZTA5ZTU2NS4uMjI5YjNjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW9fZHJ2LmgKKysrIGIvaW5jbHVkZS9saW51eC9yaW9fZHJ2LmgKQEAgLTMxNyw3ICszMTcsOCBAQAogCQkJCSAgICAgICBzdHJ1Y3QgcmlvX2RldiAqcmRldiwgaW50IG1ib3gsCiAJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbikKIHsKLQlyZXR1cm4gcmlvX2h3X2FkZF9vdXRiX21lc3NhZ2UobXBvcnQsIHJkZXYsIG1ib3gsIGJ1ZmZlciwgbGVuKTsKKwlyZXR1cm4gbXBvcnQtPm9wcy0+YWRkX291dGJfbWVzc2FnZShtcG9ydCwgcmRldiwgbWJveCwKKwkJCQkJCSAgIGJ1ZmZlciwgbGVuKTsKIH0KIAogZXh0ZXJuIGludCByaW9fcmVxdWVzdF9pbmJfbWJveChzdHJ1Y3QgcmlvX21wb3J0ICosIHZvaWQgKiwgaW50LCBpbnQsCkBAIC0zMzYsNyArMzM3LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHJpb19hZGRfaW5iX2J1ZmZlcihzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCwgaW50IG1ib3gsCiAJCQkJICAgICB2b2lkICpidWZmZXIpCiB7Ci0JcmV0dXJuIHJpb19od19hZGRfaW5iX2J1ZmZlcihtcG9ydCwgbWJveCwgYnVmZmVyKTsKKwlyZXR1cm4gbXBvcnQtPm9wcy0+YWRkX2luYl9idWZmZXIobXBvcnQsIG1ib3gsIGJ1ZmZlcik7CiB9CiAKIC8qKgpAQCAtMzQ4LDcgKzM0OSw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqcmlvX2dldF9pbmJfbWVzc2FnZShzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCwgaW50IG1ib3gpCiB7Ci0JcmV0dXJuIHJpb19od19nZXRfaW5iX21lc3NhZ2UobXBvcnQsIG1ib3gpOworCXJldHVybiBtcG9ydC0+b3BzLT5nZXRfaW5iX21lc3NhZ2UobXBvcnQsIG1ib3gpOwogfQogCiAvKiBEb29yYmVsbCBtYW5hZ2VtZW50ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oCmluZGV4IGU5ZmQwNGMuLjgzMGU2NWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC0yNywxOCArMjcsMTUgQEAKIHN0cnVjdCBhbm9uX3ZtYSB7CiAJc3RydWN0IGFub25fdm1hICpyb290OwkvKiBSb290IG9mIHRoaXMgYW5vbl92bWEgdHJlZSAqLwogCXNwaW5sb2NrX3QgbG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyB0byB2bWEgbGlzdCAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tTTSkgfHwgZGVmaW5lZChDT05GSUdfTUlHUkFUSU9OKQotCiAJLyoKLQkgKiBUaGUgZXh0ZXJuYWxfcmVmY291bnQgaXMgdGFrZW4gYnkgZWl0aGVyIEtTTSBvciBwYWdlIG1pZ3JhdGlvbgotCSAqIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gYW4gYW5vbl92bWEgd2hlbiB0aGVyZSBpcyBubworCSAqIFRoZSByZWZjb3VudCBpcyB0YWtlbiBvbiBhbiBhbm9uX3ZtYSB3aGVuIHRoZXJlIGlzIG5vCiAJICogZ3VhcmFudGVlIHRoYXQgdGhlIHZtYSBvZiBwYWdlIHRhYmxlcyB3aWxsIGV4aXN0IGZvcgogCSAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgb3BlcmF0aW9uLiBBIGNhbGxlciB0aGF0IHRha2VzCiAJICogdGhlIHJlZmVyZW5jZSBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdXAgdGhlCiAJICogYW5vbl92bWEgaWYgdGhleSBhcmUgdGhlIGxhc3QgdXNlciBvbiByZWxlYXNlCiAJICovCi0JYXRvbWljX3QgZXh0ZXJuYWxfcmVmY291bnQ7Ci0jZW5kaWYKKwlhdG9taWNfdCByZWZjb3VudDsKKwogCS8qCiAJICogTk9URTogdGhlIExTQiBvZiB0aGUgaGVhZC5uZXh0IGlzIHNldCBieQogCSAqIG1tX3Rha2VfYWxsX2xvY2tzKCkgX2FmdGVyXyB0YWtpbmcgdGhlIGFib3ZlIGxvY2suIFNvIHRoZQpAQCAtNzEsNDIgKzY4LDE5IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX01NVQotI2lmIGRlZmluZWQoQ09ORklHX0tTTSkgfHwgZGVmaW5lZChDT05GSUdfTUlHUkFUSU9OKQotc3RhdGljIGlubGluZSB2b2lkIGFub252bWFfZXh0ZXJuYWxfcmVmY291bnRfaW5pdChzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQotewotCWF0b21pY19zZXQoJmFub25fdm1hLT5leHRlcm5hbF9yZWZjb3VudCwgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFub252bWFfZXh0ZXJuYWxfcmVmY291bnQoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKLXsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJmFub25fdm1hLT5leHRlcm5hbF9yZWZjb3VudCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKIHsKLQlhdG9taWNfaW5jKCZhbm9uX3ZtYS0+ZXh0ZXJuYWxfcmVmY291bnQpOworCWF0b21pY19pbmMoJmFub25fdm1hLT5yZWZjb3VudCk7CiB9CiAKLXZvaWQgZHJvcF9hbm9uX3ZtYShzdHJ1Y3QgYW5vbl92bWEgKik7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFub252bWFfZXh0ZXJuYWxfcmVmY291bnRfaW5pdChzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQotewotfQordm9pZCBfX3B1dF9hbm9uX3ZtYShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKTsKIAotc3RhdGljIGlubGluZSBpbnQgYW5vbnZtYV9leHRlcm5hbF9yZWZjb3VudChzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQorc3RhdGljIGlubGluZSB2b2lkIHB1dF9hbm9uX3ZtYShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQogewotCXJldHVybiAwOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbm9uX3ZtYS0+cmVmY291bnQpKQorCQlfX3B1dF9hbm9uX3ZtYShhbm9uX3ZtYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRyb3BfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfS1NNICovCi0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICpwYWdlX2Fub25fdm1hKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmICgoKHVuc2lnbmVkIGxvbmcpcGFnZS0+bWFwcGluZyAmIFBBR0VfTUFQUElOR19GTEFHUykgIT0KQEAgLTE0OCw3ICsxMjIsNiBAQAogaW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiBpbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogdm9pZCBfX2Fub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwotdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX21lcmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0KQpAQCAtMTU3LDYgKzEzMCw4IEBACiAJdW5saW5rX2Fub25fdm1hcyhuZXh0KTsKIH0KIAorc3RydWN0IGFub25fdm1hICpwYWdlX2dldF9hbm9uX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKIC8qCiAgKiBybWFwIGludGVyZmFjZXMgY2FsbGVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHB0ZSBvZiBwYWdlCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCBjMTU5MzZmLi45OGZjN2VkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xNDcxLDYgKzE0NzEsNyBAQAogI2lmZGVmIENPTkZJR19OVU1BCiAJc3RydWN0IG1lbXBvbGljeSAqbWVtcG9saWN5OwkvKiBQcm90ZWN0ZWQgYnkgYWxsb2NfbG9jayAqLwogCXNob3J0IGlsX25leHQ7CisJc2hvcnQgcHJlZl9ub2RlX2Zvcms7CiAjZW5kaWYKIAlhdG9taWNfdCBmc19leGNsOwkvKiBob2xkaW5nIGZzIGV4Y2x1c2l2ZSByZXNvdXJjZXMgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwpAQCAtMTUyMyw4ICsxNTI0LDggQEAKIAlzdHJ1Y3QgbWVtY2dfYmF0Y2hfaW5mbyB7CiAJCWludCBkb19iYXRjaDsJLyogaW5jcmVtZW50ZWQgd2hlbiBiYXRjaCB1bmNoYXJnZSBzdGFydGVkICovCiAJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsgLyogdGFyZ2V0IG1lbWNnIG9mIHVuY2hhcmdlICovCi0JCXVuc2lnbmVkIGxvbmcgYnl0ZXM7IAkJLyogdW5jaGFyZ2VkIHVzYWdlICovCi0JCXVuc2lnbmVkIGxvbmcgbWVtc3dfYnl0ZXM7IC8qIHVuY2hhcmdlZCBtZW0rc3dhcCB1c2FnZSAqLworCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwkvKiB1bmNoYXJnZWQgdXNhZ2UgKi8KKwkJdW5zaWduZWQgbG9uZyBtZW1zd19ucl9wYWdlczsgLyogdW5jaGFyZ2VkIG1lbStzd2FwIHVzYWdlICovCiAJfSBtZW1jZ19iYXRjaDsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCA1NmNhYzUyLi5jYTAyZjE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC00NywxMyArNDcsMTQgQEAKIAogc3RydWN0IGN0bF90YWJsZTsKIHN0cnVjdCBhdWRpdF9rcnVsZTsKK3N0cnVjdCB1c2VyX25hbWVzcGFjZTsKIAogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW4gc2VjdXJpdHkvY2FwYWJpbGl0eS5jIGFuZCBhcmUgdXNlZAogICogYXMgdGhlIGRlZmF1bHQgY2FwYWJpbGl0aWVzIGZ1bmN0aW9ucwogICovCiBleHRlcm4gaW50IGNhcF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKLQkJICAgICAgIGludCBjYXAsIGludCBhdWRpdCk7CisJCSAgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwLCBpbnQgYXVkaXQpOwogZXh0ZXJuIGludCBjYXBfc2V0dGltZShjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRzLCBjb25zdCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKIGV4dGVybiBpbnQgY2FwX3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpOwogZXh0ZXJuIGludCBjYXBfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpOwpAQCAtMTI2Miw2ICsxMjYzLDcgQEAKICAqCWNyZWRlbnRpYWxzLgogICoJQHRzayBjb250YWlucyB0aGUgdGFza19zdHJ1Y3QgZm9yIHRoZSBwcm9jZXNzLgogICoJQGNyZWQgY29udGFpbnMgdGhlIGNyZWRlbnRpYWxzIHRvIHVzZS4KKyAqICAgICAgQG5zIGNvbnRhaW5zIHRoZSB1c2VyIG5hbWVzcGFjZSB3ZSB3YW50IHRoZSBjYXBhYmlsaXR5IGluCiAgKglAY2FwIGNvbnRhaW5zIHRoZSBjYXBhYmlsaXR5IDxpbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaD4uCiAgKglAYXVkaXQ6IFdoZXRoZXIgdG8gd3JpdGUgYW4gYXVkaXQgbWVzc2FnZSBvciBub3QKICAqCVJldHVybiAwIGlmIHRoZSBjYXBhYmlsaXR5IGlzIGdyYW50ZWQgZm9yIEB0c2suCkBAIC0xMzg0LDcgKzEzODYsNyBAQAogCQkgICAgICAgY29uc3Qga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKIAkJICAgICAgIGNvbnN0IGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKTsKIAlpbnQgKCpjYXBhYmxlKSAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAotCQkJaW50IGNhcCwgaW50IGF1ZGl0KTsKKwkJCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXAsIGludCBhdWRpdCk7CiAJaW50ICgqcXVvdGFjdGwpIChpbnQgY21kcywgaW50IHR5cGUsIGludCBpZCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiAJaW50ICgqcXVvdGFfb24pIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCWludCAoKnN5c2xvZykgKGludCB0eXBlKTsKQEAgLTE2NjUsOSArMTY2NywxMiBAQAogCQkgICAgY29uc3Qga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJCSAgICBjb25zdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLAogCQkgICAgY29uc3Qga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpOwotaW50IHNlY3VyaXR5X2NhcGFibGUoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGludCBjYXApOwotaW50IHNlY3VyaXR5X3JlYWxfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCk7Ci1pbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlX25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApOworaW50IHNlY3VyaXR5X2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCQlpbnQgY2FwKTsKK2ludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsCisJCQlpbnQgY2FwKTsKK2ludCBzZWN1cml0eV9yZWFsX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApOwogaW50IHNlY3VyaXR5X3F1b3RhY3RsKGludCBjbWRzLCBpbnQgdHlwZSwgaW50IGlkLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBzZWN1cml0eV9xdW90YV9vbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogaW50IHNlY3VyaXR5X3N5c2xvZyhpbnQgdHlwZSk7CkBAIC0xODYwLDI4ICsxODY1LDI5IEBACiAJcmV0dXJuIGNhcF9jYXBzZXQobmV3LCBvbGQsIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGFibGUoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGludCBjYXApCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBhYmxlKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsCisJCQkJICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGludCBjYXApCiB7Ci0JcmV0dXJuIGNhcF9jYXBhYmxlKGN1cnJlbnQsIGNyZWQsIGNhcCwgU0VDVVJJVFlfQ0FQX0FVRElUKTsKKwlyZXR1cm4gY2FwX2NhcGFibGUoY3VycmVudCwgY3JlZCwgbnMsIGNhcCwgU0VDVVJJVFlfQ0FQX0FVRElUKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKQogewogCWludCByZXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JcmV0ID0gY2FwX2NhcGFibGUodHNrLCBfX3Rhc2tfY3JlZCh0c2spLCBjYXAsIFNFQ1VSSVRZX0NBUF9BVURJVCk7CisJcmV0ID0gY2FwX2NhcGFibGUodHNrLCBfX3Rhc2tfY3JlZCh0c2spLCBucywgY2FwLCBTRUNVUklUWV9DQVBfQVVESVQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUKLWludCBzZWN1cml0eV9yZWFsX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCkKK2ludCBzZWN1cml0eV9yZWFsX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCkKIHsKIAlpbnQgcmV0OwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXJldCA9IGNhcF9jYXBhYmxlKHRzaywgX190YXNrX2NyZWQodHNrKSwgY2FwLAorCXJldCA9IGNhcF9jYXBhYmxlKHRzaywgX190YXNrX2NyZWQodHNrKSwgbnMsIGNhcCwKIAkJCSAgICAgICBTRUNVUklUWV9DQVBfTk9BVURJVCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2lnbWEuaCBiL2luY2x1ZGUvbGludXgvc2lnbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmFjY2IzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zaWdtYS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBMb2FkIGZpcm13YXJlIGZpbGVzIGZyb20gQW5hbG9nIERldmljZXMgU2lnbWFTdHVkaW8KKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX1NJR01BX0ZJUk1XQVJFX0hfXworI2RlZmluZSBfX1NJR01BX0ZJUk1XQVJFX0hfXworCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgaTJjX2NsaWVudDsKKworI2RlZmluZSBTSUdNQV9NQUdJQyAiQURJU0lHTSIKKworc3RydWN0IHNpZ21hX2Zpcm13YXJlIHsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCXNpemVfdCBwb3M7Cit9OworCitzdHJ1Y3Qgc2lnbWFfZmlybXdhcmVfaGVhZGVyIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzddOworCXU4IHZlcnNpb247CisJdTMyIGNyYzsKK307CisKK2VudW0geworCVNJR01BX0FDVElPTl9XUklURVhCWVRFUyA9IDAsCisJU0lHTUFfQUNUSU9OX1dSSVRFU0lOR0xFLAorCVNJR01BX0FDVElPTl9XUklURVNBRkVMT0FELAorCVNJR01BX0FDVElPTl9ERUxBWSwKKwlTSUdNQV9BQ1RJT05fUExMV0FJVCwKKwlTSUdNQV9BQ1RJT05fTk9PUCwKKwlTSUdNQV9BQ1RJT05fRU5ELAorfTsKKworc3RydWN0IHNpZ21hX2FjdGlvbiB7CisJdTggaW5zdHI7CisJdTggbGVuX2hpOworCXUxNiBsZW47CisJdTE2IGFkZHI7CisJdW5zaWduZWQgY2hhciBwYXlsb2FkW107Cit9OworCitzdGF0aWMgaW5saW5lIHUzMiBzaWdtYV9hY3Rpb25fbGVuKHN0cnVjdCBzaWdtYV9hY3Rpb24gKnNhKQoreworCXJldHVybiAoc2EtPmxlbl9oaSA8PCAxNikgfCBzYS0+bGVuOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBzaWdtYV9hY3Rpb25fc2l6ZShzdHJ1Y3Qgc2lnbWFfYWN0aW9uICpzYSwgdTMyIHBheWxvYWRfbGVuKQoreworCXJldHVybiBzaXplb2YoKnNhKSArIHBheWxvYWRfbGVuICsgKHBheWxvYWRfbGVuICUgMik7Cit9CisKK2V4dGVybiBpbnQgcHJvY2Vzc19zaWdtYV9maXJtd2FyZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICpuYW1lKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IGZhOTA4NjYuLmFkNGRkMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC0xMDUsNyArMTA1LDYgQEAKIGludCBrbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKIHZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICosIHZvaWQgKik7CiB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICopOwotY29uc3QgY2hhciAqa21lbV9jYWNoZV9uYW1lKHN0cnVjdCBrbWVtX2NhY2hlICopOwogCiAvKgogICogUGxlYXNlIHVzZSB0aGlzIG1hY3JvIHRvIGNyZWF0ZSBzbGFiIGNhY2hlcy4gU2ltcGx5IHNwZWNpZnkgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKaW5kZXggOGI2ZThhZS4uNDVjYTEyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaApAQCAtMzIsMTAgKzMyLDE0IEBACiAJREVBQ1RJVkFURV9UT19UQUlMLAkvKiBDcHUgc2xhYiB3YXMgbW92ZWQgdG8gdGhlIHRhaWwgb2YgcGFydGlhbHMgKi8KIAlERUFDVElWQVRFX1JFTU9URV9GUkVFUywvKiBTbGFiIGNvbnRhaW5lZCByZW1vdGVseSBmcmVlZCBvYmplY3RzICovCiAJT1JERVJfRkFMTEJBQ0ssCQkvKiBOdW1iZXIgb2YgdGltZXMgZmFsbGJhY2sgd2FzIG5lY2Vzc2FyeSAqLworCUNNUFhDSEdfRE9VQkxFX0NQVV9GQUlMLC8qIEZhaWx1cmUgb2YgdGhpc19jcHVfY21weGNoZ19kb3VibGUgKi8KIAlOUl9TTFVCX1NUQVRfSVRFTVMgfTsKIAogc3RydWN0IGttZW1fY2FjaGVfY3B1IHsKLQl2b2lkICoqZnJlZWxpc3Q7CS8qIFBvaW50ZXIgdG8gZmlyc3QgZnJlZSBwZXIgY3B1IG9iamVjdCAqLworCXZvaWQgKipmcmVlbGlzdDsJLyogUG9pbnRlciB0byBuZXh0IGF2YWlsYWJsZSBvYmplY3QgKi8KKyNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAorCXVuc2lnbmVkIGxvbmcgdGlkOwkvKiBHbG9iYWxseSB1bmlxdWUgdHJhbnNhY3Rpb24gaWQgKi8KKyNlbmRpZgogCXN0cnVjdCBwYWdlICpwYWdlOwkvKiBUaGUgc2xhYiBmcm9tIHdoaWNoIHdlIGFyZSBhbGxvY2F0aW5nICovCiAJaW50IG5vZGU7CQkvKiBUaGUgbm9kZSBvZiB0aGUgcGFnZSAob3IgLTEgZm9yIGRlYnVnKSAqLwogI2lmZGVmIENPTkZJR19TTFVCX1NUQVRTCkBAIC03MCw2ICs3NCw3IEBACiAJc3RydWN0IGttZW1fY2FjaGVfY3B1IF9fcGVyY3B1ICpjcHVfc2xhYjsKIAkvKiBVc2VkIGZvciByZXRyaXZpbmcgcGFydGlhbCBzbGFicyBldGMgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWluX3BhcnRpYWw7CiAJaW50IHNpemU7CQkvKiBUaGUgc2l6ZSBvZiBhbiBvYmplY3QgaW5jbHVkaW5nIG1ldGEgZGF0YSAqLwogCWludCBvYmpzaXplOwkJLyogVGhlIHNpemUgb2YgYW4gb2JqZWN0IHdpdGhvdXQgbWV0YSBkYXRhICovCiAJaW50IG9mZnNldDsJCS8qIEZyZWUgcG9pbnRlciBvZmZzZXQuICovCkBAIC04Myw3ICs4OCw3IEBACiAJdm9pZCAoKmN0b3IpKHZvaWQgKik7CiAJaW50IGludXNlOwkJLyogT2Zmc2V0IHRvIG1ldGFkYXRhICovCiAJaW50IGFsaWduOwkJLyogQWxpZ25tZW50ICovCi0JdW5zaWduZWQgbG9uZyBtaW5fcGFydGlhbDsKKwlpbnQgcmVzZXJ2ZWQ7CQkvKiBSZXNlcnZlZCBieXRlcyBhdCB0aGUgZW5kIG9mIHNsYWJzICovCiAJY29uc3QgY2hhciAqbmFtZTsJLyogTmFtZSAob25seSBmb3IgZGlzcGxheSEpICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBMaXN0IG9mIHNsYWIgY2FjaGVzICovCiAjaWZkZWYgQ09ORklHX1NZU0ZTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCA2ZGM5NWNhLi43NDI0M2M4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiBleHRlcm4gdm9pZCBjcHVfaWRsZSh2b2lkKTsKIApAQCAtMTE0LDYgKzExNSw4IEBACiB2b2lkIHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IHNldHVwX21heF9jcHVzOworZXh0ZXJuIHZvaWQgX19pbml0IHNldHVwX25yX2NwdV9pZHModm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgc21wX2luaXQodm9pZCk7CiAKICNlbHNlIC8qICFTTVAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbWNwMjNzMDguaCBiL2luY2x1ZGUvbGludXgvc3BpL21jcDIzczA4LmgKaW5kZXggMjJlZjEwNy4uYzQyY2ZmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvbWNwMjNzMDguaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9tY3AyM3MwOC5oCkBAIC0yLDIxICsyLDI0IEBACiAvKiBGSVhNRSBkcml2ZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIElSUXMuLi4gICovCiAKIHN0cnVjdCBtY3AyM3MwOF9jaGlwX2luZm8gewotCWJvb2wJaXNfcHJlc2VudDsJCS8qIHRydWUgaWZmIHBvcHVsYXRlZCAqLwotCXU4CXB1bGx1cHM7CQkvKiBCSVQoeCkgbWVhbnMgZW5hYmxlIHB1bGx1cCB4ICovCisJYm9vbAkJaXNfcHJlc2VudDsJLyogdHJ1ZSBpZiBwb3B1bGF0ZWQgKi8KKwl1bnNpZ25lZAlwdWxsdXBzOwkvKiBCSVQoeCkgbWVhbnMgZW5hYmxlIHB1bGx1cCB4ICovCiB9OwogCiBzdHJ1Y3QgbWNwMjNzMDhfcGxhdGZvcm1fZGF0YSB7Ci0JLyogRm91ciBzbGF2ZXMgKG51bWJlcmVkIDAuLjMpIGNhbiBzaGFyZSBvbmUgU1BJIGNoaXBzZWxlY3QsIGFuZAotCSAqIHdpbGwgcHJvdmlkZSA4Li4zMiBHUElPcyB1c2luZyAxLi40IGdwaW9fY2hpcCBpbnN0YW5jZXMuCisJLyogRm9yIG1jcDIzczA4LCB1cCB0byA0IHNsYXZlcyAobnVtYmVyZWQgMC4uMykgY2FuIHNoYXJlIG9uZSBTUEkKKwkgKiBjaGlwc2VsZWN0LCBlYWNoIHByb3ZpZGluZyAxIGdwaW9fY2hpcCBpbnN0YW5jZSB3aXRoIDggZ3Bpb3MuCisJICogRm9yIG1wYzIzczE3LCB1cCB0byA4IHNsYXZlcyAobnVtYmVyZWQgMC4uNykgY2FuIHNoYXJlIG9uZSBTUEkKKwkgKiBjaGlwc2VsZWN0LCBlYWNoIHByb3ZpZGluZyAxIGdwaW9fY2hpcCAocG9ydCBBICsgcG9ydCBCKSB3aXRoCisJICogMTYgZ3Bpb3MuCiAJICovCi0Jc3RydWN0IG1jcDIzczA4X2NoaXBfaW5mbwljaGlwWzRdOworCXN0cnVjdCBtY3AyM3MwOF9jaGlwX2luZm8JY2hpcFs4XTsKIAogCS8qICJiYXNlIiBpcyB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBHUElPLiAgRHluYW1pYyBhc3NpZ25tZW50IGlzCiAJICogbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsIGFuZCBldmVuIGlmIHRoZXJlIGFyZSBnYXBzIGluIGNoaXAKIAkgKiBhZGRyZXNzaW5nIHRoZSBHUElPIG51bWJlcnMgYXJlIHNlcXVlbnRpYWwgLi4gc28gZm9yIGV4YW1wbGUKIAkgKiBpZiBvbmx5IHNsYXZlcyAwIGFuZCAzIGFyZSBwcmVzZW50LCB0aGVpciBHUElPcyByYW5nZSBmcm9tCi0JICogYmFzZSB0byBiYXNlKzE1LgorCSAqIGJhc2UgdG8gYmFzZSsxNSAob3IgYmFzZSszMSBmb3IgczE3IHZhcmlhbnQpLgogCSAqLwogCXVuc2lnbmVkCWJhc2U7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3NwaV9vY190aW55LmggYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfb2NfdGlueS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzUyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfb2NfdGlueS5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0xJTlVYX1NQSV9TUElfT0NfVElOWV9ICisjZGVmaW5lIF9MSU5VWF9TUElfU1BJX09DX1RJTllfSAorCisvKioKKyAqIHN0cnVjdCB0aW55X3NwaV9wbGF0Zm9ybV9kYXRhIC0gcGxhdGZvcm0gZGF0YSBvZiB0aGUgT3BlbkNvcmVzIHRpbnkgU1BJCisgKiBAZnJlcToJaW5wdXQgY2xvY2sgZnJlcSB0byB0aGUgY29yZS4KKyAqIEBiYXVkd2lkdGg6CWJhdWQgcmF0ZSBkaXZpZGVyIHdpZHRoIG9mIHRoZSBjb3JlLgorICogQGdwaW9fY3NfY291bnQ6CW51bWJlciBvZiBncGlvIHBpbnMgdXNlZCBmb3IgY2hpcHNlbGVjdC4KKyAqIEBncGlvX2NzOglhcnJheSBvZiBncGlvIHBpbnMgdXNlZCBmb3IgY2hpcHNlbGVjdC4KKyAqCisgKiBmcmVxIGFuZCBiYXVkd2lkdGggYXJlIHVzZWQgb25seSBpZiB0aGUgZGl2aWRlciBpcyBwcm9ncmFtbWFibGUuCisgKi8KK3N0cnVjdCB0aW55X3NwaV9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgZnJlcTsKKwl1bnNpZ25lZCBpbnQgYmF1ZHdpZHRoOworCXVuc2lnbmVkIGludCBncGlvX2NzX2NvdW50OworCWludCAqZ3Bpb19jczsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfU1BJX1NQSV9PQ19USU5ZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3RzYzIwMDUuaCBiL2luY2x1ZGUvbGludXgvc3BpL3RzYzIwMDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWIwYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvdHNjMjAwNS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBUU0MyMDA1IHRvdWNoc2NyZWVuIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogQWFybyBLb3NraW5lbiA8YWFyby5rb3NraW5lbkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TUElfVFNDMjAwNV9ICisjZGVmaW5lIF9MSU5VWF9TUElfVFNDMjAwNV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgdHNjMjAwNV9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQJCXRzX3ByZXNzdXJlX21heDsKKwlpbnQJCXRzX3ByZXNzdXJlX2Z1ZGdlOworCWludAkJdHNfeF9tYXg7CisJaW50CQl0c194X2Z1ZGdlOworCWludAkJdHNfeV9tYXg7CisJaW50CQl0c195X2Z1ZGdlOworCWludAkJdHNfeF9wbGF0ZV9vaG07CisJdW5zaWduZWQgaW50CWVzZF90aW1lb3V0X21zOworCXZvaWQJCSgqc2V0X3Jlc2V0KShib29sIGVuYWJsZSk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggNGQ1NTkzMi4uZWQ2ZWJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTE1NSw2ICsxNTUsMTUgQEAKICNkZWZpbmUgU1dBUF9DTFVTVEVSX01BWCAzMgogI2RlZmluZSBDT01QQUNUX0NMVVNURVJfTUFYIFNXQVBfQ0xVU1RFUl9NQVgKIAorLyoKKyAqIFJhdGlvIGJldHdlZW4gdGhlIHByZXNlbnQgbWVtb3J5IGluIHRoZSB6b25lIGFuZCB0aGUgImdhcCIgdGhhdAorICogd2UncmUgYWxsb3dpbmcga3N3YXBkIHRvIHNocmluayBpbiBhZGRpdGlvbiB0byB0aGUgcGVyLXpvbmUgaGlnaAorICogd21hcmssIGV2ZW4gZm9yIHpvbmVzIHRoYXQgYWxyZWFkeSBoYXZlIHRoZSBoaWdoIHdtYXJrIHNhdGlzZmllZCwKKyAqIGluIG9yZGVyIHRvIHByb3ZpZGUgYmV0dGVyIHBlci16b25lIGxydSBiZWhhdmlvci4gV2UgYXJlIG9rIHRvCisgKiBzcGVuZCBub3QgbW9yZSB0aGFuIDElIG9mIHRoZSBtZW1vcnkgZm9yIHRoaXMgem9uZSBiYWxhbmNpbmcgImdhcCIuCisgKi8KKyNkZWZpbmUgS1NXQVBEX1pPTkVfQkFMQU5DRV9HQVBfUkFUSU8gMTAwCisKICNkZWZpbmUgU1dBUF9NQVBfTUFYCTB4M2UJLyogTWF4IGR1cGxpY2F0aW9uIGNvdW50LCBpbiBmaXJzdCBzd2FwX21hcCAqLwogI2RlZmluZSBTV0FQX01BUF9CQUQJMHgzZgkvKiBOb3RlIHBhZ2VibG9jayBpcyBiYWQsIGluIGZpcnN0IHN3YXBfbWFwICovCiAjZGVmaW5lIFNXQVBfSEFTX0NBQ0hFCTB4NDAJLyogRmxhZyBwYWdlIGlzIGNhY2hlZCwgaW4gZmlyc3Qgc3dhcF9tYXAgKi8KQEAgLTIxNSw2ICsyMjQsNyBAQAogZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKTsKIGV4dGVybiBpbnQgbHJ1X2FkZF9kcmFpbl9hbGwodm9pZCk7CiBleHRlcm4gdm9pZCByb3RhdGVfcmVjbGFpbWFibGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBkZWFjdGl2YXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgc3dhcF9zZXR1cCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggMWY1YzE4ZS4uODNlY2MxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtODI1LDYgKzgyNSw3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX2Zhbm90aWZ5X21hcmsoaW50IGZhbm90aWZ5X2ZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJCQkJICB1NjQgbWFzaywgaW50IGZkLAogCQkJCSAgY29uc3QgY2hhciAgX191c2VyICpwYXRobmFtZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3N5bmNmcyhpbnQgZmQpOwogCiBpbnQga2VybmVsX2V4ZWN2ZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpjb25zdCBlbnZwW10pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHkuaAppbmRleCA0ZTUzZDQ2NC4uOWY0NjljNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC04Miw3ICs4Miw3IEBACiAKIAogc3RydWN0IHR0eV9idWZoZWFkIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkOwkvKiBRdWV1ZSBoZWFkICovCiAJc3RydWN0IHR0eV9idWZmZXIgKnRhaWw7CS8qIEFjdGl2ZSBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCBjMmE5ZWI0Li4xNzZkYThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0xNTAsNiArMTUwLDEyIEBACiAjZGVmaW5lIHBnb2ZmX3QgdW5zaWduZWQgbG9uZwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUCit0eXBlZGVmIHU2NCBkbWFfYWRkcl90OworI2Vsc2UKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7CisjZW5kaWYgLyogZG1hX2FkZHJfdCAqLworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91dHNuYW1lLmggYi9pbmNsdWRlL2xpbnV4L3V0c25hbWUuaAppbmRleCA2OWYzOTk3Li40ZTViMDIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3V0c25hbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3V0c25hbWUuaApAQCAtMzcsOSArMzcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKK3N0cnVjdCB1c2VyX25hbWVzcGFjZTsKK2V4dGVybiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgaW5pdF91c2VyX25zOworCiBzdHJ1Y3QgdXRzX25hbWVzcGFjZSB7CiAJc3RydWN0IGtyZWYga3JlZjsKIAlzdHJ1Y3QgbmV3X3V0c25hbWUgbmFtZTsKKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7CiB9OwogZXh0ZXJuIHN0cnVjdCB1dHNfbmFtZXNwYWNlIGluaXRfdXRzX25zOwogCkBAIC01MCw3ICs1NCw3IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqY29weV91dHNuYW1lKHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkJCXN0cnVjdCB1dHNfbmFtZXNwYWNlICpucyk7CisJCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogZXh0ZXJuIHZvaWQgZnJlZV91dHNfbnMoc3RydWN0IGtyZWYgKmtyZWYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3V0c19ucyhzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqbnMpCkBAIC02NywxMiArNzEsMTIgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqY29weV91dHNuYW1lKHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkJCXN0cnVjdCB1dHNfbmFtZXNwYWNlICpucykKKwkJCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlpZiAoZmxhZ3MgJiBDTE9ORV9ORVdVVFMpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JcmV0dXJuIG5zOworCXJldHVybiB0c2stPm5zcHJveHktPnV0c19uczsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaAppbmRleCA4MzNlNjc2Li40NjFjMDExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKQEAgLTIyMCwxMiArMjIwLDEyIEBACiAJCXpvbmVfcGFnZV9zdGF0ZSgmem9uZXNbWk9ORV9NT1ZBQkxFXSwgaXRlbSk7CiB9CiAKLWV4dGVybiB2b2lkIHpvbmVfc3RhdGlzdGljcyhzdHJ1Y3Qgem9uZSAqLCBzdHJ1Y3Qgem9uZSAqKTsKK2V4dGVybiB2b2lkIHpvbmVfc3RhdGlzdGljcyhzdHJ1Y3Qgem9uZSAqLCBzdHJ1Y3Qgem9uZSAqLCBnZnBfdCBnZnApOwogCiAjZWxzZQogCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfcGFnZV9zdGF0ZShpdGVtKQotI2RlZmluZSB6b25lX3N0YXRpc3RpY3MoX3psLF96KSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHpvbmVfc3RhdGlzdGljcyhfemwsIF96LCBnZnApIGRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvemxpYi5oIGIvaW5jbHVkZS9saW51eC96bGliLmgKaW5kZXggNDBjNDljYi4uOWM1YTZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96bGliLmgKKysrIGIvaW5jbHVkZS9saW51eC96bGliLmgKQEAgLTE3OSwxMSArMTc5LDE2IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2ljIGZ1bmN0aW9ucyAqLwogCi1leHRlcm4gaW50IHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplICh2b2lkKTsKK2V4dGVybiBpbnQgemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUgKGludCB3aW5kb3dCaXRzLCBpbnQgbWVtTGV2ZWwpOwogLyoKICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IG5lZWRzIHRvIGJlIGFsbG9jYXRlZCBmb3IgYSBwZXItCi0gICBzdHJlYW0gd29ya3NwYWNlLiAgQSBwb2ludGVyIHRvIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIHNob3VsZCBiZQotICAgcmV0dXJuZWQgaW4gc3RyZWFtLT53b3Jrc3BhY2UgYmVmb3JlIGNhbGxpbmcgemxpYl9kZWZsYXRlSW5pdCgpLgorICAgc3RyZWFtIHdvcmtzcGFjZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4gIEEgcG9pbnRlciB0byB0aGlzCisgICBudW1iZXIgb2YgYnl0ZXMgc2hvdWxkIGJlIHJldHVybmVkIGluIHN0cmVhbS0+d29ya3NwYWNlIGJlZm9yZQorICAgeW91IGNhbGwgemxpYl9kZWZsYXRlSW5pdCgpIG9yIHpsaWJfZGVmbGF0ZUluaXQyKCkuICBJZiB5b3UgY2FsbAorICAgemxpYl9kZWZsYXRlSW5pdCgpLCBzcGVjaWZ5IHdpbmRvd0JpdHMgPSBNQVhfV0JJVFMgYW5kIG1lbUxldmVsID0KKyAgIE1BWF9NRU1fTEVWRUwgaGVyZS4gIElmIHlvdSBjYWxsIHpsaWJfZGVmbGF0ZUluaXQyKCksIHRoZSB3aW5kb3dCaXRzCisgICBhbmQgbWVtTGV2ZWwgcGFyYW1ldGVycyBwYXNzZWQgdG8gemxpYl9kZWZsYXRlSW5pdDIoKSBtdXN0IG5vdAorICAgZXhjZWVkIHRob3NlIHBhc3NlZCBoZXJlLgogKi8KIAogLyogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCAyNzJmNTkzLi4zMGI0OWVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTgwMSw4ICs4MDEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcnNfdGFibGVbSVBfVlNfUlRBQl9TSVpFXTsKIAkvKiBpcF92c19hcHAgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWFwcF9saXN0OwotCXN0cnVjdCBtdXRleAkJYXBwX211dGV4OwotCXN0cnVjdCBsb2NrX2NsYXNzX2tleQlhcHBfa2V5OwkvKiBtdXRleCBkZWJ1Z2luZyAqLwogCiAJLyogaXBfdnNfcHJvdG8gKi8KIAkjZGVmaW5lIElQX1ZTX1BST1RPX1RBQl9TSVpFCTMyCS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc25tcC5oIGIvaW5jbHVkZS9uZXQvc25tcC5oCmluZGV4IDc2MmUyYWIuLjI3NDYxZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NubXAuaAorKysgYi9pbmNsdWRlL25ldC9zbm1wLmgKQEAgLTE1MCw3ICsxNTAsNyBAQAogI2RlZmluZSBTTk1QX1VQRF9QT19TVEFUU19CSChtaWIsIGJhc2VmaWVsZCwgYWRkZW5kKQlcCiAJZG8geyBcCiAJCV9fdHlwZW9mX18oKm1pYlswXSkgKnB0ciA9IFwKLQkJCV9fdGhpc19jcHVfcHRyKChtaWIpWyFpbl9zb2Z0aXJxKCldKTsgXAorCQkJX190aGlzX2NwdV9wdHIoKG1pYilbMF0pOyBcCiAJCXB0ci0+bWlic1tiYXNlZmllbGQjI1BLVFNdKys7IFwKIAkJcHRyLT5taWJzW2Jhc2VmaWVsZCMjT0NURVRTXSArPSBhZGRlbmQ7XAogCX0gd2hpbGUgKDApCkBAIC0yMDIsNyArMjAyLDcgQEAKICNkZWZpbmUgU05NUF9VUERfUE9fU1RBVFM2NF9CSChtaWIsIGJhc2VmaWVsZCwgYWRkZW5kKQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCV9fdHlwZW9mX18oKm1pYlswXSkgKnB0cjsJCQkJXAotCQlwdHIgPSBfX3RoaXNfY3B1X3B0cigobWliKVshaW5fc29mdGlycSgpXSk7CQlcCisJCXB0ciA9IF9fdGhpc19jcHVfcHRyKChtaWIpWzBdKTsJCQkJXAogCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZwdHItPnN5bmNwKTsJCQlcCiAJCXB0ci0+bWlic1tiYXNlZmllbGQjI1BLVFNdKys7CQkJCVwKIAkJcHRyLT5taWJzW2Jhc2VmaWVsZCMjT0NURVRTXSArPSBhZGRlbmQ7CQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDQyYThjMzIuLmNmZmE1ZGM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0xNDMwLDYgKzE0MzAsNyBAQAogZXh0ZXJuIHUzMiB4ZnJtX3JlcGxheV9zZXFoaShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgX19iZTMyIG5ldF9zZXEpOwogZXh0ZXJuIGludCB4ZnJtX2luaXRfcmVwbGF5KHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIGV4dGVybiBpbnQgeGZybV9zdGF0ZV9tdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBtdHUpOworZXh0ZXJuIGludCBfX3hmcm1faW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgYm9vbCBpbml0X3JlcGxheSk7CiBleHRlcm4gaW50IHhmcm1faW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiBleHRlcm4gaW50IHhmcm1fcHJlcGFyZV9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaCBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCmluZGV4IGI2MDJmNDcuLmYxZGNlZmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaAorKysgYi9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaApAQCAtOTYsNiArOTYsMTAgQEAKICNkZWZpbmUgQUM5N19GVU5DX0lORk8JCTB4NjgJLyogRnVuY3Rpb24gSW5mb3JtYXRpb24gKi8KICNkZWZpbmUgQUM5N19TRU5TRV9JTkZPCQkweDZhCS8qIFNlbnNlIERldGFpbHMgKi8KIAorLyogdm9sdW1lIGNvbnRyb2xzICovCisjZGVmaW5lIEFDOTdfTVVURV9NQVNLX01PTk8JMHg4MDAwCisjZGVmaW5lIEFDOTdfTVVURV9NQVNLX1NURVJFTwkweDgwODAKKwogLyogc2xvdCBhbGxvY2F0aW9uICovCiAjZGVmaW5lIEFDOTdfU0xPVF9UQUcJCTAKICNkZWZpbmUgQUM5N19TTE9UX0NNRF9BRERSCTEKQEAgLTEzOCw2ICsxNDIsNyBAQAogI2RlZmluZSBBQzk3X0JDXzE4QklUX0FEQwkweDAxMDAJLyogMTgtYml0IEFEQyByZXNvbHV0aW9uICovCiAjZGVmaW5lIEFDOTdfQkNfMjBCSVRfQURDCTB4MDIwMAkvKiAyMC1iaXQgQURDIHJlc29sdXRpb24gKi8KICNkZWZpbmUgQUM5N19CQ19BRENfTUFTSwkweDAzMDAKKyNkZWZpbmUgQUM5N19CQ18zRF9URUNIX0lEX01BU0sJMHg3YzAwCS8qIFBlci12ZW5kb3IgSUQgb2YgM0QgZW5oYW5jZW1lbnQgKi8KIAogLyogZ2VuZXJhbCBwdXJwb3NlICovCiAjZGVmaW5lIEFDOTdfR1BfRFJTU19NQVNLCTB4MGMwMAkvKiBkb3VibGUgcmF0ZSBzbG90IHNlbGVjdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb250cm9sLmggYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaAppbmRleCA3NzE1ZTZmLi5lNjdkYjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaApAQCAtMTE1LDYgKzExNSw4IEBACiBpbnQgc25kX2N0bF9yZW1vdmUoc3RydWN0IHNuZF9jYXJkICogY2FyZCwgc3RydWN0IHNuZF9rY29udHJvbCAqIGtjb250cm9sKTsKIGludCBzbmRfY3RsX3JlbW92ZV9pZChzdHJ1Y3Qgc25kX2NhcmQgKiBjYXJkLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkICppZCk7CiBpbnQgc25kX2N0bF9yZW5hbWVfaWQoc3RydWN0IHNuZF9jYXJkICogY2FyZCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCAqc3JjX2lkLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkICpkc3RfaWQpOworaW50IHNuZF9jdGxfYWN0aXZhdGVfaWQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkICppZCwKKwkJCWludCBhY3RpdmUpOwogc3RydWN0IHNuZF9rY29udHJvbCAqc25kX2N0bF9maW5kX251bWlkKHN0cnVjdCBzbmRfY2FyZCAqIGNhcmQsIHVuc2lnbmVkIGludCBudW1pZCk7CiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfY3RsX2ZpbmRfaWQoc3RydWN0IHNuZF9jYXJkICogY2FyZCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCAqaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NzNDI3MS5oIGIvaW5jbHVkZS9zb3VuZC9jczQyNzEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGEwNTllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9jczQyNzEuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIENTNDI3MSBBU29DIGNvZGVjIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBBbGV4YW5kZXIgU3ZlcmRsaW4gPHN1YmFwYXJ0c0B5YW5kZXgucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19DUzQyNzFfSAorI2RlZmluZSBfX0NTNDI3MV9ICisKK3N0cnVjdCBjczQyNzFfcGxhdGZvcm1fZGF0YSB7CisJaW50IGdwaW9fbnJlc2V0OwkvKiBHUElPIGRyaXZpbmcgUmVzZXQgcGluLCBpZiBhbnkgKi8KK307CisKKyNlbmRpZiAvKiBfX0NTNDI3MV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2hkc3BtLmggYi9pbmNsdWRlL3NvdW5kL2hkc3BtLmgKaW5kZXggODE5OTBiMi4uMTc3NGZmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9oZHNwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvaGRzcG0uaApAQCAtMyw4ICszLDggQEAKIC8qCiAgKiAgIENvcHlyaWdodCAoQykgMjAwMyBXaW5mcmllZCBSaXRzY2ggKElFTSkKICAqICAgYmFzZWQgb24gaGRzcC5oIGZyb20gVGhvbWFzIENoYXJib25uZWwgKHRob21hc0B1bmRhdGEub3JnKQotICogICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAKKyAqCisgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMjMsNTAgKzIzLDQxIEBACiAvKiBNYXhpbXVtIGNoYW5uZWxzIGlzIDY0IGV2ZW4gb24gNTZNb2RlIHlvdSBoYXZlIDY0cGxheWJhY2tzIHRvIG1hdHJpeCAqLwogI2RlZmluZSBIRFNQTV9NQVhfQ0hBTk5FTFMgICAgICA2NAogCitlbnVtIGhkc3BtX2lvX3R5cGUgeworCU1BREksCisJTUFESWZhY2UsCisJQUlPLAorCUFFUzMyLAorCVJheURBVAorfTsKKworZW51bSBoZHNwbV9zcGVlZCB7CisJc3MsCisJZHMsCisJcXMKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIElPQ1RMIFBlYWsvUk1TIE1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBwZWFtIHJtcyBsZXZlbCBzdHJ1Y3R1cmUgbGlrZSB3ZSBnZXQgZnJvbSBoYXJkd2FyZSAKLSAgCi0gICBtYXliZSBpbiBmdXR1cmUgd2UgY2FuIG1lbW9yeSBtYXAgaXQgc28gSSBqdXN0IGNvcHkgaXQKLSAgIHRvIHVzZXIgb24gaW9jdGwgY2FsbCBub3cgYW4gZG9udCBjaGFuZ2UgYW55dGhpbmcKLSAgIHJtcyBhcmUgbWFkZSBvdXQgb2YgbG93IGFuZCBoaWdoIHZhbHVlcwotICAgd2hlcmUgKGxvbmcpID8/Pz9fcm1zID0gKD8/Pz9fcm1zX2wgPj4gOCkgKyAoKD8/Pz9fcm1zX2ggJiAweEZGRkZGRjAwKTw8MjQpCi0gICAoaSBhc3VtZSBzbyBmcm9tIHRoZSBjb2RlKQotKi8KLQogc3RydWN0IGhkc3BtX3BlYWtfcm1zIHsKKwl1aW50MzJfdCBpbnB1dF9wZWFrc1s2NF07CisJdWludDMyX3QgcGxheWJhY2tfcGVha3NbNjRdOworCXVpbnQzMl90IG91dHB1dF9wZWFrc1s2NF07CiAKLQl1bnNpZ25lZCBpbnQgbGV2ZWxfb2Zmc2V0WzEwMjRdOworCXVpbnQ2NF90IGlucHV0X3Jtc1s2NF07CisJdWludDY0X3QgcGxheWJhY2tfcm1zWzY0XTsKKwl1aW50NjRfdCBvdXRwdXRfcm1zWzY0XTsKIAotCXVuc2lnbmVkIGludCBpbnB1dF9wZWFrWzY0XTsKLQl1bnNpZ25lZCBpbnQgcGxheWJhY2tfcGVha1s2NF07Ci0JdW5zaWduZWQgaW50IG91dHB1dF9wZWFrWzY0XTsKLQl1bnNpZ25lZCBpbnQgeHh4X3BlYWtbNjRdOwkvKiBub3QgdXNlZCAqLwotCi0JdW5zaWduZWQgaW50IHJlc2VydmVkWzI1Nl07CS8qIG5vdCB1c2VkICovCi0KLQl1bnNpZ25lZCBpbnQgaW5wdXRfcm1zX2xbNjRdOwotCXVuc2lnbmVkIGludCBwbGF5YmFja19ybXNfbFs2NF07Ci0JdW5zaWduZWQgaW50IG91dHB1dF9ybXNfbFs2NF07Ci0JdW5zaWduZWQgaW50IHh4eF9ybXNfbFs2NF07CS8qIG5vdCB1c2VkICovCi0KLQl1bnNpZ25lZCBpbnQgaW5wdXRfcm1zX2hbNjRdOwotCXVuc2lnbmVkIGludCBwbGF5YmFja19ybXNfaFs2NF07Ci0JdW5zaWduZWQgaW50IG91dHB1dF9ybXNfaFs2NF07Ci0JdW5zaWduZWQgaW50IHh4eF9ybXNfaFs2NF07CS8qIG5vdCB1c2VkICovCisJdWludDhfdCBzcGVlZDsgLyogZW51bSB7c3MsIGRzLCBxc30gKi8KKwlpbnQgc3RhdHVzMjsKIH07CiAKLXN0cnVjdCBoZHNwbV9wZWFrX3Jtc19pb2N0bCB7Ci0Jc3RydWN0IGhkc3BtX3BlYWtfcm1zICpwZWFrOwotfTsKLQotLyogdXNlIGluZGlyZWN0IGFjY2VzcyBkdWUgdG8gdGhlIGxpbWl0IG9mIGlvY3RsIGJpdCBzaXplICovCiAjZGVmaW5lIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9QRUFLX1JNUyBcCi0JX0lPUignSCcsIDB4NDAsIHN0cnVjdCBoZHNwbV9wZWFrX3Jtc19pb2N0bCkKKwlfSU9SKCdIJywgMHg0Miwgc3RydWN0IGhkc3BtX3BlYWtfcm1zKQogCiAvKiAtLS0tLS0tLS0tLS0gQ09ORklHIGJsb2NrIElPQ1RMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RydWN0IGhkc3BtX2NvbmZpZ19pbmZvIHsKK3N0cnVjdCBoZHNwbV9jb25maWcgewogCXVuc2lnbmVkIGNoYXIgcHJlZl9zeW5jX3JlZjsKIAl1bnNpZ25lZCBjaGFyIHdvcmRjbG9ja19zeW5jX2NoZWNrOwogCXVuc2lnbmVkIGNoYXIgbWFkaV9zeW5jX2NoZWNrOwpAQCAtODAsMTggKzcxLDEyMSBAQAogCXVuc2lnbmVkIGludCBhbmFsb2dfb3V0OwogfTsKIAotI2RlZmluZSBTTkRSVl9IRFNQTV9JT0NUTF9HRVRfQ09ORklHX0lORk8gXAotCV9JT1IoJ0gnLCAweDQxLCBzdHJ1Y3QgaGRzcG1fY29uZmlnX2luZm8pCisjZGVmaW5lIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9DT05GSUcgXAorCV9JT1IoJ0gnLCAweDQxLCBzdHJ1Y3QgaGRzcG1fY29uZmlnKQogCisvKioKKyAqIElmIHRoZXJlJ3MgYSBUQ08gKFRpbWVDb2RlIE9wdGlvbikgYm9hcmQgaW5zdGFsbGVkLAorICogdGhlcmUgYXJlIGZ1cnRoZXIgb3B0aW9ucyBhbmQgc3RhdHVzIGRhdGEgYXZhaWxhYmxlLgorICogVGhlIGhkc3BtX2x0YyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGN1cnJlbnQgU01QVEUKKyAqIHRpbWVjb2RlIGFuZCBzb21lIHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgY2FuIGJlCisgKiBvYnRhaW5lZCB2aWEgU05EUlZfSERTUE1fSU9DVExfR0VUX0xUQyBvciBpbiB0aGUKKyAqIGhkc3BtX3N0YXR1cyBzdHJ1Y3QuCisgKiovCiAKLS8qIGdldCBTb3VuZGNhcmQgVmVyc2lvbiAqLwotCi1zdHJ1Y3QgaGRzcG1fdmVyc2lvbiB7Ci0JdW5zaWduZWQgc2hvcnQgZmlybXdhcmVfcmV2OworZW51bSBoZHNwbV9sdGNfZm9ybWF0IHsKKwlmb3JtYXRfaW52YWxpZCwKKwlmcHNfMjQsCisJZnBzXzI1LAorCWZwc18yOTk3LAorCWZwc18zMAogfTsKIAotI2RlZmluZSBTTkRSVl9IRFNQTV9JT0NUTF9HRVRfVkVSU0lPTiBfSU9SKCdIJywgMHg0Mywgc3RydWN0IGhkc3BtX3ZlcnNpb24pCitlbnVtIGhkc3BtX2x0Y19mcmFtZSB7CisJZnJhbWVfaW52YWxpZCwKKwlkcm9wX2ZyYW1lLAorCWZ1bGxfZnJhbWUKK307CiAKK2VudW0gaGRzcG1fbHRjX2lucHV0X2Zvcm1hdCB7CisJbnRzYywKKwlwYWwsCisJbm9fdmlkZW8KK307CisKK3N0cnVjdCBoZHNwbV9sdGMgeworCXVuc2lnbmVkIGludCBsdGM7CisKKwllbnVtIGhkc3BtX2x0Y19mb3JtYXQgZm9ybWF0OworCWVudW0gaGRzcG1fbHRjX2ZyYW1lIGZyYW1lOworCWVudW0gaGRzcG1fbHRjX2lucHV0X2Zvcm1hdCBpbnB1dF9mb3JtYXQ7Cit9OworCisjZGVmaW5lIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9MVEMgX0lPUignSCcsIDB4NDYsIHN0cnVjdCBoZHNwbV9taXhlcl9pb2N0bCkKKworLyoqCisgKiBUaGUgc3RhdHVzIGRhdGEgcmVmbGVjdHMgdGhlIGRldmljZSdzIGN1cnJlbnQgc3RhdGUKKyAqIGFzIGRldGVybWluZWQgYnkgdGhlIGNhcmQncyBjb25maWd1cmF0aW9uIGFuZAorICogY29ubmVjdGlvbiBzdGF0dXMuCisgKiovCisKK2VudW0gaGRzcG1fc3luYyB7CisJaGRzcG1fc3luY19ub19sb2NrID0gMCwKKwloZHNwbV9zeW5jX2xvY2sgPSAxLAorCWhkc3BtX3N5bmNfc3luYyA9IDIKK307CisKK2VudW0gaGRzcG1fbWFkaV9pbnB1dCB7CisJaGRzcG1faW5wdXRfb3B0aWNhbCA9IDAsCisJaGRzcG1faW5wdXRfY29heCA9IDEKK307CisKK2VudW0gaGRzcG1fbWFkaV9jaGFubmVsX2Zvcm1hdCB7CisJaGRzcG1fZm9ybWF0X2NoXzY0ID0gMCwKKwloZHNwbV9mb3JtYXRfY2hfNTYgPSAxCit9OworCitlbnVtIGhkc3BtX21hZGlfZnJhbWVfZm9ybWF0IHsKKwloZHNwbV9mcmFtZV80OCA9IDAsCisJaGRzcG1fZnJhbWVfOTYgPSAxCit9OworCitlbnVtIGhkc3BtX3N5bmNzb3VyY2UgeworCXN5bmNzb3VyY2Vfd2MgPSAwLAorCXN5bmNzb3VyY2VfbWFkaSA9IDEsCisJc3luY3NvdXJjZV90Y28gPSAyLAorCXN5bmNzb3VyY2Vfc3luYyA9IDMsCisJc3luY3NvdXJjZV9ub25lID0gNAorfTsKKworc3RydWN0IGhkc3BtX3N0YXR1cyB7CisJdWludDhfdCBjYXJkX3R5cGU7IC8qIGVudW0gaGRzcG1faW9fdHlwZSAqLworCWVudW0gaGRzcG1fc3luY3NvdXJjZSBhdXRvc3luY19zb3VyY2U7CisKKwl1aW50NjRfdCBjYXJkX2Nsb2NrOworCXVpbnQzMl90IG1hc3Rlcl9wZXJpb2Q7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50OF90IHN5bmNfd2M7IC8qIGVudW0gaGRzcG1fc3luYyAqLworCQkJdWludDhfdCBzeW5jX21hZGk7IC8qIGVudW0gaGRzcG1fc3luYyAqLworCQkJdWludDhfdCBzeW5jX3RjbzsgLyogZW51bSBoZHNwbV9zeW5jICovCisJCQl1aW50OF90IHN5bmNfaW47IC8qIGVudW0gaGRzcG1fc3luYyAqLworCQkJdWludDhfdCBtYWRpX2lucHV0OyAvKiBlbnVtIGhkc3BtX21hZGlfaW5wdXQgKi8KKwkJCXVpbnQ4X3QgY2hhbm5lbF9mb3JtYXQ7IC8qIGVudW0gaGRzcG1fbWFkaV9jaGFubmVsX2Zvcm1hdCAqLworCQkJdWludDhfdCBmcmFtZV9mb3JtYXQ7IC8qIGVudW0gaGRzcG1fbWFkaV9mcmFtZV9mb3JtYXQgKi8KKwkJfSBtYWRpOworCX0gY2FyZF9zcGVjaWZpYzsKK307CisKKyNkZWZpbmUgU05EUlZfSERTUE1fSU9DVExfR0VUX1NUQVRVUyBcCisJX0lPUignSCcsIDB4NDcsIHN0cnVjdCBoZHNwbV9zdGF0dXMpCisKKy8qKgorICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXJkIGFuZCBpdHMgYWRkLW9ucy4KKyAqKi8KKworI2RlZmluZSBIRFNQTV9BRERPTl9UQ08gMQorCitzdHJ1Y3QgaGRzcG1fdmVyc2lvbiB7CisJdWludDhfdCBjYXJkX3R5cGU7IC8qIGVudW0gaGRzcG1faW9fdHlwZSAqLworCWNoYXIgY2FyZG5hbWVbMjBdOworCXVuc2lnbmVkIGludCBzZXJpYWw7CisJdW5zaWduZWQgc2hvcnQgZmlybXdhcmVfcmV2OworCWludCBhZGRvbnM7Cit9OworCisjZGVmaW5lIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9WRVJTSU9OIF9JT1IoJ0gnLCAweDQ4LCBzdHJ1Y3QgaGRzcG1fdmVyc2lvbikKIAogLyogLS0tLS0tLS0tLS0tLSBnZXQgTWF0cml4IE1peGVyIElPQ1RMIC0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMDMsNyArMTk3LDcgQEAKIC8qIGVxdWl2YWxlbnQgdG8gaGFyZHdhcmUgZGVmaW5pdGlvbiwgbWF5YmUgZm9yIGZ1dHVyZSBmZWF0dXJlIG9mIG1tYXAgb2YKICAqIHRoZW0KICAqLwotLyogZWFjaCBvZiA2NCBvdXRwdXRzIGhhcyA2NCBpbmZhZGVyIGFuZCA2NCBvdXRmYWRlcjogCisvKiBlYWNoIG9mIDY0IG91dHB1dHMgaGFzIDY0IGluZmFkZXIgYW5kIDY0IG91dGZhZGVyOgogICAgSW5zIHRvIE91dHMgbWl4ZXJbb3V0XS5pbltpbl0sIE91dHN0cmVhbXMgdG8gT3V0cyBtaXhlcltvdXRdLnBiW3BiXSAqLwogCiAjZGVmaW5lIEhEU1BNX01JWEVSX0NIQU5ORUxTIEhEU1BNX01BWF9DSEFOTkVMUwpAQCAtMTMxLDQgKzIyNSw1IEBACiB0eXBlZGVmIHN0cnVjdCBoZHNwbV9jaGFubmVsZmFkZXIgc25kX2hkc3BtX2NoYW5uZWxmYWRlcl90OwogdHlwZWRlZiBzdHJ1Y3QgaGRzcG1fbWl4ZXIgaGRzcG1fbWl4ZXJfdDsKIAotI2VuZGlmCQkJCS8qIF9fU09VTkRfSERTUE1fSCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvbWl4ZXJfb3NzLmggYi9pbmNsdWRlL3NvdW5kL21peGVyX29zcy5oCmluZGV4IDUxZmJjYjQuLjEzY2IwYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvbWl4ZXJfb3NzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9taXhlcl9vc3MuaApAQCAtNzMsNiArNzMsOSBAQAogCXN0cnVjdCBzbmRfbWl4ZXJfb3NzICptaXhlcjsKIH07CiAKK2ludCBzbmRfbWl4ZXJfb3NzX2lvY3RsX2NhcmQoc3RydWN0IHNuZF9jYXJkICpjYXJkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKICNlbmRpZiAvKiBDT05GSUdfU05EX01JWEVSX09TUyAqLwogCiAjZW5kaWYgLyogX19TT1VORF9NSVhFUl9PU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggZTczMWY4ZDcuLjQzMGE5Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtMTM2LDQ4ICsxMzYsNDkgQEAKIAkJCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwfFNORFJWX1BDTV9SQVRFXzk2MDAwKQogI2RlZmluZSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMAkoU05EUlZfUENNX1JBVEVfODAwMF85NjAwMHxTTkRSVl9QQ01fUkFURV8xNzY0MDB8XAogCQkJCQkgU05EUlZfUENNX1JBVEVfMTkyMDAwKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1M4CQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1M4KQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1U4CQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1U4KQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpCi0jZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFCQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRSkKLSNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9VMTZfTEUJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfVTE2X0xFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxNl9CRQkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUpCi0jZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFCQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKLSNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMjRfQkUJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfUzI0X0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF9MRQkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjRfTEUpCi0jZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTI0X0JFCQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1UyNF9CRSkKLSNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRQkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMzJfQkUpCi0jZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTMyX0xFCQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1UzMl9MRSkKLSNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9VMzJfQkUJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfVTMyX0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUX0xFCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfRkxPQVRfTEUpCi0jZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRkxPQVRfQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9CRSkKLSNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9GTE9BVDY0X0xFCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9MRSkKLSNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9GTE9BVDY0X0JFCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9CRSkKLSNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9JRUM5NThfU1VCRlJBTUVfTEUgKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfTEUpCi0jZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfSUVDOTU4X1NVQkZSQU1FX0JFICgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX01VX0xBVwkJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9NVV9MQVcpCi0jZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfQV9MQVcJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfQV9MQVcpCi0jZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfSU1BX0FEUENNCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfSU1BX0FEUENNKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX01QRUcJCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfTVBFRykKLSNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9HU00JCSgxVUxMIDw8IFNORFJWX1BDTV9GT1JNQVRfR1NNKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1NQRUNJQUwJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TUEVDSUFMKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMjRfM0xFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjRfM0xFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMjRfM0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjRfM0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyMF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0xFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyMF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyMF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxOF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMThfM0xFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxOF8zTEUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMThfM0xFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxOF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9TMThfM0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxOF8zQkUJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9VMThfM0JFKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0c3MjNfMjQJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9HNzIzXzI0KQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0c3MjNfMjRfMUIJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9HNzIzXzI0XzFCKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0c3MjNfNDAJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9HNzIzXzQwKQotI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0c3MjNfNDBfMUIJKDFVTEwgPDwgU05EUlZfUENNX0ZPUk1BVF9HNzIzXzQwXzFCKQorI2RlZmluZSBfU05EUlZfUENNX0ZNVEJJVChmbXQpCQkoMVVMTCA8PCAoX19mb3JjZSBpbnQpU05EUlZfUENNX0ZPUk1BVF8jI2ZtdCkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TOAkJX1NORFJWX1BDTV9GTVRCSVQoUzgpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTgJCV9TTkRSVl9QQ01fRk1UQklUKFU4KQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQkJX1NORFJWX1BDTV9GTVRCSVQoUzE2X0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MxNl9CRQkJX1NORFJWX1BDTV9GTVRCSVQoUzE2X0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxNl9MRQkJX1NORFJWX1BDTV9GTVRCSVQoVTE2X0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxNl9CRQkJX1NORFJWX1BDTV9GTVRCSVQoVTE2X0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRQkJX1NORFJWX1BDTV9GTVRCSVQoUzI0X0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyNF9CRQkJX1NORFJWX1BDTV9GTVRCSVQoUzI0X0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF9MRQkJX1NORFJWX1BDTV9GTVRCSVQoVTI0X0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF9CRQkJX1NORFJWX1BDTV9GTVRCSVQoVTI0X0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRQkJX1NORFJWX1BDTV9GTVRCSVQoUzMyX0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRQkJX1NORFJWX1BDTV9GTVRCSVQoUzMyX0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UzMl9MRQkJX1NORFJWX1BDTV9GTVRCSVQoVTMyX0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UzMl9CRQkJX1NORFJWX1BDTV9GTVRCSVQoVTMyX0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUX0xFCV9TTkRSVl9QQ01fRk1UQklUKEZMT0FUX0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUX0JFCV9TTkRSVl9QQ01fRk1UQklUKEZMT0FUX0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUNjRfTEUJX1NORFJWX1BDTV9GTVRCSVQoRkxPQVQ2NF9MRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9GTE9BVDY0X0JFCV9TTkRSVl9QQ01fRk1UQklUKEZMT0FUNjRfQkUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfSUVDOTU4X1NVQkZSQU1FX0xFIF9TTkRSVl9QQ01fRk1UQklUKElFQzk1OF9TVUJGUkFNRV9MRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9JRUM5NThfU1VCRlJBTUVfQkUgX1NORFJWX1BDTV9GTVRCSVQoSUVDOTU4X1NVQkZSQU1FX0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX01VX0xBVwkJX1NORFJWX1BDTV9GTVRCSVQoTVVfTEFXKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0FfTEFXCQlfU05EUlZfUENNX0ZNVEJJVChBX0xBVykKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9JTUFfQURQQ00JX1NORFJWX1BDTV9GTVRCSVQoSU1BX0FEUENNKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX01QRUcJCV9TTkRSVl9QQ01fRk1UQklUKE1QRUcpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfR1NNCQlfU05EUlZfUENNX0ZNVEJJVChHU00pCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfU1BFQ0lBTAlfU05EUlZfUENNX0ZNVEJJVChTUEVDSUFMKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUJX1NORFJWX1BDTV9GTVRCSVQoUzI0XzNMRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9VMjRfM0xFCV9TTkRSVl9QQ01fRk1UQklUKFUyNF8zTEUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNCRQlfU05EUlZfUENNX0ZNVEJJVChTMjRfM0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UyNF8zQkUJX1NORFJWX1BDTV9GTVRCSVQoVTI0XzNCRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFCV9TTkRSVl9QQ01fRk1UQklUKFMyMF8zTEUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTIwXzNMRQlfU05EUlZfUENNX0ZNVEJJVChVMjBfM0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1MyMF8zQkUJX1NORFJWX1BDTV9GTVRCSVQoUzIwXzNCRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9VMjBfM0JFCV9TTkRSVl9QQ01fRk1UQklUKFUyMF8zQkUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzE4XzNMRQlfU05EUlZfUENNX0ZNVEJJVChTMThfM0xFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX1UxOF8zTEUJX1NORFJWX1BDTV9GTVRCSVQoVTE4XzNMRSkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMThfM0JFCV9TTkRSVl9QQ01fRk1UQklUKFMxOF8zQkUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTE4XzNCRQlfU05EUlZfUENNX0ZNVEJJVChVMThfM0JFKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0c3MjNfMjQJX1NORFJWX1BDTV9GTVRCSVQoRzcyM18yNCkKKyNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9HNzIzXzI0XzFCCV9TTkRSVl9QQ01fRk1UQklUKEc3MjNfMjRfMUIpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRzcyM180MAlfU05EUlZfUENNX0ZNVEJJVChHNzIzXzQwKQorI2RlZmluZSBTTkRSVl9QQ01fRk1UQklUX0c3MjNfNDBfMUIJX1NORFJWX1BDTV9GTVRCSVQoRzcyM180MF8xQikKIAogI2lmZGVmIFNORFJWX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgU05EUlZfUENNX0ZNVEJJVF9TMTYJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCkBAIC00OTAsNyArNDkxLDcgQEAKIGludCBzbmRfcGNtX3N0YXR1cyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJICAgc3RydWN0IHNuZF9wY21fc3RhdHVzICpzdGF0dXMpOwogaW50IHNuZF9wY21fc3RhcnQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotaW50IHNuZF9wY21fc3RvcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IHN0YXR1cyk7CitpbnQgc25kX3BjbV9zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzbmRfcGNtX3N0YXRlX3Qgc3RhdHVzKTsKIGludCBzbmRfcGNtX2RyYWluX2RvbmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogI2lmZGVmIENPTkZJR19QTQogaW50IHNuZF9wY21fc3VzcGVuZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CkBAIC03NDgsOCArNzQ5LDggQEAKIAlyZXR1cm4gJnBhcmFtcy0+aW50ZXJ2YWxzW3ZhciAtIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9JTlRFUlZBTF07CiB9CiAKLSNkZWZpbmUgcGFyYW1zX2FjY2VzcyhwKSBzbmRfbWFza19taW4oaHdfcGFyYW1fbWFzaygocCksIFNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MpKQotI2RlZmluZSBwYXJhbXNfZm9ybWF0KHApIHNuZF9tYXNrX21pbihod19wYXJhbV9tYXNrKChwKSwgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCkpCisjZGVmaW5lIHBhcmFtc19hY2Nlc3MocCkgKChfX2ZvcmNlIHNuZF9wY21fYWNjZXNzX3Qpc25kX21hc2tfbWluKGh3X3BhcmFtX21hc2soKHApLCBTTkRSVl9QQ01fSFdfUEFSQU1fQUNDRVNTKSkpCisjZGVmaW5lIHBhcmFtc19mb3JtYXQocCkgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3Qpc25kX21hc2tfbWluKGh3X3BhcmFtX21hc2soKHApLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUKSkpCiAjZGVmaW5lIHBhcmFtc19zdWJmb3JtYXQocCkgc25kX21hc2tfbWluKGh3X3BhcmFtX21hc2soKHApLCBTTkRSVl9QQ01fSFdfUEFSQU1fU1VCRk9STUFUKSkKICNkZWZpbmUgcGFyYW1zX2NoYW5uZWxzKHApIGh3X3BhcmFtX2ludGVydmFsKChwKSwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKS0+bWluCiAjZGVmaW5lIHBhcmFtc19yYXRlKHApIGh3X3BhcmFtX2ludGVydmFsKChwKSwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUpLT5taW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2hfZnNpLmggYi9pbmNsdWRlL3NvdW5kL3NoX2ZzaS5oCmluZGV4IGQ3OTg5NDEuLjlhMTU1ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc2hfZnNpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zaF9mc2kuaApAQCAtMTUsNjcgKzE1LDI5IEBACiAjZGVmaW5lIEZTSV9QT1JUX0EJMAogI2RlZmluZSBGU0lfUE9SVF9CCTEKIAotLyogZmxhZ3MgZm9ybWF0Ci0KLSAqIDB4QUJDREVFRkYKLSAqCi0gKiBBOiAgY2hhbm5lbCBzaXplIGZvciBURE0gKGlucHV0KQotICogQjogIGNoYW5uZWwgc2l6ZSBmb3IgVERNIChvb3V0cHV0KQotICogQzogIGludmVyc2lvbgotICogRDogIG1vZGUKLSAqIEU6ICBpbnB1dCBmb3JtYXQKLSAqIEY6ICBvdXRwdXQgZm9ybWF0Ci0gKi8KLQogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCi0vKiBURE0gY2hhbm5lbCAqLwotI2RlZmluZSBTSF9GU0lfU0VUX0NIX0koeCkJKCh4ICYgMHhGKSA8PCAyOCkKLSNkZWZpbmUgU0hfRlNJX1NFVF9DSF9PKHgpCSgoeCAmIDB4RikgPDwgMjQpCisvKgorICogZmxhZ3MgZm9ybWF0CisgKgorICogMHgwMDAwMDBCQQorICoKKyAqIEE6ICBpbnZlcnNpb24KKyAqIEI6ICBmb3JtYXQgbW9kZQorICovCiAKLSNkZWZpbmUgU0hfRlNJX0NIX0lNQVNLCQkweEYwMDAwMDAwCi0jZGVmaW5lIFNIX0ZTSV9DSF9PTUFTSwkJMHgwRjAwMDAwMAotI2RlZmluZSBTSF9GU0lfR0VUX0NIX0koeCkJKCh4ICYgU0hfRlNJX0NIX0lNQVNLKSA+PiAyOCkKLSNkZWZpbmUgU0hfRlNJX0dFVF9DSF9PKHgpCSgoeCAmIFNIX0ZTSV9DSF9PTUFTSykgPj4gMjQpCisvKiBBOiBjbG9jayBpbnZlcnNpb24gKi8KKyNkZWZpbmUgU0hfRlNJX0lOVkVSU0lPTl9NQVNLCTB4MDAwMDAwMEYKKyNkZWZpbmUgU0hfRlNJX0xSTV9JTlYJCSgxIDw8IDApCisjZGVmaW5lIFNIX0ZTSV9CUk1fSU5WCQkoMSA8PCAxKQorI2RlZmluZSBTSF9GU0lfTFJTX0lOVgkJKDEgPDwgMikKKyNkZWZpbmUgU0hfRlNJX0JSU19JTlYJCSgxIDw8IDMpCiAKLS8qIGNsb2NrIGludmVyc2lvbiAqLwotI2RlZmluZSBTSF9GU0lfSU5WRVJTSU9OX01BU0sJMHgwMEYwMDAwMAotI2RlZmluZSBTSF9GU0lfTFJNX0lOVgkJKDEgPDwgMjApCi0jZGVmaW5lIFNIX0ZTSV9CUk1fSU5WCQkoMSA8PCAyMSkKLSNkZWZpbmUgU0hfRlNJX0xSU19JTlYJCSgxIDw8IDIyKQotI2RlZmluZSBTSF9GU0lfQlJTX0lOVgkJKDEgPDwgMjMpCi0KLS8qIG1vZGUgKi8KLSNkZWZpbmUgU0hfRlNJX01PREVfTUFTSwkweDAwMEYwMDAwCi0jZGVmaW5lIFNIX0ZTSV9JTl9TTEFWRV9NT0RFCSgxIDw8IDE2KSAgLyogZGVmYXVsdCBtYXN0ZXIgbW9kZSAqLwotI2RlZmluZSBTSF9GU0lfT1VUX1NMQVZFX01PREUJKDEgPDwgMTcpICAvKiBkZWZhdWx0IG1hc3RlciBtb2RlICovCi0KLS8qIERJIGZvcm1hdCAqLwotI2RlZmluZSBTSF9GU0lfRk1UX01BU0sJCTB4MDAwMDAwRkYKLSNkZWZpbmUgU0hfRlNJX0lGTVQoeCkJCSgoKFNIX0ZTSV9GTVRfICMjIHgpICYgU0hfRlNJX0ZNVF9NQVNLKSA8PCA4KQotI2RlZmluZSBTSF9GU0lfT0ZNVCh4KQkJKCgoU0hfRlNJX0ZNVF8gIyMgeCkgJiBTSF9GU0lfRk1UX01BU0spIDw8IDApCi0jZGVmaW5lIFNIX0ZTSV9HRVRfSUZNVCh4KQkoKHggPj4gOCkgJiBTSF9GU0lfRk1UX01BU0spCi0jZGVmaW5lIFNIX0ZTSV9HRVRfT0ZNVCh4KQkoKHggPj4gMCkgJiBTSF9GU0lfRk1UX01BU0spCi0KLSNkZWZpbmUgU0hfRlNJX0ZNVF9NT05PCQkwCi0jZGVmaW5lIFNIX0ZTSV9GTVRfTU9OT19ERUxBWQkxCi0jZGVmaW5lIFNIX0ZTSV9GTVRfUENNCQkyCi0jZGVmaW5lIFNIX0ZTSV9GTVRfSTJTCQkzCi0jZGVmaW5lIFNIX0ZTSV9GTVRfVERNCQk0Ci0jZGVmaW5lIFNIX0ZTSV9GTVRfVERNX0RFTEFZCTUKLSNkZWZpbmUgU0hfRlNJX0ZNVF9TUERJRgk2Ci0KLQotI2RlZmluZSBTSF9GU0lfSUZNVF9URE1fQ0goeCkgXAotCShTSF9GU0lfSUZNVChURE0pCXwgU0hfRlNJX1NFVF9DSF9JKHgpKQotI2RlZmluZSBTSF9GU0lfSUZNVF9URE1fREVMQVlfQ0goeCkgXAotCShTSF9GU0lfSUZNVChURE1fREVMQVkpCXwgU0hfRlNJX1NFVF9DSF9JKHgpKQotCi0jZGVmaW5lIFNIX0ZTSV9PRk1UX1RETV9DSCh4KSBcCi0JKFNIX0ZTSV9PRk1UKFRETSkJfCBTSF9GU0lfU0VUX0NIX08oeCkpCi0jZGVmaW5lIFNIX0ZTSV9PRk1UX1RETV9ERUxBWV9DSCh4KSBcCi0JKFNIX0ZTSV9PRk1UKFRETV9ERUxBWSkJfCBTSF9GU0lfU0VUX0NIX08oeCkpCisvKiBCOiBmb3JtYXQgbW9kZSAqLworI2RlZmluZSBTSF9GU0lfRk1UX01BU0sJCTB4MDAwMDAwRjAKKyNkZWZpbmUgU0hfRlNJX0ZNVF9EQUkJCSgwIDw8IDQpCisjZGVmaW5lIFNIX0ZTSV9GTVRfU1BESUYJKDEgPDwgNCkKIAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCmluZGV4IDgwMzE3NjkuLjk3OWVkODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTE1Nyw2ICsxNTcsMTggQEAKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSAxLCBcCiAJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAKKy8qIGFkZGl0aW9uYWwgc2VxdWVuY2luZyBjb250cm9sIHdpdGhpbiBhbiBldmVudCB0eXBlICovCisjZGVmaW5lIFNORF9TT0NfREFQTV9QR0FfUyh3bmFtZSwgd3N1YnNlcSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJd2V2ZW50LCB3ZmxhZ3MpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX3BnYSwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFncywgXAorCS5zdWJzZXEgPSB3c3Vic2VxfQorI2RlZmluZSBTTkRfU09DX0RBUE1fU1VQUExZX1Mod25hbWUsIHdzdWJzZXEsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2V2ZW50LCBcCisJd2ZsYWdzKQlcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9zdXBwbHksIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLAlcCisJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydCwgLmV2ZW50ID0gd2V2ZW50LCBcCisJLmV2ZW50X2ZsYWdzID0gd2ZsYWdzLCAuc3Vic2VxID0gd3N1YnNlcX0KKwogLyogU2ltcGxpZmllZCB2ZXJzaW9ucyBvZiBhYm92ZSBtYWNyb3MsIGFzc3VtaW5nIHduY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scykgKi8KICNkZWZpbmUgU09DX1BHQV9FX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scywgXAogCXdldmVudCwgd2ZsYWdzKSBcCkBAIC00NTAsNiArNDYyLDcgQEAKIAl1bnNpZ25lZCBjaGFyIGV4dDoxOwkJCS8qIGhhcyBleHRlcm5hbCB3aWRnZXRzICovCiAJdW5zaWduZWQgY2hhciBmb3JjZToxOwkJCS8qIGZvcmNlIHN0YXRlICovCiAJdW5zaWduZWQgY2hhciBpZ25vcmVfc3VzcGVuZDoxOyAgICAgICAgIC8qIGtlcHQgZW5hYmxlZCBvdmVyIHN1c3BlbmQgKi8KKwlpbnQgc3Vic2VxOwkJCQkvKiBzb3J0IHdpdGhpbiB3aWRnZXQgdHlwZSAqLwogCiAJaW50ICgqcG93ZXJfY2hlY2spKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KTsKIApAQCAtNDg3LDYgKzUwMCw5IEBACiAKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3VwZGF0ZSAqdXBkYXRlOwogCisJdm9pZCAoKnNlcV9ub3RpZmllcikoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICosCisJCQkgICAgIGVudW0gc25kX3NvY19kYXBtX3R5cGUsIGludCk7CisKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7IC8qIGZyb20gcGFyZW50IC0gZm9yIGRlYnVnICovCiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOyAvKiBwYXJlbnQgY29kZWMgKi8KIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOyAvKiBwYXJlbnQgY2FyZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MuaCBiL2luY2x1ZGUvc291bmQvc29jLmgKaW5kZXggNzQ5MjFmMi4uYmZhNDgzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy5oCkBAIC0yMzQsNiArMjM0LDcgQEAKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlcjsKIHN0cnVjdCBzb2NfZW51bTsKIHN0cnVjdCBzbmRfc29jX2phY2s7CitzdHJ1Y3Qgc25kX3NvY19qYWNrX3pvbmU7CiBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbjsKIHN0cnVjdCBzbmRfc29jX2NhY2hlX29wczsKICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgpAQCAtMjU4LDYgKzI1OSwxNiBAQAogCVNORF9TT0NfUkJUUkVFX0NPTVBSRVNTSU9OCiB9OwogCitpbnQgc25kX3NvY19jb2RlY19zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGNsa19pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpOworaW50IHNuZF9zb2NfY29kZWNfc2V0X3BsbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBwbGxfaWQsIGludCBzb3VyY2UsCisJCQkgIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpOworCitpbnQgc25kX3NvY19yZWdpc3Rlcl9jYXJkKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpOworaW50IHNuZF9zb2NfdW5yZWdpc3Rlcl9jYXJkKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpOworaW50IHNuZF9zb2Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IHNuZF9zb2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgc25kX3NvY19wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpOwogaW50IHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybV9kcml2ZXIgKnBsYXRmb3JtX2Rydik7CiB2b2lkIHNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtMjY1LDcgKzI3Niw4IEBACiAJCWNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciAqY29kZWNfZHJ2LAogCQlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpkYWlfZHJ2LCBpbnQgbnVtX2RhaSk7CiB2b2lkIHNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotaW50IHNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcmVnKTsKK2ludCBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZyk7CiBpbnQgc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJICAgICAgIGludCBhZGRyX2JpdHMsIGludCBkYXRhX2JpdHMsCiAJCQkgICAgICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKTsKQEAgLTI3Niw2ICsyODgsMTAgQEAKIAkJCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSk7CiBpbnQgc25kX3NvY19jYWNoZV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJICAgICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCAqdmFsdWUpOworaW50IHNuZF9zb2NfZGVmYXVsdF92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHJlZyk7CitpbnQgc25kX3NvY19kZWZhdWx0X3JlYWRhYmxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnKTsKIAogLyogVXRpbGl0eSBmdW5jdGlvbnMgdG8gZ2V0IGNsb2NrIHJhdGVzIGZyb20gdmFyaW91cyB0aGluZ3MgKi8KIGludCBzbmRfc29jX2NhbGNfZnJhbWVfc2l6ZShpbnQgc2FtcGxlX3NpemUsIGludCBjaGFubmVscywgaW50IHRkbV9zbG90cyk7CkBAIC0yOTcsNiArMzEzLDkgQEAKIAkJCQkgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiB2b2lkIHNuZF9zb2NfamFja19ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssCiAJCQkJICAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitpbnQgc25kX3NvY19qYWNrX2FkZF96b25lcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2tfem9uZSAqem9uZXMpOworaW50IHNuZF9zb2NfamFja19nZXRfdHlwZShzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgbWljYmlhc192b2x0YWdlKTsKICNpZmRlZiBDT05GSUdfR1BJT0xJQgogaW50IHNuZF9zb2NfamFja19hZGRfZ3Bpb3Moc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAogCQkJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvcyk7CkBAIC0zMjEsNyArMzQwLDggQEAKICAqQ29udHJvbHMKICAqLwogc3RydWN0IHNuZF9rY29udHJvbCAqc25kX3NvY19jbmV3KGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpfdGVtcGxhdGUsCi0Jdm9pZCAqZGF0YSwgY2hhciAqbG9uZ19uYW1lKTsKKwkJCQkgIHZvaWQgKmRhdGEsIGNoYXIgKmxvbmdfbmFtZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBpbnQgc25kX3NvY19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9scywgaW50IG51bV9jb250cm9scyk7CiBpbnQgc25kX3NvY19pbmZvX2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMzY3LDYgKzM4NywyMiBAQAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKIAogLyoqCisgKiBzdHJ1Y3Qgc25kX3NvY19yZWdfYWNjZXNzIC0gRGVzY3JpYmVzIHdoZXRoZXIgYSBnaXZlbiByZWdpc3RlciBpcworICogcmVhZGFibGUsIHdyaXRhYmxlIG9yIHZvbGF0aWxlLgorICoKKyAqIEByZWc6IHRoZSByZWdpc3RlciBudW1iZXIKKyAqIEByZWFkOiB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgaXMgcmVhZGFibGUKKyAqIEB3cml0ZTogd2hldGhlciB0aGlzIHJlZ2lzdGVyIGlzIHdyaXRhYmxlCisgKiBAdm9sOiB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgaXMgdm9sYXRpbGUKKyAqLworc3RydWN0IHNuZF9zb2NfcmVnX2FjY2VzcyB7CisJdTE2IHJlZzsKKwl1MTYgcmVhZDsKKwl1MTYgd3JpdGU7CisJdTE2IHZvbDsKK307CisKKy8qKgogICogc3RydWN0IHNuZF9zb2NfamFja19waW4gLSBEZXNjcmliZXMgYSBwaW4gdG8gdXBkYXRlIGJhc2VkIG9uIGphY2sgZGV0ZWN0aW9uCiAgKgogICogQHBpbjogICAgbmFtZSBvZiB0aGUgcGluIHRvIHVwZGF0ZQpAQCAtMzgxLDYgKzQxNywyNCBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3Qgc25kX3NvY19qYWNrX3pvbmUgLSBEZXNjcmliZXMgdm9sdGFnZSB6b25lcyBvZiBqYWNrIGRldGVjdGlvbgorICoKKyAqIEBtaW5fbXY6IHN0YXJ0IHZvbHRhZ2UgaW4gbXYKKyAqIEBtYXhfbXY6IGVuZCB2b2x0YWdlIGluIG12CisgKiBAamFja190eXBlOiB0eXBlIG9mIGphY2sgdGhhdCBpcyBleHBlY3RlZCBmb3IgdGhpcyB2b2x0YWdlCisgKiBAZGVib3VuY2VfdGltZTogZGVib3VuY2VfdGltZSBmb3IgamFjaywgY29kZWMgZHJpdmVyIHNob3VsZCB3YWl0IGZvciB0aGlzCisgKgkJZHVyYXRpb24gYmVmb3JlIHJlYWRpbmcgdGhlIGFkYyBmb3Igdm9sdGFnZXMKKyAqIEA6bGlzdDogbGlzdCBjb250YWluZXIKKyAqLworc3RydWN0IHNuZF9zb2NfamFja196b25lIHsKKwl1bnNpZ25lZCBpbnQgbWluX212OworCXVuc2lnbmVkIGludCBtYXhfbXY7CisJdW5zaWduZWQgaW50IGphY2tfdHlwZTsKKwl1bnNpZ25lZCBpbnQgZGVib3VuY2VfdGltZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisvKioKICAqIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAtIERlc2NyaWJlcyBhIGdwaW8gcGluIGZvciBqYWNrIGRldGVjdGlvbgogICoKICAqIEBncGlvOiAgICAgICAgIGdwaW8gbnVtYmVyCkBAIC0zODgsNiArNDQyLDEwIEBACiAgKiBAcmVwb3J0OiAgICAgICB2YWx1ZSB0byByZXBvcnQgd2hlbiBqYWNrIGRldGVjdGVkCiAgKiBAaW52ZXJ0OiAgICAgICByZXBvcnQgcHJlc2VuY2UgaW4gbG93IHN0YXRlCiAgKiBAZGVib3VjZV90aW1lOiBkZWJvdWNlIHRpbWUgaW4gbXMKKyAqIEB3YWtlOgkgIGVuYWJsZSBhcyB3YWtlIHNvdXJjZQorICogQGphY2tfc3RhdHVzX2NoZWNrOiBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBvdmVycmlkZXMgdGhlIGRldGVjdGlvbgorICoJCSAgICAgICB0byBwcm92aWRlIG1vcmUgY29tcGxleCBjaGVja3MgKGVnLCByZWFkaW5nIGFuCisgKgkJICAgICAgIEFEQykuCiAgKi8KICNpZmRlZiBDT05GSUdfR1BJT0xJQgogc3RydWN0IHNuZF9zb2NfamFja19ncGlvIHsKQEAgLTM5Niw2ICs0NTQsOCBAQAogCWludCByZXBvcnQ7CiAJaW50IGludmVydDsKIAlpbnQgZGVib3VuY2VfdGltZTsKKwlib29sIHdha2U7CisKIAlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIApAQCAtNDA5LDYgKzQ2OSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBwaW5zOwogCWludCBzdGF0dXM7CiAJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgbm90aWZpZXI7CisJc3RydWN0IGxpc3RfaGVhZCBqYWNrX3pvbmVzOwogfTsKIAogLyogU29DIFBDTSBzdHJlYW0gaW5mb3JtYXRpb24gKi8KQEAgLTQ1OSwxOCArNTIwLDIyIEBACiAJc3RydWN0IGxpc3RfaGVhZCBjYXJkX2xpc3Q7CiAJaW50IG51bV9kYWk7CiAJZW51bSBzbmRfc29jX2NvbXByZXNzX3R5cGUgY29tcHJlc3NfdHlwZTsKKwlzaXplX3QgcmVnX3NpemU7CS8qIHJlZ19jYWNoZV9zaXplICogcmVnX3dvcmRfc2l6ZSAqLworCWludCAoKnZvbGF0aWxlX3JlZ2lzdGVyKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOworCWludCAoKnJlYWRhYmxlX3JlZ2lzdGVyKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogCiAJLyogcnVudGltZSAqLwogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsgIC8qIGZvciBhZC1ob2MgYWM5NyBkZXZpY2VzICovCiAJdW5zaWduZWQgaW50IGFjdGl2ZTsKLQl1bnNpZ25lZCBpbnQgY2FjaGVfb25seToxOyAgLyogU3VwcHJlc3Mgd3JpdGVzIHRvIGhhcmR3YXJlICovCi0JdW5zaWduZWQgaW50IGNhY2hlX3N5bmM6MTsgLyogQ2FjaGUgbmVlZHMgdG8gYmUgc3luY2VkIHRvIGhhcmR3YXJlICovCisJdW5zaWduZWQgaW50IGNhY2hlX2J5cGFzczoxOyAvKiBTdXBwcmVzcyBhY2Nlc3MgdG8gdGhlIGNhY2hlICovCiAJdW5zaWduZWQgaW50IHN1c3BlbmRlZDoxOyAvKiBDb2RlYyBpcyBpbiBzdXNwZW5kIFBNIHN0YXRlICovCiAJdW5zaWduZWQgaW50IHByb2JlZDoxOyAvKiBDb2RlYyBoYXMgYmVlbiBwcm9iZWQgKi8KIAl1bnNpZ25lZCBpbnQgYWM5N19yZWdpc3RlcmVkOjE7IC8qIENvZGVjIGhhcyBiZWVuIEFDOTcgcmVnaXN0ZXJlZCAqLwogCXVuc2lnbmVkIGludCBhYzk3X2NyZWF0ZWQ6MTsgLyogQ29kZWMgaGFzIGJlZW4gY3JlYXRlZCBieSBTb0MgKi8KIAl1bnNpZ25lZCBpbnQgc3lzZnNfcmVnaXN0ZXJlZDoxOyAvKiBjb2RlYyBoYXMgYmVlbiBzeXNmcyByZWdpc3RlcmVkICovCiAJdW5zaWduZWQgaW50IGNhY2hlX2luaXQ6MTsgLyogY29kZWMgY2FjaGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KKwl1MzIgY2FjaGVfb25seTsgIC8qIFN1cHByZXNzIHdyaXRlcyB0byBoYXJkd2FyZSAqLworCXUzMiBjYWNoZV9zeW5jOyAvKiBDYWNoZSBuZWVkcyB0byBiZSBzeW5jZWQgdG8gaGFyZHdhcmUgKi8KIAogCS8qIGNvZGVjIElPICovCiAJdm9pZCAqY29udHJvbF9kYXRhOyAvKiBjb2RlYyBjb250cm9sIChpMmMvM3dpcmUpIGRhdGEgKi8KQEAgLTUwMywyMiArNTY4LDM5IEBACiAJCQlwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHNuZF9zb2NfY29kZWMgKik7CiAKKwkvKiBEZWZhdWx0IERBUE0gc2V0dXAsIGFkZGVkIGFmdGVyIHByb2JlKCkgaXMgcnVuICovCisJY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmRhcG1fd2lkZ2V0czsKKwlpbnQgbnVtX2RhcG1fd2lkZ2V0czsKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlICpkYXBtX3JvdXRlczsKKwlpbnQgbnVtX2RhcG1fcm91dGVzOworCisJLyogY29kZWMgd2lkZSBvcGVyYXRpb25zICovCisJaW50ICgqc2V0X3N5c2Nsaykoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJICBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcik7CisJaW50ICgqc2V0X3BsbCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcGxsX2lkLCBpbnQgc291cmNlLAorCQl1bnNpZ25lZCBpbnQgZnJlcV9pbiwgdW5zaWduZWQgaW50IGZyZXFfb3V0KTsKKwogCS8qIGNvZGVjIElPICovCiAJdW5zaWduZWQgaW50ICgqcmVhZCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50KTsKIAlpbnQgKCp3cml0ZSkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogCWludCAoKmRpc3BsYXlfcmVnaXN0ZXIpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIGNoYXIgKiwKIAkJCQlzaXplX3QsIHVuc2lnbmVkIGludCk7Ci0JaW50ICgqdm9sYXRpbGVfcmVnaXN0ZXIpKHVuc2lnbmVkIGludCk7Ci0JaW50ICgqcmVhZGFibGVfcmVnaXN0ZXIpKHVuc2lnbmVkIGludCk7CisJaW50ICgqdm9sYXRpbGVfcmVnaXN0ZXIpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCk7CisJaW50ICgqcmVhZGFibGVfcmVnaXN0ZXIpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCk7CiAJc2hvcnQgcmVnX2NhY2hlX3NpemU7CiAJc2hvcnQgcmVnX2NhY2hlX3N0ZXA7CiAJc2hvcnQgcmVnX3dvcmRfc2l6ZTsKIAljb25zdCB2b2lkICpyZWdfY2FjaGVfZGVmYXVsdDsKKwlzaG9ydCByZWdfYWNjZXNzX3NpemU7CisJY29uc3Qgc3RydWN0IHNuZF9zb2NfcmVnX2FjY2VzcyAqcmVnX2FjY2Vzc19kZWZhdWx0OwogCWVudW0gc25kX3NvY19jb21wcmVzc190eXBlIGNvbXByZXNzX3R5cGU7CiAKIAkvKiBjb2RlYyBiaWFzIGxldmVsICovCiAJaW50ICgqc2V0X2JpYXNfbGV2ZWwpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosCiAJCQkgICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCk7CisKKwl2b2lkICgqc2VxX25vdGlmaWVyKShzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKiwKKwkJCSAgICAgZW51bSBzbmRfc29jX2RhcG1fdHlwZSwgaW50KTsKIH07CiAKIC8qIFNvQyBwbGF0Zm9ybSBpbnRlcmZhY2UgKi8KQEAgLTYxNywxNSArNjk5LDE2IEBACiAKIAlib29sIGluc3RhbnRpYXRlZDsKIAotCWludCAoKnByb2JlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLQlpbnQgKCpyZW1vdmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCWludCAoKnByb2JlKShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKTsKKwlpbnQgKCpsYXRlX3Byb2JlKShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKTsKKwlpbnQgKCpyZW1vdmUpKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpOwogCiAJLyogdGhlIHByZSBhbmQgcG9zdCBQTSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gZG8gYW55IFBNIHdvcmsgYmVmb3JlIGFuZAogCSAqIGFmdGVyIHRoZSBjb2RlYyBhbmQgREFJJ3MgZG8gYW55IFBNIHdvcmsuICovCi0JaW50ICgqc3VzcGVuZF9wcmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci0JaW50ICgqc3VzcGVuZF9wb3N0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotCWludCAoKnJlc3VtZV9wcmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCWludCAoKnJlc3VtZV9wb3N0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKwlpbnQgKCpzdXNwZW5kX3ByZSkoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCk7CisJaW50ICgqc3VzcGVuZF9wb3N0KShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKTsKKwlpbnQgKCpyZXN1bWVfcHJlKShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKTsKKwlpbnQgKCpyZXN1bWVfcG9zdCkoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCk7CiAKIAkvKiBjYWxsYmFja3MgKi8KIAlpbnQgKCpzZXRfYmlhc19sZXZlbCkoc3RydWN0IHNuZF9zb2NfY2FyZCAqLApAQCAtNjU0LDYgKzczNywxNCBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGRfYXV4OwogCWludCBudW1fYXV4X3J0ZDsKIAorCS8qCisJICogQ2FyZC1zcGVjaWZpYyByb3V0ZXMgYW5kIHdpZGdldHMuCisJICovCisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmRhcG1fd2lkZ2V0czsKKwlpbnQgbnVtX2RhcG1fd2lkZ2V0czsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlICpkYXBtX3JvdXRlczsKKwlpbnQgbnVtX2RhcG1fcm91dGVzOworCiAJc3RydWN0IHdvcmtfc3RydWN0IGRlZmVycmVkX3Jlc3VtZV93b3JrOwogCiAJLyogbGlzdHMgb2YgcHJvYmVkIGRldmljZXMgYmVsb25naW5nIHRvIHRoaXMgY2FyZCAqLwpAQCAtNjY1LDExICs3NTYsMTYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBhdGhzOwogCXN0cnVjdCBsaXN0X2hlYWQgZGFwbV9saXN0OwogCisJLyogR2VuZXJpYyBEQVBNIGNvbnRleHQgZm9yIHRoZSBjYXJkICovCisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0IGRhcG07CisKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NhcmRfcm9vdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BvcF90aW1lOwogI2VuZGlmCiAJdTMyIHBvcF90aW1lOworCisJdm9pZCAqZHJ2ZGF0YTsKIH07CiAKIC8qIFNvQyBtYWNoaW5lIERBSSBjb25maWd1cmF0aW9uLCBnbHVlcyBhIGNvZGVjIGFuZCBjcHUgREFJIHRvZ2V0aGVyICovCkBAIC03MjEsNiArODE3LDE3IEBACiAKIC8qIGRldmljZSBkcml2ZXIgZGF0YSAqLwogCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX3NvY19jYXJkX3NldF9kcnZkYXRhKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCisJCXZvaWQgKmRhdGEpCit7CisJY2FyZC0+ZHJ2ZGF0YSA9IGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCit7CisJcmV0dXJuIGNhcmQtPmRydmRhdGE7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfc29jX2NvZGVjX3NldF9kcnZkYXRhKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJdm9pZCAqZGF0YSkKIHsKQEAgLTc1NCw2ICs4NjEsMjIgQEAKIAlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZydGQtPmRldik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfc29jX2luaXRpYWxpemVfY2FyZF9saXN0cyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQoreworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5kYWlfZGV2X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jb2RlY19kZXZfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnBsYXRmb3JtX2Rldl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+d2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnBhdGhzKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+ZGFwbV9saXN0KTsKK30KKwogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnNuZF9zb2NfZGVidWdmc19yb290OworI2VuZGlmCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzbmRfc29jX3BtX29wczsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RsdjMyMGFpYzMyeDQuaCBiL2luY2x1ZGUvc291bmQvdGx2MzIwYWljMzJ4NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMDlmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL3RsdjMyMGFpYzMyeDQuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogdGx2MzIwYWljMzJ4NC5oICAtLSAgVExWMzIwQUlDMzJYNCBTb2MgQXVkaW8gZHJpdmVyIHBsYXRmb3JtIGRhdGEKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBWaXN0YSBTaWxpY29uIFMuTC4KKyAqCisgKiBBdXRob3I6IEphdmllciBNYXJ0aW4gPGphdmllci5tYXJ0aW5AdmlzdGEtc2lsaWNvbi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9BSUMzMlg0X1BEQVRBX0gKKyNkZWZpbmUgX0FJQzMyWDRfUERBVEFfSAorCisjZGVmaW5lIEFJQzMyWDRfUFdSX01JQ0JJQVNfMjA3NV9MRE9JTgkJMHgwMDAwMDAwMQorI2RlZmluZSBBSUMzMlg0X1BXUl9BVkREX0RWRERfV0VBS19ESVNBQkxFCTB4MDAwMDAwMDIKKyNkZWZpbmUgQUlDMzJYNF9QV1JfQUlDMzJYNF9MRE9fRU5BQkxFCQkweDAwMDAwMDA0CisjZGVmaW5lIEFJQzMyWDRfUFdSX0NNTU9ERV9MRE9JTl9SQU5HRV8xOF8zNgkweDAwMDAwMDA4CisjZGVmaW5lIEFJQzMyWDRfUFdSX0NNTU9ERV9IUF9MRE9JTl9QT1dFUkVECTB4MDAwMDAwMTAKKworI2RlZmluZSBBSUMzMlg0X01JQ1BHQV9ST1VURV9MTUlDX0lOMlJfMTBLCTB4MDAwMDAwMDEKKyNkZWZpbmUgQUlDMzJYNF9NSUNQR0FfUk9VVEVfUk1JQ19JTjFMXzEwSwkweDAwMDAwMDAyCisKK3N0cnVjdCBhaWMzMng0X3BkYXRhIHsKKwl1MzIgcG93ZXJfY2ZnOworCXUzMiBtaWNwZ2Ffcm91dGluZzsKKwlib29sIHN3YXBkYWNzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaCBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCmluZGV4IGJmNjlhNWIuLjhmYzUzMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCkBAIC0xLDMgKzEsMyBAQAogLyogaW5jbHVkZS92ZXJzaW9uLmggKi8KLSNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMjMiCisjZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjI0IgogI2RlZmluZSBDT05GSUdfU05EX0RBVEUgIiIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd204OTAzLmggYi9pbmNsdWRlL3NvdW5kL3dtODkwMy5oCmluZGV4IDFlZWViZDUuLmNmN2NjYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvd204OTAzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC93bTg5MDMuaApAQCAtMzMsNiArMzMsMjEgQEAKICNkZWZpbmUgV004OTAzX01JQ0JJQVNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQklBU19FTkEgKi8KIAogLyoKKyAqIFdNODkwM19HUG5fRk4gdmFsdWVzCisgKgorICogU2VlIGRhdGFzaGVldHMgZm9yIGxpc3Qgb2YgdmFsaWQgdmFsdWVzIHBlciBwaW4KKyAqLworI2RlZmluZSBXTTg5MDNfR1BuX0ZOX0dQSU9fT1VUUFVUICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODkwM19HUG5fRk5fQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004OTAzX0dQbl9GTl9JUlFfT1VUUFQgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTg5MDNfR1BuX0ZOX0dQSU9fSU5QVVQgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODkwM19HUG5fRk5fTUlDQklBU19DVVJSRU5UX0RFVEVDVCAgICAgICAgIDQKKyNkZWZpbmUgV004OTAzX0dQbl9GTl9NSUNCSUFTX1NIT1JUX0RFVEVDVCAgICAgICAgICAgNQorI2RlZmluZSBXTTg5MDNfR1BuX0ZOX0RNSUNfTFJfQ0xLX09VVFBVVCAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODkwM19HUG5fRk5fRkxMX0xPQ0tfT1VUUFVUICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004OTAzX0dQbl9GTl9GTExfQ0xPQ0tfT1VUUFVUICAgICAgICAgICAgICAgOQorCisvKgogICogUjExNiAoMHg3NCkgLSBHUElPIENvbnRyb2wgMQogICovCiAjZGVmaW5lIFdNODkwM19HUDFfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDFGMDAgIC8qIEdQMV9GTiAtIFsxMjo4XSAqLwpAQCAtMjI3LDYgKzI0Miw4IEBACiAjZGVmaW5lIFdNODkwM19HUDVfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQNV9EQiAqLwogI2RlZmluZSBXTTg5MDNfR1A1X0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDVfREIgKi8KIAorI2RlZmluZSBXTTg5MDNfTlVNX0dQSU8gNQorCiBzdHJ1Y3Qgd204OTAzX3BsYXRmb3JtX2RhdGEgewogCWJvb2wgaXJxX2FjdGl2ZV9sb3c7ICAgLyogU2V0IGlmIElSUSBhY3RpdmUgbG93LCBkZWZhdWx0IGhpZ2ggKi8KIApAQCAtMjM5LDcgKzI1Niw4IEBACiAKIAlpbnQgbWljZGV0X2RlbGF5OyAgICAgIC8qIERlbGF5IGFmdGVyIG1pY3JvcGhvbmUgZGV0ZWN0aW9uIChtcykgKi8KIAotCXUzMiBncGlvX2NmZ1s1XTsgICAgICAgLyogRGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgZm9yIEdQSU8gcGluIG11eCAqLworCWludCBncGlvX2Jhc2U7CisJdTMyIGdwaW9fY2ZnW1dNODkwM19OVU1fR1BJT107IC8qIERlZmF1bHQgcmVnaXN0ZXIgdmFsdWVzIGZvciBHUElPIHBpbiBtdXggKi8KIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93bTkwODEuaCBiL2luY2x1ZGUvc291bmQvd205MDgxLmgKaW5kZXggZTE3M2RkYi4uZjM0YjBiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC93bTkwODEuaAorKysgYi9pbmNsdWRlL3NvdW5kL3dtOTA4MS5oCkBAIC0xNyw5ICsxNywxMiBAQAogCXUxNiBjb25maWdbMjBdOwogfTsKIAotc3RydWN0IHdtOTA4MV9yZXR1bmVfbW9iaWxlX2NvbmZpZyB7Ci0Jc3RydWN0IHdtOTA4MV9yZXR1bmVfbW9iaWxlX3NldHRpbmcgKmNvbmZpZ3M7Ci0JaW50IG51bV9jb25maWdzOworc3RydWN0IHdtOTA4MV9wZGF0YSB7CisJYm9vbCBpcnFfaGlnaDsgICAvKiBJUlEgaXMgYWN0aXZlIGhpZ2ggKi8KKwlib29sIGlycV9jbW9zOyAgIC8qIElSUSBpcyBpbiBDTU9TIG1vZGUgKi8KKworCXN0cnVjdCB3bTkwODFfcmV0dW5lX21vYmlsZV9zZXR0aW5nICpyZXR1bmVfY29uZmlnczsKKwlpbnQgbnVtX3JldHVuZV9jb25maWdzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hc29jLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hc29jLmgKaW5kZXggMTg2ZTg0ZC4uYWU5NzNkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYXNvYy5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fzb2MuaApAQCAtMjI5LDYgKzIyOSwzMSBAQAogCVRQX3ByaW50aygiamFjaz0lcyAleCIsIF9fZ2V0X3N0cihuYW1lKSwgKGludClfX2VudHJ5LT52YWwpCiApOwogCitUUkFDRV9FVkVOVChzbmRfc29jX2NhY2hlX3N5bmMsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnR5cGUsCisJCSBjb25zdCBjaGFyICpzdGF0dXMpLAorCisJVFBfQVJHUyhjb2RlYywgdHlwZSwgc3RhdHVzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fc3RyaW5nKAluYW1lLAkJY29kZWMtPm5hbWUJKQorCQlfX3N0cmluZygJc3RhdHVzLAkJc3RhdHVzCQkpCisJCV9fc3RyaW5nKAl0eXBlLAkJdHlwZQkJKQorCQlfX2ZpZWxkKAlpbnQsCQlpZAkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKG5hbWUsIGNvZGVjLT5uYW1lKTsKKwkJX19hc3NpZ25fc3RyKHN0YXR1cywgc3RhdHVzKTsKKwkJX19hc3NpZ25fc3RyKHR5cGUsIHR5cGUpOworCQlfX2VudHJ5LT5pZCA9IGNvZGVjLT5pZDsKKwkpLAorCisJVFBfcHJpbnRrKCJjb2RlYz0lcy4lZCB0eXBlPSVzIHN0YXR1cz0lcyIsIF9fZ2V0X3N0cihuYW1lKSwKKwkJICAoaW50KV9fZW50cnktPmlkLCBfX2dldF9zdHIodHlwZSksIF9fZ2V0X3N0cihzdGF0dXMpKQorKTsKKwogI2VuZGlmIC8qIF9UUkFDRV9BU09DX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggZDkxZGUxNi4uNTYyNDBlNyAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtNzQ1LDkgKzc0NSw5IEBACiAKIAlUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLgogCU9uZSBuZWVkcyB0byBhbHNvIGVuYWJsZSBhY3R1YWwgSU8gY29udHJvbGxpbmcgbG9naWMvcG9saWN5LiBGb3IKLQllbmFibGluZyBwcm9wb3J0aW9uYWwgd2VpZ2h0IGRpdmlzaW9uIG9mIGRpc2sgYmFuZHdpZHRoIGluIENGUSBzZXRpCi0JQ09ORklHX0NGUV9HUk9VUF9JT1NDSEVEPXkgYW5kIGZvciBlbmFibGluZyB0aHJvdHRsaW5nIHBvbGljeSBzZXQKLQlDT05GSUdfQkxLX1RIUk9UVExFPXkuCisJZW5hYmxpbmcgcHJvcG9ydGlvbmFsIHdlaWdodCBkaXZpc2lvbiBvZiBkaXNrIGJhbmR3aWR0aCBpbiBDRlEsIHNldAorCUNPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldAorCUNPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eS4KIAogCVNlZSBEb2N1bWVudGF0aW9uL2Nncm91cHMvYmxraW8tY29udHJvbGxlci50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKZGlmZiAtLWdpdCBhL2luaXQvY2FsaWJyYXRlLmMgYi9pbml0L2NhbGlicmF0ZS5jCmluZGV4IDI0ZmUwMjIuLjc2YWM5MTkgMTAwNjQ0Ci0tLSBhL2luaXQvY2FsaWJyYXRlLmMKKysrIGIvaW5pdC9jYWxpYnJhdGUuYwpAQCAtMTEwLDggKzExMCw4IEBACiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgYml0cyBvZiBwcmVjaXNpb24gZm9yIHRoZSBsb29wc19wZXJfamlmZnkuICBFYWNoCi0gKiBiaXQgdGFrZXMgb24gYXZlcmFnZSAxLjUvSFogc2Vjb25kcy4gIFRoaXMgKGxpa2UgdGhlIG9yaWdpbmFsKSBpcyBhIGxpdHRsZQotICogYmV0dGVyIHRoYW4gMSUKKyAqIHRpbWUgd2UgcmVmaW5lIG91ciBlc3RpbWF0ZSBhZnRlciB0aGUgZmlyc3QgdGFrZXMgMS41L0haIHNlY29uZHMsIHNvIHRyeQorICogdG8gc3RhcnQgd2l0aCBhIGdvb2QgZXN0aW1hdGUuCiAgKiBGb3IgdGhlIGJvb3QgY3B1IHdlIGNhbiBza2lwIHRoZSBkZWxheSBjYWxpYnJhdGlvbiBhbmQgYXNzaWduIGl0IGEgdmFsdWUKICAqIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIHRpbWVyIGZyZXF1ZW5jeS4KICAqIEZvciB0aGUgcmVzdCBvZiB0aGUgQ1BVcyB3ZSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIHRpbWVyIGZyZXF1ZW5jeSBpcyBzYW1lIGFzCkBAIC0xMTksMTAgKzExOSw3MiBAQAogICovCiAjZGVmaW5lIExQU19QUkVDIDgKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19jcHVpbml0IGNhbGlicmF0ZV9kZWxheV9jb252ZXJnZSh2b2lkKQoreworCS8qIEZpcnN0IHN0YWdlIC0gc2xvd2x5IGFjY2VsZXJhdGUgdG8gZmluZCBpbml0aWFsIGJvdW5kcyAqLworCXVuc2lnbmVkIGxvbmcgbHBqLCBscGpfYmFzZSwgdGlja3MsIGxvb3BhZGQsIGxvb3BhZGRfYmFzZSwgY2hvcF9saW1pdDsKKwlpbnQgdHJpYWxzID0gMCwgYmFuZCA9IDAsIHRyaWFsX2luX2JhbmQgPSAwOworCisJbHBqID0gKDE8PDEyKTsKKworCS8qIHdhaXQgZm9yICJzdGFydCBvZiIgY2xvY2sgdGljayAqLworCXRpY2tzID0gamlmZmllczsKKwl3aGlsZSAodGlja3MgPT0gamlmZmllcykKKwkJOyAvKiBub3RoaW5nICovCisJLyogR28gLi4gKi8KKwl0aWNrcyA9IGppZmZpZXM7CisJZG8geworCQlpZiAoKyt0cmlhbF9pbl9iYW5kID09ICgxPDxiYW5kKSkgeworCQkJKytiYW5kOworCQkJdHJpYWxfaW5fYmFuZCA9IDA7CisJCX0KKwkJX19kZWxheShscGogKiBiYW5kKTsKKwkJdHJpYWxzICs9IGJhbmQ7CisJfSB3aGlsZSAodGlja3MgPT0gamlmZmllcyk7CisJLyoKKwkgKiBXZSBvdmVyc2hvdCwgc28gcmV0cmVhdCB0byBhIGNsZWFyIHVuZGVyZXN0aW1hdGUuIFRoZW4gZXN0aW1hdGUKKwkgKiB0aGUgbGFyZ2VzdCBsaWtlbHkgdW5kZXJzaG9vdC4gVGhpcyBkZWZpbmVzIG91ciBjaG9wIGJvdW5kcy4KKwkgKi8KKwl0cmlhbHMgLT0gYmFuZDsKKwlsb29wYWRkX2Jhc2UgPSBscGogKiBiYW5kOworCWxwal9iYXNlID0gbHBqICogdHJpYWxzOworCityZWNhbGlicmF0ZToKKwlscGogPSBscGpfYmFzZTsKKwlsb29wYWRkID0gbG9vcGFkZF9iYXNlOworCisJLyoKKwkgKiBEbyBhIGJpbmFyeSBhcHByb3hpbWF0aW9uIHRvIGdldCBscGogc2V0IHRvCisJICogZXF1YWwgb25lIGNsb2NrICh1cCB0byBMUFNfUFJFQyBiaXRzKQorCSAqLworCWNob3BfbGltaXQgPSBscGogPj4gTFBTX1BSRUM7CisJd2hpbGUgKGxvb3BhZGQgPiBjaG9wX2xpbWl0KSB7CisJCWxwaiArPSBsb29wYWRkOworCQl0aWNrcyA9IGppZmZpZXM7CisJCXdoaWxlICh0aWNrcyA9PSBqaWZmaWVzKQorCQkJOyAvKiBub3RoaW5nICovCisJCXRpY2tzID0gamlmZmllczsKKwkJX19kZWxheShscGopOworCQlpZiAoamlmZmllcyAhPSB0aWNrcykJLyogbG9uZ2VyIHRoYW4gMSB0aWNrICovCisJCQlscGogLT0gbG9vcGFkZDsKKwkJbG9vcGFkZCA+Pj0gMTsKKwl9CisJLyoKKwkgKiBJZiB3ZSBpbmNyZW1lbnRlZCBldmVyeSBzaW5nbGUgdGltZSBwb3NzaWJsZSwgcHJlc3VtZSB3ZSd2ZQorCSAqIG1hc3NpdmVseSB1bmRlcmVzdGltYXRlZCBpbml0aWFsbHksIGFuZCByZXRyeSB3aXRoIGEgaGlnaGVyCisJICogc3RhcnQsIGFuZCBsYXJnZXIgcmFuZ2UuIChPbmx5IHNlZW4gb24geDg2XzY0LCBkdWUgdG8gU01JcykKKwkgKi8KKwlpZiAobHBqICsgbG9vcGFkZCAqIDIgPT0gbHBqX2Jhc2UgKyBsb29wYWRkX2Jhc2UgKiAyKSB7CisJCWxwal9iYXNlID0gbHBqOworCQlsb29wYWRkX2Jhc2UgPDw9IDI7CisJCWdvdG8gcmVjYWxpYnJhdGU7CisJfQorCisJcmV0dXJuIGxwajsKK30KKwogdm9pZCBfX2NwdWluaXQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aWNrcywgbG9vcGJpdDsKLQlpbnQgbHBzX3ByZWNpc2lvbiA9IExQU19QUkVDOwogCXN0YXRpYyBib29sIHByaW50ZWQ7CiAKIAlpZiAocHJlc2V0X2xwaikgewpAQCAtMTM5LDM5ICsyMDEsOSBAQAogCQkJcHJfaW5mbygiQ2FsaWJyYXRpbmcgZGVsYXkgdXNpbmcgdGltZXIgIgogCQkJCSJzcGVjaWZpYyByb3V0aW5lLi4gIik7CiAJfSBlbHNlIHsKLQkJbG9vcHNfcGVyX2ppZmZ5ID0gKDE8PDEyKTsKLQogCQlpZiAoIXByaW50ZWQpCiAJCQlwcl9pbmZvKCJDYWxpYnJhdGluZyBkZWxheSBsb29wLi4uICIpOwotCQl3aGlsZSAoKGxvb3BzX3Blcl9qaWZmeSA8PD0gMSkgIT0gMCkgewotCQkJLyogd2FpdCBmb3IgInN0YXJ0IG9mIiBjbG9jayB0aWNrICovCi0JCQl0aWNrcyA9IGppZmZpZXM7Ci0JCQl3aGlsZSAodGlja3MgPT0gamlmZmllcykKLQkJCQkvKiBub3RoaW5nICovOwotCQkJLyogR28gLi4gKi8KLQkJCXRpY2tzID0gamlmZmllczsKLQkJCV9fZGVsYXkobG9vcHNfcGVyX2ppZmZ5KTsKLQkJCXRpY2tzID0gamlmZmllcyAtIHRpY2tzOwotCQkJaWYgKHRpY2tzKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogRG8gYSBiaW5hcnkgYXBwcm94aW1hdGlvbiB0byBnZXQgbG9vcHNfcGVyX2ppZmZ5IHNldCB0bwotCQkgKiBlcXVhbCBvbmUgY2xvY2sgKHVwIHRvIGxwc19wcmVjaXNpb24gYml0cykKLQkJICovCi0JCWxvb3BzX3Blcl9qaWZmeSA+Pj0gMTsKLQkJbG9vcGJpdCA9IGxvb3BzX3Blcl9qaWZmeTsKLQkJd2hpbGUgKGxwc19wcmVjaXNpb24tLSAmJiAobG9vcGJpdCA+Pj0gMSkpIHsKLQkJCWxvb3BzX3Blcl9qaWZmeSB8PSBsb29wYml0OwotCQkJdGlja3MgPSBqaWZmaWVzOwotCQkJd2hpbGUgKHRpY2tzID09IGppZmZpZXMpCi0JCQkJLyogbm90aGluZyAqLzsKLQkJCXRpY2tzID0gamlmZmllczsKLQkJCV9fZGVsYXkobG9vcHNfcGVyX2ppZmZ5KTsKLQkJCWlmIChqaWZmaWVzICE9IHRpY2tzKQkvKiBsb25nZXIgdGhhbiAxIHRpY2sgKi8KLQkJCQlsb29wc19wZXJfamlmZnkgJj0gfmxvb3BiaXQ7Ci0JCX0KKwkJbG9vcHNfcGVyX2ppZmZ5ID0gY2FsaWJyYXRlX2RlbGF5X2NvbnZlcmdlKCk7CiAJfQogCWlmICghcHJpbnRlZCkKIAkJcHJfY29udCgiJWx1LiUwMmx1IEJvZ29NSVBTIChscGo9JWx1KVxuIiwKZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzLmMgYi9pbml0L2RvX21vdW50cy5jCmluZGV4IDJiNTRiZWYzLi4zZTAxMTIxIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50cy5jCisrKyBiL2luaXQvZG9fbW91bnRzLmMKQEAgLTI5Myw3ICsyOTMsOCBAQAogCiAJc3lzX2NoZGlyKChjb25zdCBjaGFyIF9fdXNlciBfX2ZvcmNlICopIi9yb290Iik7CiAJUk9PVF9ERVYgPSBjdXJyZW50LT5mcy0+cHdkLm1udC0+bW50X3NiLT5zX2RldjsKLQlwcmludGsoIlZGUzogTW91bnRlZCByb290ICglcyBmaWxlc3lzdGVtKSVzIG9uIGRldmljZSAldToldS5cbiIsCisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiVkZTOiBNb3VudGVkIHJvb3QgKCVzIGZpbGVzeXN0ZW0pJXMgb24gZGV2aWNlICV1OiV1LlxuIiwKIAkgICAgICAgY3VycmVudC0+ZnMtPnB3ZC5tbnQtPm1udF9zYi0+c190eXBlLT5uYW1lLAogCSAgICAgICBjdXJyZW50LT5mcy0+cHdkLm1udC0+bW50X3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZID8KIAkgICAgICAgIiByZWFkb25seSIgOiAiIiwgTUFKT1IoUk9PVF9ERVYpLCBNSU5PUihST09UX0RFVikpOwpkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHNfcmQuYyBiL2luaXQvZG9fbW91bnRzX3JkLmMKaW5kZXggNmUxZWU2OS4uZmU5YWNiMCAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHNfcmQuYworKysgYi9pbml0L2RvX21vdW50c19yZC5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAlidWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJbWluaXhzYiA9IChzdHJ1Y3QgbWluaXhfc3VwZXJfYmxvY2sgKikgYnVmOwogCWV4dDJzYiA9IChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqKSBidWY7CmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDMzYzM3YzMuLjRhOTQ3OWUgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0xMjksNjMgKzEyOSw2IEBACiBzdGF0aWMgY2hhciAqZXhlY3V0ZV9jb21tYW5kOwogc3RhdGljIGNoYXIgKnJhbWRpc2tfZXhlY3V0ZV9jb21tYW5kOwogCi0jaWZkZWYgQ09ORklHX1NNUAotLyogU2V0dXAgY29uZmlndXJlZCBtYXhpbXVtIG51bWJlciBvZiBDUFVzIHRvIGFjdGl2YXRlICovCi11bnNpZ25lZCBpbnQgc2V0dXBfbWF4X2NwdXMgPSBOUl9DUFVTOwotRVhQT1JUX1NZTUJPTChzZXR1cF9tYXhfY3B1cyk7Ci0KLQotLyoKLSAqIFNldHVwIHJvdXRpbmUgZm9yIGNvbnRyb2xsaW5nIFNNUCBhY3RpdmF0aW9uCi0gKgotICogQ29tbWFuZC1saW5lIG9wdGlvbiBvZiAibm9zbXAiIG9yICJtYXhjcHVzPTAiIHdpbGwgZGlzYWJsZSBTTVAKLSAqIGFjdGl2YXRpb24gZW50aXJlbHkgKHRoZSBNUFMgdGFibGUgcHJvYmUgc3RpbGwgaGFwcGVucywgdGhvdWdoKS4KLSAqCi0gKiBDb21tYW5kLWxpbmUgb3B0aW9uIG9mICJtYXhjcHVzPTxOVU0+Iiwgd2hlcmUgPE5VTT4gaXMgYW4gaW50ZWdlcgotICogZ3JlYXRlciB0aGFuIDAsIGxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyBhY3RpdmF0ZWQgaW4KLSAqIFNNUCBtb2RlIHRvIDxOVU0+LgotICovCi0KLXZvaWQgX193ZWFrIGFyY2hfZGlzYWJsZV9zbXBfc3VwcG9ydCh2b2lkKSB7IH0KLQotc3RhdGljIGludCBfX2luaXQgbm9zbXAoY2hhciAqc3RyKQotewotCXNldHVwX21heF9jcHVzID0gMDsKLQlhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQoKTsKLQotCXJldHVybiAwOwotfQotCi1lYXJseV9wYXJhbSgibm9zbXAiLCBub3NtcCk7Ci0KLS8qIHRoaXMgaXMgaGFyZCBsaW1pdCAqLwotc3RhdGljIGludCBfX2luaXQgbnJjcHVzKGNoYXIgKnN0cikKLXsKLQlpbnQgbnJfY3B1czsKLQotCWdldF9vcHRpb24oJnN0ciwgJm5yX2NwdXMpOwotCWlmIChucl9jcHVzID4gMCAmJiBucl9jcHVzIDwgbnJfY3B1X2lkcykKLQkJbnJfY3B1X2lkcyA9IG5yX2NwdXM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotZWFybHlfcGFyYW0oIm5yX2NwdXMiLCBucmNwdXMpOwotCi1zdGF0aWMgaW50IF9faW5pdCBtYXhjcHVzKGNoYXIgKnN0cikKLXsKLQlnZXRfb3B0aW9uKCZzdHIsICZzZXR1cF9tYXhfY3B1cyk7Ci0JaWYgKHNldHVwX21heF9jcHVzID09IDApCi0JCWFyY2hfZGlzYWJsZV9zbXBfc3VwcG9ydCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWVhcmx5X3BhcmFtKCJtYXhjcHVzIiwgbWF4Y3B1cyk7Ci0jZWxzZQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZXR1cF9tYXhfY3B1cyA9IE5SX0NQVVM7Ci0jZW5kaWYKLQogLyoKICAqIElmIHNldCwgdGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRvIHRoZSBkcml2ZXJzIHRoYXQgcmVzZXQgdGhlIHVuZGVybHlpbmcKICAqIGRldmljZSBiZWZvcmUgZ29pbmcgYWhlYWQgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb3RoZXJ3aXNlIGRyaXZlciBtaWdodApAQCAtMzYyLDcgKzMwNSw3IEBACiBfX3NldHVwKCJyZGluaXQ9IiwgcmRpbml0X3NldHVwKTsKIAogI2lmbmRlZiBDT05GSUdfU01QCi0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2V0dXBfbWF4X2NwdXMgPSBOUl9DUFVTOwogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogc3RhdGljIHZvaWQgX19pbml0IHNtcF9pbml0KHZvaWQpCiB7CkBAIC0zNzQsMzcgKzMxNyw2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9ucl9jcHVfaWRzKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heGNwdXMpIHsgfQotCi0jZWxzZQotCi0vKiBTZXR1cCBudW1iZXIgb2YgcG9zc2libGUgcHJvY2Vzc29yIGlkcyAqLwotaW50IG5yX2NwdV9pZHMgX19yZWFkX21vc3RseSA9IE5SX0NQVVM7Ci1FWFBPUlRfU1lNQk9MKG5yX2NwdV9pZHMpOwotCi0vKiBBbiBhcmNoIG1heSBzZXQgbnJfY3B1X2lkcyBlYXJsaWVyIGlmIG5lZWRlZCwgc28gdGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ucl9jcHVfaWRzKHZvaWQpCi17Ci0JbnJfY3B1X2lkcyA9IGZpbmRfbGFzdF9iaXQoY3B1bWFza19iaXRzKGNwdV9wb3NzaWJsZV9tYXNrKSxOUl9DUFVTKSArIDE7Ci19Ci0KLS8qIENhbGxlZCBieSBib290IHByb2Nlc3NvciB0byBhY3RpdmF0ZSB0aGUgcmVzdC4gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzbXBfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjcHU7Ci0KLQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB1c2Vyc3BhY2UgLS1SUiAqLwotCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewotCQlpZiAobnVtX29ubGluZV9jcHVzKCkgPj0gc2V0dXBfbWF4X2NwdXMpCi0JCQlicmVhazsKLQkJaWYgKCFjcHVfb25saW5lKGNwdSkpCi0JCQljcHVfdXAoY3B1KTsKLQl9Ci0KLQkvKiBBbnkgY2xlYW51cCB3b3JrICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiQnJvdWdodCB1cCAlbGQgQ1BVc1xuIiwgKGxvbmcpbnVtX29ubGluZV9jcHVzKCkpOwotCXNtcF9jcHVzX2RvbmUoc2V0dXBfbWF4X2NwdXMpOwotfQotCiAjZW5kaWYKIAogLyoKQEAgLTg3NSwxNSArNzg3LDYgQEAKIAkgKiBpbml0IGNhbiBydW4gb24gYW55IGNwdS4KIAkgKi8KIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVfYWxsX21hc2spOwotCS8qCi0JICogVGVsbCB0aGUgd29ybGQgdGhhdCB3ZSdyZSBnb2luZyB0byBiZSB0aGUgZ3JpbQotCSAqIHJlYXBlciBvZiBpbm5vY2VudCBvcnBoYW5lZCBjaGlsZHJlbi4KLQkgKgotCSAqIFdlIGRvbid0IHdhbnQgcGVvcGxlIHRvIGhhdmUgdG8gbWFrZSBpbmNvcnJlY3QKLQkgKiBhc3N1bXB0aW9ucyBhYm91dCB3aGVyZSBpbiB0aGUgdGFzayBhcnJheSB0aGlzCi0JICogY2FuIGJlIGZvdW5kLgotCSAqLwotCWluaXRfcGlkX25zLmNoaWxkX3JlYXBlciA9IGN1cnJlbnQ7CiAKIAljYWRfcGlkID0gdGFza19waWQoY3VycmVudCk7CiAKZGlmZiAtLWdpdCBhL2luaXQvdmVyc2lvbi5jIGIvaW5pdC92ZXJzaW9uLmMKaW5kZXggYWRmZjU4Ni4uODZmZTBjYyAxMDA2NDQKLS0tIGEvaW5pdC92ZXJzaW9uLmMKKysrIGIvaW5pdC92ZXJzaW9uLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAkJLm1hY2hpbmUJPSBVVFNfTUFDSElORSwKIAkJLmRvbWFpbm5hbWUJPSBVVFNfRE9NQUlOTkFNRSwKIAl9LAorCS51c2VyX25zID0gJmluaXRfdXNlcl9ucywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpbml0X3V0c19ucyk7CiAKZGlmZiAtLWdpdCBhL2lwYy9tc2cuYyBiL2lwYy9tc2cuYwppbmRleCA3NDdiNjU1Li4wZTczMmU5IDEwMDY0NAotLS0gYS9pcGMvbXNnLmMKKysrIGIvaXBjL21zZy5jCkBAIC00MjEsNyArNDIxLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWlwY3AgPSBpcGNjdGxfcHJlX2Rvd24oJm1zZ19pZHMobnMpLCBtc3FpZCwgY21kLAorCWlwY3AgPSBpcGNjdGxfcHJlX2Rvd24obnMsICZtc2dfaWRzKG5zKSwgbXNxaWQsIGNtZCwKIAkJCSAgICAgICAmbXNxaWQ2NC5tc2dfcGVybSwgbXNxaWQ2NC5tc2dfcWJ5dGVzKTsKIAlpZiAoSVNfRVJSKGlwY3ApKQogCQlyZXR1cm4gUFRSX0VSUihpcGNwKTsKQEAgLTUzOSw3ICs1MzksNyBAQAogCQkJc3VjY2Vzc19yZXR1cm4gPSAwOwogCQl9CiAJCWVyciA9IC1FQUNDRVM7Ci0JCWlmIChpcGNwZXJtcygmbXNxLT5xX3Blcm0sIFNfSVJVR08pKQorCQlpZiAoaXBjcGVybXMobnMsICZtc3EtPnFfcGVybSwgU19JUlVHTykpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKIAkJZXJyID0gc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ2N0bChtc3EsIGNtZCk7CkBAIC02NjQsNyArNjY0LDcgQEAKIAkJc3RydWN0IG1zZ19zZW5kZXIgczsKIAogCQllcnIgPSAtRUFDQ0VTOwotCQlpZiAoaXBjcGVybXMoJm1zcS0+cV9wZXJtLCBTX0lXVUdPKSkKKwkJaWYgKGlwY3Blcm1zKG5zLCAmbXNxLT5xX3Blcm0sIFNfSVdVR08pKQogCQkJZ290byBvdXRfdW5sb2NrX2ZyZWU7CiAKIAkJZXJyID0gc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ3NuZChtc3EsIG1zZywgbXNnZmxnKTsKQEAgLTc3NCw3ICs3NzQsNyBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAKIAkJbXNnID0gRVJSX1BUUigtRUFDQ0VTKTsKLQkJaWYgKGlwY3Blcm1zKCZtc3EtPnFfcGVybSwgU19JUlVHTykpCisJCWlmIChpcGNwZXJtcyhucywgJm1zcS0+cV9wZXJtLCBTX0lSVUdPKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAogCQltc2cgPSBFUlJfUFRSKC1FQUdBSU4pOwpkaWZmIC0tZ2l0IGEvaXBjL21zZ3V0aWwuYyBiL2lwYy9tc2d1dGlsLmMKaW5kZXggZjA5NWVlMi4uOGI1Y2U1ZDMgMTAwNjQ0Ci0tLSBhL2lwYy9tc2d1dGlsLmMKKysrIGIvaXBjL21zZ3V0aWwuYwpAQCAtMzIsNiArMzIsNyBAQAogCS5tcV9tc2dfbWF4ICAgICAgPSBERkxUX01TR01BWCwKIAkubXFfbXNnc2l6ZV9tYXggID0gREZMVF9NU0dTSVpFTUFYLAogI2VuZGlmCisJLnVzZXJfbnMgPSAmaW5pdF91c2VyX25zLAogfTsKIAogYXRvbWljX3QgbnJfaXBjX25zID0gQVRPTUlDX0lOSVQoMSk7CmRpZmYgLS1naXQgYS9pcGMvbmFtZXNwYWNlLmMgYi9pcGMvbmFtZXNwYWNlLmMKaW5kZXggYTEwOTRmZi4uM2MzZTUyMiAxMDA2NDQKLS0tIGEvaXBjL25hbWVzcGFjZS5jCisrKyBiL2lwYy9uYW1lc3BhY2UuYwpAQCAtMTEsMTAgKzExLDEyIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgogCiAjaW5jbHVkZSAidXRpbC5oIgogCi1zdGF0aWMgc3RydWN0IGlwY19uYW1lc3BhY2UgKmNyZWF0ZV9pcGNfbnModm9pZCkKK3N0YXRpYyBzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqY3JlYXRlX2lwY19ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJICAgc3RydWN0IGlwY19uYW1lc3BhY2UgKm9sZF9ucykKIHsKIAlzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnM7CiAJaW50IGVycjsKQEAgLTQzLDE0ICs0NSwxOSBAQAogCWlwY25zX25vdGlmeShJUENOU19DUkVBVEVEKTsKIAlyZWdpc3Rlcl9pcGNuc19ub3RpZmllcihucyk7CiAKKwlucy0+dXNlcl9ucyA9IGdldF91c2VyX25zKHRhc2tfY3JlZF94eHgodHNrLCB1c2VyKS0+dXNlcl9ucyk7CisKIAlyZXR1cm4gbnM7CiB9CiAKLXN0cnVjdCBpcGNfbmFtZXNwYWNlICpjb3B5X2lwY3ModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQorc3RydWN0IGlwY19uYW1lc3BhY2UgKmNvcHlfaXBjcyh1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogeworCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpucyA9IHRzay0+bnNwcm94eS0+aXBjX25zOworCiAJaWYgKCEoZmxhZ3MgJiBDTE9ORV9ORVdJUEMpKQogCQlyZXR1cm4gZ2V0X2lwY19ucyhucyk7Ci0JcmV0dXJuIGNyZWF0ZV9pcGNfbnMoKTsKKwlyZXR1cm4gY3JlYXRlX2lwY19ucyh0c2ssIG5zKTsKIH0KIAogLyoKQEAgLTEwNSw2ICsxMTIsNyBAQAogCSAqIG9yZGVyIHRvIGhhdmUgYSBjb3JyZWN0IHZhbHVlIHdoZW4gcmVjb21wdXRpbmcgbXNnbW5pLgogCSAqLwogCWlwY25zX25vdGlmeShJUENOU19SRU1PVkVEKTsKKwlwdXRfdXNlcl9ucyhucy0+dXNlcl9ucyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pcGMvc2VtLmMgYi9pcGMvc2VtLmMKaW5kZXggMGUwZDQ5Yi4uYWUwNDBhMCAxMDA2NDQKLS0tIGEvaXBjL3NlbS5jCisrKyBiL2lwYy9zZW0uYwpAQCAtODE3LDcgKzgxNyw3IEBACiAJCX0KIAogCQllcnIgPSAtRUFDQ0VTOwotCQlpZiAoaXBjcGVybXMgKCZzbWEtPnNlbV9wZXJtLCBTX0lSVUdPKSkKKwkJaWYgKGlwY3Blcm1zKG5zLCAmc21hLT5zZW1fcGVybSwgU19JUlVHTykpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKIAkJZXJyID0gc2VjdXJpdHlfc2VtX3NlbWN0bChzbWEsIGNtZCk7CkBAIC04NjIsNyArODYyLDggQEAKIAluc2VtcyA9IHNtYS0+c2VtX25zZW1zOwogCiAJZXJyID0gLUVBQ0NFUzsKLQlpZiAoaXBjcGVybXMgKCZzbWEtPnNlbV9wZXJtLCAoY21kPT1TRVRWQUx8fGNtZD09U0VUQUxMKT9TX0lXVUdPOlNfSVJVR08pKQorCWlmIChpcGNwZXJtcyhucywgJnNtYS0+c2VtX3Blcm0sCisJCQkoY21kID09IFNFVFZBTCB8fCBjbWQgPT0gU0VUQUxMKSA/IFNfSVdVR08gOiBTX0lSVUdPKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJZXJyID0gc2VjdXJpdHlfc2VtX3NlbWN0bChzbWEsIGNtZCk7CkBAIC0xMDQ3LDcgKzEwNDgsOCBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JaXBjcCA9IGlwY2N0bF9wcmVfZG93bigmc2VtX2lkcyhucyksIHNlbWlkLCBjbWQsICZzZW1pZDY0LnNlbV9wZXJtLCAwKTsKKwlpcGNwID0gaXBjY3RsX3ByZV9kb3duKG5zLCAmc2VtX2lkcyhucyksIHNlbWlkLCBjbWQsCisJCQkgICAgICAgJnNlbWlkNjQuc2VtX3Blcm0sIDApOwogCWlmIChJU19FUlIoaXBjcCkpCiAJCXJldHVybiBQVFJfRVJSKGlwY3ApOwogCkBAIC0xMzg2LDcgKzEzODgsNyBAQAogCQlnb3RvIG91dF91bmxvY2tfZnJlZTsKIAogCWVycm9yID0gLUVBQ0NFUzsKLQlpZiAoaXBjcGVybXMoJnNtYS0+c2VtX3Blcm0sIGFsdGVyID8gU19JV1VHTyA6IFNfSVJVR08pKQorCWlmIChpcGNwZXJtcyhucywgJnNtYS0+c2VtX3Blcm0sIGFsdGVyID8gU19JV1VHTyA6IFNfSVJVR08pKQogCQlnb3RvIG91dF91bmxvY2tfZnJlZTsKIAogCWVycm9yID0gc2VjdXJpdHlfc2VtX3NlbW9wKHNtYSwgc29wcywgbnNvcHMsIGFsdGVyKTsKZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCA3ZDNiYjIyLi44NjQ0NDUyIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC02MjMsNyArNjIzLDggQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWlwY3AgPSBpcGNjdGxfcHJlX2Rvd24oJnNobV9pZHMobnMpLCBzaG1pZCwgY21kLCAmc2htaWQ2NC5zaG1fcGVybSwgMCk7CisJaXBjcCA9IGlwY2N0bF9wcmVfZG93bihucywgJnNobV9pZHMobnMpLCBzaG1pZCwgY21kLAorCQkJICAgICAgICZzaG1pZDY0LnNobV9wZXJtLCAwKTsKIAlpZiAoSVNfRVJSKGlwY3ApKQogCQlyZXR1cm4gUFRSX0VSUihpcGNwKTsKIApAQCAtNzM3LDcgKzczOCw3IEBACiAJCQlyZXN1bHQgPSAwOwogCQl9CiAJCWVyciA9IC1FQUNDRVM7Ci0JCWlmIChpcGNwZXJtcyAoJnNocC0+c2htX3Blcm0sIFNfSVJVR08pKQorCQlpZiAoaXBjcGVybXMobnMsICZzaHAtPnNobV9wZXJtLCBTX0lSVUdPKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJZXJyID0gc2VjdXJpdHlfc2htX3NobWN0bChzaHAsIGNtZCk7CiAJCWlmIChlcnIpCkBAIC03NzMsNyArNzc0LDcgQEAKIAogCQlhdWRpdF9pcGNfb2JqKCYoc2hwLT5zaG1fcGVybSkpOwogCi0JCWlmICghY2FwYWJsZShDQVBfSVBDX0xPQ0spKSB7CisJCWlmICghbnNfY2FwYWJsZShucy0+dXNlcl9ucywgQ0FQX0lQQ19MT0NLKSkgewogCQkJdWlkX3QgZXVpZCA9IGN1cnJlbnRfZXVpZCgpOwogCQkJZXJyID0gLUVQRVJNOwogCQkJaWYgKGV1aWQgIT0gc2hwLT5zaG1fcGVybS51aWQgJiYKQEAgLTg4OCw3ICs4ODksNyBAQAogCX0KIAogCWVyciA9IC1FQUNDRVM7Ci0JaWYgKGlwY3Blcm1zKCZzaHAtPnNobV9wZXJtLCBhY2NfbW9kZSkpCisJaWYgKGlwY3Blcm1zKG5zLCAmc2hwLT5zaG1fcGVybSwgYWNjX21vZGUpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAllcnIgPSBzZWN1cml0eV9zaG1fc2htYXQoc2hwLCBzaG1hZGRyLCBzaG1mbGcpOwpkaWZmIC0tZ2l0IGEvaXBjL3V0aWwuYyBiL2lwYy91dGlsLmMKaW5kZXggNjlhMGNjMS4uOGZkMWI4OSAxMDA2NDQKLS0tIGEvaXBjL3V0aWwuYworKysgYi9pcGMvdXRpbC5jCkBAIC0zMjksMTIgKzMyOSwxNCBAQAogICoKICAqCUl0IGlzIGNhbGxlZCB3aXRoIGlwY19pZHMucndfbXV0ZXggYW5kIGlwY3AtPmxvY2sgaGVsZC4KICAqLwotc3RhdGljIGludCBpcGNfY2hlY2tfcGVybXMoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHN0cnVjdCBpcGNfb3BzICpvcHMsCi0JCQlzdHJ1Y3QgaXBjX3BhcmFtcyAqcGFyYW1zKQorc3RhdGljIGludCBpcGNfY2hlY2tfcGVybXMoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLAorCQkJICAgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsCisJCQkgICBzdHJ1Y3QgaXBjX29wcyAqb3BzLAorCQkJICAgc3RydWN0IGlwY19wYXJhbXMgKnBhcmFtcykKIHsKIAlpbnQgZXJyOwogCi0JaWYgKGlwY3Blcm1zKGlwY3AsIHBhcmFtcy0+ZmxnKSkKKwlpZiAoaXBjcGVybXMobnMsIGlwY3AsIHBhcmFtcy0+ZmxnKSkKIAkJZXJyID0gLUVBQ0NFUzsKIAllbHNlIHsKIAkJZXJyID0gb3BzLT5hc3NvY2lhdGUoaXBjcCwgcGFyYW1zLT5mbGcpOwpAQCAtMzk2LDcgKzM5OCw3IEBACiAJCQkJICogaXBjX2NoZWNrX3Blcm1zIHJldHVybnMgdGhlIElQQyBpZCBvbgogCQkJCSAqIHN1Y2Nlc3MKIAkJCQkgKi8KLQkJCQllcnIgPSBpcGNfY2hlY2tfcGVybXMoaXBjcCwgb3BzLCBwYXJhbXMpOworCQkJCWVyciA9IGlwY19jaGVja19wZXJtcyhucywgaXBjcCwgb3BzLCBwYXJhbXMpOwogCQl9CiAJCWlwY191bmxvY2soaXBjcCk7CiAJfQpAQCAtNjEwLDEwICs2MTIsMTIgQEAKICAqCiAgKglDaGVjayB1c2VyLCBncm91cCwgb3RoZXIgcGVybWlzc2lvbnMgZm9yIGFjY2VzcwogICoJdG8gaXBjIHJlc291cmNlcy4gcmV0dXJuIDAgaWYgYWxsb3dlZAorICoKKyAqIAlAZmxhZyB3aWxsIG1vc3QgcHJvYmFibHkgYmUgMCBvciBTXy4uLlVHTyBmcm9tIDxsaW51eC9zdGF0Lmg+CiAgKi8KICAKLWludCBpcGNwZXJtcyAoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHNob3J0IGZsYWcpCi17CS8qIGZsYWcgd2lsbCBtb3N0IHByb2JhYmx5IGJlIDAgb3IgU18uLi5VR08gZnJvbSA8bGludXgvc3RhdC5oPiAqLworaW50IGlwY3Blcm1zKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHNob3J0IGZsYWcpCit7CiAJdWlkX3QgZXVpZCA9IGN1cnJlbnRfZXVpZCgpOwogCWludCByZXF1ZXN0ZWRfbW9kZSwgZ3JhbnRlZF9tb2RlOwogCkBAIC02MjcsNyArNjMxLDcgQEAKIAkJZ3JhbnRlZF9tb2RlID4+PSAzOwogCS8qIGlzIHRoZXJlIHNvbWUgYml0IHNldCBpbiByZXF1ZXN0ZWRfbW9kZSBidXQgbm90IGluIGdyYW50ZWRfbW9kZT8gKi8KIAlpZiAoKHJlcXVlc3RlZF9tb2RlICYgfmdyYW50ZWRfbW9kZSAmIDAwMDcpICYmIAotCSAgICAhY2FwYWJsZShDQVBfSVBDX09XTkVSKSkKKwkgICAgIW5zX2NhcGFibGUobnMtPnVzZXJfbnMsIENBUF9JUENfT1dORVIpKQogCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gc2VjdXJpdHlfaXBjX3Blcm1pc3Npb24oaXBjcCwgZmxhZyk7CkBAIC03NjUsNiArNzY5LDcgQEAKIAogLyoqCiAgKiBpcGNjdGxfcHJlX2Rvd24gLSByZXRyaWV2ZSBhbiBpcGMgYW5kIGNoZWNrIHBlcm1pc3Npb25zIGZvciBzb21lIElQQ19YWFggY21kCisgKiBAaWRzOiAgdGhlIGlwYyBuYW1lc3BhY2UKICAqIEBpZHM6ICB0aGUgdGFibGUgb2YgaWRzIHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBpcGMKICAqIEBpZDogICB0aGUgaWQgb2YgdGhlIGlwYyB0byByZXRyaWV2ZQogICogQGNtZDogIHRoZSBjbWQgdG8gY2hlY2sKQEAgLTc3OSw3ICs3ODQsOCBAQAogICogIC0gcmV0dXJucyB0aGUgaXBjIHdpdGggYm90aCBpcGMgYW5kIHJ3X211dGV4IGxvY2tzIGhlbGQgaW4gY2FzZSBvZiBzdWNjZXNzCiAgKiAgICBvciBhbiBlcnItY29kZSB3aXRob3V0IGFueSBsb2NrIGhlbGQgb3RoZXJ3aXNlLgogICovCi1zdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjY3RsX3ByZV9kb3duKHN0cnVjdCBpcGNfaWRzICppZHMsIGludCBpZCwgaW50IGNtZCwKK3N0cnVjdCBrZXJuX2lwY19wZXJtICppcGNjdGxfcHJlX2Rvd24oc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLAorCQkJCSAgICAgIHN0cnVjdCBpcGNfaWRzICppZHMsIGludCBpZCwgaW50IGNtZCwKIAkJCQkgICAgICBzdHJ1Y3QgaXBjNjRfcGVybSAqcGVybSwgaW50IGV4dHJhX3Blcm0pCiB7CiAJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3A7CkBAIC03OTksOCArODA1LDggQEAKIAkJCQkJIHBlcm0tPmdpZCwgcGVybS0+bW9kZSk7CiAKIAlldWlkID0gY3VycmVudF9ldWlkKCk7Ci0JaWYgKGV1aWQgPT0gaXBjcC0+Y3VpZCB8fAotCSAgICBldWlkID09IGlwY3AtPnVpZCAgfHwgY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwlpZiAoZXVpZCA9PSBpcGNwLT5jdWlkIHx8IGV1aWQgPT0gaXBjcC0+dWlkICB8fAorCSAgICBuc19jYXBhYmxlKG5zLT51c2VyX25zLCBDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIGlwY3A7CiAKIAllcnIgPSAtRVBFUk07CmRpZmYgLS1naXQgYS9pcGMvdXRpbC5oIGIvaXBjL3V0aWwuaAppbmRleCA3NjRiNTFhLi42ZjVjMjBiIDEwMDY0NAotLS0gYS9pcGMvdXRpbC5oCisrKyBiL2lwYy91dGlsLmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogdm9pZCBpcGNfcm1pZChzdHJ1Y3QgaXBjX2lkcyAqLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqKTsKIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBpcGNwIGxvY2tlZCAqLwotaW50IGlwY3Blcm1zKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCBzaG9ydCBmbGcpOworaW50IGlwY3Blcm1zKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHNob3J0IGZsZyk7CiAKIC8qIGZvciByYXJlLCBwb3RlbnRpYWxseSBodWdlIGFsbG9jYXRpb25zLgogICogYm90aCBmdW5jdGlvbiBjYW4gc2xlZXAKQEAgLTEyNiw3ICsxMjYsOCBAQAogdm9pZCBrZXJuZWxfdG9faXBjNjRfcGVybShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaW4sIHN0cnVjdCBpcGM2NF9wZXJtICpvdXQpOwogdm9pZCBpcGM2NF9wZXJtX3RvX2lwY19wZXJtKHN0cnVjdCBpcGM2NF9wZXJtICppbiwgc3RydWN0IGlwY19wZXJtICpvdXQpOwogdm9pZCBpcGNfdXBkYXRlX3Blcm0oc3RydWN0IGlwYzY0X3Blcm0gKmluLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqb3V0KTsKLXN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNjdGxfcHJlX2Rvd24oc3RydWN0IGlwY19pZHMgKmlkcywgaW50IGlkLCBpbnQgY21kLAorc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY2N0bF9wcmVfZG93bihzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsCisJCQkJICAgICAgc3RydWN0IGlwY19pZHMgKmlkcywgaW50IGlkLCBpbnQgY21kLAogCQkJCSAgICAgIHN0cnVjdCBpcGM2NF9wZXJtICpwZXJtLCBpbnQgZXh0cmFfcGVybSk7CiAKICNpZm5kZWYgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCAzNTNkM2ZlLi44NWNiZmIzIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC0xMDcsNiArMTA3LDcgQEAKIG9iai0kKENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQpICs9IGh3X2JyZWFrcG9pbnQubwogb2JqLSQoQ09ORklHX1VTRVJfUkVUVVJOX05PVElGSUVSKSArPSB1c2VyLXJldHVybi1ub3RpZmllci5vCiBvYmotJChDT05GSUdfUEFEQVRBKSArPSBwYWRhdGEubworb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApICs9IGNyYXNoX2R1bXAubwogCiBpZm5lcSAoJChDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSKSx5KQogIyBBY2NvcmRpbmcgdG8gQWxhbiBNb2RyYSA8YWxhbkBsaW51eGNhcmUuY29tLmF1PiwgdGhlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGlzCmRpZmYgLS1naXQgYS9rZXJuZWwvYm91bmRzLmMgYi9rZXJuZWwvYm91bmRzLmMKaW5kZXggOThhNTFmMi4uMGM5Yjg2MiAxMDA2NDQKLS0tIGEva2VybmVsL2JvdW5kcy5jCisrKyBiL2tlcm5lbC9ib3VuZHMuYwpAQCAtOSwxMSArOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlX2Nncm91cC5oPgogCiB2b2lkIGZvbyh2b2lkKQogewogCS8qIFRoZSBlbnVtIGNvbnN0YW50cyB0byBwdXQgaW50byBpbmNsdWRlL2dlbmVyYXRlZC9ib3VuZHMuaCAqLwogCURFRklORShOUl9QQUdFRkxBR1MsIF9fTlJfUEFHRUZMQUdTKTsKIAlERUZJTkUoTUFYX05SX1pPTkVTLCBfX01BWF9OUl9aT05FUyk7CisJREVGSU5FKE5SX1BDR19GTEFHUywgX19OUl9QQ0dfRkxBR1MpOwogCS8qIEVuZCBvZiBjb25zdGFudHMgKi8KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCmluZGV4IDllOTM4NWYuLmJmMGM3MzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jYXBhYmlsaXR5LmMKKysrIGIva2VybmVsL2NhcGFiaWxpdHkuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAvKgpAQCAtMjkwLDYgKzI5MSw2MCBAQAogfQogCiAvKioKKyAqIGhhc19jYXBhYmlsaXR5IC0gRG9lcyBhIHRhc2sgaGF2ZSBhIGNhcGFiaWxpdHkgaW4gaW5pdF91c2VyX25zCisgKiBAdDogVGhlIHRhc2sgaW4gcXVlc3Rpb24KKyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IHRvIGJlIHRlc3RlZCBmb3IKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRhc2sgaGFzIHRoZSBnaXZlbiBzdXBlcmlvciBjYXBhYmlsaXR5CisgKiBjdXJyZW50bHkgaW4gZWZmZWN0IHRvIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLCBmYWxzZSBpZiBub3QuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgc2V0IFBGX1NVUEVSUFJJViBvbiB0aGUgdGFzay4KKyAqLworYm9vbCBoYXNfY2FwYWJpbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApCit7CisJaW50IHJldCA9IHNlY3VyaXR5X3JlYWxfY2FwYWJsZSh0LCAmaW5pdF91c2VyX25zLCBjYXApOworCisJcmV0dXJuIChyZXQgPT0gMCk7Cit9CisKKy8qKgorICogaGFzX2NhcGFiaWxpdHkgLSBEb2VzIGEgdGFzayBoYXZlIGEgY2FwYWJpbGl0eSBpbiBhIHNwZWNpZmljIHVzZXIgbnMKKyAqIEB0OiBUaGUgdGFzayBpbiBxdWVzdGlvbgorICogQG5zOiB0YXJnZXQgdXNlciBuYW1lc3BhY2UKKyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IHRvIGJlIHRlc3RlZCBmb3IKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRhc2sgaGFzIHRoZSBnaXZlbiBzdXBlcmlvciBjYXBhYmlsaXR5CisgKiBjdXJyZW50bHkgaW4gZWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQgdXNlciBuYW1lc3BhY2UsIGZhbHNlIGlmIG5vdC4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBzZXQgUEZfU1VQRVJQUklWIG9uIHRoZSB0YXNrLgorICovCitib29sIGhhc19uc19jYXBhYmlsaXR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKKwkJICAgICAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApCit7CisJaW50IHJldCA9IHNlY3VyaXR5X3JlYWxfY2FwYWJsZSh0LCBucywgY2FwKTsKKworCXJldHVybiAocmV0ID09IDApOworfQorCisvKioKKyAqIGhhc19jYXBhYmlsaXR5X25vYXVkaXQgLSBEb2VzIGEgdGFzayBoYXZlIGEgY2FwYWJpbGl0eSAodW5hdWRpdGVkKQorICogQHQ6IFRoZSB0YXNrIGluIHF1ZXN0aW9uCisgKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSB0byBiZSB0ZXN0ZWQgZm9yCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCB0YXNrIGhhcyB0aGUgZ2l2ZW4gc3VwZXJpb3IgY2FwYWJpbGl0eQorICogY3VycmVudGx5IGluIGVmZmVjdCB0byBpbml0X3VzZXJfbnMsIGZhbHNlIGlmIG5vdC4gIERvbid0IHdyaXRlIGFuCisgKiBhdWRpdCBtZXNzYWdlIGZvciB0aGUgY2hlY2suCisgKgorICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgc2V0IFBGX1NVUEVSUFJJViBvbiB0aGUgdGFzay4KKyAqLworYm9vbCBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNhcCkKK3sKKwlpbnQgcmV0ID0gc2VjdXJpdHlfcmVhbF9jYXBhYmxlX25vYXVkaXQodCwgJmluaXRfdXNlcl9ucywgY2FwKTsKKworCXJldHVybiAocmV0ID09IDApOworfQorCisvKioKICAqIGNhcGFibGUgLSBEZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgdGFzayBoYXMgYSBzdXBlcmlvciBjYXBhYmlsaXR5IGluIGVmZmVjdAogICogQGNhcDogVGhlIGNhcGFiaWxpdHkgdG8gYmUgdGVzdGVkIGZvcgogICoKQEAgLTI5OSwxNyArMzU0LDQ4IEBACiAgKiBUaGlzIHNldHMgUEZfU1VQRVJQUklWIG9uIHRoZSB0YXNrIGlmIHRoZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZSBvbiB0aGUKICAqIGFzc3VtcHRpb24gdGhhdCBpdCdzIGFib3V0IHRvIGJlIHVzZWQuCiAgKi8KLWludCBjYXBhYmxlKGludCBjYXApCitib29sIGNhcGFibGUoaW50IGNhcCkKK3sKKwlyZXR1cm4gbnNfY2FwYWJsZSgmaW5pdF91c2VyX25zLCBjYXApOworfQorRVhQT1JUX1NZTUJPTChjYXBhYmxlKTsKKworLyoqCisgKiBuc19jYXBhYmxlIC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3IgY2FwYWJpbGl0eSBpbiBlZmZlY3QKKyAqIEBuczogIFRoZSB1c2VybmFtZXNwYWNlIHdlIHdhbnQgdGhlIGNhcGFiaWxpdHkgaW4KKyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IHRvIGJlIHRlc3RlZCBmb3IKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyB0aGUgZ2l2ZW4gc3VwZXJpb3IgY2FwYWJpbGl0eSBjdXJyZW50bHkKKyAqIGF2YWlsYWJsZSBmb3IgdXNlLCBmYWxzZSBpZiBub3QuCisgKgorICogVGhpcyBzZXRzIFBGX1NVUEVSUFJJViBvbiB0aGUgdGFzayBpZiB0aGUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUgb24gdGhlCisgKiBhc3N1bXB0aW9uIHRoYXQgaXQncyBhYm91dCB0byBiZSB1c2VkLgorICovCitib29sIG5zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCkKIHsKIAlpZiAodW5saWtlbHkoIWNhcF92YWxpZChjYXApKSkgewogCQlwcmludGsoS0VSTl9DUklUICJjYXBhYmxlKCkgY2FsbGVkIHdpdGggaW52YWxpZCBjYXA9JXVcbiIsIGNhcCk7CiAJCUJVRygpOwogCX0KIAotCWlmIChzZWN1cml0eV9jYXBhYmxlKGN1cnJlbnRfY3JlZCgpLCBjYXApID09IDApIHsKKwlpZiAoc2VjdXJpdHlfY2FwYWJsZShucywgY3VycmVudF9jcmVkKCksIGNhcCkgPT0gMCkgewogCQljdXJyZW50LT5mbGFncyB8PSBQRl9TVVBFUlBSSVY7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogfQotRVhQT1JUX1NZTUJPTChjYXBhYmxlKTsKK0VYUE9SVF9TWU1CT0wobnNfY2FwYWJsZSk7CisKKy8qKgorICogdGFza19uc19jYXBhYmxlIC0gRGV0ZXJtaW5lIHdoZXRoZXIgY3VycmVudCB0YXNrIGhhcyBhIHN1cGVyaW9yCisgKiBjYXBhYmlsaXR5IHRhcmdldGVkIGF0IGEgc3BlY2lmaWMgdGFzaydzIHVzZXIgbmFtZXNwYWNlLgorICogQHQ6IFRoZSB0YXNrIHdob3NlIHVzZXIgbmFtZXNwYWNlIGlzIHRhcmdldGVkLgorICogQGNhcDogVGhlIGNhcGFiaWxpdHkgaW4gcXVlc3Rpb24uCisgKgorICogIFJldHVybiB0cnVlIGlmIGl0IGRvZXMsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0YXNrX25zX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKQoreworCXJldHVybiBuc19jYXBhYmxlKHRhc2tfY3JlZF94eHgodCwgdXNlciktPnVzZXJfbnMsIGNhcCk7Cit9CitFWFBPUlRfU1lNQk9MKHRhc2tfbnNfY2FwYWJsZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggOTUzNjJkMS4uZTMxYjIyMCAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtMTgxMywxMCArMTgxMyw4IEBACiAKIAkvKiBVcGRhdGUgdGhlIGNzc19zZXQgbGlua2VkIGxpc3RzIGlmIHdlJ3JlIHVzaW5nIHRoZW0gKi8KIAl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmdHNrLT5jZ19saXN0KSkgewotCQlsaXN0X2RlbCgmdHNrLT5jZ19saXN0KTsKLQkJbGlzdF9hZGQoJnRzay0+Y2dfbGlzdCwgJm5ld2NnLT50YXNrcyk7Ci0JfQorCWlmICghbGlzdF9lbXB0eSgmdHNrLT5jZ19saXN0KSkKKwkJbGlzdF9tb3ZlKCZ0c2stPmNnX2xpc3QsICZuZXdjZy0+dGFza3MpOwogCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKIAogCWZvcl9lYWNoX3N1YnN5cyhyb290LCBzcykgewpAQCAtMzY1NSwxMiArMzY1MywxMiBAQAogCXNwaW5fbG9jaygmcmVsZWFzZV9saXN0X2xvY2spOwogCXNldF9iaXQoQ0dSUF9SRU1PVkVELCAmY2dycC0+ZmxhZ3MpOwogCWlmICghbGlzdF9lbXB0eSgmY2dycC0+cmVsZWFzZV9saXN0KSkKLQkJbGlzdF9kZWwoJmNncnAtPnJlbGVhc2VfbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmNncnAtPnJlbGVhc2VfbGlzdCk7CiAJc3Bpbl91bmxvY2soJnJlbGVhc2VfbGlzdF9sb2NrKTsKIAogCWNncm91cF9sb2NrX2hpZXJhcmNoeShjZ3JwLT5yb290KTsKIAkvKiBkZWxldGUgdGhpcyBjZ3JvdXAgZnJvbSBwYXJlbnQtPmNoaWxkcmVuICovCi0JbGlzdF9kZWwoJmNncnAtPnNpYmxpbmcpOworCWxpc3RfZGVsX2luaXQoJmNncnAtPnNpYmxpbmcpOwogCWNncm91cF91bmxvY2tfaGllcmFyY2h5KGNncnAtPnJvb3QpOwogCiAJZCA9IGRnZXQoY2dycC0+ZGVudHJ5KTsKQEAgLTM4NzksNyArMzg3Nyw3IEBACiAJc3Vic3lzW3NzLT5zdWJzeXNfaWRdID0gTlVMTDsKIAogCS8qIHJlbW92ZSBzdWJzeXN0ZW0gZnJvbSByb290bm9kZSdzIGxpc3Qgb2Ygc3Vic3lzdGVtcyAqLwotCWxpc3RfZGVsKCZzcy0+c2libGluZyk7CisJbGlzdF9kZWxfaW5pdCgmc3MtPnNpYmxpbmcpOwogCiAJLyoKIAkgKiBkaXNlbnRhbmdsZSB0aGUgY3NzIGZyb20gYWxsIGNzc19zZXRzIGF0dGFjaGVkIHRvIHRoZSBkdW1teXRvcC4gYXMKQEAgLTQyNDEsNyArNDIzOSw3IEBACiAJaWYgKCFsaXN0X2VtcHR5KCZ0c2stPmNnX2xpc3QpKSB7CiAJCXdyaXRlX2xvY2soJmNzc19zZXRfbG9jayk7CiAJCWlmICghbGlzdF9lbXB0eSgmdHNrLT5jZ19saXN0KSkKLQkJCWxpc3RfZGVsKCZ0c2stPmNnX2xpc3QpOworCQkJbGlzdF9kZWxfaW5pdCgmdHNrLT5jZ19saXN0KTsKIAkJd3JpdGVfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDE1NmNjNTUuLmM5NWZjNGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTE2MCw3ICsxNjAsNiBAQAogewogCUJVR19PTihjcHVfbm90aWZ5KHZhbCwgdikpOwogfQotCiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2NwdV9ub3RpZmllcik7CiAKIHZvaWQgX19yZWYgdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKQEAgLTIwNSw3ICsyMDQsNiBAQAogCQlyZXR1cm4gZXJyOwogCiAJY3B1X25vdGlmeShDUFVfRFlJTkcgfCBwYXJhbS0+bW9kLCBwYXJhbS0+aGNwdSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI3LDYgKzIyNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJY3B1X2hvdHBsdWdfYmVnaW4oKTsKKwogCWVyciA9IF9fY3B1X25vdGlmeShDUFVfRE9XTl9QUkVQQVJFIHwgbW9kLCBoY3B1LCAtMSwgJm5yX2NhbGxzKTsKIAlpZiAoZXJyKSB7CiAJCW5yX2NhbGxzLS07CkBAIC0zMDQsNyArMzAzLDcgQEAKIAlyZXQgPSBfX2NwdV9ub3RpZnkoQ1BVX1VQX1BSRVBBUkUgfCBtb2QsIGhjcHUsIC0xLCAmbnJfY2FsbHMpOwogCWlmIChyZXQpIHsKIAkJbnJfY2FsbHMtLTsKLQkJcHJpbnRrKCIlczogYXR0ZW1wdCB0byBicmluZyB1cCBDUFUgJXUgZmFpbGVkXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYXR0ZW1wdCB0byBicmluZyB1cCBDUFUgJXUgZmFpbGVkXG4iLAogCQkJCV9fZnVuY19fLCBjcHUpOwogCQlnb3RvIG91dF9ub3RpZnk7CiAJfQpAQCAtNDUwLDE0ICs0NDksMTQgQEAKIAlpZiAoY3B1bWFza19lbXB0eShmcm96ZW5fY3B1cykpCiAJCWdvdG8gb3V0OwogCi0JcHJpbnRrKCJFbmFibGluZyBub24tYm9vdCBDUFVzIC4uLlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgbm9uLWJvb3QgQ1BVcyAuLi5cbiIpOwogCiAJYXJjaF9lbmFibGVfbm9uYm9vdF9jcHVzX2JlZ2luKCk7CiAKIAlmb3JfZWFjaF9jcHUoY3B1LCBmcm96ZW5fY3B1cykgewogCQllcnJvciA9IF9jcHVfdXAoY3B1LCAxKTsKIAkJaWYgKCFlcnJvcikgewotCQkJcHJpbnRrKCJDUFUlZCBpcyB1cFxuIiwgY3B1KTsKKwkJCXByaW50ayhLRVJOX0lORk8gIkNQVSVkIGlzIHVwXG4iLCBjcHUpOwogCQkJY29udGludWU7CiAJCX0KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3IgdGFraW5nIENQVSVkIHVwOiAlZFxuIiwgY3B1LCBlcnJvcik7CkBAIC01MDksNyArNTA4LDcgQEAKICAqLwogCiAvKiBjcHVfYml0X2JpdG1hcFswXSBpcyBlbXB0eSAtIHNvIHdlIGNhbiBiYWNrIGludG8gaXQgKi8KLSNkZWZpbmUgTUFTS19ERUNMQVJFXzEoeCkJW3grMV1bMF0gPSAxVUwgPDwgKHgpCisjZGVmaW5lIE1BU0tfREVDTEFSRV8xKHgpCVt4KzFdWzBdID0gKDFVTCA8PCAoeCkpCiAjZGVmaW5lIE1BU0tfREVDTEFSRV8yKHgpCU1BU0tfREVDTEFSRV8xKHgpLCBNQVNLX0RFQ0xBUkVfMSh4KzEpCiAjZGVmaW5lIE1BU0tfREVDTEFSRV80KHgpCU1BU0tfREVDTEFSRV8yKHgpLCBNQVNLX0RFQ0xBUkVfMih4KzIpCiAjZGVmaW5lIE1BU0tfREVDTEFSRV84KHgpCU1BU0tfREVDTEFSRV80KHgpLCBNQVNLX0RFQ0xBUkVfNCh4KzQpCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggZTkyZTk4MS4uMzNlZWUxNiAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTAxNSwxNyArMTAxNSwxMiBAQAogCXN0cnVjdCBjcHVzZXQgKmNzOwogCWludCBtaWdyYXRlOwogCWNvbnN0IG5vZGVtYXNrX3QgKm9sZG1lbSA9IHNjYW4tPmRhdGE7Ci0JTk9ERU1BU0tfQUxMT0Mobm9kZW1hc2tfdCwgbmV3bWVtcywgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIW5ld21lbXMpCi0JCXJldHVybjsKKwlzdGF0aWMgbm9kZW1hc2tfdCBuZXdtZW1zOwkvKiBwcm90ZWN0ZWQgYnkgY2dyb3VwX211dGV4ICovCiAKIAljcyA9IGNncm91cF9jcyhzY2FuLT5jZyk7Ci0JZ3VhcmFudGVlX29ubGluZV9tZW1zKGNzLCBuZXdtZW1zKTsKKwlndWFyYW50ZWVfb25saW5lX21lbXMoY3MsICZuZXdtZW1zKTsKIAotCWNwdXNldF9jaGFuZ2VfdGFza19ub2RlbWFzayhwLCBuZXdtZW1zKTsKLQotCU5PREVNQVNLX0ZSRUUobmV3bWVtcyk7CisJY3B1c2V0X2NoYW5nZV90YXNrX25vZGVtYXNrKHAsICZuZXdtZW1zKTsKIAogCW1tID0gZ2V0X3Rhc2tfbW0ocCk7CiAJaWYgKCFtbSkKQEAgLTE0MzgsNDQgKzE0MzMsMzUgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgY3B1c2V0ICpjcyA9IGNncm91cF9jcyhjb250KTsKIAlzdHJ1Y3QgY3B1c2V0ICpvbGRjcyA9IGNncm91cF9jcyhvbGRjb250KTsKLQlOT0RFTUFTS19BTExPQyhub2RlbWFza190LCBmcm9tLCBHRlBfS0VSTkVMKTsKLQlOT0RFTUFTS19BTExPQyhub2RlbWFza190LCB0bywgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoZnJvbSA9PSBOVUxMIHx8IHRvID09IE5VTEwpCi0JCWdvdG8gYWxsb2NfZmFpbDsKKwlzdGF0aWMgbm9kZW1hc2tfdCB0bzsJCS8qIHByb3RlY3RlZCBieSBjZ3JvdXBfbXV0ZXggKi8KIAogCWlmIChjcyA9PSAmdG9wX2NwdXNldCkgewogCQljcHVtYXNrX2NvcHkoY3B1c19hdHRhY2gsIGNwdV9wb3NzaWJsZV9tYXNrKTsKIAl9IGVsc2UgewogCQlndWFyYW50ZWVfb25saW5lX2NwdXMoY3MsIGNwdXNfYXR0YWNoKTsKIAl9Ci0JZ3VhcmFudGVlX29ubGluZV9tZW1zKGNzLCB0byk7CisJZ3VhcmFudGVlX29ubGluZV9tZW1zKGNzLCAmdG8pOwogCiAJLyogZG8gcGVyLXRhc2sgbWlncmF0aW9uIHN0dWZmIHBvc3NpYmx5IGZvciBlYWNoIGluIHRoZSB0aHJlYWRncm91cCAqLwotCWNwdXNldF9hdHRhY2hfdGFzayh0c2ssIHRvLCBjcyk7CisJY3B1c2V0X2F0dGFjaF90YXNrKHRzaywgJnRvLCBjcyk7CiAJaWYgKHRocmVhZGdyb3VwKSB7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqYzsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjLCAmdHNrLT50aHJlYWRfZ3JvdXAsIHRocmVhZF9ncm91cCkgewotCQkJY3B1c2V0X2F0dGFjaF90YXNrKGMsIHRvLCBjcyk7CisJCQljcHVzZXRfYXR0YWNoX3Rhc2soYywgJnRvLCBjcyk7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCiAJLyogY2hhbmdlIG1tOyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSBldmVuIGlmIHRocmVhZGdyb3VwICovCi0JKmZyb20gPSBvbGRjcy0+bWVtc19hbGxvd2VkOwotCSp0byA9IGNzLT5tZW1zX2FsbG93ZWQ7CisJdG8gPSBjcy0+bWVtc19hbGxvd2VkOwogCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKIAlpZiAobW0pIHsKLQkJbXBvbF9yZWJpbmRfbW0obW0sIHRvKTsKKwkJbXBvbF9yZWJpbmRfbW0obW0sICZ0byk7CiAJCWlmIChpc19tZW1vcnlfbWlncmF0ZShjcykpCi0JCQljcHVzZXRfbWlncmF0ZV9tbShtbSwgZnJvbSwgdG8pOworCQkJY3B1c2V0X21pZ3JhdGVfbW0obW0sICZvbGRjcy0+bWVtc19hbGxvd2VkLCAmdG8pOwogCQltbXB1dChtbSk7CiAJfQotCi1hbGxvY19mYWlsOgotCU5PREVNQVNLX0ZSRUUoZnJvbSk7Ci0JTk9ERU1BU0tfRlJFRSh0byk7CiB9CiAKIC8qIFRoZSB2YXJpb3VzIHR5cGVzIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiBhIGNwdXNldCBmaWxlIHN5c3RlbSAqLwpAQCAtMTYxMCwzNCArMTU5NiwyNiBAQAogICogYWNyb3NzIGEgcGFnZSBmYXVsdC4KICAqLwogCi1zdGF0aWMgaW50IGNwdXNldF9zcHJpbnRmX2NwdWxpc3QoY2hhciAqcGFnZSwgc3RydWN0IGNwdXNldCAqY3MpCitzdGF0aWMgc2l6ZV90IGNwdXNldF9zcHJpbnRmX2NwdWxpc3QoY2hhciAqcGFnZSwgc3RydWN0IGNwdXNldCAqY3MpCiB7Ci0JaW50IHJldDsKKwlzaXplX3QgY291bnQ7CiAKIAltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7Ci0JcmV0ID0gY3B1bGlzdF9zY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCBjcy0+Y3B1c19hbGxvd2VkKTsKKwljb3VudCA9IGNwdWxpc3Rfc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgY3MtPmNwdXNfYWxsb3dlZCk7CiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCBjcHVzZXRfc3ByaW50Zl9tZW1saXN0KGNoYXIgKnBhZ2UsIHN0cnVjdCBjcHVzZXQgKmNzKQorc3RhdGljIHNpemVfdCBjcHVzZXRfc3ByaW50Zl9tZW1saXN0KGNoYXIgKnBhZ2UsIHN0cnVjdCBjcHVzZXQgKmNzKQogewotCU5PREVNQVNLX0FMTE9DKG5vZGVtYXNrX3QsIG1hc2ssIEdGUF9LRVJORUwpOwotCWludCByZXR2YWw7Ci0KLQlpZiAobWFzayA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlzaXplX3QgY291bnQ7CiAKIAltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7Ci0JKm1hc2sgPSBjcy0+bWVtc19hbGxvd2VkOworCWNvdW50ID0gbm9kZWxpc3Rfc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgY3MtPm1lbXNfYWxsb3dlZCk7CiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKLQlyZXR2YWwgPSBub2RlbGlzdF9zY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAqbWFzayk7Ci0KLQlOT0RFTUFTS19GUkVFKG1hc2spOwotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGNwdXNldF9jb21tb25fZmlsZV9yZWFkKHN0cnVjdCBjZ3JvdXAgKmNvbnQsCkBAIC0xODYyLDggKzE4NDAsMTAgQEAKIAljcyA9IGNncm91cF9jcyhjZ3JvdXApOwogCXBhcmVudF9jcyA9IGNncm91cF9jcyhwYXJlbnQpOwogCisJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCWNzLT5tZW1zX2FsbG93ZWQgPSBwYXJlbnRfY3MtPm1lbXNfYWxsb3dlZDsKIAljcHVtYXNrX2NvcHkoY3MtPmNwdXNfYWxsb3dlZCwgcGFyZW50X2NzLT5jcHVzX2FsbG93ZWQpOworCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCXJldHVybjsKIH0KIApAQCAtMjA2NiwxMCArMjA0Niw3IEBACiAJc3RydWN0IGNwdXNldCAqY3A7CS8qIHNjYW5zIGNwdXNldHMgYmVpbmcgdXBkYXRlZCAqLwogCXN0cnVjdCBjcHVzZXQgKmNoaWxkOwkvKiBzY2FucyBjaGlsZCBjcHVzZXRzIG9mIGNwICovCiAJc3RydWN0IGNncm91cCAqY29udDsKLQlOT0RFTUFTS19BTExPQyhub2RlbWFza190LCBvbGRtZW1zLCBHRlBfS0VSTkVMKTsKLQotCWlmIChvbGRtZW1zID09IE5VTEwpCi0JCXJldHVybjsKKwlzdGF0aWMgbm9kZW1hc2tfdCBvbGRtZW1zOwkvKiBwcm90ZWN0ZWQgYnkgY2dyb3VwX211dGV4ICovCiAKIAlsaXN0X2FkZF90YWlsKChzdHJ1Y3QgbGlzdF9oZWFkICopJnJvb3QtPnN0YWNrX2xpc3QsICZxdWV1ZSk7CiAKQEAgLTIwODYsNyArMjA2Myw3IEBACiAJCSAgICBub2Rlc19zdWJzZXQoY3AtPm1lbXNfYWxsb3dlZCwgbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0pKQogCQkJY29udGludWU7CiAKLQkJKm9sZG1lbXMgPSBjcC0+bWVtc19hbGxvd2VkOworCQlvbGRtZW1zID0gY3AtPm1lbXNfYWxsb3dlZDsKIAogCQkvKiBSZW1vdmUgb2ZmbGluZSBjcHVzIGFuZCBtZW1zIGZyb20gdGhpcyBjcHVzZXQuICovCiAJCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKQEAgLTIxMDIsMTAgKzIwNzksOSBAQAogCQkJcmVtb3ZlX3Rhc2tzX2luX2VtcHR5X2NwdXNldChjcCk7CiAJCWVsc2UgewogCQkJdXBkYXRlX3Rhc2tzX2NwdW1hc2soY3AsIE5VTEwpOwotCQkJdXBkYXRlX3Rhc2tzX25vZGVtYXNrKGNwLCBvbGRtZW1zLCBOVUxMKTsKKwkJCXVwZGF0ZV90YXNrc19ub2RlbWFzayhjcCwgJm9sZG1lbXMsIE5VTEwpOwogCQl9CiAJfQotCU5PREVNQVNLX0ZSRUUob2xkbWVtcyk7CiB9CiAKIC8qCkBAIC0yMTQ3LDE5ICsyMTIzLDE2IEBACiBzdGF0aWMgaW50IGNwdXNldF90cmFja19vbmxpbmVfbm9kZXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCiB7Ci0JTk9ERU1BU0tfQUxMT0Mobm9kZW1hc2tfdCwgb2xkbWVtcywgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAob2xkbWVtcyA9PSBOVUxMKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJc3RhdGljIG5vZGVtYXNrX3Qgb2xkbWVtczsJLyogcHJvdGVjdGVkIGJ5IGNncm91cF9tdXRleCAqLwogCiAJY2dyb3VwX2xvY2soKTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgTUVNX09OTElORToKLQkJKm9sZG1lbXMgPSB0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZDsKKwkJb2xkbWVtcyA9IHRvcF9jcHVzZXQubWVtc19hbGxvd2VkOwogCQltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJCXRvcF9jcHVzZXQubWVtc19hbGxvd2VkID0gbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV07CiAJCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCQl1cGRhdGVfdGFza3Nfbm9kZW1hc2soJnRvcF9jcHVzZXQsIG9sZG1lbXMsIE5VTEwpOworCQl1cGRhdGVfdGFza3Nfbm9kZW1hc2soJnRvcF9jcHVzZXQsICZvbGRtZW1zLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBNRU1fT0ZGTElORToKIAkJLyoKQEAgLTIxNzMsNyArMjE0Niw2IEBACiAJfQogCWNncm91cF91bmxvY2soKTsKIAotCU5PREVNQVNLX0ZSRUUob2xkbWVtcyk7CiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2NyYXNoX2R1bXAuYyBiL2tlcm5lbC9jcmFzaF9kdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4NTY5MAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9jcmFzaF9kdW1wLmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworLyoKKyAqIElmIHdlIGhhdmUgYm9vdGVkIGR1ZSB0byBhIGNyYXNoLCBtYXhfcGZuIHdpbGwgYmUgYSB2ZXJ5IGxvdyB2YWx1ZS4gV2UgbmVlZAorICogdG8ga25vdyB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IHRoZSBwcmV2aW91cyBrZXJuZWwgdXNlZC4KKyAqLwordW5zaWduZWQgbG9uZyBzYXZlZF9tYXhfcGZuOworCisvKgorICogc3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UKKyAqCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlIHB1dAorICogaXQgdW5kZXIgQ09ORklHX0NSQVNIX0RVTVAgYW5kIG5vdCBDT05GSUdfUFJPQ19WTUNPUkUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCisvKgorICogZWxmY29yZWhkcj0gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBlbGYgY29yZSBoZWFkZXIgc3RvcmVkIGJ5IHRoZSBjcmFzaGVkCisgKiBrZXJuZWwuIFRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkIGJ5IGtleGVjIGxvYWRlciB0byB0aGUgY2FwdHVyZSBrZXJuZWwuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2VsZmNvcmVoZHIoY2hhciAqYXJnKQoreworCWNoYXIgKmVuZDsKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxmY29yZWhkcl9hZGRyID0gbWVtcGFyc2UoYXJnLCAmZW5kKTsKKwlyZXR1cm4gZW5kID4gYXJnID8gMCA6IC1FSU5WQUw7Cit9CitlYXJseV9wYXJhbSgiZWxmY29yZWhkciIsIHNldHVwX2VsZmNvcmVoZHIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NyZWQuYyBiL2tlcm5lbC9jcmVkLmMKaW5kZXggMjM0M2MxMzIuLjU1NTdiNTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcmVkLmMKKysrIGIva2VybmVsL2NyZWQuYwpAQCAtNzQxLDYgKzc0MSwxMiBAQAogfQogRVhQT1JUX1NZTUJPTChzZXRfY3JlYXRlX2ZpbGVzX2FzKTsKIAorc3RydWN0IHVzZXJfbmFtZXNwYWNlICpjdXJyZW50X3VzZXJfbnModm9pZCkKK3sKKwlyZXR1cm4gX2N1cnJlbnRfdXNlcl9ucygpOworfQorRVhQT1JUX1NZTUJPTChjdXJyZW50X3VzZXJfbnMpOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCiAKIGJvb2wgY3JlZHNfYXJlX2ludmFsaWQoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAwNWI5MmM0Li40NTdmZmYyIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KQEAgLTEwOSwyMCArMTEwLDI1IEBACiB9CiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfVEFTS19TVFJVQ1RfQUxMT0NBVE9SCi0jIGRlZmluZSBhbGxvY190YXNrX3N0cnVjdCgpCWttZW1fY2FjaGVfYWxsb2ModGFza19zdHJ1Y3RfY2FjaGVwLCBHRlBfS0VSTkVMKQotIyBkZWZpbmUgZnJlZV90YXNrX3N0cnVjdCh0c2spCWttZW1fY2FjaGVfZnJlZSh0YXNrX3N0cnVjdF9jYWNoZXAsICh0c2spKQorIyBkZWZpbmUgYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShub2RlKQkJXAorCQlrbWVtX2NhY2hlX2FsbG9jX25vZGUodGFza19zdHJ1Y3RfY2FjaGVwLCBHRlBfS0VSTkVMLCBub2RlKQorIyBkZWZpbmUgZnJlZV90YXNrX3N0cnVjdCh0c2spCQkJXAorCQlrbWVtX2NhY2hlX2ZyZWUodGFza19zdHJ1Y3RfY2FjaGVwLCAodHNrKSkKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza19zdHJ1Y3RfY2FjaGVwOwogI2VuZGlmCiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mb19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQkJICBpbnQgbm9kZSkKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKIAlnZnBfdCBtYXNrID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk87CiAjZWxzZQogCWdmcF90IG1hc2sgPSBHRlBfS0VSTkVMOwogI2VuZGlmCi0JcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKilfX2dldF9mcmVlX3BhZ2VzKG1hc2ssIFRIUkVBRF9TSVpFX09SREVSKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgbWFzaywgVEhSRUFEX1NJWkVfT1JERVIpOworCisJcmV0dXJuIHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQpAQCAtMjQ5LDE2ICsyNTUsMTYgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwogCXVuc2lnbmVkIGxvbmcgKnN0YWNrZW5kOwotCisJaW50IG5vZGUgPSB0c2tfZm9ya19nZXRfbm9kZShvcmlnKTsKIAlpbnQgZXJyOwogCiAJcHJlcGFyZV90b19jb3B5KG9yaWcpOwogCi0JdHNrID0gYWxsb2NfdGFza19zdHJ1Y3QoKTsKKwl0c2sgPSBhbGxvY190YXNrX3N0cnVjdF9ub2RlKG5vZGUpOwogCWlmICghdHNrKQogCQlyZXR1cm4gTlVMTDsKIAotCXRpID0gYWxsb2NfdGhyZWFkX2luZm8odHNrKTsKKwl0aSA9IGFsbG9jX3RocmVhZF9pbmZvX25vZGUodHNrLCBub2RlKTsKIAlpZiAoIXRpKSB7CiAJCWZyZWVfdGFza19zdHJ1Y3QodHNrKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMTgxLDEyICsxMTg3LDYgQEAKIAkJcGlkID0gYWxsb2NfcGlkKHAtPm5zcHJveHktPnBpZF9ucyk7CiAJCWlmICghcGlkKQogCQkJZ290byBiYWRfZm9ya19jbGVhbnVwX2lvOwotCi0JCWlmIChjbG9uZV9mbGFncyAmIENMT05FX05FV1BJRCkgewotCQkJcmV0dmFsID0gcGlkX25zX3ByZXBhcmVfcHJvYyhwLT5uc3Byb3h5LT5waWRfbnMpOwotCQkJaWYgKHJldHZhbCA8IDApCi0JCQkJZ290byBiYWRfZm9ya19mcmVlX3BpZDsKLQkJfQogCX0KIAogCXAtPnBpZCA9IHBpZF9ucihwaWQpOwpAQCAtMTI5MCw3ICsxMjkwLDcgQEAKIAkJdHJhY2Vob29rX2ZpbmlzaF9jbG9uZShwLCBjbG9uZV9mbGFncywgdHJhY2UpOwogCiAJCWlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKSB7Ci0JCQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9ORVdQSUQpCisJCQlpZiAoaXNfY2hpbGRfcmVhcGVyKHBpZCkpCiAJCQkJcC0+bnNwcm94eS0+cGlkX25zLT5jaGlsZF9yZWFwZXIgPSBwOwogCiAJCQlwLT5zaWduYWwtPmxlYWRlcl9waWQgPSBwaWQ7CkBAIC0xNTEzLDM4ICsxNTEzLDI0IEBACiB9CiAKIC8qCi0gKiBDaGVjayBjb25zdHJhaW50cyBvbiBmbGFncyBwYXNzZWQgdG8gdGhlIHVuc2hhcmUgc3lzdGVtIGNhbGwgYW5kCi0gKiBmb3JjZSB1bnNoYXJpbmcgb2YgYWRkaXRpb25hbCBwcm9jZXNzIGNvbnRleHQgYXMgYXBwcm9wcmlhdGUuCisgKiBDaGVjayBjb25zdHJhaW50cyBvbiBmbGFncyBwYXNzZWQgdG8gdGhlIHVuc2hhcmUgc3lzdGVtIGNhbGwuCiAgKi8KLXN0YXRpYyB2b2lkIGNoZWNrX3Vuc2hhcmVfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3NfcHRyKQorc3RhdGljIGludCBjaGVja191bnNoYXJlX2ZsYWdzKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncykKIHsKLQkvKgotCSAqIElmIHVuc2hhcmluZyBhIHRocmVhZCBmcm9tIGEgdGhyZWFkIGdyb3VwLCBtdXN0IGFsc28KLQkgKiB1bnNoYXJlIHZtLgotCSAqLwotCWlmICgqZmxhZ3NfcHRyICYgQ0xPTkVfVEhSRUFEKQotCQkqZmxhZ3NfcHRyIHw9IENMT05FX1ZNOwotCi0JLyoKLQkgKiBJZiB1bnNoYXJpbmcgdm0sIG11c3QgYWxzbyB1bnNoYXJlIHNpZ25hbCBoYW5kbGVycy4KLQkgKi8KLQlpZiAoKmZsYWdzX3B0ciAmIENMT05FX1ZNKQotCQkqZmxhZ3NfcHRyIHw9IENMT05FX1NJR0hBTkQ7Ci0KLQkvKgotCSAqIElmIHVuc2hhcmluZyBuYW1lc3BhY2UsIG11c3QgYWxzbyB1bnNoYXJlIGZpbGVzeXN0ZW0gaW5mb3JtYXRpb24uCi0JICovCi0JaWYgKCpmbGFnc19wdHIgJiBDTE9ORV9ORVdOUykKLQkJKmZsYWdzX3B0ciB8PSBDTE9ORV9GUzsKLX0KLQotLyoKLSAqIFVuc2hhcmluZyBvZiB0YXNrcyBjcmVhdGVkIHdpdGggQ0xPTkVfVEhSRUFEIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Ci0gKi8KLXN0YXRpYyBpbnQgdW5zaGFyZV90aHJlYWQodW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzKQotewotCWlmICh1bnNoYXJlX2ZsYWdzICYgQ0xPTkVfVEhSRUFEKQorCWlmICh1bnNoYXJlX2ZsYWdzICYgfihDTE9ORV9USFJFQUR8Q0xPTkVfRlN8Q0xPTkVfTkVXTlN8Q0xPTkVfU0lHSEFORHwKKwkJCQlDTE9ORV9WTXxDTE9ORV9GSUxFU3xDTE9ORV9TWVNWU0VNfAorCQkJCUNMT05FX05FV1VUU3xDTE9ORV9ORVdJUEN8Q0xPTkVfTkVXTkVUKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBOb3QgaW1wbGVtZW50ZWQsIGJ1dCBwcmV0ZW5kIGl0IHdvcmtzIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8KKwkgKiB1bnNoYXJlLiBOb3RlIHRoYXQgdW5zaGFyaW5nIENMT05FX1RIUkVBRCBvciBDTE9ORV9TSUdIQU5ECisJICogbmVlZHMgdG8gdW5zaGFyZSB2bS4KKwkgKi8KKwlpZiAodW5zaGFyZV9mbGFncyAmIChDTE9ORV9USFJFQUQgfCBDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVk0pKSB7CisJCS8qIEZJWE1FOiBnZXRfdGFza19tbSgpIGluY3JlbWVudHMgLT5tbV91c2VycyAqLworCQlpZiAoYXRvbWljX3JlYWQoJmN1cnJlbnQtPm1tLT5tbV91c2VycykgPiAxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTcxLDM0ICsxNTU3LDYgQEAKIH0KIAogLyoKLSAqIFVuc2hhcmluZyBvZiBzaWdoYW5kIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Ci0gKi8KLXN0YXRpYyBpbnQgdW5zaGFyZV9zaWdoYW5kKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncywgc3RydWN0IHNpZ2hhbmRfc3RydWN0ICoqbmV3X3NpZ2hwKQotewotCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaCA9IGN1cnJlbnQtPnNpZ2hhbmQ7Ci0KLQlpZiAoKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9TSUdIQU5EKSAmJiBhdG9taWNfcmVhZCgmc2lnaC0+Y291bnQpID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFVuc2hhcmUgdm0gaWYgaXQgaXMgYmVpbmcgc2hhcmVkCi0gKi8KLXN0YXRpYyBpbnQgdW5zaGFyZV92bSh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKipuZXdfbW1wKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0KLQlpZiAoKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9WTSkgJiYKLQkgICAgKG1tICYmIGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID4gMSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBVbnNoYXJlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSBpZiBpdCBpcyBiZWluZyBzaGFyZWQKICAqLwogc3RhdGljIGludCB1bnNoYXJlX2ZkKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncywgc3RydWN0IGZpbGVzX3N0cnVjdCAqKm5ld19mZHApCkBAIC0xNjI2LDQ1ICsxNTg0LDM3IEBACiAgKi8KIFNZU0NBTExfREVGSU5FMSh1bnNoYXJlLCB1bnNpZ25lZCBsb25nLCB1bnNoYXJlX2ZsYWdzKQogewotCWludCBlcnIgPSAwOwogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzLCAqbmV3X2ZzID0gTlVMTDsKLQlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKm5ld19zaWdoID0gTlVMTDsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKm5ld19tbSA9IE5VTEwsICphY3RpdmVfbW0gPSBOVUxMOwogCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZkLCAqbmV3X2ZkID0gTlVMTDsKIAlzdHJ1Y3QgbnNwcm94eSAqbmV3X25zcHJveHkgPSBOVUxMOwogCWludCBkb19zeXN2c2VtID0gMDsKKwlpbnQgZXJyOwogCi0JY2hlY2tfdW5zaGFyZV9mbGFncygmdW5zaGFyZV9mbGFncyk7Ci0KLQkvKiBSZXR1cm4gLUVJTlZBTCBmb3IgYWxsIHVuc3VwcG9ydGVkIGZsYWdzICovCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAodW5zaGFyZV9mbGFncyAmIH4oQ0xPTkVfVEhSRUFEfENMT05FX0ZTfENMT05FX05FV05TfENMT05FX1NJR0hBTkR8Ci0JCQkJQ0xPTkVfVk18Q0xPTkVfRklMRVN8Q0xPTkVfU1lTVlNFTXwKLQkJCQlDTE9ORV9ORVdVVFN8Q0xPTkVfTkVXSVBDfENMT05FX05FV05FVCkpCisJZXJyID0gY2hlY2tfdW5zaGFyZV9mbGFncyh1bnNoYXJlX2ZsYWdzKTsKKwlpZiAoZXJyKQogCQlnb3RvIGJhZF91bnNoYXJlX291dDsKIAogCS8qCisJICogSWYgdW5zaGFyaW5nIG5hbWVzcGFjZSwgbXVzdCBhbHNvIHVuc2hhcmUgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbi4KKwkgKi8KKwlpZiAodW5zaGFyZV9mbGFncyAmIENMT05FX05FV05TKQorCQl1bnNoYXJlX2ZsYWdzIHw9IENMT05FX0ZTOworCS8qCiAJICogQ0xPTkVfTkVXSVBDIG11c3QgYWxzbyBkZXRhY2ggZnJvbSB0aGUgdW5kb2xpc3Q6IGFmdGVyIHN3aXRjaGluZwogCSAqIHRvIGEgbmV3IGlwYyBuYW1lc3BhY2UsIHRoZSBzZW1hcGhvcmUgYXJyYXlzIGZyb20gdGhlIG9sZAogCSAqIG5hbWVzcGFjZSBhcmUgdW5yZWFjaGFibGUuCiAJICovCiAJaWYgKHVuc2hhcmVfZmxhZ3MgJiAoQ0xPTkVfTkVXSVBDfENMT05FX1NZU1ZTRU0pKQogCQlkb19zeXN2c2VtID0gMTsKLQlpZiAoKGVyciA9IHVuc2hhcmVfdGhyZWFkKHVuc2hhcmVfZmxhZ3MpKSkKLQkJZ290byBiYWRfdW5zaGFyZV9vdXQ7CiAJaWYgKChlcnIgPSB1bnNoYXJlX2ZzKHVuc2hhcmVfZmxhZ3MsICZuZXdfZnMpKSkKLQkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX3RocmVhZDsKLQlpZiAoKGVyciA9IHVuc2hhcmVfc2lnaGFuZCh1bnNoYXJlX2ZsYWdzLCAmbmV3X3NpZ2gpKSkKLQkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX2ZzOwotCWlmICgoZXJyID0gdW5zaGFyZV92bSh1bnNoYXJlX2ZsYWdzLCAmbmV3X21tKSkpCi0JCWdvdG8gYmFkX3Vuc2hhcmVfY2xlYW51cF9zaWdoOworCQlnb3RvIGJhZF91bnNoYXJlX291dDsKIAlpZiAoKGVyciA9IHVuc2hhcmVfZmQodW5zaGFyZV9mbGFncywgJm5ld19mZCkpKQotCQlnb3RvIGJhZF91bnNoYXJlX2NsZWFudXBfdm07CisJCWdvdG8gYmFkX3Vuc2hhcmVfY2xlYW51cF9mczsKIAlpZiAoKGVyciA9IHVuc2hhcmVfbnNwcm94eV9uYW1lc3BhY2VzKHVuc2hhcmVfZmxhZ3MsICZuZXdfbnNwcm94eSwKIAkJCW5ld19mcykpKQogCQlnb3RvIGJhZF91bnNoYXJlX2NsZWFudXBfZmQ7CiAKLQlpZiAobmV3X2ZzIHx8ICBuZXdfbW0gfHwgbmV3X2ZkIHx8IGRvX3N5c3ZzZW0gfHwgbmV3X25zcHJveHkpIHsKKwlpZiAobmV3X2ZzIHx8IG5ld19mZCB8fCBkb19zeXN2c2VtIHx8IG5ld19uc3Byb3h5KSB7CiAJCWlmIChkb19zeXN2c2VtKSB7CiAJCQkvKgogCQkJICogQ0xPTkVfU1lTVlNFTSBpcyBlcXVpdmFsZW50IHRvIHN5c19leGl0KCkuCkBAIC0xNjkwLDE5ICsxNjQwLDYgQEAKIAkJCXNwaW5fdW5sb2NrKCZmcy0+bG9jayk7CiAJCX0KIAotCQlpZiAobmV3X21tKSB7Ci0JCQltbSA9IGN1cnJlbnQtPm1tOwotCQkJYWN0aXZlX21tID0gY3VycmVudC0+YWN0aXZlX21tOwotCQkJY3VycmVudC0+bW0gPSBuZXdfbW07Ci0JCQljdXJyZW50LT5hY3RpdmVfbW0gPSBuZXdfbW07Ci0JCQlpZiAoY3VycmVudC0+c2lnbmFsLT5vb21fc2NvcmVfYWRqID09IE9PTV9TQ09SRV9BREpfTUlOKSB7Ci0JCQkJYXRvbWljX2RlYygmbW0tPm9vbV9kaXNhYmxlX2NvdW50KTsKLQkJCQlhdG9taWNfaW5jKCZuZXdfbW0tPm9vbV9kaXNhYmxlX2NvdW50KTsKLQkJCX0KLQkJCWFjdGl2YXRlX21tKGFjdGl2ZV9tbSwgbmV3X21tKTsKLQkJCW5ld19tbSA9IG1tOwotCQl9Ci0KIAkJaWYgKG5ld19mZCkgewogCQkJZmQgPSBjdXJyZW50LT5maWxlczsKIAkJCWN1cnJlbnQtPmZpbGVzID0gbmV3X2ZkOwpAQCAtMTcxOSwyMCArMTY1NiwxMCBAQAogCWlmIChuZXdfZmQpCiAJCXB1dF9maWxlc19zdHJ1Y3QobmV3X2ZkKTsKIAotYmFkX3Vuc2hhcmVfY2xlYW51cF92bToKLQlpZiAobmV3X21tKQotCQltbXB1dChuZXdfbW0pOwotCi1iYWRfdW5zaGFyZV9jbGVhbnVwX3NpZ2g6Ci0JaWYgKG5ld19zaWdoKQotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbmV3X3NpZ2gtPmNvdW50KSkKLQkJCWttZW1fY2FjaGVfZnJlZShzaWdoYW5kX2NhY2hlcCwgbmV3X3NpZ2gpOwotCiBiYWRfdW5zaGFyZV9jbGVhbnVwX2ZzOgogCWlmIChuZXdfZnMpCiAJCWZyZWVfZnNfc3RydWN0KG5ld19mcyk7CiAKLWJhZF91bnNoYXJlX2NsZWFudXBfdGhyZWFkOgogYmFkX3Vuc2hhcmVfb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IGJkYTQxNTcuLjY1NzBjNDU5ZiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTI0MTgsMTAgKzI0MTgsMTkgQEAKIAkJCWdvdG8gZXJyX3VubG9jazsKIAkJcmV0ID0gLUVQRVJNOwogCQlwY3JlZCA9IF9fdGFza19jcmVkKHApOworCQkvKiBJZiB2aWN0aW0gaXMgaW4gZGlmZmVyZW50IHVzZXJfbnMsIHRoZW4gdWlkcyBhcmUgbm90CisJCSAgIGNvbXBhcmFibGUsIHNvIHdlIG11c3QgaGF2ZSBDQVBfU1lTX1BUUkFDRSAqLworCQlpZiAoY3JlZC0+dXNlci0+dXNlcl9ucyAhPSBwY3JlZC0+dXNlci0+dXNlcl9ucykgeworCQkJaWYgKCFuc19jYXBhYmxlKHBjcmVkLT51c2VyLT51c2VyX25zLCBDQVBfU1lTX1BUUkFDRSkpCisJCQkJZ290byBlcnJfdW5sb2NrOworCQkJZ290byBvazsKKwkJfQorCQkvKiBJZiB2aWN0aW0gaXMgaW4gc2FtZSB1c2VyX25zLCB0aGVuIHVpZHMgYXJlIGNvbXBhcmFibGUgKi8KIAkJaWYgKGNyZWQtPmV1aWQgIT0gcGNyZWQtPmV1aWQgJiYKIAkJICAgIGNyZWQtPmV1aWQgIT0gcGNyZWQtPnVpZCAmJgotCQkgICAgIWNhcGFibGUoQ0FQX1NZU19QVFJBQ0UpKQorCQkgICAgIW5zX2NhcGFibGUocGNyZWQtPnVzZXItPnVzZXJfbnMsIENBUF9TWVNfUFRSQUNFKSkKIAkJCWdvdG8gZXJyX3VubG9jazsKK29rOgogCQloZWFkID0gcC0+cm9idXN0X2xpc3Q7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleF9jb21wYXQuYyBiL2tlcm5lbC9mdXRleF9jb21wYXQuYwppbmRleCBhNzkzNGFjLi41ZjllNjg5IDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKKysrIGIva2VybmVsL2Z1dGV4X2NvbXBhdC5jCkBAIC0xNTMsMTAgKzE1MywxOSBAQAogCQkJZ290byBlcnJfdW5sb2NrOwogCQlyZXQgPSAtRVBFUk07CiAJCXBjcmVkID0gX190YXNrX2NyZWQocCk7CisJCS8qIElmIHZpY3RpbSBpcyBpbiBkaWZmZXJlbnQgdXNlcl9ucywgdGhlbiB1aWRzIGFyZSBub3QKKwkJICAgY29tcGFyYWJsZSwgc28gd2UgbXVzdCBoYXZlIENBUF9TWVNfUFRSQUNFICovCisJCWlmIChjcmVkLT51c2VyLT51c2VyX25zICE9IHBjcmVkLT51c2VyLT51c2VyX25zKSB7CisJCQlpZiAoIW5zX2NhcGFibGUocGNyZWQtPnVzZXItPnVzZXJfbnMsIENBUF9TWVNfUFRSQUNFKSkKKwkJCQlnb3RvIGVycl91bmxvY2s7CisJCQlnb3RvIG9rOworCQl9CisJCS8qIElmIHZpY3RpbSBpcyBpbiBzYW1lIHVzZXJfbnMsIHRoZW4gdWlkcyBhcmUgY29tcGFyYWJsZSAqLwogCQlpZiAoY3JlZC0+ZXVpZCAhPSBwY3JlZC0+ZXVpZCAmJgogCQkgICAgY3JlZC0+ZXVpZCAhPSBwY3JlZC0+dWlkICYmCi0JCSAgICAhY2FwYWJsZShDQVBfU1lTX1BUUkFDRSkpCisJCSAgICAhbnNfY2FwYWJsZShwY3JlZC0+dXNlci0+dXNlcl9ucywgQ0FQX1NZU19QVFJBQ0UpKQogCQkJZ290byBlcnJfdW5sb2NrOworb2s6CiAJCWhlYWQgPSBwLT5jb21wYXRfcm9idXN0X2xpc3Q7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9nY292L01ha2VmaWxlIGIva2VybmVsL2djb3YvTWFrZWZpbGUKaW5kZXggM2Y3NjEwMC4uZTk3Y2E1OSAxMDA2NDQKLS0tIGEva2VybmVsL2djb3YvTWFrZWZpbGUKKysrIGIva2VybmVsL2djb3YvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACi1FWFRSQV9DRkxBR1MgOj0gLURTUkNUUkVFPSciJChzcmN0cmVlKSInIC1ET0JKVFJFRT0nIiQob2JqdHJlZSkiJworY2NmbGFncy15IDo9IC1EU1JDVFJFRT0nIiQoc3JjdHJlZSkiJyAtRE9CSlRSRUU9JyIkKG9ianRyZWUpIicKIAogb2JqLSQoQ09ORklHX0dDT1ZfS0VSTkVMKSA6PSBiYXNlLm8gZnMubyBnY2NfM180Lm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9ncm91cHMuYyBiL2tlcm5lbC9ncm91cHMuYwppbmRleCAyNTNkYzBmLi4xY2M0NzZkIDEwMDY0NAotLS0gYS9rZXJuZWwvZ3JvdXBzLmMKKysrIGIva2VybmVsL2dyb3Vwcy5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbzsKIAlpbnQgcmV0dmFsOwogCi0JaWYgKCFjYXBhYmxlKENBUF9TRVRHSUQpKQorCWlmICghbnNvd25fY2FwYWJsZShDQVBfU0VUR0lEKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAlpZiAoKHVuc2lnbmVkKWdpZHNldHNpemUgPiBOR1JPVVBTX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCBhY2Q1OTlhLi4wYTJhYTczIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTEwNjQsMTAgKzEwNjQsMTAgQEAKIAlyZXQgPSAtRUJVU1k7CiAKIG91dF9tYXNrOgorCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZnJlZV9jcHVtYXNrX3ZhcihtYXNrKTsKIAogb3V0X3RocmVhZDoKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWlmIChuZXctPnRocmVhZCkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBuZXctPnRocmVhZDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9wcm9jLmMgYi9rZXJuZWwvaXJxL3Byb2MuYwppbmRleCA0Y2MyZTVlLi43NjAyNDhkIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Byb2MuYworKysgYi9rZXJuZWwvaXJxL3Byb2MuYwpAQCAtNDA1LDcgKzQwNSw4IEBACiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKIAlzZXFfcHJpbnRmKHAsICIgJThzIiwgZGVzYy0+aXJxX2RhdGEuY2hpcC0+bmFtZSk7Ci0Jc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBkZXNjLT5uYW1lKTsKKwlpZiAoZGVzYy0+bmFtZSkKKwkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBkZXNjLT5uYW1lKTsKIAogCWlmIChhY3Rpb24pIHsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwva2FsbHN5bXMuYyBiL2tlcm5lbC9rYWxsc3ltcy5jCmluZGV4IDZmNmQwOTEuLjc1ZGNjYTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rYWxsc3ltcy5jCisrKyBiL2tlcm5lbC9rYWxsc3ltcy5jCkBAIC00NzcsMTMgKzQ3NywxMSBAQAogCQkgKi8KIAkJdHlwZSA9IGl0ZXItPmV4cG9ydGVkID8gdG91cHBlcihpdGVyLT50eXBlKSA6CiAJCQkJCXRvbG93ZXIoaXRlci0+dHlwZSk7Ci0JCXNlcV9wcmludGYobSwgIiUwKmx4ICVjICVzXHRbJXNdXG4iLAotCQkJICAgKGludCkoMiAqIHNpemVvZih2b2lkICopKSwKLQkJCSAgIGl0ZXItPnZhbHVlLCB0eXBlLCBpdGVyLT5uYW1lLCBpdGVyLT5tb2R1bGVfbmFtZSk7CisJCXNlcV9wcmludGYobSwgIiVwSyAlYyAlc1x0WyVzXVxuIiwgKHZvaWQgKilpdGVyLT52YWx1ZSwKKwkJCSAgIHR5cGUsIGl0ZXItPm5hbWUsIGl0ZXItPm1vZHVsZV9uYW1lKTsKIAl9IGVsc2UKLQkJc2VxX3ByaW50ZihtLCAiJTAqbHggJWMgJXNcbiIsCi0JCQkgICAoaW50KSgyICogc2l6ZW9mKHZvaWQgKikpLAotCQkJICAgaXRlci0+dmFsdWUsIGl0ZXItPnR5cGUsIGl0ZXItPm5hbWUpOworCQlzZXFfcHJpbnRmKG0sICIlcEsgJWMgJXNcbiIsICh2b2lkICopaXRlci0+dmFsdWUsCisJCQkgICBpdGVyLT50eXBlLCBpdGVyLT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggYzU1YWZiYS4uNjg0YWIzZiAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0yNyw2ICsyNyw3IEBACiAJLyogSW5mb3JtYXRpb24gcGFzc2VkIHRvIGt0aHJlYWQoKSBmcm9tIGt0aHJlYWRkLiAqLwogCWludCAoKnRocmVhZGZuKSh2b2lkICpkYXRhKTsKIAl2b2lkICpkYXRhOworCWludCBub2RlOwogCiAJLyogUmVzdWx0IHBhc3NlZCBiYWNrIHRvIGt0aHJlYWRfY3JlYXRlKCkgZnJvbSBrdGhyZWFkZC4gKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlc3VsdDsKQEAgLTk4LDEwICs5OSwyMyBAQAogCWRvX2V4aXQocmV0KTsKIH0KIAorLyogY2FsbGVkIGZyb20gZG9fZm9yaygpIHRvIGdldCBub2RlIGluZm9ybWF0aW9uIGZvciBhYm91dCB0byBiZSBjcmVhdGVkIHRhc2sgKi8KK2ludCB0c2tfZm9ya19nZXRfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyNpZmRlZiBDT05GSUdfTlVNQQorCWlmICh0c2sgPT0ga3RocmVhZGRfdGFzaykKKwkJcmV0dXJuIHRzay0+cHJlZl9ub2RlX2Zvcms7CisjZW5kaWYKKwlyZXR1cm4gbnVtYV9ub2RlX2lkKCk7Cit9CisKIHN0YXRpYyB2b2lkIGNyZWF0ZV9rdGhyZWFkKHN0cnVjdCBrdGhyZWFkX2NyZWF0ZV9pbmZvICpjcmVhdGUpCiB7CiAJaW50IHBpZDsKIAorI2lmZGVmIENPTkZJR19OVU1BCisJY3VycmVudC0+cHJlZl9ub2RlX2ZvcmsgPSBjcmVhdGUtPm5vZGU7CisjZW5kaWYKIAkvKiBXZSB3YW50IG91ciBvd24gc2lnbmFsIGhhbmRsZXIgKHdlIHRha2Ugbm8gc2lnbmFscyBieSBkZWZhdWx0KS4gKi8KIAlwaWQgPSBrZXJuZWxfdGhyZWFkKGt0aHJlYWQsIGNyZWF0ZSwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8IFNJR0NITEQpOwogCWlmIChwaWQgPCAwKSB7CkBAIC0xMTEsMTUgKzEyNSwxOCBAQAogfQogCiAvKioKLSAqIGt0aHJlYWRfY3JlYXRlIC0gY3JlYXRlIGEga3RocmVhZC4KKyAqIGt0aHJlYWRfY3JlYXRlX29uX25vZGUgLSBjcmVhdGUgYSBrdGhyZWFkLgogICogQHRocmVhZGZuOiB0aGUgZnVuY3Rpb24gdG8gcnVuIHVudGlsIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLgogICogQGRhdGE6IGRhdGEgcHRyIGZvciBAdGhyZWFkZm4uCisgKiBAbm9kZTogbWVtb3J5IG5vZGUgbnVtYmVyLgogICogQG5hbWVmbXQ6IHByaW50Zi1zdHlsZSBuYW1lIGZvciB0aGUgdGhyZWFkLgogICoKICAqIERlc2NyaXB0aW9uOiBUaGlzIGhlbHBlciBmdW5jdGlvbiBjcmVhdGVzIGFuZCBuYW1lcyBhIGtlcm5lbAogICogdGhyZWFkLiAgVGhlIHRocmVhZCB3aWxsIGJlIHN0b3BwZWQ6IHVzZSB3YWtlX3VwX3Byb2Nlc3MoKSB0byBzdGFydAogICogaXQuICBTZWUgYWxzbyBrdGhyZWFkX3J1bigpLgogICoKKyAqIElmIHRocmVhZCBpcyBnb2luZyB0byBiZSBib3VuZCBvbiBhIHBhcnRpY3VsYXIgY3B1LCBnaXZlIGl0cyBub2RlCisgKiBpbiBAbm9kZSwgdG8gZ2V0IE5VTUEgYWZmaW5pdHkgZm9yIGt0aHJlYWQgc3RhY2ssIG9yIGVsc2UgZ2l2ZSAtMS4KICAqIFdoZW4gd29rZW4sIHRoZSB0aHJlYWQgd2lsbCBydW4gQHRocmVhZGZuKCkgd2l0aCBAZGF0YSBhcyBpdHMKICAqIGFyZ3VtZW50LiBAdGhyZWFkZm4oKSBjYW4gZWl0aGVyIGNhbGwgZG9fZXhpdCgpIGRpcmVjdGx5IGlmIGl0IGlzIGEKICAqIHN0YW5kYWxvbmUgdGhyZWFkIGZvciB3aGljaCBub29uZSB3aWxsIGNhbGwga3RocmVhZF9zdG9wKCksIG9yCkBAIC0xMjksMTUgKzE0NiwxNyBAQAogICoKICAqIFJldHVybnMgYSB0YXNrX3N0cnVjdCBvciBFUlJfUFRSKC1FTk9NRU0pLgogICovCi1zdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWRfY3JlYXRlKGludCAoKnRocmVhZGZuKSh2b2lkICpkYXRhKSwKLQkJCQkgICB2b2lkICpkYXRhLAotCQkJCSAgIGNvbnN0IGNoYXIgbmFtZWZtdFtdLAotCQkJCSAgIC4uLikKK3N0cnVjdCB0YXNrX3N0cnVjdCAqa3RocmVhZF9jcmVhdGVfb25fbm9kZShpbnQgKCp0aHJlYWRmbikodm9pZCAqZGF0YSksCisJCQkJCSAgIHZvaWQgKmRhdGEsCisJCQkJCSAgIGludCBub2RlLAorCQkJCQkgICBjb25zdCBjaGFyIG5hbWVmbXRbXSwKKwkJCQkJICAgLi4uKQogewogCXN0cnVjdCBrdGhyZWFkX2NyZWF0ZV9pbmZvIGNyZWF0ZTsKIAogCWNyZWF0ZS50aHJlYWRmbiA9IHRocmVhZGZuOwogCWNyZWF0ZS5kYXRhID0gZGF0YTsKKwljcmVhdGUubm9kZSA9IG5vZGU7CiAJaW5pdF9jb21wbGV0aW9uKCZjcmVhdGUuZG9uZSk7CiAKIAlzcGluX2xvY2soJmt0aHJlYWRfY3JlYXRlX2xvY2spOwpAQCAtMTY0LDcgKzE4Myw3IEBACiAJfQogCXJldHVybiBjcmVhdGUucmVzdWx0OwogfQotRVhQT1JUX1NZTUJPTChrdGhyZWFkX2NyZWF0ZSk7CitFWFBPUlRfU1lNQk9MKGt0aHJlYWRfY3JlYXRlX29uX25vZGUpOwogCiAvKioKICAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCBlZmEyOTBlLi4xZjlmN2JjIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0xMTY4LDcgKzExNjgsNyBAQAogewogCXN0cnVjdCBtb2R1bGVfc2VjdF9hdHRyICpzYXR0ciA9CiAJCWNvbnRhaW5lcl9vZihtYXR0ciwgc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIsIG1hdHRyKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCVseFxuIiwgc2F0dHItPmFkZHJlc3MpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXBLXG4iLCAodm9pZCAqKXNhdHRyLT5hZGRyZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9zZWN0X2F0dHJzKHN0cnVjdCBtb2R1bGVfc2VjdF9hdHRycyAqc2VjdF9hdHRycykKQEAgLTMyMjQsNyArMzIyNCw3IEBACiAJCSAgIG1vZC0+c3RhdGUgPT0gTU9EVUxFX1NUQVRFX0NPTUlORyA/ICJMb2FkaW5nIjoKIAkJICAgIkxpdmUiKTsKIAkvKiBVc2VkIGJ5IG9wcm9maWxlIGFuZCBvdGhlciBzaW1pbGFyIHRvb2xzLiAqLwotCXNlcV9wcmludGYobSwgIiAweCVwIiwgbW9kLT5tb2R1bGVfY29yZSk7CisJc2VxX3ByaW50ZihtLCAiIDB4JXBLIiwgbW9kLT5tb2R1bGVfY29yZSk7CiAKIAkvKiBUYWludHMgaW5mbyAqLwogCWlmIChtb2QtPnRhaW50cykKZGlmZiAtLWdpdCBhL2tlcm5lbC9uc3Byb3h5LmMgYi9rZXJuZWwvbnNwcm94eS5jCmluZGV4IGY3NGU2YzAuLmEwNWQxOTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9uc3Byb3h5LmMKKysrIGIva2VybmVsL25zcHJveHkuYwpAQCAtNjksMTMgKzY5LDEzIEBACiAJCWdvdG8gb3V0X25zOwogCX0KIAotCW5ld19uc3AtPnV0c19ucyA9IGNvcHlfdXRzbmFtZShmbGFncywgdHNrLT5uc3Byb3h5LT51dHNfbnMpOworCW5ld19uc3AtPnV0c19ucyA9IGNvcHlfdXRzbmFtZShmbGFncywgdHNrKTsKIAlpZiAoSVNfRVJSKG5ld19uc3AtPnV0c19ucykpIHsKIAkJZXJyID0gUFRSX0VSUihuZXdfbnNwLT51dHNfbnMpOwogCQlnb3RvIG91dF91dHM7CiAJfQogCi0JbmV3X25zcC0+aXBjX25zID0gY29weV9pcGNzKGZsYWdzLCB0c2stPm5zcHJveHktPmlwY19ucyk7CisJbmV3X25zcC0+aXBjX25zID0gY29weV9pcGNzKGZsYWdzLCB0c2spOwogCWlmIChJU19FUlIobmV3X25zcC0+aXBjX25zKSkgewogCQllcnIgPSBQVFJfRVJSKG5ld19uc3AtPmlwY19ucyk7CiAJCWdvdG8gb3V0X2lwYzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggOTkxYmI4Ny4uNjkyMzE2NyAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTQzMywzICs0MzMsMTMgQEAKIAogY29yZV9wYXJhbShwYW5pYywgcGFuaWNfdGltZW91dCwgaW50LCAwNjQ0KTsKIGNvcmVfcGFyYW0ocGF1c2Vfb25fb29wcywgcGF1c2Vfb25fb29wcywgaW50LCAwNjQ0KTsKKworc3RhdGljIGludCBfX2luaXQgb29wc19zZXR1cChjaGFyICpzKQoreworCWlmICghcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzdHJjbXAocywgInBhbmljIikpCisJCXBhbmljX29uX29vcHMgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm9vcHMiLCBvb3BzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGVkMjUzYWEuLjM0NzJiYjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtNTEyMiw3ICs1MTIyLDcgQEAKIAkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlmIChldmVudC0+aHcuc3RhdGUgJiBQRVJGX0hFU19TVE9QUEVEKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDE7CiAKIAlpZiAocmVncykgewogCQlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyICYmIHVzZXJfbW9kZShyZWdzKSkKQEAgLTU0NzgsNiArNTQ3OCw4IEBACiAJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCiAJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJaWYgKGV2ZW50LT5ody5zdGF0ZSAmIFBFUkZfSEVTX1NUT1BQRUQpCisJCXJldHVybiAwOwogCS8qCiAJICogQWxsIHRyYWNlcG9pbnRzIGFyZSBmcm9tIGtlcm5lbC1zcGFjZS4KIAkgKi8KQEAgLTY3MjAsMTcgKzY3MjIsMjAgQEAKIAkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjaGlsZF9jdHgsCiAJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50X2V2ZW50OworCWlmIChjaGlsZF9ldmVudC0+cGFyZW50KSB7CisJCXJhd19zcGluX2xvY2tfaXJxKCZjaGlsZF9jdHgtPmxvY2spOworCQlwZXJmX2dyb3VwX2RldGFjaChjaGlsZF9ldmVudCk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJmNoaWxkX2N0eC0+bG9jayk7CisJfQogCiAJcGVyZl9yZW1vdmVfZnJvbV9jb250ZXh0KGNoaWxkX2V2ZW50KTsKIAotCXBhcmVudF9ldmVudCA9IGNoaWxkX2V2ZW50LT5wYXJlbnQ7CiAJLyoKLQkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgcGFyZW50IGV4aXRzIGZpcnN0LCBhbmQgaGFzIGV2ZW50cworCSAqIEl0IGNhbiBoYXBwZW4gdGhhdCB0aGUgcGFyZW50IGV4aXRzIGZpcnN0LCBhbmQgaGFzIGV2ZW50cwogCSAqIHRoYXQgYXJlIHN0aWxsIGFyb3VuZCBkdWUgdG8gdGhlIGNoaWxkIHJlZmVyZW5jZS4gVGhlc2UKLQkgKiBldmVudHMgbmVlZCB0byBiZSB6YXBwZWQgLSBidXQgb3RoZXJ3aXNlIGxpbmdlci4KKwkgKiBldmVudHMgbmVlZCB0byBiZSB6YXBwZWQuCiAJICovCi0JaWYgKHBhcmVudF9ldmVudCkgeworCWlmIChjaGlsZF9ldmVudC0+cGFyZW50KSB7CiAJCXN5bmNfY2hpbGRfZXZlbnQoY2hpbGRfZXZlbnQsIGNoaWxkKTsKIAkJZnJlZV9ldmVudChjaGlsZF9ldmVudCk7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3BpZF9uYW1lc3BhY2UuYyBiL2tlcm5lbC9waWRfbmFtZXNwYWNlLmMKaW5kZXggYTVhZmY5NC4uZTljOWFkYyAxMDA2NDQKLS0tIGEva2VybmVsL3BpZF9uYW1lc3BhY2UuYworKysgYi9rZXJuZWwvcGlkX25hbWVzcGFjZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvYWNjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAKICNkZWZpbmUgQklUU19QRVJfUEFHRQkJKFBBR0VfU0laRSo4KQogCkBAIC03Miw3ICs3Myw3IEBACiB7CiAJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOwogCXVuc2lnbmVkIGludCBsZXZlbCA9IHBhcmVudF9waWRfbnMtPmxldmVsICsgMTsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyID0gLUVOT01FTTsKIAogCW5zID0ga21lbV9jYWNoZV96YWxsb2MocGlkX25zX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKG5zID09IE5VTEwpCkBAIC05NiwxNCArOTcsMjAgQEAKIAlmb3IgKGkgPSAxOyBpIDwgUElETUFQX0VOVFJJRVM7IGkrKykKIAkJYXRvbWljX3NldCgmbnMtPnBpZG1hcFtpXS5ucl9mcmVlLCBCSVRTX1BFUl9QQUdFKTsKIAorCWVyciA9IHBpZF9uc19wcmVwYXJlX3Byb2MobnMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3B1dF9wYXJlbnRfcGlkX25zOworCiAJcmV0dXJuIG5zOwogCitvdXRfcHV0X3BhcmVudF9waWRfbnM6CisJcHV0X3BpZF9ucyhwYXJlbnRfcGlkX25zKTsKIG91dF9mcmVlX21hcDoKIAlrZnJlZShucy0+cGlkbWFwWzBdLnBhZ2UpOwogb3V0X2ZyZWU6CiAJa21lbV9jYWNoZV9mcmVlKHBpZF9uc19jYWNoZXAsIG5zKTsKIG91dDoKLQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X3BpZF9uYW1lc3BhY2Uoc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL01ha2VmaWxlIGIva2VybmVsL3Bvd2VyL01ha2VmaWxlCmluZGV4IGMzNTBlMTguLmM1ZWJjNmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9NYWtlZmlsZQorKysgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACi1jY2ZsYWdzLSQoQ09ORklHX1BNX0RFQlVHKQk6PQktRERFQlVHCisKK2NjZmxhZ3MtJChDT05GSUdfUE1fREVCVUcpCTo9IC1EREVCVUcKIAogb2JqLSQoQ09ORklHX1BNKQkJKz0gbWFpbi5vCiBvYmotJChDT05GSUdfUE1fU0xFRVApCQkrPSBjb25zb2xlLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCAzMzI4NGFkLi5kYThjYTgxIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC01Myw3ICs1Myw3IEBACiAjZGVmaW5lIF9fTE9HX0JVRl9MRU4JKDEgPDwgQ09ORklHX0xPR19CVUZfU0hJRlQpCiAKIC8qIHByaW50aydzIHdpdGhvdXQgYSBsb2dsZXZlbCB1c2UgdGhpcy4uICovCi0jZGVmaW5lIERFRkFVTFRfTUVTU0FHRV9MT0dMRVZFTCA0IC8qIEtFUk5fV0FSTklORyAqLworI2RlZmluZSBERUZBVUxUX01FU1NBR0VfTE9HTEVWRUwgQ09ORklHX0RFRkFVTFRfTUVTU0FHRV9MT0dMRVZFTAogCiAvKiBXZSBzaG93IGV2ZXJ5dGhpbmcgdGhhdCBpcyBNT1JFIGltcG9ydGFudCB0aGFuIHRoaXMuLiAqLwogI2RlZmluZSBNSU5JTVVNX0NPTlNPTEVfTE9HTEVWRUwgMSAvKiBNaW5pbXVtIGxvZ2xldmVsIHdlIGxldCBwZW9wbGUgdXNlICovCkBAIC0xMTMsNiArMTEzLDExIEBACiBzdGF0aWMgdW5zaWduZWQgbG9nX2VuZDsJLyogSW5kZXggaW50byBsb2dfYnVmOiBtb3N0LXJlY2VudGx5LXdyaXR0ZW4tY2hhciArIDEgKi8KIAogLyoKKyAqIElmIGV4Y2x1c2l2ZV9jb25zb2xlIGlzIG5vbi1OVUxMIHRoZW4gb25seSB0aGlzIGNvbnNvbGUgaXMgdG8gYmUgcHJpbnRlZCB0by4KKyAqLworc3RhdGljIHN0cnVjdCBjb25zb2xlICpleGNsdXNpdmVfY29uc29sZTsKKworLyoKICAqCUFycmF5IG9mIGNvbnNvbGVzIGJ1aWx0IGZyb20gY29tbWFuZCBsaW5lIG9wdGlvbnMgKGNvbnNvbGU9KQogICovCiBzdHJ1Y3QgY29uc29sZV9jbWRsaW5lCkBAIC00NzYsNiArNDgxLDggQEAKIAlzdHJ1Y3QgY29uc29sZSAqY29uOwogCiAJZm9yX2VhY2hfY29uc29sZShjb24pIHsKKwkJaWYgKGV4Y2x1c2l2ZV9jb25zb2xlICYmIGNvbiAhPSBleGNsdXNpdmVfY29uc29sZSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoKGNvbi0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkgJiYgY29uLT53cml0ZSAmJgogCQkJCShjcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkgfHwKIAkJCQkoY29uLT5mbGFncyAmIENPTl9BTllUSU1FKSkpCkBAIC0xMjMwLDYgKzEyMzcsMTEgQEAKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIAljb25zb2xlX2xvY2tlZCA9IDA7CisKKwkvKiBSZWxlYXNlIHRoZSBleGNsdXNpdmVfY29uc29sZSBvbmNlIGl0IGlzIHVzZWQgKi8KKwlpZiAodW5saWtlbHkoZXhjbHVzaXZlX2NvbnNvbGUpKQorCQlleGNsdXNpdmVfY29uc29sZSA9IE5VTEw7CisKIAl1cCgmY29uc29sZV9zZW0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CiAJaWYgKHdha2Vfa2xvZ2QpCkBAIC0xMzE2LDYgKzEzMjgsMTggQEAKIH0KIEVYUE9SVF9TWU1CT0woY29uc29sZV9zdGFydCk7CiAKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSBrZWVwX2Jvb3Rjb247CisKK3N0YXRpYyBpbnQgX19pbml0IGtlZXBfYm9vdGNvbl9zZXR1cChjaGFyICpzdHIpCit7CisJa2VlcF9ib290Y29uID0gMTsKKwlwcmludGsoS0VSTl9JTkZPICJkZWJ1Zzogc2tpcCBib290IGNvbnNvbGUgZGUtcmVnaXN0cmF0aW9uLlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oImtlZXBfYm9vdGNvbiIsIGtlZXBfYm9vdGNvbl9zZXR1cCk7CisKIC8qCiAgKiBUaGUgY29uc29sZSBkcml2ZXIgY2FsbHMgdGhpcyByb3V0aW5lIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24KICAqIHRvIHJlZ2lzdGVyIHRoZSBjb25zb2xlIHByaW50aW5nIHByb2NlZHVyZSB3aXRoIHByaW50aygpIGFuZCB0bwpAQCAtMTQ1Miw2ICsxNDc2LDEyIEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2didWZfbG9jaywgZmxhZ3MpOwogCQljb25fc3RhcnQgPSBsb2dfc3RhcnQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CisJCS8qCisJCSAqIFdlJ3JlIGFib3V0IHRvIHJlcGxheSB0aGUgbG9nIGJ1ZmZlci4gIE9ubHkgZG8gdGhpcyB0byB0aGUKKwkJICoganVzdC1yZWdpc3RlcmVkIGNvbnNvbGUgdG8gYXZvaWQgZXhjZXNzaXZlIG1lc3NhZ2Ugc3BhbSB0bworCQkgKiB0aGUgYWxyZWFkeS1yZWdpc3RlcmVkIGNvbnNvbGVzLgorCQkgKi8KKwkJZXhjbHVzaXZlX2NvbnNvbGUgPSBuZXdjb247CiAJfQogCWNvbnNvbGVfdW5sb2NrKCk7CiAJY29uc29sZV9zeXNmc19ub3RpZnkoKTsKQEAgLTE0NjMsNyArMTQ5Myw5IEBACiAJICogdXNlcnMga25vdyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW4gdGhlIGtlcm5lbCdzIGxvZyBidWZmZXIgdGhhdAogCSAqIHdlbnQgdG8gdGhlIGJvb3Rjb25zb2xlICh0aGF0IHRoZXkgZG8gbm90IHNlZSBvbiB0aGUgcmVhbCBjb25zb2xlKQogCSAqLwotCWlmIChiY29uICYmICgobmV3Y29uLT5mbGFncyAmIChDT05fQ09OU0RFViB8IENPTl9CT09UKSkgPT0gQ09OX0NPTlNERVYpKSB7CisJaWYgKGJjb24gJiYKKwkgICAgKChuZXdjb24tPmZsYWdzICYgKENPTl9DT05TREVWIHwgQ09OX0JPT1QpKSA9PSBDT05fQ09OU0RFVikgJiYKKwkgICAgIWtlZXBfYm9vdGNvbikgewogCQkvKiB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0d2ljZSwgdG8gbWFrZSBzdXJlIHdlIHByaW50CiAJCSAqIGV2ZXJ5dGhpbmcgb3V0LCBiZWZvcmUgd2UgdW5yZWdpc3RlciB0aGUgY29uc29sZShzKQogCQkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCBlMjMwMmU0Li4wZmMxZWVkIDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0xMzQsMjEgKzEzNCwyNCBAQAogCQlyZXR1cm4gMDsKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGNyZWQgPSBfX3Rhc2tfY3JlZCh0YXNrKTsKLQlpZiAoKGNyZWQtPnVpZCAhPSB0Y3JlZC0+ZXVpZCB8fAotCSAgICAgY3JlZC0+dWlkICE9IHRjcmVkLT5zdWlkIHx8Ci0JICAgICBjcmVkLT51aWQgIT0gdGNyZWQtPnVpZCAgfHwKLQkgICAgIGNyZWQtPmdpZCAhPSB0Y3JlZC0+ZWdpZCB8fAotCSAgICAgY3JlZC0+Z2lkICE9IHRjcmVkLT5zZ2lkIHx8Ci0JICAgICBjcmVkLT5naWQgIT0gdGNyZWQtPmdpZCkgJiYKLQkgICAgIWNhcGFibGUoQ0FQX1NZU19QVFJBQ0UpKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KKwlpZiAoY3JlZC0+dXNlci0+dXNlcl9ucyA9PSB0Y3JlZC0+dXNlci0+dXNlcl9ucyAmJgorCSAgICAoY3JlZC0+dWlkID09IHRjcmVkLT5ldWlkICYmCisJICAgICBjcmVkLT51aWQgPT0gdGNyZWQtPnN1aWQgJiYKKwkgICAgIGNyZWQtPnVpZCA9PSB0Y3JlZC0+dWlkICAmJgorCSAgICAgY3JlZC0+Z2lkID09IHRjcmVkLT5lZ2lkICYmCisJICAgICBjcmVkLT5naWQgPT0gdGNyZWQtPnNnaWQgJiYKKwkgICAgIGNyZWQtPmdpZCA9PSB0Y3JlZC0+Z2lkKSkKKwkJZ290byBvazsKKwlpZiAobnNfY2FwYWJsZSh0Y3JlZC0+dXNlci0+dXNlcl9ucywgQ0FQX1NZU19QVFJBQ0UpKQorCQlnb3RvIG9rOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiAtRVBFUk07CitvazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlzbXBfcm1iKCk7CiAJaWYgKHRhc2stPm1tKQogCQlkdW1wYWJsZSA9IGdldF9kdW1wYWJsZSh0YXNrLT5tbSk7Ci0JaWYgKCFkdW1wYWJsZSAmJiAhY2FwYWJsZShDQVBfU1lTX1BUUkFDRSkpCisJaWYgKCFkdW1wYWJsZSAmJiAhdGFza19uc19jYXBhYmxlKHRhc2ssIENBUF9TWVNfUFRSQUNFKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXJldHVybiBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHRhc2ssIG1vZGUpOwpAQCAtMTk4LDcgKzIwMSw3IEBACiAJCWdvdG8gdW5sb2NrX3Rhc2tsaXN0OwogCiAJdGFzay0+cHRyYWNlID0gUFRfUFRSQUNFRDsKLQlpZiAoY2FwYWJsZShDQVBfU1lTX1BUUkFDRSkpCisJaWYgKHRhc2tfbnNfY2FwYWJsZSh0YXNrLCBDQVBfU1lTX1BUUkFDRSkpCiAJCXRhc2stPnB0cmFjZSB8PSBQVF9QVFJBQ0VfQ0FQOwogCiAJX19wdHJhY2VfbGluayh0YXNrLCBjdXJyZW50KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNfY291bnRlci5jIGIva2VybmVsL3Jlc19jb3VudGVyLmMKaW5kZXggYzdlYWEzNy4uMzQ2ODNlZiAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc19jb3VudGVyLmMKKysrIGIva2VybmVsL3Jlc19jb3VudGVyLmMKQEAgLTEyNiwxMCArMTI2LDI0IEBACiAJCQlwb3MsIGJ1ZiwgcyAtIGJ1Zik7CiB9CiAKKyNpZiBCSVRTX1BFUl9MT05HID09IDMyCit1NjQgcmVzX2NvdW50ZXJfcmVhZF91NjQoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCBpbnQgbWVtYmVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gKnJlc19jb3VudGVyX21lbWJlcihjb3VudGVyLCBtZW1iZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisjZWxzZQogdTY0IHJlc19jb3VudGVyX3JlYWRfdTY0KHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgaW50IG1lbWJlcikKIHsKIAlyZXR1cm4gKnJlc19jb3VudGVyX21lbWJlcihjb3VudGVyLCBtZW1iZXIpOwogfQorI2VuZGlmCiAKIGludCByZXNfY291bnRlcl9tZW1wYXJzZV93cml0ZV9zdHJhdGVneShjb25zdCBjaGFyICpidWYsCiAJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyAqcmVzKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBhMTcyNDk0Li40ODBhZGViIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNDg5Miw4ICs0ODkyLDExIEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJcGNyZWQgPSBfX3Rhc2tfY3JlZChwKTsKLQltYXRjaCA9IChjcmVkLT5ldWlkID09IHBjcmVkLT5ldWlkIHx8Ci0JCSBjcmVkLT5ldWlkID09IHBjcmVkLT51aWQpOworCWlmIChjcmVkLT51c2VyLT51c2VyX25zID09IHBjcmVkLT51c2VyLT51c2VyX25zKQorCQltYXRjaCA9IChjcmVkLT5ldWlkID09IHBjcmVkLT5ldWlkIHx8CisJCQkgY3JlZC0+ZXVpZCA9PSBwY3JlZC0+dWlkKTsKKwllbHNlCisJCW1hdGNoID0gZmFsc2U7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIG1hdGNoOwogfQpAQCAtNTIyMSw3ICs1MjI0LDcgQEAKIAkJZ290byBvdXRfZnJlZV9jcHVzX2FsbG93ZWQ7CiAJfQogCXJldHZhbCA9IC1FUEVSTTsKLQlpZiAoIWNoZWNrX3NhbWVfb3duZXIocCkgJiYgIWNhcGFibGUoQ0FQX1NZU19OSUNFKSkKKwlpZiAoIWNoZWNrX3NhbWVfb3duZXIocCkgJiYgIXRhc2tfbnNfY2FwYWJsZShwLCBDQVBfU1lTX05JQ0UpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlyZXR2YWwgPSBzZWN1cml0eV90YXNrX3NldHNjaGVkdWxlcihwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCA0ZTNjZmYxLi4zMjRlZmY1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC02MzYsMTMgKzYzNiwzMyBAQAogfQogCiAvKgorICogY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBmcm9tIGNoZWNrX2tpbGxfcGVybWlzc2lvbigpCisgKi8KK3N0YXRpYyBpbnQga2lsbF9va19ieV9jcmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKK3sKKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOworCWNvbnN0IHN0cnVjdCBjcmVkICp0Y3JlZCA9IF9fdGFza19jcmVkKHQpOworCisJaWYgKGNyZWQtPnVzZXItPnVzZXJfbnMgPT0gdGNyZWQtPnVzZXItPnVzZXJfbnMgJiYKKwkgICAgKGNyZWQtPmV1aWQgPT0gdGNyZWQtPnN1aWQgfHwKKwkgICAgIGNyZWQtPmV1aWQgPT0gdGNyZWQtPnVpZCB8fAorCSAgICAgY3JlZC0+dWlkICA9PSB0Y3JlZC0+c3VpZCB8fAorCSAgICAgY3JlZC0+dWlkICA9PSB0Y3JlZC0+dWlkKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobnNfY2FwYWJsZSh0Y3JlZC0+dXNlci0+dXNlcl9ucywgQ0FQX0tJTEwpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKgogICogQmFkIHBlcm1pc3Npb25zIGZvciBzZW5kaW5nIHRoZSBzaWduYWwKICAqIC0gdGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIFJDVSByZWFkIGxvY2sKICAqLwogc3RhdGljIGludCBjaGVja19raWxsX3Blcm1pc3Npb24oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sCiAJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKLQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgKnRjcmVkOwogCXN0cnVjdCBwaWQgKnNpZDsKIAlpbnQgZXJyb3I7CiAKQEAgLTY1NiwxNCArNjc2LDggQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQl0Y3JlZCA9IF9fdGFza19jcmVkKHQpOwogCWlmICghc2FtZV90aHJlYWRfZ3JvdXAoY3VycmVudCwgdCkgJiYKLQkgICAgKGNyZWQtPmV1aWQgXiB0Y3JlZC0+c3VpZCkgJiYKLQkgICAgKGNyZWQtPmV1aWQgXiB0Y3JlZC0+dWlkKSAmJgotCSAgICAoY3JlZC0+dWlkICBeIHRjcmVkLT5zdWlkKSAmJgotCSAgICAoY3JlZC0+dWlkICBeIHRjcmVkLT51aWQpICYmCi0JICAgICFjYXBhYmxlKENBUF9LSUxMKSkgeworCSAgICAha2lsbF9va19ieV9jcmVkKHQpKSB7CiAJCXN3aXRjaCAoc2lnKSB7CiAJCWNhc2UgU0lHQ09OVDoKIAkJCXNpZCA9IHRhc2tfc2Vzc2lvbih0KTsKQEAgLTI0MjEsOSArMjQzNSwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCS8qIE5vdCBldmVuIHJvb3QgY2FuIHByZXRlbmQgdG8gc2VuZCBzaWduYWxzIGZyb20gdGhlIGtlcm5lbC4KLQkgICBOb3IgY2FuIHRoZXkgaW1wZXJzb25hdGUgYSBraWxsKCksIHdoaWNoIGFkZHMgc291cmNlIGluZm8uICAqLwotCWlmIChpbmZvLnNpX2NvZGUgPj0gMCkKKwkgKiBOb3IgY2FuIHRoZXkgaW1wZXJzb25hdGUgYSBraWxsKCkvdGdraWxsKCksIHdoaWNoIGFkZHMgc291cmNlIGluZm8uCisJICovCisJaWYgKGluZm8uc2lfY29kZSAhPSBTSV9RVUVVRSkgeworCQkvKiBXZSB1c2VkIHRvIGFsbG93IGFueSA8IDAgc2lfY29kZSAqLworCQlXQVJOX09OX09OQ0UoaW5mby5zaV9jb2RlIDwgMCk7CiAJCXJldHVybiAtRVBFUk07CisJfQogCWluZm8uc2lfc2lnbm8gPSBzaWc7CiAKIAkvKiBQT1NJWC4xYiBkb2Vzbid0IG1lbnRpb24gcHJvY2VzcyBncm91cHMuICAqLwpAQCAtMjQzNyw5ICsyNDU1LDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogTm90IGV2ZW4gcm9vdCBjYW4gcHJldGVuZCB0byBzZW5kIHNpZ25hbHMgZnJvbSB0aGUga2VybmVsLgotCSAgIE5vciBjYW4gdGhleSBpbXBlcnNvbmF0ZSBhIGtpbGwoKSwgd2hpY2ggYWRkcyBzb3VyY2UgaW5mby4gICovCi0JaWYgKGluZm8tPnNpX2NvZGUgPj0gMCkKKwkgKiBOb3IgY2FuIHRoZXkgaW1wZXJzb25hdGUgYSBraWxsKCkvdGdraWxsKCksIHdoaWNoIGFkZHMgc291cmNlIGluZm8uCisJICovCisJaWYgKGluZm8tPnNpX2NvZGUgIT0gU0lfUVVFVUUpIHsKKwkJLyogV2UgdXNlZCB0byBhbGxvdyBhbnkgPCAwIHNpX2NvZGUgKi8KKwkJV0FSTl9PTl9PTkNFKGluZm8tPnNpX2NvZGUgPCAwKTsKIAkJcmV0dXJuIC1FUEVSTTsKKwl9CiAJaW5mby0+c2lfc2lnbm8gPSBzaWc7CiAKIAlyZXR1cm4gZG9fc2VuZF9zcGVjaWZpYyh0Z2lkLCBwaWQsIHNpZywgaW5mbyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc21wLmMgYi9rZXJuZWwvc21wLmMKaW5kZXggN2NiZDBmMi4uNzNhMTk1MSAxMDA2NDQKLS0tIGEva2VybmVsL3NtcC5jCisrKyBiL2tlcm5lbC9zbXAuYwpAQCAtNjA0LDYgKzYwNCw4NyBAQAogfQogI2VuZGlmIC8qIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTICovCiAKKy8qIFNldHVwIGNvbmZpZ3VyZWQgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyB0byBhY3RpdmF0ZSAqLwordW5zaWduZWQgaW50IHNldHVwX21heF9jcHVzID0gTlJfQ1BVUzsKK0VYUE9SVF9TWU1CT0woc2V0dXBfbWF4X2NwdXMpOworCisKKy8qCisgKiBTZXR1cCByb3V0aW5lIGZvciBjb250cm9sbGluZyBTTVAgYWN0aXZhdGlvbgorICoKKyAqIENvbW1hbmQtbGluZSBvcHRpb24gb2YgIm5vc21wIiBvciAibWF4Y3B1cz0wIiB3aWxsIGRpc2FibGUgU01QCisgKiBhY3RpdmF0aW9uIGVudGlyZWx5ICh0aGUgTVBTIHRhYmxlIHByb2JlIHN0aWxsIGhhcHBlbnMsIHRob3VnaCkuCisgKgorICogQ29tbWFuZC1saW5lIG9wdGlvbiBvZiAibWF4Y3B1cz08TlVNPiIsIHdoZXJlIDxOVU0+IGlzIGFuIGludGVnZXIKKyAqIGdyZWF0ZXIgdGhhbiAwLCBsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMgYWN0aXZhdGVkIGluCisgKiBTTVAgbW9kZSB0byA8TlVNPi4KKyAqLworCit2b2lkIF9fd2VhayBhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQodm9pZCkgeyB9CisKK3N0YXRpYyBpbnQgX19pbml0IG5vc21wKGNoYXIgKnN0cikKK3sKKwlzZXR1cF9tYXhfY3B1cyA9IDA7CisJYXJjaF9kaXNhYmxlX3NtcF9zdXBwb3J0KCk7CisKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oIm5vc21wIiwgbm9zbXApOworCisvKiB0aGlzIGlzIGhhcmQgbGltaXQgKi8KK3N0YXRpYyBpbnQgX19pbml0IG5yY3B1cyhjaGFyICpzdHIpCit7CisJaW50IG5yX2NwdXM7CisKKwlnZXRfb3B0aW9uKCZzdHIsICZucl9jcHVzKTsKKwlpZiAobnJfY3B1cyA+IDAgJiYgbnJfY3B1cyA8IG5yX2NwdV9pZHMpCisJCW5yX2NwdV9pZHMgPSBucl9jcHVzOworCisJcmV0dXJuIDA7Cit9CisKK2Vhcmx5X3BhcmFtKCJucl9jcHVzIiwgbnJjcHVzKTsKKworc3RhdGljIGludCBfX2luaXQgbWF4Y3B1cyhjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmc2V0dXBfbWF4X2NwdXMpOworCWlmIChzZXR1cF9tYXhfY3B1cyA9PSAwKQorCQlhcmNoX2Rpc2FibGVfc21wX3N1cHBvcnQoKTsKKworCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgibWF4Y3B1cyIsIG1heGNwdXMpOworCisvKiBTZXR1cCBudW1iZXIgb2YgcG9zc2libGUgcHJvY2Vzc29yIGlkcyAqLworaW50IG5yX2NwdV9pZHMgX19yZWFkX21vc3RseSA9IE5SX0NQVVM7CitFWFBPUlRfU1lNQk9MKG5yX2NwdV9pZHMpOworCisvKiBBbiBhcmNoIG1heSBzZXQgbnJfY3B1X2lkcyBlYXJsaWVyIGlmIG5lZWRlZCwgc28gdGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgKi8KK3ZvaWQgX19pbml0IHNldHVwX25yX2NwdV9pZHModm9pZCkKK3sKKwlucl9jcHVfaWRzID0gZmluZF9sYXN0X2JpdChjcHVtYXNrX2JpdHMoY3B1X3Bvc3NpYmxlX21hc2spLE5SX0NQVVMpICsgMTsKK30KKworLyogQ2FsbGVkIGJ5IGJvb3QgcHJvY2Vzc29yIHRvIGFjdGl2YXRlIHRoZSByZXN0LiAqLwordm9pZCBfX2luaXQgc21wX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdXNlcnNwYWNlIC0tUlIgKi8KKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJaWYgKG51bV9vbmxpbmVfY3B1cygpID49IHNldHVwX21heF9jcHVzKQorCQkJYnJlYWs7CisJCWlmICghY3B1X29ubGluZShjcHUpKQorCQkJY3B1X3VwKGNwdSk7CisJfQorCisJLyogQW55IGNsZWFudXAgd29yayAqLworCXByaW50ayhLRVJOX0lORk8gIkJyb3VnaHQgdXAgJWxkIENQVXNcbiIsIChsb25nKW51bV9vbmxpbmVfY3B1cygpKTsKKwlzbXBfY3B1c19kb25lKHNldHVwX21heF9jcHVzKTsKK30KKwogLyoKICAqIENhbGwgYSBmdW5jdGlvbiBvbiBhbGwgcHJvY2Vzc29ycy4gIE1heSBiZSB1c2VkIGR1cmluZyBlYXJseSBib290IHdoaWxlCiAgKiBlYXJseV9ib290X2lycXNfZGlzYWJsZWQgaXMgc2V0LiAgVXNlIGxvY2FsX2lycV9zYXZlL3Jlc3RvcmUoKSBpbnN0ZWFkCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCA1NmU1ZGVjLi43MzVkODcwIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTg0NSw3ICs4NDUsMTAgQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CiAJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46Ci0JCXAgPSBrdGhyZWFkX2NyZWF0ZShydW5fa3NvZnRpcnFkLCBoY3B1LCAia3NvZnRpcnFkLyVkIiwgaG90Y3B1KTsKKwkJcCA9IGt0aHJlYWRfY3JlYXRlX29uX25vZGUocnVuX2tzb2Z0aXJxZCwKKwkJCQkJICAgaGNwdSwKKwkJCQkJICAgY3B1X3RvX25vZGUoaG90Y3B1KSwKKwkJCQkJICAgImtzb2Z0aXJxZC8lZCIsIGhvdGNwdSk7CiAJCWlmIChJU19FUlIocCkpIHsKIAkJCXByaW50aygia3NvZnRpcnFkIGZvciAlaSBmYWlsZWRcbiIsIGhvdGNwdSk7CiAJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhQVFJfRVJSKHApKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwppbmRleCAyZGY4MjBiLi5lMzUxNmIyIDEwMDY0NAotLS0gYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKKysrIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCkBAIC0zMDEsOCArMzAxLDEwIEBACiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKIAkJQlVHX09OKHN0b3BwZXItPnRocmVhZCB8fCBzdG9wcGVyLT5lbmFibGVkIHx8CiAJCSAgICAgICAhbGlzdF9lbXB0eSgmc3RvcHBlci0+d29ya3MpKTsKLQkJcCA9IGt0aHJlYWRfY3JlYXRlKGNwdV9zdG9wcGVyX3RocmVhZCwgc3RvcHBlciwgIm1pZ3JhdGlvbi8lZCIsCi0JCQkJICAgY3B1KTsKKwkJcCA9IGt0aHJlYWRfY3JlYXRlX29uX25vZGUoY3B1X3N0b3BwZXJfdGhyZWFkLAorCQkJCQkgICBzdG9wcGVyLAorCQkJCQkgICBjcHVfdG9fbm9kZShjcHUpLAorCQkJCQkgICAibWlncmF0aW9uLyVkIiwgY3B1KTsKIAkJaWYgKElTX0VSUihwKSkKIAkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKFBUUl9FUlIocCkpOwogCQlnZXRfdGFza19zdHJ1Y3QocCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMWFkNDhiMy4uYWY0NjhlZCAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTIwLDE2ICsxMjAsMzMgQEAKIHZvaWQgKCpwbV9wb3dlcl9vZmZfcHJlcGFyZSkodm9pZCk7CiAKIC8qCisgKiBSZXR1cm5zIHRydWUgaWYgY3VycmVudCdzIGV1aWQgaXMgc2FtZSBhcyBwJ3MgdWlkIG9yIGV1aWQsCisgKiBvciBoYXMgQ0FQX1NZU19OSUNFIHRvIHAncyB1c2VyX25zLgorICoKKyAqIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2ssIGNyZWRzIGFyZSBzYWZlCisgKi8KK3N0YXRpYyBib29sIHNldF9vbmVfcHJpb19wZXJtKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpLCAqcGNyZWQgPSBfX3Rhc2tfY3JlZChwKTsKKworCWlmIChwY3JlZC0+dXNlci0+dXNlcl9ucyA9PSBjcmVkLT51c2VyLT51c2VyX25zICYmCisJICAgIChwY3JlZC0+dWlkICA9PSBjcmVkLT5ldWlkIHx8CisJICAgICBwY3JlZC0+ZXVpZCA9PSBjcmVkLT5ldWlkKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKG5zX2NhcGFibGUocGNyZWQtPnVzZXItPnVzZXJfbnMsIENBUF9TWVNfTklDRSkpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworLyoKICAqIHNldCB0aGUgcHJpb3JpdHkgb2YgYSB0YXNrCiAgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrCiAgKi8KIHN0YXRpYyBpbnQgc2V0X29uZV9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pY2V2YWwsIGludCBlcnJvcikKIHsKLQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpLCAqcGNyZWQgPSBfX3Rhc2tfY3JlZChwKTsKIAlpbnQgbm9fbmljZTsKIAotCWlmIChwY3JlZC0+dWlkICAhPSBjcmVkLT5ldWlkICYmCi0JICAgIHBjcmVkLT5ldWlkICE9IGNyZWQtPmV1aWQgJiYgIWNhcGFibGUoQ0FQX1NZU19OSUNFKSkgeworCWlmICghc2V0X29uZV9wcmlvX3Blcm0ocCkpIHsKIAkJZXJyb3IgPSAtRVBFUk07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTUwNiw3ICs1MjMsNyBAQAogCWlmIChyZ2lkICE9IChnaWRfdCkgLTEpIHsKIAkJaWYgKG9sZC0+Z2lkID09IHJnaWQgfHwKIAkJICAgIG9sZC0+ZWdpZCA9PSByZ2lkIHx8Ci0JCSAgICBjYXBhYmxlKENBUF9TRVRHSUQpKQorCQkgICAgbnNvd25fY2FwYWJsZShDQVBfU0VUR0lEKSkKIAkJCW5ldy0+Z2lkID0gcmdpZDsKIAkJZWxzZQogCQkJZ290byBlcnJvcjsKQEAgLTUxNSw3ICs1MzIsNyBAQAogCQlpZiAob2xkLT5naWQgPT0gZWdpZCB8fAogCQkgICAgb2xkLT5lZ2lkID09IGVnaWQgfHwKIAkJICAgIG9sZC0+c2dpZCA9PSBlZ2lkIHx8Ci0JCSAgICBjYXBhYmxlKENBUF9TRVRHSUQpKQorCQkgICAgbnNvd25fY2FwYWJsZShDQVBfU0VUR0lEKSkKIAkJCW5ldy0+ZWdpZCA9IGVnaWQ7CiAJCWVsc2UKIAkJCWdvdG8gZXJyb3I7CkBAIC01NTAsNyArNTY3LDcgQEAKIAlvbGQgPSBjdXJyZW50X2NyZWQoKTsKIAogCXJldHZhbCA9IC1FUEVSTTsKLQlpZiAoY2FwYWJsZShDQVBfU0VUR0lEKSkKKwlpZiAobnNvd25fY2FwYWJsZShDQVBfU0VUR0lEKSkKIAkJbmV3LT5naWQgPSBuZXctPmVnaWQgPSBuZXctPnNnaWQgPSBuZXctPmZzZ2lkID0gZ2lkOwogCWVsc2UgaWYgKGdpZCA9PSBvbGQtPmdpZCB8fCBnaWQgPT0gb2xkLT5zZ2lkKQogCQluZXctPmVnaWQgPSBuZXctPmZzZ2lkID0gZ2lkOwpAQCAtNjE3LDcgKzYzNCw3IEBACiAJCW5ldy0+dWlkID0gcnVpZDsKIAkJaWYgKG9sZC0+dWlkICE9IHJ1aWQgJiYKIAkJICAgIG9sZC0+ZXVpZCAhPSBydWlkICYmCi0JCSAgICAhY2FwYWJsZShDQVBfU0VUVUlEKSkKKwkJICAgICFuc293bl9jYXBhYmxlKENBUF9TRVRVSUQpKQogCQkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTYyNiw3ICs2NDMsNyBAQAogCQlpZiAob2xkLT51aWQgIT0gZXVpZCAmJgogCQkgICAgb2xkLT5ldWlkICE9IGV1aWQgJiYKIAkJICAgIG9sZC0+c3VpZCAhPSBldWlkICYmCi0JCSAgICAhY2FwYWJsZShDQVBfU0VUVUlEKSkKKwkJICAgICFuc293bl9jYXBhYmxlKENBUF9TRVRVSUQpKQogCQkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTY3NCw3ICs2OTEsNyBAQAogCW9sZCA9IGN1cnJlbnRfY3JlZCgpOwogCiAJcmV0dmFsID0gLUVQRVJNOwotCWlmIChjYXBhYmxlKENBUF9TRVRVSUQpKSB7CisJaWYgKG5zb3duX2NhcGFibGUoQ0FQX1NFVFVJRCkpIHsKIAkJbmV3LT5zdWlkID0gbmV3LT51aWQgPSB1aWQ7CiAJCWlmICh1aWQgIT0gb2xkLT51aWQpIHsKIAkJCXJldHZhbCA9IHNldF91c2VyKG5ldyk7CkBAIC03MTYsNyArNzMzLDcgQEAKIAlvbGQgPSBjdXJyZW50X2NyZWQoKTsKIAogCXJldHZhbCA9IC1FUEVSTTsKLQlpZiAoIWNhcGFibGUoQ0FQX1NFVFVJRCkpIHsKKwlpZiAoIW5zb3duX2NhcGFibGUoQ0FQX1NFVFVJRCkpIHsKIAkJaWYgKHJ1aWQgIT0gKHVpZF90KSAtMSAmJiBydWlkICE9IG9sZC0+dWlkICYmCiAJCSAgICBydWlkICE9IG9sZC0+ZXVpZCAgJiYgcnVpZCAhPSBvbGQtPnN1aWQpCiAJCQlnb3RvIGVycm9yOwpAQCAtNzgwLDcgKzc5Nyw3IEBACiAJb2xkID0gY3VycmVudF9jcmVkKCk7CiAKIAlyZXR2YWwgPSAtRVBFUk07Ci0JaWYgKCFjYXBhYmxlKENBUF9TRVRHSUQpKSB7CisJaWYgKCFuc293bl9jYXBhYmxlKENBUF9TRVRHSUQpKSB7CiAJCWlmIChyZ2lkICE9IChnaWRfdCkgLTEgJiYgcmdpZCAhPSBvbGQtPmdpZCAmJgogCQkgICAgcmdpZCAhPSBvbGQtPmVnaWQgICYmIHJnaWQgIT0gb2xkLT5zZ2lkKQogCQkJZ290byBlcnJvcjsKQEAgLTg0MCw3ICs4NTcsNyBAQAogCiAJaWYgKHVpZCA9PSBvbGQtPnVpZCAgfHwgdWlkID09IG9sZC0+ZXVpZCAgfHwKIAkgICAgdWlkID09IG9sZC0+c3VpZCB8fCB1aWQgPT0gb2xkLT5mc3VpZCB8fAotCSAgICBjYXBhYmxlKENBUF9TRVRVSUQpKSB7CisJICAgIG5zb3duX2NhcGFibGUoQ0FQX1NFVFVJRCkpIHsKIAkJaWYgKHVpZCAhPSBvbGRfZnN1aWQpIHsKIAkJCW5ldy0+ZnN1aWQgPSB1aWQ7CiAJCQlpZiAoc2VjdXJpdHlfdGFza19maXhfc2V0dWlkKG5ldywgb2xkLCBMU01fU0VUSURfRlMpID09IDApCkBAIC04NzMsNyArODkwLDcgQEAKIAogCWlmIChnaWQgPT0gb2xkLT5naWQgIHx8IGdpZCA9PSBvbGQtPmVnaWQgIHx8CiAJICAgIGdpZCA9PSBvbGQtPnNnaWQgfHwgZ2lkID09IG9sZC0+ZnNnaWQgfHwKLQkgICAgY2FwYWJsZShDQVBfU0VUR0lEKSkgeworCSAgICBuc293bl9jYXBhYmxlKENBUF9TRVRHSUQpKSB7CiAJCWlmIChnaWQgIT0gb2xkX2ZzZ2lkKSB7CiAJCQluZXctPmZzZ2lkID0gZ2lkOwogCQkJZ290byBjaGFuZ2Vfb2theTsKQEAgLTExODEsOCArMTE5OCw5IEBACiAJaW50IGVycm5vOwogCWNoYXIgdG1wW19fTkVXX1VUU19MRU5dOwogCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCWlmICghbnNfY2FwYWJsZShjdXJyZW50LT5uc3Byb3h5LT51dHNfbnMtPnVzZXJfbnMsIENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOworCiAJaWYgKGxlbiA8IDAgfHwgbGVuID4gX19ORVdfVVRTX0xFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZG93bl93cml0ZSgmdXRzX3NlbSk7CkBAIC0xMjMwLDcgKzEyNDgsNyBAQAogCWludCBlcnJubzsKIAljaGFyIHRtcFtfX05FV19VVFNfTEVOXTsKIAotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwlpZiAoIW5zX2NhcGFibGUoY3VycmVudC0+bnNwcm94eS0+dXRzX25zLT51c2VyX25zLCBDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAlpZiAobGVuIDwgMCB8fCBsZW4gPiBfX05FV19VVFNfTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNDUsNiArMTM2Myw4IEBACiAJcmxpbSA9IHRzay0+c2lnbmFsLT5ybGltICsgcmVzb3VyY2U7CiAJdGFza19sb2NrKHRzay0+Z3JvdXBfbGVhZGVyKTsKIAlpZiAobmV3X3JsaW0pIHsKKwkJLyogS2VlcCB0aGUgY2FwYWJsZSBjaGVjayBhZ2FpbnN0IGluaXRfdXNlcl9ucyB1bnRpbAorCQkgICBjZ3JvdXBzIGNhbiBjb250YWluIGFsbCBsaW1pdHMgKi8KIAkJaWYgKG5ld19ybGltLT5ybGltX21heCA+IHJsaW0tPnJsaW1fbWF4ICYmCiAJCQkJIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpCiAJCQlyZXR2YWwgPSAtRVBFUk07CkBAIC0xMzg4LDE5ICsxNDA4LDIyIEBACiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKSwgKnRjcmVkOwogCi0JdGNyZWQgPSBfX3Rhc2tfY3JlZCh0YXNrKTsKLQlpZiAoY3VycmVudCAhPSB0YXNrICYmCi0JICAgIChjcmVkLT51aWQgIT0gdGNyZWQtPmV1aWQgfHwKLQkgICAgIGNyZWQtPnVpZCAhPSB0Y3JlZC0+c3VpZCB8fAotCSAgICAgY3JlZC0+dWlkICE9IHRjcmVkLT51aWQgIHx8Ci0JICAgICBjcmVkLT5naWQgIT0gdGNyZWQtPmVnaWQgfHwKLQkgICAgIGNyZWQtPmdpZCAhPSB0Y3JlZC0+c2dpZCB8fAotCSAgICAgY3JlZC0+Z2lkICE9IHRjcmVkLT5naWQpICYmCi0JICAgICAhY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkgewotCQlyZXR1cm4gLUVQRVJNOwotCX0KKwlpZiAoY3VycmVudCA9PSB0YXNrKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCXRjcmVkID0gX190YXNrX2NyZWQodGFzayk7CisJaWYgKGNyZWQtPnVzZXItPnVzZXJfbnMgPT0gdGNyZWQtPnVzZXItPnVzZXJfbnMgJiYKKwkgICAgKGNyZWQtPnVpZCA9PSB0Y3JlZC0+ZXVpZCAmJgorCSAgICAgY3JlZC0+dWlkID09IHRjcmVkLT5zdWlkICYmCisJICAgICBjcmVkLT51aWQgPT0gdGNyZWQtPnVpZCAgJiYKKwkgICAgIGNyZWQtPmdpZCA9PSB0Y3JlZC0+ZWdpZCAmJgorCSAgICAgY3JlZC0+Z2lkID09IHRjcmVkLT5zZ2lkICYmCisJICAgICBjcmVkLT5naWQgPT0gdGNyZWQtPmdpZCkpCisJCXJldHVybiAwOworCWlmIChuc19jYXBhYmxlKHRjcmVkLT51c2VyLT51c2VyX25zLCBDQVBfU1lTX1JFU09VUkNFKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVQRVJNOwogfQogCiBTWVNDQUxMX0RFRklORTQocHJsaW1pdDY0LCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBpbnQsIHJlc291cmNlLApkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDQwMjQ1ZDY5Li5jMGJiMzI0IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xMTcsNiArMTE3LDcgQEAKIHN0YXRpYyBpbnQgemVybzsKIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgb25lID0gMTsKIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdHdvID0gMjsKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGhyZWUgPSAzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgb25lX3VsID0gMTsKIHN0YXRpYyBpbnQgb25lX2h1bmRyZWQgPSAxMDA7CiAjaWZkZWYgQ09ORklHX1BSSU5USwpAQCAtMTY5LDYgKzE3MCwxMSBAQAogCQkJICAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BSSU5USworc3RhdGljIGludCBwcm9jX2RtZXNnX3Jlc3RyaWN0KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKIC8qIE5vdGU6IHN5c3JxIGNvZGUgdXNlcyBpdCdzIG93biBwcml2YXRlIGNvcHkgKi8KIHN0YXRpYyBpbnQgX19zeXNycV9lbmFibGVkID0gU1lTUlFfREVGQVVMVF9FTkFCTEU7CkBAIC03MDYsNyArNzEyLDcgQEAKIAkJLmRhdGEJCT0gJmtwdHJfcmVzdHJpY3QsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG1lc2dfcmVzdHJpY3QsCiAJCS5leHRyYTEJCT0gJnplcm8sCiAJCS5leHRyYTIJCT0gJnR3bywKIAl9LApAQCAtOTcxLDE0ICs5NzcsMTggQEAKIAkJLmRhdGEJCT0gJnN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSwKIAkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX292ZXJjb21taXRfbWVtb3J5KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdHdvLAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicGFuaWNfb25fb29tIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9wYW5pY19vbl9vb20sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl9vb20pLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ0d28sCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJvb21fa2lsbF9hbGxvY2F0aW5nX3Rhc2siLApAQCAtMTAwNiw3ICsxMDE2LDggQEAKIAkJLmRhdGEJCT0gJnBhZ2VfY2x1c3RlciwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gImRpcnR5X2JhY2tncm91bmRfcmF0aW8iLApAQCAtMTA1NCw3ICsxMDY1LDggQEAKIAkJLmRhdGEJCT0gJmRpcnR5X2V4cGlyZV9pbnRlcnZhbCwKIAkJLm1heGxlbgkJPSBzaXplb2YoZGlydHlfZXhwaXJlX2ludGVydmFsKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gIm5yX3BkZmx1c2hfdGhyZWFkcyIsCkBAIC0xMTMwLDYgKzExNDIsOCBAQAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gZHJvcF9jYWNoZXNfc3lzY3RsX2hhbmRsZXIsCisJCS5leHRyYTEJCT0gJm9uZSwKKwkJLmV4dHJhMgkJPSAmdGhyZWUsCiAJfSwKICNpZmRlZiBDT05GSUdfQ09NUEFDVElPTgogCXsKQEAgLTIzODUsNiArMjM5OSwxNyBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitzdGF0aWMgaW50IHByb2NfZG1lc2dfcmVzdHJpY3Qoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQl2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAod3JpdGUgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworfQorI2VuZGlmCisKIHN0cnVjdCBkb19wcm9jX2RvaW50dmVjX21pbm1heF9jb252X3BhcmFtIHsKIAlpbnQgKm1pbjsKIAlpbnQgKm1heDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwppbmRleCAxMGI5MGQ4Li40ZTQ5MzJhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKKysrIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCkBAIC0xMTEsMTEgKzExMSw5IEBACiAJCWNvbnN0IGNoYXIgKmZhaWwgPSBOVUxMOwogCiAJCWlmICh0YWJsZS0+cGFyZW50KSB7Ci0JCQlpZiAodGFibGUtPnByb2NuYW1lICYmICF0YWJsZS0+cGFyZW50LT5wcm9jbmFtZSkKKwkJCWlmICghdGFibGUtPnBhcmVudC0+cHJvY25hbWUpCiAJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiUGFyZW50IHdpdGhvdXQgcHJvY25hbWUiKTsKIAkJfQotCQlpZiAoIXRhYmxlLT5wcm9jbmFtZSkKLQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgIk5vIHByb2NuYW1lIik7CiAJCWlmICh0YWJsZS0+Y2hpbGQpIHsKIAkJCWlmICh0YWJsZS0+ZGF0YSkKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJEaXJlY3Rvcnkgd2l0aCBkYXRhPyIpOwpAQCAtMTQ0LDEzICsxNDIsOSBAQAogCQkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJObyBtYXhsZW4iKTsKIAkJCX0KICNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKLQkJCWlmICh0YWJsZS0+cHJvY25hbWUgJiYgIXRhYmxlLT5wcm9jX2hhbmRsZXIpCisJCQlpZiAoIXRhYmxlLT5wcm9jX2hhbmRsZXIpCiAJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiTm8gcHJvY19oYW5kbGVyIik7CiAjZW5kaWYKLSNpZiAwCi0JCQlpZiAoIXRhYmxlLT5wcm9jbmFtZSAmJiB0YWJsZS0+cHJvY19oYW5kbGVyKQotCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgInByb2NfaGFuZGxlciB3aXRob3V0IHByb2NuYW1lIik7Ci0jZW5kaWYKIAkJCXN5c2N0bF9jaGVja19sZWFmKG5hbWVzcGFjZXMsIHRhYmxlLCAmZmFpbCk7CiAJCX0KIAkJaWYgKHRhYmxlLT5tb2RlID4gMDc3NykKZGlmZiAtLWdpdCBhL2tlcm5lbC90YXNrc3RhdHMuYyBiL2tlcm5lbC90YXNrc3RhdHMuYwppbmRleCAzOTcxYzZiLi45ZmZlYTM2IDEwMDY0NAotLS0gYS9rZXJuZWwvdGFza3N0YXRzLmMKKysrIGIva2VybmVsL3Rhc2tzdGF0cy5jCkBAIC02ODUsNyArNjg1LDcgQEAKIAkJZ290byBlcnJfY2dyb3VwX29wczsKIAogCWZhbWlseV9yZWdpc3RlcmVkID0gMTsKLQlwcmludGsoInJlZ2lzdGVyZWQgdGFza3N0YXRzIHZlcnNpb24gJWRcbiIsIFRBU0tTVEFUU19HRU5MX1ZFUlNJT04pOworCXByX2luZm8oInJlZ2lzdGVyZWQgdGFza3N0YXRzIHZlcnNpb24gJWRcbiIsIFRBU0tTVEFUU19HRU5MX1ZFUlNJT04pOwogCXJldHVybiAwOwogZXJyX2Nncm91cF9vcHM6CiAJZ2VubF91bnJlZ2lzdGVyX29wcygmZmFtaWx5LCAmdGFza3N0YXRzX29wcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IDE0Njc0ZGMuLjYxZDdkNTlmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvS2NvbmZpZworKysgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJICBUaGlzIHRyYWNlciBwcm9maWxlcyBhbGwgdGhlIHRoZSBsaWtlbHkgYW5kIHVubGlrZWx5IG1hY3JvcwogCSAgaW4gdGhlIGtlcm5lbC4gSXQgd2lsbCBkaXNwbGF5IHRoZSByZXN1bHRzIGluOgogCi0JICAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3Byb2ZpbGVfYW5ub3RhdGVkX2JyYW5jaAorCSAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZV9zdGF0L2JyYW5jaF9hbm5vdGF0ZWQKIAogCSAgTm90ZTogdGhpcyB3aWxsIGFkZCBhIHNpZ25pZmljYW50IG92ZXJoZWFkOyBvbmx5IHR1cm4gdGhpcwogCSAgb24gaWYgeW91IG5lZWQgdG8gcHJvZmlsZSB0aGUgc3lzdGVtJ3MgdXNlIG9mIHRoZXNlIG1hY3Jvcy4KQEAgLTI4OCw3ICsyODgsNyBAQAogCSAgdGFrZW4gaW4gdGhlIGtlcm5lbCBpcyByZWNvcmRlZCB3aGV0aGVyIGl0IGhpdCBvciBtaXNzLgogCSAgVGhlIHJlc3VsdHMgd2lsbCBiZSBkaXNwbGF5ZWQgaW46CiAKLQkgIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvcHJvZmlsZV9icmFuY2gKKwkgIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2Vfc3RhdC9icmFuY2hfYWxsCiAKIAkgIFRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyB0aGUgbGlrZWx5L3VubGlrZWx5IHByb2ZpbGVyLgogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IGRiN2I0MzkuLmQ5YzhiY2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC02NjgsNyArNjY4LDcgQEAKICAqIHRoZSByZWFkZXIgcGFnZSkuIEJ1dCBpZiB0aGUgbmV4dCBwYWdlIGlzIGEgaGVhZGVyIHBhZ2UsCiAgKiBpdHMgZmxhZ3Mgd2lsbCBiZSBub24gemVyby4KICAqLwotc3RhdGljIGludCBpbmxpbmUKK3N0YXRpYyBpbmxpbmUgaW50CiByYl9pc19oZWFkX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCiAJCXN0cnVjdCBidWZmZXJfcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCmluZGV4IDMyNDliNGYuLjgwMDhkZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwpAQCAtMzkxLDggKzM5MSw4IEBACiAJCSAgICAgICBzdHJ1Y3QgZmlsdGVyX3ByZWQgKm9wLCB2b2lkICpyZWMpCiB7CiAJc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkOworCWludCBtYXRjaCA9IDA7CiAJaW50IHR5cGU7Ci0JaW50IG1hdGNoOwogCWludCBpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC91aWQxNi5jIGIva2VybmVsL3VpZDE2LmMKaW5kZXggNDE5MjA5OC4uNTFjNmU4OSAxMDA2NDQKLS0tIGEva2VybmVsL3VpZDE2LmMKKysrIGIva2VybmVsL3VpZDE2LmMKQEAgLTE4OSw3ICsxODksNyBAQAogCXN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvOwogCWludCByZXR2YWw7CiAKLQlpZiAoIWNhcGFibGUoQ0FQX1NFVEdJRCkpCisJaWYgKCFuc293bl9jYXBhYmxlKENBUF9TRVRHSUQpKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmICgodW5zaWduZWQpZ2lkc2V0c2l6ZSA+IE5HUk9VUFNfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyLmMgYi9rZXJuZWwvdXNlci5jCmluZGV4IDVjNTk4Y2EuLjllMDNlOWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtMTcsOSArMTcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgogCisvKgorICogdXNlcm5zIGNvdW50IGlzIDEgZm9yIHJvb3QgdXNlciwgMSBmb3IgaW5pdF91dHNfbnMsCisgKiBhbmQgMSBmb3IuLi4gPworICovCiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgaW5pdF91c2VyX25zID0gewogCS5rcmVmID0gewotCQkucmVmY291bnQJPSBBVE9NSUNfSU5JVCgyKSwKKwkJLnJlZmNvdW50CT0gQVRPTUlDX0lOSVQoMyksCiAJfSwKIAkuY3JlYXRvciA9ICZyb290X3VzZXIsCiB9OwpAQCAtNDcsNyArNTEsNyBAQAogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVpZGhhc2hfbG9jayk7CiAKLS8qIHJvb3RfdXNlci5fX2NvdW50IGlzIDIsIDEgZm9yIGluaXQgdGFzayBjcmVkLCAxIGZvciBpbml0X3VzZXJfbnMtPmNyZWF0b3IgKi8KKy8qIHJvb3RfdXNlci5fX2NvdW50IGlzIDIsIDEgZm9yIGluaXQgdGFzayBjcmVkLCAxIGZvciBpbml0X3VzZXJfbnMtPnVzZXJfbnMgKi8KIHN0cnVjdCB1c2VyX3N0cnVjdCByb290X3VzZXIgPSB7CiAJLl9fY291bnQJPSBBVE9NSUNfSU5JVCgyKSwKIAkucHJvY2Vzc2VzCT0gQVRPTUlDX0lOSVQoMSksCmRpZmYgLS1naXQgYS9rZXJuZWwvdXRzbmFtZS5jIGIva2VybmVsL3V0c25hbWUuYwppbmRleCA4YTgyYjRiLi40NDY0NjE3IDEwMDY0NAotLS0gYS9rZXJuZWwvdXRzbmFtZS5jCisrKyBiL2tlcm5lbC91dHNuYW1lLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqY3JlYXRlX3V0c19ucyh2b2lkKQogewpAQCAtMzAsNyArMzEsOCBAQAogICogQG9sZF9uczogbmFtZXNwYWNlIHRvIGNsb25lCiAgKiBSZXR1cm4gTlVMTCBvbiBlcnJvciAoZmFpbHVyZSB0byBrbWFsbG9jKSwgbmV3IG5zIG90aGVyd2lzZQogICovCi1zdGF0aWMgc3RydWN0IHV0c19uYW1lc3BhY2UgKmNsb25lX3V0c19ucyhzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqb2xkX25zKQorc3RhdGljIHN0cnVjdCB1dHNfbmFtZXNwYWNlICpjbG9uZV91dHNfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSAgc3RydWN0IHV0c19uYW1lc3BhY2UgKm9sZF9ucykKIHsKIAlzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqbnM7CiAKQEAgLTQwLDYgKzQyLDcgQEAKIAogCWRvd25fcmVhZCgmdXRzX3NlbSk7CiAJbWVtY3B5KCZucy0+bmFtZSwgJm9sZF9ucy0+bmFtZSwgc2l6ZW9mKG5zLT5uYW1lKSk7CisJbnMtPnVzZXJfbnMgPSBnZXRfdXNlcl9ucyh0YXNrX2NyZWRfeHh4KHRzaywgdXNlciktPnVzZXJfbnMpOwogCXVwX3JlYWQoJnV0c19zZW0pOwogCXJldHVybiBuczsKIH0KQEAgLTUwLDggKzUzLDEwIEBACiAgKiB1dHNuYW1lIG9mIHRoaXMgcHJvY2VzcyB3b24ndCBiZSBzZWVuIGJ5IHBhcmVudCwgYW5kIHZpY2UKICAqIHZlcnNhLgogICovCi1zdHJ1Y3QgdXRzX25hbWVzcGFjZSAqY29weV91dHNuYW1lKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0cnVjdCB1dHNfbmFtZXNwYWNlICpvbGRfbnMpCitzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqY29weV91dHNuYW1lKHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CisJc3RydWN0IHV0c19uYW1lc3BhY2UgKm9sZF9ucyA9IHRzay0+bnNwcm94eS0+dXRzX25zOwogCXN0cnVjdCB1dHNfbmFtZXNwYWNlICpuZXdfbnM7CiAKIAlCVUdfT04oIW9sZF9ucyk7CkBAIC02MCw3ICs2NSw3IEBACiAJaWYgKCEoZmxhZ3MgJiBDTE9ORV9ORVdVVFMpKQogCQlyZXR1cm4gb2xkX25zOwogCi0JbmV3X25zID0gY2xvbmVfdXRzX25zKG9sZF9ucyk7CisJbmV3X25zID0gY2xvbmVfdXRzX25zKHRzaywgb2xkX25zKTsKIAogCXB1dF91dHNfbnMob2xkX25zKTsKIAlyZXR1cm4gbmV3X25zOwpAQCAtNzEsNSArNzYsNiBAQAogCXN0cnVjdCB1dHNfbmFtZXNwYWNlICpuczsKIAogCW5zID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB1dHNfbmFtZXNwYWNlLCBrcmVmKTsKKwlwdXRfdXNlcl9ucyhucy0+dXNlcl9ucyk7CiAJa2ZyZWUobnMpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwppbmRleCAxOGJiMTU3Li4xNDBkY2U3IDEwMDY0NAotLS0gYS9rZXJuZWwvd2F0Y2hkb2cuYworKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtNDgsMTIgKzQ4LDE1IEBACiAgKiBTaG91bGQgd2UgcGFuaWMgd2hlbiBhIHNvZnQtbG9ja3VwIG9yIGhhcmQtbG9ja3VwIG9jY3VyczoKICAqLwogI2lmZGVmIENPTkZJR19IQVJETE9DS1VQX0RFVEVDVE9SCi1zdGF0aWMgaW50IGhhcmRsb2NrdXBfcGFuaWM7CitzdGF0aWMgaW50IGhhcmRsb2NrdXBfcGFuaWMgPQorCQkJQ09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDX1ZBTFVFOwogCiBzdGF0aWMgaW50IF9faW5pdCBoYXJkbG9ja3VwX3BhbmljX3NldHVwKGNoYXIgKnN0cikKIHsKIAlpZiAoIXN0cm5jbXAoc3RyLCAicGFuaWMiLCA1KSkKIAkJaGFyZGxvY2t1cF9wYW5pYyA9IDE7CisJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAibm9wYW5pYyIsIDcpKQorCQloYXJkbG9ja3VwX3BhbmljID0gMDsKIAllbHNlIGlmICghc3RybmNtcChzdHIsICIwIiwgMSkpCiAJCXdhdGNoZG9nX2VuYWJsZWQgPSAwOwogCXJldHVybiAxOwpAQCAtNDE1LDE5ICs0MTgsMjIgQEAKIHN0YXRpYyBpbnQgd2F0Y2hkb2dfZW5hYmxlKGludCBjcHUpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBjcHUpOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAkvKiBlbmFibGUgdGhlIHBlcmYgZXZlbnQgKi8KIAllcnIgPSB3YXRjaGRvZ19ubWlfZW5hYmxlKGNwdSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKworCS8qIFJlZ2FyZGxlc3Mgb2YgZXJyIGFib3ZlLCBmYWxsIHRocm91Z2ggYW5kIHN0YXJ0IHNvZnRsb2NrdXAgKi8KIAogCS8qIGNyZWF0ZSB0aGUgd2F0Y2hkb2cgdGhyZWFkICovCiAJaWYgKCFwKSB7CiAJCXAgPSBrdGhyZWFkX2NyZWF0ZSh3YXRjaGRvZywgKHZvaWQgKikodW5zaWduZWQgbG9uZyljcHUsICJ3YXRjaGRvZy8lZCIsIGNwdSk7CiAJCWlmIChJU19FUlIocCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAic29mdGxvY2t1cCB3YXRjaGRvZyBmb3IgJWkgZmFpbGVkXG4iLCBjcHUpOwotCQkJcmV0dXJuIFBUUl9FUlIocCk7CisJCQlpZiAoIWVycikKKwkJCQkvKiBpZiBoYXJkbG9ja3VwIGhhc24ndCBhbHJlYWR5IHNldCB0aGlzICovCisJCQkJZXJyID0gUFRSX0VSUihwKTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJCWt0aHJlYWRfYmluZChwLCBjcHUpOwogCQlwZXJfY3B1KHdhdGNoZG9nX3RvdWNoX3RzLCBjcHUpID0gMDsKQEAgLTQzNSw3ICs0NDEsOCBAQAogCQl3YWtlX3VwX3Byb2Nlc3MocCk7CiAJfQogCi0JcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgd2F0Y2hkb2dfZGlzYWJsZShpbnQgY3B1KQpAQCAtNTQ3LDcgKzU1NCwxMyBAQAogCQlicmVhazsKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAl9Ci0JcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKKworCS8qCisJICogaGFyZGxvY2t1cCBhbmQgc29mdGxvY2t1cCBhcmUgbm90IGltcG9ydGFudCBlbm91Z2gKKwkgKiB0byBibG9jayBjcHUgYnJpbmcgdXAuICBKdXN0IGFsd2F5cyBzdWNjZWVkIGFuZAorCSAqIHJlbHkgb24gcHJpbnRrIG91dHB1dCB0byBmbGFnIHByb2JsZW1zLgorCSAqLworCXJldHVybiBOT1RJRllfT0s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBjcHVfbmZiID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDVjYTdjZTkuLjA0ZWY4MzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTEzNjYsOCArMTM2NiwxMCBAQAogCXdvcmtlci0+aWQgPSBpZDsKIAogCWlmICghb25fdW5ib3VuZF9jcHUpCi0JCXdvcmtlci0+dGFzayA9IGt0aHJlYWRfY3JlYXRlKHdvcmtlcl90aHJlYWQsIHdvcmtlciwKLQkJCQkJICAgICAgImt3b3JrZXIvJXU6JWQiLCBnY3dxLT5jcHUsIGlkKTsKKwkJd29ya2VyLT50YXNrID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZSh3b3JrZXJfdGhyZWFkLAorCQkJCQkJICAgICAgd29ya2VyLAorCQkJCQkJICAgICAgY3B1X3RvX25vZGUoZ2N3cS0+Y3B1KSwKKwkJCQkJCSAgICAgICJrd29ya2VyLyV1OiVkIiwgZ2N3cS0+Y3B1LCBpZCk7CiAJZWxzZQogCQl3b3JrZXItPnRhc2sgPSBrdGhyZWFkX2NyZWF0ZSh3b3JrZXJfdGhyZWFkLCB3b3JrZXIsCiAJCQkJCSAgICAgICJrd29ya2VyL3U6JWQiLCBpZCk7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDNhNTVhNDMuLjIzZmE3YTMgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC0yMiw2ICsyMiw5IEBACiBjb25maWcgR0VORVJJQ19GSU5EX05FWFRfQklUCiAJYm9vbAogCitjb25maWcgR0VORVJJQ19GSU5EX0JJVF9MRQorCWJvb2wKKwogY29uZmlnIEdFTkVSSUNfRklORF9MQVNUX0JJVAogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggNmY0NDBkOC4uZGY5MjM0YyAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTksNiArOSwxNyBAQAogCSAgb3BlcmF0aW9ucy4gIFRoaXMgaXMgdXNlZnVsIGZvciBpZGVudGlmeWluZyBsb25nIGRlbGF5cwogCSAgaW4ga2VybmVsIHN0YXJ0dXAuCiAKK2NvbmZpZyBERUZBVUxUX01FU1NBR0VfTE9HTEVWRUwKKwlpbnQgIkRlZmF1bHQgbWVzc2FnZSBsb2cgbGV2ZWwgKDEtNykiCisJcmFuZ2UgMSA3CisJZGVmYXVsdCAiNCIKKwloZWxwCisJICBEZWZhdWx0IGxvZyBsZXZlbCBmb3IgcHJpbnRrIHN0YXRlbWVudHMgd2l0aCBubyBzcGVjaWZpZWQgcHJpb3JpdHkuCisKKwkgIFRoaXMgd2FzIGhhcmQtY29kZWQgdG8gS0VSTl9XQVJOSU5HIHNpbmNlIGF0IGxlYXN0IDIuNi4xMCBidXQgZm9sa3MKKwkgIHRoYXQgYXJlIGF1ZGl0aW5nIHRoZWlyIGxvZ3MgY2xvc2VseSBtYXkgd2FudCB0byBzZXQgaXQgdG8gYSBsb3dlcgorCSAgcHJpb3JpdHkuCisKIGNvbmZpZyBFTkFCTEVfV0FSTl9ERVBSRUNBVEVECiAJYm9vbCAiRW5hYmxlIF9fZGVwcmVjYXRlZCBsb2dpYyIKIAlkZWZhdWx0IHkKQEAgLTEwMiwxMSArMTEzLDYgQEAKIAogY29uZmlnIERFQlVHX1NFQ1RJT05fTUlTTUFUQ0gKIAlib29sICJFbmFibGUgZnVsbCBTZWN0aW9uIG1pc21hdGNoIGFuYWx5c2lzIgotCWRlcGVuZHMgb24gVU5ERUZJTkVEIHx8IChCTEFDS0ZJTikKLQlkZWZhdWx0IHkKLQkjIFRoaXMgb3B0aW9uIGlzIG9uIHB1cnBvc2UgZGlzYWJsZWQgZm9yIG5vdy4KLQkjIEl0IHdpbGwgYmUgZW5hYmxlZCB3aGVuIHdlIGFyZSBkb3duIHRvIGEgcmVhc29uYWJsZSBudW1iZXIKLQkjIG9mIHNlY3Rpb24gbWlzbWF0Y2ggd2FybmluZ3MgKDwgMTAgZm9yIGFuIGFsbHllc2NvbmZpZyBidWlsZCkKIAloZWxwCiAJICBUaGUgc2VjdGlvbiBtaXNtYXRjaCBhbmFseXNpcyBjaGVja3MgaWYgdGhlcmUgYXJlIGlsbGVnYWwKIAkgIHJlZmVyZW5jZXMgZnJvbSBvbmUgc2VjdGlvbiB0byBhbm90aGVyIHNlY3Rpb24uCkBAIC0xNzYsNiArMTgyLDIzIEBACiAJZGVmX2Jvb2wgTE9DS1VQX0RFVEVDVE9SICYmIFBFUkZfRVZFTlRTICYmIEhBVkVfUEVSRl9FVkVOVFNfTk1JICYmIFwKIAkJICFBUkNIX0hBU19OTUlfV0FUQ0hET0cKIAorY29uZmlnIEJPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDCisJYm9vbCAiUGFuaWMgKFJlYm9vdCkgT24gSGFyZCBMb2NrdXBzIgorCWRlcGVuZHMgb24gTE9DS1VQX0RFVEVDVE9SCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGtlcm5lbCB0byBwYW5pYyBvbiAiaGFyZCBsb2NrdXBzIiwKKwkgIHdoaWNoIGFyZSBidWdzIHRoYXQgY2F1c2UgdGhlIGtlcm5lbCB0byBsb29wIGluIGtlcm5lbAorCSAgbW9kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgZm9yIG1vcmUgdGhhbiA2MCBzZWNvbmRzLgorCisJICBTYXkgTiBpZiB1bnN1cmUuCisKK2NvbmZpZyBCT09UUEFSQU1fSEFSRExPQ0tVUF9QQU5JQ19WQUxVRQorCWludAorCWRlcGVuZHMgb24gTE9DS1VQX0RFVEVDVE9SCisJcmFuZ2UgMCAxCisJZGVmYXVsdCAwIGlmICFCT09UUEFSQU1fSEFSRExPQ0tVUF9QQU5JQworCWRlZmF1bHQgMSBpZiBCT09UUEFSQU1fSEFSRExPQ0tVUF9QQU5JQworCiBjb25maWcgQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMKIAlib29sICJQYW5pYyAoUmVib290KSBPbiBTb2Z0IExvY2t1cHMiCiAJZGVwZW5kcyBvbiBMT0NLVVBfREVURUNUT1IKQEAgLTEyMjcsMyArMTI1MCw2IEBACiBzb3VyY2UgImxpYi9LY29uZmlnLmtnZGIiCiAKIHNvdXJjZSAibGliL0tjb25maWcua21lbWNoZWNrIgorCitjb25maWcgVEVTVF9LU1RSVE9YCisJdHJpc3RhdGUgIlRlc3Qga3N0cnRvKigpIGZhbWlseSBvZiBmdW5jdGlvbnMgYXQgcnVudGltZSIKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCBlZjdlZDcxLi5kNzg3MmI1IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC0yMiw2ICsyMiw4IEBACiBvYmoteSArPSBiY2QubyBkaXY2NC5vIHNvcnQubyBwYXJzZXIubyBoYWxmbWQ0Lm8gZGVidWdfbG9ja3MubyByYW5kb20zMi5vIFwKIAkgYnVzdF9zcGlubG9ja3MubyBoZXhkdW1wLm8ga2FzcHJpbnRmLm8gYml0bWFwLm8gc2NhdHRlcmxpc3QubyBcCiAJIHN0cmluZ19oZWxwZXJzLm8gZ2NkLm8gbGNtLm8gbGlzdF9zb3J0Lm8gdXVpZC5vIGZsZXhfYXJyYXkubworb2JqLXkgKz0ga3N0cnRveC5vCitvYmotJChDT05GSUdfVEVTVF9LU1RSVE9YKSArPSB0ZXN0LWtzdHJ0b3gubwogCiBpZmVxICgkKENPTkZJR19ERUJVR19LT0JKRUNUKSx5KQogQ0ZMQUdTX2tvYmplY3QubyArPSAtRERFQlVHCkBAIC0zOCw2ICs0MCw3IEBACiBsaWItJChDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0pICs9IHJ3c2VtLm8KIGxpYi0kKENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUKSArPSBmaW5kX25leHRfYml0Lm8KIGxpYi0kKENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQpICs9IGZpbmRfbmV4dF9iaXQubworbGliLSQoQ09ORklHX0dFTkVSSUNfRklORF9CSVRfTEUpICs9IGZpbmRfbmV4dF9iaXQubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVCkgKz0gZmluZF9sYXN0X2JpdC5vCiAKIENGTEFHU19od2VpZ2h0Lm8gPSAkKHN1YnN0ICQocXVvdGUpLCwkKENPTkZJR19BUkNIX0hXRUlHSFRfQ0ZMQUdTKSkKZGlmZiAtLWdpdCBhL2xpYi9maW5kX25leHRfYml0LmMgYi9saWIvZmluZF9uZXh0X2JpdC5jCmluZGV4IDI0YzU5ZGUuLmIwYTg3NjcgMTAwNjQ0Ci0tLSBhL2xpYi9maW5kX25leHRfYml0LmMKKysrIGIvbGliL2ZpbmRfbmV4dF9iaXQuYwpAQCAtMTYwLDYgKzE2MCw3IEBACiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgKi8KIAogI2lmZGVmIF9fQklHX0VORElBTgorI2lmZGVmIENPTkZJR19HRU5FUklDX0ZJTkRfQklUX0xFCiAKIC8qIGluY2x1ZGUvbGludXgvYnl0ZW9yZGVyIGRvZXMgbm90IHN1cHBvcnQgInVuc2lnbmVkIGxvbmciIHR5cGUgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBleHQyX3N3YWJwKGNvbnN0IHVuc2lnbmVkIGxvbmcgKiB4KQpAQCAtMTg1LDE1ICsxODYsMTYgQEAKICNlbmRpZgogfQogCi11bnNpZ25lZCBsb25nIGdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVuc2lnbmVkCit1bnNpZ25lZCBsb25nIGZpbmRfbmV4dF96ZXJvX2JpdF9sZShjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZAogCQlsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgQklUT1BfV09SRChvZmZzZXQpOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyOwogCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgfihCSVRTX1BFUl9MT05HIC0gMSk7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKIAlpZiAob2Zmc2V0ID49IHNpemUpCiAJCXJldHVybiBzaXplOworCXAgKz0gQklUT1BfV09SRChvZmZzZXQpOwogCXNpemUgLT0gcmVzdWx0OwogCW9mZnNldCAmPSAoQklUU19QRVJfTE9ORyAtIDFVTCk7CiAJaWYgKG9mZnNldCkgewpAQCAtMjI2LDE4ICsyMjgsMTggQEAKIGZvdW5kX21pZGRsZV9zd2FwOgogCXJldHVybiByZXN1bHQgKyBmZnooZXh0Ml9zd2FiKHRtcCkpOwogfQorRVhQT1JUX1NZTUJPTChmaW5kX25leHRfemVyb19iaXRfbGUpOwogCi1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KTsKLQotdW5zaWduZWQgbG9uZyBnZW5lcmljX2ZpbmRfbmV4dF9sZV9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQKK3Vuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdF9sZShjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZAogCQlsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyICsgQklUT1BfV09SRChvZmZzZXQpOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSBhZGRyOwogCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gb2Zmc2V0ICYgfihCSVRTX1BFUl9MT05HIC0gMSk7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKIAlpZiAob2Zmc2V0ID49IHNpemUpCiAJCXJldHVybiBzaXplOworCXAgKz0gQklUT1BfV09SRChvZmZzZXQpOwogCXNpemUgLT0gcmVzdWx0OwogCW9mZnNldCAmPSAoQklUU19QRVJfTE9ORyAtIDFVTCk7CiAJaWYgKG9mZnNldCkgewpAQCAtMjcxLDUgKzI3Myw3IEBACiBmb3VuZF9taWRkbGVfc3dhcDoKIAlyZXR1cm4gcmVzdWx0ICsgX19mZnMoZXh0Ml9zd2FiKHRtcCkpOwogfQotRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbmRfbmV4dF9sZV9iaXQpOworRVhQT1JUX1NZTUJPTChmaW5kX25leHRfYml0X2xlKTsKKworI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0ZJTkRfQklUX0xFICovCiAjZW5kaWYgLyogX19CSUdfRU5ESUFOICovCmRpZmYgLS1naXQgYS9saWIva3N0cnRveC5jIGIvbGliL2tzdHJ0b3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY3MmU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2tzdHJ0b3guYwpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvbnZlcnQgaW50ZWdlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gYW4gaW50ZWdlci4KKyAqIElmIGFuIGludGVnZXIgZG9lc24ndCBmaXQgaW50byBzcGVjaWZpZWQgdHlwZSwgLUUgaXMgcmV0dXJuZWQuCisgKgorICogSW50ZWdlciBzdGFydHMgd2l0aCBvcHRpb25hbCBzaWduLgorICoga3N0cnRvdSooKSBmdW5jdGlvbnMgZG8gbm90IGFjY2VwdCBzaWduICItIi4KKyAqCisgKiBSYWRpeCAwIG1lYW5zIGF1dG9kZXRlY3Rpb246IGxlYWRpbmcgIjB4IiBpbXBsaWVzIHJhZGl4IDE2LAorICogbGVhZGluZyAiMCIgaW1wbGllcyByYWRpeCA4LCBvdGhlcndpc2UgcmFkaXggaXMgMTAuCisgKiBBdXRvZGV0ZWN0aW9uIGhpbnRzIHdvcmsgYWZ0ZXIgb3B0aW9uYWwgc2lnbiwgYnV0IG5vdCBiZWZvcmUuCisgKgorICogSWYgLUUgaXMgcmV0dXJuZWQsIHJlc3VsdCBpcyBub3QgdG91Y2hlZC4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdGF0aWMgaW5saW5lIGNoYXIgX3RvbG93ZXIoY29uc3QgY2hhciBjKQoreworCXJldHVybiBjIHwgMHgyMDsKK30KKworc3RhdGljIGludCBfa3N0cnRvdWxsKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBsb25nIGxvbmcgKnJlcykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWNjOworCWludCBvazsKKworCWlmIChiYXNlID09IDApIHsKKwkJaWYgKHNbMF0gPT0gJzAnKSB7CisJCQlpZiAoX3RvbG93ZXIoc1sxXSkgPT0gJ3gnICYmIGlzeGRpZ2l0KHNbMl0pKQorCQkJCWJhc2UgPSAxNjsKKwkJCWVsc2UKKwkJCQliYXNlID0gODsKKwkJfSBlbHNlCisJCQliYXNlID0gMTA7CisJfQorCWlmIChiYXNlID09IDE2ICYmIHNbMF0gPT0gJzAnICYmIF90b2xvd2VyKHNbMV0pID09ICd4JykKKwkJcyArPSAyOworCisJYWNjID0gMDsKKwlvayA9IDA7CisJd2hpbGUgKCpzKSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJaWYgKCcwJyA8PSAqcyAmJiAqcyA8PSAnOScpCisJCQl2YWwgPSAqcyAtICcwJzsKKwkJZWxzZSBpZiAoJ2EnIDw9IF90b2xvd2VyKCpzKSAmJiBfdG9sb3dlcigqcykgPD0gJ2YnKQorCQkJdmFsID0gX3RvbG93ZXIoKnMpIC0gJ2EnICsgMTA7CisJCWVsc2UgaWYgKCpzID09ICdcbicpIHsKKwkJCWlmICgqKHMgKyAxKSA9PSAnXDAnKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICh2YWwgPj0gYmFzZSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoYWNjID4gZGl2X3U2NChVTExPTkdfTUFYIC0gdmFsLCBiYXNlKSkKKwkJCXJldHVybiAtRVJBTkdFOworCQlhY2MgPSBhY2MgKiBiYXNlICsgdmFsOworCQlvayA9IDE7CisKKwkJcysrOworCX0KKwlpZiAoIW9rKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqcmVzID0gYWNjOworCXJldHVybiAwOworfQorCitpbnQga3N0cnRvdWxsKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBsb25nIGxvbmcgKnJlcykKK3sKKwlpZiAoc1swXSA9PSAnKycpCisJCXMrKzsKKwlyZXR1cm4gX2tzdHJ0b3VsbChzLCBiYXNlLCByZXMpOworfQorRVhQT1JUX1NZTUJPTChrc3RydG91bGwpOworCitpbnQga3N0cnRvbGwoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGJhc2UsIGxvbmcgbG9uZyAqcmVzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJaW50IHJ2OworCisJaWYgKHNbMF0gPT0gJy0nKSB7CisJCXJ2ID0gX2tzdHJ0b3VsbChzICsgMSwgYmFzZSwgJnRtcCk7CisJCWlmIChydiA8IDApCisJCQlyZXR1cm4gcnY7CisJCWlmICgobG9uZyBsb25nKSgtdG1wKSA+PSAwKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCSpyZXMgPSAtdG1wOworCX0gZWxzZSB7CisJCXJ2ID0ga3N0cnRvdWxsKHMsIGJhc2UsICZ0bXApOworCQlpZiAocnYgPCAwKQorCQkJcmV0dXJuIHJ2OworCQlpZiAoKGxvbmcgbG9uZyl0bXAgPCAwKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCSpyZXMgPSB0bXA7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChrc3RydG9sbCk7CisKKy8qIEludGVybmFsLCBkbyBub3QgdXNlLiAqLworaW50IF9rc3RydG91bChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgbG9uZyAqcmVzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJaW50IHJ2OworCisJcnYgPSBrc3RydG91bGwocywgYmFzZSwgJnRtcCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCWlmICh0bXAgIT0gKHVuc2lnbmVkIGxvbmcgbG9uZykodW5zaWduZWQgbG9uZyl0bXApCisJCXJldHVybiAtRVJBTkdFOworCSpyZXMgPSB0bXA7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9rc3RydG91bCk7CisKKy8qIEludGVybmFsLCBkbyBub3QgdXNlLiAqLworaW50IF9rc3RydG9sKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCBsb25nICpyZXMpCit7CisJbG9uZyBsb25nIHRtcDsKKwlpbnQgcnY7CisKKwlydiA9IGtzdHJ0b2xsKHMsIGJhc2UsICZ0bXApOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKKwlpZiAodG1wICE9IChsb25nIGxvbmcpKGxvbmcpdG1wKQorCQlyZXR1cm4gLUVSQU5HRTsKKwkqcmVzID0gdG1wOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChfa3N0cnRvbCk7CisKK2ludCBrc3RydG91aW50KGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKnJlcykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG1wOworCWludCBydjsKKworCXJ2ID0ga3N0cnRvdWxsKHMsIGJhc2UsICZ0bXApOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKKwlpZiAodG1wICE9ICh1bnNpZ25lZCBsb25nIGxvbmcpKHVuc2lnbmVkIGludCl0bXApCisJCXJldHVybiAtRVJBTkdFOworCSpyZXMgPSB0bXA7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGtzdHJ0b3VpbnQpOworCitpbnQga3N0cnRvaW50KGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCBpbnQgKnJlcykKK3sKKwlsb25nIGxvbmcgdG1wOworCWludCBydjsKKworCXJ2ID0ga3N0cnRvbGwocywgYmFzZSwgJnRtcCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCWlmICh0bXAgIT0gKGxvbmcgbG9uZykoaW50KXRtcCkKKwkJcmV0dXJuIC1FUkFOR0U7CisJKnJlcyA9IHRtcDsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woa3N0cnRvaW50KTsKKworaW50IGtzdHJ0b3UxNihjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgdTE2ICpyZXMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKKwlpbnQgcnY7CisKKwlydiA9IGtzdHJ0b3VsbChzLCBiYXNlLCAmdG1wKTsKKwlpZiAocnYgPCAwKQorCQlyZXR1cm4gcnY7CisJaWYgKHRtcCAhPSAodW5zaWduZWQgbG9uZyBsb25nKSh1MTYpdG1wKQorCQlyZXR1cm4gLUVSQU5HRTsKKwkqcmVzID0gdG1wOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChrc3RydG91MTYpOworCitpbnQga3N0cnRvczE2KGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCBzMTYgKnJlcykKK3sKKwlsb25nIGxvbmcgdG1wOworCWludCBydjsKKworCXJ2ID0ga3N0cnRvbGwocywgYmFzZSwgJnRtcCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCWlmICh0bXAgIT0gKGxvbmcgbG9uZykoczE2KXRtcCkKKwkJcmV0dXJuIC1FUkFOR0U7CisJKnJlcyA9IHRtcDsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woa3N0cnRvczE2KTsKKworaW50IGtzdHJ0b3U4KGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBiYXNlLCB1OCAqcmVzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJaW50IHJ2OworCisJcnYgPSBrc3RydG91bGwocywgYmFzZSwgJnRtcCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCWlmICh0bXAgIT0gKHVuc2lnbmVkIGxvbmcgbG9uZykodTgpdG1wKQorCQlyZXR1cm4gLUVSQU5HRTsKKwkqcmVzID0gdG1wOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChrc3RydG91OCk7CisKK2ludCBrc3RydG9zOChjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgYmFzZSwgczggKnJlcykKK3sKKwlsb25nIGxvbmcgdG1wOworCWludCBydjsKKworCXJ2ID0ga3N0cnRvbGwocywgYmFzZSwgJnRtcCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCWlmICh0bXAgIT0gKGxvbmcgbG9uZykoczgpdG1wKQorCQlyZXR1cm4gLUVSQU5HRTsKKwkqcmVzID0gdG1wOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChrc3RydG9zOCk7CmRpZmYgLS1naXQgYS9saWIvc2hvd19tZW0uYyBiL2xpYi9zaG93X21lbS5jCmluZGV4IGZkYzc3YzguLmQ4ZDYwMmIgMTAwNjQ0Ci0tLSBhL2xpYi9zaG93X21lbS5jCisrKyBiL2xpYi9zaG93X21lbS5jCkBAIC05LDE0ICs5LDE0IEBACiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CiAKLXZvaWQgc2hvd19tZW0odm9pZCkKK3ZvaWQgX19zaG93X21lbSh1bnNpZ25lZCBpbnQgZmlsdGVyKQogewogCXBnX2RhdGFfdCAqcGdkYXQ7CiAJdW5zaWduZWQgbG9uZyB0b3RhbCA9IDAsIHJlc2VydmVkID0gMCwgc2hhcmVkID0gMCwKIAkJbm9uc2hhcmVkID0gMCwgaGlnaG1lbSA9IDA7CiAKIAlwcmludGsoIk1lbS1JbmZvOlxuIik7Ci0Jc2hvd19mcmVlX2FyZWFzKCk7CisJX19zaG93X2ZyZWVfYXJlYXMoZmlsdGVyKTsKIAogCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewogCQl1bnNpZ25lZCBsb25nIGksIGZsYWdzOwpAQCAtNjEsMyArNjEsOCBAQAogCQlxdWlja2xpc3RfdG90YWxfc2l6ZSgpKTsKICNlbmRpZgogfQorCit2b2lkIHNob3dfbWVtKHZvaWQpCit7CisJX19zaG93X21lbSgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi90ZXN0LWtzdHJ0b3guYyBiL2xpYi90ZXN0LWtzdHJ0b3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjVjMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3Rlc3Qta3N0cnRveC5jCkBAIC0wLDAgKzEsNzM5IEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjZGVmaW5lIGZvcl9lYWNoX3Rlc3QoaSwgdGVzdCkJXAorCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdCkgLyBzaXplb2YodGVzdFswXSk7IGkrKykKKworc3RydWN0IHRlc3RfZmFpbCB7CisJY29uc3QgY2hhciAqc3RyOworCXVuc2lnbmVkIGludCBiYXNlOworfTsKKworI2RlZmluZSBERUZJTkVfVEVTVF9GQUlMKHRlc3QpCVwKKwljb25zdCBzdHJ1Y3QgdGVzdF9mYWlsIHRlc3RbXSBfX2luaXRkYXRhCisKKyNkZWZpbmUgREVDTEFSRV9URVNUX09LKHR5cGUsIHRlc3RfdHlwZSkJXAorCXRlc3RfdHlwZSB7CQkJCVwKKwkJY29uc3QgY2hhciAqc3RyOwkJXAorCQl1bnNpZ25lZCBpbnQgYmFzZTsJCVwKKwkJdHlwZSBleHBlY3RlZF9yZXM7CQlcCisJfQorCisjZGVmaW5lIERFRklORV9URVNUX09LKHR5cGUsIHRlc3QpCVwKKwljb25zdCB0eXBlIHRlc3RbXSBfX2luaXRkYXRhCisKKyNkZWZpbmUgVEVTVF9GQUlMKGZuLCB0eXBlLCBmbXQsIHRlc3QpCQkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBpOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJZm9yX2VhY2hfdGVzdChpLCB0ZXN0KSB7CQkJCQlcCisJCWNvbnN0IHN0cnVjdCB0ZXN0X2ZhaWwgKnQgPSAmdGVzdFtpXTsJCQlcCisJCXR5cGUgdG1wOwkJCQkJCVwKKwkJaW50IHJ2OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJCXRtcCA9IDA7CQkJCQkJXAorCQlydiA9IGZuKHQtPnN0ciwgdC0+YmFzZSwgJnRtcCk7CQkJCVwKKwkJaWYgKHJ2ID49IDApIHsJCQkJCQlcCisJCQlXQVJOKDEsICJzdHIgJyVzJywgYmFzZSAldSwgZXhwZWN0ZWQgLUUsIGdvdCAlZC8iIGZtdCAiXG4iLAlcCisJCQkJdC0+c3RyLCB0LT5iYXNlLCBydiwgdG1wKTsJCVwKKwkJCWNvbnRpbnVlOwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgVEVTVF9PSyhmbiwgdHlwZSwgZm10LCB0ZXN0KQkJCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgaTsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWZvcl9lYWNoX3Rlc3QoaSwgdGVzdCkgewkJCQkJXAorCQljb25zdCB0eXBlb2YodGVzdFswXSkgKnQgPSAmdGVzdFtpXTsJCQlcCisJCXR5cGUgcmVzOwkJCQkJCVwKKwkJaW50IHJ2OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJCXJ2ID0gZm4odC0+c3RyLCB0LT5iYXNlLCAmcmVzKTsJCQkJXAorCQlpZiAocnYgIT0gMCkgewkJCQkJCVwKKwkJCVdBUk4oMSwgInN0ciAnJXMnLCBiYXNlICV1LCBleHBlY3RlZCAwLyIgZm10ICIsIGdvdCAlZFxuIiwJXAorCQkJCXQtPnN0ciwgdC0+YmFzZSwgdC0+ZXhwZWN0ZWRfcmVzLCBydik7CVwKKwkJCWNvbnRpbnVlOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJaWYgKHJlcyAhPSB0LT5leHBlY3RlZF9yZXMpIHsJCQkJXAorCQkJV0FSTigxLCAic3RyICclcycsIGJhc2UgJXUsIGV4cGVjdGVkICIgZm10ICIsIGdvdCAiIGZtdCAiXG4iLAlcCisJCQkJdC0+c3RyLCB0LT5iYXNlLCB0LT5leHBlY3RlZF9yZXMsIHJlcyk7CVwKKwkJCWNvbnRpbnVlOwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X2tzdHJ0b3VsbF9vayh2b2lkKQoreworCURFQ0xBUkVfVEVTVF9PSyh1bnNpZ25lZCBsb25nIGxvbmcsIHN0cnVjdCB0ZXN0X3VsbCk7CisJc3RhdGljIERFRklORV9URVNUX09LKHN0cnVjdCB0ZXN0X3VsbCwgdGVzdF91bGxfb2spID0geworCQl7IjAiLAkxMCwJMFVMTH0sCisJCXsiMSIsCTEwLAkxVUxMfSwKKwkJeyIxMjciLAkxMCwJMTI3VUxMfSwKKwkJeyIxMjgiLAkxMCwJMTI4VUxMfSwKKwkJeyIxMjkiLAkxMCwJMTI5VUxMfSwKKwkJeyIyNTUiLAkxMCwJMjU1VUxMfSwKKwkJeyIyNTYiLAkxMCwJMjU2VUxMfSwKKwkJeyIyNTciLAkxMCwJMjU3VUxMfSwKKwkJeyIzMjc2NyIsCTEwLAkzMjc2N1VMTH0sCisJCXsiMzI3NjgiLAkxMCwJMzI3NjhVTEx9LAorCQl7IjMyNzY5IiwJMTAsCTMyNzY5VUxMfSwKKwkJeyI2NTUzNSIsCTEwLAk2NTUzNVVMTH0sCisJCXsiNjU1MzYiLAkxMCwJNjU1MzZVTEx9LAorCQl7IjY1NTM3IiwJMTAsCTY1NTM3VUxMfSwKKwkJeyIyMTQ3NDgzNjQ3IiwJMTAsCTIxNDc0ODM2NDdVTEx9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OFVMTH0sCisJCXsiMjE0NzQ4MzY0OSIsCTEwLAkyMTQ3NDgzNjQ5VUxMfSwKKwkJeyI0Mjk0OTY3Mjk1IiwJMTAsCTQyOTQ5NjcyOTVVTEx9LAorCQl7IjQyOTQ5NjcyOTYiLAkxMCwJNDI5NDk2NzI5NlVMTH0sCisJCXsiNDI5NDk2NzI5NyIsCTEwLAk0Mjk0OTY3Mjk3VUxMfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA3IiwJMTAsCTkyMjMzNzIwMzY4NTQ3NzU4MDdVTEx9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDgiLAkxMCwJOTIyMzM3MjAzNjg1NDc3NTgwOFVMTH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwOSIsCTEwLAk5MjIzMzcyMDM2ODU0Nzc1ODA5VUxMfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNCIsCTEwLAkxODQ0Njc0NDA3MzcwOTU1MTYxNFVMTH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTUiLAkxMCwJMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEx9LAorCisJCXsiMDAiLAkJOCwJMDBVTEx9LAorCQl7IjAxIiwJCTgsCTAxVUxMfSwKKwkJeyIwMTc3IiwJOCwJMDE3N1VMTH0sCisJCXsiMDIwMCIsCTgsCTAyMDBVTEx9LAorCQl7IjAyMDEiLAk4LAkwMjAxVUxMfSwKKwkJeyIwMzc3IiwJOCwJMDM3N1VMTH0sCisJCXsiMDQwMCIsCTgsCTA0MDBVTEx9LAorCQl7IjA0MDEiLAk4LAkwNDAxVUxMfSwKKwkJeyIwNzc3NzciLAk4LAkwNzc3NzdVTEx9LAorCQl7IjAxMDAwMDAiLAk4LAkwMTAwMDAwVUxMfSwKKwkJeyIwMTAwMDAxIiwJOCwJMDEwMDAwMVVMTH0sCisJCXsiMDE3Nzc3NyIsCTgsCTAxNzc3NzdVTEx9LAorCQl7IjAyMDAwMDAiLAk4LAkwMjAwMDAwVUxMfSwKKwkJeyIwMjAwMDAxIiwJOCwJMDIwMDAwMVVMTH0sCisJCXsiMDE3Nzc3Nzc3Nzc3IiwJOCwJMDE3Nzc3Nzc3Nzc3VUxMfSwKKwkJeyIwMjAwMDAwMDAwMDAiLAk4LAkwMjAwMDAwMDAwMDBVTEx9LAorCQl7IjAyMDAwMDAwMDAwMSIsCTgsCTAyMDAwMDAwMDAwMVVMTH0sCisJCXsiMDM3Nzc3Nzc3Nzc3IiwJOCwJMDM3Nzc3Nzc3Nzc3VUxMfSwKKwkJeyIwNDAwMDAwMDAwMDAiLAk4LAkwNDAwMDAwMDAwMDBVTEx9LAorCQl7IjA0MDAwMDAwMDAwMSIsCTgsCTA0MDAwMDAwMDAwMVVMTH0sCisJCXsiMDc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NyIsCTgsCTA3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzdVTEx9LAorCQl7IjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwJOCwJMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDBVTEx9LAorCQl7IjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwJOCwJMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDFVTEx9LAorCQl7IjAxNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc2IiwJOCwJMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzZVTEx9LAorCQl7IjAxNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3IiwJOCwJMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzdVTEx9LAorCisJCXsiMHgwIiwJCTE2LAkweDBVTEx9LAorCQl7IjB4MSIsCQkxNiwJMHgxVUxMfSwKKwkJeyIweDdmIiwJMTYsCTB4N2ZVTEx9LAorCQl7IjB4ODAiLAkxNiwJMHg4MFVMTH0sCisJCXsiMHg4MSIsCTE2LAkweDgxVUxMfSwKKwkJeyIweGZmIiwJMTYsCTB4ZmZVTEx9LAorCQl7IjB4MTAwIiwJMTYsCTB4MTAwVUxMfSwKKwkJeyIweDEwMSIsCTE2LAkweDEwMVVMTH0sCisJCXsiMHg3ZmZmIiwJMTYsCTB4N2ZmZlVMTH0sCisJCXsiMHg4MDAwIiwJMTYsCTB4ODAwMFVMTH0sCisJCXsiMHg4MDAxIiwJMTYsCTB4ODAwMVVMTH0sCisJCXsiMHhmZmZmIiwJMTYsCTB4ZmZmZlVMTH0sCisJCXsiMHgxMDAwMCIsCTE2LAkweDEwMDAwVUxMfSwKKwkJeyIweDEwMDAxIiwJMTYsCTB4MTAwMDFVTEx9LAorCQl7IjB4N2ZmZmZmZmYiLAkxNiwJMHg3ZmZmZmZmZlVMTH0sCisJCXsiMHg4MDAwMDAwMCIsCTE2LAkweDgwMDAwMDAwVUxMfSwKKwkJeyIweDgwMDAwMDAxIiwJMTYsCTB4ODAwMDAwMDFVTEx9LAorCQl7IjB4ZmZmZmZmZmYiLAkxNiwJMHhmZmZmZmZmZlVMTH0sCisJCXsiMHgxMDAwMDAwMDAiLAkxNiwJMHgxMDAwMDAwMDBVTEx9LAorCQl7IjB4MTAwMDAwMDAxIiwJMTYsCTB4MTAwMDAwMDAxVUxMfSwKKwkJeyIweDdmZmZmZmZmZmZmZmZmZmYiLAkxNiwJMHg3ZmZmZmZmZmZmZmZmZmZmVUxMfSwKKwkJeyIweDgwMDAwMDAwMDAwMDAwMDAiLAkxNiwJMHg4MDAwMDAwMDAwMDAwMDAwVUxMfSwKKwkJeyIweDgwMDAwMDAwMDAwMDAwMDEiLAkxNiwJMHg4MDAwMDAwMDAwMDAwMDAxVUxMfSwKKwkJeyIweGZmZmZmZmZmZmZmZmZmZmUiLAkxNiwJMHhmZmZmZmZmZmZmZmZmZmZlVUxMfSwKKwkJeyIweGZmZmZmZmZmZmZmZmZmZmYiLAkxNiwJMHhmZmZmZmZmZmZmZmZmZmZmVUxMfSwKKworCQl7IjBcbiIsCTAsCTBVTEx9LAorCX07CisJVEVTVF9PSyhrc3RydG91bGwsIHVuc2lnbmVkIGxvbmcgbG9uZywgIiVsbHUiLCB0ZXN0X3VsbF9vayk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X2tzdHJ0b3VsbF9mYWlsKHZvaWQpCit7CisJc3RhdGljIERFRklORV9URVNUX0ZBSUwodGVzdF91bGxfZmFpbCkgPSB7CisJCXsiIiwJMH0sCisJCXsiIiwJOH0sCisJCXsiIiwJMTB9LAorCQl7IiIsCTE2fSwKKwkJeyJcbiIsCTB9LAorCQl7IlxuIiwJOH0sCisJCXsiXG4iLAkxMH0sCisJCXsiXG4iLAkxNn0sCisJCXsiXG4wIiwJMH0sCisJCXsiXG4wIiwJOH0sCisJCXsiXG4wIiwJMTB9LAorCQl7IlxuMCIsCTE2fSwKKwkJeyIrIiwJMH0sCisJCXsiKyIsCTh9LAorCQl7IisiLAkxMH0sCisJCXsiKyIsCTE2fSwKKwkJeyItIiwJMH0sCisJCXsiLSIsCTh9LAorCQl7Ii0iLAkxMH0sCisJCXsiLSIsCTE2fSwKKwkJeyIweCIsCTB9LAorCQl7IjB4IiwJMTZ9LAorCQl7IjBYIiwJMH0sCisJCXsiMFgiLAkxNn0sCisJCXsiMCAiLAkwfSwKKwkJeyIxKyIsCTB9LAorCQl7IjEtIiwJMH0sCisJCXsiIDIiLAkwfSwKKwkJLyogYmFzZSBhdXRvZGV0ZWN0aW9uICovCisJCXsiMHgweiIsCTB9LAorCQl7IjB6IiwJCTB9LAorCQl7ImEiLAkJMH0sCisJCS8qIGRpZ2l0ID49IGJhc2UgKi8KKwkJeyIyIiwJMn0sCisJCXsiOCIsCTh9LAorCQl7ImEiLAkxMH0sCisJCXsiQSIsCTEwfSwKKwkJeyJnIiwJMTZ9LAorCQl7IkciLAkxNn0sCisJCS8qIG92ZXJmbG93ICovCisJCXsiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAkyfSwKKwkJeyIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwJOH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTYiLAkxMH0sCisJCXsiMTAwMDAwMDAwMDAwMDAwMDAiLAkxNn0sCisJCS8qIG5lZ2F0aXZlICovCisJCXsiLTAiLCAwfSwKKwkJeyItMCIsIDh9LAorCQl7Ii0wIiwgMTB9LAorCQl7Ii0wIiwgMTZ9LAorCQl7Ii0xIiwgMH0sCisJCXsiLTEiLCA4fSwKKwkJeyItMSIsIDEwfSwKKwkJeyItMSIsIDE2fSwKKwkJLyogc2lnbiBpcyBmaXJzdCBjaGFyYWN0ZXIgaWYgYW55ICovCisJCXsiLSsxIiwgMH0sCisJCXsiLSsxIiwgOH0sCisJCXsiLSsxIiwgMTB9LAorCQl7Ii0rMSIsIDE2fSwKKwkJLyogbm90aGluZyBhZnRlciBcbiAqLworCQl7IjBcbjAiLCAwfSwKKwkJeyIwXG4wIiwgOH0sCisJCXsiMFxuMCIsIDEwfSwKKwkJeyIwXG4wIiwgMTZ9LAorCQl7IjBcbisiLCAwfSwKKwkJeyIwXG4rIiwgOH0sCisJCXsiMFxuKyIsIDEwfSwKKwkJeyIwXG4rIiwgMTZ9LAorCQl7IjBcbi0iLCAwfSwKKwkJeyIwXG4tIiwgOH0sCisJCXsiMFxuLSIsIDEwfSwKKwkJeyIwXG4tIiwgMTZ9LAorCQl7IjBcbiAiLCAwfSwKKwkJeyIwXG4gIiwgOH0sCisJCXsiMFxuICIsIDEwfSwKKwkJeyIwXG4gIiwgMTZ9LAorCX07CisJVEVTVF9GQUlMKGtzdHJ0b3VsbCwgdW5zaWduZWQgbG9uZyBsb25nLCAiJWxsdSIsIHRlc3RfdWxsX2ZhaWwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdGVzdF9rc3RydG9sbF9vayh2b2lkKQoreworCURFQ0xBUkVfVEVTVF9PSyhsb25nIGxvbmcsIHN0cnVjdCB0ZXN0X2xsKTsKKwlzdGF0aWMgREVGSU5FX1RFU1RfT0soc3RydWN0IHRlc3RfbGwsIHRlc3RfbGxfb2spID0geworCQl7IjAiLAkxMCwJMExMfSwKKwkJeyIxIiwJMTAsCTFMTH0sCisJCXsiMTI3IiwJMTAsCTEyN0xMfSwKKwkJeyIxMjgiLAkxMCwJMTI4TEx9LAorCQl7IjEyOSIsCTEwLAkxMjlMTH0sCisJCXsiMjU1IiwJMTAsCTI1NUxMfSwKKwkJeyIyNTYiLAkxMCwJMjU2TEx9LAorCQl7IjI1NyIsCTEwLAkyNTdMTH0sCisJCXsiMzI3NjciLAkxMCwJMzI3NjdMTH0sCisJCXsiMzI3NjgiLAkxMCwJMzI3NjhMTH0sCisJCXsiMzI3NjkiLAkxMCwJMzI3NjlMTH0sCisJCXsiNjU1MzUiLAkxMCwJNjU1MzVMTH0sCisJCXsiNjU1MzYiLAkxMCwJNjU1MzZMTH0sCisJCXsiNjU1MzciLAkxMCwJNjU1MzdMTH0sCisJCXsiMjE0NzQ4MzY0NyIsCTEwLAkyMTQ3NDgzNjQ3TEx9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OExMfSwKKwkJeyIyMTQ3NDgzNjQ5IiwJMTAsCTIxNDc0ODM2NDlMTH0sCisJCXsiNDI5NDk2NzI5NSIsCTEwLAk0Mjk0OTY3Mjk1TEx9LAorCQl7IjQyOTQ5NjcyOTYiLAkxMCwJNDI5NDk2NzI5NkxMfSwKKwkJeyI0Mjk0OTY3Mjk3IiwJMTAsCTQyOTQ5NjcyOTdMTH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwNyIsCTEwLAk5MjIzMzcyMDM2ODU0Nzc1ODA3TEx9LAorCisJCXsiLTEiLAkxMCwJLTFMTH0sCisJCXsiLTIiLAkxMCwJLTJMTH0sCisJCXsiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiLAkxMCwJTExPTkdfTUlOfSwKKwl9OworCVRFU1RfT0soa3N0cnRvbGwsIGxvbmcgbG9uZywgIiVsbGQiLCB0ZXN0X2xsX29rKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvbGxfZmFpbCh2b2lkKQoreworCXN0YXRpYyBERUZJTkVfVEVTVF9GQUlMKHRlc3RfbGxfZmFpbCkgPSB7CisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwOCIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA5IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE0IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IiwJMTB9LAorCQl7Ii05MjIzMzcyMDM2ODU0Nzc1ODA5IiwJMTB9LAorCQl7Ii0xODQ0Njc0NDA3MzcwOTU1MTYxNCIsCTEwfSwKKwkJeyItMTg0NDY3NDQwNzM3MDk1NTE2MTUiLAkxMH0sCisJCS8qIG5lZ2F0aXZlIHplcm8gaXNuJ3QgYW4gaW50ZWdlciBpbiBMaW51eCAqLworCQl7Ii0wIiwJMH0sCisJCXsiLTAiLAk4fSwKKwkJeyItMCIsCTEwfSwKKwkJeyItMCIsCTE2fSwKKwkJLyogc2lnbiBpcyBmaXJzdCBjaGFyYWN0ZXIgaWYgYW55ICovCisJCXsiLSsxIiwgMH0sCisJCXsiLSsxIiwgOH0sCisJCXsiLSsxIiwgMTB9LAorCQl7Ii0rMSIsIDE2fSwKKwl9OworCVRFU1RfRkFJTChrc3RydG9sbCwgbG9uZyBsb25nLCAiJWxsZCIsIHRlc3RfbGxfZmFpbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X2tzdHJ0b3U2NF9vayh2b2lkKQoreworCURFQ0xBUkVfVEVTVF9PSyh1NjQsIHN0cnVjdCB0ZXN0X3U2NCk7CisJc3RhdGljIERFRklORV9URVNUX09LKHN0cnVjdCB0ZXN0X3U2NCwgdGVzdF91NjRfb2spID0geworCQl7IjAiLAkxMCwJMH0sCisJCXsiMSIsCTEwLAkxfSwKKwkJeyIxMjYiLAkxMCwJMTI2fSwKKwkJeyIxMjciLAkxMCwJMTI3fSwKKwkJeyIxMjgiLAkxMCwJMTI4fSwKKwkJeyIxMjkiLAkxMCwJMTI5fSwKKwkJeyIyNTQiLAkxMCwJMjU0fSwKKwkJeyIyNTUiLAkxMCwJMjU1fSwKKwkJeyIyNTYiLAkxMCwJMjU2fSwKKwkJeyIyNTciLAkxMCwJMjU3fSwKKwkJeyIzMjc2NiIsCTEwLAkzMjc2Nn0sCisJCXsiMzI3NjciLAkxMCwJMzI3Njd9LAorCQl7IjMyNzY4IiwJMTAsCTMyNzY4fSwKKwkJeyIzMjc2OSIsCTEwLAkzMjc2OX0sCisJCXsiNjU1MzQiLAkxMCwJNjU1MzR9LAorCQl7IjY1NTM1IiwJMTAsCTY1NTM1fSwKKwkJeyI2NTUzNiIsCTEwLAk2NTUzNn0sCisJCXsiNjU1MzciLAkxMCwJNjU1Mzd9LAorCQl7IjIxNDc0ODM2NDYiLAkxMCwJMjE0NzQ4MzY0Nn0sCisJCXsiMjE0NzQ4MzY0NyIsCTEwLAkyMTQ3NDgzNjQ3fSwKKwkJeyIyMTQ3NDgzNjQ4IiwJMTAsCTIxNDc0ODM2NDh9LAorCQl7IjIxNDc0ODM2NDkiLAkxMCwJMjE0NzQ4MzY0OX0sCisJCXsiNDI5NDk2NzI5NCIsCTEwLAk0Mjk0OTY3Mjk0fSwKKwkJeyI0Mjk0OTY3Mjk1IiwJMTAsCTQyOTQ5NjcyOTV9LAorCQl7IjQyOTQ5NjcyOTYiLAkxMCwJNDI5NDk2NzI5Nn0sCisJCXsiNDI5NDk2NzI5NyIsCTEwLAk0Mjk0OTY3Mjk3fSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA2IiwJMTAsCTkyMjMzNzIwMzY4NTQ3NzU4MDZVTEx9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDciLAkxMCwJOTIyMzM3MjAzNjg1NDc3NTgwN1VMTH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwOCIsCTEwLAk5MjIzMzcyMDM2ODU0Nzc1ODA4VUxMfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA5IiwJMTAsCTkyMjMzNzIwMzY4NTQ3NzU4MDlVTEx9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE0IiwJMTAsCTE4NDQ2NzQ0MDczNzA5NTUxNjE0VUxMfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNSIsCTEwLAkxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTH0sCisJfTsKKwlURVNUX09LKGtzdHJ0b3U2NCwgdTY0LCAiJWxsdSIsIHRlc3RfdTY0X29rKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvdTY0X2ZhaWwodm9pZCkKK3sKKwlzdGF0aWMgREVGSU5FX1RFU1RfRkFJTCh0ZXN0X3U2NF9mYWlsKSA9IHsKKwkJeyItMiIsCTEwfSwKKwkJeyItMSIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNiIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNyIsCTEwfSwKKwl9OworCVRFU1RfRkFJTChrc3RydG91NjQsIHU2NCwgIiVsbHUiLCB0ZXN0X3U2NF9mYWlsKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvczY0X29rKHZvaWQpCit7CisJREVDTEFSRV9URVNUX09LKHM2NCwgc3RydWN0IHRlc3RfczY0KTsKKwlzdGF0aWMgREVGSU5FX1RFU1RfT0soc3RydWN0IHRlc3RfczY0LCB0ZXN0X3M2NF9vaykgPSB7CisJCXsiLTEyOCIsCTEwLAktMTI4fSwKKwkJeyItMTI3IiwJMTAsCS0xMjd9LAorCQl7Ii0xIiwJMTAsCS0xfSwKKwkJeyIwIiwJMTAsCTB9LAorCQl7IjEiLAkxMCwJMX0sCisJCXsiMTI2IiwJMTAsCTEyNn0sCisJCXsiMTI3IiwJMTAsCTEyN30sCisJCXsiMTI4IiwJMTAsCTEyOH0sCisJCXsiMTI5IiwJMTAsCTEyOX0sCisJCXsiMjU0IiwJMTAsCTI1NH0sCisJCXsiMjU1IiwJMTAsCTI1NX0sCisJCXsiMjU2IiwJMTAsCTI1Nn0sCisJCXsiMjU3IiwJMTAsCTI1N30sCisJCXsiMzI3NjYiLAkxMCwJMzI3NjZ9LAorCQl7IjMyNzY3IiwJMTAsCTMyNzY3fSwKKwkJeyIzMjc2OCIsCTEwLAkzMjc2OH0sCisJCXsiMzI3NjkiLAkxMCwJMzI3Njl9LAorCQl7IjY1NTM0IiwJMTAsCTY1NTM0fSwKKwkJeyI2NTUzNSIsCTEwLAk2NTUzNX0sCisJCXsiNjU1MzYiLAkxMCwJNjU1MzZ9LAorCQl7IjY1NTM3IiwJMTAsCTY1NTM3fSwKKwkJeyIyMTQ3NDgzNjQ2IiwJMTAsCTIxNDc0ODM2NDZ9LAorCQl7IjIxNDc0ODM2NDciLAkxMCwJMjE0NzQ4MzY0N30sCisJCXsiMjE0NzQ4MzY0OCIsCTEwLAkyMTQ3NDgzNjQ4fSwKKwkJeyIyMTQ3NDgzNjQ5IiwJMTAsCTIxNDc0ODM2NDl9LAorCQl7IjQyOTQ5NjcyOTQiLAkxMCwJNDI5NDk2NzI5NH0sCisJCXsiNDI5NDk2NzI5NSIsCTEwLAk0Mjk0OTY3Mjk1fSwKKwkJeyI0Mjk0OTY3Mjk2IiwJMTAsCTQyOTQ5NjcyOTZ9LAorCQl7IjQyOTQ5NjcyOTciLAkxMCwJNDI5NDk2NzI5N30sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwNiIsCTEwLAk5MjIzMzcyMDM2ODU0Nzc1ODA2TEx9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDciLAkxMCwJOTIyMzM3MjAzNjg1NDc3NTgwN0xMfSwKKwl9OworCVRFU1RfT0soa3N0cnRvczY0LCBzNjQsICIlbGxkIiwgdGVzdF9zNjRfb2spOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdGVzdF9rc3RydG9zNjRfZmFpbCh2b2lkKQoreworCXN0YXRpYyBERUZJTkVfVEVTVF9GQUlMKHRlc3RfczY0X2ZhaWwpID0geworCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDgiLAkxMH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwOSIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNCIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNSIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNiIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNyIsCTEwfSwKKwl9OworCVRFU1RfRkFJTChrc3RydG9zNjQsIHM2NCwgIiVsbGQiLCB0ZXN0X3M2NF9mYWlsKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvdTMyX29rKHZvaWQpCit7CisJREVDTEFSRV9URVNUX09LKHUzMiwgc3RydWN0IHRlc3RfdTMyKTsKKwlzdGF0aWMgREVGSU5FX1RFU1RfT0soc3RydWN0IHRlc3RfdTMyLCB0ZXN0X3UzMl9vaykgPSB7CisJCXsiMCIsCTEwLAkwfSwKKwkJeyIxIiwJMTAsCTF9LAorCQl7IjEyNiIsCTEwLAkxMjZ9LAorCQl7IjEyNyIsCTEwLAkxMjd9LAorCQl7IjEyOCIsCTEwLAkxMjh9LAorCQl7IjEyOSIsCTEwLAkxMjl9LAorCQl7IjI1NCIsCTEwLAkyNTR9LAorCQl7IjI1NSIsCTEwLAkyNTV9LAorCQl7IjI1NiIsCTEwLAkyNTZ9LAorCQl7IjI1NyIsCTEwLAkyNTd9LAorCQl7IjMyNzY2IiwJMTAsCTMyNzY2fSwKKwkJeyIzMjc2NyIsCTEwLAkzMjc2N30sCisJCXsiMzI3NjgiLAkxMCwJMzI3Njh9LAorCQl7IjMyNzY5IiwJMTAsCTMyNzY5fSwKKwkJeyI2NTUzNCIsCTEwLAk2NTUzNH0sCisJCXsiNjU1MzUiLAkxMCwJNjU1MzV9LAorCQl7IjY1NTM2IiwJMTAsCTY1NTM2fSwKKwkJeyI2NTUzNyIsCTEwLAk2NTUzN30sCisJCXsiMjE0NzQ4MzY0NiIsCTEwLAkyMTQ3NDgzNjQ2fSwKKwkJeyIyMTQ3NDgzNjQ3IiwJMTAsCTIxNDc0ODM2NDd9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OH0sCisJCXsiMjE0NzQ4MzY0OSIsCTEwLAkyMTQ3NDgzNjQ5fSwKKwkJeyI0Mjk0OTY3Mjk0IiwJMTAsCTQyOTQ5NjcyOTR9LAorCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NX0sCisJfTsKKwlURVNUX09LKGtzdHJ0b3UzMiwgdTMyLCAiJXUiLCB0ZXN0X3UzMl9vayk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X2tzdHJ0b3UzMl9mYWlsKHZvaWQpCit7CisJc3RhdGljIERFRklORV9URVNUX0ZBSUwodGVzdF91MzJfZmFpbCkgPSB7CisJCXsiLTIiLAkxMH0sCisJCXsiLTEiLAkxMH0sCisJCXsiNDI5NDk2NzI5NiIsCTEwfSwKKwkJeyI0Mjk0OTY3Mjk3IiwJMTB9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDYiLAkxMH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwNyIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA4IiwJMTB9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDkiLAkxMH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTQiLAkxMH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTUiLAkxMH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTYiLAkxMH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTciLAkxMH0sCisJfTsKKwlURVNUX0ZBSUwoa3N0cnRvdTMyLCB1MzIsICIldSIsIHRlc3RfdTMyX2ZhaWwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdGVzdF9rc3RydG9zMzJfb2sodm9pZCkKK3sKKwlERUNMQVJFX1RFU1RfT0soczMyLCBzdHJ1Y3QgdGVzdF9zMzIpOworCXN0YXRpYyBERUZJTkVfVEVTVF9PSyhzdHJ1Y3QgdGVzdF9zMzIsIHRlc3RfczMyX29rKSA9IHsKKwkJeyItMTI4IiwJMTAsCS0xMjh9LAorCQl7Ii0xMjciLAkxMCwJLTEyN30sCisJCXsiLTEiLAkxMCwJLTF9LAorCQl7IjAiLAkxMCwJMH0sCisJCXsiMSIsCTEwLAkxfSwKKwkJeyIxMjYiLAkxMCwJMTI2fSwKKwkJeyIxMjciLAkxMCwJMTI3fSwKKwkJeyIxMjgiLAkxMCwJMTI4fSwKKwkJeyIxMjkiLAkxMCwJMTI5fSwKKwkJeyIyNTQiLAkxMCwJMjU0fSwKKwkJeyIyNTUiLAkxMCwJMjU1fSwKKwkJeyIyNTYiLAkxMCwJMjU2fSwKKwkJeyIyNTciLAkxMCwJMjU3fSwKKwkJeyIzMjc2NiIsCTEwLAkzMjc2Nn0sCisJCXsiMzI3NjciLAkxMCwJMzI3Njd9LAorCQl7IjMyNzY4IiwJMTAsCTMyNzY4fSwKKwkJeyIzMjc2OSIsCTEwLAkzMjc2OX0sCisJCXsiNjU1MzQiLAkxMCwJNjU1MzR9LAorCQl7IjY1NTM1IiwJMTAsCTY1NTM1fSwKKwkJeyI2NTUzNiIsCTEwLAk2NTUzNn0sCisJCXsiNjU1MzciLAkxMCwJNjU1Mzd9LAorCQl7IjIxNDc0ODM2NDYiLAkxMCwJMjE0NzQ4MzY0Nn0sCisJCXsiMjE0NzQ4MzY0NyIsCTEwLAkyMTQ3NDgzNjQ3fSwKKwl9OworCVRFU1RfT0soa3N0cnRvczMyLCBzMzIsICIlZCIsIHRlc3RfczMyX29rKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvczMyX2ZhaWwodm9pZCkKK3sKKwlzdGF0aWMgREVGSU5FX1RFU1RfRkFJTCh0ZXN0X3MzMl9mYWlsKSA9IHsKKwkJeyIyMTQ3NDgzNjQ4IiwJMTB9LAorCQl7IjIxNDc0ODM2NDkiLAkxMH0sCisJCXsiNDI5NDk2NzI5NCIsCTEwfSwKKwkJeyI0Mjk0OTY3Mjk1IiwJMTB9LAorCQl7IjQyOTQ5NjcyOTYiLAkxMH0sCisJCXsiNDI5NDk2NzI5NyIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA2IiwJMTB9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDciLAkxMH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwOCIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA5IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE0IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE2IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE3IiwJMTB9LAorCX07CisJVEVTVF9GQUlMKGtzdHJ0b3MzMiwgczMyLCAiJWQiLCB0ZXN0X3MzMl9mYWlsKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvdTE2X29rKHZvaWQpCit7CisJREVDTEFSRV9URVNUX09LKHUxNiwgc3RydWN0IHRlc3RfdTE2KTsKKwlzdGF0aWMgREVGSU5FX1RFU1RfT0soc3RydWN0IHRlc3RfdTE2LCB0ZXN0X3UxNl9vaykgPSB7CisJCXsiMCIsCTEwLAkwfSwKKwkJeyIxIiwJMTAsCTF9LAorCQl7IjEyNiIsCTEwLAkxMjZ9LAorCQl7IjEyNyIsCTEwLAkxMjd9LAorCQl7IjEyOCIsCTEwLAkxMjh9LAorCQl7IjEyOSIsCTEwLAkxMjl9LAorCQl7IjI1NCIsCTEwLAkyNTR9LAorCQl7IjI1NSIsCTEwLAkyNTV9LAorCQl7IjI1NiIsCTEwLAkyNTZ9LAorCQl7IjI1NyIsCTEwLAkyNTd9LAorCQl7IjMyNzY2IiwJMTAsCTMyNzY2fSwKKwkJeyIzMjc2NyIsCTEwLAkzMjc2N30sCisJCXsiMzI3NjgiLAkxMCwJMzI3Njh9LAorCQl7IjMyNzY5IiwJMTAsCTMyNzY5fSwKKwkJeyI2NTUzNCIsCTEwLAk2NTUzNH0sCisJCXsiNjU1MzUiLAkxMCwJNjU1MzV9LAorCX07CisJVEVTVF9PSyhrc3RydG91MTYsIHUxNiwgIiVodSIsIHRlc3RfdTE2X29rKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvdTE2X2ZhaWwodm9pZCkKK3sKKwlzdGF0aWMgREVGSU5FX1RFU1RfRkFJTCh0ZXN0X3UxNl9mYWlsKSA9IHsKKwkJeyItMiIsCTEwfSwKKwkJeyItMSIsCTEwfSwKKwkJeyI2NTUzNiIsCTEwfSwKKwkJeyI2NTUzNyIsCTEwfSwKKwkJeyIyMTQ3NDgzNjQ2IiwJMTB9LAorCQl7IjIxNDc0ODM2NDciLAkxMH0sCisJCXsiMjE0NzQ4MzY0OCIsCTEwfSwKKwkJeyIyMTQ3NDgzNjQ5IiwJMTB9LAorCQl7IjQyOTQ5NjcyOTQiLAkxMH0sCisJCXsiNDI5NDk2NzI5NSIsCTEwfSwKKwkJeyI0Mjk0OTY3Mjk2IiwJMTB9LAorCQl7IjQyOTQ5NjcyOTciLAkxMH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwNiIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA3IiwJMTB9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDgiLAkxMH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwOSIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNCIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNSIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNiIsCTEwfSwKKwkJeyIxODQ0Njc0NDA3MzcwOTU1MTYxNyIsCTEwfSwKKwl9OworCVRFU1RfRkFJTChrc3RydG91MTYsIHUxNiwgIiVodSIsIHRlc3RfdTE2X2ZhaWwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdGVzdF9rc3RydG9zMTZfb2sodm9pZCkKK3sKKwlERUNMQVJFX1RFU1RfT0soczE2LCBzdHJ1Y3QgdGVzdF9zMTYpOworCXN0YXRpYyBERUZJTkVfVEVTVF9PSyhzdHJ1Y3QgdGVzdF9zMTYsIHRlc3RfczE2X29rKSA9IHsKKwkJeyItMTMwIiwJMTAsCS0xMzB9LAorCQl7Ii0xMjkiLAkxMCwJLTEyOX0sCisJCXsiLTEyOCIsCTEwLAktMTI4fSwKKwkJeyItMTI3IiwJMTAsCS0xMjd9LAorCQl7Ii0xIiwJMTAsCS0xfSwKKwkJeyIwIiwJMTAsCTB9LAorCQl7IjEiLAkxMCwJMX0sCisJCXsiMTI2IiwJMTAsCTEyNn0sCisJCXsiMTI3IiwJMTAsCTEyN30sCisJCXsiMTI4IiwJMTAsCTEyOH0sCisJCXsiMTI5IiwJMTAsCTEyOX0sCisJCXsiMjU0IiwJMTAsCTI1NH0sCisJCXsiMjU1IiwJMTAsCTI1NX0sCisJCXsiMjU2IiwJMTAsCTI1Nn0sCisJCXsiMjU3IiwJMTAsCTI1N30sCisJCXsiMzI3NjYiLAkxMCwJMzI3NjZ9LAorCQl7IjMyNzY3IiwJMTAsCTMyNzY3fSwKKwl9OworCVRFU1RfT0soa3N0cnRvczE2LCBzMTYsICIlaGQiLCB0ZXN0X3MxNl9vayk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X2tzdHJ0b3MxNl9mYWlsKHZvaWQpCit7CisJc3RhdGljIERFRklORV9URVNUX0ZBSUwodGVzdF9zMTZfZmFpbCkgPSB7CisJCXsiMzI3NjgiLAkxMH0sCisJCXsiMzI3NjkiLAkxMH0sCisJCXsiNjU1MzQiLAkxMH0sCisJCXsiNjU1MzUiLAkxMH0sCisJCXsiNjU1MzYiLAkxMH0sCisJCXsiNjU1MzciLAkxMH0sCisJCXsiMjE0NzQ4MzY0NiIsCTEwfSwKKwkJeyIyMTQ3NDgzNjQ3IiwJMTB9LAorCQl7IjIxNDc0ODM2NDgiLAkxMH0sCisJCXsiMjE0NzQ4MzY0OSIsCTEwfSwKKwkJeyI0Mjk0OTY3Mjk0IiwJMTB9LAorCQl7IjQyOTQ5NjcyOTUiLAkxMH0sCisJCXsiNDI5NDk2NzI5NiIsCTEwfSwKKwkJeyI0Mjk0OTY3Mjk3IiwJMTB9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDYiLAkxMH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwNyIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA4IiwJMTB9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDkiLAkxMH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTQiLAkxMH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTUiLAkxMH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTYiLAkxMH0sCisJCXsiMTg0NDY3NDQwNzM3MDk1NTE2MTciLAkxMH0sCisJfTsKKwlURVNUX0ZBSUwoa3N0cnRvczE2LCBzMTYsICIlaGQiLCB0ZXN0X3MxNl9mYWlsKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvdThfb2sodm9pZCkKK3sKKwlERUNMQVJFX1RFU1RfT0sodTgsIHN0cnVjdCB0ZXN0X3U4KTsKKwlzdGF0aWMgREVGSU5FX1RFU1RfT0soc3RydWN0IHRlc3RfdTgsIHRlc3RfdThfb2spID0geworCQl7IjAiLAkxMCwJMH0sCisJCXsiMSIsCTEwLAkxfSwKKwkJeyIxMjYiLAkxMCwJMTI2fSwKKwkJeyIxMjciLAkxMCwJMTI3fSwKKwkJeyIxMjgiLAkxMCwJMTI4fSwKKwkJeyIxMjkiLAkxMCwJMTI5fSwKKwkJeyIyNTQiLAkxMCwJMjU0fSwKKwkJeyIyNTUiLAkxMCwJMjU1fSwKKwl9OworCVRFU1RfT0soa3N0cnRvdTgsIHU4LCAiJWhodSIsIHRlc3RfdThfb2spOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdGVzdF9rc3RydG91OF9mYWlsKHZvaWQpCit7CisJc3RhdGljIERFRklORV9URVNUX0ZBSUwodGVzdF91OF9mYWlsKSA9IHsKKwkJeyItMiIsCTEwfSwKKwkJeyItMSIsCTEwfSwKKwkJeyIyNTYiLAkxMH0sCisJCXsiMjU3IiwJMTB9LAorCQl7IjMyNzY2IiwJMTB9LAorCQl7IjMyNzY3IiwJMTB9LAorCQl7IjMyNzY4IiwJMTB9LAorCQl7IjMyNzY5IiwJMTB9LAorCQl7IjY1NTM0IiwJMTB9LAorCQl7IjY1NTM1IiwJMTB9LAorCQl7IjY1NTM2IiwJMTB9LAorCQl7IjY1NTM3IiwJMTB9LAorCQl7IjIxNDc0ODM2NDYiLAkxMH0sCisJCXsiMjE0NzQ4MzY0NyIsCTEwfSwKKwkJeyIyMTQ3NDgzNjQ4IiwJMTB9LAorCQl7IjIxNDc0ODM2NDkiLAkxMH0sCisJCXsiNDI5NDk2NzI5NCIsCTEwfSwKKwkJeyI0Mjk0OTY3Mjk1IiwJMTB9LAorCQl7IjQyOTQ5NjcyOTYiLAkxMH0sCisJCXsiNDI5NDk2NzI5NyIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA2IiwJMTB9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDciLAkxMH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwOCIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA5IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE0IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE2IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE3IiwJMTB9LAorCX07CisJVEVTVF9GQUlMKGtzdHJ0b3U4LCB1OCwgIiVoaHUiLCB0ZXN0X3U4X2ZhaWwpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdGVzdF9rc3RydG9zOF9vayh2b2lkKQoreworCURFQ0xBUkVfVEVTVF9PSyhzOCwgc3RydWN0IHRlc3RfczgpOworCXN0YXRpYyBERUZJTkVfVEVTVF9PSyhzdHJ1Y3QgdGVzdF9zOCwgdGVzdF9zOF9vaykgPSB7CisJCXsiLTEyOCIsCTEwLAktMTI4fSwKKwkJeyItMTI3IiwJMTAsCS0xMjd9LAorCQl7Ii0xIiwJMTAsCS0xfSwKKwkJeyIwIiwJMTAsCTB9LAorCQl7IjEiLAkxMCwJMX0sCisJCXsiMTI2IiwJMTAsCTEyNn0sCisJCXsiMTI3IiwJMTAsCTEyN30sCisJfTsKKwlURVNUX09LKGtzdHJ0b3M4LCBzOCwgIiVoaGQiLCB0ZXN0X3M4X29rKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRlc3Rfa3N0cnRvczhfZmFpbCh2b2lkKQoreworCXN0YXRpYyBERUZJTkVfVEVTVF9GQUlMKHRlc3RfczhfZmFpbCkgPSB7CisJCXsiLTEzMCIsCTEwfSwKKwkJeyItMTI5IiwJMTB9LAorCQl7IjEyOCIsCTEwfSwKKwkJeyIxMjkiLAkxMH0sCisJCXsiMjU0IiwJMTB9LAorCQl7IjI1NSIsCTEwfSwKKwkJeyIyNTYiLAkxMH0sCisJCXsiMjU3IiwJMTB9LAorCQl7IjMyNzY2IiwJMTB9LAorCQl7IjMyNzY3IiwJMTB9LAorCQl7IjMyNzY4IiwJMTB9LAorCQl7IjMyNzY5IiwJMTB9LAorCQl7IjY1NTM0IiwJMTB9LAorCQl7IjY1NTM1IiwJMTB9LAorCQl7IjY1NTM2IiwJMTB9LAorCQl7IjY1NTM3IiwJMTB9LAorCQl7IjIxNDc0ODM2NDYiLAkxMH0sCisJCXsiMjE0NzQ4MzY0NyIsCTEwfSwKKwkJeyIyMTQ3NDgzNjQ4IiwJMTB9LAorCQl7IjIxNDc0ODM2NDkiLAkxMH0sCisJCXsiNDI5NDk2NzI5NCIsCTEwfSwKKwkJeyI0Mjk0OTY3Mjk1IiwJMTB9LAorCQl7IjQyOTQ5NjcyOTYiLAkxMH0sCisJCXsiNDI5NDk2NzI5NyIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA2IiwJMTB9LAorCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDciLAkxMH0sCisJCXsiOTIyMzM3MjAzNjg1NDc3NTgwOCIsCTEwfSwKKwkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA5IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE0IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE2IiwJMTB9LAorCQl7IjE4NDQ2NzQ0MDczNzA5NTUxNjE3IiwJMTB9LAorCX07CisJVEVTVF9GQUlMKGtzdHJ0b3M4LCBzOCwgIiVoaGQiLCB0ZXN0X3M4X2ZhaWwpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2tzdHJ0b3hfaW5pdCh2b2lkKQoreworCXRlc3Rfa3N0cnRvdWxsX29rKCk7CisJdGVzdF9rc3RydG91bGxfZmFpbCgpOworCXRlc3Rfa3N0cnRvbGxfb2soKTsKKwl0ZXN0X2tzdHJ0b2xsX2ZhaWwoKTsKKworCXRlc3Rfa3N0cnRvdTY0X29rKCk7CisJdGVzdF9rc3RydG91NjRfZmFpbCgpOworCXRlc3Rfa3N0cnRvczY0X29rKCk7CisJdGVzdF9rc3RydG9zNjRfZmFpbCgpOworCisJdGVzdF9rc3RydG91MzJfb2soKTsKKwl0ZXN0X2tzdHJ0b3UzMl9mYWlsKCk7CisJdGVzdF9rc3RydG9zMzJfb2soKTsKKwl0ZXN0X2tzdHJ0b3MzMl9mYWlsKCk7CisKKwl0ZXN0X2tzdHJ0b3UxNl9vaygpOworCXRlc3Rfa3N0cnRvdTE2X2ZhaWwoKTsKKwl0ZXN0X2tzdHJ0b3MxNl9vaygpOworCXRlc3Rfa3N0cnRvczE2X2ZhaWwoKTsKKworCXRlc3Rfa3N0cnRvdThfb2soKTsKKwl0ZXN0X2tzdHJ0b3U4X2ZhaWwoKTsKKwl0ZXN0X2tzdHJ0b3M4X29rKCk7CisJdGVzdF9rc3RydG9zOF9mYWlsKCk7CisJcmV0dXJuIC1FSU5WQUw7Cit9Cittb2R1bGVfaW5pdCh0ZXN0X2tzdHJ0b3hfaW5pdCk7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGQzMDIzZGYuLjAyYmNkZDUgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC0xMjAsMTQ3ICsxMjAsNiBAQAogfQogRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG9sbCk7CiAKLS8qKgotICogc3RyaWN0X3N0cnRvdWwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgc3RyaWN0bHkKLSAqIEBjcDogVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQKLSAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCi0gKiBAcmVzOiBUaGUgY29udmVydGVkIHJlc3VsdCB2YWx1ZQotICoKLSAqIHN0cmljdF9zdHJ0b3VsIGNvbnZlcnRzIGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgb25seSBpZiB0aGUKLSAqIHN0cmluZyBpcyByZWFsbHkgYW4gdW5zaWduZWQgbG9uZyBzdHJpbmcsIGFueSBzdHJpbmcgY29udGFpbmluZwotICogYW55IGludmFsaWQgY2hhciBhdCB0aGUgdGFpbCB3aWxsIGJlIHJlamVjdGVkIGFuZCAtRUlOVkFMIGlzIHJldHVybmVkLAotICogb25seSBhIG5ld2xpbmUgY2hhciBhdCB0aGUgdGFpbCBpcyBhY2NlcHRpYmxlIGJlY2F1c2UgcGVvcGxlIGdlbmVyYWxseQotICogY2hhbmdlIGEgbW9kdWxlIHBhcmFtZXRlciBpbiB0aGUgZm9sbG93aW5nIHdheToKLSAqCi0gKiAJZWNobyAxMDI0ID4gL3N5cy9tb2R1bGUvZTEwMDAvcGFyYW1ldGVycy9jb3B5YnJlYWsKLSAqCi0gKiBlY2hvIHdpbGwgYXBwZW5kIGEgbmV3bGluZSB0byB0aGUgdGFpbC4KLSAqCi0gKiBJdCByZXR1cm5zIDAgaWYgY29udmVyc2lvbiBpcyBzdWNjZXNzZnVsIGFuZCAqcmVzIGlzIHNldCB0byB0aGUgY29udmVydGVkCi0gKiB2YWx1ZSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgLUVJTlZBTCBhbmQgKnJlcyBpcyBzZXQgdG8gMC4KLSAqCi0gKiBzaW1wbGVfc3RydG91bCBqdXN0IGlnbm9yZXMgdGhlIHN1Y2Nlc3NpdmUgaW52YWxpZCBjaGFyYWN0ZXJzIGFuZAotICogcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUgb2YgcHJlZml4IHBhcnQgb2YgdGhlIHN0cmluZy4KLSAqLwotaW50IHN0cmljdF9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgbG9uZyAqcmVzKQotewotCWNoYXIgKnRhaWw7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQkqcmVzID0gMDsKLQlpZiAoISpjcCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2YWwgPSBzaW1wbGVfc3RydG91bChjcCwgJnRhaWwsIGJhc2UpOwotCWlmICh0YWlsID09IGNwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgodGFpbFswXSA9PSAnXDAnKSB8fCAodGFpbFswXSA9PSAnXG4nICYmIHRhaWxbMV0gPT0gJ1wwJykpIHsKLQkJKnJlcyA9IHZhbDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci1FWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b3VsKTsKLQotLyoqCi0gKiBzdHJpY3Rfc3RydG9sIC0gY29udmVydCBhIHN0cmluZyB0byBhIGxvbmcgc3RyaWN0bHkKLSAqIEBjcDogVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQKLSAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCi0gKiBAcmVzOiBUaGUgY29udmVydGVkIHJlc3VsdCB2YWx1ZQotICoKLSAqIHN0cmljdF9zdHJ0b2wgaXMgc2ltaWxpYXIgdG8gc3RyaWN0X3N0cnRvdWwsIGJ1dCBpdCBhbGxvd3MgdGhlIGZpcnN0Ci0gKiBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgaXMgJy0nLgotICoKLSAqIEl0IHJldHVybnMgMCBpZiBjb252ZXJzaW9uIGlzIHN1Y2Nlc3NmdWwgYW5kICpyZXMgaXMgc2V0IHRvIHRoZSBjb252ZXJ0ZWQKLSAqIHZhbHVlLCBvdGhlcndpc2UgaXQgcmV0dXJucyAtRUlOVkFMIGFuZCAqcmVzIGlzIHNldCB0byAwLgotICovCi1pbnQgc3RyaWN0X3N0cnRvbChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIGxvbmcgKnJlcykKLXsKLQlpbnQgcmV0OwotCWlmICgqY3AgPT0gJy0nKSB7Ci0JCXJldCA9IHN0cmljdF9zdHJ0b3VsKGNwICsgMSwgYmFzZSwgKHVuc2lnbmVkIGxvbmcgKilyZXMpOwotCQlpZiAoIXJldCkKLQkJCSpyZXMgPSAtKCpyZXMpOwotCX0gZWxzZSB7Ci0JCXJldCA9IHN0cmljdF9zdHJ0b3VsKGNwLCBiYXNlLCAodW5zaWduZWQgbG9uZyAqKXJlcyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvbCk7Ci0KLS8qKgotICogc3RyaWN0X3N0cnRvdWxsIC0gY29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGxvbmcgc3RyaWN0bHkKLSAqIEBjcDogVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQKLSAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCi0gKiBAcmVzOiBUaGUgY29udmVydGVkIHJlc3VsdCB2YWx1ZQotICoKLSAqIHN0cmljdF9zdHJ0b3VsbCBjb252ZXJ0cyBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGxvbmcgb25seSBpZiB0aGUKLSAqIHN0cmluZyBpcyByZWFsbHkgYW4gdW5zaWduZWQgbG9uZyBsb25nIHN0cmluZywgYW55IHN0cmluZyBjb250YWluaW5nCi0gKiBhbnkgaW52YWxpZCBjaGFyIGF0IHRoZSB0YWlsIHdpbGwgYmUgcmVqZWN0ZWQgYW5kIC1FSU5WQUwgaXMgcmV0dXJuZWQsCi0gKiBvbmx5IGEgbmV3bGluZSBjaGFyIGF0IHRoZSB0YWlsIGlzIGFjY2VwdGlibGUgYmVjYXVzZSBwZW9wbGUgZ2VuZXJhbGx5Ci0gKiBjaGFuZ2UgYSBtb2R1bGUgcGFyYW1ldGVyIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICoKLSAqIAllY2hvIDEwMjQgPiAvc3lzL21vZHVsZS9lMTAwMC9wYXJhbWV0ZXJzL2NvcHlicmVhawotICoKLSAqIGVjaG8gd2lsbCBhcHBlbmQgYSBuZXdsaW5lIHRvIHRoZSB0YWlsIG9mIHRoZSBzdHJpbmcuCi0gKgotICogSXQgcmV0dXJucyAwIGlmIGNvbnZlcnNpb24gaXMgc3VjY2Vzc2Z1bCBhbmQgKnJlcyBpcyBzZXQgdG8gdGhlIGNvbnZlcnRlZAotICogdmFsdWUsIG90aGVyd2lzZSBpdCByZXR1cm5zIC1FSU5WQUwgYW5kICpyZXMgaXMgc2V0IHRvIDAuCi0gKgotICogc2ltcGxlX3N0cnRvdWxsIGp1c3QgaWdub3JlcyB0aGUgc3VjY2Vzc2l2ZSBpbnZhbGlkIGNoYXJhY3RlcnMgYW5kCi0gKiByZXR1cm4gdGhlIGNvbnZlcnRlZCB2YWx1ZSBvZiBwcmVmaXggcGFydCBvZiB0aGUgc3RyaW5nLgotICovCi1pbnQgc3RyaWN0X3N0cnRvdWxsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nICpyZXMpCi17Ci0JY2hhciAqdGFpbDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwotCi0JKnJlcyA9IDA7Ci0JaWYgKCEqY3ApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsID0gc2ltcGxlX3N0cnRvdWxsKGNwLCAmdGFpbCwgYmFzZSk7Ci0JaWYgKHRhaWwgPT0gY3ApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgodGFpbFswXSA9PSAnXDAnKSB8fCAodGFpbFswXSA9PSAnXG4nICYmIHRhaWxbMV0gPT0gJ1wwJykpIHsKLQkJKnJlcyA9IHZhbDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci1FWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b3VsbCk7Ci0KLS8qKgotICogc3RyaWN0X3N0cnRvbGwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBsb25nIHN0cmljdGx5Ci0gKiBAY3A6IFRoZSBzdHJpbmcgdG8gYmUgY29udmVydGVkCi0gKiBAYmFzZTogVGhlIG51bWJlciBiYXNlIHRvIHVzZQotICogQHJlczogVGhlIGNvbnZlcnRlZCByZXN1bHQgdmFsdWUKLSAqCi0gKiBzdHJpY3Rfc3RydG9sbCBpcyBzaW1pbGlhciB0byBzdHJpY3Rfc3RydG91bGwsIGJ1dCBpdCBhbGxvd3MgdGhlIGZpcnN0Ci0gKiBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgaXMgJy0nLgotICoKLSAqIEl0IHJldHVybnMgMCBpZiBjb252ZXJzaW9uIGlzIHN1Y2Nlc3NmdWwgYW5kICpyZXMgaXMgc2V0IHRvIHRoZSBjb252ZXJ0ZWQKLSAqIHZhbHVlLCBvdGhlcndpc2UgaXQgcmV0dXJucyAtRUlOVkFMIGFuZCAqcmVzIGlzIHNldCB0byAwLgotICovCi1pbnQgc3RyaWN0X3N0cnRvbGwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCBsb25nIGxvbmcgKnJlcykKLXsKLQlpbnQgcmV0OwotCWlmICgqY3AgPT0gJy0nKSB7Ci0JCXJldCA9IHN0cmljdF9zdHJ0b3VsbChjcCArIDEsIGJhc2UsICh1bnNpZ25lZCBsb25nIGxvbmcgKilyZXMpOwotCQlpZiAoIXJldCkKLQkJCSpyZXMgPSAtKCpyZXMpOwotCX0gZWxzZSB7Ci0JCXJldCA9IHN0cmljdF9zdHJ0b3VsbChjcCwgYmFzZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKXJlcyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvbGwpOwotCiBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrCiBpbnQgc2tpcF9hdG9pKGNvbnN0IGNoYXIgKipzKQogewpAQCAtOTkxLDcgKzg1MCw3IEBACiBjaGFyICpwb2ludGVyKGNvbnN0IGNoYXIgKmZtdCwgY2hhciAqYnVmLCBjaGFyICplbmQsIHZvaWQgKnB0ciwKIAkgICAgICBzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKIHsKLQlpZiAoIXB0cikgeworCWlmICghcHRyICYmICpmbXQgIT0gJ0snKSB7CiAJCS8qCiAJCSAqIFByaW50IChudWxsKSB3aXRoIHRoZSBzYW1lIHdpZHRoIGFzIGEgcG9pbnRlciBzbyBpdCBtYWtlcwogCQkgKiB0YWJ1bGFyIG91dHB1dCBsb29rIG5pY2UuCkBAIC0xMDQ3LDE2ICs5MDYsMTIgQEAKIAkJCWlmIChzcGVjLmZpZWxkX3dpZHRoID09IC0xKQogCQkJCXNwZWMuZmllbGRfd2lkdGggPSAyICogc2l6ZW9mKHZvaWQgKik7CiAJCQlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCAicEstZXJyb3IiLCBzcGVjKTsKLQkJfSBlbHNlIGlmICgoa3B0cl9yZXN0cmljdCA9PSAwKSB8fAotCQkJIChrcHRyX3Jlc3RyaWN0ID09IDEgJiYKLQkJCSAgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfU1lTTE9HKSkpCi0JCQlicmVhazsKLQotCQlpZiAoc3BlYy5maWVsZF93aWR0aCA9PSAtMSkgewotCQkJc3BlYy5maWVsZF93aWR0aCA9IDIgKiBzaXplb2Yodm9pZCAqKTsKLQkJCXNwZWMuZmxhZ3MgfD0gWkVST1BBRDsKIAkJfQotCQlyZXR1cm4gbnVtYmVyKGJ1ZiwgZW5kLCAwLCBzcGVjKTsKKwkJaWYgKCEoKGtwdHJfcmVzdHJpY3QgPT0gMCkgfHwKKwkJICAgICAgKGtwdHJfcmVzdHJpY3QgPT0gMSAmJgorCQkgICAgICAgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfU1lTTE9HKSkpKQorCQkJcHRyID0gTlVMTDsKKwkJYnJlYWs7CiAJfQogCXNwZWMuZmxhZ3MgfD0gU01BTEw7CiAJaWYgKHNwZWMuZmllbGRfd2lkdGggPT0gLTEpIHsKZGlmZiAtLWdpdCBhL2xpYi96bGliX2RlZmxhdGUvZGVmbGF0ZS5jIGIvbGliL3psaWJfZGVmbGF0ZS9kZWZsYXRlLmMKaW5kZXggNDZhMzFlNS4uZDYzMzgxZSAxMDA2NDQKLS0tIGEvbGliL3psaWJfZGVmbGF0ZS9kZWZsYXRlLmMKKysrIGIvbGliL3psaWJfZGVmbGF0ZS9kZWZsYXRlLmMKQEAgLTE3Niw2ICsxNzYsNyBAQAogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgaW50IG5vaGVhZGVyID0gMDsKICAgICBkZWZsYXRlX3dvcmtzcGFjZSAqbWVtOworICAgIGNoYXIgKm5leHQ7CiAKICAgICB1c2ggKm92ZXJsYXk7CiAgICAgLyogV2Ugb3ZlcmxheSBwZW5kaW5nX2J1ZiBhbmQgZF9idWYrbF9idWYuIFRoaXMgd29ya3Mgc2luY2UgdGhlIGF2ZXJhZ2UKQEAgLTE5OSw2ICsyMDAsMjEgQEAKIAlzdHJhdGVneSA8IDAgfHwgc3RyYXRlZ3kgPiBaX0hVRkZNQU5fT05MWSkgewogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgfQorCisgICAgLyoKKyAgICAgKiBEaXJlY3QgdGhlIHdvcmtzcGFjZSdzIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MgdGhhdCB3ZXJlIGFsbG9jYXRlZAorICAgICAqIGFsb25nIHdpdGggdGhlIGRlZmxhdGVfd29ya3NwYWNlIHN0cnVjdC4KKyAgICAgKi8KKyAgICBuZXh0ID0gKGNoYXIgKikgbWVtOworICAgIG5leHQgKz0gc2l6ZW9mKCptZW0pOworICAgIG1lbS0+d2luZG93X21lbW9yeSA9IChCeXRlICopIG5leHQ7CisgICAgbmV4dCArPSB6bGliX2RlZmxhdGVfd2luZG93X21lbXNpemUod2luZG93Qml0cyk7CisgICAgbWVtLT5wcmV2X21lbW9yeSA9IChQb3MgKikgbmV4dDsKKyAgICBuZXh0ICs9IHpsaWJfZGVmbGF0ZV9wcmV2X21lbXNpemUod2luZG93Qml0cyk7CisgICAgbWVtLT5oZWFkX21lbW9yeSA9IChQb3MgKikgbmV4dDsKKyAgICBuZXh0ICs9IHpsaWJfZGVmbGF0ZV9oZWFkX21lbXNpemUobWVtTGV2ZWwpOworICAgIG1lbS0+b3ZlcmxheV9tZW1vcnkgPSBuZXh0OworCiAgICAgcyA9IChkZWZsYXRlX3N0YXRlICopICYobWVtLT5kZWZsYXRlX21lbW9yeSk7CiAgICAgc3RybS0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlICopczsKICAgICBzLT5zdHJtID0gc3RybTsKQEAgLTEyNDcsNyArMTI2MywxOCBAQAogICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKIH0KIAotaW50IHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKHZvaWQpCitpbnQgemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoaW50IHdpbmRvd0JpdHMsIGludCBtZW1MZXZlbCkKIHsKLSAgICByZXR1cm4gc2l6ZW9mKGRlZmxhdGVfd29ya3NwYWNlKTsKKyAgICBpZiAod2luZG93Qml0cyA8IDApIC8qIHVuZG9jdW1lbnRlZCBmZWF0dXJlOiBzdXBwcmVzcyB6bGliIGhlYWRlciAqLworICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CisKKyAgICAvKiBTaW5jZSB0aGUgcmV0dXJuIHZhbHVlIGlzIHR5cGljYWxseSBwYXNzZWQgdG8gdm1hbGxvYygpIHVuY2hlY2tlZC4uLiAqLworICAgIEJVR19PTihtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IHdpbmRvd0JpdHMgPCA5IHx8CisJCQkJCQkJd2luZG93Qml0cyA+IDE1KTsKKworICAgIHJldHVybiBzaXplb2YoZGVmbGF0ZV93b3Jrc3BhY2UpCisgICAgICAgICsgemxpYl9kZWZsYXRlX3dpbmRvd19tZW1zaXplKHdpbmRvd0JpdHMpCisgICAgICAgICsgemxpYl9kZWZsYXRlX3ByZXZfbWVtc2l6ZSh3aW5kb3dCaXRzKQorICAgICAgICArIHpsaWJfZGVmbGF0ZV9oZWFkX21lbXNpemUobWVtTGV2ZWwpCisgICAgICAgICsgemxpYl9kZWZsYXRlX292ZXJsYXlfbWVtc2l6ZShtZW1MZXZlbCk7CiB9CmRpZmYgLS1naXQgYS9saWIvemxpYl9kZWZsYXRlL2RlZnV0aWwuaCBiL2xpYi96bGliX2RlZmxhdGUvZGVmdXRpbC5oCmluZGV4IDZiMTVhOTAuLmI2NDBiNjQgMTAwNjQ0Ci0tLSBhL2xpYi96bGliX2RlZmxhdGUvZGVmdXRpbC5oCisrKyBiL2xpYi96bGliX2RlZmxhdGUvZGVmdXRpbC5oCkBAIC0yNDEsMTIgKzI0MSwyMSBAQAogdHlwZWRlZiBzdHJ1Y3QgZGVmbGF0ZV93b3Jrc3BhY2UgewogICAgIC8qIFN0YXRlIG1lbW9yeSBmb3IgdGhlIGRlZmxhdG9yICovCiAgICAgZGVmbGF0ZV9zdGF0ZSBkZWZsYXRlX21lbW9yeTsKLSAgICBCeXRlIHdpbmRvd19tZW1vcnlbMiAqICgxIDw8IE1BWF9XQklUUyldOwotICAgIFBvcyBwcmV2X21lbW9yeVsxIDw8IE1BWF9XQklUU107Ci0gICAgUG9zIGhlYWRfbWVtb3J5WzEgPDwgKE1BWF9NRU1fTEVWRUwgKyA3KV07Ci0gICAgY2hhciBvdmVybGF5X21lbW9yeVsoMSA8PCAoTUFYX01FTV9MRVZFTCArIDYpKSAqIChzaXplb2YodXNoKSsyKV07CisgICAgQnl0ZSAqd2luZG93X21lbW9yeTsKKyAgICBQb3MgKnByZXZfbWVtb3J5OworICAgIFBvcyAqaGVhZF9tZW1vcnk7CisgICAgY2hhciAqb3ZlcmxheV9tZW1vcnk7CiB9IGRlZmxhdGVfd29ya3NwYWNlOwogCisjZGVmaW5lIHpsaWJfZGVmbGF0ZV93aW5kb3dfbWVtc2l6ZSh3aW5kb3dCaXRzKSBcCisJKDIgKiAoMSA8PCAod2luZG93Qml0cykpICogc2l6ZW9mKEJ5dGUpKQorI2RlZmluZSB6bGliX2RlZmxhdGVfcHJldl9tZW1zaXplKHdpbmRvd0JpdHMpIFwKKwkoKDEgPDwgKHdpbmRvd0JpdHMpKSAqIHNpemVvZihQb3MpKQorI2RlZmluZSB6bGliX2RlZmxhdGVfaGVhZF9tZW1zaXplKG1lbUxldmVsKSBcCisJKCgxIDw8ICgobWVtTGV2ZWwpKzcpKSAqIHNpemVvZihQb3MpKQorI2RlZmluZSB6bGliX2RlZmxhdGVfb3ZlcmxheV9tZW1zaXplKG1lbUxldmVsKSBcCisJKCgxIDw8ICgobWVtTGV2ZWwpKzYpKSAqIChzaXplb2YodXNoKSsyKSkKKwogLyogT3V0cHV0IGEgYnl0ZSBvbiB0aGUgc3RyZWFtLgogICogSU4gYXNzZXJ0aW9uOiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiBwZW5kaW5nX2J1Zi4KICAqLwpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWcKaW5kZXggYWY3Y2ZiNC4uOGIxYTQ3NyAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZy5kZWJ1ZworKysgYi9tbS9LY29uZmlnLmRlYnVnCkBAIC0xLDI3ICsxLDI0IEBACiBjb25maWcgREVCVUdfUEFHRUFMTE9DCiAJYm9vbCAiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKLQlkZXBlbmRzIG9uICFISUJFUk5BVElPTiB8fCAhUFBDICYmICFTUEFSQworCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJZGVwZW5kcyBvbiAhSElCRVJOQVRJT04gfHwgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MgJiYgIVBQQyAmJiAhU1BBUkMKIAlkZXBlbmRzIG9uICFLTUVNQ0hFQ0sKKwlzZWxlY3QgUEFHRV9QT0lTT05JTkcgaWYgIUFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCiAJLS0taGVscC0tLQogCSAgVW5tYXAgcGFnZXMgZnJvbSB0aGUga2VybmVsIGxpbmVhciBtYXBwaW5nIGFmdGVyIGZyZWVfcGFnZXMoKS4KIAkgIFRoaXMgcmVzdWx0cyBpbiBhIGxhcmdlIHNsb3dkb3duLCBidXQgaGVscHMgdG8gZmluZCBjZXJ0YWluIHR5cGVzCiAJICBvZiBtZW1vcnkgY29ycnVwdGlvbi4KIAorCSAgRm9yIGFyY2hpdGVjdHVyZXMgd2hpY2ggZG9uJ3QgZW5hYmxlIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DLAorCSAgZmlsbCB0aGUgcGFnZXMgd2l0aCBwb2lzb24gcGF0dGVybnMgYWZ0ZXIgZnJlZV9wYWdlcygpIGFuZCB2ZXJpZnkKKwkgIHRoZSBwYXR0ZXJucyBiZWZvcmUgYWxsb2NfcGFnZXMoKS4gIEFkZGl0aW9uYWxseSwKKwkgIHRoaXMgb3B0aW9uIGNhbm5vdCBiZSBlbmFibGVkIGluIGNvbWJpbmF0aW9uIHdpdGggaGliZXJuYXRpb24gYXMKKwkgIHRoYXQgd291bGQgcmVzdWx0IGluIGluY29ycmVjdCB3YXJuaW5ncyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhZnRlcgorCSAgYSByZXN1bWUgYmVjYXVzZSBmcmVlIHBhZ2VzIGFyZSBub3Qgc2F2ZWQgdG8gdGhlIHN1c3BlbmQgaW1hZ2UuCisKIGNvbmZpZyBXQU5UX1BBR0VfREVCVUdfRkxBR1MKIAlib29sCiAKIGNvbmZpZyBQQUdFX1BPSVNPTklORwotCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwotCWRlcGVuZHMgb24gIUhJQkVSTkFUSU9OCi0Jc2VsZWN0IERFQlVHX1BBR0VBTExPQworCWJvb2wKIAlzZWxlY3QgV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCi0JLS0taGVscC0tLQotCSAgIEZpbGwgdGhlIHBhZ2VzIHdpdGggcG9pc29uIHBhdHRlcm5zIGFmdGVyIGZyZWVfcGFnZXMoKSBhbmQgdmVyaWZ5Ci0JICAgdGhlIHBhdHRlcm5zIGJlZm9yZSBhbGxvY19wYWdlcygpLiBUaGlzIHJlc3VsdHMgaW4gYSBsYXJnZSBzbG93ZG93biwKLQkgICBidXQgaGVscHMgdG8gZmluZCBjZXJ0YWluIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uLgotCi0JICAgVGhpcyBvcHRpb24gY2Fubm90IGJlIGVuYWJsZWQgaW4gY29tYmluYXRpb24gd2l0aCBoaWJlcm5hdGlvbiBhcwotCSAgIHRoYXQgd291bGQgcmVzdWx0IGluIGluY29ycmVjdCB3YXJuaW5ncyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhZnRlcgotCSAgIGEgcmVzdW1lIGJlY2F1c2UgZnJlZSBwYWdlcyBhcmUgbm90IHNhdmVkIHRvIHRoZSBzdXNwZW5kIGltYWdlLgpkaWZmIC0tZ2l0IGEvbW0vYm9vdG1lbS5jIGIvbW0vYm9vdG1lbS5jCmluZGV4IDA3YWViODkuLjAxZDVhNGIzIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC0zNCwxNCArMzQsNiBAQAogdW5zaWduZWQgbG9uZyBtaW5fbG93X3BmbjsKIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsKIAotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCi0vKgotICogSWYgd2UgaGF2ZSBib290ZWQgZHVlIHRvIGEgY3Jhc2gsIG1heF9wZm4gd2lsbCBiZSBhIHZlcnkgbG93IHZhbHVlLiBXZSBuZWVkCi0gKiB0byBrbm93IHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgdGhlIHByZXZpb3VzIGtlcm5lbCB1c2VkLgotICovCi11bnNpZ25lZCBsb25nIHNhdmVkX21heF9wZm47Ci0jZW5kaWYKLQogYm9vdG1lbV9kYXRhX3QgYm9vdG1lbV9ub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOwogCiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBiZGF0YV9saXN0IF9faW5pdGRhdGEgPSBMSVNUX0hFQURfSU5JVChiZGF0YV9saXN0KTsKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCA4YmU0MzBiLi4wMjFhMjk2IDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKKysrIGIvbW0vY29tcGFjdGlvbi5jCkBAIC00Miw4ICs0Miw2IEBACiAJdW5zaWduZWQgaW50IG9yZGVyOwkJLyogb3JkZXIgYSBkaXJlY3QgY29tcGFjdG9yIG5lZWRzICovCiAJaW50IG1pZ3JhdGV0eXBlOwkJLyogTU9WQUJMRSwgUkVDTEFJTUFCTEUgZXRjICovCiAJc3RydWN0IHpvbmUgKnpvbmU7Ci0KLQlpbnQgY29tcGFjdF9tb2RlOwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVsZWFzZV9mcmVlcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpCkBAIC0xNTUsNyArMTUzLDYgQEAKIAkgKiBwYWdlcyBvbiBjYy0+bWlncmF0ZXBhZ2VzLiBXZSBzdG9wIHNlYXJjaGluZyBpZiB0aGUgbWlncmF0ZQogCSAqIGFuZCBmcmVlIHBhZ2Ugc2Nhbm5lcnMgbWVldCBvciBlbm91Z2ggZnJlZSBwYWdlcyBhcmUgaXNvbGF0ZWQuCiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKDsgcGZuID4gbG93X3BmbiAmJiBjYy0+bnJfbWlncmF0ZXBhZ2VzID4gbnJfZnJlZXBhZ2VzOwogCQkJCQlwZm4gLT0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7CiAJCXVuc2lnbmVkIGxvbmcgaXNvbGF0ZWQ7CkBAIC0xNzgsOSArMTc1LDE5IEBACiAJCWlmICghc3VpdGFibGVfbWlncmF0aW9uX3RhcmdldChwYWdlKSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIEZvdW5kIGEgYmxvY2sgc3VpdGFibGUgZm9yIGlzb2xhdGluZyBmcmVlIHBhZ2VzIGZyb20gKi8KLQkJaXNvbGF0ZWQgPSBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayh6b25lLCBwZm4sIGZyZWVsaXN0KTsKLQkJbnJfZnJlZXBhZ2VzICs9IGlzb2xhdGVkOworCQkvKgorCQkgKiBGb3VuZCBhIGJsb2NrIHN1aXRhYmxlIGZvciBpc29sYXRpbmcgZnJlZSBwYWdlcyBmcm9tLiBOb3cKKwkJICogd2UgZGlzYWJsZWQgaW50ZXJydXB0cywgZG91YmxlIGNoZWNrIHRoaW5ncyBhcmUgb2sgYW5kCisJCSAqIGlzb2xhdGUgdGhlIHBhZ2VzLiBUaGlzIGlzIHRvIG1pbmltaXNlIHRoZSB0aW1lIElSUXMKKwkJICogYXJlIGRpc2FibGVkCisJCSAqLworCQlpc29sYXRlZCA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5sb2NrLCBmbGFncyk7CisJCWlmIChzdWl0YWJsZV9taWdyYXRpb25fdGFyZ2V0KHBhZ2UpKSB7CisJCQlpc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKHpvbmUsIHBmbiwgZnJlZWxpc3QpOworCQkJbnJfZnJlZXBhZ2VzICs9IGlzb2xhdGVkOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAogCQkvKgogCQkgKiBSZWNvcmQgdGhlIGhpZ2hlc3QgUEZOIHdlIGlzb2xhdGVkIHBhZ2VzIGZyb20uIFdoZW4gbmV4dApAQCAtMTkwLDcgKzE5Nyw2IEBACiAJCWlmIChpc29sYXRlZCkKIAkJCWhpZ2hfcGZuID0gbWF4KGhpZ2hfcGZuLCBwZm4pOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBzcGxpdF9mcmVlX3BhZ2UgZG9lcyBub3QgbWFwIHRoZSBwYWdlcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgZnJlZWxpc3QsIGxydSkgewpAQCAtMjcxLDkgKzI3NywyNyBAQAogCX0KIAogCS8qIFRpbWUgdG8gaXNvbGF0ZSBzb21lIHBhZ2VzIGZvciBtaWdyYXRpb24gKi8KKwljb25kX3Jlc2NoZWQoKTsKIAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJZm9yICg7IGxvd19wZm4gPCBlbmRfcGZuOyBsb3dfcGZuKyspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCWJvb2wgbG9ja2VkID0gdHJ1ZTsKKworCQkvKiBnaXZlIGEgY2hhbmNlIHRvIGlycXMgYmVmb3JlIGNoZWNraW5nIG5lZWRfcmVzY2hlZCgpICovCisJCWlmICghKChsb3dfcGZuKzEpICUgU1dBUF9DTFVTVEVSX01BWCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJbG9ja2VkID0gZmFsc2U7CisJCX0KKwkJaWYgKG5lZWRfcmVzY2hlZCgpIHx8IHNwaW5faXNfY29udGVuZGVkKCZ6b25lLT5scnVfbG9jaykpIHsKKwkJCWlmIChsb2NrZWQpCisJCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCQljb25kX3Jlc2NoZWQoKTsKKwkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIGlmICghbG9ja2VkKQorCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCiAJCWlmICghcGZuX3ZhbGlkX3dpdGhpbihsb3dfcGZuKSkKIAkJCWNvbnRpbnVlOwogCQlucl9zY2FubmVkKys7CkBAIC0zOTcsMTAgKzQyMSw3IEBACiAJCXJldHVybiBDT01QQUNUX0NPTVBMRVRFOwogCiAJLyogQ29tcGFjdGlvbiBydW4gaXMgbm90IGZpbmlzaGVkIGlmIHRoZSB3YXRlcm1hcmsgaXMgbm90IG1ldCAqLwotCWlmIChjYy0+Y29tcGFjdF9tb2RlICE9IENPTVBBQ1RfTU9ERV9LU1dBUEQpCi0JCXdhdGVybWFyayA9IGxvd193bWFya19wYWdlcyh6b25lKTsKLQllbHNlCi0JCXdhdGVybWFyayA9IGhpZ2hfd21hcmtfcGFnZXMoem9uZSk7CisJd2F0ZXJtYXJrID0gbG93X3dtYXJrX3BhZ2VzKHpvbmUpOwogCXdhdGVybWFyayArPSAoMSA8PCBjYy0+b3JkZXIpOwogCiAJaWYgKCF6b25lX3dhdGVybWFya19vayh6b25lLCBjYy0+b3JkZXIsIHdhdGVybWFyaywgMCwgMCkpCkBAIC00MTMsMTUgKzQzNCw2IEBACiAJaWYgKGNjLT5vcmRlciA9PSAtMSkKIAkJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CiAKLQkvKgotCSAqIEdlbmVyYXRpbmcgb25seSBvbmUgcGFnZSBvZiB0aGUgcmlnaHQgb3JkZXIgaXMgbm90IGVub3VnaAotCSAqIGZvciBrc3dhcGQsIHdlIG11c3QgY29udGludWUgdW50aWwgd2UncmUgYWJvdmUgdGhlIGhpZ2gKLQkgKiB3YXRlcm1hcmsgYXMgYSBwb29sIGZvciBoaWdoIG9yZGVyIEdGUF9BVE9NSUMgYWxsb2NhdGlvbnMKLQkgKiB0b28uCi0JICovCi0JaWYgKGNjLT5jb21wYWN0X21vZGUgPT0gQ09NUEFDVF9NT0RFX0tTV0FQRCkKLQkJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7Ci0KIAkvKiBEaXJlY3QgY29tcGFjdG9yOiBJcyBhIHN1aXRhYmxlIHBhZ2UgZnJlZT8gKi8KIAlmb3IgKG9yZGVyID0gY2MtPm9yZGVyOyBvcmRlciA8IE1BWF9PUkRFUjsgb3JkZXIrKykgewogCQkvKiBKb2IgZG9uZSBpZiBwYWdlIGlzIGZyZWUgb2YgdGhlIHJpZ2h0IG1pZ3JhdGV0eXBlICovCkBAIC01MDgsMTIgKzUyMCwxMyBAQAogCiAJd2hpbGUgKChyZXQgPSBjb21wYWN0X2ZpbmlzaGVkKHpvbmUsIGNjKSkgPT0gQ09NUEFDVF9DT05USU5VRSkgewogCQl1bnNpZ25lZCBsb25nIG5yX21pZ3JhdGUsIG5yX3JlbWFpbmluZzsKKwkJaW50IGVycjsKIAogCQlpZiAoIWlzb2xhdGVfbWlncmF0ZXBhZ2VzKHpvbmUsIGNjKSkKIAkJCWNvbnRpbnVlOwogCiAJCW5yX21pZ3JhdGUgPSBjYy0+bnJfbWlncmF0ZXBhZ2VzOwotCQltaWdyYXRlX3BhZ2VzKCZjYy0+bWlncmF0ZXBhZ2VzLCBjb21wYWN0aW9uX2FsbG9jLAorCQllcnIgPSBtaWdyYXRlX3BhZ2VzKCZjYy0+bWlncmF0ZXBhZ2VzLCBjb21wYWN0aW9uX2FsbG9jLAogCQkJCSh1bnNpZ25lZCBsb25nKWNjLCBmYWxzZSwKIAkJCQljYy0+c3luYyk7CiAJCXVwZGF0ZV9ucl9saXN0cGFnZXMoY2MpOwpAQCAtNTI3LDcgKzU0MCw3IEBACiAJCQkJCQlucl9yZW1haW5pbmcpOwogCiAJCS8qIFJlbGVhc2UgTFJVIHBhZ2VzIG5vdCBtaWdyYXRlZCAqLwotCQlpZiAoIWxpc3RfZW1wdHkoJmNjLT5taWdyYXRlcGFnZXMpKSB7CisJCWlmIChlcnIpIHsKIAkJCXB1dGJhY2tfbHJ1X3BhZ2VzKCZjYy0+bWlncmF0ZXBhZ2VzKTsKIAkJCWNjLT5ucl9taWdyYXRlcGFnZXMgPSAwOwogCQl9CkBAIC01NDMsOCArNTU2LDcgQEAKIAogdW5zaWduZWQgbG9uZyBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsCiAJCQkJIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJIGJvb2wgc3luYywKLQkJCQkgaW50IGNvbXBhY3RfbW9kZSkKKwkJCQkgYm9vbCBzeW5jKQogewogCXN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7CiAJCS5ucl9mcmVlcGFnZXMgPSAwLApAQCAtNTUzLDcgKzU2NSw2IEBACiAJCS5taWdyYXRldHlwZSA9IGFsbG9jZmxhZ3NfdG9fbWlncmF0ZXR5cGUoZ2ZwX21hc2spLAogCQkuem9uZSA9IHpvbmUsCiAJCS5zeW5jID0gc3luYywKLQkJLmNvbXBhY3RfbW9kZSA9IGNvbXBhY3RfbW9kZSwKIAl9OwogCUlOSVRfTElTVF9IRUFEKCZjYy5mcmVlcGFnZXMpOwogCUlOSVRfTElTVF9IRUFEKCZjYy5taWdyYXRlcGFnZXMpOwpAQCAtNTk5LDggKzYxMCw3IEBACiAJCQkJCQkJCW5vZGVtYXNrKSB7CiAJCWludCBzdGF0dXM7CiAKLQkJc3RhdHVzID0gY29tcGFjdF96b25lX29yZGVyKHpvbmUsIG9yZGVyLCBnZnBfbWFzaywgc3luYywKLQkJCQkJICAgIENPTVBBQ1RfTU9ERV9ESVJFQ1RfUkVDTEFJTSk7CisJCXN0YXR1cyA9IGNvbXBhY3Rfem9uZV9vcmRlcih6b25lLCBvcmRlciwgZ2ZwX21hc2ssIHN5bmMpOwogCQlyYyA9IG1heChzdGF0dXMsIHJjKTsKIAogCQkvKiBJZiBhIG5vcm1hbCBhbGxvY2F0aW9uIHdvdWxkIHN1Y2NlZWQsIHN0b3AgY29tcGFjdGluZyAqLwpAQCAtNjMxLDcgKzY0MSw2IEBACiAJCQkubnJfZnJlZXBhZ2VzID0gMCwKIAkJCS5ucl9taWdyYXRlcGFnZXMgPSAwLAogCQkJLm9yZGVyID0gLTEsCi0JCQkuY29tcGFjdF9tb2RlID0gQ09NUEFDVF9NT0RFX0RJUkVDVF9SRUNMQUlNLAogCQl9OwogCiAJCXpvbmUgPSAmcGdkYXQtPm5vZGVfem9uZXNbem9uZWlkXTsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA4M2E0NWQzLi5mODA3YWZkIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0xMDgsMTEgKzEwOCwxMSBAQAogICovCiAKIC8qCi0gKiBSZW1vdmUgYSBwYWdlIGZyb20gdGhlIHBhZ2UgY2FjaGUgYW5kIGZyZWUgaXQuIENhbGxlciBoYXMgdG8gbWFrZQorICogRGVsZXRlIGEgcGFnZSBmcm9tIHRoZSBwYWdlIGNhY2hlIGFuZCBmcmVlIGl0LiBDYWxsZXIgaGFzIHRvIG1ha2UKICAqIHN1cmUgdGhlIHBhZ2UgaXMgbG9ja2VkIGFuZCB0aGF0IG5vYm9keSBlbHNlIHVzZXMgaXQgLSBvciB0aGF0IHVzYWdlCiAgKiBpcyBzYWZlLiAgVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIG1hcHBpbmcncyB0cmVlX2xvY2suCiAgKi8KLXZvaWQgX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQordm9pZCBfX2RlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwogCkBAIC0xMzcsNyArMTM3LDE1IEBACiAJfQogfQogCi12b2lkIHJlbW92ZV9mcm9tX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpCisvKioKKyAqIGRlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUgLSBkZWxldGUgcGFnZSBmcm9tIHBhZ2UgY2FjaGUKKyAqIEBwYWdlOiB0aGUgcGFnZSB3aGljaCB0aGUga2VybmVsIGlzIHRyeWluZyB0byByZW1vdmUgZnJvbSBwYWdlIGNhY2hlCisgKgorICogVGhpcyBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIHZlcmlmaWVkIHRvIGJlIGluIHRoZSBwYWdlCisgKiBjYWNoZSBhbmQgbG9ja2VkLiAgSXQgd2lsbCBuZXZlciBwdXQgdGhlIHBhZ2UgaW50byB0aGUgZnJlZSBsaXN0LCB0aGUgY2FsbGVyCisgKiBoYXMgYSByZWZlcmVuY2Ugb24gdGhlIHBhZ2UuCisgKi8KK3ZvaWQgZGVsZXRlX2Zyb21fcGFnZV9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAJdm9pZCAoKmZyZWVwYWdlKShzdHJ1Y3QgcGFnZSAqKTsKQEAgLTE0NiwxNCArMTU0LDE1IEBACiAKIAlmcmVlcGFnZSA9IG1hcHBpbmctPmFfb3BzLT5mcmVlcGFnZTsKIAlzcGluX2xvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwotCV9fcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKKwlfX2RlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwogCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKIAogCWlmIChmcmVlcGFnZSkKIAkJZnJlZXBhZ2UocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogfQotRVhQT1JUX1NZTUJPTChyZW1vdmVfZnJvbV9wYWdlX2NhY2hlKTsKK0VYUE9SVF9TWU1CT0woZGVsZXRlX2Zyb21fcGFnZV9jYWNoZSk7CiAKIHN0YXRpYyBpbnQgc3luY19wYWdlKHZvaWQgKndvcmQpCiB7CkBAIC0zODcsNiArMzk2LDc2IEBACiBFWFBPUlRfU1lNQk9MKGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UpOwogCiAvKioKKyAqIHJlcGxhY2VfcGFnZV9jYWNoZV9wYWdlIC0gcmVwbGFjZSBhIHBhZ2VjYWNoZSBwYWdlIHdpdGggYSBuZXcgb25lCisgKiBAb2xkOglwYWdlIHRvIGJlIHJlcGxhY2VkCisgKiBAbmV3OglwYWdlIHRvIHJlcGxhY2Ugd2l0aAorICogQGdmcF9tYXNrOglhbGxvY2F0aW9uIG1vZGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlcGxhY2VzIGEgcGFnZSBpbiB0aGUgcGFnZWNhY2hlIHdpdGggYSBuZXcgb25lLiAgT24KKyAqIHN1Y2Nlc3MgaXQgYWNxdWlyZXMgdGhlIHBhZ2VjYWNoZSByZWZlcmVuY2UgZm9yIHRoZSBuZXcgcGFnZSBhbmQKKyAqIGRyb3BzIGl0IGZvciB0aGUgb2xkIHBhZ2UuICBCb3RoIHRoZSBvbGQgYW5kIG5ldyBwYWdlcyBtdXN0IGJlCisgKiBsb2NrZWQuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFkZCB0aGUgbmV3IHBhZ2UgdG8gdGhlIExSVSwgdGhlCisgKiBjYWxsZXIgbXVzdCBkbyB0aGF0LgorICoKKyAqIFRoZSByZW1vdmUgKyBhZGQgaXMgYXRvbWljLiAgVGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24gY2FuIGZhaWwgaXMKKyAqIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKi8KK2ludCByZXBsYWNlX3BhZ2VfY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqb2xkLCBzdHJ1Y3QgcGFnZSAqbmV3LCBnZnBfdCBnZnBfbWFzaykKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKKworCVZNX0JVR19PTighUGFnZUxvY2tlZChvbGQpKTsKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQobmV3KSk7CisJVk1fQlVHX09OKG5ldy0+bWFwcGluZyk7CisKKwkvKgorCSAqIFRoaXMgaXMgbm90IHBhZ2UgbWlncmF0aW9uLCBidXQgcHJlcGFyZV9taWdyYXRpb24gYW5kCisJICogZW5kX21pZ3JhdGlvbiBkb2VzIGVub3VnaCB3b3JrIGZvciBjaGFyZ2UgcmVwbGFjZW1lbnQuCisJICoKKwkgKiBJbiB0aGUgbG9uZ2VyIHRlcm0gd2UgcHJvYmFibHkgd2FudCBhIHNwZWNpYWxpemVkIGZ1bmN0aW9uCisJICogZm9yIG1vdmluZyB0aGUgY2hhcmdlIGZyb20gb2xkIHRvIG5ldyBpbiBhIG1vcmUgZWZmaWNpZW50CisJICogbWFubmVyLgorCSAqLworCWVycm9yID0gbWVtX2Nncm91cF9wcmVwYXJlX21pZ3JhdGlvbihvbGQsIG5ldywgJm1lbWNnLCBnZnBfbWFzayk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IHJhZGl4X3RyZWVfcHJlbG9hZChnZnBfbWFzayAmIH5fX0dGUF9ISUdITUVNKTsKKwlpZiAoIWVycm9yKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb2xkLT5tYXBwaW5nOworCQl2b2lkICgqZnJlZXBhZ2UpKHN0cnVjdCBwYWdlICopOworCisJCXBnb2ZmX3Qgb2Zmc2V0ID0gb2xkLT5pbmRleDsKKwkJZnJlZXBhZ2UgPSBtYXBwaW5nLT5hX29wcy0+ZnJlZXBhZ2U7CisKKwkJcGFnZV9jYWNoZV9nZXQobmV3KTsKKwkJbmV3LT5tYXBwaW5nID0gbWFwcGluZzsKKwkJbmV3LT5pbmRleCA9IG9mZnNldDsKKworCQlzcGluX2xvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCQlfX2RlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUob2xkKTsKKwkJZXJyb3IgPSByYWRpeF90cmVlX2luc2VydCgmbWFwcGluZy0+cGFnZV90cmVlLCBvZmZzZXQsIG5ldyk7CisJCUJVR19PTihlcnJvcik7CisJCW1hcHBpbmctPm5ycGFnZXMrKzsKKwkJX19pbmNfem9uZV9wYWdlX3N0YXRlKG5ldywgTlJfRklMRV9QQUdFUyk7CisJCWlmIChQYWdlU3dhcEJhY2tlZChuZXcpKQorCQkJX19pbmNfem9uZV9wYWdlX3N0YXRlKG5ldywgTlJfU0hNRU0pOworCQlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwkJaWYgKGZyZWVwYWdlKQorCQkJZnJlZXBhZ2Uob2xkKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZCk7CisJCW1lbV9jZ3JvdXBfZW5kX21pZ3JhdGlvbihtZW1jZywgb2xkLCBuZXcsIHRydWUpOworCX0gZWxzZSB7CisJCW1lbV9jZ3JvdXBfZW5kX21pZ3JhdGlvbihtZW1jZywgb2xkLCBuZXcsIGZhbHNlKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZXBsYWNlX3BhZ2VfY2FjaGVfcGFnZSk7CisKKy8qKgogICogYWRkX3RvX3BhZ2VfY2FjaGVfbG9ja2VkIC0gYWRkIGEgbG9ja2VkIHBhZ2UgdG8gdGhlIHBhZ2VjYWNoZQogICogQHBhZ2U6CXBhZ2UgdG8gYWRkCiAgKiBAbWFwcGluZzoJdGhlIHBhZ2UncyBhZGRyZXNzX3NwYWNlCkBAIC02MjEsOCArNzAwLDEwIEBACiAJCV9fbG9ja19wYWdlKHBhZ2UpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewotCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQl3YWl0X29uX3BhZ2VfbG9ja2VkKHBhZ2UpOworCQlpZiAoIShmbGFncyAmIEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSkgeworCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJCXdhaXRfb25fcGFnZV9sb2NrZWQocGFnZSk7CisJCX0KIAkJcmV0dXJuIDA7CiAJfQogfQpAQCAtNzgyLDkgKzg2MywxMyBAQAogCQlwYWdlID0gcmFkaXhfdHJlZV9kZXJlZl9zbG90KCh2b2lkICoqKXBhZ2VzW2ldKTsKIAkJaWYgKHVubGlrZWx5KCFwYWdlKSkKIAkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRoaXMgY2FuIG9ubHkgdHJpZ2dlciB3aGVuIHRoZSBlbnRyeSBhdCBpbmRleCAwIG1vdmVzIG91dAorCQkgKiBvZiBvciBiYWNrIHRvIHRoZSByb290OiBub25lIHlldCBnb3R0ZW4sIHNhZmUgdG8gcmVzdGFydC4KKwkJICovCiAJCWlmIChyYWRpeF90cmVlX2RlcmVmX3JldHJ5KHBhZ2UpKSB7Ci0JCQlpZiAocmV0KQotCQkJCXN0YXJ0ID0gcGFnZXNbcmV0LTFdLT5pbmRleDsKKwkJCVdBUk5fT04oc3RhcnQgfCBpKTsKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQogCkBAIC04MDAsNiArODg1LDEzIEBACiAJCXBhZ2VzW3JldF0gPSBwYWdlOwogCQlyZXQrKzsKIAl9CisKKwkvKgorCSAqIElmIGFsbCBlbnRyaWVzIHdlcmUgcmVtb3ZlZCBiZWZvcmUgd2UgY291bGQgc2VjdXJlIHRoZW0sCisJICogdHJ5IGFnYWluLCBiZWNhdXNlIGNhbGxlcnMgc3RvcCB0cnlpbmcgb25jZSAwIGlzIHJldHVybmVkLgorCSAqLworCWlmICh1bmxpa2VseSghcmV0ICYmIG5yX2ZvdW5kKSkKKwkJZ290byByZXN0YXJ0OwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CkBAIC04MzQsNiArOTI2LDExIEBACiAJCXBhZ2UgPSByYWRpeF90cmVlX2RlcmVmX3Nsb3QoKHZvaWQgKiopcGFnZXNbaV0pOwogCQlpZiAodW5saWtlbHkoIXBhZ2UpKQogCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhpcyBjYW4gb25seSB0cmlnZ2VyIHdoZW4gdGhlIGVudHJ5IGF0IGluZGV4IDAgbW92ZXMgb3V0CisJCSAqIG9mIG9yIGJhY2sgdG8gdGhlIHJvb3Q6IG5vbmUgeWV0IGdvdHRlbiwgc2FmZSB0byByZXN0YXJ0LgorCQkgKi8KIAkJaWYgKHJhZGl4X3RyZWVfZGVyZWZfcmV0cnkocGFnZSkpCiAJCQlnb3RvIHJlc3RhcnQ7CiAKQEAgLTg5NCw2ICs5OTEsMTEgQEAKIAkJcGFnZSA9IHJhZGl4X3RyZWVfZGVyZWZfc2xvdCgodm9pZCAqKilwYWdlc1tpXSk7CiAJCWlmICh1bmxpa2VseSghcGFnZSkpCiAJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUaGlzIGNhbiBvbmx5IHRyaWdnZXIgd2hlbiB0aGUgZW50cnkgYXQgaW5kZXggMCBtb3ZlcyBvdXQKKwkJICogb2Ygb3IgYmFjayB0byB0aGUgcm9vdDogbm9uZSB5ZXQgZ290dGVuLCBzYWZlIHRvIHJlc3RhcnQuCisJCSAqLwogCQlpZiAocmFkaXhfdHJlZV9kZXJlZl9yZXRyeShwYWdlKSkKIAkJCWdvdG8gcmVzdGFydDsKIApAQCAtOTA5LDYgKzEwMTEsMTMgQEAKIAkJcGFnZXNbcmV0XSA9IHBhZ2U7CiAJCXJldCsrOwogCX0KKworCS8qCisJICogSWYgYWxsIGVudHJpZXMgd2VyZSByZW1vdmVkIGJlZm9yZSB3ZSBjb3VsZCBzZWN1cmUgdGhlbSwKKwkgKiB0cnkgYWdhaW4sIGJlY2F1c2UgY2FsbGVycyBzdG9wIHRyeWluZyBvbmNlIDAgaXMgcmV0dXJuZWQuCisJICovCisJaWYgKHVubGlrZWx5KCFyZXQgJiYgbnJfZm91bmQpKQorCQlnb3RvIHJlc3RhcnQ7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMTEzZTM1Yy4uMGE2MTllMCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC02NDMsMjMgKzY0MywyNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZ2ZwX3QgYWxsb2NfaHVnZXBhZ2VfZ2ZwbWFzayhpbnQgZGVmcmFnKQorc3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9nZnBtYXNrKGludCBkZWZyYWcsIGdmcF90IGV4dHJhX2dmcCkKIHsKLQlyZXR1cm4gR0ZQX1RSQU5TSFVHRSAmIH4oZGVmcmFnID8gMCA6IF9fR0ZQX1dBSVQpOworCXJldHVybiAoR0ZQX1RSQU5TSFVHRSAmIH4oZGVmcmFnID8gMCA6IF9fR0ZQX1dBSVQpKSB8IGV4dHJhX2dmcDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfaHVnZXBhZ2Vfdm1hKGludCBkZWZyYWcsCiAJCQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGhhZGRyLCBpbnQgbmQpCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaGFkZHIsIGludCBuZCwKKwkJCQkJICAgICAgZ2ZwX3QgZXh0cmFfZ2ZwKQogewotCXJldHVybiBhbGxvY19wYWdlc192bWEoYWxsb2NfaHVnZXBhZ2VfZ2ZwbWFzayhkZWZyYWcpLAorCXJldHVybiBhbGxvY19wYWdlc192bWEoYWxsb2NfaHVnZXBhZ2VfZ2ZwbWFzayhkZWZyYWcsIGV4dHJhX2dmcCksCiAJCQkgICAgICAgSFBBR0VfUE1EX09SREVSLCB2bWEsIGhhZGRyLCBuZCk7CiB9CiAKICNpZm5kZWYgQ09ORklHX05VTUEKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX2h1Z2VwYWdlKGludCBkZWZyYWcpCiB7Ci0JcmV0dXJuIGFsbG9jX3BhZ2VzKGFsbG9jX2h1Z2VwYWdlX2dmcG1hc2soZGVmcmFnKSwKKwlyZXR1cm4gYWxsb2NfcGFnZXMoYWxsb2NfaHVnZXBhZ2VfZ2ZwbWFzayhkZWZyYWcsIDApLAogCQkJICAgSFBBR0VfUE1EX09SREVSKTsKIH0KICNlbmRpZgpAQCAtNjc4LDcgKzY3OSw3IEBACiAJCWlmICh1bmxpa2VseShraHVnZXBhZ2VkX2VudGVyKHZtYSkpKQogCQkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAkJcGFnZSA9IGFsbG9jX2h1Z2VwYWdlX3ZtYSh0cmFuc3BhcmVudF9odWdlcGFnZV9kZWZyYWcodm1hKSwKLQkJCQkJICB2bWEsIGhhZGRyLCBudW1hX25vZGVfaWQoKSk7CisJCQkJCSAgdm1hLCBoYWRkciwgbnVtYV9ub2RlX2lkKCksIDApOwogCQlpZiAodW5saWtlbHkoIXBhZ2UpKQogCQkJZ290byBvdXQ7CiAJCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX25ld3BhZ2VfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKSkpIHsKQEAgLTc5OSw3ICs4MDAsOCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBIUEFHRV9QTURfTlI7IGkrKykgewotCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2Vfdm1hX25vZGUoR0ZQX0hJR0hVU0VSX01PVkFCTEUsCisJCXBhZ2VzW2ldID0gYWxsb2NfcGFnZV92bWFfbm9kZShHRlBfSElHSFVTRVJfTU9WQUJMRSB8CisJCQkJCSAgICAgICBfX0dGUF9PVEhFUl9OT0RFLAogCQkJCQkgICAgICAgdm1hLCBhZGRyZXNzLCBwYWdlX3RvX25pZChwYWdlKSk7CiAJCWlmICh1bmxpa2VseSghcGFnZXNbaV0gfHwKIAkJCSAgICAgbWVtX2Nncm91cF9uZXdwYWdlX2NoYXJnZShwYWdlc1tpXSwgbW0sCkBAIC05MDIsNyArOTA0LDcgQEAKIAlpZiAodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZW5hYmxlZCh2bWEpICYmCiAJICAgICF0cmFuc3BhcmVudF9odWdlcGFnZV9kZWJ1Z19jb3coKSkKIAkJbmV3X3BhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVmcmFnKHZtYSksCi0JCQkJCSAgICAgIHZtYSwgaGFkZHIsIG51bWFfbm9kZV9pZCgpKTsKKwkJCQkJICAgICAgdm1hLCBoYWRkciwgbnVtYV9ub2RlX2lkKCksIDApOwogCWVsc2UKIAkJbmV3X3BhZ2UgPSBOVUxMOwogCkBAIC0xNzc5LDcgKzE3ODEsNyBAQAogCSAqIHNjYWxhYmlsaXR5LgogCSAqLwogCW5ld19wYWdlID0gYWxsb2NfaHVnZXBhZ2Vfdm1hKGtodWdlcGFnZWRfZGVmcmFnKCksIHZtYSwgYWRkcmVzcywKLQkJCQkgICAgICBub2RlKTsKKwkJCQkgICAgICBub2RlLCBfX0dGUF9PVEhFUl9OT0RFKTsKIAlpZiAodW5saWtlbHkoIW5ld19wYWdlKSkgewogCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQkqaHBhZ2UgPSBFUlJfUFRSKC1FTk9NRU0pOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IGJiMGI3YzEuLjA2ZGU1YWEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTE4NzIsOCArMTg3Miw3IEBACiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IHJldDsKIAotCWlmICghd3JpdGUpCi0JCXRtcCA9IGgtPm1heF9odWdlX3BhZ2VzOworCXRtcCA9IGgtPm1heF9odWdlX3BhZ2VzOwogCiAJaWYgKHdyaXRlICYmIGgtPm9yZGVyID49IE1BWF9PUkRFUikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTM4LDggKzE5MzcsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWludCByZXQ7CiAKLQlpZiAoIXdyaXRlKQotCQl0bXAgPSBoLT5ucl9vdmVyY29tbWl0X2h1Z2VfcGFnZXM7CisJdG1wID0gaC0+bnJfb3ZlcmNvbW1pdF9odWdlX3BhZ2VzOwogCiAJaWYgKHdyaXRlICYmIGgtPm9yZGVyID49IE1BWF9PUkRFUikKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IGMyYjJhOTQuLjFiYmU3ODUgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCisrKyBiL21tL2tzbS5jCkBAIC0zMDEsMjAgKzMwMSw2IEBACiAJcmV0dXJuIHJtYXBfaXRlbS0+YWRkcmVzcyAmIFNUQUJMRV9GTEFHOwogfQogCi1zdGF0aWMgdm9pZCBob2xkX2Fub25fdm1hKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSwKLQkJCSAgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKLXsKLQlybWFwX2l0ZW0tPmFub25fdm1hID0gYW5vbl92bWE7Ci0JZ2V0X2Fub25fdm1hKGFub25fdm1hKTsKLX0KLQotc3RhdGljIHZvaWQga3NtX2Ryb3BfYW5vbl92bWEoc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtKQotewotCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBybWFwX2l0ZW0tPmFub25fdm1hOwotCi0JZHJvcF9hbm9uX3ZtYShhbm9uX3ZtYSk7Ci19Ci0KIC8qCiAgKiBrc21kLCBhbmQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKCksIG11c3Qgbm90IHRvdWNoIGFuIG1tJ3MKICAqIHBhZ2UgdGFibGVzIGFmdGVyIGl0IGhhcyBwYXNzZWQgdGhyb3VnaCBrc21fZXhpdCgpIC0gd2hpY2gsIGlmIG5lY2Vzc2FyeSwKQEAgLTM5Nyw3ICszODMsNyBAQAogCSAqIEl0IGlzIG5vdCBhbiBhY2NpZGVudCB0aGF0IHdoZW5ldmVyIHdlIHdhbnQgdG8gYnJlYWsgQ09XCiAJICogdG8gdW5kbywgd2UgYWxzbyBuZWVkIHRvIGRyb3AgYSByZWZlcmVuY2UgdG8gdGhlIGFub25fdm1hLgogCSAqLwotCWtzbV9kcm9wX2Fub25fdm1hKHJtYXBfaXRlbSk7CisJcHV0X2Fub25fdm1hKHJtYXBfaXRlbS0+YW5vbl92bWEpOwogCiAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCWlmIChrc21fdGVzdF9leGl0KG1tKSkKQEAgLTQ2Niw3ICs0NTIsNyBAQAogCQkJa3NtX3BhZ2VzX3NoYXJpbmctLTsKIAkJZWxzZQogCQkJa3NtX3BhZ2VzX3NoYXJlZC0tOwotCQlrc21fZHJvcF9hbm9uX3ZtYShybWFwX2l0ZW0pOworCQlwdXRfYW5vbl92bWEocm1hcF9pdGVtLT5hbm9uX3ZtYSk7CiAJCXJtYXBfaXRlbS0+YWRkcmVzcyAmPSBQQUdFX01BU0s7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KQEAgLTU1NCw3ICs1NDAsNyBAQAogCQllbHNlCiAJCQlrc21fcGFnZXNfc2hhcmVkLS07CiAKLQkJa3NtX2Ryb3BfYW5vbl92bWEocm1hcF9pdGVtKTsKKwkJcHV0X2Fub25fdm1hKHJtYXBfaXRlbS0+YW5vbl92bWEpOwogCQlybWFwX2l0ZW0tPmFkZHJlc3MgJj0gUEFHRV9NQVNLOwogCiAJfSBlbHNlIGlmIChybWFwX2l0ZW0tPmFkZHJlc3MgJiBVTlNUQUJMRV9GTEFHKSB7CkBAIC05NDksNyArOTM1LDggQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBNdXN0IGdldCByZWZlcmVuY2UgdG8gYW5vbl92bWEgd2hpbGUgc3RpbGwgaG9sZGluZyBtbWFwX3NlbSAqLwotCWhvbGRfYW5vbl92bWEocm1hcF9pdGVtLCB2bWEtPmFub25fdm1hKTsKKwlybWFwX2l0ZW0tPmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKKwlnZXRfYW5vbl92bWEodm1hLT5hbm9uX3ZtYSk7CiBvdXQ6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggNDYxOGZkYS4uYTA1NjJkMSAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYworKysgYi9tbS9tZW1ibG9jay5jCkBAIC01OCwyOCArNTgsNiBAQAogCXJldHVybiAoKGJhc2UxIDwgKGJhc2UyICsgc2l6ZTIpKSAmJiAoYmFzZTIgPCAoYmFzZTEgKyBzaXplMSkpKTsKIH0KIAotc3RhdGljIGxvbmcgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2FkZHJzX2FkamFjZW50KHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwKLQkJCSAgICAgICBwaHlzX2FkZHJfdCBiYXNlMiwgcGh5c19hZGRyX3Qgc2l6ZTIpCi17Ci0JaWYgKGJhc2UyID09IGJhc2UxICsgc2l6ZTEpCi0JCXJldHVybiAxOwotCWVsc2UgaWYgKGJhc2UxID09IGJhc2UyICsgc2l6ZTIpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZyBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVnaW9uc19hZGphY2VudChzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKLQkJCQkgdW5zaWduZWQgbG9uZyByMSwgdW5zaWduZWQgbG9uZyByMikKLXsKLQlwaHlzX2FkZHJfdCBiYXNlMSA9IHR5cGUtPnJlZ2lvbnNbcjFdLmJhc2U7Ci0JcGh5c19hZGRyX3Qgc2l6ZTEgPSB0eXBlLT5yZWdpb25zW3IxXS5zaXplOwotCXBoeXNfYWRkcl90IGJhc2UyID0gdHlwZS0+cmVnaW9uc1tyMl0uYmFzZTsKLQlwaHlzX2FkZHJfdCBzaXplMiA9IHR5cGUtPnJlZ2lvbnNbcjJdLnNpemU7Ci0KLQlyZXR1cm4gbWVtYmxvY2tfYWRkcnNfYWRqYWNlbnQoYmFzZTEsIHNpemUxLCBiYXNlMiwgc2l6ZTIpOwotfQotCiBsb25nIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwpAQCAtMjA2LDE0ICsxODQsMTMgQEAKIAkJdHlwZS0+cmVnaW9uc1tpXS5zaXplID0gdHlwZS0+cmVnaW9uc1tpICsgMV0uc2l6ZTsKIAl9CiAJdHlwZS0+Y250LS07Ci19CiAKLS8qIEFzc3VtcHRpb246IGJhc2UgYWRkciBvZiByZWdpb24gMSA8IGJhc2UgYWRkciBvZiByZWdpb24gMiAqLwotc3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2NvYWxlc2NlX3JlZ2lvbnMoc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCi0JCXVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpCi17Ci0JdHlwZS0+cmVnaW9uc1tyMV0uc2l6ZSArPSB0eXBlLT5yZWdpb25zW3IyXS5zaXplOwotCW1lbWJsb2NrX3JlbW92ZV9yZWdpb24odHlwZSwgcjIpOworCS8qIFNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgYXJyYXlzICovCisJaWYgKHR5cGUtPmNudCA9PSAwKSB7CisJCXR5cGUtPmNudCA9IDE7CisJCXR5cGUtPnJlZ2lvbnNbMF0uYmFzZSA9IDA7CisJCXR5cGUtPnJlZ2lvbnNbMF0uc2l6ZSA9IDA7CisJfQogfQogCiAvKiBEZWZpbmVkIGJlbG93IGJ1dCBuZWVkZWQgbm93ICovCkBAIC0yNzYsNyArMjUzLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBBZGQgdGhlIG5ldyByZXNlcnZlZCByZWdpb24gbm93LiBTaG91bGQgbm90IGZhaWwgISAqLwotCUJVR19PTihtZW1ibG9ja19hZGRfcmVnaW9uKCZtZW1ibG9jay5yZXNlcnZlZCwgYWRkciwgbmV3X3NpemUpIDwgMCk7CisJQlVHX09OKG1lbWJsb2NrX2FkZF9yZWdpb24oJm1lbWJsb2NrLnJlc2VydmVkLCBhZGRyLCBuZXdfc2l6ZSkpOwogCiAJLyogSWYgdGhlIGFycmF5IHdhc24ndCBvdXIgc3RhdGljIGluaXQgb25lLCB0aGVuIGZyZWUgaXQuIFdlIG9ubHkgZG8KIAkgKiB0aGF0IGJlZm9yZSBTTEFCIGlzIGF2YWlsYWJsZSBhcyBsYXRlciBvbiwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyCkBAIC0yOTYsNTggKzI3Myw5OSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgbG9uZyBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfYWRkX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKK3N0YXRpYyBsb25nIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19hZGRfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAorCQkJCQkJcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIGNvYWxlc2NlZCA9IDA7Ci0JbG9uZyBhZGphY2VudCwgaTsKKwlwaHlzX2FkZHJfdCBlbmQgPSBiYXNlICsgc2l6ZTsKKwlpbnQgaSwgc2xvdCA9IC0xOwogCisJLyogRmlyc3QgdHJ5IGFuZCBjb2FsZXNjZSB0aGlzIE1FTUJMT0NLIHdpdGggb3RoZXJzICovCisJZm9yIChpID0gMDsgaSA8IHR5cGUtPmNudDsgaSsrKSB7CisJCXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbiA9ICZ0eXBlLT5yZWdpb25zW2ldOworCQlwaHlzX2FkZHJfdCByZW5kID0gcmduLT5iYXNlICsgcmduLT5zaXplOworCisJCS8qIEV4aXQgaWYgdGhlcmUncyBubyBwb3NzaWJsZSBoaXRzICovCisJCWlmIChyZ24tPmJhc2UgPiBlbmQgfHwgcmduLT5zaXplID09IDApCisJCQlicmVhazsKKworCQkvKiBDaGVjayBpZiB3ZSBhcmUgZnVsbHkgZW5jbG9zZWQgd2l0aGluIGFuIGV4aXN0aW5nCisJCSAqIGJsb2NrCisJCSAqLworCQlpZiAocmduLT5iYXNlIDw9IGJhc2UgJiYgcmVuZCA+PSBlbmQpCisJCQlyZXR1cm4gMDsKKworCQkvKiBDaGVjayBpZiB3ZSBvdmVybGFwIG9yIGFyZSBhZGphY2VudCB3aXRoIHRoZSBib3R0b20KKwkJICogb2YgYSBibG9jay4KKwkJICovCisJCWlmIChiYXNlIDwgcmduLT5iYXNlICYmIGVuZCA+PSByZ24tPmJhc2UpIHsKKwkJCS8qIElmIHdlIGNhbid0IGNvYWxlc2NlLCBjcmVhdGUgYSBuZXcgYmxvY2sgKi8KKwkJCWlmICghbWVtYmxvY2tfbWVtb3J5X2Nhbl9jb2FsZXNjZShiYXNlLCBzaXplLAorCQkJCQkJCSAgcmduLT5iYXNlLAorCQkJCQkJCSAgcmduLT5zaXplKSkgeworCQkJCS8qIE92ZXJsYXAgJiBjYW4ndCBjb2FsZXNjZSBhcmUgbXV0dWFsbHkKKwkJCQkgKiBleGNsdXNpdmUsIGlmIHlvdSBkbyB0aGF0LCBiZSBwcmVwYXJlZAorCQkJCSAqIGZvciB0cm91YmxlCisJCQkJICovCisJCQkJV0FSTl9PTihlbmQgIT0gcmduLT5iYXNlKTsKKwkJCQlnb3RvIG5ld19ibG9jazsKKwkJCX0KKwkJCS8qIFdlIGV4dGVuZCB0aGUgYm90dG9tIG9mIHRoZSBibG9jayBkb3duIHRvIG91cgorCQkJICogYmFzZQorCQkJICovCisJCQlyZ24tPmJhc2UgPSBiYXNlOworCQkJcmduLT5zaXplID0gcmVuZCAtIGJhc2U7CisKKwkJCS8qIFJldHVybiBpZiB3ZSBoYXZlIG5vdGhpbmcgZWxzZSB0byBhbGxvY2F0ZQorCQkJICogKGZ1bGx5IGNvYWxlc2NlZCkKKwkJCSAqLworCQkJaWYgKHJlbmQgPj0gZW5kKQorCQkJCXJldHVybiAwOworCisJCQkvKiBXZSBjb250aW51ZSBwcm9jZXNzaW5nIGZyb20gdGhlIGVuZCBvZiB0aGUKKwkJCSAqIGNvYWxlc2NlZCBibG9jay4KKwkJCSAqLworCQkJYmFzZSA9IHJlbmQ7CisJCQlzaXplID0gZW5kIC0gYmFzZTsKKwkJfQorCisJCS8qIE5vdyBjaGVjayBpZiB3ZSBvdmVybGFwIG9yIGFyZSBhZGphY2VudCB3aXRoIHRoZQorCQkgKiB0b3Agb2YgYSBibG9jaworCQkgKi8KKwkJaWYgKGJhc2UgPD0gcmVuZCAmJiBlbmQgPj0gcmVuZCkgeworCQkJLyogSWYgd2UgY2FuJ3QgY29hbGVzY2UsIGNyZWF0ZSBhIG5ldyBibG9jayAqLworCQkJaWYgKCFtZW1ibG9ja19tZW1vcnlfY2FuX2NvYWxlc2NlKHJnbi0+YmFzZSwKKwkJCQkJCQkgIHJnbi0+c2l6ZSwKKwkJCQkJCQkgIGJhc2UsIHNpemUpKSB7CisJCQkJLyogT3ZlcmxhcCAmIGNhbid0IGNvYWxlc2NlIGFyZSBtdXR1YWxseQorCQkJCSAqIGV4Y2x1c2l2ZSwgaWYgeW91IGRvIHRoYXQsIGJlIHByZXBhcmVkCisJCQkJICogZm9yIHRyb3VibGUKKwkJCQkgKi8KKwkJCQlXQVJOX09OKHJlbmQgIT0gYmFzZSk7CisJCQkJZ290byBuZXdfYmxvY2s7CisJCQl9CisJCQkvKiBXZSBhZGp1c3Qgb3VyIGJhc2UgZG93biB0byBlbmNsb3NlIHRoZQorCQkJICogb3JpZ2luYWwgYmxvY2sgYW5kIGRlc3Ryb3kgaXQuIEl0IHdpbGwgYmUKKwkJCSAqIHBhcnQgb2Ygb3VyIG5ldyBhbGxvY2F0aW9uLiBTaW5jZSB3ZSd2ZQorCQkJICogZnJlZWQgYW4gZW50cnksIHdlIGtub3cgd2Ugd29uJ3QgZmFpbAorCQkJICogdG8gYWxsb2NhdGUgb25lIGxhdGVyLCBzbyB3ZSB3b24ndCByaXNrCisJCQkgKiBsb3NpbmcgdGhlIG9yaWdpbmFsIGJsb2NrIGFsbG9jYXRpb24uCisJCQkgKi8KKwkJCXNpemUgKz0gKGJhc2UgLSByZ24tPmJhc2UpOworCQkJYmFzZSA9IHJnbi0+YmFzZTsKKwkJCW1lbWJsb2NrX3JlbW92ZV9yZWdpb24odHlwZSwgaS0tKTsKKwkJfQorCX0KKworCS8qIElmIHRoZSBhcnJheSBpcyBlbXB0eSwgc3BlY2lhbCBjYXNlLCByZXBsYWNlIHRoZSBmYWtlCisJICogZmlsbGVyIHJlZ2lvbiBhbmQgcmV0dXJuCisJICovCiAJaWYgKCh0eXBlLT5jbnQgPT0gMSkgJiYgKHR5cGUtPnJlZ2lvbnNbMF0uc2l6ZSA9PSAwKSkgewogCQl0eXBlLT5yZWdpb25zWzBdLmJhc2UgPSBiYXNlOwogCQl0eXBlLT5yZWdpb25zWzBdLnNpemUgPSBzaXplOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBGaXJzdCB0cnkgYW5kIGNvYWxlc2NlIHRoaXMgTUVNQkxPQ0sgd2l0aCBhbm90aGVyLiAqLwotCWZvciAoaSA9IDA7IGkgPCB0eXBlLT5jbnQ7IGkrKykgewotCQlwaHlzX2FkZHJfdCByZ25iYXNlID0gdHlwZS0+cmVnaW9uc1tpXS5iYXNlOwotCQlwaHlzX2FkZHJfdCByZ25zaXplID0gdHlwZS0+cmVnaW9uc1tpXS5zaXplOwotCi0JCWlmICgocmduYmFzZSA9PSBiYXNlKSAmJiAocmduc2l6ZSA9PSBzaXplKSkKLQkJCS8qIEFscmVhZHkgaGF2ZSB0aGlzIHJlZ2lvbiwgc28gd2UncmUgZG9uZSAqLwotCQkJcmV0dXJuIDA7Ci0KLQkJYWRqYWNlbnQgPSBtZW1ibG9ja19hZGRyc19hZGphY2VudChiYXNlLCBzaXplLCByZ25iYXNlLCByZ25zaXplKTsKLQkJLyogQ2hlY2sgaWYgYXJjaCBhbGxvd3MgY29hbGVzY2luZyAqLwotCQlpZiAoYWRqYWNlbnQgIT0gMCAmJiB0eXBlID09ICZtZW1ibG9jay5tZW1vcnkgJiYKLQkJICAgICFtZW1ibG9ja19tZW1vcnlfY2FuX2NvYWxlc2NlKGJhc2UsIHNpemUsIHJnbmJhc2UsIHJnbnNpemUpKQotCQkJYnJlYWs7Ci0JCWlmIChhZGphY2VudCA+IDApIHsKLQkJCXR5cGUtPnJlZ2lvbnNbaV0uYmFzZSAtPSBzaXplOwotCQkJdHlwZS0+cmVnaW9uc1tpXS5zaXplICs9IHNpemU7Ci0JCQljb2FsZXNjZWQrKzsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKGFkamFjZW50IDwgMCkgewotCQkJdHlwZS0+cmVnaW9uc1tpXS5zaXplICs9IHNpemU7Ci0JCQljb2FsZXNjZWQrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogSWYgd2UgcGx1Z2dlZCBhIGhvbGUsIHdlIG1heSB3YW50IHRvIGFsc28gY29hbGVzY2Ugd2l0aCB0aGUKLQkgKiBuZXh0IHJlZ2lvbgotCSAqLwotCWlmICgoaSA8IHR5cGUtPmNudCAtIDEpICYmIG1lbWJsb2NrX3JlZ2lvbnNfYWRqYWNlbnQodHlwZSwgaSwgaSsxKSAmJgotCSAgICAoKHR5cGUgIT0gJm1lbWJsb2NrLm1lbW9yeSB8fCBtZW1ibG9ja19tZW1vcnlfY2FuX2NvYWxlc2NlKHR5cGUtPnJlZ2lvbnNbaV0uYmFzZSwKLQkJCQkJCQkgICAgIHR5cGUtPnJlZ2lvbnNbaV0uc2l6ZSwKLQkJCQkJCQkgICAgIHR5cGUtPnJlZ2lvbnNbaSsxXS5iYXNlLAotCQkJCQkJCSAgICAgdHlwZS0+cmVnaW9uc1tpKzFdLnNpemUpKSkpIHsKLQkJbWVtYmxvY2tfY29hbGVzY2VfcmVnaW9ucyh0eXBlLCBpLCBpKzEpOwotCQljb2FsZXNjZWQrKzsKLQl9Ci0KLQlpZiAoY29hbGVzY2VkKQotCQlyZXR1cm4gY29hbGVzY2VkOwotCisgbmV3X2Jsb2NrOgogCS8qIElmIHdlIGFyZSBvdXQgb2Ygc3BhY2UsIHdlIGZhaWwuIEl0J3MgdG9vIGxhdGUgdG8gcmVzaXplIHRoZSBhcnJheQogCSAqIGJ1dCB0aGVuIHRoaXMgc2hvdWxkbid0IGhhdmUgaGFwcGVuZWQgaW4gdGhlIGZpcnN0IHBsYWNlLgogCSAqLwpAQCAtMzYyLDEzICszODAsMTQgQEAKIAkJfSBlbHNlIHsKIAkJCXR5cGUtPnJlZ2lvbnNbaSsxXS5iYXNlID0gYmFzZTsKIAkJCXR5cGUtPnJlZ2lvbnNbaSsxXS5zaXplID0gc2l6ZTsKKwkJCXNsb3QgPSBpICsgMTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCiAJaWYgKGJhc2UgPCB0eXBlLT5yZWdpb25zWzBdLmJhc2UpIHsKIAkJdHlwZS0+cmVnaW9uc1swXS5iYXNlID0gYmFzZTsKIAkJdHlwZS0+cmVnaW9uc1swXS5zaXplID0gc2l6ZTsKKwkJc2xvdCA9IDA7CiAJfQogCXR5cGUtPmNudCsrOwogCkBAIC0zNzYsNyArMzk1LDggQEAKIAkgKiBvdXIgYWxsb2NhdGlvbiBhbmQgcmV0dXJuIGFuIGVycm9yCiAJICovCiAJaWYgKHR5cGUtPmNudCA9PSB0eXBlLT5tYXggJiYgbWVtYmxvY2tfZG91YmxlX2FycmF5KHR5cGUpKSB7Ci0JCXR5cGUtPmNudC0tOworCQlCVUdfT04oc2xvdCA8IDApOworCQltZW1ibG9ja19yZW1vdmVfcmVnaW9uKHR5cGUsIHNsb3QpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zODksNTIgKzQwOSw1NSBAQAogCiB9CiAKLXN0YXRpYyBsb25nIF9faW5pdF9tZW1ibG9jayBfX21lbWJsb2NrX3JlbW92ZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKK3N0YXRpYyBsb25nIF9faW5pdF9tZW1ibG9jayBfX21lbWJsb2NrX3JlbW92ZShzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKKwkJCQkJICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKIHsKLQlwaHlzX2FkZHJfdCByZ25iZWdpbiwgcmduZW5kOwogCXBoeXNfYWRkcl90IGVuZCA9IGJhc2UgKyBzaXplOwogCWludCBpOwogCi0JcmduYmVnaW4gPSByZ25lbmQgPSAwOyAvKiBzdXByZXNzIGdjYyB3YXJuaW5ncyAqLworCS8qIFdhbGsgdGhyb3VnaCB0aGUgYXJyYXkgZm9yIGNvbGxpc2lvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHlwZS0+Y250OyBpKyspIHsKKwkJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduID0gJnR5cGUtPnJlZ2lvbnNbaV07CisJCXBoeXNfYWRkcl90IHJlbmQgPSByZ24tPmJhc2UgKyByZ24tPnNpemU7CiAKLQkvKiBGaW5kIHRoZSByZWdpb24gd2hlcmUgKGJhc2UsIHNpemUpIGJlbG9uZ3MgdG8gKi8KLQlmb3IgKGk9MDsgaSA8IHR5cGUtPmNudDsgaSsrKSB7Ci0JCXJnbmJlZ2luID0gdHlwZS0+cmVnaW9uc1tpXS5iYXNlOwotCQlyZ25lbmQgPSByZ25iZWdpbiArIHR5cGUtPnJlZ2lvbnNbaV0uc2l6ZTsKLQotCQlpZiAoKHJnbmJlZ2luIDw9IGJhc2UpICYmIChlbmQgPD0gcmduZW5kKSkKKwkJLyogTm90aGluZyBtb3JlIHRvIGRvLCBleGl0ICovCisJCWlmIChyZ24tPmJhc2UgPiBlbmQgfHwgcmduLT5zaXplID09IDApCiAJCQlicmVhazsKKworCQkvKiBJZiB3ZSBmdWxseSBlbmNsb3NlIHRoZSBibG9jaywgZHJvcCBpdCAqLworCQlpZiAoYmFzZSA8PSByZ24tPmJhc2UgJiYgZW5kID49IHJlbmQpIHsKKwkJCW1lbWJsb2NrX3JlbW92ZV9yZWdpb24odHlwZSwgaS0tKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSWYgd2UgYXJlIGZ1bGx5IGVuY2xvc2VkIHdpdGhpbiBhIGJsb2NrCisJCSAqIHRoZW4gd2UgbmVlZCB0byBzcGxpdCBpdCBhbmQgd2UgYXJlIGRvbmUKKwkJICovCisJCWlmIChiYXNlID4gcmduLT5iYXNlICYmIGVuZCA8IHJlbmQpIHsKKwkJCXJnbi0+c2l6ZSA9IGJhc2UgLSByZ24tPmJhc2U7CisJCQlpZiAoIW1lbWJsb2NrX2FkZF9yZWdpb24odHlwZSwgZW5kLCByZW5kIC0gZW5kKSkKKwkJCQlyZXR1cm4gMDsKKwkJCS8qIEZhaWx1cmUgdG8gc3BsaXQgaXMgYmFkLCB3ZSBhdCBsZWFzdAorCQkJICogcmVzdG9yZSB0aGUgYmxvY2sgYmVmb3JlIGVycm9yaW5nCisJCQkgKi8KKwkJCXJnbi0+c2l6ZSA9IHJlbmQgLSByZ24tPmJhc2U7CisJCQlXQVJOX09OKDEpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byB0cmltIHRoZSBib3R0b20gb2YgYSBibG9jayAqLworCQlpZiAocmduLT5iYXNlIDwgZW5kICYmIHJlbmQgPiBlbmQpIHsKKwkJCXJnbi0+c2l6ZSAtPSBlbmQgLSByZ24tPmJhc2U7CisJCQlyZ24tPmJhc2UgPSBlbmQ7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEFuZCBjaGVjayBpZiB3ZSBuZWVkIHRvIHRyaW0gdGhlIHRvcCBvZiBhIGJsb2NrICovCisJCWlmIChiYXNlIDwgcmVuZCkKKwkJCXJnbi0+c2l6ZSAtPSByZW5kIC0gYmFzZTsKKwogCX0KLQotCS8qIERpZG4ndCBmaW5kIHRoZSByZWdpb24gKi8KLQlpZiAoaSA9PSB0eXBlLT5jbnQpCi0JCXJldHVybiAtMTsKLQotCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgcmVtb3ZpbmcgZW50aXJlIHJlZ2lvbiAqLwotCWlmICgocmduYmVnaW4gPT0gYmFzZSkgJiYgKHJnbmVuZCA9PSBlbmQpKSB7Ci0JCW1lbWJsb2NrX3JlbW92ZV9yZWdpb24odHlwZSwgaSk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIENoZWNrIHRvIHNlZSBpZiByZWdpb24gaXMgbWF0Y2hpbmcgYXQgdGhlIGZyb250ICovCi0JaWYgKHJnbmJlZ2luID09IGJhc2UpIHsKLQkJdHlwZS0+cmVnaW9uc1tpXS5iYXNlID0gZW5kOwotCQl0eXBlLT5yZWdpb25zW2ldLnNpemUgLT0gc2l6ZTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZWdpb24gaXMgbWF0Y2hpbmcgYXQgdGhlIGVuZCAqLwotCWlmIChyZ25lbmQgPT0gZW5kKSB7Ci0JCXR5cGUtPnJlZ2lvbnNbaV0uc2l6ZSAtPSBzaXplOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gc3BsaXQgdGhlIGVudHJ5IC0gIGFkanVzdCB0aGUgY3VycmVudCBvbmUgdG8gdGhlCi0JICogYmVnaW5naW5nIG9mIHRoZSBob2xlIGFuZCBhZGQgdGhlIHJlZ2lvbiBhZnRlciBob2xlLgotCSAqLwotCXR5cGUtPnJlZ2lvbnNbaV0uc2l6ZSA9IGJhc2UgLSB0eXBlLT5yZWdpb25zW2ldLmJhc2U7Ci0JcmV0dXJuIG1lbWJsb2NrX2FkZF9yZWdpb24odHlwZSwgZW5kLCByZ25lbmQgLSBlbmQpOworCXJldHVybiAwOwogfQogCiBsb25nIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZW1vdmUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKQEAgLTQ2Nyw3ICs0OTAsNyBAQAogCiAJZm91bmQgPSBtZW1ibG9ja19maW5kX2Jhc2Uoc2l6ZSwgYWxpZ24sIDAsIG1heF9hZGRyKTsKIAlpZiAoZm91bmQgIT0gTUVNQkxPQ0tfRVJST1IgJiYKLQkgICAgbWVtYmxvY2tfYWRkX3JlZ2lvbigmbWVtYmxvY2sucmVzZXJ2ZWQsIGZvdW5kLCBzaXplKSA+PSAwKQorCSAgICAhbWVtYmxvY2tfYWRkX3JlZ2lvbigmbWVtYmxvY2sucmVzZXJ2ZWQsIGZvdW5kLCBzaXplKSkKIAkJcmV0dXJuIGZvdW5kOwogCiAJcmV0dXJuIDA7CkBAIC01NDgsNyArNTcxLDcgQEAKIAkJaWYgKHRoaXNfbmlkID09IG5pZCkgewogCQkJcGh5c19hZGRyX3QgcmV0ID0gbWVtYmxvY2tfZmluZF9yZWdpb24oc3RhcnQsIHRoaXNfZW5kLCBzaXplLCBhbGlnbik7CiAJCQlpZiAocmV0ICE9IE1FTUJMT0NLX0VSUk9SICYmCi0JCQkgICAgbWVtYmxvY2tfYWRkX3JlZ2lvbigmbWVtYmxvY2sucmVzZXJ2ZWQsIHJldCwgc2l6ZSkgPj0gMCkKKwkJCSAgICAhbWVtYmxvY2tfYWRkX3JlZ2lvbigmbWVtYmxvY2sucmVzZXJ2ZWQsIHJldCwgc2l6ZSkpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQogCQlzdGFydCA9IHRoaXNfZW5kOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGRhNTNhMjUuLjFmMGI0NjAgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTczLDE1ICs3Myw2IEBACiAjZGVmaW5lIGRvX3N3YXBfYWNjb3VudAkJKDApCiAjZW5kaWYKIAotLyoKLSAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBUaGlzIGNvdW50ZXIKLSAqIGlzIHVzZWQgZm9yIHRyaWdnZXIgc29tZSBwZXJpb2RpYyBldmVudHMuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBiZXR0ZXIKLSAqIHRoYW4gdXNpbmcgamlmZmllcyBldGMuIHRvIGhhbmRsZSBwZXJpb2RpYyBtZW1jZyBldmVudC4KLSAqCi0gKiBUaGVzZSB2YWx1ZXMgd2lsbCBiZSB1c2VkIGFzICEoKGV2ZW50KSAmICgoMSA8PCh0aHJlc2gpKSAtIDEpKQotICovCi0jZGVmaW5lIFRIUkVTSE9MRFNfRVZFTlRTX1RIUkVTSCAoNykgLyogb25jZSBpbiAxMjggKi8KLSNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19USFJFU0ggKDEwKSAvKiBvbmNlIGluIDEwMjQgKi8KIAogLyoKICAqIFN0YXRpc3RpY3MgZm9yIG1lbW9yeSBjZ3JvdXAuCkBAIC05MywxOSArODQsMzYgQEAKIAlNRU1fQ0dST1VQX1NUQVRfQ0FDSEUsIAkgICAvKiAjIG9mIHBhZ2VzIGNoYXJnZWQgYXMgY2FjaGUgKi8KIAlNRU1fQ0dST1VQX1NUQVRfUlNTLAkgICAvKiAjIG9mIHBhZ2VzIGNoYXJnZWQgYXMgYW5vbiByc3MgKi8KIAlNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQsICAvKiAjIG9mIHBhZ2VzIGNoYXJnZWQgYXMgZmlsZSByc3MgKi8KLQlNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5ULAkvKiAjIG9mIHBhZ2VzIHBhZ2VkIGluICovCi0JTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQsCS8qICMgb2YgcGFnZXMgcGFnZWQgb3V0ICovCiAJTUVNX0NHUk9VUF9TVEFUX1NXQVBPVVQsIC8qICMgb2YgcGFnZXMsIHN3YXBwZWQgb3V0ICovCiAJTUVNX0NHUk9VUF9TVEFUX0RBVEEsIC8qIGVuZCBvZiBkYXRhIHJlcXVpcmVzIHN5bmNocm9uaXphdGlvbiAqLwotCS8qIGluY3JlbWVudGVkIGF0IGV2ZXJ5ICBwYWdlaW4vcGFnZW91dCAqLwotCU1FTV9DR1JPVVBfRVZFTlRTID0gTUVNX0NHUk9VUF9TVEFUX0RBVEEsCiAJTUVNX0NHUk9VUF9PTl9NT1ZFLAkvKiBzb21lb25lIGlzIG1vdmluZyBhY2NvdW50IGJldHdlZW4gZ3JvdXBzICovCi0KIAlNRU1fQ0dST1VQX1NUQVRfTlNUQVRTLAogfTsKIAorZW51bSBtZW1fY2dyb3VwX2V2ZW50c19pbmRleCB7CisJTUVNX0NHUk9VUF9FVkVOVFNfUEdQR0lOLAkvKiAjIG9mIHBhZ2VzIHBhZ2VkIGluICovCisJTUVNX0NHUk9VUF9FVkVOVFNfUEdQR09VVCwJLyogIyBvZiBwYWdlcyBwYWdlZCBvdXQgKi8KKwlNRU1fQ0dST1VQX0VWRU5UU19DT1VOVCwJLyogIyBvZiBwYWdlcyBwYWdlZCBpbi9vdXQgKi8KKwlNRU1fQ0dST1VQX0VWRU5UU19OU1RBVFMsCit9OworLyoKKyAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCwKKyAqIGl0IHdpbGwgYmUgaW5jcmVtYXRlZCBieSB0aGUgbnVtYmVyIG9mIHBhZ2VzLiBUaGlzIGNvdW50ZXIgaXMgdXNlZCBmb3IKKyAqIGZvciB0cmlnZ2VyIHNvbWUgcGVyaW9kaWMgZXZlbnRzLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgYmV0dGVyCisgKiB0aGFuIHVzaW5nIGppZmZpZXMgZXRjLiB0byBoYW5kbGUgcGVyaW9kaWMgbWVtY2cgZXZlbnQuCisgKi8KK2VudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHsKKwlNRU1fQ0dST1VQX1RBUkdFVF9USFJFU0gsCisJTUVNX0NHUk9VUF9UQVJHRVRfU09GVExJTUlULAorCU1FTV9DR1JPVVBfTlRBUkdFVFMsCit9OworI2RlZmluZSBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQgKDEyOCkKKyNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19UQVJHRVQgKDEwMjQpCisKIHN0cnVjdCBtZW1fY2dyb3VwX3N0YXRfY3B1IHsKLQlzNjQgY291bnRbTUVNX0NHUk9VUF9TVEFUX05TVEFUU107CisJbG9uZyBjb3VudFtNRU1fQ0dST1VQX1NUQVRfTlNUQVRTXTsKKwl1bnNpZ25lZCBsb25nIGV2ZW50c1tNRU1fQ0dST1VQX0VWRU5UU19OU1RBVFNdOworCXVuc2lnbmVkIGxvbmcgdGFyZ2V0c1tNRU1fQ0dST1VQX05UQVJHRVRTXTsKIH07CiAKIC8qCkBAIC0yMTgsMTIgKzIyNiw2IEBACiAJICogcGVyIHpvbmUgTFJVIGxpc3RzLgogCSAqLwogCXN0cnVjdCBtZW1fY2dyb3VwX2xydV9pbmZvIGluZm87Ci0KLQkvKgotCSAgcHJvdGVjdCBhZ2FpbnN0IHJlY2xhaW0gcmVsYXRlZCBtZW1iZXIuCi0JKi8KLQlzcGlubG9ja190IHJlY2xhaW1fcGFyYW1fbG9jazsKLQogCS8qCiAJICogV2hpbGUgcmVjbGFpbWluZyBpbiBhIGhpZXJhcmNoeSwgd2UgY2FjaGUgdGhlIGxhc3QgY2hpbGQgd2UKIAkgKiByZWNsYWltZWQgZnJvbS4KQEAgLTMyNywxMyArMzI5LDYgQEAKIAlOUl9DSEFSR0VfVFlQRSwKIH07CiAKLS8qIG9ubHkgZm9yIGhlcmUgKGZvciBlYXN5IHJlYWRpbmcuKSAqLwotI2RlZmluZSBQQ0dGX0NBQ0hFCSgxVUwgPDwgUENHX0NBQ0hFKQotI2RlZmluZSBQQ0dGX1VTRUQJKDFVTCA8PCBQQ0dfVVNFRCkKLSNkZWZpbmUgUENHRl9MT0NLCSgxVUwgPDwgUENHX0xPQ0spCi0vKiBOb3QgdXNlZCwgYnV0IGFkZGVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcyAqLwotI2RlZmluZSBQQ0dGX0FDQ1QJKDFVTCA8PCBQQ0dfQUNDVCkKLQogLyogZm9yIGVuY29kaW5nIGNmdC0+cHJpdmF0ZSB2YWx1ZSBvbiBmaWxlICovCiAjZGVmaW5lIF9NRU0JCQkoMCkKICNkZWZpbmUgX01FTVNXQVAJCSgxKQpAQCAtMzcxLDE0ICszNjYsMTAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICoKLXBhZ2VfY2dyb3VwX3pvbmVpbmZvKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCitwYWdlX2Nncm91cF96b25laW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gcGMtPm1lbV9jZ3JvdXA7Ci0JaW50IG5pZCA9IHBhZ2VfY2dyb3VwX25pZChwYyk7Ci0JaW50IHppZCA9IHBhZ2VfY2dyb3VwX3ppZChwYyk7Ci0KLQlpZiAoIW1lbSkKLQkJcmV0dXJuIE5VTEw7CisJaW50IG5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpOworCWludCB6aWQgPSBwYWdlX3pvbmVudW0ocGFnZSk7CiAKIAlyZXR1cm4gbWVtX2Nncm91cF96b25laW5mbyhtZW0sIG5pZCwgemlkKTsKIH0KQEAgLTUwNCwxMSArNDk1LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9leGNlc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKLXsKLQlyZXR1cm4gcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm1lbS0+cmVzKSA+PiBQQUdFX1NISUZUOwotfQotCiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKgogX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCiB7CkBAIC01NjUsMTEgKzU1MSwxMSBAQAogICogY29tbW9uIHdvcmtsb2FkLCB0aHJlYXNob2xkIGFuZCBzeW5jaG9uaXphdGlvbiBhcyB2bXN0YXRbXSBzaG91bGQgYmUKICAqIGltcGxlbWVudGVkLgogICovCi1zdGF0aWMgczY0IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCWVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCkKK3N0YXRpYyBsb25nIG1lbV9jZ3JvdXBfcmVhZF9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCisJCQkJIGVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCkKIHsKKwlsb25nIHZhbCA9IDA7CiAJaW50IGNwdTsKLQlzNjQgdmFsID0gMDsKIAogCWdldF9vbmxpbmVfY3B1cygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQpAQCAtNTgzLDkgKzU2OSw5IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIHM2NCBtZW1fY2dyb3VwX2xvY2FsX3VzYWdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCitzdGF0aWMgbG9uZyBtZW1fY2dyb3VwX2xvY2FsX3VzYWdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7Ci0JczY0IHJldDsKKwlsb25nIHJldDsKIAogCXJldCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KG1lbSwgTUVNX0NHUk9VUF9TVEFUX1JTUyk7CiAJcmV0ICs9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KG1lbSwgTUVNX0NHUk9VUF9TVEFUX0NBQ0hFKTsKQEAgLTU5OSw2ICs1ODUsMjIgQEAKIAl0aGlzX2NwdV9hZGQobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfU1dBUE9VVF0sIHZhbCk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfcmVhZF9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKKwkJCQkJICAgIGVudW0gbWVtX2Nncm91cF9ldmVudHNfaW5kZXggaWR4KQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXZhbCArPSBwZXJfY3B1KG1lbS0+c3RhdC0+ZXZlbnRzW2lkeF0sIGNwdSk7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJc3Bpbl9sb2NrKCZtZW0tPnBjcF9jb3VudGVyX2xvY2spOworCXZhbCArPSBtZW0tPm5vY3B1X2Jhc2UuZXZlbnRzW2lkeF07CisJc3Bpbl91bmxvY2soJm1lbS0+cGNwX2NvdW50ZXJfbG9jayk7CisjZW5kaWYKKwlyZXR1cm4gdmFsOworfQorCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCSBib29sIGZpbGUsIGludCBucl9wYWdlcykKIHsKQEAgLTYxMSwxMyArNjEzLDEzIEBACiAKIAkvKiBwYWdlaW4gb2YgYSBiaWcgcGFnZSBpcyBhbiBldmVudC4gU28sIGlnbm9yZSBwYWdlIHNpemUgKi8KIAlpZiAobnJfcGFnZXMgPiAwKQotCQlfX3RoaXNfY3B1X2luYyhtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9QR1BHSU5fQ09VTlRdKTsKKwkJX190aGlzX2NwdV9pbmMobWVtLT5zdGF0LT5ldmVudHNbTUVNX0NHUk9VUF9FVkVOVFNfUEdQR0lOXSk7CiAJZWxzZSB7Ci0JCV9fdGhpc19jcHVfaW5jKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlRdKTsKKwkJX190aGlzX2NwdV9pbmMobWVtLT5zdGF0LT5ldmVudHNbTUVNX0NHUk9VUF9FVkVOVFNfUEdQR09VVF0pOwogCQlucl9wYWdlcyA9IC1ucl9wYWdlczsgLyogZm9yIGV2ZW50ICovCiAJfQogCi0JX190aGlzX2NwdV9hZGQobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX0VWRU5UU10sIG5yX3BhZ2VzKTsKKwlfX3RoaXNfY3B1X2FkZChtZW0tPnN0YXQtPmV2ZW50c1tNRU1fQ0dST1VQX0VWRU5UU19DT1VOVF0sIG5yX3BhZ2VzKTsKIAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CkBAIC02MzcsMTMgKzYzOSwzNCBAQAogCXJldHVybiB0b3RhbDsKIH0KIAotc3RhdGljIGJvb2wgX19tZW1jZ19ldmVudF9jaGVjayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBpbnQgZXZlbnRfbWFza19zaGlmdCkKK3N0YXRpYyBib29sIF9fbWVtY2dfZXZlbnRfY2hlY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgaW50IHRhcmdldCkKIHsKLQlzNjQgdmFsOworCXVuc2lnbmVkIGxvbmcgdmFsLCBuZXh0OwogCi0JdmFsID0gdGhpc19jcHVfcmVhZChtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfRVZFTlRTXSk7CisJdmFsID0gdGhpc19jcHVfcmVhZChtZW0tPnN0YXQtPmV2ZW50c1tNRU1fQ0dST1VQX0VWRU5UU19DT1VOVF0pOworCW5leHQgPSB0aGlzX2NwdV9yZWFkKG1lbS0+c3RhdC0+dGFyZ2V0c1t0YXJnZXRdKTsKKwkvKiBmcm9tIHRpbWVfYWZ0ZXIoKSBpbiBqaWZmaWVzLmggKi8KKwlyZXR1cm4gKChsb25nKW5leHQgLSAobG9uZyl2YWwgPCAwKTsKK30KIAotCXJldHVybiAhKHZhbCAmICgoMSA8PCBldmVudF9tYXNrX3NoaWZ0KSAtIDEpKTsKK3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF90YXJnZXRfdXBkYXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGludCB0YXJnZXQpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIG5leHQ7CisKKwl2YWwgPSB0aGlzX2NwdV9yZWFkKG1lbS0+c3RhdC0+ZXZlbnRzW01FTV9DR1JPVVBfRVZFTlRTX0NPVU5UXSk7CisKKwlzd2l0Y2ggKHRhcmdldCkgeworCWNhc2UgTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIOgorCQluZXh0ID0gdmFsICsgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUOworCQlicmVhazsKKwljYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVDoKKwkJbmV4dCA9IHZhbCArIFNPRlRMSU1JVF9FVkVOVFNfVEFSR0VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJdGhpc19jcHVfd3JpdGUobWVtLT5zdGF0LT50YXJnZXRzW3RhcmdldF0sIG5leHQpOwogfQogCiAvKgpAQCAtNjUzLDEwICs2NzYsMTUgQEAKIHN0YXRpYyB2b2lkIG1lbWNnX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAkvKiB0aHJlc2hvbGQgZXZlbnQgaXMgdHJpZ2dlcmVkIGluIGZpbmVyIGdyYWluIHRoYW4gc29mdCBsaW1pdCAqLwotCWlmICh1bmxpa2VseShfX21lbWNnX2V2ZW50X2NoZWNrKG1lbSwgVEhSRVNIT0xEU19FVkVOVFNfVEhSRVNIKSkpIHsKKwlpZiAodW5saWtlbHkoX19tZW1jZ19ldmVudF9jaGVjayhtZW0sIE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCkpKSB7CiAJCW1lbV9jZ3JvdXBfdGhyZXNob2xkKG1lbSk7Ci0JCWlmICh1bmxpa2VseShfX21lbWNnX2V2ZW50X2NoZWNrKG1lbSwgU09GVExJTUlUX0VWRU5UU19USFJFU0gpKSkKKwkJX19tZW1fY2dyb3VwX3RhcmdldF91cGRhdGUobWVtLCBNRU1fQ0dST1VQX1RBUkdFVF9USFJFU0gpOworCQlpZiAodW5saWtlbHkoX19tZW1jZ19ldmVudF9jaGVjayhtZW0sCisJCQlNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQpKSl7CiAJCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbSwgcGFnZSk7CisJCQlfX21lbV9jZ3JvdXBfdGFyZ2V0X3VwZGF0ZShtZW0sCisJCQkJTUVNX0NHUk9VUF9UQVJHRVRfU09GVExJTUlUKTsKKwkJfQogCX0KIH0KIApAQCAtODE1LDcgKzg0Myw3IEBACiAJICogV2UgZG9uJ3QgY2hlY2sgUENHX1VTRUQgYml0LiBJdCdzIGNsZWFyZWQgd2hlbiB0aGUgInBhZ2UiIGlzIGZpbmFsbHkKIAkgKiByZW1vdmVkIGZyb20gZ2xvYmFsIExSVS4KIAkgKi8KLQlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKKwlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjLT5tZW1fY2dyb3VwLCBwYWdlKTsKIAkvKiBodWdlIHBhZ2Ugc3BsaXQgaXMgZG9uZSB1bmRlciBscnVfbG9jay4gc28sIHdlIGhhdmUgbm8gcmFjZXMuICovCiAJTUVNX0NHUk9VUF9aU1RBVChteiwgbHJ1KSAtPSAxIDw8IGNvbXBvdW5kX29yZGVyKHBhZ2UpOwogCWlmIChtZW1fY2dyb3VwX2lzX3Jvb3QocGMtPm1lbV9jZ3JvdXApKQpAQCAtODI5LDYgKzg1NywzMiBAQAogCW1lbV9jZ3JvdXBfZGVsX2xydV9saXN0KHBhZ2UsIHBhZ2VfbHJ1KHBhZ2UpKTsKIH0KIAorLyoKKyAqIFdyaXRlYmFjayBpcyBhYm91dCB0byBlbmQgYWdhaW5zdCBhIHBhZ2Ugd2hpY2ggaGFzIGJlZW4gbWFya2VkIGZvciBpbW1lZGlhdGUKKyAqIHJlY2xhaW0uICBJZiBpdCBzdGlsbCBhcHBlYXJzIHRvIGJlIHJlY2xhaW1hYmxlLCBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZQorICogaW5hY3RpdmUgbGlzdC4KKyAqLwordm9pZCBtZW1fY2dyb3VwX3JvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOworCWVudW0gbHJ1X2xpc3QgbHJ1ID0gcGFnZV9scnUocGFnZSk7CisKKwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQorCQlyZXR1cm47CisKKwlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwkvKiB1bnVzZWQgb3Igcm9vdCBwYWdlIGlzIG5vdCByb3RhdGVkLiAqLworCWlmICghUGFnZUNncm91cFVzZWQocGMpKQorCQlyZXR1cm47CisJLyogRW5zdXJlIHBjLT5tZW1fY2dyb3VwIGlzIHZpc2libGUgYWZ0ZXIgcmVhZGluZyBQQ0dfVVNFRC4gKi8KKwlzbXBfcm1iKCk7CisJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChwYy0+bWVtX2Nncm91cCkpCisJCXJldHVybjsKKwlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjLT5tZW1fY2dyb3VwLCBwYWdlKTsKKwlsaXN0X21vdmVfdGFpbCgmcGMtPmxydSwgJm16LT5saXN0c1tscnVdKTsKK30KKwogdm9pZCBtZW1fY2dyb3VwX3JvdGF0ZV9scnVfbGlzdChzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBscnUpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwpAQCAtODQ1LDcgKzg5OSw3IEBACiAJc21wX3JtYigpOwogCWlmIChtZW1fY2dyb3VwX2lzX3Jvb3QocGMtPm1lbV9jZ3JvdXApKQogCQlyZXR1cm47Ci0JbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CisJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYy0+bWVtX2Nncm91cCwgcGFnZSk7CiAJbGlzdF9tb3ZlKCZwYy0+bHJ1LCAmbXotPmxpc3RzW2xydV0pOwogfQogCkBAIC04NjIsNyArOTE2LDcgQEAKIAkJcmV0dXJuOwogCS8qIEVuc3VyZSBwYy0+bWVtX2Nncm91cCBpcyB2aXNpYmxlIGFmdGVyIHJlYWRpbmcgUENHX1VTRUQuICovCiAJc21wX3JtYigpOwotCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOworCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMtPm1lbV9jZ3JvdXAsIHBhZ2UpOwogCS8qIGh1Z2UgcGFnZSBzcGxpdCBpcyBkb25lIHVuZGVyIGxydV9sb2NrLiBzbywgd2UgaGF2ZSBubyByYWNlcy4gKi8KIAlNRU1fQ0dST1VQX1pTVEFUKG16LCBscnUpICs9IDEgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CiAJU2V0UGFnZUNncm91cEFjY3RMUlUocGMpOwpAQCAtODcyLDE4ICs5MjYsMjggQEAKIH0KIAogLyoKLSAqIEF0IGhhbmRsaW5nIFN3YXBDYWNoZSwgcGMtPm1lbV9jZ3JvdXAgbWF5IGJlIGNoYW5nZWQgd2hpbGUgaXQncyBsaW5rZWQgdG8KLSAqIGxydSBiZWNhdXNlIHRoZSBwYWdlIG1heS5iZSByZXVzZWQgYWZ0ZXIgaXQncyBmdWxseSB1bmNoYXJnZWQgKGJlY2F1c2Ugb2YKLSAqIFN3YXBDYWNoZSBiZWhhdmlvcikuVG8gaGFuZGxlIHRoYXQsIHVubGluayBwYWdlX2Nncm91cCBmcm9tIExSVSB3aGVuIGNoYXJnZQotICogaXQgYWdhaW4uIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIGNoYXJnZSBTd2FwQ2FjaGUuIEl0J3MgZG9uZSB1bmRlcgotICogbG9ja19wYWdlIGFuZCBleHBlY3RlZCB0aGF0IHpvbmUtPmxydV9sb2NrIGlzIG5ldmVyIGhlbGQuCisgKiBBdCBoYW5kbGluZyBTd2FwQ2FjaGUgYW5kIG90aGVyIEZVU0Ugc3R1ZmYsIHBjLT5tZW1fY2dyb3VwIG1heSBiZSBjaGFuZ2VkCisgKiB3aGlsZSBpdCdzIGxpbmtlZCB0byBscnUgYmVjYXVzZSB0aGUgcGFnZSBtYXkgYmUgcmV1c2VkIGFmdGVyIGl0J3MgZnVsbHkKKyAqIHVuY2hhcmdlZC4gVG8gaGFuZGxlIHRoYXQsIHVubGluayBwYWdlX2Nncm91cCBmcm9tIExSVSB3aGVuIGNoYXJnZSBpdCBhZ2Fpbi4KKyAqIEl0J3MgZG9uZSB1bmRlciBsb2NrX3BhZ2UgYW5kIGV4cGVjdGVkIHRoYXQgem9uZS0+bHJ1X2xvY2sgaXNuZXZlciBoZWxkLgogICovCi1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9kZWxfYmVmb3JlX2NvbW1pdF9zd2FwY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9kZWxfYmVmb3JlX2NvbW1pdChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOwogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CiAKKwkvKgorCSAqIERvaW5nIHRoaXMgY2hlY2sgd2l0aG91dCB0YWtpbmcgLT5scnVfbG9jayBzZWVtcyB3cm9uZyBidXQgdGhpcworCSAqIGlzIHNhZmUuIEJlY2F1c2UgaWYgcGFnZV9jZ3JvdXAncyBVU0VEIGJpdCBpcyB1bnNldCwgdGhlIHBhZ2UKKwkgKiB3aWxsIG5vdCBiZSBhZGRlZCB0byBhbnkgbWVtY2cncyBMUlUuIElmIHBhZ2VfY2dyb3VwJ3MgVVNFRCBiaXQgaXMKKwkgKiBzZXQsIHRoZSBjb21taXQgYWZ0ZXIgdGhpcyB3aWxsIGZhaWwsIGFueXdheS4KKwkgKiBUaGlzIGFsbCBjaGFyZ2UvdW5jaGFyZ2UgaXMgZG9uZSB1bmRlciBzb21lIG11dHVhbCBleGVjdXN0aW9uLgorCSAqIFNvLCB3ZSBkb24ndCBuZWVkIHRvIHRha2luZyBjYXJlIG9mIGNoYW5nZXMgaW4gVVNFRCBiaXQuCisJICovCisJaWYgKGxpa2VseSghUGFnZUxSVShwYWdlKSkpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOwogCS8qCiAJICogRm9yZ2V0IG9sZCBMUlUgd2hlbiB0aGlzIHBhZ2VfY2dyb3VwIGlzICpub3QqIHVzZWQuIFRoaXMgVXNlZCBiaXQKQEAgLTg5NCwxMiArOTU4LDE1IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfYWRkX2FmdGVyX2NvbW1pdF9zd2FwY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9hZGRfYWZ0ZXJfY29tbWl0KHN0cnVjdCBwYWdlICpwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKIAorCS8qIHRha2luZyBjYXJlIG9mIHRoYXQgdGhlIHBhZ2UgaXMgYWRkZWQgdG8gTFJVIHdoaWxlIHdlIGNvbW1pdCBpdCAqLworCWlmIChsaWtlbHkoIVBhZ2VMUlUocGFnZSkpKQorCQlyZXR1cm47CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CiAJLyogbGluayB3aGVuIHRoZSBwYWdlIGlzIGxpbmtlZCB0byBMUlUgYnV0IHBhZ2VfY2dyb3VwIGlzbid0ICovCiAJaWYgKFBhZ2VMUlUocGFnZSkgJiYgIVBhZ2VDZ3JvdXBBY2N0TFJVKHBjKSkKQEAgLTEwMzIsMTAgKzEwOTksNyBAQAogCQlyZXR1cm4gTlVMTDsKIAkvKiBFbnN1cmUgcGMtPm1lbV9jZ3JvdXAgaXMgdmlzaWJsZSBhZnRlciByZWFkaW5nIFBDR19VU0VELiAqLwogCXNtcF9ybWIoKTsKLQlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKLQlpZiAoIW16KQotCQlyZXR1cm4gTlVMTDsKLQorCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMtPm1lbV9jZ3JvdXAsIHBhZ2UpOwogCXJldHVybiAmbXotPnJlY2xhaW1fc3RhdDsKIH0KIApAQCAtMTA2Nyw5ICsxMTMxLDExIEBACiAJCWlmIChzY2FuID49IG5yX3RvX3NjYW4pCiAJCQlicmVhazsKIAotCQlwYWdlID0gcGMtPnBhZ2U7CiAJCWlmICh1bmxpa2VseSghUGFnZUNncm91cFVzZWQocGMpKSkKIAkJCWNvbnRpbnVlOworCisJCXBhZ2UgPSBsb29rdXBfY2dyb3VwX3BhZ2UocGMpOworCiAJCWlmICh1bmxpa2VseSghUGFnZUxSVShwYWdlKSkpCiAJCQljb250aW51ZTsKIApAQCAtMTEwMSw0OSArMTE2NywzMiBAQAogI2RlZmluZSBtZW1fY2dyb3VwX2Zyb21fcmVzX2NvdW50ZXIoY291bnRlciwgbWVtYmVyKQlcCiAJY29udGFpbmVyX29mKGNvdW50ZXIsIHN0cnVjdCBtZW1fY2dyb3VwLCBtZW1iZXIpCiAKLXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKLXsKLQlpZiAoZG9fc3dhcF9hY2NvdW50KSB7Ci0JCWlmIChyZXNfY291bnRlcl9jaGVja191bmRlcl9saW1pdCgmbWVtLT5yZXMpICYmCi0JCQlyZXNfY291bnRlcl9jaGVja191bmRlcl9saW1pdCgmbWVtLT5tZW1zdykpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9IGVsc2UKLQkJaWYgKHJlc19jb3VudGVyX2NoZWNrX3VuZGVyX2xpbWl0KCZtZW0tPnJlcykpCi0JCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qKgotICogbWVtX2Nncm91cF9jaGVja19tYXJnaW4gLSBjaGVjayBpZiB0aGUgbWVtb3J5IGNncm91cCBhbGxvd3MgY2hhcmdpbmcKLSAqIEBtZW06IG1lbW9yeSBjZ3JvdXAgdG8gY2hlY2sKLSAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0aGUgY2FsbGVyIGludGVuZHMgdG8gY2hhcmdlCisgKiBtZW1fY2dyb3VwX21hcmdpbiAtIGNhbGN1bGF0ZSBjaGFyZ2VhYmxlIHNwYWNlIG9mIGEgbWVtb3J5IGNncm91cAorICogQG1lbTogdGhlIG1lbW9yeSBjZ3JvdXAKICAqCi0gKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBvbiB3aGV0aGVyIEBtZW0gY2FuIGJlIGNoYXJnZWQgQGJ5dGVzIG9yCi0gKiB3aGV0aGVyIHRoaXMgd291bGQgZXhjZWVkIHRoZSBsaW1pdC4KKyAqIFJldHVybnMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSBAbWVtIGNhbiBiZSBjaGFyZ2VkIHdpdGgsIGluCisgKiBwYWdlcy4KICAqLwotc3RhdGljIGJvb2wgbWVtX2Nncm91cF9jaGVja19tYXJnaW4oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdW5zaWduZWQgbG9uZyBieXRlcykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbWFyZ2luKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7Ci0JaWYgKCFyZXNfY291bnRlcl9jaGVja19tYXJnaW4oJm1lbS0+cmVzLCBieXRlcykpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoZG9fc3dhcF9hY2NvdW50ICYmICFyZXNfY291bnRlcl9jaGVja19tYXJnaW4oJm1lbS0+bWVtc3csIGJ5dGVzKSkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBtYXJnaW47CisKKwltYXJnaW4gPSByZXNfY291bnRlcl9tYXJnaW4oJm1lbS0+cmVzKTsKKwlpZiAoZG9fc3dhcF9hY2NvdW50KQorCQltYXJnaW4gPSBtaW4obWFyZ2luLCByZXNfY291bnRlcl9tYXJnaW4oJm1lbS0+bWVtc3cpKTsKKwlyZXR1cm4gbWFyZ2luID4+IFBBR0VfU0hJRlQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBtZW1jZy0+Y3NzLmNncm91cDsKLQl1bnNpZ25lZCBpbnQgc3dhcHBpbmVzczsKIAogCS8qIHJvb3QgPyAqLwogCWlmIChjZ3JwLT5wYXJlbnQgPT0gTlVMTCkKIAkJcmV0dXJuIHZtX3N3YXBwaW5lc3M7CiAKLQlzcGluX2xvY2soJm1lbWNnLT5yZWNsYWltX3BhcmFtX2xvY2spOwotCXN3YXBwaW5lc3MgPSBtZW1jZy0+c3dhcHBpbmVzczsKLQlzcGluX3VubG9jaygmbWVtY2ctPnJlY2xhaW1fcGFyYW1fbG9jayk7Ci0KLQlyZXR1cm4gc3dhcHBpbmVzczsKKwlyZXR1cm4gbWVtY2ctPnN3YXBwaW5lc3M7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhcnRfbW92ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQpAQCAtMTM1OSwxMyArMTQwOCwxMSBAQAogCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQkvKiBVcGRhdGVzIHNjYW5uaW5nIHBhcmFtZXRlciAqLwotCQlzcGluX2xvY2soJnJvb3RfbWVtLT5yZWNsYWltX3BhcmFtX2xvY2spOwogCQlpZiAoIWNzcykgewogCQkJLyogdGhpcyBtZWFucyBzdGFydCBzY2FuIGZyb20gSUQ6MSAqLwogCQkJcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IDA7CiAJCX0gZWxzZQogCQkJcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IGZvdW5kOwotCQlzcGluX3VubG9jaygmcm9vdF9tZW0tPnJlY2xhaW1fcGFyYW1fbG9jayk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTEzOTQsNyArMTQ0MSw5IEBACiAJYm9vbCBub3N3YXAgPSByZWNsYWltX29wdGlvbnMgJiBNRU1fQ0dST1VQX1JFQ0xBSU1fTk9TV0FQOwogCWJvb2wgc2hyaW5rID0gcmVjbGFpbV9vcHRpb25zICYgTUVNX0NHUk9VUF9SRUNMQUlNX1NIUklOSzsKIAlib29sIGNoZWNrX3NvZnQgPSByZWNsYWltX29wdGlvbnMgJiBNRU1fQ0dST1VQX1JFQ0xBSU1fU09GVDsKLQl1bnNpZ25lZCBsb25nIGV4Y2VzcyA9IG1lbV9jZ3JvdXBfZ2V0X2V4Y2Vzcyhyb290X21lbSk7CisJdW5zaWduZWQgbG9uZyBleGNlc3M7CisKKwlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2Vzcygmcm9vdF9tZW0tPnJlcykgPj4gUEFHRV9TSElGVDsKIAogCS8qIElmIG1lbXN3X2lzX21pbmltdW09PTEsIHN3YXAtb3V0IGlzIG9mLW5vLXVzZS4gKi8KIAlpZiAocm9vdF9tZW0tPm1lbXN3X2lzX21pbmltdW0pCkBAIC0xNDUxLDkgKzE1MDAsOSBAQAogCQkJcmV0dXJuIHJldDsKIAkJdG90YWwgKz0gcmV0OwogCQlpZiAoY2hlY2tfc29mdCkgewotCQkJaWYgKHJlc19jb3VudGVyX2NoZWNrX3VuZGVyX3NvZnRfbGltaXQoJnJvb3RfbWVtLT5yZXMpKQorCQkJaWYgKCFyZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2Vzcygmcm9vdF9tZW0tPnJlcykpCiAJCQkJcmV0dXJuIHRvdGFsOwotCQl9IGVsc2UgaWYgKG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQocm9vdF9tZW0pKQorCQl9IGVsc2UgaWYgKG1lbV9jZ3JvdXBfbWFyZ2luKHJvb3RfbWVtKSkKIAkJCXJldHVybiAxICsgdG90YWw7CiAJfQogCXJldHVybiB0b3RhbDsKQEAgLTE2NjEsMTcgKzE3MTAsMTcgQEAKICAqIHNpemUgb2YgZmlyc3QgY2hhcmdlIHRyaWFsLiAiMzIiIGNvbWVzIGZyb20gdm1zY2FuLmMncyBtYWdpYyB2YWx1ZS4KICAqIFRPRE86IG1heWJlIG5lY2Vzc2FyeSB0byB1c2UgYmlnIG51bWJlcnMgaW4gYmlnIGlyb25zLgogICovCi0jZGVmaW5lIENIQVJHRV9TSVpFCSgzMiAqIFBBR0VfU0laRSkKKyNkZWZpbmUgQ0hBUkdFX0JBVENICTMyVQogc3RydWN0IG1lbWNnX3N0b2NrX3BjcCB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKmNhY2hlZDsgLyogdGhpcyBuZXZlciBiZSByb290IGNncm91cCAqLwotCWludCBjaGFyZ2U7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLCBtZW1jZ19zdG9jayk7CiBzdGF0aWMgYXRvbWljX3QgbWVtY2dfZHJhaW5fY291bnQ7CiAKIC8qCi0gKiBUcnkgdG8gY29uc3VtZSBzdG9ja2VkIGNoYXJnZSBvbiB0aGlzIGNwdS4gSWYgc3VjY2VzcywgUEFHRV9TSVpFIGlzIGNvbnN1bWVkCisgKiBUcnkgdG8gY29uc3VtZSBzdG9ja2VkIGNoYXJnZSBvbiB0aGlzIGNwdS4gSWYgc3VjY2Vzcywgb25lIHBhZ2UgaXMgY29uc3VtZWQKICAqIGZyb20gbG9jYWwgc3RvY2sgYW5kIHRydWUgaXMgcmV0dXJuZWQuIElmIHRoZSBzdG9jayBpcyAwIG9yIGNoYXJnZXMgZnJvbSBhCiAgKiBjZ3JvdXAgd2hpY2ggaXMgbm90IGN1cnJlbnQgdGFyZ2V0LCByZXR1cm5zIGZhbHNlLiBUaGlzIHN0b2NrIHdpbGwgYmUKICAqIHJlZmlsbGVkLgpAQCAtMTY4Miw4ICsxNzMxLDggQEAKIAlib29sIHJldCA9IHRydWU7CiAKIAlzdG9jayA9ICZnZXRfY3B1X3ZhcihtZW1jZ19zdG9jayk7Ci0JaWYgKG1lbSA9PSBzdG9jay0+Y2FjaGVkICYmIHN0b2NrLT5jaGFyZ2UpCi0JCXN0b2NrLT5jaGFyZ2UgLT0gUEFHRV9TSVpFOworCWlmIChtZW0gPT0gc3RvY2stPmNhY2hlZCAmJiBzdG9jay0+bnJfcGFnZXMpCisJCXN0b2NrLT5ucl9wYWdlcy0tOwogCWVsc2UgLyogbmVlZCB0byBjYWxsIHJlc19jb3VudGVyX2NoYXJnZSAqLwogCQlyZXQgPSBmYWxzZTsKIAlwdXRfY3B1X3ZhcihtZW1jZ19zdG9jayk7CkBAIC0xNjk3LDEzICsxNzQ2LDE1IEBACiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm9sZCA9IHN0b2NrLT5jYWNoZWQ7CiAKLQlpZiAoc3RvY2stPmNoYXJnZSkgewotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmb2xkLT5yZXMsIHN0b2NrLT5jaGFyZ2UpOworCWlmIChzdG9jay0+bnJfcGFnZXMpIHsKKwkJdW5zaWduZWQgbG9uZyBieXRlcyA9IHN0b2NrLT5ucl9wYWdlcyAqIFBBR0VfU0laRTsKKworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmb2xkLT5yZXMsIGJ5dGVzKTsKIAkJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZvbGQtPm1lbXN3LCBzdG9jay0+Y2hhcmdlKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZvbGQtPm1lbXN3LCBieXRlcyk7CisJCXN0b2NrLT5ucl9wYWdlcyA9IDA7CiAJfQogCXN0b2NrLT5jYWNoZWQgPSBOVUxMOwotCXN0b2NrLT5jaGFyZ2UgPSAwOwogfQogCiAvKgpAQCAtMTcyMCw3ICsxNzcxLDcgQEAKICAqIENhY2hlIGNoYXJnZXModmFsKSB3aGljaCBpcyBmcm9tIHJlc19jb3VudGVyLCB0byBsb2NhbCBwZXJfY3B1IGFyZWEuCiAgKiBUaGlzIHdpbGwgYmUgY29uc3VtZWQgYnkgY29uc3VtZV9zdG9jaygpIGZ1bmN0aW9uLCBsYXRlci4KICAqLwotc3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGludCB2YWwpCitzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrID0gJmdldF9jcHVfdmFyKG1lbWNnX3N0b2NrKTsKIApAQCAtMTcyOCw3ICsxNzc5LDcgQEAKIAkJZHJhaW5fc3RvY2soc3RvY2spOwogCQlzdG9jay0+Y2FjaGVkID0gbWVtOwogCX0KLQlzdG9jay0+Y2hhcmdlICs9IHZhbDsKKwlzdG9jay0+bnJfcGFnZXMgKz0gbnJfcGFnZXM7CiAJcHV0X2NwdV92YXIobWVtY2dfc3RvY2spOwogfQogCkBAIC0xNzgwLDExICsxODMxLDE3IEBACiAKIAlzcGluX2xvY2soJm1lbS0+cGNwX2NvdW50ZXJfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IE1FTV9DR1JPVVBfU1RBVF9EQVRBOyBpKyspIHsKLQkJczY0IHggPSBwZXJfY3B1KG1lbS0+c3RhdC0+Y291bnRbaV0sIGNwdSk7CisJCWxvbmcgeCA9IHBlcl9jcHUobWVtLT5zdGF0LT5jb3VudFtpXSwgY3B1KTsKIAogCQlwZXJfY3B1KG1lbS0+c3RhdC0+Y291bnRbaV0sIGNwdSkgPSAwOwogCQltZW0tPm5vY3B1X2Jhc2UuY291bnRbaV0gKz0geDsKIAl9CisJZm9yIChpID0gMDsgaSA8IE1FTV9DR1JPVVBfRVZFTlRTX05TVEFUUzsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgeCA9IHBlcl9jcHUobWVtLT5zdGF0LT5ldmVudHNbaV0sIGNwdSk7CisKKwkJcGVyX2NwdShtZW0tPnN0YXQtPmV2ZW50c1tpXSwgY3B1KSA9IDA7CisJCW1lbS0+bm9jcHVfYmFzZS5ldmVudHNbaV0gKz0geDsKKwl9CiAJLyogbmVlZCB0byBjbGVhciBPTl9NT1ZFIHZhbHVlLCB3b3JrcyBhcyBhIGtpbmQgb2YgbG9jay4gKi8KIAlwZXJfY3B1KG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9PTl9NT1ZFXSwgY3B1KSA9IDA7CiAJc3Bpbl91bmxvY2soJm1lbS0+cGNwX2NvdW50ZXJfbG9jayk7CkBAIC0xODM0LDkgKzE4OTEsMTAgQEAKIAlDSEFSR0VfT09NX0RJRSwJCS8qIHRoZSBjdXJyZW50IGlzIGtpbGxlZCBiZWNhdXNlIG9mIE9PTSAqLwogfTsKIAotc3RhdGljIGludCBfX21lbV9jZ3JvdXBfZG9fY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGdmcF90IGdmcF9tYXNrLAotCQkJCWludCBjc2l6ZSwgYm9vbCBvb21fY2hlY2spCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfZG9fY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGdmcF90IGdmcF9tYXNrLAorCQkJCXVuc2lnbmVkIGludCBucl9wYWdlcywgYm9vbCBvb21fY2hlY2spCiB7CisJdW5zaWduZWQgbG9uZyBjc2l6ZSA9IG5yX3BhZ2VzICogUEFHRV9TSVpFOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fb3Zlcl9saW1pdDsKIAlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtMTg1NywxNCArMTkxNSwxMyBAQAogCX0gZWxzZQogCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywgcmVzKTsKIAkvKgotCSAqIGNzaXplIGNhbiBiZSBlaXRoZXIgYSBodWdlIHBhZ2UgKEhQQUdFX1NJWkUpLCBhIGJhdGNoIG9mCi0JICogcmVndWxhciBwYWdlcyAoQ0hBUkdFX1NJWkUpLCBvciBhIHNpbmdsZSByZWd1bGFyIHBhZ2UKLQkgKiAoUEFHRV9TSVpFKS4KKwkgKiBucl9wYWdlcyBjYW4gYmUgZWl0aGVyIGEgaHVnZSBwYWdlIChIUEFHRV9QTURfTlIpLCBhIGJhdGNoCisJICogb2YgcmVndWxhciBwYWdlcyAoQ0hBUkdFX0JBVENIKSwgb3IgYSBzaW5nbGUgcmVndWxhciBwYWdlICgxKS4KIAkgKgogCSAqIE5ldmVyIHJlY2xhaW0gb24gYmVoYWxmIG9mIG9wdGlvbmFsIGJhdGNoaW5nLCByZXRyeSB3aXRoIGEKIAkgKiBzaW5nbGUgcGFnZSBpbnN0ZWFkLgogCSAqLwotCWlmIChjc2l6ZSA9PSBDSEFSR0VfU0laRSkKKwlpZiAobnJfcGFnZXMgPT0gQ0hBUkdFX0JBVENIKQogCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkKQEAgLTE4NzIsNyArMTkyOSw3IEBACiAKIAlyZXQgPSBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbV9vdmVyX2xpbWl0LCBOVUxMLAogCQkJCQkgICAgICBnZnBfbWFzaywgZmxhZ3MpOwotCWlmIChtZW1fY2dyb3VwX2NoZWNrX21hcmdpbihtZW1fb3Zlcl9saW1pdCwgY3NpemUpKQorCWlmIChtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgPj0gbnJfcGFnZXMpCiAJCXJldHVybiBDSEFSR0VfUkVUUlk7CiAJLyoKIAkgKiBFdmVuIHRob3VnaCB0aGUgbGltaXQgaXMgZXhjZWVkZWQgYXQgdGhpcyBwb2ludCwgcmVjbGFpbQpAQCAtMTg4Myw3ICsxOTQwLDcgQEAKIAkgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFjawogCSAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS4KIAkgKi8KLQlpZiAoY3NpemUgPT0gUEFHRV9TSVpFICYmIHJldCkKKwlpZiAobnJfcGFnZXMgPT0gMSAmJiByZXQpCiAJCXJldHVybiBDSEFSR0VfUkVUUlk7CiAKIAkvKgpAQCAtMTkwOSwxMyArMTk2NiwxNCBAQAogICovCiBzdGF0aWMgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCSAgIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csIGJvb2wgb29tLAotCQkJCSAgIGludCBwYWdlX3NpemUpCisJCQkJICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzLAorCQkJCSAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csCisJCQkJICAgYm9vbCBvb20pCiB7CisJdW5zaWduZWQgaW50IGJhdGNoID0gbWF4KENIQVJHRV9CQVRDSCwgbnJfcGFnZXMpOwogCWludCBucl9vb21fcmV0cmllcyA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwogCWludCByZXQ7Ci0JaW50IGNzaXplID0gbWF4KENIQVJHRV9TSVpFLCAodW5zaWduZWQgbG9uZykgcGFnZV9zaXplKTsKIAogCS8qCiAJICogVW5saWtlIGdsb3ZhbC12bSdzIE9PTS1raWxsLCB3ZSdyZSBub3QgaW4gbWVtb3J5IHNob3J0YWdlCkBAIC0xOTQwLDcgKzE5OTgsNyBAQAogCQlWTV9CVUdfT04oY3NzX2lzX3JlbW92ZWQoJm1lbS0+Y3NzKSk7CiAJCWlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtKSkKIAkJCWdvdG8gZG9uZTsKLQkJaWYgKHBhZ2Vfc2l6ZSA9PSBQQUdFX1NJWkUgJiYgY29uc3VtZV9zdG9jayhtZW0pKQorCQlpZiAobnJfcGFnZXMgPT0gMSAmJiBjb25zdW1lX3N0b2NrKG1lbSkpCiAJCQlnb3RvIGRvbmU7CiAJCWNzc19nZXQoJm1lbS0+Y3NzKTsKIAl9IGVsc2UgewpAQCAtMTk2Myw3ICsyMDIxLDcgQEAKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCWlmIChwYWdlX3NpemUgPT0gUEFHRV9TSVpFICYmIGNvbnN1bWVfc3RvY2sobWVtKSkgeworCQlpZiAobnJfcGFnZXMgPT0gMSAmJiBjb25zdW1lX3N0b2NrKG1lbSkpIHsKIAkJCS8qCiAJCQkgKiBJdCBzZWVtcyBkYWdlcm91cyB0byBhY2Nlc3MgbWVtY2cgd2l0aG91dCBjc3NfZ2V0KCkuCiAJCQkgKiBCdXQgY29uc2lkZXJpbmcgaG93IGNvbnN1bWVfc3RvayB3b3JrcywgaXQncyBub3QKQEAgLTE5OTgsMTMgKzIwNTYsMTIgQEAKIAkJCW5yX29vbV9yZXRyaWVzID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7CiAJCX0KIAotCQlyZXQgPSBfX21lbV9jZ3JvdXBfZG9fY2hhcmdlKG1lbSwgZ2ZwX21hc2ssIGNzaXplLCBvb21fY2hlY2spOwotCisJCXJldCA9IG1lbV9jZ3JvdXBfZG9fY2hhcmdlKG1lbSwgZ2ZwX21hc2ssIGJhdGNoLCBvb21fY2hlY2spOwogCQlzd2l0Y2ggKHJldCkgewogCQljYXNlIENIQVJHRV9PSzoKIAkJCWJyZWFrOwogCQljYXNlIENIQVJHRV9SRVRSWTogLyogbm90IGluIE9PTSBzaXR1YXRpb24gYnV0IHJldHJ5ICovCi0JCQljc2l6ZSA9IHBhZ2Vfc2l6ZTsKKwkJCWJhdGNoID0gbnJfcGFnZXM7CiAJCQljc3NfcHV0KCZtZW0tPmNzcyk7CiAJCQltZW0gPSBOVUxMOwogCQkJZ290byBhZ2FpbjsKQEAgLTIwMjUsOCArMjA4Miw4IEBACiAJCX0KIAl9IHdoaWxlIChyZXQgIT0gQ0hBUkdFX09LKTsKIAotCWlmIChjc2l6ZSA+IHBhZ2Vfc2l6ZSkKLQkJcmVmaWxsX3N0b2NrKG1lbSwgY3NpemUgLSBwYWdlX3NpemUpOworCWlmIChiYXRjaCA+IG5yX3BhZ2VzKQorCQlyZWZpbGxfc3RvY2sobWVtLCBiYXRjaCAtIG5yX3BhZ2VzKTsKIAljc3NfcHV0KCZtZW0tPmNzcyk7CiBkb25lOgogCSptZW1jZyA9IG1lbTsKQEAgLTIwNDUsMTkgKzIxMDIsMTUgQEAKICAqIGdvdHRlbiBieSB0cnlfY2hhcmdlKCkuCiAgKi8KIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCQkJdW5zaWduZWQgbG9uZyBjb3VudCkKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogewogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUgKiBjb3VudCk7Ci0JCWlmIChkb19zd2FwX2FjY291bnQpCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFICogY291bnQpOwotCX0KLX0KKwkJdW5zaWduZWQgbG9uZyBieXRlcyA9IG5yX3BhZ2VzICogUEFHRV9TSVpFOwogCi1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkgICAgIGludCBwYWdlX3NpemUpCi17Ci0JX19tZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UobWVtLCBwYWdlX3NpemUgPj4gUEFHRV9TSElGVCk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgYnl0ZXMpOworCQlpZiAoZG9fc3dhcF9hY2NvdW50KQorCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIGJ5dGVzKTsKKwl9CiB9CiAKIC8qCkBAIC0yMTA4LDIwICsyMTYxLDE1IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCisJCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsCiAJCQkJICAgICAgIHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsCi0JCQkJICAgICAgIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUsCi0JCQkJICAgICAgIGludCBwYWdlX3NpemUpCisJCQkJICAgICAgIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUpCiB7Ci0JaW50IG5yX3BhZ2VzID0gcGFnZV9zaXplID4+IFBBR0VfU0hJRlQ7Ci0KLQkvKiB0cnlfY2hhcmdlKCkgY2FuIHJldHVybiBOVUxMIHRvICptZW1jZywgdGFraW5nIGNhcmUgb2YgaXQuICovCi0JaWYgKCFtZW0pCi0JCXJldHVybjsKLQogCWxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCWlmICh1bmxpa2VseShQYWdlQ2dyb3VwVXNlZChwYykpKSB7CiAJCXVubG9ja19wYWdlX2Nncm91cChwYyk7Ci0JCW1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShtZW0sIHBhZ2Vfc2l6ZSk7CisJCV9fbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKG1lbSwgbnJfcGFnZXMpOwogCQlyZXR1cm47CiAJfQogCS8qCkBAIC0yMTU4LDcgKzIyMDYsNyBAQAogCSAqIEluc2VydCBhbmNlc3RvciAoYW5kIGFuY2VzdG9yJ3MgYW5jZXN0b3JzKSwgdG8gc29mdGxpbWl0IFJCLXRyZWUuCiAJICogaWYgdGhleSBleGNlZWRzIHNvZnRsaW1pdC4KIAkgKi8KLQltZW1jZ19jaGVja19ldmVudHMobWVtLCBwYy0+cGFnZSk7CisJbWVtY2dfY2hlY2tfZXZlbnRzKG1lbSwgcGFnZSk7CiB9CiAKICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKQEAgLTIxOTUsNyArMjI0Myw3IEBACiAJCSAqIFdlIGhvbGQgbHJ1X2xvY2ssIHRoZW4sIHJlZHVjZSBjb3VudGVyIGRpcmVjdGx5LgogCQkgKi8KIAkJbHJ1ID0gcGFnZV9scnUoaGVhZCk7Ci0JCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8oaGVhZF9wYyk7CisJCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8oaGVhZF9wYy0+bWVtX2Nncm91cCwgaGVhZCk7CiAJCU1FTV9DR1JPVVBfWlNUQVQobXosIGxydSkgLT0gMTsKIAl9CiAJdGFpbF9wYy0+ZmxhZ3MgPSBoZWFkX3BjLT5mbGFncyAmIH5QQ0dGX05PQ09QWV9BVF9TUExJVDsKQEAgLTIyMDQsNyArMjI1Miw5IEBACiAjZW5kaWYKIAogLyoqCi0gKiBfX21lbV9jZ3JvdXBfbW92ZV9hY2NvdW50IC0gbW92ZSBhY2NvdW50IG9mIHRoZSBwYWdlCisgKiBtZW1fY2dyb3VwX21vdmVfYWNjb3VudCAtIG1vdmUgYWNjb3VudCBvZiB0aGUgcGFnZQorICogQHBhZ2U6IHRoZSBwYWdlCisgKiBAbnJfcGFnZXM6IG51bWJlciBvZiByZWd1bGFyIHBhZ2VzICg+MSBmb3IgaHVnZSBwYWdlcykKICAqIEBwYzoJcGFnZV9jZ3JvdXAgb2YgdGhlIHBhZ2UuCiAgKiBAZnJvbTogbWVtX2Nncm91cCB3aGljaCB0aGUgcGFnZSBpcyBtb3ZlZCBmcm9tLgogICogQHRvOgltZW1fY2dyb3VwIHdoaWNoIHRoZSBwYWdlIGlzIG1vdmVkIHRvLiBAZnJvbSAhPSBAdG8uCkBAIC0yMjEyLDI1ICsyMjYyLDQyIEBACiAgKgogICogVGhlIGNhbGxlciBtdXN0IGNvbmZpcm0gZm9sbG93aW5nLgogICogLSBwYWdlIGlzIG5vdCBvbiBMUlUgKGlzb2xhdGVfcGFnZSgpIGlzIHVzZWZ1bC4pCi0gKiAtIHRoZSBwYyBpcyBsb2NrZWQsIHVzZWQsIGFuZCAtPm1lbV9jZ3JvdXAgcG9pbnRzIHRvIEBmcm9tLgorICogLSBjb21wb3VuZF9sb2NrIGlzIGhlbGQgd2hlbiBucl9wYWdlcyA+IDEKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZG8gImNoYXJnZSIgbm9yIGNzc19nZXQgdG8gbmV3IGNncm91cC4gSXQgc2hvdWxkIGJlCiAgKiBkb25lIGJ5IGEgY2FsbGVyKF9fbWVtX2Nncm91cF90cnlfY2hhcmdlIHdvdWxkIGJlIHVzZWZ1bGwpLiBJZiBAdW5jaGFyZ2UgaXMKICAqIHRydWUsIHRoaXMgZnVuY3Rpb24gZG9lcyAidW5jaGFyZ2UiIGZyb20gb2xkIGNncm91cCwgYnV0IGl0IGRvZXNuJ3QgaWYKICAqIEB1bmNoYXJnZSBpcyBmYWxzZSwgc28gYSBjYWxsZXIgc2hvdWxkIGRvICJ1bmNoYXJnZSIuCiAgKi8KLQotc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX21vdmVfYWNjb3VudChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLAotCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdG8sIGJvb2wgdW5jaGFyZ2UsCi0JaW50IGNoYXJnZV9zaXplKQorc3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsCisJCQkJICAgc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKKwkJCQkgICBzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwKKwkJCQkgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdG8sCisJCQkJICAgYm9vbCB1bmNoYXJnZSkKIHsKLQlpbnQgbnJfcGFnZXMgPSBjaGFyZ2Vfc2l6ZSA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKIAogCVZNX0JVR19PTihmcm9tID09IHRvKTsKLQlWTV9CVUdfT04oUGFnZUxSVShwYy0+cGFnZSkpOwotCVZNX0JVR19PTighcGFnZV9pc19jZ3JvdXBfbG9ja2VkKHBjKSk7Ci0JVk1fQlVHX09OKCFQYWdlQ2dyb3VwVXNlZChwYykpOwotCVZNX0JVR19PTihwYy0+bWVtX2Nncm91cCAhPSBmcm9tKTsKKwlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisJLyoKKwkgKiBUaGUgcGFnZSBpcyBpc29sYXRlZCBmcm9tIExSVS4gU28sIGNvbGxhcHNlIGZ1bmN0aW9uCisJICogd2lsbCBub3QgaGFuZGxlIHRoaXMgcGFnZS4gQnV0IHBhZ2Ugc3BsaXR0aW5nIGNhbiBoYXBwZW4uCisJICogRG8gdGhpcyBjaGVjayB1bmRlciBjb21wb3VuZF9wYWdlX2xvY2soKS4gVGhlIGNhbGxlciBzaG91bGQKKwkgKiBob2xkIGl0LgorCSAqLworCXJldCA9IC1FQlVTWTsKKwlpZiAobnJfcGFnZXMgPiAxICYmICFQYWdlVHJhbnNIdWdlKHBhZ2UpKQorCQlnb3RvIG91dDsKKworCWxvY2tfcGFnZV9jZ3JvdXAocGMpOworCisJcmV0ID0gLUVJTlZBTDsKKwlpZiAoIVBhZ2VDZ3JvdXBVc2VkKHBjKSB8fCBwYy0+bWVtX2Nncm91cCAhPSBmcm9tKQorCQlnb3RvIHVubG9jazsKKworCW1vdmVfbG9ja19wYWdlX2Nncm91cChwYywgJmZsYWdzKTsKIAogCWlmIChQYWdlQ2dyb3VwRmlsZU1hcHBlZChwYykpIHsKIAkJLyogVXBkYXRlIG1hcHBlZF9maWxlIGRhdGEgZm9yIG1lbV9jZ3JvdXAgKi8KQEAgLTIyNDIsNyArMjMwOSw3IEBACiAJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhmcm9tLCBQYWdlQ2dyb3VwQ2FjaGUocGMpLCAtbnJfcGFnZXMpOwogCWlmICh1bmNoYXJnZSkKIAkJLyogVGhpcyBpcyBub3QgImNhbmNlbCIsIGJ1dCBjYW5jZWxfY2hhcmdlIGRvZXMgYWxsIHdlIG5lZWQuICovCi0JCW1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShmcm9tLCBjaGFyZ2Vfc2l6ZSk7CisJCV9fbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKGZyb20sIG5yX3BhZ2VzKTsKIAogCS8qIGNhbGxlciBzaG91bGQgaGF2ZSBkb25lIGNzc19nZXQgKi8KIAlwYy0+bWVtX2Nncm91cCA9IHRvOwpAQCAtMjI1NCw0MCArMjMyMSwxNiBAQAogCSAqIGdhcmFudGVlZCB0aGF0ICJ0byIgaXMgbmV2ZXIgcmVtb3ZlZC4gU28sIHdlIGRvbid0IGNoZWNrIHJtZGlyCiAJICogc3RhdHVzIGhlcmUuCiAJICovCi19Ci0KLS8qCi0gKiBjaGVjayB3aGV0aGVyIHRoZSBAcGMgaXMgdmFsaWQgZm9yIG1vdmluZyBhY2NvdW50IGFuZCBjYWxsCi0gKiBfX21lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KCkKLSAqLwotc3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLAotCQlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwgc3RydWN0IG1lbV9jZ3JvdXAgKnRvLAotCQlib29sIHVuY2hhcmdlLCBpbnQgY2hhcmdlX3NpemUpCi17Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQkvKgotCSAqIFRoZSBwYWdlIGlzIGlzb2xhdGVkIGZyb20gTFJVLiBTbywgY29sbGFwc2UgZnVuY3Rpb24KLQkgKiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBwYWdlLiBCdXQgcGFnZSBzcGxpdHRpbmcgY2FuIGhhcHBlbi4KLQkgKiBEbyB0aGlzIGNoZWNrIHVuZGVyIGNvbXBvdW5kX3BhZ2VfbG9jaygpLiBUaGUgY2FsbGVyIHNob3VsZAotCSAqIGhvbGQgaXQuCi0JICovCi0JaWYgKChjaGFyZ2Vfc2l6ZSA+IFBBR0VfU0laRSkgJiYgIVBhZ2VUcmFuc0h1Z2UocGMtPnBhZ2UpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbG9ja19wYWdlX2Nncm91cChwYyk7Ci0JaWYgKFBhZ2VDZ3JvdXBVc2VkKHBjKSAmJiBwYy0+bWVtX2Nncm91cCA9PSBmcm9tKSB7Ci0JCW1vdmVfbG9ja19wYWdlX2Nncm91cChwYywgJmZsYWdzKTsKLQkJX19tZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywgZnJvbSwgdG8sIHVuY2hhcmdlLCBjaGFyZ2Vfc2l6ZSk7Ci0JCW1vdmVfdW5sb2NrX3BhZ2VfY2dyb3VwKHBjLCAmZmxhZ3MpOwotCQlyZXQgPSAwOwotCX0KKwltb3ZlX3VubG9ja19wYWdlX2Nncm91cChwYywgJmZsYWdzKTsKKwlyZXQgPSAwOwordW5sb2NrOgogCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJLyoKIAkgKiBjaGVjayBldmVudHMKIAkgKi8KLQltZW1jZ19jaGVja19ldmVudHModG8sIHBjLT5wYWdlKTsKLQltZW1jZ19jaGVja19ldmVudHMoZnJvbSwgcGMtPnBhZ2UpOworCW1lbWNnX2NoZWNrX2V2ZW50cyh0bywgcGFnZSk7CisJbWVtY2dfY2hlY2tfZXZlbnRzKGZyb20sIHBhZ2UpOworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIyOTUsMTYgKzIzMzgsMTYgQEAKICAqIG1vdmUgY2hhcmdlcyB0byBpdHMgcGFyZW50LgogICovCiAKLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX3BhcmVudChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLAorc3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfcGFyZW50KHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKIAkJCQkgIHN0cnVjdCBtZW1fY2dyb3VwICpjaGlsZCwKIAkJCQkgIGdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBwYWdlICpwYWdlID0gcGMtPnBhZ2U7CiAJc3RydWN0IGNncm91cCAqY2cgPSBjaGlsZC0+Y3NzLmNncm91cDsKIAlzdHJ1Y3QgY2dyb3VwICpwY2cgPSBjZy0+cGFyZW50OwogCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7Ci0JaW50IHBhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBucl9wYWdlczsKKwl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKIAlpbnQgcmV0OwogCiAJLyogSXMgUk9PVCA/ICovCkBAIC0yMzE3LDIzICsyMzYwLDIxIEBACiAJaWYgKGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpCiAJCWdvdG8gcHV0OwogCi0JaWYgKFBhZ2VUcmFuc0h1Z2UocGFnZSkpCi0JCXBhZ2Vfc2l6ZSA9IEhQQUdFX1NJWkU7CisJbnJfcGFnZXMgPSBocGFnZV9ucl9wYWdlcyhwYWdlKTsKIAogCXBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KHBjZyk7Ci0JcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgZ2ZwX21hc2ssCi0JCQkJJnBhcmVudCwgZmFsc2UsIHBhZ2Vfc2l6ZSk7CisJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgZ2ZwX21hc2ssIG5yX3BhZ2VzLCAmcGFyZW50LCBmYWxzZSk7CiAJaWYgKHJldCB8fCAhcGFyZW50KQogCQlnb3RvIHB1dF9iYWNrOwogCi0JaWYgKHBhZ2Vfc2l6ZSA+IFBBR0VfU0laRSkKKwlpZiAobnJfcGFnZXMgPiAxKQogCQlmbGFncyA9IGNvbXBvdW5kX2xvY2tfaXJxc2F2ZShwYWdlKTsKIAotCXJldCA9IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBjLCBjaGlsZCwgcGFyZW50LCB0cnVlLCBwYWdlX3NpemUpOworCXJldCA9IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBhZ2UsIG5yX3BhZ2VzLCBwYywgY2hpbGQsIHBhcmVudCwgdHJ1ZSk7CiAJaWYgKHJldCkKLQkJbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKHBhcmVudCwgcGFnZV9zaXplKTsKKwkJX19tZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UocGFyZW50LCBucl9wYWdlcyk7CiAKLQlpZiAocGFnZV9zaXplID4gUEFHRV9TSVpFKQorCWlmIChucl9wYWdlcyA+IDEpCiAJCWNvbXBvdW5kX3VubG9ja19pcnFyZXN0b3JlKHBhZ2UsIGZsYWdzKTsKIHB1dF9iYWNrOgogCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CkBAIC0yMzUzLDEzICsyMzk0LDEzIEBACiAJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7Ci0JaW50IHBhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSAxOwogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJYm9vbCBvb20gPSB0cnVlOwogCWludCByZXQ7CiAKIAlpZiAoUGFnZVRyYW5zSHVnZShwYWdlKSkgewotCQlwYWdlX3NpemUgPDw9IGNvbXBvdW5kX29yZGVyKHBhZ2UpOworCQlucl9wYWdlcyA8PD0gY29tcG91bmRfb3JkZXIocGFnZSk7CiAJCVZNX0JVR19PTighUGFnZVRyYW5zSHVnZShwYWdlKSk7CiAJCS8qCiAJCSAqIE5ldmVyIE9PTS1raWxsIGEgcHJvY2VzcyBmb3IgYSBodWdlIHBhZ2UuICBUaGUKQEAgLTIzNjksMTYgKzI0MTAsMTMgQEAKIAl9CiAKIAlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKLQkvKiBjYW4gaGFwcGVuIGF0IGJvb3QgKi8KLQlpZiAodW5saWtlbHkoIXBjKSkKLQkJcmV0dXJuIDA7Ci0JcHJlZmV0Y2h3KHBjKTsKKwlCVUdfT04oIXBjKTsgLyogWFhYOiByZW1vdmUgdGhpcyBhbmQgbW92ZSBwYyBsb29rdXAgaW50byBjb21taXQgKi8KIAotCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBnZnBfbWFzaywgJm1lbSwgb29tLCBwYWdlX3NpemUpOworCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBnZnBfbWFzaywgbnJfcGFnZXMsICZtZW0sIG9vbSk7CiAJaWYgKHJldCB8fCAhbWVtKQogCQlyZXR1cm4gcmV0OwogCi0JX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2UobWVtLCBwYywgY3R5cGUsIHBhZ2Vfc2l6ZSk7CisJX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2UobWVtLCBwYWdlLCBucl9wYWdlcywgcGMsIGN0eXBlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQwNiw5ICsyNDQ0LDI2IEBACiBfX21lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZV9zd2FwaW4oc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1fY2dyb3VwICpwdHIsCiAJCQkJCWVudW0gY2hhcmdlX3R5cGUgY3R5cGUpOwogCitzdGF0aWMgdm9pZAorX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2VfbHJ1Y2FyZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKKwkJCQkJZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSkKK3sKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOworCS8qCisJICogSW4gc29tZSBjYXNlLCBTd2FwQ2FjaGUsIEZVU0Uoc3BsaWNlX2J1Zi0+cmFkaXh0cmVlKSwgdGhlIHBhZ2UKKwkgKiBpcyBhbHJlYWR5IG9uIExSVS4gSXQgbWVhbnMgdGhlIHBhZ2UgbWF5IG9uIHNvbWUgb3RoZXIgcGFnZV9jZ3JvdXAncworCSAqIExSVS4gVGFrZSBjYXJlIG9mIGl0LgorCSAqLworCW1lbV9jZ3JvdXBfbHJ1X2RlbF9iZWZvcmVfY29tbWl0KHBhZ2UpOworCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlKG1lbSwgcGFnZSwgMSwgcGMsIGN0eXBlKTsKKwltZW1fY2dyb3VwX2xydV9hZGRfYWZ0ZXJfY29tbWl0KHBhZ2UpOworCXJldHVybjsKK30KKwogaW50IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQlnZnBfdCBnZnBfbWFzaykKIHsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKQEAgLTI0NDMsMTQgKzI0OTgsMjIgQEAKIAlpZiAodW5saWtlbHkoIW1tKSkKIAkJbW0gPSAmaW5pdF9tbTsKIAotCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpCi0JCXJldHVybiBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAotCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEUpOworCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpIHsKKwkJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UobW0sIGdmcF9tYXNrLCAxLCAmbWVtLCB0cnVlKTsKKwkJaWYgKHJldCB8fCAhbWVtKQorCQkJcmV0dXJuIHJldDsKIAorCQkvKgorCQkgKiBGVVNFIHJldXNlcyBwYWdlcyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGZpbmFsCisJCSAqIHB1dCB0aGF0IHdvdWxkIHJlbW92ZSB0aGVtIGZyb20gdGhlIExSVSBsaXN0LCBtYWtlCisJCSAqIHN1cmUgdGhhdCB0aGV5IGdldCByZWxpbmtlZCBwcm9wZXJseS4KKwkJICovCisJCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX2xydWNhcmUocGFnZSwgbWVtLAorCQkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAJLyogc2htZW0gKi8KIAlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkgewotCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gTlVMTDsKLQogCQlyZXQgPSBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGluKG1tLCBwYWdlLCBnZnBfbWFzaywgJm1lbSk7CiAJCWlmICghcmV0KQogCQkJX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHBhZ2UsIG1lbSwKQEAgLTI0NzUsNiArMjUzOCw4IEBACiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKIAlpbnQgcmV0OwogCisJKnB0ciA9IE5VTEw7CisKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKIApAQCAtMjQ5MiwzMCArMjU1NywyNiBAQAogCWlmICghbWVtKQogCQlnb3RvIGNoYXJnZV9jdXJfbW07CiAJKnB0ciA9IG1lbTsKLQlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBtYXNrLCBwdHIsIHRydWUsIFBBR0VfU0laRSk7CisJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgbWFzaywgMSwgcHRyLCB0cnVlKTsKIAljc3NfcHV0KCZtZW0tPmNzcyk7CiAJcmV0dXJuIHJldDsKIGNoYXJnZV9jdXJfbW06CiAJaWYgKHVubGlrZWx5KCFtbSkpCiAJCW1tID0gJmluaXRfbW07Ci0JcmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBtYXNrLCBwdHIsIHRydWUsIFBBR0VfU0laRSk7CisJcmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBtYXNrLCAxLCBwdHIsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZAogX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcHRyLAogCQkJCQllbnVtIGNoYXJnZV90eXBlIGN0eXBlKQogewotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7Ci0KIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAJaWYgKCFwdHIpCiAJCXJldHVybjsKIAljZ3JvdXBfZXhjbHVkZV9ybWRpcigmcHRyLT5jc3MpOwotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCW1lbV9jZ3JvdXBfbHJ1X2RlbF9iZWZvcmVfY29tbWl0X3N3YXBjYWNoZShwYWdlKTsKLQlfX21lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZShwdHIsIHBjLCBjdHlwZSwgUEFHRV9TSVpFKTsKLQltZW1fY2dyb3VwX2xydV9hZGRfYWZ0ZXJfY29tbWl0X3N3YXBjYWNoZShwYWdlKTsKKworCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX2xydWNhcmUocGFnZSwgcHRyLCBjdHlwZSk7CiAJLyoKIAkgKiBOb3cgc3dhcCBpcyBvbi1tZW1vcnkuIFRoaXMgbWVhbnMgdGhpcyBwYWdlIG1heSBiZQogCSAqIGNvdW50ZWQgYm90aCBhcyBtZW0gYW5kIHN3YXAuLi4uZG91YmxlIGNvdW50LgpAQCAtMjU2MywxNSArMjYyNCwxNiBAQAogCQlyZXR1cm47CiAJaWYgKCFtZW0pCiAJCXJldHVybjsKLQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UobWVtLCBQQUdFX1NJWkUpOworCV9fbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKG1lbSwgMSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1fX2RvX3VuY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGNvbnN0IGVudW0gY2hhcmdlX3R5cGUgY3R5cGUsCi0JICAgICAgaW50IHBhZ2Vfc2l6ZSkKK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZG9fdW5jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsCisJCQkJICAgY29uc3QgZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSkKIHsKIAlzdHJ1Y3QgbWVtY2dfYmF0Y2hfaW5mbyAqYmF0Y2ggPSBOVUxMOwogCWJvb2wgdW5jaGFyZ2VfbWVtc3cgPSB0cnVlOworCiAJLyogSWYgc3dhcG91dCwgdXNhZ2Ugb2Ygc3dhcCBkb2Vzbid0IGRlY3JlYXNlICovCiAJaWYgKCFkb19zd2FwX2FjY291bnQgfHwgY3R5cGUgPT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKQogCQl1bmNoYXJnZV9tZW1zdyA9IGZhbHNlOwpAQCAtMjU5NSw3ICsyNjU3LDcgQEAKIAlpZiAoIWJhdGNoLT5kb19iYXRjaCB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKQogCQlnb3RvIGRpcmVjdF91bmNoYXJnZTsKIAotCWlmIChwYWdlX3NpemUgIT0gUEFHRV9TSVpFKQorCWlmIChucl9wYWdlcyA+IDEpCiAJCWdvdG8gZGlyZWN0X3VuY2hhcmdlOwogCiAJLyoKQEAgLTI2MDYsMTQgKzI2NjgsMTQgQEAKIAlpZiAoYmF0Y2gtPm1lbWNnICE9IG1lbSkKIAkJZ290byBkaXJlY3RfdW5jaGFyZ2U7CiAJLyogcmVtZW1iZXIgZnJlZWQgY2hhcmdlIGFuZCB1bmNoYXJnZSBpdCBsYXRlciAqLwotCWJhdGNoLT5ieXRlcyArPSBQQUdFX1NJWkU7CisJYmF0Y2gtPm5yX3BhZ2VzKys7CiAJaWYgKHVuY2hhcmdlX21lbXN3KQotCQliYXRjaC0+bWVtc3dfYnl0ZXMgKz0gUEFHRV9TSVpFOworCQliYXRjaC0+bWVtc3dfbnJfcGFnZXMrKzsKIAlyZXR1cm47CiBkaXJlY3RfdW5jaGFyZ2U6Ci0JcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBwYWdlX3NpemUpOworCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgbnJfcGFnZXMgKiBQQUdFX1NJWkUpOwogCWlmICh1bmNoYXJnZV9tZW1zdykKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIHBhZ2Vfc2l6ZSk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBucl9wYWdlcyAqIFBBR0VfU0laRSk7CiAJaWYgKHVubGlrZWx5KGJhdGNoLT5tZW1jZyAhPSBtZW0pKQogCQltZW1jZ19vb21fcmVjb3ZlcihtZW0pOwogCXJldHVybjsKQEAgLTI2MjUsMTAgKzI2ODcsOSBAQAogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICoKIF9fbWVtX2Nncm91cF91bmNoYXJnZV9jb21tb24oc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUpCiB7Ci0JaW50IGNvdW50OwotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7Ci0JaW50IHBhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSAxOworCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI2MzcsMTEgKzI2OTgsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChQYWdlVHJhbnNIdWdlKHBhZ2UpKSB7Ci0JCXBhZ2Vfc2l6ZSA8PD0gY29tcG91bmRfb3JkZXIocGFnZSk7CisJCW5yX3BhZ2VzIDw8PSBjb21wb3VuZF9vcmRlcihwYWdlKTsKIAkJVk1fQlVHX09OKCFQYWdlVHJhbnNIdWdlKHBhZ2UpKTsKIAl9Ci0KLQljb3VudCA9IHBhZ2Vfc2l6ZSA+PiBQQUdFX1NISUZUOwogCS8qCiAJICogQ2hlY2sgaWYgb3VyIHBhZ2VfY2dyb3VwIGlzIHZhbGlkCiAJICovCkBAIC0yNjc0LDcgKzI3MzMsNyBAQAogCQlicmVhazsKIAl9CiAKLQltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKG1lbSwgUGFnZUNncm91cENhY2hlKHBjKSwgLWNvdW50KTsKKwltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKG1lbSwgUGFnZUNncm91cENhY2hlKHBjKSwgLW5yX3BhZ2VzKTsKIAogCUNsZWFyUGFnZUNncm91cFVzZWQocGMpOwogCS8qCkBAIC0yNjk1LDcgKzI3NTQsNyBAQAogCQltZW1fY2dyb3VwX2dldChtZW0pOwogCX0KIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKQotCQlfX2RvX3VuY2hhcmdlKG1lbSwgY3R5cGUsIHBhZ2Vfc2l6ZSk7CisJCW1lbV9jZ3JvdXBfZG9fdW5jaGFyZ2UobWVtLCBucl9wYWdlcywgY3R5cGUpOwogCiAJcmV0dXJuIG1lbTsKIApAQCAtMjczNSw4ICsyNzk0LDggQEAKIAkvKiBXZSBjYW4gZG8gbmVzdC4gKi8KIAlpZiAoY3VycmVudC0+bWVtY2dfYmF0Y2guZG9fYmF0Y2ggPT0gMSkgewogCQljdXJyZW50LT5tZW1jZ19iYXRjaC5tZW1jZyA9IE5VTEw7Ci0JCWN1cnJlbnQtPm1lbWNnX2JhdGNoLmJ5dGVzID0gMDsKLQkJY3VycmVudC0+bWVtY2dfYmF0Y2gubWVtc3dfYnl0ZXMgPSAwOworCQljdXJyZW50LT5tZW1jZ19iYXRjaC5ucl9wYWdlcyA9IDA7CisJCWN1cnJlbnQtPm1lbWNnX2JhdGNoLm1lbXN3X25yX3BhZ2VzID0gMDsKIAl9CiB9CiAKQEAgLTI3NTcsMTAgKzI4MTYsMTIgQEAKIAkgKiBUaGlzICJiYXRjaC0+bWVtY2ciIGlzIHZhbGlkIHdpdGhvdXQgYW55IGNzc19nZXQvcHV0IGV0Yy4uLgogCSAqIGJhY2F1c2Ugd2UgaGlkZSBjaGFyZ2VzIGJlaGluZCB1cy4KIAkgKi8KLQlpZiAoYmF0Y2gtPmJ5dGVzKQotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmYmF0Y2gtPm1lbWNnLT5yZXMsIGJhdGNoLT5ieXRlcyk7Ci0JaWYgKGJhdGNoLT5tZW1zd19ieXRlcykKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJmJhdGNoLT5tZW1jZy0+bWVtc3csIGJhdGNoLT5tZW1zd19ieXRlcyk7CisJaWYgKGJhdGNoLT5ucl9wYWdlcykKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJmJhdGNoLT5tZW1jZy0+cmVzLAorCQkJCSAgICAgYmF0Y2gtPm5yX3BhZ2VzICogUEFHRV9TSVpFKTsKKwlpZiAoYmF0Y2gtPm1lbXN3X25yX3BhZ2VzKQorCQlyZXNfY291bnRlcl91bmNoYXJnZSgmYmF0Y2gtPm1lbWNnLT5tZW1zdywKKwkJCQkgICAgIGJhdGNoLT5tZW1zd19ucl9wYWdlcyAqIFBBR0VfU0laRSk7CiAJbWVtY2dfb29tX3JlY292ZXIoYmF0Y2gtPm1lbWNnKTsKIAkvKiBmb3JnZXQgdGhpcyBwb2ludGVyIChmb3Igc2FuaXR5IGNoZWNrKSAqLwogCWJhdGNoLT5tZW1jZyA9IE5VTEw7CkBAIC0yODgzLDEzICsyOTQ0LDE1IEBACiAgKiBwYWdlIGJlbG9uZ3MgdG8uCiAgKi8KIGludCBtZW1fY2dyb3VwX3ByZXBhcmVfbWlncmF0aW9uKHN0cnVjdCBwYWdlICpwYWdlLAotCXN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKnB0cikKKwlzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKipwdHIsIGdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKIAllbnVtIGNoYXJnZV90eXBlIGN0eXBlOwogCWludCByZXQgPSAwOwogCisJKnB0ciA9IE5VTEw7CisKIAlWTV9CVUdfT04oUGFnZVRyYW5zSHVnZShwYWdlKSk7CiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIDA7CkBAIC0yOTQwLDcgKzMwMDMsNyBAQAogCQlyZXR1cm4gMDsKIAogCSpwdHIgPSBtZW07Ci0JcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgR0ZQX0tFUk5FTCwgcHRyLCBmYWxzZSwgUEFHRV9TSVpFKTsKKwlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBnZnBfbWFzaywgMSwgcHRyLCBmYWxzZSk7CiAJY3NzX3B1dCgmbWVtLT5jc3MpOy8qIGRyb3AgZXh0cmEgcmVmY250ICovCiAJaWYgKHJldCB8fCAqcHRyID09IE5VTEwpIHsKIAkJaWYgKFBhZ2VBbm9uKHBhZ2UpKSB7CkBAIC0yOTY3LDcgKzMwMzAsNyBAQAogCQljdHlwZSA9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEU7CiAJZWxzZQogCQljdHlwZSA9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU0hNRU07Ci0JX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2UobWVtLCBwYywgY3R5cGUsIFBBR0VfU0laRSk7CisJX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2UobWVtLCBwYWdlLCAxLCBwYywgY3R5cGUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMwMzIsNyArMzA5NSw3IEBACiAJCQkgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKIAlpbnQgcmV0OwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKQEAgLTMwNDUsNiArMzEwOCw1MiBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KK3N0YXRpYyBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cF91c2VkKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CisKKwlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwlpZiAobGlrZWx5KHBjKSAmJiBQYWdlQ2dyb3VwVXNlZChwYykpCisJCXJldHVybiBwYzsKKwlyZXR1cm4gTlVMTDsKK30KKworYm9vbCBtZW1fY2dyb3VwX2JhZF9wYWdlX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBsb29rdXBfcGFnZV9jZ3JvdXBfdXNlZChwYWdlKSAhPSBOVUxMOworfQorCit2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfYmFkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKKworCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwX3VzZWQocGFnZSk7CisJaWYgKHBjKSB7CisJCWludCByZXQgPSAtMTsKKwkJY2hhciAqcGF0aDsKKworCQlwcmludGsoS0VSTl9BTEVSVCAicGM6JXAgcGMtPmZsYWdzOiVseCBwYy0+bWVtX2Nncm91cDolcCIsCisJCSAgICAgICBwYywgcGMtPmZsYWdzLCBwYy0+bWVtX2Nncm91cCk7CisKKwkJcGF0aCA9IGttYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOworCQlpZiAocGF0aCkgeworCQkJcmN1X3JlYWRfbG9jaygpOworCQkJcmV0ID0gY2dyb3VwX3BhdGgocGMtPm1lbV9jZ3JvdXAtPmNzcy5jZ3JvdXAsCisJCQkJCQkJcGF0aCwgUEFUSF9NQVgpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCX0KKworCQlwcmludGsoS0VSTl9DT05UICIoJXMpXG4iLAorCQkJCShyZXQgPCAwKSA/ICJjYW5ub3QgZ2V0IHRoZSBwYXRoIiA6IHBhdGgpOworCQlrZnJlZShwYXRoKTsKKwl9Cit9CisjZW5kaWYKKwogc3RhdGljIERFRklORV9NVVRFWChzZXRfbGltaXRfbXV0ZXgpOwogCiBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKQEAgLTMyODgsNiArMzM5Nyw4IEBACiAJbG9vcCArPSAyNTY7CiAJYnVzeSA9IE5VTEw7CiAJd2hpbGUgKGxvb3AtLSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwogCQlyZXQgPSAwOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKIAkJaWYgKGxpc3RfZW1wdHkobGlzdCkpIHsKQEAgLTMzMDMsNyArMzQxNCw5IEBACiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKIAotCQlyZXQgPSBtZW1fY2dyb3VwX21vdmVfcGFyZW50KHBjLCBtZW0sIEdGUF9LRVJORUwpOworCQlwYWdlID0gbG9va3VwX2Nncm91cF9wYWdlKHBjKTsKKworCQlyZXQgPSBtZW1fY2dyb3VwX21vdmVfcGFyZW50KHBhZ2UsIHBjLCBtZW0sIEdGUF9LRVJORUwpOwogCQlpZiAocmV0ID09IC1FTk9NRU0pCiAJCQlicmVhazsKIApAQCAtMzQ1MSwxMyArMzU2NCwxMyBAQAogfQogCiAKLXN0YXRpYyB1NjQgbWVtX2Nncm91cF9nZXRfcmVjdXJzaXZlX2lkeF9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJZW51bSBtZW1fY2dyb3VwX3N0YXRfaW5kZXggaWR4KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9yZWN1cnNpdmVfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQkJCQkgICAgICAgZW51bSBtZW1fY2dyb3VwX3N0YXRfaW5kZXggaWR4KQogewogCXN0cnVjdCBtZW1fY2dyb3VwICppdGVyOwotCXM2NCB2YWwgPSAwOworCWxvbmcgdmFsID0gMDsKIAotCS8qIGVhY2ggcGVyIGNwdSdzIHZhbHVlIGNhbiBiZSBtaW51cy5UaGVuLCB1c2UgczY0ICovCisJLyogUGVyLWNwdSB2YWx1ZXMgY2FuIGJlIG5lZ2F0aXZlLCB1c2UgYSBzaWduZWQgYWNjdW11bGF0b3IgKi8KIAlmb3JfZWFjaF9tZW1fY2dyb3VwX3RyZWUoaXRlciwgbWVtKQogCQl2YWwgKz0gbWVtX2Nncm91cF9yZWFkX3N0YXQoaXRlciwgaWR4KTsKIApAQCAtMzQ3NywxMiArMzU5MCwxMSBAQAogCQkJcmV0dXJuIHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW0tPm1lbXN3LCBSRVNfVVNBR0UpOwogCX0KIAotCXZhbCA9IG1lbV9jZ3JvdXBfZ2V0X3JlY3Vyc2l2ZV9pZHhfc3RhdChtZW0sIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSk7Ci0JdmFsICs9IG1lbV9jZ3JvdXBfZ2V0X3JlY3Vyc2l2ZV9pZHhfc3RhdChtZW0sIE1FTV9DR1JPVVBfU1RBVF9SU1MpOworCXZhbCA9IG1lbV9jZ3JvdXBfcmVjdXJzaXZlX3N0YXQobWVtLCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUpOworCXZhbCArPSBtZW1fY2dyb3VwX3JlY3Vyc2l2ZV9zdGF0KG1lbSwgTUVNX0NHUk9VUF9TVEFUX1JTUyk7CiAKIAlpZiAoc3dhcCkKLQkJdmFsICs9IG1lbV9jZ3JvdXBfZ2V0X3JlY3Vyc2l2ZV9pZHhfc3RhdChtZW0sCi0JCQkJTUVNX0NHUk9VUF9TVEFUX1NXQVBPVVQpOworCQl2YWwgKz0gbWVtX2Nncm91cF9yZWN1cnNpdmVfc3RhdChtZW0sIE1FTV9DR1JPVVBfU1RBVF9TV0FQT1VUKTsKIAogCXJldHVybiB2YWwgPDwgUEFHRV9TSElGVDsKIH0KQEAgLTM3MDIsOSArMzgxNCw5IEBACiAJcy0+c3RhdFtNQ1NfUlNTXSArPSB2YWwgKiBQQUdFX1NJWkU7CiAJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQobWVtLCBNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQpOwogCXMtPnN0YXRbTUNTX0ZJTEVfTUFQUEVEXSArPSB2YWwgKiBQQUdFX1NJWkU7Ci0JdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQobWVtLCBNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5UKTsKKwl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfZXZlbnRzKG1lbSwgTUVNX0NHUk9VUF9FVkVOVFNfUEdQR0lOKTsKIAlzLT5zdGF0W01DU19QR1BHSU5dICs9IHZhbDsKLQl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChtZW0sIE1FTV9DR1JPVVBfU1RBVF9QR1BHT1VUX0NPVU5UKTsKKwl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfZXZlbnRzKG1lbSwgTUVNX0NHUk9VUF9FVkVOVFNfUEdQR09VVCk7CiAJcy0+c3RhdFtNQ1NfUEdQR09VVF0gKz0gdmFsOwogCWlmIChkb19zd2FwX2FjY291bnQpIHsKIAkJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQobWVtLCBNRU1fQ0dST1VQX1NUQVRfU1dBUE9VVCk7CkBAIC0zODI4LDkgKzM5NDAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcGluX2xvY2soJm1lbWNnLT5yZWNsYWltX3BhcmFtX2xvY2spOwogCW1lbWNnLT5zd2FwcGluZXNzID0gdmFsOwotCXNwaW5fdW5sb2NrKCZtZW1jZy0+cmVjbGFpbV9wYXJhbV9sb2NrKTsKIAogCWNncm91cF91bmxvY2soKTsKIApAQCAtNDQ4Niw3ICs0NTk2LDYgQEAKIAkJcmVzX2NvdW50ZXJfaW5pdCgmbWVtLT5tZW1zdywgTlVMTCk7CiAJfQogCW1lbS0+bGFzdF9zY2FubmVkX2NoaWxkID0gMDsKLQlzcGluX2xvY2tfaW5pdCgmbWVtLT5yZWNsYWltX3BhcmFtX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZtZW0tPm9vbV9ub3RpZnkpOwogCiAJaWYgKHBhcmVudCkKQEAgLTQ1NzQsOCArNDY4Myw3IEBACiAJCQliYXRjaF9jb3VudCA9IFBSRUNIQVJHRV9DT1VOVF9BVF9PTkNFOwogCQkJY29uZF9yZXNjaGVkKCk7CiAJCX0KLQkJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgR0ZQX0tFUk5FTCwgJm1lbSwgZmFsc2UsCi0JCQkJCSAgICAgIFBBR0VfU0laRSk7CisJCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKE5VTEwsIEdGUF9LRVJORUwsIDEsICZtZW0sIGZhbHNlKTsKIAkJaWYgKHJldCB8fCAhbWVtKQogCQkJLyogbWVtX2Nncm91cF9jbGVhcl9tYygpIHdpbGwgZG8gdW5jaGFyZ2UgbGF0ZXIgKi8KIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtNDczNyw3ICs0ODQ1LDggQEAKIAlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIAotCVZNX0JVR19PTihwbWRfdHJhbnNfaHVnZSgqcG1kKSk7CisJc3BsaXRfaHVnZV9wYWdlX3BtZCh3YWxrLT5tbSwgcG1kKTsKKwogCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKIAlmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkKIAkJaWYgKGlzX3RhcmdldF9wdGVfZm9yX21jKHZtYSwgYWRkciwgKnB0ZSwgTlVMTCkpCkBAIC00ODk5LDggKzUwMDgsOCBAQAogCXB0ZV90ICpwdGU7CiAJc3BpbmxvY2tfdCAqcHRsOwogCisJc3BsaXRfaHVnZV9wYWdlX3BtZCh3YWxrLT5tbSwgcG1kKTsKIHJldHJ5OgotCVZNX0JVR19PTihwbWRfdHJhbnNfaHVnZSgqcG1kKSk7CiAJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtPnZtX21tLCBwbWQsIGFkZHIsICZwdGwpOwogCWZvciAoOyBhZGRyICE9IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJcHRlX3QgcHRlbnQgPSAqKHB0ZSsrKTsKQEAgLTQ5MjAsOCArNTAyOSw4IEBACiAJCQlpZiAoaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKIAkJCQlnb3RvIHB1dDsKIAkJCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQkJaWYgKCFtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywKLQkJCQkJbWMuZnJvbSwgbWMudG8sIGZhbHNlLCBQQUdFX1NJWkUpKSB7CisJCQlpZiAoIW1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBhZ2UsIDEsIHBjLAorCQkJCQkJICAgICBtYy5mcm9tLCBtYy50bywgZmFsc2UpKSB7CiAJCQkJbWMucHJlY2hhcmdlLS07CiAJCQkJLyogd2UgdW5jaGFyZ2UgZnJvbSBtYy5mcm9tIGxhdGVyLiAqLwogCQkJCW1jLm1vdmVkX2NoYXJnZSsrOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggOTljY2I0NC4uZTBhZjMzNiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0xMTMwLDcgKzExMzAsNyBAQAogCiAJLyoKIAkgKiBOb3cgdGFrZSBjYXJlIG9mIHVzZXIgc3BhY2UgbWFwcGluZ3MuCi0JICogQWJvcnQgb24gZmFpbDogX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKCkgYXNzdW1lcyB1bm1hcHBlZCBwYWdlLgorCSAqIEFib3J0IG9uIGZhaWw6IF9fZGVsZXRlX2Zyb21fcGFnZV9jYWNoZSgpIGFzc3VtZXMgdW5tYXBwZWQgcGFnZS4KIAkgKi8KIAlpZiAoaHdwb2lzb25fdXNlcl9tYXBwaW5ncyhwLCBwZm4sIHRyYXBubykgIT0gU1dBUF9TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTUNFICUjbHg6IGNhbm5vdCB1bm1hcCBwYWdlLCBnaXZlIHVwXG4iLCBwZm4pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAzNDZlZTdlLi4yMGQ1Zjc0IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTU2OSw2ICsxNTY5LDggQEAKIAkJCQkJZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTsKIAkJCQlpZiAobm9uYmxvY2tpbmcpCiAJCQkJCWZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlk7CisJCQkJaWYgKGZvbGxfZmxhZ3MgJiBGT0xMX05PV0FJVCkKKwkJCQkJZmF1bHRfZmxhZ3MgfD0gKEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkgfCBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCk7CiAKIAkJCQlyZXQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgc3RhcnQsCiAJCQkJCQkJZmF1bHRfZmxhZ3MpOwpAQCAtMTU5NSw3ICsxNTk3LDggQEAKIAkJCQkJdHNrLT5taW5fZmx0Kys7CiAKIAkJCQlpZiAocmV0ICYgVk1fRkFVTFRfUkVUUlkpIHsKLQkJCQkJKm5vbmJsb2NraW5nID0gMDsKKwkJCQkJaWYgKG5vbmJsb2NraW5nKQorCQkJCQkJKm5vbmJsb2NraW5nID0gMDsKIAkJCQkJcmV0dXJuIGk7CiAJCQkJfQogCkBAIC0yMTcyLDEwICsyMTc1LDEwIEBACiAgKiBoYW5kbGVfcHRlX2ZhdWx0IGNob29zZXMgcGFnZSBmYXVsdCBoYW5kbGVyIGFjY29yZGluZyB0byBhbiBlbnRyeQogICogd2hpY2ggd2FzIHJlYWQgbm9uLWF0b21pY2FsbHkuICBCZWZvcmUgbWFraW5nIGFueSBjb21taXRtZW50LCBvbgogICogdGhvc2UgYXJjaGl0ZWN0dXJlcyBvciBjb25maWd1cmF0aW9ucyAoZS5nLiBpMzg2IHdpdGggUEFFKSB3aGljaAotICogbWlnaHQgZ2l2ZSBhIG1peCBvZiB1bm1hdGNoZWQgcGFydHMsIGRvX3N3YXBfcGFnZSBhbmQgZG9fZmlsZV9wYWdlCisgKiBtaWdodCBnaXZlIGEgbWl4IG9mIHVubWF0Y2hlZCBwYXJ0cywgZG9fc3dhcF9wYWdlIGFuZCBkb19ub25saW5lYXJfZmF1bHQKICAqIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kIHByb2NlZWRpbmcKICAqIChidXQgZG9fd3BfcGFnZSBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbHJlYWR5IG1ha2luZyBzdWNoIGEgY2hlY2s7Ci0gKiBhbmQgZG9fYW5vbnltb3VzX3BhZ2UgYW5kIGRvX25vX3BhZ2UgY2FuIHNhZmVseSBjaGVjayBsYXRlciBvbikuCisgKiBhbmQgZG9fYW5vbnltb3VzX3BhZ2UgY2FuIHNhZmVseSBjaGVjayBsYXRlciBvbikuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV91bm1hcF9zYW1lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJCXB0ZV90ICpwYWdlX3RhYmxlLCBwdGVfdCBvcmlnX3B0ZSkKQEAgLTIzNzEsNyArMjM3NCw3IEBACiAJCSAqIGJpdCBhZnRlciBpdCBjbGVhciBhbGwgZGlydHkgcHRlcywgYnV0IGJlZm9yZSBhIHJhY2luZwogCQkgKiBkb193cF9wYWdlIGluc3RhbGxzIGEgZGlydHkgcHRlLgogCQkgKgotCQkgKiBkb19ub19wYWdlIGlzIHByb3RlY3RlZCBzaW1pbGFybHkuCisJCSAqIF9fZG9fZmF1bHQgaXMgcHJvdGVjdGVkIHNpbWlsYXJseS4KIAkJICovCiAJCWlmICghcGFnZV9ta3dyaXRlKSB7CiAJCQl3YWl0X29uX3BhZ2VfbG9ja2VkKGRpcnR5X3BhZ2UpOwpAQCAtMjc2NCw3ICsyNzY3LDcgQEAKIAlzd3BfZW50cnlfdCBlbnRyeTsKIAlwdGVfdCBwdGU7CiAJaW50IGxvY2tlZDsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqcHRyID0gTlVMTDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqcHRyOwogCWludCBleGNsdXNpdmUgPSAwOwogCWludCByZXQgPSAwOwogCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IGI1M2VjOTkuLjk1OWE4YjggMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC05OTMsNyArOTkzLDcgQEAKIAkgKiBtb3N0IHJlY2VudCA8cywgZD4gcGFpciB0aGF0IG1vdmVkIChzICE9IGQpLiAgSWYgd2UgZmluZCBhIHBhaXIKIAkgKiB0aGF0IG5vdCBvbmx5IG1vdmVkLCBidXQgd2hhdCdzIGJldHRlciwgbW92ZWQgdG8gYW4gZW1wdHkgc2xvdAogCSAqIChkIGlzIG5vdCBzZXQgaW4gdG1wKSwgdGhlbiB3ZSBicmVhayBvdXQgdGhlbiwgd2l0aCB0aGF0IHBhaXIuCi0JICogT3RoZXJ3aXNlIHdoZW4gd2UgZmluaXNoIHNjYW5ubmcgZnJvbV90bXAsIHdlIGF0IGxlYXN0IGhhdmUgdGhlCisJICogT3RoZXJ3aXNlIHdoZW4gd2UgZmluaXNoIHNjYW5uaW5nIGZyb21fdG1wLCB3ZSBhdCBsZWFzdCBoYXZlIHRoZQogCSAqIG1vc3QgcmVjZW50IDxzLCBkPiBwYWlyIHRoYXQgbW92ZWQuICBJZiB3ZSBnZXQgYWxsIHRoZSB3YXkgdGhyb3VnaAogCSAqIHRoZSBzY2FuIG9mIHRtcCB3aXRob3V0IGZpbmRpbmcgYW55IG5vZGUgdGhhdCBtb3ZlZCwgbXVjaCBsZXNzCiAJICogbW92ZWQgdG8gYW4gZW1wdHkgbm9kZSwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgd29ydGggbWlncmF0aW5nLgpAQCAtMTk3OSw4ICsxOTc5LDcgQEAKIAljYXNlIE1QT0xfSU5URVJMRUFWRToKIAkJcmV0dXJuIG5vZGVzX2VxdWFsKGEtPnYubm9kZXMsIGItPnYubm9kZXMpOwogCWNhc2UgTVBPTF9QUkVGRVJSRUQ6Ci0JCXJldHVybiBhLT52LnByZWZlcnJlZF9ub2RlID09IGItPnYucHJlZmVycmVkX25vZGUgJiYKLQkJCWEtPmZsYWdzID09IGItPmZsYWdzOworCQlyZXR1cm4gYS0+di5wcmVmZXJyZWRfbm9kZSA9PSBiLT52LnByZWZlcnJlZF9ub2RlOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAzNTJkZTU1NS4uYjA0MDZkNyAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtNTY0LDcgKzU2NCw3IEBACiAgKiAgPT0gMCAtIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBtb3ZlX3RvX25ld19wYWdlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJCWludCByZW1hcF9zd2FwY2FjaGUpCisJCQkJCWludCByZW1hcF9zd2FwY2FjaGUsIGJvb2wgc3luYykKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlpbnQgcmM7CkBAIC01ODYsMTggKzU4NiwyOCBAQAogCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CiAJaWYgKCFtYXBwaW5nKQogCQlyYyA9IG1pZ3JhdGVfcGFnZShtYXBwaW5nLCBuZXdwYWdlLCBwYWdlKTsKLQllbHNlIGlmIChtYXBwaW5nLT5hX29wcy0+bWlncmF0ZXBhZ2UpCisJZWxzZSB7CiAJCS8qCi0JCSAqIE1vc3QgcGFnZXMgaGF2ZSBhIG1hcHBpbmcgYW5kIG1vc3QgZmlsZXN5c3RlbXMKLQkJICogc2hvdWxkIHByb3ZpZGUgYSBtaWdyYXRpb24gZnVuY3Rpb24uIEFub255bW91cwotCQkgKiBwYWdlcyBhcmUgcGFydCBvZiBzd2FwIHNwYWNlIHdoaWNoIGFsc28gaGFzIGl0cwotCQkgKiBvd24gbWlncmF0aW9uIGZ1bmN0aW9uLiBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbgotCQkgKiBwYXRoIGZvciBwYWdlIG1pZ3JhdGlvbi4KKwkJICogRG8gbm90IHdyaXRlYmFjayBwYWdlcyBpZiAhc3luYyBhbmQgbWlncmF0ZXBhZ2UgaXMKKwkJICogbm90IHBvaW50aW5nIHRvIG1pZ3JhdGVfcGFnZSgpIHdoaWNoIGlzIG5vbmJsb2NraW5nCisJCSAqIChzd2FwY2FjaGUvdG1wZnMgdXNlcyBtaWdyYXRlcGFnZSA9IG1pZ3JhdGVfcGFnZSkuCiAJCSAqLwotCQlyYyA9IG1hcHBpbmctPmFfb3BzLT5taWdyYXRlcGFnZShtYXBwaW5nLAotCQkJCQkJbmV3cGFnZSwgcGFnZSk7Ci0JZWxzZQotCQlyYyA9IGZhbGxiYWNrX21pZ3JhdGVfcGFnZShtYXBwaW5nLCBuZXdwYWdlLCBwYWdlKTsKKwkJaWYgKFBhZ2VEaXJ0eShwYWdlKSAmJiAhc3luYyAmJgorCQkgICAgbWFwcGluZy0+YV9vcHMtPm1pZ3JhdGVwYWdlICE9IG1pZ3JhdGVfcGFnZSkKKwkJCXJjID0gLUVCVVNZOworCQllbHNlIGlmIChtYXBwaW5nLT5hX29wcy0+bWlncmF0ZXBhZ2UpCisJCQkvKgorCQkJICogTW9zdCBwYWdlcyBoYXZlIGEgbWFwcGluZyBhbmQgbW9zdCBmaWxlc3lzdGVtcworCQkJICogc2hvdWxkIHByb3ZpZGUgYSBtaWdyYXRpb24gZnVuY3Rpb24uIEFub255bW91cworCQkJICogcGFnZXMgYXJlIHBhcnQgb2Ygc3dhcCBzcGFjZSB3aGljaCBhbHNvIGhhcyBpdHMKKwkJCSAqIG93biBtaWdyYXRpb24gZnVuY3Rpb24uIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uCisJCQkgKiBwYXRoIGZvciBwYWdlIG1pZ3JhdGlvbi4KKwkJCSAqLworCQkJcmMgPSBtYXBwaW5nLT5hX29wcy0+bWlncmF0ZXBhZ2UobWFwcGluZywKKwkJCQkJCQluZXdwYWdlLCBwYWdlKTsKKwkJZWxzZQorCQkJcmMgPSBmYWxsYmFja19taWdyYXRlX3BhZ2UobWFwcGluZywgbmV3cGFnZSwgcGFnZSk7CisJfQogCiAJaWYgKHJjKSB7CiAJCW5ld3BhZ2UtPm1hcHBpbmcgPSBOVUxMOwpAQCAtNjIzLDcgKzYzMyw3IEBACiAJc3RydWN0IHBhZ2UgKm5ld3BhZ2UgPSBnZXRfbmV3X3BhZ2UocGFnZSwgcHJpdmF0ZSwgJnJlc3VsdCk7CiAJaW50IHJlbWFwX3N3YXBjYWNoZSA9IDE7CiAJaW50IGNoYXJnZSA9IDA7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDsKIAogCWlmICghbmV3cGFnZSkKQEAgLTY0MSw3ICs2NTEsNyBAQAogCXJjID0gLUVBR0FJTjsKIAogCWlmICghdHJ5bG9ja19wYWdlKHBhZ2UpKSB7Ci0JCWlmICghZm9yY2UpCisJCWlmICghZm9yY2UgfHwgIXN5bmMpCiAJCQlnb3RvIG1vdmVfbmV3cGFnZTsKIAogCQkvKgpAQCAtNjc4LDcgKzY4OCw3IEBACiAJfQogCiAJLyogY2hhcmdlIGFnYWluc3QgbmV3IHBhZ2UgKi8KLQljaGFyZ2UgPSBtZW1fY2dyb3VwX3ByZXBhcmVfbWlncmF0aW9uKHBhZ2UsIG5ld3BhZ2UsICZtZW0pOworCWNoYXJnZSA9IG1lbV9jZ3JvdXBfcHJlcGFyZV9taWdyYXRpb24ocGFnZSwgbmV3cGFnZSwgJm1lbSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoYXJnZSA9PSAtRU5PTUVNKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byB1bmxvY2s7CkBAIC02ODYsNyArNjk2LDE1IEBACiAJQlVHX09OKGNoYXJnZSk7CiAKIAlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkgewotCQlpZiAoIWZvcmNlIHx8ICFzeW5jKQorCQkvKgorCQkgKiBGb3IgIXN5bmMsIHRoZXJlIGlzIG5vIHBvaW50IHJldHJ5aW5nIGFzIHRoZSByZXRyeSBsb29wCisJCSAqIGlzIGV4cGVjdGVkIHRvIGJlIHRvbyBzaG9ydCBmb3IgUGFnZVdyaXRlYmFjayB0byBiZSBjbGVhcmVkCisJCSAqLworCQlpZiAoIXN5bmMpIHsKKwkJCXJjID0gLUVCVVNZOworCQkJZ290byB1bmNoYXJnZTsKKwkJfQorCQlpZiAoIWZvcmNlKQogCQkJZ290byB1bmNoYXJnZTsKIAkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAl9CkBAIC03NTcsMTQgKzc3NSwxNCBAQAogCiBza2lwX3VubWFwOgogCWlmICghcGFnZV9tYXBwZWQocGFnZSkpCi0JCXJjID0gbW92ZV90b19uZXdfcGFnZShuZXdwYWdlLCBwYWdlLCByZW1hcF9zd2FwY2FjaGUpOworCQlyYyA9IG1vdmVfdG9fbmV3X3BhZ2UobmV3cGFnZSwgcGFnZSwgcmVtYXBfc3dhcGNhY2hlLCBzeW5jKTsKIAogCWlmIChyYyAmJiByZW1hcF9zd2FwY2FjaGUpCiAJCXJlbW92ZV9taWdyYXRpb25fcHRlcyhwYWdlLCBwYWdlKTsKIAogCS8qIERyb3AgYW4gYW5vbl92bWEgcmVmZXJlbmNlIGlmIHdlIHRvb2sgb25lICovCiAJaWYgKGFub25fdm1hKQotCQlkcm9wX2Fub25fdm1hKGFub25fdm1hKTsKKwkJcHV0X2Fub25fdm1hKGFub25fdm1hKTsKIAogdW5jaGFyZ2U6CiAJaWYgKCFjaGFyZ2UpCkBAIC04NTAsMTMgKzg2OCwxMyBAQAogCXRyeV90b191bm1hcChocGFnZSwgVFRVX01JR1JBVElPTnxUVFVfSUdOT1JFX01MT0NLfFRUVV9JR05PUkVfQUNDRVNTKTsKIAogCWlmICghcGFnZV9tYXBwZWQoaHBhZ2UpKQotCQlyYyA9IG1vdmVfdG9fbmV3X3BhZ2UobmV3X2hwYWdlLCBocGFnZSwgMSk7CisJCXJjID0gbW92ZV90b19uZXdfcGFnZShuZXdfaHBhZ2UsIGhwYWdlLCAxLCBzeW5jKTsKIAogCWlmIChyYykKIAkJcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKGhwYWdlLCBocGFnZSk7CiAKIAlpZiAoYW5vbl92bWEpCi0JCWRyb3BfYW5vbl92bWEoYW5vbl92bWEpOworCQlwdXRfYW5vbl92bWEoYW5vbl92bWEpOwogb3V0OgogCXVubG9ja19wYWdlKGhwYWdlKTsKIApkaWZmIC0tZ2l0IGEvbW0vbm9ib290bWVtLmMgYi9tbS9ub2Jvb3RtZW0uYwppbmRleCBlMmJkYjA3MC4uZTk5ZjZjZCAxMDA2NDQKLS0tIGEvbW0vbm9ib290bWVtLmMKKysrIGIvbW0vbm9ib290bWVtLmMKQEAgLTMyLDE0ICszMiw2IEBACiB1bnNpZ25lZCBsb25nIG1pbl9sb3dfcGZuOwogdW5zaWduZWQgbG9uZyBtYXhfcGZuOwogCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLS8qCi0gKiBJZiB3ZSBoYXZlIGJvb3RlZCBkdWUgdG8gYSBjcmFzaCwgbWF4X3BmbiB3aWxsIGJlIGEgdmVyeSBsb3cgdmFsdWUuIFdlIG5lZWQKLSAqIHRvIGtub3cgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCB0aGUgcHJldmlvdXMga2VybmVsIHVzZWQuCi0gKi8KLXVuc2lnbmVkIGxvbmcgc2F2ZWRfbWF4X3BmbjsKLSNlbmRpZgotCiBzdGF0aWMgdm9pZCAqIF9faW5pdCBfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KGludCBuaWQsIHU2NCBzaXplLCB1NjQgYWxpZ24sCiAJCQkJCXU2NCBnb2FsLCB1NjQgbGltaXQpCiB7CmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCA3ZGNjYTU1Li42MmE1Y2VjIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KIAogaW50IHN5c2N0bF9wYW5pY19vbl9vb207CiBpbnQgc3lzY3RsX29vbV9raWxsX2FsbG9jYXRpbmdfdGFzazsKQEAgLTI5MiwxMyArMjkzLDE1IEBACiAJCXVuc2lnbmVkIGxvbmcgdG90YWxwYWdlcywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2spCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjaG9zZW4gPSBOVUxMOwogCSpwcG9pbnRzID0gMDsKIAotCWZvcl9lYWNoX3Byb2Nlc3MocCkgeworCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKIAkJdW5zaWduZWQgaW50IHBvaW50czsKIAorCQlpZiAoIXAtPm1tKQorCQkJY29udGludWU7CiAJCWlmIChvb21fdW5raWxsYWJsZV90YXNrKHAsIG1lbSwgbm9kZW1hc2spKQogCQkJY29udGludWU7CiAKQEAgLTMxNCwyMiArMzE3LDI5IEBACiAJCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTUVNRElFKSkKIAkJCXJldHVybiBFUlJfUFRSKC0xVUwpOwogCi0JCS8qCi0JCSAqIFRoaXMgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgcmVsZWFzaW5nIG1lbW9yeSBzbyB3YWl0IGZvciBpdAotCQkgKiB0byBmaW5pc2ggYmVmb3JlIGtpbGxpbmcgc29tZSBvdGhlciB0YXNrIGJ5IG1pc3Rha2UuCi0JCSAqCi0JCSAqIEhvd2V2ZXIsIGlmIHAgaXMgdGhlIGN1cnJlbnQgdGFzaywgd2UgYWxsb3cgdGhlICdraWxsJyB0bwotCQkgKiBnbyBhaGVhZCBpZiBpdCBpcyBleGl0aW5nOiB0aGlzIHdpbGwgc2ltcGx5IHNldCBUSUZfTUVNRElFLAotCQkgKiB3aGljaCB3aWxsIGFsbG93IGl0IHRvIGdhaW4gYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBpbgotCQkgKiB0aGUgcHJvY2VzcyBvZiBleGl0aW5nIGFuZCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGdldCBhbiBlYXN5IE9PTSBkZWFkbG9jay4KLQkJICovCi0JCWlmICh0aHJlYWRfZ3JvdXBfZW1wdHkocCkgJiYgKHAtPmZsYWdzICYgUEZfRVhJVElORykgJiYgcC0+bW0pIHsKLQkJCWlmIChwICE9IGN1cnJlbnQpCi0JCQkJcmV0dXJuIEVSUl9QVFIoLTFVTCk7Ci0KLQkJCWNob3NlbiA9IHA7Ci0JCQkqcHBvaW50cyA9IDEwMDA7CisJCWlmIChwLT5mbGFncyAmIFBGX0VYSVRJTkcpIHsKKwkJCS8qCisJCQkgKiBJZiBwIGlzIHRoZSBjdXJyZW50IHRhc2sgYW5kIGlzIGluIHRoZSBwcm9jZXNzIG9mCisJCQkgKiByZWxlYXNpbmcgbWVtb3J5LCB3ZSBhbGxvdyB0aGUgImtpbGwiIHRvIHNldAorCQkJICogVElGX01FTURJRSwgd2hpY2ggd2lsbCBhbGxvdyBpdCB0byBnYWluIGFjY2VzcyB0bworCQkJICogbWVtb3J5IHJlc2VydmVzLiAgT3RoZXJ3aXNlLCBpdCBtYXkgc3RhbGwgZm9yZXZlci4KKwkJCSAqCisJCQkgKiBUaGUgbG9vcCBpc24ndCBicm9rZW4gaGVyZSwgaG93ZXZlciwgaW4gY2FzZSBvdGhlcgorCQkJICogdGhyZWFkcyBhcmUgZm91bmQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gb29tIGtpbGxlZC4KKwkJCSAqLworCQkJaWYgKHAgPT0gY3VycmVudCkgeworCQkJCWNob3NlbiA9IHA7CisJCQkJKnBwb2ludHMgPSAxMDAwOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoaXMgdGFzayBpcyBub3QgYmVpbmcgcHRyYWNlZCBvbiBleGl0LAorCQkJCSAqIHRoZW4gd2FpdCBmb3IgaXQgdG8gZmluaXNoIGJlZm9yZSBraWxsaW5nCisJCQkJICogc29tZSBvdGhlciB0YXNrIHVubmVjZXNzYXJpbHkuCisJCQkJICovCisJCQkJaWYgKCEodGFza19wdHJhY2UocC0+Z3JvdXBfbGVhZGVyKSAmCisJCQkJCQkJUFRfVFJBQ0VfRVhJVCkpCisJCQkJCXJldHVybiBFUlJfUFRSKC0xVUwpOworCQkJfQogCQl9CiAKIAkJcG9pbnRzID0gb29tX2JhZG5lc3MocCwgbWVtLCBub2RlbWFzaywgdG90YWxwYWdlcyk7CkBAIC0zMzcsNyArMzQ3LDcgQEAKIAkJCWNob3NlbiA9IHA7CiAJCQkqcHBvaW50cyA9IHBvaW50czsKIAkJfQotCX0KKwl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCiAJcmV0dXJuIGNob3NlbjsKIH0KQEAgLTM5Niw3ICs0MDYsNyBAQAogCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwogCWR1bXBfc3RhY2soKTsKIAltZW1fY2dyb3VwX3ByaW50X29vbV9pbmZvKG1lbSwgcCk7Ci0Jc2hvd19tZW0oKTsKKwlfX3Nob3dfbWVtKFNIT1dfTUVNX0ZJTFRFUl9OT0RFUyk7CiAJaWYgKHN5c2N0bF9vb21fZHVtcF90YXNrcykKIAkJZHVtcF90YXNrcyhtZW0sIG5vZGVtYXNrKTsKIH0KQEAgLTQ5MSw2ICs1MDEsOCBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmdC0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKIAkJCXVuc2lnbmVkIGludCBjaGlsZF9wb2ludHM7CiAKKwkJCWlmIChjaGlsZC0+bW0gPT0gcC0+bW0pCisJCQkJY29udGludWU7CiAJCQkvKgogCQkJICogb29tX2JhZG5lc3MoKSByZXR1cm5zIDAgaWYgdGhlIHRocmVhZCBpcyB1bmtpbGxhYmxlCiAJCQkgKi8KQEAgLTUzNyw2ICs1NDksMTcgQEAKIAl1bnNpZ25lZCBpbnQgcG9pbnRzID0gMDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKKwkvKgorCSAqIElmIGN1cnJlbnQgaGFzIGEgcGVuZGluZyBTSUdLSUxMLCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IGl0LiAgVGhlCisJICogZ29hbCBpcyB0byBhbGxvdyBpdCB0byBhbGxvY2F0ZSBzbyB0aGF0IGl0IG1heSBxdWlja2x5IGV4aXQgYW5kIGZyZWUKKwkgKiBpdHMgbWVtb3J5LgorCSAqLworCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01FTURJRSk7CisJCWJvb3N0X2R5aW5nX3Rhc2tfcHJpbyhjdXJyZW50LCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKwogCWNoZWNrX3BhbmljX29uX29vbShDT05TVFJBSU5UX01FTUNHLCBnZnBfbWFzaywgMCwgTlVMTCk7CiAJbGltaXQgPSBtZW1fY2dyb3VwX2dldF9saW1pdChtZW0pID4+IFBBR0VfU0hJRlQ7CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDJjYjAxZjYuLjYzMmI0NjQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtOTI3LDcgKzkyNyw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWRvbmVfaW5kZXggPSBwYWdlLT5pbmRleCArIDE7CisJCQlkb25lX2luZGV4ID0gcGFnZS0+aW5kZXg7CiAKIAkJCWxvY2tfcGFnZShwYWdlKTsKIApAQCAtOTc3LDYgKzk3Nyw3IEBACiAJCQkJCSAqIG5vdCBiZSBzdWl0YWJsZSBmb3IgZGF0YSBpbnRlZ3JpdHkKIAkJCQkJICogd3JpdGVvdXQpLgogCQkJCQkgKi8KKwkJCQkJZG9uZV9pbmRleCA9IHBhZ2UtPmluZGV4ICsgMTsKIAkJCQkJZG9uZSA9IDE7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTEyMTEsNiArMTIxMiwxNyBAQAogCiAJaWYgKGxpa2VseShtYXBwaW5nKSkgewogCQlpbnQgKCpzcGQpKHN0cnVjdCBwYWdlICopID0gbWFwcGluZy0+YV9vcHMtPnNldF9wYWdlX2RpcnR5OworCQkvKgorCQkgKiByZWFkYWhlYWQvbHJ1X2RlYWN0aXZhdGVfcGFnZSBjb3VsZCByZW1haW4KKwkJICogUEdfcmVhZGFoZWFkL1BHX3JlY2xhaW0gZHVlIHRvIHJhY2Ugd2l0aCBlbmRfcGFnZV93cml0ZWJhY2sKKwkJICogQWJvdXQgcmVhZGFoZWFkLCBpZiB0aGUgcGFnZSBpcyB3cml0dGVuLCB0aGUgZmxhZ3Mgd291bGQgYmUKKwkJICogcmVzZXQuIFNvIG5vIHByb2JsZW0uCisJCSAqIEFib3V0IGxydV9kZWFjdGl2YXRlX3BhZ2UsIGlmIHRoZSBwYWdlIGlzIHJlZGlydHksIHRoZSBmbGFnCisJCSAqIHdpbGwgYmUgcmVzZXQuIFNvIG5vIHByb2JsZW0uIGJ1dCBpZiB0aGUgcGFnZSBpcyB1c2VkIGJ5IHJlYWRhaGVhZAorCQkgKiBpdCB3aWxsIGNvbmZ1c2UgcmVhZGFoZWFkIGFuZCBtYWtlIGl0IHJlc3RhcnQgdGhlIHNpemUgcmFtcHVwCisJCSAqIHByb2Nlc3MuIEJ1dCBpdCdzIGEgdHJpdmlhbCBwcm9ibGVtLgorCQkgKi8KKwkJQ2xlYXJQYWdlUmVjbGFpbShwYWdlKTsKICNpZmRlZiBDT05GSUdfQkxPQ0sKIAkJaWYgKCFzcGQpCiAJCQlzcGQgPSBfX3NldF9wYWdlX2RpcnR5X2J1ZmZlcnM7CkBAIC0xMjY2LDcgKzEyNzgsNiBAQAogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAotCUNsZWFyUGFnZVJlY2xhaW0ocGFnZSk7CiAJaWYgKG1hcHBpbmcgJiYgbWFwcGluZ19jYXBfYWNjb3VudF9kaXJ0eShtYXBwaW5nKSkgewogCQkvKgogCQkgKiBZZXMsIFZpcmdpbmlhLCB0aGlzIGlzIGluZGVlZCBpbnNhbmUuCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggNzk0NTI0Ny4uOGU1NzI2YSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBhY3Rpb24uaD4KICNpbmNsdWRlIDx0cmFjZS9ldmVudHMva21lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZV9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtNTY1LDcgKzU2Niw4IEBACiAJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgfAogCQkocGFnZS0+bWFwcGluZyAhPSBOVUxMKSAgfAogCQkoYXRvbWljX3JlYWQoJnBhZ2UtPl9jb3VudCkgIT0gMCkgfAotCQkocGFnZS0+ZmxhZ3MgJiBQQUdFX0ZMQUdTX0NIRUNLX0FUX0ZSRUUpKSkgeworCQkocGFnZS0+ZmxhZ3MgJiBQQUdFX0ZMQUdTX0NIRUNLX0FUX0ZSRUUpIHwKKwkJKG1lbV9jZ3JvdXBfYmFkX3BhZ2VfY2hlY2socGFnZSkpKSkgewogCQliYWRfcGFnZShwYWdlKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNjE0LDYgKzYxNiwxMCBAQAogCQkJbGlzdCA9ICZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXTsKIAkJfSB3aGlsZSAobGlzdF9lbXB0eShsaXN0KSk7CiAKKwkJLyogVGhpcyBpcyB0aGUgb25seSBub24tZW1wdHkgbGlzdC4gRnJlZSB0aGVtIGFsbC4gKi8KKwkJaWYgKGJhdGNoX2ZyZWUgPT0gTUlHUkFURV9QQ1BUWVBFUykKKwkJCWJhdGNoX2ZyZWUgPSB0b19mcmVlOworCiAJCWRvIHsKIAkJCXBhZ2UgPSBsaXN0X2VudHJ5KGxpc3QtPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpOwogCQkJLyogbXVzdCBkZWxldGUgYXMgX19mcmVlX29uZV9wYWdlIGxpc3QgbWFuaXB1bGF0ZXMgKi8KQEAgLTc1MCw3ICs3NTYsOCBAQAogCWlmICh1bmxpa2VseShwYWdlX21hcGNvdW50KHBhZ2UpIHwKIAkJKHBhZ2UtPm1hcHBpbmcgIT0gTlVMTCkgIHwKIAkJKGF0b21pY19yZWFkKCZwYWdlLT5fY291bnQpICE9IDApICB8Ci0JCShwYWdlLT5mbGFncyAmIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUCkpKSB7CisJCShwYWdlLT5mbGFncyAmIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUCkgfAorCQkobWVtX2Nncm91cF9iYWRfcGFnZV9jaGVjayhwYWdlKSkpKSB7CiAJCWJhZF9wYWdlKHBhZ2UpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC04NjMsOSArODcwLDggQEAKIAkJfQogCiAJCW9yZGVyID0gcGFnZV9vcmRlcihwYWdlKTsKLQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCWxpc3RfYWRkKCZwYWdlLT5scnUsCi0JCQkmem9uZS0+ZnJlZV9hcmVhW29yZGVyXS5mcmVlX2xpc3RbbWlncmF0ZXR5cGVdKTsKKwkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsCisJCQkgICZ6b25lLT5mcmVlX2FyZWFbb3JkZXJdLmZyZWVfbGlzdFttaWdyYXRldHlwZV0pOwogCQlwYWdlICs9IDEgPDwgb3JkZXI7CiAJCXBhZ2VzX21vdmVkICs9IDEgPDwgb3JkZXI7CiAJfQpAQCAtMTMzMyw3ICsxMzM5LDcgQEAKIAl9CiAKIAlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmUsIDEgPDwgb3JkZXIpOwotCXpvbmVfc3RhdGlzdGljcyhwcmVmZXJyZWRfem9uZSwgem9uZSk7CisJem9uZV9zdGF0aXN0aWNzKHByZWZlcnJlZF96b25lLCB6b25lLCBnZnBfZmxhZ3MpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCVZNX0JVR19PTihiYWRfcmFuZ2Uoem9uZSwgcGFnZSkpOwpAQCAtMTcxNCw2ICsxNzIwLDIwIEBACiAJcmV0dXJuIHBhZ2U7CiB9CiAKKy8qCisgKiBMYXJnZSBtYWNoaW5lcyB3aXRoIG1hbnkgcG9zc2libGUgbm9kZXMgc2hvdWxkIG5vdCBhbHdheXMgZHVtcCBwZXItbm9kZQorICogbWVtaW5mbyBpbiBpcnEgY29udGV4dC4KKyAqLworc3RhdGljIGlubGluZSBib29sIHNob3VsZF9zdXBwcmVzc19zaG93X21lbSh2b2lkKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKyNpZiBOT0RFU19TSElGVCA+IDgKKwlyZXQgPSBpbl9pbnRlcnJ1cHQoKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50CiBzaG91bGRfYWxsb2NfcmV0cnkoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQl1bnNpZ25lZCBsb25nIHBhZ2VzX3JlY2xhaW1lZCkKQEAgLTIwODUsNyArMjEwNSw3IEBACiAJCQkJCXN5bmNfbWlncmF0aW9uKTsKIAlpZiAocGFnZSkKIAkJZ290byBnb3RfcGc7Ci0Jc3luY19taWdyYXRpb24gPSB0cnVlOworCXN5bmNfbWlncmF0aW9uID0gIShnZnBfbWFzayAmIF9fR0ZQX05PX0tTV0FQRCk7CiAKIAkvKiBUcnkgZGlyZWN0IHJlY2xhaW0gYW5kIHRoZW4gYWxsb2NhdGluZyAqLwogCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwKQEAgLTIxNTcsMTEgKzIxNzcsMjUgQEAKIAogbm9wYWdlOgogCWlmICghKGdmcF9tYXNrICYgX19HRlBfTk9XQVJOKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHBhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlLiIKLQkJCSIgb3JkZXI6JWQsIG1vZGU6MHgleFxuIiwKKwkJdW5zaWduZWQgaW50IGZpbHRlciA9IFNIT1dfTUVNX0ZJTFRFUl9OT0RFUzsKKworCQkvKgorCQkgKiBUaGlzIGRvY3VtZW50cyBleGNlcHRpb25zIGdpdmVuIHRvIGFsbG9jYXRpb25zIGluIGNlcnRhaW4KKwkJICogY29udGV4dHMgdGhhdCBhcmUgYWxsb3dlZCB0byBhbGxvY2F0ZSBvdXRzaWRlIGN1cnJlbnQncyBzZXQKKwkJICogb2YgYWxsb3dlZCBub2Rlcy4KKwkJICovCisJCWlmICghKGdmcF9tYXNrICYgX19HRlBfTk9NRU1BTExPQykpCisJCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSB8fAorCQkJICAgIChjdXJyZW50LT5mbGFncyAmIChQRl9NRU1BTExPQyB8IFBGX0VYSVRJTkcpKSkKKwkJCQlmaWx0ZXIgJj0gflNIT1dfTUVNX0ZJTFRFUl9OT0RFUzsKKwkJaWYgKGluX2ludGVycnVwdCgpIHx8ICF3YWl0KQorCQkJZmlsdGVyICY9IH5TSE9XX01FTV9GSUxURVJfTk9ERVM7CisKKwkJcHJfd2FybmluZygiJXM6IHBhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlLiBvcmRlcjolZCwgbW9kZToweCV4XG4iLAogCQkJY3VycmVudC0+Y29tbSwgb3JkZXIsIGdmcF9tYXNrKTsKIAkJZHVtcF9zdGFjaygpOwotCQlzaG93X21lbSgpOworCQlpZiAoIXNob3VsZF9zdXBwcmVzc19zaG93X21lbSgpKQorCQkJX19zaG93X21lbShmaWx0ZXIpOwogCX0KIAlyZXR1cm4gcGFnZTsKIGdvdF9wZzoKQEAgLTI0MTEsMTkgKzI0NDUsNDIgQEAKIH0KICNlbmRpZgogCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHpvbmUncyBub2RlIHNob3VsZCBiZSBkaXNwbGF5ZWQgb3Igbm90LCBkZXBlbmRpbmcgb24KKyAqIHdoZXRoZXIgU0hPV19NRU1fRklMVEVSX05PREVTIHdhcyBwYXNzZWQgdG8gX19zaG93X2ZyZWVfYXJlYXMoKS4KKyAqLworc3RhdGljIGJvb2wgc2tpcF9mcmVlX2FyZWFzX3pvbmUodW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKCEoZmxhZ3MgJiBTSE9XX01FTV9GSUxURVJfTk9ERVMpKQorCQlnb3RvIG91dDsKKworCWdldF9tZW1zX2FsbG93ZWQoKTsKKwlyZXQgPSAhbm9kZV9pc3NldCh6b25lLT56b25lX3BnZGF0LT5ub2RlX2lkLAorCQkJCWNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7CisJcHV0X21lbXNfYWxsb3dlZCgpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKICNkZWZpbmUgSyh4KSAoKHgpIDw8IChQQUdFX1NISUZULTEwKSkKIAogLyoKICAqIFNob3cgZnJlZSBhcmVhIGxpc3QgKHVzZWQgaW5zaWRlIHNoaWZ0X3Njcm9sbC1sb2NrIHN0dWZmKQogICogV2UgYWxzbyBjYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2UgZnJhZ21lbnRhdGlvbi4gV2UgZG8gdGhpcyBieSBjb3VudGluZyB0aGUKICAqIG1lbW9yeSBvbiBlYWNoIGZyZWUgbGlzdCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIGxpc3QuCisgKiBTdXBwcmVzc2VzIG5vZGVzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIGJ5IGN1cnJlbnQncyBjcHVzZXQgaWYKKyAqIFNIT1dfTUVNX0ZJTFRFUl9OT0RFUyBpcyBwYXNzZWQuCiAgKi8KLXZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpCit2b2lkIF9fc2hvd19mcmVlX2FyZWFzKHVuc2lnbmVkIGludCBmaWx0ZXIpCiB7CiAJaW50IGNwdTsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAogCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKKwkJaWYgKHNraXBfZnJlZV9hcmVhc196b25lKGZpbHRlciwgem9uZSkpCisJCQljb250aW51ZTsKIAkJc2hvd19ub2RlKHpvbmUpOwogCQlwcmludGsoIiVzIHBlci1jcHU6XG4iLCB6b25lLT5uYW1lKTsKIApAQCAtMjQ2NSw2ICsyNTIyLDggQEAKIAlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCWludCBpOwogCisJCWlmIChza2lwX2ZyZWVfYXJlYXNfem9uZShmaWx0ZXIsIHpvbmUpKQorCQkJY29udGludWU7CiAJCXNob3dfbm9kZSh6b25lKTsKIAkJcHJpbnRrKCIlcyIKIAkJCSIgZnJlZTolbHVrQiIKQEAgLTI1MzIsNiArMjU5MSw4IEBACiAJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogIAkJdW5zaWduZWQgbG9uZyBucltNQVhfT1JERVJdLCBmbGFncywgb3JkZXIsIHRvdGFsID0gMDsKIAorCQlpZiAoc2tpcF9mcmVlX2FyZWFzX3pvbmUoZmlsdGVyLCB6b25lKSkKKwkJCWNvbnRpbnVlOwogCQlzaG93X25vZGUoem9uZSk7CiAJCXByaW50aygiJXM6ICIsIHpvbmUtPm5hbWUpOwogCkBAIC0yNTUxLDYgKzI2MTIsMTEgQEAKIAlzaG93X3N3YXBfY2FjaGVfaW5mbygpOwogfQogCit2b2lkIHNob3dfZnJlZV9hcmVhcyh2b2lkKQoreworCV9fc2hvd19mcmVlX2FyZWFzKDApOworfQorCiBzdGF0aWMgdm9pZCB6b25lcmVmX3NldF96b25lKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZikKIHsKIAl6b25lcmVmLT56b25lID0gem9uZTsKQEAgLTU2MjEsNCArNTY4Nyw1IEBACiAJCXBhZ2UsIGF0b21pY19yZWFkKCZwYWdlLT5fY291bnQpLCBwYWdlX21hcGNvdW50KHBhZ2UpLAogCQlwYWdlLT5tYXBwaW5nLCBwYWdlLT5pbmRleCk7CiAJZHVtcF9wYWdlX2ZsYWdzKHBhZ2UtPmZsYWdzKTsKKwltZW1fY2dyb3VwX3ByaW50X2JhZF9wYWdlKHBhZ2UpOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jZ3JvdXAuYyBiL21tL3BhZ2VfY2dyb3VwLmMKaW5kZXggNWJmZmFkYS4uYTEyY2MzZiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jZ3JvdXAuYworKysgYi9tbS9wYWdlX2Nncm91cC5jCkBAIC0xMSwxMiArMTEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KIAotc3RhdGljIHZvaWQgX19tZW1pbml0Ci1fX2luaXRfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywgdW5zaWduZWQgbG9uZyBwZm4pCitzdGF0aWMgdm9pZCBfX21lbWluaXQgaW5pdF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLCB1bnNpZ25lZCBsb25nIGlkKQogewogCXBjLT5mbGFncyA9IDA7CisJc2V0X3BhZ2VfY2dyb3VwX2FycmF5X2lkKHBjLCBpZCk7CiAJcGMtPm1lbV9jZ3JvdXAgPSBOVUxMOwotCXBjLT5wYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAlJTklUX0xJU1RfSEVBRCgmcGMtPmxydSk7CiB9CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF91c2FnZTsKQEAgLTQzLDYgKzQyLDE5IEBACiAJcmV0dXJuIGJhc2UgKyBvZmZzZXQ7CiB9CiAKK3N0cnVjdCBwYWdlICpsb29rdXBfY2dyb3VwX3BhZ2Uoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlwZ19kYXRhX3QgKnBnZGF0OworCisJcGdkYXQgPSBOT0RFX0RBVEEocGFnZV9jZ3JvdXBfYXJyYXlfaWQocGMpKTsKKwlwZm4gPSBwYyAtIHBnZGF0LT5ub2RlX3BhZ2VfY2dyb3VwICsgcGdkYXQtPm5vZGVfc3RhcnRfcGZuOworCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCVZNX0JVR19PTihwYyAhPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSkpOworCXJldHVybiBwYWdlOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBhbGxvY19ub2RlX3BhZ2VfY2dyb3VwKGludCBuaWQpCiB7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpiYXNlLCAqcGM7CkBAIC02Myw3ICs3NSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5yX3BhZ2VzOyBpbmRleCsrKSB7CiAJCXBjID0gYmFzZSArIGluZGV4OwotCQlfX2luaXRfcGFnZV9jZ3JvdXAocGMsIHN0YXJ0X3BmbiArIGluZGV4KTsKKwkJaW5pdF9wYWdlX2Nncm91cChwYywgbmlkKTsKIAl9CiAJTk9ERV9EQVRBKG5pZCktPm5vZGVfcGFnZV9jZ3JvdXAgPSBiYXNlOwogCXRvdGFsX3VzYWdlICs9IHRhYmxlX3NpemU7CkBAIC0xMDUsNDYgKzExNyw3NSBAQAogCXJldHVybiBzZWN0aW9uLT5wYWdlX2Nncm91cCArIHBmbjsKIH0KIAotLyogX19hbGxvY19ib290bWVtLi4uKCkgaXMgcHJvdGVjdGVkIGJ5ICFzbGFiX2F2YWlsYWJsZSgpICovCitzdHJ1Y3QgcGFnZSAqbG9va3VwX2Nncm91cF9wYWdlKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJc3RydWN0IG1lbV9zZWN0aW9uICpzZWN0aW9uOworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGxvbmcgbnI7CisKKwluciA9IHBhZ2VfY2dyb3VwX2FycmF5X2lkKHBjKTsKKwlzZWN0aW9uID0gX19ucl90b19zZWN0aW9uKG5yKTsKKwlwYWdlID0gcGZuX3RvX3BhZ2UocGMgLSBzZWN0aW9uLT5wYWdlX2Nncm91cCk7CisJVk1fQlVHX09OKHBjICE9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKSk7CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyB2b2lkICpfX2luaXRfcmVmb2sgYWxsb2NfcGFnZV9jZ3JvdXAoc2l6ZV90IHNpemUsIGludCBuaWQpCit7CisJdm9pZCAqYWRkciA9IE5VTEw7CisKKwlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3Qoc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CisJaWYgKGFkZHIpCisJCXJldHVybiBhZGRyOworCisJaWYgKG5vZGVfc3RhdGUobmlkLCBOX0hJR0hfTUVNT1JZKSkKKwkJYWRkciA9IHZtYWxsb2Nfbm9kZShzaXplLCBuaWQpOworCWVsc2UKKwkJYWRkciA9IHZtYWxsb2Moc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworc3RhdGljIHZvaWQgZnJlZV9wYWdlX2Nncm91cCh2b2lkICphZGRyKQoreworCWlmIChpc192bWFsbG9jX2FkZHIoYWRkcikpIHsKKwkJdmZyZWUoYWRkcik7CisJfSBlbHNlIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYWRkcik7CisJCXNpemVfdCB0YWJsZV9zaXplID0KKwkJCXNpemVvZihzdHJ1Y3QgcGFnZV9jZ3JvdXApICogUEFHRVNfUEVSX1NFQ1RJT047CisKKwkJQlVHX09OKFBhZ2VSZXNlcnZlZChwYWdlKSk7CisJCWZyZWVfcGFnZXNfZXhhY3QoYWRkciwgdGFibGVfc2l6ZSk7CisJfQorfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0X3JlZm9rIGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cCh1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlzdHJ1Y3QgbWVtX3NlY3Rpb24gKnNlY3Rpb24gPSBfX3Bmbl90b19zZWN0aW9uKHBmbik7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpiYXNlLCAqcGM7CisJc3RydWN0IG1lbV9zZWN0aW9uICpzZWN0aW9uOwogCXVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG5yOwogCWludCBuaWQsIGluZGV4OwogCi0JaWYgKCFzZWN0aW9uLT5wYWdlX2Nncm91cCkgewotCQluaWQgPSBwYWdlX3RvX25pZChwZm5fdG9fcGFnZShwZm4pKTsKLQkJdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZV9jZ3JvdXApICogUEFHRVNfUEVSX1NFQ1RJT047Ci0JCVZNX0JVR19PTighc2xhYl9pc19hdmFpbGFibGUoKSk7Ci0JCWlmIChub2RlX3N0YXRlKG5pZCwgTl9ISUdIX01FTU9SWSkpIHsKLQkJCWJhc2UgPSBrbWFsbG9jX25vZGUodGFibGVfc2l6ZSwKLQkJCQlHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLCBuaWQpOwotCQkJaWYgKCFiYXNlKQotCQkJCWJhc2UgPSB2bWFsbG9jX25vZGUodGFibGVfc2l6ZSwgbmlkKTsKLQkJfSBlbHNlIHsKLQkJCWJhc2UgPSBrbWFsbG9jKHRhYmxlX3NpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwotCQkJaWYgKCFiYXNlKQotCQkJCWJhc2UgPSB2bWFsbG9jKHRhYmxlX3NpemUpOwotCQl9Ci0JCS8qCi0JCSAqIFRoZSB2YWx1ZSBzdG9yZWQgaW4gc2VjdGlvbi0+cGFnZV9jZ3JvdXAgaXMgKGJhc2UgLSBwZm4pCi0JCSAqIGFuZCBpdCBkb2VzIG5vdCBwb2ludCB0byB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBhYm92ZSwKLQkJICogY2F1c2luZyBrbWVtbGVhayBmYWxzZSBwb3NpdGl2ZXMuCi0JCSAqLwotCQlrbWVtbGVha19ub3RfbGVhayhiYXNlKTsKLQl9IGVsc2UgewotCQkvKgotIAkJICogV2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBwYWdlX2Nncm91cCBhZ2FpbiwgYnV0Ci0JCSAqIGFkZHJlc3Mgb2YgbWVtbWFwIG1heSBiZSBjaGFuZ2VkLiBTbywgd2UgaGF2ZSB0byBpbml0aWFsaXplCi0JCSAqIGFnYWluLgotCQkgKi8KLQkJYmFzZSA9IHNlY3Rpb24tPnBhZ2VfY2dyb3VwICsgcGZuOwotCQl0YWJsZV9zaXplID0gMDsKLQkJLyogY2hlY2sgYWRkcmVzcyBvZiBtZW1tYXAgaXMgY2hhbmdlZCBvciBub3QuICovCi0JCWlmIChiYXNlLT5wYWdlID09IHBmbl90b19wYWdlKHBmbikpCi0JCQlyZXR1cm4gMDsKLQl9CisJbnIgPSBwZm5fdG9fc2VjdGlvbl9ucihwZm4pOworCXNlY3Rpb24gPSBfX25yX3RvX3NlY3Rpb24obnIpOworCisJaWYgKHNlY3Rpb24tPnBhZ2VfY2dyb3VwKQorCQlyZXR1cm4gMDsKKworCW5pZCA9IHBhZ2VfdG9fbmlkKHBmbl90b19wYWdlKHBmbikpOworCXRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2VfY2dyb3VwKSAqIFBBR0VTX1BFUl9TRUNUSU9OOworCWJhc2UgPSBhbGxvY19wYWdlX2Nncm91cCh0YWJsZV9zaXplLCBuaWQpOworCisJLyoKKwkgKiBUaGUgdmFsdWUgc3RvcmVkIGluIHNlY3Rpb24tPnBhZ2VfY2dyb3VwIGlzIChiYXNlIC0gcGZuKQorCSAqIGFuZCBpdCBkb2VzIG5vdCBwb2ludCB0byB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBhYm92ZSwKKwkgKiBjYXVzaW5nIGttZW1sZWFrIGZhbHNlIHBvc2l0aXZlcy4KKwkgKi8KKwlrbWVtbGVha19ub3RfbGVhayhiYXNlKTsKIAogCWlmICghYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgInBhZ2UgY2dyb3VwIGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CkBAIC0xNTMsNyArMTk0LDcgQEAKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBBR0VTX1BFUl9TRUNUSU9OOyBpbmRleCsrKSB7CiAJCXBjID0gYmFzZSArIGluZGV4OwotCQlfX2luaXRfcGFnZV9jZ3JvdXAocGMsIHBmbiArIGluZGV4KTsKKwkJaW5pdF9wYWdlX2Nncm91cChwYywgbnIpOwogCX0KIAogCXNlY3Rpb24tPnBhZ2VfY2dyb3VwID0gYmFzZSAtIHBmbjsKQEAgLTE3MCwxNiArMjExLDggQEAKIAlpZiAoIW1zIHx8ICFtcy0+cGFnZV9jZ3JvdXApCiAJCXJldHVybjsKIAliYXNlID0gbXMtPnBhZ2VfY2dyb3VwICsgcGZuOwotCWlmIChpc192bWFsbG9jX2FkZHIoYmFzZSkpIHsKLQkJdmZyZWUoYmFzZSk7Ci0JCW1zLT5wYWdlX2Nncm91cCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYmFzZSk7Ci0JCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpKSB7IC8qIElzIGJvb3RtZW0gPyAqLwotCQkJa2ZyZWUoYmFzZSk7Ci0JCQltcy0+cGFnZV9jZ3JvdXAgPSBOVUxMOwotCQl9Ci0JfQorCWZyZWVfcGFnZV9jZ3JvdXAoYmFzZSk7CisJbXMtPnBhZ2VfY2dyb3VwID0gTlVMTDsKIH0KIAogaW50IF9fbWVtaW5pdCBvbmxpbmVfcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCkBAIC0yNDMsMTIgKzI3Niw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChyZXQpCi0JCXJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKLQllbHNlCi0JCXJldCA9IE5PVElGWV9PSzsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuYwppbmRleCA3Y2ZhNmFlLi5jMzQ1MGQ1IDEwMDY0NAotLS0gYS9tbS9wYWdld2Fsay5jCisrKyBiL21tL3BhZ2V3YWxrLmMKQEAgLTMzLDE5ICszMywzNSBAQAogCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOwogCWRvIHsKK2FnYWluOgogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCXNwbGl0X2h1Z2VfcGFnZV9wbWQod2Fsay0+bW0sIHBtZCk7Ci0JCWlmIChwbWRfbm9uZV9vcl9jbGVhcl9iYWQocG1kKSkgeworCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCWlmICh3YWxrLT5wdGVfaG9sZSkKIAkJCQllcnIgPSB3YWxrLT5wdGVfaG9sZShhZGRyLCBuZXh0LCB3YWxrKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CiAJCQljb250aW51ZTsKIAkJfQorCQkvKgorCQkgKiBUaGlzIGltcGxpZXMgdGhhdCBlYWNoIC0+cG1kX2VudHJ5KCkgaGFuZGxlcgorCQkgKiBuZWVkcyB0byBrbm93IGFib3V0IHBtZF90cmFuc19odWdlKCkgcG1kcworCQkgKi8KIAkJaWYgKHdhbGstPnBtZF9lbnRyeSkKIAkJCWVyciA9IHdhbGstPnBtZF9lbnRyeShwbWQsIGFkZHIsIG5leHQsIHdhbGspOwotCQlpZiAoIWVyciAmJiB3YWxrLT5wdGVfZW50cnkpCi0JCQllcnIgPSB3YWxrX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHdhbGspOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogQ2hlY2sgdGhpcyBoZXJlIHNvIHdlIG9ubHkgYnJlYWsgZG93biB0cmFuc19odWdlCisJCSAqIHBhZ2VzIHdoZW4gd2UgX25lZWRfIHRvCisJCSAqLworCQlpZiAoIXdhbGstPnB0ZV9lbnRyeSkKKwkJCWNvbnRpbnVlOworCisJCXNwbGl0X2h1Z2VfcGFnZV9wbWQod2Fsay0+bW0sIHBtZCk7CisJCWlmIChwbWRfbm9uZV9vcl9jbGVhcl9iYWQocG1kKSkKKwkJCWdvdG8gYWdhaW47CisJCWVyciA9IHdhbGtfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgd2Fsayk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA5NDFiZjgyLi40YThlOTlhIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC02NywxMSArNjcsMjQgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hX2FsbG9jKHZvaWQpCiB7Ci0JcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoYW5vbl92bWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOworCisJYW5vbl92bWEgPSBrbWVtX2NhY2hlX2FsbG9jKGFub25fdm1hX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKGFub25fdm1hKSB7CisJCWF0b21pY19zZXQoJmFub25fdm1hLT5yZWZjb3VudCwgMSk7CisJCS8qCisJCSAqIEluaXRpYWxpc2UgdGhlIGFub25fdm1hIHJvb3QgdG8gcG9pbnQgdG8gaXRzZWxmLiBJZiBjYWxsZWQKKwkJICogZnJvbSBmb3JrLCB0aGUgcm9vdCB3aWxsIGJlIHJlc2V0IHRvIHRoZSBwYXJlbnRzIGFub25fdm1hLgorCQkgKi8KKwkJYW5vbl92bWEtPnJvb3QgPSBhbm9uX3ZtYTsKKwl9CisKKwlyZXR1cm4gYW5vbl92bWE7CiB9CiAKLXZvaWQgYW5vbl92bWFfZnJlZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQorc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2ZyZWUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKIHsKKwlWTV9CVUdfT04oYXRvbWljX3JlYWQoJmFub25fdm1hLT5yZWZjb3VudCkpOwogCWttZW1fY2FjaGVfZnJlZShhbm9uX3ZtYV9jYWNoZXAsIGFub25fdm1hKTsKIH0KIApAQCAtMTMzLDExICsxNDYsNiBAQAogCQkJaWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpCiAJCQkJZ290byBvdXRfZW5vbWVtX2ZyZWVfYXZjOwogCQkJYWxsb2NhdGVkID0gYW5vbl92bWE7Ci0JCQkvKgotCQkJICogVGhpcyBWTUEgaGFkIG5vIGFub25fdm1hIHlldC4gIFRoaXMgYW5vbl92bWEgaXMKLQkJCSAqIHRoZSByb290IG9mIGFueSBhbm9uX3ZtYSB0cmVlIHRoYXQgbWlnaHQgZm9ybS4KLQkJCSAqLwotCQkJYW5vbl92bWEtPnJvb3QgPSBhbm9uX3ZtYTsKIAkJfQogCiAJCWFub25fdm1hX2xvY2soYW5vbl92bWEpOwpAQCAtMTU2LDcgKzE2NCw3IEBACiAJCWFub25fdm1hX3VubG9jayhhbm9uX3ZtYSk7CiAKIAkJaWYgKHVubGlrZWx5KGFsbG9jYXRlZCkpCi0JCQlhbm9uX3ZtYV9mcmVlKGFsbG9jYXRlZCk7CisJCQlwdXRfYW5vbl92bWEoYWxsb2NhdGVkKTsKIAkJaWYgKHVubGlrZWx5KGF2YykpCiAJCQlhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7CiAJfQpAQCAtMjQxLDkgKzI0OSw5IEBACiAJICovCiAJYW5vbl92bWEtPnJvb3QgPSBwdm1hLT5hbm9uX3ZtYS0+cm9vdDsKIAkvKgotCSAqIFdpdGggS1NNIHJlZmNvdW50cywgYW4gYW5vbl92bWEgY2FuIHN0YXkgYXJvdW5kIGxvbmdlciB0aGFuIHRoZQotCSAqIHByb2Nlc3MgaXQgYmVsb25ncyB0by4gIFRoZSByb290IGFub25fdm1hIG5lZWRzIHRvIGJlIHBpbm5lZAotCSAqIHVudGlsIHRoaXMgYW5vbl92bWEgaXMgZnJlZWQsIGJlY2F1c2UgdGhlIGxvY2sgbGl2ZXMgaW4gdGhlIHJvb3QuCisJICogV2l0aCByZWZjb3VudHMsIGFuIGFub25fdm1hIGNhbiBzdGF5IGFyb3VuZCBsb25nZXIgdGhhbiB0aGUKKwkgKiBwcm9jZXNzIGl0IGJlbG9uZ3MgdG8uIFRoZSByb290IGFub25fdm1hIG5lZWRzIHRvIGJlIHBpbm5lZCB1bnRpbAorCSAqIHRoaXMgYW5vbl92bWEgaXMgZnJlZWQsIGJlY2F1c2UgdGhlIGxvY2sgbGl2ZXMgaW4gdGhlIHJvb3QuCiAJICovCiAJZ2V0X2Fub25fdm1hKGFub25fdm1hLT5yb290KTsKIAkvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovCkBAIC0yNTMsNyArMjYxLDcgQEAKIAlyZXR1cm4gMDsKIAogIG91dF9lcnJvcl9mcmVlX2Fub25fdm1hOgotCWFub25fdm1hX2ZyZWUoYW5vbl92bWEpOworCXB1dF9hbm9uX3ZtYShhbm9uX3ZtYSk7CiAgb3V0X2Vycm9yOgogCXVubGlua19hbm9uX3ZtYXModm1hKTsKIAlyZXR1cm4gLUVOT01FTTsKQEAgLTI3MiwxNSArMjgwLDExIEBACiAJbGlzdF9kZWwoJmFub25fdm1hX2NoYWluLT5zYW1lX2Fub25fdm1hKTsKIAogCS8qIFdlIG11c3QgZ2FyYmFnZSBjb2xsZWN0IHRoZSBhbm9uX3ZtYSBpZiBpdCdzIGVtcHR5ICovCi0JZW1wdHkgPSBsaXN0X2VtcHR5KCZhbm9uX3ZtYS0+aGVhZCkgJiYgIWFub252bWFfZXh0ZXJuYWxfcmVmY291bnQoYW5vbl92bWEpOworCWVtcHR5ID0gbGlzdF9lbXB0eSgmYW5vbl92bWEtPmhlYWQpOwogCWFub25fdm1hX3VubG9jayhhbm9uX3ZtYSk7CiAKLQlpZiAoZW1wdHkpIHsKLQkJLyogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIHJvb3QgYW5vbl92bWEgKi8KLQkJaWYgKGFub25fdm1hLT5yb290ICE9IGFub25fdm1hKQotCQkJZHJvcF9hbm9uX3ZtYShhbm9uX3ZtYS0+cm9vdCk7Ci0JCWFub25fdm1hX2ZyZWUoYW5vbl92bWEpOwotCX0KKwlpZiAoZW1wdHkpCisJCXB1dF9hbm9uX3ZtYShhbm9uX3ZtYSk7CiB9CiAKIHZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTMwMyw3ICszMDcsNyBAQAogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBkYXRhOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFub25fdm1hLT5sb2NrKTsKLQlhbm9udm1hX2V4dGVybmFsX3JlZmNvdW50X2luaXQoYW5vbl92bWEpOworCWF0b21pY19zZXQoJmFub25fdm1hLT5yZWZjb3VudCwgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFub25fdm1hLT5oZWFkKTsKIH0KIApAQCAtMTQ4Niw0MSArMTQ5MCwxNSBAQAogCQlyZXR1cm4gdHJ5X3RvX3VubWFwX2ZpbGUocGFnZSwgVFRVX01VTkxPQ0spOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfS1NNKSB8fCBkZWZpbmVkKENPTkZJR19NSUdSQVRJT04pCi0vKgotICogRHJvcCBhbiBhbm9uX3ZtYSByZWZjb3VudCwgZnJlZWluZyB0aGUgYW5vbl92bWEgYW5kIGFub25fdm1hLT5yb290Ci0gKiBpZiBuZWNlc3NhcnkuICBCZSBjYXJlZnVsIHRvIGRvIGFsbCB0aGUgdGVzdHMgdW5kZXIgdGhlIGxvY2suICBPbmNlCi0gKiB3ZSBrbm93IHdlIGFyZSB0aGUgbGFzdCB1c2VyLCBub2JvZHkgZWxzZSBjYW4gZ2V0IGEgcmVmZXJlbmNlIGFuZCB3ZQotICogY2FuIGRvIHRoZSBmcmVlaW5nIHdpdGhvdXQgdGhlIGxvY2suCi0gKi8KLXZvaWQgZHJvcF9hbm9uX3ZtYShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQordm9pZCBfX3B1dF9hbm9uX3ZtYShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQogewotCUJVR19PTihhdG9taWNfcmVhZCgmYW5vbl92bWEtPmV4dGVybmFsX3JlZmNvdW50KSA8PSAwKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmYW5vbl92bWEtPmV4dGVybmFsX3JlZmNvdW50LCAmYW5vbl92bWEtPnJvb3QtPmxvY2spKSB7Ci0JCXN0cnVjdCBhbm9uX3ZtYSAqcm9vdCA9IGFub25fdm1hLT5yb290OwotCQlpbnQgZW1wdHkgPSBsaXN0X2VtcHR5KCZhbm9uX3ZtYS0+aGVhZCk7Ci0JCWludCBsYXN0X3Jvb3RfdXNlciA9IDA7Ci0JCWludCByb290X2VtcHR5ID0gMDsKKwlzdHJ1Y3QgYW5vbl92bWEgKnJvb3QgPSBhbm9uX3ZtYS0+cm9vdDsKIAotCQkvKgotCQkgKiBUaGUgcmVmY291bnQgb24gYSBub24tcm9vdCBhbm9uX3ZtYSBnb3QgZHJvcHBlZC4gIERyb3AKLQkJICogdGhlIHJlZmNvdW50IG9uIHRoZSByb290IGFuZCBjaGVjayBpZiB3ZSBuZWVkIHRvIGZyZWUgaXQuCi0JCSAqLwotCQlpZiAoZW1wdHkgJiYgYW5vbl92bWEgIT0gcm9vdCkgewotCQkJQlVHX09OKGF0b21pY19yZWFkKCZyb290LT5leHRlcm5hbF9yZWZjb3VudCkgPD0gMCk7Ci0JCQlsYXN0X3Jvb3RfdXNlciA9IGF0b21pY19kZWNfYW5kX3Rlc3QoJnJvb3QtPmV4dGVybmFsX3JlZmNvdW50KTsKLQkJCXJvb3RfZW1wdHkgPSBsaXN0X2VtcHR5KCZyb290LT5oZWFkKTsKLQkJfQotCQlhbm9uX3ZtYV91bmxvY2soYW5vbl92bWEpOworCWlmIChyb290ICE9IGFub25fdm1hICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJnJvb3QtPnJlZmNvdW50KSkKKwkJYW5vbl92bWFfZnJlZShyb290KTsKIAotCQlpZiAoZW1wdHkpIHsKLQkJCWFub25fdm1hX2ZyZWUoYW5vbl92bWEpOwotCQkJaWYgKHJvb3RfZW1wdHkgJiYgbGFzdF9yb290X3VzZXIpCi0JCQkJYW5vbl92bWFfZnJlZShyb290KTsKLQkJfQotCX0KKwlhbm9uX3ZtYV9mcmVlKGFub25fdm1hKTsKIH0KLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgogLyoKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDQxZjgyYmIuLjkxY2U5YTEgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtNzc5LDcgKzc3OSw3IEBACiAJCQkgKiBJZiB0cnVuY2F0aW5nIGRvd24gdG8gYSBwYXJ0aWFsIHBhZ2UsIHRoZW4KIAkJCSAqIGlmIHRoYXQgcGFnZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCwgaG9sZCBpdAogCQkJICogaW4gbWVtb3J5IHVudGlsIHRoZSB0cnVuY2F0aW9uIGlzIG92ZXIsIHNvCi0JCQkgKiB0cnVuY2F0ZV9wYXJ0aWFsX3BhZ2UgY2Fubm5vdCBtaXNzIGl0IHdlcmUKKwkJCSAqIHRydW5jYXRlX3BhcnRpYWxfcGFnZSBjYW5ub3QgbWlzcyBpdCB3ZXJlCiAJCQkgKiBpdCBhc3NpZ25lZCB0byBzd2FwLgogCQkJICovCiAJCQlpZiAobmV3c2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUtMSkpIHsKQEAgLTEwODEsNyArMTA4MSw3IEBACiAJc2htZW1fcmVjYWxjX2lub2RlKGlub2RlKTsKIAogCWlmIChzd2FwLnZhbCAmJiBhZGRfdG9fc3dhcF9jYWNoZShwYWdlLCBzd2FwLCBHRlBfQVRPTUlDKSA9PSAwKSB7Ci0JCXJlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CisJCWRlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CiAJCXNobWVtX3N3cF9zZXQoaW5mbywgZW50cnksIHN3YXAudmFsKTsKIAkJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKIAkJaWYgKGxpc3RfZW1wdHkoJmluZm8tPnN3YXBsaXN0KSkKQEAgLTEwOTEsNyArMTA5MSw2IEBACiAJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAkJc3dhcF9zaG1lbV9hbGxvYyhzd2FwKTsKIAkJQlVHX09OKHBhZ2VfbWFwcGVkKHBhZ2UpKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwkvKiBwYWdlY2FjaGUgcmVmICovCiAJCXN3YXBfd3JpdGVwYWdlKHBhZ2UsIHdiYyk7CiAJCWlmIChpbm9kZSkgewogCQkJbXV0ZXhfbG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwpAQCAtMjc5NCw1ICsyNzkzLDYgQEAKIAkJZnB1dCh2bWEtPnZtX2ZpbGUpOwogCXZtYS0+dm1fZmlsZSA9IGZpbGU7CiAJdm1hLT52bV9vcHMgPSAmc2htZW1fdm1fb3BzOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fQ0FOX05PTkxJTkVBUjsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCAzNzk2MWQxLi41Njg4MDNmIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0xOTEsMjIgKzE5MSw2IEBACiAjZGVmaW5lCVNMQUJfTElNSVQJKCgoa21lbV9idWZjdGxfdCkofjBVKSktMykKIAogLyoKLSAqIHN0cnVjdCBzbGFiCi0gKgotICogTWFuYWdlcyB0aGUgb2JqcyBpbiBhIHNsYWIuIFBsYWNlZCBlaXRoZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBtZW0gYWxsb2NhdGVkCi0gKiBmb3IgYSBzbGFiLCBvciBhbGxvY2F0ZWQgZnJvbSBhbiBnZW5lcmFsIGNhY2hlLgotICogU2xhYnMgYXJlIGNoYWluZWQgaW50byB0aHJlZSBsaXN0OiBmdWxseSB1c2VkLCBwYXJ0aWFsLCBmdWxseSBmcmVlIHNsYWJzLgotICovCi1zdHJ1Y3Qgc2xhYiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXVuc2lnbmVkIGxvbmcgY29sb3Vyb2ZmOwotCXZvaWQgKnNfbWVtOwkJLyogaW5jbHVkaW5nIGNvbG91ciBvZmZzZXQgKi8KLQl1bnNpZ25lZCBpbnQgaW51c2U7CS8qIG51bSBvZiBvYmpzIGFjdGl2ZSBpbiBzbGFiICovCi0Ja21lbV9idWZjdGxfdCBmcmVlOwotCXVuc2lnbmVkIHNob3J0IG5vZGVpZDsKLX07Ci0KLS8qCiAgKiBzdHJ1Y3Qgc2xhYl9yY3UKICAqCiAgKiBzbGFiX2Rlc3Ryb3kgb24gYSBTTEFCX0RFU1RST1lfQllfUkNVIGNhY2hlIHVzZXMgdGhpcyBzdHJ1Y3R1cmUgdG8KQEAgLTIxOSw4ICsyMDMsNiBAQAogICoKICAqIHJjdV9yZWFkX2xvY2sgYmVmb3JlIHJlYWRpbmcgdGhlIGFkZHJlc3MsIHRoZW4gcmN1X3JlYWRfdW5sb2NrIGFmdGVyCiAgKiB0YWtpbmcgdGhlIHNwaW5sb2NrIHdpdGhpbiB0aGUgc3RydWN0dXJlIGV4cGVjdGVkIGF0IHRoYXQgYWRkcmVzcy4KLSAqCi0gKiBXZSBhc3N1bWUgc3RydWN0IHNsYWJfcmN1IGNhbiBvdmVybGF5IHN0cnVjdCBzbGFiIHdoZW4gZGVzdHJveWluZy4KICAqLwogc3RydWN0IHNsYWJfcmN1IHsKIAlzdHJ1Y3QgcmN1X2hlYWQgaGVhZDsKQEAgLTIyOSw2ICsyMTEsMjcgQEAKIH07CiAKIC8qCisgKiBzdHJ1Y3Qgc2xhYgorICoKKyAqIE1hbmFnZXMgdGhlIG9ianMgaW4gYSBzbGFiLiBQbGFjZWQgZWl0aGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgbWVtIGFsbG9jYXRlZAorICogZm9yIGEgc2xhYiwgb3IgYWxsb2NhdGVkIGZyb20gYW4gZ2VuZXJhbCBjYWNoZS4KKyAqIFNsYWJzIGFyZSBjaGFpbmVkIGludG8gdGhyZWUgbGlzdDogZnVsbHkgdXNlZCwgcGFydGlhbCwgZnVsbHkgZnJlZSBzbGFicy4KKyAqLworc3RydWN0IHNsYWIgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkJCXVuc2lnbmVkIGxvbmcgY29sb3Vyb2ZmOworCQkJdm9pZCAqc19tZW07CQkvKiBpbmNsdWRpbmcgY29sb3VyIG9mZnNldCAqLworCQkJdW5zaWduZWQgaW50IGludXNlOwkvKiBudW0gb2Ygb2JqcyBhY3RpdmUgaW4gc2xhYiAqLworCQkJa21lbV9idWZjdGxfdCBmcmVlOworCQkJdW5zaWduZWQgc2hvcnQgbm9kZWlkOworCQl9OworCQlzdHJ1Y3Qgc2xhYl9yY3UgX19zbGFiX2NvdmVyX3NsYWJfcmN1OworCX07Cit9OworCisvKgogICogc3RydWN0IGFycmF5X2NhY2hlCiAgKgogICogUHVycG9zZToKQEAgLTEzODcsNyArMTM5MCw3IEBACiAJCWJyZWFrOwogCX0KIG91dDoKLQlyZXR1cm4gcmV0ID8gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpIDogTk9USUZZX09LOworCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHJldCk7CiB9CiAjZW5kaWYgLyogQ09ORklHX05VTUEgJiYgQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKQEAgLTIxNDcsOCArMjE1MCw2IEBACiAgKgogICogQG5hbWUgbXVzdCBiZSB2YWxpZCB1bnRpbCB0aGUgY2FjaGUgaXMgZGVzdHJveWVkLiBUaGlzIGltcGxpZXMgdGhhdAogICogdGhlIG1vZHVsZSBjYWxsaW5nIHRoaXMgaGFzIHRvIGRlc3Ryb3kgdGhlIGNhY2hlIGJlZm9yZSBnZXR0aW5nIHVubG9hZGVkLgotICogTm90ZSB0aGF0IGttZW1fY2FjaGVfbmFtZSgpIGlzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUgc2FtZSBwb2ludGVyLAotICogdGhlcmVmb3JlIGFwcGxpY2F0aW9ucyBtdXN0IG1hbmFnZSBpdCB0aGVtc2VsdmVzLgogICoKICAqIFRoZSBmbGFncyBhcmUKICAqCkBAIC0yMjg4LDggKzIyODksOCBAQAogCWlmIChyYWxpZ24gPCBhbGlnbikgewogCQlyYWxpZ24gPSBhbGlnbjsKIAl9Ci0JLyogZGlzYWJsZSBkZWJ1ZyBpZiBub3QgYWxpZ25pbmcgd2l0aCBSRURaT05FX0FMSUdOICovCi0JaWYgKHJhbGlnbiAmIChfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpIC0gMSkpCisJLyogZGlzYWJsZSBkZWJ1ZyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocmFsaWduID4gX19hbGlnbm9mX18odW5zaWduZWQgbG9uZyBsb25nKSkKIAkJZmxhZ3MgJj0gfihTTEFCX1JFRF9aT05FIHwgU0xBQl9TVE9SRV9VU0VSKTsKIAkvKgogCSAqIDQpIFN0b3JlIGl0LgpAQCAtMjMxNSw4ICsyMzE2LDggQEAKIAkgKi8KIAlpZiAoZmxhZ3MgJiBTTEFCX1JFRF9aT05FKSB7CiAJCS8qIGFkZCBzcGFjZSBmb3IgcmVkIHpvbmUgd29yZHMgKi8KLQkJY2FjaGVwLT5vYmpfb2Zmc2V0ICs9IGFsaWduOwotCQlzaXplICs9IGFsaWduICsgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisJCWNhY2hlcC0+b2JqX29mZnNldCArPSBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKTsKKwkJc2l6ZSArPSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZyk7CiAJfQogCWlmIChmbGFncyAmIFNMQUJfU1RPUkVfVVNFUikgewogCQkvKiB1c2VyIHN0b3JlIHJlcXVpcmVzIG9uZSB3b3JkIHN0b3JhZ2UgYmVoaW5kIHRoZSBlbmQgb2YKQEAgLTM4NDAsMTIgKzM4NDEsNiBAQAogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX3NpemUpOwogCi1jb25zdCBjaGFyICprbWVtX2NhY2hlX25hbWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCkKLXsKLQlyZXR1cm4gY2FjaGVwLT5uYW1lOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoa21lbV9jYWNoZV9uYW1lKTsKLQogLyoKICAqIFRoaXMgaW5pdGlhbGl6ZXMga21lbV9saXN0MyBvciByZXNpemVzIHZhcmlvdXMgY2FjaGVzIGZvciBhbGwgbm9kZXMuCiAgKi8KZGlmZiAtLWdpdCBhL21tL3Nsb2IuYyBiL21tL3Nsb2IuYwppbmRleCAzNTg4ZWFhLi40NmUwYWVlIDEwMDY0NAotLS0gYS9tbS9zbG9iLmMKKysrIGIvbW0vc2xvYi5jCkBAIC02NjYsMTIgKzY2Niw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfc2l6ZSk7CiAKLWNvbnN0IGNoYXIgKmttZW1fY2FjaGVfbmFtZShzdHJ1Y3Qga21lbV9jYWNoZSAqYykKLXsKLQlyZXR1cm4gYy0+bmFtZTsKLX0KLUVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9uYW1lKTsKLQogaW50IGttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpkKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGUxNWFhN2YuLjkzZGUzMGQgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIHN0YXQoc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpKQorc3RhdGljIGlubGluZSB2b2lkIHN0YXQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpKQogewogI2lmZGVmIENPTkZJR19TTFVCX1NUQVRTCiAJX190aGlzX2NwdV9pbmMocy0+Y3B1X3NsYWItPnN0YXRbc2ldKTsKQEAgLTI4MSwxMSArMjgxLDQwIEBACiAJcmV0dXJuIChwIC0gYWRkcikgLyBzLT5zaXplOwogfQogCitzdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzKQoreworI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCisJLyoKKwkgKiBEZWJ1Z2dpbmcgcmVxdWlyZXMgdXNlIG9mIHRoZSBwYWRkaW5nIGJldHdlZW4gb2JqZWN0CisJICogYW5kIHdoYXRldmVyIG1heSBjb21lIGFmdGVyIGl0LgorCSAqLworCWlmIChzLT5mbGFncyAmIChTTEFCX1JFRF9aT05FIHwgU0xBQl9QT0lTT04pKQorCQlyZXR1cm4gcy0+b2Jqc2l6ZTsKKworI2VuZGlmCisJLyoKKwkgKiBJZiB3ZSBoYXZlIHRoZSBuZWVkIHRvIHN0b3JlIHRoZSBmcmVlbGlzdCBwb2ludGVyCisJICogYmFjayB0aGVyZSBvciB0cmFjayB1c2VyIGluZm9ybWF0aW9uIHRoZW4gd2UgY2FuCisJICogb25seSB1c2UgdGhlIHNwYWNlIGJlZm9yZSB0aGF0IGluZm9ybWF0aW9uLgorCSAqLworCWlmIChzLT5mbGFncyAmIChTTEFCX0RFU1RST1lfQllfUkNVIHwgU0xBQl9TVE9SRV9VU0VSKSkKKwkJcmV0dXJuIHMtPmludXNlOworCS8qCisJICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uCisJICovCisJcmV0dXJuIHMtPnNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9yZGVyX29iamVjdHMoaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCByZXNlcnZlZCkKK3sKKwlyZXR1cm4gKChQQUdFX1NJWkUgPDwgb3JkZXIpIC0gcmVzZXJ2ZWQpIC8gc2l6ZTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qga21lbV9jYWNoZV9vcmRlcl9vYmplY3RzIG9vX21ha2UoaW50IG9yZGVyLAotCQkJCQkJdW5zaWduZWQgbG9uZyBzaXplKQorCQl1bnNpZ25lZCBsb25nIHNpemUsIGludCByZXNlcnZlZCkKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZV9vcmRlcl9vYmplY3RzIHggPSB7Ci0JCShvcmRlciA8PCBPT19TSElGVCkgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKSAvIHNpemUKKwkJKG9yZGVyIDw8IE9PX1NISUZUKSArIG9yZGVyX29iamVjdHMob3JkZXIsIHNpemUsIHJlc2VydmVkKQogCX07CiAKIAlyZXR1cm4geDsKQEAgLTYxNyw3ICs2NDYsNyBAQAogCQlyZXR1cm4gMTsKIAogCXN0YXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwotCWxlbmd0aCA9IChQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSkpOworCWxlbmd0aCA9IChQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSkpIC0gcy0+cmVzZXJ2ZWQ7CiAJZW5kID0gc3RhcnQgKyBsZW5ndGg7CiAJcmVtYWluZGVyID0gbGVuZ3RoICUgcy0+c2l6ZTsKIAlpZiAoIXJlbWFpbmRlcikKQEAgLTY5OCw3ICs3MjcsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQltYXhvYmogPSAoUEFHRV9TSVpFIDw8IGNvbXBvdW5kX29yZGVyKHBhZ2UpKSAvIHMtPnNpemU7CisJbWF4b2JqID0gb3JkZXJfb2JqZWN0cyhjb21wb3VuZF9vcmRlcihwYWdlKSwgcy0+c2l6ZSwgcy0+cmVzZXJ2ZWQpOwogCWlmIChwYWdlLT5vYmplY3RzID4gbWF4b2JqKSB7CiAJCXNsYWJfZXJyKHMsIHBhZ2UsICJvYmplY3RzICV1ID4gbWF4ICV1IiwKIAkJCXMtPm5hbWUsIHBhZ2UtPm9iamVjdHMsIG1heG9iaik7CkBAIC03NDgsNyArNzc3LDcgQEAKIAkJbnIrKzsKIAl9CiAKLQltYXhfb2JqZWN0cyA9IChQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSkpIC8gcy0+c2l6ZTsKKwltYXhfb2JqZWN0cyA9IG9yZGVyX29iamVjdHMoY29tcG91bmRfb3JkZXIocGFnZSksIHMtPnNpemUsIHMtPnJlc2VydmVkKTsKIAlpZiAobWF4X29iamVjdHMgPiBNQVhfT0JKU19QRVJfUEFHRSkKIAkJbWF4X29iamVjdHMgPSBNQVhfT0JKU19QRVJfUEFHRTsKIApAQCAtODAwLDIxICs4MjksMzEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHZvaWQgKm9iamVjdCkKIHsKIAlmbGFncyAmPSBnZnBfYWxsb3dlZF9tYXNrOwotCWttZW1jaGVja19zbGFiX2FsbG9jKHMsIGZsYWdzLCBvYmplY3QsIHMtPm9ianNpemUpOworCWttZW1jaGVja19zbGFiX2FsbG9jKHMsIGZsYWdzLCBvYmplY3QsIHNsYWJfa3NpemUocykpOwogCWttZW1sZWFrX2FsbG9jX3JlY3Vyc2l2ZShvYmplY3QsIHMtPm9ianNpemUsIDEsIHMtPmZsYWdzLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCkKIHsKIAlrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZSh4LCBzLT5mbGFncyk7Ci19CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX2ZyZWVfaG9va19pcnEoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCkKLXsKLQlrbWVtY2hlY2tfc2xhYl9mcmVlKHMsIG9iamVjdCwgcy0+b2Jqc2l6ZSk7Ci0JZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQob2JqZWN0LCBzLT5vYmpzaXplKTsKLQlpZiAoIShzLT5mbGFncyAmIFNMQUJfREVCVUdfT0JKRUNUUykpCi0JCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChvYmplY3QsIHMtPm9ianNpemUpOworCS8qCisJICogVHJvdWJsZSBpcyB0aGF0IHdlIG1heSBubyBsb25nZXIgZGlzYWJsZSBpbnRlcnVwdHMgaW4gdGhlIGZhc3QgcGF0aAorCSAqIFNvIGluIG9yZGVyIHRvIG1ha2UgdGhlIGRlYnVnIGNhbGxzIHRoYXQgZXhwZWN0IGlycXMgdG8gYmUKKwkgKiBkaXNhYmxlZCB3ZSBuZWVkIHRvIGRpc2FibGUgaW50ZXJydXB0cyB0ZW1wb3JhcmlseS4KKwkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19LTUVNQ0hFQ0spIHx8IGRlZmluZWQoQ09ORklHX0xPQ0tERVApCisJeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJa21lbWNoZWNrX3NsYWJfZnJlZShzLCB4LCBzLT5vYmpzaXplKTsKKwkJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoeCwgcy0+b2Jqc2l6ZSk7CisJCWlmICghKHMtPmZsYWdzICYgU0xBQl9ERUJVR19PQkpFQ1RTKSkKKwkJCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZCh4LCBzLT5vYmpzaXplKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKyNlbmRpZgogfQogCiAvKgpAQCAtMTEwMSw5ICsxMTQwLDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4KSB7fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9mcmVlX2hvb2tfaXJxKHN0cnVjdCBrbWVtX2NhY2hlICpzLAotCQl2b2lkICpvYmplY3QpIHt9Ci0KICNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqLwogCiAvKgpAQCAtMTI0OSwyMSArMTI4NSwzOCBAQAogCV9fZnJlZV9wYWdlcyhwYWdlLCBvcmRlcik7CiB9CiAKKyNkZWZpbmUgbmVlZF9yZXNlcnZlX3NsYWJfcmN1CQkJCQkJXAorCShzaXplb2YoKChzdHJ1Y3QgcGFnZSAqKU5VTEwpLT5scnUpIDwgc2l6ZW9mKHN0cnVjdCByY3VfaGVhZCkpCisKIHN0YXRpYyB2b2lkIHJjdV9mcmVlX3NsYWIoc3RydWN0IHJjdV9oZWFkICpoKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JcGFnZSA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKWgsIHN0cnVjdCBwYWdlLCBscnUpOworCWlmIChuZWVkX3Jlc2VydmVfc2xhYl9yY3UpCisJCXBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZShoKTsKKwllbHNlCisJCXBhZ2UgPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKiloLCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKKwogCV9fZnJlZV9zbGFiKHBhZ2UtPnNsYWIsIHBhZ2UpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmICh1bmxpa2VseShzLT5mbGFncyAmIFNMQUJfREVTVFJPWV9CWV9SQ1UpKSB7Ci0JCS8qCi0JCSAqIFJDVSBmcmVlIG92ZXJsb2FkcyB0aGUgUkNVIGhlYWQgb3ZlciB0aGUgTFJVCi0JCSAqLwotCQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAodm9pZCAqKSZwYWdlLT5scnU7CisJCXN0cnVjdCByY3VfaGVhZCAqaGVhZDsKKworCQlpZiAobmVlZF9yZXNlcnZlX3NsYWJfcmN1KSB7CisJCQlpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTsKKwkJCWludCBvZmZzZXQgPSAoUEFHRV9TSVpFIDw8IG9yZGVyKSAtIHMtPnJlc2VydmVkOworCisJCQlWTV9CVUdfT04ocy0+cmVzZXJ2ZWQgIT0gc2l6ZW9mKCpoZWFkKSk7CisJCQloZWFkID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0OworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFJDVSBmcmVlIG92ZXJsb2FkcyB0aGUgUkNVIGhlYWQgb3ZlciB0aGUgTFJVCisJCQkgKi8KKwkJCWhlYWQgPSAodm9pZCAqKSZwYWdlLT5scnU7CisJCX0KIAogCQljYWxsX3JjdShoZWFkLCByY3VfZnJlZV9zbGFiKTsKIAl9IGVsc2UKQEAgLTE0ODcsNiArMTU0MCw3OCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKy8qCisgKiBDYWxjdWxhdGUgdGhlIG5leHQgZ2xvYmFsbHkgdW5pcXVlIHRyYW5zYWN0aW9uIGZvciBkaXNhbWJpZ3VpYXRpb24KKyAqIGR1cmluZyBjbXB4Y2hnLiBUaGUgdHJhbnNhY3Rpb25zIHN0YXJ0IHdpdGggdGhlIGNwdSBudW1iZXIgYW5kIGFyZSB0aGVuCisgKiBpbmNyZW1lbnRlZCBieSBDT05GSUdfTlJfQ1BVUy4KKyAqLworI2RlZmluZSBUSURfU1RFUCAgcm91bmR1cF9wb3dfb2ZfdHdvKENPTkZJR19OUl9DUFVTKQorI2Vsc2UKKy8qCisgKiBObyBwcmVlbXB0aW9uIHN1cHBvcnRlZCB0aGVyZWZvcmUgYWxzbyBubyBuZWVkIHRvIGNoZWNrIGZvcgorICogZGlmZmVyZW50IGNwdXMuCisgKi8KKyNkZWZpbmUgVElEX1NURVAgMQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuZXh0X3RpZCh1bnNpZ25lZCBsb25nIHRpZCkKK3sKKwlyZXR1cm4gdGlkICsgVElEX1NURVA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRpZF90b19jcHUodW5zaWduZWQgbG9uZyB0aWQpCit7CisJcmV0dXJuIHRpZCAlIFRJRF9TVEVQOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGlkX3RvX2V2ZW50KHVuc2lnbmVkIGxvbmcgdGlkKQoreworCXJldHVybiB0aWQgLyBUSURfU1RFUDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW5pdF90aWQoaW50IGNwdSkKK3sKKwlyZXR1cm4gY3B1OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbm90ZV9jbXB4Y2hnX2ZhaWx1cmUoY29uc3QgY2hhciAqbiwKKwkJY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIHVuc2lnbmVkIGxvbmcgdGlkKQoreworI2lmZGVmIFNMVUJfREVCVUdfQ01QWENIRworCXVuc2lnbmVkIGxvbmcgYWN0dWFsX3RpZCA9IF9fdGhpc19jcHVfcmVhZChzLT5jcHVfc2xhYi0+dGlkKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzICVzOiBjbXB4Y2hnIHJlZG8gIiwgbiwgcy0+bmFtZSk7CisKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCWlmICh0aWRfdG9fY3B1KHRpZCkgIT0gdGlkX3RvX2NwdShhY3R1YWxfdGlkKSkKKwkJcHJpbnRrKCJkdWUgdG8gY3B1IGNoYW5nZSAlZCAtPiAlZFxuIiwKKwkJCXRpZF90b19jcHUodGlkKSwgdGlkX3RvX2NwdShhY3R1YWxfdGlkKSk7CisJZWxzZQorI2VuZGlmCisJaWYgKHRpZF90b19ldmVudCh0aWQpICE9IHRpZF90b19ldmVudChhY3R1YWxfdGlkKSkKKwkJcHJpbnRrKCJkdWUgdG8gY3B1IHJ1bm5pbmcgb3RoZXIgY29kZS4gRXZlbnQgJWxkLT4lbGRcbiIsCisJCQl0aWRfdG9fZXZlbnQodGlkKSwgdGlkX3RvX2V2ZW50KGFjdHVhbF90aWQpKTsKKwllbHNlCisJCXByaW50aygiZm9yIHVua25vd24gcmVhc29uOiBhY3R1YWw9JWx4IHdhcz0lbHggdGFyZ2V0PSVseFxuIiwKKwkJCWFjdHVhbF90aWQsIHRpZCwgbmV4dF90aWQodGlkKSk7CisjZW5kaWYKKwlzdGF0KHMsIENNUFhDSEdfRE9VQkxFX0NQVV9GQUlMKTsKK30KKworI2VuZGlmCisKK3ZvaWQgaW5pdF9rbWVtX2NhY2hlX2NwdXMoc3RydWN0IGttZW1fY2FjaGUgKnMpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQ01QWENIR19MT0NBTCkgJiYgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJcGVyX2NwdV9wdHIocy0+Y3B1X3NsYWIsIGNwdSktPnRpZCA9IGluaXRfdGlkKGNwdSk7CisjZW5kaWYKKworfQogLyoKICAqIFJlbW92ZSB0aGUgY3B1IHNsYWIKICAqLwpAQCAtMTUxOCw2ICsxNjQzLDkgQEAKIAkJcGFnZS0+aW51c2UtLTsKIAl9CiAJYy0+cGFnZSA9IE5VTEw7CisjaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKKwljLT50aWQgPSBuZXh0X3RpZChjLT50aWQpOworI2VuZGlmCiAJdW5mcmVlemVfc2xhYihzLCBwYWdlLCB0YWlsKTsKIH0KIApAQCAtMTY1Miw2ICsxNzgwLDE5IEBACiB7CiAJdm9pZCAqKm9iamVjdDsKIAlzdHJ1Y3QgcGFnZSAqbmV3OworI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCS8qCisJICogV2UgbWF5IGhhdmUgYmVlbiBwcmVlbXB0ZWQgYW5kIHJlc2NoZWR1bGVkIG9uIGEgZGlmZmVyZW50CisJICogY3B1IGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cy4gTmVlZCB0byByZWxvYWQgY3B1IGFyZWEKKwkgKiBwb2ludGVyLgorCSAqLworCWMgPSB0aGlzX2NwdV9wdHIocy0+Y3B1X3NsYWIpOworI2VuZGlmCisjZW5kaWYKIAogCS8qIFdlIGhhbmRsZSBfX0dGUF9aRVJPIGluIHRoZSBjYWxsZXIgKi8KIAlnZnBmbGFncyAmPSB+X19HRlBfWkVSTzsKQEAgLTE2NzgsNiArMTgxOSwxMCBAQAogCWMtPm5vZGUgPSBwYWdlX3RvX25pZChjLT5wYWdlKTsKIHVubG9ja19vdXQ6CiAJc2xhYl91bmxvY2soYy0+cGFnZSk7CisjaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKKwljLT50aWQgPSBuZXh0X3RpZChjLT50aWQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKyNlbmRpZgogCXN0YXQocywgQUxMT0NfU0xPV1BBVEgpOwogCXJldHVybiBvYmplY3Q7CiAKQEAgLTE3MTMsNiArMTg1OCw5IEBACiAJfQogCWlmICghKGdmcGZsYWdzICYgX19HRlBfTk9XQVJOKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCiAJCXNsYWJfb3V0X29mX21lbW9yeShzLCBnZnBmbGFncywgbm9kZSk7CisjaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjZW5kaWYKIAlyZXR1cm4gTlVMTDsKIGRlYnVnOgogCWlmICghYWxsb2NfZGVidWdfcHJvY2Vzc2luZyhzLCBjLT5wYWdlLCBvYmplY3QsIGFkZHIpKQpAQCAtMTczOSwyMyArMTg4Nyw3NiBAQAogewogCXZvaWQgKipvYmplY3Q7CiAJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjOworI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCisJdW5zaWduZWQgbG9uZyB0aWQ7CisjZWxzZQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZW5kaWYKIAogCWlmIChzbGFiX3ByZV9hbGxvY19ob29rKHMsIGdmcGZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKKyNpZm5kZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisjZWxzZQorcmVkbzoKKyNlbmRpZgorCisJLyoKKwkgKiBNdXN0IHJlYWQga21lbV9jYWNoZSBjcHUgZGF0YSB2aWEgdGhpcyBjcHUgcHRyLiBQcmVlbXB0aW9uIGlzCisJICogZW5hYmxlZC4gV2UgbWF5IHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIGNwdXMgd2hpbGUKKwkgKiByZWFkaW5nIGZyb20gb25lIGNwdSBhcmVhLiBUaGF0IGRvZXMgbm90IG1hdHRlciBhcyBsb25nCisJICogYXMgd2UgZW5kIHVwIG9uIHRoZSBvcmlnaW5hbCBjcHUgYWdhaW4gd2hlbiBkb2luZyB0aGUgY21weGNoZy4KKwkgKi8KIAljID0gX190aGlzX2NwdV9wdHIocy0+Y3B1X3NsYWIpOworCisjaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKKwkvKgorCSAqIFRoZSB0cmFuc2FjdGlvbiBpZHMgYXJlIGdsb2JhbGx5IHVuaXF1ZSBwZXIgY3B1IGFuZCBwZXIgb3BlcmF0aW9uIG9uCisJICogYSBwZXIgY3B1IHF1ZXVlLiBUaHVzIHRoZXkgY2FuIGJlIGd1YXJhbnRlZSB0aGF0IHRoZSBjbXB4Y2hnX2RvdWJsZQorCSAqIG9jY3VycyBvbiB0aGUgcmlnaHQgcHJvY2Vzc29yIGFuZCB0aGF0IHRoZXJlIHdhcyBubyBvcGVyYXRpb24gb24gdGhlCisJICogbGlua2VkIGxpc3QgaW4gYmV0d2Vlbi4KKwkgKi8KKwl0aWQgPSBjLT50aWQ7CisJYmFycmllcigpOworI2VuZGlmCisKIAlvYmplY3QgPSBjLT5mcmVlbGlzdDsKIAlpZiAodW5saWtlbHkoIW9iamVjdCB8fCAhbm9kZV9tYXRjaChjLCBub2RlKSkpCiAKIAkJb2JqZWN0ID0gX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhZGRyLCBjKTsKIAogCWVsc2UgeworI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCisJCS8qCisJCSAqIFRoZSBjbXB4Y2hnIHdpbGwgb25seSBtYXRjaCBpZiB0aGVyZSB3YXMgbm8gYWRkaXRvbmFsCisJCSAqIG9wZXJhdGlvbiBhbmQgaWYgd2UgYXJlIG9uIHRoZSByaWdodCBwcm9jZXNzb3IuCisJCSAqCisJCSAqIFRoZSBjbXB4Y2hnIGRvZXMgdGhlIGZvbGxvd2luZyBhdG9taWNhbGx5ICh3aXRob3V0IGxvY2sgc2VtYW50aWNzISkKKwkJICogMS4gUmVsb2NhdGUgZmlyc3QgcG9pbnRlciB0byB0aGUgY3VycmVudCBwZXIgY3B1IGFyZWEuCisJCSAqIDIuIFZlcmlmeSB0aGF0IHRpZCBhbmQgZnJlZWxpc3QgaGF2ZSBub3QgYmVlbiBjaGFuZ2VkCisJCSAqIDMuIElmIHRoZXkgd2VyZSBub3QgY2hhbmdlZCByZXBsYWNlIHRpZCBhbmQgZnJlZWxpc3QKKwkJICoKKwkJICogU2luY2UgdGhpcyBpcyB3aXRob3V0IGxvY2sgc2VtYW50aWNzIHRoZSBwcm90ZWN0aW9uIGlzIG9ubHkgYWdhaW5zdAorCQkgKiBjb2RlIGV4ZWN1dGluZyBvbiB0aGlzIGNwdSAqbm90KiBmcm9tIGFjY2VzcyBieSBvdGhlciBjcHVzLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KCF0aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZSgKKwkJCQlzLT5jcHVfc2xhYi0+ZnJlZWxpc3QsIHMtPmNwdV9zbGFiLT50aWQsCisJCQkJb2JqZWN0LCB0aWQsCisJCQkJZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCksIG5leHRfdGlkKHRpZCkpKSkgeworCisJCQlub3RlX2NtcHhjaGdfZmFpbHVyZSgic2xhYl9hbGxvYyIsIHMsIHRpZCk7CisJCQlnb3RvIHJlZG87CisJCX0KKyNlbHNlCiAJCWMtPmZyZWVsaXN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7CisjZW5kaWYKIAkJc3RhdChzLCBBTExPQ19GQVNUUEFUSCk7CiAJfQorCisjaWZuZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCiAKIAlpZiAodW5saWtlbHkoZ2ZwZmxhZ3MgJiBfX0dGUF9aRVJPKSAmJiBvYmplY3QpCiAJCW1lbXNldChvYmplY3QsIDAsIHMtPm9ianNpemUpOwpAQCAtMTgzMyw5ICsyMDM0LDEzIEBACiB7CiAJdm9pZCAqcHJpb3I7CiAJdm9pZCAqKm9iamVjdCA9ICh2b2lkICopeDsKKyNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzdGF0KHMsIEZSRUVfU0xPV1BBVEgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKyNlbmRpZgogCXNsYWJfbG9jayhwYWdlKTsKKwlzdGF0KHMsIEZSRUVfU0xPV1BBVEgpOwogCiAJaWYgKGttZW1fY2FjaGVfZGVidWcocykpCiAJCWdvdG8gZGVidWc7CkBAIC0xODY1LDYgKzIwNzAsOSBAQAogCiBvdXRfdW5sb2NrOgogCXNsYWJfdW5sb2NrKHBhZ2UpOworI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCiAJcmV0dXJuOwogCiBzbGFiX2VtcHR5OgpAQCAtMTg3Niw2ICsyMDg0LDkgQEAKIAkJc3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTsKIAl9CiAJc2xhYl91bmxvY2socGFnZSk7CisjaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjZW5kaWYKIAlzdGF0KHMsIEZSRUVfU0xBQik7CiAJZGlzY2FyZF9zbGFiKHMsIHBhZ2UpOwogCXJldHVybjsKQEAgLTE5MDIsMjMgKzIxMTMsNTYgQEAKIHsKIAl2b2lkICoqb2JqZWN0ID0gKHZvaWQgKil4OwogCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYzsKKyNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAorCXVuc2lnbmVkIGxvbmcgdGlkOworI2Vsc2UKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworI2VuZGlmCiAKIAlzbGFiX2ZyZWVfaG9vayhzLCB4KTsKIAorI2lmbmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworI2Vsc2UKK3JlZG86CisjZW5kaWYKKworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBjdXJyZW50bHkgY3B1cyBwZXIgY3B1IHNsYWIuCisJICogVGhlIGNwdSBtYXkgY2hhbmdlIGFmdGVyd2FyZC4gSG93ZXZlciB0aGF0IGRvZXMgbm90IG1hdHRlciBzaW5jZQorCSAqIGRhdGEgaXMgcmV0cmlldmVkIHZpYSB0aGlzIHBvaW50ZXIuIElmIHdlIGFyZSBvbiB0aGUgc2FtZSBjcHUKKwkgKiBkdXJpbmcgdGhlIGNtcHhjaGcgdGhlbiB0aGUgZnJlZSB3aWxsIHN1Y2NlZGQuCisJICovCiAJYyA9IF9fdGhpc19jcHVfcHRyKHMtPmNwdV9zbGFiKTsKIAotCXNsYWJfZnJlZV9ob29rX2lycShzLCB4KTsKKyNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAorCXRpZCA9IGMtPnRpZDsKKwliYXJyaWVyKCk7CisjZW5kaWYKIAogCWlmIChsaWtlbHkocGFnZSA9PSBjLT5wYWdlICYmIGMtPm5vZGUgIT0gTlVNQV9OT19OT0RFKSkgewogCQlzZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0LCBjLT5mcmVlbGlzdCk7CisKKyNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAorCQlpZiAodW5saWtlbHkoIXRoaXNfY3B1X2NtcHhjaGdfZG91YmxlKAorCQkJCXMtPmNwdV9zbGFiLT5mcmVlbGlzdCwgcy0+Y3B1X3NsYWItPnRpZCwKKwkJCQljLT5mcmVlbGlzdCwgdGlkLAorCQkJCW9iamVjdCwgbmV4dF90aWQodGlkKSkpKSB7CisKKwkJCW5vdGVfY21weGNoZ19mYWlsdXJlKCJzbGFiX2ZyZWUiLCBzLCB0aWQpOworCQkJZ290byByZWRvOworCQl9CisjZWxzZQogCQljLT5mcmVlbGlzdCA9IG9iamVjdDsKKyNlbmRpZgogCQlzdGF0KHMsIEZSRUVfRkFTVFBBVEgpOwogCX0gZWxzZQogCQlfX3NsYWJfZnJlZShzLCBwYWdlLCB4LCBhZGRyKTsKIAorI2lmbmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKyNlbmRpZgogfQogCiB2b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCkKQEAgLTE5ODgsMTMgKzIyMzIsMTMgQEAKICAqIHRoZSBzbWFsbGVzdCBvcmRlciB3aGljaCB3aWxsIGZpdCB0aGUgb2JqZWN0LgogICovCiBzdGF0aWMgaW5saW5lIGludCBzbGFiX29yZGVyKGludCBzaXplLCBpbnQgbWluX29iamVjdHMsCi0JCQkJaW50IG1heF9vcmRlciwgaW50IGZyYWN0X2xlZnRvdmVyKQorCQkJCWludCBtYXhfb3JkZXIsIGludCBmcmFjdF9sZWZ0b3ZlciwgaW50IHJlc2VydmVkKQogewogCWludCBvcmRlcjsKIAlpbnQgcmVtOwogCWludCBtaW5fb3JkZXIgPSBzbHViX21pbl9vcmRlcjsKIAotCWlmICgoUEFHRV9TSVpFIDw8IG1pbl9vcmRlcikgLyBzaXplID4gTUFYX09CSlNfUEVSX1BBR0UpCisJaWYgKG9yZGVyX29iamVjdHMobWluX29yZGVyLCBzaXplLCByZXNlcnZlZCkgPiBNQVhfT0JKU19QRVJfUEFHRSkKIAkJcmV0dXJuIGdldF9vcmRlcihzaXplICogTUFYX09CSlNfUEVSX1BBR0UpIC0gMTsKIAogCWZvciAob3JkZXIgPSBtYXgobWluX29yZGVyLApAQCAtMjAwMywxMCArMjI0NywxMCBAQAogCiAJCXVuc2lnbmVkIGxvbmcgc2xhYl9zaXplID0gUEFHRV9TSVpFIDw8IG9yZGVyOwogCi0JCWlmIChzbGFiX3NpemUgPCBtaW5fb2JqZWN0cyAqIHNpemUpCisJCWlmIChzbGFiX3NpemUgPCBtaW5fb2JqZWN0cyAqIHNpemUgKyByZXNlcnZlZCkKIAkJCWNvbnRpbnVlOwogCi0JCXJlbSA9IHNsYWJfc2l6ZSAlIHNpemU7CisJCXJlbSA9IChzbGFiX3NpemUgLSByZXNlcnZlZCkgJSBzaXplOwogCiAJCWlmIChyZW0gPD0gc2xhYl9zaXplIC8gZnJhY3RfbGVmdG92ZXIpCiAJCQlicmVhazsKQEAgLTIwMTYsNyArMjI2MCw3IEBACiAJcmV0dXJuIG9yZGVyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjYWxjdWxhdGVfb3JkZXIoaW50IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBjYWxjdWxhdGVfb3JkZXIoaW50IHNpemUsIGludCByZXNlcnZlZCkKIHsKIAlpbnQgb3JkZXI7CiAJaW50IG1pbl9vYmplY3RzOwpAQCAtMjAzNCwxNCArMjI3OCwxNCBAQAogCW1pbl9vYmplY3RzID0gc2x1Yl9taW5fb2JqZWN0czsKIAlpZiAoIW1pbl9vYmplY3RzKQogCQltaW5fb2JqZWN0cyA9IDQgKiAoZmxzKG5yX2NwdV9pZHMpICsgMSk7Ci0JbWF4X29iamVjdHMgPSAoUEFHRV9TSVpFIDw8IHNsdWJfbWF4X29yZGVyKS9zaXplOworCW1heF9vYmplY3RzID0gb3JkZXJfb2JqZWN0cyhzbHViX21heF9vcmRlciwgc2l6ZSwgcmVzZXJ2ZWQpOwogCW1pbl9vYmplY3RzID0gbWluKG1pbl9vYmplY3RzLCBtYXhfb2JqZWN0cyk7CiAKIAl3aGlsZSAobWluX29iamVjdHMgPiAxKSB7CiAJCWZyYWN0aW9uID0gMTY7CiAJCXdoaWxlIChmcmFjdGlvbiA+PSA0KSB7CiAJCQlvcmRlciA9IHNsYWJfb3JkZXIoc2l6ZSwgbWluX29iamVjdHMsCi0JCQkJCQlzbHViX21heF9vcmRlciwgZnJhY3Rpb24pOworCQkJCQlzbHViX21heF9vcmRlciwgZnJhY3Rpb24sIHJlc2VydmVkKTsKIAkJCWlmIChvcmRlciA8PSBzbHViX21heF9vcmRlcikKIAkJCQlyZXR1cm4gb3JkZXI7CiAJCQlmcmFjdGlvbiAvPSAyOwpAQCAtMjA1MywxNCArMjI5NywxNCBAQAogCSAqIFdlIHdlcmUgdW5hYmxlIHRvIHBsYWNlIG11bHRpcGxlIG9iamVjdHMgaW4gYSBzbGFiLiBOb3cKIAkgKiBsZXRzIHNlZSBpZiB3ZSBjYW4gcGxhY2UgYSBzaW5nbGUgb2JqZWN0IHRoZXJlLgogCSAqLwotCW9yZGVyID0gc2xhYl9vcmRlcihzaXplLCAxLCBzbHViX21heF9vcmRlciwgMSk7CisJb3JkZXIgPSBzbGFiX29yZGVyKHNpemUsIDEsIHNsdWJfbWF4X29yZGVyLCAxLCByZXNlcnZlZCk7CiAJaWYgKG9yZGVyIDw9IHNsdWJfbWF4X29yZGVyKQogCQlyZXR1cm4gb3JkZXI7CiAKIAkvKgogCSAqIERvaCB0aGlzIHNsYWIgY2Fubm90IGJlIHBsYWNlZCB1c2luZyBzbHViX21heF9vcmRlci4KIAkgKi8KLQlvcmRlciA9IHNsYWJfb3JkZXIoc2l6ZSwgMSwgTUFYX09SREVSLCAxKTsKKwlvcmRlciA9IHNsYWJfb3JkZXIoc2l6ZSwgMSwgTUFYX09SREVSLCAxLCByZXNlcnZlZCk7CiAJaWYgKG9yZGVyIDwgTUFYX09SREVSKQogCQlyZXR1cm4gb3JkZXI7CiAJcmV0dXJuIC1FTk9TWVM7CkBAIC0yMTEwLDkgKzIzNTQsMjMgQEAKIAlCVUlMRF9CVUdfT04oUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0laRSA8CiAJCQlTTFVCX1BBR0VfU0hJRlQgKiBzaXplb2Yoc3RydWN0IGttZW1fY2FjaGVfY3B1KSk7CiAKKyNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAorCS8qCisJICogTXVzdCBhbGlnbiB0byBkb3VibGUgd29yZCBib3VuZGFyeSBmb3IgdGhlIGRvdWJsZSBjbXB4Y2hnIGluc3RydWN0aW9ucworCSAqIHRvIHdvcmsuCisJICovCisJcy0+Y3B1X3NsYWIgPSBfX2FsbG9jX3BlcmNwdShzaXplb2Yoc3RydWN0IGttZW1fY2FjaGVfY3B1KSwgMiAqIHNpemVvZih2b2lkICopKTsKKyNlbHNlCisJLyogUmVndWxhciBhbGlnbm1lbnQgaXMgc3VmZmljaWVudCAqLwogCXMtPmNwdV9zbGFiID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBrbWVtX2NhY2hlX2NwdSk7CisjZW5kaWYKIAotCXJldHVybiBzLT5jcHVfc2xhYiAhPSBOVUxMOworCWlmICghcy0+Y3B1X3NsYWIpCisJCXJldHVybiAwOworCisJaW5pdF9rbWVtX2NhY2hlX2NwdXMocyk7CisKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2NhY2hlX25vZGU7CkBAIC0yMzExLDcgKzI1NjksNyBAQAogCWlmIChmb3JjZWRfb3JkZXIgPj0gMCkKIAkJb3JkZXIgPSBmb3JjZWRfb3JkZXI7CiAJZWxzZQotCQlvcmRlciA9IGNhbGN1bGF0ZV9vcmRlcihzaXplKTsKKwkJb3JkZXIgPSBjYWxjdWxhdGVfb3JkZXIoc2l6ZSwgcy0+cmVzZXJ2ZWQpOwogCiAJaWYgKG9yZGVyIDwgMCkKIAkJcmV0dXJuIDA7CkBAIC0yMzI5LDggKzI1ODcsOCBAQAogCS8qCiAJICogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBwZXIgc2xhYgogCSAqLwotCXMtPm9vID0gb29fbWFrZShvcmRlciwgc2l6ZSk7Ci0Jcy0+bWluID0gb29fbWFrZShnZXRfb3JkZXIoc2l6ZSksIHNpemUpOworCXMtPm9vID0gb29fbWFrZShvcmRlciwgc2l6ZSwgcy0+cmVzZXJ2ZWQpOworCXMtPm1pbiA9IG9vX21ha2UoZ2V0X29yZGVyKHNpemUpLCBzaXplLCBzLT5yZXNlcnZlZCk7CiAJaWYgKG9vX29iamVjdHMocy0+b28pID4gb29fb2JqZWN0cyhzLT5tYXgpKQogCQlzLT5tYXggPSBzLT5vbzsKIApAQCAtMjM0OSw2ICsyNjA3LDEwIEBACiAJcy0+b2Jqc2l6ZSA9IHNpemU7CiAJcy0+YWxpZ24gPSBhbGlnbjsKIAlzLT5mbGFncyA9IGttZW1fY2FjaGVfZmxhZ3Moc2l6ZSwgZmxhZ3MsIG5hbWUsIGN0b3IpOworCXMtPnJlc2VydmVkID0gMDsKKworCWlmIChuZWVkX3Jlc2VydmVfc2xhYl9yY3UgJiYgKHMtPmZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkpCisJCXMtPnJlc2VydmVkID0gc2l6ZW9mKHN0cnVjdCByY3VfaGVhZCk7CiAKIAlpZiAoIWNhbGN1bGF0ZV9zaXplcyhzLCAtMSkpCiAJCWdvdG8gZXJyb3I7CkBAIC0yMzk5LDEyICsyNjYxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9zaXplKTsKIAotY29uc3QgY2hhciAqa21lbV9jYWNoZV9uYW1lKHN0cnVjdCBrbWVtX2NhY2hlICpzKQotewotCXJldHVybiBzLT5uYW1lOwotfQotRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX25hbWUpOwotCiBzdGF0aWMgdm9pZCBsaXN0X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCQkJY29uc3QgY2hhciAqdGV4dCkKIHsKQEAgLTI2OTYsNyArMjk1Miw2IEBACiBzaXplX3Qga3NpemUoY29uc3Qgdm9pZCAqb2JqZWN0KQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCiAJaWYgKHVubGlrZWx5KG9iamVjdCA9PSBaRVJPX1NJWkVfUFRSKSkKIAkJcmV0dXJuIDA7CkBAIC0yNzA3LDI4ICsyOTYyLDggQEAKIAkJV0FSTl9PTighUGFnZUNvbXBvdW5kKHBhZ2UpKTsKIAkJcmV0dXJuIFBBR0VfU0laRSA8PCBjb21wb3VuZF9vcmRlcihwYWdlKTsKIAl9Ci0JcyA9IHBhZ2UtPnNsYWI7CiAKLSNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwotCS8qCi0JICogRGVidWdnaW5nIHJlcXVpcmVzIHVzZSBvZiB0aGUgcGFkZGluZyBiZXR3ZWVuIG9iamVjdAotCSAqIGFuZCB3aGF0ZXZlciBtYXkgY29tZSBhZnRlciBpdC4KLQkgKi8KLQlpZiAocy0+ZmxhZ3MgJiAoU0xBQl9SRURfWk9ORSB8IFNMQUJfUE9JU09OKSkKLQkJcmV0dXJuIHMtPm9ianNpemU7Ci0KLSNlbmRpZgotCS8qCi0JICogSWYgd2UgaGF2ZSB0aGUgbmVlZCB0byBzdG9yZSB0aGUgZnJlZWxpc3QgcG9pbnRlcgotCSAqIGJhY2sgdGhlcmUgb3IgdHJhY2sgdXNlciBpbmZvcm1hdGlvbiB0aGVuIHdlIGNhbgotCSAqIG9ubHkgdXNlIHRoZSBzcGFjZSBiZWZvcmUgdGhhdCBpbmZvcm1hdGlvbi4KLQkgKi8KLQlpZiAocy0+ZmxhZ3MgJiAoU0xBQl9ERVNUUk9ZX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpCi0JCXJldHVybiBzLT5pbnVzZTsKLQkvKgotCSAqIEVsc2Ugd2UgY2FuIHVzZSBhbGwgdGhlIHBhZGRpbmcgZXRjIGZvciB0aGUgYWxsb2NhdGlvbgotCSAqLwotCXJldHVybiBzLT5zaXplOworCXJldHVybiBzbGFiX2tzaXplKHBhZ2UtPnNsYWIpOwogfQogRVhQT1JUX1NZTUJPTChrc2l6ZSk7CiAKQEAgLTQwMTcsNiArNDI1MiwxMiBAQAogfQogU0xBQl9BVFRSX1JPKGRlc3Ryb3lfYnlfcmN1KTsKIAorc3RhdGljIHNzaXplX3QgcmVzZXJ2ZWRfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzLT5yZXNlcnZlZCk7Cit9CitTTEFCX0FUVFJfUk8ocmVzZXJ2ZWQpOworCiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKIHN0YXRpYyBzc2l6ZV90IHNsYWJzX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZikKIHsKQEAgLTQzMDMsNiArNDU0NCw3IEBACiAJJnJlY2xhaW1fYWNjb3VudF9hdHRyLmF0dHIsCiAJJmRlc3Ryb3lfYnlfcmN1X2F0dHIuYXR0ciwKIAkmc2hyaW5rX2F0dHIuYXR0ciwKKwkmcmVzZXJ2ZWRfYXR0ci5hdHRyLAogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJJnRvdGFsX29iamVjdHNfYXR0ci5hdHRyLAogCSZzbGFic19hdHRyLmF0dHIsCmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggYzAyZjkzNi4uYTQ0OGRiMyAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCisrKyBiL21tL3N3YXAuYwpAQCAtMzksNiArMzksNyBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBhZ2V2ZWNbTlJfTFJVX0xJU1RTXSwgbHJ1X2FkZF9wdmVjcyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBhZ2V2ZWMsIGxydV9yb3RhdGVfcHZlY3MpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdldmVjLCBscnVfZGVhY3RpdmF0ZV9wdmVjcyk7CiAKIC8qCiAgKiBUaGlzIHBhdGggYWxtb3N0IG5ldmVyIGhhcHBlbnMgZm9yIFZNIGFjdGl2aXR5IC0gcGFnZXMgYXJlIG5vcm1hbGx5CkBAIC0xNzgsMTUgKzE3OSwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChwdXRfcGFnZXNfbGlzdCk7CiAKLS8qCi0gKiBwYWdldmVjX21vdmVfdGFpbCgpIG11c3QgYmUgY2FsbGVkIHdpdGggSVJRIGRpc2FibGVkLgotICogT3RoZXJ3aXNlIHRoaXMgbWF5IGNhdXNlIG5hc3R5IHJhY2VzLgotICovCi1zdGF0aWMgdm9pZCBwYWdldmVjX21vdmVfdGFpbChzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3N0YXRpYyB2b2lkIHBhZ2V2ZWNfbHJ1X21vdmVfZm4oc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsCisJCQkJdm9pZCAoKm1vdmVfZm4pKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICphcmcpLAorCQkJCXZvaWQgKmFyZykKIHsKIAlpbnQgaTsKLQlpbnQgcGdtb3ZlZCA9IDA7CiAJc3RydWN0IHpvbmUgKnpvbmUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQocHZlYyk7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMtPnBhZ2VzW2ldOwpAQCAtMTk0LDI5ICsxOTMsNTAgQEAKIAogCQlpZiAocGFnZXpvbmUgIT0gem9uZSkgewogCQkJaWYgKHpvbmUpCi0JCQkJc3Bpbl91bmxvY2soJnpvbmUtPmxydV9sb2NrKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOwogCQkJem9uZSA9IHBhZ2V6b25lOwotCQkJc3Bpbl9sb2NrKCZ6b25lLT5scnVfbG9jayk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKIAkJfQotCQlpZiAoUGFnZUxSVShwYWdlKSAmJiAhUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKSB7Ci0JCQlpbnQgbHJ1ID0gcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwotCQkJbGlzdF9tb3ZlX3RhaWwoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtscnVdLmxpc3QpOwotCQkJcGdtb3ZlZCsrOwotCQl9CisKKwkJKCptb3ZlX2ZuKShwYWdlLCBhcmcpOwogCX0KIAlpZiAoem9uZSkKLQkJc3Bpbl91bmxvY2soJnpvbmUtPmxydV9sb2NrKTsKLQlfX2NvdW50X3ZtX2V2ZW50cyhQR1JPVEFURUQsIHBnbW92ZWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOwogCXJlbGVhc2VfcGFnZXMocHZlYy0+cGFnZXMsIHB2ZWMtPm5yLCBwdmVjLT5jb2xkKTsKIAlwYWdldmVjX3JlaW5pdChwdmVjKTsKIH0KIAorc3RhdGljIHZvaWQgcGFnZXZlY19tb3ZlX3RhaWxfZm4oc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmFyZykKK3sKKwlpbnQgKnBnbW92ZWQgPSBhcmc7CisJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisKKwlpZiAoUGFnZUxSVShwYWdlKSAmJiAhUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKSB7CisJCWVudW0gbHJ1X2xpc3QgbHJ1ID0gcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOworCQlsaXN0X21vdmVfdGFpbCgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xydV0ubGlzdCk7CisJCW1lbV9jZ3JvdXBfcm90YXRlX3JlY2xhaW1hYmxlX3BhZ2UocGFnZSk7CisJCSgqcGdtb3ZlZCkrKzsKKwl9Cit9CisKKy8qCisgKiBwYWdldmVjX21vdmVfdGFpbCgpIG11c3QgYmUgY2FsbGVkIHdpdGggSVJRIGRpc2FibGVkLgorICogT3RoZXJ3aXNlIHRoaXMgbWF5IGNhdXNlIG5hc3R5IHJhY2VzLgorICovCitzdGF0aWMgdm9pZCBwYWdldmVjX21vdmVfdGFpbChzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpbnQgcGdtb3ZlZCA9IDA7CisKKwlwYWdldmVjX2xydV9tb3ZlX2ZuKHB2ZWMsIHBhZ2V2ZWNfbW92ZV90YWlsX2ZuLCAmcGdtb3ZlZCk7CisJX19jb3VudF92bV9ldmVudHMoUEdST1RBVEVELCBwZ21vdmVkKTsKK30KKwogLyoKICAqIFdyaXRlYmFjayBpcyBhYm91dCB0byBlbmQgYWdhaW5zdCBhIHBhZ2Ugd2hpY2ggaGFzIGJlZW4gbWFya2VkIGZvciBpbW1lZGlhdGUKICAqIHJlY2xhaW0uICBJZiBpdCBzdGlsbCBhcHBlYXJzIHRvIGJlIHJlY2xhaW1hYmxlLCBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZQogICogaW5hY3RpdmUgbGlzdC4KICAqLwotdm9pZCAgcm90YXRlX3JlY2xhaW1hYmxlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit2b2lkIHJvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmICghUGFnZUxvY2tlZChwYWdlKSAmJiAhUGFnZURpcnR5KHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmCiAJICAgICFQYWdlVW5ldmljdGFibGUocGFnZSkgJiYgUGFnZUxSVShwYWdlKSkgewpAQCAtMzQ3LDYgKzM2Nyw3MSBAQAogfQogCiAvKgorICogSWYgdGhlIHBhZ2UgY2FuIG5vdCBiZSBpbnZhbGlkYXRlZCwgaXQgaXMgbW92ZWQgdG8gdGhlCisgKiBpbmFjdGl2ZSBsaXN0IHRvIHNwZWVkIHVwIGl0cyByZWNsYWltLiAgSXQgaXMgbW92ZWQgdG8gdGhlCisgKiBoZWFkIG9mIHRoZSBsaXN0LCByYXRoZXIgdGhhbiB0aGUgdGFpbCwgdG8gZ2l2ZSB0aGUgZmx1c2hlcgorICogdGhyZWFkcyBzb21lIHRpbWUgdG8gd3JpdGUgaXQgb3V0LCBhcyB0aGlzIGlzIG11Y2ggbW9yZQorICogZWZmZWN0aXZlIHRoYW4gdGhlIHNpbmdsZS1wYWdlIHdyaXRlb3V0IGZyb20gcmVjbGFpbS4KKyAqCisgKiBJZiB0aGUgcGFnZSBpc24ndCBwYWdlX21hcHBlZCBhbmQgZGlydHkvd3JpdGViYWNrLCB0aGUgcGFnZQorICogY291bGQgcmVjbGFpbSBhc2FwIHVzaW5nIFBHX3JlY2xhaW0uCisgKgorICogMS4gYWN0aXZlLCBtYXBwZWQgcGFnZSAtPiBub25lCisgKiAyLiBhY3RpdmUsIGRpcnR5L3dyaXRlYmFjayBwYWdlIC0+IGluYWN0aXZlLCBoZWFkLCBQR19yZWNsYWltCisgKiAzLiBpbmFjdGl2ZSwgbWFwcGVkIHBhZ2UgLT4gbm9uZQorICogNC4gaW5hY3RpdmUsIGRpcnR5L3dyaXRlYmFjayBwYWdlIC0+IGluYWN0aXZlLCBoZWFkLCBQR19yZWNsYWltCisgKiA1LiBpbmFjdGl2ZSwgY2xlYW4gLT4gaW5hY3RpdmUsIHRhaWwKKyAqIDYuIE90aGVycyAtPiBub25lCisgKgorICogSW4gNCwgd2h5IGl0IG1vdmVzIGluYWN0aXZlJ3MgaGVhZCwgdGhlIFZNIGV4cGVjdHMgdGhlIHBhZ2Ugd291bGQKKyAqIGJlIHdyaXRlIGl0IG91dCBieSBmbHVzaGVyIHRocmVhZHMgYXMgdGhpcyBpcyBtdWNoIG1vcmUgZWZmZWN0aXZlCisgKiB0aGFuIHRoZSBzaW5nbGUtcGFnZSB3cml0ZW91dCBmcm9tIHJlY2xhaW0uCisgKi8KK3N0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlX2ZuKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICphcmcpCit7CisJaW50IGxydSwgZmlsZTsKKwlib29sIGFjdGl2ZTsKKwlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKworCWlmICghUGFnZUxSVShwYWdlKSkKKwkJcmV0dXJuOworCisJLyogU29tZSBwcm9jZXNzZXMgYXJlIHVzaW5nIHRoZSBwYWdlICovCisJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpKQorCQlyZXR1cm47CisKKwlhY3RpdmUgPSBQYWdlQWN0aXZlKHBhZ2UpOworCisJZmlsZSA9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwlscnUgPSBwYWdlX2xydV9iYXNlX3R5cGUocGFnZSk7CisJZGVsX3BhZ2VfZnJvbV9scnVfbGlzdCh6b25lLCBwYWdlLCBscnUgKyBhY3RpdmUpOworCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKKwlDbGVhclBhZ2VSZWZlcmVuY2VkKHBhZ2UpOworCWFkZF9wYWdlX3RvX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CisKKwlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSB8fCBQYWdlRGlydHkocGFnZSkpIHsKKwkJLyoKKwkJICogUEdfcmVjbGFpbSBjb3VsZCBiZSByYWNlZCB3aXRoIGVuZF9wYWdlX3dyaXRlYmFjaworCQkgKiBJdCBjYW4gbWFrZSByZWFkYWhlYWQgY29uZnVzaW5nLiAgQnV0IHJhY2Ugd2luZG93CisJCSAqIGlzIF9yZWFsbHlfIHNtYWxsIGFuZCAgaXQncyBub24tY3JpdGljYWwgcHJvYmxlbS4KKwkJICovCisJCVNldFBhZ2VSZWNsYWltKHBhZ2UpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBwYWdlJ3Mgd3JpdGViYWNrIGVuZHMgdXAgZHVyaW5nIHBhZ2V2ZWMKKwkJICogV2UgbW92ZXMgdGhhIHBhZ2UgaW50byB0YWlsIG9mIGluYWN0aXZlLgorCQkgKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtscnVdLmxpc3QpOworCQltZW1fY2dyb3VwX3JvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHBhZ2UpOworCQlfX2NvdW50X3ZtX2V2ZW50KFBHUk9UQVRFRCk7CisJfQorCisJaWYgKGFjdGl2ZSkKKwkJX19jb3VudF92bV9ldmVudChQR0RFQUNUSVZBVEUpOworCXVwZGF0ZV9wYWdlX3JlY2xhaW1fc3RhdCh6b25lLCBwYWdlLCBmaWxlLCAwKTsKK30KKworLyoKICAqIERyYWluIHBhZ2VzIG91dCBvZiB0aGUgY3B1J3MgcGFnZXZlY3MuCiAgKiBFaXRoZXIgImNwdSIgaXMgdGhlIGN1cnJlbnQgQ1BVLCBhbmQgcHJlZW1wdGlvbiBoYXMgYWxyZWFkeSBiZWVuCiAgKiBkaXNhYmxlZDsgb3IgImNwdSIgaXMgYmVpbmcgaG90LXVucGx1Z2dlZCwgYW5kIGlzIGFscmVhZHkgZGVhZC4KQEAgLTM3Miw2ICs0NTcsMjkgQEAKIAkJcGFnZXZlY19tb3ZlX3RhaWwocHZlYyk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CisKKwlwdmVjID0gJnBlcl9jcHUobHJ1X2RlYWN0aXZhdGVfcHZlY3MsIGNwdSk7CisJaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCisJCXBhZ2V2ZWNfbHJ1X21vdmVfZm4ocHZlYywgbHJ1X2RlYWN0aXZhdGVfZm4sIE5VTEwpOworfQorCisvKioKKyAqIGRlYWN0aXZhdGVfcGFnZSAtIGZvcmNlZnVsbHkgZGVhY3RpdmF0ZSBhIHBhZ2UKKyAqIEBwYWdlOiBwYWdlIHRvIGRlYWN0aXZhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhpbnRzIHRoZSBWTSB0aGF0IEBwYWdlIGlzIGEgZ29vZCByZWNsYWltIGNhbmRpZGF0ZSwKKyAqIGZvciBleGFtcGxlIGlmIGl0cyBpbnZhbGlkYXRpb24gZmFpbHMgZHVlIHRvIHRoZSBwYWdlIGJlaW5nIGRpcnR5CisgKiBvciB1bmRlciB3cml0ZWJhY2suCisgKi8KK3ZvaWQgZGVhY3RpdmF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChsaWtlbHkoZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocGFnZSkpKSB7CisJCXN0cnVjdCBwYWdldmVjICpwdmVjID0gJmdldF9jcHVfdmFyKGxydV9kZWFjdGl2YXRlX3B2ZWNzKTsKKworCQlpZiAoIXBhZ2V2ZWNfYWRkKHB2ZWMsIHBhZ2UpKQorCQkJcGFnZXZlY19scnVfbW92ZV9mbihwdmVjLCBscnVfZGVhY3RpdmF0ZV9mbiwgTlVMTCk7CisJCXB1dF9jcHVfdmFyKGxydV9kZWFjdGl2YXRlX3B2ZWNzKTsKKwl9CiB9CiAKIHZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKQpAQCAtNTE2LDQ0ICs2MjQsMzMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fX19wYWdldmVjX2xydV9hZGRfZm4oc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmFyZykKK3sKKwllbnVtIGxydV9saXN0IGxydSA9IChlbnVtIGxydV9saXN0KWFyZzsKKwlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKwlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CisJaW50IGFjdGl2ZSA9IGlzX2FjdGl2ZV9scnUobHJ1KTsKKworCVZNX0JVR19PTihQYWdlQWN0aXZlKHBhZ2UpKTsKKwlWTV9CVUdfT04oUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKKwlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisKKwlTZXRQYWdlTFJVKHBhZ2UpOworCWlmIChhY3RpdmUpCisJCVNldFBhZ2VBY3RpdmUocGFnZSk7CisJdXBkYXRlX3BhZ2VfcmVjbGFpbV9zdGF0KHpvbmUsIHBhZ2UsIGZpbGUsIGFjdGl2ZSk7CisJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKK30KKwogLyoKICAqIEFkZCB0aGUgcGFzc2VkIHBhZ2VzIHRvIHRoZSBMUlUsIHRoZW4gZHJvcCB0aGUgY2FsbGVyJ3MgcmVmY291bnQKICAqIG9uIHRoZW0uICBSZWluaXRpYWxpc2VzIHRoZSBjYWxsZXIncyBwYWdldmVjLgogICovCiB2b2lkIF9fX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewotCWludCBpOwotCXN0cnVjdCB6b25lICp6b25lID0gTlVMTDsKLQogCVZNX0JVR19PTihpc191bmV2aWN0YWJsZV9scnUobHJ1KSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07Ci0JCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQkJaW50IGZpbGU7Ci0JCWludCBhY3RpdmU7Ci0KLQkJaWYgKHBhZ2V6b25lICE9IHpvbmUpIHsKLQkJCWlmICh6b25lKQotCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCQkJem9uZSA9IHBhZ2V6b25lOwotCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCQl9Ci0JCVZNX0JVR19PTihQYWdlQWN0aXZlKHBhZ2UpKTsKLQkJVk1fQlVHX09OKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSk7Ci0JCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKLQkJU2V0UGFnZUxSVShwYWdlKTsKLQkJYWN0aXZlID0gaXNfYWN0aXZlX2xydShscnUpOwotCQlmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKLQkJaWYgKGFjdGl2ZSkKLQkJCVNldFBhZ2VBY3RpdmUocGFnZSk7Ci0JCXVwZGF0ZV9wYWdlX3JlY2xhaW1fc3RhdCh6b25lLCBwYWdlLCBmaWxlLCBhY3RpdmUpOwotCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOwotCX0KLQlpZiAoem9uZSkKLQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JcmVsZWFzZV9wYWdlcyhwdmVjLT5wYWdlcywgcHZlYy0+bnIsIHB2ZWMtPmNvbGQpOwotCXBhZ2V2ZWNfcmVpbml0KHB2ZWMpOworCXBhZ2V2ZWNfbHJ1X21vdmVfZm4ocHZlYywgX19fX3BhZ2V2ZWNfbHJ1X2FkZF9mbiwgKHZvaWQgKilscnUpOwogfQogCiBFWFBPUlRfU1lNQk9MKF9fX19wYWdldmVjX2xydV9hZGQpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggMDM0MWM1Ny4uMDM5ZTYxNiAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0yMTIsOCArMjEyLDggQEAKICNkZWZpbmUgU1dBUEZJTEVfQ0xVU1RFUgkyNTYKICNkZWZpbmUgTEFURU5DWV9MSU1JVAkJMjU2CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzY2FuX3N3YXBfbWFwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKLQkJCQkJICB1bnNpZ25lZCBjaGFyIHVzYWdlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Nhbl9zd2FwX21hcChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCisJCQkJICAgdW5zaWduZWQgY2hhciB1c2FnZSkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIHNjYW5fYmFzZTsKQEAgLTg4MCw3ICs4ODAsNyBAQAogc3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgc3dwX2VudHJ5X3QgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICpwdHIgPSBOVUxMOworCXN0cnVjdCBtZW1fY2dyb3VwICpwdHI7CiAJc3BpbmxvY2tfdCAqcHRsOwogCXB0ZV90ICpwdGU7CiAJaW50IHJldCA9IDE7CkBAIC0xNTUwLDYgKzE1NTAsMzYgQEAKIAlnb3RvIG91dDsKIH0KIAorc3RhdGljIHZvaWQgZW5hYmxlX3N3YXBfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcCwgaW50IHByaW8sCisJCQkJdW5zaWduZWQgY2hhciAqc3dhcF9tYXApCit7CisJaW50IGksIHByZXY7CisKKwlzcGluX2xvY2soJnN3YXBfbG9jayk7CisJaWYgKHByaW8gPj0gMCkKKwkJcC0+cHJpbyA9IHByaW87CisJZWxzZQorCQlwLT5wcmlvID0gLS1sZWFzdF9wcmlvcml0eTsKKwlwLT5zd2FwX21hcCA9IHN3YXBfbWFwOworCXAtPmZsYWdzIHw9IFNXUF9XUklURU9LOworCW5yX3N3YXBfcGFnZXMgKz0gcC0+cGFnZXM7CisJdG90YWxfc3dhcF9wYWdlcyArPSBwLT5wYWdlczsKKworCS8qIGluc2VydCBzd2FwIHNwYWNlIGludG8gc3dhcF9saXN0OiAqLworCXByZXYgPSAtMTsKKwlmb3IgKGkgPSBzd2FwX2xpc3QuaGVhZDsgaSA+PSAwOyBpID0gc3dhcF9pbmZvW2ldLT5uZXh0KSB7CisJCWlmIChwLT5wcmlvID49IHN3YXBfaW5mb1tpXS0+cHJpbykKKwkJCWJyZWFrOworCQlwcmV2ID0gaTsKKwl9CisJcC0+bmV4dCA9IGk7CisJaWYgKHByZXYgPCAwKQorCQlzd2FwX2xpc3QuaGVhZCA9IHN3YXBfbGlzdC5uZXh0ID0gcC0+dHlwZTsKKwllbHNlCisJCXN3YXBfaW5mb1twcmV2XS0+bmV4dCA9IHAtPnR5cGU7CisJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7Cit9CisKIFNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSkKIHsKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcCA9IE5VTEw7CkBAIC0xNjIxLDI1ICsxNjUxLDE0IEBACiAJY3VycmVudC0+ZmxhZ3MgJj0gflBGX09PTV9PUklHSU47CiAKIAlpZiAoZXJyKSB7CisJCS8qCisJCSAqIHJlYWRpbmcgcC0+cHJpbyBhbmQgcC0+c3dhcF9tYXAgb3V0c2lkZSB0aGUgbG9jayBpcworCQkgKiBzYWZlIGhlcmUgYmVjYXVzZSBvbmx5IHN5c19zd2Fwb24gYW5kIHN5c19zd2Fwb2ZmCisJCSAqIGNoYW5nZSB0aGVtLCBhbmQgdGhlcmUgY2FuIGJlIG5vIG90aGVyIHN5c19zd2Fwb24gb3IKKwkJICogc3lzX3N3YXBvZmYgZm9yIHRoaXMgc3dhcF9pbmZvX3N0cnVjdCBhdCB0aGlzIHBvaW50LgorCQkgKi8KIAkJLyogcmUtaW5zZXJ0IHN3YXAgc3BhY2UgYmFjayBpbnRvIHN3YXBfbGlzdCAqLwotCQlzcGluX2xvY2soJnN3YXBfbG9jayk7Ci0JCWlmIChwLT5wcmlvIDwgMCkKLQkJCXAtPnByaW8gPSAtLWxlYXN0X3ByaW9yaXR5OwotCQlwcmV2ID0gLTE7Ci0JCWZvciAoaSA9IHN3YXBfbGlzdC5oZWFkOyBpID49IDA7IGkgPSBzd2FwX2luZm9baV0tPm5leHQpIHsKLQkJCWlmIChwLT5wcmlvID49IHN3YXBfaW5mb1tpXS0+cHJpbykKLQkJCQlicmVhazsKLQkJCXByZXYgPSBpOwotCQl9Ci0JCXAtPm5leHQgPSBpOwotCQlpZiAocHJldiA8IDApCi0JCQlzd2FwX2xpc3QuaGVhZCA9IHN3YXBfbGlzdC5uZXh0ID0gdHlwZTsKLQkJZWxzZQotCQkJc3dhcF9pbmZvW3ByZXZdLT5uZXh0ID0gdHlwZTsKLQkJbnJfc3dhcF9wYWdlcyArPSBwLT5wYWdlczsKLQkJdG90YWxfc3dhcF9wYWdlcyArPSBwLT5wYWdlczsKLQkJcC0+ZmxhZ3MgfD0gU1dQX1dSSVRFT0s7Ci0JCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOworCQllbmFibGVfc3dhcF9pbmZvKHAsIHAtPnByaW8sIHAtPnN3YXBfbWFwKTsKIAkJZ290byBvdXRfZHB1dDsKIAl9CiAKQEAgLTE4NDQsNDkgKzE4NjMsMjQgQEAKIGxhdGVfaW5pdGNhbGwobWF4X3N3YXBmaWxlc19jaGVjayk7CiAjZW5kaWYKIAotLyoKLSAqIFdyaXR0ZW4gMDEvMjUvOTIgYnkgU2ltbXVsZSBUdXJuZXIsIGhlYXZpbHkgY2hhbmdlZCBieSBMaW51cy4KLSAqCi0gKiBUaGUgc3dhcG9uIHN5c3RlbSBjYWxsCi0gKi8KLVNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpCitzdGF0aWMgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmFsbG9jX3N3YXBfaW5mbyh2b2lkKQogewogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwOwotCWNoYXIgKm5hbWUgPSBOVUxMOwotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBOVUxMOwotCXN0cnVjdCBmaWxlICpzd2FwX2ZpbGUgPSBOVUxMOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCXVuc2lnbmVkIGludCB0eXBlOwotCWludCBpLCBwcmV2OwotCWludCBlcnJvcjsKLQl1bmlvbiBzd2FwX2hlYWRlciAqc3dhcF9oZWFkZXI7Ci0JdW5zaWduZWQgaW50IG5yX2dvb2RfcGFnZXM7Ci0JaW50IG5yX2V4dGVudHMgPSAwOwotCXNlY3Rvcl90IHNwYW47Ci0JdW5zaWduZWQgbG9uZyBtYXhwYWdlczsKLQl1bnNpZ25lZCBsb25nIHN3YXBmaWxlcGFnZXM7Ci0JdW5zaWduZWQgY2hhciAqc3dhcF9tYXAgPSBOVUxMOwotCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKLQlpbnQgZGlkX2Rvd24gPSAwOwotCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwogCiAJcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlzcGluX2xvY2soJnN3YXBfbG9jayk7CiAJZm9yICh0eXBlID0gMDsgdHlwZSA8IG5yX3N3YXBmaWxlczsgdHlwZSsrKSB7CiAJCWlmICghKHN3YXBfaW5mb1t0eXBlXS0+ZmxhZ3MgJiBTV1BfVVNFRCkpCiAJCQlicmVhazsKIAl9Ci0JZXJyb3IgPSAtRVBFUk07CiAJaWYgKHR5cGUgPj0gTUFYX1NXQVBGSUxFUykgewogCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAkJa2ZyZWUocCk7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOwogCX0KIAlpZiAodHlwZSA+PSBucl9zd2FwZmlsZXMpIHsKIAkJcC0+dHlwZSA9IHR5cGU7CkBAIC0xOTExLDgxICsxOTA1LDQ5IEBACiAJcC0+bmV4dCA9IC0xOwogCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOwogCi0JbmFtZSA9IGdldG5hbWUoc3BlY2lhbGZpbGUpOwotCWVycm9yID0gUFRSX0VSUihuYW1lKTsKLQlpZiAoSVNfRVJSKG5hbWUpKSB7Ci0JCW5hbWUgPSBOVUxMOwotCQlnb3RvIGJhZF9zd2FwXzI7Ci0JfQotCXN3YXBfZmlsZSA9IGZpbHBfb3BlbihuYW1lLCBPX1JEV1J8T19MQVJHRUZJTEUsIDApOwotCWVycm9yID0gUFRSX0VSUihzd2FwX2ZpbGUpOwotCWlmIChJU19FUlIoc3dhcF9maWxlKSkgewotCQlzd2FwX2ZpbGUgPSBOVUxMOwotCQlnb3RvIGJhZF9zd2FwXzI7Ci0JfQorCXJldHVybiBwOworfQogCi0JcC0+c3dhcF9maWxlID0gc3dhcF9maWxlOwotCW1hcHBpbmcgPSBzd2FwX2ZpbGUtPmZfbWFwcGluZzsKLQlpbm9kZSA9IG1hcHBpbmctPmhvc3Q7CitzdGF0aWMgaW50IGNsYWltX3N3YXBmaWxlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWludCBlcnJvcjsKIAotCWVycm9yID0gLUVCVVNZOwotCWZvciAoaSA9IDA7IGkgPCBucl9zd2FwZmlsZXM7IGkrKykgewotCQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcSA9IHN3YXBfaW5mb1tpXTsKLQotCQlpZiAoaSA9PSB0eXBlIHx8ICFxLT5zd2FwX2ZpbGUpCi0JCQljb250aW51ZTsKLQkJaWYgKG1hcHBpbmcgPT0gcS0+c3dhcF9maWxlLT5mX21hcHBpbmcpCi0JCQlnb3RvIGJhZF9zd2FwOwotCX0KLQotCWVycm9yID0gLUVJTlZBTDsKIAlpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgewotCQliZGV2ID0gYmRncmFiKElfQkRFVihpbm9kZSkpOwotCQllcnJvciA9IGJsa2Rldl9nZXQoYmRldiwgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFIHwgRk1PREVfRVhDTCwKKwkJcC0+YmRldiA9IGJkZ3JhYihJX0JERVYoaW5vZGUpKTsKKwkJZXJyb3IgPSBibGtkZXZfZ2V0KHAtPmJkZXYsCisJCQkJICAgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFIHwgRk1PREVfRVhDTCwKIAkJCQkgICBzeXNfc3dhcG9uKTsKIAkJaWYgKGVycm9yIDwgMCkgewotCQkJYmRldiA9IE5VTEw7Ci0JCQllcnJvciA9IC1FSU5WQUw7Ci0JCQlnb3RvIGJhZF9zd2FwOworCQkJcC0+YmRldiA9IE5VTEw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlwLT5vbGRfYmxvY2tfc2l6ZSA9IGJsb2NrX3NpemUoYmRldik7Ci0JCWVycm9yID0gc2V0X2Jsb2Nrc2l6ZShiZGV2LCBQQUdFX1NJWkUpOworCQlwLT5vbGRfYmxvY2tfc2l6ZSA9IGJsb2NrX3NpemUocC0+YmRldik7CisJCWVycm9yID0gc2V0X2Jsb2Nrc2l6ZShwLT5iZGV2LCBQQUdFX1NJWkUpOwogCQlpZiAoZXJyb3IgPCAwKQotCQkJZ290byBiYWRfc3dhcDsKLQkJcC0+YmRldiA9IGJkZXY7CisJCQlyZXR1cm4gZXJyb3I7CiAJCXAtPmZsYWdzIHw9IFNXUF9CTEtERVY7CiAJfSBlbHNlIGlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CiAJCXAtPmJkZXYgPSBpbm9kZS0+aV9zYi0+c19iZGV2OwogCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCWRpZF9kb3duID0gMTsKLQkJaWYgKElTX1NXQVBGSUxFKGlub2RlKSkgewotCQkJZXJyb3IgPSAtRUJVU1k7Ci0JCQlnb3RvIGJhZF9zd2FwOwotCQl9Ci0JfSBlbHNlIHsKLQkJZ290byBiYWRfc3dhcDsKLQl9CisJCWlmIChJU19TV0FQRklMRShpbm9kZSkpCisJCQlyZXR1cm4gLUVCVVNZOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN3YXBmaWxlcGFnZXMgPSBpX3NpemVfcmVhZChpbm9kZSkgPj4gUEFHRV9TSElGVDsKKwlyZXR1cm4gMDsKK30KIAotCS8qCi0JICogUmVhZCB0aGUgc3dhcCBoZWFkZXIuCi0JICovCi0JaWYgKCFtYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UpIHsKLQkJZXJyb3IgPSAtRUlOVkFMOwotCQlnb3RvIGJhZF9zd2FwOwotCX0KLQlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgMCwgc3dhcF9maWxlKTsKLQlpZiAoSVNfRVJSKHBhZ2UpKSB7Ci0JCWVycm9yID0gUFRSX0VSUihwYWdlKTsKLQkJZ290byBiYWRfc3dhcDsKLQl9Ci0Jc3dhcF9oZWFkZXIgPSBrbWFwKHBhZ2UpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF9zd2FwX2hlYWRlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcCwKKwkJCQkJdW5pb24gc3dhcF9oZWFkZXIgKnN3YXBfaGVhZGVyLAorCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgbWF4cGFnZXM7CisJdW5zaWduZWQgbG9uZyBzd2FwZmlsZXBhZ2VzOwogCiAJaWYgKG1lbWNtcCgiU1dBUFNQQUNFMiIsIHN3YXBfaGVhZGVyLT5tYWdpYy5tYWdpYywgMTApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGZpbmQgc3dhcC1zcGFjZSBzaWduYXR1cmVcbiIpOwotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkX3N3YXA7CisJCXJldHVybiAwOwogCX0KIAogCS8qIHN3YXAgcGFydGl0aW9uIGVuZGlhbmVzcyBoYWNrLi4uICovCkBAIC0yMDAxLDggKzE5NjMsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiVW5hYmxlIHRvIGhhbmRsZSBzd2FwIGhlYWRlciB2ZXJzaW9uICVkXG4iLAogCQkgICAgICAgc3dhcF9oZWFkZXItPmluZm8udmVyc2lvbik7Ci0JCWVycm9yID0gLUVJTlZBTDsKLQkJZ290byBiYWRfc3dhcDsKKwkJcmV0dXJuIDA7CiAJfQogCiAJcC0+bG93ZXN0X2JpdCAgPSAxOwpAQCAtMjAzMyw2MSArMTk5NCwxNTUgQEAKIAl9CiAJcC0+aGlnaGVzdF9iaXQgPSBtYXhwYWdlcyAtIDE7CiAKLQllcnJvciA9IC1FSU5WQUw7CiAJaWYgKCFtYXhwYWdlcykKLQkJZ290byBiYWRfc3dhcDsKKwkJcmV0dXJuIDA7CisJc3dhcGZpbGVwYWdlcyA9IGlfc2l6ZV9yZWFkKGlub2RlKSA+PiBQQUdFX1NISUZUOwogCWlmIChzd2FwZmlsZXBhZ2VzICYmIG1heHBhZ2VzID4gc3dhcGZpbGVwYWdlcykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiU3dhcCBhcmVhIHNob3J0ZXIgdGhhbiBzaWduYXR1cmUgaW5kaWNhdGVzXG4iKTsKLQkJZ290byBiYWRfc3dhcDsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChzd2FwX2hlYWRlci0+aW5mby5ucl9iYWRwYWdlcyAmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpKQotCQlnb3RvIGJhZF9zd2FwOworCQlyZXR1cm4gMDsKIAlpZiAoc3dhcF9oZWFkZXItPmluZm8ubnJfYmFkcGFnZXMgPiBNQVhfU1dBUF9CQURQQUdFUykKLQkJZ290byBiYWRfc3dhcDsKKwkJcmV0dXJuIDA7CiAKLQkvKiBPSywgc2V0IHVwIHRoZSBzd2FwIG1hcCBhbmQgYXBwbHkgdGhlIGJhZCBibG9jayBsaXN0ICovCi0Jc3dhcF9tYXAgPSB2bWFsbG9jKG1heHBhZ2VzKTsKLQlpZiAoIXN3YXBfbWFwKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBiYWRfc3dhcDsKLQl9CisJcmV0dXJuIG1heHBhZ2VzOworfQogCi0JbWVtc2V0KHN3YXBfbWFwLCAwLCBtYXhwYWdlcyk7CitzdGF0aWMgaW50IHNldHVwX3N3YXBfbWFwX2FuZF9leHRlbnRzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwLAorCQkJCQl1bmlvbiBzd2FwX2hlYWRlciAqc3dhcF9oZWFkZXIsCisJCQkJCXVuc2lnbmVkIGNoYXIgKnN3YXBfbWFwLAorCQkJCQl1bnNpZ25lZCBsb25nIG1heHBhZ2VzLAorCQkJCQlzZWN0b3JfdCAqc3BhbikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbnJfZ29vZF9wYWdlczsKKwlpbnQgbnJfZXh0ZW50czsKKwogCW5yX2dvb2RfcGFnZXMgPSBtYXhwYWdlcyAtIDE7CS8qIG9taXQgaGVhZGVyIHBhZ2UgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBzd2FwX2hlYWRlci0+aW5mby5ucl9iYWRwYWdlczsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBwYWdlX25yID0gc3dhcF9oZWFkZXItPmluZm8uYmFkcGFnZXNbaV07Ci0JCWlmIChwYWdlX25yID09IDAgfHwgcGFnZV9uciA+IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSkgewotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJZ290byBiYWRfc3dhcDsKLQkJfQorCQlpZiAocGFnZV9uciA9PSAwIHx8IHBhZ2VfbnIgPiBzd2FwX2hlYWRlci0+aW5mby5sYXN0X3BhZ2UpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKHBhZ2VfbnIgPCBtYXhwYWdlcykgewogCQkJc3dhcF9tYXBbcGFnZV9ucl0gPSBTV0FQX01BUF9CQUQ7CiAJCQlucl9nb29kX3BhZ2VzLS07CiAJCX0KIAl9CiAKLQllcnJvciA9IHN3YXBfY2dyb3VwX3N3YXBvbih0eXBlLCBtYXhwYWdlcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGJhZF9zd2FwOwotCiAJaWYgKG5yX2dvb2RfcGFnZXMpIHsKIAkJc3dhcF9tYXBbMF0gPSBTV0FQX01BUF9CQUQ7CiAJCXAtPm1heCA9IG1heHBhZ2VzOwogCQlwLT5wYWdlcyA9IG5yX2dvb2RfcGFnZXM7Ci0JCW5yX2V4dGVudHMgPSBzZXR1cF9zd2FwX2V4dGVudHMocCwgJnNwYW4pOwotCQlpZiAobnJfZXh0ZW50cyA8IDApIHsKLQkJCWVycm9yID0gbnJfZXh0ZW50czsKLQkJCWdvdG8gYmFkX3N3YXA7Ci0JCX0KKwkJbnJfZXh0ZW50cyA9IHNldHVwX3N3YXBfZXh0ZW50cyhwLCBzcGFuKTsKKwkJaWYgKG5yX2V4dGVudHMgPCAwKQorCQkJcmV0dXJuIG5yX2V4dGVudHM7CiAJCW5yX2dvb2RfcGFnZXMgPSBwLT5wYWdlczsKIAl9CiAJaWYgKCFucl9nb29kX3BhZ2VzKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVtcHR5IHN3YXAtZmlsZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBucl9leHRlbnRzOworfQorCitTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKQoreworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwOworCWNoYXIgKm5hbWU7CisJc3RydWN0IGZpbGUgKnN3YXBfZmlsZSA9IE5VTEw7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJaW50IGk7CisJaW50IHByaW87CisJaW50IGVycm9yOworCXVuaW9uIHN3YXBfaGVhZGVyICpzd2FwX2hlYWRlcjsKKwlpbnQgbnJfZXh0ZW50czsKKwlzZWN0b3JfdCBzcGFuOworCXVuc2lnbmVkIGxvbmcgbWF4cGFnZXM7CisJdW5zaWduZWQgY2hhciAqc3dhcF9tYXAgPSBOVUxMOworCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXAgPSBhbGxvY19zd2FwX2luZm8oKTsKKwlpZiAoSVNfRVJSKHApKQorCQlyZXR1cm4gUFRSX0VSUihwKTsKKworCW5hbWUgPSBnZXRuYW1lKHNwZWNpYWxmaWxlKTsKKwlpZiAoSVNfRVJSKG5hbWUpKSB7CisJCWVycm9yID0gUFRSX0VSUihuYW1lKTsKKwkJbmFtZSA9IE5VTEw7CisJCWdvdG8gYmFkX3N3YXA7CisJfQorCXN3YXBfZmlsZSA9IGZpbHBfb3BlbihuYW1lLCBPX1JEV1J8T19MQVJHRUZJTEUsIDApOworCWlmIChJU19FUlIoc3dhcF9maWxlKSkgeworCQllcnJvciA9IFBUUl9FUlIoc3dhcF9maWxlKTsKKwkJc3dhcF9maWxlID0gTlVMTDsKKwkJZ290byBiYWRfc3dhcDsKKwl9CisKKwlwLT5zd2FwX2ZpbGUgPSBzd2FwX2ZpbGU7CisJbWFwcGluZyA9IHN3YXBfZmlsZS0+Zl9tYXBwaW5nOworCisJZm9yIChpID0gMDsgaSA8IG5yX3N3YXBmaWxlczsgaSsrKSB7CisJCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpxID0gc3dhcF9pbmZvW2ldOworCisJCWlmIChxID09IHAgfHwgIXEtPnN3YXBfZmlsZSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWFwcGluZyA9PSBxLT5zd2FwX2ZpbGUtPmZfbWFwcGluZykgeworCQkJZXJyb3IgPSAtRUJVU1k7CisJCQlnb3RvIGJhZF9zd2FwOworCQl9CisJfQorCisJaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCS8qIElmIFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgd2lsbCBkbyBtdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7ICovCisJZXJyb3IgPSBjbGFpbV9zd2FwZmlsZShwLCBpbm9kZSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBiYWRfc3dhcDsKKworCS8qCisJICogUmVhZCB0aGUgc3dhcCBoZWFkZXIuCisJICovCisJaWYgKCFtYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UpIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIGJhZF9zd2FwOwogCX0KKwlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgMCwgc3dhcF9maWxlKTsKKwlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCWVycm9yID0gUFRSX0VSUihwYWdlKTsKKwkJZ290byBiYWRfc3dhcDsKKwl9CisJc3dhcF9oZWFkZXIgPSBrbWFwKHBhZ2UpOworCisJbWF4cGFnZXMgPSByZWFkX3N3YXBfaGVhZGVyKHAsIHN3YXBfaGVhZGVyLCBpbm9kZSk7CisJaWYgKHVubGlrZWx5KCFtYXhwYWdlcykpIHsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIGJhZF9zd2FwOworCX0KKworCS8qIE9LLCBzZXQgdXAgdGhlIHN3YXAgbWFwIGFuZCBhcHBseSB0aGUgYmFkIGJsb2NrIGxpc3QgKi8KKwlzd2FwX21hcCA9IHZ6YWxsb2MobWF4cGFnZXMpOworCWlmICghc3dhcF9tYXApIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGJhZF9zd2FwOworCX0KKworCWVycm9yID0gc3dhcF9jZ3JvdXBfc3dhcG9uKHAtPnR5cGUsIG1heHBhZ2VzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gYmFkX3N3YXA7CisKKwlucl9leHRlbnRzID0gc2V0dXBfc3dhcF9tYXBfYW5kX2V4dGVudHMocCwgc3dhcF9oZWFkZXIsIHN3YXBfbWFwLAorCQltYXhwYWdlcywgJnNwYW4pOworCWlmICh1bmxpa2VseShucl9leHRlbnRzIDwgMCkpIHsKKwkJZXJyb3IgPSBucl9leHRlbnRzOworCQlnb3RvIGJhZF9zd2FwOworCX0KIAogCWlmIChwLT5iZGV2KSB7CiAJCWlmIChibGtfcXVldWVfbm9ucm90KGJkZXZfZ2V0X3F1ZXVlKHAtPmJkZXYpKSkgewpAQCAtMjA5OSw1OCArMjE1NCw0NiBAQAogCX0KIAogCW11dGV4X2xvY2soJnN3YXBvbl9tdXRleCk7Ci0Jc3Bpbl9sb2NrKCZzd2FwX2xvY2spOworCXByaW8gPSAtMTsKIAlpZiAoc3dhcF9mbGFncyAmIFNXQVBfRkxBR19QUkVGRVIpCi0JCXAtPnByaW8gPQorCQlwcmlvID0KIAkJICAoc3dhcF9mbGFncyAmIFNXQVBfRkxBR19QUklPX01BU0spID4+IFNXQVBfRkxBR19QUklPX1NISUZUOwotCWVsc2UKLQkJcC0+cHJpbyA9IC0tbGVhc3RfcHJpb3JpdHk7Ci0JcC0+c3dhcF9tYXAgPSBzd2FwX21hcDsKLQlwLT5mbGFncyB8PSBTV1BfV1JJVEVPSzsKLQlucl9zd2FwX3BhZ2VzICs9IG5yX2dvb2RfcGFnZXM7Ci0JdG90YWxfc3dhcF9wYWdlcyArPSBucl9nb29kX3BhZ2VzOworCWVuYWJsZV9zd2FwX2luZm8ocCwgcHJpbywgc3dhcF9tYXApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQWRkaW5nICV1ayBzd2FwIG9uICVzLiAgIgogCQkJIlByaW9yaXR5OiVkIGV4dGVudHM6JWQgYWNyb3NzOiVsbHVrICVzJXNcbiIsCi0JCW5yX2dvb2RfcGFnZXM8PChQQUdFX1NISUZULTEwKSwgbmFtZSwgcC0+cHJpbywKKwkJcC0+cGFnZXM8PChQQUdFX1NISUZULTEwKSwgbmFtZSwgcC0+cHJpbywKIAkJbnJfZXh0ZW50cywgKHVuc2lnbmVkIGxvbmcgbG9uZylzcGFuPDwoUEFHRV9TSElGVC0xMCksCiAJCShwLT5mbGFncyAmIFNXUF9TT0xJRFNUQVRFKSA/ICJTUyIgOiAiIiwKIAkJKHAtPmZsYWdzICYgU1dQX0RJU0NBUkRBQkxFKSA/ICJEIiA6ICIiKTsKIAotCS8qIGluc2VydCBzd2FwIHNwYWNlIGludG8gc3dhcF9saXN0OiAqLwotCXByZXYgPSAtMTsKLQlmb3IgKGkgPSBzd2FwX2xpc3QuaGVhZDsgaSA+PSAwOyBpID0gc3dhcF9pbmZvW2ldLT5uZXh0KSB7Ci0JCWlmIChwLT5wcmlvID49IHN3YXBfaW5mb1tpXS0+cHJpbykKLQkJCWJyZWFrOwotCQlwcmV2ID0gaTsKLQl9Ci0JcC0+bmV4dCA9IGk7Ci0JaWYgKHByZXYgPCAwKQotCQlzd2FwX2xpc3QuaGVhZCA9IHN3YXBfbGlzdC5uZXh0ID0gdHlwZTsKLQllbHNlCi0JCXN3YXBfaW5mb1twcmV2XS0+bmV4dCA9IHR5cGU7Ci0Jc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZzd2Fwb25fbXV0ZXgpOwogCWF0b21pY19pbmMoJnByb2NfcG9sbF9ldmVudCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcm9jX3BvbGxfd2FpdCk7CiAKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJaW5vZGUtPmlfZmxhZ3MgfD0gU19TV0FQRklMRTsKIAllcnJvciA9IDA7CiAJZ290byBvdXQ7CiBiYWRfc3dhcDoKLQlpZiAoYmRldikgewotCQlzZXRfYmxvY2tzaXplKGJkZXYsIHAtPm9sZF9ibG9ja19zaXplKTsKLQkJYmxrZGV2X3B1dChiZGV2LCBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUgfCBGTU9ERV9FWENMKTsKKwlpZiAoaW5vZGUgJiYgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSAmJiBwLT5iZGV2KSB7CisJCXNldF9ibG9ja3NpemUocC0+YmRldiwgcC0+b2xkX2Jsb2NrX3NpemUpOworCQlibGtkZXZfcHV0KHAtPmJkZXYsIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSB8IEZNT0RFX0VYQ0wpOwogCX0KIAlkZXN0cm95X3N3YXBfZXh0ZW50cyhwKTsKLQlzd2FwX2Nncm91cF9zd2Fwb2ZmKHR5cGUpOwotYmFkX3N3YXBfMjoKKwlzd2FwX2Nncm91cF9zd2Fwb2ZmKHAtPnR5cGUpOwogCXNwaW5fbG9jaygmc3dhcF9sb2NrKTsKIAlwLT5zd2FwX2ZpbGUgPSBOVUxMOwogCXAtPmZsYWdzID0gMDsKIAlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAl2ZnJlZShzd2FwX21hcCk7Ci0JaWYgKHN3YXBfZmlsZSkKKwlpZiAoc3dhcF9maWxlKSB7CisJCWlmIChpbm9kZSAmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwkJCWlub2RlID0gTlVMTDsKKwkJfQogCQlmaWxwX2Nsb3NlKHN3YXBfZmlsZSwgTlVMTCk7CisJfQogb3V0OgogCWlmIChwYWdlICYmICFJU19FUlIocGFnZSkpIHsKIAkJa3VubWFwKHBhZ2UpOwpAQCAtMjE1OCwxMSArMjIwMSw4IEBACiAJfQogCWlmIChuYW1lKQogCQlwdXRuYW1lKG5hbWUpOwotCWlmIChkaWRfZG93bikgewotCQlpZiAoIWVycm9yKQotCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19TV0FQRklMRTsKKwlpZiAoaW5vZGUgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JfQogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggZDY0Mjk2Yi4uYTk1NjY3NSAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0xMDYsOSArMTA2LDggQEAKIAljYW5jZWxfZGlydHlfcGFnZShwYWdlLCBQQUdFX0NBQ0hFX1NJWkUpOwogCiAJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKLQlyZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCUNsZWFyUGFnZU1hcHBlZFRvRGlzayhwYWdlKTsKLQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CS8qIHBhZ2VjYWNoZSByZWYgKi8KKwlkZWxldGVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCXJldHVybiAwOwogfQogCkBAIC0zMjIsMTEgKzMyMSwxMiBAQAogICogcGFnZXRhYmxlcy4KICAqLwogdW5zaWduZWQgbG9uZyBpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICAgICAgIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kKQorCQlwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCkKIHsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwogCXBnb2ZmX3QgbmV4dCA9IHN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHJldDsKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKIAlpbnQgaTsKIAogCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7CkBAIC0zNTMsOSArMzUzLDE1IEBACiAJCQlpZiAobG9ja19mYWlsZWQpCiAJCQkJY29udGludWU7CiAKLQkJCXJldCArPSBpbnZhbGlkYXRlX2lub2RlX3BhZ2UocGFnZSk7Ci0KKwkJCXJldCA9IGludmFsaWRhdGVfaW5vZGVfcGFnZShwYWdlKTsKIAkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJLyoKKwkJCSAqIEludmFsaWRhdGlvbiBpcyBhIGhpbnQgdGhhdCB0aGUgcGFnZSBpcyBubyBsb25nZXIKKwkJCSAqIG9mIGludGVyZXN0IGFuZCB0cnkgdG8gc3BlZWQgdXAgaXRzIHJlY2xhaW0uCisJCQkgKi8KKwkJCWlmICghcmV0KQorCQkJCWRlYWN0aXZhdGVfcGFnZShwYWdlKTsKKwkJCWNvdW50ICs9IHJldDsKIAkJCWlmIChuZXh0ID4gZW5kKQogCQkJCWJyZWFrOwogCQl9CkBAIC0zNjMsNyArMzY5LDcgQEAKIAkJbWVtX2Nncm91cF91bmNoYXJnZV9lbmQoKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQotCXJldHVybiByZXQ7CisJcmV0dXJuIGNvdW50OwogfQogRVhQT1JUX1NZTUJPTChpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMpOwogCkBAIC0zODksNyArMzk1LDcgQEAKIAogCWNsZWFyX3BhZ2VfbWxvY2socGFnZSk7CiAJQlVHX09OKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpOwotCV9fcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKKwlfX2RlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwogCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKIApkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGY5YjE2NjcuLjVkNjAzMDIgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTI2MSw4ICsyNjEsMTUgQEAKIH07CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodm1hcF9hcmVhX2xvY2spOwotc3RhdGljIHN0cnVjdCByYl9yb290IHZtYXBfYXJlYV9yb290ID0gUkJfUk9PVDsKIHN0YXRpYyBMSVNUX0hFQUQodm1hcF9hcmVhX2xpc3QpOworc3RhdGljIHN0cnVjdCByYl9yb290IHZtYXBfYXJlYV9yb290ID0gUkJfUk9PVDsKKworLyogVGhlIHZtYXAgY2FjaGUgZ2xvYmFscyBhcmUgcHJvdGVjdGVkIGJ5IHZtYXBfYXJlYV9sb2NrICovCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmZyZWVfdm1hcF9jYWNoZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNhY2hlZF9ob2xlX3NpemU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZWRfdnN0YXJ0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FjaGVkX2FsaWduOworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFwX2FyZWFfcGNwdV9ob2xlOwogCiBzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqX19maW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0zMzEsOSArMzM4LDExIEBACiAJc3RydWN0IHJiX25vZGUgKm47CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCWludCBwdXJnZWQgPSAwOworCXN0cnVjdCB2bWFwX2FyZWEgKmZpcnN0OwogCiAJQlVHX09OKCFzaXplKTsKIAlCVUdfT04oc2l6ZSAmIH5QQUdFX01BU0spOworCUJVR19PTighaXNfcG93ZXJfb2ZfMihhbGlnbikpOwogCiAJdmEgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCB2bWFwX2FyZWEpLAogCQkJZ2ZwX21hc2sgJiBHRlBfUkVDTEFJTV9NQVNLLCBub2RlKTsKQEAgLTM0MSw3OSArMzUwLDEwNiBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogcmV0cnk6Ci0JYWRkciA9IEFMSUdOKHZzdGFydCwgYWxpZ24pOwotCiAJc3Bpbl9sb2NrKCZ2bWFwX2FyZWFfbG9jayk7Ci0JaWYgKGFkZHIgKyBzaXplIC0gMSA8IGFkZHIpCi0JCWdvdG8gb3ZlcmZsb3c7CisJLyoKKwkgKiBJbnZhbGlkYXRlIGNhY2hlIGlmIHdlIGhhdmUgbW9yZSBwZXJtaXNzaXZlIHBhcmFtZXRlcnMuCisJICogY2FjaGVkX2hvbGVfc2l6ZSBub3RlcyB0aGUgbGFyZ2VzdCBob2xlIG5vdGljZWQgX2JlbG93XworCSAqIHRoZSB2bWFwX2FyZWEgY2FjaGVkIGluIGZyZWVfdm1hcF9jYWNoZTogaWYgc2l6ZSBmaXRzCisJICogaW50byB0aGF0IGhvbGUsIHdlIHdhbnQgdG8gc2NhbiBmcm9tIHZzdGFydCB0byByZXVzZQorCSAqIHRoZSBob2xlIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhYm92ZSBmcmVlX3ZtYXBfY2FjaGUuCisJICogTm90ZSB0aGF0IF9fZnJlZV92bWFwX2FyZWEgbWF5IHVwZGF0ZSBmcmVlX3ZtYXBfY2FjaGUKKwkgKiB3aXRob3V0IHVwZGF0aW5nIGNhY2hlZF9ob2xlX3NpemUgb3IgY2FjaGVkX2FsaWduLgorCSAqLworCWlmICghZnJlZV92bWFwX2NhY2hlIHx8CisJCQlzaXplIDwgY2FjaGVkX2hvbGVfc2l6ZSB8fAorCQkJdnN0YXJ0IDwgY2FjaGVkX3ZzdGFydCB8fAorCQkJYWxpZ24gPCBjYWNoZWRfYWxpZ24pIHsKK25vY2FjaGU6CisJCWNhY2hlZF9ob2xlX3NpemUgPSAwOworCQlmcmVlX3ZtYXBfY2FjaGUgPSBOVUxMOworCX0KKwkvKiByZWNvcmQgaWYgd2UgZW5jb3VudGVyIGxlc3MgcGVybWlzc2l2ZSBwYXJhbWV0ZXJzICovCisJY2FjaGVkX3ZzdGFydCA9IHZzdGFydDsKKwljYWNoZWRfYWxpZ24gPSBhbGlnbjsKIAotCS8qIFhYWDogY291bGQgaGF2ZSBhIGxhc3RfaG9sZSBjYWNoZSAqLwotCW4gPSB2bWFwX2FyZWFfcm9vdC5yYl9ub2RlOwotCWlmIChuKSB7Ci0JCXN0cnVjdCB2bWFwX2FyZWEgKmZpcnN0ID0gTlVMTDsKKwkvKiBmaW5kIHN0YXJ0aW5nIHBvaW50IGZvciBvdXIgc2VhcmNoICovCisJaWYgKGZyZWVfdm1hcF9jYWNoZSkgeworCQlmaXJzdCA9IHJiX2VudHJ5KGZyZWVfdm1hcF9jYWNoZSwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCWFkZHIgPSBBTElHTihmaXJzdC0+dmFfZW5kICsgUEFHRV9TSVpFLCBhbGlnbik7CisJCWlmIChhZGRyIDwgdnN0YXJ0KQorCQkJZ290byBub2NhY2hlOworCQlpZiAoYWRkciArIHNpemUgLSAxIDwgYWRkcikKKwkJCWdvdG8gb3ZlcmZsb3c7CiAKLQkJZG8geworCX0gZWxzZSB7CisJCWFkZHIgPSBBTElHTih2c3RhcnQsIGFsaWduKTsKKwkJaWYgKGFkZHIgKyBzaXplIC0gMSA8IGFkZHIpCisJCQlnb3RvIG92ZXJmbG93OworCisJCW4gPSB2bWFwX2FyZWFfcm9vdC5yYl9ub2RlOworCQlmaXJzdCA9IE5VTEw7CisKKwkJd2hpbGUgKG4pIHsKIAkJCXN0cnVjdCB2bWFwX2FyZWEgKnRtcDsKIAkJCXRtcCA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOwogCQkJaWYgKHRtcC0+dmFfZW5kID49IGFkZHIpIHsKLQkJCQlpZiAoIWZpcnN0ICYmIHRtcC0+dmFfc3RhcnQgPCBhZGRyICsgc2l6ZSkKLQkJCQkJZmlyc3QgPSB0bXA7Ci0JCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCQl9IGVsc2UgewogCQkJCWZpcnN0ID0gdG1wOworCQkJCWlmICh0bXAtPnZhX3N0YXJ0IDw9IGFkZHIpCisJCQkJCWJyZWFrOworCQkJCW4gPSBuLT5yYl9sZWZ0OworCQkJfSBlbHNlCiAJCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQkJfQotCQl9IHdoaWxlIChuKTsKKwkJfQogCiAJCWlmICghZmlyc3QpCiAJCQlnb3RvIGZvdW5kOwotCi0JCWlmIChmaXJzdC0+dmFfZW5kIDwgYWRkcikgewotCQkJbiA9IHJiX25leHQoJmZpcnN0LT5yYl9ub2RlKTsKLQkJCWlmIChuKQotCQkJCWZpcnN0ID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7Ci0JCQllbHNlCi0JCQkJZ290byBmb3VuZDsKLQkJfQotCi0JCXdoaWxlIChhZGRyICsgc2l6ZSA+IGZpcnN0LT52YV9zdGFydCAmJiBhZGRyICsgc2l6ZSA8PSB2ZW5kKSB7Ci0JCQlhZGRyID0gQUxJR04oZmlyc3QtPnZhX2VuZCArIFBBR0VfU0laRSwgYWxpZ24pOwotCQkJaWYgKGFkZHIgKyBzaXplIC0gMSA8IGFkZHIpCi0JCQkJZ290byBvdmVyZmxvdzsKLQotCQkJbiA9IHJiX25leHQoJmZpcnN0LT5yYl9ub2RlKTsKLQkJCWlmIChuKQotCQkJCWZpcnN0ID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7Ci0JCQllbHNlCi0JCQkJZ290byBmb3VuZDsKLQkJfQogCX0KKworCS8qIGZyb20gdGhlIHN0YXJ0aW5nIHBvaW50LCB3YWxrIGFyZWFzIHVudGlsIGEgc3VpdGFibGUgaG9sZSBpcyBmb3VuZCAqLworCXdoaWxlIChhZGRyICsgc2l6ZSA+PSBmaXJzdC0+dmFfc3RhcnQgJiYgYWRkciArIHNpemUgPD0gdmVuZCkgeworCQlpZiAoYWRkciArIGNhY2hlZF9ob2xlX3NpemUgPCBmaXJzdC0+dmFfc3RhcnQpCisJCQljYWNoZWRfaG9sZV9zaXplID0gZmlyc3QtPnZhX3N0YXJ0IC0gYWRkcjsKKwkJYWRkciA9IEFMSUdOKGZpcnN0LT52YV9lbmQgKyBQQUdFX1NJWkUsIGFsaWduKTsKKwkJaWYgKGFkZHIgKyBzaXplIC0gMSA8IGFkZHIpCisJCQlnb3RvIG92ZXJmbG93OworCisJCW4gPSByYl9uZXh0KCZmaXJzdC0+cmJfbm9kZSk7CisJCWlmIChuKQorCQkJZmlyc3QgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgdm1hcF9hcmVhLCByYl9ub2RlKTsKKwkJZWxzZQorCQkJZ290byBmb3VuZDsKKwl9CisKIGZvdW5kOgotCWlmIChhZGRyICsgc2l6ZSA+IHZlbmQpIHsKLW92ZXJmbG93OgotCQlzcGluX3VubG9jaygmdm1hcF9hcmVhX2xvY2spOwotCQlpZiAoIXB1cmdlZCkgewotCQkJcHVyZ2Vfdm1hcF9hcmVhX2xhenkoKTsKLQkJCXB1cmdlZCA9IDE7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJInZtYXAgYWxsb2NhdGlvbiBmb3Igc2l6ZSAlbHUgZmFpbGVkOiAiCi0JCQkJInVzZSB2bWFsbG9jPTxzaXplPiB0byBpbmNyZWFzZSBzaXplLlxuIiwgc2l6ZSk7Ci0JCWtmcmVlKHZhKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKLQl9Ci0KLQlCVUdfT04oYWRkciAmIChhbGlnbi0xKSk7CisJaWYgKGFkZHIgKyBzaXplID4gdmVuZCkKKwkJZ290byBvdmVyZmxvdzsKIAogCXZhLT52YV9zdGFydCA9IGFkZHI7CiAJdmEtPnZhX2VuZCA9IGFkZHIgKyBzaXplOwogCXZhLT5mbGFncyA9IDA7CiAJX19pbnNlcnRfdm1hcF9hcmVhKHZhKTsKKwlmcmVlX3ZtYXBfY2FjaGUgPSAmdmEtPnJiX25vZGU7CiAJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKIAorCUJVR19PTih2YS0+dmFfc3RhcnQgJiAoYWxpZ24tMSkpOworCUJVR19PTih2YS0+dmFfc3RhcnQgPCB2c3RhcnQpOworCUJVR19PTih2YS0+dmFfZW5kID4gdmVuZCk7CisKIAlyZXR1cm4gdmE7CisKK292ZXJmbG93OgorCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJaWYgKCFwdXJnZWQpIHsKKwkJcHVyZ2Vfdm1hcF9hcmVhX2xhenkoKTsKKwkJcHVyZ2VkID0gMTsKKwkJZ290byByZXRyeTsKKwl9CisJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJInZtYXAgYWxsb2NhdGlvbiBmb3Igc2l6ZSAlbHUgZmFpbGVkOiAiCisJCQkidXNlIHZtYWxsb2M9PHNpemU+IHRvIGluY3JlYXNlIHNpemUuXG4iLCBzaXplKTsKKwlrZnJlZSh2YSk7CisJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKIH0KIAogc3RhdGljIHZvaWQgcmN1X2ZyZWVfdmEoc3RydWN0IHJjdV9oZWFkICpoZWFkKQpAQCAtNDI2LDYgKzQ2MiwyMiBAQAogc3RhdGljIHZvaWQgX19mcmVlX3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKIHsKIAlCVUdfT04oUkJfRU1QVFlfTk9ERSgmdmEtPnJiX25vZGUpKTsKKworCWlmIChmcmVlX3ZtYXBfY2FjaGUpIHsKKwkJaWYgKHZhLT52YV9lbmQgPCBjYWNoZWRfdnN0YXJ0KSB7CisJCQlmcmVlX3ZtYXBfY2FjaGUgPSBOVUxMOworCQl9IGVsc2UgeworCQkJc3RydWN0IHZtYXBfYXJlYSAqY2FjaGU7CisJCQljYWNoZSA9IHJiX2VudHJ5KGZyZWVfdm1hcF9jYWNoZSwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCQlpZiAodmEtPnZhX3N0YXJ0IDw9IGNhY2hlLT52YV9zdGFydCkgeworCQkJCWZyZWVfdm1hcF9jYWNoZSA9IHJiX3ByZXYoJnZhLT5yYl9ub2RlKTsKKwkJCQkvKgorCQkJCSAqIFdlIGRvbid0IHRyeSB0byB1cGRhdGUgY2FjaGVkX2hvbGVfc2l6ZSBvcgorCQkJCSAqIGNhY2hlZF9hbGlnbiwgYnV0IGl0IHdvbid0IGdvIHZlcnkgd3JvbmcuCisJCQkJICovCisJCQl9CisJCX0KKwl9CiAJcmJfZXJhc2UoJnZhLT5yYl9ub2RlLCAmdm1hcF9hcmVhX3Jvb3QpOwogCVJCX0NMRUFSX05PREUoJnZhLT5yYl9ub2RlKTsKIAlsaXN0X2RlbF9yY3UoJnZhLT5saXN0KTsKQEAgLTE5NTEsOCArMjAwMyw2IEBACiAgKglzaG91bGQga25vdyB2bWFsbG9jKCkgYXJlYSBpcyB2YWxpZCBhbmQgY2FuIHVzZSBtZW1jcHkoKS4KICAqCVRoaXMgaXMgZm9yIHJvdXRpbmVzIHdoaWNoIGhhdmUgdG8gYWNjZXNzIHZtYWxsb2MgYXJlYSB3aXRob3V0CiAgKglhbnkgaW5mb3JtYWlvbiwgYXMgL2Rldi9rbWVtLgotICoKLSAqCVRoZSBjYWxsZXIgc2hvdWxkIGd1YXJhbnRlZSBLTV9VU0VSMSBpcyBub3QgdXNlZC4KICAqLwogCiBsb25nIHZ3cml0ZShjaGFyICpidWYsIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDY3NzFlYTcuLjA2MGU0YzEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC01MTQsNyArNTE0LDcgQEAKIAogCQlmcmVlcGFnZSA9IG1hcHBpbmctPmFfb3BzLT5mcmVlcGFnZTsKIAotCQlfX3JlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CisJCV9fZGVsZXRlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwogCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAKQEAgLTIzOTcsOSArMjM5Nyw5IEBACiAJCSAqIGNhdXNlIHRvbyBtdWNoIHNjYW5uaW5nIG9mIHRoZSBsb3dlciB6b25lcy4KIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPD0gZW5kX3pvbmU7IGkrKykgewotCQkJaW50IGNvbXBhY3Rpb247CiAJCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgaTsKIAkJCWludCBucl9zbGFiOworCQkJdW5zaWduZWQgbG9uZyBiYWxhbmNlX2dhcDsKIAogCQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKIAkJCQljb250aW51ZTsKQEAgLTI0MTYsMTEgKzI0MTYsMjAgQEAKIAkJCW1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWNsYWltKHpvbmUsIG9yZGVyLCBzYy5nZnBfbWFzayk7CiAKIAkJCS8qCi0JCQkgKiBXZSBwdXQgZXF1YWwgcHJlc3N1cmUgb24gZXZlcnkgem9uZSwgdW5sZXNzIG9uZQotCQkJICogem9uZSBoYXMgd2F5IHRvbyBtYW55IHBhZ2VzIGZyZWUgYWxyZWFkeS4KKwkJCSAqIFdlIHB1dCBlcXVhbCBwcmVzc3VyZSBvbiBldmVyeSB6b25lLCB1bmxlc3MKKwkJCSAqIG9uZSB6b25lIGhhcyB3YXkgdG9vIG1hbnkgcGFnZXMgZnJlZQorCQkJICogYWxyZWFkeS4gVGhlICJ0b28gbWFueSBwYWdlcyIgaXMgZGVmaW5lZAorCQkJICogYXMgdGhlIGhpZ2ggd21hcmsgcGx1cyBhICJnYXAiIHdoZXJlIHRoZQorCQkJICogZ2FwIGlzIGVpdGhlciB0aGUgbG93IHdhdGVybWFyayBvciAxJQorCQkJICogb2YgdGhlIHpvbmUsIHdoaWNoZXZlciBpcyBzbWFsbGVyLgogCQkJICovCisJCQliYWxhbmNlX2dhcCA9IG1pbihsb3dfd21hcmtfcGFnZXMoem9uZSksCisJCQkJKHpvbmUtPnByZXNlbnRfcGFnZXMgKworCQkJCQlLU1dBUERfWk9ORV9CQUxBTkNFX0dBUF9SQVRJTy0xKSAvCisJCQkJS1NXQVBEX1pPTkVfQkFMQU5DRV9HQVBfUkFUSU8pOwogCQkJaWYgKCF6b25lX3dhdGVybWFya19va19zYWZlKHpvbmUsIG9yZGVyLAotCQkJCQk4KmhpZ2hfd21hcmtfcGFnZXMoem9uZSksIGVuZF96b25lLCAwKSkKKwkJCQkJaGlnaF93bWFya19wYWdlcyh6b25lKSArIGJhbGFuY2VfZ2FwLAorCQkJCQllbmRfem9uZSwgMCkpCiAJCQkJc2hyaW5rX3pvbmUocHJpb3JpdHksIHpvbmUsICZzYyk7CiAJCQlyZWNsYWltX3N0YXRlLT5yZWNsYWltZWRfc2xhYiA9IDA7CiAJCQlucl9zbGFiID0gc2hyaW5rX3NsYWIoc2MubnJfc2Nhbm5lZCwgR0ZQX0tFUk5FTCwKQEAgLTI0MjgsMjQgKzI0MzcsOSBAQAogCQkJc2MubnJfcmVjbGFpbWVkICs9IHJlY2xhaW1fc3RhdGUtPnJlY2xhaW1lZF9zbGFiOwogCQkJdG90YWxfc2Nhbm5lZCArPSBzYy5ucl9zY2FubmVkOwogCi0JCQljb21wYWN0aW9uID0gMDsKLQkJCWlmIChvcmRlciAmJgotCQkJICAgIHpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIDAsCi0JCQkJCSAgICAgICBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLAotCQkJCQkgICAgICBlbmRfem9uZSwgMCkgJiYKLQkJCSAgICAhem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsCi0JCQkJCSAgICAgICBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLAotCQkJCQkgICAgICAgZW5kX3pvbmUsIDApKSB7Ci0JCQkJY29tcGFjdF96b25lX29yZGVyKHpvbmUsCi0JCQkJCQkgICBvcmRlciwKLQkJCQkJCSAgIHNjLmdmcF9tYXNrLCBmYWxzZSwKLQkJCQkJCSAgIENPTVBBQ1RfTU9ERV9LU1dBUEQpOwotCQkJCWNvbXBhY3Rpb24gPSAxOwotCQkJfQotCiAJCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUpCiAJCQkJY29udGludWU7Ci0JCQlpZiAoIWNvbXBhY3Rpb24gJiYgbnJfc2xhYiA9PSAwICYmCisJCQlpZiAobnJfc2xhYiA9PSAwICYmCiAJCQkgICAgIXpvbmVfcmVjbGFpbWFibGUoem9uZSkpCiAJCQkJem9uZS0+YWxsX3VucmVjbGFpbWFibGUgPSAxOwogCQkJLyoKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggMGMzYjUwNC4uNzcyYjM5YiAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTUwMCw4ICs1MDAsMTIgQEAKICAqIHogCSAgICA9IHRoZSB6b25lIGZyb20gd2hpY2ggdGhlIGFsbG9jYXRpb24gb2NjdXJyZWQuCiAgKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKKyAqIFdoZW4gX19HRlBfT1RIRVJfTk9ERSBpcyBzZXQgYXNzdW1lIHRoZSBub2RlIG9mIHRoZSBwcmVmZXJyZWQKKyAqIHpvbmUgaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBkYWVtb25zIHdobyBhbGxvY2F0ZQorICogbWVtb3J5IG9uIGJlaGFsZiBvZiBvdGhlciBwcm9jZXNzZXMuCiAgKi8KLXZvaWQgem9uZV9zdGF0aXN0aWNzKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwgc3RydWN0IHpvbmUgKnopCit2b2lkIHpvbmVfc3RhdGlzdGljcyhzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsIHN0cnVjdCB6b25lICp6LCBnZnBfdCBmbGFncykKIHsKIAlpZiAoei0+em9uZV9wZ2RhdCA9PSBwcmVmZXJyZWRfem9uZS0+em9uZV9wZ2RhdCkgewogCQlfX2luY196b25lX3N0YXRlKHosIE5VTUFfSElUKTsKQEAgLTUwOSw3ICs1MTMsOCBAQAogCQlfX2luY196b25lX3N0YXRlKHosIE5VTUFfTUlTUyk7CiAJCV9faW5jX3pvbmVfc3RhdGUocHJlZmVycmVkX3pvbmUsIE5VTUFfRk9SRUlHTik7CiAJfQotCWlmICh6LT5ub2RlID09IG51bWFfbm9kZV9pZCgpKQorCWlmICh6LT5ub2RlID09ICgoZmxhZ3MgJiBfX0dGUF9PVEhFUl9OT0RFKSA/CisJCQlwcmVmZXJyZWRfem9uZS0+bm9kZSA6IG51bWFfbm9kZV9pZCgpKSkKIAkJX19pbmNfem9uZV9zdGF0ZSh6LCBOVU1BX0xPQ0FMKTsKIAllbHNlCiAJCV9faW5jX3pvbmVfc3RhdGUoeiwgTlVNQV9PVEhFUik7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IGFlNjEwZjAuLmUzNGVhOWUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC03MjAsNiArNzIwLDcgQEAKIAlkZXYtPmZjb2VfZGRwX3hpZCA9IHJlYWxfZGV2LT5mY29lX2RkcF94aWQ7CiAjZW5kaWYKIAorCWRldi0+bmVlZGVkX2hlYWRyb29tID0gcmVhbF9kZXYtPm5lZWRlZF9oZWFkcm9vbTsKIAlpZiAocmVhbF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKSB7CiAJCWRldi0+aGVhZGVyX29wcyAgICAgID0gcmVhbF9kZXYtPmhlYWRlcl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gcmVhbF9kZXYtPmhhcmRfaGVhZGVyX2xlbjsKZGlmZiAtLWdpdCBhL25ldC85cC9jbGllbnQuYyBiL25ldC85cC9jbGllbnQuYwppbmRleCAzNDdlYzBjLi4yY2NiZjA0IDEwMDY0NAotLS0gYS9uZXQvOXAvY2xpZW50LmMKKysrIGIvbmV0LzlwL2NsaWVudC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogCXJlcSA9ICZjLT5yZXFzW3Jvd11bY29sXTsKIAlpZiAoIXJlcS0+dGMpIHsKLQkJcmVxLT53cSA9IGttYWxsb2Moc2l6ZW9mKHdhaXRfcXVldWVfaGVhZF90KSwgR0ZQX0tFUk5FTCk7CisJCXJlcS0+d3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksIEdGUF9OT0ZTKTsKIAkJaWYgKCFyZXEtPndxKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGdyb3cgdGFnIGFycmF5XG4iKTsKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMjMzLDE3ICsyMzMsMTcgQEAKIAkJCQlQOV9UUkFOU19QUkVGX1BBWUxPQURfU0VQKSB7CiAJCQlpbnQgYWxsb2NfbXNpemUgPSBtaW4oYy0+bXNpemUsIDQwOTYpOwogCQkJcmVxLT50YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkrYWxsb2NfbXNpemUsCi0JCQkJCUdGUF9LRVJORUwpOworCQkJCQkgIEdGUF9OT0ZTKTsKIAkJCXJlcS0+dGMtPmNhcGFjaXR5ID0gYWxsb2NfbXNpemU7CiAJCQlyZXEtPnJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKSthbGxvY19tc2l6ZSwKLQkJCQkJR0ZQX0tFUk5FTCk7CisJCQkJCSAgR0ZQX05PRlMpOwogCQkJcmVxLT5yYy0+Y2FwYWNpdHkgPSBhbGxvY19tc2l6ZTsKIAkJfSBlbHNlIHsKIAkJCXJlcS0+dGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpK2MtPm1zaXplLAotCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQkJICBHRlBfTk9GUyk7CiAJCQlyZXEtPnRjLT5jYXBhY2l0eSA9IGMtPm1zaXplOwogCQkJcmVxLT5yYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkrYy0+bXNpemUsCi0JCQkJCUdGUF9LRVJORUwpOworCQkJCQkgIEdGUF9OT0ZTKTsKIAkJCXJlcS0+cmMtPmNhcGFjaXR5ID0gYy0+bXNpemU7CiAJCX0KIAkJaWYgKCghcmVxLT50YykgfHwgKCFyZXEtPnJjKSkgewpkaWZmIC0tZ2l0IGEvbmV0LzlwL3Byb3RvY29sLmMgYi9uZXQvOXAvcHJvdG9jb2wuYwppbmRleCAyY2U1MTViLi44YTQwODRmIDEwMDY0NAotLS0gYS9uZXQvOXAvcHJvdG9jb2wuYworKysgYi9uZXQvOXAvcHJvdG9jb2wuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJCQkJaWYgKGVycmNvZGUpCiAJCQkJCWJyZWFrOwogCi0JCQkJKnNwdHIgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCQkJCSpzcHRyID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfTk9GUyk7CiAJCQkJaWYgKCpzcHRyID09IE5VTEwpIHsKIAkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CiAJCQkJCWJyZWFrOwpAQCAtMjczLDcgKzI3Myw3IEBACiAJCQkJaWYgKCFlcnJjb2RlKSB7CiAJCQkJCSp3bmFtZXMgPQogCQkJCQkgICAga21hbGxvYyhzaXplb2YoY2hhciAqKSAqICpud25hbWUsCi0JCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCQkJCQkgICAgR0ZQX05PRlMpOwogCQkJCQlpZiAoISp3bmFtZXMpCiAJCQkJCQllcnJjb2RlID0gLUVOT01FTTsKIAkJCQl9CkBAIC0zMTcsNyArMzE3LDcgQEAKIAkJCQkJKndxaWRzID0KIAkJCQkJICAgIGttYWxsb2MoKm53cWlkICoKIAkJCQkJCSAgICBzaXplb2Yoc3RydWN0IHA5X3FpZCksCi0JCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCQkJCQkgICAgR0ZQX05PRlMpOwogCQkJCQlpZiAoKndxaWRzID09IE5VTEwpCiAJCQkJCQllcnJjb2RlID0gLUVOT01FTTsKIAkJCQl9CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfY29tbW9uLmMgYi9uZXQvOXAvdHJhbnNfY29tbW9uLmMKaW5kZXggZDYyYjlhYS4uOTE3MmFiNyAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2NvbW1vbi5jCisrKyBiL25ldC85cC90cmFuc19jb21tb24uYwpAQCAtNDEsOSArNDEsOSBAQAogaW50CiBwOV9ucl9wYWdlcyhzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKIHsKLQlpbnQgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7Ci0Jc3RhcnRfcGFnZSA9ICAodW5zaWduZWQgbG9uZyBsb25nKXJlcS0+dGMtPnB1YnVmID4+IFBBR0VfU0hJRlQ7Ci0JZW5kX3BhZ2UgPSAoKHVuc2lnbmVkIGxvbmcgbG9uZylyZXEtPnRjLT5wdWJ1ZiArIHJlcS0+dGMtPnBidWZfc2l6ZSArCisJdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLCBlbmRfcGFnZTsKKwlzdGFydF9wYWdlID0gICh1bnNpZ25lZCBsb25nKXJlcS0+dGMtPnB1YnVmID4+IFBBR0VfU0hJRlQ7CisJZW5kX3BhZ2UgPSAoKHVuc2lnbmVkIGxvbmcpcmVxLT50Yy0+cHVidWYgKyByZXEtPnRjLT5wYnVmX3NpemUgKwogCQkJUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIAlyZXR1cm4gZW5kX3BhZ2UgLSBzdGFydF9wYWdlOwogfQpAQCAtNjksOCArNjksOCBAQAogCSpwZGF0YV9vZmYgPSAoc2l6ZV90KXJlcS0+dGMtPnB1YnVmICYgKFBBR0VfU0laRS0xKTsKIAogCWlmICgqcGRhdGFfb2ZmKQotCQlmaXJzdF9wYWdlX2J5dGVzID0gbWluKChQQUdFX1NJWkUgLSAqcGRhdGFfb2ZmKSwKLQkJCQlyZXEtPnRjLT5wYnVmX3NpemUpOworCQlmaXJzdF9wYWdlX2J5dGVzID0gbWluKCgoc2l6ZV90KVBBR0VfU0laRSAtICpwZGF0YV9vZmYpLAorCQkJCSAgICAgICByZXEtPnRjLT5wYnVmX3NpemUpOwogCiAJcnBpbmZvID0gcmVxLT50Yy0+cHJpdmF0ZTsKIAlwZGF0YV9tYXBwZWRfcGFnZXMgPSBnZXRfdXNlcl9wYWdlc19mYXN0KCh1bnNpZ25lZCBsb25nKXJlcS0+dGMtPnB1YnVmLApkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX2ZkLmMgYi9uZXQvOXAvdHJhbnNfZmQuYwppbmRleCBhMzA0NzFlLi5hYTU2NzJiIDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfZmQuYworKysgYi9uZXQvOXAvdHJhbnNfZmQuYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAKIAkJaWYgKG0tPnJlcS0+cmMgPT0gTlVMTCkgewogCQkJbS0+cmVxLT5yYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKwotCQkJCQkJbS0+Y2xpZW50LT5tc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQkJCQltLT5jbGllbnQtPm1zaXplLCBHRlBfTk9GUyk7CiAJCQlpZiAoIW0tPnJlcS0+cmMpIHsKIAkJCQltLT5yZXEgPSBOVUxMOwogCQkJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfcmRtYS5jIGIvbmV0LzlwL3RyYW5zX3JkbWEuYwppbmRleCAyOWE1NGNjLi4xNTBlMGM0IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfcmRtYS5jCisrKyBiL25ldC85cC90cmFuc19yZG1hLmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogCXN0cnVjdCBwOV9yZG1hX2NvbnRleHQgKnJwbF9jb250ZXh0ID0gTlVMTDsKIAogCS8qIEFsbG9jYXRlIGFuIGZjYWxsIGZvciB0aGUgcmVwbHkgKi8KLQlycGxfY29udGV4dCA9IGttYWxsb2Moc2l6ZW9mICpycGxfY29udGV4dCwgR0ZQX0tFUk5FTCk7CisJcnBsX2NvbnRleHQgPSBrbWFsbG9jKHNpemVvZiAqcnBsX2NvbnRleHQsIEdGUF9OT0ZTKTsKIAlpZiAoIXJwbF9jb250ZXh0KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2Nsb3NlOwpAQCAtNDM3LDcgKzQzNyw3IEBACiAJICovCiAJaWYgKCFyZXEtPnJjKSB7CiAJCXJlcS0+cmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpK2NsaWVudC0+bXNpemUsCi0JCQkJCQkJCUdGUF9LRVJORUwpOworCQkJCSAgR0ZQX05PRlMpOwogCQlpZiAocmVxLT5yYykgewogCQkJcmVxLT5yYy0+c2RhdGEgPSAoY2hhciAqKSByZXEtPnJjICsKIAkJCQkJCXNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOwpAQCAtNDY4LDcgKzQ2OCw3IEBACiAJcmVxLT5yYyA9IE5VTEw7CiAKIAkvKiBQb3N0IHRoZSByZXF1ZXN0ICovCi0JYyA9IGttYWxsb2Moc2l6ZW9mICpjLCBHRlBfS0VSTkVMKTsKKwljID0ga21hbGxvYyhzaXplb2YgKmMsIEdGUF9OT0ZTKTsKIAlpZiAoIWMpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZTE7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKaW5kZXggOWI1NTBlZC4uZThmMDQ2YiAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCisrKyBiL25ldC85cC90cmFuc192aXJ0aW8uYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvXzlwLmg+CiAjaW5jbHVkZSAidHJhbnNfY29tbW9uLmgiCkBAIC01MSw2ICs1Miw4IEBACiAKIC8qIGEgc2luZ2xlIG11dGV4IHRvIG1hbmFnZSBjaGFubmVsIGluaXRpYWxpemF0aW9uIGFuZCBhdHRhY2htZW50ICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHZpcnRpb185cF9sb2NrKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh2cF93cSk7CitzdGF0aWMgYXRvbWljX3QgdnBfcGlubmVkID0gQVRPTUlDX0lOSVQoMCk7CiAKIC8qKgogICogc3RydWN0IHZpcnRpb19jaGFuIC0gcGVyLWluc3RhbmNlIHRyYW5zcG9ydCBpbmZvcm1hdGlvbgpAQCAtNzgsNyArODEsMTAgQEAKIAlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKIAlpbnQgcmluZ19idWZzX2F2YWlsOwogCXdhaXRfcXVldWVfaGVhZF90ICp2Y193cTsKLQorCS8qIFRoaXMgaXMgZ2xvYmFsIGxpbWl0LiBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZ2xvYmFsIHN0cnVjdHVyZSwKKwkgKiB3aWxsIGJlIHBsYWNpbmcgaXQgaW4gZWFjaCBjaGFubmVsLgorCSAqLworCWludCBwOV9tYXhfcGFnZXM7CiAJLyogU2NhdHRlcmxpc3Q6IGNhbiBiZSB0b28gYmlnIGZvciBzdGFjay4gKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklSVFFVRVVFX05VTV07CiAKQEAgLTE0MSwzNCArMTQ3LDM2IEBACiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOiByZXF1ZXN0IGRvbmVcbiIpOwogCi0JZG8geworCXdoaWxlICgxKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5sb2NrLCBmbGFncyk7CiAJCXJjID0gdmlydHF1ZXVlX2dldF9idWYoY2hhbi0+dnEsICZsZW4pOwogCi0JCWlmIChyYyAhPSBOVUxMKSB7Ci0JCQlpZiAoIWNoYW4tPnJpbmdfYnVmc19hdmFpbCkgewotCQkJCWNoYW4tPnJpbmdfYnVmc19hdmFpbCA9IDE7Ci0JCQkJd2FrZV91cChjaGFuLT52Y193cSk7Ci0JCQl9CisJCWlmIChyYyA9PSBOVUxMKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOiByYyAlcFxuIiwgcmMpOwotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogbG9va3VwIHRhZyAlZFxuIiwKLQkJCQkJcmMtPnRhZyk7Ci0JCQlyZXEgPSBwOV90YWdfbG9va3VwKGNoYW4tPmNsaWVudCwgcmMtPnRhZyk7Ci0JCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfUkNWRDsKLQkJCWlmIChyZXEtPnRjLT5wcml2YXRlKSB7Ci0JCQkJc3RydWN0IHRyYW5zX3JwYWdlX2luZm8gKnJwID0gcmVxLT50Yy0+cHJpdmF0ZTsKLQkJCQkvKlJlbGVhc2UgcGFnZXMgKi8KLQkJCQlwOV9yZWxlYXNlX3JlcV9wYWdlcyhycCk7Ci0JCQkJaWYgKHJwLT5ycF9hbGxvYykKLQkJCQkJa2ZyZWUocnApOwotCQkJCXJlcS0+dGMtPnByaXZhdGUgPSBOVUxMOwotCQkJfQotCQkJcDlfY2xpZW50X2NiKGNoYW4tPmNsaWVudCwgcmVxKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOwogCQl9Ci0JfSB3aGlsZSAocmMgIT0gTlVMTCk7CisKKwkJY2hhbi0+cmluZ19idWZzX2F2YWlsID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCQkvKiBXYWtldXAgaWYgYW55b25lIHdhaXRpbmcgZm9yIFZpcnRJTyByaW5nIHNwYWNlLiAqLworCQl3YWtlX3VwKGNoYW4tPnZjX3dxKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogcmMgJXBcbiIsIHJjKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogbG9va3VwIHRhZyAlZFxuIiwgcmMtPnRhZyk7CisJCXJlcSA9IHA5X3RhZ19sb29rdXAoY2hhbi0+Y2xpZW50LCByYy0+dGFnKTsKKwkJaWYgKHJlcS0+dGMtPnByaXZhdGUpIHsKKwkJCXN0cnVjdCB0cmFuc19ycGFnZV9pbmZvICpycCA9IHJlcS0+dGMtPnByaXZhdGU7CisJCQlpbnQgcCA9IHJwLT5ycF9ucl9wYWdlczsKKwkJCS8qUmVsZWFzZSBwYWdlcyAqLworCQkJcDlfcmVsZWFzZV9yZXFfcGFnZXMocnApOworCQkJYXRvbWljX3N1YihwLCAmdnBfcGlubmVkKTsKKwkJCXdha2VfdXAoJnZwX3dxKTsKKwkJCWlmIChycC0+cnBfYWxsb2MpCisJCQkJa2ZyZWUocnApOworCQkJcmVxLT50Yy0+cHJpdmF0ZSA9IE5VTEw7CisJCX0KKwkJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX1JDVkQ7CisJCXA5X2NsaWVudF9jYihjaGFuLT5jbGllbnQsIHJlcSk7CisJfQogfQogCiAvKioKQEAgLTI2Myw3ICsyNzEsNiBAQAogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjlwIGRlYnVnOiB2aXJ0aW8gcmVxdWVzdFxuIik7CiAKLXJlcV9yZXRyeToKIAlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfU0VOVDsKIAogCWlmIChyZXEtPnRjLT5wYnVmX3NpemUgJiYgKHJlcS0+dGMtPnB1YnVmICYmIFA5X0lTX1VTRVJfQ09OVEVYVCkpIHsKQEAgLTI3MSw2ICsyNzgsMTQgQEAKIAkJaW50IHJwaW5mb19zaXplID0gc2l6ZW9mKHN0cnVjdCB0cmFuc19ycGFnZV9pbmZvKSArCiAJCQlzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9wYWdlczsKIAorCQlpZiAoYXRvbWljX3JlYWQoJnZwX3Bpbm5lZCkgPj0gY2hhbi0+cDlfbWF4X3BhZ2VzKSB7CisJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodnBfd3EsCisJCQkJYXRvbWljX3JlYWQoJnZwX3Bpbm5lZCkgPCBjaGFuLT5wOV9tYXhfcGFnZXMpOworCQkJaWYgKGVyciAgPT0gLUVSRVNUQVJUU1lTKQorCQkJCXJldHVybiBlcnI7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOXA6IE1heSBndXAgcGFnZXMgbm93LlxuIik7CisJCX0KKwogCQlpZiAocnBpbmZvX3NpemUgPD0gKHJlcS0+dGMtPmNhcGFjaXR5IC0gcmVxLT50Yy0+c2l6ZSkpIHsKIAkJCS8qIFdlIGNhbiB1c2Ugc2RhdGEgKi8KIAkJCXJlcS0+dGMtPnByaXZhdGUgPSByZXEtPnRjLT5zZGF0YSArIHJlcS0+dGMtPnNpemU7CkBAIC0yOTMsOSArMzA4LDEyIEBACiAJCQlpZiAocnBpbmZvLT5ycF9hbGxvYykKIAkJCQlrZnJlZShycGluZm8pOwogCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlIHsKKwkJCWF0b21pY19hZGQocnBpbmZvLT5ycF9ucl9wYWdlcywgJnZwX3Bpbm5lZCk7CiAJCX0KIAl9CiAKK3JlcV9yZXRyeV9waW5uZWQ6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKIAogCS8qIEhhbmRsZSBvdXQgVmlydElPIHJpbmcgYnVmZmVycyAqLwpAQCAtMzU2LDcgKzM3NCw3IEBACiAJCQkJcmV0dXJuIGVycjsKIAogCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjlwOlJldHJ5IHZpcnRpbyByZXF1ZXN0XG4iKTsKLQkJCWdvdG8gcmVxX3JldHJ5OworCQkJZ290byByZXFfcmV0cnlfcGlubmVkOwogCQl9IGVsc2UgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9jaywgZmxhZ3MpOwogCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywKQEAgLTQ1Myw2ICs0NzEsOCBAQAogCX0KIAlpbml0X3dhaXRxdWV1ZV9oZWFkKGNoYW4tPnZjX3dxKTsKIAljaGFuLT5yaW5nX2J1ZnNfYXZhaWwgPSAxOworCS8qIENlaWxpbmcgbGltaXQgdG8gYXZvaWQgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrcyAqLworCWNoYW4tPnA5X21heF9wYWdlcyA9IG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCkvNDsKIAogCW11dGV4X2xvY2soJnZpcnRpb185cF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZjaGFuLT5jaGFuX2xpc3QsICZ2aXJ0aW9fY2hhbl9saXN0KTsKZGlmZiAtLWdpdCBhL25ldC85cC91dGlsLmMgYi9uZXQvOXAvdXRpbC5jCmluZGV4IGUwNDg3MDEuLmI4NDYxOWIgMTAwNjQ0Ci0tLSBhL25ldC85cC91dGlsLmMKKysrIGIvbmV0LzlwL3V0aWwuYwpAQCAtOTIsNyArOTIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIHJldHJ5OgotCWlmIChpZHJfcHJlX2dldCgmcC0+cG9vbCwgR0ZQX0tFUk5FTCkgPT0gMCkKKwlpZiAoaWRyX3ByZV9nZXQoJnAtPnBvb2wsIEdGUF9OT0ZTKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCAzZDRmNGIwLi4yMDZlNzcxIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTEwNTEsNiArMTA1MSw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKKwlzb2NrX2hvbGQoc2spOwogCWxvY2tfc29jayhzayk7CiAJaWYgKHNrKSB7CiAJCXNvY2tfb3JwaGFuKHNrKTsKQEAgLTEwNTgsNiArMTA1OSw4IEBACiAJCWF0YWxrX2Rlc3Ryb3lfc29ja2V0KHNrKTsKIAl9CiAJcmVsZWFzZV9zb2NrKHNrKTsKKwlzb2NrX3B1dChzayk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggMjQyOWNhMi4uNWVjMTI5NyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KQEAgLTMxNiwyNCArMzE3LDE0NCBAQAogCXJldHVybiBoaWRwX3F1ZXVlX3JlcG9ydChzZXNzaW9uLCBidWYsIHJzaXplKTsKIH0KIAotc3RhdGljIGludCBoaWRwX291dHB1dF9yYXdfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBjb3VudCwKK3N0YXRpYyBpbnQgaGlkcF9nZXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLAorCQl1bnNpZ25lZCBjaGFyIHJlcG9ydF9udW1iZXIsCisJCXVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBjb3VudCwKIAkJdW5zaWduZWQgY2hhciByZXBvcnRfdHlwZSkKIHsKKwlzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uID0gaGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNpemVfdCBsZW47CisJaW50IG51bWJlcmVkX3JlcG9ydHMgPSBoaWQtPnJlcG9ydF9lbnVtW3JlcG9ydF90eXBlXS5udW1iZXJlZDsKKwogCXN3aXRjaCAocmVwb3J0X3R5cGUpIHsKIAljYXNlIEhJRF9GRUFUVVJFX1JFUE9SVDoKLQkJcmVwb3J0X3R5cGUgPSBISURQX1RSQU5TX1NFVF9SRVBPUlQgfCBISURQX0RBVEFfUlRZUEVfRkVBVFVSRTsKKwkJcmVwb3J0X3R5cGUgPSBISURQX1RSQU5TX0dFVF9SRVBPUlQgfCBISURQX0RBVEFfUlRZUEVfRkVBVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBISURfSU5QVVRfUkVQT1JUOgorCQlyZXBvcnRfdHlwZSA9IEhJRFBfVFJBTlNfR0VUX1JFUE9SVCB8IEhJRFBfREFUQV9SVFlQRV9JTlBVVDsKIAkJYnJlYWs7CiAJY2FzZSBISURfT1VUUFVUX1JFUE9SVDoKLQkJcmVwb3J0X3R5cGUgPSBISURQX1RSQU5TX0RBVEEgfCBISURQX0RBVEFfUlRZUEVfT1VQVVQ7CisJCXJlcG9ydF90eXBlID0gSElEUF9UUkFOU19HRVRfUkVQT1JUIHwgSElEUF9EQVRBX1JUWVBFX09VUFVUOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzZXNzaW9uLT5yZXBvcnRfbXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogU2V0IHVwIG91ciB3YWl0LCBhbmQgc2VuZCB0aGUgcmVwb3J0IHJlcXVlc3QgdG8gdGhlIGRldmljZS4gKi8KKwlzZXNzaW9uLT53YWl0aW5nX3JlcG9ydF90eXBlID0gcmVwb3J0X3R5cGUgJiBISURQX0RBVEFfUlRZUEVfTUFTSzsKKwlzZXNzaW9uLT53YWl0aW5nX3JlcG9ydF9udW1iZXIgPSBudW1iZXJlZF9yZXBvcnRzID8gcmVwb3J0X251bWJlciA6IC0xOworCXNldF9iaXQoSElEUF9XQUlUSU5HX0ZPUl9SRVRVUk4sICZzZXNzaW9uLT5mbGFncyk7CisJZGF0YVswXSA9IHJlcG9ydF9udW1iZXI7CisJaWYgKGhpZHBfc2VuZF9jdHJsX21lc3NhZ2UoaGlkLT5kcml2ZXJfZGF0YSwgcmVwb3J0X3R5cGUsIGRhdGEsIDEpKQorCQlnb3RvIGVycl9laW87CisKKwkvKiBXYWl0IGZvciB0aGUgcmV0dXJuIG9mIHRoZSByZXBvcnQuIFRoZSByZXR1cm5lZCByZXBvcnQKKwkgICBnZXRzIHB1dCBpbiBzZXNzaW9uLT5yZXBvcnRfcmV0dXJuLiAgKi8KKwl3aGlsZSAodGVzdF9iaXQoSElEUF9XQUlUSU5HX0ZPUl9SRVRVUk4sICZzZXNzaW9uLT5mbGFncykpIHsKKwkJaW50IHJlczsKKworCQlyZXMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzZXNzaW9uLT5yZXBvcnRfcXVldWUsCisJCQkhdGVzdF9iaXQoSElEUF9XQUlUSU5HX0ZPUl9SRVRVUk4sICZzZXNzaW9uLT5mbGFncyksCisJCQk1KkhaKTsKKwkJaWYgKHJlcyA9PSAwKSB7CisJCQkvKiB0aW1lb3V0ICovCisJCQlnb3RvIGVycl9laW87CisJCX0KKwkJaWYgKHJlcyA8IDApIHsKKwkJCS8qIHNpZ25hbCAqLworCQkJZ290byBlcnJfcmVzdGFydHN5czsKKwkJfQorCX0KKworCXNrYiA9IHNlc3Npb24tPnJlcG9ydF9yZXR1cm47CisJaWYgKHNrYikgeworCQlsZW4gPSBza2ItPmxlbiA8IGNvdW50ID8gc2tiLT5sZW4gOiBjb3VudDsKKwkJbWVtY3B5KGRhdGEsIHNrYi0+ZGF0YSwgbGVuKTsKKworCQlrZnJlZV9za2Ioc2tiKTsKKwkJc2Vzc2lvbi0+cmVwb3J0X3JldHVybiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogRGV2aWNlIHJldHVybmVkIGEgSEFORFNIQUtFLCBpbmRpY2F0aW5nICBwcm90b2NvbCBlcnJvci4gKi8KKwkJbGVuID0gLUVJTzsKKwl9CisKKwljbGVhcl9iaXQoSElEUF9XQUlUSU5HX0ZPUl9SRVRVUk4sICZzZXNzaW9uLT5mbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5yZXBvcnRfbXV0ZXgpOworCisJcmV0dXJuIGxlbjsKKworZXJyX3Jlc3RhcnRzeXM6CisJY2xlYXJfYml0KEhJRFBfV0FJVElOR19GT1JfUkVUVVJOLCAmc2Vzc2lvbi0+ZmxhZ3MpOworCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+cmVwb3J0X211dGV4KTsKKwlyZXR1cm4gLUVSRVNUQVJUU1lTOworZXJyX2VpbzoKKwljbGVhcl9iaXQoSElEUF9XQUlUSU5HX0ZPUl9SRVRVUk4sICZzZXNzaW9uLT5mbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5yZXBvcnRfbXV0ZXgpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGhpZHBfb3V0cHV0X3Jhd19yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50LAorCQl1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQoreworCXN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24gPSBoaWQtPmRyaXZlcl9kYXRhOworCWludCByZXQ7CisKKwlzd2l0Y2ggKHJlcG9ydF90eXBlKSB7CisJY2FzZSBISURfRkVBVFVSRV9SRVBPUlQ6CisJCXJlcG9ydF90eXBlID0gSElEUF9UUkFOU19TRVRfUkVQT1JUIHwgSElEUF9EQVRBX1JUWVBFX0ZFQVRVUkU7CisJCWJyZWFrOworCWNhc2UgSElEX09VVFBVVF9SRVBPUlQ6CisJCXJlcG9ydF90eXBlID0gSElEUF9UUkFOU19TRVRfUkVQT1JUIHwgSElEUF9EQVRBX1JUWVBFX09VUFVUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzZXNzaW9uLT5yZXBvcnRfbXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogU2V0IHVwIG91ciB3YWl0LCBhbmQgc2VuZCB0aGUgcmVwb3J0IHJlcXVlc3QgdG8gdGhlIGRldmljZS4gKi8KKwlzZXRfYml0KEhJRFBfV0FJVElOR19GT1JfU0VORF9BQ0ssICZzZXNzaW9uLT5mbGFncyk7CiAJaWYgKGhpZHBfc2VuZF9jdHJsX21lc3NhZ2UoaGlkLT5kcml2ZXJfZGF0YSwgcmVwb3J0X3R5cGUsCi0JCQlkYXRhLCBjb3VudCkpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiBjb3VudDsKKwkJCWRhdGEsIGNvdW50KSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBXYWl0IGZvciB0aGUgQUNLIGZyb20gdGhlIGRldmljZS4gKi8KKwl3aGlsZSAodGVzdF9iaXQoSElEUF9XQUlUSU5HX0ZPUl9TRU5EX0FDSywgJnNlc3Npb24tPmZsYWdzKSkgeworCQlpbnQgcmVzOworCisJCXJlcyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHNlc3Npb24tPnJlcG9ydF9xdWV1ZSwKKwkJCSF0ZXN0X2JpdChISURQX1dBSVRJTkdfRk9SX1NFTkRfQUNLLCAmc2Vzc2lvbi0+ZmxhZ3MpLAorCQkJMTAqSFopOworCQlpZiAocmVzID09IDApIHsKKwkJCS8qIHRpbWVvdXQgKi8KKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGVycjsKKwkJfQorCQlpZiAocmVzIDwgMCkgeworCQkJLyogc2lnbmFsICovCisJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWlmICghc2Vzc2lvbi0+b3V0cHV0X3JlcG9ydF9zdWNjZXNzKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGNvdW50OworCitlcnI6CisJY2xlYXJfYml0KEhJRFBfV0FJVElOR19GT1JfU0VORF9BQ0ssICZzZXNzaW9uLT5mbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5yZXBvcnRfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGhpZHBfaWRsZV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtMzYwLDE2ICs0ODEsMjIgQEAKIAkJCQkJdW5zaWduZWQgY2hhciBwYXJhbSkKIHsKIAlCVF9EQkcoInNlc3Npb24gJXAgcGFyYW0gMHglMDJ4Iiwgc2Vzc2lvbiwgcGFyYW0pOworCXNlc3Npb24tPm91dHB1dF9yZXBvcnRfc3VjY2VzcyA9IDA7IC8qIGRlZmF1bHQgY29uZGl0aW9uICovCiAKIAlzd2l0Y2ggKHBhcmFtKSB7CiAJY2FzZSBISURQX0hTSEtfU1VDQ0VTU0ZVTDoKIAkJLyogRklYTUU6IENhbGwgaW50byBTRVRfIEdFVF8gaGFuZGxlcnMgaGVyZSAqLworCQlzZXNzaW9uLT5vdXRwdXRfcmVwb3J0X3N1Y2Nlc3MgPSAxOwogCQlicmVhazsKIAogCWNhc2UgSElEUF9IU0hLX05PVF9SRUFEWToKIAljYXNlIEhJRFBfSFNIS19FUlJfSU5WQUxJRF9SRVBPUlRfSUQ6CiAJY2FzZSBISURQX0hTSEtfRVJSX1VOU1VQUE9SVEVEX1JFUVVFU1Q6CiAJY2FzZSBISURQX0hTSEtfRVJSX0lOVkFMSURfUEFSQU1FVEVSOgorCQlpZiAodGVzdF9iaXQoSElEUF9XQUlUSU5HX0ZPUl9SRVRVUk4sICZzZXNzaW9uLT5mbGFncykpIHsKKwkJCWNsZWFyX2JpdChISURQX1dBSVRJTkdfRk9SX1JFVFVSTiwgJnNlc3Npb24tPmZsYWdzKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2Vzc2lvbi0+cmVwb3J0X3F1ZXVlKTsKKwkJfQogCQkvKiBGSVhNRTogQ2FsbCBpbnRvIFNFVF8gR0VUXyBoYW5kbGVycyBoZXJlICovCiAJCWJyZWFrOwogCkBAIC0zODgsNiArNTE1LDEyIEBACiAJCQlISURQX1RSQU5TX0hBTkRTSEFLRSB8IEhJRFBfSFNIS19FUlJfSU5WQUxJRF9QQVJBTUVURVIsIE5VTEwsIDApOwogCQlicmVhazsKIAl9CisKKwkvKiBXYWtlIHVwIHRoZSB3YWl0aW5nIHRocmVhZC4gKi8KKwlpZiAodGVzdF9iaXQoSElEUF9XQUlUSU5HX0ZPUl9TRU5EX0FDSywgJnNlc3Npb24tPmZsYWdzKSkgeworCQljbGVhcl9iaXQoSElEUF9XQUlUSU5HX0ZPUl9TRU5EX0FDSywgJnNlc3Npb24tPmZsYWdzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZXNzaW9uLT5yZXBvcnRfcXVldWUpOworCX0KIH0KIAogc3RhdGljIHZvaWQgaGlkcF9wcm9jZXNzX2hpZF9jb250cm9sKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCkBAIC00MDYsOSArNTM5LDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBoaWRwX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorLyogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXNzZWQtaW4gc2tiIHNob3VsZCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLiAqLworc3RhdGljIGludCBoaWRwX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXVuc2lnbmVkIGNoYXIgcGFyYW0pCiB7CisJaW50IGRvbmVfd2l0aF9za2IgPSAxOwogCUJUX0RCRygic2Vzc2lvbiAlcCBza2IgJXAgbGVuICVkIHBhcmFtIDB4JTAyeCIsIHNlc3Npb24sIHNrYiwgc2tiLT5sZW4sIHBhcmFtKTsKIAogCXN3aXRjaCAocGFyYW0pIHsKQEAgLTQyMCw3ICs1NTUsNiBAQAogCiAJCWlmIChzZXNzaW9uLT5oaWQpCiAJCQloaWRfaW5wdXRfcmVwb3J0KHNlc3Npb24tPmhpZCwgSElEX0lOUFVUX1JFUE9SVCwgc2tiLT5kYXRhLCBza2ItPmxlbiwgMCk7Ci0KIAkJYnJlYWs7CiAKIAljYXNlIEhJRFBfREFUQV9SVFlQRV9PVEhFUjoKQEAgLTQzMiwxMiArNTY2LDI3IEBACiAJCV9faGlkcF9zZW5kX2N0cmxfbWVzc2FnZShzZXNzaW9uLAogCQkJSElEUF9UUkFOU19IQU5EU0hBS0UgfCBISURQX0hTSEtfRVJSX0lOVkFMSURfUEFSQU1FVEVSLCBOVUxMLCAwKTsKIAl9CisKKwlpZiAodGVzdF9iaXQoSElEUF9XQUlUSU5HX0ZPUl9SRVRVUk4sICZzZXNzaW9uLT5mbGFncykgJiYKKwkJCQlwYXJhbSA9PSBzZXNzaW9uLT53YWl0aW5nX3JlcG9ydF90eXBlKSB7CisJCWlmIChzZXNzaW9uLT53YWl0aW5nX3JlcG9ydF9udW1iZXIgPCAwIHx8CisJCSAgICBzZXNzaW9uLT53YWl0aW5nX3JlcG9ydF9udW1iZXIgPT0gc2tiLT5kYXRhWzBdKSB7CisJCQkvKiBoaWRwX2dldF9yYXdfcmVwb3J0KCkgaXMgd2FpdGluZyBvbiB0aGlzIHJlcG9ydC4gKi8KKwkJCXNlc3Npb24tPnJlcG9ydF9yZXR1cm4gPSBza2I7CisJCQlkb25lX3dpdGhfc2tiID0gMDsKKwkJCWNsZWFyX2JpdChISURQX1dBSVRJTkdfRk9SX1JFVFVSTiwgJnNlc3Npb24tPmZsYWdzKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2Vzc2lvbi0+cmVwb3J0X3F1ZXVlKTsKKwkJfQorCX0KKworCXJldHVybiBkb25lX3dpdGhfc2tiOwogfQogCiBzdGF0aWMgdm9pZCBoaWRwX3JlY3ZfY3RybF9mcmFtZShzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXVuc2lnbmVkIGNoYXIgaGRyLCB0eXBlLCBwYXJhbTsKKwlpbnQgZnJlZV9za2IgPSAxOwogCiAJQlRfREJHKCJzZXNzaW9uICVwIHNrYiAlcCBsZW4gJWQiLCBzZXNzaW9uLCBza2IsIHNrYi0+bGVuKTsKIApAQCAtNDU3LDcgKzYwNiw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBISURQX1RSQU5TX0RBVEE6Ci0JCWhpZHBfcHJvY2Vzc19kYXRhKHNlc3Npb24sIHNrYiwgcGFyYW0pOworCQlmcmVlX3NrYiA9IGhpZHBfcHJvY2Vzc19kYXRhKHNlc3Npb24sIHNrYiwgcGFyYW0pOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00NjYsNyArNjE1LDggQEAKIAkJYnJlYWs7CiAJfQogCi0Ja2ZyZWVfc2tiKHNrYik7CisJaWYgKGZyZWVfc2tiKQorCQlrZnJlZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgaGlkcF9yZWN2X2ludHJfZnJhbWUoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwKQEAgLTU2Niw2ICs3MTYsOCBAQAogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZpbnRyX3dhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKGN0cmxfc2spLCAmY3RybF93YWl0KTsKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChpbnRyX3NrKSwgJmludHJfd2FpdCk7CisJc2Vzc2lvbi0+d2FpdGluZ19mb3Jfc3RhcnR1cCA9IDA7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZXNzaW9uLT5zdGFydHVwX3F1ZXVlKTsKIAl3aGlsZSAoIWF0b21pY19yZWFkKCZzZXNzaW9uLT50ZXJtaW5hdGUpKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKQEAgLTc1Nyw2ICs5MDksOCBAQAogCS5oaWRpbnB1dF9pbnB1dF9ldmVudCA9IGhpZHBfaGlkaW5wdXRfZXZlbnQsCiB9OwogCisvKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGhpZCBkZXZpY2UuIEl0IGRvZXMgbm90IGFkZCBpdAorICAgdG8gdGhlIEhJRCBzeXN0ZW0uIFRoYXQgaXMgZG9uZSBpbiBoaWRwX2FkZF9jb25uZWN0aW9uKCkuICovCiBzdGF0aWMgaW50IGhpZHBfc2V0dXBfaGlkKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJc3RydWN0IGhpZHBfY29ubmFkZF9yZXEgKnJlcSkKIHsKQEAgLTc5NiwxOCArOTUwLDExIEBACiAJaGlkLT5kZXYucGFyZW50ID0gaGlkcF9nZXRfZGV2aWNlKHNlc3Npb24pOwogCWhpZC0+bGxfZHJpdmVyID0gJmhpZHBfaGlkX2RyaXZlcjsKIAorCWhpZC0+aGlkX2dldF9yYXdfcmVwb3J0ID0gaGlkcF9nZXRfcmF3X3JlcG9ydDsKIAloaWQtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydCA9IGhpZHBfb3V0cHV0X3Jhd19yZXBvcnQ7CiAKLQllcnIgPSBoaWRfYWRkX2RldmljZShoaWQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGZhaWxlZDsKLQogCXJldHVybiAwOwogCi1mYWlsZWQ6Ci0JaGlkX2Rlc3Ryb3lfZGV2aWNlKGhpZCk7Ci0Jc2Vzc2lvbi0+aGlkID0gTlVMTDsKLQogZmF1bHQ6CiAJa2ZyZWUoc2Vzc2lvbi0+cmRfZGF0YSk7CiAJc2Vzc2lvbi0+cmRfZGF0YSA9IE5VTEw7CkBAIC04NTYsNiArMTAwMywxMCBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNlc3Npb24tPmN0cmxfdHJhbnNtaXQpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNlc3Npb24tPmludHJfdHJhbnNtaXQpOwogCisJbXV0ZXhfaW5pdCgmc2Vzc2lvbi0+cmVwb3J0X211dGV4KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZXNzaW9uLT5yZXBvcnRfcXVldWUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlc3Npb24tPnN0YXJ0dXBfcXVldWUpOworCXNlc3Npb24tPndhaXRpbmdfZm9yX3N0YXJ0dXAgPSAxOwogCXNlc3Npb24tPmZsYWdzICAgPSByZXEtPmZsYWdzICYgKDEgPDwgSElEUF9CTFVFVE9PVEhfVkVORE9SX0lEKTsKIAlzZXNzaW9uLT5pZGxlX3RvID0gcmVxLT5pZGxlX3RvOwogCkBAIC04NzgsNiArMTAyOSwxNCBAQAogCWVyciA9IGtlcm5lbF90aHJlYWQoaGlkcF9zZXNzaW9uLCBzZXNzaW9uLCBDTE9ORV9LRVJORUwpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHVubGluazsKKwl3aGlsZSAoc2Vzc2lvbi0+d2FpdGluZ19mb3Jfc3RhcnR1cCkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc2Vzc2lvbi0+c3RhcnR1cF9xdWV1ZSwKKwkJCSFzZXNzaW9uLT53YWl0aW5nX2Zvcl9zdGFydHVwKTsKKwl9CisKKwllcnIgPSBoaWRfYWRkX2RldmljZShzZXNzaW9uLT5oaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9hZGRfZGV2aWNlOwogCiAJaWYgKHNlc3Npb24tPmlucHV0KSB7CiAJCWhpZHBfc2VuZF9jdHJsX21lc3NhZ2Uoc2Vzc2lvbiwKQEAgLTg5MSw2ICsxMDUwLDEyIEBACiAJdXBfd3JpdGUoJmhpZHBfc2Vzc2lvbl9zZW0pOwogCXJldHVybiAwOwogCitlcnJfYWRkX2RldmljZToKKwloaWRfZGVzdHJveV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKKwlzZXNzaW9uLT5oaWQgPSBOVUxMOworCWF0b21pY19pbmMoJnNlc3Npb24tPnRlcm1pbmF0ZSk7CisJaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKKwogdW5saW5rOgogCWhpZHBfZGVsX3RpbWVyKHNlc3Npb24pOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oIGIvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaAppbmRleCA4ZDkzNGExLi4xM2RlNWZhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKQEAgLTgwLDYgKzgwLDggQEAKICNkZWZpbmUgSElEUF9WSVJUVUFMX0NBQkxFX1VOUExVRwkwCiAjZGVmaW5lIEhJRFBfQk9PVF9QUk9UT0NPTF9NT0RFCQkxCiAjZGVmaW5lIEhJRFBfQkxVRVRPT1RIX1ZFTkRPUl9JRAk5CisjZGVmaW5lCUhJRFBfV0FJVElOR19GT1JfUkVUVVJOCQkxMAorI2RlZmluZSBISURQX1dBSVRJTkdfRk9SX1NFTkRfQUNLCTExCiAKIHN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxIHsKIAlpbnQgICBjdHJsX3NvY2s7CS8vIENvbm5lY3RlZCBjb250cm9sIHNvY2tldApAQCAtMTU0LDkgKzE1NiwyMiBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgY3RybF90cmFuc21pdDsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGludHJfdHJhbnNtaXQ7CiAKKwkvKiBVc2VkIGluIGhpZHBfZ2V0X3Jhd19yZXBvcnQoKSAqLworCWludCB3YWl0aW5nX3JlcG9ydF90eXBlOyAvKiBISURQX0RBVEFfUlRZUEVfKiAqLworCWludCB3YWl0aW5nX3JlcG9ydF9udW1iZXI7IC8qIC0xIGZvciBub3QgbnVtYmVyZWQgKi8KKwlzdHJ1Y3QgbXV0ZXggcmVwb3J0X211dGV4OworCXN0cnVjdCBza19idWZmICpyZXBvcnRfcmV0dXJuOworCXdhaXRfcXVldWVfaGVhZF90IHJlcG9ydF9xdWV1ZTsKKworCS8qIFVzZWQgaW4gaGlkcF9vdXRwdXRfcmF3X3JlcG9ydCgpICovCisJaW50IG91dHB1dF9yZXBvcnRfc3VjY2VzczsgLyogYm9vbGVhbiAqLworCiAJLyogUmVwb3J0IGRlc2NyaXB0b3IgKi8KIAlfX3U4ICpyZF9kYXRhOwogCXVpbnQgcmRfc2l6ZTsKKworCXdhaXRfcXVldWVfaGVhZF90IHN0YXJ0dXBfcXVldWU7CisJaW50IHdhaXRpbmdfZm9yX3N0YXJ0dXA7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGlkcF9zY2hlZHVsZShzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggZjk3YWY1NTkuLjAwOGZmNmMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtNzM5LDYgKzczOSw5IEBACiAJCW5mX2JyaWRnZS0+bWFzayB8PSBCUk5GX1BLVF9UWVBFOwogCX0KIAorCWlmIChicl9wYXJzZV9pcF9vcHRpb25zKHNrYikpCisJCXJldHVybiBORl9EUk9QOworCiAJLyogVGhlIHBoeXNkZXYgbW9kdWxlIGNoZWNrcyBvbiB0aGlzICovCiAJbmZfYnJpZGdlLT5tYXNrIHw9IEJSTkZfQlJJREdFRDsKIAluZl9icmlkZ2UtPnBoeXNvdXRkZXYgPSBza2ItPmRldjsKZGlmZiAtLWdpdCBhL25ldC9jZXBoL2FybW9yLmMgYi9uZXQvY2VwaC9hcm1vci5jCmluZGV4IGViMmE2NjYuLjFmYzFlZTEgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL2FybW9yLmMKKysrIGIvbmV0L2NlcGgvYXJtb3IuYwpAQCAtNzgsOCArNzgsMTAgQEAKIAl3aGlsZSAoc3JjIDwgZW5kKSB7CiAJCWludCBhLCBiLCBjLCBkOwogCi0JCWlmIChzcmMgPCBlbmQgJiYgc3JjWzBdID09ICdcbicpCisJCWlmIChzcmNbMF0gPT0gJ1xuJykgewogCQkJc3JjKys7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoc3JjICsgNCA+IGVuZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlhID0gZGVjb2RlX2JpdHMoc3JjWzBdKTsKZGlmZiAtLWdpdCBhL25ldC9jZXBoL2NlcGhfY29tbW9uLmMgYi9uZXQvY2VwaC9jZXBoX2NvbW1vbi5jCmluZGV4IGYzZTRhMTMuLjk1Zjk2YWIgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL2NlcGhfY29tbW9uLmMKKysrIGIvbmV0L2NlcGgvY2VwaF9jb21tb24uYwpAQCAtNjIsNiArNjIsNyBAQAogCWNhc2UgQ0VQSF9NU0dfT1NEX01BUDogcmV0dXJuICJvc2RfbWFwIjsKIAljYXNlIENFUEhfTVNHX09TRF9PUDogcmV0dXJuICJvc2Rfb3AiOwogCWNhc2UgQ0VQSF9NU0dfT1NEX09QUkVQTFk6IHJldHVybiAib3NkX29wcmVwbHkiOworCWNhc2UgQ0VQSF9NU0dfV0FUQ0hfTk9USUZZOiByZXR1cm4gIndhdGNoX25vdGlmeSI7CiAJZGVmYXVsdDogcmV0dXJuICJ1bmtub3duIjsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9vc2RfY2xpZW50LmMgYi9uZXQvY2VwaC9vc2RfY2xpZW50LmMKaW5kZXggM2UyMGExMi4uMDIyMTJlZCAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvb3NkX2NsaWVudC5jCisrKyBiL25ldC9jZXBoL29zZF9jbGllbnQuYwpAQCAtMjIsMTAgKzIyLDE1IEBACiAjZGVmaW5lIE9TRF9PUFJFUExZX0ZST05UX0xFTgk1MTIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb25fb3BlcmF0aW9ucyBvc2RfY29uX29wczsKLXN0YXRpYyBpbnQgX19raWNrX3JlcXVlc3RzKHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsCi0JCQkgIHN0cnVjdCBjZXBoX29zZCAqa2lja29zZCk7CiAKLXN0YXRpYyB2b2lkIGtpY2tfcmVxdWVzdHMoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywgc3RydWN0IGNlcGhfb3NkICpvc2QpOworc3RhdGljIHZvaWQgc2VuZF9xdWV1ZWQoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYyk7CitzdGF0aWMgaW50IF9fcmVzZXRfb3NkKHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsIHN0cnVjdCBjZXBoX29zZCAqb3NkKTsKK3N0YXRpYyB2b2lkIF9fcmVnaXN0ZXJfcmVxdWVzdChzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjLAorCQkJICAgICAgIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpOworc3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX2xpbmdlcl9yZXF1ZXN0KHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsCisJCQkJCXN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpOworc3RhdGljIGludCBfX3NlbmRfcmVxdWVzdChzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjLAorCQkJICBzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxKTsKIAogc3RhdGljIGludCBvcF9uZWVkc190cmFpbChpbnQgb3ApCiB7CkBAIC0zNCw2ICszOSw3IEBACiAJY2FzZSBDRVBIX09TRF9PUF9TRVRYQVRUUjoKIAljYXNlIENFUEhfT1NEX09QX0NNUFhBVFRSOgogCWNhc2UgQ0VQSF9PU0RfT1BfQ0FMTDoKKwljYXNlIENFUEhfT1NEX09QX05PVElGWToKIAkJcmV0dXJuIDE7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CkBAIC0yMDksNiArMjE1LDggQEAKIAlpbml0X2NvbXBsZXRpb24oJnJlcS0+cl9jb21wbGV0aW9uKTsKIAlpbml0X2NvbXBsZXRpb24oJnJlcS0+cl9zYWZlX2NvbXBsZXRpb24pOwogCUlOSVRfTElTVF9IRUFEKCZyZXEtPnJfdW5zYWZlX2l0ZW0pOworCUlOSVRfTElTVF9IRUFEKCZyZXEtPnJfbGluZ2VyX2l0ZW0pOworCUlOSVRfTElTVF9IRUFEKCZyZXEtPnJfbGluZ2VyX29zZCk7CiAJcmVxLT5yX2ZsYWdzID0gZmxhZ3M7CiAKIAlXQVJOX09OKChmbGFncyAmIChDRVBIX09TRF9GTEFHX1JFQUR8Q0VQSF9PU0RfRkxBR19XUklURSkpID09IDApOwpAQCAtMzE1LDYgKzMyMywyNCBAQAogCQlicmVhazsKIAljYXNlIENFUEhfT1NEX09QX1NUQVJUU1lOQzoKIAkJYnJlYWs7CisJY2FzZSBDRVBIX09TRF9PUF9OT1RJRlk6CisJCXsKKwkJCV9fbGUzMiBwcm90X3ZlciA9IGNwdV90b19sZTMyKHNyYy0+d2F0Y2gucHJvdF92ZXIpOworCQkJX19sZTMyIHRpbWVvdXQgPSBjcHVfdG9fbGUzMihzcmMtPndhdGNoLnRpbWVvdXQpOworCisJCQlCVUdfT04oIXJlcS0+cl90cmFpbCk7CisKKwkJCWNlcGhfcGFnZWxpc3RfYXBwZW5kKHJlcS0+cl90cmFpbCwKKwkJCQkJCSZwcm90X3Zlciwgc2l6ZW9mKHByb3RfdmVyKSk7CisJCQljZXBoX3BhZ2VsaXN0X2FwcGVuZChyZXEtPnJfdHJhaWwsCisJCQkJCQkmdGltZW91dCwgc2l6ZW9mKHRpbWVvdXQpKTsKKwkJfQorCWNhc2UgQ0VQSF9PU0RfT1BfTk9USUZZX0FDSzoKKwljYXNlIENFUEhfT1NEX09QX1dBVENIOgorCQlkc3QtPndhdGNoLmNvb2tpZSA9IGNwdV90b19sZTY0KHNyYy0+d2F0Y2guY29va2llKTsKKwkJZHN0LT53YXRjaC52ZXIgPSBjcHVfdG9fbGU2NChzcmMtPndhdGNoLnZlcik7CisJCWRzdC0+d2F0Y2guZmxhZyA9IHNyYy0+d2F0Y2guZmxhZzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCJ1bnJlY29nbml6ZWQgb3NkIG9wY29kZSAlZFxuIiwgZHN0LT5vcCk7CiAJCVdBUk5fT04oMSk7CkBAIC01MjksNiArNTU1LDQ1IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBSZXN1Ym1pdCByZXF1ZXN0cyBwZW5kaW5nIG9uIHRoZSBnaXZlbiBvc2QuCisgKi8KK3N0YXRpYyB2b2lkIF9fa2lja19vc2RfcmVxdWVzdHMoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCQlzdHJ1Y3QgY2VwaF9vc2QgKm9zZCkKK3sKKwlzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxLCAqbnJlcTsKKwlpbnQgZXJyOworCisJZG91dCgiX19raWNrX29zZF9yZXF1ZXN0cyBvc2QlZFxuIiwgb3NkLT5vX29zZCk7CisJZXJyID0gX19yZXNldF9vc2Qob3NkYywgb3NkKTsKKwlpZiAoZXJyID09IC1FQUdBSU4pCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmb3NkLT5vX3JlcXVlc3RzLCByX29zZF9pdGVtKSB7CisJCWxpc3RfbW92ZSgmcmVxLT5yX3JlcV9scnVfaXRlbSwgJm9zZGMtPnJlcV91bnNlbnQpOworCQlkb3V0KCJyZXF1ZXVlZCAlcCB0aWQgJWxsdSBvc2QlZFxuIiwgcmVxLCByZXEtPnJfdGlkLAorCQkgICAgIG9zZC0+b19vc2QpOworCQlpZiAoIXJlcS0+cl9saW5nZXIpCisJCQlyZXEtPnJfZmxhZ3MgfD0gQ0VQSF9PU0RfRkxBR19SRVRSWTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBucmVxLCAmb3NkLT5vX2xpbmdlcl9yZXF1ZXN0cywKKwkJCQkgcl9saW5nZXJfb3NkKSB7CisJCV9fdW5yZWdpc3Rlcl9saW5nZXJfcmVxdWVzdChvc2RjLCByZXEpOworCQlfX3JlZ2lzdGVyX3JlcXVlc3Qob3NkYywgcmVxKTsKKwkJbGlzdF9tb3ZlKCZyZXEtPnJfcmVxX2xydV9pdGVtLCAmb3NkYy0+cmVxX3Vuc2VudCk7CisJCWRvdXQoInJlcXVldWVkIGxpbmdlcmluZyAlcCB0aWQgJWxsdSBvc2QlZFxuIiwgcmVxLCByZXEtPnJfdGlkLAorCQkgICAgIG9zZC0+b19vc2QpOworCX0KK30KKworc3RhdGljIHZvaWQga2lja19vc2RfcmVxdWVzdHMoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCSAgICAgIHN0cnVjdCBjZXBoX29zZCAqa2lja29zZCkKK3sKKwltdXRleF9sb2NrKCZvc2RjLT5yZXF1ZXN0X211dGV4KTsKKwlfX2tpY2tfb3NkX3JlcXVlc3RzKG9zZGMsIGtpY2tvc2QpOworCW11dGV4X3VubG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7Cit9CiAKIC8qCiAgKiBJZiB0aGUgb3NkIGNvbm5lY3Rpb24gZHJvcHMsIHdlIG5lZWQgdG8gcmVzdWJtaXQgYWxsIHJlcXVlc3RzLgpAQCAtNTQzLDcgKzYwOCw4IEBACiAJZG91dCgib3NkX3Jlc2V0IG9zZCVkXG4iLCBvc2QtPm9fb3NkKTsKIAlvc2RjID0gb3NkLT5vX29zZGM7CiAJZG93bl9yZWFkKCZvc2RjLT5tYXBfc2VtKTsKLQlraWNrX3JlcXVlc3RzKG9zZGMsIG9zZCk7CisJa2lja19vc2RfcmVxdWVzdHMob3NkYywgb3NkKTsKKwlzZW5kX3F1ZXVlZChvc2RjKTsKIAl1cF9yZWFkKCZvc2RjLT5tYXBfc2VtKTsKIH0KIApAQCAtNTYxLDYgKzYyNyw3IEBACiAJYXRvbWljX3NldCgmb3NkLT5vX3JlZiwgMSk7CiAJb3NkLT5vX29zZGMgPSBvc2RjOwogCUlOSVRfTElTVF9IRUFEKCZvc2QtPm9fcmVxdWVzdHMpOworCUlOSVRfTElTVF9IRUFEKCZvc2QtPm9fbGluZ2VyX3JlcXVlc3RzKTsKIAlJTklUX0xJU1RfSEVBRCgmb3NkLT5vX29zZF9scnUpOwogCW9zZC0+b19pbmNhcm5hdGlvbiA9IDE7CiAKQEAgLTY1MCw3ICs3MTcsOCBAQAogCWludCByZXQgPSAwOwogCiAJZG91dCgiX19yZXNldF9vc2QgJXAgb3NkJWRcbiIsIG9zZCwgb3NkLT5vX29zZCk7Ci0JaWYgKGxpc3RfZW1wdHkoJm9zZC0+b19yZXF1ZXN0cykpIHsKKwlpZiAobGlzdF9lbXB0eSgmb3NkLT5vX3JlcXVlc3RzKSAmJgorCSAgICBsaXN0X2VtcHR5KCZvc2QtPm9fbGluZ2VyX3JlcXVlc3RzKSkgewogCQlfX3JlbW92ZV9vc2Qob3NkYywgb3NkKTsKIAl9IGVsc2UgaWYgKG1lbWNtcCgmb3NkYy0+b3NkbWFwLT5vc2RfYWRkcltvc2QtPm9fb3NkXSwKIAkJCSAgJm9zZC0+b19jb24ucGVlcl9hZGRyLApAQCAtNzIzLDEwICs3OTEsOSBAQAogICogUmVnaXN0ZXIgcmVxdWVzdCwgYXNzaWduIHRpZC4gIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJlcXVlc3QsIHNldCB1cAogICogdGhlIHRpbWVvdXQgZXZlbnQuCiAgKi8KLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX3JlcXVlc3Qoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKLQkJCSAgICAgc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIF9fcmVnaXN0ZXJfcmVxdWVzdChzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjLAorCQkJICAgICAgIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpCiB7Ci0JbXV0ZXhfbG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7CiAJcmVxLT5yX3RpZCA9ICsrb3NkYy0+bGFzdF90aWQ7CiAJcmVxLT5yX3JlcXVlc3QtPmhkci50aWQgPSBjcHVfdG9fbGU2NChyZXEtPnJfdGlkKTsKIAlJTklUX0xJU1RfSEVBRCgmcmVxLT5yX3JlcV9scnVfaXRlbSk7CkBAIC03NDAsNiArODA3LDEzIEBACiAJCWRvdXQoIiBmaXJzdCByZXF1ZXN0LCBzY2hlZHVsaW5nIHRpbWVvdXRcbiIpOwogCQlfX3NjaGVkdWxlX29zZF90aW1lb3V0KG9zZGMpOwogCX0KK30KKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfcmVxdWVzdChzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjLAorCQkJICAgICBzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxKQoreworCW11dGV4X2xvY2soJm9zZGMtPnJlcXVlc3RfbXV0ZXgpOworCV9fcmVnaXN0ZXJfcmVxdWVzdChvc2RjLCByZXEpOwogCW11dGV4X3VubG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7CiB9CiAKQEAgLTc1OCw5ICs4MzIsMTQgQEAKIAkJY2VwaF9jb25fcmV2b2tlKCZyZXEtPnJfb3NkLT5vX2NvbiwgcmVxLT5yX3JlcXVlc3QpOwogCiAJCWxpc3RfZGVsX2luaXQoJnJlcS0+cl9vc2RfaXRlbSk7Ci0JCWlmIChsaXN0X2VtcHR5KCZyZXEtPnJfb3NkLT5vX3JlcXVlc3RzKSkKKwkJaWYgKGxpc3RfZW1wdHkoJnJlcS0+cl9vc2QtPm9fcmVxdWVzdHMpICYmCisJCSAgICBsaXN0X2VtcHR5KCZyZXEtPnJfb3NkLT5vX2xpbmdlcl9yZXF1ZXN0cykpIHsKKwkJCWRvdXQoIm1vdmluZyBvc2QgdG8gJXAgbHJ1XG4iLCByZXEtPnJfb3NkKTsKIAkJCV9fbW92ZV9vc2RfdG9fbHJ1KG9zZGMsIHJlcS0+cl9vc2QpOwotCQlyZXEtPnJfb3NkID0gTlVMTDsKKwkJfQorCQlpZiAobGlzdF9lbXB0eSgmcmVxLT5yX29zZF9pdGVtKSAmJgorCQkgICAgbGlzdF9lbXB0eSgmcmVxLT5yX2xpbmdlcl9pdGVtKSkKKwkJCXJlcS0+cl9vc2QgPSBOVUxMOwogCX0KIAogCWNlcGhfb3NkY19wdXRfcmVxdWVzdChyZXEpOwpAQCAtNzgxLDIwICs4NjAsNzIgQEAKIAkJY2VwaF9jb25fcmV2b2tlKCZyZXEtPnJfb3NkLT5vX2NvbiwgcmVxLT5yX3JlcXVlc3QpOwogCQlyZXEtPnJfc2VudCA9IDA7CiAJfQotCWxpc3RfZGVsX2luaXQoJnJlcS0+cl9yZXFfbHJ1X2l0ZW0pOwogfQogCitzdGF0aWMgdm9pZCBfX3JlZ2lzdGVyX2xpbmdlcl9yZXF1ZXN0KHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsCisJCQkJICAgIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpCit7CisJZG91dCgiX19yZWdpc3Rlcl9saW5nZXJfcmVxdWVzdCAlcFxuIiwgcmVxKTsKKwlsaXN0X2FkZF90YWlsKCZyZXEtPnJfbGluZ2VyX2l0ZW0sICZvc2RjLT5yZXFfbGluZ2VyKTsKKwlsaXN0X2FkZF90YWlsKCZyZXEtPnJfbGluZ2VyX29zZCwgJnJlcS0+cl9vc2QtPm9fbGluZ2VyX3JlcXVlc3RzKTsKK30KKworc3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX2xpbmdlcl9yZXF1ZXN0KHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsCisJCQkJCXN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpCit7CisJZG91dCgiX191bnJlZ2lzdGVyX2xpbmdlcl9yZXF1ZXN0ICVwXG4iLCByZXEpOworCWlmIChyZXEtPnJfb3NkKSB7CisJCWxpc3RfZGVsX2luaXQoJnJlcS0+cl9saW5nZXJfaXRlbSk7CisJCWxpc3RfZGVsX2luaXQoJnJlcS0+cl9saW5nZXJfb3NkKTsKKworCQlpZiAobGlzdF9lbXB0eSgmcmVxLT5yX29zZC0+b19yZXF1ZXN0cykgJiYKKwkJICAgIGxpc3RfZW1wdHkoJnJlcS0+cl9vc2QtPm9fbGluZ2VyX3JlcXVlc3RzKSkgeworCQkJZG91dCgibW92aW5nIG9zZCB0byAlcCBscnVcbiIsIHJlcS0+cl9vc2QpOworCQkJX19tb3ZlX29zZF90b19scnUob3NkYywgcmVxLT5yX29zZCk7CisJCX0KKwkJcmVxLT5yX29zZCA9IE5VTEw7CisJfQorfQorCit2b2lkIGNlcGhfb3NkY191bnJlZ2lzdGVyX2xpbmdlcl9yZXF1ZXN0KHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsCisJCQkJCSBzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxKQoreworCW11dGV4X2xvY2soJm9zZGMtPnJlcXVlc3RfbXV0ZXgpOworCWlmIChyZXEtPnJfbGluZ2VyKSB7CisJCV9fdW5yZWdpc3Rlcl9saW5nZXJfcmVxdWVzdChvc2RjLCByZXEpOworCQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZvc2RjLT5yZXF1ZXN0X211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woY2VwaF9vc2RjX3VucmVnaXN0ZXJfbGluZ2VyX3JlcXVlc3QpOworCit2b2lkIGNlcGhfb3NkY19zZXRfcmVxdWVzdF9saW5nZXIoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCQkgIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKCFyZXEtPnJfbGluZ2VyKSB7CisJCWRvdXQoInNldF9yZXF1ZXN0X2xpbmdlciAlcFxuIiwgcmVxKTsKKwkJcmVxLT5yX2xpbmdlciA9IDE7CisJCS8qCisJCSAqIGNhbGxlciBpcyBub3cgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcKKwkJICogdW5yZWdpc3Rlcl9saW5nZXJfcmVxdWVzdAorCQkgKi8KKwkJY2VwaF9vc2RjX2dldF9yZXF1ZXN0KHJlcSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChjZXBoX29zZGNfc2V0X3JlcXVlc3RfbGluZ2VyKTsKKwogLyoKICAqIFBpY2sgYW4gb3NkICh0aGUgZmlyc3QgJ3VwJyBvc2QgaW4gdGhlIHBnKSwgYWxsb2NhdGUgdGhlIG9zZCBzdHJ1Y3QKICAqIChhcyBuZWVkZWQpLCBhbmQgc2V0IHRoZSByZXF1ZXN0IHJfb3NkIGFwcHJvcHJpYXRlbHkuICBJZiB0aGVyZSBpcwotICogbm8gdXAgb3NkLCBzZXQgcl9vc2QgdG8gTlVMTC4KKyAqIG5vIHVwIG9zZCwgc2V0IHJfb3NkIHRvIE5VTEwuICBNb3ZlIHRoZSByZXF1ZXN0IHRvIHRoZSBhcHByb3BpYXRlIGxpc3QKKyAqICh1bnNlbnQsIGhvbWVsZXNzKSBvciBsZWF2ZSBvbiBpbi1mbGlnaHQgbHJ1LgogICoKICAqIFJldHVybiAwIGlmIHVuY2hhbmdlZCwgMSBpZiBjaGFuZ2VkLCBvciBuZWdhdGl2ZSBvbiBlcnJvci4KICAqCiAgKiBDYWxsZXIgc2hvdWxkIGhvbGQgbWFwX3NlbSBmb3IgcmVhZCBhbmQgcmVxdWVzdF9tdXRleC4KICAqLwotc3RhdGljIGludCBfX21hcF9vc2RzKHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsCi0JCSAgICAgIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgaW50IF9fbWFwX3JlcXVlc3Qoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCSBzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0X2hlYWQgKnJlcWhlYWQgPSByZXEtPnJfcmVxdWVzdC0+ZnJvbnQuaW92X2Jhc2U7CiAJc3RydWN0IGNlcGhfcGcgcGdpZDsKQEAgLTgwMiwxMSArOTMzLDEzIEBACiAJaW50IG8gPSAtMSwgbnVtID0gMDsKIAlpbnQgZXJyOwogCi0JZG91dCgibWFwX29zZHMgJXAgdGlkICVsbGRcbiIsIHJlcSwgcmVxLT5yX3RpZCk7CisJZG91dCgibWFwX3JlcXVlc3QgJXAgdGlkICVsbGRcbiIsIHJlcSwgcmVxLT5yX3RpZCk7CiAJZXJyID0gY2VwaF9jYWxjX29iamVjdF9sYXlvdXQoJnJlcWhlYWQtPmxheW91dCwgcmVxLT5yX29pZCwKIAkJCQkgICAgICAmcmVxLT5yX2ZpbGVfbGF5b3V0LCBvc2RjLT5vc2RtYXApOwotCWlmIChlcnIpCisJaWYgKGVycikgeworCQlsaXN0X21vdmUoJnJlcS0+cl9yZXFfbHJ1X2l0ZW0sICZvc2RjLT5yZXFfbm90YXJnZXQpOwogCQlyZXR1cm4gZXJyOworCX0KIAlwZ2lkID0gcmVxaGVhZC0+bGF5b3V0Lm9sX3BnaWQ7CiAJcmVxLT5yX3BnaWQgPSBwZ2lkOwogCkBAIC04MjMsNyArOTU2LDcgQEAKIAkgICAgKHJlcS0+cl9vc2QgPT0gTlVMTCAmJiBvID09IC0xKSkKIAkJcmV0dXJuIDA7ICAvKiBubyBjaGFuZ2UgKi8KIAotCWRvdXQoIm1hcF9vc2RzIHRpZCAlbGx1IHBnaWQgJWQuJXggb3NkJWQgKHdhcyBvc2QlZClcbiIsCisJZG91dCgibWFwX3JlcXVlc3QgdGlkICVsbHUgcGdpZCAlZC4leCBvc2QlZCAod2FzIG9zZCVkKVxuIiwKIAkgICAgIHJlcS0+cl90aWQsIGxlMzJfdG9fY3B1KHBnaWQucG9vbCksIGxlMTZfdG9fY3B1KHBnaWQucHMpLCBvLAogCSAgICAgcmVxLT5yX29zZCA/IHJlcS0+cl9vc2QtPm9fb3NkIDogLTEpOwogCkBAIC04NDEsMTAgKzk3NCwxMiBAQAogCWlmICghcmVxLT5yX29zZCAmJiBvID49IDApIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJcmVxLT5yX29zZCA9IGNyZWF0ZV9vc2Qob3NkYyk7Ci0JCWlmICghcmVxLT5yX29zZCkKKwkJaWYgKCFyZXEtPnJfb3NkKSB7CisJCQlsaXN0X21vdmUoJnJlcS0+cl9yZXFfbHJ1X2l0ZW0sICZvc2RjLT5yZXFfbm90YXJnZXQpOwogCQkJZ290byBvdXQ7CisJCX0KIAotCQlkb3V0KCJtYXBfb3NkcyBvc2QgJXAgaXMgb3NkJWRcbiIsIHJlcS0+cl9vc2QsIG8pOworCQlkb3V0KCJtYXBfcmVxdWVzdCBvc2QgJXAgaXMgb3NkJWRcbiIsIHJlcS0+cl9vc2QsIG8pOwogCQlyZXEtPnJfb3NkLT5vX29zZCA9IG87CiAJCXJlcS0+cl9vc2QtPm9fY29uLnBlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChvKTsKIAkJX19pbnNlcnRfb3NkKG9zZGMsIHJlcS0+cl9vc2QpOwpAQCAtODU1LDYgKzk5MCw5IEBACiAJaWYgKHJlcS0+cl9vc2QpIHsKIAkJX19yZW1vdmVfb3NkX2Zyb21fbHJ1KHJlcS0+cl9vc2QpOwogCQlsaXN0X2FkZCgmcmVxLT5yX29zZF9pdGVtLCAmcmVxLT5yX29zZC0+b19yZXF1ZXN0cyk7CisJCWxpc3RfbW92ZSgmcmVxLT5yX3JlcV9scnVfaXRlbSwgJm9zZGMtPnJlcV91bnNlbnQpOworCX0gZWxzZSB7CisJCWxpc3RfbW92ZSgmcmVxLT5yX3JlcV9scnVfaXRlbSwgJm9zZGMtPnJlcV9ub3RhcmdldCk7CiAJfQogCWVyciA9IDE7ICAgLyogb3NkIG9yIHBnIGNoYW5nZWQgKi8KIApAQCAtODY5LDE2ICsxMDA3LDYgQEAKIAkJCSAgc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdF9oZWFkICpyZXFoZWFkOwotCWludCBlcnI7Ci0KLQllcnIgPSBfX21hcF9vc2RzKG9zZGMsIHJlcSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JaWYgKHJlcS0+cl9vc2QgPT0gTlVMTCkgewotCQlkb3V0KCJzZW5kX3JlcXVlc3QgJXAgbm8gdXAgb3NkcyBpbiBwZ1xuIiwgcmVxKTsKLQkJY2VwaF9tb25jX3JlcXVlc3RfbmV4dF9vc2RtYXAoJm9zZGMtPmNsaWVudC0+bW9uYyk7Ci0JCXJldHVybiAwOwotCX0KIAogCWRvdXQoInNlbmRfcmVxdWVzdCAlcCB0aWQgJWxsdSB0byBvc2QlZCBmbGFncyAlZFxuIiwKIAkgICAgIHJlcSwgcmVxLT5yX3RpZCwgcmVxLT5yX29zZC0+b19vc2QsIHJlcS0+cl9mbGFncyk7CkBAIC04OTgsNiArMTAyNiwyMSBAQAogfQogCiAvKgorICogU2VuZCBhbnkgcmVxdWVzdHMgaW4gdGhlIHF1ZXVlIChyZXFfdW5zZW50KS4KKyAqLworc3RhdGljIHZvaWQgc2VuZF9xdWV1ZWQoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYykKK3sKKwlzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxLCAqdG1wOworCisJZG91dCgic2VuZF9xdWV1ZWRcbiIpOworCW11dGV4X2xvY2soJm9zZGMtPnJlcXVlc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgJm9zZGMtPnJlcV91bnNlbnQsIHJfcmVxX2xydV9pdGVtKSB7CisJCV9fc2VuZF9yZXF1ZXN0KG9zZGMsIHJlcSk7CisJfQorCW11dGV4X3VubG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7Cit9CisKKy8qCiAgKiBUaW1lb3V0IGNhbGxiYWNrLCBjYWxsZWQgZXZlcnkgTiBzZWNvbmRzIHdoZW4gMSBvciBtb3JlIG9zZAogICogcmVxdWVzdHMgaGFzIGJlZW4gYWN0aXZlIGZvciBtb3JlIHRoYW4gTiBzZWNvbmRzLiAgV2hlbiB0aGlzCiAgKiBoYXBwZW5zLCB3ZSBwaW5nIGFsbCBPU0RzIHdpdGggcmVxdWVzdHMgd2hvIGhhdmUgdGltZWQgb3V0IHRvCkBAIC05MTYsMzAgKzEwNTksMTMgQEAKIAl1bnNpZ25lZCBsb25nIGtlZXBhbGl2ZSA9CiAJCW9zZGMtPmNsaWVudC0+b3B0aW9ucy0+b3NkX2tlZXBhbGl2ZV90aW1lb3V0ICogSFo7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3N0YW1wID0gMDsKLQlzdHJ1Y3QgcmJfbm9kZSAqcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsb3dfb3NkczsKLQogCWRvdXQoInRpbWVvdXRcbiIpOwogCWRvd25fcmVhZCgmb3NkYy0+bWFwX3NlbSk7CiAKIAljZXBoX21vbmNfcmVxdWVzdF9uZXh0X29zZG1hcCgmb3NkYy0+Y2xpZW50LT5tb25jKTsKIAogCW11dGV4X2xvY2soJm9zZGMtPnJlcXVlc3RfbXV0ZXgpOwotCWZvciAocCA9IHJiX2ZpcnN0KCZvc2RjLT5yZXF1ZXN0cyk7IHA7IHAgPSByYl9uZXh0KHApKSB7Ci0JCXJlcSA9IHJiX2VudHJ5KHAsIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0LCByX25vZGUpOwotCi0JCWlmIChyZXEtPnJfcmVzZW5kKSB7Ci0JCQlpbnQgZXJyOwotCi0JCQlkb3V0KCJvc2RjIHJlc2VuZGluZyBwcmV2IGZhaWxlZCAlbGxkXG4iLCByZXEtPnJfdGlkKTsKLQkJCWVyciA9IF9fc2VuZF9yZXF1ZXN0KG9zZGMsIHJlcSk7Ci0JCQlpZiAoZXJyKQotCQkJCWRvdXQoIm9zZGMgZmFpbGVkIGFnYWluIG9uICVsbGRcbiIsIHJlcS0+cl90aWQpOwotCQkJZWxzZQotCQkJCXJlcS0+cl9yZXNlbmQgPSBmYWxzZTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQogCiAJLyoKIAkgKiByZXNldCBvc2RzIHRoYXQgYXBwZWFyIHRvIGJlIF9yZWFsbHlfIHVucmVzcG9uc2l2ZS4gIHRoaXMKQEAgLTk2Myw3ICsxMDg5LDcgQEAKIAkJQlVHX09OKCFvc2QpOwogCQlwcl93YXJuaW5nKCIgdGlkICVsbHUgdGltZWQgb3V0IG9uIG9zZCVkLCB3aWxsIHJlc2V0IG9zZFxuIiwKIAkJCSAgIHJlcS0+cl90aWQsIG9zZC0+b19vc2QpOwotCQlfX2tpY2tfcmVxdWVzdHMob3NkYywgb3NkKTsKKwkJX19raWNrX29zZF9yZXF1ZXN0cyhvc2RjLCBvc2QpOwogCX0KIAogCS8qCkBAIC05OTEsNyArMTExNyw3IEBACiAKIAlfX3NjaGVkdWxlX29zZF90aW1lb3V0KG9zZGMpOwogCW11dGV4X3VubG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7Ci0KKwlzZW5kX3F1ZXVlZChvc2RjKTsKIAl1cF9yZWFkKCZvc2RjLT5tYXBfc2VtKTsKIH0KIApAQCAtMTAzNSw3ICsxMTYxLDYgQEAKIAkgICAgbnVtb3BzICogc2l6ZW9mKHN0cnVjdCBjZXBoX29zZF9vcCkpCiAJCWdvdG8gYmFkOwogCWRvdXQoImhhbmRsZV9yZXBseSAlcCB0aWQgJWxsdSByZXN1bHQgJWRcbiIsIG1zZywgdGlkLCAoaW50KXJlc3VsdCk7Ci0KIAkvKiBsb29rdXAgKi8KIAltdXRleF9sb2NrKCZvc2RjLT5yZXF1ZXN0X211dGV4KTsKIAlyZXEgPSBfX2xvb2t1cF9yZXF1ZXN0KG9zZGMsIHRpZCk7CkBAIC0xMDc5LDYgKzEyMDQsOSBAQAogCiAJZG91dCgiaGFuZGxlX3JlcGx5IHRpZCAlbGx1IGZsYWdzICVkXG4iLCB0aWQsIGZsYWdzKTsKIAorCWlmIChyZXEtPnJfbGluZ2VyICYmIChmbGFncyAmIENFUEhfT1NEX0ZMQUdfT05ESVNLKSkKKwkJX19yZWdpc3Rlcl9saW5nZXJfcmVxdWVzdChvc2RjLCByZXEpOworCiAJLyogZWl0aGVyIHRoaXMgaXMgYSByZWFkLCBvciB3ZSBnb3QgdGhlIHNhZmUgcmVzcG9uc2UgKi8KIAlpZiAocmVzdWx0IDwgMCB8fAogCSAgICAoZmxhZ3MgJiBDRVBIX09TRF9GTEFHX09ORElTSykgfHwKQEAgLTEwOTksNiArMTIyNyw3IEBACiAJfQogCiBkb25lOgorCWRvdXQoInJlcT0lcCByZXEtPnJfbGluZ2VyPSVkXG4iLCByZXEsIHJlcS0+cl9saW5nZXIpOwogCWNlcGhfb3NkY19wdXRfcmVxdWVzdChyZXEpOwogCXJldHVybjsKIApAQCAtMTEwOSwxMDggKzEyMzgsODMgQEAKIAljZXBoX21zZ19kdW1wKG1zZyk7CiB9CiAKLQotc3RhdGljIGludCBfX2tpY2tfcmVxdWVzdHMoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKLQkJCSAgc3RydWN0IGNlcGhfb3NkICpraWNrb3NkKQorc3RhdGljIHZvaWQgcmVzZXRfY2hhbmdlZF9vc2RzKHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMpCiB7Ci0Jc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcCwgKm47CisKKwlmb3IgKHAgPSByYl9maXJzdCgmb3NkYy0+b3Nkcyk7IHA7IHAgPSBuKSB7CisJCXN0cnVjdCBjZXBoX29zZCAqb3NkID0gcmJfZW50cnkocCwgc3RydWN0IGNlcGhfb3NkLCBvX25vZGUpOworCisJCW4gPSByYl9uZXh0KHApOworCQlpZiAoIWNlcGhfb3NkX2lzX3VwKG9zZGMtPm9zZG1hcCwgb3NkLT5vX29zZCkgfHwKKwkJICAgIG1lbWNtcCgmb3NkLT5vX2Nvbi5wZWVyX2FkZHIsCisJCQkgICBjZXBoX29zZF9hZGRyKG9zZGMtPm9zZG1hcCwKKwkJCQkJIG9zZC0+b19vc2QpLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBjZXBoX2VudGl0eV9hZGRyKSkgIT0gMCkKKwkJCV9fcmVzZXRfb3NkKG9zZGMsIG9zZCk7CisJfQorfQorCisvKgorICogUmVxdWV1ZSByZXF1ZXN0cyB3aG9zZSBtYXBwaW5nIHRvIGFuIE9TRCBoYXMgY2hhbmdlZC4gIElmIHJlcXVlc3RzIG1hcCB0bworICogbm8gb3NkLCByZXF1ZXN0IGEgbmV3IG1hcC4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhvbGQgbWFwX3NlbSBmb3IgcmVhZCBhbmQgcmVxdWVzdF9tdXRleC4KKyAqLworc3RhdGljIHZvaWQga2lja19yZXF1ZXN0cyhzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjKQoreworCXN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEsICpucmVxOworCXN0cnVjdCByYl9ub2RlICpwOwogCWludCBuZWVkbWFwID0gMDsKIAlpbnQgZXJyOwogCi0JZG91dCgia2lja19yZXF1ZXN0cyBvc2QlZFxuIiwga2lja29zZCA/IGtpY2tvc2QtPm9fb3NkIDogLTEpOwotCWlmIChraWNrb3NkKSB7Ci0JCWVyciA9IF9fcmVzZXRfb3NkKG9zZGMsIGtpY2tvc2QpOwotCQlpZiAoZXJyID09IC1FQUdBSU4pCi0JCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQlmb3IgKHAgPSByYl9maXJzdCgmb3NkYy0+b3Nkcyk7IHA7IHAgPSBuKSB7Ci0JCQlzdHJ1Y3QgY2VwaF9vc2QgKm9zZCA9Ci0JCQkJcmJfZW50cnkocCwgc3RydWN0IGNlcGhfb3NkLCBvX25vZGUpOwotCi0JCQluID0gcmJfbmV4dChwKTsKLQkJCWlmICghY2VwaF9vc2RfaXNfdXAob3NkYy0+b3NkbWFwLCBvc2QtPm9fb3NkKSB8fAotCQkJICAgIG1lbWNtcCgmb3NkLT5vX2Nvbi5wZWVyX2FkZHIsCi0JCQkJICAgY2VwaF9vc2RfYWRkcihvc2RjLT5vc2RtYXAsCi0JCQkJCQkgb3NkLT5vX29zZCksCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBjZXBoX2VudGl0eV9hZGRyKSkgIT0gMCkKLQkJCQlfX3Jlc2V0X29zZChvc2RjLCBvc2QpOworCWRvdXQoImtpY2tfcmVxdWVzdHNcbiIpOworCW11dGV4X2xvY2soJm9zZGMtPnJlcXVlc3RfbXV0ZXgpOworCWZvciAocCA9IHJiX2ZpcnN0KCZvc2RjLT5yZXF1ZXN0cyk7IHA7IHAgPSByYl9uZXh0KHApKSB7CisJCXJlcSA9IHJiX2VudHJ5KHAsIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0LCByX25vZGUpOworCQllcnIgPSBfX21hcF9yZXF1ZXN0KG9zZGMsIHJlcSk7CisJCWlmIChlcnIgPCAwKQorCQkJY29udGludWU7ICAvKiBlcnJvciAqLworCQlpZiAocmVxLT5yX29zZCA9PSBOVUxMKSB7CisJCQlkb3V0KCIlcCB0aWQgJWxsdSBtYXBzIHRvIG5vIG9zZFxuIiwgcmVxLCByZXEtPnJfdGlkKTsKKwkJCW5lZWRtYXArKzsgIC8qIHJlcXVlc3QgYSBuZXdlciBtYXAgKi8KKwkJfSBlbHNlIGlmIChlcnIgPiAwKSB7CisJCQlkb3V0KCIlcCB0aWQgJWxsdSByZXF1ZXVlZCBvbiBvc2QlZFxuIiwgcmVxLCByZXEtPnJfdGlkLAorCQkJICAgICByZXEtPnJfb3NkID8gcmVxLT5yX29zZC0+b19vc2QgOiAtMSk7CisJCQlpZiAoIXJlcS0+cl9saW5nZXIpCisJCQkJcmVxLT5yX2ZsYWdzIHw9IENFUEhfT1NEX0ZMQUdfUkVUUlk7CiAJCX0KIAl9CiAKLQlmb3IgKHAgPSByYl9maXJzdCgmb3NkYy0+cmVxdWVzdHMpOyBwOyBwID0gcmJfbmV4dChwKSkgewotCQlyZXEgPSByYl9lbnRyeShwLCBzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCwgcl9ub2RlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBucmVxLCAmb3NkYy0+cmVxX2xpbmdlciwKKwkJCQkgcl9saW5nZXJfaXRlbSkgeworCQlkb3V0KCJsaW5nZXIgcmVxPSVwIHJlcS0+cl9vc2Q9JXBcbiIsIHJlcSwgcmVxLT5yX29zZCk7CiAKLQkJaWYgKHJlcS0+cl9yZXNlbmQpIHsKLQkJCWRvdXQoIiByX3Jlc2VuZCBzZXQgb24gdGlkICVsbHVcbiIsIHJlcS0+cl90aWQpOwotCQkJX19jYW5jZWxfcmVxdWVzdChyZXEpOwotCQkJZ290byBraWNrOwotCQl9Ci0JCWlmIChyZXEtPnJfb3NkICYmIGtpY2tvc2QgPT0gcmVxLT5yX29zZCkgewotCQkJX19jYW5jZWxfcmVxdWVzdChyZXEpOwotCQkJZ290byBraWNrOwotCQl9Ci0KLQkJZXJyID0gX19tYXBfb3Nkcyhvc2RjLCByZXEpOworCQllcnIgPSBfX21hcF9yZXF1ZXN0KG9zZGMsIHJlcSk7CiAJCWlmIChlcnIgPT0gMCkKLQkJCWNvbnRpbnVlOyAgLyogbm8gY2hhbmdlICovCi0JCWlmIChlcnIgPCAwKSB7Ci0JCQkvKgotCQkJICogRklYTUU6IHJlYWxseSwgd2Ugc2hvdWxkIHNldCB0aGUgcmVxdWVzdAotCQkJICogZXJyb3IgYW5kIGZhaWwgaWYgdGhpcyBpc24ndCBhICdub2ZhaWwnCi0JCQkgKiByZXF1ZXN0LCBidXQgdGhhdCdzIGEgZmFpciBiaXQgbW9yZQotCQkJICogY29tcGxpY2F0ZWQgdG8gZG8uICBTbyByZXRyeSEKLQkJCSAqLwotCQkJZG91dCgiIHNldHRpbmcgcl9yZXNlbmQgb24gJWxsdVxuIiwgcmVxLT5yX3RpZCk7Ci0JCQlyZXEtPnJfcmVzZW5kID0gdHJ1ZTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCQljb250aW51ZTsgIC8qIG5vIGNoYW5nZSBhbmQgbm8gb3NkIHdhcyBzcGVjaWZpZWQgKi8KKwkJaWYgKGVyciA8IDApCisJCQljb250aW51ZTsgIC8qIGhybSEgKi8KIAkJaWYgKHJlcS0+cl9vc2QgPT0gTlVMTCkgewogCQkJZG91dCgidGlkICVsbHUgbWFwcyB0byBubyB2YWxpZCBvc2RcbiIsIHJlcS0+cl90aWQpOwogCQkJbmVlZG1hcCsrOyAgLyogcmVxdWVzdCBhIG5ld2VyIG1hcCAqLwogCQkJY29udGludWU7CiAJCX0KIAota2ljazoKLQkJZG91dCgia2lja2luZyAlcCB0aWQgJWxsdSBvc2QlZFxuIiwgcmVxLCByZXEtPnJfdGlkLAorCQlkb3V0KCJraWNraW5nIGxpbmdlcmluZyAlcCB0aWQgJWxsdSBvc2QlZFxuIiwgcmVxLCByZXEtPnJfdGlkLAogCQkgICAgIHJlcS0+cl9vc2QgPyByZXEtPnJfb3NkLT5vX29zZCA6IC0xKTsKLQkJcmVxLT5yX2ZsYWdzIHw9IENFUEhfT1NEX0ZMQUdfUkVUUlk7Ci0JCWVyciA9IF9fc2VuZF9yZXF1ZXN0KG9zZGMsIHJlcSk7Ci0JCWlmIChlcnIpIHsKLQkJCWRvdXQoIiBzZXR0aW5nIHJfcmVzZW5kIG9uICVsbHVcbiIsIHJlcS0+cl90aWQpOwotCQkJcmVxLT5yX3Jlc2VuZCA9IHRydWU7Ci0JCX0KKwkJX191bnJlZ2lzdGVyX2xpbmdlcl9yZXF1ZXN0KG9zZGMsIHJlcSk7CisJCV9fcmVnaXN0ZXJfcmVxdWVzdChvc2RjLCByZXEpOwogCX0KLQotCXJldHVybiBuZWVkbWFwOwotfQotCi0vKgotICogUmVzdWJtaXQgb3NkIHJlcXVlc3RzIHdob3NlIG9zZCBvciBvc2QgYWRkcmVzcyBoYXMgY2hhbmdlZC4gIFJlcXVlc3QKLSAqIGEgbmV3IG9zZCBtYXAgaWYgb3NkcyBhcmUgZG93biwgb3Igd2UgYXJlIG90aGVyd2lzZSB1bmFibGUgdG8gZGV0ZXJtaW5lCi0gKiBob3cgdG8gZGlyZWN0IGEgcmVxdWVzdC4KLSAqCi0gKiBDbG9zZSBjb25uZWN0aW9ucyB0byBkb3duIG9zZHMuCi0gKgotICogSWYgQHdobyBpcyBzcGVjaWZpZWQsIHJlc3VibWl0IHJlcXVlc3RzIGZvciB0aGF0IHNwZWNpZmljIG9zZC4KLSAqCi0gKiBDYWxsZXIgc2hvdWxkIGhvbGQgbWFwX3NlbSBmb3IgcmVhZCBhbmQgcmVxdWVzdF9tdXRleC4KLSAqLwotc3RhdGljIHZvaWQga2lja19yZXF1ZXN0cyhzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjLAotCQkJICBzdHJ1Y3QgY2VwaF9vc2QgKmtpY2tvc2QpCi17Ci0JaW50IG5lZWRtYXA7Ci0KLQltdXRleF9sb2NrKCZvc2RjLT5yZXF1ZXN0X211dGV4KTsKLQluZWVkbWFwID0gX19raWNrX3JlcXVlc3RzKG9zZGMsIGtpY2tvc2QpOwogCW11dGV4X3VubG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7CiAKIAlpZiAobmVlZG1hcCkgewogCQlkb3V0KCIlZCByZXF1ZXN0cyBmb3IgZG93biBvc2RzLCBuZWVkIG5ldyBtYXBcbiIsIG5lZWRtYXApOwogCQljZXBoX21vbmNfcmVxdWVzdF9uZXh0X29zZG1hcCgmb3NkYy0+Y2xpZW50LT5tb25jKTsKIAl9Ci0KIH0KKworCiAvKgogICogUHJvY2VzcyB1cGRhdGVkIG9zZCBtYXAuCiAgKgpAQCAtMTI2Myw2ICsxMzY3LDggQEAKIAkJCQljZXBoX29zZG1hcF9kZXN0cm95KG9zZGMtPm9zZG1hcCk7CiAJCQkJb3NkYy0+b3NkbWFwID0gbmV3bWFwOwogCQkJfQorCQkJa2lja19yZXF1ZXN0cyhvc2RjKTsKKwkJCXJlc2V0X2NoYW5nZWRfb3Nkcyhvc2RjKTsKIAkJfSBlbHNlIHsKIAkJCWRvdXQoImlnbm9yaW5nIGluY3JlbWVudGFsIG1hcCAldSBsZW4gJWRcbiIsCiAJCQkgICAgIGVwb2NoLCBtYXBsZW4pOwpAQCAtMTMwMCw2ICsxNDA2LDcgQEAKIAkJCW9zZGMtPm9zZG1hcCA9IG5ld21hcDsKIAkJCWlmIChvbGRtYXApCiAJCQkJY2VwaF9vc2RtYXBfZGVzdHJveShvbGRtYXApOworCQkJa2lja19yZXF1ZXN0cyhvc2RjKTsKIAkJfQogCQlwICs9IG1hcGxlbjsKIAkJbnJfbWFwcy0tOwpAQCAtMTMwOCw4ICsxNDE1LDcgQEAKIGRvbmU6CiAJZG93bmdyYWRlX3dyaXRlKCZvc2RjLT5tYXBfc2VtKTsKIAljZXBoX21vbmNfZ290X29zZG1hcCgmb3NkYy0+Y2xpZW50LT5tb25jLCBvc2RjLT5vc2RtYXAtPmVwb2NoKTsKLQlpZiAobmV3bWFwKQotCQlraWNrX3JlcXVlc3RzKG9zZGMsIE5VTEwpOworCXNlbmRfcXVldWVkKG9zZGMpOwogCXVwX3JlYWQoJm9zZGMtPm1hcF9zZW0pOwogCXdha2VfdXBfYWxsKCZvc2RjLT5jbGllbnQtPmF1dGhfd3EpOwogCXJldHVybjsKQEAgLTEzMjIsNiArMTQyOCwyMjMgQEAKIH0KIAogLyoKKyAqIHdhdGNoL25vdGlmeSBjYWxsYmFjayBldmVudCBpbmZyYXN0cnVjdHVyZQorICoKKyAqIFRoZXNlIGNhbGxiYWNrcyBhcmUgdXNlZCBib3RoIGZvciB3YXRjaCBhbmQgbm90aWZ5IG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIF9fcmVsZWFzZV9ldmVudChzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgY2VwaF9vc2RfZXZlbnQgKmV2ZW50ID0KKwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBjZXBoX29zZF9ldmVudCwga3JlZik7CisKKwlkb3V0KCJfX3JlbGVhc2VfZXZlbnQgJXBcbiIsIGV2ZW50KTsKKwlrZnJlZShldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9ldmVudChzdHJ1Y3QgY2VwaF9vc2RfZXZlbnQgKmV2ZW50KQoreworCWtyZWZfZ2V0KCZldmVudC0+a3JlZik7Cit9CisKK3ZvaWQgY2VwaF9vc2RjX3B1dF9ldmVudChzdHJ1Y3QgY2VwaF9vc2RfZXZlbnQgKmV2ZW50KQoreworCWtyZWZfcHV0KCZldmVudC0+a3JlZiwgX19yZWxlYXNlX2V2ZW50KTsKK30KK0VYUE9SVF9TWU1CT0woY2VwaF9vc2RjX3B1dF9ldmVudCk7CisKK3N0YXRpYyB2b2lkIF9faW5zZXJ0X2V2ZW50KHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsCisJCQkgICAgIHN0cnVjdCBjZXBoX29zZF9ldmVudCAqbmV3KQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZvc2RjLT5ldmVudF90cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGNlcGhfb3NkX2V2ZW50ICpldmVudCA9IE5VTEw7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCWV2ZW50ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY2VwaF9vc2RfZXZlbnQsIG5vZGUpOworCQlpZiAobmV3LT5jb29raWUgPCBldmVudC0+Y29va2llKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChuZXctPmNvb2tpZSA+IGV2ZW50LT5jb29raWUpCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlCVUcoKTsKKwl9CisKKwlyYl9saW5rX25vZGUoJm5ldy0+bm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJm5ldy0+bm9kZSwgJm9zZGMtPmV2ZW50X3RyZWUpOworfQorCitzdGF0aWMgc3RydWN0IGNlcGhfb3NkX2V2ZW50ICpfX2ZpbmRfZXZlbnQoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCQkJICAgICAgICB1NjQgY29va2llKQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZvc2RjLT5ldmVudF90cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGNlcGhfb3NkX2V2ZW50ICpldmVudCA9IE5VTEw7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCWV2ZW50ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY2VwaF9vc2RfZXZlbnQsIG5vZGUpOworCQlpZiAoY29va2llIDwgZXZlbnQtPmNvb2tpZSkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY29va2llID4gZXZlbnQtPmNvb2tpZSkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBldmVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9fcmVtb3ZlX2V2ZW50KHN0cnVjdCBjZXBoX29zZF9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYyA9IGV2ZW50LT5vc2RjOworCisJaWYgKCFSQl9FTVBUWV9OT0RFKCZldmVudC0+bm9kZSkpIHsKKwkJZG91dCgiX19yZW1vdmVfZXZlbnQgcmVtb3ZlZCAlcFxuIiwgZXZlbnQpOworCQlyYl9lcmFzZSgmZXZlbnQtPm5vZGUsICZvc2RjLT5ldmVudF90cmVlKTsKKwkJY2VwaF9vc2RjX3B1dF9ldmVudChldmVudCk7CisJfSBlbHNlIHsKKwkJZG91dCgiX19yZW1vdmVfZXZlbnQgZGlkbid0IHJlbW92ZSAlcFxuIiwgZXZlbnQpOworCX0KK30KKworaW50IGNlcGhfb3NkY19jcmVhdGVfZXZlbnQoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYywKKwkJCSAgIHZvaWQgKCpldmVudF9jYikodTY0LCB1NjQsIHU4LCB2b2lkICopLAorCQkJICAgaW50IG9uZV9zaG90LCB2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGNlcGhfb3NkX2V2ZW50ICoqcGV2ZW50KQoreworCXN0cnVjdCBjZXBoX29zZF9ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IGttYWxsb2Moc2l6ZW9mKCpldmVudCksIEdGUF9OT0lPKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRvdXQoImNyZWF0ZV9ldmVudCAlcFxuIiwgZXZlbnQpOworCWV2ZW50LT5jYiA9IGV2ZW50X2NiOworCWV2ZW50LT5vbmVfc2hvdCA9IG9uZV9zaG90OworCWV2ZW50LT5kYXRhID0gZGF0YTsKKwlldmVudC0+b3NkYyA9IG9zZGM7CisJSU5JVF9MSVNUX0hFQUQoJmV2ZW50LT5vc2Rfbm9kZSk7CisJa3JlZl9pbml0KCZldmVudC0+a3JlZik7ICAgLyogb25lIHJlZiBmb3IgdXMgKi8KKwlrcmVmX2dldCgmZXZlbnQtPmtyZWYpOyAgICAvKiBvbmUgcmVmIGZvciB0aGUgY2FsbGVyICovCisJaW5pdF9jb21wbGV0aW9uKCZldmVudC0+Y29tcGxldGlvbik7CisKKwlzcGluX2xvY2soJm9zZGMtPmV2ZW50X2xvY2spOworCWV2ZW50LT5jb29raWUgPSArK29zZGMtPmV2ZW50X2NvdW50OworCV9faW5zZXJ0X2V2ZW50KG9zZGMsIGV2ZW50KTsKKwlzcGluX3VubG9jaygmb3NkYy0+ZXZlbnRfbG9jayk7CisKKwkqcGV2ZW50ID0gZXZlbnQ7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNlcGhfb3NkY19jcmVhdGVfZXZlbnQpOworCit2b2lkIGNlcGhfb3NkY19jYW5jZWxfZXZlbnQoc3RydWN0IGNlcGhfb3NkX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjID0gZXZlbnQtPm9zZGM7CisKKwlkb3V0KCJjYW5jZWxfZXZlbnQgJXBcbiIsIGV2ZW50KTsKKwlzcGluX2xvY2soJm9zZGMtPmV2ZW50X2xvY2spOworCV9fcmVtb3ZlX2V2ZW50KGV2ZW50KTsKKwlzcGluX3VubG9jaygmb3NkYy0+ZXZlbnRfbG9jayk7CisJY2VwaF9vc2RjX3B1dF9ldmVudChldmVudCk7IC8qIGNhbGxlcidzICovCit9CitFWFBPUlRfU1lNQk9MKGNlcGhfb3NkY19jYW5jZWxfZXZlbnQpOworCisKK3N0YXRpYyB2b2lkIGRvX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjZXBoX29zZF9ldmVudF93b3JrICpldmVudF93b3JrID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZXBoX29zZF9ldmVudF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgY2VwaF9vc2RfZXZlbnQgKmV2ZW50ID0gZXZlbnRfd29yay0+ZXZlbnQ7CisJdTY0IHZlciA9IGV2ZW50X3dvcmstPnZlcjsKKwl1NjQgbm90aWZ5X2lkID0gZXZlbnRfd29yay0+bm90aWZ5X2lkOworCXU4IG9wY29kZSA9IGV2ZW50X3dvcmstPm9wY29kZTsKKworCWRvdXQoImRvX2V2ZW50X3dvcmsgY29tcGxldGluZyAlcFxuIiwgZXZlbnQpOworCWV2ZW50LT5jYih2ZXIsIG5vdGlmeV9pZCwgb3Bjb2RlLCBldmVudC0+ZGF0YSk7CisJY29tcGxldGUoJmV2ZW50LT5jb21wbGV0aW9uKTsKKwlkb3V0KCJkb19ldmVudF93b3JrIGNvbXBsZXRlZCAlcFxuIiwgZXZlbnQpOworCWNlcGhfb3NkY19wdXRfZXZlbnQoZXZlbnQpOworCWtmcmVlKGV2ZW50X3dvcmspOworfQorCisKKy8qCisgKiBQcm9jZXNzIG9zZCB3YXRjaCBub3RpZmljYXRpb25zCisgKi8KK3ZvaWQgaGFuZGxlX3dhdGNoX25vdGlmeShzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjLCBzdHJ1Y3QgY2VwaF9tc2cgKm1zZykKK3sKKwl2b2lkICpwLCAqZW5kOworCXU4IHByb3RvX3ZlcjsKKwl1NjQgY29va2llLCB2ZXIsIG5vdGlmeV9pZDsKKwl1OCBvcGNvZGU7CisJc3RydWN0IGNlcGhfb3NkX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgY2VwaF9vc2RfZXZlbnRfd29yayAqZXZlbnRfd29yazsKKworCXAgPSBtc2ctPmZyb250Lmlvdl9iYXNlOworCWVuZCA9IHAgKyBtc2ctPmZyb250Lmlvdl9sZW47CisKKwljZXBoX2RlY29kZV84X3NhZmUoJnAsIGVuZCwgcHJvdG9fdmVyLCBiYWQpOworCWNlcGhfZGVjb2RlXzhfc2FmZSgmcCwgZW5kLCBvcGNvZGUsIGJhZCk7CisJY2VwaF9kZWNvZGVfNjRfc2FmZSgmcCwgZW5kLCBjb29raWUsIGJhZCk7CisJY2VwaF9kZWNvZGVfNjRfc2FmZSgmcCwgZW5kLCB2ZXIsIGJhZCk7CisJY2VwaF9kZWNvZGVfNjRfc2FmZSgmcCwgZW5kLCBub3RpZnlfaWQsIGJhZCk7CisKKwlzcGluX2xvY2soJm9zZGMtPmV2ZW50X2xvY2spOworCWV2ZW50ID0gX19maW5kX2V2ZW50KG9zZGMsIGNvb2tpZSk7CisJaWYgKGV2ZW50KSB7CisJCWdldF9ldmVudChldmVudCk7CisJCWlmIChldmVudC0+b25lX3Nob3QpCisJCQlfX3JlbW92ZV9ldmVudChldmVudCk7CisJfQorCXNwaW5fdW5sb2NrKCZvc2RjLT5ldmVudF9sb2NrKTsKKwlkb3V0KCJoYW5kbGVfd2F0Y2hfbm90aWZ5IGNvb2tpZSAlbGxkIHZlciAlbGxkIGV2ZW50ICVwXG4iLAorCSAgICAgY29va2llLCB2ZXIsIGV2ZW50KTsKKwlpZiAoZXZlbnQpIHsKKwkJZXZlbnRfd29yayA9IGttYWxsb2Moc2l6ZW9mKCpldmVudF93b3JrKSwgR0ZQX05PSU8pOworCQlJTklUX1dPUksoJmV2ZW50X3dvcmstPndvcmssIGRvX2V2ZW50X3dvcmspOworCQlpZiAoIWV2ZW50X3dvcmspIHsKKwkJCWRvdXQoIkVSUk9SOiBjb3VsZCBub3QgYWxsb2NhdGUgZXZlbnRfd29ya1xuIik7CisJCQlnb3RvIGRvbmVfZXJyOworCQl9CisJCWV2ZW50X3dvcmstPmV2ZW50ID0gZXZlbnQ7CisJCWV2ZW50X3dvcmstPnZlciA9IHZlcjsKKwkJZXZlbnRfd29yay0+bm90aWZ5X2lkID0gbm90aWZ5X2lkOworCQlldmVudF93b3JrLT5vcGNvZGUgPSBvcGNvZGU7CisJCWlmICghcXVldWVfd29yayhvc2RjLT5ub3RpZnlfd3EsICZldmVudF93b3JrLT53b3JrKSkgeworCQkJZG91dCgiV0FSTklORzogZmFpbGVkIHRvIHF1ZXVlIG5vdGlmeSBldmVudCB3b3JrXG4iKTsKKwkJCWdvdG8gZG9uZV9lcnI7CisJCX0KKwl9CisKKwlyZXR1cm47CisKK2RvbmVfZXJyOgorCWNvbXBsZXRlKCZldmVudC0+Y29tcGxldGlvbik7CisJY2VwaF9vc2RjX3B1dF9ldmVudChldmVudCk7CisJcmV0dXJuOworCitiYWQ6CisJcHJfZXJyKCJvc2RjIGhhbmRsZV93YXRjaF9ub3RpZnkgY29ycnVwdCBtc2dcbiIpOworCXJldHVybjsKK30KKworaW50IGNlcGhfb3NkY193YWl0X2V2ZW50KHN0cnVjdCBjZXBoX29zZF9ldmVudCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlpbnQgZXJyOworCisJZG91dCgid2FpdF9ldmVudCAlcFxuIiwgZXZlbnQpOworCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZldmVudC0+Y29tcGxldGlvbiwKKwkJCQkJCQl0aW1lb3V0ICogSFopOworCWNlcGhfb3NkY19wdXRfZXZlbnQoZXZlbnQpOworCWlmIChlcnIgPiAwKQorCQllcnIgPSAwOworCWRvdXQoIndhaXRfZXZlbnQgJXAgcmV0dXJucyAlZFxuIiwgZXZlbnQsIGVycik7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woY2VwaF9vc2RjX3dhaXRfZXZlbnQpOworCisvKgogICogUmVnaXN0ZXIgcmVxdWVzdCwgc2VuZCBpbml0aWFsIGF0dGVtcHQuCiAgKi8KIGludCBjZXBoX29zZGNfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjLApAQCAtMTM0NywxNSArMTY3MCwyMiBAQAogCSAqIHRoZSByZXF1ZXN0IHN0aWxsIGhhbid0IGJlZW4gdG91Y2hlZCB5ZXQuCiAJICovCiAJaWYgKHJlcS0+cl9zZW50ID09IDApIHsKLQkJcmMgPSBfX3NlbmRfcmVxdWVzdChvc2RjLCByZXEpOwotCQlpZiAocmMpIHsKLQkJCWlmIChub2ZhaWwpIHsKLQkJCQlkb3V0KCJvc2RjX3N0YXJ0X3JlcXVlc3QgZmFpbGVkIHNlbmQsICIKLQkJCQkgICAgICIgbWFya2luZyAlbGxkXG4iLCByZXEtPnJfdGlkKTsKLQkJCQlyZXEtPnJfcmVzZW5kID0gdHJ1ZTsKLQkJCQlyYyA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCV9fdW5yZWdpc3Rlcl9yZXF1ZXN0KG9zZGMsIHJlcSk7CisJCXJjID0gX19tYXBfcmVxdWVzdChvc2RjLCByZXEpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQlpZiAocmVxLT5yX29zZCA9PSBOVUxMKSB7CisJCQlkb3V0KCJzZW5kX3JlcXVlc3QgJXAgbm8gdXAgb3NkcyBpbiBwZ1xuIiwgcmVxKTsKKwkJCWNlcGhfbW9uY19yZXF1ZXN0X25leHRfb3NkbWFwKCZvc2RjLT5jbGllbnQtPm1vbmMpOworCQl9IGVsc2UgeworCQkJcmMgPSBfX3NlbmRfcmVxdWVzdChvc2RjLCByZXEpOworCQkJaWYgKHJjKSB7CisJCQkJaWYgKG5vZmFpbCkgeworCQkJCQlkb3V0KCJvc2RjX3N0YXJ0X3JlcXVlc3QgZmFpbGVkIHNlbmQsICIKKwkJCQkJICAgICAiIHdpbGwgcmV0cnkgJWxsZFxuIiwgcmVxLT5yX3RpZCk7CisJCQkJCXJjID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlfX3VucmVnaXN0ZXJfcmVxdWVzdChvc2RjLCByZXEpOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTE0NDEsOSArMTc3MSwxNSBAQAogCUlOSVRfTElTVF9IRUFEKCZvc2RjLT5vc2RfbHJ1KTsKIAlvc2RjLT5yZXF1ZXN0cyA9IFJCX1JPT1Q7CiAJSU5JVF9MSVNUX0hFQUQoJm9zZGMtPnJlcV9scnUpOworCUlOSVRfTElTVF9IRUFEKCZvc2RjLT5yZXFfdW5zZW50KTsKKwlJTklUX0xJU1RfSEVBRCgmb3NkYy0+cmVxX25vdGFyZ2V0KTsKKwlJTklUX0xJU1RfSEVBRCgmb3NkYy0+cmVxX2xpbmdlcik7CiAJb3NkYy0+bnVtX3JlcXVlc3RzID0gMDsKIAlJTklUX0RFTEFZRURfV09SSygmb3NkYy0+dGltZW91dF93b3JrLCBoYW5kbGVfdGltZW91dCk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJm9zZGMtPm9zZHNfdGltZW91dF93b3JrLCBoYW5kbGVfb3Nkc190aW1lb3V0KTsKKwlzcGluX2xvY2tfaW5pdCgmb3NkYy0+ZXZlbnRfbG9jayk7CisJb3NkYy0+ZXZlbnRfdHJlZSA9IFJCX1JPT1Q7CisJb3NkYy0+ZXZlbnRfY291bnQgPSAwOwogCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZvc2RjLT5vc2RzX3RpbWVvdXRfd29yaywKIAkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKG9zZGMtPmNsaWVudC0+b3B0aW9ucy0+b3NkX2lkbGVfdHRsICogSFopKTsKQEAgLTE0NjMsNiArMTc5OSwxMyBAQAogCQkJCSJvc2Rfb3BfcmVwbHkiKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfbXNncG9vbDsKKworCW9zZGMtPm5vdGlmeV93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjZXBoLXdhdGNoLW5vdGlmeSIpOworCWlmIChJU19FUlIob3NkYy0+bm90aWZ5X3dxKSkgeworCQllcnIgPSBQVFJfRVJSKG9zZGMtPm5vdGlmeV93cSk7CisJCW9zZGMtPm5vdGlmeV93cSA9IE5VTEw7CisJCWdvdG8gb3V0X21zZ3Bvb2w7CisJfQogCXJldHVybiAwOwogCiBvdXRfbXNncG9vbDoKQEAgLTE0NzYsNiArMTgxOSw4IEBACiAKIHZvaWQgY2VwaF9vc2RjX3N0b3Aoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYykKIHsKKwlmbHVzaF93b3JrcXVldWUob3NkYy0+bm90aWZ5X3dxKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShvc2RjLT5ub3RpZnlfd3EpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmb3NkYy0+dGltZW91dF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm9zZGMtPm9zZHNfdGltZW91dF93b3JrKTsKIAlpZiAob3NkYy0+b3NkbWFwKSB7CkBAIC0xNDgzLDYgKzE4MjgsNyBAQAogCQlvc2RjLT5vc2RtYXAgPSBOVUxMOwogCX0KIAlyZW1vdmVfb2xkX29zZHMob3NkYywgMSk7CisJV0FSTl9PTighUkJfRU1QVFlfUk9PVCgmb3NkYy0+b3NkcykpOwogCW1lbXBvb2xfZGVzdHJveShvc2RjLT5yZXFfbWVtcG9vbCk7CiAJY2VwaF9tc2dwb29sX2Rlc3Ryb3koJm9zZGMtPm1zZ3Bvb2xfb3ApOwogCWNlcGhfbXNncG9vbF9kZXN0cm95KCZvc2RjLT5tc2dwb29sX29wX3JlcGx5KTsKQEAgLTE1OTEsNiArMTkzNyw5IEBACiAJY2FzZSBDRVBIX01TR19PU0RfT1BSRVBMWToKIAkJaGFuZGxlX3JlcGx5KG9zZGMsIG1zZywgY29uKTsKIAkJYnJlYWs7CisJY2FzZSBDRVBIX01TR19XQVRDSF9OT1RJRlk6CisJCWhhbmRsZV93YXRjaF9ub3RpZnkob3NkYywgbXNnKTsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlwcl9lcnIoInJlY2VpdmVkIHVua25vd24gbWVzc2FnZSB0eXBlICVkICVzXG4iLCB0eXBlLApAQCAtMTY4NCw2ICsyMDMzLDcgQEAKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQ0VQSF9NU0dfT1NEX01BUDoKKwljYXNlIENFUEhfTVNHX1dBVENIX05PVElGWToKIAkJcmV0dXJuIGNlcGhfbXNnX25ldyh0eXBlLCBmcm9udCwgR0ZQX05PRlMpOwogCWNhc2UgQ0VQSF9NU0dfT1NEX09QUkVQTFk6CiAJCXJldHVybiBnZXRfcmVwbHkoY29uLCBoZHIsIHNraXApOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKaW5kZXggMTMzZmQyMi4uN2IzOWYzZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYworKysgYi9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jCkBAIC0zNTcsOCArMzU3LDggQEAKIC8qKgogICoJZGV2X2FkZHJfZGVsX211bHRpcGxlIC0gRGVsZXRlIGRldmljZSBhZGRyZXNzZXMgYnkgYW5vdGhlciBkZXZpY2UKICAqCUB0b19kZXY6IGRldmljZSB3aGVyZSB0aGUgYWRkcmVzc2VzIHdpbGwgYmUgZGVsZXRlZAotICoJQGZyb21fZGV2OiBkZXZpY2UgYnkgd2hpY2ggYWRkcmVzc2VzIHRoZSBhZGRyZXNzZXMgd2lsbCBiZSBkZWxldGVkCi0gKglAYWRkcl90eXBlOiBhZGRyZXNzIHR5cGUgLSAwIG1lYW5zIHR5cGUgd2lsbCB1c2VkIGZyb20gZnJvbV9kZXYKKyAqCUBmcm9tX2RldjogZGV2aWNlIHN1cHBseWluZyB0aGUgYWRkcmVzc2VzIHRvIGJlIGRlbGV0ZWQKKyAqCUBhZGRyX3R5cGU6IGFkZHJlc3MgdHlwZSAtIDAgbWVhbnMgdHlwZSB3aWxsIGJlIHVzZWQgZnJvbSBmcm9tX2RldgogICoKICAqCURlbGV0ZXMgYWRkcmVzc2VzIGluIHRvIGRldmljZSBieSB0aGUgbGlzdCBvZiBhZGRyZXNzZXMgaW4gZnJvbSBkZXZpY2UuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwppbmRleCAzNmU2MDNjLi43MDY1MDJmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kcm9wX21vbml0b3IuYworKysgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YTsKIAlpbnQgY3B1LCByYzsKIAotCXByaW50ayhLRVJOX0lORk8gIkluaXRhbGl6aW5nIG5ldHdvcmsgZHJvcCBtb25pdG9yIHNlcnZpY2VcbiIpOworCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyBuZXR3b3JrIGRyb3AgbW9uaXRvciBzZXJ2aWNlXG4iKTsKIAogCWlmIChzaXplb2Yodm9pZCAqKSA+IDgpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc3RvcmUgcHJvZ3JhbSBjb3VudGVycyBvbiB0aGlzIGFyY2gsIERyb3AgbW9uaXRvciBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IGMxYTcxYmIuLmExMDg2ZmIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTE0NTcsNiArMTQ1Nyw5IEBACiB7CiAJaW50IGVycjsKIAorCWlmICghZGV2LT5ldGh0b29sX29wcy0+c2V0X3NnKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAoZGF0YSAmJiAhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0FMTF9DU1VNKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggMGM1NWVhYS4uYWVlZWNlNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTM3NjEsNyArMzc2MSwxMCBAQAogCWxpc3RfYWRkX3RhaWwoJnQtPnRoX2xpc3QsICZwa3RnZW5fdGhyZWFkcyk7CiAJaW5pdF9jb21wbGV0aW9uKCZ0LT5zdGFydF9kb25lKTsKIAotCXAgPSBrdGhyZWFkX2NyZWF0ZShwa3RnZW5fdGhyZWFkX3dvcmtlciwgdCwgImtwa3RnZW5kXyVkIiwgY3B1KTsKKwlwID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShwa3RnZW5fdGhyZWFkX3dvcmtlciwKKwkJCQkgICB0LAorCQkJCSAgIGNwdV90b19ub2RlKGNwdSksCisJCQkJICAgImtwa3RnZW5kXyVkIiwgY3B1KTsKIAlpZiAoSVNfRVJSKHApKSB7CiAJCXByX2Vycigia2VybmVsX3RocmVhZCgpIGZhaWxlZCBmb3IgY3B1ICVkXG4iLCB0LT5jcHUpOwogCQlsaXN0X2RlbCgmdC0+dGhfbGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCAwYzI4MjYzLi4xMTZkM2ZkIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTQzNSwxMCArNDM1LDEwIEBACiAJCXVkcGRlc3Quc2luX2FkZHIuc19hZGRyID0gaHRvbmwobmV0d29yayB8IGFkZHIuc3RhdGlvbik7CiAJfQogCisJbWVtc2V0KCZhaCwgMCwgc2l6ZW9mKGFoKSk7CiAJYWgucG9ydCA9IHBvcnQ7CiAJYWguY2IgPSBjYiAmIDB4N2Y7CiAJYWguY29kZSA9IDI7CQkvKiBtYWdpYyAqLwotCWFoLnBhZCA9IDA7CiAKIAkvKiB0YWNrIG91ciBoZWFkZXIgb24gdGhlIGZyb250IG9mIHRoZSBpb3ZlYyAqLwogCXNpemUgPSBzaXplb2Yoc3RydWN0IGF1bmhkcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggYjA5ZWQwZC4uZmZjZWEwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJCQkJCXZlcmRpY3QgPSAodW5zaWduZWQpKC12KSAtIDE7CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlpZiAoKnN0YWNrcHRyID09IDApIHsKKwkJCQlpZiAoKnN0YWNrcHRyIDw9IG9yaWdwdHIpIHsKIAkJCQkJZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLAogCQkJCQkgICAgcHJpdmF0ZS0+dW5kZXJmbG93W2hvb2tdKTsKIAkJCQkJcHJfZGVidWcoIlVuZGVyZmxvdyAodGhpcyBpcyBub3JtYWwpICIKQEAgLTQyNywxMCArNDI3LDEwIEBACiAJCQkvKiBWZXJkaWN0ICovCiAJCQlicmVhazsKIAl9IHdoaWxlICghYWNwYXIuaG90ZHJvcCk7Ci0JeHRfaW5mb19yZHVubG9ja19iaCgpOwogCXByX2RlYnVnKCJFeGl0aW5nICVzOyByZXNldHRpbmcgc3AgZnJvbSAldSB0byAldVxuIiwKIAkJIF9fZnVuY19fLCAqc3RhY2twdHIsIG9yaWdwdHIpOwogCSpzdGFja3B0ciA9IG9yaWdwdHI7CisJeHRfaW5mb19yZHVubG9ja19iaCgpOwogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggNDAzY2E1Ny4uZDYwOWFjMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC02NjQsOCArNjY0LDExIEBACiAJY2hhciBidWZmZXJbUFJPQ19XUklURUxFTisxXTsKIAl1bnNpZ25lZCBsb25nIG5vZGVudW07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBpbnB1dCwgUFJPQ19XUklURUxFTikpCisJaWYgKHNpemUgPiBQUk9DX1dSSVRFTEVOKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBpbnB1dCwgc2l6ZSkpCiAJCXJldHVybiAtRUZBVUxUOworCWJ1ZmZlcltzaXplXSA9IDA7CiAKIAlpZiAoKmJ1ZmZlciA9PSAnKycpIHsKIAkJbm9kZW51bSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZmZlcisxLCBOVUxMLCAxMCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKaW5kZXggNjMzYTZjMi4uYjUzMTk3MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKF9faW5ldDZfbG9va3VwX2VzdGFibGlzaGVkKTsKIAotc3RhdGljIGludCBpbmxpbmUgY29tcHV0ZV9zY29yZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXQgKm5ldCwKK3N0YXRpYyBpbmxpbmUgaW50IGNvbXB1dGVfc2NvcmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJY29uc3QgdW5zaWduZWQgc2hvcnQgaG51bSwKIAkJCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCWNvbnN0IGludCBkaWYpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCBjOTU5OGE5Li4wYjJhZjliIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCQkJCQl2ZXJkaWN0ID0gKHVuc2lnbmVkKSgtdikgLSAxOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJaWYgKCpzdGFja3B0ciA9PSAwKQorCQkJCWlmICgqc3RhY2twdHIgPD0gb3JpZ3B0cikKIAkJCQkJZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLAogCQkJCQkgICAgcHJpdmF0ZS0+dW5kZXJmbG93W2hvb2tdKTsKIAkJCQllbHNlCkBAIC00NDEsOCArNDQxLDggQEAKIAkJCWJyZWFrOwogCX0gd2hpbGUgKCFhY3Bhci5ob3Rkcm9wKTsKIAotCXh0X2luZm9fcmR1bmxvY2tfYmgoKTsKIAkqc3RhY2twdHIgPSBvcmlncHRyOworCXh0X2luZm9fcmR1bmxvY2tfYmgoKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCmluZGV4IDdjYjY1ZWYuLjZkY2Y1ZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCkBAIC0xNyw2ICsxNywxNiBAQAogCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBlbXB0eVsxXTsKIAorc3RhdGljIGN0bF90YWJsZSBpcHY2X3N0YXRpY19za2VsZXRvbltdID0geworCXsKKwkJLnByb2NuYW1lCT0gIm5laWdoIiwKKwkJLm1heGxlbgkJPSAwLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gZW1wdHksCisJfSwKKwl7IH0KK307CisKIHN0YXRpYyBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gInJvdXRlIiwKQEAgLTM3LDEyICs0Nyw2IEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCiAJfSwKLQl7Ci0JCS5wcm9jbmFtZQk9ICJuZWlnaCIsCi0JCS5tYXhsZW4JCT0gMCwKLQkJLm1vZGUJCT0gMDU1NSwKLQkJLmNoaWxkCQk9IGVtcHR5LAotCX0sCiAJeyB9CiB9OwogCkBAIC0xNjAsNyArMTY0LDcgQEAKIAogaW50IGlwdjZfc3RhdGljX3N5c2N0bF9yZWdpc3Rlcih2b2lkKQogewotCWlwNl9iYXNlID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKG5ldF9pcHY2X2N0bF9wYXRoLCBlbXB0eSk7CisJaXA2X2Jhc2UgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMobmV0X2lwdjZfY3RsX3BhdGgsIGlwdjZfc3RhdGljX3NrZWxldG9uKTsKIAlpZiAoaXA2X2Jhc2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCAyNzMxYjUxLi45NjgwMjI2IDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTE0OCw3ICsxNDgsNiBAQAogCWlweF9yZW1vdmVfc29ja2V0KHNrKTsKIAlza2JfcXVldWVfcHVyZ2UoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAlza19yZWZjbnRfZGVidWdfZGVjKHNrKTsKLQlzb2NrX3B1dChzayk7CiB9CiAKIC8qCkBAIC0xNDA0LDYgKzE0MDMsNyBAQAogCXNrX3JlZmNudF9kZWJ1Z19yZWxlYXNlKHNrKTsKIAlpcHhfZGVzdHJveV9zb2NrZXQoc2spOwogCXJlbGVhc2Vfc29jayhzayk7CisJc29ja19wdXQoc2spOwogb3V0OgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9ldGguYyBiL25ldC9sMnRwL2wydHBfZXRoLmMKaW5kZXggOGQ5Y2UwYS4uYTgxOTNmNSAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9ldGguYworKysgYi9uZXQvbDJ0cC9sMnRwX2V0aC5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9fbmV0X2luaXRkYXRhIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBsMnRwX2V0aF9uZXRfb3BzID0geworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBsMnRwX2V0aF9uZXRfb3BzID0gewogCS5pbml0ID0gbDJ0cF9ldGhfaW5pdF9uZXQsCiAJLmlkICAgPSAmbDJ0cF9ldGhfbmV0X2lkLAogCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBsMnRwX2V0aF9uZXQpLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCAwODFkY2FmLi5jZTQ1OTZlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJcmV0dXJuIGNwdV90b19sZTE2KGR1cik7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIGlzX2llZWU4MDIxMV9kZXZpY2Uoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCitzdGF0aWMgaW5saW5lIGludCBpc19pZWVlODAyMTFfZGV2aWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIGxvY2FsID09IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCmluZGV4IDYxOGE2MTUuLmQ2YjQ4MjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKQEAgLTk0LDE2ICs5NCwyOCBAQAogZmluZF9zZXRfdHlwZV9nZXQoY29uc3QgY2hhciAqbmFtZSwgdTggZmFtaWx5LCB1OCByZXZpc2lvbiwKIAkJICBzdHJ1Y3QgaXBfc2V0X3R5cGUgKipmb3VuZCkKIHsKKwlzdHJ1Y3QgaXBfc2V0X3R5cGUgKnR5cGU7CisJaW50IGVycjsKKwogCXJjdV9yZWFkX2xvY2soKTsKIAkqZm91bmQgPSBmaW5kX3NldF90eXBlKG5hbWUsIGZhbWlseSwgcmV2aXNpb24pOwogCWlmICgqZm91bmQpIHsKLQkJaW50IGVyciA9ICF0cnlfbW9kdWxlX2dldCgoKmZvdW5kKS0+bWUpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIGVyciA/IC1FRkFVTFQgOiAwOworCQllcnIgPSAhdHJ5X21vZHVsZV9nZXQoKCpmb3VuZCktPm1lKSA/IC1FRkFVTFQgOiAwOworCQlnb3RvIHVubG9jazsKIAl9CisJLyogTWFrZSBzdXJlIHRoZSB0eXBlIGlzIGxvYWRlZCBidXQgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUgcmV2aXNpb24gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0eXBlLCAmaXBfc2V0X3R5cGVfbGlzdCwgbGlzdCkKKwkJaWYgKFNUUkVRKHR5cGUtPm5hbWUsIG5hbWUpKSB7CisJCQllcnIgPSAtSVBTRVRfRVJSX0ZJTkRfVFlQRTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gdHJ5X3RvX2xvYWRfdHlwZShuYW1lKTsKKwordW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBlcnI7CiB9CiAKIC8qIEZpbmQgYSBnaXZlbiBzZXQgdHlwZSBieSBuYW1lIGFuZCBmYW1pbHkuCkBAIC0xMTYsNyArMTI4LDcgQEAKIAlzdHJ1Y3QgaXBfc2V0X3R5cGUgKnR5cGU7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0JKm1pbiA9ICptYXggPSAwOworCSptaW4gPSAyNTU7ICptYXggPSAwOwogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0eXBlLCAmaXBfc2V0X3R5cGVfbGlzdCwgbGlzdCkKIAkJaWYgKFNUUkVRKHR5cGUtPm5hbWUsIG5hbWUpICYmCkBAIC0xMjQsNyArMTM2LDcgQEAKIAkJCWZvdW5kID0gdHJ1ZTsKIAkJCWlmICh0eXBlLT5yZXZpc2lvbiA8ICptaW4pCiAJCQkJKm1pbiA9IHR5cGUtPnJldmlzaW9uOwotCQkJZWxzZSBpZiAodHlwZS0+cmV2aXNpb24gPiAqbWF4KQorCQkJaWYgKHR5cGUtPnJldmlzaW9uID4gKm1heCkKIAkJCQkqbWF4ID0gdHlwZS0+cmV2aXNpb247CiAJCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jCmluZGV4IGFkYmU3ODcuLmI5MjE0MTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYwpAQCAtMTUwLDYgKzE1MCw3IEBACiAJc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtIGRhdGEgPSB7IH07CiAJdTMyIGlwLCBpcF90bywgcCwgcG9ydCwgcG9ydF90bzsKIAl1MzIgdGltZW91dCA9IGgtPnRpbWVvdXQ7CisJYm9vbCB3aXRoX3BvcnRzID0gZmFsc2U7CiAJaW50IHJldDsKIAogCWlmICh1bmxpa2VseSghdGJbSVBTRVRfQVRUUl9JUF0gfHwKQEAgLTE3MiwyMSArMTczLDE1IEBACiAKIAlpZiAodGJbSVBTRVRfQVRUUl9QUk9UT10pIHsKIAkJZGF0YS5wcm90byA9IG5sYV9nZXRfdTgodGJbSVBTRVRfQVRUUl9QUk9UT10pOworCQl3aXRoX3BvcnRzID0gaXBfc2V0X3Byb3RvX3dpdGhfcG9ydHMoZGF0YS5wcm90byk7CiAKIAkJaWYgKGRhdGEucHJvdG8gPT0gMCkKIAkJCXJldHVybiAtSVBTRVRfRVJSX0lOVkFMSURfUFJPVE87CiAJfSBlbHNlCiAJCXJldHVybiAtSVBTRVRfRVJSX01JU1NJTkdfUFJPVE87CiAKLQlzd2l0Y2ggKGRhdGEucHJvdG8pIHsKLQljYXNlIElQUFJPVE9fVURQOgotCWNhc2UgSVBQUk9UT19UQ1A6Ci0JY2FzZSBJUFBST1RPX0lDTVA6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJaWYgKCEod2l0aF9wb3J0cyB8fCBkYXRhLnByb3RvID09IElQUFJPVE9fSUNNUCkpCiAJCWRhdGEucG9ydCA9IDA7Ci0JCWJyZWFrOwotCX0KIAogCWlmICh0YltJUFNFVF9BVFRSX1RJTUVPVVRdKSB7CiAJCWlmICghd2l0aF90aW1lb3V0KGgtPnRpbWVvdXQpKQpAQCAtMTk1LDcgKzE5MCw2IEBACiAJfQogCiAJaWYgKGFkdCA9PSBJUFNFVF9URVNUIHx8Ci0JICAgICEoZGF0YS5wcm90byA9PSBJUFBST1RPX1RDUCB8fCBkYXRhLnByb3RvID09IElQUFJPVE9fVURQKSB8fAogCSAgICAhKHRiW0lQU0VUX0FUVFJfSVBfVE9dIHx8IHRiW0lQU0VUX0FUVFJfQ0lEUl0gfHwKIAkgICAgICB0YltJUFNFVF9BVFRSX1BPUlRfVE9dKSkgewogCQlyZXQgPSBhZHRmbihzZXQsICZkYXRhLCB0aW1lb3V0KTsKQEAgLTIxOSwxMyArMjEzLDEyIEBACiAJfSBlbHNlCiAJCWlwX3RvID0gaXA7CiAKLQlwb3J0ID0gbnRvaHMoZGF0YS5wb3J0KTsKLQlpZiAodGJbSVBTRVRfQVRUUl9QT1JUX1RPXSkgeworCXBvcnRfdG8gPSBwb3J0ID0gbnRvaHMoZGF0YS5wb3J0KTsKKwlpZiAod2l0aF9wb3J0cyAmJiB0YltJUFNFVF9BVFRSX1BPUlRfVE9dKSB7CiAJCXBvcnRfdG8gPSBpcF9zZXRfZ2V0X2gxNih0YltJUFNFVF9BVFRSX1BPUlRfVE9dKTsKIAkJaWYgKHBvcnQgPiBwb3J0X3RvKQogCQkJc3dhcChwb3J0LCBwb3J0X3RvKTsKLQl9IGVsc2UKLQkJcG9ydF90byA9IHBvcnQ7CisJfQogCiAJZm9yICg7ICFiZWZvcmUoaXBfdG8sIGlwKTsgaXArKykKIAkJZm9yIChwID0gcG9ydDsgcCA8PSBwb3J0X3RvOyBwKyspIHsKQEAgLTM2MSw2ICszNTQsNyBAQAogCXN0cnVjdCBoYXNoX2lwcG9ydDZfZWxlbSBkYXRhID0geyB9OwogCXUzMiBwb3J0LCBwb3J0X3RvOwogCXUzMiB0aW1lb3V0ID0gaC0+dGltZW91dDsKKwlib29sIHdpdGhfcG9ydHMgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KCF0YltJUFNFVF9BVFRSX0lQXSB8fApAQCAtMzg1LDIxICszNzksMTUgQEAKIAogCWlmICh0YltJUFNFVF9BVFRSX1BST1RPXSkgewogCQlkYXRhLnByb3RvID0gbmxhX2dldF91OCh0YltJUFNFVF9BVFRSX1BST1RPXSk7CisJCXdpdGhfcG9ydHMgPSBpcF9zZXRfcHJvdG9fd2l0aF9wb3J0cyhkYXRhLnByb3RvKTsKIAogCQlpZiAoZGF0YS5wcm90byA9PSAwKQogCQkJcmV0dXJuIC1JUFNFVF9FUlJfSU5WQUxJRF9QUk9UTzsKIAl9IGVsc2UKIAkJcmV0dXJuIC1JUFNFVF9FUlJfTUlTU0lOR19QUk9UTzsKIAotCXN3aXRjaCAoZGF0YS5wcm90bykgewotCWNhc2UgSVBQUk9UT19VRFA6Ci0JY2FzZSBJUFBST1RPX1RDUDoKLQljYXNlIElQUFJPVE9fSUNNUFY2OgotCQlicmVhazsKLQlkZWZhdWx0OgorCWlmICghKHdpdGhfcG9ydHMgfHwgZGF0YS5wcm90byA9PSBJUFBST1RPX0lDTVBWNikpCiAJCWRhdGEucG9ydCA9IDA7Ci0JCWJyZWFrOwotCX0KIAogCWlmICh0YltJUFNFVF9BVFRSX1RJTUVPVVRdKSB7CiAJCWlmICghd2l0aF90aW1lb3V0KGgtPnRpbWVvdXQpKQpAQCAtNDA3LDkgKzM5NSw3IEBACiAJCXRpbWVvdXQgPSBpcF9zZXRfdGltZW91dF91Z2V0KHRiW0lQU0VUX0FUVFJfVElNRU9VVF0pOwogCX0KIAotCWlmIChhZHQgPT0gSVBTRVRfVEVTVCB8fAotCSAgICAhKGRhdGEucHJvdG8gPT0gSVBQUk9UT19UQ1AgfHwgZGF0YS5wcm90byA9PSBJUFBST1RPX1VEUCkgfHwKLQkgICAgIXRiW0lQU0VUX0FUVFJfUE9SVF9UT10pIHsKKwlpZiAoYWR0ID09IElQU0VUX1RFU1QgfHwgIXdpdGhfcG9ydHMgfHwgIXRiW0lQU0VUX0FUVFJfUE9SVF9UT10pIHsKIAkJcmV0ID0gYWR0Zm4oc2V0LCAmZGF0YSwgdGltZW91dCk7CiAJCXJldHVybiBpcF9zZXRfZWV4aXN0KHJldCwgZmxhZ3MpID8gMCA6IHJldDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMKaW5kZXggMjJlMjNhYi4uNDY0Mjg3MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYwpAQCAtMTU0LDYgKzE1NCw3IEBACiAJc3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gZGF0YSA9IHsgfTsKIAl1MzIgaXAsIGlwX3RvLCBwLCBwb3J0LCBwb3J0X3RvOwogCXUzMiB0aW1lb3V0ID0gaC0+dGltZW91dDsKKwlib29sIHdpdGhfcG9ydHMgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KCF0YltJUFNFVF9BVFRSX0lQXSB8fCAhdGJbSVBTRVRfQVRUUl9JUDJdIHx8CkBAIC0xODAsMjEgKzE4MSwxNSBAQAogCiAJaWYgKHRiW0lQU0VUX0FUVFJfUFJPVE9dKSB7CiAJCWRhdGEucHJvdG8gPSBubGFfZ2V0X3U4KHRiW0lQU0VUX0FUVFJfUFJPVE9dKTsKKwkJd2l0aF9wb3J0cyA9IGlwX3NldF9wcm90b193aXRoX3BvcnRzKGRhdGEucHJvdG8pOwogCiAJCWlmIChkYXRhLnByb3RvID09IDApCiAJCQlyZXR1cm4gLUlQU0VUX0VSUl9JTlZBTElEX1BST1RPOwogCX0gZWxzZQogCQlyZXR1cm4gLUlQU0VUX0VSUl9NSVNTSU5HX1BST1RPOwogCi0Jc3dpdGNoIChkYXRhLnByb3RvKSB7Ci0JY2FzZSBJUFBST1RPX1VEUDoKLQljYXNlIElQUFJPVE9fVENQOgotCWNhc2UgSVBQUk9UT19JQ01QOgotCQlicmVhazsKLQlkZWZhdWx0OgorCWlmICghKHdpdGhfcG9ydHMgfHwgZGF0YS5wcm90byA9PSBJUFBST1RPX0lDTVApKQogCQlkYXRhLnBvcnQgPSAwOwotCQlicmVhazsKLQl9CiAKIAlpZiAodGJbSVBTRVRfQVRUUl9USU1FT1VUXSkgewogCQlpZiAoIXdpdGhfdGltZW91dChoLT50aW1lb3V0KSkKQEAgLTIwMyw3ICsxOTgsNiBAQAogCX0KIAogCWlmIChhZHQgPT0gSVBTRVRfVEVTVCB8fAotCSAgICAhKGRhdGEucHJvdG8gPT0gSVBQUk9UT19UQ1AgfHwgZGF0YS5wcm90byA9PSBJUFBST1RPX1VEUCkgfHwKIAkgICAgISh0YltJUFNFVF9BVFRSX0lQX1RPXSB8fCB0YltJUFNFVF9BVFRSX0NJRFJdIHx8CiAJICAgICAgdGJbSVBTRVRfQVRUUl9QT1JUX1RPXSkpIHsKIAkJcmV0ID0gYWR0Zm4oc2V0LCAmZGF0YSwgdGltZW91dCk7CkBAIC0yMjcsMTMgKzIyMSwxMiBAQAogCX0gZWxzZQogCQlpcF90byA9IGlwOwogCi0JcG9ydCA9IG50b2hzKGRhdGEucG9ydCk7Ci0JaWYgKHRiW0lQU0VUX0FUVFJfUE9SVF9UT10pIHsKKwlwb3J0X3RvID0gcG9ydCA9IG50b2hzKGRhdGEucG9ydCk7CisJaWYgKHdpdGhfcG9ydHMgJiYgdGJbSVBTRVRfQVRUUl9QT1JUX1RPXSkgewogCQlwb3J0X3RvID0gaXBfc2V0X2dldF9oMTYodGJbSVBTRVRfQVRUUl9QT1JUX1RPXSk7CiAJCWlmIChwb3J0ID4gcG9ydF90bykKIAkJCXN3YXAocG9ydCwgcG9ydF90byk7Ci0JfSBlbHNlCi0JCXBvcnRfdG8gPSBwb3J0OworCX0KIAogCWZvciAoOyAhYmVmb3JlKGlwX3RvLCBpcCk7IGlwKyspCiAJCWZvciAocCA9IHBvcnQ7IHAgPD0gcG9ydF90bzsgcCsrKSB7CkBAIC0zNzUsNiArMzY4LDcgQEAKIAlzdHJ1Y3QgaGFzaF9pcHBvcnRpcDZfZWxlbSBkYXRhID0geyB9OwogCXUzMiBwb3J0LCBwb3J0X3RvOwogCXUzMiB0aW1lb3V0ID0gaC0+dGltZW91dDsKKwlib29sIHdpdGhfcG9ydHMgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KCF0YltJUFNFVF9BVFRSX0lQXSB8fCAhdGJbSVBTRVRfQVRUUl9JUDJdIHx8CkBAIC00MDMsMjEgKzM5NywxNSBAQAogCiAJaWYgKHRiW0lQU0VUX0FUVFJfUFJPVE9dKSB7CiAJCWRhdGEucHJvdG8gPSBubGFfZ2V0X3U4KHRiW0lQU0VUX0FUVFJfUFJPVE9dKTsKKwkJd2l0aF9wb3J0cyA9IGlwX3NldF9wcm90b193aXRoX3BvcnRzKGRhdGEucHJvdG8pOwogCiAJCWlmIChkYXRhLnByb3RvID09IDApCiAJCQlyZXR1cm4gLUlQU0VUX0VSUl9JTlZBTElEX1BST1RPOwogCX0gZWxzZQogCQlyZXR1cm4gLUlQU0VUX0VSUl9NSVNTSU5HX1BST1RPOwogCi0Jc3dpdGNoIChkYXRhLnByb3RvKSB7Ci0JY2FzZSBJUFBST1RPX1VEUDoKLQljYXNlIElQUFJPVE9fVENQOgotCWNhc2UgSVBQUk9UT19JQ01QVjY6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJaWYgKCEod2l0aF9wb3J0cyB8fCBkYXRhLnByb3RvID09IElQUFJPVE9fSUNNUFY2KSkKIAkJZGF0YS5wb3J0ID0gMDsKLQkJYnJlYWs7Ci0JfQogCiAJaWYgKHRiW0lQU0VUX0FUVFJfVElNRU9VVF0pIHsKIAkJaWYgKCF3aXRoX3RpbWVvdXQoaC0+dGltZW91dCkpCkBAIC00MjUsOSArNDEzLDcgQEAKIAkJdGltZW91dCA9IGlwX3NldF90aW1lb3V0X3VnZXQodGJbSVBTRVRfQVRUUl9USU1FT1VUXSk7CiAJfQogCi0JaWYgKGFkdCA9PSBJUFNFVF9URVNUIHx8Ci0JICAgICEoZGF0YS5wcm90byA9PSBJUFBST1RPX1RDUCB8fCBkYXRhLnByb3RvID09IElQUFJPVE9fVURQKSB8fAotCSAgICAhdGJbSVBTRVRfQVRUUl9QT1JUX1RPXSkgeworCWlmIChhZHQgPT0gSVBTRVRfVEVTVCB8fCAhd2l0aF9wb3J0cyB8fCAhdGJbSVBTRVRfQVRUUl9QT1JUX1RPXSkgewogCQlyZXQgPSBhZHRmbihzZXQsICZkYXRhLCB0aW1lb3V0KTsKIAkJcmV0dXJuIGlwX3NldF9lZXhpc3QocmV0LCBmbGFncykgPyAwIDogcmV0OwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCmluZGV4IDYwMzNlOGIuLjJjYjg0YTUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwpAQCAtMTc0LDYgKzE3NCw3IEBACiAJc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGRhdGEgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07CiAJdTMyIGlwLCBpcF90bywgcCwgcG9ydCwgcG9ydF90bzsKIAl1MzIgdGltZW91dCA9IGgtPnRpbWVvdXQ7CisJYm9vbCB3aXRoX3BvcnRzID0gZmFsc2U7CiAJaW50IHJldDsKIAogCWlmICh1bmxpa2VseSghdGJbSVBTRVRfQVRUUl9JUF0gfHwgIXRiW0lQU0VUX0FUVFJfSVAyXSB8fApAQCAtMjA4LDIxICsyMDksMTUgQEAKIAogCWlmICh0YltJUFNFVF9BVFRSX1BST1RPXSkgewogCQlkYXRhLnByb3RvID0gbmxhX2dldF91OCh0YltJUFNFVF9BVFRSX1BST1RPXSk7CisJCXdpdGhfcG9ydHMgPSBpcF9zZXRfcHJvdG9fd2l0aF9wb3J0cyhkYXRhLnByb3RvKTsKIAogCQlpZiAoZGF0YS5wcm90byA9PSAwKQogCQkJcmV0dXJuIC1JUFNFVF9FUlJfSU5WQUxJRF9QUk9UTzsKIAl9IGVsc2UKIAkJcmV0dXJuIC1JUFNFVF9FUlJfTUlTU0lOR19QUk9UTzsKIAotCXN3aXRjaCAoZGF0YS5wcm90bykgewotCWNhc2UgSVBQUk9UT19VRFA6Ci0JY2FzZSBJUFBST1RPX1RDUDoKLQljYXNlIElQUFJPVE9fSUNNUDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwlpZiAoISh3aXRoX3BvcnRzIHx8IGRhdGEucHJvdG8gPT0gSVBQUk9UT19JQ01QKSkKIAkJZGF0YS5wb3J0ID0gMDsKLQkJYnJlYWs7Ci0JfQogCiAJaWYgKHRiW0lQU0VUX0FUVFJfVElNRU9VVF0pIHsKIAkJaWYgKCF3aXRoX3RpbWVvdXQoaC0+dGltZW91dCkpCkBAIC0yMzEsNyArMjI2LDYgQEAKIAl9CiAKIAlpZiAoYWR0ID09IElQU0VUX1RFU1QgfHwKLQkgICAgIShkYXRhLnByb3RvID09IElQUFJPVE9fVENQIHx8IGRhdGEucHJvdG8gPT0gSVBQUk9UT19VRFApIHx8CiAJICAgICEodGJbSVBTRVRfQVRUUl9JUF9UT10gfHwgdGJbSVBTRVRfQVRUUl9DSURSXSB8fAogCSAgICAgIHRiW0lQU0VUX0FUVFJfUE9SVF9UT10pKSB7CiAJCXJldCA9IGFkdGZuKHNldCwgJmRhdGEsIHRpbWVvdXQpOwpAQCAtMjU1LDEzICsyNDksMTIgQEAKIAl9IGVsc2UKIAkJaXBfdG8gPSBpcDsKIAotCXBvcnQgPSBudG9ocyhkYXRhLnBvcnQpOwotCWlmICh0YltJUFNFVF9BVFRSX1BPUlRfVE9dKSB7CisJcG9ydF90byA9IHBvcnQgPSBudG9ocyhkYXRhLnBvcnQpOworCWlmICh3aXRoX3BvcnRzICYmIHRiW0lQU0VUX0FUVFJfUE9SVF9UT10pIHsKIAkJcG9ydF90byA9IGlwX3NldF9nZXRfaDE2KHRiW0lQU0VUX0FUVFJfUE9SVF9UT10pOwogCQlpZiAocG9ydCA+IHBvcnRfdG8pCiAJCQlzd2FwKHBvcnQsIHBvcnRfdG8pOwotCX0gZWxzZQotCQlwb3J0X3RvID0gcG9ydDsKKwl9CiAKIAlmb3IgKDsgIWJlZm9yZShpcF90bywgaXApOyBpcCsrKQogCQlmb3IgKHAgPSBwb3J0OyBwIDw9IHBvcnRfdG87IHArKykgewpAQCAtNDI5LDYgKzQyMiw3IEBACiAJc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtIGRhdGEgPSB7IC5jaWRyID0gSE9TVF9NQVNLIH07CiAJdTMyIHBvcnQsIHBvcnRfdG87CiAJdTMyIHRpbWVvdXQgPSBoLT50aW1lb3V0OworCWJvb2wgd2l0aF9wb3J0cyA9IGZhbHNlOwogCWludCByZXQ7CiAKIAlpZiAodW5saWtlbHkoIXRiW0lQU0VUX0FUVFJfSVBdIHx8ICF0YltJUFNFVF9BVFRSX0lQMl0gfHwKQEAgLTQ2NSwyMSArNDU5LDE1IEBACiAKIAlpZiAodGJbSVBTRVRfQVRUUl9QUk9UT10pIHsKIAkJZGF0YS5wcm90byA9IG5sYV9nZXRfdTgodGJbSVBTRVRfQVRUUl9QUk9UT10pOworCQl3aXRoX3BvcnRzID0gaXBfc2V0X3Byb3RvX3dpdGhfcG9ydHMoZGF0YS5wcm90byk7CiAKIAkJaWYgKGRhdGEucHJvdG8gPT0gMCkKIAkJCXJldHVybiAtSVBTRVRfRVJSX0lOVkFMSURfUFJPVE87CiAJfSBlbHNlCiAJCXJldHVybiAtSVBTRVRfRVJSX01JU1NJTkdfUFJPVE87CiAKLQlzd2l0Y2ggKGRhdGEucHJvdG8pIHsKLQljYXNlIElQUFJPVE9fVURQOgotCWNhc2UgSVBQUk9UT19UQ1A6Ci0JY2FzZSBJUFBST1RPX0lDTVBWNjoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwlpZiAoISh3aXRoX3BvcnRzIHx8IGRhdGEucHJvdG8gPT0gSVBQUk9UT19JQ01QVjYpKQogCQlkYXRhLnBvcnQgPSAwOwotCQlicmVhazsKLQl9CiAKIAlpZiAodGJbSVBTRVRfQVRUUl9USU1FT1VUXSkgewogCQlpZiAoIXdpdGhfdGltZW91dChoLT50aW1lb3V0KSkKQEAgLTQ4Nyw5ICs0NzUsNyBAQAogCQl0aW1lb3V0ID0gaXBfc2V0X3RpbWVvdXRfdWdldCh0YltJUFNFVF9BVFRSX1RJTUVPVVRdKTsKIAl9CiAKLQlpZiAoYWR0ID09IElQU0VUX1RFU1QgfHwKLQkgICAgIShkYXRhLnByb3RvID09IElQUFJPVE9fVENQIHx8IGRhdGEucHJvdG8gPT0gSVBQUk9UT19VRFApIHx8Ci0JICAgICF0YltJUFNFVF9BVFRSX1BPUlRfVE9dKSB7CisJaWYgKGFkdCA9PSBJUFNFVF9URVNUIHx8ICF3aXRoX3BvcnRzIHx8ICF0YltJUFNFVF9BVFRSX1BPUlRfVE9dKSB7CiAJCXJldCA9IGFkdGZuKHNldCwgJmRhdGEsIHRpbWVvdXQpOwogCQlyZXR1cm4gaXBfc2V0X2VleGlzdChyZXQsIGZsYWdzKSA/IDAgOiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYwppbmRleCAzNGExNjU2Li44NTk4Njc2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYwpAQCAtMTcwLDYgKzE3MCw3IEBACiAJc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBkYXRhID0geyAuY2lkciA9IEhPU1RfTUFTSyB9OwogCXUzMiBwb3J0LCBwb3J0X3RvOwogCXUzMiB0aW1lb3V0ID0gaC0+dGltZW91dDsKKwlib29sIHdpdGhfcG9ydHMgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KCF0YltJUFNFVF9BVFRSX0lQXSB8fApAQCAtMTk4LDIxICsxOTksMTUgQEAKIAogCWlmICh0YltJUFNFVF9BVFRSX1BST1RPXSkgewogCQlkYXRhLnByb3RvID0gbmxhX2dldF91OCh0YltJUFNFVF9BVFRSX1BST1RPXSk7CisJCXdpdGhfcG9ydHMgPSBpcF9zZXRfcHJvdG9fd2l0aF9wb3J0cyhkYXRhLnByb3RvKTsKIAogCQlpZiAoZGF0YS5wcm90byA9PSAwKQogCQkJcmV0dXJuIC1JUFNFVF9FUlJfSU5WQUxJRF9QUk9UTzsKIAl9IGVsc2UKIAkJcmV0dXJuIC1JUFNFVF9FUlJfTUlTU0lOR19QUk9UTzsKIAotCXN3aXRjaCAoZGF0YS5wcm90bykgewotCWNhc2UgSVBQUk9UT19VRFA6Ci0JY2FzZSBJUFBST1RPX1RDUDoKLQljYXNlIElQUFJPVE9fSUNNUDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwlpZiAoISh3aXRoX3BvcnRzIHx8IGRhdGEucHJvdG8gPT0gSVBQUk9UT19JQ01QKSkKIAkJZGF0YS5wb3J0ID0gMDsKLQkJYnJlYWs7Ci0JfQogCiAJaWYgKHRiW0lQU0VUX0FUVFJfVElNRU9VVF0pIHsKIAkJaWYgKCF3aXRoX3RpbWVvdXQoaC0+dGltZW91dCkpCkBAIC0yMjAsOSArMjE1LDcgQEAKIAkJdGltZW91dCA9IGlwX3NldF90aW1lb3V0X3VnZXQodGJbSVBTRVRfQVRUUl9USU1FT1VUXSk7CiAJfQogCi0JaWYgKGFkdCA9PSBJUFNFVF9URVNUIHx8Ci0JICAgICEoZGF0YS5wcm90byA9PSBJUFBST1RPX1RDUCB8fCBkYXRhLnByb3RvID09IElQUFJPVE9fVURQKSB8fAotCSAgICAhdGJbSVBTRVRfQVRUUl9QT1JUX1RPXSkgeworCWlmIChhZHQgPT0gSVBTRVRfVEVTVCB8fCAhd2l0aF9wb3J0cyB8fCAhdGJbSVBTRVRfQVRUUl9QT1JUX1RPXSkgewogCQlyZXQgPSBhZHRmbihzZXQsICZkYXRhLCB0aW1lb3V0KTsKIAkJcmV0dXJuIGlwX3NldF9lZXhpc3QocmV0LCBmbGFncykgPyAwIDogcmV0OwogCX0KQEAgLTM5MCw2ICszODMsNyBAQAogCXN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gZGF0YSA9IHsgLmNpZHIgPSBIT1NUX01BU0sgfTsKIAl1MzIgcG9ydCwgcG9ydF90bzsKIAl1MzIgdGltZW91dCA9IGgtPnRpbWVvdXQ7CisJYm9vbCB3aXRoX3BvcnRzID0gZmFsc2U7CiAJaW50IHJldDsKIAogCWlmICh1bmxpa2VseSghdGJbSVBTRVRfQVRUUl9JUF0gfHwKQEAgLTQxOCwyMSArNDEyLDE1IEBACiAKIAlpZiAodGJbSVBTRVRfQVRUUl9QUk9UT10pIHsKIAkJZGF0YS5wcm90byA9IG5sYV9nZXRfdTgodGJbSVBTRVRfQVRUUl9QUk9UT10pOworCQl3aXRoX3BvcnRzID0gaXBfc2V0X3Byb3RvX3dpdGhfcG9ydHMoZGF0YS5wcm90byk7CiAKIAkJaWYgKGRhdGEucHJvdG8gPT0gMCkKIAkJCXJldHVybiAtSVBTRVRfRVJSX0lOVkFMSURfUFJPVE87CiAJfSBlbHNlCiAJCXJldHVybiAtSVBTRVRfRVJSX01JU1NJTkdfUFJPVE87CiAKLQlzd2l0Y2ggKGRhdGEucHJvdG8pIHsKLQljYXNlIElQUFJPVE9fVURQOgotCWNhc2UgSVBQUk9UT19UQ1A6Ci0JY2FzZSBJUFBST1RPX0lDTVBWNjoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwlpZiAoISh3aXRoX3BvcnRzIHx8IGRhdGEucHJvdG8gPT0gSVBQUk9UT19JQ01QVjYpKQogCQlkYXRhLnBvcnQgPSAwOwotCQlicmVhazsKLQl9CiAKIAlpZiAodGJbSVBTRVRfQVRUUl9USU1FT1VUXSkgewogCQlpZiAoIXdpdGhfdGltZW91dChoLT50aW1lb3V0KSkKQEAgLTQ0MCw5ICs0MjgsNyBAQAogCQl0aW1lb3V0ID0gaXBfc2V0X3RpbWVvdXRfdWdldCh0YltJUFNFVF9BVFRSX1RJTUVPVVRdKTsKIAl9CiAKLQlpZiAoYWR0ID09IElQU0VUX1RFU1QgfHwKLQkgICAgIShkYXRhLnByb3RvID09IElQUFJPVE9fVENQIHx8IGRhdGEucHJvdG8gPT0gSVBQUk9UT19VRFApIHx8Ci0JICAgICF0YltJUFNFVF9BVFRSX1BPUlRfVE9dKSB7CisJaWYgKGFkdCA9PSBJUFNFVF9URVNUIHx8ICF3aXRoX3BvcnRzIHx8ICF0YltJUFNFVF9BVFRSX1BPUlRfVE9dKSB7CiAJCXJldCA9IGFkdGZuKHNldCwgJmRhdGEsIHRpbWVvdXQpOwogCQlyZXR1cm4gaXBfc2V0X2VleGlzdChyZXQsIGZsYWdzKSA/IDAgOiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCmluZGV4IDVjNDhmZmIuLjJkYzZkZTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKQEAgLTQzLDYgKzQzLDggQEAKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9pcF92c19hcHApOwogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9pcF92c19hcHBfaW5jKTsKIAorc3RhdGljIERFRklORV9NVVRFWChfX2lwX3ZzX2FwcF9tdXRleCk7CisKIC8qCiAgKglHZXQgYW4gaXBfdnNfYXBwIG9iamVjdAogICovCkBAIC0xNjcsMTQgKzE2OSwxMyBAQAogcmVnaXN0ZXJfaXBfdnNfYXBwX2luYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF92c19hcHAgKmFwcCwgX191MTYgcHJvdG8sCiAJCSAgICAgICBfX3UxNiBwb3J0KQogewotCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIAlpbnQgcmVzdWx0OwogCi0JbXV0ZXhfbG9jaygmaXB2cy0+YXBwX211dGV4KTsKKwltdXRleF9sb2NrKCZfX2lwX3ZzX2FwcF9tdXRleCk7CiAKIAlyZXN1bHQgPSBpcF92c19hcHBfaW5jX25ldyhuZXQsIGFwcCwgcHJvdG8sIHBvcnQpOwogCi0JbXV0ZXhfdW5sb2NrKCZpcHZzLT5hcHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmX19pcF92c19hcHBfbXV0ZXgpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE4OSwxMSArMTkwLDExIEBACiAJLyogaW5jcmVhc2UgdGhlIG1vZHVsZSB1c2UgY291bnQgKi8KIAlpcF92c191c2VfY291bnRfaW5jKCk7CiAKLQltdXRleF9sb2NrKCZpcHZzLT5hcHBfbXV0ZXgpOworCW11dGV4X2xvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIAogCWxpc3RfYWRkKCZhcHAtPmFfbGlzdCwgJmlwdnMtPmFwcF9saXN0KTsKIAotCW11dGV4X3VubG9jaygmaXB2cy0+YXBwX211dGV4KTsKKwltdXRleF91bmxvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjA1LDEwICsyMDYsOSBAQAogICovCiB2b2lkIHVucmVnaXN0ZXJfaXBfdnNfYXBwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3ZzX2FwcCAqYXBwKQogewotCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIAlzdHJ1Y3QgaXBfdnNfYXBwICppbmMsICpueHQ7CiAKLQltdXRleF9sb2NrKCZpcHZzLT5hcHBfbXV0ZXgpOworCW11dGV4X2xvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmMsIG54dCwgJmFwcC0+aW5jc19saXN0LCBhX2xpc3QpIHsKIAkJaXBfdnNfYXBwX2luY19yZWxlYXNlKG5ldCwgaW5jKTsKQEAgLTIxNiw3ICsyMTYsNyBAQAogCiAJbGlzdF9kZWwoJmFwcC0+YV9saXN0KTsKIAotCW11dGV4X3VubG9jaygmaXB2cy0+YXBwX211dGV4KTsKKwltdXRleF91bmxvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIAogCS8qIGRlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCiAJaXBfdnNfdXNlX2NvdW50X2RlYygpOwpAQCAtNTAxLDcgKzUwMSw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCi0JbXV0ZXhfbG9jaygmaXB2cy0+YXBwX211dGV4KTsKKwltdXRleF9sb2NrKCZfX2lwX3ZzX2FwcF9tdXRleCk7CiAKIAlyZXR1cm4gKnBvcyA/IGlwX3ZzX2FwcF9pZHgoaXB2cywgKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOwogfQpAQCAtNTM1LDkgKzUzNSw3IEBACiAKIHN0YXRpYyB2b2lkIGlwX3ZzX2FwcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHNlcV9maWxlX25ldChzZXEpKTsKLQotCW11dGV4X3VubG9jaygmaXB2cy0+YXBwX211dGV4KTsKKwltdXRleF91bmxvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIH0KIAogc3RhdGljIGludCBpcF92c19hcHBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC01ODMsNyArNTgxLDYgQEAKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmaXB2cy0+YXBwX2xpc3QpOwotCV9fbXV0ZXhfaW5pdCgmaXB2cy0+YXBwX211dGV4LCAiaXB2cy0+YXBwX211dGV4IiwgJmlwdnMtPmFwcF9rZXkpOwogCXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImlwX3ZzX2FwcCIsIDAsICZpcF92c19hcHBfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggYjc5OWNlYS4uMzM3MzNjOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtMzYwNSw3ICszNjA1LDcgQEAKIAogCS8qIHByb2NmcyBzdGF0cyAqLwogCWlwdnMtPnRvdF9zdGF0cy5jcHVzdGF0cyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgaXBfdnNfY3B1X3N0YXRzKTsKLQlpZiAoaXB2cy0+dG90X3N0YXRzLmNwdXN0YXRzKSB7CisJaWYgKCFpcHZzLT50b3Rfc3RhdHMuY3B1c3RhdHMpIHsKIAkJcHJfZXJyKCIlcygpOiBhbGxvY19wZXJjcHUuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL25ldC9yZHMvY29uZy5jIGIvbmV0L3Jkcy9jb25nLmMKaW5kZXggNzVlYTY4Ni4uNmRhYWE0OSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9jb25nLmMKKysrIGIvbmV0L3Jkcy9jb25nLmMKQEAgLTMzLDggKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSAicmRzLmgiCiAKQEAgLTI4NSw3ICsyODQsNyBAQAogCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CiAJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOwogCi0JZ2VuZXJpY19fX3NldF9sZV9iaXQob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKKwlfX3NldF9iaXRfbGUob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKIH0KIAogdm9pZCByZHNfY29uZ19jbGVhcl9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCkKQEAgLTI5OSw3ICsyOTgsNyBAQAogCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CiAJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOwogCi0JZ2VuZXJpY19fX2NsZWFyX2xlX2JpdChvZmYsICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworCV9fY2xlYXJfYml0X2xlKG9mZiwgKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1tpXSk7CiB9CiAKIHN0YXRpYyBpbnQgcmRzX2NvbmdfdGVzdF9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCkKQEAgLTMxMCw3ICszMDksNyBAQAogCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CiAJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOwogCi0JcmV0dXJuIGdlbmVyaWNfdGVzdF9sZV9iaXQob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKKwlyZXR1cm4gdGVzdF9iaXRfbGUob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKIH0KIAogdm9pZCByZHNfY29uZ19hZGRfc29ja2V0KHN0cnVjdCByZHNfc29jayAqcnMpCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggOTM3ZDBmYy4uNTIxMjQ0NyAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMjU4OCwyMyArMjU4OCwxMjMgQEAKIAogc3RhdGljIGludCBldGh0b29sX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pZnJlcSBfX3VzZXIgKmlmcjMyKQogeworCXN0cnVjdCBjb21wYXRfZXRodG9vbF9yeG5mYyBfX3VzZXIgKmNvbXBhdF9yeG5mYzsKKwlib29sIGNvbnZlcnRfaW4gPSBmYWxzZSwgY29udmVydF9vdXQgPSBmYWxzZTsKKwlzaXplX3QgYnVmX3NpemUgPSBBTElHTihzaXplb2Yoc3RydWN0IGlmcmVxKSwgOCk7CisJc3RydWN0IGV0aHRvb2xfcnhuZmMgX191c2VyICpyeG5mYzsKIAlzdHJ1Y3QgaWZyZXEgX191c2VyICppZnI7CisJdTMyIHJ1bGVfY250ID0gMCwgYWN0dWFsX3J1bGVfY250OworCXUzMiBldGhjbWQ7CiAJdTMyIGRhdGE7Ci0Jdm9pZCBfX3VzZXIgKmRhdGFwOwotCi0JaWZyID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCppZnIpKTsKLQotCWlmIChjb3B5X2luX3VzZXIoJmlmci0+aWZyX25hbWUsICZpZnIzMi0+aWZyX25hbWUsIElGTkFNU0laKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaW50IHJldDsKIAogCWlmIChnZXRfdXNlcihkYXRhLCAmaWZyMzItPmlmcl9pZnJ1LmlmcnVfZGF0YSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZGF0YXAgPSBjb21wYXRfcHRyKGRhdGEpOwotCWlmIChwdXRfdXNlcihkYXRhcCwgJmlmci0+aWZyX2lmcnUuaWZydV9kYXRhKSkKKwljb21wYXRfcnhuZmMgPSBjb21wYXRfcHRyKGRhdGEpOworCisJaWYgKGdldF91c2VyKGV0aGNtZCwgJmNvbXBhdF9yeG5mYy0+Y21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZGV2X2lvY3RsKG5ldCwgU0lPQ0VUSFRPT0wsIGlmcik7CisJLyogTW9zdCBldGh0b29sIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgd2l0aG91dCBwYWRkaW5nLgorCSAqIFVuZm9ydHVuYXRlbHkgc3RydWN0IGV0aHRvb2xfcnhuZmMgaXMgYW4gZXhjZXB0aW9uLgorCSAqLworCXN3aXRjaCAoZXRoY21kKSB7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQUxMOgorCQkvKiBCdWZmZXIgc2l6ZSBpcyB2YXJpYWJsZSAqLworCQlpZiAoZ2V0X3VzZXIocnVsZV9jbnQsICZjb21wYXRfcnhuZmMtPnJ1bGVfY250KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAocnVsZV9jbnQgPiBLTUFMTE9DX01BWF9TSVpFIC8gc2l6ZW9mKHUzMikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJYnVmX3NpemUgKz0gcnVsZV9jbnQgKiBzaXplb2YodTMyKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTENOVDoKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRToKKwkJY29udmVydF9vdXQgPSB0cnVlOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEVUSFRPT0xfU1JYQ0xTUkxERUw6CisJY2FzZSBFVEhUT09MX1NSWENMU1JMSU5TOgorCQlidWZfc2l6ZSArPSBzaXplb2Yoc3RydWN0IGV0aHRvb2xfcnhuZmMpOworCQljb252ZXJ0X2luID0gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCisJaWZyID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UoYnVmX3NpemUpOworCXJ4bmZjID0gKHZvaWQgKilpZnIgKyBBTElHTihzaXplb2Yoc3RydWN0IGlmcmVxKSwgOCk7CisKKwlpZiAoY29weV9pbl91c2VyKCZpZnItPmlmcl9uYW1lLCAmaWZyMzItPmlmcl9uYW1lLCBJRk5BTVNJWikpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHB1dF91c2VyKGNvbnZlcnRfaW4gPyByeG5mYyA6IGNvbXBhdF9wdHIoZGF0YSksCisJCSAgICAgJmlmci0+aWZyX2lmcnUuaWZydV9kYXRhKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoY29udmVydF9pbikgeworCQkvKiBXZSBleHBlY3QgdGhlcmUgdG8gYmUgaG9sZXMgYmV0d2VlbiBmcy5tX3UgYW5kCisJCSAqIGZzLnJpbmdfY29va2llIGFuZCBhdCB0aGUgZW5kIG9mIGZzLCBidXQgbm93aGVyZSBlbHNlLgorCQkgKi8KKwkJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBjb21wYXRfZXRodG9vbF9yeG5mYywgZnMubV91KSArCisJCQkgICAgIHNpemVvZihjb21wYXRfcnhuZmMtPmZzLm1fdSkgIT0KKwkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGV0aHRvb2xfcnhuZmMsIGZzLm1fdSkgKworCQkJICAgICBzaXplb2YocnhuZmMtPmZzLm1fdSkpOworCQlCVUlMRF9CVUdfT04oCisJCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhuZmMsIGZzLmxvY2F0aW9uKSAtCisJCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhuZmMsIGZzLnJpbmdfY29va2llKSAhPQorCQkJb2Zmc2V0b2Yoc3RydWN0IGV0aHRvb2xfcnhuZmMsIGZzLmxvY2F0aW9uKSAtCisJCQlvZmZzZXRvZihzdHJ1Y3QgZXRodG9vbF9yeG5mYywgZnMucmluZ19jb29raWUpKTsKKworCQlpZiAoY29weV9pbl91c2VyKHJ4bmZjLCBjb21wYXRfcnhuZmMsCisJCQkJICh2b2lkICopKCZyeG5mYy0+ZnMubV91ICsgMSkgLQorCQkJCSAodm9pZCAqKXJ4bmZjKSB8fAorCQkgICAgY29weV9pbl91c2VyKCZyeG5mYy0+ZnMucmluZ19jb29raWUsCisJCQkJICZjb21wYXRfcnhuZmMtPmZzLnJpbmdfY29va2llLAorCQkJCSAodm9pZCAqKSgmcnhuZmMtPmZzLmxvY2F0aW9uICsgMSkgLQorCQkJCSAodm9pZCAqKSZyeG5mYy0+ZnMucmluZ19jb29raWUpIHx8CisJCSAgICBjb3B5X2luX3VzZXIoJnJ4bmZjLT5ydWxlX2NudCwgJmNvbXBhdF9yeG5mYy0+cnVsZV9jbnQsCisJCQkJIHNpemVvZihyeG5mYy0+cnVsZV9jbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldCA9IGRldl9pb2N0bChuZXQsIFNJT0NFVEhUT09MLCBpZnIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29udmVydF9vdXQpIHsKKwkJaWYgKGNvcHlfaW5fdXNlcihjb21wYXRfcnhuZmMsIHJ4bmZjLAorCQkJCSAoY29uc3Qgdm9pZCAqKSgmcnhuZmMtPmZzLm1fdSArIDEpIC0KKwkJCQkgKGNvbnN0IHZvaWQgKilyeG5mYykgfHwKKwkJICAgIGNvcHlfaW5fdXNlcigmY29tcGF0X3J4bmZjLT5mcy5yaW5nX2Nvb2tpZSwKKwkJCQkgJnJ4bmZjLT5mcy5yaW5nX2Nvb2tpZSwKKwkJCQkgKGNvbnN0IHZvaWQgKikoJnJ4bmZjLT5mcy5sb2NhdGlvbiArIDEpIC0KKwkJCQkgKGNvbnN0IHZvaWQgKikmcnhuZmMtPmZzLnJpbmdfY29va2llKSB8fAorCQkgICAgY29weV9pbl91c2VyKCZjb21wYXRfcnhuZmMtPnJ1bGVfY250LCAmcnhuZmMtPnJ1bGVfY250LAorCQkJCSBzaXplb2YocnhuZmMtPnJ1bGVfY250KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoZXRoY21kID09IEVUSFRPT0xfR1JYQ0xTUkxBTEwpIHsKKwkJCS8qIEFzIGFuIG9wdGltaXNhdGlvbiwgd2Ugb25seSBjb3B5IHRoZSBhY3R1YWwKKwkJCSAqIG51bWJlciBvZiBydWxlcyB0aGF0IHRoZSB1bmRlcmx5aW5nCisJCQkgKiBmdW5jdGlvbiByZXR1cm5lZC4gIFNpbmNlIE1hbGxvcnkgbWlnaHQKKwkJCSAqIGNoYW5nZSB0aGUgcnVsZSBjb3VudCBpbiB1c2VyIG1lbW9yeSwgd2UKKwkJCSAqIGNoZWNrIHRoYXQgaXQgaXMgbGVzcyB0aGFuIHRoZSBydWxlIGNvdW50CisJCQkgKiBvcmlnaW5hbGx5IGdpdmVuIChhcyB0aGUgdXNlciBidWZmZXIgc2l6ZSksCisJCQkgKiB3aGljaCBoYXMgYmVlbiByYW5nZS1jaGVja2VkLgorCQkJICovCisJCQlpZiAoZ2V0X3VzZXIoYWN0dWFsX3J1bGVfY250LCAmcnhuZmMtPnJ1bGVfY250KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWlmIChhY3R1YWxfcnVsZV9jbnQgPCBydWxlX2NudCkKKwkJCQlydWxlX2NudCA9IGFjdHVhbF9ydWxlX2NudDsKKwkJCWlmIChjb3B5X2luX3VzZXIoJmNvbXBhdF9yeG5mYy0+cnVsZV9sb2NzWzBdLAorCQkJCQkgJnJ4bmZjLT5ydWxlX2xvY3NbMF0sCisJCQkJCSBydWxlX2NudCAqIHNpemVvZih1MzIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNvbXBhdF9zaW9jd2FuZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNvbXBhdF9pZnJlcSBfX3VzZXIgKnVpZnIzMikKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCBkNTc1ZjA1Li5mODNhM2QxIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0xOTA3LDcgKzE5MDcsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLWludCB4ZnJtX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCitpbnQgX194ZnJtX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGJvb2wgaW5pdF9yZXBsYXkpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm87CiAJc3RydWN0IHhmcm1fbW9kZSAqaW5uZXJfbW9kZTsKQEAgLTE5ODAsMTIgKzE5ODAsMjUgQEAKIAlpZiAoeC0+b3V0ZXJfbW9kZSA9PSBOVUxMKQogCQlnb3RvIGVycm9yOwogCisJaWYgKGluaXRfcmVwbGF5KSB7CisJCWVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yOworCX0KKwogCXgtPmttLnN0YXRlID0gWEZSTV9TVEFURV9WQUxJRDsKIAogZXJyb3I6CiAJcmV0dXJuIGVycjsKIH0KIAorRVhQT1JUX1NZTUJPTChfX3hmcm1faW5pdF9zdGF0ZSk7CisKK2ludCB4ZnJtX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCit7CisJcmV0dXJuIF9feGZybV9pbml0X3N0YXRlKHgsIHRydWUpOworfQorCiBFWFBPUlRfU1lNQk9MKHhmcm1faW5pdF9zdGF0ZSk7CiAKIGludCBfX25ldF9pbml0IHhmcm1fc3RhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IDcwNjM4NWEuLmZjMTUyZDI4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtNTExLDcgKzUxMSw3IEBACiAKIAl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmeC0+bWFyayk7CiAKLQllcnIgPSB4ZnJtX2luaXRfc3RhdGUoeCk7CisJZXJyID0gX194ZnJtX2luaXRfc3RhdGUoeCwgZmFsc2UpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUgYi9zY3JpcHRzL01ha2VmaWxlCmluZGV4IDJlMDg4MTAuLmZjZWEyNjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsMTEgQEAKICMgVGhlIGZvbGxvd2luZyBob3N0cHJvZ3MteSBwcm9ncmFtcyBhcmUgb25seSBidWlsZCBvbiBkZW1hbmQKIGhvc3Rwcm9ncy15ICs9IHVuaWZkZWYKIAorIyBUaGlzIHRhcmdldCBpcyB1c2VkIGludGVybmFsbHkgdG8gYXZvaWQgImlzIHVwIHRvIGRhdGUiIG1lc3NhZ2VzCitQSE9OWSArPSBidWlsZF91bmlmZGVmCitidWlsZF91bmlmZGVmOiBzY3JpcHRzL3VuaWZkZWYgRk9SQ0UKKwlAOgorCiBzdWJkaXItJChDT05GSUdfTU9EVkVSU0lPTlMpICs9IGdlbmtzeW1zCiBzdWJkaXIteSAgICAgICAgICAgICAgICAgICAgICs9IG1vZAogc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpICs9IHNlbGludXgKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCmluZGV4IDRlYjk5YWIuLmQ1ZjkyNWEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZApAQCAtNDksNiArNDksNDAgQEAKICAgICAgICAgICAgICAgICAkKGVycm9yIENGTEFHUyB3YXMgY2hhbmdlZCBpbiAiJChrYnVpbGQtZmlsZSkiLiBGaXggaXQgdG8gdXNlIEVYVFJBX0NGTEFHUykKICAgICAgICAgZW5kaWYKIGVuZGlmCisKKyMKKyMgbWFrZSBXPTEgc2V0dGluZ3MKKyMKKyMgJChjYWxsIGNjLW9wdGlvbi4uLiApIGhhbmRsZXMgZ2NjIC1XLi4gb3B0aW9ucyB3aGljaAorIyBhcmUgbm90IHN1cHBvcnRlZCBieSBhbGwgdmVyc2lvbnMgb2YgdGhlIGNvbXBpbGVyCitpZmRlZiBLQlVJTERfRU5BQkxFX0VYVFJBX0dDQ19DSEVDS1MKK0tCVUlMRF9FWFRSQV9XQVJOSU5HUyA6PSAtV2V4dHJhCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVd1bnVzZWQgLVduby11bnVzZWQtcGFyYW1ldGVyCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdhZ2dyZWdhdGUtcmV0dXJuCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdiYWQtZnVuY3Rpb24tY2FzdAorS0JVSUxEX0VYVFJBX1dBUk5JTkdTICs9IC1XY2FzdC1xdWFsCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdjYXN0LWFsaWduCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdjb252ZXJzaW9uCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdkaXNhYmxlZC1vcHRpbWl6YXRpb24KK0tCVUlMRF9FWFRSQV9XQVJOSU5HUyArPSAtV2xvZ2ljYWwtb3AKK0tCVUlMRF9FWFRSQV9XQVJOSU5HUyArPSAtV21pc3NpbmctZGVjbGFyYXRpb25zCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUKK0tCVUlMRF9FWFRSQV9XQVJOSU5HUyArPSAkKGNhbGwgY2Mtb3B0aW9uLCAtV21pc3NpbmctaW5jbHVkZS1kaXJzLCkKK0tCVUlMRF9FWFRSQV9XQVJOSU5HUyArPSAtV21pc3NpbmctcHJvdG90eXBlcworS0JVSUxEX0VYVFJBX1dBUk5JTkdTICs9IC1XbmVzdGVkLWV4dGVybnMKK0tCVUlMRF9FWFRSQV9XQVJOSU5HUyArPSAtV29sZC1zdHlsZS1kZWZpbml0aW9uCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwgLVdvdmVybGVuZ3RoLXN0cmluZ3MsKQorS0JVSUxEX0VYVFJBX1dBUk5JTkdTICs9IC1XcGFja2VkCitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdwYWNrZWQtYml0ZmllbGQtY29tcGF0CitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdwYWRkZWQKK0tCVUlMRF9FWFRSQV9XQVJOSU5HUyArPSAtV3BvaW50ZXItYXJpdGgKK0tCVUlMRF9FWFRSQV9XQVJOSU5HUyArPSAtV3JlZHVuZGFudC1kZWNscworS0JVSUxEX0VYVFJBX1dBUk5JTkdTICs9IC1Xc2hhZG93CitLQlVJTERfRVhUUkFfV0FSTklOR1MgKz0gLVdzd2l0Y2gtZGVmYXVsdAorS0JVSUxEX0VYVFJBX1dBUk5JTkdTICs9ICQoY2FsbCBjYy1vcHRpb24sIC1XdmxhLCkKK0tCVUlMRF9DRkxBR1MgKz0gJChLQlVJTERfRVhUUkFfV0FSTklOR1MpCitlbmRpZgorCiBpbmNsdWRlIHNjcmlwdHMvTWFrZWZpbGUubGliCiAKIGlmZGVmIGhvc3QtcHJvZ3MKQEAgLTQwMyw3ICs0MzcsNiBAQAogICBpbmNsdWRlICQoY21kX2ZpbGVzKQogZW5kaWYKIAotCiAjIERlY2xhcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSAuUEhPTlkgdmFyaWFibGUgYXMgcGhvbnkuICBXZSBrZWVwIHRoYXQKICMgaW5mb3JtYXRpb24gaW4gYSB2YXJpYWJsZSBzZSB3ZSBjYW4gdXNlIGl0IGluIGlmX2NoYW5nZWQgYW5kIGZyaWVuZHMuCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmxvYXQtby1tZXRlciBiL3NjcmlwdHMvYmxvYXQtby1tZXRlcgppbmRleCA2NTAxYTUwLi42MTI5MDIwIDEwMDc1NQotLS0gYS9zY3JpcHRzL2Jsb2F0LW8tbWV0ZXIKKysrIGIvc2NyaXB0cy9ibG9hdC1vLW1ldGVyCkBAIC0xNyw3ICsxNyw5IEBACiAgICAgc3ltID0ge30KICAgICBmb3IgbCBpbiBvcy5wb3Blbigibm0gLS1zaXplLXNvcnQgIiArIGZpbGUpLnJlYWRsaW5lcygpOgogICAgICAgICBzaXplLCB0eXBlLCBuYW1lID0gbFs6LTFdLnNwbGl0KCkKLSAgICAgICAgaWYgdHlwZSBpbiAidFRkRGJCIjoKKyAgICAgICAgaWYgdHlwZSBpbiAidFRkRGJCclIiOgorICAgICAgICAgICAgIyBzdHJpcCBnZW5lcmF0ZWQgc3ltYm9scworICAgICAgICAgICAgaWYgbmFtZVs6Nl0gPT0gIl9fbW9kXyI6IGNvbnRpbnVlCiAgICAgICAgICAgICAjIGZ1bmN0aW9uIG5hbWVzIGJlZ2luIHdpdGggJy4nIG9uIDY0LWJpdCBwb3dlcnBjCiAgICAgICAgICAgICBpZiAiLiIgaW4gbmFtZVsxOl06IG5hbWUgPSAic3RhdGljLiIgKyBuYW1lLnNwbGl0KCIuIilbMF0KICAgICAgICAgICAgIHN5bVtuYW1lXSA9IHN5bS5nZXQobmFtZSwgMCkgKyBpbnQoc2l6ZSwgMTYpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggNTg4NDhlMy4uOGY5ZTM5NCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMjgwNCw5ICsyODA0LDkgQEAKIAkJCVdBUk4oImNvbnNpZGVyIHVzaW5nIGEgY29tcGxldGlvblxuIiAuICRoZXJlY3Vycik7CiAKIAkJfQotIyByZWNvbW1lbmQgc3RyaWN0X3N0cnRvKiBvdmVyIHNpbXBsZV9zdHJ0byoKKyMgcmVjb21tZW5kIGtzdHJ0byogb3ZlciBzaW1wbGVfc3RydG8qCiAJCWlmICgkbGluZSA9fiAvXGJzaW1wbGVfKHN0cnRvLio/KVxzKlwoLykgewotCQkJV0FSTigiY29uc2lkZXIgdXNpbmcgc3RyaWN0XyQxIGluIHByZWZlcmVuY2UgdG8gc2ltcGxlXyQxXG4iIC4gJGhlcmVjdXJyKTsKKwkJCVdBUk4oImNvbnNpZGVyIHVzaW5nIGtzdHJ0byogaW4gcHJlZmVyZW5jZSB0byBzaW1wbGVfJDFcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAjIGNoZWNrIGZvciBfX2luaXRjYWxsKCksIHVzZSBkZXZpY2VfaW5pdGNhbGwoKSBleHBsaWNpdGx5IHBsZWFzZQogCQlpZiAoJGxpbmUgPX4gL14uXHMqX19pbml0Y2FsbFxzKlwoLykgewpAQCAtMjkwMiw2ICsyOTAyLDExIEBACiAJCSAgICAkbGluZSA9fiAvREVWSUNFX0FUVFIuKlNfSVdVR08vICkgewogCQkJV0FSTigiRXhwb3J0aW5nIHdvcmxkIHdyaXRhYmxlIGZpbGVzIGlzIHVzdWFsbHkgYW4gZXJyb3IuIENvbnNpZGVyIG1vcmUgcmVzdHJpY3RpdmUgcGVybWlzc2lvbnMuXG4iIC4gJGhlcmVjdXJyKTsKIAkJfQorCisJCSMgQ2hlY2sgZm9yIG1lbXNldCB3aXRoIHN3YXBwZWQgYXJndW1lbnRzCisJCWlmICgkbGluZSA9fiAvbWVtc2V0LipcLChcIHwpKDB4fCkwKFwgfDB8KVwpOy8pIHsKKwkJCUVSUk9SKCJtZW1zZXQgc2l6ZSBpcyAzcmQgYXJndW1lbnQsIG5vdCB0aGUgc2Vjb25kLlxuIiAuICRoZXJlY3Vycik7CisJCX0KIAl9CiAKIAkjIElmIHdlIGhhdmUgbm8gaW5wdXQgYXQgYWxsLCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0IG9uCkBAIC0yOTQ0LDYgKzI5NDksNyBAQAogCQlpZiAoJHJwdF9jbGVhbmVycykgewogCQkJcHJpbnQgIk5PVEU6IHdoaXRlc3BhY2UgZXJyb3JzIGRldGVjdGVkLCB5b3UgbWF5IHdpc2ggdG8gdXNlIHNjcmlwdHMvY2xlYW5wYXRjaCBvclxuIjsKIAkJCXByaW50ICIgICAgICBzY3JpcHRzL2NsZWFuZmlsZVxuXG4iOworCQkJJHJwdF9jbGVhbmVycyA9IDA7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyBiL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZwppbmRleCAxNTEyYzBhLi5lMTg2MjQyIDEwMDc1NQotLS0gYS9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKKysrIGIvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCkBAIC01NiwxMCArNTYsMTEgQEAKIGR1bXBfY29uZmlnICIkaW1nIgogCiAjIFRoYXQgZGlkbid0IHdvcmssIHNvIHJldHJ5IGFmdGVyIGRlY29tcHJlc3Npb24uCi10cnlfZGVjb21wcmVzcyAnXDAzN1wyMTNcMDEwJyB4eSAgZ3VuemlwCi10cnlfZGVjb21wcmVzcyAnQlpoJyAgICAgICAgICB4eSAgYnVuemlwMgotdHJ5X2RlY29tcHJlc3MgJ1wxMzVcMFwwXDAnICAgeHh4IHVubHptYQotdHJ5X2RlY29tcHJlc3MgJ1wyMTFcMTE0XDEzMicgeHkgICdsem9wIC1kJwordHJ5X2RlY29tcHJlc3MgJ1wwMzdcMjEzXDAxMCcgeHkgICAgZ3VuemlwCit0cnlfZGVjb21wcmVzcyAnXDM3NTd6WFpcMDAwJyBhYmNkZSB1bnh6Cit0cnlfZGVjb21wcmVzcyAnQlpoJyAgICAgICAgICB4eSAgICBidW56aXAyCit0cnlfZGVjb21wcmVzcyAnXDEzNVwwXDBcMCcgICB4eHggICB1bmx6bWEKK3RyeV9kZWNvbXByZXNzICdcMjExXDExNFwxMzInIHh5ICAgICdsem9wIC1kJwogCiAjIEJhaWwgb3V0OgogZWNobyAiJG1lOiBDYW5ub3QgZmluZCBrZXJuZWwgY29uZmlnLiIgPiYyCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL01ha2VmaWxlIGIvc2NyaXB0cy9nZW5rc3ltcy9NYWtlZmlsZQppbmRleCBlNDIwZmU0Li4xM2QwM2NmIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbmtzeW1zL01ha2VmaWxlCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvTWFrZWZpbGUKQEAgLTI4LDkgKzI4LDkgQEAKICMgZmxleAogCiBxdWlldF9jbWRfbGV4LmMgPSBGTEVYICAgICRACi0gICAgICBjbWRfbGV4LmMgPSBmbGV4IC1vJEAgLWQgJDwgJChvYmopL3BhcnNlLmgKKyAgICAgIGNtZF9sZXguYyA9IGZsZXggLW8kQCAtZCAkPAogCi0kKG9iaikvbGV4LmM6ICQob2JqKS9sZXgubCAkKG9iaikvcGFyc2UuaCAkKG9iaikva2V5d29yZHMuYyBGT1JDRQorJChvYmopL2xleC5jOiAkKG9iaikvbGV4LmwgJChvYmopL2tleXdvcmRzLmMgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZXguYykKIAljcCAkQCAkQF9zaGlwcGVkCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMvZ2Vua3N5bXMuYyBiL3NjcmlwdHMvZ2Vua3N5bXMvZ2Vua3N5bXMuYwppbmRleCBmOTkxMTVlLi5mOWU3NTUzIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbmtzeW1zL2dlbmtzeW1zLmMKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9nZW5rc3ltcy5jCkBAIC01MywxMiArNTMsMjIgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpleHBhbnNpb25fdHJhaWw7CiBzdGF0aWMgc3RydWN0IHN5bWJvbCAqdmlzaXRlZF9zeW1ib2xzOwogCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3ltYm9sX3R5cGVfbmFtZVtdID0gewotCSJub3JtYWwiLCAidHlwZWRlZiIsICJlbnVtIiwgInN0cnVjdCIsICJ1bmlvbiIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWludCBuOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IHN5bWJvbF90eXBlc1tdID0geworCVtTWU1fTk9STUFMXSAgICAgPSB7IDAsIE5VTEx9LAorCVtTWU1fVFlQRURFRl0gICAgPSB7J3QnLCAidHlwZWRlZiJ9LAorCVtTWU1fRU5VTV0gICAgICAgPSB7J2UnLCAiZW51bSJ9LAorCVtTWU1fU1RSVUNUXSAgICAgPSB7J3MnLCAic3RydWN0In0sCisJW1NZTV9VTklPTl0gICAgICA9IHsndScsICJ1bmlvbiJ9LAorCVtTWU1fRU5VTV9DT05TVF0gPSB7J0UnLCAiZW51bSBjb25zdGFudCJ9LAogfTsKIAogc3RhdGljIGludCBlcXVhbF9saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqYSwgc3RydWN0IHN0cmluZ19saXN0ICpiKTsKIHN0YXRpYyB2b2lkIHByaW50X2xpc3QoRklMRSAqIGYsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCk7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICpjb25jYXRfbGlzdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnN0YXJ0LCAuLi4pOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqbWtfbm9kZShjb25zdCBjaGFyICpzdHJpbmcpOwogc3RhdGljIHZvaWQgcHJpbnRfbG9jYXRpb24odm9pZCk7CiBzdGF0aWMgdm9pZCBwcmludF90eXBlX25hbWUoZW51bSBzeW1ib2xfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKIApAQCAtMTQwLDE0ICsxNTAsMjAgQEAKIAogc3RhdGljIGVudW0gc3ltYm9sX3R5cGUgbWFwX3RvX25zKGVudW0gc3ltYm9sX3R5cGUgdCkKIHsKLQlpZiAodCA9PSBTWU1fVFlQRURFRikKLQkJdCA9IFNZTV9OT1JNQUw7Ci0JZWxzZSBpZiAodCA9PSBTWU1fVU5JT04pCi0JCXQgPSBTWU1fU1RSVUNUOworCXN3aXRjaCAodCkgeworCWNhc2UgU1lNX0VOVU1fQ09OU1Q6CisJY2FzZSBTWU1fTk9STUFMOgorCWNhc2UgU1lNX1RZUEVERUY6CisJCXJldHVybiBTWU1fTk9STUFMOworCWNhc2UgU1lNX0VOVU06CisJY2FzZSBTWU1fU1RSVUNUOgorCWNhc2UgU1lNX1VOSU9OOgorCQlyZXR1cm4gU1lNX1NUUlVDVDsKKwl9CiAJcmV0dXJuIHQ7CiB9CiAKLXN0cnVjdCBzeW1ib2wgKmZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gc3ltYm9sX3R5cGUgbnMpCitzdHJ1Y3Qgc3ltYm9sICpmaW5kX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLCBlbnVtIHN5bWJvbF90eXBlIG5zLCBpbnQgZXhhY3QpCiB7CiAJdW5zaWduZWQgbG9uZyBoID0gY3JjMzIobmFtZSkgJSBIQVNIX0JVQ0tFVFM7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwpAQCAtMTU4LDYgKzE3NCw4IEBACiAJCSAgICBzeW0tPmlzX2RlY2xhcmVkKQogCQkJYnJlYWs7CiAKKwlpZiAoZXhhY3QgJiYgc3ltICYmIHN5bS0+dHlwZSAhPSBucykKKwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHN5bTsKIH0KIApAQCAtMTgwLDEwICsxOTgsNDcgQEAKIAkJCSAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlZm4sIGludCBpc19leHRlcm4sCiAJCQkgICAgaW50IGlzX3JlZmVyZW5jZSkKIHsKLQl1bnNpZ25lZCBsb25nIGggPSBjcmMzMihuYW1lKSAlIEhBU0hfQlVDS0VUUzsKKwl1bnNpZ25lZCBsb25nIGg7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwogCWVudW0gc3ltYm9sX3N0YXR1cyBzdGF0dXMgPSBTVEFUVVNfVU5DSEFOR0VEOworCS8qIFRoZSBwYXJzZXIgYWRkcyBzeW1ib2xzIGluIHRoZSBvcmRlciB0aGVpciBkZWNsYXJhdGlvbiBjb21wbGV0ZXMsCisJICogc28gaXQgaXMgc2FmZSB0byBzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIHByZXZpb3VzIGVudW0gY29uc3RhbnQgaW4KKwkgKiBhIHN0YXRpYyB2YXJpYWJsZS4KKwkgKi8KKwlzdGF0aWMgaW50IGVudW1fY291bnRlcjsKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICpsYXN0X2VudW1fZXhwcjsKIAorCWlmICh0eXBlID09IFNZTV9FTlVNX0NPTlNUKSB7CisJCWlmIChkZWZuKSB7CisJCQlmcmVlX2xpc3QobGFzdF9lbnVtX2V4cHIsIE5VTEwpOworCQkJbGFzdF9lbnVtX2V4cHIgPSBjb3B5X2xpc3RfcmFuZ2UoZGVmbiwgTlVMTCk7CisJCQllbnVtX2NvdW50ZXIgPSAxOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmluZ19saXN0ICpleHByOworCQkJY2hhciBidWZbMjBdOworCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBlbnVtX2NvdW50ZXIrKyk7CisJCQlpZiAobGFzdF9lbnVtX2V4cHIpIHsKKwkJCQlleHByID0gY29weV9saXN0X3JhbmdlKGxhc3RfZW51bV9leHByLCBOVUxMKTsKKwkJCQlkZWZuID0gY29uY2F0X2xpc3QobWtfbm9kZSgiKCIpLAorCQkJCQkJICAgZXhwciwKKwkJCQkJCSAgIG1rX25vZGUoIikiKSwKKwkJCQkJCSAgIG1rX25vZGUoIisiKSwKKwkJCQkJCSAgIG1rX25vZGUoYnVmKSwgTlVMTCk7CisJCQl9IGVsc2UgeworCQkJCWRlZm4gPSBta19ub2RlKGJ1Zik7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gU1lNX0VOVU0pIHsKKwkJZnJlZV9saXN0KGxhc3RfZW51bV9leHByLCBOVUxMKTsKKwkJbGFzdF9lbnVtX2V4cHIgPSBOVUxMOworCQllbnVtX2NvdW50ZXIgPSAwOworCQlpZiAoIW5hbWUpCisJCQkvKiBBbm9ueW1vdXMgZW51bSBkZWZpbml0aW9uLCBub3RoaW5nIG1vcmUgdG8gZG8gKi8KKwkJCXJldHVybiBOVUxMOworCX0KKworCWggPSBjcmMzMihuYW1lKSAlIEhBU0hfQlVDS0VUUzsKIAlmb3IgKHN5bSA9IHN5bXRhYltoXTsgc3ltOyBzeW0gPSBzeW0tPmhhc2hfbmV4dCkgewogCQlpZiAobWFwX3RvX25zKHN5bS0+dHlwZSkgPT0gbWFwX3RvX25zKHR5cGUpICYmCiAJCSAgICBzdHJjbXAobmFtZSwgc3ltLT5uYW1lKSA9PSAwKSB7CkBAIC0yNDcsOCArMzAyLDEyIEBACiAJc3ltLT5pc19vdmVycmlkZSA9IDA7CiAKIAlpZiAoZmxhZ19kZWJ1ZykgewotCQlmcHJpbnRmKGRlYnVnZmlsZSwgIkRlZm4gZm9yICVzICVzID09IDwiLAotCQkJc3ltYm9sX3R5cGVfbmFtZVt0eXBlXSwgbmFtZSk7CisJCWlmIChzeW1ib2xfdHlwZXNbdHlwZV0ubmFtZSkKKwkJCWZwcmludGYoZGVidWdmaWxlLCAiRGVmbiBmb3IgJXMgJXMgPT0gPCIsCisJCQkJc3ltYm9sX3R5cGVzW3R5cGVdLm5hbWUsIG5hbWUpOworCQllbHNlCisJCQlmcHJpbnRmKGRlYnVnZmlsZSwgIkRlZm4gZm9yIHR5cGUlZCAlcyA9PSA8IiwKKwkJCQl0eXBlLCBuYW1lKTsKIAkJaWYgKGlzX2V4dGVybikKIAkJCWZwdXRzKCJleHRlcm4gIiwgZGVidWdmaWxlKTsKIAkJcHJpbnRfbGlzdChkZWJ1Z2ZpbGUsIGRlZm4pOwpAQCAtMjg4LDYgKzM0NywzNSBAQAogCX0KIH0KIAorc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqbWtfbm9kZShjb25zdCBjaGFyICpzdHJpbmcpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpuZXdub2RlOworCisJbmV3bm9kZSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdub2RlKSk7CisJbmV3bm9kZS0+c3RyaW5nID0geHN0cmR1cChzdHJpbmcpOworCW5ld25vZGUtPnRhZyA9IFNZTV9OT1JNQUw7CisJbmV3bm9kZS0+bmV4dCA9IE5VTEw7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqY29uY2F0X2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpzdGFydCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IHN0cmluZ19saXN0ICpuLCAqbjI7CisKKwlpZiAoIXN0YXJ0KQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKHZhX3N0YXJ0KGFwLCBzdGFydCk7IChuID0gdmFfYXJnKGFwLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKikpOykgeworCQlmb3IgKG4yID0gbjsgbjItPm5leHQ7IG4yID0gbjItPm5leHQpCisJCQk7CisJCW4yLT5uZXh0ID0gc3RhcnQ7CisJCXN0YXJ0ID0gbjsKKwl9CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gc3RhcnQ7Cit9CisKIHN0cnVjdCBzdHJpbmdfbGlzdCAqY29weV9ub2RlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbm9kZSkKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm5ld25vZGU7CkBAIC0yOTksNiArMzg3LDIyIEBACiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKK3N0cnVjdCBzdHJpbmdfbGlzdCAqY29weV9saXN0X3JhbmdlKHN0cnVjdCBzdHJpbmdfbGlzdCAqc3RhcnQsCisJCQkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZW5kKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzLCAqbjsKKworCWlmIChzdGFydCA9PSBlbmQpCisJCXJldHVybiBOVUxMOworCW4gPSByZXMgPSBjb3B5X25vZGUoc3RhcnQpOworCWZvciAoc3RhcnQgPSBzdGFydC0+bmV4dDsgc3RhcnQgIT0gZW5kOyBzdGFydCA9IHN0YXJ0LT5uZXh0KSB7CisJCW4tPm5leHQgPSBjb3B5X25vZGUoc3RhcnQpOworCQluID0gbi0+bmV4dDsKKwl9CisJbi0+bmV4dCA9IE5VTEw7CisJcmV0dXJuIHJlczsKK30KKwogc3RhdGljIGludCBlcXVhbF9saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqYSwgc3RydWN0IHN0cmluZ19saXN0ICpiKQogewogCXdoaWxlIChhICYmIGIpIHsKQEAgLTM0Niw4ICs0NTAsOCBAQAogCWlmIChub2RlLnN0cmluZ1sxXSA9PSAnIycpIHsKIAkJaW50IG47CiAKLQkJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3ltYm9sX3R5cGVfbmFtZSk7IG4rKykgewotCQkJaWYgKG5vZGUuc3RyaW5nWzBdID09IHN5bWJvbF90eXBlX25hbWVbbl1bMF0pIHsKKwkJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3ltYm9sX3R5cGVzKTsgbisrKSB7CisJCQlpZiAobm9kZS5zdHJpbmdbMF0gPT0gc3ltYm9sX3R5cGVzW25dLm4pIHsKIAkJCQlub2RlLnRhZyA9IG47CiAJCQkJbm9kZS5zdHJpbmcgKz0gMjsKIAkJCQlyZXR1cm4gY29weV9ub2RlKCZub2RlKTsKQEAgLTM5Nyw4ICs1MDEsOCBAQAogCiBzdGF0aWMgdm9pZCBwcmludF9ub2RlKEZJTEUgKiBmLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCiB7Ci0JaWYgKGxpc3QtPnRhZyAhPSBTWU1fTk9STUFMKSB7Ci0JCXB1dGMoc3ltYm9sX3R5cGVfbmFtZVtsaXN0LT50YWddWzBdLCBmKTsKKwlpZiAoc3ltYm9sX3R5cGVzW2xpc3QtPnRhZ10ubikgeworCQlwdXRjKHN5bWJvbF90eXBlc1tsaXN0LT50YWddLm4sIGYpOwogCQlwdXRjKCcjJywgZik7CiAJfQogCWZwdXRzKGxpc3QtPnN0cmluZywgZik7CkBAIC00NjgsOCArNTcyLDkgQEAKIAkJCWNyYyA9IHBhcnRpYWxfY3JjMzJfb25lKCcgJywgY3JjKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgU1lNX0VOVU1fQ09OU1Q6CiAJCWNhc2UgU1lNX1RZUEVERUY6Ci0JCQlzdWJzeW0gPSBmaW5kX3N5bWJvbChjdXItPnN0cmluZywgY3VyLT50YWcpOworCQkJc3Vic3ltID0gZmluZF9zeW1ib2woY3VyLT5zdHJpbmcsIGN1ci0+dGFnLCAwKTsKIAkJCS8qIEZJWE1FOiBCYWQgcmVmZXJlbmNlIGZpbGVzIGNhbiBzZWdmYXVsdCBoZXJlLiAqLwogCQkJaWYgKHN1YnN5bS0+ZXhwYW5zaW9uX3RyYWlsKSB7CiAJCQkJaWYgKGZsYWdfZHVtcF9kZWZzKQpAQCAtNDg2LDU1ICs1OTEsMzAgQEAKIAkJY2FzZSBTWU1fU1RSVUNUOgogCQljYXNlIFNZTV9VTklPTjoKIAkJY2FzZSBTWU1fRU5VTToKLQkJCXN1YnN5bSA9IGZpbmRfc3ltYm9sKGN1ci0+c3RyaW5nLCBjdXItPnRhZyk7CisJCQlzdWJzeW0gPSBmaW5kX3N5bWJvbChjdXItPnN0cmluZywgY3VyLT50YWcsIDApOwogCQkJaWYgKCFzdWJzeW0pIHsKLQkJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm4sICp0ID0gTlVMTDsKKwkJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm47CiAKIAkJCQllcnJvcl93aXRoX3BvcygiZXhwYW5kIHVuZGVmaW5lZCAlcyAlcyIsCi0JCQkJCSAgICAgICBzeW1ib2xfdHlwZV9uYW1lW2N1ci0+dGFnXSwKKwkJCQkJICAgICAgIHN5bWJvbF90eXBlc1tjdXItPnRhZ10ubmFtZSwKIAkJCQkJICAgICAgIGN1ci0+c3RyaW5nKTsKLQotCQkJCW4gPSB4bWFsbG9jKHNpemVvZigqbikpOwotCQkJCW4tPnN0cmluZyA9IHhzdHJkdXAoc3ltYm9sX3R5cGVfbmFtZVtjdXItPnRhZ10pOwotCQkJCW4tPnRhZyA9IFNZTV9OT1JNQUw7Ci0JCQkJbi0+bmV4dCA9IHQ7Ci0JCQkJdCA9IG47Ci0KLQkJCQluID0geG1hbGxvYyhzaXplb2YoKm4pKTsKLQkJCQluLT5zdHJpbmcgPSB4c3RyZHVwKGN1ci0+c3RyaW5nKTsKLQkJCQluLT50YWcgPSBTWU1fTk9STUFMOwotCQkJCW4tPm5leHQgPSB0OwotCQkJCXQgPSBuOwotCi0JCQkJbiA9IHhtYWxsb2Moc2l6ZW9mKCpuKSk7Ci0JCQkJbi0+c3RyaW5nID0geHN0cmR1cCgieyIpOwotCQkJCW4tPnRhZyA9IFNZTV9OT1JNQUw7Ci0JCQkJbi0+bmV4dCA9IHQ7Ci0JCQkJdCA9IG47Ci0KLQkJCQluID0geG1hbGxvYyhzaXplb2YoKm4pKTsKLQkJCQluLT5zdHJpbmcgPSB4c3RyZHVwKCJVTktOT1dOIik7Ci0JCQkJbi0+dGFnID0gU1lNX05PUk1BTDsKLQkJCQluLT5uZXh0ID0gdDsKLQkJCQl0ID0gbjsKLQotCQkJCW4gPSB4bWFsbG9jKHNpemVvZigqbikpOwotCQkJCW4tPnN0cmluZyA9IHhzdHJkdXAoIn0iKTsKLQkJCQluLT50YWcgPSBTWU1fTk9STUFMOwotCQkJCW4tPm5leHQgPSB0OwotCQkJCXQgPSBuOwotCisJCQkJbiA9IGNvbmNhdF9saXN0KG1rX25vZGUKKwkJCQkJCShzeW1ib2xfdHlwZXNbY3VyLT50YWddLm5hbWUpLAorCQkJCQkJbWtfbm9kZShjdXItPnN0cmluZyksCisJCQkJCQlta19ub2RlKCJ7IiksCisJCQkJCQlta19ub2RlKCJVTktOT1dOIiksCisJCQkJCQlta19ub2RlKCJ9IiksIE5VTEwpOwogCQkJCXN1YnN5bSA9CiAJCQkJICAgIGFkZF9zeW1ib2woY3VyLT5zdHJpbmcsIGN1ci0+dGFnLCBuLCAwKTsKIAkJCX0KIAkJCWlmIChzdWJzeW0tPmV4cGFuc2lvbl90cmFpbCkgewogCQkJCWlmIChmbGFnX2R1bXBfZGVmcykgewogCQkJCQlmcHJpbnRmKGRlYnVnZmlsZSwgIiVzICVzICIsCi0JCQkJCQlzeW1ib2xfdHlwZV9uYW1lW2N1ci0+dGFnXSwKKwkJCQkJCXN5bWJvbF90eXBlc1tjdXItPnRhZ10ubmFtZSwKIAkJCQkJCWN1ci0+c3RyaW5nKTsKIAkJCQl9CiAKLQkJCQljcmMgPSBwYXJ0aWFsX2NyYzMyKHN5bWJvbF90eXBlX25hbWVbY3VyLT50YWddLAorCQkJCWNyYyA9IHBhcnRpYWxfY3JjMzIoc3ltYm9sX3R5cGVzW2N1ci0+dGFnXS5uYW1lLAogCQkJCQkJICAgIGNyYyk7CiAJCQkJY3JjID0gcGFydGlhbF9jcmMzMl9vbmUoJyAnLCBjcmMpOwogCQkJCWNyYyA9IHBhcnRpYWxfY3JjMzIoY3VyLT5zdHJpbmcsIGNyYyk7CkBAIC01NjUsNyArNjQ1LDcgQEAKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW07CiAKLQlzeW0gPSBmaW5kX3N5bWJvbChuYW1lLCBTWU1fTk9STUFMKTsKKwlzeW0gPSBmaW5kX3N5bWJvbChuYW1lLCBTWU1fTk9STUFMLCAwKTsKIAlpZiAoIXN5bSkKIAkJZXJyb3Jfd2l0aF9wb3MoImV4cG9ydCB1bmRlZmluZWQgc3ltYm9sICVzIiwgbmFtZSk7CiAJZWxzZSB7CkBAIC02MjQsOCArNzA0LDggQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfdHlwZV9uYW1lKGVudW0gc3ltYm9sX3R5cGUgdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAodHlwZSAhPSBTWU1fTk9STUFMKQotCQlmcHJpbnRmKHN0ZGVyciwgIiVzICVzIiwgc3ltYm9sX3R5cGVfbmFtZVt0eXBlXSwgbmFtZSk7CisJaWYgKHN5bWJvbF90eXBlc1t0eXBlXS5uYW1lKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzICVzIiwgc3ltYm9sX3R5cGVzW3R5cGVdLm5hbWUsIG5hbWUpOwogCWVsc2UKIAkJZnByaW50ZihzdGRlcnIsICIlcyIsIG5hbWUpOwogfQpAQCAtNzcxLDggKzg1MSw4IEBACiAKIAkJCWlmIChzeW0tPmlzX292ZXJyaWRlKQogCQkJCWZwdXRzKCJvdmVycmlkZSAiLCBkdW1wZmlsZSk7Ci0JCQlpZiAoc3ltLT50eXBlICE9IFNZTV9OT1JNQUwpIHsKLQkJCQlwdXRjKHN5bWJvbF90eXBlX25hbWVbc3ltLT50eXBlXVswXSwgZHVtcGZpbGUpOworCQkJaWYgKHN5bWJvbF90eXBlc1tzeW0tPnR5cGVdLm4pIHsKKwkJCQlwdXRjKHN5bWJvbF90eXBlc1tzeW0tPnR5cGVdLm4sIGR1bXBmaWxlKTsKIAkJCQlwdXRjKCcjJywgZHVtcGZpbGUpOwogCQkJfQogCQkJZnB1dHMoc3ltLT5uYW1lLCBkdW1wZmlsZSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL2dlbmtzeW1zLmggYi9zY3JpcHRzL2dlbmtzeW1zL2dlbmtzeW1zLmgKaW5kZXggMjVjNGQ0MC4uN2VjNTJhZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9nZW5rc3ltcy5oCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvZ2Vua3N5bXMuaApAQCAtMjYsNyArMjYsOCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIGVudW0gc3ltYm9sX3R5cGUgewotCVNZTV9OT1JNQUwsIFNZTV9UWVBFREVGLCBTWU1fRU5VTSwgU1lNX1NUUlVDVCwgU1lNX1VOSU9OCisJU1lNX05PUk1BTCwgU1lNX1RZUEVERUYsIFNZTV9FTlVNLCBTWU1fU1RSVUNULCBTWU1fVU5JT04sCisJU1lNX0VOVU1fQ09OU1QKIH07CiAKIGVudW0gc3ltYm9sX3N0YXR1cyB7CkBAIC01OCw3ICs1OSw3IEBACiBleHRlcm4gaW50IGN1cl9saW5lOwogZXh0ZXJuIGNoYXIgKmN1cl9maWxlbmFtZTsKIAotc3RydWN0IHN5bWJvbCAqZmluZF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwgZW51bSBzeW1ib2xfdHlwZSBucyk7CitzdHJ1Y3Qgc3ltYm9sICpmaW5kX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLCBlbnVtIHN5bWJvbF90eXBlIG5zLCBpbnQgZXhhY3QpOwogc3RydWN0IHN5bWJvbCAqYWRkX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLCBlbnVtIHN5bWJvbF90eXBlIHR5cGUsCiAJCQkgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZGVmbiwgaW50IGlzX2V4dGVybik7CiB2b2lkIGV4cG9ydF9zeW1ib2woY29uc3QgY2hhciAqKTsKQEAgLTY2LDYgKzY3LDggQEAKIHZvaWQgZnJlZV9ub2RlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCk7CiB2b2lkIGZyZWVfbGlzdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnMsIHN0cnVjdCBzdHJpbmdfbGlzdCAqZSk7CiBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvcHlfbm9kZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKik7CitzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvcHlfbGlzdF9yYW5nZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnN0YXJ0LAorCQkJCSAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVuZCk7CiAKIGludCB5eWxleCh2b2lkKTsKIGludCB5eXBhcnNlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9sZXguY19zaGlwcGVkIGIvc2NyaXB0cy9nZW5rc3ltcy9sZXguY19zaGlwcGVkCmluZGV4IDJhYzIzYmMuLmFmNDkzOTAgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMvbGV4LmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2dlbmtzeW1zL2xleC5jX3NoaXBwZWQKQEAgLTc5LDYgKzc5LDcgQEAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKIHR5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisjZW5kaWYgLyogISBDOTkgKi8KIAogLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLwogI2lmbmRlZiBJTlQ4X01JTgpAQCAtMTA5LDggKzExMCw2IEBACiAjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQogI2VuZGlmCiAKLSNlbmRpZiAvKiAhIEM5OSAqLwotCiAjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KIAogLyogJWVuZGlmICovCkBAIC00NTYsMTYgKzQ1NSwxNiBAQAogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxleF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs3Nl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs3M10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE0LCAgIDEyLCAgICA0LCAgICAzLCAgIDEyLCAgICA3LAotICAgICAgIDEyLCAgIDEyLCAgICA3LCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgICA5LCAgICA5LAotICAgICAgIDEyLCAgIDEyLCAgIDEyLCAgICA0LCAgICAwLCAgICA1LCAgICAwLCAgICA3LCAgICAwLCAgICA2LAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAyLCAgICA4LCAgIDEwLCAgIDEwLAotICAgICAgICA5LCAgICAwLCAgICAwLCAgICA5LCAgICA5LCAgICAwLCAgICA5LCAgICAwLCAgICAwLCAgIDExLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgIDEwLCAgICAwLCAgIDEwLCAgICA5LCAgICA5LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDEwLCAgIDEwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAxLCAgICAwCisgICAgICAgIDAsICAgIDAsICAgMTQsICAgMTIsICAgIDQsICAgIDMsICAgMTIsICAgIDcsICAgMTIsICAgMTIsCisgICAgICAgMTIsICAgMTIsICAgMTIsICAgIDksICAgIDksICAgMTIsICAgMTIsICAgIDcsICAgMTIsICAgMTIsCisgICAgICAgIDQsICAgIDAsICAgIDUsICAgIDAsICAgIDcsICAgIDgsICAgIDAsICAgIDYsICAgIDAsICAgIDAsCisgICAgICAgMTAsICAgMTAsICAgIDksICAgIDAsICAgIDAsICAgIDksICAgIDksICAgIDAsICAgIDksICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDIsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgMTAsICAgIDAsCisgICAgICAgMTAsICAgIDksICAgIDksICAgIDAsICAgIDAsICAgIDAsICAgMTAsICAgMTAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDEsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNTA3LDEwOCArNTA2LDEwNCBAQAogICAgICAgICA4LCAgICA3LCAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAzLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzg4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4NV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgMTQ3LCAgIDIxLCAgMTQwLCAgMTQ1LCAgMjg0LCAgIDM5LCAgMjg0LCAgIDI2LCAgICAwLAotICAgICAgIDMyLCAgMTI2LCAgIDQwLCAgIDQ0LCAgMTE1LCAgIDM1LCAgIDM2LCAgIDQ2LCAgIDUwLCAgIDUzLAotICAgICAgIDM5LCAgIDYxLCAgIDU0LCAgIDc5LCAgIDY1LCAgMjg0LCAgICAwLCAgICAwLCAgIDY2LCAgMjg0LAotICAgICAgICAwLCAgMTE5LCAgIDc5LCAgIDc1LCAgMTIzLCAgMTA0LCAgMjg0LCAgMjg0LCAgMTA3LCAgICAwLAotICAgICAgIDc5LCAgIDczLCAgIDc2LCAgIDc2LCAgIDY2LCAgICAwLCAgICAwLCAgIDg1LCAgIDg2LCAgMjg0LAotICAgICAgMTMzLCAgIDgzLCAgIDkxLCAgMjg0LCAgIDk5LCAgMTQ3LCAgMjg0LCAgMTE0LCAgMTIyLCAgIDcwLAotICAgICAgMTA3LCAgMTQxLCAgMTcyLCAgMTUxLCAgMTM1LCAgMTgxLCAgMjg0LCAgMTM3LCAgMTE0LCAgMTU3LAotICAgICAgMTQ5LCAgIDQ4LCAgIDQ1LCAgMjg0LCAgMjg0LCAgMjA4LCAgMjE0LCAgMjIyLCAgMjMwLCAgMjM4LAotICAgICAgMjQ2LCAgMjUwLCAgMjU1LCAgMjU2LCAgMjYxLCAgMjY3LCAgMjc1CisgICAgICAgIDAsICAxNDUsICAxNTAsICAyNjYsICAgMjcsICAyNjYsICAgMjUsICAgIDAsICAxMzEsICAgMjMsCisgICAgICAgMjMsICAgMTYsICAgMjMsICAgMzksICAgMzEsICAgMjUsICAgMzksICAgNjAsICAgMjIsICAgNjUsCisgICAgICAgNTcsICAgNDMsICAyNjYsICAgIDAsICAgIDAsICAyNjYsICAgNjEsICAyNjYsICAgIDAsICAxMjgsCisgICAgICAgNzQsICAgIDAsICAxMTMsICAgNTksICAgNjIsICAxMTMsICAgNTIsICAgIDAsICAgIDAsICAgNzIsCisgICAgICAgNjYsICAxMTAsICAxMDAsICAyNjYsICAgNzMsICAgNzQsICAyNjYsICAgNzAsICAyNjYsICAgOTAsCisgICAgICAxMDMsICAyNjYsICAgODQsICAxMjksICAxMDgsICAxMTMsICAxNDMsICAyNjYsICAxMDcsICAgNjYsCisgICAgICAxMTgsICAxMzcsICAxNjgsICAxMjAsICAgODAsICAgOTEsICAxNDUsICAxNDMsICAgODMsICAgNDEsCisgICAgICAyNjYsICAyNjYsICAxOTAsICAxOTYsICAyMDQsICAyMTIsICAyMjAsICAyMjgsICAyMzIsICAyMzcsCisgICAgICAyMzgsICAyNDMsICAyNDksICAyNTcKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls4OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls4NV0gPQogICAgIHsgICAwLAotICAgICAgIDc1LCAgICAxLCAgICAxLCAgICAzLCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc2LCAgIDc3LAotICAgICAgIDc4LCAgIDc1LCAgIDc3LCAgIDc5LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDE5LAotICAgICAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc2LCAgIDc1LCAgIDgwLCAgIDc3LCAgIDc4LCAgIDc1LAotICAgICAgIDgxLCAgIDc1LCAgIDc2LCAgIDc4LCAgIDc5LCAgIDc5LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDM5LAotICAgICAgIDE5LCAgIDgyLCAgIDgzLCAgIDc1LCAgIDc1LCAgIDg0LCAgIDIwLCAgIDc2LCAgIDc4LCAgIDc1LAotICAgICAgIDc5LCAgIDUxLCAgIDg1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDg0LCAgIDc5LCAgIDUxLAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDUxLCAgIDc1LCAgIDc1LCAgIDc1LCAgIDg2LCAgIDc5LCAgIDYzLAotICAgICAgIDg2LCAgIDg3LCAgIDg3LCAgIDc1LCAgICAwLCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1CisgICAgICAgNzIsICAgIDEsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzMsICAgNzQsICAgNzIsICAgNzIsCisgICAgICAgNzUsICAgNzIsICAgNzIsICAgNzIsICAgMTQsICAgNzIsICAgNzIsICAgNzQsICAgNzIsICAgNzYsCisgICAgICAgNzIsICAgNzMsICAgNzIsICAgNzcsICAgNzQsICAgNzIsICAgNzUsICAgNzIsICAgNzgsICAgNzIsCisgICAgICAgNzIsICAgMzEsICAgMTQsICAgNzksICAgODAsICAgNzIsICAgNzIsICAgODEsICAgMTUsICAgNzMsCisgICAgICAgNzUsICAgNzYsICAgNzYsICAgNzIsICAgNzMsICAgNzUsICAgNzIsICAgODIsICAgNzIsICAgNzIsCisgICAgICAgNzIsICAgNzIsICAgODEsICAgNzYsICAgNTQsICAgNzIsICAgNzIsICAgNzIsICAgNzYsICAgNTQsCisgICAgICAgNzYsICAgNzYsICAgNzYsICAgNTQsICAgODMsICAgNzYsICAgNjMsICAgODMsICAgODQsICAgODQsCisgICAgICAgNzIsICAgIDAsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsCisgICAgICAgNzIsICAgNzIsICAgNzIsICAgNzIKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFszMTNdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMjk1XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDYsICAgIDcsICAgIDgsICAgIDcsICAgIDksICAgIDYsICAgMTAsICAgIDYsICAgIDYsICAgMTEsCi0gICAgICAgIDYsICAgIDYsICAgMTIsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgMTAsCi0gICAgICAgMTAsICAgMTAsICAgMTMsICAgMTAsICAgMTAsICAgIDYsICAgMTAsICAgIDYsICAgMTUsICAgMTYsCi0gICAgICAgMjYsICAgMTUsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgMjAsICAgMjEsICAgMTUsICAgMjIsCi0gICAgICAgMjQsICAgMzAsICAgMjQsICAgMzgsICAgMzMsICAgMzYsICAgMzcsICAgNzQsICAgMjMsICAgMzQsCi0gICAgICAgNzQsICAgMjcsICAgMzgsICAgMzgsICAgMzgsICAgMzgsICAgMzgsICAgMzEsICAgMzIsICAgMzksCi0gICAgICAgMzksICAgMzksICAgNDAsICAgNDEsICAgNDEsICAgNDIsICAgNDcsICAgNDcsICAgNDcsICAgMjYsCi0gICAgICAgNDMsICAgMzgsICAgNDQsICAgNDUsICAgNDYsICAgMzAsICAgNDQsICAgNzUsICAgMzgsICAgMzgsCi0gICAgICAgMjQsICAgMzgsICAgMjQsICAgMjYsICAgMzAsICAgNDAsICAgNTUsICAgNTUsICAgNTcsICAgMjYsCi0gICAgICAgMjcsICAgMzEsICAgNTcsICAgNDMsICAgMzUsICAgMzAsICAgNjQsICAgNjQsICAgNjQsICAgNTcsCisgICAgICAgIDQsICAgIDUsICAgIDYsICAgIDUsICAgIDcsICAgIDQsICAgIDgsICAgIDksICAgMTAsICAgMTEsCisgICAgICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTUsICAgMTYsICAgIDksICAgMTcsICAgIDgsCisgICAgICAgIDgsICAgIDgsICAgMTgsICAgIDgsICAgIDgsICAgIDQsICAgIDgsICAgMTksICAgMjEsICAgMjMsCisgICAgICAgMjEsICAgMjYsICAgMjgsICAgMjYsICAgMjYsICAgMzAsICAgMzEsICAgMzEsICAgMzEsICAgMjYsCisgICAgICAgMjYsICAgMjYsICAgMjYsICAgNzEsICAgMzksICAgMzksICAgMzksICAgMjMsICAgMjksICAgMjYsCisgICAgICAgMjQsICAgMzIsICAgMzMsICAgMzMsICAgMzQsICAgNzIsICAgMjYsICAgMjYsICAgMjEsICAgMzUsCisgICAgICAgMjEsICAgMzYsICAgMzcsICAgMzgsICAgNDAsICAgMzYsICAgNDMsICAgNDQsICAgMjQsICAgNDEsCisgICAgICAgMjgsICAgMzIsICAgNTAsICAgNTAsICAgNTIsICAgMjgsICAgMjMsICAgMjMsICAgNTIsICAgMzUsCisgICAgICAgNTYsICAgNTYsICAgNDQsICAgMjgsICAgNDIsICAgNzEsICAgMjksICAgMzEsICAgMzEsICAgMzEsCisgICAgICAgNDIsICAgMjksICAgNTksICAgNDQsICAgNDgsICAgNDksICAgNDksICAgMjQsICAgMjQsICAgMjksCiAKLSAgICAgICAzMSwgICA2NSwgICA2NSwgICA3NSwgICAyNywgICAzNiwgICAzNywgICAzNSwgICA1OSwgICAzNywKLSAgICAgICAyNywgICAzMSwgICA1NiwgICA1NiwgICA1NiwgICA1OSwgICAzNywgICA1MSwgICA1MiwgICA1MiwKLSAgICAgICAzOSwgICAzOSwgICAzOSwgICA1OSwgICAzNywgICAzNywgICA2OCwgICA1MywgICA1NCwgICA1NCwKLSAgICAgICA2OSwgICA1MCwgICAzOCwgICA1NCwgICA1OSwgICAzNywgICA0NCwgICA0NSwgICAzMiwgICAzNywKLSAgICAgICA0NCwgICAzNSwgICA1OSwgICAzNywgICA3NSwgICAxNCwgICA2MCwgICA2MCwgICA2NiwgICA2NiwKLSAgICAgICA2NiwgICAzNywgICAxNCwgICA3MiwgICA3NSwgICA2MSwgICA2MiwgICA2MywgICA1OSwgICA2MSwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA2OSwgICA2NCwgICA2NCwgICA2NCwgICA2OSwgICA2NywgICA2NywKLSAgICAgICA3NSwgICA3NSwgICA3NSwgICA2NywgICAzNywgICAzNSwgICA3NSwgICA3NSwgICA3NSwgICA2MSwKLSAgICAgICA2MiwgICA3NSwgICA3NSwgICA2MSwgICA3NSwgICA3MCwgICA3MCwgICA3MCwgICA3NSwgICA3NSwKLSAgICAgICA3NSwgICA3MCwgICA3MCwgICA3MCwgICA2NiwgICA2NiwgICA2NiwgICA3NSwgICA3NSwgICA3NSwKKyAgICAgICA0OSwgICA0MywgICA0NCwgICA1MSwgICA1MSwgICA1MSwgICAzNiwgICAzNywgICA1OSwgICA0NCwKKyAgICAgICAzNiwgICA2NSwgICA0NCwgICA1NCwgICA1NSwgICA1NSwgICA1MSwgICA1MSwgICA1MSwgICA1OSwKKyAgICAgICA0NCwgICA2NCwgICA2NCwgICA2NCwgICA1OCwgICA1OCwgICA1NywgICA1NywgICA1NywgICA1OCwKKyAgICAgICA1OSwgICA0NCwgICA0MiwgICA2NCwgICA2NCwgICA2NCwgICA1MiwgICA3MiwgICA1OSwgICA0NCwKKyAgICAgICA0NywgICA2NiwgICA2MCwgICA2MCwgICA0MiwgICA0NCwgICA1OSwgICA2OSwgICAyNiwgICA3MiwKKyAgICAgICAyMCwgICA2MSwgICA2MiwgICA2MywgICA3MiwgICA2MSwgICA1NywgICA1NywgICA1NywgICA2NiwKKyAgICAgICA3MiwgICA3MiwgICA3MiwgICA2NiwgICA0OSwgICA0OSwgICA3MiwgICA2MSwgICA2MiwgICA0OSwKKyAgICAgICA0NCwgICA2MSwgICA3MiwgICA3MiwgICA3MiwgICA3MiwgICA3MiwgICA3MiwgICA3MiwgICA3MiwKKyAgICAgICA3MiwgICA2NywgICA2NywgICA2NywgICA3MiwgICA3MiwgICA3MiwgICA2NywgICA2NywgICA2NywKKyAgICAgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICA3MiwKIAotICAgICAgIDc1LCAgIDc1LCAgIDU0LCAgIDU0LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDU0LCAgIDI1LCAgIDI1LAotICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI4LCAgIDc1LCAgIDc1LCAgIDI4LAotICAgICAgIDI4LCAgIDI4LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDQ4LCAgIDc1LAotICAgICAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ5LCAgIDc1LCAgIDQ5LCAgIDQ5LAotICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQyLCAgIDQyLCAgIDc1LCAgIDQyLCAgIDU2LCAgIDc1LAotICAgICAgIDU2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDY2LCAgIDc1LCAgIDY2LCAgIDcxLCAgIDcxLCAgIDcxLAotICAgICAgIDcxLCAgIDcxLCAgIDcxLCAgIDcxLCAgIDcxLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDczLAotICAgICAgIDczLCAgIDczLCAgIDczLCAgICA1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LAorICAgICAgIDcyLCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI3LCAgIDI3LCAgIDI3LCAgIDI3LCAgIDI3LCAgIDI3LAorICAgICAgIDI3LCAgIDI3LCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLAorICAgICAgIDQ1LCAgIDcyLCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ2LCAgIDcyLAorICAgICAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDM0LCAgIDM0LCAgIDcyLCAgIDM0LAorICAgICAgIDUxLCAgIDcyLCAgIDUxLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDU3LCAgIDcyLCAgIDU3LCAgIDY4LAorICAgICAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDcwLCAgIDcwLCAgIDcwLAorICAgICAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgICAzLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLAorICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLAorICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyLAorICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDcyCiAKLSAgICAgICA3NSwgICA3NSwgICA3NSwgICA3NSwgICA3NSwgICA3NSwgICA3NSwgICA3NSwgICA3NSwgICA3NSwKLSAgICAgICA3NSwgICA3NQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzMxM10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syOTVdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywKLSAgICAgICAgOSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgNywgICAxMSwgICAgNywgICAxNiwgICAxMywgICAxNCwgICAxNCwgICA3MywgICAgMywgICAxMywKLSAgICAgICA3MiwgICAgOSwgICAxNiwgICAxNywgICAxNywgICAyMSwgICAyMSwgICAxMSwgICAxOCwgICAxOCwKLSAgICAgICAxOCwgICAxOCwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyNSwKLSAgICAgICAxOSwgICAyMywgICAxOSwgICAxOSwgICAxOSwgICAyOSwgICAxOSwgICAyMCwgICAyMiwgICAyMiwKLSAgICAgICAyNCwgICAyMywgICAyNCwgICAzMywgICAzNCwgICA0MiwgICA0MywgICA0MywgICA0NSwgICA0OCwKLSAgICAgICAyNSwgICAyOSwgICA0NSwgICA0MiwgICA2MCwgICA0OSwgICA1MiwgICA1MiwgICA1MiwgICA0NCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgNSwgICAgNywKKyAgICAgICAgNSwgICAxMCwgICAxMSwgICAxMiwgICAxMiwgICAxMywgICAxMywgICAxMywgICAxMywgICAxOSwKKyAgICAgICAxMCwgICAxNiwgICAxNiwgICA3MCwgICAxNSwgICAxNSwgICAxNSwgICAyMiwgICAxMSwgICAxOSwKKyAgICAgICAgNywgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNSwgICAxNywgICAxNywgICAyMSwgICAxNCwKKyAgICAgICAyMSwgICAxNCwgICAxNCwgICAxNCwgICAxOCwgICAxNCwgICAyMCwgICAyMCwgICAyMiwgICAxOCwKKyAgICAgICAyNywgICAzNCwgICAzNSwgICAzNSwgICAzNywgICA0MSwgICA0MCwgICA0NSwgICAzNywgICAzNCwKKyAgICAgICA0OCwgICA0OCwgICA2NSwgICA0NiwgICA2NSwgICA2OSwgICAyNywgICAzMSwgICAzMSwgICAzMSwKKyAgICAgICA2MCwgICA0MSwgICA2NiwgICA2NiwgICAzMSwgICAzMSwgICAzMSwgICA0MCwgICA0NSwgICA0NiwKIAotICAgICAgIDM0LCAgIDUzLCAgIDUzLCAgIDQxLCAgIDMzLCAgIDM2LCAgIDM2LCAgIDUyLCAgIDYxLCAgIDYxLAotICAgICAgIDQ4LCAgIDQ5LCAgIDU1LCAgIDU1LCAgIDU1LCAgIDY5LCAgIDY5LCAgIDM2LCAgIDM2LCAgIDM2LAotICAgICAgIDM5LCAgIDM5LCAgIDM5LCAgIDU5LCAgIDU5LCAgIDM1LCAgIDU5LCAgIDM5LCAgIDM5LCAgIDM5LAotICAgICAgIDYxLCAgIDMyLCAgIDE1LCAgIDM5LCAgIDUxLCAgIDUxLCAgIDU4LCAgIDU4LCAgIDEyLCAgIDY4LAotICAgICAgIDU4LCAgIDY4LCAgIDYyLCAgIDYyLCAgICA1LCAgICA0LCAgIDUxLCAgIDUxLCAgIDY1LCAgIDY1LAotICAgICAgIDY1LCAgIDcxLCAgICAyLCAgIDcxLCAgICAwLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDcwLCAgIDUxLAotICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDYyLCAgIDU2LCAgIDU2LAotICAgICAgICAwLCAgICAwLCAgICAwLCAgIDU2LCAgIDYzLCAgIDY0LCAgICAwLCAgICAwLCAgICAwLCAgIDcwLAotICAgICAgIDcwLCAgICAwLCAgICAwLCAgIDcwLCAgICAwLCAgIDYzLCAgIDYzLCAgIDYzLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDY2LCAgIDY2LCAgIDY2LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgIDMxLCAgIDQzLCAgIDQzLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUzLCAgIDUzLCAgIDU5LCAgIDU5LAorICAgICAgIDUzLCAgIDU5LCAgIDQyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDYxLAorICAgICAgIDYxLCAgIDU1LCAgIDU1LCAgIDU1LCAgIDUxLCAgIDUxLCAgIDU2LCAgIDU2LCAgIDU2LCAgIDUxLAorICAgICAgIDU0LCAgIDU0LCAgIDU1LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDM2LCAgIDMzLCAgIDYyLCAgIDYyLAorICAgICAgIDMwLCAgIDYxLCAgIDU0LCAgIDU0LCAgIDY0LCAgIDY4LCAgIDY3LCAgIDY4LCAgICA5LCAgICAzLAorICAgICAgICAyLCAgIDU0LCAgIDU0LCAgIDU0LCAgICAwLCAgIDU0LCAgIDU3LCAgIDU3LCAgIDU3LCAgIDYyLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgIDYyLCAgIDU3LCAgIDU3LCAgICAwLCAgIDY3LCAgIDY3LCAgIDU3LAorICAgICAgIDYzLCAgIDY3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgIDYzLCAgIDYzLCAgIDYzLCAgICAwLCAgICAwLCAgICAwLCAgIDYzLCAgIDYzLCAgIDYzLAorICAgICAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDczLCAgIDc0LCAgICAwLAogCi0gICAgICAgIDAsICAgIDAsICAgNjYsICAgNjYsICAgIDAsICAgIDAsICAgIDAsICAgNjYsICAgNzYsICAgNzYsCi0gICAgICAgNzYsICAgNzYsICAgNzYsICAgNzYsICAgNzYsICAgNzYsICAgNzcsICAgIDAsICAgIDAsICAgNzcsCi0gICAgICAgNzcsICAgNzcsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICAgIDAsCi0gICAgICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODEsICAgIDAsICAgODEsICAgODEsCi0gICAgICAgODEsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgIDAsICAgODIsICAgODMsICAgIDAsCi0gICAgICAgODMsICAgODQsICAgODQsICAgODQsICAgODUsICAgIDAsICAgODUsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODcsICAgODcsICAgODcsICAgODcsICAgODcsCi0gICAgICAgODcsICAgODcsICAgODcsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsCi0gICAgICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsCisgICAgICAgIDAsICAgNzQsICAgNzQsICAgNzQsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsICAgNzUsCisgICAgICAgNzUsICAgNzUsICAgNzYsICAgNzYsICAgNzYsICAgNzYsICAgNzYsICAgNzYsICAgNzYsICAgNzYsCisgICAgICAgNzcsICAgIDAsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzgsICAgIDAsCisgICAgICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzksICAgNzksICAgIDAsICAgNzksCisgICAgICAgODAsICAgIDAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAgIDAsICAgODIsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODQsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsCisgICAgICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsCisgICAgICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsICAgNzIsCisgICAgICAgNzIsICAgNzIsICAgNzIsICAgNzIKIAotICAgICAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDc1LCAgIDc1CiAgICAgfSA7CiAKIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwpAQCAtNjE5LDggKzYxNCw4IEBACiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ydWxlX2xpbmVudW1bMTNdID0KICAgICB7ICAgMCwKLSAgICAgICA3MSwgICA3MiwgICA3MywgICA3NiwgICA3OSwgICA4MCwgICA4MSwgICA4NywgICA4OCwgICA4OSwKLSAgICAgICA5MSwgICA5NAorICAgICAgIDY3LCAgIDY4LCAgIDY5LCAgIDcyLCAgIDc1LCAgIDc2LCAgIDc3LCAgIDgzLCAgIDg0LCAgIDg1LAorICAgICAgIDg3LCAgIDkwCiAgICAgfSA7CiAKIC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCkBAIC02NjcsMTUgKzY2MiwxMSBAQAogICAgYW5kIHRoZW4gd2UgY2F0ZWdvcml6ZSB0aG9zZSBiYXNpYyB0b2tlbnMgaW4gdGhlIHNlY29uZCBzdGFnZS4gICovCiAjZGVmaW5lIFlZX0RFQ0wJCXN0YXRpYyBpbnQgeXlsZXgxKHZvaWQpCiAKLS8qIFZlcnNpb24gMiBjaGVja3N1bW1pbmcgZG9lcyBwcm9wZXIgdG9rZW5pemF0aW9uOyB2ZXJzaW9uIDEgd2Fzbid0Ci0gICBxdWl0ZSBzbyBwZWRhbnRpYy4gICovCi0KIC8qIFdlIGRvbid0IGRvIG11bHRpcGxlIGlucHV0IGZpbGVzLiAgKi8KICNkZWZpbmUgWVlfTk9fSU5QVVQgMQotI2xpbmUgNjc2ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5jIgorI2xpbmUgNjY4ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5jIgogCiAjZGVmaW5lIElOSVRJQUwgMAotI2RlZmluZSBWMl9UT0tFTlMgMQogCiAjaWZuZGVmIFlZX05PX1VOSVNURF9ICiAvKiBTcGVjaWFsIGNhc2UgZm9yICJ1bmlzdGQuaCIsIHNpbmNlIGl0IGlzIG5vbi1BTlNJLiBXZSBpbmNsdWRlIGl0IHdheQpAQCAtODA4LDcgKzc5OSw3IEBACiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJc2l6ZV90IG47IFwKKwkJaW50IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0gPSAoY2hhcikgYzsgXApAQCAtOTE4LDEyICs5MDksMTIgQEAKIAlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAgIAogLyogJSUgWzcuMF0gdXNlcidzIGRlY2xhcmF0aW9ucyBnbyBoZXJlICovCi0jbGluZSA2NyAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKKyNsaW5lIDYzICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgogCiAKIAogIC8qIEtlZXAgdHJhY2sgb2Ygb3VyIGxvY2F0aW9uIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuICAqLwotI2xpbmUgOTI3ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5jIgorI2xpbmUgOTE4ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5jIgogCiAJaWYgKCAhKHl5X2luaXQpICkKIAkJewpAQCAtOTg3LDEzICs5NzgsMTMgQEAKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNzYgKQorCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA3MyApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICE9IDI4NCApOworCQl3aGlsZSAoIHl5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gIT0gMjY2ICk7CiAKIHl5X2ZpbmRfYWN0aW9uOgogLyogJSUgWzEwLjBdIGNvZGUgdG8gZmluZCB0aGUgYWN0aW9uIG51bWJlciBnb2VzIGhlcmUgKi8KQEAgLTEwNDEsNDIgKzEwMzIsNDIgQEAKIGNhc2UgMToKIC8qIHJ1bGUgMSBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA3MSAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKKyNsaW5lIDY3ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgogcmV0dXJuIEZJTEVOQU1FOwogCVlZX0JSRUFLCiBjYXNlIDI6CiAvKiBydWxlIDIgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgNzIgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCisjbGluZSA2OCAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKIGN1cl9saW5lKys7CiAJWVlfQlJFQUsKIGNhc2UgMzoKIC8qIHJ1bGUgMyBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA3MyAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKKyNsaW5lIDY5ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgogY3VyX2xpbmUrKzsKIAlZWV9CUkVBSwogLyogSWdub3JlIGFsbCBvdGhlciB3aGl0ZXNwYWNlLiAgKi8KIGNhc2UgNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDc2ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgorI2xpbmUgNzIgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCiA7CiAJWVlfQlJFQUsKIGNhc2UgNToKIC8qIHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA3OSAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKKyNsaW5lIDc1ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgogcmV0dXJuIFNUUklORzsKIAlZWV9CUkVBSwogY2FzZSA2OgogLyogcnVsZSA2IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDgwICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgorI2xpbmUgNzYgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCiByZXR1cm4gQ0hBUjsKIAlZWV9CUkVBSwogY2FzZSA3OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgODEgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCisjbGluZSA3NyAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKIHJldHVybiBJREVOVDsKIAlZWV9CUkVBSwogLyogVGhlIFBlZGFudCByZXF1aXJlcyB0aGF0IHRoZSBvdGhlciBDIG11bHRpLWNoYXJhY3RlciB0b2tlbnMgYmUKQEAgLTEwODUsMzggKzEwNzYsMzcgQEAKICAgICBhcm91bmQgdGhlbSBwcm9wZXJseS4gICovCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA4NyAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKKyNsaW5lIDgzICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgogcmV0dXJuIE9USEVSOwogCVlZX0JSRUFLCiBjYXNlIDk6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA4OCAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKKyNsaW5lIDg0ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgogcmV0dXJuIElOVDsKIAlZWV9CUkVBSwogY2FzZSAxMDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDg5ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgorI2xpbmUgODUgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCiByZXR1cm4gUkVBTDsKIAlZWV9CUkVBSwogY2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDkxICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgorI2xpbmUgODcgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCiByZXR1cm4gRE9UUzsKIAlZWV9CUkVBSwogLyogQWxsIG90aGVyIHRva2VucyBhcmUgc2luZ2xlIGNoYXJhY3RlcnMuICAqLwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDk0ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5sIgorI2xpbmUgOTAgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCiByZXR1cm4geXl0ZXh0WzBdOwogCVlZX0JSRUFLCiBjYXNlIDEzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgOTcgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCisjbGluZSA5MyAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKIEVDSE87CiAJWVlfQlJFQUsKLSNsaW5lIDExMTggInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmMiCisjbGluZSAxMTA5ICJzY3JpcHRzL2dlbmtzeW1zL2xleC5jIgogY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6Ci1jYXNlIFlZX1NUQVRFX0VPRihWMl9UT0tFTlMpOgogCXl5dGVybWluYXRlKCk7CiAKIAljYXNlIFlZX0VORF9PRl9CVUZGRVI6CkBAIC0xNDI5LDcgKzE0MTksNyBAQAogCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDc2ICkKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA3MyApCiAJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQl9CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwpAQCAtMTQ2MiwxMSArMTQ1MiwxMSBAQAogCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNzYgKQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNzMgKQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA3NSk7CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNzIpOwogCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwogfQpAQCAtMjI1Miw3ICsyMjQyLDcgQEAKIAogLyogJW9rLWZvci1oZWFkZXIgKi8KIAotI2xpbmUgOTcgInNjcmlwdHMvZ2Vua3N5bXMvbGV4LmwiCisjbGluZSA5MyAic2NyaXB0cy9nZW5rc3ltcy9sZXgubCIKIAogCiAKQEAgLTIyNjMsMTIgKzIyNTMsMjMgQEAKIAogLyogTWFjcm9zIHRvIGFwcGVuZCB0byBvdXIgcGhyYXNlIGNvbGxlY3Rpb24gbGlzdC4gICovCiAKKy8qCisgKiBXZSBtYXJrIGFueSB0b2tlbiwgdGhhdCB0aGF0IGVxdWFscyB0byBhIGtub3duIGVudW1lcmF0b3IsIGFzCisgKiBTWU1fRU5VTV9DT05TVC4gVGhlIHBhcnNlciB3aWxsIGNoYW5nZSB0aGlzIGZvciBzdHJ1Y3QgYW5kIHVuaW9uIHRhZ3MgbGF0ZXIsCisgKiB0aGUgb25seSBwcm9ibGVtIGlzIHN0cnVjdCBhbmQgdW5pb24gbWVtYmVyczoKKyAqICAgIGVudW0gZSB7IGEsIGIgfTsgc3RydWN0IHMgeyBpbnQgYSwgYjsgfQorICogYnV0IGluIHRoaXMgY2FzZSwgdGhlIG9ubHkgZWZmZWN0IHdpbGwgYmUsIHRoYXQgdGhlIEFCSSBjaGVja3N1bXMgYmVjb21lCisgKiBtb3JlIHZvbGF0aWxlLCB3aGljaCBpcyBhY2NlcHRhYmxlLiBBbHNvLCBzdWNoIGNvbGxpc2lvbnMgYXJlIHF1aXRlIHJhcmUsCisgKiBzbyBmYXIgaXQgd2FzIG9ubHkgb2JzZXJ2ZWQgaW4gaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaC4KKyAqLwogI2RlZmluZSBfQVBQKFQsTCkJZG8gewkJCQkJCSAgIFwKIAkJCSAgY3VyX25vZGUgPSBuZXh0X25vZGU7CQkJCSAgIFwKIAkJCSAgbmV4dF9ub2RlID0geG1hbGxvYyhzaXplb2YoKm5leHRfbm9kZSkpOwkgICBcCiAJCQkgIG5leHRfbm9kZS0+bmV4dCA9IGN1cl9ub2RlOwkJCSAgIFwKIAkJCSAgY3VyX25vZGUtPnN0cmluZyA9IG1lbWNweSh4bWFsbG9jKEwrMSksIFQsIEwrMSk7IFwKLQkJCSAgY3VyX25vZGUtPnRhZyA9IFNZTV9OT1JNQUw7CQkJICAgXAorCQkJICBjdXJfbm9kZS0+dGFnID0JCQkJICAgXAorCQkJICAgIGZpbmRfc3ltYm9sKGN1cl9ub2RlLT5zdHJpbmcsIFNZTV9FTlVNX0NPTlNULCAxKT9cCisJCQkgICAgU1lNX0VOVU1fQ09OU1QgOiBTWU1fTk9STUFMIDsJCSAgIFwKIAkJCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgQVBQCQlfQVBQKHl5dGV4dCwgeXlsZW5nKQpAQCAtMjI5NCw3ICsyMjk1LDYgQEAKIAogICBpZiAobGV4c3RhdGUgPT0gU1RfTk9UU1RBUlRFRCkKICAgICB7Ci0gICAgICBCRUdJTihWMl9UT0tFTlMpOwogICAgICAgbmV4dF9ub2RlID0geG1hbGxvYyhzaXplb2YoKm5leHRfbm9kZSkpOwogICAgICAgbmV4dF9ub2RlLT5uZXh0ID0gTlVMTDsKICAgICAgIGxleHN0YXRlID0gU1RfTk9STUFMOwpAQCAtMjM0Nyw4ICsyMzQ3LDggQEAKIAogCQkgIGNhc2UgU1RSVUNUX0tFWVc6CiAJCSAgY2FzZSBVTklPTl9LRVlXOgotCQkgICAgZG9udF93YW50X2JyYWNlX3BocmFzZSA9IDM7CiAJCSAgY2FzZSBFTlVNX0tFWVc6CisJCSAgICBkb250X3dhbnRfYnJhY2VfcGhyYXNlID0gMzsKIAkJICAgIHN1cHByZXNzX3R5cGVfbG9va3VwID0gMjsKIAkJICAgIGdvdG8gZmluaTsKIApAQCAtMjM1OCw4ICsyMzU4LDcgQEAKIAkgICAgICB9CiAJICAgIGlmICghc3VwcHJlc3NfdHlwZV9sb29rdXApCiAJICAgICAgewotCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBmaW5kX3N5bWJvbCh5eXRleHQsIFNZTV9UWVBFREVGKTsKLQkJaWYgKHN5bSAmJiBzeW0tPnR5cGUgPT0gU1lNX1RZUEVERUYpCisJCWlmIChmaW5kX3N5bWJvbCh5eXRleHQsIFNZTV9UWVBFREVGLCAxKSkKIAkJICB0b2tlbiA9IFRZUEU7CiAJICAgICAgfQogCSAgfQpAQCAtMjQ3OCw3ICsyNDc3LDIwIEBACiAJICArK2NvdW50OwogCSAgQVBQOwogCSAgZ290byByZXBlYXQ7Ci0JY2FzZSAnKSc6IGNhc2UgJ10nOiBjYXNlICd9JzoKKwljYXNlICd9JzoKKwkgIC8qIGlzIHRoaXMgdGhlIGxhc3QgbGluZSBvZiBhbiBlbnVtIGRlY2xhcmF0aW9uPyAqLworCSAgaWYgKGNvdW50ID09IDApCisJICAgIHsKKwkgICAgICAvKiBQdXQgYmFjayB0aGUgdG9rZW4gd2UganVzdCByZWFkIHNvJ3Mgd2UgY2FuIGZpbmQgaXQgYWdhaW4KKwkJIGFmdGVyIHJlZ2lzdGVyaW5nIHRoZSBleHByZXNzaW9uLiAgKi8KKwkgICAgICB1bnB1dCh0b2tlbik7CisKKwkgICAgICBsZXhzdGF0ZSA9IFNUX05PUk1BTDsKKwkgICAgICB0b2tlbiA9IEVYUFJFU1NJT05fUEhSQVNFOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAvKiBGQUxMVEhSVSAqLworCWNhc2UgJyknOiBjYXNlICddJzoKIAkgIC0tY291bnQ7CiAJICBBUFA7CiAJICBnb3RvIHJlcGVhdDsKQEAgLTI1NjcsMTQzICsyNTc5LDQgQEAKIAogICByZXR1cm4gdG9rZW47CiB9Ci0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBBU01fS0VZVyA9IDI1OCwKLSAgICAgQVRUUklCVVRFX0tFWVcgPSAyNTksCi0gICAgIEFVVE9fS0VZVyA9IDI2MCwKLSAgICAgQk9PTF9LRVlXID0gMjYxLAotICAgICBDSEFSX0tFWVcgPSAyNjIsCi0gICAgIENPTlNUX0tFWVcgPSAyNjMsCi0gICAgIERPVUJMRV9LRVlXID0gMjY0LAotICAgICBFTlVNX0tFWVcgPSAyNjUsCi0gICAgIEVYVEVSTl9LRVlXID0gMjY2LAotICAgICBFWFRFTlNJT05fS0VZVyA9IDI2NywKLSAgICAgRkxPQVRfS0VZVyA9IDI2OCwKLSAgICAgSU5MSU5FX0tFWVcgPSAyNjksCi0gICAgIElOVF9LRVlXID0gMjcwLAotICAgICBMT05HX0tFWVcgPSAyNzEsCi0gICAgIFJFR0lTVEVSX0tFWVcgPSAyNzIsCi0gICAgIFJFU1RSSUNUX0tFWVcgPSAyNzMsCi0gICAgIFNIT1JUX0tFWVcgPSAyNzQsCi0gICAgIFNJR05FRF9LRVlXID0gMjc1LAotICAgICBTVEFUSUNfS0VZVyA9IDI3NiwKLSAgICAgU1RSVUNUX0tFWVcgPSAyNzcsCi0gICAgIFRZUEVERUZfS0VZVyA9IDI3OCwKLSAgICAgVU5JT05fS0VZVyA9IDI3OSwKLSAgICAgVU5TSUdORURfS0VZVyA9IDI4MCwKLSAgICAgVk9JRF9LRVlXID0gMjgxLAotICAgICBWT0xBVElMRV9LRVlXID0gMjgyLAotICAgICBUWVBFT0ZfS0VZVyA9IDI4MywKLSAgICAgRVhQT1JUX1NZTUJPTF9LRVlXID0gMjg0LAotICAgICBBU01fUEhSQVNFID0gMjg1LAotICAgICBBVFRSSUJVVEVfUEhSQVNFID0gMjg2LAotICAgICBCUkFDRV9QSFJBU0UgPSAyODcsCi0gICAgIEJSQUNLRVRfUEhSQVNFID0gMjg4LAotICAgICBFWFBSRVNTSU9OX1BIUkFTRSA9IDI4OSwKLSAgICAgQ0hBUiA9IDI5MCwKLSAgICAgRE9UUyA9IDI5MSwKLSAgICAgSURFTlQgPSAyOTIsCi0gICAgIElOVCA9IDI5MywKLSAgICAgUkVBTCA9IDI5NCwKLSAgICAgU1RSSU5HID0gMjk1LAotICAgICBUWVBFID0gMjk2LAotICAgICBPVEhFUiA9IDI5NywKLSAgICAgRklMRU5BTUUgPSAyOTgKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEFTTV9LRVlXIDI1OAotI2RlZmluZSBBVFRSSUJVVEVfS0VZVyAyNTkKLSNkZWZpbmUgQVVUT19LRVlXIDI2MAotI2RlZmluZSBCT09MX0tFWVcgMjYxCi0jZGVmaW5lIENIQVJfS0VZVyAyNjIKLSNkZWZpbmUgQ09OU1RfS0VZVyAyNjMKLSNkZWZpbmUgRE9VQkxFX0tFWVcgMjY0Ci0jZGVmaW5lIEVOVU1fS0VZVyAyNjUKLSNkZWZpbmUgRVhURVJOX0tFWVcgMjY2Ci0jZGVmaW5lIEVYVEVOU0lPTl9LRVlXIDI2NwotI2RlZmluZSBGTE9BVF9LRVlXIDI2OAotI2RlZmluZSBJTkxJTkVfS0VZVyAyNjkKLSNkZWZpbmUgSU5UX0tFWVcgMjcwCi0jZGVmaW5lIExPTkdfS0VZVyAyNzEKLSNkZWZpbmUgUkVHSVNURVJfS0VZVyAyNzIKLSNkZWZpbmUgUkVTVFJJQ1RfS0VZVyAyNzMKLSNkZWZpbmUgU0hPUlRfS0VZVyAyNzQKLSNkZWZpbmUgU0lHTkVEX0tFWVcgMjc1Ci0jZGVmaW5lIFNUQVRJQ19LRVlXIDI3NgotI2RlZmluZSBTVFJVQ1RfS0VZVyAyNzcKLSNkZWZpbmUgVFlQRURFRl9LRVlXIDI3OAotI2RlZmluZSBVTklPTl9LRVlXIDI3OQotI2RlZmluZSBVTlNJR05FRF9LRVlXIDI4MAotI2RlZmluZSBWT0lEX0tFWVcgMjgxCi0jZGVmaW5lIFZPTEFUSUxFX0tFWVcgMjgyCi0jZGVmaW5lIFRZUEVPRl9LRVlXIDI4MwotI2RlZmluZSBFWFBPUlRfU1lNQk9MX0tFWVcgMjg0Ci0jZGVmaW5lIEFTTV9QSFJBU0UgMjg1Ci0jZGVmaW5lIEFUVFJJQlVURV9QSFJBU0UgMjg2Ci0jZGVmaW5lIEJSQUNFX1BIUkFTRSAyODcKLSNkZWZpbmUgQlJBQ0tFVF9QSFJBU0UgMjg4Ci0jZGVmaW5lIEVYUFJFU1NJT05fUEhSQVNFIDI4OQotI2RlZmluZSBDSEFSIDI5MAotI2RlZmluZSBET1RTIDI5MQotI2RlZmluZSBJREVOVCAyOTIKLSNkZWZpbmUgSU5UIDI5MwotI2RlZmluZSBSRUFMIDI5NAotI2RlZmluZSBTVFJJTkcgMjk1Ci0jZGVmaW5lIFRZUEUgMjk2Ci0jZGVmaW5lIE9USEVSIDI5NwotI2RlZmluZSBGSUxFTkFNRSAyOTgKLQotCi0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIGludCBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLWV4dGVybiBZWVNUWVBFIHl5bHZhbDsKLQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL2xleC5sIGIvc2NyaXB0cy9nZW5rc3ltcy9sZXgubAppbmRleCBmZTUwZmY5Li5lNGRkZDQ5IDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbmtzeW1zL2xleC5sCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvbGV4LmwKQEAgLTU1LDEwICs1NSw2IEBACiAKIE1DX1RPS0VOCQkoW34lXiYqKz18PD4vLV09KXwoJiYpfCgifHwiKXwoLT4pfCg8PCl8KD4+KQogCi0vKiBWZXJzaW9uIDIgY2hlY2tzdW1taW5nIGRvZXMgcHJvcGVyIHRva2VuaXphdGlvbjsgdmVyc2lvbiAxIHdhc24ndAotICAgcXVpdGUgc28gcGVkYW50aWMuICAqLwotJXMgVjJfVE9LRU5TCi0KIC8qIFdlIGRvbid0IGRvIG11bHRpcGxlIGlucHV0IGZpbGVzLiAgKi8KICVvcHRpb24gbm95eXdyYXAKIApAQCAtODQsOSArODAsOSBAQAogICAgIHJlY29nbml6ZWQgYXMgdG9rZW5zLiAgV2UgZG9uJ3QgYWN0dWFsbHkgdXNlIHRoZW0gc2luY2Ugd2UgZG9uJ3QKICAgICBwYXJzZSBleHByZXNzaW9ucywgYnV0IHdlIGRvIHdhbnQgd2hpdGVzcGFjZSB0byBiZSBhcnJhbmdlZAogICAgIGFyb3VuZCB0aGVtIHByb3Blcmx5LiAgKi8KLTxWMl9UT0tFTlM+e01DX1RPS0VOfQkJCXJldHVybiBPVEhFUjsKLTxWMl9UT0tFTlM+e0lOVH0JCQlyZXR1cm4gSU5UOwotPFYyX1RPS0VOUz57UkVBTH0JCQlyZXR1cm4gUkVBTDsKK3tNQ19UT0tFTn0JCQkJcmV0dXJuIE9USEVSOwore0lOVH0JCQkJCXJldHVybiBJTlQ7Cit7UkVBTH0JCQkJCXJldHVybiBSRUFMOwogCiAiLi4uIgkJCQkJcmV0dXJuIERPVFM7CiAKQEAgLTEwMywxMiArOTksMjMgQEAKIAogLyogTWFjcm9zIHRvIGFwcGVuZCB0byBvdXIgcGhyYXNlIGNvbGxlY3Rpb24gbGlzdC4gICovCiAKKy8qCisgKiBXZSBtYXJrIGFueSB0b2tlbiwgdGhhdCB0aGF0IGVxdWFscyB0byBhIGtub3duIGVudW1lcmF0b3IsIGFzCisgKiBTWU1fRU5VTV9DT05TVC4gVGhlIHBhcnNlciB3aWxsIGNoYW5nZSB0aGlzIGZvciBzdHJ1Y3QgYW5kIHVuaW9uIHRhZ3MgbGF0ZXIsCisgKiB0aGUgb25seSBwcm9ibGVtIGlzIHN0cnVjdCBhbmQgdW5pb24gbWVtYmVyczoKKyAqICAgIGVudW0gZSB7IGEsIGIgfTsgc3RydWN0IHMgeyBpbnQgYSwgYjsgfQorICogYnV0IGluIHRoaXMgY2FzZSwgdGhlIG9ubHkgZWZmZWN0IHdpbGwgYmUsIHRoYXQgdGhlIEFCSSBjaGVja3N1bXMgYmVjb21lCisgKiBtb3JlIHZvbGF0aWxlLCB3aGljaCBpcyBhY2NlcHRhYmxlLiBBbHNvLCBzdWNoIGNvbGxpc2lvbnMgYXJlIHF1aXRlIHJhcmUsCisgKiBzbyBmYXIgaXQgd2FzIG9ubHkgb2JzZXJ2ZWQgaW4gaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaC4KKyAqLwogI2RlZmluZSBfQVBQKFQsTCkJZG8gewkJCQkJCSAgIFwKIAkJCSAgY3VyX25vZGUgPSBuZXh0X25vZGU7CQkJCSAgIFwKIAkJCSAgbmV4dF9ub2RlID0geG1hbGxvYyhzaXplb2YoKm5leHRfbm9kZSkpOwkgICBcCiAJCQkgIG5leHRfbm9kZS0+bmV4dCA9IGN1cl9ub2RlOwkJCSAgIFwKIAkJCSAgY3VyX25vZGUtPnN0cmluZyA9IG1lbWNweSh4bWFsbG9jKEwrMSksIFQsIEwrMSk7IFwKLQkJCSAgY3VyX25vZGUtPnRhZyA9IFNZTV9OT1JNQUw7CQkJICAgXAorCQkJICBjdXJfbm9kZS0+dGFnID0JCQkJICAgXAorCQkJICAgIGZpbmRfc3ltYm9sKGN1cl9ub2RlLT5zdHJpbmcsIFNZTV9FTlVNX0NPTlNULCAxKT9cCisJCQkgICAgU1lNX0VOVU1fQ09OU1QgOiBTWU1fTk9STUFMIDsJCSAgIFwKIAkJCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgQVBQCQlfQVBQKHl5dGV4dCwgeXlsZW5nKQpAQCAtMTM0LDcgKzE0MSw2IEBACiAKICAgaWYgKGxleHN0YXRlID09IFNUX05PVFNUQVJURUQpCiAgICAgewotICAgICAgQkVHSU4oVjJfVE9LRU5TKTsKICAgICAgIG5leHRfbm9kZSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXh0X25vZGUpKTsKICAgICAgIG5leHRfbm9kZS0+bmV4dCA9IE5VTEw7CiAgICAgICBsZXhzdGF0ZSA9IFNUX05PUk1BTDsKQEAgLTE4Nyw4ICsxOTMsOCBAQAogCiAJCSAgY2FzZSBTVFJVQ1RfS0VZVzoKIAkJICBjYXNlIFVOSU9OX0tFWVc6Ci0JCSAgICBkb250X3dhbnRfYnJhY2VfcGhyYXNlID0gMzsKIAkJICBjYXNlIEVOVU1fS0VZVzoKKwkJICAgIGRvbnRfd2FudF9icmFjZV9waHJhc2UgPSAzOwogCQkgICAgc3VwcHJlc3NfdHlwZV9sb29rdXAgPSAyOwogCQkgICAgZ290byBmaW5pOwogCkBAIC0xOTgsOCArMjA0LDcgQEAKIAkgICAgICB9CiAJICAgIGlmICghc3VwcHJlc3NfdHlwZV9sb29rdXApCiAJICAgICAgewotCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBmaW5kX3N5bWJvbCh5eXRleHQsIFNZTV9UWVBFREVGKTsKLQkJaWYgKHN5bSAmJiBzeW0tPnR5cGUgPT0gU1lNX1RZUEVERUYpCisJCWlmIChmaW5kX3N5bWJvbCh5eXRleHQsIFNZTV9UWVBFREVGLCAxKSkKIAkJICB0b2tlbiA9IFRZUEU7CiAJICAgICAgfQogCSAgfQpAQCAtMzE4LDcgKzMyMywyMCBAQAogCSAgKytjb3VudDsKIAkgIEFQUDsKIAkgIGdvdG8gcmVwZWF0OwotCWNhc2UgJyknOiBjYXNlICddJzogY2FzZSAnfSc6CisJY2FzZSAnfSc6CisJICAvKiBpcyB0aGlzIHRoZSBsYXN0IGxpbmUgb2YgYW4gZW51bSBkZWNsYXJhdGlvbj8gKi8KKwkgIGlmIChjb3VudCA9PSAwKQorCSAgICB7CisJICAgICAgLyogUHV0IGJhY2sgdGhlIHRva2VuIHdlIGp1c3QgcmVhZCBzbydzIHdlIGNhbiBmaW5kIGl0IGFnYWluCisJCSBhZnRlciByZWdpc3RlcmluZyB0aGUgZXhwcmVzc2lvbi4gICovCisJICAgICAgdW5wdXQodG9rZW4pOworCisJICAgICAgbGV4c3RhdGUgPSBTVF9OT1JNQUw7CisJICAgICAgdG9rZW4gPSBFWFBSRVNTSU9OX1BIUkFTRTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgLyogRkFMTFRIUlUgKi8KKwljYXNlICcpJzogY2FzZSAnXSc6CiAJICAtLWNvdW50OwogCSAgQVBQOwogCSAgZ290byByZXBlYXQ7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmNfc2hpcHBlZCBiL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuY19zaGlwcGVkCmluZGV4IDgwOWI5NDkuLjFhMGI4NjAgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuY19zaGlwcGVkCkBAIC0xLDI0ICsxLDIzIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4xLiAgKi8KIAogLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSw3ICsyOCw3IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAgLTQ3LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMSIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNTUsMTEgKzU0LDc1IEBACiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2RlZmluZSBZWVBVUkUgMAogCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2NhdGlvbnMuICAqLwogI2RlZmluZSBZWUxTUF9ORUVERUQgMAogCiAKIAorLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKy8qIExpbmUgMTg5IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImdlbmtzeW1zLmgiCisKK3N0YXRpYyBpbnQgaXNfdHlwZWRlZjsKK3N0YXRpYyBpbnQgaXNfZXh0ZXJuOworc3RhdGljIGNoYXIgKmN1cnJlbnRfbmFtZTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlY2xfc3BlYzsKKworc3RhdGljIHZvaWQgeXllcnJvcihjb25zdCBjaGFyICopOworCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlbW92ZV9ub2RlKHN0cnVjdCBzdHJpbmdfbGlzdCAqKnApCit7CisgIHN0cnVjdCBzdHJpbmdfbGlzdCAqbm9kZSA9ICpwOworICAqcCA9IG5vZGUtPm5leHQ7CisgIGZyZWVfbm9kZShub2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityZW1vdmVfbGlzdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKipwYiwgc3RydWN0IHN0cmluZ19saXN0ICoqcGUpCit7CisgIHN0cnVjdCBzdHJpbmdfbGlzdCAqYiA9ICpwYiwgKmUgPSAqcGU7CisgICpwYiA9IGU7CisgIGZyZWVfbGlzdChiLCBlKTsKK30KKworCisKKy8qIExpbmUgMTg5IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDEwNiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS5jIgorCisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDEKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworCiAvKiBUb2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZUEUKQEAgLTEwOSwxMTcgKzE3MiwyMiBAQAogICAgICBGSUxFTkFNRSA9IDI5OAogICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgQVNNX0tFWVcgMjU4Ci0jZGVmaW5lIEFUVFJJQlVURV9LRVlXIDI1OQotI2RlZmluZSBBVVRPX0tFWVcgMjYwCi0jZGVmaW5lIEJPT0xfS0VZVyAyNjEKLSNkZWZpbmUgQ0hBUl9LRVlXIDI2MgotI2RlZmluZSBDT05TVF9LRVlXIDI2MwotI2RlZmluZSBET1VCTEVfS0VZVyAyNjQKLSNkZWZpbmUgRU5VTV9LRVlXIDI2NQotI2RlZmluZSBFWFRFUk5fS0VZVyAyNjYKLSNkZWZpbmUgRVhURU5TSU9OX0tFWVcgMjY3Ci0jZGVmaW5lIEZMT0FUX0tFWVcgMjY4Ci0jZGVmaW5lIElOTElORV9LRVlXIDI2OQotI2RlZmluZSBJTlRfS0VZVyAyNzAKLSNkZWZpbmUgTE9OR19LRVlXIDI3MQotI2RlZmluZSBSRUdJU1RFUl9LRVlXIDI3MgotI2RlZmluZSBSRVNUUklDVF9LRVlXIDI3MwotI2RlZmluZSBTSE9SVF9LRVlXIDI3NAotI2RlZmluZSBTSUdORURfS0VZVyAyNzUKLSNkZWZpbmUgU1RBVElDX0tFWVcgMjc2Ci0jZGVmaW5lIFNUUlVDVF9LRVlXIDI3NwotI2RlZmluZSBUWVBFREVGX0tFWVcgMjc4Ci0jZGVmaW5lIFVOSU9OX0tFWVcgMjc5Ci0jZGVmaW5lIFVOU0lHTkVEX0tFWVcgMjgwCi0jZGVmaW5lIFZPSURfS0VZVyAyODEKLSNkZWZpbmUgVk9MQVRJTEVfS0VZVyAyODIKLSNkZWZpbmUgVFlQRU9GX0tFWVcgMjgzCi0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfS0VZVyAyODQKLSNkZWZpbmUgQVNNX1BIUkFTRSAyODUKLSNkZWZpbmUgQVRUUklCVVRFX1BIUkFTRSAyODYKLSNkZWZpbmUgQlJBQ0VfUEhSQVNFIDI4NwotI2RlZmluZSBCUkFDS0VUX1BIUkFTRSAyODgKLSNkZWZpbmUgRVhQUkVTU0lPTl9QSFJBU0UgMjg5Ci0jZGVmaW5lIENIQVIgMjkwCi0jZGVmaW5lIERPVFMgMjkxCi0jZGVmaW5lIElERU5UIDI5MgotI2RlZmluZSBJTlQgMjkzCi0jZGVmaW5lIFJFQUwgMjk0Ci0jZGVmaW5lIFNUUklORyAyOTUKLSNkZWZpbmUgVFlQRSAyOTYKLSNkZWZpbmUgT1RIRVIgMjk3Ci0jZGVmaW5lIEZJTEVOQU1FIDI5OAogCiAKIAotCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLSNsaW5lIDI0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi0KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImdlbmtzeW1zLmgiCi0KLXN0YXRpYyBpbnQgaXNfdHlwZWRlZjsKLXN0YXRpYyBpbnQgaXNfZXh0ZXJuOwotc3RhdGljIGNoYXIgKmN1cnJlbnRfbmFtZTsKLXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlY2xfc3BlYzsKLQotc3RhdGljIHZvaWQgeXllcnJvcihjb25zdCBjaGFyICopOwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJlbW92ZV9ub2RlKHN0cnVjdCBzdHJpbmdfbGlzdCAqKnApCi17Ci0gIHN0cnVjdCBzdHJpbmdfbGlzdCAqbm9kZSA9ICpwOwotICAqcCA9IG5vZGUtPm5leHQ7Ci0gIGZyZWVfbm9kZShub2RlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1yZW1vdmVfbGlzdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKipwYiwgc3RydWN0IHN0cmluZ19saXN0ICoqcGUpCi17Ci0gIHN0cnVjdCBzdHJpbmdfbGlzdCAqYiA9ICpwYiwgKmUgPSAqcGU7Ci0gICpwYiA9IGU7Ci0gIGZyZWVfbGlzdChiLCBlKTsKLX0KLQotCi0KLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcgMQotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLwotI2lmZGVmIFlZRVJST1JfVkVSQk9TRQotIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCi0jZWxzZQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLwotI2lmbmRlZiBZWVRPS0VOX1RBQkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKLSNlbmRpZgotCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKIHR5cGVkZWYgaW50IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIAotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDIyMyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS5jIgorLyogTGluZSAyNjQgb2YgeWFjYy5jICAqLworI2xpbmUgMTkxICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmMiCiAKICNpZmRlZiBzaG9ydAogIyB1bmRlZiBzaG9ydApAQCAtMjk0LDE0ICsyNjIsMTQgQEAKICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKK1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1cm4geXlpOwogfQogI2VuZGlmCiAKQEAgLTM4Miw5ICszNTAsOSBAQAogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9jCiB7Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gIH07CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OwogCiAvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwogIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCkBAIC00MTgsMTIgKzM4NiwxMiBAQAogICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNDM0LDE2ICs0MDIsMTYgQEAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCiAjZGVmaW5lIFlZRklOQUwgIDQKIC8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICA1MjMKKyNkZWZpbmUgWVlMQVNUICAgNTMyCiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KICNkZWZpbmUgWVlOVE9LRU5TICA1MwogLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDQ2CisjZGVmaW5lIFlZTk5UUyAgNDkKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICAxMjYKKyNkZWZpbmUgWVlOUlVMRVMgIDEzMgogLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMTc4CisjZGVmaW5lIFlZTlNUQVRFUyAgMTg4CiAKIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAyCkBAIC01MDQsNyArNDcyLDggQEAKICAgICAgMjM5LCAgIDI0MiwgICAyNDUsICAgMjQ3LCAgIDI0OCwgICAyNTAsICAgMjUyLCAgIDI1NywgICAyNjIsICAgMjY1LAogICAgICAyNjksICAgMjczLCAgIDI3NywgICAyNzgsICAgMjgwLCAgIDI4MywgICAyODcsICAgMjkxLCAgIDI5MiwgICAyOTQsCiAgICAgIDI5NiwgICAyOTksICAgMzAzLCAgIDMwNiwgICAzMDcsICAgMzA5LCAgIDMxMSwgICAzMTUsICAgMzE4LCAgIDMyMSwKLSAgICAgMzIzLCAgIDMyNiwgICAzMjcsICAgMzMwLCAgIDMzMywgICAzMzQsICAgMzM2CisgICAgIDMyMywgICAzMjYsICAgMzI3LCAgIDMzMCwgICAzMzQsICAgMzM5LCAgIDM0MSwgICAzNDUsICAgMzQ3LCAgIDM1MSwKKyAgICAgMzU0LCAgIDM1NSwgICAzNTcKIH07CiAKIC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCkBAIC01MTIsMTYgKzQ4MSwxNiBAQAogewogICAgICAgNTQsICAgICAwLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgNTYsCiAgICAgICA1NywgICAgLTEsICAgIC0xLCAgICAxMiwgICAgMjMsICAgIDU4LCAgICA2MCwgICAgLTEsICAgIC0xLCAgICAyMywKLSAgICAgIDU5LCAgICA2MCwgICAgLTEsICAgIDYwLCAgICAtMSwgICAgODQsICAgIC0xLCAgICA5NiwgICAgLTEsICAgIDk4LAorICAgICAgNTksICAgIDYwLCAgICAtMSwgICAgNjAsICAgIC0xLCAgICA4NCwgICAgLTEsICAgIDk5LCAgICAtMSwgICAxMDEsCiAgICAgICAtMSwgICAgIDEsICAgIDQ0LCAgICAtMSwgICAgIDEsICAgIDQ1LCAgICAtMSwgICAgNjQsICAgIDYxLCAgICA0NCwKICAgICAgIC0xLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDYyLCAgICA0NiwgICAgNjMsICAgIC0xLAotICAgICAgNzQsICAgIDk3LCAgICA5NSwgICAgODUsICAgIC0xLCAgICAtMSwgICAgNjUsICAgIC0xLCAgICA2NiwgICAgLTEsCisgICAgICA3NCwgICAxMDAsICAgIDk1LCAgICA4NSwgICAgLTEsICAgIC0xLCAgICA2NSwgICAgLTEsICAgIDY2LCAgICAtMSwKICAgICAgIDY1LCAgICA2NiwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgNjgsICAgIC0xLCAgICAgNSwgICAgLTEsICAgIDE3LAogICAgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxNCwgICAgLTEsICAgIDY5LCAgICAtMSwgICAgNzMsCiAgICAgICAtMSwgICAgMjgsICAgIDQ3LCAgICA2NSwgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgMjgsICAgIDQ3LCAgICA2NSwKICAgICAgIDQ5LCAgICAtMSwgICAgMjIsICAgIDM3LCAgICAtMSwgICAgMjQsICAgIDM3LCAgICAtMSwgICAgMTAsICAgIDM3LAogICAgICAgLTEsICAgIDIyLCAgICAzNywgICAgODcsICAgIC0xLCAgICAyNCwgICAgMzcsICAgIDg3LCAgICAtMSwgICAgMTAsCi0gICAgICAzNywgICAgMzIsICAgIC0xLCAgICAxMCwgICAgMzIsICAgIC0xLCAgICAyMiwgICAgODcsICAgIC0xLCAgICAyNCwKKyAgICAgIDM3LCAgICA5NiwgICAgLTEsICAgIDEwLCAgICA5NiwgICAgLTEsICAgIDIyLCAgICA4NywgICAgLTEsICAgIDI0LAogICAgICAgODcsICAgIC0xLCAgICAgNywgICAgLTEsICAgIDE5LCAgICAtMSwgICAgMTUsICAgIC0xLCAgICAxNiwgICAgLTEsCiAgICAgICAyMCwgICAgLTEsICAgIDI1LCAgICAtMSwgICAgMTMsICAgIC0xLCAgICAgOSwgICAgLTEsICAgIDI2LCAgICAtMSwKICAgICAgICA2LCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0OCwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgNzIsICAgIC0xLApAQCAtNTQzLDI2ICs1MTIsMjkgQEAKICAgICAgIDkxLCAgICA0NCwgICAgLTEsICAgICAxLCAgICA0NCwgICAgLTEsICAgIC0xLCAgICA5MiwgICAgLTEsICAgIDkzLAogICAgICAgLTEsICAgIDkyLCAgICA0NiwgICAgOTMsICAgIC0xLCAgICA3NiwgICAgOTUsICAgIC0xLCAgICAzNywgICAgOTQsCiAgICAgICAtMSwgICAgOTQsICAgIC0xLCAgICA1MiwgICAgMzQsICAgIC0xLCAgICAtMSwgICAgOTUsICAgIDMxLCAgICAtMSwKLSAgICAgIDMwLCAgICA0NCwgICAgLTEsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDI5LCAgICA0NywgICAgMzcsICAgIDQ5LAotICAgICAgNDQsICAgIC0xCisgICAgICA1MSwgICAgOTcsICAgIDQ1LCAgICAtMSwgICAgNTEsICAgIDk3LCAgICA0NiwgICAgNDUsICAgIC0xLCAgICA5OCwKKyAgICAgIC0xLCAgICA5NywgICAgNDYsICAgIDk4LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAzNywgICAgNTAsICAgIDM0LAorICAgICAgLTEsICAgIDMwLCAgICA0NCwgICAgLTEsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDI5LCAgICA0NywgICAgMzcsCisgICAgICA0OSwgICAgNDQsICAgIC0xCiB9OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDgsICAgMTA4LCAgIDExNCwgICAxMTQsICAgMTE2LCAgIDExNiwKLSAgICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxMjMsICAgMTI3LCAgIDE0MSwgICAxNDIsICAgMTQ2LAotICAgICAxNTQsICAgMTY3LCAgIDE3MywgICAxNzQsICAgMTc4LCAgIDE3OSwgICAxODMsICAgMTg5LCAgIDE5MywgICAxOTQsCi0gICAgIDE5NSwgICAxOTYsICAgMTk3LCAgIDIwMSwgICAyMDIsICAgMjAzLCAgIDIwNCwgICAyMDgsICAgMjEwLCAgIDIxMiwKLSAgICAgMjE2LCAgIDIyMywgICAyMzAsICAgMjM5LCAgIDI0MCwgICAyNDEsICAgMjQ1LCAgIDI0NiwgICAyNDcsICAgMjQ4LAotICAgICAyNDksICAgMjUwLCAgIDI1MSwgICAyNTIsICAgMjUzLCAgIDI1NCwgICAyNTUsICAgMjU5LCAgIDI2NCwgICAyNjUsCi0gICAgIDI2OSwgICAyNzAsICAgMjc0LCAgIDI3NCwgICAyNzQsICAgMjc1LCAgIDI4MywgICAyODQsICAgMjg4LCAgIDI5NywKLSAgICAgMjk5LCAgIDMwMSwgICAzMDMsICAgMzA1LCAgIDMxMiwgICAzMTMsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIxLAotICAgICAzMjMsICAgMzI1LCAgIDMyNywgICAzMzIsICAgMzMzLCAgIDMzNCwgICAzMzgsICAgMzM5LCAgIDM0MywgICAzNDQsCi0gICAgIDM0OSwgICAzNTQsICAgMzU2LCAgIDM2MCwgICAzNjEsICAgMzY5LCAgIDM3MywgICAzNzUsICAgMzc3LCAgIDM3OSwKLSAgICAgMzgxLCAgIDM4NiwgICAzOTUsICAgMzk2LCAgIDQwMSwgICA0MDYsICAgNDA3LCAgIDQxMSwgICA0MTIsICAgNDE2LAotICAgICA0MTcsICAgNDIxLCAgIDQyMywgICA0MjgsICAgNDI5LCAgIDQzMywgICA0MzQsICAgNDM4LCAgIDQzOSwgICA0NDAsCi0gICAgIDQ0NCwgICA0NDgsICAgNDQ5LCAgIDQ1MywgICA0NTcsICAgNDU4LCAgIDQ2MgorICAgICAgIDAsICAgMTA0LCAgIDEwNCwgICAxMDUsICAgMTA5LCAgIDEwOSwgICAxMTUsICAgMTE1LCAgIDExNywgICAxMTcsCisgICAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxMjMsICAgMTI0LCAgIDEyOCwgICAxNDIsICAgMTQzLCAgIDE0NywKKyAgICAgMTU1LCAgIDE2OCwgICAxNzQsICAgMTc1LCAgIDE3OSwgICAxODAsICAgMTg0LCAgIDE5MCwgICAxOTQsICAgMTk1LAorICAgICAxOTYsICAgMTk3LCAgIDE5OCwgICAyMDIsICAgMjAzLCAgIDIwNCwgICAyMDUsICAgMjA5LCAgIDIxMSwgICAyMTMsCisgICAgIDIxNywgICAyMjQsICAgMjMxLCAgIDI0MSwgICAyNDQsICAgMjQ1LCAgIDI0OSwgICAyNTAsICAgMjUxLCAgIDI1MiwKKyAgICAgMjUzLCAgIDI1NCwgICAyNTUsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MywgICAyNjgsICAgMjY5LAorICAgICAyNzMsICAgMjc0LCAgIDI3OCwgICAyNzgsICAgMjc4LCAgIDI3OSwgICAyODcsICAgMjg4LCAgIDI5MiwgICAzMDEsCisgICAgIDMwMywgICAzMDUsICAgMzA3LCAgIDMwOSwgICAzMTYsICAgMzE3LCAgIDMyMSwgICAzMjIsICAgMzIzLCAgIDMyNSwKKyAgICAgMzI3LCAgIDMyOSwgICAzMzEsICAgMzM2LCAgIDMzNywgICAzMzgsICAgMzQyLCAgIDM0MywgICAzNDcsICAgMzQ4LAorICAgICAzNTMsICAgMzU4LCAgIDM2MCwgICAzNjQsICAgMzY1LCAgIDM3MywgICAzNzcsICAgMzc5LCAgIDM4MSwgICAzODMsCisgICAgIDM4NSwgICAzOTAsICAgMzk5LCAgIDQwMCwgICA0MDUsICAgNDEwLCAgIDQxMSwgICA0MTUsICAgNDE2LCAgIDQyMCwKKyAgICAgNDIxLCAgIDQyNSwgICA0MjcsICAgNDMyLCAgIDQzMywgICA0MzcsICAgNDM4LCAgIDQ0MiwgICA0NDMsICAgNDQ0LAorICAgICA0NDgsICAgNDUyLCAgIDQ1MywgICA0NTcsICAgNDU4LCAgIDQ2MiwgICA0NjMsICAgNDY2LCAgIDQ3MSwgICA0NzksCisgICAgIDQ4MywgICA0ODQsICAgNDg4CiB9OwogI2VuZGlmCiAKQEAgLTU4MSw4ICs1NTMsOCBAQAogICAiQVRUUklCVVRFX1BIUkFTRSIsICJCUkFDRV9QSFJBU0UiLCAiQlJBQ0tFVF9QSFJBU0UiLAogICAiRVhQUkVTU0lPTl9QSFJBU0UiLCAiQ0hBUiIsICJET1RTIiwgIklERU5UIiwgIklOVCIsICJSRUFMIiwgIlNUUklORyIsCiAgICJUWVBFIiwgIk9USEVSIiwgIkZJTEVOQU1FIiwgIic7JyIsICInfSciLCAiJywnIiwgIicoJyIsICInKiciLCAiJyknIiwKLSAgIic9JyIsICIneyciLCAiJzonIiwgIiRhY2NlcHQiLCAiZGVjbGFyYXRpb25fc2VxIiwgImRlY2xhcmF0aW9uIiwgIkAxIiwKLSAgImRlY2xhcmF0aW9uMSIsICJAMiIsICJAMyIsICJzaW1wbGVfZGVjbGFyYXRpb24iLAorICAiJz0nIiwgIid7JyIsICInOiciLCAiJGFjY2VwdCIsICJkZWNsYXJhdGlvbl9zZXEiLCAiZGVjbGFyYXRpb24iLCAiJEAxIiwKKyAgImRlY2xhcmF0aW9uMSIsICIkQDIiLCAiJEAzIiwgInNpbXBsZV9kZWNsYXJhdGlvbiIsCiAgICJpbml0X2RlY2xhcmF0b3JfbGlzdF9vcHQiLCAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAiaW5pdF9kZWNsYXJhdG9yIiwKICAgImRlY2xfc3BlY2lmaWVyX3NlcV9vcHQiLCAiZGVjbF9zcGVjaWZpZXJfc2VxIiwgImRlY2xfc3BlY2lmaWVyIiwKICAgInN0b3JhZ2VfY2xhc3Nfc3BlY2lmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwgInNpbXBsZV90eXBlX3NwZWNpZmllciIsCkBAIC01OTYsNyArNTY4LDggQEAKICAgIm1lbWJlcl9zcGVjaWZpY2F0aW9uIiwgIm1lbWJlcl9kZWNsYXJhdGlvbiIsCiAgICJtZW1iZXJfZGVjbGFyYXRvcl9saXN0X29wdCIsICJtZW1iZXJfZGVjbGFyYXRvcl9saXN0IiwKICAgIm1lbWJlcl9kZWNsYXJhdG9yIiwgIm1lbWJlcl9iaXRmaWVsZF9kZWNsYXJhdG9yIiwgImF0dHJpYnV0ZV9vcHQiLAotICAiYXNtX2RlZmluaXRpb24iLCAiYXNtX3BocmFzZV9vcHQiLCAiZXhwb3J0X2RlZmluaXRpb24iLCAwCisgICJlbnVtX2JvZHkiLCAiZW51bWVyYXRvcl9saXN0IiwgImVudW1lcmF0b3IiLCAiYXNtX2RlZmluaXRpb24iLAorICAiYXNtX3BocmFzZV9vcHQiLCAiZXhwb3J0X2RlZmluaXRpb24iLCAwCiB9OwogI2VuZGlmCiAKQEAgLTYyOSw3ICs2MDIsOCBAQAogICAgICAgODEsICAgIDgyLCAgICA4MiwgICAgODMsICAgIDgzLCAgICA4MywgICAgODMsICAgIDgzLCAgICA4MywgICAgODMsCiAgICAgICA4MywgICAgODQsICAgIDg1LCAgICA4NSwgICAgODYsICAgIDg3LCAgICA4NywgICAgODgsICAgIDg4LCAgICA4OSwKICAgICAgIDg5LCAgICA5MCwgICAgOTAsICAgIDkxLCAgICA5MSwgICAgOTIsICAgIDkyLCAgICA5MywgICAgOTMsICAgIDkzLAotICAgICAgOTQsICAgIDk1LCAgICA5NSwgICAgOTYsICAgIDk3LCAgICA5NywgICAgOTgKKyAgICAgIDk0LCAgICA5NSwgICAgOTUsICAgIDk2LCAgICA5NiwgICAgOTcsICAgIDk3LCAgICA5OCwgICAgOTgsICAgIDk5LAorICAgICAxMDAsICAgMTAwLCAgIDEwMQogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwpAQCAtNjQ3LDcgKzYyMSw4IEBACiAgICAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDQsICAgICAyLCAgICAgMywKICAgICAgICAzLCAgICAgMywgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMCwgICAgIDEsICAgICAxLAogICAgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsCi0gICAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgNQorICAgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDIsCisgICAgICAgMCwgICAgIDEsICAgICA1CiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKQEAgLTY1OSwxNyArNjM0LDE4IEBACiAgICAgICA2MiwgICAgNTMsICAgICAwLCAgICAzMSwgICAgIDAsICAgIDUyLCAgICAzMiwgICAgNDgsICAgIDQ5LCAgICAyOSwKICAgICAgIDY1LCAgICA0NywgICAgNTAsICAgIDMwLCAgICAgMCwgICAgIDgsICAgICAwLCAgICA1MSwgICAgNTQsICAgIDYzLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjQsICAgIDU2LCAgICAgNSwgICAgMTAsICAgIDE3LCAgICAyMywgICAgMjQsCi0gICAgICAyNiwgICAgMjcsICAgIDMzLCAgICAzNCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICA0MywKLSAgICAgIDM5LCAgICAgNiwgICAgMzcsICAgICAwLCAgICA0NCwgICAgMjIsICAgIDM4LCAgICA0NSwgICAgIDAsICAgICAwLAotICAgICAxMjMsICAgIDY4LCAgICAgMCwgICAgNTgsICAgICAwLCAgICAxOCwgICAgMTksICAgICAwLCAgIDEyNCwgICAgNjcsCi0gICAgICAyNSwgICAgNDIsICAgIDIyLCAgICA0MCwgICAgIDAsICAgMTEzLCAgICAgMCwgICAgIDAsICAgMTA5LCAgICAgOSwKLSAgICAgIDE3LCAgICA0MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDU3LCAgICA1OSwgICAgNjAsICAgIDE2LAotICAgICAgIDAsICAgIDY2LCAgIDEyNSwgICAxMDEsICAgMTIxLCAgICA3MSwgICAgIDAsICAgICA3LCAgIDExMiwgICAxMDYsCi0gICAgICA3NiwgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIxLCAgICA3NSwgICAgIDAsICAgMTE0LCAgIDExNSwKLSAgICAgMTE5LCAgIDEwNSwgICAgIDAsICAgMTEwLCAgIDEyNCwgICAgIDAsICAgIDM2LCAgICAgMCwgICAgNzMsICAgIDcyLAotICAgICAgNjEsICAgIDIwLCAgIDEwMiwgICAgIDAsICAgIDkzLCAgICAgMCwgICAgODQsICAgIDg3LCAgICA4OCwgICAxMTgsCisgICAgICAyNiwgICAgMjcsICAgIDMzLCAgICAzNCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAzOSwKKyAgICAgICAwLCAgICA0MywgICAgIDYsICAgIDM3LCAgICAgMCwgICAgNDQsICAgIDIyLCAgICAzOCwgICAgNDUsICAgICAwLAorICAgICAgIDAsICAgMTI5LCAgICA2OCwgICAgIDAsICAgIDU4LCAgICAgMCwgICAgMTgsICAgIDE5LCAgICAgMCwgICAxMzAsCisgICAgICA2NywgICAgMjUsICAgIDQyLCAgIDEyNywgICAgIDAsICAgMTI1LCAgICAyMiwgICAgNDAsICAgICAwLCAgIDExMywKKyAgICAgICAwLCAgICAgMCwgICAxMDksICAgICA5LCAgICAxNywgICAgNDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgNTcsICAgIDU5LCAgICA2MCwgICAgMTYsICAgICAwLCAgICA2NiwgICAxMzEsICAgMTAxLCAgIDEyMSwgICAgNzEsCisgICAgICAgMCwgICAgIDAsICAgMTIzLCAgICAgMCwgICAgIDcsICAgMTEyLCAgIDEwNiwgICAgNzYsICAgIDc3LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxMjEsICAgIDc1LCAgICAgMCwgICAxMTQsICAgMTE1LCAgIDExOSwgICAxMDUsICAgICAwLAorICAgICAxMTAsICAgMTMwLCAgICAgMCwgICAgMzYsICAgICAwLCAgICA3MywgICAgNzIsICAgIDYxLCAgICAyMCwgICAxMDIsCisgICAgICAgMCwgICAgOTMsICAgICAwLCAgICA4NCwgICAgODcsICAgIDg4LCAgIDEyOCwgICAxMjQsICAgMTI2LCAgIDExOCwKICAgICAgICAwLCAgICA3NiwgICAgIDAsICAgMTIwLCAgICA3NCwgICAxMTcsICAgIDgwLCAgICAgMCwgICAxMTEsICAgICAwLAotICAgICAgMzUsICAgMTI2LCAgIDEyMiwgICAgIDAsICAgIDIxLCAgIDEwMywgICAgNzAsICAgIDk0LCAgICA1NiwgICAgIDAsCisgICAgICAzNSwgICAxMzIsICAgMTIyLCAgICAgMCwgICAgMjEsICAgMTAzLCAgICA3MCwgICAgOTQsICAgIDU2LCAgICAgMCwKICAgICAgIDkzLCAgICA5MCwgICAgOTIsICAgIDY5LCAgICA4MywgICAgIDAsICAgIDgyLCAgICA4MSwgICAgIDAsICAgICAwLAogICAgICAxMTYsICAgMTA0LCAgICAgMCwgICAgOTUsICAgICAwLCAgICA5MSwgICAgOTgsICAgICAwLCAgICA4NSwgICAgODksCiAgICAgICA3OSwgICAgNzgsICAgMTAwLCAgICA5OSwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTYKQEAgLTY3OCw0NiArNjU0LDQ3IEBACiAvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0KIHsKLSAgICAgIC0xLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAzNSwgICAgNzIsICAgIDU1LCAgICAzNiwgICAgNjQsICAgIDY1LAotICAgICAgNjYsICAgIDc1LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDY3LCAgICA4NiwgICAgODcsCi0gICAgICA0MywgICAxMTQsICAgIDY5LCAgIDEwNSwgICAxMDYsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDE1MSwKLSAgICAgMTUyLCAgICA0NCwgICAxNDQsICAgMTQ1LCAgICA1NCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAxMDcsICAgMTA4LAotICAgICAxMDksICAgMTEwLCAgIDEyMiwgICAgNDUsICAgIDk0LCAgICA0NgorICAgICAgLTEsICAgICAxLCAgICAgMiwgICAgIDMsICAgIDM1LCAgICA3NiwgICAgNTYsICAgIDM2LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNzksICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNjgsICAgIDkwLCAgICA5MSwKKyAgICAgIDQzLCAgIDEyMSwgICAgNzAsICAgMTEyLCAgIDExMywgICAxMzIsICAgMTMzLCAgIDEzNCwgICAxMzUsICAgMTYxLAorICAgICAxNjIsICAgIDQ0LCAgIDE1NCwgICAxNTUsICAgIDU1LCAgICA4MCwgICAgODEsICAgIDgyLCAgIDExNCwgICAxMTUsCisgICAgIDExNiwgICAxMTcsICAgMTI5LCAgICA1MSwgICAgNzQsICAgIDc1LCAgICA0NSwgICAgOTgsICAgIDQ2CiB9OwogCiAvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKICAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC0xMzQKKyNkZWZpbmUgWVlQQUNUX05JTkYgLTEzNQogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9CiB7Ci0gICAgLTEzNCwgICAgMTYsICAtMTM0LCAgIDMxMiwgIC0xMzQsICAtMTM0LCAgICAyMCwgIC0xMzQsICAtMTM0LCAgLTEzNCwKLSAgICAtMTM0LCAgLTEzNCwgICAtMTgsICAtMTM0LCAgICAtMywgIC0xMzQsICAtMTM0LCAgLTEzNCwgIC0xMzQsICAtMTM0LAotICAgIC0xMzQsICAtMTM0LCAgLTEzNCwgIC0xMzQsICAgLTI2LCAgLTEzNCwgICAtMjUsICAtMTM0LCAgLTEzNCwgIC0xMzQsCi0gICAgICAtNywgICAgIDUsICAgIDI3LCAgLTEzNCwgIC0xMzQsICAtMTM0LCAgLTEzNCwgICAgNDYsICAgNDgyLCAgLTEzNCwKLSAgICAtMTM0LCAgLTEzNCwgIC0xMzQsICAtMTM0LCAgLTEzNCwgIC0xMzQsICAtMTM0LCAgLTEzNCwgIC0xMzQsICAtMTM0LAotICAgICAgLTgsICAtMTM0LCAgICAzMCwgICAgOTcsICAtMTM0LCAgIDQ4MiwgICAgMzAsICAtMTM0LCAgIDQ4MiwgICAgIDcsCi0gICAgLTEzNCwgIC0xMzQsICAgIDEyLCAgICAxMCwgICAgNDIsICAgIDU1LCAgLTEzNCwgICAgNDYsICAgLTE1LCAgICAxNSwKLSAgICAtMTM0LCAgLTEzNCwgICA0ODIsICAtMTM0LCAgICAyNSwgICAgMjYsICAgIDQ3LCAgIDE0NSwgIC0xMzQsICAtMTM0LAotICAgICAgNDYsICAtMTM0LCAgIDM1NiwgICAgMzksICAgIDcxLCAgICA3NywgIC0xMzQsICAgIDEwLCAgLTEzNCwgIC0xMzQsCi0gICAgICA0NiwgIC0xMzQsICAtMTM0LCAgLTEzNCwgIC0xMzQsICAtMTM0LCAgIDE5MywgIC0xMzQsICAtMTM0LCAgLTEzNCwKLSAgICAgIDc1LCAgLTEzNCwgICAgIDYsICAgIDk1LCAgICA0MywgIC0xMzQsICAgIDI4LCAgICA4NiwgICAgODUsICAtMTM0LAotICAgIC0xMzQsICAtMTM0LCAgICA4OCwgIC0xMzQsICAgMTAzLCAgICA4NywgIC0xMzQsICAgIDkxLCAgLTEzNCwgIC0xMzQsCi0gICAgLTEzNCwgIC0xMzQsICAgLTIzLCAgICA5MCwgICA0MDEsICAgIDk0LCAgIDEwMSwgICAxMDIsICAtMTM0LCAgLTEzNCwKLSAgICAgIDk4LCAgLTEzNCwgICAxMDgsICAtMTM0LCAgLTEzNCwgICAxMDksICAtMTM0LCAgIDIzMCwgIC0xMzQsICAgIDI2LAotICAgIC0xMzQsICAtMTM0LCAgLTEzNCwgICAxMzQsICAtMTM0LCAgLTEzNCwgIC0xMzQsICAtMTM0LCAgLTEzNCwgICAgIDksCi0gICAgICA0OCwgIC0xMzQsICAgIDM1LCAgLTEzNCwgIC0xMzQsICAgNDQ1LCAgLTEzNCwgIC0xMzQsICAgMTI1LCAgIDEyNiwKLSAgICAtMTM0LCAgLTEzNCwgICAxMjgsICAtMTM0LCAgIDEyOSwgIC0xMzQsICAtMTM0LCAgIDI2NywgIC0xMzQsICAtMTM0LAotICAgIC0xMzQsICAtMTM0LCAgLTEzNCwgIC0xMzQsICAgMTMwLCAgIDEzMSwgIC0xMzQsICAtMTM0CisgICAgLTEzNSwgICAgMjAsICAtMTM1LCAgIDMyMSwgIC0xMzUsICAtMTM1LCAgICAzMCwgIC0xMzUsICAtMTM1LCAgLTEzNSwKKyAgICAtMTM1LCAgLTEzNSwgICAtMjgsICAtMTM1LCAgICAgMiwgIC0xMzUsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LAorICAgIC0xMzUsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAgIC02LCAgLTEzNSwgICAgIDksICAtMTM1LCAgLTEzNSwgIC0xMzUsCisgICAgICAtNSwgICAgMTUsICAgLTE3LCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgLTEzNSwgICAgMTgsICAgNDkxLCAgLTEzNSwKKyAgICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAgLTIyLAorICAgICAgMzEsICAtMTM1LCAgLTEzNSwgICAgMTksICAgMTA2LCAgLTEzNSwgICA0OTEsICAgIDE5LCAgLTEzNSwgICA0OTEsCisgICAgICA1MCwgIC0xMzUsICAtMTM1LCAgICAxMSwgICAgLTMsICAgIDUxLCAgICA1NywgIC0xMzUsICAgIDE4LCAgIC0xNCwKKyAgICAgIDE0LCAgLTEzNSwgIC0xMzUsICAgIDQ4LCAgICA0NiwgIC0xMzUsICAgNDkxLCAgLTEzNSwgICAgMzMsICAgIDMyLAorICAgICAgNTksICAgMTU0LCAgLTEzNSwgIC0xMzUsICAgIDE4LCAgLTEzNSwgICAzNjUsICAgIDU2LCAgICA2MCwgICAgNjEsCisgICAgLTEzNSwgICAgLTMsICAtMTM1LCAgLTEzNSwgICAgMTgsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgLTEzNSwKKyAgICAgMjAyLCAgICA3NCwgIC0xMzUsICAgLTIzLCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgICA3NywgIC0xMzUsICAgIDE2LAorICAgICAxMDEsICAgIDQ5LCAgLTEzNSwgICAgMzQsICAgIDkyLCAgICA5MywgIC0xMzUsICAtMTM1LCAgLTEzNSwgICAgOTQsCisgICAgLTEzNSwgICAxMTAsICAgIDk1LCAgLTEzNSwgICAgOTcsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgIC0yMCwKKyAgICAgIDk2LCAgIDQxMCwgICAgOTksICAgMTEzLCAgIDEwMCwgIC0xMzUsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LAorICAgICAxMDMsICAtMTM1LCAgIDEwNywgIC0xMzUsICAtMTM1LCAgIDExMSwgIC0xMzUsICAgMjM5LCAgLTEzNSwgICAgMzIsCisgICAgLTEzNSwgIC0xMzUsICAtMTM1LCAgIDEyMywgIC0xMzUsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgICAgMywKKyAgICAgIDUyLCAgLTEzNSwgICAgMzgsICAtMTM1LCAgLTEzNSwgICA0NTQsICAtMTM1LCAgLTEzNSwgICAxMTcsICAgMTI4LAorICAgIC0xMzUsICAtMTM1LCAgIDEzNCwgIC0xMzUsICAgMTM1LCAgLTEzNSwgIC0xMzUsICAgMjc2LCAgLTEzNSwgIC0xMzUsCisgICAgLTEzNSwgIC0xMzUsICAtMTM1LCAgLTEzNSwgICAxMzcsICAgMTM4LCAgLTEzNSwgIC0xMzUKIH07CiAKIC8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9CiB7Ci0gICAgLTEzNCwgIC0xMzQsICAgMTgwLCAgLTEzNCwgIC0xMzQsICAtMTM0LCAgLTEzNCwgICAtMzMsICAtMTM0LCAgLTEzNCwKLSAgICAgIDkzLCAgICAgMCwgICAtNTgsICAgLTM3LCAgLTEzNCwgIC0xMzQsICAtMTM0LCAgIC03MywgIC0xMzQsICAtMTM0LAotICAgICAtNTQsICAgLTMyLCAgLTEzNCwgICAtODEsICAtMTM0LCAgLTEzMywgIC0xMzQsICAtMTM0LCAgICAyOSwgICAtNTAsCi0gICAgLTEzNCwgIC0xMzQsICAtMTM0LCAgLTEzNCwgICAtMjAsICAtMTM0LCAgLTEzNCwgICAxMTAsICAtMTM0LCAgLTEzNCwKLSAgICAgIDQ5LCAgICA5NiwgICAgODAsICAtMTM0LCAgLTEzNCwgIC0xMzQKKyAgICAtMTM1LCAgLTEzNSwgICAxODcsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgIC01MCwgIC0xMzUsICAtMTM1LAorICAgICAgOTgsICAgICAwLCAgIC01OSwgICAtMzcsICAtMTM1LCAgLTEzNSwgIC0xMzUsICAgLTc3LCAgLTEzNSwgIC0xMzUsCisgICAgIC01NCwgICAtMzAsICAtMTM1LCAgIC05MCwgIC0xMzUsICAtMTM0LCAgLTEzNSwgIC0xMzUsICAgIDI0LCAgIC01OCwKKyAgICAtMTM1LCAgLTEzNSwgIC0xMzUsICAtMTM1LCAgIC0xOCwgIC0xMzUsICAtMTM1LCAgIDEwOSwgIC0xMzUsICAtMTM1LAorICAgICAgNDQsICAgIDg3LCAgICA4NCwgICAxNDgsICAtMTM1LCAgIDEwMiwgIC0xMzUsICAtMTM1LCAgLTEzNQogfTsKIAogLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCkBAIC03MjcsMTE2ICs3MDQsMTE4IEBACiAjZGVmaW5lIFlZVEFCTEVfTklORiAtMTA5CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9CiB7Ci0gICAgICA4MiwgICAgNzAsICAgMTA0LCAgICAzNywgICAxNTksICAgIDY4LCAgICA1NywgICAxMzAsICAgMTQyLCAgICA4OCwKLSAgICAgMTYyLCAgICA1MiwgICAgNTYsICAgIDg0LCAgICA0OSwgICAgOTIsICAgICA0LCAgICA5MywgICAgMTAsICAgIDUwLAotICAgICAgNTEsICAgMTMyLCAgICA3OSwgICAxMzQsICAgIDcxLCAgICA1MywgICAgNTMsICAgMTQzLCAgICAyMCwgICAxMDQsCi0gICAgICA4NSwgICAxMDQsICAgIDczLCAgIDEyMCwgICAxNzUsICAgIDkxLCAgICA4MSwgICAgMjksICAgMTI0LCAgICA5NywKLSAgICAgIDU4LCAgICAzMywgICAtOTMsICAgMTMxLCAgICA4MywgICAgNzAsICAgMTQ3LCAgIDEwMSwgICAgOTUsICAgIDYxLAotICAgICAxNjMsICAgMTUwLCAgICA1OSwgICAxMDIsICAgIDYzLCAgICA4MCwgICAxNDksICAgIDYzLCAgIC05MywgICAgNjIsCi0gICAgICA2MywgICAxMzYsICAgIDk2LCAgIDEwMCwgICAgNDcsICAgIDQ4LCAgIDEwNCwgICAxMDEsICAgMTY2LCAgICA5OCwKLSAgICAgIDk5LCAgICA2MCwgICAgODAsICAgMTAyLCAgICA2MywgICAxMzcsICAgMTUwLCAgIDE1MCwgICAxMDMsICAgMTI0LAotICAgICAxMzEsICAgIDUzLCAgIDE2NywgICAgNjEsICAgMTAxLCAgIDE0NywgICAgODksICAgIDcwLCAgIDExNywgICAxNjMsCi0gICAgIDEwMiwgICAgNjMsICAgMTExLCAgICA2MiwgICAgNjMsICAgMTQ5LCAgICA2MywgICAxMjQsICAgIDc0LCAgIDE2NCwKLSAgICAgMTY1LCAgICA5MCwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgMTI0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCi0gICAgIDExOCwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgIDExOSwgICAxMDMsICAgIDMzLCAgIDEzMywKLSAgICAgMTM4LCAgIDEzOSwgICAgOTgsICAgIDkyLCAgIC0yMiwgICAxNDEsICAgMTQwLCAgIDE1NCwgICAgMzQsICAgMTQ2LAotICAgICAxNDIsICAgLTIyLCAgLTEwNywgICAxNTMsICAgLTIyLCAgIC0yMiwgICAxMTIsICAgMTU2LCAgIDE1NSwgICAtMjIsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAxNTcsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAxNjEsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgMTcwLCAgIDE3MSwgICAgMzMsICAgMTcyLCAgIDE3MywgICAxNzYsCi0gICAgIDE3NywgICAgIDUsICAgLTIyLCAgIDEyMSwgICAxNjksICAgMTM1LCAgICAzNCwgICAxMTMsICAgMTYwLCAgIC0yMiwKLSAgICAtMTA4LCAgICAgMCwgICAtMjIsICAgLTIyLCAgIDEyMywgICAgIDAsICAgMTI5LCAgIC0yMiwgICAgIDcsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAgMCwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgIDAsICAgICAwLCAgICAzMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgLTg2LAotICAgICAgIDAsICAgMTU4LCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCi0gICAgICAxMiwgICAgMTMsICAgLTg2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgICAwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAtODYsICAgICAwLCAgIDE3NCwgICAgIDAsCi0gICAgICAgMCwgICAgMzQsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgIC04NiwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAotICAgICAgIDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsICAgICAwLCAgICAzMywgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIC04NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDAsICAgLTg2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgLTIyLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzQsICAgICAwLCAgICAgMCwgICAtMjIsICAgICAwLCAgICAgMCwgICAtMjIsCi0gICAgIC0yMiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgICAwLCAgICAxNSwKKyAgICAgIDg2LCAgICA3MSwgICAxMTEsICAgIDM3LCAgIDE3MiwgICAgMTAsICAgIDgzLCAgICA2OSwgICAgNTgsICAgIDQ5LAorICAgICAgOTIsICAgMTUyLCAgICA4OCwgICAxNjksICAgIDczLCAgICAyMCwgICAgOTYsICAgMTQwLCAgICA5NywgICAxNDIsCisgICAgICAgNCwgICAxNDQsICAgMTM3LCAgICA1MCwgICAgMjksICAgIDUyLCAgIDEwNCwgICAgNjEsICAgIDMzLCAgICA1MCwKKyAgICAgMTUzLCAgICA1MywgICAxMTEsICAgIDg5LCAgIDExMSwgICAgNzcsICAgLTkzLCAgIDEyNywgICAgOTUsICAgIDg1LAorICAgICAxNTcsICAgMTMxLCAgICA1OSwgICAxODUsICAgMTczLCAgICA1NCwgICAgNTcsICAgIDk5LCAgICA2MiwgICAgNzEsCisgICAgIDE1OSwgICAgNjQsICAgLTkzLCAgIDE0MSwgICAxNjAsICAgIDYyLCAgICA4NCwgICAxMDgsICAgIDYzLCAgICA2NCwKKyAgICAgIDU0LCAgIDEwMCwgICAgNjAsICAgMTA5LCAgICA2NCwgICAgNjMsICAgIDY0LCAgIDE0NiwgICAgNzMsICAgMTA3LAorICAgICAgNTQsICAgMTc2LCAgIDExMSwgICAxMDgsICAgIDQ3LCAgICA0OCwgICAgODQsICAgMTA1LCAgIDEwNiwgICAxMDksCisgICAgICA2NCwgICAxNDcsICAgMTYwLCAgIDE2MCwgICAxMTAsICAgMTc3LCAgIDE0MSwgICAgODcsICAgMTMxLCAgIDE1NywKKyAgICAgMTA4LCAgIDEwMiwgICAxMDMsICAgMTczLCAgICA3MSwgICAgOTMsICAgMTA5LCAgICA2NCwgICAxMDEsICAgMTU5LAorICAgICAgNjQsICAgMTc0LCAgIDE3NSwgICAgOTQsICAgMTE4LCAgIDEyNCwgICAxMzEsICAgIDc4LCAgIDEzNiwgICAxMjUsCisgICAgIDEyNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgMTMxLCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgMTEwLAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgIDE0MywgICAxNDgsICAgIDMzLCAgIDEwNSwgICAxNDksCisgICAgICA5NiwgICAxNTEsICAgMTUyLCAgIC0yMiwgICAxNTAsICAgMTU2LCAgIDE2NSwgICAgMzQsICAgMTYzLCAgIDE2NCwKKyAgICAgLTIyLCAgLTEwNywgICAxNjYsICAgLTIyLCAgIC0yMiwgICAxMTksICAgMTY3LCAgIDE3MSwgICAtMjIsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAxODAsICAgIDE1LCAgICAxNiwgICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAxODEsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgMTgyLCAgIDE4MywgICAgMzMsICAgMTg2LCAgIDE4NywgICAgIDUsICAgMTc5LAorICAgICAxMjAsICAgLTIyLCAgIDEyOCwgICAxNzAsICAgMTM5LCAgICAzNCwgICAxNDUsICAgIDcyLCAgIC0yMiwgIC0xMDgsCisgICAgICAgMCwgICAtMjIsICAgLTIyLCAgIDEzMCwgICAgIDAsICAgMTM4LCAgIC0yMiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAgMCwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgIDAsICAgICAwLCAgICAzMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgLTg2LCAgICAgMCwKKyAgICAgMTY4LCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgLTg2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgICAwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAgMCwKKyAgICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAtODYsICAgICAwLCAgIDE4NCwgICAgIDAsICAgICAwLAorICAgICAgMzQsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgIC04NiwgICAgMTUsCiAgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAgMCwKICAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsICAgICAwLCAgICAzMywgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTUsICAgMTE2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAgMTMsICAgICAwLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgICAwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAgMCwgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDksICAgIDYzLAorICAgICAgIDAsICAgICAwLCAgIC04NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDAsICAgLTg2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgLTIyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgMzQsICAgICAwLCAgICAgMCwgICAtMjIsICAgICAwLCAgICAgMCwgICAtMjIsICAgLTIyLAogICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgICAwLCAgICAxNSwgICAgMTYsCiAgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgICAwLCAgICAyNiwKICAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgMTY4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzQsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgIDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgICAwLCAgICAgMCwgICAgMzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzQsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAxMjMsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgIDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCisgICAgICAgMCwgICAgMzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNTcsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE1OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE1OSwgICAgNjQsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgIDAsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAgMCwgICAgMzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAxNzgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNCwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAgMCwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgIDAsICAgICAwLCAgICAzMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDM0CiB9OwogCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9CiB7Ci0gICAgICA1OCwgICAgMzgsICAgIDc1LCAgICAgMywgICAxMzcsICAgIDM3LCAgICAyNiwgICAgIDEsICAgIDMxLCAgICA2MywKLSAgICAgICAxLCAgICAzNywgICAgMzcsICAgICAxLCAgICAzMiwgICAgMzAsICAgICAwLCAgICAzMiwgICAgIDgsICAgIDM3LAotICAgICAgMjMsICAgMTAyLCAgICA1NSwgICAxMDQsICAgIDMyLCAgICA1MSwgICAgNTEsICAgIDUwLCAgICAxOCwgICAxMDIsCi0gICAgICA2MiwgICAxMDQsICAgIDUyLCAgICA4NywgICAxNjcsICAgIDY3LCAgICA1NiwgICAgMjcsICAgIDk2LCAgICA3MiwKLSAgICAgIDQ3LCAgICAzMSwgICAgMzMsICAgIDM3LCAgICAzNywgICAgODIsICAgIDM3LCAgICA0MSwgICAgMzMsICAgIDM3LAotICAgICAgNDEsICAgMTI0LCAgICA0NywgICAgNDcsICAgIDQ4LCAgICA1NSwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNDcsCi0gICAgICA0OCwgICAgMzMsICAgIDQ3LCAgICAzNywgICAgNDQsICAgIDQ1LCAgIDEzOSwgICAgNDEsICAgIDMzLCAgICA0NCwKLSAgICAgIDQ1LCAgICA0NCwgICAgNzIsICAgIDQ3LCAgICA0OCwgICAgNDcsICAgMTQ5LCAgIDE1MCwgICAgNTIsICAgMTM3LAotICAgICAgMzcsICAgIDUxLCAgICA0NywgICAgMzcsICAgIDQxLCAgICAzNywgICAgNDQsICAgMTI0LCAgICA0OSwgICAgNDEsCi0gICAgICA0NywgICAgNDgsICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ3LCAgICA0OCwgICAxNTUsICAgICAxLCAgIDE0OSwKLSAgICAgMTUwLCAgICA0NiwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgMTY3LAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICA0OSwgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICA0OSwgICAgNTIsICAgIDMxLCAgICAzNCwKLSAgICAgIDQ0LCAgICA0NiwgICAgNDQsICAgIDMwLCAgICAzNywgICAgNDQsICAgIDQ5LCAgICAzNiwgICAgNDEsICAgIDQ5LAotICAgICAgMzEsICAgIDQ0LCAgICA0NSwgICAgNDksICAgIDQ3LCAgICA0OCwgICAgIDEsICAgIDQ5LCAgICA0NiwgICAgNTIsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgNDksICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMzQsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDQ5LCAgICA0OSwgICAgMzEsICAgIDQ5LCAgICA0OSwgICAgNDksCi0gICAgICA0OSwgICAgIDEsICAgIDM3LCAgICA5MCwgICAxNTUsICAgMTA1LCAgICA0MSwgICAgNzcsICAgMTM5LCAgICA0NCwKLSAgICAgIDQ1LCAgICAtMSwgICAgNDcsICAgIDQ4LCAgICAgMSwgICAgLTEsICAgMTAwLCAgICA1MiwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAtMSwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAtMSwgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgLTEsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgLTEsICAgICAxLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTEsICAgIDQ5LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIC0xLAotICAgICAgLTEsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAgMSwgICAgLTEsCi0gICAgICAtMSwgICAgNDEsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICA0OSwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAgLTEsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgLTEsICAgIC0xLCAgICAzMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAxLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICAgNSwgICAgIDYsICAgICA3LAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM3LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICAtMSwgICAgNDQsICAgIC0xLCAgICAtMSwgICAgNDcsCi0gICAgICA0OCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIC0xLCAgICAxMywKKyAgICAgIDU5LCAgICAzOCwgICAgNzksICAgICAzLCAgICAgMSwgICAgIDgsICAgIDU2LCAgICAzNywgICAgMjYsICAgIDM3LAorICAgICAgNjQsICAgIDMxLCAgICAgMSwgICAxNDcsICAgIDM3LCAgICAxOCwgICAgMzAsICAgICAxLCAgICAzMiwgICAxMDksCisgICAgICAgMCwgICAxMTEsICAgIDQ1LCAgICA1MSwgICAgMjcsICAgIDIzLCAgICA3NiwgICAgNDQsICAgIDMxLCAgICA1MSwKKyAgICAgIDUwLCAgICAzNywgICAxMDksICAgIDYzLCAgIDExMSwgICAgNTMsICAgIDMzLCAgICA5MSwgICAgNjgsICAgIDU3LAorICAgICAgMzcsICAgMTAwLCAgICA0NywgICAxNzcsICAgIDQxLCAgICA1MSwgICAgMzcsICAgIDMzLCAgICAzNywgICAgODYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICAzNywgICAxMzEsICAgIDM3LCAgICA1NiwgICAgNDEsICAgIDQ3LCAgICA0OCwKKyAgICAgIDUxLCAgICA0NywgICAgNDcsICAgIDQ3LCAgICA0OCwgICAgNDcsICAgIDQ4LCAgICAzMywgICAgMzcsICAgIDM3LAorICAgICAgNTEsICAgIDMzLCAgIDE0OSwgICAgNDEsICAgIDQ0LCAgICA0NSwgICAgNzYsICAgIDQ0LCAgICA0NSwgICAgNDcsCisgICAgICA0OCwgICAgNDcsICAgMTU5LCAgIDE2MCwgICAgNTIsICAgIDQ3LCAgICAzNywgICAgMzcsICAgMTQ3LCAgICAzNywKKyAgICAgIDQxLCAgICA0NSwgICAgNDYsICAgIDQxLCAgIDEzMSwgICAgNDQsICAgIDQ3LCAgICA0OCwgICAgNTAsICAgIDQ3LAorICAgICAgNDgsICAgMTU5LCAgIDE2MCwgICAgNDYsICAgIDQ1LCAgICA0OSwgICAxNjUsICAgICAxLCAgICAzNCwgICAgNDksCisgICAgICA0OSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgMTc3LCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDUyLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAzNCwgICAgNDQsICAgIDMxLCAgICA0NCwgICAgNDYsCisgICAgICAzMCwgICAgNDQsICAgIDMxLCAgICAzNywgICAgNDksICAgIDQ5LCAgICA0NiwgICAgNDEsICAgIDQ5LCAgICAzNiwKKyAgICAgIDQ0LCAgICA0NSwgICAgNDksICAgIDQ3LCAgICA0OCwgICAgIDEsICAgIDQ5LCAgICAzNCwgICAgNTIsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgNDksICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgNDksICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDQ5LCAgICA0OSwgICAgMzEsICAgIDQ5LCAgICA0OSwgICAgIDEsICAgMTY1LAorICAgICAgODEsICAgIDM3LCAgICA5NCwgICAxNDksICAgMTA3LCAgICA0MSwgICAxMTIsICAgIDQ5LCAgICA0NCwgICAgNDUsCisgICAgICAtMSwgICAgNDcsICAgIDQ4LCAgICAgMSwgICAgLTEsICAgMTAzLCAgICA1MiwgICAgIDUsICAgICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAtMSwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAtMSwgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgLTEsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwKKyAgICAgICAxLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDQ5LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIC0xLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIC0xLCAgICAtMSwKKyAgICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAgMSwgICAgLTEsICAgIC0xLAorICAgICAgNDEsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICA0OSwgICAgMTMsCiAgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAtMSwKICAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgLTEsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIC0xLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAtMSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM3LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDcsICAgIDQ4LAorICAgICAgLTEsICAgIC0xLCAgICAzNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgICAxLCAgICAtMSwgICAgLTEsICAgIDQ5LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM3LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICAtMSwgICAgNDQsICAgIC0xLCAgICAtMSwgICAgNDcsICAgIDQ4LAogICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIC0xLCAgICAxMywgICAgMTQsCiAgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAyNCwKICAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAtMSwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDM2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsICAgICA1LCAgICAgNiwgICAgIDcsCi0gICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgLTEsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgLTEsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAgIC0xLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MQorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgLTEsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgLTEsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgLTEsCisgICAgICAtMSwgICAgMzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA0MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NywgICAgNDgsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgLTEsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgLTEsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIC0xLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgMzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAtMSwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAtMSwgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgLTEsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDQxCiB9OwogCiAvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwpAQCAtODQ3LDE1ICs4MjYsMTYgQEAKICAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAogICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCiAgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgNDEsICAgIDU3LCAgICA2MCwgICAgNjQsICAgIDY1LCAgICA2NiwKLSAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDczLCAgICA4NCwgICAgOTYsICAgIDk4LCAgICA0NCwgICAgNDUsICAgIDMyLAotICAgICAgMzcsICAgIDIzLCAgICAzNywgICAgNTEsICAgIDg3LCAgICA1OSwgICAgMzcsICAgIDg3LCAgICA0NywgICAgNDcsCi0gICAgICA0NCwgICAgMzcsICAgIDQ3LCAgICA0OCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNzAsICAgIDc0LCAgICA3NSwKLSAgICAgIDY2LCAgICAzMiwgICAgNTgsICAgIDg3LCAgICAgMSwgICAgNjQsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDYwLAotICAgICAgNjQsICAgIDg3LCAgICA2NSwgICAgMzcsICAgICAxLCAgICA3NCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNDQsCi0gICAgICA0NiwgICAgNzQsICAgIDMwLCAgICAzMiwgICAgOTcsICAgIDMzLCAgICA0NywgICAgNjAsICAgIDQ0LCAgICA0NSwKLSAgICAgIDM3LCAgICA0MSwgICAgNDcsICAgIDUyLCAgICA3MCwgICAgNzYsICAgIDc3LCAgICA5MSwgICAgOTIsICAgIDkzLAotICAgICAgOTQsICAgIDQ1LCAgICAgMSwgICAgOTAsICAgIDc0LCAgICA0OCwgICAgNDksICAgIDQ5LCAgICA0OSwgICAgNDksCi0gICAgICA3MywgICAgNjMsICAgIDk1LCAgICAgMSwgICAgNjUsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA5NCwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDczLCAgICA4NCwgICAgOTksICAgMTAxLCAgICA0NCwgICAgNDUsICAgIDM3LAorICAgICAgNTEsICAgIDk2LCAgICAyMywgICAgMzcsICAgIDUxLCAgICA4NywgICAgNTksICAgIDM3LCAgICA4NywgICAgNDcsCisgICAgICA0NywgICAgNDQsICAgIDM3LCAgICA0NywgICAgNDgsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA3NCwKKyAgICAgIDc1LCAgICA2NiwgICAgOTYsICAgIDM3LCAgICA5NywgICAgOTgsICAgIDU4LCAgICA4NywgICAgIDEsICAgIDY0LAorICAgICAgODgsICAgIDg5LCAgICA5MCwgICAgNjAsICAgIDY0LCAgICA4NywgICAgNjUsICAgIDM3LCAgICAgMSwgICAgNzQsCisgICAgICA3MSwgICAgNzIsICAgIDczLCAgICA0NCwgICAgNDYsICAgIDc0LCAgICAzMCwgICAgMzIsICAgMTAwLCAgICAzMywKKyAgICAgIDQ3LCAgICA1MCwgICAgNDUsICAgIDQ2LCAgICA2MCwgICAgNDQsICAgIDQ1LCAgICAzNywgICAgNDEsICAgIDQ3LAorICAgICAgNTIsICAgIDcwLCAgICA3NiwgICAgNzcsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0LCAgICA0NSwgICAgIDEsCisgICAgICA5MCwgICAgNzQsICAgIDQ4LCAgICA0OSwgICAgNDksICAgIDQ5LCAgICA0OSwgICAgNzMsICAgIDYzLCAgICA5NSwKKyAgICAgICAxLCAgICA2NSwgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDM0LCAgICA0NSwgICAgOTgsICAgIDk0LAogICAgICAgIDEsICAgIDM3LCAgICA3NiwgICAgMzQsICAgIDc2LCAgICA5NSwgICAgMzMsICAgIDQ3LCAgICA0NCwgICAgNDYsCiAgICAgICA0OSwgICAgNDQsICAgIDMxLCAgICA1MCwgICAgODUsICAgIDg2LCAgICA0OSwgICAgMzcsICAgIDQxLCAgICA0NywKICAgICAgIDcwLCAgICA4MiwgICAgODMsICAgIDQ5LCAgICAzNiwgICAgNDYsICAgIDQ5LCAgICA0OSwgICAgIDEsICAgIDc4LApAQCAtMTA0NSwxNyArMTAyNSwyMCBAQAogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKQEAgLTEwODksMTEgKzEwNzIsMTEgQEAKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCiAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAogCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCiAJCSAgICAgICAJCSAgICAgICApOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKICAgICB9CiB9CiAKQEAgLTEzNzMsMTAgKzEzNTYsOCBAQAogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKQEAgLTEzOTIsMTEgKzEzNzMsMTAgQEAKICNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KIAogCi0KLS8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCiBpbnQgeXljaGFyOwogCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCiBZWVNUWVBFIHl5bHZhbDsKIAogLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KQEAgLTE0MDQsOSArMTM4NCw5IEBACiAKIAogCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCkBAIC0xNDMwLDE0ICsxNDEwLDM5IEBACiAjZW5kaWYKICNlbmRpZgogewotICAKLSAgaW50IHl5c3RhdGU7CisKKworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5dnNwOworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKICAgaW50IHl5bjsKICAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7CisKICNpZiBZWUVSUk9SX1ZFUkJPU0UKICAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCiAgIGNoYXIgeXltc2didWZbMTI4XTsKQEAgLTE0NDUsNTEgKzE0NTAsMjggQEAKICAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CiAjZW5kaWYKIAotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotCi0KICNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0KLQogICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGludCB5eWxlbiA9IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3RhdHVzID0gMDsKICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTUxOSw3ICsxNTAxLDYgQEAKIAlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CiAJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CiAKLQogCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKIAkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CkBAIC0xNTI3LDcgKzE1MDgsNiBAQAogCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAogCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCiAJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQogCQkgICAgJnl5c3RhY2tzaXplKTsKIAogCXl5c3MgPSB5eXNzMTsKQEAgLTE1NTAsOSArMTUzMCw4IEBACiAJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRyKQogCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwpAQCAtMTU2Myw3ICsxNTQyLDYgQEAKICAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CiAgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwogCi0KICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKIAkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CiAKQEAgLTE1NzMsNiArMTU1MSw5IEBACiAKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKIAorICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCiAgIGdvdG8geXliYWNrdXA7CiAKIC8qLS0tLS0tLS0tLS0uCkBAIC0xNTgxLDE2ICsxNTYyLDE2IEBACiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZRU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CkBAIC0xNjIyLDIwICsxNjAzLDE2IEBACiAgICAgICBnb3RvIHl5cmVkdWNlOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KICAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgogICAgICBzdGF0dXMuICAqLwogICBpZiAoeXllcnJzdGF0dXMpCiAgICAgeXllcnJzdGF0dXMtLTsKIAotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwogICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gIGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CiAKICAgeXlzdGF0ZSA9IHl5bjsKICAgKisreXl2c3AgPSB5eWx2YWw7CkBAIC0xNjc1LDQ3ICsxNjUyLDY1IEBACiAgIHN3aXRjaCAoeXluKQogICAgIHsKICAgICAgICAgY2FzZSA0OgotI2xpbmUgMTA4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAxMDkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7IGlzX3R5cGVkZWYgPSAwOyBpc19leHRlcm4gPSAwOyBjdXJyZW50X25hbWUgPSBOVUxMOyBkZWNsX3NwZWMgPSBOVUxMOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNToKLSNsaW5lIDExMCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMTExICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyBmcmVlX2xpc3QoKih5eXZzcFsoMikgLSAoMildKSwgTlVMTCk7ICooeXl2c3BbKDIpIC0gKDIpXSkgPSBOVUxMOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDExNCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMTE1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyBpc190eXBlZGVmID0gMTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDc6Ci0jbGluZSAxMTUgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDExNiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoNCkgLSAoNCldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDg6Ci0jbGluZSAxMTYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDExNyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgaXNfdHlwZWRlZiA9IDE7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgotI2xpbmUgMTE3ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAxMTggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDMpIC0gKDMpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDoKLSNsaW5lIDEyMiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgotICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMildKTsgO30KLSAgICBicmVhazsKIAotICBjYXNlIDE1OgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KICNsaW5lIDEyMyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMildKTsgO30KICAgICBicmVhazsKIAorICBjYXNlIDE1OgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMTI0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQorICAgIGJyZWFrOworCiAgIGNhc2UgMTY6Ci0jbGluZSAxMjggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDEyOSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgaWYgKGN1cnJlbnRfbmFtZSkgewogCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICpkZWNsID0gKCooeXl2c3BbKDMpIC0gKDMpXSkpLT5uZXh0OwogCQkgICAgKCooeXl2c3BbKDMpIC0gKDMpXSkpLT5uZXh0ID0gTlVMTDsKQEAgLTE3MjksMTIgKzE3MjQsMTYgQEAKICAgICBicmVhazsKIAogICBjYXNlIDE3OgotI2xpbmUgMTQxICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAxNDIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6Ci0jbGluZSAxNDcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDE0OCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgc3RydWN0IHN0cmluZ19saXN0ICpkZWNsID0gKih5eXZzcFsoMSkgLSAoMSldKTsKIAkJICAqKHl5dnNwWygxKSAtICgxKV0pID0gTlVMTDsKIAkJICBhZGRfc3ltYm9sKGN1cnJlbnRfbmFtZSwKQEAgLTE3NDUsNyArMTc0NCw5IEBACiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDoKLSNsaW5lIDE1NSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMTU2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlY2wgPSAqKHl5dnNwWygzKSAtICgzKV0pOwogCQkgICooeXl2c3BbKDMpIC0gKDMpXSkgPSBOVUxMOwogCQkgIGZyZWVfbGlzdCgqKHl5dnNwWygyKSAtICgzKV0pLCBOVUxMKTsKQEAgLTE3NTgsMjcgKzE3NTksMzcgQEAKICAgICBicmVhazsKIAogICBjYXNlIDIxOgotI2xpbmUgMTY4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAxNjkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDQpIC0gKDQpXSkgPyAoeXl2c3BbKDQpIC0gKDQpXSkgOiAoeXl2c3BbKDMpIC0gKDQpXSkgPyAoeXl2c3BbKDMpIC0gKDQpXSkgOiAoeXl2c3BbKDIpIC0gKDQpXSkgPyAoeXl2c3BbKDIpIC0gKDQpXSkgOiAoeXl2c3BbKDEpIC0gKDQpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjoKLSNsaW5lIDE3MyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMTc0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyBkZWNsX3NwZWMgPSBOVUxMOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQ6Ci0jbGluZSAxNzggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDE3OSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgZGVjbF9zcGVjID0gKih5eXZzcFsoMSkgLSAoMSldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDI1OgotI2xpbmUgMTc5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAxODAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7IGRlY2xfc3BlYyA9ICooeXl2c3BbKDIpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNjoKLSNsaW5lIDE4NCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMTg1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAvKiBWZXJzaW9uIDIgY2hlY2tzdW1taW5nIGlnbm9yZXMgc3RvcmFnZSBjbGFzcywgYXMgdGhhdAogCQkgICAgIGlzIHJlYWxseSBpcnJlbGV2YW50IHRvIHRoZSBsaW5rYWdlLiAgKi8KIAkJICByZW1vdmVfbm9kZSgoeXl2c3BbKDEpIC0gKDEpXSkpOwpAQCAtMTc4NywzMiArMTc5OCw0NCBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgMzE6Ci0jbGluZSAxOTYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDE5NyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgaXNfZXh0ZXJuID0gMTsgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMSldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDMyOgotI2xpbmUgMTk3ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAxOTggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7IGlzX2V4dGVybiA9IDA7ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDEpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNzoKLSNsaW5lIDIwOSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMjEwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyByZW1vdmVfbm9kZSgoeXl2c3BbKDEpIC0gKDIpXSkpOyAoKih5eXZzcFsoMikgLSAoMildKSktPnRhZyA9IFNZTV9TVFJVQ1Q7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzODoKLSNsaW5lIDIxMSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMjEyICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyByZW1vdmVfbm9kZSgoeXl2c3BbKDEpIC0gKDIpXSkpOyAoKih5eXZzcFsoMikgLSAoMildKSktPnRhZyA9IFNZTV9VTklPTjsgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMildKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDM5OgotI2xpbmUgMjEzICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyMTQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7IHJlbW92ZV9ub2RlKCh5eXZzcFsoMSkgLSAoMildKSk7ICgqKHl5dnNwWygyKSAtICgyKV0pKS0+dGFnID0gU1lNX0VOVU07ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MDoKLSNsaW5lIDIxNyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMjE4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnMgPSAqKHl5dnNwWygzKSAtICgzKV0pLCAqaSA9ICooeXl2c3BbKDIpIC0gKDMpXSksICpyOwogCQkgIHIgPSBjb3B5X25vZGUoaSk7IHItPnRhZyA9IFNZTV9TVFJVQ1Q7CiAJCSAgci0+bmV4dCA9ICgqKHl5dnNwWygxKSAtICgzKV0pKS0+bmV4dDsgKih5eXZzcFsoMykgLSAoMyldKSA9IHI7ICgqKHl5dnNwWygxKSAtICgzKV0pKS0+bmV4dCA9IE5VTEw7CkBAIC0xODIyLDcgKzE4NDUsOSBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6Ci0jbGluZSAyMjQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDIyNSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgc3RydWN0IHN0cmluZ19saXN0ICpzID0gKih5eXZzcFsoMykgLSAoMyldKSwgKmkgPSAqKHl5dnNwWygyKSAtICgzKV0pLCAqcjsKIAkJICByID0gY29weV9ub2RlKGkpOyByLT50YWcgPSBTWU1fVU5JT047CiAJCSAgci0+bmV4dCA9ICgqKHl5dnNwWygxKSAtICgzKV0pKS0+bmV4dDsgKih5eXZzcFsoMykgLSAoMyldKSA9IHI7ICgqKHl5dnNwWygxKSAtICgzKV0pKS0+bmV4dCA9IE5VTEw7CkBAIC0xODMyLDcgKzE4NTcsOSBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgNDI6Ci0jbGluZSAyMzEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDIzMiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgc3RydWN0IHN0cmluZ19saXN0ICpzID0gKih5eXZzcFsoMykgLSAoMyldKSwgKmkgPSAqKHl5dnNwWygyKSAtICgzKV0pLCAqcjsKIAkJICByID0gY29weV9ub2RlKGkpOyByLT50YWcgPSBTWU1fRU5VTTsKIAkJICByLT5uZXh0ID0gKCooeXl2c3BbKDEpIC0gKDMpXSkpLT5uZXh0OyAqKHl5dnNwWygzKSAtICgzKV0pID0gcjsgKCooeXl2c3BbKDEpIC0gKDMpXSkpLT5uZXh0ID0gTlVMTDsKQEAgLTE4NDIsNDIgKzE4NjksNTggQEAKICAgICBicmVhazsKIAogICBjYXNlIDQzOgotI2xpbmUgMjM5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi0gICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMjQyICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyBhZGRfc3ltYm9sKE5VTEwsIFNZTV9FTlVNLCBOVUxMLCAwKTsgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMildKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDQ0OgotI2xpbmUgMjQwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyNDQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NToKLSNsaW5lIDI0MSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMjQ1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTY6Ci0jbGluZSAyNTUgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI1OSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKCooeXl2c3BbKDEpIC0gKDEpXSkpLT50YWcgPSBTWU1fVFlQRURFRjsgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMSldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDU3OgotI2xpbmUgMjYwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyNjQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSkgPyAoeXl2c3BbKDIpIC0gKDIpXSkgOiAoeXl2c3BbKDEpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKLSNsaW5lIDI2NCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMjY4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gTlVMTDsgO30KICAgICBicmVhazsKIAogICBjYXNlIDYxOgotI2xpbmUgMjcwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyNzQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NToKLSNsaW5lIDI3NiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMjgwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAvKiByZXN0cmljdCBoYXMgbm8gZWZmZWN0IGluIHByb3RvdHlwZXMgc28gaWdub3JlIGl0ICovCiAJCSAgcmVtb3ZlX25vZGUoKHl5dnNwWygxKSAtICgxKV0pKTsKIAkJICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgxKV0pOwpAQCAtMTg4NSwxMiArMTkyOCwxNiBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgNjY6Ci0jbGluZSAyODMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI4NyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMildKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDY4OgotI2xpbmUgMjg5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyOTMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7IGlmIChjdXJyZW50X25hbWUgIT0gTlVMTCkgewogCQkgICAgZXJyb3Jfd2l0aF9wb3MoInVuZXhwZWN0ZWQgc2Vjb25kIGRlY2xhcmF0aW9uIG5hbWUiKTsKIAkJICAgIFlZRVJST1I7CkBAIC0xOTAyLDk3ICsxOTQ5LDEzNSBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgNjk6Ci0jbGluZSAyOTggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDMwMiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoNCkgLSAoNCldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDcwOgotI2xpbmUgMzAwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzMDQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDQpIC0gKDQpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3MToKLSNsaW5lIDMwMiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzA2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzI6Ci0jbGluZSAzMDQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDMwOCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMykgLSAoMyldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDczOgotI2xpbmUgMzA2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzMTAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDMpIC0gKDMpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NDoKLSNsaW5lIDMxMiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzE2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzg6Ci0jbGluZSAzMjAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDMyNCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoNCkgLSAoNCldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDc5OgotI2xpbmUgMzIyICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzMjYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDQpIC0gKDQpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MDoKLSNsaW5lIDMyNCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzI4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgODE6Ci0jbGluZSAzMjYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDMzMCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMykgLSAoMyldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDgyOgotI2xpbmUgMzI4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzMzIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDMpIC0gKDMpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MzoKLSNsaW5lIDMzMiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzM2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgODU6Ci0jbGluZSAzMzQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDMzOCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMykgLSAoMyldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDg2OgotI2xpbmUgMzM4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzNDIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgODk6Ci0jbGluZSAzNDUgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM0OSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMykgLSAoMyldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDkwOgotI2xpbmUgMzUwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzNTQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSkgPyAoeXl2c3BbKDIpIC0gKDIpXSkgOiAoeXl2c3BbKDEpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKLSNsaW5lIDM1NSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzU5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pID8gKHl5dnNwWygyKSAtICgyKV0pIDogKHl5dnNwWygxKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTM6Ci0jbGluZSAzNjAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM2NCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9IE5VTEw7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NDoKLSNsaW5lIDM2MiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzY2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAvKiBGb3IgdmVyc2lvbiAyIGNoZWNrc3Vtcywgd2UgZG9uJ3Qgd2FudCB0byByZW1lbWJlcgogCQkgICAgIHByaXZhdGUgcGFyYW1ldGVyIG5hbWVzLiAgKi8KIAkJICByZW1vdmVfbm9kZSgoeXl2c3BbKDEpIC0gKDEpXSkpOwpAQCAtMjAwMSwzOSArMjA4Niw1MyBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgOTU6Ci0jbGluZSAzNzAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM3NCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgcmVtb3ZlX25vZGUoKHl5dnNwWygxKSAtICgxKV0pKTsKIAkJICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgxKV0pOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTY6Ci0jbGluZSAzNzQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM3OCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoNCkgLSAoNCldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDk3OgotI2xpbmUgMzc2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzODAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDQpIC0gKDQpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5ODoKLSNsaW5lIDM3OCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzgyICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6Ci0jbGluZSAzODAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM4NCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMykgLSAoMyldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKLSNsaW5lIDM4MiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzg2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygzKSAtICgzKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAxOgotI2xpbmUgMzg3ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzOTEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7IHN0cnVjdCBzdHJpbmdfbGlzdCAqZGVjbCA9ICooeXl2c3BbKDIpIC0gKDMpXSk7CiAJCSAgKih5eXZzcFsoMikgLSAoMyldKSA9IE5VTEw7CiAJCSAgYWRkX3N5bWJvbChjdXJyZW50X25hbWUsIFNZTV9OT1JNQUwsIGRlY2wsIGlzX2V4dGVybik7CkBAIC0yMDQyLDkzICsyMTQxLDE2MyBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAyOgotI2xpbmUgMzk1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzOTkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA0OgotI2xpbmUgNDAyICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0MDYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7IHJlbW92ZV9saXN0KCh5eXZzcFsoMikgLSAoMildKSwgJigqKHl5dnNwWygxKSAtICgyKV0pKS0+bmV4dCk7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6Ci0jbGluZSA0MDYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQxMCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMykgLSAoMyldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDEwNjoKLSNsaW5lIDQwNyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNDExICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygzKSAtICgzKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA3OgotI2xpbmUgNDExICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0MTUgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTEwOgotI2xpbmUgNDE3ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0MjEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTE6Ci0jbGluZSA0MjIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQyNiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMykgLSAoMyldKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDExMjoKLSNsaW5lIDQyNCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNDI4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTEzOgotI2xpbmUgNDI4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0MzIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE2OgotI2xpbmUgNDM0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0MzggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDMpIC0gKDMpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTc6Ci0jbGluZSA0MzggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ0MiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMildKSA/ICh5eXZzcFsoMikgLSAoMildKSA6ICh5eXZzcFsoMSkgLSAoMildKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDExODoKLSNsaW5lIDQzOSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNDQzICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIwOgotI2xpbmUgNDQ0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0NDggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKICAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjE6Ci0jbGluZSA0NDggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ1MiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgKHl5dmFsKSA9IE5VTEw7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjM6Ci0jbGluZSA0NTMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLSAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDIpXSk7IDt9CisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0NTcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbKDMpIC0gKDMpXSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjQ6Ci0jbGluZSA0NTcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ1OCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFsoNCkgLSAoNCldKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyNzoKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ2NyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBzdHJkdXAoKCooeXl2c3BbKDEpIC0gKDEpXSkpLT5zdHJpbmcpOworCQkJYWRkX3N5bWJvbChuYW1lLCBTWU1fRU5VTV9DT05TVCwgTlVMTCwgMCk7CisJCTt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjg6CisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0NzIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7CisJCQljb25zdCBjaGFyICpuYW1lID0gc3RyZHVwKCgqKHl5dnNwWygxKSAtICgzKV0pKS0+c3RyaW5nKTsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdCAqZXhwciA9IGNvcHlfbGlzdF9yYW5nZSgqKHl5dnNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygyKSAtICgzKV0pKTsKKwkJCWFkZF9zeW1ib2wobmFtZSwgU1lNX0VOVU1fQ09OU1QsIGV4cHIsIDApOworCQk7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI5OgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNDc5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgyKV0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTMwOgorCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNDgzICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCiAgICAgeyAoeXl2YWwpID0gTlVMTDsgO30KICAgICBicmVhazsKIAotICBjYXNlIDEyNjoKLSNsaW5lIDQ2MyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICBjYXNlIDEzMjoKKworLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ4OSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogICAgIHsgZXhwb3J0X3N5bWJvbCgoKih5eXZzcFsoMykgLSAoNSldKSktPnN0cmluZyk7ICh5eXZhbCkgPSAoeXl2c3BbKDUpIC0gKDUpXSk7IDt9CiAgICAgYnJlYWs7CiAKIAotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCi0jbGluZSAyMTMyICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmMiCisKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyMzAxICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmMiCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKQEAgLTIxMzksNyArMjMwOCw2IEBACiAKICAgKisreXl2c3AgPSB5eXZhbDsKIAotCiAgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCiAgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQogICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCkBAIC0yMjA0LDcgKzIzNzIsNyBAQAogCiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTIyMjEsNyArMjM4OSw3IEBACiAJfQogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBAIC0yMjc4LDkgKzI0NDYsNiBAQAogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFsOwogCiAKQEAgLTIzMDUsNyArMjQ3MCw3IEBACiAgIHl5cmVzdWx0ID0gMTsKICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMzE2LDcgKzI0ODEsNyBAQAogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCiAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5eXRva2VuLCAmeXlsdmFsKTsKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZApAQCAtMjM0Miw3ICsyNTA3LDkgQEAKIH0KIAogCi0jbGluZSA0NjcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKworLyogTGluZSAxNjc1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ5MyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogCiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmhfc2hpcHBlZCBiL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuaF9zaGlwcGVkCmluZGV4IGM0ZWVlYzYuLjUxNzUyMzYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuaF9zaGlwcGVkCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuaF9zaGlwcGVkCkBAIC0xLDI0ICsxLDIzIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4xLiAgKi8KIAogLyogU2tlbGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgogICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksMTAgKzI4LDExIEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKKwogLyogVG9rZW5zLiAgKi8KICNpZm5kZWYgWVlUT0tFTlRZUEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBAIC04Miw1OCArODIsMTYgQEAKICAgICAgRklMRU5BTUUgPSAyOTgKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEFTTV9LRVlXIDI1OAotI2RlZmluZSBBVFRSSUJVVEVfS0VZVyAyNTkKLSNkZWZpbmUgQVVUT19LRVlXIDI2MAotI2RlZmluZSBCT09MX0tFWVcgMjYxCi0jZGVmaW5lIENIQVJfS0VZVyAyNjIKLSNkZWZpbmUgQ09OU1RfS0VZVyAyNjMKLSNkZWZpbmUgRE9VQkxFX0tFWVcgMjY0Ci0jZGVmaW5lIEVOVU1fS0VZVyAyNjUKLSNkZWZpbmUgRVhURVJOX0tFWVcgMjY2Ci0jZGVmaW5lIEVYVEVOU0lPTl9LRVlXIDI2NwotI2RlZmluZSBGTE9BVF9LRVlXIDI2OAotI2RlZmluZSBJTkxJTkVfS0VZVyAyNjkKLSNkZWZpbmUgSU5UX0tFWVcgMjcwCi0jZGVmaW5lIExPTkdfS0VZVyAyNzEKLSNkZWZpbmUgUkVHSVNURVJfS0VZVyAyNzIKLSNkZWZpbmUgUkVTVFJJQ1RfS0VZVyAyNzMKLSNkZWZpbmUgU0hPUlRfS0VZVyAyNzQKLSNkZWZpbmUgU0lHTkVEX0tFWVcgMjc1Ci0jZGVmaW5lIFNUQVRJQ19LRVlXIDI3NgotI2RlZmluZSBTVFJVQ1RfS0VZVyAyNzcKLSNkZWZpbmUgVFlQRURFRl9LRVlXIDI3OAotI2RlZmluZSBVTklPTl9LRVlXIDI3OQotI2RlZmluZSBVTlNJR05FRF9LRVlXIDI4MAotI2RlZmluZSBWT0lEX0tFWVcgMjgxCi0jZGVmaW5lIFZPTEFUSUxFX0tFWVcgMjgyCi0jZGVmaW5lIFRZUEVPRl9LRVlXIDI4MwotI2RlZmluZSBFWFBPUlRfU1lNQk9MX0tFWVcgMjg0Ci0jZGVmaW5lIEFTTV9QSFJBU0UgMjg1Ci0jZGVmaW5lIEFUVFJJQlVURV9QSFJBU0UgMjg2Ci0jZGVmaW5lIEJSQUNFX1BIUkFTRSAyODcKLSNkZWZpbmUgQlJBQ0tFVF9QSFJBU0UgMjg4Ci0jZGVmaW5lIEVYUFJFU1NJT05fUEhSQVNFIDI4OQotI2RlZmluZSBDSEFSIDI5MAotI2RlZmluZSBET1RTIDI5MQotI2RlZmluZSBJREVOVCAyOTIKLSNkZWZpbmUgSU5UIDI5MwotI2RlZmluZSBSRUFMIDI5NAotI2RlZmluZSBTVFJJTkcgMjk1Ci0jZGVmaW5lIFRZUEUgMjk2Ci0jZGVmaW5lIE9USEVSIDI5NwotI2RlZmluZSBGSUxFTkFNRSAyOTgKLQogCiAKIAogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICNlbmRpZgogCiBleHRlcm4gWVlTVFlQRSB5eWx2YWw7CiAKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IGIvc2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55CmluZGV4IDA5YTI2NWMuLmJhNWMyNDIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueQorKysgYi9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgImdlbmtzeW1zLmgiCiAKIHN0YXRpYyBpbnQgaXNfdHlwZWRlZjsKQEAgLTIyNywxNiArMjI4LDE5IEBACiAJCSAgYWRkX3N5bWJvbChpLT5zdHJpbmcsIFNZTV9VTklPTiwgcywgaXNfZXh0ZXJuKTsKIAkJICAkJCA9ICQzOwogCQl9Ci0JfCBFTlVNX0tFWVcgSURFTlQgQlJBQ0VfUEhSQVNFCisJfCBFTlVNX0tFWVcgSURFTlQgZW51bV9ib2R5CiAJCXsgc3RydWN0IHN0cmluZ19saXN0ICpzID0gKiQzLCAqaSA9ICokMiwgKnI7CiAJCSAgciA9IGNvcHlfbm9kZShpKTsgci0+dGFnID0gU1lNX0VOVU07CiAJCSAgci0+bmV4dCA9ICgqJDEpLT5uZXh0OyAqJDMgPSByOyAoKiQxKS0+bmV4dCA9IE5VTEw7CiAJCSAgYWRkX3N5bWJvbChpLT5zdHJpbmcsIFNZTV9FTlVNLCBzLCBpc19leHRlcm4pOwogCQkgICQkID0gJDM7CiAJCX0KLQotCS8qIEFub255bW91cyBzL3UvZSBkZWZpbml0aW9ucy4gIE5vdGhpbmcgbmVlZHMgZG9pbmcuICAqLwotCXwgRU5VTV9LRVlXIEJSQUNFX1BIUkFTRQkJCXsgJCQgPSAkMjsgfQorCS8qCisJICogQW5vbnltb3VzIGVudW0gZGVmaW5pdGlvbi4gVGVsbCBhZGRfc3ltYm9sKCkgdG8gcmVzdGFydCBpdHMgY291bnRlci4KKwkgKi8KKwl8IEVOVU1fS0VZVyBlbnVtX2JvZHkKKwkJeyBhZGRfc3ltYm9sKE5VTEwsIFNZTV9FTlVNLCBOVUxMLCAwKTsgJCQgPSAkMjsgfQorCS8qIEFub255bW91cyBzL3UgZGVmaW5pdGlvbnMuICBOb3RoaW5nIG5lZWRzIGRvaW5nLiAgKi8KIAl8IFNUUlVDVF9LRVlXIGNsYXNzX2JvZHkJCQl7ICQkID0gJDI7IH0KIAl8IFVOSU9OX0tFWVcgY2xhc3NfYm9keQkJCQl7ICQkID0gJDI7IH0KIAk7CkBAIC00NDksNiArNDUzLDI4IEBACiAJfCBhdHRyaWJ1dGVfb3B0IEFUVFJJQlVURV9QSFJBU0UKIAk7CiAKK2VudW1fYm9keToKKwkneycgZW51bWVyYXRvcl9saXN0ICd9JwkJCQl7ICQkID0gJDM7IH0KKwl8ICd7JyBlbnVtZXJhdG9yX2xpc3QgJywnICd9JwkJCXsgJCQgPSAkNDsgfQorCSA7CisKK2VudW1lcmF0b3JfbGlzdDoKKwllbnVtZXJhdG9yCisJfCBlbnVtZXJhdG9yX2xpc3QgJywnIGVudW1lcmF0b3IKKworZW51bWVyYXRvcjoKKwlJREVOVAorCQl7CisJCQljb25zdCBjaGFyICpuYW1lID0gc3RyZHVwKCgqJDEpLT5zdHJpbmcpOworCQkJYWRkX3N5bWJvbChuYW1lLCBTWU1fRU5VTV9DT05TVCwgTlVMTCwgMCk7CisJCX0KKwl8IElERU5UICc9JyBFWFBSRVNTSU9OX1BIUkFTRQorCQl7CisJCQljb25zdCBjaGFyICpuYW1lID0gc3RyZHVwKCgqJDEpLT5zdHJpbmcpOworCQkJc3RydWN0IHN0cmluZ19saXN0ICpleHByID0gY29weV9saXN0X3JhbmdlKCokMywgKiQyKTsKKwkJCWFkZF9zeW1ib2wobmFtZSwgU1lNX0VOVU1fQ09OU1QsIGV4cHIsIDApOworCQl9CisKIGFzbV9kZWZpbml0aW9uOgogCUFTTV9QSFJBU0UgJzsnCQkJCQl7ICQkID0gJDI7IH0KIAk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAppbmRleCAxMzllMGZmLi5kMjlhOGQ3IDEwMDc1NQotLS0gYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCisrKyBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKQEAgLTQyMCw2ICs0MjAsMTQgQEAKIAogCW9wZW4obXkgJHBhdGNoLCAiPCAkZmlsZSIpCiAJICAgIG9yIGRpZSAiJFA6IENhbid0IG9wZW4gJGZpbGU6ICQhXG4iOworCisJIyBXZSBjYW4gY2hlY2sgYXJiaXRyYXJ5IGluZm9ybWF0aW9uIGJlZm9yZSB0aGUgcGF0Y2gKKwkjIGxpa2UgdGhlIGNvbW1pdCBtZXNzYWdlLCBtYWlsIGhlYWRlcnMsIGV0Yy4uLgorCSMgVGhpcyBhbGxvd3MgdXMgdG8gbWF0Y2ggYXJiaXRyYXJ5IGtleXdvcmRzIGFnYWluc3QgYW55IHBhcnQKKwkjIG9mIGEgZ2l0IGZvcm1hdC1wYXRjaCBnZW5lcmF0ZWQgZmlsZSAoc3ViamVjdCB0YWdzLCBldGMuLi4pCisKKwlteSAkcGF0Y2hfcHJlZml4ID0gIiI7CQkJI1BhcnNpbmcgdGhlIGludHJvCisKIAl3aGlsZSAoPCRwYXRjaD4pIHsKIAkgICAgbXkgJHBhdGNoX2xpbmUgPSAkXzsKIAkgICAgaWYgKG0vXlwrXCtcK1xzKyhcUyspLykgewpAQCAtNDI4LDEzICs0MzYsMTQgQEAKIAkJJGZpbGVuYW1lID1+IHNAXG5AQDsKIAkJJGxhc3RmaWxlID0gJGZpbGVuYW1lOwogCQlwdXNoKEBmaWxlcywgJGZpbGVuYW1lKTsKKwkJJHBhdGNoX3ByZWZpeCA9ICJeWystXS4qIjsJI05vdyBwYXJzaW5nIHRoZSBhY3R1YWwgcGF0Y2gKIAkgICAgfSBlbHNpZiAobS9eXEBcQCAtKFxkKyksKFxkKykvKSB7CiAJCWlmICgkZW1haWxfZ2l0X2JsYW1lKSB7CiAJCSAgICBwdXNoKEByYW5nZSwgIiRsYXN0ZmlsZTokMTokMiIpOwogCQl9CiAJICAgIH0gZWxzaWYgKCRrZXl3b3JkcykgewogCQlmb3JlYWNoIG15ICRsaW5lIChrZXlzICVrZXl3b3JkX2hhc2gpIHsKLQkJICAgIGlmICgkcGF0Y2hfbGluZSA9fiBtL15bKy1dLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCSAgICBpZiAoJHBhdGNoX2xpbmUgPX4gbS8ke3BhdGNoX3ByZWZpeH0ka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CiAJCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOwogCQkgICAgfQogCQl9CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggZThmYmE5NS4uY2QxMDRhZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMTI0OCw2ICsxMjQ4LDE5IEBACiAJCXJldHVybiAtMTsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRfc2VjdGlvbl9saXN0KGNvbnN0IGNoYXIgKiBjb25zdCBsaXN0WzIwXSkKK3sKKwljb25zdCBjaGFyICpjb25zdCAqcyA9IGxpc3Q7CisKKwl3aGlsZSAoKnMpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsICpzKTsKKwkJcysrOworCQlpZiAoKnMpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIik7CisJfQorCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKwogLyoKICAqIFByaW50IGEgd2FybmluZyBhYm91dCBhIHNlY3Rpb24gbWlzbWF0Y2guCiAgKiBUcnkgdG8gZmluZCBzeW1ib2xzIG5lYXIgaXQgc28gdXNlciBjYW4gZmluZCBpdC4KQEAgLTEzMDQsNyArMTMxNyw2IEBACiAJCWJyZWFrOwogCWNhc2UgREFUQV9UT19BTllfSU5JVDogewogCQlwcmxfdG8gPSBzZWMyYW5ub3RhdGlvbih0b3NlYyk7Ci0JCWNvbnN0IGNoYXIgKmNvbnN0ICpzID0gbWlzbWF0Y2gtPnN5bWJvbF93aGl0ZV9saXN0OwogCQlmcHJpbnRmKHN0ZGVyciwKIAkJIlRoZSB2YXJpYWJsZSAlcyByZWZlcmVuY2VzXG4iCiAJCSJ0aGUgJXMgJXMlcyVzXG4iCkBAIC0xMzEyLDkgKzEzMjQsNyBAQAogCQkidmFyaWFibGUgd2l0aCBfX2luaXQqIG9yIF9fcmVmZGF0YSAoc2VlIGxpbnV4L2luaXQuaCkgIgogCQkib3IgbmFtZSB0aGUgdmFyaWFibGU6XG4iLAogCQlmcm9tc3ltLCB0bywgcHJsX3RvLCB0b3N5bSwgdG9fcCk7Ci0JCXdoaWxlICgqcykKLQkJCWZwcmludGYoc3RkZXJyLCAiJXMsICIsICpzKyspOwotCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCXByaW50X3NlY3Rpb25fbGlzdChtaXNtYXRjaC0+c3ltYm9sX3doaXRlX2xpc3QpOwogCQlmcmVlKHBybF90byk7CiAJCWJyZWFrOwogCX0KQEAgLTEzMjksNyArMTMzOSw2IEBACiAJCWJyZWFrOwogCWNhc2UgREFUQV9UT19BTllfRVhJVDogewogCQlwcmxfdG8gPSBzZWMyYW5ub3RhdGlvbih0b3NlYyk7Ci0JCWNvbnN0IGNoYXIgKmNvbnN0ICpzID0gbWlzbWF0Y2gtPnN5bWJvbF93aGl0ZV9saXN0OwogCQlmcHJpbnRmKHN0ZGVyciwKIAkJIlRoZSB2YXJpYWJsZSAlcyByZWZlcmVuY2VzXG4iCiAJCSJ0aGUgJXMgJXMlcyVzXG4iCkBAIC0xMzM3LDkgKzEzNDYsNyBAQAogCQkidmFyaWFibGUgd2l0aCBfX2V4aXQqIChzZWUgbGludXgvaW5pdC5oKSBvciAiCiAJCSJuYW1lIHRoZSB2YXJpYWJsZTpcbiIsCiAJCWZyb21zeW0sIHRvLCBwcmxfdG8sIHRvc3ltLCB0b19wKTsKLQkJd2hpbGUgKCpzKQotCQkJZnByaW50ZihzdGRlcnIsICIlcywgIiwgKnMrKyk7Ci0JCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJcHJpbnRfc2VjdGlvbl9saXN0KG1pc21hdGNoLT5zeW1ib2xfd2hpdGVfbGlzdCk7CiAJCWZyZWUocHJsX3RvKTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCmluZGV4IGQwYjkzMWIuLmE4MzRiOTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQorKysgYi9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKQEAgLTEyNyw3ICsxMjcsOCBAQAogJChpZiAkKGZpbmRzdHJpbmcgdGFyLXNyYywkQCksLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAkKGlmICQoZmluZHN0cmluZyBiejIsJEApLGJ6aXAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICQoaWYgJChmaW5kc3RyaW5nIGd6LCRAKSxnemlwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotJChlcnJvciB1bmtub3duIHRhcmdldCAkQCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoaWYgJChmaW5kc3RyaW5nIHh6LCRAKSx4eiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorJChlcnJvciB1bmtub3duIHRhcmdldCAkQCkpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJLWYgLTkgJChwZXJmLXRhcikudGFyKQogCiBwZXJmLSVwa2c6IEZPUkNFCkBAIC0xNDIsNyArMTQzLDkgQEAKIAlAZWNobyAnICB0YXItcGtnICAgICAgICAgICAgIC0gQnVpbGQgdGhlIGtlcm5lbCBhcyBhbiB1bmNvbXByZXNzZWQgdGFyYmFsbCcKIAlAZWNobyAnICB0YXJnei1wa2cgICAgICAgICAgIC0gQnVpbGQgdGhlIGtlcm5lbCBhcyBhIGd6aXAgY29tcHJlc3NlZCB0YXJiYWxsJwogCUBlY2hvICcgIHRhcmJ6Mi1wa2cgICAgICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGEgYnppcDIgY29tcHJlc3NlZCB0YXJiYWxsJworCUBlY2hvICcgIHRhcnh6LXBrZyAgICAgICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGEgeHogY29tcHJlc3NlZCB0YXJiYWxsJwogCUBlY2hvICcgIHBlcmYtdGFyLXNyYy1wa2cgICAgLSBCdWlsZCAkKHBlcmYtdGFyKS50YXIgc291cmNlIHRhcmJhbGwnCiAJQGVjaG8gJyAgcGVyZi10YXJnei1zcmMtcGtnICAtIEJ1aWxkICQocGVyZi10YXIpLnRhci5neiBzb3VyY2UgdGFyYmFsbCcKIAlAZWNobyAnICBwZXJmLXRhcmJ6Mi1zcmMtcGtnIC0gQnVpbGQgJChwZXJmLXRhcikudGFyLmJ6MiBzb3VyY2UgdGFyYmFsbCcKKwlAZWNobyAnICBwZXJmLXRhcnh6LXNyYy1wa2cgIC0gQnVpbGQgJChwZXJmLXRhcikudGFyLnh6IHNvdXJjZSB0YXJiYWxsJwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKaW5kZXggNTFiMmFhMC4uODNjOWMwNCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCisrKyBiL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgpAQCAtMzUsNiArMzUsMTAgQEAKIAkJY29tcHJlc3M9ImJ6aXAyIC1jOSIKIAkJZmlsZV9leHQ9Ii5iejIiCiAJCTs7CisJdGFyeHotcGtnKQorCQljb21wcmVzcz0ieHogLWM5IgorCQlmaWxlX2V4dD0iLnh6IgorCQk7OwogCSopCiAJCWVjaG8gIlVua25vd24gdGFyYmFsbCB0YXJnZXQgXCIkezF9XCIgcmVxdWVzdGVkLCBwbGVhc2UgYWRkIGl0IHRvICR7MH0uIiA+JjIKIAkJZXhpdCAxCmRpZmYgLS1naXQgYS9zY3JpcHRzL3NldGxvY2FsdmVyc2lvbiBiL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uCmluZGV4IGVmODcyOWYuLjRkNDAzODQgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uCisrKyBiL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uCkBAIC04NiwxMiArODYsMTYgQEAKIAogCSMgQ2hlY2sgZm9yIG1lcmN1cmlhbCBhbmQgYSBtZXJjdXJpYWwgcmVwby4KIAlpZiB0ZXN0IC1kIC5oZyAmJiBoZ2lkPWBoZyBpZCAyPi9kZXYvbnVsbGA7IHRoZW4KLQkJdGFnPWBwcmludGYgJyVzJyAiJGhnaWQiIHwgY3V0IC1zIC1kJyAnIC1mMmAKLQotCQkjIERvIHdlIGhhdmUgYW4gdW50YWdnZWQgdmVyc2lvbj8KLQkJaWYgWyAteiAiJHRhZyIgLW8gIiR0YWciID0gdGlwIF07IHRoZW4KLQkJCWlkPWBwcmludGYgJyVzJyAiJGhnaWQiIHwgc2VkICdzL1srIF0uKi8vJ2AKKwkJIyBEbyB3ZSBoYXZlIGFuIHRhZ2dlZCB2ZXJzaW9uPyAgSWYgc28sIGxhdGVzdHRhZ2Rpc3RhbmNlID09IDEKKwkJaWYgWyAiYGhnIGxvZyAtciAuIC0tdGVtcGxhdGUgJ3tsYXRlc3R0YWdkaXN0YW5jZX0nYCIgPT0gIjEiIF07IHRoZW4KKwkJCWlkPWBoZyBsb2cgLXIgLiAtLXRlbXBsYXRlICd7bGF0ZXN0dGFnfSdgCiAJCQlwcmludGYgJyVzJXMnIC1oZyAiJGlkIgorCQllbHNlCisJCQl0YWc9YHByaW50ZiAnJXMnICIkaGdpZCIgfCBjdXQgLWQnICcgLWYyYAorCQkJaWYgWyAteiAiJHRhZyIgLW8gIiR0YWciID0gdGlwIF07IHRoZW4KKwkJCQlpZD1gcHJpbnRmICclcycgIiRoZ2lkIiB8IHNlZCAncy9bKyBdLiovLydgCisJCQkJcHJpbnRmICclcyVzJyAtaGcgIiRpZCIKKwkJCWZpCiAJCWZpCiAKIAkJIyBBcmUgdGhlcmUgdW5jb21taXR0ZWQgY2hhbmdlcz8KZGlmZiAtLWdpdCBhL3NjcmlwdHMvdGFncy5zaCBiL3NjcmlwdHMvdGFncy5zaAppbmRleCA5MmZkYzQ1Li5iZDYxODVkIDEwMDc1NQotLS0gYS9zY3JpcHRzL3RhZ3Muc2gKKysrIGIvc2NyaXB0cy90YWdzLnNoCkBAIC0xMTQsNiArMTE0LDExIEBACiAJY3Njb3BlIC1iIC1mIGNzY29wZS5vdXQKIH0KIAorZG9ndGFncygpCit7CisJYWxsX3NvdXJjZXMgfCBndGFncyAtZiAtCit9CisKIGV4dWJlcmFudCgpCiB7CiAJYWxsX3NvdXJjZXMgfCB4YXJncyAkMSAtYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xODcsNiArMTkyLDEwIEBACiAJCWRvY3Njb3BlCiAJCTs7CiAKKwkiZ3RhZ3MiKQorCQlkb2d0YWdzCisJCTs7CisKIAkidGFncyIpCiAJCXJtIC1mIHRhZ3MKIAkJeHRhZ3MgY3RhZ3MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvdW5pZmRlZi5jIGIvc2NyaXB0cy91bmlmZGVmLmMKaW5kZXggNDRkMzk3OC4uNzQ5M2MwZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy91bmlmZGVmLmMKKysrIGIvc2NyaXB0cy91bmlmZGVmLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAyIC0gMjAwOSBUb255IEZpbmNoIDxkb3RAZG90YXQuYXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgLSAyMDExIFRvbnkgRmluY2ggPGRvdEBkb3RhdC5hdD4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMjMgKzI0LDE0IEBACiAgKi8KIAogLyoKKyAqIHVuaWZkZWYgLSByZW1vdmUgaWZkZWYnZWQgbGluZXMKKyAqCiAgKiBUaGlzIGNvZGUgd2FzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieSBEYXZlIFlvc3QuCiAgKiBJdCB3YXMgcmV3cml0dGVuIHRvIHN1cHBvcnQgQU5TSSBDIGJ5IFRvbnkgRmluY2guIFRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgKiBvZiB1bmlmZGVmIGNhcnJpZWQgdGhlIDQtY2xhdXNlIEJTRCBjb3B5cmlnaHQgbGljZW5jZS4gTm9uZSBvZiBpdHMgY29kZQogICogcmVtYWlucyBpbiB0aGlzIHZlcnNpb24gKHRob3VnaCBzb21lIG9mIHRoZSBuYW1lcyByZW1haW4pIHNvIGl0IG5vdwogICogY2FycmllcyBhIG1vcmUgbGliZXJhbCBsaWNlbmNlLgogICoKLSAqIFRoZSBsYXRlc3QgdmVyc2lvbiBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vZG90YXQuYXQvcHJvZy91bmlmZGVmCi0gKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb3B5cmlnaHRbXSA9IHsKLSAgICAiQCgjKSBDb3B5cmlnaHQgKGMpIDIwMDIgLSAyMDA5IFRvbnkgRmluY2ggPGRvdEBkb3RhdC5hdD5cbiIsCi0gICAgIiRkb3RhdDogdW5pZmRlZi91bmlmZGVmLmMsdiAxLjE5MCAyMDA5LzExLzI3IDE3OjIxOjI2IGZhbmYyIEV4cCAkIiwKLX07Ci0KLS8qCi0gKiB1bmlmZGVmIC0gcmVtb3ZlIGlmZGVmJ2VkIGxpbmVzCi0gKgogICogIFdpc2hsaXN0OgogICogICAgICBwcm92aWRlIGFuIG9wdGlvbiB3aGljaCB3aWxsIGFwcGVuZCB0aGUgbmFtZSBvZiB0aGUKICAqICAgICAgICBhcHByb3ByaWF0ZSBzeW1ib2wgYWZ0ZXIgI2Vsc2UncyBhbmQgI2VuZGlmJ3MKQEAgLTQ4LDEyICszOSwxNiBAQAogICogICAgICAgICNlbHNlJ3MgYW5kICNlbmRpZidzIHRvIHNlZSB0aGF0IHRoZXkgbWF0Y2ggdGhlaXIKICAqICAgICAgICBjb3JyZXNwb25kaW5nICNpZmRlZiBvciAjaWZuZGVmCiAgKgotICogICBUaGUgZmlyc3QgdHdvIGl0ZW1zIGFib3ZlIHJlcXVpcmUgYmV0dGVyIGJ1ZmZlciBoYW5kbGluZywgd2hpY2ggd291bGQKLSAqICAgICBhbHNvIG1ha2UgaXQgcG9zc2libGUgdG8gaGFuZGxlIGFsbCAiZG9kZ3kiIGRpcmVjdGl2ZXMgY29ycmVjdGx5LgorICogICBUaGVzZSByZXF1aXJlIGJldHRlciBidWZmZXIgaGFuZGxpbmcsIHdoaWNoIHdvdWxkIGFsc28gbWFrZQorICogICBpdCBwb3NzaWJsZSB0byBoYW5kbGUgYWxsICJkb2RneSIgZGlyZWN0aXZlcyBjb3JyZWN0bHkuCiAgKi8KIAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC02MSw2ICs1NiwxMiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCitjb25zdCBjaGFyIGNvcHlyaWdodFtdID0KKyAgICAiQCgjKSAkVmVyc2lvbjogdW5pZmRlZi0yLjUgJFxuIgorICAgICJAKCMpICRBdXRob3I6IFRvbnkgRmluY2ggKGRvdEBkb3RhdC5hdCkgJFxuIgorICAgICJAKCMpICRVUkw6IGh0dHA6Ly9kb3RhdC5hdC9wcm9nL3VuaWZkZWYgJFxuIgorOworCiAvKiB0eXBlcyBvZiBpbnB1dCBsaW5lczogKi8KIHR5cGVkZWYgZW51bSB7CiAJTFRfVFJVRUksCQkvKiBhIHRydWUgI2lmIHdpdGggaWdub3JlIGZsYWcgKi8KQEAgLTE1Myw2ICsxNTQsMTEgQEAKICNkZWZpbmUJRURJVFNMT1AgICAgICAgIDEwCiAKIC8qCisgKiBGb3IgdGVtcG9yYXJ5IGZpbGVuYW1lcworICovCisjZGVmaW5lIFRFTVBMQVRFICAgICAgICAidW5pZmRlZi5YWFhYWFgiCisKKy8qCiAgKiBHbG9iYWxzLgogICovCiAKQEAgLTE2NSw2ICsxNzEsNyBAQAogc3RhdGljIGJvb2wgICAgICAgICAgICAga2lsbGNvbnN0czsJCS8qIC1rOiBldmFsIGNvbnN0YW50ICNpZnMgKi8KIHN0YXRpYyBib29sICAgICAgICAgICAgIGxubnVtOwkJCS8qIC1uOiBhZGQgI2xpbmUgZGlyZWN0aXZlcyAqLwogc3RhdGljIGJvb2wgICAgICAgICAgICAgc3ltbGlzdDsJCS8qIC1zOiBvdXRwdXQgc3ltYm9sIGxpc3QgKi8KK3N0YXRpYyBib29sICAgICAgICAgICAgIHN5bWRlcHRoOwkJLyogLVM6IG91dHB1dCBzeW1ib2wgZGVwdGggKi8KIHN0YXRpYyBib29sICAgICAgICAgICAgIHRleHQ7CQkJLyogLXQ6IHRoaXMgaXMgYSB0ZXh0IGZpbGUgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgICAgICAqc3ltbmFtZVtNQVhTWU1TXTsJLyogc3ltYm9sIG5hbWUgKi8KQEAgLTE3NSwxMCArMTgyLDE4IEBACiBzdGF0aWMgRklMRSAgICAgICAgICAgICppbnB1dDsJCQkvKiBpbnB1dCBmaWxlIHBvaW50ZXIgKi8KIHN0YXRpYyBjb25zdCBjaGFyICAgICAgKmZpbGVuYW1lOwkJLyogaW5wdXQgZmlsZSBuYW1lICovCiBzdGF0aWMgaW50ICAgICAgICAgICAgICBsaW5lbnVtOwkJLyogY3VycmVudCBsaW5lIG51bWJlciAqLworc3RhdGljIEZJTEUgICAgICAgICAgICAqb3V0cHV0OwkJCS8qIG91dHB1dCBmaWxlIHBvaW50ZXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyICAgICAgKm9maWxlbmFtZTsJCS8qIG91dHB1dCBmaWxlIG5hbWUgKi8KK3N0YXRpYyBib29sICAgICAgICAgICAgIG92ZXJ3cml0aW5nOwkJLyogb3V0cHV0IG92ZXJ3cml0ZXMgaW5wdXQgKi8KK3N0YXRpYyBjaGFyICAgICAgICAgICAgIHRlbXBuYW1lW0ZJTEVOQU1FX01BWF07CS8qIHVzZWQgd2hlbiBvdmVyd3JpdGluZyAqLwogCiBzdGF0aWMgY2hhciAgICAgICAgICAgICB0bGluZVtNQVhMSU5FK0VESVRTTE9QXTsvKiBpbnB1dCBidWZmZXIgcGx1cyBzcGFjZSAqLwogc3RhdGljIGNoYXIgICAgICAgICAgICAqa2V5d29yZDsJCS8qIHVzZWQgZm9yIGVkaXRpbmcgI2VsaWYncyAqLwogCitzdGF0aWMgY29uc3QgY2hhciAgICAgICpuZXdsaW5lOwkJLyogaW5wdXQgZmlsZSBmb3JtYXQgKi8KK3N0YXRpYyBjb25zdCBjaGFyICAgICAgIG5ld2xpbmVfdW5peFtdID0gIlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyICAgICAgIG5ld2xpbmVfY3JsZltdID0gIlxyXG4iOworCiBzdGF0aWMgQ29tbWVudF9zdGF0ZSAgICBpbmNvbW1lbnQ7CQkvKiBjb21tZW50IHBhcnNlciBzdGF0ZSAqLwogc3RhdGljIExpbmVfc3RhdGUgICAgICAgbGluZXN0YXRlOwkJLyogI2lmIGxpbmUgcGFyc2VyIHN0YXRlICovCiBzdGF0aWMgSWZzdGF0ZSAgICAgICAgICBpZnN0YXRlW01BWERFUFRIXTsJLyogI2lmIHByb2Nlc3NvciBzdGF0ZSAqLwpAQCAtMTg5LDEwICsyMDQsMTMgQEAKIHN0YXRpYyB1bnNpZ25lZCAgICAgICAgIGJsYW5rY291bnQ7CQkvKiBjb3VudCBvZiBibGFuayBsaW5lcyAqLwogc3RhdGljIHVuc2lnbmVkICAgICAgICAgYmxhbmttYXg7CQkvKiBtYXhpbXVtIHJlY2VudCBibGFua2NvdW50ICovCiBzdGF0aWMgYm9vbCAgICAgICAgICAgICBjb25zdGV4cHI7CQkvKiBjb25zdGFudCAjaWYgZXhwcmVzc2lvbiAqLworc3RhdGljIGJvb2wgICAgICAgICAgICAgemVyb3N5bXMgPSB0cnVlOwkvKiB0byBmb3JtYXQgc3ltZGVwdGggb3V0cHV0ICovCitzdGF0aWMgYm9vbCAgICAgICAgICAgICBmaXJzdHN5bTsJCS8qIGRpdHRvICovCiAKIHN0YXRpYyBpbnQgICAgICAgICAgICAgIGV4aXRzdGF0OwkJLyogcHJvZ3JhbSBleGl0IHN0YXR1cyAqLwogCiBzdGF0aWMgdm9pZCAgICAgICAgICAgICBhZGRzeW0oYm9vbCwgYm9vbCwgY2hhciAqKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgIGNsb3Nlb3V0KHZvaWQpOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgZGVidWcoY29uc3QgY2hhciAqLCAuLi4pOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgZG9uZSh2b2lkKTsKIHN0YXRpYyB2b2lkICAgICAgICAgICAgIGVycm9yKGNvbnN0IGNoYXIgKik7CkBAIC0yMTIsNiArMjMwLDcgQEAKIHN0YXRpYyBpbnQgICAgICAgICAgICAgIHN0cmxjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICB1bm5lc3Qodm9pZCk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICB1c2FnZSh2b2lkKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgIHZlcnNpb24odm9pZCk7CiAKICNkZWZpbmUgZW5kc3ltKGMpICghaXNhbG51bSgodW5zaWduZWQgY2hhciljKSAmJiBjICE9ICdfJykKIApAQCAtMjIzLDcgKzI0Miw3IEBACiB7CiAJaW50IG9wdDsKIAotCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJpOkQ6VTpJOkJiY2RlS2tsbnN0IikpICE9IC0xKQorCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJpOkQ6VTpJOm86YkJjZGVLa2xuc1N0ViIpKSAhPSAtMSkKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAnaSc6IC8qIHRyZWF0IHN0dWZmIGNvbnRyb2xsZWQgYnkgdGhlc2Ugc3ltYm9scyBhcyB0ZXh0ICovCiAJCQkvKgpAQCAtMjQ1LDE2ICsyNjQsMTUgQEAKIAkJY2FzZSAnVSc6IC8qIHVuZGVmIGEgc3ltYm9sICovCiAJCQlhZGRzeW0oZmFsc2UsIGZhbHNlLCBvcHRhcmcpOwogCQkJYnJlYWs7Ci0JCWNhc2UgJ0knOgotCQkJLyogbm8tb3AgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBjcHAgKi8KLQkJCWJyZWFrOwotCQljYXNlICdCJzogLyogY29tcHJlc3MgYmxhbmsgbGluZXMgYXJvdW5kIHJlbW92ZWQgc2VjdGlvbiAqLwotCQkJY29tcGJsYW5rID0gdHJ1ZTsKKwkJY2FzZSAnSSc6IC8qIG5vLW9wIGZvciBjb21wYXRpYmlsaXR5IHdpdGggY3BwICovCiAJCQlicmVhazsKIAkJY2FzZSAnYic6IC8qIGJsYW5rIGRlbGV0ZWQgbGluZXMgaW5zdGVhZCBvZiBvbWl0dGluZyB0aGVtICovCiAJCWNhc2UgJ2wnOiAvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwogCQkJbG5ibGFuayA9IHRydWU7CiAJCQlicmVhazsKKwkJY2FzZSAnQic6IC8qIGNvbXByZXNzIGJsYW5rIGxpbmVzIGFyb3VuZCByZW1vdmVkIHNlY3Rpb24gKi8KKwkJCWNvbXBibGFuayA9IHRydWU7CisJCQlicmVhazsKIAkJY2FzZSAnYyc6IC8qIHRyZWF0IC1EIGFzIC1VIGFuZCB2aWNlIHZlcnNhICovCiAJCQljb21wbGVtZW50ID0gdHJ1ZTsKIAkJCWJyZWFrOwpAQCAtMjczLDEyICsyOTEsMjAgQEAKIAkJY2FzZSAnbic6IC8qIGFkZCAjbGluZSBkaXJlY3RpdmUgYWZ0ZXIgZGVsZXRlZCBsaW5lcyAqLwogCQkJbG5udW0gPSB0cnVlOwogCQkJYnJlYWs7CisJCWNhc2UgJ28nOiAvKiBvdXRwdXQgdG8gYSBmaWxlICovCisJCQlvZmlsZW5hbWUgPSBvcHRhcmc7CisJCQlicmVhazsKIAkJY2FzZSAncyc6IC8qIG9ubHkgb3V0cHV0IGxpc3Qgb2Ygc3ltYm9scyB0aGF0IGNvbnRyb2wgI2lmcyAqLwogCQkJc3ltbGlzdCA9IHRydWU7CiAJCQlicmVhazsKKwkJY2FzZSAnUyc6IC8qIGxpc3Qgc3ltYm9scyB3aXRoIHRoZWlyIG5lc3RpbmcgZGVwdGggKi8KKwkJCXN5bWxpc3QgPSBzeW1kZXB0aCA9IHRydWU7CisJCQlicmVhazsKIAkJY2FzZSAndCc6IC8qIGRvbid0IHBhcnNlIEMgY29tbWVudHMgKi8KIAkJCXRleHQgPSB0cnVlOwogCQkJYnJlYWs7CisJCWNhc2UgJ1YnOiAvKiBwcmludCB2ZXJzaW9uICovCisJCQl2ZXJzaW9uKCk7CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwogCQl9CkBAIC0yOTAsMjEgKzMxNiw2OCBAQAogCQllcnJ4KDIsICJjYW4gb25seSBkbyBvbmUgZmlsZSIpOwogCX0gZWxzZSBpZiAoYXJnYyA9PSAxICYmIHN0cmNtcCgqYXJndiwgIi0iKSAhPSAwKSB7CiAJCWZpbGVuYW1lID0gKmFyZ3Y7Ci0JCWlucHV0ID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJCWlucHV0ID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpOwogCQlpZiAoaW5wdXQgPT0gTlVMTCkKIAkJCWVycigyLCAiY2FuJ3Qgb3BlbiAlcyIsIGZpbGVuYW1lKTsKIAl9IGVsc2UgewogCQlmaWxlbmFtZSA9ICJbc3RkaW5dIjsKIAkJaW5wdXQgPSBzdGRpbjsKIAl9CisJaWYgKG9maWxlbmFtZSA9PSBOVUxMKSB7CisJCW9maWxlbmFtZSA9ICJbc3Rkb3V0XSI7CisJCW91dHB1dCA9IHN0ZG91dDsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RhdCBpc3QsIG9zdDsKKwkJaWYgKHN0YXQob2ZpbGVuYW1lLCAmb3N0KSA9PSAwICYmCisJCSAgICBmc3RhdChmaWxlbm8oaW5wdXQpLCAmaXN0KSA9PSAwKQorCQkJb3ZlcndyaXRpbmcgPSAoaXN0LnN0X2RldiA9PSBvc3Quc3RfZGV2CisJCQkJICAgICYmIGlzdC5zdF9pbm8gPT0gb3N0LnN0X2lubyk7CisJCWlmIChvdmVyd3JpdGluZykgeworCQkJY29uc3QgY2hhciAqZGlyc2VwOworCQkJaW50IG9mZDsKKworCQkJZGlyc2VwID0gc3RycmNocihvZmlsZW5hbWUsICcvJyk7CisJCQlpZiAoZGlyc2VwICE9IE5VTEwpCisJCQkJc25wcmludGYodGVtcG5hbWUsIHNpemVvZih0ZW1wbmFtZSksCisJCQkJICAgICIlLipzLyIgVEVNUExBVEUsCisJCQkJICAgIChpbnQpKGRpcnNlcCAtIG9maWxlbmFtZSksIG9maWxlbmFtZSk7CisJCQllbHNlCisJCQkJc25wcmludGYodGVtcG5hbWUsIHNpemVvZih0ZW1wbmFtZSksCisJCQkJICAgIFRFTVBMQVRFKTsKKwkJCW9mZCA9IG1rc3RlbXAodGVtcG5hbWUpOworCQkJaWYgKG9mZCAhPSAtMSkKKwkJCQlvdXRwdXQgPSBmZG9wZW4ob2ZkLCAid2IrIik7CisJCQlpZiAob3V0cHV0ID09IE5VTEwpCisJCQkJZXJyKDIsICJjYW4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiKTsKKwkJCWZjaG1vZChvZmQsIGlzdC5zdF9tb2RlICYgKFNfSVJXWFV8U19JUldYR3xTX0lSV1hPKSk7CisJCX0gZWxzZSB7CisJCQlvdXRwdXQgPSBmb3BlbihvZmlsZW5hbWUsICJ3YiIpOworCQkJaWYgKG91dHB1dCA9PSBOVUxMKQorCQkJCWVycigyLCAiY2FuJ3Qgb3BlbiAlcyIsIG9maWxlbmFtZSk7CisJCX0KKwl9CiAJcHJvY2VzcygpOwogCWFib3J0KCk7IC8qIGJ1ZyAqLwogfQogCiBzdGF0aWMgdm9pZAordmVyc2lvbih2b2lkKQoreworCWNvbnN0IGNoYXIgKmMgPSBjb3B5cmlnaHQ7CisJZm9yICg7OykgeworCQl3aGlsZSAoKisrYyAhPSAnJCcpCisJCQlpZiAoKmMgPT0gJ1wwJykKKwkJCQlleGl0KDApOworCQl3aGlsZSAoKisrYyAhPSAnJCcpCisJCQlwdXRjKCpjLCBzdGRlcnIpOworCQlwdXRjKCdcbicsIHN0ZGVycik7CisJfQorfQorCitzdGF0aWMgdm9pZAogdXNhZ2Uodm9pZCkKIHsKLQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiB1bmlmZGVmIFstQmJjZGVLa25zdF0gWy1JcGF0aF0iCisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogdW5pZmRlZiBbLWJCY2RlS2tuc1N0Vl0gWy1JcGF0aF0iCiAJICAgICIgWy1Ec3ltWz12YWxdXSBbLVVzeW1dIFstaURzeW1bPXZhbF1dIFstaVVzeW1dIC4uLiBbZmlsZV1cbiIpOwogCWV4aXQoMik7CiB9CkBAIC0zMjIsNyArMzk1LDggQEAKICAqIFdoZW4gd2UgaGF2ZSBwcm9jZXNzZWQgYSBncm91cCB0aGF0IHN0YXJ0cyBvZmYgd2l0aCBhIGtub3duLWZhbHNlCiAgKiAjaWYvI2VsaWYgc2VxdWVuY2UgKHdoaWNoIGhhcyB0aGVyZWZvcmUgYmVlbiBkZWxldGVkKSBmb2xsb3dlZCBieSBhCiAgKiAjZWxpZiB0aGF0IHdlIGRvbid0IHVuZGVyc3RhbmQgYW5kIHRoZXJlZm9yZSBtdXN0IGtlZXAsIHdlIGVkaXQgdGhlCi0gKiBsYXR0ZXIgaW50byBhICNpZiB0byBrZWVwIHRoZSBuZXN0aW5nIGNvcnJlY3QuCisgKiBsYXR0ZXIgaW50byBhICNpZiB0byBrZWVwIHRoZSBuZXN0aW5nIGNvcnJlY3QuIFdlIHVzZSBzdHJuY3B5KCkgdG8KKyAqIG92ZXJ3cml0ZSB0aGUgNCBieXRlIHRva2VuICJlbGlmIiB3aXRoICJpZiAgIiB3aXRob3V0IGEgJ1wwJyBieXRlLgogICoKICAqIFdoZW4gd2UgZmluZCBhIHRydWUgI2VsaWYgaW4gYSBncm91cCwgdGhlIGZvbGxvd2luZyBibG9jayB3aWxsCiAgKiBhbHdheXMgYmUga2VwdCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHNlcXVlbmNlIGFmdGVyIHRoZSBuZXh0ICNlbGlmIG9yCkBAIC0zNzUsMTEgKzQ0OSwxMSBAQAogc3RhdGljIHZvaWQgSWRyb3AgKHZvaWQpIHsgRmRyb3AoKTsgIGlnbm9yZW9uKCk7IH0KIHN0YXRpYyB2b2lkIEl0cnVlICh2b2lkKSB7IEZ0cnVlKCk7ICBpZ25vcmVvbigpOyB9CiBzdGF0aWMgdm9pZCBJZmFsc2Uodm9pZCkgeyBGZmFsc2UoKTsgaWdub3Jlb24oKTsgfQotLyogZWRpdCB0aGlzIGxpbmUgKi8KKy8qIG1vZGlmeSB0aGlzIGxpbmUgKi8KIHN0YXRpYyB2b2lkIE1wYXNzICh2b2lkKSB7IHN0cm5jcHkoa2V5d29yZCwgImlmICAiLCA0KTsgUGVsaWYoKTsgfQotc3RhdGljIHZvaWQgTXRydWUgKHZvaWQpIHsga2V5d29yZGVkaXQoImVsc2VcbiIpOyAgc3RhdGUoSVNfVFJVRV9NSURETEUpOyB9Ci1zdGF0aWMgdm9pZCBNZWxpZiAodm9pZCkgeyBrZXl3b3JkZWRpdCgiZW5kaWZcbiIpOyBzdGF0ZShJU19GQUxTRV9UUkFJTEVSKTsgfQotc3RhdGljIHZvaWQgTWVsc2UgKHZvaWQpIHsga2V5d29yZGVkaXQoImVuZGlmXG4iKTsgc3RhdGUoSVNfRkFMU0VfRUxTRSk7IH0KK3N0YXRpYyB2b2lkIE10cnVlICh2b2lkKSB7IGtleXdvcmRlZGl0KCJlbHNlIik7ICBzdGF0ZShJU19UUlVFX01JRERMRSk7IH0KK3N0YXRpYyB2b2lkIE1lbGlmICh2b2lkKSB7IGtleXdvcmRlZGl0KCJlbmRpZiIpOyBzdGF0ZShJU19GQUxTRV9UUkFJTEVSKTsgfQorc3RhdGljIHZvaWQgTWVsc2UgKHZvaWQpIHsga2V5d29yZGVkaXQoImVuZGlmIik7IHN0YXRlKElTX0ZBTFNFX0VMU0UpOyB9CiAKIHN0YXRpYyBzdGF0ZV9mbiAqIGNvbnN0IHRyYW5zX3RhYmxlW0lTX0NPVU5UXVtMVF9DT1VOVF0gPSB7CiAvKiBJU19PVVRTSURFICovCkBAIC00MzEsMTMgKzUwNSw2IEBACiAgKiBTdGF0ZSBtYWNoaW5lIHV0aWxpdHkgZnVuY3Rpb25zCiAgKi8KIHN0YXRpYyB2b2lkCi1kb25lKHZvaWQpCi17Ci0JaWYgKGluY29tbWVudCkKLQkJZXJyb3IoIkVPRiBpbiBjb21tZW50Iik7Ci0JZXhpdChleGl0c3RhdCk7Ci19Ci1zdGF0aWMgdm9pZAogaWdub3Jlb2ZmKHZvaWQpCiB7CiAJaWYgKGRlcHRoID09IDApCkBAIC00NTIsMTQgKzUxOSw4IEBACiBzdGF0aWMgdm9pZAoga2V5d29yZGVkaXQoY29uc3QgY2hhciAqcmVwbGFjZW1lbnQpCiB7Ci0Jc2l6ZV90IHNpemUgPSB0bGluZSArIHNpemVvZih0bGluZSkgLSBrZXl3b3JkOwotCWNoYXIgKmRzdCA9IGtleXdvcmQ7Ci0JY29uc3QgY2hhciAqc3JjID0gcmVwbGFjZW1lbnQ7Ci0JaWYgKHNpemUgIT0gMCkgewotCQl3aGlsZSAoKC0tc2l6ZSAhPSAwKSAmJiAoKnNyYyAhPSAnXDAnKSkKLQkJCSpkc3QrKyA9ICpzcmMrKzsKLQkJKmRzdCA9ICdcMCc7Ci0JfQorCXNucHJpbnRmKGtleXdvcmQsIHRsaW5lICsgc2l6ZW9mKHRsaW5lKSAtIGtleXdvcmQsCisJICAgICIlcyVzIiwgcmVwbGFjZW1lbnQsIG5ld2xpbmUpOwogCXByaW50KCk7CiB9CiBzdGF0aWMgdm9pZApAQCAtNDk0LDI0ICs1NTUsMjYgQEAKIAlpZiAoc3ltbGlzdCkKIAkJcmV0dXJuOwogCWlmIChrZWVwIF4gY29tcGxlbWVudCkgewotCQlib29sIGJsYW5rbGluZSA9IHRsaW5lW3N0cnNwbih0bGluZSwgIiBcdFxuIildID09ICdcMCc7CisJCWJvb2wgYmxhbmtsaW5lID0gdGxpbmVbc3Ryc3BuKHRsaW5lLCAiIFx0XHJcbiIpXSA9PSAnXDAnOwogCQlpZiAoYmxhbmtsaW5lICYmIGNvbXBibGFuayAmJiBibGFua2NvdW50ICE9IGJsYW5rbWF4KSB7CiAJCQlkZWxjb3VudCArPSAxOwogCQkJYmxhbmtjb3VudCArPSAxOwogCQl9IGVsc2UgewogCQkJaWYgKGxubnVtICYmIGRlbGNvdW50ID4gMCkKLQkJCQlwcmludGYoIiNsaW5lICVkXG4iLCBsaW5lbnVtKTsKLQkJCWZwdXRzKHRsaW5lLCBzdGRvdXQpOworCQkJCXByaW50ZigiI2xpbmUgJWQlcyIsIGxpbmVudW0sIG5ld2xpbmUpOworCQkJZnB1dHModGxpbmUsIG91dHB1dCk7CiAJCQlkZWxjb3VudCA9IDA7CiAJCQlibGFua21heCA9IGJsYW5rY291bnQgPSBibGFua2xpbmUgPyBibGFua2NvdW50ICsgMSA6IDA7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAobG5ibGFuaykKLQkJCXB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJCWZwdXRzKG5ld2xpbmUsIG91dHB1dCk7CiAJCWV4aXRzdGF0ID0gMTsKIAkJZGVsY291bnQgKz0gMTsKIAkJYmxhbmtjb3VudCA9IDA7CiAJfQorCWlmIChkZWJ1Z2dpbmcpCisJCWZmbHVzaChvdXRwdXQpOwogfQogCiAvKgpAQCAtNTIwLDIyICs1ODMsNTUgQEAKIHN0YXRpYyB2b2lkCiBwcm9jZXNzKHZvaWQpCiB7Ci0JTGluZXR5cGUgbGluZXZhbDsKLQogCS8qIFdoZW4gY29tcHJlc3NpbmcgYmxhbmsgbGluZXMsIGFjdCBhcyBpZiB0aGUgZmlsZQogCSAgIGlzIHByZWNlZGVkIGJ5IGEgbGFyZ2UgbnVtYmVyIG9mIGJsYW5rIGxpbmVzLiAqLwogCWJsYW5rbWF4ID0gYmxhbmtjb3VudCA9IDEwMDA7CiAJZm9yICg7OykgewotCQlsaW5lbnVtKys7Ci0JCWxpbmV2YWwgPSBwYXJzZWxpbmUoKTsKKwkJTGluZXR5cGUgbGluZXZhbCA9IHBhcnNlbGluZSgpOwogCQl0cmFuc190YWJsZVtpZnN0YXRlW2RlcHRoXV1bbGluZXZhbF0oKTsKLQkJZGVidWcoInByb2Nlc3MgJXMgLT4gJXMgZGVwdGggJWQiLAotCQkgICAgbGluZXR5cGVfbmFtZVtsaW5ldmFsXSwKKwkJZGVidWcoInByb2Nlc3MgbGluZSAlZCAlcyAtPiAlcyBkZXB0aCAlZCIsCisJCSAgICBsaW5lbnVtLCBsaW5ldHlwZV9uYW1lW2xpbmV2YWxdLAogCQkgICAgaWZzdGF0ZV9uYW1lW2lmc3RhdGVbZGVwdGhdXSwgZGVwdGgpOwogCX0KIH0KIAogLyoKKyAqIEZsdXNoIHRoZSBvdXRwdXQgYW5kIGhhbmRsZSBlcnJvcnMuCisgKi8KK3N0YXRpYyB2b2lkCitjbG9zZW91dCh2b2lkKQoreworCWlmIChzeW1kZXB0aCAmJiAhemVyb3N5bXMpCisJCXByaW50ZigiXG4iKTsKKwlpZiAoZmNsb3NlKG91dHB1dCkgPT0gRU9GKSB7CisJCXdhcm4oImNvdWxkbid0IHdyaXRlIHRvICVzIiwgb2ZpbGVuYW1lKTsKKwkJaWYgKG92ZXJ3cml0aW5nKSB7CisJCQl1bmxpbmsodGVtcG5hbWUpOworCQkJZXJyeCgyLCAiJXMgdW5jaGFuZ2VkIiwgZmlsZW5hbWUpOworCQl9IGVsc2UgeworCQkJZXhpdCgyKTsKKwkJfQorCX0KK30KKworLyoKKyAqIENsZWFuIHVwIGFuZCBleGl0LgorICovCitzdGF0aWMgdm9pZAorZG9uZSh2b2lkKQoreworCWlmIChpbmNvbW1lbnQpCisJCWVycm9yKCJFT0YgaW4gY29tbWVudCIpOworCWNsb3Nlb3V0KCk7CisJaWYgKG92ZXJ3cml0aW5nICYmIHJlbmFtZSh0ZW1wbmFtZSwgb2ZpbGVuYW1lKSA9PSAtMSkgeworCQl3YXJuKCJjb3VsZG4ndCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUiKTsKKwkJdW5saW5rKHRlbXBuYW1lKTsKKwkJZXJyeCgyLCAiJXMgdW5jaGFuZ2VkIiwgb2ZpbGVuYW1lKTsKKwl9CisJZXhpdChleGl0c3RhdCk7Cit9CisKKy8qCiAgKiBQYXJzZSBhIGxpbmUgYW5kIGRldGVybWluZSBpdHMgdHlwZS4gV2Uga2VlcCB0aGUgcHJlcHJvY2Vzc29yIGxpbmUKICAqIHBhcnNlciBzdGF0ZSBiZXR3ZWVuIGNhbGxzIGluIHRoZSBnbG9iYWwgdmFyaWFibGUgbGluZXN0YXRlLCB3aXRoCiAgKiBoZWxwIGZyb20gc2tpcGNvbW1lbnQoKS4KQEAgLTU0OSwxNCArNjQ1LDIyIEBACiAJTGluZXR5cGUgcmV0dmFsOwogCUNvbW1lbnRfc3RhdGUgd2FzY29tbWVudDsKIAorCWxpbmVudW0rKzsKIAlpZiAoZmdldHModGxpbmUsIE1BWExJTkUsIGlucHV0KSA9PSBOVUxMKQogCQlyZXR1cm4gKExUX0VPRik7CisJaWYgKG5ld2xpbmUgPT0gTlVMTCkgeworCQlpZiAoc3RycmNocih0bGluZSwgJ1xuJykgPT0gc3RycmNocih0bGluZSwgJ1xyJykgKyAxKQorCQkJbmV3bGluZSA9IG5ld2xpbmVfY3JsZjsKKwkJZWxzZQorCQkJbmV3bGluZSA9IG5ld2xpbmVfdW5peDsKKwl9CiAJcmV0dmFsID0gTFRfUExBSU47CiAJd2FzY29tbWVudCA9IGluY29tbWVudDsKIAljcCA9IHNraXBjb21tZW50KHRsaW5lKTsKIAlpZiAobGluZXN0YXRlID09IExTX1NUQVJUKSB7CiAJCWlmICgqY3AgPT0gJyMnKSB7CiAJCQlsaW5lc3RhdGUgPSBMU19IQVNIOworCQkJZmlyc3RzeW0gPSB0cnVlOwogCQkJY3AgPSBza2lwY29tbWVudChjcCArIDEpOwogCQl9IGVsc2UgaWYgKCpjcCAhPSAnXDAnKQogCQkJbGluZXN0YXRlID0gTFNfRElSVFk7CkBAIC01NjYsNyArNjcwLDggQEAKIAkJY3AgPSBza2lwc3ltKGNwKTsKIAkJa3dsZW4gPSBjcCAtIGtleXdvcmQ7CiAJCS8qIG5vIHdheSBjYW4gd2UgZGVhbCB3aXRoIGEgY29udGludWF0aW9uIGluc2lkZSBhIGtleXdvcmQgKi8KLQkJaWYgKHN0cm5jbXAoY3AsICJcXFxuIiwgMikgPT0gMCkKKwkJaWYgKHN0cm5jbXAoY3AsICJcXFxyXG4iLCAzKSA9PSAwIHx8CisJCSAgICBzdHJuY21wKGNwLCAiXFxcbiIsIDIpID09IDApCiAJCQlFaW9jY2MoKTsKIAkJaWYgKHN0cmxjbXAoImlmZGVmIiwga2V5d29yZCwga3dsZW4pID09IDAgfHwKIAkJICAgIHN0cmxjbXAoImlmbmRlZiIsIGtleXdvcmQsIGt3bGVuKSA9PSAwKSB7CkBAIC02MTcsOSArNzIyLDggQEAKIAkJCXNpemVfdCBsZW4gPSBjcCAtIHRsaW5lOwogCQkJaWYgKGZnZXRzKHRsaW5lICsgbGVuLCBNQVhMSU5FIC0gbGVuLCBpbnB1dCkgPT0gTlVMTCkgewogCQkJCS8qIGFwcGVuZCB0aGUgbWlzc2luZyBuZXdsaW5lICovCi0JCQkJdGxpbmVbbGVuKzBdID0gJ1xuJzsKLQkJCQl0bGluZVtsZW4rMV0gPSAnXDAnOwotCQkJCWNwKys7CisJCQkJc3RyY3B5KHRsaW5lICsgbGVuLCBuZXdsaW5lKTsKKwkJCQljcCArPSBzdHJsZW4obmV3bGluZSk7CiAJCQkJbGluZXN0YXRlID0gTFNfU1RBUlQ7CiAJCQl9IGVsc2UgewogCQkJCWxpbmVzdGF0ZSA9IExTX0RJUlRZOwpAQCAtNjMwLDcgKzczNCw3IEBACiAJCXdoaWxlICgqY3AgIT0gJ1wwJykKIAkJCWNwID0gc2tpcGNvbW1lbnQoY3AgKyAxKTsKIAl9Ci0JZGVidWcoInBhcnNlciAlcyBjb21tZW50ICVzIGxpbmUiLAorCWRlYnVnKCJwYXJzZXIgbGluZSAlZCBzdGF0ZSAlcyBjb21tZW50ICVzIGxpbmUiLCBsaW5lbnVtLAogCSAgICBjb21tZW50X25hbWVbaW5jb21tZW50XSwgbGluZXN0YXRlX25hbWVbbGluZXN0YXRlXSk7CiAJcmV0dXJuIChyZXR2YWwpOwogfQpAQCAtODc1LDExICs5NzksMTYgQEAKIAl9CiAJd2hpbGUgKCpjcCAhPSAnXDAnKQogCQkvKiBkb24ndCByZXNldCB0byBMU19TVEFSVCBhZnRlciBhIGxpbmUgY29udGludWF0aW9uICovCi0JCWlmIChzdHJuY21wKGNwLCAiXFxcbiIsIDIpID09IDApCisJCWlmIChzdHJuY21wKGNwLCAiXFxcclxuIiwgMykgPT0gMCkKKwkJCWNwICs9IDM7CisJCWVsc2UgaWYgKHN0cm5jbXAoY3AsICJcXFxuIiwgMikgPT0gMCkKIAkJCWNwICs9IDI7CiAJCWVsc2Ugc3dpdGNoIChpbmNvbW1lbnQpIHsKIAkJY2FzZSBOT19DT01NRU5UOgotCQkJaWYgKHN0cm5jbXAoY3AsICIvXFxcbiIsIDMpID09IDApIHsKKwkJCWlmIChzdHJuY21wKGNwLCAiL1xcXHJcbiIsIDQpID09IDApIHsKKwkJCQlpbmNvbW1lbnQgPSBTVEFSVElOR19DT01NRU5UOworCQkJCWNwICs9IDQ7CisJCQl9IGVsc2UgaWYgKHN0cm5jbXAoY3AsICIvXFxcbiIsIDMpID09IDApIHsKIAkJCQlpbmNvbW1lbnQgPSBTVEFSVElOR19DT01NRU5UOwogCQkJCWNwICs9IDM7CiAJCQl9IGVsc2UgaWYgKHN0cm5jbXAoY3AsICIvKiIsIDIpID09IDApIHsKQEAgLTg5OSw3ICsxMDA4LDcgQEAKIAkJCX0gZWxzZSBpZiAoc3RybmNtcChjcCwgIlxuIiwgMSkgPT0gMCkgewogCQkJCWxpbmVzdGF0ZSA9IExTX1NUQVJUOwogCQkJCWNwICs9IDE7Ci0JCQl9IGVsc2UgaWYgKHN0cmNocigiIFx0IiwgKmNwKSAhPSBOVUxMKSB7CisJCQl9IGVsc2UgaWYgKHN0cmNocigiIFxyXHQiLCAqY3ApICE9IE5VTEwpIHsKIAkJCQljcCArPSAxOwogCQkJfSBlbHNlCiAJCQkJcmV0dXJuIChjcCk7CkBAIC05MzEsNyArMTA0MCwxMCBAQAogCQkJCWNwICs9IDE7CiAJCQljb250aW51ZTsKIAkJY2FzZSBDX0NPTU1FTlQ6Ci0JCQlpZiAoc3RybmNtcChjcCwgIipcXFxuIiwgMykgPT0gMCkgeworCQkJaWYgKHN0cm5jbXAoY3AsICIqXFxcclxuIiwgNCkgPT0gMCkgeworCQkJCWluY29tbWVudCA9IEZJTklTSElOR19DT01NRU5UOworCQkJCWNwICs9IDQ7CisJCQl9IGVsc2UgaWYgKHN0cm5jbXAoY3AsICIqXFxcbiIsIDMpID09IDApIHsKIAkJCQlpbmNvbW1lbnQgPSBGSU5JU0hJTkdfQ09NTUVOVDsKIAkJCQljcCArPSAzOwogCQkJfSBlbHNlIGlmIChzdHJuY21wKGNwLCAiKi8iLCAyKSA9PSAwKSB7CkBAIC0xMDE1LDcgKzExMjcsMTMgQEAKIAlpZiAoY3AgPT0gc3RyKQogCQlyZXR1cm4gKC0xKTsKIAlpZiAoc3ltbGlzdCkgewotCQlwcmludGYoIiUuKnNcbiIsIChpbnQpKGNwLXN0ciksIHN0cik7CisJCWlmIChzeW1kZXB0aCAmJiBmaXJzdHN5bSkKKwkJCXByaW50ZigiJXMlM2QiLCB6ZXJvc3ltcyA/ICIiIDogIlxuIiwgZGVwdGgpOworCQlmaXJzdHN5bSA9IHplcm9zeW1zID0gZmFsc2U7CisJCXByaW50ZigiJXMlLipzJXMiLAorCQkgICAgc3ltZGVwdGggPyAiICIgOiAiIiwKKwkJICAgIChpbnQpKGNwLXN0ciksIHN0ciwKKwkJICAgIHN5bWRlcHRoID8gIiIgOiAiXG4iKTsKIAkJLyogd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbCAqLwogCQlyZXR1cm4gKDApOwogCX0KQEAgLTEwNTIsNyArMTE3MCw3IEBACiAJCQl2YWx1ZVtzeW1pbmRdID0gdmFsKzE7CiAJCQkqdmFsID0gJ1wwJzsKIAkJfSBlbHNlIGlmICgqdmFsID09ICdcMCcpCi0JCQl2YWx1ZVtzeW1pbmRdID0gIiI7CisJCQl2YWx1ZVtzeW1pbmRdID0gIjEiOwogCQllbHNlCiAJCQl1c2FnZSgpOwogCX0gZWxzZSB7CkBAIC0xMDYwLDYgKzExNzgsOCBAQAogCQkJdXNhZ2UoKTsKIAkJdmFsdWVbc3ltaW5kXSA9IE5VTEw7CiAJfQorCWRlYnVnKCJhZGRzeW0gJXM9JXMiLCBzeW1uYW1lW3N5bWluZF0sCisJICAgIHZhbHVlW3N5bWluZF0gPyB2YWx1ZVtzeW1pbmRdIDogInVuZGVmIik7CiB9CiAKIC8qCkBAIC0xMTAwLDUgKzEyMjAsNiBAQAogCWVsc2UKIAkJd2FybngoIiVzOiAlZDogJXMgKCNpZiBsaW5lICVkIGRlcHRoICVkKSIsCiAJCSAgICBmaWxlbmFtZSwgbGluZW51bSwgbXNnLCBzdGlmbGluZVtkZXB0aF0sIGRlcHRoKTsKKwljbG9zZW91dCgpOwogCWVycngoMiwgIm91dHB1dCBtYXkgYmUgdHJ1bmNhdGVkIik7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9sc20uYyBiL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jCmluZGV4IGQyMWE0MjcuLmFlM2E2OTggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jCisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgImluY2x1ZGUvYXBwYXJtb3IuaCIKQEAgLTEzNiwxMSArMTM3LDExIEBACiB9CiAKIHN0YXRpYyBpbnQgYXBwYXJtb3JfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAotCQkJICAgIGludCBjYXAsIGludCBhdWRpdCkKKwkJCSAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwLCBpbnQgYXVkaXQpCiB7CiAJc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGU7CiAJLyogY2FwX2NhcGFibGUgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgLUVQRVJNICovCi0JaW50IGVycm9yID0gY2FwX2NhcGFibGUodGFzaywgY3JlZCwgY2FwLCBhdWRpdCk7CisJaW50IGVycm9yID0gY2FwX2NhcGFibGUodGFzaywgY3JlZCwgbnMsIGNhcCwgYXVkaXQpOwogCWlmICghZXJyb3IpIHsKIAkJcHJvZmlsZSA9IGFhX2NyZWRfcHJvZmlsZShjcmVkKTsKIAkJaWYgKCF1bmNvbmZpbmVkKHByb2ZpbGUpKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY29tbW9uY2FwLmMgYi9zZWN1cml0eS9jb21tb25jYXAuYwppbmRleCA0OWM1N2ZkLi5mMjBlOTg0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9jb21tb25jYXAuYworKysgYi9zZWN1cml0eS9jb21tb25jYXAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcHJjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cmViaXRzLmg+CisjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KIAogLyoKICAqIElmIGEgbm9uLXJvb3QgdXNlciBleGVjdXRlcyBhIHNldHVpZC1yb290IGJpbmFyeSBpbgpAQCAtNjcsNiArNjgsNyBAQAogICogY2FwX2NhcGFibGUgLSBEZXRlcm1pbmUgd2hldGhlciBhIHRhc2sgaGFzIGEgcGFydGljdWxhciBlZmZlY3RpdmUgY2FwYWJpbGl0eQogICogQHRzazogVGhlIHRhc2sgdG8gcXVlcnkKICAqIEBjcmVkOiBUaGUgY3JlZGVudGlhbHMgdG8gdXNlCisgKiBAbnM6ICBUaGUgdXNlciBuYW1lc3BhY2UgaW4gd2hpY2ggd2UgbmVlZCB0aGUgY2FwYWJpbGl0eQogICogQGNhcDogVGhlIGNhcGFiaWxpdHkgdG8gY2hlY2sgZm9yCiAgKiBAYXVkaXQ6IFdoZXRoZXIgdG8gd3JpdGUgYW4gYXVkaXQgbWVzc2FnZSBvciBub3QKICAqCkBAIC03OCwxMCArODAsMzAgQEAKICAqIGNhcF9oYXNfY2FwYWJpbGl0eSgpIHJldHVybnMgMCB3aGVuIGEgdGFzayBoYXMgYSBjYXBhYmlsaXR5LCBidXQgdGhlCiAgKiBrZXJuZWwncyBjYXBhYmxlKCkgYW5kIGhhc19jYXBhYmlsaXR5KCkgcmV0dXJucyAxIGZvciB0aGlzIGNhc2UuCiAgKi8KLWludCBjYXBfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGludCBjYXAsCi0JCWludCBhdWRpdCkKK2ludCBjYXBfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdGFyZ19ucywgaW50IGNhcCwgaW50IGF1ZGl0KQogewotCXJldHVybiBjYXBfcmFpc2VkKGNyZWQtPmNhcF9lZmZlY3RpdmUsIGNhcCkgPyAwIDogLUVQRVJNOworCWZvciAoOzspIHsKKwkJLyogVGhlIGNyZWF0b3Igb2YgdGhlIHVzZXIgbmFtZXNwYWNlIGhhcyBhbGwgY2Fwcy4gKi8KKwkJaWYgKHRhcmdfbnMgIT0gJmluaXRfdXNlcl9ucyAmJiB0YXJnX25zLT5jcmVhdG9yID09IGNyZWQtPnVzZXIpCisJCQlyZXR1cm4gMDsKKworCQkvKiBEbyB3ZSBoYXZlIHRoZSBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzPyAqLworCQlpZiAodGFyZ19ucyA9PSBjcmVkLT51c2VyLT51c2VyX25zKQorCQkJcmV0dXJuIGNhcF9yYWlzZWQoY3JlZC0+Y2FwX2VmZmVjdGl2ZSwgY2FwKSA/IDAgOiAtRVBFUk07CisKKwkJLyogSGF2ZSB3ZSB0cmllZCBhbGwgb2YgdGhlIHBhcmVudCBuYW1lc3BhY2VzPyAqLworCQlpZiAodGFyZ19ucyA9PSAmaW5pdF91c2VyX25zKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQkvKgorCQkgKklmIHlvdSBoYXZlIGEgY2FwYWJpbGl0eSBpbiBhIHBhcmVudCB1c2VyIG5zLCB0aGVuIHlvdSBoYXZlCisJCSAqIGl0IG92ZXIgYWxsIGNoaWxkcmVuIHVzZXIgbmFtZXNwYWNlcyBhcyB3ZWxsLgorCQkgKi8KKwkJdGFyZ19ucyA9IHRhcmdfbnMtPmNyZWF0b3ItPnVzZXJfbnM7CisJfQorCisJLyogV2UgbmV2ZXIgZ2V0IGhlcmUgKi8KIH0KIAogLyoqCkBAIC0xMDUsMTggKzEyNywzMCBAQAogICogQGNoaWxkOiBUaGUgcHJvY2VzcyB0byBiZSBhY2Nlc3NlZAogICogQG1vZGU6IFRoZSBtb2RlIG9mIGF0dGFjaG1lbnQuCiAgKgorICogSWYgd2UgYXJlIGluIHRoZSBzYW1lIG9yIGFuIGFuY2VzdG9yIHVzZXJfbnMgYW5kIGhhdmUgYWxsIHRoZSB0YXJnZXQKKyAqIHRhc2sncyBjYXBhYmlsaXRpZXMsIHRoZW4gcHRyYWNlIGFjY2VzcyBpcyBhbGxvd2VkLgorICogSWYgd2UgaGF2ZSB0aGUgcHRyYWNlIGNhcGFiaWxpdHkgdG8gdGhlIHRhcmdldCB1c2VyX25zLCB0aGVuIHB0cmFjZQorICogYWNjZXNzIGlzIGFsbG93ZWQuCisgKiBFbHNlIGRlbmllZC4KKyAqCiAgKiBEZXRlcm1pbmUgd2hldGhlciBhIHByb2Nlc3MgbWF5IGFjY2VzcyBhbm90aGVyLCByZXR1cm5pbmcgMCBpZiBwZXJtaXNzaW9uCiAgKiBncmFudGVkLCAtdmUgaWYgZGVuaWVkLgogICovCiBpbnQgY2FwX3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpCiB7CiAJaW50IHJldCA9IDA7CisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsICpjaGlsZF9jcmVkOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWlmICghY2FwX2lzc3Vic2V0KF9fdGFza19jcmVkKGNoaWxkKS0+Y2FwX3Blcm1pdHRlZCwKLQkJCSAgY3VycmVudF9jcmVkKCktPmNhcF9wZXJtaXR0ZWQpICYmCi0JICAgICFjYXBhYmxlKENBUF9TWVNfUFRSQUNFKSkKLQkJcmV0ID0gLUVQRVJNOworCWNyZWQgPSBjdXJyZW50X2NyZWQoKTsKKwljaGlsZF9jcmVkID0gX190YXNrX2NyZWQoY2hpbGQpOworCWlmIChjcmVkLT51c2VyLT51c2VyX25zID09IGNoaWxkX2NyZWQtPnVzZXItPnVzZXJfbnMgJiYKKwkgICAgY2FwX2lzc3Vic2V0KGNoaWxkX2NyZWQtPmNhcF9wZXJtaXR0ZWQsIGNyZWQtPmNhcF9wZXJtaXR0ZWQpKQorCQlnb3RvIG91dDsKKwlpZiAobnNfY2FwYWJsZShjaGlsZF9jcmVkLT51c2VyLT51c2VyX25zLCBDQVBfU1lTX1BUUkFDRSkpCisJCWdvdG8gb3V0OworCXJldCA9IC1FUEVSTTsKK291dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI1LDE4ICsxNTksMzAgQEAKICAqIGNhcF9wdHJhY2VfdHJhY2VtZSAtIERldGVybWluZSB3aGV0aGVyIGFub3RoZXIgcHJvY2VzcyBtYXkgdHJhY2UgdGhlIGN1cnJlbnQKICAqIEBwYXJlbnQ6IFRoZSB0YXNrIHByb3Bvc2VkIHRvIGJlIHRoZSB0cmFjZXIKICAqCisgKiBJZiBwYXJlbnQgaXMgaW4gdGhlIHNhbWUgb3IgYW4gYW5jZXN0b3IgdXNlcl9ucyBhbmQgaGFzIGFsbCBjdXJyZW50J3MKKyAqIGNhcGFiaWxpdGllcywgdGhlbiBwdHJhY2UgYWNjZXNzIGlzIGFsbG93ZWQuCisgKiBJZiBwYXJlbnQgaGFzIHRoZSBwdHJhY2UgY2FwYWJpbGl0eSB0byBjdXJyZW50J3MgdXNlcl9ucywgdGhlbiBwdHJhY2UKKyAqIGFjY2VzcyBpcyBhbGxvd2VkLgorICogRWxzZSBkZW5pZWQuCisgKgogICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG5vbWluYXRlZCB0YXNrIGlzIHBlcm1pdHRlZCB0byB0cmFjZSB0aGUgY3VycmVudAogICogcHJvY2VzcywgcmV0dXJuaW5nIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLCAtdmUgaWYgZGVuaWVkLgogICovCiBpbnQgY2FwX3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogewogCWludCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCAqY2hpbGRfY3JlZDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoIWNhcF9pc3N1YnNldChjdXJyZW50X2NyZWQoKS0+Y2FwX3Blcm1pdHRlZCwKLQkJCSAgX190YXNrX2NyZWQocGFyZW50KS0+Y2FwX3Blcm1pdHRlZCkgJiYKLQkgICAgIWhhc19jYXBhYmlsaXR5KHBhcmVudCwgQ0FQX1NZU19QVFJBQ0UpKQotCQlyZXQgPSAtRVBFUk07CisJY3JlZCA9IF9fdGFza19jcmVkKHBhcmVudCk7CisJY2hpbGRfY3JlZCA9IGN1cnJlbnRfY3JlZCgpOworCWlmIChjcmVkLT51c2VyLT51c2VyX25zID09IGNoaWxkX2NyZWQtPnVzZXItPnVzZXJfbnMgJiYKKwkgICAgY2FwX2lzc3Vic2V0KGNoaWxkX2NyZWQtPmNhcF9wZXJtaXR0ZWQsIGNyZWQtPmNhcF9wZXJtaXR0ZWQpKQorCQlnb3RvIG91dDsKKwlpZiAoaGFzX25zX2NhcGFiaWxpdHkocGFyZW50LCBjaGlsZF9jcmVkLT51c2VyLT51c2VyX25zLCBDQVBfU1lTX1BUUkFDRSkpCisJCWdvdG8gb3V0OworCXJldCA9IC1FUEVSTTsKK291dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc2LDcgKzIyMiw4IEBACiAJLyogdGhleSBhcmUgc28gbGltaXRlZCB1bmxlc3MgdGhlIGN1cnJlbnQgdGFzayBoYXMgdGhlIENBUF9TRVRQQ0FQCiAJICogY2FwYWJpbGl0eQogCSAqLwotCWlmIChjYXBfY2FwYWJsZShjdXJyZW50LCBjdXJyZW50X2NyZWQoKSwgQ0FQX1NFVFBDQVAsCisJaWYgKGNhcF9jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLAorCQkJY3VycmVudF9jcmVkKCktPnVzZXItPnVzZXJfbnMsIENBUF9TRVRQQ0FQLAogCQkJU0VDVVJJVFlfQ0FQX0FVRElUKSA9PSAwKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKQEAgLTgyOCw3ICs4NzUsOCBAQAogCQkgICAgICYgKG5ldy0+c2VjdXJlYml0cyBeIGFyZzIpKQkJCS8qWzFdKi8KIAkJICAgIHx8ICgobmV3LT5zZWN1cmViaXRzICYgU0VDVVJFX0FMTF9MT0NLUyAmIH5hcmcyKSkJLypbMl0qLwogCQkgICAgfHwgKGFyZzIgJiB+KFNFQ1VSRV9BTExfTE9DS1MgfCBTRUNVUkVfQUxMX0JJVFMpKQkvKlszXSovCi0JCSAgICB8fCAoY2FwX2NhcGFibGUoY3VycmVudCwgY3VycmVudF9jcmVkKCksIENBUF9TRVRQQ0FQLAorCQkgICAgfHwgKGNhcF9jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLAorCQkJCSAgICBjdXJyZW50X2NyZWQoKS0+dXNlci0+dXNlcl9ucywgQ0FQX1NFVFBDQVAsCiAJCQkJICAgIFNFQ1VSSVRZX0NBUF9BVURJVCkgIT0gMCkJCS8qWzRdKi8KIAkJCS8qCiAJCQkgKiBbMV0gbm8gY2hhbmdpbmcgb2YgYml0cyB0aGF0IGFyZSBsb2NrZWQKQEAgLTg5Myw3ICs5NDEsNyBAQAogewogCWludCBjYXBfc3lzX2FkbWluID0gMDsKIAotCWlmIChjYXBfY2FwYWJsZShjdXJyZW50LCBjdXJyZW50X2NyZWQoKSwgQ0FQX1NZU19BRE1JTiwKKwlpZiAoY2FwX2NhcGFibGUoY3VycmVudCwgY3VycmVudF9jcmVkKCksICZpbml0X3VzZXJfbnMsIENBUF9TWVNfQURNSU4sCiAJCQlTRUNVUklUWV9DQVBfTk9BVURJVCkgPT0gMCkKIAkJY2FwX3N5c19hZG1pbiA9IDE7CiAJcmV0dXJuIF9fdm1fZW5vdWdoX21lbW9yeShtbSwgcGFnZXMsIGNhcF9zeXNfYWRtaW4pOwpAQCAtOTIwLDcgKzk2OCw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoYWRkciA8IGRhY19tbWFwX21pbl9hZGRyKSB7Ci0JCXJldCA9IGNhcF9jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLCBDQVBfU1lTX1JBV0lPLAorCQlyZXQgPSBjYXBfY2FwYWJsZShjdXJyZW50LCBjdXJyZW50X2NyZWQoKSwgJmluaXRfdXNlcl9ucywgQ0FQX1NZU19SQVdJTywKIAkJCQkgIFNFQ1VSSVRZX0NBUF9BVURJVCk7CiAJCS8qIHNldCBQRl9TVVBFUlBSSVYgaWYgaXQgdHVybnMgb3V0IHdlIGFsbG93IHRoZSBsb3cgbW1hcCAqLwogCQlpZiAocmV0ID09IDApCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA5MTg3NjY1Li4xMDExNDIzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTE1NCwyOSArMTU0LDMzIEBACiAJCQkJICAgIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiB9CiAKLWludCBzZWN1cml0eV9jYXBhYmxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgY2FwKQoraW50IHNlY3VyaXR5X2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCSAgICAgaW50IGNhcCkKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5jYXBhYmxlKGN1cnJlbnQsIGNyZWQsIGNhcCwgU0VDVVJJVFlfQ0FQX0FVRElUKTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5jYXBhYmxlKGN1cnJlbnQsIGNyZWQsIG5zLCBjYXAsCisJCQkJICAgICBTRUNVUklUWV9DQVBfQVVESVQpOwogfQogCi1pbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKQoraW50IHNlY3VyaXR5X3JlYWxfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywKKwkJCSAgaW50IGNhcCkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZDsKIAlpbnQgcmV0OwogCiAJY3JlZCA9IGdldF90YXNrX2NyZWQodHNrKTsKLQlyZXQgPSBzZWN1cml0eV9vcHMtPmNhcGFibGUodHNrLCBjcmVkLCBjYXAsIFNFQ1VSSVRZX0NBUF9BVURJVCk7CisJcmV0ID0gc2VjdXJpdHlfb3BzLT5jYXBhYmxlKHRzaywgY3JlZCwgbnMsIGNhcCwgU0VDVVJJVFlfQ0FQX0FVRElUKTsKIAlwdXRfY3JlZChjcmVkKTsKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlX25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCitpbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlX25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkOwogCWludCByZXQ7CiAKIAljcmVkID0gZ2V0X3Rhc2tfY3JlZCh0c2spOwotCXJldCA9IHNlY3VyaXR5X29wcy0+Y2FwYWJsZSh0c2ssIGNyZWQsIGNhcCwgU0VDVVJJVFlfQ0FQX05PQVVESVQpOworCXJldCA9IHNlY3VyaXR5X29wcy0+Y2FwYWJsZSh0c2ssIGNyZWQsIG5zLCBjYXAsIFNFQ1VSSVRZX0NBUF9OT0FVRElUKTsKIAlwdXRfY3JlZChjcmVkKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDY0NzVlMWYuLmY5YzM3NjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2xvZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CiAKICNpbmNsdWRlICJhdmMuaCIKICNpbmNsdWRlICJvYmpzZWMuaCIKQEAgLTE4NDYsMTEgKzE4NDcsMTEgQEAKICAqLwogCiBzdGF0aWMgaW50IHNlbGludXhfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCi0JCQkgICBpbnQgY2FwLCBpbnQgYXVkaXQpCisJCQkgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwLCBpbnQgYXVkaXQpCiB7CiAJaW50IHJjOwogCi0JcmMgPSBjYXBfY2FwYWJsZSh0c2ssIGNyZWQsIGNhcCwgYXVkaXQpOworCXJjID0gY2FwX2NhcGFibGUodHNrLCBjcmVkLCBucywgY2FwLCBhdWRpdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE5MzEsNyArMTkzMiw4IEBACiB7CiAJaW50IHJjLCBjYXBfc3lzX2FkbWluID0gMDsKIAotCXJjID0gc2VsaW51eF9jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLCBDQVBfU1lTX0FETUlOLAorCXJjID0gc2VsaW51eF9jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLAorCQkJICAgICAmaW5pdF91c2VyX25zLCBDQVBfU1lTX0FETUlOLAogCQkJICAgICBTRUNVUklUWV9DQVBfTk9BVURJVCk7CiAJaWYgKHJjID09IDApCiAJCWNhcF9zeXNfYWRtaW4gPSAxOwpAQCAtMjcyMyw3ICsyNzI1LDcgQEAKIAlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwlpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKQEAgLTI4MzQsNyArMjgzNiw4IEBACiAJICogYW5kIGxhY2sgb2YgcGVybWlzc2lvbiBqdXN0IG1lYW5zIHRoYXQgd2UgZmFsbCBiYWNrIHRvIHRoZQogCSAqIGluLWNvcmUgY29udGV4dCB2YWx1ZSwgbm90IGEgZGVuaWFsLgogCSAqLwotCWVycm9yID0gc2VsaW51eF9jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLCBDQVBfTUFDX0FETUlOLAorCWVycm9yID0gc2VsaW51eF9jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLAorCQkJCSZpbml0X3VzZXJfbnMsIENBUF9NQUNfQURNSU4sCiAJCQkJU0VDVVJJVFlfQ0FQX05PQVVESVQpOwogCWlmICghZXJyb3IpCiAJCWVycm9yID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UoaXNlYy0+c2lkLCAmY29udGV4dCwKQEAgLTI5NjgsNyArMjk3MSw3IEBACiAJY2FzZSBLRFNLQkVOVDoKIAljYXNlIEtEU0tCU0VOVDoKIAkJZXJyb3IgPSB0YXNrX2hhc19jYXBhYmlsaXR5KGN1cnJlbnQsIGNyZWQsIENBUF9TWVNfVFRZX0NPTkZJRywKLQkJCQkJICAgIFNFQ1VSSVRZX0NBUF9BVURJVCk7CisJCQkJCVNFQ1VSSVRZX0NBUF9BVURJVCk7CiAJCWJyZWFrOwogCiAJLyogZGVmYXVsdCBjYXNlIGFzc3VtZXMgdGhhdCB0aGUgY29tbWFuZCB3aWxsIGdvCmRpZmYgLS1naXQgYS9zb3VuZC9LY29uZmlnIGIvc291bmQvS2NvbmZpZwppbmRleCBmY2FkNzYwZi4uMWZlZjE0MSAxMDA2NDQKLS0tIGEvc291bmQvS2NvbmZpZworKysgYi9zb3VuZC9LY29uZmlnCkBAIC05Nyw2ICs5Nyw4IEBACiAjIGhlcmUgYXNzdW1pbmcgVVNCIGlzIGRlZmluZWQgYmVmb3JlIEFMU0EKIHNvdXJjZSAic291bmQvdXNiL0tjb25maWciCiAKK3NvdXJjZSAic291bmQvZmlyZXdpcmUvS2NvbmZpZyIKKwogIyB0aGUgZm9sbG93aW5nIHdpbGwgZGVwZW5kIG9uIHRoZSBvcmRlciBvZiBjb25maWcuCiAjIGhlcmUgYXNzdW1pbmcgUENNQ0lBIGlzIGRlZmluZWQgYmVmb3JlIEFMU0EKIHNvdXJjZSAic291bmQvcGNtY2lhL0tjb25maWciCmRpZmYgLS1naXQgYS9zb3VuZC9NYWtlZmlsZSBiL3NvdW5kL01ha2VmaWxlCmluZGV4IGVjNDY3ZGUuLmNlOTEzMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL01ha2VmaWxlCisrKyBiL3NvdW5kL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogb2JqLSQoQ09ORklHX1NPVU5EX1BSSU1FKSArPSBvc3MvCiBvYmotJChDT05GSUdfRE1BU09VTkQpICs9IG9zcy8KIG9iai0kKENPTkZJR19TTkQpICs9IGNvcmUvIGkyYy8gZHJpdmVycy8gaXNhLyBwY2kvIHBwYy8gYXJtLyBzaC8gc3ludGgvIHVzYi8gXAotCXNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvIGF0bWVsLworCWZpcmV3aXJlLyBzcGFyYy8gc3BpLyBwYXJpc2MvIHBjbWNpYS8gbWlwcy8gc29jLyBhdG1lbC8KIG9iai0kKENPTkZJR19TTkRfQU9BKSArPSBhb2EvCiAKICMgVGhpcyBvbmUgbXVzdCBiZSBjb21waWxhYmxlIGV2ZW4gaWYgc291bmQgaXMgY29uZmlndXJlZCBvdXQKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvY29udHJvbC5jIGIvc291bmQvY29yZS9jb250cm9sLmMKaW5kZXggOWNlMDBlZC4uYTA4YWQ1NyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9jb250cm9sLmMKKysrIGIvc291bmQvY29yZS9jb250cm9sLmMKQEAgLTI3OSwzMyArMjc5LDMxIEBACiAKIEVYUE9SVF9TWU1CT0woc25kX2N0bF9mcmVlX29uZSk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX2N0bF9ob2xlX2NoZWNrKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIGJvb2wgc25kX2N0bF9yZW1vdmVfbnVtaWRfY29uZmxpY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkLAorCQkJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShrY3RsLCAmY2FyZC0+Y29udHJvbHMsIGxpc3QpIHsKLQkJaWYgKChrY3RsLT5pZC5udW1pZCA8PSBjYXJkLT5sYXN0X251bWlkICYmCi0JCSAgICAga2N0bC0+aWQubnVtaWQgKyBrY3RsLT5jb3VudCA+IGNhcmQtPmxhc3RfbnVtaWQpIHx8Ci0JCSAgICAoa2N0bC0+aWQubnVtaWQgPD0gY2FyZC0+bGFzdF9udW1pZCArIGNvdW50IC0gMSAmJgotCQkgICAgIGtjdGwtPmlkLm51bWlkICsga2N0bC0+Y291bnQgPiBjYXJkLT5sYXN0X251bWlkICsgY291bnQgLSAxKSkKLQkJICAgIAlyZXR1cm4gY2FyZC0+bGFzdF9udW1pZCA9IGtjdGwtPmlkLm51bWlkICsga2N0bC0+Y291bnQgLSAxOworCQlpZiAoa2N0bC0+aWQubnVtaWQgPCBjYXJkLT5sYXN0X251bWlkICsgMSArIGNvdW50ICYmCisJCSAgICBrY3RsLT5pZC5udW1pZCArIGtjdGwtPmNvdW50ID4gY2FyZC0+bGFzdF9udW1pZCArIDEpIHsKKwkJICAgIAljYXJkLT5sYXN0X251bWlkID0ga2N0bC0+aWQubnVtaWQgKyBrY3RsLT5jb3VudCAtIDE7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQogCX0KLQlyZXR1cm4gY2FyZC0+bGFzdF9udW1pZDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2N0bF9maW5kX2hvbGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0JdW5zaWduZWQgaW50IGxhc3RfbnVtaWQsIGl0ZXIgPSAxMDAwMDA7CisJdW5zaWduZWQgaW50IGl0ZXIgPSAxMDAwMDA7CiAKLQlsYXN0X251bWlkID0gY2FyZC0+bGFzdF9udW1pZDsKLQl3aGlsZSAobGFzdF9udW1pZCAhPSBzbmRfY3RsX2hvbGVfY2hlY2soY2FyZCwgY291bnQpKSB7CisJd2hpbGUgKHNuZF9jdGxfcmVtb3ZlX251bWlkX2NvbmZsaWN0KGNhcmQsIGNvdW50KSkgewogCQlpZiAoLS1pdGVyID09IDApIHsKIAkJCS8qIHRoaXMgc2l0dWF0aW9uIGlzIHZlcnkgdW5saWtlbHkgKi8KIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBhbGxvY2F0ZSBuZXcgY29udHJvbCBudW1pZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQlsYXN0X251bWlkID0gY2FyZC0+bGFzdF9udW1pZDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00NjYsNiArNDY0LDUyIEBACiB9CiAKIC8qKgorICogc25kX2N0bF9hY3RpdmF0ZV9pZCAtIGFjdGl2YXRlL2luYWN0aXZhdGUgdGhlIGNvbnRyb2wgb2YgdGhlIGdpdmVuIGlkCisgKiBAY2FyZDogdGhlIGNhcmQgaW5zdGFuY2UKKyAqIEBpZDogdGhlIGNvbnRyb2wgaWQgdG8gYWN0aXZhdGUvaW5hY3RpdmF0ZQorICogQGFjdGl2ZTogbm9uLXplcm8gdG8gYWN0aXZhdGUKKyAqCisgKiBGaW5kcyB0aGUgY29udHJvbCBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBpZCwgYW5kIGFjdGl2YXRlIG9yCisgKiBpbmFjdGl2YXRlIHRoZSBjb250cm9sIHRvZ2V0aGVyIHdpdGggbm90aWZpY2F0aW9uLCBpZiBjaGFuZ2VkLgorICoKKyAqIFJldHVybnMgMCBpZiB1bmNoYW5nZWQsIDEgaWYgY2hhbmdlZCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBzbmRfY3RsX2FjdGl2YXRlX2lkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCAqaWQsCisJCQlpbnQgYWN0aXZlKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJc3RydWN0IHNuZF9rY29udHJvbF92b2xhdGlsZSAqdmQ7CisJdW5zaWduZWQgaW50IGluZGV4X29mZnNldDsKKwlpbnQgcmV0OworCisJZG93bl93cml0ZSgmY2FyZC0+Y29udHJvbHNfcndzZW0pOworCWtjdGwgPSBzbmRfY3RsX2ZpbmRfaWQoY2FyZCwgaWQpOworCWlmIChrY3RsID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byB1bmxvY2s7CisJfQorCWluZGV4X29mZnNldCA9IHNuZF9jdGxfZ2V0X2lvZmYoa2N0bCwgJmtjdGwtPmlkKTsKKwl2ZCA9ICZrY3RsLT52ZFtpbmRleF9vZmZzZXRdOworCXJldCA9IDA7CisJaWYgKGFjdGl2ZSkgeworCQlpZiAoISh2ZC0+YWNjZXNzICYgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFKSkKKwkJCWdvdG8gdW5sb2NrOworCQl2ZC0+YWNjZXNzICY9IH5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJfSBlbHNlIHsKKwkJaWYgKHZkLT5hY2Nlc3MgJiBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUpCisJCQlnb3RvIHVubG9jazsKKwkJdmQtPmFjY2VzcyB8PSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJfQorCXJldCA9IDE7CisgdW5sb2NrOgorCXVwX3dyaXRlKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CisJaWYgKHJldCA+IDApCisJCXNuZF9jdGxfbm90aWZ5KGNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sIGlkKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX2N0bF9hY3RpdmF0ZV9pZCk7CisKKy8qKgogICogc25kX2N0bF9yZW5hbWVfaWQgLSByZXBsYWNlIHRoZSBpZCBvZiBhIGNvbnRyb2wgb24gdGhlIGNhcmQKICAqIEBjYXJkOiB0aGUgY2FyZCBpbnN0YW5jZQogICogQHNyY19pZDogdGhlIG9sZCBpZApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9kZXZpY2UuYyBiL3NvdW5kL2NvcmUvZGV2aWNlLmMKaW5kZXggYTY3ZGZhYzAuLjJkMWFkNGIwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2RldmljZS5jCisrKyBiL3NvdW5kL2NvcmUvZGV2aWNlLmMKQEAgLTIyNSwxNSArMjI1LDE2IEBACiB7CiAJc3RydWN0IHNuZF9kZXZpY2UgKmRldjsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGludCByYW5nZV9sb3csIHJhbmdlX2hpZ2g7CisJdW5zaWduZWQgaW50IHJhbmdlX2xvdywgcmFuZ2VfaGlnaCwgdHlwZTsKIAogCWlmIChzbmRfQlVHX09OKCFjYXJkKSkKIAkJcmV0dXJuIC1FTlhJTzsKLQlyYW5nZV9sb3cgPSBjbWQgKiBTTkRSVl9ERVZfVFlQRV9SQU5HRV9TSVpFOworCXJhbmdlX2xvdyA9IChfX2ZvcmNlIHVuc2lnbmVkIGludCljbWQgKiBTTkRSVl9ERVZfVFlQRV9SQU5HRV9TSVpFOwogCXJhbmdlX2hpZ2ggPSByYW5nZV9sb3cgKyBTTkRSVl9ERVZfVFlQRV9SQU5HRV9TSVpFIC0gMTsKICAgICAgIF9fYWdhaW46CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjYXJkLT5kZXZpY2VzLCBsaXN0KSB7Ci0JCWlmIChkZXYtPnR5cGUgPj0gcmFuZ2VfbG93ICYmIGRldi0+dHlwZSA8PSByYW5nZV9oaWdoKSB7CisJCXR5cGUgPSAoX19mb3JjZSB1bnNpZ25lZCBpbnQpZGV2LT50eXBlOworCQlpZiAodHlwZSA+PSByYW5nZV9sb3cgJiYgdHlwZSA8PSByYW5nZV9oaWdoKSB7CiAJCQlpZiAoKGVyciA9IHNuZF9kZXZpY2VfZnJlZShjYXJkLCBkZXYtPmRldmljZV9kYXRhKSkgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCQlnb3RvIF9fYWdhaW47CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL21lbWFsbG9jLmMgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmMKaW5kZXggOWU5MjQ0MS4uMTZiZDljMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9tZW1hbGxvYy5jCisrKyBiL3NvdW5kL2NvcmUvbWVtYWxsb2MuYwpAQCAtMTkyLDcgKzE5Miw4IEBACiAJZG1hYi0+Ynl0ZXMgPSAwOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU05EUlZfRE1BX1RZUEVfQ09OVElOVU9VUzoKLQkJZG1hYi0+YXJlYSA9IHNuZF9tYWxsb2NfcGFnZXMoc2l6ZSwgKHVuc2lnbmVkIGxvbmcpZGV2aWNlKTsKKwkJZG1hYi0+YXJlYSA9IHNuZF9tYWxsb2NfcGFnZXMoc2l6ZSwKKwkJCQkJKF9fZm9yY2UgZ2ZwX3QpKHVuc2lnbmVkIGxvbmcpZGV2aWNlKTsKIAkJZG1hYi0+YWRkciA9IDA7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19IQVNfRE1BCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9saW5lYXIuYyBiL3NvdW5kL2NvcmUvb3NzL2xpbmVhci5jCmluZGV4IDRjMWQxNjguLjEzYjNmNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL2xpbmVhci5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL2xpbmVhci5jCkBAIC0xMTQsNyArMTE0LDggQEAKIAlyZXR1cm4gZnJhbWVzOwogfQogCi1zdGF0aWMgdm9pZCBpbml0X2RhdGEoc3RydWN0IGxpbmVhcl9wcml2ICpkYXRhLCBpbnQgc3JjX2Zvcm1hdCwgaW50IGRzdF9mb3JtYXQpCitzdGF0aWMgdm9pZCBpbml0X2RhdGEoc3RydWN0IGxpbmVhcl9wcml2ICpkYXRhLAorCQkgICAgICBzbmRfcGNtX2Zvcm1hdF90IHNyY19mb3JtYXQsIHNuZF9wY21fZm9ybWF0X3QgZHN0X2Zvcm1hdCkKIHsKIAlpbnQgc3JjX2xlLCBkc3RfbGUsIHNyY19ieXRlcywgZHN0X2J5dGVzOwogCkBAIC0xNDAsOSArMTQxLDkgQEAKIAlpZiAoc25kX3BjbV9mb3JtYXRfc2lnbmVkKHNyY19mb3JtYXQpICE9CiAJICAgIHNuZF9wY21fZm9ybWF0X3NpZ25lZChkc3RfZm9ybWF0KSkgewogCQlpZiAoZHN0X2xlKQotCQkJZGF0YS0+ZmxpcCA9IGNwdV90b19sZTMyKDB4ODAwMDAwMDApOworCQkJZGF0YS0+ZmxpcCA9IChfX2ZvcmNlIHUzMiljcHVfdG9fbGUzMigweDgwMDAwMDAwKTsKIAkJZWxzZQotCQkJZGF0YS0+ZmxpcCA9IGNwdV90b19iZTMyKDB4ODAwMDAwMDApOworCQkJZGF0YS0+ZmxpcCA9IChfX2ZvcmNlIHUzMiljcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jIGIvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKaW5kZXggODIyZGQ1Ni4uZDgzNTljZiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKQEAgLTE5MCw5ICsxOTAsMTAgQEAKIAkJcmV0dXJuIC1FSU87CiAJaWYgKG1peGVyLT5wdXRfcmVjc3JjICYmIG1peGVyLT5nZXRfcmVjc3JjKSB7CS8qIGV4Y2x1c2l2ZSAqLwogCQlpbnQgZXJyOwotCQlpZiAoKGVyciA9IG1peGVyLT5nZXRfcmVjc3JjKGZtaXhlciwgJnJlc3VsdCkpIDwgMCkKKwkJdW5zaWduZWQgaW50IGluZGV4OworCQlpZiAoKGVyciA9IG1peGVyLT5nZXRfcmVjc3JjKGZtaXhlciwgJmluZGV4KSkgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJcmVzdWx0ID0gMSA8PCByZXN1bHQ7CisJCXJlc3VsdCA9IDEgPDwgaW5kZXg7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHNuZF9taXhlcl9vc3Nfc2xvdCAqcHNsb3Q7CiAJCWludCBjaG47CkBAIC0yMTQsNiArMjE1LDcgQEAKIAlzdHJ1Y3Qgc25kX21peGVyX29zcyAqbWl4ZXIgPSBmbWl4ZXItPm1peGVyOwogCXN0cnVjdCBzbmRfbWl4ZXJfb3NzX3Nsb3QgKnBzbG90OwogCWludCBjaG4sIGFjdGl2ZTsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJaW50IHJlc3VsdCA9IDA7CiAKIAlpZiAobWl4ZXIgPT0gTlVMTCkKQEAgLTIyMiw4ICsyMjQsOCBAQAogCQlpZiAocmVjc3JjICYgfm1peGVyLT5vc3NfcmVjc3JjKQogCQkJcmVjc3JjICY9IH5taXhlci0+b3NzX3JlY3NyYzsKIAkJbWl4ZXItPnB1dF9yZWNzcmMoZm1peGVyLCBmZnoofnJlY3NyYykpOwotCQltaXhlci0+Z2V0X3JlY3NyYyhmbWl4ZXIsICZyZXN1bHQpOwotCQlyZXN1bHQgPSAxIDw8IHJlc3VsdDsKKwkJbWl4ZXItPmdldF9yZWNzcmMoZm1peGVyLCAmaW5kZXgpOworCQlyZXN1bHQgPSAxIDw8IGluZGV4OwogCX0KIAlmb3IgKGNobiA9IDA7IGNobiA8IDMxOyBjaG4rKykgewogCQlwc2xvdCA9ICZtaXhlci0+c2xvdHNbY2huXTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL211bGF3LmMgYi9zb3VuZC9jb3JlL29zcy9tdWxhdy5jCmluZGV4IGY3NjQ5ZDQuLjc5MTU1NjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL211bGF3LmMKKysrIGIvc291bmQvY29yZS9vc3MvbXVsYXcuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJcmV0dXJuIGZyYW1lczsKIH0KIAotc3RhdGljIHZvaWQgaW5pdF9kYXRhKHN0cnVjdCBtdWxhd19wcml2ICpkYXRhLCBpbnQgZm9ybWF0KQorc3RhdGljIHZvaWQgaW5pdF9kYXRhKHN0cnVjdCBtdWxhd19wcml2ICpkYXRhLCBzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKIHsKICNpZmRlZiBTTkRSVl9MSVRUTEVfRU5ESUFOCiAJZGF0YS0+Y3Z0X2VuZGlhbiA9IHNuZF9wY21fZm9ybWF0X2JpZ19lbmRpYW4oZm9ybWF0KSA+IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggYTJlNGViMy4uMjNjMzRhMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvbWl4ZXJfb3NzLmg+CiAKICNkZWZpbmUgT1NTX0FMU0FFTVVMVkVSCQlfU0lPUiAoJ00nLCAyNDksIGludCkKIApAQCAtNjAsNyArNjEsNiBAQAogTU9EVUxFX0FMSUFTX1NORFJWX01JTk9SKFNORFJWX01JTk9SX09TU19QQ00pOwogTU9EVUxFX0FMSUFTX1NORFJWX01JTk9SKFNORFJWX01JTk9SX09TU19QQ00xKTsKIAotZXh0ZXJuIGludCBzbmRfbWl4ZXJfb3NzX2lvY3RsX2NhcmQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgaW50IHNuZF9wY21fb3NzX2dldF9yYXRlKHN0cnVjdCBzbmRfcGNtX29zc19maWxlICpwY21fb3NzX2ZpbGUpOwogc3RhdGljIGludCBzbmRfcGNtX29zc19nZXRfY2hhbm5lbHMoc3RydWN0IHNuZF9wY21fb3NzX2ZpbGUgKnBjbV9vc3NfZmlsZSk7CiBzdGF0aWMgaW50IHNuZF9wY21fb3NzX2dldF9mb3JtYXQoc3RydWN0IHNuZF9wY21fb3NzX2ZpbGUgKnBjbV9vc3NfZmlsZSk7CkBAIC02NTYsNyArNjU2LDcgQEAKICNkZWZpbmUgQUZNVF9BQzMgICAgICAgICAweDAwMDAwNDAwCiAjZGVmaW5lIEFGTVRfVk9SQklTICAgICAgMHgwMDAwMDgwMAogCi1zdGF0aWMgaW50IHNuZF9wY21fb3NzX2Zvcm1hdF9mcm9tKGludCBmb3JtYXQpCitzdGF0aWMgc25kX3BjbV9mb3JtYXRfdCBzbmRfcGNtX29zc19mb3JtYXRfZnJvbShpbnQgZm9ybWF0KQogewogCXN3aXRjaCAoZm9ybWF0KSB7CiAJY2FzZSBBRk1UX01VX0xBVzoJcmV0dXJuIFNORFJWX1BDTV9GT1JNQVRfTVVfTEFXOwpAQCAtNjgwLDcgKzY4MCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNuZF9wY21fb3NzX2Zvcm1hdF90byhpbnQgZm9ybWF0KQorc3RhdGljIGludCBzbmRfcGNtX29zc19mb3JtYXRfdG8oc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpCiB7CiAJc3dpdGNoIChmb3JtYXQpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfTVVfTEFXOglyZXR1cm4gQUZNVF9NVV9MQVc7CkBAIC04NDMsNyArODQzLDggQEAKIAlzaXplX3Qgb3NzX2ZyYW1lX3NpemU7CiAJaW50IGVycjsKIAlpbnQgZGlyZWN0OwotCWludCBmb3JtYXQsIHNmb3JtYXQsIG47CisJc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQsIHNmb3JtYXQ7CisJaW50IG47CiAJc3RydWN0IHNuZF9tYXNrIHNmb3JtYXRfbWFzazsKIAlzdHJ1Y3Qgc25kX21hc2sgbWFzazsKIApAQCAtODY4LDExICs4NjksMTEgQEAKIAlfc25kX3BjbV9od19wYXJhbV9taW4oc3BhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMsIDIsIDApOwogCXNuZF9tYXNrX25vbmUoJm1hc2spOwogCWlmIChhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5tbWFwX2NvdW50KSkKLQkJc25kX21hc2tfc2V0KCZtYXNrLCBTTkRSVl9QQ01fQUNDRVNTX01NQVBfSU5URVJMRUFWRUQpOworCQlzbmRfbWFza19zZXQoJm1hc2ssIChfX2ZvcmNlIGludClTTkRSVl9QQ01fQUNDRVNTX01NQVBfSU5URVJMRUFWRUQpOwogCWVsc2UgewotCQlzbmRfbWFza19zZXQoJm1hc2ssIFNORFJWX1BDTV9BQ0NFU1NfUldfSU5URVJMRUFWRUQpOworCQlzbmRfbWFza19zZXQoJm1hc2ssIChfX2ZvcmNlIGludClTTkRSVl9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEKTsKIAkJaWYgKCFkaXJlY3QpCi0JCQlzbmRfbWFza19zZXQoJm1hc2ssIFNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQpOworCQkJc25kX21hc2tfc2V0KCZtYXNrLCAoX19mb3JjZSBpbnQpU05EUlZfUENNX0FDQ0VTU19SV19OT05JTlRFUkxFQVZFRCk7CiAJfQogCWVyciA9IHNuZF9wY21faHdfcGFyYW1fbWFzayhzdWJzdHJlYW0sIHNwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MsICZtYXNrKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtODkxLDE5ICs4OTIsMjIgQEAKIAllbHNlCiAJCXNmb3JtYXQgPSBzbmRfcGNtX3BsdWdfc2xhdmVfZm9ybWF0KGZvcm1hdCwgJnNmb3JtYXRfbWFzayk7CiAKLQlpZiAoc2Zvcm1hdCA8IDAgfHwgIXNuZF9tYXNrX3Rlc3QoJnNmb3JtYXRfbWFzaywgc2Zvcm1hdCkpIHsKLQkJZm9yIChzZm9ybWF0ID0gMDsgc2Zvcm1hdCA8PSBTTkRSVl9QQ01fRk9STUFUX0xBU1Q7IHNmb3JtYXQrKykgewotCQkJaWYgKHNuZF9tYXNrX3Rlc3QoJnNmb3JtYXRfbWFzaywgc2Zvcm1hdCkgJiYKKwlpZiAoKF9fZm9yY2UgaW50KXNmb3JtYXQgPCAwIHx8CisJICAgICFzbmRfbWFza190ZXN0KCZzZm9ybWF0X21hc2ssIChfX2ZvcmNlIGludClzZm9ybWF0KSkgeworCQlmb3IgKHNmb3JtYXQgPSAoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KTA7CisJCSAgICAgKF9fZm9yY2UgaW50KXNmb3JtYXQgPD0gKF9fZm9yY2UgaW50KVNORFJWX1BDTV9GT1JNQVRfTEFTVDsKKwkJICAgICBzZm9ybWF0ID0gKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkoKF9fZm9yY2UgaW50KXNmb3JtYXQgKyAxKSkgeworCQkJaWYgKHNuZF9tYXNrX3Rlc3QoJnNmb3JtYXRfbWFzaywgKF9fZm9yY2UgaW50KXNmb3JtYXQpICYmCiAJCQkgICAgc25kX3BjbV9vc3NfZm9ybWF0X3RvKHNmb3JtYXQpID49IDApCiAJCQkJYnJlYWs7CiAJCX0KLQkJaWYgKHNmb3JtYXQgPiBTTkRSVl9QQ01fRk9STUFUX0xBU1QpIHsKKwkJaWYgKChfX2ZvcmNlIGludClzZm9ybWF0ID4gKF9fZm9yY2UgaW50KVNORFJWX1BDTV9GT1JNQVRfTEFTVCkgewogCQkJc25kX3ByaW50ZCgiQ2Fubm90IGZpbmQgYSBmb3JtYXQhISFcbiIpOwogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gZmFpbHVyZTsKIAkJfQogCX0KLQllcnIgPSBfc25kX3BjbV9od19wYXJhbV9zZXQoc3BhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwgc2Zvcm1hdCwgMCk7CisJZXJyID0gX3NuZF9wY21faHdfcGFyYW1fc2V0KHNwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsIChfX2ZvcmNlIGludClzZm9ybWF0LCAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmYWlsdXJlOwogCkBAIC05MTIsOSArOTE2LDkgQEAKIAl9IGVsc2UgewogCQlfc25kX3BjbV9od19wYXJhbXNfYW55KHBhcmFtcyk7CiAJCV9zbmRfcGNtX2h3X3BhcmFtX3NldChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MsCi0JCQkJICAgICAgU05EUlZfUENNX0FDQ0VTU19SV19JTlRFUkxFQVZFRCwgMCk7CisJCQkJICAgICAgKF9fZm9yY2UgaW50KVNORFJWX1BDTV9BQ0NFU1NfUldfSU5URVJMRUFWRUQsIDApOwogCQlfc25kX3BjbV9od19wYXJhbV9zZXQocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAotCQkJCSAgICAgIHNuZF9wY21fb3NzX2Zvcm1hdF9mcm9tKHJ1bnRpbWUtPm9zcy5mb3JtYXQpLCAwKTsKKwkJCQkgICAgICAoX19mb3JjZSBpbnQpc25kX3BjbV9vc3NfZm9ybWF0X2Zyb20ocnVudGltZS0+b3NzLmZvcm1hdCksIDApOwogCQlfc25kX3BjbV9od19wYXJhbV9zZXQocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCiAJCQkJICAgICAgcnVudGltZS0+b3NzLmNoYW5uZWxzLCAwKTsKIAkJX3NuZF9wY21faHdfcGFyYW1fc2V0KHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCkBAIC0xMTg1LDEwICsxMTg5LDEwIEBACiAJCWlmIChpbl9rZXJuZWwpIHsKIAkJCW1tX3NlZ21lbnRfdCBmczsKIAkJCWZzID0gc25kX2VudGVyX3VzZXIoKTsKLQkJCXJldCA9IHNuZF9wY21fbGliX3dyaXRlKHN1YnN0cmVhbSwgKHZvaWQgX191c2VyICopcHRyLCBmcmFtZXMpOworCQkJcmV0ID0gc25kX3BjbV9saWJfd3JpdGUoc3Vic3RyZWFtLCAodm9pZCBfX2ZvcmNlIF9fdXNlciAqKXB0ciwgZnJhbWVzKTsKIAkJCXNuZF9sZWF2ZV91c2VyKGZzKTsKIAkJfSBlbHNlIHsKLQkJCXJldCA9IHNuZF9wY21fbGliX3dyaXRlKHN1YnN0cmVhbSwgKHZvaWQgX191c2VyICopcHRyLCBmcmFtZXMpOworCQkJcmV0ID0gc25kX3BjbV9saWJfd3JpdGUoc3Vic3RyZWFtLCAodm9pZCBfX2ZvcmNlIF9fdXNlciAqKXB0ciwgZnJhbWVzKTsKIAkJfQogCQlpZiAocmV0ICE9IC1FUElQRSAmJiByZXQgIT0gLUVTVFJQSVBFKQogCQkJYnJlYWs7CkBAIC0xMjMwLDEwICsxMjM0LDEwIEBACiAJCWlmIChpbl9rZXJuZWwpIHsKIAkJCW1tX3NlZ21lbnRfdCBmczsKIAkJCWZzID0gc25kX2VudGVyX3VzZXIoKTsKLQkJCXJldCA9IHNuZF9wY21fbGliX3JlYWQoc3Vic3RyZWFtLCAodm9pZCBfX3VzZXIgKilwdHIsIGZyYW1lcyk7CisJCQlyZXQgPSBzbmRfcGNtX2xpYl9yZWFkKHN1YnN0cmVhbSwgKHZvaWQgX19mb3JjZSBfX3VzZXIgKilwdHIsIGZyYW1lcyk7CiAJCQlzbmRfbGVhdmVfdXNlcihmcyk7CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSBzbmRfcGNtX2xpYl9yZWFkKHN1YnN0cmVhbSwgKHZvaWQgX191c2VyICopcHRyLCBmcmFtZXMpOworCQkJcmV0ID0gc25kX3BjbV9saWJfcmVhZChzdWJzdHJlYW0sICh2b2lkIF9fZm9yY2UgX191c2VyICopcHRyLCBmcmFtZXMpOwogCQl9CiAJCWlmIChyZXQgPT0gLUVQSVBFKSB7CiAJCQlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfRFJBSU5JTkcpIHsKQEAgLTEzMzMsNyArMTMzNyw3IEBACiAJCXN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpjaGFubmVsczsKIAkJc2l6ZV90IG9zc19mcmFtZV9ieXRlcyA9IChydW50aW1lLT5vc3MucGx1Z2luX2ZpcnN0LT5zcmNfd2lkdGggKiBydW50aW1lLT5vc3MucGx1Z2luX2ZpcnN0LT5zcmNfZm9ybWF0LmNoYW5uZWxzKSAvIDg7CiAJCWlmICghaW5fa2VybmVsKSB7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIocnVudGltZS0+b3NzLmJ1ZmZlciwgKGNvbnN0IGNoYXIgX191c2VyICopYnVmLCBieXRlcykpCisJCQlpZiAoY29weV9mcm9tX3VzZXIocnVudGltZS0+b3NzLmJ1ZmZlciwgKGNvbnN0IGNoYXIgX19mb3JjZSBfX3VzZXIgKilidWYsIGJ5dGVzKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCWJ1ZiA9IHJ1bnRpbWUtPm9zcy5idWZmZXI7CiAJCX0KQEAgLTE0MjksNyArMTQzMyw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3NmcmFtZXNfdCBmcmFtZXMsIGZyYW1lczE7CiAjaWZkZWYgQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlMKLQljaGFyIF9fdXNlciAqZmluYWxfZHN0ID0gKGNoYXIgX191c2VyICopYnVmOworCWNoYXIgX191c2VyICpmaW5hbF9kc3QgPSAoY2hhciBfX2ZvcmNlIF9fdXNlciAqKWJ1ZjsKIAlpZiAocnVudGltZS0+b3NzLnBsdWdpbl9maXJzdCkgewogCQlzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqY2hhbm5lbHM7CiAJCXNpemVfdCBvc3NfZnJhbWVfYnl0ZXMgPSAocnVudGltZS0+b3NzLnBsdWdpbl9sYXN0LT5kc3Rfd2lkdGggKiBydW50aW1lLT5vc3MucGx1Z2luX2xhc3QtPmRzdF9mb3JtYXQuY2hhbm5lbHMpIC8gODsKQEAgLTE1NDksNiArMTU1Myw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKIAlzc2l6ZV90IHJlc3VsdCA9IDA7CisJc25kX3BjbV9zdGF0ZV90IHN0YXRlOwogCWxvbmcgcmVzOwogCXdhaXRfcXVldWVfdCB3YWl0OwogCkBAIC0xNTcwLDkgKzE1NzUsOSBAQAogCQlyZXN1bHQgPSAwOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOwotCQlyZXMgPSBydW50aW1lLT5zdGF0dXMtPnN0YXRlOworCQlzdGF0ZSA9IHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGU7CiAJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQkJaWYgKHJlcyAhPSBTTkRSVl9QQ01fU1RBVEVfUlVOTklORykgeworCQlpZiAoc3RhdGUgIT0gU05EUlZfUENNX1NUQVRFX1JVTk5JTkcpIHsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY1OCw3ICsxNjYzLDcgQEAKIAkJCQkJCQkJICAgc2l6ZTEpOwogCQkJCQlzaXplMSAvPSBydW50aW1lLT5jaGFubmVsczsgLyogZnJhbWVzICovCiAJCQkJCWZzID0gc25kX2VudGVyX3VzZXIoKTsKLQkJCQkJc25kX3BjbV9saWJfd3JpdGUoc3Vic3RyZWFtLCAodm9pZCBfX3VzZXIgKilydW50aW1lLT5vc3MuYnVmZmVyLCBzaXplMSk7CisJCQkJCXNuZF9wY21fbGliX3dyaXRlKHN1YnN0cmVhbSwgKHZvaWQgX19mb3JjZSBfX3VzZXIgKilydW50aW1lLT5vc3MuYnVmZmVyLCBzaXplMSk7CiAJCQkJCXNuZF9sZWF2ZV91c2VyKGZzKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKHJ1bnRpbWUtPmFjY2VzcyA9PSBTTkRSVl9QQ01fQUNDRVNTX1JXX05PTklOVEVSTEVBVkVEKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmMKaW5kZXggNjc1MWRhYS4uNzFjYzNkZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJcmV0dXJuIGZyYW1lczsKIH0KIAotc3RhdGljIGludCBzbmRfcGNtX3BsdWdfZm9ybWF0cyhzdHJ1Y3Qgc25kX21hc2sgKm1hc2ssIGludCBmb3JtYXQpCitzdGF0aWMgaW50IHNuZF9wY21fcGx1Z19mb3JtYXRzKHN0cnVjdCBzbmRfbWFzayAqbWFzaywgc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpCiB7CiAJc3RydWN0IHNuZF9tYXNrIGZvcm1hdHMgPSAqbWFzazsKIAl1NjQgbGluZm10cyA9IChTTkRSVl9QQ01fRk1UQklUX1U4IHwgU05EUlZfUENNX0ZNVEJJVF9TOCB8CkBAIC0yNzYsMTYgKzI3NiwxNiBAQAogCQkgICAgICAgU05EUlZfUENNX0ZNVEJJVF9VMjRfM0JFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0JFIHwKIAkJICAgICAgIFNORFJWX1BDTV9GTVRCSVRfVTMyX0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAogCQkgICAgICAgU05EUlZfUENNX0ZNVEJJVF9VMzJfQkUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSk7Ci0Jc25kX21hc2tfc2V0KCZmb3JtYXRzLCBTTkRSVl9QQ01fRk9STUFUX01VX0xBVyk7CisJc25kX21hc2tfc2V0KCZmb3JtYXRzLCAoX19mb3JjZSBpbnQpU05EUlZfUENNX0ZPUk1BVF9NVV9MQVcpOwogCQogCWlmIChmb3JtYXRzLmJpdHNbMF0gJiAodTMyKWxpbmZtdHMpCiAJCWZvcm1hdHMuYml0c1swXSB8PSAodTMyKWxpbmZtdHM7CiAJaWYgKGZvcm1hdHMuYml0c1sxXSAmICh1MzIpKGxpbmZtdHMgPj4gMzIpKQogCQlmb3JtYXRzLmJpdHNbMV0gfD0gKHUzMikobGluZm10cyA+PiAzMik7Ci0JcmV0dXJuIHNuZF9tYXNrX3Rlc3QoJmZvcm1hdHMsIGZvcm1hdCk7CisJcmV0dXJuIHNuZF9tYXNrX3Rlc3QoJmZvcm1hdHMsIChfX2ZvcmNlIGludClmb3JtYXQpOwogfQogCi1zdGF0aWMgaW50IHByZWZlcnJlZF9mb3JtYXRzW10gPSB7CitzdGF0aWMgc25kX3BjbV9mb3JtYXRfdCBwcmVmZXJyZWRfZm9ybWF0c1tdID0gewogCVNORFJWX1BDTV9GT1JNQVRfUzE2X0xFLAogCVNORFJWX1BDTV9GT1JNQVRfUzE2X0JFLAogCVNORFJWX1BDTV9GT1JNQVRfVTE2X0xFLApAQCAtMzA2LDI0ICszMDYsMjUgQEAKIAlTTkRSVl9QQ01fRk9STUFUX1U4CiB9OwogCi1pbnQgc25kX3BjbV9wbHVnX3NsYXZlX2Zvcm1hdChpbnQgZm9ybWF0LCBzdHJ1Y3Qgc25kX21hc2sgKmZvcm1hdF9tYXNrKQorc25kX3BjbV9mb3JtYXRfdCBzbmRfcGNtX3BsdWdfc2xhdmVfZm9ybWF0KHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0LAorCQkJCQkgICBzdHJ1Y3Qgc25kX21hc2sgKmZvcm1hdF9tYXNrKQogewogCWludCBpOwogCi0JaWYgKHNuZF9tYXNrX3Rlc3QoZm9ybWF0X21hc2ssIGZvcm1hdCkpCisJaWYgKHNuZF9tYXNrX3Rlc3QoZm9ybWF0X21hc2ssIChfX2ZvcmNlIGludClmb3JtYXQpKQogCQlyZXR1cm4gZm9ybWF0OwotCWlmICghIHNuZF9wY21fcGx1Z19mb3JtYXRzKGZvcm1hdF9tYXNrLCBmb3JtYXQpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXNuZF9wY21fcGx1Z19mb3JtYXRzKGZvcm1hdF9tYXNrLCBmb3JtYXQpKQorCQlyZXR1cm4gKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCktRUlOVkFMOwogCWlmIChzbmRfcGNtX2Zvcm1hdF9saW5lYXIoZm9ybWF0KSkgewogCQl1bnNpZ25lZCBpbnQgd2lkdGggPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChmb3JtYXQpOwogCQlpbnQgdW5zaWduZCA9IHNuZF9wY21fZm9ybWF0X3Vuc2lnbmVkKGZvcm1hdCkgPiAwOwogCQlpbnQgYmlnID0gc25kX3BjbV9mb3JtYXRfYmlnX2VuZGlhbihmb3JtYXQpID4gMDsKIAkJdW5zaWduZWQgaW50IGJhZG5lc3MsIGJlc3QgPSAtMTsKLQkJaW50IGJlc3RfZm9ybWF0ID0gLTE7CisJCXNuZF9wY21fZm9ybWF0X3QgYmVzdF9mb3JtYXQgPSAoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KS0xOwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVmZXJyZWRfZm9ybWF0cyk7IGkrKykgewotCQkJaW50IGYgPSBwcmVmZXJyZWRfZm9ybWF0c1tpXTsKKwkJCXNuZF9wY21fZm9ybWF0X3QgZiA9IHByZWZlcnJlZF9mb3JtYXRzW2ldOwogCQkJdW5zaWduZWQgaW50IHc7Ci0JCQlpZiAoIXNuZF9tYXNrX3Rlc3QoZm9ybWF0X21hc2ssIGYpKQorCQkJaWYgKCFzbmRfbWFza190ZXN0KGZvcm1hdF9tYXNrLCAoX19mb3JjZSBpbnQpZikpCiAJCQkJY29udGludWU7CiAJCQl3ID0gc25kX3BjbV9mb3JtYXRfd2lkdGgoZik7CiAJCQlpZiAodyA+PSB3aWR0aCkKQEAgLTMzNywxNyArMzM4LDIwIEBACiAJCQkJYmVzdCA9IGJhZG5lc3M7CiAJCQl9CiAJCX0KLQkJcmV0dXJuIGJlc3RfZm9ybWF0ID49IDAgPyBiZXN0X2Zvcm1hdCA6IC1FSU5WQUw7CisJCWlmICgoX19mb3JjZSBpbnQpYmVzdF9mb3JtYXQgPj0gMCkKKwkJCXJldHVybiBiZXN0X2Zvcm1hdDsKKwkJZWxzZQorCQkJcmV0dXJuIChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpLUVJTlZBTDsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKGZvcm1hdCkgewogCQljYXNlIFNORFJWX1BDTV9GT1JNQVRfTVVfTEFXOgogCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlZmVycmVkX2Zvcm1hdHMpOyArK2kpIHsKLQkJCQlpbnQgZm9ybWF0MSA9IHByZWZlcnJlZF9mb3JtYXRzW2ldOwotCQkJCWlmIChzbmRfbWFza190ZXN0KGZvcm1hdF9tYXNrLCBmb3JtYXQxKSkKKwkJCQlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDEgPSBwcmVmZXJyZWRfZm9ybWF0c1tpXTsKKwkJCQlpZiAoc25kX21hc2tfdGVzdChmb3JtYXRfbWFzaywgKF9fZm9yY2UgaW50KWZvcm1hdDEpKQogCQkJCQlyZXR1cm4gZm9ybWF0MTsKIAkJCX0KIAkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpLUVJTlZBTDsKIAkJfQogCX0KIH0KQEAgLTM1OSw3ICszNjMsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbl9mb3JtYXQgdG1wZm9ybWF0OwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbl9mb3JtYXQgZHN0Zm9ybWF0OwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbl9mb3JtYXQgc3JjZm9ybWF0OwotCWludCBzcmNfYWNjZXNzLCBkc3RfYWNjZXNzOworCXNuZF9wY21fYWNjZXNzX3Qgc3JjX2FjY2VzcywgZHN0X2FjY2VzczsKIAlzdHJ1Y3Qgc25kX3BjbV9wbHVnaW4gKnBsdWdpbiA9IE5VTEw7CiAJaW50IGVycjsKIAlpbnQgc3RyZWFtID0gc25kX3BjbV9wbHVnX3N0cmVhbShwbHVnKTsKQEAgLTY0MSw3ICs2NDUsNyBAQAogfQogCiBpbnQgc25kX3BjbV9hcmVhX3NpbGVuY2UoY29uc3Qgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9hcmVhICpkc3RfYXJlYSwgc2l6ZV90IGRzdF9vZmZzZXQsCi0JCQkgc2l6ZV90IHNhbXBsZXMsIGludCBmb3JtYXQpCisJCQkgc2l6ZV90IHNhbXBsZXMsIHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQogewogCS8qIEZJWE1FOiBzdWIgYnl0ZSByZXNvbHV0aW9uIGFuZCBvZGQgZHN0X29mZnNldCAqLwogCXVuc2lnbmVkIGNoYXIgKmRzdDsKQEAgLTY4OCw3ICs2OTIsNyBAQAogCiBpbnQgc25kX3BjbV9hcmVhX2NvcHkoY29uc3Qgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9hcmVhICpzcmNfYXJlYSwgc2l6ZV90IHNyY19vZmZzZXQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfYXJlYSAqZHN0X2FyZWEsIHNpemVfdCBkc3Rfb2Zmc2V0LAotCQkgICAgICBzaXplX3Qgc2FtcGxlcywgaW50IGZvcm1hdCkKKwkJICAgICAgc2l6ZV90IHNhbXBsZXMsIHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQogewogCS8qIEZJWE1FOiBzdWIgYnl0ZSByZXNvbHV0aW9uIGFuZCBvZGQgZHN0X29mZnNldCAqLwogCWNoYXIgKnNyYywgKmRzdDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaCBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaAppbmRleCBiOWFmYWI2Li5hNTAzNWMyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCkBAIC00Niw3ICs0Niw3IEBACiB9OwogCiBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fZm9ybWF0IHsKLQlpbnQgZm9ybWF0OworCXNuZF9wY21fZm9ybWF0X3QgZm9ybWF0OwogCXVuc2lnbmVkIGludCByYXRlOwogCXVuc2lnbmVkIGludCBjaGFubmVsczsKIH07CkBAIC01OCw3ICs1OCw3IEBACiAJc3RydWN0IHNuZF9wY21fcGx1Z2luX2Zvcm1hdCBkc3RfZm9ybWF0OwkvKiBkZXN0aW5hdGlvbiBmb3JtYXQgKi8KIAlpbnQgc3JjX3dpZHRoOwkJCS8qIHNhbXBsZSB3aWR0aCBpbiBiaXRzICovCiAJaW50IGRzdF93aWR0aDsJCQkvKiBzYW1wbGUgd2lkdGggaW4gYml0cyAqLwotCWludCBhY2Nlc3M7CisJc25kX3BjbV9hY2Nlc3NfdCBhY2Nlc3M7CiAJc25kX3BjbV9zZnJhbWVzX3QgKCpzcmNfZnJhbWVzKShzdHJ1Y3Qgc25kX3BjbV9wbHVnaW4gKnBsdWdpbiwgc25kX3BjbV91ZnJhbWVzX3QgZHN0X2ZyYW1lcyk7CiAJc25kX3BjbV9zZnJhbWVzX3QgKCpkc3RfZnJhbWVzKShzdHJ1Y3Qgc25kX3BjbV9wbHVnaW4gKnBsdWdpbiwgc25kX3BjbV91ZnJhbWVzX3Qgc3JjX2ZyYW1lcyk7CiAJc25kX3BjbV9zZnJhbWVzX3QgKCpjbGllbnRfY2hhbm5lbHMpKHN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luLApAQCAtMTI1LDcgKzEyNSw4IEBACiAJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpzbGF2ZV9wYXJhbXMpOwogCi1pbnQgc25kX3BjbV9wbHVnX3NsYXZlX2Zvcm1hdChpbnQgZm9ybWF0LCBzdHJ1Y3Qgc25kX21hc2sgKmZvcm1hdF9tYXNrKTsKK3NuZF9wY21fZm9ybWF0X3Qgc25kX3BjbV9wbHVnX3NsYXZlX2Zvcm1hdChzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCwKKwkJCQkJICAgc3RydWN0IHNuZF9tYXNrICpmb3JtYXRfbWFzayk7CiAKIGludCBzbmRfcGNtX3BsdWdpbl9hcHBlbmQoc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4pOwogCkBAIC0xNDYsMTIgKzE0NywxMiBAQAogCiBpbnQgc25kX3BjbV9hcmVhX3NpbGVuY2UoY29uc3Qgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9hcmVhICpkc3RfY2hhbm5lbCwKIAkJCSBzaXplX3QgZHN0X29mZnNldCwKLQkJCSBzaXplX3Qgc2FtcGxlcywgaW50IGZvcm1hdCk7CisJCQkgc2l6ZV90IHNhbXBsZXMsIHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKIGludCBzbmRfcGNtX2FyZWFfY29weShjb25zdCBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2FyZWEgKnNyY19jaGFubmVsLAogCQkgICAgICBzaXplX3Qgc3JjX29mZnNldCwKIAkJICAgICAgY29uc3Qgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9hcmVhICpkc3RfY2hhbm5lbCwKIAkJICAgICAgc2l6ZV90IGRzdF9vZmZzZXQsCi0JCSAgICAgIHNpemVfdCBzYW1wbGVzLCBpbnQgZm9ybWF0KTsKKwkJICAgICAgc2l6ZV90IHNhbXBsZXMsIHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKIAogdm9pZCAqc25kX3BjbV9wbHVnX2J1Zl9hbGxvYyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsdWcsIHNuZF9wY21fdWZyYW1lc190IHNpemUpOwogdm9pZCBzbmRfcGNtX3BsdWdfYnVmX3VubG9jayhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsdWcsIHZvaWQgKnB0cik7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9yb3V0ZS5jIGIvc291bmQvY29yZS9vc3Mvcm91dGUuYwppbmRleCBiYmUyNWQ4Li5jODE3MWY1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9yb3V0ZS5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3JvdXRlLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJwY21fcGx1Z2luLmgiCiAKIHN0YXRpYyB2b2lkIHplcm9fYXJlYXMoc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKmR2cCwgaW50IG5kc3RzLAotCQkgICAgICAgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLCBpbnQgZm9ybWF0KQorCQkgICAgICAgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLCBzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKIHsKIAlpbnQgZHN0ID0gMDsKIAlmb3IgKDsgZHN0IDwgbmRzdHM7ICsrZHN0KSB7CkBAIC0zOCw3ICszOCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2FyZWEoY29uc3Qgc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKnNyY19jaGFubmVsLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqZHN0X2NoYW5uZWwsCi0JCQkgICAgIHNuZF9wY21fdWZyYW1lc190IGZyYW1lcywgaW50IGZvcm1hdCkKKwkJCSAgICAgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLCBzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKIHsKIAlkc3RfY2hhbm5lbC0+ZW5hYmxlZCA9IDE7CiAJc25kX3BjbV9hcmVhX2NvcHkoJnNyY19jaGFubmVsLT5hcmVhLCAwLCAmZHN0X2NoYW5uZWwtPmFyZWEsIDAsIGZyYW1lcywgZm9ybWF0KTsKQEAgLTUxLDcgKzUxLDcgQEAKIHsKIAlpbnQgbnNyY3MsIG5kc3RzLCBkc3Q7CiAJc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKmR2cDsKLQlpbnQgZm9ybWF0OworCXNuZF9wY21fZm9ybWF0X3QgZm9ybWF0OwogCiAJaWYgKHNuZF9CVUdfT04oIXBsdWdpbiB8fCAhc3JjX2NoYW5uZWxzIHx8ICFkc3RfY2hhbm5lbHMpKQogCQlyZXR1cm4gLUVOWElPOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggNmI0YjEyOC4uZWU5YWJiMiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC0yMTEsOSArMjExLDkgQEAKIAogY29uc3QgY2hhciAqc25kX3BjbV9mb3JtYXRfbmFtZShzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKIHsKLQlpZiAoZm9ybWF0ID49IEFSUkFZX1NJWkUoc25kX3BjbV9mb3JtYXRfbmFtZXMpKQorCWlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZm9ybWF0ID49IEFSUkFZX1NJWkUoc25kX3BjbV9mb3JtYXRfbmFtZXMpKQogCQlyZXR1cm4gIlVua25vd24iOwotCXJldHVybiBzbmRfcGNtX2Zvcm1hdF9uYW1lc1tmb3JtYXRdOworCXJldHVybiBzbmRfcGNtX2Zvcm1hdF9uYW1lc1soX19mb3JjZSB1bnNpZ25lZCBpbnQpZm9ybWF0XTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9wY21fZm9ybWF0X25hbWUpOwogCkBAIC0yNjksMTIgKzI2OSwxMiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqc25kX3BjbV9hY2Nlc3NfbmFtZShzbmRfcGNtX2FjY2Vzc190IGFjY2VzcykKIHsKLQlyZXR1cm4gc25kX3BjbV9hY2Nlc3NfbmFtZXNbYWNjZXNzXTsKKwlyZXR1cm4gc25kX3BjbV9hY2Nlc3NfbmFtZXNbKF9fZm9yY2UgaW50KWFjY2Vzc107CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzbmRfcGNtX3N1YmZvcm1hdF9uYW1lKHNuZF9wY21fc3ViZm9ybWF0X3Qgc3ViZm9ybWF0KQogewotCXJldHVybiBzbmRfcGNtX3N1YmZvcm1hdF9uYW1lc1tzdWJmb3JtYXRdOworCXJldHVybiBzbmRfcGNtX3N1YmZvcm1hdF9uYW1lc1soX19mb3JjZSBpbnQpc3ViZm9ybWF0XTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKnNuZF9wY21fdHN0YW1wX21vZGVfbmFtZShpbnQgbW9kZSkKQEAgLTI4NCw3ICsyODQsNyBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqc25kX3BjbV9zdGF0ZV9uYW1lKHNuZF9wY21fc3RhdGVfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gc25kX3BjbV9zdGF0ZV9uYW1lc1tzdGF0ZV07CisJcmV0dXJuIHNuZF9wY21fc3RhdGVfbmFtZXNbKF9fZm9yY2UgaW50KXN0YXRlXTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9taXNjLmMgYi9zb3VuZC9jb3JlL3BjbV9taXNjLmMKaW5kZXggNDM0YWYzYy4uODhmMDJlMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbWlzYy5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX21pc2MuYwpAQCAtMzUsNyArMzUsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIHNpbGVuY2VbOF07CS8qIHNpbGVuY2UgZGF0YSB0byBmaWxsICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjbV9mb3JtYXRfZGF0YSBwY21fZm9ybWF0c1tTTkRSVl9QQ01fRk9STUFUX0xBU1QrMV0gPSB7CisvKiB3ZSBkbyBsb3RzIG9mIGNhbGN1bGF0aW9ucyBvbiBzbmRfcGNtX2Zvcm1hdF90OyBzaHV0IHVwIHNwYXJzZSAqLworI2RlZmluZSBJTlQJX19mb3JjZSBpbnQKKworc3RhdGljIHN0cnVjdCBwY21fZm9ybWF0X2RhdGEgcGNtX2Zvcm1hdHNbKElOVClTTkRSVl9QQ01fRk9STUFUX0xBU1QrMV0gPSB7CiAJW1NORFJWX1BDTV9GT1JNQVRfUzhdID0gewogCQkud2lkdGggPSA4LCAucGh5cyA9IDgsIC5sZSA9IC0xLCAuc2lnbmQgPSAxLAogCQkuc2lsZW5jZSA9IHt9LApAQCAtMjE1LDkgKzIxOCw5IEBACiBpbnQgc25kX3BjbV9mb3JtYXRfc2lnbmVkKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQogewogCWludCB2YWw7Ci0JaWYgKGZvcm1hdCA8IDAgfHwgZm9ybWF0ID4gU05EUlZfUENNX0ZPUk1BVF9MQVNUKQorCWlmICgoSU5UKWZvcm1hdCA8IDAgfHwgKElOVClmb3JtYXQgPiAoSU5UKVNORFJWX1BDTV9GT1JNQVRfTEFTVCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCh2YWwgPSBwY21fZm9ybWF0c1tmb3JtYXRdLnNpZ25kKSA8IDApCisJaWYgKCh2YWwgPSBwY21fZm9ybWF0c1soSU5UKWZvcm1hdF0uc2lnbmQpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTI2Niw5ICsyNjksOSBAQAogaW50IHNuZF9wY21fZm9ybWF0X2xpdHRsZV9lbmRpYW4oc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpCiB7CiAJaW50IHZhbDsKLQlpZiAoZm9ybWF0IDwgMCB8fCBmb3JtYXQgPiBTTkRSVl9QQ01fRk9STUFUX0xBU1QpCisJaWYgKChJTlQpZm9ybWF0IDwgMCB8fCAoSU5UKWZvcm1hdCA+IChJTlQpU05EUlZfUENNX0ZPUk1BVF9MQVNUKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKHZhbCA9IHBjbV9mb3JtYXRzW2Zvcm1hdF0ubGUpIDwgMCkKKwlpZiAoKHZhbCA9IHBjbV9mb3JtYXRzWyhJTlQpZm9ybWF0XS5sZSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gdmFsOwogfQpAQCAtMzA0LDkgKzMwNyw5IEBACiBpbnQgc25kX3BjbV9mb3JtYXRfd2lkdGgoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpCiB7CiAJaW50IHZhbDsKLQlpZiAoZm9ybWF0IDwgMCB8fCBmb3JtYXQgPiBTTkRSVl9QQ01fRk9STUFUX0xBU1QpCisJaWYgKChJTlQpZm9ybWF0IDwgMCB8fCAoSU5UKWZvcm1hdCA+IChJTlQpU05EUlZfUENNX0ZPUk1BVF9MQVNUKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKHZhbCA9IHBjbV9mb3JtYXRzW2Zvcm1hdF0ud2lkdGgpID09IDApCisJaWYgKCh2YWwgPSBwY21fZm9ybWF0c1soSU5UKWZvcm1hdF0ud2lkdGgpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiB2YWw7CiB9CkBAIC0zMjMsOSArMzI2LDkgQEAKIGludCBzbmRfcGNtX2Zvcm1hdF9waHlzaWNhbF93aWR0aChzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKIHsKIAlpbnQgdmFsOwotCWlmIChmb3JtYXQgPCAwIHx8IGZvcm1hdCA+IFNORFJWX1BDTV9GT1JNQVRfTEFTVCkKKwlpZiAoKElOVClmb3JtYXQgPCAwIHx8IChJTlQpZm9ybWF0ID4gKElOVClTTkRSVl9QQ01fRk9STUFUX0xBU1QpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgodmFsID0gcGNtX2Zvcm1hdHNbZm9ybWF0XS5waHlzKSA9PSAwKQorCWlmICgodmFsID0gcGNtX2Zvcm1hdHNbKElOVClmb3JtYXRdLnBoeXMpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiB2YWw7CiB9CkBAIC0zNTgsMTEgKzM2MSwxMSBAQAogICovCiBjb25zdCB1bnNpZ25lZCBjaGFyICpzbmRfcGNtX2Zvcm1hdF9zaWxlbmNlXzY0KHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQogewotCWlmIChmb3JtYXQgPCAwIHx8IGZvcm1hdCA+IFNORFJWX1BDTV9GT1JNQVRfTEFTVCkKKwlpZiAoKElOVClmb3JtYXQgPCAwIHx8IChJTlQpZm9ybWF0ID4gKElOVClTTkRSVl9QQ01fRk9STUFUX0xBU1QpCiAJCXJldHVybiBOVUxMOwotCWlmICghIHBjbV9mb3JtYXRzW2Zvcm1hdF0ucGh5cykKKwlpZiAoISBwY21fZm9ybWF0c1soSU5UKWZvcm1hdF0ucGh5cykKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHBjbV9mb3JtYXRzW2Zvcm1hdF0uc2lsZW5jZTsKKwlyZXR1cm4gcGNtX2Zvcm1hdHNbKElOVClmb3JtYXRdLnNpbGVuY2U7CiB9CiAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9mb3JtYXRfc2lsZW5jZV82NCk7CkBAIC0zODIsMTYgKzM4NSwxNiBAQAogCWludCB3aWR0aDsKIAl1bnNpZ25lZCBjaGFyICpkc3QsICpwYXQ7CiAKLQlpZiAoZm9ybWF0IDwgMCB8fCBmb3JtYXQgPiBTTkRSVl9QQ01fRk9STUFUX0xBU1QpCisJaWYgKChJTlQpZm9ybWF0IDwgMCB8fCAoSU5UKWZvcm1hdCA+IChJTlQpU05EUlZfUENNX0ZPUk1BVF9MQVNUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc2FtcGxlcyA9PSAwKQogCQlyZXR1cm4gMDsKLQl3aWR0aCA9IHBjbV9mb3JtYXRzW2Zvcm1hdF0ucGh5czsgLyogcGh5c2ljYWwgd2lkdGggKi8KLQlwYXQgPSBwY21fZm9ybWF0c1tmb3JtYXRdLnNpbGVuY2U7CisJd2lkdGggPSBwY21fZm9ybWF0c1soSU5UKWZvcm1hdF0ucGh5czsgLyogcGh5c2ljYWwgd2lkdGggKi8KKwlwYXQgPSBwY21fZm9ybWF0c1soSU5UKWZvcm1hdF0uc2lsZW5jZTsKIAlpZiAoISB3aWR0aCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyogc2lnbmVkIG9yIDEgYnl0ZSBkYXRhICovCi0JaWYgKHBjbV9mb3JtYXRzW2Zvcm1hdF0uc2lnbmQgPT0gMSB8fCB3aWR0aCA8PSA4KSB7CisJaWYgKHBjbV9mb3JtYXRzWyhJTlQpZm9ybWF0XS5zaWduZCA9PSAxIHx8IHdpZHRoIDw9IDgpIHsKIAkJdW5zaWduZWQgaW50IGJ5dGVzID0gc2FtcGxlcyAqIHdpZHRoIC8gODsKIAkJbWVtc2V0KGRhdGEsICpwYXQsIGJ5dGVzKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IDRiZTQ1ZTcuLmFlNDJiNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC05NDEsNyArOTQxLDcgQEAKICAqCiAgKiBUaGUgc3RhdGUgb2YgZWFjaCBzdHJlYW0gaXMgdGhlbiBjaGFuZ2VkIHRvIHRoZSBnaXZlbiBzdGF0ZSB1bmNvbmRpdGlvbmFsbHkuCiAgKi8KLWludCBzbmRfcGNtX3N0b3Aoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBzdGF0ZSkKK2ludCBzbmRfcGNtX3N0b3Aoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHNuZF9wY21fc3RhdGVfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gc25kX3BjbV9hY3Rpb24oJnNuZF9wY21fYWN0aW9uX3N0b3AsIHN1YnN0cmVhbSwgc3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCmluZGV4IDk5YTQ4NWYuLmYyNDM2ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKQEAgLTEwNTIsNyArMTA1Miw3IEBACiAJCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCQkJaWYgKGNsaWVudC0+Y29udmVydDMyICYmIHNuZF9zZXFfZXZfaXNfdmFydXNyKCZldmVudCkpIHsKLQkJCQl2b2lkICpwdHIgPSBjb21wYXRfcHRyKGV2ZW50LmRhdGEucmF3MzIuZFsxXSk7CisJCQkJdm9pZCAqcHRyID0gKHZvaWQgX19mb3JjZSAqKWNvbXBhdF9wdHIoZXZlbnQuZGF0YS5yYXczMi5kWzFdKTsKIAkJCQlldmVudC5kYXRhLmV4dC5wdHIgPSBwdHI7CiAJCQl9CiAjZW5kaWYKQEAgLTI0MDcsNyArMjQwNyw3IEBACiAJaWYgKGNsaWVudCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOWElPOwogCWZzID0gc25kX2VudGVyX3VzZXIoKTsKLQlyZXN1bHQgPSBzbmRfc2VxX2RvX2lvY3RsKGNsaWVudCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCXJlc3VsdCA9IHNuZF9zZXFfZG9faW9jdGwoY2xpZW50LCBjbWQsICh2b2lkIF9fZm9yY2UgX191c2VyICopYXJnKTsKIAlzbmRfbGVhdmVfdXNlcihmcyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI0OTcsOSArMjQ5Nyw2IEBACiB9CiAKIAotdm9pZCBzbmRfc2VxX2luZm9fcG9vbChzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCi0JCSAgICAgICBzdHJ1Y3Qgc25kX3NlcV9wb29sICpwb29sLCBjaGFyICpzcGFjZSk7Ci0KIC8qIGV4cG9ydGVkIHRvIHNlcV9pbmZvLmMgKi8KIHZvaWQgc25kX3NlcV9pbmZvX2NsaWVudHNfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LCAKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfbWVtb3J5LmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfbWVtb3J5LmMKaW5kZXggN2ZiNTU0My4uN2Y1MGMxNCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX21lbW9yeS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9tZW1vcnkuYwpAQCAtODYsNyArODYsNyBAQAogCiAJaWYgKGV2ZW50LT5kYXRhLmV4dC5sZW4gJiBTTkRSVl9TRVFfRVhUX1VTUlBUUikgewogCQljaGFyIGJ1ZlszMl07Ci0JCWNoYXIgX191c2VyICpjdXJwdHIgPSAoY2hhciBfX3VzZXIgKilldmVudC0+ZGF0YS5leHQucHRyOworCQljaGFyIF9fdXNlciAqY3VycHRyID0gKGNoYXIgX19mb3JjZSBfX3VzZXIgKilldmVudC0+ZGF0YS5leHQucHRyOwogCQl3aGlsZSAobGVuID4gMCkgewogCQkJaW50IHNpemUgPSBzaXplb2YoYnVmKTsKIAkJCWlmIChsZW4gPCBzaXplKQpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJaWYgKGV2ZW50LT5kYXRhLmV4dC5sZW4gJiBTTkRSVl9TRVFfRVhUX1VTUlBUUikgewogCQlpZiAoISBpbl9rZXJuZWwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgKHZvaWQgX191c2VyICopZXZlbnQtPmRhdGEuZXh0LnB0ciwgbGVuKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgKHZvaWQgX19mb3JjZSBfX3VzZXIgKilldmVudC0+ZGF0YS5leHQucHRyLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiBuZXdsZW47CiAJfQpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCQkJdG1wLT5ldmVudCA9IHNyYy0+ZXZlbnQ7CiAJCQkJc3JjID0gc3JjLT5uZXh0OwogCQkJfSBlbHNlIGlmIChpc191c3JwdHIpIHsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoJnRtcC0+ZXZlbnQsIChjaGFyIF9fdXNlciAqKWJ1Ziwgc2l6ZSkpIHsKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIoJnRtcC0+ZXZlbnQsIChjaGFyIF9fZm9yY2UgX191c2VyICopYnVmLCBzaXplKSkgewogCQkJCQllcnIgPSAtRUZBVUxUOwogCQkJCQlnb3RvIF9fZXJyb3I7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX21lbW9yeS5oIGIvc291bmQvY29yZS9zZXEvc2VxX21lbW9yeS5oCmluZGV4IDYzZTkxNDMuLjRhMmVjNzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9tZW1vcnkuaAorKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfbWVtb3J5LmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxzb3VuZC9zZXFfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCitzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyOworCiAvKiBjb250YWluZXIgZm9yIHNlcXVlbmNlciBldmVudCAoaW50ZXJuYWwgdXNlKSAqLwogc3RydWN0IHNuZF9zZXFfZXZlbnRfY2VsbCB7CiAJc3RydWN0IHNuZF9zZXFfZXZlbnQgZXZlbnQ7CkBAIC05OSw1ICsxMDEsNyBAQAogLyogcG9sbGluZyAqLwogaW50IHNuZF9zZXFfcG9vbF9wb2xsX3dhaXQoc3RydWN0IHNuZF9zZXFfcG9vbCAqcG9vbCwgc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpOwogCit2b2lkIHNuZF9zZXFfaW5mb19wb29sKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKKwkJICAgICAgIHN0cnVjdCBzbmRfc2VxX3Bvb2wgKnBvb2wsIGNoYXIgKnNwYWNlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfcG9ydHMuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jCmluZGV4IDNiZjdkNzMuLmUxMmJjZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jCkBAIC00MTIsNyArNDEyLDcgQEAKICAqIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIGRldmljZXMgKHNlZSBzZXFfbWlkaS5jKS4KICAqCiAgKiBJZiBjYWxsYmFja19hbGwgb3B0aW9uIGlzIHNldCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQKLSAqIGF0IGVhY2ggY29ubm5lY3Rpb24vZGlzY29ubmVjdGlvbi4gCisgKiBhdCBlYWNoIGNvbm5lY3Rpb24vZGlzY29ubmVjdGlvbi4gCiAgKi8KIAogc3RhdGljIGludCBzdWJzY3JpYmVfcG9ydChzdHJ1Y3Qgc25kX3NlcV9jbGllbnQgKmNsaWVudCwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvdGltZXIuYyBiL3NvdW5kL2NvcmUvdGltZXIuYwppbmRleCBlZDAxNjMyOS4uN2MxY2JmMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtMTg2LDkgKzE4Niw4IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkobWFzdGVyLCAmdGltZXItPm9wZW5fbGlzdF9oZWFkLCBvcGVuX2xpc3QpIHsKIAkJCWlmIChzbGF2ZS0+c2xhdmVfY2xhc3MgPT0gbWFzdGVyLT5zbGF2ZV9jbGFzcyAmJgogCQkJICAgIHNsYXZlLT5zbGF2ZV9pZCA9PSBtYXN0ZXItPnNsYXZlX2lkKSB7Ci0JCQkJbGlzdF9kZWwoJnNsYXZlLT5vcGVuX2xpc3QpOwotCQkJCWxpc3RfYWRkX3RhaWwoJnNsYXZlLT5vcGVuX2xpc3QsCi0JCQkJCSAgICAgICZtYXN0ZXItPnNsYXZlX2xpc3RfaGVhZCk7CisJCQkJbGlzdF9tb3ZlX3RhaWwoJnNsYXZlLT5vcGVuX2xpc3QsCisJCQkJCSAgICAgICAmbWFzdGVyLT5zbGF2ZV9saXN0X2hlYWQpOwogCQkJCXNwaW5fbG9ja19pcnEoJnNsYXZlX2FjdGl2ZV9sb2NrKTsKIAkJCQlzbGF2ZS0+bWFzdGVyID0gbWFzdGVyOwogCQkJCXNsYXZlLT50aW1lciA9IG1hc3Rlci0+dGltZXI7CkBAIC00MTQsOCArNDEzLDcgQEAKIHN0YXRpYyBpbnQgc25kX3RpbWVyX3N0YXJ0MShzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lciwgc3RydWN0IHNuZF90aW1lcl9pbnN0YW5jZSAqdGltZXJpLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RpY2tzKQogewotCWxpc3RfZGVsKCZ0aW1lcmktPmFjdGl2ZV9saXN0KTsKLQlsaXN0X2FkZF90YWlsKCZ0aW1lcmktPmFjdGl2ZV9saXN0LCAmdGltZXItPmFjdGl2ZV9saXN0X2hlYWQpOworCWxpc3RfbW92ZV90YWlsKCZ0aW1lcmktPmFjdGl2ZV9saXN0LCAmdGltZXItPmFjdGl2ZV9saXN0X2hlYWQpOwogCWlmICh0aW1lci0+cnVubmluZykgewogCQlpZiAodGltZXItPmh3LmZsYWdzICYgU05EUlZfVElNRVJfSFdfU0xBVkUpCiAJCQlnb3RvIF9fc3RhcnRfbm93OwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS92bWFzdGVyLmMgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwppbmRleCAzYjliNTUwLi5hODk5NDhhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3ZtYXN0ZXIuYworKysgYi9zb3VuZC9jb3JlL3ZtYXN0ZXIuYwpAQCAtMTgsNyArMTgsNyBAQAogICogYSBzdWJzZXQgb2YgaW5mb3JtYXRpb24gcmV0dXJuZWQgdmlhIGN0bCBpbmZvIGNhbGxiYWNrCiAgKi8KIHN0cnVjdCBsaW5rX2N0bF9pbmZvIHsKLQlpbnQgdHlwZTsJCS8qIHZhbHVlIHR5cGUgKi8KKwlzbmRfY3RsX2VsZW1fdHlwZV90IHR5cGU7IC8qIHZhbHVlIHR5cGUgKi8KIAlpbnQgY291bnQ7CQkvKiBpdGVtIGNvdW50ICovCiAJaW50IG1pbl92YWwsIG1heF92YWw7CS8qIG1pbiwgbWF4IHZhbHVlcyAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvYWxvb3AuYyBiL3NvdW5kL2RyaXZlcnMvYWxvb3AuYwppbmRleCAxMmI0NGIwLi5hMGRhNzc1IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2Fsb29wLmMKKysrIGIvc291bmQvZHJpdmVycy9hbG9vcC5jCkBAIC00ODIsOCArNDgyLDkgQEAKIAkJCWNhYmxlLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV07CiAJdW5zaWduZWQgbG9uZyBkZWx0YV9wbGF5ID0gMCwgZGVsdGFfY2FwdCA9IDA7CiAJdW5zaWduZWQgaW50IHJ1bm5pbmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmY2FibGUtPmxvY2spOwkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FibGUtPmxvY2ssIGZsYWdzKTsKIAlydW5uaW5nID0gY2FibGUtPnJ1bm5pbmcgXiBjYWJsZS0+cGF1c2U7CiAJaWYgKHJ1bm5pbmcgJiAoMSA8PCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSkgewogCQlkZWx0YV9wbGF5ID0gamlmZmllcyAtIGRwY21fcGxheS0+bGFzdF9qaWZmaWVzOwpAQCAtNDk1LDEwICs0OTYsOCBAQAogCQlkcGNtX2NhcHQtPmxhc3RfamlmZmllcyArPSBkZWx0YV9jYXB0OwogCX0KIAotCWlmIChkZWx0YV9wbGF5ID09IDAgJiYgZGVsdGFfY2FwdCA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZjYWJsZS0+bG9jayk7Ci0JCXJldHVybiBydW5uaW5nOwotCX0KKwlpZiAoZGVsdGFfcGxheSA9PSAwICYmIGRlbHRhX2NhcHQgPT0gMCkKKwkJZ290byB1bmxvY2s7CiAJCQogCWlmIChkZWx0YV9wbGF5ID4gZGVsdGFfY2FwdCkgewogCQlsb29wYmFja19ieXRlcG9zX3VwZGF0ZShkcGNtX3BsYXksIGRlbHRhX3BsYXkgLSBkZWx0YV9jYXB0LApAQCAtNTEwLDE0ICs1MDksMTQgQEAKIAkJZGVsdGFfY2FwdCA9IGRlbHRhX3BsYXk7CiAJfQogCi0JaWYgKGRlbHRhX3BsYXkgPT0gMCAmJiBkZWx0YV9jYXB0ID09IDApIHsKLQkJc3Bpbl91bmxvY2soJmNhYmxlLT5sb2NrKTsKLQkJcmV0dXJuIHJ1bm5pbmc7Ci0JfQorCWlmIChkZWx0YV9wbGF5ID09IDAgJiYgZGVsdGFfY2FwdCA9PSAwKQorCQlnb3RvIHVubG9jazsKKwogCS8qIG5vdGUgZGVsdGFfY2FwdCA9PSBkZWx0YV9wbGF5IGF0IHRoaXMgbW9tZW50ICovCiAJbG9vcGJhY2tfYnl0ZXBvc191cGRhdGUoZHBjbV9jYXB0LCBkZWx0YV9jYXB0LCBCWVRFUE9TX1VQREFURV9DT1BZKTsKIAlsb29wYmFja19ieXRlcG9zX3VwZGF0ZShkcGNtX3BsYXksIGRlbHRhX3BsYXksIEJZVEVQT1NfVVBEQVRFX1BPU09OTFkpOwotCXNwaW5fdW5sb2NrKCZjYWJsZS0+bG9jayk7CisgdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhYmxlLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJ1bm5pbmc7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL0tjb25maWcgYi9zb3VuZC9maXJld2lyZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODZmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9maXJld2lyZS9LY29uZmlnCkBAIC0wLDAgKzEsMjUgQEAKK21lbnVjb25maWcgU05EX0ZJUkVXSVJFCisJYm9vbCAiRmlyZVdpcmUgc291bmQgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIEZJUkVXSVJFCisJZGVmYXVsdCB5CisJaGVscAorCSAgU3VwcG9ydCBmb3IgSUVFRS0xMzk0L0ZpcmVXaXJlL2lMaW5rIHNvdW5kIGRldmljZXMuCisKK2lmIFNORF9GSVJFV0lSRSAmJiBGSVJFV0lSRQorCitjb25maWcgU05EX0ZJUkVXSVJFX0xJQgorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBTTkRfUENNCisKK2NvbmZpZyBTTkRfRklSRVdJUkVfU1BFQUtFUlMKKwl0cmlzdGF0ZSAiRmlyZVdpcmUgc3BlYWtlcnMiCisJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX0ZJUkVXSVJFX0xJQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgR3JpZmZpbiBGaXJlV2F2ZSBTdXJyb3VuZAorCSAgYW5kIHRoZSBMYUNpZSBGaXJlV2lyZSBTcGVha2Vycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWZpcmV3aXJlLXNwZWFrZXJzLgorCitlbmRpZiAjIFNORF9GSVJFV0lSRQpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvTWFrZWZpbGUgYi9zb3VuZC9maXJld2lyZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWIxNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvZmlyZXdpcmUvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACitzbmQtZmlyZXdpcmUtbGliLW9ianMgOj0gbGliLm8gaXNvLXJlc291cmNlcy5vIHBhY2tldHMtYnVmZmVyLm8gXAorCQkJIGZjcC5vIGNtcC5vIGFtZHRwLm8KK3NuZC1maXJld2lyZS1zcGVha2Vycy1vYmpzIDo9IHNwZWFrZXJzLm8KKworb2JqLSQoQ09ORklHX1NORF9GSVJFV0lSRV9MSUIpICs9IHNuZC1maXJld2lyZS1saWIubworb2JqLSQoQ09ORklHX1NORF9GSVJFV0lSRV9TUEVBS0VSUykgKz0gc25kLWZpcmV3aXJlLXNwZWFrZXJzLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmMgYi9zb3VuZC9maXJld2lyZS9hbWR0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODE0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9maXJld2lyZS9hbWR0cC5jCkBAIC0wLDAgKzEsNTYyIEBACisvKgorICogQXVkaW8gYW5kIE11c2ljIERhdGEgVHJhbnNtaXNzaW9uIFByb3RvY29sIChJRUMgNjE4ODMtNikgc3RyZWFtcworICogd2l0aCBDb21tb24gSXNvY2hyb25vdXMgUGFja2V0IChJRUMgNjE4ODMtMSkgaGVhZGVycworICoKKyAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgImFtZHRwLmgiCisKKyNkZWZpbmUgVElDS1NfUEVSX0NZQ0xFCQkzMDcyCisjZGVmaW5lIENZQ0xFU19QRVJfU0VDT05ECTgwMDAKKyNkZWZpbmUgVElDS1NfUEVSX1NFQ09ORAkoVElDS1NfUEVSX0NZQ0xFICogQ1lDTEVTX1BFUl9TRUNPTkQpCisKKyNkZWZpbmUgVFJBTlNGRVJfREVMQVlfVElDS1MJMHgyZTAwIC8qIDQ3OS4xNyDCtXMgKi8KKworI2RlZmluZSBUQUdfQ0lQCQkJMQorCisjZGVmaW5lIENJUF9FT0gJCQkoMXUgPDwgMzEpCisjZGVmaW5lIENJUF9GTVRfQU0JCSgweDEwIDw8IDI0KQorI2RlZmluZSBBTURUUF9GREZfQU04MjQJCSgwIDw8IDE5KQorI2RlZmluZSBBTURUUF9GREZfU0ZDX1NISUZUCTE2CisKKy8qIFRPRE86IG1ha2UgdGhlc2UgY29uZmlndXJhYmxlICovCisjZGVmaW5lIElOVEVSUlVQVF9JTlRFUlZBTAkxNgorI2RlZmluZSBRVUVVRV9MRU5HVEgJCTQ4CisKKy8qKgorICogYW1kdHBfb3V0X3N0cmVhbV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBBTURUUCBvdXRwdXQgc3RyZWFtIHN0cnVjdHVyZQorICogQHM6IHRoZSBBTURUUCBvdXRwdXQgc3RyZWFtIHRvIGluaXRpYWxpemUKKyAqIEB1bml0OiB0aGUgdGFyZ2V0IG9mIHRoZSBzdHJlYW0KKyAqIEBmbGFnczogdGhlIHBhY2tldCB0cmFuc21pc3Npb24gbWV0aG9kIHRvIHVzZQorICovCitpbnQgYW1kdHBfb3V0X3N0cmVhbV9pbml0KHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLCBzdHJ1Y3QgZndfdW5pdCAqdW5pdCwKKwkJCSAgZW51bSBjaXBfb3V0X2ZsYWdzIGZsYWdzKQoreworCWlmIChmbGFncyAhPSBDSVBfTk9OQkxPQ0tJTkcpCisJCXJldHVybiAtRUlOVkFMOworCisJcy0+dW5pdCA9IGZ3X3VuaXRfZ2V0KHVuaXQpOworCXMtPmZsYWdzID0gZmxhZ3M7CisJcy0+Y29udGV4dCA9IEVSUl9QVFIoLTEpOworCW11dGV4X2luaXQoJnMtPm11dGV4KTsKKwlzLT5wYWNrZXRfaW5kZXggPSAwOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGFtZHRwX291dF9zdHJlYW1faW5pdCk7CisKKy8qKgorICogYW1kdHBfb3V0X3N0cmVhbV9kZXN0cm95IC0gZnJlZSBzdHJlYW0gcmVzb3VyY2VzCisgKiBAczogdGhlIEFNRFRQIG91dHB1dCBzdHJlYW0gdG8gZGVzdHJveQorICovCit2b2lkIGFtZHRwX291dF9zdHJlYW1fZGVzdHJveShzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcykKK3sKKwlXQVJOX09OKCFJU19FUlIocy0+Y29udGV4dCkpOworCW11dGV4X2Rlc3Ryb3koJnMtPm11dGV4KTsKKwlmd191bml0X3B1dChzLT51bml0KTsKK30KK0VYUE9SVF9TWU1CT0woYW1kdHBfb3V0X3N0cmVhbV9kZXN0cm95KTsKKworLyoqCisgKiBhbWR0cF9vdXRfc3RyZWFtX3NldF9yYXRlIC0gc2V0IHRoZSBzYW1wbGUgcmF0ZQorICogQHM6IHRoZSBBTURUUCBvdXRwdXQgc3RyZWFtIHRvIGNvbmZpZ3VyZQorICogQHJhdGU6IHRoZSBzYW1wbGUgcmF0ZQorICoKKyAqIFRoZSBzYW1wbGUgcmF0ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIHN0cmVhbSBpcyBzdGFydGVkLCBhbmQgbXVzdCBub3QgYmUKKyAqIGNoYW5nZWQgd2hpbGUgdGhlIHN0cmVhbSBpcyBydW5uaW5nLgorICovCit2b2lkIGFtZHRwX291dF9zdHJlYW1fc2V0X3JhdGUoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMsIHVuc2lnbmVkIGludCByYXRlKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgcmF0ZTsKKwkJdW5zaWduZWQgaW50IHN5dF9pbnRlcnZhbDsKKwl9IHJhdGVfaW5mb1tdID0geworCQlbQ0lQX1NGQ18zMjAwMF0gID0geyAgMzIwMDAsICA4LCB9LAorCQlbQ0lQX1NGQ180NDEwMF0gID0geyAgNDQxMDAsICA4LCB9LAorCQlbQ0lQX1NGQ180ODAwMF0gID0geyAgNDgwMDAsICA4LCB9LAorCQlbQ0lQX1NGQ184ODIwMF0gID0geyAgODgyMDAsIDE2LCB9LAorCQlbQ0lQX1NGQ185NjAwMF0gID0geyAgOTYwMDAsIDE2LCB9LAorCQlbQ0lQX1NGQ18xNzY0MDBdID0geyAxNzY0MDAsIDMyLCB9LAorCQlbQ0lQX1NGQ18xOTIwMDBdID0geyAxOTIwMDAsIDMyLCB9LAorCX07CisJdW5zaWduZWQgaW50IHNmYzsKKworCWlmIChXQVJOX09OKCFJU19FUlIocy0+Y29udGV4dCkpKQorCQlyZXR1cm47CisKKwlmb3IgKHNmYyA9IDA7IHNmYyA8IEFSUkFZX1NJWkUocmF0ZV9pbmZvKTsgKytzZmMpCisJCWlmIChyYXRlX2luZm9bc2ZjXS5yYXRlID09IHJhdGUpIHsKKwkJCXMtPnNmYyA9IHNmYzsKKwkJCXMtPnN5dF9pbnRlcnZhbCA9IHJhdGVfaW5mb1tzZmNdLnN5dF9pbnRlcnZhbDsKKwkJCXJldHVybjsKKwkJfQorCVdBUk5fT04oMSk7Cit9CitFWFBPUlRfU1lNQk9MKGFtZHRwX291dF9zdHJlYW1fc2V0X3JhdGUpOworCisvKioKKyAqIGFtZHRwX291dF9zdHJlYW1fZ2V0X21heF9wYXlsb2FkIC0gZ2V0IHRoZSBzdHJlYW0ncyBwYWNrZXQgc2l6ZQorICogQHM6IHRoZSBBTURUUCBvdXRwdXQgc3RyZWFtCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzdHJlYW0gaGFzIGJlZW4gY29uZmlndXJlZAorICogd2l0aCBhbWR0cF9vdXRfc3RyZWFtX3NldF9od19wYXJhbXMoKSwgYW1kdHBfb3V0X3N0cmVhbV9zZXRfcGNtKCksIGFuZAorICogYW1kdHBfb3V0X3N0cmVhbV9zZXRfbWlkaSgpLgorICovCit1bnNpZ25lZCBpbnQgYW1kdHBfb3V0X3N0cmVhbV9nZXRfbWF4X3BheWxvYWQoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtYXhfZGF0YV9ibG9ja3NbXSA9IHsKKwkJW0NJUF9TRkNfMzIwMDBdICA9ICA0LAorCQlbQ0lQX1NGQ180NDEwMF0gID0gIDYsCisJCVtDSVBfU0ZDXzQ4MDAwXSAgPSAgNiwKKwkJW0NJUF9TRkNfODgyMDBdICA9IDEyLAorCQlbQ0lQX1NGQ185NjAwMF0gID0gMTIsCisJCVtDSVBfU0ZDXzE3NjQwMF0gPSAyMywKKwkJW0NJUF9TRkNfMTkyMDAwXSA9IDI0LAorCX07CisKKwlzLT5kYXRhX2Jsb2NrX3F1YWRsZXRzID0gcy0+cGNtX2NoYW5uZWxzOworCXMtPmRhdGFfYmxvY2tfcXVhZGxldHMgKz0gRElWX1JPVU5EX1VQKHMtPm1pZGlfcG9ydHMsIDgpOworCisJcmV0dXJuIDggKyBtYXhfZGF0YV9ibG9ja3Nbcy0+c2ZjXSAqIDQgKiBzLT5kYXRhX2Jsb2NrX3F1YWRsZXRzOworfQorRVhQT1JUX1NZTUJPTChhbWR0cF9vdXRfc3RyZWFtX2dldF9tYXhfcGF5bG9hZCk7CisKK3N0YXRpYyB2b2lkIGFtZHRwX3dyaXRlX3MxNihzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBjbSwKKwkJCSAgICBfX2JlMzIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGZyYW1lcyk7CitzdGF0aWMgdm9pZCBhbWR0cF93cml0ZV9zMzIoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMsCisJCQkgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwY20sCisJCQkgICAgX19iZTMyICpidWZmZXIsIHVuc2lnbmVkIGludCBmcmFtZXMpOworCisvKioKKyAqIGFtZHRwX291dF9zdHJlYW1fc2V0X3BjbV9mb3JtYXQgLSBzZXQgdGhlIFBDTSBmb3JtYXQKKyAqIEBzOiB0aGUgQU1EVFAgb3V0cHV0IHN0cmVhbSB0byBjb25maWd1cmUKKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIEFMU0EgUENNIGRldmljZQorICoKKyAqIFRoZSBzYW1wbGUgZm9ybWF0IG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgc3RyZWFtIGlzIHN0YXJ0ZWQsIGFuZCBtdXN0IG5vdCBiZQorICogY2hhbmdlZCB3aGlsZSB0aGUgc3RyZWFtIGlzIHJ1bm5pbmcuCisgKi8KK3ZvaWQgYW1kdHBfb3V0X3N0cmVhbV9zZXRfcGNtX2Zvcm1hdChzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcywKKwkJCQkgICAgIHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQoreworCWlmIChXQVJOX09OKCFJU19FUlIocy0+Y29udGV4dCkpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTY6CisJCXMtPnRyYW5zZmVyX3NhbXBsZXMgPSBhbWR0cF93cml0ZV9zMTY7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzI6CisJCXMtPnRyYW5zZmVyX3NhbXBsZXMgPSBhbWR0cF93cml0ZV9zMzI7CisJCWJyZWFrOworCX0KK30KK0VYUE9SVF9TWU1CT0woYW1kdHBfb3V0X3N0cmVhbV9zZXRfcGNtX2Zvcm1hdCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX2RhdGFfYmxvY2tzKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzKQoreworCXVuc2lnbmVkIGludCBwaGFzZSwgZGF0YV9ibG9ja3M7CisKKwlpZiAoIWNpcF9zZmNfaXNfYmFzZV80NDEwMChzLT5zZmMpKSB7CisJCS8qIFNhbXBsZV9yYXRlIC8gODAwMCBpcyBhbiBpbnRlZ2VyLCBhbmQgcHJlY29tcHV0ZWQuICovCisJCWRhdGFfYmxvY2tzID0gcy0+ZGF0YV9ibG9ja19zdGF0ZTsKKwl9IGVsc2UgeworCQlwaGFzZSA9IHMtPmRhdGFfYmxvY2tfc3RhdGU7CisKKwkJLyoKKwkJICogVGhpcyBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgZGF0YSBibG9ja3MgcGVyIHBhY2tldCBzbyB0aGF0CisJCSAqIDEpIHRoZSBvdmVyYWxsIHJhdGUgaXMgY29ycmVjdCBhbmQgZXhhY3RseSBzeW5jaHJvbml6ZWQgdG8KKwkJICogICAgdGhlIGJ1cyBjbG9jaywgYW5kCisJCSAqIDIpIHBhY2tldHMgd2l0aCBhIHJvdW5kZWQtdXAgbnVtYmVyIG9mIGJsb2NrcyBvY2N1ciBhcyBlYXJseQorCQkgKiAgICBhcyBwb3NzaWJsZSBpbiB0aGUgc2VxdWVuY2UgKHRvIHByZXZlbnQgdW5kZXJydW5zIG9mIHRoZQorCQkgKiAgICBkZXZpY2UncyBidWZmZXIpLgorCQkgKi8KKwkJaWYgKHMtPnNmYyA9PSBDSVBfU0ZDXzQ0MTAwKQorCQkJLyogNiA2IDUgNiA1IDYgNSAuLi4gKi8KKwkJCWRhdGFfYmxvY2tzID0gNSArICgocGhhc2UgJiAxKSBeCisJCQkJCSAgIChwaGFzZSA9PSAwIHx8IHBoYXNlID49IDQwKSk7CisJCWVsc2UKKwkJCS8qIDEyIDExIDExIDExIDExIC4uLiBvciAyMyAyMiAyMiAyMiAyMiAuLi4gKi8KKwkJCWRhdGFfYmxvY2tzID0gMTEgKiAocy0+c2ZjID4+IDEpICsgKHBoYXNlID09IDApOworCQlpZiAoKytwaGFzZSA+PSAoODAgPj4gKHMtPnNmYyA+PiAxKSkpCisJCQlwaGFzZSA9IDA7CisJCXMtPmRhdGFfYmxvY2tfc3RhdGUgPSBwaGFzZTsKKwl9CisKKwlyZXR1cm4gZGF0YV9ibG9ja3M7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3N5dChzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcywKKwkJCQkgIHVuc2lnbmVkIGludCBjeWNsZSkKK3sKKwl1bnNpZ25lZCBpbnQgc3l0X29mZnNldCwgcGhhc2UsIGluZGV4LCBzeXQ7CisKKwlpZiAocy0+bGFzdF9zeXRfb2Zmc2V0IDwgVElDS1NfUEVSX0NZQ0xFKSB7CisJCWlmICghY2lwX3NmY19pc19iYXNlXzQ0MTAwKHMtPnNmYykpCisJCQlzeXRfb2Zmc2V0ID0gcy0+bGFzdF9zeXRfb2Zmc2V0ICsgcy0+c3l0X29mZnNldF9zdGF0ZTsKKwkJZWxzZSB7CisJCS8qCisJCSAqIFRoZSB0aW1lLCBpbiB0aWNrcywgb2YgdGhlIG4ndGggU1lUX0lOVEVSVkFMIHNhbXBsZSBpczoKKwkJICogICBuICogU1lUX0lOVEVSVkFMICogMjQ1NzYwMDAgLyBzYW1wbGVfcmF0ZQorCQkgKiBNb2R1bG8gVElDS1NfUEVSX0NZQ0xFLCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUKKwkJICogZWxlbWVudHMgaXMgYWJvdXQgMTM4Ni4yMy4gIFJvdW5kaW5nIHRoZSByZXN1bHRzIG9mIHRoaXMKKwkJICogZm9ybXVsYSB0byB0aGUgU1lUIHByZWNpc2lvbiByZXN1bHRzIGluIGEgc2VxdWVuY2Ugb2YKKwkJICogZGlmZmVyZW5jZXMgdGhhdCBiZWdpbnMgd2l0aDoKKwkJICogICAxMzg2IDEzODYgMTM4NyAxMzg2IDEzODYgMTM4NiAxMzg3IDEzODYgMTM4NiAxMzg2IDEzODcgLi4uCisJCSAqIFRoaXMgY29kZSBnZW5lcmF0ZXMgX2V4YWN0bHlfIHRoZSBzYW1lIHNlcXVlbmNlLgorCQkgKi8KKwkJCXBoYXNlID0gcy0+c3l0X29mZnNldF9zdGF0ZTsKKwkJCWluZGV4ID0gcGhhc2UgJSAxMzsKKwkJCXN5dF9vZmZzZXQgPSBzLT5sYXN0X3N5dF9vZmZzZXQ7CisJCQlzeXRfb2Zmc2V0ICs9IDEzODYgKyAoKGluZGV4ICYmICEoaW5kZXggJiAzKSkgfHwKKwkJCQkJICAgICAgcGhhc2UgPT0gMTQ2KTsKKwkJCWlmICgrK3BoYXNlID49IDE0NykKKwkJCQlwaGFzZSA9IDA7CisJCQlzLT5zeXRfb2Zmc2V0X3N0YXRlID0gcGhhc2U7CisJCX0KKwl9IGVsc2UKKwkJc3l0X29mZnNldCA9IHMtPmxhc3Rfc3l0X29mZnNldCAtIFRJQ0tTX1BFUl9DWUNMRTsKKwlzLT5sYXN0X3N5dF9vZmZzZXQgPSBzeXRfb2Zmc2V0OworCisJaWYgKHN5dF9vZmZzZXQgPCBUSUNLU19QRVJfQ1lDTEUpIHsKKwkJc3l0X29mZnNldCArPSBUUkFOU0ZFUl9ERUxBWV9USUNLUyAtIFRJQ0tTX1BFUl9DWUNMRTsKKwkJc3l0ID0gKGN5Y2xlICsgc3l0X29mZnNldCAvIFRJQ0tTX1BFUl9DWUNMRSkgPDwgMTI7CisJCXN5dCArPSBzeXRfb2Zmc2V0ICUgVElDS1NfUEVSX0NZQ0xFOworCisJCXJldHVybiBzeXQgJiAweGZmZmY7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDB4ZmZmZjsgLyogbm8gaW5mbyAqLworCX0KK30KKworc3RhdGljIHZvaWQgYW1kdHBfd3JpdGVfczMyKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGNtLAorCQkJICAgIF9fYmUzMiAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgZnJhbWVzKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBwY20tPnJ1bnRpbWU7CisJdW5zaWduZWQgaW50IGNoYW5uZWxzLCByZW1haW5pbmdfZnJhbWVzLCBmcmFtZV9zdGVwLCBpLCBjOworCWNvbnN0IHUzMiAqc3JjOworCisJY2hhbm5lbHMgPSBzLT5wY21fY2hhbm5lbHM7CisJc3JjID0gKHZvaWQgKilydW50aW1lLT5kbWFfYXJlYSArCisJCQlzLT5wY21fYnVmZmVyX3BvaW50ZXIgKiAocnVudGltZS0+ZnJhbWVfYml0cyAvIDgpOworCXJlbWFpbmluZ19mcmFtZXMgPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIHMtPnBjbV9idWZmZXJfcG9pbnRlcjsKKwlmcmFtZV9zdGVwID0gcy0+ZGF0YV9ibG9ja19xdWFkbGV0cyAtIGNoYW5uZWxzOworCisJZm9yIChpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7CisJCWZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgKytjKSB7CisJCQkqYnVmZmVyID0gY3B1X3RvX2JlMzIoKCpzcmMgPj4gOCkgfCAweDQwMDAwMDAwKTsKKwkJCXNyYysrOworCQkJYnVmZmVyKys7CisJCX0KKwkJYnVmZmVyICs9IGZyYW1lX3N0ZXA7CisJCWlmICgtLXJlbWFpbmluZ19mcmFtZXMgPT0gMCkKKwkJCXNyYyA9ICh2b2lkICopcnVudGltZS0+ZG1hX2FyZWE7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbWR0cF93cml0ZV9zMTYoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMsCisJCQkgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwY20sCisJCQkgICAgX19iZTMyICpidWZmZXIsIHVuc2lnbmVkIGludCBmcmFtZXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHBjbS0+cnVudGltZTsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHMsIHJlbWFpbmluZ19mcmFtZXMsIGZyYW1lX3N0ZXAsIGksIGM7CisJY29uc3QgdTE2ICpzcmM7CisKKwljaGFubmVscyA9IHMtPnBjbV9jaGFubmVsczsKKwlzcmMgPSAodm9pZCAqKXJ1bnRpbWUtPmRtYV9hcmVhICsKKwkJCXMtPnBjbV9idWZmZXJfcG9pbnRlciAqIChydW50aW1lLT5mcmFtZV9iaXRzIC8gOCk7CisJcmVtYWluaW5nX2ZyYW1lcyA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gcy0+cGNtX2J1ZmZlcl9wb2ludGVyOworCWZyYW1lX3N0ZXAgPSBzLT5kYXRhX2Jsb2NrX3F1YWRsZXRzIC0gY2hhbm5lbHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKKwkJZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyArK2MpIHsKKwkJCSpidWZmZXIgPSBjcHVfdG9fYmUzMigoKnNyYyA8PCA4KSB8IDB4NDAwMDAwMDApOworCQkJc3JjKys7CisJCQlidWZmZXIrKzsKKwkJfQorCQlidWZmZXIgKz0gZnJhbWVfc3RlcDsKKwkJaWYgKC0tcmVtYWluaW5nX2ZyYW1lcyA9PSAwKQorCQkJc3JjID0gKHZvaWQgKilydW50aW1lLT5kbWFfYXJlYTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFtZHRwX2ZpbGxfcGNtX3NpbGVuY2Uoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMsCisJCQkJICAgX19iZTMyICpidWZmZXIsIHVuc2lnbmVkIGludCBmcmFtZXMpCit7CisJdW5zaWduZWQgaW50IGksIGM7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKKwkJZm9yIChjID0gMDsgYyA8IHMtPnBjbV9jaGFubmVsczsgKytjKQorCQkJYnVmZmVyW2NdID0gY3B1X3RvX2JlMzIoMHg0MDAwMDAwMCk7CisJCWJ1ZmZlciArPSBzLT5kYXRhX2Jsb2NrX3F1YWRsZXRzOworCX0KK30KKworc3RhdGljIHZvaWQgYW1kdHBfZmlsbF9taWRpKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLAorCQkJICAgIF9fYmUzMiAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgZnJhbWVzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGZyYW1lczsgKytpKQorCQlidWZmZXJbcy0+cGNtX2NoYW5uZWxzICsgaSAqIHMtPmRhdGFfYmxvY2tfcXVhZGxldHNdID0KKwkJCQkJCWNwdV90b19iZTMyKDB4ODAwMDAwMDApOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9vdXRfcGFja2V0KHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLCB1bnNpZ25lZCBpbnQgY3ljbGUpCit7CisJX19iZTMyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGluZGV4LCBkYXRhX2Jsb2Nrcywgc3l0LCBwdHI7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwY207CisJc3RydWN0IGZ3X2lzb19wYWNrZXQgcGFja2V0OworCWludCBlcnI7CisKKwlpZiAocy0+cGFja2V0X2luZGV4IDwgMCkKKwkJcmV0dXJuOworCWluZGV4ID0gcy0+cGFja2V0X2luZGV4OworCisJZGF0YV9ibG9ja3MgPSBjYWxjdWxhdGVfZGF0YV9ibG9ja3Mocyk7CisJc3l0ID0gY2FsY3VsYXRlX3N5dChzLCBjeWNsZSk7CisKKwlidWZmZXIgPSBzLT5idWZmZXIucGFja2V0c1tpbmRleF0uYnVmZmVyOworCWJ1ZmZlclswXSA9IGNwdV90b19iZTMyKEFDQ0VTU19PTkNFKHMtPnNvdXJjZV9ub2RlX2lkX2ZpZWxkKSB8CisJCQkJKHMtPmRhdGFfYmxvY2tfcXVhZGxldHMgPDwgMTYpIHwKKwkJCQlzLT5kYXRhX2Jsb2NrX2NvdW50ZXIpOworCWJ1ZmZlclsxXSA9IGNwdV90b19iZTMyKENJUF9FT0ggfCBDSVBfRk1UX0FNIHwgQU1EVFBfRkRGX0FNODI0IHwKKwkJCQkocy0+c2ZjIDw8IEFNRFRQX0ZERl9TRkNfU0hJRlQpIHwgc3l0KTsKKwlidWZmZXIgKz0gMjsKKworCXBjbSA9IEFDQ0VTU19PTkNFKHMtPnBjbSk7CisJaWYgKHBjbSkKKwkJcy0+dHJhbnNmZXJfc2FtcGxlcyhzLCBwY20sIGJ1ZmZlciwgZGF0YV9ibG9ja3MpOworCWVsc2UKKwkJYW1kdHBfZmlsbF9wY21fc2lsZW5jZShzLCBidWZmZXIsIGRhdGFfYmxvY2tzKTsKKwlpZiAocy0+bWlkaV9wb3J0cykKKwkJYW1kdHBfZmlsbF9taWRpKHMsIGJ1ZmZlciwgZGF0YV9ibG9ja3MpOworCisJcy0+ZGF0YV9ibG9ja19jb3VudGVyID0gKHMtPmRhdGFfYmxvY2tfY291bnRlciArIGRhdGFfYmxvY2tzKSAmIDB4ZmY7CisKKwlwYWNrZXQucGF5bG9hZF9sZW5ndGggPSA4ICsgZGF0YV9ibG9ja3MgKiA0ICogcy0+ZGF0YV9ibG9ja19xdWFkbGV0czsKKwlwYWNrZXQuaW50ZXJydXB0ID0gSVNfQUxJR05FRChpbmRleCArIDEsIElOVEVSUlVQVF9JTlRFUlZBTCk7CisJcGFja2V0LnNraXAgPSAwOworCXBhY2tldC50YWcgPSBUQUdfQ0lQOworCXBhY2tldC5zeSA9IDA7CisJcGFja2V0LmhlYWRlcl9sZW5ndGggPSAwOworCisJZXJyID0gZndfaXNvX2NvbnRleHRfcXVldWUocy0+Y29udGV4dCwgJnBhY2tldCwgJnMtPmJ1ZmZlci5pc29fYnVmZmVyLAorCQkJCSAgIHMtPmJ1ZmZlci5wYWNrZXRzW2luZGV4XS5vZmZzZXQpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnMtPnVuaXQtPmRldmljZSwgInF1ZXVlaW5nIGVycm9yOiAlZFxuIiwgZXJyKTsKKwkJcy0+cGFja2V0X2luZGV4ID0gLTE7CisJCWFtZHRwX291dF9zdHJlYW1fcGNtX2Fib3J0KHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKCsraW5kZXggPj0gUVVFVUVfTEVOR1RIKQorCQlpbmRleCA9IDA7CisJcy0+cGFja2V0X2luZGV4ID0gaW5kZXg7CisKKwlpZiAocGNtKSB7CisJCXB0ciA9IHMtPnBjbV9idWZmZXJfcG9pbnRlciArIGRhdGFfYmxvY2tzOworCQlpZiAocHRyID49IHBjbS0+cnVudGltZS0+YnVmZmVyX3NpemUpCisJCQlwdHIgLT0gcGNtLT5ydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJQUNDRVNTX09OQ0Uocy0+cGNtX2J1ZmZlcl9wb2ludGVyKSA9IHB0cjsKKworCQlzLT5wY21fcGVyaW9kX3BvaW50ZXIgKz0gZGF0YV9ibG9ja3M7CisJCWlmIChzLT5wY21fcGVyaW9kX3BvaW50ZXIgPj0gcGNtLT5ydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQkJcy0+cGNtX3BlcmlvZF9wb2ludGVyIC09IHBjbS0+cnVudGltZS0+cGVyaW9kX3NpemU7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHBjbSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG91dF9wYWNrZXRfY2FsbGJhY2soc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjb250ZXh0LCB1MzIgY3ljbGUsCisJCQkJc2l6ZV90IGhlYWRlcl9sZW5ndGgsIHZvaWQgKmhlYWRlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcyA9IGRhdGE7CisJdW5zaWduZWQgaW50IGksIHBhY2tldHMgPSBoZWFkZXJfbGVuZ3RoIC8gNDsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgY3ljbGUgb2YgdGhlIGxhc3QgcXVldWVkIHBhY2tldC4KKwkgKiAoV2UgbmVlZCBvbmx5IHRoZSBmb3VyIGxvd2VzdCBiaXRzIGZvciB0aGUgU1lULCBzbyB3ZSBjYW4gaWdub3JlCisJICogdGhhdCBiaXRzIDAtMTEgbXVzdCB3cmFwIGFyb3VuZCBhdCAzMDcyLikKKwkgKi8KKwljeWNsZSArPSBRVUVVRV9MRU5HVEggLSBwYWNrZXRzOworCisJZm9yIChpID0gMDsgaSA8IHBhY2tldHM7ICsraSkKKwkJcXVldWVfb3V0X3BhY2tldChzLCArK2N5Y2xlKTsKK30KKworc3RhdGljIGludCBxdWV1ZV9pbml0aWFsX3NraXBfcGFja2V0cyhzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcykKK3sKKwlzdHJ1Y3QgZndfaXNvX3BhY2tldCBza2lwX3BhY2tldCA9IHsKKwkJLnNraXAgPSAxLAorCX07CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBRVUVVRV9MRU5HVEg7ICsraSkgeworCQlza2lwX3BhY2tldC5pbnRlcnJ1cHQgPSBJU19BTElHTkVEKHMtPnBhY2tldF9pbmRleCArIDEsCisJCQkJCQkgICBJTlRFUlJVUFRfSU5URVJWQUwpOworCQllcnIgPSBmd19pc29fY29udGV4dF9xdWV1ZShzLT5jb250ZXh0LCAmc2tpcF9wYWNrZXQsIE5VTEwsIDApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWlmICgrK3MtPnBhY2tldF9pbmRleCA+PSBRVUVVRV9MRU5HVEgpCisJCQlzLT5wYWNrZXRfaW5kZXggPSAwOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGFtZHRwX291dF9zdHJlYW1fc3RhcnQgLSBzdGFydCBzZW5kaW5nIHBhY2tldHMKKyAqIEBzOiB0aGUgQU1EVFAgb3V0cHV0IHN0cmVhbSB0byBzdGFydAorICogQGNoYW5uZWw6IHRoZSBpc29jaHJvbm91cyBjaGFubmVsIG9uIHRoZSBidXMKKyAqIEBzcGVlZDogZmlyZXdpcmUgc3BlZWQgY29kZQorICoKKyAqIFRoZSBzdHJlYW0gY2Fubm90IGJlIHN0YXJ0ZWQgdW50aWwgaXQgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoCisgKiBhbWR0cF9vdXRfc3RyZWFtX3NldF9od19wYXJhbXMoKSwgYW1kdHBfb3V0X3N0cmVhbV9zZXRfcGNtKCksIGFuZAorICogYW1kdHBfb3V0X3N0cmVhbV9zZXRfbWlkaSgpOyBhbmQgaXQgbXVzdCBiZSBzdGFydGVkIGJlZm9yZSBhbnkKKyAqIFBDTSBvciBNSURJIGRldmljZSBjYW4gYmUgc3RhcnRlZC4KKyAqLworaW50IGFtZHRwX291dF9zdHJlYW1fc3RhcnQoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMsIGludCBjaGFubmVsLCBpbnQgc3BlZWQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCXVuc2lnbmVkIGludCBkYXRhX2Jsb2NrOworCQl1bnNpZ25lZCBpbnQgc3l0X29mZnNldDsKKwl9IGluaXRpYWxfc3RhdGVbXSA9IHsKKwkJW0NJUF9TRkNfMzIwMDBdICA9IHsgIDQsIDMwNzIgfSwKKwkJW0NJUF9TRkNfNDgwMDBdICA9IHsgIDYsIDEwMjQgfSwKKwkJW0NJUF9TRkNfOTYwMDBdICA9IHsgMTIsIDEwMjQgfSwKKwkJW0NJUF9TRkNfMTkyMDAwXSA9IHsgMjQsIDEwMjQgfSwKKwkJW0NJUF9TRkNfNDQxMDBdICA9IHsgIDAsICAgNjcgfSwKKwkJW0NJUF9TRkNfODgyMDBdICA9IHsgIDAsICAgNjcgfSwKKwkJW0NJUF9TRkNfMTc2NDAwXSA9IHsgIDAsICAgNjcgfSwKKwl9OworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZzLT5tdXRleCk7CisKKwlpZiAoV0FSTl9PTighSVNfRVJSKHMtPmNvbnRleHQpIHx8CisJCSAgICAoIXMtPnBjbV9jaGFubmVscyAmJiAhcy0+bWlkaV9wb3J0cykpKSB7CisJCWVyciA9IC1FQkFERkQ7CisJCWdvdG8gZXJyX3VubG9jazsKKwl9CisKKwlzLT5kYXRhX2Jsb2NrX3N0YXRlID0gaW5pdGlhbF9zdGF0ZVtzLT5zZmNdLmRhdGFfYmxvY2s7CisJcy0+c3l0X29mZnNldF9zdGF0ZSA9IGluaXRpYWxfc3RhdGVbcy0+c2ZjXS5zeXRfb2Zmc2V0OworCXMtPmxhc3Rfc3l0X29mZnNldCA9IFRJQ0tTX1BFUl9DWUNMRTsKKworCWVyciA9IGlzb19wYWNrZXRzX2J1ZmZlcl9pbml0KCZzLT5idWZmZXIsIHMtPnVuaXQsIFFVRVVFX0xFTkdUSCwKKwkJCQkgICAgICBhbWR0cF9vdXRfc3RyZWFtX2dldF9tYXhfcGF5bG9hZChzKSwKKwkJCQkgICAgICBETUFfVE9fREVWSUNFKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfdW5sb2NrOworCisJcy0+Y29udGV4dCA9IGZ3X2lzb19jb250ZXh0X2NyZWF0ZShmd19wYXJlbnRfZGV2aWNlKHMtPnVuaXQpLT5jYXJkLAorCQkJCQkgICBGV19JU09fQ09OVEVYVF9UUkFOU01JVCwKKwkJCQkJICAgY2hhbm5lbCwgc3BlZWQsIDAsCisJCQkJCSAgIG91dF9wYWNrZXRfY2FsbGJhY2ssIHMpOworCWlmIChJU19FUlIocy0+Y29udGV4dCkpIHsKKwkJZXJyID0gUFRSX0VSUihzLT5jb250ZXh0KTsKKwkJaWYgKGVyciA9PSAtRUJVU1kpCisJCQlkZXZfZXJyKCZzLT51bml0LT5kZXZpY2UsCisJCQkJIm5vIGZyZWUgb3V0cHV0IHN0cmVhbSBvbiB0aGlzIGNvbnRyb2xsZXJcbiIpOworCQlnb3RvIGVycl9idWZmZXI7CisJfQorCisJYW1kdHBfb3V0X3N0cmVhbV91cGRhdGUocyk7CisKKwlzLT5wYWNrZXRfaW5kZXggPSAwOworCXMtPmRhdGFfYmxvY2tfY291bnRlciA9IDA7CisJZXJyID0gcXVldWVfaW5pdGlhbF9za2lwX3BhY2tldHMocyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2NvbnRleHQ7CisKKwllcnIgPSBmd19pc29fY29udGV4dF9zdGFydChzLT5jb250ZXh0LCAtMSwgMCwgMCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2NvbnRleHQ7CisKKwltdXRleF91bmxvY2soJnMtPm11dGV4KTsKKworCXJldHVybiAwOworCitlcnJfY29udGV4dDoKKwlmd19pc29fY29udGV4dF9kZXN0cm95KHMtPmNvbnRleHQpOworCXMtPmNvbnRleHQgPSBFUlJfUFRSKC0xKTsKK2Vycl9idWZmZXI6CisJaXNvX3BhY2tldHNfYnVmZmVyX2Rlc3Ryb3koJnMtPmJ1ZmZlciwgcy0+dW5pdCk7CitlcnJfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woYW1kdHBfb3V0X3N0cmVhbV9zdGFydCk7CisKKy8qKgorICogYW1kdHBfb3V0X3N0cmVhbV91cGRhdGUgLSB1cGRhdGUgdGhlIHN0cmVhbSBhZnRlciBhIGJ1cyByZXNldAorICogQHM6IHRoZSBBTURUUCBvdXRwdXQgc3RyZWFtCisgKi8KK3ZvaWQgYW1kdHBfb3V0X3N0cmVhbV91cGRhdGUoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMpCit7CisJQUNDRVNTX09OQ0Uocy0+c291cmNlX25vZGVfaWRfZmllbGQpID0KKwkJKGZ3X3BhcmVudF9kZXZpY2Uocy0+dW5pdCktPmNhcmQtPm5vZGVfaWQgJiAweDNmKSA8PCAyNDsKK30KK0VYUE9SVF9TWU1CT0woYW1kdHBfb3V0X3N0cmVhbV91cGRhdGUpOworCisvKioKKyAqIGFtZHRwX291dF9zdHJlYW1fc3RvcCAtIHN0b3Agc2VuZGluZyBwYWNrZXRzCisgKiBAczogdGhlIEFNRFRQIG91dHB1dCBzdHJlYW0gdG8gc3RvcAorICoKKyAqIEFsbCBQQ00gYW5kIE1JREkgZGV2aWNlcyBvZiB0aGUgc3RyZWFtIG11c3QgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIHN0cmVhbQorICogaXRzZWxmIGNhbiBiZSBzdG9wcGVkLgorICovCit2b2lkIGFtZHRwX291dF9zdHJlYW1fc3RvcChzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcykKK3sKKwltdXRleF9sb2NrKCZzLT5tdXRleCk7CisKKwlpZiAoSVNfRVJSKHMtPmNvbnRleHQpKSB7CisJCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOworCQlyZXR1cm47CisJfQorCisJZndfaXNvX2NvbnRleHRfc3RvcChzLT5jb250ZXh0KTsKKwlmd19pc29fY29udGV4dF9kZXN0cm95KHMtPmNvbnRleHQpOworCXMtPmNvbnRleHQgPSBFUlJfUFRSKC0xKTsKKwlpc29fcGFja2V0c19idWZmZXJfZGVzdHJveSgmcy0+YnVmZmVyLCBzLT51bml0KTsKKworCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChhbWR0cF9vdXRfc3RyZWFtX3N0b3ApOworCisvKioKKyAqIGFtZHRwX291dF9zdHJlYW1fcGNtX2Fib3J0IC0gYWJvcnQgdGhlIHJ1bm5pbmcgUENNIGRldmljZQorICogQHM6IHRoZSBBTURUUCBzdHJlYW0gYWJvdXQgdG8gYmUgc3RvcHBlZAorICoKKyAqIElmIHRoZSBpc29jaHJvbm91cyBzdHJlYW0gbmVlZHMgdG8gYmUgc3RvcHBlZCBhc3luY2hyb25vdXNseSwgY2FsbCB0aGlzCisgKiBmdW5jdGlvbiBmaXJzdCB0byBzdG9wIHRoZSBQQ00gZGV2aWNlLgorICovCit2b2lkIGFtZHRwX291dF9zdHJlYW1fcGNtX2Fib3J0KHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGNtOworCisJcGNtID0gQUNDRVNTX09OQ0Uocy0+cGNtKTsKKwlpZiAocGNtKSB7CisJCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHBjbSk7CisJCWlmIChzbmRfcGNtX3J1bm5pbmcocGNtKSkKKwkJCXNuZF9wY21fc3RvcChwY20sIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKKwkJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShwY20pOworCX0KK30KK0VYUE9SVF9TWU1CT0woYW1kdHBfb3V0X3N0cmVhbV9wY21fYWJvcnQpOwpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvYW1kdHAuaCBiL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3YTljYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmgKQEAgLTAsMCArMSwxNjkgQEAKKyNpZm5kZWYgU09VTkRfRklSRVdJUkVfQU1EVFBfSF9JTkNMVURFRAorI2RlZmluZSBTT1VORF9GSVJFV0lSRV9BTURUUF9IX0lOQ0xVREVECisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSAicGFja2V0cy1idWZmZXIuaCIKKworLyoqCisgKiBlbnVtIGNpcF9vdXRfZmxhZ3MgLSBkZXNjcmliZXMgZGV0YWlscyBvZiB0aGUgc3RyZWFtaW5nIHByb3RvY29sCisgKiBAQ0lQX05PTkJMT0NLSU5HOiBJbiBub24tYmxvY2tpbmcgbW9kZSwgZWFjaCBwYWNrZXQgY29udGFpbnMKKyAqCXNhbXBsZV9yYXRlLzgwMDAgc2FtcGxlcywgd2l0aCByb3VuZGluZyB1cCBvciBkb3duIHRvIGFkanVzdAorICoJZm9yIGNsb2NrIHNrZXcgYW5kIGxlZnQtb3ZlciBmcmFjdGlvbmFsIHNhbXBsZXMuICBUaGlzIHNob3VsZAorICoJYmUgdXNlZCBpZiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS4KKyAqLworZW51bSBjaXBfb3V0X2ZsYWdzIHsKKwlDSVBfTk9OQkxPQ0tJTkcgPSAwLAorfTsKKworLyoqCisgKiBlbnVtIGNpcF9zZmMgLSBhIHN0cmVhbSdzIHNhbXBsZSByYXRlCisgKi8KK2VudW0gY2lwX3NmYyB7CisJQ0lQX1NGQ18zMjAwMCAgPSAwLAorCUNJUF9TRkNfNDQxMDAgID0gMSwKKwlDSVBfU0ZDXzQ4MDAwICA9IDIsCisJQ0lQX1NGQ184ODIwMCAgPSAzLAorCUNJUF9TRkNfOTYwMDAgID0gNCwKKwlDSVBfU0ZDXzE3NjQwMCA9IDUsCisJQ0lQX1NGQ18xOTIwMDAgPSA2LAorfTsKKworI2RlZmluZSBBTURUUF9PVVRfUENNX0ZPUk1BVF9CSVRTCShTTkRSVl9QQ01fRk1UQklUX1MxNiB8IFwKKwkJCQkJIFNORFJWX1BDTV9GTVRCSVRfUzMyKQorCitzdHJ1Y3QgZndfdW5pdDsKK3N0cnVjdCBmd19pc29fY29udGV4dDsKK3N0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbTsKKworc3RydWN0IGFtZHRwX291dF9zdHJlYW0geworCXN0cnVjdCBmd191bml0ICp1bml0OworCWVudW0gY2lwX291dF9mbGFncyBmbGFnczsKKwlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQ7CisJc3RydWN0IG11dGV4IG11dGV4OworCisJZW51bSBjaXBfc2ZjIHNmYzsKKwl1bnNpZ25lZCBpbnQgZGF0YV9ibG9ja19xdWFkbGV0czsKKwl1bnNpZ25lZCBpbnQgcGNtX2NoYW5uZWxzOworCXVuc2lnbmVkIGludCBtaWRpX3BvcnRzOworCXZvaWQgKCp0cmFuc2Zlcl9zYW1wbGVzKShzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcywKKwkJCQkgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwY20sCisJCQkJIF9fYmUzMiAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgZnJhbWVzKTsKKworCXVuc2lnbmVkIGludCBzeXRfaW50ZXJ2YWw7CisJdW5zaWduZWQgaW50IHNvdXJjZV9ub2RlX2lkX2ZpZWxkOworCXN0cnVjdCBpc29fcGFja2V0c19idWZmZXIgYnVmZmVyOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwY207CisKKwlpbnQgcGFja2V0X2luZGV4OworCXVuc2lnbmVkIGludCBkYXRhX2Jsb2NrX2NvdW50ZXI7CisKKwl1bnNpZ25lZCBpbnQgZGF0YV9ibG9ja19zdGF0ZTsKKworCXVuc2lnbmVkIGludCBsYXN0X3N5dF9vZmZzZXQ7CisJdW5zaWduZWQgaW50IHN5dF9vZmZzZXRfc3RhdGU7CisKKwl1bnNpZ25lZCBpbnQgcGNtX2J1ZmZlcl9wb2ludGVyOworCXVuc2lnbmVkIGludCBwY21fcGVyaW9kX3BvaW50ZXI7Cit9OworCitpbnQgYW1kdHBfb3V0X3N0cmVhbV9pbml0KHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLCBzdHJ1Y3QgZndfdW5pdCAqdW5pdCwKKwkJCSAgZW51bSBjaXBfb3V0X2ZsYWdzIGZsYWdzKTsKK3ZvaWQgYW1kdHBfb3V0X3N0cmVhbV9kZXN0cm95KHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzKTsKKwordm9pZCBhbWR0cF9vdXRfc3RyZWFtX3NldF9yYXRlKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLCB1bnNpZ25lZCBpbnQgcmF0ZSk7Cit1bnNpZ25lZCBpbnQgYW1kdHBfb3V0X3N0cmVhbV9nZXRfbWF4X3BheWxvYWQoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMpOworCitpbnQgYW1kdHBfb3V0X3N0cmVhbV9zdGFydChzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcywgaW50IGNoYW5uZWwsIGludCBzcGVlZCk7Cit2b2lkIGFtZHRwX291dF9zdHJlYW1fdXBkYXRlKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzKTsKK3ZvaWQgYW1kdHBfb3V0X3N0cmVhbV9zdG9wKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzKTsKKwordm9pZCBhbWR0cF9vdXRfc3RyZWFtX3NldF9wY21fZm9ybWF0KHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLAorCQkJCSAgICAgc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpOwordm9pZCBhbWR0cF9vdXRfc3RyZWFtX3BjbV9hYm9ydChzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcyk7CisKKy8qKgorICogYW1kdHBfb3V0X3N0cmVhbV9zZXRfcGNtIC0gY29uZmlndXJlIGZvcm1hdCBvZiBQQ00gc2FtcGxlcworICogQHM6IHRoZSBBTURUUCBvdXRwdXQgc3RyZWFtIHRvIGJlIGNvbmZpZ3VyZWQKKyAqIEBwY21fY2hhbm5lbHM6IHRoZSBudW1iZXIgb2YgUENNIHNhbXBsZXMgaW4gZWFjaCBkYXRhIGJsb2NrLCB0byBiZSBlbmNvZGVkCisgKiAgICAgICAgICAgICAgICBhcyBBTTgyNCBtdWx0aS1iaXQgbGluZWFyIGF1ZGlvCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIHN0cmVhbSBpcyBydW5uaW5nLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYW1kdHBfb3V0X3N0cmVhbV9zZXRfcGNtKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHBjbV9jaGFubmVscykKK3sKKwlzLT5wY21fY2hhbm5lbHMgPSBwY21fY2hhbm5lbHM7Cit9CisKKy8qKgorICogYW1kdHBfb3V0X3N0cmVhbV9zZXRfbWlkaSAtIGNvbmZpZ3VyZSBmb3JtYXQgb2YgTUlESSBkYXRhCisgKiBAczogdGhlIEFNRFRQIG91dHB1dCBzdHJlYW0gdG8gYmUgY29uZmlndXJlZAorICogQG1pZGlfcG9ydHM6IHRoZSBudW1iZXIgb2YgTUlESSBwb3J0cyAoaS5lLiwgTVBYLU1JREkgRGF0YSBDaGFubmVscykKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgc3RyZWFtIGlzIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhbWR0cF9vdXRfc3RyZWFtX3NldF9taWRpKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBtaWRpX3BvcnRzKQoreworCXMtPm1pZGlfcG9ydHMgPSBtaWRpX3BvcnRzOworfQorCisvKioKKyAqIGFtZHRwX291dF9zdHJlYW1pbmdfZXJyb3IgLSBjaGVjayBmb3Igc3RyZWFtaW5nIGVycm9yCisgKiBAczogdGhlIEFNRFRQIG91dHB1dCBzdHJlYW0KKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHN0cmVhbSdzIHBhY2tldCBxdWV1ZSBoYXMgc3RvcHBlZCBkdWUgdG8KKyAqIGFuIGFzeW5jaHJvbm91cyBlcnJvci4KKyAqLworc3RhdGljIGlubGluZSBib29sIGFtZHRwX291dF9zdHJlYW1pbmdfZXJyb3Ioc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMpCit7CisJcmV0dXJuIHMtPnBhY2tldF9pbmRleCA8IDA7Cit9CisKKy8qKgorICogYW1kdHBfb3V0X3N0cmVhbV9wY21fcHJlcGFyZSAtIHByZXBhcmUgUENNIGRldmljZSBmb3IgcnVubmluZworICogQHM6IHRoZSBBTURUUCBvdXRwdXQgc3RyZWFtCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIFBDTSBkZXZpY2UncyAucHJlcGFyZSBjYWxsYmFjay4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFtZHRwX291dF9zdHJlYW1fcGNtX3ByZXBhcmUoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMpCit7CisJcy0+cGNtX2J1ZmZlcl9wb2ludGVyID0gMDsKKwlzLT5wY21fcGVyaW9kX3BvaW50ZXIgPSAwOworfQorCisvKioKKyAqIGFtZHRwX291dF9zdHJlYW1fcGNtX3RyaWdnZXIgLSBzdGFydC9zdG9wIHBsYXliYWNrIGZyb20gYSBQQ00gZGV2aWNlCisgKiBAczogdGhlIEFNRFRQIG91dHB1dCBzdHJlYW0KKyAqIEBwY206IHRoZSBQQ00gZGV2aWNlIHRvIGJlIHN0YXJ0ZWQsIG9yICVOVUxMIHRvIHN0b3AgdGhlIGN1cnJlbnQgZGV2aWNlCisgKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIG9uIGEgcnVubmluZyBpc29jaHJvbm91cyBzdHJlYW0gdG8gZW5hYmxlIHRoZSBhY3R1YWwKKyAqIHRyYW5zbWlzc2lvbiBvZiBQQ00gZGF0YS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBQQ00KKyAqIGRldmljZSdzIC50cmlnZ2VyIGNhbGxiYWNrLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYW1kdHBfb3V0X3N0cmVhbV9wY21fdHJpZ2dlcihzdHJ1Y3QgYW1kdHBfb3V0X3N0cmVhbSAqcywKKwkJCQkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGNtKQoreworCUFDQ0VTU19PTkNFKHMtPnBjbSkgPSBwY207Cit9CisKKy8qKgorICogYW1kdHBfb3V0X3N0cmVhbV9wY21fcG9pbnRlciAtIGdldCB0aGUgUENNIGJ1ZmZlciBwb3NpdGlvbgorICogQHM6IHRoZSBBTURUUCBvdXRwdXQgc3RyZWFtIHRoYXQgdHJhbnNwb3J0cyB0aGUgUENNIGRhdGEKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGJ1ZmZlciBwb3NpdGlvbiwgaW4gZnJhbWVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2FtZHRwX291dF9zdHJlYW1fcGNtX3BvaW50ZXIoc3RydWN0IGFtZHRwX291dF9zdHJlYW0gKnMpCit7CisJcmV0dXJuIEFDQ0VTU19PTkNFKHMtPnBjbV9idWZmZXJfcG9pbnRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaXBfc2ZjX2lzX2Jhc2VfNDQxMDAoZW51bSBjaXBfc2ZjIHNmYykKK3sKKwlyZXR1cm4gc2ZjICYgMTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9jbXAuYyBiL3NvdW5kL2ZpcmV3aXJlL2NtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzdmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9maXJld2lyZS9jbXAuYwpAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvbm5lY3Rpb24gTWFuYWdlbWVudCBQcm9jZWR1cmVzIChJRUMgNjE4ODMtMSkgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlICJsaWIuaCIKKyNpbmNsdWRlICJpc28tcmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiY21wLmgiCisKKyNkZWZpbmUgSU1QUl9TUEVFRF9NQVNLCQkweGMwMDAwMDAwCisjZGVmaW5lIElNUFJfU1BFRURfU0hJRlQJMzAKKyNkZWZpbmUgSU1QUl9YU1BFRURfTUFTSwkweDAwMDAwMDYwCisjZGVmaW5lIElNUFJfWFNQRUVEX1NISUZUCTUKKyNkZWZpbmUgSU1QUl9QTFVHU19NQVNLCQkweDAwMDAwMDFmCisKKyNkZWZpbmUgSVBDUl9PTkxJTkUJCTB4ODAwMDAwMDAKKyNkZWZpbmUgSVBDUl9CQ0FTVF9DT05OCQkweDQwMDAwMDAwCisjZGVmaW5lIElQQ1JfUDJQX0NPTk5fTUFTSwkweDNmMDAwMDAwCisjZGVmaW5lIElQQ1JfUDJQX0NPTk5fU0hJRlQJMjQKKyNkZWZpbmUgSVBDUl9DSEFOTkVMX01BU0sJMHgwMDNmMDAwMAorI2RlZmluZSBJUENSX0NIQU5ORUxfU0hJRlQJMTYKKworZW51bSBidXNfcmVzZXRfaGFuZGxpbmcgeworCUFCT1JUX09OX0JVU19SRVNFVCwKKwlTVUNDRUVEX09OX0JVU19SRVNFVCwKK307CisKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpCit2b2lkIGNtcF9lcnJvcihzdHJ1Y3QgY21wX2Nvbm5lY3Rpb24gKmMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgdmE7CisKKwl2YV9zdGFydCh2YSwgZm10KTsKKwlkZXZfZXJyKCZjLT5yZXNvdXJjZXMudW5pdC0+ZGV2aWNlLCAiJWNQQ1IldTogJXBWIiwKKwkJJ2knLCBjLT5wY3JfaW5kZXgsICYoc3RydWN0IHZhX2Zvcm1hdCl7IGZtdCwgJnZhIH0pOworCXZhX2VuZCh2YSk7Cit9CisKK3N0YXRpYyBpbnQgcGNyX21vZGlmeShzdHJ1Y3QgY21wX2Nvbm5lY3Rpb24gKmMsCisJCSAgICAgIF9fYmUzMiAoKm1vZGlmeSkoc3RydWN0IGNtcF9jb25uZWN0aW9uICpjLCBfX2JlMzIgb2xkKSwKKwkJICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBjbXBfY29ubmVjdGlvbiAqYywgX19iZTMyIHBjciksCisJCSAgICAgIGVudW0gYnVzX3Jlc2V0X2hhbmRsaW5nIGJ1c19yZXNldF9oYW5kbGluZykKK3sKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19wYXJlbnRfZGV2aWNlKGMtPnJlc291cmNlcy51bml0KTsKKwlfX2JlMzIgKmJ1ZmZlciA9IGMtPnJlc291cmNlcy5idWZmZXI7CisJaW50IGdlbmVyYXRpb24gPSBjLT5yZXNvdXJjZXMuZ2VuZXJhdGlvbjsKKwlpbnQgcmNvZGUsIGVycm9ycyA9IDA7CisJX19iZTMyIG9sZF9hcmc7CisJaW50IGVycjsKKworCWJ1ZmZlclswXSA9IGMtPmxhc3RfcGNyX3ZhbHVlOworCWZvciAoOzspIHsKKwkJb2xkX2FyZyA9IGJ1ZmZlclswXTsKKwkJYnVmZmVyWzFdID0gbW9kaWZ5KGMsIGJ1ZmZlclswXSk7CisKKwkJcmNvZGUgPSBmd19ydW5fdHJhbnNhY3Rpb24oCisJCQkJZGV2aWNlLT5jYXJkLCBUQ09ERV9MT0NLX0NPTVBBUkVfU1dBUCwKKwkJCQlkZXZpY2UtPm5vZGVfaWQsIGdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAorCQkJCUNTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0lQQ1IoYy0+cGNyX2luZGV4KSwKKwkJCQlidWZmZXIsIDgpOworCisJCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkgeworCQkJaWYgKGJ1ZmZlclswXSA9PSBvbGRfYXJnKSAvKiBzdWNjZXNzPyAqLworCQkJCWJyZWFrOworCisJCQlpZiAoY2hlY2spIHsKKwkJCQllcnIgPSBjaGVjayhjLCBidWZmZXJbMF0pOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9IGVsc2UgaWYgKHJjb2RlID09IFJDT0RFX0dFTkVSQVRJT04pCisJCQlnb3RvIGJ1c19yZXNldDsKKwkJZWxzZSBpZiAocmNvZGVfaXNfcGVybWFuZW50X2Vycm9yKHJjb2RlKSB8fCArK2Vycm9ycyA+PSAzKQorCQkJZ290byBpb19lcnJvcjsKKwl9CisJYy0+bGFzdF9wY3JfdmFsdWUgPSBidWZmZXJbMV07CisKKwlyZXR1cm4gMDsKKworaW9fZXJyb3I6CisJY21wX2Vycm9yKGMsICJ0cmFuc2FjdGlvbiBmYWlsZWQ6ICVzXG4iLCByY29kZV9zdHJpbmcocmNvZGUpKTsKKwlyZXR1cm4gLUVJTzsKKworYnVzX3Jlc2V0OgorCXJldHVybiBidXNfcmVzZXRfaGFuZGxpbmcgPT0gQUJPUlRfT05fQlVTX1JFU0VUID8gLUVBR0FJTiA6IDA7Cit9CisKKworLyoqCisgKiBjbXBfY29ubmVjdGlvbl9pbml0IC0gaW5pdGlhbGl6ZXMgYSBjb25uZWN0aW9uIG1hbmFnZXIKKyAqIEBjOiB0aGUgY29ubmVjdGlvbiBtYW5hZ2VyIHRvIGluaXRpYWxpemUKKyAqIEB1bml0OiBhIHVuaXQgb2YgdGhlIHRhcmdldCBkZXZpY2UKKyAqIEBpcGNyX2luZGV4OiB0aGUgaW5kZXggb2YgdGhlIGlQQ1Igb24gdGhlIHRhcmdldCBkZXZpY2UKKyAqLworaW50IGNtcF9jb25uZWN0aW9uX2luaXQoc3RydWN0IGNtcF9jb25uZWN0aW9uICpjLAorCQkJc3RydWN0IGZ3X3VuaXQgKnVuaXQsCisJCQl1bnNpZ25lZCBpbnQgaXBjcl9pbmRleCkKK3sKKwlfX2JlMzIgaW1wcl9iZTsKKwl1MzIgaW1wcjsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2Z3X3RyYW5zYWN0aW9uKHVuaXQsIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNULAorCQkJCSBDU1JfUkVHSVNURVJfQkFTRSArIENTUl9JTVBSLAorCQkJCSAmaW1wcl9iZSwgNCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJaW1wciA9IGJlMzJfdG9fY3B1KGltcHJfYmUpOworCisJaWYgKGlwY3JfaW5kZXggPj0gKGltcHIgJiBJTVBSX1BMVUdTX01BU0spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IGZ3X2lzb19yZXNvdXJjZXNfaW5pdCgmYy0+cmVzb3VyY2VzLCB1bml0KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWMtPmNvbm5lY3RlZCA9IGZhbHNlOworCW11dGV4X2luaXQoJmMtPm11dGV4KTsKKwljLT5sYXN0X3Bjcl92YWx1ZSA9IGNwdV90b19iZTMyKDB4ODAwMDAwMDApOworCWMtPnBjcl9pbmRleCA9IGlwY3JfaW5kZXg7CisJYy0+bWF4X3NwZWVkID0gKGltcHIgJiBJTVBSX1NQRUVEX01BU0spID4+IElNUFJfU1BFRURfU0hJRlQ7CisJaWYgKGMtPm1heF9zcGVlZCA9PSBTQ09ERV9CRVRBKQorCQljLT5tYXhfc3BlZWQgKz0gKGltcHIgJiBJTVBSX1hTUEVFRF9NQVNLKSA+PiBJTVBSX1hTUEVFRF9TSElGVDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbXBfY29ubmVjdGlvbl9pbml0KTsKKworLyoqCisgKiBjbXBfY29ubmVjdGlvbl9kZXN0cm95IC0gZnJlZSBjb25uZWN0aW9uIG1hbmFnZXIgcmVzb3VyY2VzCisgKiBAYzogdGhlIGNvbm5lY3Rpb24gbWFuYWdlcgorICovCit2b2lkIGNtcF9jb25uZWN0aW9uX2Rlc3Ryb3koc3RydWN0IGNtcF9jb25uZWN0aW9uICpjKQoreworCVdBUk5fT04oYy0+Y29ubmVjdGVkKTsKKwltdXRleF9kZXN0cm95KCZjLT5tdXRleCk7CisJZndfaXNvX3Jlc291cmNlc19kZXN0cm95KCZjLT5yZXNvdXJjZXMpOworfQorRVhQT1JUX1NZTUJPTChjbXBfY29ubmVjdGlvbl9kZXN0cm95KTsKKworCitzdGF0aWMgX19iZTMyIGlwY3Jfc2V0X21vZGlmeShzdHJ1Y3QgY21wX2Nvbm5lY3Rpb24gKmMsIF9fYmUzMiBpcGNyKQoreworCWlwY3IgJj0gfmNwdV90b19iZTMyKElQQ1JfQkNBU1RfQ09OTiB8CisJCQkgICAgIElQQ1JfUDJQX0NPTk5fTUFTSyB8CisJCQkgICAgIElQQ1JfQ0hBTk5FTF9NQVNLKTsKKwlpcGNyIHw9IGNwdV90b19iZTMyKDEgPDwgSVBDUl9QMlBfQ09OTl9TSElGVCk7CisJaXBjciB8PSBjcHVfdG9fYmUzMihjLT5yZXNvdXJjZXMuY2hhbm5lbCA8PCBJUENSX0NIQU5ORUxfU0hJRlQpOworCisJcmV0dXJuIGlwY3I7Cit9CisKK3N0YXRpYyBpbnQgaXBjcl9zZXRfY2hlY2soc3RydWN0IGNtcF9jb25uZWN0aW9uICpjLCBfX2JlMzIgaXBjcikKK3sKKwlpZiAoaXBjciAmIGNwdV90b19iZTMyKElQQ1JfQkNBU1RfQ09OTiB8CisJCQkgICAgICAgSVBDUl9QMlBfQ09OTl9NQVNLKSkgeworCQljbXBfZXJyb3IoYywgInBsdWcgaXMgYWxyZWFkeSBpbiB1c2VcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoIShpcGNyICYgY3B1X3RvX2JlMzIoSVBDUl9PTkxJTkUpKSkgeworCQljbXBfZXJyb3IoYywgInBsdWcgaXMgbm90IG9uLWxpbmVcbiIpOworCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjbXBfY29ubmVjdGlvbl9lc3RhYmxpc2ggLSBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSB0YXJnZXQKKyAqIEBjOiB0aGUgY29ubmVjdGlvbiBtYW5hZ2VyCisgKiBAbWF4X3BheWxvYWRfYnl0ZXM6IHRoZSBhbW91bnQgb2YgZGF0YSAoaW5jbHVkaW5nIENJUCBoZWFkZXJzKSBwZXIgcGFja2V0CisgKgorICogVGhpcyBmdW5jdGlvbiBlc3RhYmxpc2hlcyBhIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24gZnJvbSB0aGUgbG9jYWwKKyAqIGNvbXB1dGVyIHRvIHRoZSB0YXJnZXQgYnkgYWxsb2NhdGluZyBpc29jaHJvbm91cyByZXNvdXJjZXMgKGNoYW5uZWwgYW5kCisgKiBiYW5kd2lkdGgpIGFuZCBzZXR0aW5nIHRoZSB0YXJnZXQncyBpbnB1dCBwbHVnIGNvbnRyb2wgcmVnaXN0ZXIuICBXaGVuIHRoaXMKKyAqIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyB0cmFuc21pdHRpbmcKKyAqIHBhY2tldHMuCisgKi8KK2ludCBjbXBfY29ubmVjdGlvbl9lc3RhYmxpc2goc3RydWN0IGNtcF9jb25uZWN0aW9uICpjLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbWF4X3BheWxvYWRfYnl0ZXMpCit7CisJaW50IGVycjsKKworCWlmIChXQVJOX09OKGMtPmNvbm5lY3RlZCkpCisJCXJldHVybiAtRUlTQ09OTjsKKworCWMtPnNwZWVkID0gbWluKGMtPm1heF9zcGVlZCwKKwkJICAgICAgIGZ3X3BhcmVudF9kZXZpY2UoYy0+cmVzb3VyY2VzLnVuaXQpLT5tYXhfc3BlZWQpOworCisJbXV0ZXhfbG9jaygmYy0+bXV0ZXgpOworCityZXRyeV9hZnRlcl9idXNfcmVzZXQ6CisJZXJyID0gZndfaXNvX3Jlc291cmNlc19hbGxvY2F0ZSgmYy0+cmVzb3VyY2VzLAorCQkJCQltYXhfcGF5bG9hZF9ieXRlcywgYy0+c3BlZWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9tdXRleDsKKworCWVyciA9IHBjcl9tb2RpZnkoYywgaXBjcl9zZXRfbW9kaWZ5LCBpcGNyX3NldF9jaGVjaywKKwkJCSBBQk9SVF9PTl9CVVNfUkVTRVQpOworCWlmIChlcnIgPT0gLUVBR0FJTikgeworCQlmd19pc29fcmVzb3VyY2VzX2ZyZWUoJmMtPnJlc291cmNlcyk7CisJCWdvdG8gcmV0cnlfYWZ0ZXJfYnVzX3Jlc2V0OworCX0KKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVzb3VyY2VzOworCisJYy0+Y29ubmVjdGVkID0gdHJ1ZTsKKworCW11dGV4X3VubG9jaygmYy0+bXV0ZXgpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZXNvdXJjZXM6CisJZndfaXNvX3Jlc291cmNlc19mcmVlKCZjLT5yZXNvdXJjZXMpOworZXJyX211dGV4OgorCW11dGV4X3VubG9jaygmYy0+bXV0ZXgpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woY21wX2Nvbm5lY3Rpb25fZXN0YWJsaXNoKTsKKworLyoqCisgKiBjbXBfY29ubmVjdGlvbl91cGRhdGUgLSB1cGRhdGUgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgYSBidXMgcmVzZXQKKyAqIEBjOiB0aGUgY29ubmVjdGlvbiBtYW5hZ2VyCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBkcml2ZXIncyAudXBkYXRlIGhhbmRsZXIgdG8gcmVlc3RhYmxpc2gKKyAqIGFueSBjb25uZWN0aW9uIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGFjdGl2ZS4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLiAgT24gYW4gZXJyb3IsIHRoZQorICogY29ubmVjdGlvbiBpcyBicm9rZW4gYW5kIHRoZSBjYWxsZXIgbXVzdCBzdG9wIHRyYW5zbWl0dGluZyBpc28gcGFja2V0cy4KKyAqLworaW50IGNtcF9jb25uZWN0aW9uX3VwZGF0ZShzdHJ1Y3QgY21wX2Nvbm5lY3Rpb24gKmMpCit7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJmMtPm11dGV4KTsKKworCWlmICghYy0+Y29ubmVjdGVkKSB7CisJCW11dGV4X3VubG9jaygmYy0+bXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwllcnIgPSBmd19pc29fcmVzb3VyY2VzX3VwZGF0ZSgmYy0+cmVzb3VyY2VzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfdW5jb25uZWN0OworCisJZXJyID0gcGNyX21vZGlmeShjLCBpcGNyX3NldF9tb2RpZnksIGlwY3Jfc2V0X2NoZWNrLAorCQkJIFNVQ0NFRURfT05fQlVTX1JFU0VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVzb3VyY2VzOworCisJbXV0ZXhfdW5sb2NrKCZjLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKKworZXJyX3Jlc291cmNlczoKKwlmd19pc29fcmVzb3VyY2VzX2ZyZWUoJmMtPnJlc291cmNlcyk7CitlcnJfdW5jb25uZWN0OgorCWMtPmNvbm5lY3RlZCA9IGZhbHNlOworCW11dGV4X3VubG9jaygmYy0+bXV0ZXgpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woY21wX2Nvbm5lY3Rpb25fdXBkYXRlKTsKKworCitzdGF0aWMgX19iZTMyIGlwY3JfYnJlYWtfbW9kaWZ5KHN0cnVjdCBjbXBfY29ubmVjdGlvbiAqYywgX19iZTMyIGlwY3IpCit7CisJcmV0dXJuIGlwY3IgJiB+Y3B1X3RvX2JlMzIoSVBDUl9CQ0FTVF9DT05OIHwgSVBDUl9QMlBfQ09OTl9NQVNLKTsKK30KKworLyoqCisgKiBjbXBfY29ubmVjdGlvbl9icmVhayAtIGJyZWFrIHRoZSBjb25uZWN0aW9uIHRvIHRoZSB0YXJnZXQKKyAqIEBjOiB0aGUgY29ubmVjdGlvbiBtYW5hZ2VyCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWFjdGl2ZXMgdGhlIGNvbm5lY3Rpb24gaW4gdGhlIHRhcmdldCdzIGlucHV0IHBsdWcgY29udHJvbAorICogcmVnaXN0ZXIsIGFuZCBmcmVlcyB0aGUgaXNvY2hyb25vdXMgcmVzb3VyY2VzIG9mIHRoZSBjb25uZWN0aW9uLiAgQmVmb3JlCisgKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBjYWxsZXIgc2hvdWxkIGNlYXNlIHRyYW5zbWl0dGluZyBwYWNrZXRzLgorICovCit2b2lkIGNtcF9jb25uZWN0aW9uX2JyZWFrKHN0cnVjdCBjbXBfY29ubmVjdGlvbiAqYykKK3sKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmYy0+bXV0ZXgpOworCisJaWYgKCFjLT5jb25uZWN0ZWQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisKKwllcnIgPSBwY3JfbW9kaWZ5KGMsIGlwY3JfYnJlYWtfbW9kaWZ5LCBOVUxMLCBTVUNDRUVEX09OX0JVU19SRVNFVCk7CisJaWYgKGVyciA8IDApCisJCWNtcF9lcnJvcihjLCAicGx1ZyBpcyBzdGlsbCBjb25uZWN0ZWRcbiIpOworCisJZndfaXNvX3Jlc291cmNlc19mcmVlKCZjLT5yZXNvdXJjZXMpOworCisJYy0+Y29ubmVjdGVkID0gZmFsc2U7CisKKwltdXRleF91bmxvY2soJmMtPm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woY21wX2Nvbm5lY3Rpb25fYnJlYWspOwpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvY21wLmggYi9zb3VuZC9maXJld2lyZS9jbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDdkZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvZmlyZXdpcmUvY21wLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBTT1VORF9GSVJFV0lSRV9DTVBfSF9JTkNMVURFRAorI2RlZmluZSBTT1VORF9GSVJFV0lSRV9DTVBfSF9JTkNMVURFRAorCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgImlzby1yZXNvdXJjZXMuaCIKKworc3RydWN0IGZ3X3VuaXQ7CisKKy8qKgorICogc3RydWN0IGNtcF9jb25uZWN0aW9uIC0gbWFuYWdlcyBhbiBpc29jaHJvbm91cyBjb25uZWN0aW9uIHRvIGEgZGV2aWNlCisgKiBAc3BlZWQ6IHRoZSBjb25uZWN0aW9uJ3MgYWN0dWFsIHNwZWVkCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgbWFuYWdlcyAodXNpbmcgQ01QKSBhbiBpc29jaHJvbm91cyBzdHJlYW0gZnJvbSB0aGUgbG9jYWwKKyAqIGNvbXB1dGVyIHRvIGEgZGV2aWNlJ3MgaW5wdXQgcGx1ZyAoaVBDUikuCisgKgorICogVGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBvUENSIGNyZWF0ZWQgb24gdGhlIGxvY2FsIGNvbXB1dGVyLCBzbyBpdCBpcyBub3QKKyAqIHBvc3NpYmxlIHRvIG92ZXJsYXkgY29ubmVjdGlvbnMgb24gdG9wIG9mIHRoaXMgb25lLgorICovCitzdHJ1Y3QgY21wX2Nvbm5lY3Rpb24geworCWludCBzcGVlZDsKKwkvKiBwcml2YXRlOiAqLworCWJvb2wgY29ubmVjdGVkOworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3QgZndfaXNvX3Jlc291cmNlcyByZXNvdXJjZXM7CisJX19iZTMyIGxhc3RfcGNyX3ZhbHVlOworCXVuc2lnbmVkIGludCBwY3JfaW5kZXg7CisJdW5zaWduZWQgaW50IG1heF9zcGVlZDsKK307CisKK2ludCBjbXBfY29ubmVjdGlvbl9pbml0KHN0cnVjdCBjbXBfY29ubmVjdGlvbiAqY29ubmVjdGlvbiwKKwkJCXN0cnVjdCBmd191bml0ICp1bml0LAorCQkJdW5zaWduZWQgaW50IGlwY3JfaW5kZXgpOwordm9pZCBjbXBfY29ubmVjdGlvbl9kZXN0cm95KHN0cnVjdCBjbXBfY29ubmVjdGlvbiAqY29ubmVjdGlvbik7CisKK2ludCBjbXBfY29ubmVjdGlvbl9lc3RhYmxpc2goc3RydWN0IGNtcF9jb25uZWN0aW9uICpjb25uZWN0aW9uLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbWF4X3BheWxvYWQpOworaW50IGNtcF9jb25uZWN0aW9uX3VwZGF0ZShzdHJ1Y3QgY21wX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24pOwordm9pZCBjbXBfY29ubmVjdGlvbl9icmVhayhzdHJ1Y3QgY21wX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2ZjcC5jIGIvc291bmQvZmlyZXdpcmUvZmNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1NzhiNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2ZpcmV3aXJlL2ZjcC5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogRnVuY3Rpb24gQ29udHJvbCBQcm90b2NvbCAoSUVDIDYxODgzLTEpIGhlbHBlciBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgorICogTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJld2lyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLWNvbnN0YW50cy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiZmNwLmgiCisjaW5jbHVkZSAibGliLmgiCisKKyNkZWZpbmUgQ1RTX0FWQyAweDAwCisKKyNkZWZpbmUgRVJST1JfUkVUUklFUwkzCisjZGVmaW5lIEVSUk9SX0RFTEFZX01TCTUKKyNkZWZpbmUgRkNQX1RJTUVPVVRfTVMJMTI1CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhbnNhY3Rpb25zX2xvY2spOworc3RhdGljIExJU1RfSEVBRCh0cmFuc2FjdGlvbnMpOworCitlbnVtIGZjcF9zdGF0ZSB7CisJU1RBVEVfUEVORElORywKKwlTVEFURV9CVVNfUkVTRVQsCisJU1RBVEVfQ09NUExFVEUsCit9OworCitzdHJ1Y3QgZmNwX3RyYW5zYWN0aW9uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGZ3X3VuaXQgKnVuaXQ7CisJdm9pZCAqcmVzcG9uc2VfYnVmZmVyOworCXVuc2lnbmVkIGludCByZXNwb25zZV9zaXplOworCXVuc2lnbmVkIGludCByZXNwb25zZV9tYXRjaF9ieXRlczsKKwllbnVtIGZjcF9zdGF0ZSBzdGF0ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworLyoqCisgKiBmY3BfYXZjX3RyYW5zYWN0aW9uIC0gc2VuZCBhbiBBVi9DIGNvbW1hbmQgYW5kIHdhaXQgZm9yIGl0cyByZXNwb25zZQorICogQHVuaXQ6IGEgdW5pdCBvbiB0aGUgdGFyZ2V0IGRldmljZQorICogQGNvbW1hbmQ6IGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQgZnJhbWU7IG11c3QgYmUgRE1BLWFibGUKKyAqIEBjb21tYW5kX3NpemU6IHRoZSBzaXplIG9mIEBjb21tYW5kCisgKiBAcmVzcG9uc2U6IGEgYnVmZmVyIGZvciB0aGUgcmVzcG9uc2UgZnJhbWUKKyAqIEByZXNwb25zZV9zaXplOiB0aGUgbWF4aW11bSBzaXplIG9mIEByZXNwb25zZQorICogQHJlc3BvbnNlX21hdGNoX2J5dGVzOiBhIGJpdG1hcCBzcGVjaWZ5aW5nIHRoZSBieXRlcyB1c2VkIHRvIGRldGVjdCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdCByZXNwb25zZSBmcmFtZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBGQ1AgY29tbWFuZCBmcmFtZSB0byB0aGUgdGFyZ2V0IGFuZCB3YWl0cyBmb3IgdGhlCisgKiBjb3JyZXNwb25kaW5nIHJlc3BvbnNlIGZyYW1lIHRvIGJlIHJldHVybmVkLgorICoKKyAqIEJlY2F1c2UgaXQgaXMgcG9zc2libGUgZm9yIG11bHRpcGxlIEZDUCB0cmFuc2FjdGlvbnMgdG8gYmUgYWN0aXZlIGF0IHRoZQorICogc2FtZSB0aW1lLCB0aGUgY29ycmVjdCByZXNwb25zZSBmcmFtZSBpcyBkZXRlY3RlZCBieSB0aGUgdmFsdWUgb2YgY2VydGFpbgorICogYnl0ZXMuICBUaGVzZSBieXRlcyBtdXN0IGJlIHNldCBpbiBAcmVzcG9uc2UgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwKKyAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBiaXRzIG11c3QgYmUgc2V0IGluIEByZXNwb25zZV9tYXRjaF9ieXRlcy4KKyAqCisgKiBAY29tbWFuZCBhbmQgQHJlc3BvbnNlIGNhbiBwb2ludCB0byB0aGUgc2FtZSBidWZmZXIuCisgKgorICogQXN5bmNocm9ub3VzIG9wZXJhdGlvbiAoSU5URVJJTSwgTk9USUZZKSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQuCisgKgorICogUmV0dXJucyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIHJlc3BvbnNlIGZyYW1lLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBmY3BfYXZjX3RyYW5zYWN0aW9uKHN0cnVjdCBmd191bml0ICp1bml0LAorCQkJY29uc3Qgdm9pZCAqY29tbWFuZCwgdW5zaWduZWQgaW50IGNvbW1hbmRfc2l6ZSwKKwkJCXZvaWQgKnJlc3BvbnNlLCB1bnNpZ25lZCBpbnQgcmVzcG9uc2Vfc2l6ZSwKKwkJCXVuc2lnbmVkIGludCByZXNwb25zZV9tYXRjaF9ieXRlcykKK3sKKwlzdHJ1Y3QgZmNwX3RyYW5zYWN0aW9uIHQ7CisJaW50IHRjb2RlLCByZXQsIHRyaWVzID0gMDsKKworCXQudW5pdCA9IHVuaXQ7CisJdC5yZXNwb25zZV9idWZmZXIgPSByZXNwb25zZTsKKwl0LnJlc3BvbnNlX3NpemUgPSByZXNwb25zZV9zaXplOworCXQucmVzcG9uc2VfbWF0Y2hfYnl0ZXMgPSByZXNwb25zZV9tYXRjaF9ieXRlczsKKwl0LnN0YXRlID0gU1RBVEVfUEVORElORzsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0LndhaXQpOworCisJc3Bpbl9sb2NrX2lycSgmdHJhbnNhY3Rpb25zX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnQubGlzdCwgJnRyYW5zYWN0aW9ucyk7CisJc3Bpbl91bmxvY2tfaXJxKCZ0cmFuc2FjdGlvbnNfbG9jayk7CisKKwlmb3IgKDs7KSB7CisJCXRjb2RlID0gY29tbWFuZF9zaXplID09IDQgPyBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QKKwkJCQkJICA6IFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1Q7CisJCXJldCA9IHNuZF9md190cmFuc2FjdGlvbih0LnVuaXQsIHRjb2RlLAorCQkJCQkgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfRkNQX0NPTU1BTkQsCisJCQkJCSAodm9pZCAqKWNvbW1hbmQsIGNvbW1hbmRfc2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJd2FpdF9ldmVudF90aW1lb3V0KHQud2FpdCwgdC5zdGF0ZSAhPSBTVEFURV9QRU5ESU5HLAorCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoRkNQX1RJTUVPVVRfTVMpKTsKKworCQlpZiAodC5zdGF0ZSA9PSBTVEFURV9DT01QTEVURSkgeworCQkJcmV0ID0gdC5yZXNwb25zZV9zaXplOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodC5zdGF0ZSA9PSBTVEFURV9CVVNfUkVTRVQpIHsKKwkJCW1zbGVlcChFUlJPUl9ERUxBWV9NUyk7CisJCX0gZWxzZSBpZiAoKyt0cmllcyA+PSBFUlJPUl9SRVRSSUVTKSB7CisJCQlkZXZfZXJyKCZ0LnVuaXQtPmRldmljZSwgIkZDUCBjb21tYW5kIHRpbWVkIG91dFxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxKCZ0cmFuc2FjdGlvbnNfbG9jayk7CisJbGlzdF9kZWwoJnQubGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ0cmFuc2FjdGlvbnNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChmY3BfYXZjX3RyYW5zYWN0aW9uKTsKKworLyoqCisgKiBmY3BfYnVzX3Jlc2V0IC0gaW5mb3JtIHRoZSB0YXJnZXQgaGFuZGxlciBhYm91dCBhIGJ1cyByZXNldAorICogQHVuaXQ6IHRoZSB1bml0IHRoYXQgbWlnaHQgYmUgdXNlZCBieSBmY3BfYXZjX3RyYW5zYWN0aW9uKCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIGRyaXZlcidzIC51cGRhdGUgaGFuZGxlciB0byBpbmZvcm0KKyAqIHRoZSBGQ1AgdHJhbnNhY3Rpb24gaGFuZGxlciB0aGF0IGEgYnVzIHJlc2V0IGhhcyBoYXBwZW5lZC4gIEFueSBwZW5kaW5nIEZDUAorICogdHJhbnNhY3Rpb25zIGFyZSByZXRyaWVkLgorICovCit2b2lkIGZjcF9idXNfcmVzZXQoc3RydWN0IGZ3X3VuaXQgKnVuaXQpCit7CisJc3RydWN0IGZjcF90cmFuc2FjdGlvbiAqdDsKKworCXNwaW5fbG9ja19pcnEoJnRyYW5zYWN0aW9uc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZ0cmFuc2FjdGlvbnMsIGxpc3QpIHsKKwkJaWYgKHQtPnVuaXQgPT0gdW5pdCAmJgorCQkgICAgdC0+c3RhdGUgPT0gU1RBVEVfUEVORElORykgeworCQkJdC0+c3RhdGUgPSBTVEFURV9CVVNfUkVTRVQ7CisJCQl3YWtlX3VwKCZ0LT53YWl0KTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJnRyYW5zYWN0aW9uc19sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woZmNwX2J1c19yZXNldCk7CisKKy8qIGNoZWNrcyB3aGV0aGVyIHRoZSByZXNwb25zZSBtYXRjaGVzIHRoZSBtYXNrZWQgYnl0ZXMgaW4gcmVzcG9uc2VfYnVmZmVyICovCitzdGF0aWMgYm9vbCBpc19tYXRjaGluZ19yZXNwb25zZShzdHJ1Y3QgZmNwX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgY29uc3Qgdm9pZCAqcmVzcG9uc2UsIHNpemVfdCBsZW5ndGgpCit7CisJY29uc3QgdTggKnAxLCAqcDI7CisJdW5zaWduZWQgaW50IG1hc2ssIGk7CisKKwlwMSA9IHJlc3BvbnNlOworCXAyID0gdHJhbnNhY3Rpb24tPnJlc3BvbnNlX2J1ZmZlcjsKKwltYXNrID0gdHJhbnNhY3Rpb24tPnJlc3BvbnNlX21hdGNoX2J5dGVzOworCisJZm9yIChpID0gMDsgOyArK2kpIHsKKwkJaWYgKChtYXNrICYgMSkgJiYgcDFbaV0gIT0gcDJbaV0pCisJCQlyZXR1cm4gZmFsc2U7CisJCW1hc2sgPj49IDE7CisJCWlmICghbWFzaykKKwkJCXJldHVybiB0cnVlOworCQlpZiAoLS1sZW5ndGggPT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZjcF9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCisJCQkgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCisJCQkgaW50IGdlbmVyYXRpb24sIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCQkgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3sKKwlzdHJ1Y3QgZmNwX3RyYW5zYWN0aW9uICp0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobGVuZ3RoIDwgMSB8fCAoKihjb25zdCB1OCAqKWRhdGEgJiAweGYwKSAhPSBDVFNfQVZDKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhbnNhY3Rpb25zX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZ0cmFuc2FjdGlvbnMsIGxpc3QpIHsKKwkJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfcGFyZW50X2RldmljZSh0LT51bml0KTsKKwkJaWYgKGRldmljZS0+Y2FyZCAhPSBjYXJkIHx8CisJCSAgICBkZXZpY2UtPmdlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikKKwkJCWNvbnRpbnVlOworCQlzbXBfcm1iKCk7IC8qIG5vZGVfaWQgdnMuIGdlbmVyYXRpb24gKi8KKwkJaWYgKGRldmljZS0+bm9kZV9pZCAhPSBzb3VyY2UpCisJCQljb250aW51ZTsKKworCQlpZiAodC0+c3RhdGUgPT0gU1RBVEVfUEVORElORyAmJgorCQkgICAgaXNfbWF0Y2hpbmdfcmVzcG9uc2UodCwgZGF0YSwgbGVuZ3RoKSkgeworCQkJdC0+c3RhdGUgPSBTVEFURV9DT01QTEVURTsKKwkJCXQtPnJlc3BvbnNlX3NpemUgPSBtaW4oKHVuc2lnbmVkIGludClsZW5ndGgsCisJCQkJCSAgICAgICB0LT5yZXNwb25zZV9zaXplKTsKKwkJCW1lbWNweSh0LT5yZXNwb25zZV9idWZmZXIsIGRhdGEsIHQtPnJlc3BvbnNlX3NpemUpOworCQkJd2FrZV91cCgmdC0+d2FpdCk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHJhbnNhY3Rpb25zX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgcmVzcG9uc2VfcmVnaXN0ZXJfaGFuZGxlciA9IHsKKwkubGVuZ3RoID0gMHgyMDAsCisJLmFkZHJlc3NfY2FsbGJhY2sgPSBmY3BfcmVzcG9uc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmY3BfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIHJlc3BvbnNlX3JlZ2lzdGVyX3JlZ2lvbiA9IHsKKwkJLnN0YXJ0ID0gQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfRkNQX1JFU1BPTlNFLAorCQkuZW5kID0gQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfRkNQX0VORCwKKwl9OworCisJZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZyZXNwb25zZV9yZWdpc3Rlcl9oYW5kbGVyLAorCQkJCSAgICAmcmVzcG9uc2VfcmVnaXN0ZXJfcmVnaW9uKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZmNwX21vZHVsZV9leGl0KHZvaWQpCit7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmdHJhbnNhY3Rpb25zKSk7CisJZndfY29yZV9yZW1vdmVfYWRkcmVzc19oYW5kbGVyKCZyZXNwb25zZV9yZWdpc3Rlcl9oYW5kbGVyKTsKK30KKworbW9kdWxlX2luaXQoZmNwX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGZjcF9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9mY3AuaCBiL3NvdW5kL2ZpcmV3aXJlL2ZjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTk1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9maXJld2lyZS9mY3AuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIFNPVU5EX0ZJUkVXSVJFX0ZDUF9IX0lOQ0xVREVECisjZGVmaW5lIFNPVU5EX0ZJUkVXSVJFX0ZDUF9IX0lOQ0xVREVECisKK3N0cnVjdCBmd191bml0OworCitpbnQgZmNwX2F2Y190cmFuc2FjdGlvbihzdHJ1Y3QgZndfdW5pdCAqdW5pdCwKKwkJCWNvbnN0IHZvaWQgKmNvbW1hbmQsIHVuc2lnbmVkIGludCBjb21tYW5kX3NpemUsCisJCQl2b2lkICpyZXNwb25zZSwgdW5zaWduZWQgaW50IHJlc3BvbnNlX3NpemUsCisJCQl1bnNpZ25lZCBpbnQgcmVzcG9uc2VfbWF0Y2hfYnl0ZXMpOwordm9pZCBmY3BfYnVzX3Jlc2V0KHN0cnVjdCBmd191bml0ICp1bml0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmMgYi9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1ZGJkNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuYwpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIGlzb2Nocm9ub3VzIHJlc291cmNlcyBoZWxwZXIgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgImlzby1yZXNvdXJjZXMuaCIKKworLyoqCisgKiBmd19pc29fcmVzb3VyY2VzX2luaXQgLSBpbml0aWFsaXplcyBhICZzdHJ1Y3QgZndfaXNvX3Jlc291cmNlcworICogQHI6IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGluaXRpYWxpemUKKyAqIEB1bml0OiB0aGUgZGV2aWNlIHVuaXQgZm9yIHdoaWNoIHRoZSByZXNvdXJjZXMgd2lsbCBiZSBuZWVkZWQKKyAqCisgKiBJZiB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgYWxsIGNoYW5uZWwgbnVtYmVycywgY2hhbmdlIEByLT5jaGFubmVsc19tYXNrCisgKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK2ludCBmd19pc29fcmVzb3VyY2VzX2luaXQoc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIsIHN0cnVjdCBmd191bml0ICp1bml0KQoreworCXItPmJ1ZmZlciA9IGttYWxsb2MoMiAqIDQsIEdGUF9LRVJORUwpOworCWlmICghci0+YnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXItPmNoYW5uZWxzX21hc2sgPSB+MHVMTDsKKwlyLT51bml0ID0gZndfdW5pdF9nZXQodW5pdCk7CisJbXV0ZXhfaW5pdCgmci0+bXV0ZXgpOworCXItPmFsbG9jYXRlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZndfaXNvX3Jlc291cmNlc19kZXN0cm95IC0gZGVzdHJveSBhIHJlc291cmNlIG1hbmFnZXIKKyAqIEByOiB0aGUgcmVzb3VyY2UgbWFuYWdlciB0aGF0IGlzIG5vIGxvbmdlciBuZWVkZWQKKyAqLwordm9pZCBmd19pc29fcmVzb3VyY2VzX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIpCit7CisJV0FSTl9PTihyLT5hbGxvY2F0ZWQpOworCWtmcmVlKHItPmJ1ZmZlcik7CisJbXV0ZXhfZGVzdHJveSgmci0+bXV0ZXgpOworCWZ3X3VuaXRfcHV0KHItPnVuaXQpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tldF9iYW5kd2lkdGgodW5zaWduZWQgaW50IG1heF9wYXlsb2FkX2J5dGVzLCBpbnQgc3BlZWQpCit7CisJdW5zaWduZWQgaW50IGJ5dGVzLCBzNDAwX2J5dGVzOworCisJLyogaXNvIHBhY2tldHMgaGF2ZSB0aHJlZSBoZWFkZXIgcXVhZGxldHMgYW5kIHF1YWRsZXQtYWxpZ25lZCBwYXlsb2FkICovCisJYnl0ZXMgPSAzICogNCArIEFMSUdOKG1heF9wYXlsb2FkX2J5dGVzLCA0KTsKKworCS8qIGNvbnZlcnQgdG8gYmFuZHdpZHRoIHVuaXRzIChxdWFkbGV0cyBhdCBTMTYwMCA9IGJ5dGVzIGF0IFM0MDApICovCisJaWYgKHNwZWVkIDw9IFNDT0RFXzQwMCkKKwkJczQwMF9ieXRlcyA9IGJ5dGVzICogKDEgPDwgKFNDT0RFXzQwMCAtIHNwZWVkKSk7CisJZWxzZQorCQlzNDAwX2J5dGVzID0gRElWX1JPVU5EX1VQKGJ5dGVzLCAxIDw8IChzcGVlZCAtIFNDT0RFXzQwMCkpOworCisJcmV0dXJuIHM0MDBfYnl0ZXM7Cit9CisKK3N0YXRpYyBpbnQgY3VycmVudF9iYW5kd2lkdGhfb3ZlcmhlYWQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCit7CisJLyoKKwkgKiBVbmRlciB0aGUgdXN1YWwgcGVzc2ltaXN0aWMgYXNzdW1wdGlvbiAoY2FibGUgbGVuZ3RoIDQuNSBtKSwgdGhlCisJICogaXNvY2hyb25vdXMgb3ZlcmhlYWQgZm9yIE4gY2FibGVzIGlzIDEuNzk3IMK1cyArIE4gKiAwLjQ5NCDCtXMsIG9yCisJICogODguMyArIE4gKiAyNC4zIGluIGJhbmR3aWR0aCB1bml0cy4KKwkgKgorCSAqIFRoZSBjYWxjdWxhdGlvbiBiZWxvdyB0cmllcyB0byBkZWR1Y2UgTiBmcm9tIHRoZSBjdXJyZW50IGdhcCBjb3VudC4KKwkgKiBJZiB0aGUgZ2FwIGNvdW50IGhhcyBiZWVuIG9wdGltaXplZCBieSBtZWFzdXJpbmcgdGhlIGFjdHVhbCBwYWNrZXQKKwkgKiB0cmFuc21pc3Npb24gdGltZSwgdGhpcyBkZXJpdmVkIG92ZXJoZWFkIHNob3VsZCBiZSBuZWFyIHRoZSBhY3R1YWwKKwkgKiBvdmVyaGVhZCBhcyB3ZWxsLgorCSAqLworCXJldHVybiBjYXJkLT5nYXBfY291bnQgPCA2MyA/IGNhcmQtPmdhcF9jb3VudCAqIDk3IC8gMTAgKyA4OSA6IDUxMjsKK30KKworc3RhdGljIGludCB3YWl0X2lzb2NoX3Jlc291cmNlX2RlbGF5X2FmdGVyX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3sKKwlmb3IgKDs7KSB7CisJCXM2NCBkZWxheSA9IChjYXJkLT5yZXNldF9qaWZmaWVzICsgSFopIC0gZ2V0X2ppZmZpZXNfNjQoKTsKKwkJaWYgKGRlbGF5IDw9IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShkZWxheSkgPiAwKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9Cit9CisKKy8qKgorICogZndfaXNvX3Jlc291cmNlc19hbGxvY2F0ZSAtIGFsbG9jYXRlIGlzb2Nocm9ub3VzIGNoYW5uZWwgYW5kIGJhbmR3aWR0aAorICogQHI6IHRoZSByZXNvdXJjZSBtYW5hZ2VyCisgKiBAbWF4X3BheWxvYWRfYnl0ZXM6IHRoZSBhbW91bnQgb2YgZGF0YSAoaW5jbHVkaW5nIENJUCBoZWFkZXJzKSBwZXIgcGFja2V0CisgKiBAc3BlZWQ6IHRoZSBzcGVlZCAoZS5nLiwgU0NPREVfNDAwKSBhdCB3aGljaCB0aGUgcGFja2V0cyB3aWxsIGJlIHNlbnQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBvbmUgaXNvY2hyb25vdXMgY2hhbm5lbCBhbmQgZW5vdWdoIGJhbmR3aWR0aCBmb3IgdGhlCisgKiBzcGVjaWZpZWQgcGFja2V0IHNpemUuCisgKgorICogUmV0dXJucyB0aGUgY2hhbm5lbCBudW1iZXIgdGhhdCB0aGUgY2FsbGVyIG11c3QgdXNlIGZvciBzdHJlYW1pbmcsIG9yCisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuICBEdWUgdG8gcG90ZW50aW9uYWxseSBsb25nIGRlbGF5cywgdGhpcyBmdW5jdGlvbiBpcworICogaW50ZXJydXB0aWJsZSBhbmQgY2FuIHJldHVybiAtRVJFU1RBUlRTWVMuICBPbiBzdWNjZXNzLCB0aGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBmd19pc29fcmVzb3VyY2VzX3VwZGF0ZSgpIG9uIGJ1cyByZXNldHMsIGFuZAorICogZndfaXNvX3Jlc291cmNlc19mcmVlKCkgd2hlbiB0aGUgcmVzb3VyY2VzIGFyZSBub3QgbG9uZ2VyIG5lZWRlZC4KKyAqLworaW50IGZ3X2lzb19yZXNvdXJjZXNfYWxsb2NhdGUoc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X3BheWxvYWRfYnl0ZXMsIGludCBzcGVlZCkKK3sKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGZ3X3BhcmVudF9kZXZpY2Uoci0+dW5pdCktPmNhcmQ7CisJaW50IGJhbmR3aWR0aCwgY2hhbm5lbCwgZXJyOworCisJaWYgKFdBUk5fT04oci0+YWxsb2NhdGVkKSkKKwkJcmV0dXJuIC1FQkFERkQ7CisKKwlyLT5iYW5kd2lkdGggPSBwYWNrZXRfYmFuZHdpZHRoKG1heF9wYXlsb2FkX2J5dGVzLCBzcGVlZCk7CisKK3JldHJ5X2FmdGVyX2J1c19yZXNldDoKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5sb2NrKTsKKwlyLT5nZW5lcmF0aW9uID0gY2FyZC0+Z2VuZXJhdGlvbjsKKwlyLT5iYW5kd2lkdGhfb3ZlcmhlYWQgPSBjdXJyZW50X2JhbmR3aWR0aF9vdmVyaGVhZChjYXJkKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPmxvY2spOworCisJZXJyID0gd2FpdF9pc29jaF9yZXNvdXJjZV9kZWxheV9hZnRlcl9idXNfcmVzZXQoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwltdXRleF9sb2NrKCZyLT5tdXRleCk7CisKKwliYW5kd2lkdGggPSByLT5iYW5kd2lkdGggKyByLT5iYW5kd2lkdGhfb3ZlcmhlYWQ7CisJZndfaXNvX3Jlc291cmNlX21hbmFnZShjYXJkLCByLT5nZW5lcmF0aW9uLCByLT5jaGFubmVsc19tYXNrLAorCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlLCByLT5idWZmZXIpOworCWlmIChjaGFubmVsID09IC1FQUdBSU4pIHsKKwkJbXV0ZXhfdW5sb2NrKCZyLT5tdXRleCk7CisJCWdvdG8gcmV0cnlfYWZ0ZXJfYnVzX3Jlc2V0OworCX0KKwlpZiAoY2hhbm5lbCA+PSAwKSB7CisJCXItPmNoYW5uZWwgPSBjaGFubmVsOworCQlyLT5hbGxvY2F0ZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCWlmIChjaGFubmVsID09IC1FQlVTWSkKKwkJCWRldl9lcnIoJnItPnVuaXQtPmRldmljZSwKKwkJCQkiaXNvY2hyb25vdXMgcmVzb3VyY2VzIGV4aGF1c3RlZFxuIik7CisJCWVsc2UKKwkJCWRldl9lcnIoJnItPnVuaXQtPmRldmljZSwKKwkJCQkiaXNvY2hyb25vdXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCX0KKworCW11dGV4X3VubG9jaygmci0+bXV0ZXgpOworCisJcmV0dXJuIGNoYW5uZWw7Cit9CisKKy8qKgorICogZndfaXNvX3Jlc291cmNlc191cGRhdGUgLSB1cGRhdGUgcmVzb3VyY2UgYWxsb2NhdGlvbnMgYWZ0ZXIgYSBidXMgcmVzZXQKKyAqIEByOiB0aGUgcmVzb3VyY2UgbWFuYWdlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgZHJpdmVyJ3MgLnVwZGF0ZSBoYW5kbGVyIHRvIHJlYWxsb2NhdGUKKyAqIGFueSByZXNvdXJjZXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBiZWZvcmUgdGhlIGJ1cyByZXNldC4gIEl0IGlzIHNhZmUgdG8gY2FsbAorICogdGhpcyBmdW5jdGlvbiBpZiBubyByZXNvdXJjZXMgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuCisgKgorICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gIElmIHRoaXMgaGFwcGVucywgdGhlIGNhbGxlciBtdXN0CisgKiBzdG9wIHN0cmVhbWluZy4KKyAqLworaW50IGZ3X2lzb19yZXNvdXJjZXNfdXBkYXRlKHN0cnVjdCBmd19pc29fcmVzb3VyY2VzICpyKQoreworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gZndfcGFyZW50X2RldmljZShyLT51bml0KS0+Y2FyZDsKKwlpbnQgYmFuZHdpZHRoLCBjaGFubmVsOworCisJbXV0ZXhfbG9jaygmci0+bXV0ZXgpOworCisJaWYgKCFyLT5hbGxvY2F0ZWQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOworCXItPmdlbmVyYXRpb24gPSBjYXJkLT5nZW5lcmF0aW9uOworCXItPmJhbmR3aWR0aF9vdmVyaGVhZCA9IGN1cnJlbnRfYmFuZHdpZHRoX292ZXJoZWFkKGNhcmQpOworCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+bG9jayk7CisKKwliYW5kd2lkdGggPSByLT5iYW5kd2lkdGggKyByLT5iYW5kd2lkdGhfb3ZlcmhlYWQ7CisKKwlmd19pc29fcmVzb3VyY2VfbWFuYWdlKGNhcmQsIHItPmdlbmVyYXRpb24sIDF1TEwgPDwgci0+Y2hhbm5lbCwKKwkJCSAgICAgICAmY2hhbm5lbCwgJmJhbmR3aWR0aCwgdHJ1ZSwgci0+YnVmZmVyKTsKKwkvKgorCSAqIFdoZW4gYW5vdGhlciBidXMgcmVzZXQgaGFwcGVucywgcHJldGVuZCB0aGF0IHRoZSBhbGxvY2F0aW9uCisJICogc3VjY2VlZGVkOyB3ZSB3aWxsIHRyeSBhZ2FpbiBmb3IgdGhlIG5ldyBnZW5lcmF0aW9uIGxhdGVyLgorCSAqLworCWlmIChjaGFubmVsIDwgMCAmJiBjaGFubmVsICE9IC1FQUdBSU4pIHsKKwkJci0+YWxsb2NhdGVkID0gZmFsc2U7CisJCWlmIChjaGFubmVsID09IC1FQlVTWSkKKwkJCWRldl9lcnIoJnItPnVuaXQtPmRldmljZSwKKwkJCQkiaXNvY2hyb25vdXMgcmVzb3VyY2VzIGV4aGF1c3RlZFxuIik7CisJCWVsc2UKKwkJCWRldl9lcnIoJnItPnVuaXQtPmRldmljZSwKKwkJCQkiaXNvY2hyb25vdXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCX0KKworCW11dGV4X3VubG9jaygmci0+bXV0ZXgpOworCisJcmV0dXJuIGNoYW5uZWw7Cit9CisKKy8qKgorICogZndfaXNvX3Jlc291cmNlc19mcmVlIC0gZnJlZXMgYWxsb2NhdGVkIHJlc291cmNlcworICogQHI6IHRoZSByZXNvdXJjZSBtYW5hZ2VyCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWFsbG9jYXRlcyB0aGUgY2hhbm5lbCBhbmQgYmFuZHdpZHRoLCBpZiBhbGxvY2F0ZWQuCisgKi8KK3ZvaWQgZndfaXNvX3Jlc291cmNlc19mcmVlKHN0cnVjdCBmd19pc29fcmVzb3VyY2VzICpyKQoreworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gZndfcGFyZW50X2RldmljZShyLT51bml0KS0+Y2FyZDsKKwlpbnQgYmFuZHdpZHRoLCBjaGFubmVsOworCisJbXV0ZXhfbG9jaygmci0+bXV0ZXgpOworCisJaWYgKHItPmFsbG9jYXRlZCkgeworCQliYW5kd2lkdGggPSByLT5iYW5kd2lkdGggKyByLT5iYW5kd2lkdGhfb3ZlcmhlYWQ7CisJCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2FyZCwgci0+Z2VuZXJhdGlvbiwgMXVMTCA8PCByLT5jaGFubmVsLAorCQkJCSAgICAgICAmY2hhbm5lbCwgJmJhbmR3aWR0aCwgZmFsc2UsIHItPmJ1ZmZlcik7CisJCWlmIChjaGFubmVsIDwgMCkKKwkJCWRldl9lcnIoJnItPnVuaXQtPmRldmljZSwKKwkJCQkiaXNvY2hyb25vdXMgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisKKwkJci0+YWxsb2NhdGVkID0gZmFsc2U7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyLT5tdXRleCk7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmggYi9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwNzMwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBTT1VORF9GSVJFV0lSRV9JU09fUkVTT1VSQ0VTX0hfSU5DTFVERUQKKyNkZWZpbmUgU09VTkRfRklSRVdJUkVfSVNPX1JFU09VUkNFU19IX0lOQ0xVREVECisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBmd191bml0OworCisvKioKKyAqIHN0cnVjdCBmd19pc29fcmVzb3VyY2VzIC0gbWFuYWdlcyBjaGFubmVsL2JhbmR3aWR0aCBhbGxvY2F0aW9uCisgKiBAY2hhbm5lbHNfbWFzazogaWYgdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGFsbCBjaGFubmVsIG51bWJlcnMsIHNldCB0aGlzCisgKiAgICAgICAgICAgICAgICAgYml0IG1hc2sgdG8gc29tZXRoaW5nIGVsc2UgdGhhbiB0aGUgZGVmYXVsdCAoYWxsIG9uZXMpCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgbWFuYWdlcyAoZGUpYWxsb2NhdGlvbiBvZiBpc29jaHJvbm91cyByZXNvdXJjZXMgKGNoYW5uZWwgYW5kCisgKiBiYW5kd2lkdGgpIGZvciBvbmUgaXNvY2hyb25vdXMgc3RyZWFtLgorICovCitzdHJ1Y3QgZndfaXNvX3Jlc291cmNlcyB7CisJdTY0IGNoYW5uZWxzX21hc2s7CisJLyogcHJpdmF0ZTogKi8KKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdDsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJdW5zaWduZWQgaW50IGNoYW5uZWw7CisJdW5zaWduZWQgaW50IGJhbmR3aWR0aDsgLyogaW4gYmFuZHdpZHRoIHVuaXRzLCB3aXRob3V0IG92ZXJoZWFkICovCisJdW5zaWduZWQgaW50IGJhbmR3aWR0aF9vdmVyaGVhZDsKKwlpbnQgZ2VuZXJhdGlvbjsgLyogaW4gd2hpY2ggYWxsb2NhdGlvbiBpcyB2YWxpZCAqLworCWJvb2wgYWxsb2NhdGVkOworCV9fYmUzMiAqYnVmZmVyOworfTsKKworaW50IGZ3X2lzb19yZXNvdXJjZXNfaW5pdChzdHJ1Y3QgZndfaXNvX3Jlc291cmNlcyAqciwKKwkJCSAgc3RydWN0IGZ3X3VuaXQgKnVuaXQpOwordm9pZCBmd19pc29fcmVzb3VyY2VzX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIpOworCitpbnQgZndfaXNvX3Jlc291cmNlc19hbGxvY2F0ZShzdHJ1Y3QgZndfaXNvX3Jlc291cmNlcyAqciwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBtYXhfcGF5bG9hZF9ieXRlcywgaW50IHNwZWVkKTsKK2ludCBmd19pc29fcmVzb3VyY2VzX3VwZGF0ZShzdHJ1Y3QgZndfaXNvX3Jlc291cmNlcyAqcik7Cit2b2lkIGZ3X2lzb19yZXNvdXJjZXNfZnJlZShzdHJ1Y3QgZndfaXNvX3Jlc291cmNlcyAqcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvbGliLmMgYi9zb3VuZC9maXJld2lyZS9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUwY2VhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvZmlyZXdpcmUvbGliLmMKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIG1pc2NlbGxhbmVvdXMgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlICJsaWIuaCIKKworI2RlZmluZSBFUlJPUl9SRVRSWV9ERUxBWV9NUwk1CisKKy8qKgorICogcmNvZGVfc3RyaW5nIC0gY29udmVydCBhIGZpcmV3aXJlIHJlc3VsdCBjb2RlIHRvIGEgc3RyaW5nCisgKiBAcmNvZGU6IHRoZSByZXN1bHQKKyAqLworY29uc3QgY2hhciAqcmNvZGVfc3RyaW5nKHVuc2lnbmVkIGludCByY29kZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKwkJW1JDT0RFX0NPTVBMRVRFXQk9ICJjb21wbGV0ZSIsCisJCVtSQ09ERV9DT05GTElDVF9FUlJPUl0JPSAiY29uZmxpY3QgZXJyb3IiLAorCQlbUkNPREVfREFUQV9FUlJPUl0JPSAiZGF0YSBlcnJvciIsCisJCVtSQ09ERV9UWVBFX0VSUk9SXQk9ICJ0eXBlIGVycm9yIiwKKwkJW1JDT0RFX0FERFJFU1NfRVJST1JdCT0gImFkZHJlc3MgZXJyb3IiLAorCQlbUkNPREVfU0VORF9FUlJPUl0JPSAic2VuZCBlcnJvciIsCisJCVtSQ09ERV9DQU5DRUxMRURdCT0gImNhbmNlbGxlZCIsCisJCVtSQ09ERV9CVVNZXQkJPSAiYnVzeSIsCisJCVtSQ09ERV9HRU5FUkFUSU9OXQk9ICJnZW5lcmF0aW9uIiwKKwkJW1JDT0RFX05PX0FDS10JCT0gIm5vIGFjayIsCisJfTsKKworCWlmIChyY29kZSA8IEFSUkFZX1NJWkUobmFtZXMpICYmIG5hbWVzW3Jjb2RlXSkKKwkJcmV0dXJuIG5hbWVzW3Jjb2RlXTsKKwllbHNlCisJCXJldHVybiAidW5rbm93biI7Cit9CitFWFBPUlRfU1lNQk9MKHJjb2RlX3N0cmluZyk7CisKKy8qKgorICogc25kX2Z3X3RyYW5zYWN0aW9uIC0gc2VuZCBhIHJlcXVlc3QgYW5kIHdhaXQgZm9yIGl0cyBjb21wbGV0aW9uCisgKiBAdW5pdDogdGhlIGRyaXZlcidzIHVuaXQgb24gdGhlIHRhcmdldCBkZXZpY2UKKyAqIEB0Y29kZTogdGhlIHRyYW5zYWN0aW9uIGNvZGUKKyAqIEBvZmZzZXQ6IHRoZSBhZGRyZXNzIGluIHRoZSB0YXJnZXQncyBhZGRyZXNzIHNwYWNlCisgKiBAYnVmZmVyOiBpbnB1dC9vdXRwdXQgZGF0YQorICogQGxlbmd0aDogbGVuZ3RoIG9mIEBidWZmZXIKKyAqCisgKiBTdWJtaXRzIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHRvIHRoZSB0YXJnZXQgZGV2aWNlLCBhbmQgd2FpdHMgZm9yIHRoZQorICogcmVzcG9uc2UuICBUaGUgbm9kZSBJRCBhbmQgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBhcmUgZGVyaXZlZCBmcm9tIEB1bml0LgorICogT24gYSBidXMgcmVzZXQgb3IgYW4gZXJyb3IsIHRoZSB0cmFuc2FjdGlvbiBpcyByZXRyaWVkIGEgZmV3IHRpbWVzLgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IHNuZF9md190cmFuc2FjdGlvbihzdHJ1Y3QgZndfdW5pdCAqdW5pdCwgaW50IHRjb2RlLAorCQkgICAgICAgdTY0IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X3BhcmVudF9kZXZpY2UodW5pdCk7CisJaW50IGdlbmVyYXRpb24sIHJjb2RlLCB0cmllcyA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWdlbmVyYXRpb24gPSBkZXZpY2UtPmdlbmVyYXRpb247CisJCXNtcF9ybWIoKTsgLyogbm9kZV9pZCB2cy4gZ2VuZXJhdGlvbiAqLworCQlyY29kZSA9IGZ3X3J1bl90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsIHRjb2RlLAorCQkJCQkgICBkZXZpY2UtPm5vZGVfaWQsIGdlbmVyYXRpb24sCisJCQkJCSAgIGRldmljZS0+bWF4X3NwZWVkLCBvZmZzZXQsCisJCQkJCSAgIGJ1ZmZlciwgbGVuZ3RoKTsKKworCQlpZiAocmNvZGUgPT0gUkNPREVfQ09NUExFVEUpCisJCQlyZXR1cm4gMDsKKworCQlpZiAocmNvZGVfaXNfcGVybWFuZW50X2Vycm9yKHJjb2RlKSB8fCArK3RyaWVzID49IDMpIHsKKwkJCWRldl9lcnIoJnVuaXQtPmRldmljZSwgInRyYW5zYWN0aW9uIGZhaWxlZDogJXNcbiIsCisJCQkJcmNvZGVfc3RyaW5nKHJjb2RlKSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCW1zbGVlcChFUlJPUl9SRVRSWV9ERUxBWV9NUyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChzbmRfZndfdHJhbnNhY3Rpb24pOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkZpcmVXaXJlIGF1ZGlvIGhlbHBlciBmdW5jdGlvbnMiKTsKK01PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvbGliLmggYi9zb3VuZC9maXJld2lyZS9saWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjRmM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvZmlyZXdpcmUvbGliLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBTT1VORF9GSVJFV0lSRV9MSUJfSF9JTkNMVURFRAorI2RlZmluZSBTT1VORF9GSVJFV0lSRV9MSUJfSF9JTkNMVURFRAorCisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGZ3X3VuaXQ7CisKK2ludCBzbmRfZndfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X3VuaXQgKnVuaXQsIGludCB0Y29kZSwKKwkJICAgICAgIHU2NCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7Citjb25zdCBjaGFyICpyY29kZV9zdHJpbmcodW5zaWduZWQgaW50IHJjb2RlKTsKKworLyogcmV0dXJucyB0cnVlIGlmIHJldHJ5aW5nIHRoZSB0cmFuc2FjdGlvbiB3b3VsZCBub3QgbWFrZSBzZW5zZSAqLworc3RhdGljIGlubGluZSBib29sIHJjb2RlX2lzX3Blcm1hbmVudF9lcnJvcihpbnQgcmNvZGUpCit7CisJcmV0dXJuIHJjb2RlID09IFJDT0RFX1RZUEVfRVJST1IgfHwgcmNvZGUgPT0gUkNPREVfQUREUkVTU19FUlJPUjsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9wYWNrZXRzLWJ1ZmZlci5jIGIvc291bmQvZmlyZXdpcmUvcGFja2V0cy1idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTIwZTYwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvZmlyZXdpcmUvcGFja2V0cy1idWZmZXIuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogaGVscGVycyBmb3IgbWFuYWdpbmcgYSBidWZmZXIgZm9yIG1hbnkgcGFja2V0cworICoKKyAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgInBhY2tldHMtYnVmZmVyLmgiCisKKy8qKgorICogaXNvX3BhY2tldHNfYnVmZmVyX2luaXQgLSBhbGxvY2F0ZXMgdGhlIG1lbW9yeSBmb3IgcGFja2V0cworICogQGI6IHRoZSBidWZmZXIgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqIEB1bml0OiB0aGUgZGV2aWNlIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIHN0cmVhbQorICogQGNvdW50OiB0aGUgbnVtYmVyIG9mIHBhY2tldHMKKyAqIEBwYWNrZXRfc2l6ZTogdGhlIChtYXhpbXVtKSBzaXplIG9mIGEgcGFja2V0LCBpbiBieXRlcworICogQGRpcmVjdGlvbjogJURNQV9UT19ERVZJQ0Ugb3IgJURNQV9GUk9NX0RFVklDRQorICovCitpbnQgaXNvX3BhY2tldHNfYnVmZmVyX2luaXQoc3RydWN0IGlzb19wYWNrZXRzX2J1ZmZlciAqYiwgc3RydWN0IGZ3X3VuaXQgKnVuaXQsCisJCQkgICAgdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgcGFja2V0X3NpemUsCisJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBwYWNrZXRzX3Blcl9wYWdlLCBwYWdlczsKKwl1bnNpZ25lZCBpbnQgaSwgcGFnZV9pbmRleCwgb2Zmc2V0X2luX3BhZ2U7CisJdm9pZCAqcDsKKwlpbnQgZXJyOworCisJYi0+cGFja2V0cyA9IGttYWxsb2MoY291bnQgKiBzaXplb2YoKmItPnBhY2tldHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWItPnBhY2tldHMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwYWNrZXRfc2l6ZSA9IEwxX0NBQ0hFX0FMSUdOKHBhY2tldF9zaXplKTsKKwlwYWNrZXRzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gcGFja2V0X3NpemU7CisJaWYgKFdBUk5fT04oIXBhY2tldHNfcGVyX3BhZ2UpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCXBhZ2VzID0gRElWX1JPVU5EX1VQKGNvdW50LCBwYWNrZXRzX3Blcl9wYWdlKTsKKworCWVyciA9IGZ3X2lzb19idWZmZXJfaW5pdCgmYi0+aXNvX2J1ZmZlciwgZndfcGFyZW50X2RldmljZSh1bml0KS0+Y2FyZCwKKwkJCQkgcGFnZXMsIGRpcmVjdGlvbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3BhY2tldHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQlwYWdlX2luZGV4ID0gaSAvIHBhY2tldHNfcGVyX3BhZ2U7CisJCXAgPSBwYWdlX2FkZHJlc3MoYi0+aXNvX2J1ZmZlci5wYWdlc1twYWdlX2luZGV4XSk7CisJCW9mZnNldF9pbl9wYWdlID0gKGkgJSBwYWNrZXRzX3Blcl9wYWdlKSAqIHBhY2tldF9zaXplOworCQliLT5wYWNrZXRzW2ldLmJ1ZmZlciA9IHAgKyBvZmZzZXRfaW5fcGFnZTsKKwkJYi0+cGFja2V0c1tpXS5vZmZzZXQgPSBwYWdlX2luZGV4ICogUEFHRV9TSVpFICsgb2Zmc2V0X2luX3BhZ2U7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9wYWNrZXRzOgorCWtmcmVlKGItPnBhY2tldHMpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpc29fcGFja2V0c19idWZmZXJfZGVzdHJveSAtIGZyZWVzIHBhY2tldCBidWZmZXIgcmVzb3VyY2VzCisgKiBAYjogdGhlIGJ1ZmZlciBzdHJ1Y3R1cmUgdG8gZnJlZQorICogQHVuaXQ6IHRoZSBkZXZpY2UgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgc3RyZWFtCisgKi8KK3ZvaWQgaXNvX3BhY2tldHNfYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGlzb19wYWNrZXRzX2J1ZmZlciAqYiwKKwkJCQlzdHJ1Y3QgZndfdW5pdCAqdW5pdCkKK3sKKwlmd19pc29fYnVmZmVyX2Rlc3Ryb3koJmItPmlzb19idWZmZXIsIGZ3X3BhcmVudF9kZXZpY2UodW5pdCktPmNhcmQpOworCWtmcmVlKGItPnBhY2tldHMpOworfQpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvcGFja2V0cy1idWZmZXIuaCBiL3NvdW5kL2ZpcmV3aXJlL3BhY2tldHMtYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxM2M1YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2ZpcmV3aXJlL3BhY2tldHMtYnVmZmVyLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBTT1VORF9GSVJFV0lSRV9QQUNLRVRTX0JVRkZFUl9IX0lOQ0xVREVECisjZGVmaW5lIFNPVU5EX0ZJUkVXSVJFX1BBQ0tFVFNfQlVGRkVSX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUuaD4KKworLyoqCisgKiBzdHJ1Y3QgaXNvX3BhY2tldHNfYnVmZmVyIC0gbWFuYWdlcyBhIGJ1ZmZlciBmb3IgbWFueSBwYWNrZXRzCisgKiBAaXNvX2J1ZmZlcjogdGhlIG1lbW9yeSBjb250YWluaW5nIHRoZSBwYWNrZXRzCisgKiBAcGFja2V0czogYW4gYXJyYXksIHdpdGggZWFjaCBlbGVtZW50IHBvaW50aW5nIHRvIG9uZSBwYWNrZXQKKyAqLworc3RydWN0IGlzb19wYWNrZXRzX2J1ZmZlciB7CisJc3RydWN0IGZ3X2lzb19idWZmZXIgaXNvX2J1ZmZlcjsKKwlzdHJ1Y3QgeworCQl2b2lkICpidWZmZXI7CisJCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJfSAqcGFja2V0czsKK307CisKK2ludCBpc29fcGFja2V0c19idWZmZXJfaW5pdChzdHJ1Y3QgaXNvX3BhY2tldHNfYnVmZmVyICpiLCBzdHJ1Y3QgZndfdW5pdCAqdW5pdCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZSwKKwkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwordm9pZCBpc29fcGFja2V0c19idWZmZXJfZGVzdHJveShzdHJ1Y3QgaXNvX3BhY2tldHNfYnVmZmVyICpiLAorCQkJCXN0cnVjdCBmd191bml0ICp1bml0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9zcGVha2Vycy5jIGIvc291bmQvZmlyZXdpcmUvc3BlYWtlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmNlOTIxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvZmlyZXdpcmUvc3BlYWtlcnMuYwpAQCAtMCwwICsxLDg1OCBAQAorLyoKKyAqIE9YRlc5NzAtYmFzZWQgc3BlYWtlcnMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSAiY21wLmgiCisjaW5jbHVkZSAiZmNwLmgiCisjaW5jbHVkZSAiYW1kdHAuaCIKKyNpbmNsdWRlICJsaWIuaCIKKworI2RlZmluZSBPWEZPUkRfRklSTVdBUkVfSURfQUREUkVTUwkoQ1NSX1JFR0lTVEVSX0JBU0UgKyAweDUwMDAwKQorLyogMHg5NzA/dnZ2diBvciAweDk3MT92dnZ2LCB3aGVyZSB2dnZ2ID0gZmlybXdhcmUgdmVyc2lvbiAqLworCisjZGVmaW5lIE9YRk9SRF9IQVJEV0FSRV9JRF9BRERSRVNTCShDU1JfUkVHSVNURVJfQkFTRSArIDB4OTAwMjApCisjZGVmaW5lIE9YRk9SRF9IQVJEV0FSRV9JRF9PWEZXOTcwCTB4Mzk0NDM4NDEKKyNkZWZpbmUgT1hGT1JEX0hBUkRXQVJFX0lEX09YRlc5NzEJMHgzOTM3MzEwMAorCisjZGVmaW5lIFZFTkRPUl9HUklGRklOCQkweDAwMTI5MgorI2RlZmluZSBWRU5ET1JfTEFDSUUJCTB4MDBkMDRiCisKKyNkZWZpbmUgU1BFQ0lGSUVSXzEzOTRUQQkweDAwYTAyZAorI2RlZmluZSBWRVJTSU9OX0FWQwkJMHgwMTAwMDEKKworc3RydWN0IGRldmljZV9pbmZvIHsKKwljb25zdCBjaGFyICpkcml2ZXJfbmFtZTsKKwljb25zdCBjaGFyICpzaG9ydF9uYW1lOworCWNvbnN0IGNoYXIgKmxvbmdfbmFtZTsKKwlpbnQgKCpwY21fY29uc3RyYWludHMpKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpOworCXVuc2lnbmVkIGludCBtaXhlcl9jaGFubmVsczsKKwl1OCBtdXRlX2ZiX2lkOworCXU4IHZvbHVtZV9mYl9pZDsKK307CisKK3N0cnVjdCBmd3NwayB7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBmd191bml0ICp1bml0OworCWNvbnN0IHN0cnVjdCBkZXZpY2VfaW5mbyAqZGV2aWNlX2luZm87CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwY207CisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBjbXBfY29ubmVjdGlvbiBjb25uZWN0aW9uOworCXN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtIHN0cmVhbTsKKwlib29sIHN0cmVhbV9ydW5uaW5nOworCWJvb2wgbXV0ZTsKKwlzMTYgdm9sdW1lWzZdOworCXMxNiB2b2x1bWVfbWluOworCXMxNiB2b2x1bWVfbWF4OworfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJGaXJlV2lyZSBzcGVha2VycyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCitzdGF0aWMgaW50IGZpcmV3YXZlX3JhdGVfY29uc3RyYWludChzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IHN0ZXJlb19yYXRlc1tdID0geyA0ODAwMCwgOTYwMDAgfTsKKwlzdHJ1Y3Qgc25kX2ludGVydmFsICpjaGFubmVscyA9CisJCQlod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqcmF0ZSA9CisJCQlod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKKworCS8qIHR3byBjaGFubmVscyB3b3JrIG9ubHkgYXQgNDgvOTYga0h6ICovCisJaWYgKHNuZF9pbnRlcnZhbF9tYXgoY2hhbm5lbHMpIDwgNikKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9saXN0KHJhdGUsIDIsIHN0ZXJlb19yYXRlcywgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlyZXdhdmVfY2hhbm5lbHNfY29uc3RyYWludChzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkJc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9pbnRlcnZhbCBhbGxfY2hhbm5lbHMgPSB7IC5taW4gPSA2LCAubWF4ID0gNiB9OworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnJhdGUgPQorCQkJaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSk7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqY2hhbm5lbHMgPQorCQkJaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCisJLyogMzIvNDQuMSBrSHogd29yayBvbmx5IHdpdGggYWxsIHNpeCBjaGFubmVscyAqLworCWlmIChzbmRfaW50ZXJ2YWxfbWF4KHJhdGUpIDwgNDgwMDApCisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGNoYW5uZWxzLCAmYWxsX2NoYW5uZWxzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaXJld2F2ZV9jb25zdHJhaW50cyhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbGlzdFtdID0geyAyLCA2IH07CisJc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBjaGFubmVsc19saXN0X2NvbnN0cmFpbnQgPSB7CisJCS5jb3VudCA9IDIsCisJCS5saXN0ID0gY2hhbm5lbHNfbGlzdCwKKwl9OworCWludCBlcnI7CisKKwlydW50aW1lLT5ody5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCSAgICBTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQkgICAgU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJICAgIFNORFJWX1BDTV9SQVRFXzk2MDAwOworCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IDY7CisKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLAorCQkJCQkgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorCQkJCQkgJmNoYW5uZWxzX2xpc3RfY29uc3RyYWludCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKwkJCQkgIGZpcmV3YXZlX3JhdGVfY29uc3RyYWludCwgTlVMTCwKKwkJCQkgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgLTEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9wY21faHdfcnVsZV9hZGQocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorCQkJCSAgZmlyZXdhdmVfY2hhbm5lbHNfY29uc3RyYWludCwgTlVMTCwKKwkJCQkgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAtMSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsYWNpZV9zcGVha2Vyc19jb25zdHJhaW50cyhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCXJ1bnRpbWUtPmh3LnJhdGVzID0gU05EUlZfUENNX1JBVEVfMzIwMDAgfAorCQkJICAgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCSAgICBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkgICAgU05EUlZfUENNX1JBVEVfODgyMDAgfAorCQkJICAgIFNORFJWX1BDTV9SQVRFXzk2MDAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZndzcGtfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgaGFyZHdhcmUgPSB7CisJCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCVNORFJWX1BDTV9JTkZPX0JBVENIIHwKKwkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSLAorCQkuZm9ybWF0cyA9IEFNRFRQX09VVF9QQ01fRk9STUFUX0JJVFMsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLmJ1ZmZlcl9ieXRlc19tYXggPSA0ICogMTAyNCAqIDEwMjQsCisJCS5wZXJpb2RfYnl0ZXNfbWluID0gMSwKKwkJLnBlcmlvZF9ieXRlc19tYXggPSBVSU5UX01BWCwKKwkJLnBlcmlvZHNfbWluID0gMSwKKwkJLnBlcmlvZHNfbWF4ID0gVUlOVF9NQVgsCisJfTsKKwlzdHJ1Y3QgZndzcGsgKmZ3c3BrID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpbnQgZXJyOworCisJcnVudGltZS0+aHcgPSBoYXJkd2FyZTsKKworCWVyciA9IGZ3c3BrLT5kZXZpY2VfaW5mby0+cGNtX2NvbnN0cmFpbnRzKHJ1bnRpbWUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9wY21fbGltaXRfaHdfcmF0ZXMocnVudGltZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsCisJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRSwKKwkJCQkJICAgNTAwMCwgODE5MjAwMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmd3Nwa19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZndzcGtfc3RvcF9zdHJlYW0oc3RydWN0IGZ3c3BrICpmd3NwaykKK3sKKwlpZiAoZndzcGstPnN0cmVhbV9ydW5uaW5nKSB7CisJCWFtZHRwX291dF9zdHJlYW1fc3RvcCgmZndzcGstPnN0cmVhbSk7CisJCWNtcF9jb25uZWN0aW9uX2JyZWFrKCZmd3Nway0+Y29ubmVjdGlvbik7CisJCWZ3c3BrLT5zdHJlYW1fcnVubmluZyA9IGZhbHNlOworCX0KK30KKworc3RhdGljIGludCBmd3Nwa19zZXRfcmF0ZShzdHJ1Y3QgZndzcGsgKmZ3c3BrLCB1bnNpZ25lZCBpbnQgc2ZjKQoreworCXU4ICpidWY7CisJaW50IGVycjsKKworCWJ1ZiA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJYnVmWzBdID0gMHgwMDsJCS8qIEFWL0MsIENPTlRST0wgKi8KKwlidWZbMV0gPSAweGZmOwkJLyogdW5pdCAqLworCWJ1ZlsyXSA9IDB4MTk7CQkvKiBJTlBVVCBQTFVHIFNJR05BTCBGT1JNQVQgKi8KKwlidWZbM10gPSAweDAwOwkJLyogcGx1ZyAwICovCisJYnVmWzRdID0gMHg5MDsJCS8qIGZvcm1hdDogYXVkaW8gKi8KKwlidWZbNV0gPSAweDAwIHwgc2ZjOwkvKiBBTTgyNCwgZnJlcXVlbmN5ICovCisJYnVmWzZdID0gMHhmZjsJCS8qIFNZVCAobm90IHVzZWQpICovCisJYnVmWzddID0gMHhmZjsKKworCWVyciA9IGZjcF9hdmNfdHJhbnNhY3Rpb24oZndzcGstPnVuaXQsIGJ1ZiwgOCwgYnVmLCA4LAorCQkJCSAgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpIHwgQklUKDQpIHwgQklUKDUpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKwlpZiAoZXJyIDwgNiB8fCBidWZbMF0gIT0gMHgwOSAvKiBBQ0NFUFRFRCAqLykgeworCQlkZXZfZXJyKCZmd3Nway0+dW5pdC0+ZGV2aWNlLCAiZmFpbGVkIHRvIHNldCBzYW1wbGUgcmF0ZVxuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gMDsKKworZXJyb3I6CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZndzcGtfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGZ3c3BrICpmd3NwayA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZmd3Nway0+bXV0ZXgpOworCWZ3c3BrX3N0b3Bfc3RyZWFtKGZ3c3BrKTsKKwltdXRleF91bmxvY2soJmZ3c3BrLT5tdXRleCk7CisKKwllcnIgPSBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJYW1kdHBfb3V0X3N0cmVhbV9zZXRfcmF0ZSgmZndzcGstPnN0cmVhbSwgcGFyYW1zX3JhdGUoaHdfcGFyYW1zKSk7CisJYW1kdHBfb3V0X3N0cmVhbV9zZXRfcGNtKCZmd3Nway0+c3RyZWFtLCBwYXJhbXNfY2hhbm5lbHMoaHdfcGFyYW1zKSk7CisKKwlhbWR0cF9vdXRfc3RyZWFtX3NldF9wY21fZm9ybWF0KCZmd3Nway0+c3RyZWFtLAorCQkJCQlwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcykpOworCisJZXJyID0gZndzcGtfc2V0X3JhdGUoZndzcGssIGZ3c3BrLT5zdHJlYW0uc2ZjKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfYnVmZmVyOworCisJcmV0dXJuIDA7CisKK2Vycl9idWZmZXI6CisJc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0pOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmd3Nwa19od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBmd3NwayAqZndzcGsgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKworCW11dGV4X2xvY2soJmZ3c3BrLT5tdXRleCk7CisJZndzcGtfc3RvcF9zdHJlYW0oZndzcGspOworCW11dGV4X3VubG9jaygmZndzcGstPm11dGV4KTsKKworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgZndzcGtfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZndzcGsgKmZ3c3BrID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJmZ3c3BrLT5tdXRleCk7CisKKwlpZiAoYW1kdHBfb3V0X3N0cmVhbWluZ19lcnJvcigmZndzcGstPnN0cmVhbSkpCisJCWZ3c3BrX3N0b3Bfc3RyZWFtKGZ3c3BrKTsKKworCWlmICghZndzcGstPnN0cmVhbV9ydW5uaW5nKSB7CisJCWVyciA9IGNtcF9jb25uZWN0aW9uX2VzdGFibGlzaCgmZndzcGstPmNvbm5lY3Rpb24sCisJCQlhbWR0cF9vdXRfc3RyZWFtX2dldF9tYXhfcGF5bG9hZCgmZndzcGstPnN0cmVhbSkpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyX211dGV4OworCisJCWVyciA9IGFtZHRwX291dF9zdHJlYW1fc3RhcnQoJmZ3c3BrLT5zdHJlYW0sCisJCQkJCWZ3c3BrLT5jb25uZWN0aW9uLnJlc291cmNlcy5jaGFubmVsLAorCQkJCQlmd3Nway0+Y29ubmVjdGlvbi5zcGVlZCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfY29ubmVjdGlvbjsKKworCQlmd3Nway0+c3RyZWFtX3J1bm5pbmcgPSB0cnVlOworCX0KKworCW11dGV4X3VubG9jaygmZndzcGstPm11dGV4KTsKKworCWFtZHRwX291dF9zdHJlYW1fcGNtX3ByZXBhcmUoJmZ3c3BrLT5zdHJlYW0pOworCisJcmV0dXJuIDA7CisKK2Vycl9jb25uZWN0aW9uOgorCWNtcF9jb25uZWN0aW9uX2JyZWFrKCZmd3Nway0+Y29ubmVjdGlvbik7CitlcnJfbXV0ZXg6CisJbXV0ZXhfdW5sb2NrKCZmd3Nway0+bXV0ZXgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmd3Nwa190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBmd3NwayAqZndzcGsgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBjbTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJcGNtID0gc3Vic3RyZWFtOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCXBjbSA9IE5VTEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlhbWR0cF9vdXRfc3RyZWFtX3BjbV90cmlnZ2VyKCZmd3Nway0+c3RyZWFtLCBwY20pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgZndzcGtfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZndzcGsgKmZ3c3BrID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gYW1kdHBfb3V0X3N0cmVhbV9wY21fcG9pbnRlcigmZndzcGstPnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgZndzcGtfY3JlYXRlX3BjbShzdHJ1Y3QgZndzcGsgKmZ3c3BrKQoreworCXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgb3BzID0geworCQkub3BlbiAgICAgID0gZndzcGtfb3BlbiwKKwkJLmNsb3NlICAgICA9IGZ3c3BrX2Nsb3NlLAorCQkuaW9jdGwgICAgID0gc25kX3BjbV9saWJfaW9jdGwsCisJCS5od19wYXJhbXMgPSBmd3Nwa19od19wYXJhbXMsCisJCS5od19mcmVlICAgPSBmd3Nwa19od19mcmVlLAorCQkucHJlcGFyZSAgID0gZndzcGtfcHJlcGFyZSwKKwkJLnRyaWdnZXIgICA9IGZ3c3BrX3RyaWdnZXIsCisJCS5wb2ludGVyICAgPSBmd3Nwa19wb2ludGVyLAorCQkucGFnZSAgICAgID0gc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkJLm1tYXAgICAgICA9IHNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKKwl9OworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IGVycjsKKworCWVyciA9IHNuZF9wY21fbmV3KGZ3c3BrLT5jYXJkLCAiT1hGVzk3MCIsIDAsIDEsIDAsICZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gZndzcGs7CisJc3RyY3B5KHBjbS0+bmFtZSwgZndzcGstPmRldmljZV9pbmZvLT5zaG9ydF9uYW1lKTsKKwlmd3Nway0+cGNtID0gcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN1YnN0cmVhbTsKKwlmd3Nway0+cGNtLT5vcHMgPSAmb3BzOworCXJldHVybiAwOworfQorCitlbnVtIGNvbnRyb2xfYWN0aW9uIHsgQ1RMX1JFQUQsIENUTF9XUklURSB9OworZW51bSBjb250cm9sX2F0dHJpYnV0ZSB7CisJQ1RMX01JTgkJPSAweDAyLAorCUNUTF9NQVgJCT0gMHgwMywKKwlDVExfQ1VSUkVOVAk9IDB4MTAsCit9OworCitzdGF0aWMgaW50IGZ3c3BrX211dGVfY29tbWFuZChzdHJ1Y3QgZndzcGsgKmZ3c3BrLCBib29sICp2YWx1ZSwKKwkJCSAgICAgIGVudW0gY29udHJvbF9hY3Rpb24gYWN0aW9uKQoreworCXU4ICpidWY7CisJdTggcmVzcG9uc2Vfb2s7CisJaW50IGVycjsKKworCWJ1ZiA9IGttYWxsb2MoMTEsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhY3Rpb24gPT0gQ1RMX1JFQUQpIHsKKwkJYnVmWzBdID0gMHgwMTsJCS8qIEFWL0MsIFNUQVRVUyAqLworCQlyZXNwb25zZV9vayA9IDB4MGM7CS8qICAgICAgIFNUQUJMRSAqLworCX0gZWxzZSB7CisJCWJ1ZlswXSA9IDB4MDA7CQkvKiBBVi9DLCBDT05UUk9MICovCisJCXJlc3BvbnNlX29rID0gMHgwOTsJLyogICAgICAgQUNDRVBURUQgKi8KKwl9CisJYnVmWzFdID0gMHgwODsJCQkvKiBhdWRpbyB1bml0IDAgKi8KKwlidWZbMl0gPSAweGI4OwkJCS8qIEZVTkNUSU9OIEJMT0NLICovCisJYnVmWzNdID0gMHg4MTsJCQkvKiBmdW5jdGlvbiBibG9jayB0eXBlOiBmZWF0dXJlICovCisJYnVmWzRdID0gZndzcGstPmRldmljZV9pbmZvLT5tdXRlX2ZiX2lkOyAvKiBmdW5jdGlvbiBibG9jayBJRCAqLworCWJ1Zls1XSA9IDB4MTA7CQkJLyogY29udHJvbCBhdHRyaWJ1dGU6IGN1cnJlbnQgKi8KKwlidWZbNl0gPSAweDAyOwkJCS8qIHNlbGVjdG9yIGxlbmd0aCAqLworCWJ1Zls3XSA9IDB4MDA7CQkJLyogYXVkaW8gY2hhbm5lbCBudW1iZXIgKi8KKwlidWZbOF0gPSAweDAxOwkJCS8qIGNvbnRyb2wgc2VsZWN0b3I6IG11dGUgKi8KKwlidWZbOV0gPSAweDAxOwkJCS8qIGNvbnRyb2wgZGF0YSBsZW5ndGggKi8KKwlpZiAoYWN0aW9uID09IENUTF9SRUFEKQorCQlidWZbMTBdID0gMHhmZjsKKwllbHNlCisJCWJ1ZlsxMF0gPSAqdmFsdWUgPyAweDcwIDogMHg2MDsKKworCWVyciA9IGZjcF9hdmNfdHJhbnNhY3Rpb24oZndzcGstPnVuaXQsIGJ1ZiwgMTEsIGJ1ZiwgMTEsIDB4M2ZlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKwlpZiAoZXJyIDwgMTEpIHsKKwkJZGV2X2VycigmZndzcGstPnVuaXQtPmRldmljZSwgInNob3J0IEZDUCByZXNwb25zZVxuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCWlmIChidWZbMF0gIT0gcmVzcG9uc2Vfb2spIHsKKwkJZGV2X2VycigmZndzcGstPnVuaXQtPmRldmljZSwgIm11dGUgY29tbWFuZCBmYWlsZWRcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoYWN0aW9uID09IENUTF9SRUFEKQorCQkqdmFsdWUgPSBidWZbMTBdID09IDB4NzA7CisKKwllcnIgPSAwOworCitlcnJvcjoKKwlrZnJlZShidWYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmd3Nwa192b2x1bWVfY29tbWFuZChzdHJ1Y3QgZndzcGsgKmZ3c3BrLCBzMTYgKnZhbHVlLAorCQkJCXVuc2lnbmVkIGludCBjaGFubmVsLAorCQkJCWVudW0gY29udHJvbF9hdHRyaWJ1dGUgYXR0cmlidXRlLAorCQkJCWVudW0gY29udHJvbF9hY3Rpb24gYWN0aW9uKQoreworCXU4ICpidWY7CisJdTggcmVzcG9uc2Vfb2s7CisJaW50IGVycjsKKworCWJ1ZiA9IGttYWxsb2MoMTIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhY3Rpb24gPT0gQ1RMX1JFQUQpIHsKKwkJYnVmWzBdID0gMHgwMTsJCS8qIEFWL0MsIFNUQVRVUyAqLworCQlyZXNwb25zZV9vayA9IDB4MGM7CS8qICAgICAgIFNUQUJMRSAqLworCX0gZWxzZSB7CisJCWJ1ZlswXSA9IDB4MDA7CQkvKiBBVi9DLCBDT05UUk9MICovCisJCXJlc3BvbnNlX29rID0gMHgwOTsJLyogICAgICAgQUNDRVBURUQgKi8KKwl9CisJYnVmWzFdID0gMHgwODsJCQkvKiBhdWRpbyB1bml0IDAgKi8KKwlidWZbMl0gPSAweGI4OwkJCS8qIEZVTkNUSU9OIEJMT0NLICovCisJYnVmWzNdID0gMHg4MTsJCQkvKiBmdW5jdGlvbiBibG9jayB0eXBlOiBmZWF0dXJlICovCisJYnVmWzRdID0gZndzcGstPmRldmljZV9pbmZvLT52b2x1bWVfZmJfaWQ7IC8qIGZ1bmN0aW9uIGJsb2NrIElEICovCisJYnVmWzVdID0gYXR0cmlidXRlOwkJLyogY29udHJvbCBhdHRyaWJ1dGUgKi8KKwlidWZbNl0gPSAweDAyOwkJCS8qIHNlbGVjdG9yIGxlbmd0aCAqLworCWJ1Zls3XSA9IGNoYW5uZWw7CQkvKiBhdWRpbyBjaGFubmVsIG51bWJlciAqLworCWJ1Zls4XSA9IDB4MDI7CQkJLyogY29udHJvbCBzZWxlY3Rvcjogdm9sdW1lICovCisJYnVmWzldID0gMHgwMjsJCQkvKiBjb250cm9sIGRhdGEgbGVuZ3RoICovCisJaWYgKGFjdGlvbiA9PSBDVExfUkVBRCkgeworCQlidWZbMTBdID0gMHhmZjsKKwkJYnVmWzExXSA9IDB4ZmY7CisJfSBlbHNlIHsKKwkJYnVmWzEwXSA9ICp2YWx1ZSA+PiA4OworCQlidWZbMTFdID0gKnZhbHVlOworCX0KKworCWVyciA9IGZjcF9hdmNfdHJhbnNhY3Rpb24oZndzcGstPnVuaXQsIGJ1ZiwgMTIsIGJ1ZiwgMTIsIDB4M2ZlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKwlpZiAoZXJyIDwgMTIpIHsKKwkJZGV2X2VycigmZndzcGstPnVuaXQtPmRldmljZSwgInNob3J0IEZDUCByZXNwb25zZVxuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCWlmIChidWZbMF0gIT0gcmVzcG9uc2Vfb2spIHsKKwkJZGV2X2VycigmZndzcGstPnVuaXQtPmRldmljZSwgInZvbHVtZSBjb21tYW5kIGZhaWxlZFxuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCWlmIChhY3Rpb24gPT0gQ1RMX1JFQUQpCisJCSp2YWx1ZSA9IChidWZbMTBdIDw8IDgpIHwgYnVmWzExXTsKKworCWVyciA9IDA7CisKK2Vycm9yOgorCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGZ3c3BrX211dGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmNvbnRyb2wsCisJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBmd3NwayAqZndzcGsgPSBjb250cm9sLT5wcml2YXRlX2RhdGE7CisKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9ICFmd3Nway0+bXV0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZ3c3BrX211dGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmNvbnRyb2wsCisJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBmd3NwayAqZndzcGsgPSBjb250cm9sLT5wcml2YXRlX2RhdGE7CisJYm9vbCBtdXRlOworCWludCBlcnI7CisKKwltdXRlID0gIXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKG11dGUgPT0gZndzcGstPm11dGUpCisJCXJldHVybiAwOworCisJZXJyID0gZndzcGtfbXV0ZV9jb21tYW5kKGZ3c3BrLCAmbXV0ZSwgQ1RMX1dSSVRFKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlmd3Nway0+bXV0ZSA9IG11dGU7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmd3Nwa192b2x1bWVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RydWN0IGZ3c3BrICpmd3NwayA9IGNvbnRyb2wtPnByaXZhdGVfZGF0YTsKKworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSBmd3Nway0+ZGV2aWNlX2luZm8tPm1peGVyX2NoYW5uZWxzOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gZndzcGstPnZvbHVtZV9taW47CisJaW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBmd3Nway0+dm9sdW1lX21heDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgdTggY2hhbm5lbF9tYXBbNl0gPSB7IDAsIDEsIDQsIDUsIDIsIDMgfTsKKworc3RhdGljIGludCBmd3Nwa192b2x1bWVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmNvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IGZ3c3BrICpmd3NwayA9IGNvbnRyb2wtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBmd3Nway0+ZGV2aWNlX2luZm8tPm1peGVyX2NoYW5uZWxzOyArK2kpCisJCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoYW5uZWxfbWFwW2ldXSA9IGZ3c3BrLT52b2x1bWVbaV07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmd3Nwa192b2x1bWVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmNvbnRyb2wsCisJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBmd3NwayAqZndzcGsgPSBjb250cm9sLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGksIGNoYW5nZWRfY2hhbm5lbHM7CisJYm9vbCBlcXVhbF92YWx1ZXMgPSB0cnVlOworCXMxNiB2b2x1bWU7CisJaW50IGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBmd3Nway0+ZGV2aWNlX2luZm8tPm1peGVyX2NoYW5uZWxzOyArK2kpIHsKKwkJaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldIDwgZndzcGstPnZvbHVtZV9taW4gfHwKKwkJICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldID4gZndzcGstPnZvbHVtZV9tYXgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldICE9CisJCSAgICB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKKwkJCWVxdWFsX3ZhbHVlcyA9IGZhbHNlOworCX0KKworCWNoYW5nZWRfY2hhbm5lbHMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBmd3Nway0+ZGV2aWNlX2luZm8tPm1peGVyX2NoYW5uZWxzOyArK2kpCisJCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVtjaGFubmVsX21hcFtpXV0gIT0KKwkJCQkJCQlmd3Nway0+dm9sdW1lW2ldKQorCQkJY2hhbmdlZF9jaGFubmVscyB8PSAxIDw8IChpICsgMSk7CisKKwlpZiAoZXF1YWxfdmFsdWVzICYmIGNoYW5nZWRfY2hhbm5lbHMgIT0gMCkKKwkJY2hhbmdlZF9jaGFubmVscyA9IDEgPDwgMDsKKworCWZvciAoaSA9IDA7IGkgPD0gZndzcGstPmRldmljZV9pbmZvLT5taXhlcl9jaGFubmVsczsgKytpKSB7CisJCXZvbHVtZSA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoYW5uZWxfbWFwW2kgPyBpIC0gMSA6IDBdXTsKKwkJaWYgKGNoYW5nZWRfY2hhbm5lbHMgJiAoMSA8PCBpKSkgeworCQkJZXJyID0gZndzcGtfdm9sdW1lX2NvbW1hbmQoZndzcGssICZ2b2x1bWUsIGksCisJCQkJCQkgICBDVExfQ1VSUkVOVCwgQ1RMX1dSSVRFKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwkJaWYgKGkgPiAwKQorCQkJZndzcGstPnZvbHVtZVtpIC0gMV0gPSB2b2x1bWU7CisJfQorCisJcmV0dXJuIGNoYW5nZWRfY2hhbm5lbHMgIT0gMDsKK30KKworc3RhdGljIGludCBmd3Nwa19jcmVhdGVfbWl4ZXIoc3RydWN0IGZ3c3BrICpmd3NwaykKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbHNbXSA9IHsKKwkJeworCQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCQkubmFtZSA9ICJQQ00gUGxheWJhY2sgU3dpdGNoIiwKKwkJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJCS5nZXQgPSBmd3Nwa19tdXRlX2dldCwKKwkJCS5wdXQgPSBmd3Nwa19tdXRlX3B1dCwKKwkJfSwKKwkJeworCQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCQkubmFtZSA9ICJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkJCS5pbmZvID0gZndzcGtfdm9sdW1lX2luZm8sCisJCQkuZ2V0ID0gZndzcGtfdm9sdW1lX2dldCwKKwkJCS5wdXQgPSBmd3Nwa192b2x1bWVfcHV0LAorCQl9LAorCX07CisJdW5zaWduZWQgaW50IGksIGZpcnN0X2NoOworCWludCBlcnI7CisKKwllcnIgPSBmd3Nwa192b2x1bWVfY29tbWFuZChmd3NwaywgJmZ3c3BrLT52b2x1bWVfbWluLAorCQkJCSAgIDAsIENUTF9NSU4sIENUTF9SRUFEKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBmd3Nwa192b2x1bWVfY29tbWFuZChmd3NwaywgJmZ3c3BrLT52b2x1bWVfbWF4LAorCQkJCSAgIDAsIENUTF9NQVgsIENUTF9SRUFEKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGZ3c3BrX211dGVfY29tbWFuZChmd3NwaywgJmZ3c3BrLT5tdXRlLCBDVExfUkVBRCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlmaXJzdF9jaCA9IGZ3c3BrLT5kZXZpY2VfaW5mby0+bWl4ZXJfY2hhbm5lbHMgPT0gMSA/IDAgOiAxOworCWZvciAoaSA9IDA7IGkgPCBmd3Nway0+ZGV2aWNlX2luZm8tPm1peGVyX2NoYW5uZWxzOyArK2kpIHsKKwkJZXJyID0gZndzcGtfdm9sdW1lX2NvbW1hbmQoZndzcGssICZmd3Nway0+dm9sdW1lW2ldLAorCQkJCQkgICBmaXJzdF9jaCArIGksIENUTF9DVVJSRU5ULCBDVExfUkVBRCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9scyk7ICsraSkgeworCQllcnIgPSBzbmRfY3RsX2FkZChmd3Nway0+Y2FyZCwKKwkJCQkgIHNuZF9jdGxfbmV3MSgmY29udHJvbHNbaV0sIGZ3c3BrKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBmd3Nwa19yZWFkX2Zpcm13YXJlX3ZlcnNpb24oc3RydWN0IGZ3X3VuaXQgKnVuaXQpCit7CisJX19iZTMyIGRhdGE7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9md190cmFuc2FjdGlvbih1bml0LCBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVCwKKwkJCQkgT1hGT1JEX0ZJUk1XQVJFX0lEX0FERFJFU1MsICZkYXRhLCA0KTsKKwlyZXR1cm4gZXJyID49IDAgPyBiZTMyX3RvX2NwdShkYXRhKSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZ3c3BrX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGZ3c3BrICpmd3NwayA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXYgPSBmd19wYXJlbnRfZGV2aWNlKGZ3c3BrLT51bml0KTsKKworCWFtZHRwX291dF9zdHJlYW1fZGVzdHJveSgmZndzcGstPnN0cmVhbSk7CisJY21wX2Nvbm5lY3Rpb25fZGVzdHJveSgmZndzcGstPmNvbm5lY3Rpb24pOworCWZ3X3VuaXRfcHV0KGZ3c3BrLT51bml0KTsKKwlmd19kZXZpY2VfcHV0KGRldik7CisJbXV0ZXhfZGVzdHJveSgmZndzcGstPm11dGV4KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfaW5mbyAqX19kZXZpbml0IGZ3c3BrX2RldGVjdChzdHJ1Y3QgZndfZGV2aWNlICpkZXYpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfaW5mbyBncmlmZmluX2ZpcmV3YXZlID0geworCQkuZHJpdmVyX25hbWUgPSAiRmlyZVdhdmUiLAorCQkuc2hvcnRfbmFtZSAgPSAiRmlyZVdhdmUiLAorCQkubG9uZ19uYW1lICAgPSAiR3JpZmZpbiBGaXJlV2F2ZSBTdXJyb3VuZCIsCisJCS5wY21fY29uc3RyYWludHMgPSBmaXJld2F2ZV9jb25zdHJhaW50cywKKwkJLm1peGVyX2NoYW5uZWxzID0gNiwKKwkJLm11dGVfZmJfaWQgICA9IDB4MDEsCisJCS52b2x1bWVfZmJfaWQgPSAweDAyLAorCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfaW5mbyBsYWNpZV9zcGVha2VycyA9IHsKKwkJLmRyaXZlcl9uYW1lID0gIkZXU3BlYWtlcnMiLAorCQkuc2hvcnRfbmFtZSAgPSAiRmlyZVdpcmUgU3BlYWtlcnMiLAorCQkubG9uZ19uYW1lICAgPSAiTGFDaWUgRmlyZVdpcmUgU3BlYWtlcnMiLAorCQkucGNtX2NvbnN0cmFpbnRzID0gbGFjaWVfc3BlYWtlcnNfY29uc3RyYWludHMsCisJCS5taXhlcl9jaGFubmVscyA9IDEsCisJCS5tdXRlX2ZiX2lkICAgPSAweDAxLAorCQkudm9sdW1lX2ZiX2lkID0gMHgwMSwKKwl9OworCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgaTsKKwlpbnQga2V5LCB2YWx1ZTsKKworCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZpLCBkZXYtPmNvbmZpZ19yb20pOworCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmaSwgJmtleSwgJnZhbHVlKSkKKwkJaWYgKGtleSA9PSBDU1JfVkVORE9SKQorCQkJc3dpdGNoICh2YWx1ZSkgeworCQkJY2FzZSBWRU5ET1JfR1JJRkZJTjoKKwkJCQlyZXR1cm4gJmdyaWZmaW5fZmlyZXdhdmU7CisJCQljYXNlIFZFTkRPUl9MQUNJRToKKwkJCQlyZXR1cm4gJmxhY2llX3NwZWFrZXJzOworCQkJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGZ3c3BrX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnVuaXRfZGV2KQoreworCXN0cnVjdCBmd191bml0ICp1bml0ID0gZndfdW5pdCh1bml0X2Rldik7CisJc3RydWN0IGZ3X2RldmljZSAqZndfZGV2ID0gZndfcGFyZW50X2RldmljZSh1bml0KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IGZ3c3BrICpmd3NwazsKKwl1MzIgZmlybXdhcmU7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZSgtMSwgTlVMTCwgVEhJU19NT0RVTEUsIHNpemVvZigqZndzcGspLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCB1bml0X2Rldik7CisKKwlmd3NwayA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlmd3Nway0+Y2FyZCA9IGNhcmQ7CisJbXV0ZXhfaW5pdCgmZndzcGstPm11dGV4KTsKKwlmd19kZXZpY2VfZ2V0KGZ3X2Rldik7CisJZndzcGstPnVuaXQgPSBmd191bml0X2dldCh1bml0KTsKKwlmd3Nway0+ZGV2aWNlX2luZm8gPSBmd3Nwa19kZXRlY3QoZndfZGV2KTsKKwlpZiAoIWZ3c3BrLT5kZXZpY2VfaW5mbykgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl91bml0OworCX0KKworCWVyciA9IGNtcF9jb25uZWN0aW9uX2luaXQoJmZ3c3BrLT5jb25uZWN0aW9uLCB1bml0LCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfdW5pdDsKKworCWVyciA9IGFtZHRwX291dF9zdHJlYW1faW5pdCgmZndzcGstPnN0cmVhbSwgdW5pdCwgQ0lQX05PTkJMT0NLSU5HKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfY29ubmVjdGlvbjsKKworCWNhcmQtPnByaXZhdGVfZnJlZSA9IGZ3c3BrX2NhcmRfZnJlZTsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsIGZ3c3BrLT5kZXZpY2VfaW5mby0+ZHJpdmVyX25hbWUpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGZ3c3BrLT5kZXZpY2VfaW5mby0+c2hvcnRfbmFtZSk7CisJZmlybXdhcmUgPSBmd3Nwa19yZWFkX2Zpcm13YXJlX3ZlcnNpb24odW5pdCk7CisJc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJCSAiJXMgKE9YRlcleCAlMDR4KSwgR1VJRCAlMDh4JTA4eCBhdCAlcywgUyVkIiwKKwkJIGZ3c3BrLT5kZXZpY2VfaW5mby0+bG9uZ19uYW1lLAorCQkgZmlybXdhcmUgPj4gMjAsIGZpcm13YXJlICYgMHhmZmZmLAorCQkgZndfZGV2LT5jb25maWdfcm9tWzNdLCBmd19kZXYtPmNvbmZpZ19yb21bNF0sCisJCSBkZXZfbmFtZSgmdW5pdC0+ZGV2aWNlKSwgMTAwIDw8IGZ3X2Rldi0+bWF4X3NwZWVkKTsKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiT1hGVzk3MCIpOworCisJZXJyID0gZndzcGtfY3JlYXRlX3BjbShmd3Nwayk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBmd3Nwa19jcmVhdGVfbWl4ZXIoZndzcGspOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlkZXZfc2V0X2RydmRhdGEodW5pdF9kZXYsIGZ3c3BrKTsKKworCXJldHVybiAwOworCitlcnJfY29ubmVjdGlvbjoKKwljbXBfY29ubmVjdGlvbl9kZXN0cm95KCZmd3Nway0+Y29ubmVjdGlvbik7CitlcnJfdW5pdDoKKwlmd191bml0X3B1dChmd3Nway0+dW5pdCk7CisJZndfZGV2aWNlX3B1dChmd19kZXYpOworCW11dGV4X2Rlc3Ryb3koJmZ3c3BrLT5tdXRleCk7CitlcnJvcjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGZ3c3BrX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZ3c3BrICpmd3NwayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc25kX2NhcmRfZGlzY29ubmVjdChmd3Nway0+Y2FyZCk7CisKKwltdXRleF9sb2NrKCZmd3Nway0+bXV0ZXgpOworCWFtZHRwX291dF9zdHJlYW1fcGNtX2Fib3J0KCZmd3Nway0+c3RyZWFtKTsKKwlmd3Nwa19zdG9wX3N0cmVhbShmd3Nwayk7CisJbXV0ZXhfdW5sb2NrKCZmd3Nway0+bXV0ZXgpOworCisJc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChmd3Nway0+Y2FyZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZndzcGtfYnVzX3Jlc2V0KHN0cnVjdCBmd191bml0ICp1bml0KQoreworCXN0cnVjdCBmd3NwayAqZndzcGsgPSBkZXZfZ2V0X2RydmRhdGEoJnVuaXQtPmRldmljZSk7CisKKwlmY3BfYnVzX3Jlc2V0KGZ3c3BrLT51bml0KTsKKworCWlmIChjbXBfY29ubmVjdGlvbl91cGRhdGUoJmZ3c3BrLT5jb25uZWN0aW9uKSA8IDApIHsKKwkJbXV0ZXhfbG9jaygmZndzcGstPm11dGV4KTsKKwkJYW1kdHBfb3V0X3N0cmVhbV9wY21fYWJvcnQoJmZ3c3BrLT5zdHJlYW0pOworCQlmd3Nwa19zdG9wX3N0cmVhbShmd3Nwayk7CisJCW11dGV4X3VubG9jaygmZndzcGstPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKworCWFtZHRwX291dF9zdHJlYW1fdXBkYXRlKCZmd3Nway0+c3RyZWFtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgZndzcGtfaWRfdGFibGVbXSA9IHsKKwl7CisJCS5tYXRjaF9mbGFncyAgPSBJRUVFMTM5NF9NQVRDSF9WRU5ET1JfSUQgfAorCQkJCUlFRUUxMzk0X01BVENIX01PREVMX0lEIHwKKwkJCQlJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfAorCQkJCUlFRUUxMzk0X01BVENIX1ZFUlNJT04sCisJCS52ZW5kb3JfaWQgICAgPSBWRU5ET1JfR1JJRkZJTiwKKwkJLm1vZGVsX2lkICAgICA9IDB4MDBmOTcwLAorCQkuc3BlY2lmaWVyX2lkID0gU1BFQ0lGSUVSXzEzOTRUQSwKKwkJLnZlcnNpb24gICAgICA9IFZFUlNJT05fQVZDLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MgID0gSUVFRTEzOTRfTUFUQ0hfVkVORE9SX0lEIHwKKwkJCQlJRUVFMTM5NF9NQVRDSF9NT0RFTF9JRCB8CisJCQkJSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lEIHwKKwkJCQlJRUVFMTM5NF9NQVRDSF9WRVJTSU9OLAorCQkudmVuZG9yX2lkICAgID0gVkVORE9SX0xBQ0lFLAorCQkubW9kZWxfaWQgICAgID0gMHgwMGY5NzAsCisJCS5zcGVjaWZpZXJfaWQgPSBTUEVDSUZJRVJfMTM5NFRBLAorCQkudmVyc2lvbiAgICAgID0gVkVSU0lPTl9BVkMsCisJfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGllZWUxMzk0LCBmd3Nwa19pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZndfZHJpdmVyIGZ3c3BrX2RyaXZlciA9IHsKKwkuZHJpdmVyICAgPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IEtCVUlMRF9NT0ROQU1FLAorCQkuYnVzCT0gJmZ3X2J1c190eXBlLAorCQkucHJvYmUJPSBmd3Nwa19wcm9iZSwKKwkJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGZ3c3BrX3JlbW92ZSksCisJfSwKKwkudXBkYXRlICAgPSBmd3Nwa19idXNfcmVzZXQsCisJLmlkX3RhYmxlID0gZndzcGtfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbHNhX2Z3c3BrX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZmd3Nwa19kcml2ZXIuZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFsc2FfZndzcGtfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZmd3Nwa19kcml2ZXIuZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWxzYV9md3Nwa19pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfZndzcGtfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKaW5kZXggZmNiMTRhMDkuLjdjNzc5M2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYworKysgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKQEAgLTUyNiwzMSArNTI2LDIxIEBACiB9CiAKIAotLyogVGhlc2UgZGV2aWNlIG5hbWVzIGZvbGxvdyB0aGUgb2ZmaWNpYWwgTGludXggZGV2aWNlIGxpc3QsCi0gKiBEb2N1bWVudGF0aW9uL2RldmljZXMudHh0LiAgTGV0IHVzIGtub3cgaWYgdGhlcmUgYXJlIG90aGVyCi0gKiBjb21tb24gbmFtZXMgd2Ugc2hvdWxkIHN1cHBvcnQgZm9yIGNvbXBhdGliaWxpdHkuCi0gKiBPbmx5IHRob3NlIGRldmljZXMgbm90IGNyZWF0ZWQgYnkgdGhlIGdlbmVyaWMgY29kZSBpbiBzb3VuZF9jb3JlLmMgYXJlCi0gKiByZWdpc3RlcmVkIGhlcmUuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG1pbm9yOwotCWNoYXIgKm5hbWU7Ci0JdW1vZGVfdCBtb2RlOwotCWludCAqbnVtOwotfSBkZXZfbGlzdFtdID0geyAvKiBsaXN0IG9mIG1pbm9yIGRldmljZXMgKi8KLS8qIHNlZW1zIHRvIGJlIHNvbWUgY29uZnVzaW9uIGhlcmUgLS0gdGhpcyBkZXZpY2UgaXMgbm90IGluIHRoZSBkZXZpY2UgbGlzdCAqLwotCXtTTkRfREVWX0RTUDE2LCAgICAgImRzcFciLAkgU19JV1VHTyB8IFNfSVJVU1IgfCBTX0lSR1JQLAotCSAmbnVtX2F1ZGlvZGV2c30sCi0Je1NORF9ERVZfQVVESU8sICAgICAiYXVkaW8iLAkgU19JV1VHTyB8IFNfSVJVU1IgfCBTX0lSR1JQLAotCSAmbnVtX2F1ZGlvZGV2c30sCi19OwotCiBzdGF0aWMgaW50IGRtYWJ1ZjsKIHN0YXRpYyBpbnQgZG1hYnVnOwogCiBtb2R1bGVfcGFyYW0oZG1hYnVmLCBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKGRtYWJ1ZywgaW50LCAwNDQ0KTsKIAorLyogYWRkaXRpb25hbCBtaW5vcnMgZm9yIGNvbXBhdGliaWxpdHkgKi8KK3N0cnVjdCBvc3NfbWlub3JfZGV2IHsKKwl1bnNpZ25lZCBzaG9ydCBtaW5vcjsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlZDsKK30gZGV2X2xpc3RbXSA9IHsKKwl7IFNORF9ERVZfRFNQMTYgfSwKKwl7IFNORF9ERVZfQVVESU8gfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IG9zc19pbml0KHZvaWQpCiB7CiAJaW50ICAgICAgICAgICAgIGVycjsKQEAgLTU3MSwxOCArNTYxLDEyIEBACiAJc291bmRfZG1hcF9mbGFnID0gKGRtYWJ1ZiA+IDAgPyAxIDogMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZfbGlzdCk7IGkrKykgewotCQlkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBOVUxMLAotCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsIGRldl9saXN0W2ldLm1pbm9yKSwgTlVMTCwKLQkJCSAgICAgICIlcyIsIGRldl9saXN0W2ldLm5hbWUpOwotCi0JCWlmICghZGV2X2xpc3RbaV0ubnVtKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChqID0gMTsgaiA8ICpkZXZfbGlzdFtpXS5udW07IGorKykKLQkJCWRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsCi0JCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsCi0JCQkJCSAgICBkZXZfbGlzdFtpXS5taW5vciArIChqKjB4MTApKSwKLQkJCQkgICAgICBOVUxMLCAiJXMlZCIsIGRldl9saXN0W2ldLm5hbWUsIGopOworCQlqID0gMDsKKwkJZG8geworCQkJdW5zaWduZWQgc2hvcnQgbWlub3IgPSBkZXZfbGlzdFtpXS5taW5vciArIGogKiAweDEwOworCQkJaWYgKCFyZWdpc3Rlcl9zb3VuZF9zcGVjaWFsKCZvc3Nfc291bmRfZm9wcywgbWlub3IpKQorCQkJCWRldl9saXN0W2ldLmVuYWJsZWQgPSAoMSA8PCBqKTsKKwkJfSB3aGlsZSAoKytqIDwgbnVtX2F1ZGlvZGV2cyk7CiAJfQogCiAJaWYgKHNvdW5kX25ibG9ja3MgPj0gTUFYX01FTV9CTE9DS1MgLSAxKQpAQCAtNTk2LDExICs1ODAsMTEgQEAKIAlpbnQgaSwgajsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldl9saXN0KTsgaSsrKSB7Ci0JCWRldmljZV9kZXN0cm95KHNvdW5kX2NsYXNzLCBNS0RFVihTT1VORF9NQUpPUiwgZGV2X2xpc3RbaV0ubWlub3IpKTsKLQkJaWYgKCFkZXZfbGlzdFtpXS5udW0pCi0JCQljb250aW51ZTsKLQkJZm9yIChqID0gMTsgaiA8ICpkZXZfbGlzdFtpXS5udW07IGorKykKLQkJCWRldmljZV9kZXN0cm95KHNvdW5kX2NsYXNzLCBNS0RFVihTT1VORF9NQUpPUiwgZGV2X2xpc3RbaV0ubWlub3IgKyAoaioweDEwKSkpOworCQlqID0gMDsKKwkJZG8geworCQkJaWYgKGRldl9saXN0W2ldLmVuYWJsZWQgJiAoMSA8PCBqKSkKKwkJCQl1bnJlZ2lzdGVyX3NvdW5kX3NwZWNpYWwoZGV2X2xpc3RbaV0ubWlub3IpOworCQl9IHdoaWxlICgrK2ogPCBudW1fYXVkaW9kZXZzKTsKIAl9CiAJCiAJdW5yZWdpc3Rlcl9zb3VuZF9zcGVjaWFsKDEpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCA5ODIzZDU5Li4zODljZDc5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtMTUyLDEwICsxNTIsMTYgQEAKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9QQ00KIAlzZWxlY3QgU05EX1JBV01JREkKKwlzZWxlY3QgU05EX0FDOTdfQ09ERUMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQXp0ZWNoIEFaRjMzMjggKFBDSTE2OCkKIAkgIHNvdW5kY2FyZHMuCiAKKwkgIFN1cHBvcnRlZCBmZWF0dXJlczogQUM5Ny0iY29uZm9ybWFudCIgbWl4ZXIsIE1QVTQwMS9PUEwzLCBhbmFsb2cgSS9PCisJICAoMTZiaXQvOGJpdCwgbWFueSBzYW1wbGUgcmF0ZXMgWzw9IDY2LjJrSHpdLCBOTyBoYXJkd2FyZSBtaXhpbmcpLAorCSAgRGlnaXRhbCBFbmhhbmNlZCBHYW1lIFBvcnQsIDEuMDI0TUh6IG11bHRpbWVkaWEgc2VxdWVuY2VyIHRpbWVyLAorCSAgZXh0LiBjb2RlYyAoSTJTIHBvcnQpLCBvbmJvYXJkIGFtcCAoNFcvNE9obXMvY2gpLCBzdXNwZW5kL3Jlc3VtZS4KKwogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWF6dDMzMjguCiAKQEAgLTU3MiwxMyArNTc4LDEzIEBACiAJZGVwZW5kcyBvbiBTTkRfSERTUD15CiAKIGNvbmZpZyBTTkRfSERTUE0KLQl0cmlzdGF0ZSAiUk1FIEhhbW1lcmZhbGwgRFNQIE1BREkiCisJdHJpc3RhdGUgIlJNRSBIYW1tZXJmYWxsIERTUCBNQURJL1JheURBVC9BSU8iCiAJc2VsZWN0IFNORF9IV0RFUAogCXNlbGVjdCBTTkRfUkFXTUlESQogCXNlbGVjdCBTTkRfUENNCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFJNRSBIYW1tZXJmYWxsIERTUCBNQURJCi0JICBzb3VuZGNhcmRzLgorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFJNRSBIYW1tZXJmYWxsIERTUCBNQURJLAorCSAgUmF5REFUIGFuZCBBSU8gc291bmRjYXJkcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWhkc3BtLgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IGNiNjJkMTcuLjdmNGQ2MTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTcxLDYgKzcxLDEyIEBACiB7IDB4NDE0YjRkMDAsIDB4ZmZmZmZmMDAsICJBc2FoaSBLYXNlaSIsCU5VTEwsCU5VTEwgfSwKIHsgMHg0MTRjNDMwMCwgMHhmZmZmZmYwMCwgIlJlYWx0ZWsiLAkJTlVMTCwJTlVMTCB9LAogeyAweDQxNGM0NzAwLCAweGZmZmZmZjAwLCAiUmVhbHRlayIsCQlOVUxMLAlOVUxMIH0sCisvKgorICogVGhpcyBpcyBhbiBfaW5vZmZpY2lhbF8gQXp0ZWNoIExhYnMgZW50cnkKKyAqICh2YWx1ZSBtaWdodCBkaWZmZXIgZnJvbSB1bmtub3duIG9mZmljaWFsIEF6dGVjaCBJRCksCisgKiBjdXJyZW50bHkgdXNlZCBieSB0aGUgQUM5NyBlbXVsYXRpb24gb2YgdGhlIGFsbW9zdC1BQzk3IFBDSTE2OCBjYXJkLgorICovCit7IDB4NDE1YTU0MDAsIDB4ZmZmZmZmMDAsICJBenRlY2ggTGFicyAoZW11bGF0ZWQpIiwJTlVMTCwJTlVMTCB9LAogeyAweDQzNGQ0OTAwLCAweGZmZmZmZjAwLCAiQy1NZWRpYSBFbGVjdHJvbmljcyIsIE5VTEwsCU5VTEwgfSwKIHsgMHg0MzUyNTkwMCwgMHhmZmZmZmYwMCwgIkNpcnJ1cyBMb2dpYyIsCU5VTEwsCU5VTEwgfSwKIHsgMHg0MzU4NTQwMCwgMHhmZmZmZmYwMCwgIkNvbmV4YW50IiwgICAgICAgICAgIE5VTEwsCU5VTEwgfSwKQEAgLTEyNyw2ICsxMzMsNyBAQAogeyAweDQxNGM0NzgxLCAweGZmZmZmZmZmLCAiQUxDNjU4RCIsCQlOVUxMLAlOVUxMIH0sIC8qIGFscmVhZHkgcGF0Y2hlZCAqLwogeyAweDQxNGM0NzgwLCAweGZmZmZmZmYwLCAiQUxDNjU4IiwJCXBhdGNoX2FsYzY1NSwJTlVMTCB9LAogeyAweDQxNGM0NzkwLCAweGZmZmZmZmYwLCAiQUxDODUwIiwJCXBhdGNoX2FsYzg1MCwJTlVMTCB9LAoreyAweDQxNWE1NDAxLCAweGZmZmZmZmZmLCAiQVpGMzMyOCIsCQlwYXRjaF9henRlY2hfYXpmMzMyOCwJTlVMTCB9LAogeyAweDQzNGQ0OTQxLCAweGZmZmZmZmZmLCAiQ01JOTczOCIsCQlwYXRjaF9jbTk3MzgsCU5VTEwgfSwKIHsgMHg0MzRkNDk2MSwgMHhmZmZmZmZmZiwgIkNNSTk3MzkiLAkJcGF0Y2hfY205NzM5LAlOVUxMIH0sCiB7IDB4NDM0ZDQ5NjksIDB4ZmZmZmZmZmYsICJDTUk5NzgwIiwJCXBhdGNoX2NtOTc4MCwJTlVMTCB9LApAQCAtNTkwLDkgKzU5Nyw5IEBACiAJc25kX2FjOTdfcGFnZV9yZXN0b3JlKGFjOTcsIHBhZ2Vfc2F2ZSk7CiAjaWZkZWYgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUKIAkvKiBjaGVjayBhbmFsb2cgbWl4ZXIgcG93ZXItZG93biAqLwotCWlmICgodmFsX21hc2sgJiAweDgwMDApICYmCisJaWYgKCh2YWxfbWFzayAmIEFDOTdfUERfRUFQRCkgJiYKIAkgICAgKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgKDE8PDMwKSkpIHsKLQkJaWYgKHZhbCAmIDB4ODAwMCkKKwkJaWYgKHZhbCAmIEFDOTdfUERfRUFQRCkKIAkJCWFjOTctPnBvd2VyX3VwICY9IH4oMSA8PCAocmVnPj4xKSk7CiAJCWVsc2UKIAkJCWFjOTctPnBvd2VyX3VwIHw9IDEgPDwgKHJlZz4+MSk7CkBAIC0xMDM1LDIwICsxMDQyLDIwIEBACiAKIHN0YXRpYyBpbnQgc25kX2FjOTdfdHJ5X3ZvbHVtZV9taXgoc3RydWN0IHNuZF9hYzk3ICogYWM5NywgaW50IHJlZykKIHsKLQl1bnNpZ25lZCBzaG9ydCB2YWwsIG1hc2sgPSAweDgwMDA7CisJdW5zaWduZWQgc2hvcnQgdmFsLCBtYXNrID0gQUM5N19NVVRFX01BU0tfTU9OTzsKIAogCWlmICghIHNuZF9hYzk3X3ZhbGlkX3JlZyhhYzk3LCByZWcpKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBBQzk3X01BU1RFUl9UT05FOgotCQlyZXR1cm4gYWM5Ny0+Y2FwcyAmIDB4MDQgPyAxIDogMDsKKwkJcmV0dXJuIGFjOTctPmNhcHMgJiBBQzk3X0JDX0JBU1NfVFJFQkxFID8gMSA6IDA7CiAJY2FzZSBBQzk3X0hFQURQSE9ORToKLQkJcmV0dXJuIGFjOTctPmNhcHMgJiAweDEwID8gMSA6IDA7CisJCXJldHVybiBhYzk3LT5jYXBzICYgQUM5N19CQ19IRUFEUEhPTkUgPyAxIDogMDsKIAljYXNlIEFDOTdfUkVDX0dBSU5fTUlDOgotCQlyZXR1cm4gYWM5Ny0+Y2FwcyAmIDB4MDEgPyAxIDogMDsKKwkJcmV0dXJuIGFjOTctPmNhcHMgJiBBQzk3X0JDX0RFRElDQVRFRF9NSUMgPyAxIDogMDsKIAljYXNlIEFDOTdfM0RfQ09OVFJPTDoKLQkJaWYgKGFjOTctPmNhcHMgJiAweDdjMDApIHsKKwkJaWYgKGFjOTctPmNhcHMgJiBBQzk3X0JDXzNEX1RFQ0hfSURfTUFTSykgewogCQkJdmFsID0gc25kX2FjOTdfcmVhZChhYzk3LCByZWcpOwogCQkJLyogaWYgbm9uemVybyAtIGZpeGVkIGFuZCB3ZSBjYW4ndCBzZXQgaXQgKi8KIAkJCXJldHVybiB2YWwgPT0gMDsKQEAgLTExMDQsNyArMTExMSwxMCBAQAogCSpsb19tYXggPSAqaGlfbWF4ID0gMDsKIAlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUoY2JpdCk7IGkrKykgewogCQl1bnNpZ25lZCBzaG9ydCB2YWw7Ci0JCXNuZF9hYzk3X3dyaXRlKGFjOTcsIHJlZywgMHg4MDgwIHwgY2JpdFtpXSB8IChjYml0W2ldIDw8IDgpKTsKKwkJc25kX2FjOTdfd3JpdGUoCisJCQlhYzk3LCByZWcsCisJCQlBQzk3X01VVEVfTUFTS19TVEVSRU8gfCBjYml0W2ldIHwgKGNiaXRbaV0gPDwgOCkKKwkJKTsKIAkJLyogRG8gdGhlIHJlYWQgdHdpY2UgZHVlIHRvIGJ1ZmZlcnMgb24gc29tZSBhYzk3IGNvZGVjcy4KIAkJICogZS5nLiBUaGUgU1RBQzk3MDQgcmV0dXJucyBleGFjdGx5IHdoYXQgeW91IHdyb3RlIHRvIHRoZSByZWdpc3RlcgogCQkgKiBpZiB5b3UgcmVhZCBpdCBpbW1lZGlhdGVseS4gVGhpcyBjYXVzZXMgdGhlIGRldGVjdCByb3V0aW5lIHRvIGZhaWwuCkBAIC0xMTM5LDE0ICsxMTQ5LDE0IEBACiAJdW5zaWduZWQgc2hvcnQgdmFsLCB2YWwxOwogCiAJKm1heCA9IDYzOwotCXZhbCA9IDB4ODA4MCB8ICgweDIwIDw8IHNoaWZ0KTsKKwl2YWwgPSBBQzk3X01VVEVfTUFTS19TVEVSRU8gfCAoMHgyMCA8PCBzaGlmdCk7CiAJc25kX2FjOTdfd3JpdGUoYWM5NywgcmVnLCB2YWwpOwogCXZhbDEgPSBzbmRfYWM5N19yZWFkKGFjOTcsIHJlZyk7CiAJaWYgKHZhbCAhPSB2YWwxKSB7CiAJCSptYXggPSAzMTsKIAl9CiAJLyogcmVzZXQgdm9sdW1lIHRvIHplcm8gKi8KLQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCByZWcsIDB4ODA4MCk7CisJc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgcmVnLCBBQzk3X01VVEVfTUFTS19TVEVSRU8pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwcmludGFibGUodW5zaWduZWQgaW50IHgpCkBAIC0xMTgzLDE2ICsxMTkzLDE2IEBACiAJaWYgKCEgc25kX2FjOTdfdmFsaWRfcmVnKGFjOTcsIHJlZykpCiAJCXJldHVybiAwOwogCi0JbXV0ZV9tYXNrID0gMHg4MDAwOworCW11dGVfbWFzayA9IEFDOTdfTVVURV9NQVNLX01PTk87CiAJdmFsID0gc25kX2FjOTdfcmVhZChhYzk3LCByZWcpOwogCWlmIChjaGVja19zdGVyZW8gfHwgKGFjOTctPmZsYWdzICYgQUM5N19TVEVSRU9fTVVURVMpKSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgYm90aCBtdXRlIGJpdHMgd29yayAqLwotCQl2YWwxID0gdmFsIHwgMHg4MDgwOworCQl2YWwxID0gdmFsIHwgQUM5N19NVVRFX01BU0tfU1RFUkVPOwogCQlzbmRfYWM5N193cml0ZShhYzk3LCByZWcsIHZhbDEpOwogCQlpZiAodmFsMSA9PSBzbmRfYWM5N19yZWFkKGFjOTcsIHJlZykpCi0JCQltdXRlX21hc2sgPSAweDgwODA7CisJCQltdXRlX21hc2sgPSBBQzk3X01VVEVfTUFTS19TVEVSRU87CiAJfQotCWlmIChtdXRlX21hc2sgPT0gMHg4MDgwKSB7CisJaWYgKG11dGVfbWFzayA9PSBBQzk3X01VVEVfTUFTS19TVEVSRU8pIHsKIAkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdG1wID0gQUM5N19ET1VCTEUobmFtZSwgcmVnLCAxNSwgNywgMSwgMSk7CiAJCWlmIChjaGVja19hbWl4KQogCQkJdG1wLnByaXZhdGVfdmFsdWUgfD0gKDEgPDwgMzApOwpAQCAtMTI2OCw5ICsxMjc4LDExIEBACiAJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwga2N0bCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0Jc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgcmVnLAotCQkJICAgICAoc25kX2FjOTdfcmVhZChhYzk3LCByZWcpICYgMHg4MDgwKSB8Ci0JCQkgICAgIGxvX21heCB8IChoaV9tYXggPDwgOCkpOworCXNuZF9hYzk3X3dyaXRlX2NhY2hlKAorCQlhYzk3LCByZWcsCisJCShzbmRfYWM5N19yZWFkKGFjOTcsIHJlZykgJiBBQzk3X01VVEVfTUFTS19TVEVSRU8pCisJCXwgbG9fbWF4IHwgKGhpX21heCA8PCA4KQorCSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMzIsNyArMTM0NCw3IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWFjOTctPnJlZ3NbQUM5N19DRU5URVJfTEZFX01BU1RFUl0gPSAweDgwODA7CisJYWM5Ny0+cmVnc1tBQzk3X0NFTlRFUl9MRkVfTUFTVEVSXSA9IEFDOTdfTVVURV9NQVNLX1NURVJFTzsKIAogCS8qIGJ1aWxkIGNlbnRlciBjb250cm9scyAqLwogCWlmICgoc25kX2FjOTdfdHJ5X3ZvbHVtZV9taXgoYWM5NywgQUM5N19DRU5URVJfTEZFX01BU1RFUikpIApAQCAtMTQxMCw4ICsxNDIyLDEyIEBACiAJCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIGtjdGwgPSBzbmRfYWM5N19jbmV3KCZzbmRfYWM5N19jb250cm9sc19wY19iZWVwW2lkeF0sIGFjOTcpKSkgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCXNldF90bHZfZGJfc2NhbGUoa2N0bCwgZGJfc2NhbGVfNGJpdCk7Ci0JCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfUENfQkVFUCwKLQkJCQkgICAgIHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19QQ19CRUVQKSB8IDB4ODAxZSk7CisJCXNuZF9hYzk3X3dyaXRlX2NhY2hlKAorCQkJYWM5NywKKwkJCUFDOTdfUENfQkVFUCwKKwkJCShzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfUENfQkVFUCkKKwkJCQl8IEFDOTdfTVVURV9NQVNLX01PTk8gfCAweDAwMWUpCisJCSk7CiAJfQogCQogCS8qIGJ1aWxkIFBob25lIGNvbnRyb2xzICovCkBAIC0xNTQ1LDcgKzE1NjEsNyBAQAogCX0KIAogCS8qIGJ1aWxkIFNpbXVsYXRlZCBTdGVyZW8gRW5oYW5jZW1lbnQgY29udHJvbCAqLwotCWlmIChhYzk3LT5jYXBzICYgMHgwMDA4KSB7CisJaWYgKGFjOTctPmNhcHMgJiBBQzk3X0JDX1NJTV9TVEVSRU8pIHsKIAkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfYWM5N19jbmV3KCZzbmRfYWM5N19jb250cm9sc19nZW5lcmFsW0FDOTdfR0VORVJBTF9TVEVSRU9fRU5IQU5DRU1FTlRdLCBhYzk3KSkpIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTU1Nyw3ICsxNTczLDcgQEAKIAl9CiAKIAkvKiBidWlsZCBMb3VkbmVzcyBjb250cm9sICovCi0JaWYgKGFjOTctPmNhcHMgJiAweDAwMjApIHsKKwlpZiAoYWM5Ny0+Y2FwcyAmIEFDOTdfQkNfTE9VRE5FU1MpIHsKIAkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfYWM5N19jbmV3KCZzbmRfYWM5N19jb250cm9sc19nZW5lcmFsW0FDOTdfR0VORVJBTF9MT1VETkVTU10sIGFjOTcpKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yNTQyLDggKzI1NTgsOCBAQAogCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiAJCX0gd2hpbGUgKHRpbWVfYWZ0ZXJfZXEoZW5kX3RpbWUsIGppZmZpZXMpKTsKIAkJLyogRklYTUU6IGV4dHJhIGRlbGF5ICovCi0JCWFjOTctPmJ1cy0+b3BzLT53cml0ZShhYzk3LCBBQzk3X01BU1RFUiwgMHg4MDAwKTsKLQkJaWYgKHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19NQVNURVIpICE9IDB4ODAwMCkKKwkJYWM5Ny0+YnVzLT5vcHMtPndyaXRlKGFjOTcsIEFDOTdfTUFTVEVSLCBBQzk3X01VVEVfTUFTS19NT05PKTsKKwkJaWYgKHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19NQVNURVIpICE9IEFDOTdfTVVURV9NQVNLX01PTk8pCiAJCQltc2xlZXAoMjUwKTsKIAl9IGVsc2UgewogCQllbmRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMCk7CkBAIC0yNzQ3LDEyICsyNzYzLDEyIEBACiAJCWludCByc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgMHgwZjsKIAkJdW5zaWduZWQgc2hvcnQgbWFzazsKIAkJaWYgKHNoaWZ0ICE9IHJzaGlmdCkKLQkJCW1hc2sgPSAweDgwODA7CisJCQltYXNrID0gQUM5N19NVVRFX01BU0tfU1RFUkVPOwogCQllbHNlCi0JCQltYXNrID0gMHg4MDAwOwotCQlzbmRfYWM5N191cGRhdGVfYml0cyhhYzk3LCBBQzk3X1BPV0VSRE9XTiwgMHg4MDAwLAorCQkJbWFzayA9IEFDOTdfTVVURV9NQVNLX01PTk87CisJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfUE9XRVJET1dOLCBBQzk3X1BEX0VBUEQsCiAJCQkJICAgICAoYWM5Ny0+cmVnc1tBQzk3X01BU1RFUl0gJiBtYXNrKSA9PSBtYXNrID8KLQkJCQkgICAgIDB4ODAwMCA6IDApOworCQkJCSAgICAgQUM5N19QRF9FQVBEIDogMCk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0yNzY1LDcgKzI3ODEsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJbXN3LT5wdXQgPSBtYXN0ZXJfbXV0ZV9zd19wdXQ7CiAJc25kX2FjOTdfcmVtb3ZlX2N0bChhYzk3LCAiRXh0ZXJuYWwgQW1wbGlmaWVyIiwgTlVMTCk7Ci0Jc25kX2FjOTdfdXBkYXRlX2JpdHMoYWM5NywgQUM5N19QT1dFUkRPV04sIDB4ODAwMCwgMHg4MDAwKTsgLyogbXV0ZSBMRUQgb24gKi8KKwlzbmRfYWM5N191cGRhdGVfYml0cygKKwkJYWM5NywgQUM5N19QT1dFUkRPV04sCisJCUFDOTdfUERfRUFQRCwgQUM5N19QRF9FQVBEIC8qIG11dGUgTEVEIG9uICovCisJKTsKIAlhYzk3LT5zY2FwcyB8PSBBQzk3X1NDQVBfRUFQRF9MRUQ7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzgwLDEyICsyNzk5LDEyIEBACiAJCWludCByc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgMHgwZjsKIAkJdW5zaWduZWQgc2hvcnQgbWFzazsKIAkJaWYgKHNoaWZ0ICE9IHJzaGlmdCkKLQkJCW1hc2sgPSAweDgwODA7CisJCQltYXNrID0gQUM5N19NVVRFX01BU0tfU1RFUkVPOwogCQllbHNlCi0JCQltYXNrID0gMHg4MDAwOwotCQlzbmRfYWM5N191cGRhdGVfYml0cyhhYzk3LCBBQzk3X1BPV0VSRE9XTiwgMHg4MDAwLAorCQkJbWFzayA9IEFDOTdfTVVURV9NQVNLX01PTk87CisJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfUE9XRVJET1dOLCBBQzk3X1BEX0VBUEQsCiAJCQkJICAgICAoYWM5Ny0+cmVnc1tBQzk3X01BU1RFUl0gJiBtYXNrKSA9PSBtYXNrID8KLQkJCQkgICAgIDB4ODAwMCA6IDApOworCQkJCSAgICAgQUM5N19QRF9FQVBEIDogMCk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0yODAxLDcgKzI4MjAsMTAgQEAKIAlzbmRfYWM5N19yZW1vdmVfY3RsKGFjOTcsICJFeHRlcm5hbCBBbXBsaWZpZXIiLCBOVUxMKTsKIAlzbmRfYWM5N19yZW1vdmVfY3RsKGFjOTcsICJIZWFkcGhvbmUgUGxheWJhY2siLCAiU3dpdGNoIik7CiAJc25kX2FjOTdfcmVtb3ZlX2N0bChhYzk3LCAiSGVhZHBob25lIFBsYXliYWNrIiwgIlZvbHVtZSIpOwotCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfUE9XRVJET1dOLCAweDgwMDAsIDB4ODAwMCk7IC8qIG11dGUgTEVEIG9uICovCisJc25kX2FjOTdfdXBkYXRlX2JpdHMoCisJCWFjOTcsIEFDOTdfUE9XRVJET1dOLAorCQlBQzk3X1BEX0VBUEQsIEFDOTdfUERfRUFQRCAvKiBtdXRlIExFRCBvbiAqLworCSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwppbmRleCBiZjQ3NTc0Li4yMDBjOWExIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCkBAIC0yNyw2ICsyNywxNSBAQAogI2luY2x1ZGUgImFjOTdfcGF0Y2guaCIKIAogLyoKKyAqICBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfYWM5N19maW5kX21peGVyX2N0bChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSk7CitzdGF0aWMgaW50IHNuZF9hYzk3X2FkZF92bWFzdGVyKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY2hhciAqbmFtZSwKKwkJCQljb25zdCB1bnNpZ25lZCBpbnQgKnRsdiwgY29uc3QgY2hhciAqKnNsYXZlcyk7CisKKy8qCiAgKiAgQ2hpcCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbgogICovCiAKQEAgLTI5NDAsNiArMjk0OSw0OSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBhdGNoX2F6dGVjaF9hemYzMzI4X3NwZWNpZmljKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsXzNkX2NlbnRlciA9CisJCXNuZF9hYzk3X2ZpbmRfbWl4ZXJfY3RsKGFjOTcsICIzRCBDb250cm9sIC0gQ2VudGVyIik7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bF8zZF9kZXB0aCA9CisJCXNuZF9hYzk3X2ZpbmRfbWl4ZXJfY3RsKGFjOTcsICIzRCBDb250cm9sIC0gRGVwdGgiKTsKKworCS8qCisJICogM0QgcmVnaXN0ZXIgaXMgZGlmZmVyZW50IGZyb20gQUM5NyBzdGFuZGFyZCBsYXlvdXQKKwkgKiAoYWxzbyBkbyBzb21lIHJlbmFtaW5nLCB0byByZXNlbWJsZSBXaW5kb3dzIGRyaXZlciBuYW1pbmcpCisJICovCisJaWYgKGtjdGxfM2RfY2VudGVyKSB7CisJCWtjdGxfM2RfY2VudGVyLT5wcml2YXRlX3ZhbHVlID0KKwkJCUFDOTdfU0lOR0xFX1ZBTFVFKEFDOTdfM0RfQ09OVFJPTCwgMSwgMHgwNywgMCk7CisJCXNuZF9hYzk3X3JlbmFtZV92b2xfY3RsKGFjOTcsCisJCQkiM0QgQ29udHJvbCAtIENlbnRlciIsICIzRCBDb250cm9sIC0gV2lkdGgiCisJCSk7CisJfQorCWlmIChrY3RsXzNkX2RlcHRoKQorCQlrY3RsXzNkX2RlcHRoLT5wcml2YXRlX3ZhbHVlID0KKwkJCUFDOTdfU0lOR0xFX1ZBTFVFKEFDOTdfM0RfQ09OVFJPTCwgOCwgMHgwMywgMCk7CisKKwkvKiBBenRlY2ggV2luZG93cyBkcml2ZXIgY2FsbHMgdGhlCisJICAgZXF1aXZhbGVudCBjb250cm9sICJNb2RlbSBQbGF5YmFjayIsIHRodXMgcmVuYW1lIGl0OiAqLworCXNuZF9hYzk3X3JlbmFtZV92b2xfY3RsKGFjOTcsCisJCSJNYXN0ZXIgTW9ubyBQbGF5YmFjayIsICJNb2RlbSBQbGF5YmFjayIKKwkpOworCXNuZF9hYzk3X3JlbmFtZV92b2xfY3RsKGFjOTcsCisJCSJIZWFkcGhvbmUgUGxheWJhY2siLCAiRk0gU3ludGggUGxheWJhY2siCisJKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hYzk3X2J1aWxkX29wcyBwYXRjaF9henRlY2hfYXpmMzMyOF9vcHMgPSB7CisJLmJ1aWxkX3NwZWNpZmljCT0gcGF0Y2hfYXp0ZWNoX2F6ZjMzMjhfc3BlY2lmaWMKK307CisKK3N0YXRpYyBpbnQgcGF0Y2hfYXp0ZWNoX2F6ZjMzMjgoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF9henRlY2hfYXpmMzMyOF9vcHM7CisJcmV0dXJuIDA7Cit9CiAKIC8qCiAgKiBDLU1lZGlhIENNOTd4eCBjb2RlY3MKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jCmluZGV4IGM4MGIwYjguLjBhYzFmOTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9hc2locGkuYwpAQCAtMjEsNiArMjEsNyBAQAogICogIHdvdWxkIGFwcHJlY2lhdGUgaXQgaWYgeW91IGdyYW50IHVzIHRoZSByaWdodCB0byB1c2UgdGhvc2UgbW9kaWZpY2F0aW9ucwogICogIGZvciBhbnkgcHVycG9zZSBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMuCiAgKi8KKwogLyogPjA6IHByaW50IEh3IHBhcmFtcywgdGltZXIgdmFycy4gPjE6IHByaW50IHN0cmVhbSB3cml0ZS9jb3B5IHNpemVzICAqLwogI2RlZmluZSBSRUFMTFlfVkVSQk9TRV9MT0dHSU5HIDAKIApAQCAtMzYsMTYgKzM3LDEyIEBACiAjZGVmaW5lIFZQUklOVEsyKC4uLikKICNlbmRpZgogCi0jaWZuZGVmIEFTSV9TVFlMRV9OQU1FUwotLyogbm90IHN1cmUgaG93IEFMU0Egc3R5bGUgbmFtZSBzaG91bGQgbG9vayAqLwotI2RlZmluZSBBU0lfU1RZTEVfTkFNRVMgMQotI2VuZGlmCi0KICNpbmNsdWRlICJocGlfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJocGltc2dpbml0LmgiCiAjaW5jbHVkZSAiaHBpb2N0bC5oIgogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtODUsMTEgKzgyLDExIEBACiAKIC8qIGlkZW50aWZ5IGRyaXZlciAqLwogI2lmZGVmIEtFUk5FTF9BTFNBX0JVSUxECi1zdGF0aWMgY2hhciAqYnVpbGRfaW5mbyA9ICJidWlsdCB1c2luZyBoZWFkZXJzIGZyb20ga2VybmVsIHNvdXJjZSI7CitzdGF0aWMgY2hhciAqYnVpbGRfaW5mbyA9ICJCdWlsdCB1c2luZyBoZWFkZXJzIGZyb20ga2VybmVsIHNvdXJjZSI7CiBtb2R1bGVfcGFyYW0oYnVpbGRfaW5mbywgY2hhcnAsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhidWlsZF9pbmZvLCAiYnVpbHQgdXNpbmcgaGVhZGVycyBmcm9tIGtlcm5lbCBzb3VyY2UiKTsKICNlbHNlCi1zdGF0aWMgY2hhciAqYnVpbGRfaW5mbyA9ICJidWlsdCB3aXRoaW4gQUxTQSBzb3VyY2UiOworc3RhdGljIGNoYXIgKmJ1aWxkX2luZm8gPSAiQnVpbHQgd2l0aGluIEFMU0Egc291cmNlIjsKIG1vZHVsZV9wYXJhbShidWlsZF9pbmZvLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGJ1aWxkX2luZm8sICJidWlsdCB3aXRoaW4gQUxTQSBzb3VyY2UiKTsKICNlbmRpZgpAQCAtMTAwLDEzICs5NywxNCBAQAogI2RlZmluZSBERUZBVUxUX1NBTVBMRVJBVEUgNDQxMDAKIHN0YXRpYyBpbnQgYWRhcHRlcl9mcyA9IERFRkFVTFRfU0FNUExFUkFURTsKIAotc3RhdGljIHN0cnVjdCBocGlfaHN1YnN5cyAqc3M7CS8qIGhhbmRsZSB0byBIUEkgYXVkaW8gc3Vic3lzdGVtICovCi0KIC8qIGRlZmF1bHRzICovCiAjZGVmaW5lIFBFUklPRFNfTUlOIDIKLSNkZWZpbmUgUEVSSU9EX0JZVEVTX01JTiAgMjMwNAorI2RlZmluZSBQRVJJT0RfQllURVNfTUlOICAyMDQ4CiAjZGVmaW5lIEJVRkZFUl9CWVRFU19NQVggKDUxMiAqIDEwMjQpCiAKKy8qIGNvbnZlcnQgc3RyZWFtIHRvIGNoYXJhY3RlciAqLworI2RlZmluZSBTQ0hSKHMpICgocyA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSA/ICdQJyA6ICdDJykKKwogLyojZGVmaW5lIFRJTUVSX01JTExJU0VDT05EUyAyMAogI2RlZmluZSBGT1JDRV9USU1FUl9KSUZGSUVTICgoVElNRVJfTUlMTElTRUNPTkRTICogSFogKyA5OTkpLzEwMDApCiAqLwpAQCAtMTUyLDExICsxNTAsMTIgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAl1bnNpZ25lZCBpbnQgcmVzcGF3bl90aW1lcjsKIAl1bnNpZ25lZCBpbnQgaHBpX2J1ZmZlcl9hdHRhY2hlZDsKLQl1bnNpZ25lZCBpbnQgcGNtX3NpemU7Ci0JdW5zaWduZWQgaW50IHBjbV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2J5dGVzOworCXVuc2lnbmVkIGludCBwZXJpb2RfYnl0ZXM7CiAJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9zZWM7Ci0JdW5zaWduZWQgaW50IHBjbV9pcnFfcG9zOwkvKiBJUlEgcG9zaXRpb24gKi8KLQl1bnNpZ25lZCBpbnQgcGNtX2J1Zl9wb3M7CS8qIHBvc2l0aW9uIGluIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCBwY21fYnVmX2hvc3Rfcndfb2ZzOyAvKiBIb3N0IFIvVyBwb3MgKi8KKwl1bnNpZ25lZCBpbnQgcGNtX2J1Zl9kbWFfb2ZzOwkvKiBETUEgUi9XIG9mZnNldCBpbiBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgcGNtX2J1Zl9lbGFwc2VkX2RtYV9vZnM7CS8qIERNQSBSL1cgb2Zmc2V0IGluIGJ1ZmZlciAqLwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXUzMiBoX3N0cmVhbTsKIAlzdHJ1Y3QgaHBpX2Zvcm1hdCBmb3JtYXQ7CkBAIC0xNjcsNyArMTY2LDYgQEAKIC8qIEZ1bmN0aW9ucyB0byBhbGxvdyBkcml2ZXIgdG8gZ2l2ZSBhIGJ1ZmZlciB0byBIUEkgZm9yIGJ1c21hc3RlcmluZyAqLwogCiBzdGF0aWMgdTE2IGhwaV9zdHJlYW1faG9zdF9idWZmZXJfYXR0YWNoKAotCXN0cnVjdCBocGlfaHN1YnN5cyAqaFMsCiAJdTMyIGhfc3RyZWFtLCAgIC8qIGhhbmRsZSB0byBvdXRzdHJlYW0uICovCiAJdTMyIHNpemVfaW5fYnl0ZXMsIC8qIHNpemUgaW4gYnl0ZXMgb2YgYnVzIG1hc3RlcmluZyBidWZmZXIgKi8KIAl1MzIgcGNpX2FkZHJlc3MKQEAgLTE5NCwxMCArMTkyLDcgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXN0YXRpYyB1MTYgaHBpX3N0cmVhbV9ob3N0X2J1ZmZlcl9kZXRhY2goCi0Jc3RydWN0IGhwaV9oc3Vic3lzICpoUywKLQl1MzIgIGhfc3RyZWFtCi0pCitzdGF0aWMgdTE2IGhwaV9zdHJlYW1faG9zdF9idWZmZXJfZGV0YWNoKHUzMiAgaF9zdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CkBAIC0yMTgsMjQgKzIxMywyMyBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgaHBpX3N0cmVhbV9zdGFydChzdHJ1Y3QgaHBpX2hzdWJzeXMgKmhTLCB1MzIgaF9zdHJlYW0pCitzdGF0aWMgaW5saW5lIHUxNiBocGlfc3RyZWFtX3N0YXJ0KHUzMiBoX3N0cmVhbSkKIHsKIAlpZiAoaHBpX2hhbmRsZV9vYmplY3QoaF9zdHJlYW0pID09ICBIUElfT0JKX09TVFJFQU0pCi0JCXJldHVybiBocGlfb3V0c3RyZWFtX3N0YXJ0KGhTLCBoX3N0cmVhbSk7CisJCXJldHVybiBocGlfb3V0c3RyZWFtX3N0YXJ0KGhfc3RyZWFtKTsKIAllbHNlCi0JCXJldHVybiBocGlfaW5zdHJlYW1fc3RhcnQoaFMsIGhfc3RyZWFtKTsKKwkJcmV0dXJuIGhwaV9pbnN0cmVhbV9zdGFydChoX3N0cmVhbSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGhwaV9zdHJlYW1fc3RvcChzdHJ1Y3QgaHBpX2hzdWJzeXMgKmhTLCB1MzIgaF9zdHJlYW0pCitzdGF0aWMgaW5saW5lIHUxNiBocGlfc3RyZWFtX3N0b3AodTMyIGhfc3RyZWFtKQogewogCWlmIChocGlfaGFuZGxlX29iamVjdChoX3N0cmVhbSkgPT0gIEhQSV9PQkpfT1NUUkVBTSkKLQkJcmV0dXJuIGhwaV9vdXRzdHJlYW1fc3RvcChoUywgaF9zdHJlYW0pOworCQlyZXR1cm4gaHBpX291dHN0cmVhbV9zdG9wKGhfc3RyZWFtKTsKIAllbHNlCi0JCXJldHVybiBocGlfaW5zdHJlYW1fc3RvcChoUywgaF9zdHJlYW0pOworCQlyZXR1cm4gaHBpX2luc3RyZWFtX3N0b3AoaF9zdHJlYW0pOwogfQogCiBzdGF0aWMgaW5saW5lIHUxNiBocGlfc3RyZWFtX2dldF9pbmZvX2V4KAotICAgIHN0cnVjdCBocGlfaHN1YnN5cyAqaFMsCiAgICAgdTMyIGhfc3RyZWFtLAogICAgIHUxNiAgICAgICAgKnB3X3N0YXRlLAogICAgIHUzMiAgICAgICAgKnBidWZmZXJfc2l6ZSwKQEAgLTI0NCw0MiArMjM4LDQzIEBACiAgICAgdTMyICAgICAgICAqcGF1eGlsaWFyeV9kYXRhCiApCiB7CisJdTE2IGU7CiAJaWYgKGhwaV9oYW5kbGVfb2JqZWN0KGhfc3RyZWFtKSAgPT0gIEhQSV9PQkpfT1NUUkVBTSkKLQkJcmV0dXJuIGhwaV9vdXRzdHJlYW1fZ2V0X2luZm9fZXgoaFMsIGhfc3RyZWFtLCBwd19zdGF0ZSwKKwkJZSA9IGhwaV9vdXRzdHJlYW1fZ2V0X2luZm9fZXgoaF9zdHJlYW0sIHB3X3N0YXRlLAogCQkJCQlwYnVmZmVyX3NpemUsIHBkYXRhX2luX2J1ZmZlciwKIAkJCQkJcHNhbXBsZV9jb3VudCwgcGF1eGlsaWFyeV9kYXRhKTsKIAllbHNlCi0JCXJldHVybiBocGlfaW5zdHJlYW1fZ2V0X2luZm9fZXgoaFMsIGhfc3RyZWFtLCBwd19zdGF0ZSwKKwkJZSA9IGhwaV9pbnN0cmVhbV9nZXRfaW5mb19leChoX3N0cmVhbSwgcHdfc3RhdGUsCiAJCQkJCXBidWZmZXJfc2l6ZSwgcGRhdGFfaW5fYnVmZmVyLAogCQkJCQlwc2FtcGxlX2NvdW50LCBwYXV4aWxpYXJ5X2RhdGEpOworCXJldHVybiBlOwogfQogCi1zdGF0aWMgaW5saW5lIHUxNiBocGlfc3RyZWFtX2dyb3VwX2FkZChzdHJ1Y3QgaHBpX2hzdWJzeXMgKmhTLAorc3RhdGljIGlubGluZSB1MTYgaHBpX3N0cmVhbV9ncm91cF9hZGQoCiAJCQkJCXUzMiBoX21hc3RlciwKIAkJCQkJdTMyIGhfc3RyZWFtKQogewogCWlmIChocGlfaGFuZGxlX29iamVjdChoX21hc3RlcikgPT0gIEhQSV9PQkpfT1NUUkVBTSkKLQkJcmV0dXJuIGhwaV9vdXRzdHJlYW1fZ3JvdXBfYWRkKGhTLCBoX21hc3RlciwgaF9zdHJlYW0pOworCQlyZXR1cm4gaHBpX291dHN0cmVhbV9ncm91cF9hZGQoaF9tYXN0ZXIsIGhfc3RyZWFtKTsKIAllbHNlCi0JCXJldHVybiBocGlfaW5zdHJlYW1fZ3JvdXBfYWRkKGhTLCBoX21hc3RlciwgaF9zdHJlYW0pOworCQlyZXR1cm4gaHBpX2luc3RyZWFtX2dyb3VwX2FkZChoX21hc3RlciwgaF9zdHJlYW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHUxNiBocGlfc3RyZWFtX2dyb3VwX3Jlc2V0KHN0cnVjdCBocGlfaHN1YnN5cyAqaFMsCi0JCQkJCQl1MzIgaF9zdHJlYW0pCitzdGF0aWMgaW5saW5lIHUxNiBocGlfc3RyZWFtX2dyb3VwX3Jlc2V0KHUzMiBoX3N0cmVhbSkKIHsKIAlpZiAoaHBpX2hhbmRsZV9vYmplY3QoaF9zdHJlYW0pID09ICBIUElfT0JKX09TVFJFQU0pCi0JCXJldHVybiBocGlfb3V0c3RyZWFtX2dyb3VwX3Jlc2V0KGhTLCBoX3N0cmVhbSk7CisJCXJldHVybiBocGlfb3V0c3RyZWFtX2dyb3VwX3Jlc2V0KGhfc3RyZWFtKTsKIAllbHNlCi0JCXJldHVybiBocGlfaW5zdHJlYW1fZ3JvdXBfcmVzZXQoaFMsIGhfc3RyZWFtKTsKKwkJcmV0dXJuIGhwaV9pbnN0cmVhbV9ncm91cF9yZXNldChoX3N0cmVhbSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGhwaV9zdHJlYW1fZ3JvdXBfZ2V0X21hcChzdHJ1Y3QgaHBpX2hzdWJzeXMgKmhTLAorc3RhdGljIGlubGluZSB1MTYgaHBpX3N0cmVhbV9ncm91cF9nZXRfbWFwKAogCQkJCXUzMiBoX3N0cmVhbSwgdTMyICptbywgdTMyICptaSkKIHsKIAlpZiAoaHBpX2hhbmRsZV9vYmplY3QoaF9zdHJlYW0pID09ICBIUElfT0JKX09TVFJFQU0pCi0JCXJldHVybiBocGlfb3V0c3RyZWFtX2dyb3VwX2dldF9tYXAoaFMsIGhfc3RyZWFtLCBtbywgbWkpOworCQlyZXR1cm4gaHBpX291dHN0cmVhbV9ncm91cF9nZXRfbWFwKGhfc3RyZWFtLCBtbywgbWkpOwogCWVsc2UKLQkJcmV0dXJuIGhwaV9pbnN0cmVhbV9ncm91cF9nZXRfbWFwKGhTLCBoX3N0cmVhbSwgbW8sIG1pKTsKKwkJcmV0dXJuIGhwaV9pbnN0cmVhbV9ncm91cF9nZXRfbWFwKGhfc3RyZWFtLCBtbywgbWkpOwogfQogCiBzdGF0aWMgdTE2IGhhbmRsZV9lcnJvcih1MTYgZXJyLCBpbnQgbGluZSwgY2hhciAqZmlsZW5hbWUpCkBAIC0yOTksMTEgKzI5NCwxMSBAQAogewogCXNuZF9wcmludGQoIkhXUEFSQU1TIFxuIik7CiAJc25kX3ByaW50ZCgic2FtcGxlcmF0ZSAlZCBcbiIsIHBhcmFtc19yYXRlKHApKTsKLQlzbmRfcHJpbnRkKCJjaGFubmVscyAlZCBcbiIsIHBhcmFtc19jaGFubmVscyhwKSk7Ci0Jc25kX3ByaW50ZCgiZm9ybWF0ICVkIFxuIiwgcGFyYW1zX2Zvcm1hdChwKSk7CisJc25kX3ByaW50ZCgiQ2hhbm5lbHMgJWQgXG4iLCBwYXJhbXNfY2hhbm5lbHMocCkpOworCXNuZF9wcmludGQoIkZvcm1hdCAlZCBcbiIsIHBhcmFtc19mb3JtYXQocCkpOwogCXNuZF9wcmludGQoInN1YmZvcm1hdCAlZCBcbiIsIHBhcmFtc19zdWJmb3JtYXQocCkpOwotCXNuZF9wcmludGQoImJ1ZmZlciBieXRlcyAlZCBcbiIsIHBhcmFtc19idWZmZXJfYnl0ZXMocCkpOwotCXNuZF9wcmludGQoInBlcmlvZCBieXRlcyAlZCBcbiIsIHBhcmFtc19wZXJpb2RfYnl0ZXMocCkpOworCXNuZF9wcmludGQoIkJ1ZmZlciBieXRlcyAlZCBcbiIsIHBhcmFtc19idWZmZXJfYnl0ZXMocCkpOworCXNuZF9wcmludGQoIlBlcmlvZCBieXRlcyAlZCBcbiIsIHBhcmFtc19wZXJpb2RfYnl0ZXMocCkpOwogCXNuZF9wcmludGQoImFjY2VzcyAlZCBcbiIsIHBhcmFtc19hY2Nlc3MocCkpOwogCXNuZF9wcmludGQoInBlcmlvZF9zaXplICVkIFxuIiwgcGFyYW1zX3BlcmlvZF9zaXplKHApKTsKIAlzbmRfcHJpbnRkKCJwZXJpb2RzICVkIFxuIiwgcGFyYW1zX3BlcmlvZHMocCkpOwpAQCAtMzM1LDcgKzMzMCw3IEBACiAJICovCiAJLTEKICNlbHNlCi0JLyogU05EUlZfUENNX0ZPUk1BVF9TMjRfM0xFICovCS8qIHsgSFBJX0ZPUk1BVF9QQ00yNF9TSUdORUQgICAgICAgIDE1ICovCisJLyogU05EUlZfUENNX0ZPUk1BVF9TMjRfM0xFICovIC8qIEhQSV9GT1JNQVRfUENNMjRfU0lHTkVEIDE1ICovCiAjZW5kaWYKIH07CiAKQEAgLTM3OCwyMCArMzczLDIwIEBACiAJfSBlbHNlIHsKIAkJLyogb24gY2FyZHMgd2l0aG91dCBTUkMsCiAJCSAgIHZhbGlkIHJhdGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHNhbXBsZWNsb2NrICovCi0JCWVyciA9IGhwaV9taXhlcl9nZXRfY29udHJvbChzcywgYXNpaHBpLT5oX21peGVyLAorCQllcnIgPSBocGlfbWl4ZXJfZ2V0X2NvbnRyb2woYXNpaHBpLT5oX21peGVyLAogCQkJCQkgIEhQSV9TT1VSQ0VOT0RFX0NMT0NLX1NPVVJDRSwgMCwgMCwgMCwKIAkJCQkJICBIUElfQ09OVFJPTF9TQU1QTEVDTE9DSywgJmhfY29udHJvbCk7CiAJCWlmIChlcnIpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIKLQkJCQkibm8gbG9jYWwgc2FtcGxlY2xvY2ssIGVyciAlZFxuIiwgZXJyKTsKKwkJCQkiTm8gbG9jYWwgc2FtcGxlY2xvY2ssIGVyciAlZFxuIiwgZXJyKTsKIAkJfQogCiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgMTAwOyBpZHgrKykgewotCQkJaWYgKGhwaV9zYW1wbGVfY2xvY2tfcXVlcnlfbG9jYWxfcmF0ZShzcywKKwkJCWlmIChocGlfc2FtcGxlX2Nsb2NrX3F1ZXJ5X2xvY2FsX3JhdGUoCiAJCQkJaF9jb250cm9sLCBpZHgsICZzYW1wbGVfcmF0ZSkpIHsKIAkJCQlpZiAoIWlkeCkKIAkJCQkJc25kX3ByaW50ayhLRVJOX0VSUgotCQkJCQkJImxvY2FsIHJhdGUgcXVlcnkgZmFpbGVkXG4iKTsKKwkJCQkJCSJMb2NhbCByYXRlIHF1ZXJ5IGZhaWxlZFxuIik7CiAKIAkJCQlicmVhazsKIAkJCX0KQEAgLTQ4MCwxMCArNDc1LDEwIEBACiAJCQlmb3JtYXQsIHBhcmFtc19yYXRlKHBhcmFtcyksIDAsIDApKTsKIAogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKLQkJaWYgKGhwaV9pbnN0cmVhbV9yZXNldChzcywgZHBjbS0+aF9zdHJlYW0pICE9IDApCisJCWlmIChocGlfaW5zdHJlYW1fcmVzZXQoZHBjbS0+aF9zdHJlYW0pICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoaHBpX2luc3RyZWFtX3NldF9mb3JtYXQoc3MsCisJCWlmIChocGlfaW5zdHJlYW1fc2V0X2Zvcm1hdCgKIAkJCWRwY20tPmhfc3RyZWFtLCAmZHBjbS0+Zm9ybWF0KSAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDkxLDEwICs0ODYsMTAgQEAKIAlkcGNtLT5ocGlfYnVmZmVyX2F0dGFjaGVkID0gMDsKIAlpZiAoY2FyZC0+c3VwcG9ydF9tbWFwKSB7CiAKLQkJZXJyID0gaHBpX3N0cmVhbV9ob3N0X2J1ZmZlcl9hdHRhY2goc3MsIGRwY20tPmhfc3RyZWFtLAorCQllcnIgPSBocGlfc3RyZWFtX2hvc3RfYnVmZmVyX2F0dGFjaChkcGNtLT5oX3N0cmVhbSwKIAkJCXBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKSwgIHJ1bnRpbWUtPmRtYV9hZGRyKTsKIAkJaWYgKGVyciA9PSAwKSB7Ci0JCQlzbmRfcHJpbnRkKEtFUk5fSU5GTworCQkJVlBSSU5USzEoS0VSTl9JTkZPCiAJCQkJInN0cmVhbV9ob3N0X2J1ZmZlcl9hdHRhY2ggc3VjY2VlZGVkICV1ICVsdVxuIiwKIAkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyksCiAJCQkJKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+ZG1hX2FkZHIpOwpAQCAtNTA1LDExICs1MDAsMTEgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZXJyID0gaHBpX3N0cmVhbV9nZXRfaW5mb19leChzcywgZHBjbS0+aF9zdHJlYW0sIE5VTEwsCisJCWVyciA9IGhwaV9zdHJlYW1fZ2V0X2luZm9fZXgoZHBjbS0+aF9zdHJlYW0sIE5VTEwsCiAJCQkJCQkmZHBjbS0+aHBpX2J1ZmZlcl9hdHRhY2hlZCwKIAkJCQkJCU5VTEwsIE5VTEwsIE5VTEwpOwogCi0JCXNuZF9wcmludGQoS0VSTl9JTkZPICJzdHJlYW1faG9zdF9idWZmZXJfYXR0YWNoIHN0YXR1cyAweCV4XG4iLAorCQlWUFJJTlRLMShLRVJOX0lORk8gInN0cmVhbV9ob3N0X2J1ZmZlcl9hdHRhY2ggc3RhdHVzIDB4JXhcbiIsCiAJCQkJZHBjbS0+aHBpX2J1ZmZlcl9hdHRhY2hlZCk7CiAJfQogCWJ5dGVzX3Blcl9zZWMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpICogcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CkBAIC01MjAsMTYgKzUxNSwzMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRwY20tPmJ5dGVzX3Blcl9zZWMgPSBieXRlc19wZXJfc2VjOwotCWRwY20tPnBjbV9zaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOwotCWRwY20tPnBjbV9jb3VudCA9IHBhcmFtc19wZXJpb2RfYnl0ZXMocGFyYW1zKTsKLQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAicGNtX3NpemU9JWQsIHBjbV9jb3VudD0lZCwgYnBzPSVkXG4iLAotCQkJZHBjbS0+cGNtX3NpemUsIGRwY20tPnBjbV9jb3VudCwgYnl0ZXNfcGVyX3NlYyk7CisJZHBjbS0+YnVmZmVyX2J5dGVzID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOworCWRwY20tPnBlcmlvZF9ieXRlcyA9IHBhcmFtc19wZXJpb2RfYnl0ZXMocGFyYW1zKTsKKwlWUFJJTlRLMShLRVJOX0lORk8gImJ1ZmZlcl9ieXRlcz0lZCwgcGVyaW9kX2J5dGVzPSVkLCBicHM9JWRcbiIsCisJCQlkcGNtLT5idWZmZXJfYnl0ZXMsIGRwY20tPnBlcmlvZF9ieXRlcywgYnl0ZXNfcGVyX3NlYyk7CiAKLQlkcGNtLT5wY21faXJxX3BvcyA9IDA7Ci0JZHBjbS0+cGNtX2J1Zl9wb3MgPSAwOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitzbmRfY2FyZF9hc2locGlfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWlmIChkcGNtLT5ocGlfYnVmZmVyX2F0dGFjaGVkKQorCQlocGlfc3RyZWFtX2hvc3RfYnVmZmVyX2RldGFjaChkcGNtLT5oX3N0cmVhbSk7CisKKwlzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9jYXJkX2FzaWhwaV9ydW50aW1lX2ZyZWUoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpX3BjbSAqZHBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlrZnJlZShkcGNtKTsKK30KKwogc3RhdGljIHZvaWQgc25kX2NhcmRfYXNpaHBpX3BjbV90aW1lcl9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKgogCQkJCQkgICAgc3Vic3RyZWFtKQogewpAQCAtNTM3LDkgKzU0OCw5IEBACiAJc3RydWN0IHNuZF9jYXJkX2FzaWhwaV9wY20gKmRwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJaW50IGV4cGlyeTsKIAotCWV4cGlyeSA9IChkcGNtLT5wY21fY291bnQgKiBIWiAvIGRwY20tPmJ5dGVzX3Blcl9zZWMpOwotCS8qIHdhaXQgbG9uZ2VyIHRoZSBmaXJzdCB0aW1lLCBmb3Igc2FtcGxlcyB0byBwcm9wYWdhdGUgKi8KLQlleHBpcnkgPSBtYXgoZXhwaXJ5LCAyMCk7CisJZXhwaXJ5ID0gSFogLyAyMDA7CisJLyo/IChkcGNtLT5wZXJpb2RfYnl0ZXMgKiBIWiAvIGRwY20tPmJ5dGVzX3Blcl9zZWMpOyAqLworCWV4cGlyeSA9IG1heChleHBpcnksIDEpOyAvKiBkb24ndCBsZXQgaXQgYmUgemVybyEgKi8KIAlkcGNtLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGV4cGlyeTsKIAlkcGNtLT5yZXNwYXduX3RpbWVyID0gMTsKIAlhZGRfdGltZXIoJmRwY20tPnRpbWVyKTsKQEAgLTU2MiwzNyArNTczLDQ0IEBACiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOwogCXUxNiBlOwogCi0Jc25kX3ByaW50ZCgidHJpZ2dlciAlZHN0cmVhbSAlZFxuIiwKLQkJCXN1YnN0cmVhbS0+c3RyZWFtLCBzdWJzdHJlYW0tPm51bWJlcik7CisJVlBSSU5USzEoS0VSTl9JTkZPICIlYyVkIHRyaWdnZXJcbiIsCisJCQlTQ0hSKHN1YnN0cmVhbS0+c3RyZWFtKSwgc3Vic3RyZWFtLT5udW1iZXIpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAkJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKLQkJCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkczsKLQkJCWRzID0gcy0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHMtPnJ1bnRpbWU7CisJCQlzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpX3BjbSAqZHMgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKIAkJCWlmIChzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHMpICE9IGNhcmQpCiAJCQkJY29udGludWU7CiAKKwkJCS8qIGRvbid0IGxpbmsgQ2FwIGFuZCBQbGF5ICovCisJCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gIT0gcy0+c3RyZWFtKQorCQkJCWNvbnRpbnVlOworCiAJCQlpZiAoKHMtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSAmJgogCQkJCShjYXJkLT5zdXBwb3J0X21tYXApKSB7CiAJCQkJLyogSG93IGRvIEkga25vdyBob3cgbXVjaCB2YWxpZCBkYXRhIGlzIHByZXNlbnQKLQkJCQkqIGluIGJ1ZmZlcj8gSnVzdCBndWVzc2luZyAyIHBlcmlvZHMsIGJ1dCBpZgorCQkJCSogaW4gYnVmZmVyPyBNdXN0IGJlIGF0IGxlYXN0IG9uZSBwZXJpb2QhCisJCQkJKiBHdWVzc2luZyAyIHBlcmlvZHMsIGJ1dCBpZgogCQkJCSogYnVmZmVyIGlzIGJpZ2dlciBpdCBtYXkgY29udGFpbiBldmVuIG1vcmUKIAkJCQkqIGRhdGE/PwogCQkJCSovCi0JCQkJdW5zaWduZWQgaW50IHByZWxvYWQgPSBkcy0+cGNtX2NvdW50ICogMjsKLQkJCQlWUFJJTlRLMigicHJlbG9hZCAlZFxuIiwgcHJlbG9hZCk7CisJCQkJdW5zaWduZWQgaW50IHByZWxvYWQgPSBkcy0+cGVyaW9kX2J5dGVzICogMTsKKwkJCQlWUFJJTlRLMihLRVJOX0lORk8gIiVkIHByZWxvYWQgeCV4XG4iLCBzLT5udW1iZXIsIHByZWxvYWQpOwogCQkJCWhwaV9oYW5kbGVfZXJyb3IoaHBpX291dHN0cmVhbV93cml0ZV9idWYoCi0JCQkJCQlzcywgZHMtPmhfc3RyZWFtLAotCQkJCQkJJnMtPnJ1bnRpbWUtPmRtYV9hcmVhWzBdLAorCQkJCQkJZHMtPmhfc3RyZWFtLAorCQkJCQkJJnJ1bnRpbWUtPmRtYV9hcmVhWzBdLAogCQkJCQkJcHJlbG9hZCwKIAkJCQkJCSZkcy0+Zm9ybWF0KSk7CisJCQkJZHMtPnBjbV9idWZfaG9zdF9yd19vZnMgPSBwcmVsb2FkOwogCQkJfQogCiAJCQlpZiAoY2FyZC0+c3VwcG9ydF9ncm91cGluZykgewotCQkJCVZQUklOVEsxKCJcdF9ncm91cCAlZHN0cmVhbSAlZFxuIiwgcy0+c3RyZWFtLAorCQkJCVZQUklOVEsxKEtFUk5fSU5GTyAiXHQlYyVkIGdyb3VwXG4iLAorCQkJCQkJU0NIUihzLT5zdHJlYW0pLAogCQkJCQkJcy0+bnVtYmVyKTsKLQkJCQllID0gaHBpX3N0cmVhbV9ncm91cF9hZGQoc3MsCisJCQkJZSA9IGhwaV9zdHJlYW1fZ3JvdXBfYWRkKAogCQkJCQlkcGNtLT5oX3N0cmVhbSwKIAkJCQkJZHMtPmhfc3RyZWFtKTsKIAkJCQlpZiAoIWUpIHsKQEAgLTYwNCwxMCArNjIyLDEyIEBACiAJCQl9IGVsc2UKIAkJCQlicmVhazsKIAkJfQotCQlzbmRfcHJpbnRkKCJzdGFydFxuIik7CisJCVZQUklOVEsxKEtFUk5fSU5GTyAic3RhcnRcbiIpOwogCQkvKiBzdGFydCB0aGUgbWFzdGVyIHN0cmVhbSAqLwogCQlzbmRfY2FyZF9hc2locGlfcGNtX3RpbWVyX3N0YXJ0KHN1YnN0cmVhbSk7Ci0JCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3N0cmVhbV9zdGFydChzcywgZHBjbS0+aF9zdHJlYW0pKTsKKwkJaWYgKChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHx8CisJCQkhY2FyZC0+c3VwcG9ydF9tbWFwKQorCQkJaHBpX2hhbmRsZV9lcnJvcihocGlfc3RyZWFtX3N0YXJ0KGRwY20tPmhfc3RyZWFtKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgpAQCAtNjE1LDg4ICs2MzUsNzMgQEAKIAkJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJCWlmIChzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHMpICE9IGNhcmQpCiAJCQkJY29udGludWU7CisJCQkvKiBkb24ndCBsaW5rIENhcCBhbmQgUGxheSAqLworCQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtICE9IHMtPnN0cmVhbSkKKwkJCQljb250aW51ZTsKIAogCQkJLyo/IHdvcmthcm91bmQgbGlua2VkIHN0cmVhbXMgZG9uJ3QKIAkJCXRyYW5zaXRpb24gdG8gU0VUVVAgMjAwNzA3MDYqLwogCQkJcy0+cnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9IFNORFJWX1BDTV9TVEFURV9TRVRVUDsKIAogCQkJaWYgKGNhcmQtPnN1cHBvcnRfZ3JvdXBpbmcpIHsKLQkJCQlWUFJJTlRLMSgiXHRfZ3JvdXAgJWRzdHJlYW0gJWRcbiIsIHMtPnN0cmVhbSwKKwkJCQlWUFJJTlRLMShLRVJOX0lORk8gIlx0JWMlZCBncm91cFxuIiwKKwkJCQlTQ0hSKHMtPnN0cmVhbSksCiAJCQkJCXMtPm51bWJlcik7CiAJCQkJc25kX3BjbV90cmlnZ2VyX2RvbmUocywgc3Vic3RyZWFtKTsKIAkJCX0gZWxzZQogCQkJCWJyZWFrOwogCQl9Ci0JCXNuZF9wcmludGQoInN0b3BcbiIpOworCQlWUFJJTlRLMShLRVJOX0lORk8gInN0b3BcbiIpOwogCiAJCS8qIF9wcmVwYXJlIGFuZCBfaHdwYXJhbXMgcmVzZXQgdGhlIHN0cmVhbSAqLwotCQlocGlfaGFuZGxlX2Vycm9yKGhwaV9zdHJlYW1fc3RvcChzcywgZHBjbS0+aF9zdHJlYW0pKTsKKwkJaHBpX2hhbmRsZV9lcnJvcihocGlfc3RyZWFtX3N0b3AoZHBjbS0+aF9zdHJlYW0pKTsKIAkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCQlocGlfaGFuZGxlX2Vycm9yKAotCQkJCWhwaV9vdXRzdHJlYW1fcmVzZXQoc3MsIGRwY20tPmhfc3RyZWFtKSk7CisJCQkJaHBpX291dHN0cmVhbV9yZXNldChkcGNtLT5oX3N0cmVhbSkpOwogCiAJCWlmIChjYXJkLT5zdXBwb3J0X2dyb3VwaW5nKQotCQkJaHBpX2hhbmRsZV9lcnJvcihocGlfc3RyZWFtX2dyb3VwX3Jlc2V0KHNzLAotCQkJCQkJZHBjbS0+aF9zdHJlYW0pKTsKKwkJCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3N0cmVhbV9ncm91cF9yZXNldChkcGNtLT5oX3N0cmVhbSkpOwogCQlicmVhazsKIAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJc25kX3ByaW50ZCgicGF1c2UgcmVsZWFzZVxuIik7Ci0JCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3N0cmVhbV9zdGFydChzcywgZHBjbS0+aF9zdHJlYW0pKTsKKwkJVlBSSU5USzEoS0VSTl9JTkZPICJwYXVzZSByZWxlYXNlXG4iKTsKKwkJaHBpX2hhbmRsZV9lcnJvcihocGlfc3RyZWFtX3N0YXJ0KGRwY20tPmhfc3RyZWFtKSk7CiAJCXNuZF9jYXJkX2FzaWhwaV9wY21fdGltZXJfc3RhcnQoc3Vic3RyZWFtKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlzbmRfcHJpbnRkKCJwYXVzZVxuIik7CisJCVZQUklOVEsxKEtFUk5fSU5GTyAicGF1c2VcbiIpOwogCQlzbmRfY2FyZF9hc2locGlfcGNtX3RpbWVyX3N0b3Aoc3Vic3RyZWFtKTsKLQkJaHBpX2hhbmRsZV9lcnJvcihocGlfc3RyZWFtX3N0b3Aoc3MsIGRwY20tPmhfc3RyZWFtKSk7CisJCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3N0cmVhbV9zdG9wKGRwY20tPmhfc3RyZWFtKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGQoIlx0SU5WQUxJRFxuIik7CisJCXNuZF9wcmludGQoS0VSTl9FUlIgIlx0SU5WQUxJRFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1zbmRfY2FyZF9hc2locGlfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCWlmIChkcGNtLT5ocGlfYnVmZmVyX2F0dGFjaGVkKQotCQlocGlfc3RyZWFtX2hvc3RfYnVmZmVyX2RldGFjaChzcywgZHBjbS0+aF9zdHJlYW0pOwotCi0Jc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzbmRfY2FyZF9hc2locGlfcnVudGltZV9mcmVlKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCi17Ci0Jc3RydWN0IHNuZF9jYXJkX2FzaWhwaV9wY20gKmRwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0Ja2ZyZWUoZHBjbSk7Ci19Ci0KIC8qYWxnb3JpdGhtIG91dGxpbmUKICBXaXRob3V0IGxpbmtpbmcgZGVnZW5lcmF0ZXMgdG8gZ2V0dGluZyBzaW5nbGUgc3RyZWFtIHBvcyBldGMKICBXaXRob3V0IG1tYXAgMm5kIGxvb3AgZGVnZW5lcmF0ZXMgdG8gc25kX3BjbV9wZXJpb2RfZWxhcHNlZAogKi8KIC8qCi1idWZfcG9zPWdldF9idWZfcG9zKHMpOworcGNtX2J1Zl9kbWFfb2ZzPWdldF9idWZfcG9zKHMpOwogZm9yX2VhY2hfbGlua2VkX3N0cmVhbShzKSB7Ci0JYnVmX3Bvcz1nZXRfYnVmX3BvcyhzKTsKLQltaW5fYnVmX3BvcyA9IG1vZHVsb19taW4obWluX2J1Zl9wb3MsIGJ1Zl9wb3MsIHBjbV9zaXplKQotCW5ld19kYXRhID0gbWluKG5ld19kYXRhLCBjYWxjX25ld19kYXRhKGJ1Zl9wb3MsaXJxX3BvcykKKwlwY21fYnVmX2RtYV9vZnM9Z2V0X2J1Zl9wb3Mocyk7CisJbWluX2J1Zl9wb3MgPSBtb2R1bG9fbWluKG1pbl9idWZfcG9zLCBwY21fYnVmX2RtYV9vZnMsIGJ1ZmZlcl9ieXRlcykKKwluZXdfZGF0YSA9IG1pbihuZXdfZGF0YSwgY2FsY19uZXdfZGF0YShwY21fYnVmX2RtYV9vZnMsaXJxX3BvcykKIH0KIHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgcHJlZGljdF9uZXh0X3BlcmlvZF9yZWFkeShtaW5fYnVmX3Bvcyk7CiBmb3JfZWFjaF9saW5rZWRfc3RyZWFtKHMpIHsKLQlzLT5idWZfcG9zID0gbWluX2J1Zl9wb3M7Ci0JaWYgKG5ld19kYXRhID4gcGNtX2NvdW50KSB7CisJcy0+cGNtX2J1Zl9kbWFfb2ZzID0gbWluX2J1Zl9wb3M7CisJaWYgKG5ld19kYXRhID4gcGVyaW9kX2J5dGVzKSB7CiAJCWlmIChtbWFwKSB7Ci0JCQlpcnFfcG9zID0gKGlycV9wb3MgKyBwY21fY291bnQpICUgcGNtX3NpemU7CisJCQlpcnFfcG9zID0gKGlycV9wb3MgKyBwZXJpb2RfYnl0ZXMpICUgYnVmZmVyX2J5dGVzOwogCQkJaWYgKHBsYXliYWNrKSB7Ci0JCQkJd3JpdGUocGNtX2NvdW50KTsKKwkJCQl3cml0ZShwZXJpb2RfYnl0ZXMpOwogCQkJfSBlbHNlIHsKLQkJCQlyZWFkKHBjbV9jb3VudCk7CisJCQkJcmVhZChwZXJpb2RfYnl0ZXMpOwogCQkJfQogCQl9CiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQocyk7CkBAIC03MjQsMTA1ICs3MjksMTM2IEBACiBzdGF0aWMgdm9pZCBzbmRfY2FyZF9hc2locGlfdGltZXJfZnVuY3Rpb24odW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcGNtID0gKHN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICopZGF0YTsKLQlzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpICpjYXJkID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChkcGNtLT5zdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gZHBjbS0+c3Vic3RyZWFtOworCXN0cnVjdCBzbmRfY2FyZF9hc2locGkgKmNhcmQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CiAJdW5zaWduZWQgaW50IG5ld2RhdGEgPSAwOwotCXVuc2lnbmVkIGludCBidWZfcG9zLCBtaW5fYnVmX3BvcyA9IDA7CisJdW5zaWduZWQgaW50IHBjbV9idWZfZG1hX29mcywgbWluX2J1Zl9wb3MgPSAwOwogCXVuc2lnbmVkIGludCByZW1kYXRhLCB4ZmVyY291bnQsIG5leHRfamlmZmllczsKIAlpbnQgZmlyc3QgPSAxOworCWludCBsb29wcyA9IDA7CiAJdTE2IHN0YXRlOwotCXUzMiBidWZmZXJfc2l6ZSwgZGF0YV9hdmFpbCwgc2FtcGxlc19wbGF5ZWQsIGF1eDsKKwl1MzIgYnVmZmVyX3NpemUsIGJ5dGVzX2F2YWlsLCBzYW1wbGVzX3BsYXllZCwgb25fY2FyZF9ieXRlczsKKworCVZQUklOVEsxKEtFUk5fSU5GTyAiJWMlZCBzbmRfY2FyZF9hc2locGlfdGltZXJfZnVuY3Rpb25cbiIsCisJCQkJU0NIUihzdWJzdHJlYW0tPnN0cmVhbSksIHN1YnN0cmVhbS0+bnVtYmVyKTsKIAogCS8qIGZpbmQgbWluaW11bSBuZXdkYXRhIGFuZCBidWZmZXIgcG9zIGluIGdyb3VwICovCi0Jc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBkcGNtLT5zdWJzdHJlYW0pIHsKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQlzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpX3BjbSAqZHMgPSBzLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJCXJ1bnRpbWUgPSBzLT5ydW50aW1lOwogCiAJCWlmIChzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHMpICE9IGNhcmQpCiAJCQljb250aW51ZTsKIAotCQlocGlfaGFuZGxlX2Vycm9yKGhwaV9zdHJlYW1fZ2V0X2luZm9fZXgoc3MsCisJCS8qIGRvbid0IGxpbmsgQ2FwIGFuZCBQbGF5ICovCisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSAhPSBzLT5zdHJlYW0pCisJCQljb250aW51ZTsKKworCQlocGlfaGFuZGxlX2Vycm9yKGhwaV9zdHJlYW1fZ2V0X2luZm9fZXgoCiAJCQkJCWRzLT5oX3N0cmVhbSwgJnN0YXRlLAotCQkJCQkmYnVmZmVyX3NpemUsICZkYXRhX2F2YWlsLAotCQkJCQkmc2FtcGxlc19wbGF5ZWQsICZhdXgpKTsKKwkJCQkJJmJ1ZmZlcl9zaXplLCAmYnl0ZXNfYXZhaWwsCisJCQkJCSZzYW1wbGVzX3BsYXllZCwgJm9uX2NhcmRfYnl0ZXMpKTsKIAogCQkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gb24tY2FyZCBidWZmZXIgKi8KLQkJcnVudGltZS0+ZGVsYXkgPSBhdXg7Ci0KLQkJaWYgKHN0YXRlID09IEhQSV9TVEFURV9EUkFJTkVEKSB7Ci0JCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyAgIm91dHN0cmVhbSAlZCBkcmFpbmVkXG4iLAotCQkJCQlzLT5udW1iZXIpOwotCQkJc25kX3BjbV9zdG9wKHMsIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKLQkJCXJldHVybjsKLQkJfQorCQlydW50aW1lLT5kZWxheSA9IG9uX2NhcmRfYnl0ZXM7CiAKIAkJaWYgKHMtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCQlidWZfcG9zID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHNhbXBsZXNfcGxheWVkKTsKLQkJfSBlbHNlIHsKLQkJCWJ1Zl9wb3MgPSBkYXRhX2F2YWlsICsgZHMtPnBjbV9pcnFfcG9zOwotCQl9CisJCQlwY21fYnVmX2RtYV9vZnMgPSBkcy0+cGNtX2J1Zl9ob3N0X3J3X29mcyAtIGJ5dGVzX2F2YWlsOworCQkJaWYgKHN0YXRlID09IEhQSV9TVEFURV9TVE9QUEVEKSB7CisJCQkJaWYgKChieXRlc19hdmFpbCA9PSAwKSAmJgorCQkJCSAgICAob25fY2FyZF9ieXRlcyA8IGRzLT5wY21fYnVmX2hvc3Rfcndfb2ZzKSkgeworCQkJCQlocGlfaGFuZGxlX2Vycm9yKGhwaV9zdHJlYW1fc3RhcnQoZHMtPmhfc3RyZWFtKSk7CisJCQkJCVZQUklOVEsxKEtFUk5fSU5GTyAiUCVkIHN0YXJ0XG4iLCBzLT5udW1iZXIpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoc3RhdGUgPT0gSFBJX1NUQVRFX0RSQUlORUQpIHsKKwkJCQlWUFJJTlRLMShLRVJOX1dBUk5JTkcgIlAlZCBkcmFpbmVkXG4iLAorCQkJCQkJcy0+bnVtYmVyKTsKKwkJCQkvKnNuZF9wY21fc3RvcChzLCBTTkRSVl9QQ01fU1RBVEVfWFJVTik7CisJCQkJY29udGludWU7ICovCisJCQl9CisJCX0gZWxzZQorCQkJcGNtX2J1Zl9kbWFfb2ZzID0gYnl0ZXNfYXZhaWwgKyBkcy0+cGNtX2J1Zl9ob3N0X3J3X29mczsKIAogCQlpZiAoZmlyc3QpIHsKIAkJCS8qIGNhbid0IHN0YXRpY2FsbHkgaW5pdCBtaW4gd2hlbiB3cmFwIGlzIGludm9sdmVkICovCi0JCQltaW5fYnVmX3BvcyA9IGJ1Zl9wb3M7Ci0JCQluZXdkYXRhID0gKGJ1Zl9wb3MgLSBkcy0+cGNtX2lycV9wb3MpICUgZHMtPnBjbV9zaXplOworCQkJbWluX2J1Zl9wb3MgPSBwY21fYnVmX2RtYV9vZnM7CisJCQluZXdkYXRhID0gKHBjbV9idWZfZG1hX29mcyAtIGRzLT5wY21fYnVmX2VsYXBzZWRfZG1hX29mcykgJSBkcy0+YnVmZmVyX2J5dGVzOwogCQkJZmlyc3QgPSAwOwogCQl9IGVsc2UgewogCQkJbWluX2J1Zl9wb3MgPQotCQkJCW1vZHVsb19taW4obWluX2J1Zl9wb3MsIGJ1Zl9wb3MsIFVJTlRfTUFYKzFMKTsKKwkJCQltb2R1bG9fbWluKG1pbl9idWZfcG9zLCBwY21fYnVmX2RtYV9vZnMsIFVJTlRfTUFYKzFMKTsKIAkJCW5ld2RhdGEgPSBtaW4oCi0JCQkJKGJ1Zl9wb3MgLSBkcy0+cGNtX2lycV9wb3MpICUgZHMtPnBjbV9zaXplLAorCQkJCShwY21fYnVmX2RtYV9vZnMgLSBkcy0+cGNtX2J1Zl9lbGFwc2VkX2RtYV9vZnMpICUgZHMtPmJ1ZmZlcl9ieXRlcywKIAkJCQluZXdkYXRhKTsKIAkJfQogCi0JCVZQUklOVEsxKCJQQiB0aW1lciBod19wdHIgeCUwNGxYLCBhcHBsX3B0ciB4JTA0bFhcbiIsCisJCVZQUklOVEsxKEtFUk5fSU5GTyAiUEIgdGltZXIgaHdfcHRyIHglMDRsWCwgYXBwbF9wdHIgeCUwNGxYXG4iLAogCQkJKHVuc2lnbmVkIGxvbmcpZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsCiAJCQkJCQlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciksCiAJCQkodW5zaWduZWQgbG9uZylmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwKIAkJCQkJCXJ1bnRpbWUtPmNvbnRyb2wtPmFwcGxfcHRyKSk7Ci0JCVZQUklOVEsxKCIlZCBTPSVkLCBpcnE9JTA0WCwgcG9zPXglMDRYLCBsZWZ0PXglMDRYLCIKLQkJCSIgYXV4PXglMDRYIHNwYWNlPXglMDRYXG4iLCBzLT5udW1iZXIsCi0JCQlzdGF0ZSwJZHMtPnBjbV9pcnFfcG9zLCBidWZfcG9zLCAoaW50KWRhdGFfYXZhaWwsCi0JCQkoaW50KWF1eCwgYnVmZmVyX3NpemUtZGF0YV9hdmFpbCk7CisKKwkJVlBSSU5USzEoS0VSTl9JTkZPICIlZCAlYyVkIFM9JWQsIHJ3PSUwNFgsIGRtYT14JTA0WCwgbGVmdD14JTA0WCwiCisJCQkiIGF1eD14JTA0WCBzcGFjZT14JTA0WFxuIiwKKwkJCWxvb3BzLCBTQ0hSKHMtPnN0cmVhbSksCXMtPm51bWJlciwKKwkJCXN0YXRlLAlkcy0+cGNtX2J1Zl9ob3N0X3J3X29mcywgcGNtX2J1Zl9kbWFfb2ZzLCAoaW50KWJ5dGVzX2F2YWlsLAorCQkJKGludClvbl9jYXJkX2J5dGVzLCBidWZmZXJfc2l6ZS1ieXRlc19hdmFpbCk7CisJCWxvb3BzKys7CiAJfQorCXBjbV9idWZfZG1hX29mcyA9IG1pbl9idWZfcG9zOwogCi0JcmVtZGF0YSA9IG5ld2RhdGEgJSBkcGNtLT5wY21fY291bnQ7Ci0JeGZlcmNvdW50ID0gbmV3ZGF0YSAtIHJlbWRhdGE7IC8qIGEgbXVsdGlwbGUgb2YgcGNtX2NvdW50ICovCi0JbmV4dF9qaWZmaWVzID0gKChkcGNtLT5wY21fY291bnQtcmVtZGF0YSkgKiBIWiAvIGRwY20tPmJ5dGVzX3Blcl9zZWMpKzE7Ci0JbmV4dF9qaWZmaWVzID0gbWF4KG5leHRfamlmZmllcywgMlUgKiBIWiAvIDEwMDBVKTsKKwlyZW1kYXRhID0gbmV3ZGF0YSAlIGRwY20tPnBlcmlvZF9ieXRlczsKKwl4ZmVyY291bnQgPSBuZXdkYXRhIC0gcmVtZGF0YTsgLyogYSBtdWx0aXBsZSBvZiBwZXJpb2RfYnl0ZXMgKi8KKwkvKiBjb21lIGJhY2sgd2hlbiBvbl9jYXJkX2J5dGVzIGhhcyBkZWNyZWFzZWQgZW5vdWdoIHRvIGFsbG93CisJICAgd3JpdGUgdG8gaGFwcGVuLCBvciB3aGVuIGRhdGEgaGFzIGJlZW4gY29uc3VtZWQgdG8gbWFrZSBhbm90aGVyCisJICAgcGVyaW9kCisJKi8KKwlpZiAoeGZlcmNvdW50ICYmIChvbl9jYXJkX2J5dGVzICA+IGRwY20tPnBlcmlvZF9ieXRlcykpCisJCW5leHRfamlmZmllcyA9ICgob25fY2FyZF9ieXRlcyAtIGRwY20tPnBlcmlvZF9ieXRlcykgKiBIWiAvIGRwY20tPmJ5dGVzX3Blcl9zZWMpOworCWVsc2UKKwkJbmV4dF9qaWZmaWVzID0gKChkcGNtLT5wZXJpb2RfYnl0ZXMgLSByZW1kYXRhKSAqIEhaIC8gZHBjbS0+Ynl0ZXNfcGVyX3NlYyk7CisKKwluZXh0X2ppZmZpZXMgPSBtYXgobmV4dF9qaWZmaWVzLCAxVSk7CiAJZHBjbS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBuZXh0X2ppZmZpZXM7Ci0JVlBSSU5USzEoImppZiAlZCBidWYgcG9zIHglMDRYIG5ld2RhdGEgeCUwNFggeGMgeCUwNFhcbiIsCi0JCQluZXh0X2ppZmZpZXMsIG1pbl9idWZfcG9zLCBuZXdkYXRhLCB4ZmVyY291bnQpOworCVZQUklOVEsxKEtFUk5fSU5GTyAiamlmICVkIGJ1ZiBwb3MgeCUwNFggbmV3ZGF0YSB4JTA0WCB4ZmVyIHglMDRYXG4iLAorCQkJbmV4dF9qaWZmaWVzLCBwY21fYnVmX2RtYV9vZnMsIG5ld2RhdGEsIHhmZXJjb3VudCk7CiAKLQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIGRwY20tPnN1YnN0cmVhbSkgeworCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CiAJCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcyA9IHMtPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQkJZHMtPnBjbV9idWZfcG9zID0gbWluX2J1Zl9wb3M7CiAKLQkJaWYgKHhmZXJjb3VudCkgeworCQkvKiBkb24ndCBsaW5rIENhcCBhbmQgUGxheSAqLworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gIT0gcy0+c3RyZWFtKQorCQkJY29udGludWU7CisKKwkJZHMtPnBjbV9idWZfZG1hX29mcyA9IHBjbV9idWZfZG1hX29mczsKKworCQlpZiAoeGZlcmNvdW50ICYmIChvbl9jYXJkX2J5dGVzIDw9IGRzLT5wZXJpb2RfYnl0ZXMpKSB7CiAJCQlpZiAoY2FyZC0+c3VwcG9ydF9tbWFwKSB7Ci0JCQkJZHMtPnBjbV9pcnFfcG9zID0gZHMtPnBjbV9pcnFfcG9zICsgeGZlcmNvdW50OwogCQkJCWlmIChzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJCQlWUFJJTlRLMigid3JpdGUgT1MlZCB4JTA0eFxuIiwKKwkJCQkJVlBSSU5USzIoS0VSTl9JTkZPICJQJWQgd3JpdGUgeCUwNHhcbiIsCiAJCQkJCQkJcy0+bnVtYmVyLAotCQkJCQkJCWRzLT5wY21fY291bnQpOworCQkJCQkJCWRzLT5wZXJpb2RfYnl0ZXMpOwogCQkJCQlocGlfaGFuZGxlX2Vycm9yKAogCQkJCQkJaHBpX291dHN0cmVhbV93cml0ZV9idWYoCi0JCQkJCQkJc3MsIGRzLT5oX3N0cmVhbSwKKwkJCQkJCQlkcy0+aF9zdHJlYW0sCiAJCQkJCQkJJnMtPnJ1bnRpbWUtPgogCQkJCQkJCQlkbWFfYXJlYVswXSwKIAkJCQkJCQl4ZmVyY291bnQsCiAJCQkJCQkJJmRzLT5mb3JtYXQpKTsKIAkJCQl9IGVsc2UgewotCQkJCQlWUFJJTlRLMigicmVhZCBJUyVkIHglMDR4XG4iLAorCQkJCQlWUFJJTlRLMihLRVJOX0lORk8gIkMlZCByZWFkIHglMDR4XG4iLAogCQkJCQkJcy0+bnVtYmVyLAotCQkJCQkJZHBjbS0+cGNtX2NvdW50KTsKKwkJCQkJCXhmZXJjb3VudCk7CiAJCQkJCWhwaV9oYW5kbGVfZXJyb3IoCiAJCQkJCQlocGlfaW5zdHJlYW1fcmVhZF9idWYoCi0JCQkJCQkJc3MsIGRzLT5oX3N0cmVhbSwKKwkJCQkJCQlkcy0+aF9zdHJlYW0sCiAJCQkJCQkJTlVMTCwgeGZlcmNvdW50KSk7CiAJCQkJfQorCQkJCWRzLT5wY21fYnVmX2hvc3Rfcndfb2ZzID0gZHMtPnBjbV9idWZfaG9zdF9yd19vZnMgKyB4ZmVyY291bnQ7CiAJCQl9IC8qIGVsc2UgUi9XIHdpbGwgYmUgaGFuZGxlZCBieSByZWFkL3dyaXRlIGNhbGxiYWNrcyAqLworCQkJZHMtPnBjbV9idWZfZWxhcHNlZF9kbWFfb2ZzID0gcGNtX2J1Zl9kbWFfb2ZzOwogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzKTsKIAkJfQogCX0KQEAgLTg0NSwxMiArODgxLDEyIEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpX3BjbSAqZHBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCXNuZF9wcmludGQoS0VSTl9JTkZPICJwbGF5YmFjayBwcmVwYXJlICVkXG4iLCBzdWJzdHJlYW0tPm51bWJlcik7CisJVlBSSU5USzEoS0VSTl9JTkZPICJwbGF5YmFjayBwcmVwYXJlICVkXG4iLCBzdWJzdHJlYW0tPm51bWJlcik7CiAKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9vdXRzdHJlYW1fcmVzZXQoc3MsIGRwY20tPmhfc3RyZWFtKSk7Ci0JZHBjbS0+cGNtX2lycV9wb3MgPSAwOwotCWRwY20tPnBjbV9idWZfcG9zID0gMDsKLQorCWhwaV9oYW5kbGVfZXJyb3IoaHBpX291dHN0cmVhbV9yZXNldChkcGNtLT5oX3N0cmVhbSkpOworCWRwY20tPnBjbV9idWZfaG9zdF9yd19vZnMgPSAwOworCWRwY20tPnBjbV9idWZfZG1hX29mcyA9IDA7CisJZHBjbS0+cGNtX2J1Zl9lbGFwc2VkX2RtYV9vZnMgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC04NjEsMjcgKzg5Nyw4IEBACiAJc3RydWN0IHNuZF9jYXJkX2FzaWhwaV9wY20gKmRwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJc25kX3BjbV91ZnJhbWVzX3QgcHRyOwogCi0JdTMyIHNhbXBsZXNfcGxheWVkOwotCXUxNiBlcnI7Ci0KLQlpZiAoIXNuZF9wY21fc3RyZWFtX2xpbmtlZChzdWJzdHJlYW0pKSB7Ci0JCS8qIE5PVEUsIGNhbiB1c2Ugc2FtcGxlcyBwbGF5ZWQgZm9yIHBsYXliYWNrIHBvc2l0aW9uIGhlcmUgYW5kCi0JCSogaW4gdGltZXIgZm4gYmVjYXVzZSBpdCBMQUdTIHRoZSBhY3R1YWwgcmVhZCBwb2ludGVyLCBhbmQgaXMgYQotCQkqIGJldHRlciByZXByZXNlbnRhdGlvbiBvZiBhY3R1YWwgcGxheW91dCBwb3NpdGlvbgotCQkqLwotCQllcnIgPSBocGlfb3V0c3RyZWFtX2dldF9pbmZvX2V4KHNzLCBkcGNtLT5oX3N0cmVhbSwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCwKLQkJCQkJJnNhbXBsZXNfcGxheWVkLCBOVUxMKTsKLQkJaHBpX2hhbmRsZV9lcnJvcihlcnIpOwotCi0JCWRwY20tPnBjbV9idWZfcG9zID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHNhbXBsZXNfcGxheWVkKTsKLQl9Ci0JLyogZWxzZSBtdXN0IHJldHVybiBtb3N0IGNvbnNlcnZhdGl2ZSB2YWx1ZSBmb3VuZCBpbiB0aW1lciBmdW5jCi0JICogYnkgbG9vcGluZyBvdmVyIGFsbCBzdHJlYW1zCi0JICovCi0KLQlwdHIgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgZHBjbS0+cGNtX2J1Zl9wb3MgICUgZHBjbS0+cGNtX3NpemUpOwotCVZQUklOVEsyKCJwbGF5YmFja19wb2ludGVyPSUwNGxkXG4iLCAodW5zaWduZWQgbG9uZylwdHIpOworCXB0ciA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBkcGNtLT5wY21fYnVmX2RtYV9vZnMgICUgZHBjbS0+YnVmZmVyX2J5dGVzKTsKKwkvKiBWUFJJTlRLMihLRVJOX0lORk8gInBsYXliYWNrX3BvaW50ZXI9eCUwNGx4XG4iLCAodW5zaWduZWQgbG9uZylwdHIpOyAqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTg5OCwxMiArOTE1LDEyIEBACiAJLyogb24gY2FyZHMgd2l0aG91dCBTUkMsIG11c3QgcXVlcnkgYXQgdmFsaWQgcmF0ZSwKIAkqIG1heWJlIHNldCBieSBleHRlcm5hbCBzeW5jCiAJKi8KLQllcnIgPSBocGlfbWl4ZXJfZ2V0X2NvbnRyb2woc3MsIGFzaWhwaS0+aF9taXhlciwKKwllcnIgPSBocGlfbWl4ZXJfZ2V0X2NvbnRyb2woYXNpaHBpLT5oX21peGVyLAogCQkJCSAgSFBJX1NPVVJDRU5PREVfQ0xPQ0tfU09VUkNFLCAwLCAwLCAwLAogCQkJCSAgSFBJX0NPTlRST0xfU0FNUExFQ0xPQ0ssICZoX2NvbnRyb2wpOwogCiAJaWYgKCFlcnIpCi0JCWVyciA9IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NhbXBsZV9yYXRlKHNzLCBoX2NvbnRyb2wsCisJCWVyciA9IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NhbXBsZV9yYXRlKGhfY29udHJvbCwKIAkJCQkmc2FtcGxlX3JhdGUpOwogCiAJZm9yIChmb3JtYXQgPSBIUElfRk9STUFUX1BDTThfVU5TSUdORUQ7CkBAIC05MTEsNyArOTI4LDcgQEAKIAkJZXJyID0gaHBpX2Zvcm1hdF9jcmVhdGUoJmhwaV9mb3JtYXQsCiAJCQkJCTIsIGZvcm1hdCwgc2FtcGxlX3JhdGUsIDEyODAwMCwgMCk7CiAJCWlmICghZXJyKQotCQkJZXJyID0gaHBpX291dHN0cmVhbV9xdWVyeV9mb3JtYXQoc3MsIGhfc3RyZWFtLAorCQkJZXJyID0gaHBpX291dHN0cmVhbV9xdWVyeV9mb3JtYXQoaF9zdHJlYW0sCiAJCQkJCQkJJmhwaV9mb3JtYXQpOwogCQlpZiAoIWVyciAmJiAoaHBpX3RvX2Fsc2FfZm9ybWF0c1tmb3JtYXRdICE9IC0xKSkKIAkJCXBjbWh3LT5mb3JtYXRzIHw9CkBAIC05NDIsNyArOTU5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAllcnIgPQotCSAgICBocGlfb3V0c3RyZWFtX29wZW4oc3MsIGNhcmQtPmFkYXB0ZXJfaW5kZXgsCisJICAgIGhwaV9vdXRzdHJlYW1fb3BlbihjYXJkLT5hZGFwdGVyX2luZGV4LAogCQkJICAgICAgc3Vic3RyZWFtLT5udW1iZXIsICZkcGNtLT5oX3N0cmVhbSk7CiAJaHBpX2hhbmRsZV9lcnJvcihlcnIpOwogCWlmIChlcnIpCkBAIC05OTgsMTEgKzEwMTUsMTEgQEAKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUsCiAJCWNhcmQtPnVwZGF0ZV9pbnRlcnZhbF9mcmFtZXMpOwogCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFLAotCQljYXJkLT51cGRhdGVfaW50ZXJ2YWxfZnJhbWVzICogNCwgVUlOVF9NQVgpOworCQljYXJkLT51cGRhdGVfaW50ZXJ2YWxfZnJhbWVzICogMiwgVUlOVF9NQVgpOwogCiAJc25kX3BjbV9zZXRfc3luYyhzdWJzdHJlYW0pOwogCi0Jc25kX3ByaW50ZChLRVJOX0lORk8gInBsYXliYWNrIG9wZW5cbiIpOworCVZQUklOVEsxKEtFUk5fSU5GTyAicGxheWJhY2sgb3BlblxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMTIsOCArMTAyOSw4IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpX3BjbSAqZHBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCWhwaV9oYW5kbGVfZXJyb3IoaHBpX291dHN0cmVhbV9jbG9zZShzcywgZHBjbS0+aF9zdHJlYW0pKTsKLQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAicGxheWJhY2sgY2xvc2VcbiIpOworCWhwaV9oYW5kbGVfZXJyb3IoaHBpX291dHN0cmVhbV9jbG9zZShkcGNtLT5oX3N0cmVhbSkpOworCVZQUklOVEsxKEtFUk5fSU5GTyAicGxheWJhY2sgY2xvc2VcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDM2LDkgKzEwNTMsMTEgQEAKIAlWUFJJTlRLMihLRVJOX0RFQlVHICJwbGF5YmFjayBjb3B5JWQgJXUgYnl0ZXNcbiIsCiAJCQlzdWJzdHJlYW0tPm51bWJlciwgbGVuKTsKIAotCWhwaV9oYW5kbGVfZXJyb3IoaHBpX291dHN0cmVhbV93cml0ZV9idWYoc3MsIGRwY20tPmhfc3RyZWFtLAorCWhwaV9oYW5kbGVfZXJyb3IoaHBpX291dHN0cmVhbV93cml0ZV9idWYoZHBjbS0+aF9zdHJlYW0sCiAJCQkJcnVudGltZS0+ZG1hX2FyZWEsIGxlbiwgJmRwY20tPmZvcm1hdCkpOwogCisJZHBjbS0+cGNtX2J1Zl9ob3N0X3J3X29mcyA9IGRwY20tPnBjbV9idWZfaG9zdF9yd19vZnMgKyBsZW47CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA1MiwxMCArMTA3MSwxMCBAQAogCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCiAJbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIGNvdW50KTsKLQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAicGxheWJhY2sgc2lsZW5jZSAgJXUgYnl0ZXNcbiIsIGxlbik7CisJVlBSSU5USzEoS0VSTl9JTkZPICJwbGF5YmFjayBzaWxlbmNlICAldSBieXRlc1xuIiwgbGVuKTsKIAogCW1lbXNldChydW50aW1lLT5kbWFfYXJlYSwgMCwgbGVuKTsKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9vdXRzdHJlYW1fd3JpdGVfYnVmKHNzLCBkcGNtLT5oX3N0cmVhbSwKKwlocGlfaGFuZGxlX2Vycm9yKGhwaV9vdXRzdHJlYW1fd3JpdGVfYnVmKGRwY20tPmhfc3RyZWFtLAogCQkJCXJ1bnRpbWUtPmRtYV9hcmVhLCBsZW4sICZkcGNtLT5mb3JtYXQpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOTEsMTMgKzExMTAsMTMgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCi0JVlBSSU5USzIoImNhcHR1cmUgcG9pbnRlciAlZD0lZFxuIiwKLQkJCXN1YnN0cmVhbS0+bnVtYmVyLCBkcGNtLT5wY21fYnVmX3Bvcyk7Ci0JLyogTk9URSBVbmxpa2UgcGxheWJhY2sgY2FuJ3QgdXNlIGFjdHVhbCBkd1NhbXBsZXNQbGF5ZWQKKwlWUFJJTlRLMihLRVJOX0lORk8gImNhcHR1cmUgcG9pbnRlciAlZD0lZFxuIiwKKwkJCXN1YnN0cmVhbS0+bnVtYmVyLCBkcGNtLT5wY21fYnVmX2RtYV9vZnMpOworCS8qIE5PVEUgVW5saWtlIHBsYXliYWNrIGNhbid0IHVzZSBhY3R1YWwgc2FtcGxlc19wbGF5ZWQKIAkJZm9yIHRoZSBjYXB0dXJlIHBvc2l0aW9uLCBiZWNhdXNlIHRob3NlIHNhbXBsZXMgYXJlbid0IHlldCBpbgogCQl0aGUgbG9jYWwgYnVmZmVyIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4KIAkqLwotCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgZHBjbS0+cGNtX2J1Zl9wb3MgJSBkcGNtLT5wY21fc2l6ZSk7CisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBkcGNtLT5wY21fYnVmX2RtYV9vZnMgJSBkcGNtLT5idWZmZXJfYnl0ZXMpOwogfQogCiBzdGF0aWMgaW50IHNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtMTExMSwxMSArMTEzMCwxMiBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9jYXJkX2FzaWhwaV9wY20gKmRwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9pbnN0cmVhbV9yZXNldChzcywgZHBjbS0+aF9zdHJlYW0pKTsKLQlkcGNtLT5wY21faXJxX3BvcyA9IDA7Ci0JZHBjbS0+cGNtX2J1Zl9wb3MgPSAwOworCWhwaV9oYW5kbGVfZXJyb3IoaHBpX2luc3RyZWFtX3Jlc2V0KGRwY20tPmhfc3RyZWFtKSk7CisJZHBjbS0+cGNtX2J1Zl9ob3N0X3J3X29mcyA9IDA7CisJZHBjbS0+cGNtX2J1Zl9kbWFfb2ZzID0gMDsKKwlkcGNtLT5wY21fYnVmX2VsYXBzZWRfZG1hX29mcyA9IDA7CiAKLQlzbmRfcHJpbnRkKCJjYXB0dXJlIHByZXBhcmUgJWRcbiIsIHN1YnN0cmVhbS0+bnVtYmVyKTsKKwlWUFJJTlRLMSgiQ2FwdHVyZSBQcmVwYXJlICVkXG4iLCBzdWJzdHJlYW0tPm51bWJlcik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMzMsMTIgKzExNTMsMTIgQEAKIAogCS8qIG9uIGNhcmRzIHdpdGhvdXQgU1JDLCBtdXN0IHF1ZXJ5IGF0IHZhbGlkIHJhdGUsCiAJCW1heWJlIHNldCBieSBleHRlcm5hbCBzeW5jICovCi0JZXJyID0gaHBpX21peGVyX2dldF9jb250cm9sKHNzLCBhc2locGktPmhfbWl4ZXIsCisJZXJyID0gaHBpX21peGVyX2dldF9jb250cm9sKGFzaWhwaS0+aF9taXhlciwKIAkJCQkgIEhQSV9TT1VSQ0VOT0RFX0NMT0NLX1NPVVJDRSwgMCwgMCwgMCwKIAkJCQkgIEhQSV9DT05UUk9MX1NBTVBMRUNMT0NLLCAmaF9jb250cm9sKTsKIAogCWlmICghZXJyKQotCQllcnIgPSBocGlfc2FtcGxlX2Nsb2NrX2dldF9zYW1wbGVfcmF0ZShzcywgaF9jb250cm9sLAorCQllcnIgPSBocGlfc2FtcGxlX2Nsb2NrX2dldF9zYW1wbGVfcmF0ZShoX2NvbnRyb2wsCiAJCQkmc2FtcGxlX3JhdGUpOwogCiAJZm9yIChmb3JtYXQgPSBIUElfRk9STUFUX1BDTThfVU5TSUdORUQ7CkBAIC0xMTQ3LDcgKzExNjcsNyBAQAogCQllcnIgPSBocGlfZm9ybWF0X2NyZWF0ZSgmaHBpX2Zvcm1hdCwgMiwgZm9ybWF0LAogCQkJCXNhbXBsZV9yYXRlLCAxMjgwMDAsIDApOwogCQlpZiAoIWVycikKLQkJCWVyciA9IGhwaV9pbnN0cmVhbV9xdWVyeV9mb3JtYXQoc3MsIGhfc3RyZWFtLAorCQkJZXJyID0gaHBpX2luc3RyZWFtX3F1ZXJ5X2Zvcm1hdChoX3N0cmVhbSwKIAkJCQkJICAgICZocGlfZm9ybWF0KTsKIAkJaWYgKCFlcnIpCiAJCQlwY21ody0+Zm9ybWF0cyB8PQpAQCAtMTE3OCwxMSArMTE5OCwxMSBAQAogCWlmIChkcGNtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc25kX3ByaW50ZCgiaHBpX2luc3RyZWFtX29wZW4gYWRhcHRlciAlZCBzdHJlYW0gJWRcbiIsCisJVlBSSU5USzEoImhwaV9pbnN0cmVhbV9vcGVuIGFkYXB0ZXIgJWQgc3RyZWFtICVkXG4iLAogCQkgICBjYXJkLT5hZGFwdGVyX2luZGV4LCBzdWJzdHJlYW0tPm51bWJlcik7CiAKIAllcnIgPSBocGlfaGFuZGxlX2Vycm9yKAotCSAgICBocGlfaW5zdHJlYW1fb3BlbihzcywgY2FyZC0+YWRhcHRlcl9pbmRleCwKKwkgICAgaHBpX2luc3RyZWFtX29wZW4oY2FyZC0+YWRhcHRlcl9pbmRleCwKIAkJCSAgICAgc3Vic3RyZWFtLT5udW1iZXIsICZkcGNtLT5oX3N0cmVhbSkpOwogCWlmIChlcnIpCiAJCWtmcmVlKGRwY20pOwpAQCAtMTIwOSw2ICsxMjI5LDkgQEAKIAkJc25kX2NhcmRfYXNpaHBpX2NhcHR1cmUuaW5mbyB8PSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKIAkJCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQ7CiAKKwlpZiAoY2FyZC0+c3VwcG9ydF9ncm91cGluZykKKwkJc25kX2NhcmRfYXNpaHBpX2NhcHR1cmUuaW5mbyB8PSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUOworCiAJcnVudGltZS0+aHcgPSBzbmRfY2FyZF9hc2locGlfY2FwdHVyZTsKIAogCWlmIChjYXJkLT5zdXBwb3J0X21tYXApCkBAIC0xMjMxLDcgKzEyNTQsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcGNtID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9pbnN0cmVhbV9jbG9zZShzcywgZHBjbS0+aF9zdHJlYW0pKTsKKwlocGlfaGFuZGxlX2Vycm9yKGhwaV9pbnN0cmVhbV9jbG9zZShkcGNtLT5oX3N0cmVhbSkpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjQxLDE4ICsxMjY0LDE3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpX3BjbSAqZHBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQl1MzIgZGF0YV9zaXplOworCXUzMiBsZW47CiAKLQlkYXRhX3NpemUgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpOworCWxlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCk7CiAKLQlWUFJJTlRLMigiY2FwdHVyZSBjb3B5JWQgJWQgYnl0ZXNcbiIsIHN1YnN0cmVhbS0+bnVtYmVyLCBkYXRhX3NpemUpOwotCWhwaV9oYW5kbGVfZXJyb3IoaHBpX2luc3RyZWFtX3JlYWRfYnVmKHNzLCBkcGNtLT5oX3N0cmVhbSwKLQkJCQlydW50aW1lLT5kbWFfYXJlYSwgZGF0YV9zaXplKSk7CisJVlBSSU5USzIoS0VSTl9JTkZPICJjYXB0dXJlIGNvcHklZCAlZCBieXRlc1xuIiwgc3Vic3RyZWFtLT5udW1iZXIsIGxlbik7CisJaHBpX2hhbmRsZV9lcnJvcihocGlfaW5zdHJlYW1fcmVhZF9idWYoZHBjbS0+aF9zdHJlYW0sCisJCQkJcnVudGltZS0+ZG1hX2FyZWEsIGxlbikpOwogCi0JLyogVXNlZCBieSBjYXB0dXJlX3BvaW50ZXIgKi8KLQlkcGNtLT5wY21faXJxX3BvcyA9IGRwY20tPnBjbV9pcnFfcG9zICsgZGF0YV9zaXplOworCWRwY20tPnBjbV9idWZfaG9zdF9yd19vZnMgPSBkcGNtLT5wY21fYnVmX2hvc3Rfcndfb2ZzICsgbGVuOwogCi0JaWYgKGNvcHlfdG9fdXNlcihkc3QsIHJ1bnRpbWUtPmRtYV9hcmVhLCBkYXRhX3NpemUpKQorCWlmIChjb3B5X3RvX3VzZXIoZHN0LCBydW50aW1lLT5kbWFfYXJlYSwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKQEAgLTEyODcsNyArMTMwOSw3IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyOwogCi0JZXJyID0gc25kX3BjbV9uZXcoYXNpaHBpLT5jYXJkLCAiYXNpaHBpIFBDTSIsIGRldmljZSwKKwllcnIgPSBzbmRfcGNtX25ldyhhc2locGktPmNhcmQsICJBc2locGkgUENNIiwgZGV2aWNlLAogCQkJIGFzaWhwaS0+bnVtX291dHN0cmVhbXMsIGFzaWhwaS0+bnVtX2luc3RyZWFtcywKIAkJCSAmcGNtKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEzMDcsNyArMTMyOSw3IEBACiAKIAlwY20tPnByaXZhdGVfZGF0YSA9IGFzaWhwaTsKIAlwY20tPmluZm9fZmxhZ3MgPSAwOwotCXN0cmNweShwY20tPm5hbWUsICJhc2locGkgUENNIik7CisJc3RyY3B5KHBjbS0+bmFtZSwgIkFzaWhwaSBQQ00iKTsKIAogCS8qPyBkbyB3ZSB3YW50IHRvIGVtdWxhdGUgTU1BUCBmb3Igbm9uLUJCTSBjYXJkcz8KIAlKYWNrIGRvZXNuJ3Qgd29yayB3aXRoIEFMU0FzIE1NQVAgZW11bGF0aW9uIC0gV0hZIE5PVD8gKi8KQEAgLTEzMzAsOCArMTM1Miw3IEBACiAJY2hhciBuYW1lWzQ0XTsgLyogY29waWVkIHRvIHNuZF9jdGxfZWxlbV9pZC5uYW1lWzQ0XTsgKi8KIH07CiAKLXN0YXRpYyBjaGFyICphc2locGlfdHVuZXJfYmFuZF9uYW1lc1tdID0KLXsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXNpaHBpX3R1bmVyX2JhbmRfbmFtZXNbXSA9IHsKIAkiaW52YWxpZCIsCiAJIkFNIiwKIAkiRk0gbW9ubyIsCkBAIC0xMzQ5LDcwICsxMzcwLDM2IEBACiAJCShIUElfVFVORVJfQkFORF9MQVNUKzEpKSwKIAlhc3NlcnRfdHVuZXJfYmFuZF9uYW1lc19zaXplKTsKIAotI2lmIEFTSV9TVFlMRV9OQU1FUwotc3RhdGljIGNoYXIgKmFzaWhwaV9zcmNfbmFtZXNbXSA9Ci17CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFzaWhwaV9zcmNfbmFtZXNbXSA9IHsKIAkibm8gc291cmNlIiwKLQkib3V0c3RyZWFtIiwKLQkibGluZV9pbiIsCi0JImFlc19pbiIsCi0JInR1bmVyIiwKKwkiUENNIiwKKwkiTGluZSIsCisJIkRpZ2l0YWwiLAorCSJUdW5lciIsCiAJIlJGIiwKLQkiY2xvY2siLAotCSJiaXRzdHIiLAotCSJtaWMiLAotCSJjb2JyYW5ldCIsCi0JImFuYWxvZ19pbiIsCi0JImFkYXB0ZXIiLAorCSJDbG9jayIsCisJIkJpdHN0cmVhbSIsCisJIk1pY3JvcGhvbmUiLAorCSJDb2JyYW5ldCIsCisJIkFuYWxvZyIsCisJIkFkYXB0ZXIiLAogfTsKLSNlbHNlCi1zdGF0aWMgY2hhciAqYXNpaHBpX3NyY19uYW1lc1tdID0KLXsKLQkibm8gc291cmNlIiwKLQkiUENNIHBsYXliYWNrIiwKLQkibGluZSBpbiIsCi0JImRpZ2l0YWwgaW4iLAotCSJ0dW5lciIsCi0JIlJGIiwKLQkiY2xvY2siLAotCSJiaXRzdHJlYW0iLAotCSJtaWMiLAotCSJjb2JyYW5ldCBpbiIsCi0JImFuYWxvZyBpbiIsCi0JImFkYXB0ZXIiLAotfTsKLSNlbmRpZgogCiBjb21waWxlX3RpbWVfYXNzZXJ0KAogCShBUlJBWV9TSVpFKGFzaWhwaV9zcmNfbmFtZXMpID09CiAJCShIUElfU09VUkNFTk9ERV9MQVNUX0lOREVYLUhQSV9TT1VSQ0VOT0RFX05PTkUrMSkpLAogCWFzc2VydF9zcmNfbmFtZXNfc2l6ZSk7CiAKLSNpZiBBU0lfU1RZTEVfTkFNRVMKLXN0YXRpYyBjaGFyICphc2locGlfZHN0X25hbWVzW10gPQoteworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhc2locGlfZHN0X25hbWVzW10gPSB7CiAJIm5vIGRlc3RpbmF0aW9uIiwKLQkiaW5zdHJlYW0iLAotCSJsaW5lX291dCIsCi0JImFlc19vdXQiLAorCSJQQ00iLAorCSJMaW5lIiwKKwkiRGlnaXRhbCIsCiAJIlJGIiwKLQkic3BlYWtlciIgLAotCSJjb2JyYW5ldCIsCi0JImFuYWxvZ19vdXQiLAorCSJTcGVha2VyIiwKKwkiQ29icmFuZXQgT3V0IiwKKwkiQW5hbG9nIgogfTsKLSNlbHNlCi1zdGF0aWMgY2hhciAqYXNpaHBpX2RzdF9uYW1lc1tdID0KLXsKLQkibm8gZGVzdGluYXRpb24iLAotCSJQQ00gY2FwdHVyZSIsCi0JImxpbmUgb3V0IiwKLQkiZGlnaXRhbCBvdXQiLAotCSJSRiIsCi0JInNwZWFrZXIiLAotCSJjb2JyYW5ldCBvdXQiLAotCSJhbmFsb2cgb3V0IgotfTsKLSNlbmRpZgogCiBjb21waWxlX3RpbWVfYXNzZXJ0KAogCShBUlJBWV9TSVpFKGFzaWhwaV9kc3RfbmFtZXMpID09CkBAIC0xNDM4LDMwICsxNDI1LDQ1IEBACiAJCQkJc3RydWN0IGhwaV9jb250cm9sICpocGlfY3RsLAogCQkJCWNoYXIgKm5hbWUpCiB7CisJY2hhciAqZGlyID0gIiI7CiAJbWVtc2V0KHNuZF9jb250cm9sLCAwLCBzaXplb2YoKnNuZF9jb250cm9sKSk7CiAJc25kX2NvbnRyb2wtPm5hbWUgPSBocGlfY3RsLT5uYW1lOwogCXNuZF9jb250cm9sLT5wcml2YXRlX3ZhbHVlID0gaHBpX2N0bC0+aF9jb250cm9sOwogCXNuZF9jb250cm9sLT5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSOwogCXNuZF9jb250cm9sLT5pbmRleCA9IDA7CiAKKwlpZiAoaHBpX2N0bC0+ZHN0X25vZGVfdHlwZSArIEhQSV9ERVNUTk9ERV9OT05FID09IEhQSV9ERVNUTk9ERV9JU1RSRUFNKQorCQlkaXIgPSAiQ2FwdHVyZSAiOyAgLyogT24gb3IgdG93YXJkcyBhIFBDTSBjYXB0dXJlIGRlc3RpbmF0aW9uKi8KKwllbHNlIGlmICgoaHBpX2N0bC0+c3JjX25vZGVfdHlwZSArIEhQSV9TT1VSQ0VOT0RFX05PTkUgIT0gSFBJX1NPVVJDRU5PREVfT1NUUkVBTSkgJiYKKwkJKCFocGlfY3RsLT5kc3Rfbm9kZV90eXBlKSkKKwkJZGlyID0gIkNhcHR1cmUgIjsgLyogT24gYSBzb3VyY2Ugbm9kZSB0aGF0IGlzIG5vdCBQQ00gcGxheWJhY2sgKi8KKwllbHNlIGlmIChocGlfY3RsLT5zcmNfbm9kZV90eXBlICYmCisJCShocGlfY3RsLT5zcmNfbm9kZV90eXBlICsgSFBJX1NPVVJDRU5PREVfTk9ORSAhPSBIUElfU09VUkNFTk9ERV9PU1RSRUFNKSAmJgorCQkoaHBpX2N0bC0+ZHN0X25vZGVfdHlwZSkpCisJCWRpciA9ICJNb25pdG9yIFBsYXliYWNrICI7IC8qIEJldHdlZW4gYW4gaW5wdXQgYW5kIGFuIG91dHB1dCAqLworCWVsc2UKKwkJZGlyID0gIlBsYXliYWNrICI7IC8qIFBDTSBQbGF5YmFjayBzb3VyY2UsIG9yICBvdXRwdXQgbm9kZSAqLworCiAJaWYgKGhwaV9jdGwtPnNyY19ub2RlX3R5cGUgJiYgaHBpX2N0bC0+ZHN0X25vZGVfdHlwZSkKLQkJc3ByaW50ZihocGlfY3RsLT5uYW1lLCAiJXMlZCB0byAlcyVkICVzIiwKKwkJc3ByaW50ZihocGlfY3RsLT5uYW1lLCAiJXMlZCAlcyVkICVzJXMiLAogCQkJYXNpaHBpX3NyY19uYW1lc1tocGlfY3RsLT5zcmNfbm9kZV90eXBlXSwKIAkJCWhwaV9jdGwtPnNyY19ub2RlX2luZGV4LAogCQkJYXNpaHBpX2RzdF9uYW1lc1tocGlfY3RsLT5kc3Rfbm9kZV90eXBlXSwKIAkJCWhwaV9jdGwtPmRzdF9ub2RlX2luZGV4LAotCQkJbmFtZSk7CisJCQlkaXIsIG5hbWUpOwogCWVsc2UgaWYgKGhwaV9jdGwtPmRzdF9ub2RlX3R5cGUpIHsKLQkJc3ByaW50ZihocGlfY3RsLT5uYW1lLCAiJXMlZCAlcyIsCisJCXNwcmludGYoaHBpX2N0bC0+bmFtZSwgIiVzICVkICVzJXMiLAogCQlhc2locGlfZHN0X25hbWVzW2hwaV9jdGwtPmRzdF9ub2RlX3R5cGVdLAogCQlocGlfY3RsLT5kc3Rfbm9kZV9pbmRleCwKLQkJbmFtZSk7CisJCWRpciwgbmFtZSk7CiAJfSBlbHNlIHsKLQkJc3ByaW50ZihocGlfY3RsLT5uYW1lLCAiJXMlZCAlcyIsCisJCXNwcmludGYoaHBpX2N0bC0+bmFtZSwgIiVzICVkICVzJXMiLAogCQlhc2locGlfc3JjX25hbWVzW2hwaV9jdGwtPnNyY19ub2RlX3R5cGVdLAogCQlocGlfY3RsLT5zcmNfbm9kZV9pbmRleCwKLQkJbmFtZSk7CisJCWRpciwgbmFtZSk7CiAJfQorCS8qIHByaW50ayhLRVJOX0lORk8gIkFkZGluZyAlcyAlZCB0byAlZCAiLCAgaHBpX2N0bC0+bmFtZSwKKwkJaHBpX2N0bC0+d1NyY05vZGVUeXBlLCBocGlfY3RsLT53RHN0Tm9kZVR5cGUpOyAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQ3OCw3ICsxNDgwLDcgQEAKIAlzaG9ydCBtYXhfZ2Fpbl9tQjsKIAlzaG9ydCBzdGVwX2dhaW5fbUI7CiAKLQllcnIgPSBocGlfdm9sdW1lX3F1ZXJ5X3JhbmdlKHNzLCBoX2NvbnRyb2wsCisJZXJyID0gaHBpX3ZvbHVtZV9xdWVyeV9yYW5nZShoX2NvbnRyb2wsCiAJCQkmbWluX2dhaW5fbUIsICZtYXhfZ2Fpbl9tQiwgJnN0ZXBfZ2Fpbl9tQik7CiAJaWYgKGVycikgewogCQltYXhfZ2Fpbl9tQiA9IDA7CkBAIC0xNTAwLDcgKzE1MDIsNyBAQAogCXUzMiBoX2NvbnRyb2wgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlzaG9ydCBhbl9nYWluX21CW0hQSV9NQVhfQ0hBTk5FTFNdOwogCi0JaHBpX2hhbmRsZV9lcnJvcihocGlfdm9sdW1lX2dldF9nYWluKHNzLCBoX2NvbnRyb2wsIGFuX2dhaW5fbUIpKTsKKwlocGlfaGFuZGxlX2Vycm9yKGhwaV92b2x1bWVfZ2V0X2dhaW4oaF9jb250cm9sLCBhbl9nYWluX21CKSk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBhbl9nYWluX21CWzBdIC8gVk9MX1NURVBfbUI7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBhbl9nYWluX21CWzFdIC8gVk9MX1NURVBfbUI7CiAKQEAgLTE1MjIsNyArMTUyNCw3IEBACiAJICAgYXNpaHBpLT5taXhlcl92b2x1bWVbYWRkcl1bMV0gIT0gcmlnaHQ7CiAJICovCiAJY2hhbmdlID0gMTsKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV92b2x1bWVfc2V0X2dhaW4oc3MsIGhfY29udHJvbCwgYW5fZ2Fpbl9tQikpOworCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3ZvbHVtZV9zZXRfZ2FpbihoX2NvbnRyb2wsIGFuX2dhaW5fbUIpKTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCkBAIC0xNTM0LDcgKzE1MzYsNyBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGFzaWhwaS0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfY29udHJvbDsKIAotCWFzaWhwaV9jdGxfaW5pdCgmc25kX2NvbnRyb2wsIGhwaV9jdGwsICJ2b2x1bWUiKTsKKwlhc2locGlfY3RsX2luaXQoJnNuZF9jb250cm9sLCBocGlfY3RsLCAiVm9sdW1lIik7CiAJc25kX2NvbnRyb2wuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CiAJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEOwogCXNuZF9jb250cm9sLmluZm8gPSBzbmRfYXNpaHBpX3ZvbHVtZV9pbmZvOwpAQCAtMTU1OCw3ICsxNTYwLDcgQEAKIAlzaG9ydCBzdGVwX2dhaW5fbUI7CiAKIAllcnIgPQotCSAgICBocGlfbGV2ZWxfcXVlcnlfcmFuZ2Uoc3MsIGhfY29udHJvbCwgJm1pbl9nYWluX21CLAorCSAgICBocGlfbGV2ZWxfcXVlcnlfcmFuZ2UoaF9jb250cm9sLCAmbWluX2dhaW5fbUIsCiAJCQkgICAgICAgJm1heF9nYWluX21CLCAmc3RlcF9nYWluX21CKTsKIAlpZiAoZXJyKSB7CiAJCW1heF9nYWluX21CID0gMjQwMDsKQEAgLTE1ODAsNyArMTU4Miw3IEBACiAJdTMyIGhfY29udHJvbCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCXNob3J0IGFuX2dhaW5fbUJbSFBJX01BWF9DSEFOTkVMU107CiAKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9sZXZlbF9nZXRfZ2FpbihzcywgaF9jb250cm9sLCBhbl9nYWluX21CKSk7CisJaHBpX2hhbmRsZV9lcnJvcihocGlfbGV2ZWxfZ2V0X2dhaW4oaF9jb250cm9sLCBhbl9nYWluX21CKSk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQogCSAgICBhbl9nYWluX21CWzBdIC8gSFBJX1VOSVRTX1BFUl9kQjsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9CkBAIC0xNjA0LDcgKzE2MDYsNyBAQAogCSAgIGFzaWhwaS0+bWl4ZXJfbGV2ZWxbYWRkcl1bMV0gIT0gcmlnaHQ7CiAJICovCiAJY2hhbmdlID0gMTsKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9sZXZlbF9zZXRfZ2FpbihzcywgaF9jb250cm9sLCBhbl9nYWluX21CKSk7CisJaHBpX2hhbmRsZV9lcnJvcihocGlfbGV2ZWxfc2V0X2dhaW4oaF9jb250cm9sLCBhbl9nYWluX21CKSk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIApAQCAtMTYxNyw3ICsxNjE5LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfY29udHJvbDsKIAogCS8qIGNhbid0IHVzZSAndm9sdW1lJyBjb3Mgc29tZSBub2RlcyBoYXZlIHZvbHVtZSBhcyB3ZWxsICovCi0JYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgImxldmVsIik7CisJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIkxldmVsIik7CiAJc25kX2NvbnRyb2wuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CiAJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEOwogCXNuZF9jb250cm9sLmluZm8gPSBzbmRfYXNpaHBpX2xldmVsX2luZm87CkBAIC0xNjMzLDEyICsxNjM1LDggQEAKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBBRVNFQlUgZm9ybWF0ICovCi1zdGF0aWMgY2hhciAqYXNpaHBpX2Flc2VidV9mb3JtYXRfbmFtZXNbXSA9Ci17Ci0JIk4vQSIsCi0JIlMvUERJRiIsCi0JIkFFUy9FQlUiLAotfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXNpaHBpX2Flc2VidV9mb3JtYXRfbmFtZXNbXSA9IHsKKwkiTi9BIiwgIlMvUERJRiIsICJBRVMvRUJVIiB9OwogCiBzdGF0aWMgaW50IHNuZF9hc2locGlfYWVzZWJ1X2Zvcm1hdF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKQEAgLTE2NTksMTIgKzE2NTcsMTIgQEAKIAogc3RhdGljIGludCBzbmRfYXNpaHBpX2Flc2VidV9mb3JtYXRfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wsCi0JCQl1MTYgKCpmdW5jKShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKiwgdTMyLCB1MTYgKikpCisJCQl1MTYgKCpmdW5jKSh1MzIsIHUxNiAqKSkKIHsKIAl1MzIgaF9jb250cm9sID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdTE2IHNvdXJjZSwgZXJyOwogCi0JZXJyID0gZnVuYyhzcywgaF9jb250cm9sLCAmc291cmNlKTsKKwllcnIgPSBmdW5jKGhfY29udHJvbCwgJnNvdXJjZSk7CiAKIAkvKiBkZWZhdWx0IHRvIE4vQSAqLwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOwpAQCAtMTY4MSw3ICsxNjc5LDcgQEAKIAogc3RhdGljIGludCBzbmRfYXNpaHBpX2Flc2VidV9mb3JtYXRfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wsCi0JCQkgdTE2ICgqZnVuYykoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICosIHUzMiwgdTE2KSkKKwkJCSB1MTYgKCpmdW5jKSh1MzIsIHUxNikpCiB7CiAJdTMyIGhfY29udHJvbCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCkBAIC0xNjkzLDcgKzE2OTEsNyBAQAogCWlmICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID09IDIpCiAJCXNvdXJjZSA9IEhQSV9BRVNFQlVfRk9STUFUX0FFU0VCVTsKIAotCWlmIChmdW5jKHNzLCBoX2NvbnRyb2wsIHNvdXJjZSkgIT0gMCkKKwlpZiAoZnVuYyhoX2NvbnRyb2wsIHNvdXJjZSkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMTsKQEAgLTE3MDIsMTMgKzE3MDAsMTMgQEAKIHN0YXRpYyBpbnQgc25kX2FzaWhwaV9hZXNlYnVfcnhfZm9ybWF0X2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpIHsKIAlyZXR1cm4gc25kX2FzaWhwaV9hZXNlYnVfZm9ybWF0X2dldChrY29udHJvbCwgdWNvbnRyb2wsCi0JCQkJCUhQSV9BRVNFQlVfX3JlY2VpdmVyX2dldF9mb3JtYXQpOworCQkJCQlocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF9mb3JtYXQpOwogfQogCiBzdGF0aWMgaW50IHNuZF9hc2locGlfYWVzZWJ1X3J4X2Zvcm1hdF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKSB7CiAJcmV0dXJuIHNuZF9hc2locGlfYWVzZWJ1X2Zvcm1hdF9wdXQoa2NvbnRyb2wsIHVjb250cm9sLAotCQkJCQlIUElfQUVTRUJVX19yZWNlaXZlcl9zZXRfZm9ybWF0KTsKKwkJCQkJaHBpX2Flc2VidV9yZWNlaXZlcl9zZXRfZm9ybWF0KTsKIH0KIAogc3RhdGljIGludCBzbmRfYXNpaHBpX2Flc2VidV9yeHN0YXR1c19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMTczMCw4ICsxNzI4LDggQEAKIAl1MzIgaF9jb250cm9sID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdTE2IHN0YXR1czsKIAotCWhwaV9oYW5kbGVfZXJyb3IoSFBJX0FFU0VCVV9fcmVjZWl2ZXJfZ2V0X2Vycm9yX3N0YXR1cygKLQkJCQlzcywgaF9jb250cm9sLCAmc3RhdHVzKSk7CisJaHBpX2hhbmRsZV9lcnJvcihocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF9lcnJvcl9zdGF0dXMoCisJCQkJCSBoX2NvbnRyb2wsICZzdGF0dXMpKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHN0YXR1czsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NDIsNyArMTc0MCw3IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gYXNpaHBpLT5jYXJkOwogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9jb250cm9sOwogCi0JYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgImZvcm1hdCIpOworCWFzaWhwaV9jdGxfaW5pdCgmc25kX2NvbnRyb2wsIGhwaV9jdGwsICJGb3JtYXQiKTsKIAlzbmRfY29udHJvbC5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFOwogCXNuZF9jb250cm9sLmluZm8gPSBzbmRfYXNpaHBpX2Flc2VidV9mb3JtYXRfaW5mbzsKIAlzbmRfY29udHJvbC5nZXQgPSBzbmRfYXNpaHBpX2Flc2VidV9yeF9mb3JtYXRfZ2V0OwpAQCAtMTc1Miw3ICsxNzUwLDcgQEAKIAlpZiAoY3RsX2FkZChjYXJkLCAmc25kX2NvbnRyb2wsIGFzaWhwaSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFzaWhwaV9jdGxfaW5pdCgmc25kX2NvbnRyb2wsIGhwaV9jdGwsICJzdGF0dXMiKTsKKwlhc2locGlfY3RsX2luaXQoJnNuZF9jb250cm9sLCBocGlfY3RsLCAiU3RhdHVzIik7CiAJc25kX2NvbnRyb2wuYWNjZXNzID0KIAkgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQ7CiAJc25kX2NvbnRyb2wuaW5mbyA9IHNuZF9hc2locGlfYWVzZWJ1X3J4c3RhdHVzX2luZm87CkBAIC0xNzY0LDEzICsxNzYyLDEzIEBACiBzdGF0aWMgaW50IHNuZF9hc2locGlfYWVzZWJ1X3R4X2Zvcm1hdF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKSB7CiAJcmV0dXJuIHNuZF9hc2locGlfYWVzZWJ1X2Zvcm1hdF9nZXQoa2NvbnRyb2wsIHVjb250cm9sLAotCQkJCQlIUElfQUVTRUJVX190cmFuc21pdHRlcl9nZXRfZm9ybWF0KTsKKwkJCQkJaHBpX2Flc2VidV90cmFuc21pdHRlcl9nZXRfZm9ybWF0KTsKIH0KIAogc3RhdGljIGludCBzbmRfYXNpaHBpX2Flc2VidV90eF9mb3JtYXRfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkgewogCXJldHVybiBzbmRfYXNpaHBpX2Flc2VidV9mb3JtYXRfcHV0KGtjb250cm9sLCB1Y29udHJvbCwKLQkJCQkJSFBJX0FFU0VCVV9fdHJhbnNtaXR0ZXJfc2V0X2Zvcm1hdCk7CisJCQkJCWhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfc2V0X2Zvcm1hdCk7CiB9CiAKIApAQCAtMTc4MCw3ICsxNzc4LDcgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBhc2locGktPmNhcmQ7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2NvbnRyb2w7CiAKLQlhc2locGlfY3RsX2luaXQoJnNuZF9jb250cm9sLCBocGlfY3RsLCAiZm9ybWF0Iik7CisJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIkZvcm1hdCIpOwogCXNuZF9jb250cm9sLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEU7CiAJc25kX2NvbnRyb2wuaW5mbyA9IHNuZF9hc2locGlfYWVzZWJ1X2Zvcm1hdF9pbmZvOwogCXNuZF9jb250cm9sLmdldCA9IHNuZF9hc2locGlfYWVzZWJ1X3R4X2Zvcm1hdF9nZXQ7CkBAIC0xODA0LDcgKzE4MDIsNyBAQAogCXUxNiBnYWluX3JhbmdlWzNdOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCAzOyBpZHgrKykgewotCQllcnIgPSBocGlfdHVuZXJfcXVlcnlfZ2FpbihzcywgaF9jb250cm9sLAorCQllcnIgPSBocGlfdHVuZXJfcXVlcnlfZ2FpbihoX2NvbnRyb2wsCiAJCQkJCSAgaWR4LCAmZ2Fpbl9yYW5nZVtpZHhdKTsKIAkJaWYgKGVyciAhPSAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTE4MjcsNyArMTgyNSw3IEBACiAJdTMyIGhfY29udHJvbCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCXNob3J0IGdhaW47CiAKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV90dW5lcl9nZXRfZ2FpbihzcywgaF9jb250cm9sLCAmZ2FpbikpOworCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3R1bmVyX2dldF9nYWluKGhfY29udHJvbCwgJmdhaW4pKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGdhaW4gLyBIUElfVU5JVFNfUEVSX2RCOwogCiAJcmV0dXJuIDA7CkBAIC0xODQzLDcgKzE4NDEsNyBAQAogCXNob3J0IGdhaW47CiAKIAlnYWluID0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSAqIEhQSV9VTklUU19QRVJfZEI7Ci0JaHBpX2hhbmRsZV9lcnJvcihocGlfdHVuZXJfc2V0X2dhaW4oc3MsIGhfY29udHJvbCwgZ2FpbikpOworCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3R1bmVyX3NldF9nYWluKGhfY29udHJvbCwgZ2FpbikpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xODU3LDcgKzE4NTUsNyBAQAogCXUzMiBpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWVyciA9IGhwaV90dW5lcl9xdWVyeV9iYW5kKHNzLAorCQllcnIgPSBocGlfdHVuZXJfcXVlcnlfYmFuZCgKIAkJCQloX2NvbnRyb2wsIGksICZiYW5kX2xpc3RbaV0pOwogCQlpZiAoZXJyICE9IDApCiAJCQlicmVhazsKQEAgLTE5MTMsNyArMTkxMSw3IEBACiAJbnVtX2JhbmRzID0gYXNpaHBpX3R1bmVyX2JhbmRfcXVlcnkoa2NvbnRyb2wsIHR1bmVyX2JhbmRzLAogCQkJCUhQSV9UVU5FUl9CQU5EX0xBU1QpOwogCi0JaHBpX2hhbmRsZV9lcnJvcihocGlfdHVuZXJfZ2V0X2JhbmQoc3MsIGhfY29udHJvbCwgJmJhbmQpKTsKKwlocGlfaGFuZGxlX2Vycm9yKGhwaV90dW5lcl9nZXRfYmFuZChoX2NvbnRyb2wsICZiYW5kKSk7CiAKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gLTE7CiAJZm9yIChpZHggPSAwOyBpZHggPCBIUElfVFVORVJfQkFORF9MQVNUOyBpZHgrKykKQEAgLTE5NDAsNyArMTkzOCw3IEBACiAJCQlIUElfVFVORVJfQkFORF9MQVNUKTsKIAogCWJhbmQgPSB0dW5lcl9iYW5kc1t1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdXTsKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV90dW5lcl9zZXRfYmFuZChzcywgaF9jb250cm9sLCBiYW5kKSk7CisJaHBpX2hhbmRsZV9lcnJvcihocGlfdHVuZXJfc2V0X2JhbmQoaF9jb250cm9sLCBiYW5kKSk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE5NjUsNyArMTk2Myw3IEBACiAKIAlmb3IgKGJhbmRfaXRlciA9IDA7IGJhbmRfaXRlciA8IG51bV9iYW5kczsgYmFuZF9pdGVyKyspIHsKIAkJZm9yIChpZHggPSAwOyBpZHggPCAzOyBpZHgrKykgewotCQkJZXJyID0gaHBpX3R1bmVyX3F1ZXJ5X2ZyZXF1ZW5jeShzcywgaF9jb250cm9sLAorCQkJZXJyID0gaHBpX3R1bmVyX3F1ZXJ5X2ZyZXF1ZW5jeShoX2NvbnRyb2wsCiAJCQkJaWR4LCB0dW5lcl9iYW5kc1tiYW5kX2l0ZXJdLAogCQkJCSZ0ZW1wX2ZyZXFfcmFuZ2VbaWR4XSk7CiAJCQlpZiAoZXJyICE9IDApCkBAIC0xOTk4LDcgKzE5OTYsNyBAQAogCXUzMiBoX2NvbnRyb2wgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1MzIgZnJlcTsKIAotCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3R1bmVyX2dldF9mcmVxdWVuY3koc3MsIGhfY29udHJvbCwgJmZyZXEpKTsKKwlocGlfaGFuZGxlX2Vycm9yKGhwaV90dW5lcl9nZXRfZnJlcXVlbmN5KGhfY29udHJvbCwgJmZyZXEpKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGZyZXE7CiAKIAlyZXR1cm4gMDsKQEAgLTIwMTEsNyArMjAwOSw3IEBACiAJdTMyIGZyZXE7CiAKIAlmcmVxID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0JaHBpX2hhbmRsZV9lcnJvcihocGlfdHVuZXJfc2V0X2ZyZXF1ZW5jeShzcywgaF9jb250cm9sLCBmcmVxKSk7CisJaHBpX2hhbmRsZV9lcnJvcihocGlfdHVuZXJfc2V0X2ZyZXF1ZW5jeShoX2NvbnRyb2wsIGZyZXEpKTsKIAogCXJldHVybiAxOwogfQpAQCAtMjAyNiw4ICsyMDI0LDggQEAKIAlzbmRfY29udHJvbC5wcml2YXRlX3ZhbHVlID0gaHBpX2N0bC0+aF9jb250cm9sOwogCXNuZF9jb250cm9sLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEU7CiAKLQlpZiAoIWhwaV90dW5lcl9nZXRfZ2FpbihzcywgaHBpX2N0bC0+aF9jb250cm9sLCBOVUxMKSkgewotCQlhc2locGlfY3RsX2luaXQoJnNuZF9jb250cm9sLCBocGlfY3RsLCAiZ2FpbiIpOworCWlmICghaHBpX3R1bmVyX2dldF9nYWluKGhwaV9jdGwtPmhfY29udHJvbCwgTlVMTCkpIHsKKwkJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIkdhaW4iKTsKIAkJc25kX2NvbnRyb2wuaW5mbyA9IHNuZF9hc2locGlfdHVuZXJfZ2Fpbl9pbmZvOwogCQlzbmRfY29udHJvbC5nZXQgPSBzbmRfYXNpaHBpX3R1bmVyX2dhaW5fZ2V0OwogCQlzbmRfY29udHJvbC5wdXQgPSBzbmRfYXNpaHBpX3R1bmVyX2dhaW5fcHV0OwpAQCAtMjAzNiw3ICsyMDM0LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWFzaWhwaV9jdGxfaW5pdCgmc25kX2NvbnRyb2wsIGhwaV9jdGwsICJiYW5kIik7CisJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIkJhbmQiKTsKIAlzbmRfY29udHJvbC5pbmZvID0gc25kX2FzaWhwaV90dW5lcl9iYW5kX2luZm87CiAJc25kX2NvbnRyb2wuZ2V0ID0gc25kX2FzaWhwaV90dW5lcl9iYW5kX2dldDsKIAlzbmRfY29udHJvbC5wdXQgPSBzbmRfYXNpaHBpX3R1bmVyX2JhbmRfcHV0OwpAQCAtMjA0NCw3ICsyMDQyLDcgQEAKIAlpZiAoY3RsX2FkZChjYXJkLCAmc25kX2NvbnRyb2wsIGFzaWhwaSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFzaWhwaV9jdGxfaW5pdCgmc25kX2NvbnRyb2wsIGhwaV9jdGwsICJmcmVxIik7CisJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIkZyZXEiKTsKIAlzbmRfY29udHJvbC5pbmZvID0gc25kX2FzaWhwaV90dW5lcl9mcmVxX2luZm87CiAJc25kX2NvbnRyb2wuZ2V0ID0gc25kX2FzaWhwaV90dW5lcl9mcmVxX2dldDsKIAlzbmRfY29udHJvbC5wdXQgPSBzbmRfYXNpaHBpX3R1bmVyX2ZyZXFfcHV0OwpAQCAtMjA5NSw3ICsyMDkzLDcgQEAKIAlzaG9ydCBhbl9nYWluX21CW0hQSV9NQVhfQ0hBTk5FTFNdLCBpOwogCXUxNiBlcnI7CiAKLQllcnIgPSBocGlfbWV0ZXJfZ2V0X3BlYWsoc3MsIGhfY29udHJvbCwgYW5fZ2Fpbl9tQik7CisJZXJyID0gaHBpX21ldGVyX2dldF9wZWFrKGhfY29udHJvbCwgYW5fZ2Fpbl9tQik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSFBJX01BWF9DSEFOTkVMUzsgaSsrKSB7CiAJCWlmIChlcnIpIHsKQEAgLTIxMjAsNyArMjExOCw3IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gYXNpaHBpLT5jYXJkOwogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9jb250cm9sOwogCi0JYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIm1ldGVyIik7CisJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIk1ldGVyIik7CiAJc25kX2NvbnRyb2wuYWNjZXNzID0KIAkgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQ7CiAJc25kX2NvbnRyb2wuaW5mbyA9IHNuZF9hc2locGlfbWV0ZXJfaW5mbzsKQEAgLTIxNDAsNyArMjEzOCw3IEBACiAJc3RydWN0IGhwaV9jb250cm9sIGhwaV9jdGw7CiAJaW50IHMsIGVycjsKIAlmb3IgKHMgPSAwOyBzIDwgMzI7IHMrKykgewotCQllcnIgPSBocGlfbXVsdGlwbGV4ZXJfcXVlcnlfc291cmNlKHNzLCBoX2NvbnRyb2wsIHMsCisJCWVyciA9IGhwaV9tdWx0aXBsZXhlcl9xdWVyeV9zb3VyY2UoaF9jb250cm9sLCBzLAogCQkJCQkJICAmaHBpX2N0bC4KIAkJCQkJCSAgc3JjX25vZGVfdHlwZSwKIAkJCQkJCSAgJmhwaV9jdGwuCkBAIC0yMTY4LDcgKzIxNjYsNyBAQAogCQkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwogCiAJZXJyID0KLQkgICAgaHBpX211bHRpcGxleGVyX3F1ZXJ5X3NvdXJjZShzcywgaF9jb250cm9sLAorCSAgICBocGlfbXVsdGlwbGV4ZXJfcXVlcnlfc291cmNlKGhfY29udHJvbCwKIAkJCQkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSwKIAkJCQkJJnNyY19ub2RlX3R5cGUsICZzcmNfbm9kZV9pbmRleCk7CiAKQEAgLTIxODYsMTEgKzIxODQsMTEgQEAKIAl1MTYgc3JjX25vZGVfdHlwZSwgc3JjX25vZGVfaW5kZXg7CiAJaW50IHM7CiAKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9tdWx0aXBsZXhlcl9nZXRfc291cmNlKHNzLCBoX2NvbnRyb2wsCisJaHBpX2hhbmRsZV9lcnJvcihocGlfbXVsdGlwbGV4ZXJfZ2V0X3NvdXJjZShoX2NvbnRyb2wsCiAJCQkJJnNvdXJjZV90eXBlLCAmc291cmNlX2luZGV4KSk7CiAJLyogU2hvdWxkIGNhY2hlIHRoaXMgc2VhcmNoIHJlc3VsdCEgKi8KIAlmb3IgKHMgPSAwOyBzIDwgMjU2OyBzKyspIHsKLQkJaWYgKGhwaV9tdWx0aXBsZXhlcl9xdWVyeV9zb3VyY2Uoc3MsIGhfY29udHJvbCwgcywKKwkJaWYgKGhwaV9tdWx0aXBsZXhlcl9xdWVyeV9zb3VyY2UoaF9jb250cm9sLCBzLAogCQkJCQkgICAgJnNyY19ub2RlX3R5cGUsICZzcmNfbm9kZV9pbmRleCkpCiAJCQlicmVhazsKIApAQCAtMjIwMSw3ICsyMTk5LDcgQEAKIAkJfQogCX0KIAlzbmRfcHJpbnRkKEtFUk5fV0FSTklORwotCQkiY29udHJvbCAleCBmYWlsZWQgdG8gbWF0Y2ggbXV4IHNvdXJjZSAlaHUgJWh1XG4iLAorCQkiQ29udHJvbCAleCBmYWlsZWQgdG8gbWF0Y2ggbXV4IHNvdXJjZSAlaHUgJWh1XG4iLAogCQloX2NvbnRyb2wsIHNvdXJjZV90eXBlLCBzb3VyY2VfaW5kZXgpOwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOwogCXJldHVybiAwOwpAQCAtMjIxNywxMiArMjIxNSwxMiBAQAogCiAJY2hhbmdlID0gMTsKIAotCWUgPSBocGlfbXVsdGlwbGV4ZXJfcXVlcnlfc291cmNlKHNzLCBoX2NvbnRyb2wsCisJZSA9IGhwaV9tdWx0aXBsZXhlcl9xdWVyeV9zb3VyY2UoaF9jb250cm9sLAogCQkJCSAgICB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdLAogCQkJCSAgICAmc291cmNlX3R5cGUsICZzb3VyY2VfaW5kZXgpOwogCWlmICghZSkKIAkJaHBpX2hhbmRsZV9lcnJvcigKLQkJCWhwaV9tdWx0aXBsZXhlcl9zZXRfc291cmNlKHNzLCBoX2NvbnRyb2wsCisJCQlocGlfbXVsdGlwbGV4ZXJfc2V0X3NvdXJjZShoX2NvbnRyb2wsCiAJCQkJCQlzb3VyY2VfdHlwZSwgc291cmNlX2luZGV4KSk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KQEAgLTIyMzQsMTEgKzIyMzIsNyBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGFzaWhwaS0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfY29udHJvbDsKIAotI2lmIEFTSV9TVFlMRV9OQU1FUwotCWFzaWhwaV9jdGxfaW5pdCgmc25kX2NvbnRyb2wsIGhwaV9jdGwsICJtdWx0aXBsZXhlciIpOwotI2Vsc2UKLQlhc2locGlfY3RsX2luaXQoJnNuZF9jb250cm9sLCBocGlfY3RsLCAicm91dGUiKTsKLSNlbmRpZgorCWFzaWhwaV9jdGxfaW5pdCgmc25kX2NvbnRyb2wsIGhwaV9jdGwsICJSb3V0ZSIpOwogCXNuZF9jb250cm9sLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEU7CiAJc25kX2NvbnRyb2wuaW5mbyA9IHNuZF9hc2locGlfbXV4X2luZm87CiAJc25kX2NvbnRyb2wuZ2V0ID0gc25kX2FzaWhwaV9tdXhfZ2V0OwpAQCAtMjI1NCwzMyArMjI0OCwzOCBAQAogc3RhdGljIGludCBzbmRfYXNpaHBpX2Ntb2RlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKm1vZGVfbmFtZXNbSFBJX0NIQU5ORUxfTU9ERV9MQVNUXSA9IHsKLQkJIm5vcm1hbCIsICJzd2FwIiwKLQkJImZyb21fbGVmdCIsICJmcm9tX3JpZ2h0IiwKLQkJInRvX2xlZnQiLCAidG9fcmlnaHQiCisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtb2RlX25hbWVzW0hQSV9DSEFOTkVMX01PREVfTEFTVCArIDFdID0geworCQkiaW52YWxpZCIsCisJCSJOb3JtYWwiLCAiU3dhcCIsCisJCSJGcm9tIExlZnQiLCAiRnJvbSBSaWdodCIsCisJCSJUbyBMZWZ0IiwgIlRvIFJpZ2h0IgogCX07CiAKIAl1MzIgaF9jb250cm9sID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdTE2IG1vZGU7CiAJaW50IGk7CisJdTE2IG1vZGVfbWFwWzZdOworCWludCB2YWxpZF9tb2RlcyA9IDA7CiAKIAkvKiBIUEkgY2hhbm5lbCBtb2RlIHZhbHVlcyBjYW4gYmUgZnJvbSAxIHRvIDYKIAlTb21lIGFkYXB0ZXJzIG9ubHkgc3VwcG9ydCBhIGNvbnRpZ3VvdXMgc3Vic2V0CiAJKi8KIAlmb3IgKGkgPSAwOyBpIDwgSFBJX0NIQU5ORUxfTU9ERV9MQVNUOyBpKyspCi0JCWlmIChocGlfY2hhbm5lbF9tb2RlX3F1ZXJ5X21vZGUoCi0JCQlzcywgIGhfY29udHJvbCwgaSwgJm1vZGUpKQotCQkJYnJlYWs7CisJCWlmICghaHBpX2NoYW5uZWxfbW9kZV9xdWVyeV9tb2RlKAorCQkJaF9jb250cm9sLCBpLCAmbW9kZSkpIHsKKwkJCW1vZGVfbWFwW3ZhbGlkX21vZGVzXSA9IG1vZGU7CisJCQl2YWxpZF9tb2RlcysrOworCQkJfQogCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IGk7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSB2YWxpZF9tb2RlczsKIAotCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IGkpCi0JCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSBpIC0gMTsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB2YWxpZF9tb2RlcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHZhbGlkX21vZGVzIC0gMTsKIAogCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAotCSAgICAgICBtb2RlX25hbWVzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwkgICAgICAgbW9kZV9uYW1lc1ttb2RlX21hcFt1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXV0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjkxLDcgKzIyOTAsNyBAQAogCXUzMiBoX2NvbnRyb2wgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1MTYgbW9kZTsKIAotCWlmIChocGlfY2hhbm5lbF9tb2RlX2dldChzcywgaF9jb250cm9sLCAmbW9kZSkpCisJaWYgKGhwaV9jaGFubmVsX21vZGVfZ2V0KGhfY29udHJvbCwgJm1vZGUpKQogCQltb2RlID0gMTsKIAogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBtb2RlIC0gMTsKQEAgLTIzMDcsNyArMjMwNiw3IEBACiAKIAljaGFuZ2UgPSAxOwogCi0JaHBpX2hhbmRsZV9lcnJvcihocGlfY2hhbm5lbF9tb2RlX3NldChzcywgaF9jb250cm9sLAorCWhwaV9oYW5kbGVfZXJyb3IoaHBpX2NoYW5uZWxfbW9kZV9zZXQoaF9jb250cm9sLAogCQkJICAgdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSArIDEpKTsKIAlyZXR1cm4gY2hhbmdlOwogfQpAQCAtMjMxOSw3ICsyMzE4LDcgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBhc2locGktPmNhcmQ7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2NvbnRyb2w7CiAKLQlhc2locGlfY3RsX2luaXQoJnNuZF9jb250cm9sLCBocGlfY3RsLCAiY2hhbm5lbCBtb2RlIik7CisJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIk1vZGUiKTsKIAlzbmRfY29udHJvbC5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFOwogCXNuZF9jb250cm9sLmluZm8gPSBzbmRfYXNpaHBpX2Ntb2RlX2luZm87CiAJc25kX2NvbnRyb2wuZ2V0ID0gc25kX2FzaWhwaV9jbW9kZV9nZXQ7CkBAIC0yMzMxLDE1ICsyMzMwLDEyIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgU2FtcGxlY2xvY2sgc291cmNlICBjb250cm9scwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBjaGFyICpzYW1wbGVjbG9ja19zb3VyY2VzW01BWF9DTE9DS1NPVVJDRVNdID0KLSAgICB7ICJOL0EiLCAibG9jYWwgUExMIiwgIkFFUy9FQlUgc3luYyIsICJ3b3JkIGV4dGVybmFsIiwgIndvcmQgaGVhZGVyIiwKLQkgICJTTVBURSIsICJBRVMvRUJVIGluMSIsICJhdXRvIiwgIm5ldHdvcmsiLCAiaW52YWxpZCIsCi0JICAicHJldiBtb2R1bGUiLAotCSAgIkFFUy9FQlUgaW4yIiwgIkFFUy9FQlUgaW4zIiwgIkFFUy9FQlUgaW40IiwgIkFFUy9FQlUgaW41IiwKLQkgICJBRVMvRUJVIGluNiIsICJBRVMvRUJVIGluNyIsICJBRVMvRUJVIGluOCJ9OwotCi0KK3N0YXRpYyBjaGFyICpzYW1wbGVjbG9ja19zb3VyY2VzW01BWF9DTE9DS1NPVVJDRVNdID0geworCSJOL0EiLCAiTG9jYWwgUExMIiwgIkRpZ2l0YWwgU3luYyIsICJXb3JkIEV4dGVybmFsIiwgIldvcmQgSGVhZGVyIiwKKwkiU01QVEUiLCAiRGlnaXRhbDEiLCAiQXV0byIsICJOZXR3b3JrIiwgIkludmFsaWQiLAorCSJQcmV2IE1vZHVsZSIsCisJIkRpZ2l0YWwyIiwgIkRpZ2l0YWwzIiwgIkRpZ2l0YWw0IiwgIkRpZ2l0YWw1IiwKKwkiRGlnaXRhbDYiLCAiRGlnaXRhbDciLCAiRGlnaXRhbDgifTsKIAogc3RhdGljIGludCBzbmRfYXNpaHBpX2Nsa3NyY19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKQEAgLTIzNzEsMTEgKzIzNjcsMTEgQEAKIAlpbnQgaTsKIAogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOwotCWlmIChocGlfc2FtcGxlX2Nsb2NrX2dldF9zb3VyY2Uoc3MsIGhfY29udHJvbCwgJnNvdXJjZSkpCisJaWYgKGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NvdXJjZShoX2NvbnRyb2wsICZzb3VyY2UpKQogCQlzb3VyY2UgPSAwOwogCiAJaWYgKHNvdXJjZSA9PSBIUElfU0FNUExFQ0xPQ0tfU09VUkNFX0FFU0VCVV9JTlBVVCkKLQkJaWYgKGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NvdXJjZV9pbmRleChzcywgaF9jb250cm9sLCAmc3JjaW5kZXgpKQorCQlpZiAoaHBpX3NhbXBsZV9jbG9ja19nZXRfc291cmNlX2luZGV4KGhfY29udHJvbCwgJnNyY2luZGV4KSkKIAkJCXNyY2luZGV4ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjbGtjYWNoZS0+Y291bnQ7IGkrKykKQEAgLTI0MDIsMTEgKzIzOTgsMTEgQEAKIAlpZiAoaXRlbSA+PSBjbGtjYWNoZS0+Y291bnQpCiAJCWl0ZW0gPSBjbGtjYWNoZS0+Y291bnQtMTsKIAotCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3NhbXBsZV9jbG9ja19zZXRfc291cmNlKHNzLAorCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3NhbXBsZV9jbG9ja19zZXRfc291cmNlKAogCQkJCWhfY29udHJvbCwgY2xrY2FjaGUtPnNbaXRlbV0uc291cmNlKSk7CiAKIAlpZiAoY2xrY2FjaGUtPnNbaXRlbV0uc291cmNlID09IEhQSV9TQU1QTEVDTE9DS19TT1VSQ0VfQUVTRUJVX0lOUFVUKQotCQlocGlfaGFuZGxlX2Vycm9yKGhwaV9zYW1wbGVfY2xvY2tfc2V0X3NvdXJjZV9pbmRleChzcywKKwkJaHBpX2hhbmRsZV9lcnJvcihocGlfc2FtcGxlX2Nsb2NrX3NldF9zb3VyY2VfaW5kZXgoCiAJCQkJaF9jb250cm9sLCBjbGtjYWNoZS0+c1tpdGVtXS5pbmRleCkpOwogCXJldHVybiBjaGFuZ2U7CiB9CkBAIC0yNDM0LDcgKzI0MzAsNyBAQAogCXUzMiByYXRlOwogCXUxNiBlOwogCi0JZSA9IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X2xvY2FsX3JhdGUoc3MsIGhfY29udHJvbCwgJnJhdGUpOworCWUgPSBocGlfc2FtcGxlX2Nsb2NrX2dldF9sb2NhbF9yYXRlKGhfY29udHJvbCwgJnJhdGUpOwogCWlmICghZSkKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSByYXRlOwogCWVsc2UKQEAgLTI0NTIsNyArMjQ0OCw3IEBACiAJICAgYXNpaHBpLT5taXhlcl9jbGtyYXRlW2FkZHJdWzFdICE9IHJpZ2h0OwogCSAqLwogCWNoYW5nZSA9IDE7Ci0JaHBpX2hhbmRsZV9lcnJvcihocGlfc2FtcGxlX2Nsb2NrX3NldF9sb2NhbF9yYXRlKHNzLCBoX2NvbnRyb2wsCisJaHBpX2hhbmRsZV9lcnJvcihocGlfc2FtcGxlX2Nsb2NrX3NldF9sb2NhbF9yYXRlKGhfY29udHJvbCwKIAkJCQkgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkpOwogCXJldHVybiBjaGFuZ2U7CiB9CkBAIC0yNDc2LDcgKzI0NzIsNyBAQAogCXUzMiByYXRlOwogCXUxNiBlOwogCi0JZSA9IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NhbXBsZV9yYXRlKHNzLCBoX2NvbnRyb2wsICZyYXRlKTsKKwllID0gaHBpX3NhbXBsZV9jbG9ja19nZXRfc2FtcGxlX3JhdGUoaF9jb250cm9sLCAmcmF0ZSk7CiAJaWYgKCFlKQogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHJhdGU7CiAJZWxzZQpAQCAtMjUwMSw3ICsyNDk3LDcgQEAKIAljbGtjYWNoZS0+aGFzX2xvY2FsID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPD0gSFBJX1NBTVBMRUNMT0NLX1NPVVJDRV9MQVNUOyBpKyspIHsKLQkJaWYgIChocGlfc2FtcGxlX2Nsb2NrX3F1ZXJ5X3NvdXJjZShzcywgaFNDLAorCQlpZiAgKGhwaV9zYW1wbGVfY2xvY2tfcXVlcnlfc291cmNlKGhTQywKIAkJCQlpLCAmc291cmNlKSkKIAkJCWJyZWFrOwogCQljbGtjYWNoZS0+c1tpXS5zb3VyY2UgPSBzb3VyY2U7CkBAIC0yNTE1LDcgKzI1MTEsNyBAQAogCWlmIChoYXNfYWVzX2luKQogCQkvKiBhbHJlYWR5IHdpbGwgaGF2ZSBwaWNrZWQgdXAgaW5kZXggMCBhYm92ZSAqLwogCQlmb3IgKGogPSAxOyBqIDwgODsgaisrKSB7Ci0JCQlpZiAoaHBpX3NhbXBsZV9jbG9ja19xdWVyeV9zb3VyY2VfaW5kZXgoc3MsIGhTQywKKwkJCWlmIChocGlfc2FtcGxlX2Nsb2NrX3F1ZXJ5X3NvdXJjZV9pbmRleChoU0MsCiAJCQkJaiwgSFBJX1NBTVBMRUNMT0NLX1NPVVJDRV9BRVNFQlVfSU5QVVQsCiAJCQkJJnNvdXJjZSkpCiAJCQkJYnJlYWs7CkBAIC0yNTI4LDcgKzI1MjQsNyBAQAogCQl9CiAJY2xrY2FjaGUtPmNvdW50ID0gaTsKIAotCWFzaWhwaV9jdGxfaW5pdCgmc25kX2NvbnRyb2wsIGhwaV9jdGwsICJzb3VyY2UiKTsKKwlhc2locGlfY3RsX2luaXQoJnNuZF9jb250cm9sLCBocGlfY3RsLCAiU291cmNlIik7CiAJc25kX2NvbnRyb2wuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSA7CiAJc25kX2NvbnRyb2wuaW5mbyA9IHNuZF9hc2locGlfY2xrc3JjX2luZm87CiAJc25kX2NvbnRyb2wuZ2V0ID0gc25kX2FzaWhwaV9jbGtzcmNfZ2V0OwpAQCAtMjUzOCw3ICsyNTM0LDcgQEAKIAogCiAJaWYgKGNsa2NhY2hlLT5oYXNfbG9jYWwpIHsKLQkJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgImxvY2FsX3JhdGUiKTsKKwkJYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgIkxvY2FscmF0ZSIpOwogCQlzbmRfY29udHJvbC5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIDsKIAkJc25kX2NvbnRyb2wuaW5mbyA9IHNuZF9hc2locGlfY2xrbG9jYWxfaW5mbzsKIAkJc25kX2NvbnRyb2wuZ2V0ID0gc25kX2FzaWhwaV9jbGtsb2NhbF9nZXQ7CkBAIC0yNTQ5LDcgKzI1NDUsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYXNpaHBpX2N0bF9pbml0KCZzbmRfY29udHJvbCwgaHBpX2N0bCwgInJhdGUiKTsKKwlhc2locGlfY3RsX2luaXQoJnNuZF9jb250cm9sLCBocGlfY3RsLCAiUmF0ZSIpOwogCXNuZF9jb250cm9sLmFjY2VzcyA9CiAJICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSB8IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEOwogCXNuZF9jb250cm9sLmluZm8gPSBzbmRfYXNpaHBpX2Nsa3JhdGVfaW5mbzsKQEAgLTI1NzEsMTAgKzI1NjcsMTAgQEAKIAogCWlmIChzbmRfQlVHX09OKCFhc2locGkpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiYXNpaHBpIG1peGVyIik7CisJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkFzaWhwaSBNaXhlciIpOwogCiAJZXJyID0KLQkgICAgaHBpX21peGVyX29wZW4oc3MsIGFzaWhwaS0+YWRhcHRlcl9pbmRleCwKKwkgICAgaHBpX21peGVyX29wZW4oYXNpaHBpLT5hZGFwdGVyX2luZGV4LAogCQkJICAmYXNpaHBpLT5oX21peGVyKTsKIAlocGlfaGFuZGxlX2Vycm9yKGVycik7CiAJaWYgKGVycikKQEAgLTI1ODUsNyArMjU4MSw3IEBACiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDIwMDA7IGlkeCsrKSB7CiAJCWVyciA9IGhwaV9taXhlcl9nZXRfY29udHJvbF9ieV9pbmRleCgKLQkJCQlzcywgYXNpaHBpLT5oX21peGVyLAorCQkJCWFzaWhwaS0+aF9taXhlciwKIAkJCQlpZHgsCiAJCQkJJmhwaV9jdGwuc3JjX25vZGVfdHlwZSwKIAkJCQkmaHBpX2N0bC5zcmNfbm9kZV9pbmRleCwKQEAgLTI1OTcsNyArMjU5Myw3IEBACiAJCQlpZiAoZXJyID09IEhQSV9FUlJPUl9DT05UUk9MX0RJU0FCTEVEKSB7CiAJCQkJaWYgKG1peGVyX2R1bXApCiAJCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPCi0JCQkJCQkgICAiZGlzYWJsZWQgSFBJIGNvbnRyb2woJWQpXG4iLAorCQkJCQkJICAgIkRpc2FibGVkIEhQSSBDb250cm9sKCVkKVxuIiwKIAkJCQkJCSAgIGlkeCk7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UKQEAgLTI2NjIsNyArMjY1OCw3IEBACiAJCWRlZmF1bHQ6CiAJCQlpZiAobWl4ZXJfZHVtcCkKIAkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkidW50cmFuc2xhdGVkIEhQSSBjb250cm9sIgorCQkJCQkiVW50cmFuc2xhdGVkIEhQSSBDb250cm9sIgogCQkJCQkiKCVkKSAlZCAlZCAlZCAlZCAlZFxuIiwKIAkJCQkJaWR4LAogCQkJCQlocGlfY3RsLmNvbnRyb2xfdHlwZSwKQEAgLTI3MTIsMTQgKzI3MDgsMTQgQEAKIAkJdmVyc2lvbiAmIDB4NywKIAkJKCh2ZXJzaW9uID4+IDEzKSAqIDEwMCkgKyAoKHZlcnNpb24gPj4gNykgJiAweDNmKSk7CiAKLQllcnIgPSBocGlfbWl4ZXJfZ2V0X2NvbnRyb2woc3MsIGFzaWhwaS0+aF9taXhlciwKKwllcnIgPSBocGlfbWl4ZXJfZ2V0X2NvbnRyb2woYXNpaHBpLT5oX21peGVyLAogCQkJCSAgSFBJX1NPVVJDRU5PREVfQ0xPQ0tfU09VUkNFLCAwLCAwLCAwLAogCQkJCSAgSFBJX0NPTlRST0xfU0FNUExFQ0xPQ0ssICZoX2NvbnRyb2wpOwogCiAJaWYgKCFlcnIpIHsKLQkJZXJyID0gaHBpX3NhbXBsZV9jbG9ja19nZXRfc2FtcGxlX3JhdGUoc3MsCisJCWVyciA9IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NhbXBsZV9yYXRlKAogCQkJCQloX2NvbnRyb2wsICZyYXRlKTsKLQkJZXJyICs9IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NvdXJjZShzcywgaF9jb250cm9sLCAmc291cmNlKTsKKwkJZXJyICs9IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NvdXJjZShoX2NvbnRyb2wsICZzb3VyY2UpOwogCiAJCWlmICghZXJyKQogCQkJc25kX2lwcmludGYoYnVmZmVyLCAic2FtcGxlX2Nsb2NrPSVkX2h6LCBzb3VyY2UgJXNcbiIsCkBAIC0yODQxLDE1ICsyODM3LDE3IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSIqKioqIFdBUk5JTkcgKioqKiBhZGFwdGVyIGluZGV4ICVkLT5BTFNBIGluZGV4ICVkXG4iLAorCQkJIioqKiogV0FSTklORyAqKioqIEFkYXB0ZXIgaW5kZXggJWQtPkFMU0EgaW5kZXggJWRcbiIsCiAJCQlocGlfY2FyZC0+aW5kZXgsIGNhcmQtPm51bWJlcik7CiAJfQogCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpX2Rldi0+ZGV2KTsKKwogCWFzaWhwaSA9IChzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAlhc2locGktPmNhcmQgPSBjYXJkOwotCWFzaWhwaS0+cGNpID0gaHBpX2NhcmQtPnBjaTsKKwlhc2locGktPnBjaSA9IHBjaV9kZXY7CiAJYXNpaHBpLT5hZGFwdGVyX2luZGV4ID0gaHBpX2NhcmQtPmluZGV4OwotCWhwaV9oYW5kbGVfZXJyb3IoaHBpX2FkYXB0ZXJfZ2V0X2luZm8oc3MsCisJaHBpX2hhbmRsZV9lcnJvcihocGlfYWRhcHRlcl9nZXRfaW5mbygKIAkJCQkgYXNpaHBpLT5hZGFwdGVyX2luZGV4LAogCQkJCSAmYXNpaHBpLT5udW1fb3V0c3RyZWFtcywKIAkJCQkgJmFzaWhwaS0+bnVtX2luc3RyZWFtcywKQEAgLTI4NTksNyArMjg1Nyw3IEBACiAJdmVyc2lvbiA9IGFzaWhwaS0+dmVyc2lvbjsKIAlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiYWRhcHRlciBJRD0lNFggaW5kZXg9JWQgbnVtX291dHN0cmVhbXM9JWQgIgogCQkJIm51bV9pbnN0cmVhbXM9JWQgUy9OPSVkXG4iCi0JCQkiaHcgdmVyc2lvbiAlYyVkIERTUCBjb2RlIHZlcnNpb24gJTAzZFxuIiwKKwkJCSJIdyBWZXJzaW9uICVjJWQgRFNQIGNvZGUgdmVyc2lvbiAlMDNkXG4iLAogCQkJYXNpaHBpLT50eXBlLCBhc2locGktPmFkYXB0ZXJfaW5kZXgsCiAJCQlhc2locGktPm51bV9vdXRzdHJlYW1zLAogCQkJYXNpaHBpLT5udW1faW5zdHJlYW1zLCBhc2locGktPnNlcmlhbF9udW1iZXIsCkBAIC0yODcxLDMzICsyODY5LDMzIEBACiAJaWYgKHBjbV9zdWJzdHJlYW1zIDwgYXNpaHBpLT5udW1faW5zdHJlYW1zKQogCQlwY21fc3Vic3RyZWFtcyA9IGFzaWhwaS0+bnVtX2luc3RyZWFtczsKIAotCWVyciA9IGhwaV9hZGFwdGVyX2dldF9wcm9wZXJ0eShzcywgYXNpaHBpLT5hZGFwdGVyX2luZGV4LAorCWVyciA9IGhwaV9hZGFwdGVyX2dldF9wcm9wZXJ0eShhc2locGktPmFkYXB0ZXJfaW5kZXgsCiAJCUhQSV9BREFQVEVSX1BST1BFUlRZX0NBUFMxLAogCQlOVUxMLCAmYXNpaHBpLT5zdXBwb3J0X2dyb3VwaW5nKTsKIAlpZiAoZXJyKQogCQlhc2locGktPnN1cHBvcnRfZ3JvdXBpbmcgPSAwOwogCi0JZXJyID0gaHBpX2FkYXB0ZXJfZ2V0X3Byb3BlcnR5KHNzLCBhc2locGktPmFkYXB0ZXJfaW5kZXgsCisJZXJyID0gaHBpX2FkYXB0ZXJfZ2V0X3Byb3BlcnR5KGFzaWhwaS0+YWRhcHRlcl9pbmRleCwKIAkJSFBJX0FEQVBURVJfUFJPUEVSVFlfQ0FQUzIsCiAJCSZhc2locGktPnN1cHBvcnRfbXJ4LCBOVUxMKTsKIAlpZiAoZXJyKQogCQlhc2locGktPnN1cHBvcnRfbXJ4ID0gMDsKIAotCWVyciA9IGhwaV9hZGFwdGVyX2dldF9wcm9wZXJ0eShzcywgYXNpaHBpLT5hZGFwdGVyX2luZGV4LAorCWVyciA9IGhwaV9hZGFwdGVyX2dldF9wcm9wZXJ0eShhc2locGktPmFkYXB0ZXJfaW5kZXgsCiAJCUhQSV9BREFQVEVSX1BST1BFUlRZX0lOVEVSVkFMLAogCQlOVUxMLCAmYXNpaHBpLT51cGRhdGVfaW50ZXJ2YWxfZnJhbWVzKTsKIAlpZiAoZXJyKQogCQlhc2locGktPnVwZGF0ZV9pbnRlcnZhbF9mcmFtZXMgPSA1MTI7CiAKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9pbnN0cmVhbV9vcGVuKHNzLCBhc2locGktPmFkYXB0ZXJfaW5kZXgsCisJaHBpX2hhbmRsZV9lcnJvcihocGlfaW5zdHJlYW1fb3Blbihhc2locGktPmFkYXB0ZXJfaW5kZXgsCiAJCQkgICAgIDAsICZoX3N0cmVhbSkpOwogCi0JZXJyID0gaHBpX2luc3RyZWFtX2hvc3RfYnVmZmVyX2ZyZWUoc3MsIGhfc3RyZWFtKTsKKwllcnIgPSBocGlfaW5zdHJlYW1faG9zdF9idWZmZXJfZnJlZShoX3N0cmVhbSk7CiAJYXNpaHBpLT5zdXBwb3J0X21tYXAgPSAoIWVycik7CiAKLQlocGlfaGFuZGxlX2Vycm9yKGhwaV9pbnN0cmVhbV9jbG9zZShzcywgaF9zdHJlYW0pKTsKKwlocGlfaGFuZGxlX2Vycm9yKGhwaV9pbnN0cmVhbV9jbG9zZShoX3N0cmVhbSkpOwogCi0JZXJyID0gaHBpX2FkYXB0ZXJfZ2V0X3Byb3BlcnR5KHNzLCBhc2locGktPmFkYXB0ZXJfaW5kZXgsCisJZXJyID0gaHBpX2FkYXB0ZXJfZ2V0X3Byb3BlcnR5KGFzaWhwaS0+YWRhcHRlcl9pbmRleCwKIAkJSFBJX0FEQVBURVJfUFJPUEVSVFlfQ1VSQ0hBTk5FTFMsCiAJCSZhc2locGktPmluX21heF9jaGFucywgJmFzaWhwaS0+b3V0X21heF9jaGFucyk7CiAJaWYgKGVycikgewpAQCAtMjkyMywxMyArMjkyMSwxMyBAQAogCQlnb3RvIF9fbm9kZXY7CiAJfQogCi0JZXJyID0gaHBpX21peGVyX2dldF9jb250cm9sKHNzLCBhc2locGktPmhfbWl4ZXIsCisJZXJyID0gaHBpX21peGVyX2dldF9jb250cm9sKGFzaWhwaS0+aF9taXhlciwKIAkJCQkgIEhQSV9TT1VSQ0VOT0RFX0NMT0NLX1NPVVJDRSwgMCwgMCwgMCwKIAkJCQkgIEhQSV9DT05UUk9MX1NBTVBMRUNMT0NLLCAmaF9jb250cm9sKTsKIAogCWlmICghZXJyKQogCQllcnIgPSBocGlfc2FtcGxlX2Nsb2NrX3NldF9sb2NhbF9yYXRlKAotCQkJc3MsIGhfY29udHJvbCwgYWRhcHRlcl9mcyk7CisJCQloX2NvbnRyb2wsIGFkYXB0ZXJfZnMpOwogCiAJc25kX2FzaWhwaV9wcm9jX2luaXQoYXNpaHBpKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGkuaCBiL3NvdW5kL3BjaS9hc2locGkvaHBpLmgKaW5kZXggMjMzOTlkMC4uNmZjMDI1YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGkuaAorKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaS5oCkBAIC0yNCwxNyArMjQsMTAgQEAKIAogIFRoZSBIUEkgaXMgYSBsb3ctbGV2ZWwgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgdG8gYWxsCiAgQXVkaW9TY2llbmNlIGRpZ2l0YWwgYXVkaW8gYWRhcHRlcnMKLSovCi0vKgotIFlvdSBtdXN0IGRlZmluZSBvbmUgb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHRoZSBIUEkgaXMgdG8gYmUgY29tcGlsZWQgdW5kZXIKLSBIUElfT1NfV0lOMzJfVVNFUiAgIDMyYml0IFdpbmRvd3MKLSBIUElfT1NfRFNQX0M2MDAwICAgIERTUCBUSSBDNjAwMCAgKGF1dG9tYXRpY2FsbHkgc2V0KQotIEhQSV9PU19XRE0gICAgICAgICAgV2luZG93cyBXRE0ga2VybmVsIGRyaXZlcgotIEhQSV9PU19MSU5VWCAgICAgICAgTGludXggdXNlcnNwYWNlCi0gSFBJX09TX0xJTlVYX0tFUk5FTCBMaW51eCBrZXJuZWwgKGF1dG9tYXRpY2FsbHkgc2V0KQogCiAoQykgQ29weXJpZ2h0IEF1ZGlvU2NpZW5jZSBJbmMuIDE5OTgtMjAxMAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKi8KKwogI2lmbmRlZiBfSFBJX0hfCiAjZGVmaW5lIF9IUElfSF8KIC8qIEhQSSBWZXJzaW9uCkBAIC01MCwyMCArNDMsMjAgQEAKICNkZWZpbmUgSFBJX1ZFUl9SRUxFQVNFKHYpICgoaW50KSh2ICYgMHhGRikpCiAKIC8qIFVzZSBzaW5nbGUgZGlnaXRzIGZvciB2ZXJzaW9ucyBsZXNzIHRoYXQgMTAgdG8gYXZvaWQgb2N0YWwuICovCi0jZGVmaW5lIEhQSV9WRVIgSFBJX1ZFUlNJT05fQ09OU1RSVUNUT1IoNEwsIDQsIDEpCi0jZGVmaW5lIEhQSV9WRVJfU1RSSU5HICI0LjA0LjAxIgorI2RlZmluZSBIUElfVkVSIEhQSV9WRVJTSU9OX0NPTlNUUlVDVE9SKDRMLCA2LCAwKQorI2RlZmluZSBIUElfVkVSX1NUUklORyAiNC4wNi4wMCIKIAogLyogTGlicmFyeSB2ZXJzaW9uIGFzIGRvY3VtZW50ZWQgaW4gaHBpLWFwaS12ZXJzaW9ucy50eHQgKi8KICNkZWZpbmUgSFBJX0xJQl9WRVIgIEhQSV9WRVJTSU9OX0NPTlNUUlVDVE9SKDksIDAsIDApCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2RlZmluZSBIUElfRVhDTFVERV9ERVBSRUNBVEVECisjZGVmaW5lIEhQSV9CVUlMRF9FWENMVURFX0RFUFJFQ0FURUQKKyNkZWZpbmUgSFBJX0JVSUxEX0tFUk5FTF9NT0RFCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqICAgICAgIEhQSSBBUEkgREVGSU5JVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiAgQXVkaW8gZm9ybWF0IHR5cGVzCiBcaW5ncm91cCBzdHJlYW0KQEAgLTE3NCw3ICsxNjcsNiBAQAogCUhQSV9GT1JNQVRfVU5ERUZJTkVEID0gMHhmZmZmCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBpbi9vdXQgU3RyZWFtIHN0YXRlcyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiogU3RyZWFtIFN0YXRlcwogXGluZ3JvdXAgc3RyZWFtCkBAIC0xOTQsNyArMTg2LDcgQEAKIAkJY2FyZHMgdG8gYmUgcmVhZHkuICovCiAJSFBJX1NUQVRFX1dBSVQgPSA2CiB9OwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogbWl4ZXIgc291cmNlIG5vZGUgdHlwZXMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIFNvdXJjZSBub2RlIHR5cGVzCiBcaW5ncm91cCBtaXhlcgogKi8KQEAgLTIyNCw3ICsyMTYsNyBAQAogCQkvKiBBWDYgbWF4IHNvdXJjZW5vZGUgdHlwZXMgPSAxNSAqLwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogbWl4ZXIgZGVzdCBub2RlIHR5cGVzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBEZXN0aW5hdGlvbiBub2RlIHR5cGVzCiBcaW5ncm91cCBtaXhlcgogKi8KQEAgLTI2MiwxMSArMjU0LDExIEBACiAJSFBJX0NPTlRST0xfTVVURSA9IDQsCS8qbXV0ZSBjb250cm9sIC0gbm90IHVzZWQgYXQgcHJlc2VudC4gKi8KIAlIUElfQ09OVFJPTF9NVUxUSVBMRVhFUiA9IDUsCS8qKjwgbXVsdGlwbGV4ZXIgY29udHJvbC4gKi8KIAotCUhQSV9DT05UUk9MX0FFU0VCVV9UUkFOU01JVFRFUiA9IDYsCS8qKjwgQUVTL0VCVSB0cmFuc21pdHRlciBjb250cm9sLiAqLwotCUhQSV9DT05UUk9MX0FFU0VCVVRYID0gSFBJX0NPTlRST0xfQUVTRUJVX1RSQU5TTUlUVEVSLAorCUhQSV9DT05UUk9MX0FFU0VCVV9UUkFOU01JVFRFUiA9IDYsIC8qKjwgQUVTL0VCVSB0cmFuc21pdHRlciBjb250cm9sICovCisJSFBJX0NPTlRST0xfQUVTRUJVVFggPSA2LAkvKiBIUElfQ09OVFJPTF9BRVNFQlVfVFJBTlNNSVRURVIgKi8KIAogCUhQSV9DT05UUk9MX0FFU0VCVV9SRUNFSVZFUiA9IDcsIC8qKjwgQUVTL0VCVSByZWNlaXZlciBjb250cm9sLiAqLwotCUhQSV9DT05UUk9MX0FFU0VCVVJYID0gSFBJX0NPTlRST0xfQUVTRUJVX1JFQ0VJVkVSLAorCUhQSV9DT05UUk9MX0FFU0VCVVJYID0gNywJLyogSFBJX0NPTlRST0xfQUVTRUJVX1JFQ0VJVkVSICovCiAKIAlIUElfQ09OVFJPTF9MRVZFTCA9IDgsIC8qKjwgbGV2ZWwvdHJpbSBjb250cm9sIC0gd29ya3MgaW4gZF9idS4gKi8KIAlIUElfQ09OVFJPTF9UVU5FUiA9IDksCS8qKjwgdHVuZXIgY29udHJvbC4gKi8KQEAgLTI4MSw3ICsyNzMsNyBAQAogCUhQSV9DT05UUk9MX1NBTVBMRUNMT0NLID0gMTcsCS8qKjwgc2FtcGxlIGNsb2NrIGNvbnRyb2wuICovCiAJSFBJX0NPTlRST0xfTUlDUk9QSE9ORSA9IDE4LAkvKio8IG1pY3JvcGhvbmUgY29udHJvbC4gKi8KIAlIUElfQ09OVFJPTF9QQVJBTUVUUklDX0VRID0gMTksCS8qKjwgcGFyYW1ldHJpYyBFUSBjb250cm9sLiAqLwotCUhQSV9DT05UUk9MX0VRVUFMSVpFUiA9IEhQSV9DT05UUk9MX1BBUkFNRVRSSUNfRVEsCisJSFBJX0NPTlRST0xfRVFVQUxJWkVSID0gMTksCS8qSFBJX0NPTlRST0xfUEFSQU1FVFJJQ19FUSAqLwogCiAJSFBJX0NPTlRST0xfQ09NUEFOREVSID0gMjAsCS8qKjwgY29tcGFuZGVyIGNvbnRyb2wuICovCiAJSFBJX0NPTlRST0xfQ09CUkFORVQgPSAyMSwJLyoqPCBjb2JyYW5ldCBjb250cm9sLiAqLwpAQCAtMjk2LDEwICsyODgsNyBAQAogLyogV0FSTklORyB0eXBlcyAyNTYgb3IgZ3JlYXRlciBpbXBhY3QgYml0IHBhY2tpbmcgaW4gYWxsIEFYNiBEU1AgY29kZSAqLwogfTsKIAotLyogU2hvcnRoYW5kIG5hbWVzIHRoYXQgbWF0Y2ggYXR0cmlidXRlIG5hbWVzICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEFEQVBURVIgQVRUUklCVVRFUyAqKioqLwotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBBZGFwdGVyIHByb3BlcnRpZXMKIFRoZXNlIGFyZSB1c2VkIGluIEhQSV9BZGFwdGVyU2V0UHJvcGVydHkoKSBhbmQgSFBJX0FkYXB0ZXJHZXRQcm9wZXJ0eSgpCiBcaW5ncm91cCBhZGFwdGVyCkBAIC0zMzAsMTIgKzMxOSwyMSBAQAogSW5kaWNhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgYWRhcHRlcidzIFNTWDIgc2V0dGluZy4gVGhpcyBzZXR0aW5nIGlzIHN0b3JlZCBpbgogbm9uLXZvbGF0aWxlIG1lbW9yeSBvbiB0aGUgYWRhcHRlci4gQSB0eXBpY2FsIGNhbGwgc2VxdWVuY2Ugd291bGQgYmUgdG8gdXNlCiBIUElfQURBUFRFUl9QUk9QRVJUWV9TU1gyX1NFVFRJTkcgdG8gc2V0IFNTWDIgb24gdGhlIGFkYXB0ZXIgYW5kIHRoZW4gdG8gcmVsb2FkCi10aGUgZHJpdmVyLiBUaGUgZHJpdmVyIHdvdWxkIHF1ZXJ5IEhQSV9BREFQVEVSX1BST1BFUlRZX1NTWDJfU0VUVElORyBkdXJpbmcgc3RhcnR1cAotYW5kIGlmIFNTWDIgaXMgc2V0LCBpdCB3b3VsZCB0aGVuIGNhbGwgSFBJX0FEQVBURVJfUFJPUEVSVFlfRU5BQkxFX1NTWDIgdG8gZW5hYmxlCi1TU1gyIHN0cmVhbSBtYXBwaW5nIHdpdGhpbiB0aGUga2VybmVsIGxldmVsIG9mIHRoZSBkcml2ZXIuCit0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIHdvdWxkIHF1ZXJ5IEhQSV9BREFQVEVSX1BST1BFUlRZX1NTWDJfU0VUVElORyBkdXJpbmcKK3N0YXJ0dXAgYW5kIGlmIFNTWDIgaXMgc2V0LCBpdCB3b3VsZCB0aGVuIGNhbGwgSFBJX0FEQVBURVJfUFJPUEVSVFlfRU5BQkxFX1NTWDIKK3RvIGVuYWJsZSBTU1gyIHN0cmVhbSBtYXBwaW5nIHdpdGhpbiB0aGUga2VybmVsIGxldmVsIG9mIHRoZSBkcml2ZXIuCiAqLwogCUhQSV9BREFQVEVSX1BST1BFUlRZX1NTWDJfU0VUVElORyA9IDQsCiAKKy8qKiBFbmFibGVzL2Rpc2FibGVzIFBDSShlKSBJUlEuCitBIHNldHRpbmcgb2YgMCBpbmRpY2F0ZXMgdGhhdCBubyBpbnRlcnJ1cHRzIGFyZSBiZWluZyBnZW5lcmF0ZWQuIEEgRFNQIGJvb3QKK3RoaXMgcHJvcGVydHkgaXMgc2V0IHRvIDAuIFNldHRpbmcgdG8gYSBub24temVybyB2YWx1ZSBzcGVjaWZpZXMgdGhlIG51bWJlcgorb2YgZnJhbWVzIG9mIGF1ZGlvIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZCBiZXR3ZWVuIGludGVycnVwdHMuIFRoaXMgcHJvcGVydHkKK3Nob3VsZCBiZSBzZXQgdG8gbXVsdGlwbGUgb2YgdGhlIG1peGVyIGludGVydmFsIGFzIHJlYWQgYmFjayBmcm9tIHRoZQorSFBJX0FEQVBURVJfUFJPUEVSVFlfSU5URVJWQUwgcHJvcGVydHkuCisqLworCUhQSV9BREFQVEVSX1BST1BFUlRZX0lSUV9SQVRFID0gNSwKKwogLyoqIEJhc2UgbnVtYmVyIGZvciByZWFkb25seSBwcm9wZXJ0aWVzICovCiAJSFBJX0FEQVBURVJfUFJPUEVSVFlfUkVBRE9OTFlCQVNFID0gMjU2LAogCkBAIC00NDAsMjEgKzQzOCwzMCBAQAogbW9kZSBpcyBNT05PIFNTWDIgaXMgZGlzYWJsZWQsIGV2ZW4gdGhvdWdoIHRoaXMgcHJvcGVydHkgd2lsbAogcmV0dXJuIHRydWUuCiAqLwotCUhQSV9BREFQVEVSX1BST1BFUlRZX1NVUFBPUlRTX1NTWDIgPSAyNzEKKwlIUElfQURBUFRFUl9QUk9QRVJUWV9TVVBQT1JUU19TU1gyID0gMjcxLAorLyoqIFJlYWRvbmx5IHN1cHBvcnRzIFBDSShlKSBJUlEuCitJbmRpY2F0ZXMgdGhhdCB0aGUgYWRhcHRlciBpbiBpdCdzIGN1cnJlbnQgbW9kZSBzdXBwb3J0cyBpbnRlcnJ1cHRzCithY3Jvc3MgdGhlIGhvc3QgYnVzLiBOb3RlLCB0aGlzIGRvZXMgbm90IGltcGx5IHRoYXQgaW50ZXJydXB0cyBhcmUKK2VuYWJsZWQuIEluc3RlYWQgaXQgaW5kaWNhdGVzIHRoYXQgdGhleSBjYW4gYmUgZW5hYmxlZC4KKyovCisJSFBJX0FEQVBURVJfUFJPUEVSVFlfU1VQUE9SVFNfSVJRID0gMjcyCiB9OwogCiAvKiogQWRhcHRlciBtb2RlIGNvbW1hbmRzCiAKLVVzZWQgaW4gd1F1ZXJ5T3JTZXQgZmllbGQgb2YgSFBJX0FkYXB0ZXJTZXRNb2RlRXgoKS4KK1VzZWQgaW4gd1F1ZXJ5T3JTZXQgcGFyYW1ldGVyIG9mIEhQSV9BZGFwdGVyU2V0TW9kZUV4KCkuCiBcaW5ncm91cCBhZGFwdGVyCiAqLwogZW51bSBIUElfQURBUFRFUl9NT0RFX0NNRFMgeworCS8qKiBTZXQgdGhlIG1vZGUgdG8gdGhlIGdpdmVuIHBhcmFtZXRlciAqLwogCUhQSV9BREFQVEVSX01PREVfU0VUID0gMCwKKwkvKiogUmV0dXJuIDAgb3IgZXJyb3IgZGVwZW5kaW5nIHdoZXRoZXIgbW9kZSBpcyB2YWxpZCwKKwlidXQgZG9uJ3Qgc2V0IHRoZSBtb2RlICovCiAJSFBJX0FEQVBURVJfTU9ERV9RVUVSWSA9IDEKIH07CiAKIC8qKiBBZGFwdGVyIE1vZGVzCi0JVGhlc2UgYXJlIHVzZWQgYnkgSFBJX0FkYXB0ZXJTZXRNb2RlRXgoKQorIFRoZXNlIGFyZSB1c2VkIGJ5IEhQSV9BZGFwdGVyU2V0TW9kZUV4KCkKIAogXHdhcm5pbmcgLSBtb3JlIHRoYW4gMTYgcG9zc2libGUgbW9kZXMgYnJlYWtzCiBhIGJpdG1hc2sgaW4gdGhlIFdpbmRvd3MgV0FWRSBETEwKQEAgLTYyOSwxMCArNjM2LDEzIEBACiAJSFBJX01JWEVSX1NUT1JFX1NBVkVfU0lOR0xFID0gNgogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ09OVFJPTCBBVFRSSUJVVEUgVkFMVUVTICoqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENPTlRST0wgQVRUUklCVVRFIFZBTFVFUyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIC8qKiBVc2VkIGJ5IG1peGVyIHBsdWdpbiBlbmFibGUgZnVuY3Rpb25zCiAKLUUuZy4gSFBJX1BhcmFtZXRyaWNFUV9TZXRTdGF0ZSgpCitFLmcuIEhQSV9QYXJhbWV0cmljRXFfU2V0U3RhdGUoKQogXGluZ3JvdXAgbWl4ZXIKICovCiBlbnVtIEhQSV9TV0lUQ0hfU1RBVEVTIHsKQEAgLTY0MSw2ICs2NTEsNyBAQAogfTsKIAogLyogVm9sdW1lIGNvbnRyb2wgc3BlY2lhbCBnYWluIHZhbHVlcyAqLworCiAvKiogdm9sdW1lcyB1bml0cyBhcmUgMTAwdGhzIG9mIGEgZEIKIFxpbmdyb3VwIHZvbHVtZQogKi8KQEAgLTY1MCw2ICs2NjEsMTEgQEAKICovCiAjZGVmaW5lIEhQSV9HQUlOX09GRiAgICAgICAgICAgICAgICAgICAgKC0xMDAgKiBIUElfVU5JVFNfUEVSX2RCKQogCisvKiogY2hhbm5lbCBtYXNrIHNwZWNpZnlpbmcgYWxsIGNoYW5uZWxzCitcaW5ncm91cCB2b2x1bWUKKyovCisjZGVmaW5lIEhQSV9CSVRNQVNLX0FMTF9DSEFOTkVMUyAgICAgICAgKDB4RkZGRkZGRkYpCisKIC8qKiB2YWx1ZSByZXR1cm5lZCBmb3Igbm8gc2lnbmFsCiBcaW5ncm91cCBtZXRlcgogKi8KQEAgLTY2Nyw3ICs2ODMsNyBAQAogCiAvKiogVGhlIHBoeXNpY2FsIGVuY29kaW5nIGZvcm1hdCBvZiB0aGUgQUVTRUJVIEkvTy4KIAotVXNlZCBpbiBIUElfQUVTRUJVX1RyYW5zbWl0dGVyX1NldEZvcm1hdCgpLCBIUElfQUVTRUJVX1JlY2VpdmVyX1NldEZvcm1hdCgpCitVc2VkIGluIEhQSV9BZXNlYnVfVHJhbnNtaXR0ZXJfU2V0Rm9ybWF0KCksIEhQSV9BZXNlYnVfUmVjZWl2ZXJfU2V0Rm9ybWF0KCkKIGFsb25nIHdpdGggcmVsYXRlZCBHZXQgYW5kIFF1ZXJ5IGZ1bmN0aW9ucwogXGluZ3JvdXAgYWVzdHgKICovCkBAIC02ODAsNyArNjk2LDcgQEAKIAogLyoqIEFFUy9FQlUgZXJyb3Igc3RhdHVzIGJpdHMKIAotUmV0dXJuZWQgYnkgSFBJX0FFU0VCVV9SZWNlaXZlcl9HZXRFcnJvclN0YXR1cygpCitSZXR1cm5lZCBieSBIUElfQWVzZWJ1X1JlY2VpdmVyX0dldEVycm9yU3RhdHVzKCkKIFxpbmdyb3VwIGFlc3J4CiAqLwogZW51bSBIUElfQUVTRUJVX0VSUk9SUyB7CkBAIC03NjcsMTQgKzc4Myw2IEBACiAJSFBJX1RVTkVSX01PREVfUkRTX1JCRFMgPSAyIC8qKjwgIFJEUyAtIFJCRFMgbW9kZSAqLwogfTsKIAotLyoqIFR1bmVyIExldmVsIHNldHRpbmdzCi1caW5ncm91cCB0dW5lcgotKi8KLWVudW0gSFBJX1RVTkVSX0xFVkVMIHsKLQlIUElfVFVORVJfTEVWRUxfQVZFUkFHRSA9IDAsCi0JSFBJX1RVTkVSX0xFVkVMX1JBVyA9IDEKLX07Ci0KIC8qKiBUdW5lciBTdGF0dXMgQml0cwogCiBUaGVzZSBiaXRmaWVsZCB2YWx1ZXMgYXJlIHJldHVybmVkIGJ5IGEgY2FsbCB0byBIUElfVHVuZXJfR2V0U3RhdHVzKCkuCkBAIC03ODMsMTMgKzc5MSwxMyBAQAogKi8KIGVudW0gSFBJX1RVTkVSX1NUQVRVU19CSVRTIHsKIAlIUElfVFVORVJfVklERU9fQ09MT1JfUFJFU0VOVCA9IDB4MDAwMSwJLyoqPCB2aWRlbyBjb2xvciBpcyBwcmVzZW50LiAqLwotCUhQSV9UVU5FUl9WSURFT19JU182MEhaID0gMHgwMDIwLAkvKio8IDYwIGh6IHZpZGVvIGRldGVjdGVkLiAqLwotCUhQSV9UVU5FUl9WSURFT19IT1JaX1NZTkNfTUlTU0lORyA9IDB4MDA0MCwJLyoqPCB2aWRlbyBIU1lOQyBpcyBtaXNzaW5nLiAqLwotCUhQSV9UVU5FUl9WSURFT19TVEFUVVNfVkFMSUQgPSAweDAxMDAsCS8qKjwgdmlkZW8gc3RhdHVzIGlzIHZhbGlkLiAqLwotCUhQSV9UVU5FUl9QTExfTE9DS0VEID0gMHgxMDAwLAkJLyoqPCB0aGUgdHVuZXIncyBQTEwgaXMgbG9ja2VkLiAqLwotCUhQSV9UVU5FUl9GTV9TVEVSRU8gPSAweDIwMDAsCQkvKio8IHR1bmVyIHJlcG9ydHMgYmFjayBGTSBzdGVyZW8uICovCi0JSFBJX1RVTkVSX0RJR0lUQUwgPSAweDAyMDAsCQkvKio8IHR1bmVyIHJlcG9ydHMgZGlnaXRhbCBwcm9ncmFtbWluZy4gKi8KLQlIUElfVFVORVJfTVVMVElQUk9HUkFNID0gMHgwNDAwCQkvKio8IHR1bmVyIHJlcG9ydHMgbXVsdGlwbGUgcHJvZ3JhbXMuICovCisJSFBJX1RVTkVSX1ZJREVPX0lTXzYwSFogPSAweDAwMjAsIC8qKjwgNjAgaHogdmlkZW8gZGV0ZWN0ZWQuICovCisJSFBJX1RVTkVSX1ZJREVPX0hPUlpfU1lOQ19NSVNTSU5HID0gMHgwMDQwLCAvKio8IHZpZGVvIEhTWU5DIGlzIG1pc3NpbmcuICovCisJSFBJX1RVTkVSX1ZJREVPX1NUQVRVU19WQUxJRCA9IDB4MDEwMCwgLyoqPCB2aWRlbyBzdGF0dXMgaXMgdmFsaWQuICovCisJSFBJX1RVTkVSX0RJR0lUQUwgPSAweDAyMDAsIC8qKjwgdHVuZXIgcmVwb3J0cyBkaWdpdGFsIHByb2dyYW1taW5nLiAqLworCUhQSV9UVU5FUl9NVUxUSVBST0dSQU0gPSAweDA0MDAsIC8qKjwgdHVuZXIgcmVwb3J0cyBtdWx0aXBsZSBwcm9ncmFtcy4gKi8KKwlIUElfVFVORVJfUExMX0xPQ0tFRCA9IDB4MTAwMCwgLyoqPCB0aGUgdHVuZXIncyBQTEwgaXMgbG9ja2VkLiAqLworCUhQSV9UVU5FUl9GTV9TVEVSRU8gPSAweDIwMDAgLyoqPCB0dW5lciByZXBvcnRzIGJhY2sgRk0gc3RlcmVvLiAqLwogfTsKIAogLyoqIENoYW5uZWwgTW9kZXMKQEAgLTgzOSw3ICs4NDcsNyBAQAogCUhQSV9TQU1QTEVDTE9DS19TT1VSQ0VfTEFTVCA9IDEwCiB9OwogCi0vKiogRXF1YWxpemVyIGZpbHRlciB0eXBlcy4gVXNlZCBieSBIUElfUGFyYW1ldHJpY0VRX1NldEJhbmQoKQorLyoqIEVxdWFsaXplciBmaWx0ZXIgdHlwZXMuIFVzZWQgYnkgSFBJX1BhcmFtZXRyaWNFcV9TZXRCYW5kKCkKIFxpbmdyb3VwIHBhcm1lcQogKi8KIGVudW0gSFBJX0ZJTFRFUl9UWVBFIHsKQEAgLTg4Miw3ICs4OTAsNyBAQAogCUhQSV9FUlJPUl9JTlZBTElEX09CSiA9IDEwMSwKIAkvKiogRnVuY3Rpb24gZG9lcyBub3QgZXhpc3QuICovCiAJSFBJX0VSUk9SX0lOVkFMSURfRlVOQyA9IDEwMiwKLQkvKiogVGhlIHNwZWNpZmllZCBvYmplY3QgKGFkYXB0ZXIvU3RyZWFtKSBkb2VzIG5vdCBleGlzdC4gKi8KKwkvKiogVGhlIHNwZWNpZmllZCBvYmplY3QgZG9lcyBub3QgZXhpc3QuICovCiAJSFBJX0VSUk9SX0lOVkFMSURfT0JKX0lOREVYID0gMTAzLAogCS8qKiBUcnlpbmcgdG8gYWNjZXNzIGFuIG9iamVjdCB0aGF0IGhhcyBub3QgYmVlbiBvcGVuZWQgeWV0LiAqLwogCUhQSV9FUlJPUl9PQkpfTk9UX09QRU4gPSAxMDQsCkBAIC04OTAsOCArODk4LDcgQEAKIAlIUElfRVJST1JfT0JKX0FMUkVBRFlfT1BFTiA9IDEwNSwKIAkvKiogUENJLCBJU0EgcmVzb3VyY2Ugbm90IHZhbGlkLiAqLwogCUhQSV9FUlJPUl9JTlZBTElEX1JFU09VUkNFID0gMTA2LAotCS8qKiBHZXRJbmZvIGNhbGwgZnJvbSBTdWJTeXNGaW5kQWRhcHRlcnMgZmFpbGVkLiAqLwotCUhQSV9FUlJPUl9TVUJTWVNGSU5EQURBUFRFUlNfR0VUSU5GTyA9IDEwNywKKwkvKiBIUElfRVJST1JfU1VCU1lTRklOREFEQVBURVJTX0dFVElORk89IDEwNyAqLwogCS8qKiBEZWZhdWx0IHJlc3BvbnNlIHdhcyBuZXZlciB1cGRhdGVkIHdpdGggYWN0dWFsIGVycm9yIGNvZGUuICovCiAJSFBJX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgPSAxMDgsCiAJLyoqIHdTaXplIGZpZWxkIG9mIHJlc3BvbnNlIHdhcyBub3QgdXBkYXRlZCwKQEAgLTg5OSwzOCArOTA2LDQ0IEBACiAJSFBJX0VSUk9SX1BST0NFU1NJTkdfTUVTU0FHRSA9IDEwOSwKIAkvKiogVGhlIG5ldHdvcmsgZGlkIG5vdCByZXNwb25kIGluIGEgdGltZWx5IG1hbm5lci4gKi8KIAlIUElfRVJST1JfTkVUV09SS19USU1FT1VUID0gMTEwLAotCS8qKiBBbiBIUEkgaGFuZGxlIGlzIGludmFsaWQgKHVuaW5pdGlhbGlzZWQ/KS4gKi8KKwkvKiBBbiBIUEkgaGFuZGxlIGlzIGludmFsaWQgKHVuaW5pdGlhbGlzZWQ/KS4gKi8KIAlIUElfRVJST1JfSU5WQUxJRF9IQU5ETEUgPSAxMTEsCiAJLyoqIEEgZnVuY3Rpb24gb3IgYXR0cmlidXRlIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQuICovCiAJSFBJX0VSUk9SX1VOSU1QTEVNRU5URUQgPSAxMTIsCi0JLyoqIFRoZXJlIGFyZSB0b28gbWFueSBjbGllbnRzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGEgbmV0d29yayByZXNvdXJjZS4gKi8KKwkvKiogVGhlcmUgYXJlIHRvbyBtYW55IGNsaWVudHMgYXR0ZW1wdGluZworCSAgICB0byBhY2Nlc3MgYSBuZXR3b3JrIHJlc291cmNlLiAqLwogCUhQSV9FUlJPUl9ORVRXT1JLX1RPT19NQU5ZX0NMSUVOVFMgPSAxMTMsCi0JLyoqIFJlc3BvbnNlIGJ1ZmZlciBwYXNzZWQgdG8gSFBJX01lc3NhZ2Ugd2FzIHNtYWxsZXIgdGhhbiByZXR1cm5lZCByZXNwb25zZSAqLworCS8qKiBSZXNwb25zZSBidWZmZXIgcGFzc2VkIHRvIEhQSV9NZXNzYWdlCisJICAgIHdhcyBzbWFsbGVyIHRoYW4gcmV0dXJuZWQgcmVzcG9uc2UuCisJICAgIHdTcGVjaWZpY0Vycm9yIGZpZWxkIG9mIGhwaSByZXNwb25zZSBjb250YWlucyB0aGUgcmVxdWlyZWQgc2l6ZS4KKwkqLwogCUhQSV9FUlJPUl9SRVNQT05TRV9CVUZGRVJfVE9PX1NNQUxMID0gMTE0LAogCS8qKiBUaGUgcmV0dXJuZWQgcmVzcG9uc2UgZGlkIG5vdCBtYXRjaCB0aGUgc2VudCBtZXNzYWdlICovCiAJSFBJX0VSUk9SX1JFU1BPTlNFX01JU01BVENIID0gMTE1LAorCS8qKiBBIGNvbnRyb2wgc2V0dGluZyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2FjaGVkIHdhcyBub3QuICovCisJSFBJX0VSUk9SX0NPTlRST0xfQ0FDSElORyA9IDExNiwKKwkvKiogQSBtZXNzYWdlIGJ1ZmZlciBpbiB0aGUgcGF0aCB0byB0aGUgYWRhcHRlciB3YXMgc21hbGxlcgorCSAgICB0aGFuIHRoZSBtZXNzYWdlIHNpemUuCisJICAgIHdTcGVjaWZpY0Vycm9yIGZpZWxkIG9mIGhwaSByZXNwb25zZSBjb250YWlucyB0aGUgYWN0dWFsIHNpemUuCisJKi8KKwlIUElfRVJST1JfTUVTU0FHRV9CVUZGRVJfVE9PX1NNQUxMID0gMTE3LAogCi0JLyoqIFRvbyBtYW55IGFkYXB0ZXJzLiovCi0JSFBJX0VSUk9SX1RPT19NQU5ZX0FEQVBURVJTID0gMjAwLAorCS8qIEhQSV9FUlJPUl9UT09fTUFOWV9BREFQVEVSUz0gMjAwICovCiAJLyoqIEJhZCBhZHBhdGVyLiAqLwogCUhQSV9FUlJPUl9CQURfQURBUFRFUiA9IDIwMSwKIAkvKiogQWRhcHRlciBudW1iZXIgb3V0IG9mIHJhbmdlIG9yIG5vdCBzZXQgcHJvcGVybHkuICovCiAJSFBJX0VSUk9SX0JBRF9BREFQVEVSX05VTUJFUiA9IDIwMiwKIAkvKiogMiBhZGFwdGVycyB3aXRoIHRoZSBzYW1lIGFkYXB0ZXIgbnVtYmVyLiAqLwotCUhQSV9EVVBMSUNBVEVfQURBUFRFUl9OVU1CRVIgPSAyMDMsCi0JLyoqIERTUCBjb2RlIGZhaWxlZCB0byBib290bG9hZC4gKi8KKwlIUElfRVJST1JfRFVQTElDQVRFX0FEQVBURVJfTlVNQkVSID0gMjAzLAorCS8qKiBEU1AgY29kZSBmYWlsZWQgdG8gYm9vdGxvYWQuICh1bnVzZWQ/KSAqLwogCUhQSV9FUlJPUl9EU1BfQk9PVExPQUQgPSAyMDQsCi0JLyoqIEFkYXB0ZXIgZmFpbGVkIERTUCBjb2RlIHNlbGYgdGVzdC4gKi8KLQlIUElfRVJST1JfRFNQX1NFTEZURVNUID0gMjA1LAogCS8qKiBDb3VsZG4ndCBmaW5kIG9yIG9wZW4gdGhlIERTUCBjb2RlIGZpbGUuICovCiAJSFBJX0VSUk9SX0RTUF9GSUxFX05PVF9GT1VORCA9IDIwNiwKIAkvKiogSW50ZXJuYWwgRFNQIGhhcmR3YXJlIGVycm9yLiAqLwogCUhQSV9FUlJPUl9EU1BfSEFSRFdBUkUgPSAyMDcsCi0JLyoqIENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgaW4gRE9TLiAqLwotCUhQSV9FUlJPUl9ET1NfTUVNT1JZX0FMTE9DID0gMjA4LAogCS8qKiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5ICovCiAJSFBJX0VSUk9SX01FTU9SWV9BTExPQyA9IDIwOCwKLQkvKiogRmFpbGVkIHRvIGNvcnJlY3RseSBsb2FkL2NvbmZpZyBQTEQgLiovCisJLyoqIEZhaWxlZCB0byBjb3JyZWN0bHkgbG9hZC9jb25maWcgUExELiAodW51c2VkKSAqLwogCUhQSV9FUlJPUl9QTERfTE9BRCA9IDIwOSwKIAkvKiogVW5leHBlY3RlZCBlbmQgb2YgZmlsZSwgYmxvY2sgbGVuZ3RoIHRvbyBiaWcgZXRjLiAqLwogCUhQSV9FUlJPUl9EU1BfRklMRV9GT1JNQVQgPSAyMTAsCkBAIC05MzksOCArOTUyLDcgQEAKIAlIUElfRVJST1JfRFNQX0ZJTEVfQUNDRVNTX0RFTklFRCA9IDIxMSwKIAkvKiogRmlyc3QgRFNQIGNvZGUgc2VjdGlvbiBoZWFkZXIgbm90IGZvdW5kIGluIERTUCBmaWxlLiAqLwogCUhQSV9FUlJPUl9EU1BfRklMRV9OT19IRUFERVIgPSAyMTIsCi0JLyoqIEZpbGUgcmVhZCBvcGVyYXRpb24gb24gRFNQIGNvZGUgZmlsZSBmYWlsZWQuICovCi0JSFBJX0VSUk9SX0RTUF9GSUxFX1JFQURfRVJST1IgPSAyMTMsCisJLyogSFBJX0VSUk9SX0RTUF9GSUxFX1JFQURfRVJST1I9IDIxMywgKi8KIAkvKiogRFNQIGNvZGUgZm9yIGFkYXB0ZXIgZmFtaWx5IG5vdCBmb3VuZC4gKi8KIAlIUElfRVJST1JfRFNQX1NFQ1RJT05fTk9UX0ZPVU5EID0gMjE0LAogCS8qKiBPdGhlciBPUyBzcGVjaWZpYyBlcnJvciBvcGVuaW5nIERTUCBmaWxlLiAqLwpAQCAtOTUwLDIzICs5NjIsMjEgQEAKIAkvKiogRFNQIGNvZGUgc2VjdGlvbiBoZWFkZXIgaGFkIHNpemUgPT0gMC4gKi8KIAlIUElfRVJST1JfRFNQX0ZJTEVfTlVMTF9IRUFERVIgPSAyMTcsCiAKLQkvKiogQmFzZSBudW1iZXIgZm9yIGZsYXNoIGVycm9ycy4gKi8KLQlIUElfRVJST1JfRkxBU0ggPSAyMjAsCisJLyogSFBJX0VSUk9SX0ZMQVNIID0gMjIwLCAqLwogCiAJLyoqIEZsYXNoIGhhcyBiYWQgY2hlY2tzdW0gKi8KLQlIUElfRVJST1JfQkFEX0NIRUNLU1VNID0gKEhQSV9FUlJPUl9GTEFTSCArIDEpLAotCUhQSV9FUlJPUl9CQURfU0VRVUVOQ0UgPSAoSFBJX0VSUk9SX0ZMQVNIICsgMiksCi0JSFBJX0VSUk9SX0ZMQVNIX0VSQVNFID0gKEhQSV9FUlJPUl9GTEFTSCArIDMpLAotCUhQSV9FUlJPUl9GTEFTSF9QUk9HUkFNID0gKEhQSV9FUlJPUl9GTEFTSCArIDQpLAotCUhQSV9FUlJPUl9GTEFTSF9WRVJJRlkgPSAoSFBJX0VSUk9SX0ZMQVNIICsgNSksCi0JSFBJX0VSUk9SX0ZMQVNIX1RZUEUgPSAoSFBJX0VSUk9SX0ZMQVNIICsgNiksCi0JSFBJX0VSUk9SX0ZMQVNIX1NUQVJUID0gKEhQSV9FUlJPUl9GTEFTSCArIDcpLAorCUhQSV9FUlJPUl9CQURfQ0hFQ0tTVU0gPSAyMjEsCisJSFBJX0VSUk9SX0JBRF9TRVFVRU5DRSA9IDIyMiwKKwlIUElfRVJST1JfRkxBU0hfRVJBU0UgPSAyMjMsCisJSFBJX0VSUk9SX0ZMQVNIX1BST0dSQU0gPSAyMjQsCisJSFBJX0VSUk9SX0ZMQVNIX1ZFUklGWSA9IDIyNSwKKwlIUElfRVJST1JfRkxBU0hfVFlQRSA9IDIyNiwKKwlIUElfRVJST1JfRkxBU0hfU1RBUlQgPSAyMjcsCiAKIAkvKiogUmVzZXJ2ZWQgZm9yIE9FTXMuICovCiAJSFBJX0VSUk9SX1JFU0VSVkVEXzEgPSAyOTAsCiAKLQkvKiogU3RyZWFtIGRvZXMgbm90IGV4aXN0LiAqLwotCUhQSV9FUlJPUl9JTlZBTElEX1NUUkVBTSA9IDMwMCwKKwkvKiBIUElfRVJST1JfSU5WQUxJRF9TVFJFQU0gPSAzMDAgdXNlIEhQSV9FUlJPUl9JTlZBTElEX09CSl9JTkRFWCAqLwogCS8qKiBJbnZhbGlkIGNvbXByZXNzaW9uIGZvcm1hdC4gKi8KIAlIUElfRVJST1JfSU5WQUxJRF9GT1JNQVQgPSAzMDEsCiAJLyoqIEludmFsaWQgZm9ybWF0IHNhbXBsZXJhdGUgKi8KQEAgLTk3NywyMSArOTg3LDE5IEBACiAJSFBJX0VSUk9SX0lOVkFMSURfQklUUkFURSA9IDMwNCwKIAkvKiogSW52YWxpZCBkYXRhc2l6ZSB1c2VkIGZvciBzdHJlYW0gcmVhZC93cml0ZS4gKi8KIAlIUElfRVJST1JfSU5WQUxJRF9EQVRBU0laRSA9IDMwNSwKLQkvKiogU3RyZWFtIGJ1ZmZlciBpcyBmdWxsIGR1cmluZyBzdHJlYW0gd3JpdGUuICovCi0JSFBJX0VSUk9SX0JVRkZFUl9GVUxMID0gMzA2LAotCS8qKiBTdHJlYW0gYnVmZmVyIGlzIGVtcHR5IGR1cmluZyBzdHJlYW0gcmVhZC4gKi8KLQlIUElfRVJST1JfQlVGRkVSX0VNUFRZID0gMzA3LAotCS8qKiBJbnZhbGlkIGRhdGFzaXplIHVzZWQgZm9yIHN0cmVhbSByZWFkL3dyaXRlLiAqLwotCUhQSV9FUlJPUl9JTlZBTElEX0RBVEFfVFJBTlNGRVIgPSAzMDgsCisJLyogSFBJX0VSUk9SX0JVRkZFUl9GVUxMID0gMzA2IHVzZSBIUElfRVJST1JfSU5WQUxJRF9EQVRBU0laRSAqLworCS8qIEhQSV9FUlJPUl9CVUZGRVJfRU1QVFkgPSAzMDcgdXNlIEhQSV9FUlJPUl9JTlZBTElEX0RBVEFTSVpFICovCisJLyoqIE51bGwgZGF0YSBwb2ludGVyIHVzZWQgZm9yIHN0cmVhbSByZWFkL3dyaXRlLiAqLworCUhQSV9FUlJPUl9JTlZBTElEX0RBVEFfUE9JTlRFUiA9IDMwOCwKIAkvKiogUGFja2V0IG9yZGVyaW5nIGVycm9yIGZvciBzdHJlYW0gcmVhZC93cml0ZS4gKi8KIAlIUElfRVJST1JfSU5WQUxJRF9QQUNLRVRfT1JERVIgPSAzMDksCiAKIAkvKiogT2JqZWN0IGNhbid0IGRvIHJlcXVlc3RlZCBvcGVyYXRpb24gaW4gaXRzIGN1cnJlbnQKLQlzdGF0ZSwgZWcgc2V0IGZvcm1hdCwgY2hhbmdlIHJlYyBtdXggc3RhdGUgd2hpbGUgcmVjb3JkaW5nLiovCisJICAgIHN0YXRlLCBlZyBzZXQgZm9ybWF0LCBjaGFuZ2UgcmVjIG11eCBzdGF0ZSB3aGlsZSByZWNvcmRpbmcuKi8KIAlIUElfRVJST1JfSU5WQUxJRF9PUEVSQVRJT04gPSAzMTAsCiAKLQkvKiogV2hlcmUgYW4gU1JHIGlzIHNoYXJlZCBhbW9uZ3N0IHN0cmVhbXMsIGFuIGluY29tcGF0aWJsZSBzYW1wbGVyYXRlIGlzIG9uZQotCXRoYXQgaXMgZGlmZmVyZW50IHRvIGFueSBjdXJyZW50bHkgcGxheWluZyBvciByZWNvcmRpbmcgc3RyZWFtLiAqLworCS8qKiBXaGVyZSBhIFNSRyBpcyBzaGFyZWQgYW1vbmdzdCBzdHJlYW1zLCBhbiBpbmNvbXBhdGlibGUgc2FtcGxlcmF0ZQorCSAgICBpcyBvbmUgdGhhdCBpcyBkaWZmZXJlbnQgdG8gYW55IGN1cnJlbnRseSBhY3RpdmUgc3RyZWFtLiAqLwogCUhQSV9FUlJPUl9JTkNPTVBBVElCTEVfU0FNUExFUkFURSA9IDMxMSwKIAkvKiogQWRhcHRlciBtb2RlIGlzIGlsbGVnYWwuKi8KIAlIUElfRVJST1JfQkFEX0FEQVBURVJfTU9ERSA9IDMxMiwKQEAgLTEwMDQsNiArMTAxMiw4IEBACiAJSFBJX0VSUk9SX05PX0lOVEVSQURBUFRFUl9HUk9VUFMgPSAzMTQsCiAJLyoqIFN0cmVhbXMgb24gZGlmZmVyZW50IERTUHMgY2Fubm90IGJlIGdyb3VwZWQuICovCiAJSFBJX0VSUk9SX05PX0lOVEVSRFNQX0dST1VQUyA9IDMxNSwKKwkvKiogU3RyZWFtIHdhaXQgY2FuY2VsbGVkIGJlZm9yZSB0aHJlc2hvbGQgcmVhY2hlZC4gKi8KKwlIUElfRVJST1JfV0FJVF9DQU5DRUxMRUQgPSAzMTYsCiAKIAkvKiogSW52YWxpZCBtaXhlciBub2RlIGZvciB0aGlzIGFkYXB0ZXIuICovCiAJSFBJX0VSUk9SX0lOVkFMSURfTk9ERSA9IDQwMCwKQEAgLTEwMTcsNiArMTAyNyw3IEBACiAJSFBJX0VSUk9SX0NPTlRST0xfRElTQUJMRUQgPSA0MDQsCiAJLyoqIEkyQyB0cmFuc2FjdGlvbiBmYWlsZWQgZHVlIHRvIGEgbWlzc2luZyBBQ0suICovCiAJSFBJX0VSUk9SX0NPTlRST0xfSTJDX01JU1NJTkdfQUNLID0gNDA1LAorCUhQSV9FUlJPUl9JMkNfTUlTU0lOR19BQ0sgPSA0MDUsCiAJLyoqIENvbnRyb2wgaXMgYnVzeSwgb3IgY29taW5nIG91dCBvZgogCXJlc2V0IGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgYXQgdGhpcyB0aW1lLiAqLwogCUhQSV9FUlJPUl9DT05UUk9MX05PVF9SRUFEWSA9IDQwNywKQEAgLTEwMjcsNyArMTAzOCw2IEBACiAJSFBJX0VSUk9SX05WTUVNX0ZBSUwgPSA0NTIsCiAKIAkvKiogSTJDICovCi0JSFBJX0VSUk9SX0kyQ19NSVNTSU5HX0FDSyA9IEhQSV9FUlJPUl9DT05UUk9MX0kyQ19NSVNTSU5HX0FDSywKIAlIUElfRVJST1JfSTJDX0JBRF9BRFIgPSA0NjAsCiAKIAkvKiogRW50aXR5IGVycm9ycyAqLwpAQCAtMTAzNSw2ICsxMDQ1LDcgQEAKIAlIUElfRVJST1JfRU5USVRZX0lURU1fQ09VTlQgPSA0NzEsCiAJSFBJX0VSUk9SX0VOVElUWV9UWVBFX0lOVkFMSUQgPSA0NzIsCiAJSFBJX0VSUk9SX0VOVElUWV9ST0xFX0lOVkFMSUQgPSA0NzMsCisJSFBJX0VSUk9SX0VOVElUWV9TSVpFX01JU01BVENIID0gNDc0LAogCiAJLyogQUVTMTggc3BlY2lmaWMgZXJyb3JzIHdlcmUgNTAwLi41MDcgKi8KIApAQCAtMTA0NCwxMSArMTA1NSwxOCBAQAogCS8qKiBocGlvY3QzMi5jIGNhbid0IG9idGFpbiBtdXRleCAqLwogCUhQSV9FUlJPUl9NVVRFWF9USU1FT1VUID0gNzAwLAogCi0JLyoqIGVycm9ycyBmcm9tIEhQSSBiYWNrZW5kcyBoYXZlIHZhbHVlcyA+PSB0aGlzICovCisJLyoqIEJhY2tlbmQgZXJyb3JzIHVzZWQgdG8gYmUgZ3JlYXRlciB0aGFuIHRoaXMuCisJICAgIFxkZXByZWNhdGVkIE5vdywgYWxsIGJhY2tlbmRzIHJldHVybiBvbmx5IGVycm9ycyBkZWZpbmVkIGhlcmUgaW4gaHBpLmgKKwkqLwogCUhQSV9FUlJPUl9CQUNLRU5EX0JBU0UgPSA5MDAsCiAKLQkvKiogaW5kaWNhdGVzIGEgY2FjaGVkIHUxNiB2YWx1ZSBpcyBpbnZhbGlkLiAqLwotCUhQSV9FUlJPUl9JTExFR0FMX0NBQ0hFX1ZBTFVFID0gMHhmZmZmCisJLyoqIENvbW11bmljYXRpb24gd2l0aCBEU1AgZmFpbGVkICovCisJSFBJX0VSUk9SX0RTUF9DT01NVU5JQ0FUSU9OID0gOTAwCisJCS8qIE5vdGUgdGhhdCB0aGUgZHNwIGNvbW11bmljYXRpb24gZXJyb3IgaXMgc2V0IHRvIHRoaXMgdmFsdWUgc28gdGhhdAorCQkgICBpdCByZW1haW5zIGNvbXBhdGlibGUgd2l0aCBhbnkgc29mdHdhcmUgdGhhdCBleHBlY3RzIHN1Y2ggZXJyb3JzCisJCSAgIHRvIGJlIGJhY2tlbmQgZXJyb3JzIGkuZS4gPj0gOTAwLgorCQkgICBEbyBub3QgZGVmaW5lIGFueSBuZXcgZXJyb3IgY29kZXMgd2l0aCB2YWx1ZXMgPiA5MDAuCisJCSAqLwogfTsKIAogLyoqIFxkZWZncm91cCBtYXhpbXVtcyBIUEkgbWF4aW11bSB2YWx1ZXMKQEAgLTEwNzUsNyArMTA5Myw3IEBACiAKIC8qKlx9Ki8KIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLworLyoqKioqKioqKioqKioqLwogLyogU1RSVUNUVVJFUyAqLwogI2lmbmRlZiBESVNBQkxFX1BSQUdNQV9QQUNLMQogI3ByYWdtYSBwYWNrKHB1c2gsIDEpCkBAIC0xMDkyLDcgKzExMTAsNyBAQAogCQkJCS8qKjwgU3RlcmVvL0pvaW50U3RlcmVvL01vbm8gKi8KIAl1MTYgbW9kZV9sZWdhY3k7CiAJCQkJLyoqPCBMZWdhY3kgYW5jaWxsYXJ5IG1vZGUgb3IgaWRsZSBiaXQgICovCi0JdTE2IHVudXNlZDsJICAgICAgLyoqPCB1bnVzZWQgKi8KKwl1MTYgdW51c2VkOwkgICAgICAvKio8IFVudXNlZCAqLwogCXUxNiBjaGFubmVsczsgLyoqPCAxLDIuLi4sIChvciBhbmNpbGxhcnkgbW9kZSBvciBpZGxlIGJpdCAqLwogCXUxNiBmb3JtYXQ7ICAgLyoqPCBIUElfRk9STUFUX1BDTTE2LCBfTVBFRyBldGMuIHNlZSAjSFBJX0ZPUk1BVFMuICovCiB9OwpAQCAtMTEwNiw5MzAgKzExMjQsNTk0IEBACiAqLwogc3RydWN0IGhwaV9hc3luY19ldmVudCB7CiAJdTE2IGV2ZW50X3R5cGU7CS8qKjwgdHlwZSBvZiBldmVudC4gXHNhIGFzeW5jX2V2ZW50ICAqLwotCXUxNiBzZXF1ZW5jZTsgIC8qKjwgc2VxdWVuY2UgbnVtYmVyLCBhbGxvd3MgbG9zdCBldmVudCBkZXRlY3Rpb24gKi8KLQl1MzIgc3RhdGU7ICAgIC8qKjwgbmV3IHN0YXRlICovCi0JdTMyIGhfb2JqZWN0OwkgLyoqPCBoYW5kbGUgdG8gdGhlIG9iamVjdCByZXR1cm5pbmcgdGhlIGV2ZW50LiAqLworCXUxNiBzZXF1ZW5jZTsgLyoqPCBTZXF1ZW5jZSBudW1iZXIsIGFsbG93cyBsb3N0IGV2ZW50IGRldGVjdGlvbiAqLworCXUzMiBzdGF0ZTsgLyoqPCBOZXcgc3RhdGUgKi8KKwl1MzIgaF9vYmplY3Q7IC8qKjwgaGFuZGxlIHRvIHRoZSBvYmplY3QgcmV0dXJuaW5nIHRoZSBldmVudC4gKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQl1MTYgaW5kZXg7IC8qKjwgR1BJTyBiaXQgaW5kZXguICovCiAJCX0gZ3BpbzsKIAkJc3RydWN0IHsKIAkJCXUxNiBub2RlX2luZGV4OwkvKio8IHdoYXQgbm9kZSBpcyB0aGUgY29udHJvbCBvbiA/ICovCi0JCQl1MTYgbm9kZV90eXBlOwkvKio8IHdoYXQgdHlwZSBvZiBub2RlIGlzIHRoZSBjb250cm9sIG9uID8gKi8KKwkJCXUxNiBub2RlX3R5cGU7IC8qKjwgd2hhdCB0eXBlIG9mIG5vZGUgaXMgdGhlIGNvbnRyb2wgb24gPyAqLwogCQl9IGNvbnRyb2w7CiAJfSB1OwogfTsKIAotLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLS8qIFB1YmxpYyBIUEkgRW50aXR5IHJlbGF0ZWQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotc3RydWN0IGhwaV9lbnRpdHk7Ci0KLWVudW0gZV9lbnRpdHlfdHlwZSB7Ci0JZW50aXR5X3R5cGVfbnVsbCwKLQllbnRpdHlfdHlwZV9zZXF1ZW5jZSwJLyogc2VxdWVuY2Ugb2YgcG90ZW50aWFsbHkgaGV0ZXJvZ2VuZW91cyBUTFYgZW50aXRpZXMgKi8KLQotCWVudGl0eV90eXBlX3JlZmVyZW5jZSwJLyogcmVmZXJzIHRvIGEgVExWIGVudGl0eSBvciBOVUxMICovCi0KLQllbnRpdHlfdHlwZV9pbnQsCS8qIDMyIGJpdCAqLwotCWVudGl0eV90eXBlX2Zsb2F0LAkvKiBpZWVlNzU0IGJpbmFyeSAzMiBiaXQgZW5jb2RpbmcgKi8KLQllbnRpdHlfdHlwZV9kb3VibGUsCi0KLQllbnRpdHlfdHlwZV9jc3RyaW5nLAotCWVudGl0eV90eXBlX29jdGV0LAotCWVudGl0eV90eXBlX2lwNF9hZGRyZXNzLAotCWVudGl0eV90eXBlX2lwNl9hZGRyZXNzLAotCWVudGl0eV90eXBlX21hY19hZGRyZXNzLAotCi0JTEFTVF9FTlRJVFlfVFlQRQotfTsKLQotZW51bSBlX2VudGl0eV9yb2xlIHsKLQllbnRpdHlfcm9sZV9udWxsLAotCWVudGl0eV9yb2xlX3ZhbHVlLAotCWVudGl0eV9yb2xlX2NsYXNzbmFtZSwKLQotCWVudGl0eV9yb2xlX3VuaXRzLAotCWVudGl0eV9yb2xlX2ZsYWdzLAotCWVudGl0eV9yb2xlX3JhbmdlLAotCi0JZW50aXR5X3JvbGVfbWFwcGluZywKLQllbnRpdHlfcm9sZV9lbnVtLAotCi0JZW50aXR5X3JvbGVfaW5zdGFuY2Vfb2YsCi0JZW50aXR5X3JvbGVfZGVwZW5kc19vbiwKLQllbnRpdHlfcm9sZV9tZW1iZXJfb2ZfZ3JvdXAsCi0JZW50aXR5X3JvbGVfdmFsdWVfY29uc3RyYWludCwKLQllbnRpdHlfcm9sZV9wYXJhbWV0ZXJfcG9ydCwKLQotCWVudGl0eV9yb2xlX2Jsb2NrLAotCWVudGl0eV9yb2xlX25vZGVfZ3JvdXAsCi0JZW50aXR5X3JvbGVfYXVkaW9fcG9ydCwKLQllbnRpdHlfcm9sZV9jbG9ja19wb3J0LAotCUxBU1RfRU5USVRZX1JPTEUKLX07Ci0KIC8qIHNraXAgaG9zdCBzaWRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IKICAgIERTUCBjb21waWxlIGFuZCBkb2N1bWVudGF0aW9uIGV4dHJhY3Rpb24gKi8KIAotc3RydWN0IGhwaV9oc3Vic3lzIHsKLQlpbnQgbm90X3JlYWxseV91c2VkOwotfTsKLQogI2lmbmRlZiBESVNBQkxFX1BSQUdNQV9QQUNLMQogI3ByYWdtYSBwYWNrKHBvcCkKICNlbmRpZgogCi0vKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCisvKioqKioqKioqKioqKioqKiovCiAvKiBIUEkgRlVOQ1RJT05TICovCisvKioqKioqKioqKioqKioqKiovCiAKLS8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCi0vKiBEQVRBIGFuZCBGT1JNQVQgYW5kIFNUUkVBTSAqLwotCisvKiBTdHJlYW0gKi8KIHUxNiBocGlfc3RyZWFtX2VzdGltYXRlX2J1ZmZlcl9zaXplKHN0cnVjdCBocGlfZm9ybWF0ICpwRiwKIAl1MzIgaG9zdF9wb2xsaW5nX3JhdGVfaW5fbWlsbGlfc2Vjb25kcywgdTMyICpyZWNvbW1lbmRlZF9idWZmZXJfc2l6ZSk7CiAKLS8qLy8vLy8vLy8vLy8gKi8KLS8qIFNVQiBTWVNURU0gKi8KLXN0cnVjdCBocGlfaHN1YnN5cyAqaHBpX3N1YnN5c19jcmVhdGUodm9pZAotCSk7CisvKioqKioqKioqKioqKi8KKy8qIFN1YlN5c3RlbSAqLworLyoqKioqKioqKioqKiovCiAKLXZvaWQgaHBpX3N1YnN5c19mcmVlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzKTsKK3UxNiBocGlfc3Vic3lzX2dldF92ZXJzaW9uX2V4KHUzMiAqcHZlcnNpb25fZXgpOwogCi11MTYgaHBpX3N1YnN5c19nZXRfdmVyc2lvbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgKnB2ZXJzaW9uKTsKK3UxNiBocGlfc3Vic3lzX2dldF9udW1fYWRhcHRlcnMoaW50ICpwbl9udW1fYWRhcHRlcnMpOwogCi11MTYgaHBpX3N1YnN5c19nZXRfdmVyc2lvbl9leChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgKnB2ZXJzaW9uX2V4KTsKK3UxNiBocGlfc3Vic3lzX2dldF9hZGFwdGVyKGludCBpdGVyYXRvciwgdTMyICpwYWRhcHRlcl9pbmRleCwKKwl1MTYgKnB3X2FkYXB0ZXJfdHlwZSk7CiAKLXUxNiBocGlfc3Vic3lzX2dldF9pbmZvKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgKnB2ZXJzaW9uLAotCXUxNiAqcHdfbnVtX2FkYXB0ZXJzLCB1MTYgYXdfYWRhcHRlcl9saXN0W10sIHUxNiBsaXN0X2xlbmd0aCk7CisvKioqKioqKioqKiovCisvKiBBZGFwdGVyICovCisvKioqKioqKioqKiovCiAKLXUxNiBocGlfc3Vic3lzX2ZpbmRfYWRhcHRlcnMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2ICpwd19udW1fYWRhcHRlcnMsIHUxNiBhd19hZGFwdGVyX2xpc3RbXSwgdTE2IGxpc3RfbGVuZ3RoKTsKK3UxNiBocGlfYWRhcHRlcl9vcGVuKHUxNiBhZGFwdGVyX2luZGV4KTsKIAotdTE2IGhwaV9zdWJzeXNfZ2V0X251bV9hZGFwdGVycyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQlpbnQgKnBuX251bV9hZGFwdGVycyk7Cit1MTYgaHBpX2FkYXB0ZXJfY2xvc2UodTE2IGFkYXB0ZXJfaW5kZXgpOwogCi11MTYgaHBpX3N1YnN5c19nZXRfYWRhcHRlcihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgaW50IGl0ZXJhdG9yLAotCXUzMiAqcGFkYXB0ZXJfaW5kZXgsIHUxNiAqcHdfYWRhcHRlcl90eXBlKTsKK3UxNiBocGlfYWRhcHRlcl9nZXRfaW5mbyh1MTYgYWRhcHRlcl9pbmRleCwgdTE2ICpwd19udW1fb3V0c3RyZWFtcywKKwl1MTYgKnB3X251bV9pbnN0cmVhbXMsIHUxNiAqcHdfdmVyc2lvbiwgdTMyICpwc2VyaWFsX251bWJlciwKKwl1MTYgKnB3X2FkYXB0ZXJfdHlwZSk7CiAKLXUxNiBocGlfc3Vic3lzX3NzeDJfYnlwYXNzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MTYgYnlwYXNzKTsKK3UxNiBocGlfYWRhcHRlcl9nZXRfbW9kdWxlX2J5X2luZGV4KHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgbW9kdWxlX2luZGV4LAorCXUxNiAqcHdfbnVtX291dHB1dHMsIHUxNiAqcHdfbnVtX2lucHV0cywgdTE2ICpwd192ZXJzaW9uLAorCXUzMiAqcHNlcmlhbF9udW1iZXIsIHUxNiAqcHdfbW9kdWxlX3R5cGUsIHUzMiAqcGhfbW9kdWxlKTsKIAotdTE2IGhwaV9zdWJzeXNfc2V0X2hvc3RfbmV0d29ya19pbnRlcmZhY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgY2hhciAqc3pfaW50ZXJmYWNlKTsKK3UxNiBocGlfYWRhcHRlcl9zZXRfbW9kZSh1MTYgYWRhcHRlcl9pbmRleCwgdTMyIGFkYXB0ZXJfbW9kZSk7CiAKLS8qLy8vLy8vLy8vICovCi0vKiBBREFQVEVSICovCit1MTYgaHBpX2FkYXB0ZXJfc2V0X21vZGVfZXgodTE2IGFkYXB0ZXJfaW5kZXgsIHUzMiBhZGFwdGVyX21vZGUsCisJdTE2IHF1ZXJ5X29yX3NldCk7CiAKLXUxNiBocGlfYWRhcHRlcl9vcGVuKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MTYgYWRhcHRlcl9pbmRleCk7Cit1MTYgaHBpX2FkYXB0ZXJfZ2V0X21vZGUodTE2IGFkYXB0ZXJfaW5kZXgsIHUzMiAqcGFkYXB0ZXJfbW9kZSk7CiAKLXUxNiBocGlfYWRhcHRlcl9jbG9zZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTE2IGFkYXB0ZXJfaW5kZXgpOwordTE2IGhwaV9hZGFwdGVyX2dldF9hc3NlcnQyKHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgKnBfYXNzZXJ0X2NvdW50LAorCWNoYXIgKnBzel9hc3NlcnQsIHUzMiAqcF9wYXJhbTEsIHUzMiAqcF9wYXJhbTIsCisJdTMyICpwX2RzcF9zdHJpbmdfYWRkciwgdTE2ICpwX3Byb2Nlc3Nvcl9pZCk7CiAKLXUxNiBocGlfYWRhcHRlcl9nZXRfaW5mbyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTE2ICpwd19udW1fb3V0c3RyZWFtcywgdTE2ICpwd19udW1faW5zdHJlYW1zLAotCXUxNiAqcHdfdmVyc2lvbiwgdTMyICpwc2VyaWFsX251bWJlciwgdTE2ICpwd19hZGFwdGVyX3R5cGUpOwordTE2IGhwaV9hZGFwdGVyX3Rlc3RfYXNzZXJ0KHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgYXNzZXJ0X2lkKTsKIAotdTE2IGhwaV9hZGFwdGVyX2dldF9tb2R1bGVfYnlfaW5kZXgoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiBtb2R1bGVfaW5kZXgsIHUxNiAqcHdfbnVtX291dHB1dHMsCi0JdTE2ICpwd19udW1faW5wdXRzLCB1MTYgKnB3X3ZlcnNpb24sIHUzMiAqcHNlcmlhbF9udW1iZXIsCi0JdTE2ICpwd19tb2R1bGVfdHlwZSwgdTMyICpwaF9tb2R1bGUpOwordTE2IGhwaV9hZGFwdGVyX2VuYWJsZV9jYXBhYmlsaXR5KHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgY2FwYWJpbGl0eSwgdTMyIGtleSk7CiAKLXUxNiBocGlfYWRhcHRlcl9zZXRfbW9kZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTMyIGFkYXB0ZXJfbW9kZSk7Cit1MTYgaHBpX2FkYXB0ZXJfc2VsZl90ZXN0KHUxNiBhZGFwdGVyX2luZGV4KTsKIAotdTE2IGhwaV9hZGFwdGVyX3NldF9tb2RlX2V4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUxNiBhZGFwdGVyX2luZGV4LCB1MzIgYWRhcHRlcl9tb2RlLCB1MTYgcXVlcnlfb3Jfc2V0KTsKK3UxNiBocGlfYWRhcHRlcl9kZWJ1Z19yZWFkKHUxNiBhZGFwdGVyX2luZGV4LCB1MzIgZHNwX2FkZHJlc3MsIGNoYXIgKnBfYnl0ZXMsCisJaW50ICpjb3VudF9ieXRlcyk7CiAKLXUxNiBocGlfYWRhcHRlcl9nZXRfbW9kZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTMyICpwYWRhcHRlcl9tb2RlKTsKK3UxNiBocGlfYWRhcHRlcl9zZXRfcHJvcGVydHkodTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiBwcm9wZXJ0eSwgdTE2IHBhcmFtdGVyMSwKKwl1MTYgcGFyYW10ZXIyKTsKIAotdTE2IGhwaV9hZGFwdGVyX2dldF9hc3NlcnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiAqYXNzZXJ0X3ByZXNlbnQsIGNoYXIgKnBzel9hc3NlcnQsCi0JdTE2ICpwd19saW5lX251bWJlcik7Cit1MTYgaHBpX2FkYXB0ZXJfZ2V0X3Byb3BlcnR5KHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgcHJvcGVydHksCisJdTE2ICpwd19wYXJhbXRlcjEsIHUxNiAqcHdfcGFyYW10ZXIyKTsKIAotdTE2IGhwaV9hZGFwdGVyX2dldF9hc3NlcnRfZXgoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiAqYXNzZXJ0X3ByZXNlbnQsIGNoYXIgKnBzel9hc3NlcnQsCi0JdTMyICpwbGluZV9udW1iZXIsIHUxNiAqcHdfYXNzZXJ0X29uX2RzcCk7Cit1MTYgaHBpX2FkYXB0ZXJfZW51bWVyYXRlX3Byb3BlcnR5KHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgaW5kZXgsCisJdTE2IHdoYXRfdG9fZW51bWVyYXRlLCB1MTYgcHJvcGVydHlfaW5kZXgsIHUzMiAqcHNldHRpbmcpOworLyoqKioqKioqKioqKiovCisvKiBPdXRTdHJlYW0gKi8KKy8qKioqKioqKioqKioqLwordTE2IGhwaV9vdXRzdHJlYW1fb3Blbih1MTYgYWRhcHRlcl9pbmRleCwgdTE2IG91dHN0cmVhbV9pbmRleCwKKwl1MzIgKnBoX291dHN0cmVhbSk7CiAKLXUxNiBocGlfYWRhcHRlcl90ZXN0X2Fzc2VydChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTE2IGFzc2VydF9pZCk7Cit1MTYgaHBpX291dHN0cmVhbV9jbG9zZSh1MzIgaF9vdXRzdHJlYW0pOwogCi11MTYgaHBpX2FkYXB0ZXJfZW5hYmxlX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiBjYXBhYmlsaXR5LCB1MzIga2V5KTsKK3UxNiBocGlfb3V0c3RyZWFtX2dldF9pbmZvX2V4KHUzMiBoX291dHN0cmVhbSwgdTE2ICpwd19zdGF0ZSwKKwl1MzIgKnBidWZmZXJfc2l6ZSwgdTMyICpwZGF0YV90b19wbGF5LCB1MzIgKnBzYW1wbGVzX3BsYXllZCwKKwl1MzIgKnBhdXhpbGlhcnlfZGF0YV90b19wbGF5KTsKIAotdTE2IGhwaV9hZGFwdGVyX3NlbGZfdGVzdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCk7Cit1MTYgaHBpX291dHN0cmVhbV93cml0ZV9idWYodTMyIGhfb3V0c3RyZWFtLCBjb25zdCB1OCAqcGJfd3JpdGVfYnVmLAorCXUzMiBieXRlc190b193cml0ZSwgY29uc3Qgc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0KTsKIAotdTE2IGhwaV9hZGFwdGVyX2RlYnVnX3JlYWQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUzMiBkc3BfYWRkcmVzcywgY2hhciAqcF9ieXRlcywgaW50ICpjb3VudF9ieXRlcyk7Cit1MTYgaHBpX291dHN0cmVhbV9zdGFydCh1MzIgaF9vdXRzdHJlYW0pOwogCi11MTYgaHBpX2FkYXB0ZXJfc2V0X3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUxNiBhZGFwdGVyX2luZGV4LCB1MTYgcHJvcGVydHksIHUxNiBwYXJhbXRlcjEsIHUxNiBwYXJhbXRlcjIpOwordTE2IGhwaV9vdXRzdHJlYW1fd2FpdF9zdGFydCh1MzIgaF9vdXRzdHJlYW0pOwogCi11MTYgaHBpX2FkYXB0ZXJfZ2V0X3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUxNiBhZGFwdGVyX2luZGV4LCB1MTYgcHJvcGVydHksIHUxNiAqcHdfcGFyYW10ZXIxLAotCXUxNiAqcHdfcGFyYW10ZXIyKTsKK3UxNiBocGlfb3V0c3RyZWFtX3N0b3AodTMyIGhfb3V0c3RyZWFtKTsKIAotdTE2IGhwaV9hZGFwdGVyX2VudW1lcmF0ZV9wcm9wZXJ0eShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTE2IGluZGV4LCB1MTYgd2hhdF90b19lbnVtZXJhdGUsCi0JdTE2IHByb3BlcnR5X2luZGV4LCB1MzIgKnBzZXR0aW5nKTsKK3UxNiBocGlfb3V0c3RyZWFtX3NpbmVnZW4odTMyIGhfb3V0c3RyZWFtKTsKIAotLyovLy8vLy8vLy8vLy8vLyAqLwotLyogTm9uVm9sIE1lbW9yeSAqLwotdTE2IGhwaV9udl9tZW1vcnlfb3Blbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTE2IGFkYXB0ZXJfaW5kZXgsCi0JdTMyICpwaF9udl9tZW1vcnksIHUxNiAqcHdfc2l6ZV9pbl9ieXRlcyk7Cit1MTYgaHBpX291dHN0cmVhbV9yZXNldCh1MzIgaF9vdXRzdHJlYW0pOwogCi11MTYgaHBpX252X21lbW9yeV9yZWFkX2J5dGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfbnZfbWVtb3J5LCB1MTYgaW5kZXgsIHUxNiAqcHdfZGF0YSk7Cit1MTYgaHBpX291dHN0cmVhbV9xdWVyeV9mb3JtYXQodTMyIGhfb3V0c3RyZWFtLCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQpOwogCi11MTYgaHBpX252X21lbW9yeV93cml0ZV9ieXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX252X21lbW9yeSwgdTE2IGluZGV4LCB1MTYgZGF0YSk7Cit1MTYgaHBpX291dHN0cmVhbV9zZXRfZm9ybWF0KHUzMiBoX291dHN0cmVhbSwgc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0KTsKIAotLyovLy8vLy8vLy8vLy8vLyAqLwotLyogRGlnaXRhbCBJL08gKi8KLXUxNiBocGlfZ3Bpb19vcGVuKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MTYgYWRhcHRlcl9pbmRleCwKLQl1MzIgKnBoX2dwaW8sIHUxNiAqcHdfbnVtYmVyX2lucHV0X2JpdHMsIHUxNiAqcHdfbnVtYmVyX291dHB1dF9iaXRzKTsKK3UxNiBocGlfb3V0c3RyZWFtX3NldF9wdW5jaF9pbl9vdXQodTMyIGhfb3V0c3RyZWFtLCB1MzIgcHVuY2hfaW5fc2FtcGxlLAorCXUzMiBwdW5jaF9vdXRfc2FtcGxlKTsKIAotdTE2IGhwaV9ncGlvX3JlYWRfYml0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9ncGlvLAotCXUxNiBiaXRfaW5kZXgsIHUxNiAqcHdfYml0X2RhdGEpOwordTE2IGhwaV9vdXRzdHJlYW1fc2V0X3ZlbG9jaXR5KHUzMiBoX291dHN0cmVhbSwgc2hvcnQgdmVsb2NpdHkpOwogCi11MTYgaHBpX2dwaW9fcmVhZF9hbGxfYml0cyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfZ3BpbywKLQl1MTYgYXdfYWxsX2JpdF9kYXRhWzRdCi0JKTsKK3UxNiBocGlfb3V0c3RyZWFtX2FuY2lsbGFyeV9yZXNldCh1MzIgaF9vdXRzdHJlYW0sIHUxNiBtb2RlKTsKIAotdTE2IGhwaV9ncGlvX3dyaXRlX2JpdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfZ3BpbywKLQl1MTYgYml0X2luZGV4LCB1MTYgYml0X2RhdGEpOwordTE2IGhwaV9vdXRzdHJlYW1fYW5jaWxsYXJ5X2dldF9pbmZvKHUzMiBoX291dHN0cmVhbSwgdTMyICpwZnJhbWVzX2F2YWlsYWJsZSk7CiAKLXUxNiBocGlfZ3Bpb193cml0ZV9zdGF0dXMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2dwaW8sCi0JdTE2IGF3X2FsbF9iaXRfZGF0YVs0XQotCSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqLwotLyogQXN5bmMgRXZlbnQgT2JqZWN0ICovCi0vKioqKioqKioqKioqKioqKioqKioqKi8KLXUxNiBocGlfYXN5bmNfZXZlbnRfb3Blbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTMyICpwaF9hc3luYyk7Ci0KLXUxNiBocGlfYXN5bmNfZXZlbnRfY2xvc2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2FzeW5jKTsKLQotdTE2IGhwaV9hc3luY19ldmVudF93YWl0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9hc3luYywKLQl1MTYgbWF4aW11bV9ldmVudHMsIHN0cnVjdCBocGlfYXN5bmNfZXZlbnQgKnBfZXZlbnRzLAotCXUxNiAqcHdfbnVtYmVyX3JldHVybmVkKTsKLQotdTE2IGhwaV9hc3luY19ldmVudF9nZXRfY291bnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfYXN5bmMsIHUxNiAqcHdfY291bnQpOwotCi11MTYgaHBpX2FzeW5jX2V2ZW50X2dldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfYXN5bmMsCi0JdTE2IG1heGltdW1fZXZlbnRzLCBzdHJ1Y3QgaHBpX2FzeW5jX2V2ZW50ICpwX2V2ZW50cywKLQl1MTYgKnB3X251bWJlcl9yZXR1cm5lZCk7Ci0KLS8qLy8vLy8vLy8vLy8gKi8KLS8qIFdBVENILURPRyAgKi8KLXUxNiBocGlfd2F0Y2hkb2dfb3Blbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTE2IGFkYXB0ZXJfaW5kZXgsCi0JdTMyICpwaF93YXRjaGRvZyk7Ci0KLXUxNiBocGlfd2F0Y2hkb2dfc2V0X3RpbWUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX3dhdGNoZG9nLAotCXUzMiB0aW1lX21pbGxpc2VjKTsKLQotdTE2IGhwaV93YXRjaGRvZ19waW5nKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF93YXRjaGRvZyk7Ci0KLS8qKioqKioqKioqKioqKi8KLS8qIE9VVCBTVFJFQU0gKi8KLS8qKioqKioqKioqKioqKi8KLXUxNiBocGlfb3V0c3RyZWFtX29wZW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUxNiBhZGFwdGVyX2luZGV4LAotCXUxNiBvdXRzdHJlYW1faW5kZXgsIHUzMiAqcGhfb3V0c3RyZWFtKTsKLQotdTE2IGhwaV9vdXRzdHJlYW1fY2xvc2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX291dHN0cmVhbSk7Ci0KLXUxNiBocGlfb3V0c3RyZWFtX2dldF9pbmZvX2V4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX291dHN0cmVhbSwgdTE2ICpwd19zdGF0ZSwgdTMyICpwYnVmZmVyX3NpemUsIHUzMiAqcGRhdGFfdG9fcGxheSwKLQl1MzIgKnBzYW1wbGVzX3BsYXllZCwgdTMyICpwYXV4aWxpYXJ5X2RhdGFfdG9fcGxheSk7Ci0KLXUxNiBocGlfb3V0c3RyZWFtX3dyaXRlX2J1Zihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIGNvbnN0IHU4ICpwYl93cml0ZV9idWYsIHUzMiBieXRlc190b193cml0ZSwKLQljb25zdCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQpOwotCi11MTYgaHBpX291dHN0cmVhbV9zdGFydChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfb3V0c3RyZWFtKTsKLQotdTE2IGhwaV9vdXRzdHJlYW1fd2FpdF9zdGFydChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0pOwotCi11MTYgaHBpX291dHN0cmVhbV9zdG9wKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9vdXRzdHJlYW0pOwotCi11MTYgaHBpX291dHN0cmVhbV9zaW5lZ2VuKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX291dHN0cmVhbSk7Ci0KLXUxNiBocGlfb3V0c3RyZWFtX3Jlc2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9vdXRzdHJlYW0pOwotCi11MTYgaHBpX291dHN0cmVhbV9xdWVyeV9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQpOwotCi11MTYgaHBpX291dHN0cmVhbV9zZXRfZm9ybWF0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX291dHN0cmVhbSwgc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0KTsKLQotdTE2IGhwaV9vdXRzdHJlYW1fc2V0X3B1bmNoX2luX291dChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIHUzMiBwdW5jaF9pbl9zYW1wbGUsIHUzMiBwdW5jaF9vdXRfc2FtcGxlKTsKLQotdTE2IGhwaV9vdXRzdHJlYW1fc2V0X3ZlbG9jaXR5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX291dHN0cmVhbSwgc2hvcnQgdmVsb2NpdHkpOwotCi11MTYgaHBpX291dHN0cmVhbV9hbmNpbGxhcnlfcmVzZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1MTYgbW9kZSk7Ci0KLXUxNiBocGlfb3V0c3RyZWFtX2FuY2lsbGFyeV9nZXRfaW5mbyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIHUzMiAqcGZyYW1lc19hdmFpbGFibGUpOwotCi11MTYgaHBpX291dHN0cmVhbV9hbmNpbGxhcnlfcmVhZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIHN0cnVjdCBocGlfYW5jX2ZyYW1lICpwX2FuY19mcmFtZV9idWZmZXIsCit1MTYgaHBpX291dHN0cmVhbV9hbmNpbGxhcnlfcmVhZCh1MzIgaF9vdXRzdHJlYW0sCisJc3RydWN0IGhwaV9hbmNfZnJhbWUgKnBfYW5jX2ZyYW1lX2J1ZmZlciwKIAl1MzIgYW5jX2ZyYW1lX2J1ZmZlcl9zaXplX2luX2J5dGVzLAogCXUzMiBudW1iZXJfb2ZfYW5jaWxsYXJ5X2ZyYW1lc190b19yZWFkKTsKIAotdTE2IGhwaV9vdXRzdHJlYW1fc2V0X3RpbWVfc2NhbGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1MzIgdGltZV9zY2FsZVgxMDAwMCk7Cit1MTYgaHBpX291dHN0cmVhbV9zZXRfdGltZV9zY2FsZSh1MzIgaF9vdXRzdHJlYW0sIHUzMiB0aW1lX3NjYWxlWDEwMDAwKTsKIAotdTE2IGhwaV9vdXRzdHJlYW1faG9zdF9idWZmZXJfYWxsb2NhdGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1MzIgc2l6ZV9pbl9ieXRlcyk7Cit1MTYgaHBpX291dHN0cmVhbV9ob3N0X2J1ZmZlcl9hbGxvY2F0ZSh1MzIgaF9vdXRzdHJlYW0sIHUzMiBzaXplX2luX2J5dGVzKTsKIAotdTE2IGhwaV9vdXRzdHJlYW1faG9zdF9idWZmZXJfZnJlZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0pOwordTE2IGhwaV9vdXRzdHJlYW1faG9zdF9idWZmZXJfZnJlZSh1MzIgaF9vdXRzdHJlYW0pOwogCi11MTYgaHBpX291dHN0cmVhbV9ncm91cF9hZGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1MzIgaF9zdHJlYW0pOwordTE2IGhwaV9vdXRzdHJlYW1fZ3JvdXBfYWRkKHUzMiBoX291dHN0cmVhbSwgdTMyIGhfc3RyZWFtKTsKIAotdTE2IGhwaV9vdXRzdHJlYW1fZ3JvdXBfZ2V0X21hcChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIHUzMiAqcG91dHN0cmVhbV9tYXAsIHUzMiAqcGluc3RyZWFtX21hcCk7Cit1MTYgaHBpX291dHN0cmVhbV9ncm91cF9nZXRfbWFwKHUzMiBoX291dHN0cmVhbSwgdTMyICpwb3V0c3RyZWFtX21hcCwKKwl1MzIgKnBpbnN0cmVhbV9tYXApOwogCi11MTYgaHBpX291dHN0cmVhbV9ncm91cF9yZXNldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0pOwordTE2IGhwaV9vdXRzdHJlYW1fZ3JvdXBfcmVzZXQodTMyIGhfb3V0c3RyZWFtKTsKIAotLyovLy8vLy8vLy8vICovCi0vKiBJTl9TVFJFQU0gKi8KLXUxNiBocGlfaW5zdHJlYW1fb3Blbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTE2IGFkYXB0ZXJfaW5kZXgsCi0JdTE2IGluc3RyZWFtX2luZGV4LCB1MzIgKnBoX2luc3RyZWFtKTsKKy8qKioqKioqKioqKiovCisvKiBJblN0cmVhbSAqLworLyoqKioqKioqKioqKi8KK3UxNiBocGlfaW5zdHJlYW1fb3Blbih1MTYgYWRhcHRlcl9pbmRleCwgdTE2IGluc3RyZWFtX2luZGV4LAorCXUzMiAqcGhfaW5zdHJlYW0pOwogCi11MTYgaHBpX2luc3RyZWFtX2Nsb3NlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9pbnN0cmVhbSk7Cit1MTYgaHBpX2luc3RyZWFtX2Nsb3NlKHUzMiBoX2luc3RyZWFtKTsKIAotdTE2IGhwaV9pbnN0cmVhbV9xdWVyeV9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfaW5zdHJlYW0sIGNvbnN0IHN0cnVjdCBocGlfZm9ybWF0ICpwX2Zvcm1hdCk7Cit1MTYgaHBpX2luc3RyZWFtX3F1ZXJ5X2Zvcm1hdCh1MzIgaF9pbnN0cmVhbSwKKwljb25zdCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQpOwogCi11MTYgaHBpX2luc3RyZWFtX3NldF9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfaW5zdHJlYW0sIGNvbnN0IHN0cnVjdCBocGlfZm9ybWF0ICpwX2Zvcm1hdCk7Cit1MTYgaHBpX2luc3RyZWFtX3NldF9mb3JtYXQodTMyIGhfaW5zdHJlYW0sCisJY29uc3Qgc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0KTsKIAotdTE2IGhwaV9pbnN0cmVhbV9yZWFkX2J1Zihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfaW5zdHJlYW0sCi0JdTggKnBiX3JlYWRfYnVmLCB1MzIgYnl0ZXNfdG9fcmVhZCk7Cit1MTYgaHBpX2luc3RyZWFtX3JlYWRfYnVmKHUzMiBoX2luc3RyZWFtLCB1OCAqcGJfcmVhZF9idWYsIHUzMiBieXRlc190b19yZWFkKTsKIAotdTE2IGhwaV9pbnN0cmVhbV9zdGFydChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfaW5zdHJlYW0pOwordTE2IGhwaV9pbnN0cmVhbV9zdGFydCh1MzIgaF9pbnN0cmVhbSk7CiAKLXUxNiBocGlfaW5zdHJlYW1fd2FpdF9zdGFydChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9pbnN0cmVhbSk7Cit1MTYgaHBpX2luc3RyZWFtX3dhaXRfc3RhcnQodTMyIGhfaW5zdHJlYW0pOwogCi11MTYgaHBpX2luc3RyZWFtX3N0b3AoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2luc3RyZWFtKTsKK3UxNiBocGlfaW5zdHJlYW1fc3RvcCh1MzIgaF9pbnN0cmVhbSk7CiAKLXUxNiBocGlfaW5zdHJlYW1fcmVzZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2luc3RyZWFtKTsKK3UxNiBocGlfaW5zdHJlYW1fcmVzZXQodTMyIGhfaW5zdHJlYW0pOwogCi11MTYgaHBpX2luc3RyZWFtX2dldF9pbmZvX2V4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtLCB1MTYgKnB3X3N0YXRlLCB1MzIgKnBidWZmZXJfc2l6ZSwgdTMyICpwZGF0YV9yZWNvcmRlZCwKLQl1MzIgKnBzYW1wbGVzX3JlY29yZGVkLCB1MzIgKnBhdXhpbGlhcnlfZGF0YV9yZWNvcmRlZCk7Cit1MTYgaHBpX2luc3RyZWFtX2dldF9pbmZvX2V4KHUzMiBoX2luc3RyZWFtLCB1MTYgKnB3X3N0YXRlLCB1MzIgKnBidWZmZXJfc2l6ZSwKKwl1MzIgKnBkYXRhX3JlY29yZGVkLCB1MzIgKnBzYW1wbGVzX3JlY29yZGVkLAorCXUzMiAqcGF1eGlsaWFyeV9kYXRhX3JlY29yZGVkKTsKIAotdTE2IGhwaV9pbnN0cmVhbV9hbmNpbGxhcnlfcmVzZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfaW5zdHJlYW0sIHUxNiBieXRlc19wZXJfZnJhbWUsIHUxNiBtb2RlLCB1MTYgYWxpZ25tZW50LAotCXUxNiBpZGxlX2JpdCk7Cit1MTYgaHBpX2luc3RyZWFtX2FuY2lsbGFyeV9yZXNldCh1MzIgaF9pbnN0cmVhbSwgdTE2IGJ5dGVzX3Blcl9mcmFtZSwKKwl1MTYgbW9kZSwgdTE2IGFsaWdubWVudCwgdTE2IGlkbGVfYml0KTsKIAotdTE2IGhwaV9pbnN0cmVhbV9hbmNpbGxhcnlfZ2V0X2luZm8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfaW5zdHJlYW0sIHUzMiAqcGZyYW1lX3NwYWNlKTsKK3UxNiBocGlfaW5zdHJlYW1fYW5jaWxsYXJ5X2dldF9pbmZvKHUzMiBoX2luc3RyZWFtLCB1MzIgKnBmcmFtZV9zcGFjZSk7CiAKLXUxNiBocGlfaW5zdHJlYW1fYW5jaWxsYXJ5X3dyaXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtLCBjb25zdCBzdHJ1Y3QgaHBpX2FuY19mcmFtZSAqcF9hbmNfZnJhbWVfYnVmZmVyLAordTE2IGhwaV9pbnN0cmVhbV9hbmNpbGxhcnlfd3JpdGUodTMyIGhfaW5zdHJlYW0sCisJY29uc3Qgc3RydWN0IGhwaV9hbmNfZnJhbWUgKnBfYW5jX2ZyYW1lX2J1ZmZlciwKIAl1MzIgYW5jX2ZyYW1lX2J1ZmZlcl9zaXplX2luX2J5dGVzLAogCXUzMiBudW1iZXJfb2ZfYW5jaWxsYXJ5X2ZyYW1lc190b193cml0ZSk7CiAKLXUxNiBocGlfaW5zdHJlYW1faG9zdF9idWZmZXJfYWxsb2NhdGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfaW5zdHJlYW0sIHUzMiBzaXplX2luX2J5dGVzKTsKK3UxNiBocGlfaW5zdHJlYW1faG9zdF9idWZmZXJfYWxsb2NhdGUodTMyIGhfaW5zdHJlYW0sIHUzMiBzaXplX2luX2J5dGVzKTsKIAotdTE2IGhwaV9pbnN0cmVhbV9ob3N0X2J1ZmZlcl9mcmVlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtKTsKK3UxNiBocGlfaW5zdHJlYW1faG9zdF9idWZmZXJfZnJlZSh1MzIgaF9pbnN0cmVhbSk7CiAKLXUxNiBocGlfaW5zdHJlYW1fZ3JvdXBfYWRkKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtLCB1MzIgaF9zdHJlYW0pOwordTE2IGhwaV9pbnN0cmVhbV9ncm91cF9hZGQodTMyIGhfaW5zdHJlYW0sIHUzMiBoX3N0cmVhbSk7CiAKLXUxNiBocGlfaW5zdHJlYW1fZ3JvdXBfZ2V0X21hcChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9pbnN0cmVhbSwgdTMyICpwb3V0c3RyZWFtX21hcCwgdTMyICpwaW5zdHJlYW1fbWFwKTsKK3UxNiBocGlfaW5zdHJlYW1fZ3JvdXBfZ2V0X21hcCh1MzIgaF9pbnN0cmVhbSwgdTMyICpwb3V0c3RyZWFtX21hcCwKKwl1MzIgKnBpbnN0cmVhbV9tYXApOwogCi11MTYgaHBpX2luc3RyZWFtX2dyb3VwX3Jlc2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtKTsKK3UxNiBocGlfaW5zdHJlYW1fZ3JvdXBfcmVzZXQodTMyIGhfaW5zdHJlYW0pOwogCiAvKioqKioqKioqLwotLyogTUlYRVIgKi8KKy8qIE1peGVyICovCiAvKioqKioqKioqLwotdTE2IGhwaV9taXhlcl9vcGVuKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MTYgYWRhcHRlcl9pbmRleCwKLQl1MzIgKnBoX21peGVyKTsKK3UxNiBocGlfbWl4ZXJfb3Blbih1MTYgYWRhcHRlcl9pbmRleCwgdTMyICpwaF9taXhlcik7CiAKLXUxNiBocGlfbWl4ZXJfY2xvc2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX21peGVyKTsKK3UxNiBocGlfbWl4ZXJfY2xvc2UodTMyIGhfbWl4ZXIpOwogCi11MTYgaHBpX21peGVyX2dldF9jb250cm9sKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9taXhlciwKLQl1MTYgc3JjX25vZGVfdHlwZSwgdTE2IHNyY19ub2RlX3R5cGVfaW5kZXgsIHUxNiBkc3Rfbm9kZV90eXBlLAotCXUxNiBkc3Rfbm9kZV90eXBlX2luZGV4LCB1MTYgY29udHJvbF90eXBlLCB1MzIgKnBoX2NvbnRyb2wpOwordTE2IGhwaV9taXhlcl9nZXRfY29udHJvbCh1MzIgaF9taXhlciwgdTE2IHNyY19ub2RlX3R5cGUsCisJdTE2IHNyY19ub2RlX3R5cGVfaW5kZXgsIHUxNiBkc3Rfbm9kZV90eXBlLCB1MTYgZHN0X25vZGVfdHlwZV9pbmRleCwKKwl1MTYgY29udHJvbF90eXBlLCB1MzIgKnBoX2NvbnRyb2wpOwogCi11MTYgaHBpX21peGVyX2dldF9jb250cm9sX2J5X2luZGV4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX21peGVyLCB1MTYgY29udHJvbF9pbmRleCwgdTE2ICpwd19zcmNfbm9kZV90eXBlLAotCXUxNiAqcHdfc3JjX25vZGVfaW5kZXgsIHUxNiAqcHdfZHN0X25vZGVfdHlwZSwgdTE2ICpwd19kc3Rfbm9kZV9pbmRleCwKLQl1MTYgKnB3X2NvbnRyb2xfdHlwZSwgdTMyICpwaF9jb250cm9sKTsKK3UxNiBocGlfbWl4ZXJfZ2V0X2NvbnRyb2xfYnlfaW5kZXgodTMyIGhfbWl4ZXIsIHUxNiBjb250cm9sX2luZGV4LAorCXUxNiAqcHdfc3JjX25vZGVfdHlwZSwgdTE2ICpwd19zcmNfbm9kZV9pbmRleCwgdTE2ICpwd19kc3Rfbm9kZV90eXBlLAorCXUxNiAqcHdfZHN0X25vZGVfaW5kZXgsIHUxNiAqcHdfY29udHJvbF90eXBlLCB1MzIgKnBoX2NvbnRyb2wpOwogCi11MTYgaHBpX21peGVyX3N0b3JlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9taXhlciwKLQllbnVtIEhQSV9NSVhFUl9TVE9SRV9DT01NQU5EIGNvbW1hbmQsIHUxNiBpbmRleCk7Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIG1peGVyIENPTlRST0xTICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogdm9sdW1lIGNvbnRyb2wgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqLwotdTE2IGhwaV92b2x1bWVfc2V0X2dhaW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgYW5fZ2FpbjBfMDFkQltIUElfTUFYX0NIQU5ORUxTXQordTE2IGhwaV9taXhlcl9zdG9yZSh1MzIgaF9taXhlciwgZW51bSBIUElfTUlYRVJfU1RPUkVfQ09NTUFORCBjb21tYW5kLAorCXUxNiBpbmRleCk7CisvKioqKioqKioqKioqLworLyogQ29udHJvbHMgKi8KKy8qKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqLworLyogVm9sdW1lIGNvbnRyb2wgKi8KKy8qKioqKioqKioqKioqKioqKiovCit1MTYgaHBpX3ZvbHVtZV9zZXRfZ2Fpbih1MzIgaF9jb250cm9sLCBzaG9ydCBhbl9nYWluMF8wMWRCW0hQSV9NQVhfQ0hBTk5FTFNdCiAJKTsKIAotdTE2IGhwaV92b2x1bWVfZ2V0X2dhaW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCit1MTYgaHBpX3ZvbHVtZV9nZXRfZ2Fpbih1MzIgaF9jb250cm9sLAogCXNob3J0IGFuX2dhaW4wXzAxZEJfb3V0W0hQSV9NQVhfQ0hBTk5FTFNdCiAJKTsKIAordTE2IGhwaV92b2x1bWVfc2V0X211dGUodTMyIGhfY29udHJvbCwgdTMyIG11dGUpOworCit1MTYgaHBpX3ZvbHVtZV9nZXRfbXV0ZSh1MzIgaF9jb250cm9sLCB1MzIgKm11dGUpOworCiAjZGVmaW5lIGhwaV92b2x1bWVfZ2V0X3JhbmdlIGhwaV92b2x1bWVfcXVlcnlfcmFuZ2UKLXUxNiBocGlfdm9sdW1lX3F1ZXJ5X3JhbmdlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXNob3J0ICptaW5fZ2Fpbl8wMWRCLCBzaG9ydCAqbWF4X2dhaW5fMDFkQiwgc2hvcnQgKnN0ZXBfZ2Fpbl8wMWRCKTsKK3UxNiBocGlfdm9sdW1lX3F1ZXJ5X3JhbmdlKHUzMiBoX2NvbnRyb2wsIHNob3J0ICptaW5fZ2Fpbl8wMWRCLAorCXNob3J0ICptYXhfZ2Fpbl8wMWRCLCBzaG9ydCAqc3RlcF9nYWluXzAxZEIpOwogCi11MTYgaHBpX3ZvbHVtZV9xdWVyeV9jaGFubmVscyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF92b2x1bWUsIHUzMiAqcF9jaGFubmVscyk7Cit1MTYgaHBpX3ZvbHVtZV9xdWVyeV9jaGFubmVscyhjb25zdCB1MzIgaF92b2x1bWUsIHUzMiAqcF9jaGFubmVscyk7CiAKLXUxNiBocGlfdm9sdW1lX2F1dG9fZmFkZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKK3UxNiBocGlfdm9sdW1lX2F1dG9fZmFkZSh1MzIgaF9jb250cm9sLAogCXNob3J0IGFuX3N0b3BfZ2FpbjBfMDFkQltIUElfTUFYX0NIQU5ORUxTXSwgdTMyIGR1cmF0aW9uX21zKTsKIAotdTE2IGhwaV92b2x1bWVfYXV0b19mYWRlX3Byb2ZpbGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgc2hvcnQgYW5fc3RvcF9nYWluMF8wMWRCW0hQSV9NQVhfQ0hBTk5FTFNdLAotCXUzMiBkdXJhdGlvbl9tcywgdTE2IHByb2ZpbGUpOwordTE2IGhwaV92b2x1bWVfYXV0b19mYWRlX3Byb2ZpbGUodTMyIGhfY29udHJvbCwKKwlzaG9ydCBhbl9zdG9wX2dhaW4wXzAxZEJbSFBJX01BWF9DSEFOTkVMU10sIHUzMiBkdXJhdGlvbl9tcywKKwl1MTYgcHJvZmlsZSk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogbGV2ZWwgY29udHJvbCAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXUxNiBocGlfbGV2ZWxfcXVlcnlfcmFuZ2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgKm1pbl9nYWluXzAxZEIsIHNob3J0ICptYXhfZ2Fpbl8wMWRCLCBzaG9ydCAqc3RlcF9nYWluXzAxZEIpOworLyoqKioqKioqKioqKioqKioqLworLyogTGV2ZWwgY29udHJvbCAqLworLyoqKioqKioqKioqKioqKioqLwordTE2IGhwaV9sZXZlbF9xdWVyeV9yYW5nZSh1MzIgaF9jb250cm9sLCBzaG9ydCAqbWluX2dhaW5fMDFkQiwKKwlzaG9ydCAqbWF4X2dhaW5fMDFkQiwgc2hvcnQgKnN0ZXBfZ2Fpbl8wMWRCKTsKIAotdTE2IGhwaV9sZXZlbF9zZXRfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQlzaG9ydCBhbl9nYWluMF8wMWRCW0hQSV9NQVhfQ0hBTk5FTFNdCit1MTYgaHBpX2xldmVsX3NldF9nYWluKHUzMiBoX2NvbnRyb2wsIHNob3J0IGFuX2dhaW4wXzAxZEJbSFBJX01BWF9DSEFOTkVMU10KIAkpOwogCi11MTYgaHBpX2xldmVsX2dldF9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAordTE2IGhwaV9sZXZlbF9nZXRfZ2Fpbih1MzIgaF9jb250cm9sLAogCXNob3J0IGFuX2dhaW4wXzAxZEJfb3V0W0hQSV9NQVhfQ0hBTk5FTFNdCiAJKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBtZXRlciBjb250cm9sICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi11MTYgaHBpX21ldGVyX3F1ZXJ5X2NoYW5uZWxzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX21ldGVyLCB1MzIgKnBfY2hhbm5lbHMpOworLyoqKioqKioqKioqKioqKioqLworLyogTWV0ZXIgY29udHJvbCAqLworLyoqKioqKioqKioqKioqKioqLwordTE2IGhwaV9tZXRlcl9xdWVyeV9jaGFubmVscyhjb25zdCB1MzIgaF9tZXRlciwgdTMyICpwX2NoYW5uZWxzKTsKIAotdTE2IGhwaV9tZXRlcl9nZXRfcGVhayhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKK3UxNiBocGlfbWV0ZXJfZ2V0X3BlYWsodTMyIGhfY29udHJvbCwKIAlzaG9ydCBhbl9wZWFrMF8wMWRCX291dFtIUElfTUFYX0NIQU5ORUxTXQogCSk7CiAKLXUxNiBocGlfbWV0ZXJfZ2V0X3Jtcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQlzaG9ydCBhbl9wZWFrMF8wMWRCX291dFtIUElfTUFYX0NIQU5ORUxTXQordTE2IGhwaV9tZXRlcl9nZXRfcm1zKHUzMiBoX2NvbnRyb2wsIHNob3J0IGFuX3BlYWswXzAxZEJfb3V0W0hQSV9NQVhfQ0hBTk5FTFNdCiAJKTsKIAotdTE2IGhwaV9tZXRlcl9zZXRfcGVha19iYWxsaXN0aWNzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBhdHRhY2ssIHUxNiBkZWNheSk7Cit1MTYgaHBpX21ldGVyX3NldF9wZWFrX2JhbGxpc3RpY3ModTMyIGhfY29udHJvbCwgdTE2IGF0dGFjaywgdTE2IGRlY2F5KTsKIAotdTE2IGhwaV9tZXRlcl9zZXRfcm1zX2JhbGxpc3RpY3MoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGF0dGFjaywgdTE2IGRlY2F5KTsKK3UxNiBocGlfbWV0ZXJfc2V0X3Jtc19iYWxsaXN0aWNzKHUzMiBoX2NvbnRyb2wsIHUxNiBhdHRhY2ssIHUxNiBkZWNheSk7CiAKLXUxNiBocGlfbWV0ZXJfZ2V0X3BlYWtfYmFsbGlzdGljcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgKmF0dGFjaywgdTE2ICpkZWNheSk7Cit1MTYgaHBpX21ldGVyX2dldF9wZWFrX2JhbGxpc3RpY3ModTMyIGhfY29udHJvbCwgdTE2ICphdHRhY2ssIHUxNiAqZGVjYXkpOwogCi11MTYgaHBpX21ldGVyX2dldF9ybXNfYmFsbGlzdGljcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgKmF0dGFjaywgdTE2ICpkZWNheSk7Cit1MTYgaHBpX21ldGVyX2dldF9ybXNfYmFsbGlzdGljcyh1MzIgaF9jb250cm9sLCB1MTYgKmF0dGFjaywgdTE2ICpkZWNheSk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogY2hhbm5lbCBtb2RlIGNvbnRyb2wgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXUxNiBocGlfY2hhbm5lbF9tb2RlX3F1ZXJ5X21vZGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfbW9kZSwgY29uc3QgdTMyIGluZGV4LCB1MTYgKnB3X21vZGUpOworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENoYW5uZWxNb2RlIGNvbnRyb2wgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiovCit1MTYgaHBpX2NoYW5uZWxfbW9kZV9xdWVyeV9tb2RlKGNvbnN0IHUzMiBoX21vZGUsIGNvbnN0IHUzMiBpbmRleCwKKwl1MTYgKnB3X21vZGUpOwogCi11MTYgaHBpX2NoYW5uZWxfbW9kZV9zZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JdTE2IG1vZGUpOwordTE2IGhwaV9jaGFubmVsX21vZGVfc2V0KHUzMiBoX2NvbnRyb2wsIHUxNiBtb2RlKTsKIAotdTE2IGhwaV9jaGFubmVsX21vZGVfZ2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUxNiAqbW9kZSk7Cit1MTYgaHBpX2NoYW5uZWxfbW9kZV9nZXQodTMyIGhfY29udHJvbCwgdTE2ICptb2RlKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUdW5lciBjb250cm9sICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi11MTYgaHBpX3R1bmVyX3F1ZXJ5X2JhbmQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfdHVuZXIsIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19iYW5kKTsKKy8qKioqKioqKioqKioqKioqKi8KKy8qIFR1bmVyIGNvbnRyb2wgKi8KKy8qKioqKioqKioqKioqKioqKi8KK3UxNiBocGlfdHVuZXJfcXVlcnlfYmFuZChjb25zdCB1MzIgaF90dW5lciwgY29uc3QgdTMyIGluZGV4LCB1MTYgKnB3X2JhbmQpOwogCi11MTYgaHBpX3R1bmVyX3NldF9iYW5kKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUxNiBiYW5kKTsKK3UxNiBocGlfdHVuZXJfc2V0X2JhbmQodTMyIGhfY29udHJvbCwgdTE2IGJhbmQpOwogCi11MTYgaHBpX3R1bmVyX2dldF9iYW5kKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUxNiAqcHdfYmFuZCk7Cit1MTYgaHBpX3R1bmVyX2dldF9iYW5kKHUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfYmFuZCk7CiAKLXUxNiBocGlfdHVuZXJfcXVlcnlfZnJlcXVlbmN5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX3R1bmVyLCBjb25zdCB1MzIgaW5kZXgsIGNvbnN0IHUxNiBiYW5kLCB1MzIgKnBmcmVxKTsKK3UxNiBocGlfdHVuZXJfcXVlcnlfZnJlcXVlbmN5KGNvbnN0IHUzMiBoX3R1bmVyLCBjb25zdCB1MzIgaW5kZXgsCisJY29uc3QgdTE2IGJhbmQsIHUzMiAqcGZyZXEpOwogCi11MTYgaHBpX3R1bmVyX3NldF9mcmVxdWVuY3koY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGZyZXFfaW5rX2h6KTsKK3UxNiBocGlfdHVuZXJfc2V0X2ZyZXF1ZW5jeSh1MzIgaF9jb250cm9sLCB1MzIgZnJlcV9pbmtfaHopOwogCi11MTYgaHBpX3R1bmVyX2dldF9mcmVxdWVuY3koY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwd19mcmVxX2lua19oeik7Cit1MTYgaHBpX3R1bmVyX2dldF9mcmVxdWVuY3kodTMyIGhfY29udHJvbCwgdTMyICpwd19mcmVxX2lua19oeik7CiAKLXUxNiBocGlfdHVuZXJfZ2V0UkZfbGV2ZWwoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgKnB3X2xldmVsKTsKK3UxNiBocGlfdHVuZXJfZ2V0X3JmX2xldmVsKHUzMiBoX2NvbnRyb2wsIHNob3J0ICpwd19sZXZlbCk7CiAKLXUxNiBocGlfdHVuZXJfZ2V0X3Jhd1JGX2xldmVsKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHNob3J0ICpwd19sZXZlbCk7Cit1MTYgaHBpX3R1bmVyX2dldF9yYXdfcmZfbGV2ZWwodTMyIGhfY29udHJvbCwgc2hvcnQgKnB3X2xldmVsKTsKIAotdTE2IGhwaV90dW5lcl9xdWVyeV9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX3R1bmVyLCBjb25zdCB1MzIgaW5kZXgsIHUxNiAqcHdfZ2Fpbik7Cit1MTYgaHBpX3R1bmVyX3F1ZXJ5X2dhaW4oY29uc3QgdTMyIGhfdHVuZXIsIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19nYWluKTsKIAotdTE2IGhwaV90dW5lcl9zZXRfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQlzaG9ydCBnYWluKTsKK3UxNiBocGlfdHVuZXJfc2V0X2dhaW4odTMyIGhfY29udHJvbCwgc2hvcnQgZ2Fpbik7CiAKLXUxNiBocGlfdHVuZXJfZ2V0X2dhaW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgKnBuX2dhaW4pOwordTE2IGhwaV90dW5lcl9nZXRfZ2Fpbih1MzIgaF9jb250cm9sLCBzaG9ydCAqcG5fZ2Fpbik7CiAKLXUxNiBocGlfdHVuZXJfZ2V0X3N0YXR1cyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MTYgKnB3X3N0YXR1c19tYXNrLCB1MTYgKnB3X3N0YXR1cyk7Cit1MTYgaHBpX3R1bmVyX2dldF9zdGF0dXModTMyIGhfY29udHJvbCwgdTE2ICpwd19zdGF0dXNfbWFzaywgdTE2ICpwd19zdGF0dXMpOwogCi11MTYgaHBpX3R1bmVyX3NldF9tb2RlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUzMiBtb2RlLCB1MzIgdmFsdWUpOwordTE2IGhwaV90dW5lcl9zZXRfbW9kZSh1MzIgaF9jb250cm9sLCB1MzIgbW9kZSwgdTMyIHZhbHVlKTsKIAotdTE2IGhwaV90dW5lcl9nZXRfbW9kZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MzIgbW9kZSwgdTMyICpwbl92YWx1ZSk7Cit1MTYgaHBpX3R1bmVyX2dldF9tb2RlKHUzMiBoX2NvbnRyb2wsIHUzMiBtb2RlLCB1MzIgKnBuX3ZhbHVlKTsKIAotdTE2IGhwaV90dW5lcl9nZXRSRFMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JY2hhciAqcF9yZHNfZGF0YSk7Cit1MTYgaHBpX3R1bmVyX2dldF9yZHModTMyIGhfY29udHJvbCwgY2hhciAqcF9yZHNfZGF0YSk7CiAKLXUxNiBocGlfdHVuZXJfcXVlcnlfZGVlbXBoYXNpcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF90dW5lciwgY29uc3QgdTMyIGluZGV4LCBjb25zdCB1MTYgYmFuZCwgdTMyICpwZGVlbXBoYXNpcyk7Cit1MTYgaHBpX3R1bmVyX3F1ZXJ5X2RlZW1waGFzaXMoY29uc3QgdTMyIGhfdHVuZXIsIGNvbnN0IHUzMiBpbmRleCwKKwljb25zdCB1MTYgYmFuZCwgdTMyICpwZGVlbXBoYXNpcyk7CiAKLXUxNiBocGlfdHVuZXJfc2V0X2RlZW1waGFzaXMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGRlZW1waGFzaXMpOwotdTE2IGhwaV90dW5lcl9nZXRfZGVlbXBoYXNpcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBkZWVtcGhhc2lzKTsKK3UxNiBocGlfdHVuZXJfc2V0X2RlZW1waGFzaXModTMyIGhfY29udHJvbCwgdTMyIGRlZW1waGFzaXMpOwordTE2IGhwaV90dW5lcl9nZXRfZGVlbXBoYXNpcyh1MzIgaF9jb250cm9sLCB1MzIgKnBkZWVtcGhhc2lzKTsKIAotdTE2IGhwaV90dW5lcl9xdWVyeV9wcm9ncmFtKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX3R1bmVyLCB1MzIgKnBiaXRtYXBfcHJvZ3JhbSk7Cit1MTYgaHBpX3R1bmVyX3F1ZXJ5X3Byb2dyYW0oY29uc3QgdTMyIGhfdHVuZXIsIHUzMiAqcGJpdG1hcF9wcm9ncmFtKTsKIAotdTE2IGhwaV90dW5lcl9zZXRfcHJvZ3JhbShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MzIgcHJvZ3JhbSk7Cit1MTYgaHBpX3R1bmVyX3NldF9wcm9ncmFtKHUzMiBoX2NvbnRyb2wsIHUzMiBwcm9ncmFtKTsKIAotdTE2IGhwaV90dW5lcl9nZXRfcHJvZ3JhbShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MzIgKnBwcm9ncmFtKTsKK3UxNiBocGlfdHVuZXJfZ2V0X3Byb2dyYW0odTMyIGhfY29udHJvbCwgdTMyICpwcHJvZ3JhbSk7CiAKLXUxNiBocGlfdHVuZXJfZ2V0X2hkX3JhZGlvX2RzcF92ZXJzaW9uKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIGNoYXIgKnBzel9kc3BfdmVyc2lvbiwgY29uc3QgdTMyIHN0cmluZ19zaXplKTsKK3UxNiBocGlfdHVuZXJfZ2V0X2hkX3JhZGlvX2RzcF92ZXJzaW9uKHUzMiBoX2NvbnRyb2wsIGNoYXIgKnBzel9kc3BfdmVyc2lvbiwKKwljb25zdCB1MzIgc3RyaW5nX3NpemUpOwogCi11MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19zZGtfdmVyc2lvbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCBjaGFyICpwc3pfc2RrX3ZlcnNpb24sIGNvbnN0IHUzMiBzdHJpbmdfc2l6ZSk7Cit1MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19zZGtfdmVyc2lvbih1MzIgaF9jb250cm9sLCBjaGFyICpwc3pfc2RrX3ZlcnNpb24sCisJY29uc3QgdTMyIHN0cmluZ19zaXplKTsKIAotdTE2IGhwaV90dW5lcl9nZXRfaGRfcmFkaW9fc2lnbmFsX3F1YWxpdHkoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwcXVhbGl0eSk7Cit1MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19zaWduYWxfcXVhbGl0eSh1MzIgaF9jb250cm9sLCB1MzIgKnBxdWFsaXR5KTsKIAotdTE2IGhwaV90dW5lcl9nZXRfaGRfcmFkaW9fc2lnbmFsX2JsZW5kKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiAqcGJsZW5kKTsKK3UxNiBocGlfdHVuZXJfZ2V0X2hkX3JhZGlvX3NpZ25hbF9ibGVuZCh1MzIgaF9jb250cm9sLCB1MzIgKnBibGVuZCk7CiAKLXUxNiBocGlfdHVuZXJfc2V0X2hkX3JhZGlvX3NpZ25hbF9ibGVuZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCBjb25zdCB1MzIgYmxlbmQpOwordTE2IGhwaV90dW5lcl9zZXRfaGRfcmFkaW9fc2lnbmFsX2JsZW5kKHUzMiBoX2NvbnRyb2wsIGNvbnN0IHUzMiBibGVuZCk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUEFEcyBjb250cm9sICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKiovCisvKiBQQUQgY29udHJvbCAqLworLyoqKioqKioqKioqKioqKi8KIAotdTE2IEhQSV9QQURfX2dldF9jaGFubmVsX25hbWUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIHN0cmluZ19sZW5ndGgpOwotCi11MTYgSFBJX1BBRF9fZ2V0X2FydGlzdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQljaGFyICpwc3pfc3RyaW5nLCBjb25zdCB1MzIgc3RyaW5nX2xlbmd0aCk7Ci0KLXUxNiBIUElfUEFEX19nZXRfdGl0bGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIHN0cmluZ19sZW5ndGgpOwotCi11MTYgSFBJX1BBRF9fZ2V0X2NvbW1lbnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIHN0cmluZ19sZW5ndGgpOwotCi11MTYgSFBJX1BBRF9fZ2V0X3Byb2dyYW1fdHlwZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBwVFkpOwotCi11MTYgSFBJX1BBRF9fZ2V0X3Jkc1BJKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUzMiAqcHBJKTsKLQotdTE2IEhQSV9QQURfX2dldF9wcm9ncmFtX3R5cGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIGNvbnN0IHUzMiBkYXRhX3R5cGUsIGNvbnN0IHUzMiBwVFksIGNoYXIgKnBzel9zdHJpbmcsCit1MTYgaHBpX3BhZF9nZXRfY2hhbm5lbF9uYW1lKHUzMiBoX2NvbnRyb2wsIGNoYXIgKnBzel9zdHJpbmcsCiAJY29uc3QgdTMyIHN0cmluZ19sZW5ndGgpOwogCit1MTYgaHBpX3BhZF9nZXRfYXJ0aXN0KHUzMiBoX2NvbnRyb2wsIGNoYXIgKnBzel9zdHJpbmcsCisJY29uc3QgdTMyIHN0cmluZ19sZW5ndGgpOworCit1MTYgaHBpX3BhZF9nZXRfdGl0bGUodTMyIGhfY29udHJvbCwgY2hhciAqcHN6X3N0cmluZywKKwljb25zdCB1MzIgc3RyaW5nX2xlbmd0aCk7CisKK3UxNiBocGlfcGFkX2dldF9jb21tZW50KHUzMiBoX2NvbnRyb2wsIGNoYXIgKnBzel9zdHJpbmcsCisJY29uc3QgdTMyIHN0cmluZ19sZW5ndGgpOworCit1MTYgaHBpX3BhZF9nZXRfcHJvZ3JhbV90eXBlKHUzMiBoX2NvbnRyb2wsIHUzMiAqcHBUWSk7CisKK3UxNiBocGlfcGFkX2dldF9yZHNQSSh1MzIgaF9jb250cm9sLCB1MzIgKnBwSSk7CisKK3UxNiBocGlfcGFkX2dldF9wcm9ncmFtX3R5cGVfc3RyaW5nKHUzMiBoX2NvbnRyb2wsIGNvbnN0IHUzMiBkYXRhX3R5cGUsCisJY29uc3QgdTMyIHBUWSwgY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIHN0cmluZ19sZW5ndGgpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEFFUy9FQlUgUmVjZWl2ZXIgY29udHJvbCAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11MTYgSFBJX0FFU0VCVV9fcmVjZWl2ZXJfcXVlcnlfZm9ybWF0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX2Flc19yeCwgY29uc3QgdTMyIGluZGV4LCB1MTYgKnB3X2Zvcm1hdCk7Cit1MTYgaHBpX2Flc2VidV9yZWNlaXZlcl9xdWVyeV9mb3JtYXQoY29uc3QgdTMyIGhfYWVzX3J4LCBjb25zdCB1MzIgaW5kZXgsCisJdTE2ICpwd19mb3JtYXQpOwogCi11MTYgSFBJX0FFU0VCVV9fcmVjZWl2ZXJfc2V0X2Zvcm1hdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgc291cmNlKTsKK3UxNiBocGlfYWVzZWJ1X3JlY2VpdmVyX3NldF9mb3JtYXQodTMyIGhfY29udHJvbCwgdTE2IHNvdXJjZSk7CiAKLXUxNiBIUElfQUVTRUJVX19yZWNlaXZlcl9nZXRfZm9ybWF0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfc291cmNlKTsKK3UxNiBocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF9mb3JtYXQodTMyIGhfY29udHJvbCwgdTE2ICpwd19zb3VyY2UpOwogCi11MTYgSFBJX0FFU0VCVV9fcmVjZWl2ZXJfZ2V0X3NhbXBsZV9yYXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiAqcHNhbXBsZV9yYXRlKTsKK3UxNiBocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF9zYW1wbGVfcmF0ZSh1MzIgaF9jb250cm9sLCB1MzIgKnBzYW1wbGVfcmF0ZSk7CiAKLXUxNiBIUElfQUVTRUJVX19yZWNlaXZlcl9nZXRfdXNlcl9kYXRhKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2ICpwd19kYXRhKTsKK3UxNiBocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF91c2VyX2RhdGEodTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCB1MTYgKnB3X2RhdGEpOwogCi11MTYgSFBJX0FFU0VCVV9fcmVjZWl2ZXJfZ2V0X2NoYW5uZWxfc3RhdHVzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cwotCSpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2ICpwd19kYXRhKTsKK3UxNiBocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF9jaGFubmVsX3N0YXR1cyh1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsCisJdTE2ICpwd19kYXRhKTsKIAotdTE2IEhQSV9BRVNFQlVfX3JlY2VpdmVyX2dldF9lcnJvcl9zdGF0dXMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19lcnJvcl9kYXRhKTsKK3UxNiBocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF9lcnJvcl9zdGF0dXModTMyIGhfY29udHJvbCwgdTE2ICpwd19lcnJvcl9kYXRhKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBBRVMvRUJVIFRyYW5zbWl0dGVyIGNvbnRyb2wgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdTE2IEhQSV9BRVNFQlVfX3RyYW5zbWl0dGVyX3NldF9zYW1wbGVfcmF0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMKLQkqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLCB1MzIgc2FtcGxlX3JhdGUpOwordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfc2V0X3NhbXBsZV9yYXRlKHUzMiBoX2NvbnRyb2wsIHUzMiBzYW1wbGVfcmF0ZSk7CiAKLXUxNiBIUElfQUVTRUJVX190cmFuc21pdHRlcl9zZXRfdXNlcl9kYXRhKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2IGRhdGEpOwordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfc2V0X3VzZXJfZGF0YSh1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsIHUxNiBkYXRhKTsKIAotdTE2IEhQSV9BRVNFQlVfX3RyYW5zbWl0dGVyX3NldF9jaGFubmVsX3N0YXR1cyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMKLQkqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsIHUxNiBkYXRhKTsKK3UxNiBocGlfYWVzZWJ1X3RyYW5zbWl0dGVyX3NldF9jaGFubmVsX3N0YXR1cyh1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsCisJdTE2IGRhdGEpOwogCi11MTYgSFBJX0FFU0VCVV9fdHJhbnNtaXR0ZXJfZ2V0X2NoYW5uZWxfc3RhdHVzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cwotCSpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2ICpwd19kYXRhKTsKK3UxNiBocGlfYWVzZWJ1X3RyYW5zbWl0dGVyX2dldF9jaGFubmVsX3N0YXR1cyh1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsCisJdTE2ICpwd19kYXRhKTsKIAotdTE2IEhQSV9BRVNFQlVfX3RyYW5zbWl0dGVyX3F1ZXJ5X2Zvcm1hdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF9hZXNfdHgsIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19mb3JtYXQpOwordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfcXVlcnlfZm9ybWF0KGNvbnN0IHUzMiBoX2Flc190eCwgY29uc3QgdTMyIGluZGV4LAorCXUxNiAqcHdfZm9ybWF0KTsKIAotdTE2IEhQSV9BRVNFQlVfX3RyYW5zbWl0dGVyX3NldF9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IG91dHB1dF9mb3JtYXQpOwordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfc2V0X2Zvcm1hdCh1MzIgaF9jb250cm9sLCB1MTYgb3V0cHV0X2Zvcm1hdCk7CiAKLXUxNiBIUElfQUVTRUJVX190cmFuc21pdHRlcl9nZXRfZm9ybWF0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfb3V0cHV0X2Zvcm1hdCk7Cit1MTYgaHBpX2Flc2VidV90cmFuc21pdHRlcl9nZXRfZm9ybWF0KHUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfb3V0cHV0X2Zvcm1hdCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIG11bHRpcGxleGVyIGNvbnRyb2wgKi8KKy8qIE11bHRpcGxleGVyIGNvbnRyb2wgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKi8KLXUxNiBocGlfbXVsdGlwbGV4ZXJfc2V0X3NvdXJjZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgc291cmNlX25vZGVfdHlwZSwgdTE2IHNvdXJjZV9ub2RlX2luZGV4KTsKK3UxNiBocGlfbXVsdGlwbGV4ZXJfc2V0X3NvdXJjZSh1MzIgaF9jb250cm9sLCB1MTYgc291cmNlX25vZGVfdHlwZSwKKwl1MTYgc291cmNlX25vZGVfaW5kZXgpOwogCi11MTYgaHBpX211bHRpcGxleGVyX2dldF9zb3VyY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpzb3VyY2Vfbm9kZV90eXBlLCB1MTYgKnNvdXJjZV9ub2RlX2luZGV4KTsKLQotdTE2IGhwaV9tdWx0aXBsZXhlcl9xdWVyeV9zb3VyY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCB1MTYgKnNvdXJjZV9ub2RlX3R5cGUsCit1MTYgaHBpX211bHRpcGxleGVyX2dldF9zb3VyY2UodTMyIGhfY29udHJvbCwgdTE2ICpzb3VyY2Vfbm9kZV90eXBlLAogCXUxNiAqc291cmNlX25vZGVfaW5kZXgpOwogCi0vKioqKioqKioqKioqKioqLwotLyogVk9YIGNvbnRyb2wgKi8KLS8qKioqKioqKioqKioqKiovCi11MTYgaHBpX3ZveF9zZXRfdGhyZXNob2xkKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXNob3J0IGFuX2dhaW4wXzAxZEIpOwordTE2IGhwaV9tdWx0aXBsZXhlcl9xdWVyeV9zb3VyY2UodTMyIGhfY29udHJvbCwgdTE2IGluZGV4LAorCXUxNiAqc291cmNlX25vZGVfdHlwZSwgdTE2ICpzb3VyY2Vfbm9kZV9pbmRleCk7CiAKLXUxNiBocGlfdm94X2dldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgKmFuX2dhaW4wXzAxZEIpOworLyoqKioqKioqKioqKioqKi8KKy8qIFZveCBjb250cm9sICovCisvKioqKioqKioqKioqKioqLwordTE2IGhwaV92b3hfc2V0X3RocmVzaG9sZCh1MzIgaF9jb250cm9sLCBzaG9ydCBhbl9nYWluMF8wMWRCKTsKKwordTE2IGhwaV92b3hfZ2V0X3RocmVzaG9sZCh1MzIgaF9jb250cm9sLCBzaG9ydCAqYW5fZ2FpbjBfMDFkQik7CiAKIC8qKioqKioqKioqKioqKioqKioqKiovCiAvKiBCaXRzdHJlYW0gY29udHJvbCAqLwogLyoqKioqKioqKioqKioqKioqKioqKi8KLXUxNiBocGlfYml0c3RyZWFtX3NldF9jbG9ja19lZGdlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBlZGdlX3R5cGUpOwordTE2IGhwaV9iaXRzdHJlYW1fc2V0X2Nsb2NrX2VkZ2UodTMyIGhfY29udHJvbCwgdTE2IGVkZ2VfdHlwZSk7CiAKLXUxNiBocGlfYml0c3RyZWFtX3NldF9kYXRhX3BvbGFyaXR5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBwb2xhcml0eSk7Cit1MTYgaHBpX2JpdHN0cmVhbV9zZXRfZGF0YV9wb2xhcml0eSh1MzIgaF9jb250cm9sLCB1MTYgcG9sYXJpdHkpOwogCi11MTYgaHBpX2JpdHN0cmVhbV9nZXRfYWN0aXZpdHkoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19jbGtfYWN0aXZpdHksIHUxNiAqcHdfZGF0YV9hY3Rpdml0eSk7Cit1MTYgaHBpX2JpdHN0cmVhbV9nZXRfYWN0aXZpdHkodTMyIGhfY29udHJvbCwgdTE2ICpwd19jbGtfYWN0aXZpdHksCisJdTE2ICpwd19kYXRhX2FjdGl2aXR5KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqLwogLyogU2FtcGxlQ2xvY2sgY29udHJvbCAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqLwogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19xdWVyeV9zb3VyY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfY2xvY2ssIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19zb3VyY2UpOwordTE2IGhwaV9zYW1wbGVfY2xvY2tfcXVlcnlfc291cmNlKGNvbnN0IHUzMiBoX2Nsb2NrLCBjb25zdCB1MzIgaW5kZXgsCisJdTE2ICpwd19zb3VyY2UpOwogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19zZXRfc291cmNlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBzb3VyY2UpOwordTE2IGhwaV9zYW1wbGVfY2xvY2tfc2V0X3NvdXJjZSh1MzIgaF9jb250cm9sLCB1MTYgc291cmNlKTsKIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NvdXJjZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgKnB3X3NvdXJjZSk7Cit1MTYgaHBpX3NhbXBsZV9jbG9ja19nZXRfc291cmNlKHUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfc291cmNlKTsKIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfcXVlcnlfc291cmNlX2luZGV4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX2Nsb2NrLCBjb25zdCB1MzIgaW5kZXgsIGNvbnN0IHUzMiBzb3VyY2UsCi0JdTE2ICpwd19zb3VyY2VfaW5kZXgpOwordTE2IGhwaV9zYW1wbGVfY2xvY2tfcXVlcnlfc291cmNlX2luZGV4KGNvbnN0IHUzMiBoX2Nsb2NrLCBjb25zdCB1MzIgaW5kZXgsCisJY29uc3QgdTMyIHNvdXJjZSwgdTE2ICpwd19zb3VyY2VfaW5kZXgpOwogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19zZXRfc291cmNlX2luZGV4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBzb3VyY2VfaW5kZXgpOwordTE2IGhwaV9zYW1wbGVfY2xvY2tfc2V0X3NvdXJjZV9pbmRleCh1MzIgaF9jb250cm9sLCB1MTYgc291cmNlX2luZGV4KTsKIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NvdXJjZV9pbmRleChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgKnB3X3NvdXJjZV9pbmRleCk7Cit1MTYgaHBpX3NhbXBsZV9jbG9ja19nZXRfc291cmNlX2luZGV4KHUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfc291cmNlX2luZGV4KTsKIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NhbXBsZV9yYXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiAqcHNhbXBsZV9yYXRlKTsKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX2dldF9zYW1wbGVfcmF0ZSh1MzIgaF9jb250cm9sLCB1MzIgKnBzYW1wbGVfcmF0ZSk7CiAKLXUxNiBocGlfc2FtcGxlX2Nsb2NrX3F1ZXJ5X2xvY2FsX3JhdGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfY2xvY2ssIGNvbnN0IHUzMiBpbmRleCwgdTMyICpwc291cmNlKTsKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX3F1ZXJ5X2xvY2FsX3JhdGUoY29uc3QgdTMyIGhfY2xvY2ssIGNvbnN0IHUzMiBpbmRleCwKKwl1MzIgKnBzb3VyY2UpOwogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19zZXRfbG9jYWxfcmF0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgc2FtcGxlX3JhdGUpOwordTE2IGhwaV9zYW1wbGVfY2xvY2tfc2V0X2xvY2FsX3JhdGUodTMyIGhfY29udHJvbCwgdTMyIHNhbXBsZV9yYXRlKTsKIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X2xvY2FsX3JhdGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwc2FtcGxlX3JhdGUpOwordTE2IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X2xvY2FsX3JhdGUodTMyIGhfY29udHJvbCwgdTMyICpwc2FtcGxlX3JhdGUpOwogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19zZXRfYXV0byhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgZW5hYmxlKTsKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX3NldF9hdXRvKHUzMiBoX2NvbnRyb2wsIHUzMiBlbmFibGUpOwogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19nZXRfYXV0byhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBlbmFibGUpOwordTE2IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X2F1dG8odTMyIGhfY29udHJvbCwgdTMyICpwZW5hYmxlKTsKIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfc2V0X2xvY2FsX3JhdGVfbG9jayhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgbG9jayk7Cit1MTYgaHBpX3NhbXBsZV9jbG9ja19zZXRfbG9jYWxfcmF0ZV9sb2NrKHUzMiBoX2NvbnRyb2wsIHUzMiBsb2NrKTsKIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X2xvY2FsX3JhdGVfbG9jayhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBsb2NrKTsKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX2dldF9sb2NhbF9yYXRlX2xvY2sodTMyIGhfY29udHJvbCwgdTMyICpwbG9jayk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIE1pY3JvcGhvbmUgY29udHJvbCAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqLwotdTE2IGhwaV9taWNyb3Bob25lX3NldF9waGFudG9tX3Bvd2VyKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBvbl9vZmYpOwordTE2IGhwaV9taWNyb3Bob25lX3NldF9waGFudG9tX3Bvd2VyKHUzMiBoX2NvbnRyb2wsIHUxNiBvbl9vZmYpOwogCi11MTYgaHBpX21pY3JvcGhvbmVfZ2V0X3BoYW50b21fcG93ZXIoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19vbl9vZmYpOwordTE2IGhwaV9taWNyb3Bob25lX2dldF9waGFudG9tX3Bvd2VyKHUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfb25fb2ZmKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgUGFyYW1ldHJpYyBFcXVhbGl6ZXIgY29udHJvbAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXUxNiBocGlfcGFyYW1ldHJpY0VRX19nZXRfaW5mbyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgKnB3X251bWJlcl9vZl9iYW5kcywgdTE2ICpwd19lbmFibGVkKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBhcmFtZXRyaWMgRXF1YWxpemVyIGNvbnRyb2wgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNiBocGlfcGFyYW1ldHJpY19lcV9nZXRfaW5mbyh1MzIgaF9jb250cm9sLCB1MTYgKnB3X251bWJlcl9vZl9iYW5kcywKKwl1MTYgKnB3X2VuYWJsZWQpOwogCi11MTYgaHBpX3BhcmFtZXRyaWNFUV9fc2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBvbl9vZmYpOwordTE2IGhwaV9wYXJhbWV0cmljX2VxX3NldF9zdGF0ZSh1MzIgaF9jb250cm9sLCB1MTYgb25fb2ZmKTsKIAotdTE2IGhwaV9wYXJhbWV0cmljRVFfX3NldF9iYW5kKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2IHR5cGUsIHUzMiBmcmVxdWVuY3lfaHosIHNob3J0IHExMDAsCi0Jc2hvcnQgZ2FpbjBfMDFkQik7Cit1MTYgaHBpX3BhcmFtZXRyaWNfZXFfc2V0X2JhbmQodTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCB1MTYgdHlwZSwKKwl1MzIgZnJlcXVlbmN5X2h6LCBzaG9ydCBxMTAwLCBzaG9ydCBnYWluMF8wMWRCKTsKIAotdTE2IGhwaV9wYXJhbWV0cmljRVFfX2dldF9iYW5kKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2ICpwbl90eXBlLCB1MzIgKnBmcmVxdWVuY3lfaHosCi0Jc2hvcnQgKnBuUTEwMCwgc2hvcnQgKnBuX2dhaW4wXzAxZEIpOwordTE2IGhwaV9wYXJhbWV0cmljX2VxX2dldF9iYW5kKHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2ICpwbl90eXBlLAorCXUzMiAqcGZyZXF1ZW5jeV9oeiwgc2hvcnQgKnBuUTEwMCwgc2hvcnQgKnBuX2dhaW4wXzAxZEIpOwogCi11MTYgaHBpX3BhcmFtZXRyaWNFUV9fZ2V0X2NvZWZmcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsIHNob3J0IGNvZWZmc1s1XQordTE2IGhwaV9wYXJhbWV0cmljX2VxX2dldF9jb2VmZnModTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCBzaG9ydCBjb2VmZnNbNV0KIAkpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBDb21wcmVzc29yIEV4cGFuZGVyIGNvbnRyb2wKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbXByZXNzb3IgRXhwYW5kZXIgY29udHJvbCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXUxNiBocGlfY29tcGFuZGVyX3NldF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIG9uKTsKK3UxNiBocGlfY29tcGFuZGVyX3NldF9lbmFibGUodTMyIGhfY29udHJvbCwgdTMyIG9uKTsKIAotdTE2IGhwaV9jb21wYW5kZXJfZ2V0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBvbik7Cit1MTYgaHBpX2NvbXBhbmRlcl9nZXRfZW5hYmxlKHUzMiBoX2NvbnRyb2wsIHUzMiAqcG9uKTsKIAotdTE2IGhwaV9jb21wYW5kZXJfc2V0X21ha2V1cF9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHNob3J0IG1ha2V1cF9nYWluMF8wMWRCKTsKK3UxNiBocGlfY29tcGFuZGVyX3NldF9tYWtldXBfZ2Fpbih1MzIgaF9jb250cm9sLCBzaG9ydCBtYWtldXBfZ2FpbjBfMDFkQik7CiAKLXUxNiBocGlfY29tcGFuZGVyX2dldF9tYWtldXBfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCBzaG9ydCAqcG5fbWFrZXVwX2dhaW4wXzAxZEIpOwordTE2IGhwaV9jb21wYW5kZXJfZ2V0X21ha2V1cF9nYWluKHUzMiBoX2NvbnRyb2wsIHNob3J0ICpwbl9tYWtldXBfZ2FpbjBfMDFkQik7CiAKLXUxNiBocGlfY29tcGFuZGVyX3NldF9hdHRhY2tfdGltZV9jb25zdGFudChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMKLQkqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLCB1MzIgaW5kZXgsIHUzMiBhdHRhY2spOwordTE2IGhwaV9jb21wYW5kZXJfc2V0X2F0dGFja190aW1lX2NvbnN0YW50KHUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwKKwl1MzIgYXR0YWNrKTsKIAotdTE2IGhwaV9jb21wYW5kZXJfZ2V0X2F0dGFja190aW1lX2NvbnN0YW50KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cwotCSpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyICpwd19hdHRhY2spOwordTE2IGhwaV9jb21wYW5kZXJfZ2V0X2F0dGFja190aW1lX2NvbnN0YW50KHUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwKKwl1MzIgKnB3X2F0dGFjayk7CiAKLXUxNiBocGlfY29tcGFuZGVyX3NldF9kZWNheV90aW1lX2NvbnN0YW50KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyIGRlY2F5KTsKK3UxNiBocGlfY29tcGFuZGVyX3NldF9kZWNheV90aW1lX2NvbnN0YW50KHUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwKKwl1MzIgZGVjYXkpOwogCi11MTYgaHBpX2NvbXBhbmRlcl9nZXRfZGVjYXlfdGltZV9jb25zdGFudChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgaW5kZXgsIHUzMiAqcHdfZGVjYXkpOwordTE2IGhwaV9jb21wYW5kZXJfZ2V0X2RlY2F5X3RpbWVfY29uc3RhbnQodTMyIGhfY29udHJvbCwgdTMyIGluZGV4LAorCXUzMiAqcHdfZGVjYXkpOwogCi11MTYgaHBpX2NvbXBhbmRlcl9zZXRfdGhyZXNob2xkKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgc2hvcnQgdGhyZXNob2xkMF8wMWRCKTsKK3UxNiBocGlfY29tcGFuZGVyX3NldF90aHJlc2hvbGQodTMyIGhfY29udHJvbCwgdTMyIGluZGV4LAorCXNob3J0IHRocmVzaG9sZDBfMDFkQik7CiAKLXUxNiBocGlfY29tcGFuZGVyX2dldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGluZGV4LCBzaG9ydCAqcG5fdGhyZXNob2xkMF8wMWRCKTsKK3UxNiBocGlfY29tcGFuZGVyX2dldF90aHJlc2hvbGQodTMyIGhfY29udHJvbCwgdTMyIGluZGV4LAorCXNob3J0ICpwbl90aHJlc2hvbGQwXzAxZEIpOwogCi11MTYgaHBpX2NvbXBhbmRlcl9zZXRfcmF0aW8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGluZGV4LCB1MzIgcmF0aW8xMDApOwordTE2IGhwaV9jb21wYW5kZXJfc2V0X3JhdGlvKHUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyIHJhdGlvMTAwKTsKIAotdTE2IGhwaV9jb21wYW5kZXJfZ2V0X3JhdGlvKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyICpwd19yYXRpbzEwMCk7Cit1MTYgaHBpX2NvbXBhbmRlcl9nZXRfcmF0aW8odTMyIGhfY29udHJvbCwgdTMyIGluZGV4LCB1MzIgKnB3X3JhdGlvMTAwKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgQ29icmFuZXQgSE1JIGNvbnRyb2wKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11MTYgaHBpX2NvYnJhbmV0X2htaV93cml0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MzIgaG1pX2FkZHJlc3MsIHUzMiBieXRlX2NvdW50LCB1OCAqcGJfZGF0YSk7CisvKioqKioqKioqKioqKioqKioqKiovCisvKiBDb2JyYW5ldCBjb250cm9sICovCisvKioqKioqKioqKioqKioqKioqKiovCit1MTYgaHBpX2NvYnJhbmV0X2htaV93cml0ZSh1MzIgaF9jb250cm9sLCB1MzIgaG1pX2FkZHJlc3MsIHUzMiBieXRlX2NvdW50LAorCXU4ICpwYl9kYXRhKTsKIAotdTE2IGhwaV9jb2JyYW5ldF9obWlfcmVhZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MzIgaG1pX2FkZHJlc3MsIHUzMiBtYXhfYnl0ZV9jb3VudCwgdTMyICpwYnl0ZV9jb3VudCwgdTggKnBiX2RhdGEpOwordTE2IGhwaV9jb2JyYW5ldF9obWlfcmVhZCh1MzIgaF9jb250cm9sLCB1MzIgaG1pX2FkZHJlc3MsIHUzMiBtYXhfYnl0ZV9jb3VudCwKKwl1MzIgKnBieXRlX2NvdW50LCB1OCAqcGJfZGF0YSk7CiAKLXUxNiBocGlfY29icmFuZXRfaG1pX2dldF9zdGF0dXMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwc3RhdHVzLCB1MzIgKnByZWFkYWJsZV9zaXplLAotCXUzMiAqcHdyaXRlYWJsZV9zaXplKTsKK3UxNiBocGlfY29icmFuZXRfaG1pX2dldF9zdGF0dXModTMyIGhfY29udHJvbCwgdTMyICpwc3RhdHVzLAorCXUzMiAqcHJlYWRhYmxlX3NpemUsIHUzMiAqcHdyaXRlYWJsZV9zaXplKTsKIAotLypSZWFkIHRoZSBjdXJyZW50IElQIGFkZHJlc3MKLSovCi11MTYgaHBpX2NvYnJhbmV0X2dldElfcGFkZHJlc3MoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwaV9wYWRkcmVzcyk7Cit1MTYgaHBpX2NvYnJhbmV0X2dldF9pcF9hZGRyZXNzKHUzMiBoX2NvbnRyb2wsIHUzMiAqcGR3X2lwX2FkZHJlc3MpOwogCi0vKiBXcml0ZSB0aGUgY3VycmVudCBJUCBhZGRyZXNzCi0qLwotdTE2IGhwaV9jb2JyYW5ldF9zZXRJX3BhZGRyZXNzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBpX3BhZGRyZXNzKTsKK3UxNiBocGlfY29icmFuZXRfc2V0X2lwX2FkZHJlc3ModTMyIGhfY29udHJvbCwgdTMyIGR3X2lwX2FkZHJlc3MpOwogCi0vKiBSZWFkIHRoZSBzdGF0aWMgSVAgYWRkcmVzcwotKi8KLXUxNiBocGlfY29icmFuZXRfZ2V0X3N0YXRpY0lfcGFkZHJlc3MoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwaV9wYWRkcmVzcyk7Cit1MTYgaHBpX2NvYnJhbmV0X2dldF9zdGF0aWNfaXBfYWRkcmVzcyh1MzIgaF9jb250cm9sLCB1MzIgKnBkd19pcF9hZGRyZXNzKTsKIAotLyogV3JpdGUgdGhlIHN0YXRpYyBJUCBhZGRyZXNzCi0qLwotdTE2IGhwaV9jb2JyYW5ldF9zZXRfc3RhdGljSV9wYWRkcmVzcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgaV9wYWRkcmVzcyk7Cit1MTYgaHBpX2NvYnJhbmV0X3NldF9zdGF0aWNfaXBfYWRkcmVzcyh1MzIgaF9jb250cm9sLCB1MzIgZHdfaXBfYWRkcmVzcyk7CiAKLS8qIFJlYWQgdGhlIE1BQyBhZGRyZXNzCi0qLwotdTE2IGhwaV9jb2JyYW5ldF9nZXRNQV9jYWRkcmVzcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBtQUNfTVNfYnMsIHUzMiAqcG1BQ19MU19icyk7Cit1MTYgaHBpX2NvYnJhbmV0X2dldF9tYWNhZGRyZXNzKHUzMiBoX2NvbnRyb2wsIHUzMiAqcF9tYWNfbXNicywKKwl1MzIgKnBfbWFjX2xzYnMpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBUb25lIERldGVjdG9yIGNvbnRyb2wKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaEMsCi0JdTMyICpzdGF0ZSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRvbmUgRGV0ZWN0b3IgY29udHJvbCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X3N0YXRlKHUzMiBoQywgdTMyICpzdGF0ZSk7CiAKLXUxNiBocGlfdG9uZV9kZXRlY3Rvcl9zZXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaEMsCi0JdTMyIGVuYWJsZSk7Cit1MTYgaHBpX3RvbmVfZGV0ZWN0b3Jfc2V0X2VuYWJsZSh1MzIgaEMsIHUzMiBlbmFibGUpOwogCi11MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhDLAotCXUzMiAqZW5hYmxlKTsKK3UxNiBocGlfdG9uZV9kZXRlY3Rvcl9nZXRfZW5hYmxlKHUzMiBoQywgdTMyICplbmFibGUpOwogCi11MTYgaHBpX3RvbmVfZGV0ZWN0b3Jfc2V0X2V2ZW50X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaEMsIHUzMiBldmVudF9lbmFibGUpOwordTE2IGhwaV90b25lX2RldGVjdG9yX3NldF9ldmVudF9lbmFibGUodTMyIGhDLCB1MzIgZXZlbnRfZW5hYmxlKTsKIAotdTE2IGhwaV90b25lX2RldGVjdG9yX2dldF9ldmVudF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhDLCB1MzIgKmV2ZW50X2VuYWJsZSk7Cit1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X2V2ZW50X2VuYWJsZSh1MzIgaEMsIHUzMiAqZXZlbnRfZW5hYmxlKTsKIAotdTE2IGhwaV90b25lX2RldGVjdG9yX3NldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhDLCBpbnQgdGhyZXNob2xkKTsKK3UxNiBocGlfdG9uZV9kZXRlY3Rvcl9zZXRfdGhyZXNob2xkKHUzMiBoQywgaW50IHRocmVzaG9sZCk7CiAKLXUxNiBocGlfdG9uZV9kZXRlY3Rvcl9nZXRfdGhyZXNob2xkKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoQywgaW50ICp0aHJlc2hvbGQpOwordTE2IGhwaV90b25lX2RldGVjdG9yX2dldF90aHJlc2hvbGQodTMyIGhDLCBpbnQgKnRocmVzaG9sZCk7CiAKLXUxNiBocGlfdG9uZV9kZXRlY3Rvcl9nZXRfZnJlcXVlbmN5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoQywgdTMyIGluZGV4LCB1MzIgKmZyZXF1ZW5jeSk7Cit1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X2ZyZXF1ZW5jeSh1MzIgaEMsIHUzMiBpbmRleCwgdTMyICpmcmVxdWVuY3kpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBTaWxlbmNlIERldGVjdG9yIGNvbnRyb2wKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoQywgdTMyICpzdGF0ZSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNpbGVuY2UgRGV0ZWN0b3IgY29udHJvbCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X3N0YXRlKHUzMiBoQywgdTMyICpzdGF0ZSk7CiAKLXUxNiBocGlfc2lsZW5jZV9kZXRlY3Rvcl9zZXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoQywgdTMyIGVuYWJsZSk7Cit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3Jfc2V0X2VuYWJsZSh1MzIgaEMsIHUzMiBlbmFibGUpOwogCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaEMsIHUzMiAqZW5hYmxlKTsKK3UxNiBocGlfc2lsZW5jZV9kZXRlY3Rvcl9nZXRfZW5hYmxlKHUzMiBoQywgdTMyICplbmFibGUpOwogCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3Jfc2V0X2V2ZW50X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaEMsIHUzMiBldmVudF9lbmFibGUpOwordTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX3NldF9ldmVudF9lbmFibGUodTMyIGhDLCB1MzIgZXZlbnRfZW5hYmxlKTsKIAotdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX2dldF9ldmVudF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhDLCB1MzIgKmV2ZW50X2VuYWJsZSk7Cit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X2V2ZW50X2VuYWJsZSh1MzIgaEMsIHUzMiAqZXZlbnRfZW5hYmxlKTsKIAotdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX3NldF9kZWxheShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaEMsIHUzMiBkZWxheSk7Cit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3Jfc2V0X2RlbGF5KHUzMiBoQywgdTMyIGRlbGF5KTsKIAotdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX2dldF9kZWxheShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaEMsIHUzMiAqZGVsYXkpOwordTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX2dldF9kZWxheSh1MzIgaEMsIHUzMiAqZGVsYXkpOwogCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3Jfc2V0X3RocmVzaG9sZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaEMsIGludCB0aHJlc2hvbGQpOwordTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX3NldF90aHJlc2hvbGQodTMyIGhDLCBpbnQgdGhyZXNob2xkKTsKIAotdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX2dldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhDLCBpbnQgKnRocmVzaG9sZCk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIFVuaXZlcnNhbCBjb250cm9sCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdTE2IGhwaV9lbnRpdHlfZmluZF9uZXh0KHN0cnVjdCBocGlfZW50aXR5ICpjb250YWluZXJfZW50aXR5LAotCWVudW0gZV9lbnRpdHlfdHlwZSB0eXBlLCBlbnVtIGVfZW50aXR5X3JvbGUgcm9sZSwgaW50IHJlY3Vyc2l2ZV9mbGFnLAotCXN0cnVjdCBocGlfZW50aXR5ICoqY3VycmVudF9tYXRjaCk7Ci0KLXUxNiBocGlfZW50aXR5X2NvcHlfdmFsdWVfZnJvbShzdHJ1Y3QgaHBpX2VudGl0eSAqZW50aXR5LAotCWVudW0gZV9lbnRpdHlfdHlwZSB0eXBlLCBzaXplX3QgaXRlbV9jb3VudCwgdm9pZCAqdmFsdWVfZHN0X3ApOwotCi11MTYgaHBpX2VudGl0eV91bnBhY2soc3RydWN0IGhwaV9lbnRpdHkgKmVudGl0eSwgZW51bSBlX2VudGl0eV90eXBlICp0eXBlLAotCXNpemVfdCAqaXRlbXMsIGVudW0gZV9lbnRpdHlfcm9sZSAqcm9sZSwgdm9pZCAqKnZhbHVlKTsKLQotdTE2IGhwaV9lbnRpdHlfYWxsb2NfYW5kX3BhY2soY29uc3QgZW51bSBlX2VudGl0eV90eXBlIHR5cGUsCi0JY29uc3Qgc2l6ZV90IGl0ZW1fY291bnQsIGNvbnN0IGVudW0gZV9lbnRpdHlfcm9sZSByb2xlLCB2b2lkICp2YWx1ZSwKLQlzdHJ1Y3QgaHBpX2VudGl0eSAqKmVudGl0eSk7Ci0KLXZvaWQgaHBpX2VudGl0eV9mcmVlKHN0cnVjdCBocGlfZW50aXR5ICplbnRpdHkpOwotCi11MTYgaHBpX3VuaXZlcnNhbF9pbmZvKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaEMsCi0Jc3RydWN0IGhwaV9lbnRpdHkgKippbmZvKTsKLQotdTE2IGhwaV91bml2ZXJzYWxfZ2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaEMsCi0Jc3RydWN0IGhwaV9lbnRpdHkgKip2YWx1ZSk7Ci0KLXUxNiBocGlfdW5pdmVyc2FsX3NldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhDLAotCXN0cnVjdCBocGlfZW50aXR5ICp2YWx1ZSk7Ci0KLS8qLy8vLy8vLy8vLy8gKi8KLS8qIERTUCBDTE9DSyAgKi8KLS8qLy8vLy8vLy8vLy8gKi8KLXUxNiBocGlfY2xvY2tfb3Blbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTE2IGFkYXB0ZXJfaW5kZXgsCi0JdTMyICpwaF9kc3BfY2xvY2spOwotCi11MTYgaHBpX2Nsb2NrX3NldF90aW1lKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jbG9jaywKLQl1MTYgaG91ciwgdTE2IG1pbnV0ZSwgdTE2IHNlY29uZCwgdTE2IG1pbGxpX3NlY29uZCk7Ci0KLXUxNiBocGlfY2xvY2tfZ2V0X3RpbWUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2Nsb2NrLAotCXUxNiAqcHdfaG91ciwgdTE2ICpwd19taW51dGUsIHUxNiAqcHdfc2Vjb25kLCB1MTYgKnB3X21pbGxpX3NlY29uZCk7Ci0KLS8qLy8vLy8vLy8vLy8gKi8KLS8qIFBST0ZJTEUgICAgICAgICovCi0vKi8vLy8vLy8vLy8vICovCi11MTYgaHBpX3Byb2ZpbGVfb3Blbl9hbGwoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiBwcm9maWxlX2luZGV4LCB1MzIgKnBoX3Byb2ZpbGUsCi0JdTE2ICpwd19tYXhfcHJvZmlsZXMpOwotCi11MTYgaHBpX3Byb2ZpbGVfZ2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9wcm9maWxlLAotCXUxNiBpbmRleCwgdTE2ICpwd19zZWNvbmRzLCB1MzIgKnBtaWNyb19zZWNvbmRzLCB1MzIgKnBjYWxsX2NvdW50LAotCXUzMiAqcG1heF9taWNyb19zZWNvbmRzLCB1MzIgKnBtaW5fbWljcm9fc2Vjb25kcyk7Ci0KLXUxNiBocGlfcHJvZmlsZV9zdGFydF9hbGwoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX3Byb2ZpbGUpOwotCi11MTYgaHBpX3Byb2ZpbGVfc3RvcF9hbGwoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX3Byb2ZpbGUpOwotCi11MTYgaHBpX3Byb2ZpbGVfZ2V0X25hbWUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX3Byb2ZpbGUsCi0JdTE2IGluZGV4LCBjaGFyICpzel9wcm9maWxlX25hbWUsIHUxNiBwcm9maWxlX25hbWVfbGVuZ3RoKTsKLQotdTE2IGhwaV9wcm9maWxlX2dldF91dGlsaXphdGlvbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9wcm9maWxlLCB1MzIgKnB1dGlsaXphdGlvbik7Ci0KLS8qLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLS8qIFVUSUxJVFkgZnVuY3Rpb25zICovCit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X3RocmVzaG9sZCh1MzIgaEMsIGludCAqdGhyZXNob2xkKTsKKy8qKioqKioqKioqKioqKioqKioqKiovCisvKiBVdGlsaXR5IGZ1bmN0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKi8KIAogdTE2IGhwaV9mb3JtYXRfY3JlYXRlKHN0cnVjdCBocGlfZm9ybWF0ICpwX2Zvcm1hdCwgdTE2IGNoYW5uZWxzLCB1MTYgZm9ybWF0LAogCXUzMiBzYW1wbGVfcmF0ZSwgdTMyIGJpdF9yYXRlLCB1MzIgYXR0cmlidXRlcyk7CiAKLS8qIFVudGlsIGl0J3MgdmVyaWZpZWQsIHRoaXMgZnVuY3Rpb24gaXMgZm9yIFdpbmRvd3MgT1NzIG9ubHkgKi8KLQotI2VuZGlmCSAvKl9IX0hQSV8gKi8KLS8qCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTZWUgQ1ZTIGZvciBoaXN0b3J5LiAgTGFzdCBjb21wbGV0ZSBzZXQgaW4gcmV2IDEuMTQ2Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotKi8KKyNlbmRpZgkgLypfSFBJX0hfICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjAwMC5jCmluZGV4IDFiOWJmOTMuLjNlM2MyZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpNjAwMC5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjAwMC5jCkBAIC00MywxNiArNDMsMTcgQEAKICNkZWZpbmUgSFBJX0hJRl9FUlJPUl9NQVNLICAgICAgMHg0MDAwCiAKIC8qIEhQSTYwMDAgc3BlY2lmaWMgZXJyb3IgY29kZXMgKi8KKyNkZWZpbmUgSFBJNjAwMF9FUlJPUl9CQVNFIDkwMAkvKiBub3QgYWN0dWFsbHkgdXNlZCBhbnl3aGVyZSAqLwogCi0jZGVmaW5lIEhQSTYwMDBfRVJST1JfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMAorLyogb3BlcmF0aW9uYWwvbWVzc2FnaW5nIGVycm9ycyAqLwogI2RlZmluZSBIUEk2MDAwX0VSUk9SX01TR19SRVNQX0lETEVfVElNRU9VVCAgICAgICAgICAgICA5MDEKLSNkZWZpbmUgSFBJNjAwMF9FUlJPUl9NU0dfUkVTUF9TRU5EX01TR19BQ0sgICAgICAgICAgICAgOTAyCisKICNkZWZpbmUgSFBJNjAwMF9FUlJPUl9NU0dfUkVTUF9HRVRfUkVTUF9BQ0sgICAgICAgICAgICAgOTAzCiAjZGVmaW5lIEhQSTYwMDBfRVJST1JfTVNHX0dFVF9BRFIgICAgICAgICAgICAgICAgICAgICAgIDkwNAogI2RlZmluZSBIUEk2MDAwX0VSUk9SX1JFU1BfR0VUX0FEUiAgICAgICAgICAgICAgICAgICAgICA5MDUKICNkZWZpbmUgSFBJNjAwMF9FUlJPUl9NU0dfUkVTUF9CTE9DS1dSSVRFMzIgICAgICAgICAgICAgOTA2CiAjZGVmaW5lIEhQSTYwMDBfRVJST1JfTVNHX1JFU1BfQkxPQ0tSRUFEMzIgICAgICAgICAgICAgIDkwNwotI2RlZmluZSBIUEk2MDAwX0VSUk9SX01TR19JTlZBTElEX0RTUF9JTkRFWCAgICAgICAgICAgICA5MDgKKwogI2RlZmluZSBIUEk2MDAwX0VSUk9SX0NPTlRST0xfQ0FDSEVfUEFSQU1TICAgICAgICAgICAgICA5MDkKIAogI2RlZmluZSBIUEk2MDAwX0VSUk9SX1NFTkRfREFUQV9JRExFX1RJTUVPVVQgICAgICAgICAgICA5MTEKQEAgLTYyLDcgKzYzLDYgQEAKICNkZWZpbmUgSFBJNjAwMF9FUlJPUl9TRU5EX0RBVEFfQ01EICAgICAgICAgICAgICAgICAgICAgOTE1CiAjZGVmaW5lIEhQSTYwMDBfRVJST1JfU0VORF9EQVRBX1dSSVRFICAgICAgICAgICAgICAgICAgIDkxNgogI2RlZmluZSBIUEk2MDAwX0VSUk9SX1NFTkRfREFUQV9JRExFQ01EICAgICAgICAgICAgICAgICA5MTcKLSNkZWZpbmUgSFBJNjAwMF9FUlJPUl9TRU5EX0RBVEFfVkVSSUZZICAgICAgICAgICAgICAgICAgOTE4CiAKICNkZWZpbmUgSFBJNjAwMF9FUlJPUl9HRVRfREFUQV9JRExFX1RJTUVPVVQgICAgICAgICAgICAgOTIxCiAjZGVmaW5lIEhQSTYwMDBfRVJST1JfR0VUX0RBVEFfQUNLICAgICAgICAgICAgICAgICAgICAgIDkyMgpAQCAtNzYsOSArNzYsOCBAQAogCiAjZGVmaW5lIEhQSTYwMDBfRVJST1JfTVNHX1JFU1BfR0VUUkVTUENNRCAgICAgICAgICAgICAgIDk2MQogI2RlZmluZSBIUEk2MDAwX0VSUk9SX01TR19SRVNQX0lETEVDTUQgICAgICAgICAgICAgICAgICA5NjIKLSNkZWZpbmUgSFBJNjAwMF9FUlJPUl9NU0dfUkVTUF9CTE9DS1ZFUklGWTMyICAgICAgICAgICAgOTYzCiAKLS8qIGFkYXB0ZXIgaW5pdCBlcnJvcnMgKi8KKy8qIEluaXRpYWxpc2F0aW9uL2Jvb3Rsb2FkIGVycm9ycyAqLwogI2RlZmluZSBIUEk2MDAwX0VSUk9SX1VOSEFORExFRF9TVUJTWVNfSUQgICAgICAgICAgICAgICA5MzAKIAogLyogY2FuJ3QgYWNjZXNzIFBDSTIwNDAgKi8KQEAgLTIxMCw2ICsyMDksOCBAQAogc3RhdGljIHNob3J0IGNyZWF0ZV9hZGFwdGVyX29iaihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sCiAJdTMyICpwb3NfZXJyb3JfY29kZSk7CiAKK3N0YXRpYyB2b2lkIGRlbGV0ZV9hZGFwdGVyX29iaihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8pOworCiAvKiBsb2NhbCBnbG9iYWxzICovCiAKIHN0YXRpYyB1MTYgZ3dfcGNpX3JlYWRfYXNzZXJ0czsJLyogdXNlZCB0byBjb3VudCBQQ0kyMDQwIGVycm9ycyAqLwpAQCAtMjE3LDE3ICsyMTgsNyBAQAogCiBzdGF0aWMgdm9pZCBzdWJzeXNfbWVzc2FnZShzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQogewotCiAJc3dpdGNoIChwaG0tPmZ1bmN0aW9uKSB7Ci0JY2FzZSBIUElfU1VCU1lTX09QRU46Ci0JY2FzZSBIUElfU1VCU1lTX0NMT1NFOgotCWNhc2UgSFBJX1NVQlNZU19HRVRfSU5GTzoKLQljYXNlIEhQSV9TVUJTWVNfRFJJVkVSX1VOTE9BRDoKLQljYXNlIEhQSV9TVUJTWVNfRFJJVkVSX0xPQUQ6Ci0JY2FzZSBIUElfU1VCU1lTX0ZJTkRfQURBUFRFUlM6Ci0JCS8qIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIG5vdCBnZXQgaGVyZSAqLwotCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX1VOSU1QTEVNRU5URUQ7Ci0JCWJyZWFrOwogCWNhc2UgSFBJX1NVQlNZU19DUkVBVEVfQURBUFRFUjoKIAkJc3Vic3lzX2NyZWF0ZV9hZGFwdGVyKHBobSwgcGhyKTsKIAkJYnJlYWs7CkBAIC0yNDMsNyArMjM0LDYgQEAKIHN0YXRpYyB2b2lkIGNvbnRyb2xfbWVzc2FnZShzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sCiAJc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBocikKIHsKLQogCXN3aXRjaCAocGhtLT5mdW5jdGlvbikgewogCWNhc2UgSFBJX0NPTlRST0xfR0VUX1NUQVRFOgogCQlpZiAocGFvLT5oYXNfY29udHJvbF9jYWNoZSkgewpAQCAtMjUxLDcgKzI0MSwxMyBAQAogCQkJZXJyID0gaHBpNjAwMF91cGRhdGVfY29udHJvbF9jYWNoZShwYW8sIHBobSk7CiAKIAkJCWlmIChlcnIpIHsKLQkJCQlwaHItPmVycm9yID0gZXJyOworCQkJCWlmIChlcnIgPj0gSFBJX0VSUk9SX0JBQ0tFTkRfQkFTRSkgeworCQkJCQlwaHItPmVycm9yID0KKwkJCQkJCUhQSV9FUlJPUl9DT05UUk9MX0NBQ0hJTkc7CisJCQkJCXBoci0+c3BlY2lmaWNfZXJyb3IgPSBlcnI7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGhyLT5lcnJvciA9IGVycjsKKwkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTI2MiwxNiArMjU4LDE1IEBACiAJCX0KIAkJaHdfbWVzc2FnZShwYW8sIHBobSwgcGhyKTsKIAkJYnJlYWs7Ci0JY2FzZSBIUElfQ09OVFJPTF9HRVRfSU5GTzoKLQkJaHdfbWVzc2FnZShwYW8sIHBobSwgcGhyKTsKLQkJYnJlYWs7CiAJY2FzZSBIUElfQ09OVFJPTF9TRVRfU1RBVEU6CiAJCWh3X21lc3NhZ2UocGFvLCBwaG0sIHBocik7Ci0JCWhwaV9zeW5jX2NvbnRyb2xfY2FjaGUoKChzdHJ1Y3QgaHBpX2h3X29iaiAqKXBhby0+cHJpdiktPgotCQkJcF9jYWNoZSwgcGhtLCBwaHIpOworCQlocGlfY21uX2NvbnRyb2xfY2FjaGVfc3luY190b19tc2coKChzdHJ1Y3QgaHBpX2h3X29iaiAqKXBhby0+CisJCQkJcHJpdiktPnBfY2FjaGUsIHBobSwgcGhyKTsKIAkJYnJlYWs7CisKKwljYXNlIEhQSV9DT05UUk9MX0dFVF9JTkZPOgogCWRlZmF1bHQ6Ci0JCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9GVU5DOworCQlod19tZXNzYWdlKHBhbywgcGhtLCBwaHIpOwogCQlicmVhazsKIAl9CiB9CkBAIC0yODAsMjYgKzI3NSwxMiBAQAogCXN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7CiAJc3dpdGNoIChwaG0tPmZ1bmN0aW9uKSB7Ci0JY2FzZSBIUElfQURBUFRFUl9HRVRfSU5GTzoKLQkJaHdfbWVzc2FnZShwYW8sIHBobSwgcGhyKTsKLQkJYnJlYWs7CiAJY2FzZSBIUElfQURBUFRFUl9HRVRfQVNTRVJUOgogCQlhZGFwdGVyX2dldF9hc3NlcnRzKHBhbywgcGhtLCBwaHIpOwogCQlicmVhazsKLQljYXNlIEhQSV9BREFQVEVSX09QRU46Ci0JY2FzZSBIUElfQURBUFRFUl9DTE9TRToKLQljYXNlIEhQSV9BREFQVEVSX1RFU1RfQVNTRVJUOgotCWNhc2UgSFBJX0FEQVBURVJfU0VMRlRFU1Q6Ci0JY2FzZSBIUElfQURBUFRFUl9HRVRfTU9ERToKLQljYXNlIEhQSV9BREFQVEVSX1NFVF9NT0RFOgotCWNhc2UgSFBJX0FEQVBURVJfRklORF9PQkpFQ1Q6Ci0JY2FzZSBIUElfQURBUFRFUl9HRVRfUFJPUEVSVFk6Ci0JY2FzZSBIUElfQURBUFRFUl9TRVRfUFJPUEVSVFk6Ci0JY2FzZSBIUElfQURBUFRFUl9FTlVNX1BST1BFUlRZOgotCQlod19tZXNzYWdlKHBhbywgcGhtLCBwaHIpOwotCQlicmVhazsKKwogCWRlZmF1bHQ6Ci0JCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9GVU5DOworCQlod19tZXNzYWdlKHBhbywgcGhtLCBwaHIpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zMTEsNyArMjkyLDcgQEAKIAljYXNlIEhQSV9PU1RSRUFNX0hPU1RCVUZGRVJfQUxMT0M6CiAJY2FzZSBIUElfT1NUUkVBTV9IT1NUQlVGRkVSX0ZSRUU6CiAJCS8qIERvbid0IGxldCB0aGVzZSBtZXNzYWdlcyBnbyB0byB0aGUgSFcgZnVuY3Rpb24gYmVjYXVzZQotCQkgKiB0aGV5J3JlIGNhbGxlZCB3aXRob3V0IGFsbG9jYXRpbmcgdGhlIHNwaW5sb2NrLgorCQkgKiB0aGV5J3JlIGNhbGxlZCB3aXRob3V0IGxvY2tpbmcgdGhlIHNwaW5sb2NrLgogCQkgKiBGb3IgdGhlIEhQSTYwMDAgYWRhcHRlcnMgdGhlIEhXIHdvdWxkIHJldHVybgogCQkgKiBIUElfRVJST1JfSU5WQUxJRF9GVU5DIGFueXdheS4KIAkJICovCkBAIC0zMzEsNyArMzEyLDcgQEAKIAljYXNlIEhQSV9JU1RSRUFNX0hPU1RCVUZGRVJfQUxMT0M6CiAJY2FzZSBIUElfSVNUUkVBTV9IT1NUQlVGRkVSX0ZSRUU6CiAJCS8qIERvbid0IGxldCB0aGVzZSBtZXNzYWdlcyBnbyB0byB0aGUgSFcgZnVuY3Rpb24gYmVjYXVzZQotCQkgKiB0aGV5J3JlIGNhbGxlZCB3aXRob3V0IGFsbG9jYXRpbmcgdGhlIHNwaW5sb2NrLgorCQkgKiB0aGV5J3JlIGNhbGxlZCB3aXRob3V0IGxvY2tpbmcgdGhlIHNwaW5sb2NrLgogCQkgKiBGb3IgdGhlIEhQSTYwMDAgYWRhcHRlcnMgdGhlIEhXIHdvdWxkIHJldHVybgogCQkgKiBIUElfRVJST1JfSU5WQUxJRF9GVU5DIGFueXdheS4KIAkJICovCkBAIC0zNTUsNyArMzM2LDcgQEAKIAkvKiBzdWJzeXRlbSBtZXNzYWdlcyBnZXQgZXhlY3V0ZWQgYnkgZXZlcnkgSFBJLiAqLwogCS8qIEFsbCBvdGhlciBtZXNzYWdlcyBhcmUgaWdub3JlZCB1bmxlc3MgdGhlIGFkYXB0ZXIgaW5kZXggbWF0Y2hlcyAqLwogCS8qIGFuIGFkYXB0ZXIgaW4gdGhlIEhQSSAqLwotCUhQSV9ERUJVR19MT0coREVCVUcsICJPICVkLEYgJXhcbiIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uKTsKKwkvKkhQSV9ERUJVR19MT0coREVCVUcsICJPICVkLEYgJXhcbiIsIHBobS0+d09iamVjdCwgcGhtLT53RnVuY3Rpb24pOyAqLwogCiAJLyogaWYgRHNwIGhhcyBjcmFzaGVkIHRoZW4gZG8gbm90IGNvbW11bmljYXRlIHdpdGggaXQgYW55IG1vcmUgKi8KIAlpZiAocGhtLT5vYmplY3QgIT0gSFBJX09CSl9TVUJTWVNURU0pIHsKQEAgLTQzMywyMSArNDE0LDEzIEBACiAJc3RydWN0IGhwaV9hZGFwdGVyX29iaiBhbzsKIAlzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW87CiAJdTMyIG9zX2Vycm9yX2NvZGU7Ci0Jc2hvcnQgZXJyb3IgPSAwOworCXUxNiBlcnIgPSAwOwogCXUzMiBkc3BfaW5kZXggPSAwOwogCiAJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLCAic3Vic3lzX2NyZWF0ZV9hZGFwdGVyXG4iKTsKIAogCW1lbXNldCgmYW8sIDAsIHNpemVvZihhbykpOwogCi0JLyogdGhpcyBIUEkgb25seSBjcmVhdGVzIGFkYXB0ZXJzIGZvciBUSS9QQ0kyMDQwIGJhc2VkIGRldmljZXMgKi8KLQlpZiAocGhtLT51LnMucmVzb3VyY2UuYnVzX3R5cGUgIT0gSFBJX0JVU19QQ0kpCi0JCXJldHVybjsKLQlpZiAocGhtLT51LnMucmVzb3VyY2Uuci5wY2ktPnZlbmRvcl9pZCAhPSBIUElfUENJX1ZFTkRPUl9JRF9USSkKLQkJcmV0dXJuOwotCWlmIChwaG0tPnUucy5yZXNvdXJjZS5yLnBjaS0+ZGV2aWNlX2lkICE9IEhQSV9QQ0lfREVWX0lEX1BDSTIwNDApCi0JCXJldHVybjsKLQogCWFvLnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHBpX2h3X29iaiksIEdGUF9LRVJORUwpOwogCWlmICghYW8ucHJpdikgewogCQlIUElfREVCVUdfTE9HKEVSUk9SLCAiY2FudCBnZXQgbWVtIGZvciBhZGFwdGVyIG9iamVjdFxuIik7CkBAIC00NTYsMTYgKzQyOSwxOSBAQAogCX0KIAogCS8qIGNyZWF0ZSB0aGUgYWRhcHRlciBvYmplY3QgYmFzZWQgb24gdGhlIHJlc291cmNlIGluZm9ybWF0aW9uICovCi0JLyo/IG1lbWNweSgmYW8uUGNpLCZwaG0tPnUucy5SZXNvdXJjZS5yLlBjaSxzaXplb2YoYW8uUGNpKSk7ICovCiAJYW8ucGNpID0gKnBobS0+dS5zLnJlc291cmNlLnIucGNpOwogCi0JZXJyb3IgPSBjcmVhdGVfYWRhcHRlcl9vYmooJmFvLCAmb3NfZXJyb3JfY29kZSk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBocGlfYWRkX2FkYXB0ZXIoJmFvKTsKLQlpZiAoZXJyb3IpIHsKKwllcnIgPSBjcmVhdGVfYWRhcHRlcl9vYmooJmFvLCAmb3NfZXJyb3JfY29kZSk7CisJaWYgKGVycikgeworCQlkZWxldGVfYWRhcHRlcl9vYmooJmFvKTsKKwkJaWYgKGVyciA+PSBIUElfRVJST1JfQkFDS0VORF9CQVNFKSB7CisJCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0RTUF9CT09UTE9BRDsKKwkJCXBoci0+c3BlY2lmaWNfZXJyb3IgPSBlcnI7CisJCX0gZWxzZSB7CisJCQlwaHItPmVycm9yID0gZXJyOworCQl9CisKIAkJcGhyLT51LnMuZGF0YSA9IG9zX2Vycm9yX2NvZGU7Ci0JCWtmcmVlKGFvLnByaXYpOwotCQlwaHItPmVycm9yID0gZXJyb3I7CiAJCXJldHVybjsKIAl9CiAJLyogbmVlZCB0byB1cGRhdGUgcGFQYXJlbnRBZGFwdGVyICovCkBAIC00NzMsNyArNDQ5LDcgQEAKIAlpZiAoIXBhbykgewogCQkvKiBXZSBqdXN0IGFkZGVkIHRoaXMgYWRhcHRlciwgd2h5IGNhbid0IHdlIGZpbmQgaXQhPyAqLwogCQlIUElfREVCVUdfTE9HKEVSUk9SLCAibG9zdCBhZGFwdGVyIGFmdGVyIGJvb3RcbiIpOwotCQlwaHItPmVycm9yID0gOTUwOworCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0JBRF9BREFQVEVSOwogCQlyZXR1cm47CiAJfQogCkBAIC00ODIsOSArNDU4LDggQEAKIAkJcGh3LT5hZG9bZHNwX2luZGV4XS5wYV9wYXJlbnRfYWRhcHRlciA9IHBhbzsKIAl9CiAKLQlwaHItPnUucy5hd19hZGFwdGVyX2xpc3RbYW8uaW5kZXhdID0gYW8uYWRhcHRlcl90eXBlOworCXBoci0+dS5zLmFkYXB0ZXJfdHlwZSA9IGFvLmFkYXB0ZXJfdHlwZTsKIAlwaHItPnUucy5hZGFwdGVyX2luZGV4ID0gYW8uaW5kZXg7Ci0JcGhyLT51LnMubnVtX2FkYXB0ZXJzKys7CiAJcGhyLT5lcnJvciA9IDA7CiB9CiAKQEAgLTQ5MiwyMCArNDY3LDEzIEBACiAJc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQogewogCXN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbyA9IE5VTEw7Ci0Jc3RydWN0IGhwaV9od19vYmogKnBodzsKIAotCXBhbyA9IGhwaV9maW5kX2FkYXB0ZXIocGhtLT5hZGFwdGVyX2luZGV4KTsKKwlwYW8gPSBocGlfZmluZF9hZGFwdGVyKHBobS0+b2JqX2luZGV4KTsKIAlpZiAoIXBhbykKIAkJcmV0dXJuOwogCi0JcGh3ID0gKHN0cnVjdCBocGlfaHdfb2JqICopcGFvLT5wcml2OwotCi0JaWYgKHBhby0+aGFzX2NvbnRyb2xfY2FjaGUpCi0JCWhwaV9mcmVlX2NvbnRyb2xfY2FjaGUocGh3LT5wX2NhY2hlKTsKLQorCWRlbGV0ZV9hZGFwdGVyX29iaihwYW8pOwogCWhwaV9kZWxldGVfYWRhcHRlcihwYW8pOwotCWtmcmVlKHBodyk7Ci0KIAlwaHItPmVycm9yID0gMDsKIH0KIApAQCAtNTE5LDkgKzQ4Nyw2IEBACiAJdTMyIGNvbnRyb2xfY2FjaGVfY291bnQgPSAwOwogCXN0cnVjdCBocGlfaHdfb2JqICpwaHcgPSAoc3RydWN0IGhwaV9od19vYmogKilwYW8tPnByaXY7CiAKLQkvKiBpbml0IGVycm9yIHJlcG9ydGluZyAqLwotCXBhby0+ZHNwX2NyYXNoZWQgPSAwOwotCiAJLyogVGhlIFBDSTIwNDAgaGFzIHRoZSBmb2xsb3dpbmcgYWRkcmVzcyBtYXAgKi8KIAkvKiBCQVIwIC0gNEsgPSBIUEkgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycyBvbiBQQ0kyMDQwIChIUEkgQ1NSKSAqLwogCS8qIEJBUjEgLSAzMksgPSBIUEkgcmVnaXN0ZXJzIG9uIERTUCAqLwpAQCAtNTc1LDM2ICs1NDAsMzYgQEAKIAkvKiBnZXQgaW5mbyBhYm91dCB0aGUgYWRhcHRlciBieSBhc2tpbmcgdGhlIGFkYXB0ZXIgKi8KIAkvKiBzZW5kIGEgSFBJX0FEQVBURVJfR0VUX0lORk8gbWVzc2FnZSAqLwogCXsKLQkJc3RydWN0IGhwaV9tZXNzYWdlIGhNOwotCQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhSMDsJLyogcmVzcG9uc2UgZnJvbSBEU1AgMCAqLwotCQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhSMTsJLyogcmVzcG9uc2UgZnJvbSBEU1AgMSAqLworCQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CisJCXN0cnVjdCBocGlfcmVzcG9uc2UgaHIwOwkvKiByZXNwb25zZSBmcm9tIERTUCAwICovCisJCXN0cnVjdCBocGlfcmVzcG9uc2UgaHIxOwkvKiByZXNwb25zZSBmcm9tIERTUCAxICovCiAJCXUxNiBlcnJvciA9IDA7CiAKIAkJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLCAic2VuZCBBREFQVEVSX0dFVF9JTkZPXG4iKTsKLQkJbWVtc2V0KCZoTSwgMCwgc2l6ZW9mKGhNKSk7Ci0JCWhNLnR5cGUgPSBIUElfVFlQRV9NRVNTQUdFOwotCQloTS5zaXplID0gc2l6ZW9mKHN0cnVjdCBocGlfbWVzc2FnZSk7Ci0JCWhNLm9iamVjdCA9IEhQSV9PQkpfQURBUFRFUjsKLQkJaE0uZnVuY3Rpb24gPSBIUElfQURBUFRFUl9HRVRfSU5GTzsKLQkJaE0uYWRhcHRlcl9pbmRleCA9IDA7Ci0JCW1lbXNldCgmaFIwLCAwLCBzaXplb2YoaFIwKSk7Ci0JCW1lbXNldCgmaFIxLCAwLCBzaXplb2YoaFIxKSk7Ci0JCWhSMC5zaXplID0gc2l6ZW9mKGhSMCk7Ci0JCWhSMS5zaXplID0gc2l6ZW9mKGhSMSk7CisJCW1lbXNldCgmaG0sIDAsIHNpemVvZihobSkpOworCQlobS50eXBlID0gSFBJX1RZUEVfTUVTU0FHRTsKKwkJaG0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHBpX21lc3NhZ2UpOworCQlobS5vYmplY3QgPSBIUElfT0JKX0FEQVBURVI7CisJCWhtLmZ1bmN0aW9uID0gSFBJX0FEQVBURVJfR0VUX0lORk87CisJCWhtLmFkYXB0ZXJfaW5kZXggPSAwOworCQltZW1zZXQoJmhyMCwgMCwgc2l6ZW9mKGhyMCkpOworCQltZW1zZXQoJmhyMSwgMCwgc2l6ZW9mKGhyMSkpOworCQlocjAuc2l6ZSA9IHNpemVvZihocjApOworCQlocjEuc2l6ZSA9IHNpemVvZihocjEpOwogCi0JCWVycm9yID0gaHBpNjAwMF9tZXNzYWdlX3Jlc3BvbnNlX3NlcXVlbmNlKHBhbywgMCwgJmhNLCAmaFIwKTsKLQkJaWYgKGhSMC5lcnJvcikgewotCQkJSFBJX0RFQlVHX0xPRyhERUJVRywgIm1lc3NhZ2UgZXJyb3IgJWRcbiIsIGhSMC5lcnJvcik7Ci0JCQlyZXR1cm4gaFIwLmVycm9yOworCQllcnJvciA9IGhwaTYwMDBfbWVzc2FnZV9yZXNwb25zZV9zZXF1ZW5jZShwYW8sIDAsICZobSwgJmhyMCk7CisJCWlmIChocjAuZXJyb3IpIHsKKwkJCUhQSV9ERUJVR19MT0coREVCVUcsICJtZXNzYWdlIGVycm9yICVkXG4iLCBocjAuZXJyb3IpOworCQkJcmV0dXJuIGhyMC5lcnJvcjsKIAkJfQogCQlpZiAocGh3LT5udW1fZHNwID09IDIpIHsKLQkJCWVycm9yID0gaHBpNjAwMF9tZXNzYWdlX3Jlc3BvbnNlX3NlcXVlbmNlKHBhbywgMSwgJmhNLAotCQkJCSZoUjEpOworCQkJZXJyb3IgPSBocGk2MDAwX21lc3NhZ2VfcmVzcG9uc2Vfc2VxdWVuY2UocGFvLCAxLCAmaG0sCisJCQkJJmhyMSk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJcmV0dXJuIGVycm9yOwogCQl9Ci0JCXBhby0+YWRhcHRlcl90eXBlID0gaFIwLnUuYS5hZGFwdGVyX3R5cGU7Ci0JCXBhby0+aW5kZXggPSBoUjAudS5hLmFkYXB0ZXJfaW5kZXg7CisJCXBhby0+YWRhcHRlcl90eXBlID0gaHIwLnUuYXguaW5mby5hZGFwdGVyX3R5cGU7CisJCXBhby0+aW5kZXggPSBocjAudS5heC5pbmZvLmFkYXB0ZXJfaW5kZXg7CiAJfQogCiAJbWVtc2V0KCZwaHctPmNvbnRyb2xfY2FjaGVbMF0sIDAsCkBAIC02MTgsMjIgKzU4MywzNyBAQAogCQljb250cm9sX2NhY2hlX2NvdW50ID0KIAkJCWhwaV9yZWFkX3dvcmQoJnBody0+YWRvWzBdLAogCQkJSFBJX0hJRl9BRERSKGNvbnRyb2xfY2FjaGVfY291bnQpKTsKLQkJcGFvLT5oYXNfY29udHJvbF9jYWNoZSA9IDE7CiAKIAkJcGh3LT5wX2NhY2hlID0KIAkJCWhwaV9hbGxvY19jb250cm9sX2NhY2hlKGNvbnRyb2xfY2FjaGVfY291bnQsCi0JCQljb250cm9sX2NhY2hlX3NpemUsIChzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyAqKQorCQkJY29udHJvbF9jYWNoZV9zaXplLCAodW5zaWduZWQgY2hhciAqKQogCQkJJnBody0+Y29udHJvbF9jYWNoZVswXQogCQkJKTsKLQkJaWYgKCFwaHctPnBfY2FjaGUpCi0JCQlwYW8tPmhhc19jb250cm9sX2NhY2hlID0gMDsKLQl9IGVsc2UKLQkJcGFvLT5oYXNfY29udHJvbF9jYWNoZSA9IDA7CisJCWlmIChwaHctPnBfY2FjaGUpCisJCQlwYW8tPmhhc19jb250cm9sX2NhY2hlID0gMTsKKwl9CiAKIAlIUElfREVCVUdfTE9HKERFQlVHLCAiZ2V0IGFkYXB0ZXIgaW5mbyBBU0klMDRYIGluZGV4ICVkXG4iLAogCQlwYW8tPmFkYXB0ZXJfdHlwZSwgcGFvLT5pbmRleCk7CiAJcGFvLT5vcGVuID0gMDsJLyogdXBvbiBjcmVhdGlvbiB0aGUgYWRhcHRlciBpcyBjbG9zZWQgKi8KLQlyZXR1cm4gMDsKKworCWlmIChwaHctPnBfY2FjaGUpCisJCXBody0+cF9jYWNoZS0+YWRhcF9pZHggPSBwYW8tPmluZGV4OworCisJcmV0dXJuIGhwaV9hZGRfYWRhcHRlcihwYW8pOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfYWRhcHRlcl9vYmooc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvKQoreworCXN0cnVjdCBocGlfaHdfb2JqICpwaHcgPSAoc3RydWN0IGhwaV9od19vYmogKilwYW8tPnByaXY7CisKKwlpZiAocGFvLT5oYXNfY29udHJvbF9jYWNoZSkKKwkJaHBpX2ZyZWVfY29udHJvbF9jYWNoZShwaHctPnBfY2FjaGUpOworCisJLyogcmVzZXQgRFNQcyBvbiBhZGFwdGVyICovCisJaW93cml0ZTMyKDB4MDAwMzAwMEYsIHBody0+ZHcyMDQwX0hQSUNTUiArIEhQSV9SRVNFVCk7CisKKwlrZnJlZShwaHcpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjQ1LDExICs2MjUsMTMgQEAKICNpZm5kZWYgSElERV9QQ0lfQVNTRVJUUwogCS8qIGlmIHdlIGhhdmUgUENJMjA0MCBhc3NlcnRzIHRoZW4gY29sbGVjdCB0aGVtICovCiAJaWYgKChnd19wY2lfcmVhZF9hc3NlcnRzID4gMCkgfHwgKGd3X3BjaV93cml0ZV9hc3NlcnRzID4gMCkpIHsKLQkJcGhyLT51LmEuc2VyaWFsX251bWJlciA9CisJCXBoci0+dS5heC5hc3NlcnQucDEgPQogCQkJZ3dfcGNpX3JlYWRfYXNzZXJ0cyAqIDEwMCArIGd3X3BjaV93cml0ZV9hc3NlcnRzOwotCQlwaHItPnUuYS5hZGFwdGVyX2luZGV4ID0gMTsJLyogYXNzZXJ0IGNvdW50ICovCi0JCXBoci0+dS5hLmFkYXB0ZXJfdHlwZSA9IC0xOwkvKiAiZHNwIGluZGV4IiAqLwotCQlzdHJjcHkocGhyLT51LmEuc3pfYWRhcHRlcl9hc3NlcnQsICJQQ0kyMDQwIGVycm9yIik7CisJCXBoci0+dS5heC5hc3NlcnQucDIgPSAwOworCQlwaHItPnUuYXguYXNzZXJ0LmNvdW50ID0gMTsJLyogYXNzZXJ0IGNvdW50ICovCisJCXBoci0+dS5heC5hc3NlcnQuZHNwX2luZGV4ID0gLTE7CS8qICJkc3AgaW5kZXgiICovCisJCXN0cmNweShwaHItPnUuYXguYXNzZXJ0LnN6X21lc3NhZ2UsICJQQ0kyMDQwIGVycm9yIik7CisJCXBoci0+dS5heC5hc3NlcnQuZHNwX21zZ19hZGRyID0gMDsKIAkJZ3dfcGNpX3JlYWRfYXNzZXJ0cyA9IDA7CiAJCWd3X3BjaV93cml0ZV9hc3NlcnRzID0gMDsKIAkJcGhyLT5lcnJvciA9IDA7CkBAIC02ODYsMTAgKzY2OCwxMCBAQAogCiAJLyogTk9URSBkb24ndCB1c2Ugd0FkYXB0ZXJUeXBlIGluIHRoaXMgcm91dGluZS4gSXQgaXMgbm90IHNldHVwIHlldCAqLwogCi0Jc3dpdGNoIChwYW8tPnBjaS5zdWJzeXNfZGV2aWNlX2lkKSB7CisJc3dpdGNoIChwYW8tPnBjaS5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7CiAJY2FzZSAweDUxMDA6CiAJY2FzZSAweDUxMTA6CS8qIEFTSTUxMDAgcmV2QiBvciBoaWdoZXIgd2l0aCBDNjcxMUQgKi8KLQljYXNlIDB4NTIwMDoJLyogQVNJNTIwMCBQQ19pZSB2ZXJzaW9uIG9mIEFTSTUxMDAgKi8KKwljYXNlIDB4NTIwMDoJLyogQVNJNTIwMCBQQ0llIHZlcnNpb24gb2YgQVNJNTEwMCAqLwogCWNhc2UgMHg2MTAwOgogCWNhc2UgMHg2MjAwOgogCQlib290X2xvYWRfZmFtaWx5ID0gSFBJX0FEQVBURVJfRkFNSUxZX0FTSSgweDYyMDApOwpAQCAtNzA5LDggKzY5MSw5IEBACiAJICogbm90ZSB0aGF0IGJpdHMgNC4uMTUgYXJlIHJlYWQtb25seSBhbmQgc28gc2hvdWxkIGFsd2F5cyByZXR1cm4gemVybywKIAkgKiBldmVuIHRob3VnaCB3ZSB3cm90ZSAxIHRvIHRoZW0KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotCQlkZWxheSA9IGlvcmVhZDMyKHBody0+ZHcyMDQwX0hQSUNTUiArIEhQSV9SRVNFVCk7CisJaHBpb3NfZGVsYXlfbWljcm9fc2Vjb25kcygxMDAwKTsKKwlkZWxheSA9IGlvcmVhZDMyKHBody0+ZHcyMDQwX0hQSUNTUiArIEhQSV9SRVNFVCk7CisKIAlpZiAoZGVsYXkgIT0gZHcyMDQwX3Jlc2V0KSB7CiAJCUhQSV9ERUJVR19MT0coRVJST1IsICJJTklUX1BDSTIwNDAgJXggJXhcbiIsIGR3MjA0MF9yZXNldCwKIAkJCWRlbGF5KTsKQEAgLTc0Myw4ICs3MjYsNyBAQAogCWR3MjA0MF9yZXNldCA9IGR3MjA0MF9yZXNldCAmICh+MHgwMDAwMDAwOCk7CiAJaW93cml0ZTMyKGR3MjA0MF9yZXNldCwgcGh3LT5kdzIwNDBfSFBJQ1NSICsgSFBJX1JFU0VUKTsKIAkvKmRlbGF5IHRvIGFsbG93IERTUCB0byBnZXQgZ29pbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspCi0JCWRlbGF5ID0gaW9yZWFkMzIocGh3LT5kdzIwNDBfSFBJQ1NSICsgSFBJX1JFU0VUKTsKKwlocGlvc19kZWxheV9taWNyb19zZWNvbmRzKDEwMCk7CiAKIAkvKiBsb29wIHRocm91Z2ggYWxsIERTUHMsIGRvd25sb2FkaW5nIERTUCBjb2RlICovCiAJZm9yIChkc3BfaW5kZXggPSAwOyBkc3BfaW5kZXggPCBwaHctPm51bV9kc3A7IGRzcF9pbmRleCsrKSB7CkBAIC03ODMsMjcgKzc2NSwyNyBAQAogCQkJICovCiAJCQkvKiBieXBhc3MgUExMICovCiAJCQlocGlfd3JpdGVfd29yZChwZG8sIDB4MDFCN0MxMDAsIDB4MDAwMCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspCi0JCQkJZGVsYXkgPSBpb3JlYWQzMihwaHctPmR3MjA0MF9IUElDU1IgKwotCQkJCQlIUElfUkVTRVQpOworCQkJaHBpb3NfZGVsYXlfbWljcm9fc2Vjb25kcygxMDApOwogCiAJCQkvKiAgKiogdXNlIGRlZmF1bHQgb2YgUExMICB4NyAqKiAqLwogCQkJLyogRU1JRiA9IDIyNS8zPTc1TUh6ICovCiAJCQlocGlfd3JpdGVfd29yZChwZG8sIDB4MDFCN0MxMjAsIDB4ODAwMik7CisJCQlocGlvc19kZWxheV9taWNyb19zZWNvbmRzKDEwMCk7CisKIAkJCS8qIHBlcmkgPSAyMjUvMiAqLwogCQkJaHBpX3dyaXRlX3dvcmQocGRvLCAweDAxQjdDMTFDLCAweDgwMDEpOworCQkJaHBpb3NfZGVsYXlfbWljcm9fc2Vjb25kcygxMDApOworCiAJCQkvKiBjcHUgID0gMjI1LzEgKi8KIAkJCWhwaV93cml0ZV93b3JkKHBkbywgMHgwMUI3QzExOCwgMHg4MDAwKTsKLQkJCS8qIH4yMDB1cyBkZWxheSAqLwotCQkJZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykKLQkJCQlkZWxheSA9IGlvcmVhZDMyKHBody0+ZHcyMDQwX0hQSUNTUiArCi0JCQkJCUhQSV9SRVNFVCk7CisKKwkJCS8qIH4ybXMgZGVsYXkgKi8KKwkJCWhwaW9zX2RlbGF5X21pY3JvX3NlY29uZHMoMjAwMCk7CisKIAkJCS8qIFBMTCBub3QgYnlwYXNzZWQgKi8KIAkJCWhwaV93cml0ZV93b3JkKHBkbywgMHgwMUI3QzEwMCwgMHgwMDAxKTsKLQkJCS8qIH4yMDB1cyBkZWxheSAqLwotCQkJZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykKLQkJCQlkZWxheSA9IGlvcmVhZDMyKHBody0+ZHcyMDQwX0hQSUNTUiArCi0JCQkJCUhQSV9SRVNFVCk7CisJCQkvKiB+Mm1zIGRlbGF5ICovCisJCQlocGlvc19kZWxheV9taWNyb19zZWNvbmRzKDIwMDApOwogCQl9CiAKIAkJLyogdGVzdCByL3cgdG8gaW50ZXJuYWwgRFNQIG1lbW9yeQpAQCAtOTI3LDkgKzkwOSw3IEBACiAJCX0KIAogCQkvKiBkZWxheSBhIGxpdHRsZSB0byBhbGxvdyBTRFJBTSBhbmQgRFNQIHRvICJnZXQgZ29pbmciICovCi0KLQkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKLQkJCWRlbGF5ID0gaW9yZWFkMzIocGh3LT5kdzIwNDBfSFBJQ1NSICsgSFBJX1JFU0VUKTsKKwkJaHBpb3NfZGVsYXlfbWljcm9fc2Vjb25kcygxMDAwKTsKIAogCQkvKiB0ZXN0IGFjY2VzcyB0byBTRFJBTSAqLwogCQl7CkBAIC05NzYsNyArOTU2LDcgQEAKIAogCQkvKiB3cml0ZSB0aGUgRFNQIGNvZGUgZG93biBpbnRvIHRoZSBEU1BzIG1lbW9yeSAqLwogCQkvKkhwaURzcENvZGVfT3BlbihuQm9vdExvYWRGYW1pbHksJkRzcENvZGUscGR3T3NFcnJvckNvZGUpOyAqLwotCQlkc3BfY29kZS5wc19kZXYgPSBwYW8tPnBjaS5wX29zX2RhdGE7CisJCWRzcF9jb2RlLnBzX2RldiA9IHBhby0+cGNpLnBjaV9kZXY7CiAKIAkJZXJyb3IgPSBocGlfZHNwX2NvZGVfb3Blbihib290X2xvYWRfZmFtaWx5LCAmZHNwX2NvZGUsCiAJCQlwb3NfZXJyb3JfY29kZSk7CkBAIC0xMDczLDggKzEwNTMsNyBAQAogCiAJCS8qIHN0ZXAgMy4gU3RhcnQgY29kZSBieSBzZW5kaW5nIGludGVycnVwdCAqLwogCQlpb3dyaXRlMzIoMHgwMDAzMDAwMywgcGRvLT5wckhQSV9jb250cm9sKTsKLQkJZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspCi0JCQlkZWxheSA9IGlvcmVhZDMyKHBody0+ZHcyMDQwX0hQSUNTUiArIEhQSV9SRVNFVCk7CisJCWhwaW9zX2RlbGF5X21pY3JvX3NlY29uZHMoMTAwMDApOwogCiAJCS8qIHdhaXQgZm9yIGEgbm9uLXplcm8gdmFsdWUgaW4gaG9zdGNtZCAtCiAJCSAqIGluZGljYXRpbmcgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUKQEAgLTExMDEsNyArMTA4MCw3IEBACiAJCQkgKiBsb2NrcyB1cCB3aXRoIGEgYmx1ZXNjcmVlbiAoTk9UIEdQRiBvciBwYWdlZmF1bHQpLgogCQkJICovCiAJCQllbHNlCi0JCQkJaHBpb3NfZGVsYXlfbWljcm9fc2Vjb25kcygxMDAwKTsKKwkJCQlocGlvc19kZWxheV9taWNyb19zZWNvbmRzKDEwMDAwKTsKIAkJfQogCQlpZiAodGltZW91dCA9PSAwKQogCQkJcmV0dXJuIEhQSTYwMDBfRVJST1JfSU5JVF9OT0FDSzsKQEAgLTExMzIsMTQgKzExMTEsMTQgQEAKIAkJCQltYXNrID0gMHhGRkZGRkYwMEw7CiAJCQkJLyogQVNJNTEwMCB1c2VzIEFYNiBjb2RlLCAqLwogCQkJCS8qIGJ1dCBoYXMgbm8gUExEIHIvdyByZWdpc3RlciB0byB0ZXN0ICovCi0JCQkJaWYgKEhQSV9BREFQVEVSX0ZBTUlMWV9BU0kocGFvLT5wY2kuCi0JCQkJCQlzdWJzeXNfZGV2aWNlX2lkKSA9PQorCQkJCWlmIChIUElfQURBUFRFUl9GQU1JTFlfQVNJKHBhby0+cGNpLnBjaV9kZXYtPgorCQkJCQkJc3Vic3lzdGVtX2RldmljZSkgPT0KIAkJCQkJSFBJX0FEQVBURVJfRkFNSUxZX0FTSSgweDUxMDApKQogCQkJCQltYXNrID0gMHgwMDAwMDAwMEw7CiAJCQkJLyogQVNJNTIwMCB1c2VzIEFYNiBjb2RlLCAqLwogCQkJCS8qIGJ1dCBoYXMgbm8gUExEIHIvdyByZWdpc3RlciB0byB0ZXN0ICovCi0JCQkJaWYgKEhQSV9BREFQVEVSX0ZBTUlMWV9BU0kocGFvLT5wY2kuCi0JCQkJCQlzdWJzeXNfZGV2aWNlX2lkKSA9PQorCQkJCWlmIChIUElfQURBUFRFUl9GQU1JTFlfQVNJKHBhby0+cGNpLnBjaV9kZXYtPgorCQkJCQkJc3Vic3lzdGVtX2RldmljZSkgPT0KIAkJCQkJSFBJX0FEQVBURVJfRkFNSUxZX0FTSSgweDUyMDApKQogCQkJCQltYXNrID0gMHgwMDAwMDAwMEw7CiAJCQkJYnJlYWs7CkBAIC0xMjA0LDcgKzExODMsNyBAQAogCXUzMiBkYXRhID0gMDsKIAogCWlmIChocGlfc2V0X2FkZHJlc3MocGRvLCBhZGRyZXNzKSkKLQkJcmV0dXJuIDA7CS8qPyBubyB3YXkgdG8gcmV0dXJuIGVycm9yICovCisJCXJldHVybiAwOwkvKj8gTm8gd2F5IHRvIHJldHVybiBlcnJvciAqLwogCiAJLyogdGFrZSBjYXJlIG9mIGVycmF0YSBpbiByZXZCIERTUCAoMi4wLjEpICovCiAJZGF0YSA9IGlvcmVhZDMyKHBkby0+cHJIUElfZGF0YSk7CkBAIC0xMzQwLDEwICsxMzE5LDYgQEAKIAl1MzIgKnBfZGF0YTsKIAl1MTYgZXJyb3IgPSAwOwogCi0JLyogZG9lcyB0aGUgRFNQIHdlIGFyZSByZWZlcmVuY2luZyBleGlzdD8gKi8KLQlpZiAoZHNwX2luZGV4ID49IHBody0+bnVtX2RzcCkKLQkJcmV0dXJuIEhQSTYwMDBfRVJST1JfTVNHX0lOVkFMSURfRFNQX0lOREVYOwotCiAJYWNrID0gaHBpNjAwMF93YWl0X2RzcF9hY2socGFvLCBkc3BfaW5kZXgsIEhQSV9ISUZfSURMRSk7CiAJaWYgKGFjayAmIEhQSV9ISUZfRVJST1JfTUFTSykgewogCQlwYW8tPmRzcF9jcmFzaGVkKys7CkBAIC0xMzUxLDkgKzEzMjYsNyBAQAogCX0KIAlwYW8tPmRzcF9jcmFzaGVkID0gMDsKIAotCS8qIHNlbmQgdGhlIG1lc3NhZ2UgKi8KLQotCS8qIGdldCB0aGUgYWRkcmVzcyBhbmQgc2l6ZSAqLworCS8qIGdldCB0aGUgbWVzc2FnZSBhZGRyZXNzIGFuZCBzaXplICovCiAJaWYgKHBody0+bWVzc2FnZV9idWZmZXJfYWRkcmVzc19vbl9kc3AgPT0gMCkgewogCQl0aW1lb3V0ID0gVElNRU9VVDsKIAkJZG8gewpAQCAtMTM2OCwxMCArMTM0MSw5IEBACiAJfSBlbHNlCiAJCWFkZHJlc3MgPSBwaHctPm1lc3NhZ2VfYnVmZmVyX2FkZHJlc3Nfb25fZHNwOwogCi0JLyogICAgICAgIGR3TGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBocGlfbWVzc2FnZSk7ICovCiAJbGVuZ3RoID0gcGhtLT5zaXplOwogCi0JLyogc2VuZCBpdCAqLworCS8qIHNlbmQgdGhlIG1lc3NhZ2UgKi8KIAlwX2RhdGEgPSAodTMyICopcGhtOwogCWlmIChocGk2MDAwX2RzcF9ibG9ja193cml0ZTMyKHBhbywgZHNwX2luZGV4LCBhZGRyZXNzLCBwX2RhdGEsCiAJCQkodTE2KWxlbmd0aCAvIDQpKQpAQCAtMTM4NSw3ICsxMzU3LDcgQEAKIAlpZiAoYWNrICYgSFBJX0hJRl9FUlJPUl9NQVNLKQogCQlyZXR1cm4gSFBJNjAwMF9FUlJPUl9NU0dfUkVTUF9HRVRfUkVTUF9BQ0s7CiAKLQkvKiBnZXQgdGhlIGFkZHJlc3MgYW5kIHNpemUgKi8KKwkvKiBnZXQgdGhlIHJlc3BvbnNlIGFkZHJlc3MgKi8KIAlpZiAocGh3LT5yZXNwb25zZV9idWZmZXJfYWRkcmVzc19vbl9kc3AgPT0gMCkgewogCQl0aW1lb3V0ID0gVElNRU9VVDsKIAkJZG8gewpAQCAtMTQwOSw3ICsxMzgxLDcgQEAKIAlpZiAoIXRpbWVvdXQpCiAJCWxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHBpX3Jlc3BvbnNlKTsKIAotCS8qIGdldCBpdCAqLworCS8qIGdldCB0aGUgcmVzcG9uc2UgKi8KIAlwX2RhdGEgPSAodTMyICopcGhyOwogCWlmIChocGk2MDAwX2RzcF9ibG9ja19yZWFkMzIocGFvLCBkc3BfaW5kZXgsIGFkZHJlc3MsIHBfZGF0YSwKIAkJCSh1MTYpbGVuZ3RoIC8gNCkpCkBAIC0xODA1LDE3ICsxNzc3LDExIEBACiAJaHBpb3NfZHNwbG9ja19sb2NrKHBhbyk7CiAJZXJyb3IgPSBocGk2MDAwX21lc3NhZ2VfcmVzcG9uc2Vfc2VxdWVuY2UocGFvLCBkc3BfaW5kZXgsIHBobSwgcGhyKTsKIAotCS8qIG1heWJlIGFuIGVycm9yIHJlc3BvbnNlICovCi0JaWYgKGVycm9yKSB7Ci0JCS8qIHNvbWV0aGluZyBmYWlsZWQgaW4gdGhlIEhQSS9EU1AgaW50ZXJmYWNlICovCi0JCXBoci0+ZXJyb3IgPSBlcnJvcjsKLQkJLyoganVzdCB0aGUgaGVhZGVyIG9mIHRoZSByZXNwb25zZSBpcyB2YWxpZCAqLwotCQlwaHItPnNpemUgPSBzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpOworCWlmIChlcnJvcikJLyogc29tZXRoaW5nIGZhaWxlZCBpbiB0aGUgSFBJL0RTUCBpbnRlcmZhY2UgKi8KIAkJZ290byBlcnI7Ci0JfQogCi0JaWYgKHBoci0+ZXJyb3IgIT0gMCkJLyogc29tZXRoaW5nIGZhaWxlZCBpbiB0aGUgRFNQICovCi0JCWdvdG8gZXJyOworCWlmIChwaHItPmVycm9yKQkvKiBzb21ldGhpbmcgZmFpbGVkIGluIHRoZSBEU1AgKi8KKwkJZ290byBvdXQ7CiAKIAlzd2l0Y2ggKHBobS0+ZnVuY3Rpb24pIHsKIAljYXNlIEhQSV9PU1RSRUFNX1dSSVRFOgpAQCAtMTgyNywyMSArMTc5MywzMCBAQAogCQllcnJvciA9IGhwaTYwMDBfZ2V0X2RhdGEocGFvLCBkc3BfaW5kZXgsIHBobSwgcGhyKTsKIAkJYnJlYWs7CiAJY2FzZSBIUElfQURBUFRFUl9HRVRfQVNTRVJUOgotCQlwaHItPnUuYS5hZGFwdGVyX2luZGV4ID0gMDsJLyogZHNwIDAgZGVmYXVsdCAqLworCQlwaHItPnUuYXguYXNzZXJ0LmRzcF9pbmRleCA9IDA7CS8qIGRzcCAwIGRlZmF1bHQgKi8KIAkJaWYgKG51bV9kc3AgPT0gMikgewotCQkJaWYgKCFwaHItPnUuYS5hZGFwdGVyX3R5cGUpIHsKKwkJCWlmICghcGhyLT51LmF4LmFzc2VydC5jb3VudCkgewogCQkJCS8qIG5vIGFzc2VydCBmcm9tIGRzcCAwLCBjaGVjayBkc3AgMSAqLwogCQkJCWVycm9yID0gaHBpNjAwMF9tZXNzYWdlX3Jlc3BvbnNlX3NlcXVlbmNlKHBhbywKIAkJCQkJMSwgcGhtLCBwaHIpOwotCQkJCXBoci0+dS5hLmFkYXB0ZXJfaW5kZXggPSAxOworCQkJCXBoci0+dS5heC5hc3NlcnQuZHNwX2luZGV4ID0gMTsKIAkJCX0KIAkJfQogCX0KIAotCWlmIChlcnJvcikKLQkJcGhyLT5lcnJvciA9IGVycm9yOwotCiBlcnI6CisJaWYgKGVycm9yKSB7CisJCWlmIChlcnJvciA+PSBIUElfRVJST1JfQkFDS0VORF9CQVNFKSB7CisJCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0RTUF9DT01NVU5JQ0FUSU9OOworCQkJcGhyLT5zcGVjaWZpY19lcnJvciA9IGVycm9yOworCQl9IGVsc2UgeworCQkJcGhyLT5lcnJvciA9IGVycm9yOworCQl9CisKKwkJLyoganVzdCB0aGUgaGVhZGVyIG9mIHRoZSByZXNwb25zZSBpcyB2YWxpZCAqLworCQlwaHItPnNpemUgPSBzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpOworCX0KK291dDoKIAlocGlvc19kc3Bsb2NrX3VubG9jayhwYW8pOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jIGIvc291bmQvcGNpL2FzaWhwaS9ocGk2MjA1LmMKaW5kZXggMjY3MmY2NTkuLjYyMDUyNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jCkBAIC0zOCwyNyArMzgsMjYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogSFBJNjIwNSBzcGVjaWZpYyBlcnJvciBjb2RlcyAqLwotI2RlZmluZSBIUEk2MjA1X0VSUk9SX0JBU0UgICAgICAgICAgICAgICAgICAgICAgMTAwMAotLyojZGVmaW5lIEhQSTYyMDVfRVJST1JfTUVNX0FMTE9DIDEwMDEgKi8KKyNkZWZpbmUgSFBJNjIwNV9FUlJPUl9CQVNFIDEwMDAJLyogbm90IGFjdHVhbGx5IHVzZWQgYW55d2hlcmUgKi8KKworLyogb3BlcmF0aW9uYWwvbWVzc2FnaW5nIGVycm9ycyAqLworI2RlZmluZSBIUEk2MjA1X0VSUk9SX01TR19SRVNQX0lETEVfVElNRU9VVCAgICAgMTAxNQorI2RlZmluZSBIUEk2MjA1X0VSUk9SX01TR19SRVNQX1RJTUVPVVQgICAgICAgICAgMTAxNgorCisvKiBpbml0aWFsaXphdGlvbi9ib290bG9hZCBlcnJvcnMgKi8KICNkZWZpbmUgSFBJNjIwNV9FUlJPUl82MjA1X05PX0lSUSAgICAgICAgICAgICAgIDEwMDIKICNkZWZpbmUgSFBJNjIwNV9FUlJPUl82MjA1X0lOSVRfRkFJTEVEICAgICAgICAgIDEwMDMKLS8qI2RlZmluZSBIUEk2MjA1X0VSUk9SX01JU1NJTkdfRFNQQ09ERSAxMDA0ICovCi0jZGVmaW5lIEhQSTYyMDVfRVJST1JfVU5LTk9XTl9QQ0lfREVWSUNFICAgICAgICAxMDA1CiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfNjIwNV9SRUcgICAgICAgICAgICAgICAgICAxMDA2CiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfNjIwNV9EU1BQQUdFICAgICAgICAgICAgICAxMDA3Ci0jZGVmaW5lIEhQSTYyMDVfRVJST1JfQkFEX0RTUElOREVYICAgICAgICAgICAgICAxMDA4CiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfQzY3MTNfSFBJQyAgICAgICAgICAgICAgICAxMDA5CiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfQzY3MTNfSFBJQSAgICAgICAgICAgICAgICAxMDEwCiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfQzY3MTNfUExMICAgICAgICAgICAgICAgICAxMDExCiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfRFNQX0lOVE1FTSAgICAgICAgICAgICAgICAxMDEyCiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfRFNQX0VYVE1FTSAgICAgICAgICAgICAgICAxMDEzCiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfRFNQX1BMRCAgICAgICAgICAgICAgICAgICAxMDE0Ci0jZGVmaW5lIEhQSTYyMDVfRVJST1JfTVNHX1JFU1BfSURMRV9USU1FT1VUICAgICAxMDE1Ci0jZGVmaW5lIEhQSTYyMDVfRVJST1JfTVNHX1JFU1BfVElNRU9VVCAgICAgICAgICAxMDE2CiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfNjIwNV9FRVBST00gICAgICAgICAgICAgICAxMDE3CiAjZGVmaW5lIEhQSTYyMDVfRVJST1JfRFNQX0VNSUYgICAgICAgICAgICAgICAgICAxMDE4CiAKLSNkZWZpbmUgaHBpNjIwNV9lcnJvcihkc3BfaW5kZXgsIGVycikgKGVycikKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGZvciBDNjIwNSBQQ0kgaS9mICovCiAvKiBIb3N0IFN0YXR1cyBSZWdpc3RlciAoSFNSKSBiaXRmaWVsZHMgKi8KQEAgLTEyOCw5ICsxMjcsNiBAQAogCXUzMiBvdXRzdHJlYW1faG9zdF9idWZmZXJfc2l6ZVtIUElfTUFYX1NUUkVBTVNdOwogCiAJc3RydWN0IGNvbnNpc3RlbnRfZG1hX2FyZWEgaF9jb250cm9sX2NhY2hlOwotCXN0cnVjdCBjb25zaXN0ZW50X2RtYV9hcmVhIGhfYXN5bmNfZXZlbnRfYnVmZmVyOwotLyogICAgICBzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfc2luZ2xlICpwQ29udHJvbENhY2hlOyAqLwotCXN0cnVjdCBocGlfYXN5bmNfZXZlbnQgKnBfYXN5bmNfZXZlbnRfYnVmZmVyOwogCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZSAqcF9jYWNoZTsKIH07CiAKQEAgLTIwOCw4ICsyMDQsOCBAQAogc3RhdGljIHUzMiBib290X2xvYWRlcl9yZWFkX21lbTMyKHN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbywgaW50IGRzcF9pbmRleCwKIAl1MzIgYWRkcmVzcyk7CiAKLXN0YXRpYyB1MTYgYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIoc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvLCBpbnQgZHNwX2luZGV4LAotCXUzMiBhZGRyZXNzLCB1MzIgZGF0YSk7CitzdGF0aWMgdm9pZCBib290X2xvYWRlcl93cml0ZV9tZW0zMihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sCisJaW50IGRzcF9pbmRleCwgdTMyIGFkZHJlc3MsIHUzMiBkYXRhKTsKIAogc3RhdGljIHUxNiBib290X2xvYWRlcl9jb25maWdfZW1pZihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sCiAJaW50IGRzcF9pbmRleCk7CkBAIC0yMjksMTcgKzIyNSw3IEBACiAKIHN0YXRpYyB2b2lkIHN1YnN5c19tZXNzYWdlKHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7Ci0KIAlzd2l0Y2ggKHBobS0+ZnVuY3Rpb24pIHsKLQljYXNlIEhQSV9TVUJTWVNfT1BFTjoKLQljYXNlIEhQSV9TVUJTWVNfQ0xPU0U6Ci0JY2FzZSBIUElfU1VCU1lTX0dFVF9JTkZPOgotCWNhc2UgSFBJX1NVQlNZU19EUklWRVJfVU5MT0FEOgotCWNhc2UgSFBJX1NVQlNZU19EUklWRVJfTE9BRDoKLQljYXNlIEhQSV9TVUJTWVNfRklORF9BREFQVEVSUzoKLQkJLyogbWVzc2FnZXMgdGhhdCBzaG91bGQgbm90IGdldCBoZXJlICovCi0JCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfVU5JTVBMRU1FTlRFRDsKLQkJYnJlYWs7CiAJY2FzZSBIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSOgogCQlzdWJzeXNfY3JlYXRlX2FkYXB0ZXIocGhtLCBwaHIpOwogCQlicmVhazsKQEAgLTI1NywxNSArMjQzLDIyIEBACiB7CiAKIAlzdHJ1Y3QgaHBpX2h3X29iaiAqcGh3ID0gcGFvLT5wcml2OworCXUxNiBwZW5kaW5nX2NhY2hlX2Vycm9yID0gMDsKIAogCXN3aXRjaCAocGhtLT5mdW5jdGlvbikgewogCWNhc2UgSFBJX0NPTlRST0xfR0VUX1NUQVRFOgogCQlpZiAocGFvLT5oYXNfY29udHJvbF9jYWNoZSkgewotCQkJcm1iKCk7CS8qIG1ha2Ugc3VyZSB3ZSBzZWUgdXBkYXRlcyBETV9hZWQgZnJvbSBEU1AgKi8KLQkJCWlmIChocGlfY2hlY2tfY29udHJvbF9jYWNoZShwaHctPnBfY2FjaGUsIHBobSwgcGhyKSkKKwkJCXJtYigpOwkvKiBtYWtlIHN1cmUgd2Ugc2VlIHVwZGF0ZXMgRE1BZWQgZnJvbSBEU1AgKi8KKwkJCWlmIChocGlfY2hlY2tfY29udHJvbF9jYWNoZShwaHctPnBfY2FjaGUsIHBobSwgcGhyKSkgewogCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX01FVEVSX1BFQUspIHsKKwkJCQlwZW5kaW5nX2NhY2hlX2Vycm9yID0KKwkJCQkJSFBJX0VSUk9SX0NPTlRST0xfQ0FDSElORzsKKwkJCX0KIAkJfQogCQlod19tZXNzYWdlKHBhbywgcGhtLCBwaHIpOworCQlpZiAocGVuZGluZ19jYWNoZV9lcnJvciAmJiAhcGhyLT5lcnJvcikKKwkJCXBoci0+ZXJyb3IgPSBwZW5kaW5nX2NhY2hlX2Vycm9yOwogCQlicmVhazsKIAljYXNlIEhQSV9DT05UUk9MX0dFVF9JTkZPOgogCQlod19tZXNzYWdlKHBhbywgcGhtLCBwaHIpOwpAQCAtMjczLDcgKzI2Niw4IEBACiAJY2FzZSBIUElfQ09OVFJPTF9TRVRfU1RBVEU6CiAJCWh3X21lc3NhZ2UocGFvLCBwaG0sIHBocik7CiAJCWlmIChwYW8tPmhhc19jb250cm9sX2NhY2hlKQotCQkJaHBpX3N5bmNfY29udHJvbF9jYWNoZShwaHctPnBfY2FjaGUsIHBobSwgcGhyKTsKKwkJCWhwaV9jbW5fY29udHJvbF9jYWNoZV9zeW5jX3RvX21zZyhwaHctPnBfY2FjaGUsIHBobSwKKwkJCQlwaHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfRlVOQzsKQEAgLTI5Niw5ICsyOTAsOSBAQAogewogCiAJaWYgKHBobS0+b2JqX2luZGV4ID49IEhQSV9NQVhfU1RSRUFNUykgewotCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfU1RSRUFNOworCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfT0JKX0lOREVYOwogCQlIUElfREVCVUdfTE9HKFdBUk5JTkcsCi0JCQkibWVzc2FnZSByZWZlcmVuY2luZyBpbnZhbGlkIHN0cmVhbSAlZCAiCisJCQkiTWVzc2FnZSByZWZlcmVuY2luZyBpbnZhbGlkIHN0cmVhbSAlZCAiCiAJCQkib24gYWRhcHRlciBpbmRleCAlZFxuIiwgcGhtLT5vYmpfaW5kZXgsCiAJCQlwaG0tPmFkYXB0ZXJfaW5kZXgpOwogCQlyZXR1cm47CkBAIC0zNDAsOSArMzM0LDkgQEAKIHsKIAogCWlmIChwaG0tPm9ial9pbmRleCA+PSBIUElfTUFYX1NUUkVBTVMpIHsKLQkJcGhyLT5lcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX1NUUkVBTTsKKwkJcGhyLT5lcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX09CSl9JTkRFWDsKIAkJSFBJX0RFQlVHX0xPRyhXQVJOSU5HLAotCQkJIm1lc3NhZ2UgcmVmZXJlbmNpbmcgaW52YWxpZCBzdHJlYW0gJWQgIgorCQkJIk1lc3NhZ2UgcmVmZXJlbmNpbmcgaW52YWxpZCBzdHJlYW0gJWQgIgogCQkJIm9uIGFkYXB0ZXIgaW5kZXggJWRcbiIsIHBobS0+b2JqX2luZGV4LAogCQkJcGhtLT5hZGFwdGVyX2luZGV4KTsKIAkJcmV0dXJuOwpAQCAtMzg1LDggKzM3OSw4IEBACiAJICogQWxsIG90aGVyIG1lc3NhZ2VzIGFyZSBpZ25vcmVkIHVubGVzcyB0aGUgYWRhcHRlciBpbmRleCBtYXRjaGVzCiAJICogYW4gYWRhcHRlciBpbiB0aGUgSFBJCiAJICovCi0JSFBJX0RFQlVHX0xPRyhERUJVRywgIkhQSSBvYmo9JWQsIGZ1bmM9JWRcbiIsIHBobS0+b2JqZWN0LAotCQlwaG0tPmZ1bmN0aW9uKTsKKwkvKiBIUElfREVCVUdfTE9HKERFQlVHLCAiSFBJIE9iaj0lZCwgRnVuYz0lZFxuIiwgcGhtLT53T2JqZWN0LAorCSAgIHBobS0+d0Z1bmN0aW9uKTsgKi8KIAogCS8qIGlmIERzcCBoYXMgY3Jhc2hlZCB0aGVuIGRvIG5vdCBjb21tdW5pY2F0ZSB3aXRoIGl0IGFueSBtb3JlICovCiAJaWYgKHBobS0+b2JqZWN0ICE9IEhQSV9PQkpfU1VCU1lTVEVNKSB7CkBAIC00MTEsOCArNDA1LDcgQEAKIAogCS8qIEluaXQgZGVmYXVsdCByZXNwb25zZSAgKi8KIAlpZiAocGhtLT5mdW5jdGlvbiAhPSBIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSKQotCQlocGlfaW5pdF9yZXNwb25zZShwaHIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uLAotCQkJSFBJX0VSUk9SX1BST0NFU1NJTkdfTUVTU0FHRSk7CisJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfUFJPQ0VTU0lOR19NRVNTQUdFOwogCiAJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLCAic3RhcnQgb2Ygc3dpdGNoXG4iKTsKIAlzd2l0Y2ggKHBobS0+dHlwZSkgewpAQCAtNDIzLDkgKzQxNiw2IEBACiAJCQlicmVhazsKIAogCQljYXNlIEhQSV9PQkpfQURBUFRFUjoKLQkJCXBoci0+c2l6ZSA9Ci0JCQkJc2l6ZW9mKHN0cnVjdCBocGlfcmVzcG9uc2VfaGVhZGVyKSArCi0JCQkJc2l6ZW9mKHN0cnVjdCBocGlfYWRhcHRlcl9yZXMpOwogCQkJYWRhcHRlcl9tZXNzYWdlKHBhbywgcGhtLCBwaHIpOwogCQkJYnJlYWs7CiAKQEAgLTQ3NCwxNCArNDY0LDYgQEAKIAogCW1lbXNldCgmYW8sIDAsIHNpemVvZihhbykpOwogCi0JLyogdGhpcyBIUEkgb25seSBjcmVhdGVzIGFkYXB0ZXJzIGZvciBUSS9QQ0kgZGV2aWNlcyAqLwotCWlmIChwaG0tPnUucy5yZXNvdXJjZS5idXNfdHlwZSAhPSBIUElfQlVTX1BDSSkKLQkJcmV0dXJuOwotCWlmIChwaG0tPnUucy5yZXNvdXJjZS5yLnBjaS0+dmVuZG9yX2lkICE9IEhQSV9QQ0lfVkVORE9SX0lEX1RJKQotCQlyZXR1cm47Ci0JaWYgKHBobS0+dS5zLnJlc291cmNlLnIucGNpLT5kZXZpY2VfaWQgIT0gSFBJX1BDSV9ERVZfSURfRFNQNjIwNSkKLQkJcmV0dXJuOwotCiAJYW8ucHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBocGlfaHdfb2JqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhby5wcml2KSB7CiAJCUhQSV9ERUJVR19MT0coRVJST1IsICJjYW50IGdldCBtZW0gZm9yIGFkYXB0ZXIgb2JqZWN0XG4iKTsKQEAgLTQ5MSwxOCArNDczLDIwIEBACiAKIAlhby5wY2kgPSAqcGhtLT51LnMucmVzb3VyY2Uuci5wY2k7CiAJZXJyID0gY3JlYXRlX2FkYXB0ZXJfb2JqKCZhbywgJm9zX2Vycm9yX2NvZGUpOwotCWlmICghZXJyKQotCQllcnIgPSBocGlfYWRkX2FkYXB0ZXIoJmFvKTsKIAlpZiAoZXJyKSB7Ci0JCXBoci0+dS5zLmRhdGEgPSBvc19lcnJvcl9jb2RlOwogCQlkZWxldGVfYWRhcHRlcl9vYmooJmFvKTsKLQkJcGhyLT5lcnJvciA9IGVycjsKKwkJaWYgKGVyciA+PSBIUElfRVJST1JfQkFDS0VORF9CQVNFKSB7CisJCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0RTUF9CT09UTE9BRDsKKwkJCXBoci0+c3BlY2lmaWNfZXJyb3IgPSBlcnI7CisJCX0gZWxzZSB7CisJCQlwaHItPmVycm9yID0gZXJyOworCQl9CisJCXBoci0+dS5zLmRhdGEgPSBvc19lcnJvcl9jb2RlOwogCQlyZXR1cm47CiAJfQogCi0JcGhyLT51LnMuYXdfYWRhcHRlcl9saXN0W2FvLmluZGV4XSA9IGFvLmFkYXB0ZXJfdHlwZTsKKwlwaHItPnUucy5hZGFwdGVyX3R5cGUgPSBhby5hZGFwdGVyX3R5cGU7CiAJcGhyLT51LnMuYWRhcHRlcl9pbmRleCA9IGFvLmluZGV4OwotCXBoci0+dS5zLm51bV9hZGFwdGVycysrOwogCXBoci0+ZXJyb3IgPSAwOwogfQogCkBAIC01MTMsNyArNDk3LDcgQEAKIAlzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW87CiAJc3RydWN0IGhwaV9od19vYmogKnBodzsKIAotCXBhbyA9IGhwaV9maW5kX2FkYXB0ZXIocGhtLT5hZGFwdGVyX2luZGV4KTsKKwlwYW8gPSBocGlfZmluZF9hZGFwdGVyKHBobS0+b2JqX2luZGV4KTsKIAlpZiAoIXBhbykgewogCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfT0JKX0lOREVYOwogCQlyZXR1cm47CkBAIC01MjYsNiArNTEwLDcgQEAKIAlpb3dyaXRlMzIoQzYyMDVfSERDUl9XQVJNUkVTRVQsIHBody0+cHJIRENSKTsKIAogCWRlbGV0ZV9hZGFwdGVyX29iaihwYW8pOworCWhwaV9kZWxldGVfYWRhcHRlcihwYW8pOwogCXBoci0+ZXJyb3IgPSAwOwogfQogCkBAIC01MzgsMTAgKzUyMyw2IEBACiAJc3RydWN0IGhwaV9od19vYmogKnBodyA9IHBhby0+cHJpdjsKIAlzdHJ1Y3QgYnVzX21hc3Rlcl9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAl1MzIgcGh5c19hZGRyOwotI2lmbmRlZiBIUEk2MjA1X05PX0hTUl9QT0xMCi0JdTMyIHRpbWVfb3V0ID0gSFBJNjIwNV9USU1FT1VUOwotCXUzMiB0ZW1wMTsKLSNlbmRpZgogCWludCBpOwogCXUxNiBlcnI7CiAKQEAgLTU2Niw3ICs1NDcsNyBAQAogCiAJaWYgKGhwaW9zX2xvY2tlZF9tZW1fYWxsb2MoJnBody0+aF9sb2NrZWRfbWVtLAogCQkJc2l6ZW9mKHN0cnVjdCBidXNfbWFzdGVyX2ludGVyZmFjZSksCi0JCQlwYW8tPnBjaS5wX29zX2RhdGEpKQorCQkJcGFvLT5wY2kucGNpX2RldikpCiAJCXBody0+cF9pbnRlcmZhY2VfYnVmZmVyID0gTlVMTDsKIAllbHNlIGlmIChocGlvc19sb2NrZWRfbWVtX2dldF92aXJ0X2FkZHIoJnBody0+aF9sb2NrZWRfbWVtLAogCQkJKHZvaWQgKikmcGh3LT5wX2ludGVyZmFjZV9idWZmZXIpKQpAQCAtNTkxLDQ5ICs1NzIsMjkgQEAKIAogCS8qIGFsbG93IGJvb3QgbG9hZCBldmVuIGlmIG1lbSBhbGxvYyB3b250IHdvcmsgKi8KIAlpZiAoIXBody0+cF9pbnRlcmZhY2VfYnVmZmVyKQotCQlyZXR1cm4gaHBpNjIwNV9lcnJvcigwLCBIUElfRVJST1JfTUVNT1JZX0FMTE9DKTsKKwkJcmV0dXJuIEhQSV9FUlJPUl9NRU1PUllfQUxMT0M7CiAKIAlpbnRlcmZhY2UgPSBwaHctPnBfaW50ZXJmYWNlX2J1ZmZlcjsKIAotI2lmbmRlZiBIUEk2MjA1X05PX0hTUl9QT0xMCi0JLyogd2FpdCBmb3IgZmlyc3QgaW50ZXJydXB0IGluZGljYXRpbmcgdGhlIERTUCBpbml0IGlzIGRvbmUgKi8KLQl0aW1lX291dCA9IEhQSTYyMDVfVElNRU9VVCAqIDEwOwotCXRlbXAxID0gMDsKLQl3aGlsZSAoKCh0ZW1wMSAmIEM2MjA1X0hTUl9JTlRTUkMpID09IDApICYmIC0tdGltZV9vdXQpCi0JCXRlbXAxID0gaW9yZWFkMzIocGh3LT5wckhTUik7Ci0KLQlpZiAodGVtcDEgJiBDNjIwNV9IU1JfSU5UU1JDKQotCQlIUElfREVCVUdfTE9HKElORk8sCi0JCQkiaW50ZXJydXB0IGNvbmZpcm1pbmcgRFNQIGNvZGUgcnVubmluZyBPS1xuIik7Ci0JZWxzZSB7Ci0JCUhQSV9ERUJVR19MT0coRVJST1IsCi0JCQkidGltZWQgb3V0IHdhaXRpbmcgZm9yIGludGVycnVwdCAiCi0JCQkiY29uZmlybWluZyBEU1AgY29kZSBydW5uaW5nXG4iKTsKLQkJcmV0dXJuIGhwaTYyMDVfZXJyb3IoMCwgSFBJNjIwNV9FUlJPUl82MjA1X05PX0lSUSk7Ci0JfQotCi0JLyogcmVzZXQgdGhlIGludGVycnVwdCAqLwotCWlvd3JpdGUzMihDNjIwNV9IU1JfSU5UU1JDLCBwaHctPnBySFNSKTsKLSNlbmRpZgotCiAJLyogbWFrZSBzdXJlIHRoZSBEU1AgaGFzIHN0YXJ0ZWQgb2sgKi8KIAlpZiAoIXdhaXRfZHNwX2FjayhwaHcsIEg2MjBfSElGX1JFU0VULCBIUEk2MjA1X1RJTUVPVVQgKiAxMCkpIHsKIAkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgInRpbWVkIG91dCB3YWl0aW5nIHJlc2V0IHN0YXRlIFxuIik7Ci0JCXJldHVybiBocGk2MjA1X2Vycm9yKDAsIEhQSTYyMDVfRVJST1JfNjIwNV9JTklUX0ZBSUxFRCk7CisJCXJldHVybiBIUEk2MjA1X0VSUk9SXzYyMDVfSU5JVF9GQUlMRUQ7CiAJfQogCS8qIE5vdGUgdGhhdCAqcGFvLCAqcGh3IGFyZSB6ZXJvZWQgYWZ0ZXIgYWxsb2NhdGlvbiwKIAkgKiBzbyBwb2ludGVycyBhbmQgZmxhZ3MgYXJlIE5VTEwgYnkgZGVmYXVsdC4KIAkgKiBBbGxvY2F0ZSBidXMgbWFzdGVyaW5nIGNvbnRyb2wgY2FjaGUgYnVmZmVyIGFuZCB0ZWxsIHRoZSBEU1AgYWJvdXQgaXQKIAkgKi8KIAlpZiAoaW50ZXJmYWNlLT5jb250cm9sX2NhY2hlLm51bWJlcl9vZl9jb250cm9scykgewotCQl2b2lkICpwX2NvbnRyb2xfY2FjaGVfdmlydHVhbDsKKwkJdTggKnBfY29udHJvbF9jYWNoZV92aXJ0dWFsOwogCiAJCWVyciA9IGhwaW9zX2xvY2tlZF9tZW1fYWxsb2MoJnBody0+aF9jb250cm9sX2NhY2hlLAogCQkJaW50ZXJmYWNlLT5jb250cm9sX2NhY2hlLnNpemVfaW5fYnl0ZXMsCi0JCQlwYW8tPnBjaS5wX29zX2RhdGEpOworCQkJcGFvLT5wY2kucGNpX2Rldik7CiAJCWlmICghZXJyKQogCQkJZXJyID0gaHBpb3NfbG9ja2VkX21lbV9nZXRfdmlydF9hZGRyKCZwaHctPgotCQkJCWhfY29udHJvbF9jYWNoZSwgJnBfY29udHJvbF9jYWNoZV92aXJ0dWFsKTsKKwkJCQloX2NvbnRyb2xfY2FjaGUsCisJCQkJKHZvaWQgKikmcF9jb250cm9sX2NhY2hlX3ZpcnR1YWwpOwogCQlpZiAoIWVycikgewogCQkJbWVtc2V0KHBfY29udHJvbF9jYWNoZV92aXJ0dWFsLCAwLAogCQkJCWludGVyZmFjZS0+Y29udHJvbF9jYWNoZS5zaXplX2luX2J5dGVzKTsKQEAgLTY0Miw3ICs2MDMsNiBAQAogCQkJCWhwaV9hbGxvY19jb250cm9sX2NhY2hlKGludGVyZmFjZS0+CiAJCQkJY29udHJvbF9jYWNoZS5udW1iZXJfb2ZfY29udHJvbHMsCiAJCQkJaW50ZXJmYWNlLT5jb250cm9sX2NhY2hlLnNpemVfaW5fYnl0ZXMsCi0JCQkJKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvICopCiAJCQkJcF9jb250cm9sX2NhY2hlX3ZpcnR1YWwpOwogCQkJaWYgKCFwaHctPnBfY2FjaGUpCiAJCQkJZXJyID0gSFBJX0VSUk9SX01FTU9SWV9BTExPQzsKQEAgLTY2Miw3OCArNjIyLDU2IEBACiAJCQlwYW8tPmhhc19jb250cm9sX2NhY2hlID0gMDsKIAkJfQogCX0KLQkvKiBhbGxvY2F0ZSBidXMgbWFzdGVyaW5nIGFzeW5jIGJ1ZmZlciBhbmQgdGVsbCB0aGUgRFNQIGFib3V0IGl0ICovCi0JaWYgKGludGVyZmFjZS0+YXN5bmNfYnVmZmVyLmIuc2l6ZSkgewotCQllcnIgPSBocGlvc19sb2NrZWRfbWVtX2FsbG9jKCZwaHctPmhfYXN5bmNfZXZlbnRfYnVmZmVyLAotCQkJaW50ZXJmYWNlLT5hc3luY19idWZmZXIuYi5zaXplICoKLQkJCXNpemVvZihzdHJ1Y3QgaHBpX2FzeW5jX2V2ZW50KSwgcGFvLT5wY2kucF9vc19kYXRhKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSBocGlvc19sb2NrZWRfbWVtX2dldF92aXJ0X2FkZHIKLQkJCQkoJnBody0+aF9hc3luY19ldmVudF9idWZmZXIsICh2b2lkICopCi0JCQkJJnBody0+cF9hc3luY19ldmVudF9idWZmZXIpOwotCQlpZiAoIWVycikKLQkJCW1lbXNldCgodm9pZCAqKXBody0+cF9hc3luY19ldmVudF9idWZmZXIsIDAsCi0JCQkJaW50ZXJmYWNlLT5hc3luY19idWZmZXIuYi5zaXplICoKLQkJCQlzaXplb2Yoc3RydWN0IGhwaV9hc3luY19ldmVudCkpOwotCQlpZiAoIWVycikgewotCQkJZXJyID0gaHBpb3NfbG9ja2VkX21lbV9nZXRfcGh5c19hZGRyCi0JCQkJKCZwaHctPmhfYXN5bmNfZXZlbnRfYnVmZmVyLCAmcGh5c19hZGRyKTsKLQkJCWludGVyZmFjZS0+YXN5bmNfYnVmZmVyLnBoeXNpY2FsX2FkZHJlc3MzMiA9Ci0JCQkJcGh5c19hZGRyOwotCQl9Ci0JCWlmIChlcnIpIHsKLQkJCWlmIChocGlvc19sb2NrZWRfbWVtX3ZhbGlkKCZwaHctPgotCQkJCQloX2FzeW5jX2V2ZW50X2J1ZmZlcikpIHsKLQkJCQlocGlvc19sb2NrZWRfbWVtX2ZyZWUKLQkJCQkJKCZwaHctPmhfYXN5bmNfZXZlbnRfYnVmZmVyKTsKLQkJCQlwaHctPnBfYXN5bmNfZXZlbnRfYnVmZmVyID0gTlVMTDsKLQkJCX0KLQkJfQotCX0KIAlzZW5kX2RzcF9jb21tYW5kKHBodywgSDYyMF9ISUZfSURMRSk7CiAKIAl7Ci0JCXN0cnVjdCBocGlfbWVzc2FnZSBoTTsKLQkJc3RydWN0IGhwaV9yZXNwb25zZSBoUjsKKwkJc3RydWN0IGhwaV9tZXNzYWdlIGhtOworCQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCQl1MzIgbWF4X3N0cmVhbXM7CiAKIAkJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLCAiaW5pdCBBREFQVEVSX0dFVF9JTkZPXG4iKTsKLQkJbWVtc2V0KCZoTSwgMCwgc2l6ZW9mKGhNKSk7Ci0JCWhNLnR5cGUgPSBIUElfVFlQRV9NRVNTQUdFOwotCQloTS5zaXplID0gc2l6ZW9mKGhNKTsKLQkJaE0ub2JqZWN0ID0gSFBJX09CSl9BREFQVEVSOwotCQloTS5mdW5jdGlvbiA9IEhQSV9BREFQVEVSX0dFVF9JTkZPOwotCQloTS5hZGFwdGVyX2luZGV4ID0gMDsKLQkJbWVtc2V0KCZoUiwgMCwgc2l6ZW9mKGhSKSk7Ci0JCWhSLnNpemUgPSBzaXplb2YoaFIpOworCQltZW1zZXQoJmhtLCAwLCBzaXplb2YoaG0pKTsKKwkJaG0udHlwZSA9IEhQSV9UWVBFX01FU1NBR0U7CisJCWhtLnNpemUgPSBzaXplb2YoaG0pOworCQlobS5vYmplY3QgPSBIUElfT0JKX0FEQVBURVI7CisJCWhtLmZ1bmN0aW9uID0gSFBJX0FEQVBURVJfR0VUX0lORk87CisJCWhtLmFkYXB0ZXJfaW5kZXggPSAwOworCQltZW1zZXQoJmhyLCAwLCBzaXplb2YoaHIpKTsKKwkJaHIuc2l6ZSA9IHNpemVvZihocik7CiAKLQkJZXJyID0gbWVzc2FnZV9yZXNwb25zZV9zZXF1ZW5jZShwYW8sICZoTSwgJmhSKTsKKwkJZXJyID0gbWVzc2FnZV9yZXNwb25zZV9zZXF1ZW5jZShwYW8sICZobSwgJmhyKTsKIAkJaWYgKGVycikgewogCQkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgIm1lc3NhZ2UgdHJhbnNwb3J0IGVycm9yICVkXG4iLAogCQkJCWVycik7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCWlmIChoUi5lcnJvcikKLQkJCXJldHVybiBoUi5lcnJvcjsKKwkJaWYgKGhyLmVycm9yKQorCQkJcmV0dXJuIGhyLmVycm9yOwogCi0JCXBhby0+YWRhcHRlcl90eXBlID0gaFIudS5hLmFkYXB0ZXJfdHlwZTsKLQkJcGFvLT5pbmRleCA9IGhSLnUuYS5hZGFwdGVyX2luZGV4OworCQlwYW8tPmFkYXB0ZXJfdHlwZSA9IGhyLnUuYXguaW5mby5hZGFwdGVyX3R5cGU7CisJCXBhby0+aW5kZXggPSBoci51LmF4LmluZm8uYWRhcHRlcl9pbmRleDsKIAotCQltYXhfc3RyZWFtcyA9IGhSLnUuYS5udW1fb3V0c3RyZWFtcyArIGhSLnUuYS5udW1faW5zdHJlYW1zOworCQltYXhfc3RyZWFtcyA9CisJCQloci51LmF4LmluZm8ubnVtX291dHN0cmVhbXMgKworCQkJaHIudS5heC5pbmZvLm51bV9pbnN0cmVhbXM7CiAKIAkJaHBpb3NfbG9ja2VkX21lbV9wcmVwYXJlKChtYXhfc3RyZWFtcyAqIDYpIC8gMTAsIG1heF9zdHJlYW1zLAotCQkJNjU1MzYsIHBhby0+cGNpLnBfb3NfZGF0YSk7CisJCQk2NTUzNiwgcGFvLT5wY2kucGNpX2Rldik7CiAKIAkJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLAogCQkJImdvdCBhZGFwdGVyIGluZm8gdHlwZSAleCBpbmRleCAlZCBzZXJpYWwgJWRcbiIsCi0JCQloUi51LmEuYWRhcHRlcl90eXBlLCBoUi51LmEuYWRhcHRlcl9pbmRleCwKLQkJCWhSLnUuYS5zZXJpYWxfbnVtYmVyKTsKKwkJCWhyLnUuYXguaW5mby5hZGFwdGVyX3R5cGUsIGhyLnUuYXguaW5mby5hZGFwdGVyX2luZGV4LAorCQkJaHIudS5heC5pbmZvLnNlcmlhbF9udW1iZXIpOwogCX0KIAogCXBhby0+b3BlbiA9IDA7CS8qIHVwb24gY3JlYXRpb24gdGhlIGFkYXB0ZXIgaXMgY2xvc2VkICovCiAKKwlpZiAocGh3LT5wX2NhY2hlKQorCQlwaHctPnBfY2FjaGUtPmFkYXBfaWR4ID0gcGFvLT5pbmRleDsKKwogCUhQSV9ERUJVR19MT0coSU5GTywgImJvb3Rsb2FkIERTUCBPS1xuIik7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gaHBpX2FkZF9hZGFwdGVyKHBhbyk7CiB9CiAKIC8qKiBGcmVlIG1lbW9yeSBhcmVhcyBhbGxvY2F0ZWQgYnkgYWRhcHRlcgpAQCAtNzQ3LDExICs2ODUsNiBAQAogCiAJcGh3ID0gcGFvLT5wcml2OwogCi0JaWYgKGhwaW9zX2xvY2tlZF9tZW1fdmFsaWQoJnBody0+aF9hc3luY19ldmVudF9idWZmZXIpKSB7Ci0JCWhwaW9zX2xvY2tlZF9tZW1fZnJlZSgmcGh3LT5oX2FzeW5jX2V2ZW50X2J1ZmZlcik7Ci0JCXBody0+cF9hc3luY19ldmVudF9idWZmZXIgPSBOVUxMOwotCX0KLQogCWlmIChocGlvc19sb2NrZWRfbWVtX3ZhbGlkKCZwaHctPmhfY29udHJvbF9jYWNoZSkpIHsKIAkJaHBpb3NfbG9ja2VkX21lbV9mcmVlKCZwaHctPmhfY29udHJvbF9jYWNoZSk7CiAJCWhwaV9mcmVlX2NvbnRyb2xfY2FjaGUocGh3LT5wX2NhY2hlKTsKQEAgLTc3NiwxMyArNzA5LDE1IEBACiAJCQlwaHctPm91dHN0cmVhbV9ob3N0X2J1ZmZlcl9zaXplW2ldID0gMDsKIAkJfQogCi0JaHBpb3NfbG9ja2VkX21lbV91bnByZXBhcmUocGFvLT5wY2kucF9vc19kYXRhKTsKKwlocGlvc19sb2NrZWRfbWVtX3VucHJlcGFyZShwYW8tPnBjaS5wY2lfZGV2KTsKIAotCWhwaV9kZWxldGVfYWRhcHRlcihwYW8pOwogCWtmcmVlKHBodyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFkYXB0ZXIgZnVuY3Rpb25zICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIE91dFN0cmVhbSBIb3N0IGJ1ZmZlciBmdW5jdGlvbnMgKi8KIAogLyoqIEFsbG9jYXRlIG9yIGF0dGFjaCBidWZmZXIgZm9yIGJ1c21hc3RlcmluZwpAQCAtODI0LDcgKzc1OSw3IEBACiAKIAkJZXJyID0gaHBpb3NfbG9ja2VkX21lbV9hbGxvYygmcGh3LT5vdXRzdHJlYW1faG9zdF9idWZmZXJzCiAJCQlbcGhtLT5vYmpfaW5kZXhdLCBwaG0tPnUuZC51LmJ1ZmZlci5idWZmZXJfc2l6ZSwKLQkJCXBhby0+cGNpLnBfb3NfZGF0YSk7CisJCQlwYW8tPnBjaS5wY2lfZGV2KTsKIAogCQlpZiAoZXJyKSB7CiAJCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfREFUQVNJWkU7CkBAIC04NjEsNyArNzk2LDcgQEAKIAkJaWYgKHBobS0+dS5kLnUuYnVmZmVyLmJ1ZmZlcl9zaXplICYgKHBobS0+dS5kLnUuYnVmZmVyLgogCQkJCWJ1ZmZlcl9zaXplIC0gMSkpIHsKIAkJCUhQSV9ERUJVR19MT0coRVJST1IsCi0JCQkJImJ1ZmZlciBzaXplIG11c3QgYmUgMl5OIG5vdCAlZFxuIiwKKwkJCQkiQnVmZmVyIHNpemUgbXVzdCBiZSAyXk4gbm90ICVkXG4iLAogCQkJCXBobS0+dS5kLnUuYnVmZmVyLmJ1ZmZlcl9zaXplKTsKIAkJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9EQVRBU0laRTsKIAkJCXJldHVybjsKQEAgLTg3NSw2ICs4MTAsNyBAQAogCQlzdGF0dXMtPmRTUF9pbmRleCA9IDA7CiAJCXN0YXR1cy0+aG9zdF9pbmRleCA9IHN0YXR1cy0+ZFNQX2luZGV4OwogCQlzdGF0dXMtPnNpemVfaW5fYnl0ZXMgPSBwaG0tPnUuZC51LmJ1ZmZlci5idWZmZXJfc2l6ZTsKKwkJc3RhdHVzLT5hdXhpbGlhcnlfZGF0YV9hdmFpbGFibGUgPSAwOwogCiAJCWh3X21lc3NhZ2UocGFvLCBwaG0sIHBocik7CiAKQEAgLTk2Niw1MSArOTAyLDYgQEAKIAlocGlfaW5pdF9yZXNwb25zZShwaHIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uLCAwKTsKIAlzdGF0dXMgPSAmaW50ZXJmYWNlLT5vdXRzdHJlYW1faG9zdF9idWZmZXJfc3RhdHVzW3BobS0+b2JqX2luZGV4XTsKIAotCWlmIChwaHctPmZsYWdfb3V0c3RyZWFtX2p1c3RfcmVzZXRbcGhtLT5vYmpfaW5kZXhdKSB7Ci0JCS8qIEZpcnN0IE91dFN0cmVtV3JpdGUoKSBjYWxsIGZvbGxvd2luZyByZXNldCB3aWxsIHdyaXRlIGRhdGEgdG8gdGhlCi0JCSAgIGFkYXB0ZXIncyBidWZmZXJzLCByZWR1Y2luZyBkZWxheSBiZWZvcmUgc3RyZWFtIGNhbiBzdGFydC4gVGhlIERTUAotCQkgICB0YWtlcyBjYXJlIG9mIHNldHRpbmcgdGhlIHN0cmVhbSBkYXRhIGZvcm1hdCB1c2luZyBmb3JtYXQgaW5mb3JtYXRpb24KLQkJICAgZW1iZWRkZWQgaW4gcGhtLgotCQkgKi8KLQkJaW50IHBhcnRpYWxfd3JpdGUgPSAwOwotCQl1bnNpZ25lZCBpbnQgb3JpZ2luYWxfc2l6ZSA9IDA7Ci0KLQkJcGh3LT5mbGFnX291dHN0cmVhbV9qdXN0X3Jlc2V0W3BobS0+b2JqX2luZGV4XSA9IDA7Ci0KLQkJLyogU2VuZCB0aGUgZmlyc3QgYnVmZmVyIHRvIHRoZSBEU1AgdGhlIG9sZCB3YXkuICovCi0JCS8qIExpbWl0IHNpemUgb2YgZmlyc3QgdHJhbnNmZXIgLSAqLwotCQkvKiBleHBlY3QgdGhhdCB0aGlzIHdpbGwgbm90IHVzdWFsbHkgYmUgdHJpZ2dlcmVkLiAqLwotCQlpZiAocGhtLT51LmQudS5kYXRhLmRhdGFfc2l6ZSA+IEhQSTYyMDVfU0laRU9GX0RBVEEpIHsKLQkJCXBhcnRpYWxfd3JpdGUgPSAxOwotCQkJb3JpZ2luYWxfc2l6ZSA9IHBobS0+dS5kLnUuZGF0YS5kYXRhX3NpemU7Ci0JCQlwaG0tPnUuZC51LmRhdGEuZGF0YV9zaXplID0gSFBJNjIwNV9TSVpFT0ZfREFUQTsKLQkJfQotCQkvKiB3cml0ZSBpdCAqLwotCQlwaG0tPmZ1bmN0aW9uID0gSFBJX09TVFJFQU1fV1JJVEU7Ci0JCWh3X21lc3NhZ2UocGFvLCBwaG0sIHBocik7Ci0KLQkJaWYgKHBoci0+ZXJyb3IpCi0JCQlyZXR1cm47Ci0KLQkJLyogdXBkYXRlIHN0YXR1cyBpbmZvcm1hdGlvbiB0aGF0IHRoZSBEU1Agd291bGQgdHlwaWNhbGx5Ci0JCSAqIHVwZGF0ZSAoYW5kIHdpbGwgdXBkYXRlIG5leHQgdGltZSB0aGUgRFNQCi0JCSAqIGJ1ZmZlciB1cGRhdGUgdGFzayByZWFkcyBkYXRhIGZyb20gdGhlIGhvc3QgQkJNIGJ1ZmZlcikKLQkJICovCi0JCXN0YXR1cy0+YXV4aWxpYXJ5X2RhdGFfYXZhaWxhYmxlID0gcGhtLT51LmQudS5kYXRhLmRhdGFfc2l6ZTsKLQkJc3RhdHVzLT5ob3N0X2luZGV4ICs9IHBobS0+dS5kLnUuZGF0YS5kYXRhX3NpemU7Ci0JCXN0YXR1cy0+ZFNQX2luZGV4ICs9IHBobS0+dS5kLnUuZGF0YS5kYXRhX3NpemU7Ci0KLQkJLyogaWYgd2UgZGlkIGEgZnVsbCB3cml0ZSwgd2UgY2FuIHJldHVybiBmcm9tIGhlcmUuICovCi0JCWlmICghcGFydGlhbF93cml0ZSkKLQkJCXJldHVybjsKLQotCQkvKiB0d2VhayBidWZmZXIgcGFyYW1ldGVycyBhbmQgbGV0IHRoZSByZXN0IG9mIHRoZSAqLwotCQkvKiBidWZmZXIgbGFuZCBpbiBpbnRlcm5hbCBCQk0gYnVmZmVyICovCi0JCXBobS0+dS5kLnUuZGF0YS5kYXRhX3NpemUgPQotCQkJb3JpZ2luYWxfc2l6ZSAtIEhQSTYyMDVfU0laRU9GX0RBVEE7Ci0JCXBobS0+dS5kLnUuZGF0YS5wYl9kYXRhICs9IEhQSTYyMDVfU0laRU9GX0RBVEE7Ci0JfQotCiAJc3BhY2VfYXZhaWxhYmxlID0gb3V0c3RyZWFtX2dldF9zcGFjZV9hdmFpbGFibGUoc3RhdHVzKTsKIAlpZiAoc3BhY2VfYXZhaWxhYmxlIDwgcGhtLT51LmQudS5kYXRhLmRhdGFfc2l6ZSkgewogCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfREFUQVNJWkU7CkBAIC0xMDQ3LDYgKzkzOCwyNCBAQAogCQltZW1jcHkocF9iYm1fZGF0YSwgcF9hcHBfZGF0YSArIGxfZmlyc3Rfd3JpdGUsCiAJCQlwaG0tPnUuZC51LmRhdGEuZGF0YV9zaXplIC0gbF9maXJzdF93cml0ZSk7CiAJfQorCisJLyoKKwkgKiBUaGlzIHZlcnNpb24gcmVsaWVzIG9uIHRoZSBEU1AgY29kZSB0cmlnZ2VyaW5nIGFuIE9TdHJlYW0gYnVmZmVyCisJICogdXBkYXRlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIFNFVF9GT1JNQVQgY2FsbC4gVGhlIGhvc3QgaGFzCisJICogYWxyZWFkeSB3cml0dGVuIGRhdGEgaW50byB0aGUgQkJNIGJ1ZmZlciwgYnV0IHRoZSBEU1Agd29uJ3Qga25vdworCSAqIGFib3V0IGl0IHVudGlsIGR3SG9zdEluZGV4IGlzIGFkanVzdGVkLgorCSAqLworCWlmIChwaHctPmZsYWdfb3V0c3RyZWFtX2p1c3RfcmVzZXRbcGhtLT5vYmpfaW5kZXhdKSB7CisJCS8qIEZvcm1hdCBjYW4gb25seSBjaGFuZ2UgYWZ0ZXIgcmVzZXQuIE11c3QgdGVsbCBEU1AuICovCisJCXUxNiBmdW5jdGlvbiA9IHBobS0+ZnVuY3Rpb247CisJCXBody0+ZmxhZ19vdXRzdHJlYW1fanVzdF9yZXNldFtwaG0tPm9ial9pbmRleF0gPSAwOworCQlwaG0tPmZ1bmN0aW9uID0gSFBJX09TVFJFQU1fU0VUX0ZPUk1BVDsKKwkJaHdfbWVzc2FnZShwYW8sIHBobSwgcGhyKTsJLyogc2VuZCB0aGUgZm9ybWF0IHRvIHRoZSBEU1AgKi8KKwkJcGhtLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOworCQlpZiAocGhyLT5lcnJvcikKKwkJCXJldHVybjsKKwl9CisKIAlzdGF0dXMtPmhvc3RfaW5kZXggKz0gcGhtLT51LmQudS5kYXRhLmRhdGFfc2l6ZTsKIH0KIApAQCAtMTEzMiw3ICsxMDQxLDcgQEAKIAogCQllcnIgPSBocGlvc19sb2NrZWRfbWVtX2FsbG9jKCZwaHctPmluc3RyZWFtX2hvc3RfYnVmZmVyc1twaG0tPgogCQkJCW9ial9pbmRleF0sIHBobS0+dS5kLnUuYnVmZmVyLmJ1ZmZlcl9zaXplLAotCQkJcGFvLT5wY2kucF9vc19kYXRhKTsKKwkJCXBhby0+cGNpLnBjaV9kZXYpOwogCiAJCWlmIChlcnIpIHsKIAkJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9EQVRBU0laRTsKQEAgLTExNjMsNyArMTA3Miw3IEBACiAJCWlmIChwaG0tPnUuZC51LmJ1ZmZlci5idWZmZXJfc2l6ZSAmIChwaG0tPnUuZC51LmJ1ZmZlci4KIAkJCQlidWZmZXJfc2l6ZSAtIDEpKSB7CiAJCQlIUElfREVCVUdfTE9HKEVSUk9SLAotCQkJCSJidWZmZXIgc2l6ZSBtdXN0IGJlIDJeTiBub3QgJWRcbiIsCisJCQkJIkJ1ZmZlciBzaXplIG11c3QgYmUgMl5OIG5vdCAlZFxuIiwKIAkJCQlwaG0tPnUuZC51LmJ1ZmZlci5idWZmZXJfc2l6ZSk7CiAJCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfREFUQVNJWkU7CiAJCQlyZXR1cm47CkBAIC0xMTc4LDggKzEwODcsMTAgQEAKIAkJc3RhdHVzLT5kU1BfaW5kZXggPSAwOwogCQlzdGF0dXMtPmhvc3RfaW5kZXggPSBzdGF0dXMtPmRTUF9pbmRleDsKIAkJc3RhdHVzLT5zaXplX2luX2J5dGVzID0gcGhtLT51LmQudS5idWZmZXIuYnVmZmVyX3NpemU7CisJCXN0YXR1cy0+YXV4aWxpYXJ5X2RhdGFfYXZhaWxhYmxlID0gMDsKIAogCQlod19tZXNzYWdlKHBhbywgcGhtLCBwaHIpOworCiAJCWlmIChwaHItPmVycm9yCiAJCQkmJiBocGlvc19sb2NrZWRfbWVtX3ZhbGlkKCZwaHctPgogCQkJCWluc3RyZWFtX2hvc3RfYnVmZmVyc1twaG0tPm9ial9pbmRleF0pKSB7CkBAIC0xMzQ0LDMzICsxMjU1LDM2IEBACiAJc3RydWN0IGhwaV9od19vYmogKnBodyA9IHBhby0+cHJpdjsKIAlzdHJ1Y3QgZHNwX2NvZGUgZHNwX2NvZGU7CiAJdTE2IGJvb3RfY29kZV9pZFtIUEk2MjA1X01BWF9GSUxFU19UT19MT0FEXTsKLQl1MTYgZmlybXdhcmVfaWQgPSBwYW8tPnBjaS5zdWJzeXNfZGV2aWNlX2lkOwogCXUzMiB0ZW1wOwogCWludCBkc3AgPSAwLCBpID0gMDsKIAl1MTYgZXJyID0gMDsKIAogCWJvb3RfY29kZV9pZFswXSA9IEhQSV9BREFQVEVSX0FTSSgweDYyMDUpOwogCi0JLyogc3BlY2lhbCBjYXNlcyB3aGVyZSBmaXJtd2FyZV9pZCAhPSBzdWJzeXMgSUQgKi8KLQlzd2l0Y2ggKGZpcm13YXJlX2lkKSB7CisJYm9vdF9jb2RlX2lkWzFdID0gcGFvLT5wY2kucGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZTsKKwlib290X2NvZGVfaWRbMV0gPSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKGJvb3RfY29kZV9pZFsxXSk7CisKKwkvKiBmaXggdXAgY2FzZXMgd2hlcmUgYm9vdGNvZGUgaWRbMV0gIT0gc3Vic3lzIGlkICovCisJc3dpdGNoIChib290X2NvZGVfaWRbMV0pIHsKIAljYXNlIEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg1MDAwKToKLQkJYm9vdF9jb2RlX2lkWzBdID0gZmlybXdhcmVfaWQ7Ci0JCWZpcm13YXJlX2lkID0gMDsKKwkJYm9vdF9jb2RlX2lkWzBdID0gYm9vdF9jb2RlX2lkWzFdOworCQlib290X2NvZGVfaWRbMV0gPSAwOwogCQlicmVhazsKIAljYXNlIEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg1MzAwKToKIAljYXNlIEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg1NDAwKToKIAljYXNlIEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg2MzAwKToKLQkJZmlybXdhcmVfaWQgPSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NjQwMCk7CisJCWJvb3RfY29kZV9pZFsxXSA9IEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg2NDAwKTsKIAkJYnJlYWs7CiAJY2FzZSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NTYwMCk6CiAJY2FzZSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NjUwMCk6Ci0JCWZpcm13YXJlX2lkID0gSFBJX0FEQVBURVJfRkFNSUxZX0FTSSgweDY2MDApOworCQlib290X2NvZGVfaWRbMV0gPSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NjYwMCk7CiAJCWJyZWFrOwogCWNhc2UgSFBJX0FEQVBURVJfRkFNSUxZX0FTSSgweDg4MDApOgotCQlmaXJtd2FyZV9pZCA9IEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg4OTAwKTsKKwkJYm9vdF9jb2RlX2lkWzFdID0gSFBJX0FEQVBURVJfRkFNSUxZX0FTSSgweDg5MDApOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JYm9vdF9jb2RlX2lkWzFdID0gZmlybXdhcmVfaWQ7CiAKIAkvKiByZXNldCBEU1AgYnkgd3JpdGluZyBhIDEgdG8gdGhlIFdBUk1SRVNFVCBiaXQgKi8KIAl0ZW1wID0gQzYyMDVfSERDUl9XQVJNUkVTRVQ7CkBAIC0xMzgxLDcgKzEyOTUsNyBAQAogCXRlbXAgPSBpb3JlYWQzMihwaHctPnBySFNSKTsKIAlpZiAoKHRlbXAgJiAoQzYyMDVfSFNSX0NGR0VSUiB8IEM2MjA1X0hTUl9FRVJFQUQpKSAhPQogCQlDNjIwNV9IU1JfRUVSRUFEKQotCQlyZXR1cm4gaHBpNjIwNV9lcnJvcigwLCBIUEk2MjA1X0VSUk9SXzYyMDVfRUVQUk9NKTsKKwkJcmV0dXJuIEhQSTYyMDVfRVJST1JfNjIwNV9FRVBST007CiAJdGVtcCB8PSAweDA0OwogCS8qIGRpc2FibGUgUElOVEEgaW50ZXJydXB0ICovCiAJaW93cml0ZTMyKHRlbXAsIHBody0+cHJIU1IpOwpAQCAtMTM4OSwyNyArMTMwMywyNyBAQAogCS8qIGNoZWNrIGNvbnRyb2wgcmVnaXN0ZXIgcmVwb3J0cyBQQ0kgYm9vdCBtb2RlICovCiAJdGVtcCA9IGlvcmVhZDMyKHBody0+cHJIRENSKTsKIAlpZiAoISh0ZW1wICYgQzYyMDVfSERDUl9QQ0lCT09UKSkKLQkJcmV0dXJuIGhwaTYyMDVfZXJyb3IoMCwgSFBJNjIwNV9FUlJPUl82MjA1X1JFRyk7CisJCXJldHVybiBIUEk2MjA1X0VSUk9SXzYyMDVfUkVHOwogCi0JLyogdHJ5IHdyaXRpbmcgYSBjb3VwbGUgb2YgbnVtYmVycyB0byB0aGUgRFNQIHBhZ2UgcmVnaXN0ZXIgKi8KKwkvKiB0cnkgd3JpdGluZyBhIGZldyBudW1iZXJzIHRvIHRoZSBEU1AgcGFnZSByZWdpc3RlciAqLwogCS8qIGFuZCByZWFkaW5nIHRoZW0gYmFjay4gKi8KLQl0ZW1wID0gMTsKLQlpb3dyaXRlMzIodGVtcCwgcGh3LT5wckRTUFApOwotCWlmICgodGVtcCB8IEM2MjA1X0RTUFBfTUFQMSkgIT0gaW9yZWFkMzIocGh3LT5wckRTUFApKQotCQlyZXR1cm4gaHBpNjIwNV9lcnJvcigwLCBIUEk2MjA1X0VSUk9SXzYyMDVfRFNQUEFHRSk7Ci0JdGVtcCA9IDI7Ci0JaW93cml0ZTMyKHRlbXAsIHBody0+cHJEU1BQKTsKLQlpZiAoKHRlbXAgfCBDNjIwNV9EU1BQX01BUDEpICE9IGlvcmVhZDMyKHBody0+cHJEU1BQKSkKLQkJcmV0dXJuIGhwaTYyMDVfZXJyb3IoMCwgSFBJNjIwNV9FUlJPUl82MjA1X0RTUFBBR0UpOwogCXRlbXAgPSAzOwogCWlvd3JpdGUzMih0ZW1wLCBwaHctPnByRFNQUCk7CiAJaWYgKCh0ZW1wIHwgQzYyMDVfRFNQUF9NQVAxKSAhPSBpb3JlYWQzMihwaHctPnByRFNQUCkpCi0JCXJldHVybiBocGk2MjA1X2Vycm9yKDAsIEhQSTYyMDVfRVJST1JfNjIwNV9EU1BQQUdFKTsKKwkJcmV0dXJuIEhQSTYyMDVfRVJST1JfNjIwNV9EU1BQQUdFOworCXRlbXAgPSAyOworCWlvd3JpdGUzMih0ZW1wLCBwaHctPnByRFNQUCk7CisJaWYgKCh0ZW1wIHwgQzYyMDVfRFNQUF9NQVAxKSAhPSBpb3JlYWQzMihwaHctPnByRFNQUCkpCisJCXJldHVybiBIUEk2MjA1X0VSUk9SXzYyMDVfRFNQUEFHRTsKKwl0ZW1wID0gMTsKKwlpb3dyaXRlMzIodGVtcCwgcGh3LT5wckRTUFApOworCWlmICgodGVtcCB8IEM2MjA1X0RTUFBfTUFQMSkgIT0gaW9yZWFkMzIocGh3LT5wckRTUFApKQorCQlyZXR1cm4gSFBJNjIwNV9FUlJPUl82MjA1X0RTUFBBR0U7CiAJLyogcmVzZXQgRFNQIHBhZ2UgdG8gdGhlIGNvcnJlY3QgbnVtYmVyICovCiAJdGVtcCA9IDA7CiAJaW93cml0ZTMyKHRlbXAsIHBody0+cHJEU1BQKTsKIAlpZiAoKHRlbXAgfCBDNjIwNV9EU1BQX01BUDEpICE9IGlvcmVhZDMyKHBody0+cHJEU1BQKSkKLQkJcmV0dXJuIGhwaTYyMDVfZXJyb3IoMCwgSFBJNjIwNV9FUlJPUl82MjA1X0RTUFBBR0UpOworCQlyZXR1cm4gSFBJNjIwNV9FUlJPUl82MjA1X0RTUFBBR0U7CiAJcGh3LT5kc3BfcGFnZSA9IDA7CiAKIAkvKiByZWxlYXNlIDY3MTMgZnJvbSByZXNldCBiZWZvcmUgNjIwNSBpcyBib290bG9hZGVkLgpAQCAtMTQ1NSw3ICsxMzY5LDcgQEAKIAkJCXJldHVybiBlcnI7CiAKIAkJLyogd3JpdGUgdGhlIERTUCBjb2RlIGRvd24gaW50byB0aGUgRFNQcyBtZW1vcnkgKi8KLQkJZHNwX2NvZGUucHNfZGV2ID0gcGFvLT5wY2kucF9vc19kYXRhOworCQlkc3BfY29kZS5wc19kZXYgPSBwYW8tPnBjaS5wY2lfZGV2OwogCQllcnIgPSBocGlfZHNwX2NvZGVfb3Blbihib290X2NvZGVfaWRbZHNwXSwgJmRzcF9jb2RlLAogCQkJcG9zX2Vycm9yX2NvZGUpOwogCQlpZiAoZXJyKQpAQCAtMTQ4NCwxMCArMTM5OCw4IEBACiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOwogCQkJZm9yIChpID0gMDsgaSA8IChpbnQpbGVuZ3RoOyBpKyspIHsKLQkJCQllcnIgPSBib290X2xvYWRlcl93cml0ZV9tZW0zMihwYW8sIGRzcCwKLQkJCQkJYWRkcmVzcywgKnBjb2RlKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlicmVhazsKKwkJCQlib290X2xvYWRlcl93cml0ZV9tZW0zMihwYW8sIGRzcCwgYWRkcmVzcywKKwkJCQkJKnBjb2RlKTsKIAkJCQkvKiBkdW1teSByZWFkIGV2ZXJ5IDQgd29yZHMgKi8KIAkJCQkvKiBmb3IgNjIwNSBhZHZpc29yeSAxLjQuNCAqLwogCQkJCWlmIChpICUgNCA9PSAwKQpAQCAtMTU2MSw3ICsxNDczLDcgQEAKIAkJaG9zdF9tYWlsYm94X2FkZHJlc3Nfb25fZHNwID0gMHg4MDAwMDAwMDsKIAkJd2hpbGUgKChwaHlzaWNhbFBDX2lhZGRyZXNzICE9IHBoeXNpY2FsUENfaWFkZHJlc3NfdmVyaWZ5KQogCQkJJiYgdGltZV9vdXQtLSkgewotCQkJZXJyID0gYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIocGFvLCAwLAorCQkJYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIocGFvLCAwLAogCQkJCWhvc3RfbWFpbGJveF9hZGRyZXNzX29uX2RzcCwKIAkJCQlwaHlzaWNhbFBDX2lhZGRyZXNzKTsKIAkJCXBoeXNpY2FsUENfaWFkZHJlc3NfdmVyaWZ5ID0KQEAgLTE2MzEsMTEgKzE1NDMsMTAgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIHUxNiBib290X2xvYWRlcl93cml0ZV9tZW0zMihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sIGludCBkc3BfaW5kZXgsCi0JdTMyIGFkZHJlc3MsIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIoc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvLAorCWludCBkc3BfaW5kZXgsIHUzMiBhZGRyZXNzLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgaHBpX2h3X29iaiAqcGh3ID0gcGFvLT5wcml2OwotCXUxNiBlcnIgPSAwOwogCV9faW9tZW0gdTMyICpwX2RhdGE7CiAJLyogICAgICB1MzIgZHdWZXJpZnlEYXRhPTA7ICovCiAKQEAgLTE2NzUsMTUgKzE1ODYsMTEgQEAKIAogCQkvKiBkdW1teSByZWFkIGV2ZXJ5IDQgd29yZHMgZm9yIDYyMDUgYWR2aXNvcnkgMS40LjQgKi8KIAkJYm9vdF9sb2FkZXJfcmVhZF9tZW0zMihwYW8sIDAsIDApOwotCX0gZWxzZQotCQllcnIgPSBocGk2MjA1X2Vycm9yKGRzcF9pbmRleCwgSFBJNjIwNV9FUlJPUl9CQURfRFNQSU5ERVgpOwotCXJldHVybiBlcnI7CisJfQogfQogCiBzdGF0aWMgdTE2IGJvb3RfbG9hZGVyX2NvbmZpZ19lbWlmKHN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbywgaW50IGRzcF9pbmRleCkKIHsKLQl1MTYgZXJyID0gMDsKLQogCWlmIChkc3BfaW5kZXggPT0gMCkgewogCQl1MzIgc2V0dGluZzsKIApAQCAtMTcxMSw4ICsxNjE4LDcgQEAKIAkJYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIocGFvLCBkc3BfaW5kZXgsIDB4MDE4MDAwMDgsIHNldHRpbmcpOwogCQlpZiAoc2V0dGluZyAhPSBib290X2xvYWRlcl9yZWFkX21lbTMyKHBhbywgZHNwX2luZGV4LAogCQkJCTB4MDE4MDAwMDgpKQotCQkJcmV0dXJuIGhwaTYyMDVfZXJyb3IoZHNwX2luZGV4LAotCQkJCUhQSTYyMDVfRVJST1JfRFNQX0VNSUYpOworCQkJcmV0dXJuIEhQSTYyMDVfRVJST1JfRFNQX0VNSUY7CiAKIAkJLyogRU1JRiBDRTEgc2V0dXAgLSAzMiBiaXQgYXN5bmMuIFRoaXMgaXMgNjcxMyAjMSBIUEksICovCiAJCS8qIHdoaWNoIG9jY3VwaWVzIEQxNS4uMC4gNjcxMyBzdGFydHMgYXQgMjdNSHosIHNvIG5lZWQgKi8KQEAgLTE3MjUsOCArMTYzMSw3IEBACiAJCWJvb3RfbG9hZGVyX3dyaXRlX21lbTMyKHBhbywgZHNwX2luZGV4LCAweDAxODAwMDA0LCBzZXR0aW5nKTsKIAkJaWYgKHNldHRpbmcgIT0gYm9vdF9sb2FkZXJfcmVhZF9tZW0zMihwYW8sIGRzcF9pbmRleCwKIAkJCQkweDAxODAwMDA0KSkKLQkJCXJldHVybiBocGk2MjA1X2Vycm9yKGRzcF9pbmRleCwKLQkJCQlIUEk2MjA1X0VSUk9SX0RTUF9FTUlGKTsKKwkJCXJldHVybiBIUEk2MjA1X0VSUk9SX0RTUF9FTUlGOwogCiAJCS8qIEVNSUYgQ0UyIHNldHVwIC0gMzIgYml0IGFzeW5jLiBUaGlzIGlzIDY3MTMgIzIgSFBJLCAqLwogCQkvKiB3aGljaCBvY2N1cGllcyBEMTUuLjAuIDY3MTMgc3RhcnRzIGF0IDI3TUh6LCBzbyBuZWVkICovCkBAIC0xNzM4LDggKzE2NDMsNyBAQAogCQlib290X2xvYWRlcl93cml0ZV9tZW0zMihwYW8sIGRzcF9pbmRleCwgMHgwMTgwMDAxMCwgc2V0dGluZyk7CiAJCWlmIChzZXR0aW5nICE9IGJvb3RfbG9hZGVyX3JlYWRfbWVtMzIocGFvLCBkc3BfaW5kZXgsCiAJCQkJMHgwMTgwMDAxMCkpCi0JCQlyZXR1cm4gaHBpNjIwNV9lcnJvcihkc3BfaW5kZXgsCi0JCQkJSFBJNjIwNV9FUlJPUl9EU1BfRU1JRik7CisJCQlyZXR1cm4gSFBJNjIwNV9FUlJPUl9EU1BfRU1JRjsKIAogCQkvKiBFTUlGIENFMyBzZXR1cCAtIDMyIGJpdCBhc3luYy4gKi8KIAkJLyogVGhpcyBpcyB0aGUgUExEIG9uIHRoZSBBU0k1MDAwIGNhcmRzIG9ubHkgKi8KQEAgLTE3NTAsOCArMTY1NCw3IEBACiAJCWJvb3RfbG9hZGVyX3dyaXRlX21lbTMyKHBhbywgZHNwX2luZGV4LCAweDAxODAwMDE0LCBzZXR0aW5nKTsKIAkJaWYgKHNldHRpbmcgIT0gYm9vdF9sb2FkZXJfcmVhZF9tZW0zMihwYW8sIGRzcF9pbmRleCwKIAkJCQkweDAxODAwMDE0KSkKLQkJCXJldHVybiBocGk2MjA1X2Vycm9yKGRzcF9pbmRleCwKLQkJCQlIUEk2MjA1X0VSUk9SX0RTUF9FTUlGKTsKKwkJCXJldHVybiBIUEk2MjA1X0VSUk9SX0RTUF9FTUlGOwogCiAJCS8qIHNldCBFTUlGIFNEUkFNIGNvbnRyb2wgZm9yIDJNeDMyIFNEUkFNICg1MTJ4MzJ4NCBiYW5rKSAqLwogCQkvKiAgbmVlZCB0byB1c2UgdGhpcyBlbHNlIERTUCBjb2RlIGNyYXNoZXM/ICovCkBAIC0xNzc1LDEyICsxNjc4LDkgQEAKIAkJcmVhZF9kYXRhID0KIAkJCTB4RkZGNyAmIGJvb3RfbG9hZGVyX3JlYWRfbWVtMzIocGFvLCAwLCBIUElDTF9BRERSKTsKIAkJaWYgKHdyaXRlX2RhdGEgIT0gcmVhZF9kYXRhKSB7Ci0JCQllcnIgPSBocGk2MjA1X2Vycm9yKGRzcF9pbmRleCwKLQkJCQlIUEk2MjA1X0VSUk9SX0M2NzEzX0hQSUMpOwogCQkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgIkhQSUNMICV4ICV4XG4iLCB3cml0ZV9kYXRhLAogCQkJCXJlYWRfZGF0YSk7Ci0KLQkJCXJldHVybiBlcnI7CisJCQlyZXR1cm4gSFBJNjIwNV9FUlJPUl9DNjcxM19IUElDOwogCQl9CiAJCS8qIEhQSUEgLSB3YWxraW5nIG9uZXMgdGVzdCAqLwogCQl3cml0ZV9kYXRhID0gMTsKQEAgLTE3OTgsMTEgKzE2OTgsOSBAQAogCQkJCQkJSFBJQUhfQUREUikpCiAJCQkJPDwgMTYpOwogCQkJaWYgKHJlYWRfZGF0YSAhPSB3cml0ZV9kYXRhKSB7Ci0JCQkJZXJyID0gaHBpNjIwNV9lcnJvcihkc3BfaW5kZXgsCi0JCQkJCUhQSTYyMDVfRVJST1JfQzY3MTNfSFBJQSk7CiAJCQkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgIkhQSUEgJXggJXhcbiIsCiAJCQkJCXdyaXRlX2RhdGEsIHJlYWRfZGF0YSk7Ci0JCQkJcmV0dXJuIGVycjsKKwkJCQlyZXR1cm4gSFBJNjIwNV9FUlJPUl9DNjcxM19IUElBOwogCQkJfQogCQkJd3JpdGVfZGF0YSA9IHdyaXRlX2RhdGEgPDwgMTsKIAkJfQpAQCAtMTg0NywzMCArMTc0NSw4MSBAQAogCQkvKiBQTEwgc2hvdWxkIG5vdCBiZSBieXBhc3NlZCEgKi8KIAkJaWYgKChib290X2xvYWRlcl9yZWFkX21lbTMyKHBhbywgZHNwX2luZGV4LCAweDAxQjdDMTAwKSAmIDB4RikKIAkJCSE9IDB4MDAwMSkgewotCQkJZXJyID0gaHBpNjIwNV9lcnJvcihkc3BfaW5kZXgsCi0JCQkJSFBJNjIwNV9FUlJPUl9DNjcxM19QTEwpOwotCQkJcmV0dXJuIGVycjsKKwkJCXJldHVybiBIUEk2MjA1X0VSUk9SX0M2NzEzX1BMTDsKIAkJfQogCQkvKiBzZXR1cCBDNjd4IEVNSUYgIChub3RlIHRoaXMgaXMgdGhlIG9ubHkgdXNlIG9mCiAJCSAgIEJBUjEgdmlhIEJvb3RMb2FkZXJfV3JpdGVNZW0zMikgKi8KIAkJYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIocGFvLCBkc3BfaW5kZXgsIEM2NzEzX0VNSUZfR0NUTCwKIAkJCTB4MDAwMDM0QTgpOworCisJCS8qIEVNSUYgQ0UwIHNldHVwIC0gMk14MzIgU3luYyBEUkFNCisJCSAgIDMxLi4yOCAgICAgICBXciBzZXR1cAorCQkgICAyNy4uMjIgICAgICAgV3Igc3Ryb2JlCisJCSAgIDIxLi4yMCAgICAgICBXciBob2xkCisJCSAgIDE5Li4xNiAgICAgICBSZCBzZXR1cAorCQkgICAxNS4uMTQgICAgICAgLQorCQkgICAxMy4uOCAgICAgICAgUmQgc3Ryb2JlCisJCSAgIDcuLjQgICAgICAgICBNVFlQRSAgIDAwMTEgICAgICAgICAgICBTeW5jIERSQU0gMzJiaXRzCisJCSAgIDMgICAgICAgICAgICBXciBob2xkIE1TQgorCQkgICAyLi4wICAgICAgICAgUmQgaG9sZAorCQkgKi8KIAkJYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIocGFvLCBkc3BfaW5kZXgsIEM2NzEzX0VNSUZfQ0UwLAogCQkJMHgwMDAwMDAzMCk7CisKKwkJLyogRU1JRiBTRFJBTSBFeHRlbnNpb24KKwkJICAgMHgwMAorCQkgICAzMS0yMSAgICAgICAgMDAwMGIgMDAwMGIgMDAwYgorCQkgICAyMCAgICAgICAgICAgV1IyUkQgPSAyY3ljbGVzLTEgID0gMWIKKworCQkgICAxOS0xOCAgICAgICAgV1IyREVBQyA9IDNjeWNsZS0xID0gMTBiCisJCSAgIDE3ICAgICAgICAgICBXUjJXUiA9IDJjeWNsZS0xICAgPSAxYgorCQkgICAxNi0xNSAgICAgICAgUjJXRFFNID0gNGN5Y2xlLTEgID0gMTFiCisJCSAgIDE0LTEyICAgICAgICBSRDJXUiA9IDZjeWNsZXMtMSAgPSAxMDFiCisKKwkJICAgMTEtMTAgICAgICAgIFJEMkRFQUMgPSA0Y3ljbGUtMSA9IDExYgorCQkgICA5ICAgICAgICAgICAgUkQyUkQgPSAyY3ljbGUtMSAgID0gMWIKKwkJICAgOC03ICAgICAgICAgIFRIWlAgPSAzY3ljbGUtMSAgICA9IDEwYgorCQkgICA2LTUgICAgICAgICAgVFdSICA9IDJjeWNsZS0xICAgID0gMDFiICh0V1IgPSAxN25zKQorCQkgICA0ICAgICAgICAgICAgVFJSRCA9IDJjeWNsZSAgICAgID0gMGIgICh0UlJEID0gMTRucykKKwkJICAgMy0xICAgICAgICAgIFRSQVMgPSA1Y3ljbGUtMSAgICA9IDEwMGIgKFRyYXM9NDJucykKKwkJICAgMSAgICAgICAgICAgIENBUyBsYXRlbmN5ID0gM2N5YyA9IDFiCisJCSAgIChmb3IgTWljcm9uIDJNMzItNyBvcGVyYXRpbmcgYXQgMTAwTUh6KQorCQkgKi8KIAkJYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIocGFvLCBkc3BfaW5kZXgsIEM2NzEzX0VNSUZfU0RSQU1FWFQsCiAJCQkweDAwMUJERjI5KTsKKworCQkvKiBFTUlGIFNEUkFNIGNvbnRyb2wgLSBzZXQgdXAgZm9yIGEgMk14MzIgU0RSQU0gKDUxMngzMng0IGJhbmspCisJCSAgIDMxICAgICAgICAgICAtICAgICAgIDBiICAgICAgIC0KKwkJICAgMzAgICAgICAgICAgIFNEQlNaICAgMWIgICAgICAgICAgICAgIDQgYmFuaworCQkgICAyOS4uMjggICAgICAgU0RSU1ogICAwMGIgICAgICAgICAgICAgMTEgcm93IGFkZHJlc3MgcGlucworCisJCSAgIDI3Li4yNiAgICAgICBTRENTWiAgIDAxYiAgICAgICAgICAgICA4IGNvbHVtbiBhZGRyZXNzIHBpbnMKKwkJICAgMjUgICAgICAgICAgIFJGRU4gICAgMWIgICAgICAgICAgICAgIHJlZmVyc2ggZW5hYmxlZAorCQkgICAyNCAgICAgICAgICAgSU5JVCAgICAxYiAgICAgICAgICAgICAgaW5pdCBTRFJBTSEKKworCQkgICAyMy4uMjAgICAgICAgVFJDRCAgICAwMDAxYiAgICAgICAgICAgICAgICAgICAoVHJjZC9UY3ljKS0xID0gKDIwLzEwKS0xID0gMQorCisJCSAgIDE5Li4xNiAgICAgICBUUlAgICAgIDAwMDFiICAgICAgICAgICAgICAgICAgIChUcnAvVGN5YyktMSA9ICgyMC8xMCktMSA9IDEKKworCQkgICAxNS4uMTIgICAgICAgVFJDICAgICAwMTEwYiAgICAgICAgICAgICAgICAgICAoVHJjL1RjeWMpLTEgPSAoNzAvMTApLTEgPSA2CisKKwkJICAgMTEuLjAgICAgICAgIC0gICAgICAgMDAwMGIgMDAwMGIgMDAwMGIKKwkJICovCiAJCWJvb3RfbG9hZGVyX3dyaXRlX21lbTMyKHBhbywgZHNwX2luZGV4LCBDNjcxM19FTUlGX1NEUkFNQ1RMLAotCQkJMHg0NzExNzAwMCk7CisJCQkweDQ3MTE2MDAwKTsKKworCQkvKiBTRFJBTSByZWZyZXNoIHRpbWluZworCQkgICBOZWVkIDQsMDk2IHJlZnJlc2ggY3ljbGVzIGV2ZXJ5IDY0bXMgPSAxNS42MjV1cyA9IDE1NjJjeWNsZXMgb2YgMTAwTUh6ID0gMHg2MUEKKwkJICovCiAJCWJvb3RfbG9hZGVyX3dyaXRlX21lbTMyKHBhbywgZHNwX2luZGV4LAogCQkJQzY3MTNfRU1JRl9TRFJBTVRJTUlORywgMHgwMDAwMDQxMCk7CiAKIAkJaHBpb3NfZGVsYXlfbWljcm9fc2Vjb25kcygxMDAwKTsKIAl9IGVsc2UgaWYgKGRzcF9pbmRleCA9PSAyKSB7CiAJCS8qIERTUCAyIGlzIGEgQzY3MTMgKi8KKwl9CiAKLQl9IGVsc2UKLQkJZXJyID0gaHBpNjIwNV9lcnJvcihkc3BfaW5kZXgsIEhQSTYyMDVfRVJST1JfQkFEX0RTUElOREVYKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTE2IGJvb3RfbG9hZGVyX3Rlc3RfbWVtb3J5KHN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbywgaW50IGRzcF9pbmRleCwKQEAgLTE4OTYsNyArMTg0NSw3IEBACiAJCQkJdGVzdF9hZGRyKTsKIAkJCWlmIChkYXRhICE9IHRlc3RfZGF0YSkgewogCQkJCUhQSV9ERUJVR19MT0coVkVSQk9TRSwKLQkJCQkJIm1lbXRlc3QgZXJyb3IgZGV0YWlscyAgIgorCQkJCQkiTWVtdGVzdCBlcnJvciBkZXRhaWxzICAiCiAJCQkJCSIlMDh4ICUwOHggJTA4eCAlaVxuIiwgdGVzdF9hZGRyLAogCQkJCQl0ZXN0X2RhdGEsIGRhdGEsIGRzcF9pbmRleCk7CiAJCQkJcmV0dXJuIDE7CS8qIGVycm9yICovCkBAIC0xOTE2LDcgKzE4NjUsNyBAQAogCQlkYXRhID0gYm9vdF9sb2FkZXJfcmVhZF9tZW0zMihwYW8sIGRzcF9pbmRleCwgdGVzdF9hZGRyKTsKIAkJaWYgKGRhdGEgIT0gdGVzdF9kYXRhKSB7CiAJCQlIUElfREVCVUdfTE9HKFZFUkJPU0UsCi0JCQkJIm1lbXRlc3QgZXJyb3IgZGV0YWlscyAgIgorCQkJCSJNZW10ZXN0IGVycm9yIGRldGFpbHMgICIKIAkJCQkiJTA4eCAlMDh4ICUwOHggJWlcbiIsIHRlc3RfYWRkciwgdGVzdF9kYXRhLAogCQkJCWRhdGEsIGRzcF9pbmRleCk7CiAJCQlyZXR1cm4gMTsJLyogZXJyb3IgKi8KQEAgLTE5NDYsOCArMTg5NSw4IEBACiAJCQkvKiA2NEsgZGF0YSBtZW0gKi8KIAkJCWVyciA9IGJvb3RfbG9hZGVyX3Rlc3RfbWVtb3J5KHBhbywgZHNwX2luZGV4LAogCQkJCTB4ODAwMDAwMDAsIDB4MTAwMDApOwotCX0gZWxzZSBpZiAoKGRzcF9pbmRleCA9PSAxKSB8fCAoZHNwX2luZGV4ID09IDIpKSB7Ci0JCS8qIERTUCAxJjIgYXJlIGEgQzY3MTMgKi8KKwl9IGVsc2UgaWYgKGRzcF9pbmRleCA9PSAxKSB7CisJCS8qIERTUCAxIGlzIGEgQzY3MTMgKi8KIAkJLyogMTkySyBpbnRlcm5hbCBtZW0gKi8KIAkJZXJyID0gYm9vdF9sb2FkZXJfdGVzdF9tZW1vcnkocGFvLCBkc3BfaW5kZXgsIDB4MDAwMDAwMDAsCiAJCQkweDMwMDAwKTsKQEAgLTE5NTUsMTEgKzE5MDQsMTAgQEAKIAkJCS8qIDY0SyBpbnRlcm5hbCBtZW0gLyBMMiBjYWNoZSAqLwogCQkJZXJyID0gYm9vdF9sb2FkZXJfdGVzdF9tZW1vcnkocGFvLCBkc3BfaW5kZXgsCiAJCQkJMHgwMDAzMDAwMCwgMHgxMDAwMCk7Ci0JfSBlbHNlCi0JCXJldHVybiBocGk2MjA1X2Vycm9yKGRzcF9pbmRleCwgSFBJNjIwNV9FUlJPUl9CQURfRFNQSU5ERVgpOworCX0KIAogCWlmIChlcnIpCi0JCXJldHVybiBocGk2MjA1X2Vycm9yKGRzcF9pbmRleCwgSFBJNjIwNV9FUlJPUl9EU1BfSU5UTUVNKTsKKwkJcmV0dXJuIEhQSTYyMDVfRVJST1JfRFNQX0lOVE1FTTsKIAllbHNlCiAJCXJldHVybiAwOwogfQpAQCAtMTk3MiwyNCArMTkyMCwyMyBAQAogCiAJaWYgKGRzcF9pbmRleCA9PSAwKSB7CiAJCS8qIG9ubHkgdGVzdCBmb3IgU0RSQU0gaWYgYW4gQVNJNTAwMCBjYXJkICovCi0JCWlmIChwYW8tPnBjaS5zdWJzeXNfZGV2aWNlX2lkID09IDB4NTAwMCkgeworCQlpZiAocGFvLT5wY2kucGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDUwMDApIHsKIAkJCS8qIERTUCAwIGlzIGFsd2F5cyBDNjIwNSAqLwogCQkJZFJBTV9zdGFydF9hZGRyZXNzID0gMHgwMDQwMDAwMDsKIAkJCWRSQU1fc2l6ZSA9IDB4MjAwMDAwOwogCQkJLypkd0RSQU1pbmM9MTAyNDsgKi8KIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKChkc3BfaW5kZXggPT0gMSkgfHwgKGRzcF9pbmRleCA9PSAyKSkgeworCX0gZWxzZSBpZiAoZHNwX2luZGV4ID09IDEpIHsKIAkJLyogRFNQIDEgaXMgYSBDNjcxMyAqLwogCQlkUkFNX3N0YXJ0X2FkZHJlc3MgPSAweDgwMDAwMDAwOwogCQlkUkFNX3NpemUgPSAweDIwMDAwMDsKIAkJLypkd0RSQU1pbmM9MTAyNDsgKi8KLQl9IGVsc2UKLQkJcmV0dXJuIGhwaTYyMDVfZXJyb3IoZHNwX2luZGV4LCBIUEk2MjA1X0VSUk9SX0JBRF9EU1BJTkRFWCk7CisJfQogCiAJaWYgKGJvb3RfbG9hZGVyX3Rlc3RfbWVtb3J5KHBhbywgZHNwX2luZGV4LCBkUkFNX3N0YXJ0X2FkZHJlc3MsCiAJCQlkUkFNX3NpemUpKQotCQlyZXR1cm4gaHBpNjIwNV9lcnJvcihkc3BfaW5kZXgsIEhQSTYyMDVfRVJST1JfRFNQX0VYVE1FTSk7CisJCXJldHVybiBIUEk2MjA1X0VSUk9SX0RTUF9FWFRNRU07CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5OTgsMjggKzE5NDUsMjUgQEAKIAl1MzIgZGF0YSA9IDA7CiAJaWYgKGRzcF9pbmRleCA9PSAwKSB7CiAJCS8qIG9ubHkgdGVzdCBmb3IgRFNQMCBQTEQgb24gQVNJNTAwMCBjYXJkICovCi0JCWlmIChwYW8tPnBjaS5zdWJzeXNfZGV2aWNlX2lkID09IDB4NTAwMCkgeworCQlpZiAocGFvLT5wY2kucGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDUwMDApIHsKIAkJCS8qIFBMRCBpcyBsb2NhdGVkIGF0IENFMz0weDAzMDAwMDAwICovCiAJCQlkYXRhID0gYm9vdF9sb2FkZXJfcmVhZF9tZW0zMihwYW8sIGRzcF9pbmRleCwKIAkJCQkweDAzMDAwMDA4KTsKIAkJCWlmICgoZGF0YSAmIDB4RikgIT0gMHg1KQotCQkJCXJldHVybiBocGk2MjA1X2Vycm9yKGRzcF9pbmRleCwKLQkJCQkJSFBJNjIwNV9FUlJPUl9EU1BfUExEKTsKKwkJCQlyZXR1cm4gSFBJNjIwNV9FUlJPUl9EU1BfUExEOwogCQkJZGF0YSA9IGJvb3RfbG9hZGVyX3JlYWRfbWVtMzIocGFvLCBkc3BfaW5kZXgsCiAJCQkJMHgwMzAwMDAwQyk7CiAJCQlpZiAoKGRhdGEgJiAweEYpICE9IDB4QSkKLQkJCQlyZXR1cm4gaHBpNjIwNV9lcnJvcihkc3BfaW5kZXgsCi0JCQkJCUhQSTYyMDVfRVJST1JfRFNQX1BMRCk7CisJCQkJcmV0dXJuIEhQSTYyMDVfRVJST1JfRFNQX1BMRDsKIAkJfQogCX0gZWxzZSBpZiAoZHNwX2luZGV4ID09IDEpIHsKIAkJLyogRFNQIDEgaXMgYSBDNjcxMyAqLwotCQlpZiAocGFvLT5wY2kuc3Vic3lzX2RldmljZV9pZCA9PSAweDg3MDApIHsKKwkJaWYgKHBhby0+cGNpLnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHg4NzAwKSB7CiAJCQkvKiBQTEQgaXMgbG9jYXRlZCBhdCBDRTE9MHg5MDAwMDAwMCAqLwogCQkJZGF0YSA9IGJvb3RfbG9hZGVyX3JlYWRfbWVtMzIocGFvLCBkc3BfaW5kZXgsCiAJCQkJMHg5MDAwMDAxMCk7CiAJCQlpZiAoKGRhdGEgJiAweEZGKSAhPSAweEFBKQotCQkJCXJldHVybiBocGk2MjA1X2Vycm9yKGRzcF9pbmRleCwKLQkJCQkJSFBJNjIwNV9FUlJPUl9EU1BfUExEKTsKKwkJCQlyZXR1cm4gSFBJNjIwNV9FUlJPUl9EU1BfUExEOwogCQkJLyogODcxMyAtIExFRCBvbiAqLwogCQkJYm9vdF9sb2FkZXJfd3JpdGVfbWVtMzIocGFvLCBkc3BfaW5kZXgsIDB4OTAwMDAwMDAsCiAJCQkJMHgwMik7CkBAIC0yMDM3LDE0ICsxOTgxLDExIEBACiAJc3RydWN0IGhwaV9od19vYmogKnBodyA9IHBhby0+cHJpdjsKIAl1MzIgZGF0YV90cmFuc2ZlcnJlZCA9IDA7CiAJdTE2IGVyciA9IDA7Ci0jaWZuZGVmIEhQSTYyMDVfTk9fSFNSX1BPTEwKLQl1MzIgdGltZV9vdXQ7Ci0jZW5kaWYKIAl1MzIgdGVtcDI7CiAJc3RydWN0IGJ1c19tYXN0ZXJfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwaHctPnBfaW50ZXJmYWNlX2J1ZmZlcjsKIAogCWlmICghcF9kYXRhKQotCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfREFUQV9UUkFOU0ZFUjsKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0RBVEFfUE9JTlRFUjsKIAogCWRhdGFfc2l6ZSAmPSB+M0w7CS8qIHJvdW5kIGRhdGFfc2l6ZSBkb3duIHRvIG5lYXJlc3QgNCBieXRlcyAqLwogCkBAIC0yMDY0LDE0ICsyMDA1LDEwIEBACiAKIAkJaW50ZXJmYWNlLT50cmFuc2Zlcl9zaXplX2luX2J5dGVzID0gdGhpc19jb3B5OwogCi0jaWZkZWYgSFBJNjIwNV9OT19IU1JfUE9MTAogCQkvKiBEU1AgbXVzdCBjaGFuZ2UgdGhpcyBiYWNrIHRvIG5PcGVyYXRpb24gKi8KIAkJaW50ZXJmYWNlLT5kc3BfYWNrID0gSDYyMF9ISUZfSURMRTsKLSNlbmRpZgotCiAJCXNlbmRfZHNwX2NvbW1hbmQocGh3LCBvcGVyYXRpb24pOwogCi0jaWZkZWYgSFBJNjIwNV9OT19IU1JfUE9MTAogCQl0ZW1wMiA9IHdhaXRfZHNwX2FjayhwaHcsIG9wZXJhdGlvbiwgSFBJNjIwNV9USU1FT1VUKTsKIAkJSFBJX0RFQlVHX0xPRyhERUJVRywgInNwdW4gJWQgdGltZXMgZm9yIGRhdGEgeGZlciBvZiAlZFxuIiwKIAkJCUhQSTYyMDVfVElNRU9VVCAtIHRlbXAyLCB0aGlzX2NvcHkpOwpAQCAtMjA3OSw0NSArMjAxNiwxMSBAQAogCQlpZiAoIXRlbXAyKSB7CiAJCQkvKiB0aW1lZCBvdXQgKi8KIAkJCUhQSV9ERUJVR19MT0coRVJST1IsCi0JCQkJInRpbWVkIG91dCB3YWl0aW5nIGZvciAiICJzdGF0ZSAlZCBnb3QgJWRcbiIsCisJCQkJIlRpbWVkIG91dCB3YWl0aW5nIGZvciAiICJzdGF0ZSAlZCBnb3QgJWRcbiIsCiAJCQkJb3BlcmF0aW9uLCBpbnRlcmZhY2UtPmRzcF9hY2spOwogCiAJCQlicmVhazsKIAkJfQotI2Vsc2UKLQkJLyogc3BpbiB3YWl0aW5nIG9uIHRoZSByZXN1bHQgKi8KLQkJdGltZV9vdXQgPSBIUEk2MjA1X1RJTUVPVVQ7Ci0JCXRlbXAyID0gMDsKLQkJd2hpbGUgKCh0ZW1wMiA9PSAwKSAmJiB0aW1lX291dC0tKSB7Ci0JCQkvKiBnaXZlIDE2ayBidXMgbWFzdGVyaW5nIHRyYW5zZmVyIHRpbWUgdG8gaGFwcGVuICovCi0JCQkvKigxNmsgLyAxMzJNYnl0ZXMvcyA9IDEyMnVzZWMpICovCi0JCQlocGlvc19kZWxheV9taWNyb19zZWNvbmRzKDIwKTsKLQkJCXRlbXAyID0gaW9yZWFkMzIocGh3LT5wckhTUik7Ci0JCQl0ZW1wMiAmPSBDNjIwNV9IU1JfSU5UU1JDOwotCQl9Ci0JCUhQSV9ERUJVR19MT0coREVCVUcsICJzcHVuICVkIHRpbWVzIGZvciBkYXRhIHhmZXIgb2YgJWRcbiIsCi0JCQlIUEk2MjA1X1RJTUVPVVQgLSB0aW1lX291dCwgdGhpc19jb3B5KTsKLQkJaWYgKHRlbXAyID09IEM2MjA1X0hTUl9JTlRTUkMpIHsKLQkJCUhQSV9ERUJVR19MT0coVkVSQk9TRSwKLQkJCQkiaW50ZXJydXB0IGZyb20gSElGIDxkYXRhPiBPS1xuIik7Ci0JCQkvKgotCQkJICAgaWYoaW50ZXJmYWNlLT5kd0RzcEFjayAhPSBuT3BlcmF0aW9uKSB7Ci0JCQkgICBIUElfREVCVUdfTE9HKERFQlVHKCJpbnRlcmZhY2UtPmR3RHNwQWNrPSVkLAotCQkJICAgZXhwZWN0ZWQgJWQgXG4iLAotCQkJICAgaW50ZXJmYWNlLT5kd0RzcEFjayxuT3BlcmF0aW9uKTsKLQkJCSAgIH0KLQkJCSAqLwotCQl9Ci0vKiBuZWVkIHRvIGhhbmRsZSB0aGlzIGRpZmZlcmVudGx5Li4uICovCi0JCWVsc2UgewotCQkJSFBJX0RFQlVHX0xPRyhFUlJPUiwKLQkJCQkiaW50ZXJydXB0IGZyb20gSElGIDxkYXRhPiBCQURcbiIpOwotCQkJZXJyID0gSFBJX0VSUk9SX0RTUF9IQVJEV0FSRTsKLQkJfQotCi0JCS8qIHJlc2V0IHRoZSBpbnRlcnJ1cHQgZnJvbSB0aGUgRFNQICovCi0JCWlvd3JpdGUzMihDNjIwNV9IU1JfSU5UU1JDLCBwaHctPnBySFNSKTsKLSNlbmRpZgogCQlpZiAob3BlcmF0aW9uID09IEg2MjBfSElGX0dFVF9EQVRBKQogCQkJbWVtY3B5KCZwX2RhdGFbZGF0YV90cmFuc2ZlcnJlZF0sCiAJCQkJKHZvaWQgKikmaW50ZXJmYWNlLT51LmJfZGF0YVswXSwgdGhpc19jb3B5KTsKQEAgLTIxNzQsMzEgKzIwNzcsMzkgQEAKIHN0YXRpYyB1MTYgbWVzc2FnZV9yZXNwb25zZV9zZXF1ZW5jZShzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sCiAJc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBocikKIHsKLSNpZm5kZWYgSFBJNjIwNV9OT19IU1JfUE9MTAotCXUzMiB0ZW1wMjsKLSNlbmRpZgogCXUzMiB0aW1lX291dCwgdGltZV9vdXQyOwogCXN0cnVjdCBocGlfaHdfb2JqICpwaHcgPSBwYW8tPnByaXY7CiAJc3RydWN0IGJ1c19tYXN0ZXJfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwaHctPnBfaW50ZXJmYWNlX2J1ZmZlcjsKIAl1MTYgZXJyID0gMDsKIAogCW1lc3NhZ2VfY291bnQrKzsKKwlpZiAocGhtLT5zaXplID4gc2l6ZW9mKGludGVyZmFjZS0+dSkpIHsKKwkJcGhyLT5lcnJvciA9IEhQSV9FUlJPUl9NRVNTQUdFX0JVRkZFUl9UT09fU01BTEw7CisJCXBoci0+c3BlY2lmaWNfZXJyb3IgPSBzaXplb2YoaW50ZXJmYWNlLT51KTsKKwkJcGhyLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBocGlfcmVzcG9uc2VfaGVhZGVyKTsKKwkJSFBJX0RFQlVHX0xPRyhFUlJPUiwKKwkJCSJtZXNzYWdlIGxlbiAlZCB0b28gYmlnIGZvciBidWZmZXIgJXpkIFxuIiwgcGhtLT5zaXplLAorCQkJc2l6ZW9mKGludGVyZmFjZS0+dSkpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBBc3N1bWUgYnVmZmVyIG9mIHR5cGUgc3RydWN0IGJ1c19tYXN0ZXJfaW50ZXJmYWNlCiAJICAgaXMgYWxsb2NhdGVkICJub25jYWNoZWFibGUiICovCiAKIAlpZiAoIXdhaXRfZHNwX2FjayhwaHcsIEg2MjBfSElGX0lETEUsIEhQSTYyMDVfVElNRU9VVCkpIHsKIAkJSFBJX0RFQlVHX0xPRyhERUJVRywgInRpbWVvdXQgd2FpdGluZyBmb3IgaWRsZVxuIik7Ci0JCXJldHVybiBocGk2MjA1X2Vycm9yKDAsIEhQSTYyMDVfRVJST1JfTVNHX1JFU1BfSURMRV9USU1FT1VUKTsKKwkJcmV0dXJuIEhQSTYyMDVfRVJST1JfTVNHX1JFU1BfSURMRV9USU1FT1VUOwogCX0KLQlpbnRlcmZhY2UtPnUubWVzc2FnZV9idWZmZXIgPSAqcGhtOworCisJbWVtY3B5KCZpbnRlcmZhY2UtPnUubWVzc2FnZV9idWZmZXIsIHBobSwgcGhtLT5zaXplKTsKIAkvKiBzaWduYWwgd2Ugd2FudCBhIHJlc3BvbnNlICovCiAJc2VuZF9kc3BfY29tbWFuZChwaHcsIEg2MjBfSElGX0dFVF9SRVNQKTsKIAogCXRpbWVfb3V0MiA9IHdhaXRfZHNwX2FjayhwaHcsIEg2MjBfSElGX0dFVF9SRVNQLCBIUEk2MjA1X1RJTUVPVVQpOwogCi0JaWYgKHRpbWVfb3V0MiA9PSAwKSB7CisJaWYgKCF0aW1lX291dDIpIHsKIAkJSFBJX0RFQlVHX0xPRyhFUlJPUiwKLQkJCSIoJXUpIHRpbWVkIG91dCB3YWl0aW5nIGZvciAiICJHRVRfUkVTUCBzdGF0ZSBbJXhdXG4iLAorCQkJIigldSkgVGltZWQgb3V0IHdhaXRpbmcgZm9yICIgIkdFVF9SRVNQIHN0YXRlIFsleF1cbiIsCiAJCQltZXNzYWdlX2NvdW50LCBpbnRlcmZhY2UtPmRzcF9hY2spOwogCX0gZWxzZSB7CiAJCUhQSV9ERUJVR19MT0coVkVSQk9TRSwKQEAgLTIyMDgsNTggKzIxMTksMzggQEAKIAkvKiBzcGluIHdhaXRpbmcgb24gSElGIGludGVycnVwdCBmbGFnIChlbmQgb2YgbXNnIHByb2Nlc3MpICovCiAJdGltZV9vdXQgPSBIUEk2MjA1X1RJTUVPVVQ7CiAKLSNpZm5kZWYgSFBJNjIwNV9OT19IU1JfUE9MTAotCXRlbXAyID0gMDsKLQl3aGlsZSAoKHRlbXAyID09IDApICYmIC0tdGltZV9vdXQpIHsKLQkJdGVtcDIgPSBpb3JlYWQzMihwaHctPnBySFNSKTsKLQkJdGVtcDIgJj0gQzYyMDVfSFNSX0lOVFNSQzsKLQkJaHBpb3NfZGVsYXlfbWljcm9fc2Vjb25kcygxKTsKLQl9Ci0JaWYgKHRlbXAyID09IEM2MjA1X0hTUl9JTlRTUkMpIHsKLQkJcm1iKCk7CS8qIGVuc3VyZSB3ZSBzZWUgbGF0ZXN0IHZhbHVlIGZvciBkc3BfYWNrICovCi0JCWlmICgoaW50ZXJmYWNlLT5kc3BfYWNrICE9IEg2MjBfSElGX0dFVF9SRVNQKSkgewotCQkJSFBJX0RFQlVHX0xPRyhERUJVRywKLQkJCQkiKCV1KWludGVyZmFjZS0+ZHNwX2FjaygweCV4KSAhPSAiCi0JCQkJIkg2MjBfSElGX0dFVF9SRVNQLCB0PSV1XG4iLCBtZXNzYWdlX2NvdW50LAotCQkJCWludGVyZmFjZS0+ZHNwX2FjaywKLQkJCQlIUEk2MjA1X1RJTUVPVVQgLSB0aW1lX291dCk7Ci0JCX0gZWxzZSB7Ci0JCQlIUElfREVCVUdfTE9HKFZFUkJPU0UsCi0JCQkJIigldSlpbnQgd2l0aCBHRVRfUkVTUCBhZnRlciAldVxuIiwKLQkJCQltZXNzYWdlX2NvdW50LCBIUEk2MjA1X1RJTUVPVVQgLSB0aW1lX291dCk7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCS8qIGNhbiB3ZSBkbyBhbnl0aGluZyBlbHNlIGluIHJlc3BvbnNlIHRvIHRoZSBlcnJvciA/ICovCi0JCUhQSV9ERUJVR19MT0coRVJST1IsCi0JCQkiaW50ZXJydXB0IGZyb20gSElGIG1vZHVsZSBCQUQgKGZ1bmN0aW9uICV4KVxuIiwKLQkJCXBobS0+ZnVuY3Rpb24pOwotCX0KLQotCS8qIHJlc2V0IHRoZSBpbnRlcnJ1cHQgZnJvbSB0aGUgRFNQICovCi0JaW93cml0ZTMyKEM2MjA1X0hTUl9JTlRTUkMsIHBody0+cHJIU1IpOwotI2VuZGlmCi0KIAkvKiByZWFkIHRoZSByZXN1bHQgKi8KLQlpZiAodGltZV9vdXQgIT0gMCkKLQkJKnBociA9IGludGVyZmFjZS0+dS5yZXNwb25zZV9idWZmZXI7Ci0KKwlpZiAodGltZV9vdXQpIHsKKwkJaWYgKGludGVyZmFjZS0+dS5yZXNwb25zZV9idWZmZXIuc2l6ZSA8PSBwaHItPnNpemUpCisJCQltZW1jcHkocGhyLCAmaW50ZXJmYWNlLT51LnJlc3BvbnNlX2J1ZmZlciwKKwkJCQlpbnRlcmZhY2UtPnUucmVzcG9uc2VfYnVmZmVyLnNpemUpOworCQllbHNlIHsKKwkJCUhQSV9ERUJVR19MT0coRVJST1IsCisJCQkJInJlc3BvbnNlIGxlbiAlZCB0b28gYmlnIGZvciBidWZmZXIgJWRcbiIsCisJCQkJaW50ZXJmYWNlLT51LnJlc3BvbnNlX2J1ZmZlci5zaXplLCBwaHItPnNpemUpOworCQkJbWVtY3B5KHBociwgJmludGVyZmFjZS0+dS5yZXNwb25zZV9idWZmZXIsCisJCQkJc2l6ZW9mKHN0cnVjdCBocGlfcmVzcG9uc2VfaGVhZGVyKSk7CisJCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX1JFU1BPTlNFX0JVRkZFUl9UT09fU01BTEw7CisJCQlwaHItPnNwZWNpZmljX2Vycm9yID0KKwkJCQlpbnRlcmZhY2UtPnUucmVzcG9uc2VfYnVmZmVyLnNpemU7CisJCQlwaHItPnNpemUgPSBzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpOworCQl9CisJfQogCS8qIHNldCBpbnRlcmZhY2UgYmFjayB0byBpZGxlICovCiAJc2VuZF9kc3BfY29tbWFuZChwaHcsIEg2MjBfSElGX0lETEUpOwogCi0JaWYgKCh0aW1lX291dCA9PSAwKSB8fCAodGltZV9vdXQyID09IDApKSB7CisJaWYgKCF0aW1lX291dCB8fCAhdGltZV9vdXQyKSB7CiAJCUhQSV9ERUJVR19MT0coREVCVUcsICJzb21ldGhpbmcgdGltZWQgb3V0IVxuIik7Ci0JCXJldHVybiBocGk2MjA1X2Vycm9yKDAsIEhQSTYyMDVfRVJST1JfTVNHX1JFU1BfVElNRU9VVCk7CisJCXJldHVybiBIUEk2MjA1X0VSUk9SX01TR19SRVNQX1RJTUVPVVQ7CiAJfQogCS8qIHNwZWNpYWwgY2FzZSBmb3IgYWRhcHRlciBjbG9zZSAtICovCiAJLyogd2FpdCBmb3IgdGhlIERTUCB0byBpbmRpY2F0ZSBpdCBpcyBpZGxlICovCiAJaWYgKHBobS0+ZnVuY3Rpb24gPT0gSFBJX0FEQVBURVJfQ0xPU0UpIHsKIAkJaWYgKCF3YWl0X2RzcF9hY2socGh3LCBINjIwX0hJRl9JRExFLCBIUEk2MjA1X1RJTUVPVVQpKSB7CiAJCQlIUElfREVCVUdfTE9HKERFQlVHLAotCQkJCSJ0aW1lb3V0IHdhaXRpbmcgZm9yIGlkbGUgIgorCQkJCSJUaW1lb3V0IHdhaXRpbmcgZm9yIGlkbGUgIgogCQkJCSIob24gYWRhcHRlcl9jbG9zZSlcbiIpOwotCQkJcmV0dXJuIGhwaTYyMDVfZXJyb3IoMCwKLQkJCQlIUEk2MjA1X0VSUk9SX01TR19SRVNQX0lETEVfVElNRU9VVCk7CisJCQlyZXR1cm4gSFBJNjIwNV9FUlJPUl9NU0dfUkVTUF9JRExFX1RJTUVPVVQ7CiAJCX0KIAl9CiAJZXJyID0gaHBpX3ZhbGlkYXRlX3Jlc3BvbnNlKHBobSwgcGhyKTsKQEAgLTIyNzksNyArMjE3MCwxMyBAQAogCS8qIG1heWJlIGFuIGVycm9yIHJlc3BvbnNlICovCiAJaWYgKGVycikgewogCQkvKiBzb21ldGhpbmcgZmFpbGVkIGluIHRoZSBIUEkvRFNQIGludGVyZmFjZSAqLwotCQlwaHItPmVycm9yID0gZXJyOworCQlpZiAoZXJyID49IEhQSV9FUlJPUl9CQUNLRU5EX0JBU0UpIHsKKwkJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfRFNQX0NPTU1VTklDQVRJT047CisJCQlwaHItPnNwZWNpZmljX2Vycm9yID0gZXJyOworCQl9IGVsc2UgeworCQkJcGhyLT5lcnJvciA9IGVycjsKKwkJfQorCiAJCXBhby0+ZHNwX2NyYXNoZWQrKzsKIAogCQkvKiBqdXN0IHRoZSBoZWFkZXIgb2YgdGhlIHJlc3BvbnNlIGlzIHZhbGlkICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuaCBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5oCmluZGV4IDFhZGFlMDguLmRmMmYwMmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5oCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5oCkBAIC0yNSw5ICsyNSw2IEBACiAjaWZuZGVmIF9IUEk2MjA1X0hfCiAjZGVmaW5lIF9IUEk2MjA1X0hfCiAKLS8qIHRyYW5zaXRpb25hbCBjb25kaXRpb25hbCBjb21waWxlIHNoYXJlZCBiZXR3ZWVuIGhvc3QgYW5kIERTUCAqLwotLyogI2RlZmluZSBIUEk2MjA1X05PX0hTUl9QT0xMICovCi0KICNpbmNsdWRlICJocGlfaW50ZXJuYWwuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03OCw4ICs3NSw4IEBACiAJdTMyIGRzcF9hY2s7CiAJdTMyIHRyYW5zZmVyX3NpemVfaW5fYnl0ZXM7CiAJdW5pb24gewotCQlzdHJ1Y3QgaHBpX21lc3NhZ2UgbWVzc2FnZV9idWZmZXI7Ci0JCXN0cnVjdCBocGlfcmVzcG9uc2UgcmVzcG9uc2VfYnVmZmVyOworCQlzdHJ1Y3QgaHBpX21lc3NhZ2VfaGVhZGVyIG1lc3NhZ2VfYnVmZmVyOworCQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlX2hlYWRlciByZXNwb25zZV9idWZmZXI7CiAJCXU4IGJfZGF0YVtIUEk2MjA1X1NJWkVPRl9EQVRBXTsKIAl9IHU7CiAJc3RydWN0IGNvbnRyb2xjYWNoZV82MjA1IGNvbnRyb2xfY2FjaGU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaV9pbnRlcm5hbC5oIGIvc291bmQvcGNpL2FzaWhwaS9ocGlfaW50ZXJuYWwuaAppbmRleCAxNmY1MDJkLi5hZjY3OGJlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaV9pbnRlcm5hbC5oCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpX2ludGVybmFsLmgKQEAgLTI4LDcgKzI4LDcgQEAKIC8qKiBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBtYXBwZWQgdG8gYW4gYWRhcHRlciAqLwogI2RlZmluZSBIUElfTUFYX0FEQVBURVJfTUVNX1NQQUNFUyAoMikKIAotLyogRWFjaCBPUyBuZWVkcyBpdHMgb3duIGhwaW9zLmgsIG9yIHNwZWNpZmljIGRlZmluZSBhcyBhYm92ZSAqLworLyogRWFjaCBPUyBuZWVkcyBpdHMgb3duIGhwaW9zLmggKi8KICNpbmNsdWRlICJocGlvcy5oIgogCiAvKiBwaHlzaWNhbCBtZW1vcnkgYWxsb2NhdGlvbiAqLwpAQCAtNDksNyArNDksNyBAQAogKi8KIHUxNiBocGlvc19sb2NrZWRfbWVtX2FsbG9jKHN0cnVjdCBjb25zaXN0ZW50X2RtYV9hcmVhICpwX2xvY2tlZF9tZW1faGFuZGxlLAogCQkJCQkJCSAgIC8qKjwgbWVtb3J5IGhhbmRsZSAqLwotCXUzMiBzaXplLCAvKio8IHNpemUgaW4gYnl0ZXMgdG8gYWxsb2NhdGUgKi8KKwl1MzIgc2l6ZSwgLyoqPCBTaXplIGluIGJ5dGVzIHRvIGFsbG9jYXRlICovCiAJc3RydWN0IHBjaV9kZXYgKnBfb3NfcmVmZXJlbmNlCiAJLyoqPCBPUyBzcGVjaWZpYyBkYXRhIHJlcXVpcmVkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiAqLwogCSk7CkBAIC05Niw0MSArOTYsNiBAQAogI2RlZmluZSBjb21waWxlX3RpbWVfYXNzZXJ0KGNvbmQsIG1zZykgXAogICAgIHR5cGVkZWYgY2hhciBBU1NFUlRfIyNtc2dbKGNvbmQpID8gMSA6IC0xXQogCi0vKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLwotLyogUHJpdmF0ZSBIUEkgRW50aXR5IHJlbGF0ZWQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBTVFJfU0laRV9GSUVMRF9NQVggNjU1MzVVCi0jZGVmaW5lIFNUUl9UWVBFX0ZJRUxEX01BWCAyNTVVCi0jZGVmaW5lIFNUUl9ST0xFX0ZJRUxEX01BWCAyNTVVCi0KLXN0cnVjdCBocGlfZW50aXR5X3N0ciB7Ci0JdTE2IHNpemU7Ci0JdTggdHlwZTsKLQl1OCByb2xlOwotfTsKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDIwMCkKLSNlbmRpZgotCi1zdHJ1Y3QgaHBpX2VudGl0eSB7Ci0Jc3RydWN0IGhwaV9lbnRpdHlfc3RyIGhlYWRlcjsKLSNpZiAhIGRlZmluZWQoSFBJX09TX0RTUF9DNjAwMCkgfHwgKGRlZmluZWQoSFBJX09TX0RTUF9DNjAwMCkgJiYgKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fID4gNjAwMDAwOCkpCi0JLyogRFNQIEM2MDAwIGNvbXBpbGVyIHY2LjAuOCBhbmQgbG93ZXIKLQkgICBkbyBub3Qgc3VwcG9ydCAgZmxleGlibGUgYXJyYXkgbWVtYmVyICovCi0JdTggdmFsdWVbXTsKLSNlbHNlCi0JLyogTk9URSEgVXNpbmcgc2l6ZW9mKHN0cnVjdCBocGlfZW50aXR5KSB3aWxsIGdpdmUgZXJyb25lb3VzIHJlc3VsdHMgKi8KLSNkZWZpbmUgSFBJX0lOVEVSTkFMX1dBUk5fQUJPVVRfRU5USVRZX1ZBTFVFCi0JdTggdmFsdWVbMV07Ci0jZW5kaWYKLX07Ci0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBidXMgdHlwZXMgKi8KIGVudW0gSFBJX0JVU0VTIHsKIAlIUElfQlVTX0lTQVBOUCA9IDEsCkBAIC0xMzksMjA2ICsxMDQsMTU1IEBACiAJSFBJX0JVU19ORVQgPSA0CiB9OwogCitlbnVtIEhQSV9TVUJTWVNfT1BUSU9OUyB7CisJLyogMCwgMjU2IGFyZSBpbnZhbGlkLCAxLi4yNTUgcmVzZXJ2ZWQgZm9yIGdsb2JhbCBvcHRpb25zICovCisJSFBJX1NVQlNZU19PUFRfTkVUX0VOQUJMRSA9IDI1NywKKwlIUElfU1VCU1lTX09QVF9ORVRfQlJPQURDQVNUID0gMjU4LAorCUhQSV9TVUJTWVNfT1BUX05FVF9VTklDQVNUID0gMjU5LAorCUhQSV9TVUJTWVNfT1BUX05FVF9BRERSID0gMjYwLAorCUhQSV9TVUJTWVNfT1BUX05FVF9NQVNLID0gMjYxLAorCUhQSV9TVUJTWVNfT1BUX05FVF9BREFQVEVSX0FERFJFU1NfQUREID0gMjYyCit9OworCisvKiogVm9sdW1lIGZsYWdzCisqLworZW51bSBIUElfVk9MVU1FX0ZMQUdTIHsKKwkvKiogU2V0IGlmIHRoZSB2b2x1bWUgY29udHJvbCBpcyBtdXRlZCAqLworCUhQSV9WT0xVTUVfRkxBR19NVVRFRCA9ICgxIDw8IDApLAorCS8qKiBTZXQgaWYgdGhlIHZvbHVtZSBjb250cm9sIGhhcyBhIG11dGUgZnVuY3Rpb24gKi8KKwlIUElfVk9MVU1FX0ZMQUdfSEFTX01VVEUgPSAoMSA8PCAxKSwKKwkvKiogU2V0IGlmIHZvbHVtZSBjb250cm9sIGNhbiBkbyBhdXRvZmFkaW5nICovCisJSFBJX1ZPTFVNRV9GTEFHX0hBU19BVVRPRkFERSA9ICgxIDw8IDIpCisJCS8qIE5vdGUgRmxhZ3MgPj0gKDE8PDgpIGFyZSBmb3IgRFNQIGludGVybmFsIHVzZSBvbmx5ICovCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDT05UUk9MIEFUVFJJQlVURVMgKioqKi8KIC8qIChpbiBvcmRlciBvZiBjb250cm9sIHR5cGUgSUQgKi8KIAogLyogVGhpcyBhbGxvd3MgZm9yIDI1NSBjb250cm9sIHR5cGVzLCAyNTYgdW5pcXVlIGF0dHJpYnV0ZXMgZWFjaCAqLwotI2RlZmluZSBIUElfQ1RMX0FUVFIoY3RsLCBhaSkgKEhQSV9DT05UUk9MXyMjY3RsICogMHgxMDAgKyBhaSkKKyNkZWZpbmUgSFBJX0NUTF9BVFRSKGN0bCwgYWkpICgoSFBJX0NPTlRST0xfIyNjdGwgPDwgOCkgKyBhaSkKIAogLyogR2V0IHRoZSBzdWItaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSBmb3IgYSBjb250cm9sIHR5cGUgKi8KLSNkZWZpbmUgSFBJX0NUTF9BVFRSX0lOREVYKGkpIChpJjB4ZmYpCisjZGVmaW5lIEhQSV9DVExfQVRUUl9JTkRFWChpKSAoaSAmIDB4ZmYpCiAKIC8qIEV4dHJhY3QgdGhlIGNvbnRyb2wgZnJvbSB0aGUgY29udHJvbCBhdHRyaWJ1dGUgKi8KLSNkZWZpbmUgSFBJX0NUTF9BVFRSX0NPTlRST0woaSkgKGk+PjgpCi0KLS8qIEdlbmVyaWMgY29udHJvbCBhdHRyaWJ1dGVzLiAgKi8KLQotLyoqIEVuYWJsZSBhIGNvbnRyb2wuCi0wPWRpc2FibGUsIDE9ZW5hYmxlCi1cbm90ZSBnZW5lcmljIHRvIGFsbCBtaXhlciBwbHVnaW5zPwotKi8KLSNkZWZpbmUgSFBJX0dFTkVSSUNfRU5BQkxFIEhQSV9DVExfQVRUUihHRU5FUklDLCAxKQorI2RlZmluZSBIUElfQ1RMX0FUVFJfQ09OVFJPTChpKSAoaSA+PiA4KQogCiAvKiogRW5hYmxlIGV2ZW50IGdlbmVyYXRpb24gZm9yIGEgY29udHJvbC4KIDA9ZGlzYWJsZSwgMT1lbmFibGUKIFxub3RlIGdlbmVyaWMgdG8gYWxsIGNvbnRyb2xzIHRoYXQgY2FuIGdlbmVyYXRlIGV2ZW50cwogKi8KLSNkZWZpbmUgSFBJX0dFTkVSSUNfRVZFTlRfRU5BQkxFIEhQSV9DVExfQVRUUihHRU5FUklDLCAyKQogCi0vKiBWb2x1bWUgQ29udHJvbCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIEhQSV9WT0xVTUVfR0FJTiAgICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFZPTFVNRSwgMSkKLSNkZWZpbmUgSFBJX1ZPTFVNRV9BVVRPRkFERSAgICAgICAgICAgICBIUElfQ1RMX0FUVFIoVk9MVU1FLCAyKQotCi0vKiogRm9yIEhQSV9Db250cm9sUXVlcnkoKSB0byBnZXQgdGhlIG51bWJlciBvZiBjaGFubmVscyBvZiBhIHZvbHVtZSBjb250cm9sKi8KLSNkZWZpbmUgSFBJX1ZPTFVNRV9OVU1fQ0hBTk5FTFMgICAgICAgICBIUElfQ1RMX0FUVFIoVk9MVU1FLCA2KQotI2RlZmluZSBIUElfVk9MVU1FX1JBTkdFICAgICAgICAgICAgICAgIEhQSV9DVExfQVRUUihWT0xVTUUsIDEwKQotCi0vKiogTGV2ZWwgQ29udHJvbCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIEhQSV9MRVZFTF9HQUlOICAgICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKExFVkVMLCAxKQotI2RlZmluZSBIUElfTEVWRUxfUkFOR0UgICAgICAgICAgICAgICAgIEhQSV9DVExfQVRUUihMRVZFTCwgMTApCi0KLS8qIE1ldGVyIENvbnRyb2wgYXR0cmlidXRlcyAqLwotLyoqIHJldHVybiBSTVMgc2lnbmFsIGxldmVsICovCi0jZGVmaW5lIEhQSV9NRVRFUl9STVMgICAgICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKE1FVEVSLCAxKQotLyoqIHJldHVybiBwZWFrIHNpZ25hbCBsZXZlbCAqLwotI2RlZmluZSBIUElfTUVURVJfUEVBSyAgICAgICAgICAgICAgICAgIEhQSV9DVExfQVRUUihNRVRFUiwgMikKLS8qKiBiYWxsaXN0aWNzIGZvciBBTEwgcm1zIG1ldGVycyBvbiBhZGFwdGVyICovCi0jZGVmaW5lIEhQSV9NRVRFUl9STVNfQkFMTElTVElDUyAgICAgICAgSFBJX0NUTF9BVFRSKE1FVEVSLCAzKQotLyoqIGJhbGxpc3RpY3MgZm9yIEFMTCBwZWFrIG1ldGVycyBvbiBhZGFwdGVyICovCi0jZGVmaW5lIEhQSV9NRVRFUl9QRUFLX0JBTExJU1RJQ1MgICAgICAgSFBJX0NUTF9BVFRSKE1FVEVSLCA0KQotCi0vKiogRm9yIEhQSV9Db250cm9sUXVlcnkoKSB0byBnZXQgdGhlIG51bWJlciBvZiBjaGFubmVscyBvZiBhIG1ldGVyIGNvbnRyb2wqLwotI2RlZmluZSBIUElfTUVURVJfTlVNX0NIQU5ORUxTICAgICAgICAgIEhQSV9DVExfQVRUUihNRVRFUiwgNSkKLQotLyogTXVsdGlwbGV4ZXIgY29udHJvbCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIEhQSV9NVUxUSVBMRVhFUl9TT1VSQ0UgICAgICAgICAgSFBJX0NUTF9BVFRSKE1VTFRJUExFWEVSLCAxKQotI2RlZmluZSBIUElfTVVMVElQTEVYRVJfUVVFUllTT1VSQ0UgICAgIEhQSV9DVExfQVRUUihNVUxUSVBMRVhFUiwgMikKLQotLyoqIEFFUy9FQlUgdHJhbnNtaXR0ZXIgY29udHJvbCBhdHRyaWJ1dGVzICovCi0vKiogQUVTRUJVIG9yIFNQRElGICovCi0jZGVmaW5lIEhQSV9BRVNFQlVUWF9GT1JNQVQgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKEFFU0VCVVRYLCAxKQotI2RlZmluZSBIUElfQUVTRUJVVFhfU0FNUExFUkFURSAgICAgICAgIEhQSV9DVExfQVRUUihBRVNFQlVUWCwgMykKLSNkZWZpbmUgSFBJX0FFU0VCVVRYX0NIQU5ORUxTVEFUVVMgICAgICBIUElfQ1RMX0FUVFIoQUVTRUJVVFgsIDQpCi0jZGVmaW5lIEhQSV9BRVNFQlVUWF9VU0VSREFUQSAgICAgICAgICAgSFBJX0NUTF9BVFRSKEFFU0VCVVRYLCA1KQotCi0vKiogQUVTL0VCVSByZWNlaXZlciBjb250cm9sIGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgSFBJX0FFU0VCVVJYX0ZPUk1BVCAgICAgICAgICAgICBIUElfQ1RMX0FUVFIoQUVTRUJVUlgsIDEpCi0jZGVmaW5lIEhQSV9BRVNFQlVSWF9FUlJPUlNUQVRVUyAgICAgICAgSFBJX0NUTF9BVFRSKEFFU0VCVVJYLCAyKQotI2RlZmluZSBIUElfQUVTRUJVUlhfU0FNUExFUkFURSAgICAgICAgIEhQSV9DVExfQVRUUihBRVNFQlVSWCwgMykKLSNkZWZpbmUgSFBJX0FFU0VCVVJYX0NIQU5ORUxTVEFUVVMgICAgICBIUElfQ1RMX0FUVFIoQUVTRUJVUlgsIDQpCi0jZGVmaW5lIEhQSV9BRVNFQlVSWF9VU0VSREFUQSAgICAgICAgICAgSFBJX0NUTF9BVFRSKEFFU0VCVVJYLCA1KQotCi0vKiogXGRlZmdyb3VwIHR1bmVyX2RlZnMgVHVuZXJzCi1ceworLyoqIFVuaXF1ZSBpZGVudGlmaWVycyBmb3IgZXZlcnkgY29udHJvbCBhdHRyaWJ1dGUKICovCi0vKiogXGRlZmdyb3VwIHR1bmVyX2F0dHJzIFR1bmVyIGNvbnRyb2wgYXR0cmlidXRlcwotXHsKLSovCi0jZGVmaW5lIEhQSV9UVU5FUl9CQU5EICAgICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFRVTkVSLCAxKQotI2RlZmluZSBIUElfVFVORVJfRlJFUSAgICAgICAgICAgICAgICAgIEhQSV9DVExfQVRUUihUVU5FUiwgMikKLSNkZWZpbmUgSFBJX1RVTkVSX0xFVkVMICAgICAgICAgICAgICAgICBIUElfQ1RMX0FUVFIoVFVORVIsIDMpCi0jZGVmaW5lIEhQSV9UVU5FUl9BVURJT01VVEUgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFRVTkVSLCA0KQotLyogdXNlIFRVTkVSX1NUQVRVUyBpbnN0ZWFkICovCi0jZGVmaW5lIEhQSV9UVU5FUl9WSURFT19TVEFUVVMgICAgICAgICAgSFBJX0NUTF9BVFRSKFRVTkVSLCA1KQotI2RlZmluZSBIUElfVFVORVJfR0FJTiAgICAgICAgICAgICAgICAgIEhQSV9DVExfQVRUUihUVU5FUiwgNikKLSNkZWZpbmUgSFBJX1RVTkVSX1NUQVRVUyAgICAgICAgICAgICAgICBIUElfQ1RMX0FUVFIoVFVORVIsIDcpCi0jZGVmaW5lIEhQSV9UVU5FUl9NT0RFICAgICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFRVTkVSLCA4KQotLyoqIFJEUyBkYXRhLiAqLwotI2RlZmluZSBIUElfVFVORVJfUkRTICAgICAgICAgICAgICAgICAgIEhQSV9DVExfQVRUUihUVU5FUiwgOSkKLS8qKiBBdWRpbyBwcmUtZW1waGFzaXMuICovCi0jZGVmaW5lIEhQSV9UVU5FUl9ERUVNUEhBU0lTICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFRVTkVSLCAxMCkKLS8qKiBIRCBSYWRpbyB0dW5lciBwcm9ncmFtIGNvbnRyb2wuICovCi0jZGVmaW5lIEhQSV9UVU5FUl9QUk9HUkFNICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFRVTkVSLCAxMSkKLS8qKiBIRCBSYWRpbyB0dW5lciBkaWdpdGFsIHNpZ25hbCBxdWFsaXR5LiAqLwotI2RlZmluZSBIUElfVFVORVJfSERSQURJT19TSUdOQUxfUVVBTElUWSAgICAgICAgSFBJX0NUTF9BVFRSKFRVTkVSLCAxMikKLS8qKiBIRCBSYWRpbyBTREsgZmlybXdhcmUgdmVyc2lvbi4gKi8KLSNkZWZpbmUgSFBJX1RVTkVSX0hEUkFESU9fU0RLX1ZFUlNJT04gICBIUElfQ1RMX0FUVFIoVFVORVIsIDEzKQotLyoqIEhEIFJhZGlvIERTUCBmaXJtd2FyZSB2ZXJzaW9uLiAqLwotI2RlZmluZSBIUElfVFVORVJfSERSQURJT19EU1BfVkVSU0lPTiAgIEhQSV9DVExfQVRUUihUVU5FUiwgMTQpCi0vKiogSEQgUmFkaW8gc2lnbmFsIGJsZW5kIChmb3JjZSBhbmFsb2csIG9yIGF1dG9tYXRpYykuICovCi0jZGVmaW5lIEhQSV9UVU5FUl9IRFJBRElPX0JMRU5EICAgICAgICAgSFBJX0NUTF9BVFRSKFRVTkVSLCAxNSkKK2VudW0gSFBJX0NPTlRST0xfQVRUUklCVVRFUyB7CisJSFBJX0dFTkVSSUNfRU5BQkxFID0gSFBJX0NUTF9BVFRSKEdFTkVSSUMsIDEpLAorCUhQSV9HRU5FUklDX0VWRU5UX0VOQUJMRSA9IEhQSV9DVExfQVRUUihHRU5FUklDLCAyKSwKIAotLyoqIFx9ICovCisJSFBJX1ZPTFVNRV9HQUlOID0gSFBJX0NUTF9BVFRSKFZPTFVNRSwgMSksCisJSFBJX1ZPTFVNRV9BVVRPRkFERSA9IEhQSV9DVExfQVRUUihWT0xVTUUsIDIpLAorCUhQSV9WT0xVTUVfTVVURSA9IEhQSV9DVExfQVRUUihWT0xVTUUsIDMpLAorCUhQSV9WT0xVTUVfR0FJTl9BTkRfRkxBR1MgPSBIUElfQ1RMX0FUVFIoVk9MVU1FLCA0KSwKKwlIUElfVk9MVU1FX05VTV9DSEFOTkVMUyA9IEhQSV9DVExfQVRUUihWT0xVTUUsIDYpLAorCUhQSV9WT0xVTUVfUkFOR0UgPSBIUElfQ1RMX0FUVFIoVk9MVU1FLCAxMCksCiAKLS8qKiBcZGVmZ3JvdXAgcGFkc19hdHRycyBUdW5lciBQQURzIGNvbnRyb2wgYXR0cmlidXRlcwotXHsKLSovCi0vKiogVGhlIHRleHQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHN0YXRpb24vY2hhbm5lbCBjb21iaW5hdGlvbi4gKi8KLSNkZWZpbmUgSFBJX1BBRF9DSEFOTkVMX05BTUUgICAgICAgICAgICBIUElfQ1RMX0FUVFIoUEFELCAxKQotLyoqIFRoZSB0ZXh0IHN0cmluZyBjb250YWluaW5nIHRoZSBhcnRpc3QuICovCi0jZGVmaW5lIEhQSV9QQURfQVJUSVNUICAgICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFBBRCwgMikKLS8qKiBUaGUgdGV4dCBzdHJpbmcgY29udGFpbmluZyB0aGUgdGl0bGUuICovCi0jZGVmaW5lIEhQSV9QQURfVElUTEUgICAgICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFBBRCwgMykKLS8qKiBUaGUgdGV4dCBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudC4gKi8KLSNkZWZpbmUgSFBJX1BBRF9DT01NRU5UICAgICAgICAgICAgICAgICBIUElfQ1RMX0FUVFIoUEFELCA0KQotLyoqIFRoZSBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIFBUWSBjb2RlLiAqLwotI2RlZmluZSBIUElfUEFEX1BST0dSQU1fVFlQRSAgICAgICAgICAgIEhQSV9DVExfQVRUUihQQUQsIDUpCi0vKiogVGhlIGludGVnZXIgY29udGFpbmluZyB0aGUgcHJvZ3JhbSBpZGVudGlmaWNhdGlvbi4gKi8KLSNkZWZpbmUgSFBJX1BBRF9QUk9HUkFNX0lEICAgICAgICAgICAgICBIUElfQ1RMX0FUVFIoUEFELCA2KQotLyoqIFRoZSBpbnRlZ2VyIGNvbnRhaW5pbmcgd2hldGhlciB0cmFmZmljIGluZm9ybWF0aW9uIGlzIHN1cHBvcnRlZC4KLUNvbnRhaW5zIGVpdGhlciAxIG9yIDAuICovCi0jZGVmaW5lIEhQSV9QQURfVEFfU1VQUE9SVCAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFBBRCwgNykKLS8qKiBUaGUgaW50ZWdlciBjb250YWluaW5nIHdoZXRoZXIgdHJhZmZpYyBhbm5vdW5jZW1lbnQgaXMgaW4gcHJvZ3Jlc3MuCi1Db250YWlucyBlaXRoZXIgMSBvciAwLiAqLwotI2RlZmluZSBIUElfUEFEX1RBX0FDVElWRSAgICAgICAgICAgICAgIEhQSV9DVExfQVRUUihQQUQsIDgpCi0vKiogXH0gKi8KLS8qKiBcfSAqLworCUhQSV9NRVRFUl9STVMgPSBIUElfQ1RMX0FUVFIoTUVURVIsIDEpLAorCUhQSV9NRVRFUl9QRUFLID0gSFBJX0NUTF9BVFRSKE1FVEVSLCAyKSwKKwlIUElfTUVURVJfUk1TX0JBTExJU1RJQ1MgPSBIUElfQ1RMX0FUVFIoTUVURVIsIDMpLAorCUhQSV9NRVRFUl9QRUFLX0JBTExJU1RJQ1MgPSBIUElfQ1RMX0FUVFIoTUVURVIsIDQpLAorCUhQSV9NRVRFUl9OVU1fQ0hBTk5FTFMgPSBIUElfQ1RMX0FUVFIoTUVURVIsIDUpLAogCi0vKiBWT1ggY29udHJvbCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIEhQSV9WT1hfVEhSRVNIT0xEICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFZPWCwgMSkKKwlIUElfTVVMVElQTEVYRVJfU09VUkNFID0gSFBJX0NUTF9BVFRSKE1VTFRJUExFWEVSLCAxKSwKKwlIUElfTVVMVElQTEVYRVJfUVVFUllTT1VSQ0UgPSBIUElfQ1RMX0FUVFIoTVVMVElQTEVYRVIsIDIpLAogCi0vKj8/IGNoYW5uZWwgbW9kZSB1c2VkIGhwaV9tdWx0aXBsZXhlcl9zb3VyY2UgYXR0cmlidXRlID09IDEgKi8KLSNkZWZpbmUgSFBJX0NIQU5ORUxfTU9ERV9NT0RFIEhQSV9DVExfQVRUUihDSEFOTkVMX01PREUsIDEpCisJSFBJX0FFU0VCVVRYX0ZPUk1BVCA9IEhQSV9DVExfQVRUUihBRVNFQlVUWCwgMSksCisJSFBJX0FFU0VCVVRYX1NBTVBMRVJBVEUgPSBIUElfQ1RMX0FUVFIoQUVTRUJVVFgsIDMpLAorCUhQSV9BRVNFQlVUWF9DSEFOTkVMU1RBVFVTID0gSFBJX0NUTF9BVFRSKEFFU0VCVVRYLCA0KSwKKwlIUElfQUVTRUJVVFhfVVNFUkRBVEEgPSBIUElfQ1RMX0FUVFIoQUVTRUJVVFgsIDUpLAogCi0vKiogXGRlZmdyb3VwIGNoYW5uZWxfbW9kZXMgQ2hhbm5lbCBNb2RlcwotVXNlZCBmb3IgSFBJX0NoYW5uZWxNb2RlU2V0L0dldCgpCi1cewotKi8KLS8qKiBMZWZ0IGNoYW5uZWwgb3V0ID0gbGVmdCBjaGFubmVsIGluLCBSaWdodCBjaGFubmVsIG91dCA9IHJpZ2h0IGNoYW5uZWwgaW4uICovCi0jZGVmaW5lIEhQSV9DSEFOTkVMX01PREVfTk9STUFMICAgICAgICAgICAgICAgICAxCi0vKiogTGVmdCBjaGFubmVsIG91dCA9IHJpZ2h0IGNoYW5uZWwgaW4sIFJpZ2h0IGNoYW5uZWwgb3V0ID0gbGVmdCBjaGFubmVsIGluLiAqLwotI2RlZmluZSBIUElfQ0hBTk5FTF9NT0RFX1NXQVAgICAgICAgICAgICAgICAgICAgMgotLyoqIExlZnQgY2hhbm5lbCBvdXQgPSBsZWZ0IGNoYW5uZWwgaW4sIFJpZ2h0IGNoYW5uZWwgb3V0ID0gbGVmdCBjaGFubmVsIGluLiAqLwotI2RlZmluZSBIUElfQ0hBTk5FTF9NT0RFX0xFRlRfVE9fU1RFUkVPICAgICAgICAgMwotLyoqIExlZnQgY2hhbm5lbCBvdXQgPSByaWdodCBjaGFubmVsIGluLCBSaWdodCBjaGFubmVsIG91dCA9IHJpZ2h0IGNoYW5uZWwgaW4uKi8KLSNkZWZpbmUgSFBJX0NIQU5ORUxfTU9ERV9SSUdIVF9UT19TVEVSRU8gICAgICAgIDQKLS8qKiBMZWZ0IGNoYW5uZWwgb3V0ID0gKGxlZnQgY2hhbm5lbCBpbiArIHJpZ2h0IGNoYW5uZWwgaW4pLzIsCi0gICAgUmlnaHQgY2hhbm5lbCBvdXQgPSBtdXRlLiAqLwotI2RlZmluZSBIUElfQ0hBTk5FTF9NT0RFX1NURVJFT19UT19MRUZUICAgICAgICAgNQotLyoqIExlZnQgY2hhbm5lbCBvdXQgPSBtdXRlLAotICAgIFJpZ2h0IGNoYW5uZWwgb3V0ID0gKHJpZ2h0IGNoYW5uZWwgaW4gKyBsZWZ0IGNoYW5uZWwgaW4pLzIuICovCi0jZGVmaW5lIEhQSV9DSEFOTkVMX01PREVfU1RFUkVPX1RPX1JJR0hUICAgICAgICA2Ci0jZGVmaW5lIEhQSV9DSEFOTkVMX01PREVfTEFTVCAgICAgICAgICAgICAgICAgICA2Ci0vKiogXH0gKi8KKwlIUElfQUVTRUJVUlhfRk9STUFUID0gSFBJX0NUTF9BVFRSKEFFU0VCVVJYLCAxKSwKKwlIUElfQUVTRUJVUlhfRVJST1JTVEFUVVMgPSBIUElfQ1RMX0FUVFIoQUVTRUJVUlgsIDIpLAorCUhQSV9BRVNFQlVSWF9TQU1QTEVSQVRFID0gSFBJX0NUTF9BVFRSKEFFU0VCVVJYLCAzKSwKKwlIUElfQUVTRUJVUlhfQ0hBTk5FTFNUQVRVUyA9IEhQSV9DVExfQVRUUihBRVNFQlVSWCwgNCksCisJSFBJX0FFU0VCVVJYX1VTRVJEQVRBID0gSFBJX0NUTF9BVFRSKEFFU0VCVVJYLCA1KSwKIAotLyogQml0c3RyZWFtIGNvbnRyb2wgc2V0IGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgSFBJX0JJVFNUUkVBTV9EQVRBX1BPTEFSSVRZICAgICBIUElfQ1RMX0FUVFIoQklUU1RSRUFNLCAxKQotI2RlZmluZSBIUElfQklUU1RSRUFNX0NMT0NLX0VER0UgICAgICAgIEhQSV9DVExfQVRUUihCSVRTVFJFQU0sIDIpCi0jZGVmaW5lIEhQSV9CSVRTVFJFQU1fQ0xPQ0tfU09VUkNFICAgICAgSFBJX0NUTF9BVFRSKEJJVFNUUkVBTSwgMykKKwlIUElfTEVWRUxfR0FJTiA9IEhQSV9DVExfQVRUUihMRVZFTCwgMSksCisJSFBJX0xFVkVMX1JBTkdFID0gSFBJX0NUTF9BVFRSKExFVkVMLCAxMCksCisKKwlIUElfVFVORVJfQkFORCA9IEhQSV9DVExfQVRUUihUVU5FUiwgMSksCisJSFBJX1RVTkVSX0ZSRVEgPSBIUElfQ1RMX0FUVFIoVFVORVIsIDIpLAorCUhQSV9UVU5FUl9MRVZFTF9BVkcgPSBIUElfQ1RMX0FUVFIoVFVORVIsIDMpLAorCUhQSV9UVU5FUl9MRVZFTF9SQVcgPSBIUElfQ1RMX0FUVFIoVFVORVIsIDQpLAorCUhQSV9UVU5FUl9TTlIgPSBIUElfQ1RMX0FUVFIoVFVORVIsIDUpLAorCUhQSV9UVU5FUl9HQUlOID0gSFBJX0NUTF9BVFRSKFRVTkVSLCA2KSwKKwlIUElfVFVORVJfU1RBVFVTID0gSFBJX0NUTF9BVFRSKFRVTkVSLCA3KSwKKwlIUElfVFVORVJfTU9ERSA9IEhQSV9DVExfQVRUUihUVU5FUiwgOCksCisJSFBJX1RVTkVSX1JEUyA9IEhQSV9DVExfQVRUUihUVU5FUiwgOSksCisJSFBJX1RVTkVSX0RFRU1QSEFTSVMgPSBIUElfQ1RMX0FUVFIoVFVORVIsIDEwKSwKKwlIUElfVFVORVJfUFJPR1JBTSA9IEhQSV9DVExfQVRUUihUVU5FUiwgMTEpLAorCUhQSV9UVU5FUl9IRFJBRElPX1NJR05BTF9RVUFMSVRZID0gSFBJX0NUTF9BVFRSKFRVTkVSLCAxMiksCisJSFBJX1RVTkVSX0hEUkFESU9fU0RLX1ZFUlNJT04gPSBIUElfQ1RMX0FUVFIoVFVORVIsIDEzKSwKKwlIUElfVFVORVJfSERSQURJT19EU1BfVkVSU0lPTiA9IEhQSV9DVExfQVRUUihUVU5FUiwgMTQpLAorCUhQSV9UVU5FUl9IRFJBRElPX0JMRU5EID0gSFBJX0NUTF9BVFRSKFRVTkVSLCAxNSksCisKKwlIUElfVk9YX1RIUkVTSE9MRCA9IEhQSV9DVExfQVRUUihWT1gsIDEpLAorCisJSFBJX0NIQU5ORUxfTU9ERV9NT0RFID0gSFBJX0NUTF9BVFRSKENIQU5ORUxfTU9ERSwgMSksCisKKwlIUElfQklUU1RSRUFNX0RBVEFfUE9MQVJJVFkgPSBIUElfQ1RMX0FUVFIoQklUU1RSRUFNLCAxKSwKKwlIUElfQklUU1RSRUFNX0NMT0NLX0VER0UgPSBIUElfQ1RMX0FUVFIoQklUU1RSRUFNLCAyKSwKKwlIUElfQklUU1RSRUFNX0NMT0NLX1NPVVJDRSA9IEhQSV9DVExfQVRUUihCSVRTVFJFQU0sIDMpLAorCUhQSV9CSVRTVFJFQU1fQUNUSVZJVFkgPSBIUElfQ1RMX0FUVFIoQklUU1RSRUFNLCA0KSwKKworCUhQSV9TQU1QTEVDTE9DS19TT1VSQ0UgPSBIUElfQ1RMX0FUVFIoU0FNUExFQ0xPQ0ssIDEpLAorCUhQSV9TQU1QTEVDTE9DS19TQU1QTEVSQVRFID0gSFBJX0NUTF9BVFRSKFNBTVBMRUNMT0NLLCAyKSwKKwlIUElfU0FNUExFQ0xPQ0tfU09VUkNFX0lOREVYID0gSFBJX0NUTF9BVFRSKFNBTVBMRUNMT0NLLCAzKSwKKwlIUElfU0FNUExFQ0xPQ0tfTE9DQUxfU0FNUExFUkFURSA9IEhQSV9DVExfQVRUUihTQU1QTEVDTE9DSywgNCksCisJSFBJX1NBTVBMRUNMT0NLX0FVVE8gPSBIUElfQ1RMX0FUVFIoU0FNUExFQ0xPQ0ssIDUpLAorCUhQSV9TQU1QTEVDTE9DS19MT0NBTF9MT0NLID0gSFBJX0NUTF9BVFRSKFNBTVBMRUNMT0NLLCA2KSwKKworCUhQSV9NSUNST1BIT05FX1BIQU5UT01fUE9XRVIgPSBIUElfQ1RMX0FUVFIoTUlDUk9QSE9ORSwgMSksCisKKwlIUElfRVFVQUxJWkVSX05VTV9GSUxURVJTID0gSFBJX0NUTF9BVFRSKEVRVUFMSVpFUiwgMSksCisJSFBJX0VRVUFMSVpFUl9GSUxURVIgPSBIUElfQ1RMX0FUVFIoRVFVQUxJWkVSLCAyKSwKKwlIUElfRVFVQUxJWkVSX0NPRUZGSUNJRU5UUyA9IEhQSV9DVExfQVRUUihFUVVBTElaRVIsIDMpLAorCisJSFBJX0NPTVBBTkRFUl9QQVJBTVMgPSBIUElfQ1RMX0FUVFIoQ09NUEFOREVSLCAxKSwKKwlIUElfQ09NUEFOREVSX01BS0VVUEdBSU4gPSBIUElfQ1RMX0FUVFIoQ09NUEFOREVSLCAyKSwKKwlIUElfQ09NUEFOREVSX1RIUkVTSE9MRCA9IEhQSV9DVExfQVRUUihDT01QQU5ERVIsIDMpLAorCUhQSV9DT01QQU5ERVJfUkFUSU8gPSBIUElfQ1RMX0FUVFIoQ09NUEFOREVSLCA0KSwKKwlIUElfQ09NUEFOREVSX0FUVEFDSyA9IEhQSV9DVExfQVRUUihDT01QQU5ERVIsIDUpLAorCUhQSV9DT01QQU5ERVJfREVDQVkgPSBIUElfQ1RMX0FUVFIoQ09NUEFOREVSLCA2KSwKKworCUhQSV9DT0JSQU5FVF9TRVQgPSBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDEpLAorCUhQSV9DT0JSQU5FVF9HRVQgPSBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDIpLAorCUhQSV9DT0JSQU5FVF9TRVRfREFUQSA9IEhQSV9DVExfQVRUUihDT0JSQU5FVCwgMyksCisJSFBJX0NPQlJBTkVUX0dFVF9EQVRBID0gSFBJX0NUTF9BVFRSKENPQlJBTkVULCA0KSwKKwlIUElfQ09CUkFORVRfR0VUX1NUQVRVUyA9IEhQSV9DVExfQVRUUihDT0JSQU5FVCwgNSksCisJSFBJX0NPQlJBTkVUX1NFTkRfUEFDS0VUID0gSFBJX0NUTF9BVFRSKENPQlJBTkVULCA2KSwKKwlIUElfQ09CUkFORVRfR0VUX1BBQ0tFVCA9IEhQSV9DVExfQVRUUihDT0JSQU5FVCwgNyksCisKKwlIUElfVE9ORURFVEVDVE9SX1RIUkVTSE9MRCA9IEhQSV9DVExfQVRUUihUT05FREVURUNUT1IsIDEpLAorCUhQSV9UT05FREVURUNUT1JfU1RBVEUgPSBIUElfQ1RMX0FUVFIoVE9ORURFVEVDVE9SLCAyKSwKKwlIUElfVE9ORURFVEVDVE9SX0ZSRVFVRU5DWSA9IEhQSV9DVExfQVRUUihUT05FREVURUNUT1IsIDMpLAorCisJSFBJX1NJTEVOQ0VERVRFQ1RPUl9USFJFU0hPTEQgPSBIUElfQ1RMX0FUVFIoU0lMRU5DRURFVEVDVE9SLCAxKSwKKwlIUElfU0lMRU5DRURFVEVDVE9SX1NUQVRFID0gSFBJX0NUTF9BVFRSKFNJTEVOQ0VERVRFQ1RPUiwgMiksCisJSFBJX1NJTEVOQ0VERVRFQ1RPUl9ERUxBWSA9IEhQSV9DVExfQVRUUihTSUxFTkNFREVURUNUT1IsIDMpLAorCisJSFBJX1BBRF9DSEFOTkVMX05BTUUgPSBIUElfQ1RMX0FUVFIoUEFELCAxKSwKKwlIUElfUEFEX0FSVElTVCA9IEhQSV9DVExfQVRUUihQQUQsIDIpLAorCUhQSV9QQURfVElUTEUgPSBIUElfQ1RMX0FUVFIoUEFELCAzKSwKKwlIUElfUEFEX0NPTU1FTlQgPSBIUElfQ1RMX0FUVFIoUEFELCA0KSwKKwlIUElfUEFEX1BST0dSQU1fVFlQRSA9IEhQSV9DVExfQVRUUihQQUQsIDUpLAorCUhQSV9QQURfUFJPR1JBTV9JRCA9IEhQSV9DVExfQVRUUihQQUQsIDYpLAorCUhQSV9QQURfVEFfU1VQUE9SVCA9IEhQSV9DVExfQVRUUihQQUQsIDcpLAorCUhQSV9QQURfVEFfQUNUSVZFID0gSFBJX0NUTF9BVFRSKFBBRCwgOCkKK307CiAKICNkZWZpbmUgSFBJX1BPTEFSSVRZX1BPU0lUSVZFICAgICAgICAgICAwCiAjZGVmaW5lIEhQSV9QT0xBUklUWV9ORUdBVElWRSAgICAgICAgICAgMQogCi0vKiBCaXRzdHJlYW0gY29udHJvbCBnZXQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBIUElfQklUU1RSRUFNX0FDVElWSVRZICAgICAgICAgIDEKLQotLyogU2FtcGxlQ2xvY2sgY29udHJvbCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIEhQSV9TQU1QTEVDTE9DS19TT1VSQ0UgICAgICAgICAgICAgICAgICBIUElfQ1RMX0FUVFIoU0FNUExFQ0xPQ0ssIDEpCi0jZGVmaW5lIEhQSV9TQU1QTEVDTE9DS19TQU1QTEVSQVRFICAgICAgICAgICAgICBIUElfQ1RMX0FUVFIoU0FNUExFQ0xPQ0ssIDIpCi0jZGVmaW5lIEhQSV9TQU1QTEVDTE9DS19TT1VSQ0VfSU5ERVggICAgICAgICAgICBIUElfQ1RMX0FUVFIoU0FNUExFQ0xPQ0ssIDMpCi0jZGVmaW5lIEhQSV9TQU1QTEVDTE9DS19MT0NBTF9TQU1QTEVSQVRFXAotCUhQSV9DVExfQVRUUihTQU1QTEVDTE9DSywgNCkKLSNkZWZpbmUgSFBJX1NBTVBMRUNMT0NLX0FVVE8gICAgICAgICAgICAgICAgICAgIEhQSV9DVExfQVRUUihTQU1QTEVDTE9DSywgNSkKLSNkZWZpbmUgSFBJX1NBTVBMRUNMT0NLX0xPQ0FMX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgSFBJX0NUTF9BVFRSKFNBTVBMRUNMT0NLLCA2KQotCi0vKiBNaWNyb3Bob25lIGNvbnRyb2wgYXR0cmlidXRlcyAqLwotI2RlZmluZSBIUElfTUlDUk9QSE9ORV9QSEFOVE9NX1BPV0VSIEhQSV9DVExfQVRUUihNSUNST1BIT05FLCAxKQotCi0vKiogRXF1YWxpemVyIGNvbnRyb2wgYXR0cmlidXRlcyAqLwotLyoqIFVzZWQgdG8gZ2V0IG51bWJlciBvZiBmaWx0ZXJzIGluIGFuIEVRLiAoQ2FuJ3Qgc2V0KSAqLwotI2RlZmluZSBIUElfRVFVQUxJWkVSX05VTV9GSUxURVJTIEhQSV9DVExfQVRUUihFUVVBTElaRVIsIDEpCi0vKiogU2V0L2dldCB0aGUgZmlsdGVyIGJ5IHR5cGUsIGZyZXEsIFEsIGdhaW4gKi8KLSNkZWZpbmUgSFBJX0VRVUFMSVpFUl9GSUxURVIgSFBJX0NUTF9BVFRSKEVRVUFMSVpFUiwgMikKLS8qKiBHZXQgdGhlIGJpcXVhZCBjb2VmZmljaWVudHMgKi8KLSNkZWZpbmUgSFBJX0VRVUFMSVpFUl9DT0VGRklDSUVOVFMgSFBJX0NUTF9BVFRSKEVRVUFMSVpFUiwgMykKLQotLyogTm90ZSBjb21wYW5kZXIgYWxzbyB1c2VzIEhQSV9HRU5FUklDX0VOQUJMRSAqLwotI2RlZmluZSBIUElfQ09NUEFOREVSX1BBUkFNUyAgICAgSFBJX0NUTF9BVFRSKENPTVBBTkRFUiwgMSkKLSNkZWZpbmUgSFBJX0NPTVBBTkRFUl9NQUtFVVBHQUlOIEhQSV9DVExfQVRUUihDT01QQU5ERVIsIDIpCi0jZGVmaW5lIEhQSV9DT01QQU5ERVJfVEhSRVNIT0xEICBIUElfQ1RMX0FUVFIoQ09NUEFOREVSLCAzKQotI2RlZmluZSBIUElfQ09NUEFOREVSX1JBVElPICAgICAgSFBJX0NUTF9BVFRSKENPTVBBTkRFUiwgNCkKLSNkZWZpbmUgSFBJX0NPTVBBTkRFUl9BVFRBQ0sgICAgIEhQSV9DVExfQVRUUihDT01QQU5ERVIsIDUpCi0jZGVmaW5lIEhQSV9DT01QQU5ERVJfREVDQVkgICAgICBIUElfQ1RMX0FUVFIoQ09NUEFOREVSLCA2KQotCi0vKiBDb2JyYW5ldCBjb250cm9sIGF0dHJpYnV0ZXMuICovCi0jZGVmaW5lIEhQSV9DT0JSQU5FVF9TRVQgICAgICAgICBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDEpCi0jZGVmaW5lIEhQSV9DT0JSQU5FVF9HRVQgICAgICAgICBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDIpCi0jZGVmaW5lIEhQSV9DT0JSQU5FVF9TRVRfREFUQSAgICBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDMpCi0jZGVmaW5lIEhQSV9DT0JSQU5FVF9HRVRfREFUQSAgICBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDQpCi0jZGVmaW5lIEhQSV9DT0JSQU5FVF9HRVRfU1RBVFVTICBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDUpCi0jZGVmaW5lIEhQSV9DT0JSQU5FVF9TRU5EX1BBQ0tFVCBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDYpCi0jZGVmaW5lIEhQSV9DT0JSQU5FVF9HRVRfUEFDS0VUICBIUElfQ1RMX0FUVFIoQ09CUkFORVQsIDcpCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQ29icmFuZXQgQ2hpcCBCcmlkZ2UgLSBjb3BpZWQgZnJvbSBITUkuSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM5NSw2OSArMzA5LDIyIEBACiAKICNkZWZpbmUgSFBJX0VUSEVSTkVUX1VEUF9QT1JUICg0NDYwMCkJLyohPCBVRFAgbWVzc2FnaW5nIHBvcnQgKi8KIAotLyoqIEJhc2UgbmV0d29yayB0aW1lIG91dCBpcyBzZXQgdG8gMTAwIG1pbGxpLXNlY29uZHMuICovCi0jZGVmaW5lIEhQSV9FVEhFUk5FVF9USU1FT1VUX01TICAgICAgKDEwMCkKKy8qKiBEZWZhdWx0IG5ldHdvcmsgdGltZW91dCBpbiBtaWxsaS1zZWNvbmRzLiAqLworI2RlZmluZSBIUElfRVRIRVJORVRfVElNRU9VVF9NUyA1MDAKIAotLyoqIFxkZWZncm91cCB0b25lZGV0X2F0dHIgVG9uZWRldGVjdG9yIGF0dHJpYnV0ZXMKLVx7Ci1Vc2VkIGJ5IEhQSV9Ub25lRGV0ZWN0b3JfU2V0KCkgYW5kIEhQSV9Ub25lRGV0ZWN0b3JfR2V0KCkKLSovCi0KLS8qKiBTZXQgdGhlIHRocmVzaG9sZCBsZXZlbCBvZiBhIHRvbmVkZXRlY3RvciwKLVRocmVzaG9sZCBpcyBhIC12ZSBudW1iZXIgaW4gdW5pdHMgb2YgZEIvMTAwLAotKi8KLSNkZWZpbmUgSFBJX1RPTkVERVRFQ1RPUl9USFJFU0hPTEQgSFBJX0NUTF9BVFRSKFRPTkVERVRFQ1RPUiwgMSkKLQotLyoqIEdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0b25lZGV0ZWN0aW9uCi1UaGUgcmVzdWx0IGlzIGEgYml0bWFwIG9mIGRldGVjdGVkIHRvbmVzLiAgcGFpcnMgb2YgYml0cyByZXByZXNlbnQgdGhlIGxlZnQKLWFuZCByaWdodCBjaGFubmVscywgd2l0aCBsZWZ0IGNoYW5uZWwgaW4gTFNCLgotVGhlIGxvd2VzdCBmcmVxdWVuY3kgZGV0ZWN0b3Igc3RhdGUgaXMgaW4gdGhlIExTQgotKi8KLSNkZWZpbmUgSFBJX1RPTkVERVRFQ1RPUl9TVEFURSBIUElfQ1RMX0FUVFIoVE9ORURFVEVDVE9SLCAyKQotCi0vKiogR2V0IHRoZSBmcmVxdWVuY3kgb2YgYSB0b25lZGV0ZWN0b3IgYmFuZC4KLSovCi0jZGVmaW5lIEhQSV9UT05FREVURUNUT1JfRlJFUVVFTkNZIEhQSV9DVExfQVRUUihUT05FREVURUNUT1IsIDMpCi0KLS8qKlx9Ki8KLQotLyoqIFxkZWZncm91cCBzaWxlbmNlZGV0X2F0dHIgU2lsZW5jZURldGVjdG9yIGF0dHJpYnV0ZXMKLVx7Ci0qLwotCi0vKiogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRvbmVkZXRlY3Rpb24KLVRoZSByZXN1bHQgaXMgYSBiaXRtYXAgd2l0aCAxcyBmb3Igc2lsZW50IGNoYW5uZWxzLiBMZWZ0IGNoYW5uZWwgaXMgaW4gTFNCCi0qLwotI2RlZmluZSBIUElfU0lMRU5DRURFVEVDVE9SX1NUQVRFIFwKLSAgSFBJX0NUTF9BVFRSKFNJTEVOQ0VERVRFQ1RPUiwgMikKLQotLyoqIFNldCB0aGUgdGhyZXNob2xkIGxldmVsIG9mIGEgU2lsZW5jZURldGVjdG9yLAotVGhyZXNob2xkIGlzIGEgLXZlIG51bWJlciBpbiB1bml0cyBvZiBkQi8xMDAsCi0qLwotI2RlZmluZSBIUElfU0lMRU5DRURFVEVDVE9SX1RIUkVTSE9MRCBcCi0gIEhQSV9DVExfQVRUUihTSUxFTkNFREVURUNUT1IsIDEpCi0KLS8qKiBnZXQvc2V0IHRoZSBzaWxlbmNlIHRpbWUgYmVmb3JlIHRoZSBkZXRlY3RvciB0cmlnZ2VycwotKi8KLSNkZWZpbmUgSFBJX1NJTEVOQ0VERVRFQ1RPUl9ERUxBWSBcCi0gICAgICAgSFBJX0NUTF9BVFRSKFNJTEVOQ0VERVRFQ1RPUiwgMykKLQotLyoqXH0qLwotCi0vKiBMb2NrZWQgbWVtb3J5IGJ1ZmZlciBhbGxvYy9mcmVlIHBoYXNlcyAqLwotLyoqIHVzZSBvbmUgbWVzc2FnZSB0byBhbGxvY2F0ZSBvciBmcmVlIHBoeXNpY2FsIG1lbW9yeSAqLwotI2RlZmluZSBIUElfQlVGRkVSX0NNRF9FWFRFUk5BTCAgICAgICAgICAgICAgICAgMAotLyoqIGFsbG9jIHBoeXNpY2FsIG1lbW9yeSAqLwotI2RlZmluZSBIUElfQlVGRkVSX0NNRF9JTlRFUk5BTF9BTExPQyAgICAgICAgICAgMQotLyoqIHNlbmQgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgdG8gYWRhcHRlciAqLwotI2RlZmluZSBIUElfQlVGRkVSX0NNRF9JTlRFUk5BTF9HUkFOVEFEQVBURVIgICAgMgotLyoqIG5vdGlmeSBhZGFwdGVyIHRvIHN0b3AgdXNpbmcgcGh5c2ljYWwgYnVmZmVyICovCi0jZGVmaW5lIEhQSV9CVUZGRVJfQ01EX0lOVEVSTkFMX1JFVk9LRUFEQVBURVIgICAzCi0vKiogZnJlZSBwaHlzaWNhbCBidWZmZXIgKi8KLSNkZWZpbmUgSFBJX0JVRkZFUl9DTURfSU5URVJOQUxfRlJFRSAgICAgICAgICAgIDQKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ09OVFJPTFggQVRUUklCVVRFUyAqKioqLwotLyogTk9URTogQWxsIGNvbnRyb2x4IGF0dHJpYnV0ZXMgbXVzdCBiZSB1bmlxdWUsIHVubGlrZSBjb250cm9sIGF0dHJpYnV0ZXMgKi8KKy8qKiBMb2NrZWQgbWVtb3J5IGJ1ZmZlciBhbGxvYy9mcmVlIHBoYXNlcyAqLworZW51bSBIUElfQlVGRkVSX0NNRFMgeworCS8qKiB1c2Ugb25lIG1lc3NhZ2UgdG8gYWxsb2NhdGUgb3IgZnJlZSBwaHlzaWNhbCBtZW1vcnkgKi8KKwlIUElfQlVGRkVSX0NNRF9FWFRFUk5BTCA9IDAsCisJLyoqIGFsbG9jIHBoeXNpY2FsIG1lbW9yeSAqLworCUhQSV9CVUZGRVJfQ01EX0lOVEVSTkFMX0FMTE9DID0gMSwKKwkvKiogc2VuZCBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyB0byBhZGFwdGVyICovCisJSFBJX0JVRkZFUl9DTURfSU5URVJOQUxfR1JBTlRBREFQVEVSID0gMiwKKwkvKiogbm90aWZ5IGFkYXB0ZXIgdG8gc3RvcCB1c2luZyBwaHlzaWNhbCBidWZmZXIgKi8KKwlIUElfQlVGRkVSX0NNRF9JTlRFUk5BTF9SRVZPS0VBREFQVEVSID0gMywKKwkvKiogZnJlZSBwaHlzaWNhbCBidWZmZXIgKi8KKwlIUElfQlVGRkVSX0NNRF9JTlRFUk5BTF9GUkVFID0gNAorfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDgyLDYgKzM0OSwxMiBAQAogI2RlZmluZSBIUElfVVNCX1cyS19UQUcgICAgICAgICAgICAgICAgIDB4NTc0OTUzNDEJLyogIkFTSVciICAgICAgICovCiAjZGVmaW5lIEhQSV9VU0JfTElOVVhfVEFHICAgICAgICAgICAgICAgMHg0QzQ5NTM0MQkvKiAiQVNJTCIgICAgICAgKi8KIAorLyoqIEludmFsaWQgQWRhcHRlciBpbmRleAorVXNlZCBpbiBIUEkgbWVzc2FnZXMgdGhhdCBhcmUgbm90IGFkZHJlc3NlZCB0byBhIHNwZWNpZmljIGFkYXB0ZXIKK1VzZWQgaW4gRExMIHRvIGluZGljYXRlIGRldmljZSBub3QgcHJlc2VudAorKi8KKyNkZWZpbmUgSFBJX0FEQVBURVJfSU5ERVhfSU5WQUxJRCAweEZGRkYKKwogLyoqIEZpcnN0IDIgaGV4IGRpZ2l0cyBkZWZpbmUgdGhlIGFkYXB0ZXIgZmFtaWx5ICovCiAjZGVmaW5lIEhQSV9BREFQVEVSX0ZBTUlMWV9NQVNLICAgICAgICAgMHhmZjAwCiAjZGVmaW5lIEhQSV9NT0RVTEVfRkFNSUxZX01BU0sgICAgICAgICAgMHhmZmYwCkBAIC00OTAsMTc4ICszNjMsMTg1IEBACiAjZGVmaW5lIEhQSV9NT0RVTEVfRkFNSUxZX0FTSShmKSAgIChmICYgSFBJX01PRFVMRV9GQU1JTFlfTUFTSykKICNkZWZpbmUgSFBJX0FEQVBURVJfQVNJKGYpICAgKGYpCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIG1lc3NhZ2UgdHlwZXMgKi8KLSNkZWZpbmUgSFBJX1RZUEVfTUVTU0FHRSAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgSFBJX1RZUEVfUkVTUE9OU0UgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgSFBJX1RZUEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgSFBJX1RZUEVfU1NYMkJZUEFTU19NRVNTQUdFICAgICAgICAgICAgIDQKK2VudW0gSFBJX01FU1NBR0VfVFlQRVMgeworCUhQSV9UWVBFX01FU1NBR0UgPSAxLAorCUhQSV9UWVBFX1JFU1BPTlNFID0gMiwKKwlIUElfVFlQRV9EQVRBID0gMywKKwlIUElfVFlQRV9TU1gyQllQQVNTX01FU1NBR0UgPSA0Cit9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBvYmplY3QgdHlwZXMgKi8KLSNkZWZpbmUgSFBJX09CSl9TVUJTWVNURU0gICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgSFBJX09CSl9BREFQVEVSICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgSFBJX09CSl9PU1RSRUFNICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgSFBJX09CSl9JU1RSRUFNICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgSFBJX09CSl9NSVhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgSFBJX09CSl9OT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgSFBJX09CSl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgSFBJX09CSl9OVk1FTU9SWSAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgSFBJX09CSl9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgSFBJX09CSl9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEhQSV9PQkpfQ0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBIUElfT0JKX1BST0ZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgSFBJX09CSl9DT05UUk9MRVggICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIEhQSV9PQkpfQVNZTkNFVkVOVCAgICAgICAgICAgICAgICAgICAgICAxNAorZW51bSBIUElfT0JKRUNUX1RZUEVTIHsKKwlIUElfT0JKX1NVQlNZU1RFTSA9IDEsCisJSFBJX09CSl9BREFQVEVSID0gMiwKKwlIUElfT0JKX09TVFJFQU0gPSAzLAorCUhQSV9PQkpfSVNUUkVBTSA9IDQsCisJSFBJX09CSl9NSVhFUiA9IDUsCisJSFBJX09CSl9OT0RFID0gNiwKKwlIUElfT0JKX0NPTlRST0wgPSA3LAorCUhQSV9PQkpfTlZNRU1PUlkgPSA4LAorCUhQSV9PQkpfR1BJTyA9IDksCisJSFBJX09CSl9XQVRDSERPRyA9IDEwLAorCUhQSV9PQkpfQ0xPQ0sgPSAxMSwKKwlIUElfT0JKX1BST0ZJTEUgPSAxMiwKKwlIUElfT0JKX0NPTlRST0xFWCA9IDEzLAorCUhQSV9PQkpfQVNZTkNFVkVOVCA9IDE0CisjZGVmaW5lIEhQSV9PQkpfTUFYSU5ERVggMTQKK307CiAKLSNkZWZpbmUgSFBJX09CSl9NQVhJTkRFWCAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEhQSV9PQkpfRlVOQ1RJT05fU1BBQ0lORyAweDEwMAorI2RlZmluZSBIUElfRlVOQ19JRChvYmosIGkpIChIUElfT0JKXyMjb2JqICogSFBJX09CSl9GVU5DVElPTl9TUEFDSU5HICsgaSkKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogbWV0aG9kcy9mdW5jdGlvbnMgKi8KLQotI2RlZmluZSBIUElfT0JKX0ZVTkNUSU9OX1NQQUNJTkcgICAgICAgIDB4MTAwCi0jZGVmaW5lIEhQSV9NQUtFX0lOREVYKG9iaiwgaW5kZXgpIChvYmogKiBIUElfT0JKX0ZVTkNUSU9OX1NQQUNJTkcgKyBpbmRleCkKICNkZWZpbmUgSFBJX0VYVFJBQ1RfSU5ERVgoZm4pIChmbiAmIDB4ZmYpCiAKLS8qIFNVQi1TWVNURU0gKi8KLSNkZWZpbmUgSFBJX1NVQlNZU19PUEVOICAgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgMSkKLSNkZWZpbmUgSFBJX1NVQlNZU19HRVRfVkVSU0lPTiAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgMikKLSNkZWZpbmUgSFBJX1NVQlNZU19HRVRfSU5GTyAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgMykKLSNkZWZpbmUgSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgNCkKLSNkZWZpbmUgSFBJX1NVQlNZU19DUkVBVEVfQURBUFRFUiAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgNSkKLSNkZWZpbmUgSFBJX1NVQlNZU19DTE9TRSAgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgNikKLSNkZWZpbmUgSFBJX1NVQlNZU19ERUxFVEVfQURBUFRFUiAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgNykKLSNkZWZpbmUgSFBJX1NVQlNZU19EUklWRVJfTE9BRCAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgOCkKLSNkZWZpbmUgSFBJX1NVQlNZU19EUklWRVJfVU5MT0FEICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgOSkKLSNkZWZpbmUgSFBJX1NVQlNZU19SRUFEX1BPUlRfOCAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgMTApCi0jZGVmaW5lIEhQSV9TVUJTWVNfV1JJVEVfUE9SVF84ICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9TVUJTWVNURU0sIDExKQotI2RlZmluZSBIUElfU1VCU1lTX0dFVF9OVU1fQURBUFRFUlMgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfU1VCU1lTVEVNLCAxMikKLSNkZWZpbmUgSFBJX1NVQlNZU19HRVRfQURBUFRFUiAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1NVQlNZU1RFTSwgMTMpCi0jZGVmaW5lIEhQSV9TVUJTWVNfU0VUX05FVFdPUktfSU5URVJGQUNFIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfU1VCU1lTVEVNLCAxNCkKLSNkZWZpbmUgSFBJX1NVQlNZU19GVU5DVElPTl9DT1VOVCAxNAotLyogQURBUFRFUiAqLwotI2RlZmluZSBIUElfQURBUFRFUl9PUEVOICAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQURBUFRFUiwgMSkKLSNkZWZpbmUgSFBJX0FEQVBURVJfQ0xPU0UgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0FEQVBURVIsIDIpCi0jZGVmaW5lIEhQSV9BREFQVEVSX0dFVF9JTkZPICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9BREFQVEVSLCAzKQotI2RlZmluZSBIUElfQURBUFRFUl9HRVRfQVNTRVJUICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQURBUFRFUiwgNCkKLSNkZWZpbmUgSFBJX0FEQVBURVJfVEVTVF9BU1NFUlQgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0FEQVBURVIsIDUpCi0jZGVmaW5lIEhQSV9BREFQVEVSX1NFVF9NT0RFICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9BREFQVEVSLCA2KQotI2RlZmluZSBIUElfQURBUFRFUl9HRVRfTU9ERSAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQURBUFRFUiwgNykKLSNkZWZpbmUgSFBJX0FEQVBURVJfRU5BQkxFX0NBUEFCSUxJVFkgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0FEQVBURVIsIDgpCi0jZGVmaW5lIEhQSV9BREFQVEVSX1NFTEZURVNUICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9BREFQVEVSLCA5KQotI2RlZmluZSBIUElfQURBUFRFUl9GSU5EX09CSkVDVCAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQURBUFRFUiwgMTApCi0jZGVmaW5lIEhQSV9BREFQVEVSX1FVRVJZX0ZMQVNIICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9BREFQVEVSLCAxMSkKLSNkZWZpbmUgSFBJX0FEQVBURVJfU1RBUlRfRkxBU0ggICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0FEQVBURVIsIDEyKQotI2RlZmluZSBIUElfQURBUFRFUl9QUk9HUkFNX0ZMQVNIICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQURBUFRFUiwgMTMpCi0jZGVmaW5lIEhQSV9BREFQVEVSX1NFVF9QUk9QRVJUWSAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9BREFQVEVSLCAxNCkKLSNkZWZpbmUgSFBJX0FEQVBURVJfR0VUX1BST1BFUlRZICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0FEQVBURVIsIDE1KQotI2RlZmluZSBIUElfQURBUFRFUl9FTlVNX1BST1BFUlRZICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQURBUFRFUiwgMTYpCi0jZGVmaW5lIEhQSV9BREFQVEVSX01PRFVMRV9JTkZPICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9BREFQVEVSLCAxNykKLSNkZWZpbmUgSFBJX0FEQVBURVJfREVCVUdfUkVBRCAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0FEQVBURVIsIDE4KQotI2RlZmluZSBIUElfQURBUFRFUl9GVU5DVElPTl9DT1VOVCAxOAotLyogT1VUUFVUIFNUUkVBTSAqLwotI2RlZmluZSBIUElfT1NUUkVBTV9PUEVOICAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfT1NUUkVBTSwgMSkKLSNkZWZpbmUgSFBJX09TVFJFQU1fQ0xPU0UgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX09TVFJFQU0sIDIpCi0jZGVmaW5lIEhQSV9PU1RSRUFNX1dSSVRFICAgICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9PU1RSRUFNLCAzKQotI2RlZmluZSBIUElfT1NUUkVBTV9TVEFSVCAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfT1NUUkVBTSwgNCkKLSNkZWZpbmUgSFBJX09TVFJFQU1fU1RPUCAgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX09TVFJFQU0sIDUpCi0jZGVmaW5lIEhQSV9PU1RSRUFNX1JFU0VUICAgICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9PU1RSRUFNLCA2KQotI2RlZmluZSBIUElfT1NUUkVBTV9HRVRfSU5GTyAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfT1NUUkVBTSwgNykKLSNkZWZpbmUgSFBJX09TVFJFQU1fUVVFUllfRk9STUFUICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX09TVFJFQU0sIDgpCi0jZGVmaW5lIEhQSV9PU1RSRUFNX0RBVEEgICAgICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9PU1RSRUFNLCA5KQotI2RlZmluZSBIUElfT1NUUkVBTV9TRVRfVkVMT0NJVFkgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfT1NUUkVBTSwgMTApCi0jZGVmaW5lIEhQSV9PU1RSRUFNX1NFVF9QVU5DSElOT1VUICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9PU1RSRUFNLCAxMSkKLSNkZWZpbmUgSFBJX09TVFJFQU1fU0lORUdFTiAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX09TVFJFQU0sIDEyKQotI2RlZmluZSBIUElfT1NUUkVBTV9BTkNfUkVTRVQgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfT1NUUkVBTSwgMTMpCi0jZGVmaW5lIEhQSV9PU1RSRUFNX0FOQ19HRVRfSU5GTyAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9PU1RSRUFNLCAxNCkKLSNkZWZpbmUgSFBJX09TVFJFQU1fQU5DX1JFQUQgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX09TVFJFQU0sIDE1KQotI2RlZmluZSBIUElfT1NUUkVBTV9TRVRfVElNRVNDQUxFICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfT1NUUkVBTSwgMTYpCi0jZGVmaW5lIEhQSV9PU1RSRUFNX1NFVF9GT1JNQVQgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9PU1RSRUFNLCAxNykKLSNkZWZpbmUgSFBJX09TVFJFQU1fSE9TVEJVRkZFUl9BTExPQyAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX09TVFJFQU0sIDE4KQotI2RlZmluZSBIUElfT1NUUkVBTV9IT1NUQlVGRkVSX0ZSRUUgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfT1NUUkVBTSwgMTkpCi0jZGVmaW5lIEhQSV9PU1RSRUFNX0dST1VQX0FERCAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9PU1RSRUFNLCAyMCkKLSNkZWZpbmUgSFBJX09TVFJFQU1fR1JPVVBfR0VUTUFQICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX09TVFJFQU0sIDIxKQotI2RlZmluZSBIUElfT1NUUkVBTV9HUk9VUF9SRVNFVCAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfT1NUUkVBTSwgMjIpCi0jZGVmaW5lIEhQSV9PU1RSRUFNX0hPU1RCVUZGRVJfR0VUX0lORk8gSFBJX01BS0VfSU5ERVgoSFBJX09CSl9PU1RSRUFNLCAyMykKLSNkZWZpbmUgSFBJX09TVFJFQU1fV0FJVF9TVEFSVCAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX09TVFJFQU0sIDI0KQotI2RlZmluZSBIUElfT1NUUkVBTV9GVU5DVElPTl9DT1VOVCAgICAgICAgICAgICAgMjQKLS8qIElOUFVUIFNUUkVBTSAqLwotI2RlZmluZSBIUElfSVNUUkVBTV9PUEVOICAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfSVNUUkVBTSwgMSkKLSNkZWZpbmUgSFBJX0lTVFJFQU1fQ0xPU0UgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0lTVFJFQU0sIDIpCi0jZGVmaW5lIEhQSV9JU1RSRUFNX1NFVF9GT1JNQVQgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9JU1RSRUFNLCAzKQotI2RlZmluZSBIUElfSVNUUkVBTV9SRUFEICAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfSVNUUkVBTSwgNCkKLSNkZWZpbmUgSFBJX0lTVFJFQU1fU1RBUlQgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0lTVFJFQU0sIDUpCi0jZGVmaW5lIEhQSV9JU1RSRUFNX1NUT1AgICAgICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9JU1RSRUFNLCA2KQotI2RlZmluZSBIUElfSVNUUkVBTV9SRVNFVCAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfSVNUUkVBTSwgNykKLSNkZWZpbmUgSFBJX0lTVFJFQU1fR0VUX0lORk8gICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0lTVFJFQU0sIDgpCi0jZGVmaW5lIEhQSV9JU1RSRUFNX1FVRVJZX0ZPUk1BVCAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9JU1RSRUFNLCA5KQotI2RlZmluZSBIUElfSVNUUkVBTV9BTkNfUkVTRVQgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfSVNUUkVBTSwgMTApCi0jZGVmaW5lIEhQSV9JU1RSRUFNX0FOQ19HRVRfSU5GTyAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9JU1RSRUFNLCAxMSkKLSNkZWZpbmUgSFBJX0lTVFJFQU1fQU5DX1dSSVRFICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0lTVFJFQU0sIDEyKQotI2RlZmluZSBIUElfSVNUUkVBTV9IT1NUQlVGRkVSX0FMTE9DICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfSVNUUkVBTSwgMTMpCi0jZGVmaW5lIEhQSV9JU1RSRUFNX0hPU1RCVUZGRVJfRlJFRSAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9JU1RSRUFNLCAxNCkKLSNkZWZpbmUgSFBJX0lTVFJFQU1fR1JPVVBfQUREICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0lTVFJFQU0sIDE1KQotI2RlZmluZSBIUElfSVNUUkVBTV9HUk9VUF9HRVRNQVAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfSVNUUkVBTSwgMTYpCi0jZGVmaW5lIEhQSV9JU1RSRUFNX0dST1VQX1JFU0VUICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9JU1RSRUFNLCAxNykKLSNkZWZpbmUgSFBJX0lTVFJFQU1fSE9TVEJVRkZFUl9HRVRfSU5GTyBIUElfTUFLRV9JTkRFWChIUElfT0JKX0lTVFJFQU0sIDE4KQotI2RlZmluZSBIUElfSVNUUkVBTV9XQUlUX1NUQVJUICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfSVNUUkVBTSwgMTkpCi0jZGVmaW5lIEhQSV9JU1RSRUFNX0ZVTkNUSU9OX0NPVU5UICAgICAgICAgICAgICAxOQotLyogTUlYRVIgKi8KK2VudW0gSFBJX0ZVTkNUSU9OX0lEUyB7CisJSFBJX1NVQlNZU19PUEVOID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxKSwKKwlIUElfU1VCU1lTX0dFVF9WRVJTSU9OID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAyKSwKKwlIUElfU1VCU1lTX0dFVF9JTkZPID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAzKSwKKwlIUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDQpLAorCUhQSV9TVUJTWVNfQ1JFQVRFX0FEQVBURVIgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDUpLAorCUhQSV9TVUJTWVNfQ0xPU0UgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDYpLAorCUhQSV9TVUJTWVNfREVMRVRFX0FEQVBURVIgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDcpLAorCUhQSV9TVUJTWVNfRFJJVkVSX0xPQUQgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDgpLAorCUhQSV9TVUJTWVNfRFJJVkVSX1VOTE9BRCA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgOSksCisJSFBJX1NVQlNZU19SRUFEX1BPUlRfOCA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgMTApLAorCUhQSV9TVUJTWVNfV1JJVEVfUE9SVF84ID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxMSksCisJSFBJX1NVQlNZU19HRVRfTlVNX0FEQVBURVJTID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxMiksCisJSFBJX1NVQlNZU19HRVRfQURBUFRFUiA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgMTMpLAorCUhQSV9TVUJTWVNfU0VUX05FVFdPUktfSU5URVJGQUNFID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxNCksCisJSFBJX1NVQlNZU19PUFRJT05fSU5GTyA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgMTUpLAorCUhQSV9TVUJTWVNfT1BUSU9OX0dFVCA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgMTYpLAorCUhQSV9TVUJTWVNfT1BUSU9OX1NFVCA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgMTcpLAorI2RlZmluZSBIUElfU1VCU1lTX0ZVTkNUSU9OX0NPVU5UIDE3CisKKwlIUElfQURBUFRFUl9PUEVOID0gSFBJX0ZVTkNfSUQoQURBUFRFUiwgMSksCisJSFBJX0FEQVBURVJfQ0xPU0UgPSBIUElfRlVOQ19JRChBREFQVEVSLCAyKSwKKwlIUElfQURBUFRFUl9HRVRfSU5GTyA9IEhQSV9GVU5DX0lEKEFEQVBURVIsIDMpLAorCUhQSV9BREFQVEVSX0dFVF9BU1NFUlQgPSBIUElfRlVOQ19JRChBREFQVEVSLCA0KSwKKwlIUElfQURBUFRFUl9URVNUX0FTU0VSVCA9IEhQSV9GVU5DX0lEKEFEQVBURVIsIDUpLAorCUhQSV9BREFQVEVSX1NFVF9NT0RFID0gSFBJX0ZVTkNfSUQoQURBUFRFUiwgNiksCisJSFBJX0FEQVBURVJfR0VUX01PREUgPSBIUElfRlVOQ19JRChBREFQVEVSLCA3KSwKKwlIUElfQURBUFRFUl9FTkFCTEVfQ0FQQUJJTElUWSA9IEhQSV9GVU5DX0lEKEFEQVBURVIsIDgpLAorCUhQSV9BREFQVEVSX1NFTEZURVNUID0gSFBJX0ZVTkNfSUQoQURBUFRFUiwgOSksCisJSFBJX0FEQVBURVJfRklORF9PQkpFQ1QgPSBIUElfRlVOQ19JRChBREFQVEVSLCAxMCksCisJSFBJX0FEQVBURVJfUVVFUllfRkxBU0ggPSBIUElfRlVOQ19JRChBREFQVEVSLCAxMSksCisJSFBJX0FEQVBURVJfU1RBUlRfRkxBU0ggPSBIUElfRlVOQ19JRChBREFQVEVSLCAxMiksCisJSFBJX0FEQVBURVJfUFJPR1JBTV9GTEFTSCA9IEhQSV9GVU5DX0lEKEFEQVBURVIsIDEzKSwKKwlIUElfQURBUFRFUl9TRVRfUFJPUEVSVFkgPSBIUElfRlVOQ19JRChBREFQVEVSLCAxNCksCisJSFBJX0FEQVBURVJfR0VUX1BST1BFUlRZID0gSFBJX0ZVTkNfSUQoQURBUFRFUiwgMTUpLAorCUhQSV9BREFQVEVSX0VOVU1fUFJPUEVSVFkgPSBIUElfRlVOQ19JRChBREFQVEVSLCAxNiksCisJSFBJX0FEQVBURVJfTU9EVUxFX0lORk8gPSBIUElfRlVOQ19JRChBREFQVEVSLCAxNyksCisJSFBJX0FEQVBURVJfREVCVUdfUkVBRCA9IEhQSV9GVU5DX0lEKEFEQVBURVIsIDE4KSwKKwlIUElfQURBUFRFUl9JUlFfUVVFUllfQU5EX0NMRUFSID0gSFBJX0ZVTkNfSUQoQURBUFRFUiwgMTkpLAorCUhQSV9BREFQVEVSX0lSUV9DQUxMQkFDSyA9IEhQSV9GVU5DX0lEKEFEQVBURVIsIDIwKSwKKyNkZWZpbmUgSFBJX0FEQVBURVJfRlVOQ1RJT05fQ09VTlQgMjAKKworCUhQSV9PU1RSRUFNX09QRU4gPSBIUElfRlVOQ19JRChPU1RSRUFNLCAxKSwKKwlIUElfT1NUUkVBTV9DTE9TRSA9IEhQSV9GVU5DX0lEKE9TVFJFQU0sIDIpLAorCUhQSV9PU1RSRUFNX1dSSVRFID0gSFBJX0ZVTkNfSUQoT1NUUkVBTSwgMyksCisJSFBJX09TVFJFQU1fU1RBUlQgPSBIUElfRlVOQ19JRChPU1RSRUFNLCA0KSwKKwlIUElfT1NUUkVBTV9TVE9QID0gSFBJX0ZVTkNfSUQoT1NUUkVBTSwgNSksCisJSFBJX09TVFJFQU1fUkVTRVQgPSBIUElfRlVOQ19JRChPU1RSRUFNLCA2KSwKKwlIUElfT1NUUkVBTV9HRVRfSU5GTyA9IEhQSV9GVU5DX0lEKE9TVFJFQU0sIDcpLAorCUhQSV9PU1RSRUFNX1FVRVJZX0ZPUk1BVCA9IEhQSV9GVU5DX0lEKE9TVFJFQU0sIDgpLAorCUhQSV9PU1RSRUFNX0RBVEEgPSBIUElfRlVOQ19JRChPU1RSRUFNLCA5KSwKKwlIUElfT1NUUkVBTV9TRVRfVkVMT0NJVFkgPSBIUElfRlVOQ19JRChPU1RSRUFNLCAxMCksCisJSFBJX09TVFJFQU1fU0VUX1BVTkNISU5PVVQgPSBIUElfRlVOQ19JRChPU1RSRUFNLCAxMSksCisJSFBJX09TVFJFQU1fU0lORUdFTiA9IEhQSV9GVU5DX0lEKE9TVFJFQU0sIDEyKSwKKwlIUElfT1NUUkVBTV9BTkNfUkVTRVQgPSBIUElfRlVOQ19JRChPU1RSRUFNLCAxMyksCisJSFBJX09TVFJFQU1fQU5DX0dFVF9JTkZPID0gSFBJX0ZVTkNfSUQoT1NUUkVBTSwgMTQpLAorCUhQSV9PU1RSRUFNX0FOQ19SRUFEID0gSFBJX0ZVTkNfSUQoT1NUUkVBTSwgMTUpLAorCUhQSV9PU1RSRUFNX1NFVF9USU1FU0NBTEUgPSBIUElfRlVOQ19JRChPU1RSRUFNLCAxNiksCisJSFBJX09TVFJFQU1fU0VUX0ZPUk1BVCA9IEhQSV9GVU5DX0lEKE9TVFJFQU0sIDE3KSwKKwlIUElfT1NUUkVBTV9IT1NUQlVGRkVSX0FMTE9DID0gSFBJX0ZVTkNfSUQoT1NUUkVBTSwgMTgpLAorCUhQSV9PU1RSRUFNX0hPU1RCVUZGRVJfRlJFRSA9IEhQSV9GVU5DX0lEKE9TVFJFQU0sIDE5KSwKKwlIUElfT1NUUkVBTV9HUk9VUF9BREQgPSBIUElfRlVOQ19JRChPU1RSRUFNLCAyMCksCisJSFBJX09TVFJFQU1fR1JPVVBfR0VUTUFQID0gSFBJX0ZVTkNfSUQoT1NUUkVBTSwgMjEpLAorCUhQSV9PU1RSRUFNX0dST1VQX1JFU0VUID0gSFBJX0ZVTkNfSUQoT1NUUkVBTSwgMjIpLAorCUhQSV9PU1RSRUFNX0hPU1RCVUZGRVJfR0VUX0lORk8gPSBIUElfRlVOQ19JRChPU1RSRUFNLCAyMyksCisJSFBJX09TVFJFQU1fV0FJVF9TVEFSVCA9IEhQSV9GVU5DX0lEKE9TVFJFQU0sIDI0KSwKKwlIUElfT1NUUkVBTV9XQUlUID0gSFBJX0ZVTkNfSUQoT1NUUkVBTSwgMjUpLAorI2RlZmluZSBIUElfT1NUUkVBTV9GVU5DVElPTl9DT1VOVCAyNQorCisJSFBJX0lTVFJFQU1fT1BFTiA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDEpLAorCUhQSV9JU1RSRUFNX0NMT1NFID0gSFBJX0ZVTkNfSUQoSVNUUkVBTSwgMiksCisJSFBJX0lTVFJFQU1fU0VUX0ZPUk1BVCA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDMpLAorCUhQSV9JU1RSRUFNX1JFQUQgPSBIUElfRlVOQ19JRChJU1RSRUFNLCA0KSwKKwlIUElfSVNUUkVBTV9TVEFSVCA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDUpLAorCUhQSV9JU1RSRUFNX1NUT1AgPSBIUElfRlVOQ19JRChJU1RSRUFNLCA2KSwKKwlIUElfSVNUUkVBTV9SRVNFVCA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDcpLAorCUhQSV9JU1RSRUFNX0dFVF9JTkZPID0gSFBJX0ZVTkNfSUQoSVNUUkVBTSwgOCksCisJSFBJX0lTVFJFQU1fUVVFUllfRk9STUFUID0gSFBJX0ZVTkNfSUQoSVNUUkVBTSwgOSksCisJSFBJX0lTVFJFQU1fQU5DX1JFU0VUID0gSFBJX0ZVTkNfSUQoSVNUUkVBTSwgMTApLAorCUhQSV9JU1RSRUFNX0FOQ19HRVRfSU5GTyA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDExKSwKKwlIUElfSVNUUkVBTV9BTkNfV1JJVEUgPSBIUElfRlVOQ19JRChJU1RSRUFNLCAxMiksCisJSFBJX0lTVFJFQU1fSE9TVEJVRkZFUl9BTExPQyA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDEzKSwKKwlIUElfSVNUUkVBTV9IT1NUQlVGRkVSX0ZSRUUgPSBIUElfRlVOQ19JRChJU1RSRUFNLCAxNCksCisJSFBJX0lTVFJFQU1fR1JPVVBfQUREID0gSFBJX0ZVTkNfSUQoSVNUUkVBTSwgMTUpLAorCUhQSV9JU1RSRUFNX0dST1VQX0dFVE1BUCA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDE2KSwKKwlIUElfSVNUUkVBTV9HUk9VUF9SRVNFVCA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDE3KSwKKwlIUElfSVNUUkVBTV9IT1NUQlVGRkVSX0dFVF9JTkZPID0gSFBJX0ZVTkNfSUQoSVNUUkVBTSwgMTgpLAorCUhQSV9JU1RSRUFNX1dBSVRfU1RBUlQgPSBIUElfRlVOQ19JRChJU1RSRUFNLCAxOSksCisJSFBJX0lTVFJFQU1fV0FJVCA9IEhQSV9GVU5DX0lEKElTVFJFQU0sIDIwKSwKKyNkZWZpbmUgSFBJX0lTVFJFQU1fRlVOQ1RJT05fQ09VTlQgMjAKKwogLyogTk9URToKICAgIEdFVF9OT0RFX0lORk8sIFNFVF9DT05ORUNUSU9OLCBHRVRfQ09OTkVDVElPTlMgYXJlIG5vdCBjdXJyZW50bHkgdXNlZCAqLwotI2RlZmluZSBIUElfTUlYRVJfT1BFTiAgICAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfTUlYRVIsIDEpCi0jZGVmaW5lIEhQSV9NSVhFUl9DTE9TRSAgICAgICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9NSVhFUiwgMikKLSNkZWZpbmUgSFBJX01JWEVSX0dFVF9JTkZPICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX01JWEVSLCAzKQotI2RlZmluZSBIUElfTUlYRVJfR0VUX05PREVfSU5GTyAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfTUlYRVIsIDQpCi0jZGVmaW5lIEhQSV9NSVhFUl9HRVRfQ09OVFJPTCAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9NSVhFUiwgNSkKLSNkZWZpbmUgSFBJX01JWEVSX1NFVF9DT05ORUNUSU9OICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX01JWEVSLCA2KQotI2RlZmluZSBIUElfTUlYRVJfR0VUX0NPTk5FQ1RJT05TICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfTUlYRVIsIDcpCi0jZGVmaW5lIEhQSV9NSVhFUl9HRVRfQ09OVFJPTF9CWV9JTkRFWCAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9NSVhFUiwgOCkKLSNkZWZpbmUgSFBJX01JWEVSX0dFVF9DT05UUk9MX0FSUkFZX0JZX0lOREVYICBIUElfTUFLRV9JTkRFWChIUElfT0JKX01JWEVSLCA5KQotI2RlZmluZSBIUElfTUlYRVJfR0VUX0NPTlRST0xfTVVMVElQTEVfVkFMVUVTIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfTUlYRVIsIDEwKQotI2RlZmluZSBIUElfTUlYRVJfU1RPUkUgICAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfTUlYRVIsIDExKQotI2RlZmluZSBIUElfTUlYRVJfRlVOQ1RJT05fQ09VTlQgICAgICAgIDExCi0vKiBNSVhFUiBDT05UUk9MUyAqLwotI2RlZmluZSBIUElfQ09OVFJPTF9HRVRfSU5GTyAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQ09OVFJPTCwgMSkKLSNkZWZpbmUgSFBJX0NPTlRST0xfR0VUX1NUQVRFICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0NPTlRST0wsIDIpCi0jZGVmaW5lIEhQSV9DT05UUk9MX1NFVF9TVEFURSAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9DT05UUk9MLCAzKQorCUhQSV9NSVhFUl9PUEVOID0gSFBJX0ZVTkNfSUQoTUlYRVIsIDEpLAorCUhQSV9NSVhFUl9DTE9TRSA9IEhQSV9GVU5DX0lEKE1JWEVSLCAyKSwKKwlIUElfTUlYRVJfR0VUX0lORk8gPSBIUElfRlVOQ19JRChNSVhFUiwgMyksCisJSFBJX01JWEVSX0dFVF9OT0RFX0lORk8gPSBIUElfRlVOQ19JRChNSVhFUiwgNCksCisJSFBJX01JWEVSX0dFVF9DT05UUk9MID0gSFBJX0ZVTkNfSUQoTUlYRVIsIDUpLAorCUhQSV9NSVhFUl9TRVRfQ09OTkVDVElPTiA9IEhQSV9GVU5DX0lEKE1JWEVSLCA2KSwKKwlIUElfTUlYRVJfR0VUX0NPTk5FQ1RJT05TID0gSFBJX0ZVTkNfSUQoTUlYRVIsIDcpLAorCUhQSV9NSVhFUl9HRVRfQ09OVFJPTF9CWV9JTkRFWCA9IEhQSV9GVU5DX0lEKE1JWEVSLCA4KSwKKwlIUElfTUlYRVJfR0VUX0NPTlRST0xfQVJSQVlfQllfSU5ERVggPSBIUElfRlVOQ19JRChNSVhFUiwgOSksCisJSFBJX01JWEVSX0dFVF9DT05UUk9MX01VTFRJUExFX1ZBTFVFUyA9IEhQSV9GVU5DX0lEKE1JWEVSLCAxMCksCisJSFBJX01JWEVSX1NUT1JFID0gSFBJX0ZVTkNfSUQoTUlYRVIsIDExKSwKKwlIUElfTUlYRVJfR0VUX0NBQ0hFX0lORk8gPSBIUElfRlVOQ19JRChNSVhFUiwgMTIpLAorI2RlZmluZSBIUElfTUlYRVJfRlVOQ1RJT05fQ09VTlQgMTIKKworCUhQSV9DT05UUk9MX0dFVF9JTkZPID0gSFBJX0ZVTkNfSUQoQ09OVFJPTCwgMSksCisJSFBJX0NPTlRST0xfR0VUX1NUQVRFID0gSFBJX0ZVTkNfSUQoQ09OVFJPTCwgMiksCisJSFBJX0NPTlRST0xfU0VUX1NUQVRFID0gSFBJX0ZVTkNfSUQoQ09OVFJPTCwgMyksCiAjZGVmaW5lIEhQSV9DT05UUk9MX0ZVTkNUSU9OX0NPVU5UIDMKLS8qIE5PTlZPTCBNRU1PUlkgKi8KLSNkZWZpbmUgSFBJX05WTUVNT1JZX09QRU4gICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX05WTUVNT1JZLCAxKQotI2RlZmluZSBIUElfTlZNRU1PUllfUkVBRF9CWVRFICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfTlZNRU1PUlksIDIpCi0jZGVmaW5lIEhQSV9OVk1FTU9SWV9XUklURV9CWVRFICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9OVk1FTU9SWSwgMykKKworCUhQSV9OVk1FTU9SWV9PUEVOID0gSFBJX0ZVTkNfSUQoTlZNRU1PUlksIDEpLAorCUhQSV9OVk1FTU9SWV9SRUFEX0JZVEUgPSBIUElfRlVOQ19JRChOVk1FTU9SWSwgMiksCisJSFBJX05WTUVNT1JZX1dSSVRFX0JZVEUgPSBIUElfRlVOQ19JRChOVk1FTU9SWSwgMyksCiAjZGVmaW5lIEhQSV9OVk1FTU9SWV9GVU5DVElPTl9DT1VOVCAzCi0vKiBHUElPICovCi0jZGVmaW5lIEhQSV9HUElPX09QRU4gICAgICAgICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9HUElPLCAxKQotI2RlZmluZSBIUElfR1BJT19SRUFEX0JJVCAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfR1BJTywgMikKLSNkZWZpbmUgSFBJX0dQSU9fV1JJVEVfQklUICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0dQSU8sIDMpCi0jZGVmaW5lIEhQSV9HUElPX1JFQURfQUxMICAgICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9HUElPLCA0KQotI2RlZmluZSBIUElfR1BJT19XUklURV9TVEFUVVMgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfR1BJTywgNSkKKworCUhQSV9HUElPX09QRU4gPSBIUElfRlVOQ19JRChHUElPLCAxKSwKKwlIUElfR1BJT19SRUFEX0JJVCA9IEhQSV9GVU5DX0lEKEdQSU8sIDIpLAorCUhQSV9HUElPX1dSSVRFX0JJVCA9IEhQSV9GVU5DX0lEKEdQSU8sIDMpLAorCUhQSV9HUElPX1JFQURfQUxMID0gSFBJX0ZVTkNfSUQoR1BJTywgNCksCisJSFBJX0dQSU9fV1JJVEVfU1RBVFVTID0gSFBJX0ZVTkNfSUQoR1BJTywgNSksCiAjZGVmaW5lIEhQSV9HUElPX0ZVTkNUSU9OX0NPVU5UIDUKLS8qIEFTWU5DIEVWRU5UICovCi0jZGVmaW5lIEhQSV9BU1lOQ0VWRU5UX09QRU4gICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9BU1lOQ0VWRU5ULCAxKQotI2RlZmluZSBIUElfQVNZTkNFVkVOVF9DTE9TRSAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQVNZTkNFVkVOVCwgMikKLSNkZWZpbmUgSFBJX0FTWU5DRVZFTlRfV0FJVCAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0FTWU5DRVZFTlQsIDMpCi0jZGVmaW5lIEhQSV9BU1lOQ0VWRU5UX0dFVENPVU5UICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9BU1lOQ0VWRU5ULCA0KQotI2RlZmluZSBIUElfQVNZTkNFVkVOVF9HRVQgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQVNZTkNFVkVOVCwgNSkKLSNkZWZpbmUgSFBJX0FTWU5DRVZFTlRfU0VOREVWRU5UUyAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0FTWU5DRVZFTlQsIDYpCisKKwlIUElfQVNZTkNFVkVOVF9PUEVOID0gSFBJX0ZVTkNfSUQoQVNZTkNFVkVOVCwgMSksCisJSFBJX0FTWU5DRVZFTlRfQ0xPU0UgPSBIUElfRlVOQ19JRChBU1lOQ0VWRU5ULCAyKSwKKwlIUElfQVNZTkNFVkVOVF9XQUlUID0gSFBJX0ZVTkNfSUQoQVNZTkNFVkVOVCwgMyksCisJSFBJX0FTWU5DRVZFTlRfR0VUQ09VTlQgPSBIUElfRlVOQ19JRChBU1lOQ0VWRU5ULCA0KSwKKwlIUElfQVNZTkNFVkVOVF9HRVQgPSBIUElfRlVOQ19JRChBU1lOQ0VWRU5ULCA1KSwKKwlIUElfQVNZTkNFVkVOVF9TRU5ERVZFTlRTID0gSFBJX0ZVTkNfSUQoQVNZTkNFVkVOVCwgNiksCiAjZGVmaW5lIEhQSV9BU1lOQ0VWRU5UX0ZVTkNUSU9OX0NPVU5UIDYKLS8qIFdBVENILURPRyAqLwotI2RlZmluZSBIUElfV0FUQ0hET0dfT1BFTiAgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfV0FUQ0hET0csIDEpCi0jZGVmaW5lIEhQSV9XQVRDSERPR19TRVRfVElNRSAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9XQVRDSERPRywgMikKLSNkZWZpbmUgSFBJX1dBVENIRE9HX1BJTkcgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1dBVENIRE9HLCAzKQotLyogQ0xPQ0sgKi8KLSNkZWZpbmUgSFBJX0NMT0NLX09QRU4gICAgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX0NMT0NLLCAxKQotI2RlZmluZSBIUElfQ0xPQ0tfU0VUX1RJTUUgICAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfQ0xPQ0ssIDIpCi0jZGVmaW5lIEhQSV9DTE9DS19HRVRfVElNRSAgICAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9DTE9DSywgMykKLS8qIFBST0ZJTEUgKi8KLSNkZWZpbmUgSFBJX1BST0ZJTEVfT1BFTl9BTEwgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1BST0ZJTEUsIDEpCi0jZGVmaW5lIEhQSV9QUk9GSUxFX1NUQVJUX0FMTCAgICAgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9QUk9GSUxFLCAyKQotI2RlZmluZSBIUElfUFJPRklMRV9TVE9QX0FMTCAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfUFJPRklMRSwgMykKLSNkZWZpbmUgSFBJX1BST0ZJTEVfR0VUICAgICAgICAgICAgICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1BST0ZJTEUsIDQpCi0jZGVmaW5lIEhQSV9QUk9GSUxFX0dFVF9JRExFQ09VTlQgICAgICAgSFBJX01BS0VfSU5ERVgoSFBJX09CSl9QUk9GSUxFLCA1KQotI2RlZmluZSBIUElfUFJPRklMRV9HRVRfTkFNRSAgICAgICAgICAgIEhQSV9NQUtFX0lOREVYKEhQSV9PQkpfUFJPRklMRSwgNikKLSNkZWZpbmUgSFBJX1BST0ZJTEVfR0VUX1VUSUxJWkFUSU9OICAgICBIUElfTUFLRV9JTkRFWChIUElfT0JKX1BST0ZJTEUsIDcpCisKKwlIUElfV0FUQ0hET0dfT1BFTiA9IEhQSV9GVU5DX0lEKFdBVENIRE9HLCAxKSwKKwlIUElfV0FUQ0hET0dfU0VUX1RJTUUgPSBIUElfRlVOQ19JRChXQVRDSERPRywgMiksCisJSFBJX1dBVENIRE9HX1BJTkcgPSBIUElfRlVOQ19JRChXQVRDSERPRywgMyksCisKKwlIUElfQ0xPQ0tfT1BFTiA9IEhQSV9GVU5DX0lEKENMT0NLLCAxKSwKKwlIUElfQ0xPQ0tfU0VUX1RJTUUgPSBIUElfRlVOQ19JRChDTE9DSywgMiksCisJSFBJX0NMT0NLX0dFVF9USU1FID0gSFBJX0ZVTkNfSUQoQ0xPQ0ssIDMpLAorCisJSFBJX1BST0ZJTEVfT1BFTl9BTEwgPSBIUElfRlVOQ19JRChQUk9GSUxFLCAxKSwKKwlIUElfUFJPRklMRV9TVEFSVF9BTEwgPSBIUElfRlVOQ19JRChQUk9GSUxFLCAyKSwKKwlIUElfUFJPRklMRV9TVE9QX0FMTCA9IEhQSV9GVU5DX0lEKFBST0ZJTEUsIDMpLAorCUhQSV9QUk9GSUxFX0dFVCA9IEhQSV9GVU5DX0lEKFBST0ZJTEUsIDQpLAorCUhQSV9QUk9GSUxFX0dFVF9JRExFQ09VTlQgPSBIUElfRlVOQ19JRChQUk9GSUxFLCA1KSwKKwlIUElfUFJPRklMRV9HRVRfTkFNRSA9IEhQSV9GVU5DX0lEKFBST0ZJTEUsIDYpLAorCUhQSV9QUk9GSUxFX0dFVF9VVElMSVpBVElPTiA9IEhQSV9GVU5DX0lEKFBST0ZJTEUsIDcpCiAjZGVmaW5lIEhQSV9QUk9GSUxFX0ZVTkNUSU9OX0NPVU5UIDcKLS8qIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLS8qIFBSSVZBVEUgQVRUUklCVVRFUyAqLworfTsKIAogLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLwogLyogU1RSVUNUVVJFUyAqLwpAQCAtNjcyLDE4ICs1NTIsNyBAQAogLyoqIFBDSSBidXMgcmVzb3VyY2UgKi8KIHN0cnVjdCBocGlfcGNpIHsKIAl1MzIgX19pb21lbSAqYXBfbWVtX2Jhc2VbSFBJX01BWF9BREFQVEVSX01FTV9TUEFDRVNdOwotCXN0cnVjdCBwY2lfZGV2ICpwX29zX2RhdGE7Ci0KLSNpZm5kZWYgSFBJNjRCSVQJCS8qIGtlZXAgc3RydWN0dXJlIHNpemUgY29uc3RhbnQgKi8KLQl1MzIgcGFkZGluZ1tIUElfTUFYX0FEQVBURVJfTUVNX1NQQUNFUyArIDFdOwotI2VuZGlmCi0JdTE2IHZlbmRvcl9pZDsKLQl1MTYgZGV2aWNlX2lkOwotCXUxNiBzdWJzeXNfdmVuZG9yX2lkOwotCXUxNiBzdWJzeXNfZGV2aWNlX2lkOwotCXUxNiBidXNfbnVtYmVyOwotCXUxNiBkZXZpY2VfbnVtYmVyOwotCXUzMiBpbnRlcnJ1cHQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiB9OwogCiBzdHJ1Y3QgaHBpX3Jlc291cmNlIHsKQEAgLTcwMiwxMiArNTcxLDEwIEBACiAvKiogRm9ybWF0IGluZm8gdXNlZCBpbnNpZGUgc3RydWN0IGhwaV9tZXNzYWdlCiAgICAgTm90IHRoZSBzYW1lIGFzIHB1YmxpYyBBUEkgc3RydWN0IGhwaV9mb3JtYXQgKi8KIHN0cnVjdCBocGlfbXNnX2Zvcm1hdCB7Ci0JdTMyIHNhbXBsZV9yYXRlOwotCQkJCS8qKjwgMTEwMjUsIDMyMDAwLCA0NDEwMCAuLi4gKi8KLQl1MzIgYml0X3JhdGU7CSAgICAgIC8qKjwgZm9yIE1QRUcgKi8KLQl1MzIgYXR0cmlidXRlczsKLQkJCQkvKio8IFN0ZXJlby9Kb2ludFN0ZXJlby9Nb25vICovCi0JdTE2IGNoYW5uZWxzOwkgICAgICAvKio8IDEsMi4uLiwgKG9yIGFuY2lsbGFyeSBtb2RlIG9yIGlkbGUgYml0ICovCisJdTMyIHNhbXBsZV9yYXRlOyAvKio8IDExMDI1LCAzMjAwMCwgNDQxMDAgZXRjLiAqLworCXUzMiBiaXRfcmF0ZTsgLyoqPCBmb3IgTVBFRyAqLworCXUzMiBhdHRyaWJ1dGVzOwkvKio8IHN0ZXJlby9qb2ludF9zdGVyZW8vbW9ubyAqLworCXUxNiBjaGFubmVsczsgLyoqPCAxLDIuLi4sIChvciBhbmNpbGxhcnkgbW9kZSBvciBpZGxlIGJpdCAqLwogCXUxNiBmb3JtYXQ7IC8qKjwgSFBJX0ZPUk1BVF9QQ00xNiwgX01QRUcgZXRjLiBzZWUgXHJlZiBIUElfRk9STUFUUy4gKi8KIH07CiAKQEAgLTc0Miw3ICs2MDksNyBAQAogc3RydWN0IGhwaV9idWZmZXIgewogICAvKiogcGxhY2Vob2RlciBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSAoc2VlIGR3QnVmZmVyU2l6ZSkgKi8KIAlzdHJ1Y3QgaHBpX21zZ19mb3JtYXQgcmVzZXJ2ZWQ7Ci0JdTMyIGNvbW1hbmQ7CS8qKjwgSFBJX0JVRkZFUl9DTURfeHh4Ki8KKwl1MzIgY29tbWFuZDsgLyoqPCBIUElfQlVGRkVSX0NNRF94eHgqLwogCXUzMiBwY2lfYWRkcmVzczsgLyoqPCBQQ0kgcGh5c2ljYWwgYWRkcmVzcyBvZiBidWZmZXIgZm9yIERTUCBETUEgKi8KIAl1MzIgYnVmZmVyX3NpemU7IC8qKjwgbXVzdCBsaW5lIHVwIHdpdGggZGF0YV9zaXplIG9mIEhQSV9EQVRBKi8KIH07CkBAIC03NzcsMzAgKzY0NCwyNSBAQAogCiBzdHJ1Y3QgaHBpX3N1YnN5c19yZXMgewogCXUzMiB2ZXJzaW9uOwotCXUzMiBkYXRhOwkJLyogdXNlZCB0byByZXR1cm4gZXh0ZW5kZWQgdmVyc2lvbiAqLwotCXUxNiBudW1fYWRhcHRlcnM7CS8qIG51bWJlciBvZiBhZGFwdGVycyAqLworCXUzMiBkYXRhOwkJLyogZXh0ZW5kZWQgdmVyc2lvbiAqLworCXUxNiBudW1fYWRhcHRlcnM7CiAJdTE2IGFkYXB0ZXJfaW5kZXg7Ci0JdTE2IGF3X2FkYXB0ZXJfbGlzdFtIUElfTUFYX0FEQVBURVJTXTsKLX07Ci0KLXN0cnVjdCBocGlfYWRhcHRlcl9tc2cgewotCXUzMiBhZGFwdGVyX21vZGU7CS8qIGFkYXB0ZXIgbW9kZSAqLwotCXUxNiBhc3NlcnRfaWQ7CQkvKiBhc3NlcnQgbnVtYmVyIGZvciAidGVzdCBhc3NlcnQiIGNhbGwKLQkJCQkgICBvYmplY3RfaW5kZXggZm9yIGZpbmQgb2JqZWN0IGNhbGwKLQkJCQkgICBxdWVyeV9vcl9zZXQgZm9yIGhwaV9hZGFwdGVyX3NldF9tb2RlX2V4KCkgKi8KLQl1MTYgb2JqZWN0X3R5cGU7CS8qIGZvciBhZGFwdGVyIGZpbmQgb2JqZWN0IGNhbGwgKi8KKwl1MTYgYWRhcHRlcl90eXBlOworCXUxNiBwYWQxNjsKIH07CiAKIHVuaW9uIGhwaV9hZGFwdGVyeF9tc2cgewotCXN0cnVjdCBocGlfYWRhcHRlcl9tc2cgYWRhcHRlcjsKIAlzdHJ1Y3QgewotCQl1MzIgb2Zmc2V0OwotCX0gcXVlcnlfZmxhc2g7CisJCXUzMiBkc3BfYWRkcmVzczsKKwkJdTMyIGNvdW50X2J5dGVzOworCX0gZGVidWdfcmVhZDsKIAlzdHJ1Y3QgewotCQl1MzIgb2Zmc2V0OwotCQl1MzIgbGVuZ3RoOwotCQl1MzIga2V5OwotCX0gc3RhcnRfZmxhc2g7CisJCXUzMiBhZGFwdGVyX21vZGU7CisJCXUxNiBxdWVyeV9vcl9zZXQ7CisJfSBtb2RlOworCXN0cnVjdCB7CisJCXUxNiBpbmRleDsKKwl9IG1vZHVsZV9pbmZvOwogCXN0cnVjdCB7CiAJCXUzMiBjaGVja3N1bTsKIAkJdTE2IHNlcXVlbmNlOwpAQCAtODA5LDI4ICs2NzEsNDEgQEAKIAkJdTE2IHVudXNlZDsKIAl9IHByb2dyYW1fZmxhc2g7CiAJc3RydWN0IHsKLQkJdTE2IHByb3BlcnR5OwotCQl1MTYgcGFyYW1ldGVyMTsKLQkJdTE2IHBhcmFtZXRlcjI7Ci0JfSBwcm9wZXJ0eV9zZXQ7Ci0Jc3RydWN0IHsKIAkJdTE2IGluZGV4OwogCQl1MTYgd2hhdDsKIAkJdTE2IHByb3BlcnR5X2luZGV4OwogCX0gcHJvcGVydHlfZW51bTsKIAlzdHJ1Y3QgewotCQl1MTYgaW5kZXg7Ci0JfSBtb2R1bGVfaW5mbzsKKwkJdTE2IHByb3BlcnR5OworCQl1MTYgcGFyYW1ldGVyMTsKKwkJdTE2IHBhcmFtZXRlcjI7CisJfSBwcm9wZXJ0eV9zZXQ7CiAJc3RydWN0IHsKLQkJdTMyIGRzcF9hZGRyZXNzOwotCQl1MzIgY291bnRfYnl0ZXM7Ci0JfSBkZWJ1Z19yZWFkOworCQl1MzIgb2Zmc2V0OworCX0gcXVlcnlfZmxhc2g7CisJc3RydWN0IHsKKwkJdTMyIHBhZDMyOworCQl1MTYga2V5MTsKKwkJdTE2IGtleTI7CisJfSByZXN0YXJ0OworCXN0cnVjdCB7CisJCXUzMiBvZmZzZXQ7CisJCXUzMiBsZW5ndGg7CisJCXUzMiBrZXk7CisJfSBzdGFydF9mbGFzaDsKKwlzdHJ1Y3QgeworCQl1MzIgcGFkMzI7CisJCXUxNiB2YWx1ZTsKKwl9IHRlc3RfYXNzZXJ0OworCXN0cnVjdCB7CisJCXUzMiB5ZXM7CisJfSBpcnFfcXVlcnk7CiB9OwogCiBzdHJ1Y3QgaHBpX2FkYXB0ZXJfcmVzIHsKIAl1MzIgc2VyaWFsX251bWJlcjsKIAl1MTYgYWRhcHRlcl90eXBlOwotCXUxNiBhZGFwdGVyX2luZGV4OwkvKiBpcyB0aGlzIG5lZWRlZD8gYWxzbyB1c2VkIGZvciBkc3BfaW5kZXggKi8KKwl1MTYgYWRhcHRlcl9pbmRleDsKIAl1MTYgbnVtX2luc3RyZWFtczsKIAl1MTYgbnVtX291dHN0cmVhbXM7CiAJdTE2IG51bV9taXhlcnM7CkBAIC04MzksMTIgKzcxNCwxOCBAQAogfTsKIAogdW5pb24gaHBpX2FkYXB0ZXJ4X3JlcyB7Ci0Jc3RydWN0IGhwaV9hZGFwdGVyX3JlcyBhZGFwdGVyOworCXN0cnVjdCBocGlfYWRhcHRlcl9yZXMgaW5mbzsKIAlzdHJ1Y3QgewotCQl1MzIgY2hlY2tzdW07Ci0JCXUzMiBsZW5ndGg7Ci0JCXUzMiB2ZXJzaW9uOwotCX0gcXVlcnlfZmxhc2g7CisJCXUzMiBwMTsKKwkJdTE2IGNvdW50OworCQl1MTYgZHNwX2luZGV4OworCQl1MzIgcDI7CisJCXUzMiBkc3BfbXNnX2FkZHI7CisJCWNoYXIgc3pfbWVzc2FnZVtIUElfU1RSSU5HX0xFTl07CisJfSBhc3NlcnQ7CisJc3RydWN0IHsKKwkJdTMyIGFkYXB0ZXJfbW9kZTsKKwl9IG1vZGU7CiAJc3RydWN0IHsKIAkJdTE2IHNlcXVlbmNlOwogCX0gcHJvZ3JhbV9mbGFzaDsKQEAgLTg1Miw2ICs3MzMsMTQgQEAKIAkJdTE2IHBhcmFtZXRlcjE7CiAJCXUxNiBwYXJhbWV0ZXIyOwogCX0gcHJvcGVydHlfZ2V0OworCXN0cnVjdCB7CisJCXUzMiBjaGVja3N1bTsKKwkJdTMyIGxlbmd0aDsKKwkJdTMyIHZlcnNpb247CisJfSBxdWVyeV9mbGFzaDsKKwlzdHJ1Y3QgeworCQl1MzIgeWVzOworCX0gaXJxX3F1ZXJ5OwogfTsKIAogc3RydWN0IGhwaV9zdHJlYW1fbXNnIHsKQEAgLTg2Myw2ICs3NTIsNyBAQAogCQl1MzIgdGltZV9zY2FsZTsKIAkJc3RydWN0IGhwaV9idWZmZXIgYnVmZmVyOwogCQlzdHJ1Y3QgaHBpX3N0cmVhbWlkIHN0cmVhbTsKKwkJdTMyIHRocmVzaG9sZF9ieXRlczsKIAl9IHU7CiB9OwogCkBAIC05MTEsNyArODAxLDcgQEAKIHN0cnVjdCBocGlfbWl4ZXJfbXNnIHsKIAl1MTYgY29udHJvbF9pbmRleDsKIAl1MTYgY29udHJvbF90eXBlOwkvKiA9IEhQSV9DT05UUk9MX01FVEVSIF9WT0xVTUUgZXRjICovCi0JdTE2IHBhZGRpbmcxOwkJLyogbWFpbnRhaW4gYWxpZ25tZW50IG9mIHN1YnNlcXVlbnQgZmllbGRzICovCisJdTE2IHBhZGRpbmcxOwkJLyogTWFpbnRhaW4gYWxpZ25tZW50IG9mIHN1YnNlcXVlbnQgZmllbGRzICovCiAJdTE2IG5vZGVfdHlwZTE7CQkvKiA9IEhQSV9TT1VSQ0VOT0RFX0xJTkVJTiBldGMgKi8KIAl1MTYgbm9kZV9pbmRleDE7CS8qID0gMC4uTiAqLwogCXUxNiBub2RlX3R5cGUyOwpAQCAtOTQ5LDYgKzgzOSwxMSBAQAogCQl1MzIgcF9kYXRhOwkvKiBwb2ludGVyIHRvIGRhdGEgYXJyYXkgKi8KIAkJdTE2IG1vcmVfdG9fZG87CS8qIGluZGljYXRlcyBpZiB0aGVyZSBpcyBtb3JlIHRvIGRvICovCiAJfSBnY2FiaTsKKwlzdHJ1Y3QgeworCQl1MzIgdG90YWxfY29udHJvbHM7CS8qIGNvdW50IG9mIGNvbnRyb2xzIGluIHRoZSBtaXhlciAqLworCQl1MzIgY2FjaGVfY29udHJvbHM7CS8qIGNvdW50IG9mIGNvbnRyb2xzIGluIHRoZSBjYWMgKi8KKwkJdTMyIGNhY2hlX2J5dGVzOwkvKiBzaXplIG9mIGNhY2hlICovCisJfSBjYWNoZV9pbmZvOwogfTsKIAogc3RydWN0IGhwaV9jb250cm9sX21zZyB7CkBAIC0xMDAwLDEyICs4OTUsMTYgQEAKIAkJdTMyIGJhbmQ7CiAJCXUzMiBmcmVxdWVuY3k7CiAJCXUzMiBnYWluOwotCQl1MzIgbGV2ZWw7CiAJCXUzMiBkZWVtcGhhc2lzOwogCQlzdHJ1Y3QgewogCQkJdTMyIGRhdGFbMl07CiAJCQl1MzIgYkxFUjsKIAkJfSByZHM7CisJCXNob3J0IHNfbGV2ZWw7CisJCXN0cnVjdCB7CisJCQl1MTYgdmFsdWU7CisJCQl1MTYgbWFzazsKKwkJfSBzdGF0dXM7CiAJfSB0dW5lcjsKIAlzdHJ1Y3QgewogCQljaGFyIHN6X2RhdGFbOF07CkBAIC0xMTc4LDExICsxMDc3LDExIEBACiB9OwogCiBzdHJ1Y3QgaHBpX3Byb2ZpbGVfcmVzX3RpbWUgewotCXUzMiBtaWNyb19zZWNvbmRzOworCXUzMiB0b3RhbF90aWNrX2NvdW50OwogCXUzMiBjYWxsX2NvdW50OwotCXUzMiBtYXhfbWljcm9fc2Vjb25kczsKLQl1MzIgbWluX21pY3JvX3NlY29uZHM7Ci0JdTE2IHNlY29uZHM7CisJdTMyIG1heF90aWNrX2NvdW50OworCXUzMiB0aWNrc19wZXJfbWlsbGlzZWNvbmQ7CisJdTE2IHByb2ZpbGVfaW50ZXJ2YWw7CiB9OwogCiBzdHJ1Y3QgaHBpX3Byb2ZpbGVfcmVzX25hbWUgewpAQCAtMTIxOCw3ICsxMTE3LDYgQEAKIAl1MTYgb2JqX2luZGV4OwkJLyogICovCiAJdW5pb24gewogCQlzdHJ1Y3QgaHBpX3N1YnN5c19tc2cgczsKLQkJc3RydWN0IGhwaV9hZGFwdGVyX21zZyBhOwogCQl1bmlvbiBocGlfYWRhcHRlcnhfbXNnIGF4OwogCQlzdHJ1Y3QgaHBpX3N0cmVhbV9tc2cgZDsKIAkJc3RydWN0IGhwaV9taXhlcl9tc2cgbTsKQEAgLTEyMzksNyArMTEzNyw3IEBACiB9OwogCiAjZGVmaW5lIEhQSV9NRVNTQUdFX1NJWkVfQllfT0JKRUNUIHsgXAotCXNpemVvZihzdHJ1Y3QgaHBpX21lc3NhZ2VfaGVhZGVyKSAsICAgLyogZGVmYXVsdCwgbm8gb2JqZWN0IHR5cGUgMCAqLyBcCisJc2l6ZW9mKHN0cnVjdCBocGlfbWVzc2FnZV9oZWFkZXIpICwgICAvKiBEZWZhdWx0LCBubyBvYmplY3QgdHlwZSAwICovIFwKIAlzaXplb2Yoc3RydWN0IGhwaV9tZXNzYWdlX2hlYWRlcikgKyBzaXplb2Yoc3RydWN0IGhwaV9zdWJzeXNfbXNnKSxcCiAJc2l6ZW9mKHN0cnVjdCBocGlfbWVzc2FnZV9oZWFkZXIpICsgc2l6ZW9mKHVuaW9uIGhwaV9hZGFwdGVyeF9tc2cpLFwKIAlzaXplb2Yoc3RydWN0IGhwaV9tZXNzYWdlX2hlYWRlcikgKyBzaXplb2Yoc3RydWN0IGhwaV9zdHJlYW1fbXNnKSxcCkBAIC0xMjU2LDYgKzExNTQsMTEgQEAKIAlzaXplb2Yoc3RydWN0IGhwaV9tZXNzYWdlX2hlYWRlcikgKyBzaXplb2Yoc3RydWN0IGhwaV9hc3luY19tc2cpIFwKIH0KIAorLyoKK05vdGUgdGhhdCB0aGUgd1NwZWNpZmljRXJyb3IgZXJyb3IgZmllbGQgc2hvdWxkIGJlIGluc3BlY3RlZCBhbmQgcG90ZW50aWFsbHkKK3JlcG9ydGVkIHdoZW5ldmVyIEhQSV9FUlJPUl9EU1BfQ09NTVVOSUNBVElPTiBvciBIUElfRVJST1JfRFNQX0JPT1RMT0FEIGlzCityZXR1cm5lZCBpbiB3RXJyb3IuCisqLwogc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIgewogCXUxNiBzaXplOwogCXU4IHR5cGU7CQkvKiBIUElfVFlQRV9SRVNQT05TRSAgKi8KQEAgLTEyNzcsNyArMTE4MCw2IEBACiAJdTE2IHNwZWNpZmljX2Vycm9yOwkvKiBhZGFwdGVyIHNwZWNpZmljIGVycm9yICovCiAJdW5pb24gewogCQlzdHJ1Y3QgaHBpX3N1YnN5c19yZXMgczsKLQkJc3RydWN0IGhwaV9hZGFwdGVyX3JlcyBhOwogCQl1bmlvbiBocGlfYWRhcHRlcnhfcmVzIGF4OwogCQlzdHJ1Y3QgaHBpX3N0cmVhbV9yZXMgZDsKIAkJc3RydWN0IGhwaV9taXhlcl9yZXMgbTsKQEAgLTEyOTcsNyArMTE5OSw3IEBACiB9OwogCiAjZGVmaW5lIEhQSV9SRVNQT05TRV9TSVpFX0JZX09CSkVDVCB7IFwKLQlzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpICwvKiBkZWZhdWx0LCBubyBvYmplY3QgdHlwZSAwICovIFwKKwlzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpICwvKiBEZWZhdWx0LCBubyBvYmplY3QgdHlwZSAwICovIFwKIAlzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpICsgc2l6ZW9mKHN0cnVjdCBocGlfc3Vic3lzX3JlcyksXAogCXNpemVvZihzdHJ1Y3QgaHBpX3Jlc3BvbnNlX2hlYWRlcikgKyBzaXplb2YodW5pb24gIGhwaV9hZGFwdGVyeF9yZXMpLFwKIAlzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpICsgc2l6ZW9mKHN0cnVjdCBocGlfc3RyZWFtX3JlcyksXApAQCAtMTMxNCw3ICsxMjE2LDcgQEAKIAlzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpICsgc2l6ZW9mKHN0cnVjdCBocGlfYXN5bmNfcmVzKSBcCiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKiB2ZXJzaW9uIDEgbWVzc2FnZS9yZXNwb25zZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiB2ZXJzaW9uIDEgbWVzc2FnZS9yZXNwb25zZSAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgSFBJTkVUX0VUSEVSTkVUX0RBVEFfU0laRSAoMTUwMCkKICNkZWZpbmUgSFBJTkVUX0lQX0hEUl9TSVpFICgyMCkKICNkZWZpbmUgSFBJTkVUX0lQX0RBVEFfU0laRSAoSFBJTkVUX0VUSEVSTkVUX0RBVEFfU0laRSAtIEhQSU5FVF9JUF9IRFJfU0laRSkKQEAgLTEzOTQsNiArMTI5NiwxNyBAQAogCQlzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIpIC0gc2l6ZW9mKHUxNildOwogfTsKIAorc3RydWN0IGhwaV9tc2dfYWRhcHRlcl9kZWJ1Z19yZWFkIHsKKwlzdHJ1Y3QgaHBpX21lc3NhZ2VfaGVhZGVyIGg7CisJdTMyIGRzcF9hZGRyZXNzOworCXUzMiBjb3VudF9ieXRlczsKK307CisKK3N0cnVjdCBocGlfcmVzX2FkYXB0ZXJfZGVidWdfcmVhZCB7CisJc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIgaDsKKwl1OCBieXRlc1syNTZdOworfTsKKwogI2lmIDEKICNkZWZpbmUgaHBpX21lc3NhZ2VfaGVhZGVyX3YxIGhwaV9tZXNzYWdlX2hlYWRlcgogI2RlZmluZSBocGlfcmVzcG9uc2VfaGVhZGVyX3YxIGhwaV9yZXNwb25zZV9oZWFkZXIKQEAgLTE0MTQsMjMgKzEzMjcsMTAgQEAKIH07CiAjZW5kaWYKIAotLyogU1RSViBIUEkgUGFja2V0ICovCi1zdHJ1Y3QgaHBpX21zZ19zdHJ2IHsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2VfaGVhZGVyIGg7Ci0Jc3RydWN0IGhwaV9lbnRpdHkgc3RydjsKLX07Ci0KLXN0cnVjdCBocGlfcmVzX3N0cnYgewotCXN0cnVjdCBocGlfcmVzcG9uc2VfaGVhZGVyIGg7Ci0Jc3RydWN0IGhwaV9lbnRpdHkgc3RydjsKLX07Ci0jZGVmaW5lIE1JTl9TVFJWX1BBQ0tFVF9TSVpFIHNpemVvZihzdHJ1Y3QgaHBpX3Jlc19zdHJ2KQotCiBzdHJ1Y3QgaHBpX21zZ19wYXlsb2FkX3YwIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2VfaGVhZGVyIGg7CiAJdW5pb24gewogCQlzdHJ1Y3QgaHBpX3N1YnN5c19tc2cgczsKLQkJc3RydWN0IGhwaV9hZGFwdGVyX21zZyBhOwogCQl1bmlvbiBocGlfYWRhcHRlcnhfbXNnIGF4OwogCQlzdHJ1Y3QgaHBpX3N0cmVhbV9tc2cgZDsKIAkJc3RydWN0IGhwaV9taXhlcl9tc2cgbTsKQEAgLTE0NTEsNyArMTM1MSw2IEBACiAJc3RydWN0IGhwaV9yZXNwb25zZV9oZWFkZXIgaDsKIAl1bmlvbiB7CiAJCXN0cnVjdCBocGlfc3Vic3lzX3JlcyBzOwotCQlzdHJ1Y3QgaHBpX2FkYXB0ZXJfcmVzIGE7CiAJCXVuaW9uIGhwaV9hZGFwdGVyeF9yZXMgYXg7CiAJCXN0cnVjdCBocGlfc3RyZWFtX3JlcyBkOwogCQlzdHJ1Y3QgaHBpX21peGVyX3JlcyBtOwpAQCAtMTQ3MSwxMyArMTM3MCwxMyBAQAogdW5pb24gaHBpX21lc3NhZ2VfYnVmZmVyX3YxIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgbTA7CS8qIHZlcnNpb24gMCAqLwogCXN0cnVjdCBocGlfbWVzc2FnZV9oZWFkZXJfdjEgaDsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltIUElfTUFYX1BBWUxPQURfU0laRV07CisJdTggYnVmW0hQSV9NQVhfUEFZTE9BRF9TSVpFXTsKIH07CiAKIHVuaW9uIGhwaV9yZXNwb25zZV9idWZmZXJfdjEgewogCXN0cnVjdCBocGlfcmVzcG9uc2UgcjA7CS8qIHZlcnNpb24gMCAqLwogCXN0cnVjdCBocGlfcmVzcG9uc2VfaGVhZGVyX3YxIGg7Ci0JdW5zaWduZWQgY2hhciBidWZbSFBJX01BWF9QQVlMT0FEX1NJWkVdOworCXU4IGJ1ZltIUElfTUFYX1BBWUxPQURfU0laRV07CiB9OwogCiBjb21waWxlX3RpbWVfYXNzZXJ0KChzaXplb2YodW5pb24gaHBpX21lc3NhZ2VfYnVmZmVyX3YxKSA8PQpAQCAtMTQ5OSw2ICsxMzk4LDExIEBACiAvKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCiAvKiBkZWNsYXJhdGlvbnMgZm9yIGNvbnRyb2wgY2FjaGluZyAoaW50ZXJuYWwgdG8gSFBJPC0+RFNQIGludGVyYWN0aW9uKSAgICAgICovCiAKKy8qKiBpbmRpY2F0ZXMgYSBjYWNoZWQgdTE2IHZhbHVlIGlzIGludmFsaWQuICovCisjZGVmaW5lIEhQSV9DQUNIRV9JTlZBTElEX1VJTlQxNiAweEZGRkYKKy8qKiBpbmRpY2F0ZXMgYSBjYWNoZWQgc2hvcnQgdmFsdWUgaXMgaW52YWxpZC4gKi8KKyNkZWZpbmUgSFBJX0NBQ0hFX0lOVkFMSURfU0hPUlQgLTMyNzY4CisKIC8qKiBBIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgKHBhcnQgb2YpIGEgY29udHJvbHMgc3RhdGUuCiBVc2VkIGZvciBlZmZpY2llbnQgdHJhbnNmZXIgb2YgdGhlIGNvbnRyb2wgc3RhdGUKIGJldHdlZW4gRFNQIGFuZCBob3N0IG9yIGFjcm9zcyBhIG5ldHdvcmsKQEAgLTE1MTIsNTggKzE0MTYsMTA0IEBACiAJdTE2IGNvbnRyb2xfaW5kZXg7CiB9OwogCi1zdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfc2luZ2xlIHsKK3N0cnVjdCBocGlfY29udHJvbF9jYWNoZV92b2wgewogCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvIGk7CisJc2hvcnQgYW5fbG9nWzJdOworCXVuc2lnbmVkIHNob3J0IGZsYWdzOworCWNoYXIgcGFkZGluZ1syXTsKK307CisKK3N0cnVjdCBocGlfY29udHJvbF9jYWNoZV9tZXRlciB7CisJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX2luZm8gaTsKKwlzaG9ydCBhbl9sb2dfcGVha1syXTsKKwlzaG9ydCBhbl9sb2dSTVNbMl07Cit9OworCitzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfY2hhbm5lbG1vZGUgeworCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvIGk7CisJdTE2IG1vZGU7CisJY2hhciB0ZW1wX3BhZGRpbmdbNl07Cit9OworCitzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfbXV4IHsKKwlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyBpOworCXUxNiBzb3VyY2Vfbm9kZV90eXBlOworCXUxNiBzb3VyY2Vfbm9kZV9pbmRleDsKKwljaGFyIHRlbXBfcGFkZGluZ1s0XTsKK307CisKK3N0cnVjdCBocGlfY29udHJvbF9jYWNoZV9sZXZlbCB7CisJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX2luZm8gaTsKKwlzaG9ydCBhbl9sb2dbMl07CisJY2hhciB0ZW1wX3BhZGRpbmdbNF07Cit9OworCitzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfdHVuZXIgeworCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvIGk7CisJdTMyIGZyZXFfaW5rX2h6OworCXUxNiBiYW5kOworCXNob3J0IHNfbGV2ZWxfYXZnOworfTsKKworc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX2FlczNyeCB7CisJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX2luZm8gaTsKKwl1MzIgZXJyb3Jfc3RhdHVzOworCXUzMiBmb3JtYXQ7Cit9OworCitzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfYWVzM3R4IHsKKwlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyBpOworCXUzMiBmb3JtYXQ7CisJY2hhciB0ZW1wX3BhZGRpbmdbNF07Cit9OworCitzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfdG9uZWRldGVjdG9yIHsKKwlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyBpOworCXUxNiBzdGF0ZTsKKwljaGFyIHRlbXBfcGFkZGluZ1s2XTsKK307CisKK3N0cnVjdCBocGlfY29udHJvbF9jYWNoZV9zaWxlbmNlZGV0ZWN0b3IgeworCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvIGk7CisJdTMyIHN0YXRlOworCWNoYXIgdGVtcF9wYWRkaW5nWzRdOworfTsKKworc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX3NhbXBsZWNsb2NrIHsKKwlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyBpOworCXUxNiBzb3VyY2U7CisJdTE2IHNvdXJjZV9pbmRleDsKKwl1MzIgc2FtcGxlX3JhdGU7Cit9OworCitzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfbWljcm9waG9uZSB7CisJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX2luZm8gaTsKKwl1MTYgcGhhbnRvbV9zdGF0ZTsKKwljaGFyIHRlbXBfcGFkZGluZ1s2XTsKK307CisKK3N0cnVjdCBocGlfY29udHJvbF9jYWNoZV9nZW5lcmljIHsKKwlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyBpOworCXUzMiBkdzE7CisJdTMyIGR3MjsKK307CisKK3N0cnVjdCBocGlfY29udHJvbF9jYWNoZV9zaW5nbGUgewogCXVuaW9uIHsKLQkJc3RydWN0IHsJLyogdm9sdW1lICovCi0JCQlzaG9ydCBhbl9sb2dbMl07Ci0JCX0gdjsKLQkJc3RydWN0IHsJLyogcGVhayBtZXRlciAqLwotCQkJc2hvcnQgYW5fbG9nX3BlYWtbMl07Ci0JCQlzaG9ydCBhbl9sb2dSTVNbMl07Ci0JCX0gcDsKLQkJc3RydWN0IHsJLyogY2hhbm5lbCBtb2RlICovCi0JCQl1MTYgbW9kZTsKLQkJfSBtOwotCQlzdHJ1Y3QgewkvKiBtdWx0aXBsZXhlciAqLwotCQkJdTE2IHNvdXJjZV9ub2RlX3R5cGU7Ci0JCQl1MTYgc291cmNlX25vZGVfaW5kZXg7Ci0JCX0geDsKLQkJc3RydWN0IHsJLyogbGV2ZWwvdHJpbSAqLwotCQkJc2hvcnQgYW5fbG9nWzJdOwotCQl9IGw7Ci0JCXN0cnVjdCB7CS8qIHR1bmVyIC0gcGFydGlhbCBjYWNoaW5nLgotCQkJCSAgIHNvbWUgYXR0cmlidXRlcyBnbyB0byB0aGUgRFNQLiAqLwotCQkJdTMyIGZyZXFfaW5rX2h6OwotCQkJdTE2IGJhbmQ7Ci0JCQl1MTYgbGV2ZWw7Ci0JCX0gdDsKLQkJc3RydWN0IHsJLyogQUVTRUJVIHJ4IHN0YXR1cyAqLwotCQkJdTMyIGVycm9yX3N0YXR1czsKLQkJCXUzMiBzb3VyY2U7Ci0JCX0gYWVzM3J4OwotCQlzdHJ1Y3QgewkvKiBBRVNFQlUgdHggKi8KLQkJCXUzMiBmb3JtYXQ7Ci0JCX0gYWVzM3R4OwotCQlzdHJ1Y3QgewkvKiB0b25lIGRldGVjdG9yICovCi0JCQl1MTYgc3RhdGU7Ci0JCX0gdG9uZTsKLQkJc3RydWN0IHsJLyogc2lsZW5jZSBkZXRlY3RvciAqLwotCQkJdTMyIHN0YXRlOwotCQkJdTMyIGNvdW50OwotCQl9IHNpbGVuY2U7Ci0JCXN0cnVjdCB7CS8qIHNhbXBsZSBjbG9jayAqLwotCQkJdTE2IHNvdXJjZTsKLQkJCXUxNiBzb3VyY2VfaW5kZXg7Ci0JCQl1MzIgc2FtcGxlX3JhdGU7Ci0JCX0gY2xrOwotCQlzdHJ1Y3QgewkvKiBtaWNyb3Bob25lIGNvbnRyb2wgKi8KLQkJCXUxNiBzdGF0ZTsKLQkJfSBwaGFudG9tX3Bvd2VyOwotCQlzdHJ1Y3QgewkvKiBnZW5lcmljIGNvbnRyb2wgKi8KLQkJCXUzMiBkdzE7Ci0JCQl1MzIgZHcyOwotCQl9IGc7CisJCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvIGk7CisJCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV92b2wgdm9sOworCQlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfbWV0ZXIgbWV0ZXI7CisJCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9jaGFubmVsbW9kZSBtb2RlOworCQlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfbXV4IG11eDsKKwkJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX2xldmVsIGxldmVsOworCQlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfdHVuZXIgdHVuZXI7CisJCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9hZXMzcnggYWVzM3J4OworCQlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfYWVzM3R4IGFlczN0eDsKKwkJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX3RvbmVkZXRlY3RvciB0b25lOworCQlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfc2lsZW5jZWRldGVjdG9yIHNpbGVuY2U7CisJCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9zYW1wbGVjbG9jayBjbGs7CisJCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9taWNyb3Bob25lIG1pY3JvcGhvbmU7CisJCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9nZW5lcmljIGdlbmVyaWM7CiAJfSB1OwogfTsKIApAQCAtMTU4MCw4ICsxNTMwLDcgQEAKIAl1MzIgdHJhZmZpY19hbm91bmNlbWVudDsKIH07CiAKLS8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCi0vKiBkZWNsYXJhdGlvbnMgZm9yIDJeTiBzaXplZCBGSUZPIGJ1ZmZlciAoaW50ZXJuYWwgdG8gSFBJPC0+RFNQIGludGVyYWN0aW9uKSAqLworLyogMl5OIHNpemVkIEZJRk8gYnVmZmVyIChpbnRlcm5hbCB0byBIUEk8LT5EU1AgaW50ZXJhY3Rpb24pICovCiBzdHJ1Y3QgaHBpX2ZpZm9fYnVmZmVyIHsKIAl1MzIgc2l6ZTsKIAl1MzIgZFNQX2luZGV4OwpAQCAtMTYwNiwyNSArMTU1NSwxOCBAQAogLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLwogCiAvKiBtYWluIEhQSSBlbnRyeSBwb2ludCAqLwotaHBpX2hhbmRsZXJfZnVuYyBocGlfc2VuZF9yZWN2OwotCi0vKiBVRFAgbWVzc2FnZSAqLwotdm9pZCBocGlfc2VuZF9yZWN2VURQKHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIsCi0JY29uc3QgdW5zaWduZWQgaW50IHRpbWVvdXQpOwordm9pZCBocGlfc2VuZF9yZWN2KHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpOwogCiAvKiB1c2VkIGluIFBuUCBPUy9kcml2ZXIgKi8KLXUxNiBocGlfc3Vic3lzX2NyZWF0ZV9hZGFwdGVyKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHN0cnVjdCBocGlfcmVzb3VyY2UgKnBfcmVzb3VyY2UsIHUxNiAqcHdfYWRhcHRlcl9pbmRleCk7Cit1MTYgaHBpX3N1YnN5c19jcmVhdGVfYWRhcHRlcihjb25zdCBzdHJ1Y3QgaHBpX3Jlc291cmNlICpwX3Jlc291cmNlLAorCXUxNiAqcHdfYWRhcHRlcl9pbmRleCk7CiAKLXUxNiBocGlfc3Vic3lzX2RlbGV0ZV9hZGFwdGVyKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUxNiBhZGFwdGVyX2luZGV4KTsKK3UxNiBocGlfc3Vic3lzX2RlbGV0ZV9hZGFwdGVyKHUxNiBhZGFwdGVyX2luZGV4KTsKIAotdTE2IGhwaV9vdXRzdHJlYW1faG9zdF9idWZmZXJfZ2V0X2luZm8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1OCAqKnBwX2J1ZmZlciwKK3UxNiBocGlfb3V0c3RyZWFtX2hvc3RfYnVmZmVyX2dldF9pbmZvKHUzMiBoX291dHN0cmVhbSwgdTggKipwcF9idWZmZXIsCiAJc3RydWN0IGhwaV9ob3N0YnVmZmVyX3N0YXR1cyAqKnBwX3N0YXR1cyk7CiAKLXUxNiBocGlfaW5zdHJlYW1faG9zdF9idWZmZXJfZ2V0X2luZm8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfaW5zdHJlYW0sIHU4ICoqcHBfYnVmZmVyLAordTE2IGhwaV9pbnN0cmVhbV9ob3N0X2J1ZmZlcl9nZXRfaW5mbyh1MzIgaF9pbnN0cmVhbSwgdTggKipwcF9idWZmZXIsCiAJc3RydWN0IGhwaV9ob3N0YnVmZmVyX3N0YXR1cyAqKnBwX3N0YXR1cyk7CiAKIHUxNiBocGlfYWRhcHRlcl9yZXN0YXJ0KHUxNiBhZGFwdGVyX2luZGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWNtbi5jCmluZGV4IGQ2N2Y0ZDMuLjNlOWM1YzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGljbW4uYwpAQCAtMjYsNiArMjYsOCBAQAogCiAjaW5jbHVkZSAiaHBpX2ludGVybmFsLmgiCiAjaW5jbHVkZSAiaHBpZGVidWcuaCIKKyNpbmNsdWRlICJocGltc2dpbml0LmgiCisKICNpbmNsdWRlICJocGljbW4uaCIKIAogc3RydWN0IGhwaV9hZGFwdGVyc19saXN0IHsKQEAgLTQzLDE0ICs0NSwyNCBAQAogKiovCiB1MTYgaHBpX3ZhbGlkYXRlX3Jlc3BvbnNlKHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7Ci0JdTE2IGVycm9yID0gMDsKKwlpZiAocGhyLT50eXBlICE9IEhQSV9UWVBFX1JFU1BPTlNFKSB7CisJCUhQSV9ERUJVR19MT0coRVJST1IsICJoZWFkZXIgdHlwZSAlZCBpbnZhbGlkXG4iLCBwaHItPnR5cGUpOworCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfUkVTUE9OU0U7CisJfQogCi0JaWYgKChwaHItPnR5cGUgIT0gSFBJX1RZUEVfUkVTUE9OU0UpCi0JCXx8IChwaHItPm9iamVjdCAhPSBwaG0tPm9iamVjdCkKLQkJfHwgKHBoci0+ZnVuY3Rpb24gIT0gcGhtLT5mdW5jdGlvbikpCi0JCWVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfUkVTUE9OU0U7CisJaWYgKHBoci0+b2JqZWN0ICE9IHBobS0+b2JqZWN0KSB7CisJCUhQSV9ERUJVR19MT0coRVJST1IsICJoZWFkZXIgb2JqZWN0ICVkIGludmFsaWRcbiIsCisJCQlwaHItPm9iamVjdCk7CisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9SRVNQT05TRTsKKwl9CiAKLQlyZXR1cm4gZXJyb3I7CisJaWYgKHBoci0+ZnVuY3Rpb24gIT0gcGhtLT5mdW5jdGlvbikgeworCQlIUElfREVCVUdfTE9HKEVSUk9SLCAiaGVhZGVyIHR5cGUgJWQgaW52YWxpZFxuIiwKKwkJCXBoci0+ZnVuY3Rpb24pOworCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfUkVTUE9OU0U7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHUxNiBocGlfYWRkX2FkYXB0ZXIoc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvKQpAQCAtNjYsOCArNzgsMTggQEAKIAl9CiAKIAlpZiAoYWRhcHRlcnMuYWRhcHRlcltwYW8tPmluZGV4XS5hZGFwdGVyX3R5cGUpIHsKLQkJewotCQkJcmV0dmFsID0gSFBJX0RVUExJQ0FURV9BREFQVEVSX05VTUJFUjsKKwkJaW50IGE7CisJCWZvciAoYSA9IEhQSV9NQVhfQURBUFRFUlMgLSAxOyBhID49IDA7IGEtLSkgeworCQkJaWYgKCFhZGFwdGVycy5hZGFwdGVyW2FdLmFkYXB0ZXJfdHlwZSkgeworCQkJCUhQSV9ERUJVR19MT0coV0FSTklORywKKwkJCQkJIkFTSSVYIGR1cGxpY2F0ZSBpbmRleCAlZCBtb3ZlZCB0byAlZFxuIiwKKwkJCQkJcGFvLT5hZGFwdGVyX3R5cGUsIHBhby0+aW5kZXgsIGEpOworCQkJCXBhby0+aW5kZXggPSBhOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChhIDwgMCkgeworCQkJcmV0dmFsID0gSFBJX0VSUk9SX0RVUExJQ0FURV9BREFQVEVSX05VTUJFUjsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CiAJfQpAQCAtNzYsMTcgKzk4LDIyIEBACiAJYWRhcHRlcnMuZ3dfbnVtX2FkYXB0ZXJzKys7CiAKIHVubG9jazoKLQlocGlvc19hbGlzdGxvY2tfdW5fbG9jaygmYWRhcHRlcnMpOworCWhwaW9zX2FsaXN0bG9ja191bmxvY2soJmFkYXB0ZXJzKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiB2b2lkIGhwaV9kZWxldGVfYWRhcHRlcihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8pCiB7Ci0JbWVtc2V0KHBhbywgMCwgc2l6ZW9mKHN0cnVjdCBocGlfYWRhcHRlcl9vYmopKTsKKwlpZiAoIXBhby0+YWRhcHRlcl90eXBlKSB7CisJCUhQSV9ERUJVR19MT0coRVJST1IsICJyZW1vdmluZyBudWxsIGFkYXB0ZXI/XG4iKTsKKwkJcmV0dXJuOworCX0KIAogCWhwaW9zX2FsaXN0bG9ja19sb2NrKCZhZGFwdGVycyk7Ci0JYWRhcHRlcnMuZ3dfbnVtX2FkYXB0ZXJzLS07CS8qIGRlYyB0aGUgbnVtYmVyIG9mIGFkYXB0ZXJzICovCi0JaHBpb3NfYWxpc3Rsb2NrX3VuX2xvY2soJmFkYXB0ZXJzKTsKKwlpZiAoYWRhcHRlcnMuYWRhcHRlcltwYW8tPmluZGV4XS5hZGFwdGVyX3R5cGUpCisJCWFkYXB0ZXJzLmd3X251bV9hZGFwdGVycy0tOworCW1lbXNldCgmYWRhcHRlcnMuYWRhcHRlcltwYW8tPmluZGV4XSwgMCwgc2l6ZW9mKGFkYXB0ZXJzLmFkYXB0ZXJbMF0pKTsKKwlocGlvc19hbGlzdGxvY2tfdW5sb2NrKCZhZGFwdGVycyk7CiB9CiAKIC8qKgpAQCAtOTksNyArMTI2LDcgQEAKIAlzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8gPSBOVUxMOwogCiAJaWYgKGFkYXB0ZXJfaW5kZXggPj0gSFBJX01BWF9BREFQVEVSUykgewotCQlIUElfREVCVUdfTE9HKFZFUkJPU0UsICJmaW5kX2FkYXB0ZXIgaW52YWxpZCBpbmRleCAlZCAiLAorCQlIUElfREVCVUdfTE9HKFZFUkJPU0UsICJmaW5kX2FkYXB0ZXIgaW52YWxpZCBpbmRleCAlZFxuIiwKIAkJCWFkYXB0ZXJfaW5kZXgpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xMjUsNTEgKzE1MiwzNCBAQAogKiB3aXBlIGFuIEhQSV9BREFQVEVSU19MSVNUIHN0cnVjdHVyZS4KICoKICoqLwotc3RhdGljIHZvaWQgd2lwZV9hZGFwdGVyX2xpc3Qodm9pZAotCSkKK3N0YXRpYyB2b2lkIHdpcGVfYWRhcHRlcl9saXN0KHZvaWQpCiB7CiAJbWVtc2V0KCZhZGFwdGVycywgMCwgc2l6ZW9mKGFkYXB0ZXJzKSk7CiB9CiAKLS8qKgotKiBTdWJTeXNHZXRBZGFwdGVycyBmaWxscyBhd0FkYXB0ZXJMaXN0IGluIGFuIHN0cnVjdCBocGlfcmVzcG9uc2Ugc3RydWN0dXJlCi0qIHdpdGggYWxsIGFkYXB0ZXJzIGluIHRoZSBnaXZlbiBIUElfQURBUFRFUlNfTElTVC4KLSoKLSovCi1zdGF0aWMgdm9pZCBzdWJzeXNfZ2V0X2FkYXB0ZXJzKHN0cnVjdCBocGlfcmVzcG9uc2UgKnBocikKK3N0YXRpYyB2b2lkIHN1YnN5c19nZXRfYWRhcHRlcihzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwKKwlzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7Ci0JLyogZmlsbCBpbiB0aGUgcmVzcG9uc2UgYWRhcHRlciBhcnJheSB3aXRoIHRoZSBwb3NpdGlvbiAqLwotCS8qIGlkZW50aWZpZWQgYnkgdGhlIGFkYXB0ZXIgbnVtYmVyL2luZGV4IG9mIHRoZSBhZGFwdGVycyBpbiAqLwotCS8qIHRoaXMgSFBJICovCi0JLyogaS5lLiBpZiB3ZSBoYXZlIGFuIEExMjAgd2l0aCBpdCdzIGp1bXBlciBzZXQgdG8gKi8KLQkvKiBBZGFwdGVyIE51bWJlciAyIHRoZW4gcHV0IGFuIEFkYXB0ZXIgdHlwZSBBMTIwIGluIHRoZSAqLwotCS8qIGFycmF5IGluIHBvc2l0aW9uIDEgKi8KLQkvKiBOT1RFOiBBZGFwdGVyTnVtYmVyIGlzIDEuLk4sIEluZGV4IGlzIDAuLk4tMSAqLworCWludCBjb3VudCA9IHBobS0+b2JqX2luZGV4OworCXUxNiBpbmRleCA9IDA7CiAKLQkvKiBpbnB1dDogIE5PTkUgKi8KLQkvKiBvdXRwdXQ6IHdOdW1BZGFwdGVycyAqLwotCS8qICAgICAgICAgICAgICAgICBhd0FkYXB0ZXJbXSAqLwotCS8qICovCi0KLQlzaG9ydCBpOwotCXN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbyA9IE5VTEw7Ci0KLQlIUElfREVCVUdfTE9HKFZFUkJPU0UsICJzdWJzeXNfZ2V0X2FkYXB0ZXJzXG4iKTsKLQotCS8qIGZvciBlYWNoIGFkYXB0ZXIsIHBsYWNlIGl0J3MgdHlwZSBpbiB0aGUgcG9zaXRpb24gb2YgdGhlIGFycmF5ICovCi0JLyogY29ycmVzcG9uZGluZyB0byBpdCdzIGFkYXB0ZXIgbnVtYmVyICovCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXJzLmd3X251bV9hZGFwdGVyczsgaSsrKSB7Ci0JCXBhbyA9ICZhZGFwdGVycy5hZGFwdGVyW2ldOwotCQlpZiAocGhyLT51LnMuYXdfYWRhcHRlcl9saXN0W3Bhby0+aW5kZXhdICE9IDApIHsKLQkJCXBoci0+ZXJyb3IgPSBIUElfRFVQTElDQVRFX0FEQVBURVJfTlVNQkVSOwotCQkJcGhyLT5zcGVjaWZpY19lcnJvciA9IHBhby0+aW5kZXg7Ci0JCQlyZXR1cm47CisJLyogZmluZCB0aGUgbkNvdW50J3RoIG5vbnplcm8gYWRhcHRlciBpbiBhcnJheSAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhQSV9NQVhfQURBUFRFUlM7IGluZGV4KyspIHsKKwkJaWYgKGFkYXB0ZXJzLmFkYXB0ZXJbaW5kZXhdLmFkYXB0ZXJfdHlwZSkgeworCQkJaWYgKCFjb3VudCkKKwkJCQlicmVhazsKKwkJCWNvdW50LS07CiAJCX0KLQkJcGhyLT51LnMuYXdfYWRhcHRlcl9saXN0W3Bhby0+aW5kZXhdID0gcGFvLT5hZGFwdGVyX3R5cGU7CiAJfQogCi0JcGhyLT51LnMubnVtX2FkYXB0ZXJzID0gYWRhcHRlcnMuZ3dfbnVtX2FkYXB0ZXJzOwotCXBoci0+ZXJyb3IgPSAwOwkvKiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIE9LOyAqLworCWlmIChpbmRleCA8IEhQSV9NQVhfQURBUFRFUlMpIHsKKwkJcGhyLT51LnMuYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXJzLmFkYXB0ZXJbaW5kZXhdLmluZGV4OworCQlwaHItPnUucy5hZGFwdGVyX3R5cGUgPSBhZGFwdGVycy5hZGFwdGVyW2luZGV4XS5hZGFwdGVyX3R5cGU7CisJfSBlbHNlIHsKKwkJcGhyLT51LnMuYWRhcHRlcl9pbmRleCA9IDA7CisJCXBoci0+dS5zLmFkYXB0ZXJfdHlwZSA9IDA7CisJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfQkFEX0FEQVBURVJfTlVNQkVSOworCX0KIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBjb250cm9sX2NhY2hlX2FsbG9jX2NoZWNrKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZSAqcEMpCkBAIC0xNzgsNjcgKzE4OCw5OCBAQAogCWludCBjYWNoZWQgPSAwOwogCWlmICghcEMpCiAJCXJldHVybiAwOwotCWlmICgoIXBDLT5pbml0KSAmJiAocEMtPnBfY2FjaGUgIT0gTlVMTCkgJiYgKHBDLT5jb250cm9sX2NvdW50KQotCQkmJiAocEMtPmNhY2hlX3NpemVfaW5fYnl0ZXMpCi0JCSkgewotCQl1MzIgKnBfbWFzdGVyX2NhY2hlOwotCQlwQy0+aW5pdCA9IDE7CiAKLQkJcF9tYXN0ZXJfY2FjaGUgPSAodTMyICopcEMtPnBfY2FjaGU7Ci0JCUhQSV9ERUJVR19MT0coVkVSQk9TRSwgImNoZWNrICVkIGNvbnRyb2xzXG4iLAorCWlmIChwQy0+aW5pdCkKKwkJcmV0dXJuIHBDLT5pbml0OworCisJaWYgKCFwQy0+cF9jYWNoZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocEMtPmNvbnRyb2xfY291bnQgJiYgcEMtPmNhY2hlX3NpemVfaW5fYnl0ZXMpIHsKKwkJY2hhciAqcF9tYXN0ZXJfY2FjaGU7CisJCXVuc2lnbmVkIGludCBieXRlX2NvdW50ID0gMDsKKworCQlwX21hc3Rlcl9jYWNoZSA9IChjaGFyICopcEMtPnBfY2FjaGU7CisJCUhQSV9ERUJVR19MT0coREVCVUcsICJjaGVjayAlZCBjb250cm9sc1xuIiwKIAkJCXBDLT5jb250cm9sX2NvdW50KTsKIAkJZm9yIChpID0gMDsgaSA8IHBDLT5jb250cm9sX2NvdW50OyBpKyspIHsKIAkJCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvICppbmZvID0KIAkJCQkoc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX2luZm8gKikKLQkJCQlwX21hc3Rlcl9jYWNoZTsKKwkJCQkmcF9tYXN0ZXJfY2FjaGVbYnl0ZV9jb3VudF07CisKKwkJCWlmICghaW5mby0+c2l6ZV9pbjMyYml0X3dvcmRzKSB7CisJCQkJaWYgKCFpKSB7CisJCQkJCUhQSV9ERUJVR19MT0coSU5GTywKKwkJCQkJCSJhZGFwICVkIGNhY2hlIG5vdCByZWFkeT9cbiIsCisJCQkJCQlwQy0+YWRhcF9pZHgpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJLyogVGhlIGNhY2hlIGlzIGludmFsaWQuCisJCQkJICogTWluaW11bSB2YWxpZCBlbnRyeSBzaXplIGlzCisJCQkJICogc2l6ZW9mKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvKQorCQkJCSAqLworCQkJCUhQSV9ERUJVR19MT0coRVJST1IsCisJCQkJCSJhZGFwICVkIHplcm8gc2l6ZSBjYWNoZSBlbnRyeSAlZFxuIiwKKwkJCQkJcEMtPmFkYXBfaWR4LCBpKTsKKwkJCQlicmVhazsKKwkJCX0KIAogCQkJaWYgKGluZm8tPmNvbnRyb2xfdHlwZSkgewotCQkJCXBDLT5wX2luZm9baV0gPSBpbmZvOworCQkJCXBDLT5wX2luZm9baW5mby0+Y29udHJvbF9pbmRleF0gPSBpbmZvOwogCQkJCWNhY2hlZCsrOwotCQkJfSBlbHNlCi0JCQkJcEMtPnBfaW5mb1tpXSA9IE5VTEw7CisJCQl9IGVsc2UJLyogZHVtbXkgY2FjaGUgZW50cnkgKi8KKwkJCQlwQy0+cF9pbmZvW2luZm8tPmNvbnRyb2xfaW5kZXhdID0gTlVMTDsKIAotCQkJaWYgKGluZm8tPnNpemVfaW4zMmJpdF93b3JkcykKLQkJCQlwX21hc3Rlcl9jYWNoZSArPSBpbmZvLT5zaXplX2luMzJiaXRfd29yZHM7Ci0JCQllbHNlCi0JCQkJcF9tYXN0ZXJfY2FjaGUgKz0KLQkJCQkJc2l6ZW9mKHN0cnVjdAotCQkJCQlocGlfY29udHJvbF9jYWNoZV9zaW5nbGUpIC8KLQkJCQkJc2l6ZW9mKHUzMik7CisJCQlieXRlX2NvdW50ICs9IGluZm8tPnNpemVfaW4zMmJpdF93b3JkcyAqIDQ7CiAKIAkJCUhQSV9ERUJVR19MT0coVkVSQk9TRSwKLQkJCQkiY2FjaGVkICVkLCBwaW5mbyAlcCBpbmRleCAlZCB0eXBlICVkXG4iLAotCQkJCWNhY2hlZCwgcEMtPnBfaW5mb1tpXSwgaW5mby0+Y29udHJvbF9pbmRleCwKLQkJCQlpbmZvLT5jb250cm9sX3R5cGUpOworCQkJCSJjYWNoZWQgJWQsIHBpbmZvICVwIGluZGV4ICVkIHR5cGUgJWQgc2l6ZSAlZFxuIiwKKwkJCQljYWNoZWQsIHBDLT5wX2luZm9baW5mby0+Y29udHJvbF9pbmRleF0sCisJCQkJaW5mby0+Y29udHJvbF9pbmRleCwgaW5mby0+Y29udHJvbF90eXBlLAorCQkJCWluZm8tPnNpemVfaW4zMmJpdF93b3Jkcyk7CisKKwkJCS8qIHF1aXQgbG9vcCBlYXJseSBpZiB3aG9sZSBjYWNoZSBoYXMgYmVlbiBzY2FubmVkLgorCQkJICogZHdDb250cm9sQ291bnQgaXMgdGhlIG1heGltdW0gcG9zc2libGUgZW50cmllcworCQkJICogYnV0IHNvbWUgbWF5IGJlIGFic2VudCBmcm9tIHRoZSBjYWNoZQorCQkJICovCisJCQlpZiAoYnl0ZV9jb3VudCA+PSBwQy0+Y2FjaGVfc2l6ZV9pbl9ieXRlcykKKwkJCQlicmVhazsKKwkJCS8qIGhhdmUgc2VlbiBsYXN0IGNvbnRyb2wgaW5kZXggKi8KKwkJCWlmIChpbmZvLT5jb250cm9sX2luZGV4ID09IHBDLT5jb250cm9sX2NvdW50IC0gMSkKKwkJCQlicmVhazsKIAkJfQotCQkvKgotCQkgICBXZSBkaWRuJ3QgZmluZCBhbnl0aGluZyB0byBjYWNoZSwgc28gdHJ5IGFnYWluIGxhdGVyICEKLQkJICovCi0JCWlmICghY2FjaGVkKQotCQkJcEMtPmluaXQgPSAwOworCisJCWlmIChieXRlX2NvdW50ICE9IHBDLT5jYWNoZV9zaXplX2luX2J5dGVzKQorCQkJSFBJX0RFQlVHX0xPRyhXQVJOSU5HLAorCQkJCSJhZGFwICVkIGJ5dGVjb3VudCAlZCAhPSBjYWNoZSBzaXplICVkXG4iLAorCQkJCXBDLT5hZGFwX2lkeCwgYnl0ZV9jb3VudCwKKwkJCQlwQy0+Y2FjaGVfc2l6ZV9pbl9ieXRlcyk7CisJCWVsc2UKKwkJCUhQSV9ERUJVR19MT0coREVCVUcsCisJCQkJImFkYXAgJWQgY2FjaGUgZ29vZCwgYnl0ZWNvdW50ID09IGNhY2hlIHNpemUgPSAlZFxuIiwKKwkJCQlwQy0+YWRhcF9pZHgsIGJ5dGVfY291bnQpOworCisJCXBDLT5pbml0ID0gKHUxNiljYWNoZWQ7CiAJfQogCXJldHVybiBwQy0+aW5pdDsKIH0KIAogLyoqIEZpbmQgYSBjb250cm9sLgogKi8KLXN0YXRpYyBzaG9ydCBmaW5kX2NvbnRyb2woc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sCi0Jc3RydWN0IGhwaV9jb250cm9sX2NhY2hlICpwX2NhY2hlLCBzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyAqKnBJLAotCXUxNiAqcHdfY29udHJvbF9pbmRleCkKK3N0YXRpYyBzaG9ydCBmaW5kX2NvbnRyb2wodTE2IGNvbnRyb2xfaW5kZXgsCisJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlICpwX2NhY2hlLCBzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyAqKnBJKQogewotCSpwd19jb250cm9sX2luZGV4ID0gcGhtLT5vYmpfaW5kZXg7Ci0KIAlpZiAoIWNvbnRyb2xfY2FjaGVfYWxsb2NfY2hlY2socF9jYWNoZSkpIHsKIAkJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLAotCQkJImNvbnRyb2xfY2FjaGVfYWxsb2NfY2hlY2soKSBmYWlsZWQuIGFkYXAlZCBjaSVkXG4iLAotCQkJcGhtLT5hZGFwdGVyX2luZGV4LCAqcHdfY29udHJvbF9pbmRleCk7CisJCQkiY29udHJvbF9jYWNoZV9hbGxvY19jaGVjaygpIGZhaWxlZCAlZFxuIiwKKwkJCWNvbnRyb2xfaW5kZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkqcEkgPSBwX2NhY2hlLT5wX2luZm9bKnB3X2NvbnRyb2xfaW5kZXhdOworCSpwSSA9IHBfY2FjaGUtPnBfaW5mb1tjb250cm9sX2luZGV4XTsKIAlpZiAoISpwSSkgewotCQlIUElfREVCVUdfTE9HKFZFUkJPU0UsICJ1bmNhY2hlZCBhZGFwICVkLCBjb250cm9sICVkXG4iLAotCQkJcGhtLT5hZGFwdGVyX2luZGV4LCAqcHdfY29udHJvbF9pbmRleCk7CisJCUhQSV9ERUJVR19MT0coVkVSQk9TRSwgIlVuY2FjaGVkIENvbnRyb2wgJWRcbiIsCisJCQljb250cm9sX2luZGV4KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLCAiZmluZF9jb250cm9sKCkgdHlwZSAlZFxuIiwKQEAgLTI0NywyNSArMjg4LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyoqIFVzZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIgdG8gZmlndXJlIG91dCBpZiBhIGJ1ZmZlciBuZWVkcyBtYXBwaW5nLgotICovCi1zaG9ydCBocGlfY2hlY2tfYnVmZmVyX21hcHBpbmcoc3RydWN0IGhwaV9jb250cm9sX2NhY2hlICpwX2NhY2hlLAotCXN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCB2b2lkICoqcCwgdW5zaWduZWQgaW50ICpwTikKLXsKLQkqcE4gPSAwOwotCSpwID0gTlVMTDsKLQlpZiAoKHBobS0+ZnVuY3Rpb24gPT0gSFBJX0NPTlRST0xfR0VUX1NUQVRFKQotCQkmJiAocGhtLT5vYmplY3QgPT0gSFBJX09CSl9DT05UUk9MRVgpCi0JCSkgewotCQl1MTYgY29udHJvbF9pbmRleDsKLQkJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX2luZm8gKnBJOwotCi0JCWlmICghZmluZF9jb250cm9sKHBobSwgcF9jYWNoZSwgJnBJLCAmY29udHJvbF9pbmRleCkpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIGFsbG93IHVuaWZpZWQgdHJlYXRtZW50IG9mIHNldmVyYWwgc3RyaW5nIGZpZWxkcyB3aXRoaW4gc3RydWN0ICovCiAjZGVmaW5lIEhQSUNNTl9QQURfT0ZTX0FORF9TSVpFKG0pICB7XAogCW9mZnNldG9mKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9wYWQsIG0pLCBcCkBAIC0yOTAsMTMgKzMxMiwxNiBAQAogCXN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7CiAJc2hvcnQgZm91bmQgPSAxOwotCXUxNiBjb250cm9sX2luZGV4OwogCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvICpwSTsKIAlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfc2luZ2xlICpwQzsKIAlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfcGFkICpwX3BhZDsKIAotCWlmICghZmluZF9jb250cm9sKHBobSwgcF9jYWNoZSwgJnBJLCAmY29udHJvbF9pbmRleCkpCisJaWYgKCFmaW5kX2NvbnRyb2wocGhtLT5vYmpfaW5kZXgsIHBfY2FjaGUsICZwSSkpIHsKKwkJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLAorCQkJIkhQSUNNTiBmaW5kX2NvbnRyb2woKSBmYWlsZWQgZm9yIGFkYXAgJWRcbiIsCisJCQlwaG0tPmFkYXB0ZXJfaW5kZXgpOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlwaHItPmVycm9yID0gMDsKIApAQCAtMzEwLDU1ICszMzUsNzkgQEAKIAogCWNhc2UgSFBJX0NPTlRST0xfTUVURVI6CiAJCWlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX01FVEVSX1BFQUspIHsKLQkJCXBoci0+dS5jLmFuX2xvZ192YWx1ZVswXSA9IHBDLT51LnAuYW5fbG9nX3BlYWtbMF07Ci0JCQlwaHItPnUuYy5hbl9sb2dfdmFsdWVbMV0gPSBwQy0+dS5wLmFuX2xvZ19wZWFrWzFdOworCQkJcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzBdID0gcEMtPnUubWV0ZXIuYW5fbG9nX3BlYWtbMF07CisJCQlwaHItPnUuYy5hbl9sb2dfdmFsdWVbMV0gPSBwQy0+dS5tZXRlci5hbl9sb2dfcGVha1sxXTsKIAkJfSBlbHNlIGlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX01FVEVSX1JNUykgewotCQkJcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzBdID0gcEMtPnUucC5hbl9sb2dSTVNbMF07Ci0JCQlwaHItPnUuYy5hbl9sb2dfdmFsdWVbMV0gPSBwQy0+dS5wLmFuX2xvZ1JNU1sxXTsKKwkJCWlmIChwQy0+dS5tZXRlci5hbl9sb2dSTVNbMF0gPT0KKwkJCQlIUElfQ0FDSEVfSU5WQUxJRF9TSE9SVCkgeworCQkJCXBoci0+ZXJyb3IgPQorCQkJCQlIUElfRVJST1JfSU5WQUxJRF9DT05UUk9MX0FUVFJJQlVURTsKKwkJCQlwaHItPnUuYy5hbl9sb2dfdmFsdWVbMF0gPSBIUElfTUVURVJfTUlOSU1VTTsKKwkJCQlwaHItPnUuYy5hbl9sb2dfdmFsdWVbMV0gPSBIUElfTUVURVJfTUlOSU1VTTsKKwkJCX0gZWxzZSB7CisJCQkJcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzBdID0KKwkJCQkJcEMtPnUubWV0ZXIuYW5fbG9nUk1TWzBdOworCQkJCXBoci0+dS5jLmFuX2xvZ192YWx1ZVsxXSA9CisJCQkJCXBDLT51Lm1ldGVyLmFuX2xvZ1JNU1sxXTsKKwkJCX0KIAkJfSBlbHNlCiAJCQlmb3VuZCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgSFBJX0NPTlRST0xfVk9MVU1FOgogCQlpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9WT0xVTUVfR0FJTikgewotCQkJcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzBdID0gcEMtPnUudi5hbl9sb2dbMF07Ci0JCQlwaHItPnUuYy5hbl9sb2dfdmFsdWVbMV0gPSBwQy0+dS52LmFuX2xvZ1sxXTsKLQkJfSBlbHNlCisJCQlwaHItPnUuYy5hbl9sb2dfdmFsdWVbMF0gPSBwQy0+dS52b2wuYW5fbG9nWzBdOworCQkJcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzFdID0gcEMtPnUudm9sLmFuX2xvZ1sxXTsKKwkJfSBlbHNlIGlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX1ZPTFVNRV9NVVRFKSB7CisJCQlpZiAocEMtPnUudm9sLmZsYWdzICYgSFBJX1ZPTFVNRV9GTEFHX0hBU19NVVRFKSB7CisJCQkJaWYgKHBDLT51LnZvbC5mbGFncyAmIEhQSV9WT0xVTUVfRkxBR19NVVRFRCkKKwkJCQkJcGhyLT51LmMucGFyYW0xID0KKwkJCQkJCUhQSV9CSVRNQVNLX0FMTF9DSEFOTkVMUzsKKwkJCQllbHNlCisJCQkJCXBoci0+dS5jLnBhcmFtMSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXBoci0+ZXJyb3IgPQorCQkJCQlIUElfRVJST1JfSU5WQUxJRF9DT05UUk9MX0FUVFJJQlVURTsKKwkJCQlwaHItPnUuYy5wYXJhbTEgPSAwOworCQkJfQorCQl9IGVsc2UgewogCQkJZm91bmQgPSAwOworCQl9CiAJCWJyZWFrOwogCWNhc2UgSFBJX0NPTlRST0xfTVVMVElQTEVYRVI6CiAJCWlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX01VTFRJUExFWEVSX1NPVVJDRSkgewotCQkJcGhyLT51LmMucGFyYW0xID0gcEMtPnUueC5zb3VyY2Vfbm9kZV90eXBlOwotCQkJcGhyLT51LmMucGFyYW0yID0gcEMtPnUueC5zb3VyY2Vfbm9kZV9pbmRleDsKKwkJCXBoci0+dS5jLnBhcmFtMSA9IHBDLT51Lm11eC5zb3VyY2Vfbm9kZV90eXBlOworCQkJcGhyLT51LmMucGFyYW0yID0gcEMtPnUubXV4LnNvdXJjZV9ub2RlX2luZGV4OwogCQl9IGVsc2UgewogCQkJZm91bmQgPSAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSFBJX0NPTlRST0xfQ0hBTk5FTF9NT0RFOgogCQlpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9DSEFOTkVMX01PREVfTU9ERSkKLQkJCXBoci0+dS5jLnBhcmFtMSA9IHBDLT51Lm0ubW9kZTsKKwkJCXBoci0+dS5jLnBhcmFtMSA9IHBDLT51Lm1vZGUubW9kZTsKIAkJZWxzZQogCQkJZm91bmQgPSAwOwogCQlicmVhazsKIAljYXNlIEhQSV9DT05UUk9MX0xFVkVMOgogCQlpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9MRVZFTF9HQUlOKSB7Ci0JCQlwaHItPnUuYy5hbl9sb2dfdmFsdWVbMF0gPSBwQy0+dS5sLmFuX2xvZ1swXTsKLQkJCXBoci0+dS5jLmFuX2xvZ192YWx1ZVsxXSA9IHBDLT51LmwuYW5fbG9nWzFdOworCQkJcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzBdID0gcEMtPnUubGV2ZWwuYW5fbG9nWzBdOworCQkJcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzFdID0gcEMtPnUubGV2ZWwuYW5fbG9nWzFdOwogCQl9IGVsc2UKIAkJCWZvdW5kID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBIUElfQ09OVFJPTF9UVU5FUjoKIAkJaWYgKHBobS0+dS5jLmF0dHJpYnV0ZSA9PSBIUElfVFVORVJfRlJFUSkKLQkJCXBoci0+dS5jLnBhcmFtMSA9IHBDLT51LnQuZnJlcV9pbmtfaHo7CisJCQlwaHItPnUuYy5wYXJhbTEgPSBwQy0+dS50dW5lci5mcmVxX2lua19oejsKIAkJZWxzZSBpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9UVU5FUl9CQU5EKQotCQkJcGhyLT51LmMucGFyYW0xID0gcEMtPnUudC5iYW5kOwotCQllbHNlIGlmICgocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9UVU5FUl9MRVZFTCkKLQkJCSYmIChwaG0tPnUuYy5wYXJhbTEgPT0gSFBJX1RVTkVSX0xFVkVMX0FWRVJBR0UpKQotCQkJaWYgKHBDLT51LnQubGV2ZWwgPT0gSFBJX0VSUk9SX0lMTEVHQUxfQ0FDSEVfVkFMVUUpIHsKLQkJCQlwaHItPnUuYy5wYXJhbTEgPSAwOworCQkJcGhyLT51LmMucGFyYW0xID0gcEMtPnUudHVuZXIuYmFuZDsKKwkJZWxzZSBpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9UVU5FUl9MRVZFTF9BVkcpCisJCQlpZiAocEMtPnUudHVuZXIuc19sZXZlbF9hdmcgPT0KKwkJCQlIUElfQ0FDSEVfSU5WQUxJRF9TSE9SVCkgeworCQkJCXBoci0+dS5jdS50dW5lci5zX2xldmVsID0gMDsKIAkJCQlwaHItPmVycm9yID0KIAkJCQkJSFBJX0VSUk9SX0lOVkFMSURfQ09OVFJPTF9BVFRSSUJVVEU7CiAJCQl9IGVsc2UKLQkJCQlwaHItPnUuYy5wYXJhbTEgPSBwQy0+dS50LmxldmVsOworCQkJCXBoci0+dS5jdS50dW5lci5zX2xldmVsID0KKwkJCQkJcEMtPnUudHVuZXIuc19sZXZlbF9hdmc7CiAJCWVsc2UKIAkJCWZvdW5kID0gMDsKIAkJYnJlYWs7CkBAIC0zNjYsNyArNDE1LDcgQEAKIAkJaWYgKHBobS0+dS5jLmF0dHJpYnV0ZSA9PSBIUElfQUVTRUJVUlhfRVJST1JTVEFUVVMpCiAJCQlwaHItPnUuYy5wYXJhbTEgPSBwQy0+dS5hZXMzcnguZXJyb3Jfc3RhdHVzOwogCQllbHNlIGlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX0FFU0VCVVJYX0ZPUk1BVCkKLQkJCXBoci0+dS5jLnBhcmFtMSA9IHBDLT51LmFlczNyeC5zb3VyY2U7CisJCQlwaHItPnUuYy5wYXJhbTEgPSBwQy0+dS5hZXMzcnguZm9ybWF0OwogCQllbHNlCiAJCQlmb3VuZCA9IDA7CiAJCWJyZWFrOwpAQCAtMzg1LDEzICs0MzQsMTIgQEAKIAljYXNlIEhQSV9DT05UUk9MX1NJTEVOQ0VERVRFQ1RPUjoKIAkJaWYgKHBobS0+dS5jLmF0dHJpYnV0ZSA9PSBIUElfU0lMRU5DRURFVEVDVE9SX1NUQVRFKSB7CiAJCQlwaHItPnUuYy5wYXJhbTEgPSBwQy0+dS5zaWxlbmNlLnN0YXRlOwotCQkJcGhyLT51LmMucGFyYW0yID0gcEMtPnUuc2lsZW5jZS5jb3VudDsKIAkJfSBlbHNlCiAJCQlmb3VuZCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgSFBJX0NPTlRST0xfTUlDUk9QSE9ORToKIAkJaWYgKHBobS0+dS5jLmF0dHJpYnV0ZSA9PSBIUElfTUlDUk9QSE9ORV9QSEFOVE9NX1BPV0VSKQotCQkJcGhyLT51LmMucGFyYW0xID0gcEMtPnUucGhhbnRvbV9wb3dlci5zdGF0ZTsKKwkJCXBoci0+dS5jLnBhcmFtMSA9IHBDLT51Lm1pY3JvcGhvbmUucGhhbnRvbV9zdGF0ZTsKIAkJZWxzZQogCQkJZm91bmQgPSAwOwogCQlicmVhazsKQEAgLTQwMCw3ICs0NDgsNyBAQAogCQkJcGhyLT51LmMucGFyYW0xID0gcEMtPnUuY2xrLnNvdXJjZTsKIAkJZWxzZSBpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9TQU1QTEVDTE9DS19TT1VSQ0VfSU5ERVgpIHsKIAkJCWlmIChwQy0+dS5jbGsuc291cmNlX2luZGV4ID09Ci0JCQkJSFBJX0VSUk9SX0lMTEVHQUxfQ0FDSEVfVkFMVUUpIHsKKwkJCQlIUElfQ0FDSEVfSU5WQUxJRF9VSU5UMTYpIHsKIAkJCQlwaHItPnUuYy5wYXJhbTEgPSAwOwogCQkJCXBoci0+ZXJyb3IgPQogCQkJCQlIUElfRVJST1JfSU5WQUxJRF9DT05UUk9MX0FUVFJJQlVURTsKQEAgLTQxMSw2MCArNDU5LDYzIEBACiAJCWVsc2UKIAkJCWZvdW5kID0gMDsKIAkJYnJlYWs7Ci0JY2FzZSBIUElfQ09OVFJPTF9QQUQ6CisJY2FzZSBIUElfQ09OVFJPTF9QQUQ6eworCQkJc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX3BhZCAqcF9wYWQ7CisJCQlwX3BhZCA9IChzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfcGFkICopcEk7CiAKLQkJaWYgKCEocF9wYWQtPmZpZWxkX3ZhbGlkX2ZsYWdzICYgKDEgPDwKLQkJCQkJSFBJX0NUTF9BVFRSX0lOREVYKHBobS0+dS5jLgotCQkJCQkJYXR0cmlidXRlKSkpKSB7Ci0JCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfQ09OVFJPTF9BVFRSSUJVVEU7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX1BBRF9QUk9HUkFNX0lEKQotCQkJcGhyLT51LmMucGFyYW0xID0gcF9wYWQtPnBJOwotCQllbHNlIGlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX1BBRF9QUk9HUkFNX1RZUEUpCi0JCQlwaHItPnUuYy5wYXJhbTEgPSBwX3BhZC0+cFRZOwotCQllbHNlIHsKLQkJCXVuc2lnbmVkIGludCBpbmRleCA9Ci0JCQkJSFBJX0NUTF9BVFRSX0lOREVYKHBobS0+dS5jLmF0dHJpYnV0ZSkgLSAxOwotCQkJdW5zaWduZWQgaW50IG9mZnNldCA9IHBobS0+dS5jLnBhcmFtMTsKLQkJCXVuc2lnbmVkIGludCBwYWRfc3RyaW5nX2xlbiwgZmllbGRfc2l6ZTsKLQkJCWNoYXIgKnBhZF9zdHJpbmc7Ci0JCQl1bnNpZ25lZCBpbnQgdG9jb3B5OwotCi0JCQlIUElfREVCVUdfTE9HKFZFUkJPU0UsICJQQURTIEhQSV9QQURTXyAlZFxuIiwKLQkJCQlwaG0tPnUuYy5hdHRyaWJ1dGUpOwotCi0JCQlpZiAoaW5kZXggPiBBUlJBWV9TSVpFKHBhZF9kZXNjKSAtIDEpIHsKKwkJCWlmICghKHBfcGFkLT5maWVsZF92YWxpZF9mbGFncyAmICgxIDw8CisJCQkJCQlIUElfQ1RMX0FUVFJfSU5ERVgocGhtLT51LmMuCisJCQkJCQkJYXR0cmlidXRlKSkpKSB7CiAJCQkJcGhyLT5lcnJvciA9CiAJCQkJCUhQSV9FUlJPUl9JTlZBTElEX0NPTlRST0xfQVRUUklCVVRFOwogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlwYWRfc3RyaW5nID0gKChjaGFyICopcF9wYWQpICsgcGFkX2Rlc2NbaW5kZXhdLm9mZnNldDsKLQkJCWZpZWxkX3NpemUgPSBwYWRfZGVzY1tpbmRleF0uZmllbGRfc2l6ZTsKLQkJCS8qIEVuc3VyZSBudWxsIHRlcm1pbmF0b3IgKi8KLQkJCXBhZF9zdHJpbmdbZmllbGRfc2l6ZSAtIDFdID0gMDsKKwkJCWlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX1BBRF9QUk9HUkFNX0lEKQorCQkJCXBoci0+dS5jLnBhcmFtMSA9IHBfcGFkLT5wSTsKKwkJCWVsc2UgaWYgKHBobS0+dS5jLmF0dHJpYnV0ZSA9PSBIUElfUEFEX1BST0dSQU1fVFlQRSkKKwkJCQlwaHItPnUuYy5wYXJhbTEgPSBwX3BhZC0+cFRZOworCQkJZWxzZSB7CisJCQkJdW5zaWduZWQgaW50IGluZGV4ID0KKwkJCQkJSFBJX0NUTF9BVFRSX0lOREVYKHBobS0+dS5jLgorCQkJCQlhdHRyaWJ1dGUpIC0gMTsKKwkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcGhtLT51LmMucGFyYW0xOworCQkJCXVuc2lnbmVkIGludCBwYWRfc3RyaW5nX2xlbiwgZmllbGRfc2l6ZTsKKwkJCQljaGFyICpwYWRfc3RyaW5nOworCQkJCXVuc2lnbmVkIGludCB0b2NvcHk7CiAKLQkJCXBhZF9zdHJpbmdfbGVuID0gc3RybGVuKHBhZF9zdHJpbmcpICsgMTsKKwkJCQlpZiAoaW5kZXggPiBBUlJBWV9TSVpFKHBhZF9kZXNjKSAtIDEpIHsKKwkJCQkJcGhyLT5lcnJvciA9CisJCQkJCQlIUElfRVJST1JfSU5WQUxJRF9DT05UUk9MX0FUVFJJQlVURTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCi0JCQlpZiAob2Zmc2V0ID4gcGFkX3N0cmluZ19sZW4pIHsKLQkJCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfQ09OVFJPTF9WQUxVRTsKLQkJCQlicmVhazsKKwkJCQlwYWRfc3RyaW5nID0KKwkJCQkJKChjaGFyICopcF9wYWQpICsKKwkJCQkJcGFkX2Rlc2NbaW5kZXhdLm9mZnNldDsKKwkJCQlmaWVsZF9zaXplID0gcGFkX2Rlc2NbaW5kZXhdLmZpZWxkX3NpemU7CisJCQkJLyogRW5zdXJlIG51bGwgdGVybWluYXRvciAqLworCQkJCXBhZF9zdHJpbmdbZmllbGRfc2l6ZSAtIDFdID0gMDsKKworCQkJCXBhZF9zdHJpbmdfbGVuID0gc3RybGVuKHBhZF9zdHJpbmcpICsgMTsKKworCQkJCWlmIChvZmZzZXQgPiBwYWRfc3RyaW5nX2xlbikgeworCQkJCQlwaHItPmVycm9yID0KKwkJCQkJCUhQSV9FUlJPUl9JTlZBTElEX0NPTlRST0xfVkFMVUU7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXRvY29weSA9IHBhZF9zdHJpbmdfbGVuIC0gb2Zmc2V0OworCQkJCWlmICh0b2NvcHkgPiBzaXplb2YocGhyLT51LmN1LmNoYXJzOC5zel9kYXRhKSkKKwkJCQkJdG9jb3B5ID0gc2l6ZW9mKHBoci0+dS5jdS5jaGFyczguCisJCQkJCQlzel9kYXRhKTsKKworCQkJCW1lbWNweShwaHItPnUuY3UuY2hhcnM4LnN6X2RhdGEsCisJCQkJCSZwYWRfc3RyaW5nW29mZnNldF0sIHRvY29weSk7CisKKwkJCQlwaHItPnUuY3UuY2hhcnM4LnJlbWFpbmluZ19jaGFycyA9CisJCQkJCXBhZF9zdHJpbmdfbGVuIC0gb2Zmc2V0IC0gdG9jb3B5OwogCQkJfQotCi0JCQl0b2NvcHkgPSBwYWRfc3RyaW5nX2xlbiAtIG9mZnNldDsKLQkJCWlmICh0b2NvcHkgPiBzaXplb2YocGhyLT51LmN1LmNoYXJzOC5zel9kYXRhKSkKLQkJCQl0b2NvcHkgPSBzaXplb2YocGhyLT51LmN1LmNoYXJzOC5zel9kYXRhKTsKLQotCQkJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLAotCQkJCSJQQURTIG1lbWNweSglZCksIG9mZnNldCAlZCBcbiIsIHRvY29weSwKLQkJCQlvZmZzZXQpOwotCQkJbWVtY3B5KHBoci0+dS5jdS5jaGFyczguc3pfZGF0YSwgJnBhZF9zdHJpbmdbb2Zmc2V0XSwKLQkJCQl0b2NvcHkpOwotCi0JCQlwaHItPnUuY3UuY2hhcnM4LnJlbWFpbmluZ19jaGFycyA9Ci0JCQkJcGFkX3N0cmluZ19sZW4gLSBvZmZzZXQgLSB0b2NvcHk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTQ3MiwxNiArNTIzLDkgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGZvdW5kKQotCQlIUElfREVCVUdfTE9HKFZFUkJPU0UsCi0JCQkiY2FjaGVkIGFkYXAgJWQsIGN0bCAlZCwgdHlwZSAlZCwgYXR0ciAlZFxuIiwKLQkJCXBobS0+YWRhcHRlcl9pbmRleCwgcEktPmNvbnRyb2xfaW5kZXgsCi0JCQlwSS0+Y29udHJvbF90eXBlLCBwaG0tPnUuYy5hdHRyaWJ1dGUpOwotCWVsc2UKLQkJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLAotCQkJInVuY2FjaGVkIGFkYXAgJWQsIGN0bCAlZCwgY3RsIHR5cGUgJWRcbiIsCi0JCQlwaG0tPmFkYXB0ZXJfaW5kZXgsIHBJLT5jb250cm9sX2luZGV4LAotCQkJcEktPmNvbnRyb2xfdHlwZSk7CisJSFBJX0RFQlVHX0xPRyhWRVJCT1NFLCAiJXMgQWRhcCAlZCwgQ3RsICVkLCBUeXBlICVkLCBBdHRyICVkXG4iLAorCQlmb3VuZCA/ICJDYWNoZWQiIDogIlVuY2FjaGVkIiwgcGhtLT5hZGFwdGVyX2luZGV4LAorCQlwSS0+Y29udHJvbF9pbmRleCwgcEktPmNvbnRyb2xfdHlwZSwgcGhtLT51LmMuYXR0cmlidXRlKTsKIAogCWlmIChmb3VuZCkKIAkJcGhyLT5zaXplID0KQEAgLTQ5NywxOCArNTQxLDIxIEBACiBWb2x1bWUgYW5kIExldmVsIHJldHVybiB0aGUgbGltaXRlZCB2YWx1ZXMgaW4gdGhlIHJlc3BvbnNlLCBzbyB1c2UgdGhlc2UKIE11bHRpcGxleGVyIGRvZXMgc28gdXNlIHNlbnQgdmFsdWVzCiAqLwotdm9pZCBocGlfc3luY19jb250cm9sX2NhY2hlKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZSAqcF9jYWNoZSwKK3ZvaWQgaHBpX2Ntbl9jb250cm9sX2NhY2hlX3N5bmNfdG9fbXNnKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZSAqcF9jYWNoZSwKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQogewotCXUxNiBjb250cm9sX2luZGV4OwogCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9zaW5nbGUgKnBDOwogCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvICpwSTsKIAogCWlmIChwaHItPmVycm9yKQogCQlyZXR1cm47CiAKLQlpZiAoIWZpbmRfY29udHJvbChwaG0sIHBfY2FjaGUsICZwSSwgJmNvbnRyb2xfaW5kZXgpKQorCWlmICghZmluZF9jb250cm9sKHBobS0+b2JqX2luZGV4LCBwX2NhY2hlLCAmcEkpKSB7CisJCUhQSV9ERUJVR19MT0coVkVSQk9TRSwKKwkJCSJIUElDTU4gZmluZF9jb250cm9sKCkgZmFpbGVkIGZvciBhZGFwICVkXG4iLAorCQkJcGhtLT5hZGFwdGVyX2luZGV4KTsKIAkJcmV0dXJuOworCX0KIAogCS8qIHBDIGlzIHRoZSBkZWZhdWx0IGNhY2hlZCBjb250cm9sIHN0cnVjdXJlLgogCSAgIE1heSBiZSBjYXN0IHRvIHNvbWV0aGluZyBlbHNlIGluIHRoZSBmb2xsb3dpbmcgc3dpdGNoIHN0YXRlbWVudC4KQEAgLTUxOCwzMSArNTY1LDM2IEBACiAJc3dpdGNoIChwSS0+Y29udHJvbF90eXBlKSB7CiAJY2FzZSBIUElfQ09OVFJPTF9WT0xVTUU6CiAJCWlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX1ZPTFVNRV9HQUlOKSB7Ci0JCQlwQy0+dS52LmFuX2xvZ1swXSA9IHBoci0+dS5jLmFuX2xvZ192YWx1ZVswXTsKLQkJCXBDLT51LnYuYW5fbG9nWzFdID0gcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzFdOworCQkJcEMtPnUudm9sLmFuX2xvZ1swXSA9IHBoci0+dS5jLmFuX2xvZ192YWx1ZVswXTsKKwkJCXBDLT51LnZvbC5hbl9sb2dbMV0gPSBwaHItPnUuYy5hbl9sb2dfdmFsdWVbMV07CisJCX0gZWxzZSBpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9WT0xVTUVfTVVURSkgeworCQkJaWYgKHBobS0+dS5jLnBhcmFtMSkKKwkJCQlwQy0+dS52b2wuZmxhZ3MgfD0gSFBJX1ZPTFVNRV9GTEFHX01VVEVEOworCQkJZWxzZQorCQkJCXBDLT51LnZvbC5mbGFncyAmPSB+SFBJX1ZPTFVNRV9GTEFHX01VVEVEOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSFBJX0NPTlRST0xfTVVMVElQTEVYRVI6CiAJCS8qIG11eCBkb2VzIG5vdCByZXR1cm4gaXRzIHNldHRpbmcgb24gU2V0IGNvbW1hbmQuICovCiAJCWlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX01VTFRJUExFWEVSX1NPVVJDRSkgewotCQkJcEMtPnUueC5zb3VyY2Vfbm9kZV90eXBlID0gKHUxNilwaG0tPnUuYy5wYXJhbTE7Ci0JCQlwQy0+dS54LnNvdXJjZV9ub2RlX2luZGV4ID0gKHUxNilwaG0tPnUuYy5wYXJhbTI7CisJCQlwQy0+dS5tdXguc291cmNlX25vZGVfdHlwZSA9ICh1MTYpcGhtLT51LmMucGFyYW0xOworCQkJcEMtPnUubXV4LnNvdXJjZV9ub2RlX2luZGV4ID0gKHUxNilwaG0tPnUuYy5wYXJhbTI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBIUElfQ09OVFJPTF9DSEFOTkVMX01PREU6CiAJCS8qIG1vZGUgZG9lcyBub3QgcmV0dXJuIGl0cyBzZXR0aW5nIG9uIFNldCBjb21tYW5kLiAqLwogCQlpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9DSEFOTkVMX01PREVfTU9ERSkKLQkJCXBDLT51Lm0ubW9kZSA9ICh1MTYpcGhtLT51LmMucGFyYW0xOworCQkJcEMtPnUubW9kZS5tb2RlID0gKHUxNilwaG0tPnUuYy5wYXJhbTE7CiAJCWJyZWFrOwogCWNhc2UgSFBJX0NPTlRST0xfTEVWRUw6CiAJCWlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX0xFVkVMX0dBSU4pIHsKLQkJCXBDLT51LnYuYW5fbG9nWzBdID0gcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzBdOwotCQkJcEMtPnUudi5hbl9sb2dbMV0gPSBwaHItPnUuYy5hbl9sb2dfdmFsdWVbMV07CisJCQlwQy0+dS52b2wuYW5fbG9nWzBdID0gcGhyLT51LmMuYW5fbG9nX3ZhbHVlWzBdOworCQkJcEMtPnUudm9sLmFuX2xvZ1sxXSA9IHBoci0+dS5jLmFuX2xvZ192YWx1ZVsxXTsKIAkJfQogCQlicmVhazsKIAljYXNlIEhQSV9DT05UUk9MX01JQ1JPUEhPTkU6CiAJCWlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX01JQ1JPUEhPTkVfUEhBTlRPTV9QT1dFUikKLQkJCXBDLT51LnBoYW50b21fcG93ZXIuc3RhdGUgPSAodTE2KXBobS0+dS5jLnBhcmFtMTsKKwkJCXBDLT51Lm1pY3JvcGhvbmUucGhhbnRvbV9zdGF0ZSA9ICh1MTYpcGhtLT51LmMucGFyYW0xOwogCQlicmVhazsKIAljYXNlIEhQSV9DT05UUk9MX0FFU0VCVV9UUkFOU01JVFRFUjoKIAkJaWYgKHBobS0+dS5jLmF0dHJpYnV0ZSA9PSBIUElfQUVTRUJVVFhfRk9STUFUKQpAQCAtNTUwLDcgKzYwMiw3IEBACiAJCWJyZWFrOwogCWNhc2UgSFBJX0NPTlRST0xfQUVTRUJVX1JFQ0VJVkVSOgogCQlpZiAocGhtLT51LmMuYXR0cmlidXRlID09IEhQSV9BRVNFQlVSWF9GT1JNQVQpCi0JCQlwQy0+dS5hZXMzcnguc291cmNlID0gcGhtLT51LmMucGFyYW0xOworCQkJcEMtPnUuYWVzM3J4LmZvcm1hdCA9IHBobS0+dS5jLnBhcmFtMTsKIAkJYnJlYWs7CiAJY2FzZSBIUElfQ09OVFJPTF9TQU1QTEVDTE9DSzoKIAkJaWYgKHBobS0+dS5jLmF0dHJpYnV0ZSA9PSBIUElfU0FNUExFQ0xPQ0tfU09VUkNFKQpAQCAtNTY1LDU5ICs2MTcsNTcgQEAKIAl9CiB9CiAKLXN0cnVjdCBocGlfY29udHJvbF9jYWNoZSAqaHBpX2FsbG9jX2NvbnRyb2xfY2FjaGUoY29uc3QgdTMyCi0JbnVtYmVyX29mX2NvbnRyb2xzLCBjb25zdCB1MzIgc2l6ZV9pbl9ieXRlcywKLQlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyAqcERTUF9jb250cm9sX2J1ZmZlcikKK3N0cnVjdCBocGlfY29udHJvbF9jYWNoZSAqaHBpX2FsbG9jX2NvbnRyb2xfY2FjaGUoY29uc3QgdTMyIGNvbnRyb2xfY291bnQsCisJY29uc3QgdTMyIHNpemVfaW5fYnl0ZXMsIHU4ICpwX2RzcF9jb250cm9sX2J1ZmZlcikKIHsKIAlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGUgKnBfY2FjaGUgPQogCQlrbWFsbG9jKHNpemVvZigqcF9jYWNoZSksIEdGUF9LRVJORUwpOwogCWlmICghcF9jYWNoZSkKIAkJcmV0dXJuIE5VTEw7CisKIAlwX2NhY2hlLT5wX2luZm8gPQotCQlrbWFsbG9jKHNpemVvZigqcF9jYWNoZS0+cF9pbmZvKSAqIG51bWJlcl9vZl9jb250cm9scywKLQkJCUdGUF9LRVJORUwpOworCQlrbWFsbG9jKHNpemVvZigqcF9jYWNoZS0+cF9pbmZvKSAqIGNvbnRyb2xfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcF9jYWNoZS0+cF9pbmZvKSB7CiAJCWtmcmVlKHBfY2FjaGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisJbWVtc2V0KHBfY2FjaGUtPnBfaW5mbywgMCwgc2l6ZW9mKCpwX2NhY2hlLT5wX2luZm8pICogY29udHJvbF9jb3VudCk7CiAJcF9jYWNoZS0+Y2FjaGVfc2l6ZV9pbl9ieXRlcyA9IHNpemVfaW5fYnl0ZXM7Ci0JcF9jYWNoZS0+Y29udHJvbF9jb3VudCA9IG51bWJlcl9vZl9jb250cm9sczsKLQlwX2NhY2hlLT5wX2NhY2hlID0KLQkJKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9zaW5nbGUgKilwRFNQX2NvbnRyb2xfYnVmZmVyOworCXBfY2FjaGUtPmNvbnRyb2xfY291bnQgPSBjb250cm9sX2NvdW50OworCXBfY2FjaGUtPnBfY2FjaGUgPSBwX2RzcF9jb250cm9sX2J1ZmZlcjsKIAlwX2NhY2hlLT5pbml0ID0gMDsKIAlyZXR1cm4gcF9jYWNoZTsKIH0KIAogdm9pZCBocGlfZnJlZV9jb250cm9sX2NhY2hlKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZSAqcF9jYWNoZSkKIHsKLQlpZiAocF9jYWNoZS0+aW5pdCkgeworCWlmIChwX2NhY2hlKSB7CiAJCWtmcmVlKHBfY2FjaGUtPnBfaW5mbyk7Ci0JCXBfY2FjaGUtPnBfaW5mbyA9IE5VTEw7Ci0JCXBfY2FjaGUtPmluaXQgPSAwOwogCQlrZnJlZShwX2NhY2hlKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHN1YnN5c19tZXNzYWdlKHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7CisJaHBpX2luaXRfcmVzcG9uc2UocGhyLCBIUElfT0JKX1NVQlNZU1RFTSwgcGhtLT5mdW5jdGlvbiwgMCk7CiAKIAlzd2l0Y2ggKHBobS0+ZnVuY3Rpb24pIHsKIAljYXNlIEhQSV9TVUJTWVNfT1BFTjoKIAljYXNlIEhQSV9TVUJTWVNfQ0xPU0U6CiAJY2FzZSBIUElfU1VCU1lTX0RSSVZFUl9VTkxPQUQ6Ci0JCXBoci0+ZXJyb3IgPSAwOwogCQlicmVhazsKIAljYXNlIEhQSV9TVUJTWVNfRFJJVkVSX0xPQUQ6CiAJCXdpcGVfYWRhcHRlcl9saXN0KCk7CiAJCWhwaW9zX2FsaXN0bG9ja19pbml0KCZhZGFwdGVycyk7Ci0JCXBoci0+ZXJyb3IgPSAwOwogCQlicmVhazsKLQljYXNlIEhQSV9TVUJTWVNfR0VUX0lORk86Ci0JCXN1YnN5c19nZXRfYWRhcHRlcnMocGhyKTsKKwljYXNlIEhQSV9TVUJTWVNfR0VUX0FEQVBURVI6CisJCXN1YnN5c19nZXRfYWRhcHRlcihwaG0sIHBocik7CisJCWJyZWFrOworCWNhc2UgSFBJX1NVQlNZU19HRVRfTlVNX0FEQVBURVJTOgorCQlwaHItPnUucy5udW1fYWRhcHRlcnMgPSBhZGFwdGVycy5nd19udW1fYWRhcHRlcnM7CiAJCWJyZWFrOwogCWNhc2UgSFBJX1NVQlNZU19DUkVBVEVfQURBUFRFUjoKIAljYXNlIEhQSV9TVUJTWVNfREVMRVRFX0FEQVBURVI6Ci0JCXBoci0+ZXJyb3IgPSAwOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfRlVOQzsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmggYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWNtbi5oCmluZGV4IDYyMjkwMjIuLjU5MGYwYjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmgKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGljbW4uaApAQCAtMzMsMTggKzMzLDE5IEBACiB9OwogCiBzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGUgewotCXUzMiBpbml0OwkgICAgIC8qKjwgaW5kaWNhdGVzIHdoZXRoZXIgdGhlCi0JCQkJc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgKi8KKwkvKiogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkICovCisJdTE2IGluaXQ7CisJdTE2IGFkYXBfaWR4OwogCXUzMiBjb250cm9sX2NvdW50OwogCXUzMiBjYWNoZV9zaXplX2luX2J5dGVzOwotCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvCi0JKipwX2luZm87CQkgLyoqPCBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgb2YKLQkJCQlsb29rdXAgcG9pbnRlcnMuICovCi0Jc3RydWN0IGhwaV9jb250cm9sX2NhY2hlX3NpbmdsZQotCSpwX2NhY2hlOwkJIC8qKjwgcG9pbnRlciB0byBEU1AncyBjb250cm9sIGNhY2hlLiAqLworCS8qKiBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgb2YgbG9va3VwIHBvaW50ZXJzLiAqLworCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvICoqcF9pbmZvOworCS8qKiBwb2ludGVyIHRvIERTUCdzIGNvbnRyb2wgY2FjaGUuICovCisJdTggKnBfY2FjaGU7CiB9OwogCiBzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpocGlfZmluZF9hZGFwdGVyKHUxNiBhZGFwdGVyX2luZGV4KTsKKwogdTE2IGhwaV9hZGRfYWRhcHRlcihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8pOwogCiB2b2lkIGhwaV9kZWxldGVfYWRhcHRlcihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8pOwpAQCAtNTIsMTMgKzUzLDEwIEBACiBzaG9ydCBocGlfY2hlY2tfY29udHJvbF9jYWNoZShzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGUgKnBDLAogCXN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpOwogc3RydWN0IGhwaV9jb250cm9sX2NhY2hlICpocGlfYWxsb2NfY29udHJvbF9jYWNoZShjb25zdCB1MzIKLQludW1iZXJfb2ZfY29udHJvbHMsIGNvbnN0IHUzMiBzaXplX2luX2J5dGVzLAotCXN0cnVjdCBocGlfY29udHJvbF9jYWNoZV9pbmZvCi0JKnBEU1BfY29udHJvbF9idWZmZXIpOworCW51bWJlcl9vZl9jb250cm9scywgY29uc3QgdTMyIHNpemVfaW5fYnl0ZXMsIHU4ICpwRFNQX2NvbnRyb2xfYnVmZmVyKTsKIHZvaWQgaHBpX2ZyZWVfY29udHJvbF9jYWNoZShzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGUgKnBfY2FjaGUpOwogCi12b2lkIGhwaV9zeW5jX2NvbnRyb2xfY2FjaGUoc3RydWN0IGhwaV9jb250cm9sX2NhY2hlICpwQywKK3ZvaWQgaHBpX2Ntbl9jb250cm9sX2NhY2hlX3N5bmNfdG9fbXNnKHN0cnVjdCBocGlfY29udHJvbF9jYWNoZSAqcEMsCiAJc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBocik7CisKIHUxNiBocGlfdmFsaWRhdGVfcmVzcG9uc2Uoc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBocik7Ci1zaG9ydCBocGlfY2hlY2tfYnVmZmVyX21hcHBpbmcoc3RydWN0IGhwaV9jb250cm9sX2NhY2hlICpwX2NhY2hlLAotCXN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCB2b2lkICoqcCwgdW5zaWduZWQgaW50ICpwTik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWRlYnVnLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWRlYnVnLmMKaW5kZXggOTQ5ODM2ZS4uYjUyYmFmNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGlkZWJ1Zy5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZGVidWcuYwpAQCAtNDUsMTYxICs0NSwxNCBAQAogCXJldHVybiBocGlfZGVidWdfbGV2ZWw7CiB9CiAKLSNpZmRlZiBIUElPU19ERUJVR19QUklOVAotLyogaW1wbGllcyBPUyBoYXMgbm8gcHJpbnRmLWxpa2UgZnVuY3Rpb24gKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotdm9pZCBocGlfZGVidWdfcHJpbnRmKGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnbGlzdDsKLQljaGFyIGJ1ZmZlclsxMjhdOwotCi0JdmFfc3RhcnQoYXJnbGlzdCwgZm10KTsKLQotCWlmIChidWZmZXJbMF0pCi0JCUhQSU9TX0RFQlVHX1BSSU5UKGJ1ZmZlcik7Ci0JdmFfZW5kKGFyZ2xpc3QpOwotfQotI2VuZGlmCi0KLXN0cnVjdCB0cmVlbm9kZSB7Ci0Jdm9pZCAqYXJyYXk7Ci0JdW5zaWduZWQgaW50IG51bV9lbGVtZW50czsKLX07Ci0KLSNkZWZpbmUgbWFrZV90cmVlbm9kZV9mcm9tX2FycmF5KG5vZGVuYW1lLCBhcnJheSkgXAotc3RhdGljIHZvaWQgKnRtcF9zdHJhcnJheV8jI25vZGVuYW1lW10gPSBhcnJheTsgXAotc3RhdGljIHN0cnVjdCB0cmVlbm9kZSBub2RlbmFtZSA9IHsgXAotCSZ0bXBfc3RyYXJyYXlfIyNub2RlbmFtZSwgXAotCUFSUkFZX1NJWkUodG1wX3N0cmFycmF5XyMjbm9kZW5hbWUpIFwKLX07Ci0KLSNkZWZpbmUgZ2V0X3RyZWVub2RlX2VsZW0obm9kZV9wdHIsIGlkeCwgdHlwZSkgIFwKLQkoJigqKCh0eXBlICopKG5vZGVfcHRyKS0+YXJyYXkpW2lkeF0pKQotCi1tYWtlX3RyZWVub2RlX2Zyb21fYXJyYXkoaHBpX2NvbnRyb2xfdHlwZV9zdHJpbmdzLCBIUElfQ09OVFJPTF9UWVBFX1NUUklOR1MpCi0KLQltYWtlX3RyZWVub2RlX2Zyb21fYXJyYXkoaHBpX3N1YnN5c19zdHJpbmdzLCBIUElfU1VCU1lTX1NUUklOR1MpCi0JbWFrZV90cmVlbm9kZV9mcm9tX2FycmF5KGhwaV9hZGFwdGVyX3N0cmluZ3MsIEhQSV9BREFQVEVSX1NUUklOR1MpCi0JbWFrZV90cmVlbm9kZV9mcm9tX2FycmF5KGhwaV9pc3RyZWFtX3N0cmluZ3MsIEhQSV9JU1RSRUFNX1NUUklOR1MpCi0JbWFrZV90cmVlbm9kZV9mcm9tX2FycmF5KGhwaV9vc3RyZWFtX3N0cmluZ3MsIEhQSV9PU1RSRUFNX1NUUklOR1MpCi0JbWFrZV90cmVlbm9kZV9mcm9tX2FycmF5KGhwaV9taXhlcl9zdHJpbmdzLCBIUElfTUlYRVJfU1RSSU5HUykKLQltYWtlX3RyZWVub2RlX2Zyb21fYXJyYXkoaHBpX25vZGVfc3RyaW5ncywKLQl7Ci0JIk5PREUgaXMgaW52YWxpZCBvYmplY3QifSkKLQotCW1ha2VfdHJlZW5vZGVfZnJvbV9hcnJheShocGlfY29udHJvbF9zdHJpbmdzLCBIUElfQ09OVFJPTF9TVFJJTkdTKQotCW1ha2VfdHJlZW5vZGVfZnJvbV9hcnJheShocGlfbnZtZW1vcnlfc3RyaW5ncywgSFBJX09CSl9TVFJJTkdTKQotCW1ha2VfdHJlZW5vZGVfZnJvbV9hcnJheShocGlfZGlnaXRhbGlvX3N0cmluZ3MsIEhQSV9ESUdJVEFMSU9fU1RSSU5HUykKLQltYWtlX3RyZWVub2RlX2Zyb21fYXJyYXkoaHBpX3dhdGNoZG9nX3N0cmluZ3MsIEhQSV9XQVRDSERPR19TVFJJTkdTKQotCW1ha2VfdHJlZW5vZGVfZnJvbV9hcnJheShocGlfY2xvY2tfc3RyaW5ncywgSFBJX0NMT0NLX1NUUklOR1MpCi0JbWFrZV90cmVlbm9kZV9mcm9tX2FycmF5KGhwaV9wcm9maWxlX3N0cmluZ3MsIEhQSV9QUk9GSUxFX1NUUklOR1MpCi0JbWFrZV90cmVlbm9kZV9mcm9tX2FycmF5KGhwaV9hc3luY2V2ZW50X3N0cmluZ3MsIEhQSV9BU1lOQ0VWRU5UX1NUUklOR1MpCi0jZGVmaW5lIEhQSV9GVU5DVElPTl9TVFJJTkdTIFwKLXsgXAotICAmaHBpX3N1YnN5c19zdHJpbmdzLFwKLSAgJmhwaV9hZGFwdGVyX3N0cmluZ3MsXAotICAmaHBpX29zdHJlYW1fc3RyaW5ncyxcCi0gICZocGlfaXN0cmVhbV9zdHJpbmdzLFwKLSAgJmhwaV9taXhlcl9zdHJpbmdzLFwKLSAgJmhwaV9ub2RlX3N0cmluZ3MsXAotICAmaHBpX2NvbnRyb2xfc3RyaW5ncyxcCi0gICZocGlfbnZtZW1vcnlfc3RyaW5ncyxcCi0gICZocGlfZGlnaXRhbGlvX3N0cmluZ3MsXAotICAmaHBpX3dhdGNoZG9nX3N0cmluZ3MsXAotICAmaHBpX2Nsb2NrX3N0cmluZ3MsXAotICAmaHBpX3Byb2ZpbGVfc3RyaW5ncyxcCi0gICZocGlfY29udHJvbF9zdHJpbmdzLCBcCi0gICZocGlfYXN5bmNldmVudF9zdHJpbmdzIFwKLX0KLQltYWtlX3RyZWVub2RlX2Zyb21fYXJyYXkoaHBpX2Z1bmN0aW9uX3N0cmluZ3MsIEhQSV9GVU5DVElPTl9TVFJJTkdTKQotCi0JY29tcGlsZV90aW1lX2Fzc2VydChIUElfT0JKX01BWElOREVYID09IDE0LCBvYmpfbGlzdF9kb2VzbnRfbWF0Y2gpOwotCi1zdGF0aWMgY2hhciAqaHBpX2Z1bmN0aW9uX3N0cmluZyh1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCi17Ci0JdW5zaWduZWQgaW50IG9iamVjdDsKLQlzdHJ1Y3QgdHJlZW5vZGUgKnRtcDsKLQotCW9iamVjdCA9IGZ1bmN0aW9uIC8gSFBJX09CSl9GVU5DVElPTl9TUEFDSU5HOwotCWZ1bmN0aW9uID0gZnVuY3Rpb24gLSBvYmplY3QgKiBIUElfT0JKX0ZVTkNUSU9OX1NQQUNJTkc7Ci0KLQlpZiAob2JqZWN0ID09IDAgfHwgb2JqZWN0ID09IEhQSV9PQkpfTk9ERQotCQl8fCBvYmplY3QgPiBocGlfZnVuY3Rpb25fc3RyaW5ncy5udW1fZWxlbWVudHMpCi0JCXJldHVybiAiaW52YWxpZCBvYmplY3QiOwotCi0JdG1wID0gZ2V0X3RyZWVub2RlX2VsZW0oJmhwaV9mdW5jdGlvbl9zdHJpbmdzLCBvYmplY3QgLSAxLAotCQlzdHJ1Y3QgdHJlZW5vZGUgKik7Ci0KLQlpZiAoZnVuY3Rpb24gPT0gMCB8fCBmdW5jdGlvbiA+IHRtcC0+bnVtX2VsZW1lbnRzKQotCQlyZXR1cm4gImludmFsaWQgZnVuY3Rpb24iOwotCi0JcmV0dXJuIGdldF90cmVlbm9kZV9lbGVtKHRtcCwgZnVuY3Rpb24gLSAxLCBjaGFyICopOwotfQotCiB2b2lkIGhwaV9kZWJ1Z19tZXNzYWdlKHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBjaGFyICpzel9maWxlbGluZSkKIHsKIAlpZiAocGhtKSB7Ci0JCWlmICgocGhtLT5vYmplY3QgPD0gSFBJX09CSl9NQVhJTkRFWCkgJiYgcGhtLT5vYmplY3QpIHsKLQkJCXUxNiBpbmRleCA9IDA7Ci0JCQl1MTYgYXR0cmliID0gMDsKLQkJCWludCBpc19jb250cm9sID0gMDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkhQSV9NU0clZCwlZCwlZCwlZCwlZFxuIiwgcGhtLT52ZXJzaW9uLAorCQkJcGhtLT5hZGFwdGVyX2luZGV4LCBwaG0tPm9ial9pbmRleCwgcGhtLT5mdW5jdGlvbiwKKwkJCXBobS0+dS5jLmF0dHJpYnV0ZSk7CisJfQogCi0JCQlpbmRleCA9IHBobS0+b2JqX2luZGV4OwotCQkJc3dpdGNoIChwaG0tPm9iamVjdCkgewotCQkJY2FzZSBIUElfT0JKX0FEQVBURVI6Ci0JCQljYXNlIEhQSV9PQkpfUFJPRklMRToKLQkJCQlicmVhazsKLQkJCWNhc2UgSFBJX09CSl9NSVhFUjoKLQkJCQlpZiAocGhtLT5mdW5jdGlvbiA9PQotCQkJCQlIUElfTUlYRVJfR0VUX0NPTlRST0xfQllfSU5ERVgpCi0JCQkJCWluZGV4ID0gcGhtLT51Lm0uY29udHJvbF9pbmRleDsKLQkJCQlicmVhazsKLQkJCWNhc2UgSFBJX09CSl9PU1RSRUFNOgotCQkJY2FzZSBIUElfT0JKX0lTVFJFQU06Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgSFBJX09CSl9DT05UUk9MRVg6Ci0JCQljYXNlIEhQSV9PQkpfQ09OVFJPTDoKLQkJCQlpZiAocGhtLT52ZXJzaW9uID09IDEpCi0JCQkJCWF0dHJpYiA9IEhQSV9DVExfQVRUUihVTklWRVJTQUwsIDEpOwotCQkJCWVsc2UKLQkJCQkJYXR0cmliID0gcGhtLT51LmMuYXR0cmlidXRlOwotCQkJCWlzX2NvbnRyb2wgPSAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKGlzX2NvbnRyb2wgJiYgKGF0dHJpYiAmIDB4RkYwMCkpIHsKLQkJCQlpbnQgY29udHJvbF90eXBlID0gKGF0dHJpYiAmIDB4RkYwMCkgPj4gODsKLQkJCQlpbnQgYXR0cl9pbmRleCA9IEhQSV9DVExfQVRUUl9JTkRFWChhdHRyaWIpOwotCQkJCS8qIG5vdGUgdGhlIEtFUk4gZmFjaWxpdHkgbGV2ZWwKLQkJCQkgICBpcyBpbiBzekZpbGVsaW5lIGFscmVhZHkgKi8KLQkJCQlwcmludGsoIiVzIGFkYXB0ZXIgJWQgJXMgIgotCQkJCQkiY3RybF9pbmRleCB4JTA0eCAlcyAlZFxuIiwKLQkJCQkJc3pfZmlsZWxpbmUsIHBobS0+YWRhcHRlcl9pbmRleCwKLQkJCQkJaHBpX2Z1bmN0aW9uX3N0cmluZyhwaG0tPmZ1bmN0aW9uKSwKLQkJCQkJaW5kZXgsCi0JCQkJCWdldF90cmVlbm9kZV9lbGVtCi0JCQkJCSgmaHBpX2NvbnRyb2xfdHlwZV9zdHJpbmdzLAotCQkJCQkJY29udHJvbF90eXBlLCBjaGFyICopLAotCQkJCQlhdHRyX2luZGV4KTsKLQotCQkJfSBlbHNlCi0JCQkJcHJpbnRrKCIlcyBhZGFwdGVyICVkICVzICIKLQkJCQkJImlkeCB4JTA0eCBhdHRyIHglMDR4IFxuIiwKLQkJCQkJc3pfZmlsZWxpbmUsIHBobS0+YWRhcHRlcl9pbmRleCwKLQkJCQkJaHBpX2Z1bmN0aW9uX3N0cmluZyhwaG0tPmZ1bmN0aW9uKSwKLQkJCQkJaW5kZXgsIGF0dHJpYik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoImFkYXA9JWQsIGludmFsaWQgb2JqPSVkLCBmdW5jPTB4JXhcbiIsCi0JCQkJcGhtLT5hZGFwdGVyX2luZGV4LCBwaG0tPm9iamVjdCwKLQkJCQlwaG0tPmZ1bmN0aW9uKTsKLQkJfQotCX0gZWxzZQotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJOVUxMIG1lc3NhZ2UgcG9pbnRlciB0byBocGlfZGVidWdfbWVzc2FnZSFcbiIpOwogfQogCiB2b2lkIGhwaV9kZWJ1Z19kYXRhKHUxNiAqcGRhdGEsIHUzMiBsZW4pCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWRlYnVnLmggYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWRlYnVnLmgKaW5kZXggYTJmMDk1Mi4uOTQwZjU0YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGlkZWJ1Zy5oCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZGVidWcuaApAQCAtMzcsNyArMzcsNyBAQAogI2RlZmluZSBIUElfREVCVUdfTEVWRUxfREVGQVVMVCBIUElfREVCVUdfTEVWRUxfTk9USUNFCiAKIC8qIGFuIE9TIGNhbiBkZWZpbmUgYW4gZXh0cmEgZmxhZyBzdHJpbmcgdGhhdCBpcyBhcHBlbmRlZCB0bwotICAgdGhlIHN0YXJ0IG9mIGVhY2ggbWVzc2FnZSwgZWcgc2VlIGhwaW9zX2xpbnV4LmggKi8KKyAgIHRoZSBzdGFydCBvZiBlYWNoIG1lc3NhZ2UsIGVnIHNlZSBsaW51eCBrZXJuZWwgaHBpb3MuaCAqLwogCiAjaWZkZWYgU09VUkNFRklMRV9OQU1FCiAjZGVmaW5lIEZJTEVfTElORSAgU09VUkNFRklMRV9OQU1FICI6IiBfX3N0cmluZ2lmeShfX0xJTkVfXykgIiAiCkBAIC00NSwxOCArNDUsMTEgQEAKICNkZWZpbmUgRklMRV9MSU5FICBfX0ZJTEVfXyAiOiIgX19zdHJpbmdpZnkoX19MSU5FX18pICIgIgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhQSV9ERUJVRykgJiYgZGVmaW5lZChfV0lORE9XUykKLSNkZWZpbmUgSFBJX0RFQlVHQlJFQUsoKSBkZWJ1Z19icmVhaygpCi0jZWxzZQotI2RlZmluZSBIUElfREVCVUdCUkVBSygpCi0jZW5kaWYKLQogI2RlZmluZSBIUElfREVCVUdfQVNTRVJUKGV4cHJlc3Npb24pIFwKIAlkbyB7IFwKLQkJaWYgKCEoZXhwcmVzc2lvbikpIHtcCi0JCQlwcmludGsoS0VSTl9FUlIgIEZJTEVfTElORVwKLQkJCQkiQVNTRVJUICIgX19zdHJpbmdpZnkoZXhwcmVzc2lvbikpO1wKLQkJCUhQSV9ERUJVR0JSRUFLKCk7XAorCQlpZiAoIShleHByZXNzaW9uKSkgeyBcCisJCQlwcmludGsoS0VSTl9FUlIgIEZJTEVfTElORSBcCisJCQkJIkFTU0VSVCAiIF9fc3RyaW5naWZ5KGV4cHJlc3Npb24pKTsgXAogCQl9IFwKIAl9IHdoaWxlICgwKQogCkBAIC03OCwyOCArNzEsMjcgQEAKIAogdm9pZCBocGlfZGVidWdfZGF0YSh1MTYgKnBkYXRhLCB1MzIgbGVuKTsKIAotI2RlZmluZSBIUElfREVCVUdfREFUQShwZGF0YSwgbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEhQSV9ERUJVR19EQVRBKHBkYXRhLCBsZW4pIFwKKwlkbyB7IFwKIAkJaWYgKGhwaV9kZWJ1Z19sZXZlbCA+PSBIUElfREVCVUdfTEVWRUxfVkVSQk9TRSkgXAogCQkJaHBpX2RlYnVnX2RhdGEocGRhdGEsIGxlbik7IFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIEhQSV9ERUJVR19NRVNTQUdFKGxldmVsLCBwaG0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKGhwaV9kZWJ1Z19sZXZlbCA+PSBIUElfREVCVUdfTEVWRUxfIyNsZXZlbCkgeyAgICAgICAgIFwKLQkJCWhwaV9kZWJ1Z19tZXNzYWdlKHBobSxIUElfREVCVUdfRkxBR18jI2xldmVsICAgIFwKLQkJCQlGSUxFX0xJTkUgX19zdHJpbmdpZnkobGV2ZWwpKTtcCi0JCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBIUElfREVCVUdfTUVTU0FHRShsZXZlbCwgcGhtKSBcCisJZG8geyBcCisJCWlmIChocGlfZGVidWdfbGV2ZWwgPj0gSFBJX0RFQlVHX0xFVkVMXyMjbGV2ZWwpIHsgXAorCQkJaHBpX2RlYnVnX21lc3NhZ2UocGhtLCBIUElfREVCVUdfRkxBR18jI2xldmVsIFwKKwkJCQlGSUxFX0xJTkUgX19zdHJpbmdpZnkobGV2ZWwpKTsgXAorCQl9IFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIEhQSV9ERUJVR19SRVNQT05TRShwaHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKChocGlfZGVidWdfbGV2ZWwgPj0gSFBJX0RFQlVHX0xFVkVMX0RFQlVHKSAmJiAocGhyLT5lcnJvcikpXAotCQkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgXAotCQkJCSJIUEkgcmVzcG9uc2UgLSBlcnJvciMgJWRcbiIsIFwKLQkJCQlwaHItPmVycm9yKTsgXAotCQllbHNlIGlmIChocGlfZGVidWdfbGV2ZWwgPj0gSFBJX0RFQlVHX0xFVkVMX1ZFUkJPU0UpIFwKLQkJCUhQSV9ERUJVR19MT0coVkVSQk9TRSwgIkhQSSByZXNwb25zZSBPS1xuIik7XAorI2RlZmluZSBIUElfREVCVUdfUkVTUE9OU0UocGhyKSBcCisJZG8geyBcCisJCWlmICgoKGhwaV9kZWJ1Z19sZXZlbCA+PSBIUElfREVCVUdfTEVWRUxfREVCVUcpICYmIFwKKwkJCShwaHItPmVycm9yKSkgfHxcCisJCShocGlfZGVidWdfbGV2ZWwgPj0gSFBJX0RFQlVHX0xFVkVMX1ZFUkJPU0UpKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiSFBJX1JFUyVkLCVkLCVkXG4iLCBcCisJCQkJcGhyLT52ZXJzaW9uLCBwaHItPmVycm9yLCBwaHItPnNwZWNpZmljX2Vycm9yKTsgXAogCX0gd2hpbGUgKDApCiAKICNpZm5kZWYgY29tcGlsZV90aW1lX2Fzc2VydApAQCAtMTA3LDI3OSArOTksNCBAQAogICAgIHR5cGVkZWYgY2hhciBtc2dbKGNvbmQpID8gMSA6IC0xXQogI2VuZGlmCiAKLQkgIC8qIGNoZWNrIHRoYXQgc2l6ZSBpcyBleGFjdGx5IHNvbWUgbnVtYmVyICovCi0jZGVmaW5lIGZ1bmN0aW9uX2NvdW50X2NoZWNrKHN5bSwgc2l6ZSkgXAotICAgIGNvbXBpbGVfdGltZV9hc3NlcnQoKHN5bSMjX0ZVTkNUSU9OX0NPVU5UKSA9PSAoc2l6ZSksXAotCSAgICBzdHJpbmdzX21hdGNoX2RlZnNfIyNzeW0pCi0KLS8qIFRoZXNlIHN0cmluZ3Mgc2hvdWxkIGJlIGdlbmVyYXRlZCB1c2luZyBhIG1hY3JvIHdoaWNoIGRlZmluZXMKLSAgIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbCB2YWx1ZXMuICAqLwotI2RlZmluZSBIUElfT0JKX1NUUklOR1MgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICJIUElfT0JKX1NVQlNZU1RFTSIsICAgICAgICBcCi0gICJIUElfT0JKX0FEQVBURVIiLCAgICAgICAgICBcCi0gICJIUElfT0JKX09TVFJFQU0iLCAgICAgICAgICBcCi0gICJIUElfT0JKX0lTVFJFQU0iLCAgICAgICAgICBcCi0gICJIUElfT0JKX01JWEVSIiwgICAgICAgICAgICBcCi0gICJIUElfT0JKX05PREUiLCAgICAgICAgICAgICBcCi0gICJIUElfT0JKX0NPTlRST0wiLCAgICAgICAgICBcCi0gICJIUElfT0JKX05WTUVNT1JZIiwgICAgICAgICBcCi0gICJIUElfT0JKX0RJR0lUQUxJTyIsICAgICAgICBcCi0gICJIUElfT0JKX1dBVENIRE9HIiwgICAgICAgICBcCi0gICJIUElfT0JKX0NMT0NLIiwgICAgICAgICAgICBcCi0gICJIUElfT0JKX1BST0ZJTEUiLCAgICAgICAgICBcCi0gICJIUElfT0JKX0NPTlRST0xFWCIgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgSFBJX1NVQlNZU19TVFJJTkdTICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICJIUElfU1VCU1lTX09QRU4iLCAgICAgICAgICBcCi0gICJIUElfU1VCU1lTX0dFVF9WRVJTSU9OIiwgICBcCi0gICJIUElfU1VCU1lTX0dFVF9JTkZPIiwgICAgICBcCi0gICJIUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMiLCBcCi0gICJIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSIixcCi0gICJIUElfU1VCU1lTX0NMT1NFIiwgICAgICAgICBcCi0gICJIUElfU1VCU1lTX0RFTEVURV9BREFQVEVSIiwgXAotICAiSFBJX1NVQlNZU19EUklWRVJfTE9BRCIsIFwKLSAgIkhQSV9TVUJTWVNfRFJJVkVSX1VOTE9BRCIsIFwKLSAgIkhQSV9TVUJTWVNfUkVBRF9QT1JUXzgiLCAgIFwKLSAgIkhQSV9TVUJTWVNfV1JJVEVfUE9SVF84IiwgIFwKLSAgIkhQSV9TVUJTWVNfR0VUX05VTV9BREFQVEVSUyIsXAotICAiSFBJX1NVQlNZU19HRVRfQURBUFRFUiIsICAgXAotICAiSFBJX1NVQlNZU19TRVRfTkVUV09SS19JTlRFUkZBQ0UiXAotfQotZnVuY3Rpb25fY291bnRfY2hlY2soSFBJX1NVQlNZUywgMTQpOwotCi0jZGVmaW5lIEhQSV9BREFQVEVSX1NUUklOR1MgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiSFBJX0FEQVBURVJfT1BFTiIsICAgICAgICAgXAotICAiSFBJX0FEQVBURVJfQ0xPU0UiLCAgICAgICAgXAotICAiSFBJX0FEQVBURVJfR0VUX0lORk8iLCAgICAgXAotICAiSFBJX0FEQVBURVJfR0VUX0FTU0VSVCIsICAgXAotICAiSFBJX0FEQVBURVJfVEVTVF9BU1NFUlQiLCAgICBcCi0gICJIUElfQURBUFRFUl9TRVRfTU9ERSIsICAgICAgIFwKLSAgIkhQSV9BREFQVEVSX0dFVF9NT0RFIiwgICAgICAgXAotICAiSFBJX0FEQVBURVJfRU5BQkxFX0NBUEFCSUxJVFkiLFwKLSAgIkhQSV9BREFQVEVSX1NFTEZURVNUIiwgICAgICAgIFwKLSAgIkhQSV9BREFQVEVSX0ZJTkRfT0JKRUNUIiwgICAgIFwKLSAgIkhQSV9BREFQVEVSX1FVRVJZX0ZMQVNIIiwgICAgIFwKLSAgIkhQSV9BREFQVEVSX1NUQVJUX0ZMQVNIIiwgICAgIFwKLSAgIkhQSV9BREFQVEVSX1BST0dSQU1fRkxBU0giLCAgIFwKLSAgIkhQSV9BREFQVEVSX1NFVF9QUk9QRVJUWSIsICAgIFwKLSAgIkhQSV9BREFQVEVSX0dFVF9QUk9QRVJUWSIsICAgIFwKLSAgIkhQSV9BREFQVEVSX0VOVU1fUFJPUEVSVFkiLCAgICBcCi0gICJIUElfQURBUFRFUl9NT0RVTEVfSU5GTyIsICAgIFwKLSAgIkhQSV9BREFQVEVSX0RFQlVHX1JFQUQiICAgIFwKLX0KLQotZnVuY3Rpb25fY291bnRfY2hlY2soSFBJX0FEQVBURVIsIDE4KTsKLQotI2RlZmluZSBIUElfT1NUUkVBTV9TVFJJTkdTICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIkhQSV9PU1RSRUFNX09QRU4iLCAgICAgICAgIFwKLSAgIkhQSV9PU1RSRUFNX0NMT1NFIiwgICAgICAgIFwKLSAgIkhQSV9PU1RSRUFNX1dSSVRFIiwgICAgICAgIFwKLSAgIkhQSV9PU1RSRUFNX1NUQVJUIiwgICAgICAgIFwKLSAgIkhQSV9PU1RSRUFNX1NUT1AiLCAgICAgICAgIFwKLSAgIkhQSV9PU1RSRUFNX1JFU0VUIiwgICAgICAgICAgICAgICAgXAotICAiSFBJX09TVFJFQU1fR0VUX0lORk8iLCAgICAgXAotICAiSFBJX09TVFJFQU1fUVVFUllfRk9STUFUIiwgXAotICAiSFBJX09TVFJFQU1fREFUQSIsICAgICAgICAgXAotICAiSFBJX09TVFJFQU1fU0VUX1ZFTE9DSVRZIiwgXAotICAiSFBJX09TVFJFQU1fU0VUX1BVTkNISU5PVVQiLCBcCi0gICJIUElfT1NUUkVBTV9TSU5FR0VOIiwgICAgICAgIFwKLSAgIkhQSV9PU1RSRUFNX0FOQ19SRVNFVCIsICAgICAgXAotICAiSFBJX09TVFJFQU1fQU5DX0dFVF9JTkZPIiwgICBcCi0gICJIUElfT1NUUkVBTV9BTkNfUkVBRCIsICAgICAgIFwKLSAgIkhQSV9PU1RSRUFNX1NFVF9USU1FU0NBTEUiLFwKLSAgIkhQSV9PU1RSRUFNX1NFVF9GT1JNQVQiLCBcCi0gICJIUElfT1NUUkVBTV9IT1NUQlVGRkVSX0FMTE9DIiwgXAotICAiSFBJX09TVFJFQU1fSE9TVEJVRkZFUl9GUkVFIiwgXAotICAiSFBJX09TVFJFQU1fR1JPVVBfQUREIixcCi0gICJIUElfT1NUUkVBTV9HUk9VUF9HRVRNQVAiLCBcCi0gICJIUElfT1NUUkVBTV9HUk9VUF9SRVNFVCIsIFwKLSAgIkhQSV9PU1RSRUFNX0hPU1RCVUZGRVJfR0VUX0lORk8iLCBcCi0gICJIUElfT1NUUkVBTV9XQUlUX1NUQVJUIiwgXAotfQotZnVuY3Rpb25fY291bnRfY2hlY2soSFBJX09TVFJFQU0sIDI0KTsKLQotI2RlZmluZSBIUElfSVNUUkVBTV9TVFJJTkdTICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIkhQSV9JU1RSRUFNX09QRU4iLCAgICAgICAgIFwKLSAgIkhQSV9JU1RSRUFNX0NMT1NFIiwgICAgICAgIFwKLSAgIkhQSV9JU1RSRUFNX1NFVF9GT1JNQVQiLCAgIFwKLSAgIkhQSV9JU1RSRUFNX1JFQUQiLCAgICAgICAgIFwKLSAgIkhQSV9JU1RSRUFNX1NUQVJUIiwgICAgICAgIFwKLSAgIkhQSV9JU1RSRUFNX1NUT1AiLCAgICAgICAgIFwKLSAgIkhQSV9JU1RSRUFNX1JFU0VUIiwgICAgICAgIFwKLSAgIkhQSV9JU1RSRUFNX0dFVF9JTkZPIiwgICAgIFwKLSAgIkhQSV9JU1RSRUFNX1FVRVJZX0ZPUk1BVCIsIFwKLSAgIkhQSV9JU1RSRUFNX0FOQ19SRVNFVCIsICAgICAgXAotICAiSFBJX0lTVFJFQU1fQU5DX0dFVF9JTkZPIiwgICBcCi0gICJIUElfSVNUUkVBTV9BTkNfV1JJVEUiLCAgIFwKLSAgIkhQSV9JU1RSRUFNX0hPU1RCVUZGRVJfQUxMT0MiLFwKLSAgIkhQSV9JU1RSRUFNX0hPU1RCVUZGRVJfRlJFRSIsIFwKLSAgIkhQSV9JU1RSRUFNX0dST1VQX0FERCIsIFwKLSAgIkhQSV9JU1RSRUFNX0dST1VQX0dFVE1BUCIsIFwKLSAgIkhQSV9JU1RSRUFNX0dST1VQX1JFU0VUIiwgXAotICAiSFBJX0lTVFJFQU1fSE9TVEJVRkZFUl9HRVRfSU5GTyIsIFwKLSAgIkhQSV9JU1RSRUFNX1dBSVRfU1RBUlQiLCBcCi19Ci1mdW5jdGlvbl9jb3VudF9jaGVjayhIUElfSVNUUkVBTSwgMTkpOwotCi0jZGVmaW5lIEhQSV9NSVhFUl9TVFJJTkdTICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiSFBJX01JWEVSX09QRU4iLCAgICAgICAgICAgXAotICAiSFBJX01JWEVSX0NMT1NFIiwgICAgICAgICAgXAotICAiSFBJX01JWEVSX0dFVF9JTkZPIiwgICAgICAgXAotICAiSFBJX01JWEVSX0dFVF9OT0RFX0lORk8iLCAgXAotICAiSFBJX01JWEVSX0dFVF9DT05UUk9MIiwgICAgXAotICAiSFBJX01JWEVSX1NFVF9DT05ORUNUSU9OIiwgXAotICAiSFBJX01JWEVSX0dFVF9DT05ORUNUSU9OUyIsICAgICAgICBcCi0gICJIUElfTUlYRVJfR0VUX0NPTlRST0xfQllfSU5ERVgiLCAgIFwKLSAgIkhQSV9NSVhFUl9HRVRfQ09OVFJPTF9BUlJBWV9CWV9JTkRFWCIsICAgICBcCi0gICJIUElfTUlYRVJfR0VUX0NPTlRST0xfTVVMVElQTEVfVkFMVUVTIiwgICAgXAotICAiSFBJX01JWEVSX1NUT1JFIiwgIFwKLX0KLWZ1bmN0aW9uX2NvdW50X2NoZWNrKEhQSV9NSVhFUiwgMTEpOwotCi0jZGVmaW5lIEhQSV9DT05UUk9MX1NUUklOR1MgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiSFBJX0NPTlRST0xfR0VUX0lORk8iLCAgICAgXAotICAiSFBJX0NPTlRST0xfR0VUX1NUQVRFIiwgICAgXAotICAiSFBJX0NPTlRST0xfU0VUX1NUQVRFIiAgICAgXAotfQotZnVuY3Rpb25fY291bnRfY2hlY2soSFBJX0NPTlRST0wsIDMpOwotCi0jZGVmaW5lIEhQSV9OVk1FTU9SWV9TVFJJTkdTICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiSFBJX05WTUVNT1JZX09QRU4iLCAgICAgICAgXAotICAiSFBJX05WTUVNT1JZX1JFQURfQllURSIsICAgXAotICAiSFBJX05WTUVNT1JZX1dSSVRFX0JZVEUiICAgXAotfQotZnVuY3Rpb25fY291bnRfY2hlY2soSFBJX05WTUVNT1JZLCAzKTsKLQotI2RlZmluZSBIUElfRElHSVRBTElPX1NUUklOR1MgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIkhQSV9HUElPX09QRU4iLCAgICAgICAgICAgIFwKLSAgIkhQSV9HUElPX1JFQURfQklUIiwgICAgICAgIFwKLSAgIkhQSV9HUElPX1dSSVRFX0JJVCIsICAgICAgIFwKLSAgIkhQSV9HUElPX1JFQURfQUxMIiwgICAgICAgICAgICAgICAgXAotICAiSFBJX0dQSU9fV1JJVEVfU1RBVFVTIlwKLX0KLWZ1bmN0aW9uX2NvdW50X2NoZWNrKEhQSV9HUElPLCA1KTsKLQotI2RlZmluZSBIUElfV0FUQ0hET0dfU1RSSU5HUyAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIkhQSV9XQVRDSERPR19PUEVOIiwgICAgICAgIFwKLSAgIkhQSV9XQVRDSERPR19TRVRfVElNRSIsICAgIFwKLSAgIkhQSV9XQVRDSERPR19QSU5HIiAgICAgICAgIFwKLX0KLQotI2RlZmluZSBIUElfQ0xPQ0tfU1RSSU5HUyAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIkhQSV9DTE9DS19PUEVOIiwgICAgICAgICAgIFwKLSAgIkhQSV9DTE9DS19TRVRfVElNRSIsICAgICAgIFwKLSAgIkhQSV9DTE9DS19HRVRfVElNRSIgICAgICAgIFwKLX0KLQotI2RlZmluZSBIUElfUFJPRklMRV9TVFJJTkdTICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIkhQSV9QUk9GSUxFX09QRU5fQUxMIiwgICAgIFwKLSAgIkhQSV9QUk9GSUxFX1NUQVJUX0FMTCIsICAgIFwKLSAgIkhQSV9QUk9GSUxFX1NUT1BfQUxMIiwgICAgIFwKLSAgIkhQSV9QUk9GSUxFX0dFVCIsICAgICAgICAgIFwKLSAgIkhQSV9QUk9GSUxFX0dFVF9JRExFQ09VTlQiLCAgXAotICAiSFBJX1BST0ZJTEVfR0VUX05BTUUiLCAgICAgICBcCi0gICJIUElfUFJPRklMRV9HRVRfVVRJTElaQVRJT04iIFwKLX0KLWZ1bmN0aW9uX2NvdW50X2NoZWNrKEhQSV9QUk9GSUxFLCA3KTsKLQotI2RlZmluZSBIUElfQVNZTkNFVkVOVF9TVFJJTkdTICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIkhQSV9BU1lOQ0VWRU5UX09QRU4iLFwKLSAgIkhQSV9BU1lOQ0VWRU5UX0NMT1NFICAiLFwKLSAgIkhQSV9BU1lOQ0VWRU5UX1dBSVQiLFwKLSAgIkhQSV9BU1lOQ0VWRU5UX0dFVENPVU5UIixcCi0gICJIUElfQVNZTkNFVkVOVF9HRVQiLFwKLSAgIkhQSV9BU1lOQ0VWRU5UX1NFTkRFVkVOVFMiXAotfQotZnVuY3Rpb25fY291bnRfY2hlY2soSFBJX0FTWU5DRVZFTlQsIDYpOwotCi0jZGVmaW5lIEhQSV9DT05UUk9MX1RZUEVfU1RSSU5HUyBcCi17IFwKLQkibnVsbCBjb250cm9sIiwgXAotCSJIUElfQ09OVFJPTF9DT05ORUNUSU9OIiwgXAotCSJIUElfQ09OVFJPTF9WT0xVTUUiLCBcCi0JIkhQSV9DT05UUk9MX01FVEVSIiwgXAotCSJIUElfQ09OVFJPTF9NVVRFIiwgXAotCSJIUElfQ09OVFJPTF9NVUxUSVBMRVhFUiIsIFwKLQkiSFBJX0NPTlRST0xfQUVTRUJVX1RSQU5TTUlUVEVSIiwgXAotCSJIUElfQ09OVFJPTF9BRVNFQlVfUkVDRUlWRVIiLCBcCi0JIkhQSV9DT05UUk9MX0xFVkVMIiwgXAotCSJIUElfQ09OVFJPTF9UVU5FUiIsIFwKLQkiSFBJX0NPTlRST0xfT05PRkZTV0lUQ0giLCBcCi0JIkhQSV9DT05UUk9MX1ZPWCIsIFwKLQkiSFBJX0NPTlRST0xfQUVTMThfVFJBTlNNSVRURVIiLCBcCi0JIkhQSV9DT05UUk9MX0FFUzE4X1JFQ0VJVkVSIiwgXAotCSJIUElfQ09OVFJPTF9BRVMxOF9CTE9DS0dFTkVSQVRPUiIsIFwKLQkiSFBJX0NPTlRST0xfQ0hBTk5FTF9NT0RFIiwgXAotCSJIUElfQ09OVFJPTF9CSVRTVFJFQU0iLCBcCi0JIkhQSV9DT05UUk9MX1NBTVBMRUNMT0NLIiwgXAotCSJIUElfQ09OVFJPTF9NSUNST1BIT05FIiwgXAotCSJIUElfQ09OVFJPTF9QQVJBTUVUUklDX0VRIiwgXAotCSJIUElfQ09OVFJPTF9DT01QQU5ERVIiLCBcCi0JIkhQSV9DT05UUk9MX0NPQlJBTkVUIiwgXAotCSJIUElfQ09OVFJPTF9UT05FX0RFVEVDVCIsIFwKLQkiSFBJX0NPTlRST0xfU0lMRU5DRV9ERVRFQ1QiLCBcCi0JIkhQSV9DT05UUk9MX1BBRCIsIFwKLQkiSFBJX0NPTlRST0xfU1JDIiAsXAotCSJIUElfQ09OVFJPTF9VTklWRVJTQUwiIFwKLX0KLQotY29tcGlsZV90aW1lX2Fzc2VydCgoSFBJX0NPTlRST0xfTEFTVF9JTkRFWCArIDEgPT0gMjcpLAotCWNvbnRyb2x0eXBlX3N0cmluZ3NfbWF0Y2hfZGVmcyk7Ci0KLSNkZWZpbmUgSFBJX1NPVVJDRU5PREVfU1RSSU5HUyBcCi17IFwKLQkibm8gc291cmNlIiwgXAotCSJIUElfU09VUkNFTk9ERV9PU1RSRUFNIiwgXAotCSJIUElfU09VUkNFTk9ERV9MSU5FSU4iLCBcCi0JIkhQSV9TT1VSQ0VOT0RFX0FFU0VCVV9JTiIsIFwKLQkiSFBJX1NPVVJDRU5PREVfVFVORVIiLCBcCi0JIkhQSV9TT1VSQ0VOT0RFX1JGIiwgXAotCSJIUElfU09VUkNFTk9ERV9DTE9DS19TT1VSQ0UiLCBcCi0JIkhQSV9TT1VSQ0VOT0RFX1JBV19CSVRTVFJFQU0iLCBcCi0JIkhQSV9TT1VSQ0VOT0RFX01JQ1JPUEhPTkUiLCBcCi0JIkhQSV9TT1VSQ0VOT0RFX0NPQlJBTkVUIiwgXAotCSJIUElfU09VUkNFTk9ERV9BTkFMT0ciLCBcCi0JIkhQSV9TT1VSQ0VOT0RFX0FEQVBURVIiIFwKLX0KLQotY29tcGlsZV90aW1lX2Fzc2VydCgoSFBJX1NPVVJDRU5PREVfTEFTVF9JTkRFWCAtIEhQSV9TT1VSQ0VOT0RFX05PTkUgKyAxKSA9PQotCSgxMiksIHNvdXJjZW5vZGVfc3RyaW5nc19tYXRjaF9kZWZzKTsKLQotI2RlZmluZSBIUElfREVTVE5PREVfU1RSSU5HUyBcCi17IFwKLQkibm8gZGVzdGluYXRpb24iLCBcCi0JIkhQSV9ERVNUTk9ERV9JU1RSRUFNIiwgXAotCSJIUElfREVTVE5PREVfTElORU9VVCIsIFwKLQkiSFBJX0RFU1ROT0RFX0FFU0VCVV9PVVQiLCBcCi0JIkhQSV9ERVNUTk9ERV9SRiIsIFwKLQkiSFBJX0RFU1ROT0RFX1NQRUFLRVIiLCBcCi0JIkhQSV9ERVNUTk9ERV9DT0JSQU5FVCIsIFwKLQkiSFBJX0RFU1ROT0RFX0FOQUxPRyIgXAotfQotY29tcGlsZV90aW1lX2Fzc2VydCgoSFBJX0RFU1ROT0RFX0xBU1RfSU5ERVggLSBIUElfREVTVE5PREVfTk9ORSArIDEpID09ICg4KSwKLQlkZXN0bm9kZV9zdHJpbmdzX21hdGNoX2RlZnMpOwotCi0jZGVmaW5lIEhQSV9DT05UUk9MX0NIQU5ORUxfTU9ERV9TVFJJTkdTIFwKLXsgXAotCSJYWFggSFBJX0NIQU5ORUxfTU9ERV9FUlJPUiBYWFgiLCBcCi0JIkhQSV9DSEFOTkVMX01PREVfTk9STUFMIiwgXAotCSJIUElfQ0hBTk5FTF9NT0RFX1NXQVAiLCBcCi0JIkhQSV9DSEFOTkVMX01PREVfTEVGVF9PTkxZIiwgXAotCSJIUElfQ0hBTk5FTF9NT0RFX1JJR0hUX09OTFkiIFwKLX0KLQotI2VuZGlmCQkJCS8qIF9IUElERUJVR19IICAqLworI2VuZGlmCQkJCS8qIF9IUElERUJVR19IXyAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYwppbmRleCA5YjEwZDlhLi5mYjMxMWQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWRzcGNkLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5jCkBAIC03MSw0NyArNzEsNTAgQEAKIAlpbnQgZXJyOwogCiAJc3ByaW50Zihmd19uYW1lLCAiYXNpaHBpL2RzcCUwNHguYmluIiwgYWRhcHRlcik7Ci0JSFBJX0RFQlVHX0xPRyhJTkZPLCAicmVxdWVzdGluZyBmaXJtd2FyZSBmb3IgJXNcbiIsIGZ3X25hbWUpOwogCiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcHNfZmlybXdhcmUsIGZ3X25hbWUsCiAJCSZwc19kc3BfY29kZS0+cHNfZGV2LT5kZXYpOworCiAJaWYgKGVyciAhPSAwKSB7Ci0JCUhQSV9ERUJVR19MT0coRVJST1IsICIlZCwgcmVxdWVzdF9maXJtd2FyZSBmYWlsZWQgZm9yICAlc1xuIiwKLQkJCWVyciwgZndfbmFtZSk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwc19kc3BfY29kZS0+cHNfZGV2LT5kZXYsCisJCQkiJWQsIHJlcXVlc3RfZmlybXdhcmUgZmFpbGVkIGZvciAgJXNcbiIsIGVyciwKKwkJCWZ3X25hbWUpOwogCQlnb3RvIGVycm9yMTsKIAl9CiAJaWYgKHBzX2Zpcm13YXJlLT5zaXplIDwgc2l6ZW9mKGhlYWRlcikpIHsKLQkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgImhlYWRlciBzaXplIHRvbyBzbWFsbCAlc1xuIiwgZndfbmFtZSk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwc19kc3BfY29kZS0+cHNfZGV2LT5kZXYsCisJCQkiSGVhZGVyIHNpemUgdG9vIHNtYWxsICVzXG4iLCBmd19uYW1lKTsKIAkJZ290byBlcnJvcjI7CiAJfQogCW1lbWNweSgmaGVhZGVyLCBwc19maXJtd2FyZS0+ZGF0YSwgc2l6ZW9mKGhlYWRlcikpOwogCWlmIChoZWFkZXIuYWRhcHRlciAhPSBhZGFwdGVyKSB7Ci0JCUhQSV9ERUJVR19MT0coRVJST1IsICJhZGFwdGVyIHR5cGUgaW5jb3JyZWN0ICU0eCAhPSAlNHhcbiIsCi0JCQloZWFkZXIuYWRhcHRlciwgYWRhcHRlcik7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwc19kc3BfY29kZS0+cHNfZGV2LT5kZXYsCisJCQkiQWRhcHRlciB0eXBlIGluY29ycmVjdCAlNHggIT0gJTR4XG4iLCBoZWFkZXIuYWRhcHRlciwKKwkJCWFkYXB0ZXIpOwogCQlnb3RvIGVycm9yMjsKIAl9CiAJaWYgKGhlYWRlci5zaXplICE9IHBzX2Zpcm13YXJlLT5zaXplKSB7Ci0JCUhQSV9ERUJVR19MT0coRVJST1IsICJjb2RlIHNpemUgd3JvbmcgICVkICE9ICVsZFxuIiwKLQkJCWhlYWRlci5zaXplLCAodW5zaWduZWQgbG9uZylwc19maXJtd2FyZS0+c2l6ZSk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwc19kc3BfY29kZS0+cHNfZGV2LT5kZXYsCisJCQkiQ29kZSBzaXplIHdyb25nICAlZCAhPSAlbGRcbiIsIGhlYWRlci5zaXplLAorCQkJKHVuc2lnbmVkIGxvbmcpcHNfZmlybXdhcmUtPnNpemUpOwogCQlnb3RvIGVycm9yMjsKIAl9CiAKLQlpZiAoaGVhZGVyLnZlcnNpb24gLyAxMDAwMCAhPSBIUElfVkVSX0RFQ0lNQUwgLyAxMDAwMCkgewotCQlIUElfREVCVUdfTE9HKEVSUk9SLAotCQkJImZpcm13YXJlIG1ham9yIHZlcnNpb24gbWlzbWF0Y2ggIgotCQkJIkRTUCBpbWFnZSAlZCAhPSBkcml2ZXIgJWRcbiIsIGhlYWRlci52ZXJzaW9uLAorCWlmIChoZWFkZXIudmVyc2lvbiAvIDEwMCAhPSBIUElfVkVSX0RFQ0lNQUwgLyAxMDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBzX2RzcF9jb2RlLT5wc19kZXYtPmRldiwKKwkJCSJJbmNvbXBhdGlibGUgZmlybXdhcmUgdmVyc2lvbiAiCisJCQkiRFNQIGltYWdlICVkICE9IERyaXZlciAlZFxuIiwgaGVhZGVyLnZlcnNpb24sCiAJCQlIUElfVkVSX0RFQ0lNQUwpOwogCQlnb3RvIGVycm9yMjsKIAl9CiAKIAlpZiAoaGVhZGVyLnZlcnNpb24gIT0gSFBJX1ZFUl9ERUNJTUFMKSB7Ci0JCUhQSV9ERUJVR19MT0coV0FSTklORywKLQkJCSJ2ZXJzaW9uIG1pc21hdGNoICBEU1AgaW1hZ2UgJWQgIT0gZHJpdmVyICVkXG4iLAorCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBzX2RzcF9jb2RlLT5wc19kZXYtPmRldiwKKwkJCSJGaXJtd2FyZTogcmVsZWFzZSB2ZXJzaW9uIG1pc21hdGNoICBEU1AgaW1hZ2UgJWQgIT0gRHJpdmVyICVkXG4iLAogCQkJaGVhZGVyLnZlcnNpb24sIEhQSV9WRVJfREVDSU1BTCk7Ci0JCS8qIGdvdG8gZXJyb3IyOyAgc3RpbGwgYWxsb3cgZHJpdmVyIHRvIGxvYWQgKi8KIAl9CiAKLQlIUElfREVCVUdfTE9HKElORk8sICJkc3AgY29kZSAlcyBvcGVuZWRcbiIsIGZ3X25hbWUpOworCUhQSV9ERUJVR19MT0coREVCVUcsICJkc3AgY29kZSAlcyBvcGVuZWRcbiIsIGZ3X25hbWUpOwogCXBzX2RzcF9jb2RlLT5wc19maXJtd2FyZSA9IHBzX2Zpcm13YXJlOwogCXBzX2RzcF9jb2RlLT5ibG9ja19sZW5ndGggPSBoZWFkZXIuc2l6ZSAvIHNpemVvZih1MzIpOwogCXBzX2RzcF9jb2RlLT53b3JkX2NvdW50ID0gc2l6ZW9mKGhlYWRlcikgLyBzaXplb2YodTMyKTsKQEAgLTE0OCw3ICsxNTEsNyBAQAogc2hvcnQgaHBpX2RzcF9jb2RlX3JlYWRfd29yZChzdHJ1Y3QgZHNwX2NvZGUgKnBzX2RzcF9jb2RlLCB1MzIgKnB3b3JkKQogewogCWlmIChwc19kc3BfY29kZS0+d29yZF9jb3VudCArIDEgPiBwc19kc3BfY29kZS0+YmxvY2tfbGVuZ3RoKQotCQlyZXR1cm4gKEhQSV9FUlJPUl9EU1BfRklMRV9GT1JNQVQpOworCQlyZXR1cm4gSFBJX0VSUk9SX0RTUF9GSUxFX0ZPUk1BVDsKIAogCSpwd29yZCA9ICgodTMyICopKHBzX2RzcF9jb2RlLT5wc19maXJtd2FyZS0+ZGF0YSkpW3BzX2RzcF9jb2RlLT4KIAkJd29yZF9jb3VudF07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWRzcGNkLmggYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWRzcGNkLmgKaW5kZXggZDdjMjQwMy4uNjVmMGNhNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5oCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuaApAQCAtODcsNyArODcsNyBAQAogKi8KIHNob3J0IGhwaV9kc3BfY29kZV9yZWFkX3dvcmQoc3RydWN0IGRzcF9jb2RlICpwc19kc3BfY29kZSwKIAkJCQkgICAgICAvKio8IERTUCBjb2RlIGRlc2NyaXB0b3IgKi8KLQl1MzIgKnB3b3JkIC8qKjwgd2hlcmUgdG8gc3RvcmUgdGhlIHJlYWQgd29yZCAqLworCXUzMiAqcHdvcmQgLyoqPCBXaGVyZSB0byBzdG9yZSB0aGUgcmVhZCB3b3JkICovCiAJKTsKIAogLyoqIEdldCBhIGJsb2NrIG9mIGRzcCBjb2RlIGludG8gYW4gaW50ZXJuYWwgYnVmZmVyLCBhbmQgcHJvdmlkZSBhIHBvaW50ZXIgdG8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpZnVuYy5jIGIvc291bmQvcGNpL2FzaWhwaS9ocGlmdW5jLmMKaW5kZXggMWU5MmViNi4uYzM4ZmM5NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGlmdW5jLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlmdW5jLmMKQEAgLTMwLDE2ICszMCwyNSBAQAogCXJldHVybiBoYW5kbGUudzsKIH0KIAorc3RhdGljIHUxNiBocGlfaGFuZGxlX2luZGV4ZXMoY29uc3QgdTMyIGgsIHUxNiAqcDEsIHUxNiAqcDIpCit7CisJdW5pb24gaGFuZGxlX3dvcmQgdWhhbmRsZTsKKwlpZiAoIWgpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CisKKwl1aGFuZGxlLncgPSBoOworCisJKnAxID0gKHUxNil1aGFuZGxlLmguYWRhcHRlcl9pbmRleDsKKwlpZiAocDIpCisJCSpwMiA9ICh1MTYpdWhhbmRsZS5oLm9ial9pbmRleDsKKworCXJldHVybiAwOworfQorCiB2b2lkIGhwaV9oYW5kbGVfdG9faW5kZXhlcyhjb25zdCB1MzIgaGFuZGxlLCB1MTYgKnB3X2FkYXB0ZXJfaW5kZXgsCiAJdTE2ICpwd19vYmplY3RfaW5kZXgpCiB7Ci0JdW5pb24gaGFuZGxlX3dvcmQgdWhhbmRsZTsKLQl1aGFuZGxlLncgPSBoYW5kbGU7Ci0KLQlpZiAocHdfYWRhcHRlcl9pbmRleCkKLQkJKnB3X2FkYXB0ZXJfaW5kZXggPSAodTE2KXVoYW5kbGUuaC5hZGFwdGVyX2luZGV4OwotCWlmIChwd19vYmplY3RfaW5kZXgpCi0JCSpwd19vYmplY3RfaW5kZXggPSAodTE2KXVoYW5kbGUuaC5vYmpfaW5kZXg7CisJaHBpX2hhbmRsZV9pbmRleGVzKGhhbmRsZSwgcHdfYWRhcHRlcl9pbmRleCwgcHdfb2JqZWN0X2luZGV4KTsKIH0KIAogY2hhciBocGlfaGFuZGxlX29iamVjdChjb25zdCB1MzIgaGFuZGxlKQpAQCAtNDksMjIgKzU4LDYgQEAKIAlyZXR1cm4gKGNoYXIpdWhhbmRsZS5oLm9ial90eXBlOwogfQogCi0jZGVmaW5lIHUzMlRPSU5ERVgoaCwgaTEpIFwKLWRvIHtcCi0JaWYgKGggPT0gMCkgXAotCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfT0JKOyBcCi0JZWxzZSBcCi0JCWhwaV9oYW5kbGVfdG9faW5kZXhlcyhoLCBpMSwgTlVMTCk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgdTMyVE9JTkRFWEVTKGgsIGkxLCBpMikgXAotZG8ge1wKLQlpZiAoaCA9PSAwKSBcCi0JCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9PQko7IFwKLQllbHNlIFwKLQkJaHBpX2hhbmRsZV90b19pbmRleGVzKGgsIGkxLCBpMik7XAotfSB3aGlsZSAoMCkKLQogdm9pZCBocGlfZm9ybWF0X3RvX21zZyhzdHJ1Y3QgaHBpX21zZ19mb3JtYXQgKnBNRiwKIAljb25zdCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcEYpCiB7CkBAIC05NCw1MiArODcsMTMgQEAKIAlwU1ItPnUubGVnYWN5X3N0cmVhbV9pbmZvLnN0YXRlID0gcFNSLT51LnN0cmVhbV9pbmZvLnN0YXRlOwogfQogCi1zdGF0aWMgc3RydWN0IGhwaV9oc3Vic3lzIGdoX3N1YnN5czsKLQotc3RydWN0IGhwaV9oc3Vic3lzICpocGlfc3Vic3lzX2NyZWF0ZSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGhwaV9zZW5kX3JlY3ZWMShzdHJ1Y3QgaHBpX21lc3NhZ2VfaGVhZGVyICptLAorCXN0cnVjdCBocGlfcmVzcG9uc2VfaGVhZGVyICpyKQogewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCi0JbWVtc2V0KCZnaF9zdWJzeXMsIDAsIHNpemVvZihzdHJ1Y3QgaHBpX2hzdWJzeXMpKTsKLQotCXsKLQkJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9TVUJTWVNURU0sCi0JCQlIUElfU1VCU1lTX09QRU4pOwotCQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQotCQlpZiAoaHIuZXJyb3IgPT0gMCkKLQkJCXJldHVybiAmZ2hfc3Vic3lzOwotCi0JfQotCXJldHVybiBOVUxMOworCWhwaV9zZW5kX3JlY3YoKHN0cnVjdCBocGlfbWVzc2FnZSAqKW0sIChzdHJ1Y3QgaHBpX3Jlc3BvbnNlICopcik7CiB9CiAKLXZvaWQgaHBpX3N1YnN5c19mcmVlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCi0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9TVUJTWVNURU0sCi0JCUhQSV9TVUJTWVNfQ0xPU0UpOwotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi19Ci0KLXUxNiBocGlfc3Vic3lzX2dldF92ZXJzaW9uKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgKnB2ZXJzaW9uKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCi0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9TVUJTWVNURU0sCi0JCUhQSV9TVUJTWVNfR0VUX1ZFUlNJT04pOwotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCSpwdmVyc2lvbiA9IGhyLnUucy52ZXJzaW9uOwotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9zdWJzeXNfZ2V0X3ZlcnNpb25fZXgoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyICpwdmVyc2lvbl9leCkKK3UxNiBocGlfc3Vic3lzX2dldF92ZXJzaW9uX2V4KHUzMiAqcHZlcnNpb25fZXgpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CkBAIC0xNTEsNTEgKzEwNSw4IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX3N1YnN5c19nZXRfaW5mbyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyICpwdmVyc2lvbiwKLQl1MTYgKnB3X251bV9hZGFwdGVycywgdTE2IGF3X2FkYXB0ZXJfbGlzdFtdLCB1MTYgbGlzdF9sZW5ndGgpCi17Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9TVUJTWVNURU0sCi0JCUhQSV9TVUJTWVNfR0VUX0lORk8pOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQkqcHZlcnNpb24gPSBoci51LnMudmVyc2lvbjsKLQlpZiAobGlzdF9sZW5ndGggPiBIUElfTUFYX0FEQVBURVJTKQotCQltZW1jcHkoYXdfYWRhcHRlcl9saXN0LCAmaHIudS5zLmF3X2FkYXB0ZXJfbGlzdCwKLQkJCUhQSV9NQVhfQURBUFRFUlMpOwotCWVsc2UKLQkJbWVtY3B5KGF3X2FkYXB0ZXJfbGlzdCwgJmhyLnUucy5hd19hZGFwdGVyX2xpc3QsIGxpc3RfbGVuZ3RoKTsKLQkqcHdfbnVtX2FkYXB0ZXJzID0gaHIudS5zLm51bV9hZGFwdGVyczsKLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfc3Vic3lzX2ZpbmRfYWRhcHRlcnMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2ICpwd19udW1fYWRhcHRlcnMsIHUxNiBhd19hZGFwdGVyX2xpc3RbXSwgdTE2IGxpc3RfbGVuZ3RoKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfU1VCU1lTVEVNLAotCQlIUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMpOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlpZiAobGlzdF9sZW5ndGggPiBIUElfTUFYX0FEQVBURVJTKSB7Ci0JCW1lbWNweShhd19hZGFwdGVyX2xpc3QsICZoci51LnMuYXdfYWRhcHRlcl9saXN0LAotCQkJSFBJX01BWF9BREFQVEVSUyAqIHNpemVvZih1MTYpKTsKLQkJbWVtc2V0KCZhd19hZGFwdGVyX2xpc3RbSFBJX01BWF9BREFQVEVSU10sIDAsCi0JCQkobGlzdF9sZW5ndGggLSBIUElfTUFYX0FEQVBURVJTKSAqIHNpemVvZih1MTYpKTsKLQl9IGVsc2UKLQkJbWVtY3B5KGF3X2FkYXB0ZXJfbGlzdCwgJmhyLnUucy5hd19hZGFwdGVyX2xpc3QsCi0JCQlsaXN0X2xlbmd0aCAqIHNpemVvZih1MTYpKTsKLQkqcHdfbnVtX2FkYXB0ZXJzID0gaHIudS5zLm51bV9hZGFwdGVyczsKLQotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9zdWJzeXNfY3JlYXRlX2FkYXB0ZXIoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3Qgc3RydWN0IGhwaV9yZXNvdXJjZSAqcF9yZXNvdXJjZSwgdTE2ICpwd19hZGFwdGVyX2luZGV4KQordTE2IGhwaV9zdWJzeXNfY3JlYXRlX2FkYXB0ZXIoY29uc3Qgc3RydWN0IGhwaV9yZXNvdXJjZSAqcF9yZXNvdXJjZSwKKwl1MTYgKnB3X2FkYXB0ZXJfaW5kZXgpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CkBAIC0yMTAsMjAgKzEyMSwxOCBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9zdWJzeXNfZGVsZXRlX2FkYXB0ZXIoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgpCit1MTYgaHBpX3N1YnN5c19kZWxldGVfYWRhcHRlcih1MTYgYWRhcHRlcl9pbmRleCkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX1NVQlNZU1RFTSwKIAkJSFBJX1NVQlNZU19ERUxFVEVfQURBUFRFUik7Ci0JaG0uYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXJfaW5kZXg7CisJaG0ub2JqX2luZGV4ID0gYWRhcHRlcl9pbmRleDsKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfc3Vic3lzX2dldF9udW1fYWRhcHRlcnMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JaW50ICpwbl9udW1fYWRhcHRlcnMpCit1MTYgaHBpX3N1YnN5c19nZXRfbnVtX2FkYXB0ZXJzKGludCAqcG5fbnVtX2FkYXB0ZXJzKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwpAQCAtMjM0LDM1ICsxNDMsMjIgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfc3Vic3lzX2dldF9hZGFwdGVyKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCBpbnQgaXRlcmF0b3IsCi0JdTMyICpwYWRhcHRlcl9pbmRleCwgdTE2ICpwd19hZGFwdGVyX3R5cGUpCit1MTYgaHBpX3N1YnN5c19nZXRfYWRhcHRlcihpbnQgaXRlcmF0b3IsIHUzMiAqcGFkYXB0ZXJfaW5kZXgsCisJdTE2ICpwd19hZGFwdGVyX3R5cGUpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9TVUJTWVNURU0sCiAJCUhQSV9TVUJTWVNfR0VUX0FEQVBURVIpOwotCWhtLmFkYXB0ZXJfaW5kZXggPSAodTE2KWl0ZXJhdG9yOworCWhtLm9ial9pbmRleCA9ICh1MTYpaXRlcmF0b3I7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAJKnBhZGFwdGVyX2luZGV4ID0gKGludCloci51LnMuYWRhcHRlcl9pbmRleDsKLQkqcHdfYWRhcHRlcl90eXBlID0gaHIudS5zLmF3X2FkYXB0ZXJfbGlzdFswXTsKKwkqcHdfYWRhcHRlcl90eXBlID0gaHIudS5zLmFkYXB0ZXJfdHlwZTsKKwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9zdWJzeXNfc2V0X2hvc3RfbmV0d29ya19pbnRlcmZhY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgY2hhciAqc3pfaW50ZXJmYWNlKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfU1VCU1lTVEVNLAotCQlIUElfU1VCU1lTX1NFVF9ORVRXT1JLX0lOVEVSRkFDRSk7Ci0JaWYgKHN6X2ludGVyZmFjZSA9PSBOVUxMKQotCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfUkVTT1VSQ0U7Ci0JaG0udS5zLnJlc291cmNlLnIubmV0X2lmID0gc3pfaW50ZXJmYWNlOwotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9hZGFwdGVyX29wZW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUxNiBhZGFwdGVyX2luZGV4KQordTE2IGhwaV9hZGFwdGVyX29wZW4odTE2IGFkYXB0ZXJfaW5kZXgpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CkBAIC0yNzYsNyArMTcyLDcgQEAKIAogfQogCi11MTYgaHBpX2FkYXB0ZXJfY2xvc2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUxNiBhZGFwdGVyX2luZGV4KQordTE2IGhwaV9hZGFwdGVyX2Nsb3NlKHUxNiBhZGFwdGVyX2luZGV4KQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwpAQCAtMjg5LDE1ICsxODUsMTQgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfYWRhcHRlcl9zZXRfbW9kZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTMyIGFkYXB0ZXJfbW9kZSkKK3UxNiBocGlfYWRhcHRlcl9zZXRfbW9kZSh1MTYgYWRhcHRlcl9pbmRleCwgdTMyIGFkYXB0ZXJfbW9kZSkKIHsKLQlyZXR1cm4gaHBpX2FkYXB0ZXJfc2V0X21vZGVfZXgocGhfc3Vic3lzLCBhZGFwdGVyX2luZGV4LCBhZGFwdGVyX21vZGUsCisJcmV0dXJuIGhwaV9hZGFwdGVyX3NldF9tb2RlX2V4KGFkYXB0ZXJfaW5kZXgsIGFkYXB0ZXJfbW9kZSwKIAkJSFBJX0FEQVBURVJfTU9ERV9TRVQpOwogfQogCi11MTYgaHBpX2FkYXB0ZXJfc2V0X21vZGVfZXgoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUzMiBhZGFwdGVyX21vZGUsIHUxNiBxdWVyeV9vcl9zZXQpCit1MTYgaHBpX2FkYXB0ZXJfc2V0X21vZGVfZXgodTE2IGFkYXB0ZXJfaW5kZXgsIHUzMiBhZGFwdGVyX21vZGUsCisJdTE2IHF1ZXJ5X29yX3NldCkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKQEAgLTMwNSwxNCArMjAwLDEzIEBACiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9BREFQVEVSLAogCQlIUElfQURBUFRFUl9TRVRfTU9ERSk7CiAJaG0uYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXJfaW5kZXg7Ci0JaG0udS5hLmFkYXB0ZXJfbW9kZSA9IGFkYXB0ZXJfbW9kZTsKLQlobS51LmEuYXNzZXJ0X2lkID0gcXVlcnlfb3Jfc2V0OworCWhtLnUuYXgubW9kZS5hZGFwdGVyX21vZGUgPSBhZGFwdGVyX21vZGU7CisJaG0udS5heC5tb2RlLnF1ZXJ5X29yX3NldCA9IHF1ZXJ5X29yX3NldDsKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfYWRhcHRlcl9nZXRfbW9kZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTMyICpwYWRhcHRlcl9tb2RlKQordTE2IGhwaV9hZGFwdGVyX2dldF9tb2RlKHUxNiBhZGFwdGVyX2luZGV4LCB1MzIgKnBhZGFwdGVyX21vZGUpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CkBAIC0zMjEsMTMgKzIxNSwxMyBAQAogCWhtLmFkYXB0ZXJfaW5kZXggPSBhZGFwdGVyX2luZGV4OwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCWlmIChwYWRhcHRlcl9tb2RlKQotCQkqcGFkYXB0ZXJfbW9kZSA9IGhyLnUuYS5zZXJpYWxfbnVtYmVyOworCQkqcGFkYXB0ZXJfbW9kZSA9IGhyLnUuYXgubW9kZS5hZGFwdGVyX21vZGU7CiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2FkYXB0ZXJfZ2V0X2luZm8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiAqcHdfbnVtX291dHN0cmVhbXMsIHUxNiAqcHdfbnVtX2luc3RyZWFtcywKLQl1MTYgKnB3X3ZlcnNpb24sIHUzMiAqcHNlcmlhbF9udW1iZXIsIHUxNiAqcHdfYWRhcHRlcl90eXBlKQordTE2IGhwaV9hZGFwdGVyX2dldF9pbmZvKHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgKnB3X251bV9vdXRzdHJlYW1zLAorCXUxNiAqcHdfbnVtX2luc3RyZWFtcywgdTE2ICpwd192ZXJzaW9uLCB1MzIgKnBzZXJpYWxfbnVtYmVyLAorCXUxNiAqcHdfYWRhcHRlcl90eXBlKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwpAQCAtMzM3LDE4ICsyMzEsMTcgQEAKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCi0JKnB3X2FkYXB0ZXJfdHlwZSA9IGhyLnUuYS5hZGFwdGVyX3R5cGU7Ci0JKnB3X251bV9vdXRzdHJlYW1zID0gaHIudS5hLm51bV9vdXRzdHJlYW1zOwotCSpwd19udW1faW5zdHJlYW1zID0gaHIudS5hLm51bV9pbnN0cmVhbXM7Ci0JKnB3X3ZlcnNpb24gPSBoci51LmEudmVyc2lvbjsKLQkqcHNlcmlhbF9udW1iZXIgPSBoci51LmEuc2VyaWFsX251bWJlcjsKKwkqcHdfYWRhcHRlcl90eXBlID0gaHIudS5heC5pbmZvLmFkYXB0ZXJfdHlwZTsKKwkqcHdfbnVtX291dHN0cmVhbXMgPSBoci51LmF4LmluZm8ubnVtX291dHN0cmVhbXM7CisJKnB3X251bV9pbnN0cmVhbXMgPSBoci51LmF4LmluZm8ubnVtX2luc3RyZWFtczsKKwkqcHdfdmVyc2lvbiA9IGhyLnUuYXguaW5mby52ZXJzaW9uOworCSpwc2VyaWFsX251bWJlciA9IGhyLnUuYXguaW5mby5zZXJpYWxfbnVtYmVyOwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9hZGFwdGVyX2dldF9tb2R1bGVfYnlfaW5kZXgoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiBtb2R1bGVfaW5kZXgsIHUxNiAqcHdfbnVtX291dHB1dHMsCi0JdTE2ICpwd19udW1faW5wdXRzLCB1MTYgKnB3X3ZlcnNpb24sIHUzMiAqcHNlcmlhbF9udW1iZXIsCi0JdTE2ICpwd19tb2R1bGVfdHlwZSwgdTMyICpwaF9tb2R1bGUpCit1MTYgaHBpX2FkYXB0ZXJfZ2V0X21vZHVsZV9ieV9pbmRleCh1MTYgYWRhcHRlcl9pbmRleCwgdTE2IG1vZHVsZV9pbmRleCwKKwl1MTYgKnB3X251bV9vdXRwdXRzLCB1MTYgKnB3X251bV9pbnB1dHMsIHUxNiAqcHdfdmVyc2lvbiwKKwl1MzIgKnBzZXJpYWxfbnVtYmVyLCB1MTYgKnB3X21vZHVsZV90eXBlLCB1MzIgKnBoX21vZHVsZSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKQEAgLTM2MCwxNzMgKzI1MywxOCBAQAogCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAKLQkqcHdfbW9kdWxlX3R5cGUgPSBoci51LmEuYWRhcHRlcl90eXBlOwotCSpwd19udW1fb3V0cHV0cyA9IGhyLnUuYS5udW1fb3V0c3RyZWFtczsKLQkqcHdfbnVtX2lucHV0cyA9IGhyLnUuYS5udW1faW5zdHJlYW1zOwotCSpwd192ZXJzaW9uID0gaHIudS5hLnZlcnNpb247Ci0JKnBzZXJpYWxfbnVtYmVyID0gaHIudS5hLnNlcmlhbF9udW1iZXI7CisJKnB3X21vZHVsZV90eXBlID0gaHIudS5heC5pbmZvLmFkYXB0ZXJfdHlwZTsKKwkqcHdfbnVtX291dHB1dHMgPSBoci51LmF4LmluZm8ubnVtX291dHN0cmVhbXM7CisJKnB3X251bV9pbnB1dHMgPSBoci51LmF4LmluZm8ubnVtX2luc3RyZWFtczsKKwkqcHdfdmVyc2lvbiA9IGhyLnUuYXguaW5mby52ZXJzaW9uOworCSpwc2VyaWFsX251bWJlciA9IGhyLnUuYXguaW5mby5zZXJpYWxfbnVtYmVyOwogCSpwaF9tb2R1bGUgPSAwOwogCiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2FkYXB0ZXJfZ2V0X2Fzc2VydChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTE2ICphc3NlcnRfcHJlc2VudCwgY2hhciAqcHN6X2Fzc2VydCwKLQl1MTYgKnB3X2xpbmVfbnVtYmVyKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQURBUFRFUiwKLQkJSFBJX0FEQVBURVJfR0VUX0FTU0VSVCk7Ci0JaG0uYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXJfaW5kZXg7Ci0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQkqYXNzZXJ0X3ByZXNlbnQgPSAwOwotCi0JaWYgKCFoci5lcnJvcikgewotCi0JCSpwd19saW5lX251bWJlciA9ICh1MTYpaHIudS5hLnNlcmlhbF9udW1iZXI7Ci0JCWlmICgqcHdfbGluZV9udW1iZXIpIHsKLQotCQkJaW50IGk7Ci0JCQljaGFyICpzcmMgPSAoY2hhciAqKWhyLnUuYS5zel9hZGFwdGVyX2Fzc2VydDsKLQkJCWNoYXIgKmRzdCA9IHBzel9hc3NlcnQ7Ci0KLQkJCSphc3NlcnRfcHJlc2VudCA9IDE7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBIUElfU1RSSU5HX0xFTjsgaSsrKSB7Ci0JCQkJY2hhciBjOwotCQkJCWMgPSAqc3JjKys7Ci0JCQkJKmRzdCsrID0gYzsKLQkJCQlpZiAoYyA9PSAwKQotCQkJCQlicmVhazsKLQkJCX0KLQotCQl9Ci0JfQotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9hZGFwdGVyX2dldF9hc3NlcnRfZXgoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiAqYXNzZXJ0X3ByZXNlbnQsIGNoYXIgKnBzel9hc3NlcnQsCi0JdTMyICpwbGluZV9udW1iZXIsIHUxNiAqcHdfYXNzZXJ0X29uX2RzcCkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0FEQVBURVIsCi0JCUhQSV9BREFQVEVSX0dFVF9BU1NFUlQpOwotCWhtLmFkYXB0ZXJfaW5kZXggPSBhZGFwdGVyX2luZGV4OwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQkqYXNzZXJ0X3ByZXNlbnQgPSAwOwotCi0JaWYgKCFoci5lcnJvcikgewotCi0JCSpwbGluZV9udW1iZXIgPSBoci51LmEuc2VyaWFsX251bWJlcjsKLQotCQkqYXNzZXJ0X3ByZXNlbnQgPSBoci51LmEuYWRhcHRlcl90eXBlOwotCi0JCSpwd19hc3NlcnRfb25fZHNwID0gaHIudS5hLmFkYXB0ZXJfaW5kZXg7Ci0KLQkJaWYgKCEqYXNzZXJ0X3ByZXNlbnQgJiYgKnBsaW5lX251bWJlcikKLQotCQkJKmFzc2VydF9wcmVzZW50ID0gMTsKLQotCQlpZiAoKmFzc2VydF9wcmVzZW50KSB7Ci0KLQkJCWludCBpOwotCQkJY2hhciAqc3JjID0gKGNoYXIgKiloci51LmEuc3pfYWRhcHRlcl9hc3NlcnQ7Ci0JCQljaGFyICpkc3QgPSBwc3pfYXNzZXJ0OwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgSFBJX1NUUklOR19MRU47IGkrKykgewotCQkJCWNoYXIgYzsKLQkJCQljID0gKnNyYysrOwotCQkJCSpkc3QrKyA9IGM7Ci0JCQkJaWYgKGMgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJfSBlbHNlIHsKLQkJCSpwc3pfYXNzZXJ0ID0gMDsKLQkJfQotCX0KLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfYWRhcHRlcl90ZXN0X2Fzc2VydChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTE2IGFzc2VydF9pZCkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0FEQVBURVIsCi0JCUhQSV9BREFQVEVSX1RFU1RfQVNTRVJUKTsKLQlobS5hZGFwdGVyX2luZGV4ID0gYWRhcHRlcl9pbmRleDsKLQlobS51LmEuYXNzZXJ0X2lkID0gYXNzZXJ0X2lkOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfYWRhcHRlcl9lbmFibGVfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTE2IGNhcGFiaWxpdHksIHUzMiBrZXkpCi17Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9BREFQVEVSLAotCQlIUElfQURBUFRFUl9FTkFCTEVfQ0FQQUJJTElUWSk7Ci0JaG0uYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXJfaW5kZXg7Ci0JaG0udS5hLmFzc2VydF9pZCA9IGNhcGFiaWxpdHk7Ci0JaG0udS5hLmFkYXB0ZXJfbW9kZSA9IGtleTsKLQotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JcmV0dXJuIGhyLmVycm9yOwotfQotCi11MTYgaHBpX2FkYXB0ZXJfc2VsZl90ZXN0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUxNiBhZGFwdGVyX2luZGV4KQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQURBUFRFUiwKLQkJSFBJX0FEQVBURVJfU0VMRlRFU1QpOwotCWhtLmFkYXB0ZXJfaW5kZXggPSBhZGFwdGVyX2luZGV4OwotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9hZGFwdGVyX2RlYnVnX3JlYWQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUzMiBkc3BfYWRkcmVzcywgY2hhciAqcF9idWZmZXIsIGludCAqY291bnRfYnl0ZXMpCi17Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9BREFQVEVSLAotCQlIUElfQURBUFRFUl9ERUJVR19SRUFEKTsKLQotCWhyLnNpemUgPSBzaXplb2YoaHIpOwotCi0JaG0uYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXJfaW5kZXg7Ci0JaG0udS5heC5kZWJ1Z19yZWFkLmRzcF9hZGRyZXNzID0gZHNwX2FkZHJlc3M7Ci0KLQlpZiAoKmNvdW50X2J5dGVzID4gKGludClzaXplb2YoaHIudS5ieXRlcykpCi0JCSpjb3VudF9ieXRlcyA9IHNpemVvZihoci51LmJ5dGVzKTsKLQotCWhtLnUuYXguZGVidWdfcmVhZC5jb3VudF9ieXRlcyA9ICpjb3VudF9ieXRlczsKLQotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JaWYgKCFoci5lcnJvcikgewotCQkqY291bnRfYnl0ZXMgPSBoci5zaXplIC0gMTI7Ci0JCW1lbWNweShwX2J1ZmZlciwgJmhyLnUuYnl0ZXMsICpjb3VudF9ieXRlcyk7Ci0JfSBlbHNlCi0JCSpjb3VudF9ieXRlcyA9IDA7Ci0JcmV0dXJuIGhyLmVycm9yOwotfQotCi11MTYgaHBpX2FkYXB0ZXJfc2V0X3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUxNiBhZGFwdGVyX2luZGV4LCB1MTYgcHJvcGVydHksIHUxNiBwYXJhbWV0ZXIxLCB1MTYgcGFyYW1ldGVyMikKK3UxNiBocGlfYWRhcHRlcl9zZXRfcHJvcGVydHkodTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiBwcm9wZXJ0eSwgdTE2IHBhcmFtZXRlcjEsCisJdTE2IHBhcmFtZXRlcjIpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CkBAIC01NDIsOSArMjgwLDggQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfYWRhcHRlcl9nZXRfcHJvcGVydHkoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiBwcm9wZXJ0eSwgdTE2ICpwd19wYXJhbWV0ZXIxLAotCXUxNiAqcHdfcGFyYW1ldGVyMikKK3UxNiBocGlfYWRhcHRlcl9nZXRfcHJvcGVydHkodTE2IGFkYXB0ZXJfaW5kZXgsIHUxNiBwcm9wZXJ0eSwKKwl1MTYgKnB3X3BhcmFtZXRlcjEsIHUxNiAqcHdfcGFyYW1ldGVyMikKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKQEAgLTU2NCw5ICszMDEsOCBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9hZGFwdGVyX2VudW1lcmF0ZV9wcm9wZXJ0eShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MTYgYWRhcHRlcl9pbmRleCwgdTE2IGluZGV4LCB1MTYgd2hhdF90b19lbnVtZXJhdGUsCi0JdTE2IHByb3BlcnR5X2luZGV4LCB1MzIgKnBzZXR0aW5nKQordTE2IGhwaV9hZGFwdGVyX2VudW1lcmF0ZV9wcm9wZXJ0eSh1MTYgYWRhcHRlcl9pbmRleCwgdTE2IGluZGV4LAorCXUxNiB3aGF0X3RvX2VudW1lcmF0ZSwgdTE2IHByb3BlcnR5X2luZGV4LCB1MzIgKnBzZXR0aW5nKQogewogCXJldHVybiAwOwogfQpAQCAtNTc0LDcgKzMxMCw3IEBACiB1MTYgaHBpX2Zvcm1hdF9jcmVhdGUoc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0LCB1MTYgY2hhbm5lbHMsIHUxNiBmb3JtYXQsCiAJdTMyIHNhbXBsZV9yYXRlLCB1MzIgYml0X3JhdGUsIHUzMiBhdHRyaWJ1dGVzKQogewotCXUxNiBlcnJvciA9IDA7CisJdTE2IGVyciA9IDA7CiAJc3RydWN0IGhwaV9tc2dfZm9ybWF0IGZtdDsKIAogCXN3aXRjaCAoY2hhbm5lbHMpIHsKQEAgLTU4Niw4ICszMjIsOCBAQAogCWNhc2UgMTY6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfQ0hBTk5FTFM7Ci0JCXJldHVybiBlcnJvcjsKKwkJZXJyID0gSFBJX0VSUk9SX0lOVkFMSURfQ0hBTk5FTFM7CisJCXJldHVybiBlcnI7CiAJfQogCWZtdC5jaGFubmVscyA9IGNoYW5uZWxzOwogCkBAIC02MTAsMTcgKzM0NiwxNyBAQAogCWNhc2UgSFBJX0ZPUk1BVF9PRU0yOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX0ZPUk1BVDsKLQkJcmV0dXJuIGVycm9yOworCQllcnIgPSBIUElfRVJST1JfSU5WQUxJRF9GT1JNQVQ7CisJCXJldHVybiBlcnI7CiAJfQogCWZtdC5mb3JtYXQgPSBmb3JtYXQ7CiAKIAlpZiAoc2FtcGxlX3JhdGUgPCA4MDAwTCkgewotCQllcnJvciA9IEhQSV9FUlJPUl9JTkNPTVBBVElCTEVfU0FNUExFUkFURTsKKwkJZXJyID0gSFBJX0VSUk9SX0lOQ09NUEFUSUJMRV9TQU1QTEVSQVRFOwogCQlzYW1wbGVfcmF0ZSA9IDgwMDBMOwogCX0KIAlpZiAoc2FtcGxlX3JhdGUgPiAyMDAwMDBMKSB7Ci0JCWVycm9yID0gSFBJX0VSUk9SX0lOQ09NUEFUSUJMRV9TQU1QTEVSQVRFOworCQllcnIgPSBIUElfRVJST1JfSU5DT01QQVRJQkxFX1NBTVBMRVJBVEU7CiAJCXNhbXBsZV9yYXRlID0gMjAwMDAwTDsKIAl9CiAJZm10LnNhbXBsZV9yYXRlID0gc2FtcGxlX3JhdGU7CkBAIC02NTEsMTAgKzM4NywxMCBAQAogCQlpZiAoKGNoYW5uZWxzID09IDEpCiAJCQkmJiAoYXR0cmlidXRlcyAhPSBIUElfTVBFR19NT0RFX0RFRkFVTFQpKSB7CiAJCQlhdHRyaWJ1dGVzID0gSFBJX01QRUdfTU9ERV9ERUZBVUxUOwotCQkJZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9GT1JNQVQ7CisJCQllcnIgPSBIUElfRVJST1JfSU5WQUxJRF9GT1JNQVQ7CiAJCX0gZWxzZSBpZiAoYXR0cmlidXRlcyA+IEhQSV9NUEVHX01PREVfRFVBTENIQU5ORUwpIHsKIAkJCWF0dHJpYnV0ZXMgPSBIUElfTVBFR19NT0RFX0RFRkFVTFQ7Ci0JCQllcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX0ZPUk1BVDsKKwkJCWVyciA9IEhQSV9FUlJPUl9JTlZBTElEX0ZPUk1BVDsKIAkJfQogCQlmbXQuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAJCWJyZWFrOwpAQCAtNjYzLDcgKzM5OSw3IEBACiAJfQogCiAJaHBpX21zZ190b19mb3JtYXQocF9mb3JtYXQsICZmbXQpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZXJyOwogfQogCiB1MTYgaHBpX3N0cmVhbV9lc3RpbWF0ZV9idWZmZXJfc2l6ZShzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQsCkBAIC03MTIsOCArNDQ4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotdTE2IGhwaV9vdXRzdHJlYW1fb3Blbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTE2IGFkYXB0ZXJfaW5kZXgsCi0JdTE2IG91dHN0cmVhbV9pbmRleCwgdTMyICpwaF9vdXRzdHJlYW0pCit1MTYgaHBpX291dHN0cmVhbV9vcGVuKHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgb3V0c3RyZWFtX2luZGV4LAorCXUzMiAqcGhfb3V0c3RyZWFtKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwpAQCAtNzMzLDM4ICs0NjksNDEgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfb3V0c3RyZWFtX2Nsb3NlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9vdXRzdHJlYW0pCit1MTYgaHBpX291dHN0cmVhbV9jbG9zZSh1MzIgaF9vdXRzdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX0hPU1RCVUZGRVJfRlJFRSk7Ci0JdTMyVE9JTkRFWEVTKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOworCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX0dST1VQX1JFU0VUKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlocGlfaGFuZGxlX2luZGV4ZXMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfT1NUUkVBTSwKIAkJSFBJX09TVFJFQU1fQ0xPU0UpOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWhwaV9oYW5kbGVfaW5kZXhlcyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX291dHN0cmVhbV9nZXRfaW5mb19leChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIHUxNiAqcHdfc3RhdGUsIHUzMiAqcGJ1ZmZlcl9zaXplLCB1MzIgKnBkYXRhX3RvX3BsYXksCi0JdTMyICpwc2FtcGxlc19wbGF5ZWQsIHUzMiAqcGF1eGlsaWFyeV9kYXRhX3RvX3BsYXkpCit1MTYgaHBpX291dHN0cmVhbV9nZXRfaW5mb19leCh1MzIgaF9vdXRzdHJlYW0sIHUxNiAqcHdfc3RhdGUsCisJdTMyICpwYnVmZmVyX3NpemUsIHUzMiAqcGRhdGFfdG9fcGxheSwgdTMyICpwc2FtcGxlc19wbGF5ZWQsCisJdTMyICpwYXV4aWxpYXJ5X2RhdGFfdG9fcGxheSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX0dFVF9JTkZPKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIApAQCAtNzgyLDE1ICs1MjEsMTUgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfb3V0c3RyZWFtX3dyaXRlX2J1Zihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIGNvbnN0IHU4ICpwYl9kYXRhLCB1MzIgYnl0ZXNfdG9fd3JpdGUsCi0JY29uc3Qgc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0KQordTE2IGhwaV9vdXRzdHJlYW1fd3JpdGVfYnVmKHUzMiBoX291dHN0cmVhbSwgY29uc3QgdTggKnBiX2RhdGEsCisJdTMyIGJ5dGVzX3RvX3dyaXRlLCBjb25zdCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9PU1RSRUFNLAogCQlIUElfT1NUUkVBTV9XUklURSk7Ci0JdTMyVE9JTkRFWEVTKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhtLnUuZC51LmRhdGEucGJfZGF0YSA9ICh1OCAqKXBiX2RhdGE7CiAJaG0udS5kLnUuZGF0YS5kYXRhX3NpemUgPSBieXRlc190b193cml0ZTsKIApAQCAtODAxLDgyICs1NDAsODUgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfb3V0c3RyZWFtX3N0YXJ0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9vdXRzdHJlYW0pCit1MTYgaHBpX291dHN0cmVhbV9zdGFydCh1MzIgaF9vdXRzdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9PU1RSRUFNLAogCQlIUElfT1NUUkVBTV9TVEFSVCk7Ci0JdTMyVE9JTkRFWEVTKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfb3V0c3RyZWFtX3dhaXRfc3RhcnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtKQordTE2IGhwaV9vdXRzdHJlYW1fd2FpdF9zdGFydCh1MzIgaF9vdXRzdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9PU1RSRUFNLAogCQlIUElfT1NUUkVBTV9XQUlUX1NUQVJUKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9vdXRzdHJlYW1fc3RvcChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfb3V0c3RyZWFtKQordTE2IGhwaV9vdXRzdHJlYW1fc3RvcCh1MzIgaF9vdXRzdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9PU1RSRUFNLAogCQlIUElfT1NUUkVBTV9TVE9QKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9vdXRzdHJlYW1fc2luZWdlbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0pCit1MTYgaHBpX291dHN0cmVhbV9zaW5lZ2VuKHUzMiBoX291dHN0cmVhbSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX1NJTkVHRU4pOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX291dHN0cmVhbV9yZXNldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfb3V0c3RyZWFtKQordTE2IGhwaV9vdXRzdHJlYW1fcmVzZXQodTMyIGhfb3V0c3RyZWFtKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfT1NUUkVBTSwKIAkJSFBJX09TVFJFQU1fUkVTRVQpOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX291dHN0cmVhbV9xdWVyeV9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQpCit1MTYgaHBpX291dHN0cmVhbV9xdWVyeV9mb3JtYXQodTMyIGhfb3V0c3RyZWFtLCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX1FVRVJZX0ZPUk1BVCk7Ci0JdTMyVE9JTkRFWEVTKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCiAJaHBpX2Zvcm1hdF90b19tc2coJmhtLnUuZC51LmRhdGEuZm9ybWF0LCBwX2Zvcm1hdCk7CiAKQEAgLTg4NSwxNSArNjI3LDE1IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX291dHN0cmVhbV9zZXRfZm9ybWF0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX291dHN0cmVhbSwgc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0KQordTE2IGhwaV9vdXRzdHJlYW1fc2V0X2Zvcm1hdCh1MzIgaF9vdXRzdHJlYW0sIHN0cnVjdCBocGlfZm9ybWF0ICpwX2Zvcm1hdCkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfT1NUUkVBTSwKIAkJSFBJX09TVFJFQU1fU0VUX0ZPUk1BVCk7Ci0JdTMyVE9JTkRFWEVTKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCiAJaHBpX2Zvcm1hdF90b19tc2coJmhtLnUuZC51LmRhdGEuZm9ybWF0LCBwX2Zvcm1hdCk7CiAKQEAgLTkwMiwxNSArNjQ0LDE1IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX291dHN0cmVhbV9zZXRfdmVsb2NpdHkoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCBzaG9ydCB2ZWxvY2l0eSkKK3UxNiBocGlfb3V0c3RyZWFtX3NldF92ZWxvY2l0eSh1MzIgaF9vdXRzdHJlYW0sIHNob3J0IHZlbG9jaXR5KQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9PU1RSRUFNLAogCQlIUElfT1NUUkVBTV9TRVRfVkVMT0NJVFkpOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmQudS52ZWxvY2l0eSA9IHZlbG9jaXR5OwogCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CkBAIC05MTgsMTUgKzY2MCwxNiBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9vdXRzdHJlYW1fc2V0X3B1bmNoX2luX291dChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIHUzMiBwdW5jaF9pbl9zYW1wbGUsIHUzMiBwdW5jaF9vdXRfc2FtcGxlKQordTE2IGhwaV9vdXRzdHJlYW1fc2V0X3B1bmNoX2luX291dCh1MzIgaF9vdXRzdHJlYW0sIHUzMiBwdW5jaF9pbl9zYW1wbGUsCisJdTMyIHB1bmNoX291dF9zYW1wbGUpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX1NFVF9QVU5DSElOT1VUKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKIAlobS51LmQudS5waW8ucHVuY2hfaW5fc2FtcGxlID0gcHVuY2hfaW5fc2FtcGxlOwogCWhtLnUuZC51LnBpby5wdW5jaF9vdXRfc2FtcGxlID0gcHVuY2hfb3V0X3NhbXBsZTsKQEAgLTkzNiwyOSArNjc5LDI5IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX291dHN0cmVhbV9hbmNpbGxhcnlfcmVzZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1MTYgbW9kZSkKK3UxNiBocGlfb3V0c3RyZWFtX2FuY2lsbGFyeV9yZXNldCh1MzIgaF9vdXRzdHJlYW0sIHUxNiBtb2RlKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9PU1RSRUFNLAogCQlIUElfT1NUUkVBTV9BTkNfUkVTRVQpOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmQudS5kYXRhLmZvcm1hdC5jaGFubmVscyA9IG1vZGU7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX291dHN0cmVhbV9hbmNpbGxhcnlfZ2V0X2luZm8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1MzIgKnBmcmFtZXNfYXZhaWxhYmxlKQordTE2IGhwaV9vdXRzdHJlYW1fYW5jaWxsYXJ5X2dldF9pbmZvKHUzMiBoX291dHN0cmVhbSwgdTMyICpwZnJhbWVzX2F2YWlsYWJsZSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfT1NUUkVBTSwKIAkJSFBJX09TVFJFQU1fQU5DX0dFVF9JTkZPKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAJaWYgKGhyLmVycm9yID09IDApIHsKIAkJaWYgKHBmcmFtZXNfYXZhaWxhYmxlKQpAQCAtOTY5LDggKzcxMiw4IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX291dHN0cmVhbV9hbmNpbGxhcnlfcmVhZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIHN0cnVjdCBocGlfYW5jX2ZyYW1lICpwX2FuY19mcmFtZV9idWZmZXIsCit1MTYgaHBpX291dHN0cmVhbV9hbmNpbGxhcnlfcmVhZCh1MzIgaF9vdXRzdHJlYW0sCisJc3RydWN0IGhwaV9hbmNfZnJhbWUgKnBfYW5jX2ZyYW1lX2J1ZmZlciwKIAl1MzIgYW5jX2ZyYW1lX2J1ZmZlcl9zaXplX2luX2J5dGVzLAogCXUzMiBudW1iZXJfb2ZfYW5jaWxsYXJ5X2ZyYW1lc190b19yZWFkKQogewpAQCAtOTc5LDcgKzcyMiw4IEBACiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX0FOQ19SRUFEKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0udS5kLnUuZGF0YS5wYl9kYXRhID0gKHU4ICopcF9hbmNfZnJhbWVfYnVmZmVyOwogCWhtLnUuZC51LmRhdGEuZGF0YV9zaXplID0KIAkJbnVtYmVyX29mX2FuY2lsbGFyeV9mcmFtZXNfdG9fcmVhZCAqCkBAIC05ODcsMTkgKzczMSwxOSBAQAogCWlmIChobS51LmQudS5kYXRhLmRhdGFfc2l6ZSA8PSBhbmNfZnJhbWVfYnVmZmVyX3NpemVfaW5fYnl0ZXMpCiAJCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCWVsc2UKLQkJaHIuZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9EQVRBX1RSQU5TRkVSOworCQloci5lcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX0RBVEFTSVpFOwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9vdXRzdHJlYW1fc2V0X3RpbWVfc2NhbGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1MzIgdGltZV9zY2FsZSkKK3UxNiBocGlfb3V0c3RyZWFtX3NldF90aW1lX3NjYWxlKHUzMiBoX291dHN0cmVhbSwgdTMyIHRpbWVfc2NhbGUpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX1NFVF9USU1FU0NBTEUpOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAogCWhtLnUuZC51LnRpbWVfc2NhbGUgPSB0aW1lX3NjYWxlOwogCkBAIC0xMDA4LDIyICs3NTIsMjEgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfb3V0c3RyZWFtX2hvc3RfYnVmZmVyX2FsbG9jYXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX291dHN0cmVhbSwgdTMyIHNpemVfaW5fYnl0ZXMpCit1MTYgaHBpX291dHN0cmVhbV9ob3N0X2J1ZmZlcl9hbGxvY2F0ZSh1MzIgaF9vdXRzdHJlYW0sIHUzMiBzaXplX2luX2J5dGVzKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9PU1RSRUFNLAogCQlIUElfT1NUUkVBTV9IT1NUQlVGRkVSX0FMTE9DKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0udS5kLnUuZGF0YS5kYXRhX3NpemUgPSBzaXplX2luX2J5dGVzOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9vdXRzdHJlYW1faG9zdF9idWZmZXJfZ2V0X2luZm8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtLCB1OCAqKnBwX2J1ZmZlciwKK3UxNiBocGlfb3V0c3RyZWFtX2hvc3RfYnVmZmVyX2dldF9pbmZvKHUzMiBoX291dHN0cmVhbSwgdTggKipwcF9idWZmZXIsCiAJc3RydWN0IGhwaV9ob3N0YnVmZmVyX3N0YXR1cyAqKnBwX3N0YXR1cykKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CkBAIC0xMDMxLDcgKzc3NCw4IEBACiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX0hPU1RCVUZGRVJfR0VUX0lORk8pOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAogCWlmIChoci5lcnJvciA9PSAwKSB7CkBAIC0xMDQzLDIxICs3ODcsMjAgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfb3V0c3RyZWFtX2hvc3RfYnVmZmVyX2ZyZWUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfb3V0c3RyZWFtKQordTE2IGhwaV9vdXRzdHJlYW1faG9zdF9idWZmZXJfZnJlZSh1MzIgaF9vdXRzdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX0hPU1RCVUZGRVJfRlJFRSk7Ci0JdTMyVE9JTkRFWEVTKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9vdXRzdHJlYW1fZ3JvdXBfYWRkKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX291dHN0cmVhbSwgdTMyIGhfc3RyZWFtKQordTE2IGhwaV9vdXRzdHJlYW1fZ3JvdXBfYWRkKHUzMiBoX291dHN0cmVhbSwgdTMyIGhfc3RyZWFtKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwpAQCAtMTA2NiwyMiArODA5LDIyIEBACiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX0dST1VQX0FERCk7Ci0JaHIuZXJyb3IgPSAwOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOworCisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX3N0cmVhbSwgJmFkYXB0ZXIsCisJCQkmaG0udS5kLnUuc3RyZWFtLnN0cmVhbV9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CisKIAljX29ial90eXBlID0gaHBpX2hhbmRsZV9vYmplY3QoaF9zdHJlYW0pOwogCXN3aXRjaCAoY19vYmpfdHlwZSkgewogCWNhc2UgSFBJX09CSl9PU1RSRUFNOgotCQlobS51LmQudS5zdHJlYW0ub2JqZWN0X3R5cGUgPSBIUElfT0JKX09TVFJFQU07Ci0JCXUzMlRPSU5ERVhFUyhoX3N0cmVhbSwgJmFkYXB0ZXIsCi0JCQkmaG0udS5kLnUuc3RyZWFtLnN0cmVhbV9pbmRleCk7Ci0JCWJyZWFrOwogCWNhc2UgSFBJX09CSl9JU1RSRUFNOgotCQlobS51LmQudS5zdHJlYW0ub2JqZWN0X3R5cGUgPSBIUElfT0JKX0lTVFJFQU07Ci0JCXUzMlRPSU5ERVhFUyhoX3N0cmVhbSwgJmFkYXB0ZXIsCi0JCQkmaG0udS5kLnUuc3RyZWFtLnN0cmVhbV9pbmRleCk7CisJCWhtLnUuZC51LnN0cmVhbS5vYmplY3RfdHlwZSA9IGNfb2JqX3R5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9TVFJFQU07CisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9PQko7CiAJfQogCWlmIChhZGFwdGVyICE9IGhtLmFkYXB0ZXJfaW5kZXgpCiAJCXJldHVybiBIUElfRVJST1JfTk9fSU5URVJBREFQVEVSX0dST1VQUzsKQEAgLTEwOTAsMTUgKzgzMywxNiBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9vdXRzdHJlYW1fZ3JvdXBfZ2V0X21hcChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9vdXRzdHJlYW0sIHUzMiAqcG91dHN0cmVhbV9tYXAsIHUzMiAqcGluc3RyZWFtX21hcCkKK3UxNiBocGlfb3V0c3RyZWFtX2dyb3VwX2dldF9tYXAodTMyIGhfb3V0c3RyZWFtLCB1MzIgKnBvdXRzdHJlYW1fbWFwLAorCXUzMiAqcGluc3RyZWFtX21hcCkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfT1NUUkVBTSwKIAkJSFBJX09TVFJFQU1fR1JPVVBfR0VUTUFQKTsKLQl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfb3V0c3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAKIAlpZiAocG91dHN0cmVhbV9tYXApCkBAIC0xMTA5LDIxICs4NTMsMjAgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfb3V0c3RyZWFtX2dyb3VwX3Jlc2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX291dHN0cmVhbSkKK3UxNiBocGlfb3V0c3RyZWFtX2dyb3VwX3Jlc2V0KHUzMiBoX291dHN0cmVhbSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfT1NUUkVBTSwKIAkJSFBJX09TVFJFQU1fR1JPVVBfUkVTRVQpOwotCXUzMlRPSU5ERVhFUyhoX291dHN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfaW5zdHJlYW1fb3Blbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTE2IGFkYXB0ZXJfaW5kZXgsCi0JdTE2IGluc3RyZWFtX2luZGV4LCB1MzIgKnBoX2luc3RyZWFtKQordTE2IGhwaV9pbnN0cmVhbV9vcGVuKHUxNiBhZGFwdGVyX2luZGV4LCB1MTYgaW5zdHJlYW1faW5kZXgsIHUzMiAqcGhfaW5zdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CkBAIC0xMTQ1LDM4ICs4ODgsNDAgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfaW5zdHJlYW1fY2xvc2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2luc3RyZWFtKQordTE2IGhwaV9pbnN0cmVhbV9jbG9zZSh1MzIgaF9pbnN0cmVhbSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKIAkJSFBJX0lTVFJFQU1fSE9TVEJVRkZFUl9GUkVFKTsKLQl1MzJUT0lOREVYRVMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9JU1RSRUFNLAogCQlIUElfSVNUUkVBTV9HUk9VUF9SRVNFVCk7Ci0JdTMyVE9JTkRFWEVTKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlocGlfaGFuZGxlX2luZGV4ZXMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9JU1RSRUFNLAogCQlIUElfSVNUUkVBTV9DTE9TRSk7Ci0JdTMyVE9JTkRFWEVTKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlocGlfaGFuZGxlX2luZGV4ZXMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2luc3RyZWFtX3F1ZXJ5X2Zvcm1hdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9pbnN0cmVhbSwgY29uc3Qgc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0KQordTE2IGhwaV9pbnN0cmVhbV9xdWVyeV9mb3JtYXQodTMyIGhfaW5zdHJlYW0sCisJY29uc3Qgc3RydWN0IGhwaV9mb3JtYXQgKnBfZm9ybWF0KQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9JU1RSRUFNLAogCQlIUElfSVNUUkVBTV9RVUVSWV9GT1JNQVQpOwotCXUzMlRPSU5ERVhFUyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaHBpX2Zvcm1hdF90b19tc2coJmhtLnUuZC51LmRhdGEuZm9ybWF0LCBwX2Zvcm1hdCk7CiAKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKQEAgLTExODQsMTUgKzkyOSwxNSBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9pbnN0cmVhbV9zZXRfZm9ybWF0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtLCBjb25zdCBzdHJ1Y3QgaHBpX2Zvcm1hdCAqcF9mb3JtYXQpCit1MTYgaHBpX2luc3RyZWFtX3NldF9mb3JtYXQodTMyIGhfaW5zdHJlYW0sIGNvbnN0IHN0cnVjdCBocGlfZm9ybWF0ICpwX2Zvcm1hdCkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKIAkJSFBJX0lTVFJFQU1fU0VUX0ZPUk1BVCk7Ci0JdTMyVE9JTkRFWEVTKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlocGlfZm9ybWF0X3RvX21zZygmaG0udS5kLnUuZGF0YS5mb3JtYXQsIHBfZm9ybWF0KTsKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwpAQCAtMTIwMCwxNSArOTQ1LDE1IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2luc3RyZWFtX3JlYWRfYnVmKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9pbnN0cmVhbSwKLQl1OCAqcGJfZGF0YSwgdTMyIGJ5dGVzX3RvX3JlYWQpCit1MTYgaHBpX2luc3RyZWFtX3JlYWRfYnVmKHUzMiBoX2luc3RyZWFtLCB1OCAqcGJfZGF0YSwgdTMyIGJ5dGVzX3RvX3JlYWQpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0lTVFJFQU0sCiAJCUhQSV9JU1RSRUFNX1JFQUQpOwotCXUzMlRPSU5ERVhFUyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0udS5kLnUuZGF0YS5kYXRhX3NpemUgPSBieXRlc190b19yZWFkOwogCWhtLnUuZC51LmRhdGEucGJfZGF0YSA9IHBiX2RhdGE7CiAKQEAgLTEyMTcsNzIgKzk2Miw3NiBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9pbnN0cmVhbV9zdGFydChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfaW5zdHJlYW0pCit1MTYgaHBpX2luc3RyZWFtX3N0YXJ0KHUzMiBoX2luc3RyZWFtKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9JU1RSRUFNLAogCQlIUElfSVNUUkVBTV9TVEFSVCk7Ci0JdTMyVE9JTkRFWEVTKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2luc3RyZWFtX3dhaXRfc3RhcnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfaW5zdHJlYW0pCit1MTYgaHBpX2luc3RyZWFtX3dhaXRfc3RhcnQodTMyIGhfaW5zdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0lTVFJFQU0sCiAJCUhQSV9JU1RSRUFNX1dBSVRfU1RBUlQpOwotCXUzMlRPSU5ERVhFUyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9pbnN0cmVhbV9zdG9wKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9pbnN0cmVhbSkKK3UxNiBocGlfaW5zdHJlYW1fc3RvcCh1MzIgaF9pbnN0cmVhbSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKIAkJSFBJX0lTVFJFQU1fU1RPUCk7Ci0JdTMyVE9JTkRFWEVTKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2luc3RyZWFtX3Jlc2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9pbnN0cmVhbSkKK3UxNiBocGlfaW5zdHJlYW1fcmVzZXQodTMyIGhfaW5zdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0lTVFJFQU0sCiAJCUhQSV9JU1RSRUFNX1JFU0VUKTsKLQl1MzJUT0lOREVYRVMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfaW5zdHJlYW1fZ2V0X2luZm9fZXgoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfaW5zdHJlYW0sIHUxNiAqcHdfc3RhdGUsIHUzMiAqcGJ1ZmZlcl9zaXplLCB1MzIgKnBkYXRhX3JlY29yZGVkLAotCXUzMiAqcHNhbXBsZXNfcmVjb3JkZWQsIHUzMiAqcGF1eGlsaWFyeV9kYXRhX3JlY29yZGVkKQordTE2IGhwaV9pbnN0cmVhbV9nZXRfaW5mb19leCh1MzIgaF9pbnN0cmVhbSwgdTE2ICpwd19zdGF0ZSwgdTMyICpwYnVmZmVyX3NpemUsCisJdTMyICpwZGF0YV9yZWNvcmRlZCwgdTMyICpwc2FtcGxlc19yZWNvcmRlZCwKKwl1MzIgKnBhdXhpbGlhcnlfZGF0YV9yZWNvcmRlZCkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0lTVFJFQU0sCiAJCUhQSV9JU1RSRUFNX0dFVF9JTkZPKTsKLQl1MzJUT0lOREVYRVMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAKQEAgLTEzMDAsMTUgKzEwNDksMTUgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfaW5zdHJlYW1fYW5jaWxsYXJ5X3Jlc2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtLCB1MTYgYnl0ZXNfcGVyX2ZyYW1lLCB1MTYgbW9kZSwgdTE2IGFsaWdubWVudCwKLQl1MTYgaWRsZV9iaXQpCit1MTYgaHBpX2luc3RyZWFtX2FuY2lsbGFyeV9yZXNldCh1MzIgaF9pbnN0cmVhbSwgdTE2IGJ5dGVzX3Blcl9mcmFtZSwKKwl1MTYgbW9kZSwgdTE2IGFsaWdubWVudCwgdTE2IGlkbGVfYml0KQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKIAkJSFBJX0lTVFJFQU1fQU5DX1JFU0VUKTsKLQl1MzJUT0lOREVYRVMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhtLnUuZC51LmRhdGEuZm9ybWF0LmF0dHJpYnV0ZXMgPSBieXRlc19wZXJfZnJhbWU7CiAJaG0udS5kLnUuZGF0YS5mb3JtYXQuZm9ybWF0ID0gKG1vZGUgPDwgOCkgfCAoYWxpZ25tZW50ICYgMHhmZik7CiAJaG0udS5kLnUuZGF0YS5mb3JtYXQuY2hhbm5lbHMgPSBpZGxlX2JpdDsKQEAgLTEzMTYsMTQgKzEwNjUsMTQgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfaW5zdHJlYW1fYW5jaWxsYXJ5X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtLCB1MzIgKnBmcmFtZV9zcGFjZSkKK3UxNiBocGlfaW5zdHJlYW1fYW5jaWxsYXJ5X2dldF9pbmZvKHUzMiBoX2luc3RyZWFtLCB1MzIgKnBmcmFtZV9zcGFjZSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0lTVFJFQU0sCiAJCUhQSV9JU1RSRUFNX0FOQ19HRVRfSU5GTyk7Ci0JdTMyVE9JTkRFWEVTKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAlpZiAocGZyYW1lX3NwYWNlKQogCQkqcGZyYW1lX3NwYWNlID0KQEAgLTEzMzMsOCArMTA4Miw4IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2luc3RyZWFtX2FuY2lsbGFyeV93cml0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9pbnN0cmVhbSwgY29uc3Qgc3RydWN0IGhwaV9hbmNfZnJhbWUgKnBfYW5jX2ZyYW1lX2J1ZmZlciwKK3UxNiBocGlfaW5zdHJlYW1fYW5jaWxsYXJ5X3dyaXRlKHUzMiBoX2luc3RyZWFtLAorCWNvbnN0IHN0cnVjdCBocGlfYW5jX2ZyYW1lICpwX2FuY19mcmFtZV9idWZmZXIsCiAJdTMyIGFuY19mcmFtZV9idWZmZXJfc2l6ZV9pbl9ieXRlcywKIAl1MzIgbnVtYmVyX29mX2FuY2lsbGFyeV9mcmFtZXNfdG9fd3JpdGUpCiB7CkBAIC0xMzQzLDcgKzEwOTIsOCBAQAogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9JU1RSRUFNLAogCQlIUElfSVNUUkVBTV9BTkNfV1JJVEUpOwotCXUzMlRPSU5ERVhFUyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0udS5kLnUuZGF0YS5wYl9kYXRhID0gKHU4ICopcF9hbmNfZnJhbWVfYnVmZmVyOwogCWhtLnUuZC51LmRhdGEuZGF0YV9zaXplID0KIAkJbnVtYmVyX29mX2FuY2lsbGFyeV9mcmFtZXNfdG9fd3JpdGUgKgpAQCAtMTM1MSwxMiArMTEwMSwxMSBAQAogCWlmIChobS51LmQudS5kYXRhLmRhdGFfc2l6ZSA8PSBhbmNfZnJhbWVfYnVmZmVyX3NpemVfaW5fYnl0ZXMpCiAJCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCWVsc2UKLQkJaHIuZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9EQVRBX1RSQU5TRkVSOworCQloci5lcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX0RBVEFTSVpFOwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9pbnN0cmVhbV9ob3N0X2J1ZmZlcl9hbGxvY2F0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9pbnN0cmVhbSwgdTMyIHNpemVfaW5fYnl0ZXMpCit1MTYgaHBpX2luc3RyZWFtX2hvc3RfYnVmZmVyX2FsbG9jYXRlKHUzMiBoX2luc3RyZWFtLCB1MzIgc2l6ZV9pbl9ieXRlcykKIHsKIAogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKQEAgLTEzNjQsMTQgKzExMTMsMTQgQEAKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKIAkJSFBJX0lTVFJFQU1fSE9TVEJVRkZFUl9BTExPQyk7Ci0JdTMyVE9JTkRFWEVTKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmQudS5kYXRhLmRhdGFfc2l6ZSA9IHNpemVfaW5fYnl0ZXM7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2luc3RyZWFtX2hvc3RfYnVmZmVyX2dldF9pbmZvKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtLCB1OCAqKnBwX2J1ZmZlciwKK3UxNiBocGlfaW5zdHJlYW1faG9zdF9idWZmZXJfZ2V0X2luZm8odTMyIGhfaW5zdHJlYW0sIHU4ICoqcHBfYnVmZmVyLAogCXN0cnVjdCBocGlfaG9zdGJ1ZmZlcl9zdGF0dXMgKipwcF9zdGF0dXMpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwpAQCAtMTM3OSw3ICsxMTI4LDggQEAKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKIAkJSFBJX0lTVFJFQU1fSE9TVEJVRkZFUl9HRVRfSU5GTyk7Ci0JdTMyVE9JTkRFWEVTKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIAogCWlmIChoci5lcnJvciA9PSAwKSB7CkBAIC0xMzkxLDggKzExNDEsNyBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9pbnN0cmVhbV9ob3N0X2J1ZmZlcl9mcmVlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2luc3RyZWFtKQordTE2IGhwaV9pbnN0cmVhbV9ob3N0X2J1ZmZlcl9mcmVlKHUzMiBoX2luc3RyZWFtKQogewogCiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwpAQCAtMTQwMCwxMyArMTE0OSwxMyBAQAogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9JU1RSRUFNLAogCQlIUElfSVNUUkVBTV9IT1NUQlVGRkVSX0ZSRUUpOwotCXUzMlRPSU5ERVhFUyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2luc3RyZWFtX2dyb3VwX2FkZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9pbnN0cmVhbSwgdTMyIGhfc3RyZWFtKQordTE2IGhwaV9pbnN0cmVhbV9ncm91cF9hZGQodTMyIGhfaW5zdHJlYW0sIHUzMiBoX3N0cmVhbSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKQEAgLTE0MTYsMjIgKzExNjUsMjMgQEAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0lTVFJFQU0sCiAJCUhQSV9JU1RSRUFNX0dST1VQX0FERCk7CiAJaHIuZXJyb3IgPSAwOwotCXUzMlRPSU5ERVhFUyhoX2luc3RyZWFtLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfaW5zdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKKworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9zdHJlYW0sICZhZGFwdGVyLAorCQkJJmhtLnUuZC51LnN0cmVhbS5zdHJlYW1faW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOworCiAJY19vYmpfdHlwZSA9IGhwaV9oYW5kbGVfb2JqZWN0KGhfc3RyZWFtKTsKIAogCXN3aXRjaCAoY19vYmpfdHlwZSkgewogCWNhc2UgSFBJX09CSl9PU1RSRUFNOgotCQlobS51LmQudS5zdHJlYW0ub2JqZWN0X3R5cGUgPSBIUElfT0JKX09TVFJFQU07Ci0JCXUzMlRPSU5ERVhFUyhoX3N0cmVhbSwgJmFkYXB0ZXIsCi0JCQkmaG0udS5kLnUuc3RyZWFtLnN0cmVhbV9pbmRleCk7Ci0JCWJyZWFrOwogCWNhc2UgSFBJX09CSl9JU1RSRUFNOgotCQlobS51LmQudS5zdHJlYW0ub2JqZWN0X3R5cGUgPSBIUElfT0JKX0lTVFJFQU07Ci0JCXUzMlRPSU5ERVhFUyhoX3N0cmVhbSwgJmFkYXB0ZXIsCi0JCQkmaG0udS5kLnUuc3RyZWFtLnN0cmVhbV9pbmRleCk7CisJCWhtLnUuZC51LnN0cmVhbS5vYmplY3RfdHlwZSA9IGNfb2JqX3R5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9TVFJFQU07CisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9PQko7CiAJfQogCiAJaWYgKGFkYXB0ZXIgIT0gaG0uYWRhcHRlcl9pbmRleCkKQEAgLTE0NDEsMTUgKzExOTEsMTYgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfaW5zdHJlYW1fZ3JvdXBfZ2V0X21hcChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9pbnN0cmVhbSwgdTMyICpwb3V0c3RyZWFtX21hcCwgdTMyICpwaW5zdHJlYW1fbWFwKQordTE2IGhwaV9pbnN0cmVhbV9ncm91cF9nZXRfbWFwKHUzMiBoX2luc3RyZWFtLCB1MzIgKnBvdXRzdHJlYW1fbWFwLAorCXUzMiAqcGluc3RyZWFtX21hcCkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKIAkJSFBJX0lTVFJFQU1fSE9TVEJVRkZFUl9GUkVFKTsKLQl1MzJUT0lOREVYRVMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCiAJaWYgKHBvdXRzdHJlYW1fbWFwKQpAQCAtMTQ2MCwyMSArMTIxMSwyMCBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9pbnN0cmVhbV9ncm91cF9yZXNldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9pbnN0cmVhbSkKK3UxNiBocGlfaW5zdHJlYW1fZ3JvdXBfcmVzZXQodTMyIGhfaW5zdHJlYW0pCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0lTVFJFQU0sCiAJCUhQSV9JU1RSRUFNX0dST1VQX1JFU0VUKTsKLQl1MzJUT0lOREVYRVMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9pbnN0cmVhbSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9taXhlcl9vcGVuKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MTYgYWRhcHRlcl9pbmRleCwKLQl1MzIgKnBoX21peGVyKQordTE2IGhwaV9taXhlcl9vcGVuKHUxNiBhZGFwdGVyX2luZGV4LCB1MzIgKnBoX21peGVyKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwpAQCAtMTQ5MiwyNSArMTI0MiwyOSBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9taXhlcl9jbG9zZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfbWl4ZXIpCit1MTYgaHBpX21peGVyX2Nsb3NlKHUzMiBoX21peGVyKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9NSVhFUiwgSFBJX01JWEVSX0NMT1NFKTsKLQl1MzJUT0lOREVYKGhfbWl4ZXIsICZobS5hZGFwdGVyX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfbWl4ZXIsICZobS5hZGFwdGVyX2luZGV4LCBOVUxMKSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKKwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9taXhlcl9nZXRfY29udHJvbChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfbWl4ZXIsCi0JdTE2IHNyY19ub2RlX3R5cGUsIHUxNiBzcmNfbm9kZV90eXBlX2luZGV4LCB1MTYgZHN0X25vZGVfdHlwZSwKLQl1MTYgZHN0X25vZGVfdHlwZV9pbmRleCwgdTE2IGNvbnRyb2xfdHlwZSwgdTMyICpwaF9jb250cm9sKQordTE2IGhwaV9taXhlcl9nZXRfY29udHJvbCh1MzIgaF9taXhlciwgdTE2IHNyY19ub2RlX3R5cGUsCisJdTE2IHNyY19ub2RlX3R5cGVfaW5kZXgsIHUxNiBkc3Rfbm9kZV90eXBlLCB1MTYgZHN0X25vZGVfdHlwZV9pbmRleCwKKwl1MTYgY29udHJvbF90eXBlLCB1MzIgKnBoX2NvbnRyb2wpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9NSVhFUiwKIAkJSFBJX01JWEVSX0dFVF9DT05UUk9MKTsKLQl1MzJUT0lOREVYKGhfbWl4ZXIsICZobS5hZGFwdGVyX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfbWl4ZXIsICZobS5hZGFwdGVyX2luZGV4LCBOVUxMKSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51Lm0ubm9kZV90eXBlMSA9IHNyY19ub2RlX3R5cGU7CiAJaG0udS5tLm5vZGVfaW5kZXgxID0gc3JjX25vZGVfdHlwZV9pbmRleDsKIAlobS51Lm0ubm9kZV90eXBlMiA9IGRzdF9ub2RlX3R5cGU7CkBAIC0xNTI4LDE2ICsxMjgyLDE2IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX21peGVyX2dldF9jb250cm9sX2J5X2luZGV4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX21peGVyLCB1MTYgY29udHJvbF9pbmRleCwgdTE2ICpwd19zcmNfbm9kZV90eXBlLAotCXUxNiAqcHdfc3JjX25vZGVfaW5kZXgsIHUxNiAqcHdfZHN0X25vZGVfdHlwZSwgdTE2ICpwd19kc3Rfbm9kZV9pbmRleCwKLQl1MTYgKnB3X2NvbnRyb2xfdHlwZSwgdTMyICpwaF9jb250cm9sKQordTE2IGhwaV9taXhlcl9nZXRfY29udHJvbF9ieV9pbmRleCh1MzIgaF9taXhlciwgdTE2IGNvbnRyb2xfaW5kZXgsCisJdTE2ICpwd19zcmNfbm9kZV90eXBlLCB1MTYgKnB3X3NyY19ub2RlX2luZGV4LCB1MTYgKnB3X2RzdF9ub2RlX3R5cGUsCisJdTE2ICpwd19kc3Rfbm9kZV9pbmRleCwgdTE2ICpwd19jb250cm9sX3R5cGUsIHUzMiAqcGhfY29udHJvbCkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX01JWEVSLAogCQlIUElfTUlYRVJfR0VUX0NPTlRST0xfQllfSU5ERVgpOwotCXUzMlRPSU5ERVgoaF9taXhlciwgJmhtLmFkYXB0ZXJfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9taXhlciwgJmhtLmFkYXB0ZXJfaW5kZXgsIE5VTEwpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhtLnUubS5jb250cm9sX2luZGV4ID0gY29udHJvbF9pbmRleDsKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKIApAQCAtMTU2MiwxMyArMTMxNiwxNCBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9taXhlcl9zdG9yZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfbWl4ZXIsCi0JZW51bSBIUElfTUlYRVJfU1RPUkVfQ09NTUFORCBjb21tYW5kLCB1MTYgaW5kZXgpCit1MTYgaHBpX21peGVyX3N0b3JlKHUzMiBoX21peGVyLCBlbnVtIEhQSV9NSVhFUl9TVE9SRV9DT01NQU5EIGNvbW1hbmQsCisJdTE2IGluZGV4KQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfTUlYRVIsIEhQSV9NSVhFUl9TVE9SRSk7Ci0JdTMyVE9JTkRFWChoX21peGVyLCAmaG0uYWRhcHRlcl9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX21peGVyLCAmaG0uYWRhcHRlcl9pbmRleCwgTlVMTCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0udS5teC5zdG9yZS5jb21tYW5kID0gY29tbWFuZDsKIAlobS51Lm14LnN0b3JlLmluZGV4ID0gaW5kZXg7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CkBAIC0xNTc2LDE2ICsxMzMxLDE2IEBACiB9CiAKIHN0YXRpYwotdTE2IGhwaV9jb250cm9sX3BhcmFtX3NldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF9jb250cm9sLCBjb25zdCB1MTYgYXR0cmliLCBjb25zdCB1MzIgcGFyYW0xLAotCWNvbnN0IHUzMiBwYXJhbTIpCit1MTYgaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGNvbnN0IHUzMiBoX2NvbnRyb2wsIGNvbnN0IHUxNiBhdHRyaWIsCisJY29uc3QgdTMyIHBhcmFtMSwgY29uc3QgdTMyIHBhcmFtMikKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfU0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gYXR0cmliOwogCWhtLnUuYy5wYXJhbTEgPSBwYXJhbTE7CiAJaG0udS5jLnBhcmFtMiA9IHBhcmFtMjsKQEAgLTE2MDEsNyArMTM1Niw4IEBACiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX1NFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0udS5jLmF0dHJpYnV0ZSA9IGF0dHJpYjsKIAlobS51LmMuYW5fbG9nX3ZhbHVlWzBdID0gc3YwOwogCWhtLnUuYy5hbl9sb2dfdmFsdWVbMV0gPSBzdjE7CkBAIC0xNjEwLDE2ICsxMzY2LDE2IEBACiB9CiAKIHN0YXRpYwotdTE2IGhwaV9jb250cm9sX3BhcmFtX2dldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF9jb250cm9sLCBjb25zdCB1MTYgYXR0cmliLCB1MzIgcGFyYW0xLCB1MzIgcGFyYW0yLAotCXUzMiAqcHBhcmFtMSwgdTMyICpwcGFyYW0yKQordTE2IGhwaV9jb250cm9sX3BhcmFtX2dldChjb25zdCB1MzIgaF9jb250cm9sLCBjb25zdCB1MTYgYXR0cmliLCB1MzIgcGFyYW0xLAorCXUzMiBwYXJhbTIsIHUzMiAqcHBhcmFtMSwgdTMyICpwcGFyYW0yKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhtLnUuYy5hdHRyaWJ1dGUgPSBhdHRyaWI7CiAJaG0udS5jLnBhcmFtMSA9IHBhcmFtMTsKIAlobS51LmMucGFyYW0yID0gcGFyYW0yOwpAQCAtMTYzMiwxOSArMTM4OCwyMCBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotI2RlZmluZSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHMsIGgsIGEsIHAxKSBcCi0JCWhwaV9jb250cm9sX3BhcmFtX2dldChzLCBoLCBhLCAwLCAwLCBwMSwgTlVMTCkKLSNkZWZpbmUgaHBpX2NvbnRyb2xfcGFyYW0yX2dldChzLCBoLCBhLCBwMSwgcDIpIFwKLQkJaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KHMsIGgsIGEsIDAsIDAsIHAxLCBwMikKKyNkZWZpbmUgaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoLCBhLCBwMSkgXAorCQlocGlfY29udHJvbF9wYXJhbV9nZXQoaCwgYSwgMCwgMCwgcDEsIE5VTEwpCisjZGVmaW5lIGhwaV9jb250cm9sX3BhcmFtMl9nZXQoaCwgYSwgcDEsIHAyKSBcCisJCWhwaV9jb250cm9sX3BhcmFtX2dldChoLCBhLCAwLCAwLCBwMSwgcDIpCiAKLXN0YXRpYyB1MTYgaHBpX2NvbnRyb2xfbG9nX2dldDIoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGF0dHJpYiwgc2hvcnQgKnN2MCwgc2hvcnQgKnN2MSkKK3N0YXRpYyB1MTYgaHBpX2NvbnRyb2xfbG9nX2dldDIodTMyIGhfY29udHJvbCwgdTE2IGF0dHJpYiwgc2hvcnQgKnN2MCwKKwlzaG9ydCAqc3YxKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gYXR0cmliOwogCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CkBAIC0xNjU1LDggKzE0MTIsNyBAQAogfQogCiBzdGF0aWMKLXUxNiBocGlfY29udHJvbF9xdWVyeShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF9jb250cm9sLCBjb25zdCB1MTYgYXR0cmliLCBjb25zdCB1MzIgaW5kZXgsCit1MTYgaHBpX2NvbnRyb2xfcXVlcnkoY29uc3QgdTMyIGhfY29udHJvbCwgY29uc3QgdTE2IGF0dHJpYiwgY29uc3QgdTMyIGluZGV4LAogCWNvbnN0IHUzMiBwYXJhbSwgdTMyICpwc2V0dGluZykKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CkBAIC0xNjY0LDcgKzE0MjAsOCBAQAogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfSU5GTyk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKIAlobS51LmMuYXR0cmlidXRlID0gYXR0cmliOwogCWhtLnUuYy5wYXJhbTEgPSBpbmRleDsKQEAgLTE2ODIsNyArMTQzOSw3IEBACiAJdW5zaWduZWQgaW50IHN1Yl9zdHJpbmdfaW5kZXggPSAwLCBqID0gMDsKIAljaGFyIGMgPSAwOwogCXVuc2lnbmVkIGludCBuID0gMDsKLQl1MTYgaEUgPSAwOworCXUxNiBlcnIgPSAwOwogCiAJaWYgKChzdHJpbmdfbGVuZ3RoIDwgMSkgfHwgKHN0cmluZ19sZW5ndGggPiAyNTYpKQogCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfQ09OVFJPTF9WQUxVRTsKQEAgLTE2OTMsNyArMTQ1MCw5IEBACiAKIAkJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQkJdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCQlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsCisJCQkJJmhtLm9ial9pbmRleCkpCisJCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCQlobS51LmMuYXR0cmlidXRlID0gYXR0cmlidXRlOwogCQlobS51LmMucGFyYW0xID0gc3ViX3N0cmluZ19pbmRleDsKIAkJaG0udS5jLnBhcmFtMiA9IDA7CkBAIC0xNzA1LDcgKzE0NjQsNyBAQAogCQkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0NPTlRST0xfVkFMVUU7CiAKIAkJaWYgKGhyLmVycm9yKSB7Ci0JCQloRSA9IGhyLmVycm9yOworCQkJZXJyID0gaHIuZXJyb3I7CiAJCQlicmVhazsKIAkJfQogCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CkBAIC0xNzE0LDcgKzE0NzMsNyBAQAogCQkJbisrOwogCQkJaWYgKG4gPj0gc3RyaW5nX2xlbmd0aCkgewogCQkJCXBzel9zdHJpbmdbc3RyaW5nX2xlbmd0aCAtIDFdID0gMDsKLQkJCQloRSA9IEhQSV9FUlJPUl9JTlZBTElEX0NPTlRST0xfVkFMVUU7CisJCQkJZXJyID0gSFBJX0VSUk9SX0lOVkFMSURfQ09OVFJPTF9WQUxVRTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjID09IDApCkBAIC0xNzMwLDU3ICsxNDg5LDUyIEBACiAJCWlmIChjID09IDApCiAJCQlicmVhazsKIAl9Ci0JcmV0dXJuIGhFOworCXJldHVybiBlcnI7CiB9CiAKLXUxNiBIUElfQUVTRUJVX19yZWNlaXZlcl9xdWVyeV9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfYWVzX3J4LCBjb25zdCB1MzIgaW5kZXgsIHUxNiAqcHdfZm9ybWF0KQordTE2IGhwaV9hZXNlYnVfcmVjZWl2ZXJfcXVlcnlfZm9ybWF0KGNvbnN0IHUzMiBoX2Flc19yeCwgY29uc3QgdTMyIGluZGV4LAorCXUxNiAqcHdfZm9ybWF0KQogewogCXUzMiBxcjsKIAl1MTYgZXJyOwogCi0JZXJyID0gaHBpX2NvbnRyb2xfcXVlcnkocGhfc3Vic3lzLCBoX2Flc19yeCwgSFBJX0FFU0VCVVJYX0ZPUk1BVCwKLQkJaW5kZXgsIDAsICZxcik7CisJZXJyID0gaHBpX2NvbnRyb2xfcXVlcnkoaF9hZXNfcngsIEhQSV9BRVNFQlVSWF9GT1JNQVQsIGluZGV4LCAwLCAmcXIpOwogCSpwd19mb3JtYXQgPSAodTE2KXFyOwogCXJldHVybiBlcnI7CiB9CiAKLXUxNiBIUElfQUVTRUJVX19yZWNlaXZlcl9zZXRfZm9ybWF0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBmb3JtYXQpCit1MTYgaHBpX2Flc2VidV9yZWNlaXZlcl9zZXRfZm9ybWF0KHUzMiBoX2NvbnRyb2wsIHUxNiBmb3JtYXQpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0FFU0VCVVJYX0ZPUk1BVCwgZm9ybWF0LCAwKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX0FFU0VCVVJYX0ZPUk1BVCwgZm9ybWF0LAorCQkwKTsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3JlY2VpdmVyX2dldF9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19mb3JtYXQpCit1MTYgaHBpX2Flc2VidV9yZWNlaXZlcl9nZXRfZm9ybWF0KHUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfZm9ybWF0KQogewogCXUxNiBlcnI7CiAJdTMyIHBhcmFtOwogCi0JZXJyID0gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0FFU0VCVVJYX0ZPUk1BVCwgJnBhcmFtKTsKKwllcnIgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX0FFU0VCVVJYX0ZPUk1BVCwgJnBhcmFtKTsKIAlpZiAoIWVyciAmJiBwd19mb3JtYXQpCiAJCSpwd19mb3JtYXQgPSAodTE2KXBhcmFtOwogCiAJcmV0dXJuIGVycjsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3JlY2VpdmVyX2dldF9zYW1wbGVfcmF0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBzYW1wbGVfcmF0ZSkKK3UxNiBocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF9zYW1wbGVfcmF0ZSh1MzIgaF9jb250cm9sLCB1MzIgKnBzYW1wbGVfcmF0ZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0FFU0VCVVJYX1NBTVBMRVJBVEUsIHBzYW1wbGVfcmF0ZSk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQoaF9jb250cm9sLCBIUElfQUVTRUJVUlhfU0FNUExFUkFURSwKKwkJcHNhbXBsZV9yYXRlKTsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3JlY2VpdmVyX2dldF91c2VyX2RhdGEoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCB1MTYgKnB3X2RhdGEpCit1MTYgaHBpX2Flc2VidV9yZWNlaXZlcl9nZXRfdXNlcl9kYXRhKHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2ICpwd19kYXRhKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX0FFU0VCVVJYX1VTRVJEQVRBOwogCWhtLnUuYy5wYXJhbTEgPSBpbmRleDsKIApAQCAtMTc5MSwxNCArMTU0NSwxNSBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3JlY2VpdmVyX2dldF9jaGFubmVsX3N0YXR1cyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMKLQkqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsIHUxNiAqcHdfZGF0YSkKK3UxNiBocGlfYWVzZWJ1X3JlY2VpdmVyX2dldF9jaGFubmVsX3N0YXR1cyh1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsCisJdTE2ICpwd19kYXRhKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX0FFU0VCVVJYX0NIQU5ORUxTVEFUVVM7CiAJaG0udS5jLnBhcmFtMSA9IGluZGV4OwogCkBAIC0xODA5LDEwMSArMTU2NCw5MyBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3JlY2VpdmVyX2dldF9lcnJvcl9zdGF0dXMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19lcnJvcl9kYXRhKQordTE2IGhwaV9hZXNlYnVfcmVjZWl2ZXJfZ2V0X2Vycm9yX3N0YXR1cyh1MzIgaF9jb250cm9sLCB1MTYgKnB3X2Vycm9yX2RhdGEpCiB7CiAJdTMyIGVycm9yX2RhdGEgPSAwOwotCXUxNiBlcnJvciA9IDA7CisJdTE2IGVyciA9IDA7CiAKLQllcnJvciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9BRVNFQlVSWF9FUlJPUlNUQVRVUywgJmVycm9yX2RhdGEpOworCWVyciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQoaF9jb250cm9sLCBIUElfQUVTRUJVUlhfRVJST1JTVEFUVVMsCisJCSZlcnJvcl9kYXRhKTsKIAlpZiAocHdfZXJyb3JfZGF0YSkKIAkJKnB3X2Vycm9yX2RhdGEgPSAodTE2KWVycm9yX2RhdGE7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBlcnI7CiB9CiAKLXUxNiBIUElfQUVTRUJVX190cmFuc21pdHRlcl9zZXRfc2FtcGxlX3JhdGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzCi0JKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwgdTMyIHNhbXBsZV9yYXRlKQordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfc2V0X3NhbXBsZV9yYXRlKHUzMiBoX2NvbnRyb2wsIHUzMiBzYW1wbGVfcmF0ZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfQUVTRUJVVFhfU0FNUExFUkFURSwgc2FtcGxlX3JhdGUsIDApOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfQUVTRUJVVFhfU0FNUExFUkFURSwKKwkJc2FtcGxlX3JhdGUsIDApOwogfQogCi11MTYgSFBJX0FFU0VCVV9fdHJhbnNtaXR0ZXJfc2V0X3VzZXJfZGF0YShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsIHUxNiBkYXRhKQordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfc2V0X3VzZXJfZGF0YSh1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsIHUxNiBkYXRhKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9BRVNFQlVUWF9VU0VSREFUQSwgaW5kZXgsIGRhdGEpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfQUVTRUJVVFhfVVNFUkRBVEEsIGluZGV4LAorCQlkYXRhKTsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3RyYW5zbWl0dGVyX3NldF9jaGFubmVsX3N0YXR1cyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMKLQkqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLCB1MTYgaW5kZXgsIHUxNiBkYXRhKQordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfc2V0X2NoYW5uZWxfc3RhdHVzKHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwKKwl1MTYgZGF0YSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfQUVTRUJVVFhfQ0hBTk5FTFNUQVRVUywgaW5kZXgsIGRhdGEpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfQUVTRUJVVFhfQ0hBTk5FTFNUQVRVUywKKwkJaW5kZXgsIGRhdGEpOwogfQogCi11MTYgSFBJX0FFU0VCVV9fdHJhbnNtaXR0ZXJfZ2V0X2NoYW5uZWxfc3RhdHVzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cwotCSpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2ICpwd19kYXRhKQordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfZ2V0X2NoYW5uZWxfc3RhdHVzKHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwKKwl1MTYgKnB3X2RhdGEpCiB7CiAJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX09QRVJBVElPTjsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3RyYW5zbWl0dGVyX3F1ZXJ5X2Zvcm1hdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF9hZXNfdHgsIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19mb3JtYXQpCit1MTYgaHBpX2Flc2VidV90cmFuc21pdHRlcl9xdWVyeV9mb3JtYXQoY29uc3QgdTMyIGhfYWVzX3R4LCBjb25zdCB1MzIgaW5kZXgsCisJdTE2ICpwd19mb3JtYXQpCiB7CiAJdTMyIHFyOwogCXUxNiBlcnI7CiAKLQllcnIgPSBocGlfY29udHJvbF9xdWVyeShwaF9zdWJzeXMsIGhfYWVzX3R4LCBIUElfQUVTRUJVVFhfRk9STUFULAotCQlpbmRleCwgMCwgJnFyKTsKKwllcnIgPSBocGlfY29udHJvbF9xdWVyeShoX2Flc190eCwgSFBJX0FFU0VCVVRYX0ZPUk1BVCwgaW5kZXgsIDAsICZxcik7CiAJKnB3X2Zvcm1hdCA9ICh1MTYpcXI7CiAJcmV0dXJuIGVycjsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3RyYW5zbWl0dGVyX3NldF9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IG91dHB1dF9mb3JtYXQpCit1MTYgaHBpX2Flc2VidV90cmFuc21pdHRlcl9zZXRfZm9ybWF0KHUzMiBoX2NvbnRyb2wsIHUxNiBvdXRwdXRfZm9ybWF0KQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9BRVNFQlVUWF9GT1JNQVQsIG91dHB1dF9mb3JtYXQsIDApOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfQUVTRUJVVFhfRk9STUFULAorCQlvdXRwdXRfZm9ybWF0LCAwKTsKIH0KIAotdTE2IEhQSV9BRVNFQlVfX3RyYW5zbWl0dGVyX2dldF9mb3JtYXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19vdXRwdXRfZm9ybWF0KQordTE2IGhwaV9hZXNlYnVfdHJhbnNtaXR0ZXJfZ2V0X2Zvcm1hdCh1MzIgaF9jb250cm9sLCB1MTYgKnB3X291dHB1dF9mb3JtYXQpCiB7CiAJdTE2IGVycjsKIAl1MzIgcGFyYW07CiAKLQllcnIgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfQUVTRUJVVFhfRk9STUFULCAmcGFyYW0pOworCWVyciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQoaF9jb250cm9sLCBIUElfQUVTRUJVVFhfRk9STUFULCAmcGFyYW0pOwogCWlmICghZXJyICYmIHB3X291dHB1dF9mb3JtYXQpCiAJCSpwd19vdXRwdXRfZm9ybWF0ID0gKHUxNilwYXJhbTsKIAogCXJldHVybiBlcnI7CiB9CiAKLXUxNiBocGlfYml0c3RyZWFtX3NldF9jbG9ja19lZGdlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBlZGdlX3R5cGUpCit1MTYgaHBpX2JpdHN0cmVhbV9zZXRfY2xvY2tfZWRnZSh1MzIgaF9jb250cm9sLCB1MTYgZWRnZV90eXBlKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9CSVRTVFJFQU1fQ0xPQ0tfRURHRSwgZWRnZV90eXBlLCAwKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX0JJVFNUUkVBTV9DTE9DS19FREdFLAorCQllZGdlX3R5cGUsIDApOwogfQogCi11MTYgaHBpX2JpdHN0cmVhbV9zZXRfZGF0YV9wb2xhcml0eShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgcG9sYXJpdHkpCit1MTYgaHBpX2JpdHN0cmVhbV9zZXRfZGF0YV9wb2xhcml0eSh1MzIgaF9jb250cm9sLCB1MTYgcG9sYXJpdHkpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0JJVFNUUkVBTV9EQVRBX1BPTEFSSVRZLCBwb2xhcml0eSwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9CSVRTVFJFQU1fREFUQV9QT0xBUklUWSwKKwkJcG9sYXJpdHksIDApOwogfQogCi11MTYgaHBpX2JpdHN0cmVhbV9nZXRfYWN0aXZpdHkoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19jbGtfYWN0aXZpdHksIHUxNiAqcHdfZGF0YV9hY3Rpdml0eSkKK3UxNiBocGlfYml0c3RyZWFtX2dldF9hY3Rpdml0eSh1MzIgaF9jb250cm9sLCB1MTYgKnB3X2Nsa19hY3Rpdml0eSwKKwl1MTYgKnB3X2RhdGFfYWN0aXZpdHkpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfQklUU1RSRUFNX0FDVElWSVRZOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCWlmIChwd19jbGtfYWN0aXZpdHkpCkBAIC0xOTEzLDQ1ICsxNjYwLDQzIEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2NoYW5uZWxfbW9kZV9xdWVyeV9tb2RlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX21vZGUsIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19tb2RlKQordTE2IGhwaV9jaGFubmVsX21vZGVfcXVlcnlfbW9kZShjb25zdCB1MzIgaF9tb2RlLCBjb25zdCB1MzIgaW5kZXgsCisJdTE2ICpwd19tb2RlKQogewogCXUzMiBxcjsKIAl1MTYgZXJyOwogCi0JZXJyID0gaHBpX2NvbnRyb2xfcXVlcnkocGhfc3Vic3lzLCBoX21vZGUsIEhQSV9DSEFOTkVMX01PREVfTU9ERSwKLQkJaW5kZXgsIDAsICZxcik7CisJZXJyID0gaHBpX2NvbnRyb2xfcXVlcnkoaF9tb2RlLCBIUElfQ0hBTk5FTF9NT0RFX01PREUsIGluZGV4LCAwLCAmcXIpOwogCSpwd19tb2RlID0gKHUxNilxcjsKIAlyZXR1cm4gZXJyOwogfQogCi11MTYgaHBpX2NoYW5uZWxfbW9kZV9zZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JdTE2IG1vZGUpCit1MTYgaHBpX2NoYW5uZWxfbW9kZV9zZXQodTMyIGhfY29udHJvbCwgdTE2IG1vZGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0NIQU5ORUxfTU9ERV9NT0RFLCBtb2RlLCAwKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX0NIQU5ORUxfTU9ERV9NT0RFLCBtb2RlLAorCQkwKTsKIH0KIAotdTE2IGhwaV9jaGFubmVsX21vZGVfZ2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUxNiAqbW9kZSkKK3UxNiBocGlfY2hhbm5lbF9tb2RlX2dldCh1MzIgaF9jb250cm9sLCB1MTYgKm1vZGUpCiB7CiAJdTMyIG1vZGUzMiA9IDA7Ci0JdTE2IGVycm9yID0gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKKwl1MTYgZXJyID0gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsCiAJCUhQSV9DSEFOTkVMX01PREVfTU9ERSwgJm1vZGUzMik7CiAJaWYgKG1vZGUpCiAJCSptb2RlID0gKHUxNiltb2RlMzI7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBlcnI7CiB9CiAKLXUxNiBocGlfY29icmFuZXRfaG1pX3dyaXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUzMiBobWlfYWRkcmVzcywgdTMyIGJ5dGVfY291bnQsIHU4ICpwYl9kYXRhKQordTE2IGhwaV9jb2JyYW5ldF9obWlfd3JpdGUodTMyIGhfY29udHJvbCwgdTMyIGhtaV9hZGRyZXNzLCB1MzIgYnl0ZV9jb3VudCwKKwl1OCAqcGJfZGF0YSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTEVYLAogCQlIUElfQ09OVFJPTF9TRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCiAJaG0udS5jeC51LmNvYnJhbmV0X2RhdGEuYnl0ZV9jb3VudCA9IGJ5dGVfY291bnQ7CiAJaG0udS5jeC51LmNvYnJhbmV0X2RhdGEuaG1pX2FkZHJlc3MgPSBobWlfYWRkcmVzczsKQEAgLTE5NjksMTUgKzE3MTQsMTYgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfY29icmFuZXRfaG1pX3JlYWQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JdTMyIGhtaV9hZGRyZXNzLCB1MzIgbWF4X2J5dGVfY291bnQsIHUzMiAqcGJ5dGVfY291bnQsIHU4ICpwYl9kYXRhKQordTE2IGhwaV9jb2JyYW5ldF9obWlfcmVhZCh1MzIgaF9jb250cm9sLCB1MzIgaG1pX2FkZHJlc3MsIHUzMiBtYXhfYnl0ZV9jb3VudCwKKwl1MzIgKnBieXRlX2NvdW50LCB1OCAqcGJfZGF0YSkKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTEVYLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCiAJaG0udS5jeC51LmNvYnJhbmV0X2RhdGEuYnl0ZV9jb3VudCA9IG1heF9ieXRlX2NvdW50OwogCWhtLnUuY3gudS5jb2JyYW5ldF9kYXRhLmhtaV9hZGRyZXNzID0gaG1pX2FkZHJlc3M7CkBAIC0yMDA4LDE2ICsxNzU0LDE2IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2NvYnJhbmV0X2htaV9nZXRfc3RhdHVzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiAqcHN0YXR1cywgdTMyICpwcmVhZGFibGVfc2l6ZSwKLQl1MzIgKnB3cml0ZWFibGVfc2l6ZSkKK3UxNiBocGlfY29icmFuZXRfaG1pX2dldF9zdGF0dXModTMyIGhfY29udHJvbCwgdTMyICpwc3RhdHVzLAorCXUzMiAqcHJlYWRhYmxlX3NpemUsIHUzMiAqcHdyaXRlYWJsZV9zaXplKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MRVgsCiAJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKIAlobS51LmN4LmF0dHJpYnV0ZSA9IEhQSV9DT0JSQU5FVF9HRVRfU1RBVFVTOwogCkBAIC0yMDM1LDE3NyArMTc4MSwxNzYgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfY29icmFuZXRfZ2V0SV9wYWRkcmVzcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBpX3BhZGRyZXNzKQordTE2IGhwaV9jb2JyYW5ldF9nZXRfaXBfYWRkcmVzcyh1MzIgaF9jb250cm9sLCB1MzIgKnBkd19pcF9hZGRyZXNzKQogewogCXUzMiBieXRlX2NvdW50OwogCXUzMiBpUDsKLQl1MTYgZXJyb3I7CisJdTE2IGVycjsKIAotCWVycm9yID0gaHBpX2NvYnJhbmV0X2htaV9yZWFkKHBoX3N1YnN5cywgaF9jb250cm9sLAorCWVyciA9IGhwaV9jb2JyYW5ldF9obWlfcmVhZChoX2NvbnRyb2wsCiAJCUhQSV9DT0JSQU5FVF9ITUlfY29icmFfaXBfbW9uX2N1cnJlbnRJUCwgNCwgJmJ5dGVfY291bnQsCiAJCSh1OCAqKSZpUCk7CiAKLQkqcGlfcGFkZHJlc3MgPQorCSpwZHdfaXBfYWRkcmVzcyA9CiAJCSgoaVAgJiAweGZmMDAwMDAwKSA+PiA4KSB8ICgoaVAgJiAweDAwZmYwMDAwKSA8PCA4KSB8ICgoaVAgJgogCQkJMHgwMDAwZmYwMCkgPj4gOCkgfCAoKGlQICYgMHgwMDAwMDBmZikgPDwgOCk7CiAKLQlpZiAoZXJyb3IpCi0JCSpwaV9wYWRkcmVzcyA9IDA7CisJaWYgKGVycikKKwkJKnBkd19pcF9hZGRyZXNzID0gMDsKIAotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZXJyOwogCiB9CiAKLXUxNiBocGlfY29icmFuZXRfc2V0SV9wYWRkcmVzcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgaV9wYWRkcmVzcykKK3UxNiBocGlfY29icmFuZXRfc2V0X2lwX2FkZHJlc3ModTMyIGhfY29udHJvbCwgdTMyIGR3X2lwX2FkZHJlc3MpCiB7CiAJdTMyIGlQOwotCXUxNiBlcnJvcjsKKwl1MTYgZXJyOwogCi0JaVAgPSAoKGlfcGFkZHJlc3MgJiAweGZmMDAwMDAwKSA+PiA4KSB8ICgoaV9wYWRkcmVzcyAmIDB4MDBmZjAwMDApIDw8Ci0JCTgpIHwgKChpX3BhZGRyZXNzICYgMHgwMDAwZmYwMCkgPj4gOCkgfCAoKGlfcGFkZHJlc3MgJgotCQkJMHgwMDAwMDBmZikgPDwgOCk7CisJaVAgPSAoKGR3X2lwX2FkZHJlc3MgJiAweGZmMDAwMDAwKSA+PiA4KSB8ICgoZHdfaXBfYWRkcmVzcyAmCisJCQkweDAwZmYwMDAwKSA8PCA4KSB8ICgoZHdfaXBfYWRkcmVzcyAmIDB4MDAwMGZmMDApID4+CisJCTgpIHwgKChkd19pcF9hZGRyZXNzICYgMHgwMDAwMDBmZikgPDwgOCk7CiAKLQllcnJvciA9IGhwaV9jb2JyYW5ldF9obWlfd3JpdGUocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJZXJyID0gaHBpX2NvYnJhbmV0X2htaV93cml0ZShoX2NvbnRyb2wsCiAJCUhQSV9DT0JSQU5FVF9ITUlfY29icmFfaXBfbW9uX2N1cnJlbnRJUCwgNCwgKHU4ICopJmlQKTsKIAotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZXJyOwogCiB9CiAKLXUxNiBocGlfY29icmFuZXRfZ2V0X3N0YXRpY0lfcGFkZHJlc3MoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwaV9wYWRkcmVzcykKK3UxNiBocGlfY29icmFuZXRfZ2V0X3N0YXRpY19pcF9hZGRyZXNzKHUzMiBoX2NvbnRyb2wsIHUzMiAqcGR3X2lwX2FkZHJlc3MpCiB7CiAJdTMyIGJ5dGVfY291bnQ7CiAJdTMyIGlQOwotCXUxNiBlcnJvcjsKLQllcnJvciA9IGhwaV9jb2JyYW5ldF9obWlfcmVhZChwaF9zdWJzeXMsIGhfY29udHJvbCwKKwl1MTYgZXJyOworCWVyciA9IGhwaV9jb2JyYW5ldF9obWlfcmVhZChoX2NvbnRyb2wsCiAJCUhQSV9DT0JSQU5FVF9ITUlfY29icmFfaXBfbW9uX3N0YXRpY0lQLCA0LCAmYnl0ZV9jb3VudCwKIAkJKHU4ICopJmlQKTsKIAotCSpwaV9wYWRkcmVzcyA9CisJKnBkd19pcF9hZGRyZXNzID0KIAkJKChpUCAmIDB4ZmYwMDAwMDApID4+IDgpIHwgKChpUCAmIDB4MDBmZjAwMDApIDw8IDgpIHwgKChpUCAmCiAJCQkweDAwMDBmZjAwKSA+PiA4KSB8ICgoaVAgJiAweDAwMDAwMGZmKSA8PCA4KTsKIAotCWlmIChlcnJvcikKLQkJKnBpX3BhZGRyZXNzID0gMDsKKwlpZiAoZXJyKQorCQkqcGR3X2lwX2FkZHJlc3MgPSAwOwogCi0JcmV0dXJuIGVycm9yOworCXJldHVybiBlcnI7CiAKIH0KIAotdTE2IGhwaV9jb2JyYW5ldF9zZXRfc3RhdGljSV9wYWRkcmVzcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgaV9wYWRkcmVzcykKK3UxNiBocGlfY29icmFuZXRfc2V0X3N0YXRpY19pcF9hZGRyZXNzKHUzMiBoX2NvbnRyb2wsIHUzMiBkd19pcF9hZGRyZXNzKQogewogCXUzMiBpUDsKLQl1MTYgZXJyb3I7CisJdTE2IGVycjsKIAotCWlQID0gKChpX3BhZGRyZXNzICYgMHhmZjAwMDAwMCkgPj4gOCkgfCAoKGlfcGFkZHJlc3MgJiAweDAwZmYwMDAwKSA8PAotCQk4KSB8ICgoaV9wYWRkcmVzcyAmIDB4MDAwMGZmMDApID4+IDgpIHwgKChpX3BhZGRyZXNzICYKLQkJCTB4MDAwMDAwZmYpIDw8IDgpOworCWlQID0gKChkd19pcF9hZGRyZXNzICYgMHhmZjAwMDAwMCkgPj4gOCkgfCAoKGR3X2lwX2FkZHJlc3MgJgorCQkJMHgwMGZmMDAwMCkgPDwgOCkgfCAoKGR3X2lwX2FkZHJlc3MgJiAweDAwMDBmZjAwKSA+PgorCQk4KSB8ICgoZHdfaXBfYWRkcmVzcyAmIDB4MDAwMDAwZmYpIDw8IDgpOwogCi0JZXJyb3IgPSBocGlfY29icmFuZXRfaG1pX3dyaXRlKHBoX3N1YnN5cywgaF9jb250cm9sLAorCWVyciA9IGhwaV9jb2JyYW5ldF9obWlfd3JpdGUoaF9jb250cm9sLAogCQlIUElfQ09CUkFORVRfSE1JX2NvYnJhX2lwX21vbl9zdGF0aWNJUCwgNCwgKHU4ICopJmlQKTsKIAotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZXJyOwogCiB9CiAKLXUxNiBocGlfY29icmFuZXRfZ2V0TUFfY2FkZHJlc3MoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwbUFDX01TX2JzLCB1MzIgKnBtQUNfTFNfYnMpCit1MTYgaHBpX2NvYnJhbmV0X2dldF9tYWNhZGRyZXNzKHUzMiBoX2NvbnRyb2wsIHUzMiAqcF9tYWNfbXNicywKKwl1MzIgKnBfbWFjX2xzYnMpCiB7CiAJdTMyIGJ5dGVfY291bnQ7Ci0JdTE2IGVycm9yOwotCXUzMiBtQUM7CisJdTE2IGVycjsKKwl1MzIgbWFjOwogCi0JZXJyb3IgPSBocGlfY29icmFuZXRfaG1pX3JlYWQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJZXJyID0gaHBpX2NvYnJhbmV0X2htaV9yZWFkKGhfY29udHJvbCwKIAkJSFBJX0NPQlJBTkVUX0hNSV9jb2JyYV9pZl9waHlfYWRkcmVzcywgNCwgJmJ5dGVfY291bnQsCi0JCSh1OCAqKSZtQUMpOwotCSpwbUFDX01TX2JzID0KLQkJKChtQUMgJiAweGZmMDAwMDAwKSA+PiA4KSB8ICgobUFDICYgMHgwMGZmMDAwMCkgPDwgOCkgfCAoKG1BQwotCQkJJiAweDAwMDBmZjAwKSA+PiA4KSB8ICgobUFDICYgMHgwMDAwMDBmZikgPDwgOCk7Ci0JZXJyb3IgKz0gaHBpX2NvYnJhbmV0X2htaV9yZWFkKHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfQ09CUkFORVRfSE1JX2NvYnJhX2lmX3BoeV9hZGRyZXNzICsgMSwgNCwgJmJ5dGVfY291bnQsCi0JCSh1OCAqKSZtQUMpOwotCSpwbUFDX0xTX2JzID0KLQkJKChtQUMgJiAweGZmMDAwMDAwKSA+PiA4KSB8ICgobUFDICYgMHgwMGZmMDAwMCkgPDwgOCkgfCAoKG1BQwotCQkJJiAweDAwMDBmZjAwKSA+PiA4KSB8ICgobUFDICYgMHgwMDAwMDBmZikgPDwgOCk7CisJCSh1OCAqKSZtYWMpOwogCi0JaWYgKGVycm9yKSB7Ci0JCSpwbUFDX01TX2JzID0gMDsKLQkJKnBtQUNfTFNfYnMgPSAwOworCWlmICghZXJyKSB7CisJCSpwX21hY19tc2JzID0KKwkJCSgobWFjICYgMHhmZjAwMDAwMCkgPj4gOCkgfCAoKG1hYyAmIDB4MDBmZjAwMDApIDw8IDgpCisJCQl8ICgobWFjICYgMHgwMDAwZmYwMCkgPj4gOCkgfCAoKG1hYyAmIDB4MDAwMDAwZmYpIDw8CisJCQk4KTsKKworCQllcnIgPSBocGlfY29icmFuZXRfaG1pX3JlYWQoaF9jb250cm9sLAorCQkJSFBJX0NPQlJBTkVUX0hNSV9jb2JyYV9pZl9waHlfYWRkcmVzcyArIDEsIDQsCisJCQkmYnl0ZV9jb3VudCwgKHU4ICopJm1hYyk7CiAJfQogCi0JcmV0dXJuIGVycm9yOworCWlmICghZXJyKSB7CisJCSpwX21hY19sc2JzID0KKwkJCSgobWFjICYgMHhmZjAwMDAwMCkgPj4gOCkgfCAoKG1hYyAmIDB4MDBmZjAwMDApIDw8IDgpCisJCQl8ICgobWFjICYgMHgwMDAwZmYwMCkgPj4gOCkgfCAoKG1hYyAmIDB4MDAwMDAwZmYpIDw8CisJCQk4KTsKKwl9IGVsc2UgeworCQkqcF9tYWNfbXNicyA9IDA7CisJCSpwX21hY19sc2JzID0gMDsKKwl9CisKKwlyZXR1cm4gZXJyOwogfQogCi11MTYgaHBpX2NvbXBhbmRlcl9zZXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBlbmFibGUpCit1MTYgaHBpX2NvbXBhbmRlcl9zZXRfZW5hYmxlKHUzMiBoX2NvbnRyb2wsIHUzMiBlbmFibGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX0dFTkVSSUNfRU5BQkxFLAotCQllbmFibGUsIDApOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfR0VORVJJQ19FTkFCTEUsIGVuYWJsZSwKKwkJMCk7CiB9CiAKLXUxNiBocGlfY29tcGFuZGVyX2dldF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICplbmFibGUpCit1MTYgaHBpX2NvbXBhbmRlcl9nZXRfZW5hYmxlKHUzMiBoX2NvbnRyb2wsIHUzMiAqZW5hYmxlKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfR0VORVJJQ19FTkFCTEUsIGVuYWJsZSk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQoaF9jb250cm9sLCBIUElfR0VORVJJQ19FTkFCTEUsIGVuYWJsZSk7CiB9CiAKLXUxNiBocGlfY29tcGFuZGVyX3NldF9tYWtldXBfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCBzaG9ydCBtYWtldXBfZ2FpbjBfMDFkQikKK3UxNiBocGlfY29tcGFuZGVyX3NldF9tYWtldXBfZ2Fpbih1MzIgaF9jb250cm9sLCBzaG9ydCBtYWtldXBfZ2FpbjBfMDFkQikKIHsKIAlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX3NldDIoaF9jb250cm9sLCBIUElfQ09NUEFOREVSX01BS0VVUEdBSU4sCiAJCW1ha2V1cF9nYWluMF8wMWRCLCAwKTsKIH0KIAotdTE2IGhwaV9jb21wYW5kZXJfZ2V0X21ha2V1cF9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHNob3J0ICptYWtldXBfZ2FpbjBfMDFkQikKK3UxNiBocGlfY29tcGFuZGVyX2dldF9tYWtldXBfZ2Fpbih1MzIgaF9jb250cm9sLCBzaG9ydCAqbWFrZXVwX2dhaW4wXzAxZEIpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX2xvZ19nZXQyKHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfQ09NUEFOREVSX01BS0VVUEdBSU4sIG1ha2V1cF9nYWluMF8wMWRCLCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX2dldDIoaF9jb250cm9sLCBIUElfQ09NUEFOREVSX01BS0VVUEdBSU4sCisJCW1ha2V1cF9nYWluMF8wMWRCLCBOVUxMKTsKIH0KIAotdTE2IGhwaV9jb21wYW5kZXJfc2V0X2F0dGFja190aW1lX2NvbnN0YW50KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cwotCSpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsIHVuc2lnbmVkIGludCBpbmRleCwgdTMyIGF0dGFjaykKK3UxNiBocGlfY29tcGFuZGVyX3NldF9hdHRhY2tfdGltZV9jb25zdGFudCh1MzIgaF9jb250cm9sLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJdTMyIGF0dGFjaykKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfQ09NUEFOREVSX0FUVEFDSywgYXR0YWNrLCBpbmRleCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9DT01QQU5ERVJfQVRUQUNLLCBhdHRhY2ssCisJCWluZGV4KTsKIH0KIAotdTE2IGhwaV9jb21wYW5kZXJfZ2V0X2F0dGFja190aW1lX2NvbnN0YW50KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cwotCSpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsIHVuc2lnbmVkIGludCBpbmRleCwgdTMyICphdHRhY2spCit1MTYgaHBpX2NvbXBhbmRlcl9nZXRfYXR0YWNrX3RpbWVfY29uc3RhbnQodTMyIGhfY29udHJvbCwgdW5zaWduZWQgaW50IGluZGV4LAorCXUzMiAqYXR0YWNrKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9DT01QQU5ERVJfQVRUQUNLLCAwLCBpbmRleCwgYXR0YWNrLCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KGhfY29udHJvbCwgSFBJX0NPTVBBTkRFUl9BVFRBQ0ssIDAsCisJCWluZGV4LCBhdHRhY2ssIE5VTEwpOwogfQogCi11MTYgaHBpX2NvbXBhbmRlcl9zZXRfZGVjYXlfdGltZV9jb25zdGFudChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUzMiBkZWNheSkKK3UxNiBocGlfY29tcGFuZGVyX3NldF9kZWNheV90aW1lX2NvbnN0YW50KHUzMiBoX2NvbnRyb2wsIHVuc2lnbmVkIGludCBpbmRleCwKKwl1MzIgZGVjYXkpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0NPTVBBTkRFUl9ERUNBWSwgZGVjYXksIGluZGV4KTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX0NPTVBBTkRFUl9ERUNBWSwgZGVjYXksCisJCWluZGV4KTsKIH0KIAotdTE2IGhwaV9jb21wYW5kZXJfZ2V0X2RlY2F5X3RpbWVfY29uc3RhbnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdW5zaWduZWQgaW50IGluZGV4LCB1MzIgKmRlY2F5KQordTE2IGhwaV9jb21wYW5kZXJfZ2V0X2RlY2F5X3RpbWVfY29uc3RhbnQodTMyIGhfY29udHJvbCwgdW5zaWduZWQgaW50IGluZGV4LAorCXUzMiAqZGVjYXkpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0NPTVBBTkRFUl9ERUNBWSwgMCwgaW5kZXgsIGRlY2F5LCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KGhfY29udHJvbCwgSFBJX0NPTVBBTkRFUl9ERUNBWSwgMCwgaW5kZXgsCisJCWRlY2F5LCBOVUxMKTsKIAogfQogCi11MTYgaHBpX2NvbXBhbmRlcl9zZXRfdGhyZXNob2xkKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHVuc2lnbmVkIGludCBpbmRleCwgc2hvcnQgdGhyZXNob2xkMF8wMWRCKQordTE2IGhwaV9jb21wYW5kZXJfc2V0X3RocmVzaG9sZCh1MzIgaF9jb250cm9sLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJc2hvcnQgdGhyZXNob2xkMF8wMWRCKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9TRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfQ09NUEFOREVSX1RIUkVTSE9MRDsKIAlobS51LmMucGFyYW0yID0gaW5kZXg7CiAJaG0udS5jLmFuX2xvZ192YWx1ZVswXSA9IHRocmVzaG9sZDBfMDFkQjsKQEAgLTIyMTUsMTUgKzE5NjAsMTYgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfY29tcGFuZGVyX2dldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdW5zaWduZWQgaW50IGluZGV4LCBzaG9ydCAqdGhyZXNob2xkMF8wMWRCKQordTE2IGhwaV9jb21wYW5kZXJfZ2V0X3RocmVzaG9sZCh1MzIgaF9jb250cm9sLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJc2hvcnQgKnRocmVzaG9sZDBfMDFkQikKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX0NPTVBBTkRFUl9USFJFU0hPTEQ7CiAJaG0udS5jLnBhcmFtMiA9IGluZGV4OwogCkBAIC0yMjMzLDI5ICsxOTc5LDI4IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2NvbXBhbmRlcl9zZXRfcmF0aW8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGluZGV4LCB1MzIgcmF0aW8xMDApCit1MTYgaHBpX2NvbXBhbmRlcl9zZXRfcmF0aW8odTMyIGhfY29udHJvbCwgdTMyIGluZGV4LCB1MzIgcmF0aW8xMDApCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0NPTVBBTkRFUl9SQVRJTywgcmF0aW8xMDAsIGluZGV4KTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX0NPTVBBTkRFUl9SQVRJTywgcmF0aW8xMDAsCisJCWluZGV4KTsKIH0KIAotdTE2IGhwaV9jb21wYW5kZXJfZ2V0X3JhdGlvKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyICpyYXRpbzEwMCkKK3UxNiBocGlfY29tcGFuZGVyX2dldF9yYXRpbyh1MzIgaF9jb250cm9sLCB1MzIgaW5kZXgsIHUzMiAqcmF0aW8xMDApCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0NPTVBBTkRFUl9SQVRJTywgMCwgaW5kZXgsIHJhdGlvMTAwLCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KGhfY29udHJvbCwgSFBJX0NPTVBBTkRFUl9SQVRJTywgMCwgaW5kZXgsCisJCXJhdGlvMTAwLCBOVUxMKTsKIH0KIAotdTE2IGhwaV9sZXZlbF9xdWVyeV9yYW5nZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQlzaG9ydCAqbWluX2dhaW5fMDFkQiwgc2hvcnQgKm1heF9nYWluXzAxZEIsIHNob3J0ICpzdGVwX2dhaW5fMDFkQikKK3UxNiBocGlfbGV2ZWxfcXVlcnlfcmFuZ2UodTMyIGhfY29udHJvbCwgc2hvcnQgKm1pbl9nYWluXzAxZEIsCisJc2hvcnQgKm1heF9nYWluXzAxZEIsIHNob3J0ICpzdGVwX2dhaW5fMDFkQikKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX0xFVkVMX1JBTkdFOwogCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CkBAIC0yMjczLDMxICsyMDE4LDI3IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX2xldmVsX3NldF9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXNob3J0IGFuX2dhaW4wXzAxZEJbSFBJX01BWF9DSEFOTkVMU10KK3UxNiBocGlfbGV2ZWxfc2V0X2dhaW4odTMyIGhfY29udHJvbCwgc2hvcnQgYW5fZ2FpbjBfMDFkQltIUElfTUFYX0NIQU5ORUxTXQogCSkKIHsKIAlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX3NldDIoaF9jb250cm9sLCBIUElfTEVWRUxfR0FJTiwKIAkJYW5fZ2FpbjBfMDFkQlswXSwgYW5fZ2FpbjBfMDFkQlsxXSk7CiB9CiAKLXUxNiBocGlfbGV2ZWxfZ2V0X2dhaW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgYW5fZ2FpbjBfMDFkQltIUElfTUFYX0NIQU5ORUxTXQordTE2IGhwaV9sZXZlbF9nZXRfZ2Fpbih1MzIgaF9jb250cm9sLCBzaG9ydCBhbl9nYWluMF8wMWRCW0hQSV9NQVhfQ0hBTk5FTFNdCiAJKQogewotCXJldHVybiBocGlfY29udHJvbF9sb2dfZ2V0MihwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX0xFVkVMX0dBSU4sCisJcmV0dXJuIGhwaV9jb250cm9sX2xvZ19nZXQyKGhfY29udHJvbCwgSFBJX0xFVkVMX0dBSU4sCiAJCSZhbl9nYWluMF8wMWRCWzBdLCAmYW5fZ2FpbjBfMDFkQlsxXSk7CiB9CiAKLXUxNiBocGlfbWV0ZXJfcXVlcnlfY2hhbm5lbHMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfbWV0ZXIsIHUzMiAqcF9jaGFubmVscykKK3UxNiBocGlfbWV0ZXJfcXVlcnlfY2hhbm5lbHMoY29uc3QgdTMyIGhfbWV0ZXIsIHUzMiAqcF9jaGFubmVscykKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcXVlcnkocGhfc3Vic3lzLCBoX21ldGVyLCBIUElfTUVURVJfTlVNX0NIQU5ORUxTLAotCQkwLCAwLCBwX2NoYW5uZWxzKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcXVlcnkoaF9tZXRlciwgSFBJX01FVEVSX05VTV9DSEFOTkVMUywgMCwgMCwKKwkJcF9jaGFubmVscyk7CiB9CiAKLXUxNiBocGlfbWV0ZXJfZ2V0X3BlYWsoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgYW5fcGVha2RCW0hQSV9NQVhfQ0hBTk5FTFNdCit1MTYgaHBpX21ldGVyX2dldF9wZWFrKHUzMiBoX2NvbnRyb2wsIHNob3J0IGFuX3BlYWtkQltIUElfTUFYX0NIQU5ORUxTXQogCSkKIHsKIAlzaG9ydCBpID0gMDsKQEAgLTIzMDcsNyArMjA0OCw4IEBACiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0ub2JqX2luZGV4ID0gaG0ub2JqX2luZGV4OwogCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfTUVURVJfUEVBSzsKIApAQCAtMjMyMiw4ICsyMDY0LDcgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfbWV0ZXJfZ2V0X3Jtcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQlzaG9ydCBhbl9ybXNkQltIUElfTUFYX0NIQU5ORUxTXQordTE2IGhwaV9tZXRlcl9nZXRfcm1zKHUzMiBoX2NvbnRyb2wsIHNob3J0IGFuX3Jtc2RCW0hQSV9NQVhfQ0hBTk5FTFNdCiAJKQogewogCXNob3J0IGkgPSAwOwpAQCAtMjMzMyw3ICsyMDc0LDggQEAKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX01FVEVSX1JNUzsKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwpAQCAtMjM0OCwyMiArMjA5MCwyMCBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9tZXRlcl9zZXRfcm1zX2JhbGxpc3RpY3MoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGF0dGFjaywgdTE2IGRlY2F5KQordTE2IGhwaV9tZXRlcl9zZXRfcm1zX2JhbGxpc3RpY3ModTMyIGhfY29udHJvbCwgdTE2IGF0dGFjaywgdTE2IGRlY2F5KQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9NRVRFUl9STVNfQkFMTElTVElDUywgYXR0YWNrLCBkZWNheSk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9NRVRFUl9STVNfQkFMTElTVElDUywKKwkJYXR0YWNrLCBkZWNheSk7CiB9CiAKLXUxNiBocGlfbWV0ZXJfZ2V0X3Jtc19iYWxsaXN0aWNzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiAqcG5fYXR0YWNrLCB1MTYgKnBuX2RlY2F5KQordTE2IGhwaV9tZXRlcl9nZXRfcm1zX2JhbGxpc3RpY3ModTMyIGhfY29udHJvbCwgdTE2ICpwbl9hdHRhY2ssIHUxNiAqcG5fZGVjYXkpCiB7CiAJdTMyIGF0dGFjazsKIAl1MzIgZGVjYXk7CiAJdTE2IGVycm9yOwogCi0JZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTJfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfTUVURVJfUk1TX0JBTExJU1RJQ1MsICZhdHRhY2ssICZkZWNheSk7CisJZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTJfZ2V0KGhfY29udHJvbCwgSFBJX01FVEVSX1JNU19CQUxMSVNUSUNTLAorCQkmYXR0YWNrLCAmZGVjYXkpOwogCiAJaWYgKHBuX2F0dGFjaykKIAkJKnBuX2F0dGFjayA9ICh1bnNpZ25lZCBzaG9ydClhdHRhY2s7CkBAIC0yMzczLDIyICsyMTEzLDIxIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi11MTYgaHBpX21ldGVyX3NldF9wZWFrX2JhbGxpc3RpY3MoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGF0dGFjaywgdTE2IGRlY2F5KQordTE2IGhwaV9tZXRlcl9zZXRfcGVha19iYWxsaXN0aWNzKHUzMiBoX2NvbnRyb2wsIHUxNiBhdHRhY2ssIHUxNiBkZWNheSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfTUVURVJfUEVBS19CQUxMSVNUSUNTLCBhdHRhY2ssIGRlY2F5KTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX01FVEVSX1BFQUtfQkFMTElTVElDUywKKwkJYXR0YWNrLCBkZWNheSk7CiB9CiAKLXUxNiBocGlfbWV0ZXJfZ2V0X3BlYWtfYmFsbGlzdGljcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgKnBuX2F0dGFjaywgdTE2ICpwbl9kZWNheSkKK3UxNiBocGlfbWV0ZXJfZ2V0X3BlYWtfYmFsbGlzdGljcyh1MzIgaF9jb250cm9sLCB1MTYgKnBuX2F0dGFjaywKKwl1MTYgKnBuX2RlY2F5KQogewogCXUzMiBhdHRhY2s7CiAJdTMyIGRlY2F5OwogCXUxNiBlcnJvcjsKIAotCWVycm9yID0gaHBpX2NvbnRyb2xfcGFyYW0yX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX01FVEVSX1BFQUtfQkFMTElTVElDUywgJmF0dGFjaywgJmRlY2F5KTsKKwllcnJvciA9IGhwaV9jb250cm9sX3BhcmFtMl9nZXQoaF9jb250cm9sLCBIUElfTUVURVJfUEVBS19CQUxMSVNUSUNTLAorCQkmYXR0YWNrLCAmZGVjYXkpOwogCiAJaWYgKHBuX2F0dGFjaykKIAkJKnBuX2F0dGFjayA9IChzaG9ydClhdHRhY2s7CkBAIC0yMzk4LDU1ICsyMTM3LDUzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi11MTYgaHBpX21pY3JvcGhvbmVfc2V0X3BoYW50b21fcG93ZXIoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IG9uX29mZikKK3UxNiBocGlfbWljcm9waG9uZV9zZXRfcGhhbnRvbV9wb3dlcih1MzIgaF9jb250cm9sLCB1MTYgb25fb2ZmKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9NSUNST1BIT05FX1BIQU5UT01fUE9XRVIsICh1MzIpb25fb2ZmLCAwKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX01JQ1JPUEhPTkVfUEhBTlRPTV9QT1dFUiwKKwkJKHUzMilvbl9vZmYsIDApOwogfQogCi11MTYgaHBpX21pY3JvcGhvbmVfZ2V0X3BoYW50b21fcG93ZXIoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19vbl9vZmYpCit1MTYgaHBpX21pY3JvcGhvbmVfZ2V0X3BoYW50b21fcG93ZXIodTMyIGhfY29udHJvbCwgdTE2ICpwd19vbl9vZmYpCiB7CiAJdTE2IGVycm9yID0gMDsKIAl1MzIgb25fb2ZmID0gMDsKLQllcnJvciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwKIAkJSFBJX01JQ1JPUEhPTkVfUEhBTlRPTV9QT1dFUiwgJm9uX29mZik7CiAJaWYgKHB3X29uX29mZikKIAkJKnB3X29uX29mZiA9ICh1MTYpb25fb2ZmOwogCXJldHVybiBlcnJvcjsKIH0KIAotdTE2IGhwaV9tdWx0aXBsZXhlcl9zZXRfc291cmNlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBzb3VyY2Vfbm9kZV90eXBlLCB1MTYgc291cmNlX25vZGVfaW5kZXgpCit1MTYgaHBpX211bHRpcGxleGVyX3NldF9zb3VyY2UodTMyIGhfY29udHJvbCwgdTE2IHNvdXJjZV9ub2RlX3R5cGUsCisJdTE2IHNvdXJjZV9ub2RlX2luZGV4KQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9NVUxUSVBMRVhFUl9TT1VSQ0UsIHNvdXJjZV9ub2RlX3R5cGUsIHNvdXJjZV9ub2RlX2luZGV4KTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX01VTFRJUExFWEVSX1NPVVJDRSwKKwkJc291cmNlX25vZGVfdHlwZSwgc291cmNlX25vZGVfaW5kZXgpOwogfQogCi11MTYgaHBpX211bHRpcGxleGVyX2dldF9zb3VyY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpzb3VyY2Vfbm9kZV90eXBlLCB1MTYgKnNvdXJjZV9ub2RlX2luZGV4KQordTE2IGhwaV9tdWx0aXBsZXhlcl9nZXRfc291cmNlKHUzMiBoX2NvbnRyb2wsIHUxNiAqc291cmNlX25vZGVfdHlwZSwKKwl1MTYgKnNvdXJjZV9ub2RlX2luZGV4KQogewogCXUzMiBub2RlLCBpbmRleDsKLQl1MTYgZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTJfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAorCXUxNiBlcnIgPSBocGlfY29udHJvbF9wYXJhbTJfZ2V0KGhfY29udHJvbCwKIAkJSFBJX01VTFRJUExFWEVSX1NPVVJDRSwgJm5vZGUsCiAJCSZpbmRleCk7CiAJaWYgKHNvdXJjZV9ub2RlX3R5cGUpCiAJCSpzb3VyY2Vfbm9kZV90eXBlID0gKHUxNilub2RlOwogCWlmIChzb3VyY2Vfbm9kZV9pbmRleCkKIAkJKnNvdXJjZV9ub2RlX2luZGV4ID0gKHUxNilpbmRleDsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIGVycjsKIH0KIAotdTE2IGhwaV9tdWx0aXBsZXhlcl9xdWVyeV9zb3VyY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCB1MTYgKnNvdXJjZV9ub2RlX3R5cGUsCi0JdTE2ICpzb3VyY2Vfbm9kZV9pbmRleCkKK3UxNiBocGlfbXVsdGlwbGV4ZXJfcXVlcnlfc291cmNlKHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwKKwl1MTYgKnNvdXJjZV9ub2RlX3R5cGUsIHUxNiAqc291cmNlX25vZGVfaW5kZXgpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfTVVMVElQTEVYRVJfUVVFUllTT1VSQ0U7CiAJaG0udS5jLnBhcmFtMSA9IGluZGV4OwogCkBAIC0yNDU5LDE1ICsyMTk2LDE1IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX3BhcmFtZXRyaWNFUV9fZ2V0X2luZm8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19udW1iZXJfb2ZfYmFuZHMsIHUxNiAqcHdfb25fb2ZmKQordTE2IGhwaV9wYXJhbWV0cmljX2VxX2dldF9pbmZvKHUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfbnVtYmVyX29mX2JhbmRzLAorCXUxNiAqcHdfb25fb2ZmKQogewogCXUzMiBvQiA9IDA7CiAJdTMyIG9PID0gMDsKIAl1MTYgZXJyb3IgPSAwOwogCi0JZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTJfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfRVFVQUxJWkVSX05VTV9GSUxURVJTLCAmb08sICZvQik7CisJZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTJfZ2V0KGhfY29udHJvbCwgSFBJX0VRVUFMSVpFUl9OVU1fRklMVEVSUywKKwkJJm9PLCAmb0IpOwogCWlmIChwd19udW1iZXJfb2ZfYmFuZHMpCiAJCSpwd19udW1iZXJfb2ZfYmFuZHMgPSAodTE2KW9COwogCWlmIChwd19vbl9vZmYpCkBAIC0yNDc1LDIzICsyMjEyLDIyIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi11MTYgaHBpX3BhcmFtZXRyaWNFUV9fc2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBvbl9vZmYpCit1MTYgaHBpX3BhcmFtZXRyaWNfZXFfc2V0X3N0YXRlKHUzMiBoX2NvbnRyb2wsIHUxNiBvbl9vZmYpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0VRVUFMSVpFUl9OVU1fRklMVEVSUywgb25fb2ZmLCAwKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX0VRVUFMSVpFUl9OVU1fRklMVEVSUywKKwkJb25fb2ZmLCAwKTsKIH0KIAotdTE2IGhwaV9wYXJhbWV0cmljRVFfX2dldF9iYW5kKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2ICpwbl90eXBlLCB1MzIgKnBmcmVxdWVuY3lfaHosCi0Jc2hvcnQgKnBuUTEwMCwgc2hvcnQgKnBuX2dhaW4wXzAxZEIpCit1MTYgaHBpX3BhcmFtZXRyaWNfZXFfZ2V0X2JhbmQodTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCB1MTYgKnBuX3R5cGUsCisJdTMyICpwZnJlcXVlbmN5X2h6LCBzaG9ydCAqcG5RMTAwLCBzaG9ydCAqcG5fZ2FpbjBfMDFkQikKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX0VRVUFMSVpFUl9GSUxURVI7CiAJaG0udS5jLnBhcmFtMiA9IGluZGV4OwogCkBAIC0yNTA5LDE2ICsyMjQ1LDE2IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX3BhcmFtZXRyaWNFUV9fc2V0X2JhbmQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCB1MTYgdHlwZSwgdTMyIGZyZXF1ZW5jeV9oeiwgc2hvcnQgcTEwMCwKLQlzaG9ydCBnYWluMF8wMWRCKQordTE2IGhwaV9wYXJhbWV0cmljX2VxX3NldF9iYW5kKHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgdTE2IHR5cGUsCisJdTMyIGZyZXF1ZW5jeV9oeiwgc2hvcnQgcTEwMCwgc2hvcnQgZ2FpbjBfMDFkQikKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfU0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAogCWhtLnUuYy5wYXJhbTEgPSBmcmVxdWVuY3lfaHo7CiAJaG0udS5jLnBhcmFtMiA9IChpbmRleCAmIDB4RkZGRkwpICsgKCh1MzIpdHlwZSA8PCAxNik7CkBAIC0yNTMxLDggKzIyNjcsNyBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9wYXJhbWV0cmljRVFfX2dldF9jb2VmZnMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IGluZGV4LCBzaG9ydCBjb2VmZnNbNV0KK3UxNiBocGlfcGFyYW1ldHJpY19lcV9nZXRfY29lZmZzKHUzMiBoX2NvbnRyb2wsIHUxNiBpbmRleCwgc2hvcnQgY29lZmZzWzVdCiAJKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKQEAgLTI1NDAsNyArMjI3NSw4IEBACiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0udS5jLmF0dHJpYnV0ZSA9IEhQSV9FUVVBTElaRVJfQ09FRkZJQ0lFTlRTOwogCWhtLnUuYy5wYXJhbTIgPSBpbmRleDsKIApAQCAtMjU1NSw0NDQgKzIyOTEsMzg4IEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19xdWVyeV9zb3VyY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfY2xvY2ssIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19zb3VyY2UpCit1MTYgaHBpX3NhbXBsZV9jbG9ja19xdWVyeV9zb3VyY2UoY29uc3QgdTMyIGhfY2xvY2ssIGNvbnN0IHUzMiBpbmRleCwKKwl1MTYgKnB3X3NvdXJjZSkKIHsKIAl1MzIgcXI7CiAJdTE2IGVycjsKIAotCWVyciA9IGhwaV9jb250cm9sX3F1ZXJ5KHBoX3N1YnN5cywgaF9jbG9jaywgSFBJX1NBTVBMRUNMT0NLX1NPVVJDRSwKLQkJaW5kZXgsIDAsICZxcik7CisJZXJyID0gaHBpX2NvbnRyb2xfcXVlcnkoaF9jbG9jaywgSFBJX1NBTVBMRUNMT0NLX1NPVVJDRSwgaW5kZXgsIDAsCisJCSZxcik7CiAJKnB3X3NvdXJjZSA9ICh1MTYpcXI7CiAJcmV0dXJuIGVycjsKIH0KIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfc2V0X3NvdXJjZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MTYgc291cmNlKQordTE2IGhwaV9zYW1wbGVfY2xvY2tfc2V0X3NvdXJjZSh1MzIgaF9jb250cm9sLCB1MTYgc291cmNlKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9TQU1QTEVDTE9DS19TT1VSQ0UsIHNvdXJjZSwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9TQU1QTEVDTE9DS19TT1VSQ0UsCisJCXNvdXJjZSwgMCk7CiB9CiAKLXUxNiBocGlfc2FtcGxlX2Nsb2NrX2dldF9zb3VyY2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2ICpwd19zb3VyY2UpCit1MTYgaHBpX3NhbXBsZV9jbG9ja19nZXRfc291cmNlKHUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfc291cmNlKQogewotCXUxNiBlcnJvciA9IDA7CisJdTE2IGVyciA9IDA7CiAJdTMyIHNvdXJjZSA9IDA7Ci0JZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfU0FNUExFQ0xPQ0tfU09VUkNFLCAmc291cmNlKTsKLQlpZiAoIWVycm9yKQorCWVyciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQoaF9jb250cm9sLCBIUElfU0FNUExFQ0xPQ0tfU09VUkNFLAorCQkmc291cmNlKTsKKwlpZiAoIWVycikKIAkJaWYgKHB3X3NvdXJjZSkKIAkJCSpwd19zb3VyY2UgPSAodTE2KXNvdXJjZTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIGVycjsKIH0KIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfcXVlcnlfc291cmNlX2luZGV4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX2Nsb2NrLCBjb25zdCB1MzIgaW5kZXgsIGNvbnN0IHUzMiBzb3VyY2UsCi0JdTE2ICpwd19zb3VyY2VfaW5kZXgpCit1MTYgaHBpX3NhbXBsZV9jbG9ja19xdWVyeV9zb3VyY2VfaW5kZXgoY29uc3QgdTMyIGhfY2xvY2ssIGNvbnN0IHUzMiBpbmRleCwKKwljb25zdCB1MzIgc291cmNlLCB1MTYgKnB3X3NvdXJjZV9pbmRleCkKIHsKIAl1MzIgcXI7CiAJdTE2IGVycjsKIAotCWVyciA9IGhwaV9jb250cm9sX3F1ZXJ5KHBoX3N1YnN5cywgaF9jbG9jaywKLQkJSFBJX1NBTVBMRUNMT0NLX1NPVVJDRV9JTkRFWCwgaW5kZXgsIHNvdXJjZSwgJnFyKTsKKwllcnIgPSBocGlfY29udHJvbF9xdWVyeShoX2Nsb2NrLCBIUElfU0FNUExFQ0xPQ0tfU09VUkNFX0lOREVYLCBpbmRleCwKKwkJc291cmNlLCAmcXIpOwogCSpwd19zb3VyY2VfaW5kZXggPSAodTE2KXFyOwogCXJldHVybiBlcnI7CiB9CiAKLXUxNiBocGlfc2FtcGxlX2Nsb2NrX3NldF9zb3VyY2VfaW5kZXgoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTE2IHNvdXJjZV9pbmRleCkKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX3NldF9zb3VyY2VfaW5kZXgodTMyIGhfY29udHJvbCwgdTE2IHNvdXJjZV9pbmRleCkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfU0FNUExFQ0xPQ0tfU09VUkNFX0lOREVYLCBzb3VyY2VfaW5kZXgsIDApOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfU0FNUExFQ0xPQ0tfU09VUkNFX0lOREVYLAorCQlzb3VyY2VfaW5kZXgsIDApOwogfQogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19nZXRfc291cmNlX2luZGV4KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUxNiAqcHdfc291cmNlX2luZGV4KQordTE2IGhwaV9zYW1wbGVfY2xvY2tfZ2V0X3NvdXJjZV9pbmRleCh1MzIgaF9jb250cm9sLCB1MTYgKnB3X3NvdXJjZV9pbmRleCkKIHsKLQl1MTYgZXJyb3IgPSAwOworCXUxNiBlcnIgPSAwOwogCXUzMiBzb3VyY2VfaW5kZXggPSAwOwotCWVycm9yID0gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1NBTVBMRUNMT0NLX1NPVVJDRV9JTkRFWCwgJnNvdXJjZV9pbmRleCk7Ci0JaWYgKCFlcnJvcikKKwllcnIgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX1NBTVBMRUNMT0NLX1NPVVJDRV9JTkRFWCwKKwkJJnNvdXJjZV9pbmRleCk7CisJaWYgKCFlcnIpCiAJCWlmIChwd19zb3VyY2VfaW5kZXgpCiAJCQkqcHdfc291cmNlX2luZGV4ID0gKHUxNilzb3VyY2VfaW5kZXg7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBlcnI7CiB9CiAKLXUxNiBocGlfc2FtcGxlX2Nsb2NrX3F1ZXJ5X2xvY2FsX3JhdGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfY2xvY2ssIGNvbnN0IHUzMiBpbmRleCwgdTMyICpwcmF0ZSkKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX3F1ZXJ5X2xvY2FsX3JhdGUoY29uc3QgdTMyIGhfY2xvY2ssIGNvbnN0IHUzMiBpbmRleCwKKwl1MzIgKnByYXRlKQogewogCXUxNiBlcnI7Ci0JZXJyID0gaHBpX2NvbnRyb2xfcXVlcnkocGhfc3Vic3lzLCBoX2Nsb2NrLAotCQlIUElfU0FNUExFQ0xPQ0tfTE9DQUxfU0FNUExFUkFURSwgaW5kZXgsIDAsIHByYXRlKTsKKwllcnIgPSBocGlfY29udHJvbF9xdWVyeShoX2Nsb2NrLCBIUElfU0FNUExFQ0xPQ0tfTE9DQUxfU0FNUExFUkFURSwKKwkJaW5kZXgsIDAsIHByYXRlKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLXUxNiBocGlfc2FtcGxlX2Nsb2NrX3NldF9sb2NhbF9yYXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBzYW1wbGVfcmF0ZSkKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX3NldF9sb2NhbF9yYXRlKHUzMiBoX2NvbnRyb2wsIHUzMiBzYW1wbGVfcmF0ZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAorCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLAogCQlIUElfU0FNUExFQ0xPQ0tfTE9DQUxfU0FNUExFUkFURSwgc2FtcGxlX3JhdGUsIDApOwogfQogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19nZXRfbG9jYWxfcmF0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBzYW1wbGVfcmF0ZSkKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX2dldF9sb2NhbF9yYXRlKHUzMiBoX2NvbnRyb2wsIHUzMiAqcHNhbXBsZV9yYXRlKQogewotCXUxNiBlcnJvciA9IDA7CisJdTE2IGVyciA9IDA7CiAJdTMyIHNhbXBsZV9yYXRlID0gMDsKLQllcnJvciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJZXJyID0gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsCiAJCUhQSV9TQU1QTEVDTE9DS19MT0NBTF9TQU1QTEVSQVRFLCAmc2FtcGxlX3JhdGUpOwotCWlmICghZXJyb3IpCisJaWYgKCFlcnIpCiAJCWlmIChwc2FtcGxlX3JhdGUpCiAJCQkqcHNhbXBsZV9yYXRlID0gc2FtcGxlX3JhdGU7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBlcnI7CiB9CiAKLXUxNiBocGlfc2FtcGxlX2Nsb2NrX2dldF9zYW1wbGVfcmF0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBzYW1wbGVfcmF0ZSkKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX2dldF9zYW1wbGVfcmF0ZSh1MzIgaF9jb250cm9sLCB1MzIgKnBzYW1wbGVfcmF0ZSkKIHsKLQl1MTYgZXJyb3IgPSAwOworCXUxNiBlcnIgPSAwOwogCXUzMiBzYW1wbGVfcmF0ZSA9IDA7Ci0JZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfU0FNUExFQ0xPQ0tfU0FNUExFUkFURSwgJnNhbXBsZV9yYXRlKTsKLQlpZiAoIWVycm9yKQorCWVyciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQoaF9jb250cm9sLCBIUElfU0FNUExFQ0xPQ0tfU0FNUExFUkFURSwKKwkJJnNhbXBsZV9yYXRlKTsKKwlpZiAoIWVycikKIAkJaWYgKHBzYW1wbGVfcmF0ZSkKIAkJCSpwc2FtcGxlX3JhdGUgPSBzYW1wbGVfcmF0ZTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIGVycjsKIH0KIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfc2V0X2F1dG8oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGVuYWJsZSkKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX3NldF9hdXRvKHUzMiBoX2NvbnRyb2wsIHUzMiBlbmFibGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1NBTVBMRUNMT0NLX0FVVE8sIGVuYWJsZSwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9TQU1QTEVDTE9DS19BVVRPLCBlbmFibGUsCisJCTApOwogfQogCi11MTYgaHBpX3NhbXBsZV9jbG9ja19nZXRfYXV0byhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBlbmFibGUpCit1MTYgaHBpX3NhbXBsZV9jbG9ja19nZXRfYXV0byh1MzIgaF9jb250cm9sLCB1MzIgKnBlbmFibGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9TQU1QTEVDTE9DS19BVVRPLCBwZW5hYmxlKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9TQU1QTEVDTE9DS19BVVRPLAorCQlwZW5hYmxlKTsKIH0KIAotdTE2IGhwaV9zYW1wbGVfY2xvY2tfc2V0X2xvY2FsX3JhdGVfbG9jayhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgbG9jaykKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX3NldF9sb2NhbF9yYXRlX2xvY2sodTMyIGhfY29udHJvbCwgdTMyIGxvY2spCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1NBTVBMRUNMT0NLX0xPQ0FMX0xPQ0ssIGxvY2ssIDApOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfU0FNUExFQ0xPQ0tfTE9DQUxfTE9DSywKKwkJbG9jaywgMCk7CiB9CiAKLXUxNiBocGlfc2FtcGxlX2Nsb2NrX2dldF9sb2NhbF9yYXRlX2xvY2soY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwbG9jaykKK3UxNiBocGlfc2FtcGxlX2Nsb2NrX2dldF9sb2NhbF9yYXRlX2xvY2sodTMyIGhfY29udHJvbCwgdTMyICpwbG9jaykKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1NBTVBMRUNMT0NLX0xPQ0FMX0xPQ0ssIHBsb2NrKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9TQU1QTEVDTE9DS19MT0NBTF9MT0NLLAorCQlwbG9jayk7CiB9CiAKLXUxNiBocGlfdG9uZV9kZXRlY3Rvcl9nZXRfZnJlcXVlbmN5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyICpmcmVxdWVuY3kpCit1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X2ZyZXF1ZW5jeSh1MzIgaF9jb250cm9sLCB1MzIgaW5kZXgsIHUzMiAqZnJlcXVlbmN5KQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9UT05FREVURUNUT1JfRlJFUVVFTkNZLCBpbmRleCwgMCwgZnJlcXVlbmN5LCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KGhfY29udHJvbCwgSFBJX1RPTkVERVRFQ1RPUl9GUkVRVUVOQ1ksCisJCWluZGV4LCAwLCBmcmVxdWVuY3ksIE5VTEwpOwogfQogCi11MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiAqc3RhdGUpCit1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X3N0YXRlKHUzMiBoX2NvbnRyb2wsIHUzMiAqc3RhdGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9UT05FREVURUNUT1JfU1RBVEUsIHN0YXRlKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9UT05FREVURUNUT1JfU1RBVEUsCisJCXN0YXRlKTsKIH0KIAotdTE2IGhwaV90b25lX2RldGVjdG9yX3NldF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGVuYWJsZSkKK3UxNiBocGlfdG9uZV9kZXRlY3Rvcl9zZXRfZW5hYmxlKHUzMiBoX2NvbnRyb2wsIHUzMiBlbmFibGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX0dFTkVSSUNfRU5BQkxFLAotCQkodTMyKWVuYWJsZSwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9HRU5FUklDX0VOQUJMRSwgZW5hYmxlLAorCQkwKTsKIH0KIAotdTE2IGhwaV90b25lX2RldGVjdG9yX2dldF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICplbmFibGUpCit1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X2VuYWJsZSh1MzIgaF9jb250cm9sLCB1MzIgKmVuYWJsZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0dFTkVSSUNfRU5BQkxFLCBlbmFibGUpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX0dFTkVSSUNfRU5BQkxFLCBlbmFibGUpOwogfQogCi11MTYgaHBpX3RvbmVfZGV0ZWN0b3Jfc2V0X2V2ZW50X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgZXZlbnRfZW5hYmxlKQordTE2IGhwaV90b25lX2RldGVjdG9yX3NldF9ldmVudF9lbmFibGUodTMyIGhfY29udHJvbCwgdTMyIGV2ZW50X2VuYWJsZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfR0VORVJJQ19FVkVOVF9FTkFCTEUsICh1MzIpZXZlbnRfZW5hYmxlLCAwKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX0dFTkVSSUNfRVZFTlRfRU5BQkxFLAorCQkodTMyKWV2ZW50X2VuYWJsZSwgMCk7CiB9CiAKLXUxNiBocGlfdG9uZV9kZXRlY3Rvcl9nZXRfZXZlbnRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiAqZXZlbnRfZW5hYmxlKQordTE2IGhwaV90b25lX2RldGVjdG9yX2dldF9ldmVudF9lbmFibGUodTMyIGhfY29udHJvbCwgdTMyICpldmVudF9lbmFibGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9HRU5FUklDX0VWRU5UX0VOQUJMRSwgZXZlbnRfZW5hYmxlKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9HRU5FUklDX0VWRU5UX0VOQUJMRSwKKwkJZXZlbnRfZW5hYmxlKTsKIH0KIAotdTE2IGhwaV90b25lX2RldGVjdG9yX3NldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgaW50IHRocmVzaG9sZCkKK3UxNiBocGlfdG9uZV9kZXRlY3Rvcl9zZXRfdGhyZXNob2xkKHUzMiBoX2NvbnRyb2wsIGludCB0aHJlc2hvbGQpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1RPTkVERVRFQ1RPUl9USFJFU0hPTEQsICh1MzIpdGhyZXNob2xkLCAwKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX1RPTkVERVRFQ1RPUl9USFJFU0hPTEQsCisJCSh1MzIpdGhyZXNob2xkLCAwKTsKIH0KIAotdTE2IGhwaV90b25lX2RldGVjdG9yX2dldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgaW50ICp0aHJlc2hvbGQpCit1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X3RocmVzaG9sZCh1MzIgaF9jb250cm9sLCBpbnQgKnRocmVzaG9sZCkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1RPTkVERVRFQ1RPUl9USFJFU0hPTEQsICh1MzIgKil0aHJlc2hvbGQpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX1RPTkVERVRFQ1RPUl9USFJFU0hPTEQsCisJCSh1MzIgKil0aHJlc2hvbGQpOwogfQogCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiAqc3RhdGUpCit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X3N0YXRlKHUzMiBoX2NvbnRyb2wsIHUzMiAqc3RhdGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9TSUxFTkNFREVURUNUT1JfU1RBVEUsIHN0YXRlKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9TSUxFTkNFREVURUNUT1JfU1RBVEUsCisJCXN0YXRlKTsKIH0KIAotdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX3NldF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGVuYWJsZSkKK3UxNiBocGlfc2lsZW5jZV9kZXRlY3Rvcl9zZXRfZW5hYmxlKHUzMiBoX2NvbnRyb2wsIHUzMiBlbmFibGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX0dFTkVSSUNfRU5BQkxFLAotCQkodTMyKWVuYWJsZSwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9HRU5FUklDX0VOQUJMRSwgZW5hYmxlLAorCQkwKTsKIH0KIAotdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX2dldF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICplbmFibGUpCit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X2VuYWJsZSh1MzIgaF9jb250cm9sLCB1MzIgKmVuYWJsZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0dFTkVSSUNfRU5BQkxFLCBlbmFibGUpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX0dFTkVSSUNfRU5BQkxFLCBlbmFibGUpOwogfQogCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3Jfc2V0X2V2ZW50X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgZXZlbnRfZW5hYmxlKQordTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX3NldF9ldmVudF9lbmFibGUodTMyIGhfY29udHJvbCwgdTMyIGV2ZW50X2VuYWJsZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfR0VORVJJQ19FVkVOVF9FTkFCTEUsIGV2ZW50X2VuYWJsZSwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9HRU5FUklDX0VWRU5UX0VOQUJMRSwKKwkJZXZlbnRfZW5hYmxlLCAwKTsKIH0KIAotdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX2dldF9ldmVudF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpldmVudF9lbmFibGUpCit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X2V2ZW50X2VuYWJsZSh1MzIgaF9jb250cm9sLCB1MzIgKmV2ZW50X2VuYWJsZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0dFTkVSSUNfRVZFTlRfRU5BQkxFLCBldmVudF9lbmFibGUpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX0dFTkVSSUNfRVZFTlRfRU5BQkxFLAorCQlldmVudF9lbmFibGUpOwogfQogCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3Jfc2V0X2RlbGF5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBkZWxheSkKK3UxNiBocGlfc2lsZW5jZV9kZXRlY3Rvcl9zZXRfZGVsYXkodTMyIGhfY29udHJvbCwgdTMyIGRlbGF5KQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9TSUxFTkNFREVURUNUT1JfREVMQVksIGRlbGF5LCAwKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX1NJTEVOQ0VERVRFQ1RPUl9ERUxBWSwKKwkJZGVsYXksIDApOwogfQogCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X2RlbGF5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiAqZGVsYXkpCit1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X2RlbGF5KHUzMiBoX2NvbnRyb2wsIHUzMiAqZGVsYXkpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9TSUxFTkNFREVURUNUT1JfREVMQVksIGRlbGF5KTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9TSUxFTkNFREVURUNUT1JfREVMQVksCisJCWRlbGF5KTsKIH0KIAotdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX3NldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgaW50IHRocmVzaG9sZCkKK3UxNiBocGlfc2lsZW5jZV9kZXRlY3Rvcl9zZXRfdGhyZXNob2xkKHUzMiBoX2NvbnRyb2wsIGludCB0aHJlc2hvbGQpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1NJTEVOQ0VERVRFQ1RPUl9USFJFU0hPTEQsIHRocmVzaG9sZCwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9TSUxFTkNFREVURUNUT1JfVEhSRVNIT0xELAorCQl0aHJlc2hvbGQsIDApOwogfQogCi11MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X3RocmVzaG9sZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCBpbnQgKnRocmVzaG9sZCkKK3UxNiBocGlfc2lsZW5jZV9kZXRlY3Rvcl9nZXRfdGhyZXNob2xkKHUzMiBoX2NvbnRyb2wsIGludCAqdGhyZXNob2xkKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAorCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwKIAkJSFBJX1NJTEVOQ0VERVRFQ1RPUl9USFJFU0hPTEQsICh1MzIgKil0aHJlc2hvbGQpOwogfQogCi11MTYgaHBpX3R1bmVyX3F1ZXJ5X2JhbmQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JY29uc3QgdTMyIGhfdHVuZXIsIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19iYW5kKQordTE2IGhwaV90dW5lcl9xdWVyeV9iYW5kKGNvbnN0IHUzMiBoX3R1bmVyLCBjb25zdCB1MzIgaW5kZXgsIHUxNiAqcHdfYmFuZCkKIHsKIAl1MzIgcXI7CiAJdTE2IGVycjsKIAotCWVyciA9IGhwaV9jb250cm9sX3F1ZXJ5KHBoX3N1YnN5cywgaF90dW5lciwgSFBJX1RVTkVSX0JBTkQsIGluZGV4LCAwLAotCQkmcXIpOworCWVyciA9IGhwaV9jb250cm9sX3F1ZXJ5KGhfdHVuZXIsIEhQSV9UVU5FUl9CQU5ELCBpbmRleCwgMCwgJnFyKTsKIAkqcHdfYmFuZCA9ICh1MTYpcXI7CiAJcmV0dXJuIGVycjsKIH0KIAotdTE2IGhwaV90dW5lcl9zZXRfYmFuZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MTYgYmFuZCkKK3UxNiBocGlfdHVuZXJfc2V0X2JhbmQodTMyIGhfY29udHJvbCwgdTE2IGJhbmQpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX1RVTkVSX0JBTkQsCi0JCWJhbmQsIDApOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfVFVORVJfQkFORCwgYmFuZCwgMCk7CiB9CiAKLXUxNiBocGlfdHVuZXJfZ2V0X2JhbmQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JdTE2ICpwd19iYW5kKQordTE2IGhwaV90dW5lcl9nZXRfYmFuZCh1MzIgaF9jb250cm9sLCB1MTYgKnB3X2JhbmQpCiB7CiAJdTMyIGJhbmQgPSAwOwogCXUxNiBlcnJvciA9IDA7CiAKLQllcnJvciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsIEhQSV9UVU5FUl9CQU5ELAotCQkmYmFuZCk7CisJZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX1RVTkVSX0JBTkQsICZiYW5kKTsKIAlpZiAocHdfYmFuZCkKIAkJKnB3X2JhbmQgPSAodTE2KWJhbmQ7CiAJcmV0dXJuIGVycm9yOwogfQogCi11MTYgaHBpX3R1bmVyX3F1ZXJ5X2ZyZXF1ZW5jeShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF90dW5lciwgY29uc3QgdTMyIGluZGV4LCBjb25zdCB1MTYgYmFuZCwgdTMyICpwZnJlcSkKK3UxNiBocGlfdHVuZXJfcXVlcnlfZnJlcXVlbmN5KGNvbnN0IHUzMiBoX3R1bmVyLCBjb25zdCB1MzIgaW5kZXgsCisJY29uc3QgdTE2IGJhbmQsIHUzMiAqcGZyZXEpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3F1ZXJ5KHBoX3N1YnN5cywgaF90dW5lciwgSFBJX1RVTkVSX0ZSRVEsIGluZGV4LAotCQliYW5kLCBwZnJlcSk7CisJcmV0dXJuIGhwaV9jb250cm9sX3F1ZXJ5KGhfdHVuZXIsIEhQSV9UVU5FUl9GUkVRLCBpbmRleCwgYmFuZCwgcGZyZXEpOwogfQogCi11MTYgaHBpX3R1bmVyX3NldF9mcmVxdWVuY3koY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyIGZyZXFfaW5rX2h6KQordTE2IGhwaV90dW5lcl9zZXRfZnJlcXVlbmN5KHUzMiBoX2NvbnRyb2wsIHUzMiBmcmVxX2lua19oeikKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfVFVORVJfRlJFUSwKLQkJZnJlcV9pbmtfaHosIDApOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfVFVORVJfRlJFUSwgZnJlcV9pbmtfaHosCisJCTApOwogfQogCi11MTYgaHBpX3R1bmVyX2dldF9mcmVxdWVuY3koY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwd19mcmVxX2lua19oeikKK3UxNiBocGlfdHVuZXJfZ2V0X2ZyZXF1ZW5jeSh1MzIgaF9jb250cm9sLCB1MzIgKnB3X2ZyZXFfaW5rX2h6KQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfVFVORVJfRlJFUSwKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9UVU5FUl9GUkVRLAogCQlwd19mcmVxX2lua19oeik7CiB9CiAKLXUxNiBocGlfdHVuZXJfcXVlcnlfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF90dW5lciwgY29uc3QgdTMyIGluZGV4LCB1MTYgKnB3X2dhaW4pCit1MTYgaHBpX3R1bmVyX3F1ZXJ5X2dhaW4oY29uc3QgdTMyIGhfdHVuZXIsIGNvbnN0IHUzMiBpbmRleCwgdTE2ICpwd19nYWluKQogewogCXUzMiBxcjsKIAl1MTYgZXJyOwogCi0JZXJyID0gaHBpX2NvbnRyb2xfcXVlcnkocGhfc3Vic3lzLCBoX3R1bmVyLCBIUElfVFVORVJfQkFORCwgaW5kZXgsIDAsCi0JCSZxcik7CisJZXJyID0gaHBpX2NvbnRyb2xfcXVlcnkoaF90dW5lciwgSFBJX1RVTkVSX0JBTkQsIGluZGV4LCAwLCAmcXIpOwogCSpwd19nYWluID0gKHUxNilxcjsKIAlyZXR1cm4gZXJyOwogfQogCi11MTYgaHBpX3R1bmVyX3NldF9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXNob3J0IGdhaW4pCit1MTYgaHBpX3R1bmVyX3NldF9nYWluKHUzMiBoX2NvbnRyb2wsIHNob3J0IGdhaW4pCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX1RVTkVSX0dBSU4sCi0JCWdhaW4sIDApOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQoaF9jb250cm9sLCBIUElfVFVORVJfR0FJTiwgZ2FpbiwgMCk7CiB9CiAKLXUxNiBocGlfdHVuZXJfZ2V0X2dhaW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgKnBuX2dhaW4pCit1MTYgaHBpX3R1bmVyX2dldF9nYWluKHUzMiBoX2NvbnRyb2wsIHNob3J0ICpwbl9nYWluKQogewogCXUzMiBnYWluID0gMDsKIAl1MTYgZXJyb3IgPSAwOwogCi0JZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfVFVORVJfR0FJTiwKLQkJJmdhaW4pOworCWVycm9yID0gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9UVU5FUl9HQUlOLCAmZ2Fpbik7CiAJaWYgKHBuX2dhaW4pCiAJCSpwbl9nYWluID0gKHUxNilnYWluOwogCXJldHVybiBlcnJvcjsKIH0KIAotdTE2IGhwaV90dW5lcl9nZXRSRl9sZXZlbChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQlzaG9ydCAqcHdfbGV2ZWwpCit1MTYgaHBpX3R1bmVyX2dldF9yZl9sZXZlbCh1MzIgaF9jb250cm9sLCBzaG9ydCAqcHdfbGV2ZWwpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwotCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfVFVORVJfTEVWRUw7Ci0JaG0udS5jLnBhcmFtMSA9IEhQSV9UVU5FUl9MRVZFTF9BVkVSQUdFOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CisJaG0udS5jdS5hdHRyaWJ1dGUgPSBIUElfVFVORVJfTEVWRUxfQVZHOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwogCWlmIChwd19sZXZlbCkKLQkJKnB3X2xldmVsID0gKHNob3J0KWhyLnUuYy5wYXJhbTE7CisJCSpwd19sZXZlbCA9IGhyLnUuY3UudHVuZXIuc19sZXZlbDsKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfdHVuZXJfZ2V0X3Jhd1JGX2xldmVsKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHNob3J0ICpwd19sZXZlbCkKK3UxNiBocGlfdHVuZXJfZ2V0X3Jhd19yZl9sZXZlbCh1MzIgaF9jb250cm9sLCBzaG9ydCAqcHdfbGV2ZWwpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwotCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfVFVORVJfTEVWRUw7Ci0JaG0udS5jLnBhcmFtMSA9IEhQSV9UVU5FUl9MRVZFTF9SQVc7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKKwlobS51LmN1LmF0dHJpYnV0ZSA9IEhQSV9UVU5FUl9MRVZFTF9SQVc7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAJaWYgKHB3X2xldmVsKQotCQkqcHdfbGV2ZWwgPSAoc2hvcnQpaHIudS5jLnBhcmFtMTsKKwkJKnB3X2xldmVsID0gaHIudS5jdS50dW5lci5zX2xldmVsOwogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV90dW5lcl9xdWVyeV9kZWVtcGhhc2lzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX3R1bmVyLCBjb25zdCB1MzIgaW5kZXgsIGNvbnN0IHUxNiBiYW5kLCB1MzIgKnBkZWVtcGhhc2lzKQordTE2IGhwaV90dW5lcl9xdWVyeV9kZWVtcGhhc2lzKGNvbnN0IHUzMiBoX3R1bmVyLCBjb25zdCB1MzIgaW5kZXgsCisJY29uc3QgdTE2IGJhbmQsIHUzMiAqcGRlZW1waGFzaXMpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3F1ZXJ5KHBoX3N1YnN5cywgaF90dW5lciwgSFBJX1RVTkVSX0RFRU1QSEFTSVMsCi0JCWluZGV4LCBiYW5kLCBwZGVlbXBoYXNpcyk7CisJcmV0dXJuIGhwaV9jb250cm9sX3F1ZXJ5KGhfdHVuZXIsIEhQSV9UVU5FUl9ERUVNUEhBU0lTLCBpbmRleCwgYmFuZCwKKwkJcGRlZW1waGFzaXMpOwogfQogCi11MTYgaHBpX3R1bmVyX3NldF9kZWVtcGhhc2lzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUzMiBoX2NvbnRyb2wsIHUzMiBkZWVtcGhhc2lzKQordTE2IGhwaV90dW5lcl9zZXRfZGVlbXBoYXNpcyh1MzIgaF9jb250cm9sLCB1MzIgZGVlbXBoYXNpcykKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfVFVORVJfREVFTVBIQVNJUywgZGVlbXBoYXNpcywgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9UVU5FUl9ERUVNUEhBU0lTLAorCQlkZWVtcGhhc2lzLCAwKTsKIH0KIAotdTE2IGhwaV90dW5lcl9nZXRfZGVlbXBoYXNpcyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCB1MzIgKnBkZWVtcGhhc2lzKQordTE2IGhwaV90dW5lcl9nZXRfZGVlbXBoYXNpcyh1MzIgaF9jb250cm9sLCB1MzIgKnBkZWVtcGhhc2lzKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfVFVORVJfREVFTVBIQVNJUywgcGRlZW1waGFzaXMpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX1RVTkVSX0RFRU1QSEFTSVMsCisJCXBkZWVtcGhhc2lzKTsKIH0KIAotdTE2IGhwaV90dW5lcl9xdWVyeV9wcm9ncmFtKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX3R1bmVyLCB1MzIgKnBiaXRtYXBfcHJvZ3JhbSkKK3UxNiBocGlfdHVuZXJfcXVlcnlfcHJvZ3JhbShjb25zdCB1MzIgaF90dW5lciwgdTMyICpwYml0bWFwX3Byb2dyYW0pCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3F1ZXJ5KHBoX3N1YnN5cywgaF90dW5lciwgSFBJX1RVTkVSX1BST0dSQU0sIDAsIDAsCisJcmV0dXJuIGhwaV9jb250cm9sX3F1ZXJ5KGhfdHVuZXIsIEhQSV9UVU5FUl9QUk9HUkFNLCAwLCAwLAogCQlwYml0bWFwX3Byb2dyYW0pOwogfQogCi11MTYgaHBpX3R1bmVyX3NldF9wcm9ncmFtKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUzMiBwcm9ncmFtKQordTE2IGhwaV90dW5lcl9zZXRfcHJvZ3JhbSh1MzIgaF9jb250cm9sLCB1MzIgcHJvZ3JhbSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfVFVORVJfUFJPR1JBTSwKLQkJcHJvZ3JhbSwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9UVU5FUl9QUk9HUkFNLCBwcm9ncmFtLAorCQkwKTsKIH0KIAotdTE2IGhwaV90dW5lcl9nZXRfcHJvZ3JhbShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MzIgKnBwcm9ncmFtKQordTE2IGhwaV90dW5lcl9nZXRfcHJvZ3JhbSh1MzIgaF9jb250cm9sLCB1MzIgKnBwcm9ncmFtKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfVFVORVJfUFJPR1JBTSwKLQkJcHByb2dyYW0pOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX1RVTkVSX1BST0dSQU0sIHBwcm9ncmFtKTsKIH0KIAotdTE2IGhwaV90dW5lcl9nZXRfaGRfcmFkaW9fZHNwX3ZlcnNpb24oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgY2hhciAqcHN6X2RzcF92ZXJzaW9uLCBjb25zdCB1MzIgc3RyaW5nX3NpemUpCit1MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19kc3BfdmVyc2lvbih1MzIgaF9jb250cm9sLCBjaGFyICpwc3pfZHNwX3ZlcnNpb24sCisJY29uc3QgdTMyIHN0cmluZ19zaXplKQogewogCXJldHVybiBocGlfY29udHJvbF9nZXRfc3RyaW5nKGhfY29udHJvbCwKIAkJSFBJX1RVTkVSX0hEUkFESU9fRFNQX1ZFUlNJT04sIHBzel9kc3BfdmVyc2lvbiwgc3RyaW5nX3NpemUpOwogfQogCi11MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19zZGtfdmVyc2lvbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCBjaGFyICpwc3pfc2RrX3ZlcnNpb24sIGNvbnN0IHUzMiBzdHJpbmdfc2l6ZSkKK3UxNiBocGlfdHVuZXJfZ2V0X2hkX3JhZGlvX3Nka192ZXJzaW9uKHUzMiBoX2NvbnRyb2wsIGNoYXIgKnBzel9zZGtfdmVyc2lvbiwKKwljb25zdCB1MzIgc3RyaW5nX3NpemUpCiB7CiAJcmV0dXJuIGhwaV9jb250cm9sX2dldF9zdHJpbmcoaF9jb250cm9sLAogCQlIUElfVFVORVJfSERSQURJT19TREtfVkVSU0lPTiwgcHN6X3Nka192ZXJzaW9uLCBzdHJpbmdfc2l6ZSk7CiB9CiAKLXUxNiBocGlfdHVuZXJfZ2V0X3N0YXR1cyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MTYgKnB3X3N0YXR1c19tYXNrLCB1MTYgKnB3X3N0YXR1cykKK3UxNiBocGlfdHVuZXJfZ2V0X3N0YXR1cyh1MzIgaF9jb250cm9sLCB1MTYgKnB3X3N0YXR1c19tYXNrLCB1MTYgKnB3X3N0YXR1cykKIHsKIAl1MzIgc3RhdHVzID0gMDsKIAl1MTYgZXJyb3IgPSAwOwogCi0JZXJyb3IgPSBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfVFVORVJfU1RBVFVTLAotCQkmc3RhdHVzKTsKKwllcnJvciA9IGhwaV9jb250cm9sX3BhcmFtMV9nZXQoaF9jb250cm9sLCBIUElfVFVORVJfU1RBVFVTLCAmc3RhdHVzKTsKIAlpZiAocHdfc3RhdHVzKSB7CiAJCWlmICghZXJyb3IpIHsKIAkJCSpwd19zdGF0dXNfbWFzayA9ICh1MTYpKHN0YXR1cyA+PiAxNik7CkBAIC0zMDA1LDUwICsyNjg1LDQ0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi11MTYgaHBpX3R1bmVyX3NldF9tb2RlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXUzMiBtb2RlLCB1MzIgdmFsdWUpCit1MTYgaHBpX3R1bmVyX3NldF9tb2RlKHUzMiBoX2NvbnRyb2wsIHUzMiBtb2RlLCB1MzIgdmFsdWUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX1RVTkVSX01PREUsCi0JCW1vZGUsIHZhbHVlKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX1RVTkVSX01PREUsIG1vZGUsIHZhbHVlKTsKIH0KIAotdTE2IGhwaV90dW5lcl9nZXRfbW9kZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MzIgbW9kZSwgdTMyICpwbl92YWx1ZSkKK3UxNiBocGlfdHVuZXJfZ2V0X21vZGUodTMyIGhfY29udHJvbCwgdTMyIG1vZGUsIHUzMiAqcG5fdmFsdWUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX1RVTkVSX01PREUsCi0JCW1vZGUsIDAsIHBuX3ZhbHVlLCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KGhfY29udHJvbCwgSFBJX1RVTkVSX01PREUsIG1vZGUsIDAsCisJCXBuX3ZhbHVlLCBOVUxMKTsKIH0KIAotdTE2IGhwaV90dW5lcl9nZXRfaGRfcmFkaW9fc2lnbmFsX3F1YWxpdHkoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwcXVhbGl0eSkKK3UxNiBocGlfdHVuZXJfZ2V0X2hkX3JhZGlvX3NpZ25hbF9xdWFsaXR5KHUzMiBoX2NvbnRyb2wsIHUzMiAqcHF1YWxpdHkpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQoaF9jb250cm9sLAogCQlIUElfVFVORVJfSERSQURJT19TSUdOQUxfUVVBTElUWSwgcHF1YWxpdHkpOwogfQogCi11MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19zaWduYWxfYmxlbmQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwYmxlbmQpCit1MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19zaWduYWxfYmxlbmQodTMyIGhfY29udHJvbCwgdTMyICpwYmxlbmQpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9UVU5FUl9IRFJBRElPX0JMRU5ELCBwYmxlbmQpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX1RVTkVSX0hEUkFESU9fQkxFTkQsCisJCXBibGVuZCk7CiB9CiAKLXUxNiBocGlfdHVuZXJfc2V0X2hkX3JhZGlvX3NpZ25hbF9ibGVuZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9jb250cm9sLCBjb25zdCB1MzIgYmxlbmQpCit1MTYgaHBpX3R1bmVyX3NldF9oZF9yYWRpb19zaWduYWxfYmxlbmQodTMyIGhfY29udHJvbCwgY29uc3QgdTMyIGJsZW5kKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9UVU5FUl9IRFJBRElPX0JMRU5ELCBibGVuZCwgMCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChoX2NvbnRyb2wsIEhQSV9UVU5FUl9IRFJBRElPX0JMRU5ELAorCQlibGVuZCwgMCk7CiB9CiAKLXUxNiBocGlfdHVuZXJfZ2V0UkRTKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCWNoYXIgKnBfZGF0YSkKK3UxNiBocGlfdHVuZXJfZ2V0X3Jkcyh1MzIgaF9jb250cm9sLCBjaGFyICpwX2RhdGEpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CiAKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWlmIChocGlfaGFuZGxlX2luZGV4ZXMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCkpCisJCXJldHVybiBIUElfRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAJaG0udS5jLmF0dHJpYnV0ZSA9IEhQSV9UVU5FUl9SRFM7CiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAJaWYgKHBfZGF0YSkgewpAQCAtMzA1OSw4MCArMjczMyw4MiBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IEhQSV9QQURfX2dldF9jaGFubmVsX25hbWUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIGRhdGFfbGVuZ3RoKQordTE2IGhwaV9wYWRfZ2V0X2NoYW5uZWxfbmFtZSh1MzIgaF9jb250cm9sLCBjaGFyICpwc3pfc3RyaW5nLAorCWNvbnN0IHUzMiBkYXRhX2xlbmd0aCkKIHsKIAlyZXR1cm4gaHBpX2NvbnRyb2xfZ2V0X3N0cmluZyhoX2NvbnRyb2wsIEhQSV9QQURfQ0hBTk5FTF9OQU1FLAogCQlwc3pfc3RyaW5nLCBkYXRhX2xlbmd0aCk7CiB9CiAKLXUxNiBIUElfUEFEX19nZXRfYXJ0aXN0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCWNoYXIgKnBzel9zdHJpbmcsIGNvbnN0IHUzMiBkYXRhX2xlbmd0aCkKK3UxNiBocGlfcGFkX2dldF9hcnRpc3QodTMyIGhfY29udHJvbCwgY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIGRhdGFfbGVuZ3RoKQogewogCXJldHVybiBocGlfY29udHJvbF9nZXRfc3RyaW5nKGhfY29udHJvbCwgSFBJX1BBRF9BUlRJU1QsIHBzel9zdHJpbmcsCiAJCWRhdGFfbGVuZ3RoKTsKIH0KIAotdTE2IEhQSV9QQURfX2dldF90aXRsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQljaGFyICpwc3pfc3RyaW5nLCBjb25zdCB1MzIgZGF0YV9sZW5ndGgpCit1MTYgaHBpX3BhZF9nZXRfdGl0bGUodTMyIGhfY29udHJvbCwgY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIGRhdGFfbGVuZ3RoKQogewogCXJldHVybiBocGlfY29udHJvbF9nZXRfc3RyaW5nKGhfY29udHJvbCwgSFBJX1BBRF9USVRMRSwgcHN6X3N0cmluZywKIAkJZGF0YV9sZW5ndGgpOwogfQogCi11MTYgSFBJX1BBRF9fZ2V0X2NvbW1lbnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIGRhdGFfbGVuZ3RoKQordTE2IGhwaV9wYWRfZ2V0X2NvbW1lbnQodTMyIGhfY29udHJvbCwgY2hhciAqcHN6X3N0cmluZywKKwljb25zdCB1MzIgZGF0YV9sZW5ndGgpCiB7CiAJcmV0dXJuIGhwaV9jb250cm9sX2dldF9zdHJpbmcoaF9jb250cm9sLCBIUElfUEFEX0NPTU1FTlQsIHBzel9zdHJpbmcsCiAJCWRhdGFfbGVuZ3RoKTsKIH0KIAotdTE2IEhQSV9QQURfX2dldF9wcm9ncmFtX3R5cGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgdTMyICpwcFRZKQordTE2IGhwaV9wYWRfZ2V0X3Byb2dyYW1fdHlwZSh1MzIgaF9jb250cm9sLCB1MzIgKnBwVFkpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9QQURfUFJPR1JBTV9UWVBFLCBwcFRZKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChoX2NvbnRyb2wsIEhQSV9QQURfUFJPR1JBTV9UWVBFLCBwcFRZKTsKIH0KIAotdTE2IEhQSV9QQURfX2dldF9yZHNQSShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MzIgKnBwSSkKK3UxNiBocGlfcGFkX2dldF9yZHNQSSh1MzIgaF9jb250cm9sLCB1MzIgKnBwSSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1BBRF9QUk9HUkFNX0lELCBwcEkpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX1BBRF9QUk9HUkFNX0lELCBwcEkpOwogfQogCi11MTYgaHBpX3ZvbHVtZV9xdWVyeV9jaGFubmVscyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQljb25zdCB1MzIgaF92b2x1bWUsIHUzMiAqcF9jaGFubmVscykKK3UxNiBocGlfdm9sdW1lX3F1ZXJ5X2NoYW5uZWxzKGNvbnN0IHUzMiBoX3ZvbHVtZSwgdTMyICpwX2NoYW5uZWxzKQogewotCXJldHVybiBocGlfY29udHJvbF9xdWVyeShwaF9zdWJzeXMsIGhfdm9sdW1lLCBIUElfVk9MVU1FX05VTV9DSEFOTkVMUywKLQkJMCwgMCwgcF9jaGFubmVscyk7CisJcmV0dXJuIGhwaV9jb250cm9sX3F1ZXJ5KGhfdm9sdW1lLCBIUElfVk9MVU1FX05VTV9DSEFOTkVMUywgMCwgMCwKKwkJcF9jaGFubmVscyk7CiB9CiAKLXUxNiBocGlfdm9sdW1lX3NldF9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXNob3J0IGFuX2xvZ19nYWluW0hQSV9NQVhfQ0hBTk5FTFNdCit1MTYgaHBpX3ZvbHVtZV9zZXRfZ2Fpbih1MzIgaF9jb250cm9sLCBzaG9ydCBhbl9sb2dfZ2FpbltIUElfTUFYX0NIQU5ORUxTXQogCSkKIHsKIAlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX3NldDIoaF9jb250cm9sLCBIUElfVk9MVU1FX0dBSU4sCiAJCWFuX2xvZ19nYWluWzBdLCBhbl9sb2dfZ2FpblsxXSk7CiB9CiAKLXUxNiBocGlfdm9sdW1lX2dldF9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAotCXNob3J0IGFuX2xvZ19nYWluW0hQSV9NQVhfQ0hBTk5FTFNdCit1MTYgaHBpX3ZvbHVtZV9nZXRfZ2Fpbih1MzIgaF9jb250cm9sLCBzaG9ydCBhbl9sb2dfZ2FpbltIUElfTUFYX0NIQU5ORUxTXQogCSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX2dldDIocGhfc3Vic3lzLCBoX2NvbnRyb2wsIEhQSV9WT0xVTUVfR0FJTiwKKwlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX2dldDIoaF9jb250cm9sLCBIUElfVk9MVU1FX0dBSU4sCiAJCSZhbl9sb2dfZ2FpblswXSwgJmFuX2xvZ19nYWluWzFdKTsKIH0KIAotdTE2IGhwaV92b2x1bWVfcXVlcnlfcmFuZ2UoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgKm1pbl9nYWluXzAxZEIsIHNob3J0ICptYXhfZ2Fpbl8wMWRCLCBzaG9ydCAqc3RlcF9nYWluXzAxZEIpCit1MTYgaHBpX3ZvbHVtZV9zZXRfbXV0ZSh1MzIgaF9jb250cm9sLCB1MzIgbXV0ZSkKK3sKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KGhfY29udHJvbCwgSFBJX1ZPTFVNRV9NVVRFLCBtdXRlLCAwKTsKK30KKwordTE2IGhwaV92b2x1bWVfZ2V0X211dGUodTMyIGhfY29udHJvbCwgdTMyICptdXRlKQoreworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KGhfY29udHJvbCwgSFBJX1ZPTFVNRV9NVVRFLCBtdXRlKTsKK30KKwordTE2IGhwaV92b2x1bWVfcXVlcnlfcmFuZ2UodTMyIGhfY29udHJvbCwgc2hvcnQgKm1pbl9nYWluXzAxZEIsCisJc2hvcnQgKm1heF9nYWluXzAxZEIsIHNob3J0ICpzdGVwX2dhaW5fMDFkQikKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX1ZPTFVNRV9SQU5HRTsKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwpAQCAtMzE1MCwxNiArMjgyNiwxNyBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV92b2x1bWVfYXV0b19mYWRlX3Byb2ZpbGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfY29udHJvbCwgc2hvcnQgYW5fc3RvcF9nYWluMF8wMWRCW0hQSV9NQVhfQ0hBTk5FTFNdLAotCXUzMiBkdXJhdGlvbl9tcywgdTE2IHByb2ZpbGUpCit1MTYgaHBpX3ZvbHVtZV9hdXRvX2ZhZGVfcHJvZmlsZSh1MzIgaF9jb250cm9sLAorCXNob3J0IGFuX3N0b3BfZ2FpbjBfMDFkQltIUElfTUFYX0NIQU5ORUxTXSwgdTMyIGR1cmF0aW9uX21zLAorCXUxNiBwcm9maWxlKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9TRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlpZiAoaHBpX2hhbmRsZV9pbmRleGVzKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpKQorCQlyZXR1cm4gSFBJX0VSUk9SX0lOVkFMSURfSEFORExFOwogCiAJbWVtY3B5KGhtLnUuYy5hbl9sb2dfdmFsdWUsIGFuX3N0b3BfZ2FpbjBfMDFkQiwKIAkJc2l6ZW9mKHNob3J0KSAqIEhQSV9NQVhfQ0hBTk5FTFMpOwpAQCAtMzE3MywyMSArMjg1MCwyMSBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV92b2x1bWVfYXV0b19mYWRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAordTE2IGhwaV92b2x1bWVfYXV0b19mYWRlKHUzMiBoX2NvbnRyb2wsCiAJc2hvcnQgYW5fc3RvcF9nYWluMF8wMWRCW0hQSV9NQVhfQ0hBTk5FTFNdLCB1MzIgZHVyYXRpb25fbXMpCiB7Ci0JcmV0dXJuIGhwaV92b2x1bWVfYXV0b19mYWRlX3Byb2ZpbGUocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCWFuX3N0b3BfZ2FpbjBfMDFkQiwgZHVyYXRpb25fbXMsIEhQSV9WT0xVTUVfQVVUT0ZBREVfTE9HKTsKKwlyZXR1cm4gaHBpX3ZvbHVtZV9hdXRvX2ZhZGVfcHJvZmlsZShoX2NvbnRyb2wsIGFuX3N0b3BfZ2FpbjBfMDFkQiwKKwkJZHVyYXRpb25fbXMsIEhQSV9WT0xVTUVfQVVUT0ZBREVfTE9HKTsKIH0KIAotdTE2IGhwaV92b3hfc2V0X3RocmVzaG9sZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQlzaG9ydCBhbl9nYWluMF8wMWRCKQordTE2IGhwaV92b3hfc2V0X3RocmVzaG9sZCh1MzIgaF9jb250cm9sLCBzaG9ydCBhbl9nYWluMF8wMWRCKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfU0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX1ZPWF9USFJFU0hPTEQ7CiAKIAlobS51LmMuYW5fbG9nX3ZhbHVlWzBdID0gYW5fZ2FpbjBfMDFkQjsKQEAgLTMxOTcsMTQgKzI4NzQsMTQgQEAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfdm94X2dldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0Jc2hvcnQgKmFuX2dhaW4wXzAxZEIpCit1MTYgaHBpX3ZveF9nZXRfdGhyZXNob2xkKHUzMiBoX2NvbnRyb2wsIHNob3J0ICphbl9nYWluMF8wMWRCKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CisJaWYgKGhwaV9oYW5kbGVfaW5kZXhlcyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KSkKKwkJcmV0dXJuIEhQSV9FUlJPUl9JTlZBTElEX0hBTkRMRTsKIAlobS51LmMuYXR0cmlidXRlID0gSFBJX1ZPWF9USFJFU0hPTEQ7CiAKIAlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKQEAgLTMyMTMsNzI4ICsyODkwLDMgQEAKIAogCXJldHVybiBoci5lcnJvcjsKIH0KLQotc3RhdGljIHNpemVfdCBzdHJ2X3BhY2tldF9zaXplID0gTUlOX1NUUlZfUEFDS0VUX1NJWkU7Ci0KLXN0YXRpYyBzaXplX3QgZW50aXR5X3R5cGVfdG9fc2l6ZVtMQVNUX0VOVElUWV9UWVBFXSA9IHsKLQkwLAotCXNpemVvZihzdHJ1Y3QgaHBpX2VudGl0eSksCi0Jc2l6ZW9mKHZvaWQgKiksCi0KLQlzaXplb2YoaW50KSwKLQlzaXplb2YoZmxvYXQpLAotCXNpemVvZihkb3VibGUpLAotCi0Jc2l6ZW9mKGNoYXIpLAotCXNpemVvZihjaGFyKSwKLQotCTQgKiBzaXplb2YoY2hhciksCi0JMTYgKiBzaXplb2YoY2hhciksCi0JNiAqIHNpemVvZihjaGFyKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGhwaV9lbnRpdHlfc2l6ZShzdHJ1Y3QgaHBpX2VudGl0eSAqZW50aXR5X3B0cikKLXsKLQlyZXR1cm4gZW50aXR5X3B0ci0+aGVhZGVyLnNpemU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGhwaV9lbnRpdHlfaGVhZGVyX3NpemUoc3RydWN0IGhwaV9lbnRpdHkgKmVudGl0eV9wdHIpCi17Ci0JcmV0dXJuIHNpemVvZihlbnRpdHlfcHRyLT5oZWFkZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIHNpemVfdCBocGlfZW50aXR5X3ZhbHVlX3NpemUoc3RydWN0IGhwaV9lbnRpdHkgKmVudGl0eV9wdHIpCi17Ci0JcmV0dXJuIGhwaV9lbnRpdHlfc2l6ZShlbnRpdHlfcHRyKSAtCi0JCWhwaV9lbnRpdHlfaGVhZGVyX3NpemUoZW50aXR5X3B0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGhwaV9lbnRpdHlfaXRlbV9jb3VudChzdHJ1Y3QgaHBpX2VudGl0eSAqZW50aXR5X3B0cikKLXsKLQlyZXR1cm4gaHBpX2VudGl0eV92YWx1ZV9zaXplKGVudGl0eV9wdHIpIC8KLQkJZW50aXR5X3R5cGVfdG9fc2l6ZVtlbnRpdHlfcHRyLT5oZWFkZXIudHlwZV07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhwaV9lbnRpdHkgKmhwaV9lbnRpdHlfcHRyX3RvX25leHQoc3RydWN0IGhwaV9lbnRpdHkKLQkqZW50aXR5X3B0cikKLXsKLQlyZXR1cm4gKHZvaWQgKikoKCh1OCAqKWVudGl0eV9wdHIpICsgaHBpX2VudGl0eV9zaXplKGVudGl0eV9wdHIpKTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgaHBpX2VudGl0eV9jaGVja190eXBlKGNvbnN0IGVudW0gZV9lbnRpdHlfdHlwZSB0KQotewotCWlmICh0ID49IDAgJiYgdCA8IFNUUl9UWVBFX0ZJRUxEX01BWCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIEhQSV9FUlJPUl9FTlRJVFlfVFlQRV9JTlZBTElEOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBocGlfZW50aXR5X2NoZWNrX3JvbGUoY29uc3QgZW51bSBlX2VudGl0eV9yb2xlIHIpCi17Ci0JaWYgKHIgPj0gMCAmJiByIDwgU1RSX1JPTEVfRklFTERfTUFYKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gSFBJX0VSUk9SX0VOVElUWV9ST0xFX0lOVkFMSUQ7Ci19Ci0KLXN0YXRpYyB1MTYgaHBpX2VudGl0eV9nZXRfbmV4dChzdHJ1Y3QgaHBpX2VudGl0eSAqZW50aXR5LCBpbnQgcmVjdXJzaXZlX2ZsYWcsCi0Jdm9pZCAqZ3VhcmRfcCwgc3RydWN0IGhwaV9lbnRpdHkgKipuZXh0KQotewotCUhQSV9ERUJVR19BU1NFUlQoZW50aXR5ICE9IE5VTEwpOwotCUhQSV9ERUJVR19BU1NFUlQobmV4dCAhPSBOVUxMKTsKLQlIUElfREVCVUdfQVNTRVJUKGhwaV9lbnRpdHlfc2l6ZShlbnRpdHkpICE9IDApOwotCi0JaWYgKGd1YXJkX3AgPD0gKHZvaWQgKillbnRpdHkpIHsKLQkJKm5leHQgPSBOVUxMOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocmVjdXJzaXZlX2ZsYWcgJiYgZW50aXR5LT5oZWFkZXIudHlwZSA9PSBlbnRpdHlfdHlwZV9zZXF1ZW5jZSkKLQkJKm5leHQgPSAoc3RydWN0IGhwaV9lbnRpdHkgKillbnRpdHktPnZhbHVlOwotCWVsc2UKLQkJKm5leHQgPSAoc3RydWN0IGhwaV9lbnRpdHkgKilocGlfZW50aXR5X3B0cl90b19uZXh0KGVudGl0eSk7Ci0KLQlpZiAoZ3VhcmRfcCA8PSAodm9pZCAqKSpuZXh0KSB7Ci0JCSpuZXh0ID0gTlVMTDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JSFBJX0RFQlVHX0FTU0VSVChndWFyZF9wID49ICh2b2lkICopaHBpX2VudGl0eV9wdHJfdG9fbmV4dCgqbmV4dCkpOwotCXJldHVybiAwOwotfQotCi11MTYgaHBpX2VudGl0eV9maW5kX25leHQoc3RydWN0IGhwaV9lbnRpdHkgKmNvbnRhaW5lcl9lbnRpdHksCi0JZW51bSBlX2VudGl0eV90eXBlIHR5cGUsIGVudW0gZV9lbnRpdHlfcm9sZSByb2xlLCBpbnQgcmVjdXJzaXZlX2ZsYWcsCi0Jc3RydWN0IGhwaV9lbnRpdHkgKipjdXJyZW50X21hdGNoKQotewotCXN0cnVjdCBocGlfZW50aXR5ICp0bXAgPSBOVUxMOwotCXZvaWQgKmd1YXJkX3AgPSBOVUxMOwotCi0JSFBJX0RFQlVHX0FTU0VSVChjb250YWluZXJfZW50aXR5ICE9IE5VTEwpOwotCWd1YXJkX3AgPSBocGlfZW50aXR5X3B0cl90b19uZXh0KGNvbnRhaW5lcl9lbnRpdHkpOwotCi0JaWYgKCpjdXJyZW50X21hdGNoICE9IE5VTEwpCi0JCWhwaV9lbnRpdHlfZ2V0X25leHQoKmN1cnJlbnRfbWF0Y2gsIHJlY3Vyc2l2ZV9mbGFnLCBndWFyZF9wLAotCQkJJnRtcCk7Ci0JZWxzZQotCQlocGlfZW50aXR5X2dldF9uZXh0KGNvbnRhaW5lcl9lbnRpdHksIDEsIGd1YXJkX3AsICZ0bXApOwotCi0Jd2hpbGUgKHRtcCkgewotCQl1MTYgZXJyOwotCi0JCUhQSV9ERUJVR19BU1NFUlQoKHZvaWQgKil0bXAgPj0gKHZvaWQgKiljb250YWluZXJfZW50aXR5KTsKLQotCQlpZiAoKCF0eXBlIHx8IHRtcC0+aGVhZGVyLnR5cGUgPT0gdHlwZSkgJiYgKCFyb2xlCi0JCQkJfHwgdG1wLT5oZWFkZXIucm9sZSA9PSByb2xlKSkgewotCQkJKmN1cnJlbnRfbWF0Y2ggPSB0bXA7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWVyciA9IGhwaV9lbnRpdHlfZ2V0X25leHQodG1wLCByZWN1cnNpdmVfZmxhZywgZ3VhcmRfcCwKLQkJCWN1cnJlbnRfbWF0Y2gpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQl0bXAgPSAqY3VycmVudF9tYXRjaDsKLQl9Ci0KLQkqY3VycmVudF9tYXRjaCA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaHBpX2VudGl0eV9mcmVlKHN0cnVjdCBocGlfZW50aXR5ICplbnRpdHkpCi17Ci0Ja2ZyZWUoZW50aXR5KTsKLX0KLQotc3RhdGljIHUxNiBocGlfZW50aXR5X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBocGlfZW50aXR5ICpzcmMsCi0Jc3RydWN0IGhwaV9lbnRpdHkgKipkc3QpCi17Ci0Jc2l6ZV90IGJ1Zl9zaXplOwotCUhQSV9ERUJVR19BU1NFUlQoZHN0ICE9IE5VTEwpOwotCUhQSV9ERUJVR19BU1NFUlQoc3JjICE9IE5VTEwpOwotCi0JYnVmX3NpemUgPSBocGlfZW50aXR5X3NpemUoc3JjKTsKLQkqZHN0ID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCpkc3QgPT0gTlVMTCkKLQkJcmV0dXJuIEhQSV9FUlJPUl9NRU1PUllfQUxMT0M7Ci0JbWVtY3B5KCpkc3QsIHNyYywgYnVmX3NpemUpOwotCXJldHVybiAwOwotfQotCi11MTYgaHBpX3VuaXZlcnNhbF9pbmZvKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaEMsCi0Jc3RydWN0IGhwaV9lbnRpdHkgKippbmZvKQotewotCXN0cnVjdCBocGlfbXNnX3N0cnYgaG07Ci0Jc3RydWN0IGhwaV9yZXNfc3RydiAqcGhyOwotCXUxNiBocGlfZXJyOwotCWludCByZW1haW5pbmdfYXR0ZW1wdHMgPSAyOwotCXNpemVfdCByZXNwX3BhY2tldF9zaXplID0gMTAyNDsKLQotCSppbmZvID0gTlVMTDsKLQotCXdoaWxlIChyZW1haW5pbmdfYXR0ZW1wdHMtLSkgewotCQlwaHIgPSBrbWFsbG9jKHJlc3BfcGFja2V0X3NpemUsIEdGUF9LRVJORUwpOwotCQlIUElfREVCVUdfQVNTRVJUKHBociAhPSBOVUxMKTsKLQotCQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlVjEoJmhtLmgsICh1MTYpc2l6ZW9mKGhtKSwgJnBoci0+aCwKLQkJCSh1MTYpcmVzcF9wYWNrZXRfc2l6ZSwgSFBJX09CSl9DT05UUk9MLAotCQkJSFBJX0NPTlRST0xfR0VUX0lORk8pOwotCQl1MzJUT0lOREVYRVMoaEMsICZobS5oLmFkYXB0ZXJfaW5kZXgsICZobS5oLm9ial9pbmRleCk7Ci0KLQkJaG0uc3Rydi5oZWFkZXIuc2l6ZSA9IHNpemVvZihobS5zdHJ2KTsKLQkJcGhyLT5zdHJ2LmhlYWRlci5zaXplID0gcmVzcF9wYWNrZXRfc2l6ZSAtIHNpemVvZihwaHItPmgpOwotCi0JCWhwaV9zZW5kX3JlY3YoKHN0cnVjdCBocGlfbWVzc2FnZSAqKSZobS5oLAotCQkJKHN0cnVjdCBocGlfcmVzcG9uc2UgKikmcGhyLT5oKTsKLQkJaWYgKHBoci0+aC5lcnJvciA9PSBIUElfRVJST1JfUkVTUE9OU0VfQlVGRkVSX1RPT19TTUFMTCkgewotCi0JCQlIUElfREVCVUdfQVNTRVJUKHBoci0+aC5zcGVjaWZpY19lcnJvciA+Ci0JCQkJTUlOX1NUUlZfUEFDS0VUX1NJWkUKLQkJCQkmJiBwaHItPmguc3BlY2lmaWNfZXJyb3IgPCAxNTAwKTsKLQkJCXJlc3BfcGFja2V0X3NpemUgPSBwaHItPmguc3BlY2lmaWNfZXJyb3I7Ci0JCX0gZWxzZSB7Ci0JCQlyZW1haW5pbmdfYXR0ZW1wdHMgPSAwOwotCQkJaWYgKCFwaHItPmguZXJyb3IpCi0JCQkJaHBpX2VudGl0eV9hbGxvY19hbmRfY29weSgmcGhyLT5zdHJ2LCBpbmZvKTsKLQkJfQotCi0JCWhwaV9lcnIgPSBwaHItPmguZXJyb3I7Ci0JCWtmcmVlKHBocik7Ci0JfQotCi0JcmV0dXJuIGhwaV9lcnI7Ci19Ci0KLXUxNiBocGlfdW5pdmVyc2FsX2dldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhDLAotCXN0cnVjdCBocGlfZW50aXR5ICoqdmFsdWUpCi17Ci0Jc3RydWN0IGhwaV9tc2dfc3RydiBobTsKLQlzdHJ1Y3QgaHBpX3Jlc19zdHJ2ICpwaHI7Ci0JdTE2IGhwaV9lcnI7Ci0JaW50IHJlbWFpbmluZ19hdHRlbXB0cyA9IDI7Ci0KLQkqdmFsdWUgPSBOVUxMOwotCi0Jd2hpbGUgKHJlbWFpbmluZ19hdHRlbXB0cy0tKSB7Ci0JCXBociA9IGttYWxsb2Moc3Rydl9wYWNrZXRfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGhyKQotCQkJcmV0dXJuIEhQSV9FUlJPUl9NRU1PUllfQUxMT0M7Ci0KLQkJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZVYxKCZobS5oLCAodTE2KXNpemVvZihobSksICZwaHItPmgsCi0JCQkodTE2KXN0cnZfcGFja2V0X3NpemUsIEhQSV9PQkpfQ09OVFJPTCwKLQkJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JCXUzMlRPSU5ERVhFUyhoQywgJmhtLmguYWRhcHRlcl9pbmRleCwgJmhtLmgub2JqX2luZGV4KTsKLQotCQlobS5zdHJ2LmhlYWRlci5zaXplID0gc2l6ZW9mKGhtLnN0cnYpOwotCQlwaHItPnN0cnYuaGVhZGVyLnNpemUgPSBzdHJ2X3BhY2tldF9zaXplIC0gc2l6ZW9mKHBoci0+aCk7Ci0KLQkJaHBpX3NlbmRfcmVjdigoc3RydWN0IGhwaV9tZXNzYWdlICopJmhtLmgsCi0JCQkoc3RydWN0IGhwaV9yZXNwb25zZSAqKSZwaHItPmgpOwotCQlpZiAocGhyLT5oLmVycm9yID09IEhQSV9FUlJPUl9SRVNQT05TRV9CVUZGRVJfVE9PX1NNQUxMKSB7Ci0KLQkJCUhQSV9ERUJVR19BU1NFUlQocGhyLT5oLnNwZWNpZmljX2Vycm9yID4KLQkJCQlNSU5fU1RSVl9QQUNLRVRfU0laRQotCQkJCSYmIHBoci0+aC5zcGVjaWZpY19lcnJvciA8IDEwMDApOwotCQkJc3Rydl9wYWNrZXRfc2l6ZSA9IHBoci0+aC5zcGVjaWZpY19lcnJvcjsKLQkJfSBlbHNlIHsKLQkJCXJlbWFpbmluZ19hdHRlbXB0cyA9IDA7Ci0JCQlpZiAoIXBoci0+aC5lcnJvcikKLQkJCQlocGlfZW50aXR5X2FsbG9jX2FuZF9jb3B5KCZwaHItPnN0cnYsIHZhbHVlKTsKLQkJfQotCi0JCWhwaV9lcnIgPSBwaHItPmguZXJyb3I7Ci0JCWtmcmVlKHBocik7Ci0JfQotCi0JcmV0dXJuIGhwaV9lcnI7Ci19Ci0KLXUxNiBocGlfdW5pdmVyc2FsX3NldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhDLAotCXN0cnVjdCBocGlfZW50aXR5ICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgaHBpX21zZ19zdHJ2ICpwaG07Ci0Jc3RydWN0IGhwaV9yZXNfc3RydiBocjsKLQotCXBobSA9IGttYWxsb2Moc2l6ZW9mKHBobS0+aCkgKyB2YWx1ZS0+aGVhZGVyLnNpemUsIEdGUF9LRVJORUwpOwotCUhQSV9ERUJVR19BU1NFUlQocGhtICE9IE5VTEwpOwotCi0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZVYxKCZwaG0tPmgsCi0JCXNpemVvZihwaG0tPmgpICsgdmFsdWUtPmhlYWRlci5zaXplLCAmaHIuaCwgc2l6ZW9mKGhyKSwKLQkJSFBJX09CSl9DT05UUk9MLCBIUElfQ09OVFJPTF9TRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoQywgJnBobS0+aC5hZGFwdGVyX2luZGV4LCAmcGhtLT5oLm9ial9pbmRleCk7Ci0JaHIuc3Rydi5oZWFkZXIuc2l6ZSA9IHNpemVvZihoci5zdHJ2KTsKLQotCW1lbWNweSgmcGhtLT5zdHJ2LCB2YWx1ZSwgdmFsdWUtPmhlYWRlci5zaXplKTsKLQlocGlfc2VuZF9yZWN2KChzdHJ1Y3QgaHBpX21lc3NhZ2UgKikmcGhtLT5oLAotCQkoc3RydWN0IGhwaV9yZXNwb25zZSAqKSZoci5oKTsKLQotCXJldHVybiBoci5oLmVycm9yOwotfQotCi11MTYgaHBpX2VudGl0eV9hbGxvY19hbmRfcGFjayhjb25zdCBlbnVtIGVfZW50aXR5X3R5cGUgdHlwZSwKLQljb25zdCBzaXplX3QgaXRlbV9jb3VudCwgY29uc3QgZW51bSBlX2VudGl0eV9yb2xlIHJvbGUsIHZvaWQgKnZhbHVlLAotCXN0cnVjdCBocGlfZW50aXR5ICoqZW50aXR5KQotewotCXNpemVfdCBieXRlc190b19jb3B5LCB0b3RhbF9zaXplOwotCXUxNiBoRSA9IDA7Ci0JKmVudGl0eSA9IE5VTEw7Ci0KLQloRSA9IGhwaV9lbnRpdHlfY2hlY2tfdHlwZSh0eXBlKTsKLQlpZiAoaEUpCi0JCXJldHVybiBoRTsKLQotCUhQSV9ERUJVR19BU1NFUlQocm9sZSA+IGVudGl0eV9yb2xlX251bGwgJiYgdHlwZSA8IExBU1RfRU5USVRZX1RZUEUpOwotCi0JYnl0ZXNfdG9fY29weSA9IGVudGl0eV90eXBlX3RvX3NpemVbdHlwZV0gKiBpdGVtX2NvdW50OwotCXRvdGFsX3NpemUgPSBocGlfZW50aXR5X2hlYWRlcl9zaXplKCplbnRpdHkpICsgYnl0ZXNfdG9fY29weTsKLQotCUhQSV9ERUJVR19BU1NFUlQodG90YWxfc2l6ZSA+PSBocGlfZW50aXR5X2hlYWRlcl9zaXplKCplbnRpdHkpCi0JCSYmIHRvdGFsX3NpemUgPCBTVFJfU0laRV9GSUVMRF9NQVgpOwotCi0JKmVudGl0eSA9IGttYWxsb2ModG90YWxfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCplbnRpdHkgPT0gTlVMTCkKLQkJcmV0dXJuIEhQSV9FUlJPUl9NRU1PUllfQUxMT0M7Ci0JbWVtY3B5KCgqZW50aXR5KS0+dmFsdWUsIHZhbHVlLCBieXRlc190b19jb3B5KTsKLQkoKmVudGl0eSktPmhlYWRlci5zaXplID0KLQkJaHBpX2VudGl0eV9oZWFkZXJfc2l6ZSgqZW50aXR5KSArIGJ5dGVzX3RvX2NvcHk7Ci0JKCplbnRpdHkpLT5oZWFkZXIudHlwZSA9IHR5cGU7Ci0JKCplbnRpdHkpLT5oZWFkZXIucm9sZSA9IHJvbGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXUxNiBocGlfZW50aXR5X2NvcHlfdmFsdWVfZnJvbShzdHJ1Y3QgaHBpX2VudGl0eSAqZW50aXR5LAotCWVudW0gZV9lbnRpdHlfdHlwZSB0eXBlLCBzaXplX3QgaXRlbV9jb3VudCwgdm9pZCAqdmFsdWVfZHN0X3ApCi17Ci0Jc2l6ZV90IGJ5dGVzX3RvX2NvcHk7Ci0KLQlpZiAoZW50aXR5LT5oZWFkZXIudHlwZSAhPSB0eXBlKQotCQlyZXR1cm4gSFBJX0VSUk9SX0VOVElUWV9UWVBFX01JU01BVENIOwotCi0JaWYgKGhwaV9lbnRpdHlfaXRlbV9jb3VudChlbnRpdHkpICE9IGl0ZW1fY291bnQpCi0JCXJldHVybiBIUElfRVJST1JfRU5USVRZX0lURU1fQ09VTlQ7Ci0KLQlieXRlc190b19jb3B5ID0gZW50aXR5X3R5cGVfdG9fc2l6ZVt0eXBlXSAqIGl0ZW1fY291bnQ7Ci0JbWVtY3B5KHZhbHVlX2RzdF9wLCBlbnRpdHktPnZhbHVlLCBieXRlc190b19jb3B5KTsKLQlyZXR1cm4gMDsKLX0KLQotdTE2IGhwaV9lbnRpdHlfdW5wYWNrKHN0cnVjdCBocGlfZW50aXR5ICplbnRpdHksIGVudW0gZV9lbnRpdHlfdHlwZSAqdHlwZSwKLQlzaXplX3QgKml0ZW1fY291bnQsIGVudW0gZV9lbnRpdHlfcm9sZSAqcm9sZSwgdm9pZCAqKnZhbHVlKQotewotCXUxNiBlcnIgPSAwOwotCUhQSV9ERUJVR19BU1NFUlQoZW50aXR5ICE9IE5VTEwpOwotCi0JaWYgKHR5cGUpCi0JCSp0eXBlID0gZW50aXR5LT5oZWFkZXIudHlwZTsKLQotCWlmIChyb2xlKQotCQkqcm9sZSA9IGVudGl0eS0+aGVhZGVyLnJvbGU7Ci0KLQlpZiAodmFsdWUpCi0JCSp2YWx1ZSA9IGVudGl0eS0+dmFsdWU7Ci0KLQlpZiAoaXRlbV9jb3VudCAhPSBOVUxMKSB7Ci0JCWlmIChlbnRpdHktPmhlYWRlci50eXBlID09IGVudGl0eV90eXBlX3NlcXVlbmNlKSB7Ci0JCQl2b2lkICpndWFyZF9wID0gaHBpX2VudGl0eV9wdHJfdG9fbmV4dChlbnRpdHkpOwotCQkJc3RydWN0IGhwaV9lbnRpdHkgKm5leHQgPSBOVUxMOwotCQkJdm9pZCAqY29udGVudHMgPSBlbnRpdHktPnZhbHVlOwotCi0JCQkqaXRlbV9jb3VudCA9IDA7Ci0JCQl3aGlsZSAoY29udGVudHMgPCBndWFyZF9wKSB7Ci0JCQkJKCppdGVtX2NvdW50KSsrOwotCQkJCWVyciA9IGhwaV9lbnRpdHlfZ2V0X25leHQoY29udGVudHMsIDAsCi0JCQkJCWd1YXJkX3AsICZuZXh0KTsKLQkJCQlpZiAobmV4dCA9PSBOVUxMIHx8IGVycikKLQkJCQkJYnJlYWs7Ci0JCQkJY29udGVudHMgPSBuZXh0OwotCQkJfQotCQl9IGVsc2UgewotCQkJKml0ZW1fY291bnQgPSBocGlfZW50aXR5X2l0ZW1fY291bnQoZW50aXR5KTsKLQkJfQotCX0KLQlyZXR1cm4gZXJyOwotfQotCi11MTYgaHBpX2dwaW9fb3Blbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTE2IGFkYXB0ZXJfaW5kZXgsCi0JdTMyICpwaF9ncGlvLCB1MTYgKnB3X251bWJlcl9pbnB1dF9iaXRzLCB1MTYgKnB3X251bWJlcl9vdXRwdXRfYml0cykKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0dQSU8sIEhQSV9HUElPX09QRU4pOwotCWhtLmFkYXB0ZXJfaW5kZXggPSBhZGFwdGVyX2luZGV4OwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlpZiAoaHIuZXJyb3IgPT0gMCkgewotCQkqcGhfZ3BpbyA9Ci0JCQlocGlfaW5kZXhlc190b19oYW5kbGUoSFBJX09CSl9HUElPLCBhZGFwdGVyX2luZGV4LCAwKTsKLQkJaWYgKHB3X251bWJlcl9pbnB1dF9iaXRzKQotCQkJKnB3X251bWJlcl9pbnB1dF9iaXRzID0gaHIudS5sLm51bWJlcl9pbnB1dF9iaXRzOwotCQlpZiAocHdfbnVtYmVyX291dHB1dF9iaXRzKQotCQkJKnB3X251bWJlcl9vdXRwdXRfYml0cyA9IGhyLnUubC5udW1iZXJfb3V0cHV0X2JpdHM7Ci0JfSBlbHNlCi0JCSpwaF9ncGlvID0gMDsKLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfZ3Bpb19yZWFkX2JpdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfZ3BpbywKLQl1MTYgYml0X2luZGV4LCB1MTYgKnB3X2JpdF9kYXRhKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfR1BJTywgSFBJX0dQSU9fUkVBRF9CSVQpOwotCXUzMlRPSU5ERVgoaF9ncGlvLCAmaG0uYWRhcHRlcl9pbmRleCk7Ci0JaG0udS5sLmJpdF9pbmRleCA9IGJpdF9pbmRleDsKLQotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JKnB3X2JpdF9kYXRhID0gaHIudS5sLmJpdF9kYXRhWzBdOwotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9ncGlvX3JlYWRfYWxsX2JpdHMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2dwaW8sCi0JdTE2IGF3X2FsbF9iaXRfZGF0YVs0XQotCSkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0dQSU8sIEhQSV9HUElPX1JFQURfQUxMKTsKLQl1MzJUT0lOREVYKGhfZ3BpbywgJmhtLmFkYXB0ZXJfaW5kZXgpOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlpZiAoYXdfYWxsX2JpdF9kYXRhKSB7Ci0JCWF3X2FsbF9iaXRfZGF0YVswXSA9IGhyLnUubC5iaXRfZGF0YVswXTsKLQkJYXdfYWxsX2JpdF9kYXRhWzFdID0gaHIudS5sLmJpdF9kYXRhWzFdOwotCQlhd19hbGxfYml0X2RhdGFbMl0gPSBoci51LmwuYml0X2RhdGFbMl07Ci0JCWF3X2FsbF9iaXRfZGF0YVszXSA9IGhyLnUubC5iaXRfZGF0YVszXTsKLQl9Ci0JcmV0dXJuIGhyLmVycm9yOwotfQotCi11MTYgaHBpX2dwaW9fd3JpdGVfYml0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9ncGlvLAotCXUxNiBiaXRfaW5kZXgsIHUxNiBiaXRfZGF0YSkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0dQSU8sIEhQSV9HUElPX1dSSVRFX0JJVCk7Ci0JdTMyVE9JTkRFWChoX2dwaW8sICZobS5hZGFwdGVyX2luZGV4KTsKLQlobS51LmwuYml0X2luZGV4ID0gYml0X2luZGV4OwotCWhtLnUubC5iaXRfZGF0YSA9IGJpdF9kYXRhOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfZ3Bpb193cml0ZV9zdGF0dXMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2dwaW8sCi0JdTE2IGF3X2FsbF9iaXRfZGF0YVs0XQotCSkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0dQSU8sCi0JCUhQSV9HUElPX1dSSVRFX1NUQVRVUyk7Ci0JdTMyVE9JTkRFWChoX2dwaW8sICZobS5hZGFwdGVyX2luZGV4KTsKLQotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JaWYgKGF3X2FsbF9iaXRfZGF0YSkgewotCQlhd19hbGxfYml0X2RhdGFbMF0gPSBoci51LmwuYml0X2RhdGFbMF07Ci0JCWF3X2FsbF9iaXRfZGF0YVsxXSA9IGhyLnUubC5iaXRfZGF0YVsxXTsKLQkJYXdfYWxsX2JpdF9kYXRhWzJdID0gaHIudS5sLmJpdF9kYXRhWzJdOwotCQlhd19hbGxfYml0X2RhdGFbM10gPSBoci51LmwuYml0X2RhdGFbM107Ci0JfQotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9hc3luY19ldmVudF9vcGVuKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUxNiBhZGFwdGVyX2luZGV4LCB1MzIgKnBoX2FzeW5jKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQVNZTkNFVkVOVCwKLQkJSFBJX0FTWU5DRVZFTlRfT1BFTik7Ci0JaG0uYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXJfaW5kZXg7Ci0KLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQotCWlmIChoci5lcnJvciA9PSAwKQotCi0JCSpwaF9hc3luYyA9Ci0JCQlocGlfaW5kZXhlc190b19oYW5kbGUoSFBJX09CSl9BU1lOQ0VWRU5ULAotCQkJYWRhcHRlcl9pbmRleCwgMCk7Ci0JZWxzZQotCQkqcGhfYXN5bmMgPSAwOwotCXJldHVybiBoci5lcnJvcjsKLQotfQotCi11MTYgaHBpX2FzeW5jX2V2ZW50X2Nsb3NlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9hc3luYykKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0FTWU5DRVZFTlQsCi0JCUhQSV9BU1lOQ0VWRU5UX09QRU4pOwotCXUzMlRPSU5ERVgoaF9hc3luYywgJmhtLmFkYXB0ZXJfaW5kZXgpOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfYXN5bmNfZXZlbnRfd2FpdChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfYXN5bmMsCi0JdTE2IG1heGltdW1fZXZlbnRzLCBzdHJ1Y3QgaHBpX2FzeW5jX2V2ZW50ICpwX2V2ZW50cywKLQl1MTYgKnB3X251bWJlcl9yZXR1cm5lZCkKLXsKLQotCXJldHVybiAwOwotfQotCi11MTYgaHBpX2FzeW5jX2V2ZW50X2dldF9jb3VudChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9hc3luYywgdTE2ICpwd19jb3VudCkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0FTWU5DRVZFTlQsCi0JCUhQSV9BU1lOQ0VWRU5UX0dFVENPVU5UKTsKLQl1MzJUT0lOREVYKGhfYXN5bmMsICZobS5hZGFwdGVyX2luZGV4KTsKLQotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JaWYgKGhyLmVycm9yID09IDApCi0JCWlmIChwd19jb3VudCkKLQkJCSpwd19jb3VudCA9IGhyLnUuYXMudS5jb3VudC5jb3VudDsKLQotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9hc3luY19ldmVudF9nZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2FzeW5jLAotCXUxNiBtYXhpbXVtX2V2ZW50cywgc3RydWN0IGhwaV9hc3luY19ldmVudCAqcF9ldmVudHMsCi0JdTE2ICpwd19udW1iZXJfcmV0dXJuZWQpCi17Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9BU1lOQ0VWRU5ULAotCQlIUElfQVNZTkNFVkVOVF9HRVQpOwotCXUzMlRPSU5ERVgoaF9hc3luYywgJmhtLmFkYXB0ZXJfaW5kZXgpOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0JaWYgKCFoci5lcnJvcikgewotCQltZW1jcHkocF9ldmVudHMsICZoci51LmFzLnUuZXZlbnQsCi0JCQlzaXplb2Yoc3RydWN0IGhwaV9hc3luY19ldmVudCkpOwotCQkqcHdfbnVtYmVyX3JldHVybmVkID0gMTsKLQl9Ci0KLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfbnZfbWVtb3J5X29wZW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUxNiBhZGFwdGVyX2luZGV4LAotCXUzMiAqcGhfbnZfbWVtb3J5LCB1MTYgKnB3X3NpemVfaW5fYnl0ZXMpCi17Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9OVk1FTU9SWSwKLQkJSFBJX05WTUVNT1JZX09QRU4pOwotCWhtLmFkYXB0ZXJfaW5kZXggPSBhZGFwdGVyX2luZGV4OwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlpZiAoaHIuZXJyb3IgPT0gMCkgewotCQkqcGhfbnZfbWVtb3J5ID0KLQkJCWhwaV9pbmRleGVzX3RvX2hhbmRsZShIUElfT0JKX05WTUVNT1JZLCBhZGFwdGVyX2luZGV4LAotCQkJMCk7Ci0JCWlmIChwd19zaXplX2luX2J5dGVzKQotCQkJKnB3X3NpemVfaW5fYnl0ZXMgPSBoci51Lm4uc2l6ZV9pbl9ieXRlczsKLQl9IGVsc2UKLQkJKnBoX252X21lbW9yeSA9IDA7Ci0JcmV0dXJuIGhyLmVycm9yOwotfQotCi11MTYgaHBpX252X21lbW9yeV9yZWFkX2J5dGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfbnZfbWVtb3J5LCB1MTYgaW5kZXgsIHUxNiAqcHdfZGF0YSkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX05WTUVNT1JZLAotCQlIUElfTlZNRU1PUllfUkVBRF9CWVRFKTsKLQl1MzJUT0lOREVYKGhfbnZfbWVtb3J5LCAmaG0uYWRhcHRlcl9pbmRleCk7Ci0JaG0udS5uLmFkZHJlc3MgPSBpbmRleDsKLQotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JKnB3X2RhdGEgPSBoci51Lm4uZGF0YTsKLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfbnZfbWVtb3J5X3dyaXRlX2J5dGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCi0JdTMyIGhfbnZfbWVtb3J5LCB1MTYgaW5kZXgsIHUxNiBkYXRhKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfTlZNRU1PUlksCi0JCUhQSV9OVk1FTU9SWV9XUklURV9CWVRFKTsKLQl1MzJUT0lOREVYKGhfbnZfbWVtb3J5LCAmaG0uYWRhcHRlcl9pbmRleCk7Ci0JaG0udS5uLmFkZHJlc3MgPSBpbmRleDsKLQlobS51Lm4uZGF0YSA9IGRhdGE7Ci0KLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9wcm9maWxlX29wZW5fYWxsKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCXUxNiBhZGFwdGVyX2luZGV4LCB1MTYgcHJvZmlsZV9pbmRleCwgdTMyICpwaF9wcm9maWxlLAotCXUxNiAqcHdfbWF4X3Byb2ZpbGVzKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfUFJPRklMRSwKLQkJSFBJX1BST0ZJTEVfT1BFTl9BTEwpOwotCWhtLmFkYXB0ZXJfaW5kZXggPSBhZGFwdGVyX2luZGV4OwotCWhtLm9ial9pbmRleCA9IHByb2ZpbGVfaW5kZXg7Ci0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQkqcHdfbWF4X3Byb2ZpbGVzID0gaHIudS5wLnUuby5tYXhfcHJvZmlsZXM7Ci0JaWYgKGhyLmVycm9yID09IDApCi0JCSpwaF9wcm9maWxlID0KLQkJCWhwaV9pbmRleGVzX3RvX2hhbmRsZShIUElfT0JKX1BST0ZJTEUsIGFkYXB0ZXJfaW5kZXgsCi0JCQlwcm9maWxlX2luZGV4KTsKLQllbHNlCi0JCSpwaF9wcm9maWxlID0gMDsKLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfcHJvZmlsZV9nZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX3Byb2ZpbGUsCi0JdTE2IGJpbl9pbmRleCwgdTE2ICpwd19zZWNvbmRzLCB1MzIgKnBtaWNyb19zZWNvbmRzLCB1MzIgKnBjYWxsX2NvdW50LAotCXUzMiAqcG1heF9taWNyb19zZWNvbmRzLCB1MzIgKnBtaW5fbWljcm9fc2Vjb25kcykKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX1BST0ZJTEUsIEhQSV9QUk9GSUxFX0dFVCk7Ci0JdTMyVE9JTkRFWEVTKGhfcHJvZmlsZSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwotCWhtLnUucC5iaW5faW5kZXggPSBiaW5faW5kZXg7Ci0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0JaWYgKHB3X3NlY29uZHMpCi0JCSpwd19zZWNvbmRzID0gaHIudS5wLnUudC5zZWNvbmRzOwotCWlmIChwbWljcm9fc2Vjb25kcykKLQkJKnBtaWNyb19zZWNvbmRzID0gaHIudS5wLnUudC5taWNyb19zZWNvbmRzOwotCWlmIChwY2FsbF9jb3VudCkKLQkJKnBjYWxsX2NvdW50ID0gaHIudS5wLnUudC5jYWxsX2NvdW50OwotCWlmIChwbWF4X21pY3JvX3NlY29uZHMpCi0JCSpwbWF4X21pY3JvX3NlY29uZHMgPSBoci51LnAudS50Lm1heF9taWNyb19zZWNvbmRzOwotCWlmIChwbWluX21pY3JvX3NlY29uZHMpCi0JCSpwbWluX21pY3JvX3NlY29uZHMgPSBoci51LnAudS50Lm1pbl9taWNyb19zZWNvbmRzOwotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9wcm9maWxlX2dldF91dGlsaXphdGlvbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKLQl1MzIgaF9wcm9maWxlLCB1MzIgKnB1dGlsaXphdGlvbikKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX1BST0ZJTEUsCi0JCUhQSV9QUk9GSUxFX0dFVF9VVElMSVpBVElPTik7Ci0JdTMyVE9JTkRFWEVTKGhfcHJvZmlsZSwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCWlmIChoci5lcnJvcikgewotCQlpZiAocHV0aWxpemF0aW9uKQotCQkJKnB1dGlsaXphdGlvbiA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKHB1dGlsaXphdGlvbikKLQkJCSpwdXRpbGl6YXRpb24gPSBoci51LnAudS50LmNhbGxfY291bnQ7Ci0JfQotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9wcm9maWxlX2dldF9uYW1lKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9wcm9maWxlLAotCXUxNiBiaW5faW5kZXgsIGNoYXIgKnN6X25hbWUsIHUxNiBuYW1lX2xlbmd0aCkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX1BST0ZJTEUsCi0JCUhQSV9QUk9GSUxFX0dFVF9OQU1FKTsKLQl1MzJUT0lOREVYRVMoaF9wcm9maWxlLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7Ci0JaG0udS5wLmJpbl9pbmRleCA9IGJpbl9pbmRleDsKLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQlpZiAoaHIuZXJyb3IpIHsKLQkJaWYgKHN6X25hbWUpCi0JCQlzdHJjcHkoc3pfbmFtZSwgIj8/Iik7Ci0JfSBlbHNlIHsKLQkJaWYgKHN6X25hbWUpCi0JCQltZW1jcHkoc3pfbmFtZSwgKGNoYXIgKiloci51LnAudS5uLnN6X25hbWUsCi0JCQkJbmFtZV9sZW5ndGgpOwotCX0KLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfcHJvZmlsZV9zdGFydF9hbGwoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX3Byb2ZpbGUpCi17Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9QUk9GSUxFLAotCQlIUElfUFJPRklMRV9TVEFSVF9BTEwpOwotCXUzMlRPSU5ERVhFUyhoX3Byb2ZpbGUsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV9wcm9maWxlX3N0b3BfYWxsKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9wcm9maWxlKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfUFJPRklMRSwKLQkJSFBJX1BST0ZJTEVfU1RPUF9BTEwpOwotCXUzMlRPSU5ERVhFUyhoX3Byb2ZpbGUsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQotCXJldHVybiBoci5lcnJvcjsKLX0KLQotdTE2IGhwaV93YXRjaGRvZ19vcGVuKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MTYgYWRhcHRlcl9pbmRleCwKLQl1MzIgKnBoX3dhdGNoZG9nKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfV0FUQ0hET0csCi0JCUhQSV9XQVRDSERPR19PUEVOKTsKLQlobS5hZGFwdGVyX2luZGV4ID0gYWRhcHRlcl9pbmRleDsKLQotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JaWYgKGhyLmVycm9yID09IDApCi0JCSpwaF93YXRjaGRvZyA9Ci0JCQlocGlfaW5kZXhlc190b19oYW5kbGUoSFBJX09CSl9XQVRDSERPRywgYWRhcHRlcl9pbmRleCwKLQkJCTApOwotCWVsc2UKLQkJKnBoX3dhdGNoZG9nID0gMDsKLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfd2F0Y2hkb2dfc2V0X3RpbWUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX3dhdGNoZG9nLAotCXUzMiB0aW1lX21pbGxpc2VjKQotewotCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKLQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfV0FUQ0hET0csCi0JCUhQSV9XQVRDSERPR19TRVRfVElNRSk7Ci0JdTMyVE9JTkRFWChoX3dhdGNoZG9nLCAmaG0uYWRhcHRlcl9pbmRleCk7Ci0JaG0udS53LnRpbWVfbXMgPSB0aW1lX21pbGxpc2VjOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KLXUxNiBocGlfd2F0Y2hkb2dfcGluZyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfd2F0Y2hkb2cpCi17Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9XQVRDSERPRywKLQkJSFBJX1dBVENIRE9HX1BJTkcpOwotCXUzMlRPSU5ERVgoaF93YXRjaGRvZywgJmhtLmFkYXB0ZXJfaW5kZXgpOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlyZXR1cm4gaHIuZXJyb3I7Ci19CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ2luaXQuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpbXNnaW5pdC5jCmluZGV4IDhlMWQwOTkuLjYyODM3NmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpbXNnaW5pdC5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpbXNnaW5pdC5jCkBAIC0zMiwyMSArMzIsNiBAQAogc3RhdGljIHUxNiBnd1NTWDJfYnlwYXNzOwogCiAvKiogXGludGVybmFsCi0gICogVXNlZCBieSBBU0lPIGRyaXZlciB0byBkaXNhYmxlIFNTWDIgZm9yIGEgc2luZ2xlIHByb2Nlc3MKLSAgKiBccGFyYW0gcGhTdWJTeXMgUG9pbnRlciB0byBIUEkgc3Vic3lzdGVtIGhhbmRsZS4KLSAgKiBccGFyYW0gd0J5cGFzcyBOZXcgYnlwYXNzIHNldHRpbmcgMCA9IG9mZiwgbm9uemVybyA9IG9uCi0gICogXHJldHVybiBQcmV2aW91cyBieXBhc3Mgc2V0dGluZy4KLSAgKi8KLXUxNiBocGlfc3Vic3lzX3NzeDJfYnlwYXNzKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MTYgYnlwYXNzKQotewotCXUxNiBvbGRfdmFsdWUgPSBnd1NTWDJfYnlwYXNzOwotCi0JZ3dTU1gyX2J5cGFzcyA9IGJ5cGFzczsKLQotCXJldHVybiBvbGRfdmFsdWU7Ci19Ci0KLS8qKiBcaW50ZXJuYWwKICAgKiBpbml0aWFsaXplIHRoZSBIUEkgbWVzc2FnZSBzdHJ1Y3R1cmUKICAgKi8KIHN0YXRpYyB2b2lkIGhwaV9pbml0X21lc3NhZ2Uoc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHUxNiBvYmplY3QsCkBAIC02NSw3ICs1MCw4IEBACiAJcGhtLT5vYmplY3QgPSBvYmplY3Q7CiAJcGhtLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCXBobS0+dmVyc2lvbiA9IDA7Ci0JLyogRXhwZWN0IGFkYXB0ZXIgaW5kZXggdG8gYmUgc2V0IGJ5IGNhbGxlciAqLworCXBobS0+YWRhcHRlcl9pbmRleCA9IEhQSV9BREFQVEVSX0lOREVYX0lOVkFMSUQ7CisJLyogRXhwZWN0IGFjdHVhbCBhZGFwdGVyIGluZGV4IHRvIGJlIHNldCBieSBjYWxsZXIgKi8KIH0KIAogLyoqIFxpbnRlcm5hbApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGltc2dpbml0LmggYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ2luaXQuaAppbmRleCA4NjRhZDAyLi5iZmQzMzBkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ2luaXQuaAorKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ2luaXQuaApAQCAtMjEsMTEgKzIxLDE1IEBACiAgKEMpIENvcHlyaWdodCBBdWRpb1NjaWVuY2UgSW5jLiAyMDA3CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogSW5pdGlhbGlzZSByZXNwb25zZSBoZWFkZXJzLCBvciBtc2cvcmVzcG9uc2UgcGFpcnMuCi1Ob3RlIHRoYXQgaXQgaXMgdmFsaWQgdG8ganVzdCBpbml0IGEgcmVzcG9uc2UgZS5nLiB3aGVuIGEgbG93ZXIgbGV2ZWwgaXMgcHJlcGFyaW5nCi1hIHJlc3BvbnNlIHRvIGEgbWVzc2FnZS4KLUhvd2V2ZXIsIHdoZW4gc2VuZGluZyBhIG1lc3NhZ2UsIGEgbWF0Y2hpbmcgcmVzcG9uc2UgYnVmZmVyIGFsd2F5cyBtdXN0IGJlIHByZXBhcmVkCitOb3RlIHRoYXQgaXQgaXMgdmFsaWQgdG8ganVzdCBpbml0IGEgcmVzcG9uc2UgZS5nLiB3aGVuIGEgbG93ZXIgbGV2ZWwgaXMKK3ByZXBhcmluZyBhIHJlc3BvbnNlIHRvIGEgbWVzc2FnZS4KK0hvd2V2ZXIsIHdoZW4gc2VuZGluZyBhIG1lc3NhZ2UsIGEgbWF0Y2hpbmcgcmVzcG9uc2UgYnVmZmVyIG11c3QgYWx3YXlzIGJlCitwcmVwYXJlZC4KICovCiAKKyNpZm5kZWYgX0hQSU1TR0lOSVRfSF8KKyNkZWZpbmUgX0hQSU1TR0lOSVRfSF8KKwogdm9pZCBocGlfaW5pdF9yZXNwb25zZShzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIsIHUxNiBvYmplY3QsIHUxNiBmdW5jdGlvbiwKIAl1MTYgZXJyb3IpOwogCkBAIC0zOCwzICs0Miw1IEBACiB2b2lkIGhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2VWMShzdHJ1Y3QgaHBpX21lc3NhZ2VfaGVhZGVyICpwaG0sIHUxNiBtc2dfc2l6ZSwKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlX2hlYWRlciAqcGhyLCB1MTYgcmVzX3NpemUsIHUxNiBvYmplY3QsCiAJdTE2IGZ1bmN0aW9uKTsKKworI2VuZGlmCQkJCS8qIF9IUElNU0dJTklUX0hfICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCmluZGV4IGYwMWFiOTYuLmJjYmRmMzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIFNPVVJDRUZJTEVfTkFNRSAiaHBpbXNneC5jIgogI2luY2x1ZGUgImhwaV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImhwaW1zZ2luaXQuaCIKKyNpbmNsdWRlICJocGljbW4uaCIKICNpbmNsdWRlICJocGltc2d4LmgiCiAjaW5jbHVkZSAiaHBpZGVidWcuaCIKIApAQCAtNDIsMjIgKzQzLDI0IEBACiAKIAlmb3IgKGkgPSAwOyBhc2locGlfcGNpX3RibFtpXS52ZW5kb3IgIT0gMDsgaSsrKSB7CiAJCWlmIChhc2locGlfcGNpX3RibFtpXS52ZW5kb3IgIT0gUENJX0FOWV9JRAotCQkJJiYgYXNpaHBpX3BjaV90YmxbaV0udmVuZG9yICE9IHBjaV9pbmZvLT52ZW5kb3JfaWQpCisJCQkmJiBhc2locGlfcGNpX3RibFtpXS52ZW5kb3IgIT0KKwkJCXBjaV9pbmZvLT5wY2lfZGV2LT52ZW5kb3IpCiAJCQljb250aW51ZTsKIAkJaWYgKGFzaWhwaV9wY2lfdGJsW2ldLmRldmljZSAhPSBQQ0lfQU5ZX0lECi0JCQkmJiBhc2locGlfcGNpX3RibFtpXS5kZXZpY2UgIT0gcGNpX2luZm8tPmRldmljZV9pZCkKKwkJCSYmIGFzaWhwaV9wY2lfdGJsW2ldLmRldmljZSAhPQorCQkJcGNpX2luZm8tPnBjaV9kZXYtPmRldmljZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXNpaHBpX3BjaV90YmxbaV0uc3VidmVuZG9yICE9IFBDSV9BTllfSUQKIAkJCSYmIGFzaWhwaV9wY2lfdGJsW2ldLnN1YnZlbmRvciAhPQotCQkJcGNpX2luZm8tPnN1YnN5c192ZW5kb3JfaWQpCisJCQlwY2lfaW5mby0+cGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvcikKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXNpaHBpX3BjaV90YmxbaV0uc3ViZGV2aWNlICE9IFBDSV9BTllfSUQKIAkJCSYmIGFzaWhwaV9wY2lfdGJsW2ldLnN1YmRldmljZSAhPQotCQkJcGNpX2luZm8tPnN1YnN5c19kZXZpY2VfaWQpCisJCQlwY2lfaW5mby0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSkKIAkJCWNvbnRpbnVlOwogCi0JCUhQSV9ERUJVR19MT0coREVCVUcsICIgJXgsJWx1XG4iLCBpLAotCQkJYXNpaHBpX3BjaV90YmxbaV0uZHJpdmVyX2RhdGEpOworCQkvKiBIUElfREVCVUdfTE9HKERFQlVHLCAiICV4LCVseFxuIiwgaSwKKwkJICAgYXNpaHBpX3BjaV90YmxbaV0uZHJpdmVyX2RhdGEpOyAqLwogCQlyZXR1cm4gKGhwaV9oYW5kbGVyX2Z1bmMgKikgYXNpaHBpX3BjaV90YmxbaV0uZHJpdmVyX2RhdGE7CiAJfQogCkBAIC02NywyMSArNzAsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBod19lbnRyeV9wb2ludChzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7Ci0KLQlocGlfaGFuZGxlcl9mdW5jICplcDsKLQotCWlmIChwaG0tPmFkYXB0ZXJfaW5kZXggPCBIUElfTUFYX0FEQVBURVJTKSB7Ci0JCWVwID0gKGhwaV9oYW5kbGVyX2Z1bmMgKikgaHBpX2VudHJ5X3BvaW50c1twaG0tPgotCQkJYWRhcHRlcl9pbmRleF07Ci0JCWlmIChlcCkgewotCQkJSFBJX0RFQlVHX01FU1NBR0UoREVCVUcsIHBobSk7Ci0JCQllcChwaG0sIHBocik7Ci0JCQlIUElfREVCVUdfUkVTUE9OU0UocGhyKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlocGlfaW5pdF9yZXNwb25zZShwaHIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uLAotCQlIUElfRVJST1JfUFJPQ0VTU0lOR19NRVNTQUdFKTsKKwlpZiAoKHBobS0+YWRhcHRlcl9pbmRleCA8IEhQSV9NQVhfQURBUFRFUlMpCisJCSYmIGhwaV9lbnRyeV9wb2ludHNbcGhtLT5hZGFwdGVyX2luZGV4XSkKKwkJaHBpX2VudHJ5X3BvaW50c1twaG0tPmFkYXB0ZXJfaW5kZXhdIChwaG0sIHBocik7CisJZWxzZQorCQlocGlfaW5pdF9yZXNwb25zZShwaHIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uLAorCQkJSFBJX0VSUk9SX1BST0NFU1NJTkdfTUVTU0FHRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkYXB0ZXJfb3BlbihzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKTsKQEAgLTEwMCw2ICs5NCw3IEBACiAJdm9pZCAqaF9vd25lcik7CiAKIHN0YXRpYyB2b2lkIEhQSU1TR1hfX3Jlc2V0KHUxNiBhZGFwdGVyX2luZGV4KTsKKwogc3RhdGljIHUxNiBIUElNU0dYX19pbml0KHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpOwogc3RhdGljIHZvaWQgSFBJTVNHWF9fY2xlYW51cCh1MTYgYWRhcHRlcl9pbmRleCwgdm9pZCAqaF9vd25lcik7CiAKQEAgLTE1Myw4ICsxNDgsNiBAQAogCiBzdGF0aWMgc3RydWN0IGhwaV9taXhlcl9yZXNwb25zZSByRVNQX0hQSV9NSVhFUl9PUEVOW0hQSV9NQVhfQURBUFRFUlNdOwogCi1zdGF0aWMgc3RydWN0IGhwaV9zdWJzeXNfcmVzcG9uc2UgZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTOwotCiBzdGF0aWMgc3RydWN0IGFkYXB0ZXJfaW5mbyBhREFQVEVSX0lORk9bSFBJX01BWF9BREFQVEVSU107CiAKIC8qIHVzZSB0aGVzZSB0byBrZWVwIHRyYWNrIG9mIG9wZW5zIGZyb20gdXNlciBtb2RlIGFwcHMvRExMcyAqLwpAQCAtMTY3LDYgKzE2MCwxMSBAQAogc3RhdGljIHZvaWQgc3Vic3lzX21lc3NhZ2Uoc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBociwKIAl2b2lkICpoX293bmVyKQogeworCWlmIChwaG0tPmFkYXB0ZXJfaW5kZXggIT0gSFBJX0FEQVBURVJfSU5ERVhfSU5WQUxJRCkKKwkJSFBJX0RFQlVHX0xPRyhXQVJOSU5HLAorCQkJInN1c3BpY2lvdXMgYWRhcHRlciBpbmRleCAlZCBpbiBzdWJzeXMgbWVzc2FnZSAweCV4LlxuIiwKKwkJCXBobS0+YWRhcHRlcl9pbmRleCwgcGhtLT5mdW5jdGlvbik7CisKIAlzd2l0Y2ggKHBobS0+ZnVuY3Rpb24pIHsKIAljYXNlIEhQSV9TVUJTWVNfR0VUX1ZFUlNJT046CiAJCWhwaV9pbml0X3Jlc3BvbnNlKHBociwgSFBJX09CSl9TVUJTWVNURU0sCkBAIC0yMDQsODUgKzIwMiwzNyBAQAogCQkJSFBJX1NVQlNZU19EUklWRVJfVU5MT0FELCAwKTsKIAkJcmV0dXJuOwogCi0JY2FzZSBIUElfU1VCU1lTX0dFVF9JTkZPOgorCWNhc2UgSFBJX1NVQlNZU19HRVRfTlVNX0FEQVBURVJTOgorCWNhc2UgSFBJX1NVQlNZU19HRVRfQURBUFRFUjoKIAkJSFBJX0NPTU1PTihwaG0sIHBocik7CiAJCWJyZWFrOwogCi0JY2FzZSBIUElfU1VCU1lTX0ZJTkRfQURBUFRFUlM6Ci0JCW1lbWNweShwaHIsICZnUkVTUF9IUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMsCi0JCQlzaXplb2YoZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTKSk7Ci0JCWJyZWFrOwotCWNhc2UgSFBJX1NVQlNZU19HRVRfTlVNX0FEQVBURVJTOgotCQltZW1jcHkocGhyLCAmZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLAotCQkJc2l6ZW9mKGdSRVNQX0hQSV9TVUJTWVNfRklORF9BREFQVEVSUykpOwotCQlwaHItPmZ1bmN0aW9uID0gSFBJX1NVQlNZU19HRVRfTlVNX0FEQVBURVJTOwotCQlicmVhazsKLQljYXNlIEhQSV9TVUJTWVNfR0VUX0FEQVBURVI6Ci0JCXsKLQkJCWludCBjb3VudCA9IHBobS0+YWRhcHRlcl9pbmRleDsKLQkJCWludCBpbmRleCA9IDA7Ci0JCQlocGlfaW5pdF9yZXNwb25zZShwaHIsIEhQSV9PQkpfU1VCU1lTVEVNLAotCQkJCUhQSV9TVUJTWVNfR0VUX0FEQVBURVIsIDApOwotCi0JCQkvKiBUaGlzIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgd2Ugd2FudCB0bwotCQkJICogInNraXAiIDAncyBpbiB0aGUgYWRhcHRlciBsaXN0LgotCQkJICogRmlyc3QsIG1ha2Ugc3VyZSB3ZSBhcmUgcG9pbnRpbmcgdG8gYQotCQkJICogbm9uLXplcm8gYWRhcHRlciB0eXBlLgotCQkJICovCi0JCQl3aGlsZSAoZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLgotCQkJCXMuYXdfYWRhcHRlcl9saXN0W2luZGV4XSA9PSAwKSB7Ci0JCQkJaW5kZXgrKzsKLQkJCQlpZiAoaW5kZXggPj0gSFBJX01BWF9BREFQVEVSUykKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQl3aGlsZSAoY291bnQpIHsKLQkJCQkvKiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGFkYXB0ZXIgKi8KLQkJCQlpbmRleCsrOwotCQkJCWlmIChpbmRleCA+PSBIUElfTUFYX0FEQVBURVJTKQotCQkJCQlicmVhazsKLQkJCQl3aGlsZSAoZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLgotCQkJCQlzLmF3X2FkYXB0ZXJfbGlzdFtpbmRleF0gPT0gMCkgewotCQkJCQlpbmRleCsrOwotCQkJCQlpZiAoaW5kZXggPj0gSFBJX01BWF9BREFQVEVSUykKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQkJCQljb3VudC0tOwotCQkJfQotCi0JCQlpZiAoaW5kZXggPCBIUElfTUFYX0FEQVBURVJTKSB7Ci0JCQkJcGhyLT51LnMuYWRhcHRlcl9pbmRleCA9ICh1MTYpaW5kZXg7Ci0JCQkJcGhyLT51LnMuYXdfYWRhcHRlcl9saXN0WzBdID0KLQkJCQkJZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLgotCQkJCQlzLmF3X2FkYXB0ZXJfbGlzdFtpbmRleF07Ci0JCQl9IGVsc2UgewotCQkJCXBoci0+dS5zLmFkYXB0ZXJfaW5kZXggPSAwOwotCQkJCXBoci0+dS5zLmF3X2FkYXB0ZXJfbGlzdFswXSA9IDA7Ci0JCQkJcGhyLT5lcnJvciA9IEhQSV9FUlJPUl9CQURfQURBUFRFUl9OVU1CRVI7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQogCWNhc2UgSFBJX1NVQlNZU19DUkVBVEVfQURBUFRFUjoKIAkJSFBJTVNHWF9faW5pdChwaG0sIHBocik7CiAJCWJyZWFrOworCiAJY2FzZSBIUElfU1VCU1lTX0RFTEVURV9BREFQVEVSOgotCQlIUElNU0dYX19jbGVhbnVwKHBobS0+YWRhcHRlcl9pbmRleCwgaF9vd25lcik7CisJCUhQSU1TR1hfX2NsZWFudXAocGhtLT5vYmpfaW5kZXgsIGhfb3duZXIpOwogCQl7CiAJCQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJCQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCQkJLyogY2FsbCB0byBIUElfQURBUFRFUl9DTE9TRSAqLwogCQkJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9BREFQVEVSLAogCQkJCUhQSV9BREFQVEVSX0NMT1NFKTsKLQkJCWhtLmFkYXB0ZXJfaW5kZXggPSBwaG0tPmFkYXB0ZXJfaW5kZXg7CisJCQlobS5hZGFwdGVyX2luZGV4ID0gcGhtLT5vYmpfaW5kZXg7CiAJCQlod19lbnRyeV9wb2ludCgmaG0sICZocik7CiAJCX0KLQkJaHdfZW50cnlfcG9pbnQocGhtLCBwaHIpOwotCQlnUkVTUF9IUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMucy4KLQkJCWF3X2FkYXB0ZXJfbGlzdFtwaG0tPmFkYXB0ZXJfaW5kZXhdCi0JCQk9IDA7Ci0JCWhwaV9lbnRyeV9wb2ludHNbcGhtLT5hZGFwdGVyX2luZGV4XSA9IE5VTEw7CisJCWlmICgocGhtLT5vYmpfaW5kZXggPCBIUElfTUFYX0FEQVBURVJTKQorCQkJJiYgaHBpX2VudHJ5X3BvaW50c1twaG0tPm9ial9pbmRleF0pIHsKKwkJCWhwaV9lbnRyeV9wb2ludHNbcGhtLT5vYmpfaW5kZXhdIChwaG0sIHBocik7CisJCQlocGlfZW50cnlfcG9pbnRzW3BobS0+b2JqX2luZGV4XSA9IE5VTEw7CisJCX0gZWxzZQorCQkJcGhyLT5lcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX09CSl9JTkRFWDsKKwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlod19lbnRyeV9wb2ludChwaG0sIHBocik7CisJCS8qIE11c3QgZXhwbGljaXRseSBoYW5kbGUgZXZlcnkgc3Vic3lzIG1lc3NhZ2UgaW4gdGhpcyBzd2l0Y2ggKi8KKwkJaHBpX2luaXRfcmVzcG9uc2UocGhyLCBIUElfT0JKX1NVQlNZU1RFTSwgcGhtLT5mdW5jdGlvbiwKKwkJCUhQSV9FUlJPUl9JTlZBTElEX0ZVTkMpOwogCQlicmVhazsKIAl9CiB9CkBAIC00MDksMzMgKzM1OSw3IEBACiAJCWJyZWFrOwogCX0KIAlIUElfREVCVUdfUkVTUE9OU0UocGhyKTsKLSNpZiAxCi0JaWYgKHBoci0+ZXJyb3IgPj0gSFBJX0VSUk9SX0JBQ0tFTkRfQkFTRSkgewotCQl2b2lkICplcCA9IE5VTEw7Ci0JCWNoYXIgKmVwX25hbWU7CiAKLQkJSFBJX0RFQlVHX01FU1NBR0UoRVJST1IsIHBobSk7Ci0KLQkJaWYgKHBobS0+YWRhcHRlcl9pbmRleCA8IEhQSV9NQVhfQURBUFRFUlMpCi0JCQllcCA9IGhwaV9lbnRyeV9wb2ludHNbcGhtLT5hZGFwdGVyX2luZGV4XTsKLQotCQkvKiBEb24ndCBuZWVkIHRoaXM/IEhhdmUgYWRhcHRlciBpbmRleCBpbiBkZWJ1ZyBpbmZvCi0JCSAgIEtub3cgYXQgZHJpdmVyIGxvYWQgdGltZSBpbmRleC0+YmFja2VuZCBtYXBwaW5nICovCi0JCWlmIChlcCA9PSBIUElfNjAwMCkKLQkJCWVwX25hbWUgPSAiSFBJXzYwMDAiOwotCQllbHNlIGlmIChlcCA9PSBIUElfNjIwNSkKLQkJCWVwX25hbWUgPSAiSFBJXzYyMDUiOwotCQllbHNlCi0JCQllcF9uYW1lID0gInVua25vd24iOwotCi0JCUhQSV9ERUJVR19MT0coRVJST1IsICJIUEkgJXMgcmVzcG9uc2UgLSBlcnJvciMgJWRcbiIsIGVwX25hbWUsCi0JCQlwaHItPmVycm9yKTsKLQotCQlpZiAoaHBpX2RlYnVnX2xldmVsID49IEhQSV9ERUJVR19MRVZFTF9WRVJCT1NFKQotCQkJaHBpX2RlYnVnX2RhdGEoKHUxNiAqKXBobSwKLQkJCQlzaXplb2YoKnBobSkgLyBzaXplb2YodTE2KSk7Ci0JfQotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGFkYXB0ZXJfb3BlbihzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQpAQCAtNDg0LDcgKzQwOCw3IEBACiAJZWxzZSB7CiAJCWluc3RyZWFtX3VzZXJfb3BlbltwaG0tPmFkYXB0ZXJfaW5kZXhdW3BobS0+CiAJCQlvYmpfaW5kZXhdLm9wZW5fZmxhZyA9IDE7Ci0JCWhwaW9zX21zZ3hsb2NrX3VuX2xvY2soJm1zZ3hfbG9jayk7CisJCWhwaW9zX21zZ3hsb2NrX3VubG9jaygmbXNneF9sb2NrKTsKIAogCQkvKiBpc3N1ZSBhIHJlc2V0ICovCiAJCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKQEAgLTUwOSw3ICs0MzMsNyBAQAogCQkJCXNpemVvZihyRVNQX0hQSV9JU1RSRUFNX09QRU5bMF1bMF0pKTsKIAkJfQogCX0KLQlocGlvc19tc2d4bG9ja191bl9sb2NrKCZtc2d4X2xvY2spOworCWhwaW9zX21zZ3hsb2NrX3VubG9jaygmbXNneF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5zdHJlYW1fY2xvc2Uoc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBociwKQEAgLTUzMCw3ICs0NTQsNyBAQAogCQkgICBwaG0tPndBZGFwdGVySW5kZXgsIHBobS0+d09iakluZGV4LCBoT3duZXIpOyAqLwogCQlpbnN0cmVhbV91c2VyX29wZW5bcGhtLT5hZGFwdGVyX2luZGV4XVtwaG0tPgogCQkJb2JqX2luZGV4XS5oX293bmVyID0gTlVMTDsKLQkJaHBpb3NfbXNneGxvY2tfdW5fbG9jaygmbXNneF9sb2NrKTsKKwkJaHBpb3NfbXNneGxvY2tfdW5sb2NrKCZtc2d4X2xvY2spOwogCQkvKiBpc3N1ZSBhIHJlc2V0ICovCiAJCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfSVNUUkVBTSwKIAkJCUhQSV9JU1RSRUFNX1JFU0VUKTsKQEAgLTU1Niw3ICs0ODAsNyBAQAogCQkJCW9ial9pbmRleF0uaF9vd25lcik7CiAJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfT0JKX05PVF9PUEVOOwogCX0KLQlocGlvc19tc2d4bG9ja191bl9sb2NrKCZtc2d4X2xvY2spOworCWhwaW9zX21zZ3hsb2NrX3VubG9jaygmbXNneF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgb3V0c3RyZWFtX29wZW4oc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBociwKQEAgLTU4MSw3ICs1MDUsNyBAQAogCWVsc2UgewogCQlvdXRzdHJlYW1fdXNlcl9vcGVuW3BobS0+YWRhcHRlcl9pbmRleF1bcGhtLT4KIAkJCW9ial9pbmRleF0ub3Blbl9mbGFnID0gMTsKLQkJaHBpb3NfbXNneGxvY2tfdW5fbG9jaygmbXNneF9sb2NrKTsKKwkJaHBpb3NfbXNneGxvY2tfdW5sb2NrKCZtc2d4X2xvY2spOwogCiAJCS8qIGlzc3VlIGEgcmVzZXQgKi8KIAkJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9PU1RSRUFNLApAQCAtNjA2LDcgKzUzMCw3IEBACiAJCQkJc2l6ZW9mKHJFU1BfSFBJX09TVFJFQU1fT1BFTlswXVswXSkpOwogCQl9CiAJfQotCWhwaW9zX21zZ3hsb2NrX3VuX2xvY2soJm1zZ3hfbG9jayk7CisJaHBpb3NfbXNneGxvY2tfdW5sb2NrKCZtc2d4X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBvdXRzdHJlYW1fY2xvc2Uoc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBociwKQEAgLTYyOCw3ICs1NTIsNyBAQAogCQkgICBwaG0tPndBZGFwdGVySW5kZXgsIHBobS0+d09iakluZGV4LCBoT3duZXIpOyAqLwogCQlvdXRzdHJlYW1fdXNlcl9vcGVuW3BobS0+YWRhcHRlcl9pbmRleF1bcGhtLT4KIAkJCW9ial9pbmRleF0uaF9vd25lciA9IE5VTEw7Ci0JCWhwaW9zX21zZ3hsb2NrX3VuX2xvY2soJm1zZ3hfbG9jayk7CisJCWhwaW9zX21zZ3hsb2NrX3VubG9jaygmbXNneF9sb2NrKTsKIAkJLyogaXNzdWUgYSByZXNldCAqLwogCQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCQlIUElfT1NUUkVBTV9SRVNFVCk7CkBAIC02NTQsNyArNTc4LDcgQEAKIAkJCQlvYmpfaW5kZXhdLmhfb3duZXIpOwogCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX09CSl9OT1RfT1BFTjsKIAl9Ci0JaHBpb3NfbXNneGxvY2tfdW5fbG9jaygmbXNneF9sb2NrKTsKKwlocGlvc19tc2d4bG9ja191bmxvY2soJm1zZ3hfbG9jayk7CiB9CiAKIHN0YXRpYyB1MTYgYWRhcHRlcl9wcmVwYXJlKHUxNiBhZGFwdGVyKQpAQCAtNjgzLDE2ICs2MDcsOSBAQAogCWlmIChoci5lcnJvcikKIAkJcmV0dXJuIGhyLmVycm9yOwogCi0JYURBUFRFUl9JTkZPW2FkYXB0ZXJdLm51bV9vdXRzdHJlYW1zID0gaHIudS5hLm51bV9vdXRzdHJlYW1zOwotCWFEQVBURVJfSU5GT1thZGFwdGVyXS5udW1faW5zdHJlYW1zID0gaHIudS5hLm51bV9pbnN0cmVhbXM7Ci0JYURBUFRFUl9JTkZPW2FkYXB0ZXJdLnR5cGUgPSBoci51LmEuYWRhcHRlcl90eXBlOwotCi0JZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLnMuYXdfYWRhcHRlcl9saXN0W2FkYXB0ZXJdID0KLQkJaHIudS5hLmFkYXB0ZXJfdHlwZTsKLQlnUkVTUF9IUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMucy5udW1fYWRhcHRlcnMrKzsKLQlpZiAoZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLnMubnVtX2FkYXB0ZXJzID4gSFBJX01BWF9BREFQVEVSUykKLQkJZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLnMubnVtX2FkYXB0ZXJzID0KLQkJCUhQSV9NQVhfQURBUFRFUlM7CisJYURBUFRFUl9JTkZPW2FkYXB0ZXJdLm51bV9vdXRzdHJlYW1zID0gaHIudS5heC5pbmZvLm51bV9vdXRzdHJlYW1zOworCWFEQVBURVJfSU5GT1thZGFwdGVyXS5udW1faW5zdHJlYW1zID0gaHIudS5heC5pbmZvLm51bV9pbnN0cmVhbXM7CisJYURBUFRFUl9JTkZPW2FkYXB0ZXJdLnR5cGUgPSBoci51LmF4LmluZm8uYWRhcHRlcl90eXBlOwogCiAJLyogY2FsbCB0byBIUElfT1NUUkVBTV9PUEVOICovCiAJZm9yIChpID0gMDsgaSA8IGFEQVBURVJfSU5GT1thZGFwdGVyXS5udW1fb3V0c3RyZWFtczsgaSsrKSB7CkBAIC03MjcsNyArNjQ0LDcgQEAKIAltZW1jcHkoJnJFU1BfSFBJX01JWEVSX09QRU5bYWRhcHRlcl0sICZociwKIAkJc2l6ZW9mKHJFU1BfSFBJX01JWEVSX09QRU5bMF0pKTsKIAotCXJldHVybiBnUkVTUF9IUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMuaC5lcnJvcjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgSFBJTVNHWF9fcmVzZXQodTE2IGFkYXB0ZXJfaW5kZXgpCkBAIC03MzcsMTIgKzY1NCw2IEBACiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCWlmIChhZGFwdGVyX2luZGV4ID09IEhQSU1TR1hfQUxMQURBUFRFUlMpIHsKLQkJLyogcmVzZXQgYWxsIHJlc3BvbnNlcyB0byBjb250YWluIGVycm9ycyAqLwotCQlocGlfaW5pdF9yZXNwb25zZSgmaHIsIEhQSV9PQkpfU1VCU1lTVEVNLAotCQkJSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLCAwKTsKLQkJbWVtY3B5KCZnUkVTUF9IUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMsICZociwKLQkJCXNpemVvZihnUkVTUF9IUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMpKTsKLQogCQlmb3IgKGFkYXB0ZXIgPSAwOyBhZGFwdGVyIDwgSFBJX01BWF9BREFQVEVSUzsgYWRhcHRlcisrKSB7CiAKIAkJCWhwaV9pbml0X3Jlc3BvbnNlKCZociwgSFBJX09CSl9BREFQVEVSLApAQCAtNzgzLDEyICs2OTQsNiBAQAogCQkJckVTUF9IUElfSVNUUkVBTV9PUEVOW2FkYXB0ZXJfaW5kZXhdW2ldLmguZXJyb3IgPQogCQkJCUhQSV9FUlJPUl9JTlZBTElEX09CSjsKIAkJfQotCQlpZiAoZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLgotCQkJcy5hd19hZGFwdGVyX2xpc3RbYWRhcHRlcl9pbmRleF0pIHsKLQkJCWdSRVNQX0hQSV9TVUJTWVNfRklORF9BREFQVEVSUy4KLQkJCQlzLmF3X2FkYXB0ZXJfbGlzdFthZGFwdGVyX2luZGV4XSA9IDA7Ci0JCQlnUkVTUF9IUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMucy5udW1fYWRhcHRlcnMtLTsKLQkJfQogCX0KIH0KIApAQCAtODAyLDE1ICs3MDcsOSBAQAogCWhwaV9oYW5kbGVyX2Z1bmMgKmVudHJ5X3BvaW50X2Z1bmM7CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAotCWlmIChnUkVTUF9IUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMucy5udW1fYWRhcHRlcnMgPj0gSFBJX01BWF9BREFQVEVSUykKLQkJcmV0dXJuIEhQSV9FUlJPUl9CQURfQURBUFRFUl9OVU1CRVI7Ci0KIAkvKiBJbml0IHJlc3BvbnNlIGhlcmUgc28gd2UgY2FuIHBhc3MgaW4gcHJldmlvdXMgYWRhcHRlciBsaXN0ICovCiAJaHBpX2luaXRfcmVzcG9uc2UoJmhyLCBwaG0tPm9iamVjdCwgcGhtLT5mdW5jdGlvbiwKIAkJSFBJX0VSUk9SX0lOVkFMSURfT0JKKTsKLQltZW1jcHkoaHIudS5zLmF3X2FkYXB0ZXJfbGlzdCwKLQkJZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLnMuYXdfYWRhcHRlcl9saXN0LAotCQlzaXplb2YoZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLnMuYXdfYWRhcHRlcl9saXN0KSk7CiAKIAllbnRyeV9wb2ludF9mdW5jID0KIAkJaHBpX2xvb2t1cF9lbnRyeV9wb2ludF9mdW5jdGlvbihwaG0tPnUucy5yZXNvdXJjZS5yLnBjaSk7CkBAIC04NjAsNyArNzU5LDcgQEAKIAkJCQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwogCiAJCQkJSFBJX0RFQlVHX0xPRyhERUJVRywKLQkJCQkJImNsb3NlIGFkYXB0ZXIgJWQgb3N0cmVhbSAlZFxuIiwKKwkJCQkJIkNsb3NlIGFkYXB0ZXIgJWQgb3N0cmVhbSAlZFxuIiwKIAkJCQkJYWRhcHRlciwgaSk7CiAKIAkJCQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLApAQCAtODg0LDcgKzc4Myw3IEBACiAJCQkJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKIAogCQkJCUhQSV9ERUJVR19MT0coREVCVUcsCi0JCQkJCSJjbG9zZSBhZGFwdGVyICVkIGlzdHJlYW0gJWRcbiIsCisJCQkJCSJDbG9zZSBhZGFwdGVyICVkIGlzdHJlYW0gJWRcbiIsCiAJCQkJCWFkYXB0ZXIsIGkpOwogCiAJCQkJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpb2N0bC5jIGIvc291bmQvcGNpL2FzaWhwaS9ocGlvY3RsLmMKaW5kZXggMjJkYmQ5MS4uY2Q2MjRmMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGlvY3RsLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlvY3RsLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogCiAjaWZkZWYgTU9EVUxFX0ZJUk1XQVJFCkBAIC00NSw3ICs0Niw3IEBACiBzdGF0aWMgaW50IHByZWFsbG9jX3N0cmVhbV9idWY7CiBtb2R1bGVfcGFyYW0ocHJlYWxsb2Nfc3RyZWFtX2J1ZiwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MocHJlYWxsb2Nfc3RyZWFtX2J1ZiwKLQkicHJlYWxsb2NhdGUgc2l6ZSBmb3IgcGVyLWFkYXB0ZXIgc3RyZWFtIGJ1ZmZlciIpOworCSJQcmVhbGxvY2F0ZSBzaXplIGZvciBwZXItYWRhcHRlciBzdHJlYW0gYnVmZmVyIik7CiAKIC8qIEFsbG93IHRoZSBkZWJ1ZyBsZXZlbCB0byBiZSBjaGFuZ2VkIGFmdGVyIG1vZHVsZSBsb2FkLgogIEUuZy4gICBlY2hvIDIgPiAvc3lzL21vZHVsZS9hc2locGkvcGFyYW1ldGVycy9ocGlEZWJ1Z0xldmVsCkBAIC0xMjEsOCArMTIyLDggQEAKIAlwaHBpX2lvY3RsX2RhdGEgPSAoc3RydWN0IGhwaV9pb2N0bF9saW51eCBfX3VzZXIgKilhcmc7CiAKIAkvKiBSZWFkIHRoZSBtZXNzYWdlIGFuZCByZXNwb25zZSBwb2ludGVycyBmcm9tIHVzZXIgc3BhY2UuICAqLwotCWlmIChnZXRfdXNlcihwdWhtLCAmcGhwaV9pb2N0bF9kYXRhLT5waG0pIHx8Ci0JICAgIGdldF91c2VyKHB1aHIsICZwaHBpX2lvY3RsX2RhdGEtPnBocikpIHsKKwlpZiAoZ2V0X3VzZXIocHVobSwgJnBocGlfaW9jdGxfZGF0YS0+cGhtKQorCQl8fCBnZXRfdXNlcihwdWhyLCAmcGhwaV9pb2N0bF9kYXRhLT5waHIpKSB7CiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEzNSw3ICsxMzYsNyBAQAogCWlmIChobS0+aC5zaXplID4gc2l6ZW9mKCpobSkpCiAJCWhtLT5oLnNpemUgPSBzaXplb2YoKmhtKTsKIAotCS8qcHJpbnRrKEtFUk5fSU5GTyAibWVzc2FnZSBzaXplICVkXG4iLCBobS0+aC53U2l6ZSk7ICovCisJLyogcHJpbnRrKEtFUk5fSU5GTyAibWVzc2FnZSBzaXplICVkXG4iLCBobS0+aC53U2l6ZSk7ICovCiAKIAl1bmNvcGllZF9ieXRlcyA9IGNvcHlfZnJvbV91c2VyKGhtLCBwdWhtLCBobS0+aC5zaXplKTsKIAlpZiAodW5jb3BpZWRfYnl0ZXMpIHsKQEAgLTE1NSw4ICsxNTYsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKGhtLT5oLmFkYXB0ZXJfaW5kZXggPj0gSFBJX01BWF9BREFQVEVSUykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKIAlwYSA9ICZhZGFwdGVyc1tobS0+aC5hZGFwdGVyX2luZGV4XTsKLQloci0+aC5zaXplID0gMDsKKwloci0+aC5zaXplID0gcmVzX21heF9zaXplOwogCWlmIChobS0+aC5vYmplY3QgPT0gSFBJX09CSl9TVUJTWVNURU0pIHsKIAkJc3dpdGNoIChobS0+aC5mdW5jdGlvbikgewogCQljYXNlIEhQSV9TVUJTWVNfQ1JFQVRFX0FEQVBURVI6CkBAIC0yMTYsNyArMjIyLDcgQEAKIAkJCQkgKi8KIAkJCQlpZiAocGEtPmJ1ZmZlcl9zaXplIDwgc2l6ZSkgewogCQkJCQlIUElfREVCVUdfTE9HKERFQlVHLAotCQkJCQkJInJlYWxsb2MgYWRhcHRlciAlZCBzdHJlYW0gIgorCQkJCQkJIlJlYWxsb2MgYWRhcHRlciAlZCBzdHJlYW0gIgogCQkJCQkJImJ1ZmZlciBmcm9tICV6ZCB0byAlZFxuIiwKIAkJCQkJCWhtLT5oLmFkYXB0ZXJfaW5kZXgsCiAJCQkJCQlwYS0+YnVmZmVyX3NpemUsIHNpemUpOwpAQCAtMjU5LDcgKzI2NSw3IEBACiAJCQkJY29weV9mcm9tX3VzZXIocGEtPnBfYnVmZmVyLCBwdHIsIHNpemUpOwogCQkJaWYgKHVuY29waWVkX2J5dGVzKQogCQkJCUhQSV9ERUJVR19MT0coV0FSTklORywKLQkJCQkJIm1pc3NlZCAlZCBvZiAlZCAiCisJCQkJCSJNaXNzZWQgJWQgb2YgJWQgIgogCQkJCQkiYnl0ZXMgZnJvbSB1c2VyXG4iLCB1bmNvcGllZF9ieXRlcywKIAkJCQkJc2l6ZSk7CiAJCX0KQEAgLTI3MSw3ICsyNzcsNyBAQAogCQkJCWNvcHlfdG9fdXNlcihwdHIsIHBhLT5wX2J1ZmZlciwgc2l6ZSk7CiAJCQlpZiAodW5jb3BpZWRfYnl0ZXMpCiAJCQkJSFBJX0RFQlVHX0xPRyhXQVJOSU5HLAotCQkJCQkibWlzc2VkICVkIG9mICVkICIgImJ5dGVzIHRvIHVzZXJcbiIsCisJCQkJCSJNaXNzZWQgJWQgb2YgJWQgIiAiYnl0ZXMgdG8gdXNlclxuIiwKIAkJCQkJdW5jb3BpZWRfYnl0ZXMsIHNpemUpOwogCQl9CiAKQEAgLTI5MCw5ICsyOTYsOSBAQAogCWlmIChoci0+aC5zaXplID4gcmVzX21heF9zaXplKSB7CiAJCUhQSV9ERUJVR19MT0coRVJST1IsICJyZXNwb25zZSB0b28gYmlnICVkICVkXG4iLCBoci0+aC5zaXplLAogCQkJcmVzX21heF9zaXplKTsKLQkJLypIUElfREVCVUdfTUVTU0FHRShFUlJPUiwgaG0pOyAqLwotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKKwkJaHItPmguZXJyb3IgPSBIUElfRVJST1JfUkVTUE9OU0VfQlVGRkVSX1RPT19TTUFMTDsKKwkJaHItPmguc3BlY2lmaWNfZXJyb3IgPSBoci0+aC5zaXplOworCQloci0+aC5zaXplID0gc2l6ZW9mKGhyLT5oKTsKIAl9CiAKIAl1bmNvcGllZF9ieXRlcyA9IGNvcHlfdG9fdXNlcihwdWhyLCBociwgaHItPmguc2l6ZSk7CkBAIC0zMjAsMTggKzMyNiwyNiBAQAogCiAJbWVtc2V0KCZhZGFwdGVyLCAwLCBzaXplb2YoYWRhcHRlcikpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgInByb2JlIFBDSSBkZXZpY2UgKCUwNHg6JTA0eCwlMDR4OiUwNHgsJTA0eClcbiIsCi0JCXBjaV9kZXYtPnZlbmRvciwgcGNpX2Rldi0+ZGV2aWNlLCBwY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBjaV9kZXYtPmRldiwKKwkJInByb2JlICUwNHg6JTA0eCwlMDR4OiUwNHgsJTA0eFxuIiwgcGNpX2Rldi0+dmVuZG9yLAorCQlwY2lfZGV2LT5kZXZpY2UsIHBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3IsCiAJCXBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UsIHBjaV9kZXYtPmRldmZuKTsKIAorCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBjaV9kZXYtPmRldiwKKwkJCSJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsJLyogYWxzbyBzZXRzIGxhdGVuY3kgdGltZXIgaWYgPCAxNiAqLworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9TVUJTWVNURU0sCiAJCUhQSV9TVUJTWVNfQ1JFQVRFX0FEQVBURVIpOwogCWhwaV9pbml0X3Jlc3BvbnNlKCZociwgSFBJX09CSl9TVUJTWVNURU0sIEhQSV9TVUJTWVNfQ1JFQVRFX0FEQVBURVIsCiAJCUhQSV9FUlJPUl9QUk9DRVNTSU5HX01FU1NBR0UpOwogCi0JaG0uYWRhcHRlcl9pbmRleCA9IC0xOwkvKiBhbiBpbnZhbGlkIGluZGV4ICovCisJaG0uYWRhcHRlcl9pbmRleCA9IEhQSV9BREFQVEVSX0lOREVYX0lOVkFMSUQ7CiAKLQkvKiBmaWxsIGluIEhQSV9QQ0kgaW5mb3JtYXRpb24gZnJvbSBrZXJuZWwgcHJvdmlkZWQgaW5mb3JtYXRpb24gKi8KIAlhZGFwdGVyLnBjaSA9IHBjaV9kZXY7CiAKIAlubSA9IEhQSV9NQVhfQURBUFRFUl9NRU1fU1BBQ0VTOwpAQCAtMzU5LDE5ICszNzMsNyBAQAogCQlwY2kuYXBfbWVtX2Jhc2VbaWR4XSA9IGFkYXB0ZXIuYXBfcmVtYXBwZWRfbWVtX2Jhc2VbaWR4XTsKIAl9CiAKLQkvKiBjb3VsZCByZXBsYWNlIFBjaSB3aXRoIGRpcmVjdCBwb2ludGVyIHRvIHBjaV9kZXYgZm9yIGxpbnV4Ci0JICAgSW5zdGVhZCB3cmFwIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgSURzIGV0Yy4KLQkgICBXb3VsZCBpdCB3b3JrIGZvciB3aW5kb3dzPwotCSAqLwotCXBjaS5idXNfbnVtYmVyID0gcGNpX2Rldi0+YnVzLT5udW1iZXI7Ci0JcGNpLnZlbmRvcl9pZCA9ICh1MTYpcGNpX2Rldi0+dmVuZG9yOwotCXBjaS5kZXZpY2VfaWQgPSAodTE2KXBjaV9kZXYtPmRldmljZTsKLQlwY2kuc3Vic3lzX3ZlbmRvcl9pZCA9ICh1MTYpKHBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3IgJiAweGZmZmYpOwotCXBjaS5zdWJzeXNfZGV2aWNlX2lkID0gKHUxNikocGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSAmIDB4ZmZmZik7Ci0JcGNpLmRldmljZV9udW1iZXIgPSBwY2lfZGV2LT5kZXZmbjsKLQlwY2kuaW50ZXJydXB0ID0gcGNpX2Rldi0+aXJxOwotCXBjaS5wX29zX2RhdGEgPSBwY2lfZGV2OwotCisJcGNpLnBjaV9kZXYgPSBwY2lfZGV2OwogCWhtLnUucy5yZXNvdXJjZS5idXNfdHlwZSA9IEhQSV9CVVNfUENJOwogCWhtLnUucy5yZXNvdXJjZS5yLnBjaSA9ICZwY2k7CiAKQEAgLTM5MiwxMCArMzk0LDEwIEBACiAJfQogCiAJYWRhcHRlci5pbmRleCA9IGhyLnUucy5hZGFwdGVyX2luZGV4OwotCWFkYXB0ZXIudHlwZSA9IGhyLnUucy5hd19hZGFwdGVyX2xpc3RbYWRhcHRlci5pbmRleF07CisJYWRhcHRlci50eXBlID0gaHIudS5zLmFkYXB0ZXJfdHlwZTsKIAlobS5hZGFwdGVyX2luZGV4ID0gYWRhcHRlci5pbmRleDsKIAotCWVyciA9IGhwaV9hZGFwdGVyX29wZW4oTlVMTCwgYWRhcHRlci5pbmRleCk7CisJZXJyID0gaHBpX2FkYXB0ZXJfb3BlbihhZGFwdGVyLmluZGV4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycjsKIApAQCAtNDA3LDggKzQwOSw5IEBACiAJbXV0ZXhfaW5pdCgmYWRhcHRlcnNbYWRhcHRlci5pbmRleF0ubXV0ZXgpOwogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCAmYWRhcHRlcnNbYWRhcHRlci5pbmRleF0pOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAicHJvYmUgZm91bmQgYWRhcHRlciBBU0klMDRYIEhQSSBpbmRleCAjJWQuXG4iLAotCQlhZGFwdGVyLnR5cGUsIGFkYXB0ZXIuaW5kZXgpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGNpX2Rldi0+ZGV2LAorCQkicHJvYmUgc3VjY2VlZGVkIGZvciBBU0klMDRYIEhQSSBpbmRleCAlZFxuIiwgYWRhcHRlci50eXBlLAorCQlhZGFwdGVyLmluZGV4KTsKIAogCXJldHVybiAwOwogCkBAIC00MzksNyArNDQyLDggQEAKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfU1VCU1lTVEVNLAogCQlIUElfU1VCU1lTX0RFTEVURV9BREFQVEVSKTsKLQlobS5hZGFwdGVyX2luZGV4ID0gcGEtPmluZGV4OworCWhtLm9ial9pbmRleCA9IHBhLT5pbmRleDsKKwlobS5hZGFwdGVyX2luZGV4ID0gSFBJX0FEQVBURVJfSU5ERVhfSU5WQUxJRDsKIAlocGlfc2VuZF9yZWN2X2V4KCZobSwgJmhyLCBIT1dORVJfS0VSTkVMKTsKIAogCS8qIHVubWFwIFBDSSBtZW1vcnkgc3BhY2UsIG1hcHBlZCBkdXJpbmcgZGV2aWNlIGluaXQuICovCkBAIC00NTAsMjAgKzQ1NCwxOCBAQAogCQl9CiAJfQogCi0JaWYgKHBhLT5wX2J1ZmZlcikgewotCQlwYS0+YnVmZmVyX3NpemUgPSAwOworCWlmIChwYS0+cF9idWZmZXIpCiAJCXZmcmVlKHBhLT5wX2J1ZmZlcik7Ci0JfQogCiAJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOwotCS8qCi0JICAgcHJpbnRrKEtFUk5fSU5GTyAiUENJIGRldmljZSAoJTA0eDolMDR4LCUwNHg6JTA0eCwlMDR4KSwiCi0JICAgIiBIUEkgaW5kZXggIyAlZCwgcmVtb3ZlZC5cbiIsCi0JICAgcGNpX2Rldi0+dmVuZG9yLCBwY2lfZGV2LT5kZXZpY2UsCi0JICAgcGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvciwKLQkgICBwY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlLCBwY2lfZGV2LT5kZXZmbiwKLQkgICBwYS0+aW5kZXgpOwotCSAqLworCWlmICgxKQorCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBjaV9kZXYtPmRldiwKKwkJCSJyZW1vdmUgJTA0eDolMDR4LCUwNHg6JTA0eCwlMDR4LCIgIiBIUEkgaW5kZXggJWQuXG4iLAorCQkJcGNpX2Rldi0+dmVuZG9yLCBwY2lfZGV2LT5kZXZpY2UsCisJCQlwY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBwY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlLAorCQkJcGNpX2Rldi0+ZGV2Zm4sIHBhLT5pbmRleCk7CisKKwltZW1zZXQocGEsIDAsIHNpemVvZigqcGEpKTsKIH0KIAogdm9pZCBfX2luaXQgYXNpaHBpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpb3MuaCBiL3NvdW5kL3BjaS9hc2locGkvaHBpb3MuaAppbmRleCAzNzBmMzliLi4wMzI3M2U3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW9zLmgKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlvcy5oCkBAIC0yNyw5ICsyNyw3IEBACiAjZGVmaW5lIEhQSV9PU19MSU5VWF9LRVJORUwKIAogI2RlZmluZSBIUElfT1NfREVGSU5FRAotI2RlZmluZSBIUElfS0VSTkVMX01PREUKLQotI2RlZmluZSBIUElfUkVBU1NJR05fRFVQTElDQVRFX0FEQVBURVJfSURYCisjZGVmaW5lIEhQSV9CVUlMRF9LRVJORUxfTU9ERQogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xMzUsMjAgKzEzMywyMCBAQAogCiAjZGVmaW5lIGhwaW9zX21zZ3hsb2NrX2luaXQob2JqKSAgICAgIHNwaW5fbG9ja19pbml0KCYob2JqKS0+bG9jaykKICNkZWZpbmUgaHBpb3NfbXNneGxvY2tfbG9jayhvYmopICAgY29uZF9sb2NrKG9iaikKLSNkZWZpbmUgaHBpb3NfbXNneGxvY2tfdW5fbG9jayhvYmopIGNvbmRfdW5sb2NrKG9iaikKKyNkZWZpbmUgaHBpb3NfbXNneGxvY2tfdW5sb2NrKG9iaikgY29uZF91bmxvY2sob2JqKQogCiAjZGVmaW5lIGhwaW9zX2RzcGxvY2tfaW5pdChvYmopICAgICAgIHNwaW5fbG9ja19pbml0KCYob2JqKS0+ZHNwX2xvY2subG9jaykKICNkZWZpbmUgaHBpb3NfZHNwbG9ja19sb2NrKG9iaikgICAgY29uZF9sb2NrKCYob2JqKS0+ZHNwX2xvY2spCiAjZGVmaW5lIGhwaW9zX2RzcGxvY2tfdW5sb2NrKG9iaikgIGNvbmRfdW5sb2NrKCYob2JqKS0+ZHNwX2xvY2spCiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCi0jZGVmaW5lIEhQSV9ERUJVRworI2RlZmluZSBIUElfQlVJTERfREVCVUcKICNlbmRpZgogCiAjZGVmaW5lIEhQSV9BTElTVF9MT0NLSU5HCiAjZGVmaW5lIGhwaW9zX2FsaXN0bG9ja19pbml0KG9iaikgICAgc3Bpbl9sb2NrX2luaXQoJigob2JqKS0+bGlzdF9sb2NrLmxvY2spKQogI2RlZmluZSBocGlvc19hbGlzdGxvY2tfbG9jayhvYmopIHNwaW5fbG9jaygmKChvYmopLT5saXN0X2xvY2subG9jaykpCi0jZGVmaW5lIGhwaW9zX2FsaXN0bG9ja191bl9sb2NrKG9iaikgc3Bpbl91bmxvY2soJigob2JqKS0+bGlzdF9sb2NrLmxvY2spKQorI2RlZmluZSBocGlvc19hbGlzdGxvY2tfdW5sb2NrKG9iaikgc3Bpbl91bmxvY2soJigob2JqKS0+bGlzdF9sb2NrLmxvY2spKQogCiBzdHJ1Y3QgaHBpX2FkYXB0ZXIgewogCS8qIG11dGV4IHByZXZlbnRzIGNvbnRlbnRpb24gZm9yIG9uZSBjYXJkCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggNDlkNTcyYS4uMzExOWNkOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtNTIyLDcgKzUyMiw3IEBACiAJCWF0aWl4cF9yZWFkKGNoaXAsIENNRCk7CiAJCW1kZWxheSgxKTsKIAkJYXRpaXhwX3VwZGF0ZShjaGlwLCBDTUQsIEFUSV9SRUdfQ01EX0FDX1JFU0VULCBBVElfUkVHX0NNRF9BQ19SRVNFVCk7Ci0JCWlmICgtLXRpbWVvdXQpIHsKKwkJaWYgKCEtLXRpbWVvdXQpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImF0aWl4cDogY29kZWMgcmVzZXQgdGltZW91dFxuIik7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDkxZDcwMzYuLjJmNzRjMmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCQlhdGlpeHBfcmVhZChjaGlwLCBDTUQpOwogCQltc2xlZXAoMSk7CiAJCWF0aWl4cF91cGRhdGUoY2hpcCwgQ01ELCBBVElfUkVHX0NNRF9BQ19SRVNFVCwgQVRJX1JFR19DTURfQUNfUkVTRVQpOwotCQlpZiAoLS10aW1lb3V0KSB7CisJCWlmICghLS10aW1lb3V0KSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhdGlpeHAtbW9kZW06IGNvZGVjIHJlc2V0IHRpbWVvdXRcbiIpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmggYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oCmluZGV4IGNmNDZiYmEuLmVjYjhmNGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmgKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaApAQCAtMjExLDcgKzIxMSw3IEBACiAvL3N0YXRpYyB2b2lkIHZvcnRleF9hZGJkbWFfc3RvcGZpZm8odm9ydGV4X3QgKnZvcnRleCwgaW50IGFkYmRtYSk7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfYWRiZG1hX3BhdXNlZmlmbyh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGFkYmRtYSk7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfYWRiZG1hX3Jlc3VtZWZpZm8odm9ydGV4X3QgKiB2b3J0ZXgsIGludCBhZGJkbWEpOwotc3RhdGljIGludCBpbmxpbmUgdm9ydGV4X2FkYmRtYV9nZXRsaW5lYXJwb3Modm9ydGV4X3QgKiB2b3J0ZXgsIGludCBhZGJkbWEpOworc3RhdGljIGlubGluZSBpbnQgdm9ydGV4X2FkYmRtYV9nZXRsaW5lYXJwb3Modm9ydGV4X3QgKiB2b3J0ZXgsIGludCBhZGJkbWEpOwogc3RhdGljIHZvaWQgdm9ydGV4X2FkYmRtYV9yZXNldHVwKHZvcnRleF90ICp2b3J0ZXgsIGludCBhZGJkbWEpOwogCiAjaWZuZGVmIENISVBfQVU4ODEwCkBAIC0yMTksNyArMjE5LDcgQEAKIHN0YXRpYyB2b2lkIHZvcnRleF93dGRtYV9zdG9wZmlmbyh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IHd0ZG1hKTsKIHN0YXRpYyB2b2lkIHZvcnRleF93dGRtYV9wYXVzZWZpZm8odm9ydGV4X3QgKiB2b3J0ZXgsIGludCB3dGRtYSk7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfd3RkbWFfcmVzdW1lZmlmbyh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IHd0ZG1hKTsKLXN0YXRpYyBpbnQgaW5saW5lIHZvcnRleF93dGRtYV9nZXRsaW5lYXJwb3Modm9ydGV4X3QgKiB2b3J0ZXgsIGludCB3dGRtYSk7CitzdGF0aWMgaW5saW5lIGludCB2b3J0ZXhfd3RkbWFfZ2V0bGluZWFycG9zKHZvcnRleF90ICogdm9ydGV4LCBpbnQgd3RkbWEpOwogI2VuZGlmCiAKIC8qIGdsb2JhbCBzdHVmZi4gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwppbmRleCAxNmMwYmRmLi40ODkxNTAzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCkBAIC0xMjQ5LDcgKzEyNDksNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpbmxpbmUgdm9ydGV4X2FkYmRtYV9nZXRsaW5lYXJwb3Modm9ydGV4X3QgKiB2b3J0ZXgsIGludCBhZGJkbWEpCitzdGF0aWMgaW5saW5lIGludCB2b3J0ZXhfYWRiZG1hX2dldGxpbmVhcnBvcyh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGFkYmRtYSkKIHsKIAlzdHJlYW1fdCAqZG1hID0gJnZvcnRleC0+ZG1hX2FkYlthZGJkbWFdOwogCWludCB0ZW1wLCBwYWdlLCBkZWx0YTsKQEAgLTE1MDYsNyArMTUwNiw3IEBACiAJCSBQT1NfU0hJRlQpICYgUE9TX01BU0spOwogfQogI2VuZGlmCi1zdGF0aWMgaW50IGlubGluZSB2b3J0ZXhfd3RkbWFfZ2V0bGluZWFycG9zKHZvcnRleF90ICogdm9ydGV4LCBpbnQgd3RkbWEpCitzdGF0aWMgaW5saW5lIGludCB2b3J0ZXhfd3RkbWFfZ2V0bGluZWFycG9zKHZvcnRleF90ICogdm9ydGV4LCBpbnQgd3RkbWEpCiB7CiAJc3RyZWFtX3QgKmRtYSA9ICZ2b3J0ZXgtPmRtYV93dFt3dGRtYV07CiAJaW50IHRlbXA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuYwppbmRleCAzODYwMmI4Li4yNzhlZDgxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2VxLmMKQEAgLTg5Niw3ICs4OTYsOCBAQAogCQlpZiAoKGtjb250cm9sID0KIAkJICAgICBzbmRfY3RsX25ldzEoJnZvcnRleF9lcV9rY29udHJvbCwgdm9ydGV4KSkgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlzdHJjcHkoa2NvbnRyb2wtPmlkLm5hbWUsIEVxQmFuZExhYmVsc1tpXSk7CisJCXNucHJpbnRmKGtjb250cm9sLT5pZC5uYW1lLCBzaXplb2Yoa2NvbnRyb2wtPmlkLm5hbWUpLAorCQkJIiVzIFBsYXliYWNrIFZvbHVtZSIsIEVxQmFuZExhYmVsc1tpXSk7CiAJCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlID0gaTsKIAkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZCh2b3J0ZXgtPmNhcmQsIGtjb250cm9sKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDU3MzU5NGIuLjU3MTVjNGQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXp0MzMyOC5jCisrKyBiL3NvdW5kL3BjaS9henQzMzI4LmMKQEAgLTEsNiArMSw1IEBACi0vKgotICogIGF6dDMzMjguYyAtIGRyaXZlciBmb3IgQXp0ZWNoIEFaRjMzMjggYmFzZWQgc291bmRjYXJkcyAoZS5nLiBQQ0kxNjgpLgotICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSAtIDIwMTAgYnkgQW5kcmVhcyBNb2hyIDxhbmRpIEFUIGxpc2FzLmRlPgorLyogIGF6dDMzMjguYyAtIGRyaXZlciBmb3IgQXp0ZWNoIEFaRjMzMjggYmFzZWQgc291bmRjYXJkcyAoZS5nLiBQQ0kxNjgpLgorICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSAtIDIwMTEgYnkgQW5kcmVhcyBNb2hyIDxhbmRpIEFUIGxpc2FzLmRlPgogICoKICAqICBGcmFtZXdvcmsgYm9ycm93ZWQgZnJvbSBCYXJ0IEhhcnRnZXJzJ3MgYWxzNDAwMC5jLgogICogIERyaXZlciBkZXZlbG9wZWQgb24gUENJMTY4IEFQKFcpIHZlcnNpb24gKFBDSSByZXYuIDEwLCBzdWJzeXN0ZW0gSUQgMTgwMSksCkBAIC02Niw2ICs2NSwxMyBAQAogICogICAgYWRkcmVzc2VzIGlsbGVnYWxseS4gU28gZmFyIHVuZm9ydHVuYXRlbHkgaXQgbG9va3MgbGlrZSB0aGUgdmVyeSBmbGV4aWJsZQogICogICAgQUxTQSBBQzk3IHN1cHBvcnQgaXMgc3RpbGwgbm90IGVub3VnaCB0byBlYXNpbHkgY29tcGVuc2F0ZSBmb3Igc3VjaCBhCiAgKiAgICBncmF2ZSBsYXlvdXQgdmlvbGF0aW9uIGRlc3BpdGUgYWxsIHR3ZWFrcyBhbmQgcXVpcmtzIG1lY2hhbmlzbXMgaXQgb2ZmZXJzLgorICogICAgV2VsbCwgbm90IHF1aXRlOiBub3cgYWM5NyBsYXllciBpcyBtdWNoIGltcHJvdmVkIChidXMtc3BlY2lmaWMgb3BzISksCisgKiAgICB0aHVzIEkgd2FzIGFibGUgdG8gaW1wbGVtZW50IHN1cHBvcnQgLSBpdCdzIGFjdHVhbGx5IHdvcmtpbmcgcXVpdGUgd2VsbC4KKyAqICAgIEFuIGludGVyZXN0aW5nIGl0ZW0gbWlnaHQgYmUgQXp0ZWNoIEFNUiAyODAwLVcsIHNpbmNlIGl0J3MgYW4gQUM5NworICogICAgbW9kZW0gY2FyZCB3aGljaCBtaWdodCByZXZlYWwgdGhlIEF6dGVjaC1zcGVjaWZpYyBjb2RlYyBJRCB3aGljaAorICogICAgd2UgbWlnaHQgd2FudCB0byBwcmV0ZW5kLCB0b28uIERpdG8gUENJMTY4J3MgYnJvdGhlciwgUENJMzY4LAorICogICAgd2hlcmUgdGhlIGFkdmVydGlzaW5nIGRhdGFzaGVldCBzYXlzIGl0J3MgQUM5Ny1iYXNlZCBhbmQgaGFzIGEKKyAqICAgIERpZ2l0YWwgRW5oYW5jZWQgR2FtZSBQb3J0LgogICogIC0gYnVpbHRpbiBnZW51aW5lIE9QTDMgLSB2ZXJpZmllZCB0byB3b3JrIGZpbmUsIDIwMDgwNTA2CiAgKiAgLSBmdWxsIGR1cGxleCAxNmJpdCBwbGF5YmFjay9yZWNvcmQgYXQgaW5kZXBlbmRlbnQgc2FtcGxpbmcgcmF0ZQogICogIC0gTVBVNDAxICgrIGxlZ2FjeSBhZGRyZXNzIHN1cHBvcnQsIGNsYWltZWQgYnkgb25lIG9mZmljaWFsIHNwZWMgc2hlZXQpCkBAIC0xODksNiArMTk1LDE2IEBACiAjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CiAjaW5jbHVkZSA8c291bmQvb3BsMy5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKy8qCisgKiBDb25maWcgc3dpdGNoLCB0byB1c2UgQUxTQSdzIEFDOTcgbGF5ZXIgaW5zdGVhZCBvZiBvbGQgY3VzdG9tIG1peGVyIGNyYXAuCisgKiBJZiB0aGUgQUM5NyBjb21wYXRpYmlsaXR5IHBhcnRzIHdlIG5lZWRlZCB0byBpbXBsZW1lbnQgbG9jYWxseSB0dXJuIG91dAorICogdG8gd29yayBuaWNlbHksIHRoZW4gcmVtb3ZlIHRoZSBvbGQgaW1wbGVtZW50YXRpb24gZXZlbnR1YWxseS4KKyAqLworI2RlZmluZSBBWkZfVVNFX0FDOTdfTEFZRVIgMQorCisjaWZkZWYgQVpGX1VTRV9BQzk3X0xBWUVSCisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorI2VuZGlmCiAjaW5jbHVkZSAiYXp0MzMyOC5oIgogCiBNT0RVTEVfQVVUSE9SKCJBbmRyZWFzIE1vaHIgPGFuZGkgQVQgbGlzYXMuZGU+Iik7CkBAIC0zMjgsNiArMzQ0LDEwIEBACiAJLyogcGxheWJhY2ssIHJlY29yZGluZyBhbmQgSTJTIG91dCBjb2RlY3MgKi8KIAlzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSBjb2RlY3NbM107CiAKKyNpZmRlZiBBWkZfVVNFX0FDOTdfTEFZRVIKKwlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7CisjZW5kaWYKKwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwogCkBAIC01MDYsNyArNTI2LDcgQEAKICNkZWZpbmUgQVpGX01VVEVfQklUIDB4ODAKIAogc3RhdGljIGJvb2wKLXNuZF9hemYzMzI4X21peGVyX3NldF9tdXRlKGNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwKK3NuZF9hemYzMzI4X21peGVyX211dGVfY29udHJvbChjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCiAJCQkgICB1bnNpZ25lZCByZWcsIGJvb2wgZG9fbXV0ZQogKQogewpAQCAtNTIxLDYgKzU0MSwzMjMgQEAKIAlyZXR1cm4gKGRvX211dGUpID8gIXVwZGF0ZWQgOiB1cGRhdGVkOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wKK3NuZF9hemYzMzI4X21peGVyX211dGVfY29udHJvbF9tYXN0ZXIoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLAorCQkJICAgYm9vbCBkb19tdXRlCispCit7CisJcmV0dXJuIHNuZF9hemYzMzI4X21peGVyX211dGVfY29udHJvbCgKKwkJY2hpcCwKKwkJSURYX01JWEVSX1BMQVlfTUFTVEVSLAorCQlkb19tdXRlCisJKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitzbmRfYXpmMzMyOF9taXhlcl9tdXRlX2NvbnRyb2xfcGNtKGNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwKKwkJCSAgIGJvb2wgZG9fbXV0ZQorKQoreworCXJldHVybiBzbmRfYXpmMzMyOF9taXhlcl9tdXRlX2NvbnRyb2woCisJCWNoaXAsCisJCUlEWF9NSVhFUl9XQVZFT1VULAorCQlkb19tdXRlCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzbmRfYXpmMzMyOF9taXhlcl9yZXNldChjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXApCit7CisJLyogcmVzZXQgKGNsb3NlKSBtaXhlcjoKKwkgKiBmaXJzdCBtdXRlIG1hc3RlciB2b2x1bWUsIHRoZW4gcmVzZXQKKwkgKi8KKwlzbmRfYXpmMzMyOF9taXhlcl9tdXRlX2NvbnRyb2xfbWFzdGVyKGNoaXAsIDEpOworCXNuZF9hemYzMzI4X21peGVyX291dHcoY2hpcCwgSURYX01JWEVSX1JFU0VULCAweDAwMDApOworfQorCisjaWZkZWYgQVpGX1VTRV9BQzk3X0xBWUVSCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc25kX2F6ZjMzMjhfbWl4ZXJfYWM5N19tYXBfdW5zdXBwb3J0ZWQodW5zaWduZWQgc2hvcnQgcmVnLCBjb25zdCBjaGFyICptb2RlKQoreworCS8qIG5lZWQgdG8gYWRkIHNvbWUgbW9yZSBvciBsZXNzIGNsZXZlciBlbXVsYXRpb24/ICovCisJcHJpbnRrKEtFUk5fV0FSTklORworCQkiYXp0MzMyODogbWlzc2luZyAlcyBlbXVsYXRpb24gZm9yIEFDOTcgcmVnaXN0ZXIgMHglMDJ4IVxuIiwKKwkJbW9kZSwgcmVnKTsKK30KKworLyoKKyAqIE5lZWQgdG8gaGF2ZSBfc3BlY2lhbF8gQUM5NyBtaXhlciBoYXJkd2FyZSByZWdpc3RlciBpbmRleCBtYXBwZXIsCisgKiB0byBjb21wZW5zYXRlIGZvciB0aGUgaXNzdWUgb2YgYSByYXRoZXIgQUM5Ny1pbmNvbXBhdGlibGUgaGFyZHdhcmUgbGF5b3V0LgorICovCisjZGVmaW5lIEFaRl9SRUdfTUFTSyAweDNmCisjZGVmaW5lIEFaRl9BQzk3X1JFR19VTlNVUFBPUlRFRCAweDgwMDAKKyNkZWZpbmUgQVpGX0FDOTdfUkVHX1JFQUxfSU9fUkVBRCAweDQwMDAKKyNkZWZpbmUgQVpGX0FDOTdfUkVHX1JFQUxfSU9fV1JJVEUgMHgyMDAwCisjZGVmaW5lIEFaRl9BQzk3X1JFR19SRUFMX0lPX1JXIFwKKwkoQVpGX0FDOTdfUkVHX1JFQUxfSU9fUkVBRCB8IEFaRl9BQzk3X1JFR19SRUFMX0lPX1dSSVRFKQorI2RlZmluZSBBWkZfQUM5N19SRUdfRU1VX0lPX1JFQUQgMHgwNDAwCisjZGVmaW5lIEFaRl9BQzk3X1JFR19FTVVfSU9fV1JJVEUgMHgwMjAwCisjZGVmaW5lIEFaRl9BQzk3X1JFR19FTVVfSU9fUlcgXAorCShBWkZfQUM5N19SRUdfRU1VX0lPX1JFQUQgfCBBWkZfQUM5N19SRUdfRU1VX0lPX1dSSVRFKQorc3RhdGljIHVuc2lnbmVkIHNob3J0CitzbmRfYXpmMzMyOF9taXhlcl9hYzk3X21hcF9yZWdfaWR4KHVuc2lnbmVkIHNob3J0IHJlZykKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJdW5zaWduZWQgc2hvcnQgYXpmX3JlZzsKKwl9IGF6Zl9yZWdfbWFwcGVyW10gPSB7CisJCS8qIEVzcGVjaWFsbHkgd2hlbiB0YWtpbmcgaW50byBjb25zaWRlcmF0aW9uCisJCSAqIG1vbm8vc3RlcmVvLWJhc2VkIHNlcXVlbmNlIG9mIGF6ZiB2cy4gQUM5NyBjb250cm9sIHNlcmllcywKKwkJICogaXQncyBxdWl0ZSBvYnZpb3VzIHRoYXQgYXpmIHNpbXBseSBnb3QgcmlkCisJCSAqIG9mIHRoZSBBQzk3X0hFQURQSE9ORSBjb250cm9sIGF0IGl0cyBpbnRlbmRlZCBvZmZzZXQsCisJCSAqIHRodXMgc2hpZnRlZCBfYWxsXyBjb250cm9scyBieSBvbmUsCisJCSAqIGFuZCBfdGhlbl8gc2ltcGx5IGFkZGVkIGl0IGFzIGFuIEZNU1lOVEggY29udHJvbCBhdCB0aGUgZW5kLAorCQkgKiB0byBtYWtlIHVwIGZvciB0aGUgb2Zmc2V0LgorCQkgKiBUaGlzIG1lYW5zIHdlJ2xsIGhhdmUgdG8gdHJhbnNsYXRlIGluZGljZXMgaGVyZSBhcworCQkgKiBuZWVkZWQgYW5kIHRoZW4gZG8gc29tZSB0aW55IEFDOTcgcGF0Y2ggYWN0aW9uCisJCSAqIChzbmRfYWM5N19yZW5hbWVfdm9sX2N0bCgpIGV0Yy4pIC0gdGhhdCdzIGl0LgorCQkgKi8KKwkJeyAvKiBBQzk3X1JFU0VUICovIElEWF9NSVhFUl9SRVNFVAorCQkJfCBBWkZfQUM5N19SRUdfUkVBTF9JT19XUklURQorCQkJfCBBWkZfQUM5N19SRUdfRU1VX0lPX1JFQUQgfSwKKwkJeyAvKiBBQzk3X01BU1RFUiAqLyBJRFhfTUlYRVJfUExBWV9NQVNURVIgfSwKKwkJIC8qIG5vdGUgbGFyZ2Ugc2hpZnQ6IEFDOTdfSEVBRFBIT05FIHRvIElEWF9NSVhFUl9GTVNZTlRIISAqLworCQl7IC8qIEFDOTdfSEVBRFBIT05FICovIElEWF9NSVhFUl9GTVNZTlRIIH0sCisJCXsgLyogQUM5N19NQVNURVJfTU9OTyAqLyBJRFhfTUlYRVJfTU9ERU1PVVQgfSwKKwkJeyAvKiBBQzk3X01BU1RFUl9UT05FICovIElEWF9NSVhFUl9CQVNTVFJFQkxFIH0sCisJCXsgLyogQUM5N19QQ19CRUVQICovIElEWF9NSVhFUl9QQ0JFRVAgfSwKKwkJeyAvKiBBQzk3X1BIT05FICovIElEWF9NSVhFUl9NT0RFTUlOIH0sCisJCXsgLyogQUM5N19NSUMgKi8gSURYX01JWEVSX01JQyB9LAorCQl7IC8qIEFDOTdfTElORSAqLyBJRFhfTUlYRVJfTElORUlOIH0sCisJCXsgLyogQUM5N19DRCAqLyBJRFhfTUlYRVJfQ0RBVURJTyB9LAorCQl7IC8qIEFDOTdfVklERU8gKi8gSURYX01JWEVSX1ZJREVPIH0sCisJCXsgLyogQUM5N19BVVggKi8gSURYX01JWEVSX0FVWCB9LAorCQl7IC8qIEFDOTdfUENNICovIElEWF9NSVhFUl9XQVZFT1VUIH0sCisJCXsgLyogQUM5N19SRUNfU0VMICovIElEWF9NSVhFUl9SRUNfU0VMRUNUIH0sCisJCXsgLyogQUM5N19SRUNfR0FJTiAqLyBJRFhfTUlYRVJfUkVDX1ZPTFVNRSB9LAorCQl7IC8qIEFDOTdfUkVDX0dBSU5fTUlDICovIEFaRl9BQzk3X1JFR19FTVVfSU9fUlcgfSwKKwkJeyAvKiBBQzk3X0dFTkVSQUxfUFVSUE9TRSAqLyBJRFhfTUlYRVJfQURWQ1RMMiB9LAorCQl7IC8qIEFDOTdfM0RfQ09OVFJPTCAqLyBJRFhfTUlYRVJfQURWQ1RMMSB9LAorCX07CisKKwl1bnNpZ25lZCBzaG9ydCByZWdfYXpmID0gQVpGX0FDOTdfUkVHX1VOU1VQUE9SVEVEOworCisJLyogYXpmMzMyOCBzdXBwb3J0cyB0aGUgbG93LW51bWJlcmVkIGFuZCBsb3ctc3BlYzplZCByYW5nZQorCSAgIG9mIEFDOTcgcmVncyBvbmx5ICovCisJaWYgKHJlZyA8PSBBQzk3XzNEX0NPTlRST0wpIHsKKwkJdW5zaWduZWQgc2hvcnQgcmVnX2lkeCA9IHJlZyAvIDI7CisJCXJlZ19hemYgPSBhemZfcmVnX21hcHBlcltyZWdfaWR4XS5hemZfcmVnOworCQkvKiBhIHRyYW5zbGF0aW9uLW9ubHkgZW50cnkgbWVhbnMgaXQncyByZWFsIHJlYWQvd3JpdGU6ICovCisJCWlmICghKHJlZ19hemYgJiB+QVpGX1JFR19NQVNLKSkKKwkJCXJlZ19hemYgfD0gQVpGX0FDOTdfUkVHX1JFQUxfSU9fUlc7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChyZWcpIHsKKwkJY2FzZSBBQzk3X1BPV0VSRE9XTjoKKwkJCXJlZ19hemYgPSBBWkZfQUM5N19SRUdfRU1VX0lPX1JXOworCQkJYnJlYWs7CisJCWNhc2UgQUM5N19FWFRFTkRFRF9JRDoKKwkJCXJlZ19hemYgPSBBWkZfQUM5N19SRUdfRU1VX0lPX1JFQUQ7CisJCQlicmVhazsKKwkJY2FzZSBBQzk3X0VYVEVOREVEX1NUQVRVUzoKKwkJCS8qIEkgZG9uJ3Qga25vdyB3aGF0IHRoZSBoKmxsIEFDOTcgbGF5ZXIKKwkJCSAqIHdvdWxkIGNvbnN1bHQgdGhpcyBfZXh0ZW5kZWRfIHJlZ2lzdGVyIGZvcgorCQkJICogZ2l2ZW4gYSBiYXNlLUFDOTctYWR2ZXJ0aXNlZCBjYXJkLAorCQkJICogYnV0IGxldCdzIGp1c3QgZW11bGF0ZSBpdCBhbnl3YXkgOi1QCisJCQkgKi8KKwkJCXJlZ19hemYgPSBBWkZfQUM5N19SRUdfRU1VX0lPX1JXOworCQkJYnJlYWs7CisJCWNhc2UgQUM5N19WRU5ET1JfSUQxOgorCQljYXNlIEFDOTdfVkVORE9SX0lEMjoKKwkJCXJlZ19hemYgPSBBWkZfQUM5N19SRUdfRU1VX0lPX1JFQUQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmVnX2F6ZjsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0CithemZfZW11bGF0ZWRfYWM5N19jYXBzID0KKwlBQzk3X0JDX0RFRElDQVRFRF9NSUMgfAorCUFDOTdfQkNfQkFTU19UUkVCTEUgfAorCS8qIEhlYWRwaG9uZSBpcyBhbiBGTSBTeW50aCBjb250cm9sIGhlcmUgKi8KKwlBQzk3X0JDX0hFQURQSE9ORSB8CisJLyogbm8gQUM5N19CQ19MT1VETkVTUyEgKi8KKwkvKiBtYXNrIDB4N2MwMCBpcworCSAgIHZlbmRvci1zcGVjaWZpYyAzRCBlbmhhbmNlbWVudAorCSAgIHZlbmRvciBpbmRpY2F0b3IuCisJICAgU2luY2UgdGhlcmUgYWN0dWFsbHkgX2lzXyBhbgorCSAgIGVudHJ5IGZvciBBenRlY2ggTGFicworCSAgICgxMyksIG1ha2UgZGFtbiBzdXJlCisJICAgdG8gaW5kaWNhdGUgaXQuICovCisJKDEzIDw8IDEwKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0CithemZfZW11bGF0ZWRfYWM5N19wb3dlcmRvd24gPQorCS8qIHByZXRlbmQgZXZlcnl0aGluZyB0byBiZSBhY3RpdmUgKi8KKwkJQUM5N19QRF9BRENfU1RBVFVTIHwKKwkJQUM5N19QRF9EQUNfU1RBVFVTIHwKKwkJQUM5N19QRF9NSVhFUl9TVEFUVVMgfAorCQlBQzk3X1BEX1ZSRUZfU1RBVFVTOworCisvKgorICogRW11bGF0ZWQsIF9pbm9mZmljaWFsXyB2ZW5kb3IgSUQKKyAqICh0aGVyZSBtaWdodCBiZSBzb21lIGRldmljZXMgc3VjaCBhcyB0aGUgTVIgMjgwMC1XCisgKiB3aGljaCBjb3VsZCByZXZlYWwgdGhlIHJlYWwgQXp0ZWNoIEFDOTcgSUQpLgorICogV2UgY2hvb3NlIHRvIHVzZSAiQVpUIiBwcmVmaXgsIGFuZCB0aGVuIHVzZSAxIHRvIGluZGljYXRlIFBDSTE2OAorICogKGJldHRlciBkb24ndCB1c2UgMHg2OCBzaW5jZSB0aGVyZSdzIGEgUENJMzY4IGFzIHdlbGwpLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50CithemZfZW11bGF0ZWRfYWM5N192ZW5kb3JfaWQgPSAweDQxNWE1NDAxOworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQKK3NuZF9hemYzMzI4X21peGVyX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZ19hYzk3KQoreworCWNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBzaG9ydCByZWdfYXpmID0gc25kX2F6ZjMzMjhfbWl4ZXJfYWM5N19tYXBfcmVnX2lkeChyZWdfYWM5Nyk7CisJdW5zaWduZWQgc2hvcnQgcmVnX3ZhbCA9IDA7CisJYm9vbCB1bnN1cHBvcnRlZCA9IDA7CisKKwlzbmRfYXpmMzMyOF9kYmdtaXhlcigKKwkJInNuZF9hemYzMzI4X21peGVyX2FjOTdfcmVhZCByZWdfYWM5NyAldVxuIiwKKwkJCXJlZ19hYzk3CisJKTsKKwlpZiAocmVnX2F6ZiAmIEFaRl9BQzk3X1JFR19VTlNVUFBPUlRFRCkKKwkJdW5zdXBwb3J0ZWQgPSAxOworCWVsc2UgeworCQlpZiAocmVnX2F6ZiAmIEFaRl9BQzk3X1JFR19SRUFMX0lPX1JFQUQpCisJCQlyZWdfdmFsID0gc25kX2F6ZjMzMjhfbWl4ZXJfaW53KGNoaXAsCisJCQkJCQlyZWdfYXpmICYgQVpGX1JFR19NQVNLKTsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogUHJvY2VlZCB3aXRoIGR1bW15IEkvTyByZWFkLAorCQkJICogdG8gZW5zdXJlIGNvbXBhdGlibGUgdGltaW5nIHdoZXJlIHRoaXMgbWF5IG1hdHRlci4KKwkJCSAqIChBTFNBIEFDOTcgbGF5ZXIgdXN1YWxseSBkb2Vzbid0IGNhbGwgSS9PIGZ1bmN0aW9ucworCQkJICogZHVlIHRvIGludGVsbGlnZW50IEkvTyBjYWNoaW5nIGFueXdheSkKKwkJCSAqIENob29zZSBhIG1peGVyIHJlZ2lzdGVyIHRoYXQncyB0aG9yb3VnaGx5IHVucmVsYXRlZAorCQkJICogdG8gY29tbW9uIGF1ZGlvICh0cnkgdG8gbWluaW1pemUgZGlzdG9ydGlvbikuCisJCQkgKi8KKwkJCXNuZF9hemYzMzI4X21peGVyX2ludyhjaGlwLCBJRFhfTUlYRVJfU09NRVRISU5HMzBIKTsKKwkJfQorCisJCWlmIChyZWdfYXpmICYgQVpGX0FDOTdfUkVHX0VNVV9JT19SRUFEKSB7CisJCQlzd2l0Y2ggKHJlZ19hYzk3KSB7CisJCQljYXNlIEFDOTdfUkVTRVQ6CisJCQkJcmVnX3ZhbCB8PSBhemZfZW11bGF0ZWRfYWM5N19jYXBzOworCQkJCWJyZWFrOworCQkJY2FzZSBBQzk3X1BPV0VSRE9XTjoKKwkJCQlyZWdfdmFsIHw9IGF6Zl9lbXVsYXRlZF9hYzk3X3Bvd2VyZG93bjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUM5N19FWFRFTkRFRF9JRDoKKwkJCWNhc2UgQUM5N19FWFRFTkRFRF9TVEFUVVM6CisJCQkJLyogQUZBSUNTIHdlIHNpbXBseSBjYW4ndCBzdXBwb3J0IGFueXRoaW5nOiAqLworCQkJCXJlZ192YWwgfD0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUM5N19WRU5ET1JfSUQxOgorCQkJCXJlZ192YWwgPSBhemZfZW11bGF0ZWRfYWM5N192ZW5kb3JfaWQgPj4gMTY7CisJCQkJYnJlYWs7CisJCQljYXNlIEFDOTdfVkVORE9SX0lEMjoKKwkJCQlyZWdfdmFsID0gYXpmX2VtdWxhdGVkX2FjOTdfdmVuZG9yX2lkICYgMHhmZmZmOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl1bnN1cHBvcnRlZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKHVuc3VwcG9ydGVkKQorCQlzbmRfYXpmMzMyOF9taXhlcl9hYzk3X21hcF91bnN1cHBvcnRlZChyZWdfYWM5NywgInJlYWQiKTsKKworCXJldHVybiByZWdfdmFsOworfQorCitzdGF0aWMgdm9pZAorc25kX2F6ZjMzMjhfbWl4ZXJfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCSAgICAgdW5zaWduZWQgc2hvcnQgcmVnX2FjOTcsIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwljb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgc2hvcnQgcmVnX2F6ZiA9IHNuZF9hemYzMzI4X21peGVyX2FjOTdfbWFwX3JlZ19pZHgocmVnX2FjOTcpOworCWJvb2wgdW5zdXBwb3J0ZWQgPSAwOworCisJc25kX2F6ZjMzMjhfZGJnbWl4ZXIoCisJCSJzbmRfYXpmMzMyOF9taXhlcl9hYzk3X3dyaXRlIHJlZ19hYzk3ICV1IHZhbCAldVxuIiwKKwkJCXJlZ19hYzk3LCB2YWwKKwkpOworCWlmIChyZWdfYXpmICYgQVpGX0FDOTdfUkVHX1VOU1VQUE9SVEVEKQorCQl1bnN1cHBvcnRlZCA9IDE7CisJZWxzZSB7CisJCWlmIChyZWdfYXpmICYgQVpGX0FDOTdfUkVHX1JFQUxfSU9fV1JJVEUpCisJCQlzbmRfYXpmMzMyOF9taXhlcl9vdXR3KAorCQkJCWNoaXAsCisJCQkJcmVnX2F6ZiAmIEFaRl9SRUdfTUFTSywKKwkJCQl2YWwKKwkJCSk7CisJCWVsc2UKKwkJaWYgKHJlZ19hemYgJiBBWkZfQUM5N19SRUdfRU1VX0lPX1dSSVRFKSB7CisJCQlzd2l0Y2ggKHJlZ19hYzk3KSB7CisJCQljYXNlIEFDOTdfUkVDX0dBSU5fTUlDOgorCQkJY2FzZSBBQzk3X1BPV0VSRE9XTjoKKwkJCWNhc2UgQUM5N19FWFRFTkRFRF9TVEFUVVM6CisJCQkJLyoKKwkJCQkgKiBTaWxlbnRseSBzd2FsbG93IHRoZXNlIHdyaXRlcy4KKwkJCQkgKiBTaW5jZSBmb3IgbW9zdCByZWdpc3RlcnMgb3VyIGNhcmQgZG9lc24ndAorCQkJCSAqIGFjdHVhbGx5IHN1cHBvcnQgYSBjb21wYXJhYmxlIGZlYXR1cmUsCisJCQkJICogdGhpcyBpcyBleGFjdGx5IHdoYXQgd2Ugc2hvdWxkIGRvIGhlcmUuCisJCQkJICogVGhlIEFDOTcgbGF5ZXIncyBJL08gY2FjaGluZyBwcm9iYWJseQorCQkJCSAqIGF1dG9tYXRpY2FsbHkgdGFrZXMgY2FyZSBvZiBhbGwgdGhlIHJlc3QuLi4KKwkJCQkgKiAocmVtZW1iZXJzIHdyaXR0ZW4gdmFsdWVzIGV0Yy4pCisJCQkJICovCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXVuc3VwcG9ydGVkID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAodW5zdXBwb3J0ZWQpCisJCXNuZF9hemYzMzI4X21peGVyX2FjOTdfbWFwX3Vuc3VwcG9ydGVkKHJlZ19hYzk3LCAid3JpdGUiKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3NuZF9hemYzMzI4X21peGVyX25ldyhzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXApCit7CisJc3RydWN0IHNuZF9hYzk3X2J1cyAqYnVzOworCXN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSBhYzk3OworCXN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBvcHMgPSB7CisJCS53cml0ZSA9IHNuZF9hemYzMzI4X21peGVyX2FjOTdfd3JpdGUsCisJCS5yZWFkID0gc25kX2F6ZjMzMjhfbWl4ZXJfYWM5N19yZWFkLAorCX07CisJaW50IHJjOworCisJbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOworCWFjOTcuc2NhcHMgPSBBQzk3X1NDQVBfU0tJUF9NT0RFTQorCQkJfCBBQzk3X1NDQVBfQVVESU8gLyogd2Ugc3VwcG9ydCBhdWRpbyEgKi8KKwkJCXwgQUM5N19TQ0FQX05PX1NQRElGOworCWFjOTcucHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlhYzk3LnBjaSA9IGNoaXAtPnBjaTsKKworCS8qCisJICogQUxTQSdzIEFDOTcgbGF5ZXIgaGFzIHRlcnJpYmxlIGluaXQgY3JhY2tsaW5nIGlzc3VlcywKKwkgKiB1bmZvcnR1bmF0ZWx5LCBhbmQgc2luY2UgaXQgbWFrZXMgdXNlIG9mIEFDOTdfUkVTRVQsCisJICogdGhlcmUncyBubyB1c2UgdHJ5aW5nIHRvIG11dGUgTWFzdGVyIFBsYXliYWNrIHByb2FjdGl2ZWx5LgorCSAqLworCisJcmMgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgTlVMTCwgJmJ1cyk7CisJaWYgKCFyYykKKwkJcmMgPSBzbmRfYWM5N19taXhlcihidXMsICZhYzk3LCAmY2hpcC0+YWM5Nyk7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0byBjb21wbGFpbiBsb3VkbHkgaW4gY2FzZSBvZiBBQzk3IGluaXQgZmFpbHVyZSwKKwkJICogc2luY2UgZmFpbHVyZSBtYXkgaGFwcGVuIHF1aXRlIG9mdGVuLAorCQkgKiBkdWUgdG8gdGhpcyBjYXJkIGJlaW5nIGEgdmVyeSBxdWlya3kgQUM5NyAibG9va2FsaWtlIi4KKwkJICovCisJaWYgKHJjKQorCQlwcmludGsoS0VSTl9FUlIgImF6dDMzMjg6IEFDOTcgaW5pdCBmYWlsZWQsIGVyciAlZCFcbiIsIHJjKTsKKworCS8qIElmIHdlIHJldHVybiBhbiBlcnJvciBoZXJlLCB0aGVuIHNuZF9jYXJkX2ZyZWUoKSBzaG91bGQKKwkgKiBmcmVlIHVwIGFueSBhYzk3IGNvZGVjcyB0aGF0IGdvdCBjcmVhdGVkLCBhcyB3ZWxsIGFzIHRoZSBidXMuCisJICovCisJcmV0dXJuIHJjOworfQorI2Vsc2UgLyogQVpGX1VTRV9BQzk3X0xBWUVSICovCiBzdGF0aWMgdm9pZAogc25kX2F6ZjMzMjhfbWl4ZXJfd3JpdGVfdm9sdW1lX2dyYWR1YWxseShjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCiAJCQkJCSB1bnNpZ25lZCByZWcsCkBAIC05NDUsNiArMTI4Miw3IEBACiAJc25kX2F6ZjMzMjhfZGJnY2FsbGxlYXZlKCk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQVpGX1VTRV9BQzk3X0xBWUVSICovCiAKIHN0YXRpYyBpbnQKIHNuZF9hemYzMzI4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTEyMzMsOCArMTU3MSw4IEBACiAJCWlmIChpc19tYWluX21peGVyX3BsYXliYWNrX2NvZGVjKSB7CiAJCQkvKiBtdXRlIFdhdmVPdXQgKGF2b2lkIGNsaWNraW5nIGR1cmluZyBzZXR1cCkgKi8KIAkJCXByZXZpb3VzbHlfbXV0ZWQgPQotCQkJCXNuZF9hemYzMzI4X21peGVyX3NldF9tdXRlKAotCQkJCQkJY2hpcCwgSURYX01JWEVSX1dBVkVPVVQsIDEKKwkJCQlzbmRfYXpmMzMyOF9taXhlcl9tdXRlX2NvbnRyb2xfcGNtKAorCQkJCQkJY2hpcCwgMQogCQkJCSk7CiAJCX0KIApAQCAtMTI5MCw4ICsxNjI4LDggQEAKIAkJaWYgKGlzX21haW5fbWl4ZXJfcGxheWJhY2tfY29kZWMpIHsKIAkJCS8qIG5vdyB1bm11dGUgV2F2ZU91dCAqLwogCQkJaWYgKCFwcmV2aW91c2x5X211dGVkKQotCQkJCXNuZF9hemYzMzI4X21peGVyX3NldF9tdXRlKAotCQkJCQkJY2hpcCwgSURYX01JWEVSX1dBVkVPVVQsIDAKKwkJCQlzbmRfYXpmMzMyOF9taXhlcl9tdXRlX2NvbnRyb2xfcGNtKAorCQkJCQkJY2hpcCwgMAogCQkJCSk7CiAJCX0KIApAQCAtMTMxNSw4ICsxNjUzLDggQEAKIAkJaWYgKGlzX21haW5fbWl4ZXJfcGxheWJhY2tfY29kZWMpIHsKIAkJCS8qIG11dGUgV2F2ZU91dCAoYXZvaWQgY2xpY2tpbmcgZHVyaW5nIHNldHVwKSAqLwogCQkJcHJldmlvdXNseV9tdXRlZCA9Ci0JCQkJc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoCi0JCQkJCQljaGlwLCBJRFhfTUlYRVJfV0FWRU9VVCwgMQorCQkJCXNuZF9hemYzMzI4X21peGVyX211dGVfY29udHJvbF9wY20oCisJCQkJCQljaGlwLCAxCiAJCQkJKTsKIAkJfQogCkBAIC0xMzQxLDggKzE2NzksOCBAQAogCQlpZiAoaXNfbWFpbl9taXhlcl9wbGF5YmFja19jb2RlYykgewogCQkJLyogbm93IHVubXV0ZSBXYXZlT3V0ICovCiAJCQlpZiAoIXByZXZpb3VzbHlfbXV0ZWQpCi0JCQkJc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoCi0JCQkJCQljaGlwLCBJRFhfTUlYRVJfV0FWRU9VVCwgMAorCQkJCXNuZF9hemYzMzI4X21peGVyX211dGVfY29udHJvbF9wY20oCisJCQkJCQljaGlwLCAwCiAJCQkJKTsKIAkJfQogCkBAIC0yMDUwLDExICsyMzg4LDcgQEAKIAlpZiAoY2hpcC0+aXJxIDwgMCkKIAkJZ290byBfX2VuZF9odzsKIAotCS8qIHJlc2V0IChjbG9zZSkgbWl4ZXI6Ci0JICogZmlyc3QgbXV0ZSBtYXN0ZXIgdm9sdW1lLCB0aGVuIHJlc2V0Ci0JICovCi0Jc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoY2hpcCwgSURYX01JWEVSX1BMQVlfTUFTVEVSLCAxKTsKLQlzbmRfYXpmMzMyOF9taXhlcl9vdXR3KGNoaXAsIElEWF9NSVhFUl9SRVNFVCwgMHgwMDAwKTsKKwlzbmRfYXpmMzMyOF9taXhlcl9yZXNldChjaGlwKTsKIAogCXNuZF9hemYzMzI4X3RpbWVyX3N0b3AoY2hpcC0+dGltZXIpOwogCXNuZF9hemYzMzI4X2dhbWVwb3J0X2ZyZWUoY2hpcCk7CkBAIC0yNDA3LDYgKzI3NDEsNTUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorc25kX2F6ZjMzMjhfcmVzdW1lX3JlZ3MoY29uc3QgdTMyICpzYXZlZF9yZWdzLAorCQkJdW5zaWduZWQgbG9uZyBpb19hZGRyLAorCQkJdW5zaWduZWQgY291bnQKKykKK3sKKwl1bnNpZ25lZCByZWc7CisKKwlmb3IgKHJlZyA9IDA7IHJlZyA8IGNvdW50OyArK3JlZykgeworCQlvdXRsKCpzYXZlZF9yZWdzLCBpb19hZGRyKTsKKwkJc25kX2F6ZjMzMjhfZGJncG0oInJlc3VtZTogaW8gMHglMDRseDogMHglMDh4IC0tPiAweCUwOHhcbiIsCisJCQlpb19hZGRyLCAqc2F2ZWRfcmVncywgaW5sKGlvX2FkZHIpKTsKKwkJKytzYXZlZF9yZWdzOworCQlpb19hZGRyICs9IHNpemVvZigqc2F2ZWRfcmVncyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NuZF9hemYzMzI4X3N1c3BlbmRfYWM5NyhzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXApCit7CisjaWZkZWYgQVpGX1VTRV9BQzk3X0xBWUVSCisJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3KTsKKyNlbHNlCisJc25kX2F6ZjMzMjhfc3VzcGVuZF9yZWdzKGNoaXAtPm1peGVyX2lvLAorCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3NfbWl4ZXIpLCBjaGlwLT5zYXZlZF9yZWdzX21peGVyKTsKKworCS8qIG1ha2Ugc3VyZSB0byBkaXNhYmxlIG1hc3RlciB2b2x1bWUgZXRjLiB0byBwcmV2ZW50IGxvb3Bpbmcgc291bmQgKi8KKwlzbmRfYXpmMzMyOF9taXhlcl9tdXRlX2NvbnRyb2xfbWFzdGVyKGNoaXAsIDEpOworCXNuZF9hemYzMzI4X21peGVyX211dGVfY29udHJvbF9wY20oY2hpcCwgMSk7CisjZW5kaWYgLyogQVpGX1VTRV9BQzk3X0xBWUVSICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc25kX2F6ZjMzMjhfcmVzdW1lX2FjOTcoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwKQoreworI2lmZGVmIEFaRl9VU0VfQUM5N19MQVlFUgorCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3KTsKKyNlbHNlCisJc25kX2F6ZjMzMjhfcmVzdW1lX3JlZ3MoY2hpcC0+c2F2ZWRfcmVnc19taXhlciwgY2hpcC0+bWl4ZXJfaW8sCisJCQkJCUFSUkFZX1NJWkUoY2hpcC0+c2F2ZWRfcmVnc19taXhlcikpOworCisJLyogdW5mb3J0dW5hdGVseSB3aXRoIDMyYml0IHRyYW5zZmVycywgSURYX01JWEVSX1BMQVlfTUFTVEVSICgweDAyKQorCSAgIGFuZCBJRFhfTUlYRVJfUkVTRVQgKG9mZnNldCAweDAwKSBnZXQgdG91Y2hlZCBhdCB0aGUgc2FtZSB0aW1lLAorCSAgIHJlc3VsdGluZyBpbiBhIG1peGVyIHJlc2V0IGNvbmRpdGlvbiBwZXJzaXN0aW5nIHVudGlsIF9hZnRlcl8KKwkgICBtYXN0ZXIgdm9sIHdhcyByZXN0b3JlZC4gVGh1cyBtYXN0ZXIgdm9sIG5lZWRzIGFuIGV4dHJhIHJlc3RvcmUuICovCisJb3V0dygoKHUxNiAqKWNoaXAtPnNhdmVkX3JlZ3NfbWl4ZXIpWzFdLCBjaGlwLT5taXhlcl9pbyArIDIpOworI2VuZGlmIC8qIEFaRl9VU0VfQUM5N19MQVlFUiAqLworfQorCiBzdGF0aWMgaW50CiBzbmRfYXpmMzMyOF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTI0MjAsMTIgKzI4MDMsNyBAQAogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtW0FaRl9DT0RFQ19QTEFZQkFDS10pOwogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtW0FaRl9DT0RFQ19JMlNfT1VUXSk7CiAKLQlzbmRfYXpmMzMyOF9zdXNwZW5kX3JlZ3MoY2hpcC0+bWl4ZXJfaW8sCi0JCUFSUkFZX1NJWkUoY2hpcC0+c2F2ZWRfcmVnc19taXhlciksIGNoaXAtPnNhdmVkX3JlZ3NfbWl4ZXIpOwotCi0JLyogbWFrZSBzdXJlIHRvIGRpc2FibGUgbWFzdGVyIHZvbHVtZSBldGMuIHRvIHByZXZlbnQgbG9vcGluZyBzb3VuZCAqLwotCXNuZF9hemYzMzI4X21peGVyX3NldF9tdXRlKGNoaXAsIElEWF9NSVhFUl9QTEFZX01BU1RFUiwgMSk7Ci0Jc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoY2hpcCwgSURYX01JWEVSX1dBVkVPVVQsIDEpOworCXNuZF9hemYzMzI4X3N1c3BlbmRfYWM5NyhjaGlwKTsKIAogCXNuZF9hemYzMzI4X3N1c3BlbmRfcmVncyhjaGlwLT5jdHJsX2lvLAogCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3NfY3RybCksIGNoaXAtPnNhdmVkX3JlZ3NfY3RybCk7CkBAIC0yNDQ3LDIzICsyODI1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1zbmRfYXpmMzMyOF9yZXN1bWVfcmVncyhjb25zdCB1MzIgKnNhdmVkX3JlZ3MsCi0JCQl1bnNpZ25lZCBsb25nIGlvX2FkZHIsCi0JCQl1bnNpZ25lZCBjb3VudAotKQotewotCXVuc2lnbmVkIHJlZzsKLQotCWZvciAocmVnID0gMDsgcmVnIDwgY291bnQ7ICsrcmVnKSB7Ci0JCW91dGwoKnNhdmVkX3JlZ3MsIGlvX2FkZHIpOwotCQlzbmRfYXpmMzMyOF9kYmdwbSgicmVzdW1lOiBpbyAweCUwNGx4OiAweCUwOHggLS0+IDB4JTA4eFxuIiwKLQkJCWlvX2FkZHIsICpzYXZlZF9yZWdzLCBpbmwoaW9fYWRkcikpOwotCQkrK3NhdmVkX3JlZ3M7Ci0JCWlvX2FkZHIgKz0gc2l6ZW9mKCpzYXZlZF9yZWdzKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQKIHNuZF9hemYzMzI4X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQogewpAQCAtMjQ4NywxNCArMjg0OCw3IEBACiAJc25kX2F6ZjMzMjhfcmVzdW1lX3JlZ3MoY2hpcC0+c2F2ZWRfcmVnc19vcGwzLCBjaGlwLT5vcGwzX2lvLAogCQkJCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3Nfb3BsMykpOwogCi0Jc25kX2F6ZjMzMjhfcmVzdW1lX3JlZ3MoY2hpcC0+c2F2ZWRfcmVnc19taXhlciwgY2hpcC0+bWl4ZXJfaW8sCi0JCQkJCUFSUkFZX1NJWkUoY2hpcC0+c2F2ZWRfcmVnc19taXhlcikpOwotCi0JLyogdW5mb3J0dW5hdGVseSB3aXRoIDMyYml0IHRyYW5zZmVycywgSURYX01JWEVSX1BMQVlfTUFTVEVSICgweDAyKQotCSAgIGFuZCBJRFhfTUlYRVJfUkVTRVQgKG9mZnNldCAweDAwKSBnZXQgdG91Y2hlZCBhdCB0aGUgc2FtZSB0aW1lLAotCSAgIHJlc3VsdGluZyBpbiBhIG1peGVyIHJlc2V0IGNvbmRpdGlvbiBwZXJzaXN0aW5nIHVudGlsIF9hZnRlcl8KLQkgICBtYXN0ZXIgdm9sIHdhcyByZXN0b3JlZC4gVGh1cyBtYXN0ZXIgdm9sIG5lZWRzIGFuIGV4dHJhIHJlc3RvcmUuICovCi0Jb3V0dygoKHUxNiAqKWNoaXAtPnNhdmVkX3JlZ3NfbWl4ZXIpWzFdLCBjaGlwLT5taXhlcl9pbyArIDIpOworCXNuZF9hemYzMzI4X3Jlc3VtZV9hYzk3KGNoaXApOwogCiAJc25kX2F6ZjMzMjhfcmVzdW1lX3JlZ3MoY2hpcC0+c2F2ZWRfcmVnc19jdHJsLCBjaGlwLT5jdHJsX2lvLAogCQkJCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3NfY3RybCkpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwppbmRleCAxYmZmODBjLi5iOTMyMTU0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwpAQCAtODY5LDcgKzg2OSw3IEBACiAJbXV0ZXhfbG9jaygmYXRjLT5hdGNfbXV0ZXgpOwogCWRhby0+b3BzLT5nZXRfc3BvcyhkYW8sICZzdGF0dXMpOwogCWlmICgoKHN0YXR1cyA+PiAyNCkgJiBJRUM5NThfQUVTM19DT05fRlMpICE9IGllYzk1OF9jb25fZnMpIHsKLQkJc3RhdHVzICY9ICgofklFQzk1OF9BRVMzX0NPTl9GUykgPDwgMjQpOworCQlzdGF0dXMgJj0gfihJRUM5NThfQUVTM19DT05fRlMgPDwgMjQpOwogCQlzdGF0dXMgfD0gKGllYzk1OF9jb25fZnMgPDwgMjQpOwogCQlkYW8tPm9wcy0+c2V0X3Nwb3MoZGFvLCBzdGF0dXMpOwogCQlkYW8tPm9wcy0+Y29tbWl0X3dyaXRlKGRhbyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RkYWlvLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RkYWlvLmMKaW5kZXggYWY1NmViOS4uNDdkOWVhOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0ZGFpby5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGRhaW8uYwpAQCAtMTc2LDYgKzE3Niw3IEBACiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlkYW8tPm9wcy0+Y2xlYXJfbGVmdF9pbnB1dChkYW8pOwogCS8qIFByb2dyYW0gbWFzdGVyIGFuZCBjb25qdWdhdGUgcmVzb3VyY2VzICovCiAJaW5wdXQtPm9wcy0+bWFzdGVyKGlucHV0KTsKIAlkYWlvLT5yc2NsLm9wcy0+bWFzdGVyKCZkYWlvLT5yc2NsKTsKQEAgLTIwNCw2ICsyMDUsNyBAQAogCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGFvLT5vcHMtPmNsZWFyX3JpZ2h0X2lucHV0KGRhbyk7CiAJLyogUHJvZ3JhbSBtYXN0ZXIgYW5kIGNvbmp1Z2F0ZSByZXNvdXJjZXMgKi8KIAlpbnB1dC0+b3BzLT5tYXN0ZXIoaW5wdXQpOwogCWRhaW8tPnJzY3Iub3BzLT5tYXN0ZXIoJmRhaW8tPnJzY3IpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0aHcyMGsyLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazIuYwppbmRleCBiNmIxMWJmLi41MzY0MTY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazIuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazIuYwpAQCAtMTMwNywxMCArMTMwNywxMCBAQAogCXNldF9maWVsZCgmcGxsY3RsLCBQTExDVExfQiwgMCk7CiAJaWYgKDQ4MDAwID09IHJzcikgewogCQlzZXRfZmllbGQoJnBsbGN0bCwgUExMQ1RMX0ZELCAxNiAtIDIpOwotCQlzZXRfZmllbGQoJnBsbGN0bCwgUExMQ1RMX1JELCAxIC0gMSk7CisJCXNldF9maWVsZCgmcGxsY3RsLCBQTExDVExfUkQsIDEgLSAxKTsgLyogMzAwMCoxNi8xID0gNDgwMDAgKi8KIAl9IGVsc2UgeyAvKiA0NDEwMCAqLwogCQlzZXRfZmllbGQoJnBsbGN0bCwgUExMQ1RMX0ZELCAxNDcgLSAyKTsKLQkJc2V0X2ZpZWxkKCZwbGxjdGwsIFBMTENUTF9SRCwgMTAgLSAxKTsKKwkJc2V0X2ZpZWxkKCZwbGxjdGwsIFBMTENUTF9SRCwgMTAgLSAxKTsgLyogMzAwMCoxNDcvMTAgPSA0NDEwMCAqLwogCX0KIAlod193cml0ZV8yMGt4KGh3LCBQTExfQ1RMLCBwbGxjdGwpOwogCW1kZWxheSg0MCk7CkBAIC0xNzQwLDYgKzE3NDAsMTAgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAorI2RlZmluZSBNSUNfQk9PU1RfMERCIDB4Q0YKKyNkZWZpbmUgTUlDX0JPT1NUX1NURVBTX1BFUl9EQiAyCisjZGVmaW5lIE1JQ19CT09TVF8yMERCIChNSUNfQk9PU1RfMERCICsgMjAgKiBNSUNfQk9PU1RfU1RFUFNfUEVSX0RCKQorCiBzdGF0aWMgaW50IGh3X2FkY19pbnB1dF9zZWxlY3Qoc3RydWN0IGh3ICpodywgZW51bSBBRENTUkMgdHlwZSkKIHsKIAl1MzIgZGF0YTsKQEAgLTE3NTEsMTAgKzE3NTUsMTIgQEAKIAkJaHdfd3JpdGVfMjBreChodywgR1BJT19EQVRBLCBkYXRhKTsKIAkJaHcyMGsyX2kyY193cml0ZShodywgTUFLRV9XTTg3NzVfQUREUihXTTg3NzVfQURDTUMsIDB4MTAxKSwKIAkJCQlNQUtFX1dNODc3NV9EQVRBKDB4MTAxKSk7IC8qIE1pYy1pbiAqLwotCQlodzIwazJfaTJjX3dyaXRlKGh3LCBNQUtFX1dNODc3NV9BRERSKFdNODc3NV9BQURDTCwgMHhFNyksCi0JCQkJTUFLRV9XTTg3NzVfREFUQSgweEU3KSk7IC8qICsxMmRCIGJvb3N0ICovCi0JCWh3MjBrMl9pMmNfd3JpdGUoaHcsIE1BS0VfV004Nzc1X0FERFIoV004Nzc1X0FBRENSLCAweEU3KSwKLQkJCQlNQUtFX1dNODc3NV9EQVRBKDB4RTcpKTsgLyogKzEyZEIgYm9vc3QgKi8KKwkJaHcyMGsyX2kyY193cml0ZShodywKKwkJCQlNQUtFX1dNODc3NV9BRERSKFdNODc3NV9BQURDTCwgTUlDX0JPT1NUXzIwREIpLAorCQkJCU1BS0VfV004Nzc1X0RBVEEoTUlDX0JPT1NUXzIwREIpKTsgLyogKzIwZEIgKi8KKwkJaHcyMGsyX2kyY193cml0ZShodywKKwkJCQlNQUtFX1dNODc3NV9BRERSKFdNODc3NV9BQURDUiwgTUlDX0JPT1NUXzIwREIpLAorCQkJCU1BS0VfV004Nzc1X0RBVEEoTUlDX0JPT1NUXzIwREIpKTsgLyogKzIwZEIgKi8KIAkJYnJlYWs7CiAJY2FzZSBBRENfTElORUlOOgogCQlkYXRhICY9IH4oMHgxIDw8IDE0KTsKQEAgLTE4MjcsMTAgKzE4MzMsMTIgQEAKIAogCQlodzIwazJfaTJjX3dyaXRlKGh3LCBNQUtFX1dNODc3NV9BRERSKFdNODc3NV9BRENNQywgMHgxMDEpLAogCQkJCU1BS0VfV004Nzc1X0RBVEEoMHgxMDEpKTsgLyogTWljLWluICovCi0JCWh3MjBrMl9pMmNfd3JpdGUoaHcsIE1BS0VfV004Nzc1X0FERFIoV004Nzc1X0FBRENMLCAweEU3KSwKLQkJCQlNQUtFX1dNODc3NV9EQVRBKDB4RTcpKTsgLyogKzEyZEIgYm9vc3QgKi8KLQkJaHcyMGsyX2kyY193cml0ZShodywgTUFLRV9XTTg3NzVfQUREUihXTTg3NzVfQUFEQ1IsIDB4RTcpLAotCQkJCU1BS0VfV004Nzc1X0RBVEEoMHhFNykpOyAvKiArMTJkQiBib29zdCAqLworCQlodzIwazJfaTJjX3dyaXRlKGh3LAorCQkJCU1BS0VfV004Nzc1X0FERFIoV004Nzc1X0FBRENMLCBNSUNfQk9PU1RfMjBEQiksCisJCQkJTUFLRV9XTTg3NzVfREFUQShNSUNfQk9PU1RfMjBEQikpOyAvKiArMjBkQiAqLworCQlodzIwazJfaTJjX3dyaXRlKGh3LAorCQkJCU1BS0VfV004Nzc1X0FERFIoV004Nzc1X0FBRENSLCBNSUNfQk9PU1RfMjBEQiksCisJCQkJTUFLRV9XTTg3NzVfREFUQShNSUNfQk9PU1RfMjBEQikpOyAvKiArMjBkQiAqLwogCX0gZWxzZSBpZiAobXV4ID09IDIpIHsKIAkJLyogQ29uZmlndXJlcyBHUElPIGRhdGEgdG8gc2VsZWN0IExpbmUtaW4gKi8KIAkJZGF0YSAmPSB+KDB4MSA8PCAxNCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RtaXhlci5jIGIvc291bmQvcGNpL2N0eGZpL2N0bWl4ZXIuYwppbmRleCAxNWMxZTcyLi5jMzUxOWZmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RtaXhlci5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdG1peGVyLmMKQEAgLTU2NiwxOSArNTY2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjdF9zcGRpZl9kZWZhdWx0X2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzID0gU05EUlZfUENNX0RFRkFVTFRfQ09OX1NQRElGOwotCi0JdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMF0gPSAoc3RhdHVzID4+IDApICYgMHhmZjsKLQl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1sxXSA9IChzdGF0dXMgPj4gOCkgJiAweGZmOwotCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzJdID0gKHN0YXR1cyA+PiAxNikgJiAweGZmOwotCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzNdID0gKHN0YXR1cyA+PiAyNCkgJiAweGZmOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgY3Rfc3BkaWZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC01ODYsNiArNTczLDEwIEBACiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAogCWF0Yy0+c3BkaWZfb3V0X2dldF9zdGF0dXMoYXRjLCAmc3RhdHVzKTsKKworCWlmIChzdGF0dXMgPT0gMCkKKwkJc3RhdHVzID0gU05EUlZfUENNX0RFRkFVTFRfQ09OX1NQRElGOworCiAJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMF0gPSAoc3RhdHVzID4+IDApICYgMHhmZjsKIAl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1sxXSA9IChzdGF0dXMgPj4gOCkgJiAweGZmOwogCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzJdID0gKHN0YXR1cyA+PiAxNikgJiAweGZmOwpAQCAtNjI5LDcgKzYyMCw3IEBACiAJLm5hbWUJCT0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLCBQTEFZQkFDSywgREVGQVVMVCksCiAJLmNvdW50CQk9IDEsCiAJLmluZm8JCT0gY3Rfc3BkaWZfaW5mbywKLQkuZ2V0CQk9IGN0X3NwZGlmX2RlZmF1bHRfZ2V0LAorCS5nZXQJCT0gY3Rfc3BkaWZfZ2V0LAogCS5wdXQJCT0gY3Rfc3BkaWZfcHV0LAogCS5wcml2YXRlX3ZhbHVlCT0gTUlYRVJfSUVDOTU4X0RFRkFVTFQKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3R2bWVtLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3R2bWVtLmMKaW5kZXggNjVkYTZlNC4uYjc4ZjNmYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0dm1lbS5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uYwpAQCAtNTIsOCArNTIsNyBAQAogCiAJaWYgKGVudHJ5LT5zaXplID09IHNpemUpIHsKIAkJLyogTW92ZSB0aGUgdm0gbm9kZSBmcm9tIHVudXNlZCBsaXN0IHRvIHVzZWQgbGlzdCBkaXJlY3RseSAqLwotCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOwotCQlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZ2bS0+dXNlZCk7CisJCWxpc3RfbW92ZSgmZW50cnktPmxpc3QsICZ2bS0+dXNlZCk7CiAJCXZtLT5zaXplIC09IHNpemU7CiAJCWJsb2NrID0gZW50cnk7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCA2NmM3ZmIzLi41ZTYxOWE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtOTI2LDcgKzkyNiw3IEBACiAJc25kX2VtdTEwMTBfZnBnYV93cml0ZShlbXUsIEVNVV9IQU5BX01JRElfSU4sIDB4MTkpOwogCS8qIFVua25vd24uICovCiAJc25kX2VtdTEwMTBfZnBnYV93cml0ZShlbXUsIEVNVV9IQU5BX01JRElfT1VULCAweDBjKTsKLQkvKiBJUlEgRW5hYmxlOiBBbGxsIG9uICovCisJLyogSVJRIEVuYWJsZTogQWxsIG9uICovCiAJLyogc25kX2VtdTEwMTBfZnBnYV93cml0ZShlbXUsIDB4MDksIDB4MGYgKTsgKi8KIAkvKiBJUlEgRW5hYmxlOiBBbGwgb2ZmICovCiAJc25kX2VtdTEwMTBfZnBnYV93cml0ZShlbXUsIEVNVV9IQU5BX0lSUV9FTkFCTEUsIDB4MDApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggYWU1YzVkNWUuLjJjNzllOTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKICNpbmNsdWRlICJoZGFfYmVlcC5oIgogI2luY2x1ZGUgPHNvdW5kL2hkYV9od2RlcC5oPgpAQCAtNDk1OSw1ICs0OTYwLDEwOSBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX3ByaW50X3BjbV9iaXRzKTsKIAorI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sKKy8qCisgKiBJbnB1dC1qYWNrIG5vdGlmaWNhdGlvbiBzdXBwb3J0CisgKi8KK3N0cnVjdCBoZGFfamFja19pdGVtIHsKKwloZGFfbmlkX3QgbmlkOworCWludCB0eXBlOworCXN0cnVjdCBzbmRfamFjayAqamFjazsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfamFja19kZWZhdWx0X25hbWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkJCSBpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNORF9KQUNLX0hFQURQSE9ORToKKwkJcmV0dXJuICJIZWFkcGhvbmUiOworCWNhc2UgU05EX0pBQ0tfTUlDUk9QSE9ORToKKwkJcmV0dXJuICJNaWMiOworCWNhc2UgU05EX0pBQ0tfTElORU9VVDoKKwkJcmV0dXJuICJMaW5lLW91dCI7CisJY2FzZSBTTkRfSkFDS19IRUFEU0VUOgorCQlyZXR1cm4gIkhlYWRzZXQiOworCWRlZmF1bHQ6CisJCXJldHVybiAiTWlzYyI7CisJfQorfQorCitzdGF0aWMgdm9pZCBoZGFfZnJlZV9qYWNrX3ByaXYoc3RydWN0IHNuZF9qYWNrICpqYWNrKQoreworCXN0cnVjdCBoZGFfamFja19pdGVtICpqYWNrcyA9IGphY2stPnByaXZhdGVfZGF0YTsKKwlqYWNrcy0+bmlkID0gMDsKKwlqYWNrcy0+amFjayA9IE5VTEw7Cit9CisKK2ludCBzbmRfaGRhX2lucHV0X2phY2tfYWRkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgdHlwZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGhkYV9qYWNrX2l0ZW0gKmphY2s7CisJaW50IGVycjsKKworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+amFja3MsIHNpemVvZigqamFjayksIDMyKTsKKwlqYWNrID0gc25kX2FycmF5X25ldygmY29kZWMtPmphY2tzKTsKKwlpZiAoIWphY2spCisJCXJldHVybiAtRU5PTUVNOworCisJamFjay0+bmlkID0gbmlkOworCWphY2stPnR5cGUgPSB0eXBlOworCWlmICghbmFtZSkKKwkJbmFtZSA9IGdldF9qYWNrX2RlZmF1bHRfbmFtZShjb2RlYywgbmlkLCB0eXBlKTsKKwllcnIgPSBzbmRfamFja19uZXcoY29kZWMtPmJ1cy0+Y2FyZCwgbmFtZSwgdHlwZSwgJmphY2stPmphY2spOworCWlmIChlcnIgPCAwKSB7CisJCWphY2stPm5pZCA9IDA7CisJCXJldHVybiBlcnI7CisJfQorCWphY2stPmphY2stPnByaXZhdGVfZGF0YSA9IGphY2s7CisJamFjay0+amFjay0+cHJpdmF0ZV9mcmVlID0gaGRhX2ZyZWVfamFja19wcml2OworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9pbnB1dF9qYWNrX2FkZCk7CisKK3ZvaWQgc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3QgaGRhX2phY2tfaXRlbSAqamFja3MgPSBjb2RlYy0+amFja3MubGlzdDsKKwlpbnQgaTsKKworCWlmICghamFja3MpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+amFja3MudXNlZDsgaSsrLCBqYWNrcysrKSB7CisJCXVuc2lnbmVkIGludCBwaW5fY3RsOworCQl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwkJaW50IHR5cGU7CisKKwkJaWYgKGphY2tzLT5uaWQgIT0gbmlkKQorCQkJY29udGludWU7CisJCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBuaWQpOworCQl0eXBlID0gamFja3MtPnR5cGU7CisJCWlmICh0eXBlID09IChTTkRfSkFDS19IRUFEUEhPTkUgfCBTTkRfSkFDS19MSU5FT1VUKSkgeworCQkJcGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJCQl0eXBlID0gKHBpbl9jdGwgJiBBQ19QSU5DVExfSFBfRU4pID8KKwkJCQlTTkRfSkFDS19IRUFEUEhPTkUgOiBTTkRfSkFDS19MSU5FT1VUOworCQl9CisJCXNuZF9qYWNrX3JlcG9ydChqYWNrcy0+amFjaywgcHJlc2VudCA/IHR5cGUgOiAwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KTsKKworLyogZnJlZSBqYWNrIGluc3RhbmNlcyBtYW51YWxseSB3aGVuIGNsZWFyaW5nL3JlY29uZmlndXJpbmcgKi8KK3ZvaWQgc25kX2hkYV9pbnB1dF9qYWNrX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaWYgKCFjb2RlYy0+YnVzLT5zaHV0ZG93biAmJiBjb2RlYy0+amFja3MubGlzdCkgeworCQlzdHJ1Y3QgaGRhX2phY2tfaXRlbSAqamFja3MgPSBjb2RlYy0+amFja3MubGlzdDsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+amFja3MudXNlZDsgaSsrLCBqYWNrcysrKSB7CisJCQlpZiAoamFja3MtPmphY2spCisJCQkJc25kX2RldmljZV9mcmVlKGNvZGVjLT5idXMtPmNhcmQsIGphY2tzLT5qYWNrKTsKKwkJfQorCX0KKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmphY2tzKTsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfaW5wdXRfamFja19mcmVlKTsKKyNlbmRpZiAvKiBDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLICovCisKIE1PRFVMRV9ERVNDUklQVElPTigiSERBIGNvZGVjIGNvcmUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCmluZGV4IGZkZjhkNDQuLmU0NmQ1NDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaApAQCAtODY2LDYgKzg2NiwxMSBAQAogCS8qIGNvZGVjLXNwZWNpZmljIGFkZGl0aW9uYWwgcHJvYyBvdXRwdXQgKi8KIAl2b2lkICgqcHJvY193aWRnZXRfaG9vaykoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAogCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLCisJLyogamFjayBkZXRlY3Rpb24gKi8KKwlzdHJ1Y3Qgc25kX2FycmF5IGphY2tzOworI2VuZGlmCiB9OwogCiAvKiBkaXJlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGZjZWRhZDkuLjcwYTlkMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMTA1Miw5ICsxMDUyLDEyIEBACiAJLyogQ2xlYXIgYml0cyAwLTIgb2YgUENJIHJlZ2lzdGVyIFRDU0VMIChhdCBvZmZzZXQgMHg0NCkKIAkgKiBUQ1NFTCA9PSBUcmFmZmljIENsYXNzIFNlbGVjdCBSZWdpc3Rlciwgd2hpY2ggc2V0cyBQQ0kgZXhwcmVzcyBRT1MKIAkgKiBFbnN1cmluZyB0aGVzZSBiaXRzIGFyZSAwIGNsZWFycyBwbGF5YmFjayBzdGF0aWMgb24gc29tZSBIRCBBdWRpbwotCSAqIGNvZGVjcworCSAqIGNvZGVjcy4KKwkgKiBUaGUgUENJIHJlZ2lzdGVyIFRDU0VMIGlzIGRlZmluZWQgaW4gdGhlIEludGVsIG1hbnVhbHMuCiAJICovCi0JdXBkYXRlX3BjaV9ieXRlKGNoaXAtPnBjaSwgSUNINl9QQ0lSRUdfVENTRUwsIDB4MDcsIDApOworCWlmIChjaGlwLT5kcml2ZXJfdHlwZSAhPSBBWlhfRFJJVkVSX0FUSSAmJgorCSAgICBjaGlwLT5kcml2ZXJfdHlwZSAhPSBBWlhfRFJJVkVSX0FUSUhETUkpCisJCXVwZGF0ZV9wY2lfYnl0ZShjaGlwLT5wY2ksIElDSDZfUENJUkVHX1RDU0VMLCAweDA3LCAwKTsKIAogCXN3aXRjaCAoY2hpcC0+ZHJpdmVyX3R5cGUpIHsKIAljYXNlIEFaWF9EUklWRVJfQVRJOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKaW5kZXggM2FiNWU3YS4uZmY1ZTJhYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCkBAIC02NTYsNCArNjU2LDI4IEBACiAjZGVmaW5lIFNORF9QUklOVF9DSEFOTkVMX0FMTE9DQVRJT05fQURWSVNFRF9CVUZTSVpFIDgwCiB2b2lkIHNuZF9wcmludF9jaGFubmVsX2FsbG9jYXRpb24oaW50IHNwa19hbGxvYywgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKIAorLyoKKyAqIElucHV0LWphY2sgbm90aWZpY2F0aW9uIHN1cHBvcnQKKyAqLworI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sKK2ludCBzbmRfaGRhX2lucHV0X2phY2tfYWRkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgdHlwZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKK3ZvaWQgc25kX2hkYV9pbnB1dF9qYWNrX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworI2Vsc2UgLyogQ09ORklHX1NORF9IREFfSU5QVVRfSkFDSyAqLworc3RhdGljIGlubGluZSBpbnQgc25kX2hkYV9pbnB1dF9qYWNrX2FkZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJIGhkYV9uaWRfdCBuaWQsIGludCB0eXBlLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgIGhkYV9uaWRfdCBuaWQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2hkYV9pbnB1dF9qYWNrX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX1NORF9IREFfSU5QVVRfSkFDSyAqLworCiAjZW5kaWYgLyogX19TT1VORF9IREFfTE9DQUxfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggOGRhYmFiNy4uNzM0YzZlZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0zMCwxMCArMzAsMTAgQEAKICNpbmNsdWRlICJoZGFfYmVlcC5oIgogCiBzdHJ1Y3QgYWQxOTh4X3NwZWMgewotCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s2XTsKIAlpbnQgbnVtX21peGVyczsKIAl1bnNpZ25lZCBpbnQgYmVlcF9hbXA7CS8qIGJlZXAgYW1wIHZhbHVlLCBzZXQgdmlhIHNldF9iZWVwX2FtcCgpICovCi0JY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicworCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s2XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMIHRlcm1pbmF0aW9uIQogCQkJCQkJICovCiAJdW5zaWduZWQgaW50IG51bV9pbml0X3ZlcmJzOwpAQCAtMzMxLDM2ICszMzEsMTEgQEAKIAlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX2NsZWFudXAoY29kZWMsICZzcGVjLT5tdWx0aW91dCk7CiB9CiAKLXN0YXRpYyBpbnQgYWQxOTh4X2FsdF9wbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAotCQkJCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCXVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAotCQkJCXVuc2lnbmVkIGludCBmb3JtYXQsCi0JCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIHNwZWMtPmFsdF9kYWNfbmlkWzBdLCBzdHJlYW1fdGFnLAotCQkJCQkwLCBmb3JtYXQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkMTk4eF9hbHRfcGxheWJhY2tfcGNtX2NsZWFudXAoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKLQkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzbmRfaGRhX2NvZGVjX2NsZWFudXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5hbHRfZGFjX25pZFswXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWQxOTh4X3BjbV9hbmFsb2dfYWx0X3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIAkvKiBOSUQgaXMgc2V0IGluIGFkMTk4eF9idWlsZF9wY21zICovCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhZDE5OHhfYWx0X3BsYXliYWNrX3BjbV9wcmVwYXJlLAotCQkuY2xlYW51cCA9IGFkMTk4eF9hbHRfcGxheWJhY2tfcGNtX2NsZWFudXAKLQl9LAogfTsKIAogLyoKQEAgLTIyMzksMjkgKzIyMTQsNiBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF82c3RhY2tfZnBfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCiAKLQlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDI5LCAyLCBIREFfSU5QVVQpLAotCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MmEsIDIsIEhEQV9JTlBVVCksCi0JSERBX0JJTkRfTVVURV9NT05PKCJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyNywgMSwgMiwgSERBX0lOUFVUKSwKLQlIREFfQklORF9NVVRFX01PTk8oIkxGRSBQbGF5YmFjayBTd2l0Y2giLCAweDI3LCAyLCAyLCBIREFfSU5QVVQpLAotCUhEQV9CSU5EX01VVEUoIlNpZGUgUGxheWJhY2sgU3dpdGNoIiwgMHgyOCwgMiwgSERBX0lOUFVUKSwKLQlIREFfQklORF9NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMiwgMiwgSERBX0lOUFVUKSwKLQlIREFfQklORF9NVVRFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MWUsIDIsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDYsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAotCi0JSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgzOSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgzYywgMHgwLCBIREFfT1VUUFVUKSwKLQogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTI1NDUsMTEgKzI0OTcsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfNnN0YWNrX2ZwX2luaXRfdmVyYnNbXSA9IHsKLQkvKiBGcm9udCwgU3Vycm91bmQsIENMRkUsIHNpZGUgREFDOyB1bm11dGUgYXMgZGVmYXVsdCAqLwotCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JezB4MDYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKLQl7MHgwNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJLyogSGVhZHBob25lOyB1bm11dGUgYXMgZGVmYXVsdCAqLwogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJLyogUG9ydC1BIGZyb250IGhlYWRwaG9uIHBhdGggKi8KQEAgLTI1NTgsNTAgKzI1MDUsNiBAQAogCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAotCS8qIFBvcnQtRCBsaW5lLW91dCBwYXRoICovCi0JezB4MjksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgyOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDEyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCi0JLyogUG9ydC1GIHN1cnJvdW5kIHBhdGggKi8KLQl7MHgyYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDJhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKLQl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQkvKiBQb3J0LUcgQ0xGRSBwYXRoICovCi0JezB4MjcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgyNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCi0JLyogUG9ydC1IIHNpZGUgcGF0aCAqLwotCXsweDI4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MjgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgyNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCXsweDI1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCS8qIE1vbm8gb3V0IHBhdGggKi8KLQl7MHgzNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sIC8qIERBQzE6MDRoICovCi0JezB4MWUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgxZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCXsweDEzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMWZ9LCAvKiB1bm11dGUsIDBkQiAqLwotCS8qIFBvcnQtQiBmcm9udCBtaWMtaW4gcGF0aCAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAotCXsweDM5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCS8qIFBvcnQtQyBsaW5lLWluIHBhdGggKi8KLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAotCXsweDNhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDMzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKLQkvKiBQb3J0LUUgbWljLWluIHBhdGggKi8KLQl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgzYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgzNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JLyogQW5hbG9nIENEIElucHV0ICovCi0JezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKLQkvKiBBbmFsb2cgTWl4IG91dHB1dCBhbXAgKi8KLQl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfCAweDFmfSwgLyogMGRCICovCiAKIAl7IH0KIH07CkBAIC0zMzE2LDIwICszMjE5LDIwIEBACiAJCQlzcGVjLT5taXhlcnNbMF0gPSBhZDE5ODhfNnN0YWNrX21peGVyczFfcmV2MjsKIAkJZWxzZQogCQkJc3BlYy0+bWl4ZXJzWzBdID0gYWQxOTg4XzZzdGFja19taXhlcnMxOworCQlzcGVjLT5taXhlcnNbMV0gPSBhZDE5ODhfNnN0YWNrX21peGVyczI7CisJCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFkMTk4OF82c3RhY2tfaW5pdF92ZXJiczsKIAkJaWYgKGJvYXJkX2NvbmZpZyA9PSBBRDE5ODhfNlNUQUNLX0RJR19GUCkgewotCQkJc3BlYy0+bWl4ZXJzWzFdID0gYWQxOTg4XzZzdGFja19mcF9taXhlcnM7CisJCQlzcGVjLT5udW1fbWl4ZXJzKys7CisJCQlzcGVjLT5taXhlcnNbMl0gPSBhZDE5ODhfNnN0YWNrX2ZwX21peGVyczsKKwkJCXNwZWMtPm51bV9pbml0X3ZlcmJzKys7CisJCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gYWQxOTg4XzZzdGFja19mcF9pbml0X3ZlcmJzOwogCQkJc3BlYy0+c2xhdmVfdm9scyA9IGFkMTk4OF82c3RhY2tfZnBfc2xhdmVfdm9sczsKIAkJCXNwZWMtPnNsYXZlX3N3cyA9IGFkMTk4OF82c3RhY2tfZnBfc2xhdmVfc3dzOwogCQkJc3BlYy0+YWx0X2RhY19uaWQgPSBhZDE5ODhfYWx0X2RhY19uaWQ7CiAJCQlzcGVjLT5zdHJlYW1fYW5hbG9nX2FsdF9wbGF5YmFjayA9CiAJCQkJJmFkMTk4eF9wY21fYW5hbG9nX2FsdF9wbGF5YmFjazsKLQkJfSBlbHNlCi0JCQlzcGVjLT5taXhlcnNbMV0gPSBhZDE5ODhfNnN0YWNrX21peGVyczI7Ci0JCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKLQkJaWYgKGJvYXJkX2NvbmZpZyA9PSBBRDE5ODhfNlNUQUNLX0RJR19GUCkKLQkJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhZDE5ODhfNnN0YWNrX2ZwX2luaXRfdmVyYnM7Ci0JCWVsc2UKLQkJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhZDE5ODhfNnN0YWNrX2luaXRfdmVyYnM7CisJCX0KIAkJaWYgKChib2FyZF9jb25maWcgPT0gQUQxOTg4XzZTVEFDS19ESUcpIHx8CiAJCQkoYm9hcmRfY29uZmlnID09IEFEMTk4OF82U1RBQ0tfRElHX0ZQKSkgewogCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBRDE5ODhfU1BESUZfT1VUOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDRkNTAwNGUuLmQwOGNmMzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTQ5LDE0ICs0OSw2IEBACiAjZGVmaW5lIEFVVE9fTUlDX1BPUlRCCQkoMSA8PCAxKQogI2RlZmluZSBBVVRPX01JQ19QT1JUQwkJKDEgPDwgMikKIAotc3RydWN0IGNvbmV4YW50X2phY2sgewotCi0JaGRhX25pZF90IG5pZDsKLQlpbnQgdHlwZTsKLQlzdHJ1Y3Qgc25kX2phY2sgKmphY2s7Ci0KLX07Ci0KIHN0cnVjdCBwaW5fZGFjX3BhaXIgewogCWhkYV9uaWRfdCBwaW47CiAJaGRhX25pZF90IGRhYzsKQEAgLTExMSw5ICsxMDMsNiBAQAogCiAJdW5zaWduZWQgaW50IHNwZGlmX3JvdXRlOwogCi0JLyogamFjayBkZXRlY3Rpb24gKi8KLQlzdHJ1Y3Qgc25kX2FycmF5IGphY2tzOwotCiAJLyogZHluYW1pYyBjb250cm9scywgaW5pdF92ZXJicyBhbmQgaW5wdXRfbXV4ICovCiAJc3RydWN0IGF1dG9fcGluX2NmZyBhdXRvY2ZnOwogCXN0cnVjdCBoZGFfaW5wdXRfbXV4IHByaXZhdGVfaW11eDsKQEAgLTM5Myw3MSArMzgyLDkgQEAKIAkJCQkgICAgICZzcGVjLT5jdXJfbXV4W2FkY19pZHhdKTsKIH0KIAotI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sKLXN0YXRpYyB2b2lkIGNvbmV4YW50X2ZyZWVfamFja19wcml2KHN0cnVjdCBzbmRfamFjayAqamFjaykKLXsKLQlzdHJ1Y3QgY29uZXhhbnRfamFjayAqamFja3MgPSBqYWNrLT5wcml2YXRlX2RhdGE7Ci0JamFja3MtPm5pZCA9IDA7Ci0JamFja3MtPmphY2sgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGNvbmV4YW50X2FkZF9qYWNrKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQloZGFfbmlkX3QgbmlkLCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYzsKLQlzdHJ1Y3QgY29uZXhhbnRfamFjayAqamFjazsKLQljb25zdCBjaGFyICpuYW1lOwotCWludCBpLCBlcnI7Ci0KLQlzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc25kX2FycmF5X2luaXQoJnNwZWMtPmphY2tzLCBzaXplb2YoKmphY2spLCAzMik7Ci0KLQlqYWNrID0gc3BlYy0+amFja3MubGlzdDsKLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+amFja3MudXNlZDsgaSsrLCBqYWNrKyspCi0JCWlmIChqYWNrLT5uaWQgPT0gbmlkKQotCQkJcmV0dXJuIDAgOyAvKiBhbHJlYWR5IHByZXNlbnQgKi8KLQotCWphY2sgPSBzbmRfYXJyYXlfbmV3KCZzcGVjLT5qYWNrcyk7Ci0JbmFtZSA9ICh0eXBlID09IFNORF9KQUNLX0hFQURQSE9ORSkgPyAiSGVhZHBob25lIiA6ICJNaWMiIDsKLQotCWlmICghamFjaykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlqYWNrLT5uaWQgPSBuaWQ7Ci0JamFjay0+dHlwZSA9IHR5cGU7Ci0KLQllcnIgPSBzbmRfamFja19uZXcoY29kZWMtPmJ1cy0+Y2FyZCwgbmFtZSwgdHlwZSwgJmphY2stPmphY2spOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWphY2stPmphY2stPnByaXZhdGVfZGF0YSA9IGphY2s7Ci0JamFjay0+amFjay0+cHJpdmF0ZV9mcmVlID0gY29uZXhhbnRfZnJlZV9qYWNrX3ByaXY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbmV4YW50X3JlcG9ydF9qYWNrKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQotewotCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IGNvbmV4YW50X2phY2sgKmphY2tzID0gc3BlYy0+amFja3MubGlzdDsKLQotCWlmIChqYWNrcykgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmphY2tzLnVzZWQ7IGkrKykgewotCQkJaWYgKGphY2tzLT5uaWQgPT0gbmlkKSB7Ci0JCQkJdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JCQkJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIG5pZCk7Ci0KLQkJCQlwcmVzZW50ID0gKHByZXNlbnQpID8gamFja3MtPnR5cGUgOiAwIDsKLQotCQkJCXNuZF9qYWNrX3JlcG9ydChqYWNrcy0+amFjaywKLQkJCQkJCXByZXNlbnQpOwotCQkJfQotCQkJamFja3MrKzsKLQkJfQotCX0KLX0KLQogc3RhdGljIGludCBjb25leGFudF9pbml0X2phY2tzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogeworI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBpOwogCkBAIC00NjksMTUgKzM5NiwxNSBAQAogCQkJaW50IGVyciA9IDA7CiAJCQlzd2l0Y2ggKGh2LT5wYXJhbSBeIEFDX1VTUlNQX0VOKSB7CiAJCQljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgotCQkJCWVyciA9IGNvbmV4YW50X2FkZF9qYWNrKGNvZGVjLCBodi0+bmlkLAotCQkJCQkJU05EX0pBQ0tfSEVBRFBIT05FKTsKLQkJCQljb25leGFudF9yZXBvcnRfamFjayhjb2RlYywgaHYtPm5pZCk7CisJCQkJZXJyID0gc25kX2hkYV9pbnB1dF9qYWNrX2FkZChjb2RlYywgaHYtPm5pZCwKKwkJCQkJCVNORF9KQUNLX0hFQURQSE9ORSwgTlVMTCk7CisJCQkJc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChjb2RlYywgaHYtPm5pZCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENYVDUwNTFfUE9SVENfRVZFTlQ6CiAJCQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJCQllcnIgPSBjb25leGFudF9hZGRfamFjayhjb2RlYywgaHYtPm5pZCwKLQkJCQkJCVNORF9KQUNLX01JQ1JPUEhPTkUpOwotCQkJCWNvbmV4YW50X3JlcG9ydF9qYWNrKGNvZGVjLCBodi0+bmlkKTsKKwkJCQllcnIgPSBzbmRfaGRhX2lucHV0X2phY2tfYWRkKGNvZGVjLCBodi0+bmlkLAorCQkJCQkJU05EX0pBQ0tfTUlDUk9QSE9ORSwgTlVMTCk7CisJCQkJc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChjb2RlYywgaHYtPm5pZCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoZXJyIDwgMCkKQEAgLTQ4NSwxOSArNDEyLDkgQEAKIAkJCSsraHY7CiAJCX0KIAl9Ci0JcmV0dXJuIDA7Ci0KLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZXhhbnRfcmVwb3J0X2phY2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNvbmV4YW50X2luaXRfamFja3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17CisjZW5kaWYgLyogQ09ORklHX1NORF9IREFfSU5QVVRfSkFDSyAqLwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgY29uZXhhbnRfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTUxMSwxOCArNDI4LDcgQEAKIAogc3RhdGljIHZvaWQgY29uZXhhbnRfZnJlZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLCi0Jc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpZiAoc3BlYy0+amFja3MubGlzdCkgewotCQlzdHJ1Y3QgY29uZXhhbnRfamFjayAqamFja3MgPSBzcGVjLT5qYWNrcy5saXN0OwotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmphY2tzLnVzZWQ7IGkrKywgamFja3MrKykgewotCQkJaWYgKGphY2tzLT5qYWNrKQotCQkJCXNuZF9kZXZpY2VfZnJlZShjb2RlYy0+YnVzLT5jYXJkLCBqYWNrcy0+amFjayk7Ci0JCX0KLQkJc25kX2FycmF5X2ZyZWUoJnNwZWMtPmphY2tzKTsKLQl9Ci0jZW5kaWYKKwlzbmRfaGRhX2lucHV0X2phY2tfZnJlZShjb2RlYyk7CiAJc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoY29kZWMpOwogCWtmcmVlKGNvZGVjLT5zcGVjKTsKIH0KQEAgLTE3ODcsNyArMTY5Myw3IEBACiAJCWN4dDUwNTFfcG9ydGNfYXV0b21pYyhjb2RlYyk7CiAJCWJyZWFrOwogCX0KLQljb25leGFudF9yZXBvcnRfamFjayhjb2RlYywgbmlkKTsKKwlzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KGNvZGVjLCBuaWQpOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV9wbGF5YmFja19taXhlcnNbXSA9IHsKQEAgLTE5NTksMTAgKzE4NjUsOCBAQAogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCSAgICBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCiAJCQkgICAgQUNfVVNSU1BfRU4gfCBldmVudCk7Ci0jaWZkZWYgQ09ORklHX1NORF9IREFfSU5QVVRfSkFDSwotCWNvbmV4YW50X2FkZF9qYWNrKGNvZGVjLCBuaWQsIFNORF9KQUNLX01JQ1JPUEhPTkUpOwotCWNvbmV4YW50X3JlcG9ydF9qYWNrKGNvZGVjLCBuaWQpOwotI2VuZGlmCisJc25kX2hkYV9pbnB1dF9qYWNrX2FkZChjb2RlYywgbmlkLCBTTkRfSkFDS19NSUNST1BIT05FLCBOVUxMKTsKKwlzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KGNvZGVjLCBuaWQpOwogfQogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfaWRlYXBhZF9pbml0X3ZlcmJzW10gPSB7CkBAIC0zNDc3LDExICszMzgxLDExIEBACiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgogCQljeF9hdXRvX2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJY29uZXhhbnRfcmVwb3J0X2phY2soY29kZWMsIG5pZCk7CisJCXNuZF9oZGFfaW5wdXRfamFja19yZXBvcnQoY29kZWMsIG5pZCk7CiAJCWJyZWFrOwogCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgogCQljeF9hdXRvX2F1dG9taWMoY29kZWMpOwotCQljb25leGFudF9yZXBvcnRfamFjayhjb2RlYywgbmlkKTsKKwkJc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChjb2RlYywgbmlkKTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwppbmRleCBlYzBmYTJkLi4yNTE3NzNlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwpAQCAtMTEwLDYgKzExMCwxMiBAQAogCXU4IExGRVBCTDAxX0xTVjM2X0RNX0lOSDc7CiB9OwogCit1bmlvbiBhdWRpb19pbmZvZnJhbWUgeworCXN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSBoZG1pOworCXN0cnVjdCBkcF9hdWRpb19pbmZvZnJhbWUgZHA7CisJdTggYnl0ZXNbMF07Cit9OworCiAvKgogICogQ0VBIHNwZWFrZXIgcGxhY2VtZW50OgogICoKQEAgLTYyMCw4ICs2MjYsNyBAQAogCWludCBjaGFubmVscyA9IHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHM7CiAJaW50IGNhOwogCWludCBpOwotCXU4IGFpW21heChzaXplb2Yoc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lKSwKLQkJICBzaXplb2Yoc3RydWN0IGRwX2F1ZGlvX2luZm9mcmFtZSkpXTsKKwl1bmlvbiBhdWRpb19pbmZvZnJhbWUgYWk7CiAKIAljYSA9IGhkbWlfY2hhbm5lbF9hbGxvY2F0aW9uKGNvZGVjLCBuaWQsIGNoYW5uZWxzKTsKIApAQCAtNjMzLDExICs2MzgsMTAgQEAKIAogCQlwaW5fbmlkID0gc3BlYy0+cGluW2ldOwogCi0JCW1lbXNldChhaSwgMCwgc2l6ZW9mKGFpKSk7CisJCW1lbXNldCgmYWksIDAsIHNpemVvZihhaSkpOwogCQlpZiAoc3BlYy0+c2lua19lbGRbaV0uY29ubl90eXBlID09IDApIHsgLyogSERNSSAqLwotCQkJc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICpoZG1pX2FpOworCQkJc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICpoZG1pX2FpID0gJmFpLmhkbWk7CiAKLQkJCWhkbWlfYWkgPSAoc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICopYWk7CiAJCQloZG1pX2FpLT50eXBlCQk9IDB4ODQ7CiAJCQloZG1pX2FpLT52ZXIJCT0gMHgwMTsKIAkJCWhkbWlfYWktPmxlbgkJPSAweDBhOwpAQCAtNjQ1LDkgKzY0OSw4IEBACiAJCQloZG1pX2FpLT5DQQkJPSBjYTsKIAkJCWhkbWlfY2hlY2tzdW1fYXVkaW9faW5mb2ZyYW1lKGhkbWlfYWkpOwogCQl9IGVsc2UgaWYgKHNwZWMtPnNpbmtfZWxkW2ldLmNvbm5fdHlwZSA9PSAxKSB7IC8qIERpc3BsYXlQb3J0ICovCi0JCQlzdHJ1Y3QgZHBfYXVkaW9faW5mb2ZyYW1lICpkcF9haTsKKwkJCXN0cnVjdCBkcF9hdWRpb19pbmZvZnJhbWUgKmRwX2FpID0gJmFpLmRwOwogCi0JCQlkcF9haSA9IChzdHJ1Y3QgZHBfYXVkaW9faW5mb2ZyYW1lICopYWk7CiAJCQlkcF9haS0+dHlwZQkJPSAweDg0OwogCQkJZHBfYWktPmxlbgkJPSAweDFiOwogCQkJZHBfYWktPnZlcgkJPSAweDExIDw8IDI7CkBAIC02NjQsNyArNjY3LDggQEAKIAkJICogc2l6ZW9mKCpkcF9haSkgdG8gYXZvaWQgcGFydGlhbCBtYXRjaC91cGRhdGUgcHJvYmxlbXMgd2hlbgogCQkgKiB0aGUgdXNlciBzd2l0Y2hlcyBiZXR3ZWVuIEhETUkvRFAgbW9uaXRvcnMuCiAJCSAqLwotCQlpZiAoIWhkbWlfaW5mb2ZyYW1lX3VwdG9kYXRlKGNvZGVjLCBwaW5fbmlkLCBhaSwgc2l6ZW9mKGFpKSkpIHsKKwkJaWYgKCFoZG1pX2luZm9mcmFtZV91cHRvZGF0ZShjb2RlYywgcGluX25pZCwgYWkuYnl0ZXMsCisJCQkJCSAgICAgc2l6ZW9mKGFpKSkpIHsKIAkJCXNuZF9wcmludGRkKCJoZG1pX3NldHVwX2F1ZGlvX2luZm9mcmFtZTogIgogCQkJCSAgICAiY3Z0PSVkIHBpbj0lZCBjaGFubmVscz0lZFxuIiwKIAkJCQkgICAgbmlkLCBwaW5fbmlkLApAQCAtNjcyLDcgKzY3Niw3IEBACiAJCQloZG1pX3NldHVwX2NoYW5uZWxfbWFwcGluZyhjb2RlYywgcGluX25pZCwgY2EpOwogCQkJaGRtaV9zdG9wX2luZm9mcmFtZV90cmFucyhjb2RlYywgcGluX25pZCk7CiAJCQloZG1pX2ZpbGxfYXVkaW9faW5mb2ZyYW1lKGNvZGVjLCBwaW5fbmlkLAotCQkJCQkJICBhaSwgc2l6ZW9mKGFpKSk7CisJCQkJCQkgIGFpLmJ5dGVzLCBzaXplb2YoYWkpKTsKIAkJCWhkbWlfc3RhcnRfaW5mb2ZyYW1lX3RyYW5zKGNvZGVjLCBwaW5fbmlkKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggNDI2MWJiOC4uNWQ1ODJkZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTI4MiwxMiArMjgyLDYgQEAKIAl1bnNpZ25lZCBjaGFyIGFtaXhfaWR4OwogfTsKIAotc3RydWN0IGFsY19qYWNrIHsKLQloZGFfbmlkX3QgbmlkOwotCWludCB0eXBlOwotCXN0cnVjdCBzbmRfamFjayAqamFjazsKLX07Ci0KICNkZWZpbmUgTVVYX0lEWF9VTkRFRgkoKHVuc2lnbmVkIGNoYXIpLTEpCiAKIHN0cnVjdCBhbGNfY3VzdG9taXplX2RlZmluZSB7CkBAIC0zNjYsOSArMzYwLDYgQEAKIAkvKiBQQ00gaW5mb3JtYXRpb24gKi8KIAlzdHJ1Y3QgaGRhX3BjbSBwY21fcmVjWzNdOwkvKiB1c2VkIGluIGFsY19idWlsZF9wY21zKCkgKi8KIAotCS8qIGphY2sgZGV0ZWN0aW9uICovCi0Jc3RydWN0IHNuZF9hcnJheSBqYWNrczsKLQogCS8qIGR5bmFtaWMgY29udHJvbHMsIGluaXRfdmVyYnMgYW5kIGlucHV0X211eCAqLwogCXN0cnVjdCBhdXRvX3Bpbl9jZmcgYXV0b2NmZzsKIAlzdHJ1Y3QgYWxjX2N1c3RvbWl6ZV9kZWZpbmUgY2RlZmluZTsKQEAgLTM5NCw2ICszODUsNyBAQAogCS8qIG90aGVyIGZsYWdzICovCiAJdW5zaWduZWQgaW50IG5vX2FuYWxvZyA6MTsgLyogZGlnaXRhbCBJL08gb25seSAqLwogCXVuc2lnbmVkIGludCBkdWFsX2FkY19zd2l0Y2g6MTsgLyogc3dpdGNoIEFEQ3MgKGZvciBBTEMyNzUpICovCisJdW5zaWduZWQgaW50IHNpbmdsZV9pbnB1dF9zcmM6MTsKIAlpbnQgaW5pdF9hbXA7CiAJaW50IGNvZGVjX3ZhcmlhbnQ7CS8qIGZsYWcgZm9yIG90aGVyIHZhcmlhbnRzICovCiAKQEAgLTEwMzIsOTQgKzEwMjQsMzIgQEAKIAlhbGNfZml4X3BsbChjb2RlYyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLCi1zdGF0aWMgdm9pZCBhbGNfZnJlZV9qYWNrX3ByaXYoc3RydWN0IHNuZF9qYWNrICpqYWNrKQotewotCXN0cnVjdCBhbGNfamFjayAqamFja3MgPSBqYWNrLT5wcml2YXRlX2RhdGE7Ci0JamFja3MtPm5pZCA9IDA7Ci0JamFja3MtPmphY2sgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGFsY19hZGRfamFjayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJaGRhX25pZF90IG5pZCwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjOwotCXN0cnVjdCBhbGNfamFjayAqamFjazsKLQljb25zdCBjaGFyICpuYW1lOwotCWludCBlcnI7Ci0KLQlzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc25kX2FycmF5X2luaXQoJnNwZWMtPmphY2tzLCBzaXplb2YoKmphY2spLCAzMik7Ci0JamFjayA9IHNuZF9hcnJheV9uZXcoJnNwZWMtPmphY2tzKTsKLQlpZiAoIWphY2spCi0JCXJldHVybiAtRU5PTUVNOwotCi0JamFjay0+bmlkID0gbmlkOwotCWphY2stPnR5cGUgPSB0eXBlOwotCW5hbWUgPSAodHlwZSA9PSBTTkRfSkFDS19IRUFEUEhPTkUpID8gIkhlYWRwaG9uZSIgOiAiTWljIiA7Ci0KLQllcnIgPSBzbmRfamFja19uZXcoY29kZWMtPmJ1cy0+Y2FyZCwgbmFtZSwgdHlwZSwgJmphY2stPmphY2spOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWphY2stPmphY2stPnByaXZhdGVfZGF0YSA9IGphY2s7Ci0JamFjay0+amFjay0+cHJpdmF0ZV9mcmVlID0gYWxjX2ZyZWVfamFja19wcml2OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhbGNfcmVwb3J0X2phY2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IGFsY19qYWNrICpqYWNrcyA9IHNwZWMtPmphY2tzLmxpc3Q7Ci0KLQlpZiAoamFja3MpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5qYWNrcy51c2VkOyBpKyspIHsKLQkJCWlmIChqYWNrcy0+bmlkID09IG5pZCkgewotCQkJCXVuc2lnbmVkIGludCBwcmVzZW50OwotCQkJCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBuaWQpOwotCi0JCQkJcHJlc2VudCA9IChwcmVzZW50KSA/IGphY2tzLT50eXBlIDogMDsKLQotCQkJCXNuZF9qYWNrX3JlcG9ydChqYWNrcy0+amFjaywgcHJlc2VudCk7Ci0JCQl9Ci0JCQlqYWNrcysrOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgaW50IGFsY19pbml0X2phY2tzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogeworI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBocF9uaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07CiAJdW5zaWduZWQgaW50IG1pY19uaWQgPSBzcGVjLT5leHRfbWljLnBpbjsKIAogCWlmIChocF9uaWQpIHsKLQkJZXJyID0gYWxjX2FkZF9qYWNrKGNvZGVjLCBocF9uaWQsIFNORF9KQUNLX0hFQURQSE9ORSk7CisJCWVyciA9IHNuZF9oZGFfaW5wdXRfamFja19hZGQoY29kZWMsIGhwX25pZCwKKwkJCQkJICAgICBTTkRfSkFDS19IRUFEUEhPTkUsIE5VTEwpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCWFsY19yZXBvcnRfamFjayhjb2RlYywgaHBfbmlkKTsKKwkJc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChjb2RlYywgaHBfbmlkKTsKIAl9CiAKIAlpZiAobWljX25pZCkgewotCQllcnIgPSBhbGNfYWRkX2phY2soY29kZWMsIG1pY19uaWQsIFNORF9KQUNLX01JQ1JPUEhPTkUpOworCQllcnIgPSBzbmRfaGRhX2lucHV0X2phY2tfYWRkKGNvZGVjLCBtaWNfbmlkLAorCQkJCQkgICAgIFNORF9KQUNLX01JQ1JPUEhPTkUsIE5VTEwpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCWFsY19yZXBvcnRfamFjayhjb2RlYywgbWljX25pZCk7CisJCXNuZF9oZGFfaW5wdXRfamFja19yZXBvcnQoY29kZWMsIG1pY19uaWQpOwogCX0KLQorI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sgKi8KIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgYWxjX3JlcG9ydF9qYWNrKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBhbGNfaW5pdF9qYWNrcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBhbGNfYXV0b211dGVfc3BlYWtlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBpbmN0bCkKIHsKQEAgLTExMzMsNyArMTA2Myw3IEBACiAJCW5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1tpXTsKIAkJaWYgKCFuaWQpCiAJCQlicmVhazsKLQkJYWxjX3JlcG9ydF9qYWNrKGNvZGVjLCBuaWQpOworCQlzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KGNvZGVjLCBuaWQpOwogCQlzcGVjLT5qYWNrX3ByZXNlbnQgfD0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgbmlkKTsKIAl9CiAKQEAgLTEyNDAsNyArMTE3MCw3IEBACiAJCQkJCSAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCiAJCQkJCSAgYWxpdmUtPm11eF9pZHgpOwogCX0KLQlhbGNfcmVwb3J0X2phY2soY29kZWMsIHNwZWMtPmV4dF9taWMucGluKTsKKwlzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KGNvZGVjLCBzcGVjLT5leHRfbWljLnBpbik7CiAKIAkvKiBGSVhNRTogYW5hbG9nIG1peGVyICovCiB9CkBAIC0xMzM1LDYgKzEyNjUsNyBAQAogCQljYXNlIDB4MTBlYzA2NjA6CiAJCWNhc2UgMHgxMGVjMDY2MjoKIAkJY2FzZSAweDEwZWMwNjYzOgorCQljYXNlIDB4MTBlYzA2NjU6CiAJCWNhc2UgMHgxMGVjMDg2MjoKIAkJY2FzZSAweDEwZWMwODg5OgogCQkJc2V0X2VhcGQoY29kZWMsIDB4MTQsIDEpOwpAQCAtMjI5MiwxMyArMjIyMywxMyBAQAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDIsIDB4MCwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAxLCAweDAsCiAJCUhEQV9PVVRQVVQpLAotCUhEQV9CSU5EX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGYsIDIsIDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRV9NT05PKCJMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQklORF9NVVRFX01PTk8oIkxGRSBQbGF5YmFjayBTd2l0Y2giLCAweDBmLCAxLCAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNpZGUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQklORF9NVVRFKCJTaWRlIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDIsIEhEQV9JTlBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMSwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDIsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJJbnRlcm5hbCBMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkludGVybmFsIExGRSBQbGF5YmFjayBTd2l0Y2giLCAweDBmLCAxLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLApAQCAtMjMwOSw3ICsyMjQwLDYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi0KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODlfYWNlcl9hc3BpcmVfODkzMGdfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCkBAIC0zOTE5LDYgKzM4NDksOCBAQAogICogQ29tbW9uIGNhbGxiYWNrcwogICovCiAKK3N0YXRpYyB2b2lkIGFsY19pbml0X3NwZWNpYWxfaW5wdXRfc3JjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwogc3RhdGljIGludCBhbGNfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM5MjksNiArMzg2MSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2luaXRfdmVyYnM7IGkrKykKIAkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgc3BlYy0+aW5pdF92ZXJic1tpXSk7CisJYWxjX2luaXRfc3BlY2lhbF9pbnB1dF9zcmMoY29kZWMpOwogCiAJaWYgKHNwZWMtPmluaXRfaG9vaykKIAkJc3BlYy0+aW5pdF9ob29rKGNvZGVjKTsKQEAgLTQyODQsNiArNDIxNyw3IEBACiAJCXJldHVybjsKIAogCWFsY19zaHV0dXAoY29kZWMpOworCXNuZF9oZGFfaW5wdXRfamFja19mcmVlKGNvZGVjKTsKIAlhbGNfZnJlZV9rY3Rscyhjb2RlYyk7CiAJa2ZyZWUoc3BlYyk7CiAJc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoY29kZWMpOwpAQCAtNDMwNyw2ICs0MjQxLDcgQEAKIAljYXNlIDB4MTBlYzA2NjA6CiAJY2FzZSAweDEwZWMwNjYyOgogCWNhc2UgMHgxMGVjMDY2MzoKKwljYXNlIDB4MTBlYzA2NjU6CiAJY2FzZSAweDEwZWMwODYyOgogCWNhc2UgMHgxMGVjMDg4OToKIAkJc2V0X2VhcGQoY29kZWMsIDB4MTQsIDApOwpAQCAtNDcwMiw3ICs0NjM3LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTU1OCwgMHg1NDAxLCAiQVNVUyIsIEFMQzg4MF9BU1VTX0RJRzIpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMDIsICJCaW9zdGFyIiwgQUxDODgwXzVTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNTg0LCAweDkwNTAsICJVbml3aWxsIiwgQUxDODgwX1VOSVdJTExfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTU4NCwgMHg5MDU0LCAiVW5pd2xsbCIsIEFMQzg4MF9GMTczNCksCisJU05EX1BDSV9RVUlSSygweDE1ODQsIDB4OTA1NCwgIlVuaXdpbGwiLCBBTEM4ODBfRjE3MzQpLAogCVNORF9QQ0lfUVVJUksoMHgxNTg0LCAweDkwNzAsICJVbml3aWxsIiwgQUxDODgwX1VOSVdJTEwpLAogCVNORF9QQ0lfUVVJUksoMHgxNTg0LCAweDkwNzcsICJVbml3aWxsIFA1MyIsIEFMQzg4MF9VTklXSUxMX1A1MyksCiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjAzZCwgIlc4MTAiLCBBTEM4ODBfVzgxMCksCkBAIC01MTUxLDcgKzUwODYsOSBAQAogCiAJc3dpdGNoIChjZmctPmxpbmVfb3V0X3R5cGUpIHsKIAljYXNlIEFVVE9fUElOX1NQRUFLRVJfT1VUOgotCQlyZXR1cm4gIlNwZWFrZXIiOworCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSkKKwkJCXJldHVybiAiU3BlYWtlciI7CisJCWJyZWFrOwogCWNhc2UgQVVUT19QSU5fSFBfT1VUOgogCQlyZXR1cm4gIkhlYWRwaG9uZSI7CiAJZGVmYXVsdDoKQEAgLTUyMDUsMTYgKzUxNDIsMTkgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewogCQkJY29uc3QgY2hhciAqbmFtZSA9IHBmeDsKLQkJCWlmICghbmFtZSkKKwkJCWludCBpbmRleCA9IGk7CisJCQlpZiAoIW5hbWUpIHsKIAkJCQluYW1lID0gY2huYW1lW2ldOworCQkJCWluZGV4ID0gMDsKKwkJCX0KIAkJCWVyciA9IF9fYWRkX3BiX3ZvbF9jdHJsKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKLQkJCQkJCW5hbWUsIGksCisJCQkJCQluYW1lLCBpbmRleCwKIAkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKIAkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQkJZXJyID0gX19hZGRfcGJfc3dfY3RybChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwKLQkJCQkJICAgICAgIG5hbWUsIGksCisJCQkJCSAgICAgICBuYW1lLCBpbmRleCwKIAkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMiwKIAkJCQkJCQkgICAgICBIREFfSU5QVVQpKTsKIAkJCWlmIChlcnIgPCAwKQpAQCAtNTU4NSw2ICs1NTI1LDcgQEAKIAkJCXNwZWMtPmNhcHNyY19uaWRzICs9IGk7CiAJCXNwZWMtPmFkY19uaWRzICs9IGk7CiAJCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7CisJCXNwZWMtPnNpbmdsZV9pbnB1dF9zcmMgPSAxOwogCX0KIH0KIApAQCAtNTU5Niw2ICs1NTM3LDE2IEBACiAJaW5pdF9jYXBzcmNfZm9yX3Bpbihjb2RlYywgc3BlYy0+aW50X21pYy5waW4pOwogfQogCisvKiBpbml0aWFsaXplIHNvbWUgc3BlY2lhbCBjYXNlcyBmb3IgaW5wdXQgc291cmNlcyAqLworc3RhdGljIHZvaWQgYWxjX2luaXRfc3BlY2lhbF9pbnB1dF9zcmMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKHNwZWMtPmR1YWxfYWRjX3N3aXRjaCkKKwkJZml4dXBfZHVhbF9hZGNfc3dpdGNoKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT5zaW5nbGVfaW5wdXRfc3JjKQorCQlpbml0X2NhcHNyY19mb3JfcGluKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmlucHV0c1swXS5waW4pOworfQorCiBzdGF0aWMgdm9pZCBzZXRfY2FwdHVyZV9taXhlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTU2MTEsNyArNTU2Miw3IEBACiAJCWludCBtdXggPSAwOwogCQlpbnQgbnVtX2FkY3MgPSBzcGVjLT5udW1fYWRjX25pZHM7CiAJCWlmIChzcGVjLT5kdWFsX2FkY19zd2l0Y2gpCi0JCQlmaXh1cF9kdWFsX2FkY19zd2l0Y2goY29kZWMpOworCQkJbnVtX2FkY3MgPSAxOwogCQllbHNlIGlmIChzcGVjLT5hdXRvX21pYykKIAkJCWZpeHVwX2F1dG9taWNfYWRjKGNvZGVjKTsKIAkJZWxzZSBpZiAoc3BlYy0+aW5wdXRfbXV4KSB7CkBAIC01NjIwLDggKzU1NzEsNiBAQAogCQkJZWxzZSBpZiAoc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPT0gMSkKIAkJCQlmaXh1cF9zaW5nbGVfYWRjKGNvZGVjKTsKIAkJfQotCQlpZiAoc3BlYy0+ZHVhbF9hZGNfc3dpdGNoKQotCQkJbnVtX2FkY3MgPSAxOwogCQlzcGVjLT5jYXBfbWl4ZXIgPSBjYXBzW211eF1bbnVtX2FkY3MgLSAxXTsKIAl9CiB9CkBAIC0xMDc0OCw2ICsxMDY5Nyw3IEBACiAgKi8KIGVudW0gewogCVBJTkZJWF9BQklUX0FXOURfTUFYLAorCVBJTkZJWF9MRU5PVk9fWTUzMCwKIAlQSU5GSVhfUEJfTTUyMTAsCiAJUElORklYX0FDRVJfQVNQSVJFXzc3MzYsCiB9OwpAQCAtMTA3NjIsNiArMTA3MTIsMTQgQEAKIAkJCXsgfQogCQl9CiAJfSwKKwlbUElORklYX0xFTk9WT19ZNTMwXSA9IHsKKwkJLnR5cGUgPSBBTENfRklYVVBfUElOUywKKwkJLnYucGlucyA9IChjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZ1tdKSB7CisJCQl7IDB4MTUsIDB4OTkxMzAxMTIgfSwgLyogcmVhciBpbnQgc3BlYWtlcnMgKi8KKwkJCXsgMHgxNiwgMHg5OTEzMDExMSB9LCAvKiBzdWJ3b29mZXIgKi8KKwkJCXsgfQorCQl9CisJfSwKIAlbUElORklYX1BCX001MjEwXSA9IHsKIAkJLnR5cGUgPSBBTENfRklYVVBfVkVSQlMsCiAJCS52LnZlcmJzID0gKGNvbnN0IHN0cnVjdCBoZGFfdmVyYltdKSB7CkBAIC0xMDc3Nyw2ICsxMDczNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfZml4dXBfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1NSwgIlBhY2thcmQtQmVsbCBNNTEyMCIsIFBJTkZJWF9QQl9NNTIxMCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2EwZCwgIkxlbm92byBZNTMwIiwgUElORklYX0xFTk9WT19ZNTMwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDdhLCAiQWJpdCBBVzlELU1BWCIsIFBJTkZJWF9BQklUX0FXOURfTUFYKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMjk2LCAiQWNlciBBc3BpcmUgNzczNnoiLCBQSU5GSVhfQUNFUl9BU1BJUkVfNzczNiksCiAJe30KQEAgLTEwODI5LDIzICsxMDc4OCwyOCBAQAogCWhkYV9uaWRfdCBwaW4sIGRhYzsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaHBfcGlucyk7IGkrKykgewotCQlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbaV07Ci0JCWlmICghcGluKQotCQkJYnJlYWs7Ci0JCWRhYyA9IHNwZWMtPm11bHRpb3V0LmhwX25pZDsKLQkJaWYgKCFkYWMpCi0JCQlkYWMgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXTsgLyogdG8gZnJvbnQgKi8KLQkJYWxjODgyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwgZGFjKTsKKwlpZiAoc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlICE9IEFVVE9fUElOX0hQX09VVCkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpOyBpKyspIHsKKwkJCXBpbiA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1tpXTsKKwkJCWlmICghcGluKQorCQkJCWJyZWFrOworCQkJZGFjID0gc3BlYy0+bXVsdGlvdXQuaHBfbmlkOworCQkJaWYgKCFkYWMpCisJCQkJZGFjID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF07IC8qIHRvIGZyb250ICovCisJCQlhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLCBkYWMpOworCQl9CiAJfQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zKTsgaSsrKSB7Ci0JCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zW2ldOwotCQlpZiAoIXBpbikKLQkJCWJyZWFrOwotCQlkYWMgPSBzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdOwotCQlpZiAoIWRhYykKLQkJCWRhYyA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdOyAvKiB0byBmcm9udCAqLwotCQlhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgZGFjKTsKKworCWlmIChzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUgIT0gQVVUT19QSU5fU1BFQUtFUl9PVVQpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnMpOyBpKyspIHsKKwkJCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zW2ldOworCQkJaWYgKCFwaW4pCisJCQkJYnJlYWs7CisJCQlkYWMgPSBzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdOworCQkJaWYgKCFkYWMpCisJCQkJZGFjID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF07IC8qIHRvIGZyb250ICovCisJCQlhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgZGFjKTsKKwkJfQogCX0KIH0KIApAQCAtMTM3OTYsNiArMTM3NjAsNyBAQAogfQogCiAjZGVmaW5lIGFsYzI2OF9hdXRvX2luaXRfYW5hbG9nX2lucHV0CWFsYzg4Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0CisjZGVmaW5lIGFsYzI2OF9hdXRvX2luaXRfaW5wdXRfc3JjCWFsYzg4Ml9hdXRvX2luaXRfaW5wdXRfc3JjCiAKIC8qIGluaXQgY2FsbGJhY2sgZm9yIGF1dG8tY29uZmlndXJhdGlvbiBtb2RlbCAtLSBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGluaXQgKi8KIHN0YXRpYyB2b2lkIGFsYzI2OF9hdXRvX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xMzgwNSw2ICsxMzc3MCw3IEBACiAJYWxjMjY4X2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCWFsYzI2OF9hdXRvX2luaXRfbW9ub19zcGVha2VyX291dChjb2RlYyk7CiAJYWxjMjY4X2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOworCWFsYzI2OF9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlhbGNfYXV0b19pbml0X2RpZ2l0YWwoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKQEAgLTE0MDkyLDcgKzE0MDU4LDYgQEAKIAlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJiAhc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwotCQlpbnQgaTsKIAogCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OF9jYXBzcmNfbmlkczsKIAkJLyogZ2V0IHR5cGUgKi8KQEAgLTE0MTEyLDEzICsxNDA3Nyw2IEBACiAJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2OF9hZGNfbmlkcyk7CiAJCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY4X2NhcHR1cmVfbWl4ZXIpOwogCQl9Ci0JCS8qIHNldCBkZWZhdWx0IGlucHV0IHNvdXJjZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspCi0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBhbGMyNjhfY2Fwc3JjX25pZHNbaV0sCi0JCQkJMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCi0JCQkJaSA8IHNwZWMtPm51bV9tdXhfZGVmcyA/Ci0JCQkJc3BlYy0+aW5wdXRfbXV4W2ldLml0ZW1zWzBdLmluZGV4IDoKLQkJCQlzcGVjLT5pbnB1dF9tdXgtPml0ZW1zWzBdLmluZGV4KTsKIAl9CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDI7CkBAIC0xNDQ5NSw3ICsxNDQ1Myw3IEBACiAJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CiAJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDBjLCBIREFfSU5QVVQsIDEsCiAJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci0JYWxjX3JlcG9ydF9qYWNrKGNvZGVjLCBuaWQpOworCXNuZF9oZGFfaW5wdXRfamFja19yZXBvcnQoY29kZWMsIG5pZCk7CiB9CiAKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KQEAgLTE0ODA3LDExICsxNDc2NSw2IEBACiAJCWZpbGx1cF9wcml2X2FkY19uaWRzKGNvZGVjLCBhbGMyNjlfYWRjX2NhbmRpZGF0ZXMsCiAJCQkJICAgICBzaXplb2YoYWxjMjY5X2FkY19jYW5kaWRhdGVzKSk7CiAKLQkvKiBzZXQgZGVmYXVsdCBpbnB1dCBzb3VyY2UgKi8KLQlpZiAoIXNwZWMtPmR1YWxfYWRjX3N3aXRjaCkKLQkJc2VsZWN0X29yX3VubXV0ZV9jYXBzcmMoY29kZWMsIHNwZWMtPmNhcHNyY19uaWRzWzBdLAotCQkJCQlzcGVjLT5pbnB1dF9tdXgtPml0ZW1zWzBdLmluZGV4KTsKLQogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTQ4MjUsNiArMTQ3NzgsNyBAQAogI2RlZmluZSBhbGMyNjlfYXV0b19pbml0X211bHRpX291dAlhbGMyNjhfYXV0b19pbml0X211bHRpX291dAogI2RlZmluZSBhbGMyNjlfYXV0b19pbml0X2hwX291dAkJYWxjMjY4X2F1dG9faW5pdF9ocF9vdXQKICNkZWZpbmUgYWxjMjY5X2F1dG9faW5pdF9hbmFsb2dfaW5wdXQJYWxjODgyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQKKyNkZWZpbmUgYWxjMjY5X2F1dG9faW5pdF9pbnB1dF9zcmMJYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMKIAogCiAvKiBpbml0IGNhbGxiYWNrIGZvciBhdXRvLWNvbmZpZ3VyYXRpb24gbW9kZWwgLS0gb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBpbml0ICovCkBAIC0xNDgzNCw2ICsxNDc4OCw4IEBACiAJYWxjMjY5X2F1dG9faW5pdF9tdWx0aV9vdXQoY29kZWMpOwogCWFsYzI2OV9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKIAlhbGMyNjlfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CisJaWYgKCFzcGVjLT5kdWFsX2FkY19zd2l0Y2gpCisJCWFsYzI2OV9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlhbGNfYXV0b19pbml0X2RpZ2l0YWwoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKQEAgLTE2MDUyLDkgKzE2MDA4LDEyIEBACiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIHsKIAkJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZng7Ci0JCQlpZiAoIW5hbWUpCisJCQlpbnQgaW5kZXggPSBpOworCQkJaWYgKCFuYW1lKSB7CiAJCQkJbmFtZSA9IGNobmFtZVtpXTsKLQkJCWVyciA9IF9fYWxjODYxX2NyZWF0ZV9vdXRfc3coY29kZWMsIG5hbWUsIG5pZCwgaSwgMyk7CisJCQkJaW5kZXggPSAwOworCQkJfQorCQkJZXJyID0gX19hbGM4NjFfY3JlYXRlX291dF9zdyhjb2RlYywgbmFtZSwgbmlkLCBpbmRleCwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xNzIwNSwxNiArMTcxNjQsMTkgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewogCQkJY29uc3QgY2hhciAqbmFtZSA9IHBmeDsKLQkJCWlmICghbmFtZSkKKwkJCWludCBpbmRleCA9IGk7CisJCQlpZiAoIW5hbWUpIHsKIAkJCQluYW1lID0gY2huYW1lW2ldOworCQkJCWluZGV4ID0gMDsKKwkJCX0KIAkJCWVyciA9IF9fYWRkX3BiX3ZvbF9jdHJsKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKLQkJCQkJCW5hbWUsIGksCisJCQkJCQluYW1lLCBpbmRleCwKIAkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZF92LCAzLCAwLAogCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCQllcnIgPSBfX2FkZF9wYl9zd19jdHJsKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLAotCQkJCQkgICAgICAgbmFtZSwgaSwKKwkJCQkJICAgICAgIG5hbWUsIGluZGV4LAogCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3MsIDMsIDIsCiAJCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CiAJCQlpZiAoZXJyIDwgMCkKQEAgLTE5MjYzLDEyICsxOTIyNSwxNSBAQAogCQkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSB7CiAJCQljb25zdCBjaGFyICpuYW1lID0gcGZ4OwotCQkJaWYgKCFuYW1lKQorCQkJaW50IGluZGV4ID0gaTsKKwkJCWlmICghbmFtZSkgewogCQkJCW5hbWUgPSBjaG5hbWVbaV07Ci0JCQllcnIgPSBfX2FsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCBuYW1lLCBuaWQsIGksIDMpOworCQkJCWluZGV4ID0gMDsKKwkJCX0KKwkJCWVyciA9IF9fYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIG5hbWUsIG5pZCwgaW5kZXgsIDMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IF9fYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgbmFtZSwgbWl4LCBpLCAzKTsKKwkJCWVyciA9IF9fYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgbmFtZSwgbWl4LCBpbmRleCwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggYmQ3YjEyMy4uMDVmY2Q2MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMTgwLDE4ICsxODAsMTYgQEAKIAlpbnQgZGF0YTsKIH07CiAKLXN0cnVjdCBzaWdtYXRlbF9qYWNrIHsKLQloZGFfbmlkX3QgbmlkOwotCWludCB0eXBlOwotCXN0cnVjdCBzbmRfamFjayAqamFjazsKLX07Ci0KIHN0cnVjdCBzaWdtYXRlbF9taWNfcm91dGUgewogCWhkYV9uaWRfdCBwaW47CiAJc2lnbmVkIGNoYXIgbXV4X2lkeDsKIAlzaWduZWQgY2hhciBkbXV4X2lkeDsKIH07CiAKKyNkZWZpbmUgTUFYX1BJTlNfTlVNIDE2CisjZGVmaW5lIE1BWF9BRENTX05VTSA0CisjZGVmaW5lIE1BWF9ETUlDU19OVU0gNAorCiBzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s0XTsKIAl1bnNpZ25lZCBpbnQgbnVtX21peGVyczsKQEAgLTIyOSw5ICsyMjcsNiBAQAogCWhkYV9uaWRfdCAqcHdyX25pZHM7CiAJaGRhX25pZF90ICpkYWNfbGlzdDsKIAotCS8qIGphY2sgZGV0ZWN0aW9uICovCi0Jc3RydWN0IHNuZF9hcnJheSBqYWNrczsKLQogCS8qIGV2ZW50cyAqLwogCXN0cnVjdCBzbmRfYXJyYXkgZXZlbnRzOwogCkBAIC0zMDksNiArMzA0LDE3IEBACiAJc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9pbXV4OwogCXN0cnVjdCBoZGFfaW5wdXRfbXV4IHByaXZhdGVfc211eDsKIAlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX21vbm9fbXV4OworCisJLyogYXV0byBzcGVjICovCisJdW5zaWduZWQgYXV0b19waW5fY250OworCWhkYV9uaWRfdCBhdXRvX3Bpbl9uaWRzW01BWF9QSU5TX05VTV07CisJdW5zaWduZWQgYXV0b19hZGNfY250OworCWhkYV9uaWRfdCBhdXRvX2FkY19uaWRzW01BWF9BRENTX05VTV07CisJaGRhX25pZF90IGF1dG9fbXV4X25pZHNbTUFYX0FEQ1NfTlVNXTsKKwloZGFfbmlkX3QgYXV0b19kbXV4X25pZHNbTUFYX0FEQ1NfTlVNXTsKKwl1bnNpZ25lZCBsb25nIGF1dG9fY2Fwdm9sc1tNQVhfQURDU19OVU1dOworCXVuc2lnbmVkIGF1dG9fZG1pY19jbnQ7CisJaGRhX25pZF90IGF1dG9fZG1pY19uaWRzW01BWF9ETUlDU19OVU1dOwogfTsKIAogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTIwMF9hZGNfbmlkc1sxXSA9IHsKQEAgLTM2NCwxNCArMzcwLDYgQEAKIAogI2RlZmluZSBTVEFDOTJIRDgzX0RBQ19DT1VOVCAzCiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9tdXhfbmlkc1syXSA9IHsKLQkweDE3LCAweDE4LAotfTsKLQotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X2FkY19uaWRzWzJdID0gewotCTB4MTUsIDB4MTYsCi19OwotCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfcHdyX25pZHNbNF0gPSB7CiAJMHhhLCAweGIsIDB4ZCwgMHhlLAogfTsKQEAgLTM4NCwyNiArMzgyLDEwIEBACiAJMHgwMywgMHgwYywgMHgyMCwgMHg0MCwKIH07CiAKLSNkZWZpbmUgU1RBQzkySEQ4M1hYWF9OVU1fRE1JQ1MJIDIKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9kbWljX25pZHNbU1RBQzkySEQ4M1hYWF9OVU1fRE1JQ1MgKyAxXSA9IHsKLQkweDExLCAweDIwLCAwCitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfZG1pY19uaWRzW10gPSB7CisJCTB4MTEsIDB4MjAsCiB9OwogCi0jZGVmaW5lIFNUQUM5MkhEODhYWFhfTlVNX0RNSUNTCVNUQUM5MkhEODNYWFhfTlVNX0RNSUNTCi0jZGVmaW5lIHN0YWM5MmhkODh4eHhfZG1pY19uaWRzCXN0YWM5MmhkODN4eHhfZG1pY19uaWRzCi0KLSNkZWZpbmUgU1RBQzkySEQ4N0JfTlVNX0RNSUNTCSAxCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODdiX2RtaWNfbmlkc1tTVEFDOTJIRDg3Ql9OVU1fRE1JQ1MgKyAxXSA9IHsKLQkweDExLCAwCi19OwotCi0jZGVmaW5lIFNUQUM5MkhEODNYWFhfTlVNX0NBUFMJMgotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhYzkyaGQ4M3h4eF9jYXB2b2xzW10gPSB7Ci0JSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE3LCAzLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTgsIDMsIDAsIEhEQV9PVVRQVVQpLAotfTsKLSNkZWZpbmUgc3RhYzkyaGQ4M3h4eF9jYXBzd3MJc3RhYzkyaGQ4M3h4eF9jYXB2b2xzCi0KIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9wd3Jfbmlkc1szXSA9IHsKIAkweDBhLCAweDBkLCAweDBmCiB9OwpAQCAtNTgxLDIxICs1NjMsNiBAQAogCTB4MTQsIDB4MjIsIDB4MjMKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9waW5fbmlkc1sxMF0gPSB7Ci0JMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwKLQkweDBmLCAweDEwLCAweDExLCAweDFmLCAweDIwLAotfTsKLQotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDg3eHh4X3Bpbl9uaWRzWzZdID0gewotCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsCi0JMHgwZiwgMHgxMSwKLX07Ci0KLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4OHh4eF9waW5fbmlkc1s4XSA9IHsKLQkweDBhLCAweDBiLCAweDBjLCAweDBkLAotCTB4MGYsIDB4MTEsIDB4MWYsIDB4MjAsCi19OwotCiAjZGVmaW5lIFNUQUM5MkhENzFCWFhfTlVNX1BJTlMgMTMKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDAwLApAQCAtNzU3LDcgKzcyNCw3IEBACiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgYWRjX2lkeCA9IHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpOwogCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gc3BlYy0+aW5wdXRfbXV4OwotCXVuc2lnbmVkIGludCBpZHgsIHByZXZfaWR4OworCXVuc2lnbmVkIGludCBpZHgsIHByZXZfaWR4LCBkaWR4OwogCiAJaWR4ID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAlpZiAoaWR4ID49IGltdXgtPm51bV9pdGVtcykKQEAgLTc2OSw3ICs3MzYsOCBAQAogCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBzcGVjLT5tdXhfbmlkc1thZGNfaWR4XSwgMCwKIAkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKIAkJCQkJICBpbXV4LT5pdGVtc1tpZHhdLmluZGV4KTsKLQkJaWYgKHByZXZfaWR4ID49IHNwZWMtPm51bV9hbmFsb2dfbXV4ZXMpIHsKKwkJaWYgKHByZXZfaWR4ID49IHNwZWMtPm51bV9hbmFsb2dfbXV4ZXMgJiYKKwkJICAgIHNwZWMtPm11eF9uaWRzW2FkY19pZHhdICE9IHNwZWMtPmRtdXhfbmlkc1thZGNfaWR4XSkgewogCQkJaW11eCA9IHNwZWMtPmRpbnB1dF9tdXg7CiAJCQkvKiAwID0gYW5hbG9nICovCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLApAQCAtNzc5LDkgKzc0NywxMyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaW11eCA9IHNwZWMtPmRpbnB1dF9tdXg7CisJCS8qIGZpcnN0IGRpbXV4IGl0ZW0gaXMgaGFyZGNvZGVkIHRvIHNlbGVjdCBhbmFsb2cgaW11eCwKKwkJICogc28gbGV0cyBza2lwIGl0CisJCSAqLworCQlkaWR4ID0gaWR4IC0gc3BlYy0+bnVtX2FuYWxvZ19tdXhlcyArIDE7CiAJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHNwZWMtPmRtdXhfbmlkc1thZGNfaWR4XSwgMCwKIAkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKLQkJCQkJICBpbXV4LT5pdGVtc1tpZHggLSAxXS5pbmRleCk7CisJCQkJCSAgaW11eC0+aXRlbXNbZGlkeF0uaW5kZXgpOwogCX0KIAlzcGVjLT5jdXJfbXV4W2FkY19pZHhdID0gaWR4OwogCXJldHVybiAxOwpAQCAtMzQxOSw2ICszMzkxLDE3IEBACiAJIkRpZ2l0YWwgTWljIDMiLCAiRGlnaXRhbCBNaWMgNCIKIH07CiAKK3N0YXRpYyBoZGFfbmlkX3QgZ2V0X2Nvbm5lY3RlZF9ub2RlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbXV4LAorCQkJCSAgICBpbnQgaWR4KQoreworCWhkYV9uaWRfdCBjb25uW0hEQV9NQVhfTlVNX0lOUFVUU107CisJaW50IG51bXM7CisJbnVtcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBtdXgsIGNvbm4sIEFSUkFZX1NJWkUoY29ubikpOworCWlmIChpZHggPj0gMCAmJiBpZHggPCBudW1zKQorCQlyZXR1cm4gY29ubltpZHhdOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGdldF9jb25uZWN0aW9uX2luZGV4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbXV4LAogCQkJCWhkYV9uaWRfdCBuaWQpCiB7CkBAIC0zNDI5LDYgKzM0MTIsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtczsgaSsrKQogCQlpZiAoY29ubltpXSA9PSBuaWQpCiAJCQlyZXR1cm4gaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1zOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBjb25uW2ldKTsKKwkJdW5zaWduZWQgaW50IHdpZF90eXBlID0gZ2V0X3djYXBzX3R5cGUod2lkX2NhcHMpOworCisJCWlmICh3aWRfdHlwZSAhPSBBQ19XSURfUElOICYmIHdpZF90eXBlICE9IEFDX1dJRF9BVURfTUlYKQorCQkJaWYgKGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLCBjb25uW2ldLCBuaWQpID49IDApCisJCQkJcmV0dXJuIGk7CisJfQogCXJldHVybiAtMTsKIH0KIApAQCAtMzUwMSw2ICszNDkzLDE2IEBACiAJCQkJCQkgICAgICB0eXBlX2lkeCwgSERBX09VVFBVVCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOworCQkJaWYgKCFlcnIpIHsKKwkJCQluaWQgPSBnZXRfY29ubmVjdGVkX25vZGUoY29kZWMsCisJCQkJCQlzcGVjLT5kbXV4X25pZHNbMF0sIGluZGV4KTsKKwkJCQlpZiAobmlkKQorCQkJCQllcnIgPSBjcmVhdGVfZWxlbV9jYXB0dXJlX3ZvbChjb2RlYywKKwkJCQkJCQluaWQsIGxhYmVsLAorCQkJCQkJCXR5cGVfaWR4LCBIREFfSU5QVVQpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQogCQl9CiAJfQogCkBAIC00MDU0LDIxICs0MDU2LDEwIEBACiAJCQkgICBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIGdwaW9zdGF0ZSk7IC8qIHN5bmMgKi8KIH0KIAotI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sKLXN0YXRpYyB2b2lkIHN0YWM5Mnh4X2ZyZWVfamFja19wcml2KHN0cnVjdCBzbmRfamFjayAqamFjaykKLXsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfamFjayAqamFja3MgPSBqYWNrLT5wcml2YXRlX2RhdGE7Ci0JamFja3MtPm5pZCA9IDA7Ci0JamFja3MtPmphY2sgPSBOVUxMOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RhYzkyeHhfYWRkX2phY2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCWhkYV9uaWRfdCBuaWQsIGludCB0eXBlKQogewogI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXN0cnVjdCBzaWdtYXRlbF9qYWNrICpqYWNrOwogCWludCBkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlpbnQgY29ubmVjdGl2aXR5ID0gZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKTsKIAljaGFyIG5hbWVbMzJdOwpAQCAtNDA3NywyNiArNDA2OCwxNSBAQAogCWlmIChjb25uZWN0aXZpdHkgJiYgY29ubmVjdGl2aXR5ICE9IEFDX0pBQ0tfUE9SVF9GSVhFRCkKIAkJcmV0dXJuIDA7CiAKLQlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+amFja3MsIHNpemVvZigqamFjayksIDMyKTsKLQlqYWNrID0gc25kX2FycmF5X25ldygmc3BlYy0+amFja3MpOwotCWlmICghamFjaykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JamFjay0+bmlkID0gbmlkOwotCWphY2stPnR5cGUgPSB0eXBlOwotCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMgYXQgJXMgJXMgSmFjayIsCiAJCXNuZF9oZGFfZ2V0X2phY2tfdHlwZShkZWZfY29uZiksCiAJCXNuZF9oZGFfZ2V0X2phY2tfY29ubmVjdGl2aXR5KGRlZl9jb25mKSwKIAkJc25kX2hkYV9nZXRfamFja19sb2NhdGlvbihkZWZfY29uZikpOwogCi0JZXJyID0gc25kX2phY2tfbmV3KGNvZGVjLT5idXMtPmNhcmQsIG5hbWUsIHR5cGUsICZqYWNrLT5qYWNrKTsKLQlpZiAoZXJyIDwgMCkgewotCQlqYWNrLT5uaWQgPSAwOworCWVyciA9IHNuZF9oZGFfaW5wdXRfamFja19hZGQoY29kZWMsIG5pZCwgdHlwZSwgbmFtZSk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JfQotCWphY2stPmphY2stPnByaXZhdGVfZGF0YSA9IGphY2s7Ci0JamFjay0+amFjay0+cHJpdmF0ZV9mcmVlID0gc3RhYzkyeHhfZnJlZV9qYWNrX3ByaXY7Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzOTksMjMgKzQzNzksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzdGFjOTJ4eF9mcmVlX2phY2tzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0pBQ0sKLQkvKiBmcmVlIGphY2sgaW5zdGFuY2VzIG1hbnVhbGx5IHdoZW4gY2xlYXJpbmcvcmVjb25maWd1cmluZyAqLwotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaWYgKCFjb2RlYy0+YnVzLT5zaHV0ZG93biAmJiBzcGVjLT5qYWNrcy5saXN0KSB7Ci0JCXN0cnVjdCBzaWdtYXRlbF9qYWNrICpqYWNrcyA9IHNwZWMtPmphY2tzLmxpc3Q7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+amFja3MudXNlZDsgaSsrLCBqYWNrcysrKSB7Ci0JCQlpZiAoamFja3MtPmphY2spCi0JCQkJc25kX2RldmljZV9mcmVlKGNvZGVjLT5idXMtPmNhcmQsIGphY2tzLT5qYWNrKTsKLQkJfQotCX0KLQlzbmRfYXJyYXlfZnJlZSgmc3BlYy0+amFja3MpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X2ZyZWVfa2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTQ0NDksNyArNDQxMiw3IEBACiAJCXJldHVybjsKIAogCXN0YWM5Mnh4X3NodXR1cChjb2RlYyk7Ci0Jc3RhYzkyeHhfZnJlZV9qYWNrcyhjb2RlYyk7CisJc25kX2hkYV9pbnB1dF9qYWNrX2ZyZWUoY29kZWMpOwogCXNuZF9hcnJheV9mcmVlKCZzcGVjLT5ldmVudHMpOwogCiAJa2ZyZWUoc3BlYyk7CkBAIC00NjY3LDMzICs0NjMwLDYgQEAKIAlzdGFjX3RvZ2dsZV9wb3dlcl9tYXAoY29kZWMsIG5pZCwgZ2V0X3Bpbl9wcmVzZW5jZShjb2RlYywgbmlkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0YWM5Mnh4X3JlcG9ydF9qYWNrKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQotewotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IHNpZ21hdGVsX2phY2sgKmphY2tzID0gc3BlYy0+amFja3MubGlzdDsKLQotCWlmIChqYWNrcykgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmphY2tzLnVzZWQ7IGkrKykgewotCQkJaWYgKGphY2tzLT5uaWQgPT0gbmlkKSB7Ci0JCQkJdW5zaWduZWQgaW50IHBpbl9jdGwgPQotCQkJCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKLQkJCQkJMCwgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgMHgwMCk7Ci0JCQkJaW50IHR5cGUgPSBqYWNrcy0+dHlwZTsKLQkJCQlpZiAodHlwZSA9PSAoU05EX0pBQ0tfTElORU9VVAotCQkJCQkJfCBTTkRfSkFDS19IRUFEUEhPTkUpKQotCQkJCQl0eXBlID0gKHBpbl9jdGwgJiBBQ19QSU5DVExfSFBfRU4pCi0JCQkJCT8gU05EX0pBQ0tfSEVBRFBIT05FIDogU05EX0pBQ0tfTElORU9VVDsKLQkJCQlzbmRfamFja19yZXBvcnQoamFja3MtPmphY2ssCi0JCQkJCWdldF9waW5fcHJlc2VuY2UoY29kZWMsIG5pZCkKLQkJCQkJPyB0eXBlIDogMCk7Ci0JCQl9Ci0JCQlqYWNrcysrOwotCQl9Ci0JfQotfQotCiAvKiBnZXQgdGhlIHBpbiBjb25uZWN0aW9uIChmaXhlZCwgbm9uZSwgZXRjKSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzdGFjX2dldF9kZWZjZmdfY29ubmVjdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGlkeCkKIHsKQEAgLTQ3ODIsNyArNDcxOCw3IEBACiAJY2FzZSBTVEFDX1BXUl9FVkVOVDoKIAkJaWYgKHNwZWMtPm51bV9wd3JzID4gMCkKIAkJCXN0YWM5Mnh4X3Bpbl9zZW5zZShjb2RlYywgZXZlbnQtPm5pZCk7Ci0JCXN0YWM5Mnh4X3JlcG9ydF9qYWNrKGNvZGVjLCBldmVudC0+bmlkKTsKKwkJc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChjb2RlYywgZXZlbnQtPm5pZCk7CiAKIAkJc3dpdGNoIChjb2RlYy0+c3Vic3lzdGVtX2lkKSB7CiAJCWNhc2UgMHgxMDNjMzA4ZjoKQEAgLTUzNzgsNiArNTMxNCwxMDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc3RhYzkyaGQ4eF9hZGRfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOworCWludCBpOworCisJc3BlYy0+YXV0b19waW5fbmlkc1tzcGVjLT5hdXRvX3Bpbl9jbnRdID0gbmlkOworCXNwZWMtPmF1dG9fcGluX2NudCsrOworCisJaWYgKGdldF9kZWZjZmdfZGV2aWNlKGRlZl9jb25mKSA9PSBBQ19KQUNLX01JQ19JTiAmJgorCSAgICBnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpICE9IEFDX0pBQ0tfUE9SVF9OT05FKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YWM5MmhkODN4eHhfZG1pY19uaWRzKTsgaSsrKSB7CisJCQlpZiAobmlkID09IHN0YWM5MmhkODN4eHhfZG1pY19uaWRzW2ldKSB7CisJCQkJc3BlYy0+YXV0b19kbWljX25pZHNbc3BlYy0+YXV0b19kbWljX2NudF0gPSBuaWQ7CisJCQkJc3BlYy0+YXV0b19kbWljX2NudCsrOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzdGFjOTJoZDh4X2FkZF9hZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCXNwZWMtPmF1dG9fYWRjX25pZHNbc3BlYy0+YXV0b19hZGNfY250XSA9IG5pZDsKKwlzcGVjLT5hdXRvX2FkY19jbnQrKzsKK30KKworc3RhdGljIHZvaWQgc3RhYzkyaGQ4eF9hZGRfbXV4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCWludCBpLCBqOworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+YXV0b19hZGNfY250OyBpKyspIHsKKwkJaWYgKGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLAorCQkJCXNwZWMtPmF1dG9fYWRjX25pZHNbaV0sIG5pZCkgPj0gMCkgeworCQkJLyogbXV4IGFuZCB2b2x1bWUgZm9yIGFkY19uaWRzW2ldICovCisJCQlpZiAoIXNwZWMtPmF1dG9fbXV4X25pZHNbaV0pIHsKKwkJCQlzcGVjLT5hdXRvX211eF9uaWRzW2ldID0gbmlkOworCQkJCS8qIDkyaGQgY29kZWNzIGNhcHR1cmUgdm9sdW1lIGlzIGluIG11eCAqLworCQkJCXNwZWMtPmF1dG9fY2Fwdm9sc1tpXSA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLAorCQkJCQkJCTMsIDAsIEhEQV9PVVRQVVQpOworCQkJfQorCQkJZm9yIChqID0gMDsgaiA8IHNwZWMtPmF1dG9fZG1pY19jbnQ7IGorKykgeworCQkJCWlmIChnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywgbmlkLAorCQkJCQkJc3BlYy0+YXV0b19kbWljX25pZHNbal0pID49IDApIHsKKwkJCQkJLyogZG11eCBmb3IgYWRjX25pZHNbaV0gKi8KKwkJCQkJaWYgKCFzcGVjLT5hdXRvX2RtdXhfbmlkc1tpXSkKKwkJCQkJCXNwZWMtPmF1dG9fZG11eF9uaWRzW2ldID0gbmlkOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc3RhYzkyaGQ4eF9maWxsX2F1dG9fc3BlYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwloZGFfbmlkX3QgbmlkLCBlbmRfbmlkOworCXVuc2lnbmVkIGludCB3aWRfY2Fwcywgd2lkX3R5cGU7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCWVuZF9uaWQgPSBjb2RlYy0+c3RhcnRfbmlkICsgY29kZWMtPm51bV9ub2RlczsKKworCWZvciAobmlkID0gY29kZWMtPnN0YXJ0X25pZDsgbmlkIDwgZW5kX25pZDsgbmlkKyspIHsKKwkJd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJCXdpZF90eXBlID0gZ2V0X3djYXBzX3R5cGUod2lkX2NhcHMpOworCisJCWlmICh3aWRfdHlwZSA9PSBBQ19XSURfUElOKQorCQkJc3RhYzkyaGQ4eF9hZGRfcGluKGNvZGVjLCBuaWQpOworCisJCWlmICh3aWRfdHlwZSA9PSBBQ19XSURfQVVEX0lOICYmICEod2lkX2NhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQorCQkJc3RhYzkyaGQ4eF9hZGRfYWRjKGNvZGVjLCBuaWQpOworCX0KKworCWZvciAobmlkID0gY29kZWMtPnN0YXJ0X25pZDsgbmlkIDwgZW5kX25pZDsgbmlkKyspIHsKKwkJd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJCXdpZF90eXBlID0gZ2V0X3djYXBzX3R5cGUod2lkX2NhcHMpOworCisJCWlmICh3aWRfdHlwZSA9PSBBQ19XSURfQVVEX1NFTCkKKwkJCXN0YWM5MmhkOHhfYWRkX211eChjb2RlYywgbmlkKTsKKwl9CisKKwlzcGVjLT5waW5fbmlkcyA9IHNwZWMtPmF1dG9fcGluX25pZHM7CisJc3BlYy0+bnVtX3BpbnMgPSBzcGVjLT5hdXRvX3Bpbl9jbnQ7CisJc3BlYy0+YWRjX25pZHMgPSBzcGVjLT5hdXRvX2FkY19uaWRzOworCXNwZWMtPm51bV9hZGNzID0gc3BlYy0+YXV0b19hZGNfY250OworCXNwZWMtPmNhcHZvbHMgPSBzcGVjLT5hdXRvX2NhcHZvbHM7CisJc3BlYy0+Y2Fwc3dzID0gc3BlYy0+YXV0b19jYXB2b2xzOworCXNwZWMtPm51bV9jYXBzID0gc3BlYy0+YXV0b19hZGNfY250OworCXNwZWMtPm11eF9uaWRzID0gc3BlYy0+YXV0b19tdXhfbmlkczsKKwlzcGVjLT5udW1fbXV4ZXMgPSBzcGVjLT5hdXRvX2FkY19jbnQ7CisJc3BlYy0+ZG11eF9uaWRzID0gc3BlYy0+YXV0b19kbXV4X25pZHM7CisJc3BlYy0+bnVtX2RtdXhlcyA9IHNwZWMtPmF1dG9fYWRjX2NudDsKKwlzcGVjLT5kbWljX25pZHMgPSBzcGVjLT5hdXRvX2RtaWNfbmlkczsKKwlzcGVjLT5udW1fZG1pY3MgPSBzcGVjLT5hdXRvX2RtaWNfY250OworfQorCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5MmhkODN4eHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CkBAIC01Mzk5LDI2ICs1NDM0LDE3IEBACiAJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgY29kZWMtPmFmZywgMCwgMHg3RUQsIDApOwogCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisKKwlzdGFjOTJoZDh4X2ZpbGxfYXV0b19zcGVjKGNvZGVjKTsKKwogCXNwZWMtPmxpbmVhcl90b25lX2JlZXAgPSAwOwogCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkODN4eHhfc2xhdmVfZGlnX291dHM7CiAJc3BlYy0+ZGlnYmVlcF9uaWQgPSAweDIxOwotCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkODN4eHhfZG1pY19uaWRzOwotCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5MmhkODN4eHhfbXV4X25pZHM7Ci0Jc3BlYy0+bXV4X25pZHMgPSBzdGFjOTJoZDgzeHh4X211eF9uaWRzOwotCXNwZWMtPm51bV9tdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9tdXhfbmlkcyk7Ci0Jc3BlYy0+YWRjX25pZHMgPSBzdGFjOTJoZDgzeHh4X2FkY19uaWRzOwotCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X2FkY19uaWRzKTsKIAlzcGVjLT5wd3JfbmlkcyA9IHN0YWM5MmhkODN4eHhfcHdyX25pZHM7CiAJc3BlYy0+cHdyX21hcHBpbmcgPSBzdGFjOTJoZDgzeHh4X3B3cl9tYXBwaW5nOwogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X3B3cl9uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwotCiAJc3BlYy0+aW5pdCA9IHN0YWM5MmhkODN4eHhfY29yZV9pbml0OwotCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X3Bpbl9uaWRzKTsKLQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkODN4eHhfcGluX25pZHM7Ci0Jc3BlYy0+bnVtX2NhcHMgPSBTVEFDOTJIRDgzWFhYX05VTV9DQVBTOwotCXNwZWMtPmNhcHZvbHMgPSBzdGFjOTJoZDgzeHh4X2NhcHZvbHM7Ci0Jc3BlYy0+Y2Fwc3dzID0gc3RhYzkyaGQ4M3h4eF9jYXBzd3M7CiAKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywKIAkJCQkJCQlTVEFDXzkySEQ4M1hYWF9NT0RFTFMsCkBAIC01NDM2LDI4ICs1NDYyLDExIEBACiAJY2FzZSAweDExMWQ3NmQxOgogCWNhc2UgMHgxMTFkNzZkOToKIAljYXNlIDB4MTExZDc2ZTU6Ci0JCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkODdiX2RtaWNfbmlkczsKLQkJc3BlYy0+bnVtX2RtaWNzID0gc3RhYzkyeHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAotCQkJCXN0YWM5MmhkODdiX2RtaWNfbmlkcywKLQkJCQlTVEFDOTJIRDg3Ql9OVU1fRE1JQ1MpOwotCQlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4N3h4eF9waW5fbmlkcyk7Ci0JCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ4N3h4eF9waW5fbmlkczsKLQkJc3BlYy0+bW9ub19uaWQgPSAwOwotCQlzcGVjLT5udW1fcHdycyA9IDA7Ci0JCWJyZWFrOwogCWNhc2UgMHgxMTFkNzY2NjoKIAljYXNlIDB4MTExZDc2Njc6CiAJY2FzZSAweDExMWQ3NjY4OgogCWNhc2UgMHgxMTFkNzY2OToKIAljYXNlIDB4MTExZDc2ZTM6Ci0JCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5Mnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKLQkJCQlzdGFjOTJoZDg4eHh4X2RtaWNfbmlkcywKLQkJCQlTVEFDOTJIRDg4WFhYX05VTV9ETUlDUyk7Ci0JCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzKTsKLQkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzOwotCQlzcGVjLT5tb25vX25pZCA9IDA7Ci0JCXNwZWMtPm51bV9wd3JzID0gMDsKLQkJYnJlYWs7CiAJY2FzZSAweDExMWQ3NjA0OgogCWNhc2UgMHgxMTFkNzZkNDoKIAljYXNlIDB4MTExZDc2MDU6CkBAIC01NDY2LDkgKzU0NzUsNiBAQAogCQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID09IFNUQUNfOTJIRDgzWFhYX1BXUl9SRUYpCiAJCQlicmVhazsKIAkJc3BlYy0+bnVtX3B3cnMgPSAwOwotCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCi0JCQkJc3RhYzkyaGQ4M3h4eF9kbWljX25pZHMsCi0JCQkJU1RBQzkySEQ4M1hYWF9OVU1fRE1JQ1MpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCmluZGV4IDYzYjAwNTQuLjEzNzFiNTdjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKQEAgLTE1OSw2ICsxNTksNyBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgZW51bSBWSUFfSERBX0NPREVDIGdldF9jb2RlY190eXBlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIHN0YXRpYyBzdHJ1Y3QgdmlhX3NwZWMgKiB2aWFfbmV3X3NwZWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjOwpAQCAtMTY5LDYgKzE3MCwxMCBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCXNwZWMtPmNvZGVjID0gY29kZWM7CisJc3BlYy0+Y29kZWNfdHlwZSA9IGdldF9jb2RlY190eXBlKGNvZGVjKTsKKwkvKiBWVDE3MDhCQ0UgJiBWVDE3MDhTIGFyZSBhbG1vc3Qgc2FtZSAqLworCWlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTcwOEJDRSkKKwkJc3BlYy0+Y29kZWNfdHlwZSA9IFZUMTcwOFM7CiAJcmV0dXJuIHNwZWM7CiB9CiAKQEAgLTExMDEsNiArMTEwNiw3IEBACiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IGFkY19pZHggPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKTsKKwlpbnQgcmV0OwogCiAJaWYgKCFzcGVjLT5tdXhfbmlkc1thZGNfaWR4XSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTA5LDEyICsxMTE1LDE0IEBACiAJCQkgICAgICAgQUNfVkVSQl9HRVRfUE9XRVJfU1RBVEUsIDB4MDApICE9IEFDX1BXUlNUX0QwKQogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzcGVjLT5tdXhfbmlkc1thZGNfaWR4XSwgMCwKIAkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QwKTsKKworCXJldCA9IHNuZF9oZGFfaW5wdXRfbXV4X3B1dChjb2RlYywgc3BlYy0+aW5wdXRfbXV4LCB1Y29udHJvbCwKKwkJCQkgICAgIHNwZWMtPm11eF9uaWRzW2FkY19pZHhdLAorCQkJCSAgICAgJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF0pOwogCS8qIHVwZGF0ZSBqYWNrIHBvd2VyIHN0YXRlICovCiAJc2V0X2phY2tfcG93ZXJfc3RhdGUoY29kZWMpOwogCi0JcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X3B1dChjb2RlYywgc3BlYy0+aW5wdXRfbXV4LCB1Y29udHJvbCwKLQkJCQkgICAgIHNwZWMtPm11eF9uaWRzW2FkY19pZHhdLAotCQkJCSAgICAgJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF0pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdmlhX2luZGVwZW5kZW50X2hwX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0xMTg4LDggKzExOTYsMTYgQEAKIAkvKiBHZXQgSW5kZXBlbmRlbnQgTW9kZSBpbmRleCBvZiBoZWFkcGhvbmUgcGluIHdpZGdldCAqLwogCXNwZWMtPmhwX2luZGVwZW5kZW50X21vZGUgPSBzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlX2luZGV4ID09IHBpbnNlbAogCQk/IDEgOiAwOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIHBpbnNlbCk7CisJaWYgKHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxNzE4UykKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgcGluc2VsID8gMiA6IDApOworCWVsc2UKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgcGluc2VsKTsKIAorCWlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTgxMikKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgzNSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIHBpbnNlbCk7CiAJaWYgKHNwZWMtPm11bHRpb3V0LmhwX25pZCAmJiBzcGVjLT5tdWx0aW91dC5ocF9uaWQKIAkgICAgIT0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbSERBX0ZST05UXSkKIAkJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIHNwZWMtPm11bHRpb3V0LmhwX25pZCwKQEAgLTEyMDgsNiArMTIyNCw4IEBACiAJCWFjdGl2YXRlX2N0bChjb2RlYywgIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAogCQkJICAgICBzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlKTsKIAl9CisJLyogdXBkYXRlIGphY2sgcG93ZXIgc3RhdGUgKi8KKwlzZXRfamFja19wb3dlcl9zdGF0ZShjb2RlYyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNDgsOSArMTI2NiwxMiBAQAogCQlicmVhazsKIAl9CiAKLQludW1zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwgSERBX01BWF9DT05ORUNUSU9OUyk7Ci0JaWYgKG51bXMgPD0gMSkKLQkJcmV0dXJuIDA7CisJaWYgKHNwZWMtPmNvZGVjX3R5cGUgIT0gVlQxNzA4KSB7CisJCW51bXMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLAorCQkJCQkgICAgICAgY29ubiwgSERBX01BWF9DT05ORUNUSU9OUyk7CisJCWlmIChudW1zIDw9IDEpCisJCQlyZXR1cm4gMDsKKwl9CiAKIAlrbmV3ID0gdmlhX2Nsb25lX2NvbnRyb2woc3BlYywgJnZpYV9ocF9taXhlclswXSk7CiAJaWYgKGtuZXcgPT0gTlVMTCkKQEAgLTEzMTAsNiArMTMzMSwxMSBAQAogCQlzdGFydF9pZHggPSAyOwogCQllbmRfaWR4ID0gNDsKIAkJYnJlYWs7CisJY2FzZSBWVDE3MThTOgorCQluaWRfbWl4ZXIgPSAweDIxOworCQlzdGFydF9pZHggPSAxOworCQllbmRfaWR4ID0gMzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwogCX0KQEAgLTIxODUsMTAgKzIyMTEsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1faXZlcmJzOyBpKyspCiAJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIHNwZWMtPmluaXRfdmVyYnNbaV0pOwogCi0Jc3BlYy0+Y29kZWNfdHlwZSA9IGdldF9jb2RlY190eXBlKGNvZGVjKTsKLQlpZiAoc3BlYy0+Y29kZWNfdHlwZSA9PSBWVDE3MDhCQ0UpCi0JCXNwZWMtPmNvZGVjX3R5cGUgPSBWVDE3MDhTOyAvKiBWVDE3MDhCQ0UgJiBWVDE3MDhTIGFyZSBhbG1vc3QKLQkJCQkJICAgICAgIHNhbWUgKi8KIAkvKiBMeWRpYSBBZGQgZm9yIEVBUEQgZW5hYmxlICovCiAJaWYgKCFzcGVjLT5kaWdfaW5fbmlkKSB7IC8qIE5vIERpZ2l0YWwgSW4gY29ubmVjdGlvbiAqLwogCQlpZiAoc3BlYy0+ZGlnX2luX3BpbikgewpAQCAtMjQzOCw3ICsyNDYwLDE0IEBACiAJCWVsc2UKIAkJCXR5cGVfaWR4ID0gMDsKIAkJbGFiZWwgPSBoZGFfZ2V0X2F1dG9jZmdfaW5wdXRfbGFiZWwoY29kZWMsIGNmZywgaSk7Ci0JCWVyciA9IHZpYV9uZXdfYW5hbG9nX2lucHV0KHNwZWMsIGxhYmVsLCB0eXBlX2lkeCwgaWR4LCBjYXBfbmlkKTsKKwkJaWYgKHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxNzA4UyB8fAorCQkgICAgc3BlYy0+Y29kZWNfdHlwZSA9PSBWVDE3MDIgfHwKKwkJICAgIHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxNzE2UykKKwkJCWVyciA9IHZpYV9uZXdfYW5hbG9nX2lucHV0KHNwZWMsIGxhYmVsLCB0eXBlX2lkeCwKKwkJCQkJCSAgIGlkeCsxLCBjYXBfbmlkKTsKKwkJZWxzZQorCQkJZXJyID0gdmlhX25ld19hbmFsb2dfaW5wdXQoc3BlYywgbGFiZWwsIHR5cGVfaWR4LAorCQkJCQkJICAgaWR4LCBjYXBfbmlkKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCQlzbmRfaGRhX2FkZF9pbXV4X2l0ZW0oaW11eCwgbGFiZWwsIGlkeCwgTlVMTCk7CkBAIC00MTQ3LDYgKzQxNzYsMTEgQEAKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIlZUMTcwOEJDRSBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIlZUMTcwOEJDRSBEaWdpdGFsIjsKIAl9CisJLyogY29ycmVjdCBuYW1lcyBmb3IgVlQxODE4UyAqLworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTEwNjA0NDApIHsKKwkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIlZUMTgxOFMgQW5hbG9nIjsKKwkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJWVDE4MThTIERpZ2l0YWwiOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IDEzY2VjMWUuLjJhZThkMjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTM0MSw5ICszNDEsOSBAQAogCXJldHVybiAtRUJVU1k7CiB9CiAgCi1zdGF0aWMgdm9pZCBzbmRfaW50ZWw4eDBfY29kZWNfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LAotCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcmVnLAotCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgdmFsKQorc3RhdGljIHZvaWQgc25kX2ludGVsOHgwbV9jb2RlY193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJICAgICAgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkJCSAgICAgIHVuc2lnbmVkIHNob3J0IHZhbCkKIHsKIAlzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwogCQpAQCAtMzU0LDggKzM1NCw4IEBACiAJaWFwdXR3b3JkKGNoaXAsIHJlZyArIGFjOTctPm51bSAqIDB4ODAsIHZhbCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfaW50ZWw4eDBfY29kZWNfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCi0JCQkJCSAgICAgIHVuc2lnbmVkIHNob3J0IHJlZykKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfaW50ZWw4eDBtX2NvZGVjX3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQogewogCXN0cnVjdCBpbnRlbDh4MG0gKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgc2hvcnQgcmVzOwpAQCAtMzg1LDcgKzM4NSw3IEBACiAvKgogICogRE1BIEkvTwogICovCi1zdGF0aWMgdm9pZCBzbmRfaW50ZWw4eDBfc2V0dXBfcGVyaW9kcyhzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwLCBzdHJ1Y3QgaWNoZGV2ICppY2hkZXYpIAorc3RhdGljIHZvaWQgc25kX2ludGVsOHgwbV9zZXR1cF9wZXJpb2RzKHN0cnVjdCBpbnRlbDh4MG0gKmNoaXAsIHN0cnVjdCBpY2hkZXYgKmljaGRldikKIHsKIAlpbnQgaWR4OwogCXUzMiAqYmRiYXIgPSBpY2hkZXYtPmJkYmFyOwpAQCAtNDM3LDcgKzQzNyw3IEBACiAgKiAgSW50ZXJydXB0IGhhbmRsZXIKICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc25kX2ludGVsOHgwX3VwZGF0ZShzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwLCBzdHJ1Y3QgaWNoZGV2ICppY2hkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2ludGVsOHgwbV91cGRhdGUoc3RydWN0IGludGVsOHgwbSAqY2hpcCwgc3RydWN0IGljaGRldiAqaWNoZGV2KQogewogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGljaGRldi0+cmVnX29mZnNldDsKIAlpbnQgY2l2LCBpLCBzdGVwOwpAQCAtNDg5LDcgKzQ4OSw3IEBACiAJaXB1dGJ5dGUoY2hpcCwgcG9ydCArIGljaGRldi0+cm9mZl9zciwgSUNIX0ZJRk9FIHwgSUNIX0JDSVMgfCBJQ0hfTFZCQ0kpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2ludGVsOHgwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2ludGVsOHgwbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBpbnRlbDh4MG0gKmNoaXAgPSBkZXZfaWQ7CiAJc3RydWN0IGljaGRldiAqaWNoZGV2OwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPmJkYmFyc19jb3VudDsgaSsrKSB7CiAJCWljaGRldiA9ICZjaGlwLT5pY2hkW2ldOwogCQlpZiAoc3RhdHVzICYgaWNoZGV2LT5pbnRfc3RhX21hc2spCi0JCQlzbmRfaW50ZWw4eDBfdXBkYXRlKGNoaXAsIGljaGRldik7CisJCQlzbmRfaW50ZWw4eDBtX3VwZGF0ZShjaGlwLCBpY2hkZXYpOwogCX0KIAogCS8qIGFjayB0aGVtICovCkBAIC01MjYsNyArNTI2LDcgQEAKICAqICBQQ00gcGFydAogICovCiAKLXN0YXRpYyBpbnQgc25kX2ludGVsOHgwX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQorc3RhdGljIGludCBzbmRfaW50ZWw4eDBtX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQogewogCXN0cnVjdCBpbnRlbDh4MG0gKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IGljaGRldiAqaWNoZGV2ID0gZ2V0X2ljaGRldihzdWJzdHJlYW0pOwpAQCAtNTYxLDE4ICs1NjEsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfaW50ZWw4eDBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorc3RhdGljIGludCBzbmRfaW50ZWw4eDBtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewogCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQogCi1zdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBzbmRfaW50ZWw4eDBtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKIH0KIAotc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9pbnRlbDh4MF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfaW50ZWw4eDBtX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBpbnRlbDh4MG0gKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IGljaGRldiAqaWNoZGV2ID0gZ2V0X2ljaGRldihzdWJzdHJlYW0pOwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJaWNoZGV2LT5mcmFnc2l6ZSA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCXNuZF9hYzk3X3dyaXRlKGljaGRldi0+YWM5NywgQUM5N19MSU5FMV9SQVRFLCBydW50aW1lLT5yYXRlKTsKIAlzbmRfYWM5N193cml0ZShpY2hkZXYtPmFjOTcsIEFDOTdfTElORTFfTEVWRUwsIDApOwotCXNuZF9pbnRlbDh4MF9zZXR1cF9wZXJpb2RzKGNoaXAsIGljaGRldik7CisJc25kX2ludGVsOHgwbV9zZXR1cF9wZXJpb2RzKGNoaXAsIGljaGRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY4MiwyMiArNjgyLDIyIEBACiAJLm9wZW4gPQkJc25kX2ludGVsOHgwbV9wbGF5YmFja19vcGVuLAogCS5jbG9zZSA9CXNuZF9pbnRlbDh4MG1fcGxheWJhY2tfY2xvc2UsCiAJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcyA9CXNuZF9pbnRlbDh4MF9od19wYXJhbXMsCi0JLmh3X2ZyZWUgPQlzbmRfaW50ZWw4eDBfaHdfZnJlZSwKKwkuaHdfcGFyYW1zID0Jc25kX2ludGVsOHgwbV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPQlzbmRfaW50ZWw4eDBtX2h3X2ZyZWUsCiAJLnByZXBhcmUgPQlzbmRfaW50ZWw4eDBtX3BjbV9wcmVwYXJlLAotCS50cmlnZ2VyID0Jc25kX2ludGVsOHgwX3BjbV90cmlnZ2VyLAotCS5wb2ludGVyID0Jc25kX2ludGVsOHgwX3BjbV9wb2ludGVyLAorCS50cmlnZ2VyID0Jc25kX2ludGVsOHgwbV9wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9pbnRlbDh4MG1fcGNtX3BvaW50ZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9pbnRlbDh4MG1fY2FwdHVyZV9vcHMgPSB7CiAJLm9wZW4gPQkJc25kX2ludGVsOHgwbV9jYXB0dXJlX29wZW4sCiAJLmNsb3NlID0Jc25kX2ludGVsOHgwbV9jYXB0dXJlX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAotCS5od19wYXJhbXMgPQlzbmRfaW50ZWw4eDBfaHdfcGFyYW1zLAotCS5od19mcmVlID0Jc25kX2ludGVsOHgwX2h3X2ZyZWUsCisJLmh3X3BhcmFtcyA9CXNuZF9pbnRlbDh4MG1faHdfcGFyYW1zLAorCS5od19mcmVlID0Jc25kX2ludGVsOHgwbV9od19mcmVlLAogCS5wcmVwYXJlID0Jc25kX2ludGVsOHgwbV9wY21fcHJlcGFyZSwKLQkudHJpZ2dlciA9CXNuZF9pbnRlbDh4MF9wY21fdHJpZ2dlciwKLQkucG9pbnRlciA9CXNuZF9pbnRlbDh4MF9wY21fcG9pbnRlciwKKwkudHJpZ2dlciA9CXNuZF9pbnRlbDh4MG1fcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPQlzbmRfaW50ZWw4eDBtX3BjbV9wb2ludGVyLAogfTsKIAogCkBAIC03MTAsNyArNzEwLDcgQEAKIAlpbnQgYWM5N19pZHg7CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZWw4eDBfcGNtMShzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwLCBpbnQgZGV2aWNlLAorc3RhdGljIGludCBfX2RldmluaXQgc25kX2ludGVsOHgwbV9wY20xKHN0cnVjdCBpbnRlbDh4MG0gKmNoaXAsIGludCBkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBpY2hfcGNtX3RhYmxlICpyZWMpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKQEAgLTc1OSw3ICs3NTksNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZWw4eDBfcGNtKHN0cnVjdCBpbnRlbDh4MG0gKmNoaXApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZWw4eDBtX3BjbShzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwKQogewogCWludCBpLCB0YmxzaXplLCBkZXZpY2UsIGVycjsKIAlzdHJ1Y3QgaWNoX3BjbV90YWJsZSAqdGJsLCAqcmVjOwpAQCAtNzkxLDcgKzc5MSw3IEBACiAJCQlpZiAoISBjaGlwLT5pY2hkW3JlYy0+YWM5N19pZHhdLmFjOTcpCiAJCQkJY29udGludWU7CiAJCX0KLQkJZXJyID0gc25kX2ludGVsOHgwX3BjbTEoY2hpcCwgZGV2aWNlLCByZWMpOworCQllcnIgPSBzbmRfaW50ZWw4eDBtX3BjbTEoY2hpcCwgZGV2aWNlLCByZWMpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJCWRldmljZSsrOwpAQCAtODA2LDIwICs4MDYsMjAgQEAKICAqICBNaXhlciBwYXJ0CiAgKi8KIAotc3RhdGljIHZvaWQgc25kX2ludGVsOHgwX21peGVyX2ZyZWVfYWM5N19idXMoc3RydWN0IHNuZF9hYzk3X2J1cyAqYnVzKQorc3RhdGljIHZvaWQgc25kX2ludGVsOHgwbV9taXhlcl9mcmVlX2FjOTdfYnVzKHN0cnVjdCBzbmRfYWM5N19idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwID0gYnVzLT5wcml2YXRlX2RhdGE7CiAJY2hpcC0+YWM5N19idXMgPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfaW50ZWw4eDBfbWl4ZXJfZnJlZV9hYzk3KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3N0YXRpYyB2b2lkIHNuZF9pbnRlbDh4MG1fbWl4ZXJfZnJlZV9hYzk3KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKIAlzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwogCWNoaXAtPmFjOTcgPSBOVUxMOwogfQogCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9pbnRlbDh4MF9taXhlcihzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwLCBpbnQgYWM5N19jbG9jaykKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9pbnRlbDh4MG1fbWl4ZXIoc3RydWN0IGludGVsOHgwbSAqY2hpcCwgaW50IGFjOTdfY2xvY2spCiB7CiAJc3RydWN0IHNuZF9hYzk3X2J1cyAqcGJ1czsKIAlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5NzsKQEAgLTgyNywyMiArODI3LDIyIEBACiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgZ2xvYl9zdGEgPSAwOwogCXN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBvcHMgPSB7Ci0JCS53cml0ZSA9IHNuZF9pbnRlbDh4MF9jb2RlY193cml0ZSwKLQkJLnJlYWQgPSBzbmRfaW50ZWw4eDBfY29kZWNfcmVhZCwKKwkJLndyaXRlID0gc25kX2ludGVsOHgwbV9jb2RlY193cml0ZSwKKwkJLnJlYWQgPSBzbmRfaW50ZWw4eDBtX2NvZGVjX3JlYWQsCiAJfTsKIAogCWNoaXAtPmluX2FjOTdfaW5pdCA9IDE7CiAJCiAJbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOwogCWFjOTcucHJpdmF0ZV9kYXRhID0gY2hpcDsKLQlhYzk3LnByaXZhdGVfZnJlZSA9IHNuZF9pbnRlbDh4MF9taXhlcl9mcmVlX2FjOTc7CisJYWM5Ny5wcml2YXRlX2ZyZWUgPSBzbmRfaW50ZWw4eDBtX21peGVyX2ZyZWVfYWM5NzsKIAlhYzk3LnNjYXBzID0gQUM5N19TQ0FQX1NLSVBfQVVESU8gfCBBQzk3X1NDQVBfUE9XRVJfU0FWRTsKIAogCWdsb2Jfc3RhID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSkpOwogCiAJaWYgKChlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgY2hpcCwgJnBidXMpKSA8IDApCiAJCWdvdG8gX19lcnI7Ci0JcGJ1cy0+cHJpdmF0ZV9mcmVlID0gc25kX2ludGVsOHgwX21peGVyX2ZyZWVfYWM5N19idXM7CisJcGJ1cy0+cHJpdmF0ZV9mcmVlID0gc25kX2ludGVsOHgwbV9taXhlcl9mcmVlX2FjOTdfYnVzOwogCWlmIChhYzk3X2Nsb2NrID49IDgwMDAgJiYgYWM5N19jbG9jayA8PSA0ODAwMCkKIAkJcGJ1cy0+Y2xvY2sgPSBhYzk3X2Nsb2NrOwogCWNoaXAtPmFjOTdfYnVzID0gcGJ1czsKQEAgLTg5NCw3ICs4OTQsOCBAQAogCS8qIGZpbmlzaCBjb2xkIG9yIGRvIHdhcm0gcmVzZXQgKi8KIAljbnQgfD0gKGNudCAmIElDSF9BQzk3Q09MRCkgPT0gMCA/IElDSF9BQzk3Q09MRCA6IElDSF9BQzk3V0FSTTsKIAlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSwgY250KTsKLQllbmRfdGltZSA9IChqaWZmaWVzICsgKEhaIC8gNCkpICsgMTsKKwl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTsgLyogZ2l2ZSB3YXJtIHJlc2V0IHNvbWUgdGltZSAqLworCWVuZF90aW1lID0gamlmZmllcyArIEhaIC8gNDsKIAlkbyB7CiAJCWlmICgoaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpICYgSUNIX0FDOTdXQVJNKSA9PSAwKQogCQkJZ290byBfX29rOwpAQCAtOTU5LDcgKzk2MCw3IEBACiAgICAgICAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2ludGVsOHgwX2NoaXBfaW5pdChzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwLCBpbnQgcHJvYmluZykKK3N0YXRpYyBpbnQgc25kX2ludGVsOHgwbV9jaGlwX2luaXQoc3RydWN0IGludGVsOHgwbSAqY2hpcCwgaW50IHByb2JpbmcpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVycjsKQEAgLTk4MCw3ICs5ODEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9mcmVlKHN0cnVjdCBpbnRlbDh4MG0gKmNoaXApCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MG1fZnJlZShzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwKQogewogCXVuc2lnbmVkIGludCBpOwogCkBAIC0xMDQ1LDcgKzEwNDYsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pbnRlbDh4MF9pbnRlcnJ1cHQsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaW50ZWw4eDBtX2ludGVycnVwdCwKIAkJCUlSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaW50ZWw4eDBtOiB1bmFibGUgdG8gZ3JhYiBJUlEgJWQsICIKIAkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iLCBwY2ktPmlycSk7CkBAIC0xMDUzLDcgKzEwNTQsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJY2hpcC0+aXJxID0gcGNpLT5pcnE7Ci0Jc25kX2ludGVsOHgwX2NoaXBfaW5pdChjaGlwLCAwKTsKKwlzbmRfaW50ZWw4eDBtX2NoaXBfaW5pdChjaGlwLCAwKTsKIAlzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5Nyk7CiAKIAlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CkBAIC0xMDk0LDEwICsxMDk1LDEwIEBACiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogCi1zdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBzbmRfaW50ZWw4eDBtX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGludGVsOHgwbSAqY2hpcCA9IGRldmljZS0+ZGV2aWNlX2RhdGE7Ci0JcmV0dXJuIHNuZF9pbnRlbDh4MF9mcmVlKGNoaXApOworCXJldHVybiBzbmRfaW50ZWw4eDBtX2ZyZWUoY2hpcCk7CiB9CiAKIHN0cnVjdCBpY2hfcmVnX2luZm8gewpAQCAtMTEwOCw3ICsxMTA5LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9pbnRlbDh4MG1fY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKIAkJCQkJIHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkJCSB1bnNpZ25lZCBsb25nIGRldmljZV90eXBlLAotCQkJCQkgc3RydWN0IGludGVsOHgwbSAqKiByX2ludGVsOHgwKQorCQkJCQkgc3RydWN0IGludGVsOHgwbSAqKnJfaW50ZWw4eDBtKQogewogCXN0cnVjdCBpbnRlbDh4MG0gKmNoaXA7CiAJaW50IGVycjsKQEAgLTExMTYsNyArMTExNyw3IEBACiAJdW5zaWduZWQgaW50IGludF9zdGFfbWFza3M7CiAJc3RydWN0IGljaGRldiAqaWNoZGV2OwogCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewotCQkuZGV2X2ZyZWUgPQlzbmRfaW50ZWw4eDBfZGV2X2ZyZWUsCisJCS5kZXZfZnJlZSA9CXNuZF9pbnRlbDh4MG1fZGV2X2ZyZWUsCiAJfTsKIAlzdGF0aWMgc3RydWN0IGljaF9yZWdfaW5mbyBpbnRlbF9yZWdzWzJdID0gewogCQl7IElDSF9NSUlOVCwgMCB9LApAQCAtMTEyNCw3ICsxMTI1LDcgQEAKIAl9OwogCXN0cnVjdCBpY2hfcmVnX2luZm8gKnRibDsKIAotCSpyX2ludGVsOHgwID0gTlVMTDsKKwkqcl9pbnRlbDh4MG0gPSBOVUxMOwogCiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0xMTU4LDcgKzExNTksNyBAQAogCQljaGlwLT5hZGRyID0gcGNpX2lvbWFwKHBjaSwgMCwgMCk7CiAJaWYgKCFjaGlwLT5hZGRyKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkFDJzk3IHNwYWNlIGlvcmVtYXAgcHJvYmxlbVxuIik7Ci0JCXNuZF9pbnRlbDh4MF9mcmVlKGNoaXApOworCQlzbmRfaW50ZWw4eDBtX2ZyZWUoY2hpcCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBjaSwgMykgJiBJT1JFU09VUkNFX01FTSkgLyogSUNINCAqLwpAQCAtMTE2NywxNSArMTE2OCwxNSBAQAogCQljaGlwLT5ibWFkZHIgPSBwY2lfaW9tYXAocGNpLCAxLCAwKTsKIAlpZiAoIWNoaXAtPmJtYWRkcikgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDb250cm9sbGVyIHNwYWNlIGlvcmVtYXAgcHJvYmxlbVxuIik7Ci0JCXNuZF9pbnRlbDh4MF9mcmVlKGNoaXApOworCQlzbmRfaW50ZWw4eDBtX2ZyZWUoY2hpcCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogIHBvcnRfaW5pdGVkOgotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaW50ZWw4eDBtX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQljYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwotCQlzbmRfaW50ZWw4eDBfZnJlZShjaGlwKTsKKwkJc25kX2ludGVsOHgwbV9mcmVlKGNoaXApOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAljaGlwLT5pcnEgPSBwY2ktPmlycTsKQEAgLTEyMTAsNyArMTIxMSw3IEBACiAJaWYgKHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBzbmRfZG1hX3BjaV9kYXRhKHBjaSksCiAJCQkJY2hpcC0+YmRiYXJzX2NvdW50ICogc2l6ZW9mKHUzMikgKiBJQ0hfTUFYX0ZSQUdTICogMiwKIAkJCQkmY2hpcC0+YmRiYXJzKSA8IDApIHsKLQkJc25kX2ludGVsOHgwX2ZyZWUoY2hpcCk7CisJCXNuZF9pbnRlbDh4MG1fZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCS8qIHRhYmxlcyBtdXN0IGJlIGFsaWduZWQgdG8gOCBieXRlcyBoZXJlLCBidXQgdGhlIGtlcm5lbCBwYWdlcwpAQCAtMTIyNSwxOSArMTIyNiwxOSBAQAogCWNoaXAtPmludF9zdGFfcmVnID0gSUNIX1JFR19HTE9CX1NUQTsKIAljaGlwLT5pbnRfc3RhX21hc2sgPSBpbnRfc3RhX21hc2tzOwogCi0JaWYgKChlcnIgPSBzbmRfaW50ZWw4eDBfY2hpcF9pbml0KGNoaXAsIDEpKSA8IDApIHsKLQkJc25kX2ludGVsOHgwX2ZyZWUoY2hpcCk7CisJaWYgKChlcnIgPSBzbmRfaW50ZWw4eDBtX2NoaXBfaW5pdChjaGlwLCAxKSkgPCAwKSB7CisJCXNuZF9pbnRlbDh4MG1fZnJlZShjaGlwKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcykpIDwgMCkgewotCQlzbmRfaW50ZWw4eDBfZnJlZShjaGlwKTsKKwkJc25kX2ludGVsOHgwbV9mcmVlKGNoaXApOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAotCSpyX2ludGVsOHgwID0gY2hpcDsKKwkqcl9pbnRlbDh4MG0gPSBjaGlwOwogCXJldHVybiAwOwogfQogCkBAIC0xMjk1LDExICsxMjk2LDExIEBACiAJfQogCWNhcmQtPnByaXZhdGVfZGF0YSA9IGNoaXA7CiAKLQlpZiAoKGVyciA9IHNuZF9pbnRlbDh4MF9taXhlcihjaGlwLCBhYzk3X2Nsb2NrKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfaW50ZWw4eDBtX21peGVyKGNoaXAsIGFjOTdfY2xvY2spKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfaW50ZWw4eDBfcGNtKGNoaXApKSA8IDApIHsKKwlpZiAoKGVyciA9IHNuZF9pbnRlbDh4MG1fcGNtKGNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCBmNWVhZGZjLi5hMzIzZWFmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTgsNiArOCwyMSBAQAogICogICAgICBNb2RpZmllZCAyMDA2LTA2LTAxIGZvciBBRVMzMiBzdXBwb3J0IGJ5IFJlbXkgQnJ1bm8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVteS5icnVub0B0cmlubm92LmNvbT4KICAqCisgKiAgICAgIE1vZGlmaWVkIDIwMDktMDQtMTMgZm9yIHByb3BlciBtZXRlcmluZyBieSBGbG9yaWFuIEZhYmVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhYmVyQGZhYmVybWFuLmRlPgorICoKKyAqICAgICAgTW9kaWZpZWQgMjAwOS0wNC0xNCBmb3IgbmF0aXZlIGZsb2F0IHN1cHBvcnQgYnkgRmxvcmlhbiBGYWJlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmYWJlckBmYWJlcm1hbi5kZT4KKyAqCisgKiAgICAgIE1vZGlmaWVkIDIwMDktMDQtMjYgZml4ZWQgYnVnIGluIHJtcyBtZXRlcmluZyBieSBGbG9yaWFuIEZhYmVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhYmVyQGZhYmVybWFuLmRlPgorICoKKyAqICAgICAgTW9kaWZpZWQgMjAwOS0wNC0zMCBhZGRlZCBodyBzZXJpYWwgbnVtYmVyIHN1cHBvcnQgYnkgRmxvcmlhbiBGYWJlcgorICoKKyAqICAgICAgTW9kaWZpZWQgMjAxMS0wMS0xNCBhZGRlZCBTL1BESUYgaW5wdXQgb24gUmF5REFUcyBieSBBZHJpYW4gS25vdGgKKyAqCisgKglNb2RpZmllZCAyMDExLTAxLTI1IHZhcmlhYmxlIHBlcmlvZCBzaXplcyBvbiBSYXlEQVQvQUlPIGJ5IEFkcmlhbiBLbm90aAorICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTM1LDYgKzUwLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CkBAIC00NywxNSArNjMsNiBAQAogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkgIC8qIElEIGZvciB0aGlzIGNhcmQgKi8KIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsvKiBFbmFibGUgdGhpcyBjYXJkICovCiAKLS8qIERpc2FibGUgcHJlY2lzZSBwb2ludGVyIGF0IHN0YXJ0ICovCi1zdGF0aWMgaW50IHByZWNpc2VfcHRyW1NORFJWX0NBUkRTXTsKLQotLyogU2VuZCBhbGwgcGxheWJhY2sgdG8gbGluZSBvdXRzICovCi1zdGF0aWMgaW50IGxpbmVfb3V0c19tb25pdG9yW1NORFJWX0NBUkRTXTsKLQotLyogRW5hYmxlIEFuYWxvZyBPdXRzIG9uIENoYW5uZWwgNjMvNjQgYnkgZGVmYXVsdCAqLwotc3RhdGljIGludCBlbmFibGVfbW9uaXRvcltTTkRSVl9DQVJEU107Ci0KIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgUk1FIEhEU1BNIGludGVyZmFjZS4iKTsKIApAQCAtNjUsNDIgKzcyLDM5IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlL2Rpc2FibGUgc3BlY2lmaWMgSERTUE0gc291bmRjYXJkcy4iKTsKIAotbW9kdWxlX3BhcmFtX2FycmF5KHByZWNpc2VfcHRyLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocHJlY2lzZV9wdHIsICJFbmFibGUgb3IgZGlzYWJsZSBwcmVjaXNlIHBvaW50ZXIuIik7Ci0KLW1vZHVsZV9wYXJhbV9hcnJheShsaW5lX291dHNfbW9uaXRvciwgYm9vbCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGxpbmVfb3V0c19tb25pdG9yLAotCQkgIlNlbmQgcGxheWJhY2sgc3RyZWFtcyB0byBhbmFsb2cgb3V0cyBieSBkZWZhdWx0LiIpOwotCi1tb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlX21vbml0b3IsIGJvb2wsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfbW9uaXRvciwKLQkJICJFbmFibGUgQW5hbG9nIE91dCBvbiBDaGFubmVsIDYzLzY0IGJ5IGRlZmF1bHQuIik7CiAKIE1PRFVMRV9BVVRIT1IKLSAgICAgICgiV2luZnJpZWQgUml0c2NoIDxyaXRzY2hfQVRfaWVtLmF0PiwgIgotICAgICAgICJQYXVsIERhdmlzIDxwYXVsQGxpbnV4YXVkaW9zeXN0ZW1zLmNvbT4sICIKLSAgICAgICAiTWFyY3VzIEFuZGVyc3NvbiwgVGhvbWFzIENoYXJib25uZWwgPHRob21hc0B1bmRhdGEub3JnPiwgIgotICAgICAgICJSZW15IEJydW5vIDxyZW15LmJydW5vQHRyaW5ub3YuY29tPiIpOworKAorCSJXaW5mcmllZCBSaXRzY2ggPHJpdHNjaF9BVF9pZW0uYXQ+LCAiCisJIlBhdWwgRGF2aXMgPHBhdWxAbGludXhhdWRpb3N5c3RlbXMuY29tPiwgIgorCSJNYXJjdXMgQW5kZXJzc29uLCBUaG9tYXMgQ2hhcmJvbm5lbCA8dGhvbWFzQHVuZGF0YS5vcmc+LCAiCisJIlJlbXkgQnJ1bm8gPHJlbXkuYnJ1bm9AdHJpbm5vdi5jb20+LCAiCisJIkZsb3JpYW4gRmFiZXIgPGZhYmVybWFuQGxpbnV4cHJvYXVkaW8ub3JnPiwgIgorCSJBZHJpYW4gS25vdGggPGFkaUBkcmNvbXAuZXJmdXJ0LnRodXIuZGU+IgorKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUk1FIEhEU1BNIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tSTUUgSERTUE0tTUFESX19Iik7CiAKLS8qIC0tLSBXcml0ZSByZWdpc3RlcnMuIC0tLSAKKy8qIC0tLSBXcml0ZSByZWdpc3RlcnMuIC0tLQogICBUaGVzZSBhcmUgZGVmaW5lZCBhcyBieXRlLW9mZnNldHMgZnJvbSB0aGUgaW9iYXNlIHZhbHVlLiAgKi8KIAorI2RlZmluZSBIRFNQTV9XUl9TRVRUSU5HUyAgICAgICAgICAgICAwCisjZGVmaW5lIEhEU1BNX291dHB1dEJ1ZmZlckFkZHJlc3MgICAgMzIKKyNkZWZpbmUgSERTUE1faW5wdXRCdWZmZXJBZGRyZXNzICAgICAzNgogI2RlZmluZSBIRFNQTV9jb250cm9sUmVnaXN0ZXIJICAgICA2NAogI2RlZmluZSBIRFNQTV9pbnRlcnJ1cHRDb25maXJtYXRpb24gIDk2CiAjZGVmaW5lIEhEU1BNX2NvbnRyb2wyUmVnCSAgICAgMjU2ICAvKiBub3QgaW4gc3BlY3MgPz8/Pz8/Pz8gKi8KICNkZWZpbmUgSERTUE1fZnJlcVJlZyAgICAgICAgICAgICAgICAyNTYgIC8qIGZvciBBRVMzMiAqLwotI2RlZmluZSBIRFNQTV9taWRpRGF0YU91dDAgIAkgICAgIDM1MiAgLyoganVzdCBiZWxpZXZlIGluIG9sZCBjb2RlICovCi0jZGVmaW5lIEhEU1BNX21pZGlEYXRhT3V0MSAgCSAgICAgMzU2CisjZGVmaW5lIEhEU1BNX21pZGlEYXRhT3V0MAkgICAgIDM1MiAgLyoganVzdCBiZWxpZXZlIGluIG9sZCBjb2RlICovCisjZGVmaW5lIEhEU1BNX21pZGlEYXRhT3V0MQkgICAgIDM1NgogI2RlZmluZSBIRFNQTV9lZXByb21fd3IJCSAgICAgMzg0ICAvKiBmb3IgQUVTMzIgKi8KIAogLyogRE1BIGVuYWJsZSBmb3IgNjQgY2hhbm5lbHMsIG9ubHkgQml0IDAgaXMgcmVsZXZhbnQgKi8KLSNkZWZpbmUgSERTUE1fb3V0cHV0RW5hYmxlQmFzZSAgICAgICA1MTIgIC8qIDUxMi03NjcgIGlucHV0ICBETUEgKi8gCisjZGVmaW5lIEhEU1BNX291dHB1dEVuYWJsZUJhc2UgICAgICAgNTEyICAvKiA1MTItNzY3ICBpbnB1dCAgRE1BICovCiAjZGVmaW5lIEhEU1BNX2lucHV0RW5hYmxlQmFzZSAgICAgICAgNzY4ICAvKiA3NjgtMTAyMyBvdXRwdXQgRE1BICovCiAKLS8qIDE2IHBhZ2UgYWRkcmVzc2VzIGZvciBlYWNoIG9mIHRoZSA2NCBjaGFubmVscyBETUEgYnVmZmVyIGluIGFuZCBvdXQgCisvKiAxNiBwYWdlIGFkZHJlc3NlcyBmb3IgZWFjaCBvZiB0aGUgNjQgY2hhbm5lbHMgRE1BIGJ1ZmZlciBpbiBhbmQgb3V0CiAgICAoZWFjaCA2NGs9MTYqNGspIEJ1ZmZlciBtdXN0IGJlIDRrIGFsaWduZWQgKHdoaWNoIGlzIGRlZmF1bHQgaTM4NiA/Pz8/KSAqLwogI2RlZmluZSBIRFNQTV9wYWdlQWRkcmVzc0J1ZmZlck91dCAgICAgICA4MTkyCiAjZGVmaW5lIEhEU1BNX3BhZ2VBZGRyZXNzQnVmZmVySW4gICAgICAgIChIRFNQTV9wYWdlQWRkcmVzc0J1ZmZlck91dCs2NCoxNio0KQpAQCAtMTE5LDIyICsxMjMsODQgQEAKICNkZWZpbmUgSERTUE1fc3RhdHVzUmVnaXN0ZXIyICAxOTIKICNkZWZpbmUgSERTUE1fdGltZWNvZGVSZWdpc3RlciAxMjgKIAorLyogQUlPLCBSYXlEQVQgKi8KKyNkZWZpbmUgSERTUE1fUkRfU1RBVFVTXzAgMAorI2RlZmluZSBIRFNQTV9SRF9TVEFUVVNfMSA2NAorI2RlZmluZSBIRFNQTV9SRF9TVEFUVVNfMiAxMjgKKyNkZWZpbmUgSERTUE1fUkRfU1RBVFVTXzMgMTkyCisKKyNkZWZpbmUgSERTUE1fUkRfVENPICAgICAgICAgICAyNTYKKyNkZWZpbmUgSERTUE1fUkRfUExMX0ZSRVEgICAgICA1MTIKKyNkZWZpbmUgSERTUE1fV1JfVENPICAgICAgICAgICAxMjgKKworI2RlZmluZSBIRFNQTV9UQ08xX1RDT19sb2NrCQkJMHgwMDAwMDAwMQorI2RlZmluZSBIRFNQTV9UQ08xX1dDS19JbnB1dF9SYW5nZV9MU0IJCTB4MDAwMDAwMDIKKyNkZWZpbmUgSERTUE1fVENPMV9XQ0tfSW5wdXRfUmFuZ2VfTVNCCQkweDAwMDAwMDA0CisjZGVmaW5lIEhEU1BNX1RDTzFfTFRDX0lucHV0X3ZhbGlkCQkweDAwMDAwMDA4CisjZGVmaW5lIEhEU1BNX1RDTzFfV0NLX0lucHV0X3ZhbGlkCQkweDAwMDAwMDEwCisjZGVmaW5lIEhEU1BNX1RDTzFfVmlkZW9fSW5wdXRfRm9ybWF0X05UU0MJMHgwMDAwMDAyMAorI2RlZmluZSBIRFNQTV9UQ08xX1ZpZGVvX0lucHV0X0Zvcm1hdF9QQUwJMHgwMDAwMDA0MAorCisjZGVmaW5lIEhEU1BNX1RDTzFfc2V0X1RDCQkJMHgwMDAwMDEwMAorI2RlZmluZSBIRFNQTV9UQ08xX3NldF9kcm9wX2ZyYW1lX2ZsYWcJCTB4MDAwMDAyMDAKKyNkZWZpbmUgSERTUE1fVENPMV9MVENfRm9ybWF0X0xTQgkJMHgwMDAwMDQwMAorI2RlZmluZSBIRFNQTV9UQ08xX0xUQ19Gb3JtYXRfTVNCCQkweDAwMDAwODAwCisKKyNkZWZpbmUgSERTUE1fVENPMl9UQ19ydW4JCQkweDAwMDEwMDAwCisjZGVmaW5lIEhEU1BNX1RDTzJfV0NLX0lPX3JhdGlvX0xTQgkJMHgwMDAyMDAwMAorI2RlZmluZSBIRFNQTV9UQ08yX1dDS19JT19yYXRpb19NU0IJCTB4MDAwNDAwMDAKKyNkZWZpbmUgSERTUE1fVENPMl9zZXRfbnVtX2Ryb3BfZnJhbWVzX0xTQgkweDAwMDgwMDAwCisjZGVmaW5lIEhEU1BNX1RDTzJfc2V0X251bV9kcm9wX2ZyYW1lc19NU0IJMHgwMDEwMDAwMAorI2RlZmluZSBIRFNQTV9UQ08yX3NldF9qYW1fc3luYwkJCTB4MDAyMDAwMDAKKyNkZWZpbmUgSERTUE1fVENPMl9zZXRfZmx5d2hlZWwJCQkweDAwNDAwMDAwCisKKyNkZWZpbmUgSERTUE1fVENPMl9zZXRfMDFfNAkJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSERTUE1fVENPMl9zZXRfcHVsbF9kb3duCQkweDAyMDAwMDAwCisjZGVmaW5lIEhEU1BNX1RDTzJfc2V0X3B1bGxfdXAJCQkweDA0MDAwMDAwCisjZGVmaW5lIEhEU1BNX1RDTzJfc2V0X2ZyZXEJCQkweDA4MDAwMDAwCisjZGVmaW5lIEhEU1BNX1RDTzJfc2V0X3Rlcm1fNzVSCQkJMHgxMDAwMDAwMAorI2RlZmluZSBIRFNQTV9UQ08yX3NldF9pbnB1dF9MU0IJCTB4MjAwMDAwMDAKKyNkZWZpbmUgSERTUE1fVENPMl9zZXRfaW5wdXRfTVNCCQkweDQwMDAwMDAwCisjZGVmaW5lIEhEU1BNX1RDTzJfc2V0X2ZyZXFfZnJvbV9hcHAJCTB4ODAwMDAwMDAKKworCisjZGVmaW5lIEhEU1BNX21pZGlEYXRhT3V0MCAgICAzNTIKKyNkZWZpbmUgSERTUE1fbWlkaURhdGFPdXQxICAgIDM1NgorI2RlZmluZSBIRFNQTV9taWRpRGF0YU91dDIgICAgMzY4CisKICNkZWZpbmUgSERTUE1fbWlkaURhdGFJbjAgICAgIDM2MAogI2RlZmluZSBIRFNQTV9taWRpRGF0YUluMSAgICAgMzY0CisjZGVmaW5lIEhEU1BNX21pZGlEYXRhSW4yICAgICAzNzIKKyNkZWZpbmUgSERTUE1fbWlkaURhdGFJbjMgICAgIDM3NgogCiAvKiBzdGF0dXMgaXMgZGF0YSBieXRlcyBpbiBNSURJLUZJRk8gKDAtMTI4KSAqLwotI2RlZmluZSBIRFNQTV9taWRpU3RhdHVzT3V0MCAgMzg0CQotI2RlZmluZSBIRFNQTV9taWRpU3RhdHVzT3V0MSAgMzg4CQotI2RlZmluZSBIRFNQTV9taWRpU3RhdHVzSW4wICAgMzkyCQotI2RlZmluZSBIRFNQTV9taWRpU3RhdHVzSW4xICAgMzk2CQorI2RlZmluZSBIRFNQTV9taWRpU3RhdHVzT3V0MCAgMzg0CisjZGVmaW5lIEhEU1BNX21pZGlTdGF0dXNPdXQxICAzODgKKyNkZWZpbmUgSERTUE1fbWlkaVN0YXR1c091dDIgIDQwMAorCisjZGVmaW5lIEhEU1BNX21pZGlTdGF0dXNJbjAgICAzOTIKKyNkZWZpbmUgSERTUE1fbWlkaVN0YXR1c0luMSAgIDM5NgorI2RlZmluZSBIRFNQTV9taWRpU3RhdHVzSW4yICAgNDA0CisjZGVmaW5lIEhEU1BNX21pZGlTdGF0dXNJbjMgICA0MDgKIAogCiAvKiB0aGUgbWV0ZXJzIGFyZSByZWd1bGFyIGkvby1tYXBwZWQgcmVnaXN0ZXJzLCBidXQgb2Zmc2V0CiAgICBjb25zaWRlcmFibHkgZnJvbSB0aGUgcmVzdC4gdGhlIHBlYWsgcmVnaXN0ZXJzIGFyZSByZXNldAotICAgd2hlbiByZWFkOyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgNCBiaXRzIGFyZSBmdWxsLXNjYWxlIGNvdW50ZXJzOyAKKyAgIHdoZW4gcmVhZDsgdGhlIGxlYXN0LXNpZ25pZmljYW50IDQgYml0cyBhcmUgZnVsbC1zY2FsZSBjb3VudGVyczsKICAgIHRoZSBhY3R1YWwgcGVhayB2YWx1ZSBpcyBpbiB0aGUgbW9zdC1zaWduaWZpY2FudCAyNCBiaXRzLgogKi8KLSNkZWZpbmUgSERTUE1fTUFESV9wZWFrcm1zYmFzZSAJNDA5NgkvKiA0MDk2LTgxOTEgMng2NHgzMkJpdCBNZXRlcnMgKi8KKworI2RlZmluZSBIRFNQTV9NQURJX0lOUFVUX1BFQUsJCTQwOTYKKyNkZWZpbmUgSERTUE1fTUFESV9QTEFZQkFDS19QRUFLCTQzNTIKKyNkZWZpbmUgSERTUE1fTUFESV9PVVRQVVRfUEVBSwkJNDYwOAorCisjZGVmaW5lIEhEU1BNX01BRElfSU5QVVRfUk1TX0wJCTYxNDQKKyNkZWZpbmUgSERTUE1fTUFESV9QTEFZQkFDS19STVNfTAk2NDAwCisjZGVmaW5lIEhEU1BNX01BRElfT1VUUFVUX1JNU19MCQk2NjU2CisKKyNkZWZpbmUgSERTUE1fTUFESV9JTlBVVF9STVNfSAkJNzE2OAorI2RlZmluZSBIRFNQTV9NQURJX1BMQVlCQUNLX1JNU19ICTc0MjQKKyNkZWZpbmUgSERTUE1fTUFESV9PVVRQVVRfUk1TX0gJCTc2ODAKIAogLyogLS0tIENvbnRyb2wgUmVnaXN0ZXIgYml0cyAtLS0tLS0tLS0gKi8KICNkZWZpbmUgSERTUE1fU3RhcnQgICAgICAgICAgICAgICAgKDE8PDApIC8qIHN0YXJ0IGVuZ2luZSAqLwpAQCAtMTQzLDcgKzIwOSw5IEBACiAjZGVmaW5lIEhEU1BNX0xhdGVuY3kxICAgICAgICAgICAgICgxPDwyKSAvKiB3aGVyZSBuIGlzIGRlZmluZWQgKi8KICNkZWZpbmUgSERTUE1fTGF0ZW5jeTIgICAgICAgICAgICAgKDE8PDMpIC8qIGJ5IExhdGVuY3l7MiwxLDB9ICovCiAKLSNkZWZpbmUgSERTUE1fQ2xvY2tNb2RlTWFzdGVyICAgICAgKDE8PDQpIC8qIDE9TWFzdGVyLCAwPVNsYXZlL0F1dG9zeW5jICovCisjZGVmaW5lIEhEU1BNX0Nsb2NrTW9kZU1hc3RlciAgICAgICgxPDw0KSAvKiAxPU1hc3RlciwgMD1BdXRvc3luYyAqLworI2RlZmluZSBIRFNQTV9jME1hc3RlcgkJMHgxICAgIC8qIE1hc3RlciBjbG9jayBiaXQgaW4gc2V0dGluZ3MKKwkJCQkJICByZWdpc3RlciBbUmF5REFULCBBSU9dICovCiAKICNkZWZpbmUgSERTUE1fQXVkaW9JbnRlcnJ1cHRFbmFibGUgKDE8PDUpIC8qIHdoYXQgZG8geW91IHRoaW5rID8gKi8KIApAQCAtMTU3LDcgKzIyNSw3IEBACiAJCQkJICAgICA1NmNoYW5uZWxNT0RFPTAgKi8gLyogTUFESSBPTkxZKi8KICNkZWZpbmUgSERTUE1fRW1waGFzaXMgICAgKDE8PDEwKSAvKiBFbXBoYXNpcyAqLyAvKiBBRVMzMiBPTkxZICovCiAKLSNkZWZpbmUgSERTUE1fQXV0b0lucCAgICAgKDE8PDExKSAvKiBBdXRvIElucHV0ICh0YWtlb3ZlcikgPT0gU2FmZSBNb2RlLCAKKyNkZWZpbmUgSERTUE1fQXV0b0lucCAgICAgKDE8PDExKSAvKiBBdXRvIElucHV0ICh0YWtlb3ZlcikgPT0gU2FmZSBNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA9b2ZmLCAxPW9uICAqLyAvKiBNQURJIE9OTFkgKi8KICNkZWZpbmUgSERTUE1fRG9sYnkgICAgICAgKDE8PDExKSAvKiBEb2xieSA9ICJOb25BdWRpbyIgPz8gKi8gLyogQUVTMzIgT05MWSAqLwogCkBAIC0xNjYsMjIgKzIzNCwyMyBAQAogCQkJCSAgICAqLwogI2RlZmluZSBIRFNQTV9JbnB1dFNlbGVjdDEgKDE8PDE1KSAvKiBzaG91bGQgYmUgMCAqLwogCi0jZGVmaW5lIEhEU1BNX1N5bmNSZWYwICAgICAoMTw8MTYpIC8qIDA9V09yZCwgMT1NQURJICovCi0jZGVmaW5lIEhEU1BNX1N5bmNSZWYxICAgICAoMTw8MTcpIC8qIGZvciBBRVMzMjogU3luY1JlZk4gY29kZXMgdGhlIEFFUyAjICovCiAjZGVmaW5lIEhEU1BNX1N5bmNSZWYyICAgICAoMTw8MTMpCiAjZGVmaW5lIEhEU1BNX1N5bmNSZWYzICAgICAoMTw8MjUpCiAKICNkZWZpbmUgSERTUE1fU01VWCAgICAgICAgICgxPDwxOCkgLyogRnJhbWUgPz8/ICovIC8qIE1BREkgT05ZICovCi0jZGVmaW5lIEhEU1BNX2Nscl90bXMgICAgICAoMTw8MTkpIC8qIGNsZWFyIHRyYWNrIG1hcmtlciwgZG8gbm90IHVzZSAKKyNkZWZpbmUgSERTUE1fY2xyX3RtcyAgICAgICgxPDwxOSkgLyogY2xlYXIgdHJhY2sgbWFya2VyLCBkbyBub3QgdXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFFUyBhZGRpdGlvbmFsIGJpdHMgaW4KIAkJCQkgICAgICBsb3dlciA1IEF1ZGlvZGF0YWJpdHMgPz8/ICovCiAjZGVmaW5lIEhEU1BNX3RheGlfcmVzZXQgICAoMTw8MjApIC8qID8/PyAqLyAvKiBNQURJIE9OTFkgPyAqLwogI2RlZmluZSBIRFNQTV9XQ0s0OCAgICAgICAgKDE8PDIwKSAvKiBGcmFtZSA/Pz8gPSBIRFNQTV9TTVVYICovIC8qIEFFUzMyIE9OTFkgKi8KIAotI2RlZmluZSBIRFNQTV9NaWRpMEludGVycnVwdEVuYWJsZSAoMTw8MjIpCi0jZGVmaW5lIEhEU1BNX01pZGkxSW50ZXJydXB0RW5hYmxlICgxPDwyMykKKyNkZWZpbmUgSERTUE1fTWlkaTBJbnRlcnJ1cHRFbmFibGUgMHgwNDAwMDAwCisjZGVmaW5lIEhEU1BNX01pZGkxSW50ZXJydXB0RW5hYmxlIDB4MDgwMDAwMAorI2RlZmluZSBIRFNQTV9NaWRpMkludGVycnVwdEVuYWJsZSAweDAyMDAwMDAKKyNkZWZpbmUgSERTUE1fTWlkaTNJbnRlcnJ1cHRFbmFibGUgMHg0MDAwMDAwCiAKICNkZWZpbmUgSERTUE1fTGluZU91dCAoMTw8MjQpIC8qIEFuYWxvZyBPdXQgb24gY2hhbm5lbCA2My82NCBvbj0xLCBtdXRlPTAgKi8KKyNkZWZpbmUgSERTUGVfRkxPQVRfRk9STUFUICAgICAgICAgMHgyMDAwMDAwCiAKICNkZWZpbmUgSERTUE1fRFNfRG91YmxlV2lyZSAoMTw8MjYpIC8qIEFFUzMyIE9OTFkgKi8KICNkZWZpbmUgSERTUE1fUVNfRG91YmxlV2lyZSAoMTw8MjcpIC8qIEFFUzMyIE9OTFkgKi8KQEAgLTE5OCwxMSArMjY3LDE4IEBACiAjZGVmaW5lIEhEU1BNX0lucHV0Q29heGlhbCAgIChIRFNQTV9JbnB1dFNlbGVjdDApCiAjZGVmaW5lIEhEU1BNX1N5bmNSZWZNYXNrICAgIChIRFNQTV9TeW5jUmVmMHxIRFNQTV9TeW5jUmVmMXxcCiAJCQkgICAgICBIRFNQTV9TeW5jUmVmMnxIRFNQTV9TeW5jUmVmMykKLSNkZWZpbmUgSERTUE1fU3luY1JlZl9Xb3JkICAgMAotI2RlZmluZSBIRFNQTV9TeW5jUmVmX01BREkgICAoSERTUE1fU3luY1JlZjApCiAKLSNkZWZpbmUgSERTUE1fU1lOQ19GUk9NX1dPUkQgMAkvKiBQcmVmZXJyZWQgc3luYyByZWZlcmVuY2UgKi8KLSNkZWZpbmUgSERTUE1fU1lOQ19GUk9NX01BREkgMQkvKiBjaG9pY2VzIC0gdXNlZCBieSAicHJlZl9zeW5jX3JlZiIgKi8KKyNkZWZpbmUgSERTUE1fYzBfU3luY1JlZjAgICAgICAweDIKKyNkZWZpbmUgSERTUE1fYzBfU3luY1JlZjEgICAgICAweDQKKyNkZWZpbmUgSERTUE1fYzBfU3luY1JlZjIgICAgICAweDgKKyNkZWZpbmUgSERTUE1fYzBfU3luY1JlZjMgICAgICAweDEwCisjZGVmaW5lIEhEU1BNX2MwX1N5bmNSZWZNYXNrICAgKEhEU1BNX2MwX1N5bmNSZWYwIHwgSERTUE1fYzBfU3luY1JlZjEgfFwKKwkJCQlIRFNQTV9jMF9TeW5jUmVmMiB8IEhEU1BNX2MwX1N5bmNSZWYzKQorCisjZGVmaW5lIEhEU1BNX1NZTkNfRlJPTV9XT1JEICAgIDAJLyogUHJlZmVycmVkIHN5bmMgcmVmZXJlbmNlICovCisjZGVmaW5lIEhEU1BNX1NZTkNfRlJPTV9NQURJICAgIDEJLyogY2hvaWNlcyAtIHVzZWQgYnkgInByZWZfc3luY19yZWYiICovCisjZGVmaW5lIEhEU1BNX1NZTkNfRlJPTV9UQ08gICAgIDIKKyNkZWZpbmUgSERTUE1fU1lOQ19GUk9NX1NZTkNfSU4gMwogCiAjZGVmaW5lIEhEU1BNX0ZyZXF1ZW5jeTMyS0h6ICAgIEhEU1BNX0ZyZXF1ZW5jeTAKICNkZWZpbmUgSERTUE1fRnJlcXVlbmN5NDRfMUtIeiAgSERTUE1fRnJlcXVlbmN5MQpAQCAtMjE2LDE3ICsyOTIsNiBAQAogI2RlZmluZSBIRFNQTV9GcmVxdWVuY3kxOTJLSHogICAoSERTUE1fUXVhZFNwZWVkfEhEU1BNX0ZyZXF1ZW5jeTF8XAogCQkJCSBIRFNQTV9GcmVxdWVuY3kwKQogCi0vKiAtLS0gZm9yIGludGVybmFsIGRpc2NyaW1pbmF0aW9uICovCi0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9BVVRPU1lOQyAgICAgICAgICAwCS8qIFNhbXBsZSBDbG9jayBTb3VyY2VzICovCi0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF8zMktIWiAgICAxCi0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80NF8xS0haICAyCi0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80OEtIWiAgICAzCi0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF82NEtIWiAgICA0Ci0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF84OF8yS0haICA1Ci0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF85NktIWiAgICA2Ci0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF8xMjhLSFogICA3Ci0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF8xNzZfNEtIWiA4Ci0jZGVmaW5lIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF8xOTJLSFogICA5CiAKIC8qIFN5bmNjaGVjayBTdGF0dXMgKi8KICNkZWZpbmUgSERTUE1fU1lOQ19DSEVDS19OT19MT0NLIDAKQEAgLTIzNiwxNCArMzAxLDE2IEBACiAvKiBBdXRvU3luYyBSZWZlcmVuY2VzIC0gdXNlZCBieSAiYXV0b3N5bmNfcmVmIiBjb250cm9sIHN3aXRjaCAqLwogI2RlZmluZSBIRFNQTV9BVVRPU1lOQ19GUk9NX1dPUkQgICAgICAwCiAjZGVmaW5lIEhEU1BNX0FVVE9TWU5DX0ZST01fTUFESSAgICAgIDEKLSNkZWZpbmUgSERTUE1fQVVUT1NZTkNfRlJPTV9OT05FICAgICAgMgorI2RlZmluZSBIRFNQTV9BVVRPU1lOQ19GUk9NX1RDTyAgICAgICAyCisjZGVmaW5lIEhEU1BNX0FVVE9TWU5DX0ZST01fU1lOQ19JTiAgIDMKKyNkZWZpbmUgSERTUE1fQVVUT1NZTkNfRlJPTV9OT05FICAgICAgNAogCiAvKiBQb3NzaWJsZSBzb3VyY2VzIG9mIE1BREkgaW5wdXQgKi8KICNkZWZpbmUgSERTUE1fT1BUSUNBTCAwCQkvKiBvcHRpY2FsICAgKi8KICNkZWZpbmUgSERTUE1fQ09BWElBTCAxCQkvKiBCTkMgKi8KIAogI2RlZmluZSBoZHNwbV9lbmNvZGVfbGF0ZW5jeSh4KSAgICAgICAoKCh4KTw8MSkgJiBIRFNQTV9MYXRlbmN5TWFzaykKLSNkZWZpbmUgaGRzcG1fZGVjb2RlX2xhdGVuY3koeCkgICAgICAgKCgoeCkgJiBIRFNQTV9MYXRlbmN5TWFzayk+PjEpCisjZGVmaW5lIGhkc3BtX2RlY29kZV9sYXRlbmN5KHgpICAgICAgICgoKCh4KSAmIEhEU1BNX0xhdGVuY3lNYXNrKT4+MSkpCiAKICNkZWZpbmUgaGRzcG1fZW5jb2RlX2luKHgpICgoKHgpJjB4Myk8PDE0KQogI2RlZmluZSBoZHNwbV9kZWNvZGVfaW4oeCkgKCgoeCk+PjE0KSYweDMpCkBAIC0yNzAsMTMgKzMzNywyMSBAQAogI2RlZmluZSBIRFNQTV9BQl9pbnQgICAgICAgICAgICAgKDE8PDIpCS8qIElucHV0Q2hhbm5lbCBPcHQ9MCwgQ29heD0xCiAJCQkJCSAqIChsaWtlIGlucDApCiAJCQkJCSAqLworCiAjZGVmaW5lIEhEU1BNX21hZGlMb2NrICAgICAgICAgICAoMTw8MykJLyogTUFESSBMb2NrZWQgPTEsIG5vPTAgKi8KKyNkZWZpbmUgSERTUE1fbWFkaVN5bmMgICAgICAgICAgKDE8PDE4KSAvKiBNQURJIGlzIGluIHN5bmMgKi8KKworI2RlZmluZSBIRFNQTV90Y29Mb2NrICAgIDB4MDAwMDAwMjAgLyogT3B0aW9uYWwgVENPIGxvY2tlZCBzdGF0dXMgRk9SIEhEU1BlIE1BREkhICovCisjZGVmaW5lIEhEU1BNX3Rjb1N5bmMgICAgMHgxMDAwMDAwMCAvKiBPcHRpb25hbCBUQ08gc3luYyBzdGF0dXMgKi8KKworI2RlZmluZSBIRFNQTV9zeW5jSW5Mb2NrIDB4MDAwMTAwMDAgLyogU3luYyBJbiBsb2NrIHN0YXR1cyBGT1IgSERTUGUgTUFESSEgKi8KKyNkZWZpbmUgSERTUE1fc3luY0luU3luYyAweDAwMDIwMDAwIC8qIFN5bmMgSW4gc3luYyBzdGF0dXMgRk9SIEhEU1BlIE1BREkhICovCiAKICNkZWZpbmUgSERTUE1fQnVmZmVyUG9zaXRpb25NYXNrIDB4MDAwRkZDMCAvKiBCaXQgNi4uMTUgOiBoL3cgYnVmZmVyIHBvaW50ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaW5jZSA2NGJ5dGUgYWNjdXJhdGUgbGFzdCA2IGJpdHMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vdCB1c2VkICovCisJCQkvKiBzaW5jZSA2NGJ5dGUgYWNjdXJhdGUsIGxhc3QgNiBiaXRzIGFyZSBub3QgdXNlZCAqLwogCi0jZGVmaW5lIEhEU1BNX21hZGlTeW5jICAgICAgICAgICgxPDwxOCkgLyogTUFESSBpcyBpbiBzeW5jICovCisKKwogI2RlZmluZSBIRFNQTV9Eb3VibGVTcGVlZFN0YXR1cyAoMTw8MTkpIC8qIChpbnB1dCkgY2FyZCBpbiBkb3VibGUgc3BlZWQgKi8KIAogI2RlZmluZSBIRFNQTV9tYWRpRnJlcTAgICAgICAgICAoMTw8MjIpCS8qIHN5c3RlbSBmcmVxIDA9ZXJyb3IgKi8KQEAgLTI4Nyw4ICszNjIsMTkgQEAKICNkZWZpbmUgSERTUE1fQnVmZmVySUQgICAgICAgICAgKDE8PDI2KQkvKiAoRG91YmxlKUJ1ZmZlciBJRCB0b2dnbGVzIHdpdGgKIAkJCQkJICogSW50ZXJydXB0CiAJCQkJCSAqLwotI2RlZmluZSBIRFNQTV9taWRpMElSUVBlbmRpbmcgICAoMTw8MzApCS8qIE1JREkgSVJRIGlzIHBlbmRpbmcgICovCi0jZGVmaW5lIEhEU1BNX21pZGkxSVJRUGVuZGluZyAgICgxPDwzMSkJLyogYW5kIGFrdGl2ICovCisjZGVmaW5lIEhEU1BNX3Rjb19kZXRlY3QgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEhEU1BNX3Rjb19sb2NrCSAgICAgICAgIDB4MjAwMDAwMDAKKworI2RlZmluZSBIRFNQTV9zMl90Y29fZGV0ZWN0ICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBIRFNQTV9zMl9BRUJPX0QgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBIRFNQTV9zMl9BRUJJX0QgICAgICAgICAgMHgwMDAwMDEwMAorCisKKyNkZWZpbmUgSERTUE1fbWlkaTBJUlFQZW5kaW5nICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSERTUE1fbWlkaTFJUlFQZW5kaW5nICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSERTUE1fbWlkaTJJUlFQZW5kaW5nICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSERTUE1fbWlkaTJJUlFQZW5kaW5nQUVTIDB4MDAwMDAwMjAKKyNkZWZpbmUgSERTUE1fbWlkaTNJUlFQZW5kaW5nICAgIDB4MDAyMDAwMDAKIAogLyogLS0tIHN0YXR1cyBiaXQgaGVscGVycyAqLwogI2RlZmluZSBIRFNQTV9tYWRpRnJlcU1hc2sgIChIRFNQTV9tYWRpRnJlcTB8SERTUE1fbWFkaUZyZXExfFwKQEAgLTMxNyw3ICs0MDMsMTAgQEAKICNkZWZpbmUgSERTUE1fd2NfZnJlcTIgKDE8PDcpCS8qIDEwMD02NCwgMTAxPTg4LjIsIDExMD05NiwgKi8KIC8qIG1pc3NpbmcgQml0ICAgZm9yICAgICAgICAgICAgICAgMTExPTEyOCwgMTAwMD0xNzYuNCwgMTAwMT0xOTIgKi8KIAotI2RlZmluZSBIRFNQTV9TZWxTeW5jUmVmMCAoMTw8OCkJLyogU3luYyBTb3VyY2UgaW4gc2xhdmUgbW9kZSAqLworI2RlZmluZSBIRFNQTV9TeW5jUmVmMCAweDEwMDAwICAvKiBTeW5jIFJlZmVyZW5jZSAqLworI2RlZmluZSBIRFNQTV9TeW5jUmVmMSAweDIwMDAwCisKKyNkZWZpbmUgSERTUE1fU2VsU3luY1JlZjAgKDE8PDgpCS8qIEF1dG9TeW5jIFNvdXJjZSAqLwogI2RlZmluZSBIRFNQTV9TZWxTeW5jUmVmMSAoMTw8OSkJLyogMDAwPXdvcmQsIDAwMT1NQURJLCAqLwogI2RlZmluZSBIRFNQTV9TZWxTeW5jUmVmMiAoMTw8MTApCS8qIDExMT1ubyB2YWxpZCBzaWduYWwgKi8KIApAQCAtMzMxLDExICs0MjAsMTkgQEAKICNkZWZpbmUgSERTUE1fd2NGcmVxODhfMiAgKEhEU1BNX3djX2ZyZXEwfEhEU1BNX3djX2ZyZXEyKQogI2RlZmluZSBIRFNQTV93Y0ZyZXE5NiAgICAoSERTUE1fd2NfZnJlcTF8SERTUE1fd2NfZnJlcTIpCiAKKyNkZWZpbmUgSERTUE1fc3RhdHVzMV9GXzAgMHgwNDAwMDAwCisjZGVmaW5lIEhEU1BNX3N0YXR1czFfRl8xIDB4MDgwMDAwMAorI2RlZmluZSBIRFNQTV9zdGF0dXMxX0ZfMiAweDEwMDAwMDAKKyNkZWZpbmUgSERTUE1fc3RhdHVzMV9GXzMgMHgyMDAwMDAwCisjZGVmaW5lIEhEU1BNX3N0YXR1czFfZnJlcU1hc2sgKEhEU1BNX3N0YXR1czFfRl8wfEhEU1BNX3N0YXR1czFfRl8xfEhEU1BNX3N0YXR1czFfRl8yfEhEU1BNX3N0YXR1czFfRl8zKQorCiAKICNkZWZpbmUgSERTUE1fU2VsU3luY1JlZk1hc2sgICAgICAgKEhEU1BNX1NlbFN5bmNSZWYwfEhEU1BNX1NlbFN5bmNSZWYxfFwKIAkJCQkgICAgSERTUE1fU2VsU3luY1JlZjIpCiAjZGVmaW5lIEhEU1BNX1NlbFN5bmNSZWZfV09SRCAgICAgIDAKICNkZWZpbmUgSERTUE1fU2VsU3luY1JlZl9NQURJICAgICAgKEhEU1BNX1NlbFN5bmNSZWYwKQorI2RlZmluZSBIRFNQTV9TZWxTeW5jUmVmX1RDTyAgICAgICAoSERTUE1fU2VsU3luY1JlZjEpCisjZGVmaW5lIEhEU1BNX1NlbFN5bmNSZWZfU3luY0luICAgIChIRFNQTV9TZWxTeW5jUmVmMHxIRFNQTV9TZWxTeW5jUmVmMSkKICNkZWZpbmUgSERTUE1fU2VsU3luY1JlZl9OVkFMSUQgICAgKEhEU1BNX1NlbFN5bmNSZWYwfEhEU1BNX1NlbFN5bmNSZWYxfFwKIAkJCQkgICAgSERTUE1fU2VsU3luY1JlZjIpCiAKQEAgLTM0NSw3ICs0NDIsNyBAQAogLyogc3RhdHVzICovCiAjZGVmaW5lIEhEU1BNX0FFUzMyX3djTG9jawkweDAyMDAwMDAKICNkZWZpbmUgSERTUE1fQUVTMzJfd2NGcmVxX2JpdCAgMjIKLS8qIChzdGF0dXMgPj4gSERTUE1fQUVTMzJfd2NGcmVxX2JpdCkgJiAweEYgZ2l2ZXMgV0MgZnJlcXVlbmN5IChjZiBmdW5jdGlvbiAKKy8qIChzdGF0dXMgPj4gSERTUE1fQUVTMzJfd2NGcmVxX2JpdCkgJiAweEYgZ2l2ZXMgV0MgZnJlcXVlbmN5IChjZiBmdW5jdGlvbgogICBIRFNQTV9iaXQyZnJlcSAqLwogI2RlZmluZSBIRFNQTV9BRVMzMl9zeW5jcmVmX2JpdCAgMTYKIC8qIChzdGF0dXMgPj4gSERTUE1fQUVTMzJfc3luY3JlZl9iaXQpICYgMHhGIGdpdmVzIHN5bmMgc291cmNlICovCkBAIC0zOTgsMjggKzQ5NSwzNDggQEAKICNkZWZpbmUgTUFESV9EU19DSEFOTkVMUyAgICAgICAzMgogI2RlZmluZSBNQURJX1FTX0NIQU5ORUxTICAgICAgIDE2CiAKKyNkZWZpbmUgUkFZREFUX1NTX0NIQU5ORUxTICAgICAzNgorI2RlZmluZSBSQVlEQVRfRFNfQ0hBTk5FTFMgICAgIDIwCisjZGVmaW5lIFJBWURBVF9RU19DSEFOTkVMUyAgICAgMTIKKworI2RlZmluZSBBSU9fSU5fU1NfQ0hBTk5FTFMgICAgICAgIDE0CisjZGVmaW5lIEFJT19JTl9EU19DSEFOTkVMUyAgICAgICAgMTAKKyNkZWZpbmUgQUlPX0lOX1FTX0NIQU5ORUxTICAgICAgICA4CisjZGVmaW5lIEFJT19PVVRfU1NfQ0hBTk5FTFMgICAgICAgIDE2CisjZGVmaW5lIEFJT19PVVRfRFNfQ0hBTk5FTFMgICAgICAgIDEyCisjZGVmaW5lIEFJT19PVVRfUVNfQ0hBTk5FTFMgICAgICAgIDEwCisKKyNkZWZpbmUgQUVTMzJfQ0hBTk5FTFMJCTE2CisKIC8qIHRoZSBzaXplIG9mIGEgc3Vic3RyZWFtICgxIG1vbm8gZGF0YSBzdHJlYW0pICovCiAjZGVmaW5lIEhEU1BNX0NIQU5ORUxfQlVGRkVSX1NBTVBMRVMgICgxNioxMDI0KQogI2RlZmluZSBIRFNQTV9DSEFOTkVMX0JVRkZFUl9CWVRFUyAgICAoNCpIRFNQTV9DSEFOTkVMX0JVRkZFUl9TQU1QTEVTKQogCiAvKiB0aGUgc2l6ZSBvZiB0aGUgYXJlYSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGZvciBETUEgdHJhbnNmZXJzLiB0aGUKICAgIHNpemUgaXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLCBhbmQKLSAgIGFsc28gdGhlIGxhdGVuY3kgdG8gdXNlLiAKKyAgIGFsc28gdGhlIGxhdGVuY3kgdG8gdXNlLgogICAgZm9yIG9uZSBkaXJlY3Rpb24gISEhCiAqLwogI2RlZmluZSBIRFNQTV9ETUFfQVJFQV9CWVRFUyAoSERTUE1fTUFYX0NIQU5ORUxTICogSERTUE1fQ0hBTk5FTF9CVUZGRVJfQllURVMpCiAjZGVmaW5lIEhEU1BNX0RNQV9BUkVBX0tJTE9CWVRFUyAoSERTUE1fRE1BX0FSRUFfQllURVMvMTAyNCkKIAogLyogcmV2aXNpb25zID49IDIzMCBpbmRpY2F0ZSBBRVMzMiBjYXJkICovCi0jZGVmaW5lIEhEU1BNX0FFU1JFVklTSU9OIDIzMAorI2RlZmluZSBIRFNQTV9NQURJX1JFVgkJMjEwCisjZGVmaW5lIEhEU1BNX1JBWURBVF9SRVYJMjExCisjZGVmaW5lIEhEU1BNX0FJT19SRVYJCTIxMgorI2RlZmluZSBIRFNQTV9NQURJRkFDRV9SRVYJMjEzCisjZGVmaW5lIEhEU1BNX0FFU19SRVYJCTI0MAorI2RlZmluZSBIRFNQTV9BRVMzMl9SRVYJCTIzNAorI2RlZmluZSBIRFNQTV9BRVMzMl9PTERfUkVWCTIzMwogCiAvKiBzcGVlZCBmYWN0b3IgbW9kZXMgKi8KICNkZWZpbmUgSERTUE1fU1BFRURfU0lOR0xFIDAKICNkZWZpbmUgSERTUE1fU1BFRURfRE9VQkxFIDEKICNkZWZpbmUgSERTUE1fU1BFRURfUVVBRCAgIDIKKwogLyogbmFtZXMgZm9yIHNwZWVkIG1vZGVzICovCiBzdGF0aWMgY2hhciAqaGRzcG1fc3BlZWRfbmFtZXNbXSA9IHsgInNpbmdsZSIsICJkb3VibGUiLCAicXVhZCIgfTsKIAorc3RhdGljIGNoYXIgKnRleHRzX2F1dG9zeW5jX2Flc190Y29bXSA9IHsgIldvcmQgQ2xvY2siLAorCQkJCQkgICJBRVMxIiwgIkFFUzIiLCAiQUVTMyIsICJBRVM0IiwKKwkJCQkJICAiQUVTNSIsICJBRVM2IiwgIkFFUzciLCAiQUVTOCIsCisJCQkJCSAgIlRDTyIgfTsKK3N0YXRpYyBjaGFyICp0ZXh0c19hdXRvc3luY19hZXNbXSA9IHsgIldvcmQgQ2xvY2siLAorCQkJCSAgICAgICJBRVMxIiwgIkFFUzIiLCAiQUVTMyIsICJBRVM0IiwKKwkJCQkgICAgICAiQUVTNSIsICJBRVM2IiwgIkFFUzciLCAiQUVTOCIgfTsKK3N0YXRpYyBjaGFyICp0ZXh0c19hdXRvc3luY19tYWRpX3Rjb1tdID0geyAiV29yZCBDbG9jayIsCisJCQkJCSAgICJNQURJIiwgIlRDTyIsICJTeW5jIEluIiB9Oworc3RhdGljIGNoYXIgKnRleHRzX2F1dG9zeW5jX21hZGlbXSA9IHsgIldvcmQgQ2xvY2siLAorCQkJCSAgICAgICAiTUFESSIsICJTeW5jIEluIiB9OworCitzdGF0aWMgY2hhciAqdGV4dHNfYXV0b3N5bmNfcmF5ZGF0X3Rjb1tdID0geworCSJXb3JkIENsb2NrIiwKKwkiQURBVCAxIiwgIkFEQVQgMiIsICJBREFUIDMiLCAiQURBVCA0IiwKKwkiQUVTIiwgIlNQRElGIiwgIlRDTyIsICJTeW5jIEluIgorfTsKK3N0YXRpYyBjaGFyICp0ZXh0c19hdXRvc3luY19yYXlkYXRbXSA9IHsKKwkiV29yZCBDbG9jayIsCisJIkFEQVQgMSIsICJBREFUIDIiLCAiQURBVCAzIiwgIkFEQVQgNCIsCisJIkFFUyIsICJTUERJRiIsICJTeW5jIEluIgorfTsKK3N0YXRpYyBjaGFyICp0ZXh0c19hdXRvc3luY19haW9fdGNvW10gPSB7CisJIldvcmQgQ2xvY2siLAorCSJBREFUIiwgIkFFUyIsICJTUERJRiIsICJUQ08iLCAiU3luYyBJbiIKK307CitzdGF0aWMgY2hhciAqdGV4dHNfYXV0b3N5bmNfYWlvW10gPSB7ICJXb3JkIENsb2NrIiwKKwkJCQkgICAgICAiQURBVCIsICJBRVMiLCAiU1BESUYiLCAiU3luYyBJbiIgfTsKKworc3RhdGljIGNoYXIgKnRleHRzX2ZyZXFbXSA9IHsKKwkiTm8gTG9jayIsCisJIjMyIGtIeiIsCisJIjQ0LjEga0h6IiwKKwkiNDgga0h6IiwKKwkiNjQga0h6IiwKKwkiODguMiBrSHoiLAorCSI5NiBrSHoiLAorCSIxMjgga0h6IiwKKwkiMTc2LjQga0h6IiwKKwkiMTkyIGtIeiIKK307CisKK3N0YXRpYyBjaGFyICp0ZXh0c19wb3J0c19tYWRpW10gPSB7CisJIk1BREkuMSIsICJNQURJLjIiLCAiTUFESS4zIiwgIk1BREkuNCIsICJNQURJLjUiLCAiTUFESS42IiwKKwkiTUFESS43IiwgIk1BREkuOCIsICJNQURJLjkiLCAiTUFESS4xMCIsICJNQURJLjExIiwgIk1BREkuMTIiLAorCSJNQURJLjEzIiwgIk1BREkuMTQiLCAiTUFESS4xNSIsICJNQURJLjE2IiwgIk1BREkuMTciLCAiTUFESS4xOCIsCisJIk1BREkuMTkiLCAiTUFESS4yMCIsICJNQURJLjIxIiwgIk1BREkuMjIiLCAiTUFESS4yMyIsICJNQURJLjI0IiwKKwkiTUFESS4yNSIsICJNQURJLjI2IiwgIk1BREkuMjciLCAiTUFESS4yOCIsICJNQURJLjI5IiwgIk1BREkuMzAiLAorCSJNQURJLjMxIiwgIk1BREkuMzIiLCAiTUFESS4zMyIsICJNQURJLjM0IiwgIk1BREkuMzUiLCAiTUFESS4zNiIsCisJIk1BREkuMzciLCAiTUFESS4zOCIsICJNQURJLjM5IiwgIk1BREkuNDAiLCAiTUFESS40MSIsICJNQURJLjQyIiwKKwkiTUFESS40MyIsICJNQURJLjQ0IiwgIk1BREkuNDUiLCAiTUFESS40NiIsICJNQURJLjQ3IiwgIk1BREkuNDgiLAorCSJNQURJLjQ5IiwgIk1BREkuNTAiLCAiTUFESS41MSIsICJNQURJLjUyIiwgIk1BREkuNTMiLCAiTUFESS41NCIsCisJIk1BREkuNTUiLCAiTUFESS41NiIsICJNQURJLjU3IiwgIk1BREkuNTgiLCAiTUFESS41OSIsICJNQURJLjYwIiwKKwkiTUFESS42MSIsICJNQURJLjYyIiwgIk1BREkuNjMiLCAiTUFESS42NCIsCit9OworCisKK3N0YXRpYyBjaGFyICp0ZXh0c19wb3J0c19yYXlkYXRfc3NbXSA9IHsKKwkiQURBVDEuMSIsICJBREFUMS4yIiwgIkFEQVQxLjMiLCAiQURBVDEuNCIsICJBREFUMS41IiwgIkFEQVQxLjYiLAorCSJBREFUMS43IiwgIkFEQVQxLjgiLCAiQURBVDIuMSIsICJBREFUMi4yIiwgIkFEQVQyLjMiLCAiQURBVDIuNCIsCisJIkFEQVQyLjUiLCAiQURBVDIuNiIsICJBREFUMi43IiwgIkFEQVQyLjgiLCAiQURBVDMuMSIsICJBREFUMy4yIiwKKwkiQURBVDMuMyIsICJBREFUMy40IiwgIkFEQVQzLjUiLCAiQURBVDMuNiIsICJBREFUMy43IiwgIkFEQVQzLjgiLAorCSJBREFUNC4xIiwgIkFEQVQ0LjIiLCAiQURBVDQuMyIsICJBREFUNC40IiwgIkFEQVQ0LjUiLCAiQURBVDQuNiIsCisJIkFEQVQ0LjciLCAiQURBVDQuOCIsCisJIkFFUy5MIiwgIkFFUy5SIiwKKwkiU1BESUYuTCIsICJTUERJRi5SIgorfTsKKworc3RhdGljIGNoYXIgKnRleHRzX3BvcnRzX3JheWRhdF9kc1tdID0geworCSJBREFUMS4xIiwgIkFEQVQxLjIiLCAiQURBVDEuMyIsICJBREFUMS40IiwKKwkiQURBVDIuMSIsICJBREFUMi4yIiwgIkFEQVQyLjMiLCAiQURBVDIuNCIsCisJIkFEQVQzLjEiLCAiQURBVDMuMiIsICJBREFUMy4zIiwgIkFEQVQzLjQiLAorCSJBREFUNC4xIiwgIkFEQVQ0LjIiLCAiQURBVDQuMyIsICJBREFUNC40IiwKKwkiQUVTLkwiLCAiQUVTLlIiLAorCSJTUERJRi5MIiwgIlNQRElGLlIiCit9OworCitzdGF0aWMgY2hhciAqdGV4dHNfcG9ydHNfcmF5ZGF0X3FzW10gPSB7CisJIkFEQVQxLjEiLCAiQURBVDEuMiIsCisJIkFEQVQyLjEiLCAiQURBVDIuMiIsCisJIkFEQVQzLjEiLCAiQURBVDMuMiIsCisJIkFEQVQ0LjEiLCAiQURBVDQuMiIsCisJIkFFUy5MIiwgIkFFUy5SIiwKKwkiU1BESUYuTCIsICJTUERJRi5SIgorfTsKKworCitzdGF0aWMgY2hhciAqdGV4dHNfcG9ydHNfYWlvX2luX3NzW10gPSB7CisJIkFuYWxvZ3VlLkwiLCAiQW5hbG9ndWUuUiIsCisJIkFFUy5MIiwgIkFFUy5SIiwKKwkiU1BESUYuTCIsICJTUERJRi5SIiwKKwkiQURBVC4xIiwgIkFEQVQuMiIsICJBREFULjMiLCAiQURBVC40IiwgIkFEQVQuNSIsICJBREFULjYiLAorCSJBREFULjciLCAiQURBVC44IgorfTsKKworc3RhdGljIGNoYXIgKnRleHRzX3BvcnRzX2Fpb19vdXRfc3NbXSA9IHsKKwkiQW5hbG9ndWUuTCIsICJBbmFsb2d1ZS5SIiwKKwkiQUVTLkwiLCAiQUVTLlIiLAorCSJTUERJRi5MIiwgIlNQRElGLlIiLAorCSJBREFULjEiLCAiQURBVC4yIiwgIkFEQVQuMyIsICJBREFULjQiLCAiQURBVC41IiwgIkFEQVQuNiIsCisJIkFEQVQuNyIsICJBREFULjgiLAorCSJQaG9uZS5MIiwgIlBob25lLlIiCit9OworCitzdGF0aWMgY2hhciAqdGV4dHNfcG9ydHNfYWlvX2luX2RzW10gPSB7CisJIkFuYWxvZ3VlLkwiLCAiQW5hbG9ndWUuUiIsCisJIkFFUy5MIiwgIkFFUy5SIiwKKwkiU1BESUYuTCIsICJTUERJRi5SIiwKKwkiQURBVC4xIiwgIkFEQVQuMiIsICJBREFULjMiLCAiQURBVC40IgorfTsKKworc3RhdGljIGNoYXIgKnRleHRzX3BvcnRzX2Fpb19vdXRfZHNbXSA9IHsKKwkiQW5hbG9ndWUuTCIsICJBbmFsb2d1ZS5SIiwKKwkiQUVTLkwiLCAiQUVTLlIiLAorCSJTUERJRi5MIiwgIlNQRElGLlIiLAorCSJBREFULjEiLCAiQURBVC4yIiwgIkFEQVQuMyIsICJBREFULjQiLAorCSJQaG9uZS5MIiwgIlBob25lLlIiCit9OworCitzdGF0aWMgY2hhciAqdGV4dHNfcG9ydHNfYWlvX2luX3FzW10gPSB7CisJIkFuYWxvZ3VlLkwiLCAiQW5hbG9ndWUuUiIsCisJIkFFUy5MIiwgIkFFUy5SIiwKKwkiU1BESUYuTCIsICJTUERJRi5SIiwKKwkiQURBVC4xIiwgIkFEQVQuMiIsICJBREFULjMiLCAiQURBVC40IgorfTsKKworc3RhdGljIGNoYXIgKnRleHRzX3BvcnRzX2Fpb19vdXRfcXNbXSA9IHsKKwkiQW5hbG9ndWUuTCIsICJBbmFsb2d1ZS5SIiwKKwkiQUVTLkwiLCAiQUVTLlIiLAorCSJTUERJRi5MIiwgIlNQRElGLlIiLAorCSJBREFULjEiLCAiQURBVC4yIiwgIkFEQVQuMyIsICJBREFULjQiLAorCSJQaG9uZS5MIiwgIlBob25lLlIiCit9OworCitzdGF0aWMgY2hhciAqdGV4dHNfcG9ydHNfYWVzMzJbXSA9IHsKKwkiQUVTLjEiLCAiQUVTLjIiLCAiQUVTLjMiLCAiQUVTLjQiLCAiQUVTLjUiLCAiQUVTLjYiLCAiQUVTLjciLAorCSJBRVMuOCIsICJBRVMuOS4iLCAiQUVTLjEwIiwgIkFFUy4xMSIsICJBRVMuMTIiLCAiQUVTLjEzIiwgIkFFUy4xNCIsCisJIkFFUy4xNSIsICJBRVMuMTYiCit9OworCisvKiBUaGVzZSB0YWJsZXMgbWFwIHRoZSBBTFNBIGNoYW5uZWxzIDEuLk4gdG8gdGhlIGNoYW5uZWxzIHRoYXQgd2UKKyAgIG5lZWQgdG8gdXNlIGluIG9yZGVyIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNoYW5uZWwgYnVmZmVyLiBSTUUKKyAgIHJlZmVycyB0byB0aGlzIGtpbmQgb2YgbWFwcGluZyBhcyBiZXR3ZWVuICJ0aGUgQURBVCBjaGFubmVsIGFuZAorICAgdGhlIERNQSBjaGFubmVsLiIgV2UgaW5kZXggaXQgdXNpbmcgdGhlIGxvZ2ljYWwgYXVkaW8gY2hhbm5lbCwKKyAgIGFuZCB0aGUgdmFsdWUgaXMgdGhlIERNQSBjaGFubmVsIChpLmUuIGNoYW5uZWwgYnVmZmVyIG51bWJlcikKKyAgIHdoZXJlIHRoZSBkYXRhIGZvciB0aGF0IGNoYW5uZWwgY2FuIGJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvLgorKi8KKworc3RhdGljIGNoYXIgY2hhbm5lbF9tYXBfdW5pdHlfc3NbSERTUE1fTUFYX0NIQU5ORUxTXSA9IHsKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAorCTgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisJMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLAorCTI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKKwkzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksCisJNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LAorCTQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwKKwk1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMKK307CisKK3N0YXRpYyBjaGFyIGNoYW5uZWxfbWFwX3JheWRhdF9zc1tIRFNQTV9NQVhfQ0hBTk5FTFNdID0geworCTQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwJLyogQURBVCAxICovCisJMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LAkvKiBBREFUIDIgKi8KKwkyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsCS8qIEFEQVQgMyAqLworCTI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwJLyogQURBVCA0ICovCisJMCwgMSwJCQkvKiBBRVMgKi8KKwkyLCAzLAkJCS8qIFNQRElGICovCisJLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCit9OworCitzdGF0aWMgY2hhciBjaGFubmVsX21hcF9yYXlkYXRfZHNbSERTUE1fTUFYX0NIQU5ORUxTXSA9IHsKKwk0LCA1LCA2LCA3LAkJLyogQURBVCAxICovCisJOCwgOSwgMTAsIDExLAkJLyogQURBVCAyICovCisJMTIsIDEzLCAxNCwgMTUsCQkvKiBBREFUIDMgKi8KKwkxNiwgMTcsIDE4LCAxOSwJCS8qIEFEQVQgNCAqLworCTAsIDEsCQkJLyogQUVTICovCisJMiwgMywJCQkvKiBTUERJRiAqLworCS0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCit9OworCitzdGF0aWMgY2hhciBjaGFubmVsX21hcF9yYXlkYXRfcXNbSERTUE1fTUFYX0NIQU5ORUxTXSA9IHsKKwk0LCA1LAkJCS8qIEFEQVQgMSAqLworCTYsIDcsCQkJLyogQURBVCAyICovCisJOCwgOSwJCQkvKiBBREFUIDMgKi8KKwkxMCwgMTEsCQkJLyogQURBVCA0ICovCisJMCwgMSwJCQkvKiBBRVMgKi8KKwkyLCAzLAkJCS8qIFNQRElGICovCisJLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCit9OworCitzdGF0aWMgY2hhciBjaGFubmVsX21hcF9haW9faW5fc3NbSERTUE1fTUFYX0NIQU5ORUxTXSA9IHsKKwkwLCAxLAkJCS8qIGxpbmUgaW4gKi8KKwk4LCA5LAkJCS8qIGFlcyBpbiwgKi8KKwkxMCwgMTEsCQkJLyogc3BkaWYgaW4gKi8KKwkxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksCS8qIEFEQVQgaW4gKi8KKwktMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCit9OworCitzdGF0aWMgY2hhciBjaGFubmVsX21hcF9haW9fb3V0X3NzW0hEU1BNX01BWF9DSEFOTkVMU10gPSB7CisJMCwgMSwJCQkvKiBsaW5lIG91dCAqLworCTgsIDksCQkJLyogYWVzIG91dCAqLworCTEwLCAxMSwJCQkvKiBzcGRpZiBvdXQgKi8KKwkxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksCS8qIEFEQVQgb3V0ICovCisJNiwgNywJCQkvKiBwaG9uZSBvdXQgKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKK307CisKK3N0YXRpYyBjaGFyIGNoYW5uZWxfbWFwX2Fpb19pbl9kc1tIRFNQTV9NQVhfQ0hBTk5FTFNdID0geworCTAsIDEsCQkJLyogbGluZSBpbiAqLworCTgsIDksCQkJLyogYWVzIGluICovCisJMTAsIDExLAkJCS8qIHNwZGlmIGluICovCisJMTIsIDE0LCAxNiwgMTgsCQkvKiBhZGF0IGluICovCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMQorfTsKKworc3RhdGljIGNoYXIgY2hhbm5lbF9tYXBfYWlvX291dF9kc1tIRFNQTV9NQVhfQ0hBTk5FTFNdID0geworCTAsIDEsCQkJLyogbGluZSBvdXQgKi8KKwk4LCA5LAkJCS8qIGFlcyBvdXQgKi8KKwkxMCwgMTEsCQkJLyogc3BkaWYgb3V0ICovCisJMTIsIDE0LCAxNiwgMTgsCQkvKiBhZGF0IG91dCAqLworCTYsIDcsCQkJLyogcGhvbmUgb3V0ICovCisJLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKK307CisKK3N0YXRpYyBjaGFyIGNoYW5uZWxfbWFwX2Fpb19pbl9xc1tIRFNQTV9NQVhfQ0hBTk5FTFNdID0geworCTAsIDEsCQkJLyogbGluZSBpbiAqLworCTgsIDksCQkJLyogYWVzIGluICovCisJMTAsIDExLAkJCS8qIHNwZGlmIGluICovCisJMTIsIDE2LAkJCS8qIGFkYXQgaW4gKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKK307CisKK3N0YXRpYyBjaGFyIGNoYW5uZWxfbWFwX2Fpb19vdXRfcXNbSERTUE1fTUFYX0NIQU5ORUxTXSA9IHsKKwkwLCAxLAkJCS8qIGxpbmUgb3V0ICovCisJOCwgOSwJCQkvKiBhZXMgb3V0ICovCisJMTAsIDExLAkJCS8qIHNwZGlmIG91dCAqLworCTEyLCAxNiwJCQkvKiBhZGF0IG91dCAqLworCTYsIDcsCQkJLyogcGhvbmUgb3V0ICovCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMQorfTsKKworc3RhdGljIGNoYXIgY2hhbm5lbF9tYXBfYWVzMzJbSERTUE1fTUFYX0NIQU5ORUxTXSA9IHsKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAorCTgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKK307CisKIHN0cnVjdCBoZHNwbV9taWRpIHsKIAlzdHJ1Y3QgaGRzcG0gKmhkc3BtOwogCWludCBpZDsKQEAgLTQzMCw2ICs4NDcsMjEgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlzcGlubG9ja190IGxvY2s7CiAJaW50IHBlbmRpbmc7CisJaW50IGRhdGFJbjsKKwlpbnQgc3RhdHVzSW47CisJaW50IGRhdGFPdXQ7CisJaW50IHN0YXR1c091dDsKKwlpbnQgaWU7CisJaW50IGlycTsKK307CisKK3N0cnVjdCBoZHNwbV90Y28geworCWludCBpbnB1dDsKKwlpbnQgZnJhbWVyYXRlOworCWludCB3b3JkY2xvY2s7CisJaW50IHNhbXBsZXJhdGU7CisJaW50IHB1bGw7CisJaW50IHRlcm07IC8qIDAgPSBvZmYsIDEgPSBvbiAqLwogfTsKIAogc3RydWN0IGhkc3BtIHsKQEAgLTQ0MSwyMSArODczLDM5IEBACiAJY2hhciAqY2FyZF9uYW1lOwkgICAgIC8qIGZvciBwcm9jaW5mbyAqLwogCXVuc2lnbmVkIHNob3J0IGZpcm13YXJlX3JldjsgLyogZG9udCBrbm93IGlmIHJlbGV2YW50ICh5ZXMgaWYgQUVTMzIpKi8KIAotCXVuc2lnbmVkIGNoYXIgaXNfYWVzMzI7ICAgIC8qIGluZGljYXRlcyBpZiBjYXJkIGlzIEFFUzMyICovCisJdWludDhfdCBpb190eXBlOwogCi0JaW50IHByZWNpc2VfcHRyOwkvKiB1c2UgcHJlY2lzZSBwb2ludGVycywgdG8gYmUgdGVzdGVkICovCiAJaW50IG1vbml0b3Jfb3V0czsJLyogc2V0IHVwIG1vbml0b3Jpbmcgb3V0cyBpbml0IGZsYWcgKi8KIAogCXUzMiBjb250cm9sX3JlZ2lzdGVyOwkvKiBjYWNoZWQgdmFsdWUgKi8KIAl1MzIgY29udHJvbDJfcmVnaXN0ZXI7CS8qIGNhY2hlZCB2YWx1ZSAqLworCXUzMiBzZXR0aW5nc19yZWdpc3RlcjsKIAotCXN0cnVjdCBoZHNwbV9taWRpIG1pZGlbMl07CisJc3RydWN0IGhkc3BtX21pZGkgbWlkaVs0XTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbWlkaV90YXNrbGV0OwogCiAJc2l6ZV90IHBlcmlvZF9ieXRlczsKLQl1bnNpZ25lZCBjaGFyIHNzX2NoYW5uZWxzOwkvKiBjaGFubmVscyBvZiBjYXJkIGluIHNpbmdsZSBzcGVlZCAqLwotCXVuc2lnbmVkIGNoYXIgZHNfY2hhbm5lbHM7CS8qIERvdWJsZSBTcGVlZCAqLwotCXVuc2lnbmVkIGNoYXIgcXNfY2hhbm5lbHM7CS8qIFF1YWQgU3BlZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHNzX2luX2NoYW5uZWxzOworCXVuc2lnbmVkIGNoYXIgZHNfaW5fY2hhbm5lbHM7CisJdW5zaWduZWQgY2hhciBxc19pbl9jaGFubmVsczsKKwl1bnNpZ25lZCBjaGFyIHNzX291dF9jaGFubmVsczsKKwl1bnNpZ25lZCBjaGFyIGRzX291dF9jaGFubmVsczsKKwl1bnNpZ25lZCBjaGFyIHFzX291dF9jaGFubmVsczsKKworCXVuc2lnbmVkIGNoYXIgbWF4X2NoYW5uZWxzX2luOworCXVuc2lnbmVkIGNoYXIgbWF4X2NoYW5uZWxzX291dDsKKworCWNoYXIgKmNoYW5uZWxfbWFwX2luOworCWNoYXIgKmNoYW5uZWxfbWFwX291dDsKKworCWNoYXIgKmNoYW5uZWxfbWFwX2luX3NzLCAqY2hhbm5lbF9tYXBfaW5fZHMsICpjaGFubmVsX21hcF9pbl9xczsKKwljaGFyICpjaGFubmVsX21hcF9vdXRfc3MsICpjaGFubmVsX21hcF9vdXRfZHMsICpjaGFubmVsX21hcF9vdXRfcXM7CisKKwljaGFyICoqcG9ydF9uYW1lc19pbjsKKwljaGFyICoqcG9ydF9uYW1lc19vdXQ7CisKKwljaGFyICoqcG9ydF9uYW1lc19pbl9zcywgKipwb3J0X25hbWVzX2luX2RzLCAqKnBvcnRfbmFtZXNfaW5fcXM7CisJY2hhciAqKnBvcnRfbmFtZXNfb3V0X3NzLCAqKnBvcnRfbmFtZXNfb3V0X2RzLCAqKnBvcnRfbmFtZXNfb3V0X3FzOwogCiAJdW5zaWduZWQgY2hhciAqcGxheWJhY2tfYnVmZmVyOwkvKiBzdWl0YWJseSBhbGlnbmVkIGFkZHJlc3MgKi8KIAl1bnNpZ25lZCBjaGFyICpjYXB0dXJlX2J1ZmZlcjsJLyogc3VpdGFibHkgYWxpZ25lZCBhZGRyZXNzICovCkBAIC00NjgsMTQgKzkxOCwxMyBAQAogCWludCBsYXN0X2ludGVybmFsX3NhbXBsZV9yYXRlOwogCWludCBzeXN0ZW1fc2FtcGxlX3JhdGU7CiAKLQljaGFyICpjaGFubmVsX21hcDsJLyogY2hhbm5lbCBtYXAgZm9yIERTIGFuZCBRdWFkc3BlZWQgKi8KLQogCWludCBkZXY7CQkvKiBIYXJkd2FyZSB2YXJzLi4uICovCiAJaW50IGlycTsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJdm9pZCBfX2lvbWVtICppb2Jhc2U7CiAKIAlpbnQgaXJxX2NvdW50OwkJLyogZm9yIGRlYnVnICovCisJaW50IG1pZGlQb3J0czsKIAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsJLyogb25lIGNhcmQgKi8KIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwkJLyogaGFzIG9uZSBwY20gKi8KQEAgLTQ4NywyOCArOTM2LDE3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAqcGxheWJhY2tfbWl4ZXJfY3Rsc1tIRFNQTV9NQVhfQ0hBTk5FTFNdOwogCS8qIGJ1dCBpbnB1dCB0byBtdWNoLCBzbyBub3QgdXNlZCAqLwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmlucHV0X21peGVyX2N0bHNbSERTUE1fTUFYX0NIQU5ORUxTXTsKLQkvKiBmdWxsIG1peGVyIGFjY2Vzc2libGUgb3ZlciBtaXhlciBpb2N0bCBvciBod2RlcC1kZXZpY2UgKi8KKwkvKiBmdWxsIG1peGVyIGFjY2Vzc2FibGUgb3ZlciBtaXhlciBpb2N0bCBvciBod2RlcC1kZXZpY2UgKi8KIAlzdHJ1Y3QgaGRzcG1fbWl4ZXIgKm1peGVyOwogCi19OworCXN0cnVjdCBoZHNwbV90Y28gKnRjbzsgIC8qIE5VTEwgaWYgbm8gVENPIGRldGVjdGVkICovCiAKLS8qIFRoZXNlIHRhYmxlcyBtYXAgdGhlIEFMU0EgY2hhbm5lbHMgMS4uTiB0byB0aGUgY2hhbm5lbHMgdGhhdCB3ZQotICAgbmVlZCB0byB1c2UgaW4gb3JkZXIgdG8gZmluZCB0aGUgcmVsZXZhbnQgY2hhbm5lbCBidWZmZXIuIFJNRQotICAgcmVmZXIgdG8gdGhpcyBraW5kIG9mIG1hcHBpbmcgYXMgYmV0d2VlbiAidGhlIEFEQVQgY2hhbm5lbCBhbmQKLSAgIHRoZSBETUEgY2hhbm5lbC4iIFdlIGluZGV4IGl0IHVzaW5nIHRoZSBsb2dpY2FsIGF1ZGlvIGNoYW5uZWwsCi0gICBhbmQgdGhlIHZhbHVlIGlzIHRoZSBETUEgY2hhbm5lbCAoaS5lLiBjaGFubmVsIGJ1ZmZlciBudW1iZXIpCi0gICB3aGVyZSB0aGUgZGF0YSBmb3IgdGhhdCBjaGFubmVsIGNhbiBiZSByZWFkL3dyaXR0ZW4gZnJvbS90by4KLSovCisJY2hhciAqKnRleHRzX2F1dG9zeW5jOworCWludCB0ZXh0c19hdXRvc3luY19pdGVtczsKIAotc3RhdGljIGNoYXIgY2hhbm5lbF9tYXBfbWFkaV9zc1tIRFNQTV9NQVhfQ0hBTk5FTFNdID0gewotICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywKLSAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCi0gICAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCi0gICAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsCi0gICAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksCi0gICA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsCi0gICA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsCi0gICA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMKKwljeWNsZXNfdCBsYXN0X2ludGVycnVwdDsKKworCXN0cnVjdCBoZHNwbV9wZWFrX3JtcyBwZWFrX3JtczsKIH07CiAKIApAQCAtNTMyLDExICs5NzAsMTEgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9oZHNwbV9jcmVhdGVfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKIAkJCQkJICBzdHJ1Y3QgaGRzcG0gKiBoZHNwbSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfaGRzcG1faW5pdGlhbGl6ZV9taWRpX2ZsdXNoKHN0cnVjdCBoZHNwbSAqIGhkc3BtKTsKLXN0YXRpYyBpbnQgaGRzcG1fdXBkYXRlX3NpbXBsZV9taXhlcl9jb250cm9scyhzdHJ1Y3QgaGRzcG0gKiBoZHNwbSk7Ci1zdGF0aWMgaW50IGhkc3BtX2F1dG9zeW5jX3JlZihzdHJ1Y3QgaGRzcG0gKiBoZHNwbSk7Ci1zdGF0aWMgaW50IHNuZF9oZHNwbV9zZXRfZGVmYXVsdHMoc3RydWN0IGhkc3BtICogaGRzcG0pOwotc3RhdGljIHZvaWQgaGRzcG1fc2V0X3NnYnVmKHN0cnVjdCBoZHNwbSAqIGhkc3BtLAorc3RhdGljIGlubGluZSB2b2lkIHNuZF9oZHNwbV9pbml0aWFsaXplX21pZGlfZmx1c2goc3RydWN0IGhkc3BtICpoZHNwbSk7CitzdGF0aWMgaW50IGhkc3BtX3VwZGF0ZV9zaW1wbGVfbWl4ZXJfY29udHJvbHMoc3RydWN0IGhkc3BtICpoZHNwbSk7CitzdGF0aWMgaW50IGhkc3BtX2F1dG9zeW5jX3JlZihzdHJ1Y3QgaGRzcG0gKmhkc3BtKTsKK3N0YXRpYyBpbnQgc25kX2hkc3BtX3NldF9kZWZhdWx0cyhzdHJ1Y3QgaGRzcG0gKmhkc3BtKTsKK3N0YXRpYyB2b2lkIGhkc3BtX3NldF9zZ2J1ZihzdHJ1Y3QgaGRzcG0gKmhkc3BtLAogCQkJICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgY2hhbm5lbHMpOwogCkBAIC01NTAsNyArOTg4LDcgQEAKIAlyZXR1cm4gYml0MmZyZXFfdGFiW25dOwogfQogCi0vKiBXcml0ZS9yZWFkIHRvL2Zyb20gSERTUE0gd2l0aCBBZGRyZXNzZXMgaW4gQnl0ZXMKKy8qIFdyaXRlL3JlYWQgdG8vZnJvbSBIRFNQTSB3aXRoIEFkcmVzc2VzIGluIEJ5dGVzCiAgICBub3Qgd29yZHMgYnV0IG9ubHkgMzJCaXQgd3JpdGVzIGFyZSBhbGxvd2VkICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoZHNwbV93cml0ZShzdHJ1Y3QgaGRzcG0gKiBoZHNwbSwgdW5zaWduZWQgaW50IHJlZywKQEAgLTU2NCw4ICsxMDAyLDggQEAKIAlyZXR1cm4gcmVhZGwoaGRzcG0tPmlvYmFzZSArIHJlZyk7CiB9CiAKLS8qIGZvciBlYWNoIG91dHB1dCBjaGFubmVsIChjaGFuKSBJIGhhdmUgYW4gSW5wdXQgKGluKSBhbmQgUGxheWJhY2sgKHBiKSBGYWRlciAKLSAgIG1peGVyIGlzIHdyaXRlIG9ubHkgb24gaGFyZHdhcmUgc28gd2UgaGF2ZSB0byBjYWNoZSBoaW0gZm9yIHJlYWQgCisvKiBmb3IgZWFjaCBvdXRwdXQgY2hhbm5lbCAoY2hhbikgSSBoYXZlIGFuIElucHV0IChpbikgYW5kIFBsYXliYWNrIChwYikgRmFkZXIKKyAgIG1peGVyIGlzIHdyaXRlIG9ubHkgb24gaGFyZHdhcmUgc28gd2UgaGF2ZSB0byBjYWNoZSBoaW0gZm9yIHJlYWQKICAgIGVhY2ggZmFkZXIgaXMgYSB1MzIsIGJ1dCB1c2VzIG9ubHkgdGhlIGZpcnN0IDE2IGJpdCAqLwogCiBzdGF0aWMgaW5saW5lIGludCBoZHNwbV9yZWFkX2luX2dhaW4oc3RydWN0IGhkc3BtICogaGRzcG0sIHVuc2lnbmVkIGludCBjaGFuLApAQCAtNjQxLDMwICsxMDc5LDY3IEBACiAvKiBjaGVjayBmb3IgZXh0ZXJuYWwgc2FtcGxlIHJhdGUgKi8KIHN0YXRpYyBpbnQgaGRzcG1fZXh0ZXJuYWxfc2FtcGxlX3JhdGUoc3RydWN0IGhkc3BtICpoZHNwbSkKIHsKLQlpZiAoaGRzcG0tPmlzX2FlczMyKSB7Ci0JCXVuc2lnbmVkIGludCBzdGF0dXMyID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fc3RhdHVzUmVnaXN0ZXIyKTsKLQkJdW5zaWduZWQgaW50IHN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKLQkJdW5zaWduZWQgaW50IHRpbWVjb2RlID0KLQkJCWhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3RpbWVjb2RlUmVnaXN0ZXIpOworCXVuc2lnbmVkIGludCBzdGF0dXMsIHN0YXR1czIsIHRpbWVjb2RlOworCWludCBzeW5jcmVmLCByYXRlID0gMCwgcmF0ZV9iaXRzOwogCi0JCWludCBzeW5jcmVmID0gaGRzcG1fYXV0b3N5bmNfcmVmKGhkc3BtKTsKKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBBRVMzMjoKKwkJc3RhdHVzMiA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyMik7CisJCXN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKKwkJdGltZWNvZGUgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV90aW1lY29kZVJlZ2lzdGVyKTsKKworCQlzeW5jcmVmID0gaGRzcG1fYXV0b3N5bmNfcmVmKGhkc3BtKTsKIAogCQlpZiAoc3luY3JlZiA9PSBIRFNQTV9BRVMzMl9BVVRPU1lOQ19GUk9NX1dPUkQgJiYKIAkJCQlzdGF0dXMgJiBIRFNQTV9BRVMzMl93Y0xvY2spCi0JCQlyZXR1cm4gSERTUE1fYml0MmZyZXEoKHN0YXR1cyA+PiBIRFNQTV9BRVMzMl93Y0ZyZXFfYml0KQotCQkJCQkgICAgICAmIDB4Rik7CisJCQlyZXR1cm4gSERTUE1fYml0MmZyZXEoKHN0YXR1cyA+PiBIRFNQTV9BRVMzMl93Y0ZyZXFfYml0KSAmIDB4Rik7CisKIAkJaWYgKHN5bmNyZWYgPj0gSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVMxICYmCi0JCQlzeW5jcmVmIDw9IEhEU1BNX0FFUzMyX0FVVE9TWU5DX0ZST01fQUVTOCAmJgotCQkJc3RhdHVzMiAmIChIRFNQTV9Mb2NrQUVTID4+Ci0JCQkgICAgICAgICAgKHN5bmNyZWYgLSBIRFNQTV9BRVMzMl9BVVRPU1lOQ19GUk9NX0FFUzEpKSkKLQkJCXJldHVybiBIRFNQTV9iaXQyZnJlcSgodGltZWNvZGUgPj4KLQkJCSAgKDQqKHN5bmNyZWYtSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVMxKSkpICYgMHhGKTsKKwkJCQlzeW5jcmVmIDw9IEhEU1BNX0FFUzMyX0FVVE9TWU5DX0ZST01fQUVTOCAmJgorCQkJCXN0YXR1czIgJiAoSERTUE1fTG9ja0FFUyA+PgorCQkJCShzeW5jcmVmIC0gSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVMxKSkpCisJCQlyZXR1cm4gSERTUE1fYml0MmZyZXEoKHRpbWVjb2RlID4+ICg0KihzeW5jcmVmLUhEU1BNX0FFUzMyX0FVVE9TWU5DX0ZST01fQUVTMSkpKSAmIDB4Rik7CiAJCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBzdGF0dXMyID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fc3RhdHVzUmVnaXN0ZXIyKTsKLQkJdW5zaWduZWQgaW50IHN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKLQkJdW5zaWduZWQgaW50IHJhdGVfYml0czsKLQkJaW50IHJhdGUgPSAwOworCQlicmVhazsKKworCWNhc2UgTUFESWZhY2U6CisJCXN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKKworCQlpZiAoIShzdGF0dXMgJiBIRFNQTV9tYWRpTG9jaykpIHsKKwkJCXJhdGUgPSAwOyAgLyogbm8gbG9jayAqLworCQl9IGVsc2UgeworCQkJc3dpdGNoIChzdGF0dXMgJiAoSERTUE1fc3RhdHVzMV9mcmVxTWFzaykpIHsKKwkJCWNhc2UgSERTUE1fc3RhdHVzMV9GXzAqMToKKwkJCQlyYXRlID0gMzIwMDA7IGJyZWFrOworCQkJY2FzZSBIRFNQTV9zdGF0dXMxX0ZfMCoyOgorCQkJCXJhdGUgPSA0NDEwMDsgYnJlYWs7CisJCQljYXNlIEhEU1BNX3N0YXR1czFfRl8wKjM6CisJCQkJcmF0ZSA9IDQ4MDAwOyBicmVhazsKKwkJCWNhc2UgSERTUE1fc3RhdHVzMV9GXzAqNDoKKwkJCQlyYXRlID0gNjQwMDA7IGJyZWFrOworCQkJY2FzZSBIRFNQTV9zdGF0dXMxX0ZfMCo1OgorCQkJCXJhdGUgPSA4ODIwMDsgYnJlYWs7CisJCQljYXNlIEhEU1BNX3N0YXR1czFfRl8wKjY6CisJCQkJcmF0ZSA9IDk2MDAwOyBicmVhazsKKwkJCWNhc2UgSERTUE1fc3RhdHVzMV9GXzAqNzoKKwkJCQlyYXRlID0gMTI4MDAwOyBicmVhazsKKwkJCWNhc2UgSERTUE1fc3RhdHVzMV9GXzAqODoKKwkJCQlyYXRlID0gMTc2NDAwOyBicmVhazsKKwkJCWNhc2UgSERTUE1fc3RhdHVzMV9GXzAqOToKKwkJCQlyYXRlID0gMTkyMDAwOyBicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmF0ZSA9IDA7IGJyZWFrOworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIE1BREk6CisJY2FzZSBBSU86CisJY2FzZSBSYXlEQVQ6CisJCXN0YXR1czIgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3RlcjIpOworCQlzdGF0dXMgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3Rlcik7CisJCXJhdGUgPSAwOwogCiAJCS8qIGlmIHdvcmRjbG9jayBoYXMgc3luY2VkIGZyZXEgYW5kIHdvcmRjbG9jayBpcyB2YWxpZCAqLwogCQlpZiAoKHN0YXR1czIgJiBIRFNQTV93Y0xvY2spICE9IDAgJiYKQEAgLTY3Miw2ICsxMTQ3LDcgQEAKIAogCQkJcmF0ZV9iaXRzID0gc3RhdHVzMiAmIEhEU1BNX3djRnJlcU1hc2s7CiAKKwogCQkJc3dpdGNoIChyYXRlX2JpdHMpIHsKIAkJCWNhc2UgSERTUE1fd2NGcmVxMzI6CiAJCQkJcmF0ZSA9IDMyMDAwOwpAQCAtNjkxLDcgKzExNjcsNiBAQAogCQkJY2FzZSBIRFNQTV93Y0ZyZXE5NjoKIAkJCQlyYXRlID0gOTYwMDA7CiAJCQkJYnJlYWs7Ci0JCQkJLyogUXVhZHNwZWVkIEJpdCBtaXNzaW5nID8/Pz8gKi8KIAkJCWRlZmF1bHQ6CiAJCQkJcmF0ZSA9IDA7CiAJCQkJYnJlYWs7CkBAIC03MDIsMTAgKzExNzcsMTAgQEAKIAkJICogd29yZCBoYXMgcHJpb3JpdHkgdG8gTUFESQogCQkgKi8KIAkJaWYgKHJhdGUgIT0gMCAmJgotCSAgICAgICAgICAgIChzdGF0dXMyICYgSERTUE1fU2VsU3luY1JlZk1hc2spID09IEhEU1BNX1NlbFN5bmNSZWZfV09SRCkKKwkJKHN0YXR1czIgJiBIRFNQTV9TZWxTeW5jUmVmTWFzaykgPT0gSERTUE1fU2VsU3luY1JlZl9XT1JEKQogCQkJcmV0dXJuIHJhdGU7CiAKLQkJLyogbWFieSBhIG1hZGkgaW5wdXQgKHdoaWNoIGlzIHRha2VuIGlmIHNlbCBzeW5jIGlzIG1hZGkpICovCisJCS8qIG1heWJlIGEgbWFkaSBpbnB1dCAod2hpY2ggaXMgdGFrZW4gaWYgc2VsIHN5bmMgaXMgbWFkaSkgKi8KIAkJaWYgKHN0YXR1cyAmIEhEU1BNX21hZGlMb2NrKSB7CiAJCQlyYXRlX2JpdHMgPSBzdGF0dXMgJiBIRFNQTV9tYWRpRnJlcU1hc2s7CiAKQEAgLTc0MiwzNiArMTIxNywzNSBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCXJldHVybiByYXRlOworCQlicmVhazsKIAl9CisKKwlyZXR1cm4gcmF0ZTsKIH0KIAogLyogTGF0ZW5jeSBmdW5jdGlvbiAqLwotc3RhdGljIGlubGluZSB2b2lkIGhkc3BtX2NvbXB1dGVfcGVyaW9kX3NpemUoc3RydWN0IGhkc3BtICogaGRzcG0pCitzdGF0aWMgaW5saW5lIHZvaWQgaGRzcG1fY29tcHV0ZV9wZXJpb2Rfc2l6ZShzdHJ1Y3QgaGRzcG0gKmhkc3BtKQogewotCWhkc3BtLT5wZXJpb2RfYnl0ZXMgPQotCSAgICAxIDw8ICgoaGRzcG1fZGVjb2RlX2xhdGVuY3koaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIpICsgOCkpOworCWhkc3BtLT5wZXJpb2RfYnl0ZXMgPSAxIDw8ICgoaGRzcG1fZGVjb2RlX2xhdGVuY3koaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIpICsgOCkpOwogfQogCi1zdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgaGRzcG1faHdfcG9pbnRlcihzdHJ1Y3QgaGRzcG0gKiBoZHNwbSkKKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IGhkc3BtX2h3X3BvaW50ZXIoc3RydWN0IGhkc3BtICpoZHNwbSkKIHsKIAlpbnQgcG9zaXRpb247CiAKIAlwb3NpdGlvbiA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKIAotCWlmICghaGRzcG0tPnByZWNpc2VfcHRyKQotCQlyZXR1cm4gKHBvc2l0aW9uICYgSERTUE1fQnVmZmVySUQpID8KKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBSYXlEQVQ6CisJY2FzZSBBSU86CisJCXBvc2l0aW9uICY9IEhEU1BNX0J1ZmZlclBvc2l0aW9uTWFzazsKKwkJcG9zaXRpb24gLz0gNDsgLyogQnl0ZXMgcGVyIHNhbXBsZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwb3NpdGlvbiA9IChwb3NpdGlvbiAmIEhEU1BNX0J1ZmZlcklEKSA/CiAJCQkoaGRzcG0tPnBlcmlvZF9ieXRlcyAvIDQpIDogMDsKLQotCS8qIGh3cG9pbnRlciBjb21lcyBpbiBieXRlcyBhbmQgaXMgNjRCeXRlcyBhY2N1cmF0ZSAoYnkgZG9jdSBzaW5jZQotCSAgIFBDSSBCdXJzdCkKLQkgICBpIGhhdmUgZXhwZXJpbWVudGVkIHRoYXQgaXQgaXMgYXQgbW9zdCA2NCBCeXRlIHRvIG11Y2ggZm9yIHBsYXlpbmcgCi0JICAgc28gc3Vic3RyYWN0aW9uIG9mIDY0IGJ5dGUgc2hvdWxkIGJlIG9rIGZvciBBTFNBLCBidXQgdXNlIGl0IG9ubHkKLQkgICBmb3IgYXBwbGljYXRpb24gd2hlcmUgeW91IGtub3cgd2hhdCB5b3UgZG8gc2luY2UgaWYgeW91IGNvbWUgdG8KLQkgICBuZWFyIHdpdGggcmVjb3JkIHBvaW50ZXIgaXQgY2FuIGJlIGEgZGlzYXN0ZXIgKi8KLQotCXBvc2l0aW9uICY9IEhEU1BNX0J1ZmZlclBvc2l0aW9uTWFzazsKLQlwb3NpdGlvbiA9ICgocG9zaXRpb24gLSA2NCkgJSAoMiAqIGhkc3BtLT5wZXJpb2RfYnl0ZXMpKSAvIDQ7CisJfQogCiAJcmV0dXJuIHBvc2l0aW9uOwogfQpAQCAtODA1LDcgKzEyNzksNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBoZHNwbV9zZXRfaW50ZXJydXB0X2ludGVydmFsKHN0cnVjdCBoZHNwbSAqIHMsIHVuc2lnbmVkIGludCBmcmFtZXMpCitzdGF0aWMgaW50IGhkc3BtX3NldF9pbnRlcnJ1cHRfaW50ZXJ2YWwoc3RydWN0IGhkc3BtICpzLCB1bnNpZ25lZCBpbnQgZnJhbWVzKQogewogCWludCBuOwogCkBAIC04MjksMjEgKzEzMDMsNTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBoZHNwbV9jYWxjX2Rkc192YWx1ZShzdHJ1Y3QgaGRzcG0gKmhkc3BtLCB1NjQgcGVyaW9kKQoreworCXU2NCBmcmVxX2NvbnN0OworCisJaWYgKHBlcmlvZCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwljYXNlIE1BREk6CisJY2FzZSBBRVMzMjoKKwkJZnJlcV9jb25zdCA9IDExMDA2OTMxMzQzMzYyNFVMTDsKKwkJYnJlYWs7CisJY2FzZSBSYXlEQVQ6CisJY2FzZSBBSU86CisJCWZyZXFfY29uc3QgPSAxMDQ4NTc2MDAwMDAwMDBVTEw7CisJCWJyZWFrOworCWNhc2UgTUFESWZhY2U6CisJCWZyZXFfY29uc3QgPSAxMzEwNzIwMDAwMDAwMDBVTEw7CisJfQorCisJcmV0dXJuIGRpdl91NjQoZnJlcV9jb25zdCwgcGVyaW9kKTsKK30KKworCiBzdGF0aWMgdm9pZCBoZHNwbV9zZXRfZGRzX3ZhbHVlKHN0cnVjdCBoZHNwbSAqaGRzcG0sIGludCByYXRlKQogewogCXU2NCBuOwotCQorCiAJaWYgKHJhdGUgPj0gMTEyMDAwKQogCQlyYXRlIC89IDQ7CiAJZWxzZSBpZiAocmF0ZSA+PSA1NjAwMCkKIAkJcmF0ZSAvPSAyOwogCi0JLyogUk1FIHNheXMgbiA9IDEwNDg1NzYwMDAwMDAwMCwgYnV0IGluIHRoZSB3aW5kb3dzIE1BREkgZHJpdmVyLCBJIHNlZToKLS8vCXJldHVybiAxMDQ4NTc2MDAwMDAwMDAgLyByYXRlOyAvLyAxMDAgTUh6Ci0JcmV0dXJuIDExMDEwMDQ4MDAwMDAwMCAvIHJhdGU7IC8vIDEwNSBNSHoKLSAgICAgICAgKi8JICAgCi0JLyogbiA9IDEwNDg1NzYwMDAwMDAwMFVMTDsgKi8gLyogID0gIDJeMjAgKiAxMF44ICovCi0JbiA9IDExMDEwMDQ4MDAwMDAwMFVMTDsgICAgLyogVmFsdWUgY2hlY2tlZCBmb3IgQUVTMzIgYW5kIE1BREkgKi8KKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBNQURJZmFjZToKKwkgIG4gPSAxMzEwNzIwMDAwMDAwMDBVTEw7ICAvKiAxMjUgTUh6ICovCisJICBicmVhazsKKwljYXNlIE1BREk6CisJY2FzZSBBRVMzMjoKKwkgIG4gPSAxMTAwNjkzMTM0MzM2MjRVTEw7ICAvKiAxMDUgTUh6ICovCisJICBicmVhazsKKwljYXNlIFJheURBVDoKKwljYXNlIEFJTzoKKwkgIG4gPSAxMDQ4NTc2MDAwMDAwMDBVTEw7ICAvKiAxMDAgTUh6ICovCisJICBicmVhazsKKwl9CisKIAluID0gZGl2X3U2NChuLCByYXRlKTsKIAkvKiBuIHNob3VsZCBiZSBsZXNzIHRoYW4gMl4zMiBmb3IgYmVpbmcgd3JpdHRlbiB0byBGUkVRIHJlZ2lzdGVyICovCiAJc25kX0JVR19PTihuID4+IDMyKTsKQEAgLTg2NCwxMyArMTM3MCwxMyBAQAogCiAJaWYgKCEoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9DbG9ja01vZGVNYXN0ZXIpKSB7CiAKLQkgICAgICAgIC8qIFNMQVZFIC0tLSAqLyAKKwkJLyogU0xBVkUgLS0tICovCiAJCWlmIChjYWxsZWRfaW50ZXJuYWxseSkgewogCi0gICAgICAgIAkgIC8qIHJlcXVlc3QgZnJvbSBjdGwgb3IgY2FyZCBpbml0aWFsaXphdGlvbiAKLQkgICAgICAgICAgICAganVzdCBtYWtlIGEgd2FybmluZyBhbiByZW1lbWJlciBzZXR0aW5nIAotCQkgICAgIGZvciBmdXR1cmUgbWFzdGVyIG1vZGUgc3dpdGNoaW5nICovCi0gICAgCisJCQkvKiByZXF1ZXN0IGZyb20gY3RsIG9yIGNhcmQgaW5pdGlhbGl6YXRpb24KKwkJCSAgIGp1c3QgbWFrZSBhIHdhcm5pbmcgYW4gcmVtZW1iZXIgc2V0dGluZworCQkJICAgZm9yIGZ1dHVyZSBtYXN0ZXIgbW9kZSBzd2l0Y2hpbmcgKi8KKwogCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIkhEU1BNOiAiCiAJCQkJICAgIldhcm5pbmc6IGRldmljZSBpcyBub3QgcnVubmluZyAiCiAJCQkJICAgImFzIGEgY2xvY2sgbWFzdGVyLlxuIik7CkBAIC05MDcsNyArMTQxMyw3IEBACiAKIAkgICBOb3RlIHRoYXQgYSBzaW1pbGFyIGJ1dCBlc3NlbnRpYWxseSBpbnNvbHVibGUgcHJvYmxlbSBleGlzdHMgZm9yCiAJICAgZXh0ZXJuYWxseS1kcml2ZW4gcmF0ZSBjaGFuZ2VzLiBBbGwgd2UgY2FuIGRvIGlzIHRvIGZsYWcgcmF0ZQotCSAgIGNoYW5nZXMgaW4gdGhlIHJlYWQvd3JpdGUgcm91dGluZXMuICAKKwkgICBjaGFuZ2VzIGluIHRoZSByZWFkL3dyaXRlIHJvdXRpbmVzLgogCSAqLwogCiAJaWYgKGN1cnJlbnRfcmF0ZSA8PSA0ODAwMCkKQEAgLTk3NSwxNiArMTQ4MSwzNSBAQAogCS8qIEZvciBBRVMzMiwgbmVlZCB0byBzZXQgRERTIHZhbHVlIGluIEZSRVEgcmVnaXN0ZXIKIAkgICBGb3IgTUFESSwgYWxzbyBhcHBhcmVudGx5ICovCiAJaGRzcG1fc2V0X2Rkc192YWx1ZShoZHNwbSwgcmF0ZSk7Ci0JCi0JaWYgKGhkc3BtLT5pc19hZXMzMiAmJiByYXRlICE9IGN1cnJlbnRfcmF0ZSkKKworCWlmIChBRVMzMiA9PSBoZHNwbS0+aW9fdHlwZSAmJiByYXRlICE9IGN1cnJlbnRfcmF0ZSkKIAkJaGRzcG1fd3JpdGUoaGRzcG0sIEhEU1BNX2VlcHJvbV93ciwgMCk7Ci0JCi0JLyogRm9yIEFFUzMyIGFuZCBmb3IgTUFESSAoYXQgbGVhc3QgcmV2IDIwNCksIGNoYW5uZWxfbWFwIG5lZWRzIHRvCi0JICogYWx3YXlzIGJlIGNoYW5uZWxfbWFwX21hZGlfc3MsIHdoYXRldmVyIHRoZSBzYW1wbGUgcmF0ZSAqLwotCWhkc3BtLT5jaGFubmVsX21hcCA9IGNoYW5uZWxfbWFwX21hZGlfc3M7CiAKIAloZHNwbS0+c3lzdGVtX3NhbXBsZV9yYXRlID0gcmF0ZTsKIAorCWlmIChyYXRlIDw9IDQ4MDAwKSB7CisJCWhkc3BtLT5jaGFubmVsX21hcF9pbiA9IGhkc3BtLT5jaGFubmVsX21hcF9pbl9zczsKKwkJaGRzcG0tPmNoYW5uZWxfbWFwX291dCA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXRfc3M7CisJCWhkc3BtLT5tYXhfY2hhbm5lbHNfaW4gPSBoZHNwbS0+c3NfaW5fY2hhbm5lbHM7CisJCWhkc3BtLT5tYXhfY2hhbm5lbHNfb3V0ID0gaGRzcG0tPnNzX291dF9jaGFubmVsczsKKwkJaGRzcG0tPnBvcnRfbmFtZXNfaW4gPSBoZHNwbS0+cG9ydF9uYW1lc19pbl9zczsKKwkJaGRzcG0tPnBvcnRfbmFtZXNfb3V0ID0gaGRzcG0tPnBvcnRfbmFtZXNfb3V0X3NzOworCX0gZWxzZSBpZiAocmF0ZSA8PSA5NjAwMCkgeworCQloZHNwbS0+Y2hhbm5lbF9tYXBfaW4gPSBoZHNwbS0+Y2hhbm5lbF9tYXBfaW5fZHM7CisJCWhkc3BtLT5jaGFubmVsX21hcF9vdXQgPSBoZHNwbS0+Y2hhbm5lbF9tYXBfb3V0X2RzOworCQloZHNwbS0+bWF4X2NoYW5uZWxzX2luID0gaGRzcG0tPmRzX2luX2NoYW5uZWxzOworCQloZHNwbS0+bWF4X2NoYW5uZWxzX291dCA9IGhkc3BtLT5kc19vdXRfY2hhbm5lbHM7CisJCWhkc3BtLT5wb3J0X25hbWVzX2luID0gaGRzcG0tPnBvcnRfbmFtZXNfaW5fZHM7CisJCWhkc3BtLT5wb3J0X25hbWVzX291dCA9IGhkc3BtLT5wb3J0X25hbWVzX291dF9kczsKKwl9IGVsc2UgeworCQloZHNwbS0+Y2hhbm5lbF9tYXBfaW4gPSBoZHNwbS0+Y2hhbm5lbF9tYXBfaW5fcXM7CisJCWhkc3BtLT5jaGFubmVsX21hcF9vdXQgPSBoZHNwbS0+Y2hhbm5lbF9tYXBfb3V0X3FzOworCQloZHNwbS0+bWF4X2NoYW5uZWxzX2luID0gaGRzcG0tPnFzX2luX2NoYW5uZWxzOworCQloZHNwbS0+bWF4X2NoYW5uZWxzX291dCA9IGhkc3BtLT5xc19vdXRfY2hhbm5lbHM7CisJCWhkc3BtLT5wb3J0X25hbWVzX2luID0gaGRzcG0tPnBvcnRfbmFtZXNfaW5fcXM7CisJCWhkc3BtLT5wb3J0X25hbWVzX291dCA9IGhkc3BtLT5wb3J0X25hbWVzX291dF9xczsKKwl9CisKIAlpZiAobm90X3NldCAhPSAwKQogCQlyZXR1cm4gLTE7CiAKQEAgLTEwMTksMzkgKzE1NDQsMjYgQEAKIAkJCQkJCSAgICAgIGludCBpZCkKIHsKIAkvKiB0aGUgaGFyZHdhcmUgYWxyZWFkeSBkb2VzIHRoZSByZWxldmFudCBiaXQtbWFzayB3aXRoIDB4ZmYgKi8KLQlpZiAoaWQpCi0JCXJldHVybiBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9taWRpRGF0YUluMSk7Ci0JZWxzZQotCQlyZXR1cm4gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaURhdGFJbjApOworCXJldHVybiBoZHNwbV9yZWFkKGhkc3BtLCBoZHNwbS0+bWlkaVtpZF0uZGF0YUluKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNuZF9oZHNwbV9taWRpX3dyaXRlX2J5dGUgKHN0cnVjdCBoZHNwbSAqaGRzcG0sIGludCBpZCwKIAkJCQkJICAgICAgaW50IHZhbCkKIHsKIAkvKiB0aGUgaGFyZHdhcmUgYWxyZWFkeSBkb2VzIHRoZSByZWxldmFudCBiaXQtbWFzayB3aXRoIDB4ZmYgKi8KLQlpZiAoaWQpCi0JCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9taWRpRGF0YU91dDEsIHZhbCk7Ci0JZWxzZQotCQloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fbWlkaURhdGFPdXQwLCB2YWwpOworCXJldHVybiBoZHNwbV93cml0ZShoZHNwbSwgaGRzcG0tPm1pZGlbaWRdLmRhdGFPdXQsIHZhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNuZF9oZHNwbV9taWRpX2lucHV0X2F2YWlsYWJsZSAoc3RydWN0IGhkc3BtICpoZHNwbSwgaW50IGlkKQogewotCWlmIChpZCkKLQkJcmV0dXJuIChoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9taWRpU3RhdHVzSW4xKSAmIDB4ZmYpOwotCWVsc2UKLQkJcmV0dXJuIChoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9taWRpU3RhdHVzSW4wKSAmIDB4ZmYpOworCXJldHVybiBoZHNwbV9yZWFkKGhkc3BtLCBoZHNwbS0+bWlkaVtpZF0uc3RhdHVzSW4pICYgMHhGRjsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc25kX2hkc3BtX21pZGlfb3V0cHV0X3Bvc3NpYmxlIChzdHJ1Y3QgaGRzcG0gKmhkc3BtLCBpbnQgaWQpCiB7CiAJaW50IGZpZm9fYnl0ZXNfdXNlZDsKIAotCWlmIChpZCkKLQkJZmlmb19ieXRlc191c2VkID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c091dDEpOwotCWVsc2UKLQkJZmlmb19ieXRlc191c2VkID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c091dDApOwotCWZpZm9fYnl0ZXNfdXNlZCAmPSAweGZmOworCWZpZm9fYnl0ZXNfdXNlZCA9IGhkc3BtX3JlYWQoaGRzcG0sIGhkc3BtLT5taWRpW2lkXS5zdGF0dXNPdXQpICYgMHhGRjsKIAogCWlmIChmaWZvX2J5dGVzX3VzZWQgPCAxMjgpCiAJCXJldHVybiAgMTI4IC0gZmlmb19ieXRlc191c2VkOwpAQCAtMTA3NCw3ICsxNTg2LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOwogCiAJLyogT3V0cHV0IGlzIG5vdCBpbnRlcnJ1cHQgZHJpdmVuICovCi0JCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZobWlkaS0+bG9jaywgZmxhZ3MpOwogCWlmIChobWlkaS0+b3V0cHV0ICYmCiAJICAgICFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eSAoaG1pZGktPm91dHB1dCkpIHsKQEAgLTEwODMsMTEgKzE1OTUsMTEgQEAKIAkJaWYgKG5fcGVuZGluZyA+IDApIHsKIAkJCWlmIChuX3BlbmRpbmcgPiAoaW50KXNpemVvZiAoYnVmKSkKIAkJCQluX3BlbmRpbmcgPSBzaXplb2YgKGJ1Zik7Ci0JCQorCiAJCQl0b193cml0ZSA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0IChobWlkaS0+b3V0cHV0LCBidWYsCiAJCQkJCQkJIG5fcGVuZGluZyk7CiAJCQlpZiAodG9fd3JpdGUgPiAwKSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IHRvX3dyaXRlOyArK2kpIAorCQkJCWZvciAoaSA9IDA7IGkgPCB0b193cml0ZTsgKytpKQogCQkJCQlzbmRfaGRzcG1fbWlkaV93cml0ZV9ieXRlIChobWlkaS0+aGRzcG0sCiAJCQkJCQkJCSAgIGhtaWRpLT5pZCwKIAkJCQkJCQkJICAgYnVmW2ldKTsKQEAgLTExMjcsMTIgKzE2MzksMTEgQEAKIAkJfQogCX0KIAlobWlkaS0+cGVuZGluZyA9IDA7Ci0JaWYgKGhtaWRpLT5pZCkKLQkJaG1pZGktPmhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX01pZGkxSW50ZXJydXB0RW5hYmxlOwotCWVsc2UKLQkJaG1pZGktPmhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX01pZGkwSW50ZXJydXB0RW5hYmxlOworCisJaG1pZGktPmhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IGhtaWRpLT5pZTsKIAloZHNwbV93cml0ZShobWlkaS0+aGRzcG0sIEhEU1BNX2NvbnRyb2xSZWdpc3RlciwKIAkJICAgIGhtaWRpLT5oZHNwbS0+Y29udHJvbF9yZWdpc3Rlcik7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaG1pZGktPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gc25kX2hkc3BtX21pZGlfb3V0cHV0X3dyaXRlIChobWlkaSk7CiB9CkBAIC0xMTQzLDIwICsxNjU0LDE4IEBACiAJc3RydWN0IGhkc3BtICpoZHNwbTsKIAlzdHJ1Y3QgaGRzcG1fbWlkaSAqaG1pZGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgaWU7CiAKIAlobWlkaSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKIAloZHNwbSA9IGhtaWRpLT5oZHNwbTsKLQlpZSA9IGhtaWRpLT5pZCA/Ci0JCUhEU1BNX01pZGkxSW50ZXJydXB0RW5hYmxlIDogSERTUE1fTWlkaTBJbnRlcnJ1cHRFbmFibGU7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhkc3BtLT5sb2NrLCBmbGFncyk7CiAJaWYgKHVwKSB7Ci0JCWlmICghKGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYgaWUpKSB7CisJCWlmICghKGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYgaG1pZGktPmllKSkgewogCQkJc25kX2hkc3BtX2ZsdXNoX21pZGlfaW5wdXQgKGhkc3BtLCBobWlkaS0+aWQpOwotCQkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgfD0gaWU7CisJCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBobWlkaS0+aWU7CiAJCX0KIAl9IGVsc2UgewotCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmPSB+aWU7CisJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICY9IH5obWlkaS0+aWU7CiAJfQogCiAJaGRzcG1fd3JpdGUoaGRzcG0sIEhEU1BNX2NvbnRyb2xSZWdpc3RlciwgaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIpOwpAQCAtMTE2NywxNCArMTY3NiwxNCBAQAogewogCXN0cnVjdCBoZHNwbV9taWRpICpobWlkaSA9IChzdHJ1Y3QgaGRzcG1fbWlkaSAqKSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlzbmRfaGRzcG1fbWlkaV9vdXRwdXRfd3JpdGUoaG1pZGkpOwogCXNwaW5fbG9ja19pcnFzYXZlICgmaG1pZGktPmxvY2ssIGZsYWdzKTsKIAogCS8qIHRoaXMgZG9lcyBub3QgYnVtcCBobWlkaS0+aXN0aW1lciwgYmVjYXVzZSB0aGUKIAkgICBrZXJuZWwgYXV0b21hdGljYWxseSByZW1vdmVkIHRoZSB0aW1lciB3aGVuIGl0CiAJICAgZXhwaXJlZCwgYW5kIHdlIGFyZSBub3cgYWRkaW5nIGl0IGJhY2ssIHRodXMKLQkgICBsZWF2aW5nIGlzdGltZXIgd2hlcmV2ZXIgaXQgd2FzIHNldCBiZWZvcmUuICAKKwkgICBsZWF2aW5nIGlzdGltZXIgd2hlcmV2ZXIgaXQgd2FzIHNldCBiZWZvcmUuCiAJKi8KIAogCWlmIChobWlkaS0+aXN0aW1lcikgewpAQCAtMTI4OCwyMiArMTc5NywxMDMgQEAKIAloZHNwbS0+bWlkaVtpZF0uaGRzcG0gPSBoZHNwbTsKIAlzcGluX2xvY2tfaW5pdCAoJmhkc3BtLT5taWRpW2lkXS5sb2NrKTsKIAotCXNwcmludGYgKGJ1ZiwgIiVzIE1JREkgJWQiLCBjYXJkLT5zaG9ydG5hbWUsIGlkKzEpOwotCWVyciA9IHNuZF9yYXdtaWRpX25ldyAoY2FyZCwgYnVmLCBpZCwgMSwgMSwgJmhkc3BtLT5taWRpW2lkXS5ybWlkaSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJaWYgKDAgPT0gaWQpIHsKKwkJaWYgKE1BRElmYWNlID09IGhkc3BtLT5pb190eXBlKSB7CisJCQkvKiBNSURJLW92ZXItTUFESSBvbiBIRFNQZSBNQURJZmFjZSAqLworCQkJaGRzcG0tPm1pZGlbMF0uZGF0YUluID0gSERTUE1fbWlkaURhdGFJbjI7CisJCQloZHNwbS0+bWlkaVswXS5zdGF0dXNJbiA9IEhEU1BNX21pZGlTdGF0dXNJbjI7CisJCQloZHNwbS0+bWlkaVswXS5kYXRhT3V0ID0gSERTUE1fbWlkaURhdGFPdXQyOworCQkJaGRzcG0tPm1pZGlbMF0uc3RhdHVzT3V0ID0gSERTUE1fbWlkaVN0YXR1c091dDI7CisJCQloZHNwbS0+bWlkaVswXS5pZSA9IEhEU1BNX01pZGkySW50ZXJydXB0RW5hYmxlOworCQkJaGRzcG0tPm1pZGlbMF0uaXJxID0gSERTUE1fbWlkaTJJUlFQZW5kaW5nOworCQl9IGVsc2UgeworCQkJaGRzcG0tPm1pZGlbMF0uZGF0YUluID0gSERTUE1fbWlkaURhdGFJbjA7CisJCQloZHNwbS0+bWlkaVswXS5zdGF0dXNJbiA9IEhEU1BNX21pZGlTdGF0dXNJbjA7CisJCQloZHNwbS0+bWlkaVswXS5kYXRhT3V0ID0gSERTUE1fbWlkaURhdGFPdXQwOworCQkJaGRzcG0tPm1pZGlbMF0uc3RhdHVzT3V0ID0gSERTUE1fbWlkaVN0YXR1c091dDA7CisJCQloZHNwbS0+bWlkaVswXS5pZSA9IEhEU1BNX01pZGkwSW50ZXJydXB0RW5hYmxlOworCQkJaGRzcG0tPm1pZGlbMF0uaXJxID0gSERTUE1fbWlkaTBJUlFQZW5kaW5nOworCQl9CisJfSBlbHNlIGlmICgxID09IGlkKSB7CisJCWhkc3BtLT5taWRpWzFdLmRhdGFJbiA9IEhEU1BNX21pZGlEYXRhSW4xOworCQloZHNwbS0+bWlkaVsxXS5zdGF0dXNJbiA9IEhEU1BNX21pZGlTdGF0dXNJbjE7CisJCWhkc3BtLT5taWRpWzFdLmRhdGFPdXQgPSBIRFNQTV9taWRpRGF0YU91dDE7CisJCWhkc3BtLT5taWRpWzFdLnN0YXR1c091dCA9IEhEU1BNX21pZGlTdGF0dXNPdXQxOworCQloZHNwbS0+bWlkaVsxXS5pZSA9IEhEU1BNX01pZGkxSW50ZXJydXB0RW5hYmxlOworCQloZHNwbS0+bWlkaVsxXS5pcnEgPSBIRFNQTV9taWRpMUlSUVBlbmRpbmc7CisJfSBlbHNlIGlmICgoMiA9PSBpZCkgJiYgKE1BREkgPT0gaGRzcG0tPmlvX3R5cGUpKSB7CisJCS8qIE1JREktb3Zlci1NQURJIG9uIEhEU1BlIE1BREkgKi8KKwkJaGRzcG0tPm1pZGlbMl0uZGF0YUluID0gSERTUE1fbWlkaURhdGFJbjI7CisJCWhkc3BtLT5taWRpWzJdLnN0YXR1c0luID0gSERTUE1fbWlkaVN0YXR1c0luMjsKKwkJaGRzcG0tPm1pZGlbMl0uZGF0YU91dCA9IEhEU1BNX21pZGlEYXRhT3V0MjsKKwkJaGRzcG0tPm1pZGlbMl0uc3RhdHVzT3V0ID0gSERTUE1fbWlkaVN0YXR1c091dDI7CisJCWhkc3BtLT5taWRpWzJdLmllID0gSERTUE1fTWlkaTJJbnRlcnJ1cHRFbmFibGU7CisJCWhkc3BtLT5taWRpWzJdLmlycSA9IEhEU1BNX21pZGkySVJRUGVuZGluZzsKKwl9IGVsc2UgaWYgKDIgPT0gaWQpIHsKKwkJLyogVENPIE1UQywgcmVhZCBvbmx5ICovCisJCWhkc3BtLT5taWRpWzJdLmRhdGFJbiA9IEhEU1BNX21pZGlEYXRhSW4yOworCQloZHNwbS0+bWlkaVsyXS5zdGF0dXNJbiA9IEhEU1BNX21pZGlTdGF0dXNJbjI7CisJCWhkc3BtLT5taWRpWzJdLmRhdGFPdXQgPSAtMTsKKwkJaGRzcG0tPm1pZGlbMl0uc3RhdHVzT3V0ID0gLTE7CisJCWhkc3BtLT5taWRpWzJdLmllID0gSERTUE1fTWlkaTJJbnRlcnJ1cHRFbmFibGU7CisJCWhkc3BtLT5taWRpWzJdLmlycSA9IEhEU1BNX21pZGkySVJRUGVuZGluZ0FFUzsKKwl9IGVsc2UgaWYgKDMgPT0gaWQpIHsKKwkJLyogVENPIE1UQyBvbiBIRFNQZSBNQURJICovCisJCWhkc3BtLT5taWRpWzNdLmRhdGFJbiA9IEhEU1BNX21pZGlEYXRhSW4zOworCQloZHNwbS0+bWlkaVszXS5zdGF0dXNJbiA9IEhEU1BNX21pZGlTdGF0dXNJbjM7CisJCWhkc3BtLT5taWRpWzNdLmRhdGFPdXQgPSAtMTsKKwkJaGRzcG0tPm1pZGlbM10uc3RhdHVzT3V0ID0gLTE7CisJCWhkc3BtLT5taWRpWzNdLmllID0gSERTUE1fTWlkaTNJbnRlcnJ1cHRFbmFibGU7CisJCWhkc3BtLT5taWRpWzNdLmlycSA9IEhEU1BNX21pZGkzSVJRUGVuZGluZzsKKwl9CiAKLQlzcHJpbnRmKGhkc3BtLT5taWRpW2lkXS5ybWlkaS0+bmFtZSwgIkhEU1BNIE1JREkgJWQiLCBpZCsxKTsKLQloZHNwbS0+bWlkaVtpZF0ucm1pZGktPnByaXZhdGVfZGF0YSA9ICZoZHNwbS0+bWlkaVtpZF07CisJaWYgKChpZCA8IDIpIHx8ICgoMiA9PSBpZCkgJiYgKChNQURJID09IGhkc3BtLT5pb190eXBlKSB8fAorCQkJCQkoTUFESWZhY2UgPT0gaGRzcG0tPmlvX3R5cGUpKSkpIHsKKwkJaWYgKChpZCA9PSAwKSAmJiAoTUFESWZhY2UgPT0gaGRzcG0tPmlvX3R5cGUpKSB7CisJCQlzcHJpbnRmKGJ1ZiwgIiVzIE1JRElvdmVyTUFESSIsIGNhcmQtPnNob3J0bmFtZSk7CisJCX0gZWxzZSBpZiAoKGlkID09IDIpICYmIChNQURJID09IGhkc3BtLT5pb190eXBlKSkgeworCQkJc3ByaW50ZihidWYsICIlcyBNSURJb3Zlck1BREkiLCBjYXJkLT5zaG9ydG5hbWUpOworCQl9IGVsc2UgeworCQkJc3ByaW50ZihidWYsICIlcyBNSURJICVkIiwgY2FyZC0+c2hvcnRuYW1lLCBpZCsxKTsKKwkJfQorCQllcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2FyZCwgYnVmLCBpZCwgMSwgMSwKKwkJCQkmaGRzcG0tPm1pZGlbaWRdLnJtaWRpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCi0Jc25kX3Jhd21pZGlfc2V0X29wcyhoZHNwbS0+bWlkaVtpZF0ucm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKLQkJCSAgICAmc25kX2hkc3BtX21pZGlfb3V0cHV0KTsKLQlzbmRfcmF3bWlkaV9zZXRfb3BzKGhkc3BtLT5taWRpW2lkXS5ybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCi0JCQkgICAgJnNuZF9oZHNwbV9taWRpX2lucHV0KTsKKwkJc3ByaW50ZihoZHNwbS0+bWlkaVtpZF0ucm1pZGktPm5hbWUsICIlcyBNSURJICVkIiwKKwkJCQljYXJkLT5pZCwgaWQrMSk7CisJCWhkc3BtLT5taWRpW2lkXS5ybWlkaS0+cHJpdmF0ZV9kYXRhID0gJmhkc3BtLT5taWRpW2lkXTsKIAotCWhkc3BtLT5taWRpW2lkXS5ybWlkaS0+aW5mb19mbGFncyB8PSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUIHwKLQkJU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUIHwKLQkJU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKKwkJc25kX3Jhd21pZGlfc2V0X29wcyhoZHNwbS0+bWlkaVtpZF0ucm1pZGksCisJCQkJU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULAorCQkJCSZzbmRfaGRzcG1fbWlkaV9vdXRwdXQpOworCQlzbmRfcmF3bWlkaV9zZXRfb3BzKGhkc3BtLT5taWRpW2lkXS5ybWlkaSwKKwkJCQlTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKKwkJCQkmc25kX2hkc3BtX21pZGlfaW5wdXQpOworCisJCWhkc3BtLT5taWRpW2lkXS5ybWlkaS0+aW5mb19mbGFncyB8PQorCQkJU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCB8CisJCQlTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgfAorCQkJU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKKwl9IGVsc2UgeworCQkvKiBUQ08gTVRDLCByZWFkIG9ubHkgKi8KKwkJc3ByaW50ZihidWYsICIlcyBNVEMgJWQiLCBjYXJkLT5zaG9ydG5hbWUsIGlkKzEpOworCQllcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2FyZCwgYnVmLCBpZCwgMSwgMSwKKwkJCQkmaGRzcG0tPm1pZGlbaWRdLnJtaWRpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCXNwcmludGYoaGRzcG0tPm1pZGlbaWRdLnJtaWRpLT5uYW1lLAorCQkJCSIlcyBNVEMgJWQiLCBjYXJkLT5pZCwgaWQrMSk7CisJCWhkc3BtLT5taWRpW2lkXS5ybWlkaS0+cHJpdmF0ZV9kYXRhID0gJmhkc3BtLT5taWRpW2lkXTsKKworCQlzbmRfcmF3bWlkaV9zZXRfb3BzKGhkc3BtLT5taWRpW2lkXS5ybWlkaSwKKwkJCQlTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKKwkJCQkmc25kX2hkc3BtX21pZGlfaW5wdXQpOworCisJCWhkc3BtLT5taWRpW2lkXS5ybWlkaS0+aW5mb19mbGFncyB8PSBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzEyLDEyICsxOTAyLDE1IEBACiBzdGF0aWMgdm9pZCBoZHNwbV9taWRpX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IChzdHJ1Y3QgaGRzcG0gKilhcmc7Ci0JCi0JaWYgKGhkc3BtLT5taWRpWzBdLnBlbmRpbmcpCi0JCXNuZF9oZHNwbV9taWRpX2lucHV0X3JlYWQgKCZoZHNwbS0+bWlkaVswXSk7Ci0JaWYgKGhkc3BtLT5taWRpWzFdLnBlbmRpbmcpCi0JCXNuZF9oZHNwbV9taWRpX2lucHV0X3JlYWQgKCZoZHNwbS0+bWlkaVsxXSk7Ci19IAorCWludCBpID0gMDsKKworCXdoaWxlIChpIDwgaGRzcG0tPm1pZGlQb3J0cykgeworCQlpZiAoaGRzcG0tPm1pZGlbaV0ucGVuZGluZykKKwkJCXNuZF9oZHNwbV9taWRpX2lucHV0X3JlYWQoJmhkc3BtLT5taWRpW2ldKTsKKworCQlpKys7CisJfQorfQogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMjYsNiArMTkxOSwyMiBAQAogCiAvKiBnZXQgdGhlIHN5c3RlbSBzYW1wbGUgcmF0ZSB3aGljaCBpcyBzZXQgKi8KIAorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgcmVhbCBzYW1wbGUgcmF0ZSBmcm9tIHRoZQorICogY3VycmVudCBERFMgdmFsdWUuCisgKiovCitzdGF0aWMgaW50IGhkc3BtX2dldF9zeXN0ZW1fc2FtcGxlX3JhdGUoc3RydWN0IGhkc3BtICpoZHNwbSkKK3sKKwl1bnNpZ25lZCBpbnQgcGVyaW9kLCByYXRlOworCisJcGVyaW9kID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfUExMX0ZSRVEpOworCXJhdGUgPSBoZHNwbV9jYWxjX2Rkc192YWx1ZShoZHNwbSwgcGVyaW9kKTsKKworCXJldHVybiByYXRlOworfQorCisKICNkZWZpbmUgSERTUE1fU1lTVEVNX1NBTVBMRV9SQVRFKHhuYW1lLCB4aW5kZXgpIFwKIHsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKICAgLm5hbWUgPSB4bmFtZSwgXApAQCAtMTM0MCwxMTIgKzE5NDksMjc0IEBACiB7CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CiAJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAyNzAwMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAyMDcwMDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIuc3RlcCA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKKwogc3RhdGljIGludCBzbmRfaGRzcG1fZ2V0X3N5c3RlbV9zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKgogCQkJCQkgICAgdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwbS0+c3lzdGVtX3NhbXBsZV9yYXRlOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcG1fZ2V0X3N5c3RlbV9zYW1wbGVfcmF0ZShoZHNwbSk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoeG5hbWUsIHhpbmRleCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAotICAubmFtZSA9IHhuYW1lLCBcCi0gIC5pbmRleCA9IHhpbmRleCwgXAotICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsIFwKLSAgLmluZm8gPSBzbmRfaGRzcG1faW5mb19hdXRvc3luY19zYW1wbGVfcmF0ZSwgXAotICAuZ2V0ID0gc25kX2hkc3BtX2dldF9hdXRvc3luY19zYW1wbGVfcmF0ZSBcCisKKy8qKgorICogUmV0dXJucyB0aGUgV29yZENsb2NrIHNhbXBsZSByYXRlIGNsYXNzIGZvciB0aGUgZ2l2ZW4gY2FyZC4KKyAqKi8KK3N0YXRpYyBpbnQgaGRzcG1fZ2V0X3djX3NhbXBsZV9yYXRlKHN0cnVjdCBoZHNwbSAqaGRzcG0pCit7CisJaW50IHN0YXR1czsKKworCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwljYXNlIFJheURBVDoKKwljYXNlIEFJTzoKKwkJc3RhdHVzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfU1RBVFVTXzEpOworCQlyZXR1cm4gKHN0YXR1cyA+PiAxNikgJiAweEY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCisJcmV0dXJuIDA7CiB9CiAKKworLyoqCisgKiBSZXR1cm5zIHRoZSBUQ08gc2FtcGxlIHJhdGUgY2xhc3MgZm9yIHRoZSBnaXZlbiBjYXJkLgorICoqLworc3RhdGljIGludCBoZHNwbV9nZXRfdGNvX3NhbXBsZV9yYXRlKHN0cnVjdCBoZHNwbSAqaGRzcG0pCit7CisJaW50IHN0YXR1czsKKworCWlmIChoZHNwbS0+dGNvKSB7CisJCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwkJY2FzZSBSYXlEQVQ6CisJCWNhc2UgQUlPOgorCQkJc3RhdHVzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfU1RBVFVTXzEpOworCQkJcmV0dXJuIChzdGF0dXMgPj4gMjApICYgMHhGOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKKy8qKgorICogUmV0dXJucyB0aGUgU1lOQ19JTiBzYW1wbGUgcmF0ZSBjbGFzcyBmb3IgdGhlIGdpdmVuIGNhcmQuCisgKiovCitzdGF0aWMgaW50IGhkc3BtX2dldF9zeW5jX2luX3NhbXBsZV9yYXRlKHN0cnVjdCBoZHNwbSAqaGRzcG0pCit7CisJaW50IHN0YXR1czsKKworCWlmIChoZHNwbS0+dGNvKSB7CisJCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwkJY2FzZSBSYXlEQVQ6CisJCWNhc2UgQUlPOgorCQkJc3RhdHVzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfU1RBVFVTXzIpOworCQkJcmV0dXJuIChzdGF0dXMgPj4gMTIpICYgMHhGOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKKy8qKgorICogUmV0dXJucyB0aGUgc2FtcGxlIHJhdGUgY2xhc3MgZm9yIGlucHV0IHNvdXJjZSA8aWR4PiBmb3IKKyAqICduZXcgc3R5bGUnIGNhcmRzIGxpa2UgdGhlIEFJTyBhbmQgUmF5REFULgorICoqLworc3RhdGljIGludCBoZHNwbV9nZXRfczFfc2FtcGxlX3JhdGUoc3RydWN0IGhkc3BtICpoZHNwbSwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpbnQgc3RhdHVzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfU1RBVFVTXzIpOworCisJcmV0dXJuIChzdGF0dXMgPj4gKGlkeCo0KSkgJiAweEY7Cit9CisKKworCisjZGVmaW5lIEhEU1BNX0FVVE9TWU5DX1NBTVBMRV9SQVRFKHhuYW1lLCB4aW5kZXgpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLnByaXZhdGVfdmFsdWUgPSB4aW5kZXgsIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsIFwKKwkuaW5mbyA9IHNuZF9oZHNwbV9pbmZvX2F1dG9zeW5jX3NhbXBsZV9yYXRlLCBcCisJLmdldCA9IHNuZF9oZHNwbV9nZXRfYXV0b3N5bmNfc2FtcGxlX3JhdGUgXAorfQorCisKIHN0YXRpYyBpbnQgc25kX2hkc3BtX2luZm9fYXV0b3N5bmNfc2FtcGxlX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyAiMzIwMDAiLCAiNDQxMDAiLCAiNDgwMDAiLAotCQkiNjQwMDAiLCAiODgyMDAiLCAiOTYwMDAiLAotCQkiMTI4MDAwIiwgIjE3NjQwMCIsICIxOTIwMDAiLAotCQkiTm9uZSIKLQl9OwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAxMDsKKwogCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQotCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0KLQkJICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKIAlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKLQkgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCQkJdGV4dHNfZnJlcVt1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CiAJcmV0dXJuIDA7CiB9CiAKKwogc3RhdGljIGludCBzbmRfaGRzcG1fZ2V0X2F1dG9zeW5jX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICoKIAkJCQkJICAgICAgdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCXN3aXRjaCAoaGRzcG1fZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcG0pKSB7Ci0JY2FzZSAzMjAwMDoKLQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgNDQxMDA6Ci0JCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAxOwotCQlicmVhazsKLQljYXNlIDQ4MDAwOgotCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSA2NDAwMDoKLQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDM7Ci0JCWJyZWFrOwotCWNhc2UgODgyMDA6Ci0JCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA0OwotCQlicmVhazsKLQljYXNlIDk2MDAwOgotCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gNTsKLQkJYnJlYWs7Ci0JY2FzZSAxMjgwMDA6Ci0JCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwotCQlicmVhazsKLQljYXNlIDE3NjQwMDoKLQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDc7Ci0JCWJyZWFrOwotCWNhc2UgMTkyMDAwOgotCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gODsKLQkJYnJlYWs7CisJc3dpdGNoIChoZHNwbS0+aW9fdHlwZSkgeworCWNhc2UgUmF5REFUOgorCQlzd2l0Y2ggKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKSB7CisJCWNhc2UgMDoKKwkJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkJCWhkc3BtX2dldF93Y19zYW1wbGVfcmF0ZShoZHNwbSk7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCQkJaGRzcG1fZ2V0X3Rjb19zYW1wbGVfcmF0ZShoZHNwbSk7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCQkJaGRzcG1fZ2V0X3N5bmNfaW5fc2FtcGxlX3JhdGUoaGRzcG0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0KKwkJCQloZHNwbV9nZXRfczFfc2FtcGxlX3JhdGUoaGRzcG0sCisJCQkJCQlrY29udHJvbC0+cHJpdmF0ZV92YWx1ZS0xKTsKKwkJfQogCisJY2FzZSBBSU86CisJCXN3aXRjaCAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpIHsKKwkJY2FzZSAwOiAvKiBXQyAqLworCQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCQkJaGRzcG1fZ2V0X3djX3NhbXBsZV9yYXRlKGhkc3BtKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6IC8qIFRDTyAqLworCQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCQkJaGRzcG1fZ2V0X3Rjb19zYW1wbGVfcmF0ZShoZHNwbSk7CisJCQlicmVhazsKKwkJY2FzZSA1OiAvKiBTWU5DX0lOICovCisJCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0KKwkJCQloZHNwbV9nZXRfc3luY19pbl9zYW1wbGVfcmF0ZShoZHNwbSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkJCWhkc3BtX2dldF9zMV9zYW1wbGVfcmF0ZShoZHNwbSwKKwkJCQkJCXVjb250cm9sLT5pZC5pbmRleC0xKTsKKwkJfQorCisJY2FzZSBBRVMzMjoKKworCQlzd2l0Y2ggKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKSB7CisJCWNhc2UgMDogLyogV0MgKi8KKwkJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkJCWhkc3BtX2dldF93Y19zYW1wbGVfcmF0ZShoZHNwbSk7CisJCQlicmVhazsKKwkJY2FzZSA5OiAvKiBUQ08gKi8KKwkJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkJCWhkc3BtX2dldF90Y29fc2FtcGxlX3JhdGUoaGRzcG0pOworCQkJYnJlYWs7CisJCWNhc2UgMTA6IC8qIFNZTkNfSU4gKi8KKwkJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkJCWhkc3BtX2dldF9zeW5jX2luX3NhbXBsZV9yYXRlKGhkc3BtKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvKiBBRVMxIHRvIEFFUzggKi8KKwkJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkJCWhkc3BtX2dldF9zMV9zYW1wbGVfcmF0ZShoZHNwbSwKKwkJCQkJCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlLTEpOworCQkJYnJlYWs7CisKKwkJfQogCWRlZmF1bHQ6Ci0JCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA5OworCQlicmVhazsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAorCiAjZGVmaW5lIEhEU1BNX1NZU1RFTV9DTE9DS19NT0RFKHhuYW1lLCB4aW5kZXgpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKLSAgLm5hbWUgPSB4bmFtZSwgXAotICAuaW5kZXggPSB4aW5kZXgsIFwKLSAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELCBcCi0gIC5pbmZvID0gc25kX2hkc3BtX2luZm9fc3lzdGVtX2Nsb2NrX21vZGUsIFwKLSAgLmdldCA9IHNuZF9oZHNwbV9nZXRfc3lzdGVtX2Nsb2NrX21vZGUsIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLmluZGV4ID0geGluZGV4LCBcCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfFwKKwkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLCBcCisJLmluZm8gPSBzbmRfaGRzcG1faW5mb19zeXN0ZW1fY2xvY2tfbW9kZSwgXAorCS5nZXQgPSBzbmRfaGRzcG1fZ2V0X3N5c3RlbV9jbG9ja19tb2RlLCBcCisJLnB1dCA9IHNuZF9oZHNwbV9wdXRfc3lzdGVtX2Nsb2NrX21vZGUsIFwKIH0KIAogCi0KLXN0YXRpYyBpbnQgaGRzcG1fc3lzdGVtX2Nsb2NrX21vZGUoc3RydWN0IGhkc3BtICogaGRzcG0pCisvKioKKyAqIFJldHVybnMgdGhlIHN5c3RlbSBjbG9jayBtb2RlIGZvciB0aGUgZ2l2ZW4gY2FyZC4KKyAqIEByZXR1cm5zIDAgLSBtYXN0ZXIsIDEgLSBzbGF2ZQorICoqLworc3RhdGljIGludCBoZHNwbV9zeXN0ZW1fY2xvY2tfbW9kZShzdHJ1Y3QgaGRzcG0gKmhkc3BtKQogewotICAgICAgICAvKiBBbHdheXMgcmVmbGVjdCB0aGUgaGFyZHdhcmUgaW5mbywgcm1lIGlzIG5ldmVyIHdyb25nICEhISEgKi8KKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBBSU86CisJY2FzZSBSYXlEQVQ6CisJCWlmIChoZHNwbS0+c2V0dGluZ3NfcmVnaXN0ZXIgJiBIRFNQTV9jME1hc3RlcikKKwkJCXJldHVybiAwOworCQlicmVhazsKIAotCWlmIChoZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BNX0Nsb2NrTW9kZU1hc3RlcikKLQkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJaWYgKGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUE1fQ2xvY2tNb2RlTWFzdGVyKQorCQkJcmV0dXJuIDA7CisJfQorCiAJcmV0dXJuIDE7CiB9CiAKKworLyoqCisgKiBTZXRzIHRoZSBzeXN0ZW0gY2xvY2sgbW9kZS4KKyAqIEBwYXJhbSBtb2RlIDAgLSBtYXN0ZXIsIDEgLSBzbGF2ZQorICoqLworc3RhdGljIHZvaWQgaGRzcG1fc2V0X3N5c3RlbV9jbG9ja19tb2RlKHN0cnVjdCBoZHNwbSAqaGRzcG0sIGludCBtb2RlKQoreworCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwljYXNlIEFJTzoKKwljYXNlIFJheURBVDoKKwkJaWYgKDAgPT0gbW9kZSkKKwkJCWhkc3BtLT5zZXR0aW5nc19yZWdpc3RlciB8PSBIRFNQTV9jME1hc3RlcjsKKwkJZWxzZQorCQkJaGRzcG0tPnNldHRpbmdzX3JlZ2lzdGVyICY9IH5IRFNQTV9jME1hc3RlcjsKKworCQloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fV1JfU0VUVElOR1MsIGhkc3BtLT5zZXR0aW5nc19yZWdpc3Rlcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWYgKDAgPT0gbW9kZSkKKwkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX0Nsb2NrTW9kZU1hc3RlcjsKKwkJZWxzZQorCQkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfkhEU1BNX0Nsb2NrTW9kZU1hc3RlcjsKKworCQloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fY29udHJvbFJlZ2lzdGVyLAorCQkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyKTsKKwl9Cit9CisKKwogc3RhdGljIGludCBzbmRfaGRzcG1faW5mb19zeXN0ZW1fY2xvY2tfbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzW10gPSB7ICJNYXN0ZXIiLCAiU2xhdmUiIH07CisJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7ICJNYXN0ZXIiLCAiQXV0b1N5bmMiIH07CiAKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwpAQCAtMTQ2Myw5NiArMjIzNCw4MyBAQAogewogCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAKLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0KLQkgICAgaGRzcG1fc3lzdGVtX2Nsb2NrX21vZGUoaGRzcG0pOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwbV9zeXN0ZW1fY2xvY2tfbW9kZShoZHNwbSk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgSERTUE1fQ0xPQ0tfU09VUkNFKHhuYW1lLCB4aW5kZXgpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKLSAgLm5hbWUgPSB4bmFtZSwgXAotICAuaW5kZXggPSB4aW5kZXgsIFwKLSAgLmluZm8gPSBzbmRfaGRzcG1faW5mb19jbG9ja19zb3VyY2UsIFwKLSAgLmdldCA9IHNuZF9oZHNwbV9nZXRfY2xvY2tfc291cmNlLCBcCi0gIC5wdXQgPSBzbmRfaGRzcG1fcHV0X2Nsb2NrX3NvdXJjZSBcCitzdGF0aWMgaW50IHNuZF9oZHNwbV9wdXRfc3lzdGVtX2Nsb2NrX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IHZhbDsKKworCWlmICghc25kX2hkc3BtX3VzZV9pc19leGNsdXNpdmUoaGRzcG0pKQorCQlyZXR1cm4gLUVCVVNZOworCisJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKwlpZiAodmFsIDwgMCkKKwkJdmFsID0gMDsKKwllbHNlIGlmICh2YWwgPiAxKQorCQl2YWwgPSAxOworCisJaGRzcG1fc2V0X3N5c3RlbV9jbG9ja19tb2RlKGhkc3BtLCB2YWwpOworCisJcmV0dXJuIDA7CiB9CiAKKworI2RlZmluZSBIRFNQTV9JTlRFUk5BTF9DTE9DSyh4bmFtZSwgeGluZGV4KSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCisJLm5hbWUgPSB4bmFtZSwgXAorCS5pbmRleCA9IHhpbmRleCwgXAorCS5pbmZvID0gc25kX2hkc3BtX2luZm9fY2xvY2tfc291cmNlLCBcCisJLmdldCA9IHNuZF9oZHNwbV9nZXRfY2xvY2tfc291cmNlLCBcCisJLnB1dCA9IHNuZF9oZHNwbV9wdXRfY2xvY2tfc291cmNlIFwKK30KKworCiBzdGF0aWMgaW50IGhkc3BtX2Nsb2NrX3NvdXJjZShzdHJ1Y3QgaGRzcG0gKiBoZHNwbSkKIHsKLQlpZiAoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9DbG9ja01vZGVNYXN0ZXIpIHsKLQkJc3dpdGNoIChoZHNwbS0+c3lzdGVtX3NhbXBsZV9yYXRlKSB7Ci0JCWNhc2UgMzIwMDA6Ci0JCQlyZXR1cm4gMTsKLQkJY2FzZSA0NDEwMDoKLQkJCXJldHVybiAyOwotCQljYXNlIDQ4MDAwOgotCQkJcmV0dXJuIDM7Ci0JCWNhc2UgNjQwMDA6Ci0JCQlyZXR1cm4gNDsKLQkJY2FzZSA4ODIwMDoKLQkJCXJldHVybiA1OwotCQljYXNlIDk2MDAwOgotCQkJcmV0dXJuIDY7Ci0JCWNhc2UgMTI4MDAwOgotCQkJcmV0dXJuIDc7Ci0JCWNhc2UgMTc2NDAwOgotCQkJcmV0dXJuIDg7Ci0JCWNhc2UgMTkyMDAwOgotCQkJcmV0dXJuIDk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMzsKLQkJfQotCX0gZWxzZSB7Ci0JCXJldHVybiAwOworCXN3aXRjaCAoaGRzcG0tPnN5c3RlbV9zYW1wbGVfcmF0ZSkgeworCWNhc2UgMzIwMDA6IHJldHVybiAwOworCWNhc2UgNDQxMDA6IHJldHVybiAxOworCWNhc2UgNDgwMDA6IHJldHVybiAyOworCWNhc2UgNjQwMDA6IHJldHVybiAzOworCWNhc2UgODgyMDA6IHJldHVybiA0OworCWNhc2UgOTYwMDA6IHJldHVybiA1OworCWNhc2UgMTI4MDAwOiByZXR1cm4gNjsKKwljYXNlIDE3NjQwMDogcmV0dXJuIDc7CisJY2FzZSAxOTIwMDA6IHJldHVybiA4OwogCX0KKworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBoZHNwbV9zZXRfY2xvY2tfc291cmNlKHN0cnVjdCBoZHNwbSAqIGhkc3BtLCBpbnQgbW9kZSkKIHsKIAlpbnQgcmF0ZTsKIAlzd2l0Y2ggKG1vZGUpIHsKLQotCWNhc2UgSERTUE1fQ0xPQ0tfU09VUkNFX0FVVE9TWU5DOgotCQlpZiAoaGRzcG1fZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcG0pICE9IDApIHsKLQkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQTV9DbG9ja01vZGVNYXN0ZXI7Ci0JCQloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fY29udHJvbFJlZ2lzdGVyLAotCQkJCSAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3Rlcik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfMzJLSFo6Ci0JCXJhdGUgPSAzMjAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfNDRfMUtIWjoKLQkJcmF0ZSA9IDQ0MTAwOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80OEtIWjoKLQkJcmF0ZSA9IDQ4MDAwOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF82NEtIWjoKLQkJcmF0ZSA9IDY0MDAwOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF84OF8yS0haOgotCQlyYXRlID0gODgyMDA7Ci0JCWJyZWFrOwotCWNhc2UgSERTUE1fQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzk2S0haOgotCQlyYXRlID0gOTYwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSERTUE1fQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzEyOEtIWjoKLQkJcmF0ZSA9IDEyODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfMTc2XzRLSFo6Ci0JCXJhdGUgPSAxNzY0MDA7Ci0JCWJyZWFrOwotCWNhc2UgSERTUE1fQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzE5MktIWjoKLQkJcmF0ZSA9IDE5MjAwMDsKLQkJYnJlYWs7Ci0KKwljYXNlIDA6CisJCXJhdGUgPSAzMjAwMDsgYnJlYWs7CisJY2FzZSAxOgorCQlyYXRlID0gNDQxMDA7IGJyZWFrOworCWNhc2UgMjoKKwkJcmF0ZSA9IDQ4MDAwOyBicmVhazsKKwljYXNlIDM6CisJCXJhdGUgPSA2NDAwMDsgYnJlYWs7CisJY2FzZSA0OgorCQlyYXRlID0gODgyMDA7IGJyZWFrOworCWNhc2UgNToKKwkJcmF0ZSA9IDk2MDAwOyBicmVhazsKKwljYXNlIDY6CisJCXJhdGUgPSAxMjgwMDA7IGJyZWFrOworCWNhc2UgNzoKKwkJcmF0ZSA9IDE3NjQwMDsgYnJlYWs7CisJY2FzZSA4OgorCQlyYXRlID0gMTkyMDAwOyBicmVhazsKIAlkZWZhdWx0OgotCQlyYXRlID0gNDQxMDA7CisJCXJhdGUgPSA0ODAwMDsKIAl9Ci0JaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUE1fQ2xvY2tNb2RlTWFzdGVyOwotCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9jb250cm9sUmVnaXN0ZXIsIGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyKTsKIAloZHNwbV9zZXRfcmF0ZShoZHNwbSwgcmF0ZSwgMSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTYwLDI1ICsyMzE4LDE2IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwbV9pbmZvX2Nsb2NrX3NvdXJjZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsgIkF1dG9TeW5jIiwKLQkJIkludGVybmFsIDMyLjAga0h6IiwgIkludGVybmFsIDQ0LjEga0h6IiwKLQkJICAgICJJbnRlcm5hbCA0OC4wIGtIeiIsCi0JCSJJbnRlcm5hbCA2NC4wIGtIeiIsICJJbnRlcm5hbCA4OC4yIGtIeiIsCi0JCSAgICAiSW50ZXJuYWwgOTYuMCBrSHoiLAotCQkiSW50ZXJuYWwgMTI4LjAga0h6IiwgIkludGVybmFsIDE3Ni40IGtIeiIsCi0JCSAgICAiSW50ZXJuYWwgMTkyLjAga0h6IgotCX07Ci0KIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMTA7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA5OwogCiAJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPQogCQkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwogCiAJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCi0JICAgICAgIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwkgICAgICAgdGV4dHNfZnJlcVt1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtKzFdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTYxNSwxMzQgKzIzNjQsMzAxIEBACiAJcmV0dXJuIGNoYW5nZTsKIH0KIAorCiAjZGVmaW5lIEhEU1BNX1BSRUZfU1lOQ19SRUYoeG5hbWUsIHhpbmRleCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAotICAubmFtZSA9IHhuYW1lLCBcCi0gIC5pbmRleCA9IHhpbmRleCwgXAotICAuaW5mbyA9IHNuZF9oZHNwbV9pbmZvX3ByZWZfc3luY19yZWYsIFwKLSAgLmdldCA9IHNuZF9oZHNwbV9nZXRfcHJlZl9zeW5jX3JlZiwgXAotICAucHV0ID0gc25kX2hkc3BtX3B1dF9wcmVmX3N5bmNfcmVmIFwKK3suaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkuaW5kZXggPSB4aW5kZXgsIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8XAorCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLCBcCisJLmluZm8gPSBzbmRfaGRzcG1faW5mb19wcmVmX3N5bmNfcmVmLCBcCisJLmdldCA9IHNuZF9oZHNwbV9nZXRfcHJlZl9zeW5jX3JlZiwgXAorCS5wdXQgPSBzbmRfaGRzcG1fcHV0X3ByZWZfc3luY19yZWYgXAogfQogCisKKy8qKgorICogUmV0dXJucyB0aGUgY3VycmVudCBwcmVmZXJyZWQgc3luYyByZWZlcmVuY2Ugc2V0dGluZy4KKyAqIFRoZSBzZW1hbnRpY3Mgb2YgdGhlIHJldHVybiB2YWx1ZSBhcmUgZGVwZW5kaW5nIG9uIHRoZQorICogY2FyZCwgcGxlYXNlIHNlZSB0aGUgY29tbWVudHMgZm9yIGNsYXJpZmljYXRpb24uCisgKiovCiBzdGF0aWMgaW50IGhkc3BtX3ByZWZfc3luY19yZWYoc3RydWN0IGhkc3BtICogaGRzcG0pCiB7Ci0JLyogTm90aWNlIHRoYXQgdGhpcyBsb29rcyBhdCB0aGUgcmVxdWVzdGVkIHN5bmMgc291cmNlLAotCSAgIG5vdCB0aGUgb25lIGFjdHVhbGx5IGluIHVzZS4KLQkgKi8KLQlpZiAoaGRzcG0tPmlzX2FlczMyKSB7CisJc3dpdGNoIChoZHNwbS0+aW9fdHlwZSkgeworCWNhc2UgQUVTMzI6CiAJCXN3aXRjaCAoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9TeW5jUmVmTWFzaykgewotCQkvKiBudW1iZXIgZ2l2ZXMgQUVTIGluZGV4LCBleGNlcHQgZm9yIDAgd2hpY2gKLQkJICAgY29ycmVzcG9uZHMgdG8gV29yZENsb2NrICovCi0JCWNhc2UgMDogcmV0dXJuIDA7Ci0JCWNhc2UgSERTUE1fU3luY1JlZjA6IHJldHVybiAxOwotCQljYXNlIEhEU1BNX1N5bmNSZWYxOiByZXR1cm4gMjsKLQkJY2FzZSBIRFNQTV9TeW5jUmVmMStIRFNQTV9TeW5jUmVmMDogcmV0dXJuIDM7Ci0JCWNhc2UgSERTUE1fU3luY1JlZjI6IHJldHVybiA0OwotCQljYXNlIEhEU1BNX1N5bmNSZWYyK0hEU1BNX1N5bmNSZWYwOiByZXR1cm4gNTsKLQkJY2FzZSBIRFNQTV9TeW5jUmVmMitIRFNQTV9TeW5jUmVmMTogcmV0dXJuIDY7Ci0JCWNhc2UgSERTUE1fU3luY1JlZjIrSERTUE1fU3luY1JlZjErSERTUE1fU3luY1JlZjA6IHJldHVybiA3OwotCQljYXNlIEhEU1BNX1N5bmNSZWYzOiByZXR1cm4gODsKKwkJY2FzZSAwOiByZXR1cm4gMDsgIC8qIFdDICovCisJCWNhc2UgSERTUE1fU3luY1JlZjA6IHJldHVybiAxOyAvKiBBRVMgMSAqLworCQljYXNlIEhEU1BNX1N5bmNSZWYxOiByZXR1cm4gMjsgLyogQUVTIDIgKi8KKwkJY2FzZSBIRFNQTV9TeW5jUmVmMStIRFNQTV9TeW5jUmVmMDogcmV0dXJuIDM7IC8qIEFFUyAzICovCisJCWNhc2UgSERTUE1fU3luY1JlZjI6IHJldHVybiA0OyAvKiBBRVMgNCAqLworCQljYXNlIEhEU1BNX1N5bmNSZWYyK0hEU1BNX1N5bmNSZWYwOiByZXR1cm4gNTsgLyogQUVTIDUgKi8KKwkJY2FzZSBIRFNQTV9TeW5jUmVmMitIRFNQTV9TeW5jUmVmMTogcmV0dXJuIDY7IC8qIEFFUyA2ICovCisJCWNhc2UgSERTUE1fU3luY1JlZjIrSERTUE1fU3luY1JlZjErSERTUE1fU3luY1JlZjA6CisJCQkJCQkgICAgcmV0dXJuIDc7IC8qIEFFUyA3ICovCisJCWNhc2UgSERTUE1fU3luY1JlZjM6IHJldHVybiA4OyAvKiBBRVMgOCAqLworCQljYXNlIEhEU1BNX1N5bmNSZWYzK0hEU1BNX1N5bmNSZWYwOiByZXR1cm4gOTsgLyogVENPICovCiAJCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUE1fU3luY1JlZk1hc2spIHsKLQkJY2FzZSBIRFNQTV9TeW5jUmVmX1dvcmQ6Ci0JCQlyZXR1cm4gSERTUE1fU1lOQ19GUk9NX1dPUkQ7Ci0JCWNhc2UgSERTUE1fU3luY1JlZl9NQURJOgotCQkJcmV0dXJuIEhEU1BNX1NZTkNfRlJPTV9NQURJOworCQlicmVhazsKKworCWNhc2UgTUFESToKKwljYXNlIE1BRElmYWNlOgorCQlpZiAoaGRzcG0tPnRjbykgeworCQkJc3dpdGNoIChoZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BNX1N5bmNSZWZNYXNrKSB7CisJCQljYXNlIDA6IHJldHVybiAwOyAgLyogV0MgKi8KKwkJCWNhc2UgSERTUE1fU3luY1JlZjA6IHJldHVybiAxOyAgLyogTUFESSAqLworCQkJY2FzZSBIRFNQTV9TeW5jUmVmMTogcmV0dXJuIDI7ICAvKiBUQ08gKi8KKwkJCWNhc2UgSERTUE1fU3luY1JlZjErSERTUE1fU3luY1JlZjA6CisJCQkJCSAgICAgcmV0dXJuIDM7ICAvKiBTWU5DX0lOICovCisJCQl9CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUE1fU3luY1JlZk1hc2spIHsKKwkJCWNhc2UgMDogcmV0dXJuIDA7ICAvKiBXQyAqLworCQkJY2FzZSBIRFNQTV9TeW5jUmVmMDogcmV0dXJuIDE7ICAvKiBNQURJICovCisJCQljYXNlIEhEU1BNX1N5bmNSZWYxK0hEU1BNX1N5bmNSZWYwOgorCQkJCQkgICAgIHJldHVybiAyOyAgLyogU1lOQ19JTiAqLworCQkJfQogCQl9CisJCWJyZWFrOworCisJY2FzZSBSYXlEQVQ6CisJCWlmIChoZHNwbS0+dGNvKSB7CisJCQlzd2l0Y2ggKChoZHNwbS0+c2V0dGluZ3NfcmVnaXN0ZXIgJgorCQkJCUhEU1BNX2MwX1N5bmNSZWZNYXNrKSAvIEhEU1BNX2MwX1N5bmNSZWYwKSB7CisJCQljYXNlIDA6IHJldHVybiAwOyAgLyogV0MgKi8KKwkJCWNhc2UgMzogcmV0dXJuIDE7ICAvKiBBREFUIDEgKi8KKwkJCWNhc2UgNDogcmV0dXJuIDI7ICAvKiBBREFUIDIgKi8KKwkJCWNhc2UgNTogcmV0dXJuIDM7ICAvKiBBREFUIDMgKi8KKwkJCWNhc2UgNjogcmV0dXJuIDQ7ICAvKiBBREFUIDQgKi8KKwkJCWNhc2UgMTogcmV0dXJuIDU7ICAvKiBBRVMgKi8KKwkJCWNhc2UgMjogcmV0dXJuIDY7ICAvKiBTUERJRiAqLworCQkJY2FzZSA5OiByZXR1cm4gNzsgIC8qIFRDTyAqLworCQkJY2FzZSAxMDogcmV0dXJuIDg7IC8qIFNZTkNfSU4gKi8KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoKGhkc3BtLT5zZXR0aW5nc19yZWdpc3RlciAmCisJCQkJSERTUE1fYzBfU3luY1JlZk1hc2spIC8gSERTUE1fYzBfU3luY1JlZjApIHsKKwkJCWNhc2UgMDogcmV0dXJuIDA7ICAvKiBXQyAqLworCQkJY2FzZSAzOiByZXR1cm4gMTsgIC8qIEFEQVQgMSAqLworCQkJY2FzZSA0OiByZXR1cm4gMjsgIC8qIEFEQVQgMiAqLworCQkJY2FzZSA1OiByZXR1cm4gMzsgIC8qIEFEQVQgMyAqLworCQkJY2FzZSA2OiByZXR1cm4gNDsgIC8qIEFEQVQgNCAqLworCQkJY2FzZSAxOiByZXR1cm4gNTsgIC8qIEFFUyAqLworCQkJY2FzZSAyOiByZXR1cm4gNjsgIC8qIFNQRElGICovCisJCQljYXNlIDEwOiByZXR1cm4gNzsgLyogU1lOQ19JTiAqLworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIEFJTzoKKwkJaWYgKGhkc3BtLT50Y28pIHsKKwkJCXN3aXRjaCAoKGhkc3BtLT5zZXR0aW5nc19yZWdpc3RlciAmCisJCQkJSERTUE1fYzBfU3luY1JlZk1hc2spIC8gSERTUE1fYzBfU3luY1JlZjApIHsKKwkJCWNhc2UgMDogcmV0dXJuIDA7ICAvKiBXQyAqLworCQkJY2FzZSAzOiByZXR1cm4gMTsgIC8qIEFEQVQgKi8KKwkJCWNhc2UgMTogcmV0dXJuIDI7ICAvKiBBRVMgKi8KKwkJCWNhc2UgMjogcmV0dXJuIDM7ICAvKiBTUERJRiAqLworCQkJY2FzZSA5OiByZXR1cm4gNDsgIC8qIFRDTyAqLworCQkJY2FzZSAxMDogcmV0dXJuIDU7IC8qIFNZTkNfSU4gKi8KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoKGhkc3BtLT5zZXR0aW5nc19yZWdpc3RlciAmCisJCQkJSERTUE1fYzBfU3luY1JlZk1hc2spIC8gSERTUE1fYzBfU3luY1JlZjApIHsKKwkJCWNhc2UgMDogcmV0dXJuIDA7ICAvKiBXQyAqLworCQkJY2FzZSAzOiByZXR1cm4gMTsgIC8qIEFEQVQgKi8KKwkJCWNhc2UgMTogcmV0dXJuIDI7ICAvKiBBRVMgKi8KKwkJCWNhc2UgMjogcmV0dXJuIDM7ICAvKiBTUERJRiAqLworCQkJY2FzZSAxMDogcmV0dXJuIDQ7IC8qIFNZTkNfSU4gKi8KKwkJCX0KKwkJfQorCisJCWJyZWFrOwogCX0KIAotCXJldHVybiBIRFNQTV9TWU5DX0ZST01fV09SRDsKKwlyZXR1cm4gLTE7CiB9CiAKKworLyoqCisgKiBTZXQgdGhlIHByZWZlcnJlZCBzeW5jIHJlZmVyZW5jZSB0byA8cHJlZj4uIFRoZSBzZW1hbnRpY3MKKyAqIG9mIDxwcmVmPiBhcmUgZGVwZW5kaW5nIG9uIHRoZSBjYXJkIHR5cGUsIHNlZSB0aGUgY29tbWVudHMKKyAqIGZvciBjbGFyaWZpY2F0aW9uLgorICoqLwogc3RhdGljIGludCBoZHNwbV9zZXRfcHJlZl9zeW5jX3JlZihzdHJ1Y3QgaGRzcG0gKiBoZHNwbSwgaW50IHByZWYpCiB7Ci0JaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfkhEU1BNX1N5bmNSZWZNYXNrOworCWludCBwID0gMDsKIAotCWlmIChoZHNwbS0+aXNfYWVzMzIpIHsKKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBBRVMzMjoKKwkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfkhEU1BNX1N5bmNSZWZNYXNrOwogCQlzd2l0Y2ggKHByZWYpIHsKLQkJY2FzZSAwOgotCQkgICAgICAgaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgfD0gMDsKLQkJICAgICAgIGJyZWFrOwotCQljYXNlIDE6Ci0JCSAgICAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMDsKLQkJICAgICAgIGJyZWFrOwotCQljYXNlIDI6Ci0JCSAgICAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMTsKLQkJICAgICAgIGJyZWFrOwotCQljYXNlIDM6Ci0JCSAgICAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMStIRFNQTV9TeW5jUmVmMDsKLQkJICAgICAgIGJyZWFrOwotCQljYXNlIDQ6Ci0JCSAgICAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMjsKLQkJICAgICAgIGJyZWFrOwotCQljYXNlIDU6Ci0JCSAgICAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMitIRFNQTV9TeW5jUmVmMDsKLQkJICAgICAgIGJyZWFrOwotCQljYXNlIDY6Ci0JCSAgICAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMitIRFNQTV9TeW5jUmVmMTsKLQkJICAgICAgIGJyZWFrOwotCQljYXNlIDc6Ci0JCSAgICAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PQotCQkJICAgICAgIEhEU1BNX1N5bmNSZWYyK0hEU1BNX1N5bmNSZWYxK0hEU1BNX1N5bmNSZWYwOwotCQkgICAgICAgYnJlYWs7Ci0JCWNhc2UgODoKLQkJICAgICAgIGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX1N5bmNSZWYzOwotCQkgICAgICAgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCSAgICAgICByZXR1cm4gLTE7Ci0JCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKHByZWYpIHsKLQkJY2FzZSBIRFNQTV9TWU5DX0ZST01fTUFESToKLQkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX1N5bmNSZWZfTUFESTsKKwkJY2FzZSAwOiAvKiBXQyAgKi8KIAkJCWJyZWFrOwotCQljYXNlIEhEU1BNX1NZTkNfRlJPTV9XT1JEOgotCQkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUE1fU3luY1JlZl9Xb3JkOworCQljYXNlIDE6IC8qIEFFUyAxICovCisJCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMDsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIEFFUyAyICovCisJCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMTsKKwkJCWJyZWFrOworCQljYXNlIDM6IC8qIEFFUyAzICovCisJCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PQorCQkJCUhEU1BNX1N5bmNSZWYxK0hEU1BNX1N5bmNSZWYwOworCQkJYnJlYWs7CisJCWNhc2UgNDogLyogQUVTIDQgKi8KKwkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX1N5bmNSZWYyOworCQkJYnJlYWs7CisJCWNhc2UgNTogLyogQUVTIDUgKi8KKwkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9CisJCQkJSERTUE1fU3luY1JlZjIrSERTUE1fU3luY1JlZjA7CisJCQlicmVhazsKKwkJY2FzZSA2OiAvKiBBRVMgNiAqLworCQkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgfD0KKwkJCQlIRFNQTV9TeW5jUmVmMitIRFNQTV9TeW5jUmVmMTsKKwkJCWJyZWFrOworCQljYXNlIDc6IC8qIEFFUyA3ICovCisJCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PQorCQkJCUhEU1BNX1N5bmNSZWYyK0hEU1BNX1N5bmNSZWYxK0hEU1BNX1N5bmNSZWYwOworCQkJYnJlYWs7CisJCWNhc2UgODogLyogQUVTIDggKi8KKwkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX1N5bmNSZWYzOworCQkJYnJlYWs7CisJCWNhc2UgOTogLyogVENPICovCisJCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PQorCQkJCUhEU1BNX1N5bmNSZWYzK0hEU1BNX1N5bmNSZWYwOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLTE7CiAJCX0KKworCQlicmVhazsKKworCWNhc2UgTUFESToKKwljYXNlIE1BRElmYWNlOgorCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmPSB+SERTUE1fU3luY1JlZk1hc2s7CisJCWlmIChoZHNwbS0+dGNvKSB7CisJCQlzd2l0Y2ggKHByZWYpIHsKKwkJCWNhc2UgMDogLyogV0MgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMTogLyogTUFESSAqLworCQkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX1N5bmNSZWYwOworCQkJCWJyZWFrOworCQkJY2FzZSAyOiAvKiBUQ08gKi8KKwkJCQloZHNwbS0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQTV9TeW5jUmVmMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzogLyogU1lOQ19JTiAqLworCQkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9CisJCQkJCUhEU1BNX1N5bmNSZWYwK0hEU1BNX1N5bmNSZWYxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKHByZWYpIHsKKwkJCWNhc2UgMDogLyogV0MgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMTogLyogTUFESSAqLworCQkJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX1N5bmNSZWYwOworCQkJCWJyZWFrOworCQkJY2FzZSAyOiAvKiBTWU5DX0lOICovCisJCQkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgfD0KKwkJCQkJSERTUE1fU3luY1JlZjArSERTUE1fU3luY1JlZjE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBSYXlEQVQ6CisJCWlmIChoZHNwbS0+dGNvKSB7CisJCQlzd2l0Y2ggKHByZWYpIHsKKwkJCWNhc2UgMDogcCA9IDA7IGJyZWFrOyAgLyogV0MgKi8KKwkJCWNhc2UgMTogcCA9IDM7IGJyZWFrOyAgLyogQURBVCAxICovCisJCQljYXNlIDI6IHAgPSA0OyBicmVhazsgIC8qIEFEQVQgMiAqLworCQkJY2FzZSAzOiBwID0gNTsgYnJlYWs7ICAvKiBBREFUIDMgKi8KKwkJCWNhc2UgNDogcCA9IDY7IGJyZWFrOyAgLyogQURBVCA0ICovCisJCQljYXNlIDU6IHAgPSAxOyBicmVhazsgIC8qIEFFUyAqLworCQkJY2FzZSA2OiBwID0gMjsgYnJlYWs7ICAvKiBTUERJRiAqLworCQkJY2FzZSA3OiBwID0gOTsgYnJlYWs7ICAvKiBUQ08gKi8KKwkJCWNhc2UgODogcCA9IDEwOyBicmVhazsgLyogU1lOQ19JTiAqLworCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9IGVsc2UgeworCQkJc3dpdGNoIChwcmVmKSB7CisJCQljYXNlIDA6IHAgPSAwOyBicmVhazsgIC8qIFdDICovCisJCQljYXNlIDE6IHAgPSAzOyBicmVhazsgIC8qIEFEQVQgMSAqLworCQkJY2FzZSAyOiBwID0gNDsgYnJlYWs7ICAvKiBBREFUIDIgKi8KKwkJCWNhc2UgMzogcCA9IDU7IGJyZWFrOyAgLyogQURBVCAzICovCisJCQljYXNlIDQ6IHAgPSA2OyBicmVhazsgIC8qIEFEQVQgNCAqLworCQkJY2FzZSA1OiBwID0gMTsgYnJlYWs7ICAvKiBBRVMgKi8KKwkJCWNhc2UgNjogcCA9IDI7IGJyZWFrOyAgLyogU1BESUYgKi8KKwkJCWNhc2UgNzogcCA9IDEwOyBicmVhazsgLyogU1lOQ19JTiAqLworCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBBSU86CisJCWlmIChoZHNwbS0+dGNvKSB7CisJCQlzd2l0Y2ggKHByZWYpIHsKKwkJCWNhc2UgMDogcCA9IDA7IGJyZWFrOyAgLyogV0MgKi8KKwkJCWNhc2UgMTogcCA9IDM7IGJyZWFrOyAgLyogQURBVCAqLworCQkJY2FzZSAyOiBwID0gMTsgYnJlYWs7ICAvKiBBRVMgKi8KKwkJCWNhc2UgMzogcCA9IDI7IGJyZWFrOyAgLyogU1BESUYgKi8KKwkJCWNhc2UgNDogcCA9IDk7IGJyZWFrOyAgLyogVENPICovCisJCQljYXNlIDU6IHAgPSAxMDsgYnJlYWs7IC8qIFNZTkNfSU4gKi8KKwkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAocHJlZikgeworCQkJY2FzZSAwOiBwID0gMDsgYnJlYWs7ICAvKiBXQyAqLworCQkJY2FzZSAxOiBwID0gMzsgYnJlYWs7ICAvKiBBREFUICovCisJCQljYXNlIDI6IHAgPSAxOyBicmVhazsgIC8qIEFFUyAqLworCQkJY2FzZSAzOiBwID0gMjsgYnJlYWs7ICAvKiBTUERJRiAqLworCQkJY2FzZSA0OiBwID0gMTA7IGJyZWFrOyAvKiBTWU5DX0lOICovCisJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJYnJlYWs7CiAJfQotCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9jb250cm9sUmVnaXN0ZXIsIGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyKTsKKworCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwljYXNlIFJheURBVDoKKwljYXNlIEFJTzoKKwkJaGRzcG0tPnNldHRpbmdzX3JlZ2lzdGVyICY9IH5IRFNQTV9jMF9TeW5jUmVmTWFzazsKKwkJaGRzcG0tPnNldHRpbmdzX3JlZ2lzdGVyIHw9IEhEU1BNX2MwX1N5bmNSZWYwICogcDsKKwkJaGRzcG1fd3JpdGUoaGRzcG0sIEhEU1BNX1dSX1NFVFRJTkdTLCBoZHNwbS0+c2V0dGluZ3NfcmVnaXN0ZXIpOworCQlicmVhazsKKworCWNhc2UgTUFESToKKwljYXNlIE1BRElmYWNlOgorCWNhc2UgQUVTMzI6CisJCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9jb250cm9sUmVnaXN0ZXIsCisJCQkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIpOworCX0KKwogCXJldHVybiAwOwogfQogCisKIHN0YXRpYyBpbnQgc25kX2hkc3BtX2luZm9fcHJlZl9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JaWYgKGhkc3BtLT5pc19hZXMzMikgewotCQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsgIldvcmQiLCAiQUVTMSIsICJBRVMyIiwgIkFFUzMiLAotCQkJIkFFUzQiLCAiQUVTNSIsCSJBRVM2IiwgIkFFUzciLCAiQUVTOCIgfTsKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gaGRzcG0tPnRleHRzX2F1dG9zeW5jX2l0ZW1zOwogCi0JCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCQl1aW5mby0+Y291bnQgPSAxOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0KKwkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKIAotCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDk7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJCQloZHNwbS0+dGV4dHNfYXV0b3N5bmNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwogCi0JCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49Ci0JCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKLQkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPQotCQkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKLQkJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCi0JCQkJdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCX0gZWxzZSB7Ci0JCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyAiV29yZCIsICJNQURJIiB9OwotCi0JCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCQl1aW5mby0+Y291bnQgPSAxOwotCi0JCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMjsKLQotCQlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PQotCQkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCi0JCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0KLQkJCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7Ci0JCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAotCQkJCXRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NTAsMzIgKzI2NjYsNDEgQEAKIAkJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgcHNmID0gaGRzcG1fcHJlZl9zeW5jX3JlZihoZHNwbSk7CiAKLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcG1fcHJlZl9zeW5jX3JlZihoZHNwbSk7Ci0JcmV0dXJuIDA7CisJaWYgKHBzZiA+PSAwKSB7CisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBwc2Y7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBzbmRfaGRzcG1fcHV0X3ByZWZfc3luY19yZWYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JaW50IGNoYW5nZSwgbWF4OwotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQltYXggPSBoZHNwbS0+aXNfYWVzMzIgPyA5IDogMjsKKwlpbnQgdmFsLCBjaGFuZ2UgPSAwOwogCiAJaWYgKCFzbmRfaGRzcG1fdXNlX2lzX2V4Y2x1c2l2ZShoZHNwbSkpCiAJCXJldHVybiAtRUJVU1k7CiAKLQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICUgbWF4OworCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisKKwlpZiAodmFsIDwgMCkKKwkJdmFsID0gMDsKKwllbHNlIGlmICh2YWwgPj0gaGRzcG0tPnRleHRzX2F1dG9zeW5jX2l0ZW1zKQorCQl2YWwgPSBoZHNwbS0+dGV4dHNfYXV0b3N5bmNfaXRlbXMtMTsKIAogCXNwaW5fbG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKLQljaGFuZ2UgPSAoaW50KSB2YWwgIT0gaGRzcG1fcHJlZl9zeW5jX3JlZihoZHNwbSk7Ci0JaGRzcG1fc2V0X3ByZWZfc3luY19yZWYoaGRzcG0sIHZhbCk7CisJaWYgKHZhbCAhPSBoZHNwbV9wcmVmX3N5bmNfcmVmKGhkc3BtKSkKKwkJY2hhbmdlID0gKDAgPT0gaGRzcG1fc2V0X3ByZWZfc3luY19yZWYoaGRzcG0sIHZhbCkpID8gMSA6IDA7CisKIAlzcGluX3VubG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCisKICNkZWZpbmUgSERTUE1fQVVUT1NZTkNfUkVGKHhuYW1lLCB4aW5kZXgpIFwKIHsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKICAgLm5hbWUgPSB4bmFtZSwgXApAQCAtMTc4NSwxOCArMjcxMCwxOCBAQAogICAuZ2V0ID0gc25kX2hkc3BtX2dldF9hdXRvc3luY19yZWYsIFwKIH0KIAotc3RhdGljIGludCBoZHNwbV9hdXRvc3luY19yZWYoc3RydWN0IGhkc3BtICogaGRzcG0pCitzdGF0aWMgaW50IGhkc3BtX2F1dG9zeW5jX3JlZihzdHJ1Y3QgaGRzcG0gKmhkc3BtKQogewotCWlmIChoZHNwbS0+aXNfYWVzMzIpIHsKKwlpZiAoQUVTMzIgPT0gaGRzcG0tPmlvX3R5cGUpIHsKIAkJdW5zaWduZWQgaW50IHN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKLQkJdW5zaWduZWQgaW50IHN5bmNyZWYgPSAoc3RhdHVzID4+IEhEU1BNX0FFUzMyX3N5bmNyZWZfYml0KSAmCi0JCQkweEY7CisJCXVuc2lnbmVkIGludCBzeW5jcmVmID0KKwkJCShzdGF0dXMgPj4gSERTUE1fQUVTMzJfc3luY3JlZl9iaXQpICYgMHhGOwogCQlpZiAoc3luY3JlZiA9PSAwKQogCQkJcmV0dXJuIEhEU1BNX0FFUzMyX0FVVE9TWU5DX0ZST01fV09SRDsKIAkJaWYgKHN5bmNyZWYgPD0gOCkKIAkJCXJldHVybiBzeW5jcmVmOwogCQlyZXR1cm4gSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9OT05FOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChNQURJID09IGhkc3BtLT5pb190eXBlKSB7CiAJCS8qIFRoaXMgbG9va3MgYXQgdGhlIGF1dG9zeW5jIHNlbGVjdGVkIHN5bmMgcmVmZXJlbmNlICovCiAJCXVuc2lnbmVkIGludCBzdGF0dXMyID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fc3RhdHVzUmVnaXN0ZXIyKTsKIApAQCAtMTgwNSwyMiArMjczMCwyNyBAQAogCQkJcmV0dXJuIEhEU1BNX0FVVE9TWU5DX0ZST01fV09SRDsKIAkJY2FzZSBIRFNQTV9TZWxTeW5jUmVmX01BREk6CiAJCQlyZXR1cm4gSERTUE1fQVVUT1NZTkNfRlJPTV9NQURJOworCQljYXNlIEhEU1BNX1NlbFN5bmNSZWZfVENPOgorCQkJcmV0dXJuIEhEU1BNX0FVVE9TWU5DX0ZST01fVENPOworCQljYXNlIEhEU1BNX1NlbFN5bmNSZWZfU3luY0luOgorCQkJcmV0dXJuIEhEU1BNX0FVVE9TWU5DX0ZST01fU1lOQ19JTjsKIAkJY2FzZSBIRFNQTV9TZWxTeW5jUmVmX05WQUxJRDoKIAkJCXJldHVybiBIRFNQTV9BVVRPU1lOQ19GUk9NX05PTkU7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCXJldHVybiAwOwogCX0KKwlyZXR1cm4gMDsKIH0KIAorCiBzdGF0aWMgaW50IHNuZF9oZHNwbV9pbmZvX2F1dG9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JaWYgKGhkc3BtLT5pc19hZXMzMikgeworCWlmIChBRVMzMiA9PSBoZHNwbS0+aW9fdHlwZSkgewogCQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsgIldvcmRDbG9jayIsICJBRVMxIiwgIkFFUzIiLCAiQUVTMyIsCiAJCQkiQUVTNCIsCSJBRVM1IiwgIkFFUzYiLCAiQUVTNyIsICJBRVM4IiwgIk5vbmUifTsKIApAQCAtMTgzMywxNCArMjc2MywxNSBAQAogCQkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKIAkJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCiAJCQkJdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCX0gZWxzZSB7Ci0JCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyAiV29yZENsb2NrIiwgIk1BREkiLCAiTm9uZSIgfTsKKwl9IGVsc2UgaWYgKE1BREkgPT0gaGRzcG0tPmlvX3R5cGUpIHsKKwkJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IldvcmQgQ2xvY2siLCAiTUFESSIsICJUQ08iLAorCQkJIlN5bmMgSW4iLCAiTm9uZSIgfTsKIAogCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAkJdWluZm8tPmNvdW50ID0gMTsKLQkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDU7CiAJCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49Ci0JCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKIAkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPQogCQkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKIAkJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCkBAIC0xODU4LDYgKzI3ODksNyBAQAogCXJldHVybiAwOwogfQogCisKICNkZWZpbmUgSERTUE1fTElORV9PVVQoeG5hbWUsIHhpbmRleCkgXAogeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAogICAubmFtZSA9IHhuYW1lLCBcCkBAIC0xOTE0LDYgKzI4NDYsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKKwogI2RlZmluZSBIRFNQTV9UWF82NCh4bmFtZSwgeGluZGV4KSBcCiB7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAgIC5uYW1lID0geG5hbWUsIFwKQEAgLTE5NjksNiArMjkwMiw3IEBACiAJcmV0dXJuIGNoYW5nZTsKIH0KIAorCiAjZGVmaW5lIEhEU1BNX0NfVE1TKHhuYW1lLCB4aW5kZXgpIFwKIHsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKICAgLm5hbWUgPSB4bmFtZSwgXApAQCAtMjAyNCw2ICsyOTU4LDcgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCisKICNkZWZpbmUgSERTUE1fU0FGRV9NT0RFKHhuYW1lLCB4aW5kZXgpIFwKIHsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKICAgLm5hbWUgPSB4bmFtZSwgXApAQCAtMjA3OSw2ICszMDE0LDcgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCisKICNkZWZpbmUgSERTUE1fRU1QSEFTSVMoeG5hbWUsIHhpbmRleCkgXAogeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAogICAubmFtZSA9IHhuYW1lLCBcCkBAIC0yMTM0LDYgKzMwNzAsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKKwogI2RlZmluZSBIRFNQTV9ET0xCWSh4bmFtZSwgeGluZGV4KSBcCiB7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAgIC5uYW1lID0geG5hbWUsIFwKQEAgLTIxODksNiArMzEyNiw3IEBACiAJcmV0dXJuIGNoYW5nZTsKIH0KIAorCiAjZGVmaW5lIEhEU1BNX1BST0ZFU1NJT05BTCh4bmFtZSwgeGluZGV4KSBcCiB7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAgIC5uYW1lID0geG5hbWUsIFwKQEAgLTIzMTUsNiArMzI1Myw3IEBACiAJcmV0dXJuIGNoYW5nZTsKIH0KIAorCiAjZGVmaW5lIEhEU1BNX0RTX1dJUkUoeG5hbWUsIHhpbmRleCkgXAogeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAogICAubmFtZSA9IHhuYW1lLCBcCkBAIC0yMzg2LDYgKzMzMjUsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKKwogI2RlZmluZSBIRFNQTV9RU19XSVJFKHhuYW1lLCB4aW5kZXgpIFwKIHsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKICAgLm5hbWUgPSB4bmFtZSwgXApAQCAtMjQ3MiwxNSArMzQxMiw2IEBACiAJcmV0dXJuIGNoYW5nZTsKIH0KIAotLyogICAgICAgICAgIFNpbXBsZSBNaXhlcgotICBkZXByZWNhdGVkIHNpbmNlIHRvIG11Y2ggZmFkZXJzID8/PwotICBNSVhFUiBpbnRlcmZhY2Ugc2F5cyBvdXRwdXQgKHNvdXJjZSwgZGVzdGluYXRpb24sIHZhbHVlKQotICAgd2hlcmUgc291cmNlID4gTUFYX2NoYW5uZWxzIGFyZSBwbGF5YmFjayBjaGFubmVscyAKLSAgIG9uIE1BRElDQVJEIAotICAtIHBsYXliYWNrIG1peGVyIG1hdHJpeDogW2NoYW5uZWxvdXQrNjRdIFtvdXRwdXRdIFt2YWx1ZV0KLSAgLSBpbnB1dCh0aHJ1KSBtaXhlciBtYXRyaXg6IFtjaGFubmVsaW5dIFtvdXRwdXRdIFt2YWx1ZV0KLSAgKGJldHRlciBkbyAyIGtvbnRyb2xzIGZvciBzZXBhcmF0aW9uID8pCi0qLwogCiAjZGVmaW5lIEhEU1BNX01JWEVSKHhuYW1lLCB4aW5kZXgpIFwKIHsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfSFdERVAsIFwKQEAgLTI1ODYsNyArMzUxNyw3IEBACiAKIC8qIFRoZSBzaW1wbGUgbWl4ZXIgY29udHJvbChzKSBwcm92aWRlIGdhaW4gY29udHJvbCBmb3IgdGhlCiAgICBiYXNpYyAxOjEgbWFwcGluZ3Mgb2YgcGxheWJhY2sgc3RyZWFtcyB0byBvdXRwdXQKLSAgIHN0cmVhbXMuIAorICAgc3RyZWFtcy4KICovCiAKICNkZWZpbmUgSERTUE1fUExBWUJBQ0tfTUlYRVIgXApAQCAtMjYwNCw3ICszNTM1LDcgQEAKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gNjU1MzY7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gNjQ7CiAJdWluZm8tPnZhbHVlLmludGVnZXIuc3RlcCA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjE0LDI4ICszNTQ1LDE3IEBACiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbm5lbDsKLQlpbnQgbWFwcGVkX2NoYW5uZWw7CiAKIAljaGFubmVsID0gdWNvbnRyb2wtPmlkLmluZGV4IC0gMTsKIAogCWlmIChzbmRfQlVHX09OKGNoYW5uZWwgPCAwIHx8IGNoYW5uZWwgPj0gSERTUE1fTUFYX0NIQU5ORUxTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltYXBwZWRfY2hhbm5lbCA9IGhkc3BtLT5jaGFubmVsX21hcFtjaGFubmVsXTsKLQlpZiAobWFwcGVkX2NoYW5uZWwgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXNwaW5fbG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9Ci0JICAgIGhkc3BtX3JlYWRfcGJfZ2FpbihoZHNwbSwgbWFwcGVkX2NoYW5uZWwsIG1hcHBlZF9jaGFubmVsKTsKKwkgIChoZHNwbV9yZWFkX3BiX2dhaW4oaGRzcG0sIGNoYW5uZWwsIGNoYW5uZWwpKjY0KS9VTklUWV9HQUlOOwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcG0tPmxvY2spOwogCi0JLyoKLQlzbmRfcHJpbnRkZCgiZ2V0IHBiIG1peGVyIGluZGV4ICVkLCBjaGFubmVsICVkLCBtYXBwZWRfY2hhbm5lbCAlZCwgIgotCQkgICAgInZhbHVlICVkXG4iLAotCQkgICAgdWNvbnRyb2wtPmlkLmluZGV4LCBjaGFubmVsLCBtYXBwZWRfY2hhbm5lbCwKLQkJICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsgCi0JKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY0NSw3ICszNTY1LDYgQEAKIAlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IGNoYW5uZWw7Ci0JaW50IG1hcHBlZF9jaGFubmVsOwogCWludCBnYWluOwogCiAJaWYgKCFzbmRfaGRzcG1fdXNlX2lzX2V4Y2x1c2l2ZShoZHNwbSkpCkBAIC0yNjU2LDU5ICszNTc1LDYwIEBACiAJaWYgKHNuZF9CVUdfT04oY2hhbm5lbCA8IDAgfHwgY2hhbm5lbCA+PSBIRFNQTV9NQVhfQ0hBTk5FTFMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1hcHBlZF9jaGFubmVsID0gaGRzcG0tPmNoYW5uZWxfbWFwW2NoYW5uZWxdOwotCWlmIChtYXBwZWRfY2hhbm5lbCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZ2FpbiA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCWdhaW4gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSpVTklUWV9HQUlOLzY0OwogCiAJc3Bpbl9sb2NrX2lycSgmaGRzcG0tPmxvY2spOwogCWNoYW5nZSA9Ci0JICAgIGdhaW4gIT0gaGRzcG1fcmVhZF9wYl9nYWluKGhkc3BtLCBtYXBwZWRfY2hhbm5lbCwKLQkJCQkgICAgICAgbWFwcGVkX2NoYW5uZWwpOworCSAgICBnYWluICE9IGhkc3BtX3JlYWRfcGJfZ2FpbihoZHNwbSwgY2hhbm5lbCwKKwkJCQkgICAgICAgY2hhbm5lbCk7CiAJaWYgKGNoYW5nZSkKLQkJaGRzcG1fd3JpdGVfcGJfZ2FpbihoZHNwbSwgbWFwcGVkX2NoYW5uZWwsIG1hcHBlZF9jaGFubmVsLAorCQloZHNwbV93cml0ZV9wYl9nYWluKGhkc3BtLCBjaGFubmVsLCBjaGFubmVsLAogCQkJCSAgICBnYWluKTsKIAlzcGluX3VubG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCi0jZGVmaW5lIEhEU1BNX1dDX1NZTkNfQ0hFQ0soeG5hbWUsIHhpbmRleCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAotICAubmFtZSA9IHhuYW1lLCBcCi0gIC5pbmRleCA9IHhpbmRleCwgXAotICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsIFwKLSAgLmluZm8gPSBzbmRfaGRzcG1faW5mb19zeW5jX2NoZWNrLCBcCi0gIC5nZXQgPSBzbmRfaGRzcG1fZ2V0X3djX3N5bmNfY2hlY2sgXAorI2RlZmluZSBIRFNQTV9TWU5DX0NIRUNLKHhuYW1lLCB4aW5kZXgpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLnByaXZhdGVfdmFsdWUgPSB4aW5kZXgsIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsIFwKKwkuaW5mbyA9IHNuZF9oZHNwbV9pbmZvX3N5bmNfY2hlY2ssIFwKKwkuZ2V0ID0gc25kX2hkc3BtX2dldF9zeW5jX2NoZWNrIFwKIH0KIAorCiBzdGF0aWMgaW50IHNuZF9oZHNwbV9pbmZvX3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyAiTm8gTG9jayIsICJMb2NrIiwgIlN5bmMiIH07CisJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7ICJObyBMb2NrIiwgIkxvY2siLCAiU3luYyIsICJOL0EiIH07CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA0OwogCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0KLQkJICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKwkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKIAlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKLQkgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCQkJdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhkc3BtX3djX3N5bmNfY2hlY2soc3RydWN0IGhkc3BtICogaGRzcG0pCitzdGF0aWMgaW50IGhkc3BtX3djX3N5bmNfY2hlY2soc3RydWN0IGhkc3BtICpoZHNwbSkKIHsKLQlpZiAoaGRzcG0tPmlzX2FlczMyKSB7Ci0JCWludCBzdGF0dXMgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3Rlcik7Ci0JCWlmIChzdGF0dXMgJiBIRFNQTV9BRVMzMl93Y0xvY2spIHsKLQkJCS8qIEkgZG9uJ3Qga25vdyBob3cgdG8gZGlmZmVyZW5jaWF0ZSBzeW5jIGZyb20gbG9jay4KLQkJCSAgIERvaW5nIGFzIGlmIHN5bmMgZm9yIG5vdyAqLworCWludCBzdGF0dXMsIHN0YXR1czI7CisKKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBBRVMzMjoKKwkJc3RhdHVzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fc3RhdHVzUmVnaXN0ZXIpOworCQlpZiAoc3RhdHVzICYgSERTUE1fd2NTeW5jKQogCQkJcmV0dXJuIDI7Ci0JCX0KKwkJZWxzZSBpZiAoc3RhdHVzICYgSERTUE1fd2NMb2NrKQorCQkJcmV0dXJuIDE7CiAJCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCWludCBzdGF0dXMyID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fc3RhdHVzUmVnaXN0ZXIyKTsKKwkJYnJlYWs7CisKKwljYXNlIE1BREk6CisJCXN0YXR1czIgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3RlcjIpOwogCQlpZiAoc3RhdHVzMiAmIEhEU1BNX3djTG9jaykgewogCQkJaWYgKHN0YXR1czIgJiBIRFNQTV93Y1N5bmMpCiAJCQkJcmV0dXJuIDI7CkBAIC0yNzE2LDI5ICszNjM2LDMwIEBACiAJCQkJcmV0dXJuIDE7CiAJCX0KIAkJcmV0dXJuIDA7CisJCWJyZWFrOworCisJY2FzZSBSYXlEQVQ6CisJY2FzZSBBSU86CisJCXN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKKworCQlpZiAoc3RhdHVzICYgMHgyMDAwMDAwKQorCQkJcmV0dXJuIDI7CisJCWVsc2UgaWYgKHN0YXR1cyAmIDB4MTAwMDAwMCkKKwkJCXJldHVybiAxOworCQlyZXR1cm4gMDsKKworCQlicmVhazsKKworCWNhc2UgTUFESWZhY2U6CisJCWJyZWFrOwogCX0KLX0KIAotc3RhdGljIGludCBzbmRfaGRzcG1fZ2V0X3djX3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAKLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcG1fd2Nfc3luY19jaGVjayhoZHNwbSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDM7CiB9CiAKIAotI2RlZmluZSBIRFNQTV9NQURJX1NZTkNfQ0hFQ0soeG5hbWUsIHhpbmRleCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAotICAubmFtZSA9IHhuYW1lLCBcCi0gIC5pbmRleCA9IHhpbmRleCwgXAotICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsIFwKLSAgLmluZm8gPSBzbmRfaGRzcG1faW5mb19zeW5jX2NoZWNrLCBcCi0gIC5nZXQgPSBzbmRfaGRzcG1fZ2V0X21hZGlzeW5jX3N5bmNfY2hlY2sgXAotfQotCi1zdGF0aWMgaW50IGhkc3BtX21hZGlzeW5jX3N5bmNfY2hlY2soc3RydWN0IGhkc3BtICogaGRzcG0pCitzdGF0aWMgaW50IGhkc3BtX21hZGlfc3luY19jaGVjayhzdHJ1Y3QgaGRzcG0gKmhkc3BtKQogewogCWludCBzdGF0dXMgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3Rlcik7CiAJaWYgKHN0YXR1cyAmIEhEU1BNX21hZGlMb2NrKSB7CkBAIC0yNzUwLDg5ICszNjcxLDcyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZHNwbV9nZXRfbWFkaXN5bmNfc3luY19jaGVjayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICoKLQkJCQkJICAgICB1Y29udHJvbCkKKworc3RhdGljIGludCBoZHNwbV9zMV9zeW5jX2NoZWNrKHN0cnVjdCBoZHNwbSAqaGRzcG0sIGludCBpZHgpCit7CisJaW50IHN0YXR1cywgbG9jaywgc3luYzsKKworCXN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX1JEX1NUQVRVU18xKTsKKworCWxvY2sgPSAoc3RhdHVzICYgKDB4MTw8aWR4KSkgPyAxIDogMDsKKwlzeW5jID0gKHN0YXR1cyAmICgweDEwMDw8aWR4KSkgPyAxIDogMDsKKworCWlmIChsb2NrICYmIHN5bmMpCisJCXJldHVybiAyOworCWVsc2UgaWYgKGxvY2spCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaGRzcG1fc3luY19pbl9zeW5jX2NoZWNrKHN0cnVjdCBoZHNwbSAqaGRzcG0pCit7CisJaW50IHN0YXR1cywgbG9jayA9IDAsIHN5bmMgPSAwOworCisJc3dpdGNoIChoZHNwbS0+aW9fdHlwZSkgeworCWNhc2UgUmF5REFUOgorCWNhc2UgQUlPOgorCQlzdGF0dXMgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9SRF9TVEFUVVNfMyk7CisJCWxvY2sgPSAoc3RhdHVzICYgMHg0MDApID8gMSA6IDA7CisJCXN5bmMgPSAoc3RhdHVzICYgMHg4MDApID8gMSA6IDA7CisJCWJyZWFrOworCisJY2FzZSBNQURJOgorCWNhc2UgQUVTMzI6CisJCXN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyMik7CisJCWxvY2sgPSAoc3RhdHVzICYgSERTUE1fc3luY0luTG9jaykgPyAxIDogMDsKKwkJc3luYyA9IChzdGF0dXMgJiBIRFNQTV9zeW5jSW5TeW5jKSA/IDEgOiAwOworCQlicmVhazsKKworCWNhc2UgTUFESWZhY2U6CisJCWJyZWFrOworCX0KKworCWlmIChsb2NrICYmIHN5bmMpCisJCXJldHVybiAyOworCWVsc2UgaWYgKGxvY2spCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRzcG1fYWVzX3N5bmNfY2hlY2soc3RydWN0IGhkc3BtICpoZHNwbSwgaW50IGlkeCkKK3sKKwlpbnQgc3RhdHVzMiwgbG9jaywgc3luYzsKKwlzdGF0dXMyID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fc3RhdHVzUmVnaXN0ZXIyKTsKKworCWxvY2sgPSAoc3RhdHVzMiAmICgweDAwODAgPj4gaWR4KSkgPyAxIDogMDsKKwlzeW5jID0gKHN0YXR1czIgJiAoMHg4MDAwID4+IGlkeCkpID8gMSA6IDA7CisKKwlpZiAoc3luYykKKwkJcmV0dXJuIDI7CisJZWxzZSBpZiAobG9jaykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBoZHNwbV90Y29fc3luY19jaGVjayhzdHJ1Y3QgaGRzcG0gKmhkc3BtKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoaGRzcG0tPnRjbykgeworCQlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJCWNhc2UgTUFESToKKwkJY2FzZSBBRVMzMjoKKwkJCXN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKKwkJCWlmIChzdGF0dXMgJiBIRFNQTV90Y29Mb2NrKSB7CisJCQkJaWYgKHN0YXR1cyAmIEhEU1BNX3Rjb1N5bmMpCisJCQkJCXJldHVybiAyOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlyZXR1cm4gMDsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBSYXlEQVQ6CisJCWNhc2UgQUlPOgorCQkJc3RhdHVzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfU1RBVFVTXzEpOworCisJCQlpZiAoc3RhdHVzICYgMHg4MDAwMDAwKQorCQkJCXJldHVybiAyOyAvKiBTeW5jICovCisJCQlpZiAoc3RhdHVzICYgMHg0MDAwMDAwKQorCQkJCXJldHVybiAxOyAvKiBMb2NrICovCisJCQlyZXR1cm4gMDsgLyogTm8gc2lnbmFsICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMzsgLyogTi9BICovCit9CisKKworc3RhdGljIGludCBzbmRfaGRzcG1fZ2V0X3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IHZhbCA9IC0xOworCisJc3dpdGNoIChoZHNwbS0+aW9fdHlwZSkgeworCWNhc2UgUmF5REFUOgorCQlzd2l0Y2ggKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKSB7CisJCWNhc2UgMDogLyogV0MgKi8KKwkJCXZhbCA9IGhkc3BtX3djX3N5bmNfY2hlY2soaGRzcG0pOyBicmVhazsKKwkJY2FzZSA3OiAvKiBUQ08gKi8KKwkJCXZhbCA9IGhkc3BtX3Rjb19zeW5jX2NoZWNrKGhkc3BtKTsgYnJlYWs7CisJCWNhc2UgODogLyogU1lOQyBJTiAqLworCQkJdmFsID0gaGRzcG1fc3luY19pbl9zeW5jX2NoZWNrKGhkc3BtKTsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl2YWwgPSBoZHNwbV9zMV9zeW5jX2NoZWNrKGhkc3BtLCB1Y29udHJvbC0+aWQuaW5kZXgtMSk7CisJCX0KKworCWNhc2UgQUlPOgorCQlzd2l0Y2ggKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKSB7CisJCWNhc2UgMDogLyogV0MgKi8KKwkJCXZhbCA9IGhkc3BtX3djX3N5bmNfY2hlY2soaGRzcG0pOyBicmVhazsKKwkJY2FzZSA0OiAvKiBUQ08gKi8KKwkJCXZhbCA9IGhkc3BtX3Rjb19zeW5jX2NoZWNrKGhkc3BtKTsgYnJlYWs7CisJCWNhc2UgNTogLyogU1lOQyBJTiAqLworCQkJdmFsID0gaGRzcG1fc3luY19pbl9zeW5jX2NoZWNrKGhkc3BtKTsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl2YWwgPSBoZHNwbV9zMV9zeW5jX2NoZWNrKGhkc3BtLCB1Y29udHJvbC0+aWQuaW5kZXgtMSk7CisJCX0KKworCWNhc2UgTUFESToKKwkJc3dpdGNoIChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSkgeworCQljYXNlIDA6IC8qIFdDICovCisJCQl2YWwgPSBoZHNwbV93Y19zeW5jX2NoZWNrKGhkc3BtKTsgYnJlYWs7CisJCWNhc2UgMTogLyogTUFESSAqLworCQkJdmFsID0gaGRzcG1fbWFkaV9zeW5jX2NoZWNrKGhkc3BtKTsgYnJlYWs7CisJCWNhc2UgMjogLyogVENPICovCisJCQl2YWwgPSBoZHNwbV90Y29fc3luY19jaGVjayhoZHNwbSk7IGJyZWFrOworCQljYXNlIDM6IC8qIFNZTkNfSU4gKi8KKwkJCXZhbCA9IGhkc3BtX3N5bmNfaW5fc3luY19jaGVjayhoZHNwbSk7IGJyZWFrOworCQl9CisKKwljYXNlIE1BRElmYWNlOgorCQl2YWwgPSBoZHNwbV9tYWRpX3N5bmNfY2hlY2soaGRzcG0pOyAvKiBNQURJICovCisJCWJyZWFrOworCisJY2FzZSBBRVMzMjoKKwkJc3dpdGNoIChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSkgeworCQljYXNlIDA6IC8qIFdDICovCisJCQl2YWwgPSBoZHNwbV93Y19zeW5jX2NoZWNrKGhkc3BtKTsgYnJlYWs7CisJCWNhc2UgOTogLyogVENPICovCisJCQl2YWwgPSBoZHNwbV90Y29fc3luY19jaGVjayhoZHNwbSk7IGJyZWFrOworCQljYXNlIDEwIC8qIFNZTkMgSU4gKi86CisJCQl2YWwgPSBoZHNwbV9zeW5jX2luX3N5bmNfY2hlY2soaGRzcG0pOyBicmVhazsKKwkJZGVmYXVsdDogLyogQUVTMSB0byBBRVM4ICovCisJCQkgdmFsID0gaGRzcG1fYWVzX3N5bmNfY2hlY2soaGRzcG0sCisJCQkJCSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZS0xKTsKKwkJfQorCisJfQorCisJaWYgKC0xID09IHZhbCkKKwkJdmFsID0gMzsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKKworCisvKioKKyAqIFRDTyBjb250cm9scworICoqLworc3RhdGljIHZvaWQgaGRzcG1fdGNvX3dyaXRlKHN0cnVjdCBoZHNwbSAqaGRzcG0pCit7CisJdW5zaWduZWQgaW50IHRjWzRdID0geyAwLCAwLCAwLCAwfTsKKworCXN3aXRjaCAoaGRzcG0tPnRjby0+aW5wdXQpIHsKKwljYXNlIDA6CisJCXRjWzJdIHw9IEhEU1BNX1RDTzJfc2V0X2lucHV0X01TQjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl0Y1syXSB8PSBIRFNQTV9UQ08yX3NldF9pbnB1dF9MU0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaGRzcG0tPnRjby0+ZnJhbWVyYXRlKSB7CisJY2FzZSAxOgorCQl0Y1sxXSB8PSBIRFNQTV9UQ08xX0xUQ19Gb3JtYXRfTFNCOworCQlicmVhazsKKwljYXNlIDI6CisJCXRjWzFdIHw9IEhEU1BNX1RDTzFfTFRDX0Zvcm1hdF9NU0I7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdGNbMV0gfD0gSERTUE1fVENPMV9MVENfRm9ybWF0X01TQiArCisJCQlIRFNQTV9UQ08xX3NldF9kcm9wX2ZyYW1lX2ZsYWc7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdGNbMV0gfD0gSERTUE1fVENPMV9MVENfRm9ybWF0X0xTQiArCisJCQlIRFNQTV9UQ08xX0xUQ19Gb3JtYXRfTVNCOworCQlicmVhazsKKwljYXNlIDU6CisJCXRjWzFdIHw9IEhEU1BNX1RDTzFfTFRDX0Zvcm1hdF9MU0IgKworCQkJSERTUE1fVENPMV9MVENfRm9ybWF0X01TQiArCisJCQlIRFNQTV9UQ08xX3NldF9kcm9wX2ZyYW1lX2ZsYWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaGRzcG0tPnRjby0+d29yZGNsb2NrKSB7CisJY2FzZSAxOgorCQl0Y1syXSB8PSBIRFNQTV9UQ08yX1dDS19JT19yYXRpb19MU0I7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdGNbMl0gfD0gSERTUE1fVENPMl9XQ0tfSU9fcmF0aW9fTVNCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGhkc3BtLT50Y28tPnNhbXBsZXJhdGUpIHsKKwljYXNlIDE6CisJCXRjWzJdIHw9IEhEU1BNX1RDTzJfc2V0X2ZyZXE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdGNbMl0gfD0gSERTUE1fVENPMl9zZXRfZnJlcV9mcm9tX2FwcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChoZHNwbS0+dGNvLT5wdWxsKSB7CisJY2FzZSAxOgorCQl0Y1syXSB8PSBIRFNQTV9UQ08yX3NldF9wdWxsX3VwOworCQlicmVhazsKKwljYXNlIDI6CisJCXRjWzJdIHw9IEhEU1BNX1RDTzJfc2V0X3B1bGxfZG93bjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl0Y1syXSB8PSBIRFNQTV9UQ08yX3NldF9wdWxsX3VwICsgSERTUE1fVENPMl9zZXRfMDFfNDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0Y1syXSB8PSBIRFNQTV9UQ08yX3NldF9wdWxsX2Rvd24gKyBIRFNQTV9UQ08yX3NldF8wMV80OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoMSA9PSBoZHNwbS0+dGNvLT50ZXJtKSB7CisJCXRjWzJdIHw9IEhEU1BNX1RDTzJfc2V0X3Rlcm1fNzVSOworCX0KKworCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9XUl9UQ08sIHRjWzBdKTsKKwloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fV1JfVENPKzQsIHRjWzFdKTsKKwloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fV1JfVENPKzgsIHRjWzJdKTsKKwloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fV1JfVENPKzEyLCB0Y1szXSk7Cit9CisKKworI2RlZmluZSBIRFNQTV9UQ09fU0FNUExFX1JBVEUoeG5hbWUsIHhpbmRleCkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkuaW5kZXggPSB4aW5kZXgsIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8XAorCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsIFwKKwkuaW5mbyA9IHNuZF9oZHNwbV9pbmZvX3Rjb19zYW1wbGVfcmF0ZSwgXAorCS5nZXQgPSBzbmRfaGRzcG1fZ2V0X3Rjb19zYW1wbGVfcmF0ZSwgXAorCS5wdXQgPSBzbmRfaGRzcG1fcHV0X3Rjb19zYW1wbGVfcmF0ZSBcCit9CisKK3N0YXRpYyBpbnQgc25kX2hkc3BtX2luZm9fdGNvX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7ICI0NC4xIGtIeiIsICI0OCBrSHoiIH07CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7CisKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9CisJCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CisKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkJCXRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9nZXRfdGNvX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAKLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0KLQkgICAgaGRzcG1fbWFkaXN5bmNfc3luY19jaGVjayhoZHNwbSk7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BtLT50Y28tPnNhbXBsZXJhdGU7CisKIAlyZXR1cm4gMDsKIH0KIAotCi0jZGVmaW5lIEhEU1BNX0FFU19TWU5DX0NIRUNLKHhuYW1lLCB4aW5kZXgpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKLSAgLm5hbWUgPSB4bmFtZSwgXAotICAuaW5kZXggPSB4aW5kZXgsIFwKLSAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLCBcCi0gIC5pbmZvID0gc25kX2hkc3BtX2luZm9fc3luY19jaGVjaywgXAotICAuZ2V0ID0gc25kX2hkc3BtX2dldF9hZXNfc3luY19jaGVjayBcCi19Ci0KLXN0YXRpYyBpbnQgaGRzcG1fYWVzX3N5bmNfY2hlY2soc3RydWN0IGhkc3BtICogaGRzcG0sIGludCBpZHgpCitzdGF0aWMgaW50IHNuZF9oZHNwbV9wdXRfdGNvX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7Ci0JaW50IHN0YXR1czIgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3RlcjIpOwotCWlmIChzdGF0dXMyICYgKEhEU1BNX0xvY2tBRVMgPj4gaWR4KSkgewotCQkvKiBJIGRvbid0IGtub3cgaG93IHRvIGRpZmZlcmVuY2lhdGUgc3luYyBmcm9tIGxvY2suCi0JCSAgIERvaW5nIGFzIGlmIHN5bmMgZm9yIG5vdyAqLwotCQlyZXR1cm4gMjsKKwlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJaWYgKGhkc3BtLT50Y28tPnNhbXBsZXJhdGUgIT0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgeworCQloZHNwbS0+dGNvLT5zYW1wbGVyYXRlID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCQloZHNwbV90Y29fd3JpdGUoaGRzcG0pOworCisJCXJldHVybiAxOwogCX0KKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZHNwbV9nZXRfYWVzX3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisKKyNkZWZpbmUgSERTUE1fVENPX1BVTEwoeG5hbWUsIHhpbmRleCkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkuaW5kZXggPSB4aW5kZXgsIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8XAorCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsIFwKKwkuaW5mbyA9IHNuZF9oZHNwbV9pbmZvX3Rjb19wdWxsLCBcCisJLmdldCA9IHNuZF9oZHNwbV9nZXRfdGNvX3B1bGwsIFwKKwkucHV0ID0gc25kX2hkc3BtX3B1dF90Y29fcHVsbCBcCit9CisKK3N0YXRpYyBpbnQgc25kX2hkc3BtX2luZm9fdGNvX3B1bGwoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsgIjAiLCAiKyAwLjEgJSIsICItIDAuMSAlIiwgIisgNCAlIiwgIi0gNCAlIiB9OworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA1OworCisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPQorCQkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOworCisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJCQl0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaGRzcG1fZ2V0X3Rjb19wdWxsKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwbS0+dGNvLT5wdWxsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2hkc3BtX3B1dF90Y29fcHVsbChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwlpZiAoaGRzcG0tPnRjby0+cHVsbCAhPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJCWhkc3BtLT50Y28tPnB1bGwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJCWhkc3BtX3Rjb193cml0ZShoZHNwbSk7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgSERTUE1fVENPX1dDS19DT05WRVJTSU9OKHhuYW1lLCB4aW5kZXgpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLmluZGV4ID0geGluZGV4LCBcCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfFwKKwkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSwgXAorCS5pbmZvID0gc25kX2hkc3BtX2luZm9fdGNvX3dja19jb252ZXJzaW9uLCBcCisJLmdldCA9IHNuZF9oZHNwbV9nZXRfdGNvX3dja19jb252ZXJzaW9uLCBcCisJLnB1dCA9IHNuZF9oZHNwbV9wdXRfdGNvX3dja19jb252ZXJzaW9uIFwKK30KKworc3RhdGljIGludCBzbmRfaGRzcG1faW5mb190Y29fd2NrX2NvbnZlcnNpb24oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsgIjE6MSIsICI0NC4xIC0+IDQ4IiwgIjQ4IC0+IDQ0LjEiIH07CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9CisJCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CisKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkJCXRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9nZXRfdGNvX3dja19jb252ZXJzaW9uKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwbS0+dGNvLT53b3JkY2xvY2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaGRzcG1fcHV0X3Rjb193Y2tfY29udmVyc2lvbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwlpZiAoaGRzcG0tPnRjby0+d29yZGNsb2NrICE9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKKwkJaGRzcG0tPnRjby0+d29yZGNsb2NrID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCQloZHNwbV90Y29fd3JpdGUoaGRzcG0pOworCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisKKyNkZWZpbmUgSERTUE1fVENPX0ZSQU1FX1JBVEUoeG5hbWUsIHhpbmRleCkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkuaW5kZXggPSB4aW5kZXgsIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8XAorCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLCBcCisJLmluZm8gPSBzbmRfaGRzcG1faW5mb190Y29fZnJhbWVfcmF0ZSwgXAorCS5nZXQgPSBzbmRfaGRzcG1fZ2V0X3Rjb19mcmFtZV9yYXRlLCBcCisJLnB1dCA9IHNuZF9oZHNwbV9wdXRfdGNvX2ZyYW1lX3JhdGUgXAorfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9pbmZvX3Rjb19mcmFtZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7ICIyNCBmcHMiLCAiMjUgZnBzIiwgIjI5Ljk3ZnBzIiwKKwkJIjI5Ljk3IGRmcHMiLCAiMzAgZnBzIiwgIjMwIGRmcHMiIH07CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDY7CisKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9CisJCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CisKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkJCXRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9nZXRfdGNvX2ZyYW1lX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCWludCBvZmZzZXQ7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCW9mZnNldCA9IHVjb250cm9sLT5pZC5pbmRleCAtIDE7Ci0JaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID49IDgpCi0JCXJldHVybiAtRUlOVkFMOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwbS0+dGNvLT5mcmFtZXJhdGU7CiAKLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0KLQkJaGRzcG1fYWVzX3N5bmNfY2hlY2soaGRzcG0sIG9mZnNldCk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc25kX2hkc3BtX3B1dF90Y29fZnJhbWVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCWlmIChoZHNwbS0+dGNvLT5mcmFtZXJhdGUgIT0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgeworCQloZHNwbS0+dGNvLT5mcmFtZXJhdGUgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJCWhkc3BtX3Rjb193cml0ZShoZHNwbSk7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworI2RlZmluZSBIRFNQTV9UQ09fU1lOQ19TT1VSQ0UoeG5hbWUsIHhpbmRleCkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkuaW5kZXggPSB4aW5kZXgsIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8XAorCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLCBcCisJLmluZm8gPSBzbmRfaGRzcG1faW5mb190Y29fc3luY19zb3VyY2UsIFwKKwkuZ2V0ID0gc25kX2hkc3BtX2dldF90Y29fc3luY19zb3VyY2UsIFwKKwkucHV0ID0gc25kX2hkc3BtX3B1dF90Y29fc3luY19zb3VyY2UgXAorfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9pbmZvX3Rjb19zeW5jX3NvdXJjZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyAiTFRDIiwgIlZpZGVvIiwgIldDSyIgfTsKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0KKwkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKworCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAorCQkJdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2hkc3BtX2dldF90Y29fc3luY19zb3VyY2Uoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BtLT50Y28tPmlucHV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2hkc3BtX3B1dF90Y29fc3luY19zb3VyY2Uoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJaWYgKGhkc3BtLT50Y28tPmlucHV0ICE9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKKwkJaGRzcG0tPnRjby0+aW5wdXQgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJCWhkc3BtX3Rjb193cml0ZShoZHNwbSk7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworI2RlZmluZSBIRFNQTV9UQ09fV09SRF9URVJNKHhuYW1lLCB4aW5kZXgpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLmluZGV4ID0geGluZGV4LCBcCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfFwKKwkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSwgXAorCS5pbmZvID0gc25kX2hkc3BtX2luZm9fdGNvX3dvcmRfdGVybSwgXAorCS5nZXQgPSBzbmRfaGRzcG1fZ2V0X3Rjb193b3JkX3Rlcm0sIFwKKwkucHV0ID0gc25kX2hkc3BtX3B1dF90Y29fd29yZF90ZXJtIFwKK30KKworc3RhdGljIGludCBzbmRfaGRzcG1faW5mb190Y29fd29yZF90ZXJtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzbmRfaGRzcG1fZ2V0X3Rjb193b3JkX3Rlcm0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcG0tPnRjby0+dGVybTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc25kX2hkc3BtX3B1dF90Y29fd29yZF90ZXJtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJaWYgKGhkc3BtLT50Y28tPnRlcm0gIT0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgeworCQloZHNwbS0+dGNvLT50ZXJtID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCQloZHNwbV90Y29fd3JpdGUoaGRzcG0pOworCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisKKwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2hkc3BtX2NvbnRyb2xzX21hZGlbXSA9IHsKLQogCUhEU1BNX01JWEVSKCJNaXhlciIsIDApLAotLyogJ1NhbXBsZSBDbG9jayBTb3VyY2UnIGNvbXBsaWVzIHdpdGggdGhlIGFsc2EgY29udHJvbCBuYW1pbmcgc2NoZW1lICovCi0JSERTUE1fQ0xPQ0tfU09VUkNFKCJTYW1wbGUgQ2xvY2sgU291cmNlIiwgMCksCi0KKwlIRFNQTV9JTlRFUk5BTF9DTE9DSygiSW50ZXJuYWwgQ2xvY2siLCAwKSwKIAlIRFNQTV9TWVNURU1fQ0xPQ0tfTU9ERSgiU3lzdGVtIENsb2NrIE1vZGUiLCAwKSwKIAlIRFNQTV9QUkVGX1NZTkNfUkVGKCJQcmVmZXJyZWQgU3luYyBSZWZlcmVuY2UiLCAwKSwKIAlIRFNQTV9BVVRPU1lOQ19SRUYoIkF1dG9TeW5jIFJlZmVyZW5jZSIsIDApLAogCUhEU1BNX1NZU1RFTV9TQU1QTEVfUkFURSgiU3lzdGVtIFNhbXBsZSBSYXRlIiwgMCksCi0vKiAnRXh0ZXJuYWwgUmF0ZScgY29tcGxpZXMgd2l0aCB0aGUgYWxzYSBjb250cm9sIG5hbWluZyBzY2hlbWUgKi8KLQlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiRXh0ZXJuYWwgUmF0ZSIsIDApLAotCUhEU1BNX1dDX1NZTkNfQ0hFQ0soIldvcmQgQ2xvY2sgTG9jayBTdGF0dXMiLCAwKSwKLQlIRFNQTV9NQURJX1NZTkNfQ0hFQ0soIk1BREkgU3luYyBMb2NrIFN0YXR1cyIsIDApLAorCUhEU1BNX1NZTkNfQ0hFQ0soIldDIFN5bmNDaGVjayIsIDApLAorCUhEU1BNX1NZTkNfQ0hFQ0soIk1BREkgU3luY0NoZWNrIiwgMSksCisJSERTUE1fU1lOQ19DSEVDSygiVENPIFN5bmNDSGVjayIsIDIpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIlNZTkMgSU4gU3luY0NoZWNrIiwgMyksCiAJSERTUE1fTElORV9PVVQoIkxpbmUgT3V0IiwgMCksCiAJSERTUE1fVFhfNjQoIlRYIDY0IGNoYW5uZWxzIG1vZGUiLCAwKSwKIAlIRFNQTV9DX1RNUygiQ2xlYXIgVHJhY2sgTWFya2VyIiwgMCksCiAJSERTUE1fU0FGRV9NT0RFKCJTYWZlIE1vZGUiLCAwKSwKLQlIRFNQTV9JTlBVVF9TRUxFQ1QoIklucHV0IFNlbGVjdCIsIDApLAorCUhEU1BNX0lOUFVUX1NFTEVDVCgiSW5wdXQgU2VsZWN0IiwgMCkKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaGRzcG1fY29udHJvbHNfYWVzMzJbXSA9IHsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9oZHNwbV9jb250cm9sc19tYWRpZmFjZVtdID0gewogCUhEU1BNX01JWEVSKCJNaXhlciIsIDApLAotLyogJ1NhbXBsZSBDbG9jayBTb3VyY2UnIGNvbXBsaWVzIHdpdGggdGhlIGFsc2EgY29udHJvbCBuYW1pbmcgc2NoZW1lICovCi0JSERTUE1fQ0xPQ0tfU09VUkNFKCJTYW1wbGUgQ2xvY2sgU291cmNlIiwgMCksCisJSERTUE1fSU5URVJOQUxfQ0xPQ0soIkludGVybmFsIENsb2NrIiwgMCksCisJSERTUE1fU1lTVEVNX0NMT0NLX01PREUoIlN5c3RlbSBDbG9jayBNb2RlIiwgMCksCisJSERTUE1fU1lTVEVNX1NBTVBMRV9SQVRFKCJTeXN0ZW0gU2FtcGxlIFJhdGUiLCAwKSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiRXh0ZXJuYWwgUmF0ZSIsIDApLAorCUhEU1BNX1NZTkNfQ0hFQ0soIk1BREkgU3luY0NoZWNrIiwgMCksCisJSERTUE1fVFhfNjQoIlRYIDY0IGNoYW5uZWxzIG1vZGUiLCAwKSwKKwlIRFNQTV9DX1RNUygiQ2xlYXIgVHJhY2sgTWFya2VyIiwgMCksCisJSERTUE1fU0FGRV9NT0RFKCJTYWZlIE1vZGUiLCAwKQorfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9oZHNwbV9jb250cm9sc19haW9bXSA9IHsKKwlIRFNQTV9NSVhFUigiTWl4ZXIiLCAwKSwKKwlIRFNQTV9JTlRFUk5BTF9DTE9DSygiSW50ZXJuYWwgQ2xvY2siLCAwKSwKIAlIRFNQTV9TWVNURU1fQ0xPQ0tfTU9ERSgiU3lzdGVtIENsb2NrIE1vZGUiLCAwKSwKIAlIRFNQTV9QUkVGX1NZTkNfUkVGKCJQcmVmZXJyZWQgU3luYyBSZWZlcmVuY2UiLCAwKSwKIAlIRFNQTV9BVVRPU1lOQ19SRUYoIkF1dG9TeW5jIFJlZmVyZW5jZSIsIDApLAogCUhEU1BNX1NZU1RFTV9TQU1QTEVfUkFURSgiU3lzdGVtIFNhbXBsZSBSYXRlIiwgMCksCi0vKiAnRXh0ZXJuYWwgUmF0ZScgY29tcGxpZXMgd2l0aCB0aGUgYWxzYSBjb250cm9sIG5hbWluZyBzY2hlbWUgKi8KIAlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiRXh0ZXJuYWwgUmF0ZSIsIDApLAotCUhEU1BNX1dDX1NZTkNfQ0hFQ0soIldvcmQgQ2xvY2sgTG9jayBTdGF0dXMiLCAwKSwKLS8qCUhEU1BNX0FFU19TWU5DX0NIRUNLKCJBRVMgTG9jayBTdGF0dXMiLCAwKSwqLyAvKiBjcmVhdGVkIGluIHNuZF9oZHNwbV9jcmVhdGVfY29udHJvbHMoKSAqLworCUhEU1BNX1NZTkNfQ0hFQ0soIldDIFN5bmNDaGVjayIsIDApLAorCUhEU1BNX1NZTkNfQ0hFQ0soIkFFUyBTeW5jQ2hlY2siLCAxKSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJTUERJRiBTeW5jQ2hlY2siLCAyKSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBREFUIFN5bmNDaGVjayIsIDMpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIlRDTyBTeW5jQ2hlY2siLCA0KSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJTWU5DIElOIFN5bmNDaGVjayIsIDUpLAorCUhEU1BNX0FVVE9TWU5DX1NBTVBMRV9SQVRFKCJXQyBGcmVxdWVuY3kiLCAwKSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiQUVTIEZyZXF1ZW5jeSIsIDEpLAorCUhEU1BNX0FVVE9TWU5DX1NBTVBMRV9SQVRFKCJTUERJRiBGcmVxdWVuY3kiLCAyKSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiQURBVCBGcmVxdWVuY3kiLCAzKSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiVENPIEZyZXF1ZW5jeSIsIDQpLAorCUhEU1BNX0FVVE9TWU5DX1NBTVBMRV9SQVRFKCJTWU5DIElOIEZyZXF1ZW5jeSIsIDUpCisKKwkJLyoKKwkJICAgSERTUE1fSU5QVVRfU0VMRUNUKCJJbnB1dCBTZWxlY3QiLCAwKSwKKwkJICAgSERTUE1fU1BESUZfT1BUSUNBTCgiU1BESUYgT3V0IE9wdGljYWwiLCAwKSwKKwkJICAgSERTUE1fUFJPRkVTU0lPTkFMKCJTUERJRiBPdXQgUHJvZmVzc2lvbmFsIiwgMCk7CisJCSAgIEhEU1BNX1NQRElGX0lOKCJTUERJRiBJbiIsIDApOworCQkgICBIRFNQTV9CUkVBS09VVF9DQUJMRSgiQnJlYWtvdXQgQ2FibGUiLCAwKTsKKwkJICAgSERTUE1fSU5QVVRfTEVWRUwoIklucHV0IExldmVsIiwgMCk7CisJCSAgIEhEU1BNX09VVFBVVF9MRVZFTCgiT3V0cHV0IExldmVsIiwgMCk7CisJCSAgIEhEU1BNX1BIT05FUygiUGhvbmVzIiwgMCk7CisJCSAgICovCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2hkc3BtX2NvbnRyb2xzX3JheWRhdFtdID0geworCUhEU1BNX01JWEVSKCJNaXhlciIsIDApLAorCUhEU1BNX0lOVEVSTkFMX0NMT0NLKCJJbnRlcm5hbCBDbG9jayIsIDApLAorCUhEU1BNX1NZU1RFTV9DTE9DS19NT0RFKCJDbG9jayBNb2RlIiwgMCksCisJSERTUE1fUFJFRl9TWU5DX1JFRigiUHJlZiBTeW5jIFJlZiIsIDApLAorCUhEU1BNX1NZU1RFTV9TQU1QTEVfUkFURSgiU3lzdGVtIFNhbXBsZSBSYXRlIiwgMCksCisJSERTUE1fU1lOQ19DSEVDSygiV0MgU3luY0NoZWNrIiwgMCksCisJSERTUE1fU1lOQ19DSEVDSygiQUVTIFN5bmNDaGVjayIsIDEpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIlNQRElGIFN5bmNDaGVjayIsIDIpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIkFEQVQxIFN5bmNDaGVjayIsIDMpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIkFEQVQyIFN5bmNDaGVjayIsIDQpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIkFEQVQzIFN5bmNDaGVjayIsIDUpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIkFEQVQ0IFN5bmNDaGVjayIsIDYpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIlRDTyBTeW5jQ2hlY2siLCA3KSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJTWU5DIElOIFN5bmNDaGVjayIsIDgpLAorCUhEU1BNX0FVVE9TWU5DX1NBTVBMRV9SQVRFKCJXQyBGcmVxdWVuY3kiLCAwKSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiQUVTIEZyZXF1ZW5jeSIsIDEpLAorCUhEU1BNX0FVVE9TWU5DX1NBTVBMRV9SQVRFKCJTUERJRiBGcmVxdWVuY3kiLCAyKSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiQURBVDEgRnJlcXVlbmN5IiwgMyksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFEQVQyIEZyZXF1ZW5jeSIsIDQpLAorCUhEU1BNX0FVVE9TWU5DX1NBTVBMRV9SQVRFKCJBREFUMyBGcmVxdWVuY3kiLCA1KSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiQURBVDQgRnJlcXVlbmN5IiwgNiksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIlRDTyBGcmVxdWVuY3kiLCA3KSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiU1lOQyBJTiBGcmVxdWVuY3kiLCA4KQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9oZHNwbV9jb250cm9sc19hZXMzMltdID0geworCUhEU1BNX01JWEVSKCJNaXhlciIsIDApLAorCUhEU1BNX0lOVEVSTkFMX0NMT0NLKCJJbnRlcm5hbCBDbG9jayIsIDApLAorCUhEU1BNX1NZU1RFTV9DTE9DS19NT0RFKCJTeXN0ZW0gQ2xvY2sgTW9kZSIsIDApLAorCUhEU1BNX1BSRUZfU1lOQ19SRUYoIlByZWZlcnJlZCBTeW5jIFJlZmVyZW5jZSIsIDApLAorCUhEU1BNX0FVVE9TWU5DX1JFRigiQXV0b1N5bmMgUmVmZXJlbmNlIiwgMCksCisJSERTUE1fU1lTVEVNX1NBTVBMRV9SQVRFKCJTeXN0ZW0gU2FtcGxlIFJhdGUiLCAwKSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiRXh0ZXJuYWwgUmF0ZSIsIDApLAorCUhEU1BNX1NZTkNfQ0hFQ0soIldDIFN5bmMgQ2hlY2siLCAwKSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBRVMxIFN5bmMgQ2hlY2siLCAxKSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBRVMyIFN5bmMgQ2hlY2siLCAyKSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBRVMzIFN5bmMgQ2hlY2siLCAzKSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBRVM0IFN5bmMgQ2hlY2siLCA0KSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBRVM1IFN5bmMgQ2hlY2siLCA1KSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBRVM2IFN5bmMgQ2hlY2siLCA2KSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBRVM3IFN5bmMgQ2hlY2siLCA3KSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJBRVM4IFN5bmMgQ2hlY2siLCA4KSwKKwlIRFNQTV9TWU5DX0NIRUNLKCJUQ08gU3luYyBDaGVjayIsIDkpLAorCUhEU1BNX1NZTkNfQ0hFQ0soIlNZTkMgSU4gU3luYyBDaGVjayIsIDEwKSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiV0MgRnJlcXVlbmN5IiwgMCksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFFUzEgRnJlcXVlbmN5IiwgMSksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFFUzIgRnJlcXVlbmN5IiwgMiksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFFUzMgRnJlcXVlbmN5IiwgMyksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFFUzQgRnJlcXVlbmN5IiwgNCksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFFUzUgRnJlcXVlbmN5IiwgNSksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFFUzYgRnJlcXVlbmN5IiwgNiksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFFUzcgRnJlcXVlbmN5IiwgNyksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIkFFUzggRnJlcXVlbmN5IiwgOCksCisJSERTUE1fQVVUT1NZTkNfU0FNUExFX1JBVEUoIlRDTyBGcmVxdWVuY3kiLCA5KSwKKwlIRFNQTV9BVVRPU1lOQ19TQU1QTEVfUkFURSgiU1lOQyBJTiBGcmVxdWVuY3kiLCAxMCksCiAJSERTUE1fTElORV9PVVQoIkxpbmUgT3V0IiwgMCksCiAJSERTUE1fRU1QSEFTSVMoIkVtcGhhc2lzIiwgMCksCiAJSERTUE1fRE9MQlkoIk5vbiBBdWRpbyIsIDApLApAQCAtMjg0Miw2ICs0NDAwLDE5IEBACiAJSERTUE1fUVNfV0lSRSgiUXVhZCBTcGVlZCBXaXJlIE1vZGUiLCAwKSwKIH07CiAKKworCisvKiBDb250cm9sIGVsZW1lbnRzIGZvciB0aGUgb3B0aW9uYWwgVENPIG1vZHVsZSAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9oZHNwbV9jb250cm9sc190Y29bXSA9IHsKKwlIRFNQTV9UQ09fU0FNUExFX1JBVEUoIlRDTyBTYW1wbGUgUmF0ZSIsIDApLAorCUhEU1BNX1RDT19QVUxMKCJUQ08gUHVsbCIsIDApLAorCUhEU1BNX1RDT19XQ0tfQ09OVkVSU0lPTigiVENPIFdDSyBDb252ZXJzaW9uIiwgMCksCisJSERTUE1fVENPX0ZSQU1FX1JBVEUoIlRDTyBGcmFtZSBSYXRlIiwgMCksCisJSERTUE1fVENPX1NZTkNfU09VUkNFKCJUQ08gU3luYyBTb3VyY2UiLCAwKSwKKwlIRFNQTV9UQ09fV09SRF9URVJNKCJUQ08gV29yZCBUZXJtIiwgMCkKK307CisKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9oZHNwbV9wbGF5YmFja19taXhlciA9IEhEU1BNX1BMQVlCQUNLX01JWEVSOwogCiAKQEAgLTI4NDksNzggKzQ0MjAsNzYgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IGhkc3BtLT5kc19jaGFubmVsczsgaSA8IGhkc3BtLT5zc19jaGFubmVsczsgKytpKSB7CisJZm9yIChpID0gaGRzcG0tPmRzX291dF9jaGFubmVsczsgaSA8IGhkc3BtLT5zc19vdXRfY2hhbm5lbHM7ICsraSkgewogCQlpZiAoaGRzcG0tPnN5c3RlbV9zYW1wbGVfcmF0ZSA+IDQ4MDAwKSB7CiAJCQloZHNwbS0+cGxheWJhY2tfbWl4ZXJfY3Rsc1tpXS0+dmRbMF0uYWNjZXNzID0KLQkJCSAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUgfAotCQkJICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwKLQkJCSAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEU7CisJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFIHwKKwkJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCB8CisJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFOwogCQl9IGVsc2UgewogCQkJaGRzcG0tPnBsYXliYWNrX21peGVyX2N0bHNbaV0tPnZkWzBdLmFjY2VzcyA9Ci0JCQkgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8Ci0JCQkgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFOworCQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRTsKIAkJfQogCQlzbmRfY3RsX25vdGlmeShoZHNwbS0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUgfAotCQkJICAgICAgIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sCi0JCQkgICAgICAgJmhkc3BtLT5wbGF5YmFja19taXhlcl9jdGxzW2ldLT5pZCk7CisJCQkJU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywKKwkJCQkmaGRzcG0tPnBsYXliYWNrX21peGVyX2N0bHNbaV0tPmlkKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgaW50IHNuZF9oZHNwbV9jcmVhdGVfY29udHJvbHMoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgaGRzcG0gKiBoZHNwbSkKK3N0YXRpYyBpbnQgc25kX2hkc3BtX2NyZWF0ZV9jb250cm9scyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCQkJCXN0cnVjdCBoZHNwbSAqaGRzcG0pCiB7CiAJdW5zaWduZWQgaW50IGlkeCwgbGltaXQ7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpsaXN0ID0gTlVMTDsKIAotCS8qIGFkZCBjb250cm9sIGxpc3QgZmlyc3QgKi8KLQlpZiAoaGRzcG0tPmlzX2FlczMyKSB7Ci0JCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFlc19zeW5jX2N0bCA9Ci0JCQlIRFNQTV9BRVNfU1lOQ19DSEVDSygiQUVTIExvY2sgU3RhdHVzIiwgMCk7CisJc3dpdGNoIChoZHNwbS0+aW9fdHlwZSkgeworCWNhc2UgTUFESToKKwkJbGlzdCA9IHNuZF9oZHNwbV9jb250cm9sc19tYWRpOworCQlsaW1pdCA9IEFSUkFZX1NJWkUoc25kX2hkc3BtX2NvbnRyb2xzX21hZGkpOworCQlicmVhazsKKwljYXNlIE1BRElmYWNlOgorCQlsaXN0ID0gc25kX2hkc3BtX2NvbnRyb2xzX21hZGlmYWNlOworCQlsaW1pdCA9IEFSUkFZX1NJWkUoc25kX2hkc3BtX2NvbnRyb2xzX21hZGlmYWNlKTsKKwkJYnJlYWs7CisJY2FzZSBBSU86CisJCWxpc3QgPSBzbmRfaGRzcG1fY29udHJvbHNfYWlvOworCQlsaW1pdCA9IEFSUkFZX1NJWkUoc25kX2hkc3BtX2NvbnRyb2xzX2Fpbyk7CisJCWJyZWFrOworCWNhc2UgUmF5REFUOgorCQlsaXN0ID0gc25kX2hkc3BtX2NvbnRyb2xzX3JheWRhdDsKKwkJbGltaXQgPSBBUlJBWV9TSVpFKHNuZF9oZHNwbV9jb250cm9sc19yYXlkYXQpOworCQlicmVhazsKKwljYXNlIEFFUzMyOgorCQlsaXN0ID0gc25kX2hkc3BtX2NvbnRyb2xzX2FlczMyOworCQlsaW1pdCA9IEFSUkFZX1NJWkUoc25kX2hkc3BtX2NvbnRyb2xzX2FlczMyKTsKKwkJYnJlYWs7CisJfQogCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfaGRzcG1fY29udHJvbHNfYWVzMzIpOwotCQkgICAgIGlkeCsrKSB7CisJaWYgKE5VTEwgIT0gbGlzdCkgeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGxpbWl0OyBpZHgrKykgewogCQkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKLQkJCQkJICBzbmRfY3RsX25ldzEoJnNuZF9oZHNwbV9jb250cm9sc19hZXMzMltpZHhdLAotCQkJCQkJICAgICAgIGhkc3BtKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWZvciAoaWR4ID0gMTsgaWR4IDw9IDg7IGlkeCsrKSB7Ci0JCQlhZXNfc3luY19jdGwuaW5kZXggPSBpZHg7Ci0JCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAotCQkJCQkgIHNuZF9jdGxfbmV3MSgmYWVzX3N5bmNfY3RsLCBoZHNwbSkpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfaGRzcG1fY29udHJvbHNfbWFkaSk7Ci0JCSAgICAgaWR4KyspIHsKLQkJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCi0JCQkJCSAgc25kX2N0bF9uZXcxKCZzbmRfaGRzcG1fY29udHJvbHNfbWFkaVtpZHhdLAotCQkJCQkJICAgICAgIGhkc3BtKSk7CisJCQkJCXNuZF9jdGxfbmV3MSgmbGlzdFtpZHhdLCBoZHNwbSkpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAotCS8qIENoYW5uZWwgcGxheWJhY2sgbWl4ZXIgYXMgZGVmYXVsdCBjb250cm9sIAotCSAgIE5vdGU6IHRoZSB3aG9sZSBtYXRyaXggd291bGQgYmUgMTI4KkhEU1BNX01JWEVSX0NIQU5ORUxTIEZhZGVycywKLQkgICB0aGF0cyB0b28gKiBiaWcgZm9yIGFueSBhbHNhbWl4ZXIgdGhleSBhcmUgYWNjZXNzaWJsZSB2aWEgc3BlY2lhbAotCSAgIElPQ1RMIG9uIGh3ZGVwIGFuZCB0aGUgbWl4ZXIgMmRpbWVuc2lvbmFsIG1peGVyIGNvbnRyb2wKLQkqLwogCisJLyogY3JlYXRlIHNpbXBsZSAxOjEgcGxheWJhY2sgbWl4ZXIgY29udHJvbHMgKi8KIAlzbmRfaGRzcG1fcGxheWJhY2tfbWl4ZXIubmFtZSA9ICJDaG4iOwotCWxpbWl0ID0gSERTUE1fTUFYX0NIQU5ORUxTOwotCi0JLyogVGhlIGluZGV4IHZhbHVlcyBhcmUgb25lIGdyZWF0ZXIgdGhhbiB0aGUgY2hhbm5lbCBJRCBzbyB0aGF0Ci0JICogYWxzYW1peGVyIHdpbGwgZGlzcGxheSB0aGVtIGNvcnJlY3RseS4gV2Ugd2FudCB0byB1c2UgdGhlIGluZGV4Ci0JICogZm9yIGZhc3QgbG9va3VwIG9mIHRoZSByZWxldmFudCBjaGFubmVsLCBidXQgaWYgd2UgdXNlIGl0IGF0IGFsbCwKLQkgKiBtb3N0IEFMU0Egc29mdHdhcmUgZG9lcyB0aGUgd3JvbmcgdGhpbmcgd2l0aCBpdCAuLi4KLQkgKi8KLQorCWlmIChoZHNwbS0+c3lzdGVtX3NhbXBsZV9yYXRlID49IDEyODAwMCkgeworCQlsaW1pdCA9IGhkc3BtLT5xc19vdXRfY2hhbm5lbHM7CisJfSBlbHNlIGlmIChoZHNwbS0+c3lzdGVtX3NhbXBsZV9yYXRlID49IDY0MDAwKSB7CisJCWxpbWl0ID0gaGRzcG0tPmRzX291dF9jaGFubmVsczsKKwl9IGVsc2UgeworCQlsaW1pdCA9IGhkc3BtLT5zc19vdXRfY2hhbm5lbHM7CisJfQogCWZvciAoaWR4ID0gMDsgaWR4IDwgbGltaXQ7ICsraWR4KSB7CiAJCXNuZF9oZHNwbV9wbGF5YmFja19taXhlci5pbmRleCA9IGlkeCArIDE7CiAJCWtjdGwgPSBzbmRfY3RsX25ldzEoJnNuZF9oZHNwbV9wbGF5YmFja19taXhlciwgaGRzcG0pOwpAQCAtMjkzMCwxMSArNDQ5OSwyNCBAQAogCQloZHNwbS0+cGxheWJhY2tfbWl4ZXJfY3Rsc1tpZHhdID0ga2N0bDsKIAl9CiAKKworCWlmIChoZHNwbS0+dGNvKSB7CisJCS8qIGFkZCB0Y28gY29udHJvbCBlbGVtZW50cyAqLworCQlsaXN0ID0gc25kX2hkc3BtX2NvbnRyb2xzX3RjbzsKKwkJbGltaXQgPSBBUlJBWV9TSVpFKHNuZF9oZHNwbV9jb250cm9sc190Y28pOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGxpbWl0OyBpZHgrKykgeworCQkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKKwkJCQkJc25kX2N0bF9uZXcxKCZsaXN0W2lkeF0sIGhkc3BtKSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAvcHJvYyBpbnRlcmZhY2UgCisgICAvcHJvYyBpbnRlcmZhY2UKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZApAQCAtMjk0Miw3MiArNDUyNCwxNzggQEAKIAkJCSBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzMjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBzdGF0dXMyLCBjb250cm9sLCBmcmVxOworCiAJY2hhciAqcHJlZl9zeW5jX3JlZjsKIAljaGFyICphdXRvc3luY19yZWY7CiAJY2hhciAqc3lzdGVtX2Nsb2NrX21vZGU7Ci0JY2hhciAqY2xvY2tfc291cmNlOwogCWNoYXIgKmluc2VsOwotCWNoYXIgKnN5bmNyZWY7CiAJaW50IHgsIHgyOwogCisJLyogVENPIHN0dWZmICovCisJaW50IGEsIGx0YywgZnJhbWVzLCBzZWNvbmRzLCBtaW51dGVzLCBob3VyczsKKwl1bnNpZ25lZCBpbnQgcGVyaW9kOworCXU2NCBmcmVxX2NvbnN0ID0gMDsKKwl1MzIgcmF0ZTsKKwogCXN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKIAlzdGF0dXMyID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fc3RhdHVzUmVnaXN0ZXIyKTsKKwljb250cm9sID0gaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXI7CisJZnJlcSA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3RpbWVjb2RlUmVnaXN0ZXIpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgKENhcmQgIyVkKSBSZXYuJXggU3RhdHVzMmZpcnN0M2JpdHM6ICV4XG4iLAotCQkgICAgaGRzcG0tPmNhcmRfbmFtZSwgaGRzcG0tPmNhcmQtPm51bWJlciArIDEsCi0JCSAgICBoZHNwbS0+ZmlybXdhcmVfcmV2LAotCQkgICAgKHN0YXR1czIgJiBIRFNQTV92ZXJzaW9uMCkgfAotCQkgICAgKHN0YXR1czIgJiBIRFNQTV92ZXJzaW9uMSkgfCAoc3RhdHVzMiAmCi0JCQkJCQkgIEhEU1BNX3ZlcnNpb24yKSk7CisJCQloZHNwbS0+Y2FyZF9uYW1lLCBoZHNwbS0+Y2FyZC0+bnVtYmVyICsgMSwKKwkJCWhkc3BtLT5maXJtd2FyZV9yZXYsCisJCQkoc3RhdHVzMiAmIEhEU1BNX3ZlcnNpb24wKSB8CisJCQkoc3RhdHVzMiAmIEhEU1BNX3ZlcnNpb24xKSB8IChzdGF0dXMyICYKKwkJCQlIRFNQTV92ZXJzaW9uMikpOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiSFcgU2VyaWFsOiAweCUwNnglMDZ4XG4iLAorCQkJKGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX21pZGlTdGF0dXNJbjEpPj44KSAmIDB4RkZGRkZGLAorCQkJKGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX21pZGlTdGF0dXNJbjApPj44KSAmIDB4RkZGRkZGKTsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklSUTogJWQgUmVnaXN0ZXJzIGJ1czogMHglbHggVk06IDB4JWx4XG4iLAotCQkgICAgaGRzcG0tPmlycSwgaGRzcG0tPnBvcnQsICh1bnNpZ25lZCBsb25nKWhkc3BtLT5pb2Jhc2UpOworCQkJaGRzcG0tPmlycSwgaGRzcG0tPnBvcnQsICh1bnNpZ25lZCBsb25nKWhkc3BtLT5pb2Jhc2UpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiLS0tIFN5c3RlbSAtLS1cbiIpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLAotCQkgICAgIklSUSBQZW5kaW5nOiBBdWRpbz0lZCwgTUlESTA9JWQsIE1JREkxPSVkLCBJUlFjb3VudD0lZFxuIiwKLQkJICAgIHN0YXR1cyAmIEhEU1BNX2F1ZGlvSVJRUGVuZGluZywKLQkJICAgIChzdGF0dXMgJiBIRFNQTV9taWRpMElSUVBlbmRpbmcpID8gMSA6IDAsCi0JCSAgICAoc3RhdHVzICYgSERTUE1fbWlkaTFJUlFQZW5kaW5nKSA/IDEgOiAwLAotCQkgICAgaGRzcG0tPmlycV9jb3VudCk7CisJCSJJUlEgUGVuZGluZzogQXVkaW89JWQsIE1JREkwPSVkLCBNSURJMT0lZCwgSVJRY291bnQ9JWRcbiIsCisJCXN0YXR1cyAmIEhEU1BNX2F1ZGlvSVJRUGVuZGluZywKKwkJKHN0YXR1cyAmIEhEU1BNX21pZGkwSVJRUGVuZGluZykgPyAxIDogMCwKKwkJKHN0YXR1cyAmIEhEU1BNX21pZGkxSVJRUGVuZGluZykgPyAxIDogMCwKKwkJaGRzcG0tPmlycV9jb3VudCk7CiAJc25kX2lwcmludGYoYnVmZmVyLAotCQkgICAgIkhXIHBvaW50ZXI6IGlkID0gJWQsIHJhd3B0ciA9ICVkICglZC0+JWQpICIKLQkJICAgICJlc3RpbWF0ZWQ9ICVsZCAoYnl0ZXMpXG4iLAotCQkgICAgKChzdGF0dXMgJiBIRFNQTV9CdWZmZXJJRCkgPyAxIDogMCksCi0JCSAgICAoc3RhdHVzICYgSERTUE1fQnVmZmVyUG9zaXRpb25NYXNrKSwKLQkJICAgIChzdGF0dXMgJiBIRFNQTV9CdWZmZXJQb3NpdGlvbk1hc2spICUKLQkJICAgICgyICogKGludCloZHNwbS0+cGVyaW9kX2J5dGVzKSwKLQkJICAgICgoc3RhdHVzICYgSERTUE1fQnVmZmVyUG9zaXRpb25NYXNrKSAtIDY0KSAlCi0JCSAgICAoMiAqIChpbnQpaGRzcG0tPnBlcmlvZF9ieXRlcyksCi0JCSAgICAobG9uZykgaGRzcG1faHdfcG9pbnRlcihoZHNwbSkgKiA0KTsKKwkJIkhXIHBvaW50ZXI6IGlkID0gJWQsIHJhd3B0ciA9ICVkICglZC0+JWQpICIKKwkJImVzdGltYXRlZD0gJWxkIChieXRlcylcbiIsCisJCSgoc3RhdHVzICYgSERTUE1fQnVmZmVySUQpID8gMSA6IDApLAorCQkoc3RhdHVzICYgSERTUE1fQnVmZmVyUG9zaXRpb25NYXNrKSwKKwkJKHN0YXR1cyAmIEhEU1BNX0J1ZmZlclBvc2l0aW9uTWFzaykgJQorCQkoMiAqIChpbnQpaGRzcG0tPnBlcmlvZF9ieXRlcyksCisJCSgoc3RhdHVzICYgSERTUE1fQnVmZmVyUG9zaXRpb25NYXNrKSAtIDY0KSAlCisJCSgyICogKGludCloZHNwbS0+cGVyaW9kX2J5dGVzKSwKKwkJKGxvbmcpIGhkc3BtX2h3X3BvaW50ZXIoaGRzcG0pICogNCk7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsCi0JCSAgICAiTUlESSBGSUZPOiBPdXQxPTB4JXgsIE91dDI9MHgleCwgSW4xPTB4JXgsIEluMj0weCV4IFxuIiwKLQkJICAgIGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX21pZGlTdGF0dXNPdXQwKSAmIDB4RkYsCi0JCSAgICBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9taWRpU3RhdHVzT3V0MSkgJiAweEZGLAotCQkgICAgaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMCkgJiAweEZGLAotCQkgICAgaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMSkgJiAweEZGKTsKKwkJIk1JREkgRklGTzogT3V0MT0weCV4LCBPdXQyPTB4JXgsIEluMT0weCV4LCBJbjI9MHgleCBcbiIsCisJCWhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX21pZGlTdGF0dXNPdXQwKSAmIDB4RkYsCisJCWhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX21pZGlTdGF0dXNPdXQxKSAmIDB4RkYsCisJCWhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX21pZGlTdGF0dXNJbjApICYgMHhGRiwKKwkJaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMSkgJiAweEZGKTsKIAlzbmRfaXByaW50ZihidWZmZXIsCi0JCSAgICAiUmVnaXN0ZXI6IGN0cmwxPTB4JXgsIGN0cmwyPTB4JXgsIHN0YXR1czE9MHgleCwgIgotCQkgICAgInN0YXR1czI9MHgleFxuIiwKLQkJICAgIGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyLCBoZHNwbS0+Y29udHJvbDJfcmVnaXN0ZXIsCi0JCSAgICBzdGF0dXMsIHN0YXR1czIpOworCQkiTUlESW92ZXJNQURJIEZJRk86IEluPTB4JXgsIE91dD0weCV4IFxuIiwKKwkJaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMikgJiAweEZGLAorCQloZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9taWRpU3RhdHVzT3V0MikgJiAweEZGKTsKKwlzbmRfaXByaW50ZihidWZmZXIsCisJCSJSZWdpc3RlcjogY3RybDE9MHgleCwgY3RybDI9MHgleCwgc3RhdHVzMT0weCV4LCAiCisJCSJzdGF0dXMyPTB4JXhcbiIsCisJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyLCBoZHNwbS0+Y29udHJvbDJfcmVnaXN0ZXIsCisJCXN0YXR1cywgc3RhdHVzMik7CisJaWYgKHN0YXR1cyAmIEhEU1BNX3Rjb19kZXRlY3QpIHsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiVENPIG1vZHVsZSBkZXRlY3RlZC5cbiIpOworCQlhID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfVENPKzQpOworCQlpZiAoYSAmIEhEU1BNX1RDTzFfTFRDX0lucHV0X3ZhbGlkKSB7CisJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIExUQyB2YWxpZCwgIik7CisJCQlzd2l0Y2ggKGEgJiAoSERTUE1fVENPMV9MVENfRm9ybWF0X0xTQiB8CisJCQkJCQlIRFNQTV9UQ08xX0xUQ19Gb3JtYXRfTVNCKSkgeworCQkJY2FzZSAwOgorCQkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIjI0IGZwcywgIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEhEU1BNX1RDTzFfTFRDX0Zvcm1hdF9MU0I6CisJCQkJc25kX2lwcmludGYoYnVmZmVyLCAiMjUgZnBzLCAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSERTUE1fVENPMV9MVENfRm9ybWF0X01TQjoKKwkJCQlzbmRfaXByaW50ZihidWZmZXIsICIyOS45NyBmcHMsICIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzbmRfaXByaW50ZihidWZmZXIsICIzMCBmcHMsICIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGEgJiBIRFNQTV9UQ08xX3NldF9kcm9wX2ZyYW1lX2ZsYWcpIHsKKwkJCQlzbmRfaXByaW50ZihidWZmZXIsICJkcm9wIGZyYW1lXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJc25kX2lwcmludGYoYnVmZmVyLCAiZnVsbCBmcmFtZVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIG5vIExUQ1xuIik7CisJCX0KKwkJaWYgKGEgJiBIRFNQTV9UQ08xX1ZpZGVvX0lucHV0X0Zvcm1hdF9OVFNDKSB7CisJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIFZpZGVvOiBOVFNDXG4iKTsKKwkJfSBlbHNlIGlmIChhICYgSERTUE1fVENPMV9WaWRlb19JbnB1dF9Gb3JtYXRfUEFMKSB7CisJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIFZpZGVvOiBQQUxcbiIpOworCQl9IGVsc2UgeworCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBObyB2aWRlb1xuIik7CisJCX0KKwkJaWYgKGEgJiBIRFNQTV9UQ08xX1RDT19sb2NrKSB7CisJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIFN5bmM6IGxvY2tcbiIpOworCQl9IGVsc2UgeworCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBTeW5jOiBubyBsb2NrXG4iKTsKKwkJfQorCisJCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwkJY2FzZSBNQURJOgorCQljYXNlIEFFUzMyOgorCQkJZnJlcV9jb25zdCA9IDExMDA2OTMxMzQzMzYyNFVMTDsKKwkJCWJyZWFrOworCQljYXNlIFJheURBVDoKKwkJY2FzZSBBSU86CisJCQlmcmVxX2NvbnN0ID0gMTA0ODU3NjAwMDAwMDAwVUxMOworCQkJYnJlYWs7CisJCWNhc2UgTUFESWZhY2U6CisJCQlicmVhazsgLyogbm8gVENPIHBvc3NpYmxlICovCisJCX0KKworCQlwZXJpb2QgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9SRF9QTExfRlJFUSk7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBwZXJpb2Q6ICV1XG4iLCBwZXJpb2QpOworCisKKwkJLyogcmF0ZSA9IGZyZXFfY29uc3QvcGVyaW9kOyAqLworCQlyYXRlID0gZGl2X3U2NChmcmVxX2NvbnN0LCBwZXJpb2QpOworCisJCWlmIChjb250cm9sICYgSERTUE1fUXVhZFNwZWVkKSB7CisJCQlyYXRlICo9IDQ7CisJCX0gZWxzZSBpZiAoY29udHJvbCAmIEhEU1BNX0RvdWJsZVNwZWVkKSB7CisJCQlyYXRlICo9IDI7CisJCX0KKworCQlzbmRfaXByaW50ZihidWZmZXIsICIgIEZyZXF1ZW5jeTogJXUgSHpcbiIsCisJCQkJKHVuc2lnbmVkIGludCkgcmF0ZSk7CisKKwkJbHRjID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfVENPKTsKKwkJZnJhbWVzID0gbHRjICYgMHhGOworCQlsdGMgPj49IDQ7CisJCWZyYW1lcyArPSAobHRjICYgMHgzKSAqIDEwOworCQlsdGMgPj49IDQ7CisJCXNlY29uZHMgPSBsdGMgJiAweEY7CisJCWx0YyA+Pj0gNDsKKwkJc2Vjb25kcyArPSAobHRjICYgMHg3KSAqIDEwOworCQlsdGMgPj49IDQ7CisJCW1pbnV0ZXMgPSBsdGMgJiAweEY7CisJCWx0YyA+Pj0gNDsKKwkJbWludXRlcyArPSAobHRjICYgMHg3KSAqIDEwOworCQlsdGMgPj49IDQ7CisJCWhvdXJzID0gbHRjICYgMHhGOworCQlsdGMgPj49IDQ7CisJCWhvdXJzICs9IChsdGMgJiAweDMpICogMTA7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwKKwkJCSIgIExUQyBJbjogJTAyZDolMDJkOiUwMmQ6JTAyZFxuIiwKKwkJCWhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBmcmFtZXMpOworCisJfSBlbHNlIHsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiTm8gVENPIG1vZHVsZSBkZXRlY3RlZC5cbiIpOworCX0KIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIi0tLSBTZXR0aW5ncyAtLS1cbiIpOwogCiAJeCA9IDEgPDwgKDYgKyBoZHNwbV9kZWNvZGVfbGF0ZW5jeShoZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmCi0JCQkJCSAgIEhEU1BNX0xhdGVuY3lNYXNrKSk7CisJCQkJCQkJSERTUE1fTGF0ZW5jeU1hc2spKTsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwKLQkJICAgICJTaXplIChMYXRlbmN5KTogJWQgc2FtcGxlcyAoMiBwZXJpb2RzIG9mICVsdSBieXRlcylcbiIsCi0JCSAgICB4LCAodW5zaWduZWQgbG9uZykgaGRzcG0tPnBlcmlvZF9ieXRlcyk7CisJCSJTaXplIChMYXRlbmN5KTogJWQgc2FtcGxlcyAoMiBwZXJpb2RzIG9mICVsdSBieXRlcylcbiIsCisJCXgsICh1bnNpZ25lZCBsb25nKSBoZHNwbS0+cGVyaW9kX2J5dGVzKTsKIAotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkxpbmUgb3V0OiAlcywgICBQcmVjaXNlIFBvaW50ZXI6ICVzXG4iLAotCQkgICAgKGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUE1fTGluZU91dCkgPyAib24gIiA6ICJvZmYiLAotCQkgICAgKGhkc3BtLT5wcmVjaXNlX3B0cikgPyAib24iIDogIm9mZiIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkxpbmUgb3V0OiAlc1xuIiwKKwkJKGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUE1fTGluZU91dCkgPyAib24gIiA6ICJvZmYiKTsKIAogCXN3aXRjaCAoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9JbnB1dE1hc2spIHsKIAljYXNlIEhEU1BNX0lucHV0T3B0aWNhbDoKQEAgLTMwMTcsNjMgKzQ3MDUsMjIgQEAKIAkJaW5zZWwgPSAiQ29heGlhbCI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWluc2VsID0gIlVua25vd24iOworCQlpbnNlbCA9ICJVbmtvd24iOwogCX0KIAotCXN3aXRjaCAoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9TeW5jUmVmTWFzaykgewotCWNhc2UgSERTUE1fU3luY1JlZl9Xb3JkOgotCQlzeW5jcmVmID0gIldvcmRDbG9jayI7Ci0JCWJyZWFrOwotCWNhc2UgSERTUE1fU3luY1JlZl9NQURJOgotCQlzeW5jcmVmID0gIk1BREkiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzeW5jcmVmID0gIlVua25vd24iOwotCX0KLQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dHNlbCA9ICVzLCBTeW5jUmVmID0gJXNcbiIsIGluc2VsLAotCQkgICAgc3luY3JlZik7Ci0KIAlzbmRfaXByaW50ZihidWZmZXIsCi0JCSAgICAiQ2xlYXJUcmFja01hcmtlciA9ICVzLCBUcmFuc21pdCBpbiAlcyBDaGFubmVsIE1vZGUsICIKLQkJICAgICJBdXRvIElucHV0ICVzXG4iLAotCQkgICAgKGhkc3BtLT4KLQkJICAgICBjb250cm9sX3JlZ2lzdGVyICYgSERTUE1fY2xyX3RtcykgPyAib24iIDogIm9mZiIsCi0JCSAgICAoaGRzcG0tPgotCQkgICAgIGNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9UWF82NGNoKSA/ICI2NCIgOiAiNTYiLAotCQkgICAgKGhkc3BtLT4KLQkJICAgICBjb250cm9sX3JlZ2lzdGVyICYgSERTUE1fQXV0b0lucCkgPyAib24iIDogIm9mZiIpOworCQkiQ2xlYXJUcmFja01hcmtlciA9ICVzLCBUcmFuc21pdCBpbiAlcyBDaGFubmVsIE1vZGUsICIKKwkJIkF1dG8gSW5wdXQgJXNcbiIsCisJCShoZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BNX2Nscl90bXMpID8gIm9uIiA6ICJvZmYiLAorCQkoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9UWF82NGNoKSA/ICI2NCIgOiAiNTYiLAorCQkoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9BdXRvSW5wKSA/ICJvbiIgOiAib2ZmIik7CiAKLQlzd2l0Y2ggKGhkc3BtX2Nsb2NrX3NvdXJjZShoZHNwbSkpIHsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9BVVRPU1lOQzoKLQkJY2xvY2tfc291cmNlID0gIkF1dG9TeW5jIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfMzJLSFo6Ci0JCWNsb2NrX3NvdXJjZSA9ICJJbnRlcm5hbCAzMiBrSHoiOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80NF8xS0haOgotCQljbG9ja19zb3VyY2UgPSAiSW50ZXJuYWwgNDQuMSBrSHoiOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80OEtIWjoKLQkJY2xvY2tfc291cmNlID0gIkludGVybmFsIDQ4IGtIeiI7Ci0JCWJyZWFrOwotCWNhc2UgSERTUE1fQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzY0S0haOgotCQljbG9ja19zb3VyY2UgPSAiSW50ZXJuYWwgNjQga0h6IjsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfODhfMktIWjoKLQkJY2xvY2tfc291cmNlID0gIkludGVybmFsIDg4LjIga0h6IjsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfOTZLSFo6Ci0JCWNsb2NrX3NvdXJjZSA9ICJJbnRlcm5hbCA5NiBrSHoiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQljbG9ja19zb3VyY2UgPSAiRXJyb3IiOwotCX0KLQlzbmRfaXByaW50ZihidWZmZXIsICJTYW1wbGUgQ2xvY2sgU291cmNlOiAlc1xuIiwgY2xvY2tfc291cmNlKTsKKwogCWlmICghKGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUE1fQ2xvY2tNb2RlTWFzdGVyKSkKLQkJc3lzdGVtX2Nsb2NrX21vZGUgPSAiU2xhdmUiOworCQlzeXN0ZW1fY2xvY2tfbW9kZSA9ICJBdXRvU3luYyI7CiAJZWxzZQogCQlzeXN0ZW1fY2xvY2tfbW9kZSA9ICJNYXN0ZXIiOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN5c3RlbSBDbG9jayBNb2RlOiAlc1xuIiwgc3lzdGVtX2Nsb2NrX21vZGUpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkF1dG9TeW5jIFJlZmVyZW5jZTogJXNcbiIsIHN5c3RlbV9jbG9ja19tb2RlKTsKIAogCXN3aXRjaCAoaGRzcG1fcHJlZl9zeW5jX3JlZihoZHNwbSkpIHsKIAljYXNlIEhEU1BNX1NZTkNfRlJPTV9XT1JEOgpAQCAtMzA4MiwxNSArNDcyOSwyMSBAQAogCWNhc2UgSERTUE1fU1lOQ19GUk9NX01BREk6CiAJCXByZWZfc3luY19yZWYgPSAiTUFESSBTeW5jIjsKIAkJYnJlYWs7CisJY2FzZSBIRFNQTV9TWU5DX0ZST01fVENPOgorCQlwcmVmX3N5bmNfcmVmID0gIlRDTyI7CisJCWJyZWFrOworCWNhc2UgSERTUE1fU1lOQ19GUk9NX1NZTkNfSU46CisJCXByZWZfc3luY19yZWYgPSAiU3luYyBJbiI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByZWZfc3luY19yZWYgPSAiWFhYWCBDbG9jayI7CiAJCWJyZWFrOwogCX0KIAlzbmRfaXByaW50ZihidWZmZXIsICJQcmVmZXJyZWQgU3luYyBSZWZlcmVuY2U6ICVzXG4iLAotCQkgICAgcHJlZl9zeW5jX3JlZik7CisJCQlwcmVmX3N5bmNfcmVmKTsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN5c3RlbSBDbG9jayBGcmVxdWVuY3k6ICVkXG4iLAotCQkgICAgaGRzcG0tPnN5c3RlbV9zYW1wbGVfcmF0ZSk7CisJCQloZHNwbS0+c3lzdGVtX3NhbXBsZV9yYXRlKTsKIAogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiLS0tIFN0YXR1czpcbiIpOwpAQCAtMzA5OSwxMiArNDc1MiwxOCBAQAogCXgyID0gc3RhdHVzMiAmIEhEU1BNX3djU3luYzsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0cyBNQURJPSVzLCBXb3JkQ2xvY2s9JXNcbiIsCi0JCSAgICAoc3RhdHVzICYgSERTUE1fbWFkaUxvY2spID8gKHggPyAiU3luYyIgOiAiTG9jayIpIDoKLQkJICAgICJOb0xvY2siLAotCQkgICAgKHN0YXR1czIgJiBIRFNQTV93Y0xvY2spID8gKHgyID8gIlN5bmMiIDogIkxvY2siKSA6Ci0JCSAgICAiTm9Mb2NrIik7CisJCQkoc3RhdHVzICYgSERTUE1fbWFkaUxvY2spID8gKHggPyAiU3luYyIgOiAiTG9jayIpIDoKKwkJCSJOb0xvY2siLAorCQkJKHN0YXR1czIgJiBIRFNQTV93Y0xvY2spID8gKHgyID8gIlN5bmMiIDogIkxvY2siKSA6CisJCQkiTm9Mb2NrIik7CiAKIAlzd2l0Y2ggKGhkc3BtX2F1dG9zeW5jX3JlZihoZHNwbSkpIHsKKwljYXNlIEhEU1BNX0FVVE9TWU5DX0ZST01fU1lOQ19JTjoKKwkJYXV0b3N5bmNfcmVmID0gIlN5bmMgSW4iOworCQlicmVhazsKKwljYXNlIEhEU1BNX0FVVE9TWU5DX0ZST01fVENPOgorCQlhdXRvc3luY19yZWYgPSAiVENPIjsKKwkJYnJlYWs7CiAJY2FzZSBIRFNQTV9BVVRPU1lOQ19GUk9NX1dPUkQ6CiAJCWF1dG9zeW5jX3JlZiA9ICJXb3JkIENsb2NrIjsKIAkJYnJlYWs7CkBAIC0zMTE5LDE1ICs0Nzc4LDE1IEBACiAJCWJyZWFrOwogCX0KIAlzbmRfaXByaW50ZihidWZmZXIsCi0JCSAgICAiQXV0b1N5bmM6IFJlZmVyZW5jZT0gJXMsIEZyZXE9JWQgKE1BREkgPSAlZCwgV29yZCA9ICVkKVxuIiwKLQkJICAgIGF1dG9zeW5jX3JlZiwgaGRzcG1fZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcG0pLAotCQkgICAgKHN0YXR1cyAmIEhEU1BNX21hZGlGcmVxTWFzaykgPj4gMjIsCi0JCSAgICAoc3RhdHVzMiAmIEhEU1BNX3djRnJlcU1hc2spID4+IDUpOworCQkiQXV0b1N5bmM6IFJlZmVyZW5jZT0gJXMsIEZyZXE9JWQgKE1BREkgPSAlZCwgV29yZCA9ICVkKVxuIiwKKwkJYXV0b3N5bmNfcmVmLCBoZHNwbV9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwbSksCisJCShzdGF0dXMgJiBIRFNQTV9tYWRpRnJlcU1hc2spID4+IDIyLAorCQkoc3RhdHVzMiAmIEhEU1BNX3djRnJlcU1hc2spID4+IDUpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQ6ICVzLCBNb2RlPSVzXG4iLAotCQkgICAgKHN0YXR1cyAmIEhEU1BNX0FCX2ludCkgPyAiQ29heCIgOiAiT3B0aWNhbCIsCi0JCSAgICAoc3RhdHVzICYgSERTUE1fUlhfNjRjaCkgPyAiNjQgY2hhbm5lbHMiIDoKLQkJICAgICI1NiBjaGFubmVscyIpOworCQkoc3RhdHVzICYgSERTUE1fQUJfaW50KSA/ICJDb2F4IiA6ICJPcHRpY2FsIiwKKwkJKHN0YXR1cyAmIEhEU1BNX1JYXzY0Y2gpID8gIjY0IGNoYW5uZWxzIiA6CisJCSI1NiBjaGFubmVscyIpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIH0KQEAgLTMxNDIsOCArNDgwMSw2IEBACiAJdW5zaWduZWQgaW50IHRpbWVjb2RlOwogCWludCBwcmVmX3N5bmNyZWY7CiAJY2hhciAqYXV0b3N5bmNfcmVmOwotCWNoYXIgKnN5c3RlbV9jbG9ja19tb2RlOwotCWNoYXIgKmNsb2NrX3NvdXJjZTsKIAlpbnQgeDsKIAogCXN0YXR1cyA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKTsKQEAgLTMxODMsMjQgKzQ4NDAsMjcgQEAKIAkJICAgIGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX21pZGlTdGF0dXNJbjApICYgMHhGRiwKIAkJICAgIGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX21pZGlTdGF0dXNJbjEpICYgMHhGRik7CiAJc25kX2lwcmludGYoYnVmZmVyLAotCQkgICAgIlJlZ2lzdGVyOiBjdHJsMT0weCV4LCBzdGF0dXMxPTB4JXgsIHN0YXR1czI9MHgleCwgIgotCQkgICAgInRpbWVjb2RlPTB4JXhcbiIsCi0JCSAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciwKLQkJICAgIHN0YXR1cywgc3RhdHVzMiwgdGltZWNvZGUpOworCQkgICAgIk1JRElvdmVyTUFESSBGSUZPOiBJbj0weCV4LCBPdXQ9MHgleCBcbiIsCisJCSAgICBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9taWRpU3RhdHVzSW4yKSAmIDB4RkYsCisJCSAgICBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9taWRpU3RhdHVzT3V0MikgJiAweEZGKTsKKwlzbmRfaXByaW50ZihidWZmZXIsCisJCSAgICAiUmVnaXN0ZXI6IGN0cmwxPTB4JXgsIGN0cmwyPTB4JXgsIHN0YXR1czE9MHgleCwgIgorCQkgICAgInN0YXR1czI9MHgleFxuIiwKKwkJICAgIGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyLCBoZHNwbS0+Y29udHJvbDJfcmVnaXN0ZXIsCisJCSAgICBzdGF0dXMsIHN0YXR1czIpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiLS0tIFNldHRpbmdzIC0tLVxuIik7CiAKIAl4ID0gMSA8PCAoNiArIGhkc3BtX2RlY29kZV9sYXRlbmN5KGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICYKLQkJCQkJICAgSERTUE1fTGF0ZW5jeU1hc2spKTsKKwkJCQlIRFNQTV9MYXRlbmN5TWFzaykpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLAogCQkgICAgIlNpemUgKExhdGVuY3kpOiAlZCBzYW1wbGVzICgyIHBlcmlvZHMgb2YgJWx1IGJ5dGVzKVxuIiwKIAkJICAgIHgsICh1bnNpZ25lZCBsb25nKSBoZHNwbS0+cGVyaW9kX2J5dGVzKTsKIAotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkxpbmUgb3V0OiAlcywgICBQcmVjaXNlIFBvaW50ZXI6ICVzXG4iLAorCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkxpbmUgb3V0OiAlc1xuIiwKIAkJICAgIChoZHNwbS0+Ci0JCSAgICAgY29udHJvbF9yZWdpc3RlciAmIEhEU1BNX0xpbmVPdXQpID8gIm9uICIgOiAib2ZmIiwKLQkJICAgIChoZHNwbS0+cHJlY2lzZV9wdHIpID8gIm9uIiA6ICJvZmYiKTsKKwkJICAgICBjb250cm9sX3JlZ2lzdGVyICYgSERTUE1fTGluZU91dCkgPyAib24gIiA6ICJvZmYiKTsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwKIAkJICAgICJDbGVhclRyYWNrTWFya2VyICVzLCBFbXBoYXNpcyAlcywgRG9sYnkgJXNcbiIsCkBAIC0zMjExLDQ2ICs0ODcxLDYgQEAKIAkJICAgIChoZHNwbS0+CiAJCSAgICAgY29udHJvbF9yZWdpc3RlciAmIEhEU1BNX0RvbGJ5KSA/ICJvbiIgOiAib2ZmIik7CiAKLQlzd2l0Y2ggKGhkc3BtX2Nsb2NrX3NvdXJjZShoZHNwbSkpIHsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9BVVRPU1lOQzoKLQkJY2xvY2tfc291cmNlID0gIkF1dG9TeW5jIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfMzJLSFo6Ci0JCWNsb2NrX3NvdXJjZSA9ICJJbnRlcm5hbCAzMiBrSHoiOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80NF8xS0haOgotCQljbG9ja19zb3VyY2UgPSAiSW50ZXJuYWwgNDQuMSBrSHoiOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80OEtIWjoKLQkJY2xvY2tfc291cmNlID0gIkludGVybmFsIDQ4IGtIeiI7Ci0JCWJyZWFrOwotCWNhc2UgSERTUE1fQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzY0S0haOgotCQljbG9ja19zb3VyY2UgPSAiSW50ZXJuYWwgNjQga0h6IjsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfODhfMktIWjoKLQkJY2xvY2tfc291cmNlID0gIkludGVybmFsIDg4LjIga0h6IjsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfOTZLSFo6Ci0JCWNsb2NrX3NvdXJjZSA9ICJJbnRlcm5hbCA5NiBrSHoiOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF8xMjhLSFo6Ci0JCWNsb2NrX3NvdXJjZSA9ICJJbnRlcm5hbCAxMjgga0h6IjsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQTV9DTE9DS19TT1VSQ0VfSU5URVJOQUxfMTc2XzRLSFo6Ci0JCWNsb2NrX3NvdXJjZSA9ICJJbnRlcm5hbCAxNzYuNCBrSHoiOwotCQlicmVhazsKLQljYXNlIEhEU1BNX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF8xOTJLSFo6Ci0JCWNsb2NrX3NvdXJjZSA9ICJJbnRlcm5hbCAxOTIga0h6IjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJY2xvY2tfc291cmNlID0gIkVycm9yIjsKLQl9Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiU2FtcGxlIENsb2NrIFNvdXJjZTogJXNcbiIsIGNsb2NrX3NvdXJjZSk7Ci0JaWYgKCEoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9DbG9ja01vZGVNYXN0ZXIpKQotCQlzeXN0ZW1fY2xvY2tfbW9kZSA9ICJTbGF2ZSI7Ci0JZWxzZQotCQlzeXN0ZW1fY2xvY2tfbW9kZSA9ICJNYXN0ZXIiOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN5c3RlbSBDbG9jayBNb2RlOiAlc1xuIiwgc3lzdGVtX2Nsb2NrX21vZGUpOwogCiAJcHJlZl9zeW5jcmVmID0gaGRzcG1fcHJlZl9zeW5jX3JlZihoZHNwbSk7CiAJaWYgKHByZWZfc3luY3JlZiA9PSAwKQpAQCAtMzI3NCwzOCArNDg5NCwxMDggQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICItLS0gU3RhdHVzOlxuIik7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsICJXb3JkOiAlcyAgRnJlcXVlbmN5OiAlZFxuIiwKLQkJICAgIChzdGF0dXMgJiBIRFNQTV9BRVMzMl93Y0xvY2spPyAiU3luYyAgICIgOiAiTm8gTG9jayIsCisJCSAgICAoc3RhdHVzICYgSERTUE1fQUVTMzJfd2NMb2NrKSA/ICJTeW5jICAgIiA6ICJObyBMb2NrIiwKIAkJICAgIEhEU1BNX2JpdDJmcmVxKChzdGF0dXMgPj4gSERTUE1fQUVTMzJfd2NGcmVxX2JpdCkgJiAweEYpKTsKIAogCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiQUVTJWQ6ICVzICBGcmVxdWVuY3k6ICVkXG4iLAogCQkJICAgIHgrMSwKIAkJCSAgICAoc3RhdHVzMiAmIChIRFNQTV9Mb2NrQUVTID4+IHgpKSA/Ci0JCQkgICAgIlN5bmMgICAiOiAiTm8gTG9jayIsCisJCQkgICAgIlN5bmMgICAiIDogIk5vIExvY2siLAogCQkJICAgIEhEU1BNX2JpdDJmcmVxKCh0aW1lY29kZSA+PiAoNCp4KSkgJiAweEYpKTsKIAl9CiAKIAlzd2l0Y2ggKGhkc3BtX2F1dG9zeW5jX3JlZihoZHNwbSkpIHsKLQljYXNlIEhEU1BNX0FFUzMyX0FVVE9TWU5DX0ZST01fTk9ORTogYXV0b3N5bmNfcmVmPSJOb25lIjsgYnJlYWs7Ci0JY2FzZSBIRFNQTV9BRVMzMl9BVVRPU1lOQ19GUk9NX1dPUkQ6IGF1dG9zeW5jX3JlZj0iV29yZCBDbG9jayI7IGJyZWFrOwotCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVMxOiBhdXRvc3luY19yZWY9IkFFUzEiOyBicmVhazsKLQljYXNlIEhEU1BNX0FFUzMyX0FVVE9TWU5DX0ZST01fQUVTMjogYXV0b3N5bmNfcmVmPSJBRVMyIjsgYnJlYWs7Ci0JY2FzZSBIRFNQTV9BRVMzMl9BVVRPU1lOQ19GUk9NX0FFUzM6IGF1dG9zeW5jX3JlZj0iQUVTMyI7IGJyZWFrOwotCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVM0OiBhdXRvc3luY19yZWY9IkFFUzQiOyBicmVhazsKLQljYXNlIEhEU1BNX0FFUzMyX0FVVE9TWU5DX0ZST01fQUVTNTogYXV0b3N5bmNfcmVmPSJBRVM1IjsgYnJlYWs7Ci0JY2FzZSBIRFNQTV9BRVMzMl9BVVRPU1lOQ19GUk9NX0FFUzY6IGF1dG9zeW5jX3JlZj0iQUVTNiI7IGJyZWFrOwotCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVM3OiBhdXRvc3luY19yZWY9IkFFUzciOyBicmVhazsKLQljYXNlIEhEU1BNX0FFUzMyX0FVVE9TWU5DX0ZST01fQUVTODogYXV0b3N5bmNfcmVmPSJBRVM4IjsgYnJlYWs7Ci0JZGVmYXVsdDogYXV0b3N5bmNfcmVmID0gIi0tLSI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9OT05FOgorCQlhdXRvc3luY19yZWYgPSAiTm9uZSI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9XT1JEOgorCQlhdXRvc3luY19yZWYgPSAiV29yZCBDbG9jayI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVMxOgorCQlhdXRvc3luY19yZWYgPSAiQUVTMSI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVMyOgorCQlhdXRvc3luY19yZWYgPSAiQUVTMiI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVMzOgorCQlhdXRvc3luY19yZWYgPSAiQUVTMyI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVM0OgorCQlhdXRvc3luY19yZWYgPSAiQUVTNCI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVM1OgorCQlhdXRvc3luY19yZWYgPSAiQUVTNSI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVM2OgorCQlhdXRvc3luY19yZWYgPSAiQUVTNiI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVM3OgorCQlhdXRvc3luY19yZWYgPSAiQUVTNyI7IGJyZWFrOworCWNhc2UgSERTUE1fQUVTMzJfQVVUT1NZTkNfRlJPTV9BRVM4OgorCQlhdXRvc3luY19yZWYgPSAiQUVTOCI7IGJyZWFrOworCWRlZmF1bHQ6CisJCWF1dG9zeW5jX3JlZiA9ICItLS0iOyBicmVhazsKIAl9CiAJc25kX2lwcmludGYoYnVmZmVyLCAiQXV0b1N5bmMgcmVmID0gJXNcbiIsIGF1dG9zeW5jX3JlZik7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogfQogCitzdGF0aWMgdm9pZAorc25kX2hkc3BtX3Byb2NfcmVhZF9yYXlkYXQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCSBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IGhkc3BtICpoZHNwbSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IHN0YXR1czEsIHN0YXR1czIsIHN0YXR1czMsIGNvbnRyb2wsIGk7CisJdW5zaWduZWQgaW50IGxvY2ssIHN5bmM7CisKKwlzdGF0dXMxID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfU1RBVFVTXzEpOyAvKiBzMSAqLworCXN0YXR1czIgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9SRF9TVEFUVVNfMik7IC8qIGZyZXEgKi8KKwlzdGF0dXMzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfU1RBVFVTXzMpOyAvKiBzMiAqLworCisJY29udHJvbCA9IGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiU1RBVFVTMTogMHglMDh4XG4iLCBzdGF0dXMxKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJTVEFUVVMyOiAweCUwOHhcbiIsIHN0YXR1czIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlNUQVRVUzM6IDB4JTA4eFxuIiwgc3RhdHVzMyk7CisKKworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuKioqIENMT0NLIE1PREVcblxuIik7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJDbG9jayBtb2RlICAgICAgOiAlc1xuIiwKKwkJKGhkc3BtX3N5c3RlbV9jbG9ja19tb2RlKGhkc3BtKSA9PSAwKSA/ICJtYXN0ZXIiIDogInNsYXZlIik7CisJc25kX2lwcmludGYoYnVmZmVyLCAiU3lzdGVtIGZyZXF1ZW5jeTogJWQgSHpcbiIsCisJCWhkc3BtX2dldF9zeXN0ZW1fc2FtcGxlX3JhdGUoaGRzcG0pKTsKKworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuKioqIElOUFVUIFNUQVRVU1xuXG4iKTsKKworCWxvY2sgPSAweDE7CisJc3luYyA9IDB4MTAwOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzbmRfaXByaW50ZihidWZmZXIsICJzMV9pbnB1dCAlZDogTG9jayAlZCwgU3luYyAlZCwgRnJlcSAlc1xuIiwKKwkJCQlpLAorCQkJCShzdGF0dXMxICYgbG9jaykgPyAxIDogMCwKKwkJCQkoc3RhdHVzMSAmIHN5bmMpID8gMSA6IDAsCisJCQkJdGV4dHNfZnJlcVsoc3RhdHVzMiA+PiAoaSAqIDQpKSAmIDB4Rl0pOworCisJCWxvY2sgPSBsb2NrPDwxOworCQlzeW5jID0gc3luYzw8MTsKKwl9CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJXQyBpbnB1dDogTG9jayAlZCwgU3luYyAlZCwgRnJlcSAlc1xuIiwKKwkJCShzdGF0dXMxICYgMHgxMDAwMDAwKSA/IDEgOiAwLAorCQkJKHN0YXR1czEgJiAweDIwMDAwMDApID8gMSA6IDAsCisJCQl0ZXh0c19mcmVxWyhzdGF0dXMxID4+IDE2KSAmIDB4Rl0pOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiVENPIGlucHV0OiBMb2NrICVkLCBTeW5jICVkLCBGcmVxICVzXG4iLAorCQkJKHN0YXR1czEgJiAweDQwMDAwMDApID8gMSA6IDAsCisJCQkoc3RhdHVzMSAmIDB4ODAwMDAwMCkgPyAxIDogMCwKKwkJCXRleHRzX2ZyZXFbKHN0YXR1czEgPj4gMjApICYgMHhGXSk7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJTWU5DIElOOiBMb2NrICVkLCBTeW5jICVkLCBGcmVxICVzXG4iLAorCQkJKHN0YXR1czMgJiAweDQwMCkgPyAxIDogMCwKKwkJCShzdGF0dXMzICYgMHg4MDApID8gMSA6IDAsCisJCQl0ZXh0c19mcmVxWyhzdGF0dXMyID4+IDEyKSAmIDB4Rl0pOworCit9CisKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiBzdGF0aWMgdm9pZAotc25kX2hkc3BtX3Byb2NfcmVhZF9kZWJ1ZyhzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKiBlbnRyeSwKK3NuZF9oZHNwbV9wcm9jX3JlYWRfZGVidWcoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKIAkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQogewogCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwpAQCAtMzMyMiwxNiArNTAxMiw2OCBAQAogI2VuZGlmCiAKIAorc3RhdGljIHZvaWQgc25kX2hkc3BtX3Byb2NfcG9ydHNfaW4oc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCWludCBpOwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX2hkc3BtX3Byb2NfaW5pdChzdHJ1Y3QgaGRzcG0gKiBoZHNwbSkKKwlzbmRfaXByaW50ZihidWZmZXIsICIjIGdlbmVyYXRlZCBieSBoZHNwbVxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGRzcG0tPm1heF9jaGFubmVsc19pbjsgaSsrKSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVkPSVzXG4iLCBpKzEsIGhkc3BtLT5wb3J0X25hbWVzX2luW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9oZHNwbV9wcm9jX3BvcnRzX291dChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkJICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IGhkc3BtICpoZHNwbSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICIjIGdlbmVyYXRlZCBieSBoZHNwbVxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGRzcG0tPm1heF9jaGFubmVsc19vdXQ7IGkrKykgeworCQlzbmRfaXByaW50ZihidWZmZXIsICIlZD0lc1xuIiwgaSsxLCBoZHNwbS0+cG9ydF9uYW1lc19vdXRbaV0pOworCX0KK30KKworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX2hkc3BtX3Byb2NfaW5pdChzdHJ1Y3QgaGRzcG0gKmhkc3BtKQogewogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CiAKLQlpZiAoIXNuZF9jYXJkX3Byb2NfbmV3KGhkc3BtLT5jYXJkLCAiaGRzcG0iLCAmZW50cnkpKQotCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGhkc3BtLAotCQkJCSAgICAgIGhkc3BtLT5pc19hZXMzMiA/Ci0JCQkJICAgICAgc25kX2hkc3BtX3Byb2NfcmVhZF9hZXMzMiA6Ci0JCQkJICAgICAgc25kX2hkc3BtX3Byb2NfcmVhZF9tYWRpKTsKKwlpZiAoIXNuZF9jYXJkX3Byb2NfbmV3KGhkc3BtLT5jYXJkLCAiaGRzcG0iLCAmZW50cnkpKSB7CisJCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwkJY2FzZSBBRVMzMjoKKwkJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgaGRzcG0sCisJCQkJCXNuZF9oZHNwbV9wcm9jX3JlYWRfYWVzMzIpOworCQkJYnJlYWs7CisJCWNhc2UgTUFESToKKwkJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgaGRzcG0sCisJCQkJCXNuZF9oZHNwbV9wcm9jX3JlYWRfbWFkaSk7CisJCQlicmVhazsKKwkJY2FzZSBNQURJZmFjZToKKwkJCS8qIHNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgaGRzcG0sCisJCQkgc25kX2hkc3BtX3Byb2NfcmVhZF9tYWRpZmFjZSk7ICovCisJCQlicmVhazsKKwkJY2FzZSBSYXlEQVQ6CisJCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGhkc3BtLAorCQkJCQlzbmRfaGRzcG1fcHJvY19yZWFkX3JheWRhdCk7CisJCQlicmVhazsKKwkJY2FzZSBBSU86CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc25kX2NhcmRfcHJvY19uZXcoaGRzcG0tPmNhcmQsICJwb3J0cy5pbiIsICZlbnRyeSkpIHsKKwkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBoZHNwbSwgc25kX2hkc3BtX3Byb2NfcG9ydHNfaW4pOworCX0KKworCWlmICghc25kX2NhcmRfcHJvY19uZXcoaGRzcG0tPmNhcmQsICJwb3J0cy5vdXQiLCAmZW50cnkpKSB7CisJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgaGRzcG0sIHNuZF9oZHNwbV9wcm9jX3BvcnRzX291dCk7CisJfQorCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCS8qIGRlYnVnIGZpbGUgdG8gcmVhZCBhbGwgaGRzcG0gcmVnaXN0ZXJzICovCiAJaWYgKCFzbmRfY2FyZF9wcm9jX25ldyhoZHNwbS0+Y2FyZCwgImRlYnVnIiwgJmVudHJ5KSkKQEAgLTMzNDEsNDcgKzUwODMsNDggQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGhkc3BtIGludGl0aWFsaXplIAorICAgaGRzcG0gaW50aXRpYWxpemUKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IHNuZF9oZHNwbV9zZXRfZGVmYXVsdHMoc3RydWN0IGhkc3BtICogaGRzcG0pCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KIAkvKiBBU1NVTVBUSU9OOiBoZHNwbS0+bG9jayBpcyBlaXRoZXIgaGVsZCwgb3IgdGhlcmUgaXMgbm8gbmVlZCB0bwogCSAgIGhvbGQgaXQgKGUuZy4gZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbikuCi0JICovCisJICAgKi8KIAogCS8qIHNldCBkZWZhdWx0czogICAgICAgKi8KIAotCWlmIChoZHNwbS0+aXNfYWVzMzIpCisJaGRzcG0tPnNldHRpbmdzX3JlZ2lzdGVyID0gMDsKKworCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwljYXNlIE1BREk6CisJY2FzZSBNQURJZmFjZToKKwkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgPQorCQkJMHgyICsgMHg4ICsgMHgxMCArIDB4ODAgKyAweDQwMCArIDB4NDAwMCArIDB4MTAwMDAwMDsKKwkJYnJlYWs7CisKKwljYXNlIFJheURBVDoKKwljYXNlIEFJTzoKKwkJaGRzcG0tPnNldHRpbmdzX3JlZ2lzdGVyID0gMHgxICsgMHgxMDAwOworCQkvKiBNYWdpYyB2YWx1ZXMgYXJlOiBMQVRfMCwgTEFUXzIsIE1hc3RlciwgZnJlcTEsIHR4NjRjaCwgaW5wXzAsCisJCSAqIGxpbmVfb3V0ICovCisJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyID0KKwkJCTB4MiArIDB4OCArIDB4MTAgKyAweDgwICsgMHg0MDAgKyAweDQwMDAgKyAweDEwMDAwMDA7CisJCWJyZWFrOworCisJY2FzZSBBRVMzMjoKIAkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgPQogCQkJSERTUE1fQ2xvY2tNb2RlTWFzdGVyIHwJLyogTWFzdGVyIENsb2FjayBNb2RlIG9uICovCi0JCQloZHNwbV9lbmNvZGVfbGF0ZW5jeSg3KSB8IC8qIGxhdGVuY3kgbWF4aW11bSA9Ci0JCQkJCQkgICAqIDgxOTIgc2FtcGxlcwotCQkJCQkJICAgKi8KKwkJCWhkc3BtX2VuY29kZV9sYXRlbmN5KDcpIHwgLyogbGF0ZW5jeSBtYXg9ODE5MnNhbXBsZXMgKi8KIAkJCUhEU1BNX1N5bmNSZWYwIHwJLyogQUVTMSBpcyBzeW5jY2xvY2sgKi8KIAkJCUhEU1BNX0xpbmVPdXQgfAkvKiBBbmFsb2cgb3V0cHV0IGluICovCiAJCQlIRFNQTV9Qcm9mZXNzaW9uYWw7ICAvKiBQcm9mZXNzaW9uYWwgbW9kZSAqLwotCWVsc2UKLQkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgPQotCQkJSERTUE1fQ2xvY2tNb2RlTWFzdGVyIHwJLyogTWFzdGVyIENsb2FjayBNb2RlIG9uICovCi0JCQloZHNwbV9lbmNvZGVfbGF0ZW5jeSg3KSB8IC8qIGxhdGVuY3kgbWF4aW11bSA9Ci0JCQkJCQkgICAqIDgxOTIgc2FtcGxlcwotCQkJCQkJICAgKi8KLQkJCUhEU1BNX0lucHV0Q29heGlhbCB8CS8qIElucHV0IENvYXggbm90IE9wdGljYWwgKi8KLQkJCUhEU1BNX1N5bmNSZWZfTUFESSB8CS8qIE1hZGkgaXMgc3luY2Nsb2NrICovCi0JCQlIRFNQTV9MaW5lT3V0IHwJLyogQW5hbG9nIG91dHB1dCBpbiAqLwotCQkJSERTUE1fVFhfNjRjaCB8CS8qIHRyYW5zbWl0IGluIDY0Y2ggbW9kZSAqLwotCQkJSERTUE1fQXV0b0lucDsJLyogQXV0b0lucHV0IGNob3NzaW5nICh0YWtlb3ZlcikgKi8KLQotCS8qICEgSERTUE1fRnJlcXVlbmN5MHxIRFNQTV9GcmVxdWVuY3kxID0gNDQuMWtoeiAqLwotCS8qICEgIEhEU1BNX0RvdWJsZVNwZWVkIEhEU1BNX1F1YWRTcGVlZCA9IG5vcm1hbCBzcGVlZCAqLwotCS8qICEgSERTUE1fY2xyX3RtcyA9IGRvIG5vdCBjbGVhciBiaXRzIGluIHRyYWNrIG1hcmtzICovCisJCWJyZWFrOworCX0KIAogCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9jb250cm9sUmVnaXN0ZXIsIGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyKTsKIAotICAgICAgICBpZiAoIWhkc3BtLT5pc19hZXMzMikgeworCWlmIChBRVMzMiA9PSBoZHNwbS0+aW9fdHlwZSkgewogCQkvKiBObyBjb250cm9sMiByZWdpc3RlciBmb3IgQUVTMzIgKi8KICNpZmRlZiBTTkRSVl9CSUdfRU5ESUFOCiAJCWhkc3BtLT5jb250cm9sMl9yZWdpc3RlciA9IEhEU1BNX0JJR0VORElBTl9NT0RFOwpAQCAtMzM5Nyw1NyArNTE0MCw1OSBAQAogCiAJYWxsX2luX2FsbF9taXhlcihoZHNwbSwgMCAqIFVOSVRZX0dBSU4pOwogCi0JaWYgKGxpbmVfb3V0c19tb25pdG9yW2hkc3BtLT5kZXZdKSB7Ci0KLQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhEU1BNOiAiCi0JCQkgICAic2VuZGluZyBhbGwgcGxheWJhY2sgc3RyZWFtcyB0byBsaW5lIG91dHMuXG4iKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgSERTUE1fTUlYRVJfQ0hBTk5FTFM7IGkrKykgewotCQkJaWYgKGhkc3BtX3dyaXRlX3BiX2dhaW4oaGRzcG0sIGksIGksIFVOSVRZX0dBSU4pKQotCQkJCXJldHVybiAtRUlPOwotCQl9CisJaWYgKGhkc3BtLT5pb190eXBlID09IEFJTyB8fCBoZHNwbS0+aW9fdHlwZSA9PSBSYXlEQVQpIHsKKwkJaGRzcG1fd3JpdGUoaGRzcG0sIEhEU1BNX1dSX1NFVFRJTkdTLCBoZHNwbS0+c2V0dGluZ3NfcmVnaXN0ZXIpOwogCX0KIAogCS8qIHNldCBhIGRlZmF1bHQgcmF0ZSBzbyB0aGF0IHRoZSBjaGFubmVsIG1hcCBpcyBzZXQgdXAuICovCi0JaGRzcG0tPmNoYW5uZWxfbWFwID0gY2hhbm5lbF9tYXBfbWFkaV9zczsKLQloZHNwbV9zZXRfcmF0ZShoZHNwbSwgNDQxMDAsIDEpOworCWhkc3BtX3NldF9yYXRlKGhkc3BtLCA0ODAwMCwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgaW50ZXJydXB0IAorICAgaW50ZXJydXB0CiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGlycXJldHVybl90IHNuZF9oZHNwbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSAoc3RydWN0IGhkc3BtICopIGRldl9pZDsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCWludCBhdWRpbzsKLQlpbnQgbWlkaTA7Ci0JaW50IG1pZGkxOwotCXVuc2lnbmVkIGludCBtaWRpMHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgbWlkaTFzdGF0dXM7Ci0JaW50IHNjaGVkdWxlID0gMDsKKwlpbnQgaSwgYXVkaW8sIG1pZGksIHNjaGVkdWxlID0gMDsKKwkvKiBjeWNsZXNfdCBub3c7ICovCiAKIAlzdGF0dXMgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3Rlcik7CiAKIAlhdWRpbyA9IHN0YXR1cyAmIEhEU1BNX2F1ZGlvSVJRUGVuZGluZzsKLQltaWRpMCA9IHN0YXR1cyAmIEhEU1BNX21pZGkwSVJRUGVuZGluZzsKLQltaWRpMSA9IHN0YXR1cyAmIEhEU1BNX21pZGkxSVJRUGVuZGluZzsKKwltaWRpID0gc3RhdHVzICYgKEhEU1BNX21pZGkwSVJRUGVuZGluZyB8IEhEU1BNX21pZGkxSVJRUGVuZGluZyB8CisJCQlIRFNQTV9taWRpMklSUVBlbmRpbmcgfCBIRFNQTV9taWRpM0lSUVBlbmRpbmcpOwogCi0JaWYgKCFhdWRpbyAmJiAhbWlkaTAgJiYgIW1pZGkxKQorCS8qIG5vdyA9IGdldF9jeWNsZXMoKTsgKi8KKwkvKioKKwkgKiAgIExBVF8yLi5MQVRfMCBwZXJpb2QgIGNvdW50ZXIgKHdpbikgIGNvdW50ZXIgKG1hYykKKwkgKiAgICAgICAgICA2ICAgICAgIDQwOTYgICB+MjU2MDUzNDI1ICAgICB+NTE0NjcyMzU4CisJICogICAgICAgICAgNSAgICAgICAyMDQ4ICAgfjEyODAyNDk4MyAgICAgfjI1NzM3MzgyMQorCSAqICAgICAgICAgIDQgICAgICAgMTAyNCAgICB+NjQwMjM3MDYgICAgIH4xMjg3MTgwODkKKwkgKiAgICAgICAgICAzICAgICAgICA1MTIgICAgfjMyMDA1OTQ1ICAgICAgfjY0Mzg1OTk5CisJICogICAgICAgICAgMiAgICAgICAgMjU2ICAgIH4xNjAwMzAzOSAgICAgIH4zMjI2MDE3NgorCSAqICAgICAgICAgIDEgICAgICAgIDEyOCAgICAgfjc5OTg3MzggICAgICB+MTYxOTQ1MDcKKwkgKiAgICAgICAgICAwICAgICAgICAgNjQgICAgIH4zOTk4MjMxICAgICAgIH44MTkxNTU4CisJICoqLworCS8qCisJICAgc25kX3ByaW50ayhLRVJOX0lORk8gInNuZF9oZHNwbV9pbnRlcnJ1cHQgJWxsdSBAICVsbHhcbiIsCisJICAgbm93LWhkc3BtLT5sYXN0X2ludGVycnVwdCwgc3RhdHVzICYgMHhGRkMwKTsKKwkgICBoZHNwbS0+bGFzdF9pbnRlcnJ1cHQgPSBub3c7CisJKi8KKworCWlmICghYXVkaW8gJiYgIW1pZGkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9pbnRlcnJ1cHRDb25maXJtYXRpb24sIDApOwogCWhkc3BtLT5pcnFfY291bnQrKzsKIAotCW1pZGkwc3RhdHVzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMCkgJiAweGZmOwotCW1pZGkxc3RhdHVzID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMSkgJiAweGZmOwogCiAJaWYgKGF1ZGlvKSB7Ci0KIAkJaWYgKGhkc3BtLT5jYXB0dXJlX3N1YnN0cmVhbSkKIAkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoaGRzcG0tPmNhcHR1cmVfc3Vic3RyZWFtKTsKIApAQCAtMzQ1NSwxMTggKzUyMDAsNDQgQEAKIAkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoaGRzcG0tPnBsYXliYWNrX3N1YnN0cmVhbSk7CiAJfQogCi0JaWYgKG1pZGkwICYmIG1pZGkwc3RhdHVzKSB7Ci0JCS8qIHdlIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyBpbnB1dCB1bnRpbCBwcm9jZXNzaW5nCi0JCSAqIGlzIGRvbmUKLQkJICovCi0JCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQTV9NaWRpMEludGVycnVwdEVuYWJsZTsKLQkJaGRzcG1fd3JpdGUoaGRzcG0sIEhEU1BNX2NvbnRyb2xSZWdpc3RlciwKLQkJCSAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3Rlcik7Ci0JCWhkc3BtLT5taWRpWzBdLnBlbmRpbmcgPSAxOwotCQlzY2hlZHVsZSA9IDE7CisJaWYgKG1pZGkpIHsKKwkJaSA9IDA7CisJCXdoaWxlIChpIDwgaGRzcG0tPm1pZGlQb3J0cykgeworCQkJaWYgKChoZHNwbV9yZWFkKGhkc3BtLAorCQkJCWhkc3BtLT5taWRpW2ldLnN0YXR1c0luKSAmIDB4ZmYpICYmCisJCQkJCShzdGF0dXMgJiBoZHNwbS0+bWlkaVtpXS5pcnEpKSB7CisJCQkJLyogd2UgZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIGlucHV0IHVudGlsCisJCQkJICogcHJvY2Vzc2luZyBpcyBkb25lCisJCQkJICovCisJCQkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfmhkc3BtLT5taWRpW2ldLmllOworCQkJCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9jb250cm9sUmVnaXN0ZXIsCisJCQkJCQloZHNwbS0+Y29udHJvbF9yZWdpc3Rlcik7CisJCQkJaGRzcG0tPm1pZGlbaV0ucGVuZGluZyA9IDE7CisJCQkJc2NoZWR1bGUgPSAxOworCQkJfQorCisJCQlpKys7CisJCX0KKworCQlpZiAoc2NoZWR1bGUpCisJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZoZHNwbS0+bWlkaV90YXNrbGV0KTsKIAl9Ci0JaWYgKG1pZGkxICYmIG1pZGkxc3RhdHVzKSB7Ci0JCS8qIHdlIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyBpbnB1dCB1bnRpbCBwcm9jZXNzaW5nCi0JCSAqIGlzIGRvbmUKLQkJICovCi0JCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQTV9NaWRpMUludGVycnVwdEVuYWJsZTsKLQkJaGRzcG1fd3JpdGUoaGRzcG0sIEhEU1BNX2NvbnRyb2xSZWdpc3RlciwKLQkJCSAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3Rlcik7Ci0JCWhkc3BtLT5taWRpWzFdLnBlbmRpbmcgPSAxOwotCQlzY2hlZHVsZSA9IDE7Ci0JfQotCWlmIChzY2hlZHVsZSkKLQkJdGFza2xldF9zY2hlZHVsZSgmaGRzcG0tPm1pZGlfdGFza2xldCk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwY20gaW50ZXJmYWNlIAorICAgcGNtIGludGVyZmFjZQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAKLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfaGRzcG1faHdfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKgotCQkJCQkgICAgICBzdWJzdHJlYW0pCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX2hkc3BtX2h3X3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCisJCQkJCSAgICAgICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlyZXR1cm4gaGRzcG1faHdfcG9pbnRlcihoZHNwbSk7CiB9CiAKLXN0YXRpYyBjaGFyICpoZHNwbV9jaGFubmVsX2J1ZmZlcl9sb2NhdGlvbihzdHJ1Y3QgaGRzcG0gKiBoZHNwbSwKLQkJCQkJICAgaW50IHN0cmVhbSwgaW50IGNoYW5uZWwpCi17Ci0JaW50IG1hcHBlZF9jaGFubmVsOwotCi0JaWYgKHNuZF9CVUdfT04oY2hhbm5lbCA8IDAgfHwgY2hhbm5lbCA+PSBIRFNQTV9NQVhfQ0hBTk5FTFMpKQotCQlyZXR1cm4gTlVMTDsKLQotCW1hcHBlZF9jaGFubmVsID0gaGRzcG0tPmNoYW5uZWxfbWFwW2NoYW5uZWxdOwotCWlmIChtYXBwZWRfY2hhbm5lbCA8IDApCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCi0JCXJldHVybiBoZHNwbS0+Y2FwdHVyZV9idWZmZXIgKwotCQkgICAgbWFwcGVkX2NoYW5uZWwgKiBIRFNQTV9DSEFOTkVMX0JVRkZFUl9CWVRFUzsKLQllbHNlCi0JCXJldHVybiBoZHNwbS0+cGxheWJhY2tfYnVmZmVyICsKLQkJICAgIG1hcHBlZF9jaGFubmVsICogSERTUE1fQ0hBTk5FTF9CVUZGRVJfQllURVM7Ci19Ci0KLQotLyogZG9udCBrbm93IHdoeSBuZWVkIGl0ID8/PyAqLwotc3RhdGljIGludCBzbmRfaGRzcG1fcGxheWJhY2tfY29weShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICBpbnQgY2hhbm5lbCwgc25kX3BjbV91ZnJhbWVzX3QgcG9zLAotCQkJCSAgIHZvaWQgX191c2VyICpzcmMsIHNuZF9wY21fdWZyYW1lc190IGNvdW50KQotewotCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JY2hhciAqY2hhbm5lbF9idWY7Ci0KLQlpZiAoc25kX0JVR19PTihwb3MgKyBjb3VudCA+IEhEU1BNX0NIQU5ORUxfQlVGRkVSX0JZVEVTIC8gNCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2hhbm5lbF9idWYgPQotCQloZHNwbV9jaGFubmVsX2J1ZmZlcl9sb2NhdGlvbihoZHNwbSwgc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW0sCi0JCQkJCSAgICAgIGNoYW5uZWwpOwotCi0JaWYgKHNuZF9CVUdfT04oIWNoYW5uZWxfYnVmKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gY29weV9mcm9tX3VzZXIoY2hhbm5lbF9idWYgKyBwb3MgKiA0LCBzcmMsIGNvdW50ICogNCk7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX2hkc3BtX2NhcHR1cmVfY29weShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgIGludCBjaGFubmVsLCBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsCi0JCQkJICB2b2lkIF9fdXNlciAqZHN0LCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCWNoYXIgKmNoYW5uZWxfYnVmOwotCi0JaWYgKHNuZF9CVUdfT04ocG9zICsgY291bnQgPiBIRFNQTV9DSEFOTkVMX0JVRkZFUl9CWVRFUyAvIDQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNoYW5uZWxfYnVmID0KLQkJaGRzcG1fY2hhbm5lbF9idWZmZXJfbG9jYXRpb24oaGRzcG0sIHN1YnN0cmVhbS0+cHN0ci0+c3RyZWFtLAotCQkJCQkgICAgICBjaGFubmVsKTsKLQlpZiAoc25kX0JVR19PTighY2hhbm5lbF9idWYpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gY29weV90b191c2VyKGRzdCwgY2hhbm5lbF9idWYgKyBwb3MgKiA0LCBjb3VudCAqIDQpOwotfQotCi1zdGF0aWMgaW50IHNuZF9oZHNwbV9od19zaWxlbmNlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCWludCBjaGFubmVsLCBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsCi0JCQkJc25kX3BjbV91ZnJhbWVzX3QgY291bnQpCi17Ci0Jc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQljaGFyICpjaGFubmVsX2J1ZjsKLQotCWNoYW5uZWxfYnVmID0KLQkJaGRzcG1fY2hhbm5lbF9idWZmZXJfbG9jYXRpb24oaGRzcG0sIHN1YnN0cmVhbS0+cHN0ci0+c3RyZWFtLAotCQkJCQkgICAgICBjaGFubmVsKTsKLQlpZiAoc25kX0JVR19PTighY2hhbm5lbF9idWYpKQotCQlyZXR1cm4gLUVJTzsKLQltZW1zZXQoY2hhbm5lbF9idWYgKyBwb3MgKiA0LCAwLCBjb3VudCAqIDQpOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwbV9yZXNldChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKQEAgLTM1ODksNyArNTI2MCw3IEBACiAJCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CiAJCQlpZiAocyA9PSBvdGhlcikgewogCQkJCW9ydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9Ci0JCQkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyOworCQkJCQlydW50aW1lLT5zdGF0dXMtPmh3X3B0cjsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMzYyMSwxOSArNTI5MiwxOSBAQAogCQkvKiBUaGUgb3RoZXIgc3RyZWFtIGlzIG9wZW4sIGFuZCBub3QgYnkgdGhlIHNhbWUKIAkJICAgdGFzayBhcyB0aGlzIG9uZS4gTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmFtZXRlcnMKIAkJICAgdGhhdCBtYXR0ZXIgYXJlIHRoZSBzYW1lLgotCQkgKi8KKwkJICAgKi8KIAogCQlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSAhPSBoZHNwbS0+c3lzdGVtX3NhbXBsZV9yYXRlKSB7CiAJCQlzcGluX3VubG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKIAkJCV9zbmRfcGNtX2h3X3BhcmFtX3NldGVtcHR5KHBhcmFtcywKLQkJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKKwkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCiAJCWlmIChwYXJhbXNfcGVyaW9kX3NpemUocGFyYW1zKSAhPSBoZHNwbS0+cGVyaW9kX2J5dGVzIC8gNCkgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZoZHNwbS0+bG9jayk7CiAJCQlfc25kX3BjbV9od19wYXJhbV9zZXRlbXB0eShwYXJhbXMsCi0JCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfU0laRSk7CisJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfU0laRSk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKQEAgLTM2NDYsMTggKzUzMTcsMjAgQEAKIAlzcGluX2xvY2tfaXJxKCZoZHNwbS0+bG9jayk7CiAJZXJyID0gaGRzcG1fc2V0X3JhdGUoaGRzcG0sIHBhcmFtc19yYXRlKHBhcmFtcyksIDApOwogCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJlcnIgb24gaGRzcG1fc2V0X3JhdGU6ICVkXG4iLCBlcnIpOwogCQlzcGluX3VubG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKIAkJX3NuZF9wY21faHdfcGFyYW1fc2V0ZW1wdHkocGFyYW1zLAotCQkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSk7CisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKIAogCWVyciA9IGhkc3BtX3NldF9pbnRlcnJ1cHRfaW50ZXJ2YWwoaGRzcG0sCi0JCQkJCSAgIHBhcmFtc19wZXJpb2Rfc2l6ZShwYXJhbXMpKTsKKwkJCXBhcmFtc19wZXJpb2Rfc2l6ZShwYXJhbXMpKTsKIAlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZXJyIG9uIGhkc3BtX3NldF9pbnRlcnJ1cHRfaW50ZXJ2YWw6ICVkXG4iLCBlcnIpOwogCQlfc25kX3BjbV9od19wYXJhbV9zZXRlbXB0eShwYXJhbXMsCi0JCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfU0laRSk7CisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTM2NjcsMTAgKzUzNDAsMTMgQEAKIAkvKiBtYWxsb2MgYWxsIGJ1ZmZlciBldmVuIGlmIG5vdCBlbmFibGVkIHRvIGdldCBzdXJlICovCiAJLyogVXBkYXRlIGZvciBNQURJIHJldiAyMDQ6IHdlIG5lZWQgdG8gYWxsb2NhdGUgZm9yIGFsbCBjaGFubmVscywKIAkgKiBvdGhlcndpc2UgaXQgZG9lc24ndCB3b3JrIGF0IDk2a0h6ICovCisKIAllcnIgPQotCSAgICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBIRFNQTV9ETUFfQVJFQV9CWVRFUyk7Ci0JaWYgKGVyciA8IDApCisJCXNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIEhEU1BNX0RNQV9BUkVBX0JZVEVTKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZXJyIG9uIHNuZF9wY21fbGliX21hbGxvY19wYWdlczogJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CisJfQogCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKIApAQCAtMzY4MSw3ICs1MzU3LDcgQEAKIAkJCXNuZF9oZHNwbV9lbmFibGVfb3V0KGhkc3BtLCBpLCAxKTsKIAogCQloZHNwbS0+cGxheWJhY2tfYnVmZmVyID0KLQkJICAgICh1bnNpZ25lZCBjaGFyICopIHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWE7CisJCQkodW5zaWduZWQgY2hhciAqKSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhOwogCQlzbmRfcHJpbnRkZCgiQWxsb2NhdGVkIHNhbXBsZSBidWZmZXIgZm9yIHBsYXliYWNrIGF0ICVwXG4iLAogCQkJCWhkc3BtLT5wbGF5YmFja19idWZmZXIpOwogCX0gZWxzZSB7CkBAIC0zNjkyLDIzICs1MzY4LDQwIEBACiAJCQlzbmRfaGRzcG1fZW5hYmxlX2luKGhkc3BtLCBpLCAxKTsKIAogCQloZHNwbS0+Y2FwdHVyZV9idWZmZXIgPQotCQkgICAgKHVuc2lnbmVkIGNoYXIgKikgc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYTsKKwkJCSh1bnNpZ25lZCBjaGFyICopIHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWE7CiAJCXNuZF9wcmludGRkKCJBbGxvY2F0ZWQgc2FtcGxlIGJ1ZmZlciBmb3IgY2FwdHVyZSBhdCAlcFxuIiwKIAkJCQloZHNwbS0+Y2FwdHVyZV9idWZmZXIpOwogCX0KKwogCS8qCiAJICAgc25kX3ByaW50ZGQoIkFsbG9jYXRlZCBzYW1wbGUgYnVmZmVyIGZvciAlcyBhdCAweCUwOFhcbiIsCiAJICAgc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA/CiAJICAgInBsYXliYWNrIiA6ICJjYXB0dXJlIiwKIAkgICBzbmRfcGNtX3NnYnVmX2dldF9hZGRyKHN1YnN0cmVhbSwgMCkpOwotCSAqLworCSAgICovCiAJLyoKLQlzbmRfcHJpbnRkZCgic2V0X2h3cGFyYW1zOiAlcyAlZCBIeiwgJWQgY2hhbm5lbHMsIGJzID0gJWRcbiIsCi0JCQlzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID8KLQkJCSAgInBsYXliYWNrIiA6ICJjYXB0dXJlIiwKLQkJCXBhcmFtc19yYXRlKHBhcmFtcyksIHBhcmFtc19jaGFubmVscyhwYXJhbXMpLAotCQkJcGFyYW1zX2J1ZmZlcl9zaXplKHBhcmFtcykpOwotCSovCisJICAgc25kX3ByaW50ZGQoInNldF9od3BhcmFtczogJXMgJWQgSHosICVkIGNoYW5uZWxzLCBicyA9ICVkXG4iLAorCSAgIHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgPworCSAgICJwbGF5YmFjayIgOiAiY2FwdHVyZSIsCisJICAgcGFyYW1zX3JhdGUocGFyYW1zKSwgcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyksCisJICAgcGFyYW1zX2J1ZmZlcl9zaXplKHBhcmFtcykpOworCSAgICovCisKKworCS8qIFN3aXRjaCB0byBuYXRpdmUgZmxvYXQgZm9ybWF0IGlmIHJlcXVlc3RlZCAqLworCWlmIChTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFID09IHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCQlpZiAoIShoZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BlX0ZMT0FUX0ZPUk1BVCkpCisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiaGRzcG06IFN3aXRjaGluZyB0byBuYXRpdmUgMzJiaXQgTEUgZmxvYXQgZm9ybWF0LlxuIik7CisKKwkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUGVfRkxPQVRfRk9STUFUOworCX0gZWxzZSBpZiAoU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUgPT0gcGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJCWlmIChoZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BlX0ZMT0FUX0ZPUk1BVCkKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJoZHNwbTogU3dpdGNoaW5nIHRvIG5hdGl2ZSAzMmJpdCBMRSBpbnRlZ2VyIGZvcm1hdC5cbiIpOworCisJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQZV9GTE9BVF9GT1JNQVQ7CisJfQorCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9jb250cm9sUmVnaXN0ZXIsIGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zNzE5LDE0ICs1NDEyLDE0IEBACiAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewogCi0JCS8qIHBhcmFtc19jaGFubmVscyhwYXJhbXMpIHNob3VsZCBiZSBlbm91Z2gsIAorCQkvKiBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSBzaG91bGQgYmUgZW5vdWdoLAogCQkgICBidXQgdG8gZ2V0IHN1cmUgaW4gY2FzZSBvZiBlcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgSERTUE1fTUFYX0NIQU5ORUxTOyArK2kpCisJCWZvciAoaSA9IDA7IGkgPCBoZHNwbS0+bWF4X2NoYW5uZWxzX291dDsgKytpKQogCQkJc25kX2hkc3BtX2VuYWJsZV9vdXQoaGRzcG0sIGksIDApOwogCiAJCWhkc3BtLT5wbGF5YmFja19idWZmZXIgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBIRFNQTV9NQVhfQ0hBTk5FTFM7ICsraSkKKwkJZm9yIChpID0gMDsgaSA8IGhkc3BtLT5tYXhfY2hhbm5lbHNfaW47ICsraSkKIAkJCXNuZF9oZHNwbV9lbmFibGVfaW4oaGRzcG0sIGksIDApOwogCiAJCWhkc3BtLT5jYXB0dXJlX2J1ZmZlciA9IE5VTEw7CkBAIC0zNzM4LDM3ICs1NDMxLDU4IEBACiAJcmV0dXJuIDA7CiB9CiAKKwogc3RhdGljIGludCBzbmRfaGRzcG1fY2hhbm5lbF9pbmZvKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvICogaW5mbykKKwkJc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvICppbmZvKQogewogCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JaW50IG1hcHBlZF9jaGFubmVsOwogCi0JaWYgKHNuZF9CVUdfT04oaW5mby0+Y2hhbm5lbCA+PSBIRFNQTV9NQVhfQ0hBTk5FTFMpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAoc25kX0JVR19PTihpbmZvLT5jaGFubmVsID49IGhkc3BtLT5tYXhfY2hhbm5lbHNfb3V0KSkgeworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gInNuZF9oZHNwbV9jaGFubmVsX2luZm86IG91dHB1dCBjaGFubmVsIG91dCBvZiByYW5nZSAoJWQpXG4iLCBpbmZvLT5jaGFubmVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKLQltYXBwZWRfY2hhbm5lbCA9IGhkc3BtLT5jaGFubmVsX21hcFtpbmZvLT5jaGFubmVsXTsKLQlpZiAobWFwcGVkX2NoYW5uZWwgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGhkc3BtLT5jaGFubmVsX21hcF9vdXRbaW5mby0+Y2hhbm5lbF0gPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAic25kX2hkc3BtX2NoYW5uZWxfaW5mbzogb3V0cHV0IGNoYW5uZWwgJWQgbWFwcGVkIG91dFxuIiwgaW5mby0+Y2hhbm5lbCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCi0JaW5mby0+b2Zmc2V0ID0gbWFwcGVkX2NoYW5uZWwgKiBIRFNQTV9DSEFOTkVMX0JVRkZFUl9CWVRFUzsKKwkJaW5mby0+b2Zmc2V0ID0gaGRzcG0tPmNoYW5uZWxfbWFwX291dFtpbmZvLT5jaGFubmVsXSAqCisJCQlIRFNQTV9DSEFOTkVMX0JVRkZFUl9CWVRFUzsKKwl9IGVsc2UgeworCQlpZiAoc25kX0JVR19PTihpbmZvLT5jaGFubmVsID49IGhkc3BtLT5tYXhfY2hhbm5lbHNfaW4pKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAic25kX2hkc3BtX2NoYW5uZWxfaW5mbzogaW5wdXQgY2hhbm5lbCBvdXQgb2YgcmFuZ2UgKCVkKVxuIiwgaW5mby0+Y2hhbm5lbCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChoZHNwbS0+Y2hhbm5lbF9tYXBfaW5baW5mby0+Y2hhbm5lbF0gPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAic25kX2hkc3BtX2NoYW5uZWxfaW5mbzogaW5wdXQgY2hhbm5lbCAlZCBtYXBwZWQgb3V0XG4iLCBpbmZvLT5jaGFubmVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaW5mby0+b2Zmc2V0ID0gaGRzcG0tPmNoYW5uZWxfbWFwX2luW2luZm8tPmNoYW5uZWxdICoKKwkJCUhEU1BNX0NIQU5ORUxfQlVGRkVSX0JZVEVTOworCX0KKwogCWluZm8tPmZpcnN0ID0gMDsKIAlpbmZvLT5zdGVwID0gMzI7CiAJcmV0dXJuIDA7CiB9CiAKKwogc3RhdGljIGludCBzbmRfaGRzcG1faW9jdGwoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCisJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX0lPQ1RMMV9SRVNFVDoKIAkJcmV0dXJuIHNuZF9oZHNwbV9yZXNldChzdWJzdHJlYW0pOwogCiAJY2FzZSBTTkRSVl9QQ01fSU9DVEwxX0NIQU5ORUxfSU5GTzoKLQl7Ci0JCXN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyAqaW5mbyA9IGFyZzsKLQkJcmV0dXJuIHNuZF9oZHNwbV9jaGFubmVsX2luZm8oc3Vic3RyZWFtLCBpbmZvKTsKLQl9CisJCXsKKwkJCXN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyAqaW5mbyA9IGFyZzsKKwkJCXJldHVybiBzbmRfaGRzcG1fY2hhbm5lbF9pbmZvKHN1YnN0cmVhbSwgaW5mbyk7CisJCX0KIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0zODE1LDE5ICs1NTI5LDE5IEBACiAJCX0KIAkJaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCkgewogCQkJaWYgKCEocnVubmluZyAmICgxIDw8IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spKQotCQkJICAgICYmIHN1YnN0cmVhbS0+c3RyZWFtID09Ci0JCQkgICAgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQorCQkJCQkmJiBzdWJzdHJlYW0tPnN0cmVhbSA9PQorCQkJCQlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCiAJCQkJaGRzcG1fc2lsZW5jZV9wbGF5YmFjayhoZHNwbSk7CiAJCX0gZWxzZSB7CiAJCQlpZiAocnVubmluZyAmJgotCQkJICAgIHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQkJc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJCQloZHNwbV9zaWxlbmNlX3BsYXliYWNrKGhkc3BtKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCiAJCQloZHNwbV9zaWxlbmNlX3BsYXliYWNrKGhkc3BtKTsKIAl9Ci0gICAgICBfb2s6Citfb2s6CiAJc25kX3BjbV90cmlnZ2VyX2RvbmUoc3Vic3RyZWFtLCBzdWJzdHJlYW0pOwogCWlmICghaGRzcG0tPnJ1bm5pbmcgJiYgcnVubmluZykKIAkJaGRzcG1fc3RhcnRfYXVkaW8oaGRzcG0pOwpAQCAtMzg0NCw4ICs1NTU4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGVyaW9kX3NpemVzW10gPQotICAgIHsgNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGVyaW9kX3NpemVzX29sZFtdID0geworCTY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCA0MDk2Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHBlcmlvZF9zaXplc19uZXdbXSA9IHsKKwkzMiwgNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYKK307CisKKy8qIFJheURBVCBhbmQgQUlPIGFsd2F5cyBoYXZlIGEgYnVmZmVyIG9mIDE2Mzg0IHNhbXBsZXMgcGVyIGNoYW5uZWwgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmF5ZGF0X2Fpb19idWZmZXJfc2l6ZXNbXSA9IHsKKwkxNjM4NAorfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9oZHNwbV9wbGF5YmFja19zdWJpbmZvID0gewogCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfApAQCAtMzg2Niw5ICs1NTkwLDkgQEAKIAkuYnVmZmVyX2J5dGVzX21heCA9CiAJICAgIEhEU1BNX0NIQU5ORUxfQlVGRkVSX0JZVEVTICogSERTUE1fTUFYX0NIQU5ORUxTLAogCS5wZXJpb2RfYnl0ZXNfbWluID0gKDY0ICogNCksCi0JLnBlcmlvZF9ieXRlc19tYXggPSAoODE5MiAqIDQpICogSERTUE1fTUFYX0NIQU5ORUxTLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gKDQwOTYgKiA0KSAqIEhEU1BNX01BWF9DSEFOTkVMUywKIAkucGVyaW9kc19taW4gPSAyLAotCS5wZXJpb2RzX21heCA9IDIsCisJLnBlcmlvZHNfbWF4ID0gNTEyLAogCS5maWZvX3NpemUgPSAwCiB9OwogCkBAIC0zODkxLDIxICs1NjE1LDMyIEBACiAJLmJ1ZmZlcl9ieXRlc19tYXggPQogCSAgICBIRFNQTV9DSEFOTkVMX0JVRkZFUl9CWVRFUyAqIEhEU1BNX01BWF9DSEFOTkVMUywKIAkucGVyaW9kX2J5dGVzX21pbiA9ICg2NCAqIDQpLAotCS5wZXJpb2RfYnl0ZXNfbWF4ID0gKDgxOTIgKiA0KSAqIEhEU1BNX01BWF9DSEFOTkVMUywKKwkucGVyaW9kX2J5dGVzX21heCA9ICg0MDk2ICogNCkgKiBIRFNQTV9NQVhfQ0hBTk5FTFMsCiAJLnBlcmlvZHNfbWluID0gMiwKLQkucGVyaW9kc19tYXggPSAyLAorCS5wZXJpb2RzX21heCA9IDUxMiwKIAkuZmlmb19zaXplID0gMAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBod19jb25zdHJhaW50c19wZXJpb2Rfc2l6ZXMgPSB7Ci0JLmNvdW50ID0gQVJSQVlfU0laRShwZXJpb2Rfc2l6ZXMpLAotCS5saXN0ID0gcGVyaW9kX3NpemVzLAorc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBod19jb25zdHJhaW50c19wZXJpb2Rfc2l6ZXNfb2xkID0geworCS5jb3VudCA9IEFSUkFZX1NJWkUocGVyaW9kX3NpemVzX29sZCksCisJLmxpc3QgPSBwZXJpb2Rfc2l6ZXNfb2xkLAogCS5tYXNrID0gMAogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBod19jb25zdHJhaW50c19wZXJpb2Rfc2l6ZXNfbmV3ID0geworCS5jb3VudCA9IEFSUkFZX1NJWkUocGVyaW9kX3NpemVzX25ldyksCisJLmxpc3QgPSBwZXJpb2Rfc2l6ZXNfbmV3LAorCS5tYXNrID0gMAorfTsKIAotc3RhdGljIGludCBzbmRfaGRzcG1faHdfcnVsZV9jaGFubmVsc19yYXRlKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICogcnVsZSkKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgaHdfY29uc3RyYWludHNfcmF5ZGF0X2lvX2J1ZmZlciA9IHsKKwkuY291bnQgPSBBUlJBWV9TSVpFKHJheWRhdF9haW9fYnVmZmVyX3NpemVzKSwKKwkubGlzdCA9IHJheWRhdF9haW9fYnVmZmVyX3NpemVzLAorCS5tYXNrID0gMAorfTsKKworc3RhdGljIGludCBzbmRfaGRzcG1faHdfcnVsZV9pbl9jaGFubmVsc19yYXRlKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQogewogCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBydWxlLT5wcml2YXRlOwogCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMgPQpAQCAtMzkxMywyNSArNTY0OCwzMyBAQAogCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnIgPQogCSAgICBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKIAotCWlmIChyLT5taW4gPiA0ODAwMCAmJiByLT5tYXggPD0gOTYwMDApIHsKKwlpZiAoci0+bWluID4gOTYwMDAgJiYgci0+bWF4IDw9IDE5MjAwMCkgewogCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7Ci0JCQkubWluID0gaGRzcG0tPmRzX2NoYW5uZWxzLAotCQkJLm1heCA9IGhkc3BtLT5kc19jaGFubmVscywKKwkJCS5taW4gPSBoZHNwbS0+cXNfaW5fY2hhbm5lbHMsCisJCQkubWF4ID0gaGRzcG0tPnFzX2luX2NoYW5uZWxzLAorCQkJLmludGVnZXIgPSAxLAorCQl9OworCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmdCk7CisJfSBlbHNlIGlmIChyLT5taW4gPiA0ODAwMCAmJiByLT5tYXggPD0gOTYwMDApIHsKKwkJc3RydWN0IHNuZF9pbnRlcnZhbCB0ID0geworCQkJLm1pbiA9IGhkc3BtLT5kc19pbl9jaGFubmVscywKKwkJCS5tYXggPSBoZHNwbS0+ZHNfaW5fY2hhbm5lbHMsCiAJCQkuaW50ZWdlciA9IDEsCiAJCX07CiAJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsKIAl9IGVsc2UgaWYgKHItPm1heCA8IDY0MDAwKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKLQkJCS5taW4gPSBoZHNwbS0+c3NfY2hhbm5lbHMsCi0JCQkubWF4ID0gaGRzcG0tPnNzX2NoYW5uZWxzLAorCQkJLm1pbiA9IGhkc3BtLT5zc19pbl9jaGFubmVscywKKwkJCS5tYXggPSBoZHNwbS0+c3NfaW5fY2hhbm5lbHMsCiAJCQkuaW50ZWdlciA9IDEsCiAJCX07CiAJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfaGRzcG1faHdfcnVsZV9yYXRlX2NoYW5uZWxzKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIGludCBzbmRfaGRzcG1faHdfcnVsZV9vdXRfY2hhbm5lbHNfcmF0ZShzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKIAkJCQkJICAgc3RydWN0IHNuZF9wY21faHdfcnVsZSAqIHJ1bGUpCiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IHJ1bGUtPnByaXZhdGU7CkBAIC0zOTQwLDQyICs1NjgzLDEyNyBAQAogCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnIgPQogCSAgICBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKIAotCWlmIChjLT5taW4gPj0gaGRzcG0tPnNzX2NoYW5uZWxzKSB7CisJaWYgKHItPm1pbiA+IDk2MDAwICYmIHItPm1heCA8PSAxOTIwMDApIHsKKwkJc3RydWN0IHNuZF9pbnRlcnZhbCB0ID0geworCQkJLm1pbiA9IGhkc3BtLT5xc19vdXRfY2hhbm5lbHMsCisJCQkubWF4ID0gaGRzcG0tPnFzX291dF9jaGFubmVscywKKwkJCS5pbnRlZ2VyID0gMSwKKwkJfTsKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOworCX0gZWxzZSBpZiAoci0+bWluID4gNDgwMDAgJiYgci0+bWF4IDw9IDk2MDAwKSB7CisJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKKwkJCS5taW4gPSBoZHNwbS0+ZHNfb3V0X2NoYW5uZWxzLAorCQkJLm1heCA9IGhkc3BtLT5kc19vdXRfY2hhbm5lbHMsCisJCQkuaW50ZWdlciA9IDEsCisJCX07CisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsKKwl9IGVsc2UgaWYgKHItPm1heCA8IDY0MDAwKSB7CisJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKKwkJCS5taW4gPSBoZHNwbS0+c3Nfb3V0X2NoYW5uZWxzLAorCQkJLm1heCA9IGhkc3BtLT5zc19vdXRfY2hhbm5lbHMsCisJCQkuaW50ZWdlciA9IDEsCisJCX07CisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsKKwl9IGVsc2UgeworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaGRzcG1faHdfcnVsZV9yYXRlX2luX2NoYW5uZWxzKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICogcnVsZSkKK3sKKwlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gcnVsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc25kX2ludGVydmFsICpjID0KKwkgICAgaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnIgPQorCSAgICBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKKworCWlmIChjLT5taW4gPj0gaGRzcG0tPnNzX2luX2NoYW5uZWxzKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKIAkJCS5taW4gPSAzMjAwMCwKIAkJCS5tYXggPSA0ODAwMCwKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKIAkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUociwgJnQpOwotCX0gZWxzZSBpZiAoYy0+bWF4IDw9IGhkc3BtLT5kc19jaGFubmVscykgeworCX0gZWxzZSBpZiAoYy0+bWF4IDw9IGhkc3BtLT5xc19pbl9jaGFubmVscykgeworCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7CisJCQkubWluID0gMTI4MDAwLAorCQkJLm1heCA9IDE5MjAwMCwKKwkJCS5pbnRlZ2VyID0gMSwKKwkJfTsKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUociwgJnQpOworCX0gZWxzZSBpZiAoYy0+bWF4IDw9IGhkc3BtLT5kc19pbl9jaGFubmVscykgewogCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7CiAJCQkubWluID0gNjQwMDAsCiAJCQkubWF4ID0gOTYwMDAsCiAJCQkuaW50ZWdlciA9IDEsCiAJCX07Ci0KIAkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUociwgJnQpOwogCX0KKworCXJldHVybiAwOworfQorc3RhdGljIGludCBzbmRfaGRzcG1faHdfcnVsZV9yYXRlX291dF9jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkJICAgc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkKK3sKKwlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gcnVsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc25kX2ludGVydmFsICpjID0KKwkgICAgaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnIgPQorCSAgICBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKKworCWlmIChjLT5taW4gPj0gaGRzcG0tPnNzX291dF9jaGFubmVscykgeworCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7CisJCQkubWluID0gMzIwMDAsCisJCQkubWF4ID0gNDgwMDAsCisJCQkuaW50ZWdlciA9IDEsCisJCX07CisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKHIsICZ0KTsKKwl9IGVsc2UgaWYgKGMtPm1heCA8PSBoZHNwbS0+cXNfb3V0X2NoYW5uZWxzKSB7CisJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKKwkJCS5taW4gPSAxMjgwMDAsCisJCQkubWF4ID0gMTkyMDAwLAorCQkJLmludGVnZXIgPSAxLAorCQl9OworCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShyLCAmdCk7CisJfSBlbHNlIGlmIChjLT5tYXggPD0gaGRzcG0tPmRzX291dF9jaGFubmVscykgeworCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7CisJCQkubWluID0gNjQwMDAsCisJCQkubWF4ID0gOTYwMDAsCisJCQkuaW50ZWdlciA9IDEsCisJCX07CisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKHIsICZ0KTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfaGRzcG1faHdfcnVsZV9jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKK3N0YXRpYyBpbnQgc25kX2hkc3BtX2h3X3J1bGVfaW5fY2hhbm5lbHMoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkKIHsKIAl1bnNpZ25lZCBpbnQgbGlzdFszXTsKIAlzdHJ1Y3QgaGRzcG0gKmhkc3BtID0gcnVsZS0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgc25kX2ludGVydmFsICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAogCQkJU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKLQlpZiAoaGRzcG0tPmlzX2FlczMyKSB7Ci0JCWxpc3RbMF0gPSBoZHNwbS0+cXNfY2hhbm5lbHM7Ci0JCWxpc3RbMV0gPSBoZHNwbS0+ZHNfY2hhbm5lbHM7Ci0JCWxpc3RbMl0gPSBoZHNwbS0+c3NfY2hhbm5lbHM7Ci0JCXJldHVybiBzbmRfaW50ZXJ2YWxfbGlzdChjLCAzLCBsaXN0LCAwKTsKLQl9IGVsc2UgewotCQlsaXN0WzBdID0gaGRzcG0tPmRzX2NoYW5uZWxzOwotCQlsaXN0WzFdID0gaGRzcG0tPnNzX2NoYW5uZWxzOwotCQlyZXR1cm4gc25kX2ludGVydmFsX2xpc3QoYywgMiwgbGlzdCwgMCk7Ci0JfQorCisJbGlzdFswXSA9IGhkc3BtLT5xc19pbl9jaGFubmVsczsKKwlsaXN0WzFdID0gaGRzcG0tPmRzX2luX2NoYW5uZWxzOworCWxpc3RbMl0gPSBoZHNwbS0+c3NfaW5fY2hhbm5lbHM7CisJcmV0dXJuIHNuZF9pbnRlcnZhbF9saXN0KGMsIDMsIGxpc3QsIDApOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9od19ydWxlX291dF9jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQoreworCXVuc2lnbmVkIGludCBsaXN0WzNdOworCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBydWxlLT5wcml2YXRlOworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCisJbGlzdFswXSA9IGhkc3BtLT5xc19vdXRfY2hhbm5lbHM7CisJbGlzdFsxXSA9IGhkc3BtLT5kc19vdXRfY2hhbm5lbHM7CisJbGlzdFsyXSA9IGhkc3BtLT5zc19vdXRfY2hhbm5lbHM7CisJcmV0dXJuIHNuZF9pbnRlcnZhbF9saXN0KGMsIDMsIGxpc3QsIDApOwogfQogCiAKQEAgLTM5OTksNiArNTgyNyw3IEBACiAKIAlzbmRfcGNtX3NldF9zeW5jKHN1YnN0cmVhbSk7CiAKKwogCXJ1bnRpbWUtPmh3ID0gc25kX2hkc3BtX3BsYXliYWNrX3N1YmluZm87CiAKIAlpZiAoaGRzcG0tPmNhcHR1cmVfc3Vic3RyZWFtID09IE5VTEwpCkBAIC00MDExLDI1ICs1ODQwLDQxIEBACiAKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CiAKLQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLAotCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfU0laRSwKLQkJCQkgICAmaHdfY29uc3RyYWludHNfcGVyaW9kX3NpemVzKTsKKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBBSU86CisJY2FzZSBSYXlEQVQ6CisJCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFLAorCQkJCSZod19jb25zdHJhaW50c19wZXJpb2Rfc2l6ZXNfbmV3KTsKKwkJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwKKwkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1NJWkUsCisJCQkJJmh3X2NvbnN0cmFpbnRzX3JheWRhdF9pb19idWZmZXIpOwogCi0JaWYgKGhkc3BtLT5pc19hZXMzMikgeworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFLAorCQkJCSZod19jb25zdHJhaW50c19wZXJpb2Rfc2l6ZXNfb2xkKTsKKwl9CisKKwlpZiAoQUVTMzIgPT0gaGRzcG0tPmlvX3R5cGUpIHsKIAkJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCiAJCQkJJmhkc3BtX2h3X2NvbnN0cmFpbnRzX2FlczMyX3NhbXBsZV9yYXRlcyk7CiAJfSBlbHNlIHsKLQkJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCi0JCQkJICAgICBzbmRfaGRzcG1faHdfcnVsZV9jaGFubmVscywgaGRzcG0sCi0JCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKLQkJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCi0JCQkJICAgIHNuZF9oZHNwbV9od19ydWxlX2NoYW5uZWxzX3JhdGUsIGhkc3BtLAotCQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgLTEpOwotCiAJCXNuZF9wY21faHdfcnVsZV9hZGQocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCi0JCQkJICAgIHNuZF9oZHNwbV9od19ydWxlX3JhdGVfY2hhbm5lbHMsIGhkc3BtLAotCQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKKwkJCQlzbmRfaGRzcG1faHdfcnVsZV9yYXRlX291dF9jaGFubmVscywgaGRzcG0sCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7CiAJfQorCisJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQlzbmRfaGRzcG1faHdfcnVsZV9vdXRfY2hhbm5lbHMsIGhkc3BtLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7CisKKwlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCXNuZF9oZHNwbV9od19ydWxlX291dF9jaGFubmVsc19yYXRlLCBoZHNwbSwKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAtMSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA2NiwyNCArNTkxMSw0MCBAQAogCXNwaW5fdW5sb2NrX2lycSgmaGRzcG0tPmxvY2spOwogCiAJc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhydW50aW1lLCAwLCAzMiwgMjQpOwotCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsCi0JCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFLAotCQkJCSAgICZod19jb25zdHJhaW50c19wZXJpb2Rfc2l6ZXMpOwotCWlmIChoZHNwbS0+aXNfYWVzMzIpIHsKKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBBSU86CisJY2FzZSBSYXlEQVQ6CisJICBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLAorCQkJCSAgICAgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFLAorCQkJCSAgICAgJmh3X2NvbnN0cmFpbnRzX3BlcmlvZF9zaXplc19uZXcpOworCSAgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwKKwkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfU0laRSwKKwkJCQkgICAgICZod19jb25zdHJhaW50c19yYXlkYXRfaW9fYnVmZmVyKTsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsCisJCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUsCisJCQkJICAgICAmaHdfY29uc3RyYWludHNfcGVyaW9kX3NpemVzX29sZCk7CisJfQorCisJaWYgKEFFUzMyID09IGhkc3BtLT5pb190eXBlKSB7CiAJCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAogCQkJCSZoZHNwbV9od19jb25zdHJhaW50c19hZXMzMl9zYW1wbGVfcmF0ZXMpOwogCX0gZWxzZSB7Ci0JCXNuZF9wY21faHdfcnVsZV9hZGQocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAotCQkJCSAgICAgc25kX2hkc3BtX2h3X3J1bGVfY2hhbm5lbHMsIGhkc3BtLAotCQkJCSAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7Ci0JCXNuZF9wY21faHdfcnVsZV9hZGQocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAotCQkJCSAgICBzbmRfaGRzcG1faHdfcnVsZV9jaGFubmVsc19yYXRlLCBoZHNwbSwKLQkJCQkgICAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsIC0xKTsKLQogCQlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAotCQkJCSAgICBzbmRfaGRzcG1faHdfcnVsZV9yYXRlX2NoYW5uZWxzLCBoZHNwbSwKLQkJCQkgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7CisJCQkJc25kX2hkc3BtX2h3X3J1bGVfcmF0ZV9pbl9jaGFubmVscywgaGRzcG0sCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7CiAJfQorCisJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQlzbmRfaGRzcG1faHdfcnVsZV9pbl9jaGFubmVscywgaGRzcG0sCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKKworCXNuZF9wY21faHdfcnVsZV9hZGQocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorCQkJc25kX2hkc3BtX2h3X3J1bGVfaW5fY2hhbm5lbHNfcmF0ZSwgaGRzcG0sCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgLTEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxMDAsMzIgKzU5NjEsMTI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2hkc3BtX2h3ZGVwX2lvY3RsKHN0cnVjdCBzbmRfaHdkZXAgKiBodywgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3Aoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCS8qIHdlIGhhdmUgbm90aGluZyB0byBpbml0aWFsaXplIGJ1dCB0aGUgY2FsbCBpcyByZXF1aXJlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjb3B5X3UzMl9sZSh2b2lkIF9fdXNlciAqZGVzdCwgdm9pZCBfX2lvbWVtICpzcmMpCit7CisJdTMyIHZhbCA9IHJlYWRsKHNyYyk7CisJcmV0dXJuIGNvcHlfdG9fdXNlcihkZXN0LCAmdmFsLCA0KTsKK30KKworc3RhdGljIGludCBzbmRfaGRzcG1faHdkZXBfaW9jdGwoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIF9fdXNlciBhcmcpCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IGh3LT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGhkc3BtX21peGVyX2lvY3RsIG1peGVyOwotCXN0cnVjdCBoZHNwbV9jb25maWdfaW5mbyBpbmZvOworCXN0cnVjdCBoZHNwbV9jb25maWcgaW5mbzsKKwlzdHJ1Y3QgaGRzcG1fc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgaGRzcG1fdmVyc2lvbiBoZHNwbV92ZXJzaW9uOwotCXN0cnVjdCBoZHNwbV9wZWFrX3Jtc19pb2N0bCBybXM7CisJc3RydWN0IGhkc3BtX3BlYWtfcm1zICpsZXZlbHM7CisJc3RydWN0IGhkc3BtX2x0YyBsdGM7CisJdW5zaWduZWQgaW50IHN0YXR1c3JlZ2lzdGVyOworCWxvbmcgdW5zaWduZWQgaW50IHM7CisJaW50IGkgPSAwOwogCiAJc3dpdGNoIChjbWQpIHsKIAogCWNhc2UgU05EUlZfSERTUE1fSU9DVExfR0VUX1BFQUtfUk1TOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnJtcywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2Yocm1zKSkpCisJCWxldmVscyA9ICZoZHNwbS0+cGVha19ybXM7CisJCWZvciAoaSA9IDA7IGkgPCBIRFNQTV9NQVhfQ0hBTk5FTFM7IGkrKykgeworCQkJbGV2ZWxzLT5pbnB1dF9wZWFrc1tpXSA9CisJCQkJcmVhZGwoaGRzcG0tPmlvYmFzZSArCisJCQkJCQlIRFNQTV9NQURJX0lOUFVUX1BFQUsgKyBpKjQpOworCQkJbGV2ZWxzLT5wbGF5YmFja19wZWFrc1tpXSA9CisJCQkJcmVhZGwoaGRzcG0tPmlvYmFzZSArCisJCQkJCQlIRFNQTV9NQURJX1BMQVlCQUNLX1BFQUsgKyBpKjQpOworCQkJbGV2ZWxzLT5vdXRwdXRfcGVha3NbaV0gPQorCQkJCXJlYWRsKGhkc3BtLT5pb2Jhc2UgKworCQkJCQkJSERTUE1fTUFESV9PVVRQVVRfUEVBSyArIGkqNCk7CisKKwkJCWxldmVscy0+aW5wdXRfcm1zW2ldID0KKwkJCQkoKHVpbnQ2NF90KSByZWFkbChoZHNwbS0+aW9iYXNlICsKKwkJCQkJSERTUE1fTUFESV9JTlBVVF9STVNfSCArIGkqNCkgPDwgMzIpIHwKKwkJCQkodWludDY0X3QpIHJlYWRsKGhkc3BtLT5pb2Jhc2UgKworCQkJCQkJSERTUE1fTUFESV9JTlBVVF9STVNfTCArIGkqNCk7CisJCQlsZXZlbHMtPnBsYXliYWNrX3Jtc1tpXSA9CisJCQkJKCh1aW50NjRfdClyZWFkbChoZHNwbS0+aW9iYXNlICsKKwkJCQkJSERTUE1fTUFESV9QTEFZQkFDS19STVNfSCtpKjQpIDw8IDMyKSB8CisJCQkJKHVpbnQ2NF90KXJlYWRsKGhkc3BtLT5pb2Jhc2UgKworCQkJCQlIRFNQTV9NQURJX1BMQVlCQUNLX1JNU19MICsgaSo0KTsKKwkJCWxldmVscy0+b3V0cHV0X3Jtc1tpXSA9CisJCQkJKCh1aW50NjRfdClyZWFkbChoZHNwbS0+aW9iYXNlICsKKwkJCQkJSERTUE1fTUFESV9PVVRQVVRfUk1TX0ggKyBpKjQpIDw8IDMyKSB8CisJCQkJKHVpbnQ2NF90KXJlYWRsKGhkc3BtLT5pb2Jhc2UgKworCQkJCQkJSERTUE1fTUFESV9PVVRQVVRfUk1TX0wgKyBpKjQpOworCQl9CisKKwkJaWYgKGhkc3BtLT5zeXN0ZW1fc2FtcGxlX3JhdGUgPiA5NjAwMCkgeworCQkJbGV2ZWxzLT5zcGVlZCA9IHFzOworCQl9IGVsc2UgaWYgKGhkc3BtLT5zeXN0ZW1fc2FtcGxlX3JhdGUgPiA0ODAwMCkgeworCQkJbGV2ZWxzLT5zcGVlZCA9IGRzOworCQl9IGVsc2UgeworCQkJbGV2ZWxzLT5zcGVlZCA9IHNzOworCQl9CisJCWxldmVscy0+c3RhdHVzMiA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyMik7CisKKwkJcyA9IGNvcHlfdG9fdXNlcihhcmdwLCBsZXZlbHMsIHNpemVvZihzdHJ1Y3QgaGRzcG1fcGVha19ybXMpKTsKKwkJaWYgKDAgIT0gcykgeworCQkJLyogc25kX3ByaW50ayhLRVJOX0VSUiAiY29weV90b191c2VyKC4uLCAuLiwgJWx1KTogJWx1CisJCQkgW0xldmVsc11cbiIsIHNpemVvZihzdHJ1Y3QgaGRzcG1fcGVha19ybXMpLCBzKTsKKwkJCSAqLwogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCS8qIG1heWJlIHRoZXJlIGlzIGEgY2hhbmNlIHRvIG1lbW9yeW1hcCBpbiBmdXR1cmUKLQkJICogc28gZG9udCB0b3VjaCBqdXN0IGNvcHkKLQkJICovCi0JCWlmKGNvcHlfdG9fdXNlcl9mcm9taW8oKHZvaWQgX191c2VyICopcm1zLnBlYWssCi0JCQkJICAgICAgIGhkc3BtLT5pb2Jhc2UrSERTUE1fTUFESV9wZWFrcm1zYmFzZSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBoZHNwbV9wZWFrX3JtcykpICE9IDAgKQorCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9IRFNQTV9JT0NUTF9HRVRfTFRDOgorCQlsdGMubHRjID0gaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fUkRfVENPKTsKKwkJaSA9IGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX1JEX1RDTyArIDQpOworCQlpZiAoaSAmIEhEU1BNX1RDTzFfTFRDX0lucHV0X3ZhbGlkKSB7CisJCQlzd2l0Y2ggKGkgJiAoSERTUE1fVENPMV9MVENfRm9ybWF0X0xTQiB8CisJCQkJSERTUE1fVENPMV9MVENfRm9ybWF0X01TQikpIHsKKwkJCWNhc2UgMDoKKwkJCQlsdGMuZm9ybWF0ID0gZnBzXzI0OworCQkJCWJyZWFrOworCQkJY2FzZSBIRFNQTV9UQ08xX0xUQ19Gb3JtYXRfTFNCOgorCQkJCWx0Yy5mb3JtYXQgPSBmcHNfMjU7CisJCQkJYnJlYWs7CisJCQljYXNlIEhEU1BNX1RDTzFfTFRDX0Zvcm1hdF9NU0I6CisJCQkJbHRjLmZvcm1hdCA9IGZwc18yOTk3OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlsdGMuZm9ybWF0ID0gMzA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaSAmIEhEU1BNX1RDTzFfc2V0X2Ryb3BfZnJhbWVfZmxhZykgeworCQkJCWx0Yy5mcmFtZSA9IGRyb3BfZnJhbWU7CisJCQl9IGVsc2UgeworCQkJCWx0Yy5mcmFtZSA9IGZ1bGxfZnJhbWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlsdGMuZm9ybWF0ID0gZm9ybWF0X2ludmFsaWQ7CisJCQlsdGMuZnJhbWUgPSBmcmFtZV9pbnZhbGlkOworCQl9CisJCWlmIChpICYgSERTUE1fVENPMV9WaWRlb19JbnB1dF9Gb3JtYXRfTlRTQykgeworCQkJbHRjLmlucHV0X2Zvcm1hdCA9IG50c2M7CisJCX0gZWxzZSBpZiAoaSAmIEhEU1BNX1RDTzFfVmlkZW9fSW5wdXRfRm9ybWF0X1BBTCkgeworCQkJbHRjLmlucHV0X2Zvcm1hdCA9IHBhbDsKKwkJfSBlbHNlIHsKKwkJCWx0Yy5pbnB1dF9mb3JtYXQgPSBub192aWRlbzsKKwkJfQorCisJCXMgPSBjb3B5X3RvX3VzZXIoYXJncCwgJmx0Yywgc2l6ZW9mKHN0cnVjdCBoZHNwbV9sdGMpKTsKKwkJaWYgKDAgIT0gcykgeworCQkJLyoKKwkJCSBzbmRfcHJpbnRrKEtFUk5fRVJSICJjb3B5X3RvX3VzZXIoLi4sIC4uLCAlbHUpOiAlbHUgW0xUQ11cbiIsIHNpemVvZihzdHJ1Y3QgaGRzcG1fbHRjKSwgcyk7ICovCiAJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQogCiAJCWJyZWFrOwotCQkKIAotCWNhc2UgU05EUlZfSERTUE1fSU9DVExfR0VUX0NPTkZJR19JTkZPOgorCWNhc2UgU05EUlZfSERTUE1fSU9DVExfR0VUX0NPTkZJRzoKIAogCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CiAJCXNwaW5fbG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKQEAgLTQxMzQsNyArNjA5Miw3IEBACiAKIAkJaW5mby5zeXN0ZW1fc2FtcGxlX3JhdGUgPSBoZHNwbS0+c3lzdGVtX3NhbXBsZV9yYXRlOwogCQlpbmZvLmF1dG9zeW5jX3NhbXBsZV9yYXRlID0KLQkJICAgIGhkc3BtX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3BtKTsKKwkJCWhkc3BtX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3BtKTsKIAkJaW5mby5zeXN0ZW1fY2xvY2tfbW9kZSA9IGhkc3BtX3N5c3RlbV9jbG9ja19tb2RlKGhkc3BtKTsKIAkJaW5mby5jbG9ja19zb3VyY2UgPSBoZHNwbV9jbG9ja19zb3VyY2UoaGRzcG0pOwogCQlpbmZvLmF1dG9zeW5jX3JlZiA9IGhkc3BtX2F1dG9zeW5jX3JlZihoZHNwbSk7CkBAIC00MTQ1LDEwICs2MTAzLDU4IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CiAKKwljYXNlIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9TVEFUVVM6CisJCXN0YXR1cy5jYXJkX3R5cGUgPSBoZHNwbS0+aW9fdHlwZTsKKworCQlzdGF0dXMuYXV0b3N5bmNfc291cmNlID0gaGRzcG1fYXV0b3N5bmNfcmVmKGhkc3BtKTsKKworCQlzdGF0dXMuY2FyZF9jbG9jayA9IDExMDA2OTMxMzQzMzYyNFVMTDsKKwkJc3RhdHVzLm1hc3Rlcl9wZXJpb2QgPSBoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9SRF9QTExfRlJFUSk7CisKKwkJc3dpdGNoIChoZHNwbS0+aW9fdHlwZSkgeworCQljYXNlIE1BREk6CisJCWNhc2UgTUFESWZhY2U6CisJCQlzdGF0dXMuY2FyZF9zcGVjaWZpYy5tYWRpLnN5bmNfd2MgPQorCQkJCWhkc3BtX3djX3N5bmNfY2hlY2soaGRzcG0pOworCQkJc3RhdHVzLmNhcmRfc3BlY2lmaWMubWFkaS5zeW5jX21hZGkgPQorCQkJCWhkc3BtX21hZGlfc3luY19jaGVjayhoZHNwbSk7CisJCQlzdGF0dXMuY2FyZF9zcGVjaWZpYy5tYWRpLnN5bmNfdGNvID0KKwkJCQloZHNwbV90Y29fc3luY19jaGVjayhoZHNwbSk7CisJCQlzdGF0dXMuY2FyZF9zcGVjaWZpYy5tYWRpLnN5bmNfaW4gPQorCQkJCWhkc3BtX3N5bmNfaW5fc3luY19jaGVjayhoZHNwbSk7CisKKwkJCXN0YXR1c3JlZ2lzdGVyID0KKwkJCQloZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3Rlcik7CisJCQlzdGF0dXMuY2FyZF9zcGVjaWZpYy5tYWRpLm1hZGlfaW5wdXQgPQorCQkJCShzdGF0dXNyZWdpc3RlciAmIEhEU1BNX0FCX2ludCkgPyAxIDogMDsKKwkJCXN0YXR1cy5jYXJkX3NwZWNpZmljLm1hZGkuY2hhbm5lbF9mb3JtYXQgPQorCQkJCShzdGF0dXNyZWdpc3RlciAmIEhEU1BNX1RYXzY0Y2gpID8gMSA6IDA7CisJCQkvKiBUT0RPOiBNYWMgZHJpdmVyIHNldHMgaXQgd2hlbiBmX3M+NDhrSHogKi8KKwkJCXN0YXR1cy5jYXJkX3NwZWNpZmljLm1hZGkuZnJhbWVfZm9ybWF0ID0gMDsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSBhcmcsICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisKKwkJYnJlYWs7CisKIAljYXNlIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9WRVJTSU9OOgorCQloZHNwbV92ZXJzaW9uLmNhcmRfdHlwZSA9IGhkc3BtLT5pb190eXBlOworCQlzdHJuY3B5KGhkc3BtX3ZlcnNpb24uY2FyZG5hbWUsIGhkc3BtLT5jYXJkX25hbWUsCisJCQkJc2l6ZW9mKGhkc3BtX3ZlcnNpb24uY2FyZG5hbWUpKTsKKwkJaGRzcG1fdmVyc2lvbi5zZXJpYWwgPSAoaGRzcG1fcmVhZChoZHNwbSwKKwkJCQkJSERTUE1fbWlkaVN0YXR1c0luMCk+PjgpICYgMHhGRkZGRkY7CiAJCWhkc3BtX3ZlcnNpb24uZmlybXdhcmVfcmV2ID0gaGRzcG0tPmZpcm13YXJlX3JldjsKKwkJaGRzcG1fdmVyc2lvbi5hZGRvbnMgPSAwOworCQlpZiAoaGRzcG0tPnRjbykKKwkJCWhkc3BtX3ZlcnNpb24uYWRkb25zIHw9IEhEU1BNX0FERE9OX1RDTzsKKwogCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSBhcmcsICZoZHNwbV92ZXJzaW9uLAotCQkJCSBzaXplb2YoaGRzcG1fdmVyc2lvbikpKQorCQkJCQlzaXplb2YoaGRzcG1fdmVyc2lvbikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogCkBAIC00MTU2LDcgKzYxNjIsNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJm1peGVyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihtaXhlcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopbWl4ZXIubWl4ZXIsIGhkc3BtLT5taXhlciwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBoZHNwbV9taXhlcikpKQorCQkJCQlzaXplb2Yoc3RydWN0IGhkc3BtX21peGVyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CiAKQEAgLTQxNzUsOCArNjE4MSw2IEBACiAJLnByZXBhcmUgPSBzbmRfaGRzcG1fcHJlcGFyZSwKIAkudHJpZ2dlciA9IHNuZF9oZHNwbV90cmlnZ2VyLAogCS5wb2ludGVyID0gc25kX2hkc3BtX2h3X3BvaW50ZXIsCi0JLmNvcHkgPSBzbmRfaGRzcG1fcGxheWJhY2tfY29weSwKLQkuc2lsZW5jZSA9IHNuZF9oZHNwbV9od19zaWxlbmNlLAogCS5wYWdlID0gc25kX3BjbV9zZ2J1Zl9vcHNfcGFnZSwKIH07CiAKQEAgLTQxODksNyArNjE5Myw2IEBACiAJLnByZXBhcmUgPSBzbmRfaGRzcG1fcHJlcGFyZSwKIAkudHJpZ2dlciA9IHNuZF9oZHNwbV90cmlnZ2VyLAogCS5wb2ludGVyID0gc25kX2hkc3BtX2h3X3BvaW50ZXIsCi0JLmNvcHkgPSBzbmRfaGRzcG1fY2FwdHVyZV9jb3B5LAogCS5wYWdlID0gc25kX3BjbV9zZ2J1Zl9vcHNfcGFnZSwKIH07CiAKQEAgLTQyMDcsMTYgKzYyMTAsMTggQEAKIAlody0+cHJpdmF0ZV9kYXRhID0gaGRzcG07CiAJc3RyY3B5KGh3LT5uYW1lLCAiSERTUE0gaHdkZXAgaW50ZXJmYWNlIik7CiAKKwlody0+b3BzLm9wZW4gPSBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3A7CiAJaHctPm9wcy5pb2N0bCA9IHNuZF9oZHNwbV9od2RlcF9pb2N0bDsKKwlody0+b3BzLnJlbGVhc2UgPSBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3A7CiAKIAlyZXR1cm4gMDsKIH0KIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgbWVtb3J5IGludGVyZmFjZSAKKyAgIG1lbW9yeSBpbnRlcmZhY2UKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBfX2RldmluaXQgc25kX2hkc3BtX3ByZWFsbG9jYXRlX21lbW9yeShzdHJ1Y3QgaGRzcG0gKiBoZHNwbSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9oZHNwbV9wcmVhbGxvY2F0ZV9tZW1vcnkoc3RydWN0IGhkc3BtICpoZHNwbSkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzbmRfcGNtICpwY207CkBAIC00MjI4LDcgKzYyMzMsNyBAQAogCiAJZXJyID0KIAkgICAgIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLAotCSAgICAgCQkJCQkgICBTTkRSVl9ETUFfVFlQRV9ERVZfU0csCisJCQkJCQkgICBTTkRSVl9ETUFfVFlQRV9ERVZfU0csCiAJCQkJCQkgICBzbmRfZG1hX3BjaV9kYXRhKGhkc3BtLT5wY2kpLAogCQkJCQkJICAgd2FudGVkLAogCQkJCQkJICAgd2FudGVkKTsKQEAgLTQyNDIsMTkgKzYyNDcsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaGRzcG1fc2V0X3NnYnVmKHN0cnVjdCBoZHNwbSAqIGhkc3BtLAorCitzdGF0aWMgdm9pZCBoZHNwbV9zZXRfc2didWYoc3RydWN0IGhkc3BtICpoZHNwbSwKIAkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgdW5zaWduZWQgaW50IHJlZywgaW50IGNoYW5uZWxzKQogewogCWludCBpOworCisJLyogY29udGludW91cyBtZW1vcnkgc2VnbWVudCAqLwogCWZvciAoaSA9IDA7IGkgPCAoY2hhbm5lbHMgKiAxNik7IGkrKykKIAkJaGRzcG1fd3JpdGUoaGRzcG0sIHJlZyArIDQgKiBpLAotCQkJICAgIHNuZF9wY21fc2didWZfZ2V0X2FkZHIoc3Vic3RyZWFtLCA0MDk2ICogaSkpOworCQkJCXNuZF9wY21fc2didWZfZ2V0X2FkZHIoc3Vic3RyZWFtLCA0MDk2ICogaSkpOwogfQogCisKIC8qIC0tLS0tLS0tLS0tLS0gQUxTQSBEZXZpY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9oZHNwbV9jcmVhdGVfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKLQkJCQkJICBzdHJ1Y3QgaGRzcG0gKiBoZHNwbSkKKwkJCQkJICBzdHJ1Y3QgaGRzcG0gKmhkc3BtKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKQEAgLTQyODMsMjcgKzYyOTIsMzAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNuZF9oZHNwbV9pbml0aWFsaXplX21pZGlfZmx1c2goc3RydWN0IGhkc3BtICogaGRzcG0pCiB7Ci0Jc25kX2hkc3BtX2ZsdXNoX21pZGlfaW5wdXQoaGRzcG0sIDApOwotCXNuZF9oZHNwbV9mbHVzaF9taWRpX2lucHV0KGhkc3BtLCAxKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBoZHNwbS0+bWlkaVBvcnRzOyBpKyspCisJCXNuZF9oZHNwbV9mbHVzaF9taWRpX2lucHV0KGhkc3BtLCBpKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2hkc3BtX2NyZWF0ZV9hbHNhX2RldmljZXMoc3RydWN0IHNuZF9jYXJkICpjYXJkLAogCQkJCQkJICAgc3RydWN0IGhkc3BtICogaGRzcG0pCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOwogCiAJc25kX3ByaW50ZGQoIkNyZWF0ZSBjYXJkLi4uXG4iKTsKIAllcnIgPSBzbmRfaGRzcG1fY3JlYXRlX3BjbShjYXJkLCBoZHNwbSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzbmRfaGRzcG1fY3JlYXRlX21pZGkoY2FyZCwgaGRzcG0sIDApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc25kX2hkc3BtX2NyZWF0ZV9taWRpKGNhcmQsIGhkc3BtLCAxKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpID0gMDsKKwl3aGlsZSAoaSA8IGhkc3BtLT5taWRpUG9ydHMpIHsKKwkJZXJyID0gc25kX2hkc3BtX2NyZWF0ZV9taWRpKGNhcmQsIGhkc3BtLCBpKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaSsrOworCX0KIAogCWVyciA9IHNuZF9oZHNwbV9jcmVhdGVfY29udHJvbHMoY2FyZCwgaGRzcG0pOwogCWlmIChlcnIgPCAwKQpAQCAtNDM0NiwzNyArNjM1OCw1NSBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaGRzcG1fY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKLQkJCQkgICAgICBzdHJ1Y3QgaGRzcG0gKmhkc3BtLAotCQkJCSAgICAgIGludCBwcmVjaXNlX3B0ciwgaW50IGVuYWJsZV9tb25pdG9yKQoteworCQlzdHJ1Y3QgaGRzcG0gKmhkc3BtKSB7CisKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gaGRzcG0tPnBjaTsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGxvbmcgaW9fZXh0ZW50OwogCiAJaGRzcG0tPmlycSA9IC0xOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmhkc3BtLT5taWRpWzBdLmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZoZHNwbS0+bWlkaVsxXS5sb2NrKTsKLQogCWhkc3BtLT5jYXJkID0gY2FyZDsKIAogCXNwaW5fbG9ja19pbml0KCZoZHNwbS0+bG9jayk7CiAKLQl0YXNrbGV0X2luaXQoJmhkc3BtLT5taWRpX3Rhc2tsZXQsCi0JCSAgICAgaGRzcG1fbWlkaV90YXNrbGV0LCAodW5zaWduZWQgbG9uZykgaGRzcG0pOwotCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoaGRzcG0tPnBjaSwKLQkJCSAgICAgUENJX0NMQVNTX1JFVklTSU9OLCAmaGRzcG0tPmZpcm13YXJlX3Jldik7Ci0KLQloZHNwbS0+aXNfYWVzMzIgPSAoaGRzcG0tPmZpcm13YXJlX3JldiA+PSBIRFNQTV9BRVNSRVZJU0lPTik7CisJCQlQQ0lfQ0xBU1NfUkVWSVNJT04sICZoZHNwbS0+ZmlybXdhcmVfcmV2KTsKIAogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJYaWxpbnggRlBHQSIpOwotCWlmIChoZHNwbS0+aXNfYWVzMzIpIHsKLQkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkhEU1BBRVMzMiIpOwotCQloZHNwbS0+Y2FyZF9uYW1lID0gIlJNRSBIRFNQTSBBRVMzMiI7Ci0JfSBlbHNlIHsKLQkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkhEU1BNIik7Ci0JCWhkc3BtLT5jYXJkX25hbWUgPSAiUk1FIEhEU1BNIE1BREkiOworCXN0cmNweShjYXJkLT5kcml2ZXIsICJIRFNQTSIpOworCisJc3dpdGNoIChoZHNwbS0+ZmlybXdhcmVfcmV2KSB7CisJY2FzZSBIRFNQTV9NQURJX1JFVjoKKwkJaGRzcG0tPmlvX3R5cGUgPSBNQURJOworCQloZHNwbS0+Y2FyZF9uYW1lID0gIlJNRSBNQURJIjsKKwkJaGRzcG0tPm1pZGlQb3J0cyA9IDM7CisJCWJyZWFrOworCWNhc2UgSERTUE1fUkFZREFUX1JFVjoKKwkJaGRzcG0tPmlvX3R5cGUgPSBSYXlEQVQ7CisJCWhkc3BtLT5jYXJkX25hbWUgPSAiUk1FIFJheURBVCI7CisJCWhkc3BtLT5taWRpUG9ydHMgPSAyOworCQlicmVhazsKKwljYXNlIEhEU1BNX0FJT19SRVY6CisJCWhkc3BtLT5pb190eXBlID0gQUlPOworCQloZHNwbS0+Y2FyZF9uYW1lID0gIlJNRSBBSU8iOworCQloZHNwbS0+bWlkaVBvcnRzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIRFNQTV9NQURJRkFDRV9SRVY6CisJCWhkc3BtLT5pb190eXBlID0gTUFESWZhY2U7CisJCWhkc3BtLT5jYXJkX25hbWUgPSAiUk1FIE1BRElmYWNlIjsKKwkJaGRzcG0tPm1pZGlQb3J0cyA9IDE7CisJCWJyZWFrOworCWNhc2UgSERTUE1fQUVTX1JFVjoKKwljYXNlIEhEU1BNX0FFUzMyX1JFVjoKKwljYXNlIEhEU1BNX0FFUzMyX09MRF9SRVY6CisJCWhkc3BtLT5pb190eXBlID0gQUVTMzI7CisJCWhkc3BtLT5jYXJkX25hbWUgPSAiUk1FIEFFUzMyIjsKKwkJaGRzcG0tPm1pZGlQb3J0cyA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhEU1BNOiB1bmtub3duIGZpcm13YXJlIHJldmlzaW9uICV4XG4iLAorCQkJCWhkc3BtLT5maXJtd2FyZV9yZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpOwpAQCAtNDM5MywyMiArNjQyMywyMSBAQAogCWlvX2V4dGVudCA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpLCAwKTsKIAogCXNuZF9wcmludGRkKCJncmFiYmVkIG1lbW9yeSByZWdpb24gMHglbHgtMHglbHhcbiIsCi0JCSAgIGhkc3BtLT5wb3J0LCBoZHNwbS0+cG9ydCArIGlvX2V4dGVudCAtIDEpOwotCisJCQloZHNwbS0+cG9ydCwgaGRzcG0tPnBvcnQgKyBpb19leHRlbnQgLSAxKTsKIAogCWhkc3BtLT5pb2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaGRzcG0tPnBvcnQsIGlvX2V4dGVudCk7CiAJaWYgKCFoZHNwbS0+aW9iYXNlKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhEU1BNOiAiCi0JCQkgICAidW5hYmxlIHRvIHJlbWFwIHJlZ2lvbiAweCVseC0weCVseFxuIiwKLQkJCSAgIGhkc3BtLT5wb3J0LCBoZHNwbS0+cG9ydCArIGlvX2V4dGVudCAtIDEpOworCQkJCSJ1bmFibGUgdG8gcmVtYXAgcmVnaW9uIDB4JWx4LTB4JWx4XG4iLAorCQkJCWhkc3BtLT5wb3J0LCBoZHNwbS0+cG9ydCArIGlvX2V4dGVudCAtIDEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlzbmRfcHJpbnRkZCgicmVtYXBwZWQgcmVnaW9uICgweCVseCkgMHglbHgtMHglbHhcbiIsCi0JCSAgICh1bnNpZ25lZCBsb25nKWhkc3BtLT5pb2Jhc2UsIGhkc3BtLT5wb3J0LAotCQkgICBoZHNwbS0+cG9ydCArIGlvX2V4dGVudCAtIDEpOworCQkJKHVuc2lnbmVkIGxvbmcpaGRzcG0tPmlvYmFzZSwgaGRzcG0tPnBvcnQsCisJCQloZHNwbS0+cG9ydCArIGlvX2V4dGVudCAtIDEpOwogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaGRzcG1faW50ZXJydXB0LAotCQkJSVJRRl9TSEFSRUQsICJoZHNwbSIsIGhkc3BtKSkgeworCQkJCUlSUUZfU0hBUkVELCAiaGRzcG0iLCBoZHNwbSkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiSERTUE06IHVuYWJsZSB0byB1c2UgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNDQxNiwyMyArNjQ0NSwyMTkgQEAKIAlzbmRfcHJpbnRkZCgidXNlIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCiAJaGRzcG0tPmlycSA9IHBjaS0+aXJxOwotCWhkc3BtLT5wcmVjaXNlX3B0ciA9IHByZWNpc2VfcHRyOwotCi0JaGRzcG0tPm1vbml0b3Jfb3V0cyA9IGVuYWJsZV9tb25pdG9yOwogCiAJc25kX3ByaW50ZGQoImttYWxsb2MgTWl4ZXIgbWVtb3J5IG9mICV6ZCBCeXRlc1xuIiwKLQkJICAgc2l6ZW9mKHN0cnVjdCBoZHNwbV9taXhlcikpOworCQkJc2l6ZW9mKHN0cnVjdCBoZHNwbV9taXhlcikpOwogCWhkc3BtLT5taXhlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZHNwbV9taXhlciksIEdGUF9LRVJORUwpOwogCWlmICghaGRzcG0tPm1peGVyKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhEU1BNOiAiCi0JCQkgICAidW5hYmxlIHRvIGttYWxsb2MgTWl4ZXIgbWVtb3J5IG9mICVkIEJ5dGVzXG4iLAotCQkJICAgKGludClzaXplb2Yoc3RydWN0IGhkc3BtX21peGVyKSk7CisJCQkJInVuYWJsZSB0byBrbWFsbG9jIE1peGVyIG1lbW9yeSBvZiAlZCBCeXRlc1xuIiwKKwkJCQkoaW50KXNpemVvZihzdHJ1Y3QgaGRzcG1fbWl4ZXIpKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQloZHNwbS0+c3NfY2hhbm5lbHMgPSBNQURJX1NTX0NIQU5ORUxTOwotCWhkc3BtLT5kc19jaGFubmVscyA9IE1BRElfRFNfQ0hBTk5FTFM7Ci0JaGRzcG0tPnFzX2NoYW5uZWxzID0gTUFESV9RU19DSEFOTkVMUzsKKwloZHNwbS0+cG9ydF9uYW1lc19pbiA9IE5VTEw7CisJaGRzcG0tPnBvcnRfbmFtZXNfb3V0ID0gTlVMTDsKKworCXN3aXRjaCAoaGRzcG0tPmlvX3R5cGUpIHsKKwljYXNlIEFFUzMyOgorCQloZHNwbS0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwbS0+c3Nfb3V0X2NoYW5uZWxzID0gQUVTMzJfQ0hBTk5FTFM7CisJCWhkc3BtLT5kc19pbl9jaGFubmVscyA9IGhkc3BtLT5kc19vdXRfY2hhbm5lbHMgPSBBRVMzMl9DSEFOTkVMUzsKKwkJaGRzcG0tPnFzX2luX2NoYW5uZWxzID0gaGRzcG0tPnFzX291dF9jaGFubmVscyA9IEFFUzMyX0NIQU5ORUxTOworCisJCWhkc3BtLT5jaGFubmVsX21hcF9pbl9zcyA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXRfc3MgPQorCQkJY2hhbm5lbF9tYXBfYWVzMzI7CisJCWhkc3BtLT5jaGFubmVsX21hcF9pbl9kcyA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXRfZHMgPQorCQkJY2hhbm5lbF9tYXBfYWVzMzI7CisJCWhkc3BtLT5jaGFubmVsX21hcF9pbl9xcyA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXRfcXMgPQorCQkJY2hhbm5lbF9tYXBfYWVzMzI7CisJCWhkc3BtLT5wb3J0X25hbWVzX2luX3NzID0gaGRzcG0tPnBvcnRfbmFtZXNfb3V0X3NzID0KKwkJCXRleHRzX3BvcnRzX2FlczMyOworCQloZHNwbS0+cG9ydF9uYW1lc19pbl9kcyA9IGhkc3BtLT5wb3J0X25hbWVzX291dF9kcyA9CisJCQl0ZXh0c19wb3J0c19hZXMzMjsKKwkJaGRzcG0tPnBvcnRfbmFtZXNfaW5fcXMgPSBoZHNwbS0+cG9ydF9uYW1lc19vdXRfcXMgPQorCQkJdGV4dHNfcG9ydHNfYWVzMzI7CisKKwkJaGRzcG0tPm1heF9jaGFubmVsc19vdXQgPSBoZHNwbS0+bWF4X2NoYW5uZWxzX2luID0KKwkJCUFFUzMyX0NIQU5ORUxTOworCQloZHNwbS0+cG9ydF9uYW1lc19pbiA9IGhkc3BtLT5wb3J0X25hbWVzX291dCA9CisJCQl0ZXh0c19wb3J0c19hZXMzMjsKKwkJaGRzcG0tPmNoYW5uZWxfbWFwX2luID0gaGRzcG0tPmNoYW5uZWxfbWFwX291dCA9CisJCQljaGFubmVsX21hcF9hZXMzMjsKKworCQlicmVhazsKKworCWNhc2UgTUFESToKKwljYXNlIE1BRElmYWNlOgorCQloZHNwbS0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwbS0+c3Nfb3V0X2NoYW5uZWxzID0KKwkJCU1BRElfU1NfQ0hBTk5FTFM7CisJCWhkc3BtLT5kc19pbl9jaGFubmVscyA9IGhkc3BtLT5kc19vdXRfY2hhbm5lbHMgPQorCQkJTUFESV9EU19DSEFOTkVMUzsKKwkJaGRzcG0tPnFzX2luX2NoYW5uZWxzID0gaGRzcG0tPnFzX291dF9jaGFubmVscyA9CisJCQlNQURJX1FTX0NIQU5ORUxTOworCisJCWhkc3BtLT5jaGFubmVsX21hcF9pbl9zcyA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXRfc3MgPQorCQkJY2hhbm5lbF9tYXBfdW5pdHlfc3M7CisJCWhkc3BtLT5jaGFubmVsX21hcF9pbl9kcyA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXRfZHMgPQorCQkJY2hhbm5lbF9tYXBfdW5pdHlfc3M7CisJCWhkc3BtLT5jaGFubmVsX21hcF9pbl9xcyA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXRfcXMgPQorCQkJY2hhbm5lbF9tYXBfdW5pdHlfc3M7CisKKwkJaGRzcG0tPnBvcnRfbmFtZXNfaW5fc3MgPSBoZHNwbS0+cG9ydF9uYW1lc19vdXRfc3MgPQorCQkJdGV4dHNfcG9ydHNfbWFkaTsKKwkJaGRzcG0tPnBvcnRfbmFtZXNfaW5fZHMgPSBoZHNwbS0+cG9ydF9uYW1lc19vdXRfZHMgPQorCQkJdGV4dHNfcG9ydHNfbWFkaTsKKwkJaGRzcG0tPnBvcnRfbmFtZXNfaW5fcXMgPSBoZHNwbS0+cG9ydF9uYW1lc19vdXRfcXMgPQorCQkJdGV4dHNfcG9ydHNfbWFkaTsKKwkJYnJlYWs7CisKKwljYXNlIEFJTzoKKwkJaWYgKDAgPT0gKGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyMikgJiBIRFNQTV9zMl9BRUJJX0QpKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSERTUE06IEFFQiBpbnB1dCBib2FyZCBmb3VuZCwgYnV0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQl9CisKKwkJaGRzcG0tPnNzX2luX2NoYW5uZWxzID0gQUlPX0lOX1NTX0NIQU5ORUxTOworCQloZHNwbS0+ZHNfaW5fY2hhbm5lbHMgPSBBSU9fSU5fRFNfQ0hBTk5FTFM7CisJCWhkc3BtLT5xc19pbl9jaGFubmVscyA9IEFJT19JTl9RU19DSEFOTkVMUzsKKwkJaGRzcG0tPnNzX291dF9jaGFubmVscyA9IEFJT19PVVRfU1NfQ0hBTk5FTFM7CisJCWhkc3BtLT5kc19vdXRfY2hhbm5lbHMgPSBBSU9fT1VUX0RTX0NIQU5ORUxTOworCQloZHNwbS0+cXNfb3V0X2NoYW5uZWxzID0gQUlPX09VVF9RU19DSEFOTkVMUzsKKworCQloZHNwbS0+Y2hhbm5lbF9tYXBfb3V0X3NzID0gY2hhbm5lbF9tYXBfYWlvX291dF9zczsKKwkJaGRzcG0tPmNoYW5uZWxfbWFwX291dF9kcyA9IGNoYW5uZWxfbWFwX2Fpb19vdXRfZHM7CisJCWhkc3BtLT5jaGFubmVsX21hcF9vdXRfcXMgPSBjaGFubmVsX21hcF9haW9fb3V0X3FzOworCisJCWhkc3BtLT5jaGFubmVsX21hcF9pbl9zcyA9IGNoYW5uZWxfbWFwX2Fpb19pbl9zczsKKwkJaGRzcG0tPmNoYW5uZWxfbWFwX2luX2RzID0gY2hhbm5lbF9tYXBfYWlvX2luX2RzOworCQloZHNwbS0+Y2hhbm5lbF9tYXBfaW5fcXMgPSBjaGFubmVsX21hcF9haW9faW5fcXM7CisKKwkJaGRzcG0tPnBvcnRfbmFtZXNfaW5fc3MgPSB0ZXh0c19wb3J0c19haW9faW5fc3M7CisJCWhkc3BtLT5wb3J0X25hbWVzX291dF9zcyA9IHRleHRzX3BvcnRzX2Fpb19vdXRfc3M7CisJCWhkc3BtLT5wb3J0X25hbWVzX2luX2RzID0gdGV4dHNfcG9ydHNfYWlvX2luX2RzOworCQloZHNwbS0+cG9ydF9uYW1lc19vdXRfZHMgPSB0ZXh0c19wb3J0c19haW9fb3V0X2RzOworCQloZHNwbS0+cG9ydF9uYW1lc19pbl9xcyA9IHRleHRzX3BvcnRzX2Fpb19pbl9xczsKKwkJaGRzcG0tPnBvcnRfbmFtZXNfb3V0X3FzID0gdGV4dHNfcG9ydHNfYWlvX291dF9xczsKKworCQlicmVhazsKKworCWNhc2UgUmF5REFUOgorCQloZHNwbS0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwbS0+c3Nfb3V0X2NoYW5uZWxzID0KKwkJCVJBWURBVF9TU19DSEFOTkVMUzsKKwkJaGRzcG0tPmRzX2luX2NoYW5uZWxzID0gaGRzcG0tPmRzX291dF9jaGFubmVscyA9CisJCQlSQVlEQVRfRFNfQ0hBTk5FTFM7CisJCWhkc3BtLT5xc19pbl9jaGFubmVscyA9IGhkc3BtLT5xc19vdXRfY2hhbm5lbHMgPQorCQkJUkFZREFUX1FTX0NIQU5ORUxTOworCisJCWhkc3BtLT5tYXhfY2hhbm5lbHNfaW4gPSBSQVlEQVRfU1NfQ0hBTk5FTFM7CisJCWhkc3BtLT5tYXhfY2hhbm5lbHNfb3V0ID0gUkFZREFUX1NTX0NIQU5ORUxTOworCisJCWhkc3BtLT5jaGFubmVsX21hcF9pbl9zcyA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXRfc3MgPQorCQkJY2hhbm5lbF9tYXBfcmF5ZGF0X3NzOworCQloZHNwbS0+Y2hhbm5lbF9tYXBfaW5fZHMgPSBoZHNwbS0+Y2hhbm5lbF9tYXBfb3V0X2RzID0KKwkJCWNoYW5uZWxfbWFwX3JheWRhdF9kczsKKwkJaGRzcG0tPmNoYW5uZWxfbWFwX2luX3FzID0gaGRzcG0tPmNoYW5uZWxfbWFwX291dF9xcyA9CisJCQljaGFubmVsX21hcF9yYXlkYXRfcXM7CisJCWhkc3BtLT5jaGFubmVsX21hcF9pbiA9IGhkc3BtLT5jaGFubmVsX21hcF9vdXQgPQorCQkJY2hhbm5lbF9tYXBfcmF5ZGF0X3NzOworCisJCWhkc3BtLT5wb3J0X25hbWVzX2luX3NzID0gaGRzcG0tPnBvcnRfbmFtZXNfb3V0X3NzID0KKwkJCXRleHRzX3BvcnRzX3JheWRhdF9zczsKKwkJaGRzcG0tPnBvcnRfbmFtZXNfaW5fZHMgPSBoZHNwbS0+cG9ydF9uYW1lc19vdXRfZHMgPQorCQkJdGV4dHNfcG9ydHNfcmF5ZGF0X2RzOworCQloZHNwbS0+cG9ydF9uYW1lc19pbl9xcyA9IGhkc3BtLT5wb3J0X25hbWVzX291dF9xcyA9CisJCQl0ZXh0c19wb3J0c19yYXlkYXRfcXM7CisKKworCQlicmVhazsKKworCX0KKworCS8qIFRDTyBkZXRlY3Rpb24gKi8KKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBBSU86CisJY2FzZSBSYXlEQVQ6CisJCWlmIChoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9zdGF0dXNSZWdpc3RlcjIpICYKKwkJCQlIRFNQTV9zMl90Y29fZGV0ZWN0KSB7CisJCQloZHNwbS0+bWlkaVBvcnRzKys7CisJCQloZHNwbS0+dGNvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhkc3BtX3RjbyksCisJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKE5VTEwgIT0gaGRzcG0tPnRjbykgeworCQkJCWhkc3BtX3Rjb193cml0ZShoZHNwbSk7CisJCQl9CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSERTUE06IEFJTy9SYXlEQVQgVENPIG1vZHVsZSBmb3VuZFxuIik7CisJCX0gZWxzZSB7CisJCQloZHNwbS0+dGNvID0gTlVMTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTUFESToKKwkJaWYgKGhkc3BtX3JlYWQoaGRzcG0sIEhEU1BNX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BNX3Rjb19kZXRlY3QpIHsKKwkJCWhkc3BtLT5taWRpUG9ydHMrKzsKKwkJCWhkc3BtLT50Y28gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGRzcG1fdGNvKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoTlVMTCAhPSBoZHNwbS0+dGNvKSB7CisJCQkJaGRzcG1fdGNvX3dyaXRlKGhkc3BtKTsKKwkJCX0KKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIRFNQTTogTUFESSBUQ08gbW9kdWxlIGZvdW5kXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWhkc3BtLT50Y28gPSBOVUxMOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaGRzcG0tPnRjbyA9IE5VTEw7CisJfQorCisJLyogdGV4dHMgKi8KKwlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CisJY2FzZSBBRVMzMjoKKwkJaWYgKGhkc3BtLT50Y28pIHsKKwkJCWhkc3BtLT50ZXh0c19hdXRvc3luYyA9IHRleHRzX2F1dG9zeW5jX2Flc190Y287CisJCQloZHNwbS0+dGV4dHNfYXV0b3N5bmNfaXRlbXMgPSAxMDsKKwkJfSBlbHNlIHsKKwkJCWhkc3BtLT50ZXh0c19hdXRvc3luYyA9IHRleHRzX2F1dG9zeW5jX2FlczsKKwkJCWhkc3BtLT50ZXh0c19hdXRvc3luY19pdGVtcyA9IDk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIE1BREk6CisJCWlmIChoZHNwbS0+dGNvKSB7CisJCQloZHNwbS0+dGV4dHNfYXV0b3N5bmMgPSB0ZXh0c19hdXRvc3luY19tYWRpX3RjbzsKKwkJCWhkc3BtLT50ZXh0c19hdXRvc3luY19pdGVtcyA9IDQ7CisJCX0gZWxzZSB7CisJCQloZHNwbS0+dGV4dHNfYXV0b3N5bmMgPSB0ZXh0c19hdXRvc3luY19tYWRpOworCQkJaGRzcG0tPnRleHRzX2F1dG9zeW5jX2l0ZW1zID0gMzsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTUFESWZhY2U6CisKKwkJYnJlYWs7CisKKwljYXNlIFJheURBVDoKKwkJaWYgKGhkc3BtLT50Y28pIHsKKwkJCWhkc3BtLT50ZXh0c19hdXRvc3luYyA9IHRleHRzX2F1dG9zeW5jX3JheWRhdF90Y287CisJCQloZHNwbS0+dGV4dHNfYXV0b3N5bmNfaXRlbXMgPSA5OworCQl9IGVsc2UgeworCQkJaGRzcG0tPnRleHRzX2F1dG9zeW5jID0gdGV4dHNfYXV0b3N5bmNfcmF5ZGF0OworCQkJaGRzcG0tPnRleHRzX2F1dG9zeW5jX2l0ZW1zID0gODsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUlPOgorCQlpZiAoaGRzcG0tPnRjbykgeworCQkJaGRzcG0tPnRleHRzX2F1dG9zeW5jID0gdGV4dHNfYXV0b3N5bmNfYWlvX3RjbzsKKwkJCWhkc3BtLT50ZXh0c19hdXRvc3luY19pdGVtcyA9IDY7CisJCX0gZWxzZSB7CisJCQloZHNwbS0+dGV4dHNfYXV0b3N5bmMgPSB0ZXh0c19hdXRvc3luY19haW87CisJCQloZHNwbS0+dGV4dHNfYXV0b3N5bmNfaXRlbXMgPSA1OworCQl9CisJCWJyZWFrOworCisJfQorCisJdGFza2xldF9pbml0KCZoZHNwbS0+bWlkaV90YXNrbGV0LAorCQkJaGRzcG1fbWlkaV90YXNrbGV0LCAodW5zaWduZWQgbG9uZykgaGRzcG0pOwogCiAJc25kX3ByaW50ZGQoImNyZWF0ZSBhbHNhIGRldmljZXMuXG4iKTsKIAllcnIgPSBzbmRfaGRzcG1fY3JlYXRlX2Fsc2FfZGV2aWNlcyhjYXJkLCBoZHNwbSk7CkBAIC00NDQ0LDYgKzY2NjksNyBAQAogCXJldHVybiAwOwogfQogCisKIHN0YXRpYyBpbnQgc25kX2hkc3BtX2ZyZWUoc3RydWN0IGhkc3BtICogaGRzcG0pCiB7CiAKQEAgLTQ0NTIsNyArNjY3OCw4IEBACiAJCS8qIHN0b3AgdGggYXVkaW8sIGFuZCBjYW5jZWwgYWxsIGludGVycnVwdHMgKi8KIAkJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJj0KIAkJICAgIH4oSERTUE1fU3RhcnQgfCBIRFNQTV9BdWRpb0ludGVycnVwdEVuYWJsZSB8Ci0JCSAgICAgIEhEU1BNX01pZGkwSW50ZXJydXB0RW5hYmxlIHwgSERTUE1fTWlkaTFJbnRlcnJ1cHRFbmFibGUpOworCQkgICAgICBIRFNQTV9NaWRpMEludGVycnVwdEVuYWJsZSB8IEhEU1BNX01pZGkxSW50ZXJydXB0RW5hYmxlIHwKKwkJICAgICAgSERTUE1fTWlkaTJJbnRlcnJ1cHRFbmFibGUgfCBIRFNQTV9NaWRpM0ludGVycnVwdEVuYWJsZSk7CiAJCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9jb250cm9sUmVnaXN0ZXIsCiAJCQkgICAgaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIpOwogCX0KQEAgLTQ0NzIsNiArNjY5OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKwogc3RhdGljIHZvaWQgc25kX2hkc3BtX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IGhkc3BtICpoZHNwbSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKQEAgLTQ0ODAsNiArNjcwOCw3IEBACiAJCXNuZF9oZHNwbV9mcmVlKGhkc3BtKTsKIH0KIAorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaGRzcG1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CkBAIC00NDk2LDcgKzY3MjUsNyBAQAogCX0KIAogCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgICAgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgaGRzcG0pLCAmY2FyZCk7CisJCQlUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwbSksICZjYXJkKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtNDUwNywxNiArNjczNiwyNSBAQAogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOwogCi0JZXJyID0gc25kX2hkc3BtX2NyZWF0ZShjYXJkLCBoZHNwbSwgcHJlY2lzZV9wdHJbZGV2XSwKLQkJCSAgICAgICBlbmFibGVfbW9uaXRvcltkZXZdKTsKKwllcnIgPSBzbmRfaGRzcG1fY3JlYXRlKGNhcmQsIGhkc3BtKTsKIAlpZiAoZXJyIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIRFNQTSBNQURJIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQiLCBoZHNwbS0+Y2FyZF9uYW1lLAotCQloZHNwbS0+cG9ydCwgaGRzcG0tPmlycSk7CisJaWYgKGhkc3BtLT5pb190eXBlICE9IE1BRElmYWNlKSB7CisJCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAiJXNfJXgiLAorCQkJaGRzcG0tPmNhcmRfbmFtZSwKKwkJCShoZHNwbV9yZWFkKGhkc3BtLCBIRFNQTV9taWRpU3RhdHVzSW4wKT4+OCkgJiAweEZGRkZGRik7CisJCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBTL04gMHgleCBhdCAweCVseCwgaXJxICVkIiwKKwkJCWhkc3BtLT5jYXJkX25hbWUsCisJCQkoaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMCk+PjgpICYgMHhGRkZGRkYsCisJCQloZHNwbS0+cG9ydCwgaGRzcG0tPmlycSk7CisJfSBlbHNlIHsKKwkJc3ByaW50ZihjYXJkLT5zaG9ydG5hbWUsICIlcyIsIGhkc3BtLT5jYXJkX25hbWUpOworCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsCisJCQkJaGRzcG0tPmNhcmRfbmFtZSwgaGRzcG0tPnBvcnQsIGhkc3BtLT5pcnEpOworCX0KIAogCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvcG1hYy5jIGIvc291bmQvcHBjL3BtYWMuYwppbmRleCBiNDdjZmQ0Li4zZWNiZDY3IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvcG1hYy5jCisrKyBiL3NvdW5kL3BwYy9wbWFjLmMKQEAgLTEwMzQsNyArMTAzNCwxMSBAQAogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzb3VuZCwgInR1bWJsZXIiKSkgewogCQljaGlwLT5tb2RlbCA9IFBNQUNfVFVNQkxFUjsKIAkJY2hpcC0+Y2FuX2NhcHR1cmUgPSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwyIikKLQkJCQl8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpOworCQkJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikKKwkJCQl8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMyIpCisJCQkJfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKQorCQkJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwyIikKKwkJCQl8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpOwogCQljaGlwLT5jYW5fZHVwbGV4ID0gMDsKIAkJLy8gY2hpcC0+Y2FuX2J5dGVfc3dhcCA9IDA7IC8qIEZJWE1FOiBjaGVjayB0aGlzICovCiAJCWNoaXAtPm51bV9mcmVxcyA9IEFSUkFZX1NJWkUodHVtYmxlcl9mcmVxcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvS2NvbmZpZyBiL3NvdW5kL3NvYy9LY29uZmlnCmluZGV4IGEzZWZjNTIuLjgyMjRkYjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9LY29uZmlnCkBAIC01MCwxMCArNTAsMTIgQEAKIHNvdXJjZSAic291bmQvc29jL251YzkwMC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2Mvb21hcC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2Mva2lya3dvb2QvS2NvbmZpZyIKK3NvdXJjZSAic291bmQvc29jL21pZC14ODYvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL3B4YS9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvczYwMDAvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL3NoL0tjb25maWciCitzb3VyY2UgInNvdW5kL3NvYy90ZWdyYS9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvdHh4OS9LY29uZmlnIgogCiAjIFN1cHBvcnRlZCBjb2RlY3MKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9NYWtlZmlsZQppbmRleCBjZTkxM2JmLi4xZWQ2MWM1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gZnNsLwogb2JqLSQoQ09ORklHX1NORF9TT0MpICAgKz0gaW14Lwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGp6NDc0MC8KK29iai0kKENPTkZJR19TTkRfU09DKQkrPSBtaWQteDg2Lwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IG51YzkwMC8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBvbWFwLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGtpcmt3b29kLwpAQCAtMTcsNCArMTgsNSBAQAogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHNhbXN1bmcvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gczYwMDAvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gc2gvCitvYmotJChDT05GSUdfU05EX1NPQykJKz0gdGVncmEvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gdHh4OS8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCBjNDhiMjNjLi5kNjNjMTc1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC0yNiwxNyArMjYsMjQgQEAKIAlzZWxlY3QgU05EX1NPQ19DUTAwOTNWQyBpZiBNRkRfREFWSU5DSV9WT0lDRUNPREVDCiAJc2VsZWN0IFNORF9TT0NfQ1M0Mkw1MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzAgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfQ1M0MjcxIGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19DWDIwNDQyCiAJc2VsZWN0IFNORF9TT0NfREE3MjEwIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX0RGQk1DUzMyMAogCXNlbGVjdCBTTkRfU09DX0paNDc0MF9DT0RFQyBpZiBTT0NfSlo0NzQwCisJc2VsZWN0IFNORF9TT0NfTE00ODU3IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX01BWDk4MDg4IGlmIEkyQworCXNlbGVjdCBTTkRfU09DX01BWDk4NTAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfTUFYOTg3NyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19QQ00zMDA4CisJc2VsZWN0IFNORF9TT0NfU0dUTDUwMDAgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfU045NTAzMSBpZiBJTlRFTF9TQ1VfSVBDCiAJc2VsZWN0IFNORF9TT0NfU1BESUYKIAlzZWxlY3QgU05EX1NPQ19TU00yNjAyIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1NUQUM5NzY2IGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyNiBpZiBTUElfTUFTVEVSCisJc2VsZWN0IFNORF9TT0NfVFZMMzIwQUlDMzJYNCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMzWCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19UUEE2MTMwQTIgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfVExWMzIwREFDMzMgaWYgSTJDCkBAIC03Niw2ICs4Myw3IEBACiAJc2VsZWN0IFNORF9TT0NfV004OTg1IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg5ODggaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODk5MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5OTEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTkzIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk5NCBpZiBNRkRfV004OTk0CiAJc2VsZWN0IFNORF9TT0NfV004OTk1IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKQEAgLTE1NSw2ICsxNjMsOSBAQAogCWJvb2wKIAlkZXBlbmRzIG9uIFNORF9TT0NfQ1M0MjcwCiAKK2NvbmZpZyBTTkRfU09DX0NTNDI3MQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0NYMjA0NDIKIAl0cmlzdGF0ZQogCkBAIC0xNjcsMTUgKzE3OCwyOCBAQAogY29uZmlnIFNORF9TT0NfREE3MjEwCiAgICAgICAgIHRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0RGQk1DUzMyMAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0RNSUMKIAl0cmlzdGF0ZQogCiBjb25maWcgU05EX1NPQ19NQVg5ODA4OAogICAgICAgIHRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX01BWDk4NTAKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19QQ00zMDA4CiAgICAgICAgdHJpc3RhdGUKIAorI0ZyZWVzY2FsZSBzZ3RsNTAwMCBjb2RlYworY29uZmlnIFNORF9TT0NfU0dUTDUwMDAKKwl0cmlzdGF0ZQorCitjb25maWcgU05EX1NPQ19TTjk1MDMxCisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfU1BESUYKIAl0cmlzdGF0ZQogCkBAIC0xOTIsNiArMjE2LDkgQEAKIAl0cmlzdGF0ZSAiVEkgVExWMzIwQUlDMjYgQ29kZWMgc3VwcG9ydCIgaWYgU05EX1NPQ19PRl9TSU1QTEUKIAlkZXBlbmRzIG9uIFNQSQogCitjb25maWcgU05EX1NPQ19UVkwzMjBBSUMzMlg0CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDM1gKIAl0cmlzdGF0ZQogCkBAIC0zMDQsNiArMzMxLDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODk5MAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODk5MQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODk5MwogCXRyaXN0YXRlCiAKQEAgLTMyNiw2ICszNTYsOSBAQAogCXRyaXN0YXRlCiAKICMgQW1wCitjb25maWcgU05EX1NPQ19MTTQ4NTcKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19NQVg5ODc3CiAJdHJpc3RhdGUKIApAQCAtMzM3LDQgKzM3MCwzIEBACiAKIGNvbmZpZyBTTkRfU09DX1dNOTA5MAogCXRyaXN0YXRlCi0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCmluZGV4IDU3OWFmOWMuLjM3OWJjNTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQpAQCAtMTIsMTkgKzEyLDI1IEBACiBzbmQtc29jLWNxOTN2Yy1vYmpzIDo9IGNxOTN2Yy5vCiBzbmQtc29jLWNzNDJsNTEtb2JqcyA6PSBjczQybDUxLm8KIHNuZC1zb2MtY3M0MjcwLW9ianMgOj0gY3M0MjcwLm8KK3NuZC1zb2MtY3M0MjcxLW9ianMgOj0gY3M0MjcxLm8KIHNuZC1zb2MtY3gyMDQ0Mi1vYmpzIDo9IGN4MjA0NDIubwogc25kLXNvYy1kYTcyMTAtb2JqcyA6PSBkYTcyMTAubworc25kLXNvYy1kZmJtY3MzMjAtb2JqcyA6PSBkZmJtY3MzMjAubwogc25kLXNvYy1kbWljLW9ianMgOj0gZG1pYy5vCiBzbmQtc29jLWwzLW9ianMgOj0gbDMubwogc25kLXNvYy1tYXg5ODA4OC1vYmpzIDo9IG1heDk4MDg4Lm8KK3NuZC1zb2MtbWF4OTg1MC1vYmpzIDo9IG1heDk4NTAubwogc25kLXNvYy1wY20zMDA4LW9ianMgOj0gcGNtMzAwOC5vCitzbmQtc29jLXNndGw1MDAwLW9ianMgOj0gc2d0bDUwMDAubwogc25kLXNvYy1hbGM1NjIzLW9ianMgOj0gYWxjNTYyMy5vCitzbmQtc29jLXNuOTUwMzEtb2JqcyA6PSBzbjk1MDMxLm8KIHNuZC1zb2Mtc3BkaWYtb2JqcyA6PSBzcGRpZl90cmFuc2NpZXZlci5vCiBzbmQtc29jLXNzbTI2MDItb2JqcyA6PSBzc20yNjAyLm8KIHNuZC1zb2Mtc3RhYzk3NjYtb2JqcyA6PSBzdGFjOTc2Ni5vCiBzbmQtc29jLXRsdjMyMGFpYzIzLW9ianMgOj0gdGx2MzIwYWljMjMubwogc25kLXNvYy10bHYzMjBhaWMyNi1vYmpzIDo9IHRsdjMyMGFpYzI2Lm8KIHNuZC1zb2MtdGx2MzIwYWljM3gtb2JqcyA6PSB0bHYzMjBhaWMzeC5vCitzbmQtc29jLXRsdjMyMGFpYzMyeDQtb2JqcyA6PSB0bHYzMjBhaWMzMng0Lm8KIHNuZC1zb2MtdGx2MzIwZGFjMzMtb2JqcyA6PSB0bHYzMjBkYWMzMy5vCiBzbmQtc29jLXR3bDQwMzAtb2JqcyA6PSB0d2w0MDMwLm8KIHNuZC1zb2MtdHdsNjA0MC1vYmpzIDo9IHR3bDYwNDAubwpAQCAtNjEsNiArNjcsNyBAQAogc25kLXNvYy13bTg5ODUtb2JqcyA6PSB3bTg5ODUubwogc25kLXNvYy13bTg5ODgtb2JqcyA6PSB3bTg5ODgubwogc25kLXNvYy13bTg5OTAtb2JqcyA6PSB3bTg5OTAubworc25kLXNvYy13bTg5OTEtb2JqcyA6PSB3bTg5OTEubwogc25kLXNvYy13bTg5OTMtb2JqcyA6PSB3bTg5OTMubwogc25kLXNvYy13bTg5OTQtb2JqcyA6PSB3bTg5OTQubyB3bTg5OTQtdGFibGVzLm8KIHNuZC1zb2Mtd204OTk1LW9ianMgOj0gd204OTk1Lm8KQEAgLTcyLDYgKzc5LDcgQEAKIHNuZC1zb2Mtano0NzQwLWNvZGVjLW9ianMgOj0gano0NzQwLm8KIAogIyBBbXAKK3NuZC1zb2MtbG00ODU3LW9ianMgOj0gbG00ODU3Lm8KIHNuZC1zb2MtbWF4OTg3Ny1vYmpzIDo9IG1heDk4Nzcubwogc25kLXNvYy10cGE2MTMwYTItb2JqcyA6PSB0cGE2MTMwYTIubwogc25kLXNvYy13bTIwMDAtb2JqcyA6PSB3bTIwMDAubwpAQCAtODgsMjMgKzk2LDI5IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19BSzQ1MzUpCSs9IHNuZC1zb2MtYWs0NTM1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FLNDY0MikJKz0gc25kLXNvYy1hazQ2NDIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0NjcxKQkrPSBzbmQtc29jLWFrNDY3MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19BTEM1NjIzKSAgICArPSBzbmQtc29jLWFsYzU2MjMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1EwMDkzVkMpICs9IHNuZC1zb2MtY3E5M3ZjLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NTNDJMNTEpCSs9IHNuZC1zb2MtY3M0Mmw1MS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DUzQyNzApCSs9IHNuZC1zb2MtY3M0MjcwLm8KK29iai0kKENPTkZJR19TTkRfU09DX0NTNDI3MSkJKz0gc25kLXNvYy1jczQyNzEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1gyMDQ0MikJKz0gc25kLXNvYy1jeDIwNDQyLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0RBNzIxMCkJKz0gc25kLXNvYy1kYTcyMTAubworb2JqLSQoQ09ORklHX1NORF9TT0NfREZCTUNTMzIwKQkrPSBzbmQtc29jLWRmYm1jczMyMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19ETUlDKQkrPSBzbmQtc29jLWRtaWMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTDMpCSs9IHNuZC1zb2MtbDMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfSlo0NzQwX0NPREVDKQkrPSBzbmQtc29jLWp6NDc0MC1jb2RlYy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19NQVg5ODA4OCkJKz0gc25kLXNvYy1tYXg5ODA4OC5vCitvYmotJChDT05GSUdfU05EX1NPQ19NQVg5ODUwKQkrPSBzbmQtc29jLW1heDk4NTAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUENNMzAwOCkJKz0gc25kLXNvYy1wY20zMDA4Lm8KLW9iai0kKENPTkZJR19TTkRfU09DX0FMQzU2MjMpICAgICs9IHNuZC1zb2MtYWxjNTYyMy5vCitvYmotJChDT05GSUdfU05EX1NPQ19TR1RMNTAwMCkgICs9IHNuZC1zb2Mtc2d0bDUwMDAubworb2JqLSQoQ09ORklHX1NORF9TT0NfU045NTAzMSkJKz1zbmQtc29jLXNuOTUwMzEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU1BESUYpCSs9IHNuZC1zb2Mtc3BkaWYubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU1NNMjYwMikJKz0gc25kLXNvYy1zc20yNjAyLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NUQUM5NzY2KQkrPSBzbmQtc29jLXN0YWM5NzY2Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzIzKQkrPSBzbmQtc29jLXRsdjMyMGFpYzIzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzI2KQkrPSBzbmQtc29jLXRsdjMyMGFpYzI2Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzNYKQkrPSBzbmQtc29jLXRsdjMyMGFpYzN4Lm8KK29iai0kKENPTkZJR19TTkRfU09DX1RWTDMyMEFJQzMyWDQpICAgICArPSBzbmQtc29jLXRsdjMyMGFpYzMyeDQubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVExWMzIwREFDMzMpCSs9IHNuZC1zb2MtdGx2MzIwZGFjMzMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVFdMNDAzMCkJKz0gc25kLXNvYy10d2w0MDMwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1RXTDYwNDApCSs9IHNuZC1zb2MtdHdsNjA0MC5vCkBAIC0xNDEsNiArMTU1LDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk4NSkJKz0gc25kLXNvYy13bTg5ODUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTg4KQkrPSBzbmQtc29jLXdtODk4OC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTApCSs9IHNuZC1zb2Mtd204OTkwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODk5MSkJKz0gc25kLXNvYy13bTg5OTEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkzKQkrPSBzbmQtc29jLXdtODk5My5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTQpCSs9IHNuZC1zb2Mtd204OTk0Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk5NSkJKz0gc25kLXNvYy13bTg5OTUubwpAQCAtMTUxLDYgKzE2Niw3IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19XTV9IVUJTKQkrPSBzbmQtc29jLXdtLWh1YnMubwogCiAjIEFtcAorb2JqLSQoQ09ORklHX1NORF9TT0NfTE00ODU3KQkrPSBzbmQtc29jLWxtNDg1Ny5vCiBvYmotJChDT05GSUdfU05EX1NPQ19NQVg5ODc3KQkrPSBzbmQtc29jLW1heDk4Nzcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyKQkrPSBzbmQtc29jLXRwYTYxMzBhMi5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTIwMDApCSs9IHNuZC1zb2Mtd20yMDAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCmluZGV4IGMyN2Y4ZjUuLmNiZjBiNmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYwpAQCAtMjk0LDcgKzI5NCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFrNDEwNF9pbml0KHZvaWQpCiB7Ci0JcHJfaW5mbygiQXNhaGkgS2FzZWkgQUs0MTA0IEFMU0EgU29DIENvZGVjIERyaXZlclxuIik7CiAJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFrNDEwNF9zcGlfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KGFrNDEwNF9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5jCmluZGV4IGYwMGViYTMuLjRiZTA1NzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYwpAQCAtMTE2LDYgKzExNiwxMiBAQAogI2RlZmluZSBCQ0tPX01BU0sJKDEgPDwgMykKICNkZWZpbmUgQkNLT182NAkJQkNLT19NQVNLCiAKKyNkZWZpbmUgRElGX01BU0sJKDMgPDwgMCkKKyNkZWZpbmUgRFNQCQkoMCA8PCAwKQorI2RlZmluZSBSSUdIVF9KCQkoMSA8PCAwKQorI2RlZmluZSBMRUZUX0oJCSgyIDw8IDApCisjZGVmaW5lIEkyUwkJKDMgPDwgMCkKKwogLyogTURfQ1RMMiAqLwogI2RlZmluZSBGUzAJCSgxIDw8IDApCiAjZGVmaW5lIEZTMQkJKDEgPDwgMSkKQEAgLTM1NCw2ICszNjAsMjQgQEAKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBQV19NR01UMiwgTVMsIGRhdGEpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE1EX0NUTDEsIEJDS09fTUFTSywgYmNrbyk7CiAKKwkvKiBmb3JtYXQgdHlwZSAqLworCWRhdGEgPSAwOworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJZGF0YSA9IExFRlRfSjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWRhdGEgPSBJMlM7CisJCWJyZWFrOworCS8qIEZJWE1FCisJICogUGxlYXNlIGFkZCBSSUdIVF9KIC8gRFNQIHN1cHBvcnQgaGVyZQorCSAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTURfQ1RMMSwgRElGX01BU0ssIGRhdGEpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCmluZGV4IDhiNTEyNDUuLjAyMDZhMTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYwpAQCAtMTkzLDEyICsxOTMsMTIgQEAKIC8qIFRoZSBudW1iZXIgb2YgTUNMSy9MUkNLIHJhdGlvcyBzdXBwb3J0ZWQgYnkgdGhlIENTNDI3MCAqLwogI2RlZmluZSBOVU1fTUNMS19SQVRJT1MJCUFSUkFZX1NJWkUoY3M0MjcwX21vZGVfcmF0aW9zKQogCi1zdGF0aWMgaW50IGNzNDI3MF9yZWdfaXNfcmVhZGFibGUodW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbnQgY3M0MjcwX3JlZ19pc19yZWFkYWJsZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJcmV0dXJuIChyZWcgPj0gQ1M0MjcwX0ZJUlNUUkVHKSAmJiAocmVnIDw9IENTNDI3MF9MQVNUUkVHKTsKIH0KIAotc3RhdGljIGludCBjczQyNzBfcmVnX2lzX3ZvbGF0aWxlKHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW50IGNzNDI3MF9yZWdfaXNfdm9sYXRpbGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCS8qIFVucmVhZGFibGUgcmVnaXN0ZXJzIGFyZSBjb25zaWRlcmVkIHZvbGF0aWxlICovCiAJaWYgKChyZWcgPCBDUzQyNzBfRklSU1RSRUcpIHx8IChyZWcgPiBDUzQyNzBfTEFTVFJFRykpCkBAIC03MTksNyArNzE5LDcgQEAKIC8qCiAgKiBjczQyNzBfaWQgLSBJMkMgZGV2aWNlIElEcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKICAqLwotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MF9pZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MF9pZFtdID0gewogCXsiY3M0MjcwIiwgMH0sCiAJe30KIH07CkBAIC03NDMsOCArNzQzLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3M0MjcwX2luaXQodm9pZCkKIHsKLQlwcl9pbmZvKCJDaXJydXMgTG9naWMgQ1M0MjcwIEFMU0EgU29DIENvZGVjIERyaXZlclxuIik7Ci0KIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KGNzNDI3MF9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcxLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4M2FhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MS5jCkBAIC0wLDAgKzEsNjY3IEBACisvKgorICogQ1M0MjcxIEFTb0MgY29kZWMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEFsZXhhbmRlciBTdmVyZGxpbiA8c3ViYXBhcnRzQHlhbmRleC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydCBDUzQyNzEgY29kZWMgYmVpbmcgbWFzdGVyIG9yIHNsYXZlLCB3b3JraW5nCisgKiBpbiBjb250cm9sIHBvcnQgbW9kZSwgY29ubmVjdGVkIGVpdGhlciB2aWEgU1BJIG9yIEkyQy4KKyAqIFRoZSBkYXRhIGZvcm1hdCBhY2NlcHRlZCBpcyBJMlMgb3IgbGVmdC1qdXN0aWZpZWQuCisgKiBEQVBNIHN1cHBvcnQgbm90IGltcGxlbWVudGVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPHNvdW5kL2NzNDI3MS5oPgorCisjZGVmaW5lIENTNDI3MV9QQ01fRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBcCisJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBcCisJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisjZGVmaW5lIENTNDI3MV9QQ01fUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAKKworLyoKKyAqIENTNDI3MSByZWdpc3RlcnMKKyAqIEhpZ2ggYnl0ZSByZXByZXNlbnRzIFNQSSBjaGlwIGFkZHJlc3MgKDB4MTApICsgd3JpdGUgY29tbWFuZCAoMCkKKyAqIExvdyBieXRlIC0gY29kZWMgcmVnaXN0ZXIgYWRkcmVzcworICovCisjZGVmaW5lIENTNDI3MV9NT0RFMQkweDIwMDEJLyogTW9kZSBDb250cm9sIDEgKi8KKyNkZWZpbmUgQ1M0MjcxX0RBQ0NUTAkweDIwMDIJLyogREFDIENvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjcxX0RBQ1ZPTAkweDIwMDMJLyogREFDIFZvbHVtZSAmIE1peGluZyBDb250cm9sICovCisjZGVmaW5lIENTNDI3MV9WT0xBCTB4MjAwNAkvKiBEQUMgQ2hhbm5lbCBBIFZvbHVtZSBDb250cm9sICovCisjZGVmaW5lIENTNDI3MV9WT0xCCTB4MjAwNQkvKiBEQUMgQ2hhbm5lbCBCIFZvbHVtZSBDb250cm9sICovCisjZGVmaW5lIENTNDI3MV9BRENDVEwJMHgyMDA2CS8qIEFEQyBDb250cm9sICovCisjZGVmaW5lIENTNDI3MV9NT0RFMgkweDIwMDcJLyogTW9kZSBDb250cm9sIDIgKi8KKyNkZWZpbmUgQ1M0MjcxX0NISVBJRAkweDIwMDgJLyogQ2hpcCBJRCAqLworCisjZGVmaW5lIENTNDI3MV9GSVJTVFJFRwlDUzQyNzFfTU9ERTEKKyNkZWZpbmUgQ1M0MjcxX0xBU1RSRUcJQ1M0MjcxX01PREUyCisjZGVmaW5lIENTNDI3MV9OUl9SRUdTCSgoQ1M0MjcxX0xBU1RSRUcgJiAweEZGKSArIDEpCisKKy8qIEJpdCBtYXNrcyBmb3IgdGhlIENTNDI3MSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1M0MjcxX01PREUxX01PREVfTUFTSwkweEMwCisjZGVmaW5lIENTNDI3MV9NT0RFMV9NT0RFXzFYCTB4MDAKKyNkZWZpbmUgQ1M0MjcxX01PREUxX01PREVfMlgJMHg4MAorI2RlZmluZSBDUzQyNzFfTU9ERTFfTU9ERV80WAkweEMwCisKKyNkZWZpbmUgQ1M0MjcxX01PREUxX0RJVl9NQVNLCTB4MzAKKyNkZWZpbmUgQ1M0MjcxX01PREUxX0RJVl8xCTB4MDAKKyNkZWZpbmUgQ1M0MjcxX01PREUxX0RJVl8xNQkweDEwCisjZGVmaW5lIENTNDI3MV9NT0RFMV9ESVZfMgkweDIwCisjZGVmaW5lIENTNDI3MV9NT0RFMV9ESVZfMwkweDMwCisKKyNkZWZpbmUgQ1M0MjcxX01PREUxX01BU1RFUgkweDA4CisKKyNkZWZpbmUgQ1M0MjcxX01PREUxX0RBQ19ESUZfTUFTSwkweDA3CisjZGVmaW5lIENTNDI3MV9NT0RFMV9EQUNfRElGX0xKCQkweDAwCisjZGVmaW5lIENTNDI3MV9NT0RFMV9EQUNfRElGX0kyUwkweDAxCisjZGVmaW5lIENTNDI3MV9NT0RFMV9EQUNfRElGX1JKMTYJMHgwMgorI2RlZmluZSBDUzQyNzFfTU9ERTFfREFDX0RJRl9SSjI0CTB4MDMKKyNkZWZpbmUgQ1M0MjcxX01PREUxX0RBQ19ESUZfUkoyMAkweDA0CisjZGVmaW5lIENTNDI3MV9NT0RFMV9EQUNfRElGX1JKMTgJMHgwNQorCisjZGVmaW5lIENTNDI3MV9EQUNDVExfQU1VVEUJMHg4MAorI2RlZmluZSBDUzQyNzFfREFDQ1RMX0lGX1NMT1cJMHg0MAorCisjZGVmaW5lIENTNDI3MV9EQUNDVExfREVNX01BU0sJMHgzMAorI2RlZmluZSBDUzQyNzFfREFDQ1RMX0RFTV9ESVMJMHgwMAorI2RlZmluZSBDUzQyNzFfREFDQ1RMX0RFTV80NDEJMHgxMAorI2RlZmluZSBDUzQyNzFfREFDQ1RMX0RFTV80OAkweDIwCisjZGVmaW5lIENTNDI3MV9EQUNDVExfREVNXzMyCTB4MzAKKworI2RlZmluZSBDUzQyNzFfREFDQ1RMX1NWUlUJMHgwOAorI2RlZmluZSBDUzQyNzFfREFDQ1RMX1NSRAkweDA0CisjZGVmaW5lIENTNDI3MV9EQUNDVExfSU5WQQkweDAyCisjZGVmaW5lIENTNDI3MV9EQUNDVExfSU5WQgkweDAxCisKKyNkZWZpbmUgQ1M0MjcxX0RBQ1ZPTF9CRVFVQQkweDQwCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfU09GVAkweDIwCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfWkVST0MJMHgxMAorCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfQVRBUElfTUFTSwkweDBGCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfQVRBUElfTV9NCQkweDAwCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfQVRBUElfTV9CUgkweDAxCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfQVRBUElfTV9CTAkweDAyCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfQVRBUElfTV9CTFIyCTB4MDMKKyNkZWZpbmUgQ1M0MjcxX0RBQ1ZPTF9BVEFQSV9BUl9NCTB4MDQKKyNkZWZpbmUgQ1M0MjcxX0RBQ1ZPTF9BVEFQSV9BUl9CUgkweDA1CisjZGVmaW5lIENTNDI3MV9EQUNWT0xfQVRBUElfQVJfQkwJMHgwNgorI2RlZmluZSBDUzQyNzFfREFDVk9MX0FUQVBJX0FSX0JMUjIJMHgwNworI2RlZmluZSBDUzQyNzFfREFDVk9MX0FUQVBJX0FMX00JMHgwOAorI2RlZmluZSBDUzQyNzFfREFDVk9MX0FUQVBJX0FMX0JSCTB4MDkKKyNkZWZpbmUgQ1M0MjcxX0RBQ1ZPTF9BVEFQSV9BTF9CTAkweDBBCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfQVRBUElfQUxfQkxSMgkweDBCCisjZGVmaW5lIENTNDI3MV9EQUNWT0xfQVRBUElfQUxSMl9NCTB4MEMKKyNkZWZpbmUgQ1M0MjcxX0RBQ1ZPTF9BVEFQSV9BTFIyX0JSCTB4MEQKKyNkZWZpbmUgQ1M0MjcxX0RBQ1ZPTF9BVEFQSV9BTFIyX0JMCTB4MEUKKyNkZWZpbmUgQ1M0MjcxX0RBQ1ZPTF9BVEFQSV9BTFIyX0JMUjIJMHgwRgorCisjZGVmaW5lIENTNDI3MV9WT0xBX01VVEUJMHg4MAorI2RlZmluZSBDUzQyNzFfVk9MQV9WT0xfTUFTSwkweDdGCisjZGVmaW5lIENTNDI3MV9WT0xCX01VVEUJMHg4MAorI2RlZmluZSBDUzQyNzFfVk9MQl9WT0xfTUFTSwkweDdGCisKKyNkZWZpbmUgQ1M0MjcxX0FEQ0NUTF9ESVRIRVIxNgkweDIwCisKKyNkZWZpbmUgQ1M0MjcxX0FEQ0NUTF9BRENfRElGX01BU0sJMHgxMAorI2RlZmluZSBDUzQyNzFfQURDQ1RMX0FEQ19ESUZfTEoJMHgwMAorI2RlZmluZSBDUzQyNzFfQURDQ1RMX0FEQ19ESUZfSTJTCTB4MTAKKworI2RlZmluZSBDUzQyNzFfQURDQ1RMX01VVEVBCTB4MDgKKyNkZWZpbmUgQ1M0MjcxX0FEQ0NUTF9NVVRFQgkweDA0CisjZGVmaW5lIENTNDI3MV9BRENDVExfSFBGREEJMHgwMgorI2RlZmluZSBDUzQyNzFfQURDQ1RMX0hQRkRCCTB4MDEKKworI2RlZmluZSBDUzQyNzFfTU9ERTJfTE9PUAkweDEwCisjZGVmaW5lIENTNDI3MV9NT0RFMl9NVVRFQ0FFUVVCCTB4MDgKKyNkZWZpbmUgQ1M0MjcxX01PREUyX0ZSRUVaRQkweDA0CisjZGVmaW5lIENTNDI3MV9NT0RFMl9DUEVOCTB4MDIKKyNkZWZpbmUgQ1M0MjcxX01PREUyX1BETgkweDAxCisKKyNkZWZpbmUgQ1M0MjcxX0NISVBJRF9QQVJUX01BU0sJMHhGMAorI2RlZmluZSBDUzQyNzFfQ0hJUElEX1JFVl9NQVNLCTB4MEYKKworLyoKKyAqIERlZmF1bHQgQ1M0MjcxIHBvd2VyLXVwIGNvbmZpZ3VyYXRpb24KKyAqIEFycmF5IGNvbnRhaW5zIG5vbi1leGlzdGluZyBpbiBodyByZWdpc3RlciBhdCBhZGRyZXNzIDAKKyAqIEFycmF5IGRvIG5vdCBpbmNsdWRlIENoaXAgSUQsIGFzIGNvZGVjIGRyaXZlciBkb2VzIG5vdCB1c2UKKyAqIHJlZ2lzdGVycyByZWFkIG9wZXJhdGlvbnMgYXQgYWxsCisgKi8KK3N0YXRpYyBjb25zdCB1OCBjczQyNzFfZGZsdF9yZWdbQ1M0MjcxX05SX1JFR1NdID0geworCTAsCisJMCwKKwlDUzQyNzFfREFDQ1RMX0FNVVRFLAorCUNTNDI3MV9EQUNWT0xfU09GVCB8IENTNDI3MV9EQUNWT0xfQVRBUElfQUxfQlIsCisJMCwKKwkwLAorCTAsCisJMCwKK307CisKK3N0cnVjdCBjczQyNzFfcHJpdmF0ZSB7CisJLyogU05EX1NPQ19JMkMgb3IgU05EX1NPQ19TUEkgKi8KKwllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlCWJ1c190eXBlOworCXZvaWQJCQkJKmNvbnRyb2xfZGF0YTsKKwl1bnNpZ25lZCBpbnQJCQltY2xrOworCWJvb2wJCQkJbWFzdGVyOworCWJvb2wJCQkJZGVlbXBoOworCS8qIEN1cnJlbnQgc2FtcGxlIHJhdGUgZm9yIGRlLWVtcGhhc2lzIGNvbnRyb2wgKi8KKwlpbnQJCQkJcmF0ZTsKKwkvKiBHUElPIGRyaXZpbmcgUmVzZXQgcGluLCBpZiBhbnkgKi8KKwlpbnQJCQkJZ3Bpb19ucmVzZXQ7CisJLyogR1BJTyB0aGF0IGRpc2FibGUgc2VyaWFsIGJ1cywgaWYgYW55ICovCisJaW50CQkJCWdwaW9fZGlzYWJsZTsKK307CisKKy8qCisgKiBAZnJlcSBpcyB0aGUgZGVzaXJlZCBNQ0xLIHJhdGUKKyAqIE1DTEsgcmF0ZSBzaG91bGQgKGMpIGJlIHRoZSBzYW1wbGUgcmF0ZSwgbXVsdGlwbGllZCBieSBvbmUgb2YgdGhlCisgKiByYXRpb3MgbGlzdGVkIGluIGNzNDI3MV9tY2xrX2ZzX3JhdGlvcyB0YWJsZQorICovCitzdGF0aWMgaW50IGNzNDI3MV9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJCQkgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgY3M0MjcxX3ByaXZhdGUgKmNzNDI3MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJY3M0MjcxLT5tY2xrID0gZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjczQyNzFfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IGNzNDI3MV9wcml2YXRlICpjczQyNzEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKwlpbnQgcmV0OworCisJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJY3M0MjcxLT5tYXN0ZXIgPSAwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWNzNDI3MS0+bWFzdGVyID0gMTsKKwkJdmFsIHw9IENTNDI3MV9NT0RFMV9NQVNURVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgREFJIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJdmFsIHw9IENTNDI3MV9NT0RFMV9EQUNfRElGX0xKOworCQlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBDUzQyNzFfQURDQ1RMLAorCQkJQ1M0MjcxX0FEQ0NUTF9BRENfRElGX01BU0ssIENTNDI3MV9BRENDVExfQURDX0RJRl9MSik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCXZhbCB8PSBDUzQyNzFfTU9ERTFfREFDX0RJRl9JMlM7CisJCXJldCA9IHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIENTNDI3MV9BRENDVEwsCisJCQlDUzQyNzFfQURDQ1RMX0FEQ19ESUZfTUFTSywgQ1M0MjcxX0FEQ0NUTF9BRENfRElGX0kyUyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBEQUkgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQ1M0MjcxX01PREUxLAorCQlDUzQyNzFfTU9ERTFfREFDX0RJRl9NQVNLIHwgQ1M0MjcxX01PREUxX01BU1RFUiwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjczQyNzFfZGVlbXBoW10gPSB7MCwgNDQxMDAsIDQ4MDAwLCAzMjAwMH07CisKK3N0YXRpYyBpbnQgY3M0MjcxX3NldF9kZWVtcGgoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjczQyNzFfcHJpdmF0ZSAqY3M0MjcxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGksIHJldDsKKwlpbnQgdmFsID0gQ1M0MjcxX0RBQ0NUTF9ERU1fRElTOworCisJaWYgKGNzNDI3MS0+ZGVlbXBoKSB7CisJCS8qIEZpbmQgY2xvc2VzdCBkZS1lbXBoYXNpcyBmcmVxICovCisJCXZhbCA9IDE7CisJCWZvciAoaSA9IDI7IGkgPCBBUlJBWV9TSVpFKGNzNDI3MV9kZWVtcGgpOyBpKyspCisJCQlpZiAoYWJzKGNzNDI3MV9kZWVtcGhbaV0gLSBjczQyNzEtPnJhdGUpIDwKKwkJCSAgICBhYnMoY3M0MjcxX2RlZW1waFt2YWxdIC0gY3M0MjcxLT5yYXRlKSkKKwkJCQl2YWwgPSBpOworCQl2YWwgPDw9IDQ7CisJfQorCisJcmV0ID0gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQ1M0MjcxX0RBQ0NUTCwKKwkJQ1M0MjcxX0RBQ0NUTF9ERU1fTUFTSywgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjczQyNzFfZ2V0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjczQyNzFfcHJpdmF0ZSAqY3M0MjcxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gY3M0MjcxLT5kZWVtcGg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3M0MjcxX3B1dF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY3M0MjcxX3ByaXZhdGUgKmNzNDI3MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJY3M0MjcxLT5kZWVtcGggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCXJldHVybiBjczQyNzFfc2V0X2RlZW1waChjb2RlYyk7Cit9CisKK3N0cnVjdCBjczQyNzFfY2xrX2NmZyB7CisJYm9vbAkJbWFzdGVyOwkJLyogY29kZWMgbW9kZSAqLworCXU4CQlzcGVlZF9tb2RlOwkvKiBjb2RlYyBzcGVlZCBtb2RlOiAxeCwgMngsIDR4ICovCisJdW5zaWduZWQgc2hvcnQJcmF0aW87CQkvKiBNQ0xLIC8gc2FtcGxlIHJhdGUgKi8KKwl1OAkJcmF0aW9fbWFzazsJLyogcmF0aW8gYml0IG1hc2sgZm9yIE1hc3RlciBtb2RlICovCit9OworCitzdGF0aWMgc3RydWN0IGNzNDI3MV9jbGtfY2ZnIGNzNDI3MV9jbGtfdGFiW10gPSB7CisJezEsIENTNDI3MV9NT0RFMV9NT0RFXzFYLCAyNTYsICBDUzQyNzFfTU9ERTFfRElWXzF9LAorCXsxLCBDUzQyNzFfTU9ERTFfTU9ERV8xWCwgMzg0LCAgQ1M0MjcxX01PREUxX0RJVl8xNX0sCisJezEsIENTNDI3MV9NT0RFMV9NT0RFXzFYLCA1MTIsICBDUzQyNzFfTU9ERTFfRElWXzJ9LAorCXsxLCBDUzQyNzFfTU9ERTFfTU9ERV8xWCwgNzY4LCAgQ1M0MjcxX01PREUxX0RJVl8zfSwKKwl7MSwgQ1M0MjcxX01PREUxX01PREVfMlgsIDEyOCwgIENTNDI3MV9NT0RFMV9ESVZfMX0sCisJezEsIENTNDI3MV9NT0RFMV9NT0RFXzJYLCAxOTIsICBDUzQyNzFfTU9ERTFfRElWXzE1fSwKKwl7MSwgQ1M0MjcxX01PREUxX01PREVfMlgsIDI1NiwgIENTNDI3MV9NT0RFMV9ESVZfMn0sCisJezEsIENTNDI3MV9NT0RFMV9NT0RFXzJYLCAzODQsICBDUzQyNzFfTU9ERTFfRElWXzN9LAorCXsxLCBDUzQyNzFfTU9ERTFfTU9ERV80WCwgNjQsICAgQ1M0MjcxX01PREUxX0RJVl8xfSwKKwl7MSwgQ1M0MjcxX01PREUxX01PREVfNFgsIDk2LCAgIENTNDI3MV9NT0RFMV9ESVZfMTV9LAorCXsxLCBDUzQyNzFfTU9ERTFfTU9ERV80WCwgMTI4LCAgQ1M0MjcxX01PREUxX0RJVl8yfSwKKwl7MSwgQ1M0MjcxX01PREUxX01PREVfNFgsIDE5MiwgIENTNDI3MV9NT0RFMV9ESVZfM30sCisJezAsIENTNDI3MV9NT0RFMV9NT0RFXzFYLCAyNTYsICBDUzQyNzFfTU9ERTFfRElWXzF9LAorCXswLCBDUzQyNzFfTU9ERTFfTU9ERV8xWCwgMzg0LCAgQ1M0MjcxX01PREUxX0RJVl8xfSwKKwl7MCwgQ1M0MjcxX01PREUxX01PREVfMVgsIDUxMiwgIENTNDI3MV9NT0RFMV9ESVZfMX0sCisJezAsIENTNDI3MV9NT0RFMV9NT0RFXzFYLCA3NjgsICBDUzQyNzFfTU9ERTFfRElWXzJ9LAorCXswLCBDUzQyNzFfTU9ERTFfTU9ERV8xWCwgMTAyNCwgQ1M0MjcxX01PREUxX0RJVl8yfSwKKwl7MCwgQ1M0MjcxX01PREUxX01PREVfMlgsIDEyOCwgIENTNDI3MV9NT0RFMV9ESVZfMX0sCisJezAsIENTNDI3MV9NT0RFMV9NT0RFXzJYLCAxOTIsICBDUzQyNzFfTU9ERTFfRElWXzF9LAorCXswLCBDUzQyNzFfTU9ERTFfTU9ERV8yWCwgMjU2LCAgQ1M0MjcxX01PREUxX0RJVl8xfSwKKwl7MCwgQ1M0MjcxX01PREUxX01PREVfMlgsIDM4NCwgIENTNDI3MV9NT0RFMV9ESVZfMn0sCisJezAsIENTNDI3MV9NT0RFMV9NT0RFXzJYLCA1MTIsICBDUzQyNzFfTU9ERTFfRElWXzJ9LAorCXswLCBDUzQyNzFfTU9ERTFfTU9ERV80WCwgNjQsICAgQ1M0MjcxX01PREUxX0RJVl8xfSwKKwl7MCwgQ1M0MjcxX01PREUxX01PREVfNFgsIDk2LCAgIENTNDI3MV9NT0RFMV9ESVZfMX0sCisJezAsIENTNDI3MV9NT0RFMV9NT0RFXzRYLCAxMjgsICBDUzQyNzFfTU9ERTFfRElWXzF9LAorCXswLCBDUzQyNzFfTU9ERTFfTU9ERV80WCwgMTkyLCAgQ1M0MjcxX01PREUxX0RJVl8yfSwKKwl7MCwgQ1M0MjcxX01PREUxX01PREVfNFgsIDI1NiwgIENTNDI3MV9NT0RFMV9ESVZfMn0sCit9OworCisjZGVmaW5lIENTNDE3MV9OUl9SQVRJT1MgQVJSQVlfU0laRShjczQyNzFfY2xrX3RhYikKKworc3RhdGljIGludCBjczQyNzFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBjczQyNzFfcHJpdmF0ZSAqY3M0MjcxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGksIHJldDsKKwl1bnNpZ25lZCBpbnQgcmF0aW8sIHZhbDsKKworCWNzNDI3MS0+cmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwkvKiBDb25maWd1cmUgREFDICovCisJaWYgKGNzNDI3MS0+cmF0ZSA8IDUwMDAwKQorCQl2YWwgPSBDUzQyNzFfTU9ERTFfTU9ERV8xWDsKKwllbHNlIGlmIChjczQyNzEtPnJhdGUgPCAxMDAwMDApCisJCXZhbCA9IENTNDI3MV9NT0RFMV9NT0RFXzJYOworCWVsc2UKKwkJdmFsID0gQ1M0MjcxX01PREUxX01PREVfNFg7CisKKwlyYXRpbyA9IGNzNDI3MS0+bWNsayAvIGNzNDI3MS0+cmF0ZTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1M0MTcxX05SX1JBVElPUzsgaSsrKQorCQlpZiAoKGNzNDI3MV9jbGtfdGFiW2ldLm1hc3RlciA9PSBjczQyNzEtPm1hc3RlcikgJiYKKwkJICAgIChjczQyNzFfY2xrX3RhYltpXS5zcGVlZF9tb2RlID09IHZhbCkgJiYKKwkJICAgIChjczQyNzFfY2xrX3RhYltpXS5yYXRpbyA9PSByYXRpbykpCisJCQlicmVhazsKKworCWlmIChpID09IENTNDE3MV9OUl9SQVRJT1MpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBzYW1wbGUgcmF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZhbCB8PSBjczQyNzFfY2xrX3RhYltpXS5yYXRpb19tYXNrOworCisJcmV0ID0gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQ1M0MjcxX01PREUxLAorCQlDUzQyNzFfTU9ERTFfTU9ERV9NQVNLIHwgQ1M0MjcxX01PREUxX0RJVl9NQVNLLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGNzNDI3MV9zZXRfZGVlbXBoKGNvZGVjKTsKK30KKworc3RhdGljIGludCBjczQyNzFfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCWludCByZXQ7CisJaW50IHZhbF9hID0gMDsKKwlpbnQgdmFsX2IgPSAwOworCisJaWYgKG11dGUpIHsKKwkJdmFsX2EgPSBDUzQyNzFfVk9MQV9NVVRFOworCQl2YWxfYiA9IENTNDI3MV9WT0xCX01VVEU7CisJfQorCisJcmV0ID0gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQ1M0MjcxX1ZPTEEsIENTNDI3MV9WT0xBX01VVEUsIHZhbF9hKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBDUzQyNzFfVk9MQiwgQ1M0MjcxX1ZPTEJfTVVURSwgdmFsX2IpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKKy8qIENTNDI3MSBjb250cm9scyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGNzNDI3MV9kYWNfdGx2LCAtMTI3MDAsIDEwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjczQyNzFfc25kX2NvbnRyb2xzW10gPSB7CisJU09DX0RPVUJMRV9SX1RMVigiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIENTNDI3MV9WT0xBLCBDUzQyNzFfVk9MQiwKKwkJMCwgMHg3RiwgMSwgY3M0MjcxX2RhY190bHYpLAorCVNPQ19TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwgQ1M0MjcxX01PREUyLCA0LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJTb2Z0IFJhbXAgU3dpdGNoIiwgQ1M0MjcxX0RBQ1ZPTCwgNSwgMSwgMCksCisJU09DX1NJTkdMRSgiWmVybyBDcm9zcyBTd2l0Y2giLCBDUzQyNzFfREFDVk9MLCA0LCAxLCAwKSwKKwlTT0NfU0lOR0xFX0JPT0xfRVhUKCJEZS1lbXBoYXNpcyBTd2l0Y2giLCAwLAorCQljczQyNzFfZ2V0X2RlZW1waCwgY3M0MjcxX3B1dF9kZWVtcGgpLAorCVNPQ19TSU5HTEUoIkF1dG8tTXV0ZSBTd2l0Y2giLCBDUzQyNzFfREFDQ1RMLCA3LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJTbG93IFJvbGwgT2ZmIEZpbHRlciBTd2l0Y2giLCBDUzQyNzFfREFDQ1RMLCA2LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJTb2Z0IFZvbHVtZSBSYW1wLVVwIFN3aXRjaCIsIENTNDI3MV9EQUNDVEwsIDMsIDEsIDApLAorCVNPQ19TSU5HTEUoIlNvZnQgUmFtcC1Eb3duIFN3aXRjaCIsIENTNDI3MV9EQUNDVEwsIDIsIDEsIDApLAorCVNPQ19TSU5HTEUoIkxlZnQgQ2hhbm5lbCBJbnZlcnNpb24gU3dpdGNoIiwgQ1M0MjcxX0RBQ0NUTCwgMSwgMSwgMCksCisJU09DX1NJTkdMRSgiUmlnaHQgQ2hhbm5lbCBJbnZlcnNpb24gU3dpdGNoIiwgQ1M0MjcxX0RBQ0NUTCwgMCwgMSwgMCksCisJU09DX0RPVUJMRSgiTWFzdGVyIENhcHR1cmUgU3dpdGNoIiwgQ1M0MjcxX0FEQ0NUTCwgMywgMiwgMSwgMSksCisJU09DX1NJTkdMRSgiRGl0aGVyIDE2LUJpdCBEYXRhIFN3aXRjaCIsIENTNDI3MV9BRENDVEwsIDUsIDEsIDApLAorCVNPQ19ET1VCTEUoIkhpZ2ggUGFzcyBGaWx0ZXIgU3dpdGNoIiwgQ1M0MjcxX0FEQ0NUTCwgMSwgMCwgMSwgMSksCisJU09DX0RPVUJMRV9SKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgQ1M0MjcxX1ZPTEEsIENTNDI3MV9WT0xCLAorCQk3LCAxLCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGNzNDI3MV9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBjczQyNzFfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gY3M0MjcxX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gY3M0MjcxX3NldF9kYWlfZm10LAorCS5kaWdpdGFsX211dGUJPSBjczQyNzFfZGlnaXRhbF9tdXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgY3M0MjcxX2RhaSA9IHsKKwkubmFtZSA9ICJjczQyNzEtaGlmaSIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUJPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluCT0gMiwKKwkJLmNoYW5uZWxzX21heAk9IDIsCisJCS5yYXRlcwkJPSBDUzQyNzFfUENNX1JBVEVTLAorCQkuZm9ybWF0cwk9IENTNDI3MV9QQ01fRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUJPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4JPSAyLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJLnJhdGVzCQk9IENTNDI3MV9QQ01fUkFURVMsCisJCS5mb3JtYXRzCT0gQ1M0MjcxX1BDTV9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZjczQyNzFfZGFpX29wcywKKwkuc3ltbWV0cmljX3JhdGVzID0gMSwKK307CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgY3M0MjcxX3NvY19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJaW50IHJldDsKKwkvKiBTZXQgcG93ZXItZG93biBiaXQgKi8KKwlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBDUzQyNzFfTU9ERTIsIDAsIENTNDI3MV9NT0RFMl9QRE4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzNDI3MV9zb2NfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgcmV0OworCS8qIFJlc3RvcmUgY29kZWMgc3RhdGUgKi8KKwlyZXQgPSBzbmRfc29jX2NhY2hlX3N5bmMoY29kZWMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCS8qIHRoZW4gZGlzYWJsZSB0aGUgcG93ZXItZG93biBiaXQgKi8KKwlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBDUzQyNzFfTU9ERTIsIENTNDI3MV9NT0RFMl9QRE4sIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgY3M0MjcxX3NvY19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgY3M0MjcxX3NvY19yZXN1bWUJTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgaW50IGNzNDI3MV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNzNDI3MV9wcml2YXRlICpjczQyNzEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgY3M0MjcxX3BsYXRmb3JtX2RhdGEgKmNzNDI3MXBsYXQgPSBjb2RlYy0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisJaW50IGdwaW9fbnJlc2V0ID0gLUVJTlZBTDsKKworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBjczQyNzEtPmNvbnRyb2xfZGF0YTsKKworCWlmIChjczQyNzFwbGF0ICYmIGdwaW9faXNfdmFsaWQoY3M0MjcxcGxhdC0+Z3Bpb19ucmVzZXQpKQorCQlncGlvX25yZXNldCA9IGNzNDI3MXBsYXQtPmdwaW9fbnJlc2V0OworCisJaWYgKGdwaW9fbnJlc2V0ID49IDApCisJCWlmIChncGlvX3JlcXVlc3QoZ3Bpb19ucmVzZXQsICJDUzQyNzEgUmVzZXQiKSkKKwkJCWdwaW9fbnJlc2V0ID0gLUVJTlZBTDsKKwlpZiAoZ3Bpb19ucmVzZXQgPj0gMCkgeworCQkvKiBSZXNldCBjb2RlYyAqLworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb19ucmVzZXQsIDApOworCQl1ZGVsYXkoMSk7CisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9fbnJlc2V0LCAxKTsKKwkJLyogR2l2ZSB0aGUgY29kZWMgdGltZSB0byB3YWtlIHVwICovCisJCXVkZWxheSgxKTsKKwl9CisKKwljczQyNzEtPmdwaW9fbnJlc2V0ID0gZ3Bpb19ucmVzZXQ7CisKKwkvKgorCSAqIEluIGNhc2Ugb2YgSTJDLCBjaGlwIGFkZHJlc3Mgc3BlY2lmaWVkIGluIGJvYXJkIGRhdGEuCisJICogU28gY2FjaGUgSU8gb3BlcmF0aW9ucyB1c2UgOCBiaXQgY29kZWMgcmVnaXN0ZXIgYWRkcmVzcy4KKwkgKiBJbiBjYXNlIG9mIFNQSSwgY2hpcCBhZGRyZXNzIGFuZCByZWdpc3RlciBhZGRyZXNzCisJICogcGFzc2VkIHRvZ2V0aGVyIGFzIDE2IGJpdCB2YWx1ZS4KKwkgKiBBbnl3YXksIHJlZ2lzdGVyIGFkZHJlc3MgaXMgbWFza2VkIHdpdGggMHhGRiBpbnNpZGUKKwkgKiBzb2MtY2FjaGUgY29kZS4KKwkgKi8KKwlpZiAoY3M0MjcxLT5idXNfdHlwZSA9PSBTTkRfU09DX1NQSSkKKwkJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDE2LCA4LAorCQkJY3M0MjcxLT5idXNfdHlwZSk7CisJZWxzZQorCQlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgOCwKKwkJCWNzNDI3MS0+YnVzX3R5cGUpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIENTNDI3MV9NT0RFMiwgMCwKKwkJQ1M0MjcxX01PREUyX1BETiB8IENTNDI3MV9NT0RFMl9DUEVOKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBDUzQyNzFfTU9ERTIsIENTNDI3MV9NT0RFMl9QRE4sIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCS8qIFBvd2VyLXVwIHNlcXVlbmNlIHJlcXVpcmVzIDg1IHVTICovCisJdWRlbGF5KDg1KTsKKworCXJldHVybiBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgY3M0MjcxX3NuZF9jb250cm9scywKKwkJQVJSQVlfU0laRShjczQyNzFfc25kX2NvbnRyb2xzKSk7Cit9CisKK3N0YXRpYyBpbnQgY3M0MjcxX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNzNDI3MV9wcml2YXRlICpjczQyNzEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgZ3Bpb19ucmVzZXQ7CisKKwlncGlvX25yZXNldCA9IGNzNDI3MS0+Z3Bpb19ucmVzZXQ7CisKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvX25yZXNldCkpIHsKKwkJLyogU2V0IGNvZGVjIHRvIHRoZSByZXNldCBzdGF0ZSAqLworCQlncGlvX3NldF92YWx1ZShncGlvX25yZXNldCwgMCk7CisJCWdwaW9fZnJlZShncGlvX25yZXNldCk7CisJfQorCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfY3M0MjcxID0geworCS5wcm9iZQkJCT0gY3M0MjcxX3Byb2JlLAorCS5yZW1vdmUJCQk9IGNzNDI3MV9yZW1vdmUsCisJLnN1c3BlbmQJCT0gY3M0MjcxX3NvY19zdXNwZW5kLAorCS5yZXN1bWUJCQk9IGNzNDI3MV9zb2NfcmVzdW1lLAorCS5yZWdfY2FjaGVfZGVmYXVsdAk9IGNzNDI3MV9kZmx0X3JlZywKKwkucmVnX2NhY2hlX3NpemUJCT0gQVJSQVlfU0laRShjczQyNzFfZGZsdF9yZWcpLAorCS5yZWdfd29yZF9zaXplCQk9IHNpemVvZihjczQyNzFfZGZsdF9yZWdbMF0pLAorCS5jb21wcmVzc190eXBlCQk9IFNORF9TT0NfRkxBVF9DT01QUkVTU0lPTiwKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCBfX2RldmluaXQgY3M0MjcxX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBjczQyNzFfcHJpdmF0ZSAqY3M0MjcxOworCisJY3M0MjcxID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKCpjczQyNzEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNzNDI3MSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBjczQyNzEpOworCWNzNDI3MS0+Y29udHJvbF9kYXRhID0gc3BpOworCWNzNDI3MS0+YnVzX3R5cGUgPSBTTkRfU09DX1NQSTsKKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZzcGktPmRldiwgJnNvY19jb2RlY19kZXZfY3M0MjcxLAorCQkmY3M0MjcxX2RhaSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGNzNDI3MV9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZzcGktPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBjczQyNzFfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJjczQyNzEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBjczQyNzFfc3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoY3M0MjcxX3NwaV9yZW1vdmUpLAorfTsKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MV9pMmNfaWRbXSA9IHsKKwl7ImNzNDI3MSIsIDB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGNzNDI3MV9pMmNfaWQpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjczQyNzFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBjczQyNzFfcHJpdmF0ZSAqY3M0MjcxOworCisJY3M0MjcxID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCpjczQyNzEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNzNDI3MSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjczQyNzEpOworCWNzNDI3MS0+Y29udHJvbF9kYXRhID0gY2xpZW50OworCWNzNDI3MS0+YnVzX3R5cGUgPSBTTkRfU09DX0kyQzsKKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldiwgJnNvY19jb2RlY19kZXZfY3M0MjcxLAorCQkmY3M0MjcxX2RhaSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGNzNDI3MV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjczQyNzFfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJjczQyNzEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5pZF90YWJsZQk9IGNzNDI3MV9pMmNfaWQsCisJLnByb2JlCQk9IGNzNDI3MV9pMmNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChjczQyNzFfaTJjX3JlbW92ZSksCit9OworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgKi8KKworLyoKKyAqIFdlIG9ubHkgcmVnaXN0ZXIgb3VyIHNlcmlhbCBidXMgZHJpdmVyIGhlcmUgd2l0aG91dAorICogYXNzaWdubWVudCB0byBwYXJ0aWN1bGFyIGNoaXAuIFNvIGlmIGFueSBvZiB0aGUgYmVsb3cKKyAqIGZhaWxzLCB0aGVyZSBpcyBzb21lIHByb2JsZW0gd2l0aCBJMkMgb3IgU1BJIHN1YnN5c3RlbS4KKyAqIEluIG1vc3QgY2FzZXMgdGhpcyBtb2R1bGUgd2lsbCBiZSBjb21waWxlZCB3aXRoIHN1cHBvcnQKKyAqIG9mIG9ubHkgb25lIHNlcmlhbCBidXMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNzNDI3MV9tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldDsKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmY3M0MjcxX2kyY19kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgQ1M0MjcxIEkyQyBkcml2ZXI6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZjczQyNzFfc3BpX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBDUzQyNzEgU1BJIGRyaXZlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGNzNDI3MV9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNzNDI3MV9tb2RleGl0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDI3MV9zcGlfZHJpdmVyKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZjczQyNzFfaTJjX2RyaXZlcik7CisjZW5kaWYKK30KK21vZHVsZV9leGl0KGNzNDI3MV9tb2RleGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWxleGFuZGVyIFN2ZXJkbGluIDxzdWJhcGFydHNAeWFuZGV4LnJ1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjcxIEFMU0EgU29DIENvZGVjIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9kZmJtY3MzMjAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvZGZibWNzMzIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0YmJkZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZGZibWNzMzIwLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIERGQk0tQ1MzMjAgYmx1ZXRvb3RoIG1vZHVsZQorICogQ29weXJpZ2h0IDIwMTEgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgZGZibWNzMzIwX2RhaSA9IHsKKwkubmFtZSA9ICJkZmJtY3MzMjAtcGNtIiwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMSwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDEsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9kZmJtY3MzMjA7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRmYm1jczMyMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYsICZzb2NfY29kZWNfZGV2X2RmYm1jczMyMCwKKwkJCSZkZmJtY3MzMjBfZGFpLCAxKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGZibWNzMzIwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmcGRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkZm1jczMyMF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZGZibWNzMzIwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBkZmJtY3MzMjBfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRmYm1jczMyMF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGZibWNzMzIwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkZm1jczMyMF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZGZibWNzMzIwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGZibWNzMzIwX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZGZtY3MzMjBfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRmYm1jczMyMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgREZCTS1DUzMyMCBibHVldGhvb3RoIG1vZHVsZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvbG00ODU3LmMgYi9zb3VuZC9zb2MvY29kZWNzL2xtNDg1Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZGU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2xtNDg1Ny5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogTE00ODU3IEFNUCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBHcmFlbWUgR3JlZ29yeQorICogICAgICAgICBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqIENvcHlyaWdodCAyMDExIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworc3RydWN0IGxtNDg1NyB7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwl1aW50OF90IG1vZGU7Cit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBsbTQ4NTdfZGVmYXVsdF9yZWdzW10gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisKKy8qIFRoZSByZWdpc3RlciBvZmZzZXRzIGluIHRoZSBjYWNoZSBhcnJheSAqLworI2RlZmluZSBMTTQ4NTdfTVZPTCAwCisjZGVmaW5lIExNNDg1N19MVk9MIDEKKyNkZWZpbmUgTE00ODU3X1JWT0wgMgorI2RlZmluZSBMTTQ4NTdfQ1RSTCAzCisKKy8qIHRoZSBzaGlmdHMgcmVxdWlyZWQgdG8gc2V0IHRoZXNlIGJpdHMgKi8KKyNkZWZpbmUgTE00ODU3XzNEIDUKKyNkZWZpbmUgTE00ODU3X1dBS0VVUCA1CisjZGVmaW5lIExNNDg1N19FUEdBSU4gNAorCitzdGF0aWMgaW50IGxtNDg1N193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1aW50OF90IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfY2FjaGVfd3JpdGUoY29kZWMsIHJlZywgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGF0YSA9IChyZWcgPDwgNikgfCB2YWx1ZTsKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY29kZWMtPmNvbnRyb2xfZGF0YSwgJmRhdGEsIDEpOworCWlmIChyZXQgIT0gMSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXI6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGxtNDg1N19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2NhY2hlX3JlYWQoY29kZWMsIHJlZywgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBsbTQ4NTdfZ2V0X21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBsbTQ4NTcgKmxtNDg1NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBsbTQ4NTctPm1vZGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsbTQ4NTdfc2V0X21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBsbTQ4NTcgKmxtNDg1NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXVpbnQ4X3QgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWxtNDg1Ny0+bW9kZSA9IHZhbHVlOworCisJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09OKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBMTTQ4NTdfQ1RSTCwgMHgwRiwgdmFsdWUgKyA2KTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxtNDg1N19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0cnVjdCBsbTQ4NTcgKmxtNDg1NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBMTTQ4NTdfQ1RSTCwgMHgwRiwgbG00ODU3LT5tb2RlICsgNik7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIExNNDg1N19DVFJMLCAweDBGLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpsbTQ4NTdfbW9kZVtdID0geworCSJFYXJwaWVjZSIsCisJIkxvdWRzcGVha2VyIiwKKwkiTG91ZHNwZWFrZXIgKyBIZWFkcGhvbmUiLAorCSJIZWFkcGhvbmUiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBsbTQ4NTdfbW9kZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUobG00ODU3X21vZGUpLCBsbTQ4NTdfbW9kZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBsbTQ4NTdfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTiIpLAorCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTFMiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkVQIiksCit9OworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3RlcmVvX3RsdiwgLTQwNTAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobW9ub190bHYsIC0zNDUwLCAxNTAsIDApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbG00ODU3X2NvbnRyb2xzW10gPSB7CisJU09DX1NJTkdMRV9UTFYoIkxlZnQgUGxheWJhY2sgVm9sdW1lIiwgTE00ODU3X0xWT0wsIDAsIDMxLCAwLAorCQlzdGVyZW9fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiUmlnaHQgUGxheWJhY2sgVm9sdW1lIiwgTE00ODU3X1JWT0wsIDAsIDMxLCAwLAorCQlzdGVyZW9fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCBMTTQ4NTdfTVZPTCwgMCwgMzEsIDAsCisJCW1vbm9fdGx2KSwKKwlTT0NfU0lOR0xFKCJTcGsgM0QgUGxheWJhY2sgU3dpdGNoIiwgTE00ODU3X0xWT0wsIExNNDg1N18zRCwgMSwgMCksCisJU09DX1NJTkdMRSgiSFAgM0QgUGxheWJhY2sgU3dpdGNoIiwgTE00ODU3X1JWT0wsIExNNDg1N18zRCwgMSwgMCksCisJU09DX1NJTkdMRSgiRmFzdCBXYWtldXAgUGxheWJhY2sgU3dpdGNoIiwgTE00ODU3X0NUUkwsCisJCUxNNDg1N19XQUtFVVAsIDEsIDApLAorCVNPQ19TSU5HTEUoIkVhcnBpZWNlIDZkQiBQbGF5YmFjayBTd2l0Y2giLCBMTTQ4NTdfQ1RSTCwKKwkJTE00ODU3X0VQR0FJTiwgMSwgMCksCisKKwlTT0NfRU5VTV9FWFQoIk1vZGUiLCBsbTQ4NTdfbW9kZV9lbnVtLAorCQlsbTQ4NTdfZ2V0X21vZGUsIGxtNDg1N19zZXRfbW9kZSksCit9OworCisvKiBUaGVyZSBpcyBhIGRlbXV4IGluYmV0d2VlbiB0aGUgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG91dHB1dCBzaWduYWxzLgorICogQ3VycmVudGx5IHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIG1vZGVsIGl0IGluIEFTb0MgYW5kIHNpbmNlIGl0IGRvZXMgbm90IG1ha2UKKyAqIG11Y2ggb2YgYSBkaWZmZXJlbmNlIGluIHByYWN0aWNlIHNpbXBseSBjb25uZWN0IHRoZSBpbnB1dCBkaXJlY2x0eSB0byB0aGUKKyAqIG91dHB1dHMuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBsbTQ4NTdfcm91dGVzW10gPSB7CisJeyJMUyIsIE5VTEwsICJJTiJ9LAorCXsiSFAiLCBOVUxMLCAiSU4ifSwKKwl7IkVQIiwgTlVMTCwgIklOIn0sCit9OworCitzdGF0aWMgaW50IGxtNDg1N19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGxtNDg1NyAqbG00ODU3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCWludCByZXQ7CisKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gbG00ODU3LT5pMmM7CisKKwlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgbG00ODU3X2NvbnRyb2xzLAorCQkJQVJSQVlfU0laRShsbTQ4NTdfY29udHJvbHMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBsbTQ4NTdfZGFwbV93aWRnZXRzLAorCQkJQVJSQVlfU0laRShsbTQ4NTdfZGFwbV93aWRnZXRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGxtNDg1N19yb3V0ZXMsCisJCQlBUlJBWV9TSVpFKGxtNDg1N19yb3V0ZXMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGRhcG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9sbTQ4NTcgPSB7CisJLndyaXRlID0gbG00ODU3X3dyaXRlLAorCS5yZWFkID0gbG00ODU3X3JlYWQsCisJLnByb2JlID0gbG00ODU3X3Byb2JlLAorCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUobG00ODU3X2RlZmF1bHRfcmVncyksCisJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodWludDhfdCksCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0gbG00ODU3X2RlZmF1bHRfcmVncywKKwkuc2V0X2JpYXNfbGV2ZWwgPSBsbTQ4NTdfc2V0X2JpYXNfbGV2ZWwsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsbTQ4NTdfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBsbTQ4NTcgKmxtNDg1NzsKKwlpbnQgcmV0OworCisJbG00ODU3ID0ga3phbGxvYyhzaXplb2YoKmxtNDg1NyksIEdGUF9LRVJORUwpOworCWlmICghbG00ODU3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGxtNDg1Nyk7CisKKwlsbTQ4NTctPmkyYyA9IGkyYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2LCAmc29jX2NvZGVjX2Rldl9sbTQ4NTcsIE5VTEwsIDApOworCisJaWYgKHJldCkgeworCQlrZnJlZShsbTQ4NTcpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbTQ4NTdfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXN0cnVjdCBsbTQ4NTcgKmxtNDg1NyA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZpMmMtPmRldik7CisJa2ZyZWUobG00ODU3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG00ODU3X2kyY19pZFtdID0geworCXsgImxtNDg1NyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG00ODU3X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTQ4NTdfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJsbTQ4NTciLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IGxtNDg1N19pMmNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGxtNDg1N19pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBsbTQ4NTdfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbG00ODU3X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmxtNDg1N19pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGxtNDg1N19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGxtNDg1N19leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmxtNDg1N19pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGxtNDg1N19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxNNDg1NyBhbXBsaWZpZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL21heDk4MDg4LmMgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4MDg4LmMKaW5kZXggODk0OThmOS4uYmQwNTE3YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODA4OC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgwODguYwpAQCAtNjA4LDcgKzYwOCw3IEBACiAgICAgICAgeyAweEZGLCAweDAwLCAxIH0sIC8qIEZGICovCiB9OwogCi1zdGF0aWMgaW50IG1heDk4MDg4X3ZvbGF0aWxlX3JlZ2lzdGVyKHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW50IG1heDk4MDg4X3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKIHsKICAgICAgICByZXR1cm4gbWF4OTgwODhfYWNjZXNzW3JlZ10udm9sOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4NTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhkMmVlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9tYXg5ODUwLmMKQEAgLTAsMCArMSwzODkgQEAKKy8qCisgKiBtYXg5ODUwLmMgIC0tICBjb2RlYyBkcml2ZXIgZm9yIG1heDk4NTAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgdGFza2l0IEdtYkgKKyAqCisgKiBBdXRob3I6IENocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPgorICoKKyAqIEluaXRpYWwgZGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIHdhcyBmdW5kZWQgYnkKKyAqIE1JQ1JPTklDIENvbXB1dGVyIFN5c3RlbWUgR21iSCwgaHR0cDovL3d3dy5tY3NiZXJsaW4uZGUvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAibWF4OTg1MC5oIgorCitzdHJ1Y3QgbWF4OTg1MF9wcml2IHsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrOworfTsKKworLyogbWF4OTg1MCByZWdpc3RlciBjYWNoZSAqLworc3RhdGljIGNvbnN0IHU4IG1heDk4NTBfcmVnW01BWDk4NTBfQ0FDSEVSRUdOVU1dID0geworCTB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKKy8qIHRoZXNlIHJlZ2lzdGVycyBhcmUgbm90IHVzZWQgYXQgdGhlIG1vbWVudCBidXQgcHJvdmlkZWQgZm9yIHRoZSBzYWtlIG9mCisgKiBjb21wbGV0ZW5lc3MgKi8KK3N0YXRpYyBpbnQgbWF4OTg1MF92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCXVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIE1BWDk4NTBfU1RBVFVTQToKKwljYXNlIE1BWDk4NTBfU1RBVFVTQjoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heDk4NTBfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoNCksCisJMHgxOCwgMHgxZiwgVExWX0RCX1NDQUxFX0lURU0oLTc0NTAsIDQwMCwgMCksCisJMHgyMCwgMHgzMywgVExWX0RCX1NDQUxFX0lURU0oLTQxNTAsIDIwMCwgMCksCisJMHgzNCwgMHgzNywgVExWX0RCX1NDQUxFX0lURU0oLTE1MCwgMTAwLCAwKSwKKwkweDM4LCAweDNmLCBUTFZfREJfU0NBTEVfSVRFTSgyNTAsIDUwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODUwX2NvbnRyb2xzW10gPSB7CitTT0NfU0lOR0xFX1RMVigiSGVhZHBob25lIFZvbHVtZSIsIE1BWDk4NTBfVk9MVU1FLCAwLCAweDNmLCAxLCBtYXg5ODUwX3RsdiksCitTT0NfU0lOR0xFKCJIZWFkcGhvbmUgU3dpdGNoIiwgTUFYOTg1MF9WT0xVTUUsIDcsIDEsIDEpLAorU09DX1NJTkdMRSgiTW9ubyBTd2l0Y2giLCBNQVg5ODUwX0dFTkVSQUxfUFVSUE9TRSwgMiwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbWF4OTg1MF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTGluZSBJbiBTd2l0Y2giLCBNQVg5ODUwX0VOQUJMRSwgMSwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgbWF4OTg1MF9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIkNoYXJnZSBQdW1wIDEiLCBNQVg5ODUwX0VOQUJMRSwgNCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJDaGFyZ2UgUHVtcCAyIiwgTUFYOTg1MF9FTkFCTEUsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiTUNMSyIsIE1BWDk4NTBfRU5BQkxFLCA2LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIlNIRE4iLCBNQVg5ODUwX0VOQUJMRSwgNywgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMKCJPdXRwdXQgTWl4ZXIiLCBNQVg5ODUwX0VOQUJMRSwgMiwgMCwKKwkJJm1heDk4NTBfbWl4ZXJfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUobWF4OTg1MF9taXhlcl9jb250cm9scykpLAorU05EX1NPQ19EQVBNX1BHQSgiSGVhZHBob25lIE91dHB1dCIsIE1BWDk4NTBfRU5BQkxFLCAzLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQyIsICJIaUZpIFBsYXliYWNrIiwgTUFYOTg1MF9FTkFCTEUsIDAsIDApLAorU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUTCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSFBMIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVRSIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJIUFIiKSwKK1NORF9TT0NfREFQTV9NSVhFUigiTGluZSBJbnB1dCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOTCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTlIiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CisJLyogb3V0cHV0IG1peGVyICovCisJeyJPdXRwdXQgTWl4ZXIiLCBOVUxMLCAiREFDIn0sCisJeyJPdXRwdXQgTWl4ZXIiLCAiTGluZSBJbiBTd2l0Y2giLCAiTGluZSBJbnB1dCJ9LAorCisJLyogb3V0cHV0cyAqLworCXsiSGVhZHBob25lIE91dHB1dCIsIE5VTEwsICJPdXRwdXQgTWl4ZXIifSwKKwl7IkhQTCIsIE5VTEwsICJIZWFkcGhvbmUgT3V0cHV0In0sCisJeyJIUFIiLCBOVUxMLCAiSGVhZHBob25lIE91dHB1dCJ9LAorCXsiT1VUTCIsIE5VTEwsICJPdXRwdXQgTWl4ZXIifSwKKwl7Ik9VVFIiLCBOVUxMLCAiT3V0cHV0IE1peGVyIn0sCisKKwkvKiBpbnB1dHMgKi8KKwl7IkxpbmUgSW5wdXQiLCBOVUxMLCAiSU5MIn0sCisJeyJMaW5lIElucHV0IiwgTlVMTCwgIklOUiJ9LAorCisJLyogc3VwcGxpZXMgKi8KKwl7Ik91dHB1dCBNaXhlciIsIE5VTEwsICJDaGFyZ2UgUHVtcCAxIn0sCisJeyJPdXRwdXQgTWl4ZXIiLCBOVUxMLCAiQ2hhcmdlIFB1bXAgMiJ9LAorCXsiT3V0cHV0IE1peGVyIiwgTlVMTCwgIlNIRE4ifSwKKwl7IkRBQyIsIE5VTEwsICJNQ0xLIn0sCit9OworCitzdGF0aWMgaW50IG1heDk4NTBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgbWF4OTg1MF9wcml2ICptYXg5ODUwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTY0IGxyY2xrX2RpdjsKKwl1OCBzZiwgZGE7CisKKwlpZiAoIW1heDk4NTAtPnN5c2NsaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBscmNsa19kaXYgPSAyXjIyICogcmF0ZSAvIGljbGsgd2l0aCBpY2xrID0gbWNsayAvIHNmICovCisJc2YgPSAoc25kX3NvY19yZWFkKGNvZGVjLCBNQVg5ODUwX0NMT0NLKSA+PiAyKSArIDE7CisJbHJjbGtfZGl2ID0gKDEgPDwgMjIpOworCWxyY2xrX2RpdiAqPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWxyY2xrX2RpdiAqPSBzZjsKKwlkb19kaXYobHJjbGtfZGl2LCBtYXg5ODUwLT5zeXNjbGspOworCisJc25kX3NvY193cml0ZShjb2RlYywgTUFYOTg1MF9MUkNMS19NU0IsIChscmNsa19kaXYgPj4gOCkgJiAweDdmKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBNQVg5ODUwX0xSQ0xLX0xTQiwgbHJjbGtfZGl2ICYgMHhmZik7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWRhID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWRhID0gMHgyOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlkYSA9IDB4MzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE1BWDk4NTBfRElHSVRBTF9BVURJTywgMHgzLCBkYSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg5ODUwX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCBtYXg5ODUwX3ByaXYgKm1heDk4NTAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCS8qIGNhbGN1bGF0ZSBtY2xrIC0+IGljbGsgZGl2aWRlciAqLworCWlmIChmcmVxIDw9IDEzMDAwMDAwKQorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNQVg5ODUwX0NMT0NLLCAweDApOworCWVsc2UgaWYgKGZyZXEgPD0gMjYwMDAwMDApCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE1BWDk4NTBfQ0xPQ0ssIDB4NCk7CisJZWxzZSBpZiAoZnJlcSA8PSA0MDAwMDAwMCkKKwkJc25kX3NvY193cml0ZShjb2RlYywgTUFYOTg1MF9DTE9DSywgMHg4KTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJbWF4OTg1MC0+c3lzY2xrID0gZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg5ODUwX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTggZGEgPSAwOworCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlkYSB8PSBNQVg5ODUwX01BU1RFUjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBpbnRlcmZhY2UgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlkYSB8PSBNQVg5ODUwX0RMWTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlkYSB8PSBNQVg5ODUwX1JUSjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNsb2NrIGludmVyc2lvbiAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQlkYSB8PSBNQVg5ODUwX0JDSU5WIHwgTUFYOTg1MF9JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWRhIHw9IE1BWDk4NTBfQkNJTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWRhIHw9IE1BWDk4NTBfSU5WOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzZXQgZGEgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBNQVg5ODUwX0RJR0lUQUxfQVVESU8sIGRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDk4NTBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gc25kX3NvY19jYWNoZV9zeW5jKGNvZGVjKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gc3luYyBjYWNoZTogJWRcbiIsIHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCWJyZWFrOworCX0KKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTUFYOTg1MF9SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwCisKKyNkZWZpbmUgTUFYOTg1MF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBtYXg5ODUwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IG1heDk4NTBfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gbWF4OTg1MF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IG1heDk4NTBfc2V0X2RhaV9mbXQsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBtYXg5ODUwX2RhaSA9IHsKKwkubmFtZSA9ICJtYXg5ODUwLWhpZmkiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBNQVg5ODUwX1JBVEVTLAorCQkuZm9ybWF0cyA9IE1BWDk4NTBfRk9STUFUUworCX0sCisJLm9wcyA9ICZtYXg5ODUwX2RhaV9vcHMsCit9OworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG1heDk4NTBfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwltYXg5ODUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDk4NTBfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwltYXg5ODUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG1heDk4NTBfc3VzcGVuZCBOVUxMCisjZGVmaW5lIG1heDk4NTBfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IG1heDk4NTBfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDgsIDgsIFNORF9TT0NfSTJDKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogZW5hYmxlIHplcm8tZGV0ZWN0ICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTUFYOTg1MF9HRU5FUkFMX1BVUlBPU0UsIDEsIDEpOworCS8qIGVuYWJsZSBzbGV3LXJhdGUgY29udHJvbCAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE1BWDk4NTBfVk9MVU1FLCAweDQwLCAweDQwKTsKKwkvKiBzZXQgc2xldy1yYXRlIDEyNW1zICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTUFYOTg1MF9DSEFSR0VfUFVNUCwgMHhmZiwgMHhjMCk7CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIG1heDk4NTBfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRShtYXg5ODUwX2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgbWF4OTg1MF9jb250cm9scywKKwkJCUFSUkFZX1NJWkUobWF4OTg1MF9jb250cm9scykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9tYXg5ODUwID0geworCS5wcm9iZSA9CW1heDk4NTBfcHJvYmUsCisJLnN1c3BlbmQgPQltYXg5ODUwX3N1c3BlbmQsCisJLnJlc3VtZSA9CW1heDk4NTBfcmVzdW1lLAorCS5zZXRfYmlhc19sZXZlbCA9IG1heDk4NTBfc2V0X2JpYXNfbGV2ZWwsCisJLnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRShtYXg5ODUwX3JlZyksCisJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTgpLAorCS5yZWdfY2FjaGVfZGVmYXVsdCA9IG1heDk4NTBfcmVnLAorCS52b2xhdGlsZV9yZWdpc3RlciA9IG1heDk4NTBfdm9sYXRpbGVfcmVnaXN0ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtYXg5ODUwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG1heDk4NTBfcHJpdiAqbWF4OTg1MDsKKwlpbnQgcmV0OworCisJbWF4OTg1MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXg5ODUwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAobWF4OTg1MCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIG1heDk4NTApOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsCisJCQkmc29jX2NvZGVjX2Rldl9tYXg5ODUwLCAmbWF4OTg1MF9kYWksIDEpOworCWlmIChyZXQgPCAwKQorCQlrZnJlZShtYXg5ODUwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19kZXZleGl0IGludCBtYXg5ODUwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmNsaWVudC0+ZGV2KTsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtYXg5ODUwX2kyY19pZFtdID0geworCXsgIm1heDk4NTAiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG1heDk4NTBfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDk4NTBfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtYXg5ODUwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBtYXg5ODUwX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobWF4OTg1MF9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBtYXg5ODUwX2kyY19pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1heDk4NTBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbWF4OTg1MF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1heDk4NTBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYXg5ODUwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmbWF4OTg1MF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1heDk4NTBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkNocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIE1BWDk4NTAgY29kZWMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL21heDk4NTAuaCBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTg1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYjFkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4NTAuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogbWF4OTg1MC5oICAtLSAgY29kZWMgZHJpdmVyIGZvciBtYXg5ODUwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIHRhc2tpdCBHbWJICisgKiBBdXRob3I6IENocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX01BWDk4NTBfSAorI2RlZmluZSBfTUFYOTg1MF9ICisKKyNkZWZpbmUgTUFYOTg1MF9TVEFUVVNBCQkJMHgwMAorI2RlZmluZSBNQVg5ODUwX1NUQVRVU0IJCQkweDAxCisjZGVmaW5lIE1BWDk4NTBfVk9MVU1FCQkJMHgwMgorI2RlZmluZSBNQVg5ODUwX0dFTkVSQUxfUFVSUE9TRQkJMHgwMworI2RlZmluZSBNQVg5ODUwX0lOVEVSUlVQVAkJMHgwNAorI2RlZmluZSBNQVg5ODUwX0VOQUJMRQkJCTB4MDUKKyNkZWZpbmUgTUFYOTg1MF9DTE9DSwkJCTB4MDYKKyNkZWZpbmUgTUFYOTg1MF9DSEFSR0VfUFVNUAkJMHgwNworI2RlZmluZSBNQVg5ODUwX0xSQ0xLX01TQgkJMHgwOAorI2RlZmluZSBNQVg5ODUwX0xSQ0xLX0xTQgkJMHgwOQorI2RlZmluZSBNQVg5ODUwX0RJR0lUQUxfQVVESU8JCTB4MGEKKworI2RlZmluZSBNQVg5ODUwX0NBQ0hFUkVHTlVNIDExCisKKy8qIE1BWDk4NTBfRElHSVRBTF9BVURJTyAqLworI2RlZmluZSBNQVg5ODUwX01BU1RFUgkJCSgxPDw3KQorI2RlZmluZSBNQVg5ODUwX0lOVgkJCSgxPDw2KQorI2RlZmluZSBNQVg5ODUwX0JDSU5WCQkJKDE8PDUpCisjZGVmaW5lIE1BWDk4NTBfRExZCQkJKDE8PDMpCisjZGVmaW5lIE1BWDk4NTBfUlRKCQkJKDE8PDIpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5jIGIvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMjkzODAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmMKQEAgLTAsMCArMSwxNTI3IEBACisvKgorICogc2d0bDUwMDAuYyAgLS0gIFNHVEw1MDAwIEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNpbmNsdWRlICJzZ3RsNTAwMC5oIgorCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9SRUdfT0ZGU0VUCTB4MDEwMAorI2RlZmluZSBTR1RMNTAwMF9NQVhfUkVHX09GRlNFVAkweDAxM0EKKworLyogZGVmYXVsdCB2YWx1ZSBvZiBzZ3RsNTAwMCByZWdpc3RlcnMgZXhjZXB0IERBUCAqLworc3RhdGljIGNvbnN0IHUxNiBzZ3RsNTAwMF9yZWdzW1NHVEw1MDAwX01BWF9SRUdfT0ZGU0VUID4+IDFdID0gIHsKKwkweGEwMTEsIC8qIDB4MDAwMCwgQ0hJUF9JRC4gMTEgc3RhbmQgZm9yIHJldmlzb24gMTcgKi8KKwkweDAwMDAsIC8qIDB4MDAwMiwgQ0hJUF9ESUdfUE9XRVIuICovCisJMHgwMDA4LCAvKiAweDAwMDQsIENISVBfQ0tMX0NUUkwgKi8KKwkweDAwMTAsIC8qIDB4MDAwNiwgQ0hJUF9JMlNfQ1RSTCAqLworCTB4MDAwMCwgLyogMHgwMDA4LCByZXNlcnZlZCAqLworCTB4MDAwOCwgLyogMHgwMDBBLCBDSElQX1NTU19DVFJMICovCisJMHgwMDAwLCAvKiAweDAwMEMsIHJlc2VydmVkICovCisJMHgwMjBjLCAvKiAweDAwMEUsIENISVBfQURDREFDX0NUUkwgKi8KKwkweDNjM2MsIC8qIDB4MDAxMCwgQ0hJUF9EQUNfVk9MICovCisJMHgwMDAwLCAvKiAweDAwMTIsIHJlc2VydmVkICovCisJMHgwMTVmLCAvKiAweDAwMTQsIENISVBfUEFEX1NUUkVOR1RIICovCisJMHgwMDAwLCAvKiAweDAwMTYsIHJlc2VydmVkICovCisJMHgwMDAwLCAvKiAweDAwMTgsIHJlc2VydmVkICovCisJMHgwMDAwLCAvKiAweDAwMUEsIHJlc2VydmVkICovCisJMHgwMDAwLCAvKiAweDAwMUUsIHJlc2VydmVkICovCisJMHgwMDAwLCAvKiAweDAwMjAsIENISVBfQU5BX0FEQ19DVFJMICovCisJMHgxODE4LCAvKiAweDAwMjIsIENISVBfQU5BX0hQX0NUUkwgKi8KKwkweDAxMTEsIC8qIDB4MDAyNCwgQ0hJUF9BTk5fQ1RSTCAqLworCTB4MDAwMCwgLyogMHgwMDI2LCBDSElQX0xJTlJFR19DVFJMICovCisJMHgwMDAwLCAvKiAweDAwMjgsIENISVBfUkVGX0NUUkwgKi8KKwkweDAwMDAsIC8qIDB4MDAyQSwgQ0hJUF9NSUNfQ1RSTCAqLworCTB4MDAwMCwgLyogMHgwMDJDLCBDSElQX0xJTkVfT1VUX0NUUkwgKi8KKwkweDA0MDQsIC8qIDB4MDAyRSwgQ0hJUF9MSU5FX09VVF9WT0wgKi8KKwkweDcwNjAsIC8qIDB4MDAzMCwgQ0hJUF9BTkFfUE9XRVIgKi8KKwkweDUwMDAsIC8qIDB4MDAzMiwgQ0hJUF9QTExfQ1RSTCAqLworCTB4MDAwMCwgLyogMHgwMDM0LCBDSElQX0NMS19UT1BfQ1RSTCAqLworCTB4MDAwMCwgLyogMHgwMDM2LCBDSElQX0FOQV9TVEFUVVMgKi8KKwkweDAwMDAsIC8qIDB4MDAzOCwgcmVzZXJ2ZWQgKi8KKwkweDAwMDAsIC8qIDB4MDAzQSwgQ0hJUF9BTkFfVEVTVDIgKi8KKwkweDAwMDAsIC8qIDB4MDAzQywgQ0hJUF9TSE9SVF9DVFJMICovCisJMHgwMDAwLCAvKiByZXNlcnZlZCAqLworfTsKKworLyogZGVmYXVsdCB2YWx1ZSBvZiBkYXAgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTE2IHNndGw1MDAwX2RhcF9yZWdzW10gPSB7CisJMHgwMDAwLCAvKiAweDAxMDAsIERBUF9DT05UUk9MICovCisJMHgwMDAwLCAvKiAweDAxMDIsIERBUF9QRVEgKi8KKwkweDAwNDAsIC8qIDB4MDEwNCwgREFQX0JBU1NfRU5IQU5DRSAqLworCTB4MDUxZiwgLyogMHgwMTA2LCBEQVBfQkFTU19FTkhBTkNFX0NUUkwgKi8KKwkweDAwMDAsIC8qIDB4MDEwOCwgREFQX0FVRElPX0VRICovCisJMHgwMDQwLCAvKiAweDAxMEEsIERBUF9TR1RMX1NVUlJPVU5EICovCisJMHgwMDAwLCAvKiAweDAxMEMsIERBUF9GSUxURVJfQ09FRl9BQ0NFU1MgKi8KKwkweDAwMDAsIC8qIDB4MDEwRSwgREFQX0NPRUZfV1JfQjBfTVNCICovCisJMHgwMDAwLCAvKiAweDAxMTAsIERBUF9DT0VGX1dSX0IwX0xTQiAqLworCTB4MDAwMCwgLyogMHgwMTEyLCByZXNlcnZlZCAqLworCTB4MDAwMCwgLyogMHgwMTE0LCByZXNlcnZlZCAqLworCTB4MDAyZiwgLyogMHgwMTE2LCBEQVBfQVVESU9fRVFfQkFTU19CQU5EMCAqLworCTB4MDAyZiwgLyogMHgwMTE4LCBEQVBfQVVESU9fRVFfQkFORDAgKi8KKwkweDAwMmYsIC8qIDB4MDExQSwgREFQX0FVRElPX0VRX0JBTkQyICovCisJMHgwMDJmLCAvKiAweDAxMUMsIERBUF9BVURJT19FUV9CQU5EMyAqLworCTB4MDAyZiwgLyogMHgwMTFFLCBEQVBfQVVESU9fRVFfVFJFQkxFX0JBTkQ0ICovCisJMHg4MDAwLCAvKiAweDAxMjAsIERBUF9NQUlOX0NIQU4gKi8KKwkweDAwMDAsIC8qIDB4MDEyMiwgREFQX01JWF9DSEFOICovCisJMHgwNTEwLCAvKiAweDAxMjQsIERBUF9BVkNfQ1RSTCAqLworCTB4MTQ3MywgLyogMHgwMTI2LCBEQVBfQVZDX1RIUkVTSE9MRCAqLworCTB4MDAyOCwgLyogMHgwMTI4LCBEQVBfQVZDX0FUVEFDSyAqLworCTB4MDA1MCwgLyogMHgwMTJBLCBEQVBfQVZDX0RFQ0FZICovCisJMHgwMDAwLCAvKiAweDAxMkMsIERBUF9DT0VGX1dSX0IxX01TQiAqLworCTB4MDAwMCwgLyogMHgwMTJFLCBEQVBfQ09FRl9XUl9CMV9MU0IgKi8KKwkweDAwMDAsIC8qIDB4MDEzMCwgREFQX0NPRUZfV1JfQjJfTVNCICovCisJMHgwMDAwLCAvKiAweDAxMzIsIERBUF9DT0VGX1dSX0IyX0xTQiAqLworCTB4MDAwMCwgLyogMHgwMTM0LCBEQVBfQ09FRl9XUl9BMV9NU0IgKi8KKwkweDAwMDAsIC8qIDB4MDEzNiwgREFQX0NPRUZfV1JfQTFfTFNCICovCisJMHgwMDAwLCAvKiAweDAxMzgsIERBUF9DT0VGX1dSX0EyX01TQiAqLworCTB4MDAwMCwgLyogMHgwMTNBLCBEQVBfQ09FRl9XUl9BMl9MU0IgKi8KK307CisKKy8qIHJlZ3VsYXRvciBzdXBwbGllcyBmb3Igc2d0bDUwMDAsIFZEREQgaXMgYW4gb3B0aW9uYWwgZXh0ZXJuYWwgc3VwcGx5ICovCitlbnVtIHNndGw1MDAwX3JlZ3VsYXRvcl9zdXBwbGllcyB7CisJVkREQSwKKwlWRERJTywKKwlWRERELAorCVNHVEw1MDAwX1NVUFBMWV9OVU0KK307CisKKy8qIHZkZGQgaXMgb3B0aW9uYWwgc3VwcGx5ICovCitzdGF0aWMgY29uc3QgY2hhciAqc3VwcGx5X25hbWVzW1NHVEw1MDAwX1NVUFBMWV9OVU1dID0geworCSJWRERBIiwKKwkiVkRESU8iLAorCSJWREREIgorfTsKKworI2RlZmluZSBMRE9fQ09OU1VNRVJfTkFNRQkiVkRERF9MRE8iCisjZGVmaW5lIExET19WT0xUQUdFCQkxMjAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBsZG9fY29uc3VtZXJbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKExET19DT05TVU1FUl9OQU1FLCBOVUxMKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBsZG9faW5pdF9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViAgICAgICAgICAgICAgICAgPSA4NTAwMDAsCisJCS5tYXhfdVYgICAgICAgICAgICAgICAgID0gMTYwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sgICAgICAgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS52YWxpZF9vcHNfbWFzayAgICAgICAgID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSAmbGRvX2NvbnN1bWVyWzBdLAorfTsKKworLyoKKyAqIHNndGw1MDAwIGludGVybmFsIGxkbyByZWd1bGF0b3IsCisgKiBlbmFibGVkIHdoZW4gVkRERCBub3QgcHJvdmlkZWQKKyAqLworc3RydWN0IGxkb19yZWd1bGF0b3IgeworCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXY7CisJaW50IHZvbHRhZ2U7CisJdm9pZCAqY29kZWNfZGF0YTsKKwlib29sIGVuYWJsZWQ7Cit9OworCisvKiBzZ3RsNTAwMCBwcml2YXRlIHN0cnVjdHVyZSBpbiBjb2RlYyAqLworc3RydWN0IHNndGw1MDAwX3ByaXYgeworCWludCBzeXNjbGs7CS8qIHN5c2NsayByYXRlICovCisJaW50IG1hc3RlcjsJLyogaTJzIG1hc3RlciBvciBub3QgKi8KKwlpbnQgZm10OwkvKiBpMnMgZGF0YSBmb3JtYXQgKi8KKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tTR1RMNTAwMF9TVVBQTFlfTlVNXTsKKwlzdHJ1Y3QgbGRvX3JlZ3VsYXRvciAqbGRvOworfTsKKworLyoKKyAqIG1pY19iaWFzIHBvd2VyIG9uL29mZiBzaGFyZSB0aGUgc2FtZSByZWdpc3RlciBiaXRzIHdpdGgKKyAqIG91dHB1dCBpbXBlZGFuY2Ugb2YgbWljIGJpYXMsIHdoZW4gcG93ZXIgb24gbWljIGJpYXMsIHdlCisgKiBuZWVkIHJlY2xhaW0gaXQgdG8gaW1wZWRhbmNlIHZhbHVlLgorICogMHgwID0gUG93ZXJlZCBvZmYKKyAqIDB4MSA9IDJLb2htCisgKiAweDIgPSA0S29obQorICogMHgzID0gOEtvaG0KKyAqLworc3RhdGljIGludCBtaWNfYmlhc19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKKwkJLyogY2hhbmdlIG1pYyBiaWFzIHJlc2lzdG9yIHRvIDRLb2htICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMody0+Y29kZWMsIFNHVEw1MDAwX0NISVBfTUlDX0NUUkwsCisJCQkJU0dUTDUwMDBfQklBU19SXzRrLCBTR1RMNTAwMF9CSUFTX1JfNGspOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCS8qCisJCSAqIFNHVEw1MDAwX0JJQVNfUl84ayBhcyBtYXNrIHRvIGNsZWFuIHRoZSB0d28gYml0cworCQkgKiBvZiBtaWMgYmlhcyBhbmQgb3V0cHV0IGltcGVkYW5jZQorCQkgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU0dUTDUwMDBfQ0hJUF9NSUNfQ1RSTCwKKwkJCQlTR1RMNTAwMF9CSUFTX1JfOGssIDApOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2luZyBjb2RlYyBhc3Npc3QgdG8gc21hbGwgcG9wLCBocF9wb3dlcnVwIG9yIGxpbmVvdXRfcG93ZXJ1cAorICogc2hvdWxkIHN0YXkgc2V0dGluZyB1bnRpbCB2YWdfcG93ZXJ1cCBpcyBmdWxseSByYW1wZWQgZG93biwKKyAqIHZhZyBmdWxseSByYW1wZWQgZG93biByZXF1aXJlIDQwMG1zLgorICovCitzdGF0aWMgaW50IHNtYWxsX3BvcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKHctPmNvZGVjLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwKKwkJCVNHVEw1MDAwX1ZBR19QT1dFUlVQLCBTR1RMNTAwMF9WQUdfUE9XRVJVUCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsCisJCQlTR1RMNTAwMF9WQUdfUE9XRVJVUCwgMCk7CisJCW1zbGVlcCg0MDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogaW5wdXQgc291cmNlcyBmb3IgQURDICovCitzdGF0aWMgY29uc3QgY2hhciAqYWRjX211eF90ZXh0W10gPSB7CisJIk1JQ19JTiIsICJMSU5FX0lOIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhZGNfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoU0dUTDUwMDBfQ0hJUF9BTkFfQ1RSTCwgMiwgMiwgYWRjX211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkY19tdXggPQorU09DX0RBUE1fRU5VTSgiQ2FwdHVyZSBNdXgiLCBhZGNfZW51bSk7CisKKy8qIGlucHV0IHNvdXJjZXMgZm9yIERBQyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRhY19tdXhfdGV4dFtdID0geworCSJEQUMiLCAiTElORV9JTiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGFjX2VudW0gPQorU09DX0VOVU1fU0lOR0xFKFNHVEw1MDAwX0NISVBfQU5BX0NUUkwsIDYsIDIsIGRhY19tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWNfbXV4ID0KK1NPQ19EQVBNX0VOVU0oIkhlYWRwaG9uZSBNdXgiLCBkYWNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBzZ3RsNTAwMF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVfSU4iKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIk1JQ19JTiIpLAorCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBfT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTElORV9PVVQiKSwKKworCVNORF9TT0NfREFQTV9NSUNCSUFTX0UoIk1pYyBCaWFzIiwgU0dUTDUwMDBfQ0hJUF9NSUNfQ1RSTCwgOCwgMCwKKwkJCQltaWNfYmlhc19ldmVudCwKKwkJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkhQIiwgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsIDQsIDAsIE5VTEwsIDAsCisJCQlzbWFsbF9wb3BfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkxPIiwgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsIDAsIDAsIE5VTEwsIDAsCisJCQlzbWFsbF9wb3BfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworCVNORF9TT0NfREFQTV9NVVgoIkNhcHR1cmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWRjX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSGVhZHBob25lIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmRhY19tdXgpLAorCisJLyogYWlmIGZvciBpMnMgaW5wdXQgKi8KKwlTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUZJTiIsICJQbGF5YmFjayIsCisJCQkJMCwgU0dUTDUwMDBfQ0hJUF9ESUdfUE9XRVIsCisJCQkJMCwgMCksCisKKwkvKiBhaWYgZm9yIGkycyBvdXRwdXQgKi8KKwlTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGT1VUIiwgIkNhcHR1cmUiLAorCQkJCTAsIFNHVEw1MDAwX0NISVBfRElHX1BPV0VSLAorCQkJCTEsIDApLAorCisJU05EX1NPQ19EQVBNX0FEQygiQURDIiwgIkNhcHR1cmUiLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwgMSwgMCksCisKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiUGxheWJhY2siLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwgMywgMCksCit9OworCisvKiByb3V0ZXMgZm9yIHNndGw1MDAwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwl7IkNhcHR1cmUgTXV4IiwgIkxJTkVfSU4iLCAiTElORV9JTiJ9LAkvKiBsaW5lX2luIC0tPiBhZGNfbXV4ICovCisJeyJDYXB0dXJlIE11eCIsICJNSUNfSU4iLCAiTUlDX0lOIn0sCS8qIG1pY19pbiAtLT4gYWRjX211eCAqLworCisJeyJBREMiLCBOVUxMLCAiQ2FwdHVyZSBNdXgifSwJCS8qIGFkY19tdXggLS0+IGFkYyAqLworCXsiQUlGT1VUIiwgTlVMTCwgIkFEQyJ9LAkJLyogYWRjIC0tPiBpMnNfb3V0ICovCisKKwl7IkRBQyIsIE5VTEwsICJBSUZJTiJ9LAkJCS8qIGkycy0tPmRhYyxza2lwIGF1ZGlvIG11eCAqLworCXsiSGVhZHBob25lIE11eCIsICJEQUMiLCAiREFDIn0sCS8qIGRhYyAtLT4gaHBfbXV4ICovCisJeyJMTyIsIE5VTEwsICJEQUMifSwJCQkvKiBkYWMgLS0+IGxpbmVfb3V0ICovCisKKwl7IkhlYWRwaG9uZSBNdXgiLCAiTElORV9JTiIsICJMSU5FX0lOIn0sLyogbGluZV9pbiAtLT4gaHBfbXV4ICovCisJeyJIUCIsIE5VTEwsICJIZWFkcGhvbmUgTXV4In0sCQkvKiBocF9tdXggLS0+IGhwICovCisKKwl7IkxJTkVfT1VUIiwgTlVMTCwgIkxPIn0sCisJeyJIUF9PVVQiLCBOVUxMLCAiSFAifSwKK307CisKKy8qIGN1c3RvbSBmdW5jdGlvbiB0byBmZXRjaCBpbmZvIG9mIFBDTSBwbGF5YmFjayB2b2x1bWUgKi8KK3N0YXRpYyBpbnQgZGFjX2luZm9fdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4ZmMgLSAweDNjOworCXJldHVybiAwOworfQorCisvKgorICogY3VzdG9tIGZ1bmN0aW9uIHRvIGdldCBvZiBQQ00gcGxheWJhY2sgdm9sdW1lCisgKgorICogZGFjIHZvbHVtZSByZWdpc3RlcgorICogMTUtLS0tLS0tLS0tLS0tOC03LS0tLS0tLS0tLS0tLS0wCisgKiB8IFIgY2hhbm5lbCB2b2wgfCBMIGNoYW5uZWwgdm9sIHwKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogUENNIHZvbHVtZSB3aXRoIDAuNTAxNyBkQiBzdGVwcyBmcm9tIDAgdG8gLTkwIGRCCisgKgorICogcmVnaXN0ZXIgdmFsdWVzIG1hcCB0byBkQgorICogMHgzQiBhbmQgbGVzcyA9IFJlc2VydmVkCisgKiAweDNDID0gMCBkQgorICogMHgzRCA9IC0wLjUgZEIKKyAqIDB4RjAgPSAtOTAgZEIKKyAqIDB4RkMgYW5kIGdyZWF0ZXIgPSBNdXRlZAorICoKKyAqIHJlZ2lzdGVyIHZhbHVlIG1hcCB0byB1c2Vyc3BhY2UgdmFsdWUKKyAqCisgKiByZWdpc3RlciB2YWx1ZQkweDNjKDBkQikJICAweGYwKC05MGRCKTB4ZmMKKyAqCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB1c2Vyc3BhY2UgdmFsdWUJMHhjMAkJCSAgICAgMAorICovCitzdGF0aWMgaW50IGRhY19nZXRfdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCByZWc7CisJaW50IGw7CisJaW50IHI7CisKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNHVEw1MDAwX0NISVBfREFDX1ZPTCk7CisKKwkvKiBnZXQgbGVmdCBjaGFubmVsIHZvbHVtZSAqLworCWwgPSAocmVnICYgU0dUTDUwMDBfREFDX1ZPTF9MRUZUX01BU0spID4+IFNHVEw1MDAwX0RBQ19WT0xfTEVGVF9TSElGVDsKKworCS8qIGdldCByaWdodCBjaGFubmVsIHZvbHVtZSAqLworCXIgPSAocmVnICYgU0dUTDUwMDBfREFDX1ZPTF9SSUdIVF9NQVNLKSA+PiBTR1RMNTAwMF9EQUNfVk9MX1JJR0hUX1NISUZUOworCisJLyogbWFrZSBzdXJlIHZhbHVlIGZhbGwgaW4gKDB4M2MsMHhmYykgKi8KKwlsID0gY2xhbXAobCwgMHgzYywgMHhmYyk7CisJciA9IGNsYW1wKHIsIDB4M2MsIDB4ZmMpOworCisJLyogaW52ZXJ0IGl0IGFuZCBtYXAgdG8gdXNlcnNwYWNlIHZhbHVlICovCisJbCA9IDB4ZmMgLSBsOworCXIgPSAweGZjIC0gcjsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbDsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IHI7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGN1c3RvbSBmdW5jdGlvbiB0byBwdXQgb2YgUENNIHBsYXliYWNrIHZvbHVtZQorICoKKyAqIGRhYyB2b2x1bWUgcmVnaXN0ZXIKKyAqIDE1LS0tLS0tLS0tLS0tLTgtNy0tLS0tLS0tLS0tLS0tMAorICogfCBSIGNoYW5uZWwgdm9sIHwgTCBjaGFubmVsIHZvbCB8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFBDTSB2b2x1bWUgd2l0aCAwLjUwMTcgZEIgc3RlcHMgZnJvbSAwIHRvIC05MCBkQgorICoKKyAqIHJlZ2lzdGVyIHZhbHVlcyBtYXAgdG8gZEIKKyAqIDB4M0IgYW5kIGxlc3MgPSBSZXNlcnZlZAorICogMHgzQyA9IDAgZEIKKyAqIDB4M0QgPSAtMC41IGRCCisgKiAweEYwID0gLTkwIGRCCisgKiAweEZDIGFuZCBncmVhdGVyID0gTXV0ZWQKKyAqCisgKiB1c2Vyc3BhY2UgdmFsdWUgbWFwIHRvIHJlZ2lzdGVyIHZhbHVlCisgKgorICogdXNlcnNwYWNlIHZhbHVlCTB4YzAJCQkgICAgIDAKKyAqCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZWdpc3RlciB2YWx1ZQkweDNjKDBkQikJMHhmMCgtOTBkQikweGZjCisgKi8KK3N0YXRpYyBpbnQgZGFjX3B1dF92b2xzdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IHJlZzsKKwlpbnQgbDsKKwlpbnQgcjsKKworCWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlyID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV07CisKKwkvKiBtYWtlIHN1cmUgdXNlcnNwYWNlIHZvbHVtZSBmYWxsIGluICgwLCAweGZjLTB4M2MpICovCisJbCA9IGNsYW1wKGwsIDAsIDB4ZmMgLSAweDNjKTsKKwlyID0gY2xhbXAociwgMCwgMHhmYyAtIDB4M2MpOworCisJLyogaW52ZXJ0IGl0LCBnZXQgdGhlIHZhbHVlIGNhbiBiZSBzZXQgdG8gcmVnaXN0ZXIgKi8KKwlsID0gMHhmYyAtIGw7CisJciA9IDB4ZmMgLSByOworCisJLyogc2hpZnQgdG8gZ2V0IHRoZSByZWdpc3RlciB2YWx1ZSAqLworCXJlZyA9IGwgPDwgU0dUTDUwMDBfREFDX1ZPTF9MRUZUX1NISUZUIHwKKwkJciA8PCBTR1RMNTAwMF9EQUNfVk9MX1JJR0hUX1NISUZUOworCisJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9EQUNfVk9MLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShjYXB0dXJlXzZkYl9hdHRlbnVhdGUsIC02MDAsIDYwMCwgMCk7CisKKy8qIHRsdiBmb3IgbWljIGdhaW4sIDBkYiAyMGRiIDMwZGIgNDBkYiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaWNfZ2Fpbl90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCg0KSwKKwkwLCAwLCBUTFZfREJfU0NBTEVfSVRFTSgwLCAwLCAwKSwKKwkxLCAzLCBUTFZfREJfU0NBTEVfSVRFTSgyMDAwLCAxMDAwLCAwKSwKK307CisKKy8qIHRsdiBmb3IgaHAgdm9sdW1lLCAtNTEuNWRiIHRvIDEyLjBkYiwgc3RlcCAuNWRiICovCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaGVhZHBob25lX3ZvbHVtZSwgLTUxNTAsIDUwLCAwKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNndGw1MDAwX3NuZF9jb250cm9sc1tdID0geworCS8qIFNPQ19ET1VCTEVfUzhfVExWIHdpdGggaW52ZXJ0ICovCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfAorCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKKwkJLmluZm8gPSBkYWNfaW5mb192b2xzdywKKwkJLmdldCA9IGRhY19nZXRfdm9sc3csCisJCS5wdXQgPSBkYWNfcHV0X3ZvbHN3LAorCX0sCisKKwlTT0NfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIFNHVEw1MDAwX0NISVBfQU5BX0FEQ19DVFJMLCAwLCA0LCAweGYsIDApLAorCVNPQ19TSU5HTEVfVExWKCJDYXB0dXJlIEF0dGVudWF0ZSBTd2l0Y2ggKC02ZEIpIiwKKwkJCVNHVEw1MDAwX0NISVBfQU5BX0FEQ19DVFJMLAorCQkJOCwgMiwgMCwgY2FwdHVyZV82ZGJfYXR0ZW51YXRlKSwKKwlTT0NfU0lOR0xFKCJDYXB0dXJlIFpDIFN3aXRjaCIsIFNHVEw1MDAwX0NISVBfQU5BX0NUUkwsIDEsIDEsIDApLAorCisJU09DX0RPVUJMRV9UTFYoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCQkJU0dUTDUwMDBfQ0hJUF9BTkFfSFBfQ1RSTCwKKwkJCTAsIDgsCisJCQkweDdmLCAxLAorCQkJaGVhZHBob25lX3ZvbHVtZSksCisJU09DX1NJTkdMRSgiSGVhZHBob25lIFBsYXliYWNrIFpDIFN3aXRjaCIsIFNHVEw1MDAwX0NISVBfQU5BX0NUUkwsCisJCQk1LCAxLCAwKSwKKworCVNPQ19TSU5HTEVfVExWKCJNaWMgVm9sdW1lIiwgU0dUTDUwMDBfQ0hJUF9NSUNfQ1RSTCwKKwkJCTAsIDQsIDAsIG1pY19nYWluX3RsdiksCit9OworCisvKiBtdXRlIHRoZSBjb2RlYyB1c2VkIGJ5IGFsc2EgY29yZSAqLworc3RhdGljIGludCBzZ3RsNTAwMF9kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IGFkY2RhY19jdHJsID0gU0dUTDUwMDBfREFDX01VVEVfTEVGVCB8IFNHVEw1MDAwX0RBQ19NVVRFX1JJR0hUOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9BRENEQUNfQ1RSTCwKKwkJCWFkY2RhY19jdHJsLCBtdXRlID8gYWRjZGFjX2N0cmwgOiAwKTsKKworCXJldHVybiAwOworfQorCisvKiBzZXQgY29kZWMgZm9ybWF0ICovCitzdGF0aWMgaW50IHNndGw1MDAwX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHNndGw1MDAwX3ByaXYgKnNndGw1MDAwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTE2IGkyc2N0bCA9IDA7CisKKwlzZ3RsNTAwMC0+bWFzdGVyID0gMDsKKwkvKgorCSAqIGkycyBjbG9jayBhbmQgZnJhbWUgbWFzdGVyIHNldHRpbmcuCisJICogT05MWSBzdXBwb3J0OgorCSAqICAtIGNsb2NrIGFuZCBmcmFtZSBzbGF2ZSwKKwkgKiAgLSBjbG9jayBhbmQgZnJhbWUgbWFzdGVyCisJICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlpMnNjdGwgfD0gU0dUTDUwMDBfSTJTX01BU1RFUjsKKwkJc2d0bDUwMDAtPm1hc3RlciA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNldHRpbmcgaTJzIGRhdGEgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9QQ007CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9QQ007CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTFJBTElHTjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9JMlNfTEo7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX1JKOworCQlpMnNjdGwgfD0gU0dUTDUwMDBfSTJTX0xSUE9MOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX0kyU19MSjsKKwkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19MUkFMSUdOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzZ3RsNTAwMC0+Zm10ID0gZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0s7CisKKwkvKiBDbG9jayBpbnZlcnNpb24gKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19TQ0xLX0lOVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9JMlNfQ1RSTCwgaTJzY3RsKTsKKworCXJldHVybiAwOworfQorCisvKiBzZXQgY29kZWMgc3lzY2xrICovCitzdGF0aWMgaW50IHNndGw1MDAwX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJCSAgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHNndGw1MDAwX3ByaXYgKnNndGw1MDAwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgU0dUTDUwMDBfU1lTQ0xLOgorCQlzZ3RsNTAwMC0+c3lzY2xrID0gZnJlcTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgY2xvY2sgYWNjb3JkaW5nIHRvIGkycyBmcmFtZSBjbG9jaywKKyAqIHNndGw1MDAwIHByb3ZpZGUgMiBjbG9jayBzb3VyY2VzLgorICogMS4gc3lzX21jbGsuIHNhbXBsZSBmcmVxIGNhbiBvbmx5IGNvbmZpZ3VyZSB0bworICoJMS8yNTYsIDEvMzg0LCAxLzUxMiBvZiBzeXNfbWNsay4KKyAqIDIuIHBsbC4gY2FuIGRlcml2ZSBhbnkgYXVkaW8gY2xvY2tzLgorICoKKyAqIGNsb2NrIHNldHRpbmcgcnVsZXM6CisgKiAxLiBpbiBzbGF2ZSBtb2RlLCBvbmx5IHN5c19tY2xrIGNhbiB1c2UuCisgKiAyLiBhcyBjb25zdHJhaW50IGJ5IHN5c19tY2xrLCBzYW1wbGUgZnJlcSBzaG91bGQKKyAqCXNldCB0byAzMmssIDQ0LjFrIGFuZCBhYm92ZS4KKyAqIDMuIHVzaW5nIHN5c19tY2xrIHByZWZlciB0byBwbGwgdG8gc2F2ZSBwb3dlci4KKyAqLworc3RhdGljIGludCBzZ3RsNTAwMF9zZXRfY2xvY2soc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZnJhbWVfcmF0ZSkKK3sKKwlzdHJ1Y3Qgc2d0bDUwMDBfcHJpdiAqc2d0bDUwMDAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgY2xrX2N0bCA9IDA7CisJaW50IHN5c19mczsJLyogc2FtcGxlIGZyZXEgKi8KKworCS8qCisJICogc2FtcGxlIGZyZXEgc2hvdWxkIGJlIGRpdmlkZWQgYnkgZnJhbWUgY2xvY2ssCisJICogaWYgZnJhbWUgY2xvY2sgbG93ZXIgdGhhbiA0NC4xa2h6LCBzYW1wbGUgZmVxIHNob3VsZCBzZXQgdG8KKwkgKiAzMmtoeiBvciA0NC4xa2h6LgorCSAqLworCXN3aXRjaCAoZnJhbWVfcmF0ZSkgeworCWNhc2UgODAwMDoKKwljYXNlIDE2MDAwOgorCQlzeXNfZnMgPSAzMjAwMDsKKwkJYnJlYWs7CisJY2FzZSAxMTAyNToKKwljYXNlIDIyMDUwOgorCQlzeXNfZnMgPSA0NDEwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3lzX2ZzID0gZnJhbWVfcmF0ZTsKKwkJYnJlYWs7CisJfQorCisJLyogc2V0IGRpdmlkZWQgZmFjdG9yIG9mIGZyYW1lIGNsb2NrICovCisJc3dpdGNoIChzeXNfZnMgLyBmcmFtZV9yYXRlKSB7CisJY2FzZSA0OgorCQljbGtfY3RsIHw9IFNHVEw1MDAwX1JBVEVfTU9ERV9ESVZfNCA8PCBTR1RMNTAwMF9SQVRFX01PREVfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY2xrX2N0bCB8PSBTR1RMNTAwMF9SQVRFX01PREVfRElWXzIgPDwgU0dUTDUwMDBfUkFURV9NT0RFX1NISUZUOworCQlicmVhazsKKwljYXNlIDE6CisJCWNsa19jdGwgfD0gU0dUTDUwMDBfUkFURV9NT0RFX0RJVl8xIDw8IFNHVEw1MDAwX1JBVEVfTU9ERV9TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc2V0IHRoZSBzeXNfZnMgYWNjb3JkaW5nIHRvIGZyYW1lIHJhdGUgKi8KKwlzd2l0Y2ggKHN5c19mcykgeworCWNhc2UgMzIwMDA6CisJCWNsa19jdGwgfD0gU0dUTDUwMDBfU1lTX0ZTXzMyayA8PCBTR1RMNTAwMF9TWVNfRlNfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWNsa19jdGwgfD0gU0dUTDUwMDBfU1lTX0ZTXzQ0XzFrIDw8IFNHVEw1MDAwX1NZU19GU19TSElGVDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJY2xrX2N0bCB8PSBTR1RMNTAwMF9TWVNfRlNfNDhrIDw8IFNHVEw1MDAwX1NZU19GU19TSElGVDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJY2xrX2N0bCB8PSBTR1RMNTAwMF9TWVNfRlNfOTZrIDw8IFNHVEw1MDAwX1NZU19GU19TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZnJhbWUgcmF0ZSAlZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJZnJhbWVfcmF0ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogY2FsY3VsYXRlIHRoZSBkaXZpZGVyIG9mIG1jbGsvc2FtcGxlX2ZyZXEsCisJICogZmFjdG9yIG9mIGZyZXEgPTk2ayBjYW4gb25seSBiZSAyNTYsIHNpbmNlIG1jbGsgaW4gcmFuZ2UgKDEybSwyN20pCisJICovCisJc3dpdGNoIChzZ3RsNTAwMC0+c3lzY2xrIC8gc3lzX2ZzKSB7CisJY2FzZSAyNTY6CisJCWNsa19jdGwgfD0gU0dUTDUwMDBfTUNMS19GUkVRXzI1NkZTIDw8CisJCQlTR1RMNTAwMF9NQ0xLX0ZSRVFfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgMzg0OgorCQljbGtfY3RsIHw9IFNHVEw1MDAwX01DTEtfRlJFUV8zODRGUyA8PAorCQkJU0dUTDUwMDBfTUNMS19GUkVRX1NISUZUOworCQlicmVhazsKKwljYXNlIDUxMjoKKwkJY2xrX2N0bCB8PSBTR1RMNTAwMF9NQ0xLX0ZSRVFfNTEyRlMgPDwKKwkJCVNHVEw1MDAwX01DTEtfRlJFUV9TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogaWYgbWNsayBub3Qgc2F0aXNpZnkgdGhlIGRpdmlkZXIsIHVzZSBwbGwgKi8KKwkJaWYgKHNndGw1MDAwLT5tYXN0ZXIpIHsKKwkJCWNsa19jdGwgfD0gU0dUTDUwMDBfTUNMS19GUkVRX1BMTCA8PAorCQkJCVNHVEw1MDAwX01DTEtfRlJFUV9TSElGVDsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiUExMIG5vdCBzdXBwb3J0ZWQgaW4gc2xhdmUgbW9kZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIGlmIHVzaW5nIHBsbCwgcGxlYXNlIGNoZWNrIG1hbnVhbCA2LjQuMiBmb3IgZGV0YWlsICovCisJaWYgKChjbGtfY3RsICYgU0dUTDUwMDBfTUNMS19GUkVRX01BU0spID09IFNHVEw1MDAwX01DTEtfRlJFUV9QTEwpIHsKKwkJdTY0IG91dCwgdDsKKwkJaW50IGRpdjI7CisJCWludCBwbGxfY3RsOworCQl1bnNpZ25lZCBpbnQgaW4sIGludF9kaXYsIGZyYWNfZGl2OworCisJCWlmIChzZ3RsNTAwMC0+c3lzY2xrID4gMTcwMDAwMDApIHsKKwkJCWRpdjIgPSAxOworCQkJaW4gPSBzZ3RsNTAwMC0+c3lzY2xrIC8gMjsKKwkJfSBlbHNlIHsKKwkJCWRpdjIgPSAwOworCQkJaW4gPSBzZ3RsNTAwMC0+c3lzY2xrOworCQl9CisJCWlmIChzeXNfZnMgPT0gNDQxMDApCisJCQlvdXQgPSAxODA2MzM2MDA7CisJCWVsc2UKKwkJCW91dCA9IDE5NjYwODAwMDsKKwkJdCA9IGRvX2RpdihvdXQsIGluKTsKKwkJaW50X2RpdiA9IG91dDsKKwkJdCAqPSAyMDQ4OworCQlkb19kaXYodCwgaW4pOworCQlmcmFjX2RpdiA9IHQ7CisJCXBsbF9jdGwgPSBpbnRfZGl2IDw8IFNHVEw1MDAwX1BMTF9JTlRfRElWX1NISUZUIHwKKwkJICAgIGZyYWNfZGl2IDw8IFNHVEw1MDAwX1BMTF9GUkFDX0RJVl9TSElGVDsKKworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTR1RMNTAwMF9DSElQX1BMTF9DVFJMLCBwbGxfY3RsKTsKKwkJaWYgKGRpdjIpCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAorCQkJCVNHVEw1MDAwX0NISVBfQ0xLX1RPUF9DVFJMLAorCQkJCVNHVEw1MDAwX0lOUFVUX0ZSRVFfRElWMiwKKwkJCQlTR1RMNTAwMF9JTlBVVF9GUkVRX0RJVjIpOworCQllbHNlCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAorCQkJCVNHVEw1MDAwX0NISVBfQ0xLX1RPUF9DVFJMLAorCQkJCVNHVEw1MDAwX0lOUFVUX0ZSRVFfRElWMiwKKwkJCQkwKTsKKworCQkvKiBwb3dlciB1cCBwbGwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsCisJCQlTR1RMNTAwMF9QTExfUE9XRVJVUCB8IFNHVEw1MDAwX1ZDT0FNUF9QT1dFUlVQLAorCQkJU0dUTDUwMDBfUExMX1BPV0VSVVAgfCBTR1RMNTAwMF9WQ09BTVBfUE9XRVJVUCk7CisJfSBlbHNlIHsKKwkJLyogcG93ZXIgZG93biBwbGwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsCisJCQlTR1RMNTAwMF9QTExfUE9XRVJVUCB8IFNHVEw1MDAwX1ZDT0FNUF9QT1dFUlVQLAorCQkJMCk7CisJfQorCisJLyogaWYgdXNpbmcgcGxsLCBjbGtfY3RybCBtdXN0IGJlIHNldCBhZnRlciBwbGwgcG93ZXIgdXAgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTR1RMNTAwMF9DSElQX0NMS19DVFJMLCBjbGtfY3RsKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IFBDTSBEQUkgYml0IHNpemUgYW5kIHNhbXBsZSByYXRlLgorICogaW5wdXQ6IHBhcmFtc19yYXRlLCBwYXJhbXNfZm10CisgKi8KK3N0YXRpYyBpbnQgc2d0bDUwMDBfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNndGw1MDAwX3ByaXYgKnNndGw1MDAwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJaW50IGkyc19jdGwgPSAwOworCWludCBzdGVyZW87CisJaW50IHJldDsKKworCS8qIHN5c2NsayBzaG91bGQgYWxyZWFkeSBzZXQgKi8KKwlpZiAoIXNndGw1MDAwLT5zeXNjbGspIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiJXM6IHNldCBzeXNjbGsgZmlyc3QhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlzdGVyZW8gPSBTR1RMNTAwMF9EQUNfU1RFUkVPOworCWVsc2UKKwkJc3RlcmVvID0gU0dUTDUwMDBfQURDX1NURVJFTzsKKworCS8qIHNldCBtb25vIHRvIHNhdmUgcG93ZXIgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwgc3RlcmVvLAorCQkJY2hhbm5lbHMgPT0gMSA/IDAgOiBzdGVyZW8pOworCisJLyogc2V0IGNvZGVjIGNsb2NrIGJhc2Ugb24gbHJjbGsgKi8KKwlyZXQgPSBzZ3RsNTAwMF9zZXRfY2xvY2soY29kZWMsIHBhcmFtc19yYXRlKHBhcmFtcykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgaTJzIGRhdGEgZm9ybWF0ICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlpZiAoc2d0bDUwMDAtPmZtdCA9PSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWkyc19jdGwgfD0gU0dUTDUwMDBfSTJTX0RMRU5fMTYgPDwgU0dUTDUwMDBfSTJTX0RMRU5fU0hJRlQ7CisJCWkyc19jdGwgfD0gU0dUTDUwMDBfSTJTX1NDTEtGUkVRXzMyRlMgPDwKKwkJICAgIFNHVEw1MDAwX0kyU19TQ0xLRlJFUV9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWkyc19jdGwgfD0gU0dUTDUwMDBfSTJTX0RMRU5fMjAgPDwgU0dUTDUwMDBfSTJTX0RMRU5fU0hJRlQ7CisJCWkyc19jdGwgfD0gU0dUTDUwMDBfSTJTX1NDTEtGUkVRXzY0RlMgPDwKKwkJICAgIFNHVEw1MDAwX0kyU19TQ0xLRlJFUV9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJaTJzX2N0bCB8PSBTR1RMNTAwMF9JMlNfRExFTl8yNCA8PCBTR1RMNTAwMF9JMlNfRExFTl9TSElGVDsKKwkJaTJzX2N0bCB8PSBTR1RMNTAwMF9JMlNfU0NMS0ZSRVFfNjRGUyA8PAorCQkgICAgU0dUTDUwMDBfSTJTX1NDTEtGUkVRX1NISUZUOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlpZiAoc2d0bDUwMDAtPmZtdCA9PSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWkyc19jdGwgfD0gU0dUTDUwMDBfSTJTX0RMRU5fMzIgPDwgU0dUTDUwMDBfSTJTX0RMRU5fU0hJRlQ7CisJCWkyc19jdGwgfD0gU0dUTDUwMDBfSTJTX1NDTEtGUkVRXzY0RlMgPDwKKwkJICAgIFNHVEw1MDAwX0kyU19TQ0xLRlJFUV9TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9JMlNfQ1RSTCwgaTJzX2N0bCwgaTJzX2N0bCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKK3N0YXRpYyBpbnQgbGRvX3JlZ3VsYXRvcl9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IGxkb19yZWd1bGF0b3IgKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBsZG8tPmVuYWJsZWQ7Cit9CisKK3N0YXRpYyBpbnQgbGRvX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbGRvX3JlZ3VsYXRvciAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqKWxkby0+Y29kZWNfZGF0YTsKKwlpbnQgcmVnOworCisJaWYgKGxkb19yZWd1bGF0b3JfaXNfZW5hYmxlZChkZXYpKQorCQlyZXR1cm4gMDsKKworCS8qIHNldCByZWd1bGF0b3IgdmFsdWUgZmlyc3RseSAqLworCXJlZyA9ICgxNjAwIC0gbGRvLT52b2x0YWdlIC8gMTAwMCkgLyA1MDsKKwlyZWcgPSBjbGFtcChyZWcsIDB4MCwgMHhmKTsKKworCS8qIGFtZW5kIHRoZSB2b2x0YWdlIHZhbHVlLCB1bml0OiB1ViAqLworCWxkby0+dm9sdGFnZSA9ICgxNjAwIC0gcmVnICogNTApICogMTAwMDsKKworCS8qIHNldCB2b2x0YWdlIHRvIHJlZ2lzdGVyICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9MSU5SRUdfQ1RSTCwKKwkJCQkoMHgxIDw8IDQpIC0gMSwgcmVnKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNHVEw1MDAwX0NISVBfQU5BX1BPV0VSLAorCQkJCVNHVEw1MDAwX0xJTkVSRUdfRF9QT1dFUlVQLAorCQkJCVNHVEw1MDAwX0xJTkVSRUdfRF9QT1dFUlVQKTsKKworCS8qIHdoZW4gaW50ZXJuYWwgbGRvIGVuYWJsZWQsIHNpbXBsZSBkaWdpdGFsIHBvd2VyIGNhbiBiZSBkaXNhYmxlZCAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNHVEw1MDAwX0NISVBfQU5BX1BPV0VSLAorCQkJCVNHVEw1MDAwX0xJTlJFR19TSU1QTEVfUE9XRVJVUCwKKwkJCQkwKTsKKworCWxkby0+ZW5hYmxlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGRvX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IGxkb19yZWd1bGF0b3IgKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAoc3RydWN0IHNuZF9zb2NfY29kZWMgKilsZG8tPmNvZGVjX2RhdGE7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwKKwkJCQlTR1RMNTAwMF9MSU5FUkVHX0RfUE9XRVJVUCwKKwkJCQkwKTsKKworCS8qIGNsZWFyIHZvbHRhZ2UgaW5mbyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNHVEw1MDAwX0NISVBfTElOUkVHX0NUUkwsCisJCQkJKDB4MSA8PCA0KSAtIDEsIDApOworCisJbGRvLT5lbmFibGVkID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxkb19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbGRvX3JlZ3VsYXRvciAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIGxkby0+dm9sdGFnZTsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGxkb19yZWd1bGF0b3Jfb3BzID0geworCS5pc19lbmFibGVkID0gbGRvX3JlZ3VsYXRvcl9pc19lbmFibGVkLAorCS5lbmFibGUgPSBsZG9fcmVndWxhdG9yX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGxkb19yZWd1bGF0b3JfZGlzYWJsZSwKKwkuZ2V0X3ZvbHRhZ2UgPSBsZG9fcmVndWxhdG9yX2dldF92b2x0YWdlLAorfTsKKworc3RhdGljIGludCBsZG9fcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCQkJCWludCB2b2x0YWdlKQoreworCXN0cnVjdCBsZG9fcmVndWxhdG9yICpsZG87CisKKwlsZG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGRvX3JlZ3VsYXRvciksIEdGUF9LRVJORUwpOworCisJaWYgKCFsZG8pIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGxkb19yZWd1bGF0b3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlsZG8tPmRlc2MubmFtZSA9IGtzdHJkdXAoZGV2X25hbWUoY29kZWMtPmRldiksIEdGUF9LRVJORUwpOworCWlmICghbGRvLT5kZXNjLm5hbWUpIHsKKwkJa2ZyZWUobGRvKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRlY3MgbmFtZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlsZG8tPmRlc2MudHlwZSAgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwlsZG8tPmRlc2Mub3duZXIgPSBUSElTX01PRFVMRTsKKwlsZG8tPmRlc2Mub3BzICAgPSAmbGRvX3JlZ3VsYXRvcl9vcHM7CisJbGRvLT5kZXNjLm5fdm9sdGFnZXMgPSAxOworCisJbGRvLT5jb2RlY19kYXRhID0gY29kZWM7CisJbGRvLT52b2x0YWdlID0gdm9sdGFnZTsKKworCWxkby0+ZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZsZG8tPmRlc2MsIGNvZGVjLT5kZXYsCisJCQkJCSAgaW5pdF9kYXRhLCBsZG8pOworCWlmIChJU19FUlIobGRvLT5kZXYpKSB7CisJCWludCByZXQgPSBQVFJfRVJSKGxkby0+ZGV2KTsKKworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yXG4iKTsKKwkJa2ZyZWUobGRvLT5kZXNjLm5hbWUpOworCQlrZnJlZShsZG8pOworCisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGRvX3JlZ3VsYXRvcl9yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzZ3RsNTAwMF9wcml2ICpzZ3RsNTAwMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBsZG9fcmVndWxhdG9yICpsZG8gPSBzZ3RsNTAwMC0+bGRvOworCisJaWYgKCFsZG8pCisJCXJldHVybiAwOworCisJcmVndWxhdG9yX3VucmVnaXN0ZXIobGRvLT5kZXYpOworCWtmcmVlKGxkby0+ZGVzYy5uYW1lKTsKKwlrZnJlZShsZG8pOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGludCBsZG9fcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCQkJCWludCB2b2x0YWdlKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGxkb19yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKgorICogc2V0IGRhYyBiaWFzCisgKiBjb21tb24gc3RhdGUgY2hhbmdlczoKKyAqIHN0YXJ0dXA6CisgKiBvZmYgLS0+IHN0YW5kYnkgLS0+IHByZXBhcmUgLS0+IG9uCisgKiBzdGFuZGJ5IC0tPiBwcmVwYXJlIC0tPiBvbgorICoKKyAqIHN0b3A6CisgKiBvbiAtLT4gcHJlcGFyZSAtLT4gc3RhbmRieQorICovCitzdGF0aWMgaW50IHNndGw1MDAwX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZ3RsNTAwMF9wcml2ICpzZ3RsNTAwMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZSgKKwkJCQkJCUFSUkFZX1NJWkUoc2d0bDUwMDAtPnN1cHBsaWVzKSwKKwkJCQkJCXNndGw1MDAwLT5zdXBwbGllcyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQl1ZGVsYXkoMTApOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoc2d0bDUwMDAtPnN1cHBsaWVzKSwKKwkJCQkJc2d0bDUwMDAtPnN1cHBsaWVzKTsKKwkJYnJlYWs7CisJfQorCisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFNHVEw1MDAwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc2d0bDUwMDBfb3BzID0geworCS5od19wYXJhbXMgPSBzZ3RsNTAwMF9wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUgPSBzZ3RsNTAwMF9kaWdpdGFsX211dGUsCisJLnNldF9mbXQgPSBzZ3RsNTAwMF9zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2NsayA9IHNndGw1MDAwX3NldF9kYWlfc3lzY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgc2d0bDUwMDBfZGFpID0geworCS5uYW1lID0gInNndGw1MDAwIiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLyoKKwkJICogb25seSBzdXBwb3J0IDh+NDhLICsgOTZLLAorCQkgKiBUT0RPIG1vZGlmeSBod19wYXJhbSB0byBzdXBwb3J0IG1vcmUKKwkJICovCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkJLmZvcm1hdHMgPSBTR1RMNTAwMF9GT1JNQVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDAsCisJCS5mb3JtYXRzID0gU0dUTDUwMDBfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmc2d0bDUwMDBfb3BzLAorCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAorfTsKKworc3RhdGljIGludCBzZ3RsNTAwMF92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCXVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFNHVEw1MDAwX0NISVBfSUQ6CisJY2FzZSBTR1RMNTAwMF9DSElQX0FEQ0RBQ19DVFJMOgorCWNhc2UgU0dUTDUwMDBfQ0hJUF9BTkFfU1RBVFVTOgorCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19TVVNQRU5ECitzdGF0aWMgaW50IHNndGw1MDAwX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc2d0bDUwMDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXN0b3JlIGFsbCBzZ3RsNTAwMCByZWdpc3RlcnMsCisgKiBzaW5jZSBhIGJpZyBob2xlIGJldHdlZW4gZGFwIGFuZCByZWd1bGFyIHJlZ2lzdGVycywKKyAqIHdlIHdpbGwgcmVzdG9yZSB0aGVtIHJlc3BlY3RpdmVseS4KKyAqLworc3RhdGljIGludCBzZ3RsNTAwMF9yZXN0b3JlX3JlZ3Moc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCWludCBpOworCWludCByZWd1bGFyX3JlZ3MgPSBTR1RMNTAwMF9DSElQX1NIT1JUX0NUUkwgPj4gMTsKKworCS8qIHJlc3RvcmUgcmVndWxhciByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmVndWxhcl9yZWdzOyBpKyspIHsKKwkJaW50IHJlZyA9IGkgPDwgMTsKKworCQkvKiB0aGlzIHJlZ3MgZGVwZW5kcyBvbiB0aGUgb3RoZXJzICovCisJCWlmIChyZWcgPT0gU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIgfHwKKwkJCXJlZyA9PSBTR1RMNTAwMF9DSElQX0NMS19DVFJMIHx8CisJCQlyZWcgPT0gU0dUTDUwMDBfQ0hJUF9MSU5SRUdfQ1RSTCB8fAorCQkJcmVnID09IFNHVEw1MDAwX0NISVBfTElORV9PVVRfQ1RSTCB8fAorCQkJcmVnID09IFNHVEw1MDAwX0NISVBfQ0xLX0NUUkwpCisJCQljb250aW51ZTsKKworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCByZWcsIGNhY2hlW2ldKTsKKwl9CisKKwkvKiByZXN0b3JlIGRhcCByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSBTR1RMNTAwMF9EQVBfUkVHX09GRlNFVCA+PiAxOworCQkJaSA8IFNHVEw1MDAwX01BWF9SRUdfT0ZGU0VUID4+IDE7IGkrKykgeworCQlpbnQgcmVnID0gaSA8PCAxOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgY2FjaGVbaV0pOworCX0KKworCS8qCisJICogcmVzdG9yZSBwb3dlciBhbmQgb3RoZXIgcmVncyBhY2NvcmRpbmcKKwkgKiB0byBzZXRfcG93ZXIoKSBhbmQgc2V0X2Nsb2NrKCkKKwkgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTR1RMNTAwMF9DSElQX0xJTlJFR19DVFJMLAorCQkJY2FjaGVbU0dUTDUwMDBfQ0hJUF9MSU5SRUdfQ1RSTCA+PiAxXSk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwKKwkJCWNhY2hlW1NHVEw1MDAwX0NISVBfQU5BX1BPV0VSID4+IDFdKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNHVEw1MDAwX0NISVBfQ0xLX0NUUkwsCisJCQljYWNoZVtTR1RMNTAwMF9DSElQX0NMS19DVFJMID4+IDFdKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNHVEw1MDAwX0NISVBfUkVGX0NUUkwsCisJCQljYWNoZVtTR1RMNTAwMF9DSElQX1JFRl9DVFJMID4+IDFdKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNHVEw1MDAwX0NISVBfTElORV9PVVRfQ1RSTCwKKwkJCWNhY2hlW1NHVEw1MDAwX0NISVBfTElORV9PVVRfQ1RSTCA+PiAxXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2d0bDUwMDBfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwkvKiBCcmluZyB0aGUgY29kZWMgYmFjayB1cCB0byBzdGFuZGJ5IHRvIGVuYWJsZSByZWd1bGF0b3JzICovCisJc2d0bDUwMDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIFJlc3RvcmUgcmVnaXN0ZXJzIGJ5IGNhY2hlZCBpbiBtZW1vcnkgKi8KKwlzZ3RsNTAwMF9yZXN0b3JlX3JlZ3MoY29kZWMpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgc2d0bDUwMDBfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHNndGw1MDAwX3Jlc3VtZSAgTlVMTAorI2VuZGlmCS8qIENPTkZJR19TVVNQRU5EICovCisKKy8qCisgKiBzZ3RsNTAwMCBoYXMgMyBpbnRlcm5hbCBwb3dlciBzdXBwbGllczoKKyAqIDEuIFZBRywgbm9ybWFsbHkgc2V0IHRvIHZkZGEvMgorICogMi4gY2hhcmdlcHVtcCwgc2V0IHRvIGRpZmZlcmVudCB2YWx1ZQorICoJYWNjb3JkaW5nIHRvIHZvbHRhZ2Ugb2YgdmRkYSBhbmQgdmRkaW8KKyAqIDMuIGxpbmUgb3V0IFZBRywgbm9ybWFsbHkgc2V0IHRvIHZkZGlvLzIKKyAqCisgKiBhbmQgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmcgdG86CisgKiAxLiB2ZGRkIHByb3ZpZGVkIGJ5IGV4dGVybmFsIG9yIG5vdAorICogMi4gdmRkYSBhbmQgdmRkaW8gdm9sdGFnZSB2YWx1ZS4gPiAzLjF2IG9yIG5vdAorICogMy4gY2hpcCByZXZpc2lvbiA+PTB4MTEgb3Igbm90LiBJZiA+PTB4MTEsIG5vdCB1c2UgZXh0ZXJuYWwgdmRkZC4KKyAqLworc3RhdGljIGludCBzZ3RsNTAwMF9zZXRfcG93ZXJfcmVncyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IHZkZGQ7CisJaW50IHZkZGE7CisJaW50IHZkZGlvOworCXUxNiBhbmFfcHdyOworCXUxNiBscmVnX2N0cmw7CisJaW50IHZhZzsKKwlzdHJ1Y3Qgc2d0bDUwMDBfcHJpdiAqc2d0bDUwMDAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXZkZGEgID0gcmVndWxhdG9yX2dldF92b2x0YWdlKHNndGw1MDAwLT5zdXBwbGllc1tWRERBXS5jb25zdW1lcik7CisJdmRkaW8gPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc2d0bDUwMDAtPnN1cHBsaWVzW1ZERElPXS5jb25zdW1lcik7CisJdmRkZCAgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc2d0bDUwMDAtPnN1cHBsaWVzW1ZERERdLmNvbnN1bWVyKTsKKworCXZkZGEgID0gdmRkYSAvIDEwMDA7CisJdmRkaW8gPSB2ZGRpbyAvIDEwMDA7CisJdmRkZCAgPSB2ZGRkIC8gMTAwMDsKKworCWlmICh2ZGRhIDw9IDAgfHwgdmRkaW8gPD0gMCB8fCB2ZGRkIDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJyZWd1bGF0b3Igdm9sdGFnZSBub3Qgc2V0IGNvcnJlY3RseVxuIik7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWNjb3JkaW5nIHRvIGRhdGFzaGVldCwgbWF4aW11bSB2b2x0YWdlIG9mIHN1cHBsaWVzICovCisJaWYgKHZkZGEgPiAzNjAwIHx8IHZkZGlvID4gMzYwMCB8fCB2ZGRkID4gMTk4MCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkiZXhjZWVkIG1heCB2b2x0YWdlIHZkZGEgJWRtdiB2ZGRpbyAlZG1hIHZkZGQgJWRtYVxuIiwKKwkJCXZkZGEsIHZkZGlvLCB2ZGRkKTsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZXNldCB2YWx1ZSAqLworCWFuYV9wd3IgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNHVEw1MDAwX0NISVBfQU5BX1BPV0VSKTsKKwlhbmFfcHdyIHw9IFNHVEw1MDAwX0RBQ19TVEVSRU8gfAorCQkJU0dUTDUwMDBfQURDX1NURVJFTyB8CisJCQlTR1RMNTAwMF9SRUZUT1BfUE9XRVJVUDsKKwlscmVnX2N0cmwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNHVEw1MDAwX0NISVBfTElOUkVHX0NUUkwpOworCisJaWYgKHZkZGlvIDwgMzEwMCAmJiB2ZGRhIDwgMzEwMCkgeworCQkvKiBlbmFibGUgaW50ZXJuYWwgb3NjaWxsYXRvciB1c2VkIGZvciBjaGFyZ2UgcHVtcCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTR1RMNTAwMF9DSElQX0NMS19UT1BfQ1RSTCwKKwkJCQkJU0dUTDUwMDBfSU5UX09TQ19FTiwKKwkJCQkJU0dUTDUwMDBfSU5UX09TQ19FTik7CisJCS8qIEVuYWJsZSBWRERDIGNoYXJnZSBwdW1wICovCisJCWFuYV9wd3IgfD0gU0dUTDUwMDBfVkREQ19DSFJHUE1QX1BPV0VSVVA7CisJfSBlbHNlIGlmICh2ZGRpbyA+PSAzMTAwICYmIHZkZGEgPj0gMzEwMCkgeworCQkvKgorCQkgKiBpZiB2ZGRpbyBhbmQgdmRkZCA+IDMuMXYsCisJCSAqIGNoYXJnZSBwdW1wIHNob3VsZCBiZSBjbGVhbiBiZWZvcmUgc2V0IGFuYV9wd3IKKwkJICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNHVEw1MDAwX0NISVBfQU5BX1BPV0VSLAorCQkJCVNHVEw1MDAwX1ZERENfQ0hSR1BNUF9QT1dFUlVQLCAwKTsKKworCQkvKiBWRERDIHVzZSBWRERJTyByYWlsICovCisJCWxyZWdfY3RybCB8PSBTR1RMNTAwMF9WRERDX0FTU05fT1ZSRDsKKwkJbHJlZ19jdHJsIHw9IFNHVEw1MDAwX1ZERENfTUFOX0FTU05fVkRESU8gPDwKKwkJCSAgICBTR1RMNTAwMF9WRERDX01BTl9BU1NOX1NISUZUOworCX0KKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNHVEw1MDAwX0NISVBfTElOUkVHX0NUUkwsIGxyZWdfY3RybCk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwgYW5hX3B3cik7CisKKwkvKiBzZXQgdm9sdGFnZSB0byByZWdpc3RlciAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNHVEw1MDAwX0NISVBfTElOUkVHX0NUUkwsCisJCQkJKDB4MSA8PCA0KSAtIDEsIDB4OCk7CisKKwkvKgorCSAqIGlmIHZkZGQgbGluZWFyIHJlZyBoYXMgYmVlbiBlbmFibGVkLAorCSAqIHNpbXBsZSBkaWdpdGFsIHN1cHBseSBzaG91bGQgYmUgY2xlYXIgdG8gZ2V0CisJICogcHJvcGVyIFZEREQgdm9sdGFnZS4KKwkgKi8KKwlpZiAoYW5hX3B3ciAmIFNHVEw1MDAwX0xJTkVSRUdfRF9QT1dFUlVQKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwKKwkJCQlTR1RMNTAwMF9MSU5SRUdfU0lNUExFX1BPV0VSVVAsCisJCQkJMCk7CisJZWxzZQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiwKKwkJCQlTR1RMNTAwMF9MSU5SRUdfU0lNUExFX1BPV0VSVVAgfAorCQkJCVNHVEw1MDAwX1NUQVJUVVBfUE9XRVJVUCwKKwkJCQkwKTsKKworCS8qCisJICogc2V0IEFEQy9EQUMgVkFHIHRvIHZkZGEgLyAyLAorCSAqIHNob3VsZCBzdGF5IGluIHJhbmdlICgwLjh2LCAxLjU3NXYpCisJICovCisJdmFnID0gdmRkYSAvIDI7CisJaWYgKHZhZyA8PSBTR1RMNTAwMF9BTkFfR05EX0JBU0UpCisJCXZhZyA9IDA7CisJZWxzZSBpZiAodmFnID49IFNHVEw1MDAwX0FOQV9HTkRfQkFTRSArIFNHVEw1MDAwX0FOQV9HTkRfU1RQICoKKwkJIChTR1RMNTAwMF9BTkFfR05EX01BU0sgPj4gU0dUTDUwMDBfQU5BX0dORF9TSElGVCkpCisJCXZhZyA9IFNHVEw1MDAwX0FOQV9HTkRfTUFTSyA+PiBTR1RMNTAwMF9BTkFfR05EX1NISUZUOworCWVsc2UKKwkJdmFnID0gKHZhZyAtIFNHVEw1MDAwX0FOQV9HTkRfQkFTRSkgLyBTR1RMNTAwMF9BTkFfR05EX1NUUDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNHVEw1MDAwX0NISVBfUkVGX0NUUkwsCisJCQl2YWcgPDwgU0dUTDUwMDBfQU5BX0dORF9TSElGVCwKKwkJCXZhZyA8PCBTR1RMNTAwMF9BTkFfR05EX1NISUZUKTsKKworCS8qIHNldCBsaW5lIG91dCBWQUcgdG8gdmRkaW8gLyAyLCBpbiByYW5nZSAoMC44diwgMS42NzV2KSAqLworCXZhZyA9IHZkZGlvIC8gMjsKKwlpZiAodmFnIDw9IFNHVEw1MDAwX0xJTkVfT1VUX0dORF9CQVNFKQorCQl2YWcgPSAwOworCWVsc2UgaWYgKHZhZyA+PSBTR1RMNTAwMF9MSU5FX09VVF9HTkRfQkFTRSArCisJCVNHVEw1MDAwX0xJTkVfT1VUX0dORF9TVFAgKiBTR1RMNTAwMF9MSU5FX09VVF9HTkRfTUFYKQorCQl2YWcgPSBTR1RMNTAwMF9MSU5FX09VVF9HTkRfTUFYOworCWVsc2UKKwkJdmFnID0gKHZhZyAtIFNHVEw1MDAwX0xJTkVfT1VUX0dORF9CQVNFKSAvCisJCSAgICBTR1RMNTAwMF9MSU5FX09VVF9HTkRfU1RQOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9MSU5FX09VVF9DVFJMLAorCQkJdmFnIDw8IFNHVEw1MDAwX0xJTkVfT1VUX0dORF9TSElGVCB8CisJCQlTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UXzM2MHUgPDwKKwkJCQlTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UX1NISUZULAorCQkJdmFnIDw8IFNHVEw1MDAwX0xJTkVfT1VUX0dORF9TSElGVCB8CisJCQlTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UXzM2MHUgPDwKKwkJCQlTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UX1NISUZUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNndGw1MDAwX2VuYWJsZV9yZWd1bGF0b3JzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1MTYgcmVnOworCWludCByZXQ7CisJaW50IHJldjsKKwlpbnQgaTsKKwlpbnQgZXh0ZXJuYWxfdmRkZCA9IDA7CisJc3RydWN0IHNndGw1MDAwX3ByaXYgKnNndGw1MDAwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZ3RsNTAwMC0+c3VwcGxpZXMpOyBpKyspCisJCXNndGw1MDAwLT5zdXBwbGllc1tpXS5zdXBwbHkgPSBzdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRShzZ3RsNTAwMC0+c3VwcGxpZXMpLAorCQkJCXNndGw1MDAwLT5zdXBwbGllcyk7CisJaWYgKCFyZXQpCisJCWV4dGVybmFsX3ZkZGQgPSAxOworCWVsc2UgeworCQkvKiBzZXQgaW50ZXJuYWwgbGRvIHRvIDEuMnYgKi8KKwkJaW50IHZvbHRhZ2UgPSBMRE9fVk9MVEFHRTsKKworCQlyZXQgPSBsZG9fcmVndWxhdG9yX3JlZ2lzdGVyKGNvZGVjLCAmbGRvX2luaXRfZGF0YSwgdm9sdGFnZSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgdmRkZCBpbnRlcm5hbCBzdXBwbGllczogJWRcbiIsCisJCQkJcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlzZ3RsNTAwMC0+c3VwcGxpZXNbVkRERF0uc3VwcGx5ID0gTERPX0NPTlNVTUVSX05BTUU7CisKKwkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsCisJCQkJQVJSQVlfU0laRShzZ3RsNTAwMC0+c3VwcGxpZXMpLAorCQkJCXNndGw1MDAwLT5zdXBwbGllcyk7CisKKwkJaWYgKHJldCkgeworCQkJbGRvX3JlZ3VsYXRvcl9yZW1vdmUoY29kZWMpOworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShzZ3RsNTAwMC0+c3VwcGxpZXMpLAorCQkJCQlzZ3RsNTAwMC0+c3VwcGxpZXMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlZ3VsYXRvcl9mcmVlOworCisJLyogd2FpdCBmb3IgYWxsIHBvd2VyIHJhaWxzIGJyaW5nIHVwICovCisJdWRlbGF5KDEwKTsKKworCS8qIHJlYWQgY2hpcCBpbmZvcm1hdGlvbiAqLworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgU0dUTDUwMDBfQ0hJUF9JRCk7CisJaWYgKCgocmVnICYgU0dUTDUwMDBfUEFSVElEX01BU0spID4+IFNHVEw1MDAwX1BBUlRJRF9TSElGVCkgIT0KKwkgICAgU0dUTDUwMDBfUEFSVElEX1BBUlRfSUQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJIkRldmljZSB3aXRoIElEIHJlZ2lzdGVyICV4IGlzIG5vdCBhIHNndGw1MDAwXG4iLCByZWcpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9yZWd1bGF0b3JfZGlzYWJsZTsKKwl9CisKKwlyZXYgPSAocmVnICYgU0dUTDUwMDBfUkVWSURfTUFTSykgPj4gU0dUTDUwMDBfUkVWSURfU0hJRlQ7CisJZGV2X2luZm8oY29kZWMtPmRldiwgInNndGw1MDAwIHJldmlzaW9uICVkXG4iLCByZXYpOworCisJLyoKKwkgKiB3b3JrYXJvdW5kIGZvciByZXZpc2lvbiAweDExIGFuZCBsYXRlciwKKwkgKiByb2xsIGJhY2sgdG8gdXNlIGludGVybmFsIExETworCSAqLworCWlmIChleHRlcm5hbF92ZGRkICYmIHJldiA+PSAweDExKSB7CisJCWludCB2b2x0YWdlID0gTERPX1ZPTFRBR0U7CisJCS8qIGRpc2FibGUgYWxsIHJlZ3VsYXRvciBmaXJzdCAqLworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoc2d0bDUwMDAtPnN1cHBsaWVzKSwKKwkJCQkJc2d0bDUwMDAtPnN1cHBsaWVzKTsKKwkJLyogZnJlZSBWREREIHJlZ3VsYXRvciAqLworCQlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoc2d0bDUwMDAtPnN1cHBsaWVzKSwKKwkJCQkJc2d0bDUwMDAtPnN1cHBsaWVzKTsKKworCQlyZXQgPSBsZG9fcmVndWxhdG9yX3JlZ2lzdGVyKGNvZGVjLCAmbGRvX2luaXRfZGF0YSwgdm9sdGFnZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXNndGw1MDAwLT5zdXBwbGllc1tWREREXS5zdXBwbHkgPSBMRE9fQ09OU1VNRVJfTkFNRTsKKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwKKwkJCQlBUlJBWV9TSVpFKHNndGw1MDAwLT5zdXBwbGllcyksCisJCQkJc2d0bDUwMDAtPnN1cHBsaWVzKTsKKwkJaWYgKHJldCkgeworCQkJbGRvX3JlZ3VsYXRvcl9yZW1vdmUoY29kZWMpOworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShzZ3RsNTAwMC0+c3VwcGxpZXMpLAorCQkJCQkJc2d0bDUwMDAtPnN1cHBsaWVzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3JlZ3VsYXRvcl9mcmVlOworCisJCS8qIHdhaXQgZm9yIGFsbCBwb3dlciByYWlscyBicmluZyB1cCAqLworCQl1ZGVsYXkoMTApOworCX0KKworCXJldHVybiAwOworCitlcnJfcmVndWxhdG9yX2Rpc2FibGU6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHNndGw1MDAwLT5zdXBwbGllcyksCisJCQkJc2d0bDUwMDAtPnN1cHBsaWVzKTsKK2Vycl9yZWd1bGF0b3JfZnJlZToKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoc2d0bDUwMDAtPnN1cHBsaWVzKSwKKwkJCQlzZ3RsNTAwMC0+c3VwcGxpZXMpOworCWlmIChleHRlcm5hbF92ZGRkKQorCQlsZG9fcmVndWxhdG9yX3JlbW92ZShjb2RlYyk7CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IHNndGw1MDAwX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZ3RsNTAwMF9wcml2ICpzZ3RsNTAwMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJLyogc2V0dXAgaTJjIGRhdGEgb3BzICovCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDE2LCAxNiwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzZ3RsNTAwMF9lbmFibGVfcmVndWxhdG9ycyhjb2RlYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHBvd2VyIHVwIHNndGw1MDAwICovCisJcmV0ID0gc2d0bDUwMDBfc2V0X3Bvd2VyX3JlZ3MoY29kZWMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJLyogZW5hYmxlIHNtYWxsIHBvcCwgaW50cm9kdWNlIDQwMG1zIGRlbGF5IGluIHR1cm5pbmcgb2ZmICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9SRUZfQ1RSTCwKKwkJCQlTR1RMNTAwMF9TTUFMTF9QT1AsCisJCQkJU0dUTDUwMDBfU01BTExfUE9QKTsKKworCS8qIGRpc2FibGUgc2hvcnQgY3V0IGRldGVjdG9yICovCisJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9TSE9SVF9DVFJMLCAwKTsKKworCS8qCisJICogc2V0IGkycyBhcyBkZWZhdWx0IGlucHV0IG9mIHNvdW5kIHN3aXRjaAorCSAqIFRPRE86IGFkZCBzb3VuZCBzd2l0Y2ggdG8gY29udHJvbCBhbmQgZGFwbSB3aWRnZS4KKwkgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTR1RMNTAwMF9DSElQX1NTU19DVFJMLAorCQkJU0dUTDUwMDBfREFDX1NFTF9JMlNfSU4gPDwgU0dUTDUwMDBfREFDX1NFTF9TSElGVCk7CisJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9ESUdfUE9XRVIsCisJCQlTR1RMNTAwMF9BRENfRU4gfCBTR1RMNTAwMF9EQUNfRU4pOworCisJLyogZW5hYmxlIGRhYyB2b2x1bWUgcmFtcCBieSBkZWZhdWx0ICovCisJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9BRENEQUNfQ1RSTCwKKwkJCVNHVEw1MDAwX0RBQ19WT0xfUkFNUF9FTiB8CisJCQlTR1RMNTAwMF9EQUNfTVVURV9SSUdIVCB8CisJCQlTR1RMNTAwMF9EQUNfTVVURV9MRUZUKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNHVEw1MDAwX0NISVBfUEFEX1NUUkVOR1RILCAweDAxNWYpOworCisJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9BTkFfQ1RSTCwKKwkJCVNHVEw1MDAwX0hQX1pDRF9FTiB8CisJCQlTR1RMNTAwMF9BRENfWkNEX0VOKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNHVEw1MDAwX0NISVBfTUlDX0NUUkwsIDApOworCisJLyoKKwkgKiBkaXNhYmxlIERBUAorCSAqIFRPRE86CisJICogRW5hYmxlIERBUCBpbiBrY29udHJvbCBhbmQgZGFwbS4KKwkgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTR1RMNTAwMF9EQVBfQ1RSTCwgMCk7CisKKwkvKiBsZWFkaW5nIHRvIHN0YW5kYnkgc3RhdGUgKi8KKwlyZXQgPSBzZ3RsNTAwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHNndGw1MDAwX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRShzZ3RsNTAwMF9zbmRfY29udHJvbHMpKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoJmNvZGVjLT5kYXBtLCBzZ3RsNTAwMF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHNndGw1MDAwX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoJmNvZGVjLT5kYXBtLCBhdWRpb19tYXAsCisJCQkJQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cygmY29kZWMtPmRhcG0pOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoc2d0bDUwMDAtPnN1cHBsaWVzKSwKKwkJCQkJCXNndGw1MDAwLT5zdXBwbGllcyk7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHNndGw1MDAwLT5zdXBwbGllcyksCisJCQkJc2d0bDUwMDAtPnN1cHBsaWVzKTsKKwlsZG9fcmVndWxhdG9yX3JlbW92ZShjb2RlYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNndGw1MDAwX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNndGw1MDAwX3ByaXYgKnNndGw1MDAwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzZ3RsNTAwMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoc2d0bDUwMDAtPnN1cHBsaWVzKSwKKwkJCQkJCXNndGw1MDAwLT5zdXBwbGllcyk7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHNndGw1MDAwLT5zdXBwbGllcyksCisJCQkJc2d0bDUwMDAtPnN1cHBsaWVzKTsKKwlsZG9fcmVndWxhdG9yX3JlbW92ZShjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzZ3RsNTAwMF9kcml2ZXIgPSB7CisJLnByb2JlID0gc2d0bDUwMDBfcHJvYmUsCisJLnJlbW92ZSA9IHNndGw1MDAwX3JlbW92ZSwKKwkuc3VzcGVuZCA9IHNndGw1MDAwX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNndGw1MDAwX3Jlc3VtZSwKKwkuc2V0X2JpYXNfbGV2ZWwgPSBzZ3RsNTAwMF9zZXRfYmlhc19sZXZlbCwKKwkucmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHNndGw1MDAwX3JlZ3MpLAorCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHUxNiksCisJLnJlZ19jYWNoZV9zdGVwID0gMiwKKwkucmVnX2NhY2hlX2RlZmF1bHQgPSBzZ3RsNTAwMF9yZWdzLAorCS52b2xhdGlsZV9yZWdpc3RlciA9IHNndGw1MDAwX3ZvbGF0aWxlX3JlZ2lzdGVyLAorfTsKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc2d0bDUwMDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2d0bDUwMDBfcHJpdiAqc2d0bDUwMDA7CisJaW50IHJldDsKKworCXNndGw1MDAwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNndGw1MDAwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNndGw1MDAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogY29weSBEQVAgZGVmYXVsdCB2YWx1ZXMgdG8gZGVmYXVsdCB2YWx1ZSBhcnJheS4KKwkgKiBzZ3RsNTAwMCByZWdpc3RlciBzcGFjZSBoYXMgYSBiaWcgaG9sZSwgbWVyZ2UgaXQKKwkgKiBhdCBpbml0IHBoYXNlIG1ha2VzIGxpZmUgZWFzeS4KKwkgKiBGSVhNRTogc2hvdWxkIHdlIGRyb3AgJ2NvbnN0JyBvZiBzZ3RsNTAwMF9yZWdzPworCSAqLworCW1lbWNweSgodm9pZCAqKSgmc2d0bDUwMDBfcmVnc1swXSArIChTR1RMNTAwMF9EQVBfUkVHX09GRlNFVCA+PiAxKSksCisJCQlzZ3RsNTAwMF9kYXBfcmVncywKKwkJCVNHVEw1MDAwX01BWF9SRUdfT0ZGU0VUIC0gU0dUTDUwMDBfREFQX1JFR19PRkZTRVQpOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc2d0bDUwMDApOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmY2xpZW50LT5kZXYsCisJCQkmc2d0bDUwMDBfZHJpdmVyLCAmc2d0bDUwMDBfZGFpLCAxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJa2ZyZWUoc2d0bDUwMDApOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCBzZ3RsNTAwMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHNndGw1MDAwX3ByaXYgKnNndGw1MDAwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmNsaWVudC0+ZGV2KTsKKworCWtmcmVlKHNndGw1MDAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNndGw1MDAwX2lkW10gPSB7CisJeyJzZ3RsNTAwMCIsIDB9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNndGw1MDAwX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNndGw1MDAwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAic2d0bDUwMDAiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSBzZ3RsNTAwMF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNndGw1MDAwX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHNndGw1MDAwX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2d0bDUwMDBfbW9kaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmc2d0bDUwMDBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzZ3RsNTAwMF9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNndGw1MDAwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmc2d0bDUwMDBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzZ3RsNTAwMF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgU0dUTDUwMDAgQUxTQSBTb0MgQ29kZWMgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJaZW5nIFpoYW9taW5nIDx6aGFvbWluZy56ZW5nQGZyZWVzY2FsZS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmggYi9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjM2FiMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuaApAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIHNndGw1MDAwLmggLSBTR1RMNTAwMCBhdWRpbyBjb2RlYyBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAxMC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9TR1RMNTAwMF9ICisjZGVmaW5lIF9TR1RMNTAwMF9ICisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfQ0hJUF9JRAkJCTB4MDAwMAorI2RlZmluZSBTR1RMNTAwMF9DSElQX0RJR19QT1dFUgkJCTB4MDAwMgorI2RlZmluZSBTR1RMNTAwMF9DSElQX0NMS19DVFJMCQkJMHgwMDA0CisjZGVmaW5lIFNHVEw1MDAwX0NISVBfSTJTX0NUUkwJCQkweDAwMDYKKyNkZWZpbmUgU0dUTDUwMDBfQ0hJUF9TU1NfQ1RSTAkJCTB4MDAwYQorI2RlZmluZSBTR1RMNTAwMF9DSElQX0FEQ0RBQ19DVFJMCQkweDAwMGUKKyNkZWZpbmUgU0dUTDUwMDBfQ0hJUF9EQUNfVk9MCQkJMHgwMDEwCisjZGVmaW5lIFNHVEw1MDAwX0NISVBfUEFEX1NUUkVOR1RICQkweDAwMTQKKyNkZWZpbmUgU0dUTDUwMDBfQ0hJUF9BTkFfQURDX0NUUkwJCTB4MDAyMAorI2RlZmluZSBTR1RMNTAwMF9DSElQX0FOQV9IUF9DVFJMCQkweDAwMjIKKyNkZWZpbmUgU0dUTDUwMDBfQ0hJUF9BTkFfQ1RSTAkJCTB4MDAyNAorI2RlZmluZSBTR1RMNTAwMF9DSElQX0xJTlJFR19DVFJMCQkweDAwMjYKKyNkZWZpbmUgU0dUTDUwMDBfQ0hJUF9SRUZfQ1RSTAkJCTB4MDAyOAorI2RlZmluZSBTR1RMNTAwMF9DSElQX01JQ19DVFJMCQkJMHgwMDJhCisjZGVmaW5lIFNHVEw1MDAwX0NISVBfTElORV9PVVRfQ1RSTAkJMHgwMDJjCisjZGVmaW5lIFNHVEw1MDAwX0NISVBfTElORV9PVVRfVk9MCQkweDAwMmUKKyNkZWZpbmUgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIJCQkweDAwMzAKKyNkZWZpbmUgU0dUTDUwMDBfQ0hJUF9QTExfQ1RSTAkJCTB4MDAzMgorI2RlZmluZSBTR1RMNTAwMF9DSElQX0NMS19UT1BfQ1RSTAkJMHgwMDM0CisjZGVmaW5lIFNHVEw1MDAwX0NISVBfQU5BX1NUQVRVUwkJMHgwMDM2CisjZGVmaW5lIFNHVEw1MDAwX0NISVBfU0hPUlRfQ1RSTAkJMHgwMDNjCisjZGVmaW5lIFNHVEw1MDAwX0NISVBfQU5BX1RFU1QyCQkJMHgwMDNhCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DVFJMCQkJMHgwMTAwCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9QRVEJCQkweDAxMDIKKyNkZWZpbmUgU0dUTDUwMDBfREFQX0JBU1NfRU5IQU5DRQkJMHgwMTA0CisjZGVmaW5lIFNHVEw1MDAwX0RBUF9CQVNTX0VOSEFOQ0VfQ1RSTAkJMHgwMTA2CisjZGVmaW5lIFNHVEw1MDAwX0RBUF9BVURJT19FUQkJCTB4MDEwOAorI2RlZmluZSBTR1RMNTAwMF9EQVBfU1VSUk9VTkQJCQkweDAxMGEKKyNkZWZpbmUgU0dUTDUwMDBfREFQX0ZMVF9DT0VGX0FDQ0VTUwkJMHgwMTBjCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0IwX01TQgkJMHgwMTBlCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0IwX0xTQgkJMHgwMTEwCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9FUV9CQVNTX0JBTkQwCQkweDAxMTYKKyNkZWZpbmUgU0dUTDUwMDBfREFQX0VRX0JBU1NfQkFORDEJCTB4MDExOAorI2RlZmluZSBTR1RMNTAwMF9EQVBfRVFfQkFTU19CQU5EMgkJMHgwMTFhCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9FUV9CQVNTX0JBTkQzCQkweDAxMWMKKyNkZWZpbmUgU0dUTDUwMDBfREFQX0VRX0JBU1NfQkFORDQJCTB4MDExZQorI2RlZmluZSBTR1RMNTAwMF9EQVBfTUFJTl9DSEFOCQkJMHgwMTIwCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9NSVhfQ0hBTgkJCTB4MDEyMgorI2RlZmluZSBTR1RMNTAwMF9EQVBfQVZDX0NUUkwJCQkweDAxMjQKKyNkZWZpbmUgU0dUTDUwMDBfREFQX0FWQ19USFJFU0hPTEQJCTB4MDEyNgorI2RlZmluZSBTR1RMNTAwMF9EQVBfQVZDX0FUVEFDSwkJCTB4MDEyOAorI2RlZmluZSBTR1RMNTAwMF9EQVBfQVZDX0RFQ0FZCQkJMHgwMTJhCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0IxX01TQgkJMHgwMTJjCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0IxX0xTQgkJMHgwMTJlCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0IyX01TQgkJMHgwMTMwCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0IyX0xTQgkJMHgwMTMyCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0ExX01TQgkJMHgwMTM0CisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0ExX0xTQgkJMHgwMTM2CisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0EyX01TQgkJMHgwMTM4CisjZGVmaW5lIFNHVEw1MDAwX0RBUF9DT0VGX1dSX0EyX0xTQgkJMHgwMTNhCisKKy8qCisgKiBGaWVsZCBEZWZpbml0aW9ucy4KKyAqLworCisvKgorICogU0dUTDUwMDBfQ0hJUF9JRAorICovCisjZGVmaW5lIFNHVEw1MDAwX1BBUlRJRF9NQVNLCQkJMHhmZjAwCisjZGVmaW5lIFNHVEw1MDAwX1BBUlRJRF9TSElGVAkJCTgKKyNkZWZpbmUgU0dUTDUwMDBfUEFSVElEX1dJRFRICQkJOAorI2RlZmluZSBTR1RMNTAwMF9QQVJUSURfUEFSVF9JRAkJCTB4YTAKKyNkZWZpbmUgU0dUTDUwMDBfUkVWSURfTUFTSwkJCTB4MDBmZgorI2RlZmluZSBTR1RMNTAwMF9SRVZJRF9TSElGVAkJCTAKKyNkZWZpbmUgU0dUTDUwMDBfUkVWSURfV0lEVEgJCQk4CisKKy8qCisgKiBTR1RMNTAwMF9DSElQX0RJR19QT1dFUgorICovCisjZGVmaW5lIFNHVEw1MDAwX0FEQ19FTgkJCQkweDAwNDAKKyNkZWZpbmUgU0dUTDUwMDBfREFDX0VOCQkJCTB4MDAyMAorI2RlZmluZSBTR1RMNTAwMF9EQVBfUE9XRVJVUAkJCTB4MDAxMAorI2RlZmluZSBTR1RMNTAwMF9JMlNfT1VUX1BPV0VSVVAJCTB4MDAwMgorI2RlZmluZSBTR1RMNTAwMF9JMlNfSU5fUE9XRVJVUAkJCTB4MDAwMQorCisvKgorICogU0dUTDUwMDBfQ0hJUF9DTEtfQ1RSTAorICovCisjZGVmaW5lIFNHVEw1MDAwX1JBVEVfTU9ERV9NQVNLCQkJMHgwMDMwCisjZGVmaW5lIFNHVEw1MDAwX1JBVEVfTU9ERV9TSElGVAkJNAorI2RlZmluZSBTR1RMNTAwMF9SQVRFX01PREVfV0lEVEgJCTIKKyNkZWZpbmUgU0dUTDUwMDBfUkFURV9NT0RFX0RJVl8xCQkwCisjZGVmaW5lIFNHVEw1MDAwX1JBVEVfTU9ERV9ESVZfMgkJMQorI2RlZmluZSBTR1RMNTAwMF9SQVRFX01PREVfRElWXzQJCTIKKyNkZWZpbmUgU0dUTDUwMDBfUkFURV9NT0RFX0RJVl82CQkzCisjZGVmaW5lIFNHVEw1MDAwX1NZU19GU19NQVNLCQkJMHgwMDBjCisjZGVmaW5lIFNHVEw1MDAwX1NZU19GU19TSElGVAkJCTIKKyNkZWZpbmUgU0dUTDUwMDBfU1lTX0ZTX1dJRFRICQkJMgorI2RlZmluZSBTR1RMNTAwMF9TWVNfRlNfMzJrCQkJMHgwCisjZGVmaW5lIFNHVEw1MDAwX1NZU19GU180NF8xawkJCTB4MQorI2RlZmluZSBTR1RMNTAwMF9TWVNfRlNfNDhrCQkJMHgyCisjZGVmaW5lIFNHVEw1MDAwX1NZU19GU185NmsJCQkweDMKKyNkZWZpbmUgU0dUTDUwMDBfTUNMS19GUkVRX01BU0sJCQkweDAwMDMKKyNkZWZpbmUgU0dUTDUwMDBfTUNMS19GUkVRX1NISUZUCQkwCisjZGVmaW5lIFNHVEw1MDAwX01DTEtfRlJFUV9XSURUSAkJMgorI2RlZmluZSBTR1RMNTAwMF9NQ0xLX0ZSRVFfMjU2RlMJCTB4MAorI2RlZmluZSBTR1RMNTAwMF9NQ0xLX0ZSRVFfMzg0RlMJCTB4MQorI2RlZmluZSBTR1RMNTAwMF9NQ0xLX0ZSRVFfNTEyRlMJCTB4MgorI2RlZmluZSBTR1RMNTAwMF9NQ0xLX0ZSRVFfUExMCQkJMHgzCisKKy8qCisgKiBTR1RMNTAwMF9DSElQX0kyU19DVFJMCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfSTJTX1NDTEtGUkVRX01BU0sJCTB4MDEwMAorI2RlZmluZSBTR1RMNTAwMF9JMlNfU0NMS0ZSRVFfU0hJRlQJCTgKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX1NDTEtGUkVRX1dJRFRICQkxCisjZGVmaW5lIFNHVEw1MDAwX0kyU19TQ0xLRlJFUV82NEZTCQkweDAKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX1NDTEtGUkVRXzMyRlMJCTB4MQkvKiBOb3QgZm9yIFJKIG1vZGUgKi8KKyNkZWZpbmUgU0dUTDUwMDBfSTJTX01BU1RFUgkJCTB4MDA4MAorI2RlZmluZSBTR1RMNTAwMF9JMlNfU0NMS19JTlYJCQkweDAwNDAKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX0RMRU5fTUFTSwkJCTB4MDAzMAorI2RlZmluZSBTR1RMNTAwMF9JMlNfRExFTl9TSElGVAkJCTQKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX0RMRU5fV0lEVEgJCQkyCisjZGVmaW5lIFNHVEw1MDAwX0kyU19ETEVOXzMyCQkJMHgwCisjZGVmaW5lIFNHVEw1MDAwX0kyU19ETEVOXzI0CQkJMHgxCisjZGVmaW5lIFNHVEw1MDAwX0kyU19ETEVOXzIwCQkJMHgyCisjZGVmaW5lIFNHVEw1MDAwX0kyU19ETEVOXzE2CQkJMHgzCisjZGVmaW5lIFNHVEw1MDAwX0kyU19NT0RFX01BU0sJCQkweDAwMGMKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX01PREVfU0hJRlQJCQkyCisjZGVmaW5lIFNHVEw1MDAwX0kyU19NT0RFX1dJRFRICQkJMgorI2RlZmluZSBTR1RMNTAwMF9JMlNfTU9ERV9JMlNfTEoJCTB4MAorI2RlZmluZSBTR1RMNTAwMF9JMlNfTU9ERV9SSgkJCTB4MQorI2RlZmluZSBTR1RMNTAwMF9JMlNfTU9ERV9QQ00JCQkweDIKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX0xSQUxJR04JCQkweDAwMDIKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX0xSUE9MCQkJMHgwMDAxCS8qIHNldCBmb3Igd2hpY2ggbW9kZSAqLworCisvKgorICogU0dUTDUwMDBfQ0hJUF9TU1NfQ1RSTAorICovCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9NSVhfTFJTV0FQCQkJMHg0MDAwCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9MUlNXQVAJCQkweDIwMDAKKyNkZWZpbmUgU0dUTDUwMDBfREFDX0xSU1dBUAkJCTB4MTAwMAorI2RlZmluZSBTR1RMNTAwMF9JMlNfT1VUX0xSU1dBUAkJCTB4MDQwMAorI2RlZmluZSBTR1RMNTAwMF9EQVBfTUlYX1NFTF9NQVNLCQkweDAzMDAKKyNkZWZpbmUgU0dUTDUwMDBfREFQX01JWF9TRUxfU0hJRlQJCTgKKyNkZWZpbmUgU0dUTDUwMDBfREFQX01JWF9TRUxfV0lEVEgJCTIKKyNkZWZpbmUgU0dUTDUwMDBfREFQX01JWF9TRUxfQURDCQkweDAKKyNkZWZpbmUgU0dUTDUwMDBfREFQX01JWF9TRUxfSTJTX0lOCQkweDEKKyNkZWZpbmUgU0dUTDUwMDBfREFQX1NFTF9NQVNLCQkJMHgwMGMwCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9TRUxfU0hJRlQJCQk2CisjZGVmaW5lIFNHVEw1MDAwX0RBUF9TRUxfV0lEVEgJCQkyCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9TRUxfQURDCQkJMHgwCisjZGVmaW5lIFNHVEw1MDAwX0RBUF9TRUxfSTJTX0lOCQkJMHgxCisjZGVmaW5lIFNHVEw1MDAwX0RBQ19TRUxfTUFTSwkJCTB4MDAzMAorI2RlZmluZSBTR1RMNTAwMF9EQUNfU0VMX1NISUZUCQkJNAorI2RlZmluZSBTR1RMNTAwMF9EQUNfU0VMX1dJRFRICQkJMgorI2RlZmluZSBTR1RMNTAwMF9EQUNfU0VMX0FEQwkJCTB4MAorI2RlZmluZSBTR1RMNTAwMF9EQUNfU0VMX0kyU19JTgkJCTB4MQorI2RlZmluZSBTR1RMNTAwMF9EQUNfU0VMX0RBUAkJCTB4MworI2RlZmluZSBTR1RMNTAwMF9JMlNfT1VUX1NFTF9NQVNLCQkweDAwMDMKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX09VVF9TRUxfU0hJRlQJCTAKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX09VVF9TRUxfV0lEVEgJCTIKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX09VVF9TRUxfQURDCQkweDAKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX09VVF9TRUxfSTJTX0lOCQkweDEKKyNkZWZpbmUgU0dUTDUwMDBfSTJTX09VVF9TRUxfREFQCQkweDMKKworLyoKKyAqIFNHVEw1MDAwX0NISVBfQURDREFDX0NUUkwKKyAqLworI2RlZmluZSBTR1RMNTAwMF9WT0xfQlVTWV9EQUNfUklHSFQJCTB4MjAwMAorI2RlZmluZSBTR1RMNTAwMF9WT0xfQlVTWV9EQUNfTEVGVAkJMHgxMDAwCisjZGVmaW5lIFNHVEw1MDAwX0RBQ19WT0xfUkFNUF9FTgkJMHgwMjAwCisjZGVmaW5lIFNHVEw1MDAwX0RBQ19WT0xfUkFNUF9FWFBPCQkweDAxMDAKKyNkZWZpbmUgU0dUTDUwMDBfREFDX01VVEVfUklHSFQJCQkweDAwMDgKKyNkZWZpbmUgU0dUTDUwMDBfREFDX01VVEVfTEVGVAkJCTB4MDAwNAorI2RlZmluZSBTR1RMNTAwMF9BRENfSFBGX0ZSRUVaRQkJCTB4MDAwMgorI2RlZmluZSBTR1RMNTAwMF9BRENfSFBGX0JZUEFTUwkJCTB4MDAwMQorCisvKgorICogU0dUTDUwMDBfQ0hJUF9EQUNfVk9MCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfREFDX1ZPTF9SSUdIVF9NQVNLCQkweGZmMDAKKyNkZWZpbmUgU0dUTDUwMDBfREFDX1ZPTF9SSUdIVF9TSElGVAkJOAorI2RlZmluZSBTR1RMNTAwMF9EQUNfVk9MX1JJR0hUX1dJRFRICQk4CisjZGVmaW5lIFNHVEw1MDAwX0RBQ19WT0xfTEVGVF9NQVNLCQkweDAwZmYKKyNkZWZpbmUgU0dUTDUwMDBfREFDX1ZPTF9MRUZUX1NISUZUCQkwCisjZGVmaW5lIFNHVEw1MDAwX0RBQ19WT0xfTEVGVF9XSURUSAkJOAorCisvKgorICogU0dUTDUwMDBfQ0hJUF9QQURfU1RSRU5HVEgKKyAqLworI2RlZmluZSBTR1RMNTAwMF9QQURfSTJTX0xSQ0xLX01BU0sJCTB4MDMwMAorI2RlZmluZSBTR1RMNTAwMF9QQURfSTJTX0xSQ0xLX1NISUZUCQk4CisjZGVmaW5lIFNHVEw1MDAwX1BBRF9JMlNfTFJDTEtfV0lEVEgJCTIKKyNkZWZpbmUgU0dUTDUwMDBfUEFEX0kyU19TQ0xLX01BU0sJCTB4MDBjMAorI2RlZmluZSBTR1RMNTAwMF9QQURfSTJTX1NDTEtfU0hJRlQJCTYKKyNkZWZpbmUgU0dUTDUwMDBfUEFEX0kyU19TQ0xLX1dJRFRICQkyCisjZGVmaW5lIFNHVEw1MDAwX1BBRF9JMlNfRE9VVF9NQVNLCQkweDAwMzAKKyNkZWZpbmUgU0dUTDUwMDBfUEFEX0kyU19ET1VUX1NISUZUCQk0CisjZGVmaW5lIFNHVEw1MDAwX1BBRF9JMlNfRE9VVF9XSURUSAkJMgorI2RlZmluZSBTR1RMNTAwMF9QQURfSTJDX1NEQV9NQVNLCQkweDAwMGMKKyNkZWZpbmUgU0dUTDUwMDBfUEFEX0kyQ19TREFfU0hJRlQJCTIKKyNkZWZpbmUgU0dUTDUwMDBfUEFEX0kyQ19TREFfV0lEVEgJCTIKKyNkZWZpbmUgU0dUTDUwMDBfUEFEX0kyQ19TQ0xfTUFTSwkJMHgwMDAzCisjZGVmaW5lIFNHVEw1MDAwX1BBRF9JMkNfU0NMX1NISUZUCQkwCisjZGVmaW5lIFNHVEw1MDAwX1BBRF9JMkNfU0NMX1dJRFRICQkyCisKKy8qCisgKiBTR1RMNTAwMF9DSElQX0FOQV9BRENfQ1RSTAorICovCisjZGVmaW5lIFNHVEw1MDAwX0FEQ19WT0xfTTZEQgkJCTB4MDEwMAorI2RlZmluZSBTR1RMNTAwMF9BRENfVk9MX1JJR0hUX01BU0sJCTB4MDBmMAorI2RlZmluZSBTR1RMNTAwMF9BRENfVk9MX1JJR0hUX1NISUZUCQk0CisjZGVmaW5lIFNHVEw1MDAwX0FEQ19WT0xfUklHSFRfV0lEVEgJCTQKKyNkZWZpbmUgU0dUTDUwMDBfQURDX1ZPTF9MRUZUX01BU0sJCTB4MDAwZgorI2RlZmluZSBTR1RMNTAwMF9BRENfVk9MX0xFRlRfU0hJRlQJCTAKKyNkZWZpbmUgU0dUTDUwMDBfQURDX1ZPTF9MRUZUX1dJRFRICQk0CisKKy8qCisgKiBTR1RMNTAwMF9DSElQX0FOQV9IUF9DVFJMCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfSFBfVk9MX1JJR0hUX01BU0sJCTB4N2YwMAorI2RlZmluZSBTR1RMNTAwMF9IUF9WT0xfUklHSFRfU0hJRlQJCTgKKyNkZWZpbmUgU0dUTDUwMDBfSFBfVk9MX1JJR0hUX1dJRFRICQk3CisjZGVmaW5lIFNHVEw1MDAwX0hQX1ZPTF9MRUZUX01BU0sJCTB4MDA3ZgorI2RlZmluZSBTR1RMNTAwMF9IUF9WT0xfTEVGVF9TSElGVAkJMAorI2RlZmluZSBTR1RMNTAwMF9IUF9WT0xfTEVGVF9XSURUSAkJNworCisvKgorICogU0dUTDUwMDBfQ0hJUF9BTkFfQ1RSTAorICovCisjZGVmaW5lIFNHVEw1MDAwX0xJTkVfT1VUX01VVEUJCQkweDAxMDAKKyNkZWZpbmUgU0dUTDUwMDBfSFBfU0VMX01BU0sJCQkweDAwNDAKKyNkZWZpbmUgU0dUTDUwMDBfSFBfU0VMX1NISUZUCQkJNgorI2RlZmluZSBTR1RMNTAwMF9IUF9TRUxfV0lEVEgJCQkxCisjZGVmaW5lIFNHVEw1MDAwX0hQX1NFTF9EQUMJCQkweDAKKyNkZWZpbmUgU0dUTDUwMDBfSFBfU0VMX0xJTkVfSU4JCQkweDEKKyNkZWZpbmUgU0dUTDUwMDBfSFBfWkNEX0VOCQkJMHgwMDIwCisjZGVmaW5lIFNHVEw1MDAwX0hQX01VVEUJCQkweDAwMTAKKyNkZWZpbmUgU0dUTDUwMDBfQURDX1NFTF9NQVNLCQkJMHgwMDA0CisjZGVmaW5lIFNHVEw1MDAwX0FEQ19TRUxfU0hJRlQJCQkyCisjZGVmaW5lIFNHVEw1MDAwX0FEQ19TRUxfV0lEVEgJCQkxCisjZGVmaW5lIFNHVEw1MDAwX0FEQ19TRUxfTUlDCQkJMHgwCisjZGVmaW5lIFNHVEw1MDAwX0FEQ19TRUxfTElORV9JTgkJMHgxCisjZGVmaW5lIFNHVEw1MDAwX0FEQ19aQ0RfRU4JCQkweDAwMDIKKyNkZWZpbmUgU0dUTDUwMDBfQURDX01VVEUJCQkweDAwMDEKKworLyoKKyAqIFNHVEw1MDAwX0NISVBfTElOUkVHX0NUUkwKKyAqLworI2RlZmluZSBTR1RMNTAwMF9WRERDX01BTl9BU1NOX01BU0sJCTB4MDA0MAorI2RlZmluZSBTR1RMNTAwMF9WRERDX01BTl9BU1NOX1NISUZUCQk2CisjZGVmaW5lIFNHVEw1MDAwX1ZERENfTUFOX0FTU05fV0lEVEgJCTEKKyNkZWZpbmUgU0dUTDUwMDBfVkREQ19NQU5fQVNTTl9WRERBCQkweDAKKyNkZWZpbmUgU0dUTDUwMDBfVkREQ19NQU5fQVNTTl9WRERJTwkJMHgxCisjZGVmaW5lIFNHVEw1MDAwX1ZERENfQVNTTl9PVlJECQkJMHgwMDIwCisjZGVmaW5lIFNHVEw1MDAwX0xJTlJFR19WREREX01BU0sJCTB4MDAwZgorI2RlZmluZSBTR1RMNTAwMF9MSU5SRUdfVkRERF9TSElGVAkJMAorI2RlZmluZSBTR1RMNTAwMF9MSU5SRUdfVkRERF9XSURUSAkJNAorCisvKgorICogU0dUTDUwMDBfQ0hJUF9SRUZfQ1RSTAorICovCisjZGVmaW5lIFNHVEw1MDAwX0FOQV9HTkRfTUFTSwkJCTB4MDFmMAorI2RlZmluZSBTR1RMNTAwMF9BTkFfR05EX1NISUZUCQkJNAorI2RlZmluZSBTR1RMNTAwMF9BTkFfR05EX1dJRFRICQkJNQorI2RlZmluZSBTR1RMNTAwMF9BTkFfR05EX0JBU0UJCQk4MDAJLyogbXYgKi8KKyNkZWZpbmUgU0dUTDUwMDBfQU5BX0dORF9TVFAJCQkyNQkvKm12ICovCisjZGVmaW5lIFNHVEw1MDAwX0JJQVNfQ1RSTF9NQVNLCQkJMHgwMDBlCisjZGVmaW5lIFNHVEw1MDAwX0JJQVNfQ1RSTF9TSElGVAkJMQorI2RlZmluZSBTR1RMNTAwMF9CSUFTX0NUUkxfV0lEVEgJCTMKKyNkZWZpbmUgU0dUTDUwMDBfU01BTExfUE9QCQkJMHgwMDAxCisKKy8qCisgKiBTR1RMNTAwMF9DSElQX01JQ19DVFJMCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfQklBU19SX01BU0sJCQkweDAyMDAKKyNkZWZpbmUgU0dUTDUwMDBfQklBU19SX1NISUZUCQkJOAorI2RlZmluZSBTR1RMNTAwMF9CSUFTX1JfV0lEVEgJCQkyCisjZGVmaW5lIFNHVEw1MDAwX0JJQVNfUl9vZmYJCQkweDAKKyNkZWZpbmUgU0dUTDUwMDBfQklBU19SXzJLCQkJMHgxCisjZGVmaW5lIFNHVEw1MDAwX0JJQVNfUl80awkJCTB4MgorI2RlZmluZSBTR1RMNTAwMF9CSUFTX1JfOGsJCQkweDMKKyNkZWZpbmUgU0dUTDUwMDBfQklBU19WT0xUX01BU0sJCQkweDAwNzAKKyNkZWZpbmUgU0dUTDUwMDBfQklBU19WT0xUX1NISUZUCQk0CisjZGVmaW5lIFNHVEw1MDAwX0JJQVNfVk9MVF9XSURUSAkJMworI2RlZmluZSBTR1RMNTAwMF9NSUNfR0FJTl9NQVNLCQkJMHgwMDAzCisjZGVmaW5lIFNHVEw1MDAwX01JQ19HQUlOX1NISUZUCQkJMAorI2RlZmluZSBTR1RMNTAwMF9NSUNfR0FJTl9XSURUSAkJCTIKKworLyoKKyAqIFNHVEw1MDAwX0NISVBfTElORV9PVVRfQ1RSTAorICovCisjZGVmaW5lIFNHVEw1MDAwX0xJTkVfT1VUX0NVUlJFTlRfTUFTSwkJMHgwZjAwCisjZGVmaW5lIFNHVEw1MDAwX0xJTkVfT1VUX0NVUlJFTlRfU0hJRlQJCTgKKyNkZWZpbmUgU0dUTDUwMDBfTElORV9PVVRfQ1VSUkVOVF9XSURUSAkJNAorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UXzE4MHUJCTB4MAorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UXzI3MHUJCTB4MQorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UXzM2MHUJCTB4MworI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UXzQ1MHUJCTB4NworI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9DVVJSRU5UXzU0MHUJCTB4ZgorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9HTkRfTUFTSwkJMHgwMDNmCisjZGVmaW5lIFNHVEw1MDAwX0xJTkVfT1VUX0dORF9TSElGVAkJMAorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9HTkRfV0lEVEgJCTYKKyNkZWZpbmUgU0dUTDUwMDBfTElORV9PVVRfR05EX0JBU0UJCTgwMAkvKiBtdiAqLworI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9HTkRfU1RQCQkyNQorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9HTkRfTUFYCQkweDIzCisKKy8qCisgKiBTR1RMNTAwMF9DSElQX0xJTkVfT1VUX1ZPTAorICovCisjZGVmaW5lIFNHVEw1MDAwX0xJTkVfT1VUX1ZPTF9SSUdIVF9NQVNLCTB4MWYwMAorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9WT0xfUklHSFRfU0hJRlQJOAorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9WT0xfUklHSFRfV0lEVEgJNQorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9WT0xfTEVGVF9NQVNLCQkweDAwMWYKKyNkZWZpbmUgU0dUTDUwMDBfTElORV9PVVRfVk9MX0xFRlRfU0hJRlQJMAorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9WT0xfTEVGVF9XSURUSAk1CisKKy8qCisgKiBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUgorICovCisjZGVmaW5lIFNHVEw1MDAwX0RBQ19TVEVSRU8JCQkweDQwMDAKKyNkZWZpbmUgU0dUTDUwMDBfTElOUkVHX1NJTVBMRV9QT1dFUlVQCQkweDIwMDAKKyNkZWZpbmUgU0dUTDUwMDBfU1RBUlRVUF9QT1dFUlVQCQkweDEwMDAKKyNkZWZpbmUgU0dUTDUwMDBfVkREQ19DSFJHUE1QX1BPV0VSVVAJCTB4MDgwMAorI2RlZmluZSBTR1RMNTAwMF9QTExfUE9XRVJVUAkJCTB4MDQwMAorI2RlZmluZSBTR1RMNTAwMF9MSU5FUkVHX0RfUE9XRVJVUAkJMHgwMjAwCisjZGVmaW5lIFNHVEw1MDAwX1ZDT0FNUF9QT1dFUlVQCQkJMHgwMTAwCisjZGVmaW5lIFNHVEw1MDAwX1ZBR19QT1dFUlVQCQkJMHgwMDgwCisjZGVmaW5lIFNHVEw1MDAwX0FEQ19TVEVSRU8JCQkweDAwNDAKKyNkZWZpbmUgU0dUTDUwMDBfUkVGVE9QX1BPV0VSVVAJCQkweDAwMjAKKyNkZWZpbmUgU0dUTDUwMDBfSFBfUE9XRVJVUAkJCTB4MDAxMAorI2RlZmluZSBTR1RMNTAwMF9EQUNfUE9XRVJVUAkJCTB4MDAwOAorI2RlZmluZSBTR1RMNTAwMF9DQVBMRVNTX0hQX1BPV0VSVVAJCTB4MDAwNAorI2RlZmluZSBTR1RMNTAwMF9BRENfUE9XRVJVUAkJCTB4MDAwMgorI2RlZmluZSBTR1RMNTAwMF9MSU5FX09VVF9QT1dFUlVQCQkweDAwMDEKKworLyoKKyAqIFNHVEw1MDAwX0NISVBfUExMX0NUUkwKKyAqLworI2RlZmluZSBTR1RMNTAwMF9QTExfSU5UX0RJVl9NQVNLCQkweGY4MDAKKyNkZWZpbmUgU0dUTDUwMDBfUExMX0lOVF9ESVZfU0hJRlQJCTExCisjZGVmaW5lIFNHVEw1MDAwX1BMTF9JTlRfRElWX1dJRFRICQk1CisjZGVmaW5lIFNHVEw1MDAwX1BMTF9GUkFDX0RJVl9NQVNLCQkweDA3MDAKKyNkZWZpbmUgU0dUTDUwMDBfUExMX0ZSQUNfRElWX1NISUZUCQkwCisjZGVmaW5lIFNHVEw1MDAwX1BMTF9GUkFDX0RJVl9XSURUSAkJMTEKKworLyoKKyAqIFNHVEw1MDAwX0NISVBfQ0xLX1RPUF9DVFJMCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfSU5UX09TQ19FTgkJCTB4MDgwMAorI2RlZmluZSBTR1RMNTAwMF9JTlBVVF9GUkVRX0RJVjIJCTB4MDAwOAorCisvKgorICogU0dUTDUwMDBfQ0hJUF9BTkFfU1RBVFVTCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfSFBfTFJTSE9SVAkJCTB4MDIwMAorI2RlZmluZSBTR1RMNTAwMF9DQVBMRVNTX1NIT1JUCQkJMHgwMTAwCisjZGVmaW5lIFNHVEw1MDAwX1BMTF9MT0NLRUQJCQkweDAwMTAKKworLyoKKyAqIFNHVEw1MDAwX0NISVBfU0hPUlRfQ1RSTAorICovCisjZGVmaW5lIFNHVEw1MDAwX0xWTEFESlJfTUFTSwkJCTB4NzAwMAorI2RlZmluZSBTR1RMNTAwMF9MVkxBREpSX1NISUZUCQkJMTIKKyNkZWZpbmUgU0dUTDUwMDBfTFZMQURKUl9XSURUSAkJCTMKKyNkZWZpbmUgU0dUTDUwMDBfTFZMQURKTF9NQVNLCQkJMHgwNzAwCisjZGVmaW5lIFNHVEw1MDAwX0xWTEFESkxfU0hJRlQJCQk4CisjZGVmaW5lIFNHVEw1MDAwX0xWTEFESkxfV0lEVEgJCQkzCisjZGVmaW5lIFNHVEw1MDAwX0xWTEFESkNfTUFTSwkJCTB4MDA3MAorI2RlZmluZSBTR1RMNTAwMF9MVkxBREpDX1NISUZUCQkJNAorI2RlZmluZSBTR1RMNTAwMF9MVkxBREpDX1dJRFRICQkJMworI2RlZmluZSBTR1RMNTAwMF9MUl9TSE9SVF9NT0RfTUFTSwkJMHgwMDBjCisjZGVmaW5lIFNHVEw1MDAwX0xSX1NIT1JUX01PRF9TSElGVAkJMgorI2RlZmluZSBTR1RMNTAwMF9MUl9TSE9SVF9NT0RfV0lEVEgJCTIKKyNkZWZpbmUgU0dUTDUwMDBfQ01fU0hPUlRfTU9EX01BU0sJCTB4MDAwMworI2RlZmluZSBTR1RMNTAwMF9DTV9TSE9SVF9NT0RfU0hJRlQJCTAKKyNkZWZpbmUgU0dUTDUwMDBfQ01fU0hPUlRfTU9EX1dJRFRICQkyCisKKy8qCisgKlNHVEw1MDAwX0NISVBfQU5BX1RFU1QyCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfTU9OT19EQUMJCQkweDEwMDAKKworLyoKKyAqIFNHVEw1MDAwX0RBUF9DVFJMCisgKi8KKyNkZWZpbmUgU0dUTDUwMDBfREFQX01JWF9FTgkJCTB4MDAxMAorI2RlZmluZSBTR1RMNTAwMF9EQVBfRU4JCQkJMHgwMDAxCisKKyNkZWZpbmUgU0dUTDUwMDBfU1lTQ0xLCQkJCTB4MDAKKyNkZWZpbmUgU0dUTDUwMDBfTFJDTEsJCQkJMHgwMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5jIGIvc291bmQvc29jL2NvZGVjcy9zbjk1MDMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzMGVhZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5jCkBAIC0wLDAgKzEsOTQ5IEBACisvKgorICogIHNuOTUwMzEuYyAtICBUSSBzbjk1MDMxIENvZGVjIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycAorICogIEF1dGhvcjogVmlub2QgS291bCA8dmlub2Qua291bEBpbnRlbC5jb20+CisgKiAgQXV0aG9yOiBIYXJzaGEgUHJpeWEgPHByaXlhLmhhcnNoYUBpbnRlbC5jb20+CisgKiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICoKKyAqLworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFzbS9pbnRlbF9zY3VfaXBjLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlICJzbjk1MDMxLmgiCisKKyNkZWZpbmUgU045NTAzMV9SQVRFUyAoU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCkKKyNkZWZpbmUgU045NTAzMV9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKQorCisvKiBhZGMgaGVscGVyIGZ1bmN0aW9ucyAqLworCisvKiBlbmFibGVzIG1pYyBiaWFzIHZvbHRhZ2UgKi8KK3N0YXRpYyB2b2lkIHNuOTUwMzFfZW5hYmxlX21pY19iaWFzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX1ZBVUQsIEJJVCgyKXxCSVQoMSl8QklUKDApKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTTjk1MDMxX01JQ0JJQVMsIEJJVCgyKSwgQklUKDIpKTsKK30KKworLyogRW5hYmxlL0Rpc2FibGUgdGhlIEFEQyBkZXBlbmRpbmcgb24gdGhlIGFyZ3VtZW50ICovCitzdGF0aWMgdm9pZCBjb25maWd1cmVfYWRjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpzbjk1MDMxX2NvZGVjLCBpbnQgdmFsKQoreworCWludCB2YWx1ZSA9IHNuZF9zb2NfcmVhZChzbjk1MDMxX2NvZGVjLCBTTjk1MDMxX0FEQzFDTlRMMSk7CisKKwlpZiAodmFsKSB7CisJCS8qIEVuYWJsZSBhbmQgc3RhcnQgdGhlIEFEQyAqLworCQl2YWx1ZSB8PSAoU045NTAzMV9BRENfRU5CTCB8IFNOOTUwMzFfQURDX1NUQVJUKTsKKwkJdmFsdWUgJj0gKH5TTjk1MDMxX0FEQ19OT19MT09QKTsKKwl9IGVsc2UgeworCQkvKiBKdXN0IHN0b3AgdGhlIEFEQyAqLworCQl2YWx1ZSAmPSAoflNOOTUwMzFfQURDX1NUQVJUKTsKKwl9CisJc25kX3NvY193cml0ZShzbjk1MDMxX2NvZGVjLCBTTjk1MDMxX0FEQzFDTlRMMSwgdmFsdWUpOworfQorCisvKgorICogZmluZHMgYW4gZW1wdHkgY2hhbm5lbCBmb3IgY29udmVyc2lvbgorICogSWYgdGhlIEFEQyBpcyBub3QgZW5hYmxlZCB0aGVuIHN0YXJ0IHVzaW5nIDB0aCBjaGFubmVsCisgKiBpdHNlbGYuIE90aGVyd2lzZSBmaW5kIGFuIGVtcHR5IGNoYW5uZWwgYnkgbG9va2luZyBmb3IgYQorICogY2hhbm5lbCBpbiB3aGljaCB0aGUgc3RvcGJpdCBpcyBzZXQgdG8gMS4gcmV0dXJucyB0aGUgaW5kZXgKKyAqIG9mIHRoZSBmaXJzdCBmcmVlIGNoYW5uZWwgaWYgc3VjY2VlZHMgb3IgYW4gZXJyb3IgY29kZS4KKyAqCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKKyAqCisgKi8KK3N0YXRpYyBpbnQgZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKnNuOTUwMzFfY29kZWMpCit7CisJaW50IHJldCA9IDAsIGksIHZhbHVlOworCisJLyogY2hlY2sgd2hldGhlciBBREMgaXMgZW5hYmxlZCAqLworCXZhbHVlID0gc25kX3NvY19yZWFkKHNuOTUwMzFfY29kZWMsIFNOOTUwMzFfQURDMUNOVEwxKTsKKworCWlmICgodmFsdWUgJiBTTjk1MDMxX0FEQ19FTkJMKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIEFEQyBpcyBhbHJlYWR5IGVuYWJsZWQ7IExvb2tpbmcgZm9yIGFuIGVtcHR5IGNoYW5uZWwgKi8KKwlmb3IgKGkgPSAwOyBpIDwJU045NTAzMV9BRENfQ0hBTkxTX01BWDsgaSsrKSB7CisJCXZhbHVlID0gc25kX3NvY19yZWFkKHNuOTUwMzFfY29kZWMsCisJCQkJU045NTAzMV9BRENfQ0hOTF9TVEFSVF9BRERSICsgaSk7CisJCWlmICh2YWx1ZSAmIFNOOTUwMzFfU1RPUEJJVF9NQVNLKSB7CisJCQlyZXQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIChyZXQgPiBTTjk1MDMxX0FEQ19MT09QX01BWCkgPyAoLUVJTlZBTCkgOiByZXQ7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIEFEQyBmb3IgcmVhZGluZyBtaWNiaWFzIHZhbHVlcy4gQ2FuIHNsZWVwLiAqLworc3RhdGljIGludCBzbjk1MDMxX2luaXRpYWxpemVfYWRjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpzbjk1MDMxX2NvZGVjKQoreworCWludCBiYXNlX2FkZHIsIGNobmxfYWRkcjsKKwlpbnQgdmFsdWU7CisJc3RhdGljIGludCBjaGFubmVsX2luZGV4OworCisJLyogSW5kZXggb2YgdGhlIGZpcnN0IGNoYW5uZWwgaW4gd2hpY2ggdGhlIHN0b3AgYml0IGlzIHNldCAqLworCWNoYW5uZWxfaW5kZXggPSBmaW5kX2ZyZWVfY2hhbm5lbChzbjk1MDMxX2NvZGVjKTsKKwlpZiAoY2hhbm5lbF9pbmRleCA8IDApIHsKKwkJcHJfZXJyKCJObyBmcmVlIEFEQyBjaGFubmVscyIpOworCQlyZXR1cm4gY2hhbm5lbF9pbmRleDsKKwl9CisKKwliYXNlX2FkZHIgPSBTTjk1MDMxX0FEQ19DSE5MX1NUQVJUX0FERFIgKyBjaGFubmVsX2luZGV4OworCisJaWYgKCEoY2hhbm5lbF9pbmRleCA9PSAwIHx8IGNoYW5uZWxfaW5kZXggPT0gIFNOOTUwMzFfQURDX0xPT1BfTUFYKSkgeworCQkvKiBSZXNldCBzdG9wIGJpdCBmb3IgY2hhbm5lbHMgb3RoZXIgdGhhbiAwIGFuZCAxMiAqLworCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChzbjk1MDMxX2NvZGVjLCBiYXNlX2FkZHIpOworCQkvKiBTZXQgdGhlIHN0b3AgYml0IHRvIHplcm8gKi8KKwkJc25kX3NvY193cml0ZShzbjk1MDMxX2NvZGVjLCBiYXNlX2FkZHIsIHZhbHVlICYgMHhFRik7CisJCS8qIEluZGV4IG9mIHRoZSBmaXJzdCBmcmVlIGNoYW5uZWwgKi8KKwkJYmFzZV9hZGRyKys7CisJCWNoYW5uZWxfaW5kZXgrKzsKKwl9CisKKwkvKiBTaW5jZSB0aGlzIGlzIHRoZSBsYXN0IGNoYW5uZWwsIHNldCB0aGUgc3RvcCBiaXQKKwkgICB0byAxIGJ5IE9SaW5nIHRoZSBESUVfU0VOU09SX0NPREUgd2l0aCAweDEwICovCisJc25kX3NvY193cml0ZShzbjk1MDMxX2NvZGVjLCBiYXNlX2FkZHIsCisJCQkJU045NTAzMV9BVURJT19ERVRFQ1RfQ09ERSB8IDB4MTApOworCisJY2hubF9hZGRyID0gU045NTAzMV9BRENfREFUQV9TVEFSVF9BRERSICsgMiAqIGNoYW5uZWxfaW5kZXg7CisJcHJfZGVidWcoIm1pZF9pbml0aWFsaXplIDogJXgiLCBjaG5sX2FkZHIpOworCWNvbmZpZ3VyZV9hZGMoc245NTAzMV9jb2RlYywgMSk7CisJcmV0dXJuIGNobmxfYWRkcjsKK30KKworCisvKiByZWFkcyB0aGUgQURDIHJlZ2lzdGVycyBhbmQgZ2V0cyB0aGUgbWljIGJpYXMgdmFsdWUgaW4gbVYuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNuOTUwMzFfZ2V0X21pY19iaWFzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1MTYgYWRjX2FkciA9IHNuOTUwMzFfaW5pdGlhbGl6ZV9hZGMoY29kZWMpOworCXUxNiBhZGNfdmFsMSwgYWRjX3ZhbDI7CisJdW5zaWduZWQgaW50IG1pY19iaWFzOworCisJc245NTAzMV9lbmFibGVfbWljX2JpYXMoY29kZWMpOworCisJLyogRW5hYmxlIHRoZSBzb3VuZCBjYXJkIGZvciBjb252ZXJzaW9uIGJlZm9yZSByZWFkaW5nICovCisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9BREMxQ05UTDMsIDB4MDUpOworCS8qIFJlLXRvZ2dsZSB0aGUgUlJEQVRBUkQgYml0ICovCisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9BREMxQ05UTDMsIDB4MDQpOworCisJLyogUmVhZCB0aGUgaGlnaGVyIGJpdHMgb2YgZGF0YSAqLworCW1zbGVlcCgxMDAwKTsKKwlhZGNfdmFsMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgYWRjX2Fkcik7CisJYWRjX2FkcisrOworCWFkY192YWwyID0gc25kX3NvY19yZWFkKGNvZGVjLCBhZGNfYWRyKTsKKworCS8qIEFkZGluZyBsb3dlciB0d28gYml0cyB0byB0aGUgaGlnaGVyIGJpdHMgKi8KKwltaWNfYmlhcyA9IChhZGNfdmFsMSA8PCAyKSArIChhZGNfdmFsMiAmIDMpOworCW1pY19iaWFzID0gKG1pY19iaWFzICogU045NTAzMV9BRENfT05FX0xTQl9NVUxUSVBMSUVSKSAvIDEwMDA7CisJcHJfZGVidWcoIm1pYyBiaWFzID0gJWRtVlxuIiwgbWljX2JpYXMpOworCXJldHVybiBtaWNfYmlhczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuOTUwMzFfZ2V0X21pY19iaWFzKTsKKy8qZW5kIC0gYWRjIGhlbHBlciBmdW5jdGlvbnMgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc245NTAzMV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCXVuc2lnbmVkIGludCByZWcpCit7CisJdTggdmFsdWUgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBpbnRlbF9zY3VfaXBjX2lvcmVhZDgocmVnLCAmdmFsdWUpOworCWlmIChyZXQpCisJCXByX2VycigicmVhZCBvZiAleCBmYWlsZWQsIGVyciAlZFxuIiwgcmVnLCByZXQpOworCXJldHVybiB2YWx1ZTsKKworfQorCitzdGF0aWMgaW5saW5lIGludCBzbjk1MDMxX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfc2N1X2lwY19pb3dyaXRlOChyZWcsIHZhbHVlKTsKKwlpZiAocmV0KQorCQlwcl9lcnIoIndyaXRlIG9mICV4IGZhaWxlZCwgZXJyICVkXG4iLCByZWcsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbjk1MDMxX3NldF92YXVkX2JpYXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkpIHsKKwkJCXByX2RlYnVnKCJ2YXVkX2JpYXMgcG93ZXJpbmcgdXAgcGxsXG4iKTsKKwkJCS8qIHBvd2VyIHVwIHRoZSBwbGwgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfQVVEUExMQ1RSTCwgQklUKDUpKTsKKwkJCS8qIGVuYWJsZSBwY20gMiAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU045NTAzMV9QQ00yQzIsCisJCQkJCUJJVCgwKSwgQklUKDApKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXByX2RlYnVnKCJ2YXVkX2JpYXMgcG93ZXIgdXAgcmFpbFxuIik7CisJCQkvKiBwb3dlciB1cCB0aGUgcmFpbCAqLworCQkJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9WQVVELAorCQkJCQlCSVQoMil8QklUKDEpfEJJVCgwKSk7CisJCQltc2xlZXAoMSk7CisJCX0gZWxzZSBpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfUFJFUEFSRSkgeworCQkJLyogdHVybiBvZmYgcGNtICovCisJCQlwcl9kZWJ1ZygidmF1ZF9iaWFzIHBvd2VyIGRuIHBjbVxuIik7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTTjk1MDMxX1BDTTJDMiwgQklUKDApLCAwKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfQVVEUExMQ1RSTCwgMCk7CisJCX0KKwkJYnJlYWs7CisKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJcHJfZGVidWcoInZhdWRfYmlhcyBfT0ZGIGRvaW5nIHJhaWwgc2h1dGRvd25cbiIpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX1ZBVUQsIEJJVCgzKSk7CisJCWJyZWFrOworCX0KKworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbjk1MDMxX3Zoc19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpIHsKKwkJcHJfZGVidWcoIlZIUyBTTkRfU09DX0RBUE1fRVZFTlRfT04gZG9pbmcgcmFpbCBzdGFydHVwIG5vd1xuIik7CisJCS8qIHBvd2VyIHVwIHRoZSByYWlsICovCisJCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIFNOOTUwMzFfVkhTUCwgMHgzRCk7CisJCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIFNOOTUwMzFfVkhTTiwgMHgzRik7CisJCW1zbGVlcCgxKTsKKwl9IGVsc2UgaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PRkYoZXZlbnQpKSB7CisJCXByX2RlYnVnKCJWSFMgU05EX1NPQ19EQVBNX0VWRU5UX09GRiBkb2luZyByYWlsIHNodXRkb3duXG4iKTsKKwkJc25kX3NvY193cml0ZSh3LT5jb2RlYywgU045NTAzMV9WSFNQLCAweEM0KTsKKwkJc25kX3NvY193cml0ZSh3LT5jb2RlYywgU045NTAzMV9WSFNOLCAweDA0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc245NTAzMV92aWhmX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSkgeworCQlwcl9kZWJ1ZygiVklIRiBTTkRfU09DX0RBUE1fRVZFTlRfT04gZG9pbmcgcmFpbCBzdGFydHVwIG5vd1xuIik7CisJCS8qIHBvd2VyIHVwIHRoZSByYWlsICovCisJCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIFNOOTUwMzFfVklIRiwgMHgyNyk7CisJCW1zbGVlcCgxKTsKKwl9IGVsc2UgaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PRkYoZXZlbnQpKSB7CisJCXByX2RlYnVnKCJWSUhGIFNORF9TT0NfREFQTV9FVkVOVF9PRkYgZG9pbmcgcmFpbCBzaHV0ZG93blxuIik7CisJCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIFNOOTUwMzFfVklIRiwgMHgyNCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuOTUwMzFfZG1pYzEyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQoreworCXVuc2lnbmVkIGludCBsZG8gPSAwLCBjbGtfZGlyID0gMCwgZGF0YV9kaXIgPSAwOworCisJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpIHsKKwkJbGRvID0gQklUKDUpfEJJVCg0KTsKKwkJY2xrX2RpciA9IEJJVCgwKTsKKwkJZGF0YV9kaXIgPSBCSVQoNyk7CisJfQorCS8qIHByb2dyYW0gRE1JQyBMRE8sIGNsb2NrIGFuZCBzZXQgY2xvY2sgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKHctPmNvZGVjLCBTTjk1MDMxX01JQ0JJQVMsIEJJVCg1KXxCSVQoNCksIGxkbyk7CisJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU045NTAzMV9ETUlDQlVGMDEyMywgQklUKDApLCBjbGtfZGlyKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKHctPmNvZGVjLCBTTjk1MDMxX0RNSUNCVUYwMTIzLCBCSVQoNyksIGRhdGFfZGlyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbjk1MDMxX2RtaWMzNF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKK3sKKwl1bnNpZ25lZCBpbnQgbGRvID0gMCwgY2xrX2RpciA9IDAsIGRhdGFfZGlyID0gMDsKKworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7CisJCWxkbyA9IEJJVCg1KXxCSVQoNCk7CisJCWNsa19kaXIgPSBCSVQoMik7CisJCWRhdGFfZGlyID0gQklUKDEpOworCX0KKwkvKiBwcm9ncmFtIERNSUMgTERPLCBjbG9jayBhbmQgc2V0IGNsb2NrICovCisJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU045NTAzMV9NSUNCSUFTLCBCSVQoNSl8QklUKDQpLCBsZG8pOworCXNuZF9zb2NfdXBkYXRlX2JpdHMody0+Y29kZWMsIFNOOTUwMzFfRE1JQ0JVRjAxMjMsIEJJVCgyKSwgY2xrX2Rpcik7CisJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU045NTAzMV9ETUlDQlVGNDUsIEJJVCgxKSwgZGF0YV9kaXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuOTUwMzFfZG1pYzU2X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQoreworCXVuc2lnbmVkIGludCBsZG8gPSAwOworCisJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpCisJCWxkbyA9IEJJVCg3KXxCSVQoNik7CisKKwkvKiBwcm9ncmFtIERNSUMgTERPICovCisJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU045NTAzMV9NSUNCSUFTLCBCSVQoNyl8QklUKDYpLCBsZG8pOworCXJldHVybiAwOworfQorCisvKiBtdXggY29udHJvbHMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpzbjk1MDMxX21pY190ZXh0c1tdID0geyAiQU1JQyIsICJMaW5lSW4iIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc245NTAzMV9taWNsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShTTjk1MDMxX0FEQ0NPTkZJRywgMSwgMiwgc245NTAzMV9taWNfdGV4dHMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc245NTAzMV9taWNsX211eF9jb250cm9sID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHNuOTUwMzFfbWljbF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzbjk1MDMxX21pY3JfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFNOOTUwMzFfQURDQ09ORklHLCAzLCAyLCBzbjk1MDMxX21pY190ZXh0cyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbjk1MDMxX21pY3JfbXV4X2NvbnRyb2wgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgc245NTAzMV9taWNyX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqc245NTAzMV9pbnB1dF90ZXh0c1tdID0gewkiRE1JQzEiLCAiRE1JQzIiLCAiRE1JQzMiLAorCQkJCQkJIkRNSUM0IiwgIkRNSUM1IiwgIkRNSUM2IiwKKwkJCQkJCSJBREMgTGVmdCIsICJBREMgUmlnaHQiIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc245NTAzMV9pbnB1dDFfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFNOOTUwMzFfQVVESU9NVVgxMiwgMCwgOCwgc245NTAzMV9pbnB1dF90ZXh0cyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbjk1MDMxX2lucHV0MV9tdXhfY29udHJvbCA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCBzbjk1MDMxX2lucHV0MV9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzbjk1MDMxX2lucHV0Ml9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoU045NTAzMV9BVURJT01VWDEyLCA0LCA4LCBzbjk1MDMxX2lucHV0X3RleHRzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuOTUwMzFfaW5wdXQyX211eF9jb250cm9sID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHNuOTUwMzFfaW5wdXQyX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNuOTUwMzFfaW5wdXQzX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShTTjk1MDMxX0FVRElPTVVYMzQsIDAsIDgsIHNuOTUwMzFfaW5wdXRfdGV4dHMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc245NTAzMV9pbnB1dDNfbXV4X2NvbnRyb2wgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgc245NTAzMV9pbnB1dDNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc245NTAzMV9pbnB1dDRfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFNOOTUwMzFfQVVESU9NVVgzNCwgNCwgOCwgc245NTAzMV9pbnB1dF90ZXh0cyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbjk1MDMxX2lucHV0NF9tdXhfY29udHJvbCA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCBzbjk1MDMxX2lucHV0NF9lbnVtKTsKKworLyogY2FwdHVyZSBwYXRoIGNvbnRyb2xzICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpzbjk1MDMxX21pY21vZGVfdGV4dFtdID0geyJTaW5nbGUgRW5kZWQiLCAiRGlmZmVyZW50aWFsIn07CisKKy8qIDBkQiB0byAzMGRCIGluIDEwZEIgc3RlcHMgKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtaWNfdGx2LCAwLCAxMCwgMCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc245NTAzMV9taWNtb2RlMV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoU045NTAzMV9NSUNBTVAxLCAxLCAyLCBzbjk1MDMxX21pY21vZGVfdGV4dCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNuOTUwMzFfbWljbW9kZTJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFNOOTUwMzFfTUlDQU1QMiwgMSwgMiwgc245NTAzMV9taWNtb2RlX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqc245NTAzMV9kbWljX2NmZ190ZXh0W10gPSB7IkdQTyIsICJETUlDIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc245NTAzMV9kbWljMTJfY2ZnX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShTTjk1MDMxX0RNSUNNVVgsIDAsIDIsIHNuOTUwMzFfZG1pY19jZmdfdGV4dCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNuOTUwMzFfZG1pYzM0X2NmZ19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoU045NTAzMV9ETUlDTVVYLCAxLCAyLCBzbjk1MDMxX2RtaWNfY2ZnX3RleHQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzbjk1MDMxX2RtaWM1Nl9jZmdfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFNOOTUwMzFfRE1JQ01VWCwgMiwgMiwgc245NTAzMV9kbWljX2NmZ190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuOTUwMzFfc25kX2NvbnRyb2xzW10gPSB7CisJU09DX0VOVU0oIk1pYzFNb2RlIENhcHR1cmUgUm91dGUiLCBzbjk1MDMxX21pY21vZGUxX2VudW0pLAorCVNPQ19FTlVNKCJNaWMyTW9kZSBDYXB0dXJlIFJvdXRlIiwgc245NTAzMV9taWNtb2RlMl9lbnVtKSwKKwlTT0NfRU5VTSgiRE1JQzEyIENhcHR1cmUgUm91dGUiLCBzbjk1MDMxX2RtaWMxMl9jZmdfZW51bSksCisJU09DX0VOVU0oIkRNSUMzNCBDYXB0dXJlIFJvdXRlIiwgc245NTAzMV9kbWljMzRfY2ZnX2VudW0pLAorCVNPQ19FTlVNKCJETUlDNTYgQ2FwdHVyZSBSb3V0ZSIsIHNuOTUwMzFfZG1pYzU2X2NmZ19lbnVtKSwKKwlTT0NfU0lOR0xFX1RMVigiTWljMSBDYXB0dXJlIFZvbHVtZSIsIFNOOTUwMzFfTUlDQU1QMSwKKwkJCTIsIDQsIDAsIG1pY190bHYpLAorCVNPQ19TSU5HTEVfVExWKCJNaWMyIENhcHR1cmUgVm9sdW1lIiwgU045NTAzMV9NSUNBTVAyLAorCQkJMiwgNCwgMCwgbWljX3RsdiksCit9OworCisvKiBEQVBNIHdpZGdldHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBzbjk1MDMxX2RhcG1fd2lkZ2V0c1tdID0geworCisJLyogYWxsIGVuZCBwb2ludHMgbWljLCBocyBldGMgKi8KKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVEwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVFIiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJFUE9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIklIRk9VVEwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJJSEZPVVRSIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTElORU9VVEwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMSU5FT1VUUiIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlZJQjFPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJWSUIyT1VUIiksCisKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFNSUMxIiksIC8qIGhlYWRzZXQgbWljICovCisJU05EX1NPQ19EQVBNX0lOUFVUKCJBTUlDMiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzEiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUMyIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMyIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzQiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUM1IiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDNiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTElORUlOTCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTElORUlOUiIpLAorCisJU05EX1NPQ19EQVBNX01JQ0JJQVMoIkFNSUMxQmlhcyIsIFNOOTUwMzFfTUlDQklBUywgMiwgMCksCisJU05EX1NPQ19EQVBNX01JQ0JJQVMoIkFNSUMyQmlhcyIsIFNOOTUwMzFfTUlDQklBUywgMywgMCksCisJU05EX1NPQ19EQVBNX01JQ0JJQVMoIkRNSUMxMkJpYXMiLCBTTjk1MDMxX0RNSUNNVVgsIDMsIDApLAorCVNORF9TT0NfREFQTV9NSUNCSUFTKCJETUlDMzRCaWFzIiwgU045NTAzMV9ETUlDTVVYLCA0LCAwKSwKKwlTTkRfU09DX0RBUE1fTUlDQklBUygiRE1JQzU2QmlhcyIsIFNOOTUwMzFfRE1JQ01VWCwgNSwgMCksCisKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJETUlDMTJzdXBwbHkiLCBTTjk1MDMxX0RNSUNMSywgMCwgMCwKKwkJCQlzbjk1MDMxX2RtaWMxMl9ldmVudCwKKwkJCQlTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiRE1JQzM0c3VwcGx5IiwgU045NTAzMV9ETUlDTEssIDEsIDAsCisJCQkJc245NTAzMV9kbWljMzRfZXZlbnQsCisJCQkJU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkRNSUM1NnN1cHBseSIsIFNOOTUwMzFfRE1JQ0xLLCAyLCAwLAorCQkJCXNuOTUwMzFfZG1pYzU2X2V2ZW50LAorCQkJCVNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworCVNORF9TT0NfREFQTV9BSUZfT1VUKCJQQ01fT3V0IiwgIkNhcHR1cmUiLCAwLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwKSwKKworCVNORF9TT0NfREFQTV9TVVBQTFkoIkhlYWRzZXQgUmFpbCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCXNuOTUwMzFfdmhzX2V2ZW50LAorCQkJU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIlNwZWFrZXIgUmFpbCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCXNuOTUwMzFfdmloZl9ldmVudCwKKwkJCVNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworCS8qIHBsYXliYWNrIHBhdGggZHJpdmVyIGVuYWJsZXMgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJIZWFkc2V0IExlZnQgUGxheWJhY2siLAorCQkJU045NTAzMV9EUklWRVJFTiwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSGVhZHNldCBSaWdodCBQbGF5YmFjayIsCisJCQlTTjk1MDMxX0RSSVZFUkVOLCAxLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJTcGVha2VyIExlZnQgUGxheWJhY2siLAorCQkJU045NTAzMV9EUklWRVJFTiwgMiwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiU3BlYWtlciBSaWdodCBQbGF5YmFjayIsCisJCQlTTjk1MDMxX0RSSVZFUkVOLCAzLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJWaWJyYTEgUGxheWJhY2siLAorCQkJU045NTAzMV9EUklWRVJFTiwgNCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiVmlicmEyIFBsYXliYWNrIiwKKwkJCVNOOTUwMzFfRFJJVkVSRU4sIDUsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkVhcnBpZWNlIFBsYXliYWNrIiwKKwkJCVNOOTUwMzFfRFJJVkVSRU4sIDYsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkxpbmVvdXQgTGVmdCBQbGF5YmFjayIsCisJCQlTTjk1MDMxX0xPQ1RMLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJMaW5lb3V0IFJpZ2h0IFBsYXliYWNrIiwKKwkJCVNOOTUwMzFfTE9DVEwsIDQsIDAsIE5VTEwsIDApLAorCisJLyogcGxheWJhY2sgcGF0aCBmaWx0ZXIgZW5hYmxlICovCisJU05EX1NPQ19EQVBNX1BHQSgiSGVhZHNldCBMZWZ0IEZpbHRlciIsCisJCQlTTjk1MDMxX0hTRVBSWENUUkwsIDQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkhlYWRzZXQgUmlnaHQgRmlsdGVyIiwKKwkJCVNOOTUwMzFfSFNFUFJYQ1RSTCwgNSwgMCwgIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlNwZWFrZXIgTGVmdCBGaWx0ZXIiLAorCQkJU045NTAzMV9JSEZSWENUUkwsIDAsIDAsICBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJTcGVha2VyIFJpZ2h0IEZpbHRlciIsCisJCQlTTjk1MDMxX0lIRlJYQ1RSTCwgMSwgMCwgIE5VTEwsIDApLAorCisJLyogREFDcyAqLworCVNORF9TT0NfREFQTV9EQUMoIkhTREFDIExlZnQiLCAiSGVhZHNldCIsCisJCQlTTjk1MDMxX0RBQ0NPTkZJRywgMCwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiSFNEQUMgUmlnaHQiLCAiSGVhZHNldCIsCisJCQlTTjk1MDMxX0RBQ0NPTkZJRywgMSwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiSUhGREFDIExlZnQiLCAiU3BlYWtlciIsCisJCQlTTjk1MDMxX0RBQ0NPTkZJRywgMiwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiSUhGREFDIFJpZ2h0IiwgIlNwZWFrZXIiLAorCQkJU045NTAzMV9EQUNDT05GSUcsIDMsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIlZpYnJhMSBEQUMiLCAiVmlicmExIiwKKwkJCVNOOTUwMzFfVklCMUM1LCAxLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJWaWJyYTIgREFDIiwgIlZpYnJhMiIsCisJCQlTTjk1MDMxX1ZJQjJDNSwgMSwgMCksCisKKwkvKiBjYXB0dXJlIHdpZGdldHMgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJMaW5lSW4gRW5hYmxlIExlZnQiLCBTTjk1MDMxX01JQ0FNUDEsCisJCQkJNywgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTGluZUluIEVuYWJsZSBSaWdodCIsIFNOOTUwMzFfTUlDQU1QMiwKKwkJCQk3LCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9QR0EoIk1JQzEgRW5hYmxlIiwgU045NTAzMV9NSUNBTVAxLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJNSUMyIEVuYWJsZSIsIFNOOTUwMzFfTUlDQU1QMiwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiVFgxIEVuYWJsZSIsIFNOOTUwMzFfQVVESU9UWEVOLCAyLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJUWDIgRW5hYmxlIiwgU045NTAzMV9BVURJT1RYRU4sIDMsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlRYMyBFbmFibGUiLCBTTjk1MDMxX0FVRElPVFhFTiwgNCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiVFg0IEVuYWJsZSIsIFNOOTUwMzFfQVVESU9UWEVOLCA1LCAwLCBOVUxMLCAwKSwKKworCS8qIEFEQyBoYXZlIG51bGwgc3RyZWFtIGFzIHRoZXkgd2lsbCBiZSB0dXJuZWQgT04gYnkgVFggcGF0aCAqLworCVNORF9TT0NfREFQTV9BREMoIkFEQyBMZWZ0IiwgTlVMTCwKKwkJCVNOOTUwMzFfQURDQ09ORklHLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJBREMgUmlnaHQiLCBOVUxMLAorCQkJU045NTAzMV9BRENDT05GSUcsIDIsIDApLAorCisJU05EX1NPQ19EQVBNX01VWCgiTWljX0lucHV0TCBDYXB0dXJlIFJvdXRlIiwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJnNuOTUwMzFfbWljbF9tdXhfY29udHJvbCksCisJU05EX1NPQ19EQVBNX01VWCgiTWljX0lucHV0UiBDYXB0dXJlIFJvdXRlIiwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJnNuOTUwMzFfbWljcl9tdXhfY29udHJvbCksCisKKwlTTkRfU09DX0RBUE1fTVVYKCJUeHBhdGgxIENhcHR1cmUgUm91dGUiLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwLCAmc245NTAzMV9pbnB1dDFfbXV4X2NvbnRyb2wpLAorCVNORF9TT0NfREFQTV9NVVgoIlR4cGF0aDIgQ2FwdHVyZSBSb3V0ZSIsCisJCQlTTkRfU09DX05PUE0sIDAsIDAsICZzbjk1MDMxX2lucHV0Ml9tdXhfY29udHJvbCksCisJU05EX1NPQ19EQVBNX01VWCgiVHhwYXRoMyBDYXB0dXJlIFJvdXRlIiwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJnNuOTUwMzFfaW5wdXQzX211eF9jb250cm9sKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJUeHBhdGg0IENhcHR1cmUgUm91dGUiLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwLCAmc245NTAzMV9pbnB1dDRfbXV4X2NvbnRyb2wpLAorCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBzbjk1MDMxX2F1ZGlvX21hcFtdID0geworCS8qIGhlYWRzZXQgYW5kIGVhcnBpZWNlIG1hcCAqLworCXsgIkhQT1VUTCIsIE5VTEwsICJIZWFkc2V0IFJhaWwifSwKKwl7ICJIUE9VVFIiLCBOVUxMLCAiSGVhZHNldCBSYWlsIn0sCisJeyAiSFBPVVRMIiwgTlVMTCwgIkhlYWRzZXQgTGVmdCBQbGF5YmFjayIgfSwKKwl7ICJIUE9VVFIiLCBOVUxMLCAiSGVhZHNldCBSaWdodCBQbGF5YmFjayIgfSwKKwl7ICJFUE9VVCIsIE5VTEwsICJFYXJwaWVjZSBQbGF5YmFjayIgfSwKKwl7ICJIZWFkc2V0IExlZnQgUGxheWJhY2siLCBOVUxMLCAiSGVhZHNldCBMZWZ0IEZpbHRlciJ9LAorCXsgIkhlYWRzZXQgUmlnaHQgUGxheWJhY2siLCBOVUxMLCAiSGVhZHNldCBSaWdodCBGaWx0ZXIifSwKKwl7ICJFYXJwaWVjZSBQbGF5YmFjayIsIE5VTEwsICJIZWFkc2V0IExlZnQgRmlsdGVyIn0sCisJeyAiSGVhZHNldCBMZWZ0IEZpbHRlciIsIE5VTEwsICJIU0RBQyBMZWZ0In0sCisJeyAiSGVhZHNldCBSaWdodCBGaWx0ZXIiLCBOVUxMLCAiSFNEQUMgUmlnaHQifSwKKworCS8qIHNwZWFrZXIgbWFwICovCisJeyAiSUhGT1VUTCIsIE5VTEwsICJTcGVha2VyIFJhaWwifSwKKwl7ICJJSEZPVVRSIiwgTlVMTCwgIlNwZWFrZXIgUmFpbCJ9LAorCXsgIklIRk9VVEwiLCAiTlVMTCIsICJTcGVha2VyIExlZnQgUGxheWJhY2sifSwKKwl7ICJJSEZPVVRSIiwgIk5VTEwiLCAiU3BlYWtlciBSaWdodCBQbGF5YmFjayJ9LAorCXsgIlNwZWFrZXIgTGVmdCBQbGF5YmFjayIsIE5VTEwsICJTcGVha2VyIExlZnQgRmlsdGVyIn0sCisJeyAiU3BlYWtlciBSaWdodCBQbGF5YmFjayIsIE5VTEwsICJTcGVha2VyIFJpZ2h0IEZpbHRlciJ9LAorCXsgIlNwZWFrZXIgTGVmdCBGaWx0ZXIiLCBOVUxMLCAiSUhGREFDIExlZnQifSwKKwl7ICJTcGVha2VyIFJpZ2h0IEZpbHRlciIsIE5VTEwsICJJSEZEQUMgUmlnaHQifSwKKworCS8qIHZpYnJhIG1hcCAqLworCXsgIlZJQjFPVVQiLCBOVUxMLCAiVmlicmExIFBsYXliYWNrIn0sCisJeyAiVmlicmExIFBsYXliYWNrIiwgTlVMTCwgIlZpYnJhMSBEQUMifSwKKworCXsgIlZJQjJPVVQiLCBOVUxMLCAiVmlicmEyIFBsYXliYWNrIn0sCisJeyAiVmlicmEyIFBsYXliYWNrIiwgTlVMTCwgIlZpYnJhMiBEQUMifSwKKworCS8qIGxpbmVvdXQgKi8KKwl7ICJMSU5FT1VUTCIsIE5VTEwsICJMaW5lb3V0IExlZnQgUGxheWJhY2sifSwKKwl7ICJMSU5FT1VUUiIsIE5VTEwsICJMaW5lb3V0IFJpZ2h0IFBsYXliYWNrIn0sCisJeyAiTGluZW91dCBMZWZ0IFBsYXliYWNrIiwgTlVMTCwgIkhlYWRzZXQgTGVmdCBGaWx0ZXIifSwKKwl7ICJMaW5lb3V0IExlZnQgUGxheWJhY2siLCBOVUxMLCAiU3BlYWtlciBMZWZ0IEZpbHRlciJ9LAorCXsgIkxpbmVvdXQgTGVmdCBQbGF5YmFjayIsIE5VTEwsICJWaWJyYTEgREFDIn0sCisJeyAiTGluZW91dCBSaWdodCBQbGF5YmFjayIsIE5VTEwsICJIZWFkc2V0IFJpZ2h0IEZpbHRlciJ9LAorCXsgIkxpbmVvdXQgUmlnaHQgUGxheWJhY2siLCBOVUxMLCAiU3BlYWtlciBSaWdodCBGaWx0ZXIifSwKKwl7ICJMaW5lb3V0IFJpZ2h0IFBsYXliYWNrIiwgTlVMTCwgIlZpYnJhMiBEQUMifSwKKworCS8qIEhlYWRzZXQgKEFNSUMxKSBtaWMgKi8KKwl7ICJBTUlDMUJpYXMiLCBOVUxMLCAiQU1JQzEifSwKKwl7ICJNSUMxIEVuYWJsZSIsIE5VTEwsICJBTUlDMUJpYXMifSwKKwl7ICJNaWNfSW5wdXRMIENhcHR1cmUgUm91dGUiLCAiQU1JQyIsICJNSUMxIEVuYWJsZSJ9LAorCisJLyogQU1JQzIgKi8KKwl7ICJBTUlDMkJpYXMiLCBOVUxMLCAiQU1JQzIifSwKKwl7ICJNSUMyIEVuYWJsZSIsIE5VTEwsICJBTUlDMkJpYXMifSwKKwl7ICJNaWNfSW5wdXRSIENhcHR1cmUgUm91dGUiLCAiQU1JQyIsICJNSUMyIEVuYWJsZSJ9LAorCisKKwkvKiBMaW5laW4gKi8KKwl7ICJMaW5lSW4gRW5hYmxlIExlZnQiLCBOVUxMLCAiTElORUlOTCJ9LAorCXsgIkxpbmVJbiBFbmFibGUgUmlnaHQiLCBOVUxMLCAiTElORUlOUiJ9LAorCXsgIk1pY19JbnB1dEwgQ2FwdHVyZSBSb3V0ZSIsICJMaW5lSW4iLCAiTGluZUluIEVuYWJsZSBMZWZ0In0sCisJeyAiTWljX0lucHV0UiBDYXB0dXJlIFJvdXRlIiwgIkxpbmVJbiIsICJMaW5lSW4gRW5hYmxlIFJpZ2h0In0sCisKKwkvKiBBREMgY29ubmVjdGlvbiAqLworCXsgIkFEQyBMZWZ0IiwgTlVMTCwgIk1pY19JbnB1dEwgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsgIkFEQyBSaWdodCIsIE5VTEwsICJNaWNfSW5wdXRSIENhcHR1cmUgUm91dGUifSwKKworCS8qRE1JQyBjb25uZWN0aW9ucyAqLworCXsgIkRNSUMxIiwgTlVMTCwgIkRNSUMxMnN1cHBseSJ9LAorCXsgIkRNSUMyIiwgTlVMTCwgIkRNSUMxMnN1cHBseSJ9LAorCXsgIkRNSUMzIiwgTlVMTCwgIkRNSUMzNHN1cHBseSJ9LAorCXsgIkRNSUM0IiwgTlVMTCwgIkRNSUMzNHN1cHBseSJ9LAorCXsgIkRNSUM1IiwgTlVMTCwgIkRNSUM1NnN1cHBseSJ9LAorCXsgIkRNSUM2IiwgTlVMTCwgIkRNSUM1NnN1cHBseSJ9LAorCisJeyAiRE1JQzEyQmlhcyIsIE5VTEwsICJETUlDMSJ9LAorCXsgIkRNSUMxMkJpYXMiLCBOVUxMLCAiRE1JQzIifSwKKwl7ICJETUlDMzRCaWFzIiwgTlVMTCwgIkRNSUMzIn0sCisJeyAiRE1JQzM0QmlhcyIsIE5VTEwsICJETUlDNCJ9LAorCXsgIkRNSUM1NkJpYXMiLCBOVUxMLCAiRE1JQzUifSwKKwl7ICJETUlDNTZCaWFzIiwgTlVMTCwgIkRNSUM2In0sCisKKwkvKlRYIHBhdGggaW5wdXRzKi8KKwl7ICJUeHBhdGgxIENhcHR1cmUgUm91dGUiLCAiQURDIExlZnQiLCAiQURDIExlZnQifSwKKwl7ICJUeHBhdGgyIENhcHR1cmUgUm91dGUiLCAiQURDIExlZnQiLCAiQURDIExlZnQifSwKKwl7ICJUeHBhdGgzIENhcHR1cmUgUm91dGUiLCAiQURDIExlZnQiLCAiQURDIExlZnQifSwKKwl7ICJUeHBhdGg0IENhcHR1cmUgUm91dGUiLCAiQURDIExlZnQiLCAiQURDIExlZnQifSwKKwl7ICJUeHBhdGgxIENhcHR1cmUgUm91dGUiLCAiQURDIFJpZ2h0IiwgIkFEQyBSaWdodCJ9LAorCXsgIlR4cGF0aDIgQ2FwdHVyZSBSb3V0ZSIsICJBREMgUmlnaHQiLCAiQURDIFJpZ2h0In0sCisJeyAiVHhwYXRoMyBDYXB0dXJlIFJvdXRlIiwgIkFEQyBSaWdodCIsICJBREMgUmlnaHQifSwKKwl7ICJUeHBhdGg0IENhcHR1cmUgUm91dGUiLCAiQURDIFJpZ2h0IiwgIkFEQyBSaWdodCJ9LAorCXsgIlR4cGF0aDEgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMSIsICJETUlDMSJ9LAorCXsgIlR4cGF0aDIgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMSIsICJETUlDMSJ9LAorCXsgIlR4cGF0aDMgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMSIsICJETUlDMSJ9LAorCXsgIlR4cGF0aDQgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMSIsICJETUlDMSJ9LAorCXsgIlR4cGF0aDEgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMiIsICJETUlDMiJ9LAorCXsgIlR4cGF0aDIgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMiIsICJETUlDMiJ9LAorCXsgIlR4cGF0aDMgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMiIsICJETUlDMiJ9LAorCXsgIlR4cGF0aDQgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMiIsICJETUlDMiJ9LAorCXsgIlR4cGF0aDEgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMyIsICJETUlDMyJ9LAorCXsgIlR4cGF0aDIgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMyIsICJETUlDMyJ9LAorCXsgIlR4cGF0aDMgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMyIsICJETUlDMyJ9LAorCXsgIlR4cGF0aDQgQ2FwdHVyZSBSb3V0ZSIsICJETUlDMyIsICJETUlDMyJ9LAorCXsgIlR4cGF0aDEgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNCIsICJETUlDNCJ9LAorCXsgIlR4cGF0aDIgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNCIsICJETUlDNCJ9LAorCXsgIlR4cGF0aDMgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNCIsICJETUlDNCJ9LAorCXsgIlR4cGF0aDQgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNCIsICJETUlDNCJ9LAorCXsgIlR4cGF0aDEgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNSIsICJETUlDNSJ9LAorCXsgIlR4cGF0aDIgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNSIsICJETUlDNSJ9LAorCXsgIlR4cGF0aDMgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNSIsICJETUlDNSJ9LAorCXsgIlR4cGF0aDQgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNSIsICJETUlDNSJ9LAorCXsgIlR4cGF0aDEgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNiIsICJETUlDNiJ9LAorCXsgIlR4cGF0aDIgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNiIsICJETUlDNiJ9LAorCXsgIlR4cGF0aDMgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNiIsICJETUlDNiJ9LAorCXsgIlR4cGF0aDQgQ2FwdHVyZSBSb3V0ZSIsICJETUlDNiIsICJETUlDNiJ9LAorCisJLyogdHggcGF0aCAqLworCXsgIlRYMSBFbmFibGUiLCBOVUxMLCAiVHhwYXRoMSBDYXB0dXJlIFJvdXRlIn0sCisJeyAiVFgyIEVuYWJsZSIsIE5VTEwsICJUeHBhdGgyIENhcHR1cmUgUm91dGUifSwKKwl7ICJUWDMgRW5hYmxlIiwgTlVMTCwgIlR4cGF0aDMgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsgIlRYNCBFbmFibGUiLCBOVUxMLCAiVHhwYXRoNCBDYXB0dXJlIFJvdXRlIn0sCisJeyAiUENNX091dCIsIE5VTEwsICJUWDEgRW5hYmxlIn0sCisJeyAiUENNX091dCIsIE5VTEwsICJUWDIgRW5hYmxlIn0sCisJeyAiUENNX091dCIsIE5VTEwsICJUWDMgRW5hYmxlIn0sCisJeyAiUENNX091dCIsIE5VTEwsICJUWDQgRW5hYmxlIn0sCisKK307CisKKy8qIHNwZWFrZXIgYW5kIGhlYWRzZXQgbXV0ZXMsIGZvciBhdWRpbyBwb3BzIGFuZCBjbGlja3MgKi8KK3N0YXRpYyBpbnQgc245NTAzMV9wY21faHNfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc25kX3NvY191cGRhdGVfYml0cyhkYWktPmNvZGVjLAorCQkJU045NTAzMV9IU0xWT0xDVFJMLCBCSVQoNyksICghbXV0ZSA8PCA3KSk7CisJc25kX3NvY191cGRhdGVfYml0cyhkYWktPmNvZGVjLAorCQkJU045NTAzMV9IU1JWT0xDVFJMLCBCSVQoNyksICghbXV0ZSA8PCA3KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc245NTAzMV9wY21fc3Brcl9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGRhaS0+Y29kZWMsCisJCQlTTjk1MDMxX0lIRkxWT0xDVFJMLCBCSVQoNyksICghbXV0ZSA8PCA3KSk7CisJc25kX3NvY191cGRhdGVfYml0cyhkYWktPmNvZGVjLAorCQkJU045NTAzMV9JSEZSVk9MQ1RSTCwgQklUKDcpLCAoIW11dGUgPDwgNykpOworCXJldHVybiAwOworfQorCitpbnQgc245NTAzMV9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJdW5zaWduZWQgaW50IGZvcm1hdCwgcmF0ZTsKKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJZm9ybWF0ID0gQklUKDQpfEJJVCg1KTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlmb3JtYXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc25kX3NvY191cGRhdGVfYml0cyhkYWktPmNvZGVjLCBTTjk1MDMxX1BDTTJDMiwKKwkJCUJJVCg0KXxCSVQoNSksIGZvcm1hdCk7CisKKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDQ4MDAwOgorCQlwcl9kZWJ1ZygiUkFURV80ODAwMFxuIik7CisJCXJhdGUgPSAwOworCQlicmVhazsKKworCWNhc2UgNDQxMDA6CisJCXByX2RlYnVnKCJSQVRFXzQ0MTAwXG4iKTsKKwkJcmF0ZSA9IEJJVCg3KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9lcnIoIkVSUiByYXRlICVkXG4iLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNuZF9zb2NfdXBkYXRlX2JpdHMoZGFpLT5jb2RlYywgU045NTAzMV9QQ00xQzEsIEJJVCg3KSwgcmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ29kZWMgREFJIHNlY3Rpb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHNuOTUwMzFfaGVhZHNldF9kYWlfb3BzID0geworCS5kaWdpdGFsX211dGUJPSBzbjk1MDMxX3BjbV9oc19tdXRlLAorCS5od19wYXJhbXMJPSBzbjk1MDMxX3BjbV9od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzbjk1MDMxX3NwZWFrZXJfZGFpX29wcyA9IHsKKwkuZGlnaXRhbF9tdXRlCT0gc245NTAzMV9wY21fc3Brcl9tdXRlLAorCS5od19wYXJhbXMJPSBzbjk1MDMxX3BjbV9od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzbjk1MDMxX3ZpYjFfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gc245NTAzMV9wY21faHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc245NTAzMV92aWIyX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHNuOTUwMzFfcGNtX2h3X3BhcmFtcywKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgc245NTAzMV9kYWlzW10gPSB7Cit7CisJLm5hbWUgPSAiU045NTAzMSBIZWFkc2V0IiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJIZWFkc2V0IiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTjk1MDMxX1JBVEVTLAorCQkuZm9ybWF0cyA9IFNOOTUwMzFfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gNSwKKwkJLnJhdGVzID0gU045NTAzMV9SQVRFUywKKwkJLmZvcm1hdHMgPSBTTjk1MDMxX0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJnNuOTUwMzFfaGVhZHNldF9kYWlfb3BzLAorfSwKK3sJLm5hbWUgPSAiU045NTAzMSBTcGVha2VyIiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJTcGVha2VyIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTjk1MDMxX1JBVEVTLAorCQkuZm9ybWF0cyA9IFNOOTUwMzFfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmc245NTAzMV9zcGVha2VyX2RhaV9vcHMsCit9LAorewkubmFtZSA9ICJTTjk1MDMxIFZpYnJhMSIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiVmlicmExIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAxLAorCQkucmF0ZXMgPSBTTjk1MDMxX1JBVEVTLAorCQkuZm9ybWF0cyA9IFNOOTUwMzFfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmc245NTAzMV92aWIxX2RhaV9vcHMsCit9LAorewkubmFtZSA9ICJTTjk1MDMxIFZpYnJhMiIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiVmlicmEyIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAxLAorCQkucmF0ZXMgPSBTTjk1MDMxX1JBVEVTLAorCQkuZm9ybWF0cyA9IFNOOTUwMzFfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmc245NTAzMV92aWIyX2RhaV9vcHMsCit9LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIHNuOTUwMzFfZGlzYWJsZV9qYWNrX2J0bihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9CVE5DVFJMMiwgMHgwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbjk1MDMxX2VuYWJsZV9qYWNrX2J0bihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9CVE5DVFJMMSwgMHg3Nyk7CisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9CVE5DVFJMMiwgMHgwMSk7Cit9CisKK3N0YXRpYyBpbnQgc245NTAzMV9nZXRfaGVhZHNldF9zdGF0ZShzdHJ1Y3Qgc25kX3NvY19qYWNrICptZmxkX2phY2spCit7CisJaW50IG1pY2JpYXMgPSBzbjk1MDMxX2dldF9taWNfYmlhcyhtZmxkX2phY2stPmNvZGVjKTsKKworCWludCBqYWNrX3R5cGUgPSBzbmRfc29jX2phY2tfZ2V0X3R5cGUobWZsZF9qYWNrLCBtaWNiaWFzKTsKKworCXByX2RlYnVnKCJqYWNrIHR5cGUgZGV0ZWN0ZWQgPSAlZFxuIiwgamFja190eXBlKTsKKwlpZiAoamFja190eXBlID09IFNORF9KQUNLX0hFQURTRVQpCisJCXNuOTUwMzFfZW5hYmxlX2phY2tfYnRuKG1mbGRfamFjay0+Y29kZWMpOworCXJldHVybiBqYWNrX3R5cGU7Cit9CisKK3ZvaWQgc245NTAzMV9qYWNrX2RldGVjdGlvbihzdHJ1Y3QgbWZsZF9qYWNrX2RhdGEgKmphY2tfZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBtYXNrID0gU05EX0pBQ0tfQlROXzAgfCBTTkRfSkFDS19CVE5fMSB8IFNORF9KQUNLX0hFQURTRVQ7CisKKwlwcl9kZWJ1ZygiaW50ZXJydXB0IGlkIHJlYWQgaW4gc3JhbSA9IDB4JXhcbiIsIGphY2tfZGF0YS0+aW50cl9pZCk7CisJaWYgKGphY2tfZGF0YS0+aW50cl9pZCAmIDB4MSkgeworCQlwcl9kZWJ1Zygic2hvcnRfcHVzaCBkZXRlY3RlZFxuIik7CisJCXN0YXR1cyA9IFNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19CVE5fMDsKKwl9IGVsc2UgaWYgKGphY2tfZGF0YS0+aW50cl9pZCAmIDB4MikgeworCQlwcl9kZWJ1ZygibG9uZ19wdXNoIGRldGVjdGVkXG4iKTsKKwkJc3RhdHVzID0gU05EX0pBQ0tfSEVBRFNFVCB8IFNORF9KQUNLX0JUTl8xOworCX0gZWxzZSBpZiAoamFja19kYXRhLT5pbnRyX2lkICYgMHg0KSB7CisJCXByX2RlYnVnKCJoZWFkc2V0IG9yIGhlYWRwaG9uZXMgaW5zZXJ0ZWRcbiIpOworCQlzdGF0dXMgPSBzbjk1MDMxX2dldF9oZWFkc2V0X3N0YXRlKGphY2tfZGF0YS0+bWZsZF9qYWNrKTsKKwl9IGVsc2UgaWYgKGphY2tfZGF0YS0+aW50cl9pZCAmIDB4OCkgeworCQlwcl9kZWJ1ZygiaGVhZHNldCBvciBoZWFkcGhvbmVzIHJlbW92ZWRcbiIpOworCQlzdGF0dXMgPSAwOworCQlzbjk1MDMxX2Rpc2FibGVfamFja19idG4oamFja19kYXRhLT5tZmxkX2phY2stPmNvZGVjKTsKKwl9IGVsc2UgeworCQlwcl9lcnIoInVuaWRlbnRpZmllZCBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm47CisJfQorCisJc25kX3NvY19qYWNrX3JlcG9ydChqYWNrX2RhdGEtPm1mbGRfamFjaywgc3RhdHVzLCBtYXNrKTsKKwkvKmJ1dHRvbiBwcmVzc2VkIGFuZCByZWxlYXNlZCBzbyB3ZSBzZW5kIGV4cGxpY2l0IGJ1dHRvbiByZWxlYXNlICovCisJaWYgKChzdGF0dXMgJiBTTkRfSkFDS19CVE5fMCkgfCAoc3RhdHVzICYgU05EX0pBQ0tfQlROXzEpKQorCQlzbmRfc29jX2phY2tfcmVwb3J0KGphY2tfZGF0YS0+bWZsZF9qYWNrLAorCQkJCVNORF9KQUNLX0hFQURTRVQsIG1hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc245NTAzMV9qYWNrX2RldGVjdGlvbik7CisKKy8qIGNvZGVjIHJlZ2lzdHJhdGlvbiAqLworc3RhdGljIGludCBzbjk1MDMxX2NvZGVjX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgcmV0OworCisJcHJfZGVidWcoImNvZGVjX3Byb2JlIGNhbGxlZFxuIik7CisKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+ZGFwbS5pZGxlX2JpYXNfb2ZmID0gMTsKKworCS8qIFBDTSBpbnRlcmZhY2UgY29uZmlnCisJICogVGhpcyBzZXRzIHRoZSBwY20gcnggc2xvdCBjb25ndXJhdGlvbiB0byBtYXggNiBzbG90cworCSAqIGZvciBtYXggNCBkYWlzICgyIHN0ZXJlbyBhbmQgMiBtb25vKQorCSAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfUENNMlJYU0xPVDAxLCAweDEwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX1BDTTJSWFNMT1QyMywgMHgzMik7CisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9QQ00yUlhTTE9UNDUsIDB4NTQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfUENNMlRYU0xPVDAxLCAweDEwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX1BDTTJUWFNMT1QyMywgMHgzMik7CisJLyogcGNtIHBvcnQgc2V0dGluZworCSAqIFRoaXMgc2V0cyB0aGUgcGNtIHBvcnQgdG8gc2xhdmUgYW5kIGNsb2NrIGF0IDE5LjJNaHogd2hpY2gKKwkgKiBjYW4gc3VwcG9ydCA2c2xvdHMsIHNhbXBsaW5nIHJhdGUgc2V0IHBlciBzdHJlYW0gaW4gaHctcGFyYW1zCisJICovCisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9QQ00xQzEsIDB4MDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfUENNMkMxLCAweDAxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX1BDTTJDMiwgMHgwQSk7CisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9IU01JWEVSLCBCSVQoMCl8QklUKDQpKTsKKwkvKiB2ZW5kb3IgdmlicmEgd29ya3JvdW5kLCB0aGUgdmlicmFzIGFyZSBtdXRlZCBieQorCSAqIGN1c3RvbSByZWdpc3RlciBzbyB1bm11dGUgdGhlbQorCSAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfU1NSNSwgMHg4MCk7CisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9TU1I2LCAweDgwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX1ZJQjFDNSwgMHgwMCk7CisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9WSUIyQzUsIDB4MDApOworCS8qIGNvbmZpZ3VyZSB2aWJyYXMgZm9yIHBjbSBwb3J0ICovCisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9WSUIxQzMsIDB4MDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfVklCMkMzLCAweDAwKTsKKworCS8qIHNvZnQgbXV0ZSByYW1wIHRpbWUgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX1NPRlRNVVRFLCAweDMpOworCS8qIGZpeCB0aGUgaW5pdGlhbCB2b2x1bWUgYXQgMWRCLAorCSAqIGRlZmF1bHQgaW4gKzlkQiwKKwkgKiAxZEIgZ2l2ZSBvcHRpbWFsIHN3aW5nIG9uIERBQywgYW1wcworCSAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfSFNMVk9MQ1RSTCwgMHgwOCk7CisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9IU1JWT0xDVFJMLCAweDA4KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX0lIRkxWT0xDVFJMLCAweDA4KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX0lIRlJWT0xDVFJMLCAweDA4KTsKKwkvKiBkYWMgbW9kZSBhbmQgbGluZW91dCB3b3JrYXJvdW5kICovCisJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9TU1IyLCAweDEwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTTjk1MDMxX1NTUjMsIDB4NDApOworCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHNuOTUwMzFfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHNuOTUwMzFfc25kX2NvbnRyb2xzKSk7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKCZjb2RlYy0+ZGFwbSwgc245NTAzMV9kYXBtX3dpZGdldHMsCisJCQkJQVJSQVlfU0laRShzbjk1MDMxX2RhcG1fd2lkZ2V0cykpOworCWlmIChyZXQpCisJCXByX2Vycigic29jX2RhcG1fbmV3X2NvbnRyb2wgZmFpbGVkICVkIiwgcmV0KTsKKwlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcygmY29kZWMtPmRhcG0sIHNuOTUwMzFfYXVkaW9fbWFwLAorCQkJCUFSUkFZX1NJWkUoc245NTAzMV9hdWRpb19tYXApKTsKKwlpZiAocmV0KQorCQlwcl9lcnIoInNvY19kYXBtX2FkZF9yb3V0ZXMgZmFpbGVkICVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc245NTAzMV9jb2RlY19yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXByX2RlYnVnKCJjb2RlY19yZW1vdmUgY2FsbGVkXG4iKTsKKwlzbjk1MDMxX3NldF92YXVkX2JpYXMoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzbjk1MDMxX2NvZGVjID0geworCS5wcm9iZQkJPSBzbjk1MDMxX2NvZGVjX3Byb2JlLAorCS5yZW1vdmUJCT0gc245NTAzMV9jb2RlY19yZW1vdmUsCisJLnJlYWQJCT0gc245NTAzMV9yZWFkLAorCS53cml0ZQkJPSBzbjk1MDMxX3dyaXRlLAorCS5zZXRfYmlhc19sZXZlbAk9IHNuOTUwMzFfc2V0X3ZhdWRfYmlhcywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuOTUwMzFfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcHJfZGVidWcoImNvZGVjIGRldmljZSBwcm9iZSBjYWxsZWQgZm9yICVzXG4iLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJnBkZXYtPmRldiwgJnNuOTUwMzFfY29kZWMsCisJCQlzbjk1MDMxX2RhaXMsIEFSUkFZX1NJWkUoc245NTAzMV9kYWlzKSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuOTUwMzFfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXByX2RlYnVnKCJjb2RlYyBkZXZpY2UgcmVtb3ZlIGNhbGxlZFxuIik7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbjk1MDMxX2NvZGVjX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gInNuOTUwMzEiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gc245NTAzMV9kZXZpY2VfcHJvYmUsCisJLnJlbW92ZQkJPSBzbjk1MDMxX2RldmljZV9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbjk1MDMxX2luaXQodm9pZCkKK3sKKwlwcl9kZWJ1ZygiZHJpdmVyIGluaXQgY2FsbGVkXG4iKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbjk1MDMxX2NvZGVjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzbjk1MDMxX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc245NTAzMV9leGl0KHZvaWQpCit7CisJcHJfZGVidWcoImRyaXZlciBleGl0IGNhbGxlZFxuIik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuOTUwMzFfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNuOTUwMzFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBUSSBTTjk1MDMxIGNvZGVjIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVmlub2QgS291bCA8dmlub2Qua291bEBpbnRlbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJIYXJzaGEgUHJpeWEgPHByaXlhLmhhcnNoYUBpbnRlbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNuOTUwMzEiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5oIGIvc291bmQvc29jL2NvZGVjcy9zbjk1MDMxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzNzZkMgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogIHNuOTUwMzEuaCAtIFRJIHNuOTUwMzEgQ29kZWMgZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3JwCisgKiAgQXV0aG9yOiBWaW5vZCBLb3VsIDx2aW5vZC5rb3VsQGludGVsLmNvbT4KKyAqICBBdXRob3I6IEhhcnNoYSBQcml5YSA8cHJpeWEuaGFyc2hhQGludGVsLmNvbT4KKyAqICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKgorICovCisjaWZuZGVmIF9TTjk1MDMxX0gKKyNkZWZpbmUgX1NOOTUwMzFfSAorCisvKnJlZ2lzdGVyIG1hcCovCisjZGVmaW5lIFNOOTUwMzFfVkFVRAkJCTB4REIKKyNkZWZpbmUgU045NTAzMV9WSFNQCQkJMHhEQworI2RlZmluZSBTTjk1MDMxX1ZIU04JCQkweERECisjZGVmaW5lIFNOOTUwMzFfVklIRgkJCTB4QzkKKworI2RlZmluZSBTTjk1MDMxX0FVRFBMTENUUkwJCTB4MjQwCisjZGVmaW5lIFNOOTUwMzFfRE1JQ0JVRjAxMjMJCTB4MjQxCisjZGVmaW5lIFNOOTUwMzFfRE1JQ0JVRjQ1CQkweDI0MgorI2RlZmluZSBTTjk1MDMxX0RNSUNHUE8JCQkweDI0NAorI2RlZmluZSBTTjk1MDMxX0RNSUNNVVgJCQkweDI0NQorI2RlZmluZSBTTjk1MDMxX0RNSUNMSwkJCTB4MjQ2CisjZGVmaW5lIFNOOTUwMzFfTUlDQklBUwkJCTB4MjQ3CisjZGVmaW5lIFNOOTUwMzFfQURDQ09ORklHCQkweDI0OAorI2RlZmluZSBTTjk1MDMxX01JQ0FNUDEJCQkweDI0OQorI2RlZmluZSBTTjk1MDMxX01JQ0FNUDIJCQkweDI0QQorI2RlZmluZSBTTjk1MDMxX05PSVNFTVVYCQkweDI0QgorI2RlZmluZSBTTjk1MDMxX0FVRElPTVVYMTIJCTB4MjRDCisjZGVmaW5lIFNOOTUwMzFfQVVESU9NVVgzNAkJMHgyNEQKKyNkZWZpbmUgU045NTAzMV9BVURJT1NJTkMJCTB4MjRFCisjZGVmaW5lIFNOOTUwMzFfQVVESU9UWEVOCQkweDI0RgorI2RlZmluZSBTTjk1MDMxX0hTRVBSWENUUkwJCTB4MjUwCisjZGVmaW5lIFNOOTUwMzFfSUhGUlhDVFJMCQkweDI1MQorI2RlZmluZSBTTjk1MDMxX0hTTUlYRVIJCQkweDI1NgorI2RlZmluZSBTTjk1MDMxX0RBQ0NPTkZJRwkJMHgyNTcKKyNkZWZpbmUgU045NTAzMV9TT0ZUTVVURQkJMHgyNTgKKyNkZWZpbmUgU045NTAzMV9IU0xWT0xDVFJMCQkweDI1OQorI2RlZmluZSBTTjk1MDMxX0hTUlZPTENUUkwJCTB4MjVBCisjZGVmaW5lIFNOOTUwMzFfSUhGTFZPTENUUkwJCTB4MjVCCisjZGVmaW5lIFNOOTUwMzFfSUhGUlZPTENUUkwJCTB4MjVDCisjZGVmaW5lIFNOOTUwMzFfRFJJVkVSRU4JCTB4MjVECisjZGVmaW5lIFNOOTUwMzFfTE9DVEwJCQkweDI1RQorI2RlZmluZSBTTjk1MDMxX1ZJQjFDMQkJCTB4MjVGCisjZGVmaW5lIFNOOTUwMzFfVklCMUMyCQkJMHgyNjAKKyNkZWZpbmUgU045NTAzMV9WSUIxQzMJCQkweDI2MQorI2RlZmluZSBTTjk1MDMxX1ZJQjFTUElQQ00xCQkweDI2MgorI2RlZmluZSBTTjk1MDMxX1ZJQjFTUElQQ00yCQkweDI2MworI2RlZmluZSBTTjk1MDMxX1ZJQjFDNQkJCTB4MjY0CisjZGVmaW5lIFNOOTUwMzFfVklCMkMxCQkJMHgyNjUKKyNkZWZpbmUgU045NTAzMV9WSUIyQzIJCQkweDI2NgorI2RlZmluZSBTTjk1MDMxX1ZJQjJDMwkJCTB4MjY3CisjZGVmaW5lIFNOOTUwMzFfVklCMlNQSVBDTTEJCTB4MjY4CisjZGVmaW5lIFNOOTUwMzFfVklCMlNQSVBDTTIJCTB4MjY5CisjZGVmaW5lIFNOOTUwMzFfVklCMkM1CQkJMHgyNkEKKyNkZWZpbmUgU045NTAzMV9CVE5DVFJMMQkJMHgyNkIKKyNkZWZpbmUgU045NTAzMV9CVE5DVFJMMgkJMHgyNkMKKyNkZWZpbmUgU045NTAzMV9QQ00xVFhTTE9UMDEJCTB4MjZECisjZGVmaW5lIFNOOTUwMzFfUENNMVRYU0xPVDIzCQkweDI2RQorI2RlZmluZSBTTjk1MDMxX1BDTTFUWFNMT1Q0NQkJMHgyNkYKKyNkZWZpbmUgU045NTAzMV9QQ00xUlhTTE9UMF8zCQkweDI3MAorI2RlZmluZSBTTjk1MDMxX1BDTTFSWFNMT1Q0NQkJMHgyNzEKKyNkZWZpbmUgU045NTAzMV9QQ00yVFhTTE9UMDEJCTB4MjcyCisjZGVmaW5lIFNOOTUwMzFfUENNMlRYU0xPVDIzCQkweDI3MworI2RlZmluZSBTTjk1MDMxX1BDTTJUWFNMT1Q0NQkJMHgyNzQKKyNkZWZpbmUgU045NTAzMV9QQ00yUlhTTE9UMDEJCTB4Mjc1CisjZGVmaW5lIFNOOTUwMzFfUENNMlJYU0xPVDIzCQkweDI3NgorI2RlZmluZSBTTjk1MDMxX1BDTTJSWFNMT1Q0NQkJMHgyNzcKKyNkZWZpbmUgU045NTAzMV9QQ00xQzEJCQkweDI3OAorI2RlZmluZSBTTjk1MDMxX1BDTTFDMgkJCTB4Mjc5CisjZGVmaW5lIFNOOTUwMzFfUENNMUMzCQkJMHgyN0EKKyNkZWZpbmUgU045NTAzMV9QQ00yQzEJCQkweDI3QgorI2RlZmluZSBTTjk1MDMxX1BDTTJDMgkJCTB4MjdDCisvKmVuZCBjb2RlYyByZWdpc3RlciBkZWZuKi8KKworLyp2ZW5kb3IgZGVmbiB0aGVzZSBhcmUgbm90IHBhcnQgb2YgYXZwKi8KKyNkZWZpbmUgU045NTAzMV9TU1IyCQkJMHgzODEKKyNkZWZpbmUgU045NTAzMV9TU1IzCQkJMHgzODIKKyNkZWZpbmUgU045NTAzMV9TU1I1CQkJMHgzODQKKyNkZWZpbmUgU045NTAzMV9TU1I2CQkJMHgzODUKKworLyogQURDIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFNOOTUwMzFfQURDMUNOVEwxIDB4MUMwCisjZGVmaW5lIFNOOTUwMzFfQURDX0VOQkwgMHgxMAorI2RlZmluZSBTTjk1MDMxX0FEQ19TVEFSVCAweDA4CisjZGVmaW5lIFNOOTUwMzFfQURDMUNOVEwzIDB4MUMyCisjZGVmaW5lIFNOOTUwMzFfQURDVEhFUk1fRU5CTCAweDA0CisjZGVmaW5lIFNOOTUwMzFfQURDUlJEQVRBX0VOQkwgMHgwNQorI2RlZmluZSBTTjk1MDMxX1NUT1BCSVRfTUFTSyAxNgorI2RlZmluZSBTTjk1MDMxX0FEQ1RIRVJNX01BU0sgNAorI2RlZmluZSBTTjk1MDMxX0FEQ19DSEFOTFNfTUFYIDE1IC8qIE51bWJlciBvZiBBREMgY2hhbm5lbHMgKi8KKyNkZWZpbmUgU045NTAzMV9BRENfTE9PUF9NQVggKFNOOTUwMzFfQURDX0NIQU5MU19NQVggLSAxKQorI2RlZmluZSBTTjk1MDMxX0FEQ19OT19MT09QIDB4MDcKKyNkZWZpbmUgU045NTAzMV9BVURJT19HUElPX0NUUkwgMHgwNzAKKworLyogQURDIGNoYW5uZWwgY29kZSB2YWx1ZXMgKi8KKyNkZWZpbmUgU045NTAzMV9BVURJT19ERVRFQ1RfQ09ERSAweDA2CisKKy8qIEFEQyBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBTTjk1MDMxX0FEQ19DSE5MX1NUQVJUX0FERFIgMHgxQzUgLyogaW5jcmVtZW50cyBieSAxICovCisjZGVmaW5lIFNOOTUwMzFfQURDX0RBVEFfU1RBUlRfQUREUiAweDFENCAgLyogaW5jcmVtZW50cyBieSAyICovCisvKiBtdWx0aXBpZXIgdG8gY29udmVydCB0byBtViAqLworI2RlZmluZSBTTjk1MDMxX0FEQ19PTkVfTFNCX01VTFRJUExJRVIgMjM0NgorCisKK3N0cnVjdCBtZmxkX2phY2tfZGF0YSB7CisJaW50IGludHJfaWQ7CisJaW50IG1pY2JpYXNfdm9sOworCXN0cnVjdCBzbmRfc29jX2phY2sgKm1mbGRfamFjazsKK307CisKK2V4dGVybiB2b2lkIHNuOTUwMzFfamFja19kZXRlY3Rpb24oc3RydWN0IG1mbGRfamFja19kYXRhICpqYWNrX2RhdGEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMzJ4NC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzMng0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzYjlkMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMzJ4NC5jCkBAIC0wLDAgKzEsNzk0IEBACisvKgorICogbGludXgvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzMng0LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBWaXN0YSBTaWxpY29uIFMuTC4KKyAqCisgKiBBdXRob3I6IEphdmllciBNYXJ0aW4gPGphdmllci5tYXJ0aW5AdmlzdGEtc2lsaWNvbi5jb20+CisgKgorICogQmFzZWQgb24gc291bmQvc29jL2NvZGVjcy93bTg5NzQgYW5kIFRJIGRyaXZlciBmb3Iga2VybmVsIDIuNi4yNy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8c291bmQvdGx2MzIwYWljMzJ4NC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJ0bHYzMjBhaWMzMng0LmgiCisKK3N0cnVjdCBhaWMzMng0X3JhdGVfZGl2cyB7CisJdTMyIG1jbGs7CisJdTMyIHJhdGU7CisJdTggcF92YWw7CisJdTggcGxsX2o7CisJdTE2IHBsbF9kOworCXUxNiBkb3NyOworCXU4IG5kYWM7CisJdTggbWRhYzsKKwl1OCBhb3NyOworCXU4IG5hZGM7CisJdTggbWFkYzsKKwl1OCBibGNrX047Cit9OworCitzdHJ1Y3QgYWljMzJ4NF9wcml2IHsKKwl1MzIgc3lzY2xrOworCXMzMiBtYXN0ZXI7CisJdTggcGFnZV9ubzsKKwl2b2lkICpjb250cm9sX2RhdGE7CisJdTMyIHBvd2VyX2NmZzsKKwl1MzIgbWljcGdhX3JvdXRpbmc7CisJYm9vbCBzd2FwZGFjczsKK307CisKKy8qIDBkQiBtaW4sIDFkQiBzdGVwcyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKHRsdl9zdGVwXzEsIDAsIDEwMCwgMCk7CisvKiAwZEIgbWluLCAwLjVkQiBzdGVwcyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKHRsdl9zdGVwXzBfNSwgMCwgNTAsIDApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljMzJ4NF9zbmRfY29udHJvbHNbXSA9IHsKKwlTT0NfRE9VQkxFX1JfVExWKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgQUlDMzJYNF9MREFDVk9MLAorCQkJQUlDMzJYNF9SREFDVk9MLCAwLCAweDMwLCAwLCB0bHZfc3RlcF8wXzUpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkhQIERyaXZlciBHYWluIFZvbHVtZSIsIEFJQzMyWDRfSFBMR0FJTiwKKwkJCUFJQzMyWDRfSFBSR0FJTiwgMCwgMHgxRCwgMCwgdGx2X3N0ZXBfMSksCisJU09DX0RPVUJMRV9SX1RMVigiTE8gRHJpdmVyIEdhaW4gVm9sdW1lIiwgQUlDMzJYNF9MT0xHQUlOLAorCQkJQUlDMzJYNF9MT1JHQUlOLCAwLCAweDFELCAwLCB0bHZfc3RlcF8xKSwKKwlTT0NfRE9VQkxFX1IoIkhQIERBQyBQbGF5YmFjayBTd2l0Y2giLCBBSUMzMlg0X0hQTEdBSU4sCisJCQlBSUMzMlg0X0hQUkdBSU4sIDYsIDB4MDEsIDEpLAorCVNPQ19ET1VCTEVfUigiTE8gREFDIFBsYXliYWNrIFN3aXRjaCIsIEFJQzMyWDRfTE9MR0FJTiwKKwkJCUFJQzMyWDRfTE9SR0FJTiwgNiwgMHgwMSwgMSksCisJU09DX0RPVUJMRV9SKCJNaWMgUEdBIFN3aXRjaCIsIEFJQzMyWDRfTE1JQ1BHQVZPTCwKKwkJCUFJQzMyWDRfUk1JQ1BHQVZPTCwgNywgMHgwMSwgMSksCisKKwlTT0NfU0lOR0xFKCJBRENGR0EgTGVmdCBNdXRlIFN3aXRjaCIsIEFJQzMyWDRfQURDRkdBLCA3LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJBRENGR0EgUmlnaHQgTXV0ZSBTd2l0Y2giLCBBSUMzMlg0X0FEQ0ZHQSwgMywgMSwgMCksCisKKwlTT0NfRE9VQkxFX1JfVExWKCJBREMgTGV2ZWwgVm9sdW1lIiwgQUlDMzJYNF9MQURDVk9MLAorCQkJQUlDMzJYNF9SQURDVk9MLCAwLCAweDI4LCAwLCB0bHZfc3RlcF8wXzUpLAorCVNPQ19ET1VCTEVfUl9UTFYoIlBHQSBMZXZlbCBWb2x1bWUiLCBBSUMzMlg0X0xNSUNQR0FWT0wsCisJCQlBSUMzMlg0X1JNSUNQR0FWT0wsIDAsIDB4NWYsIDAsIHRsdl9zdGVwXzBfNSksCisKKwlTT0NfU0lOR0xFKCJBdXRvLW11dGUgU3dpdGNoIiwgQUlDMzJYNF9EQUNNVVRFLCA0LCA3LCAwKSwKKworCVNPQ19TSU5HTEUoIkFHQyBMZWZ0IFN3aXRjaCIsIEFJQzMyWDRfTEFHQzEsIDcsIDEsIDApLAorCVNPQ19TSU5HTEUoIkFHQyBSaWdodCBTd2l0Y2giLCBBSUMzMlg0X1JBR0MxLCA3LCAxLCAwKSwKKwlTT0NfRE9VQkxFX1IoIkFHQyBUYXJnZXQgTGV2ZWwiLCBBSUMzMlg0X0xBR0MxLCBBSUMzMlg0X1JBR0MxLAorCQkJNCwgMHgwNywgMCksCisJU09DX0RPVUJMRV9SKCJBR0MgR2FpbiBIeXN0ZXJlc2lzIiwgQUlDMzJYNF9MQUdDMSwgQUlDMzJYNF9SQUdDMSwKKwkJCTAsIDB4MDMsIDApLAorCVNPQ19ET1VCTEVfUigiQUdDIEh5c3RlcmVzaXMiLCBBSUMzMlg0X0xBR0MyLCBBSUMzMlg0X1JBR0MyLAorCQkJNiwgMHgwMywgMCksCisJU09DX0RPVUJMRV9SKCJBR0MgTm9pc2UgVGhyZXNob2xkIiwgQUlDMzJYNF9MQUdDMiwgQUlDMzJYNF9SQUdDMiwKKwkJCTEsIDB4MUYsIDApLAorCVNPQ19ET1VCTEVfUigiQUdDIE1heCBQR0EiLCBBSUMzMlg0X0xBR0MzLCBBSUMzMlg0X1JBR0MzLAorCQkJMCwgMHg3RiwgMCksCisJU09DX0RPVUJMRV9SKCJBR0MgQXR0YWNrIFRpbWUiLCBBSUMzMlg0X0xBR0M0LCBBSUMzMlg0X1JBR0M0LAorCQkJMywgMHgxRiwgMCksCisJU09DX0RPVUJMRV9SKCJBR0MgRGVjYXkgVGltZSIsIEFJQzMyWDRfTEFHQzUsIEFJQzMyWDRfUkFHQzUsCisJCQkzLCAweDFGLCAwKSwKKwlTT0NfRE9VQkxFX1IoIkFHQyBOb2lzZSBEZWJvdW5jZSIsIEFJQzMyWDRfTEFHQzYsIEFJQzMyWDRfUkFHQzYsCisJCQkwLCAweDFGLCAwKSwKKwlTT0NfRE9VQkxFX1IoIkFHQyBTaWduYWwgRGVib3VuY2UiLCBBSUMzMlg0X0xBR0M3LCBBSUMzMlg0X1JBR0M3LAorCQkJMCwgMHgwRiwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFpYzMyeDRfcmF0ZV9kaXZzIGFpYzMyeDRfZGl2c1tdID0geworCS8qIDhrIHJhdGUgKi8KKwl7QUlDMzJYNF9GUkVRXzEyMDAwMDAwLCA4MDAwLCAxLCA3LCA2ODAwLCA3NjgsIDUsIDMsIDEyOCwgNSwgMTgsIDI0fSwKKwl7QUlDMzJYNF9GUkVRXzI0MDAwMDAwLCA4MDAwLCAyLCA3LCA2ODAwLCA3NjgsIDE1LCAxLCA2NCwgNDUsIDQsIDI0fSwKKwl7QUlDMzJYNF9GUkVRXzI1MDAwMDAwLCA4MDAwLCAyLCA3LCAzNzI4LCA3NjgsIDE1LCAxLCA2NCwgNDUsIDQsIDI0fSwKKwkvKiAxMS4wMjVrIHJhdGUgKi8KKwl7QUlDMzJYNF9GUkVRXzEyMDAwMDAwLCAxMTAyNSwgMSwgNywgNTI2NCwgNTEyLCA4LCAyLCAxMjgsIDgsIDgsIDE2fSwKKwl7QUlDMzJYNF9GUkVRXzI0MDAwMDAwLCAxMTAyNSwgMiwgNywgNTI2NCwgNTEyLCAxNiwgMSwgNjQsIDMyLCA0LCAxNn0sCisJLyogMTZrIHJhdGUgKi8KKwl7QUlDMzJYNF9GUkVRXzEyMDAwMDAwLCAxNjAwMCwgMSwgNywgNjgwMCwgMzg0LCA1LCAzLCAxMjgsIDUsIDksIDEyfSwKKwl7QUlDMzJYNF9GUkVRXzI0MDAwMDAwLCAxNjAwMCwgMiwgNywgNjgwMCwgMzg0LCAxNSwgMSwgNjQsIDE4LCA1LCAxMn0sCisJe0FJQzMyWDRfRlJFUV8yNTAwMDAwMCwgMTYwMDAsIDIsIDcsIDM3MjgsIDM4NCwgMTUsIDEsIDY0LCAxOCwgNSwgMTJ9LAorCS8qIDIyLjA1ayByYXRlICovCisJe0FJQzMyWDRfRlJFUV8xMjAwMDAwMCwgMjIwNTAsIDEsIDcsIDUyNjQsIDI1NiwgNCwgNCwgMTI4LCA0LCA4LCA4fSwKKwl7QUlDMzJYNF9GUkVRXzI0MDAwMDAwLCAyMjA1MCwgMiwgNywgNTI2NCwgMjU2LCAxNiwgMSwgNjQsIDE2LCA0LCA4fSwKKwl7QUlDMzJYNF9GUkVRXzI1MDAwMDAwLCAyMjA1MCwgMiwgNywgMjI1MywgMjU2LCAxNiwgMSwgNjQsIDE2LCA0LCA4fSwKKwkvKiAzMmsgcmF0ZSAqLworCXtBSUMzMlg0X0ZSRVFfMTIwMDAwMDAsIDMyMDAwLCAxLCA3LCAxNjgwLCAxOTIsIDIsIDcsIDY0LCAyLCAyMSwgNn0sCisJe0FJQzMyWDRfRlJFUV8yNDAwMDAwMCwgMzIwMDAsIDIsIDcsIDE2ODAsIDE5MiwgNywgMiwgNjQsIDcsIDYsIDZ9LAorCS8qIDQ0LjFrIHJhdGUgKi8KKwl7QUlDMzJYNF9GUkVRXzEyMDAwMDAwLCA0NDEwMCwgMSwgNywgNTI2NCwgMTI4LCAyLCA4LCAxMjgsIDIsIDgsIDR9LAorCXtBSUMzMlg0X0ZSRVFfMjQwMDAwMDAsIDQ0MTAwLCAyLCA3LCA1MjY0LCAxMjgsIDgsIDIsIDY0LCA4LCA0LCA0fSwKKwl7QUlDMzJYNF9GUkVRXzI1MDAwMDAwLCA0NDEwMCwgMiwgNywgMjI1MywgMTI4LCA4LCAyLCA2NCwgOCwgNCwgNH0sCisJLyogNDhrIHJhdGUgKi8KKwl7QUlDMzJYNF9GUkVRXzEyMDAwMDAwLCA0ODAwMCwgMSwgOCwgMTkyMCwgMTI4LCAyLCA4LCAxMjgsIDIsIDgsIDR9LAorCXtBSUMzMlg0X0ZSRVFfMjQwMDAwMDAsIDQ4MDAwLCAyLCA4LCAxOTIwLCAxMjgsIDgsIDIsIDY0LCA4LCA0LCA0fSwKKwl7QUlDMzJYNF9GUkVRXzI1MDAwMDAwLCA0ODAwMCwgMiwgNywgODY0MywgMTI4LCA4LCAyLCA2NCwgOCwgNCwgNH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBocGxfb3V0cHV0X21peGVyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJMX0RBQyBTd2l0Y2giLCBBSUMzMlg0X0hQTFJPVVRFLCAzLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOMV9MIFN3aXRjaCIsIEFJQzMyWDRfSFBMUk9VVEUsIDIsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwcl9vdXRwdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIlJfREFDIFN3aXRjaCIsIEFJQzMyWDRfSFBSUk9VVEUsIDMsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiSU4xX1IgU3dpdGNoIiwgQUlDMzJYNF9IUFJST1VURSwgMiwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbG9sX291dHB1dF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTF9EQUMgU3dpdGNoIiwgQUlDMzJYNF9MT0xST1VURSwgMywgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbG9yX291dHB1dF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiUl9EQUMgU3dpdGNoIiwgQUlDMzJYNF9MT1JST1VURSwgMywgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGVmdF9pbnB1dF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiSU4xX0wgUCBTd2l0Y2giLCBBSUMzMlg0X0xNSUNQR0FQSU4sIDYsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiSU4yX0wgUCBTd2l0Y2giLCBBSUMzMlg0X0xNSUNQR0FQSU4sIDQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiSU4zX0wgUCBTd2l0Y2giLCBBSUMzMlg0X0xNSUNQR0FQSU4sIDIsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJpZ2h0X2lucHV0X21peGVyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJJTjFfUiBQIFN3aXRjaCIsIEFJQzMyWDRfUk1JQ1BHQVBJTiwgNiwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJJTjJfUiBQIFN3aXRjaCIsIEFJQzMyWDRfUk1JQ1BHQVBJTiwgNCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJJTjNfUiBQIFN3aXRjaCIsIEFJQzMyWDRfUk1JQ1BHQVBJTiwgMiwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYWljMzJ4NF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IFBsYXliYWNrIiwgQUlDMzJYNF9EQUNTRVRVUCwgNywgMCksCisJU05EX1NPQ19EQVBNX01JWEVSKCJIUEwgT3V0cHV0IE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICAgJmhwbF9vdXRwdXRfbWl4ZXJfY29udHJvbHNbMF0sCisJCQkgICBBUlJBWV9TSVpFKGhwbF9vdXRwdXRfbWl4ZXJfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJIUEwgUG93ZXIiLCBBSUMzMlg0X09VVFBXUkNUTCwgNSwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxPTCBPdXRwdXQgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICAmbG9sX291dHB1dF9taXhlcl9jb250cm9sc1swXSwKKwkJCSAgIEFSUkFZX1NJWkUobG9sX291dHB1dF9taXhlcl9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9QR0EoIkxPTCBQb3dlciIsIEFJQzMyWDRfT1VUUFdSQ1RMLCAzLCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBQbGF5YmFjayIsIEFJQzMyWDRfREFDU0VUVVAsIDYsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiSFBSIE91dHB1dCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgICZocHJfb3V0cHV0X21peGVyX2NvbnRyb2xzWzBdLAorCQkJICAgQVJSQVlfU0laRShocHJfb3V0cHV0X21peGVyX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX1BHQSgiSFBSIFBvd2VyIiwgQUlDMzJYNF9PVVRQV1JDVEwsIDQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiTE9SIE91dHB1dCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgICZsb3Jfb3V0cHV0X21peGVyX2NvbnRyb2xzWzBdLAorCQkJICAgQVJSQVlfU0laRShsb3Jfb3V0cHV0X21peGVyX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX1BHQSgiTE9SIFBvd2VyIiwgQUlDMzJYNF9PVVRQV1JDVEwsIDIsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiTGVmdCBJbnB1dCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgICZsZWZ0X2lucHV0X21peGVyX2NvbnRyb2xzWzBdLAorCQkJICAgQVJSQVlfU0laRShsZWZ0X2lucHV0X21peGVyX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJSaWdodCBJbnB1dCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgICZyaWdodF9pbnB1dF9taXhlcl9jb250cm9sc1swXSwKKwkJCSAgIEFSUkFZX1NJWkUocmlnaHRfaW5wdXRfbWl4ZXJfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IENhcHR1cmUiLCBBSUMzMlg0X0FEQ1NFVFVQLCA3LCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJSaWdodCBBREMiLCAiUmlnaHQgQ2FwdHVyZSIsIEFJQzMyWDRfQURDU0VUVVAsIDYsIDApLAorCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyIsIEFJQzMyWDRfTUlDQklBUywgNiwgMCksCisKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUEwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUFIiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMT0wiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1IiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklOMV9MIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFfUiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiSU4yX0wiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklOMl9SIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTjNfTCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiSU4zX1IiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGFpYzMyeDRfZGFwbV9yb3V0ZXNbXSA9IHsKKwkvKiBMZWZ0IE91dHB1dCAqLworCXsiSFBMIE91dHB1dCBNaXhlciIsICJMX0RBQyBTd2l0Y2giLCAiTGVmdCBEQUMifSwKKwl7IkhQTCBPdXRwdXQgTWl4ZXIiLCAiSU4xX0wgU3dpdGNoIiwgIklOMV9MIn0sCisKKwl7IkhQTCBQb3dlciIsIE5VTEwsICJIUEwgT3V0cHV0IE1peGVyIn0sCisJeyJIUEwiLCBOVUxMLCAiSFBMIFBvd2VyIn0sCisKKwl7IkxPTCBPdXRwdXQgTWl4ZXIiLCAiTF9EQUMgU3dpdGNoIiwgIkxlZnQgREFDIn0sCisKKwl7IkxPTCBQb3dlciIsIE5VTEwsICJMT0wgT3V0cHV0IE1peGVyIn0sCisJeyJMT0wiLCBOVUxMLCAiTE9MIFBvd2VyIn0sCisKKwkvKiBSaWdodCBPdXRwdXQgKi8KKwl7IkhQUiBPdXRwdXQgTWl4ZXIiLCAiUl9EQUMgU3dpdGNoIiwgIlJpZ2h0IERBQyJ9LAorCXsiSFBSIE91dHB1dCBNaXhlciIsICJJTjFfUiBTd2l0Y2giLCAiSU4xX1IifSwKKworCXsiSFBSIFBvd2VyIiwgTlVMTCwgIkhQUiBPdXRwdXQgTWl4ZXIifSwKKwl7IkhQUiIsIE5VTEwsICJIUFIgUG93ZXIifSwKKworCXsiTE9SIE91dHB1dCBNaXhlciIsICJSX0RBQyBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisKKwl7IkxPUiBQb3dlciIsIE5VTEwsICJMT1IgT3V0cHV0IE1peGVyIn0sCisJeyJMT1IiLCBOVUxMLCAiTE9SIFBvd2VyIn0sCisKKwkvKiBMZWZ0IGlucHV0ICovCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIklOMV9MIFAgU3dpdGNoIiwgIklOMV9MIn0sCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIklOMl9MIFAgU3dpdGNoIiwgIklOMl9MIn0sCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIklOM19MIFAgU3dpdGNoIiwgIklOM19MIn0sCisKKwl7IkxlZnQgQURDIiwgTlVMTCwgIkxlZnQgSW5wdXQgTWl4ZXIifSwKKworCS8qIFJpZ2h0IElucHV0ICovCisJeyJSaWdodCBJbnB1dCBNaXhlciIsICJJTjFfUiBQIFN3aXRjaCIsICJJTjFfUiJ9LAorCXsiUmlnaHQgSW5wdXQgTWl4ZXIiLCAiSU4yX1IgUCBTd2l0Y2giLCAiSU4yX1IifSwKKwl7IlJpZ2h0IElucHV0IE1peGVyIiwgIklOM19SIFAgU3dpdGNoIiwgIklOM19SIn0sCisKKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJSaWdodCBJbnB1dCBNaXhlciJ9LAorfTsKKworc3RhdGljIGlubGluZSBpbnQgYWljMzJ4NF9jaGFuZ2VfcGFnZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCXVuc2lnbmVkIGludCBuZXdfcGFnZSkKK3sKKwlzdHJ1Y3QgYWljMzJ4NF9wcml2ICphaWMzMng0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTggZGF0YVsyXTsKKwlpbnQgcmV0OworCisJZGF0YVswXSA9IDB4MDA7CisJZGF0YVsxXSA9IG5ld19wYWdlICYgMHhmZjsKKworCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKKwlpZiAocmV0ID09IDIpIHsKKwkJYWljMzJ4NC0+cGFnZV9ubyA9IG5ld19wYWdlOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gcmV0OworCX0KK30KKworc3RhdGljIGludCBhaWMzMng0X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCQl1bnNpZ25lZCBpbnQgdmFsKQoreworCXN0cnVjdCBhaWMzMng0X3ByaXYgKmFpYzMyeDQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1bnNpZ25lZCBpbnQgcGFnZSA9IHJlZyAvIDEyODsKKwl1bnNpZ25lZCBpbnQgZml4ZWRfcmVnID0gcmVnICUgMTI4OworCXU4IGRhdGFbMl07CisJaW50IHJldDsKKworCS8qIEEgd3JpdGUgdG8gQUlDMzJYNF9QU0VMIGlzIHJlYWxseSBhIG5vbi1leHBsaWNpdCBwYWdlIGNoYW5nZSAqLworCWlmIChyZWcgPT0gQUlDMzJYNF9QU0VMKQorCQlyZXR1cm4gYWljMzJ4NF9jaGFuZ2VfcGFnZShjb2RlYywgdmFsKTsKKworCWlmIChhaWMzMng0LT5wYWdlX25vICE9IHBhZ2UpIHsKKwkJcmV0ID0gYWljMzJ4NF9jaGFuZ2VfcGFnZShjb2RlYywgcGFnZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZGF0YVswXSA9IGZpeGVkX3JlZyAmIDB4ZmY7CisJZGF0YVsxXSA9IHZhbCAmIDB4ZmY7CisKKwlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWljMzJ4NF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzdHJ1Y3QgYWljMzJ4NF9wcml2ICphaWMzMng0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdW5zaWduZWQgaW50IHBhZ2UgPSByZWcgLyAxMjg7CisJdW5zaWduZWQgaW50IGZpeGVkX3JlZyA9IHJlZyAlIDEyODsKKwlpbnQgcmV0OworCisJaWYgKGFpYzMyeDQtPnBhZ2Vfbm8gIT0gcGFnZSkgeworCQlyZXQgPSBhaWMzMng0X2NoYW5nZV9wYWdlKGNvZGVjLCBwYWdlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjb2RlYy0+Y29udHJvbF9kYXRhLCBmaXhlZF9yZWcgJiAweGZmKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWljMzJ4NF9nZXRfZGl2cyhpbnQgbWNsaywgaW50IHJhdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaWMzMng0X2RpdnMpOyBpKyspIHsKKwkJaWYgKChhaWMzMng0X2RpdnNbaV0ucmF0ZSA9PSByYXRlKQorCQkgICAgJiYgKGFpYzMyeDRfZGl2c1tpXS5tY2xrID09IG1jbGspKSB7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlwcmludGsoS0VSTl9FUlIgImFpYzMyeDQ6IG1hc3RlciBjbG9jayBhbmQgc2FtcGxlIHJhdGUgaXMgbm90IHN1cHBvcnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYWljMzJ4NF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scygmY29kZWMtPmRhcG0sIGFpYzMyeDRfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRShhaWMzMng0X2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoJmNvZGVjLT5kYXBtLCBhaWMzMng0X2RhcG1fcm91dGVzLAorCQkJCUFSUkFZX1NJWkUoYWljMzJ4NF9kYXBtX3JvdXRlcykpOworCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKCZjb2RlYy0+ZGFwbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWljMzJ4NF9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJCQkgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IGFpYzMyeDRfcHJpdiAqYWljMzJ4NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSBBSUMzMlg0X0ZSRVFfMTIwMDAwMDA6CisJY2FzZSBBSUMzMlg0X0ZSRVFfMjQwMDAwMDA6CisJY2FzZSBBSUMzMlg0X0ZSRVFfMjUwMDAwMDA6CisJCWFpYzMyeDQtPnN5c2NsayA9IGZyZXE7CisJCXJldHVybiAwOworCX0KKwlwcmludGsoS0VSTl9FUlIgImFpYzMyeDQ6IGludmFsaWQgZnJlcXVlbmN5IHRvIHNldCBEQUkgc3lzdGVtIGNsb2NrXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBhaWMzMng0X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IGFpYzMyeDRfcHJpdiAqYWljMzJ4NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXU4IGlmYWNlX3JlZ18xOworCXU4IGlmYWNlX3JlZ18yOworCXU4IGlmYWNlX3JlZ18zOworCisJaWZhY2VfcmVnXzEgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFJQzMyWDRfSUZBQ0UxKTsKKwlpZmFjZV9yZWdfMSA9IGlmYWNlX3JlZ18xICYgfigzIDw8IDYgfCAzIDw8IDIpOworCWlmYWNlX3JlZ18yID0gc25kX3NvY19yZWFkKGNvZGVjLCBBSUMzMlg0X0lGQUNFMik7CisJaWZhY2VfcmVnXzIgPSAwOworCWlmYWNlX3JlZ18zID0gc25kX3NvY19yZWFkKGNvZGVjLCBBSUMzMlg0X0lGQUNFMyk7CisJaWZhY2VfcmVnXzMgPSBpZmFjZV9yZWdfMyAmIH4oMSA8PCAzKTsKKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYWljMzJ4NC0+bWFzdGVyID0gMTsKKwkJaWZhY2VfcmVnXzEgfD0gQUlDMzJYNF9CQ0xLTUFTVEVSIHwgQUlDMzJYNF9XQ0xLTUFTVEVSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWFpYzMyeDQtPm1hc3RlciA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiYWljMzJ4NDogaW52YWxpZCBEQUkgbWFzdGVyL3NsYXZlIGludGVyZmFjZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJaWZhY2VfcmVnXzEgfD0gKEFJQzMyWDRfRFNQX01PREUgPDwgQUlDMzJYNF9QTExKX1NISUZUKTsKKwkJaWZhY2VfcmVnXzMgfD0gKDEgPDwgMyk7IC8qIGludmVydCBiaXQgY2xvY2sgKi8KKwkJaWZhY2VfcmVnXzIgPSAweDAxOyAvKiBhZGQgb2Zmc2V0IDEgKi8KKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJaWZhY2VfcmVnXzEgfD0gKEFJQzMyWDRfRFNQX01PREUgPDwgQUlDMzJYNF9QTExKX1NISUZUKTsKKwkJaWZhY2VfcmVnXzMgfD0gKDEgPDwgMyk7IC8qIGludmVydCBiaXQgY2xvY2sgKi8KKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlpZmFjZV9yZWdfMSB8PQorCQkJKEFJQzMyWDRfUklHSFRfSlVTVElGSUVEX01PREUgPDwgQUlDMzJYNF9QTExKX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWlmYWNlX3JlZ18xIHw9CisJCQkoQUlDMzJYNF9MRUZUX0pVU1RJRklFRF9NT0RFIDw8IEFJQzMyWDRfUExMSl9TSElGVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiYWljMzJ4NDogaW52YWxpZCBEQUkgaW50ZXJmYWNlIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfSUZBQ0UxLCBpZmFjZV9yZWdfMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9JRkFDRTIsIGlmYWNlX3JlZ18yKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X0lGQUNFMywgaWZhY2VfcmVnXzMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpYzMyeDRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgYWljMzJ4NF9wcml2ICphaWMzMng0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTggZGF0YTsKKwlpbnQgaTsKKworCWkgPSBhaWMzMng0X2dldF9kaXZzKGFpYzMyeDQtPnN5c2NsaywgcGFyYW1zX3JhdGUocGFyYW1zKSk7CisJaWYgKGkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYWljMzJ4NDogc2FtcGxpbmcgcmF0ZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIGk7CisJfQorCisJLyogVXNlIFBMTCBhcyBDT0RFQ19DTEtJTiBhbmQgREFDX01PRF9DTEsgYXMgQkRJVl9DTEtJTiAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfQ0xLTVVYLCBBSUMzMlg0X1BMTENMS0lOKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X0lGQUNFMywgQUlDMzJYNF9EQUNNT0QyQkNMSyk7CisKKwkvKiBXZSB3aWxsIGZpeCBSIHZhbHVlIHRvIDEgYW5kIHdpbGwgbWFrZSBQICYgSj1LLkQgYXMgdmFyaWFsYmxlICovCisJZGF0YSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9QTExQUik7CisJZGF0YSAmPSB+KDcgPDwgNCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9QTExQUiwKKwkJICAgICAgKGRhdGEgfCAoYWljMzJ4NF9kaXZzW2ldLnBfdmFsIDw8IDQpIHwgMHgwMSkpOworCisJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9QTExKLCBhaWMzMng0X2RpdnNbaV0ucGxsX2opOworCisJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9QTExETVNCLCAoYWljMzJ4NF9kaXZzW2ldLnBsbF9kID4+IDgpKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X1BMTERMU0IsCisJCSAgICAgIChhaWMzMng0X2RpdnNbaV0ucGxsX2QgJiAweGZmKSk7CisKKwkvKiBOREFDIGRpdmlkZXIgdmFsdWUgKi8KKwlkYXRhID0gc25kX3NvY19yZWFkKGNvZGVjLCBBSUMzMlg0X05EQUMpOworCWRhdGEgJj0gfigweDdmKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X05EQUMsIGRhdGEgfCBhaWMzMng0X2RpdnNbaV0ubmRhYyk7CisKKwkvKiBNREFDIGRpdmlkZXIgdmFsdWUgKi8KKwlkYXRhID0gc25kX3NvY19yZWFkKGNvZGVjLCBBSUMzMlg0X01EQUMpOworCWRhdGEgJj0gfigweDdmKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X01EQUMsIGRhdGEgfCBhaWMzMng0X2RpdnNbaV0ubWRhYyk7CisKKwkvKiBET1NSIE1TQiAmIExTQiB2YWx1ZXMgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X0RPU1JNU0IsIGFpYzMyeDRfZGl2c1tpXS5kb3NyID4+IDgpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfRE9TUkxTQiwKKwkJICAgICAgKGFpYzMyeDRfZGl2c1tpXS5kb3NyICYgMHhmZikpOworCisJLyogTkFEQyBkaXZpZGVyIHZhbHVlICovCisJZGF0YSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9OQURDKTsKKwlkYXRhICY9IH4oMHg3Zik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9OQURDLCBkYXRhIHwgYWljMzJ4NF9kaXZzW2ldLm5hZGMpOworCisJLyogTUFEQyBkaXZpZGVyIHZhbHVlICovCisJZGF0YSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9NQURDKTsKKwlkYXRhICY9IH4oMHg3Zik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9NQURDLCBkYXRhIHwgYWljMzJ4NF9kaXZzW2ldLm1hZGMpOworCisJLyogQU9TUiB2YWx1ZSAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfQU9TUiwgYWljMzJ4NF9kaXZzW2ldLmFvc3IpOworCisJLyogQkNMSyBOIGRpdmlkZXIgKi8KKwlkYXRhID0gc25kX3NvY19yZWFkKGNvZGVjLCBBSUMzMlg0X0JDTEtOKTsKKwlkYXRhICY9IH4oMHg3Zik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9CQ0xLTiwgZGF0YSB8IGFpYzMyeDRfZGl2c1tpXS5ibGNrX04pOworCisJZGF0YSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9JRkFDRTEpOworCWRhdGEgPSBkYXRhICYgfigzIDw8IDQpOworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWRhdGEgfD0gKEFJQzMyWDRfV09SRF9MRU5fMjBCSVRTIDw8IEFJQzMyWDRfRE9TUk1TQl9TSElGVCk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWRhdGEgfD0gKEFJQzMyWDRfV09SRF9MRU5fMjRCSVRTIDw8IEFJQzMyWDRfRE9TUk1TQl9TSElGVCk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWRhdGEgfD0gKEFJQzMyWDRfV09SRF9MRU5fMzJCSVRTIDw8IEFJQzMyWDRfRE9TUk1TQl9TSElGVCk7CisJCWJyZWFrOworCX0KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X0lGQUNFMSwgZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaWMzMng0X211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTggZGFjX3JlZzsKKworCWRhY19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFJQzMyWDRfREFDTVVURSkgJiB+QUlDMzJYNF9NVVRFT047CisJaWYgKG11dGUpCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfREFDTVVURSwgZGFjX3JlZyB8IEFJQzMyWDRfTVVURU9OKTsKKwllbHNlCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfREFDTVVURSwgZGFjX3JlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWljMzJ4NF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdHJ1Y3QgYWljMzJ4NF9wcml2ICphaWMzMng0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTggdmFsdWU7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWlmIChhaWMzMng0LT5tYXN0ZXIpIHsKKwkJCS8qIFN3aXRjaCBvbiBQTEwgKi8KKwkJCXZhbHVlID0gc25kX3NvY19yZWFkKGNvZGVjLCBBSUMzMlg0X1BMTFBSKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfUExMUFIsCisJCQkJICAgICAgKHZhbHVlIHwgQUlDMzJYNF9QTExFTikpOworCisJCQkvKiBTd2l0Y2ggb24gTkRBQyBEaXZpZGVyICovCisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9OREFDKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfTkRBQywKKwkJCQkgICAgICB2YWx1ZSB8IEFJQzMyWDRfTkRBQ0VOKTsKKworCQkJLyogU3dpdGNoIG9uIE1EQUMgRGl2aWRlciAqLworCQkJdmFsdWUgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFJQzMyWDRfTURBQyk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X01EQUMsCisJCQkJICAgICAgdmFsdWUgfCBBSUMzMlg0X01EQUNFTik7CisKKwkJCS8qIFN3aXRjaCBvbiBOQURDIERpdmlkZXIgKi8KKwkJCXZhbHVlID0gc25kX3NvY19yZWFkKGNvZGVjLCBBSUMzMlg0X05BREMpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9OQURDLAorCQkJCSAgICAgIHZhbHVlIHwgQUlDMzJYNF9NREFDRU4pOworCisJCQkvKiBTd2l0Y2ggb24gTUFEQyBEaXZpZGVyICovCisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9NQURDKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfTUFEQywKKwkJCQkgICAgICB2YWx1ZSB8IEFJQzMyWDRfTURBQ0VOKTsKKworCQkJLyogU3dpdGNoIG9uIEJDTEtfTiBEaXZpZGVyICovCisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9CQ0xLTik7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X0JDTEtOLAorCQkJCSAgICAgIHZhbHVlIHwgQUlDMzJYNF9CQ0xLRU4pOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChhaWMzMng0LT5tYXN0ZXIpIHsKKwkJCS8qIFN3aXRjaCBvZmYgUExMICovCisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9QTExQUik7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X1BMTFBSLAorCQkJCSAgICAgICh2YWx1ZSAmIH5BSUMzMlg0X1BMTEVOKSk7CisKKwkJCS8qIFN3aXRjaCBvZmYgTkRBQyBEaXZpZGVyICovCisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9OREFDKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfTkRBQywKKwkJCQkgICAgICB2YWx1ZSAmIH5BSUMzMlg0X05EQUNFTik7CisKKwkJCS8qIFN3aXRjaCBvZmYgTURBQyBEaXZpZGVyICovCisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9NREFDKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfTURBQywKKwkJCQkgICAgICB2YWx1ZSAmIH5BSUMzMlg0X01EQUNFTik7CisKKwkJCS8qIFN3aXRjaCBvZmYgTkFEQyBEaXZpZGVyICovCisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9OQURDKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfTkFEQywKKwkJCQkgICAgICB2YWx1ZSAmIH5BSUMzMlg0X05EQUNFTik7CisKKwkJCS8qIFN3aXRjaCBvZmYgTUFEQyBEaXZpZGVyICovCisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9NQURDKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfTUFEQywKKwkJCQkgICAgICB2YWx1ZSAmIH5BSUMzMlg0X01EQUNFTik7CisJCQl2YWx1ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDMzJYNF9CQ0xLTik7CisKKwkJCS8qIFN3aXRjaCBvZmYgQkNMS19OIERpdmlkZXIgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfQkNMS04sCisJCQkJICAgICAgdmFsdWUgJiB+QUlDMzJYNF9CQ0xLRU4pOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJYnJlYWs7CisJfQorCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBBSUMzMlg0X1JBVEVTCVNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAKKyNkZWZpbmUgQUlDMzJYNF9GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSBcCisJCQkgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWljMzJ4NF9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IGFpYzMyeDRfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUgPSBhaWMzMng0X211dGUsCisJLnNldF9mbXQgPSBhaWMzMng0X3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrID0gYWljMzJ4NF9zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGFpYzMyeDRfZGFpID0geworCS5uYW1lID0gInRsdjMyMGFpYzMyeDQtaGlmaSIsCisJLnBsYXliYWNrID0geworCQkgICAgIC5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCSAgICAgLmNoYW5uZWxzX21pbiA9IDEsCisJCSAgICAgLmNoYW5uZWxzX21heCA9IDIsCisJCSAgICAgLnJhdGVzID0gQUlDMzJYNF9SQVRFUywKKwkJICAgICAuZm9ybWF0cyA9IEFJQzMyWDRfRk9STUFUUyx9LAorCS5jYXB0dXJlID0geworCQkgICAgLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkgICAgLmNoYW5uZWxzX21pbiA9IDEsCisJCSAgICAuY2hhbm5lbHNfbWF4ID0gMiwKKwkJICAgIC5yYXRlcyA9IEFJQzMyWDRfUkFURVMsCisJCSAgICAuZm9ybWF0cyA9IEFJQzMyWDRfRk9STUFUUyx9LAorCS5vcHMgPSAmYWljMzJ4NF9vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCit9OworCitzdGF0aWMgaW50IGFpYzMyeDRfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlhaWMzMng0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaWMzMng0X3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJYWljMzJ4NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpYzMyeDRfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhaWMzMng0X3ByaXYgKmFpYzMyeDQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1MzIgdG1wX3JlZzsKKworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KSBpMmNfbWFzdGVyX3NlbmQ7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGFpYzMyeDQtPmNvbnRyb2xfZGF0YTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfUkVTRVQsIDB4MDEpOworCisJLyogUG93ZXIgcGxhdGZvcm0gY29uZmlndXJhdGlvbiAqLworCWlmIChhaWMzMng0LT5wb3dlcl9jZmcgJiBBSUMzMlg0X1BXUl9NSUNCSUFTXzIwNzVfTERPSU4pIHsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9NSUNCSUFTLCBBSUMzMlg0X01JQ0JJQVNfTERPSU4gfAorCQkJCQkJICAgICAgQUlDMzJYNF9NSUNCSUFTXzIwNzVWKTsKKwl9CisJaWYgKGFpYzMyeDQtPnBvd2VyX2NmZyAmIEFJQzMyWDRfUFdSX0FWRERfRFZERF9XRUFLX0RJU0FCTEUpIHsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9QV1JDRkcsIEFJQzMyWDRfQVZERFdFQUtESVNBQkxFKTsKKwl9CisJaWYgKGFpYzMyeDQtPnBvd2VyX2NmZyAmIEFJQzMyWDRfUFdSX0FJQzMyWDRfTERPX0VOQUJMRSkgeworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzMlg0X0xET0NUTCwgQUlDMzJYNF9MRE9DVExFTik7CisJfQorCXRtcF9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFJQzMyWDRfQ01NT0RFKTsKKwlpZiAoYWljMzJ4NC0+cG93ZXJfY2ZnICYgQUlDMzJYNF9QV1JfQ01NT0RFX0xET0lOX1JBTkdFXzE4XzM2KSB7CisJCXRtcF9yZWcgfD0gQUlDMzJYNF9MRE9JTl8xOF8zNjsKKwl9CisJaWYgKGFpYzMyeDQtPnBvd2VyX2NmZyAmIEFJQzMyWDRfUFdSX0NNTU9ERV9IUF9MRE9JTl9QT1dFUkVEKSB7CisJCXRtcF9yZWcgfD0gQUlDMzJYNF9MRE9JTjJIUDsKKwl9CisJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9DTU1PREUsIHRtcF9yZWcpOworCisJLyogRG8gREFDcyBuZWVkIHRvIGJlIHN3YXBwZWQ/ICovCisJaWYgKGFpYzMyeDQtPnN3YXBkYWNzKSB7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfREFDU0VUVVAsIEFJQzMyWDRfTERBQzJSQ0hOIHwgQUlDMzJYNF9SREFDMkxDSE4pOworCX0gZWxzZSB7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfREFDU0VUVVAsIEFJQzMyWDRfTERBQzJMQ0hOIHwgQUlDMzJYNF9SREFDMlJDSE4pOworCX0KKworCS8qIE1pYyBQR0Egcm91dGluZyAqLworCWlmIChhaWMzMng0LT5taWNwZ2Ffcm91dGluZyB8IEFJQzMyWDRfTUlDUEdBX1JPVVRFX0xNSUNfSU4yUl8xMEspIHsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUlDMzJYNF9MTUlDUEdBTklOLCBBSUMzMlg0X0xNSUNQR0FOSU5fSU4yUl8xMEspOworCX0KKwlpZiAoYWljMzJ4NC0+bWljcGdhX3JvdXRpbmcgfCBBSUMzMlg0X01JQ1BHQV9ST1VURV9STUlDX0lOMUxfMTBLKSB7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzMyWDRfUk1JQ1BHQU5JTiwgQUlDMzJYNF9STUlDUEdBTklOX0lOMUxfMTBLKTsKKwl9CisKKwlhaWMzMng0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzMyeDRfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKGFpYzMyeDRfc25kX2NvbnRyb2xzKSk7CisJYWljMzJ4NF9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaWMzMng0X3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJYWljMzJ4NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9haWMzMng0ID0geworCS5yZWFkID0gYWljMzJ4NF9yZWFkLAorCS53cml0ZSA9IGFpYzMyeDRfd3JpdGUsCisJLnByb2JlID0gYWljMzJ4NF9wcm9iZSwKKwkucmVtb3ZlID0gYWljMzJ4NF9yZW1vdmUsCisJLnN1c3BlbmQgPSBhaWMzMng0X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFpYzMyeDRfcmVzdW1lLAorCS5zZXRfYmlhc19sZXZlbCA9IGFpYzMyeDRfc2V0X2JpYXNfbGV2ZWwsCit9OworCitzdGF0aWMgX19kZXZpbml0IGludCBhaWMzMng0X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYWljMzJ4NF9wZGF0YSAqcGRhdGEgPSBpMmMtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBhaWMzMng0X3ByaXYgKmFpYzMyeDQ7CisJaW50IHJldDsKKworCWFpYzMyeDQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWljMzJ4NF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFpYzMyeDQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhaWMzMng0LT5jb250cm9sX2RhdGEgPSBpMmM7CisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgYWljMzJ4NCk7CisKKwlpZiAocGRhdGEpIHsKKwkJYWljMzJ4NC0+cG93ZXJfY2ZnID0gcGRhdGEtPnBvd2VyX2NmZzsKKwkJYWljMzJ4NC0+c3dhcGRhY3MgPSBwZGF0YS0+c3dhcGRhY3M7CisJCWFpYzMyeDQtPm1pY3BnYV9yb3V0aW5nID0gcGRhdGEtPm1pY3BnYV9yb3V0aW5nOworCX0gZWxzZSB7CisJCWFpYzMyeDQtPnBvd2VyX2NmZyA9IDA7CisJCWFpYzMyeDQtPnN3YXBkYWNzID0gZmFsc2U7CisJCWFpYzMyeDQtPm1pY3BnYV9yb3V0aW5nID0gMDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZpMmMtPmRldiwKKwkJCSZzb2NfY29kZWNfZGV2X2FpYzMyeDQsICZhaWMzMng0X2RhaSwgMSk7CisJaWYgKHJldCA8IDApCisJCWtmcmVlKGFpYzMyeDQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IGFpYzMyeDRfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmY2xpZW50LT5kZXYpOworCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFpYzMyeDRfaTJjX2lkW10gPSB7CisJeyAidGx2MzIwYWljMzJ4NCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWljMzJ4NF9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWljMzJ4NF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRsdjMyMGFpYzMyeDQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIGFpYzMyeDRfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKGFpYzMyeDRfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gYWljMzJ4NF9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhaWMzMng0X21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZhaWMzMng0X2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBhaWMzMng0IEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGFpYzMyeDRfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhaWMzMng0X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmYWljMzJ4NF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFpYzMyeDRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyB0bHYzMjBhaWMzMng0IGNvZGVjIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSmF2aWVyIE1hcnRpbiA8amF2aWVyLm1hcnRpbkB2aXN0YS1zaWxpY29uLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMzJ4NC5oIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzMng0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlMmIyNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMzJ4NC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogdGx2MzIwYWljMzJ4NC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisKKyNpZm5kZWYgX1RMVjMyMEFJQzMyWDRfSAorI2RlZmluZSBfVExWMzIwQUlDMzJYNF9ICisKKy8qIHRsdjMyMGFpYzMyeDQgcmVnaXN0ZXIgc3BhY2UgKGluIGRlY2ltYWwgdG8gbWF0Y2ggZGF0YXNoZWV0KSAqLworCisjZGVmaW5lIEFJQzMyWDRfUEFHRTEJCTEyOAorCisjZGVmaW5lCUFJQzMyWDRfUFNFTAkJMAorI2RlZmluZQlBSUMzMlg0X1JFU0VUCQkxCisjZGVmaW5lCUFJQzMyWDRfQ0xLTVVYCQk0CisjZGVmaW5lCUFJQzMyWDRfUExMUFIJCTUKKyNkZWZpbmUJQUlDMzJYNF9QTExKCQk2CisjZGVmaW5lCUFJQzMyWDRfUExMRE1TQgkJNworI2RlZmluZQlBSUMzMlg0X1BMTERMU0IJCTgKKyNkZWZpbmUJQUlDMzJYNF9OREFDCQkxMQorI2RlZmluZQlBSUMzMlg0X01EQUMJCTEyCisjZGVmaW5lIEFJQzMyWDRfRE9TUk1TQgkJMTMKKyNkZWZpbmUgQUlDMzJYNF9ET1NSTFNCCQkxNAorI2RlZmluZQlBSUMzMlg0X05BREMJCTE4CisjZGVmaW5lCUFJQzMyWDRfTUFEQwkJMTkKKyNkZWZpbmUgQUlDMzJYNF9BT1NSCQkyMAorI2RlZmluZSBBSUMzMlg0X0NMS01VWDIJCTI1CisjZGVmaW5lIEFJQzMyWDRfQ0xLT1VUTQkJMjYKKyNkZWZpbmUgQUlDMzJYNF9JRkFDRTEJCTI3CisjZGVmaW5lIEFJQzMyWDRfSUZBQ0UyCQkyOAorI2RlZmluZSBBSUMzMlg0X0lGQUNFMwkJMjkKKyNkZWZpbmUgQUlDMzJYNF9CQ0xLTgkJMzAKKyNkZWZpbmUgQUlDMzJYNF9JRkFDRTQJCTMxCisjZGVmaW5lIEFJQzMyWDRfSUZBQ0U1CQkzMgorI2RlZmluZSBBSUMzMlg0X0lGQUNFNgkJMzMKKyNkZWZpbmUgQUlDMzJYNF9ET1VUQ1RMCQk1MworI2RlZmluZSBBSUMzMlg0X0RJTkNUTAkJNTQKKyNkZWZpbmUgQUlDMzJYNF9EQUNTUEIJCTYwCisjZGVmaW5lIEFJQzMyWDRfQURDU1BCCQk2MQorI2RlZmluZSBBSUMzMlg0X0RBQ1NFVFVQCTYzCisjZGVmaW5lIEFJQzMyWDRfREFDTVVURQkJNjQKKyNkZWZpbmUgQUlDMzJYNF9MREFDVk9MCQk2NQorI2RlZmluZSBBSUMzMlg0X1JEQUNWT0wJCTY2CisjZGVmaW5lIEFJQzMyWDRfQURDU0VUVVAJODEKKyNkZWZpbmUJQUlDMzJYNF9BRENGR0EJCTgyCisjZGVmaW5lIEFJQzMyWDRfTEFEQ1ZPTAkJODMKKyNkZWZpbmUgQUlDMzJYNF9SQURDVk9MCQk4NAorI2RlZmluZSBBSUMzMlg0X0xBR0MxCQk4NgorI2RlZmluZSBBSUMzMlg0X0xBR0MyCQk4NworI2RlZmluZSBBSUMzMlg0X0xBR0MzCQk4OAorI2RlZmluZSBBSUMzMlg0X0xBR0M0CQk4OQorI2RlZmluZSBBSUMzMlg0X0xBR0M1CQk5MAorI2RlZmluZSBBSUMzMlg0X0xBR0M2CQk5MQorI2RlZmluZSBBSUMzMlg0X0xBR0M3CQk5MgorI2RlZmluZSBBSUMzMlg0X1JBR0MxCQk5NAorI2RlZmluZSBBSUMzMlg0X1JBR0MyCQk5NQorI2RlZmluZSBBSUMzMlg0X1JBR0MzCQk5NgorI2RlZmluZSBBSUMzMlg0X1JBR0M0CQk5NworI2RlZmluZSBBSUMzMlg0X1JBR0M1CQk5OAorI2RlZmluZSBBSUMzMlg0X1JBR0M2CQk5OQorI2RlZmluZSBBSUMzMlg0X1JBR0M3CQkxMDAKKyNkZWZpbmUgQUlDMzJYNF9QV1JDRkcJCShBSUMzMlg0X1BBR0UxICsgMSkKKyNkZWZpbmUgQUlDMzJYNF9MRE9DVEwJCShBSUMzMlg0X1BBR0UxICsgMikKKyNkZWZpbmUgQUlDMzJYNF9PVVRQV1JDVEwJKEFJQzMyWDRfUEFHRTEgKyA5KQorI2RlZmluZSBBSUMzMlg0X0NNTU9ERQkJKEFJQzMyWDRfUEFHRTEgKyAxMCkKKyNkZWZpbmUgQUlDMzJYNF9IUExST1VURQkoQUlDMzJYNF9QQUdFMSArIDEyKQorI2RlZmluZSBBSUMzMlg0X0hQUlJPVVRFCShBSUMzMlg0X1BBR0UxICsgMTMpCisjZGVmaW5lIEFJQzMyWDRfTE9MUk9VVEUJKEFJQzMyWDRfUEFHRTEgKyAxNCkKKyNkZWZpbmUgQUlDMzJYNF9MT1JST1VURQkoQUlDMzJYNF9QQUdFMSArIDE1KQorI2RlZmluZQlBSUMzMlg0X0hQTEdBSU4JCShBSUMzMlg0X1BBR0UxICsgMTYpCisjZGVmaW5lCUFJQzMyWDRfSFBSR0FJTgkJKEFJQzMyWDRfUEFHRTEgKyAxNykKKyNkZWZpbmUJQUlDMzJYNF9MT0xHQUlOCQkoQUlDMzJYNF9QQUdFMSArIDE4KQorI2RlZmluZQlBSUMzMlg0X0xPUkdBSU4JCShBSUMzMlg0X1BBR0UxICsgMTkpCisjZGVmaW5lIEFJQzMyWDRfSEVBRFNUQVJUCShBSUMzMlg0X1BBR0UxICsgMjApCisjZGVmaW5lIEFJQzMyWDRfTUlDQklBUwkJKEFJQzMyWDRfUEFHRTEgKyA1MSkKKyNkZWZpbmUgQUlDMzJYNF9MTUlDUEdBUElOCShBSUMzMlg0X1BBR0UxICsgNTIpCisjZGVmaW5lIEFJQzMyWDRfTE1JQ1BHQU5JTgkoQUlDMzJYNF9QQUdFMSArIDU0KQorI2RlZmluZSBBSUMzMlg0X1JNSUNQR0FQSU4JKEFJQzMyWDRfUEFHRTEgKyA1NSkKKyNkZWZpbmUgQUlDMzJYNF9STUlDUEdBTklOCShBSUMzMlg0X1BBR0UxICsgNTcpCisjZGVmaW5lIEFJQzMyWDRfRkxPQVRJTkdJTlBVVAkoQUlDMzJYNF9QQUdFMSArIDU4KQorI2RlZmluZSBBSUMzMlg0X0xNSUNQR0FWT0wJKEFJQzMyWDRfUEFHRTEgKyA1OSkKKyNkZWZpbmUgQUlDMzJYNF9STUlDUEdBVk9MCShBSUMzMlg0X1BBR0UxICsgNjApCisKKyNkZWZpbmUgQUlDMzJYNF9GUkVRXzEyMDAwMDAwIDEyMDAwMDAwCisjZGVmaW5lIEFJQzMyWDRfRlJFUV8yNDAwMDAwMCAyNDAwMDAwMAorI2RlZmluZSBBSUMzMlg0X0ZSRVFfMjUwMDAwMDAgMjUwMDAwMDAKKworI2RlZmluZSBBSUMzMlg0X1dPUkRfTEVOXzE2QklUUwkJMHgwMAorI2RlZmluZSBBSUMzMlg0X1dPUkRfTEVOXzIwQklUUwkJMHgwMQorI2RlZmluZSBBSUMzMlg0X1dPUkRfTEVOXzI0QklUUwkJMHgwMgorI2RlZmluZSBBSUMzMlg0X1dPUkRfTEVOXzMyQklUUwkJMHgwMworCisjZGVmaW5lIEFJQzMyWDRfSTJTX01PREUJCTB4MDAKKyNkZWZpbmUgQUlDMzJYNF9EU1BfTU9ERQkJMHgwMQorI2RlZmluZSBBSUMzMlg0X1JJR0hUX0pVU1RJRklFRF9NT0RFCTB4MDIKKyNkZWZpbmUgQUlDMzJYNF9MRUZUX0pVU1RJRklFRF9NT0RFCTB4MDMKKworI2RlZmluZSBBSUMzMlg0X0FWRERXRUFLRElTQUJMRQkJMHgwOAorI2RlZmluZSBBSUMzMlg0X0xET0NUTEVOCQkweDAxCisKKyNkZWZpbmUgQUlDMzJYNF9MRE9JTl8xOF8zNgkJMHgwMQorI2RlZmluZSBBSUMzMlg0X0xET0lOMkhQCQkweDAyCisKKyNkZWZpbmUgQUlDMzJYNF9EQUNTUEJMT0NLX01BU0sJCTB4MWYKKyNkZWZpbmUgQUlDMzJYNF9BRENTUEJMT0NLX01BU0sJCTB4MWYKKworI2RlZmluZSBBSUMzMlg0X1BMTEpfU0hJRlQJCTYKKyNkZWZpbmUgQUlDMzJYNF9ET1NSTVNCX1NISUZUCQk0CisKKyNkZWZpbmUgQUlDMzJYNF9QTExDTEtJTgkJMHgwMworCisjZGVmaW5lIEFJQzMyWDRfTUlDQklBU19MRE9JTgkJMHgwOAorI2RlZmluZSBBSUMzMlg0X01JQ0JJQVNfMjA3NVYJCTB4NjAKKworI2RlZmluZSBBSUMzMlg0X0xNSUNQR0FOSU5fSU4yUl8xMEsJMHgxMAorI2RlZmluZSBBSUMzMlg0X1JNSUNQR0FOSU5fSU4xTF8xMEsJMHgxMAorCisjZGVmaW5lIEFJQzMyWDRfTE1JQ1BHQVZPTF9OT0dBSU4JMHg4MAorI2RlZmluZSBBSUMzMlg0X1JNSUNQR0FWT0xfTk9HQUlOCTB4ODAKKworI2RlZmluZSBBSUMzMlg0X0JDTEtNQVNURVIJCTB4MDgKKyNkZWZpbmUgQUlDMzJYNF9XQ0xLTUFTVEVSCQkweDA0CisjZGVmaW5lIEFJQzMyWDRfUExMRU4JCQkoMHgwMSA8PCA3KQorI2RlZmluZSBBSUMzMlg0X05EQUNFTgkJCSgweDAxIDw8IDcpCisjZGVmaW5lIEFJQzMyWDRfTURBQ0VOCQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgQUlDMzJYNF9OQURDRU4JCQkoMHgwMSA8PCA3KQorI2RlZmluZSBBSUMzMlg0X01BRENFTgkJCSgweDAxIDw8IDcpCisjZGVmaW5lIEFJQzMyWDRfQkNMS0VOCQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgQUlDMzJYNF9EQUNFTgkJCSgweDAzIDw8IDYpCisjZGVmaW5lIEFJQzMyWDRfUkRBQzJMQ0hOCQkoMHgwMiA8PCAyKQorI2RlZmluZSBBSUMzMlg0X0xEQUMyUkNITgkJKDB4MDIgPDwgNCkKKyNkZWZpbmUgQUlDMzJYNF9MREFDMkxDSE4JCSgweDAxIDw8IDQpCisjZGVmaW5lIEFJQzMyWDRfUkRBQzJSQ0hOCQkoMHgwMSA8PCAyKQorCisjZGVmaW5lIEFJQzMyWDRfU1NURVAyV0NMSwkJMHgwMQorI2RlZmluZSBBSUMzMlg0X01VVEVPTgkJCTB4MEMKKyNkZWZpbmUJQUlDMzJYNF9EQUNNT0QyQkNMSwkJMHgwMQorCisjZW5kaWYJCQkJLyogX1RMVjMyMEFJQzMyWDRfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCmluZGV4IDcxZDdiZTguLjAwYjZkODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKQEAgLTE2MTUsNiArMTYxNSw3IEBACiAJfSwKIAl7IH0sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRsdjMyMGRhYzMzX2kyY19pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0bHYzMjBkYWMzM19pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCmluZGV4IDRiYmYxYjEuLjQ4MmZjZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCkBAIC03MjQsOCArNzI0LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB0d2w2MDQwX2hzX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgcmVwb3J0KQorc3RhdGljIHZvaWQgdHdsNjA0MF9oc19qYWNrX3JlcG9ydChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHJlcG9ydCkKIHsKIAlzdHJ1Y3QgdHdsNjA0MF9kYXRhICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJaW50IHN0YXR1czsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKaW5kZXggZTc2ODQ3YS4uNDhmZmQ0MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKQEAgLTQ4Niw3ICs0ODYsOCBAQAogc3RhdGljIGludCB1ZGExMzR4X3NvY19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHVkYTEzNHhfcHJpdiAqdWRhMTM0eDsKLQlzdHJ1Y3QgdWRhMTM0eF9wbGF0Zm9ybV9kYXRhICpwZCA9IGRldl9nZXRfZHJ2ZGF0YShjb2RlYy0+Y2FyZC0+ZGV2KTsKKwlzdHJ1Y3QgdWRhMTM0eF9wbGF0Zm9ybV9kYXRhICpwZCA9IGNvZGVjLT5jYXJkLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisKIAlpbnQgcmV0OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVURBMTM0WCBTb0MgQXVkaW8gQ29kZWNcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMKaW5kZXggODBkZGY0Zi4uYTNiOWNiYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5jCkBAIC04MzYsMjQgKzgzNiwyNSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHdtMjAwMF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgd20yMDAwX2kyY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CiAKIAlyZXR1cm4gd20yMDAwX2FuY190cmFuc2l0aW9uKHdtMjAwMCwgQU5DX09GRik7CiB9CiAKLXN0YXRpYyBpbnQgd20yMDAwX2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3N0YXRpYyBpbnQgd20yMDAwX2kyY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKIAogCXJldHVybiB3bTIwMDBfYW5jX3NldF9tb2RlKHdtMjAwMCk7CiB9Ci0jZWxzZQotI2RlZmluZSB3bTIwMDBfaTJjX3N1c3BlbmQgTlVMTAotI2RlZmluZSB3bTIwMDBfaTJjX3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHdtMjAwMF9wbSwgd20yMDAwX2kyY19zdXNwZW5kLCB3bTIwMDBfaTJjX3Jlc3VtZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTIwMDBfaTJjX2lkW10gPSB7CiAJeyAid20yMDAwIiwgMCB9LAogCXsgfQpAQCAtODY0LDExICs4NjUsMTAgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJ3bTIwMDAiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJndtMjAwMF9wbSwKIAl9LAogCS5wcm9iZSA9IHdtMjAwMF9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtMjAwMF9pMmNfcmVtb3ZlKSwKLQkuc3VzcGVuZCA9IHdtMjAwMF9pMmNfc3VzcGVuZCwKLQkucmVzdW1lID0gd20yMDAwX2kyY19yZXN1bWUsCiAJLnNodXRkb3duID0gd20yMDAwX2kyY19zaHV0ZG93biwKIAkuaWRfdGFibGUgPSB3bTIwMDBfaTJjX2lkLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTIzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUyMy5jCmluZGV4IDVlYjJmNTAuLjRmZDRkOGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTIzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1MjMuYwpAQCAtNTgsNyArNTgsNyBAQAogCTB4MDAwMCwgICAgIC8qIFI4IC0gWkVST19ERVRFQ1QgKi8KIH07CiAKLXN0YXRpYyBpbnQgd204NTIzX3ZvbGF0aWxlX3JlZ2lzdGVyKHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW50IHdtODUyM192b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFdNODUyM19ERVZJQ0VfSUQ6CkBAIC00MTQsNyArNDE0LDYgQEAKIHN0YXRpYyBpbnQgd204NTIzX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd204NTIzX3ByaXYgKndtODUyMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAlpbnQgcmV0LCBpOwogCiAJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwpAQCAtNDcxLDggKzQ3MCw5IEBACiAJfQogCiAJLyogQ2hhbmdlIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyAtIGxhdGNoIFZVIGFuZCBlbmFibGUgWkMgKi8KLQlyZWdfY2FjaGVbV004NTIzX0RBQ19HQUlOUl0gfD0gV004NTIzX0RBQ1JfVlU7Ci0JcmVnX2NhY2hlW1dNODUyM19EQUNfQ1RSTDNdIHw9IFdNODUyM19aQzsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg1MjNfREFDX0dBSU5SLAorCQkJICAgIFdNODUyM19EQUNSX1ZVLCBXTTg1MjNfREFDUl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NTIzX0RBQ19DVFJMMywgV004NTIzX1pDLCBXTTg1MjNfWkMpOwogCiAJd204NTIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzQxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc0MS5jCmluZGV4IDQ5NGYyZDMuLjI1YWY5MDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzQxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NDEuYwpAQCAtNDIxLDcgKzQyMSw2IEBACiBzdGF0aWMgaW50IHdtODc0MV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHdtODc0MV9wcml2ICp3bTg3NDEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAJaW50IHJldCA9IDA7CiAKIAlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgd204NzQxLT5jb250cm9sX3R5cGUpOwpAQCAtNDM3LDEwICs0MzYsMTQgQEAKIAl9CiAKIAkvKiBDaGFuZ2Ugc29tZSBkZWZhdWx0IHNldHRpbmdzIC0gbGF0Y2ggVlUgKi8KLQlyZWdfY2FjaGVbV004NzQxX0RBQ0xMU0JfQVRURU5VQVRJT05dIHw9IFdNODc0MV9VUERBVEVMTDsKLQlyZWdfY2FjaGVbV004NzQxX0RBQ0xNU0JfQVRURU5VQVRJT05dIHw9IFdNODc0MV9VUERBVEVMTTsKLQlyZWdfY2FjaGVbV004NzQxX0RBQ1JMU0JfQVRURU5VQVRJT05dIHw9IFdNODc0MV9VUERBVEVSTDsKLQlyZWdfY2FjaGVbV004NzQxX0RBQ1JMU0JfQVRURU5VQVRJT05dIHw9IFdNODc0MV9VUERBVEVSTTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NDFfREFDTExTQl9BVFRFTlVBVElPTiwKKwkJCSAgICBXTTg3NDFfVVBEQVRFTEwsIFdNODc0MV9VUERBVEVMTCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzQxX0RBQ0xNU0JfQVRURU5VQVRJT04sCisJCQkgICAgV004NzQxX1VQREFURUxNLCBXTTg3NDFfVVBEQVRFTE0pOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc0MV9EQUNSTFNCX0FUVEVOVUFUSU9OLAorCQkJICAgIFdNODc0MV9VUERBVEVSTCwgV004NzQxX1VQREFURVJMKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NDFfREFDUkxTQl9BVFRFTlVBVElPTiwKKwkJCSAgICBXTTg3NDFfVVBEQVRFUk0sIFdNODc0MV9VUERBVEVSTSk7CiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzQxX3NuZF9jb250cm9scywKIAkJCSAgICAgQVJSQVlfU0laRSh3bTg3NDFfc25kX2NvbnRyb2xzKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwppbmRleCA3OWIwMmFlLi4zZjA5ZGVlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKQEAgLTU1LDggKzU1LDEwIEBACiBtb2R1bGVfcGFyYW0oY2Fwc19jaGFyZ2UsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNhcHNfY2hhcmdlLCAiV004NzUzIGNhcCBjaGFyZ2UgdGltZSAobXNlY3MpIik7CiAKLXN0YXRpYyB2b2lkIHdtODc1M19zZXRfZGFpX21vZGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGhpZmkpOworc3RhdGljIGludCB3bTg3NTNfaGlmaV93cml0ZV9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IGZtdCk7CitzdGF0aWMgaW50IHdtODc1M192b2ljZV93cml0ZV9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IGZtdCk7CiAKIC8qCiAgKiB3bTg3NTMgcmVnaXN0ZXIgY2FjaGUKQEAgLTg3LDYgKzg5LDEwIEBACiAJZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sX3R5cGU7CiAJdW5zaWduZWQgaW50IHN5c2NsazsKIAl1bnNpZ25lZCBpbnQgcGNtY2xrOworCisJdW5zaWduZWQgaW50IHZvaWNlX2ZtdDsKKwl1bnNpZ25lZCBpbnQgaGlmaV9mbXQ7CisKIAlpbnQgZGFpX2Z1bmM7CiB9OwogCkBAIC0xNzAsOSArMTc2LDkgQEAKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAgc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWludCBtb2RlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTNfSU9DVEwpOworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IChtb2RlICYgMHhjKSA+PiAyOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gd204NzUzLT5kYWlfZnVuYzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgwLDE2ICsxODYsMjYgQEAKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAgc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWludCBtb2RlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTNfSU9DVEwpOwogCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTE2IGlvY3RsOwogCi0JaWYgKCgobW9kZSAmIDB4YykgPj4gMikgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCi0JCXJldHVybiAwOworCWlmIChjb2RlYy0+YWN0aXZlKQorCQlyZXR1cm4gLUVCVVNZOwogCi0JbW9kZSAmPSAweGZmZjM7Ci0JbW9kZSB8PSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPDwgMik7CisJaW9jdGwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODc1M19JT0NUTCk7CiAKLQl3bTg3NTMtPmRhaV9mdW5jID0gIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCXdtODc1My0+ZGFpX2Z1bmMgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmICgoKGlvY3RsID4+IDIpICYgMHgzKSA9PSB3bTg3NTMtPmRhaV9mdW5jKQorCQlyZXR1cm4gMTsKKworCWlvY3RsID0gKGlvY3RsICYgMHgxZjMpIHwgKHdtODc1My0+ZGFpX2Z1bmMgPDwgMik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NzUzX0lPQ1RMLCBpb2N0bCk7CisKKworCXdtODc1M19oaWZpX3dyaXRlX2RhaV9mbXQoY29kZWMsIHdtODc1My0+aGlmaV9mbXQpOworCXdtODc1M192b2ljZV93cml0ZV9kYWlfZm10KGNvZGVjLCB3bTg3NTMtPnZvaWNlX2ZtdCk7CisKIAlyZXR1cm4gMTsKIH0KIApAQCAtODI4LDEwICs4NDQsOSBAQAogLyoKICAqIFNldCdzIEFEQyBhbmQgVm9pY2UgREFDIGZvcm1hdC4KICAqLwotc3RhdGljIGludCB3bTg3NTNfdmRhY19hZGNfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCitzdGF0aWMgaW50IHdtODc1M192ZGFjX2FkY19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCXVuc2lnbmVkIGludCBmbXQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAl1MTYgdm9pY2UgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODc1M19QQ00pICYgMHgwMWVjOwogCiAJLyogaW50ZXJmYWNlIGZvcm1hdCAqLwpAQCAtODU4LDEzICs4NzMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODc1M19wY21fc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQl3bTg3NTNfc2V0X2RhaV9tb2RlKGRhaS0+Y29kZWMsIGRhaSwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBTZXQgUENNIERBSSBiaXQgc2l6ZSBhbmQgc2FtcGxlIHJhdGUuCiAgKi8KQEAgLTkwNSwxMCArOTEzLDkgQEAKIC8qCiAgKiBTZXQncyBQQ00gZGFpIGZtdCBhbmQgQkNMSy4KICAqLwotc3RhdGljIGludCB3bTg3NTNfcGNtX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorc3RhdGljIGludCB3bTg3NTNfcGNtX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXUxNiB2b2ljZSwgaW9jdGw7CiAKIAl2b2ljZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzUzX1BDTSkgJiAweDAxMWY7CkBAIC05OTksMTAgKzEwMDYsOSBAQAogLyoKICAqIFNldCdzIEhpRmkgREFDIGZvcm1hdC4KICAqLwotc3RhdGljIGludCB3bTg3NTNfaGRhY19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKK3N0YXRpYyBpbnQgd204NzUzX2hkYWNfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQl1bnNpZ25lZCBpbnQgZm10KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CiAJdTE2IGhpZmkgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODc1M19ISUZJKSAmIDB4MDFlMDsKIAogCS8qIGludGVyZmFjZSBmb3JtYXQgKi8KQEAgLTEwMzIsMTAgKzEwMzgsOSBAQAogLyoKICAqIFNldCdzIEkyUyBEQUkgZm9ybWF0LgogICovCi1zdGF0aWMgaW50IHdtODc1M19pMnNfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCitzdGF0aWMgaW50IHdtODc1M19pMnNfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQl1bnNpZ25lZCBpbnQgZm10KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CiAJdTE2IGlvY3RsLCBoaWZpOwogCiAJaGlmaSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzUzX0hJRkkpICYgMHgwMTFmOwpAQCAtMTA5OCwxMyArMTEwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd204NzUzX2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXdtODc1M19zZXRfZGFpX21vZGUoZGFpLT5jb2RlYywgZGFpLCAxKTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFNldCBQQ00gREFJIGJpdCBzaXplIGFuZCBzYW1wbGUgcmF0ZS4KICAqLwpAQCAtMTE0Nyw2MSArMTE0NSwxMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorc3RhdGljIGludCB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXUxNiBjbG9jazsKIAogCS8qIHNldCBjbGsgc291cmNlIGFzIHBjbWNsayAqLwogCWNsb2NrID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTNfQ0xPQ0spICYgMHhmZmZiOwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc1M19DTE9DSywgY2xvY2spOwogCi0JaWYgKHdtODc1M192ZGFjX2FkY19zZXRfZGFpX2ZtdChjb2RlY19kYWksIGZtdCkgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gd204NzUzX3BjbV9zZXRfZGFpX2ZtdChjb2RlY19kYWksIGZtdCk7CisJcmV0dXJuIHdtODc1M192ZGFjX2FkY19zZXRfZGFpX2ZtdChjb2RlYywgZm10KTsKIH0KIAotc3RhdGljIGludCB3bTg3NTNfbW9kZTFoX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorc3RhdGljIGludCB3bTg3NTNfbW9kZTFoX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKLQlpZiAod204NzUzX2hkYWNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHdtODc1M19pMnNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpOworCXJldHVybiB3bTg3NTNfaGRhY19zZXRfZGFpX2ZtdChjb2RlYywgZm10KTsKIH0KIAotc3RhdGljIGludCB3bTg3NTNfbW9kZTJfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCitzdGF0aWMgaW50IHdtODc1M19tb2RlMl9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCXVuc2lnbmVkIGludCBmbXQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAl1MTYgY2xvY2s7CiAKIAkvKiBzZXQgY2xrIHNvdXJjZSBhcyBwY21jbGsgKi8KIAljbG9jayA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzUzX0NMT0NLKSAmIDB4ZmZmYjsKIAlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NTNfQ0xPQ0ssIGNsb2NrKTsKIAotCWlmICh3bTg3NTNfdmRhY19hZGNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHdtODc1M19pMnNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpOworCXJldHVybiB3bTg3NTNfdmRhY19hZGNfc2V0X2RhaV9mbXQoY29kZWMsIGZtdCk7CiB9CiAKLXN0YXRpYyBpbnQgd204NzUzX21vZGUzXzRfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCitzdGF0aWMgaW50IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXUxNiBjbG9jazsKIAogCS8qIHNldCBjbGsgc291cmNlIGFzIG1jbGsgKi8KIAljbG9jayA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzUzX0NMT0NLKSAmIDB4ZmZmYjsKIAlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NTNfQ0xPQ0ssIGNsb2NrIHwgMHg0KTsKIAotCWlmICh3bTg3NTNfaGRhY19zZXRfZGFpX2ZtdChjb2RlY19kYWksIGZtdCkgPCAwKQorCWlmICh3bTg3NTNfaGRhY19zZXRfZGFpX2ZtdChjb2RlYywgZm10KSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICh3bTg3NTNfdmRhY19hZGNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHdtODc1M19pMnNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpOworCXJldHVybiB3bTg3NTNfdmRhY19hZGNfc2V0X2RhaV9mbXQoY29kZWMsIGZtdCk7CiB9CiAKK3N0YXRpYyBpbnQgd204NzUzX2hpZmlfd3JpdGVfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAod204NzUzLT5kYWlfZnVuYykgeworCWNhc2UgMDoKKwkJcmV0ID0gd204NzUzX21vZGUxaF9zZXRfZGFpX2ZtdChjb2RlYywgZm10KTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXQgPSB3bTg3NTNfbW9kZTJfc2V0X2RhaV9mbXQoY29kZWMsIGZtdCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwljYXNlIDM6CisJCXJldCA9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10KGNvZGVjLCBmbXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkgYnJlYWs7CisJfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gd204NzUzX2kyc19zZXRfZGFpX2ZtdChjb2RlYywgZm10KTsKK30KKworc3RhdGljIGludCB3bTg3NTNfaGlmaV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwl3bTg3NTMtPmhpZmlfZm10ID0gZm10OworCisJcmV0dXJuIHdtODc1M19oaWZpX3dyaXRlX2RhaV9mbXQoY29kZWMsIGZtdCk7Cit9OworCitzdGF0aWMgaW50IHdtODc1M192b2ljZV93cml0ZV9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQgPSAwOworCisJaWYgKHdtODc1My0+ZGFpX2Z1bmMgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10KGNvZGVjLCBmbXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gd204NzUzX3BjbV9zZXRfZGFpX2ZtdChjb2RlYywgZm10KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IHdtODc1M192b2ljZV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwl3bTg3NTMtPnZvaWNlX2ZtdCA9IGZtdDsKKworCXJldHVybiB3bTg3NTNfdm9pY2Vfd3JpdGVfZGFpX2ZtdChjb2RlYywgZm10KTsKK307CisKIHN0YXRpYyBpbnQgd204NzUzX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CkBAIC0xMjY4LDU3ICsxMzIyLDI1IEBACiAgKiAzLiBWb2ljZSBkaXNhYmxlZCAtIEhJRkkgb3ZlciBISUZJCiAgKiA0LiBWb2ljZSBkaXNhYmxlZCAtIEhJRkkgb3ZlciBISUZJLCB1c2VzIHZvaWNlIERBSSBMUkMgZm9yIGNhcHR1cmUKICAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlMSA9IHsKLQkuc3RhcnR1cCA9IHdtODc1M19pMnNfc3RhcnR1cCwKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX2hpZmlfbW9kZSA9IHsKIAkuaHdfcGFyYW1zCT0gd204NzUzX2kyc19od19wYXJhbXMsCiAJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAotCS5zZXRfZm10CT0gd204NzUzX21vZGUxaF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2ZtdAk9IHdtODc1M19oaWZpX3NldF9kYWlfZm10LAogCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAogCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAogCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTEgPSB7Ci0JLnN0YXJ0dXAgPSB3bTg3NTNfcGNtX3N0YXJ0dXAsCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NTNfZGFpX29wc192b2ljZV9tb2RlID0gewogCS5od19wYXJhbXMJPSB3bTg3NTNfcGNtX2h3X3BhcmFtcywKIAkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCi0JLnNldF9mbXQJPSB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10LAorCS5zZXRfZm10CT0gd204NzUzX3ZvaWNlX3NldF9kYWlfZm10LAogCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAogCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAogCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTIgPSB7Ci0JLnN0YXJ0dXAgPSB3bTg3NTNfcGNtX3N0YXJ0dXAsCi0JLmh3X3BhcmFtcwk9IHdtODc1M19wY21faHdfcGFyYW1zLAotCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKLQkuc2V0X2ZtdAk9IHdtODc1M19tb2RlMl9zZXRfZGFpX2ZtdCwKLQkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX2hpZmlfbW9kZTMJPSB7Ci0JLnN0YXJ0dXAgPSB3bTg3NTNfaTJzX3N0YXJ0dXAsCi0JLmh3X3BhcmFtcwk9IHdtODc1M19pMnNfaHdfcGFyYW1zLAotCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKLQkuc2V0X2ZtdAk9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAotCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAotCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlNAk9IHsKLQkuc3RhcnR1cCA9IHdtODc1M19pMnNfc3RhcnR1cCwKLQkuaHdfcGFyYW1zCT0gd204NzUzX2kyc19od19wYXJhbXMsCi0JLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAotCS5zZXRfZm10CT0gd204NzUzX21vZGUzXzRfc2V0X2RhaV9mbXQsCi0JLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciB3bTg3NTNfYWxsX2RhaVtdID0geworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgd204NzUzX2RhaVtdID0gewogLyogREFJIEhpRmkgbW9kZSAxICovCiB7CS5uYW1lID0gIndtODc1My1oaWZpIiwKIAkucGxheWJhY2sgPSB7CkBAIC0xMzI2LDE0ICsxMzQ4LDE2IEBACiAJCS5jaGFubmVsc19taW4gPSAxLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAotCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTfSwKKwkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUworCX0sCiAJLmNhcHR1cmUgPSB7IC8qIGR1bW15IGZvciBmYXN0IERBSSBzd2l0Y2hpbmcgKi8KIAkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAogCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKLQkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUU30sCi0JLm9wcyA9ICZ3bTg3NTNfZGFpX29wc19oaWZpX21vZGUxLAorCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTCisJfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX2hpZmlfbW9kZSwKIH0sCiAvKiBEQUkgVm9pY2UgbW9kZSAxICovCiB7CS5uYW1lID0gIndtODc1My12b2ljZSIsCkBAIC0xMzQyLDk3ICsxMzY2LDE5IEBACiAJCS5jaGFubmVsc19taW4gPSAxLAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAotCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCisJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsCisJfSwKIAkuY2FwdHVyZSA9IHsKIAkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAogCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKLQkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTEsCi19LAotLyogREFJIEhpRmkgbW9kZSAyIC0gZHVtbXkgKi8KLXsJLm5hbWUgPSAid204NzUzLWhpZmkiLAotfSwKLS8qIERBSSBWb2ljZSBtb2RlIDIgKi8KLXsJLm5hbWUgPSAid204NzUzLXZvaWNlIiwKLQkucGxheWJhY2sgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJWb2ljZSBQbGF5YmFjayIsCi0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMSwKLQkJLnJhdGVzID0gV004NzUzX1JBVEVTLAotCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCi0JCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gJndtODc1M19kYWlfb3BzX3ZvaWNlX21vZGUyLAotfSwKLS8qIERBSSBIaUZpIG1vZGUgMyAqLwotewkubmFtZSA9ICJ3bTg3NTMtaGlmaSIsCi0JLnBsYXliYWNrID0gewotCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBQbGF5YmFjayIsCi0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gV004NzUzX1JBVEVTLAotCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCi0JCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gJndtODc1M19kYWlfb3BzX2hpZmlfbW9kZTMsCi19LAotLyogREFJIFZvaWNlIG1vZGUgMyAtIGR1bW15ICovCi17CS5uYW1lID0gIndtODc1My12b2ljZSIsCi19LAotLyogREFJIEhpRmkgbW9kZSA0ICovCi17CS5uYW1lID0gIndtODc1My1oaWZpIiwKLQkucGxheWJhY2sgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJIaUZpIFBsYXliYWNrIiwKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCi0JCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkuY2FwdHVyZSA9IHsKLQkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IFdNODc1M19SQVRFUywKLQkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlNCwKLX0sCi0vKiBEQUkgVm9pY2UgbW9kZSA0IC0gZHVtbXkgKi8KLXsJLm5hbWUgPSAid204NzUzLXZvaWNlIiwKKwkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZSwKIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciB3bTg3NTNfZGFpW10gPSB7Ci0JewotCQkubmFtZSA9ICJ3bTg3NTMtYWlmMCIsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIndtODc1My1haWYxIiwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgd204NzUzX3NldF9kYWlfbW9kZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgaGlmaSkKLXsKLQlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCi0JaWYgKHdtODc1My0+ZGFpX2Z1bmMgPCA0KSB7Ci0JCWlmIChoaWZpKQotCQkJZGFpLT5kcml2ZXIgPSAmd204NzUzX2FsbF9kYWlbd204NzUzLT5kYWlfZnVuYyA8PCAxXTsKLQkJZWxzZQotCQkJZGFpLT5kcml2ZXIgPSAmd204NzUzX2FsbF9kYWlbKHdtODc1My0+ZGFpX2Z1bmMgPDwgMSkgKyAxXTsKLQl9Ci0Jc25kX3NvY193cml0ZShjb2RlYywgV004NzUzX0lPQ1RMLCB3bTg3NTMtPmRhaV9mdW5jKTsKLX0KLQogc3RhdGljIHZvaWQgd204NzUzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg4MDQuYwppbmRleCA2ZGFlMWI0Li42Nzg1Njg4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODgwNF92b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCB3bTg4MDRfdm9sYXRpbGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBXTTg4MDRfUlNUX0RFVklEMToKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCmluZGV4IGNkMDk1OTkuLjQ0OWVhMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJLyogUmVtYWluaW5nIHJlZ2lzdGVycyBhbGwgemVybyAqLwogfTsKIAotc3RhdGljIGludCB3bTg5MDBfdm9sYXRpbGVfcmVnaXN0ZXIodW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbnQgd204OTAwX3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKIHsKIAlzd2l0Y2ggKHJlZykgewogCWNhc2UgV004OTAwX1JFR19JRDoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCmluZGV4IDAxN2Q5OWMuLmFlMWNhZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwpAQCAtMiw2ICsyLDcgQEAKICAqIHdtODkwMy5jICAtLSAgV004OTAzIEFMU0EgU29DIEF1ZGlvIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcworICogQ29weXJpZ2h0IDIwMTEgTlZJRElBLCBJbmMuCiAgKgogICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KICAqCkBAIC0xOSw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjEzLDYgKzIxNSw3IEBACiB9OwogCiBzdHJ1Y3Qgd204OTAzX3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAogCWludCBzeXNjbGs7CiAJaW50IGlycTsKQEAgLTIyMCwyNSArMjIzLDM2IEBACiAJaW50IGZzOwogCWludCBkZWVtcGg7CiAKKwlpbnQgZGNzX3BlbmRpbmc7CisJaW50IGRjc19jYWNoZVs0XTsKKwogCS8qIFJlZmVyZW5jZSBjb3VudCAqLwogCWludCBjbGFzc193X3VzZXJzOwogCi0Jc3RydWN0IGNvbXBsZXRpb24gd3NlcTsKLQogCXN0cnVjdCBzbmRfc29jX2phY2sgKm1pY19qYWNrOwogCWludCBtaWNfZGV0OwogCWludCBtaWNfc2hvcnQ7CiAJaW50IG1pY19sYXN0X3JlcG9ydDsKIAlpbnQgbWljX2RlbGF5OworCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW9fY2hpcDsKKyNlbmRpZgogfTsKIAotc3RhdGljIGludCB3bTg5MDNfdm9sYXRpbGVfcmVnaXN0ZXIodW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbnQgd204OTAzX3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKIHsKIAlzd2l0Y2ggKHJlZykgewogCWNhc2UgV004OTAzX1NXX1JFU0VUX0FORF9JRDoKIAljYXNlIFdNODkwM19SRVZJU0lPTl9OVU1CRVI6CiAJY2FzZSBXTTg5MDNfSU5URVJSVVBUX1NUQVRVU18xOgogCWNhc2UgV004OTAzX1dSSVRFX1NFUVVFTkNFUl80OgorCWNhc2UgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMzoKKwljYXNlIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzI6CisJY2FzZSBXTTg5MDNfRENfU0VSVk9fUkVBREJBQ0tfMToKKwljYXNlIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS18yOgorCWNhc2UgV004OTAzX0RDX1NFUlZPX1JFQURCQUNLXzM6CisJY2FzZSBXTTg5MDNfRENfU0VSVk9fUkVBREJBQ0tfNDoKIAkJcmV0dXJuIDE7CiAKIAlkZWZhdWx0OgpAQCAtMjQ2LDUwICsyNjAsNiBAQAogCX0KIH0KIAotc3RhdGljIGludCB3bTg5MDNfcnVuX3NlcXVlbmNlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHN0YXJ0KQotewotCXUxNiByZWdbNV07Ci0Jc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQotCUJVR19PTihzdGFydCA+IDQ4KTsKLQotCS8qIEVuYWJsZSB0aGUgc2VxdWVuY2VyIGlmIGl0J3Mgbm90IGFscmVhZHkgb24gKi8KLQlyZWdbMF0gPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMCk7Ci0Jc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX1dSSVRFX1NFUVVFTkNFUl8wLAotCQkgICAgICByZWdbMF0gfCBXTTg5MDNfV1NFUV9FTkEpOwotCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU3RhcnRpbmcgc2VxdWVuY2UgYXQgJWRcbiIsIHN0YXJ0KTsKLQotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMywKLQkJICAgICBzdGFydCB8IFdNODkwM19XU0VRX1NUQVJUKTsKLQotCS8qIFdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiAgSWYgd2UgaGF2ZSB0aGUgaW50ZXJydXB0IHdpcmVkIHVwIHRoZW4KLQkgKiB0aGF0IHdpbGwgYnJlYWsgdXMgb3V0IG9mIHRoZSBwb2xsIGVhcmx5LgotCSAqLwotCWRvIHsKLQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3bTg5MDMtPndzZXEsCi0JCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0KLQkJcmVnWzRdID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzQpOwotCX0gd2hpbGUgKHJlZ1s0XSAmIFdNODkwM19XU0VRX0JVU1kpOwotCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2VxdWVuY2UgY29tcGxldGVcbiIpOwotCi0JLyogRGlzYWJsZSB0aGUgc2VxdWVuY2VyIGFnYWluIGlmIHdlIGVuYWJsZWQgaXQgKi8KLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzAsIHJlZ1swXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgd204OTAzX3N5bmNfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTE2ICpjYWNoZSkKLXsKLQlpbnQgaTsKLQotCS8qIFRoZXJlIHJlYWxseSBvdWdodCB0byBiZSBzb21ldGhpbmcgYmV0dGVyIHdlIGNhbiBkbyBoZXJlIDovICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTAzX3JlZ19kZWZhdWx0cyk7IGkrKykKLQkJY2FjaGVbaV0gPSBjb2RlYy0+aHdfcmVhZChjb2RlYywgaSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHdtODkwM19yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX1NXX1JFU0VUX0FORF9JRCwgMCk7CkBAIC0yOTcsMTEgKzI2Nyw2IEBACiAJICAgICAgIHNpemVvZih3bTg5MDNfcmVnX2RlZmF1bHRzKSk7CiB9CiAKLSNkZWZpbmUgV004OTAzX09VVFBVVF9TSE9SVCAweDgKLSNkZWZpbmUgV004OTAzX09VVFBVVF9PVVQgICAweDQKLSNkZWZpbmUgV004OTAzX09VVFBVVF9JTlQgICAweDIKLSNkZWZpbmUgV004OTAzX09VVFBVVF9JTiAgICAweDEKLQogc3RhdGljIGludCB3bTg5MDNfY3BfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewpAQCAtMzExLDk5ICsyNzYsMTAzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBFdmVudCBmb3IgaGVhZHBob25lIGFuZCBsaW5lIG91dCBhbXBsaWZpZXIgcG93ZXIgY2hhbmdlcy4gIFNwZWNpYWwKLSAqIHBvd2VyIHVwL2Rvd24gc2VxdWVuY2VzIGFyZSByZXF1aXJlZCBpbiBvcmRlciB0byBtYXhpbWlzZSBwb3AvY2xpY2sKLSAqIHBlcmZvcm1hbmNlLgotICovCi1zdGF0aWMgaW50IHdtODkwM19vdXRwdXRfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCi0JCQkgICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3N0YXRpYyBpbnQgd204OTAzX2Rjc19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOwotCXUxNiB2YWw7Ci0JdTE2IHJlZzsKLQl1MTYgZGNzX3JlZzsKLQl1MTYgZGNzX2JpdDsKLQlpbnQgc2hpZnQ7CisJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAotCXN3aXRjaCAody0+cmVnKSB7Ci0JY2FzZSBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8yOgotCQlyZWcgPSBXTTg5MDNfQU5BTE9HVUVfSFBfMDsKLQkJZGNzX2JpdCA9IDAgKyB3LT5zaGlmdDsKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCXdtODkwMy0+ZGNzX3BlbmRpbmcgfD0gMSA8PCB3LT5zaGlmdDsKIAkJYnJlYWs7Ci0JY2FzZSBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8zOgotCQlyZWcgPSBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wOwotCQlkY3NfYml0ID0gMiArIHctPnNoaWZ0OworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwM19EQ19TRVJWT18wLAorCQkJCSAgICAxIDw8IHctPnNoaWZ0LCAwKTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAtRUlOVkFMOyAgLyogU3B1cmlvdXMgd2FybmluZyBmcm9tIHNvbWUgY29tcGlsZXJzICovCi0JfQotCi0Jc3dpdGNoICh3LT5zaGlmdCkgewotCWNhc2UgMDoKLQkJc2hpZnQgPSAwOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXNoaWZ0ID0gNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAtRUlOVkFMOyAgLyogU3B1cmlvdXMgd2FybmluZyBmcm9tIHNvbWUgY29tcGlsZXJzICovCi0JfQotCi0JaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpIHsKLQkJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCByZWcpOwotCi0JCS8qIFNob3J0IHRoZSBvdXRwdXQgKi8KLQkJdmFsICY9IH4oV004OTAzX09VVFBVVF9TSE9SVCA8PCBzaGlmdCk7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKLQl9Ci0KLQlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTVUpIHsKLQkJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCByZWcpOwotCi0JCXZhbCB8PSAoV004OTAzX09VVFBVVF9JTiA8PCBzaGlmdCk7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKLQotCQl2YWwgfD0gKFdNODkwM19PVVRQVVRfSU5UIDw8IHNoaWZ0KTsKLQkJc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWwpOwotCi0JCS8qIFR1cm4gb24gdGhlIG91dHB1dCBFTkFfT1VUUCAqLwotCQl2YWwgfD0gKFdNODkwM19PVVRQVVRfT1VUIDw8IHNoaWZ0KTsKLQkJc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWwpOwotCi0JCS8qIEVuYWJsZSB0aGUgREMgc2Vydm8gKi8KLQkJZGNzX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0RDX1NFUlZPXzApOwotCQlkY3NfcmVnIHw9IGRjc19iaXQ7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19EQ19TRVJWT18wLCBkY3NfcmVnKTsKLQotCQkvKiBSZW1vdmUgdGhlIHNob3J0ICovCi0JCXZhbCB8PSAoV004OTAzX09VVFBVVF9TSE9SVCA8PCBzaGlmdCk7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKLQl9Ci0KLQlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNRCkgewotCQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIHJlZyk7Ci0KLQkJLyogU2hvcnQgdGhlIG91dHB1dCAqLwotCQl2YWwgJj0gfihXTTg5MDNfT1VUUFVUX1NIT1JUIDw8IHNoaWZ0KTsKLQkJc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWwpOwotCi0JCS8qIERpc2FibGUgdGhlIERDIHNlcnZvICovCi0JCWRjc19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19EQ19TRVJWT18wKTsKLQkJZGNzX3JlZyAmPSB+ZGNzX2JpdDsKLQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0RDX1NFUlZPXzAsIGRjc19yZWcpOwotCi0JCS8qIFRoZW4gZGlzYWJsZSB0aGUgaW50ZXJtZWRpYXRlIGFuZCBvdXRwdXQgc3RhZ2VzICovCi0JCXZhbCAmPSB+KChXTTg5MDNfT1VUUFVUX09VVCB8IFdNODkwM19PVVRQVVRfSU5UIHwKLQkJCSAgV004OTAzX09VVFBVVF9JTikgPDwgc2hpZnQpOwotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCByZWcsIHZhbCk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgV004OTAzX0RDU19NT0RFX1dSSVRFX1NUT1AgMAorI2RlZmluZSBXTTg5MDNfRENTX01PREVfU1RBUlRfU1RPUCAyCisKK3N0YXRpYyB2b2lkIHdtODkwM19zZXFfbm90aWZpZXIoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAorCQkJCWVudW0gc25kX3NvY19kYXBtX3R5cGUgZXZlbnQsIGludCBzdWJzZXEpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29udGFpbmVyX29mKGRhcG0sCisJCQkJCQkgICBzdHJ1Y3Qgc25kX3NvY19jb2RlYywgZGFwbSk7CisJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgZGNzX21vZGUgPSBXTTg5MDNfRENTX01PREVfV1JJVEVfU1RPUDsKKwlpbnQgaSwgdmFsOworCisJLyogQ29tcGxldGUgYW55IHBlbmRpbmcgREMgc2Vydm8gc3RhcnRzICovCisJaWYgKHdtODkwMy0+ZGNzX3BlbmRpbmcpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU3RhcnRpbmcgREMgc2Vydm8gZm9yICV4XG4iLAorCQkJd204OTAzLT5kY3NfcGVuZGluZyk7CisKKwkJLyogSWYgd2UndmUgbm8gY2FjaGVkIHZhbHVlcyB0aGVuIHdlIG5lZWQgdG8gZG8gc3RhcnR1cCAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5MDMtPmRjc19jYWNoZSk7IGkrKykgeworCQkJaWYgKCEod204OTAzLT5kY3NfcGVuZGluZyAmICgxIDw8IGkpKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHdtODkwMy0+ZGNzX2NhY2hlW2ldKSB7CisJCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LAorCQkJCQkiUmVzdG9yZSBEQyBzZXJ2byAlZCB2YWx1ZSAleFxuIiwKKwkJCQkJMyAtIGksIHdtODkwMy0+ZGNzX2NhY2hlW2ldKTsKKworCQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19EQ19TRVJWT180ICsgaSwKKwkJCQkJICAgICAgd204OTAzLT5kY3NfY2FjaGVbaV0gJiAweGZmKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LAorCQkJCQkiQ2FsaWJyYXRlIERDIHNlcnZvICVkXG4iLCAzIC0gaSk7CisJCQkJZGNzX21vZGUgPSBXTTg5MDNfRENTX01PREVfU1RBUlRfU1RPUDsKKwkJCX0KKwkJfQorCisJCS8qIERvbid0IHRydXN0IHRoZSBjYWNoZSBmb3IgYW5hbG9ndWUgKi8KKwkJaWYgKHdtODkwMy0+Y2xhc3Nfd191c2VycykKKwkJCWRjc19tb2RlID0gV004OTAzX0RDU19NT0RFX1NUQVJUX1NUT1A7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX0RDX1NFUlZPXzIsCisJCQkJICAgIFdNODkwM19EQ1NfTU9ERV9NQVNLLCBkY3NfbW9kZSk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX0RDX1NFUlZPXzAsCisJCQkJICAgIFdNODkwM19EQ1NfRU5BX01BU0ssIHdtODkwMy0+ZGNzX3BlbmRpbmcpOworCisJCXN3aXRjaCAoZGNzX21vZGUpIHsKKwkJY2FzZSBXTTg5MDNfRENTX01PREVfV1JJVEVfU1RPUDoKKwkJCWJyZWFrOworCisJCWNhc2UgV004OTAzX0RDU19NT0RFX1NUQVJUX1NUT1A6CisJCQltc2xlZXAoMjcwKTsKKworCQkJLyogQ2FjaGUgdGhlIG1lYXN1cmVkIG9mZnNldHMgZm9yIGRpZ2l0YWwgKi8KKwkJCWlmICh3bTg5MDMtPmNsYXNzX3dfdXNlcnMpCisJCQkJYnJlYWs7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkwMy0+ZGNzX2NhY2hlKTsgaSsrKSB7CisJCQkJaWYgKCEod204OTAzLT5kY3NfcGVuZGluZyAmICgxIDw8IGkpKSkKKwkJCQkJY29udGludWU7CisKKwkJCQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsCisJCQkJCQkgICBXTTg5MDNfRENfU0VSVk9fUkVBREJBQ0tfMSArIGkpOworCQkJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvICVkOiAleFxuIiwKKwkJCQkJMyAtIGksIHZhbCk7CisJCQkJd204OTAzLT5kY3NfY2FjaGVbaV0gPSB2YWw7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJfd2FybigiRENTIG1vZGUgJWQgZGVsYXkgbm90IHNldFxuIiwgZGNzX21vZGUpOworCQkJYnJlYWs7CisJCX0KKworCQl3bTg5MDMtPmRjc19wZW5kaW5nID0gMDsKKwl9Cit9CisKIC8qCiAgKiBXaGVuIHVzZWQgd2l0aCBEQUMgb3V0cHV0cyBvbmx5IHRoZSBXTTg5MDMgY2hhcmdlIHB1bXAgc3VwcG9ydHMKICAqIG9wZXJhdGlvbiBpbiBjbGFzcyBXIG1vZGUsIHByb3ZpZGluZyB2ZXJ5IGxvdyBwb3dlciBjb25zdW1wdGlvbgpAQCAtNjY3LDYgKzYzNiwyMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByc2lkZXRvbmVfZW51bSA9CiAJU09DX0VOVU1fU0lOR0xFKFdNODkwM19EQUNfRElHSVRBTF8wLCAwLCAzLCBzaWRldG9uZV90ZXh0KTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKmFpZl90ZXh0W10gPSB7CisJIkxlZnQiLCAiUmlnaHQiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxjYXB0dXJlX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDNfQVVESU9fSU5URVJGQUNFXzAsIDcsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByY2FwdHVyZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTAzX0FVRElPX0lOVEVSRkFDRV8wLCA2LCAyLCBhaWZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbHBsYXlfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwM19BVURJT19JTlRFUkZBQ0VfMCwgNSwgMiwgYWlmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHJwbGF5X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDNfQVVESU9fSU5URVJGQUNFXzAsIDQsIDIsIGFpZl90ZXh0KTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkwM19zbmRfY29udHJvbHNbXSA9IHsKIAogLyogSW5wdXQgUEdBcyAtIE5vIFRMViBzaW5jZSB0aGUgc2NhbGUgZGVwZW5kcyBvbiBQR0EgbW9kZSAqLwpAQCAtNzg0LDYgKzc2OSwxOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJzaWRldG9uZV9tdXggPQogCVNPQ19EQVBNX0VOVU0oIkRBQ1IgU2lkZXRvbmUgTXV4IiwgcnNpZGV0b25lX2VudW0pOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGNhcHR1cmVfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IENhcHR1cmUgTXV4IiwgbGNhcHR1cmVfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByY2FwdHVyZV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IENhcHR1cmUgTXV4IiwgcmNhcHR1cmVfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBscGxheV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxlZnQgUGxheWJhY2sgTXV4IiwgbHBsYXlfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBycGxheV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IFBsYXliYWNrIE11eCIsIHJwbGF5X2VudW0pOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGVmdF9vdXRwdXRfbWl4ZXJbXSA9IHsKIFNPQ19EQVBNX1NJTkdMRSgiREFDTCBTd2l0Y2giLCBXTTg5MDNfQU5BTE9HVUVfTEVGVF9NSVhfMCwgMywgMSwgMCksCiBTT0NfREFQTV9TSU5HTEUoIkRBQ1IgU3dpdGNoIiwgV004OTAzX0FOQUxPR1VFX0xFRlRfTUlYXzAsIDIsIDEsIDApLApAQCAtODQ3LDE0ICs4NDQsMjYgQEAKIFNORF9TT0NfREFQTV9QR0EoIkxlZnQgSW5wdXQgUEdBIiwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMCwgMSwgMCwgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBJbnB1dCBQR0EiLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8wLCAwLCAwLCBOVUxMLCAwKSwKIAotU05EX1NPQ19EQVBNX0FEQygiQURDTCIsICJMZWZ0IEhpRmkgQ2FwdHVyZSIsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzYsIDEsIDApLAotU05EX1NPQ19EQVBNX0FEQygiQURDUiIsICJSaWdodCBIaUZpIENhcHR1cmUiLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF82LCAwLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF82LCAxLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF82LCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBDYXB0dXJlIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxjYXB0dXJlX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBDYXB0dXJlIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnJjYXB0dXJlX211eCksCisKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUZUWEwiLCAiTGVmdCBIaUZpIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRlRYUiIsICJSaWdodCBIaUZpIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAogCiBTTkRfU09DX0RBUE1fTVVYKCJEQUNMIFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmbHNpZGV0b25lX211eCksCiBTTkRfU09DX0RBUE1fTVVYKCJEQUNSIFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmcnNpZGV0b25lX211eCksCiAKLVNORF9TT0NfREFQTV9EQUMoIkRBQ0wiLCAiTGVmdCBQbGF5YmFjayIsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzYsIDMsIDApLAotU05EX1NPQ19EQVBNX0RBQygiREFDUiIsICJSaWdodCBQbGF5YmFjayIsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzYsIDIsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGUlhMIiwgIkxlZnQgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGUlhSIiwgIlJpZ2h0IFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBQbGF5YmFjayBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZscGxheV9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgUGxheWJhY2sgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmcnBsYXlfbXV4KSwKKworU05EX1NPQ19EQVBNX0RBQygiREFDTCIsIE5VTEwsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzYsIDMsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDUiIsIE5VTEwsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzYsIDIsIDApLAogCiBTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQgT3V0cHV0IE1peGVyIiwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMSwgMSwgMCwKIAkJICAgbGVmdF9vdXRwdXRfbWl4ZXIsIEFSUkFZX1NJWkUobGVmdF9vdXRwdXRfbWl4ZXIpKSwKQEAgLTg2NiwyMyArODc1LDQ1IEBACiBTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IFNwZWFrZXIgTWl4ZXIiLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF80LCAwLCAwLAogCQkgICByaWdodF9zcGVha2VyX21peGVyLCBBUlJBWV9TSVpFKHJpZ2h0X3NwZWFrZXJfbWl4ZXIpKSwKIAotU05EX1NPQ19EQVBNX1BHQV9FKCJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMiwKLQkJICAgMSwgMCwgTlVMTCwgMCwgd204OTAzX291dHB1dF9ldmVudCwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCksCi1TTkRfU09DX0RBUE1fUEdBX0UoIlJpZ2h0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMiwKLQkJICAgMCwgMCwgTlVMTCwgMCwgd204OTAzX291dHB1dF9ldmVudCwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkxlZnQgSGVhZHBob25lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwKKwkJICAgNCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIlJpZ2h0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX0FOQUxPR1VFX0hQXzAsCisJCSAgIDAsIDAsIE5VTEwsIDApLAogCi1TTkRfU09DX0RBUE1fUEdBX0UoIkxlZnQgTGluZSBPdXRwdXQgUEdBIiwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMywgMSwgMCwKLQkJICAgTlVMTCwgMCwgd204OTAzX291dHB1dF9ldmVudCwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCksCi1TTkRfU09DX0RBUE1fUEdBX0UoIlJpZ2h0IExpbmUgT3V0cHV0IFBHQSIsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzMsIDAsIDAsCi0JCSAgIE5VTEwsIDAsIHdtODkwM19vdXRwdXRfZXZlbnQsCi0JCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMZWZ0IExpbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDQsIDAsCisJCSAgIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAwLCAwLAorCQkgICBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfUk1WX1NIT1JUIiwgNCwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDcsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfRU5BX09VVFAiLCAzLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQTF9FTkFfRExZIiwgMSwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUFJfUk1WX1NIT1JUIiwgNCwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDMsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUFJfRU5BX09VVFAiLCAzLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9FTkFfRExZIiwgMSwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDEsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX1JNVl9TSE9SVCIsIDQsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDcsIDAsCisJCSAgIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkFfT1VUUCIsIDMsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDYsIDAsCisJCSAgIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkFfRExZIiwgMSwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNSwgMCwKKwkJICAgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX1JNVl9TSE9SVCIsIDQsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDMsIDAsCisJCSAgIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUUl9FTkFfT1VUUCIsIDMsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDIsIDAsCisJCSAgIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUUl9FTkFfRExZIiwgMSwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMSwgMCwKKwkJICAgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIkRDUyBNYXN0ZXIiLCBXTTg5MDNfRENfU0VSVk9fMCwgNCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQTF9EQ1MiLCAzLCBTTkRfU09DX05PUE0sIDMsIDAsIHdtODkwM19kY3NfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBSX0RDUyIsIDMsIFNORF9TT0NfTk9QTSwgMiwgMCwgd204OTAzX2Rjc19ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9EQ1MiLCAzLCBTTkRfU09DX05PUE0sIDEsIDAsIHdtODkwM19kY3NfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKK1NORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfRENTIiwgMywgU05EX1NPQ19OT1BNLCAwLCAwLCB3bTg5MDNfZGNzX2V2ZW50LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCiAKIFNORF9TT0NfREFQTV9QR0EoIkxlZnQgU3BlYWtlciBQR0EiLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF81LCAxLCAwLAogCQkgTlVMTCwgMCksCkBAIC04OTIsMTAgKzkyMywxOCBAQAogU05EX1NPQ19EQVBNX1NVUFBMWSgiQ2hhcmdlIFB1bXAiLCBXTTg5MDNfQ0hBUkdFX1BVTVBfMCwgMCwgMCwKIAkJICAgIHdtODkwM19jcF9ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIFNORF9TT0NfREFQTV9TVVBQTFkoIkNMS19EU1AiLCBXTTg5MDNfQ0xPQ0tfUkFURVNfMiwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJDTEtfU1lTIiwgV004OTAzX0NMT0NLX1JBVEVTXzIsIDIsIDAsIE5VTEwsIDApLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKIAorCXsgIkNMS19EU1AiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJNaWMgQmlhcyIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkhQTF9EQ1MiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJIUFJfRENTIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiTElORU9VVExfRENTIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiTElORU9VVFJfRENTIiwgTlVMTCwgIkNMS19TWVMiIH0sCisKIAl7ICJMZWZ0IElucHV0IE11eCIsICJJTjFMIiwgIklOMUwiIH0sCiAJeyAiTGVmdCBJbnB1dCBNdXgiLCAiSU4yTCIsICJJTjJMIiB9LAogCXsgIkxlZnQgSW5wdXQgTXV4IiwgIklOM0wiLCAiSU4zTCIgfSwKQEAgLTkzNiwxOCArOTc1LDM2IEBACiAJeyAiTGVmdCBJbnB1dCBQR0EiLCBOVUxMLCAiTGVmdCBJbnB1dCBNb2RlIE11eCIgfSwKIAl7ICJSaWdodCBJbnB1dCBQR0EiLCBOVUxMLCAiUmlnaHQgSW5wdXQgTW9kZSBNdXgiIH0sCiAKKwl7ICJMZWZ0IENhcHR1cmUgTXV4IiwgIkxlZnQiLCAiQURDTCIgfSwKKwl7ICJMZWZ0IENhcHR1cmUgTXV4IiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisKKwl7ICJSaWdodCBDYXB0dXJlIE11eCIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiUmlnaHQgQ2FwdHVyZSBNdXgiLCAiUmlnaHQiLCAiQURDUiIgfSwKKworCXsgIkFJRlRYTCIsIE5VTEwsICJMZWZ0IENhcHR1cmUgTXV4IiB9LAorCXsgIkFJRlRYUiIsIE5VTEwsICJSaWdodCBDYXB0dXJlIE11eCIgfSwKKwogCXsgIkFEQ0wiLCBOVUxMLCAiTGVmdCBJbnB1dCBQR0EiIH0sCiAJeyAiQURDTCIsIE5VTEwsICJDTEtfRFNQIiB9LAogCXsgIkFEQ1IiLCBOVUxMLCAiUmlnaHQgSW5wdXQgUEdBIiB9LAogCXsgIkFEQ1IiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKIAorCXsgIkxlZnQgUGxheWJhY2sgTXV4IiwgIkxlZnQiLCAiQUlGUlhMIiB9LAorCXsgIkxlZnQgUGxheWJhY2sgTXV4IiwgIlJpZ2h0IiwgIkFJRlJYUiIgfSwKKworCXsgIlJpZ2h0IFBsYXliYWNrIE11eCIsICJMZWZ0IiwgIkFJRlJYTCIgfSwKKwl7ICJSaWdodCBQbGF5YmFjayBNdXgiLCAiUmlnaHQiLCAiQUlGUlhSIiB9LAorCiAJeyAiREFDTCBTaWRldG9uZSIsICJMZWZ0IiwgIkFEQ0wiIH0sCiAJeyAiREFDTCBTaWRldG9uZSIsICJSaWdodCIsICJBRENSIiB9LAogCXsgIkRBQ1IgU2lkZXRvbmUiLCAiTGVmdCIsICJBRENMIiB9LAogCXsgIkRBQ1IgU2lkZXRvbmUiLCAiUmlnaHQiLCAiQURDUiIgfSwKIAorCXsgIkRBQ0wiLCBOVUxMLCAiTGVmdCBQbGF5YmFjayBNdXgiIH0sCiAJeyAiREFDTCIsIE5VTEwsICJEQUNMIFNpZGV0b25lIiB9LAogCXsgIkRBQ0wiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKKworCXsgIkRBQ1IiLCBOVUxMLCAiUmlnaHQgUGxheWJhY2sgTXV4IiB9LAogCXsgIkRBQ1IiLCBOVUxMLCAiREFDUiBTaWRldG9uZSIgfSwKIAl7ICJEQUNSIiwgTlVMTCwgIkNMS19EU1AiIH0sCiAKQEAgLTk4MCwxMSArMTAzNywzNSBAQAogCXsgIkxlZnQgU3BlYWtlciBQR0EiLCBOVUxMLCAiTGVmdCBTcGVha2VyIE1peGVyIiB9LAogCXsgIlJpZ2h0IFNwZWFrZXIgUEdBIiwgTlVMTCwgIlJpZ2h0IFNwZWFrZXIgTWl4ZXIiIH0sCiAKLQl7ICJIUE9VVEwiLCBOVUxMLCAiTGVmdCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIgfSwKLQl7ICJIUE9VVFIiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCisJeyAiSFBMX0VOQV9ETFkiLCBOVUxMLCAiTGVmdCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIgfSwKKwl7ICJIUFJfRU5BX0RMWSIsIE5VTEwsICJSaWdodCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIgfSwKKwl7ICJMSU5FT1VUTF9FTkFfRExZIiwgTlVMTCwgIkxlZnQgTGluZSBPdXRwdXQgUEdBIiB9LAorCXsgIkxJTkVPVVRSX0VOQV9ETFkiLCBOVUxMLCAiUmlnaHQgTGluZSBPdXRwdXQgUEdBIiB9LAogCi0JeyAiTElORU9VVEwiLCBOVUxMLCAiTGVmdCBMaW5lIE91dHB1dCBQR0EiIH0sCi0JeyAiTElORU9VVFIiLCBOVUxMLCAiUmlnaHQgTGluZSBPdXRwdXQgUEdBIiB9LAorCXsgIkhQTF9EQ1MiLCBOVUxMLCAiRENTIE1hc3RlciIgfSwKKwl7ICJIUFJfRENTIiwgTlVMTCwgIkRDUyBNYXN0ZXIiIH0sCisJeyAiTElORU9VVExfRENTIiwgTlVMTCwgIkRDUyBNYXN0ZXIiIH0sCisJeyAiTElORU9VVFJfRENTIiwgTlVMTCwgIkRDUyBNYXN0ZXIiIH0sCisKKwl7ICJIUExfRENTIiwgTlVMTCwgIkhQTF9FTkFfRExZIiB9LAorCXsgIkhQUl9EQ1MiLCBOVUxMLCAiSFBSX0VOQV9ETFkiIH0sCisJeyAiTElORU9VVExfRENTIiwgTlVMTCwgIkxJTkVPVVRMX0VOQV9ETFkiIH0sCisJeyAiTElORU9VVFJfRENTIiwgTlVMTCwgIkxJTkVPVVRSX0VOQV9ETFkiIH0sCisKKwl7ICJIUExfRU5BX09VVFAiLCBOVUxMLCAiSFBMX0RDUyIgfSwKKwl7ICJIUFJfRU5BX09VVFAiLCBOVUxMLCAiSFBSX0RDUyIgfSwKKwl7ICJMSU5FT1VUTF9FTkFfT1VUUCIsIE5VTEwsICJMSU5FT1VUTF9EQ1MiIH0sCisJeyAiTElORU9VVFJfRU5BX09VVFAiLCBOVUxMLCAiTElORU9VVFJfRENTIiB9LAorCisJeyAiSFBMX1JNVl9TSE9SVCIsIE5VTEwsICJIUExfRU5BX09VVFAiIH0sCisJeyAiSFBSX1JNVl9TSE9SVCIsIE5VTEwsICJIUFJfRU5BX09VVFAiIH0sCisJeyAiTElORU9VVExfUk1WX1NIT1JUIiwgTlVMTCwgIkxJTkVPVVRMX0VOQV9PVVRQIiB9LAorCXsgIkxJTkVPVVRSX1JNVl9TSE9SVCIsIE5VTEwsICJMSU5FT1VUUl9FTkFfT1VUUCIgfSwKKworCXsgIkhQT1VUTCIsIE5VTEwsICJIUExfUk1WX1NIT1JUIiB9LAorCXsgIkhQT1VUUiIsIE5VTEwsICJIUFJfUk1WX1NIT1JUIiB9LAorCXsgIkxJTkVPVVRMIiwgTlVMTCwgIkxJTkVPVVRMX1JNVl9TSE9SVCIgfSwKKwl7ICJMSU5FT1VUUiIsIE5VTEwsICJMSU5FT1VUUl9STVZfU0hPUlQiIH0sCiAKIAl7ICJMT1AiLCBOVUxMLCAiTGVmdCBTcGVha2VyIFBHQSIgfSwKIAl7ICJMT04iLCBOVUxMLCAiTGVmdCBTcGVha2VyIFBHQSIgfSwKQEAgLTEwMTIsMjkgKzEwOTMsNzEgQEAKIHN0YXRpYyBpbnQgd204OTAzX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0JdTE2IHJlZzsKLQogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19WTUlEX0NPTlRST0xfMCk7Ci0JCXJlZyAmPSB+KFdNODkwM19WTUlEX1JFU19NQVNLKTsKLQkJcmVnIHw9IFdNODkwM19WTUlEX1JFU181MEs7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19WTUlEX0NPTlRST0xfMCwgcmVnKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDNfVk1JRF9SRVNfTUFTSywKKwkJCQkgICAgV004OTAzX1ZNSURfUkVTXzUwSyk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewotCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0NMT0NLX1JBVEVTXzIsCi0JCQkJICAgICBXTTg5MDNfQ0xLX1NZU19FTkEpOworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX0JJQVNfQ09OVFJPTF8wLAorCQkJCQkgICAgV004OTAzX1BPQkNUUkwgfCBXTTg5MDNfSVNFTF9NQVNLIHwKKwkJCQkJICAgIFdNODkwM19TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkJICAgIFdNODkwM19CSUFTX0VOQSwKKwkJCQkJICAgIFdNODkwM19QT0JDVFJMIHwKKwkJCQkJICAgICgyIDw8IFdNODkwM19JU0VMX1NISUZUKSB8CisJCQkJCSAgICBXTTg5MDNfU1RBUlRVUF9CSUFTX0VOQSk7CiAKLQkJCS8qIENoYW5nZSBEQyBzZXJ2byBkaXRoZXIgbGV2ZWwgaW4gc3RhcnR1cCBzZXF1ZW5jZSAqLwotCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX1dSSVRFX1NFUVVFTkNFUl8wLCAweDExKTsKLQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMSwgMHgxMjU3KTsKLQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMiwgMHgyKTsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCisJCQkJCSAgICBXTTg5MDNfQU5BTE9HVUVfU1BLX09VVFBVVF9DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDNfU1BLX0RJU0NIQVJHRSwKKwkJCQkJICAgIFdNODkwM19TUEtfRElTQ0hBUkdFKTsKIAotCQkJd204OTAzX3J1bl9zZXF1ZW5jZShjb2RlYywgMCk7Ci0JCQl3bTg5MDNfc3luY19yZWdfY2FjaGUoY29kZWMsIGNvZGVjLT5yZWdfY2FjaGUpOworCQkJbXNsZWVwKDMzKTsKKworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfNSwKKwkJCQkJICAgIFdNODkwM19TUEtMX0VOQSB8IFdNODkwM19TUEtSX0VOQSwKKwkJCQkJICAgIFdNODkwM19TUEtMX0VOQSB8IFdNODkwM19TUEtSX0VOQSk7CisKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCisJCQkJCSAgICBXTTg5MDNfQU5BTE9HVUVfU1BLX09VVFBVVF9DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDNfU1BLX0RJU0NIQVJHRSwgMCk7CisKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwM19WTUlEX0NPTlRST0xfMCwKKwkJCQkJICAgIFdNODkwM19WTUlEX1RJRV9FTkEgfAorCQkJCQkgICAgV004OTAzX0JVRklPX0VOQSB8CisJCQkJCSAgICBXTTg5MDNfVk1JRF9JT19FTkEgfAorCQkJCQkgICAgV004OTAzX1ZNSURfU09GVF9NQVNLIHwKKwkJCQkJICAgIFdNODkwM19WTUlEX1JFU19NQVNLIHwKKwkJCQkJICAgIFdNODkwM19WTUlEX0JVRl9FTkEsCisJCQkJCSAgICBXTTg5MDNfVk1JRF9USUVfRU5BIHwKKwkJCQkJICAgIFdNODkwM19CVUZJT19FTkEgfAorCQkJCQkgICAgV004OTAzX1ZNSURfSU9fRU5BIHwKKwkJCQkJICAgICgyIDw8IFdNODkwM19WTUlEX1NPRlRfU0hJRlQpIHwKKwkJCQkJICAgIFdNODkwM19WTUlEX1JFU18yNTBLIHwKKwkJCQkJICAgIFdNODkwM19WTUlEX0JVRl9FTkEpOworCisJCQltc2xlZXAoMTI5KTsKKworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfNSwKKwkJCQkJICAgIFdNODkwM19TUEtMX0VOQSB8IFdNODkwM19TUEtSX0VOQSwKKwkJCQkJICAgIDApOworCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfVk1JRF9DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDNfVk1JRF9TT0ZUX01BU0ssIDApOworCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfVk1JRF9DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDNfVk1JRF9SRVNfTUFTSywKKwkJCQkJICAgIFdNODkwM19WTUlEX1JFU181MEspOworCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfQklBU19DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDNfQklBU19FTkEgfCBXTTg5MDNfUE9CQ1RSTCwKKwkJCQkJICAgIFdNODkwM19CSUFTX0VOQSk7CiAKIAkJCS8qIEJ5IGRlZmF1bHQgbm8gYnlwYXNzIHBhdGhzIGFyZSBlbmFibGVkIHNvCiAJCQkgKiBlbmFibGUgQ2xhc3MgVyBzdXBwb3J0LgpAQCAtMTA0NywxNyArMTE3MCwzMiBAQAogCQkJCQkgICAgV004OTAzX0NQX0RZTl9WKTsKIAkJfQogCi0JCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX1ZNSURfQ09OVFJPTF8wKTsKLQkJcmVnICY9IH4oV004OTAzX1ZNSURfUkVTX01BU0spOwotCQlyZWcgfD0gV004OTAzX1ZNSURfUkVTXzI1MEs7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19WTUlEX0NPTlRST0xfMCwgcmVnKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDNfVk1JRF9SRVNfTUFTSywKKwkJCQkgICAgV004OTAzX1ZNSURfUkVTXzI1MEspOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJd204OTAzX3J1bl9zZXF1ZW5jZShjb2RlYywgMzIpOwotCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18yKTsKLQkJcmVnICY9IH5XTTg5MDNfQ0xLX1NZU19FTkE7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18yLCByZWcpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfQklBU19DT05UUk9MXzAsCisJCQkJICAgIFdNODkwM19CSUFTX0VOQSwgMCk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDNfVk1JRF9TT0ZUX01BU0ssCisJCQkJICAgIDIgPDwgV004OTAzX1ZNSURfU09GVF9TSElGVCk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDNfVk1JRF9CVUZfRU5BLCAwKTsKKworCQltc2xlZXAoMjkwKTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfVk1JRF9DT05UUk9MXzAsCisJCQkJICAgIFdNODkwM19WTUlEX1RJRV9FTkEgfCBXTTg5MDNfQlVGSU9fRU5BIHwKKwkJCQkgICAgV004OTAzX1ZNSURfSU9fRU5BIHwgV004OTAzX1ZNSURfUkVTX01BU0sgfAorCQkJCSAgICBXTTg5MDNfVk1JRF9TT0ZUX01BU0sgfAorCQkJCSAgICBXTTg5MDNfVk1JRF9CVUZfRU5BLCAwKTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfQklBU19DT05UUk9MXzAsCisJCQkJICAgIFdNODkwM19TVEFSVFVQX0JJQVNfRU5BLCAwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNTEwLDggKzE2NDgsNyBAQAogCWludF92YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19JTlRFUlJVUFRfU1RBVFVTXzEpICYgbWFzazsKIAogCWlmIChpbnRfdmFsICYgV004OTAzX1dTRVFfQlVTWV9FSU5UKSB7Ci0JCWRldl9kYmcoY29kZWMtPmRldiwgIldyaXRlIHNlcXVlbmNlciBkb25lXG4iKTsKLQkJY29tcGxldGUoJndtODkwMy0+d3NlcSk7CisJCWRldl93YXJuKGNvZGVjLT5kZXYsICJXcml0ZSBzZXF1ZW5jZXIgZG9uZVxuIik7CiAJfQogCiAJLyoKQEAgLTE2MzUsNiArMTc3MiwxMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19HUElPTElCCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3bTg5MDNfcHJpdiAqZ3Bpb190b193bTg5MDMoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB3bTg5MDNfcHJpdiwgZ3Bpb19jaGlwKTsKK30KKworc3RhdGljIGludCB3bTg5MDNfZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlpZiAob2Zmc2V0ID49IFdNODkwM19OVU1fR1BJTykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDNfZ3Bpb19kaXJlY3Rpb25faW4oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gZ3Bpb190b193bTg5MDMoY2hpcCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTAzLT5jb2RlYzsKKwl1bnNpZ25lZCBpbnQgbWFzaywgdmFsOworCisJbWFzayA9IFdNODkwM19HUDFfRk5fTUFTSyB8IFdNODkwM19HUDFfRElSX01BU0s7CisJdmFsID0gKFdNODkwM19HUG5fRk5fR1BJT19JTlBVVCA8PCBXTTg5MDNfR1AxX0ZOX1NISUZUKSB8CisJCVdNODkwM19HUDFfRElSOworCisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwM19HUElPX0NPTlRST0xfMSArIG9mZnNldCwKKwkJCQkgICBtYXNrLCB2YWwpOworfQorCitzdGF0aWMgaW50IHdtODkwM19ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBncGlvX3RvX3dtODkwMyhjaGlwKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3bTg5MDMtPmNvZGVjOworCWludCByZWc7CisKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19HUElPX0NPTlRST0xfMSArIG9mZnNldCk7CisKKwlyZXR1cm4gKHJlZyAmIFdNODkwM19HUDFfTFZMX01BU0spID4+IFdNODkwM19HUDFfTFZMX1NISUZUOworfQorCitzdGF0aWMgaW50IHdtODkwM19ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gZ3Bpb190b193bTg5MDMoY2hpcCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTAzLT5jb2RlYzsKKwl1bnNpZ25lZCBpbnQgbWFzaywgdmFsOworCisJbWFzayA9IFdNODkwM19HUDFfRk5fTUFTSyB8IFdNODkwM19HUDFfRElSX01BU0sgfCBXTTg5MDNfR1AxX0xWTF9NQVNLOworCXZhbCA9IChXTTg5MDNfR1BuX0ZOX0dQSU9fT1VUUFVUIDw8IFdNODkwM19HUDFfRk5fU0hJRlQpIHwKKwkJKHZhbHVlIDw8IFdNODkwM19HUDJfTFZMX1NISUZUKTsKKworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfR1BJT19DT05UUk9MXzEgKyBvZmZzZXQsCisJCQkJICAgbWFzaywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgd204OTAzX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gZ3Bpb190b193bTg5MDMoY2hpcCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTAzLT5jb2RlYzsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwM19HUElPX0NPTlRST0xfMSArIG9mZnNldCwKKwkJCSAgICBXTTg5MDNfR1AxX0xWTF9NQVNLLAorCQkJICAgICEhdmFsdWUgPDwgV004OTAzX0dQMV9MVkxfU0hJRlQpOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCB3bTg5MDNfdGVtcGxhdGVfY2hpcCA9IHsKKwkubGFiZWwJCQk9ICJ3bTg5MDMiLAorCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLnJlcXVlc3QJCT0gd204OTAzX2dwaW9fcmVxdWVzdCwKKwkuZGlyZWN0aW9uX2lucHV0CT0gd204OTAzX2dwaW9fZGlyZWN0aW9uX2luLAorCS5nZXQJCQk9IHdtODkwM19ncGlvX2dldCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHdtODkwM19ncGlvX2RpcmVjdGlvbl9vdXQsCisJLnNldAkJCT0gd204OTAzX2dwaW9fc2V0LAorCS5jYW5fc2xlZXAJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIHdtODkwM19pbml0X2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHdtODkwM19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoY29kZWMtPmRldik7CisJaW50IHJldDsKKworCXdtODkwMy0+Z3Bpb19jaGlwID0gd204OTAzX3RlbXBsYXRlX2NoaXA7CisJd204OTAzLT5ncGlvX2NoaXAubmdwaW8gPSBXTTg5MDNfTlVNX0dQSU87CisJd204OTAzLT5ncGlvX2NoaXAuZGV2ID0gY29kZWMtPmRldjsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+Z3Bpb19iYXNlKQorCQl3bTg5MDMtPmdwaW9fY2hpcC5iYXNlID0gcGRhdGEtPmdwaW9fYmFzZTsKKwllbHNlCisJCXdtODkwMy0+Z3Bpb19jaGlwLmJhc2UgPSAtMTsKKworCXJldCA9IGdwaW9jaGlwX2FkZCgmd204OTAzLT5ncGlvX2NoaXApOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBHUElPczogJWRcbiIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwM19mcmVlX2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmd204OTAzLT5ncGlvX2NoaXApOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlbW92ZSBHUElPczogJWRcbiIsIHJldCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgd204OTAzX2luaXRfZ3BpbyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwM19mcmVlX2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgd204OTAzX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd204OTAzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShjb2RlYy0+ZGV2KTsKQEAgLTE2NDMsNyArMTg5NCw3IEBACiAJaW50IHRyaWdnZXIsIGlycV9wb2w7CiAJdTE2IHZhbDsKIAotCWluaXRfY29tcGxldGlvbigmd204OTAzLT53c2VxKTsKKwl3bTg5MDMtPmNvZGVjID0gY29kZWM7CiAKIAlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgMTYsIFNORF9TT0NfSTJDKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTE2NTksMTkgKzE5MTAsMzMgQEAKIAl9CiAKIAl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19SRVZJU0lPTl9OVU1CRVIpOwotCWRldl9pbmZvKGNvZGVjLT5kZXYsICJXTTg5MDMgcmV2aXNpb24gJWRcbiIsCi0JCSB2YWwgJiBXTTg5MDNfQ0hJUF9SRVZfTUFTSyk7CisJZGV2X2luZm8oY29kZWMtPmRldiwgIldNODkwMyByZXZpc2lvbiAlY1xuIiwKKwkJICh2YWwgJiBXTTg5MDNfQ0hJUF9SRVZfTUFTSykgKyAnQScpOwogCiAJd204OTAzX3Jlc2V0KGNvZGVjKTsKIAogCS8qIFNldCB1cCBHUElPcyBhbmQgbWljcm9waG9uZSBkZXRlY3Rpb24gKi8KIAlpZiAocGRhdGEpIHsKKwkJYm9vbCBtaWNfZ3BpbyA9IGZhbHNlOworCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYXRhLT5ncGlvX2NmZyk7IGkrKykgewotCQkJaWYgKCFwZGF0YS0+Z3Bpb19jZmdbaV0pCisJCQlpZiAocGRhdGEtPmdwaW9fY2ZnW2ldID09IFdNODkwM19HUElPX05PX0NPTkZJRykKIAkJCQljb250aW51ZTsKIAogCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0dQSU9fQ09OVFJPTF8xICsgaSwKIAkJCQkgICAgICBwZGF0YS0+Z3Bpb19jZmdbaV0gJiAweGZmZmYpOworCisJCQl2YWwgPSAocGRhdGEtPmdwaW9fY2ZnW2ldICYgV004OTAzX0dQMV9GTl9NQVNLKQorCQkJCT4+IFdNODkwM19HUDFfRk5fU0hJRlQ7CisKKwkJCXN3aXRjaCAodmFsKSB7CisJCQljYXNlIFdNODkwM19HUG5fRk5fTUlDQklBU19DVVJSRU5UX0RFVEVDVDoKKwkJCWNhc2UgV004OTAzX0dQbl9GTl9NSUNCSUFTX1NIT1JUX0RFVEVDVDoKKwkJCQltaWNfZ3BpbyA9IHRydWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQogCQl9CiAKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX01JQ19CSUFTX0NPTlRST0xfMCwKQEAgLTE2ODIsNiArMTk0NywxNCBAQAogCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTAzX1dSSVRFX1NFUVVFTkNFUl8wLAogCQkJCQkgICAgV004OTAzX1dTRVFfRU5BLCBXTTg5MDNfV1NFUV9FTkEpOwogCisJCS8qIElmIG1pY3JvcGhvbmUgZGV0ZWN0aW9uIGlzIGVuYWJsZWQgYnkgcGRhdGEgYnV0CisJCSAqIGRldGVjdGVkIHZpYSBJUlEgdGhlbiBpbnRlcnJ1cHRzIGNhbiBiZSBsb3N0IGJlZm9yZQorCQkgKiB0aGUgbWFjaGluZSBkcml2ZXIgaGFzIHNldCB1cCBtaWNyb3Bob25lIGRldGVjdGlvbgorCQkgKiBJUlFzIGFzIHRoZSBJUlFzIGFyZSBjbGVhciBvbiByZWFkLiAgVGhlIGRldGVjdGlvbgorCQkgKiB3aWxsIGJlIGVuYWJsZWQgd2hlbiB0aGUgbWFjaGluZSBkcml2ZXIgY29uZmlndXJlcy4KKwkJICovCisJCVdBUk5fT04oIW1pY19ncGlvICYmIChwZGF0YS0+bWljZGV0X2NmZyAmIFdNODkwM19NSUNERVRfRU5BKSk7CisKIAkJd204OTAzLT5taWNfZGVsYXkgPSBwZGF0YS0+bWljZGV0X2RlbGF5OwogCX0KIAkKQEAgLTE3NDEsMjAgKzIwMTQsMjMgQEAKIAlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfQU5BTE9HVUVfT1VUM19SSUdIVCwgdmFsKTsKIAogCS8qIEVuYWJsZSBEQUMgc29mdCBtdXRlIGJ5IGRlZmF1bHQgKi8KLQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF8xKTsKLQl2YWwgfD0gV004OTAzX0RBQ19NVVRFTU9ERTsKLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfREFDX0RJR0lUQUxfMSwgdmFsKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfREFDX0RJR0lUQUxfMSwKKwkJCSAgICBXTTg5MDNfREFDX01VVEVNT0RFIHwgV004OTAzX0RBQ19NVVRFLAorCQkJICAgIFdNODkwM19EQUNfTVVURU1PREUgfCBXTTg5MDNfREFDX01VVEUpOwogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODkwM19zbmRfY29udHJvbHMsCiAJCQkJQVJSQVlfU0laRSh3bTg5MDNfc25kX2NvbnRyb2xzKSk7CiAJd204OTAzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAorCXdtODkwM19pbml0X2dwaW8oY29kZWMpOworCiAJcmV0dXJuIHJldDsKIH0KIAogLyogcG93ZXIgZG93biBjaGlwICovCiBzdGF0aWMgaW50IHdtODkwM19yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXdtODkwM19mcmVlX2dwaW8oY29kZWMpOwogCXdtODkwM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzY5LDYgKzIwNDUsNyBAQAogCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHUxNiksCiAJLnJlZ19jYWNoZV9kZWZhdWx0ID0gd204OTAzX3JlZ19kZWZhdWx0cywKIAkudm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTg5MDNfdm9sYXRpbGVfcmVnaXN0ZXIsCisJLnNlcV9ub3RpZmllciA9IHdtODkwM19zZXFfbm90aWZpZXIsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQpAQCAtMTgwNyw3ICsyMDg0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODkwM19pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIndtODkwMy1jb2RlYyIsCisJCS5uYW1lID0gIndtODkwMyIsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlID0gICAgd204OTAzX2kyY19wcm9iZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5oCmluZGV4IGUzZWMyNDMuLmRiOTQ5MzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuaApAQCAtNzUsNiArNzUsMTQgQEAKICNkZWZpbmUgV004OTAzX0FOQUxPR1VFX1NQS19PVVRQVVRfQ09OVFJPTF8wICAgIDB4NDEKICNkZWZpbmUgV004OTAzX0RDX1NFUlZPXzAgICAgICAgICAgICAgICAgICAgICAgIDB4NDMKICNkZWZpbmUgV004OTAzX0RDX1NFUlZPXzIgICAgICAgICAgICAgICAgICAgICAgIDB4NDUKKyNkZWZpbmUgV004OTAzX0RDX1NFUlZPXzQJCQkweDQ3CisjZGVmaW5lIFdNODkwM19EQ19TRVJWT181CQkJMHg0OAorI2RlZmluZSBXTTg5MDNfRENfU0VSVk9fNgkJCTB4NDkKKyNkZWZpbmUgV004OTAzX0RDX1NFUlZPXzcJCQkweDRBCisjZGVmaW5lIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS18xCQkweDUxCisjZGVmaW5lIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS18yCQkweDUyCisjZGVmaW5lIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS18zCQkweDUzCisjZGVmaW5lIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS180CQkweDU0CiAjZGVmaW5lIFdNODkwM19BTkFMT0dVRV9IUF8wICAgICAgICAgICAgICAgICAgICAweDVBCiAjZGVmaW5lIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAgICAgICAgICAgICAgICAweDVFCiAjZGVmaW5lIFdNODkwM19DSEFSR0VfUFVNUF8wICAgICAgICAgICAgICAgICAgICAweDYyCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYwppbmRleCA5ZGU0NGE0Li40NDNhZTU4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKQEAgLTU5Niw3ICs1OTYsNyBAQAogCXsgMHgwMDNGLCAweDAwM0YsIDAgfSwgLyogUjI0OCAtIEZMTCBOQ08gVGVzdCAxICovCiB9OwogCi1zdGF0aWMgaW50IHdtODkwNF92b2xhdGlsZV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCB3bTg5MDRfdm9sYXRpbGVfcmVnaXN0ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXJldHVybiB3bTg5MDRfYWNjZXNzW3JlZ10udm9sOwogfQpAQCAtMjQzNiwxOSArMjQzNiwyOCBAQAogCX0KIAogCS8qIENoYW5nZSBzb21lIGRlZmF1bHQgc2V0dGluZ3MgLSBsYXRjaCBWVSBhbmQgZW5hYmxlIFpDICovCi0JcmVnX2NhY2hlW1dNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfTEVGVF0gfD0gV004OTA0X0FEQ19WVTsKLQlyZWdfY2FjaGVbV004OTA0X0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVF0gfD0gV004OTA0X0FEQ19WVTsKLQlyZWdfY2FjaGVbV004OTA0X0RBQ19ESUdJVEFMX1ZPTFVNRV9MRUZUXSB8PSBXTTg5MDRfREFDX1ZVOwotCXJlZ19jYWNoZVtXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX1JJR0hUXSB8PSBXTTg5MDRfREFDX1ZVOwotCXJlZ19jYWNoZVtXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZUXSB8PSBXTTg5MDRfSFBPVVRfVlUgfAotCQlXTTg5MDRfSFBPVVRMWkM7Ci0JcmVnX2NhY2hlW1dNODkwNF9BTkFMT0dVRV9PVVQxX1JJR0hUXSB8PSBXTTg5MDRfSFBPVVRfVlUgfAotCQlXTTg5MDRfSFBPVVRSWkM7Ci0JcmVnX2NhY2hlW1dNODkwNF9BTkFMT0dVRV9PVVQyX0xFRlRdIHw9IFdNODkwNF9MSU5FT1VUX1ZVIHwKLQkJV004OTA0X0xJTkVPVVRMWkM7Ci0JcmVnX2NhY2hlW1dNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hUXSB8PSBXTTg5MDRfTElORU9VVF9WVSB8Ci0JCVdNODkwNF9MSU5FT1VUUlpDOwotCXJlZ19jYWNoZVtXTTg5MDRfQ0xPQ0tfUkFURVNfMF0gJj0gfldNODkwNF9TUl9NT0RFOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfTEVGVCwKKwkJCSAgICBXTTg5MDRfQURDX1ZVLCBXTTg5MDRfQURDX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX1JJR0hULAorCQkJICAgIFdNODkwNF9BRENfVlUsIFdNODkwNF9BRENfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EQUNfRElHSVRBTF9WT0xVTUVfTEVGVCwKKwkJCSAgICBXTTg5MDRfREFDX1ZVLCBXTTg5MDRfREFDX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX1JJR0hULAorCQkJICAgIFdNODkwNF9EQUNfVlUsIFdNODkwNF9EQUNfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BTkFMT0dVRV9PVVQxX0xFRlQsCisJCQkgICAgV004OTA0X0hQT1VUX1ZVIHwgV004OTA0X0hQT1VUTFpDLAorCQkJICAgIFdNODkwNF9IUE9VVF9WVSB8IFdNODkwNF9IUE9VVExaQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0FOQUxPR1VFX09VVDFfUklHSFQsCisJCQkgICAgV004OTA0X0hQT1VUX1ZVIHwgV004OTA0X0hQT1VUUlpDLAorCQkJICAgIFdNODkwNF9IUE9VVF9WVSB8IFdNODkwNF9IUE9VVFJaQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0FOQUxPR1VFX09VVDJfTEVGVCwKKwkJCSAgICBXTTg5MDRfTElORU9VVF9WVSB8IFdNODkwNF9MSU5FT1VUTFpDLAorCQkJICAgIFdNODkwNF9MSU5FT1VUX1ZVIHwgV004OTA0X0xJTkVPVVRMWkMpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hULAorCQkJICAgIFdNODkwNF9MSU5FT1VUX1ZVIHwgV004OTA0X0xJTkVPVVRSWkMsCisJCQkgICAgV004OTA0X0xJTkVPVVRfVlUgfCBXTTg5MDRfTElORU9VVFJaQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzAsCisJCQkgICAgV004OTA0X1NSX01PREUsIDApOwogCiAJLyogQXBwbHkgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBwbGF0Zm9ybSBkYXRhLiAqLwogCWlmICh3bTg5MDQtPnBkYXRhKSB7CkBAIC0yNDY5LDEwICsyNDc4LDEyIEBACiAJLyogU2V0IENsYXNzIFcgYnkgZGVmYXVsdCAtIHRoaXMgd2lsbCBiZSBtYW5hZ2VkIGJ5IHRoZSBDbGFzcwogCSAqIEcgd2lkZ2V0IGF0IHJ1bnRpbWUgd2hlcmUgYnlwYXNzIHBhdGhzIGFyZSBhdmFpbGFibGUuCiAJICovCi0JcmVnX2NhY2hlW1dNODkwNF9DTEFTU19XXzBdIHw9IFdNODkwNF9DUF9EWU5fUFdSOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTEFTU19XXzAsCisJCQkgICAgV004OTA0X0NQX0RZTl9QV1IsIFdNODkwNF9DUF9EWU5fUFdSKTsKIAogCS8qIFVzZSBub3JtYWwgYmlhcyBzb3VyY2UgKi8KLQlyZWdfY2FjaGVbV004OTA0X0JJQVNfQ09OVFJPTF8wXSAmPSB+V004OTA0X1BPQkNUUkw7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0JJQVNfQ09OVFJPTF8wLAorCQkJICAgIFdNODkwNF9QT0JDVFJMLCAwKTsKIAogCXdtODkwNF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwppbmRleCA3MTY3ZGZjLi41ZTAyMTRkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMKQEAgLTkzNCwxNiArOTM0LDI3IEBACiAJfQogCiAJLyogQ2hhbmdlIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyAtIGxhdGNoIFZVIGFuZCBlbmFibGUgWkMgKi8KLQlyZWdfY2FjaGVbV004OTU1X0xFRlRfREFDX1ZPTFVNRV0gfD0gV004OTU1X0xEVlU7Ci0JcmVnX2NhY2hlW1dNODk1NV9SSUdIVF9EQUNfVk9MVU1FXSB8PSBXTTg5NTVfUkRWVTsKLQlyZWdfY2FjaGVbV004OTU1X0xPVVQxX1ZPTFVNRV0gfD0gV004OTU1X0xPMVZVIHwgV004OTU1X0xPMVpDOwotCXJlZ19jYWNoZVtXTTg5NTVfUk9VVDFfVk9MVU1FXSB8PSBXTTg5NTVfUk8xVlUgfCBXTTg5NTVfUk8xWkM7Ci0JcmVnX2NhY2hlW1dNODk1NV9MT1VUMl9WT0xVTUVdIHw9IFdNODk1NV9MTzJWVSB8IFdNODk1NV9MTzJaQzsKLQlyZWdfY2FjaGVbV004OTU1X1JPVVQyX1ZPTFVNRV0gfD0gV004OTU1X1JPMlZVIHwgV004OTU1X1JPMlpDOwotCXJlZ19jYWNoZVtXTTg5NTVfTU9OT09VVF9WT0xVTUVdIHw9IFdNODk1NV9NT1pDOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9MRUZUX0RBQ19WT0xVTUUsCisJCQkgICAgV004OTU1X0xEVlUsIFdNODk1NV9MRFZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUklHSFRfREFDX1ZPTFVNRSwKKwkJCSAgICBXTTg5NTVfUkRWVSwgV004OTU1X1JEVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9MT1VUMV9WT0xVTUUsCisJCQkgICAgV004OTU1X0xPMVZVIHwgV004OTU1X0xPMVpDLAorCQkJICAgIFdNODk1NV9MTzFWVSB8IFdNODk1NV9MTzFaQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1JPVVQxX1ZPTFVNRSwKKwkJCSAgICBXTTg5NTVfUk8xVlUgfCBXTTg5NTVfUk8xWkMsCisJCQkgICAgV004OTU1X1JPMVZVIHwgV004OTU1X1JPMVpDKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfTE9VVDJfVk9MVU1FLAorCQkJICAgIFdNODk1NV9MTzJWVSB8IFdNODk1NV9MTzJaQywKKwkJCSAgICBXTTg5NTVfTE8yVlUgfCBXTTg5NTVfTE8yWkMpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9ST1VUMl9WT0xVTUUsCisJCQkgICAgV004OTU1X1JPMlZVIHwgV004OTU1X1JPMlpDLAorCQkJICAgIFdNODk1NV9STzJWVSB8IFdNODk1NV9STzJaQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X01PTk9PVVRfVk9MVU1FLAorCQkJICAgIFdNODk1NV9NT1pDLCBXTTg5NTVfTU9aQyk7CiAKIAkvKiBBbHNvIGVuYWJsZSBhZGFwdGl2ZSBiYXNzIGJvb3N0IGJ5IGRlZmF1bHQgKi8KLQlyZWdfY2FjaGVbV004OTU1X0JBU1NfQ09OVFJPTF0gfD0gV004OTU1X0JCOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9CQVNTX0NPTlRST0wsIFdNODk1NV9CQiwgV004OTU1X0JCKTsKIAogCS8qIFNldCBwbGF0Zm9ybSBkYXRhIHZhbHVlcyAqLwogCWlmIChwZGF0YSkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMKaW5kZXggNTUyNTJlNy4uY2RlZTgxMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCkBAIC0yOTEsNyArMjkxLDcgQEAKIAlpbnQgc3lzY2xrOwogfTsKIAotc3RhdGljIGludCB3bTg5NjFfdm9sYXRpbGVfcmVnaXN0ZXIodW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbnQgd204OTYxX3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKIHsKIAlzd2l0Y2ggKHJlZykgewogCWNhc2UgV004OTYxX1NPRlRXQVJFX1JFU0VUOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKaW5kZXggYjljYjFmYy4uM2I3MWRkNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCkBAIC0xOTM4LDcgKzE5MzgsNyBAQAogCVsyMTEzOV0gPSB7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjIxMTM5IC0gVlNTX1hUUzMyXzAgKi8KIH07CiAKLXN0YXRpYyBpbnQgd204OTYyX3ZvbGF0aWxlX3JlZ2lzdGVyKHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW50IHdtODk2Ml92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJaWYgKHdtODk2Ml9yZWdfYWNjZXNzW3JlZ10udm9sKQogCQlyZXR1cm4gMTsKQEAgLTE5NDYsNyArMTk0Niw3IEBACiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODk2Ml9yZWFkYWJsZV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCB3bTg5NjJfcmVhZGFibGVfcmVnaXN0ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCWlmICh3bTg5NjJfcmVnX2FjY2Vzc1tyZWddLnJlYWQpCiAJCXJldHVybiAxOwpAQCAtMzYzNSw3ICszNjM1LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3bTg5NjItPmNvZGVjOwogCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYyX0dQSU9fQkFTRSArIG9mZnNldCwKLQkJCSAgICBXTTg5NjJfR1AyX0xWTCwgdmFsdWUgPDwgV004OTYyX0dQMl9MVkxfU0hJRlQpOworCQkJICAgIFdNODk2Ml9HUDJfTFZMLCAhIXZhbHVlIDw8IFdNODk2Ml9HUDJfTFZMX1NISUZUKTsKIH0KIAogc3RhdGljIGludCB3bTg5NjJfZ3Bpb19kaXJlY3Rpb25fb3V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCkBAIC0zODIyLDE2ICszODIyLDI2IEBACiAJfQogCiAJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZSBiaXRzICovCi0JcmVnX2NhY2hlW1dNODk2Ml9MRUZUX0lOUFVUX1ZPTFVNRV0gfD0gV004OTYyX0lOX1ZVOwotCXJlZ19jYWNoZVtXTTg5NjJfUklHSFRfSU5QVVRfVk9MVU1FXSB8PSBXTTg5NjJfSU5fVlU7Ci0JcmVnX2NhY2hlW1dNODk2Ml9MRUZUX0FEQ19WT0xVTUVdIHw9IFdNODk2Ml9BRENfVlU7Ci0JcmVnX2NhY2hlW1dNODk2Ml9SSUdIVF9BRENfVk9MVU1FXSB8PSBXTTg5NjJfQURDX1ZVOwotCXJlZ19jYWNoZVtXTTg5NjJfTEVGVF9EQUNfVk9MVU1FXSB8PSBXTTg5NjJfREFDX1ZVOwotCXJlZ19jYWNoZVtXTTg5NjJfUklHSFRfREFDX1ZPTFVNRV0gfD0gV004OTYyX0RBQ19WVTsKLQlyZWdfY2FjaGVbV004OTYyX1NQS09VVExfVk9MVU1FXSB8PSBXTTg5NjJfU1BLT1VUX1ZVOwotCXJlZ19jYWNoZVtXTTg5NjJfU1BLT1VUUl9WT0xVTUVdIHw9IFdNODk2Ml9TUEtPVVRfVlU7Ci0JcmVnX2NhY2hlW1dNODk2Ml9IUE9VVExfVk9MVU1FXSB8PSBXTTg5NjJfSFBPVVRfVlU7Ci0JcmVnX2NhY2hlW1dNODk2Ml9IUE9VVFJfVk9MVU1FXSB8PSBXTTg5NjJfSFBPVVRfVlU7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYyX0xFRlRfSU5QVVRfVk9MVU1FLAorCQkJICAgIFdNODk2Ml9JTl9WVSwgV004OTYyX0lOX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NjJfUklHSFRfSU5QVVRfVk9MVU1FLAorCQkJICAgIFdNODk2Ml9JTl9WVSwgV004OTYyX0lOX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NjJfTEVGVF9BRENfVk9MVU1FLAorCQkJICAgIFdNODk2Ml9BRENfVlUsIFdNODk2Ml9BRENfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk2Ml9SSUdIVF9BRENfVk9MVU1FLAorCQkJICAgIFdNODk2Ml9BRENfVlUsIFdNODk2Ml9BRENfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk2Ml9MRUZUX0RBQ19WT0xVTUUsCisJCQkgICAgV004OTYyX0RBQ19WVSwgV004OTYyX0RBQ19WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYyX1JJR0hUX0RBQ19WT0xVTUUsCisJCQkgICAgV004OTYyX0RBQ19WVSwgV004OTYyX0RBQ19WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYyX1NQS09VVExfVk9MVU1FLAorCQkJICAgIFdNODk2Ml9TUEtPVVRfVlUsIFdNODk2Ml9TUEtPVVRfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk2Ml9TUEtPVVRSX1ZPTFVNRSwKKwkJCSAgICBXTTg5NjJfU1BLT1VUX1ZVLCBXTTg5NjJfU1BLT1VUX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NjJfSFBPVVRMX1ZPTFVNRSwKKwkJCSAgICBXTTg5NjJfSFBPVVRfVlUsIFdNODk2Ml9IUE9VVF9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYyX0hQT1VUUl9WT0xVTUUsCisJCQkgICAgV004OTYyX0hQT1VUX1ZVLCBXTTg5NjJfSFBPVVRfVlUpOwogCiAJd204OTYyX2FkZF93aWRnZXRzKGNvZGVjKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzguYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmMKaW5kZXggOGRmYjBhMC4uODVlM2U2MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCkBAIC05Myw2ICs5Myw3IEBACiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5wZ2FfdGx2LCAtMTIwMCwgNzUsIDApOwogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHNwa190bHYsIC01NzAwLCAxMDAsIDApOwogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGJvb3N0X3RsdiwgLTE1MDAsIDMwMCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobGltaXRlcl90bHYsIDAsIDEwMCwgMCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5Nzhfc25kX2NvbnRyb2xzW10gPSB7CiAKQEAgLTE0NCw4ICsxNDUsOCBAQAogCiAJU09DX1NJTkdMRSgiREFDIFBsYXliYWNrIExpbWl0ZXIgVGhyZXNob2xkIiwKIAkJV004OTc4X0RBQ19MSU1JVEVSXzIsIDQsIDcsIDApLAotCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIEJvb3N0IiwKLQkJV004OTc4X0RBQ19MSU1JVEVSXzIsIDAsIDEyLCAwKSwKKwlTT0NfU0lOR0xFX1RMVigiREFDIFBsYXliYWNrIExpbWl0ZXIgVm9sdW1lIiwKKwkJV004OTc4X0RBQ19MSU1JVEVSXzIsIDAsIDEyLCAwLCBsaW1pdGVyX3RsdiksCiAKIAlTT0NfRU5VTSgiQUxDIEVuYWJsZSBTd2l0Y2giLCBhbGMxKSwKIAlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNaW4gR2FpbiIsIFdNODk3OF9BTENfQ09OVFJPTF8xLCAwLCA3LCAwKSwKQEAgLTk2Nyw3ICs5NjgsNyBAQAogCSAqIHdyaXR0ZW4uCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodXBkYXRlX3JlZyk7IGkrKykKLQkJKCh1MTYgKiljb2RlYy0+cmVnX2NhY2hlKVt1cGRhdGVfcmVnW2ldXSB8PSAweDEwMDsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgdXBkYXRlX3JlZ1tpXSwgMHgxMDAsIDB4MTAwKTsKIAogCS8qIFJlc2V0IHRoZSBjb2RlYyAqLwogCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9SRVNFVCwgMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZkZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTEuYwpAQCAtMCwwICsxLDE0MjcgQEAKKy8qCisgKiB3bTg5OTEuYyAgLS0gIFdNODk5MSBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDEwIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBBdXRob3I6IEdyYWVtZSBHcmVnb3J5CisgKiAgICAgICAgIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgIndtODk5MS5oIgorCitzdHJ1Y3Qgd204OTkxX3ByaXYgeworCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOworCXVuc2lnbmVkIGludCBwY21jbGs7Cit9OworCitzdGF0aWMgY29uc3QgdTE2IHdtODk5MV9yZWdfZGVmc1tdID0geworCTB4ODk5MSwgICAgIC8qIFIwICAtIFJlc2V0ICovCisJMHgwMDAwLCAgICAgLyogUjEgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KKwkweDYwMDAsICAgICAvKiBSMiAgLSBQb3dlciBNYW5hZ2VtZW50ICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIzICAtIFBvd2VyIE1hbmFnZW1lbnQgKDMpICovCisJMHg0MDUwLCAgICAgLyogUjQgIC0gQXVkaW8gSW50ZXJmYWNlICgxKSAqLworCTB4NDAwMCwgICAgIC8qIFI1ICAtIEF1ZGlvIEludGVyZmFjZSAoMikgKi8KKwkweDAxQzgsICAgICAvKiBSNiAgLSBDbG9ja2luZyAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSNyAgLSBDbG9ja2luZyAoMikgKi8KKwkweDAwNDAsICAgICAvKiBSOCAgLSBBdWRpbyBJbnRlcmZhY2UgKDMpICovCisJMHgwMDQwLCAgICAgLyogUjkgIC0gQXVkaW8gSW50ZXJmYWNlICg0KSAqLworCTB4MDAwNCwgICAgIC8qIFIxMCAtIERBQyBDVFJMICovCisJMHgwMEMwLCAgICAgLyogUjExIC0gTGVmdCBEQUMgRGlnaXRhbCBWb2x1bWUgKi8KKwkweDAwQzAsICAgICAvKiBSMTIgLSBSaWdodCBEQUMgRGlnaXRhbCBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTMgLSBEaWdpdGFsIFNpZGUgVG9uZSAqLworCTB4MDEwMCwgICAgIC8qIFIxNCAtIEFEQyBDVFJMICovCisJMHgwMEMwLCAgICAgLyogUjE1IC0gTGVmdCBBREMgRGlnaXRhbCBWb2x1bWUgKi8KKwkweDAwQzAsICAgICAvKiBSMTYgLSBSaWdodCBBREMgRGlnaXRhbCBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTggLSBHUElPIENUUkwgMSAqLworCTB4MTAwMCwgICAgIC8qIFIxOSAtIEdQSU8xICYgR1BJTzIgKi8KKwkweDEwMTAsICAgICAvKiBSMjAgLSBHUElPMyAmIEdQSU80ICovCisJMHgxMDEwLCAgICAgLyogUjIxIC0gR1BJTzUgJiBHUElPNiAqLworCTB4ODAwMCwgICAgIC8qIFIyMiAtIEdQSU9DVFJMIDIgKi8KKwkweDA4MDAsICAgICAvKiBSMjMgLSBHUElPX1BPTCAqLworCTB4MDA4QiwgICAgIC8qIFIyNCAtIExlZnQgTGluZSBJbnB1dCAxJjIgVm9sdW1lICovCisJMHgwMDhCLCAgICAgLyogUjI1IC0gTGVmdCBMaW5lIElucHV0IDMmNCBWb2x1bWUgKi8KKwkweDAwOEIsICAgICAvKiBSMjYgLSBSaWdodCBMaW5lIElucHV0IDEmMiBWb2x1bWUgKi8KKwkweDAwOEIsICAgICAvKiBSMjcgLSBSaWdodCBMaW5lIElucHV0IDMmNCBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMjggLSBMZWZ0IE91dHB1dCBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMjkgLSBSaWdodCBPdXRwdXQgVm9sdW1lICovCisJMHgwMDY2LCAgICAgLyogUjMwIC0gTGluZSBPdXRwdXRzIFZvbHVtZSAqLworCTB4MDAyMiwgICAgIC8qIFIzMSAtIE91dDMvNCBWb2x1bWUgKi8KKwkweDAwNzksICAgICAvKiBSMzIgLSBMZWZ0IE9QR0EgVm9sdW1lICovCisJMHgwMDc5LCAgICAgLyogUjMzIC0gUmlnaHQgT1BHQSBWb2x1bWUgKi8KKwkweDAwMDMsICAgICAvKiBSMzQgLSBTcGVha2VyIFZvbHVtZSAqLworCTB4MDAwMywgICAgIC8qIFIzNSAtIENsYXNzRDEgKi8KKwkweDAwMDAsICAgICAvKiBSMzYgKi8KKwkweDAxMDAsICAgICAvKiBSMzcgLSBDbGFzc0QzICovCisJMHgwMDAwLCAgICAgLyogUjM4ICovCisJMHgwMDAwLCAgICAgLyogUjM5IC0gSW5wdXQgTWl4ZXIxICovCisJMHgwMDAwLCAgICAgLyogUjQwIC0gSW5wdXQgTWl4ZXIyICovCisJMHgwMDAwLCAgICAgLyogUjQxIC0gSW5wdXQgTWl4ZXIzICovCisJMHgwMDAwLCAgICAgLyogUjQyIC0gSW5wdXQgTWl4ZXI0ICovCisJMHgwMDAwLCAgICAgLyogUjQzIC0gSW5wdXQgTWl4ZXI1ICovCisJMHgwMDAwLCAgICAgLyogUjQ0IC0gSW5wdXQgTWl4ZXI2ICovCisJMHgwMDAwLCAgICAgLyogUjQ1IC0gT3V0cHV0IE1peGVyMSAqLworCTB4MDAwMCwgICAgIC8qIFI0NiAtIE91dHB1dCBNaXhlcjIgKi8KKwkweDAwMDAsICAgICAvKiBSNDcgLSBPdXRwdXQgTWl4ZXIzICovCisJMHgwMDAwLCAgICAgLyogUjQ4IC0gT3V0cHV0IE1peGVyNCAqLworCTB4MDAwMCwgICAgIC8qIFI0OSAtIE91dHB1dCBNaXhlcjUgKi8KKwkweDAwMDAsICAgICAvKiBSNTAgLSBPdXRwdXQgTWl4ZXI2ICovCisJMHgwMTgwLCAgICAgLyogUjUxIC0gT3V0My80IE1peGVyICovCisJMHgwMDAwLCAgICAgLyogUjUyIC0gTGluZSBNaXhlcjEgKi8KKwkweDAwMDAsICAgICAvKiBSNTMgLSBMaW5lIE1peGVyMiAqLworCTB4MDAwMCwgICAgIC8qIFI1NCAtIFNwZWFrZXIgTWl4ZXIgKi8KKwkweDAwMDAsICAgICAvKiBSNTUgLSBBZGRpdGlvbmFsIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNTYgLSBBbnRpUE9QMSAqLworCTB4MDAwMCwgICAgIC8qIFI1NyAtIEFudGlQT1AyICovCisJMHgwMDAwLCAgICAgLyogUjU4IC0gTUlDQklBUyAqLworCTB4MDAwMCwgICAgIC8qIFI1OSAqLworCTB4MDAwOCwgICAgIC8qIFI2MCAtIFBMTDEgKi8KKwkweDAwMzEsICAgICAvKiBSNjEgLSBQTEwyICovCisJMHgwMDI2LCAgICAgLyogUjYyIC0gUExMMyAqLworfTsKKworI2RlZmluZSB3bTg5OTFfcmVzZXQoYykgc25kX3NvY193cml0ZShjLCBXTTg5OTFfUkVTRVQsIDApCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVjX21peF90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgxKSwKKwkwLCA3LCBUTFZfREJfTElORUFSX0lURU0oLTE1MDAsIDYwMCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGluX3BnYV90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgxKSwKKwkwLCAweDFGLCBUTFZfREJfTElORUFSX0lURU0oLTE2NTAsIDMwMDApLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBvdXRfbWl4X3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDEpLAorCTAsIDcsIFRMVl9EQl9MSU5FQVJfSVRFTSgwLCAtMjEwMCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG91dF9wZ2FfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoMSksCisJMCwgMTI3LCBUTFZfREJfTElORUFSX0lURU0oLTczMDAsIDYwMCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG91dF9vbWl4X3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDEpLAorCTAsIDcsIFRMVl9EQl9MSU5FQVJfSVRFTSgtNjAwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgb3V0X2RhY190bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgxKSwKKwkwLCAyNTUsIFRMVl9EQl9MSU5FQVJfSVRFTSgtNzE2MywgMCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGluX2FkY190bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgxKSwKKwkwLCAyNTUsIFRMVl9EQl9MSU5FQVJfSVRFTSgtNzE2MywgMTc2MyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG91dF9zaWRldG9uZV90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgxKSwKKwkwLCAzMSwgVExWX0RCX0xJTkVBUl9JVEVNKC0zNjAwLCAwKSwKK307CisKK3N0YXRpYyBpbnQgd204OTl4X291dHBnYV9wdXRfdm9sc3dfdnUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCByZWcgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJaW50IHJldDsKKwl1MTYgdmFsOworCisJcmV0ID0gc25kX3NvY19wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIG5vdyBoaXQgdGhlIHZvbHVtZSB1cGRhdGUgYml0cyAoYWx3YXlzIGJpdCA4KSAqLworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgcmVnKTsKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWwgfCAweDAxMDApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqd204OTkxX2RpZ2l0YWxfc2lkZXRvbmVbXSA9Cit7Ik5vbmUiLCAiTGVmdCBBREMiLCAiUmlnaHQgQURDIiwgIlJlc2VydmVkIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204OTkxX2xlZnRfZGlnaXRhbF9zaWRldG9uZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkxX0RJR0lUQUxfU0lERV9UT05FLAorCQkJV004OTkxX0FEQ19UT19EQUNMX1NISUZULAorCQkJV004OTkxX0FEQ19UT19EQUNMX01BU0ssCisJCQl3bTg5OTFfZGlnaXRhbF9zaWRldG9uZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204OTkxX3JpZ2h0X2RpZ2l0YWxfc2lkZXRvbmVfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5MV9ESUdJVEFMX1NJREVfVE9ORSwKKwkJCVdNODk5MV9BRENfVE9fREFDUl9TSElGVCwKKwkJCVdNODk5MV9BRENfVE9fREFDUl9NQVNLLAorCQkJd204OTkxX2RpZ2l0YWxfc2lkZXRvbmUpOworCitzdGF0aWMgY29uc3QgY2hhciAqd204OTkxX2FkY21vZGVbXSA9Cit7IkhpLWZpIG1vZGUiLCAiVm9pY2UgbW9kZSAxIiwgIlZvaWNlIG1vZGUgMiIsICJWb2ljZSBtb2RlIDMifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg5OTFfcmlnaHRfYWRjbW9kZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkxX0FEQ19DVFJMLAorCQkJV004OTkxX0FEQ19IUEZfQ1VUX1NISUZULAorCQkJV004OTkxX0FEQ19IUEZfQ1VUX01BU0ssCisJCQl3bTg5OTFfYWRjbW9kZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTFfc25kX2NvbnRyb2xzW10gPSB7CisJLyogSU5NSVhMICovCisJU09DX1NJTkdMRSgiTElOMTIgUEdBIEJvb3N0IiwgV004OTkxX0lOUFVUX01JWEVSMywgV004OTkxX0wxMk1OQlNUX0JJVCwgMSwgMCksCisJU09DX1NJTkdMRSgiTElOMzQgUEdBIEJvb3N0IiwgV004OTkxX0lOUFVUX01JWEVSMywgV004OTkxX0wzNE1OQlNUX0JJVCwgMSwgMCksCisJLyogSU5NSVhSICovCisJU09DX1NJTkdMRSgiUklOMTIgUEdBIEJvb3N0IiwgV004OTkxX0lOUFVUX01JWEVSMywgV004OTkxX1IxMk1OQlNUX0JJVCwgMSwgMCksCisJU09DX1NJTkdMRSgiUklOMzQgUEdBIEJvb3N0IiwgV004OTkxX0lOUFVUX01JWEVSMywgV004OTkxX1IzNE1OQlNUX0JJVCwgMSwgMCksCisKKwkvKiBMT01JWCAqLworCVNPQ19TSU5HTEVfVExWKCJMT01JWCBMSU4zIEJ5cGFzcyBWb2x1bWUiLCBXTTg5OTFfT1VUUFVUX01JWEVSMywKKwkJV004OTkxX0xMSTNMT1ZPTF9TSElGVCwgV004OTkxX0xMSTNMT1ZPTF9NQVNLLCAxLCBvdXRfbWl4X3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkxPTUlYIFJJTjEyIFBHQSBCeXBhc3MgVm9sdW1lIiwgV004OTkxX09VVFBVVF9NSVhFUjMsCisJCVdNODk5MV9MUjEyTE9WT0xfU0hJRlQsIFdNODk5MV9MUjEyTE9WT0xfTUFTSywgMSwgb3V0X21peF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJMT01JWCBMSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODk5MV9PVVRQVVRfTUlYRVIzLAorCQlXTTg5OTFfTEwxMkxPVk9MX1NISUZULCBXTTg5OTFfTEwxMkxPVk9MX01BU0ssIDEsIG91dF9taXhfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiTE9NSVggUklOMyBCeXBhc3MgVm9sdW1lIiwgV004OTkxX09VVFBVVF9NSVhFUjUsCisJCVdNODk5MV9MUkkzTE9WT0xfU0hJRlQsIFdNODk5MV9MUkkzTE9WT0xfTUFTSywgMSwgb3V0X21peF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJMT01JWCBBSU5STVVYIEJ5cGFzcyBWb2x1bWUiLCBXTTg5OTFfT1VUUFVUX01JWEVSNSwKKwkJV004OTkxX0xSQkxPVk9MX1NISUZULCBXTTg5OTFfTFJCTE9WT0xfTUFTSywgMSwgb3V0X21peF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJMT01JWCBBSU5MTVVYIEJ5cGFzcyBWb2x1bWUiLCBXTTg5OTFfT1VUUFVUX01JWEVSNSwKKwkJV004OTkxX0xSQkxPVk9MX1NISUZULCBXTTg5OTFfTFJCTE9WT0xfTUFTSywgMSwgb3V0X21peF90bHYpLAorCisJLyogUk9NSVggKi8KKwlTT0NfU0lOR0xFX1RMVigiUk9NSVggUklOMyBCeXBhc3MgVm9sdW1lIiwgV004OTkxX09VVFBVVF9NSVhFUjQsCisJCVdNODk5MV9SUkkzUk9WT0xfU0hJRlQsIFdNODk5MV9SUkkzUk9WT0xfTUFTSywgMSwgb3V0X21peF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJST01JWCBMSU4xMiBQR0EgQnlwYXNzIFZvbHVtZSIsIFdNODk5MV9PVVRQVVRfTUlYRVI0LAorCQlXTTg5OTFfUkwxMlJPVk9MX1NISUZULCBXTTg5OTFfUkwxMlJPVk9MX01BU0ssIDEsIG91dF9taXhfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiUk9NSVggUklOMTIgUEdBIEJ5cGFzcyBWb2x1bWUiLCBXTTg5OTFfT1VUUFVUX01JWEVSNCwKKwkJV004OTkxX1JSMTJST1ZPTF9TSElGVCwgV004OTkxX1JSMTJST1ZPTF9NQVNLLCAxLCBvdXRfbWl4X3RsdiksCisJU09DX1NJTkdMRV9UTFYoIlJPTUlYIExJTjMgQnlwYXNzIFZvbHVtZSIsIFdNODk5MV9PVVRQVVRfTUlYRVI2LAorCQlXTTg5OTFfUkxJM1JPVk9MX1NISUZULCBXTTg5OTFfUkxJM1JPVk9MX01BU0ssIDEsIG91dF9taXhfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiUk9NSVggQUlOTE1VWCBCeXBhc3MgVm9sdW1lIiwgV004OTkxX09VVFBVVF9NSVhFUjYsCisJCVdNODk5MV9STEJST1ZPTF9TSElGVCwgV004OTkxX1JMQlJPVk9MX01BU0ssIDEsIG91dF9taXhfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiUk9NSVggQUlOUk1VWCBCeXBhc3MgVm9sdW1lIiwgV004OTkxX09VVFBVVF9NSVhFUjYsCisJCVdNODk5MV9SUkJST1ZPTF9TSElGVCwgV004OTkxX1JSQlJPVk9MX01BU0ssIDEsIG91dF9taXhfdGx2KSwKKworCS8qIExPVVQgKi8KKwlTT0NfV004OTlYX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxPVVQgVm9sdW1lIiwgV004OTkxX0xFRlRfT1VUUFVUX1ZPTFVNRSwKKwkJV004OTkxX0xPVVRWT0xfU0hJRlQsIFdNODk5MV9MT1VUVk9MX01BU0ssIDAsIG91dF9wZ2FfdGx2KSwKKwlTT0NfU0lOR0xFKCJMT1VUIFpDIiwgV004OTkxX0xFRlRfT1VUUFVUX1ZPTFVNRSwgV004OTkxX0xPWkNfQklULCAxLCAwKSwKKworCS8qIFJPVVQgKi8KKwlTT0NfV004OTlYX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJPVVQgVm9sdW1lIiwgV004OTkxX1JJR0hUX09VVFBVVF9WT0xVTUUsCisJCVdNODk5MV9ST1VUVk9MX1NISUZULCBXTTg5OTFfUk9VVFZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCisJU09DX1NJTkdMRSgiUk9VVCBaQyIsIFdNODk5MV9SSUdIVF9PVVRQVVRfVk9MVU1FLCBXTTg5OTFfUk9aQ19CSVQsIDEsIDApLAorCisJLyogTE9QR0EgKi8KKwlTT0NfV004OTlYX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxPUEdBIFZvbHVtZSIsIFdNODk5MV9MRUZUX09QR0FfVk9MVU1FLAorCQlXTTg5OTFfTE9QR0FWT0xfU0hJRlQsIFdNODk5MV9MT1BHQVZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCisJU09DX1NJTkdMRSgiTE9QR0EgWkMgU3dpdGNoIiwgV004OTkxX0xFRlRfT1BHQV9WT0xVTUUsCisJCVdNODk5MV9MT1BHQVpDX0JJVCwgMSwgMCksCisKKwkvKiBST1BHQSAqLworCVNPQ19XTTg5OVhfT1VUUEdBX1NJTkdMRV9SX1RMVigiUk9QR0EgVm9sdW1lIiwgV004OTkxX1JJR0hUX09QR0FfVk9MVU1FLAorCQlXTTg5OTFfUk9QR0FWT0xfU0hJRlQsIFdNODk5MV9ST1BHQVZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCisJU09DX1NJTkdMRSgiUk9QR0EgWkMgU3dpdGNoIiwgV004OTkxX1JJR0hUX09QR0FfVk9MVU1FLAorCQlXTTg5OTFfUk9QR0FaQ19CSVQsIDEsIDApLAorCisJU09DX1NJTkdMRSgiTE9OIE11dGUgU3dpdGNoIiwgV004OTkxX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJCVdNODk5MV9MT05NVVRFX0JJVCwgMSwgMCksCisJU09DX1NJTkdMRSgiTE9QIE11dGUgU3dpdGNoIiwgV004OTkxX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJCVdNODk5MV9MT1BNVVRFX0JJVCwgMSwgMCksCisJU09DX1NJTkdMRSgiTE9QIEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODk5MV9MSU5FX09VVFBVVFNfVk9MVU1FLAorCQlXTTg5OTFfTE9BVFROX0JJVCwgMSwgMCksCisJU09DX1NJTkdMRSgiUk9OIE11dGUgU3dpdGNoIiwgV004OTkxX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJCVdNODk5MV9ST05NVVRFX0JJVCwgMSwgMCksCisJU09DX1NJTkdMRSgiUk9QIE11dGUgU3dpdGNoIiwgV004OTkxX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJCVdNODk5MV9ST1BNVVRFX0JJVCwgMSwgMCksCisJU09DX1NJTkdMRSgiUk9QIEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODk5MV9MSU5FX09VVFBVVFNfVk9MVU1FLAorCQlXTTg5OTFfUk9BVFROX0JJVCwgMSwgMCksCisKKwlTT0NfU0lOR0xFKCJPVVQzIE11dGUgU3dpdGNoIiwgV004OTkxX09VVDNfNF9WT0xVTUUsCisJCVdNODk5MV9PVVQzTVVURV9CSVQsIDEsIDApLAorCVNPQ19TSU5HTEUoIk9VVDMgQXR0ZW51YXRpb24gU3dpdGNoIiwgV004OTkxX09VVDNfNF9WT0xVTUUsCisJCVdNODk5MV9PVVQzQVRUTl9CSVQsIDEsIDApLAorCisJU09DX1NJTkdMRSgiT1VUNCBNdXRlIFN3aXRjaCIsIFdNODk5MV9PVVQzXzRfVk9MVU1FLAorCQlXTTg5OTFfT1VUNE1VVEVfQklULCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJPVVQ0IEF0dGVudWF0aW9uIFN3aXRjaCIsIFdNODk5MV9PVVQzXzRfVk9MVU1FLAorCQlXTTg5OTFfT1VUNEFUVE5fQklULCAxLCAwKSwKKworCVNPQ19TSU5HTEUoIlNwZWFrZXIgTW9kZSBTd2l0Y2giLCBXTTg5OTFfQ0xBU1NEMSwKKwkJV004OTkxX0NETU9ERV9CSVQsIDEsIDApLAorCisJU09DX1NJTkdMRSgiU3BlYWtlciBPdXRwdXQgQXR0ZW51YXRpb24gVm9sdW1lIiwgV004OTkxX1NQRUFLRVJfVk9MVU1FLAorCQlXTTg5OTFfU1BLVk9MX1NISUZULCBXTTg5OTFfU1BLVk9MX01BU0ssIDApLAorCVNPQ19TSU5HTEUoIlNwZWFrZXIgREMgQm9vc3QgVm9sdW1lIiwgV004OTkxX0NMQVNTRDMsCisJCVdNODk5MV9EQ0dBSU5fU0hJRlQsIFdNODk5MV9EQ0dBSU5fTUFTSywgMCksCisJU09DX1NJTkdMRSgiU3BlYWtlciBBQyBCb29zdCBWb2x1bWUiLCBXTTg5OTFfQ0xBU1NEMywKKwkJV004OTkxX0FDR0FJTl9TSElGVCwgV004OTkxX0FDR0FJTl9NQVNLLCAwKSwKKworCVNPQ19XTTg5OVhfT1VUUEdBX1NJTkdMRV9SX1RMVigiTGVmdCBEQUMgRGlnaXRhbCBWb2x1bWUiLAorCQlXTTg5OTFfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUsCisJCVdNODk5MV9EQUNMX1ZPTF9TSElGVCwKKwkJV004OTkxX0RBQ0xfVk9MX01BU0ssCisJCTAsCisJCW91dF9kYWNfdGx2KSwKKworCVNPQ19XTTg5OVhfT1VUUEdBX1NJTkdMRV9SX1RMVigiUmlnaHQgREFDIERpZ2l0YWwgVm9sdW1lIiwKKwkJV004OTkxX1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSwKKwkJV004OTkxX0RBQ1JfVk9MX1NISUZULAorCQlXTTg5OTFfREFDUl9WT0xfTUFTSywKKwkJMCwKKwkJb3V0X2RhY190bHYpLAorCisJU09DX0VOVU0oIkxlZnQgRGlnaXRhbCBTaWRldG9uZSIsIHdtODk5MV9sZWZ0X2RpZ2l0YWxfc2lkZXRvbmVfZW51bSksCisJU09DX0VOVU0oIlJpZ2h0IERpZ2l0YWwgU2lkZXRvbmUiLCB3bTg5OTFfcmlnaHRfZGlnaXRhbF9zaWRldG9uZV9lbnVtKSwKKworCVNPQ19TSU5HTEVfVExWKCJMZWZ0IERpZ2l0YWwgU2lkZXRvbmUgVm9sdW1lIiwgV004OTkxX0RJR0lUQUxfU0lERV9UT05FLAorCQlXTTg5OTFfQURDTF9EQUNfU1ZPTF9TSElGVCwgV004OTkxX0FEQ0xfREFDX1NWT0xfTUFTSywgMCwKKwkJb3V0X3NpZGV0b25lX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIlJpZ2h0IERpZ2l0YWwgU2lkZXRvbmUgVm9sdW1lIiwgV004OTkxX0RJR0lUQUxfU0lERV9UT05FLAorCQlXTTg5OTFfQURDUl9EQUNfU1ZPTF9TSElGVCwgV004OTkxX0FEQ1JfREFDX1NWT0xfTUFTSywgMCwKKwkJb3V0X3NpZGV0b25lX3RsdiksCisKKwlTT0NfU0lOR0xFKCJBREMgRGlnaXRhbCBIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODk5MV9BRENfQ1RSTCwKKwkJV004OTkxX0FEQ19IUEZfRU5BX0JJVCwgMSwgMCksCisKKwlTT0NfRU5VTSgiQURDIEhQRiBNb2RlIiwgd204OTkxX3JpZ2h0X2FkY21vZGVfZW51bSksCisKKwlTT0NfV004OTlYX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxlZnQgQURDIERpZ2l0YWwgVm9sdW1lIiwKKwkJV004OTkxX0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FLAorCQlXTTg5OTFfQURDTF9WT0xfU0hJRlQsCisJCVdNODk5MV9BRENMX1ZPTF9NQVNLLAorCQkwLAorCQlpbl9hZGNfdGx2KSwKKworCVNPQ19XTTg5OVhfT1VUUEdBX1NJTkdMRV9SX1RMVigiUmlnaHQgQURDIERpZ2l0YWwgVm9sdW1lIiwKKwkJV004OTkxX1JJR0hUX0FEQ19ESUdJVEFMX1ZPTFVNRSwKKwkJV004OTkxX0FEQ1JfVk9MX1NISUZULAorCQlXTTg5OTFfQURDUl9WT0xfTUFTSywKKwkJMCwKKwkJaW5fYWRjX3RsdiksCisKKwlTT0NfV004OTlYX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxJTjEyIFZvbHVtZSIsCisJCVdNODk5MV9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwkJV004OTkxX0xJTjEyVk9MX1NISUZULAorCQlXTTg5OTFfTElOMTJWT0xfTUFTSywKKwkJMCwKKwkJaW5fcGdhX3RsdiksCisKKwlTT0NfU0lOR0xFKCJMSU4xMiBaQyBTd2l0Y2giLCBXTTg5OTFfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJCVdNODk5MV9MSTEyWkNfQklULCAxLCAwKSwKKworCVNPQ19TSU5HTEUoIkxJTjEyIE11dGUgU3dpdGNoIiwgV004OTkxX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCQlXTTg5OTFfTEkxMk1VVEVfQklULCAxLCAwKSwKKworCVNPQ19XTTg5OVhfT1VUUEdBX1NJTkdMRV9SX1RMVigiTElOMzQgVm9sdW1lIiwKKwkJV004OTkxX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCQlXTTg5OTFfTElOMzRWT0xfU0hJRlQsCisJCVdNODk5MV9MSU4zNFZPTF9NQVNLLAorCQkwLAorCQlpbl9wZ2FfdGx2KSwKKworCVNPQ19TSU5HTEUoIkxJTjM0IFpDIFN3aXRjaCIsIFdNODk5MV9MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwkJV004OTkxX0xJMzRaQ19CSVQsIDEsIDApLAorCisJU09DX1NJTkdMRSgiTElOMzQgTXV0ZSBTd2l0Y2giLCBXTTg5OTFfTEVGVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJCVdNODk5MV9MSTM0TVVURV9CSVQsIDEsIDApLAorCisJU09DX1dNODk5WF9PVVRQR0FfU0lOR0xFX1JfVExWKCJSSU4xMiBWb2x1bWUiLAorCQlXTTg5OTFfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCQlXTTg5OTFfUklOMTJWT0xfU0hJRlQsCisJCVdNODk5MV9SSU4xMlZPTF9NQVNLLAorCQkwLAorCQlpbl9wZ2FfdGx2KSwKKworCVNPQ19TSU5HTEUoIlJJTjEyIFpDIFN3aXRjaCIsIFdNODk5MV9SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJCVdNODk5MV9SSTEyWkNfQklULCAxLCAwKSwKKworCVNPQ19TSU5HTEUoIlJJTjEyIE11dGUgU3dpdGNoIiwgV004OTkxX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwkJV004OTkxX1JJMTJNVVRFX0JJVCwgMSwgMCksCisKKwlTT0NfV004OTlYX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJJTjM0IFZvbHVtZSIsCisJCVdNODk5MV9SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJCVdNODk5MV9SSU4zNFZPTF9TSElGVCwKKwkJV004OTkxX1JJTjM0Vk9MX01BU0ssCisJCTAsCisJCWluX3BnYV90bHYpLAorCisJU09DX1NJTkdMRSgiUklOMzQgWkMgU3dpdGNoIiwgV004OTkxX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwkJV004OTkxX1JJMzRaQ19CSVQsIDEsIDApLAorCisJU09DX1NJTkdMRSgiUklOMzQgTXV0ZSBTd2l0Y2giLCBXTTg5OTFfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAorCQlXTTg5OTFfUkkzNE1VVEVfQklULCAxLCAwKSwKK307CisKKy8qCisgKiBfREFQTV8gQ29udHJvbHMKKyAqLworc3RhdGljIGludCBpbm1peGVyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJdTE2IHJlZywgZmFrZXBvd2VyOworCisJcmVnID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCBXTTg5OTFfUE9XRVJfTUFOQUdFTUVOVF8yKTsKKwlmYWtlcG93ZXIgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MV9JTlREUklWQklUUyk7CisKKwlpZiAoZmFrZXBvd2VyICYgKCgxIDw8IFdNODk5MV9JTk1JWExfUFdSX0JJVCkgfAorCQkJICgxIDw8IFdNODk5MV9BSU5MTVVYX1BXUl9CSVQpKSkKKwkJcmVnIHw9IFdNODk5MV9BSU5MX0VOQTsKKwllbHNlCisJCXJlZyAmPSB+V004OTkxX0FJTkxfRU5BOworCisJaWYgKGZha2Vwb3dlciAmICgoMSA8PCBXTTg5OTFfSU5NSVhSX1BXUl9CSVQpIHwKKwkJCSAoMSA8PCBXTTg5OTFfQUlOUk1VWF9QV1JfQklUKSkpCisJCXJlZyB8PSBXTTg5OTFfQUlOUl9FTkE7CisJZWxzZQorCQlyZWcgJj0gfldNODk5MV9BSU5MX0VOQTsKKworCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3V0bWl4ZXJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJdTMyIHJlZ19zaGlmdCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmY7CisJaW50IHJldCA9IDA7CisJdTE2IHJlZzsKKworCXN3aXRjaCAocmVnX3NoaWZ0KSB7CisJY2FzZSBXTTg5OTFfU1BFQUtFUl9NSVhFUiB8IChXTTg5OTFfTERTUEtfQklUIDw8IDgpOgorCQlyZWcgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MV9PVVRQVVRfTUlYRVIxKTsKKwkJaWYgKHJlZyAmIFdNODk5MV9MRExPKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIkNhbm5vdCBzZXQgYXMgT3V0cHV0IE1peGVyIDEgTERMTyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFdNODk5MV9TUEVBS0VSX01JWEVSIHwgKFdNODk5MV9SRFNQS19CSVQgPDwgOCk6CisJCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004OTkxX09VVFBVVF9NSVhFUjIpOworCQlpZiAocmVnICYgV004OTkxX1JEUk8pIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMiBSRFJPIFNldFxuIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgV004OTkxX09VVFBVVF9NSVhFUjEgfCAoV004OTkxX0xETE9fQklUIDw8IDgpOgorCQlyZWcgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MV9TUEVBS0VSX01JWEVSKTsKKwkJaWYgKHJlZyAmIFdNODk5MV9MRFNQSykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJDYW5ub3Qgc2V0IGFzIFNwZWFrZXIgTWl4ZXIgTERTUEsgU2V0XG4iKTsKKwkJCXJldCA9IC0xOworCQl9CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTFfT1VUUFVUX01JWEVSMiB8IChXTTg5OTFfUkRST19CSVQgPDwgOCk6CisJCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004OTkxX1NQRUFLRVJfTUlYRVIpOworCQlpZiAocmVnICYgV004OTkxX1JEU1BLKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBSRFNQSyBTZXRcbiIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogSU5NSVggZEIgdmFsdWVzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGluX21peF90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgxKSwKKwkwLCA3LCBUTFZfREJfTElORUFSX0lURU0oLTEyMDAsIDYwMCksCit9OworCisvKiBMZWZ0IEluIFBHQSBDb25uZWN0aW9ucyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5MV9kYXBtX2xpbjEyX3BnYV9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTElOMSBTd2l0Y2giLCBXTTg5OTFfSU5QVVRfTUlYRVIyLCBXTTg5OTFfTE1OMV9CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTElOMiBTd2l0Y2giLCBXTTg5OTFfSU5QVVRfTUlYRVIyLCBXTTg5OTFfTE1QMl9CSVQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5MV9kYXBtX2xpbjM0X3BnYV9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTElOMyBTd2l0Y2giLCBXTTg5OTFfSU5QVVRfTUlYRVIyLCBXTTg5OTFfTE1OM19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTElONCBTd2l0Y2giLCBXTTg5OTFfSU5QVVRfTUlYRVIyLCBXTTg5OTFfTE1QNF9CSVQsIDEsIDApLAorfTsKKworLyogUmlnaHQgSW4gUEdBIENvbm5lY3Rpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTkxX2RhcG1fcmluMTJfcGdhX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJSSU4xIFN3aXRjaCIsIFdNODk5MV9JTlBVVF9NSVhFUjIsIFdNODk5MV9STU4xX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJSSU4yIFN3aXRjaCIsIFdNODk5MV9JTlBVVF9NSVhFUjIsIFdNODk5MV9STVAyX0JJVCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTkxX2RhcG1fcmluMzRfcGdhX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJSSU4zIFN3aXRjaCIsIFdNODk5MV9JTlBVVF9NSVhFUjIsIFdNODk5MV9STU4zX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJSSU40IFN3aXRjaCIsIFdNODk5MV9JTlBVVF9NSVhFUjIsIFdNODk5MV9STVA0X0JJVCwgMSwgMCksCit9OworCisvKiBJTk1JWEwgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTFfZGFwbV9pbm1peGxfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEVfVExWKCJSZWNvcmQgTGVmdCBWb2x1bWUiLCBXTTg5OTFfSU5QVVRfTUlYRVIzLAorCQlXTTg5OTFfTERCVk9MX1NISUZULCBXTTg5OTFfTERCVk9MX01BU0ssIDAsIGluX21peF90bHYpLAorCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkxJTjIgVm9sdW1lIiwgV004OTkxX0lOUFVUX01JWEVSNSwgV004OTkxX0xJMkJWT0xfU0hJRlQsCisJCTcsIDAsIGluX21peF90bHYpLAorCVNPQ19EQVBNX1NJTkdMRSgiTElOUEdBMTIgU3dpdGNoIiwgV004OTkxX0lOUFVUX01JWEVSMywgV004OTkxX0wxMk1OQl9CSVQsCisJCTEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTElOUEdBMzQgU3dpdGNoIiwgV004OTkxX0lOUFVUX01JWEVSMywgV004OTkxX0wzNE1OQl9CSVQsCisJCTEsIDApLAorfTsKKworLyogSU5NSVhSICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTkxX2RhcG1faW5taXhyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFX1RMVigiUmVjb3JkIFJpZ2h0IFZvbHVtZSIsIFdNODk5MV9JTlBVVF9NSVhFUjQsCisJCVdNODk5MV9SREJWT0xfU0hJRlQsIFdNODk5MV9SREJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCisJU09DX0RBUE1fU0lOR0xFX1RMVigiUklOMiBWb2x1bWUiLCBXTTg5OTFfSU5QVVRfTUlYRVI2LCBXTTg5OTFfUkkyQlZPTF9TSElGVCwKKwkJNywgMCwgaW5fbWl4X3RsdiksCisJU09DX0RBUE1fU0lOR0xFKCJSSU5QR0ExMiBTd2l0Y2giLCBXTTg5OTFfSU5QVVRfTUlYRVIzLCBXTTg5OTFfTDEyTU5CX0JJVCwKKwkJMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJSSU5QR0EzNCBTd2l0Y2giLCBXTTg5OTFfSU5QVVRfTUlYRVIzLCBXTTg5OTFfTDM0TU5CX0JJVCwKKwkJMSwgMCksCit9OworCisvKiBBSU5MTVVYICovCitzdGF0aWMgY29uc3QgY2hhciAqd204OTkxX2FpbmxtdXhbXSA9Cit7IklOTUlYTCBNaXgiLCAiUlhWT0lDRSBNaXgiLCAiRElGRklOTCBNaXgifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg5OTFfYWlubG11eF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkxX0lOUFVUX01JWEVSMSwgV004OTkxX0FJTkxNT0RFX1NISUZULAorCQkJQVJSQVlfU0laRSh3bTg5OTFfYWlubG11eCksIHdtODk5MV9haW5sbXV4KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5MV9kYXBtX2FpbmxtdXhfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd204OTkxX2FpbmxtdXhfZW51bSk7CisKKy8qIERJRkZJTkwgKi8KKworLyogQUlOUk1VWCAqLworc3RhdGljIGNvbnN0IGNoYXIgKndtODk5MV9haW5ybXV4W10gPQoreyJJTk1JWFIgTWl4IiwgIlJYVk9JQ0UgTWl4IiwgIkRJRkZJTlIgTWl4In07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204OTkxX2FpbnJtdXhfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5MV9JTlBVVF9NSVhFUjEsIFdNODk5MV9BSU5STU9ERV9TSElGVCwKKwkJCUFSUkFZX1NJWkUod204OTkxX2FpbnJtdXgpLCB3bTg5OTFfYWlucm11eCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTFfZGFwbV9haW5ybXV4X2NvbnRyb2xzID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODk5MV9haW5ybXV4X2VudW0pOworCisvKiBSWFZPSUNFICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTkxX2RhcG1fcnh2b2ljZV9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkxJTjRSWE4iLCBXTTg5OTFfSU5QVVRfTUlYRVI1LCBXTTg5OTFfTFI0QlZPTF9TSElGVCwKKwkJV004OTkxX0xSNEJWT0xfTUFTSywgMCwgaW5fbWl4X3RsdiksCisJU09DX0RBUE1fU0lOR0xFX1RMVigiUklONFJYUCIsIFdNODk5MV9JTlBVVF9NSVhFUjYsIFdNODk5MV9STDRCVk9MX1NISUZULAorCQlXTTg5OTFfUkw0QlZPTF9NQVNLLCAwLCBpbl9taXhfdGx2KSwKK307CisKKy8qIExPTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTkxX2RhcG1fbG9taXhfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004OTkxX09VVFBVVF9NSVhFUjEsCisJCVdNODk5MV9MUkJMT19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTE9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsIFdNODk5MV9PVVRQVVRfTUlYRVIxLAorCQlXTTg5OTFfTExCTE9fQklULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkxPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsIFdNODk5MV9PVVRQVVRfTUlYRVIxLAorCQlXTTg5OTFfTFJJM0xPX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJMT01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg5OTFfT1VUUFVUX01JWEVSMSwKKwkJV004OTkxX0xMSTNMT19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTE9NSVggUklOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCBXTTg5OTFfT1VUUFVUX01JWEVSMSwKKwkJV004OTkxX0xSMTJMT19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTE9NSVggTElOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCBXTTg5OTFfT1VUUFVUX01JWEVSMSwKKwkJV004OTkxX0xMMTJMT19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTE9NSVggTGVmdCBEQUMgU3dpdGNoIiwgV004OTkxX09VVFBVVF9NSVhFUjEsCisJCVdNODk5MV9MRExPX0JJVCwgMSwgMCksCit9OworCisvKiBST01JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5MV9kYXBtX3JvbWl4X2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJST01JWCBMZWZ0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004OTkxX09VVFBVVF9NSVhFUjIsCisJCVdNODk5MV9STEJST19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUk9NSVggUmlnaHQgQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg5OTFfT1VUUFVUX01JWEVSMiwKKwkJV004OTkxX1JSQlJPX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJST01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg5OTFfT1VUUFVUX01JWEVSMiwKKwkJV004OTkxX1JMSTNST19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUk9NSVggUklOMyBCeXBhc3MgU3dpdGNoIiwgV004OTkxX09VVFBVVF9NSVhFUjIsCisJCVdNODk5MV9SUkkzUk9fQklULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlJPTUlYIExJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004OTkxX09VVFBVVF9NSVhFUjIsCisJCVdNODk5MV9STDEyUk9fQklULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgV004OTkxX09VVFBVVF9NSVhFUjIsCisJCVdNODk5MV9SUjEyUk9fQklULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlJPTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCBXTTg5OTFfT1VUUFVUX01JWEVSMiwKKwkJV004OTkxX1JEUk9fQklULCAxLCAwKSwKK307CisKKy8qIExPTk1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5MV9kYXBtX2xvbm1peF9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTE9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODk5MV9MSU5FX01JWEVSMSwKKwkJV004OTkxX0xMT1BHQUxPTl9CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTE9OTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg5OTFfTElORV9NSVhFUjEsCisJCVdNODk5MV9MUk9QR0FMT05fQklULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkxPTk1JWCBJbnZlcnRlZCBMT1AgU3dpdGNoIiwgV004OTkxX0xJTkVfTUlYRVIxLAorCQlXTTg5OTFfTE9QTE9OX0JJVCwgMSwgMCksCit9OworCisvKiBMT1BNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTFfZGFwbV9sb3BtaXhfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsIFdNODk5MV9MSU5FX01JWEVSMSwKKwkJV004OTkxX0xSMTJMT1BfQklULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkxPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgV004OTkxX0xJTkVfTUlYRVIxLAorCQlXTTg5OTFfTEwxMkxPUF9CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTE9QTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODk5MV9MSU5FX01JWEVSMSwKKwkJV004OTkxX0xMT1BHQUxPUF9CSVQsIDEsIDApLAorfTsKKworLyogUk9OTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTkxX2RhcG1fcm9ubWl4X2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJST05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODk5MV9MSU5FX01JWEVSMiwKKwkJV004OTkxX1JST1BHQVJPTl9CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUk9OTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODk5MV9MSU5FX01JWEVSMiwKKwkJV004OTkxX1JMT1BHQVJPTl9CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUk9OTUlYIEludmVydGVkIFJPUCBTd2l0Y2giLCBXTTg5OTFfTElORV9NSVhFUjIsCisJCVdNODk5MV9ST1BST05fQklULCAxLCAwKSwKK307CisKKy8qIFJPUE1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5MV9kYXBtX3JvcG1peF9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiUk9QTUlYIExlZnQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg5OTFfTElORV9NSVhFUjIsCisJCVdNODk5MV9STDEyUk9QX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJST1BNSVggUmlnaHQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg5OTFfTElORV9NSVhFUjIsCisJCVdNODk5MV9SUjEyUk9QX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJST1BNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODk5MV9MSU5FX01JWEVSMiwKKwkJV004OTkxX1JST1BHQVJPUF9CSVQsIDEsIDApLAorfTsKKworLyogT1VUM01JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5MV9kYXBtX291dDNtaXhfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIk9VVDNNSVggTElONFJYTiBCeXBhc3MgU3dpdGNoIiwgV004OTkxX09VVDNfNF9NSVhFUiwKKwkJV004OTkxX0xJNE8zX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJPVVQzTUlYIExlZnQgT3V0IFBHQSBTd2l0Y2giLCBXTTg5OTFfT1VUM180X01JWEVSLAorCQlXTTg5OTFfTFBHQU8zX0JJVCwgMSwgMCksCit9OworCisvKiBPVVQ0TUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTkxX2RhcG1fb3V0NG1peF9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiT1VUNE1JWCBSaWdodCBPdXQgUEdBIFN3aXRjaCIsIFdNODk5MV9PVVQzXzRfTUlYRVIsCisJCVdNODk5MV9SUEdBTzRfQklULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk9VVDRNSVggUklONFJYUCBCeXBhc3MgU3dpdGNoIiwgV004OTkxX09VVDNfNF9NSVhFUiwKKwkJV004OTkxX1JJNE80X0JJVCwgMSwgMCksCit9OworCisvKiBTUEtNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTFfZGFwbV9zcGttaXhfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBMSU4yIEJ5cGFzcyBTd2l0Y2giLCBXTTg5OTFfU1BFQUtFUl9NSVhFUiwKKwkJV004OTkxX0xJMlNQS19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExBREMgQnlwYXNzIFN3aXRjaCIsIFdNODk5MV9TUEVBS0VSX01JWEVSLAorCQlXTTg5OTFfTEIyU1BLX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgV004OTkxX1NQRUFLRVJfTUlYRVIsCisJCVdNODk5MV9MT1BHQVNQS19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExlZnQgREFDIFN3aXRjaCIsIFdNODk5MV9TUEVBS0VSX01JWEVSLAorCQlXTTg5OTFfTERTUEtfQklULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBSaWdodCBEQUMgU3dpdGNoIiwgV004OTkxX1NQRUFLRVJfTUlYRVIsCisJCVdNODk5MV9SRFNQS19CSVQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCBXTTg5OTFfU1BFQUtFUl9NSVhFUiwKKwkJV004OTkxX1JPUEdBU1BLX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUkFEQyBCeXBhc3MgU3dpdGNoIiwgV004OTkxX1NQRUFLRVJfTUlYRVIsCisJCVdNODk5MV9STDEyUk9QX0JJVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUklOMiBCeXBhc3MgU3dpdGNoIiwgV004OTkxX1NQRUFLRVJfTUlYRVIsCisJCVdNODk5MV9SSTJTUEtfQklULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5OTFfZGFwbV93aWRnZXRzW10gPSB7CisJLyogSW5wdXQgU2lkZSAqLworCS8qIElucHV0IExpbmVzICovCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4xIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4yIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4zIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU40UlhOIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSSU4zIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSSU40UlhQIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSSU4xIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSSU4yIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJbnRlcm5hbCBBREMgU291cmNlIiksCisKKwkvKiBEQUNzICovCisJU05EX1NPQ19EQVBNX0FEQygiTGVmdCBBREMiLCAiTGVmdCBDYXB0dXJlIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJV004OTkxX0FEQ0xfRU5BX0JJVCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiUmlnaHQgQURDIiwgIlJpZ2h0IENhcHR1cmUiLCBXTTg5OTFfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQlXTTg5OTFfQURDUl9FTkFfQklULCAwKSwKKworCS8qIElucHV0IFBHQXMgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxJTjEyIFBHQSIsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzIsIFdNODk5MV9MSU4xMl9FTkFfQklULAorCQkwLCAmd204OTkxX2RhcG1fbGluMTJfcGdhX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKHdtODk5MV9kYXBtX2xpbjEyX3BnYV9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9NSVhFUigiTElOMzQgUEdBIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMiwgV004OTkxX0xJTjM0X0VOQV9CSVQsCisJCTAsICZ3bTg5OTFfZGFwbV9saW4zNF9wZ2FfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUod204OTkxX2RhcG1fbGluMzRfcGdhX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJSSU4xMiBQR0EiLCBXTTg5OTFfUE9XRVJfTUFOQUdFTUVOVF8yLCBXTTg5OTFfUklOMTJfRU5BX0JJVCwKKwkJMCwgJndtODk5MV9kYXBtX3JpbjEyX3BnYV9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRSh3bTg5OTFfZGFwbV9yaW4xMl9wZ2FfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJJTjM0IFBHQSIsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzIsIFdNODk5MV9SSU4zNF9FTkFfQklULAorCQkwLCAmd204OTkxX2RhcG1fcmluMzRfcGdhX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKHdtODk5MV9kYXBtX3JpbjM0X3BnYV9jb250cm9scykpLAorCisJLyogSU5NSVhMICovCisJU05EX1NPQ19EQVBNX01JWEVSX0UoIklOTUlYTCIsIFdNODk5MV9JTlREUklWQklUUywgV004OTkxX0lOTUlYTF9QV1JfQklULCAwLAorCQkmd204OTkxX2RhcG1faW5taXhsX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKHdtODk5MV9kYXBtX2lubWl4bF9jb250cm9scyksCisJCWlubWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKwkvKiBBSU5MTVVYICovCisJU05EX1NPQ19EQVBNX01VWF9FKCJBSU5MTVVYIiwgV004OTkxX0lOVERSSVZCSVRTLCBXTTg5OTFfQUlOTE1VWF9QV1JfQklULCAwLAorCQkmd204OTkxX2RhcG1fYWlubG11eF9jb250cm9scywgaW5taXhlcl9ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworCS8qIElOTUlYUiAqLworCVNORF9TT0NfREFQTV9NSVhFUl9FKCJJTk1JWFIiLCBXTTg5OTFfSU5URFJJVkJJVFMsIFdNODk5MV9JTk1JWFJfUFdSX0JJVCwgMCwKKwkJJndtODk5MV9kYXBtX2lubWl4cl9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRSh3bTg5OTFfZGFwbV9pbm1peHJfY29udHJvbHMpLAorCQlpbm1peGVyX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisJLyogQUlOUk1VWCAqLworCVNORF9TT0NfREFQTV9NVVhfRSgiQUlOUk1VWCIsIFdNODk5MV9JTlREUklWQklUUywgV004OTkxX0FJTlJNVVhfUFdSX0JJVCwgMCwKKwkJJndtODk5MV9kYXBtX2FpbnJtdXhfY29udHJvbHMsIGlubWl4ZXJfZXZlbnQsCisJCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKwkvKiBPdXRwdXQgU2lkZSAqLworCS8qIERBQ3MgKi8KKwlTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IFBsYXliYWNrIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMywKKwkJV004OTkxX0RBQ0xfRU5BX0JJVCwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiUmlnaHQgREFDIiwgIlJpZ2h0IFBsYXliYWNrIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMywKKwkJV004OTkxX0RBQ1JfRU5BX0JJVCwgMCksCisKKwkvKiBMT01JWCAqLworCVNORF9TT0NfREFQTV9NSVhFUl9FKCJMT01JWCIsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODk5MV9MT01JWF9FTkFfQklULAorCQkwLCAmd204OTkxX2RhcG1fbG9taXhfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUod204OTkxX2RhcG1fbG9taXhfY29udHJvbHMpLAorCQlvdXRtaXhlcl9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9SRUcpLAorCisJLyogTE9OTUlYICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJMT05NSVgiLCBXTTg5OTFfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg5OTFfTE9OX0VOQV9CSVQsIDAsCisJCSZ3bTg5OTFfZGFwbV9sb25taXhfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUod204OTkxX2RhcG1fbG9ubWl4X2NvbnRyb2xzKSksCisKKwkvKiBMT1BNSVggKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxPUE1JWCIsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODk5MV9MT1BfRU5BX0JJVCwgMCwKKwkJJndtODk5MV9kYXBtX2xvcG1peF9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRSh3bTg5OTFfZGFwbV9sb3BtaXhfY29udHJvbHMpKSwKKworCS8qIE9VVDNNSVggKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIk9VVDNNSVgiLCBXTTg5OTFfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg5OTFfT1VUM19FTkFfQklULCAwLAorCQkmd204OTkxX2RhcG1fb3V0M21peF9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRSh3bTg5OTFfZGFwbV9vdXQzbWl4X2NvbnRyb2xzKSksCisKKwkvKiBTUEtNSVggKi8KKwlTTkRfU09DX0RBUE1fTUlYRVJfRSgiU1BLTUlYIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSwgV004OTkxX1NQS19FTkFfQklULCAwLAorCQkmd204OTkxX2RhcG1fc3BrbWl4X2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKHdtODk5MV9kYXBtX3Nwa21peF9jb250cm9scyksIG91dG1peGVyX2V2ZW50LAorCQlTTkRfU09DX0RBUE1fUFJFX1JFRyksCisKKwkvKiBPVVQ0TUlYICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJPVVQ0TUlYIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSwgV004OTkxX09VVDRfRU5BX0JJVCwgMCwKKwkJJndtODk5MV9kYXBtX291dDRtaXhfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUod204OTkxX2RhcG1fb3V0NG1peF9jb250cm9scykpLAorCisJLyogUk9QTUlYICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJST1BNSVgiLCBXTTg5OTFfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg5OTFfUk9QX0VOQV9CSVQsIDAsCisJCSZ3bTg5OTFfZGFwbV9yb3BtaXhfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUod204OTkxX2RhcG1fcm9wbWl4X2NvbnRyb2xzKSksCisKKwkvKiBST05NSVggKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJPTk1JWCIsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODk5MV9ST05fRU5BX0JJVCwgMCwKKwkJJndtODk5MV9kYXBtX3Jvbm1peF9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRSh3bTg5OTFfZGFwbV9yb25taXhfY29udHJvbHMpKSwKKworCS8qIFJPTUlYICovCisJU05EX1NPQ19EQVBNX01JWEVSX0UoIlJPTUlYIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMywgV004OTkxX1JPTUlYX0VOQV9CSVQsCisJCTAsICZ3bTg5OTFfZGFwbV9yb21peF9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRSh3bTg5OTFfZGFwbV9yb21peF9jb250cm9scyksCisJCW91dG1peGVyX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1JFRyksCisKKwkvKiBMT1VUIFBHQSAqLworCVNORF9TT0NfREFQTV9QR0EoIkxPVVQgUEdBIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSwgV004OTkxX0xPVVRfRU5BX0JJVCwgMCwKKwkJTlVMTCwgMCksCisKKwkvKiBST1VUIFBHQSAqLworCVNORF9TT0NfREFQTV9QR0EoIlJPVVQgUEdBIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSwgV004OTkxX1JPVVRfRU5BX0JJVCwgMCwKKwkJTlVMTCwgMCksCisKKwkvKiBMT1BHQSAqLworCVNORF9TT0NfREFQTV9QR0EoIkxPUEdBIiwgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMywgV004OTkxX0xPUEdBX0VOQV9CSVQsIDAsCisJCU5VTEwsIDApLAorCisJLyogUk9QR0EgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJST1BHQSIsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODk5MV9ST1BHQV9FTkFfQklULCAwLAorCQlOVUxMLCAwKSwKKworCS8qIE1JQ0JJQVMgKi8KKwlTTkRfU09DX0RBUE1fTUlDQklBUygiTUlDQklBUyIsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCVdNODk5MV9NSUNCSUFTX0VOQV9CSVQsIDApLAorCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTE9OIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTE9QIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUMyIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtOIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLUCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVQ0IiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUk9QIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUk9OIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUIiksCisKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJJbnRlcm5hbCBEQUMgU2luayIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogTWFrZSBEQUNzIHR1cm4gb24gd2hlbiBwbGF5aW5nIGV2ZW4gaWYgbm90IG1peGVkIGludG8gYW55IG91dHB1dHMgKi8KKwl7IkludGVybmFsIERBQyBTaW5rIiwgTlVMTCwgIkxlZnQgREFDIn0sCisJeyJJbnRlcm5hbCBEQUMgU2luayIsIE5VTEwsICJSaWdodCBEQUMifSwKKworCS8qIE1ha2UgQURDcyB0dXJuIG9uIHdoZW4gcmVjb3JkaW5nIGV2ZW4gaWYgbm90IG1peGVkIGZyb20gYW55IGlucHV0cyAqLworCXsiTGVmdCBBREMiLCBOVUxMLCAiSW50ZXJuYWwgQURDIFNvdXJjZSJ9LAorCXsiUmlnaHQgQURDIiwgTlVMTCwgIkludGVybmFsIEFEQyBTb3VyY2UifSwKKworCS8qIElucHV0IFNpZGUgKi8KKwkvKiBMSU4xMiBQR0EgKi8KKwl7IkxJTjEyIFBHQSIsICJMSU4xIFN3aXRjaCIsICJMSU4xIn0sCisJeyJMSU4xMiBQR0EiLCAiTElOMiBTd2l0Y2giLCAiTElOMiJ9LAorCS8qIExJTjM0IFBHQSAqLworCXsiTElOMzQgUEdBIiwgIkxJTjMgU3dpdGNoIiwgIkxJTjMifSwKKwl7IkxJTjM0IFBHQSIsICJMSU40IFN3aXRjaCIsICJMSU40UlhOIn0sCisJLyogSU5NSVhMICovCisJeyJJTk1JWEwiLCAiUmVjb3JkIExlZnQgVm9sdW1lIiwgIkxPTUlYIn0sCisJeyJJTk1JWEwiLCAiTElOMiBWb2x1bWUiLCAiTElOMiJ9LAorCXsiSU5NSVhMIiwgIkxJTlBHQTEyIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IklOTUlYTCIsICJMSU5QR0EzNCBTd2l0Y2giLCAiTElOMzQgUEdBIn0sCisJLyogQUlOTE1VWCAqLworCXsiQUlOTE1VWCIsICJJTk1JWEwgTWl4IiwgIklOTUlYTCJ9LAorCXsiQUlOTE1VWCIsICJESUZGSU5MIE1peCIsICJMSU4xMiBQR0EifSwKKwl7IkFJTkxNVVgiLCAiRElGRklOTCBNaXgiLCAiTElOMzQgUEdBIn0sCisJeyJBSU5MTVVYIiwgIlJYVk9JQ0UgTWl4IiwgIkxJTjRSWE4ifSwKKwl7IkFJTkxNVVgiLCAiUlhWT0lDRSBNaXgiLCAiUklONFJYUCJ9LAorCS8qIEFEQyAqLworCXsiTGVmdCBBREMiLCBOVUxMLCAiQUlOTE1VWCJ9LAorCisJLyogUklOMTIgUEdBICovCisJeyJSSU4xMiBQR0EiLCAiUklOMSBTd2l0Y2giLCAiUklOMSJ9LAorCXsiUklOMTIgUEdBIiwgIlJJTjIgU3dpdGNoIiwgIlJJTjIifSwKKwkvKiBSSU4zNCBQR0EgKi8KKwl7IlJJTjM0IFBHQSIsICJSSU4zIFN3aXRjaCIsICJSSU4zIn0sCisJeyJSSU4zNCBQR0EiLCAiUklONCBTd2l0Y2giLCAiUklONFJYUCJ9LAorCS8qIElOTUlYTCAqLworCXsiSU5NSVhSIiwgIlJlY29yZCBSaWdodCBWb2x1bWUiLCAiUk9NSVgifSwKKwl7IklOTUlYUiIsICJSSU4yIFZvbHVtZSIsICJSSU4yIn0sCisJeyJJTk1JWFIiLCAiUklOUEdBMTIgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiSU5NSVhSIiwgIlJJTlBHQTM0IFN3aXRjaCIsICJSSU4zNCBQR0EifSwKKwkvKiBBSU5STVVYICovCisJeyJBSU5STVVYIiwgIklOTUlYUiBNaXgiLCAiSU5NSVhSIn0sCisJeyJBSU5STVVYIiwgIkRJRkZJTlIgTWl4IiwgIlJJTjEyIFBHQSJ9LAorCXsiQUlOUk1VWCIsICJESUZGSU5SIE1peCIsICJSSU4zNCBQR0EifSwKKwl7IkFJTlJNVVgiLCAiUlhWT0lDRSBNaXgiLCAiTElONFJYTiJ9LAorCXsiQUlOUk1VWCIsICJSWFZPSUNFIE1peCIsICJSSU40UlhQIn0sCisJLyogQURDICovCisJeyJSaWdodCBBREMiLCBOVUxMLCAiQUlOUk1VWCJ9LAorCisJLyogTE9NSVggKi8KKwl7IkxPTUlYIiwgIkxPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsICJSSU4zIn0sCisJeyJMT01JWCIsICJMT01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCAiTElOMyJ9LAorCXsiTE9NSVgiLCAiTE9NSVggTElOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJMT01JWCIsICJMT01JWCBSSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IkxPTUlYIiwgIkxPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJTlJNVVgifSwKKwl7IkxPTUlYIiwgIkxPTUlYIExlZnQgQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlOTE1VWCJ9LAorCXsiTE9NSVgiLCAiTE9NSVggTGVmdCBEQUMgU3dpdGNoIiwgIkxlZnQgREFDIn0sCisKKwkvKiBST01JWCAqLworCXsiUk9NSVgiLCAiUk9NSVggUklOMyBCeXBhc3MgU3dpdGNoIiwgIlJJTjMifSwKKwl7IlJPTUlYIiwgIlJPTUlYIExJTjMgQnlwYXNzIFN3aXRjaCIsICJMSU4zIn0sCisJeyJST01JWCIsICJST01JWCBMSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IlJPTUlYIiwgIlJPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiUk9NSVgiLCAiUk9NSVggUmlnaHQgQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlOUk1VWCJ9LAorCXsiUk9NSVgiLCAiUk9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsICJBSU5MTVVYIn0sCisJeyJST01JWCIsICJST01JWCBSaWdodCBEQUMgU3dpdGNoIiwgIlJpZ2h0IERBQyJ9LAorCisJLyogU1BLTUlYICovCisJeyJTUEtNSVgiLCAiU1BLTUlYIExJTjIgQnlwYXNzIFN3aXRjaCIsICJMSU4yIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIFJJTjIgQnlwYXNzIFN3aXRjaCIsICJSSU4yIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIExBREMgQnlwYXNzIFN3aXRjaCIsICJBSU5MTVVYIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIFJBREMgQnlwYXNzIFN3aXRjaCIsICJBSU5STVVYIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIExlZnQgREFDIFN3aXRjaCIsICJSaWdodCBEQUMifSwKKworCS8qIExPTk1JWCAqLworCXsiTE9OTUlYIiwgIkxPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKwl7IkxPTk1JWCIsICJMT05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiTE9OTUlYIiwgIkxPTk1JWCBJbnZlcnRlZCBMT1AgU3dpdGNoIiwgIkxPUE1JWCJ9LAorCisJLyogTE9QTUlYICovCisJeyJMT1BNSVgiLCAiTE9QTUlYIFJpZ2h0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiTE9QTUlYIiwgIkxPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiTE9QTUlYIiwgIkxPUE1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKworCS8qIE9VVDNNSVggKi8KKwl7Ik9VVDNNSVgiLCAiT1VUM01JWCBMSU40UlhOIEJ5cGFzcyBTd2l0Y2giLCAiTElONFJYTiJ9LAorCXsiT1VUM01JWCIsICJPVVQzTUlYIExlZnQgT3V0IFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKworCS8qIE9VVDRNSVggKi8KKwl7Ik9VVDRNSVgiLCAiT1VUNE1JWCBSaWdodCBPdXQgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiT1VUNE1JWCIsICJPVVQ0TUlYIFJJTjRSWFAgQnlwYXNzIFN3aXRjaCIsICJSSU40UlhQIn0sCisKKwkvKiBST05NSVggKi8KKwl7IlJPTk1JWCIsICJST05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiUk9OTUlYIiwgIlJPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKwl7IlJPTk1JWCIsICJST05NSVggSW52ZXJ0ZWQgUk9QIFN3aXRjaCIsICJST1BNSVgifSwKKworCS8qIFJPUE1JWCAqLworCXsiUk9QTUlYIiwgIlJPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiUk9QTUlYIiwgIlJPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IlJPUE1JWCIsICJST1BNSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCisJLyogT3V0IE1peGVyIFBHQXMgKi8KKwl7IkxPUEdBIiwgTlVMTCwgIkxPTUlYIn0sCisJeyJST1BHQSIsIE5VTEwsICJST01JWCJ9LAorCisJeyJMT1VUIFBHQSIsIE5VTEwsICJMT01JWCJ9LAorCXsiUk9VVCBQR0EiLCBOVUxMLCAiUk9NSVgifSwKKworCS8qIE91dHB1dCBQaW5zICovCisJeyJMT04iLCBOVUxMLCAiTE9OTUlYIn0sCisJeyJMT1AiLCBOVUxMLCAiTE9QTUlYIn0sCisJeyJPVVQiLCBOVUxMLCAiT1VUM01JWCJ9LAorCXsiTE9VVCIsIE5VTEwsICJMT1VUIFBHQSJ9LAorCXsiU1BLTiIsIE5VTEwsICJTUEtNSVgifSwKKwl7IlJPVVQiLCBOVUxMLCAiUk9VVCBQR0EifSwKKwl7Ik9VVDQiLCBOVUxMLCAiT1VUNE1JWCJ9LAorCXsiUk9QIiwgTlVMTCwgIlJPUE1JWCJ9LAorCXsiUk9OIiwgTlVMTCwgIlJPTk1JWCJ9LAorfTsKKworLyogUExMIGRpdmlzb3JzICovCitzdHJ1Y3QgX3BsbF9kaXYgeworCXUzMiBkaXYyOworCXUzMiBuOworCXUzMiBrOworfTsKKworLyogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgcGxsIGRpdmlkZSBtdWx0aXBsaWVkIGJ5IDEwCisgKiB0byBhbGxvdyByb3VuZGluZyBsYXRlciAqLworI2RlZmluZSBGSVhFRF9QTExfU0laRSAoKDEgPDwgMTYpICogMTApCisKK3N0YXRpYyB2b2lkIHBsbF9mYWN0b3JzKHN0cnVjdCBfcGxsX2RpdiAqcGxsX2RpdiwgdW5zaWduZWQgaW50IHRhcmdldCwKKwkJCXVuc2lnbmVkIGludCBzb3VyY2UpCit7CisJdTY0IEtwYXJ0OworCXVuc2lnbmVkIGludCBLLCBOZGl2LCBObW9kOworCisKKwlOZGl2ID0gdGFyZ2V0IC8gc291cmNlOworCWlmIChOZGl2IDwgNikgeworCQlzb3VyY2UgPj49IDE7CisJCXBsbF9kaXYtPmRpdjIgPSAxOworCQlOZGl2ID0gdGFyZ2V0IC8gc291cmNlOworCX0gZWxzZQorCQlwbGxfZGl2LT5kaXYyID0gMDsKKworCWlmICgoTmRpdiA8IDYpIHx8IChOZGl2ID4gMTIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiV004OTkxIE4gdmFsdWUgb3V0d2l0aCByZWNvbW1lbmRlZCByYW5nZSEgTiA9ICVkXG4iLCBOZGl2KTsKKworCXBsbF9kaXYtPm4gPSBOZGl2OworCU5tb2QgPSB0YXJnZXQgJSBzb3VyY2U7CisJS3BhcnQgPSBGSVhFRF9QTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgc291cmNlKTsKKworCUsgPSBLcGFydCAmIDB4RkZGRkZGRkY7CisKKwkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHJvdW5kICovCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlLIC89IDEwOworCisJcGxsX2Rpdi0+ayA9IEs7Cit9CisKK3N0YXRpYyBpbnQgd204OTkxX3NldF9kYWlfcGxsKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJICAgICAgaW50IHBsbF9pZCwgaW50IHNyYywgdW5zaWduZWQgaW50IGZyZXFfaW4sIHVuc2lnbmVkIGludCBmcmVxX291dCkKK3sKKwl1MTYgcmVnOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IF9wbGxfZGl2IHBsbF9kaXY7CisKKwlpZiAoZnJlcV9pbiAmJiBmcmVxX291dCkgeworCQlwbGxfZmFjdG9ycygmcGxsX2RpdiwgZnJlcV9vdXQgKiA0LCBmcmVxX2luKTsKKworCQkvKiBUdXJuIG9uIFBMTCAqLworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzIpOworCQlyZWcgfD0gV004OTkxX1BMTF9FTkE7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CisKKwkJLyogc3lzY2xrIGNvbWVzIGZyb20gUExMICovCisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX0NMT0NLSU5HXzIpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQ0xPQ0tJTkdfMiwgcmVnIHwgV004OTkxX1NZU0NMS19TUkMpOworCisJCS8qIHNldCB1cCBOICwgZnJhY3Rpb25hbCBtb2RlIGFuZCBwcmUtZGl2aXNvciBpZiBuZWNjZXNzYXJ5ICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QTEwxLCBwbGxfZGl2Lm4gfCBXTTg5OTFfU0RNIHwKKwkJCSAgICAgIChwbGxfZGl2LmRpdjIgPyBXTTg5OTFfUFJFU0NBTEUgOiAwKSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QTEwyLCAodTgpKHBsbF9kaXYuaz4+OCkpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfUExMMywgKHU4KShwbGxfZGl2LmsgJiAweEZGKSk7CisJfSBlbHNlIHsKKwkJLyogVHVybiBvbiBQTEwgKi8KKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTFfUE9XRVJfTUFOQUdFTUVOVF8yKTsKKwkJcmVnICY9IH5XTTg5OTFfUExMX0VOQTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMiwgcmVnKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQncyBBREMgYW5kIFZvaWNlIERBQyBmb3JtYXQuCisgKi8KK3N0YXRpYyBpbnQgd204OTkxX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiBhdWRpbzEsIGF1ZGlvMzsKKworCWF1ZGlvMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX0FVRElPX0lOVEVSRkFDRV8xKTsKKwlhdWRpbzMgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MV9BVURJT19JTlRFUkZBQ0VfMyk7CisKKwkvKiBzZXQgbWFzdGVyL3NsYXZlIGF1ZGlvIGludGVyZmFjZSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWF1ZGlvMyAmPSB+V004OTkxX0FJRl9NU1RSMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlhdWRpbzMgfD0gV004OTkxX0FJRl9NU1RSMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYXVkaW8xICY9IH5XTTg5OTFfQUlGX0ZNVF9NQVNLOworCisJLyogaW50ZXJmYWNlIGZvcm1hdCAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYXVkaW8xIHw9IFdNODk5MV9BSUZfVE1GX0kyUzsKKwkJYXVkaW8xICY9IH5XTTg5OTFfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlhdWRpbzEgfD0gV004OTkxX0FJRl9UTUZfUklHSFRKOworCQlhdWRpbzEgJj0gfldNODk5MV9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYXVkaW8xIHw9IFdNODk5MV9BSUZfVE1GX0xFRlRKOworCQlhdWRpbzEgJj0gfldNODk5MV9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlhdWRpbzEgfD0gV004OTkxX0FJRl9UTUZfRFNQOworCQlhdWRpbzEgJj0gfldNODk5MV9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlhdWRpbzEgfD0gV004OTkxX0FJRl9UTUZfRFNQIHwgV004OTkxX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9BVURJT19JTlRFUkZBQ0VfMSwgYXVkaW8xKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQVVESU9fSU5URVJGQUNFXzMsIGF1ZGlvMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTkxX3NldF9kYWlfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJCSBpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IHJlZzsKKworCXN3aXRjaCAoZGl2X2lkKSB7CisJY2FzZSBXTTg5OTFfTUNMS19ESVY6CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX0NMT0NLSU5HXzIpICYKKwkJICAgICAgfldNODk5MV9NQ0xLX0RJVl9NQVNLOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQ0xPQ0tJTkdfMiwgcmVnIHwgZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTFfREFDQ0xLX0RJVjoKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTFfQ0xPQ0tJTkdfMikgJgorCQkgICAgICB+V004OTkxX0RBQ19DTEtESVZfTUFTSzsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004OTkxX0FEQ0NMS19ESVY6CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX0NMT0NLSU5HXzIpICYKKwkJICAgICAgfldNODk5MV9BRENfQ0xLRElWX01BU0s7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9DTE9DS0lOR18yLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODk5MV9CQ0xLX0RJVjoKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTFfQ0xPQ0tJTkdfMSkgJgorCQkgICAgICB+V004OTkxX0JDTEtfRElWX01BU0s7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9DTE9DS0lOR18xLCByZWcgfCBkaXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCBQQ00gREFJIGJpdCBzaXplIGFuZCBzYW1wbGUgcmF0ZS4KKyAqLworc3RhdGljIGludCB3bTg5OTFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTE2IGF1ZGlvMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX0FVRElPX0lOVEVSRkFDRV8xKTsKKworCWF1ZGlvMSAmPSB+V004OTkxX0FJRl9XTF9NQVNLOworCS8qIGJpdCBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJYXVkaW8xIHw9IFdNODk5MV9BSUZfV0xfMjBCSVRTOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlhdWRpbzEgfD0gV004OTkxX0FJRl9XTF8yNEJJVFM7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWF1ZGlvMSB8PSBXTTg5OTFfQUlGX1dMXzMyQklUUzsKKwkJYnJlYWs7CisJfQorCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX0FVRElPX0lOVEVSRkFDRV8xLCBhdWRpbzEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5MV9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXUxNiB2YWw7CisKKwl2YWwgID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTFfREFDX0NUUkwpICYgfldNODk5MV9EQUNfTVVURTsKKwlpZiAobXV0ZSkKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX0RBQ19DVFJMLCB2YWwgfCBXTTg5OTFfREFDX01VVEUpOworCWVsc2UKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX0RBQ19DVFJMLCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5MV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJLyogVk1JRD0yKjUwayAqLworCQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEpICYKKwkJICAgICAgfldNODk5MV9WTUlEX01PREVfTUFTSzsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsIHwgMHgyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlzbmRfc29jX2NhY2hlX3N5bmMoY29kZWMpOworCQkJLyogRW5hYmxlIGFsbCBvdXRwdXQgZGlzY2hhcmdlIGJpdHMgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9BTlRJUE9QMSwgV004OTkxX0RJU19MTElORSB8CisJCQkJICAgICAgV004OTkxX0RJU19STElORSB8IFdNODk5MV9ESVNfT1VUMyB8CisJCQkJICAgICAgV004OTkxX0RJU19PVVQ0IHwgV004OTkxX0RJU19MT1VUIHwKKwkJCQkgICAgICBXTTg5OTFfRElTX1JPVVQpOworCisJCQkvKiBFbmFibGUgUE9CQ1RSTCwgU09GVF9TVCwgVk1JRFRPRyBhbmQgQlVGRENPUEVOICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQU5USVBPUDIsIFdNODk5MV9TT0ZUU1QgfAorCQkJCSAgICAgIFdNODk5MV9CVUZEQ09QRU4gfCBXTTg5OTFfUE9CQ1RSTCB8CisJCQkJICAgICAgV004OTkxX1ZNSURUT0cpOworCisJCQkvKiBEZWxheSB0byBhbGxvdyBvdXRwdXQgY2FwcyB0byBkaXNjaGFyZ2UgKi8KKwkJCW1zbGVlcCgzMDApOworCisJCQkvKiBEaXNhYmxlIFZNSURUT0cgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9BTlRJUE9QMiwgV004OTkxX1NPRlRTVCB8CisJCQkJICAgICAgV004OTkxX0JVRkRDT1BFTiB8IFdNODk5MV9QT0JDVFJMKTsKKworCQkJLyogZGlzYWJsZSBhbGwgb3V0cHV0IGRpc2NoYXJnZSBiaXRzICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQU5USVBPUDEsIDApOworCisJCQkvKiBFbmFibGUgb3V0cHV0cyAqLworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSwgMHgxYjAwKTsKKworCQkJbXNsZWVwKDUwKTsKKworCQkJLyogRW5hYmxlIFZNSUQgYXQgMng1MGsgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MWYwMik7CisKKwkJCW1zbGVlcCgxMDApOworCisJCQkvKiBFbmFibGUgVlJFRiAqLworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSwgMHgxZjAzKTsKKworCQkJbXNsZWVwKDYwMCk7CisKKwkJCS8qIEVuYWJsZSBCVUZJT0VOICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQU5USVBPUDIsIFdNODk5MV9TT0ZUU1QgfAorCQkJCSAgICAgIFdNODk5MV9CVUZEQ09QRU4gfCBXTTg5OTFfUE9CQ1RSTCB8CisJCQkJICAgICAgV004OTkxX0JVRklPRU4pOworCisJCQkvKiBEaXNhYmxlIG91dHB1dHMgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4Myk7CisKKwkJCS8qIGRpc2FibGUgUE9CQ1RSTCwgU09GVF9TVCBhbmQgQlVGRENPUEVOICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQU5USVBPUDIsIFdNODk5MV9CVUZJT0VOKTsKKwkJfQorCisJCS8qIFZNSUQ9MioyNTBrICovCisJCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSkgJgorCQkgICAgICB+V004OTkxX1ZNSURfTU9ERV9NQVNLOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwgfCAweDQpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogRW5hYmxlIFBPQkNUUkwgYW5kIFNPRlRfU1QgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX0FOVElQT1AyLCBXTTg5OTFfU09GVFNUIHwKKwkJCSAgICAgIFdNODk5MV9QT0JDVFJMIHwgV004OTkxX0JVRklPRU4pOworCisJCS8qIEVuYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX0FOVElQT1AyLCBXTTg5OTFfU09GVFNUIHwKKwkJCSAgICAgIFdNODk5MV9CVUZEQ09QRU4gfCBXTTg5OTFfUE9CQ1RSTCB8CisJCQkgICAgICBXTTg5OTFfQlVGSU9FTik7CisKKwkJLyogbXV0ZSBEQUMgKi8KKwkJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTFfREFDX0NUUkwpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfREFDX0NUUkwsIHZhbCB8IFdNODk5MV9EQUNfTVVURSk7CisKKwkJLyogRW5hYmxlIGFueSBkaXNhYmxlZCBvdXRwdXRzICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MWYwMyk7CisKKwkJLyogRGlzYWJsZSBWTUlEICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MWYwMSk7CisKKwkJbXNsZWVwKDMwMCk7CisKKwkJLyogRW5hYmxlIGFsbCBvdXRwdXQgZGlzY2hhcmdlIGJpdHMgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX0FOVElQT1AxLCBXTTg5OTFfRElTX0xMSU5FIHwKKwkJCSAgICAgIFdNODk5MV9ESVNfUkxJTkUgfCBXTTg5OTFfRElTX09VVDMgfAorCQkJICAgICAgV004OTkxX0RJU19PVVQ0IHwgV004OTkxX0RJU19MT1VUIHwKKwkJCSAgICAgIFdNODk5MV9ESVNfUk9VVCk7CisKKwkJLyogRGlzYWJsZSBWUkVGICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MCk7CisKKwkJLyogZGlzYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX0FOVElQT1AyLCAweDApOworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJCWJyZWFrOworCX0KKworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTFfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwl3bTg5OTFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5MV9yZXN1bWUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXdtODk5MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCXJldHVybiAwOworfQorCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgd204OTkxX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJd204OTkxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTFfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTFfcHJpdiAqd204OTkxOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXdtODk5MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDgsIDE2LCB3bTg5OTEtPmNvbnRyb2xfdHlwZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBpL286ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHdtODk5MV9yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bTg5OTFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX0FVRElPX0lOVEVSRkFDRV80KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfQVVESU9fSU5URVJGQUNFXzQsIHJlZyB8IFdNODk5MV9BTFJDR1BJTzEpOworCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTFfR1BJTzFfR1BJTzIpICYKKwkgICAgICB+V004OTkxX0dQSU8xX1NFTF9NQVNLOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9HUElPMV9HUElPMiwgcmVnIHwgMSk7CisKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9QT1dFUl9NQU5BR0VNRU5UXzEsIHJlZyB8IFdNODk5MV9WUkVGX0VOQXwKKwkJICAgICAgV004OTkxX1ZNSURfTU9ERV9NQVNLKTsKKworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMiwgcmVnIHwgV004OTkxX09QQ0xLX0VOQSk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfREFDX0NUUkwsIDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9MRUZUX09VVFBVVF9WT0xVTUUsIDB4NTAgfCAoMTw8OCkpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9SSUdIVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5OTFfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk5MV9zbmRfY29udHJvbHMpKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoJmNvZGVjLT5kYXBtLCB3bTg5OTFfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5OTFfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoJmNvZGVjLT5kYXBtLCBhdWRpb19tYXAsCisJCQkJQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg5OTFfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTFfb3BzID0geworCS5od19wYXJhbXMgPSB3bTg5OTFfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUgPSB3bTg5OTFfbXV0ZSwKKwkuc2V0X2ZtdCA9IHdtODk5MV9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2RpdiA9IHdtODk5MV9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbCA9IHdtODk5MV9zZXRfZGFpX3BsbAorfTsKKworLyoKKyAqIFRoZSBXTTg5OTEgc3VwcG9ydHMgMiBkaWZmZXJlbnQgYW5kIG11dHVhbGx5IGV4Y2x1c2l2ZSBEQUkKKyAqIGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIDEuIEFEQy9EQUMgb24gUHJpbWFyeSBJbnRlcmZhY2UKKyAqIDIuIEFEQyBvbiBQcmltYXJ5IEludGVyZmFjZS9EQUMgb24gc2Vjb25kYXJ5CisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHdtODk5MV9kYWkgPSB7CisJLyogQURDL0RBQyBvbiBwcmltYXJ5ICovCisJLm5hbWUgPSAid204OTkxIiwKKwkuaWQgPSAxLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkuZm9ybWF0cyA9IFdNODk5MV9GT1JNQVRTCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCS5mb3JtYXRzID0gV004OTkxX0ZPUk1BVFMKKwl9LAorCS5vcHMgPSAmd204OTkxX29wcworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X3dtODk5MSA9IHsKKwkucHJvYmUgPSB3bTg5OTFfcHJvYmUsCisJLnJlbW92ZSA9IHdtODk5MV9yZW1vdmUsCisJLnN1c3BlbmQgPSB3bTg5OTFfc3VzcGVuZCwKKwkucmVzdW1lID0gd204OTkxX3Jlc3VtZSwKKwkuc2V0X2JpYXNfbGV2ZWwgPSB3bTg5OTFfc2V0X2JpYXNfbGV2ZWwsCisJLnJlZ19jYWNoZV9zaXplID0gV004OTkxX01BWF9SRUdJU1RFUiArIDEsCisJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKKwkucmVnX2NhY2hlX2RlZmF1bHQgPSB3bTg5OTFfcmVnX2RlZnMKK307CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODk5MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODk5MV9wcml2ICp3bTg5OTE7CisJaW50IHJldDsKKworCXdtODk5MSA9IGt6YWxsb2Moc2l6ZW9mICp3bTg5OTEsIEdGUF9LRVJORUwpOworCWlmICghd204OTkxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdtODk5MS0+Y29udHJvbF90eXBlID0gU05EX1NPQ19JMkM7CisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTkxKTsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2LAorCQkJCSAgICAgJnNvY19jb2RlY19kZXZfd204OTkxLCAmd204OTkxX2RhaSwgMSk7CisJaWYgKHJldCA8IDApCisJCWtmcmVlKHdtODk5MSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTkxX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmNsaWVudC0+ZGV2KTsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5OTFfaTJjX2lkW10gPSB7CisJeyAid204OTkxIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5OTFfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODk5MV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODk5MSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gd204OTkxX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod204OTkxX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODk5MV9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTg5OTFfbW9kaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODk5MV9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004OTkxIEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdCh3bTg5OTFfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg5OTFfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTg5OTFfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg5OTFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg5OTEgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJHcmFlbWUgR3JlZ29yeSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTEuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5NDJlZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkxLmgKQEAgLTAsMCArMSw4MzMgQEAKKy8qCisgKiB3bTg5OTEuaCAgLS0gIGF1ZGlvIGRyaXZlciBmb3IgV004OTkxCisgKgorICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogR3JhZW1lIEdyZWdvcnkKKyAqICAgICAgICAgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfV004OTkxX0gKKyNkZWZpbmUgX1dNODk5MV9ICisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004OTkxX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMSAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMiAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV004OTkxX1BPV0VSX01BTkFHRU1FTlRfMyAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgV004OTkxX0FVRElPX0lOVEVSRkFDRV8xICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004OTkxX0FVRElPX0lOVEVSRkFDRV8yICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004OTkxX0NMT0NLSU5HXzEgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgV004OTkxX0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgV004OTkxX0FVRElPX0lOVEVSRkFDRV8zICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV004OTkxX0FVRElPX0lOVEVSRkFDRV80ICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgV004OTkxX0RBQ19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgV004OTkxX0xFRlRfREFDX0RJR0lUQUxfVk9MVU1FICAgICAgICAgIDB4MEIKKyNkZWZpbmUgV004OTkxX1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSAgICAgICAgIDB4MEMKKyNkZWZpbmUgV004OTkxX0RJR0lUQUxfU0lERV9UT05FICAgICAgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgV004OTkxX0FEQ19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUKKyNkZWZpbmUgV004OTkxX0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FICAgICAgICAgIDB4MEYKKyNkZWZpbmUgV004OTkxX1JJR0hUX0FEQ19ESUdJVEFMX1ZPTFVNRSAgICAgICAgIDB4MTAKKyNkZWZpbmUgV004OTkxX0dQSU9fQ1RSTF8xICAgICAgICAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgV004OTkxX0dQSU8xX0dQSU8yICAgICAgICAgICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgV004OTkxX0dQSU8zX0dQSU80ICAgICAgICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgV004OTkxX0dQSU81X0dQSU82ICAgICAgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgV004OTkxX0dQSU9DVFJMXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgV004OTkxX0dQSU9fUE9MICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgV004OTkxX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FICAgICAgIDB4MTgKKyNkZWZpbmUgV004OTkxX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FICAgICAgIDB4MTkKKyNkZWZpbmUgV004OTkxX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSAgICAgIDB4MUEKKyNkZWZpbmUgV004OTkxX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSAgICAgIDB4MUIKKyNkZWZpbmUgV004OTkxX0xFRlRfT1VUUFVUX1ZPTFVNRSAgICAgICAgICAgICAgIDB4MUMKKyNkZWZpbmUgV004OTkxX1JJR0hUX09VVFBVVF9WT0xVTUUgICAgICAgICAgICAgIDB4MUQKKyNkZWZpbmUgV004OTkxX0xJTkVfT1VUUFVUU19WT0xVTUUgICAgICAgICAgICAgIDB4MUUKKyNkZWZpbmUgV004OTkxX09VVDNfNF9WT0xVTUUgICAgICAgICAgICAgICAgICAgIDB4MUYKKyNkZWZpbmUgV004OTkxX0xFRlRfT1BHQV9WT0xVTUUgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgV004OTkxX1JJR0hUX09QR0FfVk9MVU1FICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgV004OTkxX1NQRUFLRVJfVk9MVU1FICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgV004OTkxX0NMQVNTRDEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjMKKyNkZWZpbmUgV004OTkxX0NMQVNTRDMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgV004OTkxX0lOUFVUX01JWEVSMSAgICAgICAgICAgICAgICAgICAgIDB4MjcKKyNkZWZpbmUgV004OTkxX0lOUFVUX01JWEVSMiAgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgV004OTkxX0lOUFVUX01JWEVSMyAgICAgICAgICAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgV004OTkxX0lOUFVUX01JWEVSNCAgICAgICAgICAgICAgICAgICAgIDB4MkEKKyNkZWZpbmUgV004OTkxX0lOUFVUX01JWEVSNSAgICAgICAgICAgICAgICAgICAgIDB4MkIKKyNkZWZpbmUgV004OTkxX0lOUFVUX01JWEVSNiAgICAgICAgICAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgV004OTkxX09VVFBVVF9NSVhFUjEgICAgICAgICAgICAgICAgICAgIDB4MkQKKyNkZWZpbmUgV004OTkxX09VVFBVVF9NSVhFUjIgICAgICAgICAgICAgICAgICAgIDB4MkUKKyNkZWZpbmUgV004OTkxX09VVFBVVF9NSVhFUjMgICAgICAgICAgICAgICAgICAgIDB4MkYKKyNkZWZpbmUgV004OTkxX09VVFBVVF9NSVhFUjQgICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgV004OTkxX09VVFBVVF9NSVhFUjUgICAgICAgICAgICAgICAgICAgIDB4MzEKKyNkZWZpbmUgV004OTkxX09VVFBVVF9NSVhFUjYgICAgICAgICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgV004OTkxX09VVDNfNF9NSVhFUiAgICAgICAgICAgICAgICAgICAgIDB4MzMKKyNkZWZpbmUgV004OTkxX0xJTkVfTUlYRVIxICAgICAgICAgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgV004OTkxX0xJTkVfTUlYRVIyICAgICAgICAgICAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgV004OTkxX1NQRUFLRVJfTUlYRVIgICAgICAgICAgICAgICAgICAgIDB4MzYKKyNkZWZpbmUgV004OTkxX0FERElUSU9OQUxfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MzcKKyNkZWZpbmUgV004OTkxX0FOVElQT1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgV004OTkxX0FOVElQT1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzkKKyNkZWZpbmUgV004OTkxX01JQ0JJQVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgV004OTkxX1BMTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgV004OTkxX1BMTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0QKKyNkZWZpbmUgV004OTkxX1BMTDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0UKKyNkZWZpbmUgV004OTkxX0lOVERSSVZCSVRTCQkJMHgzRgorCisjZGVmaW5lIFdNODk5MV9SRUdJU1RFUl9DT1VOVCAgICAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBXTTg5OTFfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHgzRgorCisvKgorICogRmllbGQgRGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFIwICgweDAwKSAtIFJlc2V0CisgKi8KKyNkZWZpbmUgV004OTkxX1NXX1JFU0VUX0NISVBfSURfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogU1dfUkVTRVRfQ0hJUF9JRCAtIFsxNTowXSAqLworCisvKgorICogUjEgKDB4MDEpIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTFfU1BLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBTUEtfRU5BICovCisjZGVmaW5lIFdNODk5MV9TUEtfRU5BX0JJVAkJCTEyCisjZGVmaW5lIFdNODk5MV9PVVQzX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIE9VVDNfRU5BICovCisjZGVmaW5lIFdNODk5MV9PVVQzX0VOQV9CSVQJCQkxMQorI2RlZmluZSBXTTg5OTFfT1VUNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBPVVQ0X0VOQSAqLworI2RlZmluZSBXTTg5OTFfT1VUNF9FTkFfQklUCQkJMTAKKyNkZWZpbmUgV004OTkxX0xPVVRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTE9VVF9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0xPVVRfRU5BX0JJVAkJCTkKKyNkZWZpbmUgV004OTkxX1JPVVRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUk9VVF9FTkEgKi8KKyNkZWZpbmUgV004OTkxX1JPVVRfRU5BX0JJVAkJCTgKKyNkZWZpbmUgV004OTkxX01JQ0JJQVNfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTkxX01JQ0JJQVNfRU5BX0JJVAkJCTQKKyNkZWZpbmUgV004OTkxX1ZNSURfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogVk1JRF9NT0RFIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTkxX1ZSRUZfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVlJFRl9FTkEgKi8KKyNkZWZpbmUgV004OTkxX1ZSRUZfRU5BX0JJVAkJCTAKKworLyoKKyAqIFIyICgweDAyKSAtIFBvd2VyIE1hbmFnZW1lbnQgKDIpCisgKi8KKyNkZWZpbmUgV004OTkxX1BMTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogUExMX0VOQSAqLworI2RlZmluZSBXTTg5OTFfUExMX0VOQV9CSVQJCQkxNQorI2RlZmluZSBXTTg5OTFfVFNIVVRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUU0hVVF9FTkEgKi8KKyNkZWZpbmUgV004OTkxX1RTSFVUX0VOQV9CSVQJCQkxNAorI2RlZmluZSBXTTg5OTFfVFNIVVRfT1BESVMgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg5OTFfVFNIVVRfT1BESVNfQklUCQkJMTMKKyNkZWZpbmUgV004OTkxX09QQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5MV9PUENMS19FTkFfQklUCQkJMTEKKyNkZWZpbmUgV004OTkxX0FJTkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlOTF9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0FJTkxfRU5BX0JJVAkJCTkKKyNkZWZpbmUgV004OTkxX0FJTlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlOUl9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0FJTlJfRU5BX0JJVAkJCTgKKyNkZWZpbmUgV004OTkxX0xJTjM0X0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElOMzRfRU5BICovCisjZGVmaW5lIFdNODk5MV9MSU4zNF9FTkFfQklUCQkJNworI2RlZmluZSBXTTg5OTFfTElOMTJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU4xMl9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0xJTjEyX0VOQV9CSVQJCQk2CisjZGVmaW5lIFdNODk5MV9SSU4zNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFJJTjM0X0VOQSAqLworI2RlZmluZSBXTTg5OTFfUklOMzRfRU5BX0JJVAkJCTUKKyNkZWZpbmUgV004OTkxX1JJTjEyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUklOMTJfRU5BICovCisjZGVmaW5lIFdNODk5MV9SSU4xMl9FTkFfQklUCQkJNAorI2RlZmluZSBXTTg5OTFfQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTFfQURDTF9FTkFfQklUCQkJMQorI2RlZmluZSBXTTg5OTFfQURDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5OTFfQURDUl9FTkFfQklUCQkJMAorCisvKgorICogUjMgKDB4MDMpIC0gUG93ZXIgTWFuYWdlbWVudCAoMykKKyAqLworI2RlZmluZSBXTTg5OTFfTE9OX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBMT05fRU5BICovCisjZGVmaW5lIFdNODk5MV9MT05fRU5BX0JJVAkJCTEzCisjZGVmaW5lIFdNODk5MV9MT1BfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExPUF9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0xPUF9FTkFfQklUCQkJMTIKKyNkZWZpbmUgV004OTkxX1JPTl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogUk9OX0VOQSAqLworI2RlZmluZSBXTTg5OTFfUk9OX0VOQV9CSVQJCQkxMQorI2RlZmluZSBXTTg5OTFfUk9QX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBST1BfRU5BICovCisjZGVmaW5lIFdNODk5MV9ST1BfRU5BX0JJVAkJCTEwCisjZGVmaW5lIFdNODk5MV9MT1BHQV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPUEdBX0VOQSAqLworI2RlZmluZSBXTTg5OTFfTE9QR0FfRU5BX0JJVAkJCTcKKyNkZWZpbmUgV004OTkxX1JPUEdBX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogUk9QR0FfRU5BICovCisjZGVmaW5lIFdNODk5MV9ST1BHQV9FTkFfQklUCQkJNgorI2RlZmluZSBXTTg5OTFfTE9NSVhfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMT01JWF9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0xPTUlYX0VOQV9CSVQJCQk1CisjZGVmaW5lIFdNODk5MV9ST01JWF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJPTUlYX0VOQSAqLworI2RlZmluZSBXTTg5OTFfUk9NSVhfRU5BX0JJVAkJCTQKKyNkZWZpbmUgV004OTkxX0RBQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0RBQ0xfRU5BX0JJVAkJCTEKKyNkZWZpbmUgV004OTkxX0RBQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0RBQ1JfRU5BX0JJVAkJCTAKKworLyoKKyAqIFI0ICgweDA0KSAtIEF1ZGlvIEludGVyZmFjZSAoMSkKKyAqLworI2RlZmluZSBXTTg5OTFfQUlGQURDTF9TUkMgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTFfQUlGQURDUl9TUkMgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTFfQUlGQURDX1RETSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODk5MV9BSUZBRENfVERNX0NIQU4gICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTFfQUlGX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTkxX0FJRl9MUkNMS19JTlYgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTFfQUlGX1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBBSUZfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5OTFfQUlGX1dMXzE2QklUUwkJCSgwIDw8IDUpCisjZGVmaW5lIFdNODk5MV9BSUZfV0xfMjBCSVRTCQkJKDEgPDwgNSkKKyNkZWZpbmUgV004OTkxX0FJRl9XTF8yNEJJVFMJCQkoMiA8PCA1KQorI2RlZmluZSBXTTg5OTFfQUlGX1dMXzMyQklUUwkJCSgzIDw8IDUpCisjZGVmaW5lIFdNODk5MV9BSUZfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIEFJRl9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTFfQUlGX1RNRl9SSUdIVEoJCQkoMCA8PCAzKQorI2RlZmluZSBXTTg5OTFfQUlGX1RNRl9MRUZUSgkJCSgxIDw8IDMpCisjZGVmaW5lIFdNODk5MV9BSUZfVE1GX0kyUwkJCSgyIDw8IDMpCisjZGVmaW5lIFdNODk5MV9BSUZfVE1GX0RTUAkJCSgzIDw8IDMpCisKKy8qCisgKiBSNSAoMHgwNSkgLSBBdWRpbyBJbnRlcmZhY2UgKDIpCisgKi8KKyNkZWZpbmUgV004OTkxX0RBQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTkxX0RBQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTkxX0FJRkRBQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg5OTFfQUlGREFDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTkxX0RBQ19CT09TVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEMwMCAgLyogREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTFfREFDX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTFfREFDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTkxX0FEQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTkxX0FEQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5MV9MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExPT1BCQUNLICovCisKKy8qCisgKiBSNiAoMHgwNikgLSBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTFfVE9DTEtfUkFURSAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODk5MV9UT0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTFfT1BDTEtESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxRTAwICAvKiBPUENMS0RJViAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTFfRENMS0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMUMwICAvKiBEQ0xLRElWIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkxX0JDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRSAgLyogQkNMS19ESVYgLSBbNDoxXSAqLworI2RlZmluZSBXTTg5OTFfQkNMS19ESVZfMQkJCSgweDAgPDwgMSkKKyNkZWZpbmUgV004OTkxX0JDTEtfRElWXzFfNQkJCSgweDEgPDwgMSkKKyNkZWZpbmUgV004OTkxX0JDTEtfRElWXzIJCQkoMHgyIDw8IDEpCisjZGVmaW5lIFdNODk5MV9CQ0xLX0RJVl8zCQkJKDB4MyA8PCAxKQorI2RlZmluZSBXTTg5OTFfQkNMS19ESVZfNAkJCSgweDQgPDwgMSkKKyNkZWZpbmUgV004OTkxX0JDTEtfRElWXzVfNQkJCSgweDUgPDwgMSkKKyNkZWZpbmUgV004OTkxX0JDTEtfRElWXzYJCQkoMHg2IDw8IDEpCisjZGVmaW5lIFdNODk5MV9CQ0xLX0RJVl84CQkJKDB4NyA8PCAxKQorI2RlZmluZSBXTTg5OTFfQkNMS19ESVZfMTEJCQkoMHg4IDw8IDEpCisjZGVmaW5lIFdNODk5MV9CQ0xLX0RJVl8xMgkJCSgweDkgPDwgMSkKKyNkZWZpbmUgV004OTkxX0JDTEtfRElWXzE2CQkJKDB4QSA8PCAxKQorI2RlZmluZSBXTTg5OTFfQkNMS19ESVZfMjIJCQkoMHhCIDw8IDEpCisjZGVmaW5lIFdNODk5MV9CQ0xLX0RJVl8yNAkJCSgweEMgPDwgMSkKKyNkZWZpbmUgV004OTkxX0JDTEtfRElWXzMyCQkJKDB4RCA8PCAxKQorI2RlZmluZSBXTTg5OTFfQkNMS19ESVZfNDQJCQkoMHhFIDw8IDEpCisjZGVmaW5lIFdNODk5MV9CQ0xLX0RJVl80OAkJCSgweEYgPDwgMSkKKworLyoKKyAqIFI3ICgweDA3KSAtIENsb2NraW5nICgyKQorICovCisjZGVmaW5lIFdNODk5MV9NQ0xLX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIE1DTEtfU1JDICovCisjZGVmaW5lIFdNODk5MV9TWVNDTEtfU1JDICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTkxX0NMS19GT1JDRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQ0xLX0ZPUkNFICovCisjZGVmaW5lIFdNODk5MV9NQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDE4MDAgIC8qIE1DTEtfRElWIC0gWzEyOjExXSAqLworI2RlZmluZSBXTTg5OTFfTUNMS19ESVZfMQkJCSgwIDw8IDExKQorI2RlZmluZSBXTTg5OTFfTUNMS19ESVZfMgkJCSggMiA8PCAxMSkKKyNkZWZpbmUgV004OTkxX01DTEtfSU5WICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004OTkxX0FEQ19DTEtESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBFMCAgLyogQURDX0NMS0RJViAtIFs3OjVdICovCisjZGVmaW5lIFdNODk5MV9BRENfQ0xLRElWXzEJCQkoMCA8PCA1KQorI2RlZmluZSBXTTg5OTFfQURDX0NMS0RJVl8xXzUJCQkoMSA8PCA1KQorI2RlZmluZSBXTTg5OTFfQURDX0NMS0RJVl8yCQkJKDIgPDwgNSkKKyNkZWZpbmUgV004OTkxX0FEQ19DTEtESVZfMwkJCSgzIDw8IDUpCisjZGVmaW5lIFdNODk5MV9BRENfQ0xLRElWXzQJCQkoNCA8PCA1KQorI2RlZmluZSBXTTg5OTFfQURDX0NMS0RJVl81XzUJCQkoNSA8PCA1KQorI2RlZmluZSBXTTg5OTFfQURDX0NMS0RJVl82CQkJKDYgPDwgNSkKKyNkZWZpbmUgV004OTkxX0RBQ19DTEtESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxQyAgLyogREFDX0NMS0RJViAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5MV9EQUNfQ0xLRElWXzEJCQkoMCA8PCAyKQorI2RlZmluZSBXTTg5OTFfREFDX0NMS0RJVl8xXzUJCQkoMSA8PCAyKQorI2RlZmluZSBXTTg5OTFfREFDX0NMS0RJVl8yCQkJKDIgPDwgMikKKyNkZWZpbmUgV004OTkxX0RBQ19DTEtESVZfMwkJCSgzIDw8IDIpCisjZGVmaW5lIFdNODk5MV9EQUNfQ0xLRElWXzQJCQkoNCA8PCAyKQorI2RlZmluZSBXTTg5OTFfREFDX0NMS0RJVl81XzUJCQkoNSA8PCAyKQorI2RlZmluZSBXTTg5OTFfREFDX0NMS0RJVl82CQkJKDYgPDwgMikKKworLyoKKyAqIFI4ICgweDA4KSAtIEF1ZGlvIEludGVyZmFjZSAoMykKKyAqLworI2RlZmluZSBXTTg5OTFfQUlGX01TVFIxICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUZfTVNUUjEgKi8KKyNkZWZpbmUgV004OTkxX0FJRl9NU1RSMiAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGX01TVFIyICovCisjZGVmaW5lIFdNODk5MV9BSUZfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRl9TRUwgKi8KKyNkZWZpbmUgV004OTkxX0FEQ0xSQ19ESVIgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQURDTFJDX0RJUiAqLworI2RlZmluZSBXTTg5OTFfQURDTFJDX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBBRENMUkNfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjkgKDB4MDkpIC0gQXVkaW8gSW50ZXJmYWNlICg0KQorICovCisjZGVmaW5lIFdNODk5MV9BTFJDR1BJTzEgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFMUkNHUElPMSAqLworI2RlZmluZSBXTTg5OTFfQUxSQ0JHUElPNiAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBTFJDQkdQSU82ICovCisjZGVmaW5lIFdNODk5MV9BSUZfVFJJUyAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRl9UUklTICovCisjZGVmaW5lIFdNODk5MV9EQUNMUkNfRElSICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERBQ0xSQ19ESVIgKi8KKyNkZWZpbmUgV004OTkxX0RBQ0xSQ19SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogREFDTFJDX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFIxMCAoMHgwQSkgLSBEQUMgQ1RSTAorICovCisjZGVmaW5lIFdNODk5MV9BSUZfTFJDTEtSQVRFICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRl9MUkNMS1JBVEUgKi8KKyNkZWZpbmUgV004OTkxX0RBQ19NT05PICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004OTkxX0RBQ19TQl9GSUxUICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004OTkxX0RBQ19NVVRFUkFURSAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5MV9EQUNfTVVURU1PREUgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERBQ19NVVRFTU9ERSAqLworI2RlZmluZSBXTTg5OTFfREVFTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwICAvKiBERUVNUCAtIFs1OjRdICovCisjZGVmaW5lIFdNODk5MV9EQUNfTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODk5MV9EQUNMX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODk5MV9EQUNSX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfREFUSU5WICovCisKKy8qCisgKiBSMTEgKDB4MEIpIC0gTGVmdCBEQUMgRGlnaXRhbCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTFfREFDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTkxX0RBQ0xfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTFfREFDTF9WT0xfU0hJRlQJCQkwCisvKgorICogUjEyICgweDBDKSAtIFJpZ2h0IERBQyBEaWdpdGFsIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5MV9EQUNfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5OTFfREFDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUNSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5MV9EQUNSX1ZPTF9TSElGVAkJCTAKKy8qCisgKiBSMTMgKDB4MEQpIC0gRGlnaXRhbCBTaWRlIFRvbmUKKyAqLworI2RlZmluZSBXTTg5OTFfQURDTF9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwRiAgLyogQURDTF9EQUNfU1ZPTCAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTFfQURDTF9EQUNfU1ZPTF9TSElGVAkJOQorI2RlZmluZSBXTTg5OTFfQURDUl9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwRiAgLyogQURDUl9EQUNfU1ZPTCAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5MV9BRENSX0RBQ19TVk9MX1NISUZUCQk1CisjZGVmaW5lIFdNODk5MV9BRENfVE9fREFDTF9NQVNLICAgICAgICAgICAgICAgICAweDAzICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisjZGVmaW5lIFdNODk5MV9BRENfVE9fREFDTF9TSElGVAkJMgorI2RlZmluZSBXTTg5OTFfQURDX1RPX0RBQ1JfTUFTSyAgICAgICAgICAgICAgICAgMHgwMyAgLyogQURDX1RPX0RBQ1IgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTFfQURDX1RPX0RBQ1JfU0hJRlQJCTAKKworLyoKKyAqIFIxNCAoMHgwRSkgLSBBREMgQ1RSTAorICovCisjZGVmaW5lIFdNODk5MV9BRENfSFBGX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19IUEZfRU5BICovCisjZGVmaW5lIFdNODk5MV9BRENfSFBGX0VOQV9CSVQJCQk4CisjZGVmaW5lIFdNODk5MV9BRENfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAgICAweDAzICAvKiBBRENfSFBGX0NVVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5MV9BRENfSFBGX0NVVF9TSElGVAkJNQorI2RlZmluZSBXTTg5OTFfQURDTF9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5OTFfQURDTF9EQVRJTlZfQklUCQkJMQorI2RlZmluZSBXTTg5OTFfQURDUl9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg5OTFfQURDUl9EQVRJTlZfQklUCQkJMAorCisvKgorICogUjE1ICgweDBGKSAtIExlZnQgQURDIERpZ2l0YWwgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTkxX0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODk5MV9BRENMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkxX0FEQ0xfVk9MX1NISUZUCQkJMAorCisvKgorICogUjE2ICgweDEwKSAtIFJpZ2h0IEFEQyBEaWdpdGFsIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5MV9BRENfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5OTFfQURDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBRENSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5MV9BRENSX1ZPTF9TSElGVAkJCTAKKworLyoKKyAqIFIxOCAoMHgxMikgLSBHUElPIENUUkwgMQorICovCisjZGVmaW5lIFdNODk5MV9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIElSUSAqLworI2RlZmluZSBXTTg5OTFfVEVNUE9LICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBURU1QT0sgKi8KKyNkZWZpbmUgV004OTkxX01JQ1NIUlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUlDU0hSVCAqLworI2RlZmluZSBXTTg5OTFfTUlDREVUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNSUNERVQgKi8KKyNkZWZpbmUgV004OTkxX1BMTF9MQ0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUExMX0xDSyAqLworI2RlZmluZSBXTTg5OTFfR1BJOF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUEk4X1NUQVRVUyAqLworI2RlZmluZSBXTTg5OTFfR1BJN19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUEk3X1NUQVRVUyAqLworI2RlZmluZSBXTTg5OTFfR1BJTzZfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPNl9TVEFUVVMgKi8KKyNkZWZpbmUgV004OTkxX0dQSU81X1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzVfU1RBVFVTICovCisjZGVmaW5lIFdNODk5MV9HUElPNF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSU80X1NUQVRVUyAqLworI2RlZmluZSBXTTg5OTFfR1BJTzNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBHUElPM19TVEFUVVMgKi8KKyNkZWZpbmUgV004OTkxX0dQSU8yX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogR1BJTzJfU1RBVFVTICovCisjZGVmaW5lIFdNODk5MV9HUElPMV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSU8xX1NUQVRVUyAqLworCisvKgorICogUjE5ICgweDEzKSAtIEdQSU8xICYgR1BJTzIKKyAqLworI2RlZmluZSBXTTg5OTFfR1BJTzJfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUElPMl9ERUJfRU5BICovCisjZGVmaW5lIFdNODk5MV9HUElPMl9JUlFfRU5BICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQSU8yX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0dQSU8yX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTkxX0dQSU8yX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTkxX0dQSU8yX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogR1BJTzJfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5MV9HUElPMV9ERUJfRU5BICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8xX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0dQSU8xX0lSUV9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzFfSVJRX0VOQSAqLworI2RlZmluZSBXTTg5OTFfR1BJTzFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5OTFfR1BJTzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5OTFfR1BJTzFfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPMV9TRUwgLSBbMzowXSAqLworCisvKgorICogUjIwICgweDE0KSAtIEdQSU8zICYgR1BJTzQKKyAqLworI2RlZmluZSBXTTg5OTFfR1BJTzRfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUElPNF9ERUJfRU5BICovCisjZGVmaW5lIFdNODk5MV9HUElPNF9JUlFfRU5BICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQSU80X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0dQSU80X1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BJTzRfUFUgKi8KKyNkZWZpbmUgV004OTkxX0dQSU80X1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogR1BJTzRfUEQgKi8KKyNkZWZpbmUgV004OTkxX0dQSU80X1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogR1BJTzRfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5MV9HUElPM19ERUJfRU5BICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0dQSU8zX0lSUV9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzNfSVJRX0VOQSAqLworI2RlZmluZSBXTTg5OTFfR1BJTzNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5OTFfR1BJTzNfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5OTFfR1BJTzNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworCisvKgorICogUjIxICgweDE1KSAtIEdQSU81ICYgR1BJTzYKKyAqLworI2RlZmluZSBXTTg5OTFfR1BJTzZfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUElPNl9ERUJfRU5BICovCisjZGVmaW5lIFdNODk5MV9HUElPNl9JUlFfRU5BICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQSU82X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0dQSU82X1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BJTzZfUFUgKi8KKyNkZWZpbmUgV004OTkxX0dQSU82X1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogR1BJTzZfUEQgKi8KKyNkZWZpbmUgV004OTkxX0dQSU82X1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogR1BJTzZfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5MV9HUElPNV9ERUJfRU5BICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU81X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0dQSU81X0lSUV9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzVfSVJRX0VOQSAqLworI2RlZmluZSBXTTg5OTFfR1BJTzVfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPNV9QVSAqLworI2RlZmluZSBXTTg5OTFfR1BJTzVfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPNV9QRCAqLworI2RlZmluZSBXTTg5OTFfR1BJTzVfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPNV9TRUwgLSBbMzowXSAqLworCisvKgorICogUjIyICgweDE2KSAtIEdQSU9DVFJMIDIKKyAqLworI2RlZmluZSBXTTg5OTFfUkRfM1dfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBSRF8zV19FTkEgKi8KKyNkZWZpbmUgV004OTkxX01PREVfM1c0VyAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTU9ERV8zVzRXICovCisjZGVmaW5lIFdNODk5MV9URU1QT0tfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPS19JUlFfRU5BICovCisjZGVmaW5lIFdNODk5MV9NSUNTSFJUX0lSUV9FTkEgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1JQ1NIUlRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg5OTFfTUlDREVUX0lSUV9FTkEgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNSUNERVRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg5OTFfUExMX0xDS19JUlFfRU5BICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBQTExfTENLX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0dQSThfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJOF9ERUJfRU5BICovCisjZGVmaW5lIFdNODk5MV9HUEk4X0lSUV9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSThfSVJRX0VOQSAqLworI2RlZmluZSBXTTg5OTFfR1BJOF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5OTFfR1BJN19ERUJfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004OTkxX0dQSTdfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1BJN19JUlFfRU5BICovCisjZGVmaW5lIFdNODk5MV9HUEk3X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSTdfRU5BICovCisKKy8qCisgKiBSMjMgKDB4MTcpIC0gR1BJT19QT0wKKyAqLworI2RlZmluZSBXTTg5OTFfSVJRX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBJUlFfSU5WICovCisjZGVmaW5lIFdNODk5MV9URU1QT0tfUE9MICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPS19QT0wgKi8KKyNkZWZpbmUgV004OTkxX01JQ1NIUlRfUE9MICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUlDU0hSVF9QT0wgKi8KKyNkZWZpbmUgV004OTkxX01JQ0RFVF9QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlDREVUX1BPTCAqLworI2RlZmluZSBXTTg5OTFfUExMX0xDS19QT0wgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBQTExfTENLX1BPTCAqLworI2RlZmluZSBXTTg5OTFfR1BJOF9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUEk4X1BPTCAqLworI2RlZmluZSBXTTg5OTFfR1BJN19QT0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUEk3X1BPTCAqLworI2RlZmluZSBXTTg5OTFfR1BJTzZfUE9MICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPNl9QT0wgKi8KKyNkZWZpbmUgV004OTkxX0dQSU81X1BPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzVfUE9MICovCisjZGVmaW5lIFdNODk5MV9HUElPNF9QT0wgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSU80X1BPTCAqLworI2RlZmluZSBXTTg5OTFfR1BJTzNfUE9MICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBHUElPM19QT0wgKi8KKyNkZWZpbmUgV004OTkxX0dQSU8yX1BPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogR1BJTzJfUE9MICovCisjZGVmaW5lIFdNODk5MV9HUElPMV9QT0wgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSU8xX1BPTCAqLworCisvKgorICogUjI0ICgweDE4KSAtIExlZnQgTGluZSBJbnB1dCAxJjIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTkxX0lQVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg5OTFfTEkxMk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTEyTVVURSAqLworI2RlZmluZSBXTTg5OTFfTEkxMk1VVEVfQklUCQkJNworI2RlZmluZSBXTTg5OTFfTEkxMlpDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSTEyWkMgKi8KKyNkZWZpbmUgV004OTkxX0xJMTJaQ19CSVQJCQk2CisjZGVmaW5lIFdNODk5MV9MSU4xMlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIExJTjEyVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTkxX0xJTjEyVk9MX1NISUZUCQkJMAorLyoKKyAqIFIyNSAoMHgxOSkgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5MV9JUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004OTkxX0xJMzRNVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkzNE1VVEUgKi8KKyNkZWZpbmUgV004OTkxX0xJMzRNVVRFX0JJVAkJCTcKKyNkZWZpbmUgV004OTkxX0xJMzRaQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTEkzNFpDICovCisjZGVmaW5lIFdNODk5MV9MSTM0WkNfQklUCQkJNgorI2RlZmluZSBXTTg5OTFfTElOMzRWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBMSU4zNFZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5MV9MSU4zNFZPTF9TSElGVAkJCTAKKworLyoKKyAqIFIyNiAoMHgxQSkgLSBSaWdodCBMaW5lIElucHV0IDEmMiBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTFfSVBWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJUFZVICovCisjZGVmaW5lIFdNODk5MV9SSTEyTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMTJNVVRFICovCisjZGVmaW5lIFdNODk5MV9SSTEyTVVURV9CSVQJCQk3CisjZGVmaW5lIFdNODk5MV9SSTEyWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJJMTJaQyAqLworI2RlZmluZSBXTTg5OTFfUkkxMlpDX0JJVAkJCTYKKyNkZWZpbmUgV004OTkxX1JJTjEyVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogUklOMTJWT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTFfUklOMTJWT0xfU0hJRlQJCQkwCisKKy8qCisgKiBSMjcgKDB4MUIpIC0gUmlnaHQgTGluZSBJbnB1dCAzJjQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTkxX0lQVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg5OTFfUkkzNE1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTM0TVVURSAqLworI2RlZmluZSBXTTg5OTFfUkkzNE1VVEVfQklUCQkJNworI2RlZmluZSBXTTg5OTFfUkkzNFpDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSSTM0WkMgKi8KKyNkZWZpbmUgV004OTkxX1JJMzRaQ19CSVQJCQk2CisjZGVmaW5lIFdNODk5MV9SSU4zNFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIFJJTjM0Vk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTkxX1JJTjM0Vk9MX1NISUZUCQkJMAorCisvKgorICogUjI4ICgweDFDKSAtIExlZnQgT3V0cHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5MV9PUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004OTkxX0xPWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE9aQyAqLworI2RlZmluZSBXTTg5OTFfTE9aQ19CSVQJCQkJNworI2RlZmluZSBXTTg5OTFfTE9VVFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBMT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTkxX0xPVVRWT0xfU0hJRlQJCQkwCisvKgorICogUjI5ICgweDFEKSAtIFJpZ2h0IE91dHB1dCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTFfT1BWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBPUFZVICovCisjZGVmaW5lIFdNODk5MV9ST1pDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPWkMgKi8KKyNkZWZpbmUgV004OTkxX1JPWkNfQklUCQkJCTcKKyNkZWZpbmUgV004OTkxX1JPVVRWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogUk9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5MV9ST1VUVk9MX1NISUZUCQkJMAorLyoKKyAqIFIzMCAoMHgxRSkgLSBMaW5lIE91dHB1dHMgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTkxX0xPTk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTE9OTVVURSAqLworI2RlZmluZSBXTTg5OTFfTE9OTVVURV9CSVQJCQk2CisjZGVmaW5lIFdNODk5MV9MT1BNVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExPUE1VVEUgKi8KKyNkZWZpbmUgV004OTkxX0xPUE1VVEVfQklUCQkJNQorI2RlZmluZSBXTTg5OTFfTE9BVFROICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMT0FUVE4gKi8KKyNkZWZpbmUgV004OTkxX0xPQVRUTl9CSVQJCQk0CisjZGVmaW5lIFdNODk5MV9ST05NVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJPTk1VVEUgKi8KKyNkZWZpbmUgV004OTkxX1JPTk1VVEVfQklUCQkJMgorI2RlZmluZSBXTTg5OTFfUk9QTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBST1BNVVRFICovCisjZGVmaW5lIFdNODk5MV9ST1BNVVRFX0JJVAkJCTEKKyNkZWZpbmUgV004OTkxX1JPQVRUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUk9BVFROICovCisjZGVmaW5lIFdNODk5MV9ST0FUVE5fQklUCQkJMAorCisvKgorICogUjMxICgweDFGKSAtIE91dDMvNCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTFfT1VUM01VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBPVVQzTVVURSAqLworI2RlZmluZSBXTTg5OTFfT1VUM01VVEVfQklUCQkJNQorI2RlZmluZSBXTTg5OTFfT1VUM0FUVE4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBPVVQzQVRUTiAqLworI2RlZmluZSBXTTg5OTFfT1VUM0FUVE5fQklUCQkJNAorI2RlZmluZSBXTTg5OTFfT1VUNE1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBPVVQ0TVVURSAqLworI2RlZmluZSBXTTg5OTFfT1VUNE1VVEVfQklUCQkJMQorI2RlZmluZSBXTTg5OTFfT1VUNEFUVE4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBPVVQ0QVRUTiAqLworI2RlZmluZSBXTTg5OTFfT1VUNEFUVE5fQklUCQkJMAorCisvKgorICogUjMyICgweDIwKSAtIExlZnQgT1BHQSBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTFfT1BWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBPUFZVICovCisjZGVmaW5lIFdNODk5MV9MT1BHQVpDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPUEdBWkMgKi8KKyNkZWZpbmUgV004OTkxX0xPUEdBWkNfQklUCQkJNworI2RlZmluZSBXTTg5OTFfTE9QR0FWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBMT1BHQVZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5MV9MT1BHQVZPTF9TSElGVAkJCTAKKworLyoKKyAqIFIzMyAoMHgyMSkgLSBSaWdodCBPUEdBIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5MV9PUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004OTkxX1JPUEdBWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk9QR0FaQyAqLworI2RlZmluZSBXTTg5OTFfUk9QR0FaQ19CSVQJCQk3CisjZGVmaW5lIFdNODk5MV9ST1BHQVZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIFJPUEdBVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTkxX1JPUEdBVk9MX1NISUZUCQkJMAorLyoKKyAqIFIzNCAoMHgyMikgLSBTcGVha2VyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5MV9TUEtWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFNQS1ZPTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5MV9TUEtWT0xfU0hJRlQJCQkwCisKKy8qCisgKiBSMzUgKDB4MjMpIC0gQ2xhc3NEMQorICovCisjZGVmaW5lIFdNODk5MV9DRE1PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIENETU9ERSAqLworI2RlZmluZSBXTTg5OTFfQ0RNT0RFX0JJVAkJCTgKKworLyoKKyAqIFIzNyAoMHgyNSkgLSBDbGFzc0QzCisgKi8KKyNkZWZpbmUgV004OTkxX0RDR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogRENHQUlOIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkxX0RDR0FJTl9TSElGVAkJCTMKKyNkZWZpbmUgV004OTkxX0FDR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogQUNHQUlOIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkxX0FDR0FJTl9TSElGVAkJCTAKKy8qCisgKiBSMzkgKDB4MjcpIC0gSW5wdXQgTWl4ZXIxCisgKi8KKyNkZWZpbmUgV004OTkxX0FJTkxNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogQUlOTE1PREUgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5OTFfQUlOTE1PREVfU0hJRlQJCQkyCisjZGVmaW5lIFdNODk5MV9BSU5STU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFJTlJNT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTkxX0FJTlJNT0RFX1NISUZUCQkJMAorCisvKgorICogUjQwICgweDI4KSAtIElucHV0IE1peGVyMgorICovCisjZGVmaW5lIFdNODk5MV9MTVA0CQkJCQkJCQkweDAwODAJLyogTE1QNCAqLworI2RlZmluZSBXTTg5OTFfTE1QNF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgNwkJLyogTE1QNCAqLworI2RlZmluZSBXTTg5OTFfTE1OMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMTU4zICovCisjZGVmaW5lIFdNODk5MV9MTU4zX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAgICAgIC8qIExNTjMgKi8KKyNkZWZpbmUgV004OTkxX0xNUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTE1QMiAqLworI2RlZmluZSBXTTg5OTFfTE1QMl9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgNSAgICAgICAvKiBMTVAyICovCisjZGVmaW5lIFdNODk5MV9MTU4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExNTjEgKi8KKyNkZWZpbmUgV004OTkxX0xNTjFfQklUICAgICAgICAgICAgICAgICAgICAgICAgIDQgICAgICAgLyogTE1OMSAqLworI2RlZmluZSBXTTg5OTFfUk1QNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBSTVA0ICovCisjZGVmaW5lIFdNODk5MV9STVA0X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAzICAgICAgIC8qIFJNUDQgKi8KKyNkZWZpbmUgV004OTkxX1JNTjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogUk1OMyAqLworI2RlZmluZSBXTTg5OTFfUk1OM19CSVQgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAvKiBSTU4zICovCisjZGVmaW5lIFdNODk5MV9STVAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFJNUDIgKi8KKyNkZWZpbmUgV004OTkxX1JNUDJfQklUICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgLyogUk1QMiAqLworI2RlZmluZSBXTTg5OTFfUk1OMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSTU4xICovCisjZGVmaW5lIFdNODk5MV9STU4xX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgIC8qIFJNTjEgKi8KKworLyoKKyAqIFI0MSAoMHgyOSkgLSBJbnB1dCBNaXhlcjMKKyAqLworI2RlZmluZSBXTTg5OTFfTDM0TU5CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMMzRNTkIgKi8KKyNkZWZpbmUgV004OTkxX0wzNE1OQl9CSVQJCQk4CisjZGVmaW5lIFdNODk5MV9MMzRNTkJTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEwzNE1OQlNUICovCisjZGVmaW5lIFdNODk5MV9MMzRNTkJTVF9CSVQJCQk3CisjZGVmaW5lIFdNODk5MV9MMTJNTkIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEwxMk1OQiAqLworI2RlZmluZSBXTTg5OTFfTDEyTU5CX0JJVAkJCTUKKyNkZWZpbmUgV004OTkxX0wxMk1OQlNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTDEyTU5CU1QgKi8KKyNkZWZpbmUgV004OTkxX0wxMk1OQlNUX0JJVAkJCTQKKyNkZWZpbmUgV004OTkxX0xEQlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogTERCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkxX0xEQlZPTF9TSElGVAkJCTAKKworLyoKKyAqIFI0MiAoMHgyQSkgLSBJbnB1dCBNaXhlcjQKKyAqLworI2RlZmluZSBXTTg5OTFfUjM0TU5CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSMzRNTkIgKi8KKyNkZWZpbmUgV004OTkxX1IzNE1OQl9CSVQJCQk4CisjZGVmaW5lIFdNODk5MV9SMzRNTkJTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFIzNE1OQlNUICovCisjZGVmaW5lIFdNODk5MV9SMzRNTkJTVF9CSVQJCQk3CisjZGVmaW5lIFdNODk5MV9SMTJNTkIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFIxMk1OQiAqLworI2RlZmluZSBXTTg5OTFfUjEyTU5CX0JJVAkJCTUKKyNkZWZpbmUgV004OTkxX1IxMk1OQlNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUjEyTU5CU1QgKi8KKyNkZWZpbmUgV004OTkxX1IxMk1OQlNUX0JJVAkJCTQKKyNkZWZpbmUgV004OTkxX1JEQlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogUkRCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkxX1JEQlZPTF9TSElGVAkJCTAKKworLyoKKyAqIFI0MyAoMHgyQikgLSBJbnB1dCBNaXhlcjUKKyAqLworI2RlZmluZSBXTTg5OTFfTEkyQlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNyAgLyogTEkyQlZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5MV9MSTJCVk9MX1NISUZUCQkJNgorI2RlZmluZSBXTTg5OTFfTFI0QlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNyAgLyogTFI0QlZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5MV9MUjRCVk9MX1NISUZUCQkJMworI2RlZmluZSBXTTg5OTFfTEw0QlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNyAgLyogTEw0QlZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5MV9MTDRCVk9MX1NISUZUCQkJMAorCisvKgorICogUjQ0ICgweDJDKSAtIElucHV0IE1peGVyNgorICovCisjZGVmaW5lIFdNODk5MV9SSTJCVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA3ICAvKiBSSTJCVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkxX1JJMkJWT0xfU0hJRlQJCQk2CisjZGVmaW5lIFdNODk5MV9STDRCVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA3ICAvKiBSTDRCVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkxX1JMNEJWT0xfU0hJRlQJCQkzCisjZGVmaW5lIFdNODk5MV9SUjRCVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA3ICAvKiBSUjRCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkxX1JSNEJWT0xfU0hJRlQJCQkwCisKKy8qCisgKiBSNDUgKDB4MkQpIC0gT3V0cHV0IE1peGVyMQorICovCisjZGVmaW5lIFdNODk5MV9MUkJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExSQkxPICovCisjZGVmaW5lIFdNODk5MV9MUkJMT19CSVQJCQk3CisjZGVmaW5lIFdNODk5MV9MTEJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExMQkxPICovCisjZGVmaW5lIFdNODk5MV9MTEJMT19CSVQJCQk2CisjZGVmaW5lIFdNODk5MV9MUkkzTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExSSTNMTyAqLworI2RlZmluZSBXTTg5OTFfTFJJM0xPX0JJVAkJCTUKKyNkZWZpbmUgV004OTkxX0xMSTNMTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTExJM0xPICovCisjZGVmaW5lIFdNODk5MV9MTEkzTE9fQklUCQkJNAorI2RlZmluZSBXTTg5OTFfTFIxMkxPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMUjEyTE8gKi8KKyNkZWZpbmUgV004OTkxX0xSMTJMT19CSVQJCQkzCisjZGVmaW5lIFdNODk5MV9MTDEyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExMMTJMTyAqLworI2RlZmluZSBXTTg5OTFfTEwxMkxPX0JJVAkJCTIKKyNkZWZpbmUgV004OTkxX0xETE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERMTyAqLworI2RlZmluZSBXTTg5OTFfTERMT19CSVQJCQkJMAorCisvKgorICogUjQ2ICgweDJFKSAtIE91dHB1dCBNaXhlcjIKKyAqLworI2RlZmluZSBXTTg5OTFfUkxCUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTEJSTyAqLworI2RlZmluZSBXTTg5OTFfUkxCUk9fQklUCQkJNworI2RlZmluZSBXTTg5OTFfUlJCUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSUkJSTyAqLworI2RlZmluZSBXTTg5OTFfUlJCUk9fQklUCQkJNgorI2RlZmluZSBXTTg5OTFfUkxJM1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBSTEkzUk8gKi8KKyNkZWZpbmUgV004OTkxX1JMSTNST19CSVQJCQk1CisjZGVmaW5lIFdNODk5MV9SUkkzUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJSSTNSTyAqLworI2RlZmluZSBXTTg5OTFfUlJJM1JPX0JJVAkJCTQKKyNkZWZpbmUgV004OTkxX1JMMTJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUkwxMlJPICovCisjZGVmaW5lIFdNODk5MV9STDEyUk9fQklUCQkJMworI2RlZmluZSBXTTg5OTFfUlIxMlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBSUjEyUk8gKi8KKyNkZWZpbmUgV004OTkxX1JSMTJST19CSVQJCQkyCisjZGVmaW5lIFdNODk5MV9SRFJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJEUk8gKi8KKyNkZWZpbmUgV004OTkxX1JEUk9fQklUCQkJCTAKKworLyoKKyAqIFI0NyAoMHgyRikgLSBPdXRwdXQgTWl4ZXIzCisgKi8KKyNkZWZpbmUgV004OTkxX0xMSTNMT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDcgIC8qIExMSTNMT1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5MV9MTEkzTE9WT0xfU0hJRlQJCQk2CisjZGVmaW5lIFdNODk5MV9MUjEyTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDA3ICAvKiBMUjEyTE9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTFfTFIxMkxPVk9MX1NISUZUCQkJMworI2RlZmluZSBXTTg5OTFfTEwxMkxPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwNyAgLyogTEwxMkxPVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkxX0xMMTJMT1ZPTF9TSElGVAkJCTAKKworLyoKKyAqIFI0OCAoMHgzMCkgLSBPdXRwdXQgTWl4ZXI0CisgKi8KKyNkZWZpbmUgV004OTkxX1JSSTNST1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDcgIC8qIFJSSTNST1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5MV9SUkkzUk9WT0xfU0hJRlQJCQk2CisjZGVmaW5lIFdNODk5MV9STDEyUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDA3ICAvKiBSTDEyUk9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTFfUkwxMlJPVk9MX1NISUZUCQkJMworI2RlZmluZSBXTTg5OTFfUlIxMlJPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwNyAgLyogUlIxMlJPVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkxX1JSMTJST1ZPTF9TSElGVAkJCTAKKworLyoKKyAqIFI0OSAoMHgzMSkgLSBPdXRwdXQgTWl4ZXI1CisgKi8KKyNkZWZpbmUgV004OTkxX0xSSTNMT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDcgIC8qIExSSTNMT1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5MV9MUkkzTE9WT0xfU0hJRlQJCQk2CisjZGVmaW5lIFdNODk5MV9MUkJMT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDA3ICAvKiBMUkJMT1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5MV9MUkJMT1ZPTF9TSElGVAkJCTMKKyNkZWZpbmUgV004OTkxX0xMQkxPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDcgIC8qIExMQkxPVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkxX0xMQkxPVk9MX1NISUZUCQkJMAorCisvKgorICogUjUwICgweDMyKSAtIE91dHB1dCBNaXhlcjYKKyAqLworI2RlZmluZSBXTTg5OTFfUkxJM1JPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwNyAgLyogUkxJM1JPVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkxX1JMSTNST1ZPTF9TSElGVAkJCTYKKyNkZWZpbmUgV004OTkxX1JMQlJPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDcgIC8qIFJMQlJPVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkxX1JMQlJPVk9MX1NISUZUCQkJMworI2RlZmluZSBXTTg5OTFfUlJCUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwNyAgLyogUlJCUk9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTFfUlJCUk9WT0xfU0hJRlQJCQkwCisKKy8qCisgKiBSNTEgKDB4MzMpIC0gT3V0My80IE1peGVyCisgKi8KKyNkZWZpbmUgV004OTkxX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4MCAgLyogVlNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODk5MV9MSTRPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJNE8zICovCisjZGVmaW5lIFdNODk5MV9MSTRPM19CSVQJCQk1CisjZGVmaW5lIFdNODk5MV9MUEdBTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExQR0FPMyAqLworI2RlZmluZSBXTTg5OTFfTFBHQU8zX0JJVAkJCTQKKyNkZWZpbmUgV004OTkxX1JJNE80ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogUkk0TzQgKi8KKyNkZWZpbmUgV004OTkxX1JJNE80X0JJVAkJCTEKKyNkZWZpbmUgV004OTkxX1JQR0FPNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUlBHQU80ICovCisjZGVmaW5lIFdNODk5MV9SUEdBTzRfQklUCQkJMAorLyoKKyAqIFI1MiAoMHgzNCkgLSBMaW5lIE1peGVyMQorICovCisjZGVmaW5lIFdNODk5MV9MTE9QR0FMT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExMT1BHQUxPTiAqLworI2RlZmluZSBXTTg5OTFfTExPUEdBTE9OX0JJVAkJCTYKKyNkZWZpbmUgV004OTkxX0xST1BHQUxPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTFJPUEdBTE9OICovCisjZGVmaW5lIFdNODk5MV9MUk9QR0FMT05fQklUCQkJNQorI2RlZmluZSBXTTg5OTFfTE9QTE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMT1BMT04gKi8KKyNkZWZpbmUgV004OTkxX0xPUExPTl9CSVQJCQk0CisjZGVmaW5lIFdNODk5MV9MUjEyTE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExSMTJMT1AgKi8KKyNkZWZpbmUgV004OTkxX0xSMTJMT1BfQklUCQkJMgorI2RlZmluZSBXTTg5OTFfTEwxMkxPUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMTDEyTE9QICovCisjZGVmaW5lIFdNODk5MV9MTDEyTE9QX0JJVAkJCTEKKyNkZWZpbmUgV004OTkxX0xMT1BHQUxPUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTExPUEdBTE9QICovCisjZGVmaW5lIFdNODk5MV9MTE9QR0FMT1BfQklUCQkJMAorLyoKKyAqIFI1MyAoMHgzNSkgLSBMaW5lIE1peGVyMgorICovCisjZGVmaW5lIFdNODk5MV9SUk9QR0FST04gICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJST1BHQVJPTiAqLworI2RlZmluZSBXTTg5OTFfUlJPUEdBUk9OX0JJVAkJCTYKKyNkZWZpbmUgV004OTkxX1JMT1BHQVJPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUkxPUEdBUk9OICovCisjZGVmaW5lIFdNODk5MV9STE9QR0FST05fQklUCQkJNQorI2RlZmluZSBXTTg5OTFfUk9QUk9OICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBST1BST04gKi8KKyNkZWZpbmUgV004OTkxX1JPUFJPTl9CSVQJCQk0CisjZGVmaW5lIFdNODk5MV9STDEyUk9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJMMTJST1AgKi8KKyNkZWZpbmUgV004OTkxX1JMMTJST1BfQklUCQkJMgorI2RlZmluZSBXTTg5OTFfUlIxMlJPUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBSUjEyUk9QICovCisjZGVmaW5lIFdNODk5MV9SUjEyUk9QX0JJVAkJCTEKKyNkZWZpbmUgV004OTkxX1JST1BHQVJPUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUlJPUEdBUk9QICovCisjZGVmaW5lIFdNODk5MV9SUk9QR0FST1BfQklUCQkJMAorCisvKgorICogUjU0ICgweDM2KSAtIFNwZWFrZXIgTWl4ZXIKKyAqLworI2RlZmluZSBXTTg5OTFfTEIyU1BLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMQjJTUEsgKi8KKyNkZWZpbmUgV004OTkxX0xCMlNQS19CSVQJCQk3CisjZGVmaW5lIFdNODk5MV9SQjJTUEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJCMlNQSyAqLworI2RlZmluZSBXTTg5OTFfUkIyU1BLX0JJVAkJCTYKKyNkZWZpbmUgV004OTkxX0xJMlNQSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTEkyU1BLICovCisjZGVmaW5lIFdNODk5MV9MSTJTUEtfQklUCQkJNQorI2RlZmluZSBXTTg5OTFfUkkyU1BLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBSSTJTUEsgKi8KKyNkZWZpbmUgV004OTkxX1JJMlNQS19CSVQJCQk0CisjZGVmaW5lIFdNODk5MV9MT1BHQVNQSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExPUEdBU1BLICovCisjZGVmaW5lIFdNODk5MV9MT1BHQVNQS19CSVQJCQkzCisjZGVmaW5lIFdNODk5MV9ST1BHQVNQSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJPUEdBU1BLICovCisjZGVmaW5lIFdNODk5MV9ST1BHQVNQS19CSVQJCQkyCisjZGVmaW5lIFdNODk5MV9MRFNQSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExEU1BLICovCisjZGVmaW5lIFdNODk5MV9MRFNQS19CSVQJCQkxCisjZGVmaW5lIFdNODk5MV9SRFNQSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJEU1BLICovCisjZGVmaW5lIFdNODk5MV9SRFNQS19CSVQJCQkwCisKKy8qCisgKiBSNTUgKDB4MzcpIC0gQWRkaXRpb25hbCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004OTkxX1ZST0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVlJPSSAqLworCisvKgorICogUjU2ICgweDM4KSAtIEFudGlQT1AxCisgKi8KKyNkZWZpbmUgV004OTkxX0RJU19MTElORSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRElTX0xMSU5FICovCisjZGVmaW5lIFdNODk5MV9ESVNfUkxJTkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERJU19STElORSAqLworI2RlZmluZSBXTTg5OTFfRElTX09VVDMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBESVNfT1VUMyAqLworI2RlZmluZSBXTTg5OTFfRElTX09VVDQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBESVNfT1VUNCAqLworI2RlZmluZSBXTTg5OTFfRElTX0xPVVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBESVNfTE9VVCAqLworI2RlZmluZSBXTTg5OTFfRElTX1JPVVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBESVNfUk9VVCAqLworCisvKgorICogUjU3ICgweDM5KSAtIEFudGlQT1AyCisgKi8KKyNkZWZpbmUgV004OTkxX1NPRlRTVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU09GVFNUICovCisjZGVmaW5lIFdNODk5MV9CVUZJT0VOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEJVRklPRU4gKi8KKyNkZWZpbmUgV004OTkxX0JVRkRDT1BFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQlVGRENPUEVOICovCisjZGVmaW5lIFdNODk5MV9QT0JDVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004OTkxX1ZNSURUT0cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVk1JRFRPRyAqLworCisvKgorICogUjU4ICgweDNBKSAtIE1JQ0JJQVMKKyAqLworI2RlZmluZSBXTTg5OTFfTUNEU0NUSF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMEMwICAvKiBNQ0RTQ1RIIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTkxX01DRFRIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAzOCAgLyogTUNEVEhSIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkxX01DRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUNEICovCisjZGVmaW5lIFdNODk5MV9NQlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1CU0VMICovCisKKy8qCisgKiBSNjAgKDB4M0MpIC0gUExMMQorICovCisjZGVmaW5lIFdNODk5MV9TRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNETSAqLworI2RlZmluZSBXTTg5OTFfUFJFU0NBTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBQUkVTQ0FMRSAqLworI2RlZmluZSBXTTg5OTFfUExMTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBQTExOIC0gWzM6MF0gKi8KKworLyoKKyAqIFI2MSAoMHgzRCkgLSBQTEwyCisgKi8KKyNkZWZpbmUgV004OTkxX1BMTEsxX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogUExMSzEgLSBbNzowXSAqLworCisvKgorICogUjYyICgweDNFKSAtIFBMTDMKKyAqLworI2RlZmluZSBXTTg5OTFfUExMSzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBQTExLMiAtIFs3OjBdICovCisKKy8qCisgKiBSNjMgKDB4M0YpIC0gSW50ZXJuYWwgRHJpdmVyIEJpdHMKKyAqLworI2RlZmluZSBXTTg5OTFfSU5NSVhMX1BXUl9CSVQJCQkwCisjZGVmaW5lIFdNODk5MV9BSU5MTVVYX1BXUl9CSVQJCQkxCisjZGVmaW5lIFdNODk5MV9JTk1JWFJfUFdSX0JJVAkJCTIKKyNkZWZpbmUgV004OTkxX0FJTlJNVVhfUFdSX0JJVAkJCTMKKworI2RlZmluZSBXTTg5OTFfTUNMS19ESVYgMAorI2RlZmluZSBXTTg5OTFfREFDQ0xLX0RJViAxCisjZGVmaW5lIFdNODk5MV9BRENDTEtfRElWIDIKKyNkZWZpbmUgV004OTkxX0JDTEtfRElWIDMKKworI2RlZmluZSBTT0NfV004OTlYX09VVFBHQV9TSU5HTEVfUl9UTFYoeG5hbWUsIHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0LFwKKwkJCQkJIHRsdl9hcnJheSkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCBcCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8XAorCQkgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSxcCisJLnRsdi5wID0gKHRsdl9hcnJheSksIFwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAorCS5nZXQgPSBzbmRfc29jX2dldF92b2xzdywgLnB1dCA9IHdtODk5eF9vdXRwZ2FfcHV0X3ZvbHN3X3Z1LCBcCisJLnByaXZhdGVfdmFsdWUgPSBTT0NfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0KSB9CisKKyNlbmRpZiAvKiBfV004OTkxX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCmluZGV4IDE4YzBkOWMuLjM3OWZhMjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJaW50IGZsbF9zcmM7CiB9OwogCi1zdGF0aWMgaW50IHdtODk5M192b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCB3bTg5OTNfdm9sYXRpbGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBXTTg5OTNfU09GVFdBUkVfUkVTRVQ6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC10YWJsZXMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LXRhYmxlcy5jCmluZGV4IDY4ZTliMDIuLmE4N2FkYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LXRhYmxlcy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LXRhYmxlcy5jCkBAIC02Miw4ICs2Miw4IEBACiAJeyAweDAwRkYsIDB4MDBGRiB9LCAvKiBSNTggICAgLSBNSUNCSUFTICovCiAJeyAweDAwMEYsIDB4MDAwRiB9LCAvKiBSNTkgICAgLSBMRE8gMSAqLwogCXsgMHgwMDA3LCAweDAwMDcgfSwgLyogUjYwICAgIC0gTERPIDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSNjEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFI2MiAqLwogCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzICovCiAJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQgKi8KIAl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NSAqLwpAQCAtMjA5LDkgKzIwOSw5IEBACiAJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA1ICovCiAJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA2ICovCiAJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEwICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMjA4ICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMjA5ICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMjEwICovCiAJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjExICovCiAJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEyICovCiAJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEzICovCkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCXsgMHgwM0MzLCAweDAzQzMgfSwgLyogUjE1NjkgIC0gU2lkZXRvbmUgKi8KIH07CiAKLWNvbnN0IF9fZGV2aW5pdGRhdGEgdTE2IHdtODk5NF9yZWdfZGVmYXVsdHNbV004OTk0X0NBQ0hFX1NJWkVdID0geworY29uc3QgdTE2IHdtODk5NF9yZWdfZGVmYXVsdHNbV004OTk0X0NBQ0hFX1NJWkVdID0gewogCTB4ODk5NCwgICAgIC8qIFIwICAgICAtIFNvZnR3YXJlIFJlc2V0ICovCiAJMHgwMDAwLCAgICAgLyogUjEgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KIAkweDYwMDAsICAgICAvKiBSMiAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICgyKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKaW5kZXggYzZjOTU4ZS4uM2RjNjRjOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCkBAIC0xMDIsOCArMTAyLDcgQEAKIAogCXdtODk1OF9taWNkZXRfY2IgamFja19jYjsKIAl2b2lkICpqYWNrX2NiX2RhdGE7Ci0JYm9vbCBqYWNrX2lzX21pYzsKLQlib29sIGphY2tfaXNfdmlkZW87CisJaW50IG1pY2RldF9pcnE7CiAKIAlpbnQgcmV2aXNpb247CiAJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGE7CkBAIC0xMTUsNyArMTE0LDcgQEAKIAl1bnNpZ25lZCBpbnQgYWlmMmNsa19kaXNhYmxlOjE7CiB9OwogCi1zdGF0aWMgaW50IHdtODk5NF9yZWFkYWJsZSh1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCB3bTg5OTRfcmVhZGFibGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBXTTg5OTRfR1BJT18xOgpAQCAtMTQyLDcgKzE0MSw3IEBACiAJcmV0dXJuIHdtODk5NF9hY2Nlc3NfbWFza3NbcmVnXS5yZWFkYWJsZSAhPSAwOwogfQogCi1zdGF0aWMgaW50IHdtODk5NF92b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCB3bTg5OTRfdm9sYXRpbGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCWlmIChyZWcgPj0gV004OTk0X0NBQ0hFX1NJWkUpCiAJCXJldHVybiAxOwpAQCAtMTcwLDcgKzE2OSw3IEBACiAKIAlCVUdfT04ocmVnID4gV004OTk0X01BWF9SRUdJU1RFUik7CiAKLQlpZiAoIXdtODk5NF92b2xhdGlsZShyZWcpKSB7CisJaWYgKCF3bTg5OTRfdm9sYXRpbGUoY29kZWMsIHJlZykpIHsKIAkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCWRldl9lcnIoY29kZWMtPmRldiwgIkNhY2hlIHdyaXRlIHRvICV4IGZhaWxlZDogJWRcbiIsCkBAIC0xODgsNyArMTg3LDcgQEAKIAogCUJVR19PTihyZWcgPiBXTTg5OTRfTUFYX1JFR0lTVEVSKTsKIAotCWlmICghd204OTk0X3ZvbGF0aWxlKHJlZykgJiYgd204OTk0X3JlYWRhYmxlKHJlZykgJiYKKwlpZiAoIXdtODk5NF92b2xhdGlsZShjb2RlYywgcmVnKSAmJiB3bTg5OTRfcmVhZGFibGUoY29kZWMsIHJlZykgJiYKIAkgICAgcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpIHsKIAkJcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCByZWcsICZ2YWwpOwogCQlpZiAocmV0ID49IDApCkBAIC01MjksNyArNTI4LDcgQEAKIAkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9c25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgYmxvY2sgPSB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfYmxvY2soa2NvbnRyb2wtPmlkLm5hbWUpOwogCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODk5NC0+cmV0dW5lX21vYmlsZV9jZmdbYmxvY2tdOwpAQCAtMTEwMyw2ICsxMTAyLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWljYmlhc19ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlsYXRlX2VuYWJsZV9ldih3LCBrY29udHJvbCwgZXZlbnQpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRhY19ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewpAQCAtMTQ0MCw2ICsxNDQ2LDEwIEBACiBTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUMyREFUIiksCiBTTkRfU09DX0RBUE1fSU5QVVQoIkNsb2NrIiksCiAKK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCSUFTIiwgV004OTk0X01JQ0JJQVMsIDIsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJNSUNCSUFTIFN1cHBseSIsIDEsIFNORF9TT0NfTk9QTSwgMCwgMCwgbWljYmlhc19ldiwKKwkJICAgICAgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorCiBTTkRfU09DX0RBUE1fU1VQUExZKCJDTEtfU1lTIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBjbGtfc3lzX2V2ZW50LAogCQkgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAogCkBAIC0xNzU1LDYgKzE3NjUsOCBAQAogCXsgIkFJRjJEQUNEQVQiLCBOVUxMLCAiQUlGMURBQ0RBVCIgfSwKIAl7ICJBSUYxQURDREFUIiwgTlVMTCwgIkFJRjJBRENEQVQiIH0sCiAJeyAiQUlGMkFEQ0RBVCIsIE5VTEwsICJBSUYxQURDREFUIiB9LAorCXsgIk1JQ0JJQVMiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJNSUNCSUFTIiwgTlVMTCwgIk1JQ0JJQVMgU3VwcGx5IiB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk0X2ludGVyY29uW10gPSB7CkBAIC0yODgzLDYgKzI4OTUsMTMgQEAKIAllbHNlCiAJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKHdtODk5NC0+Y29kZWMsIHdtODk5NF9lcV9jb250cm9scywKIAkJCQkgICAgIEFSUkFZX1NJWkUod204OTk0X2VxX2NvbnRyb2xzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGF0YS0+bWljYmlhcyk7IGkrKykgeworCQlpZiAocGRhdGEtPm1pY2JpYXNbaV0pIHsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk1OF9NSUNCSUFTMSArIGksCisJCQkJcGRhdGEtPm1pY2JpYXNbaV0gJiAweGZmZmYpOworCQl9CisJfQogfQogCiAvKioKQEAgLTI5OTMsNDYgKzMwMTIsMTggQEAKIAlpbnQgcmVwb3J0ID0gMDsKIAogCS8qIElmIG5vdGhpbmcgcHJlc2VudCB0aGVuIGNsZWFyIG91ciBzdGF0dXNlcyAqLwotCWlmICghKHN0YXR1cyAmIFdNODk1OF9NSUNEX1NUUykpIHsKLQkJd204OTk0LT5qYWNrX2lzX3ZpZGVvID0gZmFsc2U7Ci0JCXdtODk5NC0+amFja19pc19taWMgPSBmYWxzZTsKKwlpZiAoIShzdGF0dXMgJiBXTTg5NThfTUlDRF9TVFMpKQogCQlnb3RvIGRvbmU7Ci0JfQogCi0JLyogQXNzdW1lIGFueXRoaW5nIG92ZXIgNDc1IG9obXMgaXMgYSBtaWNyb3Bob25lIGFuZCByZW1lbWJlcgotCSAqIHRoYXQgd2UndmUgc2VlbiBvbmUgKHNpbmNlIGJ1dHRvbnMgb3ZlcnJpZGUgaXQpICovCi0JaWYgKHN0YXR1cyAmIDB4NjAwKQotCQl3bTg5OTQtPmphY2tfaXNfbWljID0gdHJ1ZTsKLQlpZiAod204OTk0LT5qYWNrX2lzX21pYykKLQkJcmVwb3J0IHw9IFNORF9KQUNLX01JQ1JPUEhPTkU7Ci0KLQkvKiBWaWRlbyBoYXMgYW4gaW1wZWRlbmNlIG9mIGFwcHJveGltYXRlbHkgNzUgb2htczsgYXNzdW1lCi0JICogdGhpcyBpc24ndCB1c2VkIGFzIGEgYnV0dG9uIGFuZCByZW1lbWJlciBpdCBzaW5jZSBidXR0b25zCi0JICogb3ZlcnJpZGUgaXQuICovCi0JaWYgKHN0YXR1cyAmIDB4NDApCi0JCXdtODk5NC0+amFja19pc192aWRlbyA9IHRydWU7Ci0JaWYgKHdtODk5NC0+amFja19pc192aWRlbykKLQkJcmVwb3J0IHw9IFNORF9KQUNLX1ZJREVPT1VUOworCXJlcG9ydCA9IFNORF9KQUNLX01JQ1JPUEhPTkU7CiAKIAkvKiBFdmVyeXRoaW5nIGVsc2UgaXMgYnV0dG9uczsganVzdCBhc3NpZ24gc2xvdHMgKi8KLQlpZiAoc3RhdHVzICYgMHg0KQorCWlmIChzdGF0dXMgJiAweDFjMCkKIAkJcmVwb3J0IHw9IFNORF9KQUNLX0JUTl8wOwotCWlmIChzdGF0dXMgJiAweDgpCi0JCXJlcG9ydCB8PSBTTkRfSkFDS19CVE5fMTsKLQlpZiAoc3RhdHVzICYgMHgxMCkKLQkJcmVwb3J0IHw9IFNORF9KQUNLX0JUTl8yOwotCWlmIChzdGF0dXMgJiAweDIwKQotCQlyZXBvcnQgfD0gU05EX0pBQ0tfQlROXzM7Ci0JaWYgKHN0YXR1cyAmIDB4ODApCi0JCXJlcG9ydCB8PSBTTkRfSkFDS19CVE5fNDsKLQlpZiAoc3RhdHVzICYgMHgxMDApCi0JCXJlcG9ydCB8PSBTTkRfSkFDS19CVE5fNTsKIAogZG9uZToKIAlzbmRfc29jX2phY2tfcmVwb3J0KHdtODk5NC0+bWljZGV0WzBdLmphY2ssIHJlcG9ydCwKLQkJCSAgICBTTkRfSkFDS19CVE5fMCB8IFNORF9KQUNLX0JUTl8xIHwgU05EX0pBQ0tfQlROXzIgfAotCQkJICAgIFNORF9KQUNLX0JUTl8zIHwgU05EX0pBQ0tfQlROXzQgfCBTTkRfSkFDS19CVE5fNSB8Ci0JCQkgICAgU05EX0pBQ0tfTUlDUk9QSE9ORSB8IFNORF9KQUNLX1ZJREVPT1VUKTsKKwkJCSAgICBTTkRfSkFDS19CVE5fMCB8IFNORF9KQUNLX01JQ1JPUEhPTkUpOwogfQogCiAvKioKQEAgLTMxMzEsMTMgKzMxMjIsMTkgQEAKIAl3bTg5OTQtPnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShjb2RlYy0+ZGV2LT5wYXJlbnQpOwogCXdtODk5NC0+Y29kZWMgPSBjb2RlYzsKIAorCWlmICh3bTg5OTQtPnBkYXRhICYmIHdtODk5NC0+cGRhdGEtPm1pY2RldF9pcnEpCisJCXdtODk5NC0+bWljZGV0X2lycSA9IHdtODk5NC0+cGRhdGEtPm1pY2RldF9pcnE7CisJZWxzZSBpZiAod204OTk0LT5wZGF0YSAmJiB3bTg5OTQtPnBkYXRhLT5pcnFfYmFzZSkKKwkJd204OTk0LT5taWNkZXRfaXJxID0gd204OTk0LT5wZGF0YS0+aXJxX2Jhc2UgKworCQkJCSAgICAgV004OTk0X0lSUV9NSUMxX0RFVDsKKwogCXBtX3J1bnRpbWVfZW5hYmxlKGNvZGVjLT5kZXYpOwogCXBtX3J1bnRpbWVfcmVzdW1lKGNvZGVjLT5kZXYpOwogCiAJLyogUmVhZCBvdXIgY3VycmVudCBzdGF0dXMgYmFjayBmcm9tIHRoZSBjaGlwIC0gd2UgZG9uJ3Qgd2FudCB0bwogCSAqIHJlc2V0IGFzIHRoaXMgbWF5IGludGVyZmVyZSB3aXRoIHRoZSBHUElPIG9yIExETyBvcGVyYXRpb24uICovCiAJZm9yIChpID0gMDsgaSA8IFdNODk5NF9DQUNIRV9TSVpFOyBpKyspIHsKLQkJaWYgKCF3bTg5OTRfcmVhZGFibGUoaSkgfHwgd204OTk0X3ZvbGF0aWxlKGkpKQorCQlpZiAoIXdtODk5NF9yZWFkYWJsZShjb2RlYywgaSkgfHwgd204OTk0X3ZvbGF0aWxlKGNvZGVjLCBpKSkKIAkJCWNvbnRpbnVlOwogCiAJCXJldCA9IHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCBpKTsKQEAgLTMxNzksMTQgKzMxNzYsMTcgQEAKIAogCXN3aXRjaCAoY29udHJvbC0+dHlwZSkgewogCWNhc2UgV004OTk0OgotCQlyZXQgPSB3bTg5OTRfcmVxdWVzdF9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwKLQkJCQkJIFdNODk5NF9JUlFfTUlDMV9ERVQsCi0JCQkJCSB3bTg5OTRfbWljX2lycSwgIk1pYyAxIGRldGVjdCIsCi0JCQkJCSB3bTg5OTQpOwotCQlpZiAocmV0ICE9IDApCi0JCQlkZXZfd2Fybihjb2RlYy0+ZGV2LAotCQkJCSAiRmFpbGVkIHRvIHJlcXVlc3QgTWljMSBkZXRlY3QgSVJROiAlZFxuIiwKLQkJCQkgcmV0KTsKKwkJaWYgKHdtODk5NC0+bWljZGV0X2lycSkgeworCQkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod204OTk0LT5taWNkZXRfaXJxLCBOVUxMLAorCQkJCQkJICAgd204OTk0X21pY19pcnEsCisJCQkJCQkgICBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJCQkJICAgIk1pYzEgZGV0ZWN0IiwKKwkJCQkJCSAgIHdtODk5NCk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJZGV2X3dhcm4oY29kZWMtPmRldiwKKwkJCQkJICJGYWlsZWQgdG8gcmVxdWVzdCBNaWMxIGRldGVjdCBJUlE6ICVkXG4iLAorCQkJCQkgcmV0KTsKKwkJfQogCiAJCXJldCA9IHdtODk5NF9yZXF1ZXN0X2lycShjb2RlYy0+Y29udHJvbF9kYXRhLAogCQkJCQkgV004OTk0X0lSUV9NSUMxX1NIUlQsCkBAIC0zMjE3LDE1ICszMjE3LDE3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBXTTg5NTg6Ci0JCXJldCA9IHdtODk5NF9yZXF1ZXN0X2lycShjb2RlYy0+Y29udHJvbF9kYXRhLAotCQkJCQkgV004OTk0X0lSUV9NSUMxX0RFVCwKLQkJCQkJIHdtODk1OF9taWNfaXJxLCAiTWljIGRldGVjdCIsCi0JCQkJCSB3bTg5OTQpOwotCQlpZiAocmV0ICE9IDApCi0JCQlkZXZfd2Fybihjb2RlYy0+ZGV2LAotCQkJCSAiRmFpbGVkIHRvIHJlcXVlc3QgTWljIGRldGVjdCBJUlE6ICVkXG4iLAotCQkJCSByZXQpOwotCQlicmVhazsKKwkJaWYgKHdtODk5NC0+bWljZGV0X2lycSkgeworCQkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod204OTk0LT5taWNkZXRfaXJxLCBOVUxMLAorCQkJCQkJICAgd204OTU4X21pY19pcnEsCisJCQkJCQkgICBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJCQkJICAgIk1pYyBkZXRlY3QiLAorCQkJCQkJICAgd204OTk0KTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlkZXZfd2Fybihjb2RlYy0+ZGV2LAorCQkJCQkgIkZhaWxlZCB0byByZXF1ZXN0IE1pYyBkZXRlY3QgSVJROiAlZFxuIiwKKwkJCQkJIHJldCk7CisJCX0KIAl9CiAKIAkvKiBSZW1lbWJlciBpZiBBSUZuTFJDTEsgaXMgY29uZmlndXJlZCBhcyBhIEdQSU8uICBUaGlzIHNob3VsZCBiZQpAQCAtMzM2OSw3ICszMzcxLDggQEAKIAl3bTg5OTRfZnJlZV9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0lSUV9NSUMyX1NIUlQsIHdtODk5NCk7CiAJd204OTk0X2ZyZWVfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9JUlFfTUlDMl9ERVQsIHdtODk5NCk7CiAJd204OTk0X2ZyZWVfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9JUlFfTUlDMV9TSFJULCB3bTg5OTQpOwotCXdtODk5NF9mcmVlX2lycShjb2RlYy0+Y29udHJvbF9kYXRhLCBXTTg5OTRfSVJRX01JQzFfREVULCB3bTg5OTQpOworCWlmICh3bTg5OTQtPm1pY2RldF9pcnEpCisJCWZyZWVfaXJxKHdtODk5NC0+bWljZGV0X2lycSwgd204OTk0KTsKIGVycjoKIAlrZnJlZSh3bTg5OTQpOwogCXJldHVybiByZXQ7CkBAIC0zMzg2LDggKzMzODksOCBAQAogCiAJc3dpdGNoIChjb250cm9sLT50eXBlKSB7CiAJY2FzZSBXTTg5OTQ6Ci0JCXdtODk5NF9mcmVlX2lycShjb2RlYy0+Y29udHJvbF9kYXRhLCBXTTg5OTRfSVJRX01JQzJfU0hSVCwKLQkJCQl3bTg5OTQpOworCQlpZiAod204OTk0LT5taWNkZXRfaXJxKQorCQkJZnJlZV9pcnEod204OTk0LT5taWNkZXRfaXJxLCB3bTg5OTQpOwogCQl3bTg5OTRfZnJlZV9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0lSUV9NSUMyX0RFVCwKIAkJCQl3bTg5OTQpOwogCQl3bTg5OTRfZnJlZV9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0lSUV9NSUMxX1NIUlQsCkBAIC0zMzk3LDggKzM0MDAsOCBAQAogCQlicmVhazsKIAogCWNhc2UgV004OTU4OgotCQl3bTg5OTRfZnJlZV9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0lSUV9NSUMxX0RFVCwKLQkJCQl3bTg5OTQpOworCQlpZiAod204OTk0LT5taWNkZXRfaXJxKQorCQkJZnJlZV9pcnEod204OTk0LT5taWNkZXRfaXJxLCB3bTg5OTQpOwogCQlicmVhazsKIAl9CiAJa2ZyZWUod204OTk0LT5yZXR1bmVfbW9iaWxlX3RleHRzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5oCmluZGV4IDBjMzU1YmYuLjk5OWI4ODUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaApAQCAtNDMsNiArNDMsNiBAQAogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCB3bTg5OTRfYWNjZXNzX21hc2sgd204OTk0X2FjY2Vzc19tYXNrc1tXTTg5OTRfQ0FDSEVfU0laRV07Ci1leHRlcm4gY29uc3QgX19kZXZpbml0ZGF0YSAgdTE2IHdtODk5NF9yZWdfZGVmYXVsdHNbV004OTk0X0NBQ0hFX1NJWkVdOworZXh0ZXJuIGNvbnN0IHUxNiB3bTg5OTRfcmVnX2RlZmF1bHRzW1dNODk5NF9DQUNIRV9TSVpFXTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYwppbmRleCA2MDhjODRjLi42N2VhYWVjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMzAsNiArMzEsMTggQEAKIAogI2luY2x1ZGUgIndtODk5NS5oIgogCisjZGVmaW5lIFdNODk5NV9OVU1fU1VQUExJRVMgOAorc3RhdGljIGNvbnN0IGNoYXIgKndtODk5NV9zdXBwbHlfbmFtZXNbV004OTk1X05VTV9TVVBQTElFU10gPSB7CisJIkRDVkREIiwKKwkiREJWREQxIiwKKwkiREJWREQyIiwKKwkiREJWREQzIiwKKwkiQVZERDEiLAorCSJBVkREMiIsCisJIkNQVkREIiwKKwkiTUlDVkREIgorfTsKKwogc3RhdGljIGNvbnN0IHUxNiB3bTg5OTVfcmVnX2RlZnNbV004OTk1X01BWF9SRUdJU1RFUiArIDFdID0gewogCVswXSAgICAgPSAweDg5OTUsIFs1XSAgICAgPSAweDAxMDAsIFsxNl0gICAgPSAweDAwMGIsIFsxN10gICAgPSAweDAwMGIsCiAJWzI0XSAgICA9IDB4MDJjMCwgWzI1XSAgICA9IDB4MDJjMCwgWzI2XSAgICA9IDB4MDJjMCwgWzI3XSAgICA9IDB4MDJjMCwKQEAgLTEyNiw4ICsxMzksMzcgQEAKIAlpbnQgbWNsa1syXTsKIAlpbnQgYWlmY2xrWzJdOwogCXN0cnVjdCBmbGxfY29uZmlnIGZsbFsyXSwgZmxsX3N1c3BlbmRbMl07CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbV004OTk1X05VTV9TVVBQTElFU107CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRpc2FibGVfbmJbV004OTk1X05VTV9TVVBQTElFU107CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogfTsKIAorLyoKKyAqIFdlIGNhbid0IHVzZSB0aGUgc2FtZSBub3RpZmllciBibG9jayBmb3IgbW9yZSB0aGFuIG9uZSBzdXBwbHkgYW5kCisgKiB0aGVyZSdzIG5vIHdheSBJIGNhbiBzZWUgdG8gZ2V0IGZyb20gYSBjYWxsYmFjayB0byB0aGUgY2FsbGVyCisgKiBleGNlcHQgY29udGFpbmVyX29mKCkuCisgKi8KKyNkZWZpbmUgV004OTk1X1JFR1VMQVRPUl9FVkVOVChuKSBcCitzdGF0aWMgaW50IHdtODk5NV9yZWd1bGF0b3JfZXZlbnRfIyNuKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIFwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKSAgICBcCit7IFwKKwlzdHJ1Y3Qgd204OTk1X3ByaXYgKndtODk5NSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHdtODk5NV9wcml2LCBcCisJCQkJICAgICBkaXNhYmxlX25iW25dKTsgXAorCWlmIChldmVudCAmIFJFR1VMQVRPUl9FVkVOVF9ESVNBQkxFKSB7IFwKKwkJd204OTk1LT5jb2RlYy0+Y2FjaGVfc3luYyA9IDE7IFwKKwl9IFwKKwlyZXR1cm4gMDsgXAorfQorCitXTTg5OTVfUkVHVUxBVE9SX0VWRU5UKDApCitXTTg5OTVfUkVHVUxBVE9SX0VWRU5UKDEpCitXTTg5OTVfUkVHVUxBVE9SX0VWRU5UKDIpCitXTTg5OTVfUkVHVUxBVE9SX0VWRU5UKDMpCitXTTg5OTVfUkVHVUxBVE9SX0VWRU5UKDQpCitXTTg5OTVfUkVHVUxBVE9SX0VWRU5UKDUpCitXTTg5OTVfUkVHVUxBVE9SX0VWRU5UKDYpCitXTTg5OTVfUkVHVUxBVE9SX0VWRU5UKDcpCisKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTcyMDAsIDc1LCAxKTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbjFscl9wZ2FfdGx2LCAtMTY1MCwgMTUwLCAwKTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbjFsX2Jvb3N0X3RsdiwgMCwgNjAwLCAwKTsKQEAgLTkwOSw3ICs5NTEsNyBAQAogCXsgIlNQSzJSIiwgTlVMTCwgIlNQSzJSIERyaXZlciIgfQogfTsKIAotc3RhdGljIGludCB3bTg5OTVfdm9sYXRpbGUodW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbnQgd204OTk1X3ZvbGF0aWxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKIHsKIAkvKiBvdXQgb2YgYm91bmRzIHJlZ2lzdGVycyBhcmUgZ2VuZXJhbGx5IGNvbnNpZGVyZWQKIAkgKiB2b2xhdGlsZSB0byBzdXBwb3J0IHJlZ2lzdGVyIGJhbmtzIHRoYXQgYXJlIHBhcnRpYWxseQpAQCAtMTQ4Myw2ICsxNTI1LDExIEBACiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk5NS0+c3VwcGxpZXMpLAorCQkJCQkJICAgIHdtODk5NS0+c3VwcGxpZXMpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCiAJCQlyZXQgPSBzbmRfc29jX2NhY2hlX3N5bmMoY29kZWMpOwogCQkJaWYgKHJldCkgewogCQkJCWRldl9lcnIoY29kZWMtPmRldiwKQEAgLTE0OTIsMTIgKzE1MzksMTMgQEAKIAogCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfMSwKIAkJCQkJICAgIFdNODk5NV9CR19FTkFfTUFTSywgV004OTk1X0JHX0VOQSk7Ci0KIAkJfQogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6CiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzEsCiAJCQkJICAgIFdNODk5NV9CR19FTkFfTUFTSywgMCk7CisJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTUtPnN1cHBsaWVzKSwKKwkJCQkgICAgICAgd204OTk1LT5zdXBwbGllcyk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTUzNiwxMCArMTU4NCwxMiBAQAogc3RhdGljIGludCB3bTg5OTVfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB3bTg5OTVfcHJpdiAqd204OTk1OworCWludCBpOwogCWludCByZXQ7CiAKIAljb2RlYy0+ZGFwbS5pZGxlX2JpYXNfb2ZmID0gMTsKIAl3bTg5OTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl3bTg5OTUtPmNvZGVjID0gY29kZWM7CiAKIAlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgMTYsIDE2LCB3bTg5OTUtPmNvbnRyb2xfdHlwZSk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE1NDcsMjEgKzE1OTcsNTggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTUtPnN1cHBsaWVzKTsgaSsrKQorCQl3bTg5OTUtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHdtODk5NV9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRSh3bTg5OTUtPnN1cHBsaWVzKSwKKwkJCQkgd204OTk1LT5zdXBwbGllcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJd204OTk1LT5kaXNhYmxlX25iWzBdLm5vdGlmaWVyX2NhbGwgPSB3bTg5OTVfcmVndWxhdG9yX2V2ZW50XzA7CisJd204OTk1LT5kaXNhYmxlX25iWzFdLm5vdGlmaWVyX2NhbGwgPSB3bTg5OTVfcmVndWxhdG9yX2V2ZW50XzE7CisJd204OTk1LT5kaXNhYmxlX25iWzJdLm5vdGlmaWVyX2NhbGwgPSB3bTg5OTVfcmVndWxhdG9yX2V2ZW50XzI7CisJd204OTk1LT5kaXNhYmxlX25iWzNdLm5vdGlmaWVyX2NhbGwgPSB3bTg5OTVfcmVndWxhdG9yX2V2ZW50XzM7CisJd204OTk1LT5kaXNhYmxlX25iWzRdLm5vdGlmaWVyX2NhbGwgPSB3bTg5OTVfcmVndWxhdG9yX2V2ZW50XzQ7CisJd204OTk1LT5kaXNhYmxlX25iWzVdLm5vdGlmaWVyX2NhbGwgPSB3bTg5OTVfcmVndWxhdG9yX2V2ZW50XzU7CisJd204OTk1LT5kaXNhYmxlX25iWzZdLm5vdGlmaWVyX2NhbGwgPSB3bTg5OTVfcmVndWxhdG9yX2V2ZW50XzY7CisJd204OTk1LT5kaXNhYmxlX25iWzddLm5vdGlmaWVyX2NhbGwgPSB3bTg5OTVfcmVndWxhdG9yX2V2ZW50Xzc7CisKKwkvKiBUaGlzIHNob3VsZCByZWFsbHkgYmUgbW92ZWQgaW50byB0aGUgcmVndWxhdG9yIGNvcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTUtPnN1cHBsaWVzKTsgaSsrKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9yZWdpc3Rlcl9ub3RpZmllcih3bTg5OTUtPnN1cHBsaWVzW2ldLmNvbnN1bWVyLAorCQkJCQkJICAmd204OTk1LT5kaXNhYmxlX25iW2ldKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yIG5vdGlmaWVyOiAlZFxuIiwKKwkJCQlyZXQpOworCQl9CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTk1LT5zdXBwbGllcyksCisJCQkJICAgIHdtODk5NS0+c3VwcGxpZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ19nZXQ7CisJfQorCiAJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTVfU09GVFdBUkVfUkVTRVQpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIGRldmljZSBJRDogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3JlZ19lbmFibGU7CiAJfQogCiAJaWYgKHJldCAhPSAweDg5OTUpIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBkZXZpY2UgSUQ6ICUjeFxuIiwgcmV0KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlZ19lbmFibGU7CiAJfQogCiAJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTk1X1NPRlRXQVJFX1JFU0VULCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXQ6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycl9yZWdfZW5hYmxlOwogCX0KIAogCXdtODk5NV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwpAQCAtMTU5Niw2ICsxNjgzLDEyIEBACiAJCQkJQVJSQVlfU0laRSh3bTg5OTVfaW50ZXJjb24pKTsKIAogCXJldHVybiAwOworCitlcnJfcmVnX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTk1LT5zdXBwbGllcyksIHdtODk5NS0+c3VwcGxpZXMpOworZXJyX3JlZ19nZXQ6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODk5NS0+c3VwcGxpZXMpLCB3bTg5OTUtPnN1cHBsaWVzKTsKKwlyZXR1cm4gcmV0OwogfQogCiAjZGVmaW5lIFdNODk5NV9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTkwODEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKaW5kZXggY2NlNzA0Yy4uNTVjZGYyOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTkwODEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCkBAIC0xNjcsMTAgKzE2NywxMCBAQAogCWludCBmbGxfZnJlZjsKIAlpbnQgZmxsX2ZvdXQ7CiAJaW50IHRkbV93aWR0aDsKLQlzdHJ1Y3Qgd205MDgxX3JldHVuZV9tb2JpbGVfY29uZmlnICpyZXR1bmU7CisJc3RydWN0IHdtOTA4MV9wZGF0YSBwZGF0YTsKIH07CiAKLXN0YXRpYyBpbnQgd205MDgxX3ZvbGF0aWxlX3JlZ2lzdGVyKHVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW50IHdtOTA4MV92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFdNOTA4MV9TT0ZUV0FSRV9SRVNFVDoKQEAgLTM4OSwyNyArMzg5LDYgQEAKIFNPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgV005MDgxX0FOQUxPR1VFX01JWEVSLCA0LCAxLCAwKSwKIH07CiAKLXN0YXRpYyBpbnQgc3BlYWtlcl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKLQkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOwotCXVuc2lnbmVkIGludCByZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9QT1dFUl9NQU5BR0VNRU5UKTsKLQotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKLQkJcmVnIHw9IFdNOTA4MV9TUEtfRU5BOwotCQlicmVhazsKLQotCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6Ci0JCXJlZyAmPSB+V005MDgxX1NQS19FTkE7Ci0JCWJyZWFrOwotCX0KLQotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9QT1dFUl9NQU5BR0VNRU5ULCByZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0cnVjdCBfZmxsX2RpdiB7CiAJdTE2IGZsbF9mcmF0aW87CiAJdTE2IGZsbF9vdXRkaXY7CkBAIC03NDcsOSArNzI2LDggQEAKIAogU05EX1NPQ19EQVBNX1BHQSgiTElORU9VVCBQR0EiLCBXTTkwODFfUE9XRVJfTUFOQUdFTUVOVCwgNCwgMCwgTlVMTCwgMCksCiAKLVNORF9TT0NfREFQTV9QR0FfRSgiU3BlYWtlciBQR0EiLCBXTTkwODFfUE9XRVJfTUFOQUdFTUVOVCwgMiwgMCwgTlVMTCwgMCwKLQkJICAgc3BlYWtlcl9ldmVudCwKLQkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorU05EX1NPQ19EQVBNX1BHQSgiU3BlYWtlciBQR0EiLCBXTTkwODFfUE9XRVJfTUFOQUdFTUVOVCwgMiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJTcGVha2VyIiwgV005MDgxX1BPV0VSX01BTkFHRU1FTlQsIDEsIDAsIE5VTEwsIDApLAogCiBTTkRfU09DX0RBUE1fT1VUUFVUKCJMSU5FT1VUIiksCiBTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtOIiksCkBAIC03NjIsNyArNzQwLDcgQEAKIH07CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fcGF0aHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtOTA4MV9hdWRpb19wYXRoc1tdID0gewogCXsgIkRBQyIsIE5VTEwsICJDTEtfU1lTIiB9LAogCXsgIkRBQyIsIE5VTEwsICJDTEtfRFNQIiB9LAogCkBAIC03ODAsOCArNzU4LDEwIEBACiAJeyAiU3BlYWtlciBQR0EiLCBOVUxMLCAiVE9DTEsiIH0sCiAJeyAiU3BlYWtlciBQR0EiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKIAotCXsgIlNQS04iLCBOVUxMLCAiU3BlYWtlciBQR0EiIH0sCi0JeyAiU1BLUCIsIE5VTEwsICJTcGVha2VyIFBHQSIgfSwKKwl7ICJTcGVha2VyIiwgTlVMTCwgIlNwZWFrZXIgUEdBIiB9LAorCisJeyAiU1BLTiIsIE5VTEwsICJTcGVha2VyIiB9LAorCXsgIlNQS1AiLCBOVUxMLCAiU3BlYWtlciIgfSwKIH07CiAKIHN0YXRpYyBpbnQgd205MDgxX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKQEAgLTEwODIsMjEgKzEwNjIsMjIgQEAKIAlhaWY0IHw9IHdtOTA4MS0+YmNsayAvIHdtOTA4MS0+ZnM7CiAKIAkvKiBBcHBseSBhIFJlVHVuZSBNb2JpbGUgY29uZmlndXJhdGlvbiBpZiBpdCdzIGluIHVzZSAqLwotCWlmICh3bTkwODEtPnJldHVuZSkgewotCQlzdHJ1Y3Qgd205MDgxX3JldHVuZV9tb2JpbGVfY29uZmlnICpyZXR1bmUgPSB3bTkwODEtPnJldHVuZTsKKwlpZiAod205MDgxLT5wZGF0YS5udW1fcmV0dW5lX2NvbmZpZ3MpIHsKKwkJc3RydWN0IHdtOTA4MV9wZGF0YSAqcGRhdGEgPSAmd205MDgxLT5wZGF0YTsKIAkJc3RydWN0IHdtOTA4MV9yZXR1bmVfbW9iaWxlX3NldHRpbmcgKnM7CiAJCWludCBlcTE7CiAKIAkJYmVzdCA9IDA7Ci0JCWJlc3RfdmFsID0gYWJzKHJldHVuZS0+Y29uZmlnc1swXS5yYXRlIC0gd205MDgxLT5mcyk7Ci0JCWZvciAoaSA9IDA7IGkgPCByZXR1bmUtPm51bV9jb25maWdzOyBpKyspIHsKLQkJCWN1cl92YWwgPSBhYnMocmV0dW5lLT5jb25maWdzW2ldLnJhdGUgLSB3bTkwODEtPmZzKTsKKwkJYmVzdF92YWwgPSBhYnMocGRhdGEtPnJldHVuZV9jb25maWdzWzBdLnJhdGUgLSB3bTkwODEtPmZzKTsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX2NvbmZpZ3M7IGkrKykgeworCQkJY3VyX3ZhbCA9IGFicyhwZGF0YS0+cmV0dW5lX2NvbmZpZ3NbaV0ucmF0ZSAtCisJCQkJICAgICAgd205MDgxLT5mcyk7CiAJCQlpZiAoY3VyX3ZhbCA8IGJlc3RfdmFsKSB7CiAJCQkJYmVzdF92YWwgPSBjdXJfdmFsOwogCQkJCWJlc3QgPSBpOwogCQkJfQogCQl9Ci0JCXMgPSAmcmV0dW5lLT5jb25maWdzW2Jlc3RdOworCQlzID0gJnBkYXRhLT5yZXR1bmVfY29uZmlnc1tiZXN0XTsKIAogCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJSZVR1bmUgTW9iaWxlICVzIHR1bmVkIGZvciAlZEh6XG4iLAogCQkJcy0+bmFtZSwgcy0+cmF0ZSk7CkBAIC0xMTM5LDEwICsxMTIwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bTkwODFfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKK3N0YXRpYyBpbnQgd205MDgxX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJICAgICBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXN0cnVjdCB3bTkwODFfcHJpdiAqd205MDgxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGNsa19pZCkgewpAQCAtMTIwNyw3ICsxMTg3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205MDgxX2RhaV9vcHMgPSB7CiAJLmh3X3BhcmFtcyA9IHdtOTA4MV9od19wYXJhbXMsCi0JLnNldF9zeXNjbGsgPSB3bTkwODFfc2V0X3N5c2NsaywKIAkuc2V0X2ZtdCA9IHdtOTA4MV9zZXRfZGFpX2ZtdCwKIAkuZGlnaXRhbF9tdXRlID0gd205MDgxX2RpZ2l0YWxfbXV0ZSwKIAkuc2V0X3RkbV9zbG90ID0gd205MDgxX3NldF90ZG1fc2xvdCwKQEAgLTEyMzEsNyArMTIxMCw2IEBACiBzdGF0aWMgaW50IHdtOTA4MV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHdtOTA4MV9wcml2ICp3bTkwODEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAl1MTYgcmVnOwogCkBAIC0xMjU1LDYgKzEyMzMsMTQgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlyZWcgPSAwOworCWlmICh3bTkwODEtPnBkYXRhLmlycV9oaWdoKQorCQlyZWcgfD0gV005MDgxX0lSUV9QT0w7CisJaWYgKCF3bTkwODEtPnBkYXRhLmlycV9jbW9zKQorCQlyZWcgfD0gV005MDgxX0lSUV9PUF9DVFJMOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNOTA4MV9JTlRFUlJVUFRfQ09OVFJPTCwKKwkJCSAgICBXTTkwODFfSVJRX1BPTCB8IFdNOTA4MV9JUlFfT1BfQ1RSTCwgcmVnKTsKKwogCXdtOTA4MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJLyogRW5hYmxlIHplcm8gY3Jvc3MgYnkgZGVmYXVsdCAqLwpAQCAtMTI2NiwxNyArMTI1MiwxMyBAQAogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtOTA4MV9zbmRfY29udHJvbHMsCiAJCQkgICAgIEFSUkFZX1NJWkUod205MDgxX3NuZF9jb250cm9scykpOwotCWlmICghd205MDgxLT5yZXR1bmUpIHsKKwlpZiAoIXdtOTA4MS0+cGRhdGEubnVtX3JldHVuZV9jb25maWdzKSB7CiAJCWRldl9kYmcoY29kZWMtPmRldiwKIAkJCSJObyBSZVR1bmUgTW9iaWxlIGRhdGEsIHVzaW5nIG5vcm1hbCBFUVxuIik7CiAJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTkwODFfZXFfY29udHJvbHMsCiAJCQkJICAgICBBUlJBWV9TSVpFKHdtOTA4MV9lcV9jb250cm9scykpOwogCX0KIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd205MDgxX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod205MDgxX2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX3BhdGhzLCBBUlJBWV9TSVpFKGF1ZGlvX3BhdGhzKSk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzIwLDExICsxMzAyLDE5IEBACiAJLnJlbW92ZSA9IAl3bTkwODFfcmVtb3ZlLAogCS5zdXNwZW5kID0Jd205MDgxX3N1c3BlbmQsCiAJLnJlc3VtZSA9CXdtOTA4MV9yZXN1bWUsCisKKwkuc2V0X3N5c2NsayA9IHdtOTA4MV9zZXRfc3lzY2xrLAogCS5zZXRfYmlhc19sZXZlbCA9IHdtOTA4MV9zZXRfYmlhc19sZXZlbCwKKwogCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod205MDgxX3JlZ19kZWZhdWx0cyksCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKIAkucmVnX2NhY2hlX2RlZmF1bHQgPSB3bTkwODFfcmVnX2RlZmF1bHRzLAogCS52b2xhdGlsZV9yZWdpc3RlciA9IHdtOTA4MV92b2xhdGlsZV9yZWdpc3RlciwKKworCS5kYXBtX3dpZGdldHMJICA9IHdtOTA4MV9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKHdtOTA4MV9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyAgICAgPSB3bTkwODFfYXVkaW9fcGF0aHMsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUod205MDgxX2F1ZGlvX3BhdGhzKSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCkBAIC0xMzQzLDggKzEzMzMsOCBAQAogCXdtOTA4MS0+Y29udHJvbF9kYXRhID0gaTJjOwogCiAJaWYgKGRldl9nZXRfcGxhdGRhdGEoJmkyYy0+ZGV2KSkKLQkJbWVtY3B5KCZ3bTkwODEtPnJldHVuZSwgZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpLAotCQkgICAgICAgc2l6ZW9mKHdtOTA4MS0+cmV0dW5lKSk7CisJCW1lbWNweSgmd205MDgxLT5wZGF0YSwgZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpLAorCQkgICAgICAgc2l6ZW9mKHdtOTA4MS0+cGRhdGEpKTsKIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2LAogCQkJJnNvY19jb2RlY19kZXZfd205MDgxLCAmd205MDgxX2RhaSwgMSk7CkBAIC0xMzY4LDcgKzEzNTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd205MDgxX2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAid205MDgxLWNvZGVjIiwKKwkJLm5hbWUgPSAid205MDgxIiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSAgICB3bTkwODFfaTJjX3Byb2JlLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTkwOTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDkwLmMKaW5kZXggYTc4OGM0Mi4uNGRlMTIyMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTkwOTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTA5MC5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAl2b2lkICpjb250cm9sX2RhdGE7CiB9OwogCi1zdGF0aWMgaW50IHdtOTA5MF92b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCB3bTkwOTBfdm9sYXRpbGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBXTTkwOTBfU09GVFdBUkVfUkVTRVQ6CkBAIC01MTgsNyArNTE4LDcgQEAKIAkJCWZvciAoaSA9IDE7IGkgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZTsgaSsrKSB7CiAJCQkJaWYgKHJlZ19jYWNoZVtpXSA9PSB3bTkwOTBfcmVnX2RlZmF1bHRzW2ldKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAod205MDkwX3ZvbGF0aWxlKGkpKQorCQkJCWlmICh3bTkwOTBfdm9sYXRpbGUoY29kZWMsIGkpKQogCQkJCQljb250aW51ZTsKIAogCQkJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHJlZ19jYWNoZVtpXSk7CkBAIC01NTEsNyArNTUxLDYgQEAKIHN0YXRpYyBpbnQgd205MDkwX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd205MDkwX3ByaXYgKndtOTA5MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAlpbnQgcmV0OwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHdtOTA5MC0+Y29udHJvbF9kYXRhOwpAQCAtNTc2LDIyICs1NzUsMzAgQEAKIAkvKiBDb25maWd1cmUgc29tZSBkZWZhdWx0czsgdGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IHdoZW4gd2UKIAkgKiBicmluZyB0aGUgYmlhcyB1cC4KIAkgKi8KLQlyZWdfY2FjaGVbV005MDkwX0lOMV9MSU5FX0lOUFVUX0FfVk9MVU1FXSB8PSBXTTkwOTBfSU4xX1ZVCi0JCXwgV005MDkwX0lOMUFfWkM7Ci0JcmVnX2NhY2hlW1dNOTA5MF9JTjFfTElORV9JTlBVVF9CX1ZPTFVNRV0gfD0gV005MDkwX0lOMV9WVQotCQl8IFdNOTA5MF9JTjFCX1pDOwotCXJlZ19jYWNoZVtXTTkwOTBfSU4yX0xJTkVfSU5QVVRfQV9WT0xVTUVdIHw9IFdNOTA5MF9JTjJfVlUKLQkJfCBXTTkwOTBfSU4yQV9aQzsKLQlyZWdfY2FjaGVbV005MDkwX0lOMl9MSU5FX0lOUFVUX0JfVk9MVU1FXSB8PSBXTTkwOTBfSU4yX1ZVCi0JCXwgV005MDkwX0lOMkJfWkM7Ci0JcmVnX2NhY2hlW1dNOTA5MF9TUEVBS0VSX1ZPTFVNRV9MRUZUXSB8PQotCQlXTTkwOTBfU1BLT1VUX1ZVIHwgV005MDkwX1NQS09VVExfWkM7Ci0JcmVnX2NhY2hlW1dNOTA5MF9MRUZUX09VVFBVVF9WT0xVTUVdIHw9Ci0JCVdNOTA5MF9IUE9VVDFfVlUgfCBXTTkwOTBfSFBPVVQxTF9aQzsKLQlyZWdfY2FjaGVbV005MDkwX1JJR0hUX09VVFBVVF9WT0xVTUVdIHw9Ci0JCVdNOTA5MF9IUE9VVDFfVlUgfCBXTTkwOTBfSFBPVVQxUl9aQzsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTkwOTBfSU4xX0xJTkVfSU5QVVRfQV9WT0xVTUUsCisJCQkgICAgV005MDkwX0lOMV9WVSB8IFdNOTA5MF9JTjFBX1pDLAorCQkJICAgIFdNOTA5MF9JTjFfVlUgfCBXTTkwOTBfSU4xQV9aQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV005MDkwX0lOMV9MSU5FX0lOUFVUX0JfVk9MVU1FLAorCQkJICAgIFdNOTA5MF9JTjFfVlUgfCBXTTkwOTBfSU4xQl9aQywKKwkJCSAgICBXTTkwOTBfSU4xX1ZVIHwgV005MDkwX0lOMUJfWkMpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNOTA5MF9JTjJfTElORV9JTlBVVF9BX1ZPTFVNRSwKKwkJCSAgICBXTTkwOTBfSU4yX1ZVIHwgV005MDkwX0lOMkFfWkMsCisJCQkgICAgV005MDkwX0lOMl9WVSB8IFdNOTA5MF9JTjJBX1pDKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTkwOTBfSU4yX0xJTkVfSU5QVVRfQl9WT0xVTUUsCisJCQkgICAgV005MDkwX0lOMl9WVSB8IFdNOTA5MF9JTjJCX1pDLAorCQkJICAgIFdNOTA5MF9JTjJfVlUgfCBXTTkwOTBfSU4yQl9aQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV005MDkwX1NQRUFLRVJfVk9MVU1FX0xFRlQsCisJCQkgICAgV005MDkwX1NQS09VVF9WVSB8IFdNOTA5MF9TUEtPVVRMX1pDLAorCQkJICAgIFdNOTA5MF9TUEtPVVRfVlUgfCBXTTkwOTBfU1BLT1VUTF9aQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV005MDkwX0xFRlRfT1VUUFVUX1ZPTFVNRSwKKwkJCSAgICBXTTkwOTBfSFBPVVQxX1ZVIHwgV005MDkwX0hQT1VUMUxfWkMsCisJCQkgICAgV005MDkwX0hQT1VUMV9WVSB8IFdNOTA5MF9IUE9VVDFMX1pDKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTkwOTBfUklHSFRfT1VUUFVUX1ZPTFVNRSwKKwkJCSAgICBXTTkwOTBfSFBPVVQxX1ZVIHwgV005MDkwX0hQT1VUMVJfWkMsCisJCQkgICAgV005MDkwX0hQT1VUMV9WVSB8IFdNOTA5MF9IUE9VVDFSX1pDKTsKIAotCXJlZ19jYWNoZVtXTTkwOTBfQ0xPQ0tJTkdfMV0gfD0gV005MDkwX1RPQ0xLX0VOQTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTkwOTBfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTkwOTBfVE9DTEtfRU5BLCBXTTkwOTBfVE9DTEtfRU5BKTsKIAogCXdtOTA5MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCmluZGV4IDUxNjg5MjcuLjdiNmIzYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCkBAIC04Miw3ICs4Miw4IEBACiAJfSB3aGlsZSAocmVnICYgb3AgJiYgY291bnQgPCA0MDApOwogCiAJaWYgKHJlZyAmIG9wKQotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgREMgU2Vydm9cbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgREMgU2Vydm8gJXhcbiIsCisJCQlvcCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwppbmRleCA5ZTBlNTY1Li5kMGQ2MGI4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKQEAgLTY1OCw3ICs2NTgsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpb2FyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwgKG1lbS0+ZW5kIC0gbWVtLT5zdGFydCkgKyAxLAorCWlvYXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSksCiAJCQkJICAgIHBkZXYtPm5hbWUpOwogCWlmICghaW9hcmVhKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1jQlNQIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOwpAQCAtNjk0LDIwICs2OTQsMjUgQEAKIAl9CiAJY2xrX2VuYWJsZShkZXYtPmNsayk7CiAKLQlkZXYtPmJhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhtZW0tPnN0YXJ0KTsKKwlkZXYtPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJaWYgKCFkZXYtPmJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX2NsazsKKwl9CiAKIAlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZG1hX2FkZHIgPQotCSAgICAoZG1hX2FkZHJfdCkoaW9fdjJwKGRldi0+YmFzZSkgKyBEQVZJTkNJX01DQlNQX0RYUl9SRUcpOworCSAgICAoZG1hX2FkZHJfdCkobWVtLT5zdGFydCArIERBVklOQ0lfTUNCU1BfRFhSX1JFRyk7CiAKIAlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5kbWFfYWRkciA9Ci0JICAgIChkbWFfYWRkcl90KShpb192MnAoZGV2LT5iYXNlKSArIERBVklOQ0lfTUNCU1BfRFJSX1JFRyk7CisJICAgIChkbWFfYWRkcl90KShtZW0tPnN0YXJ0ICsgREFWSU5DSV9NQ0JTUF9EUlJfUkVHKTsKIAogCS8qIGZpcnN0IFRYLCB0aGVuIFJYICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBETUEgcmVzb3VyY2VcbiIpOwogCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gZXJyX2ZyZWVfbWVtOworCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7CiAKQEAgLTcxNSw3ICs3MjAsNyBAQAogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIERNQSByZXNvdXJjZVxuIik7CiAJCXJldCA9IC1FTlhJTzsKLQkJZ290byBlcnJfZnJlZV9tZW07CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OwogCWRldi0+ZGV2ID0gJnBkZXYtPmRldjsKQEAgLTcyNCwxNCArNzI5LDE5IEBACiAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2LCAmZGF2aW5jaV9pMnNfZGFpKTsKIAlpZiAocmV0ICE9IDApCi0JCWdvdG8gZXJyX2ZyZWVfbWVtOworCQlnb3RvIGVycl9pb3VubWFwOwogCiAJcmV0dXJuIDA7CiAKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoZGV2LT5iYXNlKTsKK2Vycl9yZWxlYXNlX2NsazoKKwljbGtfZGlzYWJsZShkZXYtPmNsayk7CisJY2xrX3B1dChkZXYtPmNsayk7CiBlcnJfZnJlZV9tZW06CiAJa2ZyZWUoZGV2KTsKIGVycl9yZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgKG1lbS0+ZW5kIC0gbWVtLT5zdGFydCkgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NDcsNyArNzU3LDcgQEAKIAlkZXYtPmNsayA9IE5VTEw7CiAJa2ZyZWUoZGV2KTsKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCAobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKaW5kZXggZmI1NWQyYy4uYTVhZjgzNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwpAQCAtODY4LDcgKzg2OCw3IEBACiAJfQogCiAJaW9hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsCi0JCQkobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEsIHBkZXYtPm5hbWUpOworCQkJcmVzb3VyY2Vfc2l6ZShtZW0pLCBwZGV2LT5uYW1lKTsKIAlpZiAoIWlvYXJlYSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBdWRpbyByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKIAkJcmV0ID0gLUVCVVNZOwpAQCAtODg1LDcgKzg4NSwxMyBAQAogCWNsa19lbmFibGUoZGV2LT5jbGspOwogCWRldi0+Y2xrX2FjdGl2ZSA9IDE7CiAKLQlkZXYtPmJhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhtZW0tPnN0YXJ0KTsKKwlkZXYtPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJaWYgKCFkZXYtPmJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX2NsazsKKwl9CisKIAlkZXYtPm9wX21vZGUgPSBwZGF0YS0+b3BfbW9kZTsKIAlkZXYtPnRkbV9zbG90cyA9IHBkYXRhLT50ZG1fc2xvdHM7CiAJZGV2LT5udW1fc2VyaWFsaXplciA9IHBkYXRhLT5udW1fc2VyaWFsaXplcjsKQEAgLTg5OSwxNCArOTA1LDE0IEBACiAJZG1hX2RhdGEtPmFzcF9jaGFuX3EgPSBwZGF0YS0+YXNwX2NoYW5fcTsKIAlkbWFfZGF0YS0+cmFtX2NoYW5fcSA9IHBkYXRhLT5yYW1fY2hhbl9xOwogCWRtYV9kYXRhLT5kbWFfYWRkciA9IChkbWFfYWRkcl90KSAocGRhdGEtPnR4X2RtYV9vZmZzZXQgKwotCQkJCQkJCWlvX3YycChkZXYtPmJhc2UpKTsKKwkJCQkJCQltZW0tPnN0YXJ0KTsKIAogCS8qIGZpcnN0IFRYLCB0aGVuIFJYICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBETUEgcmVzb3VyY2VcbiIpOwogCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwkJZ290byBlcnJfaW91bm1hcDsKIAl9CiAKIAlkbWFfZGF0YS0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7CkBAIC05MTUsMTMgKzkyMSwxMyBAQAogCWRtYV9kYXRhLT5hc3BfY2hhbl9xID0gcGRhdGEtPmFzcF9jaGFuX3E7CiAJZG1hX2RhdGEtPnJhbV9jaGFuX3EgPSBwZGF0YS0+cmFtX2NoYW5fcTsKIAlkbWFfZGF0YS0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkocGRhdGEtPnJ4X2RtYV9vZmZzZXQgKwotCQkJCQkJCWlvX3YycChkZXYtPmJhc2UpKTsKKwkJCQkJCQltZW0tPnN0YXJ0KTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CiAJaWYgKCFyZXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gRE1BIHJlc291cmNlXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCiAJZG1hX2RhdGEtPmNoYW5uZWwgPSByZXMtPnN0YXJ0OwpAQCAtOTI5LDExICs5MzUsMTYgQEAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2LCAmZGF2aW5jaV9tY2FzcF9kYWlbcGRhdGEtPm9wX21vZGVdKTsKIAogCWlmIChyZXQgIT0gMCkKLQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAJcmV0dXJuIDA7CiAKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoZGV2LT5iYXNlKTsKK2Vycl9yZWxlYXNlX2NsazoKKwljbGtfZGlzYWJsZShkZXYtPmNsayk7CisJY2xrX3B1dChkZXYtPmNsayk7CiBlcnJfcmVsZWFzZV9yZWdpb246Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiBlcnJfcmVsZWFzZV9kYXRhOgogCWtmcmVlKGRldik7CiAKQEAgLTk1MSw3ICs5NjIsNyBAQAogCWRldi0+Y2xrID0gTlVMTDsKIAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAKIAlrZnJlZShkZXYpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZXA5M3h4L0tjb25maWcgYi9zb3VuZC9zb2MvZXA5M3h4L0tjb25maWcKaW5kZXggNTc0MjkwNC4uOTFhMjhkZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2VwOTN4eC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9lcDkzeHgvS2NvbmZpZwpAQCAtMzAsMyArMzAsMTIgQEAKIAloZWxwCiAJICBTYXkgWSBvciBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIEFDOTcgYXVkaW8gb24gdGhlCiAJICBTaW1wbGVtYWNoaW5lcyBTaW0uT25lIGJvYXJkLgorCitjb25maWcgU05EX0VQOTNYWF9TT0NfRURCOTNYWAorCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgQ2lycnVzIExvZ2ljIEVEQjkzeHggYm9hcmRzIgorCWRlcGVuZHMgb24gU05EX0VQOTNYWF9TT0MgJiYgKE1BQ0hfRURCOTMwMSB8fCBNQUNIX0VEQjkzMDIgfHwgTUFDSF9FREI5MzAyQSB8fCBNQUNIX0VEQjkzMDdBIHx8IE1BQ0hfRURCOTMxNUEpCisJc2VsZWN0IFNORF9FUDkzWFhfU09DX0kyUworCXNlbGVjdCBTTkRfU09DX0NTNDI3MQorCWhlbHAKKwkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgSTJTIGF1ZGlvIG9uIHRoZQorCSAgQ2lycnVzIExvZ2ljIEVEQjkzeHggYm9hcmRzLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2VwOTN4eC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9lcDkzeHgvTWFrZWZpbGUKaW5kZXggOGU3OTc3Zi4uNTUxNDE0NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2VwOTN4eC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvZXA5M3h4L01ha2VmaWxlCkBAIC0xMCw2ICsxMCw4IEBACiAjIEVQOTNYWCBNYWNoaW5lIFN1cHBvcnQKIHNuZC1zb2Mtc25hcHBlcmNsMTUtb2JqcwkJCTo9IHNuYXBwZXJjbDE1Lm8KIHNuZC1zb2Mtc2ltb25lLW9ianMJCQkJOj0gc2ltb25lLm8KK3NuZC1zb2MtZWRiOTN4eC1vYmpzCQkJCTo9IGVkYjkzeHgubwogCiBvYmotJChDT05GSUdfU05EX0VQOTNYWF9TT0NfU05BUFBFUkNMMTUpCSs9IHNuZC1zb2Mtc25hcHBlcmNsMTUubwogb2JqLSQoQ09ORklHX1NORF9FUDkzWFhfU09DX1NJTU9ORSkJCSs9IHNuZC1zb2Mtc2ltb25lLm8KK29iai0kKENPTkZJR19TTkRfRVA5M1hYX1NPQ19FREI5M1hYKQkJKz0gc25kLXNvYy1lZGI5M3h4Lm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9lcDkzeHgvZWRiOTN4eC5jIGIvc291bmQvc29jL2VwOTN4eC9lZGI5M3h4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhYTE1MQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9lcDkzeHgvZWRiOTN4eC5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogU29DIGF1ZGlvIGZvciBFREI5M3h4CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEFsZXhhbmRlciBTdmVyZGxpbiA8c3ViYXBhcnRzQHlhbmRleC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydCBDUzQyNzEgY29kZWMgYmVpbmcgbWFzdGVyIG9yIHNsYXZlLCB3b3JraW5nCisgKiBpbiBjb250cm9sIHBvcnQgbW9kZSwgY29ubmVjdGVkIGVpdGhlciB2aWEgU1BJIG9yIEkyQy4KKyAqIFRoZSBkYXRhIGZvcm1hdCBhY2NlcHRlZCBpcyBJMlMgb3IgbGVmdC1qdXN0aWZpZWQuCisgKiBEQVBNIHN1cHBvcnQgbm90IGltcGxlbWVudGVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgImVwOTN4eC1wY20uaCIKKworI2RlZmluZSBlZGI5M3h4X2hhc19hdWRpbygpIChtYWNoaW5lX2lzX2VkYjkzMDEoKSB8fAlcCisJCQkgICAgIG1hY2hpbmVfaXNfZWRiOTMwMigpIHx8CVwKKwkJCSAgICAgbWFjaGluZV9pc19lZGI5MzAyYSgpIHx8CVwKKwkJCSAgICAgbWFjaGluZV9pc19lZGI5MzA3YSgpIHx8CVwKKwkJCSAgICAgbWFjaGluZV9pc19lZGI5MzE1YSgpKQorCitzdGF0aWMgaW50IGVkYjkzeHhfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgbWNsa19yYXRlOworCXVuc2lnbmVkIGludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCS8qCisJICogQWNjb3JkaW5nIHRvIENTNDI3MSBkYXRhc2hlZXQgd2UgdXNlIE1DTEsvTFJDSz0yNTYgZm9yCisJICogcmF0ZXMgYmVsb3cgNTBrSHogYW5kIDEyOCBmb3IgaGlnaGVyIHNhbXBsZSByYXRlcworCSAqLworCWlmIChyYXRlIDwgNTAwMDApCisJCW1jbGtfcmF0ZSA9IHJhdGUgKiA2NCAqIDQ7CisJZWxzZQorCQltY2xrX3JhdGUgPSByYXRlICogNjQgKiAyOworCisJZXJyID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9OQl9JRiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfSUYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCAwLCBtY2xrX3JhdGUsCisJCQkJICAgICBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgMCwgbWNsa19yYXRlLAorCQkJCSAgICAgIFNORF9TT0NfQ0xPQ0tfT1VUKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBlZGI5M3h4X29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gZWRiOTN4eF9od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZWRiOTN4eF9kYWkgPSB7CisJLm5hbWUJCT0gIkNTNDI3MSIsCisJLnN0cmVhbV9uYW1lCT0gIkNTNDI3MSBIaUZpIiwKKwkucGxhdGZvcm1fbmFtZQk9ICJlcDkzeHgtcGNtLWF1ZGlvIiwKKwkuY3B1X2RhaV9uYW1lCT0gImVwOTN4eC1pMnMiLAorCS5jb2RlY19uYW1lCT0gInNwaTAuMCIsCisJLmNvZGVjX2RhaV9uYW1lCT0gImNzNDI3MS1oaWZpIiwKKwkub3BzCQk9ICZlZGI5M3h4X29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNuZF9zb2NfZWRiOTN4eCA9IHsKKwkubmFtZQkJPSAiRURCOTNYWCIsCisJLmRhaV9saW5rCT0gJmVkYjkzeHhfZGFpLAorCS5udW1fbGlua3MJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVkYjkzeHhfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZWRiOTN4eF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghZWRiOTN4eF9oYXNfYXVkaW8oKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBlcDkzeHhfaTJzX2FjcXVpcmUoRVA5M1hYX1NZU0NPTl9ERVZDRkdfSTJTT05BQzk3LAorCQkJCSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVl9PUklERSB8CisJCQkJIEVQOTNYWF9TWVNDT05fSTJTQ0xLRElWX1NQT0wpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwllZGI5M3h4X3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWVkYjkzeHhfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfaTJzOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGVkYjkzeHhfc25kX2RldmljZSwgJnNuZF9zb2NfZWRiOTN4eCk7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChlZGI5M3h4X3NuZF9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZGV2aWNlX3B1dDsKKworCXJldHVybiAwOworCitkZXZpY2VfcHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQoZWRiOTN4eF9zbmRfZGV2aWNlKTsKK2ZyZWVfaTJzOgorCWVwOTN4eF9pMnNfcmVsZWFzZSgpOworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChlZGI5M3h4X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZWRiOTN4eF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZWRiOTN4eF9zbmRfZGV2aWNlKTsKKwllcDkzeHhfaTJzX3JlbGVhc2UoKTsKK30KK21vZHVsZV9leGl0KGVkYjkzeHhfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFsZXhhbmRlciBTdmVyZGxpbiA8c3ViYXBhcnRzQHlhbmRleC5ydT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgRURCOTN4eCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtYWM5Ny5jIGIvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtYWM5Ny5jCmluZGV4IDY4YTBiYWUuLjEwNGU5NWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9lcDkzeHgvZXA5M3h4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1hYzk3LmMKQEAgLTI1Myw3ICsyNTMsNiBAQAogCXN0cnVjdCBlcDkzeHhfYWM5N19pbmZvICppbmZvID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKIAl1bnNpZ25lZCB2ID0gMDsKIAotCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtaTJzLmMgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYwppbmRleCBmZmY1NzlhLi4wNDJmNGU5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiB7CiAJc3RydWN0IGVwOTN4eF9pMnNfaW5mbyAqaW5mbyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CiAJdW5zaWduZWQgd29yZF9sZW4sIGRpdiwgc2RpdiwgbHJkaXY7Ci0JaW50IGZvdW5kID0gMCwgZXJyOworCWludCBlcnI7CiAKIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CkBAIC0yNzUsMTUgKzI3NSwxNCBAQAogCSAqIHRoZSBjb2RlYyB1c2VzLgogCSAqLwogCWRpdiA9IGNsa19nZXRfcmF0ZShpbmZvLT5tY2xrKSAvIHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0JZm9yIChzZGl2ID0gMjsgc2RpdiA8PSA0OyBzZGl2ICs9IDIpCi0JCWZvciAobHJkaXYgPSA2NDsgbHJkaXYgPD0gMTI4OyBscmRpdiA8PD0gMSkKLQkJCWlmIChzZGl2ICogbHJkaXYgPT0gZGl2KSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWdvdG8gb3V0OwotCQkJfQotb3V0OgotCWlmICghZm91bmQpCi0JCXJldHVybiAtRUlOVkFMOworCXNkaXYgPSA0OworCWlmIChkaXYgPiAoMjU2ICsgNTEyKSAvIDIpIHsKKwkJbHJkaXYgPSAxMjg7CisJfSBlbHNlIHsKKwkJbHJkaXYgPSA2NDsKKwkJaWYgKGRpdiA8ICgxMjggKyAyNTYpIC8gMikKKwkJCXNkaXYgPSAyOworCX0KIAogCWVyciA9IGNsa19zZXRfcmF0ZShpbmZvLT5zY2xrLCBjbGtfZ2V0X3JhdGUoaW5mby0+bWNsaykgLyBzZGl2KTsKIAlpZiAoZXJyKQpAQCAtMzE0LDEwICszMTMsMTIgQEAKIAlzdHJ1Y3QgZXA5M3h4X2kyc19pbmZvICppbmZvID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKIAogCWlmICghZGFpLT5hY3RpdmUpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAllcDkzeHhfaTJzX2Rpc2FibGUoaW5mbywgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CiAJZXA5M3h4X2kyc19kaXNhYmxlKGluZm8sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBlcDkzeHhfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKQEAgLTMyNSwxMCArMzI2LDEyIEBACiAJc3RydWN0IGVwOTN4eF9pMnNfaW5mbyAqaW5mbyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CiAKIAlpZiAoIWRhaS0+YWN0aXZlKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJZXA5M3h4X2kyc19lbmFibGUoaW5mbywgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CiAJZXA5M3h4X2kyc19lbmFibGUoaW5mbywgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKKworCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgZXA5M3h4X2kyc19zdXNwZW5kCU5VTEwKQEAgLTM1MiwxMyArMzU1LDEzIEBACiAJLnBsYXliYWNrCT0gewogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCi0JCS5yYXRlcwkJPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCiAJCS5mb3JtYXRzCT0gRVA5M1hYX0kyU19GT1JNQVRTLAogCX0sCiAJLmNhcHR1cmUJPSB7CiAJCSAuY2hhbm5lbHNfbWluCT0gMiwKIAkJIC5jaGFubmVsc19tYXgJPSAyLAotCQkgLnJhdGVzCQk9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCSAucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCiAJCSAuZm9ybWF0cwk9IEVQOTNYWF9JMlNfRk9STUFUUywKIAl9LAogCS5vcHMJCT0gJmVwOTN4eF9pMnNfZGFpX29wcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9lcDkzeHgvZXA5M3h4LXBjbS5jIGIvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtcGNtLmMKaW5kZXggMDY2NzA3Ny4uYTQ1NmU0OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtcGNtLmMKKysrIGIvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtcGNtLmMKQEAgLTM1LDkgKzM1LDkgQEAKIAkJCQkgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRAl8CiAJCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIpLAogCQkJCSAgIAotCS5yYXRlcwkJCT0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkucmF0ZXMJCQk9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAogCS5yYXRlX21pbgkJPSBTTkRSVl9QQ01fUkFURV84MDAwLAotCS5yYXRlX21heAkJPSBTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9tYXgJCT0gU05EUlZfUENNX1JBVEVfMTkyMDAwLAogCQogCS5mb3JtYXRzCQk9IChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CiAJCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYyBiL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKaW5kZXggN2Q3ODQ3YS4uYzE2YzZiMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYworKysgYi9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCkBAIC01Myw5ICs1Myw4IEBACiAgKgogICogSGVyZSB3ZSBwcm9ncmFtIHRoZSBETUFDUiBhbmQgUE1VWENSIHJlZ2lzdGVycy4KICAqLwotc3RhdGljIGludCBtcGM4NjEwX2hwY2RfbWFjaGluZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzb3VuZF9kZXZpY2UpCitzdGF0aWMgaW50IG1wYzg2MTBfaHBjZF9tYWNoaW5lX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHNvdW5kX2RldmljZSk7CiAJc3RydWN0IG1wYzg2MTBfaHBjZF9kYXRhICptYWNoaW5lX2RhdGEgPQogCQljb250YWluZXJfb2YoY2FyZCwgc3RydWN0IG1wYzg2MTBfaHBjZF9kYXRhLCBjYXJkKTsKIAlzdHJ1Y3QgY2Nzcl9ndXRzXzg2eHggX19pb21lbSAqZ3V0czsKQEAgLTEzOCw5ICsxMzcsOCBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBzb3VuZCBkZXZpY2UgZm9yIG9uZSBTU0kuICBXZQogICogZGUtcHJvZ3JhbSB0aGUgRE1BQ1IgYW5kIFBNVVhDUiByZWdpc3Rlci4KICAqLwotc3RhdGljIGludCBtcGM4NjEwX2hwY2RfbWFjaGluZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc291bmRfZGV2aWNlKQorc3RhdGljIGludCBtcGM4NjEwX2hwY2RfbWFjaGluZV9yZW1vdmUoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoc291bmRfZGV2aWNlKTsKIAlzdHJ1Y3QgbXBjODYxMF9ocGNkX2RhdGEgKm1hY2hpbmVfZGF0YSA9CiAJCWNvbnRhaW5lcl9vZihjYXJkLCBzdHJ1Y3QgbXBjODYxMF9ocGNkX2RhdGEsIGNhcmQpOwogCXN0cnVjdCBjY3NyX2d1dHNfODZ4eCBfX2lvbWVtICpndXRzOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9wMTAyMl9kcy5jIGIvc291bmQvc29jL2ZzbC9wMTAyMl9kcy5jCmluZGV4IDAyNmI3NTYuLjY2ZTBiNjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvcDEwMjJfZHMuYworKysgYi9zb3VuZC9zb2MvZnNsL3AxMDIyX2RzLmMKQEAgLTg1LDkgKzg1LDggQEAKICAqCiAgKiBIZXJlIHdlIHByb2dyYW0gdGhlIERNQUNSIGFuZCBQTVVYQ1IgcmVnaXN0ZXJzLgogICovCi1zdGF0aWMgaW50IHAxMDIyX2RzX21hY2hpbmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc291bmRfZGV2aWNlKQorc3RhdGljIGludCBwMTAyMl9kc19tYWNoaW5lX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHNvdW5kX2RldmljZSk7CiAJc3RydWN0IG1hY2hpbmVfZGF0YSAqbWRhdGEgPQogCQljb250YWluZXJfb2YoY2FyZCwgc3RydWN0IG1hY2hpbmVfZGF0YSwgY2FyZCk7CiAJc3RydWN0IGNjc3JfZ3V0c184NXh4IF9faW9tZW0gKmd1dHM7CkBAIC0xNjAsOSArMTU5LDggQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHJlbW92ZSB0aGUgc291bmQgZGV2aWNlIGZvciBvbmUgU1NJLiAgV2UKICAqIGRlLXByb2dyYW0gdGhlIERNQUNSIGFuZCBQTVVYQ1IgcmVnaXN0ZXIuCiAgKi8KLXN0YXRpYyBpbnQgcDEwMjJfZHNfbWFjaGluZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc291bmRfZGV2aWNlKQorc3RhdGljIGludCBwMTAyMl9kc19tYWNoaW5lX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShzb3VuZF9kZXZpY2UpOwogCXN0cnVjdCBtYWNoaW5lX2RhdGEgKm1kYXRhID0KIAkJY29udGFpbmVyX29mKGNhcmQsIHN0cnVjdCBtYWNoaW5lX2RhdGEsIGNhcmQpOwogCXN0cnVjdCBjY3NyX2d1dHNfODV4eCBfX2lvbWVtICpndXRzOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9LY29uZmlnIGIvc291bmQvc29jL2lteC9LY29uZmlnCmluZGV4IDY0MjI3MGEuLmQ4ZjEzMGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvaW14L0tjb25maWcKQEAgLTMwLDYgKzMwLDE2IEBACiAJICBFbmFibGUgc3VwcG9ydCBmb3IgYXVkaW8gb24gdGhlIGkuTVgzMUFEUyB3aXRoIHRoZSBXTTExMzMtRVYxCiAJICBQTUlDIGJvYXJkIHdpdGggV004ODM1eCBmaXR0ZWQuCiAKK2NvbmZpZyBTTkRfU09DX01YMjdWSVNfQUlDMzJYNAorCXRyaXN0YXRlICJTb0MgYXVkaW8gc3VwcG9ydCBmb3IgVmlzc3RyaW0gTTEwIGJvYXJkcyIKKwlkZXBlbmRzIG9uIE1BQ0hfSU1YMjdfVklTU1RSSU1fTTEwCisJc2VsZWN0IFNORF9TT0NfVFZMMzIwQUlDMzJYNAorCXNlbGVjdCBTTkRfTVhDX1NPQ19TU0kKKwlzZWxlY3QgU05EX01YQ19TT0NfTVgyCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBWaXNzdHJpbSBTTTEwCisJICBib2FyZCB3aXRoIFRMVjMyMEFJQzMyWDQgY29kZWMuCisKIGNvbmZpZyBTTkRfU09DX1BIWUNPUkVfQUM5NwogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgUGh5dGVjIHBoeUNPUkUgKGFuZCBwaHlDQVJEKSBib2FyZHMiCiAJZGVwZW5kcyBvbiBNQUNIX1BDTTA0MyB8fCBNQUNIX1BDQTEwMApAQCAtNDQsNyArNTQsOCBAQAogCXRyaXN0YXRlICJFdWtyZWEgVExWMzIwIgogCWRlcGVuZHMgb24gTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQgXAogCQl8fCBNQUNIX0VVS1JFQV9NQklNWFNEMjVfQkFTRUJPQVJEIFwKLQkJfHwgTUFDSF9FVUtSRUFfTUJJTVhTRDM1X0JBU0VCT0FSRAorCQl8fCBNQUNIX0VVS1JFQV9NQklNWFNEMzVfQkFTRUJPQVJEIFwKKwkJfHwgTUFDSF9FVUtSRUFfTUJJTVhTRDUxX0JBU0VCT0FSRAogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzIzCiAJc2VsZWN0IFNORF9NWENfU09DX1NTSQogCXNlbGVjdCBTTkRfTVhDX1NPQ19GSVEKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvaW14L01ha2VmaWxlCmluZGV4IGI2N2ZjMDIuLmQ2ZDYwOWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2lteC9NYWtlZmlsZQpAQCAtMTAsOCArMTAsMTAgQEAKICMgaS5NWCBNYWNoaW5lIFN1cHBvcnQKIHNuZC1zb2MtZXVrcmVhLXRsdjMyMC1vYmpzIDo9IGV1a3JlYS10bHYzMjAubwogc25kLXNvYy1waHljb3JlLWFjOTctb2JqcyA6PSBwaHljb3JlLWFjOTcubworc25kLXNvYy1teDI3dmlzLWFpYzMyeDQtb2JqcyA6PSBteDI3dmlzLWFpYzMyeDQubwogc25kLXNvYy13bTExMzMtZXYxLW9ianMgOj0gd20xMTMzLWV2MS5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DX0VVS1JFQV9UTFYzMjApICs9IHNuZC1zb2MtZXVrcmVhLXRsdjMyMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19QSFlDT1JFX0FDOTcpICs9IHNuZC1zb2MtcGh5Y29yZS1hYzk3Lm8KK29iai0kKENPTkZJR19TTkRfU09DX01YMjdWSVNfQUlDMzJYNCkgKz0gc25kLXNvYy1teDI3dmlzLWFpYzMyeDQubwogb2JqLSQoQ09ORklHX1NORF9NWENfU09DX1dNMTEzM19FVjEpICs9IHNuZC1zb2Mtd20xMTMzLWV2MS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYyBiL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCmluZGV4IDFlOWJjY2EuLjc1ZmI0YjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCisrKyBiL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCkBAIC05OCw3ICs5OCw4IEBACiAJaW50IHJldDsKIAogCWlmICghbWFjaGluZV9pc19ldWtyZWFfY3B1aW14MjcoKSAmJiAhbWFjaGluZV9pc19ldWtyZWFfY3B1aW14MjVzZCgpCi0JCSYmICFtYWNoaW5lX2lzX2V1a3JlYV9jcHVpbXgzNXNkKCkpCisJCSYmICFtYWNoaW5lX2lzX2V1a3JlYV9jcHVpbXgzNXNkKCkKKwkJJiYgIW1hY2hpbmVfaXNfZXVrcmVhX2NwdWlteDUxc2QoKSkKIAkJLyogcmV0dXJuIGhhcHB5LiBXZSBtaWdodCBydW4gb24gYSB0b3RhbGx5IGRpZmZlcmVudCBtYWNoaW5lICovCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1zc2kuYyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCmluZGV4IDMwODk0ZWEuLmJjOTJlYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKIAkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIHdpdGggZGF0YSAqLwotCQlzdHJjciB8PSBTU0lfU1RDUl9URlNMOworCQlzdHJjciB8PSBTU0lfU1RDUl9URlNMIHwgU1NJX1NUQ1JfVFhCSVQwOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgogCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggMWNsayBiZWZvcmUgZGF0YSAqLwpAQCAtNjU2LDYgKzY1Niw5IEBACiAJc3NpLT5kbWFfcGFyYW1zX3J4LmRtYV9hZGRyID0gcmVzLT5zdGFydCArIFNTSV9TUlgwOwogCXNzaS0+ZG1hX3BhcmFtc190eC5kbWFfYWRkciA9IHJlcy0+c3RhcnQgKyBTU0lfU1RYMDsKIAorCXNzaS0+ZG1hX3BhcmFtc190eC5idXJzdHNpemUgPSA0OworCXNzaS0+ZG1hX3BhcmFtc19yeC5idXJzdHNpemUgPSA0OworCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgInR4MCIpOwogCWlmIChyZXMpCiAJCXNzaS0+ZG1hX3BhcmFtc190eC5kbWEgPSByZXMtPnN0YXJ0OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDI3dmlzLWFpYzMyeDQuYyBiL3NvdW5kL3NvYy9pbXgvbXgyN3Zpcy1haWMzMng0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0MTEwYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvbXgyN3Zpcy1haWMzMng0LmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBteDI3dmlzLWFpYzMyeDQuYworICoKKyAqIENvcHlyaWdodCAyMDExIFZpc3RhIFNpbGljb24gUy5MLgorICoKKyAqIEF1dGhvcjogSmF2aWVyIE1hcnRpbiA8amF2aWVyLm1hcnRpbkB2aXN0YS1zaWxpY29uLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZG11eC5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3RsdjMyMGFpYzMyeDQuaCIKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKK3N0YXRpYyBpbnQgbXgyN3Zpc19haWMzMng0X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CisJaW50IHJldDsKKwl1MzIgZGFpX2Zvcm1hdDsKKworCWRhaV9mb3JtYXQgPSBTTkRfU09DX0RBSUZNVF9EU1BfQiB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKKworCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLworCXNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBkYWlfZm9ybWF0KTsKKworCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIGRhaV9mb3JtYXQpOworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsCisJCQkJICAgICAyNTAwMDAwMCwgU05EX1NPQ19DTE9DS19PVVQpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHNldHRpbmcgY29kZWMgc3lzY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBJTVhfU1NQX1NZU19DTEssIDAsCisJCQkJU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImNhbid0IHNldCBDUFUgc3lzdGVtIGNsb2NrIElNWF9TU1BfU1lTX0NMS1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbXgyN3Zpc19haWMzMng0X3NuZF9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IG14Mjd2aXNfYWljMzJ4NF9od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgbXgyN3Zpc19haWMzMng0X2RhaSA9IHsKKwkubmFtZQkJPSAidGx2MzIwYWljMzJ4NCIsCisJLnN0cmVhbV9uYW1lCT0gIlRMVjMyMEFJQzMyWDQiLAorCS5jb2RlY19kYWlfbmFtZQk9ICJ0bHYzMjBhaWMzMng0LWhpZmkiLAorCS5wbGF0Zm9ybV9uYW1lCT0gImlteC1wY20tYXVkaW8uMCIsCisJLmNvZGVjX25hbWUJPSAidGx2MzIwYWljMzJ4NC4wLTAwMTgiLAorCS5jcHVfZGFpX25hbWUJPSAiaW14LXNzaS4wIiwKKwkub3BzCQk9ICZteDI3dmlzX2FpYzMyeDRfc25kX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG14Mjd2aXNfYWljMzJ4NCA9IHsKKwkubmFtZQkJPSAidmlzc3RyaW1fbTEwLWF1ZGlvIiwKKwkuZGFpX2xpbmsJPSAmbXgyN3Zpc19haWMzMng0X2RhaSwKKwkubnVtX2xpbmtzCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpteDI3dmlzX2FpYzMyeDRfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgbXgyN3Zpc19haWMzMng0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJbXgyN3Zpc19haWMzMng0X3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIW14Mjd2aXNfYWljMzJ4NF9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKG14Mjd2aXNfYWljMzJ4NF9zbmRfZGV2aWNlLCAmbXgyN3Zpc19haWMzMng0KTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG14Mjd2aXNfYWljMzJ4NF9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG14Mjd2aXNfYWljMzJ4NF9zbmRfZGV2aWNlKTsKKwl9CisKKwkvKiBDb25uZWN0IFNTSTAgYXMgY2xvY2sgc2xhdmUgdG8gU1NJMSBleHRlcm5hbCBwaW5zICovCisJbXhjX2F1ZG11eF92MV9jb25maWd1cmVfcG9ydChNWDI3X0FVRE1VWF9IUENSMV9TU0kwLAorCQkJTVhDX0FVRE1VWF9WMV9QQ1JfU1lOIHwKKwkJCU1YQ19BVURNVVhfVjFfUENSX1RGU0RJUiB8CisJCQlNWENfQVVETVVYX1YxX1BDUl9UQ0xLRElSIHwKKwkJCU1YQ19BVURNVVhfVjFfUENSX1RGQ1NFTChNWDI3X0FVRE1VWF9QUENSMV9TU0lfUElOU18xKSB8CisJCQlNWENfQVVETVVYX1YxX1BDUl9SWERTRUwoTVgyN19BVURNVVhfUFBDUjFfU1NJX1BJTlNfMSkKKwkpOworCW14Y19hdWRtdXhfdjFfY29uZmlndXJlX3BvcnQoTVgyN19BVURNVVhfUFBDUjFfU1NJX1BJTlNfMSwKKwkJCU1YQ19BVURNVVhfVjFfUENSX1NZTiB8CisJCQlNWENfQVVETVVYX1YxX1BDUl9SWERTRUwoTVgyN19BVURNVVhfSFBDUjFfU1NJMCkKKwkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG14Mjd2aXNfYWljMzJ4NF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobXgyN3Zpc19haWMzMng0X3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChteDI3dmlzX2FpYzMyeDRfaW5pdCk7Cittb2R1bGVfZXhpdChteDI3dmlzX2FpYzMyeDRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkphdmllciBNYXJ0aW4gPGphdmllci5tYXJ0aW5AdmlzdGEtc2lsaWNvbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIEFJQzMyWDQgbXgyNyB2aXNzdHJpbSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL21pZC14ODYvS2NvbmZpZyBiL3NvdW5kL3NvYy9taWQteDg2L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzNTA0MgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9taWQteDg2L0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorY29uZmlnIFNORF9NRkxEX01BQ0hJTkUKKwl0cmlzdGF0ZSAiU09DIE1hY2hpbmUgQXVkaW8gZHJpdmVyIGZvciBJbnRlbCBNZWRmaWVsZCBNSUQgcGxhdGZvcm0iCisJZGVwZW5kcyBvbiBJTlRFTF9TQ1VfSVBDCisJZGVwZW5kcyBvbiBTTkRfSU5URUxfU1NUCisJc2VsZWN0IFNORF9TT0NfU045NTAzMQorCXNlbGVjdCBTTkRfU1NUX1BMQVRGT1JNCisJaGVscAorICAgICAgICAgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBBU29DIG1hY2hpbmUgZHJpdmVyIGZvciBJbnRlbChSKSBNSUQgTWVkZmllbGQgcGxhdGZvcm0KKyAgICAgICAgICB1c2VkIGFzIGFsc2EgZGV2aWNlIGluIGF1ZGlvIHN1YnN0ZW0gaW4gSW50ZWwoUikgTUlEIGRldmljZXMKKyAgICAgICAgICBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgZGV2aWNlCisgICAgICAgICAgSWYgdW5zdXJlIHNlbGVjdCAiTiIuCisKK2NvbmZpZyBTTkRfU1NUX1BMQVRGT1JNCisJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9taWQteDg2L01ha2VmaWxlIGIvc291bmQvc29jL21pZC14ODYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5ODgzMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9taWQteDg2L01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorc25kLXNvYy1zc3QtcGxhdGZvcm0tb2JqcyA6PSBzc3RfcGxhdGZvcm0ubworc25kLXNvYy1tZmxkLW1hY2hpbmUtb2JqcyA6PSBtZmxkX21hY2hpbmUubworCitvYmotJChDT05GSUdfU05EX1NTVF9QTEFURk9STSkgKz0gc25kLXNvYy1zc3QtcGxhdGZvcm0ubworb2JqLSQoQ09ORklHX1NORF9NRkxEX01BQ0hJTkUpICs9IHNuZC1zb2MtbWZsZC1tYWNoaW5lLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9taWQteDg2L21mbGRfbWFjaGluZS5jIGIvc291bmQvc29jL21pZC14ODYvbWZsZF9tYWNoaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5YWExYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9taWQteDg2L21mbGRfbWFjaGluZS5jCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogIG1mbGRfbWFjaGluZS5jIC0gQVNvYyBNYWNoaW5lIGRyaXZlciBmb3IgSW50ZWwgTWVkZmllbGQgTUlEIHBsYXRmb3JtCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3JwCisgKiAgQXV0aG9yOiBWaW5vZCBLb3VsIDx2aW5vZC5rb3VsQGludGVsLmNvbT4KKyAqICBBdXRob3I6IEhhcnNoYSBQcml5YSA8cHJpeWEuaGFyc2hhQGludGVsLmNvbT4KKyAqICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlICIuLi9jb2RlY3Mvc245NTAzMS5oIgorCisjZGVmaW5lIE1JRF9NT05PIDEKKyNkZWZpbmUgTUlEX1NURVJFTyAyCisjZGVmaW5lIE1JRF9NQVhfQ0FQIDUKKyNkZWZpbmUgTUZMRF9KQUNLX0lOU0VSVCAweDA0CisKK2VudW0gc29jX21pY19iaWFzX3pvbmVzIHsKKwlNRkxEX01WX1NUQVJUID0gMCwKKwkvKiBtaWMgYmlhcyB2b2x1dGFnZSByYW5nZSBmb3IgSGVhZHBob25lcyovCisJTUZMRF9NVl9IUCA9IDQwMCwKKwkvKiBtaWMgYmlhcyB2b2x1dGFnZSByYW5nZSBmb3IgQW1lcmljYW4gSGVhZHNldCovCisJTUZMRF9NVl9BTV9IUyA9IDY1MCwKKwkvKiBtaWMgYmlhcyB2b2x1dGFnZSByYW5nZSBmb3IgSGVhZHNldCovCisJTUZMRF9NVl9IUyA9IDIwMDAsCisJTUZMRF9NVl9VTkRFRklORUQsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50CWhzX3N3aXRjaDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJbG9fZGFjOworCitzdHJ1Y3QgbWZsZF9tY19wcml2YXRlIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzb2NkZXY7CisJdm9pZCBfX2lvbWVtICppbnRfYmFzZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJdTggaW50ZXJydXB0X3N0YXR1czsKK307CisKK3N0cnVjdCBzbmRfc29jX2phY2sgbWZsZF9qYWNrOworCisvKkhlYWRzZXQgamFjayBkZXRlY3Rpb24gREFQTSBwaW5zICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19waW4gbWZsZF9qYWNrX3BpbnNbXSA9IHsKKwl7CisJCS5waW4gPSAiSGVhZHBob25lcyIsCisJCS5tYXNrID0gU05EX0pBQ0tfSEVBRFBIT05FLAorCX0sCisJeworCQkucGluID0gIkFNSUMxIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19NSUNST1BIT05FLAorCX0sCit9OworCisvKiBqYWNrIGRldGVjdGlvbiB2b2x0YWdlIHpvbmVzICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja196b25lIG1mbGRfem9uZXNbXSA9IHsKKwl7TUZMRF9NVl9TVEFSVCwgTUZMRF9NVl9BTV9IUywgU05EX0pBQ0tfSEVBRFBIT05FfSwKKwl7TUZMRF9NVl9BTV9IUywgTUZMRF9NVl9IUywgU05EX0pBQ0tfSEVBRFNFVH0sCit9OworCisvKiBzb3VuZCBjYXJkIGNvbnRyb2xzICovCitzdGF0aWMgY29uc3QgY2hhciAqaGVhZHNldF9zd2l0Y2hfdGV4dFtdID0geyJFYXJwaWVjZSIsICJIZWFkc2V0In07CisKK3N0YXRpYyBjb25zdCBjaGFyICpsb190ZXh0W10gPSB7IlZpYnJhIiwgIkhlYWRzZXQiLCAiSUhGIiwgIk5vbmUifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBoZWFkc2V0X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRV9FWFQoMiwgaGVhZHNldF9zd2l0Y2hfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbG9fZW51bSA9CisJU09DX0VOVU1fU0lOR0xFX0VYVCg0LCBsb190ZXh0KTsKKworc3RhdGljIGludCBoZWFkc2V0X2dldF9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoc19zd2l0Y2g7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGVhZHNldF9zZXRfc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPT0gaHNfc3dpdGNoKQorCQlyZXR1cm4gMDsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworCQlwcl9kZWJ1ZygiaHNfc2V0IEhTIHBhdGhcbiIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbigmY29kZWMtPmRhcG0sICJIZWFkcGhvbmVzIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbigmY29kZWMtPmRhcG0sICJFUE9VVCIpOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJoc19zZXQgRVAgcGF0aFxuIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbigmY29kZWMtPmRhcG0sICJIZWFkcGhvbmVzIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKCZjb2RlYy0+ZGFwbSwgIkVQT1VUIik7CisJfQorCXNuZF9zb2NfZGFwbV9zeW5jKCZjb2RlYy0+ZGFwbSk7CisJaHNfc3dpdGNoID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbG9fZW5hYmxlX291dF9waW5zKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbigmY29kZWMtPmRhcG0sICJJSEZPVVRMIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiSUhGT1VUUiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKCZjb2RlYy0+ZGFwbSwgIkxJTkVPVVRMIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiTElORU9VVFIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbigmY29kZWMtPmRhcG0sICJWSUIxT1VUIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiVklCMk9VVCIpOworCWlmIChoc19zd2l0Y2gpIHsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiSGVhZHBob25lcyIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiRVBPVVQiKTsKKwl9IGVsc2UgeworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiSGVhZHBob25lcyIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbigmY29kZWMtPmRhcG0sICJFUE9VVCIpOworCX0KK30KKworc3RhdGljIGludCBsb19nZXRfc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbG9fZGFjOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvX3NldF9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gIHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9PSBsb19kYWMpCisJCXJldHVybiAwOworCisJLyogd2UgZG9udCB3YW50IHRvIHdvcmsgd2l0aCBsYXN0IHN0YXRlIG9mIGxpbmVvdXQgc28ganVzdCBlbmFibGUgYWxsCisJICogcGlucyBhbmQgdGhlbiBkaXNhYmxlIHBpbnMgbm90IHJlcXVpcmVkCisJICovCisJbG9fZW5hYmxlX291dF9waW5zKGNvZGVjKTsKKwlzd2l0Y2ggKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSB7CisJY2FzZSAwOgorCQlwcl9kZWJ1Zygic2V0IHZpYnJhIHBhdGhcbiIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiVklCMU9VVCIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiVklCMk9VVCIpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTTjk1MDMxX0xPQ1RMLCAweDY2LCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCXByX2RlYnVnKCJzZXQgaHMgIHBhdGhcbiIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiSGVhZHBob25lcyIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiRVBPVVQiKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU045NTAzMV9MT0NUTCwgMHg2NiwgMHgyMik7CisJCWJyZWFrOworCisJY2FzZSAyOgorCQlwcl9kZWJ1Zygic2V0IHNwa3IgcGF0aFxuIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbigmY29kZWMtPmRhcG0sICJJSEZPVVRMIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbigmY29kZWMtPmRhcG0sICJJSEZPVVRSIik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNOOTUwMzFfTE9DVEwsIDB4NjYsIDB4NDQpOworCQlicmVhazsKKworCWNhc2UgMzoKKwkJcHJfZGVidWcoInNldCBudWxsIHBhdGhcbiIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiTElORU9VVEwiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKCZjb2RlYy0+ZGFwbSwgIkxJTkVPVVRSIik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNOOTUwMzFfTE9DVEwsIDB4NjYsIDB4NjYpOworCQlicmVhazsKKwl9CisJc25kX3NvY19kYXBtX3N5bmMoJmNvZGVjLT5kYXBtKTsKKwlsb19kYWMgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1mbGRfc25kX2NvbnRyb2xzW10gPSB7CisJU09DX0VOVU1fRVhUKCJQbGF5YmFjayBTd2l0Y2giLCBoZWFkc2V0X2VudW0sCisJCQloZWFkc2V0X2dldF9zd2l0Y2gsIGhlYWRzZXRfc2V0X3N3aXRjaCksCisJU09DX0VOVU1fRVhUKCJMaW5lb3V0IE11eCIsIGxvX2VudW0sCisJCQlsb19nZXRfc3dpdGNoLCBsb19zZXRfc3dpdGNoKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBtZmxkX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZXMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIG1mbGRfbWFwW10gPSB7CisJeyJIZWFkcGhvbmVzIiwgTlVMTCwgIkhQT1VUUiJ9LAorCXsiSGVhZHBob25lcyIsIE5VTEwsICJIUE9VVEwifSwKKwl7Ik1pYyIsIE5VTEwsICJBTUlDMSJ9LAorfTsKKworc3RhdGljIHZvaWQgbWZsZF9qYWNrX2NoZWNrKHVuc2lnbmVkIGludCBpbnRyX3N0YXR1cykKK3sKKwlzdHJ1Y3QgbWZsZF9qYWNrX2RhdGEgamFja19kYXRhOworCisJamFja19kYXRhLm1mbGRfamFjayA9ICZtZmxkX2phY2s7CisJamFja19kYXRhLmludHJfaWQgPSBpbnRyX3N0YXR1czsKKworCXNuOTUwMzFfamFja19kZXRlY3Rpb24oJmphY2tfZGF0YSk7CisJLyogVE9ETzogYWRkIGFtZXJpY2FuIGhlYWRzZXQgZGV0ZWN0aW9uIHBvc3QgZ3Bpb2xpYiBzdXBwb3J0ICovCit9CisKK3N0YXRpYyBpbnQgbWZsZF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ1bnRpbWUtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwlpbnQgcmV0X3ZhbDsKKworCS8qIEFkZCBqYWNrIHNlbnNlIHdpZGdldHMgKi8KKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIG1mbGRfd2lkZ2V0cywgQVJSQVlfU0laRShtZmxkX3dpZGdldHMpKTsKKworCS8qIFNldCB1cCB0aGUgbWFwICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgbWZsZF9tYXAsIEFSUkFZX1NJWkUobWZsZF9tYXApKTsKKworCS8qIGFsd2F5cyBjb25uZWN0ZWQgKi8KKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHBob25lcyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNaWMiKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKKworCXJldF92YWwgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgbWZsZF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShtZmxkX3NuZF9jb250cm9scykpOworCWlmIChyZXRfdmFsKSB7CisJCXByX2Vycigic29jX2FkZF9jb250cm9scyBmYWlsZWQgJWQiLCByZXRfdmFsKTsKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCS8qIGRlZmF1bHQgaXMgZWFycGllY2UgcGluLCB1c2Vyc3BhY2Ugc2V0cyBpdCBleHBsY2l0bHkgKi8KKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZXMiKTsKKwkvKiBkZWZhdWx0IGlzIGxpbmVvdXQgTkMsIHVzZXJzcGFjZSBzZXRzIGl0IGV4cGxjaXRseSAqLworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTElORU9VVEwiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkxJTkVPVVRSIik7CisJbG9fZGFjID0gMzsKKwloc19zd2l0Y2ggPSAwOworCS8qIHdlIGRvbnQgdXNlIGxpbmVpbiBpbiB0aGlzIHNvIHNldCB0byBOQyAqLworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTElORUlOTCIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTElORUlOUiIpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOworCisJLyogSGVhZHNldCBhbmQgYnV0dG9uIGphY2sgZGV0ZWN0aW9uICovCisJcmV0X3ZhbCA9IHNuZF9zb2NfamFja19uZXcoY29kZWMsICJJbnRlbChSKSBNSUQgQXVkaW8gSmFjayIsCisJCQlTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfQlROXzAgfAorCQkJU05EX0pBQ0tfQlROXzEsICZtZmxkX2phY2spOworCWlmIChyZXRfdmFsKSB7CisJCXByX2VycigiamFjayBjcmVhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisKKwlyZXRfdmFsID0gc25kX3NvY19qYWNrX2FkZF9waW5zKCZtZmxkX2phY2ssCisJCQlBUlJBWV9TSVpFKG1mbGRfamFja19waW5zKSwgbWZsZF9qYWNrX3BpbnMpOworCWlmIChyZXRfdmFsKSB7CisJCXByX2VycigiYWRkaW5nIGphY2sgcGlucyBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisJcmV0X3ZhbCA9IHNuZF9zb2NfamFja19hZGRfem9uZXMoJm1mbGRfamFjaywKKwkJCUFSUkFZX1NJWkUobWZsZF96b25lcyksIG1mbGRfem9uZXMpOworCWlmIChyZXRfdmFsKSB7CisJCXByX2VycigiYWRkaW5nIGphY2sgem9uZXMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCisJLyogd2Ugd2FudCB0byBjaGVjayBpZiBhbnl0aGluZyBpcyBpbnNlcnRlZCBhdCBib290LAorCSAqIHNvIHNlbmQgYSBmYWtlIGV2ZW50IHRvIGNvZGVjIGFuZCBpdCB3aWxsIHJlYWQgYWRjCisJICogdG8gZmluZCBpZiBhbnl0aGluZyBpcyB0aGVyZSBvciBub3QgKi8KKwltZmxkX2phY2tfY2hlY2soTUZMRF9KQUNLX0lOU0VSVCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0cnVjdCBzbmRfc29jX2RhaV9saW5rIG1mbGRfbXNpY19kYWlsaW5rW10gPSB7CisJeworCQkubmFtZSA9ICJNZWRmaWVsZCBIZWFkc2V0IiwKKwkJLnN0cmVhbV9uYW1lID0gIkhlYWRzZXQiLAorCQkuY3B1X2RhaV9uYW1lID0gIkhlYWRzZXQtY3B1LWRhaSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJTTjk1MDMxIEhlYWRzZXQiLAorCQkuY29kZWNfbmFtZSA9ICJzbjk1MDMxIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAic3N0LXBsYXRmb3JtIiwKKwkJLmluaXQgPSBtZmxkX2luaXQsCisJfSwKKwl7CisJCS5uYW1lID0gIk1lZGZpZWxkIFNwZWFrZXIiLAorCQkuc3RyZWFtX25hbWUgPSAiU3BlYWtlciIsCisJCS5jcHVfZGFpX25hbWUgPSAiU3BlYWtlci1jcHUtZGFpIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gIlNOOTUwMzEgU3BlYWtlciIsCisJCS5jb2RlY19uYW1lID0gInNuOTUwMzEiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJzc3QtcGxhdGZvcm0iLAorCQkuaW5pdCA9IE5VTEwsCisJfSwKKwl7CisJCS5uYW1lID0gIk1lZGZpZWxkIFZpYnJhIiwKKwkJLnN0cmVhbV9uYW1lID0gIlZpYnJhMSIsCisJCS5jcHVfZGFpX25hbWUgPSAiVmlicmExLWNwdS1kYWkiLAorCQkuY29kZWNfZGFpX25hbWUgPSAiU045NTAzMSBWaWJyYTEiLAorCQkuY29kZWNfbmFtZSA9ICJzbjk1MDMxIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAic3N0LXBsYXRmb3JtIiwKKwkJLmluaXQgPSBOVUxMLAorCX0sCisJeworCQkubmFtZSA9ICJNZWRmaWVsZCBIYXB0aWNzIiwKKwkJLnN0cmVhbV9uYW1lID0gIlZpYnJhMiIsCisJCS5jcHVfZGFpX25hbWUgPSAiVmlicmEyLWNwdS1kYWkiLAorCQkuY29kZWNfZGFpX25hbWUgPSAiU045NTAzMSBWaWJyYTIiLAorCQkuY29kZWNfbmFtZSA9ICJzbjk1MDMxIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAic3N0LXBsYXRmb3JtIiwKKwkJLmluaXQgPSBOVUxMLAorCX0sCit9OworCisvKiBTb0MgY2FyZCAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19jYXJkX21mbGQgPSB7CisJLm5hbWUgPSAibWVkZmllbGRfYXVkaW8iLAorCS5kYWlfbGluayA9IG1mbGRfbXNpY19kYWlsaW5rLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKG1mbGRfbXNpY19kYWlsaW5rKSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbWZsZF9qYWNrX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG1mbGRfbWNfcHJpdmF0ZSAqbWNfcHJpdmF0ZSA9IChzdHJ1Y3QgbWZsZF9tY19wcml2YXRlICopIGRldjsKKworCW1lbWNweV9mcm9taW8oJm1jX3ByaXZhdGUtPmludGVycnVwdF9zdGF0dXMsCisJCQkoKHZvaWQgKikobWNfcHJpdmF0ZS0+aW50X2Jhc2UpKSwKKwkJCXNpemVvZih1OCkpOworCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbWZsZF9qYWNrX2RldGVjdGlvbihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtZmxkX21jX3ByaXZhdGUgKm1jX2Rydl9jdHggPSAoc3RydWN0IG1mbGRfbWNfcHJpdmF0ZSAqKSBkYXRhOworCisJaWYgKG1mbGRfamFjay5jb2RlYyA9PSBOVUxMKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJbWZsZF9qYWNrX2NoZWNrKG1jX2Rydl9jdHgtPmludGVycnVwdF9zdGF0dXMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbWZsZF9tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXRfdmFsID0gMCwgaXJxOworCXN0cnVjdCBtZmxkX21jX3ByaXZhdGUgKm1jX2Rydl9jdHg7CisJc3RydWN0IHJlc291cmNlICppcnFfbWVtOworCisJcHJfZGVidWcoInNuZF9tZmxkX21jX3Byb2JlIGNhbGxlZFxuIik7CisKKwkvKiByZXRyaXZlIHRoZSBpcnEgbnVtYmVyICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCS8qIGF1ZGlvIGludGVycnVwdCBiYXNlIG9mIFNSQU0gbG9jYXRpb24gd2hlcmUKKwkgKiBpbnRlcnJ1cHRzIGFyZSBzdG9yZWQgYnkgU3lzdGVtIEZXICovCisJbWNfZHJ2X2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCptY19kcnZfY3R4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFtY19kcnZfY3R4KSB7CisJCXByX2VycigiYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpcnFfbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZSgKKwkJCQlwZGV2LCBJT1JFU09VUkNFX01FTSwgIklSUV9CQVNFIik7CisJaWYgKCFpcnFfbWVtKSB7CisJCXByX2Vycigibm8gbWVtIHJlc291cmNlIGdpdmVuXG4iKTsKKwkJcmV0X3ZhbCA9IC1FTk9ERVY7CisJCWdvdG8gdW5hbGxvYzsKKwl9CisJbWNfZHJ2X2N0eC0+aW50X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaXJxX21lbS0+c3RhcnQsCisJCQkJCXJlc291cmNlX3NpemUoaXJxX21lbSkpOworCWlmICghbWNfZHJ2X2N0eC0+aW50X2Jhc2UpIHsKKwkJcHJfZXJyKCJNYXBwaW5nIG9mIGNhY2hlIGZhaWxlZFxuIik7CisJCXJldF92YWwgPSAtRU5PTUVNOworCQlnb3RvIHVuYWxsb2M7CisJfQorCS8qIHJlZ2lzdGVyIGZvciBpbnRlcnJ1cHQgKi8KKwlyZXRfdmFsID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxLCBzbmRfbWZsZF9qYWNrX2ludHJfaGFuZGxlciwKKwkJCXNuZF9tZmxkX2phY2tfZGV0ZWN0aW9uLAorCQkJSVJRRl9TSEFSRUQsIHBkZXYtPmRldi5kcml2ZXItPm5hbWUsIG1jX2Rydl9jdHgpOworCWlmIChyZXRfdmFsKSB7CisJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIElSUVxuIik7CisJCWdvdG8gdW5hbGxvYzsKKwl9CisJLyogcmVnaXN0ZXIgdGhlIHNvYyBjYXJkICovCisJc25kX3NvY19jYXJkX21mbGQuZGV2ID0gJnBkZXYtPmRldjsKKwlyZXRfdmFsID0gc25kX3NvY19yZWdpc3Rlcl9jYXJkKCZzbmRfc29jX2NhcmRfbWZsZCk7CisJaWYgKHJldF92YWwpIHsKKwkJcHJfZGVidWcoInNuZF9zb2NfcmVnaXN0ZXJfY2FyZCBmYWlsZWQgJWRcbiIsIHJldF92YWwpOworCQlnb3RvIGZyZWVpcnE7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jX2Rydl9jdHgpOworCXByX2RlYnVnKCJzdWNjZXNzZnVsbHkgZXhpdGVkIHByb2JlXG4iKTsKKwlyZXR1cm4gcmV0X3ZhbDsKKworZnJlZWlycToKKwlmcmVlX2lycShpcnEsIG1jX2Rydl9jdHgpOwordW5hbGxvYzoKKwlrZnJlZShtY19kcnZfY3R4KTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc25kX21mbGRfbWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1mbGRfbWNfcHJpdmF0ZSAqbWNfZHJ2X2N0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcHJfZGVidWcoInNuZF9tZmxkX21jX3JlbW92ZSBjYWxsZWRcbiIpOworCWZyZWVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIG1jX2Rydl9jdHgpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jYXJkKCZzbmRfc29jX2NhcmRfbWZsZCk7CisJa2ZyZWUobWNfZHJ2X2N0eCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9tZmxkX21jX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAibXNpY19hdWRpbyIsCisJfSwKKwkucHJvYmUgPSBzbmRfbWZsZF9tY19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX21mbGRfbWNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9tZmxkX2RyaXZlcl9pbml0KHZvaWQpCit7CisJcHJfZGVidWcoInNuZF9tZmxkX2RyaXZlcl9pbml0IGNhbGxlZFxuIik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX21mbGRfbWNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHNuZF9tZmxkX2RyaXZlcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNuZF9tZmxkX2RyaXZlcl9leGl0KHZvaWQpCit7CisJcHJfZGVidWcoInNuZF9tZmxkX2RyaXZlcl9leGl0IGNhbGxlZFxuIik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9tZmxkX21jX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzbmRfbWZsZF9kcml2ZXJfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBJbnRlbChSKSBNSUQgTWFjaGluZSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlZpbm9kIEtvdWwgPHZpbm9kLmtvdWxAaW50ZWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSGFyc2hhIFByaXlhIDxwcml5YS5oYXJzaGFAaW50ZWwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptc2ljLWF1ZGlvIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYyBiL3NvdW5kL3NvYy9taWQteDg2L3NzdF9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMmMyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYwpAQCAtMCwwICsxLDQ3NCBAQAorLyoKKyAqICBzc3RfcGxhdGZvcm0uYyAtIEludGVsIE1JRCBQbGF0Zm9ybSBkcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnAKKyAqICBBdXRob3I6IFZpbm9kIEtvdWwgPHZpbm9kLmtvdWxAaW50ZWwuY29tPgorICogIEF1dGhvcjogSGFyc2hhIFByaXlhIDxwcml5YS5oYXJzaGFAaW50ZWwuY29tPgorICogIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqCisgKi8KKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSAiLi4vLi4vLi4vZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfaW9jdGwuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdC5oIgorI2luY2x1ZGUgInNzdF9wbGF0Zm9ybS5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc3N0X3BsYXRmb3JtX3BjbV9odyA9IHsKKwkuaW5mbyA9CShTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQlTTkRSVl9QQ01fSU5GT19ET1VCTEUgfAorCQkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQkJU05EUlZfUENNX0lORk9fUkVTVU1FIHwKKwkJCVNORFJWX1BDTV9JTkZPX01NQVB8CisJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCS5mb3JtYXRzID0gKFNORFJWX1BDTV9GTVRCSVRfUzE2IHwgU05EUlZfUENNX0ZNVEJJVF9VMTYgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjQgfCBTTkRSVl9QQ01fRk1UQklUX1UyNCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMiB8IFNORFJWX1BDTV9GTVRCSVRfVTMyKSwKKwkucmF0ZXMgPSAoU05EUlZfUENNX1JBVEVfODAwMHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKSwKKwkucmF0ZV9taW4gPSBTU1RfTUlOX1JBVEUsCisJLnJhdGVfbWF4ID0gU1NUX01BWF9SQVRFLAorCS5jaGFubmVsc19taW4gPQlTU1RfTUlOX0NIQU5ORUwsCisJLmNoYW5uZWxzX21heCA9CVNTVF9NQVhfQ0hBTk5FTCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IFNTVF9NQVhfQlVGRkVSLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gU1NUX01JTl9QRVJJT0RfQllURVMsCisJLnBlcmlvZF9ieXRlc19tYXggPSBTU1RfTUFYX1BFUklPRF9CWVRFUywKKwkucGVyaW9kc19taW4gPSBTU1RfTUlOX1BFUklPRFMsCisJLnBlcmlvZHNfbWF4ID0gU1NUX01BWF9QRVJJT0RTLAorCS5maWZvX3NpemUgPSBTU1RfRklGT19TSVpFLAorfTsKKworLyogTUZMRCAtIE1TSUMgKi8KK3N0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgc3N0X3BsYXRmb3JtX2RhaVtdID0geworeworCS5uYW1lID0gIkhlYWRzZXQtY3B1LWRhaSIsCisJLmlkID0gMCwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSBTU1RfU1RFUkVPLAorCQkuY2hhbm5lbHNfbWF4ID0gU1NUX1NURVJFTywKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSA1LAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSwKKwl9LAorfSwKK3sKKwkubmFtZSA9ICJTcGVha2VyLWNwdS1kYWkiLAorCS5pZCA9IDEsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gU1NUX01PTk8sCisJCS5jaGFubmVsc19tYXggPSBTU1RfU1RFUkVPLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSwKKwl9LAorfSwKK3sKKwkubmFtZSA9ICJWaWJyYTEtY3B1LWRhaSIsCisJLmlkID0gMiwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSBTU1RfTU9OTywKKwkJLmNoYW5uZWxzX21heCA9IFNTVF9NT05PLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSwKKwl9LAorfSwKK3sKKwkubmFtZSA9ICJWaWJyYTItY3B1LWRhaSIsCisJLmlkID0gMywKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSBTU1RfTU9OTywKKwkJLmNoYW5uZWxzX21heCA9IFNTVF9TVEVSRU8sCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCX0sCit9LAorfTsKKworLyogaGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIGlubGluZSB2b2lkIHNzdF9zZXRfc3RyZWFtX3N0YXR1cyhzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW0sCisJCQkJCWludCBzdGF0ZSkKK3sKKwlzcGluX2xvY2soJnN0cmVhbS0+c3RhdHVzX2xvY2spOworCXN0cmVhbS0+c3RyZWFtX3N0YXR1cyA9IHN0YXRlOworCXNwaW5fdW5sb2NrKCZzdHJlYW0tPnN0YXR1c19sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3N0X2dldF9zdHJlYW1fc3RhdHVzKHN0cnVjdCBzc3RfcnVudGltZV9zdHJlYW0gKnN0cmVhbSkKK3sKKwlpbnQgc3RhdGU7CisKKwlzcGluX2xvY2soJnN0cmVhbS0+c3RhdHVzX2xvY2spOworCXN0YXRlID0gc3RyZWFtLT5zdHJlYW1fc3RhdHVzOworCXNwaW5fdW5sb2NrKCZzdHJlYW0tPnN0YXR1c19sb2NrKTsKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIHNzdF9maWxsX3BjbV9wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9zc3Rfc3RyZWFtX3BhcmFtcyAqcGFyYW0pCit7CisKKwlwYXJhbS0+dWMucGNtX3BhcmFtcy5jb2RlYyA9IFNTVF9DT0RFQ19UWVBFX1BDTTsKKwlwYXJhbS0+dWMucGNtX3BhcmFtcy5udW1fY2hhbiA9ICh1OCkgc3Vic3RyZWFtLT5ydW50aW1lLT5jaGFubmVsczsKKwlwYXJhbS0+dWMucGNtX3BhcmFtcy5wY21fd2Rfc3ogPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnNhbXBsZV9iaXRzOworCXBhcmFtLT51Yy5wY21fcGFyYW1zLnJlc2VydmVkID0gMDsKKwlwYXJhbS0+dWMucGNtX3BhcmFtcy5zZnJlcSA9IHN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZTsKKwlwYXJhbS0+dWMucGNtX3BhcmFtcy5yaW5nX2J1ZmZlcl9zaXplID0KKwkJCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJcGFyYW0tPnVjLnBjbV9wYXJhbXMucGVyaW9kX2NvdW50ID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwlwYXJhbS0+dWMucGNtX3BhcmFtcy5yaW5nX2J1ZmZlcl9hZGRyID0KKwkJCQl2aXJ0X3RvX3BoeXMoc3Vic3RyZWFtLT5kbWFfYnVmZmVyLmFyZWEpOworCXByX2RlYnVnKCJwZXJpb2RfY250ID0gJWRcbiIsIHBhcmFtLT51Yy5wY21fcGFyYW1zLnBlcmlvZF9jb3VudCk7CisJcHJfZGVidWcoInNmcmVxPSAlZCwgd2Rfc3ogPSAlZFxuIiwKKwkJIHBhcmFtLT51Yy5wY21fcGFyYW1zLnNmcmVxLCBwYXJhbS0+dWMucGNtX3BhcmFtcy5wY21fd2Rfc3opOworfQorCitzdGF0aWMgaW50IHNzdF9wbGF0Zm9ybV9hbGxvY19zdHJlYW0oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNzdF9ydW50aW1lX3N0cmVhbSAqc3RyZWFtID0KKwkJCXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc3N0X3N0cmVhbV9wYXJhbXMgcGFyYW0gPSB7e3swLH0sfSx9OworCXN0cnVjdCBzbmRfc3N0X3BhcmFtcyBzdHJfcGFyYW1zID0gezB9OworCWludCByZXRfdmFsOworCisJLyogc2V0IGNvZGVjIHBhcmFtcyBhbmQgaW5mb3JtIFNTVCBkcml2ZXIgdGhlIHNhbWUgKi8KKwlzc3RfZmlsbF9wY21fcGFyYW1zKHN1YnN0cmVhbSwgJnBhcmFtKTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gc3Vic3RyZWFtLT5kbWFfYnVmZmVyLmFyZWE7CisJc3RyX3BhcmFtcy5zcGFyYW1zID0gcGFyYW07CisJc3RyX3BhcmFtcy5jb2RlYyA9ICBwYXJhbS51Yy5wY21fcGFyYW1zLmNvZGVjOworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXN0cl9wYXJhbXMub3BzID0gU1RSRUFNX09QU19QTEFZQkFDSzsKKwkJc3RyX3BhcmFtcy5kZXZpY2VfdHlwZSA9IHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UgKyAxOworCQlwcl9kZWJ1ZygiUGxheWJjayBzdHJlYW0sRGV2aWNlICVkXG4iLAorCQkJCQlzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlKTsKKwl9IGVsc2UgeworCQlzdHJfcGFyYW1zLm9wcyA9IFNUUkVBTV9PUFNfQ0FQVFVSRTsKKwkJc3RyX3BhcmFtcy5kZXZpY2VfdHlwZSA9IFNORF9TU1RfREVWSUNFX0NBUFRVUkU7CisJCXByX2RlYnVnKCJDYXB0dXJlIHN0cmVhbSxEZXZpY2UgJWRcbiIsCisJCQkJCXN1YnN0cmVhbS0+cGNtLT5kZXZpY2UpOworCX0KKwlyZXRfdmFsID0gc3RyZWFtLT5zc3RkcnZfb3BzLT5wY21fY29udHJvbC0+b3Blbigmc3RyX3BhcmFtcyk7CisJcHJfZGVidWcoIlNTVF9TTkRfUExBWS9DQVBUVVJFIHJldF92YWwgPSAleFxuIiwgcmV0X3ZhbCk7CisJaWYgKHJldF92YWwgPCAwKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCXN0cmVhbS0+c3RyZWFtX2luZm8uc3RyX2lkID0gcmV0X3ZhbDsKKwlwcl9kZWJ1Zygic3RyIGlkIDogICVkXG4iLCBzdHJlYW0tPnN0cmVhbV9pbmZvLnN0cl9pZCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNzdF9wZXJpb2RfZWxhcHNlZCh2b2lkICptYWRfc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gbWFkX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW07CisJaW50IHN0YXR1czsKKworCWlmICghc3Vic3RyZWFtIHx8ICFzdWJzdHJlYW0tPnJ1bnRpbWUpCisJCXJldHVybjsKKwlzdHJlYW0gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpZiAoIXN0cmVhbSkKKwkJcmV0dXJuOworCXN0YXR1cyA9IHNzdF9nZXRfc3RyZWFtX3N0YXR1cyhzdHJlYW0pOworCWlmIChzdGF0dXMgIT0gU1NUX1BMQVRGT1JNX1JVTk5JTkcpCisJCXJldHVybjsKKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgc3N0X3BsYXRmb3JtX2luaXRfc3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzc3RfcnVudGltZV9zdHJlYW0gKnN0cmVhbSA9CisJCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0X3ZhbDsKKworCXByX2RlYnVnKCJzZXR0aW5nIGJ1ZmZlciBwdHIgcGFyYW1cbiIpOworCXNzdF9zZXRfc3RyZWFtX3N0YXR1cyhzdHJlYW0sIFNTVF9QTEFURk9STV9JTklUKTsKKwlzdHJlYW0tPnN0cmVhbV9pbmZvLnBlcmlvZF9lbGFwc2VkID0gc3N0X3BlcmlvZF9lbGFwc2VkOworCXN0cmVhbS0+c3RyZWFtX2luZm8ubWFkX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlzdHJlYW0tPnN0cmVhbV9pbmZvLmJ1ZmZlcl9wdHIgPSAwOworCXN0cmVhbS0+c3RyZWFtX2luZm8uc2ZyZXEgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnJhdGU7CisJcmV0X3ZhbCA9IHN0cmVhbS0+c3N0ZHJ2X29wcy0+cGNtX2NvbnRyb2wtPmRldmljZV9jb250cm9sKAorCQkJU1NUX1NORF9TVFJFQU1fSU5JVCwgJnN0cmVhbS0+c3RyZWFtX2luZm8pOworCWlmIChyZXRfdmFsKQorCQlwcl9lcnIoImNvbnRyb2xfc2V0IHJldCBlcnJvciAlZFxuIiwgcmV0X3ZhbCk7CisJcmV0dXJuIHJldF92YWw7CisKK30KKy8qIGVuZCAtLSBoZWxwZXIgZnVuY3Rpb25zICovCisKK3N0YXRpYyBpbnQgc3N0X3BsYXRmb3JtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwlzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW07CisJaW50IHJldF92YWwgPSAwOworCisJcHJfZGVidWcoInNzdF9wbGF0Zm9ybV9vcGVuIGNhbGxlZFxuIik7CisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlydW50aW1lLT5odyA9IHNzdF9wbGF0Zm9ybV9wY21faHc7CisJc3RyZWFtID0ga3phbGxvYyhzaXplb2YoKnN0cmVhbSksIEdGUF9LRVJORUwpOworCWlmICghc3RyZWFtKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdCgmc3RyZWFtLT5zdGF0dXNfbG9jayk7CisJc3RyZWFtLT5zdHJlYW1faW5mby5zdHJfaWQgPSAwOworCXNzdF9zZXRfc3RyZWFtX3N0YXR1cyhzdHJlYW0sIFNTVF9QTEFURk9STV9JTklUKTsKKwlzdHJlYW0tPnN0cmVhbV9pbmZvLm1hZF9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBTU1QgQVBJIHNldCAqLworCXN0cmVhbS0+c3N0ZHJ2X29wcyA9IGt6YWxsb2Moc2l6ZW9mKCpzdHJlYW0tPnNzdGRydl9vcHMpLAorCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICghc3RyZWFtLT5zc3RkcnZfb3BzKSB7CisJCXByX2Vycigic3N0OiBtZW0gYWxsb2NhdGlvbiBmb3Igb3BzIGZhaWxcbiIpOworCQlrZnJlZShzdHJlYW0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3RyZWFtLT5zc3RkcnZfb3BzLT52ZW5kb3JfaWQgPSBNU0lDX1ZFTkRPUl9JRDsKKwkvKiByZWdpc3RlcmluZyB3aXRoIFNTVCBkcml2ZXIgdG8gZ2V0IGFjY2VzcyB0byBTU1QgQVBJcyB0byB1c2UgKi8KKwlyZXRfdmFsID0gcmVnaXN0ZXJfc3N0X2NhcmQoc3RyZWFtLT5zc3RkcnZfb3BzKTsKKwlpZiAocmV0X3ZhbCkgeworCQlwcl9lcnIoInNzdDogc3N0IGNhcmQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiByZXRfdmFsOworCX0KKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBzdHJlYW07CisJcmV0dXJuIHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsCisJCQkgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworfQorCitzdGF0aWMgaW50IHNzdF9wbGF0Zm9ybV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW07CisJaW50IHJldF92YWwgPSAwLCBzdHJfaWQ7CisKKwlwcl9kZWJ1Zygic3N0X3BsYXRmb3JtX2Nsb3NlIGNhbGxlZFxuIik7CisJc3RyZWFtID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RyX2lkID0gc3RyZWFtLT5zdHJlYW1faW5mby5zdHJfaWQ7CisJaWYgKHN0cl9pZCkKKwkJcmV0X3ZhbCA9IHN0cmVhbS0+c3N0ZHJ2X29wcy0+cGNtX2NvbnRyb2wtPmNsb3NlKHN0cl9pZCk7CisJa2ZyZWUoc3RyZWFtLT5zc3RkcnZfb3BzKTsKKwlrZnJlZShzdHJlYW0pOworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgaW50IHNzdF9wbGF0Zm9ybV9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW07CisJaW50IHJldF92YWwgPSAwLCBzdHJfaWQ7CisKKwlwcl9kZWJ1Zygic3N0X3BsYXRmb3JtX3BjbV9wcmVwYXJlIGNhbGxlZFxuIik7CisJc3RyZWFtID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RyX2lkID0gc3RyZWFtLT5zdHJlYW1faW5mby5zdHJfaWQ7CisJaWYgKHN0cmVhbS0+c3RyZWFtX2luZm8uc3RyX2lkKSB7CisJCXJldF92YWwgPSBzdHJlYW0tPnNzdGRydl9vcHMtPnBjbV9jb250cm9sLT5kZXZpY2VfY29udHJvbCgKKwkJCQkJU1NUX1NORF9EUk9QLCAmc3RyX2lkKTsKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCisJcmV0X3ZhbCA9IHNzdF9wbGF0Zm9ybV9hbGxvY19zdHJlYW0oc3Vic3RyZWFtKTsKKwlpZiAocmV0X3ZhbCA8IDApCisJCXJldHVybiByZXRfdmFsOworCXNucHJpbnRmKHN1YnN0cmVhbS0+cGNtLT5pZCwgc2l6ZW9mKHN1YnN0cmVhbS0+cGNtLT5pZCksCisJCQkiJWQiLCBzdHJlYW0tPnN0cmVhbV9pbmZvLnN0cl9pZCk7CisKKwlyZXRfdmFsID0gc3N0X3BsYXRmb3JtX2luaXRfc3RyZWFtKHN1YnN0cmVhbSk7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuaW5mbyA9IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSOworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgaW50IHNzdF9wbGF0Zm9ybV9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJaW50IGNtZCkKK3sKKwlpbnQgcmV0X3ZhbCA9IDAsIHN0cl9pZDsKKwlzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW07CisJaW50IHN0cl9jbWQsIHN0YXR1czsKKworCXByX2RlYnVnKCJzc3RfcGxhdGZvcm1fcGNtX3RyaWdnZXIgY2FsbGVkXG4iKTsKKwlzdHJlYW0gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJfaWQgPSBzdHJlYW0tPnN0cmVhbV9pbmZvLnN0cl9pZDsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCXByX2RlYnVnKCJzc3Q6IFRyaWdnZXIgU3RhcnRcbiIpOworCQlzdHJfY21kID0gU1NUX1NORF9TVEFSVDsKKwkJc3RhdHVzID0gU1NUX1BMQVRGT1JNX1JVTk5JTkc7CisJCXN0cmVhbS0+c3RyZWFtX2luZm8ubWFkX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlwcl9kZWJ1Zygic3N0OiBpbiBzdG9wXG4iKTsKKwkJc3RyX2NtZCA9IFNTVF9TTkRfRFJPUDsKKwkJc3RhdHVzID0gU1NUX1BMQVRGT1JNX0RST1BQRUQ7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJcHJfZGVidWcoInNzdDogaW4gcGF1c2VcbiIpOworCQlzdHJfY21kID0gU1NUX1NORF9QQVVTRTsKKwkJc3RhdHVzID0gU1NUX1BMQVRGT1JNX1BBVVNFRDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlwcl9kZWJ1Zygic3N0OiBpbiBwYXVzZSByZWxlYXNlXG4iKTsKKwkJc3RyX2NtZCA9IFNTVF9TTkRfUkVTVU1FOworCQlzdGF0dXMgPSBTU1RfUExBVEZPUk1fUlVOTklORzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldF92YWwgPSBzdHJlYW0tPnNzdGRydl9vcHMtPnBjbV9jb250cm9sLT5kZXZpY2VfY29udHJvbChzdHJfY21kLAorCQkJCQkJCQkmc3RyX2lkKTsKKwlpZiAoIXJldF92YWwpCisJCXNzdF9zZXRfc3RyZWFtX3N0YXR1cyhzdHJlYW0sIHN0YXR1cyk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc3N0X3BsYXRmb3JtX3BjbV9wb2ludGVyCisJCQkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNzdF9ydW50aW1lX3N0cmVhbSAqc3RyZWFtOworCWludCByZXRfdmFsLCBzdGF0dXM7CisJc3RydWN0IHBjbV9zdHJlYW1faW5mbyAqc3RyX2luZm87CisKKwlzdHJlYW0gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdGF0dXMgPSBzc3RfZ2V0X3N0cmVhbV9zdGF0dXMoc3RyZWFtKTsKKwlpZiAoc3RhdHVzID09IFNTVF9QTEFURk9STV9JTklUKQorCQlyZXR1cm4gMDsKKwlzdHJfaW5mbyA9ICZzdHJlYW0tPnN0cmVhbV9pbmZvOworCXJldF92YWwgPSBzdHJlYW0tPnNzdGRydl9vcHMtPnBjbV9jb250cm9sLT5kZXZpY2VfY29udHJvbCgKKwkJCQlTU1RfU05EX0JVRkZFUl9QT0lOVEVSLCBzdHJfaW5mbyk7CisJaWYgKHJldF92YWwpIHsKKwkJcHJfZXJyKCJzc3Q6IGVycm9yIGNvZGUgPSAlZFxuIiwgcmV0X3ZhbCk7CisJCXJldHVybiByZXRfdmFsOworCX0KKwlyZXR1cm4gc3RyZWFtLT5zdHJlYW1faW5mby5idWZmZXJfcHRyOworfQorCitzdGF0aWMgaW50IHNzdF9wbGF0Zm9ybV9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcykpOworCW1lbXNldChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhLCAwLCBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc3N0X3BsYXRmb3JtX29wcyA9IHsKKwkub3BlbiA9IHNzdF9wbGF0Zm9ybV9vcGVuLAorCS5jbG9zZSA9IHNzdF9wbGF0Zm9ybV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkucHJlcGFyZSA9IHNzdF9wbGF0Zm9ybV9wY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9IHNzdF9wbGF0Zm9ybV9wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9IHNzdF9wbGF0Zm9ybV9wY21fcG9pbnRlciwKKwkuaHdfcGFyYW1zID0gc3N0X3BsYXRmb3JtX3BjbV9od19wYXJhbXMsCit9OworCitzdGF0aWMgdm9pZCBzc3RfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlwcl9kZWJ1Zygic3N0X3BjbV9mcmVlIGNhbGxlZFxuIik7CisJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7Cit9CisKK2ludCBzc3RfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCXByX2RlYnVnKCJzc3RfcGNtX25ldyBjYWxsZWRcbiIpOworCWlmIChkYWktPmRyaXZlci0+cGxheWJhY2suY2hhbm5lbHNfbWluIHx8CisJCQlkYWktPmRyaXZlci0+Y2FwdHVyZS5jaGFubmVsc19taW4pIHsKKwkJcmV0dmFsID0gIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLAorCQkJU05EUlZfRE1BX1RZUEVfQ09OVElOVU9VUywKKwkJCXNuZF9kbWFfY29udGludW91c19kYXRhKEdGUF9LRVJORUwpLAorCQkJU1NUX01JTl9CVUZGRVIsIFNTVF9NQVhfQlVGRkVSKTsKKwkJaWYgKHJldHZhbCkgeworCQkJcHJfZXJyKCJkbWEgYnVmZmVyIGFsbG9jYXRpb25mIGZhaWxcbiIpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVyIHNzdF9zb2NfcGxhdGZvcm1fZHJ2ID0geworCS5vcHMJCT0gJnNzdF9wbGF0Zm9ybV9vcHMsCisJLnBjbV9uZXcJPSBzc3RfcGNtX25ldywKKwkucGNtX2ZyZWUJPSBzc3RfcGNtX2ZyZWUsCit9OworCitzdGF0aWMgaW50IHNzdF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlwcl9kZWJ1Zygic3N0X3BsYXRmb3JtX3Byb2JlIGNhbGxlZFxuIik7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2LCAmc3N0X3NvY19wbGF0Zm9ybV9kcnYpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJyZWdpc3RlcmluZyBzb2MgcGxhdGZvcm0gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoJnBkZXYtPmRldiwKKwkJCQlzc3RfcGxhdGZvcm1fZGFpLCBBUlJBWV9TSVpFKHNzdF9wbGF0Zm9ybV9kYWkpKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigicmVnaXN0ZXJpbmcgY3B1IGRhaXMgZmFpbGVkXG4iKTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNzdF9wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZwZGV2LT5kZXYsIEFSUkFZX1NJWkUoc3N0X3BsYXRmb3JtX2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKKwlwcl9kZWJ1Zygic3N0X3BsYXRmb3JtX3JlbW92ZSBzdWNlc3NcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzc3RfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAic3N0LXBsYXRmb3JtIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHNzdF9wbGF0Zm9ybV9wcm9iZSwKKwkucmVtb3ZlCQk9IHNzdF9wbGF0Zm9ybV9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzc3Rfc29jX3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKwlwcl9kZWJ1Zygic3N0X3NvY19wbGF0Zm9ybV9pbml0IGNhbGxlZFxuIik7CisJcmV0dXJuICBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNzdF9wbGF0Zm9ybV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc3N0X3NvY19wbGF0Zm9ybV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNzdF9zb2NfcGxhdGZvcm1fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzc3RfcGxhdGZvcm1fZHJpdmVyKTsKKwlwcl9kZWJ1Zygic3N0X3NvY19wbGF0Zm9ybV9leGl0IHN1Y2Vzc1xuIik7Cit9Cittb2R1bGVfZXhpdChzc3Rfc29jX3BsYXRmb3JtX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgSW50ZWwoUikgTUlEIFBsYXRmb3JtIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVmlub2QgS291bCA8dmlub2Qua291bEBpbnRlbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJIYXJzaGEgUHJpeWEgPHByaXlhLmhhcnNoYUBpbnRlbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNzdC1wbGF0Zm9ybSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL21pZC14ODYvc3N0X3BsYXRmb3JtLmggYi9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjM3MDI4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL21pZC14ODYvc3N0X3BsYXRmb3JtLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBzc3RfcGxhdGZvcm0uaCAtIEludGVsIE1JRCBQbGF0Zm9ybSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnAKKyAqICBBdXRob3I6IFZpbm9kIEtvdWwgPHZpbm9kLmtvdWxAaW50ZWwuY29tPgorICogIEF1dGhvcjogSGFyc2hhIFByaXlhIDxwcml5YS5oYXJzaGFAaW50ZWwuY29tPgorICogIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqCisgKi8KKworI2lmbmRlZiBfX1NTVF9QTEFURk9STURSVl9IX18KKyNkZWZpbmUgX19TU1RfUExBVEZPUk1EUlZfSF9fCisKKyNkZWZpbmUgU1NUX01PTk8JCTEKKyNkZWZpbmUgU1NUX1NURVJFTwkJMgorI2RlZmluZSBTU1RfTUFYX0NBUAkJNQorCisjZGVmaW5lIFNTVF9NSU5fUkFURQkJODAwMAorI2RlZmluZSBTU1RfTUFYX1JBVEUJCTQ4MDAwCisjZGVmaW5lIFNTVF9NSU5fQ0hBTk5FTAkJMQorI2RlZmluZSBTU1RfTUFYX0NIQU5ORUwJCTUKKyNkZWZpbmUgU1NUX01BWF9CVUZGRVIJCSg4MDAqMTAyNCkKKyNkZWZpbmUgU1NUX01JTl9CVUZGRVIJCSg4MDAqMTAyNCkKKyNkZWZpbmUgU1NUX01JTl9QRVJJT0RfQllURVMJMzIKKyNkZWZpbmUgU1NUX01BWF9QRVJJT0RfQllURVMJU1NUX01BWF9CVUZGRVIKKyNkZWZpbmUgU1NUX01JTl9QRVJJT0RTCQkyCisjZGVmaW5lIFNTVF9NQVhfUEVSSU9EUwkJKDEwMjQqMikKKyNkZWZpbmUgU1NUX0ZJRk9fU0laRQkJMAorI2RlZmluZSBTU1RfQ0FSRF9OQU1FUwkJImludGVsX21pZF9jYXJkIgorI2RlZmluZSBNU0lDX1ZFTkRPUl9JRAkJMworCitzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtIHsKKwlpbnQgICAgIHN0cmVhbV9zdGF0dXM7CisJc3RydWN0IHBjbV9zdHJlYW1faW5mbyBzdHJlYW1faW5mbzsKKwlzdHJ1Y3QgaW50ZWxfc3N0X2NhcmRfb3BzICpzc3RkcnZfb3BzOworCXNwaW5sb2NrX3QJc3RhdHVzX2xvY2s7Cit9OworCitlbnVtIHNzdF9kcnZfc3RhdHVzIHsKKwlTU1RfUExBVEZPUk1fSU5JVCA9IDEsCisJU1NUX1BMQVRGT1JNX1NUQVJURUQsCisJU1NUX1BMQVRGT1JNX1JVTk5JTkcsCisJU1NUX1BMQVRGT1JNX1BBVVNFRCwKKwlTU1RfUExBVEZPUk1fRFJPUFBFRCwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvS2NvbmZpZyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKaW5kZXggYTA4OGRiNi4uYjU5MjI5OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCkBAIC0yNCw2ICsyNCw3IEBACiAJc2VsZWN0IE9NQVBfTUNCU1AKIAlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKKwlzZWxlY3QgU05EX1NPQ19UUEE2MTMwQTIKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIE5va2lhIFJYLTUxCiAJICBoYXJkd2FyZS4gVGhpcyBpcyBhbHNvIGtub3duIGFzIE5va2lhIE45MDAgcHJvZHVjdC4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwppbmRleCBkMjAzZjRkLi4yMTc1ZjA5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCkBAIC02OSwxMTAgKzY5LDYgQEAKICAqLwogc3RhdGljIHN0cnVjdCBvbWFwX3BjbV9kbWFfZGF0YSBvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW05VTV9MSU5LU11bMl07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotc3RhdGljIGNvbnN0IGludCBvbWFwMV9kbWFfcmVxc1tdWzJdID0gewotCXsgT01BUF9ETUFfTUNCU1AxX1RYLCBPTUFQX0RNQV9NQ0JTUDFfUlggfSwKLQl7IE9NQVBfRE1BX01DQlNQMl9UWCwgT01BUF9ETUFfTUNCU1AyX1JYIH0sCi0JeyBPTUFQX0RNQV9NQ0JTUDNfVFgsIE9NQVBfRE1BX01DQlNQM19SWCB9LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAxX21jYnNwX3BvcnRbXVsyXSA9IHsKLQl7IE9NQVAxNTEwX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSMSwKLQkgIE9NQVAxNTEwX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSMSB9LAotCXsgT01BUDE1MTBfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxLAotCSAgT01BUDE1MTBfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxIH0sCi0JeyBPTUFQMTUxMF9NQ0JTUDNfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUjEsCi0JICBPTUFQMTUxMF9NQ0JTUDNfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUjEgfSwKLX07Ci0jZWxzZQotc3RhdGljIGNvbnN0IGludCBvbWFwMV9kbWFfcmVxc1tdWzJdID0ge307Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMV9tY2JzcF9wb3J0W11bMl0gPSB7fTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKLXN0YXRpYyBjb25zdCBpbnQgb21hcDI0eHhfZG1hX3JlcXNbXVsyXSA9IHsKLQl7IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlggfSwKLQl7IE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlggfSwKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQotCXsgT01BUDI0WFhfRE1BX01DQlNQM19UWCwgT01BUDI0WFhfRE1BX01DQlNQM19SWCB9LAotCXsgT01BUDI0WFhfRE1BX01DQlNQNF9UWCwgT01BUDI0WFhfRE1BX01DQlNQNF9SWCB9LAotCXsgT01BUDI0WFhfRE1BX01DQlNQNV9UWCwgT01BUDI0WFhfRE1BX01DQlNQNV9SWCB9LAotI2VuZGlmCi19OwotI2Vsc2UKLXN0YXRpYyBjb25zdCBpbnQgb21hcDI0eHhfZG1hX3JlcXNbXVsyXSA9IHt9OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotc3RhdGljIGNvbnN0IGludCBvbWFwNDR4eF9kbWFfcmVxc1tdWzJdID0gewotCXsgT01BUDQ0WFhfRE1BX01DQlNQMV9UWCwgT01BUDQ0WFhfRE1BX01DQlNQMV9SWCB9LAotCXsgT01BUDQ0WFhfRE1BX01DQlNQMl9UWCwgT01BUDQ0WFhfRE1BX01DQlNQMl9SWCB9LAotCXsgT01BUDQ0WFhfRE1BX01DQlNQM19UWCwgT01BUDQ0WFhfRE1BX01DQlNQM19SWCB9LAotCXsgT01BUDQ0WFhfRE1BX01DQlNQNF9UWCwgT01BUDQ0WFhfRE1BX01DQlNQNF9SWCB9LAotfTsKLSNlbHNlCi1zdGF0aWMgY29uc3QgaW50IG9tYXA0NHh4X2RtYV9yZXFzW11bMl0gPSB7fTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAyNDIwX21jYnNwX3BvcnRbXVsyXSA9IHsKLQl7IE9NQVAyNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSMSwKLQkgIE9NQVAyNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSMSB9LAotCXsgT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxLAotCSAgT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxIH0sCi19OwotI2Vsc2UKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAyNDIwX21jYnNwX3BvcnRbXVsyXSA9IHt9OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDI0MzBfbWNic3BfcG9ydFtdWzJdID0gewotCXsgT01BUDI0WFhfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCi0JICBPTUFQMjRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAotCXsgT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCi0JICBPTUFQMjRYWF9NQ0JTUDJfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAotCXsgT01BUDI0MzBfTUNCU1AzX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCi0JICBPTUFQMjQzMF9NQ0JTUDNfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAotCXsgT01BUDI0MzBfTUNCU1A0X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCi0JICBPTUFQMjQzMF9NQ0JTUDRfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAotCXsgT01BUDI0MzBfTUNCU1A1X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCi0JICBPTUFQMjQzMF9NQ0JTUDVfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAotfTsKLSNlbHNlCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMjQzMF9tY2JzcF9wb3J0W11bMl0gPSB7fTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAzNHh4X21jYnNwX3BvcnRbXVsyXSA9IHsKLQl7IE9NQVAzNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAotCSAgT01BUDM0WFhfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKLQl7IE9NQVAzNFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAotCSAgT01BUDM0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKLQl7IE9NQVAzNFhYX01DQlNQM19CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAotCSAgT01BUDM0WFhfTUNCU1AzX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKLQl7IE9NQVAzNFhYX01DQlNQNF9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAotCSAgT01BUDM0WFhfTUNCU1A0X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKLQl7IE9NQVAzNFhYX01DQlNQNV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAotCSAgT01BUDM0WFhfTUNCU1A1X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKLX07Ci0jZWxzZQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDM0eHhfbWNic3BfcG9ydFtdWzJdID0ge307Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwNDR4eF9tY2JzcF9wb3J0W11bMl0gPSB7Ci0JeyBPTUFQNDRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKLQkgIE9NQVA0NFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCi0JeyBPTUFQNDRYWF9NQ0JTUDJfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKLQkgIE9NQVA0NFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCi0JeyBPTUFQNDRYWF9NQ0JTUDNfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKLQkgIE9NQVA0NFhYX01DQlNQM19CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCi0JeyBPTUFQNDRYWF9NQ0JTUDRfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKLQkgIE9NQVA0NFhYX01DQlNQNF9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCi19OwotI2Vsc2UKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXA0NHh4X21jYnNwX3BvcnRbXVsyXSA9IHt9OwotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIG9tYXBfbWNic3Bfc2V0X3RocmVzaG9sZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CkBAIC0zNDYsMjQgKzI0MiwxMCBAQAogCXVuc2lnbmVkIGludCBmb3JtYXQsIGRpdiwgZnJhbWVzaXplLCBtYXN0ZXI7CiAKIAlkbWFfZGF0YSA9ICZvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2NwdV9kYWktPmlkXVtzdWJzdHJlYW0tPnN0cmVhbV07Ci0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCWRtYSA9IG9tYXAxX2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwotCQlwb3J0ID0gb21hcDFfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7Ci0JCWRtYSA9IG9tYXAyNHh4X2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwotCQlwb3J0ID0gb21hcDI0MjBfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7Ci0JCWRtYSA9IG9tYXAyNHh4X2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwotCQlwb3J0ID0gb21hcDI0MzBfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzQzeCgpKSB7Ci0JCWRtYSA9IG9tYXAyNHh4X2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwotCQlwb3J0ID0gb21hcDM0eHhfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKLQkgfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQlkbWEgPSBvbWFwNDR4eF9kbWFfcmVxc1tidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKLQkJcG9ydCA9IG9tYXA0NHh4X21jYnNwX3BvcnRbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCisJZG1hID0gb21hcF9tY2JzcF9kbWFfY2hfcGFyYW1zKGJ1c19pZCwgc3Vic3RyZWFtLT5zdHJlYW0pOworCXBvcnQgPSBvbWFwX21jYnNwX2RtYV9yZWdfcGFyYW1zKGJ1c19pZCwgc3Vic3RyZWFtLT5zdHJlYW0pOworCiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgogCQlkbWFfZGF0YS0+ZGF0YV90eXBlID0gT01BUF9ETUFfREFUQV9UWVBFX1MxNjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaCBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaAppbmRleCAxMTBjMTA2Li4zN2RjNzIxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCkBAIC00Myw3ICs0Myw3IEBACiAJT01BUF9NQ0JTUF9DTEtHRFYsCQkvKiBTYW1wbGUgcmF0ZSBnZW5lcmF0b3IgZGl2aWRlciAqLwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCisjaWYgZGVmaW5lZChDT05GSUdfU09DX09NQVAyNDIwKQogI2RlZmluZSBOVU1fTElOS1MJMgogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKQEAgLTU0LDcgKzU0LDcgQEAKICN1bmRlZiAgTlVNX0xJTktTCiAjZGVmaW5lIE5VTV9MSU5LUwk0CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX1NPQ19PTUFQMjQzMCkKICN1bmRlZiAgTlVNX0xJTktTCiAjZGVmaW5lIE5VTV9MSU5LUwk1CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3J4NTEuYyBiL3NvdW5kL3NvYy9vbWFwL3J4NTEuYwppbmRleCAwOWZiMGRmLi5kMDk4NjIyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9yeDUxLmMKKysrIGIvc291bmQvc29jL29tYXAvcng1MS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgorI2luY2x1ZGUgIi4uL2NvZGVjcy90cGE2MTMwYTIuaCIKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKQEAgLTM5LDYgKzQwLDcgQEAKIAogI2RlZmluZSBSWDUxX1RWT1VUX1NFTF9HUElPCQk0MAogI2RlZmluZSBSWDUxX0pBQ0tfREVURUNUX0dQSU8JCTE3NworI2RlZmluZSBSWDUxX0VDSV9TV19HUElPCQkxODIKIC8qCiAgKiBSRVZJU0lUOiBUV0w0MDMwIEdQSU8gYmFzZSBpbiBSWC01MS4gTm93IHN0YXRpY2FsbHkgZGVmaW5lZCB0byAxOTIuIFRoaXMKICAqIGdwaW8gaXMgcmVzZXJ2ZWQgaW4gYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKQEAgLTQ3LDcgKzQ5LDkgQEAKIAogZW51bSB7CiAJUlg1MV9KQUNLX0RJU0FCTEVELAotCVJYNTFfSkFDS19UVk9VVCwJCS8qIHR2LW91dCAqLworCVJYNTFfSkFDS19UVk9VVCwJCS8qIHR2LW91dCB3aXRoIHN0ZXJlbyBvdXRwdXQgKi8KKwlSWDUxX0pBQ0tfSFAsCQkJLyogaGVhZHBob25lOiBzdGVyZW8gb3V0cHV0LCBubyBtaWMgKi8KKwlSWDUxX0pBQ0tfSFMsCQkJLyogaGVhZHNldDogc3RlcmVvIG91dHB1dCB3aXRoIG1pYyAqLwogfTsKIAogc3RhdGljIGludCByeDUxX3Nwa19mdW5jOwpAQCAtNTcsNiArNjEsMTkgQEAKIHN0YXRpYyB2b2lkIHJ4NTFfZXh0X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwlpbnQgaHAgPSAwLCBocyA9IDAsIHR2b3V0ID0gMDsKKworCXN3aXRjaCAocng1MV9qYWNrX2Z1bmMpIHsKKwljYXNlIFJYNTFfSkFDS19UVk9VVDoKKwkJdHZvdXQgPSAxOworCQlocCA9IDE7CisJCWJyZWFrOworCWNhc2UgUlg1MV9KQUNLX0hTOgorCQlocyA9IDE7CisJY2FzZSBSWDUxX0pBQ0tfSFA6CisJCWhwID0gMTsKKwkJYnJlYWs7CisJfQogCiAJaWYgKHJ4NTFfc3BrX2Z1bmMpCiAJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CkBAIC02Niw5ICs4MywxNiBAQAogCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRE1pYyIpOwogCWVsc2UKIAkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJETWljIik7CisJaWYgKGhwKQorCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKKwllbHNlCisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKKwlpZiAoaHMpCisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIUyBNaWMiKTsKKwllbHNlCisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSFMgTWljIik7CiAKLQlncGlvX3NldF92YWx1ZShSWDUxX1RWT1VUX1NFTF9HUElPLAotCQkgICAgICAgcng1MV9qYWNrX2Z1bmMgPT0gUlg1MV9KQUNLX1RWT1VUKTsKKwlncGlvX3NldF92YWx1ZShSWDUxX1RWT1VUX1NFTF9HUElPLCB0dm91dCk7CiAKIAlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIH0KQEAgLTE1Myw2ICsxNzcsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCByeDUxX2hwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5kYXBtLT5jb2RlYzsKKworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKQorCQl0cGE2MTMwYTJfc3RlcmVvX2VuYWJsZShjb2RlYywgMSk7CisJZWxzZQorCQl0cGE2MTMwYTJfc3RlcmVvX2VuYWJsZShjb2RlYywgMCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByeDUxX2dldF9pbnB1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC0yMDMsNyArMjQwLDcgQEAKIAl7CiAJCS5ncGlvID0gUlg1MV9KQUNLX0RFVEVDVF9HUElPLAogCQkubmFtZSA9ICJhdmRldC1ncGlvIiwKLQkJLnJlcG9ydCA9IFNORF9KQUNLX1ZJREVPT1VULAorCQkucmVwb3J0ID0gU05EX0pBQ0tfSEVBRFNFVCwKIAkJLmludmVydCA9IDEsCiAJCS5kZWJvdW5jZV90aW1lID0gMjAwLAogCX0sCkBAIC0yMTIsMTkgKzI0OSwzOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGFpYzM0X2RhcG1fd2lkZ2V0c1tdID0gewogCVNORF9TT0NfREFQTV9TUEsoIkV4dCBTcGsiLCByeDUxX3Nwa19ldmVudCksCiAJU05EX1NPQ19EQVBNX01JQygiRE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCByeDUxX2hwX2V2ZW50KSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIUyBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiRk0gVHJhbnNtaXR0ZXIiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBhaWMzNF9kYXBtX3dpZGdldHNiW10gPSB7CisJU05EX1NPQ19EQVBNX1NQSygiRWFycGhvbmUiLCBOVUxMKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0gewogCXsiRXh0IFNwayIsIE5VTEwsICJIUExPVVQifSwKIAl7IkV4dCBTcGsiLCBOVUxMLCAiSFBST1VUIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJMTE9VVCJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiUkxPVVQifSwKKwl7IkZNIFRyYW5zbWl0dGVyIiwgTlVMTCwgIkxMT1VUIn0sCisJeyJGTSBUcmFuc21pdHRlciIsIE5VTEwsICJSTE9VVCJ9LAogCiAJeyJETWljIFJhdGUgNjQiLCBOVUxMLCAiTWljIEJpYXMgMlYifSwKIAl7Ik1pYyBCaWFzIDJWIiwgTlVMTCwgIkRNaWMifSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcGJbXSA9IHsKKwl7ImIgTElORTJSIiwgTlVMTCwgIk1PTk9fTE9VVCJ9LAorCXsiRWFycGhvbmUiLCBOVUxMLCAiYiBIUExPVVQifSwKKworCXsiTElORTFMIiwgTlVMTCwgImIgTWljIEJpYXMgMi41ViJ9LAorCXsiYiBNaWMgQmlhcyAyLjVWIiwgTlVMTCwgIkhTIE1pYyJ9Cit9OworCiBzdGF0aWMgY29uc3QgY2hhciAqc3BrX2Z1bmN0aW9uW10gPSB7Ik9mZiIsICJPbiJ9Owogc3RhdGljIGNvbnN0IGNoYXIgKmlucHV0X2Z1bmN0aW9uW10gPSB7IkFEQyIsICJEaWdpdGFsIE1pYyJ9Owotc3RhdGljIGNvbnN0IGNoYXIgKmphY2tfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIlRWLU9VVCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKmphY2tfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIlRWLU9VVCIsICJIZWFkcGhvbmUiLCAiSGVhZHNldCJ9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHJ4NTFfZW51bVtdID0gewogCVNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRShzcGtfZnVuY3Rpb24pLCBzcGtfZnVuY3Rpb24pLApAQCAtMjM5LDYgKzI5NSwxMSBAQAogCQkgICAgIHJ4NTFfZ2V0X2lucHV0LCByeDUxX3NldF9pbnB1dCksCiAJU09DX0VOVU1fRVhUKCJKYWNrIEZ1bmN0aW9uIiwgcng1MV9lbnVtWzJdLAogCQkgICAgIHJ4NTFfZ2V0X2phY2ssIHJ4NTFfc2V0X2phY2spLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkZNIFRyYW5zbWl0dGVyIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljMzRfcng1MV9jb250cm9sc2JbXSA9IHsKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJFYXJwaG9uZSIpLAogfTsKIAogc3RhdGljIGludCByeDUxX2FpYzM0X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKQEAgLTI2NSwxMSArMzI2LDIxIEBACiAJLyogU2V0IHVwIFJYLTUxIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCiAJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCisJZXJyID0gdHBhNjEzMGEyX2FkZF9jb250cm9scyhjb2RlYyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc25kX3NvY19saW1pdF92b2x1bWUoY29kZWMsICJUUEE2MTMwQTIgSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDQyKTsKKworCWVyciA9IG9tYXBfbWNic3Bfc3RfYWRkX2NvbnRyb2xzKGNvZGVjLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJLyogQVYgamFjayBkZXRlY3Rpb24gKi8KIAllcnIgPSBzbmRfc29jX2phY2tfbmV3KGNvZGVjLCAiQVYgSmFjayIsCi0JCQkgICAgICAgU05EX0pBQ0tfVklERU9PVVQsICZyeDUxX2F2X2phY2spOworCQkJICAgICAgIFNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19WSURFT09VVCwKKwkJCSAgICAgICAmcng1MV9hdl9qYWNrKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciA9IHNuZF9zb2NfamFja19hZGRfZ3Bpb3MoJnJ4NTFfYXZfamFjaywKQEAgLTI3OSw2ICszNTAsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHJ4NTFfYWljMzRiX2luaXQoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKQoreworCWludCBlcnI7CisKKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhkYXBtLT5jb2RlYywgYWljMzRfcng1MV9jb250cm9sc2IsCisJCQkJICAgQVJSQVlfU0laRShhaWMzNF9yeDUxX2NvbnRyb2xzYikpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBhaWMzNF9kYXBtX3dpZGdldHNiLAorCQkJCQlBUlJBWV9TSVpFKGFpYzM0X2RhcG1fd2lkZ2V0c2IpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwYiwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhdWRpb19tYXBiKSk7Cit9CisKIC8qIERpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlIGdsdWUgLSBjb25uZWN0cyBjb2RlYyA8LS0+IENQVSAqLwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHJ4NTFfZGFpW10gPSB7CiAJewpAQCAtMjkzLDExICszODIsMzAgQEAKIAl9LAogfTsKIAorc3RydWN0IHNuZF9zb2NfYXV4X2RldiByeDUxX2F1eF9kZXZbXSA9IHsKKwl7CisJCS5uYW1lID0gIlRMVjMyMEFJQzM0YiIsCisJCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzN4LWNvZGVjLjItMDAxOSIsCisJCS5pbml0ID0gcng1MV9haWMzNGJfaW5pdCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2NvbmYgcng1MV9jb2RlY19jb25mW10gPSB7CisJeworCQkuZGV2X25hbWUgPSAidGx2MzIwYWljM3gtY29kZWMuMi0wMDE5IiwKKwkJLm5hbWVfcHJlZml4ID0gImIiLAorCX0sCit9OworCiAvKiBBdWRpbyBjYXJkICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCByeDUxX3NvdW5kX2NhcmQgPSB7CiAJLm5hbWUgPSAiUlgtNTEiLAogCS5kYWlfbGluayA9IHJ4NTFfZGFpLAogCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKHJ4NTFfZGFpKSwKKwkuYXV4X2RldiA9IHJ4NTFfYXV4X2RldiwKKwkubnVtX2F1eF9kZXZzID0gQVJSQVlfU0laRShyeDUxX2F1eF9kZXYpLAorCS5jb2RlY19jb25mID0gcng1MV9jb2RlY19jb25mLAorCS5udW1fY29uZmlncyA9IEFSUkFZX1NJWkUocng1MV9jb2RlY19jb25mKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyeDUxX3NuZF9kZXZpY2U7CkBAIC0zMDksMTAgKzQxNywxNCBAQAogCWlmICghbWFjaGluZV9pc19ub2tpYV9yeDUxKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFJYNTFfVFZPVVRfU0VMX0dQSU8sICJ0dm91dF9zZWwiKTsKKwllcnIgPSBncGlvX3JlcXVlc3Rfb25lKFJYNTFfVFZPVVRfU0VMX0dQSU8sCisJCQkgICAgICAgR1BJT0ZfRElSX09VVCB8IEdQSU9GX0lOSVRfTE9XLCAidHZvdXRfc2VsIik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZ3Bpb190dm91dF9zZWw7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFJYNTFfVFZPVVRfU0VMX0dQSU8sIDApOworCWVyciA9IGdwaW9fcmVxdWVzdF9vbmUoUlg1MV9FQ0lfU1dfR1BJTywKKwkJCSAgICAgICBHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9ISUdILCAiZWNpX3N3Iik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZ3Bpb19lY2lfc3c7CiAKIAlyeDUxX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIXJ4NTFfc25kX2RldmljZSkgewpAQCAtMzMwLDYgKzQ0Miw4IEBACiBlcnIyOgogCXBsYXRmb3JtX2RldmljZV9wdXQocng1MV9zbmRfZGV2aWNlKTsKIGVycjE6CisJZ3Bpb19mcmVlKFJYNTFfRUNJX1NXX0dQSU8pOworZXJyX2dwaW9fZWNpX3N3OgogCWdwaW9fZnJlZShSWDUxX1RWT1VUX1NFTF9HUElPKTsKIGVycl9ncGlvX3R2b3V0X3NlbDoKIApAQCAtMzQyLDYgKzQ1Niw3IEBACiAJCQkJcng1MV9hdl9qYWNrX2dwaW9zKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ4NTFfc25kX2RldmljZSk7CisJZ3Bpb19mcmVlKFJYNTFfRUNJX1NXX0dQSU8pOwogCWdwaW9fZnJlZShSWDUxX1RWT1VUX1NFTF9HUElPKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jIGIvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jCmluZGV4IDBmZDYwZjQuLjJhZmFiYWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYworKysgYi9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMKQEAgLTE1MSwxMyArMTUxLDEzIEBACiAJLmh3X3BhcmFtcyA9IHJhdW1mZWxkX2NzNDI3MF9od19wYXJhbXMsCiB9OwogCi1zdGF0aWMgaW50IHJhdW1mZWxkX2xpbmVfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHJhdW1mZWxkX2xpbmVfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCXJhdW1mZWxkX2VuYWJsZV9hdWRpbyhmYWxzZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmF1bWZlbGRfbGluZV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcmF1bWZlbGRfbGluZV9yZXN1bWUoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKIAlyYXVtZmVsZF9lbmFibGVfYXVkaW8odHJ1ZSk7CiAJcmV0dXJuIDA7CkBAIC0yMjksMTkgKzIyOSwxOSBAQAogewogCS5uYW1lCQk9ICJhazQxMDQiLAogCS5zdHJlYW1fbmFtZQk9ICJQbGF5YmFjayIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtc3NwLWRhaS4xIiwKLQkuY29kZWNfZGFpX25hbWUgPSAiYWs0MTA0LWhpZmkiLAotCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAorCS5jcHVfZGFpX25hbWUJPSAicHhhLXNzcC1kYWkuMSIsCisJLmNvZGVjX2RhaV9uYW1lCT0gImFrNDEwNC1oaWZpIiwKKwkucGxhdGZvcm1fbmFtZQk9ICJweGEtcGNtLWF1ZGlvIiwKIAkub3BzCQk9ICZyYXVtZmVsZF9hazQxMDRfb3BzLAotCS5jb2RlY19uYW1lID0gImFrNDEwNC1jb2RlYy4wIiwKKwkuY29kZWNfbmFtZQk9ICJhazQxMDQtY29kZWMuMCIsCiB9LAogewogCS5uYW1lCQk9ICJDUzQyNzAiLAogCS5zdHJlYW1fbmFtZQk9ICJDUzQyNzAiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLXNzcC1kYWkuMCIsCi0JLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCi0JLmNvZGVjX2RhaV9uYW1lID0gImNzNDI3MC1oaWZpIiwKLQkuY29kZWNfbmFtZSA9ICJjczQyNzAtY29kZWMuMC0wMDQ4IiwKKwkuY3B1X2RhaV9uYW1lCT0gInB4YS1zc3AtZGFpLjAiLAorCS5wbGF0Zm9ybV9uYW1lCT0gInB4YS1wY20tYXVkaW8iLAorCS5jb2RlY19kYWlfbmFtZQk9ICJjczQyNzAtaGlmaSIsCisJLmNvZGVjX25hbWUJPSAiY3M0MjcwLWNvZGVjLjAtMDA0OCIsCiAJLm9wcwkJPSAmcmF1bWZlbGRfY3M0MjcwX29wcywKIH0sfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS90b3NhLmMgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwppbmRleCA0YjZlNWQ2Li45YTIzNTEzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYworKysgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiB9LAogfTsKIAotc3RhdGljIGludCB0b3NhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdG9zYV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCWludCByZXQ7CiAKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdG9zYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCB0b3NhX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCWdwaW9fZnJlZShUT1NBX0dQSU9fTF9NVVRFKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvejIuYyBiL3NvdW5kL3NvYy9weGEvejIuYwppbmRleCAzY2VhZWY2Li5kNjlkOWZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3oyLmMKKysrIGIvc291bmQvc29jL3B4YS96Mi5jCkBAIC05NSw2ICs5NSwxMSBAQAogCQkucGluCT0gIkhlYWRwaG9uZSBKYWNrIiwKIAkJLm1hc2sJPSBTTkRfSkFDS19IRUFEUEhPTkUsCiAJfSwKKwl7CisJCS5waW4gICAgPSAiRXh0IFNwayIsCisJCS5tYXNrICAgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJCS5pbnZlcnQgPSAxCisJfSwKIH07CiAKIC8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gZ3Bpb3MgKi8KQEAgLTE0Nyw3ICsxNTIsNyBAQAogCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTElOUFVUMyIpOwogCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiUklOUFVUMyIpOwogCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiT1VUMyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTU9OTyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTU9OTzEiKTsKIAogCS8qIEFkZCB6MiBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg3NTBfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCmluZGV4IDI1YmJhMTAuLmFjNTc3MjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKQEAgLTE4OSw3ICsxODksNyBAQAogfSwKIH07CiAKLXN0YXRpYyBpbnQgenlsb25pdGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgenlsb25pdGVfcHJvYmUoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKIAlpbnQgcmV0OwogCkBAIC0yMTYsNyArMjE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB6eWxvbml0ZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgenlsb25pdGVfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7CiAJaWYgKGNsa19wb3V0KSB7CiAJCWNsa19kaXNhYmxlKHBvdXQpOwpAQCAtMjI2LDggKzIyNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgenlsb25pdGVfc3VzcGVuZF9wb3N0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgenlsb25pdGVfc3VzcGVuZF9wb3N0KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7CiAJaWYgKGNsa19wb3V0KQogCQljbGtfZGlzYWJsZShwb3V0KTsKQEAgLTIzNSw3ICsyMzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHp5bG9uaXRlX3Jlc3VtZV9wcmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgenlsb25pdGVfcmVzdW1lX3ByZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCWludCByZXQgPSAwOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnIGIvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZwppbmRleCBhNmE2YjVmLi5hM2ZkZmI2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgU05EX1NPQ19TQU1TVU5HCiAJdHJpc3RhdGUgIkFTb0Mgc3VwcG9ydCBmb3IgU2Ftc3VuZyIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1MzQzY0WFggfHwgQVJDSF9TNVBDMTAwIHx8IEFSQ0hfUzVQVjIxMCB8fCBBUkNIX1M1UDY0WDAgfHwgQVJDSF9TNVA2NDQyIHx8IEFSQ0hfUzVQVjMxMAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwIHx8IEFSQ0hfUzNDNjRYWCB8fCBBUkNIX1M1UEMxMDAgfHwgQVJDSF9TNVBWMjEwIHx8IEFSQ0hfUzVQNjRYMCB8fCBBUkNIX1M1UDY0NDIgfHwgQVJDSF9FWFlOT1M0CiAJc2VsZWN0IFMzQzY0WFhfRE1BIGlmIEFSQ0hfUzNDNjRYWAogCXNlbGVjdCBTM0MyNDEwX0RNQSBpZiBBUkNIX1MzQzI0MTAKIAloZWxwCkBAIC0zNSwyMyArMzUsMTYgQEAKIAl0cmlzdGF0ZQogCiBjb25maWcgU05EX1NPQ19TQU1TVU5HX05FTzE5NzNfV004NzUzCi0JdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgTkVPMTk3MyAtIFdNODc1MyIKLQlkZXBlbmRzIG9uIFNORF9TT0NfU0FNU1VORyAmJiBNQUNIX05FTzE5NzNfR1RBMDEKKwl0cmlzdGF0ZSAiQXVkaW8gc3VwcG9ydCBmb3IgT3Blbm1va28gTmVvMTk3MyBTbWFydHBob25lcyAoR1RBMDEvR1RBMDIpIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIChNQUNIX05FTzE5NzNfR1RBMDEgfHwgTUFDSF9ORU8xOTczX0dUQTAyKQogCXNlbGVjdCBTTkRfUzNDMjRYWF9JMlMKIAlzZWxlY3QgU05EX1NPQ19XTTg3NTMKKwlzZWxlY3QgU05EX1NPQ19MTTQ4NTcgaWYgTUFDSF9ORU8xOTczX0dUQTAxCisJc2VsZWN0IFNORF9TT0NfREZCTUNTMzIwCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBzbWRrMjQ0MAotCSAgd2l0aCB0aGUgV004NzUzLgorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgYXVkaW8gc3VwcG9ydCBmb3IgdGhlIE9wZW5tb2tvIE5lbzE5NzMKKwkgIFNtYXJ0cGhvbmVzLgogCi1jb25maWcgU05EX1NPQ19TQU1TVU5HX05FTzE5NzNfR1RBMDJfV004NzUzCi0JdHJpc3RhdGUgIkF1ZGlvIHN1cHBvcnQgZm9yIHRoZSBPcGVubW9rbyBOZW8gRnJlZVJ1bm5lciAoR1RBMDIpIgotCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIE1BQ0hfTkVPMTk3M19HVEEwMgotCXNlbGVjdCBTTkRfUzNDMjRYWF9JMlMKLQlzZWxlY3QgU05EX1NPQ19XTTg3NTMKLQloZWxwCi0JICBUaGlzIGRyaXZlciBwcm92aWRlcyBhdWRpbyBzdXBwb3J0IGZvciB0aGUgT3Blbm1va28gTmVvIEZyZWVSdW5uZXIKLQkgIHNtYXJ0cGhvbmUuCi0JICAKIGNvbmZpZyBTTkRfU09DX1NBTVNVTkdfSklWRV9XTTg3NTAKIAl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBKaXZlIgogCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIE1BQ0hfSklWRQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZQppbmRleCA3MDVkNGU4Li4yOTRkZWMwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNiBAQAogIyBTM0MyNFhYIE1hY2hpbmUgU3VwcG9ydAogc25kLXNvYy1qaXZlLXdtODc1MC1vYmpzIDo9IGppdmVfd204NzUwLm8KIHNuZC1zb2MtbmVvMTk3My13bTg3NTMtb2JqcyA6PSBuZW8xOTczX3dtODc1My5vCi1zbmQtc29jLW5lbzE5NzMtZ3RhMDItd204NzUzLW9ianMgOj0gbmVvMTk3M19ndGEwMl93bTg3NTMubwogc25kLXNvYy1zbWRrMjQ0My13bTk3MTAtb2JqcyA6PSBzbWRrMjQ0M193bTk3MTAubwogc25kLXNvYy1sbjI0NDBzYmMtYWxjNjUwLW9ianMgOj0gbG4yNDQwc2JjX2FsYzY1MC5vCiBzbmQtc29jLXMzYzI0eHgtdWRhMTM0eC1vYmpzIDo9IHMzYzI0eHhfdWRhMTM0eC5vCkBAIC0zOCw3ICszNyw2IEBACiAKIG9iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfSklWRV9XTTg3NTApICs9IHNuZC1zb2Mtaml2ZS13bTg3NTAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0FNU1VOR19ORU8xOTczX1dNODc1MykgKz0gc25kLXNvYy1uZW8xOTczLXdtODc1My5vCi1vYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX05FTzE5NzNfR1RBMDJfV004NzUzKSArPSBzbmQtc29jLW5lbzE5NzMtZ3RhMDItd204NzUzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfU01ESzI0NDNfV005NzEwKSArPSBzbmQtc29jLXNtZGsyNDQzLXdtOTcxMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX0xOMjQ0MFNCQ19BTEM2NTApICs9IHNuZC1zb2MtbG4yNDQwc2JjLWFsYzY1MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX1MzQzI0WFhfVURBMTM0WCkgKz0gc25kLXNvYy1zM2MyNHh4LXVkYTEzNHgubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvYWM5Ny5jIGIvc291bmQvc29jL3NhbXN1bmcvYWM5Ny5jCmluZGV4IDQ3NzBhOTUuLmY5NzExMGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2FjOTcuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmMKQEAgLTEyLDI0ICsxMiwyNCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAotI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgogI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KIAogI2luY2x1ZGUgImRtYS5oIgotI2luY2x1ZGUgImFjOTcuaCIKIAogI2RlZmluZSBBQ19DTURfQUREUih4KSAoeCA8PCAxNikKICNkZWZpbmUgQUNfQ01EX0RBVEEoeCkgKHggJiAweGZmZmYpCiAKKyNkZWZpbmUgUzNDX0FDOTdfREFJX1BDTSAwCisjZGVmaW5lIFMzQ19BQzk3X0RBSV9NSUMgMQorCiBzdHJ1Y3QgczNjX2FjOTdfaW5mbyB7CiAJc3RydWN0IGNsayAgICAgICAgICphYzk3X2NsazsKIAl2b2lkIF9faW9tZW0JICAgKnJlZ3M7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmggYi9zb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMGUxYjUuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvYWM5Ny5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogc291bmQvc29jL3NhbXN1bmcvYWM5Ny5oCi0gKgotICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0MgQUM5NyBDb250cm9sbGVyIGRyaXZlcgotICoJRXZvbHZlZCBmcm9tIHMzYzI0NDMtYWM5Ny5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZAotICoJQXV0aG9yOiBKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+Ci0gKglDcmVkaXRzOiBHcmFlbWUgR3JlZ29yeSwgU2VhbiBDaG9pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fUzNDX0FDOTdfSF8KLSNkZWZpbmUgX19TM0NfQUM5N19IXwotCi0jZGVmaW5lIFMzQ19BQzk3X0RBSV9QQ00gMAotI2RlZmluZSBTM0NfQUM5N19EQUlfTUlDIDEKLQotI2VuZGlmIC8qIF9fUzNDX0FDOTdfSF8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2RtYS5jIGIvc291bmQvc29jL3NhbXN1bmcvZG1hLmMKaW5kZXggMjEyNDAxOS4uNWNiM2I4OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvZG1hLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvZG1hLmMKQEAgLTE0LDE3ICsxNCwxMSBAQAogICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzIsNiArMjYsOSBAQAogCiAjaW5jbHVkZSAiZG1hLmgiCiAKKyNkZWZpbmUgU1RfUlVOTklORwkJKDE8PDApCisjZGVmaW5lIFNUX09QRU5FRAkJKDE8PDEpCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBkbWFfaGFyZHdhcmUgPSB7CiAJLmluZm8JCQk9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKIAkJCQkgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfApAQCAtMzEzLDcgKzMxMCw3IEBACiAJLyogd2Ugc2VlbSB0byBiZSBnZXR0aW5nIHRoZSBvZGQgZXJyb3IgZnJvbSB0aGUgcGNtIGxpYnJhcnkgZHVlCiAJICogdG8gb3V0LW9mLWJvdW5kcyBwb2ludGVycy4gdGhpcyBpcyBtYXliZSBkdWUgdG8gdGhlIGRtYSBlbmdpbmUKIAkgKiBub3QgaGF2aW5nIGxvYWRlZCB0aGUgbmV3IHZhbHVlcyBmb3IgdGhlIGNoYW5uZWwgYmVmb3JlIGJlaW5nCi0JICogY2FsbGxlZC4uLiAodG9kbyAtIGZpeCApCisJICogY2FsbGVkLi4uICh0b2RvIC0gZml4ICkKIAkgKi8KIAogCWlmIChyZXMgPj0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2RtYS5oIGIvc291bmQvc29jL3NhbXN1bmcvZG1hLmgKaW5kZXggZjhjZDJiNC4uYzUwNjU5MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvZG1hLmgKKysrIGIvc291bmQvc29jL3NhbXN1bmcvZG1hLmgKQEAgLTEyLDkgKzEyLDYgQEAKICNpZm5kZWYgX1MzQ19BVURJT19ICiAjZGVmaW5lIF9TM0NfQVVESU9fSAogCi0jZGVmaW5lIFNUX1JVTk5JTkcJCSgxPDwwKQotI2RlZmluZSBTVF9PUEVORUQJCSgxPDwxKQotCiBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgewogCXN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudDsJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KIAlpbnQgY2hhbm5lbDsJCQkJLyogQ2hhbm5lbCBJRCAqLwpAQCAtMjIsOSArMTksNCBAQAogCWludCBkbWFfc2l6ZTsJCQkvKiBTaXplIG9mIHRoZSBETUEgdHJhbnNmZXIgKi8KIH07CiAKLSNkZWZpbmUgUzNDMjRYWF9EQUlfSTJTCQkJMAotCi0vKiBwbGF0Zm9ybSBkYXRhICovCi1leHRlcm4gc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgczNjMjR4eF9hYzk3X29wczsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jIGIvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYwppbmRleCAzNGRkOWVmLi5mNmIzYTNjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKQEAgLTExLDIxICsxMSwxMyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oPgogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg5OTQuaCIKLSNpbmNsdWRlICJkbWEuaCIKLSNpbmNsdWRlICJpMnMuaCIKIAogI2RlZmluZSBNQUNISU5FX05BTUUJMAogI2RlZmluZSBDUFVfVk9JQ0VfREFJCTEKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2gxOTQwX3VkYTEzODAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2gxOTQwX3VkYTEzODAuYwppbmRleCBjNDVmN2NlLi4yNDFmNTVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9oMTk0MF91ZGExMzgwLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvaDE5NDBfdWRhMTM4MC5jCkBAIC0xMywyNSArMTMsMTYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvdWRhMTM4MC5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KLQogI2luY2x1ZGUgPG1hY2gvaDE5NDAtbGF0Y2guaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgotI2luY2x1ZGUgIi4uL2NvZGVjcy91ZGExMzgwLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9IHsKIAkxMTAyNSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jIGIvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKaW5kZXggZDAwYWMzYS4uZmZhMDliMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKQEAgLTE1LDkgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KIAogI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvaml2ZV93bTg3NTAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2ppdmVfd204NzUwLmMKaW5kZXggMDg4MDI1Mi4uM2I1M2FkNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvaml2ZV93bTg3NTAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9qaXZlX3dtODc1MC5jCkBAIC0xMSwyMiArMTEsMTEgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNDEyLWkycy5oIgotCiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1MC5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2xtNDg1Ny5oIGIvc291bmQvc29jL3NhbXN1bmcvbG00ODU3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZjViNzAuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvbG00ODU3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogbG00ODU3LmggIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgotICoKLSAqIENvcHlyaWdodCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IEdyYWVtZSBHcmVnb3J5Ci0gKiAgICAgICAgIGdyYWVtZS5ncmVnb3J5QHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgICAxOHRoIEp1biAyMDA3ICAgSW5pdGlhbCB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgTE00ODU3X0hfCi0jZGVmaW5lIExNNDg1N19IXwotCi0vKiBUaGUgcmVnaXN0ZXIgb2Zmc2V0cyBpbiB0aGUgY2FjaGUgYXJyYXkgKi8KLSNkZWZpbmUgTE00ODU3X01WT0wgMAotI2RlZmluZSBMTTQ4NTdfTFZPTCAxCi0jZGVmaW5lIExNNDg1N19SVk9MIDIKLSNkZWZpbmUgTE00ODU3X0NUUkwgMwotCi0vKiB0aGUgc2hpZnRzIHJlcXVpcmVkIHRvIHNldCB0aGVzZSBiaXRzICovCi0jZGVmaW5lIExNNDg1N18zRCA1Ci0jZGVmaW5lIExNNDg1N19XQUtFVVAgNQotI2RlZmluZSBMTTQ4NTdfRVBHQUlOIDQKLQotI2VuZGlmIC8qTE00ODU3X0hfKi8KLQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbG4yNDQwc2JjX2FsYzY1MC5jIGIvc291bmQvc29jL3NhbXN1bmcvbG4yNDQwc2JjX2FsYzY1MC5jCmluZGV4IGEyYmIzNGQuLmJkOTFjMTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2xuMjQ0MHNiY19hbGM2NTAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9sbjI0NDBzYmNfYWxjNjUwLmMKQEAgLTE2LDE1ICsxNiw4IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKLSNpbmNsdWRlICJkbWEuaCIKLSNpbmNsdWRlICJhYzk3LmgiCi0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGxuMjQ0MHNiYzsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGxuMjQ0MHNiY19kYWlbXSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX2d0YTAyX3dtODc1My5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDBhZTJiLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDQgKzAsMCBAQAotLyoKLSAqIG5lbzE5NzNfZ3RhMDJfd204NzUzLmMgIC0tICBTb0MgYXVkaW8gZm9yIE9wZW5tb2tvIEZyZWVydW5uZXIoR1RBMDIpCi0gKgotICogQ29weXJpZ2h0IDIwMDcgT3Blbm1va28gSW5jCi0gKiBBdXRob3I6IEdyYWVtZSBHcmVnb3J5IDxncmFlbWVAb3Blbm1va28ub3JnPgotICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogR3JhZW1lIEdyZWdvcnkgPGxpbnV4QHdvbGZzb25taWNyby5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgotCi0jaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9ndGEwMi5oPgotI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3NTMuaCIKLSNpbmNsdWRlICJkbWEuaCIKLSNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBuZW8xOTczX2d0YTAyOwotCi1zdGF0aWMgaW50IG5lbzE5NzNfZ3RhMDJfaGlmaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0Jc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCXVuc2lnbmVkIGludCBwbGxfb3V0ID0gMCwgYmNsayA9IDA7Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBpaXNfY2xrcmF0ZTsKLQotCWlpc19jbGtyYXRlID0gczNjMjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZSgpOwotCi0Jc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSA4MDAwOgotCWNhc2UgMTYwMDA6Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSA0ODAwMDoKLQkJYmNsayA9IFdNODc1M19CQ0xLX0RJVl80OwotCQlwbGxfb3V0ID0gMTIyODgwMDA7Ci0JCWJyZWFrOwotCWNhc2UgOTYwMDA6Ci0JCWJjbGsgPSBXTTg3NTNfQkNMS19ESVZfMjsKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQlicmVhazsKLQljYXNlIDExMDI1OgotCQliY2xrID0gV004NzUzX0JDTEtfRElWXzE2OwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCWNhc2UgMjIwNTA6Ci0JCWJjbGsgPSBXTTg3NTNfQkNMS19ESVZfODsKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQlicmVhazsKLQljYXNlIDQ0MTAwOgotCQliY2xrID0gV004NzUzX0JDTEtfRElWXzQ7Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKLQkJYnJlYWs7Ci0JY2FzZSA4ODIwMDoKLQkJYmNsayA9IFdNODc1M19CQ0xLX0RJVl8yOwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCX0KLQotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLAotCQlTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8Ci0JCVNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKLQkJU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQlTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNldCB0aGUgY29kZWMgc3lzdGVtIGNsb2NrIGZvciBEQUMgYW5kIEFEQyAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3NTNfTUNMSywgcGxsX291dCwKLQkJU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgTUNMSyBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQzI0WFhfRElWX01DTEssCi0JCVMzQzI0MTBfSUlTTU9EXzMyRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IGNvZGVjIEJDTEsgZGl2aXNpb24gZm9yIHNhbXBsZSByYXRlICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksCi0JCQkJCVdNODc1M19CQ0xLRElWLCBiY2xrKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNldCBwcmVzY2FsZXIgZGl2aXNpb24gZm9yIHNhbXBsZSByYXRlICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBTM0MyNFhYX0RJVl9QUkVTQ0FMRVIsCi0JCVMzQzI0WFhfUFJFU0NBTEUoNCwgNCkpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogY29kZWMgUExMIGlucHV0IGlzIFBDTEsvNCAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg3NTNfUExMMSwgMCwKLQkJaWlzX2Nsa3JhdGUgLyA0LCBwbGxfb3V0KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG5lbzE5NzNfZ3RhMDJfaGlmaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwotCi0JLyogZGlzYWJsZSB0aGUgUExMICovCi0JcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg3NTNfUExMMSwgMCwgMCwgMCk7Ci19Ci0KLS8qCi0gKiBOZW8xOTczIFdNODc1MyBIaUZpIERBSSBvcHNlcmF0aW9ucy4KLSAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBuZW8xOTczX2d0YTAyX2hpZmlfb3BzID0gewotCS5od19wYXJhbXMgPSBuZW8xOTczX2d0YTAyX2hpZmlfaHdfcGFyYW1zLAotCS5od19mcmVlID0gbmVvMTk3M19ndGEwMl9oaWZpX2h3X2ZyZWUsCi19OwotCi1zdGF0aWMgaW50IG5lbzE5NzNfZ3RhMDJfdm9pY2VfaHdfcGFyYW1zKAotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwotCXVuc2lnbmVkIGludCBwY21kaXYgPSAwOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgaWlzX2Nsa3JhdGU7Ci0KLQlpaXNfY2xrcmF0ZSA9IHMzYzI0eHhfaTJzX2dldF9jbG9ja3JhdGUoKTsKLQotCWlmIChwYXJhbXNfcmF0ZShwYXJhbXMpICE9IDgwMDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSAhPSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBjbWRpdiA9IFdNODc1M19QQ01fRElWXzY7IC8qIDIuMDQ4IE1IeiAqLwotCi0JLyogdG9kbzogZ2cgY2hlY2sgbW9kZSAoRFNQX0IpIGFnYWluc3QgQ1NSIGRhdGFzaGVldCAqLwotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9EU1BfQiB8Ci0JCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgdGhlIGNvZGVjIHN5c3RlbSBjbG9jayBmb3IgREFDIGFuZCBBREMgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzUzX1BDTUNMSywKLQkJMTIyODgwMDAsIFNORF9TT0NfQ0xPQ0tfSU4pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IGNvZGVjIFBDTSBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004NzUzX1BDTURJViwKLQkJCQkJcGNtZGl2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIGNvbmZpZ3VyZSBhbmQgZW5hYmxlIFBMTCBmb3IgMTIuMjg4TUh6IG91dHB1dCAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg3NTNfUExMMiwgMCwKLQkJaWlzX2Nsa3JhdGUgLyA0LCAxMjI4ODAwMCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBuZW8xOTczX2d0YTAyX3ZvaWNlX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7Ci0KLQkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KLQlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODc1M19QTEwyLCAwLCAwLCAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBuZW8xOTczX2d0YTAyX3ZvaWNlX29wcyA9IHsKLQkuaHdfcGFyYW1zID0gbmVvMTk3M19ndGEwMl92b2ljZV9od19wYXJhbXMsCi0JLmh3X2ZyZWUgPSBuZW8xOTczX2d0YTAyX3ZvaWNlX2h3X2ZyZWUsCi19OwotCi0jZGVmaW5lIExNNDg1M19BTVAgMQotI2RlZmluZSBMTTQ4NTNfU1BLIDIKLQotc3RhdGljIHU4IGxtNDg1M19zdGF0ZTsKLQotLyogVGhpcyBoYXMgbm8gZWZmZWN0LCBpdCBleGlzdHMgb25seSB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGgKLSAqIGV4aXN0aW5nIEFMU0Egc3RhdGUgZmlsZXMuCi0gKi8KLXN0YXRpYyBpbnQgbG00ODUzX3NldF9zdGF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlpbnQgdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0KLQlpZiAodmFsKQotCQlsbTQ4NTNfc3RhdGUgfD0gTE00ODUzX0FNUDsKLQllbHNlCi0JCWxtNDg1M19zdGF0ZSAmPSB+TE00ODUzX0FNUDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxtNDg1M19nZXRfc3RhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBsbTQ4NTNfc3RhdGUgJiBMTTQ4NTNfQU1QOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbG00ODUzX3NldF9zcGsoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0JaW50IHZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCi0JaWYgKHZhbCkgewotCQlsbTQ4NTNfc3RhdGUgfD0gTE00ODUzX1NQSzsKLQkJZ3Bpb19zZXRfdmFsdWUoR1RBMDJfR1BJT19IUF9JTiwgMCk7Ci0JfSBlbHNlIHsKLQkJbG00ODUzX3N0YXRlICY9IH5MTTQ4NTNfU1BLOwotCQlncGlvX3NldF92YWx1ZShHVEEwMl9HUElPX0hQX0lOLCAxKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsbTQ4NTNfZ2V0X3NwayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IChsbTQ4NTNfc3RhdGUgJiBMTTQ4NTNfU1BLKSA+PiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbG00ODUzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAotCQkJc3RydWN0IHNuZF9rY29udHJvbCAqaywKLQkJCWludCBldmVudCkKLXsKLQlncGlvX3NldF92YWx1ZShHVEEwMl9HUElPX0FNUF9TSFVULCBTTkRfU09DX0RBUE1fRVZFTlRfT0ZGKGV2ZW50KSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODc1M19kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fU1BLKCJTdGVyZW8gT3V0IiwgbG00ODUzX2V2ZW50KSwKLQlTTkRfU09DX0RBUE1fTElORSgiR1NNIExpbmUgT3V0IiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX0xJTkUoIkdTTSBMaW5lIEluIiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fTUlDKCJIYW5kc2V0IE1pYyIsIE5VTEwpLAotCVNORF9TT0NfREFQTV9TUEsoIkhhbmRzZXQgU3BrIiwgTlVMTCksCi19OwotCi0KLS8qIGV4YW1wbGUgbWFjaGluZSBhdWRpb19tYXBuZWN0aW9ucyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7Ci0KLQkvKiBDb25uZWN0aW9ucyB0byB0aGUgbG00ODUzIGFtcCAqLwotCXsiU3RlcmVvIE91dCIsIE5VTEwsICJMT1VUMSJ9LAotCXsiU3RlcmVvIE91dCIsIE5VTEwsICJST1VUMSJ9LAotCi0JLyogQ29ubmVjdGlvbnMgdG8gdGhlIEdTTSBNb2R1bGUgKi8KLQl7IkdTTSBMaW5lIE91dCIsIE5VTEwsICJNT05PMSJ9LAotCXsiR1NNIExpbmUgT3V0IiwgTlVMTCwgIk1PTk8yIn0sCi0JeyJSWFAiLCBOVUxMLCAiR1NNIExpbmUgSW4ifSwKLQl7IlJYTiIsIE5VTEwsICJHU00gTGluZSBJbiJ9LAotCi0JLyogQ29ubmVjdGlvbnMgdG8gSGVhZHNldCAqLwotCXsiTUlDMSIsIE5VTEwsICJNaWMgQmlhcyJ9LAotCXsiTWljIEJpYXMiLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKLQotCS8qIENhbGwgTWljICovCi0JeyJNSUMyIiwgTlVMTCwgIk1pYyBCaWFzIn0sCi0JeyJNSUMyTiIsIE5VTEwsICJNaWMgQmlhcyJ9LAotCXsiTWljIEJpYXMiLCBOVUxMLCAiSGFuZHNldCBNaWMifSwKLQotCS8qIENhbGwgU3BlYWtlciAqLwotCXsiSGFuZHNldCBTcGsiLCBOVUxMLCAiTE9VVDIifSwKLQl7IkhhbmRzZXQgU3BrIiwgTlVMTCwgIlJPVVQyIn0sCi0KLQkvKiBDb25uZWN0IHRoZSBBTEMgcGlucyAqLwotCXsiQUNJTiIsIE5VTEwsICJBQ09QIn0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX25lbzE5NzNfZ3RhMDJfY29udHJvbHNbXSA9IHsKLQlTT0NfREFQTV9QSU5fU1dJVENIKCJTdGVyZW8gT3V0IiksCi0JU09DX0RBUE1fUElOX1NXSVRDSCgiR1NNIExpbmUgT3V0IiksCi0JU09DX0RBUE1fUElOX1NXSVRDSCgiR1NNIExpbmUgSW4iKSwKLQlTT0NfREFQTV9QSU5fU1dJVENIKCJIZWFkc2V0IE1pYyIpLAotCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhhbmRzZXQgTWljIiksCi0JU09DX0RBUE1fUElOX1NXSVRDSCgiSGFuZHNldCBTcGsiKSwKLQotCS8qIFRoaXMgaGFzIG5vIGVmZmVjdCwgaXQgZXhpc3RzIG9ubHkgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoCi0JICogZXhpc3RpbmcgQUxTQSBzdGF0ZSBmaWxlcy4KLQkgKi8KLQlTT0NfU0lOR0xFX0VYVCgiQW1wIFN0YXRlIFN3aXRjaCIsIDYsIDAsIDEsIDAsCi0JCWxtNDg1M19nZXRfc3RhdGUsCi0JCWxtNDg1M19zZXRfc3RhdGUpLAotCVNPQ19TSU5HTEVfRVhUKCJBbXAgU3BrIFN3aXRjaCIsIDcsIDAsIDEsIDAsCi0JCWxtNDg1M19nZXRfc3BrLAotCQlsbTQ4NTNfc2V0X3NwayksCi19OwotCi0vKgotICogVGhpcyBpcyBhbiBleGFtcGxlIG1hY2hpbmUgaW5pdGlhbGlzYXRpb24gZm9yIGEgd204NzUzIGNvbm5lY3RlZCB0byBhCi0gKiBuZW8xOTczIEdUQTAyLgotICovCi1zdGF0aWMgaW50IG5lbzE5NzNfZ3RhMDJfd204NzUzX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQlpbnQgZXJyOwotCi0JLyogc2V0IHVwIE5DIGNvZGVjIHBpbnMgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiT1VUNCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkUxIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORTIiKTsKLQotCS8qIEFkZCBuZW8xOTczIGd0YTAyIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODc1M19kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtODc1M19kYXBtX3dpZGdldHMpKTsKLQotCS8qIGFkZCBuZW8xOTczIGd0YTAyIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1M19uZW8xOTczX2d0YTAyX2NvbnRyb2xzLAotCQlBUlJBWV9TSVpFKHdtODc1M19uZW8xOTczX2d0YTAyX2NvbnRyb2xzKSk7Ci0KLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8qIHNldCB1cCBuZW8xOTczIGd0YTAyIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwotCi0JLyogc2V0IGVuZHBvaW50cyB0byBkZWZhdWx0IG9mZiBtb2RlICovCi0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJTdGVyZW8gT3V0Iik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBPdXQiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGFuZHNldCBNaWMiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhhbmRzZXQgU3BrIik7Ci0KLQkvKiBhbGxvdyBhdWRpbyBwYXRocyBmcm9tIHRoZSBHU00gbW9kZW0gdG8gcnVuIGR1cmluZyBzdXNwZW5kICovCi0Jc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJTdGVyZW8gT3V0Iik7Ci0Jc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJHU00gTGluZSBPdXQiKTsKLQlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIkdTTSBMaW5lIEluIik7Ci0Jc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJIZWFkc2V0IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChkYXBtLCAiSGFuZHNldCBNaWMiKTsKLQlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIkhhbmRzZXQgU3BrIik7Ci0KLQlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogQlQgQ29kZWMgREFJCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGJ0X2RhaSA9IHsKLQkubmFtZSA9ICJibHVldG9vdGgtZGFpIiwKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMSwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMCwKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDEsCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDAsCi0JCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBuZW8xOTczX2d0YTAyX2RhaVtdID0gewoteyAvKiBIaWZpIFBsYXliYWNrIC0gZm9yIHNpbWlsYXRpb3VzIHVzZSB3aXRoIHZvaWNlIGJlbG93ICovCi0JLm5hbWUgPSAiV004NzUzIiwKLQkuc3RyZWFtX25hbWUgPSAiV004NzUzIEhpRmkiLAotCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1paXMiLAotCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3NTMtaGlmaSIsCi0JLmluaXQgPSBuZW8xOTczX2d0YTAyX3dtODc1M19pbml0LAotCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTAwMWEiLAotCS5vcHMgPSAmbmVvMTk3M19ndGEwMl9oaWZpX29wcywKLX0sCi17IC8qIFZvaWNlIHZpYSBCVCAqLwotCS5uYW1lID0gIkJsdWV0b290aCIsCi0JLnN0cmVhbV9uYW1lID0gIlZvaWNlIiwKLQkuY3B1X2RhaV9uYW1lID0gImJsdWV0b290aC1kYWkiLAotCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3NTMtdm9pY2UiLAotCS5vcHMgPSAmbmVvMTk3M19ndGEwMl92b2ljZV9vcHMsCi0JLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMDAxYSIsCi0JLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCi19LAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbmVvMTk3M19ndGEwMiA9IHsKLQkubmFtZSA9ICJuZW8xOTczLWd0YTAyIiwKLQkuZGFpX2xpbmsgPSBuZW8xOTczX2d0YTAyX2RhaSwKLQkubnVtX2xpbmtzID0gQVJSQVlfU0laRShuZW8xOTczX2d0YTAyX2RhaSksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlOwotCi1zdGF0aWMgaW50IF9faW5pdCBuZW8xOTczX2d0YTAyX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCFtYWNoaW5lX2lzX25lbzE5NzNfZ3RhMDIoKSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiT25seSBHVEEwMiBpcyBzdXBwb3J0ZWQgYnkgdGhpcyBBU29DIGRyaXZlclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCW5lbzE5NzNfZ3RhMDJfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwotCWlmICghbmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIHJlZ2lzdGVyIGJsdWV0b290aCBEQUkgaGVyZSAqLwotCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UtPmRldiwgJmJ0X2RhaSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfcHV0X2RldmljZTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKG5lbzE5NzNfZ3RhMDJfc25kX2RldmljZSwgJm5lbzE5NzNfZ3RhMDIpOwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKTsKLQotCWlmIChyZXQpCi0JCWdvdG8gZXJyX3VucmVnaXN0ZXJfZGFpOwotCi0JLyogSW5pdGlhbGlzZSBHUElPcyB1c2VkIGJ5IGFtcCAqLwotCXJldCA9IGdwaW9fcmVxdWVzdChHVEEwMl9HUElPX0hQX0lOLCAiR1RBMDJfSFBfSU4iKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiZ3RhMDJfd204NzUzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgR1BJTyAlZFxuIiwgR1RBMDJfR1BJT19IUF9JTik7Ci0JCWdvdG8gZXJyX2RlbF9kZXZpY2U7Ci0JfQotCi0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdUQTAyX0dQSU9fSFBfSU4sIDEpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJndGEwMl93bTg3NTM6IEZhaWxlZCB0byBjb25maWd1cmUgR1BJTyAlZFxuIiwgR1RBMDJfR1BJT19IUF9JTik7Ci0JCWdvdG8gZXJyX2ZyZWVfZ3Bpb19ocF9pbjsKLQl9Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1RBMDJfR1BJT19BTVBfU0hVVCwgIkdUQTAyX0FNUF9TSFVUIik7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImd0YTAyX3dtODc1MzogRmFpbGVkIHRvIHJlZ2lzdGVyIEdQSU8gJWRcbiIsIEdUQTAyX0dQSU9fQU1QX1NIVVQpOwotCQlnb3RvIGVycl9mcmVlX2dwaW9faHBfaW47Ci0JfQotCi0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdUQTAyX0dQSU9fQU1QX1NIVVQsIDEpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJndGEwMl93bTg3NTM6IEZhaWxlZCB0byBjb25maWd1cmUgR1BJTyAlZFxuIiwgR1RBMDJfR1BJT19BTVBfU0hVVCk7Ci0JCWdvdG8gZXJyX2ZyZWVfZ3Bpb19hbXBfc2h1dDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2ZyZWVfZ3Bpb19hbXBfc2h1dDoKLQlncGlvX2ZyZWUoR1RBMDJfR1BJT19BTVBfU0hVVCk7Ci1lcnJfZnJlZV9ncGlvX2hwX2luOgotCWdwaW9fZnJlZShHVEEwMl9HUElPX0hQX0lOKTsKLWVycl9kZWxfZGV2aWNlOgotCXBsYXRmb3JtX2RldmljZV9kZWwobmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKTsKLWVycl91bnJlZ2lzdGVyX2RhaToKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UtPmRldik7Ci1lcnJfcHV0X2RldmljZToKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG5lbzE5NzNfZ3RhMDJfc25kX2RldmljZSk7Ci0JcmV0dXJuIHJldDsKLX0KLW1vZHVsZV9pbml0KG5lbzE5NzNfZ3RhMDJfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBuZW8xOTczX2d0YTAyX2V4aXQodm9pZCkKLXsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UtPmRldik7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKTsKLQlncGlvX2ZyZWUoR1RBMDJfR1BJT19IUF9JTik7Ci0JZ3Bpb19mcmVlKEdUQTAyX0dQSU9fQU1QX1NIVVQpOwotfQotbW9kdWxlX2V4aXQobmVvMTk3M19ndGEwMl9leGl0KTsKLQotLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJHcmFlbWUgR3JlZ29yeSwgZ3JhZW1lQG9wZW5tb2tvLm9yZyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBXTTg3NTMgTmVvMTk3MyBHVEEwMiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKaW5kZXggZDIwODE1ZC4uNzhiZmRiMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCkBAIC0xLDU3ICsxLDMyIEBACiAvKgotICogbmVvMTk3M193bTg3NTMuYyAgLS0gIFNvQyBhdWRpbyBmb3IgTmVvMTk3MworICogbmVvMTk3M193bTg3NTMuYyAgLS0gIFNvQyBhdWRpbyBmb3IgT3Blbm1va28gTmVvMTk3MyBhbmQgRnJlZXJ1bm5lciBkZXZpY2VzCiAgKgorICogQ29weXJpZ2h0IDIwMDcgT3Blbm1va28gSW5jCisgKiBBdXRob3I6IEdyYWVtZSBHcmVnb3J5IDxncmFlbWVAb3Blbm1va28ub3JnPgogICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIEF1dGhvcjogR3JhZW1lIEdyZWdvcnkKICAqICAgICAgICAgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGktZ3Bpby5oPgotCiAjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPG1hY2gvZ3RhMDIuaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3NTMuaCIKLSNpbmNsdWRlICJsbTQ4NTcuaCIKLSNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogCi0vKiBkZWZpbmUgdGhlIHNjZW5hcmlvcyAqLwotI2RlZmluZSBORU9fQVVESU9fT0ZGCQkJMAotI2RlZmluZSBORU9fR1NNX0NBTExfQVVESU9fSEFORFNFVAkxCi0jZGVmaW5lIE5FT19HU01fQ0FMTF9BVURJT19IRUFEU0VUCTIKLSNkZWZpbmUgTkVPX0dTTV9DQUxMX0FVRElPX0JMVUVUT09USAkzCi0jZGVmaW5lIE5FT19TVEVSRU9fVE9fU1BFQUtFUlMJCTQKLSNkZWZpbmUgTkVPX1NURVJFT19UT19IRUFEUEhPTkVTCTUKLSNkZWZpbmUgTkVPX0NBUFRVUkVfSEFORFNFVAkJNgotI2RlZmluZSBORU9fQ0FQVFVSRV9IRUFEU0VUCQk3Ci0jZGVmaW5lIE5FT19DQVBUVVJFX0JMVUVUT09USAkJOAotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBuZW8xOTczOwotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICppMmM7Ci0KIHN0YXRpYyBpbnQgbmVvMTk3M19oaWZpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTYyLDggKzM3LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGlpc19jbGtyYXRlOwogCi0JcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQogCWlpc19jbGtyYXRlID0gczNjMjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZSgpOwogCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CkBAIC0xNDgsOCArMTIxLDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKIAotCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KIAlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODc1M19QTEwxLCAwLCAwLCAwKTsKIH0KQEAgLTE3MSw4ICsxNDIsNiBAQAogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgaWlzX2Nsa3JhdGU7CiAKLQlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCiAJaWlzX2Nsa3JhdGUgPSBzM2MyNHh4X2kyc19nZXRfY2xvY2tyYXRlKCk7CiAKIAlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSAhPSA4MDAwKQpAQCAtMjE0LDggKzE4Myw2IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CiAKLQlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCiAJLyogZGlzYWJsZSB0aGUgUExMICovCiAJcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg3NTNfUExMMiwgMCwgMCwgMCk7CiB9CkBAIC0yMjUsMjA1ICsxOTIsMTYgQEAKIAkuaHdfZnJlZSA9IG5lbzE5NzNfdm9pY2VfaHdfZnJlZSwKIH07CiAKLXN0YXRpYyBpbnQgbmVvMTk3M19zY2VuYXJpbzsKKy8qIFNoYXJlZCByb3V0ZXMgYW5kIGNvbnRyb2xzICovCiAKLXN0YXRpYyBpbnQgbmVvMTk3M19nZXRfc2NlbmFyaW8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBuZW8xOTczX3NjZW5hcmlvOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9zY2VuYXJpb19lbmRwb2ludHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgc2NlbmFyaW8pCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwotCi0JcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCXN3aXRjaCAobmVvMTk3M19zY2VuYXJpbykgewotCWNhc2UgTkVPX0FVRElPX09GRjoKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJBdWRpbyBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBJbiIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQ2FsbCBNaWMiKTsKLQkJYnJlYWs7Ci0JY2FzZSBORU9fR1NNX0NBTExfQVVESU9fSEFORFNFVDoKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgT3V0Iik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJHU00gTGluZSBJbiIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOwotCQlicmVhazsKLQljYXNlIE5FT19HU01fQ0FMTF9BVURJT19IRUFEU0VUOgotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiQXVkaW8gT3V0Iik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkNhbGwgTWljIik7Ci0JCWJyZWFrOwotCWNhc2UgTkVPX0dTTV9DQUxMX0FVRElPX0JMVUVUT09USDoKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJBdWRpbyBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgSW4iKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkNhbGwgTWljIik7Ci0JCWJyZWFrOwotCWNhc2UgTkVPX1NURVJFT19UT19TUEVBS0VSUzoKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOwotCQlicmVhazsKLQljYXNlIE5FT19TVEVSRU9fVE9fSEVBRFBIT05FUzoKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOwotCQlicmVhazsKLQljYXNlIE5FT19DQVBUVVJFX0hBTkRTRVQ6Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQXVkaW8gT3V0Iik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgT3V0Iik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgSW4iKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiQ2FsbCBNaWMiKTsKLQkJYnJlYWs7Ci0JY2FzZSBORU9fQ0FQVFVSRV9IRUFEU0VUOgotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkNhbGwgTWljIik7Ci0JCWJyZWFrOwotCWNhc2UgTkVPX0NBUFRVUkVfQkxVRVRPT1RIOgotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOwotCX0KLQotCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmVvMTk3M19zZXRfc2NlbmFyaW8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCi0JcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChuZW8xOTczX3NjZW5hcmlvID09IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQotCQlyZXR1cm4gMDsKLQotCW5lbzE5NzNfc2NlbmFyaW8gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQlzZXRfc2NlbmFyaW9fZW5kcG9pbnRzKGNvZGVjLCBuZW8xOTczX3NjZW5hcmlvKTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHU4IGxtNDg1N19yZWdzWzRdID0gezB4MDAsIDB4NDAsIDB4ODAsIDB4QzB9OwotCi1zdGF0aWMgdm9pZCBsbTQ4NTdfd3JpdGVfcmVncyh2b2lkKQotewotCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGkyYywgbG00ODU3X3JlZ3MsIDQpICE9IDQpCi0JCXByaW50ayhLRVJOX0VSUiAibG00ODU3OiBpMmMgd3JpdGUgZmFpbGVkXG4iKTsKLX0KLQotc3RhdGljIGludCBsbTQ4NTdfZ2V0X3JlZyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KLQkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwotCWludCByZWcgPSBtYy0+cmVnOwotCWludCBzaGlmdCA9IG1jLT5zaGlmdDsKLQlpbnQgbWFzayA9IG1jLT5tYXg7Ci0KLQlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCi0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAobG00ODU3X3JlZ3NbcmVnXSA+PiBzaGlmdCkgJiBtYXNrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxtNDg1N19zZXRfcmVnKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQotCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7Ci0JaW50IHJlZyA9IG1jLT5yZWc7Ci0JaW50IHNoaWZ0ID0gbWMtPnNoaWZ0OwotCWludCBtYXNrID0gbWMtPm1heDsKLQotCWlmICgoKGxtNDg1N19yZWdzW3JlZ10gPj4gc2hpZnQpICYgbWFzaykgPT0KLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCi0JCXJldHVybiAwOwotCi0JbG00ODU3X3JlZ3NbcmVnXSAmPSB+KG1hc2sgPDwgc2hpZnQpOwotCWxtNDg1N19yZWdzW3JlZ10gfD0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPDwgc2hpZnQ7Ci0JbG00ODU3X3dyaXRlX3JlZ3MoKTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBsbTQ4NTdfZ2V0X21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0JdTggdmFsdWUgPSBsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gJiAweDBGOwotCi0JcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmICh2YWx1ZSkKLQkJdmFsdWUgLT0gNTsKLQotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdmFsdWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbG00ODU3X3NldF9tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXU4IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0KLQlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKHZhbHVlKQotCQl2YWx1ZSArPSA1OwotCi0JaWYgKChsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gJiAweDBGKSA9PSB2YWx1ZSkKLQkJcmV0dXJuIDA7Ci0KLQlsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gJj0gMHhGMDsKLQlsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gfD0gdmFsdWU7Ci0JbG00ODU3X3dyaXRlX3JlZ3MoKTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODc1M19kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fTElORSgiQXVkaW8gT3V0IiwgTlVMTCksCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgbmVvMTk3M193bTg3NTNfZGFwbV93aWRnZXRzW10gPSB7CiAJU05EX1NPQ19EQVBNX0xJTkUoIkdTTSBMaW5lIE91dCIsIE5VTEwpLAogCVNORF9TT0NfREFQTV9MSU5FKCJHU00gTGluZSBJbiIsIE5VTEwpLAogCVNORF9TT0NfREFQTV9NSUMoIkhlYWRzZXQgTWljIiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX01JQygiQ2FsbCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIYW5kc2V0IE1pYyIsIE5VTEwpLAogfTsKIAotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBkYXBtX3JvdXRlc1tdID0gewotCi0JLyogQ29ubmVjdGlvbnMgdG8gdGhlIGxtNDg1NyBhbXAgKi8KLQl7IkF1ZGlvIE91dCIsIE5VTEwsICJMT1VUMSJ9LAotCXsiQXVkaW8gT3V0IiwgTlVMTCwgIlJPVVQxIn0sCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIG5lbzE5NzNfd204NzUzX3JvdXRlc1tdID0gewogCS8qIENvbm5lY3Rpb25zIHRvIHRoZSBHU00gTW9kdWxlICovCiAJeyJHU00gTGluZSBPdXQiLCBOVUxMLCAiTU9OTzEifSwKIAl7IkdTTSBMaW5lIE91dCIsIE5VTEwsICJNT05PMiJ9LApAQCAtNDM3LDEyMyArMjE1LDIwOSBAQAogCS8qIENhbGwgTWljICovCiAJeyJNSUMyIiwgTlVMTCwgIk1pYyBCaWFzIn0sCiAJeyJNSUMyTiIsIE5VTEwsICJNaWMgQmlhcyJ9LAotCXsiTWljIEJpYXMiLCBOVUxMLCAiQ2FsbCBNaWMifSwKKwl7Ik1pYyBCaWFzIiwgTlVMTCwgIkhhbmRzZXQgTWljIn0sCiAKIAkvKiBDb25uZWN0IHRoZSBBTEMgcGlucyAqLwogCXsiQUNJTiIsIE5VTEwsICJBQ09QIn0sCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqbG00ODU3X21vZGVbXSA9IHsKLQkiT2ZmIiwKLQkiQ2FsbCBTcGVha2VyIiwKLQkiU3RlcmVvIFNwZWFrZXJzIiwKLQkiU3RlcmVvIFNwZWFrZXJzICsgSGVhZHBob25lcyIsCi0JIkhlYWRwaG9uZXMiCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbmVvMTk3M193bTg3NTNfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJHU00gTGluZSBPdXQiKSwKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJHU00gTGluZSBJbiIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRzZXQgTWljIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiSGFuZHNldCBNaWMiKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbG00ODU3X21vZGVfZW51bVtdID0gewotCVNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRShsbTQ4NTdfbW9kZSksIGxtNDg1N19tb2RlKSwKKy8qIEdUQTAyIHNwZWNpZmljIHJvdXRlcyBhbmQgY29udHJvbGxzICovCisKKyNpZmRlZiBDT05GSUdfTUFDSF9ORU8xOTczX0dUQTAyCisKK3N0YXRpYyBpbnQgZ3RhMDJfc3BlYWtlcl9lbmFibGVkOworCitzdGF0aWMgaW50IGxtNDg1M19zZXRfc3BrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWd0YTAyX3NwZWFrZXJfZW5hYmxlZCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJZ3Bpb19zZXRfdmFsdWUoR1RBMDJfR1BJT19IUF9JTiwgIWd0YTAyX3NwZWFrZXJfZW5hYmxlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsbTQ4NTNfZ2V0X3NwayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGd0YTAyX3NwZWFrZXJfZW5hYmxlZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsbTQ4NTNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1RBMDJfR1BJT19BTVBfU0hVVCwgU05EX1NPQ19EQVBNX0VWRU5UX09GRihldmVudCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIG5lbzE5NzNfZ3RhMDJfcm91dGVzW10gPSB7CisJLyogQ29ubmVjdGlvbnMgdG8gdGhlIGFtcCAqLworCXsiU3RlcmVvIE91dCIsIE5VTEwsICJMT1VUMSJ9LAorCXsiU3RlcmVvIE91dCIsIE5VTEwsICJST1VUMSJ9LAorCisJLyogQ2FsbCBTcGVha2VyICovCisJeyJIYW5kc2V0IFNwayIsIE5VTEwsICJMT1VUMiJ9LAorCXsiSGFuZHNldCBTcGsiLCBOVUxMLCAiUk9VVDIifSwKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpuZW9fc2NlbmFyaW9zW10gPSB7Ci0JIk9mZiIsCi0JIkdTTSBIYW5kc2V0IiwKLQkiR1NNIEhlYWRzZXQiLAotCSJHU00gQmx1ZXRvb3RoIiwKLQkiU3BlYWtlcnMiLAotCSJIZWFkcGhvbmVzIiwKLQkiQ2FwdHVyZSBIYW5kc2V0IiwKLQkiQ2FwdHVyZSBIZWFkc2V0IiwKLQkiQ2FwdHVyZSBCbHVldG9vdGgiCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbmVvMTk3M19ndGEwMl93bTg3NTNfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJIYW5kc2V0IFNwayIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIlN0ZXJlbyBPdXQiKSwKKworCVNPQ19TSU5HTEVfQk9PTF9FWFQoIkFtcCBTcGsgU3dpdGNoIiwgMCwKKwkJbG00ODUzX2dldF9zcGssCisJCWxtNDg1M19zZXRfc3BrKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbmVvX3NjZW5hcmlvX2VudW1bXSA9IHsKLQlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUobmVvX3NjZW5hcmlvcyksIG5lb19zY2VuYXJpb3MpLAorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IG5lbzE5NzNfZ3RhMDJfd204NzUzX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9TUEsoIkhhbmRzZXQgU3BrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiU3RlcmVvIE91dCIsIGxtNDg1M19ldmVudCksCiB9OwogCi1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3RlcmVvX3RsdiwgLTQwNTAsIDE1MCwgMCk7Ci1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobW9ub190bHYsIC0zNDUwLCAxNTAsIDApOworc3RhdGljIGludCBuZW8xOTczX2d0YTAyX3dtODc1M19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisJaW50IHJldDsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc1M19uZW8xOTczX2NvbnRyb2xzW10gPSB7Ci0JU09DX1NJTkdMRV9FWFRfVExWKCJBbXAgTGVmdCBQbGF5YmFjayBWb2x1bWUiLCBMTTQ4NTdfTFZPTCwgMCwgMzEsIDAsCi0JCWxtNDg1N19nZXRfcmVnLCBsbTQ4NTdfc2V0X3JlZywgc3RlcmVvX3RsdiksCi0JU09DX1NJTkdMRV9FWFRfVExWKCJBbXAgUmlnaHQgUGxheWJhY2sgVm9sdW1lIiwgTE00ODU3X1JWT0wsIDAsIDMxLCAwLAotCQlsbTQ4NTdfZ2V0X3JlZywgbG00ODU3X3NldF9yZWcsIHN0ZXJlb190bHYpLAotCVNPQ19TSU5HTEVfRVhUX1RMVigiQW1wIE1vbm8gUGxheWJhY2sgVm9sdW1lIiwgTE00ODU3X01WT0wsIDAsIDMxLCAwLAotCQlsbTQ4NTdfZ2V0X3JlZywgbG00ODU3X3NldF9yZWcsIG1vbm9fdGx2KSwKLQlTT0NfRU5VTV9FWFQoIkFtcCBNb2RlIiwgbG00ODU3X21vZGVfZW51bVswXSwKLQkJbG00ODU3X2dldF9tb2RlLCBsbTQ4NTdfc2V0X21vZGUpLAotCVNPQ19FTlVNX0VYVCgiTmVvIE1vZGUiLCBuZW9fc2NlbmFyaW9fZW51bVswXSwKLQkJbmVvMTk3M19nZXRfc2NlbmFyaW8sIG5lbzE5NzNfc2V0X3NjZW5hcmlvKSwKLQlTT0NfU0lOR0xFX0VYVCgiQW1wIFNwayAzRCBQbGF5YmFjayBTd2l0Y2giLCBMTTQ4NTdfTFZPTCwgNSwgMSwgMCwKLQkJbG00ODU3X2dldF9yZWcsIGxtNDg1N19zZXRfcmVnKSwKLQlTT0NfU0lOR0xFX0VYVCgiQW1wIEhQIDNkIFBsYXliYWNrIFN3aXRjaCIsIExNNDg1N19SVk9MLCA1LCAxLCAwLAotCQlsbTQ4NTdfZ2V0X3JlZywgbG00ODU3X3NldF9yZWcpLAotCVNPQ19TSU5HTEVfRVhUKCJBbXAgRmFzdCBXYWtldXAgUGxheWJhY2sgU3dpdGNoIiwgTE00ODU3X0NUUkwsIDUsIDEsIDAsCi0JCWxtNDg1N19nZXRfcmVnLCBsbTQ4NTdfc2V0X3JlZyksCi0JU09DX1NJTkdMRV9FWFQoIkFtcCBFYXJwaWVjZSA2ZEIgUGxheWJhY2sgU3dpdGNoIiwgTE00ODU3X0NUUkwsIDQsIDEsIDAsCi0JCWxtNDg1N19nZXRfcmVnLCBsbTQ4NTdfc2V0X3JlZyksCi19OworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgbmVvMTk3M19ndGEwMl93bTg3NTNfZGFwbV93aWRnZXRzLAorCQkJQVJSQVlfU0laRShuZW8xOTczX2d0YTAyX3dtODc1M19kYXBtX3dpZGdldHMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0vKgotICogVGhpcyBpcyBhbiBleGFtcGxlIG1hY2hpbmUgaW5pdGlhbGlzYXRpb24gZm9yIGEgd204NzUzIGNvbm5lY3RlZCB0byBhCi0gKiBuZW8xOTczIElJLiBJdCBpcyBtaXNzaW5nIGxvZ2ljIHRvIGRldGVjdCBocC9taWMgaW5zZXJ0aW9ucyBhbmQgbG9naWMKLSAqIHRvIHJlLXJvdXRlIHRoZSBhdWRpbyBpbiBzdWNoIGFuIGV2ZW50LgotICovCisJcmV0ID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgbmVvMTk3M19ndGEwMl9yb3V0ZXMsCisJCQlBUlJBWV9TSVpFKG5lbzE5NzNfZ3RhMDJfcm91dGVzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBuZW8xOTczX2d0YTAyX3dtODc1M19jb250cm9scywKKwkJCUFSUkFZX1NJWkUobmVvMTk3M19ndGEwMl93bTg3NTNfY29udHJvbHMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJTdGVyZW8gT3V0Iik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIYW5kc2V0IFNwayIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChkYXBtLCAiU3RlcmVvIE91dCIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChkYXBtLCAiSGFuZHNldCBTcGsiKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorc3RhdGljIGludCBuZW8xOTczX2d0YTAyX3dtODc1M19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGUgKmNvZGVjKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKwogc3RhdGljIGludCBuZW8xOTczX3dtODc1M19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0JaW50IGVycjsKLQotCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJaW50IHJldDsKIAogCS8qIHNldCB1cCBOQyBjb2RlYyBwaW5zICovCi0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTE9VVDIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJST1VUMiIpOworCWlmIChtYWNoaW5lX2lzX25lbzE5NzNfZ3RhMDEoKSkgeworCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMT1VUMiIpOworCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJST1VUMiIpOworCX0KIAlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVQzIik7CiAJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiT1VUNCIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkUxIik7CiAJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORTIiKTsKIAogCS8qIEFkZCBuZW8xOTczIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODc1M19kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtODc1M19kYXBtX3dpZGdldHMpKTsKLQotCS8qIHNldCBlbmRwb2ludHMgdG8gZGVmYXVsdCBtb2RlICovCi0Jc2V0X3NjZW5hcmlvX2VuZHBvaW50cyhjb2RlYywgTkVPX0FVRElPX09GRik7CisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBuZW8xOTczX3dtODc1M19kYXBtX3dpZGdldHMsCisJCQlBUlJBWV9TSVpFKG5lbzE5NzNfd204NzUzX2RhcG1fd2lkZ2V0cykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAkvKiBhZGQgbmVvMTk3MyBzcGVjaWZpYyBjb250cm9scyAqLwotCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTNfbmVvMTk3M19jb250cm9scywKLQkJCQlBUlJBWV9TSVpFKDg3NTNfbmVvMTk3M19jb250cm9scykpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBuZW8xOTczX3dtODc1M19jb250cm9scywKKwkJCUFSUkFZX1NJWkUobmVvMTk3M193bTg3NTNfY29udHJvbHMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyogc2V0IHVwIG5lbzE5NzMgc3BlY2lmaWMgYXVkaW8gcm91dGVzICovCi0JZXJyID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgZGFwbV9yb3V0ZXMsCi0JCQkJICAgICAgQVJSQVlfU0laRShkYXBtX3JvdXRlcykpOworCXJldCA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIG5lbzE5NzNfd204NzUzX3JvdXRlcywKKwkJCUFSUkFZX1NJWkUobmVvMTk3M193bTg3NTNfcm91dGVzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCBlbmRwb2ludHMgdG8gZGVmYXVsdCBvZmYgbW9kZSAqLworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgT3V0Iik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBJbiIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhhbmRzZXQgTWljIik7CisKKwkvKiBhbGxvdyBhdWRpbyBwYXRocyBmcm9tIHRoZSBHU00gbW9kZW0gdG8gcnVuIGR1cmluZyBzdXNwZW5kICovCisJc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJHU00gTGluZSBPdXQiKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIkdTTSBMaW5lIEluIik7CisJc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJIZWFkc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChkYXBtLCAiSGFuZHNldCBNaWMiKTsKKworCWlmIChtYWNoaW5lX2lzX25lbzE5NzNfZ3RhMDIoKSkgeworCQlyZXQgPSBuZW8xOTczX2d0YTAyX3dtODc1M19pbml0KGNvZGVjKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEJUIENvZGVjIERBSQotICovCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpIGJ0X2RhaSA9IHsKLQkubmFtZSA9ICJibHVldG9vdGgtZGFpIiwKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMSwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMCwKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDEsCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDAsCi0JCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKy8qIEdUQTAxIHNwZWNpZmljIGNvbnRyb2xscyAqLworCisjaWZkZWYgQ09ORklHX01BQ0hfTkVPMTk3M19HVEEwMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBuZW8xOTczX2xtNDg1N19yb3V0ZXNbXSA9IHsKKwl7IkFtcCBJTiIsIE5VTEwsICJST1VUMSJ9LAorCXsiQW1wIElOIiwgTlVMTCwgIkxPVVQxIn0sCisKKwl7IkhhbmRzZXQgU3BrIiwgTlVMTCwgIkFtcCBFUCJ9LAorCXsiU3RlcmVvIE91dCIsIE5VTEwsICJBbXAgTFMifSwKKwl7IkhlYWRwaG9uZSIsIE5VTEwsICJBbXAgSFAifSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBuZW8xOTczX2xtNDg1N19kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fU1BLKCJIYW5kc2V0IFNwayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIlN0ZXJlbyBPdXQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSIsIE5VTEwpLAorfTsKKworc3RhdGljIGludCBuZW8xOTczX2xtNDg1N19pbml0KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBuZW8xOTczX2xtNDg1N19kYXBtX3dpZGdldHMsCisJCQlBUlJBWV9TSVpFKG5lbzE5NzNfbG00ODU3X2RhcG1fd2lkZ2V0cykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBuZW8xOTczX2xtNDg1N19yb3V0ZXMsCisJCQlBUlJBWV9TSVpFKG5lbzE5NzNfbG00ODU3X3JvdXRlcykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIlN0ZXJlbyBPdXQiKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIkhhbmRzZXQgU3BrIik7CisJc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJIZWFkcGhvbmUiKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCitzdGF0aWMgaW50IG5lbzE5NzNfbG00ODU3X2luaXQoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKSB7IHJldHVybiAwOyB9OworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBuZW8xOTczX2RhaVtdID0gewogeyAvKiBIaWZpIFBsYXliYWNrIC0gZm9yIHNpbWlsYXRpb3VzIHVzZSB3aXRoIHZvaWNlIGJlbG93ICovCiAJLm5hbWUgPSAiV004NzUzIiwKQEAgLTU2OSw5MCArNDMzLDQ5IEBACiAJLm5hbWUgPSAiQmx1ZXRvb3RoIiwKIAkuc3RyZWFtX25hbWUgPSAiVm9pY2UiLAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAotCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCisJLmNwdV9kYWlfbmFtZSA9ICJkZmJtY3MzMjAtcGNtIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLXZvaWNlIiwKIAkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkub3BzID0gJm5lbzE5NzNfdm9pY2Vfb3BzLAogfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19hdXhfZGV2IG5lbzE5NzNfYXV4X2RldnNbXSA9IHsKKwl7CisJCS5uYW1lID0gImRmYm1jczMyMCIsCisJCS5jb2RlY19uYW1lID0gImRmYm1jczMyMC4wIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAibG00ODU3IiwKKwkJLmNvZGVjX25hbWUgPSAibG00ODU3LjAtMDA3YyIsCisJCS5pbml0ID0gbmVvMTk3M19sbTQ4NTdfaW5pdCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2NvbmYgbmVvMTk3M19jb2RlY19jb25mW10gPSB7CisJeworCQkuZGV2X25hbWUgPSAibG00ODU3LjAtMDA3YyIsCisJCS5uYW1lX3ByZWZpeCA9ICJBbXAiLAorCX0sCit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfTkVPMTk3M19HVEEwMgorc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvIG5lbzE5NzNfZ3RhMDJfZ3Bpb3NbXSA9IHsKKwl7IEdUQTAyX0dQSU9fSFBfSU4sIEdQSU9GX09VVF9JTklUX0hJR0gsICJHVEEwMl9IUF9JTiIgfSwKKwl7IEdUQTAyX0dQSU9fQU1QX1NIVVQsIEdQSU9GX09VVF9JTklUX0hJR0gsICJHVEEwMl9BTVBfU0hVVCIgfSwKK307CisjZWxzZQorc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvIG5lbzE5NzNfZ3RhMDJfZ3Bpb3NbXSA9IHt9OworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG5lbzE5NzMgPSB7CiAJLm5hbWUgPSAibmVvMTk3MyIsCiAJLmRhaV9saW5rID0gbmVvMTk3M19kYWksCiAJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobmVvMTk3M19kYWkpLAotfTsKLQotc3RhdGljIGludCBsbTQ4NTdfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpMmMgPSBjbGllbnQ7Ci0KLQlsbTQ4NTdfd3JpdGVfcmVncygpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxtNDg1N19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWkyYyA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHU4IGxtNDg1N19zdGF0ZTsKLQotc3RhdGljIGludCBsbTQ4NTdfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWRldl9kYmcoJmRldi0+ZGV2LCAibG00ODU3X3N1c3BlbmRcbiIpOwotCWxtNDg1N19zdGF0ZSA9IGxtNDg1N19yZWdzW0xNNDg1N19DVFJMXSAmIDB4ZjsKLQlpZiAobG00ODU3X3N0YXRlKSB7Ci0JCWxtNDg1N19yZWdzW0xNNDg1N19DVFJMXSAmPSAweGYwOwotCQlsbTQ4NTdfd3JpdGVfcmVncygpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsbTQ4NTdfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpkZXYpCi17Ci0JcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChsbTQ4NTdfc3RhdGUpIHsKLQkJbG00ODU3X3JlZ3NbTE00ODU3X0NUUkxdIHw9IChsbTQ4NTdfc3RhdGUgJiAweDBmKTsKLQkJbG00ODU3X3dyaXRlX3JlZ3MoKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGxtNDg1N19zaHV0ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2KQotewotCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlkZXZfZGJnKCZkZXYtPmRldiwgImxtNDg1N19zaHV0ZG93blxuIik7Ci0JbG00ODU3X3JlZ3NbTE00ODU3X0NUUkxdICY9IDB4ZjA7Ci0JbG00ODU3X3dyaXRlX3JlZ3MoKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtNDg1N19pMmNfaWRbXSA9IHsKLQl7ICJuZW8xOTczX2xtNDg1NyIsIDAgfSwKLQl7IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTQ4NTdfaTJjX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJMTTQ4NTcgSTJDIEFtcCIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnN1c3BlbmQgPSAgICAgICAgbG00ODU3X3N1c3BlbmQsCi0JLnJlc3VtZQk9ICAgICAgICAgbG00ODU3X3Jlc3VtZSwKLQkuc2h1dGRvd24gPSAgICAgICBsbTQ4NTdfc2h1dGRvd24sCi0JLnByb2JlID0gICAgICAgICAgbG00ODU3X2kyY19wcm9iZSwKLQkucmVtb3ZlID0gICAgICAgICBsbTQ4NTdfaTJjX3JlbW92ZSwKLQkuaWRfdGFibGUgPSAgICAgICBsbTQ4NTdfaTJjX2lkLAorCS5hdXhfZGV2ID0gbmVvMTk3M19hdXhfZGV2cywKKwkubnVtX2F1eF9kZXZzID0gQVJSQVlfU0laRShuZW8xOTczX2F1eF9kZXZzKSwKKwkuY29kZWNfY29uZiA9IG5lbzE5NzNfY29kZWNfY29uZiwKKwkubnVtX2NvbmZpZ3MgPSBBUlJBWV9TSVpFKG5lbzE5NzNfY29kZWNfY29uZiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbmVvMTk3M19zbmRfZGV2aWNlOwpAQCAtNjYxLDQ2ICs0ODQsNTYgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmICghbWFjaGluZV9pc19uZW8xOTczX2d0YTAxKCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIk9ubHkgR1RBMDEgaGFyZHdhcmUgc3VwcG9ydGVkIGJ5IEFTb0MgZHJpdmVyXG4iKTsKKwlpZiAoIW1hY2hpbmVfaXNfbmVvMTk3M19ndGEwMSgpICYmICFtYWNoaW5lX2lzX25lbzE5NzNfZ3RhMDIoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAobWFjaGluZV9pc19uZW8xOTczX2d0YTAyKCkpIHsKKwkJbmVvMTk3My5uYW1lID0gIm5lbzE5NzNndGEwMiI7CisJCW5lbzE5NzMubnVtX2F1eF9kZXZzID0gMTsKKworCQlyZXQgPSBncGlvX3JlcXVlc3RfYXJyYXkobmVvMTk3M19ndGEwMl9ncGlvcywKKwkJCQlBUlJBWV9TSVpFKG5lbzE5NzNfZ3RhMDJfZ3Bpb3MpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAJfQogCiAJbmVvMTk3M19zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Ci0JaWYgKCFuZW8xOTczX3NuZF9kZXZpY2UpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghbmVvMTk3M19zbmRfZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2dwaW9fZnJlZTsKKwl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShuZW8xOTczX3NuZF9kZXZpY2UsICZuZW8xOTczKTsKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG5lbzE5NzNfc25kX2RldmljZSk7CiAKLQlpZiAocmV0KSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQobmVvMTk3M19zbmRfZGV2aWNlKTsKLQkJcmV0dXJuIHJldDsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wdXRfZGV2aWNlOworCisJcmV0dXJuIDA7CisKK2Vycl9wdXRfZGV2aWNlOgorCXBsYXRmb3JtX2RldmljZV9wdXQobmVvMTk3M19zbmRfZGV2aWNlKTsKK2Vycl9ncGlvX2ZyZWU6CisJaWYgKG1hY2hpbmVfaXNfbmVvMTk3M19ndGEwMigpKSB7CisJCWdwaW9fZnJlZV9hcnJheShuZW8xOTczX2d0YTAyX2dwaW9zLAorCQkJCUFSUkFZX1NJWkUobmVvMTk3M19ndGEwMl9ncGlvcykpOwogCX0KLQotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZsbTQ4NTdfaTJjX2RyaXZlcik7Ci0KLQlpZiAocmV0ICE9IDApCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG5lbzE5NzNfc25kX2RldmljZSk7Ci0KIAlyZXR1cm4gcmV0OwogfQorbW9kdWxlX2luaXQobmVvMTk3M19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IG5lbzE5NzNfZXhpdCh2b2lkKQogewotCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpMmNfZGVsX2RyaXZlcigmbG00ODU3X2kyY19kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG5lbzE5NzNfc25kX2RldmljZSk7Ci19CiAKLW1vZHVsZV9pbml0KG5lbzE5NzNfaW5pdCk7CisJaWYgKG1hY2hpbmVfaXNfbmVvMTk3M19ndGEwMigpKSB7CisJCWdwaW9fZnJlZV9hcnJheShuZW8xOTczX2d0YTAyX2dwaW9zLAorCQkJCUFSUkFZX1NJWkUobmVvMTk3M19ndGEwMl9ncGlvcykpOworCX0KK30KIG1vZHVsZV9leGl0KG5lbzE5NzNfZXhpdCk7CiAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwogTU9EVUxFX0FVVEhPUigiR3JhZW1lIEdyZWdvcnksIGdyYWVtZUBvcGVubW9rby5vcmcsIHd3dy5vcGVubW9rby5vcmciKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgV004NzUzIE5lbzE5NzMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgV004NzUzIE5lbzE5NzMgYW5kIEZyZXJ1bm5lciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvcGNtLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYwppbmRleCA0OGQwYjc1Li4zOGFhYzdkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYwpAQCAtMTEsMjAgKzExLDExIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAKICNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KQEAgLTMyLDYgKzIzLDExMyBAQAogI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInBjbS5oIgogCisvKlJlZ2lzdGVyIE9mZnNldHMgKi8KKyNkZWZpbmUgUzNDX1BDTV9DVEwJCTB4MDAKKyNkZWZpbmUgUzNDX1BDTV9DTEtDVEwJCTB4MDQKKyNkZWZpbmUgUzNDX1BDTV9UWEZJRk8JCTB4MDgKKyNkZWZpbmUgUzNDX1BDTV9SWEZJRk8JCTB4MEMKKyNkZWZpbmUgUzNDX1BDTV9JUlFDVEwJCTB4MTAKKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUCQkweDE0CisjZGVmaW5lIFMzQ19QQ01fRklGT1NUQVQJMHgxOAorI2RlZmluZSBTM0NfUENNX0NMUklOVAkJMHgyMAorCisvKiBQQ01fQ1RMIEJpdC1GaWVsZHMgKi8KKyNkZWZpbmUgUzNDX1BDTV9DVExfVFhESVBTVElDS19NQVNLCTB4M2YKKyNkZWZpbmUgUzNDX1BDTV9DVExfVFhESVBTVElDS19TSElGVAkxMworI2RlZmluZSBTM0NfUENNX0NUTF9SWERJUFNUSUNLX01BU0sJMHgzZgorI2RlZmluZSBTM0NfUENNX0NUTF9SWERJUFNUSUNLX1NISUZUCTcKKyNkZWZpbmUgUzNDX1BDTV9DVExfVFhETUFfRU4JCSgweDEgPDwgNikKKyNkZWZpbmUgUzNDX1BDTV9DVExfUlhETUFfRU4JCSgweDEgPDwgNSkKKyNkZWZpbmUgUzNDX1BDTV9DVExfVFhNU0JfQUZURVJfRlNZTkMJKDB4MSA8PCA0KQorI2RlZmluZSBTM0NfUENNX0NUTF9SWE1TQl9BRlRFUl9GU1lOQwkoMHgxIDw8IDMpCisjZGVmaW5lIFMzQ19QQ01fQ1RMX1RYRklGT19FTgkJKDB4MSA8PCAyKQorI2RlZmluZSBTM0NfUENNX0NUTF9SWEZJRk9fRU4JCSgweDEgPDwgMSkKKyNkZWZpbmUgUzNDX1BDTV9DVExfRU5BQkxFCQkoMHgxIDw8IDApCisKKy8qIFBDTV9DTEtDVEwgQml0LUZpZWxkcyAqLworI2RlZmluZSBTM0NfUENNX0NMS0NUTF9TRVJDTEtfRU4JKDB4MSA8PCAxOSkKKyNkZWZpbmUgUzNDX1BDTV9DTEtDVExfU0VSQ0xLU0VMX1BDTEsJKDB4MSA8PCAxOCkKKyNkZWZpbmUgUzNDX1BDTV9DTEtDVExfU0NMS0RJVl9NQVNLCTB4MWZmCisjZGVmaW5lIFMzQ19QQ01fQ0xLQ1RMX1NZTkNESVZfTUFTSwkweDFmZgorI2RlZmluZSBTM0NfUENNX0NMS0NUTF9TQ0xLRElWX1NISUZUCTkKKyNkZWZpbmUgUzNDX1BDTV9DTEtDVExfU1lOQ0RJVl9TSElGVAkwCisKKy8qIFBDTV9UWEZJRk8gQml0LUZpZWxkcyAqLworI2RlZmluZSBTM0NfUENNX1RYRklGT19EVkFMSUQJKDB4MSA8PCAxNikKKyNkZWZpbmUgUzNDX1BDTV9UWEZJRk9fREFUQV9NU0sJKDB4ZmZmZiA8PCAwKQorCisvKiBQQ01fUlhGSUZPIEJpdC1GaWVsZHMgKi8KKyNkZWZpbmUgUzNDX1BDTV9SWEZJRk9fRFZBTElECSgweDEgPDwgMTYpCisjZGVmaW5lIFMzQ19QQ01fUlhGSUZPX0RBVEFfTVNLCSgweGZmZmYgPDwgMCkKKworLyogUENNX0lSUUNUTCBCaXQtRmllbGRzICovCisjZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX0lSUUVOCQkoMHgxIDw8IDE0KQorI2RlZmluZSBTM0NfUENNX0lSUUNUTF9XUkRFTgkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUzNDX1BDTV9JUlFDVExfVFhFTVBUWUVOCSgweDEgPDwgMTEpCisjZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1RYQUxNU1RFTVBUWUVOCSgweDEgPDwgMTApCisjZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1RYRlVMTEVOCQkoMHgxIDw8IDkpCisjZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1RYQUxNU1RGVUxMRU4JKDB4MSA8PCA4KQorI2RlZmluZSBTM0NfUENNX0lSUUNUTF9UWFNUQVJWRU4JKDB4MSA8PCA3KQorI2RlZmluZSBTM0NfUENNX0lSUUNUTF9UWEVSUk9WUkZMRU4JKDB4MSA8PCA2KQorI2RlZmluZSBTM0NfUENNX0lSUUNUTF9SWEVNUFRFTgkJKDB4MSA8PCA1KQorI2RlZmluZSBTM0NfUENNX0lSUUNUTF9SWEFMTVNURU1QVEVOCSgweDEgPDwgNCkKKyNkZWZpbmUgUzNDX1BDTV9JUlFDVExfUlhGVUxMRU4JCSgweDEgPDwgMykKKyNkZWZpbmUgUzNDX1BDTV9JUlFDVExfUlhBTE1TVEZVTExFTgkoMHgxIDw8IDIpCisjZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1JYU1RBUlZFTgkoMHgxIDw8IDEpCisjZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1JYRVJST1ZSRkxFTgkoMHgxIDw8IDApCisKKy8qIFBDTV9JUlFTVEFUIEJpdC1GaWVsZHMgKi8KKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX0lSUVBORAkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1dSRF9YRkVSCSgweDEgPDwgMTIpCisjZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9UWEVNUFRZCQkoMHgxIDw8IDExKQorI2RlZmluZSBTM0NfUENNX0lSUVNUQVRfVFhBTE1TVEVNUFRZCSgweDEgPDwgMTApCisjZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9UWEZVTEwJCSgweDEgPDwgOSkKKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1RYQUxNU1RGVUxMCSgweDEgPDwgOCkKKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1RYU1RBUlYJCSgweDEgPDwgNykKKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1RYRVJST1ZSRkwJKDB4MSA8PCA2KQorI2RlZmluZSBTM0NfUENNX0lSUVNUQVRfUlhFTVBUCQkoMHgxIDw8IDUpCisjZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9SWEFMTVNURU1QVAkoMHgxIDw8IDQpCisjZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9SWEZVTEwJCSgweDEgPDwgMykKKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1JYQUxNU1RGVUxMCSgweDEgPDwgMikKKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1JYU1RBUlYJCSgweDEgPDwgMSkKKyNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1JYRVJST1ZSRkwJKDB4MSA8PCAwKQorCisvKiBQQ01fRklGT1NUQVQgQml0LUZpZWxkcyAqLworI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUX1RYQ05UX01TSwkJKDB4M2YgPDwgMTQpCisjZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfVFhGSUZPRU1QVFkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfVFhGSUZPQUxNU1RFTVBUWQkoMHgxIDw8IDEyKQorI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUX1RYRklGT0ZVTEwJCSgweDEgPDwgMTEpCisjZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfVFhGSUZPQUxNU1RGVUxMCSgweDEgPDwgMTApCisjZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfUlhDTlRfTVNLCQkoMHgzZiA8PCA0KQorI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUX1JYRklGT0VNUFRZCQkoMHgxIDw8IDMpCisjZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfUlhGSUZPQUxNU1RFTVBUWQkoMHgxIDw8IDIpCisjZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfUlhGSUZPRlVMTAkJKDB4MSA8PCAxKQorI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUX1JYRklGT0FMTVNURlVMTAkoMHgxIDw8IDApCisKKy8qKgorICogc3RydWN0IHMzY19wY21faW5mbyAtIFMzQyBQQ00gQ29udHJvbGxlciBpbmZvcm1hdGlvbgorICogQGRldjogVGhlIHBhcmVudCBkZXZpY2UgcGFzc2VkIHRvIHVzZSBmcm9tIHRoZSBwcm9iZS4KKyAqIEByZWdzOiBUaGUgcG9pbnRlciB0byB0aGUgZGV2aWNlIHJlZ2lzdGVyIGJsb2NrLgorICogQGRtYV9wbGF5YmFjazogRE1BIGluZm9ybWF0aW9uIGZvciBwbGF5YmFjayBjaGFubmVsLgorICogQGRtYV9jYXB0dXJlOiBETUEgaW5mb3JtYXRpb24gZm9yIGNhcHR1cmUgY2hhbm5lbC4KKyAqLworc3RydWN0IHMzY19wY21faW5mbyB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBkZXZpY2UJKmRldjsKKwl2b2lkIF9faW9tZW0JKnJlZ3M7CisKKwl1bnNpZ25lZCBpbnQgc2Nsa19wZXJfZnM7CisKKwkvKiBXaGV0aGVyIHRvIGtlZXAgUENNU0NMSyBlbmFibGVkIGV2ZW4gd2hlbiBpZGxlKG5vIGFjdGl2ZSB4ZmVyKSAqLworCXVuc2lnbmVkIGludCBpZGxlY2xrOworCisJc3RydWN0IGNsawkqcGNsazsKKwlzdHJ1Y3QgY2xrCSpjY2xrOworCisJc3RydWN0IHMzY19kbWFfcGFyYW1zCSpkbWFfcGxheWJhY2s7CisJc3RydWN0IHMzY19kbWFfcGFyYW1zCSpkbWFfY2FwdHVyZTsKK307CisKIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzY19wY21fZG1hX2NsaWVudF9vdXQgPSB7CiAJLm5hbWUJCT0gIlBDTSBTdGVyZW8gb3V0IgogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5oIGIvc291bmQvc29jL3NhbXN1bmcvcGNtLmgKaW5kZXggMDMzOTNkYy4uNzI2YmFmOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvcGNtLmgKKysrIGIvc291bmQvc29jL3NhbXN1bmcvcGNtLmgKQEAgLTksMTE2ICs5LDkgQEAKICNpZm5kZWYgX19TM0NfUENNX0gKICNkZWZpbmUgX19TM0NfUENNX0ggX19GSUxFX18KIAotLypSZWdpc3RlciBPZmZzZXRzICovCi0jZGVmaW5lIFMzQ19QQ01fQ1RMCSgweDAwKQotI2RlZmluZSBTM0NfUENNX0NMS0NUTAkoMHgwNCkKLSNkZWZpbmUgUzNDX1BDTV9UWEZJRk8JKDB4MDgpCi0jZGVmaW5lIFMzQ19QQ01fUlhGSUZPCSgweDBDKQotI2RlZmluZSBTM0NfUENNX0lSUUNUTAkoMHgxMCkKLSNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUCSgweDE0KQotI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUCSgweDE4KQotI2RlZmluZSBTM0NfUENNX0NMUklOVAkoMHgyMCkKLQotLyogUENNX0NUTCBCaXQtRmllbGRzICovCi0jZGVmaW5lIFMzQ19QQ01fQ1RMX1RYRElQU1RJQ0tfTUFTSwkJKDB4M2YpCi0jZGVmaW5lIFMzQ19QQ01fQ1RMX1RYRElQU1RJQ0tfU0hJRlQJKDEzKQotI2RlZmluZSBTM0NfUENNX0NUTF9SWERJUFNUSUNLX01BU0sJCSgweDNmKQotI2RlZmluZSBTM0NfUENNX0NUTF9SWERJUFNUSUNLX1NISUZUCSg3KQotI2RlZmluZSBTM0NfUENNX0NUTF9UWERNQV9FTgkJKDB4MTw8NikKLSNkZWZpbmUgUzNDX1BDTV9DVExfUlhETUFfRU4JCSgweDE8PDUpCi0jZGVmaW5lIFMzQ19QQ01fQ1RMX1RYTVNCX0FGVEVSX0ZTWU5DCSgweDE8PDQpCi0jZGVmaW5lIFMzQ19QQ01fQ1RMX1JYTVNCX0FGVEVSX0ZTWU5DCSgweDE8PDMpCi0jZGVmaW5lIFMzQ19QQ01fQ1RMX1RYRklGT19FTgkJKDB4MTw8MikKLSNkZWZpbmUgUzNDX1BDTV9DVExfUlhGSUZPX0VOCQkoMHgxPDwxKQotI2RlZmluZSBTM0NfUENNX0NUTF9FTkFCTEUJCQkoMHgxPDwwKQotCi0vKiBQQ01fQ0xLQ1RMIEJpdC1GaWVsZHMgKi8KLSNkZWZpbmUgUzNDX1BDTV9DTEtDVExfU0VSQ0xLX0VOCQkoMHgxPDwxOSkKLSNkZWZpbmUgUzNDX1BDTV9DTEtDVExfU0VSQ0xLU0VMX1BDTEsJKDB4MTw8MTgpCi0jZGVmaW5lIFMzQ19QQ01fQ0xLQ1RMX1NDTEtESVZfTUFTSwkJKDB4MWZmKQotI2RlZmluZSBTM0NfUENNX0NMS0NUTF9TWU5DRElWX01BU0sJCSgweDFmZikKLSNkZWZpbmUgUzNDX1BDTV9DTEtDVExfU0NMS0RJVl9TSElGVAkoOSkKLSNkZWZpbmUgUzNDX1BDTV9DTEtDVExfU1lOQ0RJVl9TSElGVAkoMCkKLQotLyogUENNX1RYRklGTyBCaXQtRmllbGRzICovCi0jZGVmaW5lIFMzQ19QQ01fVFhGSUZPX0RWQUxJRAkoMHgxPDwxNikKLSNkZWZpbmUgUzNDX1BDTV9UWEZJRk9fREFUQV9NU0sJKDB4ZmZmZjw8MCkKLQotLyogUENNX1JYRklGTyBCaXQtRmllbGRzICovCi0jZGVmaW5lIFMzQ19QQ01fUlhGSUZPX0RWQUxJRAkoMHgxPDwxNikKLSNkZWZpbmUgUzNDX1BDTV9SWEZJRk9fREFUQV9NU0sJKDB4ZmZmZjw8MCkKLQotLyogUENNX0lSUUNUTCBCaXQtRmllbGRzICovCi0jZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX0lSUUVOCQkoMHgxPDwxNCkKLSNkZWZpbmUgUzNDX1BDTV9JUlFDVExfV1JERU4JCSgweDE8PDEyKQotI2RlZmluZSBTM0NfUENNX0lSUUNUTF9UWEVNUFRZRU4JCSgweDE8PDExKQotI2RlZmluZSBTM0NfUENNX0lSUUNUTF9UWEFMTVNURU1QVFlFTgkoMHgxPDwxMCkKLSNkZWZpbmUgUzNDX1BDTV9JUlFDVExfVFhGVUxMRU4JCSgweDE8PDkpCi0jZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1RYQUxNU1RGVUxMRU4JKDB4MTw8OCkKLSNkZWZpbmUgUzNDX1BDTV9JUlFDVExfVFhTVEFSVkVOCQkoMHgxPDw3KQotI2RlZmluZSBTM0NfUENNX0lSUUNUTF9UWEVSUk9WUkZMRU4JCSgweDE8PDYpCi0jZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1JYRU1QVEVOCQkoMHgxPDw1KQotI2RlZmluZSBTM0NfUENNX0lSUUNUTF9SWEFMTVNURU1QVEVOCSgweDE8PDQpCi0jZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1JYRlVMTEVOCQkoMHgxPDwzKQotI2RlZmluZSBTM0NfUENNX0lSUUNUTF9SWEFMTVNURlVMTEVOCSgweDE8PDIpCi0jZGVmaW5lIFMzQ19QQ01fSVJRQ1RMX1JYU1RBUlZFTgkJKDB4MTw8MSkKLSNkZWZpbmUgUzNDX1BDTV9JUlFDVExfUlhFUlJPVlJGTEVOCQkoMHgxPDwwKQotCi0vKiBQQ01fSVJRU1RBVCBCaXQtRmllbGRzICovCi0jZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9JUlFQTkQJCSgweDE8PDEzKQotI2RlZmluZSBTM0NfUENNX0lSUVNUQVRfV1JEX1hGRVIJCSgweDE8PDEyKQotI2RlZmluZSBTM0NfUENNX0lSUVNUQVRfVFhFTVBUWQkJKDB4MTw8MTEpCi0jZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9UWEFMTVNURU1QVFkJKDB4MTw8MTApCi0jZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9UWEZVTEwJCSgweDE8PDkpCi0jZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9UWEFMTVNURlVMTAkJKDB4MTw8OCkKLSNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1RYU1RBUlYJCSgweDE8PDcpCi0jZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9UWEVSUk9WUkZMCQkoMHgxPDw2KQotI2RlZmluZSBTM0NfUENNX0lSUVNUQVRfUlhFTVBUCQkoMHgxPDw1KQotI2RlZmluZSBTM0NfUENNX0lSUVNUQVRfUlhBTE1TVEVNUFQJCSgweDE8PDQpCi0jZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9SWEZVTEwJCSgweDE8PDMpCi0jZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9SWEFMTVNURlVMTAkJKDB4MTw8MikKLSNkZWZpbmUgUzNDX1BDTV9JUlFTVEFUX1JYU1RBUlYJCSgweDE8PDEpCi0jZGVmaW5lIFMzQ19QQ01fSVJRU1RBVF9SWEVSUk9WUkZMCQkoMHgxPDwwKQotCi0vKiBQQ01fRklGT1NUQVQgQml0LUZpZWxkcyAqLwotI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUX1RYQ05UX01TSwkJKDB4M2Y8PDE0KQotI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUX1RYRklGT0VNUFRZCSgweDE8PDEzKQotI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUX1RYRklGT0FMTVNURU1QVFkJKDB4MTw8MTIpCi0jZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfVFhGSUZPRlVMTAkJKDB4MTw8MTEpCi0jZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfVFhGSUZPQUxNU1RGVUxMCSgweDE8PDEwKQotI2RlZmluZSBTM0NfUENNX0ZJRk9TVEFUX1JYQ05UX01TSwkJKDB4M2Y8PDQpCi0jZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfUlhGSUZPRU1QVFkJKDB4MTw8MykKLSNkZWZpbmUgUzNDX1BDTV9GSUZPU1RBVF9SWEZJRk9BTE1TVEVNUFRZCSgweDE8PDIpCi0jZGVmaW5lIFMzQ19QQ01fRklGT1NUQVRfUlhGSUZPRlVMTAkJKDB4MTw8MSkKLSNkZWZpbmUgUzNDX1BDTV9GSUZPU1RBVF9SWEZJRk9BTE1TVEZVTEwJKDB4MTw8MCkKLQogI2RlZmluZSBTM0NfUENNX0NMS1NSQ19QQ0xLCTAKICNkZWZpbmUgUzNDX1BDTV9DTEtTUkNfTVVYCTEKIAogI2RlZmluZSBTM0NfUENNX1NDTEtfUEVSX0ZTCTAKIAotLyoqCi0gKiBzdHJ1Y3QgczNjX3BjbV9pbmZvIC0gUzNDIFBDTSBDb250cm9sbGVyIGluZm9ybWF0aW9uCi0gKiBAZGV2OiBUaGUgcGFyZW50IGRldmljZSBwYXNzZWQgdG8gdXNlIGZyb20gdGhlIHByb2JlLgotICogQHJlZ3M6IFRoZSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgcmVnaXN0ZXIgYmxvY2suCi0gKiBAZG1hX3BsYXliYWNrOiBETUEgaW5mb3JtYXRpb24gZm9yIHBsYXliYWNrIGNoYW5uZWwuCi0gKiBAZG1hX2NhcHR1cmU6IERNQSBpbmZvcm1hdGlvbiBmb3IgY2FwdHVyZSBjaGFubmVsLgotICovCi1zdHJ1Y3QgczNjX3BjbV9pbmZvIHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGRldmljZQkqZGV2OwotCXZvaWQgX19pb21lbQkqcmVnczsKLQotCXVuc2lnbmVkIGludCBzY2xrX3Blcl9mczsKLQotCS8qIFdoZXRoZXIgdG8ga2VlcCBQQ01TQ0xLIGVuYWJsZWQgZXZlbiB3aGVuIGlkbGUobm8gYWN0aXZlIHhmZXIpICovCi0JdW5zaWduZWQgaW50IGlkbGVjbGs7Ci0KLQlzdHJ1Y3QgY2xrCSpwY2xrOwotCXN0cnVjdCBjbGsJKmNjbGs7Ci0KLQlzdHJ1Y3QgczNjX2RtYV9wYXJhbXMJKmRtYV9wbGF5YmFjazsKLQlzdHJ1Y3QgczNjX2RtYV9wYXJhbXMJKmRtYV9jYXB0dXJlOwotfTsKLQogI2VuZGlmIC8qIF9fUzNDX1BDTV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9yeDE5NTBfdWRhMTM4MC5jIGIvc291bmQvc29jL3NhbXN1bmcvcngxOTUwX3VkYTEzODAuYwppbmRleCBmNDAwMjc0Li4xZTU3NGE1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9yeDE5NTBfdWRhMTM4MC5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3J4MTk1MF91ZGExMzgwLmMKQEAgLTE3LDI2ICsxNywxNSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC91ZGExMzgwLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgotCi0jaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSAiZG1hLmgiCiAjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKLSNpbmNsdWRlICIuLi9jb2RlY3MvdWRhMTM4MC5oIgogCiBzdGF0aWMgaW50IHJ4MTk1MF91ZGExMzgwX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCk7CiBzdGF0aWMgaW50IHJ4MTk1MF9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYy1pMnMtdjIuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYy1pMnMtdjIuYwppbmRleCAwOTRmMzZlLi41MjA3NGEyYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjLWkycy12Mi5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYy1pMnMtdjIuYwpAQCAtMjAsOSArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjQxMi1pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0MTItaTJzLmMKaW5kZXggN2VhODM3OC4uODQxYWIxNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjQxMi1pMnMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNDEyLWkycy5jCkBAIC0xNiwyMSArMTYsMTMgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KQEAgLTM5LDggKzMxLDYgQEAKICNpbmNsdWRlICJyZWdzLWkycy12Mi5oIgogI2luY2x1ZGUgInMzYzI0MTItaTJzLmgiCiAKLSNkZWZpbmUgUzNDMjQxMl9JMlNfREVCVUcgMAotCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2MyNDEyX2RtYV9jbGllbnRfb3V0ID0gewogCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHgtaTJzLmMKaW5kZXggMTNlNDFlZC4uNjNkODg0OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eC1pMnMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4LWkycy5jCkBAIC0xNCwyOCArMTQsMTYgQEAKICAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLQotI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotCiAjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogCiAjaW5jbHVkZSAiZG1hLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlYy5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWMuYwppbmRleCBhNDM0MDMyZC4uMzQ5NTY2ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlYy5jCkBAIC03LDIwICs3LDEzIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAogI2luY2x1ZGUgPHBsYXQvYXVkaW8tc2ltdGVjLmg+CiAKLSNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogI2luY2x1ZGUgInMzYzI0eHhfc2ltdGVjLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMKaW5kZXggMDhmY2FhYS4uY2U2YWVmNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMKQEAgLTcsMTggKzcsOCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2F1ZGlvLXNpbXRlYy5oPgotCi0jaW5jbHVkZSAiZG1hLmgiCi0jaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKICNpbmNsdWRlICJzM2MyNHh4X3NpbXRlYy5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZGFwbV93aWRnZXRzW10gPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYwppbmRleCAxMTZlM2U2Li5hN2VmN2RiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKQEAgLTcsMjIgKzcsMTAgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCi0jaW5jbHVkZSA8cGxhdC9hdWRpby1zaW10ZWMuaD4KLQotI2luY2x1ZGUgImRtYS5oIgotI2luY2x1ZGUgInMzYzI0eHgtaTJzLmgiCiAjaW5jbHVkZSAiczNjMjR4eF9zaW10ZWMuaCIKIAotI2luY2x1ZGUgIi4uL2NvZGVjcy90bHYzMjBhaWMyMy5oIgotCiAvKiBzdXBwb3J0ZWQgbWFjaGluZXM6CiAgKgogICogTWFjaGluZQlDb25uZWN0aW9ucwkJQU1QCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3VkYTEzNHguYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfdWRhMTM0eC5jCmluZGV4IDJjMDllOTMuLmRjOWQ1NTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfdWRhMTM0eC5jCkBAIC0xMSwyMiArMTEsMTUgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zM2MyNHh4X3VkYTEzNHguaD4KLSNpbmNsdWRlIDxzb3VuZC91ZGExMzR4Lmg+CiAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAKLSNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgotI2luY2x1ZGUgIi4uL2NvZGVjcy91ZGExMzR4LmgiCi0KIAogLyogI2RlZmluZSBFTkZPUkNFX1JBVEVTIDEgKi8KIC8qCkBAIC0yMjYsNyArMjE5LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzM2MyNHh4X3VkYTEzNHhfZGFpX2xpbmsgPSB7CiAJLm5hbWUgPSAiVURBMTM0WCIsCiAJLnN0cmVhbV9uYW1lID0gIlVEQTEzNFgiLAotCS5jb2RlY19uYW1lID0gInVkYTEzNHgtaGlmaSIsCisJLmNvZGVjX25hbWUgPSAidWRhMTM0eC1jb2RlYyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInVkYTEzNHgtaGlmaSIsCiAJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWlpcyIsCiAJLm9wcyA9ICZzM2MyNHh4X3VkYTEzNHhfb3BzLApAQCAtMzIxLDYgKzMxNCw3IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzM2MyNHh4X3VkYTEzNHhfc25kX2RldmljZSwKIAkJCSAgICAgJnNuZF9zb2NfczNjMjR4eF91ZGExMzR4KTsKKwlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoczNjMjR4eF91ZGExMzR4X3NuZF9kZXZpY2UsICZzM2MyNHh4X3VkYTEzNHgsIHNpemVvZihzM2MyNHh4X3VkYTEzNHgpKTsKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHMzYzI0eHhfdWRhMTM0eF9zbmRfZGV2aWNlKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUzNDMjRYWF9VREExMzRYIFNvQyBBdWRpbzogVW5hYmxlIHRvIGFkZFxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWFydHFfd204OTg3LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWFydHFfd204OTg3LmMKaW5kZXggNjFlMmI1Mi4uMGEyYzRmMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvc21hcnRxX3dtODk4Ny5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtYXJ0cV93bTg5ODcuYwpAQCAtMTMsMjAgKzEzLDE0IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgImkycy5oIgotCiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1MC5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvc21kazI0NDNfd205NzEwLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrMjQ0M193bTk3MTAuYwppbmRleCAzYmU3ZTdlLi4zYTBkYmZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrMjQ0M193bTk3MTAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrMjQ0M193bTk3MTAuYwpAQCAtMTIsMTUgKzEyLDggQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAotI2luY2x1ZGUgImRtYS5oIgotI2luY2x1ZGUgImFjOTcuaCIKLQogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc21kazI0NDM7CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzbWRrMjQ0M19kYWlbXSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfc3BkaWYuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfc3BkaWYuYwppbmRleCBiNWMzZmFkLi5lOGFjOTYxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3NwZGlmLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvc21ka19zcGRpZi5jCkBAIC0xMCwxNSArMTAsMTAgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCi0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+Ci0KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAotI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInNwZGlmLmgiCiAKIC8qIEF1ZGlvIGNsb2NrIHNldHRpbmdzIGFyZSBiZWxvbmdlZCB0byBib2FyZCBzcGVjaWZpYyBwYXJ0LiBFdmVyeQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvc21ka193bTg1ODAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204NTgwLmMKaW5kZXggYjJjZmYxYS4uOGFhY2YyMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvc21ka193bTg1ODAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODU4MC5jCkBAIC0xMCwxNyArMTAsMTIgQEAKICAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd204NTgwLmgiCi0jaW5jbHVkZSAiZG1hLmgiCiAjaW5jbHVkZSAiaTJzLmgiCiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtOTcxMy5jIGIvc291bmQvc29jL3NhbXN1bmcvc21ka193bTk3MTMuYwppbmRleCBhZTVmZWQ2Li5mZmZlM2MxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd205NzEzLmMKQEAgLTExLDEzICsxMSw4IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAotI2luY2x1ZGUgImRtYS5oIgotI2luY2x1ZGUgImFjOTcuaCIKLQogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc21kazsKIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3NwZGlmLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGRpZi5jCmluZGV4IGYwODE2NDA0Li4yOGM0OTFkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGRpZi5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NwZGlmLmMKQEAgLTEzLDkgKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KIAogI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS1hazQ2NDIuYyBiL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMKaW5kZXggYTE0ODIwYS4uZDZmNDcwMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS1hazQ2NDIuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLWFrNDY0Mi5jCkBAIC0xOCwxOCArMTgsMjYgQEAKIAljb25zdCBjaGFyICpjcHVfZGFpOwogCWNvbnN0IGNoYXIgKmNvZGVjOwogCWNvbnN0IGNoYXIgKnBsYXRmb3JtOworCWludCBpZDsKIH07CiAKIHN0YXRpYyBpbnQgZnNpX2FrNDY0Ml9kYWlfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewotCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gcnRkLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlYyA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1ID0gcnRkLT5jcHVfZGFpOwogCWludCByZXQ7CiAKLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGRhaSwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlYywgU05EX1NPQ19EQUlGTVRfTEVGVF9KIHwKKwkJCQkJIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhkYWksIDAsIDExMjg5NjAwLCAwKTsKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjLCAwLCAxMTI4OTYwMCwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdSwgU05EX1NPQ19EQUlGTVRfTEVGVF9KIHwKKwkJCQkgICAgICAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjAsNyArNjgsNyBAQAogCiAJcGRhdGEgPSAoc3RydWN0IGZzaV9hazQ2NDJfZGF0YSAqKWlkX2VudHJ5LT5kcml2ZXJfZGF0YTsKIAotCWZzaV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCBGU0lfUE9SVF9BKTsKKwlmc2lfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgcGRhdGEtPmlkKTsKIAlpZiAoIWZzaV9zbmRfZGV2aWNlKQogCQlnb3RvIG91dDsKIApAQCAtOTMsNiArMTAxLDcgQEAKIAkuY3B1X2RhaQk9ICJmc2lhLWRhaSIsCiAJLmNvZGVjCQk9ICJhazQ2NDItY29kZWMuMC0wMDEyIiwKIAkucGxhdGZvcm0JPSAic2hfZnNpLjAiLAorCS5pZAkJPSBGU0lfUE9SVF9BLAogfTsKIAogc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpX2JfYWs0NjQyID0gewpAQCAtMTAxLDYgKzExMCw3IEBACiAJLmNwdV9kYWkJPSAiZnNpYi1kYWkiLAogCS5jb2RlYwkJPSAiYWs0NjQyLWNvZGVjLjAtMDAxMiIsCiAJLnBsYXRmb3JtCT0gInNoX2ZzaS4wIiwKKwkuaWQJCT0gRlNJX1BPUlRfQiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZnNpX2FrNDY0Ml9kYXRhIGZzaV9hX2FrNDY0MyA9IHsKQEAgLTEwOSw2ICsxMTksNyBAQAogCS5jcHVfZGFpCT0gImZzaWEtZGFpIiwKIAkuY29kZWMJCT0gImFrNDY0Mi1jb2RlYy4wLTAwMTMiLAogCS5wbGF0Zm9ybQk9ICJzaF9mc2kuMCIsCisJLmlkCQk9IEZTSV9QT1JUX0EsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZzaV9hazQ2NDJfZGF0YSBmc2lfYl9hazQ2NDMgPSB7CkBAIC0xMTcsNiArMTI4LDcgQEAKIAkuY3B1X2RhaQk9ICJmc2liLWRhaSIsCiAJLmNvZGVjCQk9ICJhazQ2NDItY29kZWMuMC0wMDEzIiwKIAkucGxhdGZvcm0JPSAic2hfZnNpLjAiLAorCS5pZAkJPSBGU0lfUE9SVF9CLAogfTsKIAogc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpMl9hX2FrNDY0MiA9IHsKQEAgLTEyNSw2ICsxMzcsNyBAQAogCS5jcHVfZGFpCT0gImZzaWEtZGFpIiwKIAkuY29kZWMJCT0gImFrNDY0Mi1jb2RlYy4wLTAwMTIiLAogCS5wbGF0Zm9ybQk9ICJzaF9mc2kyIiwKKwkuaWQJCT0gRlNJX1BPUlRfQSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZnNpX2FrNDY0Ml9kYXRhIGZzaTJfYl9hazQ2NDIgPSB7CkBAIC0xMzMsNiArMTQ2LDcgQEAKIAkuY3B1X2RhaQk9ICJmc2liLWRhaSIsCiAJLmNvZGVjCQk9ICJhazQ2NDItY29kZWMuMC0wMDEyIiwKIAkucGxhdGZvcm0JPSAic2hfZnNpMiIsCisJLmlkCQk9IEZTSV9QT1JUX0IsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZzaV9hazQ2NDJfZGF0YSBmc2kyX2FfYWs0NjQzID0gewpAQCAtMTQxLDYgKzE1NSw3IEBACiAJLmNwdV9kYWkJPSAiZnNpYS1kYWkiLAogCS5jb2RlYwkJPSAiYWs0NjQyLWNvZGVjLjAtMDAxMyIsCiAJLnBsYXRmb3JtCT0gInNoX2ZzaTIiLAorCS5pZAkJPSBGU0lfUE9SVF9BLAogfTsKIAogc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpMl9iX2FrNDY0MyA9IHsKQEAgLTE0OSw2ICsxNjQsNyBAQAogCS5jcHVfZGFpCT0gImZzaWItZGFpIiwKIAkuY29kZWMJCT0gImFrNDY0Mi1jb2RlYy4wLTAwMTMiLAogCS5wbGF0Zm9ybQk9ICJzaF9mc2kyIiwKKwkuaWQJCT0gRlNJX1BPUlRfQiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGZzaV9pZF90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYyBiL3NvdW5kL3NvYy9zaC9mc2ktZGE3MjEwLmMKaW5kZXggZThkZjlkYS4uZGJhZmQ3YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLWRhNzIxMC5jCkBAIC0xNSwxMSArMTUsMjAgQEAKIAogc3RhdGljIGludCBmc2lfZGE3MjEwX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWMgPSBydGQtPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdSA9IHJ0ZC0+Y3B1X2RhaTsKKwlpbnQgcmV0OwogCi0JcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9mbXQoZGFpLAorCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWMsCiAJCQkJICAgU05EX1NPQ19EQUlGTVRfSTJTIHwKIAkJCQkgICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1LCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgICAgICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBmc2lfZGE3MjEwX2RhaSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2ktaGRtaS5jIGIvc291bmQvc29jL3NoL2ZzaS1oZG1pLmMKaW5kZXggYTUyZGQ4ZS4uOTcxOTk4NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS1oZG1pLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS1oZG1pLmMKQEAgLTEyLDMxICsxMiw1OSBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgogCitzdHJ1Y3QgZnNpX2hkbWlfZGF0YSB7CisJY29uc3QgY2hhciAqY3B1X2RhaTsKKwljb25zdCBjaGFyICpjYXJkOworCWludCBpZDsKK307CisKK3N0YXRpYyBpbnQgZnNpX2hkbWlfZGFpX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdSA9IHJ0ZC0+Y3B1X2RhaTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHUsIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGZzaV9kYWlfbGluayA9IHsKIAkubmFtZQkJPSAiSERNSSIsCiAJLnN0cmVhbV9uYW1lCT0gIkhETUkiLAotCS5jcHVfZGFpX25hbWUJPSAiZnNpYi1kYWkiLCAvKiBmc2kgQiAqLwogCS5jb2RlY19kYWlfbmFtZQk9ICJzaF9tb2JpbGVfaGRtaS1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZQk9ICJzaF9mc2kyIiwKIAkuY29kZWNfbmFtZQk9ICJzaC1tb2JpbGUtaGRtaSIsCisJLmluaXQJCT0gZnNpX2hkbWlfZGFpX2luaXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBmc2lfc29jX2NhcmQgID0gewotCS5uYW1lCQk9ICJGU0kgKFNIIE1PQklMRSBIRE1JKSIsCiAJLmRhaV9saW5rCT0gJmZzaV9kYWlfbGluaywKIAkubnVtX2xpbmtzCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmc2lfc25kX2RldmljZTsKIAotc3RhdGljIGludCBfX2luaXQgZnNpX2hkbWlfaW5pdCh2b2lkKQorc3RhdGljIGludCBmc2lfaGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQgPSAtRU5PTUVNOworCWNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQJKmlkX2VudHJ5OworCXN0cnVjdCBmc2lfaGRtaV9kYXRhICpwZGF0YTsKIAotCWZzaV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCBGU0lfUE9SVF9CKTsKKwlpZF9lbnRyeSA9IHBkZXYtPmlkX2VudHJ5OworCWlmICghaWRfZW50cnkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5rbm93biBmc2kgaGRtaVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBkYXRhID0gKHN0cnVjdCBmc2lfaGRtaV9kYXRhICopaWRfZW50cnktPmRyaXZlcl9kYXRhOworCisJZnNpX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIHBkYXRhLT5pZCk7CiAJaWYgKCFmc2lfc25kX2RldmljZSkKIAkJZ290byBvdXQ7CiAKKwlmc2lfZGFpX2xpbmsuY3B1X2RhaV9uYW1lCT0gcGRhdGEtPmNwdV9kYWk7CisJZnNpX3NvY19jYXJkLm5hbWUJCT0gcGRhdGEtPmNhcmQ7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShmc2lfc25kX2RldmljZSwgJmZzaV9zb2NfY2FyZCk7CiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChmc2lfc25kX2RldmljZSk7CiAKQEAgLTQ3LDkgKzc1LDQ4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZzaV9oZG1pX2V4aXQodm9pZCkKK3N0YXRpYyBpbnQgZnNpX2hkbWlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZnNpX3NuZF9kZXZpY2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZzaV9oZG1pX2RhdGEgZnNpMl9hX2hkbWkgPSB7CisJLmNwdV9kYWkJPSAiZnNpYS1kYWkiLAorCS5jYXJkCQk9ICJGU0kyQSAoU0ggTU9CSUxFIEhETUkpIiwKKwkuaWQJCT0gRlNJX1BPUlRfQSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNpX2hkbWlfZGF0YSBmc2kyX2JfaGRtaSA9IHsKKwkuY3B1X2RhaQk9ICJmc2liLWRhaSIsCisJLmNhcmQJCT0gIkZTSTJCIChTSCBNT0JJTEUgSERNSSkiLAorCS5pZAkJPSBGU0lfUE9SVF9CLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgZnNpX2lkX3RhYmxlW10gPSB7CisJLyogRlNJIDIgKi8KKwl7ICJzaF9mc2kyX2FfaGRtaSIsCShrZXJuZWxfdWxvbmdfdCkmZnNpMl9hX2hkbWkgfSwKKwl7ICJzaF9mc2kyX2JfaGRtaSIsCShrZXJuZWxfdWxvbmdfdCkmZnNpMl9iX2hkbWkgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzaV9oZG1pID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImZzaS1oZG1pLWF1ZGlvIiwKKwl9LAorCS5wcm9iZQkJPSBmc2lfaGRtaV9wcm9iZSwKKwkucmVtb3ZlCQk9IGZzaV9oZG1pX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBmc2lfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmc2lfaGRtaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZnNpX2hkbWkpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNpX2hkbWlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmc2lfaGRtaSk7CiB9CiAKIG1vZHVsZV9pbml0KGZzaV9oZG1pX2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS5jIGIvc291bmQvc29jL3NoL2ZzaS5jCmluZGV4IDJiMDY0MDIuLjBjOTk5N2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKQEAgLTc4LDYgKzc4LDggQEAKIC8qIENLRzEgKi8KICNkZWZpbmUgQUNLTURfTUFTSwkweDAwMDA3MDAwCiAjZGVmaW5lIEJQRk1EX01BU0sJMHgwMDAwMDcwMAorI2RlZmluZSBESU1ECQkoMSA8PCA0KQorI2RlZmluZSBET01ECQkoMSA8PCAwKQogCiAvKiBBL0IgTVNUX0NUTFIgKi8KICNkZWZpbmUgQlAJKDEgPDwgNCkJLyogRml4IHRoZSBzaWduYWwgb2YgQmlwaGFzZSBvdXRwdXQgKi8KQEAgLTExMSw2ICsxMTMsOCBAQAogCiAjZGVmaW5lIEZTSV9GTVRTIChTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKQogCit0eXBlZGVmIGludCAoKnNldF9yYXRlX2Z1bmMpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlzX3BvcnRhLCBpbnQgcmF0ZSwgaW50IGVuYWJsZSk7CisKIC8qCiAgKiBGU0kgZHJpdmVyIHVzZSBiZWxvdyB0eXBlIG5hbWUgZm9yIHZhcmlhYmxlCiAgKgpAQCAtMTI4LDcgKzEzMiw2IEBACiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAKIAlpbnQgZmlmb19tYXhfbnVtOwotCWludCBjaGFuX251bTsKIAogCWludCBidWZmX29mZnNldDsKIAlpbnQgYnVmZl9sZW47CkBAIC0xNDMsNiArMTQ2LDcgQEAKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcjsKIAorCWludCBjaGFuX251bTsKIAlzdHJ1Y3QgZnNpX3N0cmVhbSBwbGF5YmFjazsKIAlzdHJ1Y3QgZnNpX3N0cmVhbSBjYXB0dXJlOwogCkBAIC0yNTIsOSArMjU2LDggQEAKIAlyZXR1cm4gIHJ0ZC0+Y3B1X2RhaTsKIH0KIAotc3RhdGljIHN0cnVjdCBmc2lfcHJpdiAqZnNpX2dldF9wcml2KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIHN0cnVjdCBmc2lfcHJpdiAqZnNpX2dldF9wcml2X2ZybV9kYWkoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBmc2lfZ2V0X2RhaShzdWJzdHJlYW0pOwogCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOwogCiAJaWYgKGRhaS0+aWQgPT0gMCkKQEAgLTI2MywxMSArMjY2LDI3IEBACiAJCXJldHVybiAmbWFzdGVyLT5mc2liOwogfQogCitzdGF0aWMgc3RydWN0IGZzaV9wcml2ICpmc2lfZ2V0X3ByaXYoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIGZzaV9nZXRfcHJpdl9mcm1fZGFpKGZzaV9nZXRfZGFpKHN1YnN0cmVhbSkpOworfQorCitzdGF0aWMgc2V0X3JhdGVfZnVuYyBmc2lfZ2V0X2luZm9fc2V0X3JhdGUoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcikKK3sKKwlpZiAoIW1hc3Rlci0+aW5mbykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbWFzdGVyLT5pbmZvLT5zZXRfcmF0ZTsKK30KKwogc3RhdGljIHUzMiBmc2lfZ2V0X2luZm9fZmxhZ3Moc3RydWN0IGZzaV9wcml2ICpmc2kpCiB7CiAJaW50IGlzX3BvcnRhID0gZnNpX2lzX3BvcnRfYShmc2kpOwogCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCisJaWYgKCFtYXN0ZXItPmluZm8pCisJCXJldHVybiAwOworCiAJcmV0dXJuIGlzX3BvcnRhID8gbWFzdGVyLT5pbmZvLT5wb3J0YV9mbGFncyA6CiAJCW1hc3Rlci0+aW5mby0+cG9ydGJfZmxhZ3M7CiB9CkBAIC0yODgsMjEgKzMwNyw2IEBACiAJcmV0dXJuIGlzX3BsYXkgPyAmZnNpLT5wbGF5YmFjayA6ICZmc2ktPmNhcHR1cmU7CiB9CiAKLXN0YXRpYyBpbnQgZnNpX2lzX21hc3Rlcl9tb2RlKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgaXNfcGxheSkKLXsKLQl1MzIgbW9kZTsKLQl1MzIgZmxhZ3MgPSBmc2lfZ2V0X2luZm9fZmxhZ3MoZnNpKTsKLQotCW1vZGUgPSBpc19wbGF5ID8gU0hfRlNJX09VVF9TTEFWRV9NT0RFIDogU0hfRlNJX0lOX1NMQVZFX01PREU7Ci0KLQkvKiByZXR1cm4KLQkgKiAxIDogbWFzdGVyIG1vZGUKLQkgKiAwIDogc2xhdmUgbW9kZQotCSAqLwotCi0JcmV0dXJuIChtb2RlICYgZmxhZ3MpICE9IG1vZGU7Ci19Ci0KIHN0YXRpYyB1MzIgZnNpX2dldF9wb3J0X3NoaWZ0KHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgaXNfcGxheSkKIHsKIAlpbnQgaXNfcG9ydGEgPSBmc2lfaXNfcG9ydF9hKGZzaSk7CkBAIC0zNTcsNyArMzYxLDYgQEAKIHN0YXRpYyBpbnQgZnNpX2dldF9maWZvX2RhdGFfbnVtKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgaXNfcGxheSkKIHsKIAl1MzIgc3RhdHVzOwotCXN0cnVjdCBmc2lfc3RyZWFtICppbyA9IGZzaV9nZXRfc3RyZWFtKGZzaSwgaXNfcGxheSk7CiAJaW50IGRhdGFfbnVtOwogCiAJc3RhdHVzID0gaXNfcGxheSA/CkBAIC0zNjUsNyArMzY4LDcgQEAKIAkJZnNpX3JlZ19yZWFkKGZzaSwgRElGRl9TVCk7CiAKIAlkYXRhX251bSA9IDB4MWZmICYgKHN0YXR1cyA+PiA4KTsKLQlkYXRhX251bSAqPSBpby0+Y2hhbl9udW07CisJZGF0YV9udW0gKj0gZnNpLT5jaGFuX251bTsKIAogCXJldHVybiBkYXRhX251bTsKIH0KQEAgLTM4Nyw3ICszOTAsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gaW8tPnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCi0JcmV0dXJuIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSAvIGlvLT5jaGFuX251bTsKKwlyZXR1cm4gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpIC8gZnNpLT5jaGFuX251bTsKIH0KIAogc3RhdGljIHZvaWQgZnNpX2NvdW50X2ZpZm9fZXJyKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQpAQCAtNTgwLDEwICs1ODMsMTAgQEAKIAkgKiA3IGNoYW5uZWxzOiAgMzIgKCAzMiB4IDcgPSAyMjQpCiAJICogOCBjaGFubmVsczogIDMyICggMzIgeCA4ID0gMjU2KQogCSAqLwotCWZvciAoaSA9IDE7IGkgPCBpby0+Y2hhbl9udW07IGkgPDw9IDEpCisJZm9yIChpID0gMTsgaSA8IGZzaS0+Y2hhbl9udW07IGkgPDw9IDEpCiAJCWlvLT5maWZvX21heF9udW0gPj49IDE7CiAJZGV2X2RiZyhkYWktPmRldiwgIiVkIGNoYW5uZWwgJWQgc3RvcmVcbiIsCi0JCWlvLT5jaGFuX251bSwgaW8tPmZpZm9fbWF4X251bSk7CisJCWZzaS0+Y2hhbl9udW0sIGlvLT5maWZvX21heF9udW0pOwogCiAJLyoKIAkgKiBzZXQgaW50ZXJydXB0IGdlbmVyYXRpb24gZmFjdG9yCkBAIC02NTksNyArNjYyLDcgQEAKIAkJICogZGF0YV9udW1fbWF4CTogbnVtYmVyIG9mIEZTSSBmaWZvIGZyZWUgc3BhY2UKIAkJICogZGF0YV9udW0JOiBudW1iZXIgb2YgQUxTQSByZXNpZHVlIGRhdGEKIAkJICovCi0JCWRhdGFfbnVtX21heCAgPSBpby0+Zmlmb19tYXhfbnVtICogaW8tPmNoYW5fbnVtOworCQlkYXRhX251bV9tYXggID0gaW8tPmZpZm9fbWF4X251bSAqIGZzaS0+Y2hhbl9udW07CiAJCWRhdGFfbnVtX21heCAtPSBmc2lfZ2V0X2ZpZm9fZGF0YV9udW0oZnNpLCBpc19wbGF5KTsKIAogCQlkYXRhX251bSA9IGRhdGFfcmVzaWR1ZV9udW07CkBAIC03NTQsMjUgKzc1NywxMiBAQAogCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKLQlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKLQlzdHJ1Y3QgZnNpX3N0cmVhbSAqaW87CiAJdTMyIGZsYWdzID0gZnNpX2dldF9pbmZvX2ZsYWdzKGZzaSk7Ci0JdTMyIGZtdDsKIAl1MzIgZGF0YTsKIAlpbnQgaXNfcGxheSA9IGZzaV9pc19wbGF5KHN1YnN0cmVhbSk7Ci0JaW50IGlzX21hc3RlcjsKLQotCWlvID0gZnNpX2dldF9zdHJlYW0oZnNpLCBpc19wbGF5KTsKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGFpLT5kZXYpOwogCi0JLyogQ0tHMSAqLwotCWRhdGEgPSBpc19wbGF5ID8gKDEgPDwgMCkgOiAoMSA8PCA0KTsKLQlpc19tYXN0ZXIgPSBmc2lfaXNfbWFzdGVyX21vZGUoZnNpLCBpc19wbGF5KTsKLQlpZiAoaXNfbWFzdGVyKQotCQlmc2lfcmVnX21hc2tfc2V0KGZzaSwgQ0tHMSwgZGF0YSwgZGF0YSk7Ci0JZWxzZQotCQlmc2lfcmVnX21hc2tfc2V0KGZzaSwgQ0tHMSwgZGF0YSwgMCk7CiAKIAkvKiBjbG9jayBpbnZlcnNpb24gKENLRzIpICovCiAJZGF0YSA9IDA7CkBAIC03ODcsNTQgKzc3Nyw2IEBACiAKIAlmc2lfcmVnX3dyaXRlKGZzaSwgQ0tHMiwgZGF0YSk7CiAKLQkvKiBkbyBmbXQsIGRpIGZtdCAqLwotCWRhdGEgPSAwOwotCWZtdCA9IGlzX3BsYXkgPyBTSF9GU0lfR0VUX09GTVQoZmxhZ3MpIDogU0hfRlNJX0dFVF9JRk1UKGZsYWdzKTsKLQlzd2l0Y2ggKGZtdCkgewotCWNhc2UgU0hfRlNJX0ZNVF9NT05POgotCQlkYXRhID0gQ1JfTU9OTzsKLQkJaW8tPmNoYW5fbnVtID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBTSF9GU0lfRk1UX01PTk9fREVMQVk6Ci0JCWRhdGEgPSBDUl9NT05PX0Q7Ci0JCWlvLT5jaGFuX251bSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU0hfRlNJX0ZNVF9QQ006Ci0JCWRhdGEgPSBDUl9QQ007Ci0JCWlvLT5jaGFuX251bSA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgU0hfRlNJX0ZNVF9JMlM6Ci0JCWRhdGEgPSBDUl9JMlM7Ci0JCWlvLT5jaGFuX251bSA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgU0hfRlNJX0ZNVF9URE06Ci0JCWlvLT5jaGFuX251bSA9IGlzX3BsYXkgPwotCQkJU0hfRlNJX0dFVF9DSF9PKGZsYWdzKSA6IFNIX0ZTSV9HRVRfQ0hfSShmbGFncyk7Ci0JCWRhdGEgPSBDUl9URE0gfCAoaW8tPmNoYW5fbnVtIC0gMSk7Ci0JCWJyZWFrOwotCWNhc2UgU0hfRlNJX0ZNVF9URE1fREVMQVk6Ci0JCWlvLT5jaGFuX251bSA9IGlzX3BsYXkgPwotCQkJU0hfRlNJX0dFVF9DSF9PKGZsYWdzKSA6IFNIX0ZTSV9HRVRfQ0hfSShmbGFncyk7Ci0JCWRhdGEgPSBDUl9URE1fRCB8IChpby0+Y2hhbl9udW0gLSAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBTSF9GU0lfRk1UX1NQRElGOgotCQlpZiAobWFzdGVyLT5jb3JlLT52ZXIgPCAyKSB7Ci0JCQlkZXZfZXJyKGRhaS0+ZGV2LCAiVGhpcyBGU0kgY2FuIG5vdCB1c2UgU1BESUZcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZGF0YSA9IENSX0JXU18xNiB8IENSX0RUTURfU1BESUZfUENNIHwgQ1JfUENNOwotCQlpby0+Y2hhbl9udW0gPSAyOwotCQlmc2lfc3BkaWZfY2xrX2N0cmwoZnNpLCAxKTsKLQkJZnNpX3JlZ19tYXNrX3NldChmc2ksIE9VVF9TRUwsIERNTUQsIERNTUQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfZXJyKGRhaS0+ZGV2LCAidW5rbm93biBmb3JtYXQuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlzX3BsYXkgPwotCQlmc2lfcmVnX3dyaXRlKGZzaSwgRE9fRk1ULCBkYXRhKSA6Ci0JCWZzaV9yZWdfd3JpdGUoZnNpLCBESV9GTVQsIGRhdGEpOwotCiAJLyogaXJxIGNsZWFyICovCiAJZnNpX2lycV9kaXNhYmxlKGZzaSwgaXNfcGxheSk7CiAJZnNpX2lycV9jbGVhcl9zdGF0dXMoZnNpKTsKQEAgLTg1MSwxMiArNzkzLDEyIEBACiAJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAlpbnQgaXNfcGxheSA9IGZzaV9pc19wbGF5KHN1YnN0cmVhbSk7CiAJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7Ci0JaW50ICgqc2V0X3JhdGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlzX3BvcnRhLCBpbnQgcmF0ZSwgaW50IGVuYWJsZSk7CisJc2V0X3JhdGVfZnVuYyBzZXRfcmF0ZTsKIAogCWZzaV9pcnFfZGlzYWJsZShmc2ksIGlzX3BsYXkpOwogCWZzaV9jbGtfY3RybChmc2ksIDApOwogCi0Jc2V0X3JhdGUgPSBtYXN0ZXItPmluZm8tPnNldF9yYXRlOworCXNldF9yYXRlID0gZnNpX2dldF9pbmZvX3NldF9yYXRlKG1hc3Rlcik7CiAJaWYgKHNldF9yYXRlICYmIGZzaS0+cmF0ZSkKIAkJc2V0X3JhdGUoZGFpLT5kZXYsIGZzaV9pc19wb3J0X2EoZnNpKSwgZnNpLT5yYXRlLCAwKTsKIAlmc2ktPnJhdGUgPSAwOwpAQCAtODg5LDE4ICs4MzEsMTAwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBmc2lfc2V0X2ZtdF9kYWkoc3RydWN0IGZzaV9wcml2ICpmc2ksIHVuc2lnbmVkIGludCBmbXQpCit7CisJdTMyIGRhdGEgPSAwOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlkYXRhID0gQ1JfSTJTOworCQlmc2ktPmNoYW5fbnVtID0gMjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWRhdGEgPSBDUl9QQ007CisJCWZzaS0+Y2hhbl9udW0gPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmc2lfcmVnX3dyaXRlKGZzaSwgRE9fRk1ULCBkYXRhKTsKKwlmc2lfcmVnX3dyaXRlKGZzaSwgRElfRk1ULCBkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzaV9zZXRfZm10X3NwZGlmKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQoreworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOworCXUzMiBkYXRhID0gMDsKKworCWlmIChtYXN0ZXItPmNvcmUtPnZlciA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YSA9IENSX0JXU18xNiB8IENSX0RUTURfU1BESUZfUENNIHwgQ1JfUENNOworCWZzaS0+Y2hhbl9udW0gPSAyOworCWZzaV9zcGRpZl9jbGtfY3RybChmc2ksIDEpOworCWZzaV9yZWdfbWFza19zZXQoZnNpLCBPVVRfU0VMLCBETU1ELCBETU1EKTsKKworCWZzaV9yZWdfd3JpdGUoZnNpLCBET19GTVQsIGRhdGEpOworCWZzaV9yZWdfd3JpdGUoZnNpLCBESV9GTVQsIGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNpX2RhaV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2X2ZybV9kYWkoZGFpKTsKKwl1MzIgZmxhZ3MgPSBmc2lfZ2V0X2luZm9fZmxhZ3MoZnNpKTsKKwl1MzIgZGF0YSA9IDA7CisJaW50IHJldDsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGFpLT5kZXYpOworCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlkYXRhID0gRElNRCB8IERPTUQ7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBzZXRfZm10X2V4aXQ7CisJfQorCWZzaV9yZWdfbWFza19zZXQoZnNpLCBDS0cxLCAoRElNRCB8IERPTUQpLCBkYXRhKTsKKworCS8qIHNldCBmb3JtYXQgKi8KKwlzd2l0Y2ggKGZsYWdzICYgU0hfRlNJX0ZNVF9NQVNLKSB7CisJY2FzZSBTSF9GU0lfRk1UX0RBSToKKwkJcmV0ID0gZnNpX3NldF9mbXRfZGFpKGZzaSwgZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spOworCQlicmVhazsKKwljYXNlIFNIX0ZTSV9GTVRfU1BESUY6CisJCXJldCA9IGZzaV9zZXRfZm10X3NwZGlmKGZzaSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCitzZXRfZm10X2V4aXQ6CisJcG1fcnVudGltZV9wdXRfc3luYyhkYWktPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGZzaV9kYWlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKIAkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKLQlpbnQgKCpzZXRfcmF0ZSkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXNfcG9ydGEsIGludCByYXRlLCBpbnQgZW5hYmxlKTsKKwlzZXRfcmF0ZV9mdW5jIHNldF9yYXRlOwogCWludCBmc2lfdmVyID0gbWFzdGVyLT5jb3JlLT52ZXI7CiAJbG9uZyByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKIAlpbnQgcmV0OwogCi0Jc2V0X3JhdGUgPSBtYXN0ZXItPmluZm8tPnNldF9yYXRlOworCXNldF9yYXRlID0gZnNpX2dldF9pbmZvX3NldF9yYXRlKG1hc3Rlcik7CiAJaWYgKCFzZXRfcmF0ZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTk3NSw2ICs5OTksNyBAQAogCS5zdGFydHVwCT0gZnNpX2RhaV9zdGFydHVwLAogCS5zaHV0ZG93bgk9IGZzaV9kYWlfc2h1dGRvd24sCiAJLnRyaWdnZXIJPSBmc2lfZGFpX3RyaWdnZXIsCisJLnNldF9mbXQJPSBmc2lfZGFpX3NldF9mbXQsCiAJLmh3X3BhcmFtcwk9IGZzaV9kYWlfaHdfcGFyYW1zLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jYWNoZS5jIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCmluZGV4IDhjMmEyMWEuLjVkNzZkYTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9hc29jLmg+CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY180XzEyX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKQEAgLTI1LDcgKzI3LDggQEAKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJaWYgKHJlZyA+PSBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSB8fAotCQlzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKSB7CisJCXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgfHwKKwkJY29kZWMtPmNhY2hlX2J5cGFzcykgewogCQkJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KQogCQkJCXJldHVybiAtMTsKIApAQCAtNDksNyArNTIsOCBAQAogCWRhdGFbMV0gPSB2YWx1ZSAmIDB4MDBmZjsKIAogCWlmICghc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSAmJgotCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgeworCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSAmJgorCQkhY29kZWMtPmNhY2hlX2J5cGFzcykgewogCQlyZXQgPSBzbmRfc29jX2NhY2hlX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gLTE7CkBAIC0xMDYsNyArMTEwLDggQEAKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJaWYgKHJlZyA+PSBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSB8fAotCQlzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKSB7CisJCXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgfHwKKwkJY29kZWMtPmNhY2hlX2J5cGFzcykgewogCQkJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KQogCQkJCXJldHVybiAtMTsKIApAQCAtMTMwLDcgKzEzNSw4IEBACiAJZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOwogCiAJaWYgKCFzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpICYmCi0JCXJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKSB7CisJCXJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplICYmCisJCSFjb2RlYy0+Y2FjaGVfYnlwYXNzKSB7CiAJCXJldCA9IHNuZF9zb2NfY2FjaGVfd3JpdGUoY29kZWMsIHJlZywgdmFsdWUpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiAtMTsKQEAgLTE5MSw3ICsxOTcsOCBAQAogCWRhdGFbMV0gPSB2YWx1ZSAmIDB4ZmY7CiAKIAlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgJiYKLQkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpIHsKKwkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgJiYKKwkJIWNvZGVjLT5jYWNoZV9ieXBhc3MpIHsKIAkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIC0xOwpAQCAtMjE2LDcgKzIyMyw4IEBACiAKIAlyZWcgJj0gMHhmZjsKIAlpZiAocmVnID49IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplIHx8Ci0JCXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpIHsKKwkJc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSB8fAorCQljb2RlYy0+Y2FjaGVfYnlwYXNzKSB7CiAJCQlpZiAoY29kZWMtPmNhY2hlX29ubHkpCiAJCQkJcmV0dXJuIC0xOwogCkBAIC0yNzEsNyArMjc5LDggQEAKIAlkYXRhWzJdID0gdmFsdWUgJiAweGZmOwogCiAJaWYgKCFzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpICYmCi0JCXJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKSB7CisJCXJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplICYmCisJCSFjb2RlYy0+Y2FjaGVfYnlwYXNzKSB7CiAJCXJldCA9IHNuZF9zb2NfY2FjaGVfd3JpdGUoY29kZWMsIHJlZywgdmFsdWUpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiAtMTsKQEAgLTI5NSw3ICszMDQsOCBAQAogCXVuc2lnbmVkIGludCB2YWw7CiAKIAlpZiAocmVnID49IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplIHx8Ci0JICAgIHNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpIHsKKwkgICAgc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSB8fAorCSAgICBjb2RlYy0+Y2FjaGVfYnlwYXNzKSB7CiAJCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKIAkJCXJldHVybiAtMTsKIApAQCAtNDUwLDcgKzQ2MCw4IEBACiAKIAlyZWcgJj0gMHhmZjsKIAlpZiAocmVnID49IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplIHx8Ci0JCXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpIHsKKwkJc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSB8fAorCQljb2RlYy0+Y2FjaGVfYnlwYXNzKSB7CiAJCQlpZiAoY29kZWMtPmNhY2hlX29ubHkpCiAJCQkJcmV0dXJuIC0xOwogCkBAIC00NzYsNyArNDg3LDggQEAKIAogCXJlZyAmPSAweGZmOwogCWlmICghc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSAmJgotCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgeworCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSAmJgorCQkhY29kZWMtPmNhY2hlX2J5cGFzcykgewogCQlyZXQgPSBzbmRfc29jX2NhY2hlX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gLTE7CkBAIC01NjgsNyArNTgwLDggQEAKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJaWYgKHJlZyA+PSBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSB8fAotCSAgICBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKSB7CisJICAgIHNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgfHwKKwkgICAgY29kZWMtPmNhY2hlX2J5cGFzcykgewogCQlpZiAoY29kZWMtPmNhY2hlX29ubHkpCiAJCQlyZXR1cm4gLTE7CiAKQEAgLTU5NSw3ICs2MDgsOCBAQAogCWRhdGFbM10gPSB2YWx1ZSAmIDB4ZmY7CiAKIAlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgJiYKLQkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpIHsKKwkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgJiYKKwkJIWNvZGVjLT5jYWNoZV9ieXBhc3MpIHsKIAkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIC0xOwpAQCAtNzYxLDYgKzc3NSw0OSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8pOwogCitzdGF0aWMgYm9vbCBzbmRfc29jX3NldF9jYWNoZV92YWwodm9pZCAqYmFzZSwgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCB3b3JkX3NpemUpCit7CisJc3dpdGNoICh3b3JkX3NpemUpIHsKKwljYXNlIDE6IHsKKwkJdTggKmNhY2hlID0gYmFzZTsKKwkJaWYgKGNhY2hlW2lkeF0gPT0gdmFsKQorCQkJcmV0dXJuIHRydWU7CisJCWNhY2hlW2lkeF0gPSB2YWw7CisJCWJyZWFrOworCX0KKwljYXNlIDI6IHsKKwkJdTE2ICpjYWNoZSA9IGJhc2U7CisJCWlmIChjYWNoZVtpZHhdID09IHZhbCkKKwkJCXJldHVybiB0cnVlOworCQljYWNoZVtpZHhdID0gdmFsOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jX2dldF9jYWNoZV92YWwoY29uc3Qgdm9pZCAqYmFzZSwgdW5zaWduZWQgaW50IGlkeCwKKwkJdW5zaWduZWQgaW50IHdvcmRfc2l6ZSkKK3sKKwlzd2l0Y2ggKHdvcmRfc2l6ZSkgeworCWNhc2UgMTogeworCQljb25zdCB1OCAqY2FjaGUgPSBiYXNlOworCQlyZXR1cm4gY2FjaGVbaWR4XTsKKwl9CisJY2FzZSAyOiB7CisJCWNvbnN0IHUxNiAqY2FjaGUgPSBiYXNlOworCQlyZXR1cm4gY2FjaGVbaWR4XTsKKwl9CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCS8qIHVucmVhY2hhYmxlICovCisJcmV0dXJuIC0xOworfQorCiBzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfbm9kZSB7CiAJc3RydWN0IHJiX25vZGUgbm9kZTsKIAl1bnNpZ25lZCBpbnQgcmVnOwpAQCAtODM1LDcgKzg5Miw5IEBACiAJCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgcmJub2RlLT5yZWcsICZ2YWwpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKKwkJY29kZWMtPmNhY2hlX2J5cGFzcyA9IDE7CiAJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIHJibm9kZS0+cmVnLCB2YWwpOworCQljb2RlYy0+Y2FjaGVfYnlwYXNzID0gMDsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCWRldl9kYmcoY29kZWMtPmRldiwgIlN5bmNlZCByZWdpc3RlciAlI3gsIHZhbHVlID0gJSN4XG4iLApAQCAtOTI0LDcgKzk4MywxMiBAQAogCiBzdGF0aWMgaW50IHNuZF9zb2NfcmJ0cmVlX2NhY2hlX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBzbmRfc29jX3JidHJlZV9ub2RlICpyYnRyZWVfbm9kZTsKIAlzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfY3R4ICpyYnRyZWVfY3R4OworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgaW50IHdvcmRfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgcmV0OwogCiAJY29kZWMtPnJlZ19jYWNoZSA9IGttYWxsb2Moc2l6ZW9mICpyYnRyZWVfY3R4LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvZGVjLT5yZWdfY2FjaGUpCkBAIC05MzYsNTMgKzEwMDAsMjUgQEAKIAlpZiAoIWNvZGVjLT5yZWdfZGVmX2NvcHkpCiAJCXJldHVybiAwOwogCi0vKgotICogcG9wdWxhdGUgdGhlIHJidHJlZSB3aXRoIHRoZSBpbml0aWFsaXplZCByZWdpc3RlcnMuICBBbGwgb3RoZXIKLSAqIHJlZ2lzdGVycyB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIHRyZWUgd2hlbiB0aGV5IGFyZSBmaXJzdCB3cml0dGVuLgotICoKLSAqIFRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMsIGlzIHRoYXQgd2UgbmVlZCB0byBzdGVwIHRocm91Z2ggYW5kCi0gKiBkZXJlZmVyZW5jZSB0aGUgY2FjaGUgaW4gdTgvdTE2IGluY3JlbWVudHMgd2l0aG91dCBzYWNyaWZpY2luZwotICogcG9ydGFiaWxpdHkuICBUaGlzIGNvdWxkIGFsc28gYmUgZG9uZSB1c2luZyBtZW1jcHkoKSBidXQgdGhhdCB3b3VsZAotICogYmUgc2xpZ2h0bHkgbW9yZSBjcnlwdGljLgotICovCi0jZGVmaW5lIHNuZF9zb2NfcmJ0cmVlX3BvcHVsYXRlKGNhY2hlKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JaW50IHJldCwgaTsJCQkJCQkJXAotCXN0cnVjdCBzbmRfc29jX3JidHJlZV9ub2RlICpyYnRyZWVfbm9kZTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0ID0gMDsJCQkJCQkJXAotCWNhY2hlID0gY29kZWMtPnJlZ19kZWZfY29weTsJCQkJCVwKLQlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemU7ICsraSkgewkJXAotCQlpZiAoIWNhY2hlW2ldKQkJCQkJCVwKLQkJCWNvbnRpbnVlOwkJCQkJXAotCQlyYnRyZWVfbm9kZSA9IGt6YWxsb2Moc2l6ZW9mICpyYnRyZWVfbm9kZSwgR0ZQX0tFUk5FTCk7CVwKLQkJaWYgKCFyYnRyZWVfbm9kZSkgewkJCQkJXAotCQkJcmV0ID0gLUVOT01FTTsJCQkJCVwKLQkJCXNuZF9zb2NfY2FjaGVfZXhpdChjb2RlYyk7CQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQl9CQkJCQkJCVwKLQkJcmJ0cmVlX25vZGUtPnJlZyA9IGk7CQkJCQlcCi0JCXJidHJlZV9ub2RlLT52YWx1ZSA9IGNhY2hlW2ldOwkJCQlcCi0JCXJidHJlZV9ub2RlLT5kZWZ2YWwgPSBjYWNoZVtpXTsJCQkJXAotCQlzbmRfc29jX3JidHJlZV9pbnNlcnQoJnJidHJlZV9jdHgtPnJvb3QsCQlcCi0JCQkJICAgICAgcmJ0cmVlX25vZGUpOwkJCVwKLQl9CQkJCQkJCQlcCi0JcmV0OwkJCQkJCQkJXAotfSkKLQotCXN3aXRjaCAoY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZSkgewotCWNhc2UgMTogewotCQljb25zdCB1OCAqY2FjaGU7Ci0KLQkJcmV0dXJuIHNuZF9zb2NfcmJ0cmVlX3BvcHVsYXRlKGNhY2hlKTsKLQl9Ci0JY2FzZSAyOiB7Ci0JCWNvbnN0IHUxNiAqY2FjaGU7Ci0KLQkJcmV0dXJuIHNuZF9zb2NfcmJ0cmVlX3BvcHVsYXRlKGNhY2hlKTsKLQl9Ci0JZGVmYXVsdDoKLQkJQlVHKCk7CisJLyoKKwkgKiBwb3B1bGF0ZSB0aGUgcmJ0cmVlIHdpdGggdGhlIGluaXRpYWxpemVkIHJlZ2lzdGVycy4gIEFsbCBvdGhlcgorCSAqIHJlZ2lzdGVycyB3aWxsIGJlIGluc2VydGVkIHdoZW4gdGhleSBhcmUgZmlyc3QgbW9kaWZpZWQuCisJICovCisJd29yZF9zaXplID0gY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZTsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemU7ICsraSkgeworCQl2YWwgPSBzbmRfc29jX2dldF9jYWNoZV92YWwoY29kZWMtPnJlZ19kZWZfY29weSwgaSwgd29yZF9zaXplKTsKKwkJaWYgKCF2YWwpCisJCQljb250aW51ZTsKKwkJcmJ0cmVlX25vZGUgPSBremFsbG9jKHNpemVvZiAqcmJ0cmVlX25vZGUsIEdGUF9LRVJORUwpOworCQlpZiAoIXJidHJlZV9ub2RlKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJc25kX3NvY19jYWNoZV9leGl0KGNvZGVjKTsKKwkJCWJyZWFrOworCQl9CisJCXJidHJlZV9ub2RlLT5yZWcgPSBpOworCQlyYnRyZWVfbm9kZS0+dmFsdWUgPSB2YWw7CisJCXJidHJlZV9ub2RlLT5kZWZ2YWwgPSB2YWw7CisJCXNuZF9zb2NfcmJ0cmVlX2luc2VydCgmcmJ0cmVlX2N0eC0+cm9vdCwgcmJ0cmVlX25vZGUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTA4MCwzNCArMTExNiwyOCBAQAogCQl1bnNpZ25lZCBpbnQgcmVnKQogewogCWNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciAqY29kZWNfZHJ2OwotCXNpemVfdCByZWdfc2l6ZTsKIAogCWNvZGVjX2RydiA9IGNvZGVjLT5kcml2ZXI7Ci0JcmVnX3NpemUgPSBjb2RlY19kcnYtPnJlZ19jYWNoZV9zaXplICogY29kZWNfZHJ2LT5yZWdfd29yZF9zaXplOwogCXJldHVybiAocmVnICogY29kZWNfZHJ2LT5yZWdfd29yZF9zaXplKSAvCi0JICAgICAgIERJVl9ST1VORF9VUChyZWdfc2l6ZSwgc25kX3NvY19sem9fYmxvY2tfY291bnQoKSk7CisJICAgICAgIERJVl9ST1VORF9VUChjb2RlYy0+cmVnX3NpemUsIHNuZF9zb2NfbHpvX2Jsb2NrX2NvdW50KCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzbmRfc29jX2x6b19nZXRfYmxrcG9zKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJdW5zaWduZWQgaW50IHJlZykKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmNvZGVjX2RydjsKLQlzaXplX3QgcmVnX3NpemU7CiAKIAljb2RlY19kcnYgPSBjb2RlYy0+ZHJpdmVyOwotCXJlZ19zaXplID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZSAqIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZTsKLQlyZXR1cm4gcmVnICUgKERJVl9ST1VORF9VUChyZWdfc2l6ZSwgc25kX3NvY19sem9fYmxvY2tfY291bnQoKSkgLworCXJldHVybiByZWcgJSAoRElWX1JPVU5EX1VQKGNvZGVjLT5yZWdfc2l6ZSwgc25kX3NvY19sem9fYmxvY2tfY291bnQoKSkgLwogCQkgICAgICBjb2RlY19kcnYtPnJlZ193b3JkX3NpemUpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzbmRfc29jX2x6b19nZXRfYmxrc2l6ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyICpjb2RlY19kcnY7Ci0Jc2l6ZV90IHJlZ19zaXplOwogCiAJY29kZWNfZHJ2ID0gY29kZWMtPmRyaXZlcjsKLQlyZWdfc2l6ZSA9IGNvZGVjX2Rydi0+cmVnX2NhY2hlX3NpemUgKiBjb2RlY19kcnYtPnJlZ193b3JkX3NpemU7Ci0JcmV0dXJuIERJVl9ST1VORF9VUChyZWdfc2l6ZSwgc25kX3NvY19sem9fYmxvY2tfY291bnQoKSk7CisJcmV0dXJuIERJVl9ST1VORF9VUChjb2RlYy0+cmVnX3NpemUsIHNuZF9zb2NfbHpvX2Jsb2NrX2NvdW50KCkpOwogfQogCiBzdGF0aWMgaW50IHNuZF9zb2NfbHpvX2NhY2hlX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQpAQCAtMTEyMiw3ICsxMTUyLDkgQEAKIAkJcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCBpLCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CisJCWNvZGVjLT5jYWNoZV9ieXBhc3MgPSAxOwogCQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCB2YWwpOworCQljb2RlYy0+Y2FjaGVfYnlwYXNzID0gMDsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCWRldl9kYmcoY29kZWMtPmRldiwgIlN5bmNlZCByZWdpc3RlciAlI3gsIHZhbHVlID0gJSN4XG4iLApAQCAtMTE2NSwyOSArMTE5NywxMCBAQAogCX0KIAogCS8qIHdyaXRlIHRoZSBuZXcgdmFsdWUgdG8gdGhlIGNhY2hlICovCi0Jc3dpdGNoIChjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplKSB7Ci0JY2FzZSAxOiB7Ci0JCXU4ICpjYWNoZTsKLQkJY2FjaGUgPSBsem9fYmxvY2stPmRzdDsKLQkJaWYgKGNhY2hlW2Jsa3Bvc10gPT0gdmFsdWUpIHsKLQkJCWtmcmVlKGx6b19ibG9jay0+ZHN0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWNhY2hlW2Jsa3Bvc10gPSB2YWx1ZTsKLQl9Ci0JYnJlYWs7Ci0JY2FzZSAyOiB7Ci0JCXUxNiAqY2FjaGU7Ci0JCWNhY2hlID0gbHpvX2Jsb2NrLT5kc3Q7Ci0JCWlmIChjYWNoZVtibGtwb3NdID09IHZhbHVlKSB7Ci0JCQlrZnJlZShsem9fYmxvY2stPmRzdCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQljYWNoZVtibGtwb3NdID0gdmFsdWU7Ci0JfQotCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOworCWlmIChzbmRfc29jX3NldF9jYWNoZV92YWwobHpvX2Jsb2NrLT5kc3QsIGJsa3BvcywgdmFsdWUsCisJCQkJICBjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplKSkgeworCQlrZnJlZShsem9fYmxvY2stPmRzdCk7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIHByZXBhcmUgdGhlIHNvdXJjZSB0byBiZSB0aGUgZGVjb21wcmVzc2VkIGJsb2NrICovCkBAIC0xMjQxLDI1ICsxMjU0LDEwIEBACiAKIAkvKiBkZWNvbXByZXNzIHRoZSBibG9jayAqLwogCXJldCA9IHNuZF9zb2NfbHpvX2RlY29tcHJlc3NfY2FjaGVfYmxvY2soY29kZWMsIGx6b19ibG9jayk7Ci0JaWYgKHJldCA+PSAwKSB7CisJaWYgKHJldCA+PSAwKQogCQkvKiBmZXRjaCB0aGUgdmFsdWUgZnJvbSB0aGUgY2FjaGUgKi8KLQkJc3dpdGNoIChjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplKSB7Ci0JCWNhc2UgMTogewotCQkJdTggKmNhY2hlOwotCQkJY2FjaGUgPSBsem9fYmxvY2stPmRzdDsKLQkJCSp2YWx1ZSA9IGNhY2hlW2Jsa3Bvc107Ci0JCX0KLQkJYnJlYWs7Ci0JCWNhc2UgMjogewotCQkJdTE2ICpjYWNoZTsKLQkJCWNhY2hlID0gbHpvX2Jsb2NrLT5kc3Q7Ci0JCQkqdmFsdWUgPSBjYWNoZVtibGtwb3NdOwotCQl9Ci0JCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCX0KLQl9CisJCSp2YWx1ZSA9IHNuZF9zb2NfZ2V0X2NhY2hlX3ZhbChsem9fYmxvY2stPmRzdCwgYmxrcG9zLAorCQkJCQkgICAgICAgY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZSk7CiAKIAlrZnJlZShsem9fYmxvY2stPmRzdCk7CiAJLyogcmVzdG9yZSB0aGUgcG9pbnRlciBhbmQgbGVuZ3RoIG9mIHRoZSBjb21wcmVzc2VkIGJsb2NrICovCkBAIC0xMzAxLDcgKzEyOTksNyBAQAogc3RhdGljIGludCBzbmRfc29jX2x6b19jYWNoZV9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19sem9fY3R4ICoqbHpvX2Jsb2NrczsKLQlzaXplX3QgcmVnX3NpemUsIGJtcF9zaXplOworCXNpemVfdCBibXBfc2l6ZTsKIAljb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmNvZGVjX2RydjsKIAlpbnQgcmV0LCB0b2ZyZWUsIGksIGJsa3NpemUsIGJsa2NvdW50OwogCWNvbnN0IGNoYXIgKnAsICplbmQ7CkBAIC0xMzA5LDcgKzEzMDcsNiBAQAogCiAJcmV0ID0gMDsKIAljb2RlY19kcnYgPSBjb2RlYy0+ZHJpdmVyOwotCXJlZ19zaXplID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZSAqIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZSBub3QgYmVlbiBnaXZlbiBhIGRlZmF1bHQgcmVnaXN0ZXIgY2FjaGUKQEAgLTEzMjEsOCArMTMxOCw3IEBACiAJCXRvZnJlZSA9IDE7CiAKIAlpZiAoIWNvZGVjLT5yZWdfZGVmX2NvcHkpIHsKLQkJY29kZWMtPnJlZ19kZWZfY29weSA9IGt6YWxsb2MocmVnX3NpemUsCi0JCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCWNvZGVjLT5yZWdfZGVmX2NvcHkgPSBremFsbG9jKGNvZGVjLT5yZWdfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY29kZWMtPnJlZ19kZWZfY29weSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTEzNzAsNyArMTM2Niw3IEBACiAKIAlibGtzaXplID0gc25kX3NvY19sem9fZ2V0X2Jsa3NpemUoY29kZWMpOwogCXAgPSBjb2RlYy0+cmVnX2RlZl9jb3B5OwotCWVuZCA9IGNvZGVjLT5yZWdfZGVmX2NvcHkgKyByZWdfc2l6ZTsKKwllbmQgPSBjb2RlYy0+cmVnX2RlZl9jb3B5ICsgY29kZWMtPnJlZ19zaXplOwogCS8qIGNvbXByZXNzIHRoZSByZWdpc3RlciBtYXAgYW5kIGZpbGwgdGhlIGx6byBibG9ja3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYmxrY291bnQ7ICsraSwgcCArPSBibGtzaXplKSB7CiAJCWx6b19ibG9ja3NbaV0tPnNyYyA9IHA7CkBAIC0xNDE0LDI4ICsxNDEwLDEwIEBACiAJCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgaSwgJnZhbCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlpZiAoY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdCkgewotCQkJc3dpdGNoIChjb2RlY19kcnYtPnJlZ193b3JkX3NpemUpIHsKLQkJCWNhc2UgMTogewotCQkJCWNvbnN0IHU4ICpjYWNoZTsKLQotCQkJCWNhY2hlID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdDsKLQkJCQlpZiAoY2FjaGVbaV0gPT0gdmFsKQotCQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQkJY2FzZSAyOiB7Ci0JCQkJY29uc3QgdTE2ICpjYWNoZTsKLQotCQkJCWNhY2hlID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdDsKLQkJCQlpZiAoY2FjaGVbaV0gPT0gdmFsKQotCQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlCVUcoKTsKLQkJCX0KLQkJfQorCQlpZiAoY29kZWMtPnJlZ19kZWZfY29weSkKKwkJCWlmIChzbmRfc29jX2dldF9jYWNoZV92YWwoY29kZWMtPnJlZ19kZWZfY29weSwKKwkJCQkJCSAgaSwgY29kZWNfZHJ2LT5yZWdfd29yZF9zaXplKSA9PSB2YWwpCisJCQkJY29udGludWU7CiAJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHZhbCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMTQ0OCw1MCArMTQyNiwxNiBAQAogc3RhdGljIGludCBzbmRfc29jX2ZsYXRfY2FjaGVfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7Ci0Jc3dpdGNoIChjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplKSB7Ci0JY2FzZSAxOiB7Ci0JCXU4ICpjYWNoZTsKLQotCQljYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JCWNhY2hlW3JlZ10gPSB2YWx1ZTsKLQl9Ci0JYnJlYWs7Ci0JY2FzZSAyOiB7Ci0JCXUxNiAqY2FjaGU7Ci0KLQkJY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCQljYWNoZVtyZWddID0gdmFsdWU7Ci0JfQotCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQorCXNuZF9zb2Nfc2V0X2NhY2hlX3ZhbChjb2RlYy0+cmVnX2NhY2hlLCByZWcsIHZhbHVlLAorCQkJICAgICAgY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3NvY19mbGF0X2NhY2hlX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCAqdmFsdWUpCiB7Ci0Jc3dpdGNoIChjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplKSB7Ci0JY2FzZSAxOiB7Ci0JCXU4ICpjYWNoZTsKLQotCQljYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JCSp2YWx1ZSA9IGNhY2hlW3JlZ107Ci0JfQotCWJyZWFrOwotCWNhc2UgMjogewotCQl1MTYgKmNhY2hlOwotCi0JCWNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQkJKnZhbHVlID0gY2FjaGVbcmVnXTsKLQl9Ci0JYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotCisJKnZhbHVlID0gc25kX3NvY19nZXRfY2FjaGVfdmFsKGNvZGVjLT5yZWdfY2FjaGUsIHJlZywKKwkJCQkgICAgICAgY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MDcsMjQgKzE0NTEsMTQgQEAKIHN0YXRpYyBpbnQgc25kX3NvY19mbGF0X2NhY2hlX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCWNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciAqY29kZWNfZHJ2OwotCXNpemVfdCByZWdfc2l6ZTsKIAogCWNvZGVjX2RydiA9IGNvZGVjLT5kcml2ZXI7Ci0JcmVnX3NpemUgPSBjb2RlY19kcnYtPnJlZ19jYWNoZV9zaXplICogY29kZWNfZHJ2LT5yZWdfd29yZF9zaXplOwogCi0JLyoKLQkgKiBmb3IgZmxhdCBjb21wcmVzc2lvbiwgd2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEgY29weSBvZiB0aGUKLQkgKiBvcmlnaW5hbCBkZWZhdWx0cyByZWdpc3RlciBjYWNoZSBhcyBpdCB3aWxsIGRlZmluaXRlbHkgbm90Ci0JICogYmUgbWFya2VkIGFzIF9fZGV2aW5pdGNvbnN0Ci0JICovCi0Ja2ZyZWUoY29kZWMtPnJlZ19kZWZfY29weSk7Ci0JY29kZWMtPnJlZ19kZWZfY29weSA9IE5VTEw7Ci0KLQlpZiAoY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdCkKLQkJY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAoY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdCwKLQkJCQkJICAgcmVnX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChjb2RlYy0+cmVnX2RlZl9jb3B5KQorCQljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cChjb2RlYy0+cmVnX2RlZl9jb3B5LAorCQkJCQkgICBjb2RlYy0+cmVnX3NpemUsIEdGUF9LRVJORUwpOwogCWVsc2UKLQkJY29kZWMtPnJlZ19jYWNoZSA9IGt6YWxsb2MocmVnX3NpemUsIEdGUF9LRVJORUwpOworCQljb2RlYy0+cmVnX2NhY2hlID0ga3phbGxvYyhjb2RlYy0+cmVnX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghY29kZWMtPnJlZ19jYWNoZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2NjksMjEgKzE2MDMsNzcgQEAKIGludCBzbmRfc29jX2NhY2hlX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCWludCByZXQ7CisJY29uc3QgY2hhciAqbmFtZTsKIAogCWlmICghY29kZWMtPmNhY2hlX3N5bmMpIHsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGNvZGVjLT5jYWNoZV9vcHMgJiYgY29kZWMtPmNhY2hlX29wcy0+c3luYykgewotCQlpZiAoY29kZWMtPmNhY2hlX29wcy0+bmFtZSkKLQkJCWRldl9kYmcoY29kZWMtPmRldiwgIlN5bmNpbmcgJXMgY2FjaGUgZm9yICVzIGNvZGVjXG4iLAotCQkJCWNvZGVjLT5jYWNoZV9vcHMtPm5hbWUsIGNvZGVjLT5uYW1lKTsKLQkJcmV0ID0gY29kZWMtPmNhY2hlX29wcy0+c3luYyhjb2RlYyk7Ci0JCWlmICghcmV0KQotCQkJY29kZWMtPmNhY2hlX3N5bmMgPSAwOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAoIWNvZGVjLT5jYWNoZV9vcHMgfHwgIWNvZGVjLT5jYWNoZV9vcHMtPnN5bmMpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvZGVjLT5jYWNoZV9vcHMtPm5hbWUpCisJCW5hbWUgPSBjb2RlYy0+Y2FjaGVfb3BzLT5uYW1lOworCWVsc2UKKwkJbmFtZSA9ICJ1bmtub3duIjsKKworCWlmIChjb2RlYy0+Y2FjaGVfb3BzLT5uYW1lKQorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTeW5jaW5nICVzIGNhY2hlIGZvciAlcyBjb2RlY1xuIiwKKwkJCWNvZGVjLT5jYWNoZV9vcHMtPm5hbWUsIGNvZGVjLT5uYW1lKTsKKwl0cmFjZV9zbmRfc29jX2NhY2hlX3N5bmMoY29kZWMsIG5hbWUsICJzdGFydCIpOworCXJldCA9IGNvZGVjLT5jYWNoZV9vcHMtPnN5bmMoY29kZWMpOworCWlmICghcmV0KQorCQljb2RlYy0+Y2FjaGVfc3luYyA9IDA7CisJdHJhY2Vfc25kX3NvY19jYWNoZV9zeW5jKGNvZGVjLCBuYW1lLCAiZW5kIik7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfY2FjaGVfc3luYyk7CisKK3N0YXRpYyBpbnQgc25kX3NvY19nZXRfcmVnX2FjY2Vzc19pbmRleChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCXVuc2lnbmVkIGludCByZWcpCit7CisJY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyICpjb2RlY19kcnY7CisJdW5zaWduZWQgaW50IG1pbiwgbWF4LCBpbmRleDsKKworCWNvZGVjX2RydiA9IGNvZGVjLT5kcml2ZXI7CisJbWluID0gMDsKKwltYXggPSBjb2RlY19kcnYtPnJlZ19hY2Nlc3Nfc2l6ZSAtIDE7CisJZG8geworCQlpbmRleCA9IChtaW4gKyBtYXgpIC8gMjsKKwkJaWYgKGNvZGVjX2Rydi0+cmVnX2FjY2Vzc19kZWZhdWx0W2luZGV4XS5yZWcgPT0gcmVnKQorCQkJcmV0dXJuIGluZGV4OworCQlpZiAoY29kZWNfZHJ2LT5yZWdfYWNjZXNzX2RlZmF1bHRbaW5kZXhdLnJlZyA8IHJlZykKKwkJCW1pbiA9IGluZGV4ICsgMTsKKwkJZWxzZQorCQkJbWF4ID0gaW5kZXg7CisJfSB3aGlsZSAobWluIDw9IG1heCk7CisJcmV0dXJuIC0xOworfQorCitpbnQgc25kX3NvY19kZWZhdWx0X3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCWludCBpbmRleDsKKworCWlmIChyZWcgPj0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAxOworCWluZGV4ID0gc25kX3NvY19nZXRfcmVnX2FjY2Vzc19pbmRleChjb2RlYywgcmVnKTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gY29kZWMtPmRyaXZlci0+cmVnX2FjY2Vzc19kZWZhdWx0W2luZGV4XS52b2w7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RlZmF1bHRfdm9sYXRpbGVfcmVnaXN0ZXIpOworCitpbnQgc25kX3NvY19kZWZhdWx0X3JlYWRhYmxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCWludCBpbmRleDsKKworCWlmIChyZWcgPj0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAxOworCWluZGV4ID0gc25kX3NvY19nZXRfcmVnX2FjY2Vzc19pbmRleChjb2RlYywgcmVnKTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gY29kZWMtPmRyaXZlci0+cmVnX2FjY2Vzc19kZWZhdWx0W2luZGV4XS5yZWFkOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kZWZhdWx0X3JlYWRhYmxlX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggYzNmNmYxZTcuLjRkZGE1ODkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC00OCw3ICs0OCw4IEBACiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoc29jX3BtX3dhaXRxKTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19GUwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKK3N0cnVjdCBkZW50cnkgKnNuZF9zb2NfZGVidWdmc19yb290OworRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kZWJ1Z2ZzX3Jvb3QpOwogI2VuZGlmCiAKIHN0YXRpYyBERUZJTkVfTVVURVgoY2xpZW50X211dGV4KTsKQEAgLTU3LDggKzU4LDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQocGxhdGZvcm1fbGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKGNvZGVjX2xpc3QpOwogCi1zdGF0aWMgaW50IHNuZF9zb2NfcmVnaXN0ZXJfY2FyZChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKTsKLXN0YXRpYyBpbnQgc25kX3NvY191bnJlZ2lzdGVyX2NhcmQoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCk7CiBzdGF0aWMgaW50IHNvY19uZXdfcGNtKHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsIGludCBudW0pOwogCiAvKgpAQCAtNzAsMTAgKzY5LDczIEBACiBtb2R1bGVfcGFyYW0ocG1kb3duX3RpbWUsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBtZG93bl90aW1lLCAiREFQTSBzdHJlYW0gcG93ZXJkb3duIHRpbWUgKG1zZWNzKSIpOwogCi0vKiBjb2RlYyByZWdpc3RlciBkdW1wICovCi1zdGF0aWMgc3NpemVfdCBzb2NfY29kZWNfcmVnX3Nob3coc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpidWYpCisvKiByZXR1cm5zIHRoZSBtaW5pbXVtIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gcmVwcmVzZW50CisgKiBhIHBhcnRpY3VsYXIgZ2l2ZW4gdmFsdWUgKi8KK3N0YXRpYyBpbnQgbWluX2J5dGVzX25lZWRlZCh1bnNpZ25lZCBsb25nIHZhbCkKIHsKLQlpbnQgcmV0LCBpLCBzdGVwID0gMSwgY291bnQgPSAwOworCWludCBjID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IChzaXplb2YgdmFsICogOCkgLSAxOyBpID49IDA7IC0taSwgKytjKQorCQlpZiAodmFsICYgKDFVTCA8PCBpKSkKKwkJCWJyZWFrOworCWMgPSAoc2l6ZW9mIHZhbCAqIDgpIC0gYzsKKwlpZiAoIWMgfHwgKGMgJSA4KSkKKwkJYyA9IChjICsgOCkgLyA4OworCWVsc2UKKwkJYyAvPSA4OworCXJldHVybiBjOworfQorCisvKiBmaWxsIGJ1ZiB3aGljaCBpcyAnbGVuJyBieXRlcyB3aXRoIGEgZm9ybWF0dGVkCisgKiBzdHJpbmcgb2YgdGhlIGZvcm0gJ3JlZzogdmFsdWVcbicgKi8KK3N0YXRpYyBpbnQgZm9ybWF0X3JlZ2lzdGVyX3N0cihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCWludCB3b3Jkc2l6ZSA9IGNvZGVjLT5kcml2ZXItPnJlZ193b3JkX3NpemUgKiAyOworCWludCByZWdzaXplID0gbWluX2J5dGVzX25lZWRlZChjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgKiAyOworCWludCByZXQ7CisJY2hhciB0bXBidWZbbGVuICsgMV07CisJY2hhciByZWdidWZbcmVnc2l6ZSArIDFdOworCisJLyogc2luY2UgdG1wYnVmIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIHdhcm4gdGhlIGNhbGxlcnMgaWYgdGhleQorCSAqIHRyeSB0byBhYnVzZSB0aGlzIGZ1bmN0aW9uICovCisJV0FSTl9PTihsZW4gPiA2Myk7CisKKwkvKiArMiBmb3IgJzogJyBhbmQgKyAxIGZvciAnXG4nICovCisJaWYgKHdvcmRzaXplICsgcmVnc2l6ZSArIDIgKyAxICE9IGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMgLCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCW1lbXNldChyZWdidWYsICdYJywgcmVnc2l6ZSk7CisJCXJlZ2J1ZltyZWdzaXplXSA9ICdcMCc7CisJfSBlbHNlIHsKKwkJc25wcmludGYocmVnYnVmLCByZWdzaXplICsgMSwgIiUuKngiLCByZWdzaXplLCByZXQpOworCX0KKworCS8qIHByZXBhcmUgdGhlIGJ1ZmZlciAqLworCXNucHJpbnRmKHRtcGJ1ZiwgbGVuICsgMSwgIiUuKng6ICVzXG4iLCB3b3Jkc2l6ZSwgcmVnLCByZWdidWYpOworCS8qIGNvcHkgaXQgYmFjayB0byB0aGUgY2FsbGVyIHdpdGhvdXQgdGhlICdcMCcgKi8KKwltZW1jcHkoYnVmLCB0bXBidWYsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyogY29kZWMgcmVnaXN0ZXIgZHVtcCAqLworc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKQoreworCWludCBpLCBzdGVwID0gMTsKKwlpbnQgd29yZHNpemUsIHJlZ3NpemU7CisJaW50IGxlbjsKKwlzaXplX3QgdG90YWwgPSAwOworCWxvZmZfdCBwID0gMDsKKworCXdvcmRzaXplID0gY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZSAqIDI7CisJcmVnc2l6ZSA9IG1pbl9ieXRlc19uZWVkZWQoY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpICogMjsKKworCWxlbiA9IHdvcmRzaXplICsgcmVnc2l6ZSArIDIgKyAxOwogCiAJaWYgKCFjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkKIAkJcmV0dXJuIDA7CkBAIC04MSw1NSArMTQzLDM3IEBACiAJaWYgKGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zdGVwKQogCQlzdGVwID0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3N0ZXA7CiAKLQljb3VudCArPSBzcHJpbnRmKGJ1ZiwgIiVzIHJlZ2lzdGVyc1xuIiwgY29kZWMtPm5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZTsgaSArPSBzdGVwKSB7Ci0JCWlmIChjb2RlYy0+ZHJpdmVyLT5yZWFkYWJsZV9yZWdpc3RlciAmJiAhY29kZWMtPmRyaXZlci0+cmVhZGFibGVfcmVnaXN0ZXIoaSkpCisJCWlmIChjb2RlYy0+cmVhZGFibGVfcmVnaXN0ZXIgJiYgIWNvZGVjLT5yZWFkYWJsZV9yZWdpc3Rlcihjb2RlYywgaSkpCiAJCQljb250aW51ZTsKLQotCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJTJ4OiAiLCBpKTsKLQkJaWYgKGNvdW50ID49IFBBR0VfU0laRSAtIDEpCi0JCQlicmVhazsKLQogCQlpZiAoY29kZWMtPmRyaXZlci0+ZGlzcGxheV9yZWdpc3RlcikgewogCQkJY291bnQgKz0gY29kZWMtPmRyaXZlci0+ZGlzcGxheV9yZWdpc3Rlcihjb2RlYywgYnVmICsgY291bnQsCiAJCQkJCQkJIFBBR0VfU0laRSAtIGNvdW50LCBpKTsKIAkJfSBlbHNlIHsKLQkJCS8qIElmIHRoZSByZWFkIGZhaWxzIGl0J3MgYWxtb3N0IGNlcnRhaW5seSBkdWUgdG8KLQkJCSAqIHRoZSByZWdpc3RlciBiZWluZyB2b2xhdGlsZSBhbmQgdGhlIGRldmljZSBiZWluZwotCQkJICogcG93ZXJlZCBvZmYuCi0JCQkgKi8KLQkJCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgaSk7Ci0JCQlpZiAocmV0ID49IDApCi0JCQkJY291bnQgKz0gc25wcmludGYoYnVmICsgY291bnQsCi0JCQkJCQkgIFBBR0VfU0laRSAtIGNvdW50LAotCQkJCQkJICAiJTR4IiwgcmV0KTsKLQkJCWVsc2UKLQkJCQljb3VudCArPSBzbnByaW50ZihidWYgKyBjb3VudCwKLQkJCQkJCSAgUEFHRV9TSVpFIC0gY291bnQsCi0JCQkJCQkgICI8bm8gZGF0YTogJWQ+IiwgcmV0KTsKKwkJCS8qIG9ubHkgc3VwcG9ydCBsYXJnZXIgdGhhbiBQQUdFX1NJWkUgYnl0ZXMgZGVidWdmcworCQkJICogZW50cmllcyBmb3IgdGhlIGRlZmF1bHQgY2FzZSAqLworCQkJaWYgKHAgPj0gcG9zKSB7CisJCQkJaWYgKHRvdGFsICsgbGVuID49IGNvdW50IC0gMSkKKwkJCQkJYnJlYWs7CisJCQkJZm9ybWF0X3JlZ2lzdGVyX3N0cihjb2RlYywgaSwgYnVmICsgdG90YWwsIGxlbik7CisJCQkJdG90YWwgKz0gbGVuOworCQkJfQorCQkJcCArPSBsZW47CiAJCX0KLQotCQlpZiAoY291bnQgPj0gUEFHRV9TSVpFIC0gMSkKLQkJCWJyZWFrOwotCi0JCWNvdW50ICs9IHNucHJpbnRmKGJ1ZiArIGNvdW50LCBQQUdFX1NJWkUgLSBjb3VudCwgIlxuIik7Ci0JCWlmIChjb3VudCA+PSBQQUdFX1NJWkUgLSAxKQotCQkJYnJlYWs7CiAJfQogCi0JLyogVHJ1bmNhdGUgY291bnQ7IG1pbigpIHdvdWxkIGNhdXNlIGEgd2FybmluZyAqLwotCWlmIChjb3VudCA+PSBQQUdFX1NJWkUpCi0JCWNvdW50ID0gUEFHRV9TSVpFIC0gMTsKKwl0b3RhbCA9IG1pbih0b3RhbCwgY291bnQgLSAxKTsKIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gdG90YWw7CiB9CisKIHN0YXRpYyBzc2l6ZV90IGNvZGVjX3JlZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPQogCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUsIGRldik7CiAKLQlyZXR1cm4gc29jX2NvZGVjX3JlZ19zaG93KHJ0ZC0+Y29kZWMsIGJ1Zik7CisJcmV0dXJuIHNvY19jb2RlY19yZWdfc2hvdyhydGQtPmNvZGVjLCBidWYsIFBBR0VfU0laRSwgMCk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb2RlY19yZWcsIDA0NDQsIGNvZGVjX3JlZ19zaG93LCBOVUxMKTsKQEAgLTE2OCwxNiArMjEyLDI4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IGNvZGVjX3JlZ19yZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzc2l6ZV90IHJldDsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNoYXIgKmJ1ZjsKKworCWlmICgqcHBvcyA8IDAgfHwgIWNvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBzb2NfY29kZWNfcmVnX3Nob3coY29kZWMsIGJ1Zik7Ci0JaWYgKHJldCA+PSAwKQotCQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKKworCXJldCA9IHNvY19jb2RlY19yZWdfc2hvdyhjb2RlYywgYnVmLCBjb3VudCwgKnBwb3MpOworCWlmIChyZXQgPj0gMCkgeworCQlpZiAoY29weV90b191c2VyKHVzZXJfYnVmLCBidWYsIHJldCkpIHsKKwkJCWtmcmVlKGJ1Zik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQkqcHBvcyArPSByZXQ7CisJfQorCiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAzLDEyICsyNTksMTQgQEAKIAl3aGlsZSAoKnN0YXJ0ID09ICcgJykKIAkJc3RhcnQrKzsKIAlyZWcgPSBzaW1wbGVfc3RydG91bChzdGFydCwgJnN0YXJ0LCAxNik7Ci0JaWYgKChyZWcgPj0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpIHx8IChyZWcgJSBzdGVwKSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJd2hpbGUgKCpzdGFydCA9PSAnICcpCiAJCXN0YXJ0Kys7CiAJaWYgKHN0cmljdF9zdHJ0b3VsKHN0YXJ0LCAxNiwgJnZhbHVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBVc2Vyc3BhY2UgaGFzIGJlZW4gZmlkZGxpbmcgYXJvdW5kIGJlaGluZCB0aGUga2VybmVsJ3MgYmFjayAqLworCWFkZF90YWludChUQUlOVF9VU0VSKTsKKwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsdWUpOwogCXJldHVybiBidWZfc2l6ZTsKIH0KQEAgLTIzMiw2ICsyOTAsMTEgQEAKIAkJcmV0dXJuOwogCX0KIAorCWRlYnVnZnNfY3JlYXRlX2Jvb2woImNhY2hlX3N5bmMiLCAwNDQ0LCBjb2RlYy0+ZGVidWdmc19jb2RlY19yb290LAorCQkJICAgICZjb2RlYy0+Y2FjaGVfc3luYyk7CisJZGVidWdmc19jcmVhdGVfYm9vbCgiY2FjaGVfb25seSIsIDA0NDQsIGNvZGVjLT5kZWJ1Z2ZzX2NvZGVjX3Jvb3QsCisJCQkgICAgJmNvZGVjLT5jYWNoZV9vbmx5KTsKKwogCWNvZGVjLT5kZWJ1Z2ZzX3JlZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNvZGVjX3JlZyIsIDA2NDQsCiAJCQkJCQkgY29kZWMtPmRlYnVnZnNfY29kZWNfcm9vdCwKIAkJCQkJCSBjb2RlYywgJmNvZGVjX3JlZ19mb3BzKTsKQEAgLTM1Niw3ICs0MTksNyBAQAogc3RhdGljIHZvaWQgc29jX2luaXRfY2FyZF9kZWJ1Z2ZzKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7CiAJY2FyZC0+ZGVidWdmc19jYXJkX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY2FyZC0+bmFtZSwKLQkJCQkJCSAgICAgZGVidWdmc19yb290KTsKKwkJCQkJCSAgICAgc25kX3NvY19kZWJ1Z2ZzX3Jvb3QpOwogCWlmICghY2FyZC0+ZGVidWdmc19jYXJkX3Jvb3QpIHsKIAkJZGV2X3dhcm4oY2FyZC0+ZGV2LAogCQkJICJBU29DOiBGYWlsZWQgdG8gY3JlYXRlIGNvZGVjIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKQEAgLTQzNSwyMCArNDk4LDMwIEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCi0JaWYgKGNvZGVjX2RhaS0+ZHJpdmVyLT5zeW1tZXRyaWNfcmF0ZXMgfHwgY3B1X2RhaS0+ZHJpdmVyLT5zeW1tZXRyaWNfcmF0ZXMgfHwKLQkJCXJ0ZC0+ZGFpX2xpbmstPnN5bW1ldHJpY19yYXRlcykgewotCQlkZXZfZGJnKCZydGQtPmRldiwgIlN5bW1ldHJ5IGZvcmNlcyAlZEh6IHJhdGVcbiIsCi0JCQkJcnRkLT5yYXRlKTsKKwlpZiAoIWNvZGVjX2RhaS0+ZHJpdmVyLT5zeW1tZXRyaWNfcmF0ZXMgJiYKKwkgICAgIWNwdV9kYWktPmRyaXZlci0+c3ltbWV0cmljX3JhdGVzICYmCisJICAgICFydGQtPmRhaV9saW5rLT5zeW1tZXRyaWNfcmF0ZXMpCisJCXJldHVybiAwOwogCi0JCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgoc3Vic3RyZWFtLT5ydW50aW1lLAotCQkJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCi0JCQkJCQkgICBydGQtPnJhdGUsCi0JCQkJCQkgICBydGQtPnJhdGUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmcnRkLT5kZXYsCi0JCQkJIlVuYWJsZSB0byBhcHBseSByYXRlIHN5bW1ldHJ5IGNvbnN0cmFpbnQ6ICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSBzdHJlYW1zIGFyZSBzdGFydGluZyBzaW11bHRhbmVvdXNseSAtCisJICogdGhlIHNlY29uZCBjYW4gbmVlZCB0byBnZXQgaXRzIGNvbnN0cmFpbnRzIGJlZm9yZSB0aGUgZmlyc3QgaGFzCisJICogcGlja2VkIGEgcmF0ZS4gIENvbXBsYWluIGFuZCBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gY2Fycnkgb24uCisJICovCisJaWYgKCFydGQtPnJhdGUpIHsKKwkJZGV2X3dhcm4oJnJ0ZC0+ZGV2LAorCQkJICJOb3QgZW5mb3JjaW5nIHN5bW1ldHJpY19yYXRlcyBkdWUgdG8gcmFjZVxuIik7CisJCXJldHVybiAwOworCX0KKworCWRldl9kYmcoJnJ0ZC0+ZGV2LCAiU3ltbWV0cnkgZm9yY2VzICVkSHogcmF0ZVxuIiwgcnRkLT5yYXRlKTsKKworCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgoc3Vic3RyZWFtLT5ydW50aW1lLAorCQkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKwkJCQkJICAgcnRkLT5yYXRlLCBydGQtPnJhdGUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnJ0ZC0+ZGV2LAorCQkJIlVuYWJsZSB0byBhcHBseSByYXRlIHN5bW1ldHJ5IGNvbnN0cmFpbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwpAQCAtOTYyLDEyICsxMDM1LDExIEBACiAJLnBvaW50ZXIJPSBzb2NfcGNtX3BvaW50ZXIsCiB9OwogCi0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAvKiBwb3dlcnMgZG93biBhdWRpbyBzdWJzeXN0ZW0gZm9yIHN1c3BlbmQgKi8KLXN0YXRpYyBpbnQgc29jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHNuZF9zb2Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCBpOwogCkBAIC0xMDA4LDcgKzEwODAsNyBAQAogCX0KIAogCWlmIChjYXJkLT5zdXNwZW5kX3ByZSkKLQkJY2FyZC0+c3VzcGVuZF9wcmUocGRldiwgUE1TR19TVVNQRU5EKTsKKwkJY2FyZC0+c3VzcGVuZF9wcmUoY2FyZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGNhcmQtPnJ0ZFtpXS5jcHVfZGFpOwpAQCAtMTA3NSwxMCArMTE0NywxMSBAQAogCX0KIAogCWlmIChjYXJkLT5zdXNwZW5kX3Bvc3QpCi0JCWNhcmQtPnN1c3BlbmRfcG9zdChwZGV2LCBQTVNHX1NVU1BFTkQpOworCQljYXJkLT5zdXNwZW5kX3Bvc3QoY2FyZCk7CiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2Nfc3VzcGVuZCk7CiAKIC8qIGRlZmVycmVkIHJlc3VtZSB3b3JrLCBzbyByZXN1bWUgY2FuIGNvbXBsZXRlIGJlZm9yZSB3ZSBmaW5pc2hlZAogICogc2V0dGluZyBvdXIgY29kZWMgYmFjayB1cCwgd2hpY2ggY2FuIGJlIHZlcnkgc2xvdyBvbiBJMkMKQEAgLTEwODcsNyArMTE2MCw2IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9CiAJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfY2FyZCwgZGVmZXJyZWRfcmVzdW1lX3dvcmspOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoY2FyZC0+ZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJaW50IGk7CiAKQEAgLTExMDEsNyArMTE3Myw3IEBACiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLT5zbmRfY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QyKTsKIAogCWlmIChjYXJkLT5yZXN1bWVfcHJlKQotCQljYXJkLT5yZXN1bWVfcHJlKHBkZXYpOworCQljYXJkLT5yZXN1bWVfcHJlKGNhcmQpOwogCiAJLyogcmVzdW1lIEFDOTcgREFJcyAqLwogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKQEAgLTExNzYsNyArMTI0OCw3IEBACiAJfQogCiAJaWYgKGNhcmQtPnJlc3VtZV9wb3N0KQotCQljYXJkLT5yZXN1bWVfcG9zdChwZGV2KTsKKwkJY2FyZC0+cmVzdW1lX3Bvc3QoY2FyZCk7CiAKIAlkZXZfZGJnKGNhcmQtPmRldiwgInJlc3VtZSB3b3JrIGNvbXBsZXRlZFxuIik7CiAKQEAgLTExODUsMTAgKzEyNTcsOSBAQAogfQogCiAvKiBwb3dlcnMgdXAgYXVkaW8gc3Vic3lzdGVtIGFmdGVyIGEgc3VzcGVuZCAqLwotc3RhdGljIGludCBzb2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBzbmRfc29jX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IGk7CiAKIAkvKiBBQzk3IGRldmljZXMgbWlnaHQgaGF2ZSBvdGhlciBkcml2ZXJzIGhhbmdpbmcgb2ZmIHRoZW0gc28KQEAgLTEyMTAsOSArMTI4MSwxMCBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3Jlc3VtZSk7CiAjZWxzZQotI2RlZmluZSBzb2Nfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHNvY19yZXN1bWUJTlVMTAorI2RlZmluZSBzbmRfc29jX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzbmRfc29jX3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbnVsbF9kYWlfb3BzID0gewpAQCAtMTQwMCwzMSArMTQ3Miw0NCBAQAogCQkJICAgc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCWludCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciAqZHJpdmVyID0gY29kZWMtPmRyaXZlcjsKIAogCWNvZGVjLT5jYXJkID0gY2FyZDsKIAljb2RlYy0+ZGFwbS5jYXJkID0gY2FyZDsKIAlzb2Nfc2V0X25hbWVfcHJlZml4KGNhcmQsIGNvZGVjKTsKIAotCWlmIChjb2RlYy0+ZHJpdmVyLT5wcm9iZSkgewotCQlyZXQgPSBjb2RlYy0+ZHJpdmVyLT5wcm9iZShjb2RlYyk7CisJaWYgKCF0cnlfbW9kdWxlX2dldChjb2RlYy0+ZGV2LT5kcml2ZXItPm93bmVyKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZHJpdmVyLT5wcm9iZSkgeworCQlyZXQgPSBkcml2ZXItPnByb2JlKGNvZGVjKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoY29kZWMtPmRldiwKIAkJCQkiYXNvYzogZmFpbGVkIHRvIHByb2JlIENPREVDICVzOiAlZFxuIiwKIAkJCQljb2RlYy0+bmFtZSwgcmV0KTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycl9wcm9iZTsKIAkJfQogCX0KIAorCWlmIChkcml2ZXItPmRhcG1fd2lkZ2V0cykKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scygmY29kZWMtPmRhcG0sIGRyaXZlci0+ZGFwbV93aWRnZXRzLAorCQkJCQkgIGRyaXZlci0+bnVtX2RhcG1fd2lkZ2V0cyk7CisJaWYgKGRyaXZlci0+ZGFwbV9yb3V0ZXMpCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKCZjb2RlYy0+ZGFwbSwgZHJpdmVyLT5kYXBtX3JvdXRlcywKKwkJCQkJZHJpdmVyLT5udW1fZGFwbV9yb3V0ZXMpOworCiAJc29jX2luaXRfY29kZWNfZGVidWdmcyhjb2RlYyk7CiAKIAkvKiBtYXJrIGNvZGVjIGFzIHByb2JlZCBhbmQgYWRkIHRvIGNhcmQgY29kZWMgbGlzdCAqLwotCWlmICghdHJ5X21vZHVsZV9nZXQoY29kZWMtPmRldi0+ZHJpdmVyLT5vd25lcikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJY29kZWMtPnByb2JlZCA9IDE7CiAJbGlzdF9hZGQoJmNvZGVjLT5jYXJkX2xpc3QsICZjYXJkLT5jb2RlY19kZXZfbGlzdCk7CiAJbGlzdF9hZGQoJmNvZGVjLT5kYXBtLmxpc3QsICZjYXJkLT5kYXBtX2xpc3QpOwogCisJcmV0dXJuIDA7CisKK2Vycl9wcm9iZToKKwltb2R1bGVfcHV0KGNvZGVjLT5kZXYtPmRyaXZlci0+b3duZXIpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ2OCw3ICsxNTUzLDYgQEAKIAogCS8qIE1ha2Ugc3VyZSBhbGwgREFQTSB3aWRnZXRzIGFyZSBpbnN0YW50aWF0ZWQgKi8KIAlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoJmNvZGVjLT5kYXBtKTsKLQlzbmRfc29jX2RhcG1fc3luYygmY29kZWMtPmRhcG0pOwogCiAJLyogcmVnaXN0ZXIgdGhlIHJ0ZCBkZXZpY2UgKi8KIAlydGQtPmNvZGVjID0gY29kZWM7CkBAIC0xNTQzLDE5ICsxNjI3LDE5IEBACiAKIAkvKiBwcm9iZSB0aGUgcGxhdGZvcm0gKi8KIAlpZiAoIXBsYXRmb3JtLT5wcm9iZWQpIHsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChwbGF0Zm9ybS0+ZGV2LT5kcml2ZXItPm93bmVyKSkKKwkJCXJldHVybiAtRU5PREVWOworCiAJCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5wcm9iZSkgewogCQkJcmV0ID0gcGxhdGZvcm0tPmRyaXZlci0+cHJvYmUocGxhdGZvcm0pOwogCQkJaWYgKHJldCA8IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGZhaWxlZCB0byBwcm9iZSBwbGF0Zm9ybSAlc1xuIiwKIAkJCQkJCXBsYXRmb3JtLT5uYW1lKTsKKwkJCQltb2R1bGVfcHV0KHBsYXRmb3JtLT5kZXYtPmRyaXZlci0+b3duZXIpOwogCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCX0KIAkJLyogbWFyayBwbGF0Zm9ybSBhcyBwcm9iZWQgYW5kIGFkZCB0byBjYXJkIHBsYXRmb3JtIGxpc3QgKi8KLQotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHBsYXRmb3JtLT5kZXYtPmRyaXZlci0+b3duZXIpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkJcGxhdGZvcm0tPnByb2JlZCA9IDE7CiAJCWxpc3RfYWRkKCZwbGF0Zm9ybS0+Y2FyZF9saXN0LCAmY2FyZC0+cGxhdGZvcm1fZGV2X2xpc3QpOwogCX0KQEAgLTE3MTMsNyArMTc5Nyw2IEBACiAKIHN0YXRpYyB2b2lkIHNuZF9zb2NfaW5zdGFudGlhdGVfY2FyZChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoY2FyZC0+ZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJc3RydWN0IHNuZF9zb2NfY29kZWNfY29uZiAqY29kZWNfY29uZjsKIAllbnVtIHNuZF9zb2NfY29tcHJlc3NfdHlwZSBjb21wcmVzc190eXBlOwpAQCAtMTc0MCw2ICsxODIzLDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmY29kZWNfbGlzdCwgbGlzdCkgewogCQlpZiAoY29kZWMtPmNhY2hlX2luaXQpCiAJCQljb250aW51ZTsKKwkJLyogYnkgZGVmYXVsdCB3ZSBkb24ndCBvdmVycmlkZSB0aGUgY29tcHJlc3NfdHlwZSAqLworCQljb21wcmVzc190eXBlID0gMDsKIAkJLyogY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGNvbXByZXNzX3R5cGUgKi8KIAkJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9jb25maWdzOyArK2kpIHsKIAkJCWNvZGVjX2NvbmYgPSAmY2FyZC0+Y29kZWNfY29uZltpXTsKQEAgLTE3NTAsMTggKzE4MzUsNiBAQAogCQkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlpZiAoaSA9PSBjYXJkLT5udW1fY29uZmlncykgewotCQkJLyogbm8gbmVlZCB0byBvdmVycmlkZSB0aGUgY29tcHJlc3NfdHlwZSBzbwotCQkJICogZ28gYWhlYWQgYW5kIGRvIHRoZSBzdGFuZGFyZCB0aGluZyAqLwotCQkJcmV0ID0gc25kX3NvY19pbml0X2NvZGVjX2NhY2hlKGNvZGVjLCAwKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5tdXRleCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQkJLyogb3ZlcnJpZGUgdGhlIGNvbXByZXNzX3R5cGUgd2l0aCB0aGUgb25lIHN1cHBsaWVkIGluCi0JCSAqIHRoZSBtYWNoaW5lIGRyaXZlciAqLwogCQlyZXQgPSBzbmRfc29jX2luaXRfY29kZWNfY2FjaGUoY29kZWMsIGNvbXByZXNzX3R5cGUpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5tdXRleCk7CkBAIC0xNzgwLDE0ICsxODUzLDE5IEBACiAJfQogCWNhcmQtPnNuZF9jYXJkLT5kZXYgPSBjYXJkLT5kZXY7CiAKLSNpZmRlZiBDT05GSUdfUE0KKwljYXJkLT5kYXBtLmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNhcmQtPmRhcG0uZGV2ID0gY2FyZC0+ZGV2OworCWNhcmQtPmRhcG0uY2FyZCA9IGNhcmQ7CisJbGlzdF9hZGQoJmNhcmQtPmRhcG0ubGlzdCwgJmNhcmQtPmRhcG1fbGlzdCk7CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIAkvKiBkZWZlcnJlZCByZXN1bWUgd29yayAqLwogCUlOSVRfV09SSygmY2FyZC0+ZGVmZXJyZWRfcmVzdW1lX3dvcmssIHNvY19yZXN1bWVfZGVmZXJyZWQpOwogI2VuZGlmCiAKIAkvKiBpbml0aWFsaXNlIHRoZSBzb3VuZCBjYXJkIG9ubHkgb25jZSAqLwogCWlmIChjYXJkLT5wcm9iZSkgewotCQlyZXQgPSBjYXJkLT5wcm9iZShwZGV2KTsKKwkJcmV0ID0gY2FyZC0+cHJvYmUoY2FyZCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBjYXJkX3Byb2JlX2Vycm9yOwogCX0KQEAgLTE4MTAsMTEgKzE4ODgsMzcgQEAKIAkJfQogCX0KIAorCWlmIChjYXJkLT5kYXBtX3dpZGdldHMpCisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoJmNhcmQtPmRhcG0sIGNhcmQtPmRhcG1fd2lkZ2V0cywKKwkJCQkJICBjYXJkLT5udW1fZGFwbV93aWRnZXRzKTsKKwlpZiAoY2FyZC0+ZGFwbV9yb3V0ZXMpCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKCZjYXJkLT5kYXBtLCBjYXJkLT5kYXBtX3JvdXRlcywKKwkJCQkJY2FyZC0+bnVtX2RhcG1fcm91dGVzKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWNhcmQtPmRhcG0uZGVidWdmc19kYXBtID0gZGVidWdmc19jcmVhdGVfZGlyKCJkYXBtIiwKKwkJCQkJCSAgICAgY2FyZC0+ZGVidWdmc19jYXJkX3Jvb3QpOworCWlmICghY2FyZC0+ZGFwbS5kZWJ1Z2ZzX2RhcG0pCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIGNhcmQgREFQTSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CisKKwlzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KCZjYXJkLT5kYXBtKTsKKyNlbmRpZgorCiAJc25wcmludGYoY2FyZC0+c25kX2NhcmQtPnNob3J0bmFtZSwgc2l6ZW9mKGNhcmQtPnNuZF9jYXJkLT5zaG9ydG5hbWUpLAogCQkgIiVzIiwgIGNhcmQtPm5hbWUpOwogCXNucHJpbnRmKGNhcmQtPnNuZF9jYXJkLT5sb25nbmFtZSwgc2l6ZW9mKGNhcmQtPnNuZF9jYXJkLT5sb25nbmFtZSksCiAJCSAiJXMiLCBjYXJkLT5uYW1lKTsKIAorCWlmIChjYXJkLT5sYXRlX3Byb2JlKSB7CisJCXJldCA9IGNhcmQtPmxhdGVfcHJvYmUoY2FyZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGNhcmQtPmRldiwgIiVzIGxhdGVfcHJvYmUoKSBmYWlsZWQ6ICVkXG4iLAorCQkJCWNhcmQtPm5hbWUsIHJldCk7CisJCQlnb3RvIHByb2JlX2F1eF9kZXZfZXJyOworCQl9CisJfQorCiAJcmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZC0+c25kX2NhcmQpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogZmFpbGVkIHRvIHJlZ2lzdGVyIHNvdW5kY2FyZCBmb3IgJXNcbiIsIGNhcmQtPm5hbWUpOwpAQCAtMTg0OCw3ICsxOTUyLDcgQEAKIAogY2FyZF9wcm9iZV9lcnJvcjoKIAlpZiAoY2FyZC0+cmVtb3ZlKQotCQljYXJkLT5yZW1vdmUocGRldik7CisJCWNhcmQtPnJlbW92ZShjYXJkKTsKIAogCXNuZF9jYXJkX2ZyZWUoY2FyZC0+c25kX2NhcmQpOwogCkBAIC0xODcyLDE2ICsxOTc2LDE1IEBACiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQgPSAwOwogCisJLyoKKwkgKiBubyBjYXJkLCBzbyBtYWNoaW5lIGRyaXZlciBzaG91bGQgYmUgcmVnaXN0ZXJpbmcgY2FyZAorCSAqIHdlIHNob3VsZCBub3QgYmUgaGVyZSBpbiB0aGF0IGNhc2Ugc28gcmV0IGVycm9yCisJICovCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIEJvZGdlIHdoaWxlIHdlIHVucGljayBpbnN0YW50aWF0aW9uICovCiAJY2FyZC0+ZGV2ID0gJnBkZXYtPmRldjsKLQlJTklUX0xJU1RfSEVBRCgmY2FyZC0+ZGFpX2Rldl9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmY2FyZC0+Y29kZWNfZGV2X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5wbGF0Zm9ybV9kZXZfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhcmQtPndpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5wYXRocyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmRhcG1fbGlzdCk7Ci0KLQlzb2NfaW5pdF9jYXJkX2RlYnVnZnMoY2FyZCk7CiAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoY2FyZCk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0xODkyLDQ1ICsxOTk1LDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc29jX2NsZWFudXBfY2FyZF9yZXNvdXJjZXMoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKK3sKKwlpbnQgaTsKKworCS8qIG1ha2Ugc3VyZSBhbnkgZGVsYXllZCB3b3JrIHJ1bnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7CisJCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSAmY2FyZC0+cnRkW2ldOworCQlmbHVzaF9kZWxheWVkX3dvcmtfc3luYygmcnRkLT5kZWxheWVkX3dvcmspOworCX0KKworCS8qIHJlbW92ZSBhdXhpbGlhcnkgZGV2aWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fYXV4X2RldnM7IGkrKykKKwkJc29jX3JlbW92ZV9hdXhfZGV2KGNhcmQsIGkpOworCisJLyogcmVtb3ZlIGFuZCBmcmVlIGVhY2ggREFJICovCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykKKwkJc29jX3JlbW92ZV9kYWlfbGluayhjYXJkLCBpKTsKKworCXNvY19jbGVhbnVwX2NhcmRfZGVidWdmcyhjYXJkKTsKKworCS8qIHJlbW92ZSB0aGUgY2FyZCAqLworCWlmIChjYXJkLT5yZW1vdmUpCisJCWNhcmQtPnJlbW92ZShjYXJkKTsKKworCWtmcmVlKGNhcmQtPnJ0ZCk7CisJc25kX2NhcmRfZnJlZShjYXJkLT5zbmRfY2FyZCk7CisJcmV0dXJuIDA7CisKK30KKwogLyogcmVtb3ZlcyBhIHNvY2RldiAqLwogc3RhdGljIGludCBzb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpOwogCi0JCWlmIChjYXJkLT5pbnN0YW50aWF0ZWQpIHsKLQotCQkvKiBtYWtlIHN1cmUgYW55IGRlbGF5ZWQgd29yayBydW5zICovCi0JCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKLQkJCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSAmY2FyZC0+cnRkW2ldOwotCQkJZmx1c2hfZGVsYXllZF93b3JrX3N5bmMoJnJ0ZC0+ZGVsYXllZF93b3JrKTsKLQkJfQotCi0JCS8qIHJlbW92ZSBhdXhpbGlhcnkgZGV2aWNlcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2F1eF9kZXZzOyBpKyspCi0JCQlzb2NfcmVtb3ZlX2F1eF9kZXYoY2FyZCwgaSk7Ci0KLQkJLyogcmVtb3ZlIGFuZCBmcmVlIGVhY2ggREFJICovCi0JCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspCi0JCQlzb2NfcmVtb3ZlX2RhaV9saW5rKGNhcmQsIGkpOwotCi0JCXNvY19jbGVhbnVwX2NhcmRfZGVidWdmcyhjYXJkKTsKLQotCQkvKiByZW1vdmUgdGhlIGNhcmQgKi8KLQkJaWYgKGNhcmQtPnJlbW92ZSkKLQkJCWNhcmQtPnJlbW92ZShwZGV2KTsKLQotCQlrZnJlZShjYXJkLT5ydGQpOwotCQlzbmRfY2FyZF9mcmVlKGNhcmQtPnNuZF9jYXJkKTsKLQl9CiAJc25kX3NvY191bnJlZ2lzdGVyX2NhcmQoY2FyZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29jX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBzbmRfc29jX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgaTsKIAogCWlmICghY2FyZC0+aW5zdGFudGlhdGVkKQpAQCAtMTk0NywxMSArMjA1MywxMiBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3Bvd2Vyb2ZmKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNvY19wbV9vcHMgPSB7Ci0JLnN1c3BlbmQgPSBzb2Nfc3VzcGVuZCwKLQkucmVzdW1lID0gc29jX3Jlc3VtZSwKLQkucG93ZXJvZmYgPSBzb2NfcG93ZXJvZmYsCitjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzbmRfc29jX3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNuZF9zb2Nfc3VzcGVuZCwKKwkucmVzdW1lID0gc25kX3NvY19yZXN1bWUsCisJLnBvd2Vyb2ZmID0gc25kX3NvY19wb3dlcm9mZiwKIH07CiAKIC8qIEFTb0MgcGxhdGZvcm0gZHJpdmVyICovCkBAIC0xOTU5LDcgKzIwNjYsNyBAQAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAic29jLWF1ZGlvIiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucG0JCT0gJnNvY19wbV9vcHMsCisJCS5wbQkJPSAmc25kX3NvY19wbV9vcHMsCiAJfSwKIAkucHJvYmUJCT0gc29jX3Byb2JlLAogCS5yZW1vdmUJCT0gc29jX3JlbW92ZSwKQEAgLTIwMjksMTAgKzIxMzYsMTEgQEAKICAqCiAgKiBCb29sZWFuIGZ1bmN0aW9uIGluZGljaWF0aW5nIGlmIGEgQ09ERUMgcmVnaXN0ZXIgaXMgdm9sYXRpbGUuCiAgKi8KLWludCBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHJlZykKK2ludCBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZykKIHsKLQlpZiAoY29kZWMtPmRyaXZlci0+dm9sYXRpbGVfcmVnaXN0ZXIpCi0JCXJldHVybiBjb2RlYy0+ZHJpdmVyLT52b2xhdGlsZV9yZWdpc3RlcihyZWcpOworCWlmIChjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIpCisJCXJldHVybiBjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZyk7CiAJZWxzZQogCQlyZXR1cm4gMDsKIH0KQEAgLTIxMjksMTkgKzIyMzcsMjcgQEAKICAqCiAgKiBXcml0ZXMgbmV3IHJlZ2lzdGVyIHZhbHVlLgogICoKLSAqIFJldHVybnMgMSBmb3IgY2hhbmdlIGVsc2UgMC4KKyAqIFJldHVybnMgMSBmb3IgY2hhbmdlLCAwIGZvciBubyBjaGFuZ2UsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KIGludCBzbmRfc29jX3VwZGF0ZV9iaXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisJaW50IHJldDsKIAotCW9sZCA9IHNuZF9zb2NfcmVhZChjb2RlYywgcmVnKTsKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlvbGQgPSByZXQ7CiAJbmV3ID0gKG9sZCAmIH5tYXNrKSB8IHZhbHVlOwogCWNoYW5nZSA9IG9sZCAhPSBuZXc7Ci0JaWYgKGNoYW5nZSkKLQkJc25kX3NvY193cml0ZShjb2RlYywgcmVnLCBuZXcpOworCWlmIChjaGFuZ2UpIHsKKwkJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgcmVnLCBuZXcpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIGNoYW5nZTsKIH0KQEAgLTIyMjYsMjIgKzIzNDIsNDUgQEAKICAqIEBfdGVtcGxhdGU6IGNvbnRyb2wgdGVtcGxhdGUKICAqIEBkYXRhOiBjb250cm9sIHByaXZhdGUgZGF0YQogICogQGxvbmdfbmFtZTogY29udHJvbCBsb25nIG5hbWUKKyAqIEBwcmVmaXg6IGNvbnRyb2wgbmFtZSBwcmVmaXgKICAqCiAgKiBDcmVhdGUgYSBuZXcgbWl4ZXIgY29udHJvbCBmcm9tIGEgdGVtcGxhdGUgY29udHJvbC4KICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIGVsc2UgZXJyb3IuCiAgKi8KIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNuZF9zb2NfY25ldyhjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqX3RlbXBsYXRlLAotCXZvaWQgKmRhdGEsIGNoYXIgKmxvbmdfbmFtZSkKKwkJCQkgIHZvaWQgKmRhdGEsIGNoYXIgKmxvbmdfbmFtZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0ZW1wbGF0ZTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbDsKKwljaGFyICpuYW1lID0gTlVMTDsKKwlpbnQgbmFtZV9sZW47CiAKIAltZW1jcHkoJnRlbXBsYXRlLCBfdGVtcGxhdGUsIHNpemVvZih0ZW1wbGF0ZSkpOwotCWlmIChsb25nX25hbWUpCi0JCXRlbXBsYXRlLm5hbWUgPSBsb25nX25hbWU7CiAJdGVtcGxhdGUuaW5kZXggPSAwOwogCi0JcmV0dXJuIHNuZF9jdGxfbmV3MSgmdGVtcGxhdGUsIGRhdGEpOworCWlmICghbG9uZ19uYW1lKQorCQlsb25nX25hbWUgPSB0ZW1wbGF0ZS5uYW1lOworCisJaWYgKHByZWZpeCkgeworCQluYW1lX2xlbiA9IHN0cmxlbihsb25nX25hbWUpICsgc3RybGVuKHByZWZpeCkgKyAyOworCQluYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX0FUT01JQyk7CisJCWlmICghbmFtZSkKKwkJCXJldHVybiBOVUxMOworCisJCXNucHJpbnRmKG5hbWUsIG5hbWVfbGVuLCAiJXMgJXMiLCBwcmVmaXgsIGxvbmdfbmFtZSk7CisKKwkJdGVtcGxhdGUubmFtZSA9IG5hbWU7CisJfSBlbHNlIHsKKwkJdGVtcGxhdGUubmFtZSA9IGxvbmdfbmFtZTsKKwl9CisKKwlrY29udHJvbCA9IHNuZF9jdGxfbmV3MSgmdGVtcGxhdGUsIGRhdGEpOworCisJa2ZyZWUobmFtZSk7CisKKwlyZXR1cm4ga2NvbnRyb2w7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2NuZXcpOwogCkBAIC0yMjYwLDIyICsyMzk5LDE2IEBACiAJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNvbnRyb2xzLCBpbnQgbnVtX2NvbnRyb2xzKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGNvZGVjLT5jYXJkLT5zbmRfY2FyZDsKLQljaGFyIHByZWZpeGVkX25hbWVbNDRdLCAqbmFtZTsKIAlpbnQgZXJyLCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jb250cm9sczsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9sID0gJmNvbnRyb2xzW2ldOwotCQlpZiAoY29kZWMtPm5hbWVfcHJlZml4KSB7Ci0JCQlzbnByaW50ZihwcmVmaXhlZF9uYW1lLCBzaXplb2YocHJlZml4ZWRfbmFtZSksICIlcyAlcyIsCi0JCQkJIGNvZGVjLT5uYW1lX3ByZWZpeCwgY29udHJvbC0+bmFtZSk7Ci0JCQluYW1lID0gcHJlZml4ZWRfbmFtZTsKLQkJfSBlbHNlIHsKLQkJCW5hbWUgPSBjb250cm9sLT5uYW1lOwotCQl9Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9zb2NfY25ldyhjb250cm9sLCBjb2RlYywgbmFtZSkpOworCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfc29jX2NuZXcoY29udHJvbCwgY29kZWMsCisJCQkJCQkgICAgIGNvbnRyb2wtPm5hbWUsCisJCQkJCQkgICAgIGNvZGVjLT5uYW1lX3ByZWZpeCkpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiJXM6IEZhaWxlZCB0byBhZGQgJXM6ICVkXG4iLAotCQkJCWNvZGVjLT5uYW1lLCBuYW1lLCBlcnIpOworCQkJCWNvZGVjLT5uYW1lLCBjb250cm9sLT5uYW1lLCBlcnIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KQEAgLTI5NTYsMTIgKzMwODksMzQgQEAKIHsKIAlpZiAoZGFpLT5kcml2ZXIgJiYgZGFpLT5kcml2ZXItPm9wcy0+c2V0X3N5c2NsaykKIAkJcmV0dXJuIGRhaS0+ZHJpdmVyLT5vcHMtPnNldF9zeXNjbGsoZGFpLCBjbGtfaWQsIGZyZXEsIGRpcik7CisJZWxzZSBpZiAoZGFpLT5jb2RlYyAmJiBkYWktPmNvZGVjLT5kcml2ZXItPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPmNvZGVjLT5kcml2ZXItPnNldF9zeXNjbGsoZGFpLT5jb2RlYywgY2xrX2lkLAorCQkJCQkJICAgICAgZnJlcSwgZGlyKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYWlfc2V0X3N5c2Nsayk7CiAKIC8qKgorICogc25kX3NvY19jb2RlY19zZXRfc3lzY2xrIC0gY29uZmlndXJlIENPREVDIHN5c3RlbSBvciBtYXN0ZXIgY2xvY2suCisgKiBAY29kZWM6IENPREVDCisgKiBAY2xrX2lkOiBEQUkgc3BlY2lmaWMgY2xvY2sgSUQKKyAqIEBmcmVxOiBuZXcgY2xvY2sgZnJlcXVlbmN5IGluIEh6CisgKiBAZGlyOiBuZXcgY2xvY2sgZGlyZWN0aW9uIC0gaW5wdXQvb3V0cHV0LgorICoKKyAqIENvbmZpZ3VyZXMgdGhlIENPREVDIG1hc3RlciAoTUNMSykgb3Igc3lzdGVtIChTWVNDTEspIGNsb2NraW5nLgorICovCitpbnQgc25kX3NvY19jb2RlY19zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGNsa19pZCwKKwl1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlpZiAoY29kZWMtPmRyaXZlci0+c2V0X3N5c2NsaykKKwkJcmV0dXJuIGNvZGVjLT5kcml2ZXItPnNldF9zeXNjbGsoY29kZWMsIGNsa19pZCwgZnJlcSwgZGlyKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jb2RlY19zZXRfc3lzY2xrKTsKKworLyoqCiAgKiBzbmRfc29jX2RhaV9zZXRfY2xrZGl2IC0gY29uZmlndXJlIERBSSBjbG9jayBkaXZpZGVycy4KICAqIEBkYWk6IERBSQogICogQGRpdl9pZDogREFJIHNwZWNpZmljIGNsb2NrIGRpdmlkZXIgSUQKQEAgLTI5OTcsMTEgKzMxNTIsMzUgQEAKIAlpZiAoZGFpLT5kcml2ZXIgJiYgZGFpLT5kcml2ZXItPm9wcy0+c2V0X3BsbCkKIAkJcmV0dXJuIGRhaS0+ZHJpdmVyLT5vcHMtPnNldF9wbGwoZGFpLCBwbGxfaWQsIHNvdXJjZSwKIAkJCQkJIGZyZXFfaW4sIGZyZXFfb3V0KTsKKwllbHNlIGlmIChkYWktPmNvZGVjICYmIGRhaS0+Y29kZWMtPmRyaXZlci0+c2V0X3BsbCkKKwkJcmV0dXJuIGRhaS0+Y29kZWMtPmRyaXZlci0+c2V0X3BsbChkYWktPmNvZGVjLCBwbGxfaWQsIHNvdXJjZSwKKwkJCQkJCSAgIGZyZXFfaW4sIGZyZXFfb3V0KTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYWlfc2V0X3BsbCk7CiAKKy8qCisgKiBzbmRfc29jX2NvZGVjX3NldF9wbGwgLSBjb25maWd1cmUgY29kZWMgUExMLgorICogQGNvZGVjOiBDT0RFQworICogQHBsbF9pZDogREFJIHNwZWNpZmljIFBMTCBJRAorICogQHNvdXJjZTogREFJIHNwZWNpZmljIHNvdXJjZSBmb3IgdGhlIFBMTAorICogQGZyZXFfaW46IFBMTCBpbnB1dCBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyAqIEBmcmVxX291dDogcmVxdWVzdGVkIFBMTCBvdXRwdXQgY2xvY2sgZnJlcXVlbmN5IGluIEh6CisgKgorICogQ29uZmlndXJlcyBhbmQgZW5hYmxlcyBQTEwgdG8gZ2VuZXJhdGUgb3V0cHV0IGNsb2NrIGJhc2VkIG9uIGlucHV0IGNsb2NrLgorICovCitpbnQgc25kX3NvY19jb2RlY19zZXRfcGxsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBsbF9pZCwgaW50IHNvdXJjZSwKKwkJCSAgdW5zaWduZWQgaW50IGZyZXFfaW4sIHVuc2lnbmVkIGludCBmcmVxX291dCkKK3sKKwlpZiAoY29kZWMtPmRyaXZlci0+c2V0X3BsbCkKKwkJcmV0dXJuIGNvZGVjLT5kcml2ZXItPnNldF9wbGwoY29kZWMsIHBsbF9pZCwgc291cmNlLAorCQkJCQkgICAgICBmcmVxX2luLCBmcmVxX291dCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfY29kZWNfc2V0X3BsbCk7CisKIC8qKgogICogc25kX3NvY19kYWlfc2V0X2ZtdCAtIGNvbmZpZ3VyZSBEQUkgaGFyZHdhcmUgYXVkaW8gZm9ybWF0LgogICogQGRhaTogREFJCkBAIC0zMTAxLDE3ICszMjgwLDE4IEBACiAgKgogICogQGNhcmQ6IENhcmQgdG8gcmVnaXN0ZXIKICAqCi0gKiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMgaXMgYW4gaW50ZXJuYWwgb25seSBmdW5jdGlvbjogaXQgd2lsbCBiZQotICogZXhwb3NlZCB0byBtYWNoaW5lIGRyaXZlcnMgYWZ0ZXIgZnVydGhlciBiYWNrcG9ydGluZyBvZiBBU29DIHYyCi0gKiByZWdpc3RyYXRpb24gQVBJcy4KICAqLwotc3RhdGljIGludCBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKK2ludCBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKIAlpbnQgaTsKIAogCWlmICghY2FyZC0+bmFtZSB8fCAhY2FyZC0+ZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXNuZF9zb2NfaW5pdGlhbGl6ZV9jYXJkX2xpc3RzKGNhcmQpOworCisJc29jX2luaXRfY2FyZF9kZWJ1Z2ZzKGNhcmQpOworCiAJY2FyZC0+cnRkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUpICoKIAkJCSAgICAoY2FyZC0+bnVtX2xpbmtzICsgY2FyZC0+bnVtX2F1eF9kZXZzKSwKIAkJCSAgICBHRlBfS0VSTkVMKTsKQEAgLTMxMzUsMTggKzMzMTUsMTggQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19yZWdpc3Rlcl9jYXJkKTsKIAogLyoqCiAgKiBzbmRfc29jX3VucmVnaXN0ZXJfY2FyZCAtIFVucmVnaXN0ZXIgYSBjYXJkIHdpdGggdGhlIEFTb0MgY29yZQogICoKICAqIEBjYXJkOiBDYXJkIHRvIHVucmVnaXN0ZXIKICAqCi0gKiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMgaXMgYW4gaW50ZXJuYWwgb25seSBmdW5jdGlvbjogaXQgd2lsbCBiZQotICogZXhwb3NlZCB0byBtYWNoaW5lIGRyaXZlcnMgYWZ0ZXIgZnVydGhlciBiYWNrcG9ydGluZyBvZiBBU29DIHYyCi0gKiByZWdpc3RyYXRpb24gQVBJcy4KICAqLwotc3RhdGljIGludCBzbmRfc29jX3VucmVnaXN0ZXJfY2FyZChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQoraW50IHNuZF9zb2NfdW5yZWdpc3Rlcl9jYXJkKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7CisJaWYgKGNhcmQtPmluc3RhbnRpYXRlZCkKKwkJc29jX2NsZWFudXBfY2FyZF9yZXNvdXJjZXMoY2FyZCk7CiAJbXV0ZXhfbG9jaygmY2xpZW50X211dGV4KTsKIAlsaXN0X2RlbCgmY2FyZC0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZjbGllbnRfbXV0ZXgpOwpAQCAtMzE1NCw2ICszMzM0LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY191bnJlZ2lzdGVyX2NhcmQpOwogCiAvKgogICogU2ltcGxpZnkgREFJIGxpbmsgY29uZmlndXJhdGlvbiBieSByZW1vdmluZyAiLi0xIiBmcm9tIGRldmljZSBuYW1lcwpAQCAtMzQ4Myw5ICszNjY0LDEyIEBACiAKIAljb2RlYy0+d3JpdGUgPSBjb2RlY19kcnYtPndyaXRlOwogCWNvZGVjLT5yZWFkID0gY29kZWNfZHJ2LT5yZWFkOworCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IGNvZGVjX2Rydi0+dm9sYXRpbGVfcmVnaXN0ZXI7CisJY29kZWMtPnJlYWRhYmxlX3JlZ2lzdGVyID0gY29kZWNfZHJ2LT5yZWFkYWJsZV9yZWdpc3RlcjsKIAljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKIAljb2RlYy0+ZGFwbS5kZXYgPSBkZXY7CiAJY29kZWMtPmRhcG0uY29kZWMgPSBjb2RlYzsKKwljb2RlYy0+ZGFwbS5zZXFfbm90aWZpZXIgPSBjb2RlY19kcnYtPnNlcV9ub3RpZmllcjsKIAljb2RlYy0+ZGV2ID0gZGV2OwogCWNvZGVjLT5kcml2ZXIgPSBjb2RlY19kcnY7CiAJY29kZWMtPm51bV9kYWkgPSBudW1fZGFpOwpAQCAtMzQ5NCwyMCArMzY3OCwzMCBAQAogCS8qIGFsbG9jYXRlIENPREVDIHJlZ2lzdGVyIGNhY2hlICovCiAJaWYgKGNvZGVjX2Rydi0+cmVnX2NhY2hlX3NpemUgJiYgY29kZWNfZHJ2LT5yZWdfd29yZF9zaXplKSB7CiAJCXJlZ19zaXplID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZSAqIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZTsKKwkJY29kZWMtPnJlZ19zaXplID0gcmVnX3NpemU7CiAJCS8qIGl0IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgY29weSBvZiB0aGUgZGVmYXVsdCByZWdpc3RlciBjYWNoZQogCQkgKiBiZWNhdXNlIGluIHRoZSBjYXNlIG9mIHVzaW5nIGEgY29tcHJlc3Npb24gdHlwZSB0aGF0IHJlcXVpcmVzCiAJCSAqIHRoZSBkZWZhdWx0IHJlZ2lzdGVyIGNhY2hlIHRvIGJlIG1hcmtlZCBhcyBfX2RldmluaXRjb25zdCB0aGUKIAkJICoga2VybmVsIG1pZ2h0IGhhdmUgZnJlZWQgdGhlIGFycmF5IGJ5IHRoZSB0aW1lIHdlIGluaXRpYWxpemUKIAkJICogdGhlIGNhY2hlLgogCQkgKi8KLQkJY29kZWMtPnJlZ19kZWZfY29weSA9IGttZW1kdXAoY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdCwKLQkJCQkJICAgICAgcmVnX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWNvZGVjLT5yZWdfZGVmX2NvcHkpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGZhaWw7CisJCWlmIChjb2RlY19kcnYtPnJlZ19jYWNoZV9kZWZhdWx0KSB7CisJCQljb2RlYy0+cmVnX2RlZl9jb3B5ID0ga21lbWR1cChjb2RlY19kcnYtPnJlZ19jYWNoZV9kZWZhdWx0LAorCQkJCQkJICAgICAgcmVnX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFjb2RlYy0+cmVnX2RlZl9jb3B5KSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CiAJCX0KIAl9CiAKKwlpZiAoY29kZWNfZHJ2LT5yZWdfYWNjZXNzX3NpemUgJiYgY29kZWNfZHJ2LT5yZWdfYWNjZXNzX2RlZmF1bHQpIHsKKwkJaWYgKCFjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIpCisJCQljb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIgPSBzbmRfc29jX2RlZmF1bHRfdm9sYXRpbGVfcmVnaXN0ZXI7CisJCWlmICghY29kZWMtPnJlYWRhYmxlX3JlZ2lzdGVyKQorCQkJY29kZWMtPnJlYWRhYmxlX3JlZ2lzdGVyID0gc25kX3NvY19kZWZhdWx0X3JlYWRhYmxlX3JlZ2lzdGVyOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBudW1fZGFpOyBpKyspIHsKIAkJZml4dXBfY29kZWNfZm9ybWF0cygmZGFpX2RydltpXS5wbGF5YmFjayk7CiAJCWZpeHVwX2NvZGVjX2Zvcm1hdHMoJmRhaV9kcnZbaV0uY2FwdHVyZSk7CkBAIC0zNTc0LDIyICszNzY4LDIyIEBACiBzdGF0aWMgaW50IF9faW5pdCBzbmRfc29jX2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKLQlkZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImFzb2MiLCBOVUxMKTsKLQlpZiAoSVNfRVJSKGRlYnVnZnNfcm9vdCkgfHwgIWRlYnVnZnNfcm9vdCkgeworCXNuZF9zb2NfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJhc29jIiwgTlVMTCk7CisJaWYgKElTX0VSUihzbmRfc29jX2RlYnVnZnNfcm9vdCkgfHwgIXNuZF9zb2NfZGVidWdmc19yb290KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJBU29DOiBGYWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKLQkJZGVidWdmc19yb290ID0gTlVMTDsKKwkJc25kX3NvY19kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOwogCX0KIAotCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgiY29kZWNzIiwgMDQ0NCwgZGVidWdmc19yb290LCBOVUxMLAorCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgiY29kZWNzIiwgMDQ0NCwgc25kX3NvY19kZWJ1Z2ZzX3Jvb3QsIE5VTEwsCiAJCQkJICZjb2RlY19saXN0X2ZvcHMpKQogCQlwcl93YXJuKCJBU29DOiBGYWlsZWQgdG8gY3JlYXRlIENPREVDIGxpc3QgZGVidWdmcyBmaWxlXG4iKTsKIAotCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgiZGFpcyIsIDA0NDQsIGRlYnVnZnNfcm9vdCwgTlVMTCwKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRhaXMiLCAwNDQ0LCBzbmRfc29jX2RlYnVnZnNfcm9vdCwgTlVMTCwKIAkJCQkgJmRhaV9saXN0X2ZvcHMpKQogCQlwcl93YXJuKCJBU29DOiBGYWlsZWQgdG8gY3JlYXRlIERBSSBsaXN0IGRlYnVnZnMgZmlsZVxuIik7CiAKLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBsYXRmb3JtcyIsIDA0NDQsIGRlYnVnZnNfcm9vdCwgTlVMTCwKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBsYXRmb3JtcyIsIDA0NDQsIHNuZF9zb2NfZGVidWdmc19yb290LCBOVUxMLAogCQkJCSAmcGxhdGZvcm1fbGlzdF9mb3BzKSkKIAkJcHJfd2FybigiQVNvQzogRmFpbGVkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBsaXN0IGRlYnVnZnMgZmlsZVxuIik7CiAjZW5kaWYKQEAgLTM2MDEsNyArMzc5NSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc25kX3NvY19leGl0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRlYnVnZnNfcm9vdCk7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHNuZF9zb2NfZGVidWdmc19yb290KTsKICNlbmRpZgogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzb2NfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggMTc5MGY4My4uODFjNDA1MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTEyNSwxNyArMTI2LDE3IEBACiAKIC8qKgogICogc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsIC0gc2V0IHRoZSBiaWFzIGxldmVsIGZvciB0aGUgc3lzdGVtCi0gKiBAY2FyZDogYXVkaW8gZGV2aWNlCisgKiBAZGFwbTogREFQTSBjb250ZXh0CiAgKiBAbGV2ZWw6IGxldmVsIHRvIGNvbmZpZ3VyZQogICoKICAqIENvbmZpZ3VyZSB0aGUgYmlhcyAocG93ZXIpIGxldmVscyBmb3IgdGhlIFNvQyBhdWRpbyBkZXZpY2UuCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzIGVsc2UgZXJyb3IuCiAgKi8KLXN0YXRpYyBpbnQgc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCi0JCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKK3N0YXRpYyBpbnQgc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAkJCQkgICAgICAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQ7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CkBAIC0zNjUsOSArMzY2LDIwIEBACiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCiB7CiAJaW50IGksIHJldCA9IDA7Ci0Jc2l6ZV90IG5hbWVfbGVuOworCXNpemVfdCBuYW1lX2xlbiwgcHJlZml4X2xlbjsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnBhdGg7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGFwbS0+Y29kZWMtPmNhcmQtPnNuZF9jYXJkOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQtPnNuZF9jYXJkOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKworCWlmIChkYXBtLT5jb2RlYykKKwkJcHJlZml4ID0gZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4OworCWVsc2UKKwkJcHJlZml4ID0gTlVMTDsKKworCWlmIChwcmVmaXgpCisJCXByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KSArIDE7CisJZWxzZQorCQlwcmVmaXhfbGVuID0gMDsKIAogCS8qIGFkZCBrY29udHJvbCAqLwogCWZvciAoaSA9IDA7IGkgPCB3LT5udW1fa2NvbnRyb2xzOyBpKyspIHsKQEAgLTM5Niw4ICs0MDgsMTUgQEAKIAogCQkJc3dpdGNoICh3LT5pZCkgewogCQkJZGVmYXVsdDoKKwkJCQkvKiBUaGUgY29udHJvbCB3aWxsIGdldCBhIHByZWZpeCBmcm9tCisJCQkJICogdGhlIGNvbnRyb2wgY3JlYXRpb24gcHJvY2VzcyBidXQKKwkJCQkgKiB3ZSdyZSBhbHNvIHVzaW5nIHRoZSBzYW1lIHByZWZpeAorCQkJCSAqIGZvciB3aWRnZXRzIHNvIGN1dCB0aGUgcHJlZml4IG9mZgorCQkJCSAqIHRoZSBmcm9udCBvZiB0aGUgd2lkZ2V0IG5hbWUuCisJCQkJICovCiAJCQkJc25wcmludGYocGF0aC0+bG9uZ19uYW1lLCBuYW1lX2xlbiwgIiVzICVzIiwKLQkJCQkJIHctPm5hbWUsIHctPmtjb250cm9sc1tpXS5uYW1lKTsKKwkJCQkJIHctPm5hbWUgKyBwcmVmaXhfbGVuLAorCQkJCQkgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJCXNucHJpbnRmKHBhdGgtPmxvbmdfbmFtZSwgbmFtZV9sZW4sICIlcyIsCkBAIC00MDgsNyArNDI3LDcgQEAKIAkJCXBhdGgtPmxvbmdfbmFtZVtuYW1lX2xlbiAtIDFdID0gJ1wwJzsKIAogCQkJcGF0aC0+a2NvbnRyb2wgPSBzbmRfc29jX2NuZXcoJnctPmtjb250cm9sc1tpXSwgdywKLQkJCQlwYXRoLT5sb25nX25hbWUpOworCQkJCQkJICAgICAgcGF0aC0+bG9uZ19uYW1lLCBwcmVmaXgpOwogCQkJcmV0ID0gc25kX2N0bF9hZGQoY2FyZCwgcGF0aC0+a2NvbnRyb2wpOwogCQkJaWYgKHJldCA8IDApIHsKIAkJCQlkZXZfZXJyKGRhcG0tPmRldiwKQEAgLTQyOSw3ICs0NDgsOSBAQAogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcGF0aCA9IE5VTEw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2w7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGFwbS0+Y29kZWMtPmNhcmQtPnNuZF9jYXJkOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQtPnNuZF9jYXJkOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlzaXplX3QgcHJlZml4X2xlbjsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghdy0+bnVtX2tjb250cm9scykgewpAQCAtNDM3LDcgKzQ1OCwyMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlrY29udHJvbCA9IHNuZF9zb2NfY25ldygmdy0+a2NvbnRyb2xzWzBdLCB3LCB3LT5uYW1lKTsKKwlpZiAoZGFwbS0+Y29kZWMpCisJCXByZWZpeCA9IGRhcG0tPmNvZGVjLT5uYW1lX3ByZWZpeDsKKwllbHNlCisJCXByZWZpeCA9IE5VTEw7CisKKwlpZiAocHJlZml4KQorCQlwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCkgKyAxOworCWVsc2UKKwkJcHJlZml4X2xlbiA9IDA7CisKKwkvKiBUaGUgY29udHJvbCB3aWxsIGdldCBhIHByZWZpeCBmcm9tIHRoZSBjb250cm9sIGNyZWF0aW9uCisJICogcHJvY2VzcyBidXQgd2UncmUgYWxzbyB1c2luZyB0aGUgc2FtZSBwcmVmaXggZm9yIHdpZGdldHMgc28KKwkgKiBjdXQgdGhlIHByZWZpeCBvZmYgdGhlIGZyb250IG9mIHRoZSB3aWRnZXQgbmFtZS4KKwkgKi8KKwlrY29udHJvbCA9IHNuZF9zb2NfY25ldygmdy0+a2NvbnRyb2xzWzBdLCB3LCB3LT5uYW1lICsgcHJlZml4X2xlbiwKKwkJCQlwcmVmaXgpOwogCXJldCA9IHNuZF9jdGxfYWRkKGNhcmQsIGtjb250cm9sKTsKIAogCWlmIChyZXQgPCAwKQpAQCAtNDc5LDcgKzUxNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3NvY19kYXBtX3N1c3BlbmRfY2hlY2soc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCkKIHsKLQlpbnQgbGV2ZWwgPSBzbmRfcG93ZXJfZ2V0X3N0YXRlKHdpZGdldC0+ZGFwbS0+Y29kZWMtPmNhcmQtPnNuZF9jYXJkKTsKKwlpbnQgbGV2ZWwgPSBzbmRfcG93ZXJfZ2V0X3N0YXRlKHdpZGdldC0+ZGFwbS0+Y2FyZC0+c25kX2NhcmQpOwogCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EUlZfQ1RMX1BPV0VSX0QzaG90OgpAQCAtNzM0LDEwICs3NzAsMjMgQEAKIAogc3RhdGljIGludCBkYXBtX3NlcV9jb21wYXJlKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICphLAogCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpiLAotCQkJICAgIGludCBzb3J0W10pCisJCQkgICAgYm9vbCBwb3dlcl91cCkKIHsKKwlpbnQgKnNvcnQ7CisKKwlpZiAocG93ZXJfdXApCisJCXNvcnQgPSBkYXBtX3VwX3NlcTsKKwllbHNlCisJCXNvcnQgPSBkYXBtX2Rvd25fc2VxOworCiAJaWYgKHNvcnRbYS0+aWRdICE9IHNvcnRbYi0+aWRdKQogCQlyZXR1cm4gc29ydFthLT5pZF0gLSBzb3J0W2ItPmlkXTsKKwlpZiAoYS0+c3Vic2VxICE9IGItPnN1YnNlcSkgeworCQlpZiAocG93ZXJfdXApCisJCQlyZXR1cm4gYS0+c3Vic2VxIC0gYi0+c3Vic2VxOworCQllbHNlCisJCQlyZXR1cm4gYi0+c3Vic2VxIC0gYS0+c3Vic2VxOworCX0KIAlpZiAoYS0+cmVnICE9IGItPnJlZykKIAkJcmV0dXJuIGEtPnJlZyAtIGItPnJlZzsKIAlpZiAoYS0+ZGFwbSAhPSBiLT5kYXBtKQpAQCAtNzQ5LDEyICs3OTgsMTIgQEAKIC8qIEluc2VydCBhIHdpZGdldCBpbiBvcmRlciBpbnRvIGEgREFQTSBwb3dlciBzZXF1ZW5jZS4gKi8KIHN0YXRpYyB2b2lkIGRhcG1fc2VxX2luc2VydChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqbmV3X3dpZGdldCwKIAkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAotCQkJICAgIGludCBzb3J0W10pCisJCQkgICAgYm9vbCBwb3dlcl91cCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodywgbGlzdCwgcG93ZXJfbGlzdCkKLQkJaWYgKGRhcG1fc2VxX2NvbXBhcmUobmV3X3dpZGdldCwgdywgc29ydCkgPCAwKSB7CisJCWlmIChkYXBtX3NlcV9jb21wYXJlKG5ld193aWRnZXQsIHcsIHBvd2VyX3VwKSA8IDApIHsKIAkJCWxpc3RfYWRkX3RhaWwoJm5ld193aWRnZXQtPnBvd2VyX2xpc3QsICZ3LT5wb3dlcl9saXN0KTsKIAkJCXJldHVybjsKIAkJfQpAQCAtODY1LDI2ICs5MTQsNDIgQEAKICAqIGhhbmRsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGRhcG1fc2VxX3J1bihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCi0JCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50IGV2ZW50LCBpbnQgc29ydFtdKQorCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCBldmVudCwgYm9vbCBwb3dlcl91cCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywgKm47CiAJTElTVF9IRUFEKHBlbmRpbmcpOwogCWludCBjdXJfc29ydCA9IC0xOworCWludCBjdXJfc3Vic2VxID0gLTE7CiAJaW50IGN1cl9yZWcgPSBTTkRfU09DX05PUE07CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpjdXJfZGFwbSA9IE5VTEw7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOworCWludCAqc29ydDsKKworCWlmIChwb3dlcl91cCkKKwkJc29ydCA9IGRhcG1fdXBfc2VxOworCWVsc2UKKwkJc29ydCA9IGRhcG1fZG93bl9zZXE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodywgbiwgbGlzdCwgcG93ZXJfbGlzdCkgewogCQlyZXQgPSAwOwogCiAJCS8qIERvIHdlIG5lZWQgdG8gYXBwbHkgYW55IHF1ZXVlZCBjaGFuZ2VzPyAqLwogCQlpZiAoc29ydFt3LT5pZF0gIT0gY3VyX3NvcnQgfHwgdy0+cmVnICE9IGN1cl9yZWcgfHwKLQkJICAgIHctPmRhcG0gIT0gY3VyX2RhcG0pIHsKKwkJICAgIHctPmRhcG0gIT0gY3VyX2RhcG0gfHwgdy0+c3Vic2VxICE9IGN1cl9zdWJzZXEpIHsKIAkJCWlmICghbGlzdF9lbXB0eSgmcGVuZGluZykpCiAJCQkJZGFwbV9zZXFfcnVuX2NvYWxlc2NlZChjdXJfZGFwbSwgJnBlbmRpbmcpOwogCisJCQlpZiAoY3VyX2RhcG0gJiYgY3VyX2RhcG0tPnNlcV9ub3RpZmllcikgeworCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhcG1fdXBfc2VxKTsgaSsrKQorCQkJCQlpZiAoc29ydFtpXSA9PSBjdXJfc29ydCkKKwkJCQkJCWN1cl9kYXBtLT5zZXFfbm90aWZpZXIoY3VyX2RhcG0sCisJCQkJCQkJCSAgICAgICBpLAorCQkJCQkJCQkgICAgICAgY3VyX3N1YnNlcSk7CisJCQl9CisKIAkJCUlOSVRfTElTVF9IRUFEKCZwZW5kaW5nKTsKIAkJCWN1cl9zb3J0ID0gLTE7CisJCQljdXJfc3Vic2VxID0gLTE7CiAJCQljdXJfcmVnID0gU05EX1NPQ19OT1BNOwogCQkJY3VyX2RhcG0gPSBOVUxMOwogCQl9CkBAIC05MjksNiArOTk0LDcgQEAKIAkJZGVmYXVsdDoKIAkJCS8qIFF1ZXVlIGl0IHVwIGZvciBhcHBsaWNhdGlvbiAqLwogCQkJY3VyX3NvcnQgPSBzb3J0W3ctPmlkXTsKKwkJCWN1cl9zdWJzZXEgPSB3LT5zdWJzZXE7CiAJCQljdXJfcmVnID0gdy0+cmVnOwogCQkJY3VyX2RhcG0gPSB3LT5kYXBtOwogCQkJbGlzdF9tb3ZlKCZ3LT5wb3dlcl9saXN0LCAmcGVuZGluZyk7CkBAIC05NDIsNiArMTAwOCwxMyBAQAogCiAJaWYgKCFsaXN0X2VtcHR5KCZwZW5kaW5nKSkKIAkJZGFwbV9zZXFfcnVuX2NvYWxlc2NlZChjdXJfZGFwbSwgJnBlbmRpbmcpOworCisJaWYgKGN1cl9kYXBtICYmIGN1cl9kYXBtLT5zZXFfbm90aWZpZXIpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFwbV91cF9zZXEpOyBpKyspCisJCQlpZiAoc29ydFtpXSA9PSBjdXJfc29ydCkKKwkJCQljdXJfZGFwbS0+c2VxX25vdGlmaWVyKGN1cl9kYXBtLAorCQkJCQkJICAgICAgIGksIGN1cl9zdWJzZXEpOworCX0KIH0KIAogc3RhdGljIHZvaWQgZGFwbV93aWRnZXRfdXBkYXRlKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSkKQEAgLTk3Nyw3ICsxMDUwLDYyIEBACiAJfQogfQogCisvKiBBc3luYyBjYWxsYmFjayBydW4gcHJpb3IgdG8gREFQTSBzZXF1ZW5jZXMgLSBicmluZ3MgdG8gX1BSRVBBUkUgaWYKKyAqIHRoZXkncmUgY2hhbmdpbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIGRhcG1fcHJlX3NlcXVlbmNlX2FzeW5jKHZvaWQgKmRhdGEsIGFzeW5jX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmQgPSBkYXRhOworCWludCByZXQ7CiAKKwlpZiAoZC0+ZGV2X3Bvd2VyICYmIGQtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoZCwgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKGQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHR1cm4gb24gYmlhczogJWRcbiIsIHJldCk7CisJfQorCisJLyogSWYgd2UncmUgY2hhbmdpbmcgdG8gYWxsIG9uIG9yIGFsbCBvZmYgdGhlbiBwcmVwYXJlICovCisJaWYgKChkLT5kZXZfcG93ZXIgJiYgZC0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSkgfHwKKwkgICAgKCFkLT5kZXZfcG93ZXIgJiYgZC0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT04pKSB7CisJCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChkLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl9lcnIoZC0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcHJlcGFyZSBiaWFzOiAlZFxuIiwgcmV0KTsKKwl9Cit9CisKKy8qIEFzeW5jIGNhbGxiYWNrIHJ1biBwcmlvciB0byBEQVBNIHNlcXVlbmNlcyAtIGJyaW5ncyB0byB0aGVpciBmaW5hbAorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIGRhcG1fcG9zdF9zZXF1ZW5jZV9hc3luYyh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkID0gZGF0YTsKKwlpbnQgcmV0OworCisJLyogSWYgd2UganVzdCBwb3dlcmVkIHRoZSBsYXN0IHRoaW5nIG9mZiBkcm9wIHRvIHN0YW5kYnkgYmlhcyAqLworCWlmIChkLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19QUkVQQVJFICYmICFkLT5kZXZfcG93ZXIpIHsKKwkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGQsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2VycihkLT5kZXYsICJGYWlsZWQgdG8gYXBwbHkgc3RhbmRieSBiaWFzOiAlZFxuIiwKKwkJCQlyZXQpOworCX0KKworCS8qIElmIHdlJ3JlIGluIHN0YW5kYnkgYW5kIGNhbiBzdXBwb3J0IGJpYXMgb2ZmIHRoZW4gZG8gdGhhdCAqLworCWlmIChkLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZICYmIGQtPmlkbGVfYmlhc19vZmYpIHsKKwkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGQsIFNORF9TT0NfQklBU19PRkYpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKGQtPmRldiwgIkZhaWxlZCB0byB0dXJuIG9mZiBiaWFzOiAlZFxuIiwgcmV0KTsKKwl9CisKKwkvKiBJZiB3ZSBqdXN0IHBvd2VyZWQgdXAgdGhlbiBtb3ZlIHRvIGFjdGl2ZSBiaWFzICovCisJaWYgKGQtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgZC0+ZGV2X3Bvd2VyKSB7CisJCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChkLCBTTkRfU09DX0JJQVNfT04pOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKGQtPmRldiwgIkZhaWxlZCB0byBhcHBseSBhY3RpdmUgYmlhczogJWRcbiIsCisJCQkJcmV0KTsKKwl9Cit9CiAKIC8qCiAgKiBTY2FuIGVhY2ggZGFwbSB3aWRnZXQgZm9yIGNvbXBsZXRlIGF1ZGlvIHBhdGguCkBAIC05OTAsMTIgKzExMTgsMTIgQEAKICAqLwogc3RhdGljIGludCBkYXBtX3Bvd2VyX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNvZGVjLT5jYXJkOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBkYXBtLT5jYXJkOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwogCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZDsKIAlMSVNUX0hFQUQodXBfbGlzdCk7CiAJTElTVF9IRUFEKGRvd25fbGlzdCk7Ci0JaW50IHJldCA9IDA7CisJTElTVF9IRUFEKGFzeW5jX2RvbWFpbik7CiAJaW50IHBvd2VyOwogCiAJdHJhY2Vfc25kX3NvY19kYXBtX3N0YXJ0KGNhcmQpOwpAQCAtMTAxMCwxMCArMTEzOCwxMCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNhcmQtPndpZGdldHMsIGxpc3QpIHsKIAkJc3dpdGNoICh3LT5pZCkgewogCQljYXNlIHNuZF9zb2NfZGFwbV9wcmU6Ci0JCQlkYXBtX3NlcV9pbnNlcnQodywgJmRvd25fbGlzdCwgZGFwbV9kb3duX3NlcSk7CisJCQlkYXBtX3NlcV9pbnNlcnQodywgJmRvd25fbGlzdCwgZmFsc2UpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX3Bvc3Q6Ci0JCQlkYXBtX3NlcV9pbnNlcnQodywgJnVwX2xpc3QsIGRhcG1fdXBfc2VxKTsKKwkJCWRhcG1fc2VxX2luc2VydCh3LCAmdXBfbGlzdCwgdHJ1ZSk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMTAzMyw5ICsxMTYxLDkgQEAKIAkJCXRyYWNlX3NuZF9zb2NfZGFwbV93aWRnZXRfcG93ZXIodywgcG93ZXIpOwogCiAJCQlpZiAocG93ZXIpCi0JCQkJZGFwbV9zZXFfaW5zZXJ0KHcsICZ1cF9saXN0LCBkYXBtX3VwX3NlcSk7CisJCQkJZGFwbV9zZXFfaW5zZXJ0KHcsICZ1cF9saXN0LCB0cnVlKTsKIAkJCWVsc2UKLQkJCQlkYXBtX3NlcV9pbnNlcnQodywgJmRvd25fbGlzdCwgZGFwbV9kb3duX3NlcSk7CisJCQkJZGFwbV9zZXFfaW5zZXJ0KHcsICZkb3duX2xpc3QsIGZhbHNlKTsKIAogCQkJdy0+cG93ZXIgPSBwb3dlcjsKIAkJCWJyZWFrOwpAQCAtMTA3Myw2NSArMTIwMSwyNSBAQAogCQl9CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmZGFwbS0+Y2FyZC0+ZGFwbV9saXN0LCBsaXN0KSB7Ci0JCWlmIChkLT5kZXZfcG93ZXIgJiYgZC0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7Ci0JCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoY2FyZCwgZCwKLQkJCQkJCQkgIFNORF9TT0NfQklBU19TVEFOREJZKTsKLQkJCWlmIChyZXQgIT0gMCkKLQkJCQlkZXZfZXJyKGQtPmRldiwKLQkJCQkJIkZhaWxlZCB0byB0dXJuIG9uIGJpYXM6ICVkXG4iLCByZXQpOwotCQl9Ci0KLQkJLyogSWYgd2UncmUgY2hhbmdpbmcgdG8gYWxsIG9uIG9yIGFsbCBvZmYgdGhlbiBwcmVwYXJlICovCi0JCWlmICgoZC0+ZGV2X3Bvd2VyICYmIGQtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkpIHx8Ci0JCSAgICAoIWQtPmRldl9wb3dlciAmJiBkLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PTikpIHsKLQkJCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChjYXJkLCBkLAotCQkJCQkJCSAgU05EX1NPQ19CSUFTX1BSRVBBUkUpOwotCQkJaWYgKHJldCAhPSAwKQotCQkJCWRldl9lcnIoZC0+ZGV2LAotCQkJCQkiRmFpbGVkIHRvIHByZXBhcmUgYmlhczogJWRcbiIsIHJldCk7Ci0JCX0KLQl9CisJLyogUnVuIGFsbCB0aGUgYmlhcyBjaGFuZ2VzIGluIHBhcmFsbGVsICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmZGFwbS0+Y2FyZC0+ZGFwbV9saXN0LCBsaXN0KQorCQlhc3luY19zY2hlZHVsZV9kb21haW4oZGFwbV9wcmVfc2VxdWVuY2VfYXN5bmMsIGQsCisJCQkJCSZhc3luY19kb21haW4pOworCWFzeW5jX3N5bmNocm9uaXplX2Z1bGxfZG9tYWluKCZhc3luY19kb21haW4pOwogCiAJLyogUG93ZXIgZG93biB3aWRnZXRzIGZpcnN0OyB0cnkgdG8gYXZvaWQgYW1wbGlmeWluZyBwb3BzLiAqLwotCWRhcG1fc2VxX3J1bihkYXBtLCAmZG93bl9saXN0LCBldmVudCwgZGFwbV9kb3duX3NlcSk7CisJZGFwbV9zZXFfcnVuKGRhcG0sICZkb3duX2xpc3QsIGV2ZW50LCBmYWxzZSk7CiAKIAlkYXBtX3dpZGdldF91cGRhdGUoZGFwbSk7CiAKIAkvKiBOb3cgcG93ZXIgdXAuICovCi0JZGFwbV9zZXFfcnVuKGRhcG0sICZ1cF9saXN0LCBldmVudCwgZGFwbV91cF9zZXEpOworCWRhcG1fc2VxX3J1bihkYXBtLCAmdXBfbGlzdCwgZXZlbnQsIHRydWUpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmZGFwbS0+Y2FyZC0+ZGFwbV9saXN0LCBsaXN0KSB7Ci0JCS8qIElmIHdlIGp1c3QgcG93ZXJlZCB0aGUgbGFzdCB0aGluZyBvZmYgZHJvcCB0byBzdGFuZGJ5IGJpYXMgKi8KLQkJaWYgKGQtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgIWQtPmRldl9wb3dlcikgewotCQkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsIGQsCi0JCQkJCQkJICBTTkRfU09DX0JJQVNfU1RBTkRCWSk7Ci0JCQlpZiAocmV0ICE9IDApCi0JCQkJZGV2X2VycihkLT5kZXYsCi0JCQkJCSJGYWlsZWQgdG8gYXBwbHkgc3RhbmRieSBiaWFzOiAlZFxuIiwKLQkJCQkJcmV0KTsKLQkJfQotCi0JCS8qIElmIHdlJ3JlIGluIHN0YW5kYnkgYW5kIGNhbiBzdXBwb3J0IGJpYXMgb2ZmIHRoZW4gZG8gdGhhdCAqLwotCQlpZiAoZC0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSAmJgotCQkgICAgZC0+aWRsZV9iaWFzX29mZikgewotCQkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsIGQsCi0JCQkJCQkJICBTTkRfU09DX0JJQVNfT0ZGKTsKLQkJCWlmIChyZXQgIT0gMCkKLQkJCQlkZXZfZXJyKGQtPmRldiwKLQkJCQkJIkZhaWxlZCB0byB0dXJuIG9mZiBiaWFzOiAlZFxuIiwgcmV0KTsKLQkJfQotCi0JCS8qIElmIHdlIGp1c3QgcG93ZXJlZCB1cCB0aGVuIG1vdmUgdG8gYWN0aXZlIGJpYXMgKi8KLQkJaWYgKGQtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgZC0+ZGV2X3Bvd2VyKSB7Ci0JCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoY2FyZCwgZCwKLQkJCQkJCQkgIFNORF9TT0NfQklBU19PTik7Ci0JCQlpZiAocmV0ICE9IDApCi0JCQkJZGV2X2VycihkLT5kZXYsCi0JCQkJCSJGYWlsZWQgdG8gYXBwbHkgYWN0aXZlIGJpYXM6ICVkXG4iLAotCQkJCQlyZXQpOwotCQl9Ci0JfQorCS8qIFJ1biBhbGwgdGhlIGJpYXMgY2hhbmdlcyBpbiBwYXJhbGxlbCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJmRhcG0tPmNhcmQtPmRhcG1fbGlzdCwgbGlzdCkKKwkJYXN5bmNfc2NoZWR1bGVfZG9tYWluKGRhcG1fcG9zdF9zZXF1ZW5jZV9hc3luYywgZCwKKwkJCQkJJmFzeW5jX2RvbWFpbik7CisJYXN5bmNfc3luY2hyb25pemVfZnVsbF9kb21haW4oJmFzeW5jX2RvbWFpbik7CiAKIAlwb3BfZGJnKGRhcG0tPmRldiwgY2FyZC0+cG9wX3RpbWUsCiAJCSJEQVBNIHNlcXVlbmNpbmcgZmluaXNoZWQsIHdhaXRpbmcgJWRtc1xuIiwgY2FyZC0+cG9wX3RpbWUpOwpAQCAtMTE4OSw3ICsxMjc3LDcgQEAKIAogCQlpZiAocC0+Y29ubmVjdCkKIAkJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKLQkJCQkJIiBpbiAgJXMgJXNcbiIsCisJCQkJCSIgaW4gIFwiJXNcIiBcIiVzXCJcbiIsCiAJCQkJCXAtPm5hbWUgPyBwLT5uYW1lIDogInN0YXRpYyIsCiAJCQkJCXAtPnNvdXJjZS0+bmFtZSk7CiAJfQpAQCAtMTE5OSw3ICsxMjg3LDcgQEAKIAogCQlpZiAocC0+Y29ubmVjdCkKIAkJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKLQkJCQkJIiBvdXQgJXMgJXNcbiIsCisJCQkJCSIgb3V0IFwiJXNcIiBcIiVzXCJcbiIsCiAJCQkJCXAtPm5hbWUgPyBwLT5uYW1lIDogInN0YXRpYyIsCiAJCQkJCXAtPnNpbmstPm5hbWUpOwogCX0KQEAgLTE0NjQsNyArMTU1Miw3IEBACiAJY2hhciBwcmVmaXhlZF9zb3VyY2VbODBdOwogCWludCByZXQgPSAwOwogCi0JaWYgKGRhcG0tPmNvZGVjLT5uYW1lX3ByZWZpeCkgeworCWlmIChkYXBtLT5jb2RlYyAmJiBkYXBtLT5jb2RlYy0+bmFtZV9wcmVmaXgpIHsKIAkJc25wcmludGYocHJlZml4ZWRfc2luaywgc2l6ZW9mKHByZWZpeGVkX3NpbmspLCAiJXMgJXMiLAogCQkJIGRhcG0tPmNvZGVjLT5uYW1lX3ByZWZpeCwgcm91dGUtPnNpbmspOwogCQlzaW5rID0gcHJlZml4ZWRfc2luazsKQEAgLTIxMTQsMTQgKzIyMDIsMTQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAluYW1lX2xlbiA9IHN0cmxlbih3aWRnZXQtPm5hbWUpICsgMTsKLQlpZiAoZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4KQorCWlmIChkYXBtLT5jb2RlYyAmJiBkYXBtLT5jb2RlYy0+bmFtZV9wcmVmaXgpCiAJCW5hbWVfbGVuICs9IDEgKyBzdHJsZW4oZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4KTsKIAl3LT5uYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHctPm5hbWUgPT0gTlVMTCkgewogCQlrZnJlZSh3KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWlmIChkYXBtLT5jb2RlYy0+bmFtZV9wcmVmaXgpCisJaWYgKGRhcG0tPmNvZGVjICYmIGRhcG0tPmNvZGVjLT5uYW1lX3ByZWZpeCkKIAkJc25wcmludGYody0+bmFtZSwgbmFtZV9sZW4sICIlcyAlcyIsCiAJCQlkYXBtLT5jb2RlYy0+bmFtZV9wcmVmaXgsIHdpZGdldC0+bmFtZSk7CiAJZWxzZQpAQCAtMjIyNiw3ICsyMzE0LDYgQEAKIAltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KTsKIAogLyoqCiAgKiBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbiAtIGVuYWJsZSBwaW4uCkBAIC0yMzkzLDcgKzI0ODAsNyBAQAogCQlpZiAody0+ZGFwbSAhPSBkYXBtKQogCQkJY29udGludWU7CiAJCWlmICh3LT5wb3dlcikgewotCQkJZGFwbV9zZXFfaW5zZXJ0KHcsICZkb3duX2xpc3QsIGRhcG1fZG93bl9zZXEpOworCQkJZGFwbV9zZXFfaW5zZXJ0KHcsICZkb3duX2xpc3QsIGZhbHNlKTsKIAkJCXctPnBvd2VyID0gMDsKIAkJCXBvd2VyZG93biA9IDE7CiAJCX0KQEAgLTI0MDMsOSArMjQ5MCw5IEBACiAJICogc3RhbmRieS4KIAkgKi8KIAlpZiAocG93ZXJkb3duKSB7Ci0JCXNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChOVUxMLCBkYXBtLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7Ci0JCWRhcG1fc2VxX3J1bihkYXBtLCAmZG93bl9saXN0LCAwLCBkYXBtX2Rvd25fc2VxKTsKLQkJc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKE5VTEwsIGRhcG0sIFNORF9TT0NfQklBU19TVEFOREJZKTsKKwkJc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGRhcG0sIFNORF9TT0NfQklBU19QUkVQQVJFKTsKKwkJZGFwbV9zZXFfcnVuKGRhcG0sICZkb3duX2xpc3QsIDAsIGZhbHNlKTsKKwkJc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGRhcG0sIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAl9CiB9CiAKQEAgLTI0MTgsNyArMjUwNSw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmY2FyZC0+Y29kZWNfZGV2X2xpc3QsIGxpc3QpIHsKIAkJc29jX2RhcG1fc2h1dGRvd25fY29kZWMoJmNvZGVjLT5kYXBtKTsKLQkJc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsICZjb2RlYy0+ZGFwbSwgU05EX1NPQ19CSUFTX09GRik7CisJCXNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbCgmY29kZWMtPmRhcG0sIFNORF9TT0NfQklBU19PRkYpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1qYWNrLmMgYi9zb3VuZC9zb2Mvc29jLWphY2suYwppbmRleCBhYzVhNWJjLi5mY2FiODBiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWphY2suYworKysgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpAQCAtMzcsNiArMzcsNyBAQAogewogCWphY2stPmNvZGVjID0gY29kZWM7CiAJSU5JVF9MSVNUX0hFQUQoJmphY2stPnBpbnMpOworCUlOSVRfTElTVF9IRUFEKCZqYWNrLT5qYWNrX3pvbmVzKTsKIAlCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQoJmphY2stPm5vdGlmaWVyKTsKIAogCXJldHVybiBzbmRfamFja19uZXcoY29kZWMtPmNhcmQtPnNuZF9jYXJkLCBpZCwgdHlwZSwgJmphY2stPmphY2spOwpAQCAtMTAwLDcgKzEwMSw3IEBACiAJfQogCiAJLyogUmVwb3J0IGJlZm9yZSB0aGUgREFQTSBzeW5jIHRvIGhlbHAgdXNlcnMgdXBkYXRpbmcgbWljYmlhcyBzdGF0dXMgKi8KLQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZqYWNrLT5ub3RpZmllciwgc3RhdHVzLCBOVUxMKTsKKwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZqYWNrLT5ub3RpZmllciwgc3RhdHVzLCBqYWNrKTsKIAogCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCkBAIC0xMTIsNiArMTEzLDUxIEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfcmVwb3J0KTsKIAogLyoqCisgKiBzbmRfc29jX2phY2tfYWRkX3pvbmVzIC0gQXNzb2NpYXRlIHZvbHRhZ2Ugem9uZXMgd2l0aCBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogTnVtYmVyIG9mIHpvbmVzCisgKiBAem9uZTogIEFycmF5IG9mIHpvbmVzCisgKgorICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQgdGhlIHpvbmVzIHNwZWNpZmllZCBpbiB0aGUKKyAqIGFycmF5IHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBqYWNrLgorICovCitpbnQgc25kX3NvY19qYWNrX2FkZF96b25lcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2tfem9uZSAqem9uZXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlJTklUX0xJU1RfSEVBRCgmem9uZXNbaV0ubGlzdCk7CisJCWxpc3RfYWRkKCYoem9uZXNbaV0ubGlzdCksICZqYWNrLT5qYWNrX3pvbmVzKTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfYWRkX3pvbmVzKTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfZ2V0X3R5cGUgLSBCYXNlZCBvbiB0aGUgbWljIGJpYXMgdmFsdWUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogdGhlIHR5cGUgb2YgamFjayBmcm9tIHRoZSB6b25lcyBkZWxjYXJlZCBpbiB0aGUgamFjayB0eXBlCisgKgorICogQG1pY2JpYXNfdm9sdGFnZTogIG1pYyBiaWFzIHZvbHRhZ2UgYXQgYWRjIGNoYW5uZWwgd2hlbiBqYWNrIGlzIHBsdWdnZWQgaW4KKyAqCisgKiBCYXNlZCBvbiB0aGUgbWljIGJpYXMgdmFsdWUgcGFzc2VkLCB0aGlzIGZ1bmN0aW9uIGhlbHBzIGlkZW50aWZ5CisgKiB0aGUgdHlwZSBvZiBqYWNrIGZyb20gdGhlIGFscmVhZHkgZGVsY2FyZWQgamFjayB6b25lcworICovCitpbnQgc25kX3NvY19qYWNrX2dldF90eXBlKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBtaWNiaWFzX3ZvbHRhZ2UpCit7CisJc3RydWN0IHNuZF9zb2NfamFja196b25lICp6b25lOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh6b25lLCAmamFjay0+amFja196b25lcywgbGlzdCkgeworCQlpZiAobWljYmlhc192b2x0YWdlID49IHpvbmUtPm1pbl9tdiAmJgorCQkJbWljYmlhc192b2x0YWdlIDwgem9uZS0+bWF4X212KQorCQkJCXJldHVybiB6b25lLT5qYWNrX3R5cGU7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX2dldF90eXBlKTsKKworLyoqCiAgKiBzbmRfc29jX2phY2tfYWRkX3BpbnMgLSBBc3NvY2lhdGUgREFQTSBwaW5zIHdpdGggYW4gQVNvQyBqYWNrCiAgKgogICogQGphY2s6ICBBU29DIGphY2sKQEAgLTE5NCw3ICsyNDAsNyBAQAogCWludCBlbmFibGU7CiAJaW50IHJlcG9ydDsKIAotCWVuYWJsZSA9IGdwaW9fZ2V0X3ZhbHVlKGdwaW8tPmdwaW8pOworCWVuYWJsZSA9IGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGdwaW8tPmdwaW8pOwogCWlmIChncGlvLT5pbnZlcnQpCiAJCWVuYWJsZSA9ICFlbmFibGU7CiAKQEAgLTI4NCw2ICszMzAsMTQgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCisJCWlmIChncGlvc1tpXS53YWtlKSB7CisJCQlyZXQgPSBzZXRfaXJxX3dha2UoZ3Bpb190b19pcnEoZ3Bpb3NbaV0uZ3BpbyksIDEpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgIkZhaWxlZCB0byBtYXJrIEdQSU8gJWQgYXMgd2FrZSBzb3VyY2U6ICVkXG4iLAorCQkJCQlncGlvc1tpXS5ncGlvLCByZXQpOworCQl9CisKICNpZmRlZiBDT05GSUdfR1BJT19TWVNGUwogCQkvKiBFeHBvc2UgR1BJTyB2YWx1ZSBvdmVyIHN5c2ZzIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzICovCiAJCWdwaW9fZXhwb3J0KGdwaW9zW2ldLmdwaW8sIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtdXRpbHMuYyBiL3NvdW5kL3NvYy9zb2MtdXRpbHMuYwppbmRleCAxZDA3YjkzLi4zZjQ1ZTZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLXV0aWxzLmMKKysrIGIvc291bmQvc29jL3NvYy11dGlscy5jCkBAIC0yOCwyNiArMjgsOSBAQAogewogCWludCBzYW1wbGVfc2l6ZTsKIAotCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOgotCQlzYW1wbGVfc2l6ZSA9IDE2OwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNCRToKLQkJc2FtcGxlX3NpemUgPSAyMDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0JFOgotCQlzYW1wbGVfc2l6ZSA9IDI0OwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfQkU6Ci0JCXNhbXBsZV9zaXplID0gMzI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQorCXNhbXBsZV9zaXplID0gc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwlpZiAoc2FtcGxlX3NpemUgPCAwKQorCQlyZXR1cm4gc2FtcGxlX3NpemU7CiAKIAlyZXR1cm4gc25kX3NvY19jYWxjX2ZyYW1lX3NpemUoc2FtcGxlX3NpemUsIHBhcmFtc19jaGFubmVscyhwYXJhbXMpLAogCQkJCSAgICAgICAxKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS9LY29uZmlnIGIvc291bmQvc29jL3RlZ3JhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiNTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy90ZWdyYS9LY29uZmlnCkBAIC0wLDAgKzEsMjYgQEAKK2NvbmZpZyBTTkRfVEVHUkFfU09DCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgdGhlIFRlZ3JhIFN5c3RlbS1vbi1DaGlwIgorCWRlcGVuZHMgb24gQVJDSF9URUdSQSAmJiBURUdSQV9TWVNURU1fRE1BCisJZGVmYXVsdCBtCisJaGVscAorCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBUZWdyYS4KKworY29uZmlnIFNORF9URUdSQV9TT0NfSTJTCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFNORF9URUdSQV9TT0MKKwlkZWZhdWx0IG0KKwloZWxwCisJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8gdGhlCisJICBUZWdyYSBJMlMgaW50ZXJmYWNlLiBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBpbmRpdmlkdWFsCisJICBtYWNoaW5lIGRyaXZlcnMgdG8gc3VwcG9ydCBiZWxvdy4KKworY29uZmlnIFNORF9URUdSQV9TT0NfSEFSTU9OWQorCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgVGVncmEgSGFybW9ueSByZWZlcmVuY2UgYm9hcmQiCisJZGVwZW5kcyBvbiBTTkRfVEVHUkFfU09DICYmIE1BQ0hfSEFSTU9OWSAmJiBJMkMKKwlkZWZhdWx0IG0KKwlzZWxlY3QgU05EX1RFR1JBX1NPQ19JMlMKKwlzZWxlY3QgU05EX1NPQ19XTTg5MDMKKwloZWxwCisJICBTYXkgWSBvciBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKKwkgIFRlZ3JhIEhhcm1vbnkgcmVmZXJlbmNlIGJvYXJkLgorCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvdGVncmEvTWFrZWZpbGUgYi9zb3VuZC9zb2MvdGVncmEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxODNkMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy90ZWdyYS9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACisjIFRlZ3JhIHBsYXRmb3JtIFN1cHBvcnQKK3NuZC1zb2MtdGVncmEtZGFzLW9ianMgOj0gdGVncmFfZGFzLm8KK3NuZC1zb2MtdGVncmEtcGNtLW9ianMgOj0gdGVncmFfcGNtLm8KK3NuZC1zb2MtdGVncmEtaTJzLW9ianMgOj0gdGVncmFfaTJzLm8KK3NuZC1zb2MtdGVncmEtdXRpbHMtb2JqcyArPSB0ZWdyYV9hc29jX3V0aWxzLm8KKworb2JqLSQoQ09ORklHX1NORF9URUdSQV9TT0MpICs9IHNuZC1zb2MtdGVncmEtdXRpbHMubworb2JqLSQoQ09ORklHX1NORF9URUdSQV9TT0MpICs9IHNuZC1zb2MtdGVncmEtZGFzLm8KK29iai0kKENPTkZJR19TTkRfVEVHUkFfU09DKSArPSBzbmQtc29jLXRlZ3JhLXBjbS5vCitvYmotJChDT05GSUdfU05EX1RFR1JBX1NPQ19JMlMpICs9IHNuZC1zb2MtdGVncmEtaTJzLm8KKworIyBUZWdyYSBtYWNoaW5lIFN1cHBvcnQKK3NuZC1zb2MtdGVncmEtaGFybW9ueS1vYmpzIDo9IGhhcm1vbnkubworCitvYmotJChDT05GSUdfU05EX1RFR1JBX1NPQ19IQVJNT05ZKSArPSBzbmQtc29jLXRlZ3JhLWhhcm1vbnkubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL2hhcm1vbnkuYyBiL3NvdW5kL3NvYy90ZWdyYS9oYXJtb255LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU4NTk1NwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy90ZWdyYS9oYXJtb255LmMKQEAgLTAsMCArMSwzOTMgQEAKKy8qCisgKiBoYXJtb255LmMgLSBIYXJtb255IG1hY2hpbmUgQVNvQyBkcml2ZXIKKyAqCisgKiBBdXRob3I6IFN0ZXBoZW4gV2FycmVuIDxzd2FycmVuQG52aWRpYS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSAtIE5WSURJQSwgSW5jLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgY29weXJpZ2h0L2J5OgorICoKKyAqIChjKSAyMDA5LCAyMDEwIE52aWRpYSBHcmFwaGljcyBQdnQuIEx0ZC4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBHcmFlbWUgR3JlZ29yeQorICogICAgICAgICBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFybW9ueV9hdWRpby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd204OTAzLmgiCisKKyNpbmNsdWRlICJ0ZWdyYV9kYXMuaCIKKyNpbmNsdWRlICJ0ZWdyYV9pMnMuaCIKKyNpbmNsdWRlICJ0ZWdyYV9wY20uaCIKKyNpbmNsdWRlICJ0ZWdyYV9hc29jX3V0aWxzLmgiCisKKyNkZWZpbmUgRFJWX05BTUUgInRlZ3JhLXNuZC1oYXJtb255IgorCisjZGVmaW5lIEdQSU9fU1BLUl9FTiAgICBCSVQoMCkKKyNkZWZpbmUgR1BJT19JTlRfTUlDX0VOIEJJVCgxKQorI2RlZmluZSBHUElPX0VYVF9NSUNfRU4gQklUKDIpCisKK3N0cnVjdCB0ZWdyYV9oYXJtb255IHsKKwlzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhIHV0aWxfZGF0YTsKKwlzdHJ1Y3QgaGFybW9ueV9hdWRpb19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgZ3Bpb19yZXF1ZXN0ZWQ7Cit9OworCitzdGF0aWMgaW50IGhhcm1vbnlfYXNvY19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZDsKKwlzdHJ1Y3QgdGVncmFfaGFybW9ueSAqaGFybW9ueSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKwlpbnQgc3JhdGUsIG1jbGssIG1jbGtfY2hhbmdlOworCWludCBlcnI7CisKKwlzcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJc3dpdGNoIChzcmF0ZSkgeworCWNhc2UgNjQwMDA6CisJY2FzZSA4ODIwMDoKKwljYXNlIDk2MDAwOgorCQltY2xrID0gMTI4ICogc3JhdGU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1jbGsgPSAyNTYgKiBzcmF0ZTsKKwkJYnJlYWs7CisJfQorCS8qIEZJWE1FOiBDb2RlYyBvbmx5IHJlcXVpcmVzID49IDNNSHogaWYgT1NSPT0wICovCisJd2hpbGUgKG1jbGsgPCA2MDAwMDAwKQorCQltY2xrICo9IDI7CisKKwllcnIgPSB0ZWdyYV9hc29jX3V0aWxzX3NldF9yYXRlKCZoYXJtb255LT51dGlsX2RhdGEsIHNyYXRlLCBtY2xrLAorCQkJCQkmbWNsa19jaGFuZ2UpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiQ2FuJ3QgY29uZmlndXJlIGNsb2Nrc1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksCisJCQkJCVNORF9TT0NfREFJRk1UX0kyUyB8CisJCQkJCVNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkJU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsICJjb2RlY19kYWkgZm10IG5vdCBzZXRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKKwkJCQkJU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgImNwdV9kYWkgZm10IG5vdCBzZXRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChtY2xrX2NoYW5nZSkgeworCQllcnIgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgbWNsaywKKwkJCQkJICAgICBTTkRfU09DX0NMT0NLX0lOKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY29kZWNfZGFpIGNsb2NrIG5vdCBzZXRcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGhhcm1vbnlfYXNvY19vcHMgPSB7CisJLmh3X3BhcmFtcyA9IGhhcm1vbnlfYXNvY19od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBoYXJtb255X2hwX2phY2s7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiBoYXJtb255X2hwX2phY2tfcGluc1tdID0geworCXsKKwkJLnBpbiA9ICJIZWFkcGhvbmUgSmFjayIsCisJCS5tYXNrID0gU05EX0pBQ0tfSEVBRFBIT05FLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19ncGlvIGhhcm1vbnlfaHBfamFja19ncGlvc1tdID0geworCXsKKwkJLm5hbWUgPSAiaGVhZHBob25lIGRldGVjdCIsCisJCS5yZXBvcnQgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJCS5kZWJvdW5jZV90aW1lID0gMTUwLAorCQkuaW52ZXJ0ID0gMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBoYXJtb255X21pY19qYWNrOworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19waW4gaGFybW9ueV9taWNfamFja19waW5zW10gPSB7CisJeworCQkucGluID0gIk1pYyBKYWNrIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19NSUNST1BIT05FLAorCX0sCit9OworCitzdGF0aWMgaW50IGhhcm1vbnlfZXZlbnRfaW50X3NwayhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZDsKKwlzdHJ1Y3QgdGVncmFfaGFybW9ueSAqaGFybW9ueSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKwlzdHJ1Y3QgaGFybW9ueV9hdWRpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGhhcm1vbnktPnBkYXRhOworCisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9fc3Brcl9lbiwKKwkJCQlTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgaGFybW9ueV9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fU1BLKCJJbnQgU3BrIiwgaGFybW9ueV9ldmVudF9pbnRfc3BrKSwKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIEphY2siLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGhhcm1vbnlfYXVkaW9fbWFwW10gPSB7CisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVFIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQT1VUTCJ9LAorCXsiSW50IFNwayIsIE5VTEwsICJST1AifSwKKwl7IkludCBTcGsiLCBOVUxMLCAiUk9OIn0sCisJeyJJbnQgU3BrIiwgTlVMTCwgIkxPUCJ9LAorCXsiSW50IFNwayIsIE5VTEwsICJMT04ifSwKKwl7Ik1pYyBCaWFzIiwgTlVMTCwgIk1pYyBKYWNrIn0sCisJeyJJTjFMIiwgTlVMTCwgIk1pYyBCaWFzIn0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaGFybW9ueV9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkludCBTcGsiKSwKK307CisKK3N0YXRpYyBpbnQgaGFybW9ueV9hc29jX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gY29kZWMtPmNhcmQ7CisJc3RydWN0IHRlZ3JhX2hhcm1vbnkgKmhhcm1vbnkgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7CisJc3RydWN0IGhhcm1vbnlfYXVkaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBoYXJtb255LT5wZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX3Nwa3JfZW4sICJzcGtyX2VuIik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbm5vdCBnZXQgc3Brcl9lbiBncGlvXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGFybW9ueS0+Z3Bpb19yZXF1ZXN0ZWQgfD0gR1BJT19TUEtSX0VOOworCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX3Nwa3JfZW4sIDApOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2ludF9taWNfZW4sICJpbnRfbWljX2VuIik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbm5vdCBnZXQgaW50X21pY19lbiBncGlvXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGFybW9ueS0+Z3Bpb19yZXF1ZXN0ZWQgfD0gR1BJT19JTlRfTUlDX0VOOworCisJLyogRGlzYWJsZSBpbnQgbWljOyBlbmFibGUgc2lnbmFsIGlzIGFjdGl2ZS1oaWdoICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2ludF9taWNfZW4sIDApOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2V4dF9taWNfZW4sICJleHRfbWljX2VuIik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbm5vdCBnZXQgZXh0X21pY19lbiBncGlvXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGFybW9ueS0+Z3Bpb19yZXF1ZXN0ZWQgfD0gR1BJT19FWFRfTUlDX0VOOworCisJLyogRW5hYmxlIGV4dCBtaWM7IGVuYWJsZSBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19leHRfbWljX2VuLCAwKTsKKworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBoYXJtb255X2NvbnRyb2xzLAorCQkJCSAgIEFSUkFZX1NJWkUoaGFybW9ueV9jb250cm9scykpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBoYXJtb255X2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRShoYXJtb255X2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaGFybW9ueV9hdWRpb19tYXAsCisJCQkJQVJSQVlfU0laRShoYXJtb255X2F1ZGlvX21hcCkpOworCisJaGFybW9ueV9ocF9qYWNrX2dwaW9zWzBdLmdwaW8gPSBwZGF0YS0+Z3Bpb19ocF9kZXQ7CisJc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRwaG9uZSBKYWNrIiwgU05EX0pBQ0tfSEVBRFBIT05FLAorCQkJICZoYXJtb255X2hwX2phY2spOworCXNuZF9zb2NfamFja19hZGRfcGlucygmaGFybW9ueV9ocF9qYWNrLAorCQkJICAgICAgQVJSQVlfU0laRShoYXJtb255X2hwX2phY2tfcGlucyksCisJCQkgICAgICBoYXJtb255X2hwX2phY2tfcGlucyk7CisJc25kX3NvY19qYWNrX2FkZF9ncGlvcygmaGFybW9ueV9ocF9qYWNrLAorCQkJICAgICAgIEFSUkFZX1NJWkUoaGFybW9ueV9ocF9qYWNrX2dwaW9zKSwKKwkJCSAgICAgICBoYXJtb255X2hwX2phY2tfZ3Bpb3MpOworCisJc25kX3NvY19qYWNrX25ldyhjb2RlYywgIk1pYyBKYWNrIiwgU05EX0pBQ0tfTUlDUk9QSE9ORSwKKwkJCSAmaGFybW9ueV9taWNfamFjayk7CisJc25kX3NvY19qYWNrX2FkZF9waW5zKCZoYXJtb255X21pY19qYWNrLAorCQkJICAgICAgQVJSQVlfU0laRShoYXJtb255X21pY19qYWNrX3BpbnMpLAorCQkJICAgICAgaGFybW9ueV9taWNfamFja19waW5zKTsKKwl3bTg5MDNfbWljX2RldGVjdChjb2RlYywgJmhhcm1vbnlfbWljX2phY2ssIFNORF9KQUNLX01JQ1JPUEhPTkUsIDApOworCisJc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4oZGFwbSwgIk1pYyBCaWFzIik7CisKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjNMIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiSU4zUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkVPVVRMIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVFIiKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBoYXJtb255X3dtODkwM19kYWkgPSB7CisJLm5hbWUgPSAiV004OTAzIiwKKwkuc3RyZWFtX25hbWUgPSAiV004OTAzIFBDTSIsCisJLmNvZGVjX25hbWUgPSAid204OTAzLjAtMDAxYSIsCisJLnBsYXRmb3JtX25hbWUgPSAidGVncmEtcGNtLWF1ZGlvIiwKKwkuY3B1X2RhaV9uYW1lID0gInRlZ3JhLWkycy4wIiwKKwkuY29kZWNfZGFpX25hbWUgPSAid204OTAzLWhpZmkiLAorCS5pbml0ID0gaGFybW9ueV9hc29jX2luaXQsCisJLm9wcyA9ICZoYXJtb255X2Fzb2Nfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19oYXJtb255ID0geworCS5uYW1lID0gInRlZ3JhLWhhcm1vbnkiLAorCS5kYWlfbGluayA9ICZoYXJtb255X3dtODkwM19kYWksCisJLm51bV9saW5rcyA9IDEsCit9OworCitzdGF0aWMgX19kZXZpbml0IGludCB0ZWdyYV9zbmRfaGFybW9ueV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSAmc25kX3NvY19oYXJtb255OworCXN0cnVjdCB0ZWdyYV9oYXJtb255ICpoYXJtb255OworCXN0cnVjdCBoYXJtb255X2F1ZGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfaGFybW9ueSgpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vdCBydW5uaW5nIG9uIFRlZ3JhIEhhcm1vbnkhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwloYXJtb255ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRlZ3JhX2hhcm1vbnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhhcm1vbnkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgdGVncmFfaGFybW9ueVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhhcm1vbnktPnBkYXRhID0gcGRhdGE7CisKKwlyZXQgPSB0ZWdyYV9hc29jX3V0aWxzX2luaXQoJmhhcm1vbnktPnV0aWxfZGF0YSwgJnBkZXYtPmRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9oYXJtb255OworCisJY2FyZC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgaGFybW9ueSk7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoY2FyZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzbmRfc29jX3JlZ2lzdGVyX2NhcmQgZmFpbGVkICglZClcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycl9jbGVhcl9kcnZkYXRhOworCX0KKworCXJldHVybiAwOworCitlcnJfY2xlYXJfZHJ2ZGF0YToKKwlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJY2FyZC0+ZGV2ID0gTlVMTDsKKwl0ZWdyYV9hc29jX3V0aWxzX2ZpbmkoJmhhcm1vbnktPnV0aWxfZGF0YSk7CitlcnJfZnJlZV9oYXJtb255OgorCWtmcmVlKGhhcm1vbnkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRlZ3JhX3NuZF9oYXJtb255X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdGVncmFfaGFybW9ueSAqaGFybW9ueSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKwlzdHJ1Y3QgaGFybW9ueV9hdWRpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGhhcm1vbnktPnBkYXRhOworCisJc25kX3NvY191bnJlZ2lzdGVyX2NhcmQoY2FyZCk7CisKKwlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJY2FyZC0+ZGV2ID0gTlVMTDsKKworCXRlZ3JhX2Fzb2NfdXRpbHNfZmluaSgmaGFybW9ueS0+dXRpbF9kYXRhKTsKKworCWlmIChoYXJtb255LT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fRVhUX01JQ19FTikKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX2V4dF9taWNfZW4pOworCWlmIChoYXJtb255LT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fSU5UX01JQ19FTikKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX2ludF9taWNfZW4pOworCWlmIChoYXJtb255LT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fU1BLUl9FTikKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX3Nwa3JfZW4pOworCisJa2ZyZWUoaGFybW9ueSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGVncmFfc25kX2hhcm1vbnlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gdGVncmFfc25kX2hhcm1vbnlfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRlZ3JhX3NuZF9oYXJtb255X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbmRfdGVncmFfaGFybW9ueV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGVncmFfc25kX2hhcm1vbnlfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHNuZF90ZWdyYV9oYXJtb255X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX3RlZ3JhX2hhcm1vbnlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9zbmRfaGFybW9ueV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc25kX3RlZ3JhX2hhcm1vbnlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gV2FycmVuIDxzd2FycmVuQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhhcm1vbnkgbWFjaGluZSBBU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9hc29jX3V0aWxzLmMgYi9zb3VuZC9zb2MvdGVncmEvdGVncmFfYXNvY191dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZjBhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvdGVncmEvdGVncmFfYXNvY191dGlscy5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogdGVncmFfYXNvY191dGlscy5jIC0gSGFybW9ueSBtYWNoaW5lIEFTb0MgZHJpdmVyCisgKgorICogQXV0aG9yOiBTdGVwaGVuIFdhcnJlbiA8c3dhcnJlbkBudmlkaWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gTlZJRElBLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJ0ZWdyYV9hc29jX3V0aWxzLmgiCisKK2ludCB0ZWdyYV9hc29jX3V0aWxzX3NldF9yYXRlKHN0cnVjdCB0ZWdyYV9hc29jX3V0aWxzX2RhdGEgKmRhdGEsIGludCBzcmF0ZSwKKwkJCSAgICAgIGludCBtY2xrLCBpbnQgKm1jbGtfY2hhbmdlKQoreworCWludCBuZXdfYmFzZWNsb2NrOworCWludCBlcnI7CisKKwlzd2l0Y2ggKHNyYXRlKSB7CisJY2FzZSAxMTAyNToKKwljYXNlIDIyMDUwOgorCWNhc2UgNDQxMDA6CisJY2FzZSA4ODIwMDoKKwkJbmV3X2Jhc2VjbG9jayA9IDU2NDQ4MDAwOworCQlicmVhazsKKwljYXNlIDgwMDA6CisJY2FzZSAxNjAwMDoKKwljYXNlIDMyMDAwOgorCWNhc2UgNDgwMDA6CisJY2FzZSA2NDAwMDoKKwljYXNlIDk2MDAwOgorCQluZXdfYmFzZWNsb2NrID0gNzM3MjgwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSptY2xrX2NoYW5nZSA9ICgobmV3X2Jhc2VjbG9jayAhPSBkYXRhLT5zZXRfYmFzZWNsb2NrKSB8fAorCQkJKG1jbGsgIT0gZGF0YS0+c2V0X21jbGspKTsKKwlpZiAoISptY2xrX2NoYW5nZSkKKwkgICAgcmV0dXJuIDA7CisKKwlkYXRhLT5zZXRfYmFzZWNsb2NrID0gMDsKKwlkYXRhLT5zZXRfbWNsayA9IDA7CisKKwljbGtfZGlzYWJsZShkYXRhLT5jbGtfY2RldjEpOworCWNsa19kaXNhYmxlKGRhdGEtPmNsa19wbGxfYV9vdXQwKTsKKwljbGtfZGlzYWJsZShkYXRhLT5jbGtfcGxsX2EpOworCisJZXJyID0gY2xrX3NldF9yYXRlKGRhdGEtPmNsa19wbGxfYSwgbmV3X2Jhc2VjbG9jayk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRhdGEtPmRldiwgIkNhbid0IHNldCBwbGxfYSByYXRlOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBjbGtfc2V0X3JhdGUoZGF0YS0+Y2xrX3BsbF9hX291dDAsIG1jbGspOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkYXRhLT5kZXYsICJDYW4ndCBzZXQgcGxsX2Ffb3V0MCByYXRlOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBEb24ndCBzZXQgY2RldjEgcmF0ZTsgaXRzIGxvY2tlZCB0byBwbGxfYV9vdXQwICovCisKKwllcnIgPSBjbGtfZW5hYmxlKGRhdGEtPmNsa19wbGxfYSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRhdGEtPmRldiwgIkNhbid0IGVuYWJsZSBwbGxfYTogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gY2xrX2VuYWJsZShkYXRhLT5jbGtfcGxsX2Ffb3V0MCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRhdGEtPmRldiwgIkNhbid0IGVuYWJsZSBwbGxfYV9vdXQwOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBjbGtfZW5hYmxlKGRhdGEtPmNsa19jZGV2MSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRhdGEtPmRldiwgIkNhbid0IGVuYWJsZSBjZGV2MTogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZGF0YS0+c2V0X2Jhc2VjbG9jayA9IG5ld19iYXNlY2xvY2s7CisJZGF0YS0+c2V0X21jbGsgPSBtY2xrOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWdyYV9hc29jX3V0aWxzX3NldF9yYXRlKTsKKworaW50IHRlZ3JhX2Fzb2NfdXRpbHNfaW5pdChzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhICpkYXRhLAorCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCWRhdGEtPmRldiA9IGRldjsKKworCWRhdGEtPmNsa19wbGxfYSA9IGNsa19nZXRfc3lzKE5VTEwsICJwbGxfYSIpOworCWlmIChJU19FUlIoZGF0YS0+Y2xrX3BsbF9hKSkgeworCQlkZXZfZXJyKGRhdGEtPmRldiwgIkNhbid0IHJldHJpZXZlIGNsayBwbGxfYVxuIik7CisJCXJldCA9IFBUUl9FUlIoZGF0YS0+Y2xrX3BsbF9hKTsKKwkJZ290byBlcnI7CisJfQorCisJZGF0YS0+Y2xrX3BsbF9hX291dDAgPSBjbGtfZ2V0X3N5cyhOVUxMLCAicGxsX2Ffb3V0MCIpOworCWlmIChJU19FUlIoZGF0YS0+Y2xrX3BsbF9hX291dDApKSB7CisJCWRldl9lcnIoZGF0YS0+ZGV2LCAiQ2FuJ3QgcmV0cmlldmUgY2xrIHBsbF9hX291dDBcbiIpOworCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmNsa19wbGxfYV9vdXQwKTsKKwkJZ290byBlcnJfcHV0X3BsbF9hOworCX0KKworCWRhdGEtPmNsa19jZGV2MSA9IGNsa19nZXRfc3lzKE5VTEwsICJjZGV2MSIpOworCWlmIChJU19FUlIoZGF0YS0+Y2xrX2NkZXYxKSkgeworCQlkZXZfZXJyKGRhdGEtPmRldiwgIkNhbid0IHJldHJpZXZlIGNsayBjZGV2MVxuIik7CisJCXJldCA9IFBUUl9FUlIoZGF0YS0+Y2xrX2NkZXYxKTsKKwkJZ290byBlcnJfcHV0X3BsbF9hX291dDA7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9wdXRfcGxsX2Ffb3V0MDoKKwljbGtfcHV0KGRhdGEtPmNsa19wbGxfYV9vdXQwKTsKK2Vycl9wdXRfcGxsX2E6CisJY2xrX3B1dChkYXRhLT5jbGtfcGxsX2EpOworZXJyOgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWdyYV9hc29jX3V0aWxzX2luaXQpOworCit2b2lkIHRlZ3JhX2Fzb2NfdXRpbHNfZmluaShzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhICpkYXRhKQoreworCWNsa19wdXQoZGF0YS0+Y2xrX2NkZXYxKTsKKwljbGtfcHV0KGRhdGEtPmNsa19wbGxfYV9vdXQwKTsKKwljbGtfcHV0KGRhdGEtPmNsa19wbGxfYSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWdyYV9hc29jX3V0aWxzX2ZpbmkpOworCitNT0RVTEVfQVVUSE9SKCJTdGVwaGVuIFdhcnJlbiA8c3dhcnJlbkBudmlkaWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUZWdyYSBBU29DIHV0aWxpdHkgY29kZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2Fzb2NfdXRpbHMuaCBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9hc29jX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiYTdhZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9hc29jX3V0aWxzLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIHRlZ3JhX2Fzb2NfdXRpbHMuaCAtIERlZmluaXRpb25zIGZvciBUZWdyYSBEQVMgZHJpdmVyCisgKgorICogQXV0aG9yOiBTdGVwaGVuIFdhcnJlbiA8c3dhcnJlbkBudmlkaWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gTlZJRElBLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fVEVHUkFfQVNPQ19VVElMU19IX18KKyNkZWZpbmUgX19URUdSQV9BU09DX1VUSUxTX0hfCisKK3N0cnVjdCBjbGs7CitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGNsayAqY2xrX3BsbF9hOworCXN0cnVjdCBjbGsgKmNsa19wbGxfYV9vdXQwOworCXN0cnVjdCBjbGsgKmNsa19jZGV2MTsKKwlpbnQgc2V0X2Jhc2VjbG9jazsKKwlpbnQgc2V0X21jbGs7Cit9OworCitpbnQgdGVncmFfYXNvY191dGlsc19zZXRfcmF0ZShzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhICpkYXRhLCBpbnQgc3JhdGUsCisJCQkgICAgICBpbnQgbWNsaywgaW50ICptY2xrX2NoYW5nZSk7CitpbnQgdGVncmFfYXNvY191dGlsc19pbml0KHN0cnVjdCB0ZWdyYV9hc29jX3V0aWxzX2RhdGEgKmRhdGEsCisJCQkgIHN0cnVjdCBkZXZpY2UgKmRldik7Cit2b2lkIHRlZ3JhX2Fzb2NfdXRpbHNfZmluaShzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhICpkYXRhKTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9kYXMuYyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9kYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjI0ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2Rhcy5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogdGVncmFfZGFzLmMgLSBUZWdyYSBEQVMgZHJpdmVyCisgKgorICogQXV0aG9yOiBTdGVwaGVuIFdhcnJlbiA8c3dhcnJlbkBudmlkaWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gTlZJRElBLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgInRlZ3JhX2Rhcy5oIgorCisjZGVmaW5lIERSVl9OQU1FICJ0ZWdyYS1kYXMiCisKK3N0YXRpYyBzdHJ1Y3QgdGVncmFfZGFzICpkYXM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZWdyYV9kYXNfd3JpdGUodTMyIHJlZywgdTMyIHZhbCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBkYXMtPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB0ZWdyYV9kYXNfcmVhZCh1MzIgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChkYXMtPnJlZ3MgKyByZWcpOworfQorCitpbnQgdGVncmFfZGFzX2Nvbm5lY3RfZGFwX3RvX2RhYyhpbnQgZGFwLCBpbnQgZGFjKQoreworCXUzMiBhZGRyOworCXUzMiByZWc7CisKKwlpZiAoIWRhcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlhZGRyID0gVEVHUkFfREFTX0RBUF9DVFJMX1NFTCArCisJCShkYXAgKiBURUdSQV9EQVNfREFQX0NUUkxfU0VMX1NUUklERSk7CisJcmVnID0gZGFjIDw8IFRFR1JBX0RBU19EQVBfQ1RSTF9TRUxfREFQX0NUUkxfU0VMX1A7CisKKwl0ZWdyYV9kYXNfd3JpdGUoYWRkciwgcmVnKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVncmFfZGFzX2Nvbm5lY3RfZGFwX3RvX2RhYyk7CisKK2ludCB0ZWdyYV9kYXNfY29ubmVjdF9kYXBfdG9fZGFwKGludCBkYXAsIGludCBvdGhlcmRhcCwgaW50IG1hc3RlciwKKwkJCQkJaW50IHNkYXRhMXJ4LCBpbnQgc2RhdGEycngpCit7CisJdTMyIGFkZHI7CisJdTMyIHJlZzsKKworCWlmICghZGFzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWFkZHIgPSBURUdSQV9EQVNfREFQX0NUUkxfU0VMICsKKwkJKGRhcCAqIFRFR1JBX0RBU19EQVBfQ1RSTF9TRUxfU1RSSURFKTsKKwlyZWcgPSBvdGhlcmRhcCA8PCBURUdSQV9EQVNfREFQX0NUUkxfU0VMX0RBUF9DVFJMX1NFTF9QIHwKKwkJISFzZGF0YTJyeCA8PCBURUdSQV9EQVNfREFQX0NUUkxfU0VMX0RBUF9TREFUQTJfVFhfUlhfUCB8CisJCSEhc2RhdGExcnggPDwgVEVHUkFfREFTX0RBUF9DVFJMX1NFTF9EQVBfU0RBVEExX1RYX1JYX1AgfAorCQkhIW1hc3RlciA8PCBURUdSQV9EQVNfREFQX0NUUkxfU0VMX0RBUF9NU19TRUxfUDsKKworCXRlZ3JhX2Rhc193cml0ZShhZGRyLCByZWcpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWdyYV9kYXNfY29ubmVjdF9kYXBfdG9fZGFwKTsKKworaW50IHRlZ3JhX2Rhc19jb25uZWN0X2RhY190b19kYXAoaW50IGRhYywgaW50IGRhcCkKK3sKKwl1MzIgYWRkcjsKKwl1MzIgcmVnOworCisJaWYgKCFkYXMpCisJCXJldHVybiAtRU5PREVWOworCisJYWRkciA9IFRFR1JBX0RBU19EQUNfSU5QVVRfREFUQV9DTEtfU0VMICsKKwkJKGRhYyAqIFRFR1JBX0RBU19EQUNfSU5QVVRfREFUQV9DTEtfU0VMX1NUUklERSk7CisJcmVnID0gZGFwIDw8IFRFR1JBX0RBU19EQUNfSU5QVVRfREFUQV9DTEtfU0VMX0RBQ19DTEtfU0VMX1AgfAorCQlkYXAgPDwgVEVHUkFfREFTX0RBQ19JTlBVVF9EQVRBX0NMS19TRUxfREFDX1NEQVRBMV9TRUxfUCB8CisJCWRhcCA8PCBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTF9EQUNfU0RBVEEyX1NFTF9QOworCisJdGVncmFfZGFzX3dyaXRlKGFkZHIsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRlZ3JhX2Rhc19jb25uZWN0X2RhY190b19kYXApOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgaW50IHRlZ3JhX2Rhc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQoreworCWludCBpOworCXUzMiBhZGRyOworCXUzMiByZWc7CisKKwlmb3IgKGkgPSAwOyBpIDwgVEVHUkFfREFTX0RBUF9DVFJMX1NFTF9DT1VOVDsgaSsrKSB7CisJCWFkZHIgPSBURUdSQV9EQVNfREFQX0NUUkxfU0VMICsKKwkJCShpICogVEVHUkFfREFTX0RBUF9DVFJMX1NFTF9TVFJJREUpOworCQlyZWcgPSB0ZWdyYV9kYXNfcmVhZChhZGRyKTsKKwkJc2VxX3ByaW50ZihzLCAiVEVHUkFfREFTX0RBUF9DVFJMX1NFTFslZF0gPSAlMDh4XG4iLCBpLCByZWcpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTF9DT1VOVDsgaSsrKSB7CisJCWFkZHIgPSBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTCArCisJCQkoaSAqIFRFR1JBX0RBU19EQUNfSU5QVVRfREFUQV9DTEtfU0VMX1NUUklERSk7CisJCXJlZyA9IHRlZ3JhX2Rhc19yZWFkKGFkZHIpOworCQlzZXFfcHJpbnRmKHMsICJURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTFslZF0gPSAlMDh4XG4iLAorCQkJCSBpLCByZWcpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX2Rhc19kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB0ZWdyYV9kYXNfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRlZ3JhX2Rhc19kZWJ1Z19mb3BzID0geworCS5vcGVuICAgID0gdGVncmFfZGFzX2RlYnVnX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgdGVncmFfZGFzX2RlYnVnX2FkZChzdHJ1Y3QgdGVncmFfZGFzICpkYXMpCit7CisJZGFzLT5kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoRFJWX05BTUUsIFNfSVJVR08sCisJCQkJCSBzbmRfc29jX2RlYnVnZnNfcm9vdCwgZGFzLAorCQkJCQkgJnRlZ3JhX2Rhc19kZWJ1Z19mb3BzKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfZGFzX2RlYnVnX3JlbW92ZShzdHJ1Y3QgdGVncmFfZGFzICpkYXMpCit7CisJaWYgKGRhcy0+ZGVidWcpCisJCWRlYnVnZnNfcmVtb3ZlKGRhcy0+ZGVidWcpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZWdyYV9kYXNfZGVidWdfYWRkKHN0cnVjdCB0ZWdyYV9kYXMgKmRhcykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRlZ3JhX2Rhc19kZWJ1Z19yZW1vdmUoc3RydWN0IHRlZ3JhX2RhcyAqZGFzKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRlZ3JhX2Rhc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqcmVnaW9uOworCWludCByZXQgPSAwOworCisJaWYgKGRhcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkYXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGVncmFfZGFzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgdGVncmFfZGFzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKwlkYXMtPmRldiA9ICZwZGV2LT5kZXY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmVnaW9uID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkJcGRldi0+bmFtZSk7CisJaWYgKCFyZWdpb24pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTWVtb3J5IHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZGFzLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghZGFzLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZTsKKwl9CisKKwl0ZWdyYV9kYXNfZGVidWdfYWRkKGRhcyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXMpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWxlYXNlOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZXJyX2ZyZWU6CisJa2ZyZWUoZGFzKTsKKwlkYXMgPSAwOworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0ZWdyYV9kYXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlpZiAoIWRhcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXRlZ3JhX2Rhc19kZWJ1Z19yZW1vdmUoZGFzKTsKKworCWlvdW5tYXAoZGFzLT5yZWdzKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlrZnJlZShkYXMpOworCWRhcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGVncmFfZGFzX2RyaXZlciA9IHsKKwkucHJvYmUgPSB0ZWdyYV9kYXNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRlZ3JhX2Rhc19yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRlZ3JhX2Rhc19tb2Rpbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGVncmFfZGFzX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh0ZWdyYV9kYXNfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZWdyYV9kYXNfbW9kZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9kYXNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRlZ3JhX2Rhc19tb2RleGl0KTsKKworTU9EVUxFX0FVVEhPUigiU3RlcGhlbiBXYXJyZW4gPHN3YXJyZW5AbnZpZGlhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVGVncmEgREFTIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9kYXMuaCBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9kYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzk2YzdiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2Rhcy5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogdGVncmFfZGFzLmggLSBEZWZpbml0aW9ucyBmb3IgVGVncmEgREFTIGRyaXZlcgorICoKKyAqIEF1dGhvcjogU3RlcGhlbiBXYXJyZW4gPHN3YXJyZW5AbnZpZGlhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIE5WSURJQSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1RFR1JBX0RBU19IX18KKyNkZWZpbmUgX19URUdSQV9EQVNfSF9fCisKKy8qIFJlZ2lzdGVyIFRFR1JBX0RBU19EQVBfQ1RSTF9TRUwgKi8KKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9DVFJMX1NFTAkJCQkweDAwCisjZGVmaW5lIFRFR1JBX0RBU19EQVBfQ1RSTF9TRUxfQ09VTlQJCQk1CisjZGVmaW5lIFRFR1JBX0RBU19EQVBfQ1RSTF9TRUxfU1RSSURFCQkJNAorI2RlZmluZSBURUdSQV9EQVNfREFQX0NUUkxfU0VMX0RBUF9NU19TRUxfUAkJMzEKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9DVFJMX1NFTF9EQVBfTVNfU0VMX1MJCTEKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9DVFJMX1NFTF9EQVBfU0RBVEExX1RYX1JYX1AJMzAKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9DVFJMX1NFTF9EQVBfU0RBVEExX1RYX1JYX1MJMQorI2RlZmluZSBURUdSQV9EQVNfREFQX0NUUkxfU0VMX0RBUF9TREFUQTJfVFhfUlhfUAkyOQorI2RlZmluZSBURUdSQV9EQVNfREFQX0NUUkxfU0VMX0RBUF9TREFUQTJfVFhfUlhfUwkxCisjZGVmaW5lIFRFR1JBX0RBU19EQVBfQ1RSTF9TRUxfREFQX0NUUkxfU0VMX1AJCTAKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9DVFJMX1NFTF9EQVBfQ1RSTF9TRUxfUwkJNQorCisvKiBWYWx1ZXMgZm9yIGZpZWxkIFRFR1JBX0RBU19EQVBfQ1RSTF9TRUxfREFQX0NUUkxfU0VMICovCisjZGVmaW5lIFRFR1JBX0RBU19EQVBfU0VMX0RBQzEJMAorI2RlZmluZSBURUdSQV9EQVNfREFQX1NFTF9EQUMyCTEKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9TRUxfREFDMwkyCisjZGVmaW5lIFRFR1JBX0RBU19EQVBfU0VMX0RBUDEJMTYKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9TRUxfREFQMgkxNworI2RlZmluZSBURUdSQV9EQVNfREFQX1NFTF9EQVAzCTE4CisjZGVmaW5lIFRFR1JBX0RBU19EQVBfU0VMX0RBUDQJMTkKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9TRUxfREFQNQkyMAorCisvKiBSZWdpc3RlciBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTCAqLworI2RlZmluZSBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTAkJCTB4NDAKKyNkZWZpbmUgVEVHUkFfREFTX0RBQ19JTlBVVF9EQVRBX0NMS19TRUxfQ09VTlQJCQkzCisjZGVmaW5lIFRFR1JBX0RBU19EQUNfSU5QVVRfREFUQV9DTEtfU0VMX1NUUklERQkJCTQKKyNkZWZpbmUgVEVHUkFfREFTX0RBQ19JTlBVVF9EQVRBX0NMS19TRUxfREFDX1NEQVRBMl9TRUxfUAkyOAorI2RlZmluZSBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTF9EQUNfU0RBVEEyX1NFTF9TCTQKKyNkZWZpbmUgVEVHUkFfREFTX0RBQ19JTlBVVF9EQVRBX0NMS19TRUxfREFDX1NEQVRBMV9TRUxfUAkyNAorI2RlZmluZSBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTF9EQUNfU0RBVEExX1NFTF9TCTQKKyNkZWZpbmUgVEVHUkFfREFTX0RBQ19JTlBVVF9EQVRBX0NMS19TRUxfREFDX0NMS19TRUxfUAkJMAorI2RlZmluZSBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTF9EQUNfQ0xLX1NFTF9TCQk0CisKKy8qCisgKiBWYWx1ZXMgZm9yOgorICogVEVHUkFfREFTX0RBQ19JTlBVVF9EQVRBX0NMS19TRUxfREFDX1NEQVRBMl9TRUwKKyAqIFRFR1JBX0RBU19EQUNfSU5QVVRfREFUQV9DTEtfU0VMX0RBQ19TREFUQTFfU0VMCisgKiBURUdSQV9EQVNfREFDX0lOUFVUX0RBVEFfQ0xLX1NFTF9EQUNfQ0xLX1NFTAorICovCisjZGVmaW5lIFRFR1JBX0RBU19EQUNfU0VMX0RBUDEJMAorI2RlZmluZSBURUdSQV9EQVNfREFDX1NFTF9EQVAyCTEKKyNkZWZpbmUgVEVHUkFfREFTX0RBQ19TRUxfREFQMwkyCisjZGVmaW5lIFRFR1JBX0RBU19EQUNfU0VMX0RBUDQJMworI2RlZmluZSBURUdSQV9EQVNfREFDX1NFTF9EQVA1CTQKKworLyoKKyAqIE5hbWVzL0lEcyBvZiB0aGUgREFDcy9EQVBzLgorICovCisKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9JRF8xIDAKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9JRF8yIDEKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9JRF8zIDIKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9JRF80IDMKKyNkZWZpbmUgVEVHUkFfREFTX0RBUF9JRF81IDQKKworI2RlZmluZSBURUdSQV9EQVNfREFDX0lEXzEgMAorI2RlZmluZSBURUdSQV9EQVNfREFDX0lEXzIgMQorI2RlZmluZSBURUdSQV9EQVNfREFDX0lEXzMgMgorCitzdHJ1Y3QgdGVncmFfZGFzIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBkZW50cnkgKmRlYnVnOworfTsKKworLyoKKyAqIFRlcm1pbm9sb2d5OgorICogREFTOiBEaWdpdGFsIGF1ZGlvIHN3aXRjaCAoSFcgbW9kdWxlIGNvbnRyb2xsZWQgYnkgdGhpcyBkcml2ZXIpCisgKiBEQVA6IERpZ2l0YWwgYXVkaW8gcG9ydCAocG9ydC9waW5zIG9uIFRlZ3JhIGRldmljZSkKKyAqIERBQzogRGlnaXRhbCBhdWRpbyBjb250cm9sbGVyIChlLmcuIEkyUyBvciBBQzk3IGNvbnRyb2xsZXIgZWxzZXdoZXJlKQorICogCisgKiBUaGUgVGVncmEgREFTIGlzIGEgbXV4L2Nyb3NzLWJhciB3aGljaCBjYW4gY29ubmVjdCBlYWNoIERBUCB0byBhIHNwZWNpZmljCisgKiBEQUMsIG9yIGFub3RoZXIgREFQLiBXaGVuIERBUHMgYXJlIGNvbm5lY3RlZCwgb25lIG11c3QgYmUgdGhlIG1hc3RlciBhbmQKKyAqIG9uZSB0aGUgc2xhdmUuIEVhY2ggREFDIGFsbG93cyBzZWxlY3Rpb24gb2YgYSBzcGVjaWZpYyBEQVAgZm9yIGlucHV0LCB0bworICogY2F0ZXIgZm9yIHRoZSBjYXNlIHdoZXJlIE4gREFQcyBhcmUgY29ubmVjdGVkIHRvIDEgREFDIGZvciBicm9hZGNhc3QKKyAqIG91dHB1dC4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBkdW1iOyBubyBhdHRlbXB0IGlzIG1hZGUgdG8gZW5zdXJlIHRoYXQgYSB2YWxpZCByb3V0aW5nCisgKiBjb25maWd1cmF0aW9uIGlzIHByb2dyYW1tZWQuCisgKi8KKworLyoKKyAqIENvbm5lY3QgYSBEQVAgdG8gdG8gYSBEQUMKKyAqIGRhcF9pZDogREFQIHRvIGNvbm5lY3Q6IFRFR1JBX0RBU19EQVBfSURfKgorICogZGFjX3NlbDogREFDIHRvIGNvbm5lY3QgdG86IFRFR1JBX0RBU19EQVBfU0VMX0RBQyoKKyAqLworZXh0ZXJuIGludCB0ZWdyYV9kYXNfY29ubmVjdF9kYXBfdG9fZGFjKGludCBkYXBfaWQsIGludCBkYWNfc2VsKTsKKworLyoKKyAqIENvbm5lY3QgYSBEQVAgdG8gdG8gYW5vdGhlciBEQVAKKyAqIGRhcF9pZDogREFQIHRvIGNvbm5lY3Q6IFRFR1JBX0RBU19EQVBfSURfKgorICogb3RoZXJfZGFwX3NlbDogREFQIHRvIGNvbm5lY3QgdG86IFRFR1JBX0RBU19EQVBfU0VMX0RBUCoKKyAqIG1hc3RlcjogSXMgdGhpcyBEQVAgdGhlIG1hc3RlciAoMSkgb3Igc2xhdmUgKDApCisgKiBzZGF0YTFyeDogSXMgdGhpcyBEQVAncyBTREFUQTEgcGluIFJYICgxKSBvciBUWCAoMCkKKyAqIHNkYXRhMnJ4OiBJcyB0aGlzIERBUCdzIFNEQVRBMiBwaW4gUlggKDEpIG9yIFRYICgwKQorICovCitleHRlcm4gaW50IHRlZ3JhX2Rhc19jb25uZWN0X2RhcF90b19kYXAoaW50IGRhcF9pZCwgaW50IG90aGVyX2RhcF9zZWwsCisJCQkJCWludCBtYXN0ZXIsIGludCBzZGF0YTFyeCwKKwkJCQkJaW50IHNkYXRhMnJ4KTsKKworLyoKKyAqIENvbm5lY3QgYSBEQUMncyBpbnB1dCB0byBhIERBUAorICogKERBQyBvdXRwdXRzIGFyZSBzZWxlY3RlZCBieSB0aGUgREFQKQorICogZGFjX2lkOiBEQUMgSUQgdG8gY29ubmVjdDogVEVHUkFfREFTX0RBQ19JRF8qCisgKiBkYXBfc2VsOiBEQVAgdG8gcmVjZWl2ZSBpbnB1dCBmcm9tOiBURUdSQV9EQVNfREFDX1NFTF9EQVAqCisgKi8KK2V4dGVybiBpbnQgdGVncmFfZGFzX2Nvbm5lY3RfZGFjX3RvX2RhcChpbnQgZGFjX2lkLCBpbnQgZGFwX3NlbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2kycy5jIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2kycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWUyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvdGVncmEvdGVncmFfaTJzLmMKQEAgLTAsMCArMSw1MDMgQEAKKy8qCisgKiB0ZWdyYV9pMnMuYyAtIFRlZ3JhIEkyUyBkcml2ZXIKKyAqCisgKiBBdXRob3I6IFN0ZXBoZW4gV2FycmVuIDxzd2FycmVuQG52aWRpYS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgLSBOVklESUEsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGNvcHlyaWdodC9ieToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgTlZJRElBIENvcnBvcmF0aW9uLgorICogU2NvdHQgUGV0ZXJzb24gPHNwZXRlcnNvbkBudmlkaWEuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqIElsaXlhbiBNYWxjaGV2IDxtYWxjaGV2QGdvb2dsZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICJ0ZWdyYV9kYXMuaCIKKyNpbmNsdWRlICJ0ZWdyYV9pMnMuaCIKKworI2RlZmluZSBEUlZfTkFNRSAidGVncmEtaTJzIgorCitzdGF0aWMgaW5saW5lIHZvaWQgdGVncmFfaTJzX3dyaXRlKHN0cnVjdCB0ZWdyYV9pMnMgKmkycywgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBpMnMtPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB0ZWdyYV9pMnNfcmVhZChzdHJ1Y3QgdGVncmFfaTJzICppMnMsIHUzMiByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGkycy0+cmVncyArIHJlZyk7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBpbnQgdGVncmFfaTJzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisjZGVmaW5lIFJFRyhyKSB7IHIsICNyIH0KKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJaW50IG9mZnNldDsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwl9IHJlZ3NbXSA9IHsKKwkJUkVHKFRFR1JBX0kyU19DVFJMKSwKKwkJUkVHKFRFR1JBX0kyU19TVEFUVVMpLAorCQlSRUcoVEVHUkFfSTJTX1RJTUlORyksCisJCVJFRyhURUdSQV9JMlNfRklGT19TQ1IpLAorCQlSRUcoVEVHUkFfSTJTX1BDTV9DVFJMKSwKKwkJUkVHKFRFR1JBX0kyU19OV19DVFJMKSwKKwkJUkVHKFRFR1JBX0kyU19URE1fQ1RSTCksCisJCVJFRyhURUdSQV9JMlNfVERNX1RYX1JYX0NUUkwpLAorCX07CisjdW5kZWYgUkVHCisKKwlzdHJ1Y3QgdGVncmFfaTJzICppMnMgPSBzLT5wcml2YXRlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykgeworCQl1MzIgdmFsID0gdGVncmFfaTJzX3JlYWQoaTJzLCByZWdzW2ldLm9mZnNldCk7CisJCXNlcV9wcmludGYocywgIiVzID0gJTA4eFxuIiwgcmVnc1tpXS5uYW1lLCB2YWwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX2kyc19kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB0ZWdyYV9pMnNfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRlZ3JhX2kyc19kZWJ1Z19mb3BzID0geworCS5vcGVuICAgID0gdGVncmFfaTJzX2RlYnVnX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgdGVncmFfaTJzX2RlYnVnX2FkZChzdHJ1Y3QgdGVncmFfaTJzICppMnMsIGludCBpZCkKK3sKKwljaGFyIG5hbWVbXSA9IERSVl9OQU1FICIuMCI7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIERSVl9OQU1FIi4lMWQiLCBpZCk7CisJaTJzLT5kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JUlVHTywgc25kX3NvY19kZWJ1Z2ZzX3Jvb3QsCisJCQkJCQlpMnMsICZ0ZWdyYV9pMnNfZGVidWdfZm9wcyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2kyc19kZWJ1Z19yZW1vdmUoc3RydWN0IHRlZ3JhX2kycyAqaTJzKQoreworCWlmIChpMnMtPmRlYnVnKQorCQlkZWJ1Z2ZzX3JlbW92ZShpMnMtPmRlYnVnKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdGVncmFfaTJzX2RlYnVnX2FkZChzdHJ1Y3QgdGVncmFfaTJzICppMnMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZWdyYV9pMnNfZGVidWdfcmVtb3ZlKHN0cnVjdCB0ZWdyYV9pMnMgKmkycykKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHRlZ3JhX2kyc19zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHRlZ3JhX2kycyAqaTJzID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpMnMtPnJlZ19jdHJsICY9IH5URUdSQV9JMlNfQ1RSTF9NQVNURVJfRU5BQkxFOworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWkycy0+cmVnX2N0cmwgfD0gVEVHUkFfSTJTX0NUUkxfTUFTVEVSX0VOQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpMnMtPnJlZ19jdHJsICY9IH4oVEVHUkFfSTJTX0NUUkxfQklUX0ZPUk1BVF9NQVNLIHwgCisJCQkJVEVHUkFfSTJTX0NUUkxfTFJDS19NQVNLKTsKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9CSVRfRk9STUFUX0RTUDsKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9MUkNLX0xfTE9XOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlpMnMtPnJlZ19jdHJsIHw9IFRFR1JBX0kyU19DVFJMX0JJVF9GT1JNQVRfRFNQOworCQlpMnMtPnJlZ19jdHJsIHw9IFRFR1JBX0kyU19DVFJMX0xSQ0tfUl9MT1c7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpMnMtPnJlZ19jdHJsIHw9IFRFR1JBX0kyU19DVFJMX0JJVF9GT1JNQVRfSTJTOworCQlpMnMtPnJlZ19jdHJsIHw9IFRFR1JBX0kyU19DVFJMX0xSQ0tfTF9MT1c7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9CSVRfRk9STUFUX1JKTTsKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9MUkNLX0xfTE9XOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9CSVRfRk9STUFUX0xKTTsKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9MUkNLX0xfTE9XOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9pMnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworICAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCB0ZWdyYV9pMnMgKmkycyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJdTMyIHJlZzsKKwlpbnQgcmV0LCBzYW1wbGVfc2l6ZSwgc3JhdGUsIGkyc2Nsb2NrLCBiaXRjbnQ7CisKKwlpMnMtPnJlZ19jdHJsICY9IH5URUdSQV9JMlNfQ1RSTF9CSVRfU0laRV9NQVNLOworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9CSVRfU0laRV8xNjsKKwkJc2FtcGxlX3NpemUgPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9CSVRfU0laRV8yNDsKKwkJc2FtcGxlX3NpemUgPSAyNDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9CSVRfU0laRV8zMjsKKwkJc2FtcGxlX3NpemUgPSAzMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJLyogRmluYWwgIiogMiIgcmVxdWlyZWQgYnkgVGVncmEgaGFyZHdhcmUgKi8KKwlpMnNjbG9jayA9IHNyYXRlICogcGFyYW1zX2NoYW5uZWxzKHBhcmFtcykgKiBzYW1wbGVfc2l6ZSAqIDI7CisKKwlyZXQgPSBjbGtfc2V0X3JhdGUoaTJzLT5jbGtfaTJzLCBpMnNjbG9jayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkNhbid0IHNldCBJMlMgY2xvY2sgcmF0ZTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJYml0Y250ID0gKGkyc2Nsb2NrIC8gKDIgKiBzcmF0ZSkpIC0gMTsKKwlpZiAoYml0Y250IDwgMCB8fCBiaXRjbnQgPiBURUdSQV9JMlNfVElNSU5HX0NIQU5ORUxfQklUX0NPVU5UX01BU0tfVVMpCisJCXJldHVybiAtRUlOVkFMOworCXJlZyA9IGJpdGNudCA8PCBURUdSQV9JMlNfVElNSU5HX0NIQU5ORUxfQklUX0NPVU5UX1NISUZUOworCisJaWYgKGkyc2Nsb2NrICUgKDIgKiBzcmF0ZSkpCisJCXJlZyB8PSBURUdSQV9JMlNfVElNSU5HX05PTl9TWU1fRU5BQkxFOworCisJdGVncmFfaTJzX3dyaXRlKGkycywgVEVHUkFfSTJTX1RJTUlORywgcmVnKTsKKworCXRlZ3JhX2kyc193cml0ZShpMnMsIFRFR1JBX0kyU19GSUZPX1NDUiwKKwkJVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8yX0FUTl9MVkxfRk9VUl9TTE9UUyB8CisJCVRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMV9BVE5fTFZMX0ZPVVJfU0xPVFMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2kyc19zdGFydF9wbGF5YmFjayhzdHJ1Y3QgdGVncmFfaTJzICppMnMpCit7CisJaTJzLT5yZWdfY3RybCB8PSBURUdSQV9JMlNfQ1RSTF9GSUZPMV9FTkFCTEU7CisJdGVncmFfaTJzX3dyaXRlKGkycywgVEVHUkFfSTJTX0NUUkwsIGkycy0+cmVnX2N0cmwpOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9pMnNfc3RvcF9wbGF5YmFjayhzdHJ1Y3QgdGVncmFfaTJzICppMnMpCit7CisJaTJzLT5yZWdfY3RybCAmPSB+VEVHUkFfSTJTX0NUUkxfRklGTzFfRU5BQkxFOworCXRlZ3JhX2kyc193cml0ZShpMnMsIFRFR1JBX0kyU19DVFJMLCBpMnMtPnJlZ19jdHJsKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfaTJzX3N0YXJ0X2NhcHR1cmUoc3RydWN0IHRlZ3JhX2kycyAqaTJzKQoreworCWkycy0+cmVnX2N0cmwgfD0gVEVHUkFfSTJTX0NUUkxfRklGTzJfRU5BQkxFOworCXRlZ3JhX2kyc193cml0ZShpMnMsIFRFR1JBX0kyU19DVFJMLCBpMnMtPnJlZ19jdHJsKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfaTJzX3N0b3BfY2FwdHVyZShzdHJ1Y3QgdGVncmFfaTJzICppMnMpCit7CisJaTJzLT5yZWdfY3RybCAmPSB+VEVHUkFfSTJTX0NUUkxfRklGTzJfRU5BQkxFOworCXRlZ3JhX2kyc193cml0ZShpMnMsIFRFR1JBX0kyU19DVFJMLCBpMnMtPnJlZ19jdHJsKTsKK30KKworc3RhdGljIGludCB0ZWdyYV9pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgdGVncmFfaTJzICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJaWYgKCFpMnMtPmNsa19yZWZzKQorCQkJY2xrX2VuYWJsZShpMnMtPmNsa19pMnMpOworCQlpMnMtPmNsa19yZWZzKys7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJdGVncmFfaTJzX3N0YXJ0X3BsYXliYWNrKGkycyk7CisJCWVsc2UKKwkJCXRlZ3JhX2kyc19zdGFydF9jYXB0dXJlKGkycyk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXRlZ3JhX2kyc19zdG9wX3BsYXliYWNrKGkycyk7CisJCWVsc2UKKwkJCXRlZ3JhX2kyc19zdG9wX2NhcHR1cmUoaTJzKTsKKwkJaTJzLT5jbGtfcmVmcy0tOworCQlpZiAoIWkycy0+Y2xrX3JlZnMpCisJCQljbGtfZGlzYWJsZShpMnMtPmNsa19pMnMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9pMnNfcHJvYmUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHRlZ3JhX2kycyAqIGkycyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisKKwlkYWktPmNhcHR1cmVfZG1hX2RhdGEgPSAmaTJzLT5jYXB0dXJlX2RtYV9kYXRhOworCWRhaS0+cGxheWJhY2tfZG1hX2RhdGEgPSAmaTJzLT5wbGF5YmFja19kbWFfZGF0YTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB0ZWdyYV9pMnNfZGFpX29wcyA9IHsKKwkuc2V0X2ZtdAk9IHRlZ3JhX2kyc19zZXRfZm10LAorCS5od19wYXJhbXMJPSB0ZWdyYV9pMnNfaHdfcGFyYW1zLAorCS50cmlnZ2VyCT0gdGVncmFfaTJzX3RyaWdnZXIsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHRlZ3JhX2kyc19kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gRFJWX05BTUUgIi4wIiwKKwkJLnByb2JlID0gdGVncmFfaTJzX3Byb2JlLAorCQkucGxheWJhY2sgPSB7CisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQl9LAorCQkub3BzID0gJnRlZ3JhX2kyc19kYWlfb3BzLAorCQkuc3ltbWV0cmljX3JhdGVzID0gMSwKKwl9LAorCXsKKwkJLm5hbWUgPSBEUlZfTkFNRSAiLjEiLAorCQkucHJvYmUgPSB0ZWdyYV9pMnNfcHJvYmUsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJCS5vcHMgPSAmdGVncmFfaTJzX2RhaV9vcHMsCisJCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0IGludCB0ZWdyYV9pMnNfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdGVncmFfaTJzICogaTJzOworCWNoYXIgY2xrX25hbWVbMTJdOyAvKiB0ZWdyYS1pMnMuMCAqLworCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqbWVtcmVnaW9uLCAqZG1hcmVxOworCWludCByZXQ7CisKKwlpZiAoKHBkZXYtPmlkIDwgMCkgfHwKKwkJKHBkZXYtPmlkID49IEFSUkFZX1NJWkUodGVncmFfaTJzX2RhaSkpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklEICVkIG91dCBvZiByYW5nZVxuIiwgcGRldi0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIEZJWE1FOiBVbnRpbCBhIGNvZGVjIGRyaXZlciBleGlzdHMgZm9yIHRoZSB0ZWdyYSBEQVMsIGhhcmQtY29kZSBhCisJICogMToxIG1hcHBpbmcgYmV0d2VlbiBhdWRpbyBjb250cm9sbGVycyBhbmQgYXVkaW8gcG9ydHMuCisJICovCisJcmV0ID0gdGVncmFfZGFzX2Nvbm5lY3RfZGFwX3RvX2RhYyhURUdSQV9EQVNfREFQX0lEXzEgKyBwZGV2LT5pZCwKKwkJCQkJVEVHUkFfREFTX0RBUF9TRUxfREFDMSArIHBkZXYtPmlkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IHNldCB1cCBEQVAgY29ubmVjdGlvblxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IHRlZ3JhX2Rhc19jb25uZWN0X2RhY190b19kYXAoVEVHUkFfREFTX0RBQ19JRF8xICsgcGRldi0+aWQsCisJCQkJCVRFR1JBX0RBU19EQUNfU0VMX0RBUDEgKyBwZGV2LT5pZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCBzZXQgdXAgREFDIGNvbm5lY3Rpb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWkycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZWdyYV9pMnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWkycykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCBhbGxvY2F0ZSB0ZWdyYV9pMnNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpMnMpOworCisJc25wcmludGYoY2xrX25hbWUsIHNpemVvZihjbGtfbmFtZSksIERSVl9OQU1FICIuJWQiLCBwZGV2LT5pZCk7CisJaTJzLT5jbGtfaTJzID0gY2xrX2dldF9zeXMoY2xrX25hbWUsIE5VTEwpOworCWlmIChJU19FUlIoaTJzLT5jbGtfaTJzKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCByZXRyaWV2ZSBpMnMgY2xvY2tcbiIpOworCQlyZXQgPSBQVFJfRVJSKGkycy0+Y2xrX2kycyk7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9jbGtfcHV0OworCX0KKworCWRtYXJlcSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CisJaWYgKCFkbWFyZXEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gRE1BIHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfY2xrX3B1dDsKKwl9CisKKwltZW1yZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pLAorCQkJCQlEUlZfTkFNRSk7CisJaWYgKCFtZW1yZWdpb24pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTWVtb3J5IHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2Nsa19wdXQ7CisJfQorCisJaTJzLT5yZWdzID0gaW9yZW1hcChtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCWlmICghaTJzLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZTsKKwl9CisKKwlpMnMtPmNhcHR1cmVfZG1hX2RhdGEuYWRkciA9IG1lbS0+c3RhcnQgKyBURUdSQV9JMlNfRklGTzI7CisJaTJzLT5jYXB0dXJlX2RtYV9kYXRhLndyYXAgPSA0OworCWkycy0+Y2FwdHVyZV9kbWFfZGF0YS53aWR0aCA9IDMyOworCWkycy0+Y2FwdHVyZV9kbWFfZGF0YS5yZXFfc2VsID0gZG1hcmVxLT5zdGFydDsKKworCWkycy0+cGxheWJhY2tfZG1hX2RhdGEuYWRkciA9IG1lbS0+c3RhcnQgKyBURUdSQV9JMlNfRklGTzE7CisJaTJzLT5wbGF5YmFja19kbWFfZGF0YS53cmFwID0gNDsKKwlpMnMtPnBsYXliYWNrX2RtYV9kYXRhLndpZHRoID0gMzI7CisJaTJzLT5wbGF5YmFja19kbWFfZGF0YS5yZXFfc2VsID0gZG1hcmVxLT5zdGFydDsKKworCWkycy0+cmVnX2N0cmwgPSBURUdSQV9JMlNfQ1RSTF9GSUZPX0ZPUk1BVF9QQUNLRUQ7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2LCAmdGVncmFfaTJzX2RhaVtwZGV2LT5pZF0pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3VubWFwOworCX0KKworCXRlZ3JhX2kyc19kZWJ1Z19hZGQoaTJzLCBwZGV2LT5pZCk7CisKKwlyZXR1cm4gMDsKKworZXJyX3VubWFwOgorCWlvdW5tYXAoaTJzLT5yZWdzKTsKK2Vycl9yZWxlYXNlOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworZXJyX2Nsa19wdXQ6CisJY2xrX3B1dChpMnMtPmNsa19pMnMpOworZXJyX2ZyZWU6CisJa2ZyZWUoaTJzKTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGVncmFfaTJzX3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0ZWdyYV9pMnMgKmkycyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJnBkZXYtPmRldik7CisKKwl0ZWdyYV9pMnNfZGVidWdfcmVtb3ZlKGkycyk7CisKKwlpb3VubWFwKGkycy0+cmVncyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJY2xrX3B1dChpMnMtPmNsa19pMnMpOworCisJa2ZyZWUoaTJzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9pMnNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gdGVncmFfaTJzX3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0ZWdyYV9pMnNfcGxhdGZvcm1fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF90ZWdyYV9pMnNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRlZ3JhX2kyc19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc25kX3RlZ3JhX2kyc19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNuZF90ZWdyYV9pMnNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9pMnNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNuZF90ZWdyYV9pMnNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gV2FycmVuIDxzd2FycmVuQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhIEkyUyBBU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9pMnMuaCBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjM4YTA5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2kycy5oCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogdGVncmFfaTJzLmggLSBEZWZpbml0aW9ucyBmb3IgVGVncmEgSTJTIGRyaXZlcgorICoKKyAqIEF1dGhvcjogU3RlcGhlbiBXYXJyZW4gPHN3YXJyZW5AbnZpZGlhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIE5WSURJQSwgSW5jLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgY29weXJpZ2h0L2J5OgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwLCBOVklESUEgQ29ycG9yYXRpb24uCisgKiBTY290dCBQZXRlcnNvbiA8c3BldGVyc29uQG52aWRpYS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICogSWxpeWFuIE1hbGNoZXYgPG1hbGNoZXZAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19URUdSQV9JMlNfSF9fCisjZGVmaW5lIF9fVEVHUkFfSTJTX0hfXworCisjaW5jbHVkZSAidGVncmFfcGNtLmgiCisKKy8qIFJlZ2lzdGVyIG9mZnNldHMgZnJvbSBURUdSQV9JMlMxX0JBU0UgYW5kIFRFR1JBX0kyUzJfQkFTRSAqLworCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMCQkJCQkweDAwCisjZGVmaW5lIFRFR1JBX0kyU19TVEFUVVMJCQkJMHgwNAorI2RlZmluZSBURUdSQV9JMlNfVElNSU5HCQkJCTB4MDgKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fU0NSCQkJCTB4MGMKKyNkZWZpbmUgVEVHUkFfSTJTX1BDTV9DVFJMCQkJCTB4MTAKKyNkZWZpbmUgVEVHUkFfSTJTX05XX0NUUkwJCQkJMHgxNAorI2RlZmluZSBURUdSQV9JMlNfVERNX0NUUkwJCQkJMHgyMAorI2RlZmluZSBURUdSQV9JMlNfVERNX1RYX1JYX0NUUkwJCQkweDI0CisjZGVmaW5lIFRFR1JBX0kyU19GSUZPMQkJCQkJMHg0MAorI2RlZmluZSBURUdSQV9JMlNfRklGTzIJCQkJCTB4ODAKKworLyogRmllbGRzIGluIFRFR1JBX0kyU19DVFJMICovCisKKyNkZWZpbmUgVEVHUkFfSTJTX0NUUkxfRklGTzJfVFhfRU5BQkxFCQkJKDEgPDwgMzApCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0ZJRk8xX0VOQUJMRQkJCSgxIDw8IDI5KQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9GSUZPMl9FTkFCTEUJCQkoMSA8PCAyOCkKKyNkZWZpbmUgVEVHUkFfSTJTX0NUUkxfRklGTzFfUlhfRU5BQkxFCQkJKDEgPDwgMjcpCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0ZJRk9fTFBCS19FTkFCTEUJCQkoMSA8PCAyNikKKyNkZWZpbmUgVEVHUkFfSTJTX0NUUkxfTUFTVEVSX0VOQUJMRQkJCSgxIDw8IDI1KQorCisjZGVmaW5lIFRFR1JBX0kyU19MUkNLX0xFRlRfTE9XCQkJCTAKKyNkZWZpbmUgVEVHUkFfSTJTX0xSQ0tfUklHSFRfTE9XCQkJMQorCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0xSQ0tfU0hJRlQJCQkyNAorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9MUkNLX01BU0sJCQkoMSAgICAgICAgICAgICAgICAgICAgICAgIDw8IFRFR1JBX0kyU19DVFJMX0xSQ0tfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0xSQ0tfTF9MT1cJCQkoVEVHUkFfSTJTX0xSQ0tfTEVGVF9MT1cgIDw8IFRFR1JBX0kyU19DVFJMX0xSQ0tfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0xSQ0tfUl9MT1cJCQkoVEVHUkFfSTJTX0xSQ0tfUklHSFRfTE9XIDw8IFRFR1JBX0kyU19DVFJMX0xSQ0tfU0hJRlQpCisKKyNkZWZpbmUgVEVHUkFfSTJTX0JJVF9GT1JNQVRfSTJTCQkJMAorI2RlZmluZSBURUdSQV9JMlNfQklUX0ZPUk1BVF9SSk0JCQkxCisjZGVmaW5lIFRFR1JBX0kyU19CSVRfRk9STUFUX0xKTQkJCTIKKyNkZWZpbmUgVEVHUkFfSTJTX0JJVF9GT1JNQVRfRFNQCQkJMworCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0JJVF9GT1JNQVRfU0hJRlQJCQkxMAorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9CSVRfRk9STUFUX01BU0sJCQkoMyAgICAgICAgICAgICAgICAgICAgICAgIDw8IFRFR1JBX0kyU19DVFJMX0JJVF9GT1JNQVRfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0JJVF9GT1JNQVRfSTJTCQkJKFRFR1JBX0kyU19CSVRfRk9STUFUX0kyUyA8PCBURUdSQV9JMlNfQ1RSTF9CSVRfRk9STUFUX1NISUZUKQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9CSVRfRk9STUFUX1JKTQkJCShURUdSQV9JMlNfQklUX0ZPUk1BVF9SSk0gPDwgVEVHUkFfSTJTX0NUUkxfQklUX0ZPUk1BVF9TSElGVCkKKyNkZWZpbmUgVEVHUkFfSTJTX0NUUkxfQklUX0ZPUk1BVF9MSk0JCQkoVEVHUkFfSTJTX0JJVF9GT1JNQVRfTEpNIDw8IFRFR1JBX0kyU19DVFJMX0JJVF9GT1JNQVRfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0JJVF9GT1JNQVRfRFNQCQkJKFRFR1JBX0kyU19CSVRfRk9STUFUX0RTUCA8PCBURUdSQV9JMlNfQ1RSTF9CSVRfRk9STUFUX1NISUZUKQorCisjZGVmaW5lIFRFR1JBX0kyU19CSVRfU0laRV8xNgkJCQkwCisjZGVmaW5lIFRFR1JBX0kyU19CSVRfU0laRV8yMAkJCQkxCisjZGVmaW5lIFRFR1JBX0kyU19CSVRfU0laRV8yNAkJCQkyCisjZGVmaW5lIFRFR1JBX0kyU19CSVRfU0laRV8zMgkJCQkzCisKKyNkZWZpbmUgVEVHUkFfSTJTX0NUUkxfQklUX1NJWkVfU0hJRlQJCQk4CisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0JJVF9TSVpFX01BU0sJCQkoMyAgICAgICAgICAgICAgICAgICAgIDw8IFRFR1JBX0kyU19DVFJMX0JJVF9TSVpFX1NISUZUKQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9CSVRfU0laRV8xNgkJCShURUdSQV9JMlNfQklUX1NJWkVfMTYgPDwgVEVHUkFfSTJTX0NUUkxfQklUX1NJWkVfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0JJVF9TSVpFXzIwCQkJKFRFR1JBX0kyU19CSVRfU0laRV8yMCA8PCBURUdSQV9JMlNfQ1RSTF9CSVRfU0laRV9TSElGVCkKKyNkZWZpbmUgVEVHUkFfSTJTX0NUUkxfQklUX1NJWkVfMjQJCQkoVEVHUkFfSTJTX0JJVF9TSVpFXzI0IDw8IFRFR1JBX0kyU19DVFJMX0JJVF9TSVpFX1NISUZUKQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9CSVRfU0laRV8zMgkJCShURUdSQV9JMlNfQklUX1NJWkVfMzIgPDwgVEVHUkFfSTJTX0NUUkxfQklUX1NJWkVfU0hJRlQpCisKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fMTZfTFNCCQkJCTAKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fMjBfTFNCCQkJCTEKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fMjRfTFNCCQkJCTIKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fMzIJCQkJMworI2RlZmluZSBURUdSQV9JMlNfRklGT19QQUNLRUQJCQkJNworCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0ZJRk9fRk9STUFUX1NISUZUCQk0CisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0ZJRk9fRk9STUFUX01BU0sJCQkoNyAgICAgICAgICAgICAgICAgICAgIDw8IFRFR1JBX0kyU19DVFJMX0ZJRk9fRk9STUFUX1NISUZUKQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9GSUZPX0ZPUk1BVF8xNl9MU0IJCShURUdSQV9JMlNfRklGT18xNl9MU0IgPDwgVEVHUkFfSTJTX0NUUkxfRklGT19GT1JNQVRfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0ZJRk9fRk9STUFUXzIwX0xTQgkJKFRFR1JBX0kyU19GSUZPXzIwX0xTQiA8PCBURUdSQV9JMlNfQ1RSTF9GSUZPX0ZPUk1BVF9TSElGVCkKKyNkZWZpbmUgVEVHUkFfSTJTX0NUUkxfRklGT19GT1JNQVRfMjRfTFNCCQkoVEVHUkFfSTJTX0ZJRk9fMjRfTFNCIDw8IFRFR1JBX0kyU19DVFJMX0ZJRk9fRk9STUFUX1NISUZUKQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9GSUZPX0ZPUk1BVF8zMgkJCShURUdSQV9JMlNfRklGT18zMiAgICAgPDwgVEVHUkFfSTJTX0NUUkxfRklGT19GT1JNQVRfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19DVFJMX0ZJRk9fRk9STUFUX1BBQ0tFRAkJKFRFR1JBX0kyU19GSUZPX1BBQ0tFRCA8PCBURUdSQV9JMlNfQ1RSTF9GSUZPX0ZPUk1BVF9TSElGVCkKKworI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9JRV9GSUZPMV9FUlIJCQkoMSA8PCAzKQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9JRV9GSUZPMl9FUlIJCQkoMSA8PCAyKQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9RRV9GSUZPMQkJCQkoMSA8PCAxKQorI2RlZmluZSBURUdSQV9JMlNfQ1RSTF9RRV9GSUZPMgkJCQkoMSA8PCAwKQorCisvKiBGaWVsZHMgaW4gVEVHUkFfSTJTX1NUQVRVUyAqLworCisjZGVmaW5lIFRFR1JBX0kyU19TVEFUVVNfRklGTzFfUkRZCQkJKDEgPDwgMzEpCisjZGVmaW5lIFRFR1JBX0kyU19TVEFUVVNfRklGTzJfUkRZCQkJKDEgPDwgMzApCisjZGVmaW5lIFRFR1JBX0kyU19TVEFUVVNfRklGTzFfQlNZCQkJKDEgPDwgMjkpCisjZGVmaW5lIFRFR1JBX0kyU19TVEFUVVNfRklGTzJfQlNZCQkJKDEgPDwgMjgpCisjZGVmaW5lIFRFR1JBX0kyU19TVEFUVVNfRklGTzFfRVJSCQkJKDEgPDwgMykKKyNkZWZpbmUgVEVHUkFfSTJTX1NUQVRVU19GSUZPMl9FUlIJCQkoMSA8PCAyKQorI2RlZmluZSBURUdSQV9JMlNfU1RBVFVTX1FTX0ZJRk8xCQkJKDEgPDwgMSkKKyNkZWZpbmUgVEVHUkFfSTJTX1NUQVRVU19RU19GSUZPMgkJCSgxIDw8IDApCisKKy8qIEZpZWxkcyBpbiBURUdSQV9JMlNfVElNSU5HICovCisKKyNkZWZpbmUgVEVHUkFfSTJTX1RJTUlOR19OT05fU1lNX0VOQUJMRQkJCSgxIDw8IDEyKQorI2RlZmluZSBURUdSQV9JMlNfVElNSU5HX0NIQU5ORUxfQklUX0NPVU5UX1NISUZUCTAKKyNkZWZpbmUgVEVHUkFfSTJTX1RJTUlOR19DSEFOTkVMX0JJVF9DT1VOVF9NQVNLX1VTCTB4N2ZmZgorI2RlZmluZSBURUdSQV9JMlNfVElNSU5HX0NIQU5ORUxfQklUX0NPVU5UX01BU0sJCShURUdSQV9JMlNfVElNSU5HX0NIQU5ORUxfQklUX0NPVU5UX01BU0tfVVMgPDwgVEVHUkFfSTJTX1RJTUlOR19DSEFOTkVMX0JJVF9DT1VOVF9TSElGVCkKKworLyogRmllbGRzIGluIFRFR1JBX0kyU19GSUZPX1NDUiAqLworCisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMl9GVUxMX0VNUFRZX0NPVU5UX1NISUZUCTI0CisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMV9GVUxMX0VNUFRZX0NPVU5UX1NISUZUCTE2CisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPX0ZVTExfRU1QVFlfQ09VTlRfTUFTSwkweDNmCisKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8yX0NMUgkJCSgxIDw8IDEyKQorI2RlZmluZSBURUdSQV9JMlNfRklGT19TQ1JfRklGTzFfQ0xSCQkJKDEgPDwgOCkKKworI2RlZmluZSBURUdSQV9JMlNfRklGT19BVE5fTFZMX09ORV9TTE9UCQkJMAorI2RlZmluZSBURUdSQV9JMlNfRklGT19BVE5fTFZMX0ZPVVJfU0xPVFMJCTEKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fQVROX0xWTF9FSUdIVF9TTE9UUwkJMgorI2RlZmluZSBURUdSQV9JMlNfRklGT19BVE5fTFZMX1RXRUxWRV9TTE9UUwkJMworCisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMl9BVE5fTFZMX1NISUZUCQk0CisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMl9BVE5fTFZMX01BU0sJCSgzIDw8IFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMl9BVE5fTFZMX1NISUZUKQorI2RlZmluZSBURUdSQV9JMlNfRklGT19TQ1JfRklGTzJfQVROX0xWTF9PTkVfU0xPVAkoVEVHUkFfSTJTX0ZJRk9fQVROX0xWTF9PTkVfU0xPVCAgICAgPDwgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8yX0FUTl9MVkxfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMl9BVE5fTFZMX0ZPVVJfU0xPVFMJKFRFR1JBX0kyU19GSUZPX0FUTl9MVkxfRk9VUl9TTE9UUyAgIDw8IFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMl9BVE5fTFZMX1NISUZUKQorI2RlZmluZSBURUdSQV9JMlNfRklGT19TQ1JfRklGTzJfQVROX0xWTF9FSUdIVF9TTE9UUwkoVEVHUkFfSTJTX0ZJRk9fQVROX0xWTF9FSUdIVF9TTE9UUyAgPDwgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8yX0FUTl9MVkxfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMl9BVE5fTFZMX1RXRUxWRV9TTE9UUwkoVEVHUkFfSTJTX0ZJRk9fQVROX0xWTF9UV0VMVkVfU0xPVFMgPDwgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8yX0FUTl9MVkxfU0hJRlQpCisKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8xX0FUTl9MVkxfU0hJRlQJCTAKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8xX0FUTl9MVkxfTUFTSwkJKDMgPDwgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8xX0FUTl9MVkxfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMV9BVE5fTFZMX09ORV9TTE9UCShURUdSQV9JMlNfRklGT19BVE5fTFZMX09ORV9TTE9UICAgICA8PCBURUdSQV9JMlNfRklGT19TQ1JfRklGTzFfQVROX0xWTF9TSElGVCkKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8xX0FUTl9MVkxfRk9VUl9TTE9UUwkoVEVHUkFfSTJTX0ZJRk9fQVROX0xWTF9GT1VSX1NMT1RTICAgPDwgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8xX0FUTl9MVkxfU0hJRlQpCisjZGVmaW5lIFRFR1JBX0kyU19GSUZPX1NDUl9GSUZPMV9BVE5fTFZMX0VJR0hUX1NMT1RTCShURUdSQV9JMlNfRklGT19BVE5fTFZMX0VJR0hUX1NMT1RTICA8PCBURUdSQV9JMlNfRklGT19TQ1JfRklGTzFfQVROX0xWTF9TSElGVCkKKyNkZWZpbmUgVEVHUkFfSTJTX0ZJRk9fU0NSX0ZJRk8xX0FUTl9MVkxfVFdFTFZFX1NMT1RTCShURUdSQV9JMlNfRklGT19BVE5fTFZMX1RXRUxWRV9TTE9UUyA8PCBURUdSQV9JMlNfRklGT19TQ1JfRklGTzFfQVROX0xWTF9TSElGVCkKKworc3RydWN0IHRlZ3JhX2kycyB7CisJc3RydWN0IGNsayAqY2xrX2kyczsKKwlpbnQgY2xrX3JlZnM7CisJc3RydWN0IHRlZ3JhX3BjbV9kbWFfcGFyYW1zIGNhcHR1cmVfZG1hX2RhdGE7CisJc3RydWN0IHRlZ3JhX3BjbV9kbWFfcGFyYW1zIHBsYXliYWNrX2RtYV9kYXRhOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1ZzsKKwl1MzIgcmVnX2N0cmw7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9wY20uYyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzI3MWY5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX3BjbS5jCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogdGVncmFfcGNtLmMgLSBUZWdyYSBQQ00gZHJpdmVyCisgKgorICogQXV0aG9yOiBTdGVwaGVuIFdhcnJlbiA8c3dhcnJlbkBudmlkaWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gTlZJRElBLCBJbmMuCisgKgorICogQmFzZWQgb24gY29kZSBjb3B5cmlnaHQvYnk6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKyAqIFNjb3R0IFBldGVyc29uIDxzcGV0ZXJzb25AbnZpZGlhLmNvbT4KKyAqIFZpamF5IE1hbGkgPHZtYWxpQG52aWRpYS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICogSWxpeWFuIE1hbGNoZXYgPG1hbGNoZXZAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSAidGVncmFfcGNtLmgiCisKKyNkZWZpbmUgRFJWX05BTUUgInRlZ3JhLXBjbS1hdWRpbyIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHRlZ3JhX3BjbV9oYXJkd2FyZSA9IHsKKwkuaW5mbwkJCT0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCQkgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJCQkgIFNORFJWX1BDTV9JTkZPX1JFU1VNRSB8CisJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCwKKwkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkuY2hhbm5lbHNfbWluCQk9IDIsCisJLmNoYW5uZWxzX21heAkJPSAyLAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gMTAyNCwKKwkucGVyaW9kX2J5dGVzX21heAk9IFBBR0VfU0laRSwKKwkucGVyaW9kc19taW4JCT0gMiwKKwkucGVyaW9kc19tYXgJCT0gOCwKKwkuYnVmZmVyX2J5dGVzX21heAk9IFBBR0VfU0laRSAqIDgsCisJLmZpZm9fc2l6ZQkJPSA0LAorfTsKKworc3RhdGljIHZvaWQgdGVncmFfcGNtX3F1ZXVlX2RtYShzdHJ1Y3QgdGVncmFfcnVudGltZV9kYXRhICpwcnRkKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcHJ0ZC0+c3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzdHJ1Y3QgdGVncmFfZG1hX3JlcSAqZG1hX3JlcTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlkbWFfcmVxID0gJnBydGQtPmRtYV9yZXFbcHJ0ZC0+ZG1hX3JlcV9pZHhdOworCXBydGQtPmRtYV9yZXFfaWR4ID0gMSAtIHBydGQtPmRtYV9yZXFfaWR4OworCisJYWRkciA9IGJ1Zi0+YWRkciArIHBydGQtPmRtYV9wb3M7CisJcHJ0ZC0+ZG1hX3BvcyArPSBkbWFfcmVxLT5zaXplOworCWlmIChwcnRkLT5kbWFfcG9zID49IHBydGQtPmRtYV9wb3NfZW5kKQorCQlwcnRkLT5kbWFfcG9zID0gMDsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlkbWFfcmVxLT5zb3VyY2VfYWRkciA9IGFkZHI7CisJZWxzZQorCQlkbWFfcmVxLT5kZXN0X2FkZHIgPSBhZGRyOworCisJdGVncmFfZG1hX2VucXVldWVfcmVxKHBydGQtPmRtYV9jaGFuLCBkbWFfcmVxKTsKK30KKworc3RhdGljIHZvaWQgZG1hX2NvbXBsZXRlX2NhbGxiYWNrKHN0cnVjdCB0ZWdyYV9kbWFfcmVxICpyZXEpCit7CisJc3RydWN0IHRlZ3JhX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IChzdHJ1Y3QgdGVncmFfcnVudGltZV9kYXRhICopcmVxLT5kZXY7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBwcnRkLT5zdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7CisKKwlpZiAoIXBydGQtPnJ1bm5pbmcpIHsKKwkJc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOworCQlyZXR1cm47CisJfQorCisJaWYgKCsrcHJ0ZC0+cGVyaW9kX2luZGV4ID49IHJ1bnRpbWUtPnBlcmlvZHMpCisJCXBydGQtPnBlcmlvZF9pbmRleCA9IDA7CisKKwl0ZWdyYV9wY21fcXVldWVfZG1hKHBydGQpOworCisJc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOworCisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9kbWFfdHhfcmVxdWVzdChzdHJ1Y3QgdGVncmFfZG1hX3JlcSAqcmVxLAorCQkJCQlzdHJ1Y3QgdGVncmFfcGNtX2RtYV9wYXJhbXMgKiBkbWFwKQoreworCXJlcS0+Y29tcGxldGUgPSBkbWFfY29tcGxldGVfY2FsbGJhY2s7CisJcmVxLT50b19tZW1vcnkgPSBmYWxzZTsKKwlyZXEtPmRlc3RfYWRkciA9IGRtYXAtPmFkZHI7CisJcmVxLT5kZXN0X3dyYXAgPSBkbWFwLT53cmFwOworCXJlcS0+c291cmNlX2J1c193aWR0aCA9IDMyOworCXJlcS0+c291cmNlX3dyYXAgPSAwOworCXJlcS0+ZGVzdF9idXNfd2lkdGggPSBkbWFwLT53aWR0aDsKKwlyZXEtPnJlcV9zZWwgPSBkbWFwLT5yZXFfc2VsOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9kbWFfcnhfcmVxdWVzdChzdHJ1Y3QgdGVncmFfZG1hX3JlcSAqcmVxLAorCQkJCQlzdHJ1Y3QgdGVncmFfcGNtX2RtYV9wYXJhbXMgKiBkbWFwKQoreworCXJlcS0+Y29tcGxldGUgPSBkbWFfY29tcGxldGVfY2FsbGJhY2s7CisJcmVxLT50b19tZW1vcnkgPSB0cnVlOworCXJlcS0+c291cmNlX2FkZHIgPSBkbWFwLT5hZGRyOworCXJlcS0+ZGVzdF93cmFwID0gMDsKKwlyZXEtPnNvdXJjZV9idXNfd2lkdGggPSBkbWFwLT53aWR0aDsKKwlyZXEtPnNvdXJjZV93cmFwID0gZG1hcC0+d3JhcDsKKwlyZXEtPmRlc3RfYnVzX3dpZHRoID0gMzI7CisJcmVxLT5yZXFfc2VsID0gZG1hcC0+cmVxX3NlbDsKK30KKworc3RhdGljIGludCB0ZWdyYV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCB0ZWdyYV9ydW50aW1lX2RhdGEgKnBydGQ7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0ZWdyYV9wY21fZG1hX3BhcmFtcyAqIGRtYXA7CisJaW50IHJldCA9IDA7CisKKwlwcnRkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRlZ3JhX3J1bnRpbWVfZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChwcnRkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKKwlwcnRkLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisKKwlzcGluX2xvY2tfaW5pdCgmcHJ0ZC0+bG9jayk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlkbWFwID0gc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKHJ0ZC0+Y3B1X2RhaSwgc3Vic3RyZWFtKTsKKwkJc2V0dXBfZG1hX3R4X3JlcXVlc3QoJnBydGQtPmRtYV9yZXFbMF0sIGRtYXApOworCQlzZXR1cF9kbWFfdHhfcmVxdWVzdCgmcHJ0ZC0+ZG1hX3JlcVsxXSwgZG1hcCk7CisJfSBlbHNlIHsKKwkJZG1hcCA9IHNuZF9zb2NfZGFpX2dldF9kbWFfZGF0YShydGQtPmNwdV9kYWksIHN1YnN0cmVhbSk7CisJCXNldHVwX2RtYV9yeF9yZXF1ZXN0KCZwcnRkLT5kbWFfcmVxWzBdLCBkbWFwKTsKKwkJc2V0dXBfZG1hX3J4X3JlcXVlc3QoJnBydGQtPmRtYV9yZXFbMV0sIGRtYXApOworCX0KKworCXBydGQtPmRtYV9yZXFbMF0uZGV2ID0gcHJ0ZDsKKwlwcnRkLT5kbWFfcmVxWzFdLmRldiA9IHBydGQ7CisKKwlwcnRkLT5kbWFfY2hhbiA9IHRlZ3JhX2RtYV9hbGxvY2F0ZV9jaGFubmVsKFRFR1JBX0RNQV9NT0RFX09ORVNIT1QpOworCWlmIChwcnRkLT5kbWFfY2hhbiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIFNldCBIVyBwYXJhbXMgbm93IHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUgKi8KKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJnRlZ3JhX3BjbV9oYXJkd2FyZSk7CisKKwkvKiBFbnN1cmUgdGhhdCBidWZmZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHBlcmlvZCBzaXplICovCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwKKwkJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWlmIChwcnRkLT5kbWFfY2hhbikgeworCQl0ZWdyYV9kbWFfZnJlZV9jaGFubmVsKHBydGQtPmRtYV9jaGFuKTsKKwl9CisKKwlrZnJlZShwcnRkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHRlZ3JhX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXRlZ3JhX2RtYV9mcmVlX2NoYW5uZWwocHJ0ZC0+ZG1hX2NoYW4pOworCisJa2ZyZWUocHJ0ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHRlZ3JhX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXNuZF9wY21fc2V0X3J1bnRpbWVfYnVmZmVyKHN1YnN0cmVhbSwgJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CisKKwlwcnRkLT5kbWFfcmVxWzBdLnNpemUgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcyk7CisJcHJ0ZC0+ZG1hX3JlcVsxXS5zaXplID0gcHJ0ZC0+ZG1hX3JlcVswXS5zaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHRlZ3JhX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlwcnRkLT5kbWFfcG9zID0gMDsKKwkJcHJ0ZC0+ZG1hX3Bvc19lbmQgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kcyAqIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJcHJ0ZC0+cGVyaW9kX2luZGV4ID0gMDsKKwkJcHJ0ZC0+ZG1hX3JlcV9pZHggPSAwOworCQkvKiBGYWxsLXRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcnRkLT5sb2NrLCBmbGFncyk7CisJCXBydGQtPnJ1bm5pbmcgPSAxOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcnRkLT5sb2NrLCBmbGFncyk7CisJCXRlZ3JhX3BjbV9xdWV1ZV9kbWEocHJ0ZCk7CisJCXRlZ3JhX3BjbV9xdWV1ZV9kbWEocHJ0ZCk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJ0ZC0+bG9jaywgZmxhZ3MpOworCQlwcnRkLT5ydW5uaW5nID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJ0ZC0+bG9jaywgZmxhZ3MpOworCQl0ZWdyYV9kbWFfZGVxdWV1ZV9yZXEocHJ0ZC0+ZG1hX2NoYW4sICZwcnRkLT5kbWFfcmVxWzBdKTsKKwkJdGVncmFfZG1hX2RlcXVldWVfcmVxKHBydGQtPmRtYV9jaGFuLCAmcHJ0ZC0+ZG1hX3JlcVsxXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgdGVncmFfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgdGVncmFfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHBydGQtPnBlcmlvZF9pbmRleCAqIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworfQorCisKK3N0YXRpYyBpbnQgdGVncmFfcGNtX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCXJldHVybiBkbWFfbW1hcF93cml0ZWNvbWJpbmUoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwgdm1hLAorCQkJCQlydW50aW1lLT5kbWFfYXJlYSwKKwkJCQkJcnVudGltZS0+ZG1hX2FkZHIsCisJCQkJCXJ1bnRpbWUtPmRtYV9ieXRlcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgdGVncmFfcGNtX29wcyA9IHsKKwkub3BlbgkJPSB0ZWdyYV9wY21fb3BlbiwKKwkuY2xvc2UJCT0gdGVncmFfcGNtX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gdGVncmFfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHRlZ3JhX3BjbV9od19mcmVlLAorCS50cmlnZ2VyCT0gdGVncmFfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIJPSB0ZWdyYV9wY21fcG9pbnRlciwKKwkubW1hcAkJPSB0ZWdyYV9wY21fbW1hcCwKK307CisKK3N0YXRpYyBpbnQgdGVncmFfcGNtX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIoc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7CisJc2l6ZV90IHNpemUgPSB0ZWdyYV9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heDsKKworCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIHNpemUsCisJCQkJCQkmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+YXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOworCWJ1Zi0+ZGV2LmRldiA9IHBjbS0+Y2FyZC0+ZGV2OworCWJ1Zi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlidWYtPmJ5dGVzID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9wY21fZGVhbGxvY2F0ZV9kbWFfYnVmZmVyKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCisJaWYgKCFidWYtPmFyZWEpCisJCXJldHVybjsKKworCWRtYV9mcmVlX3dyaXRlY29tYmluZShwY20tPmNhcmQtPmRldiwgYnVmLT5ieXRlcywKKwkJCQlidWYtPmFyZWEsIGJ1Zi0+YWRkcik7CisJYnVmLT5hcmVhID0gTlVMTDsKK30KKworc3RhdGljIHU2NCB0ZWdyYV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBpbnQgdGVncmFfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCisJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmdGVncmFfZG1hX21hc2s7CisJaWYgKCFjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrKQorCQljYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZjsKKworCWlmIChkYWktPmRyaXZlci0+cGxheWJhY2suY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IHRlZ3JhX3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJCQkJCVNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJaWYgKGRhaS0+ZHJpdmVyLT5jYXB0dXJlLmNoYW5uZWxzX21pbikgeworCQlyZXQgPSB0ZWdyYV9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQkJCQlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZnJlZV9wbGF5OworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9wbGF5OgorCXRlZ3JhX3BjbV9kZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXRlZ3JhX3BjbV9kZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCXRlZ3JhX3BjbV9kZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKK30KKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVyIHRlZ3JhX3BjbV9wbGF0Zm9ybSA9IHsKKwkub3BzCQk9ICZ0ZWdyYV9wY21fb3BzLAorCS5wY21fbmV3CT0gdGVncmFfcGNtX25ldywKKwkucGNtX2ZyZWUJPSB0ZWdyYV9wY21fZnJlZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRlZ3JhX3BjbV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYsICZ0ZWdyYV9wY21fcGxhdGZvcm0pOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0ZWdyYV9wY21fcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9wY21fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gdGVncmFfcGNtX3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0ZWdyYV9wY21fcGxhdGZvcm1fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF90ZWdyYV9wY21faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRlZ3JhX3BjbV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc25kX3RlZ3JhX3BjbV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNuZF90ZWdyYV9wY21fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9wY21fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNuZF90ZWdyYV9wY21fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gV2FycmVuIDxzd2FycmVuQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhIFBDTSBBU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9wY20uaCBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9wY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmI5MDMzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX3BjbS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiB0ZWdyYV9wY20uaCAtIERlZmluaXRpb25zIGZvciBUZWdyYSBQQ00gZHJpdmVyCisgKgorICogQXV0aG9yOiBTdGVwaGVuIFdhcnJlbiA8c3dhcnJlbkBudmlkaWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gTlZJRElBLCBJbmMuCisgKgorICogQmFzZWQgb24gY29kZSBjb3B5cmlnaHQvYnk6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKyAqIFNjb3R0IFBldGVyc29uIDxzcGV0ZXJzb25AbnZpZGlhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKiBJbGl5YW4gTWFsY2hldiA8bWFsY2hldkBnb29nbGUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1RFR1JBX1BDTV9IX18KKyNkZWZpbmUgX19URUdSQV9QQ01fSF9fCisKKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCitzdHJ1Y3QgdGVncmFfcGNtX2RtYV9wYXJhbXMgeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIHdyYXA7CisJdW5zaWduZWQgbG9uZyB3aWR0aDsKKwl1bnNpZ25lZCBsb25nIHJlcV9zZWw7Cit9OworCitzdHJ1Y3QgdGVncmFfcnVudGltZV9kYXRhIHsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IHJ1bm5pbmc7CisJaW50IGRtYV9wb3M7CisJaW50IGRtYV9wb3NfZW5kOworCWludCBwZXJpb2RfaW5kZXg7CisJaW50IGRtYV9yZXFfaWR4OworCXN0cnVjdCB0ZWdyYV9kbWFfcmVxIGRtYV9yZXFbMl07CisJc3RydWN0IHRlZ3JhX2RtYV9jaGFubmVsICpkbWFfY2hhbjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc291bmRfY29yZS5jIGIvc291bmQvc291bmRfY29yZS5jCmluZGV4IDU1ODBhY2UuLjZjZTI3NzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvdW5kX2NvcmUuYworKysgYi9zb3VuZC9zb3VuZF9jb3JlLmMKQEAgLTM4NCw2ICszODQsOSBAQAogCSAgICBjYXNlIDQ6CiAJCW5hbWUgPSAiYXVkaW8iOwogCQlicmVhazsKKwkgICAgY2FzZSA1OgorCQluYW1lID0gImRzcFciOworCQlicmVhazsKIAkgICAgY2FzZSA4OgogCQluYW1lID0gInNlcXVlbmNlcjIiOwogCQlpZiAodW5pdCA+PSBTT1VORF9TVEVQKQpkaWZmIC0tZ2l0IGEvc291bmQvc291bmRfZmlybXdhcmUuYyBiL3NvdW5kL3NvdW5kX2Zpcm13YXJlLmMKaW5kZXggMzQwYTBiYy4uN2U5NjI0OSAxMDA2NDQKLS0tIGEvc291bmQvc291bmRfZmlybXdhcmUuYworKysgYi9zb3VuZC9zb3VuZF9maXJtd2FyZS5jCkBAIC0xOSw3ICsxOSw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIlVuYWJsZSB0byBsb2FkICclcycuXG4iLCBmbik7CiAJCXJldHVybiAwOwogCX0KLQlsID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplOworCWwgPSBpX3NpemVfcmVhZChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAobCA8PSAwIHx8IGwgPiAxMzEwNzIpCiAJewogCQlwcmludGsoS0VSTl9JTkZPICJJbnZhbGlkIGZpcm13YXJlICclcydcbiIsIGZuKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9NYWtlZmlsZSBiL3NvdW5kL3VzYi82ZmlyZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmNlNmVjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiLzZmaXJlL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorc25kLXVzYi02ZmlyZS1vYmpzICs9IGNoaXAubyBjb21tLm8gbWlkaS5vIGNvbnRyb2wubyBmaXJtd2FyZS5vIHBjbS5vCitvYmotJChDT05GSUdfU05EX1VTQl82RklSRSkgKz0gc25kLXVzYi02ZmlyZS5vCisKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9jaGlwLmMgYi9zb3VuZC91c2IvNmZpcmUvY2hpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZGNhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvNmZpcmUvY2hpcC5jCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogTWFpbiByb3V0aW5lcyBhbmQgbW9kdWxlIGRlZmluaXRpb25zLgorICoKKyAqIEF1dGhvcjoJVG9yc3RlbiBTY2hlbmsgPHRvcnN0ZW4uc2NoZW5rQHpvaG8uY29tPgorICogQ3JlYXRlZDoJSmFuIDAxLCAyMDExCisgKiBWZXJzaW9uOgkwLjMuMAorICogQ29weXJpZ2h0OgkoQykgVG9yc3RlbiBTY2hlbmsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlICJjaGlwLmgiCisjaW5jbHVkZSAiZmlybXdhcmUuaCIKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAiY29tbS5oIgorI2luY2x1ZGUgIm1pZGkuaCIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworTU9EVUxFX0FVVEhPUigiVG9yc3RlbiBTY2hlbmsgPHRvcnN0ZW4uc2NoZW5rQHpvaG8uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUZXJyYVRlYyBETVggNkZpcmUgVVNCIGF1ZGlvIGRyaXZlciwgdmVyc2lvbiAwLjMuMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VGVycmFUZWMsIERNWCA2RmlyZSBVU0J9fSIpOworCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOyAvKiBJbmRleCAwLW1heCAqLworc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOyAvKiBJZCBmb3IgY2FyZCAqLworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOyAvKiBFbmFibGUgY2FyZCAqLworc3RhdGljIHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwc1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BUUjsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlc1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BUUjsKKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciB0aGUgNmZpcmUgc291bmQgZGV2aWNlIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIHRoZSA2ZmlyZSBzb3VuZCBkZXZpY2UuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIHRoZSA2ZmlyZSBzb3VuZCBkZXZpY2UuIik7CisKK3N0YXRpYyBERUZJTkVfTVVURVgocmVnaXN0ZXJfbXV0ZXgpOworCitzdGF0aWMgdm9pZCB1c2I2ZmlyZV9jaGlwX2Fib3J0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKQoreworCWlmIChjaGlwKSB7CisJCWlmIChjaGlwLT5wY20pCisJCQl1c2I2ZmlyZV9wY21fYWJvcnQoY2hpcCk7CisJCWlmIChjaGlwLT5taWRpKQorCQkJdXNiNmZpcmVfbWlkaV9hYm9ydChjaGlwKTsKKwkJaWYgKGNoaXAtPmNvbW0pCisJCQl1c2I2ZmlyZV9jb21tX2Fib3J0KGNoaXApOworCQlpZiAoY2hpcC0+Y29udHJvbCkKKwkJCXVzYjZmaXJlX2NvbnRyb2xfYWJvcnQoY2hpcCk7CisJCWlmIChjaGlwLT5jYXJkKSB7CisJCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNoaXAtPmNhcmQpOworCQkJc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChjaGlwLT5jYXJkKTsKKwkJCWNoaXAtPmNhcmQgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2I2ZmlyZV9jaGlwX2Rlc3Ryb3koc3RydWN0IHNmaXJlX2NoaXAgKmNoaXApCit7CisJaWYgKGNoaXApIHsKKwkJaWYgKGNoaXAtPnBjbSkKKwkJCXVzYjZmaXJlX3BjbV9kZXN0cm95KGNoaXApOworCQlpZiAoY2hpcC0+bWlkaSkKKwkJCXVzYjZmaXJlX21pZGlfZGVzdHJveShjaGlwKTsKKwkJaWYgKGNoaXAtPmNvbW0pCisJCQl1c2I2ZmlyZV9jb21tX2Rlc3Ryb3koY2hpcCk7CisJCWlmIChjaGlwLT5jb250cm9sKQorCQkJdXNiNmZpcmVfY29udHJvbF9kZXN0cm95KGNoaXApOworCQlpZiAoY2hpcC0+Y2FyZCkKKwkJCXNuZF9jYXJkX2ZyZWUoY2hpcC0+Y2FyZCk7CisJfQorfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1c2I2ZmlyZV9jaGlwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisJc3RydWN0IHNmaXJlX2NoaXAgKmNoaXAgPSBOVUxMOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWludCByZWdpZHggPSAtMTsgLyogaW5kZXggaW4gbW9kdWxlIHBhcmFtZXRlciBhcnJheSAqLworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IE5VTEw7CisKKwkvKiBsb29rIGlmIHdlIGFscmVhZHkgc2VydmUgdGhpcyBjYXJkIGFuZCByZXR1cm4gaWYgc28gKi8KKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKKwkJaWYgKGRldmljZXNbaV0gPT0gZGV2aWNlKSB7CisJCQlpZiAoY2hpcHNbaV0pCisJCQkJY2hpcHNbaV0tPmludGZfY291bnQrKzsKKwkJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2hpcHNbaV0pOworCQkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChyZWdpZHggPCAwKQorCQkJcmVnaWR4ID0gaTsKKwl9CisJaWYgKHJlZ2lkeCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJ0b28gbWFueSBjYXJkcyByZWdpc3RlcmVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXZpY2VzW3JlZ2lkeF0gPSBkZXZpY2U7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisKKwkvKiBjaGVjaywgaWYgZmlybXdhcmUgaXMgcHJlc2VudCBvbiBkZXZpY2UsIHVwbG9hZCBpdCBpZiBub3QgKi8KKwlyZXQgPSB1c2I2ZmlyZV9md19pbml0KGludGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UgaWYgKHJldCA9PSBGV19OT1RfUkVBRFkpIC8qIGZpcm13YXJlIHVwZGF0ZSBwZXJmb3JtZWQgKi8KKwkJcmV0dXJuIDA7CisKKwkvKiBpZiB3ZSBhcmUgaGVyZSwgY2FyZCBjYW4gYmUgcmVnaXN0ZXJlZCBpbiBhbHNhLiAqLworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkZXZpY2UsIDAsIDApICE9IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImNhbid0IHNldCBmaXJzdCBpbnRlcmZhY2UuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtyZWdpZHhdLCBpZFtyZWdpZHhdLCBUSElTX01PRFVMRSwKKwkJCXNpemVvZihzdHJ1Y3Qgc2ZpcmVfY2hpcCksICZjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiY2Fubm90IGNyZWF0ZSBhbHNhIGNhcmQuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIjZGaXJlVVNCIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlRlcnJhVGVjIERNWDZGaXJlVVNCIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0ICVkOiVkIiwgY2FyZC0+c2hvcnRuYW1lLAorCQkJZGV2aWNlLT5idXMtPmJ1c251bSwgZGV2aWNlLT5kZXZudW0pOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmludGYtPmRldik7CisKKwljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNoaXBzW3JlZ2lkeF0gPSBjaGlwOworCWNoaXAtPmRldiA9IGRldmljZTsKKwljaGlwLT5yZWdpZHggPSByZWdpZHg7CisJY2hpcC0+aW50Zl9jb3VudCA9IDE7CisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisKKwlyZXQgPSB1c2I2ZmlyZV9jb21tX2luaXQoY2hpcCk7CisJaWYgKHJldCA8IDApIHsKKwkJdXNiNmZpcmVfY2hpcF9kZXN0cm95KGNoaXApOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYjZmaXJlX21pZGlfaW5pdChjaGlwKTsKKwlpZiAocmV0IDwgMCkgeworCQl1c2I2ZmlyZV9jaGlwX2Rlc3Ryb3koY2hpcCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdXNiNmZpcmVfcGNtX2luaXQoY2hpcCk7CisJaWYgKHJldCA8IDApIHsKKwkJdXNiNmZpcmVfY2hpcF9kZXN0cm95KGNoaXApOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYjZmaXJlX2NvbnRyb2xfaW5pdChjaGlwKTsKKwlpZiAocmV0IDwgMCkgeworCQl1c2I2ZmlyZV9jaGlwX2Rlc3Ryb3koY2hpcCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImNhbm5vdCByZWdpc3RlciBjYXJkLiIpOworCQl1c2I2ZmlyZV9jaGlwX2Rlc3Ryb3koY2hpcCk7CisJCXJldHVybiByZXQ7CisJfQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYjZmaXJlX2NoaXBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisKKwljaGlwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpZiAoY2hpcCkgeyAvKiBpZiAhY2hpcCwgZncgdXBsb2FkIGhhcyBiZWVuIHBlcmZvcm1lZCAqLworCQljYXJkID0gY2hpcC0+Y2FyZDsKKwkJY2hpcC0+aW50Zl9jb3VudC0tOworCQlpZiAoIWNoaXAtPmludGZfY291bnQpIHsKKwkJCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKKwkJCWRldmljZXNbY2hpcC0+cmVnaWR4XSA9IE5VTEw7CisJCQljaGlwc1tjaGlwLT5yZWdpZHhdID0gTlVMTDsKKwkJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOworCisJCQljaGlwLT5zaHV0ZG93biA9IHRydWU7CisJCQl1c2I2ZmlyZV9jaGlwX2Fib3J0KGNoaXApOworCQkJdXNiNmZpcmVfY2hpcF9kZXN0cm95KGNoaXApOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJeworCQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkJLmlkVmVuZG9yID0gMHgwY2NkLAorCQkuaWRQcm9kdWN0ID0gMHgwMDgwCisJfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkcml2ZXIgPSB7CisJLm5hbWUgPSAic25kLXVzYi02ZmlyZSIsCisJLnByb2JlID0gdXNiNmZpcmVfY2hpcF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHVzYjZmaXJlX2NoaXBfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2I2ZmlyZV9jaGlwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZkcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiNmZpcmVfY2hpcF9jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYjZmaXJlX2NoaXBfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2I2ZmlyZV9jaGlwX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiLzZmaXJlL2NoaXAuaCBiL3NvdW5kL3VzYi82ZmlyZS9jaGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDExZTVjYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9jaGlwLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVGVycmFUZWMgRE1YIDZGaXJlIFVTQgorICoKKyAqIEF1dGhvcjoJVG9yc3RlbiBTY2hlbmsgPHRvcnN0ZW4uc2NoZW5rQHpvaG8uY29tPgorICogQ3JlYXRlZDoJSmFuIDAxLCAyMDExCisgKiBWZXJzaW9uOgkwLjMuMAorICogQ29weXJpZ2h0OgkoQykgVG9yc3RlbiBTY2hlbmsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIFVTQjZGSVJFX0NISVBfSAorI2RlZmluZSBVU0I2RklSRV9DSElQX0gKKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdHJ1Y3Qgc2ZpcmVfY2hpcCB7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGludGZfY291bnQ7IC8qIG51bWJlciBvZiByZWdpc3RlcmVkIGludGVyZmFjZXMgKi8KKwlpbnQgcmVnaWR4OyAvKiBpbmRleCBpbiBtb2R1bGUgcGFyYW1ldGVyIGFycmF5cyAqLworCWJvb2wgc2h1dGRvd247CisKKwlzdHJ1Y3QgbWlkaV9ydW50aW1lICptaWRpOworCXN0cnVjdCBwY21fcnVudGltZSAqcGNtOworCXN0cnVjdCBjb250cm9sX3J1bnRpbWUgKmNvbnRyb2w7CisJc3RydWN0IGNvbW1fcnVudGltZSAqY29tbTsKK307CisjZW5kaWYgLyogVVNCNkZJUkVfQ0hJUF9IICovCisKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9jb21tLmMgYi9zb3VuZC91c2IvNmZpcmUvY29tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OTRkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvNmZpcmUvY29tbS5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogRGV2aWNlIGNvbW11bmljYXRpb25zCisgKgorICogQXV0aG9yOglUb3JzdGVuIFNjaGVuayA8dG9yc3Rlbi5zY2hlbmtAem9oby5jb20+CisgKiBDcmVhdGVkOglKYW4gMDEsIDIwMTEKKyAqIFZlcnNpb246CTAuMy4wCisgKiBDb3B5cmlnaHQ6CShDKSBUb3JzdGVuIFNjaGVuaworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgImNvbW0uaCIKKyNpbmNsdWRlICJjaGlwLmgiCisjaW5jbHVkZSAibWlkaS5oIgorCitlbnVtIHsKKwlDT01NX0VQID0gMSwKKwlDT01NX0ZQR0FfRVAgPSAyCit9OworCitzdGF0aWMgdm9pZCB1c2I2ZmlyZV9jb21tX2luaXRfdXJiKHN0cnVjdCBjb21tX3J1bnRpbWUgKnJ0LCBzdHJ1Y3QgdXJiICp1cmIsCisJCXU4ICpidWZmZXIsIHZvaWQgKmNvbnRleHQsIHZvaWQoKmhhbmRsZXIpKHN0cnVjdCB1cmIgKnVyYikpCit7CisJdXNiX2luaXRfdXJiKHVyYik7CisJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBidWZmZXI7CisJdXJiLT5waXBlID0gdXNiX3NuZGludHBpcGUocnQtPmNoaXAtPmRldiwgQ09NTV9FUCk7CisJdXJiLT5jb21wbGV0ZSA9IGhhbmRsZXI7CisJdXJiLT5jb250ZXh0ID0gY29udGV4dDsKKwl1cmItPmludGVydmFsID0gMTsKKwl1cmItPmRldiA9IHJ0LT5jaGlwLT5kZXY7Cit9CisKK3N0YXRpYyB2b2lkIHVzYjZmaXJlX2NvbW1fcmVjZWl2ZXJfaGFuZGxlcihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGNvbW1fcnVudGltZSAqcnQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IG1pZGlfcnVudGltZSAqbWlkaV9ydCA9IHJ0LT5jaGlwLT5taWRpOworCisJaWYgKCF1cmItPnN0YXR1cykgeworCQlpZiAocnQtPnJlY2VpdmVyX2J1ZmZlclswXSA9PSAweDEwKSAvKiBtaWRpIGluIGV2ZW50ICovCisJCQlpZiAobWlkaV9ydCkKKwkJCQltaWRpX3J0LT5pbl9yZWNlaXZlZChtaWRpX3J0LAorCQkJCQkJcnQtPnJlY2VpdmVyX2J1ZmZlciArIDIsCisJCQkJCQlydC0+cmVjZWl2ZXJfYnVmZmVyWzFdKTsKKwl9CisKKwlpZiAoIXJ0LT5jaGlwLT5zaHV0ZG93bikgeworCQl1cmItPnN0YXR1cyA9IDA7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCWlmICh1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpIDwgMCkKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAorCQkJCQkiY29tbSBkYXRhIHJlY2VpdmVyIGFib3J0ZWQuXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzYjZmaXJlX2NvbW1faW5pdF9idWZmZXIodTggKmJ1ZmZlciwgdTggaWQsIHU4IHJlcXVlc3QsCisJCXU4IHJlZywgdTggdmwsIHU4IHZoKQoreworCWJ1ZmZlclswXSA9IDB4MDE7CisJYnVmZmVyWzJdID0gcmVxdWVzdDsKKwlidWZmZXJbM10gPSBpZDsKKwlzd2l0Y2ggKHJlcXVlc3QpIHsKKwljYXNlIDB4MDI6CisJCWJ1ZmZlclsxXSA9IDB4MDU7IC8qIGxlbmd0aCAoc3RhcnRpbmcgYXQgYnVmZmVyWzJdKSAqLworCQlidWZmZXJbNF0gPSByZWc7CisJCWJ1ZmZlcls1XSA9IHZsOworCQlidWZmZXJbNl0gPSB2aDsKKwkJYnJlYWs7CisKKwljYXNlIDB4MTI6CisJCWJ1ZmZlclsxXSA9IDB4MGI7IC8qIGxlbmd0aCAoc3RhcnRpbmcgYXQgYnVmZmVyWzJdKSAqLworCQlidWZmZXJbNF0gPSAweDAwOworCQlidWZmZXJbNV0gPSAweDE4OworCQlidWZmZXJbNl0gPSAweDA1OworCQlidWZmZXJbN10gPSAweDAwOworCQlidWZmZXJbOF0gPSAweDAxOworCQlidWZmZXJbOV0gPSAweDAwOworCQlidWZmZXJbMTBdID0gMHg5ZTsKKwkJYnVmZmVyWzExXSA9IHJlZzsKKwkJYnVmZmVyWzEyXSA9IHZsOworCQlicmVhazsKKworCWNhc2UgMHgyMDoKKwljYXNlIDB4MjE6CisJY2FzZSAweDIyOgorCQlidWZmZXJbMV0gPSAweDA0OworCQlidWZmZXJbNF0gPSByZWc7CisJCWJ1ZmZlcls1XSA9IHZsOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfY29tbV9zZW5kX2J1ZmZlcih1OCAqYnVmZmVyLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisJaW50IGFjdHVhbF9sZW47CisKKwlyZXQgPSB1c2JfaW50ZXJydXB0X21zZyhkZXYsIHVzYl9zbmRpbnRwaXBlKGRldiwgQ09NTV9FUCksCisJCQlidWZmZXIsIGJ1ZmZlclsxXSArIDIsICZhY3R1YWxfbGVuLCBIWik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZSBpZiAoYWN0dWFsX2xlbiAhPSBidWZmZXJbMV0gKyAyKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9jb21tX3dyaXRlOChzdHJ1Y3QgY29tbV9ydW50aW1lICpydCwgdTggcmVxdWVzdCwKKwkJdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwl1OCBidWZmZXJbMTNdOyAvKiAxMzogbWF4aW11bSBsZW5ndGggb2YgbWVzc2FnZSAqLworCisJdXNiNmZpcmVfY29tbV9pbml0X2J1ZmZlcihidWZmZXIsIDB4MDAsIHJlcXVlc3QsIHJlZywgdmFsdWUsIDB4MDApOworCXJldHVybiB1c2I2ZmlyZV9jb21tX3NlbmRfYnVmZmVyKGJ1ZmZlciwgcnQtPmNoaXAtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfY29tbV93cml0ZTE2KHN0cnVjdCBjb21tX3J1bnRpbWUgKnJ0LCB1OCByZXF1ZXN0LAorCQl1OCByZWcsIHU4IHZsLCB1OCB2aCkKK3sKKwl1OCBidWZmZXJbMTNdOyAvKiAxMzogbWF4aW11bSBsZW5ndGggb2YgbWVzc2FnZSAqLworCisJdXNiNmZpcmVfY29tbV9pbml0X2J1ZmZlcihidWZmZXIsIDB4MDAsIHJlcXVlc3QsIHJlZywgdmwsIHZoKTsKKwlyZXR1cm4gdXNiNmZpcmVfY29tbV9zZW5kX2J1ZmZlcihidWZmZXIsIHJ0LT5jaGlwLT5kZXYpOworfQorCitpbnQgX19kZXZpbml0IHVzYjZmaXJlX2NvbW1faW5pdChzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgY29tbV9ydW50aW1lICpydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21tX3J1bnRpbWUpLAorCQkJR0ZQX0tFUk5FTCk7CisJc3RydWN0IHVyYiAqdXJiID0gJnJ0LT5yZWNlaXZlcjsKKwlpbnQgcmV0OworCisJaWYgKCFydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydC0+c2VyaWFsID0gMTsKKwlydC0+Y2hpcCA9IGNoaXA7CisJdXNiX2luaXRfdXJiKHVyYik7CisJcnQtPmluaXRfdXJiID0gdXNiNmZpcmVfY29tbV9pbml0X3VyYjsKKwlydC0+d3JpdGU4ID0gdXNiNmZpcmVfY29tbV93cml0ZTg7CisJcnQtPndyaXRlMTYgPSB1c2I2ZmlyZV9jb21tX3dyaXRlMTY7CisKKwkvKiBzdWJtaXQgYW4gdXJiIHRoYXQgcmVjZWl2ZXMgY29tbXVuaWNhdGlvbiBkYXRhIGZyb20gZGV2aWNlICovCisJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBydC0+cmVjZWl2ZXJfYnVmZmVyOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IENPTU1fUkVDRUlWRVJfQlVGU0laRTsKKwl1cmItPnBpcGUgPSB1c2JfcmN2aW50cGlwZShjaGlwLT5kZXYsIENPTU1fRVApOworCXVyYi0+ZGV2ID0gY2hpcC0+ZGV2OworCXVyYi0+Y29tcGxldGUgPSB1c2I2ZmlyZV9jb21tX3JlY2VpdmVyX2hhbmRsZXI7CisJdXJiLT5jb250ZXh0ID0gcnQ7CisJdXJiLT5pbnRlcnZhbCA9IDE7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJjYW5ub3QgY3JlYXRlIGNvbW0gZGF0YSByZWNlaXZlci4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY2hpcC0+Y29tbSA9IHJ0OworCXJldHVybiAwOworfQorCit2b2lkIHVzYjZmaXJlX2NvbW1fYWJvcnQoc3RydWN0IHNmaXJlX2NoaXAgKmNoaXApCit7CisJc3RydWN0IGNvbW1fcnVudGltZSAqcnQgPSBjaGlwLT5jb21tOworCisJaWYgKHJ0KQorCQl1c2JfcG9pc29uX3VyYigmcnQtPnJlY2VpdmVyKTsKK30KKwordm9pZCB1c2I2ZmlyZV9jb21tX2Rlc3Ryb3koc3RydWN0IHNmaXJlX2NoaXAgKmNoaXApCit7CisJa2ZyZWUoY2hpcC0+Y29tbSk7CisJY2hpcC0+Y29tbSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvNmZpcmUvY29tbS5oIGIvc291bmQvdXNiLzZmaXJlL2NvbW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM1ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiLzZmaXJlL2NvbW0uaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogQXV0aG9yOglUb3JzdGVuIFNjaGVuayA8dG9yc3Rlbi5zY2hlbmtAem9oby5jb20+CisgKiBDcmVhdGVkOglKYW4gMDEsIDIwMTEKKyAqIFZlcnNpb246CTAuMy4wCisgKiBDb3B5cmlnaHQ6CShDKSBUb3JzdGVuIFNjaGVuaworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgVVNCNkZJUkVfQ09NTV9ICisjZGVmaW5lIFVTQjZGSVJFX0NPTU1fSAorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK2VudW0gLyogc2V0dGluZ3MgZm9yIGNvbW0gKi8KK3sKKwlDT01NX1JFQ0VJVkVSX0JVRlNJWkUgPSA2NCwKK307CisKK3N0cnVjdCBjb21tX3J1bnRpbWUgeworCXN0cnVjdCBzZmlyZV9jaGlwICpjaGlwOworCisJc3RydWN0IHVyYiByZWNlaXZlcjsKKwl1OCByZWNlaXZlcl9idWZmZXJbQ09NTV9SRUNFSVZFUl9CVUZTSVpFXTsKKworCXU4IHNlcmlhbDsgLyogdXJiIHNlcmlhbCAqLworCisJdm9pZCAoKmluaXRfdXJiKShzdHJ1Y3QgY29tbV9ydW50aW1lICpydCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmZmVyLAorCQkJdm9pZCAqY29udGV4dCwgdm9pZCgqaGFuZGxlcikoc3RydWN0IHVyYiAqdXJiKSk7CisJLyogd3JpdGVzIGNvbnRyb2wgZGF0YSB0byB0aGUgZGV2aWNlICovCisJaW50ICgqd3JpdGU4KShzdHJ1Y3QgY29tbV9ydW50aW1lICpydCwgdTggcmVxdWVzdCwgdTggcmVnLCB1OCB2YWx1ZSk7CisJaW50ICgqd3JpdGUxNikoc3RydWN0IGNvbW1fcnVudGltZSAqcnQsIHU4IHJlcXVlc3QsIHU4IHJlZywKKwkJCXU4IHZoLCB1OCB2bCk7Cit9OworCitpbnQgX19kZXZpbml0IHVzYjZmaXJlX2NvbW1faW5pdChzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCk7Cit2b2lkIHVzYjZmaXJlX2NvbW1fYWJvcnQoc3RydWN0IHNmaXJlX2NoaXAgKmNoaXApOwordm9pZCB1c2I2ZmlyZV9jb21tX2Rlc3Ryb3koc3RydWN0IHNmaXJlX2NoaXAgKmNoaXApOworI2VuZGlmIC8qIFVTQjZGSVJFX0NPTU1fSCAqLworCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvNmZpcmUvY29tbW9uLmggYi9zb3VuZC91c2IvNmZpcmUvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiZWI0YQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9jb21tb24uaApAQCAtMCwwICsxLDMwIEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogQXV0aG9yOglUb3JzdGVuIFNjaGVuayA8dG9yc3Rlbi5zY2hlbmtAem9oby5jb20+CisgKiBDcmVhdGVkOglKYW4gMDEsIDIwMTEKKyAqIFZlcnNpb246CTAuMy4wCisgKiBDb3B5cmlnaHQ6CShDKSBUb3JzdGVuIFNjaGVuaworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBVU0I2RklSRV9DT01NT05fSAorI2RlZmluZSBVU0I2RklSRV9DT01NT05fSAorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKworI2RlZmluZSBQUkVGSVggIjZmaXJlOiAiCisKK3N0cnVjdCBzZmlyZV9jaGlwOworc3RydWN0IG1pZGlfcnVudGltZTsKK3N0cnVjdCBwY21fcnVudGltZTsKK3N0cnVjdCBjb250cm9sX3J1bnRpbWU7CitzdHJ1Y3QgY29tbV9ydW50aW1lOworI2VuZGlmIC8qIFVTQjZGSVJFX0NPTU1PTl9IICovCisKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9jb250cm9sLmMgYi9zb3VuZC91c2IvNmZpcmUvY29udHJvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ODQ2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvNmZpcmUvY29udHJvbC5jCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogTWl4ZXIgY29udHJvbAorICoKKyAqIEF1dGhvcjoJVG9yc3RlbiBTY2hlbmsgPHRvcnN0ZW4uc2NoZW5rQHpvaG8uY29tPgorICogQ3JlYXRlZDoJSmFuIDAxLCAyMDExCisgKiBWZXJzaW9uOgkwLjMuMAorICogQ29weXJpZ2h0OgkoQykgVG9yc3RlbiBTY2hlbmsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisKKyNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAiY29tbS5oIgorI2luY2x1ZGUgImNoaXAuaCIKKworc3RhdGljIGNoYXIgKm9wdF9jb2F4X3RleHRzWzJdID0geyAiT3B0aWNhbCIsICJDb2F4IiB9Oworc3RhdGljIGNoYXIgKmxpbmVfcGhvbm9fdGV4dHNbMl0gPSB7ICJMaW5lIiwgIlBob25vIiB9OworCisvKgorICogY2FsY3VsYXRlZCB3aXRoICR2YWx1ZVxbaVxdID0gMTI4IFxjZG90IHNxcnRbM117XGZyYWN7aX17MTI4fX0kCisgKiB0aGlzIGlzIGRvbmUgYmVjYXVzZSB0aGUgbGluZWFyIHZhbHVlcyBjYXVzZSByYXBpZCBkZWdyZWRhdGlvbgorICogb2Ygdm9sdW1lIGluIHRoZSB1cHBlcm1vc3QgcmVnaW9uLgorICovCitzdGF0aWMgY29uc3QgdTggbG9nX3ZvbHVtZV90YWJsZVsxMjhdID0geworCTB4MDAsIDB4MTksIDB4MjAsIDB4MjQsIDB4MjgsIDB4MmIsIDB4MmUsIDB4MzAsIDB4MzIsIDB4MzQsCisJMHgzNiwgMHgzOCwgMHgzYSwgMHgzYiwgMHgzZCwgMHgzZSwgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywKKwkweDQ0LCAweDQ2LCAweDQ3LCAweDQ4LCAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLAorCTB4NGUsIDB4NGYsIDB4NTAsIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsCisJMHg1NiwgMHg1NywgMHg1OCwgMHg1OCwgMHg1OSwgMHg1YSwgMHg1YiwgMHg1YiwgMHg1YywgMHg1YywKKwkweDVkLCAweDVlLCAweDVlLCAweDVmLCAweDYwLCAweDYwLCAweDYxLCAweDYxLCAweDYyLCAweDYyLAorCTB4NjMsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjUsIDB4NjYsIDB4NjYsIDB4NjcsIDB4NjcsIDB4NjgsCisJMHg2OCwgMHg2OSwgMHg2OSwgMHg2YSwgMHg2YSwgMHg2YiwgMHg2YiwgMHg2YywgMHg2YywgMHg2YywKKwkweDZkLCAweDZkLCAweDZlLCAweDZlLCAweDZmLCAweDZmLCAweDcwLCAweDcwLCAweDcwLCAweDcxLAorCTB4NzEsIDB4NzIsIDB4NzIsIDB4NzMsIDB4NzMsIDB4NzMsIDB4NzQsIDB4NzQsIDB4NzUsIDB4NzUsCisJMHg3NSwgMHg3NiwgMHg3NiwgMHg3NywgMHg3NywgMHg3NywgMHg3OCwgMHg3OCwgMHg3OCwgMHg3OSwKKwkweDc5LCAweDdhLCAweDdhLCAweDdhLCAweDdiLCAweDdiLCAweDdiLCAweDdjLCAweDdjLCAweDdjLAorCTB4N2QsIDB4N2QsIDB4N2QsIDB4N2UsIDB4N2UsIDB4N2UsIDB4N2YsIDB4N2YgfTsKKworLyoKKyAqIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBzZW50IHRvIGRldmljZS4gc2V0cyB1cCBjYXJkIGludGVybmFsIHN0dWZmLgorICogdmFsdWVzIGR1bXBlZCBmcm9tIHdpbmRvd3MgZHJpdmVyIGFuZCBmaWx0ZXJlZCBieSB0cmlhbCduJ2Vycm9yLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1OCB0eXBlOworCXU4IHJlZzsKKwl1OCB2YWx1ZTsKK30KK2luaXRfZGF0YVtdID0geworCXsgMHgyMiwgMHgwMCwgMHgwMCB9LCB7IDB4MjAsIDB4MDAsIDB4MDggfSwgeyAweDIyLCAweDAxLCAweDAxIH0sCisJeyAweDIwLCAweDAxLCAweDA4IH0sIHsgMHgyMiwgMHgwMiwgMHgwMCB9LCB7IDB4MjAsIDB4MDIsIDB4MDggfSwKKwl7IDB4MjIsIDB4MDMsIDB4MDAgfSwgeyAweDIwLCAweDAzLCAweDA4IH0sIHsgMHgyMiwgMHgwNCwgMHgwMCB9LAorCXsgMHgyMCwgMHgwNCwgMHgwOCB9LCB7IDB4MjIsIDB4MDUsIDB4MDEgfSwgeyAweDIwLCAweDA1LCAweDA4IH0sCisJeyAweDIyLCAweDA0LCAweDAxIH0sIHsgMHgxMiwgMHgwNCwgMHgwMCB9LCB7IDB4MTIsIDB4MDUsIDB4MDAgfSwKKwl7IDB4MTIsIDB4MGQsIDB4NzggfSwgeyAweDEyLCAweDIxLCAweDgyIH0sIHsgMHgxMiwgMHgyMiwgMHg4MCB9LAorCXsgMHgxMiwgMHgyMywgMHgwMCB9LCB7IDB4MTIsIDB4MDYsIDB4MDIgfSwgeyAweDEyLCAweDAzLCAweDAwIH0sCisJeyAweDEyLCAweDAyLCAweDAwIH0sIHsgMHgyMiwgMHgwMywgMHgwMSB9LAorCXsgMCB9IC8qIFRFUk1JTkFUSU5HIEVOVFJZICovCit9OworCitzdGF0aWMgdm9pZCB1c2I2ZmlyZV9jb250cm9sX21hc3Rlcl92b2xfdXBkYXRlKHN0cnVjdCBjb250cm9sX3J1bnRpbWUgKnJ0KQoreworCXN0cnVjdCBjb21tX3J1bnRpbWUgKmNvbW1fcnQgPSBydC0+Y2hpcC0+Y29tbTsKKwlpZiAoY29tbV9ydCkgeworCQkvKiBzZXQgdm9sdW1lICovCisJCWNvbW1fcnQtPndyaXRlOChjb21tX3J0LCAweDEyLCAweDBmLCAweDdmIC0KKwkJCQlsb2dfdm9sdW1lX3RhYmxlW3J0LT5tYXN0ZXJfdm9sXSk7CisJCSAvKiB1bm11dGUgKi8KKwkJY29tbV9ydC0+d3JpdGU4KGNvbW1fcnQsIDB4MTIsIDB4MGUsIDB4MDApOworCX0KK30KKworc3RhdGljIHZvaWQgdXNiNmZpcmVfY29udHJvbF9saW5lX3Bob25vX3VwZGF0ZShzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpydCkKK3sKKwlzdHJ1Y3QgY29tbV9ydW50aW1lICpjb21tX3J0ID0gcnQtPmNoaXAtPmNvbW07CisJaWYgKGNvbW1fcnQpIHsKKwkJY29tbV9ydC0+d3JpdGU4KGNvbW1fcnQsIDB4MjIsIDB4MDIsIHJ0LT5saW5lX3Bob25vX3N3aXRjaCk7CisJCWNvbW1fcnQtPndyaXRlOChjb21tX3J0LCAweDIxLCAweDAyLCBydC0+bGluZV9waG9ub19zd2l0Y2gpOworCX0KK30KKworc3RhdGljIHZvaWQgdXNiNmZpcmVfY29udHJvbF9vcHRfY29heF91cGRhdGUoc3RydWN0IGNvbnRyb2xfcnVudGltZSAqcnQpCit7CisJc3RydWN0IGNvbW1fcnVudGltZSAqY29tbV9ydCA9IHJ0LT5jaGlwLT5jb21tOworCWlmIChjb21tX3J0KSB7CisJCWNvbW1fcnQtPndyaXRlOChjb21tX3J0LCAweDIyLCAweDAwLCBydC0+b3B0X2NvYXhfc3dpdGNoKTsKKwkJY29tbV9ydC0+d3JpdGU4KGNvbW1fcnQsIDB4MjEsIDB4MDAsIHJ0LT5vcHRfY29heF9zd2l0Y2gpOworCX0KK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9jb250cm9sX21hc3Rlcl92b2xfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTI3OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX2NvbnRyb2xfbWFzdGVyX3ZvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBjb250cm9sX3J1bnRpbWUgKnJ0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBjaGFuZ2VkID0gMDsKKwlpZiAocnQtPm1hc3Rlcl92b2wgIT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKKwkJcnQtPm1hc3Rlcl92b2wgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwkJdXNiNmZpcmVfY29udHJvbF9tYXN0ZXJfdm9sX3VwZGF0ZShydCk7CisJCWNoYW5nZWQgPSAxOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9jb250cm9sX21hc3Rlcl92b2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpydCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHJ0LT5tYXN0ZXJfdm9sOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX2NvbnRyb2xfbGluZV9waG9ub19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID4gMSkKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDE7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJCQlsaW5lX3Bob25vX3RleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9jb250cm9sX2xpbmVfcGhvbm9fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpydCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlZCA9IDA7CisJaWYgKHJ0LT5saW5lX3Bob25vX3N3aXRjaCAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworCQlydC0+bGluZV9waG9ub19zd2l0Y2ggPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwkJdXNiNmZpcmVfY29udHJvbF9saW5lX3Bob25vX3VwZGF0ZShydCk7CisJCWNoYW5nZWQgPSAxOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9jb250cm9sX2xpbmVfcGhvbm9fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpydCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHJ0LT5saW5lX3Bob25vX3N3aXRjaDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9jb250cm9sX29wdF9jb2F4X2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAxKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkJCW9wdF9jb2F4X3RleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9jb250cm9sX29wdF9jb2F4X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGNvbnRyb2xfcnVudGltZSAqcnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGNoYW5nZWQgPSAwOworCisJaWYgKHJ0LT5vcHRfY29heF9zd2l0Y2ggIT0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgeworCQlydC0+b3B0X2NvYXhfc3dpdGNoID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKwkJdXNiNmZpcmVfY29udHJvbF9vcHRfY29heF91cGRhdGUocnQpOworCQljaGFuZ2VkID0gMTsKKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfY29udHJvbF9vcHRfY29heF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBjb250cm9sX3J1bnRpbWUgKnJ0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBydC0+b3B0X2NvYXhfc3dpdGNoOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IF9fZGV2aW5pdGRhdGEgc25kX2tjb250cm9sX25ldyBlbGVtZW50c1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkuaW5kZXggPSAwLAorCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKKwkJLmluZm8gPSB1c2I2ZmlyZV9jb250cm9sX21hc3Rlcl92b2xfaW5mbywKKwkJLmdldCA9IHVzYjZmaXJlX2NvbnRyb2xfbWFzdGVyX3ZvbF9nZXQsCisJCS5wdXQgPSB1c2I2ZmlyZV9jb250cm9sX21hc3Rlcl92b2xfcHV0CisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJMaW5lL1Bob25vIENhcHR1cmUgUm91dGUiLAorCQkuaW5kZXggPSAwLAorCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKKwkJLmluZm8gPSB1c2I2ZmlyZV9jb250cm9sX2xpbmVfcGhvbm9faW5mbywKKwkJLmdldCA9IHVzYjZmaXJlX2NvbnRyb2xfbGluZV9waG9ub19nZXQsCisJCS5wdXQgPSB1c2I2ZmlyZV9jb250cm9sX2xpbmVfcGhvbm9fcHV0CisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJPcHQvQ29heCBDYXB0dXJlIFJvdXRlIiwKKwkJLmluZGV4ID0gMCwKKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJCS5pbmZvID0gdXNiNmZpcmVfY29udHJvbF9vcHRfY29heF9pbmZvLAorCQkuZ2V0ID0gdXNiNmZpcmVfY29udHJvbF9vcHRfY29heF9nZXQsCisJCS5wdXQgPSB1c2I2ZmlyZV9jb250cm9sX29wdF9jb2F4X3B1dAorCX0sCisJe30KK307CisKK2ludCBfX2RldmluaXQgdXNiNmZpcmVfY29udHJvbF9pbml0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKQoreworCWludCBpOworCWludCByZXQ7CisJc3RydWN0IGNvbnRyb2xfcnVudGltZSAqcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29udHJvbF9ydW50aW1lKSwKKwkJCUdGUF9LRVJORUwpOworCXN0cnVjdCBjb21tX3J1bnRpbWUgKmNvbW1fcnQgPSBjaGlwLT5jb21tOworCisJaWYgKCFydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydC0+Y2hpcCA9IGNoaXA7CisKKwlpID0gMDsKKwl3aGlsZSAoaW5pdF9kYXRhW2ldLnR5cGUpIHsKKwkJY29tbV9ydC0+d3JpdGU4KGNvbW1fcnQsIGluaXRfZGF0YVtpXS50eXBlLCBpbml0X2RhdGFbaV0ucmVnLAorCQkJCWluaXRfZGF0YVtpXS52YWx1ZSk7CisJCWkrKzsKKwl9CisKKwl1c2I2ZmlyZV9jb250cm9sX29wdF9jb2F4X3VwZGF0ZShydCk7CisJdXNiNmZpcmVfY29udHJvbF9saW5lX3Bob25vX3VwZGF0ZShydCk7CisJdXNiNmZpcmVfY29udHJvbF9tYXN0ZXJfdm9sX3VwZGF0ZShydCk7CisKKwlpID0gMDsKKwl3aGlsZSAoZWxlbWVudHNbaV0ubmFtZSkgeworCQlyZXQgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJmVsZW1lbnRzW2ldLCBydCkpOworCQlpZiAocmV0IDwgMCkgeworCQkJa2ZyZWUocnQpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImNhbm5vdCBhZGQgY29udHJvbC5cbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpKys7CisJfQorCisJY2hpcC0+Y29udHJvbCA9IHJ0OworCXJldHVybiAwOworfQorCit2b2lkIHVzYjZmaXJlX2NvbnRyb2xfYWJvcnQoc3RydWN0IHNmaXJlX2NoaXAgKmNoaXApCit7fQorCit2b2lkIHVzYjZmaXJlX2NvbnRyb2xfZGVzdHJveShzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCkKK3sKKwlrZnJlZShjaGlwLT5jb250cm9sKTsKKwljaGlwLT5jb250cm9sID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9jb250cm9sLmggYi9zb3VuZC91c2IvNmZpcmUvY29udHJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MzRjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvNmZpcmUvY29udHJvbC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBMaW51eCBkcml2ZXIgZm9yIFRlcnJhVGVjIERNWCA2RmlyZSBVU0IKKyAqCisgKiBBdXRob3I6CVRvcnN0ZW4gU2NoZW5rIDx0b3JzdGVuLnNjaGVua0B6b2hvLmNvbT4KKyAqIENyZWF0ZWQ6CUphbiAwMSwgMjAxMQorICogVmVyc2lvbjoJMC4zLjAKKyAqIENvcHlyaWdodDoJKEMpIFRvcnN0ZW4gU2NoZW5rCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIFVTQjZGSVJFX0NPTlRST0xfSAorI2RlZmluZSBVU0I2RklSRV9DT05UUk9MX0gKKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitlbnVtIHsKKwlDT05UUk9MX01BWF9FTEVNRU5UUyA9IDMyCit9OworCitzdHJ1Y3QgY29udHJvbF9ydW50aW1lIHsKKwlzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcDsKKworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmVsZW1lbnRbQ09OVFJPTF9NQVhfRUxFTUVOVFNdOworCWJvb2wgb3B0X2NvYXhfc3dpdGNoOworCWJvb2wgbGluZV9waG9ub19zd2l0Y2g7CisJdTggbWFzdGVyX3ZvbDsKK307CisKK2ludCBfX2RldmluaXQgdXNiNmZpcmVfY29udHJvbF9pbml0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKTsKK3ZvaWQgdXNiNmZpcmVfY29udHJvbF9hYm9ydChzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCk7Cit2b2lkIHVzYjZmaXJlX2NvbnRyb2xfZGVzdHJveShzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCk7CisjZW5kaWYgLyogVVNCNkZJUkVfQ09OVFJPTF9IICovCisKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jIGIvc291bmQvdXNiLzZmaXJlL2Zpcm13YXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4MWE1NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCkBAIC0wLDAgKzEsNDI2IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogRmlybXdhcmUgbG9hZGVyCisgKgorICogQ3VycmVudGx5IG5vdCB3b3JraW5nIGZvciBhbGwgZGV2aWNlcy4gVG8gYmUgYWJsZSB0byB1c2UgdGhlIGRldmljZQorICogaW4gbGludXgsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gbGV0IHRoZSB3aW5kb3dzIGRyaXZlciB1cGxvYWQgdGhlIGZpcm13YXJlLgorICogRm9yIHRoYXQsIHN0YXJ0IHRoZSBjb21wdXRlciBpbiB3aW5kb3dzIGFuZCByZWJvb3QuCisgKiBBcyBsb25nIGFzIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIHRoZSBwb3dlciBzdXBwbHksIG5vIGZpcm13YXJlIHJlbG9hZAorICogbmVlZHMgdG8gYmUgcGVyZm9ybWVkLgorICoKKyAqIEF1dGhvcjoJVG9yc3RlbiBTY2hlbmsgPHRvcnN0ZW4uc2NoZW5rQHpvaG8uY29tPgorICogQ3JlYXRlZDoJSmFuIDAxLCAyMDExCisgKiBWZXJzaW9uOgkwLjMuMAorICogQ29weXJpZ2h0OgkoQykgVG9yc3RlbiBTY2hlbmsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAiZmlybXdhcmUuaCIKKyNpbmNsdWRlICJjaGlwLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiNmZpcmUvZG14NmZpcmVsMi5paHgiKTsKK01PRFVMRV9GSVJNV0FSRSgiNmZpcmUvZG14NmZpcmVhcC5paHgiKTsKK01PRFVMRV9GSVJNV0FSRSgiNmZpcmUvZG14NmZpcmVjZi5iaW4iKTsKKworZW51bSB7CisJRlBHQV9CVUZTSVpFID0gNTEyLCBGUEdBX0VQID0gMgorfTsKKworc3RhdGljIGNvbnN0IHU4IEJJVF9SRVZFUlNFX1RBQkxFWzI1Nl0gPSB7CisJMHgwMCwgMHg4MCwgMHg0MCwgMHhjMCwgMHgyMCwgMHhhMCwgMHg2MCwgMHhlMCwgMHgxMCwgMHg5MCwgMHg1MCwKKwkweGQwLCAweDMwLCAweGIwLCAweDcwLCAweGYwLCAweDA4LCAweDg4LCAweDQ4LCAweGM4LCAweDI4LCAweGE4LAorCTB4NjgsIDB4ZTgsIDB4MTgsIDB4OTgsIDB4NTgsIDB4ZDgsIDB4MzgsIDB4YjgsIDB4NzgsIDB4ZjgsIDB4MDQsCisJMHg4NCwgMHg0NCwgMHhjNCwgMHgyNCwgMHhhNCwgMHg2NCwgMHhlNCwgMHgxNCwgMHg5NCwgMHg1NCwgMHhkNCwKKwkweDM0LCAweGI0LCAweDc0LCAweGY0LCAweDBjLCAweDhjLCAweDRjLCAweGNjLCAweDJjLCAweGFjLCAweDZjLAorCTB4ZWMsIDB4MWMsIDB4OWMsIDB4NWMsIDB4ZGMsIDB4M2MsIDB4YmMsIDB4N2MsIDB4ZmMsIDB4MDIsIDB4ODIsCisJMHg0MiwgMHhjMiwgMHgyMiwgMHhhMiwgMHg2MiwgMHhlMiwgMHgxMiwgMHg5MiwgMHg1MiwgMHhkMiwgMHgzMiwKKwkweGIyLCAweDcyLCAweGYyLCAweDBhLCAweDhhLCAweDRhLCAweGNhLCAweDJhLCAweGFhLCAweDZhLCAweGVhLAorCTB4MWEsIDB4OWEsIDB4NWEsIDB4ZGEsIDB4M2EsIDB4YmEsIDB4N2EsIDB4ZmEsIDB4MDYsIDB4ODYsIDB4NDYsCisJMHhjNiwgMHgyNiwgMHhhNiwgMHg2NiwgMHhlNiwgMHgxNiwgMHg5NiwgMHg1NiwgMHhkNiwgMHgzNiwgMHhiNiwKKwkweDc2LCAweGY2LCAweDBlLCAweDhlLCAweDRlLCAweGNlLCAweDJlLCAweGFlLCAweDZlLCAweGVlLCAweDFlLAorCTB4OWUsIDB4NWUsIDB4ZGUsIDB4M2UsIDB4YmUsIDB4N2UsIDB4ZmUsIDB4MDEsIDB4ODEsIDB4NDEsIDB4YzEsCisJMHgyMSwgMHhhMSwgMHg2MSwgMHhlMSwgMHgxMSwgMHg5MSwgMHg1MSwgMHhkMSwgMHgzMSwgMHhiMSwgMHg3MSwKKwkweGYxLCAweDA5LCAweDg5LCAweDQ5LCAweGM5LCAweDI5LCAweGE5LCAweDY5LCAweGU5LCAweDE5LCAweDk5LAorCTB4NTksIDB4ZDksIDB4MzksIDB4YjksIDB4NzksIDB4ZjksIDB4MDUsIDB4ODUsIDB4NDUsIDB4YzUsIDB4MjUsCisJMHhhNSwgMHg2NSwgMHhlNSwgMHgxNSwgMHg5NSwgMHg1NSwgMHhkNSwgMHgzNSwgMHhiNSwgMHg3NSwgMHhmNSwKKwkweDBkLCAweDhkLCAweDRkLCAweGNkLCAweDJkLCAweGFkLCAweDZkLCAweGVkLCAweDFkLCAweDlkLCAweDVkLAorCTB4ZGQsIDB4M2QsIDB4YmQsIDB4N2QsIDB4ZmQsIDB4MDMsIDB4ODMsIDB4NDMsIDB4YzMsIDB4MjMsIDB4YTMsCisJMHg2MywgMHhlMywgMHgxMywgMHg5MywgMHg1MywgMHhkMywgMHgzMywgMHhiMywgMHg3MywgMHhmMywgMHgwYiwKKwkweDhiLCAweDRiLCAweGNiLCAweDJiLCAweGFiLCAweDZiLCAweGViLCAweDFiLCAweDliLCAweDViLCAweGRiLAorCTB4M2IsIDB4YmIsIDB4N2IsIDB4ZmIsIDB4MDcsIDB4ODcsIDB4NDcsIDB4YzcsIDB4MjcsIDB4YTcsIDB4NjcsCisJMHhlNywgMHgxNywgMHg5NywgMHg1NywgMHhkNywgMHgzNywgMHhiNywgMHg3NywgMHhmNywgMHgwZiwgMHg4ZiwKKwkweDRmLCAweGNmLCAweDJmLCAweGFmLCAweDZmLCAweGVmLCAweDFmLCAweDlmLCAweDVmLCAweGRmLCAweDNmLAorCTB4YmYsIDB4N2YsIDB4ZmYgfTsKKworLyoKKyAqIHdNYXhQYWNrZXRTaXplIG9mIHBjbSBlbmRwb2ludHMuCisgKiBrZWVwIHN5bmNlZCB3aXRoIHJhdGVzX2luX3BhY2tldF9zaXplIGFuZCByYXRlc19vdXRfcGFja2V0X3NpemUgaW4gcGNtLmMKKyAqIGZwcDogZnJhbWVzIHBlciBpc29wYWNrZXQKKyAqCisgKiBDQVVUSU9OOiBrZWVwIHNpemVvZiA8PSBidWZmZXJbXSBpbiB1c2I2ZmlyZV9md19pbml0CisgKi8KK3N0YXRpYyBjb25zdCB1OCBlcF93X21heF9wYWNrZXRfc2l6ZVtdID0geworCTB4ZTQsIDB4MDAsIDB4ZTQsIDB4MDAsIC8qIGFsdCAxOiAyMjggRVAyIGFuZCBFUDYgKDcgZnBwKSAqLworCTB4YTQsIDB4MDEsIDB4YTQsIDB4MDEsIC8qIGFsdCAyOiA0MjAgRVAyIGFuZCBFUDYgKDEzIGZwcCkqLworCTB4OTQsIDB4MDEsIDB4NWMsIDB4MDIgIC8qIGFsdCAzOiA0MDQgRVAyIGFuZCA2MDQgRVA2ICgyNSBmcHApICovCit9OworCitzdHJ1Y3QgaWhleF9yZWNvcmQgeworCXUxNiBhZGRyZXNzOworCXU4IGxlbjsKKwl1OCBkYXRhWzI1Nl07CisJY2hhciBlcnJvcjsgLyogdHJ1ZSBpZiBhbiBlcnJvciBvY2N1cmVkIHBhcnNpbmcgdGhpcyByZWNvcmQgKi8KKworCXU4IG1heF9sZW47IC8qIG1heGltdW0gcmVjb3JkIGxlbmd0aCBpbiB3aG9sZSBpaGV4ICovCisKKwkvKiBwcml2YXRlICovCisJY29uc3QgY2hhciAqdHh0X2RhdGE7CisJdW5zaWduZWQgaW50IHR4dF9sZW5ndGg7CisJdW5zaWduZWQgaW50IHR4dF9vZmZzZXQ7IC8qIGN1cnJlbnQgcG9zaXRpb24gaW4gdHh0X2RhdGEgKi8KK307CisKK3N0YXRpYyB1OCB1c2I2ZmlyZV9md19paGV4X25pYmJsZShjb25zdCB1OCBuKQoreworCWlmIChuID49ICcwJyAmJiBuIDw9ICc5JykKKwkJcmV0dXJuIG4gLSAnMCc7CisJZWxzZSBpZiAobiA+PSAnQScgJiYgbiA8PSAnRicpCisJCXJldHVybiBuIC0gKCdBJyAtIDEwKTsKKwllbHNlIGlmIChuID49ICdhJyAmJiBuIDw9ICdmJykKKwkJcmV0dXJuIG4gLSAoJ2EnIC0gMTApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggdXNiNmZpcmVfZndfaWhleF9oZXgoY29uc3QgdTggKmRhdGEsIHU4ICpjcmMpCit7CisJdTggdmFsID0gKHVzYjZmaXJlX2Z3X2loZXhfbmliYmxlKGRhdGFbMF0pIDw8IDQpIHwKKwkJCXVzYjZmaXJlX2Z3X2loZXhfbmliYmxlKGRhdGFbMV0pOworCSpjcmMgKz0gdmFsOworCXJldHVybiB2YWw7Cit9CisKKy8qCisgKiByZXR1cm5zIHRydWUgaWYgcmVjb3JkIGlzIGF2YWlsYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICogaWZmIGFuIGVycm9yIG9jY3VyZWQsIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQgYW5kIHJlY29yZC0+ZXJyb3Igd2lsbCBiZSB0cnVlLgorICovCitzdGF0aWMgYm9vbCB1c2I2ZmlyZV9md19paGV4X25leHRfcmVjb3JkKHN0cnVjdCBpaGV4X3JlY29yZCAqcmVjb3JkKQoreworCXU4IGNyYyA9IDA7CisJdTggdHlwZTsKKwlpbnQgaTsKKworCXJlY29yZC0+ZXJyb3IgPSBmYWxzZTsKKworCS8qIGZpbmQgYmVnaW4gb2YgcmVjb3JkIChtYXJrZWQgYnkgYSBjb2xvbikgKi8KKwl3aGlsZSAocmVjb3JkLT50eHRfb2Zmc2V0IDwgcmVjb3JkLT50eHRfbGVuZ3RoCisJCQkmJiByZWNvcmQtPnR4dF9kYXRhW3JlY29yZC0+dHh0X29mZnNldF0gIT0gJzonKQorCQlyZWNvcmQtPnR4dF9vZmZzZXQrKzsKKwlpZiAocmVjb3JkLT50eHRfb2Zmc2V0ID09IHJlY29yZC0+dHh0X2xlbmd0aCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgbmVlZGVkIGZvciBsZW4sIGFkZHIgYW5kIHR5cGUgZW50cmllcyAqLworCXJlY29yZC0+dHh0X29mZnNldCsrOworCWlmIChyZWNvcmQtPnR4dF9vZmZzZXQgKyA4ID4gcmVjb3JkLT50eHRfbGVuZ3RoKSB7CisJCXJlY29yZC0+ZXJyb3IgPSB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmVjb3JkLT5sZW4gPSB1c2I2ZmlyZV9md19paGV4X2hleChyZWNvcmQtPnR4dF9kYXRhICsKKwkJCXJlY29yZC0+dHh0X29mZnNldCwgJmNyYyk7CisJcmVjb3JkLT50eHRfb2Zmc2V0ICs9IDI7CisJcmVjb3JkLT5hZGRyZXNzID0gdXNiNmZpcmVfZndfaWhleF9oZXgocmVjb3JkLT50eHRfZGF0YSArCisJCQlyZWNvcmQtPnR4dF9vZmZzZXQsICZjcmMpIDw8IDg7CisJcmVjb3JkLT50eHRfb2Zmc2V0ICs9IDI7CisJcmVjb3JkLT5hZGRyZXNzIHw9IHVzYjZmaXJlX2Z3X2loZXhfaGV4KHJlY29yZC0+dHh0X2RhdGEgKworCQkJcmVjb3JkLT50eHRfb2Zmc2V0LCAmY3JjKTsKKwlyZWNvcmQtPnR4dF9vZmZzZXQgKz0gMjsKKwl0eXBlID0gdXNiNmZpcmVfZndfaWhleF9oZXgocmVjb3JkLT50eHRfZGF0YSArCisJCQlyZWNvcmQtPnR4dF9vZmZzZXQsICZjcmMpOworCXJlY29yZC0+dHh0X29mZnNldCArPSAyOworCisJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgbmVlZGVkIGZvciBkYXRhIGFuZCBjcmMgZW50cmllcyAqLworCWlmIChyZWNvcmQtPnR4dF9vZmZzZXQgKyAyICogKHJlY29yZC0+bGVuICsgMSkgPiByZWNvcmQtPnR4dF9sZW5ndGgpIHsKKwkJcmVjb3JkLT5lcnJvciA9IHRydWU7CisJCXJldHVybiBmYWxzZTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHJlY29yZC0+bGVuOyBpKyspIHsKKwkJcmVjb3JkLT5kYXRhW2ldID0gdXNiNmZpcmVfZndfaWhleF9oZXgocmVjb3JkLT50eHRfZGF0YQorCQkJCSsgcmVjb3JkLT50eHRfb2Zmc2V0LCAmY3JjKTsKKwkJcmVjb3JkLT50eHRfb2Zmc2V0ICs9IDI7CisJfQorCXVzYjZmaXJlX2Z3X2loZXhfaGV4KHJlY29yZC0+dHh0X2RhdGEgKyByZWNvcmQtPnR4dF9vZmZzZXQsICZjcmMpOworCWlmIChjcmMpIHsKKwkJcmVjb3JkLT5lcnJvciA9IHRydWU7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAodHlwZSA9PSAxIHx8ICFyZWNvcmQtPmxlbikgLyogZW9mICovCisJCXJldHVybiBmYWxzZTsKKwllbHNlIGlmICh0eXBlID09IDApCisJCXJldHVybiB0cnVlOworCWVsc2UgeworCQlyZWNvcmQtPmVycm9yID0gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9md19paGV4X2luaXQoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKKwkJc3RydWN0IGloZXhfcmVjb3JkICpyZWNvcmQpCit7CisJcmVjb3JkLT50eHRfZGF0YSA9IGZ3LT5kYXRhOworCXJlY29yZC0+dHh0X2xlbmd0aCA9IGZ3LT5zaXplOworCXJlY29yZC0+dHh0X29mZnNldCA9IDA7CisJcmVjb3JkLT5tYXhfbGVuID0gMDsKKwkvKiByZWFkIGFsbCByZWNvcmRzLCBpZiBsb29wIGVuZHMsIHJlY29yZC0+ZXJyb3IgaW5kaWNhdGVzLAorCSAqIHdoZXRoZXIgaWhleCBpcyB2YWxpZC4gKi8KKwl3aGlsZSAodXNiNmZpcmVfZndfaWhleF9uZXh0X3JlY29yZChyZWNvcmQpKQorCQlyZWNvcmQtPm1heF9sZW4gPSBtYXgocmVjb3JkLT5sZW4sIHJlY29yZC0+bWF4X2xlbik7CisJaWYgKHJlY29yZC0+ZXJyb3IpCisJCXJldHVybiAtRUlOVkFMOworCXJlY29yZC0+dHh0X29mZnNldCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfZndfZXp1c2Jfd3JpdGUoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwKKwkJaW50IHR5cGUsIGludCB2YWx1ZSwgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldmljZSwgdXNiX3NuZGN0cmxwaXBlKGRldmljZSwgMCksIHR5cGUsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwgMCwgZGF0YSwgbGVuLCBIWik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZSBpZiAocmV0ICE9IGxlbikKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfZndfZXp1c2JfcmVhZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLAorCQlpbnQgdHlwZSwgaW50IHZhbHVlLCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQgPSB1c2JfY29udHJvbF9tc2coZGV2aWNlLCB1c2JfcmN2Y3RybHBpcGUoZGV2aWNlLCAwKSwgdHlwZSwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwKKwkJCTAsIGRhdGEsIGxlbiwgSFopOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UgaWYgKHJldCAhPSBsZW4pCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX2Z3X2ZwZ2Ffd3JpdGUoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwKKwkJY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgYWN0dWFsX2xlbjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2J1bGtfbXNnKGRldmljZSwgdXNiX3NuZGJ1bGtwaXBlKGRldmljZSwgRlBHQV9FUCksIGRhdGEsIGxlbiwKKwkJCSZhY3R1YWxfbGVuLCBIWik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZSBpZiAoYWN0dWFsX2xlbiAhPSBsZW4pCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX2Z3X2V6dXNiX3VwbG9hZCgKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IGNoYXIgKmZ3bmFtZSwKKwkJdW5zaWduZWQgaW50IHBvc3RhZGRyLCB1OCAqcG9zdGRhdGEsIHVuc2lnbmVkIGludCBwb3N0bGVuKQoreworCWludCByZXQ7CisJdTggZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gMDsKKwlzdHJ1Y3QgaWhleF9yZWNvcmQgKnJlYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpaGV4X3JlY29yZCksCisJCQlHRlBfS0VSTkVMKTsKKworCWlmICghcmVjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd25hbWUsICZkZXZpY2UtPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJa2ZyZWUocmVjKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHJlcXVlc3RpbmcgZXp1c2IgIgorCQkJCSJmaXJtd2FyZSAlcy5cbiIsIGZ3bmFtZSk7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IHVzYjZmaXJlX2Z3X2loZXhfaW5pdChmdywgcmVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShyZWMpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJyb3IgdmFsaWRhdGluZyBlenVzYiAiCisJCQkJImZpcm13YXJlICVzLlxuIiwgZnduYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogdXBsb2FkIGZpcm13YXJlIGltYWdlICovCisJZGF0YSA9IDB4MDE7IC8qIHN0b3AgZXp1c2IgY3B1ICovCisJcmV0ID0gdXNiNmZpcmVfZndfZXp1c2Jfd3JpdGUoZGV2aWNlLCAweGEwLCAweGU2MDAsICZkYXRhLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShyZWMpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggInVuYWJsZSB0byB1cGxvYWQgZXp1c2IgIgorCQkJCSJmaXJtd2FyZSAlczogYmVnaW4gbWVzc2FnZS5cbiIsIGZ3bmFtZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJd2hpbGUgKHVzYjZmaXJlX2Z3X2loZXhfbmV4dF9yZWNvcmQocmVjKSkgeyAvKiB3cml0ZSBmaXJtd2FyZSAqLworCQlyZXQgPSB1c2I2ZmlyZV9md19lenVzYl93cml0ZShkZXZpY2UsIDB4YTAsIHJlYy0+YWRkcmVzcywKKwkJCQlyZWMtPmRhdGEsIHJlYy0+bGVuKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWtmcmVlKHJlYyk7CisJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJ1bmFibGUgdG8gdXBsb2FkIGV6dXNiICIKKwkJCQkJImZpcm13YXJlICVzOiBkYXRhIHVyYi5cbiIsIGZ3bmFtZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJa2ZyZWUocmVjKTsKKwlpZiAocG9zdGRhdGEpIHsgLyogd3JpdGUgZGF0YSBhZnRlciBmaXJtd2FyZSBoYXMgYmVlbiB1cGxvYWRlZCAqLworCQlyZXQgPSB1c2I2ZmlyZV9md19lenVzYl93cml0ZShkZXZpY2UsIDB4YTAsIHBvc3RhZGRyLAorCQkJCXBvc3RkYXRhLCBwb3N0bGVuKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJ1bmFibGUgdG8gdXBsb2FkIGV6dXNiICIKKwkJCQkJImZpcm13YXJlICVzOiBwb3N0IHVyYi5cbiIsIGZ3bmFtZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJZGF0YSA9IDB4MDA7IC8qIHJlc3VtZSBlenVzYiBjcHUgKi8KKwlyZXQgPSB1c2I2ZmlyZV9md19lenVzYl93cml0ZShkZXZpY2UsIDB4YTAsIDB4ZTYwMCwgJmRhdGEsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAidW5hYmxlIHRvIHVwbG9hZCBlenVzYiAiCisJCQkJImZpcm13YXJlICVzOiBlbmQgbWVzc2FnZS5cbiIsIGZ3bmFtZSk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX2Z3X2ZwZ2FfdXBsb2FkKAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3QgY2hhciAqZnduYW1lKQoreworCWludCByZXQ7CisJaW50IGk7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJdTggKmJ1ZmZlciA9IGttYWxsb2MoRlBHQV9CVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwljb25zdCBjaGFyICpjOworCWNvbnN0IGNoYXIgKmVuZDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3bmFtZSwgJmRldmljZS0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAidW5hYmxlIHRvIGdldCBmcGdhIGZpcm13YXJlICVzLlxuIiwKKwkJCQlmd25hbWUpOworCQlrZnJlZShidWZmZXIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljID0gZnctPmRhdGE7CisJZW5kID0gZnctPmRhdGEgKyBmdy0+c2l6ZTsKKworCXJldCA9IHVzYjZmaXJlX2Z3X2V6dXNiX3dyaXRlKGRldmljZSwgOCwgMCwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJa2ZyZWUoYnVmZmVyKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJ1bmFibGUgdG8gdXBsb2FkIGZwZ2EgZmlybXdhcmU6ICIKKwkJCQkiYmVnaW4gdXJiLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJd2hpbGUgKGMgIT0gZW5kKSB7CisJCWZvciAoaSA9IDA7IGMgIT0gZW5kICYmIGkgPCBGUEdBX0JVRlNJWkU7IGkrKywgYysrKQorCQkJYnVmZmVyW2ldID0gQklUX1JFVkVSU0VfVEFCTEVbKHU4KSAqY107CisKKwkJcmV0ID0gdXNiNmZpcmVfZndfZnBnYV93cml0ZShkZXZpY2UsIGJ1ZmZlciwgaSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwkJCWtmcmVlKGJ1ZmZlcik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAidW5hYmxlIHRvIHVwbG9hZCBmcGdhICIKKwkJCQkJImZpcm13YXJlOiBmdyB1cmIuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJa2ZyZWUoYnVmZmVyKTsKKworCXJldCA9IHVzYjZmaXJlX2Z3X2V6dXNiX3dyaXRlKGRldmljZSwgOSwgMCwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggInVuYWJsZSB0byB1cGxvYWQgZnBnYSBmaXJtd2FyZTogIgorCQkJCSJlbmQgdXJiLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgdXNiNmZpcmVfZndfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCS8qIGJ1ZmZlcjogOCByZWNlaXZpbmcgYnl0ZXMgZnJvbSBkZXZpY2UgYW5kCisJICogc2l6ZW9mKEVQX1dfTUFYX1BBQ0tFVF9TSVpFKSBieXRlcyBmb3Igbm9uLWNvbnN0IGNvcHkgKi8KKwl1OCBidWZmZXJbMTJdOworCisJcmV0ID0gdXNiNmZpcmVfZndfZXp1c2JfcmVhZChkZXZpY2UsIDEsIDAsIGJ1ZmZlciwgOCk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggInVuYWJsZSB0byByZWNlaXZlIGRldmljZSAiCisJCQkJImZpcm13YXJlIHN0YXRlLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChidWZmZXJbMF0gIT0gMHhlYiB8fCBidWZmZXJbMV0gIT0gMHhhYSB8fCBidWZmZXJbMl0gIT0gMHg1NQorCQkJfHwgYnVmZmVyWzRdICE9IDB4MDMgfHwgYnVmZmVyWzVdICE9IDB4MDEgfHwgYnVmZmVyWzddCisJCQkhPSAweDAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJ1bmtub3duIGRldmljZSBmaXJtd2FyZSBzdGF0ZSAiCisJCQkJInJlY2VpdmVkIGZyb20gZGV2aWNlOiAiKTsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCXNuZF9wcmludGsoIiUwMnggIiwgYnVmZmVyW2ldKTsKKwkJc25kX3ByaW50aygiXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCS8qIGRvIHdlIG5lZWQgZnBnYSBsb2FkZXIgZXp1c2IgZmlybXdhcmU/ICovCisJaWYgKGJ1ZmZlclszXSA9PSAweDAxICYmIGJ1ZmZlcls2XSA9PSAweDE5KSB7CisJCXJldCA9IHVzYjZmaXJlX2Z3X2V6dXNiX3VwbG9hZChpbnRmLAorCQkJCSI2ZmlyZS9kbXg2ZmlyZWwyLmloeCIsIDAsIE5VTEwsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXJldHVybiBGV19OT1RfUkVBRFk7CisJfQorCS8qIGRvIHdlIG5lZWQgZnBnYSBmaXJtd2FyZSBhbmQgYXBwbGljYXRpb24gZXp1c2IgZmlybXdhcmU/ICovCisJZWxzZSBpZiAoYnVmZmVyWzNdID09IDB4MDIgJiYgYnVmZmVyWzZdID09IDB4MGIpIHsKKwkJcmV0ID0gdXNiNmZpcmVfZndfZnBnYV91cGxvYWQoaW50ZiwgIjZmaXJlL2RteDZmaXJlY2YuYmluIik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbWVtY3B5KGJ1ZmZlciwgZXBfd19tYXhfcGFja2V0X3NpemUsCisJCQkJc2l6ZW9mKGVwX3dfbWF4X3BhY2tldF9zaXplKSk7CisJCXJldCA9IHVzYjZmaXJlX2Z3X2V6dXNiX3VwbG9hZChpbnRmLCAiNmZpcmUvZG14NmZpcmVhcC5paHgiLAorCQkJCTB4MDAwMywJYnVmZmVyLCBzaXplb2YoZXBfd19tYXhfcGFja2V0X3NpemUpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gRldfTk9UX1JFQURZOworCX0KKwkvKiBhbGwgZncgbG9hZGVkPyAqLworCWVsc2UgaWYgKGJ1ZmZlclszXSA9PSAweDAzICYmIGJ1ZmZlcls2XSA9PSAweDBiKQorCQlyZXR1cm4gMDsKKwkvKiB1bmtub3duIGRhdGE/ICovCisJZWxzZSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJ1bmtub3duIGRldmljZSBmaXJtd2FyZSBzdGF0ZSAiCisJCQkJInJlY2VpdmVkIGZyb20gZGV2aWNlOiAiKTsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCXNuZF9wcmludGsoIiUwMnggIiwgYnVmZmVyW2ldKTsKKwkJc25kX3ByaW50aygiXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuaCBiL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwODU2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogQXV0aG9yOiBUb3JzdGVuIFNjaGVuaworICogQ3JlYXRlZDogSmFuIDAxLCAyMDExCisgKiBDb3B5cmlnaHQ6CShDKSBUb3JzdGVuIFNjaGVuaworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBVU0I2RklSRV9GSVJNV0FSRV9ICisjZGVmaW5lIFVTQjZGSVJFX0ZJUk1XQVJFX0gKKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitlbnVtIC8qIGZpcm13YXJlIHN0YXRlIG9mIGRldmljZSAqLworeworCUZXX1JFQURZID0gMCwKKwlGV19OT1RfUkVBRFkgPSAxCit9OworCitpbnQgX19kZXZpbml0IHVzYjZmaXJlX2Z3X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworI2VuZGlmIC8qIFVTQjZGSVJFX0ZJUk1XQVJFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiLzZmaXJlL21pZGkuYyBiL3NvdW5kL3VzYi82ZmlyZS9taWRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmNDUwOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9taWRpLmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBMaW51eCBkcml2ZXIgZm9yIFRlcnJhVGVjIERNWCA2RmlyZSBVU0IKKyAqCisgKiBSYXdtaWRpIGRyaXZlcgorICoKKyAqIEF1dGhvcjoJVG9yc3RlbiBTY2hlbmsgPHRvcnN0ZW4uc2NoZW5rQHpvaG8uY29tPgorICogQ3JlYXRlZDoJSmFuIDAxLCAyMDExCisgKiBWZXJzaW9uOgkwLjMuMAorICogQ29weXJpZ2h0OgkoQykgVG9yc3RlbiBTY2hlbmsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisKKyNpbmNsdWRlICJtaWRpLmgiCisjaW5jbHVkZSAiY2hpcC5oIgorI2luY2x1ZGUgImNvbW0uaCIKKworc3RhdGljIHZvaWQgdXNiNmZpcmVfbWlkaV9vdXRfaGFuZGxlcihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IG1pZGlfcnVudGltZSAqcnQgPSB1cmItPmNvbnRleHQ7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0LT5vdXRfbG9jaywgZmxhZ3MpOworCisJaWYgKHJ0LT5vdXQpIHsKKwkJcmV0ID0gc25kX3Jhd21pZGlfdHJhbnNtaXQocnQtPm91dCwgcnQtPm91dF9idWZmZXIgKyA0LAorCQkJCU1JRElfQlVGU0laRSAtIDQpOworCQlpZiAocmV0ID4gMCkgeyAvKiBtb3JlIGRhdGEgYXZhaWxhYmxlLCBzZW5kIG5leHQgcGFja2V0ICovCisJCQlydC0+b3V0X2J1ZmZlclsxXSA9IHJldCArIDI7CisJCQlydC0+b3V0X2J1ZmZlclszXSA9IHJ0LT5vdXRfc2VyaWFsKys7CisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSByZXQgKyA0OworCisJCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKHJldCA8IDApCisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggIm1pZGkgb3V0IHVyYiAiCisJCQkJCQkic3VibWl0IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCX0gZWxzZSAvKiBubyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKi8KKwkJCXJ0LT5vdXQgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydC0+b3V0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdXNiNmZpcmVfbWlkaV9pbl9yZWNlaXZlZCgKKwkJc3RydWN0IG1pZGlfcnVudGltZSAqcnQsIHU4ICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnQtPmluX2xvY2ssIGZsYWdzKTsKKwlpZiAocnQtPmluKQorCQlzbmRfcmF3bWlkaV9yZWNlaXZlKHJ0LT5pbiwgZGF0YSwgbGVuZ3RoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydC0+aW5fbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX21pZGlfb3V0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqYWxzYV9zdWIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfbWlkaV9vdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqYWxzYV9zdWIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYjZmaXJlX21pZGlfb3V0X3RyaWdnZXIoCisJCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKmFsc2Ffc3ViLCBpbnQgdXApCit7CisJc3RydWN0IG1pZGlfcnVudGltZSAqcnQgPSBhbHNhX3N1Yi0+cm1pZGktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXJiICp1cmIgPSAmcnQtPm91dF91cmI7CisJX19zOCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydC0+b3V0X2xvY2ssIGZsYWdzKTsKKwlpZiAodXApIHsgLyogc3RhcnQgdHJhbnNmZXIgKi8KKwkJaWYgKHJ0LT5vdXQpIHsgLyogd2UgYXJlIGFscmVhZHkgdHJhbnNtaXR0aW5nIHNvIGp1c3QgcmV0dXJuICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydC0+b3V0X2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXJldCA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0KGFsc2Ffc3ViLCBydC0+b3V0X2J1ZmZlciArIDQsCisJCQkJTUlESV9CVUZTSVpFIC0gNCk7CisJCWlmIChyZXQgPiAwKSB7CisJCQlydC0+b3V0X2J1ZmZlclsxXSA9IHJldCArIDI7CisJCQlydC0+b3V0X2J1ZmZlclszXSA9IHJ0LT5vdXRfc2VyaWFsKys7CisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSByZXQgKyA0OworCisJCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKHJldCA8IDApCisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggIm1pZGkgb3V0IHVyYiAiCisJCQkJCQkic3VibWl0IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQllbHNlCisJCQkJcnQtPm91dCA9IGFsc2Ffc3ViOworCQl9CisJfSBlbHNlIGlmIChydC0+b3V0ID09IGFsc2Ffc3ViKQorCQlydC0+b3V0ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydC0+b3V0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdXNiNmZpcmVfbWlkaV9vdXRfZHJhaW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqYWxzYV9zdWIpCit7CisJc3RydWN0IG1pZGlfcnVudGltZSAqcnQgPSBhbHNhX3N1Yi0+cm1pZGktPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0cnkgPSAwOworCisJd2hpbGUgKHJ0LT5vdXQgJiYgcmV0cnkrKyA8IDEwMCkKKwkJbXNsZWVwKDEwKTsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9taWRpX2luX29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqYWxzYV9zdWIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfbWlkaV9pbl9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICphbHNhX3N1YikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiNmZpcmVfbWlkaV9pbl90cmlnZ2VyKAorCQlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICphbHNhX3N1YiwgaW50IHVwKQoreworCXN0cnVjdCBtaWRpX3J1bnRpbWUgKnJ0ID0gYWxzYV9zdWItPnJtaWRpLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydC0+aW5fbG9jaywgZmxhZ3MpOworCWlmICh1cCkKKwkJcnQtPmluID0gYWxzYV9zdWI7CisJZWxzZQorCQlydC0+aW4gPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0LT5pbl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzIG91dF9vcHMgPSB7CisJLm9wZW4gPSB1c2I2ZmlyZV9taWRpX291dF9vcGVuLAorCS5jbG9zZSA9IHVzYjZmaXJlX21pZGlfb3V0X2Nsb3NlLAorCS50cmlnZ2VyID0gdXNiNmZpcmVfbWlkaV9vdXRfdHJpZ2dlciwKKwkuZHJhaW4gPSB1c2I2ZmlyZV9taWRpX291dF9kcmFpbgorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgaW5fb3BzID0geworCS5vcGVuID0gdXNiNmZpcmVfbWlkaV9pbl9vcGVuLAorCS5jbG9zZSA9IHVzYjZmaXJlX21pZGlfaW5fY2xvc2UsCisJLnRyaWdnZXIgPSB1c2I2ZmlyZV9taWRpX2luX3RyaWdnZXIKK307CisKK2ludCBfX2RldmluaXQgdXNiNmZpcmVfbWlkaV9pbml0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKQoreworCWludCByZXQ7CisJc3RydWN0IG1pZGlfcnVudGltZSAqcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWlkaV9ydW50aW1lKSwKKwkJCUdGUF9LRVJORUwpOworCXN0cnVjdCBjb21tX3J1bnRpbWUgKmNvbW1fcnQgPSBjaGlwLT5jb21tOworCisJaWYgKCFydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydC0+Y2hpcCA9IGNoaXA7CisJcnQtPmluX3JlY2VpdmVkID0gdXNiNmZpcmVfbWlkaV9pbl9yZWNlaXZlZDsKKwlydC0+b3V0X2J1ZmZlclswXSA9IDB4ODA7IC8qICdzZW5kIG1pZGknIGNvbW1hbmQgKi8KKwlydC0+b3V0X2J1ZmZlclsxXSA9IDB4MDA7IC8qIHNpemUgb2YgZGF0YSAqLworCXJ0LT5vdXRfYnVmZmVyWzJdID0gMHgwMDsgLyogYWx3YXlzIDAgKi8KKwlzcGluX2xvY2tfaW5pdCgmcnQtPmluX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZydC0+b3V0X2xvY2spOworCisJY29tbV9ydC0+aW5pdF91cmIoY29tbV9ydCwgJnJ0LT5vdXRfdXJiLCBydC0+b3V0X2J1ZmZlciwgcnQsCisJCQl1c2I2ZmlyZV9taWRpX291dF9oYW5kbGVyKTsKKworCXJldCA9IHNuZF9yYXdtaWRpX25ldyhjaGlwLT5jYXJkLCAiNkZpcmVVU0IiLCAwLCAxLCAxLCAmcnQtPmluc3RhbmNlKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJ1bmFibGUgdG8gY3JlYXRlIG1pZGkuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcnQtPmluc3RhbmNlLT5wcml2YXRlX2RhdGEgPSBydDsKKwlzdHJjcHkocnQtPmluc3RhbmNlLT5uYW1lLCAiRE1YNkZpcmVVU0IgTUlESSIpOworCXJ0LT5pbnN0YW5jZS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfAorCQkJU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUIHwKKwkJCVNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CisJc25kX3Jhd21pZGlfc2V0X29wcyhydC0+aW5zdGFuY2UsIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKKwkJCSZvdXRfb3BzKTsKKwlzbmRfcmF3bWlkaV9zZXRfb3BzKHJ0LT5pbnN0YW5jZSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJCQkmaW5fb3BzKTsKKworCWNoaXAtPm1pZGkgPSBydDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1c2I2ZmlyZV9taWRpX2Fib3J0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKQoreworCXN0cnVjdCBtaWRpX3J1bnRpbWUgKnJ0ID0gY2hpcC0+bWlkaTsKKworCWlmIChydCkKKwkJdXNiX3BvaXNvbl91cmIoJnJ0LT5vdXRfdXJiKTsKK30KKwordm9pZCB1c2I2ZmlyZV9taWRpX2Rlc3Ryb3koc3RydWN0IHNmaXJlX2NoaXAgKmNoaXApCit7CisJa2ZyZWUoY2hpcC0+bWlkaSk7CisJY2hpcC0+bWlkaSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvNmZpcmUvbWlkaS5oIGIvc291bmQvdXNiLzZmaXJlL21pZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2E3YmY2NgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9taWRpLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVGVycmFUZWMgRE1YIDZGaXJlIFVTQgorICoKKyAqIEF1dGhvcjoJVG9yc3RlbiBTY2hlbmsgPHRvcnN0ZW4uc2NoZW5rQHpvaG8uY29tPgorICogQ3JlYXRlZDoJSmFuIDAxLCAyMDExCisgKiBWZXJzaW9uOgkwLjMuMAorICogQ29weXJpZ2h0OgkoQykgVG9yc3RlbiBTY2hlbmsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgVVNCNkZJUkVfTUlESV9ICisjZGVmaW5lIFVTQjZGSVJFX01JRElfSAorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK2VudW0geworCU1JRElfQlVGU0laRSA9IDY0Cit9OworCitzdHJ1Y3QgbWlkaV9ydW50aW1lIHsKKwlzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcDsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkgKmluc3RhbmNlOworCisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqaW47CisJY2hhciBpbl9hY3RpdmU7CisKKwlzcGlubG9ja190IGluX2xvY2s7CisJc3BpbmxvY2tfdCBvdXRfbG9jazsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpvdXQ7CisJc3RydWN0IHVyYiBvdXRfdXJiOworCXU4IG91dF9zZXJpYWw7IC8qIHNlcmlhbCBudW1iZXIgb2Ygb3V0IHBhY2tldCAqLworCXU4IG91dF9idWZmZXJbTUlESV9CVUZTSVpFXTsKKwlpbnQgYnVmZmVyX29mZnNldDsKKworCXZvaWQgKCppbl9yZWNlaXZlZCkoc3RydWN0IG1pZGlfcnVudGltZSAqcnQsIHU4ICpkYXRhLCBpbnQgbGVuZ3RoKTsKK307CisKK2ludCBfX2RldmluaXQgdXNiNmZpcmVfbWlkaV9pbml0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKTsKK3ZvaWQgdXNiNmZpcmVfbWlkaV9hYm9ydChzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCk7Cit2b2lkIHVzYjZmaXJlX21pZGlfZGVzdHJveShzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCk7CisjZW5kaWYgLyogVVNCNkZJUkVfTUlESV9IICovCisKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9wY20uYyBiL3NvdW5kL3VzYi82ZmlyZS9wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyYzc0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiLzZmaXJlL3BjbS5jCkBAIC0wLDAgKzEsNjg4IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogUENNIGRyaXZlcgorICoKKyAqIEF1dGhvcjoJVG9yc3RlbiBTY2hlbmsgPHRvcnN0ZW4uc2NoZW5rQHpvaG8uY29tPgorICogQ3JlYXRlZDoJSmFuIDAxLCAyMDExCisgKiBWZXJzaW9uOgkwLjMuMAorICogQ29weXJpZ2h0OgkoQykgVG9yc3RlbiBTY2hlbmsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlICJjaGlwLmgiCisjaW5jbHVkZSAiY29tbS5oIgorCitlbnVtIHsKKwlPVVRfTl9DSEFOTkVMUyA9IDYsIElOX05fQ0hBTk5FTFMgPSA0Cit9OworCisvKiBrZWVwIG5leHQgdHdvIHN5bmNlZCB3aXRoCisgKiBGV19FUF9XX01BWF9QQUNLRVRfU0laRVtdIGFuZCBSQVRFU19NQVhfUEFDS0VUX1NJWkUgKi8KK3N0YXRpYyBjb25zdCBpbnQgcmF0ZXNfaW5fcGFja2V0X3NpemVbXSA9IHsgMjI4LCAyMjgsIDQyMCwgNDIwLCA0MDQsIDQwNCB9Oworc3RhdGljIGNvbnN0IGludCByYXRlc19vdXRfcGFja2V0X3NpemVbXSA9IHsgMjI4LCAyMjgsIDQyMCwgNDIwLCA2MDQsIDYwNCB9Oworc3RhdGljIGNvbnN0IGludCByYXRlc1tdID0geyA0NDEwMCwgNDgwMDAsIDg4MjAwLCA5NjAwMCwgMTc2NDAwLCAxOTIwMDAgfTsKK3N0YXRpYyBjb25zdCBpbnQgcmF0ZXNfYWx0c2V0dGluZ1tdID0geyAxLCAxLCAyLCAyLCAzLCAzIH07CitzdGF0aWMgY29uc3QgaW50IHJhdGVzX2Fsc2FpZFtdID0geworCVNORFJWX1BDTV9SQVRFXzQ0MTAwLCBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwlTTkRSVl9QQ01fUkFURV84ODIwMCwgU05EUlZfUENNX1JBVEVfOTYwMDAsCisJU05EUlZfUENNX1JBVEVfMTc2NDAwLCBTTkRSVl9QQ01fUkFURV8xOTIwMDAgfTsKKworLyogdmFsdWVzIHRvIHdyaXRlIHRvIHNvdW5kY2FyZCByZWdpc3RlciBmb3IgYWxsIHNhbXBsZXJhdGVzICovCitzdGF0aWMgY29uc3QgdTE2IHJhdGVzXzZmaXJlX3ZsW10gPSB7MHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMX07CitzdGF0aWMgY29uc3QgdTE2IHJhdGVzXzZmaXJlX3ZoW10gPSB7MHgxMSwgMHgxMSwgMHgxMCwgMHgxMCwgMHgwMCwgMHgwMH07CisKK2VudW0geyAvKiBzZXR0aW5ncyBmb3IgcGNtICovCisJT1VUX0VQID0gNiwgSU5fRVAgPSAyLCBNQVhfQlVGU0laRSA9IDEyOCAqIDEwMjQKK307CisKK2VudW0geyAvKiBwY20gc3RyZWFtaW5nIHN0YXRlcyAqLworCVNUUkVBTV9ESVNBQkxFRCwgLyogbm8gcGNtIHN0cmVhbWluZyAqLworCVNUUkVBTV9TVEFSVElORywgLyogcGNtIHN0cmVhbWluZyByZXF1ZXN0ZWQsIHdhaXRpbmcgdG8gYmVjb21lIHJlYWR5ICovCisJU1RSRUFNX1JVTk5JTkcsIC8qIHBjbSBzdHJlYW1pbmcgcnVubmluZyAqLworCVNUUkVBTV9TVE9QUElORworfTsKKworZW51bSB7IC8qIHBjbSBzYW1wbGUgcmF0ZXMgKGFsc28gaW5kZXggaW50byBSQVRFU19YWFhbXSkgKi8KKwlSQVRFXzQ0S0haLAorCVJBVEVfNDhLSFosCisJUkFURV84OEtIWiwKKwlSQVRFXzk2S0haLAorCVJBVEVfMTc2S0haLAorCVJBVEVfMTkyS0haCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2h3ID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fQkFUQ0gsCisKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJU05EUlZfUENNX1JBVEVfOTYwMDAgfAorCQlTTkRSVl9QQ01fUkFURV8xNzY0MDAgfAorCQlTTkRSVl9QQ01fUkFURV8xOTIwMDAsCisKKwkucmF0ZV9taW4gPSA0NDEwMCwKKwkucmF0ZV9tYXggPSAxOTIwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDAsIC8qIHNldCBpbiBwY21fb3BlbiwgZGVwZW5kaW5nIG9uIGNhcHR1cmUvcGxheWJhY2sgKi8KKwkuYnVmZmVyX2J5dGVzX21heCA9IE1BWF9CVUZTSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gUENNX05fUEFDS0VUU19QRVJfVVJCICogKFBDTV9NQVhfUEFDS0VUX1NJWkUgLSA0KSwKKwkucGVyaW9kX2J5dGVzX21heCA9IE1BWF9CVUZTSVpFLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMTAyNAorfTsKKworc3RhdGljIGludCB1c2I2ZmlyZV9wY21fc2V0X3JhdGUoc3RydWN0IHBjbV9ydW50aW1lICpydCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBydC0+Y2hpcC0+ZGV2OworCXN0cnVjdCBjb21tX3J1bnRpbWUgKmNvbW1fcnQgPSBydC0+Y2hpcC0+Y29tbTsKKworCWlmIChydC0+cmF0ZSA+PSBBUlJBWV9TSVpFKHJhdGVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogZGlzYWJsZSBzdHJlYW1pbmcgKi8KKwlyZXQgPSBjb21tX3J0LT53cml0ZTE2KGNvbW1fcnQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDApOworCWlmIChyZXQgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciBzdG9wcGluZyBzdHJlYW1pbmcgd2hpbGUgIgorCQkJCSJzZXR0aW5nIHNhbXBsZXJhdGUgJWQuXG4iLCByYXRlc1tydC0+cmF0ZV0pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldmljZSwgMSwgcmF0ZXNfYWx0c2V0dGluZ1tydC0+cmF0ZV0pOworCWlmIChyZXQgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciBzZXR0aW5nIGludGVyZmFjZSAiCisJCQkJImFsdHNldHRpbmcgJWQgZm9yIHNhbXBsZXJhdGUgJWQuXG4iLAorCQkJCXJhdGVzX2FsdHNldHRpbmdbcnQtPnJhdGVdLCByYXRlc1tydC0+cmF0ZV0pOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHNldCBzb3VuZGNhcmQgY2xvY2sgKi8KKwlyZXQgPSBjb21tX3J0LT53cml0ZTE2KGNvbW1fcnQsIDB4MDIsIDB4MDEsIHJhdGVzXzZmaXJlX3ZsW3J0LT5yYXRlXSwKKwkJCXJhdGVzXzZmaXJlX3ZoW3J0LT5yYXRlXSk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHNldHRpbmcgc2FtcGxlcmF0ZSAlZC5cbiIsCisJCQkJcmF0ZXNbcnQtPnJhdGVdKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBlbmFibGUgYW5hbG9nIGlucHV0cyBhbmQgb3V0cHV0cworCSAqIChvbmUgYml0IHBlciBzdGVyZW8tY2hhbm5lbCkgKi8KKwlyZXQgPSBjb21tX3J0LT53cml0ZTE2KGNvbW1fcnQsIDB4MDIsIDB4MDIsCisJCQkoMSA8PCAoT1VUX05fQ0hBTk5FTFMgLyAyKSkgLSAxLAorCQkJKDEgPDwgKElOX05fQ0hBTk5FTFMgLyAyKSkgLSAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJyb3IgaW5pdGlhbGl6aW5nIGFuYWxvZyBjaGFubmVscyAiCisJCQkJIndoaWxlIHNldHRpbmcgc2FtcGxlcmF0ZSAlZC5cbiIsCisJCQkJcmF0ZXNbcnQtPnJhdGVdKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogZGlzYWJsZSBkaWdpdGFsIGlucHV0cyBhbmQgb3V0cHV0cyAqLworCXJldCA9IGNvbW1fcnQtPndyaXRlMTYoY29tbV9ydCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIGluaXRpYWxpemluZyBkaWdpdGFsICIKKwkJCQkiY2hhbm5lbHMgd2hpbGUgc2V0dGluZyBzYW1wbGVyYXRlICVkLlxuIiwKKwkJCQlyYXRlc1tydC0+cmF0ZV0pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNvbW1fcnQtPndyaXRlMTYoY29tbV9ydCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMSk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHN0YXJ0aW5nIHN0cmVhbWluZyB3aGlsZSAiCisJCQkJInNldHRpbmcgc2FtcGxlcmF0ZSAlZC5cbiIsIHJhdGVzW3J0LT5yYXRlXSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcnQtPmluX25fYW5hbG9nID0gSU5fTl9DSEFOTkVMUzsKKwlydC0+b3V0X25fYW5hbG9nID0gT1VUX05fQ0hBTk5FTFM7CisJcnQtPmluX3BhY2tldF9zaXplID0gcmF0ZXNfaW5fcGFja2V0X3NpemVbcnQtPnJhdGVdOworCXJ0LT5vdXRfcGFja2V0X3NpemUgPSByYXRlc19vdXRfcGFja2V0X3NpemVbcnQtPnJhdGVdOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjbV9zdWJzdHJlYW0gKnVzYjZmaXJlX3BjbV9nZXRfc3Vic3RyZWFtKAorCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmFsc2Ffc3ViKQoreworCXN0cnVjdCBwY21fcnVudGltZSAqcnQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKGFsc2Ffc3ViKTsKKworCWlmIChhbHNhX3N1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJldHVybiAmcnQtPnBsYXliYWNrOworCWVsc2UgaWYgKGFsc2Ffc3ViLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQorCQlyZXR1cm4gJnJ0LT5jYXB0dXJlOworCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciBnZXR0aW5nIHBjbSBzdWJzdHJlYW0gc2xvdC5cbiIpOworCXJldHVybiBOVUxMOworfQorCisvKiBjYWxsIHdpdGggc3RyZWFtX211dGV4IGxvY2tlZCAqLworc3RhdGljIHZvaWQgdXNiNmZpcmVfcGNtX3N0cmVhbV9zdG9wKHN0cnVjdCBwY21fcnVudGltZSAqcnQpCit7CisJaW50IGk7CisKKwlpZiAocnQtPnN0cmVhbV9zdGF0ZSAhPSBTVFJFQU1fRElTQUJMRUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IFBDTV9OX1VSQlM7IGkrKykgeworCQkJdXNiX2tpbGxfdXJiKCZydC0+aW5fdXJic1tpXS5pbnN0YW5jZSk7CisJCQl1c2Jfa2lsbF91cmIoJnJ0LT5vdXRfdXJic1tpXS5pbnN0YW5jZSk7CisJCX0KKwkJcnQtPnN0cmVhbV9zdGF0ZSA9IFNUUkVBTV9ESVNBQkxFRDsKKwl9Cit9CisKKy8qIGNhbGwgd2l0aCBzdHJlYW1fbXV0ZXggbG9ja2VkICovCitzdGF0aWMgaW50IHVzYjZmaXJlX3BjbV9zdHJlYW1fc3RhcnQoc3RydWN0IHBjbV9ydW50aW1lICpydCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCWludCBrOworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpwYWNrZXQ7CisKKwlpZiAocnQtPnN0cmVhbV9zdGF0ZSA9PSBTVFJFQU1fRElTQUJMRUQpIHsKKwkJLyogc3VibWl0IG91ciBpbiB1cmJzICovCisJCXJ0LT5zdHJlYW1fd2FpdF9jb25kID0gZmFsc2U7CisJCXJ0LT5zdHJlYW1fc3RhdGUgPSBTVFJFQU1fU1RBUlRJTkc7CisJCWZvciAoaSA9IDA7IGkgPCBQQ01fTl9VUkJTOyBpKyspIHsKKwkJCWZvciAoayA9IDA7IGsgPCBQQ01fTl9QQUNLRVRTX1BFUl9VUkI7IGsrKykgeworCQkJCXBhY2tldCA9ICZydC0+aW5fdXJic1tpXS5wYWNrZXRzW2tdOworCQkJCXBhY2tldC0+b2Zmc2V0ID0gayAqIHJ0LT5pbl9wYWNrZXRfc2l6ZTsKKwkJCQlwYWNrZXQtPmxlbmd0aCA9IHJ0LT5pbl9wYWNrZXRfc2l6ZTsKKwkJCQlwYWNrZXQtPmFjdHVhbF9sZW5ndGggPSAwOworCQkJCXBhY2tldC0+c3RhdHVzID0gMDsKKwkJCX0KKwkJCXJldCA9IHVzYl9zdWJtaXRfdXJiKCZydC0+aW5fdXJic1tpXS5pbnN0YW5jZSwKKwkJCQkJR0ZQX0FUT01JQyk7CisJCQlpZiAocmV0KSB7CisJCQkJdXNiNmZpcmVfcGNtX3N0cmVhbV9zdG9wKHJ0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisKKwkJLyogd2FpdCBmb3IgZmlyc3Qgb3V0IHVyYiB0byByZXR1cm4gKHNlbnQgaW4gaW4gdXJiIGhhbmRsZXIpICovCisJCXdhaXRfZXZlbnRfdGltZW91dChydC0+c3RyZWFtX3dhaXRfcXVldWUsIHJ0LT5zdHJlYW1fd2FpdF9jb25kLAorCQkJCUhaKTsKKwkJaWYgKHJ0LT5zdHJlYW1fd2FpdF9jb25kKQorCQkJcnQtPnN0cmVhbV9zdGF0ZSA9IFNUUkVBTV9SVU5OSU5HOworCQllbHNlIHsKKwkJCXVzYjZmaXJlX3BjbV9zdHJlYW1fc3RvcChydCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogY2FsbCB3aXRoIHN1YnN0cmVhbSBsb2NrZWQgKi8KK3N0YXRpYyB2b2lkIHVzYjZmaXJlX3BjbV9jYXB0dXJlKHN0cnVjdCBwY21fc3Vic3RyZWFtICpzdWIsIHN0cnVjdCBwY21fdXJiICp1cmIpCit7CisJaW50IGk7CisJaW50IGZyYW1lOworCWludCBmcmFtZV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgdG90YWxfbGVuZ3RoID0gMDsKKwlzdHJ1Y3QgcGNtX3J1bnRpbWUgKnJ0ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWItPmluc3RhbmNlKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICphbHNhX3J0ID0gc3ViLT5pbnN0YW5jZS0+cnVudGltZTsKKwl1MzIgKnNyYyA9ICh1MzIgKikgdXJiLT5idWZmZXI7CisJdTMyICpkZXN0ID0gKHUzMiAqKSAoYWxzYV9ydC0+ZG1hX2FyZWEgKyBzdWItPmRtYV9vZmYKKwkJCSogKGFsc2FfcnQtPmZyYW1lX2JpdHMgPj4gMykpOworCXUzMiAqZGVzdF9lbmQgPSAodTMyICopIChhbHNhX3J0LT5kbWFfYXJlYSArIGFsc2FfcnQtPmJ1ZmZlcl9zaXplCisJCQkqIChhbHNhX3J0LT5mcmFtZV9iaXRzID4+IDMpKTsKKwlpbnQgYnl0ZXNfcGVyX2ZyYW1lID0gYWxzYV9ydC0+Y2hhbm5lbHMgPDwgMjsKKworCWZvciAoaSA9IDA7IGkgPCBQQ01fTl9QQUNLRVRTX1BFUl9VUkI7IGkrKykgeworCQkvKiBhdCBsZWFzdCA0IGhlYWRlciBieXRlcyBmb3IgdmFsaWQgcGFja2V0LgorCQkgKiBhZnRlciB0aGF0OiAzMiBiaXRzIHBlciBzYW1wbGUgZm9yIGFuYWxvZyBjaGFubmVscyAqLworCQlpZiAodXJiLT5wYWNrZXRzW2ldLmFjdHVhbF9sZW5ndGggPiA0KQorCQkJZnJhbWVfY291bnQgPSAodXJiLT5wYWNrZXRzW2ldLmFjdHVhbF9sZW5ndGggLSA0KQorCQkJCQkvIChydC0+aW5fbl9hbmFsb2cgPDwgMik7CisJCWVsc2UKKwkJCWZyYW1lX2NvdW50ID0gMDsKKworCQlzcmMgPSAodTMyICopICh1cmItPmJ1ZmZlciArIHRvdGFsX2xlbmd0aCk7CisJCXNyYysrOyAvKiBza2lwIGxlYWRpbmcgNCBieXRlcyBvZiBldmVyeSBwYWNrZXQgKi8KKwkJdG90YWxfbGVuZ3RoICs9IHVyYi0+cGFja2V0c1tpXS5sZW5ndGg7CisJCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IGZyYW1lX2NvdW50OyBmcmFtZSsrKSB7CisJCQltZW1jcHkoZGVzdCwgc3JjLCBieXRlc19wZXJfZnJhbWUpOworCQkJZGVzdCArPSBhbHNhX3J0LT5jaGFubmVsczsKKwkJCXNyYyArPSBydC0+aW5fbl9hbmFsb2c7CisJCQlzdWItPmRtYV9vZmYrKzsKKwkJCXN1Yi0+cGVyaW9kX29mZisrOworCQkJaWYgKGRlc3QgPT0gZGVzdF9lbmQpIHsKKwkJCQlzdWItPmRtYV9vZmYgPSAwOworCQkJCWRlc3QgPSAodTMyICopIGFsc2FfcnQtPmRtYV9hcmVhOworCQkJfQorCQl9CisJfQorfQorCisvKiBjYWxsIHdpdGggc3Vic3RyZWFtIGxvY2tlZCAqLworc3RhdGljIHZvaWQgdXNiNmZpcmVfcGNtX3BsYXliYWNrKHN0cnVjdCBwY21fc3Vic3RyZWFtICpzdWIsCisJCXN0cnVjdCBwY21fdXJiICp1cmIpCit7CisJaW50IGk7CisJaW50IGZyYW1lOworCWludCBmcmFtZV9jb3VudDsKKwlzdHJ1Y3QgcGNtX3J1bnRpbWUgKnJ0ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWItPmluc3RhbmNlKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICphbHNhX3J0ID0gc3ViLT5pbnN0YW5jZS0+cnVudGltZTsKKwl1MzIgKnNyYyA9ICh1MzIgKikgKGFsc2FfcnQtPmRtYV9hcmVhICsgc3ViLT5kbWFfb2ZmCisJCQkqIChhbHNhX3J0LT5mcmFtZV9iaXRzID4+IDMpKTsKKwl1MzIgKnNyY19lbmQgPSAodTMyICopIChhbHNhX3J0LT5kbWFfYXJlYSArIGFsc2FfcnQtPmJ1ZmZlcl9zaXplCisJCQkqIChhbHNhX3J0LT5mcmFtZV9iaXRzID4+IDMpKTsKKwl1MzIgKmRlc3QgPSAodTMyICopIHVyYi0+YnVmZmVyOworCWludCBieXRlc19wZXJfZnJhbWUgPSBhbHNhX3J0LT5jaGFubmVscyA8PCAyOworCisJZm9yIChpID0gMDsgaSA8IFBDTV9OX1BBQ0tFVFNfUEVSX1VSQjsgaSsrKSB7CisJCS8qIGF0IGxlYXN0IDQgaGVhZGVyIGJ5dGVzIGZvciB2YWxpZCBwYWNrZXQuCisJCSAqIGFmdGVyIHRoYXQ6IDMyIGJpdHMgcGVyIHNhbXBsZSBmb3IgYW5hbG9nIGNoYW5uZWxzICovCisJCWlmICh1cmItPnBhY2tldHNbaV0ubGVuZ3RoID4gNCkKKwkJCWZyYW1lX2NvdW50ID0gKHVyYi0+cGFja2V0c1tpXS5sZW5ndGggLSA0KQorCQkJCQkvIChydC0+b3V0X25fYW5hbG9nIDw8IDIpOworCQllbHNlCisJCQlmcmFtZV9jb3VudCA9IDA7CisJCWRlc3QrKzsgLyogc2tpcCBsZWFkaW5nIDQgYnl0ZXMgb2YgZXZlcnkgZnJhbWUgKi8KKwkJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgZnJhbWVfY291bnQ7IGZyYW1lKyspIHsKKwkJCW1lbWNweShkZXN0LCBzcmMsIGJ5dGVzX3Blcl9mcmFtZSk7CisJCQlzcmMgKz0gYWxzYV9ydC0+Y2hhbm5lbHM7CisJCQlkZXN0ICs9IHJ0LT5vdXRfbl9hbmFsb2c7CisJCQlzdWItPmRtYV9vZmYrKzsKKwkJCXN1Yi0+cGVyaW9kX29mZisrOworCQkJaWYgKHNyYyA9PSBzcmNfZW5kKSB7CisJCQkJc3JjID0gKHUzMiAqKSBhbHNhX3J0LT5kbWFfYXJlYTsKKwkJCQlzdWItPmRtYV9vZmYgPSAwOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2I2ZmlyZV9wY21faW5fdXJiX2hhbmRsZXIoc3RydWN0IHVyYiAqdXNiX3VyYikKK3sKKwlzdHJ1Y3QgcGNtX3VyYiAqaW5fdXJiID0gdXNiX3VyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcGNtX3VyYiAqb3V0X3VyYiA9IGluX3VyYi0+cGVlcjsKKwlzdHJ1Y3QgcGNtX3J1bnRpbWUgKnJ0ID0gaW5fdXJiLT5jaGlwLT5wY207CisJc3RydWN0IHBjbV9zdWJzdHJlYW0gKnN1YjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0b3RhbF9sZW5ndGggPSAwOworCWludCBmcmFtZV9jb3VudDsKKwlpbnQgZnJhbWU7CisJaW50IGNoYW5uZWw7CisJaW50IGk7CisJdTggKmRlc3Q7CisKKwlpZiAodXNiX3VyYi0+c3RhdHVzIHx8IHJ0LT5wYW5pYyB8fCBydC0+c3RyZWFtX3N0YXRlID09IFNUUkVBTV9TVE9QUElORykKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBQQ01fTl9QQUNLRVRTX1BFUl9VUkI7IGkrKykKKwkJaWYgKGluX3VyYi0+cGFja2V0c1tpXS5zdGF0dXMpIHsKKwkJCXJ0LT5wYW5pYyA9IHRydWU7CisJCQlyZXR1cm47CisJCX0KKworCWlmIChydC0+c3RyZWFtX3N0YXRlID09IFNUUkVBTV9ESVNBQkxFRCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiaW50ZXJuYWwgZXJyb3I6ICIKKwkJCQkic3RyZWFtIGRpc2FibGVkIGluIGluLXVyYiBoYW5kbGVyLlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiByZWNlaXZlIG91ciBjYXB0dXJlIGRhdGEgKi8KKwlzdWIgPSAmcnQtPmNhcHR1cmU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN1Yi0+bG9jaywgZmxhZ3MpOworCWlmIChzdWItPmFjdGl2ZSkgeworCQl1c2I2ZmlyZV9wY21fY2FwdHVyZShzdWIsIGluX3VyYik7CisJCWlmIChzdWItPnBlcmlvZF9vZmYgPj0gc3ViLT5pbnN0YW5jZS0+cnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJCXN1Yi0+cGVyaW9kX29mZiAlPSBzdWItPmluc3RhbmNlLT5ydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1Yi0+bG9jaywgZmxhZ3MpOworCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWItPmluc3RhbmNlKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWItPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3ViLT5sb2NrLCBmbGFncyk7CisKKwkvKiBzZXR1cCBvdXQgdXJiIHN0cnVjdHVyZSAqLworCWZvciAoaSA9IDA7IGkgPCBQQ01fTl9QQUNLRVRTX1BFUl9VUkI7IGkrKykgeworCQlvdXRfdXJiLT5wYWNrZXRzW2ldLm9mZnNldCA9IHRvdGFsX2xlbmd0aDsKKwkJb3V0X3VyYi0+cGFja2V0c1tpXS5sZW5ndGggPSAoaW5fdXJiLT5wYWNrZXRzW2ldLmFjdHVhbF9sZW5ndGgKKwkJCQktIDQpIC8gKHJ0LT5pbl9uX2FuYWxvZyA8PCAyKQorCQkJCSogKHJ0LT5vdXRfbl9hbmFsb2cgPDwgMikgKyA0OworCQlvdXRfdXJiLT5wYWNrZXRzW2ldLnN0YXR1cyA9IDA7CisJCXRvdGFsX2xlbmd0aCArPSBvdXRfdXJiLT5wYWNrZXRzW2ldLmxlbmd0aDsKKwl9CisJbWVtc2V0KG91dF91cmItPmJ1ZmZlciwgMCwgdG90YWxfbGVuZ3RoKTsKKworCS8qIG5vdyBzZW5kIG91ciBwbGF5YmFjayBkYXRhIChpZiBhIGZyZWUgb3V0IHVyYiB3YXMgZm91bmQpICovCisJc3ViID0gJnJ0LT5wbGF5YmFjazsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3ViLT5sb2NrLCBmbGFncyk7CisJaWYgKHN1Yi0+YWN0aXZlKSB7CisJCXVzYjZmaXJlX3BjbV9wbGF5YmFjayhzdWIsIG91dF91cmIpOworCQlpZiAoc3ViLT5wZXJpb2Rfb2ZmID49IHN1Yi0+aW5zdGFuY2UtPnJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCQlzdWItPnBlcmlvZF9vZmYgJT0gc3ViLT5pbnN0YW5jZS0+cnVudGltZS0+cGVyaW9kX3NpemU7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWItPmxvY2ssIGZsYWdzKTsKKwkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3ViLT5pbnN0YW5jZSk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3ViLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1Yi0+bG9jaywgZmxhZ3MpOworCisJLyogc2V0dXAgdGhlIDR0aCBieXRlIG9mIGVhY2ggc2FtcGxlICgweDQwIGZvciBhbmFsb2cgY2hhbm5lbHMpICovCisJZGVzdCA9IG91dF91cmItPmJ1ZmZlcjsKKwlmb3IgKGkgPSAwOyBpIDwgUENNX05fUEFDS0VUU19QRVJfVVJCOyBpKyspCisJCWlmIChvdXRfdXJiLT5wYWNrZXRzW2ldLmxlbmd0aCA+PSA0KSB7CisJCQlmcmFtZV9jb3VudCA9IChvdXRfdXJiLT5wYWNrZXRzW2ldLmxlbmd0aCAtIDQpCisJCQkJCS8gKHJ0LT5vdXRfbl9hbmFsb2cgPDwgMik7CisJCQkqKGRlc3QrKykgPSAweGFhOworCQkJKihkZXN0KyspID0gMHhhYTsKKwkJCSooZGVzdCsrKSA9IGZyYW1lX2NvdW50OworCQkJKihkZXN0KyspID0gMHgwMDsKKwkJCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IGZyYW1lX2NvdW50OyBmcmFtZSsrKQorCQkJCWZvciAoY2hhbm5lbCA9IDA7CisJCQkJCQljaGFubmVsIDwgcnQtPm91dF9uX2FuYWxvZzsKKwkJCQkJCWNoYW5uZWwrKykgeworCQkJCQlkZXN0ICs9IDM7IC8qIHNraXAgc2FtcGxlIGRhdGEgKi8KKwkJCQkJKihkZXN0KyspID0gMHg0MDsKKwkJCQl9CisJCX0KKwl1c2Jfc3VibWl0X3VyYigmb3V0X3VyYi0+aW5zdGFuY2UsIEdGUF9BVE9NSUMpOworCXVzYl9zdWJtaXRfdXJiKCZpbl91cmItPmluc3RhbmNlLCBHRlBfQVRPTUlDKTsKK30KKworc3RhdGljIHZvaWQgdXNiNmZpcmVfcGNtX291dF91cmJfaGFuZGxlcihzdHJ1Y3QgdXJiICp1c2JfdXJiKQoreworCXN0cnVjdCBwY21fdXJiICp1cmIgPSB1c2JfdXJiLT5jb250ZXh0OworCXN0cnVjdCBwY21fcnVudGltZSAqcnQgPSB1cmItPmNoaXAtPnBjbTsKKworCWlmIChydC0+c3RyZWFtX3N0YXRlID09IFNUUkVBTV9TVEFSVElORykgeworCQlydC0+c3RyZWFtX3dhaXRfY29uZCA9IHRydWU7CisJCXdha2VfdXAoJnJ0LT5zdHJlYW1fd2FpdF9xdWV1ZSk7CisJfQorfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqYWxzYV9zdWIpCit7CisJc3RydWN0IHBjbV9ydW50aW1lICpydCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoYWxzYV9zdWIpOworCXN0cnVjdCBwY21fc3Vic3RyZWFtICpzdWIgPSBOVUxMOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKmFsc2FfcnQgPSBhbHNhX3N1Yi0+cnVudGltZTsKKworCWlmIChydC0+cGFuaWMpCisJCXJldHVybiAtRVBJUEU7CisKKwltdXRleF9sb2NrKCZydC0+c3RyZWFtX211dGV4KTsKKwlhbHNhX3J0LT5odyA9IHBjbV9odzsKKworCWlmIChhbHNhX3N1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKHJ0LT5yYXRlID49IDApCisJCQlhbHNhX3J0LT5ody5yYXRlcyA9IHJhdGVzX2Fsc2FpZFtydC0+cmF0ZV07CisJCWFsc2FfcnQtPmh3LmNoYW5uZWxzX21heCA9IE9VVF9OX0NIQU5ORUxTOworCQlzdWIgPSAmcnQtPnBsYXliYWNrOworCX0gZWxzZSBpZiAoYWxzYV9zdWItPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKKwkJaWYgKHJ0LT5yYXRlID49IDApCisJCQlhbHNhX3J0LT5ody5yYXRlcyA9IHJhdGVzX2Fsc2FpZFtydC0+cmF0ZV07CisJCWFsc2FfcnQtPmh3LmNoYW5uZWxzX21heCA9IElOX05fQ0hBTk5FTFM7CisJCXN1YiA9ICZydC0+Y2FwdHVyZTsKKwl9CisKKwlpZiAoIXN1YikgeworCQltdXRleF91bmxvY2soJnJ0LT5zdHJlYW1fbXV0ZXgpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiaW52YWxpZCBzdHJlYW0gdHlwZS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdWItPmluc3RhbmNlID0gYWxzYV9zdWI7CisJc3ViLT5hY3RpdmUgPSBmYWxzZTsKKwltdXRleF91bmxvY2soJnJ0LT5zdHJlYW1fbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmFsc2Ffc3ViKQoreworCXN0cnVjdCBwY21fcnVudGltZSAqcnQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKGFsc2Ffc3ViKTsKKwlzdHJ1Y3QgcGNtX3N1YnN0cmVhbSAqc3ViID0gdXNiNmZpcmVfcGNtX2dldF9zdWJzdHJlYW0oYWxzYV9zdWIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocnQtPnBhbmljKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnJ0LT5zdHJlYW1fbXV0ZXgpOworCWlmIChzdWIpIHsKKwkJLyogZGVhY3RpdmF0ZSBzdWJzdHJlYW0gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnN1Yi0+bG9jaywgZmxhZ3MpOworCQlzdWItPmluc3RhbmNlID0gTlVMTDsKKwkJc3ViLT5hY3RpdmUgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3ViLT5sb2NrLCBmbGFncyk7CisKKwkJLyogYWxsIHN1YnN0cmVhbXMgY2xvc2VkPyBpZiBzbywgc3RvcCBzdHJlYW1pbmcgKi8KKwkJaWYgKCFydC0+cGxheWJhY2suaW5zdGFuY2UgJiYgIXJ0LT5jYXB0dXJlLmluc3RhbmNlKSB7CisJCQl1c2I2ZmlyZV9wY21fc3RyZWFtX3N0b3AocnQpOworCQkJcnQtPnJhdGUgPSAtMTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnJ0LT5zdHJlYW1fbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICphbHNhX3N1YiwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhhbHNhX3N1YiwKKwkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICphbHNhX3N1YikKK3sKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhhbHNhX3N1Yik7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICphbHNhX3N1YikKK3sKKwlzdHJ1Y3QgcGNtX3J1bnRpbWUgKnJ0ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChhbHNhX3N1Yik7CisJc3RydWN0IHBjbV9zdWJzdHJlYW0gKnN1YiA9IHVzYjZmaXJlX3BjbV9nZXRfc3Vic3RyZWFtKGFsc2Ffc3ViKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICphbHNhX3J0ID0gYWxzYV9zdWItPnJ1bnRpbWU7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmIChydC0+cGFuaWMpCisJCXJldHVybiAtRVBJUEU7CisJaWYgKCFzdWIpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmcnQtPnN0cmVhbV9tdXRleCk7CisJc3ViLT5kbWFfb2ZmID0gMDsKKwlzdWItPnBlcmlvZF9vZmYgPSAwOworCisJaWYgKHJ0LT5zdHJlYW1fc3RhdGUgPT0gU1RSRUFNX0RJU0FCTEVEKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzKTsgaSsrKQorCQkJaWYgKGFsc2FfcnQtPnJhdGUgPT0gcmF0ZXNbaV0pIHsKKwkJCQlydC0+cmF0ZSA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCWlmIChpID09IEFSUkFZX1NJWkUocmF0ZXMpKSB7CisJCQltdXRleF91bmxvY2soJnJ0LT5zdHJlYW1fbXV0ZXgpOworCQkJc25kX3ByaW50aygiaW52YWxpZCByYXRlICVkIGluIHByZXBhcmUuXG4iLAorCQkJCQlhbHNhX3J0LT5yYXRlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcmV0ID0gdXNiNmZpcmVfcGNtX3NldF9yYXRlKHJ0KTsKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfdW5sb2NrKCZydC0+c3RyZWFtX211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0ID0gdXNiNmZpcmVfcGNtX3N0cmVhbV9zdGFydChydCk7CisJCWlmIChyZXQpIHsKKwkJCW11dGV4X3VubG9jaygmcnQtPnN0cmVhbV9tdXRleCk7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAorCQkJCQkiY291bGQgbm90IHN0YXJ0IHBjbSBzdHJlYW0uXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZydC0+c3RyZWFtX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmFsc2Ffc3ViLCBpbnQgY21kKQoreworCXN0cnVjdCBwY21fc3Vic3RyZWFtICpzdWIgPSB1c2I2ZmlyZV9wY21fZ2V0X3N1YnN0cmVhbShhbHNhX3N1Yik7CisJc3RydWN0IHBjbV9ydW50aW1lICpydCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoYWxzYV9zdWIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocnQtPnBhbmljKQorCQlyZXR1cm4gLUVQSVBFOworCWlmICghc3ViKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzdWItPmxvY2ssIGZsYWdzKTsKKwkJc3ViLT5hY3RpdmUgPSB0cnVlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWItPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3ViLT5sb2NrLCBmbGFncyk7CisJCXN1Yi0+YWN0aXZlID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1Yi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHVzYjZmaXJlX3BjbV9wb2ludGVyKAorCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmFsc2Ffc3ViKQoreworCXN0cnVjdCBwY21fc3Vic3RyZWFtICpzdWIgPSB1c2I2ZmlyZV9wY21fZ2V0X3N1YnN0cmVhbShhbHNhX3N1Yik7CisJc3RydWN0IHBjbV9ydW50aW1lICpydCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoYWxzYV9zdWIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc25kX3BjbV91ZnJhbWVzX3QgcmV0OworCisJaWYgKHJ0LT5wYW5pYyB8fCAhc3ViKQorCQlyZXR1cm4gU05EUlZfUENNX1NUQVRFX1hSVU47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3ViLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gc3ViLT5kbWFfb2ZmOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1Yi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgcGNtX29wcyA9IHsKKwkub3BlbiA9IHVzYjZmaXJlX3BjbV9vcGVuLAorCS5jbG9zZSA9IHVzYjZmaXJlX3BjbV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gdXNiNmZpcmVfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHVzYjZmaXJlX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0gdXNiNmZpcmVfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPSB1c2I2ZmlyZV9wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9IHVzYjZmaXJlX3BjbV9wb2ludGVyLAorfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IHVzYjZmaXJlX3BjbV9pbml0X3VyYihzdHJ1Y3QgcGNtX3VyYiAqdXJiLAorCQlzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCwgYm9vbCBpbiwgaW50IGVwLAorCQl2b2lkICgqaGFuZGxlcikoc3RydWN0IHVyYiAqKSkKK3sKKwl1cmItPmNoaXAgPSBjaGlwOworCXVzYl9pbml0X3VyYigmdXJiLT5pbnN0YW5jZSk7CisJdXJiLT5pbnN0YW5jZS50cmFuc2Zlcl9idWZmZXIgPSB1cmItPmJ1ZmZlcjsKKwl1cmItPmluc3RhbmNlLnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPQorCQkJUENNX05fUEFDS0VUU19QRVJfVVJCICogUENNX01BWF9QQUNLRVRfU0laRTsKKwl1cmItPmluc3RhbmNlLmRldiA9IGNoaXAtPmRldjsKKwl1cmItPmluc3RhbmNlLnBpcGUgPSBpbiA/IHVzYl9yY3Zpc29jcGlwZShjaGlwLT5kZXYsIGVwKQorCQkJOiB1c2Jfc25kaXNvY3BpcGUoY2hpcC0+ZGV2LCBlcCk7CisJdXJiLT5pbnN0YW5jZS5pbnRlcnZhbCA9IDE7CisJdXJiLT5pbnN0YW5jZS50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwl1cmItPmluc3RhbmNlLmNvbXBsZXRlID0gaGFuZGxlcjsKKwl1cmItPmluc3RhbmNlLmNvbnRleHQgPSB1cmI7CisJdXJiLT5pbnN0YW5jZS5udW1iZXJfb2ZfcGFja2V0cyA9IFBDTV9OX1BBQ0tFVFNfUEVSX1VSQjsKK30KKworaW50IF9fZGV2aW5pdCB1c2I2ZmlyZV9wY21faW5pdChzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfcGNtICpwY207CisJc3RydWN0IHBjbV9ydW50aW1lICpydCA9CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNtX3J1bnRpbWUpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJcnQtPmNoaXAgPSBjaGlwOworCXJ0LT5zdHJlYW1fc3RhdGUgPSBTVFJFQU1fRElTQUJMRUQ7CisJcnQtPnJhdGUgPSAtMTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZydC0+c3RyZWFtX3dhaXRfcXVldWUpOworCW11dGV4X2luaXQoJnJ0LT5zdHJlYW1fbXV0ZXgpOworCisJc3Bpbl9sb2NrX2luaXQoJnJ0LT5wbGF5YmFjay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnQtPmNhcHR1cmUubG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENNX05fVVJCUzsgaSsrKSB7CisJCXVzYjZmaXJlX3BjbV9pbml0X3VyYigmcnQtPmluX3VyYnNbaV0sIGNoaXAsIHRydWUsIElOX0VQLAorCQkJCXVzYjZmaXJlX3BjbV9pbl91cmJfaGFuZGxlcik7CisJCXVzYjZmaXJlX3BjbV9pbml0X3VyYigmcnQtPm91dF91cmJzW2ldLCBjaGlwLCBmYWxzZSwgT1VUX0VQLAorCQkJCXVzYjZmaXJlX3BjbV9vdXRfdXJiX2hhbmRsZXIpOworCisJCXJ0LT5pbl91cmJzW2ldLnBlZXIgPSAmcnQtPm91dF91cmJzW2ldOworCQlydC0+b3V0X3VyYnNbaV0ucGVlciA9ICZydC0+aW5fdXJic1tpXTsKKwl9CisKKwlyZXQgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiRE1YNkZpcmVVU0IiLCAwLCAxLCAxLCAmcGNtKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJjYW5ub3QgY3JlYXRlIHBjbSBpbnN0YW5jZS5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gcnQ7CisJc3RyY3B5KHBjbS0+bmFtZSwgIkRNWCA2RmlyZSBVU0IiKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmcGNtX29wcyk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmcGNtX29wcyk7CisKKwlyZXQgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwKKwkJCVNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVMsCisJCQlzbmRfZG1hX2NvbnRpbnVvdXNfZGF0YShHRlBfS0VSTkVMKSwKKwkJCU1BWF9CVUZTSVpFLCBNQVhfQlVGU0laRSk7CisJaWYgKHJldCkgeworCQlrZnJlZShydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkJImVycm9yIHByZWFsbG9jYXRpbmcgcGNtIGJ1ZmZlcnMuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcnQtPmluc3RhbmNlID0gcGNtOworCisJY2hpcC0+cGNtID0gcnQ7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNiNmZpcmVfcGNtX2Fib3J0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKQoreworCXN0cnVjdCBwY21fcnVudGltZSAqcnQgPSBjaGlwLT5wY207CisJaW50IGk7CisKKwlpZiAocnQpIHsKKwkJcnQtPnBhbmljID0gdHJ1ZTsKKworCQlpZiAocnQtPnBsYXliYWNrLmluc3RhbmNlKQorCQkJc25kX3BjbV9zdG9wKHJ0LT5wbGF5YmFjay5pbnN0YW5jZSwKKwkJCQkJU05EUlZfUENNX1NUQVRFX1hSVU4pOworCQlpZiAocnQtPmNhcHR1cmUuaW5zdGFuY2UpCisJCQlzbmRfcGNtX3N0b3AocnQtPmNhcHR1cmUuaW5zdGFuY2UsCisJCQkJCVNORFJWX1BDTV9TVEFURV9YUlVOKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgUENNX05fVVJCUzsgaSsrKSB7CisJCQl1c2JfcG9pc29uX3VyYigmcnQtPmluX3VyYnNbaV0uaW5zdGFuY2UpOworCQkJdXNiX3BvaXNvbl91cmIoJnJ0LT5vdXRfdXJic1tpXS5pbnN0YW5jZSk7CisJCX0KKworCX0KK30KKwordm9pZCB1c2I2ZmlyZV9wY21fZGVzdHJveShzdHJ1Y3Qgc2ZpcmVfY2hpcCAqY2hpcCkKK3sKKwlrZnJlZShjaGlwLT5wY20pOworCWNoaXAtPnBjbSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvNmZpcmUvcGNtLmggYi9zb3VuZC91c2IvNmZpcmUvcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlZTgxMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9wY20uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogTGludXggZHJpdmVyIGZvciBUZXJyYVRlYyBETVggNkZpcmUgVVNCCisgKgorICogQXV0aG9yOglUb3JzdGVuIFNjaGVuayA8dG9yc3Rlbi5zY2hlbmtAem9oby5jb20+CisgKiBDcmVhdGVkOglKYW4gMDEsIDIwMTEKKyAqIFZlcnNpb246CTAuMy4wCisgKiBDb3B5cmlnaHQ6CShDKSBUb3JzdGVuIFNjaGVuaworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBVU0I2RklSRV9QQ01fSAorI2RlZmluZSBVU0I2RklSRV9QQ01fSAorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitlbnVtIC8qIHNldHRpbmdzIGZvciBwY20gKi8KK3sKKwkvKiBtYXhpbXVtIG9mIEVQX1dfTUFYX1BBQ0tFVF9TSVpFW10gKHNlZSBmaXJtd2FyZS5jKSAqLworCVBDTV9OX1VSQlMgPSAxNiwgUENNX05fUEFDS0VUU19QRVJfVVJCID0gOCwgUENNX01BWF9QQUNLRVRfU0laRSA9IDYwNAorfTsKKworc3RydWN0IHBjbV91cmIgeworCXN0cnVjdCBzZmlyZV9jaGlwICpjaGlwOworCisJLyogQkVHSU4gRE8gTk9UIFNFUEFSQVRFICovCisJc3RydWN0IHVyYiBpbnN0YW5jZTsKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciBwYWNrZXRzW1BDTV9OX1BBQ0tFVFNfUEVSX1VSQl07CisJLyogRU5EIERPIE5PVCBTRVBBUkFURSAqLworCXU4IGJ1ZmZlcltQQ01fTl9QQUNLRVRTX1BFUl9VUkIgKiBQQ01fTUFYX1BBQ0tFVF9TSVpFXTsKKworCXN0cnVjdCBwY21fdXJiICpwZWVyOworfTsKKworc3RydWN0IHBjbV9zdWJzdHJlYW0geworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmluc3RhbmNlOworCisJYm9vbCBhY3RpdmU7CisKKwlzbmRfcGNtX3VmcmFtZXNfdCBkbWFfb2ZmOyAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGFsc2EgZG1hX2FyZWEgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBwZXJpb2Rfb2ZmOyAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGN1cnJlbnQgcGVyaW9kICovCit9OworCitzdHJ1Y3QgcGNtX3J1bnRpbWUgeworCXN0cnVjdCBzZmlyZV9jaGlwICpjaGlwOworCXN0cnVjdCBzbmRfcGNtICppbnN0YW5jZTsKKworCXN0cnVjdCBwY21fc3Vic3RyZWFtIHBsYXliYWNrOworCXN0cnVjdCBwY21fc3Vic3RyZWFtIGNhcHR1cmU7CisJYm9vbCBwYW5pYzsgLyogaWYgc2V0IGRyaXZlciB3b24ndCBkbyBhbnltb3JlIHBjbSBvbiBkZXZpY2UgKi8KKworCXN0cnVjdCBwY21fdXJiIGluX3VyYnNbUENNX05fVVJCU107CisJc3RydWN0IHBjbV91cmIgb3V0X3VyYnNbUENNX05fVVJCU107CisJaW50IGluX3BhY2tldF9zaXplOworCWludCBvdXRfcGFja2V0X3NpemU7CisJaW50IGluX25fYW5hbG9nOyAvKiBudW1iZXIgb2YgYW5hbG9nIGNoYW5uZWxzIHNvdW5kY2FyZCBzZW5kcyAqLworCWludCBvdXRfbl9hbmFsb2c7IC8qIG51bWJlciBvZiBhbmFsb2cgY2hhbm5lbHMgc291bmRjYXJkIHJlY2VpdmVzICovCisKKwlzdHJ1Y3QgbXV0ZXggc3RyZWFtX211dGV4OworCXU4IHN0cmVhbV9zdGF0ZTsgLyogb25lIG9mIFNUUkVBTV9YWFggKHBjbS5jKSAqLworCXU4IHJhdGU7IC8qIG9uZSBvZiBQQ01fUkFURV9YWFggKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBzdHJlYW1fd2FpdF9xdWV1ZTsKKwlib29sIHN0cmVhbV93YWl0X2NvbmQ7Cit9OworCitpbnQgX19kZXZpbml0IHVzYjZmaXJlX3BjbV9pbml0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKTsKK3ZvaWQgdXNiNmZpcmVfcGNtX2Fib3J0KHN0cnVjdCBzZmlyZV9jaGlwICpjaGlwKTsKK3ZvaWQgdXNiNmZpcmVfcGNtX2Rlc3Ryb3koc3RydWN0IHNmaXJlX2NoaXAgKmNoaXApOworI2VuZGlmIC8qIFVTQjZGSVJFX1BDTV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvS2NvbmZpZyBiL3NvdW5kL3VzYi9LY29uZmlnCmluZGV4IDExMjk4NGYuLjk3NzI0ZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9LY29uZmlnCisrKyBiL3NvdW5kL3VzYi9LY29uZmlnCkBAIC02Miw2ICs2Miw3IEBACiAJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIDIgREoKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gNCBESgogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBBdWRpbyA4IERKCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIFRyYWt0b3IgQXVkaW8gMgogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBHdWl0YXIgUmlnIFNlc3Npb24gSS9PCiAJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEd1aXRhciBSaWcgbW9iaWxlCiAJICAgICogTmF0aXZlIEluc3RydW1lbnRzIFRyYWt0b3IgS29udHJvbCBYMQpAQCAtOTcsNSArOTgsMjEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC11c2ItdXMxMjJsLgogCitjb25maWcgU05EX1VTQl82RklSRQorICAgICAgICB0cmlzdGF0ZSAiVGVycmFUZWMgRE1YIDZGaXJlIFVTQiIKKyAgICAgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICAgICAgc2VsZWN0IEZXX0xPQURFUgorICAgICAgICBzZWxlY3QgU05EX1JBV01JREkKKyAgICAgICAgc2VsZWN0IFNORF9QQ00KKyAgICAgICAgaGVscAorICAgICAgICAgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBUZXJyYVRlYyA2ZmlyZSBETVggVVNCIGludGVyZmFjZS4KKworICAgICAgICAgIFlvdSB3aWxsIG5lZWQgZmlybXdhcmUgZmlsZXMgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlIGRldmljZQorICAgICAgICAgIGFmdGVyIGl0IGhhcyBiZWVuIGNvbGRzdGFydGVkLiBUaGlzIGRyaXZlciBjdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgICAgIGZpcm13YXJlIGxvYWRpbmcgZm9yIGFsbCBkZXZpY2VzLiBJZiB5b3Ugb3duIHN1Y2ggYSBkZXZpY2UsCisgICAgICAgICAgeW91IGNvdWxkIHN0YXJ0IHdpbmRvd3MgYW5kIGxldCB0aGUgd2luZG93cyBkcml2ZXIgdXBsb2FkCisgICAgICAgICAgdGhlIGZpcm13YXJlLiBBcyBsb25nIGFzIHlvdSBkbyBub3QgdW5wbHVnIHlvdXIgZGV2aWNlIGZyb20gcG93ZXIsCisgICAgICAgICAgaXQgc2hvdWxkIGJlIHVzYWJsZS4KKwogZW5kaWYJIyBTTkRfVVNCCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9NYWtlZmlsZSBiL3NvdW5kL3VzYi9NYWtlZmlsZQppbmRleCAxZTM2MmJmLi5jZjllZDY2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvTWFrZWZpbGUKKysrIGIvc291bmQvdXNiL01ha2VmaWxlCkBAIC0yMyw0ICsyMyw0IEBACiBvYmotJChDT05GSUdfU05EX1VTQl9VU1gyWSkgKz0gc25kLXVzYm1pZGktbGliLm8KIG9iai0kKENPTkZJR19TTkRfVVNCX1VTMTIyTCkgKz0gc25kLXVzYm1pZGktbGliLm8KIAotb2JqLSQoQ09ORklHX1NORCkgKz0gbWlzYy8gdXN4MnkvIGNhaWFxLworb2JqLSQoQ09ORklHX1NORCkgKz0gbWlzYy8gdXN4MnkvIGNhaWFxLyA2ZmlyZS8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jIGIvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKaW5kZXggNjZlYWJhZi4uZDBkNDkzYyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKQEAgLTgwNSw2ICs4MDUsNyBAQAogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU8yREopOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU84REopOgorCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfVFJBS1RPUkFVRElPMik6CiAJCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfODgyMDA7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYyBiL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYwppbmRleCA2NDgwYzMyLi40NWJjNGEyIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2RldmljZS5jCkBAIC00Niw2ICs0Niw3IEBACiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEF1ZGlvIDIgREp9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgQXVkaW8gNCBESn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyA4IERKfSwiCisJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFRyYWt0b3IgQXVkaW8gMn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBTZXNzaW9uIEkvT30sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBHdWl0YXJSaWcgbW9iaWxlfSIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgVHJha3RvciBLb250cm9sIFgxfSIKQEAgLTE0MCw2ICsxNDEsMTEgQEAKIAkJLmlkVmVuZG9yID0gICAgIFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCiAJCS5pZFByb2R1Y3QgPSAgICBVU0JfUElEX1RSQUtUT1JLT05UUk9MUzQKIAl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzID0gIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCQkuaWRWZW5kb3IgPSAgICAgVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKKwkJLmlkUHJvZHVjdCA9ICAgIFVTQl9QSURfVFJBS1RPUkFVRElPMgorCX0sCiAJeyAvKiB0ZXJtaW5hdG9yICovIH0KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuaCBiL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuaAppbmRleCBlM2Q4YTNlLi5iMmIzMTAxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmgKKysrIGIvc291bmQvdXNiL2NhaWFxL2RldmljZS5oCkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5lIFVTQl9QSURfR1VJVEFSUklHTU9CSUxFCQkweDBkOGQKICNkZWZpbmUgVVNCX1BJRF9UUkFLVE9SS09OVFJPTFgxCTB4MjMwNQogI2RlZmluZSBVU0JfUElEX1RSQUtUT1JLT05UUk9MUzQJMHhiYWZmCisjZGVmaW5lIFVTQl9QSURfVFJBS1RPUkFVRElPMgkJMHgwNDFkCiAKICNkZWZpbmUgRVAxX0JVRlNJWkUgNjQKICNkZWZpbmUgRVA0X0JVRlNJWkUgNTEyCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FyZC5jIGIvc291bmQvdXNiL2NhcmQuYwppbmRleCBjMGY4MjcwYi4uYTkwNjYyYSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhcmQuYworKysgYi9zb3VuZC91c2IvY2FyZC5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTY1LDYgKzY2LDcgQEAKICNpbmNsdWRlICJwY20uaCIKICNpbmNsdWRlICJ1cmIuaCIKICNpbmNsdWRlICJmb3JtYXQuaCIKKyNpbmNsdWRlICJwb3dlci5oIgogCiBNT0RVTEVfQVVUSE9SKCJUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlVTQiBBdWRpbyIpOwpAQCAtMjgyLDYgKzI4NCwxNSBAQAogCXJldHVybiBzbmRfdXNiX2F1ZGlvX2ZyZWUoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlbW92ZV90cmFpbGluZ19zcGFjZXMoY2hhciAqc3RyKQoreworCWNoYXIgKnA7CisKKwlpZiAoISpzdHIpCisJCXJldHVybjsKKwlmb3IgKHAgPSBzdHIgKyBzdHJsZW4oc3RyKSAtIDE7IHAgPj0gc3RyICYmIGlzc3BhY2UoKnApOyBwLS0pCisJCSpwID0gMDsKK30KIAogLyoKICAqIGNyZWF0ZSBhIGNoaXAgaW5zdGFuY2UgYW5kIHNldCBpdHMgbmFtZXMuCkBAIC0zMzAsNiArMzQxLDcgQEAKIAljaGlwLT5zZXR1cCA9IGRldmljZV9zZXR1cFtpZHhdOwogCWNoaXAtPm5ycGFja3MgPSBucnBhY2tzOwogCWNoaXAtPmFzeW5jX3VubGluayA9IGFzeW5jX3VubGluazsKKwljaGlwLT5wcm9iaW5nID0gMTsKIAogCWNoaXAtPnVzYl9pZCA9IFVTQl9JRChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkJICAgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwpAQCAtMzQ5LDcgKzM2MSw3IEBACiAJc25kX2NvbXBvbmVudF9hZGQoY2FyZCwgY29tcG9uZW50KTsKIAogCS8qIHJldHJpZXZlIHRoZSBkZXZpY2Ugc3RyaW5nIGFzIHNob3J0bmFtZSAqLwotCWlmIChxdWlyayAmJiBxdWlyay0+cHJvZHVjdF9uYW1lKSB7CisJaWYgKHF1aXJrICYmIHF1aXJrLT5wcm9kdWN0X25hbWUgJiYgKnF1aXJrLT5wcm9kdWN0X25hbWUpIHsKIAkJc3RybGNweShjYXJkLT5zaG9ydG5hbWUsIHF1aXJrLT5wcm9kdWN0X25hbWUsIHNpemVvZihjYXJkLT5zaG9ydG5hbWUpKTsKIAl9IGVsc2UgewogCQlpZiAoIWRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCB8fApAQCAtMzYxLDkgKzM3MywxMCBAQAogCQkJCVVTQl9JRF9QUk9EVUNUKGNoaXAtPnVzYl9pZCkpOwogCQl9CiAJfQorCXJlbW92ZV90cmFpbGluZ19zcGFjZXMoY2FyZC0+c2hvcnRuYW1lKTsKIAogCS8qIHJldHJpZXZlIHRoZSB2ZW5kb3IgYW5kIGRldmljZSBzdHJpbmdzIGFzIGxvbmduYW1lICovCi0JaWYgKHF1aXJrICYmIHF1aXJrLT52ZW5kb3JfbmFtZSkgeworCWlmIChxdWlyayAmJiBxdWlyay0+dmVuZG9yX25hbWUgJiYgKnF1aXJrLT52ZW5kb3JfbmFtZSkgewogCQlsZW4gPSBzdHJsY3B5KGNhcmQtPmxvbmduYW1lLCBxdWlyay0+dmVuZG9yX25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSkpOwogCX0gZWxzZSB7CiAJCWlmIChkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlcikKQEAgLTM3Myw4ICszODYsMTEgQEAKIAkJCWxlbiA9IDA7CiAJCS8qIHdlIGRvbid0IHJlYWxseSBjYXJlIGlmIHRoZXJlIGlzbid0IGFueSB2ZW5kb3Igc3RyaW5nICovCiAJfQotCWlmIChsZW4gPiAwKQotCQlzdHJsY2F0KGNhcmQtPmxvbmduYW1lLCAiICIsIHNpemVvZihjYXJkLT5sb25nbmFtZSkpOworCWlmIChsZW4gPiAwKSB7CisJCXJlbW92ZV90cmFpbGluZ19zcGFjZXMoY2FyZC0+bG9uZ25hbWUpOworCQlpZiAoKmNhcmQtPmxvbmduYW1lKQorCQkJc3RybGNhdChjYXJkLT5sb25nbmFtZSwgIiAiLCBzaXplb2YoY2FyZC0+bG9uZ25hbWUpKTsKKwl9CiAKIAlzdHJsY2F0KGNhcmQtPmxvbmduYW1lLCBjYXJkLT5zaG9ydG5hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSkpOwogCkBAIC00NTEsNiArNDY3LDcgQEAKIAkJCQlnb3RvIF9fZXJyb3I7CiAJCQl9CiAJCQljaGlwID0gdXNiX2NoaXBbaV07CisJCQljaGlwLT5wcm9iaW5nID0gMTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNDY2LDYgKzQ4Myw3IEBACiAJCQkJCWdvdG8gX19lcnJvcjsKIAkJCQl9CiAJCQkJc25kX2NhcmRfc2V0X2RldihjaGlwLT5jYXJkLCAmaW50Zi0+ZGV2KTsKKwkJCQljaGlwLT5wbV9pbnRmID0gaW50ZjsKIAkJCQlicmVhazsKIAkJCX0KIAkJaWYgKCFjaGlwKSB7CkBAIC01MDUsNiArNTIzLDcgQEAKIAogCXVzYl9jaGlwW2NoaXAtPmluZGV4XSA9IGNoaXA7CiAJY2hpcC0+bnVtX2ludGVyZmFjZXMrKzsKKwljaGlwLT5wcm9iaW5nID0gMDsKIAltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlyZXR1cm4gY2hpcDsKIApAQCAtNTgxLDI5ICs2MDAsNjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQorCitpbnQgc25kX3VzYl9hdXRvcmVzdW1lKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwKQoreworCWludCBlcnIgPSAtRU5PREVWOworCisJaWYgKCFjaGlwLT5zaHV0ZG93biAmJiAhY2hpcC0+cHJvYmluZykKKwkJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGNoaXAtPnBtX2ludGYpOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBzbmRfdXNiX2F1dG9zdXNwZW5kKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwKQoreworCWlmICghY2hpcC0+c2h1dGRvd24gJiYgIWNoaXAtPnByb2JpbmcpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShjaGlwLT5wbV9pbnRmKTsKK30KKwogc3RhdGljIGludCB1c2JfYXVkaW9fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAJc3RydWN0IHNuZF91c2Jfc3RyZWFtICphczsKKwlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXI7CiAKIAlpZiAoY2hpcCA9PSAodm9pZCAqKS0xTCkKIAkJcmV0dXJuIDA7CiAKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNoaXAtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0JaWYgKCFjaGlwLT5udW1fc3VzcGVuZGVkX2ludGYrKykgewotCQlsaXN0X2Zvcl9lYWNoKHAsICZjaGlwLT5wY21fbGlzdCkgewotCQkJYXMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBzbmRfdXNiX3N0cmVhbSwgbGlzdCk7Ci0JCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGFzLT5wY20pOwotCQl9CisJaWYgKCEobWVzc2FnZS5ldmVudCAmIFBNX0VWRU5UX0FVVE8pKSB7CisJCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKwkJaWYgKCFjaGlwLT5udW1fc3VzcGVuZGVkX2ludGYrKykgeworCQkJbGlzdF9mb3JfZWFjaChwLCAmY2hpcC0+cGNtX2xpc3QpIHsKKwkJCQlhcyA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNuZF91c2Jfc3RyZWFtLCBsaXN0KTsKKwkJCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGFzLT5wY20pOworCQkJfQorIAkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIG90aGVyd2lzZSB3ZSBrZWVwIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gaW4gdGhlIGRhcmsKKwkJICogdG8ga2VlcCB0aGlzIHRyYW5zcGFyZW50CisJCSAqLworCQlpZiAoIWNoaXAtPm51bV9zdXNwZW5kZWRfaW50ZisrKQorCQkJY2hpcC0+YXV0b3N1c3BlbmRlZCA9IDE7CiAJfQogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtaXhlciwgJmNoaXAtPm1peGVyX2xpc3QsIGxpc3QpCisJCXNuZF91c2JfbWl4ZXJfaW5hY3RpdmF0ZShtaXhlcik7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB1c2JfYXVkaW9fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXI7CisJaW50IGVyciA9IDA7CiAKIAlpZiAoY2hpcCA9PSAodm9pZCAqKS0xTCkKIAkJcmV0dXJuIDA7CkBAIC02MTEsMTIgKzY2MiwyMCBAQAogCQlyZXR1cm4gMDsKIAkvKgogCSAqIEFMU0EgbGVhdmVzIG1hdGVyaWFsIHJlc3VtcHRpb24gdG8gdXNlciBzcGFjZQotCSAqIHdlIGp1c3Qgbm90aWZ5CisJICogd2UganVzdCBub3RpZnkgYW5kIHJlc3RhcnQgdGhlIG1peGVycwogCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobWl4ZXIsICZjaGlwLT5taXhlcl9saXN0LCBsaXN0KSB7CisJCWVyciA9IHNuZF91c2JfbWl4ZXJfYWN0aXZhdGUobWl4ZXIpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyX291dDsKKwl9CiAKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNoaXAtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CisJaWYgKCFjaGlwLT5hdXRvc3VzcGVuZGVkKQorCQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNoaXAtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CisJY2hpcC0+YXV0b3N1c3BlbmRlZCA9IDA7CiAKLQlyZXR1cm4gMDsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKIH0KICNlbHNlCiAjZGVmaW5lIHVzYl9hdWRpb19zdXNwZW5kCU5VTEwKQEAgLTY0NCw2ICs3MDMsNyBAQAogCS5zdXNwZW5kID0JdXNiX2F1ZGlvX3N1c3BlbmQsCiAJLnJlc3VtZSA9CXVzYl9hdWRpb19yZXN1bWUsCiAJLmlkX3RhYmxlID0JdXNiX2F1ZGlvX2lkcywKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc25kX3VzYl9hdWRpb19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWlkaS5jIGIvc291bmQvdXNiL21pZGkuYwppbmRleCBkYjJkYzVmLi5iNGIzOWMwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWlkaS5jCisrKyBiL3NvdW5kL3VzYi9taWRpLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9hc2VxdWVuY2VyLmg+CiAjaW5jbHVkZSAidXNiYXVkaW8uaCIKICNpbmNsdWRlICJtaWRpLmgiCisjaW5jbHVkZSAicG93ZXIuaCIKICNpbmNsdWRlICJoZWxwZXIuaCIKIAogLyoKQEAgLTEwNDQsNiArMTA0NSw3IEBACiAJc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGkgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHVzYm1pZGlfb3V0X3BvcnQqIHBvcnQgPSBOVUxMOwogCWludCBpLCBqOworCWludCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUlESV9NQVhfRU5EUE9JTlRTOyArK2kpCiAJCWlmICh1bWlkaS0+ZW5kcG9pbnRzW2ldLm91dCkKQEAgLTEwNTYsNiArMTA1OCw5IEBACiAJCXNuZF9CVUcoKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CisJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHVtaWRpLT5pZmFjZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAtRUlPOwogCXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcG9ydDsKIAlwb3J0LT5zdGF0ZSA9IFNUQVRFX1VOS05PV047CiAJc3Vic3RyZWFtX29wZW4oc3Vic3RyZWFtLCAxKTsKQEAgLTEwNjQsNyArMTA2OSwxMCBAQAogCiBzdGF0aWMgaW50IHNuZF91c2JtaWRpX291dHB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CisJc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGkgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKIAlzdWJzdHJlYW1fb3BlbihzdWJzdHJlYW0sIDApOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSh1bWlkaS0+aWZhY2UpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWl4ZXIuYyBiL3NvdW5kL3VzYi9taXhlci5jCmluZGV4IDg1YWY2MDUuLjVlNDc3NTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlci5jCisrKyBiL3NvdW5kL3VzYi9taXhlci5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAibWl4ZXIuaCIKICNpbmNsdWRlICJoZWxwZXIuaCIKICNpbmNsdWRlICJtaXhlcl9xdWlya3MuaCIKKyNpbmNsdWRlICJwb3dlci5oIgogCiAjZGVmaW5lIE1BWF9JRF9FTEVNUwkyNTYKIApAQCAtMjk1LDE2ICsyOTYsMjIgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKIAlpbnQgdmFsX2xlbiA9IGN2YWwtPnZhbF90eXBlID49IFVTQl9NSVhFUl9TMTYgPyAyIDogMTsKIAlpbnQgdGltZW91dCA9IDEwOworCWludCBlcnI7CiAKKwllcnIgPSBzbmRfdXNiX2F1dG9yZXN1bWUoY3ZhbC0+bWl4ZXItPmNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLUVJTzsKIAl3aGlsZSAodGltZW91dC0tID4gMCkgewogCQlpZiAoc25kX3VzYl9jdGxfbXNnKGNoaXAtPmRldiwgdXNiX3JjdmN0cmxwaXBlKGNoaXAtPmRldiwgMCksIHJlcXVlc3QsCiAJCQkJICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCiAJCQkJICAgIHZhbGlkeCwgc25kX3VzYl9jdHJsX2ludGYoY2hpcCkgfCAoY3ZhbC0+aWQgPDwgOCksCiAJCQkJICAgIGJ1ZiwgdmFsX2xlbiwgMTAwKSA+PSB2YWxfbGVuKSB7CiAJCQkqdmFsdWVfcmV0ID0gY29udmVydF9zaWduZWRfdmFsdWUoY3ZhbCwgc25kX3VzYl9jb21iaW5lX2J5dGVzKGJ1ZiwgdmFsX2xlbikpOworCQkJc25kX3VzYl9hdXRvc3VzcGVuZChjdmFsLT5taXhlci0+Y2hpcCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KKwlzbmRfdXNiX2F1dG9zdXNwZW5kKGN2YWwtPm1peGVyLT5jaGlwKTsKIAlzbmRfcHJpbnRkZChLRVJOX0VSUiAiY2Fubm90IGdldCBjdGwgdmFsdWU6IHJlcSA9ICUjeCwgd1ZhbHVlID0gJSN4LCB3SW5kZXggPSAlI3gsIHR5cGUgPSAlZFxuIiwKIAkJICAgIHJlcXVlc3QsIHZhbGlkeCwgc25kX3VzYl9jdHJsX2ludGYoY2hpcCkgfCAoY3ZhbC0+aWQgPDwgOCksIGN2YWwtPnZhbF90eXBlKTsKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTMyOCwxMiArMzM1LDE4IEBACiAKIAltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CiAKKwlyZXQgPSBzbmRfdXNiX2F1dG9yZXN1bWUoY2hpcCkgPyAtRUlPIDogMDsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCiAJcmV0ID0gc25kX3VzYl9jdGxfbXNnKGNoaXAtPmRldiwgdXNiX3JjdmN0cmxwaXBlKGNoaXAtPmRldiwgMCksIGJSZXF1ZXN0LAogCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKIAkJCSAgICAgIHZhbGlkeCwgc25kX3VzYl9jdHJsX2ludGYoY2hpcCkgfCAoY3ZhbC0+aWQgPDwgOCksCiAJCQkgICAgICBidWYsIHNpemUsIDEwMDApOworCXNuZF91c2JfYXV0b3N1c3BlbmQoY2hpcCk7CiAKIAlpZiAocmV0IDwgMCkgeworZXJyb3I6CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBnZXQgY3RsIHZhbHVlOiByZXEgPSAlI3gsIHdWYWx1ZSA9ICUjeCwgd0luZGV4ID0gJSN4LCB0eXBlID0gJWRcbiIsCiAJCQkgICByZXF1ZXN0LCB2YWxpZHgsIHNuZF91c2JfY3RybF9pbnRmKGNoaXApIHwgKGN2YWwtPmlkIDw8IDgpLCBjdmFsLT52YWxfdHlwZSk7CiAJCXJldHVybiByZXQ7CkBAIC00MTMsNyArNDI2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCA9IGN2YWwtPm1peGVyLT5jaGlwOwogCXVuc2lnbmVkIGNoYXIgYnVmWzJdOwotCWludCB2YWxfbGVuLCB0aW1lb3V0ID0gMTA7CisJaW50IHZhbF9sZW4sIGVyciwgdGltZW91dCA9IDEwOwogCiAJaWYgKGN2YWwtPm1peGVyLT5wcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSB7CiAJCXZhbF9sZW4gPSBjdmFsLT52YWxfdHlwZSA+PSBVU0JfTUlYRVJfUzE2ID8gMiA6IDE7CkBAIC00MzMsMTMgKzQ0NiwxOSBAQAogCXZhbHVlX3NldCA9IGNvbnZlcnRfYnl0ZXNfdmFsdWUoY3ZhbCwgdmFsdWVfc2V0KTsKIAlidWZbMF0gPSB2YWx1ZV9zZXQgJiAweGZmOwogCWJ1ZlsxXSA9ICh2YWx1ZV9zZXQgPj4gOCkgJiAweGZmOworCWVyciA9IHNuZF91c2JfYXV0b3Jlc3VtZShjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIC1FSU87CiAJd2hpbGUgKHRpbWVvdXQtLSA+IDApCiAJCWlmIChzbmRfdXNiX2N0bF9tc2coY2hpcC0+ZGV2LAogCQkJCSAgICB1c2Jfc25kY3RybHBpcGUoY2hpcC0+ZGV2LCAwKSwgcmVxdWVzdCwKIAkJCQkgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCiAJCQkJICAgIHZhbGlkeCwgc25kX3VzYl9jdHJsX2ludGYoY2hpcCkgfCAoY3ZhbC0+aWQgPDwgOCksCi0JCQkJICAgIGJ1ZiwgdmFsX2xlbiwgMTAwKSA+PSAwKQorCQkJCSAgICBidWYsIHZhbF9sZW4sIDEwMCkgPj0gMCkgeworCQkJc25kX3VzYl9hdXRvc3VzcGVuZChjaGlwKTsKIAkJCXJldHVybiAwOworCQl9CisJc25kX3VzYl9hdXRvc3VzcGVuZChjaGlwKTsKIAlzbmRfcHJpbnRkZChLRVJOX0VSUiAiY2Fubm90IHNldCBjdGwgdmFsdWU6IHJlcSA9ICUjeCwgd1ZhbHVlID0gJSN4LCB3SW5kZXggPSAlI3gsIHR5cGUgPSAlZCwgZGF0YSA9ICUjeC8lI3hcbiIsCiAJCSAgICByZXF1ZXN0LCB2YWxpZHgsIHNuZF91c2JfY3RybF9pbnRmKGNoaXApIHwgKGN2YWwtPmlkIDw8IDgpLCBjdmFsLT52YWxfdHlwZSwgYnVmWzBdLCBidWZbMV0pOwogCXJldHVybiAtRUlOVkFMOwpAQCAtOTg3LDYgKzEwMDYsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWw7CiAJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqbWFwOworCXVuc2lnbmVkIGludCByYW5nZTsKIAogCWNvbnRyb2wrKzsgLyogY2hhbmdlIGZyb20gemVyby1iYXNlZCB0byAxLWJhc2VkIHZhbHVlICovCiAKQEAgLTExMjEsNiArMTE0MSw3IEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIFVTQl9JRCgweDA0NmQsIDB4MDgwOCk6CiAJY2FzZSBVU0JfSUQoMHgwNDZkLCAweDA4MDkpOgogCWNhc2UgVVNCX0lEKDB4MDQ2ZCwgMHgwOTkxKToKIAkvKiBNb3N0IGF1ZGlvIHVzYiBkZXZpY2VzIGxpZSBhYm91dCB2b2x1bWUgcmVzb2x1dGlvbi4KQEAgLTExMzYsNiArMTE1NywyMSBAQAogCiAJfQogCisJcmFuZ2UgPSAoY3ZhbC0+bWF4IC0gY3ZhbC0+bWluKSAvIGN2YWwtPnJlczsKKwkvKiBBcmUgdGhlcmUgZGV2aWNlcyB3aXRoIHZvbHVtZSByYW5nZSBtb3JlIHRoYW4gMjU1PyBJIHVzZSBhIGJpdCBtb3JlCisJICogdG8gYmUgc3VyZS4gMzg0IGlzIGEgcmVzb2x1dGlvbiBtYWdpYyBudW1iZXIgZm91bmQgb24gTG9naXRlY2gKKwkgKiBkZXZpY2VzLiBJdCB3aWxsIGRlZmluaXRpdmVseSBjYXRjaCBhbGwgYnVnZ3kgTG9naXRlY2ggZGV2aWNlcy4KKwkgKi8KKwlpZiAocmFuZ2UgPiAzODQpIHsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInVzYl9hdWRpbzogV2FybmluZyEgVW5saWtlbHkgYmlnICIKKwkJCSAgICJ2b2x1bWUgcmFuZ2UgKD0ldSksIGN2YWwtPnJlcyBpcyBwcm9iYWJseSB3cm9uZy4iLAorCQkJICAgcmFuZ2UpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAidXNiX2F1ZGlvOiBbJWRdIEZVIFslc10gY2ggPSAlZCwgIgorCQkJICAgInZhbCA9ICVkLyVkLyVkIiwgY3ZhbC0+aWQsCisJCQkgICBrY3RsLT5pZC5uYW1lLCBjdmFsLT5jaGFubmVscywKKwkJCSAgIGN2YWwtPm1pbiwgY3ZhbC0+bWF4LCBjdmFsLT5yZXMpOworCX0KKwogCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBGVSBbJXNdIGNoID0gJWQsIHZhbCA9ICVkLyVkLyVkXG4iLAogCQkgICAgY3ZhbC0+aWQsIGtjdGwtPmlkLm5hbWUsIGN2YWwtPmNoYW5uZWxzLCBjdmFsLT5taW4sIGN2YWwtPm1heCwgY3ZhbC0+cmVzKTsKIAlhZGRfY29udHJvbF90b19lbXB0eShzdGF0ZSwga2N0bCk7CkBAIC0yMDU4LDggKzIwOTQsOSBAQAogewogCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciA9IHVyYi0+Y29udGV4dDsKIAlpbnQgbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCB1c3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKLQlpZiAodXJiLT5zdGF0dXMgIT0gMCkKKwlpZiAodXN0YXR1cyAhPSAwKQogCQlnb3RvIHJlcXVldWU7CiAKIAlpZiAobWl4ZXItPnByb3RvY29sID09IFVBQ19WRVJTSU9OXzEpIHsKQEAgLTIxMDAsMTIgKzIxMzcsMzIgQEAKIAl9CiAKIHJlcXVldWU6Ci0JaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQgJiYgdXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpIHsKKwlpZiAodXN0YXR1cyAhPSAtRU5PRU5UICYmIHVzdGF0dXMgIT0gLUVDT05OUkVTRVQgJiYgdXN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CiAJCXVyYi0+ZGV2ID0gbWl4ZXItPmNoaXAtPmRldjsKIAkJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAl9CiB9CiAKKy8qIHN0b3AgYW55IGJ1cyBhY3Rpdml0eSBvZiBhIG1peGVyICovCit2b2lkIHNuZF91c2JfbWl4ZXJfaW5hY3RpdmF0ZShzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCit7CisJdXNiX2tpbGxfdXJiKG1peGVyLT51cmIpOworCXVzYl9raWxsX3VyYihtaXhlci0+cmNfdXJiKTsKK30KKworaW50IHNuZF91c2JfbWl4ZXJfYWN0aXZhdGUoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQoreworCWludCBlcnI7CisKKwlpZiAobWl4ZXItPnVyYikgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYihtaXhlci0+dXJiLCBHRlBfTk9JTyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyogY3JlYXRlIHRoZSBoYW5kbGVyIGZvciB0aGUgb3B0aW9uYWwgc3RhdHVzIGludGVycnVwdCBlbmRwb2ludCAqLwogc3RhdGljIGludCBzbmRfdXNiX21peGVyX3N0YXR1c19jcmVhdGUoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQogewpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyLmggYi9zb3VuZC91c2IvbWl4ZXIuaAppbmRleCAyNmM2MzZjLi5iNGEyYzgxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXIuaAorKysgYi9zb3VuZC91c2IvbWl4ZXIuaApAQCAtNTIsNSArNTIsNyBAQAogCiBpbnQgc25kX3VzYl9taXhlcl9zZXRfY3RsX3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLAogCQkJCWludCByZXF1ZXN0LCBpbnQgdmFsaWR4LCBpbnQgdmFsdWVfc2V0KTsKK3ZvaWQgc25kX3VzYl9taXhlcl9pbmFjdGl2YXRlKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcik7CitpbnQgc25kX3VzYl9taXhlcl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpOwogCiAjZW5kaWYgLyogX19VU0JNSVhFUl9IICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWl4ZXJfcXVpcmtzLmMgYi9zb3VuZC91c2IvbWl4ZXJfcXVpcmtzLmMKaW5kZXggNzgyZjc0MS4uNzNkY2M4MiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21peGVyX3F1aXJrcy5jCisrKyBiL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuYwpAQCAtMzQ2LDYgKzM0NiwxNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogTmF0aXZlIEluc3RydW1lbnRzIGRldmljZSBxdWlya3MgKi8KKworI2RlZmluZSBfTUFLRV9OSV9DT05UUk9MKGJSZXF1ZXN0LHdJbmRleCkgKChiUmVxdWVzdCkgPDwgMTYgfCAod0luZGV4KSkKKworc3RhdGljIGludCBzbmRfbmF0aXZlaW5zdHJ1bWVudHNfY29udHJvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtaXhlci0+Y2hpcC0+ZGV2OworCXU4IGJSZXF1ZXN0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJdTE2IHdJbmRleCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmZmOworCXU4IHRtcDsKKworCWludCByZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgYlJlcXVlc3QsCisJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCQkgIDAsIGNwdV90b19sZTE2KHdJbmRleCksCisJCQkJICAmdG1wLCBzaXplb2YodG1wKSwgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAidW5hYmxlIHRvIGlzc3VlIHZlbmRvciByZWFkIHJlcXVlc3QgKHJldCA9ICVkKSIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB0bXA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbmF0aXZlaW5zdHJ1bWVudHNfY29udHJvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtaXhlci0+Y2hpcC0+ZGV2OworCXU4IGJSZXF1ZXN0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJdTE2IHdJbmRleCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmZmOworCXUxNiB3VmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWludCByZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgYlJlcXVlc3QsCisJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJICBjcHVfdG9fbGUxNih3VmFsdWUpLCBjcHVfdG9fbGUxNih3SW5kZXgpLAorCQkJCSAgTlVMTCwgMCwgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAidW5hYmxlIHRvIGlzc3VlIHZlbmRvciB3cml0ZSByZXF1ZXN0IChyZXQgPSAlZCkiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX25hdGl2ZWluc3RydW1lbnRzX3RhNl9taXhlcnNbXSA9IHsKKwl7CisJCS5uYW1lID0gIkRpcmVjdCBUaHJ1IENoYW5uZWwgQSIsCisJCS5wcml2YXRlX3ZhbHVlID0gX01BS0VfTklfQ09OVFJPTCgweDAxLCAweDAzKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRGlyZWN0IFRocnUgQ2hhbm5lbCBCIiwKKwkJLnByaXZhdGVfdmFsdWUgPSBfTUFLRV9OSV9DT05UUk9MKDB4MDEsIDB4MDUpLAorCX0sCisJeworCQkubmFtZSA9ICJQaG9ubyBJbnB1dCBDaGFubmVsIEEiLAorCQkucHJpdmF0ZV92YWx1ZSA9IF9NQUtFX05JX0NPTlRST0woMHgwMiwgMHgwMyksCisJfSwKKwl7CisJCS5uYW1lID0gIlBob25vIElucHV0IENoYW5uZWwgQiIsCisJCS5wcml2YXRlX3ZhbHVlID0gX01BS0VfTklfQ09OVFJPTCgweDAyLCAweDA1KSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9uYXRpdmVpbnN0cnVtZW50c190YTEwX21peGVyc1tdID0geworCXsKKwkJLm5hbWUgPSAiRGlyZWN0IFRocnUgQ2hhbm5lbCBBIiwKKwkJLnByaXZhdGVfdmFsdWUgPSBfTUFLRV9OSV9DT05UUk9MKDB4MDEsIDB4MDMpLAorCX0sCisJeworCQkubmFtZSA9ICJEaXJlY3QgVGhydSBDaGFubmVsIEIiLAorCQkucHJpdmF0ZV92YWx1ZSA9IF9NQUtFX05JX0NPTlRST0woMHgwMSwgMHgwNSksCisJfSwKKwl7CisJCS5uYW1lID0gIkRpcmVjdCBUaHJ1IENoYW5uZWwgQyIsCisJCS5wcml2YXRlX3ZhbHVlID0gX01BS0VfTklfQ09OVFJPTCgweDAxLCAweDA3KSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRGlyZWN0IFRocnUgQ2hhbm5lbCBEIiwKKwkJLnByaXZhdGVfdmFsdWUgPSBfTUFLRV9OSV9DT05UUk9MKDB4MDEsIDB4MDkpLAorCX0sCisJeworCQkubmFtZSA9ICJQaG9ubyBJbnB1dCBDaGFubmVsIEEiLAorCQkucHJpdmF0ZV92YWx1ZSA9IF9NQUtFX05JX0NPTlRST0woMHgwMiwgMHgwMyksCisJfSwKKwl7CisJCS5uYW1lID0gIlBob25vIElucHV0IENoYW5uZWwgQiIsCisJCS5wcml2YXRlX3ZhbHVlID0gX01BS0VfTklfQ09OVFJPTCgweDAyLCAweDA1KSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiUGhvbm8gSW5wdXQgQ2hhbm5lbCBDIiwKKwkJLnByaXZhdGVfdmFsdWUgPSBfTUFLRV9OSV9DT05UUk9MKDB4MDIsIDB4MDcpLAorCX0sCisJeworCQkubmFtZSA9ICJQaG9ubyBJbnB1dCBDaGFubmVsIEQiLAorCQkucHJpdmF0ZV92YWx1ZSA9IF9NQUtFX05JX0NPTlRST0woMHgwMiwgMHgwOSksCisJfSwKK307CisKK3N0YXRpYyBpbnQgc25kX25hdGl2ZWluc3RydW1lbnRzX2NyZWF0ZV9taXhlcihzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprYywKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworCWludCBpLCBlcnIgPSAwOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRlbXBsYXRlID0geworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJCS5nZXQgPSBzbmRfbmF0aXZlaW5zdHJ1bWVudHNfY29udHJvbF9nZXQsCisJCS5wdXQgPSBzbmRfbmF0aXZlaW5zdHJ1bWVudHNfY29udHJvbF9wdXQsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwl9OworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbCAqYzsKKworCQl0ZW1wbGF0ZS5uYW1lID0ga2NbaV0ubmFtZTsKKwkJdGVtcGxhdGUucHJpdmF0ZV92YWx1ZSA9IGtjW2ldLnByaXZhdGVfdmFsdWU7CisKKwkJYyA9IHNuZF9jdGxfbmV3MSgmdGVtcGxhdGUsIG1peGVyKTsKKwkJZXJyID0gc25kX2N0bF9hZGQobWl4ZXItPmNoaXAtPmNhcmQsIGMpOworCisJCWlmIChlcnIgPCAwKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKwogdm9pZCBzbmRfZW11dXNiX3NldF9zYW1wbGVyYXRlKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAogCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgc2FtcGxlcmF0ZV9pZCkKIHsKQEAgLTM2NywzMSArNTAyLDQ0IEBACiAKIGludCBzbmRfdXNiX21peGVyX2FwcGx5X2NyZWF0ZV9xdWlyayhzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwogCiAJaWYgKChlcnIgPSBzbmRfdXNiX3NvdW5kYmxhc3Rlcl9yZW1vdGVfaW5pdChtaXhlcikpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzAyMCkgfHwKLQkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8Ci0JICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQyKSB8fAotCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpIHsKLQkJaWYgKChlcnIgPSBzbmRfYXVkaWd5Mm54X2NvbnRyb2xzX2NyZWF0ZShtaXhlcikpIDwgMCkKLQkJCXJldHVybiBlcnI7CisJc3dpdGNoIChtaXhlci0+Y2hpcC0+dXNiX2lkKSB7CisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDMwMjApOgorCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzMDQwKToKKwljYXNlIFVTQl9JRCgweDA0MWUsIDB4MzA0Mik6CisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpOgorCQllcnIgPSBzbmRfYXVkaWd5Mm54X2NvbnRyb2xzX2NyZWF0ZShtaXhlcik7CisJCWlmIChlcnIgPCAwKQorCQkJYnJlYWs7CiAJCWlmICghc25kX2NhcmRfcHJvY19uZXcobWl4ZXItPmNoaXAtPmNhcmQsICJhdWRpZ3kybngiLCAmZW50cnkpKQogCQkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBtaXhlciwKIAkJCQkJICAgICAgc25kX2F1ZGlneTJueF9wcm9jX3JlYWQpOwotCX0KKwkJYnJlYWs7CiAKLQlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwYjA1LCAweDE3MzkpIHx8Ci0JICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MGIwNSwgMHgxNzQzKSkgeworCWNhc2UgVVNCX0lEKDB4MGIwNSwgMHgxNzM5KToKKwljYXNlIFVTQl9JRCgweDBiMDUsIDB4MTc0Myk6CiAJCWVyciA9IHNuZF94b25hcl91MV9jb250cm9sc19jcmVhdGUobWl4ZXIpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCWJyZWFrOworCisJY2FzZSBVU0JfSUQoMHgxN2NjLCAweDEwMTEpOiAvKiBUcmFrdG9yIEF1ZGlvIDYgKi8KKwkJZXJyID0gc25kX25hdGl2ZWluc3RydW1lbnRzX2NyZWF0ZV9taXhlcihtaXhlciwKKwkJCQlzbmRfbmF0aXZlaW5zdHJ1bWVudHNfdGE2X21peGVycywKKwkJCQlBUlJBWV9TSVpFKHNuZF9uYXRpdmVpbnN0cnVtZW50c190YTZfbWl4ZXJzKSk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfSUQoMHgxN2NjLCAweDEwMjEpOiAvKiBUcmFrdG9yIEF1ZGlvIDEwICovCisJCWVyciA9IHNuZF9uYXRpdmVpbnN0cnVtZW50c19jcmVhdGVfbWl4ZXIobWl4ZXIsCisJCQkJc25kX25hdGl2ZWluc3RydW1lbnRzX3RhMTBfbWl4ZXJzLAorCQkJCUFSUkFZX1NJWkUoc25kX25hdGl2ZWluc3RydW1lbnRzX3RhMTBfbWl4ZXJzKSk7CisJCWJyZWFrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgc25kX3VzYl9taXhlcl9yY19tZW1vcnlfY2hhbmdlKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9wY20uYyBiL3NvdW5kL3VzYi9wY20uYwppbmRleCBlM2Y2ODA1Li5iOGRjYmY0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcGNtLmMKKysrIGIvc291bmQvdXNiL3BjbS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiaGVscGVyLmgiCiAjaW5jbHVkZSAicGNtLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJwb3dlci5oIgogCiAvKgogICogcmV0dXJuIHRoZSBjdXJyZW50IHBjbSBwb2ludGVyLiAganVzdCBiYXNlZCBvbiB0aGUgaHdwdHJfZG9uZSB2YWx1ZS4KQEAgLTczOSw2ICs3NDAsOSBAQAogCQlwdCA9IDEyNSAqICgxIDw8IGZwLT5kYXRhaW50ZXJ2YWwpOwogCQlwdG1pbiA9IG1pbihwdG1pbiwgcHQpOwogCX0KKwllcnIgPSBzbmRfdXNiX2F1dG9yZXN1bWUoc3Vicy0+c3RyZWFtLT5jaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXBhcmFtX3BlcmlvZF90aW1lX2lmX25lZWRlZCA9IFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRTsKIAlpZiAoc25kX3VzYl9nZXRfc3BlZWQoc3Vicy0+ZGV2KSA9PSBVU0JfU1BFRURfRlVMTCkKQEAgLTc1NiwyMSArNzYwLDIxIEBACiAJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKIAkJCQkgICAgICAgcGFyYW1fcGVyaW9kX3RpbWVfaWZfbmVlZGVkLAogCQkJCSAgICAgICAtMSkpIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byByZXBfZXJyOwogCWlmICgoZXJyID0gc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCiAJCQkJICAgICAgIGh3X3J1bGVfY2hhbm5lbHMsIHN1YnMsCiAJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCiAJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAogCQkJCSAgICAgICBwYXJhbV9wZXJpb2RfdGltZV9pZl9uZWVkZWQsCiAJCQkJICAgICAgIC0xKSkgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIHJlcF9lcnI7CiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCiAJCQkJICAgICAgIGh3X3J1bGVfZm9ybWF0LCBzdWJzLAogCQkJCSAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKIAkJCQkgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAogCQkJCSAgICAgICBwYXJhbV9wZXJpb2RfdGltZV9pZl9uZWVkZWQsCiAJCQkJICAgICAgIC0xKSkgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIHJlcF9lcnI7CiAJaWYgKHBhcmFtX3BlcmlvZF90aW1lX2lmX25lZWRlZCA+PSAwKSB7CiAJCWVyciA9IHNuZF9wY21faHdfcnVsZV9hZGQocnVudGltZSwgMCwKIAkJCQkJICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1RJTUUsCkBAIC03ODAsMTEgKzc4NCwxNSBAQAogCQkJCQkgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAogCQkJCQkgIC0xKTsKIAkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byByZXBfZXJyOwogCX0KIAlpZiAoKGVyciA9IHNuZF91c2JfcGNtX2NoZWNrX2tub3QocnVudGltZSwgc3VicykpIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byByZXBfZXJyOwogCXJldHVybiAwOworCityZXBfZXJyOgorCXNuZF91c2JfYXV0b3N1c3BlbmQoc3Vicy0+c3RyZWFtLT5jaGlwKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNuZF91c2JfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBkaXJlY3Rpb24pCkBAIC03OTgsNiArODA2LDcgQEAKIAlydW50aW1lLT5odyA9IHNuZF91c2JfaGFyZHdhcmU7CiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gc3ViczsKIAlzdWJzLT5wY21fc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCS8qIHJ1bnRpbWUgUE0gaXMgYWxzbyBkb25lIHRoZXJlICovCiAJcmV0dXJuIHNldHVwX2h3X2luZm8ocnVudGltZSwgc3Vicyk7CiB9CiAKQEAgLTgxMSw2ICs4MjAsNyBAQAogCQlzdWJzLT5pbnRlcmZhY2UgPSAtMTsKIAl9CiAJc3Vicy0+cGNtX3N1YnN0cmVhbSA9IE5VTEw7CisJc25kX3VzYl9hdXRvc3VzcGVuZChzdWJzLT5zdHJlYW0tPmNoaXApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcG93ZXIuaCBiL3NvdW5kL3VzYi9wb3dlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZWU1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvcG93ZXIuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fVVNCQVVESU9fUE9XRVJfSAorI2RlZmluZSBfX1VTQkFVRElPX1BPV0VSX0gKKworI2lmZGVmIENPTkZJR19QTQoraW50IHNuZF91c2JfYXV0b3Jlc3VtZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCk7Cit2b2lkIHNuZF91c2JfYXV0b3N1c3BlbmQoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHNuZF91c2JfYXV0b3Jlc3VtZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfdXNiX2F1dG9zdXNwZW5kKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwKQoreworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1VTQkFVRElPX1BPV0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaCBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaAppbmRleCA5MjFhODZmLi5jMGRjZmNhIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKKysrIGIvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCkBAIC0yMjkwLDYgKzIyOTAsMjAgQEAKIAl9CiB9LAogCisvKiBOYXRpdmUgSW5zdHJ1bWVudHMgTUsyIHNlcmllcyAqLworeworCS8qIFRyYWt0b3IgQXVkaW8gNiAqLworCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvciA9IDB4MTdjYywKKwkuaWRQcm9kdWN0ID0gMHgxMDEwLAorfSwKK3sKKwkvKiBUcmFrdG9yIEF1ZGlvIDEwICovCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yID0gMHgxN2NjLAorCS5pZFByb2R1Y3QgPSAweDEwMjAsCit9LAorCiAvKiBNaWRpdGVjaCBkZXZpY2VzICovCiB7CiAJVVNCX0RFVklDRSgweDQ3NTIsIDB4MDAxMSksCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLmMgYi9zb3VuZC91c2IvcXVpcmtzLmMKaW5kZXggZTMxNGNkYi4uMzU1NzU5YiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy5jCisrKyBiL3NvdW5kL3VzYi9xdWlya3MuYwpAQCAtNDI1LDYgKzQyNSwzNCBAQAogfQogCiAvKgorICogU29tZSBzb3VuZCBjYXJkcyBmcm9tIE5hdGl2ZSBJbnN0cnVtZW50cyBhcmUgaW4gZmFjdCBjb21wbGlhbnQgdG8gdGhlIFVTQgorICogYXVkaW8gc3RhbmRhcmQgb2YgdmVyc2lvbiAyIGFuZCBvdGhlciBhcHByb3ZlZCBVU0Igc3RhbmRhcmRzLCBldmVuIHRob3VnaAorICogdGhleSBjb21lIHVwIGFzIHZlbmRvci1zcGVjaWZpYyBkZXZpY2Ugd2hlbiBmaXJzdCBjb25uZWN0ZWQuCisgKgorICogSG93ZXZlciwgdGhleSBjYW4gYmUgdG9sZCB0byBjb21lIHVwIHdpdGggYSBuZXcgc2V0IG9mIGRlc2NyaXB0b3JzCisgKiB1cG9uIHRoZWlyIG5leHQgZW51bWVyYXRpb24sIGFuZCB0aGUgaW50ZXJmYWNlcyBhbm5vdW5jZWQgYnkgdGhlIG5ldworICogZGVzY3JpcHRvcnMgd2lsbCB0aGVuIGJlIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCdzIGNsYXNzIGRyaXZlcnMuIEFzIHRoZQorICogcHJvZHVjdCBJRCB3aWxsIGFsc28gY2hhbmdlLCBubyBmdXJ0aGVyIGNoZWNrcyBhcmUgcmVxdWlyZWQuCisgKi8KKworc3RhdGljIGludCBzbmRfdXNiX25hdGl2ZWluc3RydW1lbnRzX2Jvb3RfcXVpcmsoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJICAweGFmLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCSAgY3B1X3RvX2xlMTYoMSksIDAsIE5VTEwsIDAsIDEwMDApOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl1c2JfcmVzZXRfZGV2aWNlKGRldik7CisKKwkvKiByZXR1cm4gLUVBR0FJTiwgc28gdGhlIGNyZWF0aW9uIG9mIGFuIGF1ZGlvIGludGVyZmFjZSBmb3IgdGhpcworCSAqIHRlbXBvcmFyeSBkZXZpY2UgaXMgYWJvcnRlZC4gVGhlIGRldmljZSB3aWxsIHJlY29ubmVjdCB3aXRoIGEKKwkgKiBuZXcgcHJvZHVjdCBJRCAqLworCXJldHVybiAtRUFHQUlOOworfQorCisvKgogICogU2V0dXAgcXVpcmtzCiAgKi8KICNkZWZpbmUgQVVESU9QSElMRV9TRVQJCQkweDAxIC8qIGlmIHNldCwgcGFyc2UgZGV2aWNlX3NldHVwICovCkBAIC00ODksMjcgKzUxNywzMyBAQAogCXUzMiBpZCA9IFVTQl9JRChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCi0JLyogU0IgRXh0aWd5IG5lZWRzIHNwZWNpYWwgYm9vdC11cCBzZXF1ZW5jZSAqLwotCS8qIGlmIG1vcmUgbW9kZWxzIGNvbWUsIHRoaXMgd2lsbCBnbyB0byB0aGUgcXVpcmsgbGlzdC4gKi8KLQlpZiAoaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDAwKSkKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDMwMDApOgorCQkvKiBTQiBFeHRpZ3kgbmVlZHMgc3BlY2lhbCBib290LXVwIHNlcXVlbmNlICovCisJCS8qIGlmIG1vcmUgbW9kZWxzIGNvbWUsIHRoaXMgd2lsbCBnbyB0byB0aGUgcXVpcmsgbGlzdC4gKi8KIAkJcmV0dXJuIHNuZF91c2JfZXh0aWd5X2Jvb3RfcXVpcmsoZGV2LCBpbnRmKTsKIAotCS8qIFNCIEF1ZGlneSAyIE5YIG5lZWRzIGl0cyBvd24gYm9vdC11cCBtYWdpYywgdG9vICovCi0JaWYgKGlkID09IFVTQl9JRCgweDA0MWUsIDB4MzAyMCkpCisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDMwMjApOgorCQkvKiBTQiBBdWRpZ3kgMiBOWCBuZWVkcyBpdHMgb3duIGJvb3QtdXAgbWFnaWMsIHRvbyAqLwogCQlyZXR1cm4gc25kX3VzYl9hdWRpZ3kybnhfYm9vdF9xdWlyayhkZXYpOwogCi0JLyogQy1NZWRpYSBDTTEwNiAvIFR1cnRsZSBCZWFjaCBBdWRpbyBBZHZhbnRhZ2UgUm9hZGllICovCi0JaWYgKGlkID09IFVTQl9JRCgweDEwZjUsIDB4MDIwMCkpCisJY2FzZSBVU0JfSUQoMHgxMGY1LCAweDAyMDApOgorCQkvKiBDLU1lZGlhIENNMTA2IC8gVHVydGxlIEJlYWNoIEF1ZGlvIEFkdmFudGFnZSBSb2FkaWUgKi8KIAkJcmV0dXJuIHNuZF91c2JfY20xMDZfYm9vdF9xdWlyayhkZXYpOwogCi0JLyogQy1NZWRpYSBDTTYyMDYgLyBDTTEwNi1MaWtlIFNvdW5kIERldmljZSAqLwotCWlmIChpZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAxMDIpKQorCWNhc2UgVVNCX0lEKDB4MGQ4YywgMHgwMTAyKToKKwkJLyogQy1NZWRpYSBDTTYyMDYgLyBDTTEwNi1MaWtlIFNvdW5kIERldmljZSAqLwogCQlyZXR1cm4gc25kX3VzYl9jbTYyMDZfYm9vdF9xdWlyayhkZXYpOwogCi0JLyogQWNjZXNzIE11c2ljIFZpcnVzVEkgRGVza3RvcCAqLwotCWlmIChpZCA9PSBVU0JfSUQoMHgxMzNlLCAweDA4MTUpKQorCWNhc2UgVVNCX0lEKDB4MTMzZSwgMHgwODE1KToKKwkJLyogQWNjZXNzIE11c2ljIFZpcnVzVEkgRGVza3RvcCAqLwogCQlyZXR1cm4gc25kX3VzYl9hY2Nlc3NtdXNpY19ib290X3F1aXJrKGRldik7CiAKKwljYXNlIFVTQl9JRCgweDE3Y2MsIDB4MTAxMCk6IC8qIFRyYWt0b3IgQXVkaW8gNiAqLworCWNhc2UgVVNCX0lEKDB4MTdjYywgMHgxMDIwKTogLyogVHJha3RvciBBdWRpbyAxMCAqLworCQlyZXR1cm4gc25kX3VzYl9uYXRpdmVpbnN0cnVtZW50c19ib290X3F1aXJrKGRldik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKaW5kZXggNmU2NmZmZi4uMzJmMmE5NyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTM0LDEwICszNCwxNCBAQAogCWludCBpbmRleDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcG1faW50ZjsKIAl1MzIgdXNiX2lkOwotCWludCBzaHV0ZG93bjsKIAlzdHJ1Y3QgbXV0ZXggc2h1dGRvd25fbXV0ZXg7CisJdW5zaWduZWQgaW50IHNodXRkb3duOjE7CisJdW5zaWduZWQgaW50IHByb2Jpbmc6MTsKKwl1bnNpZ25lZCBpbnQgYXV0b3N1c3BlbmRlZDoxOwkKIAl1bnNpZ25lZCBpbnQgdHhmcl9xdWlyazoxOyAvKiBTdWJmcmFtZSBib3VuZGFyaWVzIG9uIHRyYW5zZmVycyAqLworCQogCWludCBudW1faW50ZXJmYWNlczsKIAlpbnQgbnVtX3N1c3BlbmRlZF9pbnRmOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1ldmxpc3QudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtZXZsaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2FkYTllCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtZXZsaXN0LnR4dApAQCAtMCwwICsxLDI2IEBACitwZXJmLWV2bGlzdCgxKQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1ldmxpc3QgLSBMaXN0IHRoZSBldmVudCBuYW1lcyBpbiBhIHBlcmYuZGF0YSBmaWxlCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgZXZsaXN0IDxvcHRpb25zPicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgZGlzcGxheXMgdGhlIG5hbWVzIG9mIGV2ZW50cyBzYW1wbGVkIGluIGEgcGVyZi5kYXRhIGZpbGUuCisKK09QVElPTlMKKy0tLS0tLS0KKy1pOjoKKy0taW5wdXQ9OjoKKyAgICAgICAgSW5wdXQgZmlsZSBuYW1lLiAoZGVmYXVsdDogcGVyZi5kYXRhKQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLWxpc3RbMV0sCitsaW5rcGVyZjpwZXJmLXJlcG9ydFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC50eHQKaW5kZXggMjlhZDk0Mi4uNjZmMDQwYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQudHh0CkBAIC0xMTIsNiArMTEyLDI4IEBACiAtLWRlYnVnLW1vZGU6OgogICAgICAgICBEbyB2YXJpb3VzIGNoZWNrcyBsaWtlIHNhbXBsZXMgb3JkZXJpbmcgYW5kIGxvc3QgZXZlbnRzLgogCistZjo6CistLWZpZWxkcworICAgICAgICBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZHMgdG8gcHJpbnQuIE9wdGlvbnMgYXJlOgorICAgICAgICBjb21tLCB0aWQsIHBpZCwgdGltZSwgY3B1LCBldmVudCwgdHJhY2UsIHN5bS4gRmllbGQKKyAgICAgICAgbGlzdCBtdXN0IGJlIHByZXBlbmRlZCB3aXRoIHRoZSB0eXBlLCB0cmFjZSwgc3cgb3IgaHcsCisgICAgICAgIHRvIGluZGljYXRlIHRvIHdoaWNoIGV2ZW50IHR5cGUgdGhlIGZpZWxkIGxpc3QgYXBwbGllcy4KKyAgICAgICAgZS5nLiwgLWYgc3c6Y29tbSx0aWQsdGltZSxzeW0gIGFuZCAtZiB0cmFjZTp0aW1lLGNwdSx0cmFjZQorCistazo6CistLXZtbGludXg9PGZpbGU+OjoKKyAgICAgICAgdm1saW51eCBwYXRobmFtZQorCistLWthbGxzeW1zPTxmaWxlPjo6CisgICAgICAgIGthbGxzeW1zIHBhdGhuYW1lCisKKy0tc3ltZnM9PGRpcmVjdG9yeT46OgorICAgICAgICBMb29rIGZvciBmaWxlcyB3aXRoIHN5bWJvbHMgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuCisKKy1HOjoKKy0taGlkZS1jYWxsLWdyYXBoOjoKKyAgICAgICAgV2hlbiBwcmludGluZyBzeW1ib2xzIGRvIG5vdCBkaXNwbGF5IGNhbGwgY2hhaW4uCisKIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0sIGxpbmtwZXJmOnBlcmYtc2NyaXB0LXBlcmxbMV0sCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCA5Yjg0MjE4Li4xNThjMzBlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTMzOCw2ICszMzgsNyBAQAogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL21lbS1tZW1jcHkubwogCiBCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYnVpbHRpbi1kaWZmLm8KK0JVSUxUSU5fT0JKUyArPSAkKE9VVFBVVClidWlsdGluLWV2bGlzdC5vCiBCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYnVpbHRpbi1oZWxwLm8KIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVClidWlsdGluLXNjaGVkLm8KIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVClidWlsdGluLWJ1aWxkaWQtbGlzdC5vCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZXZsaXN0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tZXZsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1ZTllMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1ldmxpc3QuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogQnVpbHRpbiBldmxpc3QgY29tbWFuZDogU2hvdyB0aGUgbGlzdCBvZiBldmVudCBzZWxlY3RvcnMgcHJlc2VudAorICogaW4gYSBwZXJmLmRhdGEgZmlsZS4KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvZXZsaXN0LmgiCisjaW5jbHVkZSAidXRpbC9ldnNlbC5oIgorI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CisKK3N0YXRpYyBpbnQgX19jbWRfZXZsaXN0KHZvaWQpCit7CisJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbjsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOworCisJc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwLCBmYWxzZSwgTlVMTCk7CisJaWYgKHNlc3Npb24gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnNlc3Npb24tPmV2bGlzdC0+ZW50cmllcywgbm9kZSkKKwkJcHJpbnRmKCIlc1xuIiwgZXZlbnRfbmFtZShwb3MpKTsKKworCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGV2bGlzdF91c2FnZVtdID0geworCSJwZXJmIGV2bGlzdCBbPG9wdGlvbnM+XSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAorCQkgICAgImlucHV0IGZpbGUgbmFtZSIpLAorCU9QVF9FTkQoKQorfTsKKworaW50IGNtZF9ldmxpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQoreworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGV2bGlzdF91c2FnZSwgMCk7CisJaWYgKGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhldmxpc3RfdXNhZ2UsIG9wdGlvbnMpOworCisJcmV0dXJuIF9fY21kX2V2bGlzdCgpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKaW5kZXggMmU5M2Y5OS4uN2EyYTc5ZDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYwpAQCAtMjAyLDkgKzIwMiwyMCBAQAogU0lOR0xFX0tFWShucl9hY3F1aXJlZCkKIFNJTkdMRV9LRVkobnJfY29udGVuZGVkKQogU0lOR0xFX0tFWSh3YWl0X3RpbWVfdG90YWwpCi1TSU5HTEVfS0VZKHdhaXRfdGltZV9taW4pCiBTSU5HTEVfS0VZKHdhaXRfdGltZV9tYXgpCiAKK3N0YXRpYyBpbnQgbG9ja19zdGF0X2tleV93YWl0X3RpbWVfbWluKHN0cnVjdCBsb2NrX3N0YXQgKm9uZSwKKwkJCQkJc3RydWN0IGxvY2tfc3RhdCAqdHdvKQoreworCXU2NCBzMSA9IG9uZS0+d2FpdF90aW1lX21pbjsKKwl1NjQgczIgPSB0d28tPndhaXRfdGltZV9taW47CisJaWYgKHMxID09IFVMTE9OR19NQVgpCisJCXMxID0gMDsKKwlpZiAoczIgPT0gVUxMT05HX01BWCkKKwkJczIgPSAwOworCXJldHVybiBzMSA+IHMyOworfQorCiBzdHJ1Y3QgbG9ja19rZXkgewogCS8qCiAJICogbmFtZTogdGhlIHZhbHVlIGZvciBzcGVjaWZ5IGJ5IHVzZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYwppbmRleCA1ZjQwZGY2Li45ZjVmYzU0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCkBAIC0xMiw2ICsxMiw4IEBACiAjaW5jbHVkZSAidXRpbC90cmFjZS1ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvZXZsaXN0LmgiCisjaW5jbHVkZSAidXRpbC9ldnNlbC5oIgogCiBzdGF0aWMgY2hhciBjb25zdAkJKnNjcmlwdF9uYW1lOwogc3RhdGljIGNoYXIgY29uc3QJCSpnZW5lcmF0ZV9zY3JpcHRfbGFuZzsKQEAgLTE5LDYgKzIxLDE4MyBAQAogc3RhdGljIHU2NAkJCWxhc3RfdGltZXN0YW1wOwogc3RhdGljIHU2NAkJCW5yX3Vub3JkZXJlZDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgb3B0aW9uCXJlY29yZF9vcHRpb25zW107CitzdGF0aWMgYm9vbAkJCW5vX2NhbGxjaGFpbjsKKworZW51bSBwZXJmX291dHB1dF9maWVsZCB7CisJUEVSRl9PVVRQVVRfQ09NTSAgICAgICAgICAgID0gMVUgPDwgMCwKKwlQRVJGX09VVFBVVF9USUQgICAgICAgICAgICAgPSAxVSA8PCAxLAorCVBFUkZfT1VUUFVUX1BJRCAgICAgICAgICAgICA9IDFVIDw8IDIsCisJUEVSRl9PVVRQVVRfVElNRSAgICAgICAgICAgID0gMVUgPDwgMywKKwlQRVJGX09VVFBVVF9DUFUgICAgICAgICAgICAgPSAxVSA8PCA0LAorCVBFUkZfT1VUUFVUX0VWTkFNRSAgICAgICAgICA9IDFVIDw8IDUsCisJUEVSRl9PVVRQVVRfVFJBQ0UgICAgICAgICAgID0gMVUgPDwgNiwKKwlQRVJGX09VVFBVVF9TWU0gICAgICAgICAgICAgPSAxVSA8PCA3LAorfTsKKworc3RydWN0IG91dHB1dF9vcHRpb24geworCWNvbnN0IGNoYXIgKnN0cjsKKwllbnVtIHBlcmZfb3V0cHV0X2ZpZWxkIGZpZWxkOworfSBhbGxfb3V0cHV0X29wdGlvbnNbXSA9IHsKKwl7LnN0ciA9ICJjb21tIiwgIC5maWVsZCA9IFBFUkZfT1VUUFVUX0NPTU19LAorCXsuc3RyID0gInRpZCIsICAgLmZpZWxkID0gUEVSRl9PVVRQVVRfVElEfSwKKwl7LnN0ciA9ICJwaWQiLCAgIC5maWVsZCA9IFBFUkZfT1VUUFVUX1BJRH0sCisJey5zdHIgPSAidGltZSIsICAuZmllbGQgPSBQRVJGX09VVFBVVF9USU1FfSwKKwl7LnN0ciA9ICJjcHUiLCAgIC5maWVsZCA9IFBFUkZfT1VUUFVUX0NQVX0sCisJey5zdHIgPSAiZXZlbnQiLCAuZmllbGQgPSBQRVJGX09VVFBVVF9FVk5BTUV9LAorCXsuc3RyID0gInRyYWNlIiwgLmZpZWxkID0gUEVSRl9PVVRQVVRfVFJBQ0V9LAorCXsuc3RyID0gInN5bSIsICAgLmZpZWxkID0gUEVSRl9PVVRQVVRfU1lNfSwKK307CisKKy8qIGRlZmF1bHQgc2V0IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IGZvcm1hdCAqLworc3RhdGljIHU2NCBvdXRwdXRfZmllbGRzW1BFUkZfVFlQRV9NQVhdID0geworCVtQRVJGX1RZUEVfSEFSRFdBUkVdID0gUEVSRl9PVVRQVVRfQ09NTSB8IFBFUkZfT1VUUFVUX1RJRCB8IFwKKwkJCSAgICAgICBQRVJGX09VVFBVVF9DUFUgfCBQRVJGX09VVFBVVF9USU1FIHwgXAorCQkJICAgICAgIFBFUkZfT1VUUFVUX0VWTkFNRSB8IFBFUkZfT1VUUFVUX1NZTSwKKworCVtQRVJGX1RZUEVfU09GVFdBUkVdID0gUEVSRl9PVVRQVVRfQ09NTSB8IFBFUkZfT1VUUFVUX1RJRCB8IFwKKwkJCSAgICAgICBQRVJGX09VVFBVVF9DUFUgfCBQRVJGX09VVFBVVF9USU1FIHwgXAorCQkJICAgICAgIFBFUkZfT1VUUFVUX0VWTkFNRSB8IFBFUkZfT1VUUFVUX1NZTSwKKworCVtQRVJGX1RZUEVfVFJBQ0VQT0lOVF0gPSBQRVJGX09VVFBVVF9DT01NIHwgUEVSRl9PVVRQVVRfVElEIHwgXAorCQkJCSBQRVJGX09VVFBVVF9DUFUgfCBQRVJGX09VVFBVVF9USU1FIHwgXAorCQkJCSBQRVJGX09VVFBVVF9FVk5BTUUgfCBQRVJGX09VVFBVVF9UUkFDRSwKK307CisKK3N0YXRpYyBib29sIG91dHB1dF9zZXRfYnlfdXNlcjsKKworI2RlZmluZSBQUklOVF9GSUVMRCh4KSAgKG91dHB1dF9maWVsZHNbYXR0ci0+dHlwZV0gJiBQRVJGX09VVFBVVF8jI3gpCisKK3N0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19jaGVja19hdHRyKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCit7CisJaWYgKFBSSU5UX0ZJRUxEKFRSQUNFKSAmJgorCQkhcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHNlc3Npb24sICJyZWNvcmQgLVIiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoUFJJTlRfRklFTEQoU1lNKSkgeworCQlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKSkgeworCQkJcHJfZXJyKCJTYW1wbGVzIGRvIG5vdCBjb250YWluIElQIGRhdGEuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICghbm9fY2FsbGNoYWluICYmCisJCSAgICAhKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSkKKwkJCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSBmYWxzZTsKKwl9CisKKwlpZiAoKFBSSU5UX0ZJRUxEKFBJRCkgfHwgUFJJTlRfRklFTEQoVElEKSkgJiYKKwkJIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJRCkpIHsKKwkJcHJfZXJyKCJTYW1wbGVzIGRvIG5vdCBjb250YWluIFRJRC9QSUQgZGF0YS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoUFJJTlRfRklFTEQoVElNRSkgJiYKKwkJIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpKSB7CisJCXByX2VycigiU2FtcGxlcyBkbyBub3QgY29udGFpbiB0aW1lc3RhbXBzLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChQUklOVF9GSUVMRChDUFUpICYmCisJCSEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DUFUpKSB7CisJCXByX2VycigiU2FtcGxlcyBkbyBub3QgY29udGFpbiBjcHUuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3NhbXBsZV9zdGFydChzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCSAgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKK3sKKwlpbnQgdHlwZTsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCWNvbnN0IGNoYXIgKmV2bmFtZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBzZWNzOworCXVuc2lnbmVkIGxvbmcgdXNlY3M7CisJdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzOworCisJaWYgKFBSSU5UX0ZJRUxEKENPTU0pKSB7CisJCWlmIChsYXRlbmN5X2Zvcm1hdCkKKwkJCXByaW50ZigiJTguOHMgIiwgdGhyZWFkLT5jb21tKTsKKwkJZWxzZSBpZiAoUFJJTlRfRklFTEQoU1lNKSAmJiBzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQorCQkJcHJpbnRmKCIlcyAiLCB0aHJlYWQtPmNvbW0pOworCQllbHNlCisJCQlwcmludGYoIiUxNnMgIiwgdGhyZWFkLT5jb21tKTsKKwl9CisKKwlpZiAoUFJJTlRfRklFTEQoUElEKSAmJiBQUklOVF9GSUVMRChUSUQpKQorCQlwcmludGYoIiU1ZC8lLTVkICIsIHNhbXBsZS0+cGlkLCBzYW1wbGUtPnRpZCk7CisJZWxzZSBpZiAoUFJJTlRfRklFTEQoUElEKSkKKwkJcHJpbnRmKCIlNWQgIiwgc2FtcGxlLT5waWQpOworCWVsc2UgaWYgKFBSSU5UX0ZJRUxEKFRJRCkpCisJCXByaW50ZigiJTVkICIsIHNhbXBsZS0+dGlkKTsKKworCWlmIChQUklOVF9GSUVMRChDUFUpKSB7CisJCWlmIChsYXRlbmN5X2Zvcm1hdCkKKwkJCXByaW50ZigiJTNkICIsIHNhbXBsZS0+Y3B1KTsKKwkJZWxzZQorCQkJcHJpbnRmKCJbJTAzZF0gIiwgc2FtcGxlLT5jcHUpOworCX0KKworCWlmIChQUklOVF9GSUVMRChUSU1FKSkgeworCQluc2VjcyA9IHNhbXBsZS0+dGltZTsKKwkJc2VjcyA9IG5zZWNzIC8gTlNFQ1NfUEVSX1NFQzsKKwkJbnNlY3MgLT0gc2VjcyAqIE5TRUNTX1BFUl9TRUM7CisJCXVzZWNzID0gbnNlY3MgLyBOU0VDU19QRVJfVVNFQzsKKwkJcHJpbnRmKCIlNWx1LiUwNmx1OiAiLCBzZWNzLCB1c2Vjcyk7CisJfQorCisJaWYgKFBSSU5UX0ZJRUxEKEVWTkFNRSkpIHsKKwkJaWYgKGF0dHItPnR5cGUgPT0gUEVSRl9UWVBFX1RSQUNFUE9JTlQpIHsKKwkJCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShzYW1wbGUtPnJhd19kYXRhKTsKKwkJCWV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKKwkJCWlmIChldmVudCkKKwkJCQlldm5hbWUgPSBldmVudC0+bmFtZTsKKwkJfSBlbHNlCisJCQlldm5hbWUgPSBfX2V2ZW50X25hbWUoYXR0ci0+dHlwZSwgYXR0ci0+Y29uZmlnKTsKKworCQlwcmludGYoIiVzOiAiLCBldm5hbWUgPyBldm5hbWUgOiAiKHVua25vd24pIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2V2ZW50KHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50IF9fdW51c2VkLAorCQkJICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCSAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCSAgc3RydWN0IHRocmVhZCAqdGhyZWFkKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7CisJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOworCisJZXZzZWwgPSBwZXJmX2V2bGlzdF9faWQyZXZzZWwoc2Vzc2lvbi0+ZXZsaXN0LCBzYW1wbGUtPmlkKTsKKwlpZiAoZXZzZWwgPT0gTlVMTCkgeworCQlwcl9lcnIoIkludmFsaWQgZGF0YS4gQ29udGFpbnMgc2FtcGxlcyB3aXRoIGlkIG5vdCBpbiAiCisJCSAgICAgICAiaXRzIGhlYWRlciFcbiIpOworCQlyZXR1cm47CisJfQorCWF0dHIgPSAmZXZzZWwtPmF0dHI7CisKKwlpZiAob3V0cHV0X2ZpZWxkc1thdHRyLT50eXBlXSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAocGVyZl9zZXNzaW9uX19jaGVja19hdHRyKHNlc3Npb24sIGF0dHIpIDwgMCkKKwkJcmV0dXJuOworCisJcHJpbnRfc2FtcGxlX3N0YXJ0KHNhbXBsZSwgdGhyZWFkLCBhdHRyKTsKKworCWlmIChQUklOVF9GSUVMRChUUkFDRSkpCisJCXByaW50X3RyYWNlX2V2ZW50KHNhbXBsZS0+Y3B1LCBzYW1wbGUtPnJhd19kYXRhLAorCQkJCSAgc2FtcGxlLT5yYXdfc2l6ZSk7CisKKwlpZiAoUFJJTlRfRklFTEQoU1lNKSkgeworCQlpZiAoIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCisJCQlwcmludGYoIiAiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJcbiIpOworCQlwZXJmX3Nlc3Npb25fX3ByaW50X3N5bWJvbHMoZXZlbnQsIHNhbXBsZSwgc2Vzc2lvbik7CisJfQorCisJcHJpbnRmKCJcbiIpOworfQogCiBzdGF0aWMgaW50IGRlZmF1bHRfc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKIAkJCQlpbnQgYXJnYyBfX3VudXNlZCwKQEAgLTQwLDcgKzIxOSw3IEBACiBzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19vcHMgZGVmYXVsdF9zY3JpcHRpbmdfb3BzID0gewogCS5zdGFydF9zY3JpcHQJCT0gZGVmYXVsdF9zdGFydF9zY3JpcHQsCiAJLnN0b3Bfc2NyaXB0CQk9IGRlZmF1bHRfc3RvcF9zY3JpcHQsCi0JLnByb2Nlc3NfZXZlbnQJCT0gcHJpbnRfZXZlbnQsCisJLnByb2Nlc3NfZXZlbnQJCT0gcHJvY2Vzc19ldmVudCwKIAkuZ2VuZXJhdGVfc2NyaXB0CT0gZGVmYXVsdF9nZW5lcmF0ZV9zY3JpcHQsCiB9OwogCkBAIC03NSwyNiArMjU0LDE3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKLQkJaWYgKGRlYnVnX21vZGUpIHsKLQkJCWlmIChzYW1wbGUtPnRpbWUgPCBsYXN0X3RpbWVzdGFtcCkgewotCQkJCXByX2VycigiU2FtcGxlcyBtaXNvcmRlcmVkLCBwcmV2aW91czogJSIgUFJJdTY0Ci0JCQkJCSIgdGhpczogJSIgUFJJdTY0ICJcbiIsIGxhc3RfdGltZXN0YW1wLAotCQkJCQlzYW1wbGUtPnRpbWUpOwotCQkJCW5yX3Vub3JkZXJlZCsrOwotCQkJfQotCQkJbGFzdF90aW1lc3RhbXAgPSBzYW1wbGUtPnRpbWU7Ci0JCQlyZXR1cm4gMDsKKwlpZiAoZGVidWdfbW9kZSkgeworCQlpZiAoc2FtcGxlLT50aW1lIDwgbGFzdF90aW1lc3RhbXApIHsKKwkJCXByX2VycigiU2FtcGxlcyBtaXNvcmRlcmVkLCBwcmV2aW91czogJSIgUFJJdTY0CisJCQkJIiB0aGlzOiAlIiBQUkl1NjQgIlxuIiwgbGFzdF90aW1lc3RhbXAsCisJCQkJc2FtcGxlLT50aW1lKTsKKwkJCW5yX3Vub3JkZXJlZCsrOwogCQl9Ci0JCS8qCi0JCSAqIEZJWE1FOiBiZXR0ZXIgcmVzb2x2ZSBmcm9tIHBpZCBmcm9tIHRoZSBzdHJ1Y3QgdHJhY2VfZW50cnkKLQkJICogZmllbGQsIGFsdGhvdWdoIGl0IHNob3VsZCBiZSB0aGUgc2FtZSB0aGFuIHRoaXMgcGVyZgotCQkgKiBldmVudCBwaWQKLQkJICovCi0JCXNjcmlwdGluZ19vcHMtPnByb2Nlc3NfZXZlbnQoc2FtcGxlLT5jcHUsIHNhbXBsZS0+cmF3X2RhdGEsCi0JCQkJCSAgICAgc2FtcGxlLT5yYXdfc2l6ZSwKLQkJCQkJICAgICBzYW1wbGUtPnRpbWUsIHRocmVhZC0+Y29tbSk7CisJCWxhc3RfdGltZXN0YW1wID0gc2FtcGxlLT50aW1lOworCQlyZXR1cm4gMDsKIAl9CisJc2NyaXB0aW5nX29wcy0+cHJvY2Vzc19ldmVudChldmVudCwgc2FtcGxlLCBzZXNzaW9uLCB0aHJlYWQpOwogCiAJc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kICs9IHNhbXBsZS0+cGVyaW9kOwogCXJldHVybiAwOwpAQCAtMTAyLDcgKzI3MiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKIAkuc2FtcGxlCQkgPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAkJID0gcGVyZl9ldmVudF9fcHJvY2Vzc19tbWFwLAogCS5jb21tCQkgPSBwZXJmX2V2ZW50X19wcm9jZXNzX2NvbW0sCisJLmV4aXQJCSA9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkuZm9yawkJID0gcGVyZl9ldmVudF9fcHJvY2Vzc190YXNrLAogCS5hdHRyCQkgPSBwZXJmX2V2ZW50X19wcm9jZXNzX2F0dHIsCiAJLmV2ZW50X3R5cGUJID0gcGVyZl9ldmVudF9fcHJvY2Vzc19ldmVudF90eXBlLAogCS50cmFjaW5nX2RhdGEJID0gcGVyZl9ldmVudF9fcHJvY2Vzc190cmFjaW5nX2RhdGEsCkBAIC0yODAsNiArNDUzLDY4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcGFyc2Vfb3V0cHV0X2ZpZWxkcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAorCQkJICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0IF9fdXNlZCkKK3sKKwljaGFyICp0b2s7CisJaW50IGksIGltYXggPSBzaXplb2YoYWxsX291dHB1dF9vcHRpb25zKSAvIHNpemVvZihzdHJ1Y3Qgb3V0cHV0X29wdGlvbik7CisJaW50IHJjID0gMDsKKwljaGFyICpzdHIgPSBzdHJkdXAoYXJnKTsKKwlpbnQgdHlwZSA9IC0xOworCisJaWYgKCFzdHIpCisJCXJldHVybiAtRU5PTUVNOworCisJdG9rID0gc3RydG9rKHN0ciwgIjoiKTsKKwlpZiAoIXRvaykgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJJbnZhbGlkIGZpZWxkIHN0cmluZyAtIG5vdCBwcmVwZW5kZWQgd2l0aCB0eXBlLiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBmaXJzdCB3b3JkIHNob3VsZCBzdGF0ZSB3aGljaCBldmVudCB0eXBlIHVzZXIKKwkgKiBpcyBzcGVjaWZ5aW5nIHRoZSBmaWVsZHMKKwkgKi8KKwlpZiAoIXN0cmNtcCh0b2ssICJodyIpKQorCQl0eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFOworCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAic3ciKSkKKwkJdHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRTsKKwllbHNlIGlmICghc3RyY21wKHRvaywgInRyYWNlIikpCisJCXR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKKwllbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGV2ZW50IHR5cGUgaW4gZmllbGQgc3RyaW5nLiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvdXRwdXRfZmllbGRzW3R5cGVdID0gMDsKKwl3aGlsZSAoMSkgeworCQl0b2sgPSBzdHJ0b2soTlVMTCwgIiwiKTsKKwkJaWYgKCF0b2spCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IGltYXg7ICsraSkgeworCQkJaWYgKHN0cmNtcCh0b2ssIGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5zdHIpID09IDApIHsKKwkJCQlvdXRwdXRfZmllbGRzW3R5cGVdIHw9IGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5maWVsZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBpbWF4KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZmllbGQgcmVxdWVzdGVkLiIpOworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAob3V0cHV0X2ZpZWxkc1t0eXBlXSA9PSAwKSB7CisJCXByX2RlYnVnKCJObyBmaWVsZHMgcmVxdWVzdGVkIGZvciAlcyB0eXBlLiAiCisJCQkgIkV2ZW50cyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWRcbiIsIGV2ZW50X3R5cGUodHlwZSkpOworCX0KKworCW91dHB1dF9zZXRfYnlfdXNlciA9IHRydWU7CisKKwlmcmVlKHN0cik7CisJcmV0dXJuIHJjOworfQorCiAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGZpbGVzeXN0ZW1zIHRoYXQgcmV0dXJuIGEgZGVudC0+ZF90eXBlIERUX1VOS05PV04gKi8KIHN0YXRpYyBpbnQgaXNfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmJhc2VfcGF0aCwgY29uc3Qgc3RydWN0IGRpcmVudCAqZGVudCkKIHsKQEAgLTU5Miw2ICs4MjcsMTcgQEAKIAkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKIAlPUFRfQk9PTEVBTignZCcsICJkZWJ1Zy1tb2RlIiwgJmRlYnVnX21vZGUsCiAJCSAgICJkbyB2YXJpb3VzIGNoZWNrcyBsaWtlIHNhbXBsZXMgb3JkZXJpbmcgYW5kIGxvc3QgZXZlbnRzIiksCisJT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnN5bWJvbF9jb25mLnZtbGludXhfbmFtZSwKKwkJICAgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAorCU9QVF9TVFJJTkcoMCwgImthbGxzeW1zIiwgJnN5bWJvbF9jb25mLmthbGxzeW1zX25hbWUsCisJCSAgICJmaWxlIiwgImthbGxzeW1zIHBhdGhuYW1lIiksCisJT1BUX0JPT0xFQU4oJ0cnLCAiaGlkZS1jYWxsLWdyYXBoIiwgJm5vX2NhbGxjaGFpbiwKKwkJICAgICJXaGVuIHByaW50aW5nIHN5bWJvbHMgZG8gbm90IGRpc3BsYXkgY2FsbCBjaGFpbiIpLAorCU9QVF9TVFJJTkcoMCwgInN5bWZzIiwgJnN5bWJvbF9jb25mLnN5bWZzLCAiZGlyZWN0b3J5IiwKKwkJICAgICJMb29rIGZvciBmaWxlcyB3aXRoIHN5bWJvbHMgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkiKSwKKwlPUFRfQ0FMTEJBQ0soJ2YnLCAiZmllbGRzIiwgTlVMTCwgInN0ciIsCisJCSAgICAgImNvbW1hIHNlcGFyYXRlZCBvdXRwdXQgZmllbGRzIHByZXBlbmQgd2l0aCAndHlwZTonLiBWYWxpZCB0eXBlczogaHcsc3csdHJhY2UuIEZpZWxkczogY29tbSx0aWQscGlkLHRpbWUsY3B1LGV2ZW50LHRyYWNlLHN5bSIsCisJCSAgICAgcGFyc2Vfb3V0cHV0X2ZpZWxkcyksCiAKIAlPUFRfRU5EKCkKIH07CkBAIC03NzIsMTQgKzEwMTgsMjIgQEAKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChzdHJjbXAoaW5wdXRfbmFtZSwgIi0iKSAmJgotCSAgICAhcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHNlc3Npb24sICJyZWNvcmQgLVIiKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFub19jYWxsY2hhaW4pCisJCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOworCWVsc2UKKwkJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IGZhbHNlOwogCiAJaWYgKGdlbmVyYXRlX3NjcmlwdF9sYW5nKSB7CiAJCXN0cnVjdCBzdGF0IHBlcmZfc3RhdDsKKwkJaW50IGlucHV0OwogCi0JCWludCBpbnB1dCA9IG9wZW4oaW5wdXRfbmFtZSwgT19SRE9OTFkpOworCQlpZiAob3V0cHV0X3NldF9ieV91c2VyKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiY3VzdG9tIGZpZWxkcyBub3Qgc3VwcG9ydGVkIGZvciBnZW5lcmF0ZWQgc2NyaXB0cyIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaW5wdXQgPSBvcGVuKGlucHV0X25hbWUsIE9fUkRPTkxZKTsKIAkJaWYgKGlucHV0IDwgMCkgewogCQkJcGVycm9yKCJmYWlsZWQgdG8gb3BlbiBmaWxlIik7CiAJCQlleGl0KC0xKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IDIxYzAyNTIuLmUyMTA5ZjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtMzMzLDYgKzMzMywxMiBAQAogCQl9CiAJfQogCisJaWYgKHBlcmZfZXZsaXN0X19zZXRfZmlsdGVycyhldnNlbF9saXN0KSkgeworCQllcnJvcigiZmFpbGVkIHRvIHNldCBmaWx0ZXIgd2l0aCAlZCAoJXMpXG4iLCBlcnJubywKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CisKIAkvKgogCSAqIEVuYWJsZSBjb3VudGVycyBhbmQgZXhlYyB0aGUgY29tbWFuZDoKIAkgKi8KQEAgLTYzNCw2ICs2NDAsOCBAQAogCU9QVF9DQUxMQkFDSygnZScsICJldmVudCIsICZldnNlbF9saXN0LCAiZXZlbnQiLAogCQkgICAgICJldmVudCBzZWxlY3Rvci4gdXNlICdwZXJmIGxpc3QnIHRvIGxpc3QgYXZhaWxhYmxlIGV2ZW50cyIsCiAJCSAgICAgcGFyc2VfZXZlbnRzKSwKKwlPUFRfQ0FMTEJBQ0soMCwgImZpbHRlciIsICZldnNlbF9saXN0LCAiZmlsdGVyIiwKKwkJICAgICAiZXZlbnQgZmlsdGVyIiwgcGFyc2VfZmlsdGVyKSwKIAlPUFRfQk9PTEVBTignaScsICJuby1pbmhlcml0IiwgJm5vX2luaGVyaXQsCiAJCSAgICAiY2hpbGQgdGFza3MgZG8gbm90IGluaGVyaXQgY291bnRlcnMiKSwKIAlPUFRfSU5URUdFUigncCcsICJwaWQiLCAmdGFyZ2V0X3BpZCwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCA4MGM5ZTA2Li43MGYxMDc1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAkvKgogCSAqIFdlIGNhbid0IGFubm90YXRlIHdpdGgganVzdCAvcHJvYy9rYWxsc3ltcwogCSAqLwotCWlmIChtYXAtPmRzby0+b3JpZ2luID09IERTT19fT1JJR19LRVJORUwpIHsKKwlpZiAobWFwLT5kc28tPnN5bXRhYl90eXBlID09IFNZTVRBQl9fS0FMTFNZTVMpIHsKIAkJcHJfZXJyKCJDYW4ndCBhbm5vdGF0ZSAlczogTm8gdm1saW51eCBmaWxlIHdhcyBmb3VuZCBpbiB0aGUgIgogCQkgICAgICAgInBhdGhcbiIsIHN5bS0+bmFtZSk7CiAJCXNsZWVwKDEpOwpAQCAtNTE1LDI0ICs1MTUsMjUgQEAKIAkJCWJyZWFrOwogCQljYXNlICdFJzoKIAkJCWlmICh0b3AuZXZsaXN0LT5ucl9lbnRyaWVzID4gMSkgeworCQkJCWludCBjb3VudGVyOwogCQkJCWZwcmludGYoc3RkZXJyLCAiXG5BdmFpbGFibGUgZXZlbnRzOiIpOwogCiAJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0b3Auc3ltX2V2c2VsLCAmdG9wLmV2bGlzdC0+ZW50cmllcywgbm9kZSkKIAkJCQkJZnByaW50ZihzdGRlcnIsICJcblx0JWQgJXMiLCB0b3Auc3ltX2V2c2VsLT5pZHgsIGV2ZW50X25hbWUodG9wLnN5bV9ldnNlbCkpOwogCi0JCQkJcHJvbXB0X2ludGVnZXIoJnRvcC5zeW1fY291bnRlciwgIkVudGVyIGRldGFpbHMgZXZlbnQgY291bnRlciIpOworCQkJCXByb21wdF9pbnRlZ2VyKCZjb3VudGVyLCAiRW50ZXIgZGV0YWlscyBldmVudCBjb3VudGVyIik7CiAKLQkJCQlpZiAodG9wLnN5bV9jb3VudGVyID49IHRvcC5ldmxpc3QtPm5yX2VudHJpZXMpIHsKKwkJCQlpZiAoY291bnRlciA+PSB0b3AuZXZsaXN0LT5ucl9lbnRyaWVzKSB7CiAJCQkJCXRvcC5zeW1fZXZzZWwgPSBsaXN0X2VudHJ5KHRvcC5ldmxpc3QtPmVudHJpZXMubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOwotCQkJCQl0b3Auc3ltX2NvdW50ZXIgPSAwOwogCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlNvcnJ5LCBubyBzdWNoIGV2ZW50LCB1c2luZyAlcy5cbiIsIGV2ZW50X25hbWUodG9wLnN5bV9ldnNlbCkpOwogCQkJCQlzbGVlcCgxKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkodG9wLnN5bV9ldnNlbCwgJnRvcC5ldmxpc3QtPmVudHJpZXMsIG5vZGUpCi0JCQkJCWlmICh0b3Auc3ltX2V2c2VsLT5pZHggPT0gdG9wLnN5bV9jb3VudGVyKQorCQkJCQlpZiAodG9wLnN5bV9ldnNlbC0+aWR4ID09IGNvdW50ZXIpCiAJCQkJCQlicmVhazsKLQkJCX0gZWxzZSB0b3Auc3ltX2NvdW50ZXIgPSAwOworCQkJfSBlbHNlCisJCQkJdG9wLnN5bV9ldnNlbCA9IGxpc3RfZW50cnkodG9wLmV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CiAJCQlicmVhazsKIAkJY2FzZSAnZic6CiAJCQlwcm9tcHRfaW50ZWdlcigmdG9wLmNvdW50X2ZpbHRlciwgIkVudGVyIGRpc3BsYXkgZXZlbnQgY291bnQgZmlsdGVyIik7CkBAIC02NzUsNyArNjc2LDcgQEAKIAogCWZvciAoaSA9IDA7IHNraXBfc3ltYm9sc1tpXTsgaSsrKSB7CiAJCWlmICghc3RyY21wKHNraXBfc3ltYm9sc1tpXSwgbmFtZSkpIHsKLQkJCXN5bWUtPnNraXAgPSAxOworCQkJc3ltLT5pZ25vcmUgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC03NjgsNyArNzY5LDcgQEAKIAkJCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9lbnRyeV9fc3ltYm9sKHRvcC5zeW1fZmlsdGVyX2VudHJ5KTsKIAogCQkJcHJfZXJyKCJDYW4ndCBhbm5vdGF0ZSAlcyIsIHN5bS0+bmFtZSk7Ci0JCQlpZiAodG9wLnN5bV9maWx0ZXJfZW50cnktPm1hcC0+ZHNvLT5vcmlnaW4gPT0gRFNPX19PUklHX0tFUk5FTCkgeworCQkJaWYgKHRvcC5zeW1fZmlsdGVyX2VudHJ5LT5tYXAtPmRzby0+c3ltdGFiX3R5cGUgPT0gU1lNVEFCX19LQUxMU1lNUykgewogCQkJCXByX2VycigiOiBObyB2bWxpbnV4IGZpbGUgd2FzIGZvdW5kIGluIHRoZSBwYXRoOlxuIik7CiAJCQkJbWFjaGluZV9fZnByaW50Zl92bWxpbnV4X3BhdGgobWFjaGluZSwgc3RkZXJyKTsKIAkJCX0gZWxzZQpAQCAtNzc4LDEwICs3NzksOSBAQAogCX0KIAogCXN5bWUgPSBzeW1ib2xfX3ByaXYoYWwuc3ltKTsKLQlpZiAoIXN5bWUtPnNraXApIHsKKwlpZiAoIWFsLnN5bS0+aWdub3JlKSB7CiAJCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKIAotCQlzeW1lLT5vcmlnaW4gPSBvcmlnaW47CiAJCWV2c2VsID0gcGVyZl9ldmxpc3RfX2lkMmV2c2VsKHRvcC5ldmxpc3QsIHNhbXBsZS0+aWQpOwogCQlhc3NlcnQoZXZzZWwgIT0gTlVMTCk7CiAJCXN5bWUtPmNvdW50W2V2c2VsLT5pZHhdKys7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4uaCBiL3Rvb2xzL3BlcmYvYnVpbHRpbi5oCmluZGV4IGM3Nzk4YzcuLjQ3MDJlMjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi5oCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi5oCkBAIC0xOSw2ICsxOSw3IEBACiBleHRlcm4gaW50IGNtZF9idWlsZGlkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2J1aWxkaWRfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2V2bGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3NjaGVkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0IGIvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CmluZGV4IDE2YjUwODguLmQ2OTVmZTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dAorKysgYi90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKQEAgLTgsNiArOCw3IEBACiBwZXJmLWJ1aWxkaWQtY2FjaGUJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWJ1aWxkaWQtbGlzdAkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtZGlmZgkJCW1haW5wb3JjZWxhaW4gY29tbW9uCitwZXJmLWV2bGlzdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWluamVjdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWxpc3QJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1zY2hlZAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYuYyBiL3Rvb2xzL3BlcmYvcGVyZi5jCmluZGV4IDU5NWQwZjQuLmVjNjM1YjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi5jCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi5jCkBAIC0zMTMsNiArMzEzLDcgQEAKIAkJeyAiYnVpbGRpZC1jYWNoZSIsIGNtZF9idWlsZGlkX2NhY2hlLCAwIH0sCiAJCXsgImJ1aWxkaWQtbGlzdCIsIGNtZF9idWlsZGlkX2xpc3QsIDAgfSwKIAkJeyAiZGlmZiIsCWNtZF9kaWZmLAkwIH0sCisJCXsgImV2bGlzdCIsCWNtZF9ldmxpc3QsCTAgfSwKIAkJeyAiaGVscCIsCWNtZF9oZWxwLAkwIH0sCiAJCXsgImxpc3QiLAljbWRfbGlzdCwJMCB9LAogCQl7ICJyZWNvcmQiLAljbWRfcmVjb3JkLAkwIH0sCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvUEVSRi1WRVJTSU9OLUdFTiBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCmluZGV4IDk3ZDc2NTYuLjI2ZDRkM2YgMTAwNzU1Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCkBAIC0yMywxMCArMjMsMTAgQEAKIHRoZW4KIAlWTj0kKGVjaG8gIiRWTiIgfCBzZWQgLWUgJ3MvLS8uL2cnKTsKIGVsc2UKLQlldmFsIGBncmVwICdeVkVSU0lPTlxzKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJ2AKLQlldmFsIGBncmVwICdeUEFUQ0hMRVZFTFxzKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJ2AKLQlldmFsIGBncmVwICdeU1VCTEVWRUxccyo9JyAuLi8uLi9NYWtlZmlsZXx0ciAtZCAnICdgCi0JZXZhbCBgZ3JlcCAnXkVYVFJBVkVSU0lPTlxzKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJ2AKKwlldmFsICQoZ3JlcCAnXlZFUlNJT05bWzpzcGFjZTpdXSo9JyAuLi8uLi9NYWtlZmlsZXx0ciAtZCAnICcpCisJZXZhbCAkKGdyZXAgJ15QQVRDSExFVkVMW1s6c3BhY2U6XV0qPScgLi4vLi4vTWFrZWZpbGV8dHIgLWQgJyAnKQorCWV2YWwgJChncmVwICdeU1VCTEVWRUxbWzpzcGFjZTpdXSo9JyAuLi8uLi9NYWtlZmlsZXx0ciAtZCAnICcpCisJZXZhbCAkKGdyZXAgJ15FWFRSQVZFUlNJT05bWzpzcGFjZTpdXSo9JyAuLi8uLi9NYWtlZmlsZXx0ciAtZCAnICcpCiAKIAlWTj0iJHtWRVJTSU9OfS4ke1BBVENITEVWRUx9LiR7U1VCTEVWRUx9JHtFWFRSQVZFUlNJT059IgogZmkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKaW5kZXggMGQwODMwYy4uZTAxYWYyYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCQlmcmVlX2ZpbGVuYW1lID0gZmFsc2U7CiAJfQogCi0JaWYgKGRzby0+b3JpZ2luID09IERTT19fT1JJR19LRVJORUwpIHsKKwlpZiAoZHNvLT5zeW10YWJfdHlwZSA9PSBTWU1UQUJfX0tBTExTWU1TKSB7CiAJCWNoYXIgYmZbQlVJTERfSURfU0laRSAqIDIgKyAxNl0gPSAiIHdpdGggYnVpbGQgaWQgIjsKIAkJY2hhciAqYnVpbGRfaWRfbXNnID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IDU0YTdlMjYuLjk1MmI0YWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTI2Myw2ICsyNjMsMjggQEAKIAlyZXR1cm4gbmFtZTsKIH0KIAorY29uc3QgY2hhciAqZXZlbnRfdHlwZShpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBFUkZfVFlQRV9IQVJEV0FSRToKKwkJcmV0dXJuICJoYXJkd2FyZSI7CisKKwljYXNlIFBFUkZfVFlQRV9TT0ZUV0FSRToKKwkJcmV0dXJuICJzb2Z0d2FyZSI7CisKKwljYXNlIFBFUkZfVFlQRV9UUkFDRVBPSU5UOgorCQlyZXR1cm4gInRyYWNlcG9pbnQiOworCisJY2FzZSBQRVJGX1RZUEVfSFdfQ0FDSEU6CisJCXJldHVybiAiaGFyZHdhcmUtY2FjaGUiOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuICJ1bmtub3duIjsKK30KKwogY29uc3QgY2hhciAqZXZlbnRfbmFtZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCiB7CiAJdTY0IGNvbmZpZyA9IGV2c2VsLT5hdHRyLmNvbmZpZzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAppbmRleCAyMTJmODhlLi43NDZkM2ZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCkBAIC0yMCw2ICsyMCw3IEBACiBleHRlcm4gc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHJhY2Vwb2ludF9pZF90b19wYXRoKHU2NCBjb25maWcpOwogZXh0ZXJuIGJvb2wgaGF2ZV90cmFjZXBvaW50cyhzdHJ1Y3QgbGlzdF9oZWFkICpldmxpc3QpOwogCitjb25zdCBjaGFyICpldmVudF90eXBlKGludCB0eXBlKTsKIGNvbnN0IGNoYXIgKmV2ZW50X25hbWUoc3RydWN0IHBlcmZfZXZzZWwgKmV2ZW50KTsKIGV4dGVybiBjb25zdCBjaGFyICpfX2V2ZW50X25hbWUoaW50IHR5cGUsIHU2NCBjb25maWcpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwppbmRleCA5MzY4MDgxLi42MjE0MjcyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKQEAgLTI0NSw5ICsyNDUsMTAgQEAKIAlyZXR1cm4gZXZlbnQ7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc19ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLAotCQkJICAgICAgIGludCBzaXplIF9fdW51c2VkLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgY2hhciAqY29tbSkKK3N0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc19ldmVudCh1bmlvbiBwZXJmX2V2ZW50ICpwZXZlbnQgX191bnVzZWQsCisJCQkgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VudXNlZCwKKwkJCSAgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7CiAJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CiAJc3RhdGljIGNoYXIgaGFuZGxlclsyNTZdOwpAQCAtMjU2LDYgKzI1NywxMCBAQAogCXN0cnVjdCBldmVudCAqZXZlbnQ7CiAJaW50IHR5cGU7CiAJaW50IHBpZDsKKwlpbnQgY3B1ID0gc2FtcGxlLT5jcHU7CisJdm9pZCAqZGF0YSA9IHNhbXBsZS0+cmF3X2RhdGE7CisJdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzID0gc2FtcGxlLT50aW1lOworCWNoYXIgKmNvbW0gPSB0aHJlYWQtPmNvbW07CiAKIAlkU1A7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwppbmRleCAyMDQwYjg1Li4xYjg1ZDYwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCkBAIC0yMDQsOSArMjA0LDEwIEBACiAJcmV0dXJuIGV2ZW50OwogfQogCi1zdGF0aWMgdm9pZCBweXRob25fcHJvY2Vzc19ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLAotCQkJCSBpbnQgc2l6ZSBfX3VudXNlZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzLCBjaGFyICpjb21tKQorc3RhdGljIHZvaWQgcHl0aG9uX3Byb2Nlc3NfZXZlbnQodW5pb24gcGVyZl9ldmVudCAqcGV2ZW50IF9fdW51c2VkLAorCQkJCSBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VudXNlZCwKKwkJCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkKQogewogCVB5T2JqZWN0ICpoYW5kbGVyLCAqcmV0dmFsLCAqY29udGV4dCwgKnQsICpvYmosICpkaWN0ID0gTlVMTDsKIAlzdGF0aWMgY2hhciBoYW5kbGVyX25hbWVbMjU2XTsKQEAgLTIxNyw2ICsyMTgsMTAgQEAKIAl1bnNpZ25lZCBuID0gMDsKIAlpbnQgdHlwZTsKIAlpbnQgcGlkOworCWludCBjcHUgPSBzYW1wbGUtPmNwdTsKKwl2b2lkICpkYXRhID0gc2FtcGxlLT5yYXdfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MgPSBzYW1wbGUtPnRpbWU7CisJY2hhciAqY29tbSA9IHRocmVhZC0+Y29tbTsKIAogCXQgPSBQeVR1cGxlX05ldyhNQVhfRklFTERTKTsKIAlpZiAoIXQpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwppbmRleCBmMjY2MzlmLi5jNjhjZjQwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKQEAgLTExMzQsMyArMTEzNCw2NCBAQAogCiAJcmV0dXJuIHJldDsKIH0KKwordm9pZCBwZXJmX3Nlc3Npb25fX3ByaW50X3N5bWJvbHModW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKKwljb25zdCBjaGFyICpzeW1uYW1lLCAqZHNvbmFtZTsKKwlzdHJ1Y3QgY2FsbGNoYWluX2N1cnNvciAqY3Vyc29yID0gJnNlc3Npb24tPmNhbGxjaGFpbl9jdXJzb3I7CisJc3RydWN0IGNhbGxjaGFpbl9jdXJzb3Jfbm9kZSAqbm9kZTsKKworCWlmIChwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCBzYW1wbGUsCisJCQkJCSAgTlVMTCkgPCAwKSB7CisJCWVycm9yKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiAmJiBzYW1wbGUtPmNhbGxjaGFpbikgeworCisJCWlmIChwZXJmX3Nlc3Npb25fX3Jlc29sdmVfY2FsbGNoYWluKHNlc3Npb24sIGFsLnRocmVhZCwKKwkJCQkJCXNhbXBsZS0+Y2FsbGNoYWluLCBOVUxMKSAhPSAwKSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQllcnJvcigiRmFpbGVkIHRvIHJlc29sdmUgY2FsbGNoYWluLiBTa2lwcGluZ1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJY2FsbGNoYWluX2N1cnNvcl9jb21taXQoY3Vyc29yKTsKKworCQl3aGlsZSAoMSkgeworCQkJbm9kZSA9IGNhbGxjaGFpbl9jdXJzb3JfY3VycmVudChjdXJzb3IpOworCQkJaWYgKCFub2RlKQorCQkJCWJyZWFrOworCisJCQlpZiAobm9kZS0+c3ltICYmIG5vZGUtPnN5bS0+bmFtZSkKKwkJCQlzeW1uYW1lID0gbm9kZS0+c3ltLT5uYW1lOworCQkJZWxzZQorCQkJCXN5bW5hbWUgPSAiIjsKKworCQkJaWYgKG5vZGUtPm1hcCAmJiBub2RlLT5tYXAtPmRzbyAmJiBub2RlLT5tYXAtPmRzby0+bmFtZSkKKwkJCQlkc29uYW1lID0gbm9kZS0+bWFwLT5kc28tPm5hbWU7CisJCQllbHNlCisJCQkJZHNvbmFtZSA9ICIiOworCisJCQlwcmludGYoIlx0JTE2IiBQUkl4NjQgIiAlcyAoJXMpXG4iLCBub2RlLT5pcCwgc3ltbmFtZSwgZHNvbmFtZSk7CisKKwkJCWNhbGxjaGFpbl9jdXJzb3JfYWR2YW5jZShjdXJzb3IpOworCQl9CisKKwl9IGVsc2UgeworCQlpZiAoYWwuc3ltICYmIGFsLnN5bS0+bmFtZSkKKwkJCXN5bW5hbWUgPSBhbC5zeW0tPm5hbWU7CisJCWVsc2UKKwkJCXN5bW5hbWUgPSAiIjsKKworCQlpZiAoYWwubWFwICYmIGFsLm1hcC0+ZHNvICYmIGFsLm1hcC0+ZHNvLT5uYW1lKQorCQkJZHNvbmFtZSA9IGFsLm1hcC0+ZHNvLT5uYW1lOworCQllbHNlCisJCQlkc29uYW1lID0gIiI7CisKKwkJcHJpbnRmKCIlMTYiIFBSSXg2NCAiICVzICglcykiLCBhbC5hZGRyLCBzeW1uYW1lLCBkc29uYW1lKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAppbmRleCBiNWIxNDhiLi4wYjNjOWFmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTE1OSw0ICsxNTksOCBAQAogCQkJCQlzZXNzaW9uLT5zYW1wbGVfaWRfYWxsLCBzYW1wbGUpOwogfQogCit2b2lkIHBlcmZfc2Vzc2lvbl9fcHJpbnRfc3ltYm9scyh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworCiAjZW5kaWYgLyogX19QRVJGX1NFU1NJT05fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IDAwMDE0ZTMuLjY1MWRiZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCQlkc29fX3NldF9zaG9ydF9uYW1lKHNlbGYsIHNlbGYtPm5hbWUpOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKQogCQkJc2VsZi0+c3ltYm9sc1tpXSA9IHNlbGYtPnN5bWJvbF9uYW1lc1tpXSA9IFJCX1JPT1Q7Ci0JCXNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19OT1RfRk9VTkQ7CisJCXNlbGYtPnN5bXRhYl90eXBlID0gU1lNVEFCX19OT1RfRk9VTkQ7CiAJCXNlbGYtPmxvYWRlZCA9IDA7CiAJCXNlbGYtPnNvcnRlZF9ieV9uYW1lID0gMDsKIAkJc2VsZi0+aGFzX2J1aWxkX2lkID0gMDsKQEAgLTY4MCw5ICs2ODAsOSBAQAogCQlyZXR1cm4gLTE7CiAKIAlpZiAoc2VsZi0+a2VybmVsID09IERTT19UWVBFX0dVRVNUX0tFUk5FTCkKLQkJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0dVRVNUX0tFUk5FTDsKKwkJc2VsZi0+c3ltdGFiX3R5cGUgPSBTWU1UQUJfX0dVRVNUX0tBTExTWU1TOwogCWVsc2UKLQkJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0tFUk5FTDsKKwkJc2VsZi0+c3ltdGFiX3R5cGUgPSBTWU1UQUJfX0tBTExTWU1TOwogCiAJcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoc2VsZiwgbWFwLCBmaWx0ZXIpOwogfQpAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAkJCQl9CiAJCQkJY3Vycl9tYXAtPm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CiAJCQkJY3Vycl9tYXAtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKLQkJCQljdXJyX2Rzby0+b3JpZ2luID0gc2VsZi0+b3JpZ2luOworCQkJCWN1cnJfZHNvLT5zeW10YWJfdHlwZSA9IHNlbGYtPnN5bXRhYl90eXBlOwogCQkJCW1hcF9ncm91cHNfX2luc2VydChrbWFwLT5rbWFwcywgY3Vycl9tYXApOwogCQkJCWRzb3NfX2FkZCgmc2VsZi0+bm9kZSwgY3Vycl9kc28pOwogCQkJCWRzb19fc2V0X2xvYWRlZChjdXJyX2RzbywgbWFwLT50eXBlKTsKQEAgLTE0MzAsMjEgKzE0MzAsMjEgQEAKIGNoYXIgZHNvX19zeW10YWJfb3JpZ2luKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgb3JpZ2luW10gPSB7Ci0JCVtEU09fX09SSUdfS0VSTkVMXSA9ICAgJ2snLAotCQlbRFNPX19PUklHX0pBVkFfSklUXSA9ICdqJywKLQkJW0RTT19fT1JJR19CVUlMRF9JRF9DQUNIRV0gPSAnQicsCi0JCVtEU09fX09SSUdfRkVET1JBXSA9ICAgJ2YnLAotCQlbRFNPX19PUklHX1VCVU5UVV0gPSAgICd1JywKLQkJW0RTT19fT1JJR19CVUlMRElEXSA9ICAnYicsCi0JCVtEU09fX09SSUdfRFNPXSA9ICAgICAgJ2QnLAotCQlbRFNPX19PUklHX0tNT0RVTEVdID0gICdLJywKLQkJW0RTT19fT1JJR19HVUVTVF9LRVJORUxdID0gICdnJywKLQkJW0RTT19fT1JJR19HVUVTVF9LTU9EVUxFXSA9ICAnRycsCisJCVtTWU1UQUJfX0tBTExTWU1TXQkgICAgICA9ICdrJywKKwkJW1NZTVRBQl9fSkFWQV9KSVRdCSAgICAgID0gJ2onLAorCQlbU1lNVEFCX19CVUlMRF9JRF9DQUNIRV0gICAgICA9ICdCJywKKwkJW1NZTVRBQl9fRkVET1JBX0RFQlVHSU5GT10gICAgPSAnZicsCisJCVtTWU1UQUJfX1VCVU5UVV9ERUJVR0lORk9dICAgID0gJ3UnLAorCQlbU1lNVEFCX19CVUlMRElEX0RFQlVHSU5GT10gICA9ICdiJywKKwkJW1NZTVRBQl9fU1lTVEVNX1BBVEhfRFNPXSAgICAgPSAnZCcsCisJCVtTWU1UQUJfX1NZU1RFTV9QQVRIX0tNT0RVTEVdID0gJ0snLAorCQlbU1lNVEFCX19HVUVTVF9LQUxMU1lNU10gICAgICA9ICAnZycsCisJCVtTWU1UQUJfX0dVRVNUX0tNT0RVTEVdCSAgICAgID0gICdHJywKIAl9OwogCi0JaWYgKHNlbGYgPT0gTlVMTCB8fCBzZWxmLT5vcmlnaW4gPT0gRFNPX19PUklHX05PVF9GT1VORCkKKwlpZiAoc2VsZiA9PSBOVUxMIHx8IHNlbGYtPnN5bXRhYl90eXBlID09IFNZTVRBQl9fTk9UX0ZPVU5EKQogCQlyZXR1cm4gJyEnOwotCXJldHVybiBvcmlnaW5bc2VsZi0+b3JpZ2luXTsKKwlyZXR1cm4gb3JpZ2luW3NlbGYtPnN5bXRhYl90eXBlXTsKIH0KIAogaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCkBAIC0xNDc3LDggKzE0NzcsOCBAQAogCiAJaWYgKHN0cm5jbXAoc2VsZi0+bmFtZSwgIi90bXAvcGVyZi0iLCAxMCkgPT0gMCkgewogCQlyZXQgPSBkc29fX2xvYWRfcGVyZl9tYXAoc2VsZiwgbWFwLCBmaWx0ZXIpOwotCQlzZWxmLT5vcmlnaW4gPSByZXQgPiAwID8gRFNPX19PUklHX0pBVkFfSklUIDoKLQkJCQkJIERTT19fT1JJR19OT1RfRk9VTkQ7CisJCXNlbGYtPnN5bXRhYl90eXBlID0gcmV0ID4gMCA/IFNZTVRBQl9fSkFWQV9KSVQgOgorCQkJCQkgICAgICBTWU1UQUJfX05PVF9GT1VORDsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTE0ODYsMjYgKzE0ODYsMjYgQEAKIAkgKiBPbiB0aGUgZmlyc3QgcGFzcywgb25seSBsb2FkIGltYWdlcyBpZiB0aGV5IGhhdmUgYSBmdWxsIHN5bXRhYi4KIAkgKiBGYWlsaW5nIHRoYXQsIGRvIGEgc2Vjb25kIHBhc3Mgd2hlcmUgd2UgYWNjZXB0IC5keW5zeW0gYWxzbwogCSAqLwotCWZvciAoc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFLCB3YW50X3N5bXRhYiA9IDE7Ci0JICAgICBzZWxmLT5vcmlnaW4gIT0gRFNPX19PUklHX05PVF9GT1VORDsKLQkgICAgIHNlbGYtPm9yaWdpbisrKSB7Ci0JCXN3aXRjaCAoc2VsZi0+b3JpZ2luKSB7Ci0JCWNhc2UgRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFOgorCWZvciAoc2VsZi0+c3ltdGFiX3R5cGUgPSBTWU1UQUJfX0JVSUxEX0lEX0NBQ0hFLCB3YW50X3N5bXRhYiA9IDE7CisJICAgICBzZWxmLT5zeW10YWJfdHlwZSAhPSBTWU1UQUJfX05PVF9GT1VORDsKKwkgICAgIHNlbGYtPnN5bXRhYl90eXBlKyspIHsKKwkJc3dpdGNoIChzZWxmLT5zeW10YWJfdHlwZSkgeworCQljYXNlIFNZTVRBQl9fQlVJTERfSURfQ0FDSEU6CiAJCQkvKiBza2lwIHRoZSBsb2NhbGx5IGNvbmZpZ3VyZWQgY2FjaGUgaWYgYSBzeW1mcyBpcyBnaXZlbiAqLwogCQkJaWYgKHN5bWJvbF9jb25mLnN5bWZzWzBdIHx8CiAJCQkgICAgKGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoc2VsZiwgbmFtZSwgc2l6ZSkgPT0gTlVMTCkpIHsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIERTT19fT1JJR19GRURPUkE6CisJCWNhc2UgU1lNVEFCX19GRURPUkFfREVCVUdJTkZPOgogCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzL3Vzci9saWIvZGVidWclcy5kZWJ1ZyIsCiAJCQkJIHN5bWJvbF9jb25mLnN5bWZzLCBzZWxmLT5sb25nX25hbWUpOwogCQkJYnJlYWs7Ci0JCWNhc2UgRFNPX19PUklHX1VCVU5UVToKKwkJY2FzZSBTWU1UQUJfX1VCVU5UVV9ERUJVR0lORk86CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMvdXNyL2xpYi9kZWJ1ZyVzIiwKIAkJCQkgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKLQkJY2FzZSBEU09fX09SSUdfQlVJTERJRDogeworCQljYXNlIFNZTVRBQl9fQlVJTERJRF9ERUJVR0lORk86IHsKIAkJCWNoYXIgYnVpbGRfaWRfaGV4W0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CiAKIAkJCWlmICghc2VsZi0+aGFzX2J1aWxkX2lkKQpAQCAtMTUxOSwxMSArMTUxOSwxMSBAQAogCQkJCSBzeW1ib2xfY29uZi5zeW1mcywgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIERTT19fT1JJR19EU086CisJCWNhc2UgU1lNVEFCX19TWVNURU1fUEFUSF9EU086CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMlcyIsCiAJCQkgICAgIHN5bWJvbF9jb25mLnN5bWZzLCBzZWxmLT5sb25nX25hbWUpOwogCQkJYnJlYWs7Ci0JCWNhc2UgRFNPX19PUklHX0dVRVNUX0tNT0RVTEU6CisJCWNhc2UgU1lNVEFCX19HVUVTVF9LTU9EVUxFOgogCQkJaWYgKG1hcC0+Z3JvdXBzICYmIG1hY2hpbmUpCiAJCQkJcm9vdF9kaXIgPSBtYWNoaW5lLT5yb290X2RpcjsKIAkJCWVsc2UKQEAgLTE1MzIsNyArMTUzMiw3IEBACiAJCQkJIHJvb3RfZGlyLCBzZWxmLT5sb25nX25hbWUpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBEU09fX09SSUdfS01PRFVMRToKKwkJY2FzZSBTWU1UQUJfX1NZU1RFTV9QQVRIX0tNT0RVTEU6CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMlcyIsIHN5bWJvbF9jb25mLnN5bWZzLAogCQkJCSBzZWxmLT5sb25nX25hbWUpOwogCQkJYnJlYWs7CkBAIC0xNTQ0LDcgKzE1NDQsNyBAQAogCQkJICovCiAJCQlpZiAod2FudF9zeW10YWIpIHsKIAkJCQl3YW50X3N5bXRhYiA9IDA7Ci0JCQkJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFOworCQkJCXNlbGYtPnN5bXRhYl90eXBlID0gU1lNVEFCX19CVUlMRF9JRF9DQUNIRTsKIAkJCX0gZWxzZQogCQkJCWNvbnRpbnVlOwogCQl9CkBAIC0xNzU3LDkgKzE3NTcsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChtYWNoaW5lX19pc19ob3N0KHNlbGYpKQotCQlkc28tPm9yaWdpbiA9IERTT19fT1JJR19LTU9EVUxFOworCQlkc28tPnN5bXRhYl90eXBlID0gU1lNVEFCX19TWVNURU1fUEFUSF9LTU9EVUxFOwogCWVsc2UKLQkJZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfR1VFU1RfS01PRFVMRTsKKwkJZHNvLT5zeW10YWJfdHlwZSA9IFNZTVRBQl9fR1VFU1RfS01PRFVMRTsKIAltYXBfZ3JvdXBzX19pbnNlcnQoJnNlbGYtPmttYXBzLCBtYXApOwogCXJldHVybiBtYXA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNGQ3ZWQwOS4uNzEzYjBiNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtNDgsMTIgKzQ4LDE3IEBACiAKICNkZWZpbmUgQlVJTERfSURfU0laRSAyMAogCisvKiogc3RydWN0IHN5bWJvbCAtIHN5bXRhYiBlbnRyeQorICoKKyAqIEBpZ25vcmUgLSByZXNvbHZhYmxlIGJ1dCB0b29scyBpZ25vcmUgaXQgKGUuZy4gaWRsZSByb3V0aW5lcykKKyAqLwogc3RydWN0IHN5bWJvbCB7CiAJc3RydWN0IHJiX25vZGUJcmJfbm9kZTsKIAl1NjQJCXN0YXJ0OwogCXU2NAkJZW5kOwogCXUxNgkJbmFtZWxlbjsKIAl1OAkJYmluZGluZzsKKwlib29sCQlpZ25vcmU7CiAJY2hhcgkJbmFtZVswXTsKIH07CiAKQEAgLTEzNyw3ICsxNDIsNyBAQAogCXU4CQkgYW5ub3RhdGVfd2FybmVkOjE7CiAJdTgJCSBzbmFtZV9hbGxvYzoxOwogCXU4CQkgbG5hbWVfYWxsb2M6MTsKLQl1bnNpZ25lZCBjaGFyCSBvcmlnaW47CisJdW5zaWduZWQgY2hhcgkgc3ltdGFiX3R5cGU7CiAJdTgJCSBzb3J0ZWRfYnlfbmFtZTsKIAl1OAkJIGxvYWRlZDsKIAl1OAkJIGJ1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOwpAQCAtMTg4LDE4ICsxOTMsMTggQEAKIHNpemVfdCBkc29fX2ZwcmludGZfc3ltYm9sc19ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApOwogc2l6ZV90IGRzb19fZnByaW50ZihzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKTsKIAotZW51bSBkc29fb3JpZ2luIHsKLQlEU09fX09SSUdfS0VSTkVMID0gMCwKLQlEU09fX09SSUdfR1VFU1RfS0VSTkVMLAotCURTT19fT1JJR19KQVZBX0pJVCwKLQlEU09fX09SSUdfQlVJTERfSURfQ0FDSEUsCi0JRFNPX19PUklHX0ZFRE9SQSwKLQlEU09fX09SSUdfVUJVTlRVLAotCURTT19fT1JJR19CVUlMRElELAotCURTT19fT1JJR19EU08sCi0JRFNPX19PUklHX0dVRVNUX0tNT0RVTEUsCi0JRFNPX19PUklHX0tNT0RVTEUsCi0JRFNPX19PUklHX05PVF9GT1VORCwKK2VudW0gc3ltdGFiX3R5cGUgeworCVNZTVRBQl9fS0FMTFNZTVMgPSAwLAorCVNZTVRBQl9fR1VFU1RfS0FMTFNZTVMsCisJU1lNVEFCX19KQVZBX0pJVCwKKwlTWU1UQUJfX0JVSUxEX0lEX0NBQ0hFLAorCVNZTVRBQl9fRkVET1JBX0RFQlVHSU5GTywKKwlTWU1UQUJfX1VCVU5UVV9ERUJVR0lORk8sCisJU1lNVEFCX19CVUlMRElEX0RFQlVHSU5GTywKKwlTWU1UQUJfX1NZU1RFTV9QQVRIX0RTTywKKwlTWU1UQUJfX0dVRVNUX0tNT0RVTEUsCisJU1lNVEFCX19TWVNURU1fUEFUSF9LTU9EVUxFLAorCVNZTVRBQl9fTk9UX0ZPVU5ELAogfTsKIAogY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdG9wLmMgYi90b29scy9wZXJmL3V0aWwvdG9wLmMKaW5kZXggNzVjZmU0ZC4uYTExZjYwNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RvcC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90b3AuYwpAQCAtMTcxLDcgKzE3MSw3IEBACiB7CiAJc3RydWN0IHN5bV9lbnRyeSAqc3ltZSwgKm47CiAJZmxvYXQgc3VtX2tzYW1wbGVzID0gMC4wOwotCWludCBzbmFwID0gIXRvcC0+ZGlzcGxheV93ZWlnaHRlZCA/IHRvcC0+c3ltX2NvdW50ZXIgOiAwLCBqOworCWludCBzbmFwID0gIXRvcC0+ZGlzcGxheV93ZWlnaHRlZCA/IHRvcC0+c3ltX2V2c2VsLT5pZHggOiAwLCBqOwogCiAJLyogU29ydCB0aGUgYWN0aXZlIHN5bWJvbHMgKi8KIAlwdGhyZWFkX211dGV4X2xvY2soJnRvcC0+YWN0aXZlX3N5bWJvbHNfbG9jayk7CkBAIC0xODQsOSArMTg0LDkgQEAKIAkJaWYgKHN5bWUtPnNuYXBfY291bnQgIT0gMCkgewogCiAJCQlpZiAoKHRvcC0+aGlkZV91c2VyX3N5bWJvbHMgJiYKLQkJCSAgICAgc3ltZS0+b3JpZ2luID09IFBFUkZfUkVDT1JEX01JU0NfVVNFUikgfHwKKwkJCSAgICAgc3ltZS0+bWFwLT5kc28tPmtlcm5lbCA9PSBEU09fVFlQRV9VU0VSKSB8fAogCQkJICAgICh0b3AtPmhpZGVfa2VybmVsX3N5bWJvbHMgJiYKLQkJCSAgICAgc3ltZS0+b3JpZ2luID09IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKSkgeworCQkJICAgICBzeW1lLT5tYXAtPmRzby0+a2VybmVsID09IERTT19UWVBFX0tFUk5FTCkpIHsKIAkJCQlwZXJmX3RvcF9fcmVtb3ZlX2FjdGl2ZV9zeW0odG9wLCBzeW1lKTsKIAkJCQljb250aW51ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90b3AuaCBiL3Rvb2xzL3BlcmYvdXRpbC90b3AuaAppbmRleCA5NmQxY2I3Li5iZmJmOTViIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdG9wLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RvcC5oCkBAIC0xNiw4ICsxNiw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXVuc2lnbmVkIGxvbmcJCXNuYXBfY291bnQ7CiAJZG91YmxlCQkJd2VpZ2h0OwotCWludAkJCXNraXA7Ci0JdTgJCQlvcmlnaW47CiAJc3RydWN0IG1hcAkJKm1hcDsKIAl1bnNpZ25lZCBsb25nCQljb3VudFswXTsKIH07CkBAIC00MSw3ICszOSw3IEBACiAJdTY0CQkgICBleGFjdF9zYW1wbGVzOwogCXU2NAkJICAgZ3Vlc3RfdXNfc2FtcGxlcywgZ3Vlc3Rfa2VybmVsX3NhbXBsZXM7CiAJaW50CQkgICBwcmludF9lbnRyaWVzLCBjb3VudF9maWx0ZXIsIGRlbGF5X3NlY3M7Ci0JaW50CQkgICBkaXNwbGF5X3dlaWdodGVkLCBmcmVxLCByYl9lbnRyaWVzLCBzeW1fY291bnRlcjsKKwlpbnQJCSAgIGRpc3BsYXlfd2VpZ2h0ZWQsIGZyZXEsIHJiX2VudHJpZXM7CiAJcGlkX3QJCSAgIHRhcmdldF9waWQsIHRhcmdldF90aWQ7CiAJYm9vbAkJICAgaGlkZV9rZXJuZWxfc3ltYm9scywgaGlkZV91c2VyX3N5bWJvbHMsIHplcm87CiAJY29uc3QgY2hhcgkgICAqY3B1X2xpc3Q7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCmluZGV4IGQ4ZTYyMmQuLjBhN2VkNWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCkBAIC0yNjQzLDY4ICsyNjQzLDEzIEBACiAJCXByaW50ZigiLiIpOwogCiAJaWYgKGxvY2tfZGVwdGggPCAwKQotCQlwcmludGYoIi4iKTsKKwkJcHJpbnRmKCIuICIpOwogCWVsc2UKLQkJcHJpbnRmKCIlZCIsIGxvY2tfZGVwdGgpOworCQlwcmludGYoIiVkICIsIGxvY2tfZGVwdGgpOwogfQogCi0vKiB0YWtlbiBmcm9tIExpbnV4LCB3cml0dGVuIGJ5IEZyZWRlcmljIFdlaXNiZWNrZXIgKi8KLXN0YXRpYyB2b2lkIHByaW50X2dyYXBoX2NwdShpbnQgY3B1KQotewotCWludCBpOwotCWludCBsb2cxMF90aGlzID0gbG9nMTBfY3B1KGNwdSk7Ci0JaW50IGxvZzEwX2FsbCA9IGxvZzEwX2NwdShjcHVzKTsKLQotCi0JLyoKLQkgKiBTdGFydCB3aXRoIGEgc3BhY2UgY2hhcmFjdGVyIC0gdG8gbWFrZSBpdCBzdGFuZCBvdXQKLQkgKiB0byB0aGUgcmlnaHQgYSBiaXQgd2hlbiB0cmFjZSBvdXRwdXQgaXMgcGFzdGVkIGludG8KLQkgKiBlbWFpbDoKLQkgKi8KLQlwcmludGYoIiAiKTsKLQotCS8qCi0JICogVHJpY2t5IC0gd2Ugc3BhY2UgdGhlIENQVSBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlIG1heAotCSAqIG51bWJlciBvZiBvbmxpbmUgQ1BVcy4gT24gYSAyLWNwdSBzeXN0ZW0gaXQgd291bGQgdGFrZQotCSAqIGEgbWF4aW11bSBvZiAxIGRpZ2l0IC0gb24gYSAxMjggY3B1IHN5c3RlbSBpdCB3b3VsZAotCSAqIHRha2UgdXAgdG8gMyBkaWdpdHM6Ci0JICovCi0JZm9yIChpID0gMDsgaSA8IGxvZzEwX2FsbCAtIGxvZzEwX3RoaXM7IGkrKykKLQkJcHJpbnRmKCIgIik7Ci0KLQlwcmludGYoIiVkKSAiLCBjcHUpOwotfQotCi0jZGVmaW5lIFRSQUNFX0dSQVBIX1BST0NJTkZPX0xFTkdUSAkxNAogI2RlZmluZSBUUkFDRV9HUkFQSF9JTkRFTlQJMgogCi1zdGF0aWMgdm9pZCBwcmludF9ncmFwaF9wcm9jKGludCBwaWQsIGNvbnN0IGNoYXIgKmNvbW0pCi17Ci0JLyogc2lnbiArIGxvZzEwKE1BWF9JTlQpICsgJ1wwJyAqLwotCWNoYXIgcGlkX3N0clsxMV07Ci0JaW50IHNwYWNlcyA9IDA7Ci0JaW50IGxlbjsKLQlpbnQgaTsKLQotCXNwcmludGYocGlkX3N0ciwgIiVkIiwgcGlkKTsKLQotCS8qIDEgc3RhbmRzIGZvciB0aGUgIi0iIGNoYXJhY3RlciAqLwotCWxlbiA9IHN0cmxlbihjb21tKSArIHN0cmxlbihwaWRfc3RyKSArIDE7Ci0KLQlpZiAobGVuIDwgVFJBQ0VfR1JBUEhfUFJPQ0lORk9fTEVOR1RIKQotCQlzcGFjZXMgPSBUUkFDRV9HUkFQSF9QUk9DSU5GT19MRU5HVEggLSBsZW47Ci0KLQkvKiBGaXJzdCBzcGFjZXMgdG8gYWxpZ24gY2VudGVyICovCi0JZm9yIChpID0gMDsgaSA8IHNwYWNlcyAvIDI7IGkrKykKLQkJcHJpbnRmKCIgIik7Ci0KLQlwcmludGYoIiVzLSVzIiwgY29tbSwgcGlkX3N0cik7Ci0KLQkvKiBMYXN0IHNwYWNlcyB0byBhbGlnbiBjZW50ZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3BhY2VzIC0gKHNwYWNlcyAvIDIpOyBpKyspCi0JCXByaW50ZigiICIpOwotfQotCiBzdGF0aWMgc3RydWN0IHJlY29yZCAqCiBnZXRfcmV0dXJuX2Zvcl9sZWFmKGludCBjcHUsIGludCBjdXJfcGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VyX2Z1bmMsCiAJCSAgICBzdHJ1Y3QgcmVjb3JkICpuZXh0KQpAQCAtMjg3NiwyMSArMjgyMSwxMyBAQAogCiBzdGF0aWMgdm9pZAogcHJldHR5X3ByaW50X2Z1bmNfZW50KHZvaWQgKmRhdGEsIGludCBzaXplLCBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAotCQkgICAgICBpbnQgY3B1LCBpbnQgcGlkLCBjb25zdCBjaGFyICpjb21tLAotCQkgICAgICB1bnNpZ25lZCBsb25nIHNlY3MsIHVuc2lnbmVkIGxvbmcgdXNlY3MpCisJCSAgICAgIGludCBjcHUsIGludCBwaWQpCiB7CiAJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CiAJc3RydWN0IHJlY29yZCAqcmVjOwogCXZvaWQgKmNvcHlfZGF0YTsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAotCXByaW50ZigiJTVsdS4lMDZsdSB8ICAiLCBzZWNzLCB1c2Vjcyk7Ci0KLQlwcmludF9ncmFwaF9jcHUoY3B1KTsKLQlwcmludF9ncmFwaF9wcm9jKHBpZCwgY29tbSk7Ci0KLQlwcmludGYoIiB8ICIpOwotCiAJaWYgKGxhdGVuY3lfZm9ybWF0KSB7CiAJCXByaW50X2xhdF9mbXQoZGF0YSwgc2l6ZSk7CiAJCXByaW50ZigiIHwgIik7CkBAIC0yOTIzLDIyICsyODYwLDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1wcmV0dHlfcHJpbnRfZnVuY19yZXQodm9pZCAqZGF0YSwgaW50IHNpemUgX191bnVzZWQsIHN0cnVjdCBldmVudCAqZXZlbnQsCi0JCSAgICAgIGludCBjcHUsIGludCBwaWQsIGNvbnN0IGNoYXIgKmNvbW0sCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgc2VjcywgdW5zaWduZWQgbG9uZyB1c2VjcykKK3ByZXR0eV9wcmludF9mdW5jX3JldCh2b2lkICpkYXRhLCBpbnQgc2l6ZSBfX3VudXNlZCwgc3RydWN0IGV2ZW50ICpldmVudCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmV0dGltZSwgY2FsbHRpbWU7CiAJdW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uLCBkZXB0aDsKIAlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZDsKIAlpbnQgaTsKIAotCXByaW50ZigiJTVsdS4lMDZsdSB8ICAiLCBzZWNzLCB1c2Vjcyk7Ci0KLQlwcmludF9ncmFwaF9jcHUoY3B1KTsKLQlwcmludF9ncmFwaF9wcm9jKHBpZCwgY29tbSk7Ci0KLQlwcmludGYoIiB8ICIpOwotCiAJaWYgKGxhdGVuY3lfZm9ybWF0KSB7CiAJCXByaW50X2xhdF9mbXQoZGF0YSwgc2l6ZSk7CiAJCXByaW50ZigiIHwgIik7CkBAIC0yOTc2LDMxICsyOTA0LDIxIEBACiAKIHN0YXRpYyB2b2lkCiBwcmV0dHlfcHJpbnRfZnVuY19ncmFwaCh2b2lkICpkYXRhLCBpbnQgc2l6ZSwgc3RydWN0IGV2ZW50ICpldmVudCwKLQkJCWludCBjcHUsIGludCBwaWQsIGNvbnN0IGNoYXIgKmNvbW0sCi0JCQl1bnNpZ25lZCBsb25nIHNlY3MsIHVuc2lnbmVkIGxvbmcgdXNlY3MpCisJCQlpbnQgY3B1LCBpbnQgcGlkKQogewogCWlmIChldmVudC0+ZmxhZ3MgJiBFVkVOVF9GTF9JU0ZVTkNFTlQpCi0JCXByZXR0eV9wcmludF9mdW5jX2VudChkYXRhLCBzaXplLCBldmVudCwKLQkJCQkgICAgICBjcHUsIHBpZCwgY29tbSwgc2VjcywgdXNlY3MpOworCQlwcmV0dHlfcHJpbnRfZnVuY19lbnQoZGF0YSwgc2l6ZSwgZXZlbnQsIGNwdSwgcGlkKTsKIAllbHNlIGlmIChldmVudC0+ZmxhZ3MgJiBFVkVOVF9GTF9JU0ZVTkNSRVQpCi0JCXByZXR0eV9wcmludF9mdW5jX3JldChkYXRhLCBzaXplLCBldmVudCwKLQkJCQkgICAgICBjcHUsIHBpZCwgY29tbSwgc2VjcywgdXNlY3MpOworCQlwcmV0dHlfcHJpbnRfZnVuY19yZXQoZGF0YSwgc2l6ZSwgZXZlbnQpOwogCXByaW50ZigiXG4iKTsKIH0KIAotdm9pZCBwcmludF9ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzLAotCQkgIGNoYXIgKmNvbW0pCit2b2lkIHByaW50X3RyYWNlX2V2ZW50KGludCBjcHUsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewogCXN0cnVjdCBldmVudCAqZXZlbnQ7Ci0JdW5zaWduZWQgbG9uZyBzZWNzOwotCXVuc2lnbmVkIGxvbmcgdXNlY3M7CiAJaW50IHR5cGU7CiAJaW50IHBpZDsKIAotCXNlY3MgPSBuc2VjcyAvIE5TRUNTX1BFUl9TRUM7Ci0JbnNlY3MgLT0gc2VjcyAqIE5TRUNTX1BFUl9TRUM7Ci0JdXNlY3MgPSBuc2VjcyAvIE5TRUNTX1BFUl9VU0VDOwotCiAJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKGRhdGEpOwogCiAJZXZlbnQgPSB0cmFjZV9maW5kX2V2ZW50KHR5cGUpOwpAQCAtMzAxMiwxNyArMjkzMCwxMCBAQAogCXBpZCA9IHRyYWNlX3BhcnNlX2NvbW1vbl9waWQoZGF0YSk7CiAKIAlpZiAoZXZlbnQtPmZsYWdzICYgKEVWRU5UX0ZMX0lTRlVOQ0VOVCB8IEVWRU5UX0ZMX0lTRlVOQ1JFVCkpCi0JCXJldHVybiBwcmV0dHlfcHJpbnRfZnVuY19ncmFwaChkYXRhLCBzaXplLCBldmVudCwgY3B1LAotCQkJCQkgICAgICAgcGlkLCBjb21tLCBzZWNzLCB1c2Vjcyk7CisJCXJldHVybiBwcmV0dHlfcHJpbnRfZnVuY19ncmFwaChkYXRhLCBzaXplLCBldmVudCwgY3B1LCBwaWQpOwogCi0JaWYgKGxhdGVuY3lfZm9ybWF0KSB7Ci0JCXByaW50ZigiJTguOHMtJS01ZCAlM2QiLAotCQkgICAgICAgY29tbSwgcGlkLCBjcHUpOworCWlmIChsYXRlbmN5X2Zvcm1hdCkKIAkJcHJpbnRfbGF0X2ZtdChkYXRhLCBzaXplKTsKLQl9IGVsc2UKLQkJcHJpbnRmKCIlMTZzLSUtNWQgWyUwM2RdIiwgY29tbSwgcGlkLCAgY3B1KTsKLQotCXByaW50ZigiICU1bHUuJTA2bHU6ICVzOiAiLCBzZWNzLCB1c2VjcywgZXZlbnQtPm5hbWUpOwogCiAJaWYgKGV2ZW50LT5mbGFncyAmIEVWRU5UX0ZMX0ZBSUxFRCkgewogCQlwcmludGYoIkVWRU5UICclcycgRkFJTEVEIFRPIFBBUlNFXG4iLApAQCAtMzAzMSw3ICsyOTQyLDYgQEAKIAl9CiAKIAlwcmV0dHlfcHJpbnQoZGF0YSwgc2l6ZSwgZXZlbnQpOwotCXByaW50ZigiXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfZmllbGRzKHN0cnVjdCBwcmludF9mbGFnX3N5bSAqZmllbGQpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLmMKaW5kZXggZjdhZjJmYy4uNjZmNGI3OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXNjcmlwdGluZy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1zY3JpcHRpbmcuYwpAQCAtMzYsMTEgKzM2LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHByb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQoaW50IGNwdSBfX3VudXNlZCwKLQkJCQkgICAgICB2b2lkICpkYXRhIF9fdW51c2VkLAotCQkJCSAgICAgIGludCBzaXplIF9fdW51c2VkLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcyBfX3VudXNlZCwKLQkJCQkgICAgICBjaGFyICpjb21tIF9fdW51c2VkKQorc3RhdGljIHZvaWQgcHJvY2Vzc19ldmVudF91bnN1cHBvcnRlZCh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCBfX3VudXNlZCwKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSBfX3VudXNlZCwKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdW51c2VkLAorCQkJCSAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VudXNlZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmggYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaAppbmRleCBiNWYxMmNhLi5iMDRkYTU3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICNpbmNsdWRlICJwYXJzZS1ldmVudHMuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCiAKICNkZWZpbmUgX191bnVzZWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKIApAQCAtMTc2LDggKzE3Nyw3IEBACiAKIGludCBwYXJzZV9mdHJhY2VfZmlsZShjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBpbnQgcGFyc2VfZXZlbnRfZmlsZShjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY2hhciAqc3lzKTsKLXZvaWQgcHJpbnRfZXZlbnQoaW50IGNwdSwgdm9pZCAqZGF0YSwgaW50IHNpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywKLQkJICBjaGFyICpjb21tKTsKK3ZvaWQgcHJpbnRfdHJhY2VfZXZlbnQoaW50IGNwdSwgdm9pZCAqZGF0YSwgaW50IHNpemUpOwogCiBleHRlcm4gaW50IGZpbGVfYmlnZW5kaWFuOwogZXh0ZXJuIGludCBob3N0X2JpZ2VuZGlhbjsKQEAgLTI3OCw4ICsyNzgsMTAgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCWludCAoKnN0YXJ0X3NjcmlwdCkgKGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIAlpbnQgKCpzdG9wX3NjcmlwdCkgKHZvaWQpOwotCXZvaWQgKCpwcm9jZXNzX2V2ZW50KSAoaW50IGNwdSwgdm9pZCAqZGF0YSwgaW50IHNpemUsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzLCBjaGFyICpjb21tKTsKKwl2b2lkICgqcHJvY2Vzc19ldmVudCkgKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJICAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAorCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkgICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKIAlpbnQgKCpnZW5lcmF0ZV9zY3JpcHQpIChjb25zdCBjaGFyICpvdXRmaWxlKTsKIH07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwgYi90b29scy90ZXN0aW5nL2t0ZXN0L2t0ZXN0LnBsCmluZGV4IGJhN2M2M2EuLjhjZTc5MmUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwKKysrIGIvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbApAQCAtMzcsNiArMzcsOCBAQAogJGRlZmF1bHR7IkJVSUxEX09QVElPTlMifQk9ICIiOwogJGRlZmF1bHR7IkJJU0VDVF9TTEVFUF9USU1FIn0JPSA2MDsgICAjIHNsZWVwIHRpbWUgYmV0d2VlbiBiaXNlY3RzCiAkZGVmYXVsdHsiQ0xFQVJfTE9HIn0JCT0gMDsKKyRkZWZhdWx0eyJCSVNFQ1RfTUFOVUFMIn0JPSAwOworJGRlZmF1bHR7IkJJU0VDVF9TS0lQIn0JCT0gMTsKICRkZWZhdWx0eyJTVUNDRVNTX0xJTkUifQk9ICJsb2dpbjoiOwogJGRlZmF1bHR7IkJPT1RFRF9USU1FT1VUIn0JPSAxOwogJGRlZmF1bHR7IkRJRV9PTl9GQUlMVVJFIn0JPSAxOwpAQCAtNDUsNiArNDcsNyBAQAogJGRlZmF1bHR7IlJFQk9PVCJ9CQk9ICJzc2ggXCRTU0hfVVNFUlxAXCRNQUNISU5FIHJlYm9vdCI7CiAkZGVmYXVsdHsiU1RPUF9BRlRFUl9TVUNDRVNTIn0JPSAxMDsKICRkZWZhdWx0eyJTVE9QX0FGVEVSX0ZBSUxVUkUifQk9IDYwOworJGRlZmF1bHR7IlNUT1BfVEVTVF9BRlRFUiJ9CT0gNjAwOwogJGRlZmF1bHR7IkxPQ0FMVkVSU0lPTiJ9CT0gIi10ZXN0IjsKIAogbXkgJGt0ZXN0X2NvbmZpZzsKQEAgLTgxLDYgKzg0LDggQEAKIG15ICRpbl9iaXNlY3QgPSAwOwogbXkgJGJpc2VjdF9iYWQgPSAiIjsKIG15ICRyZXZlcnNlX2Jpc2VjdDsKK215ICRiaXNlY3RfbWFudWFsOworbXkgJGJpc2VjdF9za2lwOwogbXkgJGluX3BhdGNoY2hlY2sgPSAwOwogbXkgJHJ1bl90ZXN0OwogbXkgJHJlZGlyZWN0OwpAQCAtOTgsNiArMTAzLDcgQEAKIG15ICRzdWNjZXNzX2xpbmU7CiBteSAkc3RvcF9hZnRlcl9zdWNjZXNzOwogbXkgJHN0b3BfYWZ0ZXJfZmFpbHVyZTsKK215ICRzdG9wX3Rlc3RfYWZ0ZXI7CiBteSAkYnVpbGRfdGFyZ2V0OwogbXkgJHRhcmdldF9pbWFnZTsKIG15ICRsb2NhbHZlcnNpb247CkBAIC00NjIsNiArNDY4LDEwIEBACiAJYCRwb3dlcl9vZmZgOwogICAgIH0KIAorICAgIGlmIChkZWZpbmVkKCRvcHR7IkxPR19GSUxFIn0pKSB7CisJcHJpbnQgIiBTZWUgJG9wdHtMT0dfRklMRX0gZm9yIG1vcmUgaW5mby5cbiI7CisgICAgfQorCiAgICAgZGllIEBfLCAiXG4iOwogfQogCkBAIC03NjAsOCArNzcwLDEwIEBACiAKICAgICBteSAkc3VjY2Vzc19zdGFydDsKICAgICBteSAkZmFpbHVyZV9zdGFydDsKKyAgICBteSAkbW9uaXRvcl9zdGFydCA9IHRpbWU7CisgICAgbXkgJGRvbmUgPSAwOwogCi0gICAgZm9yICg7OykgeworICAgIHdoaWxlICghJGRvbmUpIHsKIAogCWlmICgkYm9vdGVkKSB7CiAJICAgICRsaW5lID0gd2FpdF9mb3JfaW5wdXQoJG1vbml0b3JfZnAsICRib290ZWRfdGltZW91dCk7CkBAIC03OTYsNyArODA4LDcgQEAKIAl9CiAKIAlpZiAoJGZ1bGxfbGluZSA9fiAvY2FsbCB0cmFjZTovaSkgewotCSAgICBpZiAoISRza2lwX2NhbGxfdHJhY2UpIHsKKwkgICAgaWYgKCEkYnVnICYmICEkc2tpcF9jYWxsX3RyYWNlKSB7CiAJCSRidWcgPSAxOwogCQkkZmFpbHVyZV9zdGFydCA9IHRpbWU7CiAJICAgIH0KQEAgLTgxNiwxMiArODI4LDE5IEBACiAJfQogCiAJaWYgKCRmdWxsX2xpbmUgPX4gL0tlcm5lbCBwYW5pYyAtLykgeworCSAgICAkZmFpbHVyZV9zdGFydCA9IHRpbWU7CiAJICAgICRidWcgPSAxOwogCX0KIAogCWlmICgkbGluZSA9fiAvXG4vKSB7CiAJICAgICRmdWxsX2xpbmUgPSAiIjsKIAl9CisKKwlpZiAoJHN0b3BfdGVzdF9hZnRlciA+IDAgJiYgISRib290ZWQgJiYgISRidWcpIHsKKwkgICAgaWYgKHRpbWUgLSAkbW9uaXRvcl9zdGFydCA+ICRzdG9wX3Rlc3RfYWZ0ZXIpIHsKKwkJJGRvbmUgPSAxOworCSAgICB9CisJfQogICAgIH0KIAogICAgIGNsb3NlKERNRVNHKTsKQEAgLTkyNSw2ICs5NDQsMTggQEAKICAgICByZXR1cm4gMTsKIH0KIAorc3ViIG1ha2Vfb2xkY29uZmlnIHsKKyAgICBteSAoJGRlZmNvbmZpZykgPSBAXzsKKworICAgIGlmICghcnVuX2NvbW1hbmQgIiRkZWZjb25maWcgJG1ha2Ugb2xkbm9jb25maWciKSB7CisJIyBQZXJoYXBzIG9sZG5vY29uZmlnIGRvZXNuJ3QgZXhpc3QgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwKKwkjIHRyeSBhIHllcyAnJyB8IG9sZGNvbmZpZworCWRvcHJpbnQgIm9sZG5vY29uZmlnIGZhaWxlZCwgdHJ5aW5nIHllcyAnJyB8IG1ha2Ugb2xkY29uZmlnXG4iOworCXJ1bl9jb21tYW5kICJ5ZXMgJycgfCAkZGVmY29uZmlnICRtYWtlIG9sZGNvbmZpZyIgb3IKKwkgICAgZG9kaWUgImZhaWxlZCBtYWtlIGNvbmZpZyBvbGRjb25maWciOworICAgIH0KK30KKwogc3ViIGJ1aWxkIHsKICAgICBteSAoJHR5cGUpID0gQF87CiAgICAgbXkgJGRlZmNvbmZpZyA9ICIiOwpAQCAtOTcwLDggKzEwMDEsMTIgQEAKIAkkZGVmY29uZmlnID0gIktDT05GSUdfQUxMQ09ORklHPSRtaW5jb25maWciOwogICAgIH0KIAotICAgIHJ1bl9jb21tYW5kICIkZGVmY29uZmlnICRtYWtlICR0eXBlIiBvcgotCWRvZGllICJmYWlsZWQgbWFrZSBjb25maWciOworICAgIGlmICgkdHlwZSBlcSAib2xkbm9jb25maWciKSB7CisJbWFrZV9vbGRjb25maWcgJGRlZmNvbmZpZzsKKyAgICB9IGVsc2UgeworCXJ1bl9jb21tYW5kICIkZGVmY29uZmlnICRtYWtlICR0eXBlIiBvcgorCSAgICBkb2RpZSAiZmFpbGVkIG1ha2UgY29uZmlnIjsKKyAgICB9CiAKICAgICAkcmVkaXJlY3QgPSAiJGJ1aWxkbG9nIjsKICAgICBpZiAoIXJ1bl9jb21tYW5kICIkbWFrZSAkYnVpbGRfb3B0aW9ucyIpIHsKQEAgLTEwMjUsNiArMTA2MCwyMSBAQAogICAgIGRvcHJpbnQgIiR2ZXJzaW9uXG4iOwogfQogCitzdWIgYW5zd2VyX2Jpc2VjdCB7CisgICAgZm9yICg7OykgeworCWRvcHJpbnQgIlBhc3Mgb3IgZmFpbD8gW3AvZl0iOworCW15ICRhbnMgPSA8U1RESU4+OworCWNob21wICRhbnM7CisJaWYgKCRhbnMgZXEgInAiIHx8ICRhbnMgZXEgIlAiKSB7CisJICAgIHJldHVybiAxOworCX0gZWxzaWYgKCRhbnMgZXEgImYiIHx8ICRhbnMgZXEgIkYiKSB7CisJICAgIHJldHVybiAwOworCX0gZWxzZSB7CisJICAgIHByaW50ICJQbGVhc2UgYW5zd2VyICdQJyBvciAnRidcbiI7CisJfQorICAgIH0KK30KKwogc3ViIGNoaWxkX3J1bl90ZXN0IHsKICAgICBteSAkZmFpbGVkID0gMDsKIApAQCAtMTA3MCw2ICsxMTIwLDcgQEAKIAogCSAgICAjIHdlIGFyZSBub3QgZ3VhcmFudGVlZCB0byBnZXQgYSBmdWxsIGxpbmUKIAkgICAgJGZ1bGxfbGluZSAuPSAkbGluZTsKKwkgICAgZG9wcmludCAkbGluZTsKIAogCSAgICBpZiAoJGZ1bGxfbGluZSA9fiAvY2FsbCB0cmFjZTovaSkgewogCQkkYnVnID0gMTsKQEAgLTEwODYsNiArMTEzNywxOSBAQAogICAgIH0gd2hpbGUgKCEkY2hpbGRfZG9uZSAmJiAhJGJ1Zyk7CiAKICAgICBpZiAoJGJ1ZykgeworCW15ICRmYWlsdXJlX3N0YXJ0ID0gdGltZTsKKwlteSAkbm93OworCWRvIHsKKwkgICAgJGxpbmUgPSB3YWl0X2Zvcl9pbnB1dCgkbW9uaXRvcl9mcCwgMSk7CisJICAgIGlmIChkZWZpbmVkKCRsaW5lKSkgeworCQlkb3ByaW50ICRsaW5lOworCSAgICB9CisJICAgICRub3cgPSB0aW1lOworCSAgICBpZiAoJG5vdyAtICRmYWlsdXJlX3N0YXJ0ID49ICRzdG9wX2FmdGVyX2ZhaWx1cmUpIHsKKwkJbGFzdDsKKwkgICAgfQorCX0gd2hpbGUgKGRlZmluZWQoJGxpbmUpKTsKKwogCWRvcHJpbnQgIkRldGVjdGVkIGtlcm5lbCBjcmFzaCFcbiI7CiAJIyBraWxsIHRoZSBjaGlsZCB3aXRoIGV4dHJlbWUgcHJlanVkaWNlCiAJa2lsbCA5LCAkY2hpbGRfcGlkOwpAQCAtMTEzMSw3ICsxMTk1LDE1IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLSMgcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZQorc3ViIGJpc2VjdF9yZWJvb3QgeworICAgIGRvcHJpbnQgIlJlYm9vdCBhbmQgc2xlZXAgJGJpc2VjdF9zbGVlcF90aW1lIHNlY29uZHNcbiI7CisgICAgcmVib290OworICAgIHN0YXJ0X21vbml0b3I7CisgICAgd2FpdF9mb3JfbW9uaXRvciAkYmlzZWN0X3NsZWVwX3RpbWU7CisgICAgZW5kX21vbml0b3I7Cit9CisKKyMgcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZSwgLTEgb24gc2tpcAogc3ViIHJ1bl9iaXNlY3RfdGVzdCB7CiAgICAgbXkgKCR0eXBlLCAkYnVpbGR0eXBlKSA9IEBfOwogCkBAIC0xMTQ1LDYgKzEyMTcsMTAgQEAKICAgICBidWlsZCAkYnVpbGR0eXBlIG9yICRmYWlsZWQgPSAxOwogCiAgICAgaWYgKCR0eXBlIG5lICJidWlsZCIpIHsKKwlpZiAoJGZhaWxlZCAmJiAkYmlzZWN0X3NraXApIHsKKwkgICAgJGluX2Jpc2VjdCA9IDA7CisJICAgIHJldHVybiAtMTsKKwl9CiAJZG9kaWUgIkZhaWxlZCBvbiBidWlsZCIgaWYgJGZhaWxlZDsKIAogCSMgTm93IGJvb3QgdGhlIGJveApAQCAtMTE1Niw2ICsxMjMyLDEyIEBACiAJbW9uaXRvciBvciAkZmFpbGVkID0gMTsKIAogCWlmICgkdHlwZSBuZSAiYm9vdCIpIHsKKwkgICAgaWYgKCRmYWlsZWQgJiYgJGJpc2VjdF9za2lwKSB7CisJCWVuZF9tb25pdG9yOworCQliaXNlY3RfcmVib290OworCQkkaW5fYmlzZWN0ID0gMDsKKwkJcmV0dXJuIC0xOworCSAgICB9CiAJICAgIGRvZGllICJGYWlsZWQgb24gYm9vdCIgaWYgJGZhaWxlZDsKIAogCSAgICBkb19ydW5fdGVzdCBvciAkZmFpbGVkID0gMTsKQEAgLTExNjgsMTEgKzEyNTAsNyBAQAogCiAJIyByZWJvb3QgdGhlIGJveCB0byBhIGdvb2Qga2VybmVsCiAJaWYgKCR0eXBlIG5lICJidWlsZCIpIHsKLQkgICAgZG9wcmludCAiUmVib290IGFuZCBzbGVlcCAkYmlzZWN0X3NsZWVwX3RpbWUgc2Vjb25kc1xuIjsKLQkgICAgcmVib290OwotCSAgICBzdGFydF9tb25pdG9yOwotCSAgICB3YWl0X2Zvcl9tb25pdG9yICRiaXNlY3Rfc2xlZXBfdGltZTsKLQkgICAgZW5kX21vbml0b3I7CisJICAgIGJpc2VjdF9yZWJvb3Q7CiAJfQogICAgIH0gZWxzZSB7CiAJJHJlc3VsdCA9IDE7CkBAIC0xMTkzLDE2ICsxMjcxLDIyIEBACiAKICAgICBteSAkcmV0ID0gcnVuX2Jpc2VjdF90ZXN0ICR0eXBlLCAkYnVpbGR0eXBlOwogCisgICAgaWYgKCRiaXNlY3RfbWFudWFsKSB7CisJJHJldCA9IGFuc3dlcl9iaXNlY3Q7CisgICAgfQogCiAgICAgIyBBcmUgd2UgbG9va2luZyBmb3Igd2hlcmUgaXQgd29ya2VkLCBub3QgZmFpbGVkPwogICAgIGlmICgkcmV2ZXJzZV9iaXNlY3QpIHsKIAkkcmV0ID0gISRyZXQ7CiAgICAgfQogCi0gICAgaWYgKCRyZXQpIHsKKyAgICBpZiAoJHJldCA+IDApIHsKIAlyZXR1cm4gImdvb2QiOwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNpZiAoJHJldCA9PSAwKSB7CiAJcmV0dXJuICAiYmFkIjsKKyAgICB9IGVsc2lmICgkYmlzZWN0X3NraXApIHsKKwlkb3ByaW50ICJISVQgQSBCQUQgQ09NTUlUIC4uLiBTS0lQUElOR1xuIjsKKwlyZXR1cm4gInNraXAiOwogICAgIH0KIH0KIApAQCAtMTIyMCw2ICsxMzA0LDEzIEBACiAgICAgbXkgJHR5cGUgPSAkb3B0eyJCSVNFQ1RfVFlQRVskaV0ifTsKICAgICBteSAkc3RhcnQgPSAkb3B0eyJCSVNFQ1RfU1RBUlRbJGldIn07CiAgICAgbXkgJHJlcGxheSA9ICRvcHR7IkJJU0VDVF9SRVBMQVlbJGldIn07CisgICAgbXkgJHN0YXJ0X2ZpbGVzID0gJG9wdHsiQklTRUNUX0ZJTEVTWyRpXSJ9OworCisgICAgaWYgKGRlZmluZWQoJHN0YXJ0X2ZpbGVzKSkgeworCSRzdGFydF9maWxlcyA9ICIgLS0gIiAuICRzdGFydF9maWxlczsKKyAgICB9IGVsc2UgeworCSRzdGFydF9maWxlcyA9ICIiOworICAgIH0KIAogICAgICMgY29udmVydCB0byB0cnVlIHNoYTEncwogICAgICRnb29kID0gZ2V0X3NoYTEoJGdvb2QpOwpAQCAtMTI3Myw3ICsxMzY0LDcgQEAKIAkgICAgZGllICJGYWlsZWQgdG8gY2hlY2tvdXQgJGhlYWQiOwogICAgIH0KIAotICAgIHJ1bl9jb21tYW5kICJnaXQgYmlzZWN0IHN0YXJ0IiBvcgorICAgIHJ1bl9jb21tYW5kICJnaXQgYmlzZWN0IHN0YXJ0JHN0YXJ0X2ZpbGVzIiBvcgogCWRvZGllICJjb3VsZCBub3Qgc3RhcnQgYmlzZWN0IjsKIAogICAgIHJ1bl9jb21tYW5kICJnaXQgYmlzZWN0IGdvb2QgJGdvb2QiIG9yCkBAIC0xMzkwLDkgKzE0ODEsNyBAQAogICAgIGNsb3NlKE9VVCk7CiAKICMgICAgZXhpdDsKLSAgICBydW5fY29tbWFuZCAiJG1ha2Ugb2xkbm9jb25maWciIG9yCi0JZG9kaWUgImZhaWxlZCBtYWtlIGNvbmZpZyBvbGRjb25maWciOwotCisgICAgbWFrZV9vbGRjb25maWcgIiI7CiB9CiAKIHN1YiBjb21wYXJlX2NvbmZpZ3MgewpAQCAtMTUwNSw3ICsxNTk0LDkgQEAKIAl9CiAKIAkkcmV0ID0gcnVuX2NvbmZpZ19iaXNlY3RfdGVzdCAkdHlwZTsKLQorCWlmICgkYmlzZWN0X21hbnVhbCkgeworCSAgICAkcmV0ID0gYW5zd2VyX2Jpc2VjdDsKKwl9CiAJaWYgKCRyZXQpIHsKIAkgICAgcHJvY2Vzc19wYXNzZWQgJWN1cnJlbnRfY29uZmlnOwogCSAgICByZXR1cm4gMDsKQEAgLTE1MzYsNyArMTYyNywxMyBAQAogCSRoYWxmID0gaW50KCQjc3RhcnRfbGlzdCAvIDIpOwogICAgIH0gd2hpbGUgKCRoYWxmID4gMCk7CiAKLSAgICAjIHdlIGZvdW5kIGEgc2luZ2xlIGNvbmZpZywgdHJ5IGl0IGFnYWluCisgICAgIyB3ZSBmb3VuZCBhIHNpbmdsZSBjb25maWcsIHRyeSBpdCBhZ2FpbiB1bmxlc3Mgd2UgYXJlIHJ1bm5pbmcgbWFudWFsbHkKKworICAgIGlmICgkYmlzZWN0X21hbnVhbCkgeworCXByb2Nlc3NfZmFpbGVkICRzdGFydF9saXN0WzBdOworCXJldHVybiAxOworICAgIH0KKwogICAgIG15IEB0b3BoYWxmID0gQHN0YXJ0X2xpc3RbMCAuLiAwXTsKIAogICAgICRyZXQgPSBydW5fY29uZmlnX2Jpc2VjdF90ZXN0ICR0eXBlOwpAQCAtMTU5NCw4ICsxNjkxLDcgQEAKICAgICBjbG9zZShJTik7CiAKICAgICAjIE5vdyBydW4gb2xkY29uZmlnIHdpdGggdGhlIG1pbmNvbmZpZyAoYW5kIGFkZGNvbmZpZ3MpCi0gICAgcnVuX2NvbW1hbmQgIiRkZWZjb25maWcgJG1ha2Ugb2xkbm9jb25maWciIG9yCi0JZG9kaWUgImZhaWxlZCBtYWtlIGNvbmZpZyBvbGRjb25maWciOworICAgIG1ha2Vfb2xkY29uZmlnICRkZWZjb25maWc7CiAKICAgICAjIGNoZWNrIHRvIHNlZSB3aGF0IHdlIGxvc3QgKG9yIGdhaW5lZCkKICAgICBvcGVuIChJTiwgJG91dHB1dF9jb25maWcpCkBAIC0xOTA3LDYgKzIwMDMsOCBAQAogICAgICRwb3dlcm9mZl9hZnRlcl9oYWx0ID0gc2V0X3Rlc3Rfb3B0aW9uKCJQT1dFUk9GRl9BRlRFUl9IQUxUIiwgJGkpOwogICAgICRzbGVlcF90aW1lID0gc2V0X3Rlc3Rfb3B0aW9uKCJTTEVFUF9USU1FIiwgJGkpOwogICAgICRiaXNlY3Rfc2xlZXBfdGltZSA9IHNldF90ZXN0X29wdGlvbigiQklTRUNUX1NMRUVQX1RJTUUiLCAkaSk7CisgICAgJGJpc2VjdF9tYW51YWwgPSBzZXRfdGVzdF9vcHRpb24oIkJJU0VDVF9NQU5VQUwiLCAkaSk7CisgICAgJGJpc2VjdF9za2lwID0gc2V0X3Rlc3Rfb3B0aW9uKCJCSVNFQ1RfU0tJUCIsICRpKTsKICAgICAkc3RvcmVfZmFpbHVyZXMgPSBzZXRfdGVzdF9vcHRpb24oIlNUT1JFX0ZBSUxVUkVTIiwgJGkpOwogICAgICR0aW1lb3V0ID0gc2V0X3Rlc3Rfb3B0aW9uKCJUSU1FT1VUIiwgJGkpOwogICAgICRib290ZWRfdGltZW91dCA9IHNldF90ZXN0X29wdGlvbigiQk9PVEVEX1RJTUVPVVQiLCAkaSk7CkBAIC0xOTE0LDYgKzIwMTIsNyBAQAogICAgICRzdWNjZXNzX2xpbmUgPSBzZXRfdGVzdF9vcHRpb24oIlNVQ0NFU1NfTElORSIsICRpKTsKICAgICAkc3RvcF9hZnRlcl9zdWNjZXNzID0gc2V0X3Rlc3Rfb3B0aW9uKCJTVE9QX0FGVEVSX1NVQ0NFU1MiLCAkaSk7CiAgICAgJHN0b3BfYWZ0ZXJfZmFpbHVyZSA9IHNldF90ZXN0X29wdGlvbigiU1RPUF9BRlRFUl9GQUlMVVJFIiwgJGkpOworICAgICRzdG9wX3Rlc3RfYWZ0ZXIgPSBzZXRfdGVzdF9vcHRpb24oIlNUT1BfVEVTVF9BRlRFUiIsICRpKTsKICAgICAkYnVpbGRfdGFyZ2V0ID0gc2V0X3Rlc3Rfb3B0aW9uKCJCVUlMRF9UQVJHRVQiLCAkaSk7CiAgICAgJHNzaF9leGVjID0gc2V0X3Rlc3Rfb3B0aW9uKCJTU0hfRVhFQyIsICRpKTsKICAgICAkc2NwX3RvX3RhcmdldCA9IHNldF90ZXN0X29wdGlvbigiU0NQX1RPX1RBUkdFVCIsICRpKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qvc2FtcGxlLmNvbmYgYi90b29scy90ZXN0aW5nL2t0ZXN0L3NhbXBsZS5jb25mCmluZGV4IDM0MDhjNTkuLjRjNWQ2YmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qvc2FtcGxlLmNvbmYKKysrIGIvdG9vbHMvdGVzdGluZy9rdGVzdC9zYW1wbGUuY29uZgpAQCAtMzA2LDYgKzMwNiwxNCBAQAogIyAoZGVmYXVsdCA2MCkKICNTVE9QX0FGVEVSX0ZBSUxVUkUgPSA2MAogCisjIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKKyMgYSBzcGVjaWZpZWQgdGltZSB0byBzdG9wIHRoZSB0ZXN0IGlmIGl0IG5ldmVyIHN1Y2NlZWRzIG5vciBmYWlscworIyBpcyByZWNvbW1lbmRlZC4KKyMgTm90ZTogdGhpcyBpcyBpZ25vcmVkIGlmIGEgc3VjY2VzcyBvciBmYWlsdXJlIGlzIGRldGVjdGVkLgorIyAoaW4gc2Vjb25kcykKKyMgKGRlZmF1bHQgNjAwLCAtMSBpcyB0byBuZXZlciBzdG9wKQorI1NUT1BfVEVTVF9BRlRFUiA9IDYwMAorCiAjIFN0b3AgdGVzdGluZyBpZiBhIGJ1aWxkIGZhaWxzLiBJZiBzZXQsIHRoZSBzY3JpcHQgd2lsbCBlbmQgaWYKICMgYSBmYWlsdXJlIGlzIGRldGVjdGVkLCBvdGhlcndpc2UgaXQgd2lsbCBzYXZlIG9mZiB0aGUgLmNvbmZpZywKICMgZG1lc2cgYW5kIGJvb3Rsb2cgaW4gYSBkaXJlY3RvcnkgY2FsbGVkCkBAIC01MTksNiArNTI3LDI0IEBACiAjICAgZ2l0IGJpc2VjdCBnb29kLCBnaXQgYmlzZWN0IGJhZCwgYW5kIHJ1bm5pbmcgdGhlIGdpdCBiaXNlY3QgcmVwbGF5CiAjICAgaWYgdGhlIEJJU0VDVF9SRVBMQVkgaXMgc2V0LgogIworIyBCSVNFQ1RfU0tJUCA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCisjCisjICAgSWYgQklTRUNUX1RZUEUgaXMgc2V0IHRvIHRlc3QgYnV0IHRoZSBidWlsZCBmYWlscywga3Rlc3Qgd2lsbAorIyAgIHNpbXBseSBmYWlsIHRoZSB0ZXN0IGFuZCBlbmQgdGhlaXIuIFlvdSBjb3VsZCB1c2UgQklTRUNUX1JFUExBWQorIyAgIGFuZCBCSVNFQ1RfU1RBUlQgdG8gcmVzdW1lIGFmdGVyIHlvdSBmb3VuZCBhIG5ldyBzdGFydGluZyBwb2ludCwKKyMgICBvciB5b3UgY291bGQgc2V0IEJJU0VDVF9TS0lQIHRvIDEuIElmIEJJU0VDVF9TS0lQIGlzIHNldCB0byAxLAorIyAgIHdoZW4gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIEJJU0VDVF9UWVBFIGZhaWxzLCBrdGVzdC5wbCB3aWxsCisjICAgcnVuICJnaXQgYmlzZWN0IHNraXAiIGFuZCB0cnkgYWdhaW4uCisjCisjIEJJU0VDVF9GSUxFUyA9IDxwYXRoPiAob3B0aW9uYWwsIGRlZmF1bHQgdW5kZWZpbmVkKQorIworIyAgIFRvIGp1c3QgcnVuIHRoZSBnaXQgYmlzZWN0IG9uIGEgc3BlY2lmaWMgcGF0aCwgc2V0IEJJU0VDVF9GSUxFUy4KKyMgICBGb3IgZXhhbXBsZToKKyMKKyMgICAgIEJJU0VDVF9GSUxFUyA9IGFyY2gveDg2IGtlcm5lbC90aW1lCisjCisjICAgV2lsbCBydW4gdGhlIGJpc2VjdCB3aXRoICJnaXQgYmlzZWN0IHN0YXJ0IC0tIGFyY2gveDg2IGtlcm5lbC90aW1lIgorIwogIyBCSVNFQ1RfUkVWRVJTRSA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiAjCiAjICAgSW4gdGhvc2Ugc3RyYW5nZSBpbnN0YW5jZXMgd2hlcmUgaXQgd2FzIGJyb2tlbiBmb3JldmVyCkBAIC01MjgsNiArNTU0LDE1IEBACiAjICAgV2l0aCBCSVNFQ1RfUkVWRVJTRSA9IDEsIFRoZSB0ZXN0IHdpbGwgY29uc2lkZXIgZmFpbHVyZXMgYXMKICMgICBnb29kLCBhbmQgc3VjY2VzcyBhcyBiYWQuCiAjCisjIEJJU0VDVF9NQU5VQUwgPSAxIChvcHRpb25hbCwgZGVmYXVsdCAwKQorIworIyAgIEluIGNhc2UgdGhlcmUncyBhIHByb2JsZW0gd2l0aCBhdXRvbWF0aW5nIHRoZSBiaXNlY3QgZm9yCisjICAgd2hhdGV2ZXIgcmVhc29uLiAoQ2FuJ3QgcmVib290LCB3YW50IHRvIGluc3BlY3QgZWFjaCBpdGVyYXRpb24pCisjICAgRG9pbmcgYSBCSVNFQ1RfTUFOVUFMIHdpbGwgaGF2ZSB0aGUgdGVzdCB3YWl0IGZvciB5b3UgdG8KKyMgICB0ZWxsIGl0IGlmIHRoZSB0ZXN0IHBhc3NlZCBvciBmYWlsZWQgYWZ0ZXIgZWFjaCBpdGVyYXRpb24uCisjICAgVGhpcyBpcyBiYXNpY2FsbCB0aGUgc2FtZSBhcyBydW5uaW5nIGdpdCBiaXNlY3QgeW91cnNlbGYKKyMgICBidXQga3Rlc3Qgd2lsbCByZWJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgZm9yIHlvdS4KKyMKICMgQklTRUNUX0NIRUNLID0gMSAob3B0aW9uYWwsIGRlZmF1bHQgMCkKICMKICMgICBKdXN0IHRvIGJlIHN1cmUgdGhlIGdvb2QgaXMgZ29vZCBhbmQgYmFkIGlzIGJhZCwgc2V0dGluZwpAQCAtNjEzLDEwICs2NDgsMTcgQEAKICMKICMgICBDT05GSUdfQklTRUNUIGlzIHRoZSBjb25maWcgdGhhdCBmYWlsZWQgdG8gYm9vdAogIworIyAgIElmIEJJU0VDVF9NQU5VQUwgaXMgc2V0LCBpdCB3aWxsIHBhdXNlIGJldHdlZW4gaXRlcmF0aW9ucy4KKyMgICBUaGlzIGlzIHVzZWZ1bCB0byB1c2UganVzdCBrdGVzdC5wbCBqdXN0IGZvciB0aGUgY29uZmlnIGJpc2VjdC4KKyMgICBJZiB5b3Ugc2V0IGl0IHRvIGJ1aWxkLCBpdCB3aWxsIHJ1biB0aGUgYmlzZWN0IGFuZCB5b3UgY2FuCisjICAgY29udHJvbCB3aGF0IGhhcHBlbnMgaW4gYmV0d2VlbiBpdGVyYXRpb25zLiBJdCB3aWxsIGFzayB5b3UgaWYKKyMgICB0aGUgdGVzdCBzdWNjZWVkZWQgb3Igbm90IGFuZCBjb250aW51ZSB0aGUgY29uZmlnIGJpc2VjdC4KKyMKICMgRXhhbXBsZToKICMgICBURVNUX1NUQVJUCiAjICAgVEVTVF9UWVBFID0gY29uZmlnX2Jpc2VjdAogIyAgIENPTkZJR19CSVNFQ1RfVFlQRSA9IGJ1aWxkCiAjICAgQ09ORklHX0JJU0VDVCA9IC9ob21lL3Rlc3Qvom9uZmlnLWJhZAogIyAgIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1taW4KKyMgICBCSVNFQ1RfTUFOVUFMID0gMQogIwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMWZhMGQyOS4uN2JlZTZkYyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogCiAjaW5jbHVkZSAiY29hbGVzY2VkX21taW8uaCIKICNpbmNsdWRlICJhc3luY19wZi5oIgpAQCAtMTQzOSw3ICsxNDM4LDcgQEAKIAlpZiAobWVtc2xvdCAmJiBtZW1zbG90LT5kaXJ0eV9iaXRtYXApIHsKIAkJdW5zaWduZWQgbG9uZyByZWxfZ2ZuID0gZ2ZuIC0gbWVtc2xvdC0+YmFzZV9nZm47CiAKLQkJZ2VuZXJpY19fX3NldF9sZV9iaXQocmVsX2dmbiwgbWVtc2xvdC0+ZGlydHlfYml0bWFwKTsKKwkJX19zZXRfYml0X2xlKHJlbF9nZm4sIG1lbXNsb3QtPmRpcnR5X2JpdG1hcCk7CiAJfQogfQogCg==